=============================================================================== 0000000040023070 : #endif #include int IMFS_add_node( const char *path, IMFS_jnode_t *node, void *arg ) { 40023070: a9b47bfd stp x29, x30, [sp, #-192]! 40023074: 910003fd mov x29, sp 40023078: a90153f3 stp x19, x20, [sp, #16] 4002307c: aa0103f4 mov x20, x1 40023080: a9025bf5 stp x21, x22, [sp, #32] 40023084: aa0003f5 mov x21, x0 40023088: aa0203f6 mov x22, x2 4002308c: f9001bf7 str x23, [sp, #48] rtems_filesystem_eval_path_context_t ctx; const rtems_filesystem_location_info_t *currentloc; int eval_flags; int rv; mode = node->st_mode; 40023090: b9402437 ldr w23, [x1, #36] mode &= ~rtems_filesystem_umask; 40023094: 97ffff07 bl 40022cb0 40023098: b9401013 ldr w19, [x0, #16] 4002309c: 0a3302f3 bic w19, w23, w19 switch (mode & S_IFMT) { 400230a0: 12140e63 and w3, w19, #0xf000 400230a4: 7140187f cmp w3, #0x6, lsl #12 400230a8: 54000260 b.eq 400230f4 // b.none <== NEVER TAKEN 400230ac: 540001e9 b.ls 400230e8 // b.plast <== ALWAYS TAKEN 400230b0: 52960003 mov w3, #0xb000 // #45056 <== NOT EXECUTED 400230b4: 0a030263 and w3, w19, w3 <== NOT EXECUTED 400230b8: 7140207f cmp w3, #0x8, lsl #12 <== NOT EXECUTED 400230bc: 540001c0 b.eq 400230f4 // b.none <== NOT EXECUTED case S_IFIFO: case S_IFREG: case S_IFSOCK: break; default: errno = EINVAL; 400230c0: 94002e00 bl 4002e8c0 <__errno> return -1; 400230c4: 12800013 mov w19, #0xffffffff // #-1 errno = EINVAL; 400230c8: 528002c1 mov w1, #0x16 // #22 400230cc: b9000001 str w1, [x0] rv = -1; } rtems_filesystem_eval_path_cleanup( &ctx ); return rv; } 400230d0: 2a1303e0 mov w0, w19 400230d4: a94153f3 ldp x19, x20, [sp, #16] 400230d8: a9425bf5 ldp x21, x22, [sp, #32] 400230dc: f9401bf7 ldr x23, [sp, #48] 400230e0: a8cc7bfd ldp x29, x30, [sp], #192 400230e4: d65f03c0 ret switch (mode & S_IFMT) { 400230e8: 51400463 sub w3, w3, #0x1, lsl #12 400230ec: 7213487f tst w3, #0xffffe000 400230f0: 54fffe81 b.ne 400230c0 // b.any currentloc = rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 400230f4: aa1503e1 mov x1, x21 400230f8: 910163e0 add x0, sp, #0x58 400230fc: 52800302 mov w2, #0x18 // #24 40023100: 97fffc88 bl 40022320 static inline bool IMFS_is_imfs_instance( const rtems_filesystem_location_info_t *loc ) { return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; 40023104: f9401400 ldr x0, [x0, #40] if ( IMFS_is_imfs_instance( currentloc ) ) { 40023108: b0000001 adrp x1, 40024000 4002310c: 91114021 add x1, x1, #0x450 40023110: f9400c00 ldr x0, [x0, #24] 40023114: f9402400 ldr x0, [x0, #72] 40023118: eb01001f cmp x0, x1 4002311c: 540001a0 b.eq 40023150 // b.none rtems_filesystem_eval_path_error( &ctx, ENOTSUP ); 40023120: 910163e0 add x0, sp, #0x58 rv = -1; 40023124: 12800013 mov w19, #0xffffffff // #-1 rtems_filesystem_eval_path_error( &ctx, ENOTSUP ); 40023128: 528010c1 mov w1, #0x86 // #134 4002312c: 97fffc99 bl 40022390 rtems_filesystem_eval_path_cleanup( &ctx ); 40023130: 910163e0 add x0, sp, #0x58 40023134: 97fffcb3 bl 40022400 } 40023138: 2a1303e0 mov w0, w19 4002313c: a94153f3 ldp x19, x20, [sp, #16] 40023140: a9425bf5 ldp x21, x22, [sp, #32] 40023144: f9401bf7 ldr x23, [sp, #48] 40023148: a8cc7bfd ldp x29, x30, [sp], #192 4002314c: d65f03c0 ret rtems_filesystem_eval_path_set_path( &ctx, node->name, node->namelen ); 40023150: 79404282 ldrh w2, [x20, #32] ctx->flags = flags; 40023154: 52800c01 mov w1, #0x60 // #96 ctx->path = path; 40023158: f9400e83 ldr x3, [x20, #24] rtems_filesystem_eval_path_continue( &ctx ); 4002315c: 910163e0 add x0, sp, #0x58 ctx->pathlen = pathlen; 40023160: a9058be3 stp x3, x2, [sp, #88] ctx->flags = flags; 40023164: b9007be1 str w1, [sp, #120] 40023168: 97fffbea bl 40022110 if ( rtems_filesystem_eval_path_get_token( &ctx ) == node->name ) { 4002316c: f9400e82 ldr x2, [x20, #24] return ctx->token; 40023170: f94037e0 ldr x0, [sp, #104] 40023174: eb00005f cmp x2, x0 40023178: 540000e0 b.eq 40023194 // b.none if ( rtems_filesystem_eval_path_get_token( &ctx ) != NULL ) { 4002317c: b40001e0 cbz x0, 400231b8 <== NEVER TAKEN rtems_filesystem_eval_path_error( &ctx, EINVAL ); 40023180: 910163e0 add x0, sp, #0x58 40023184: 528002c1 mov w1, #0x16 // #22 rv = -1; 40023188: 12800013 mov w19, #0xffffffff // #-1 rtems_filesystem_eval_path_error( &ctx, EINVAL ); 4002318c: 97fffc81 bl 40022390 40023190: 17ffffe8 b 40023130 node = IMFS_initialize_node( 40023194: 79404283 ldrh w3, [x20, #32] 40023198: aa1603e5 mov x5, x22 4002319c: f9402681 ldr x1, [x20, #72] 400231a0: 2a1303e4 mov w4, w19 400231a4: aa1403e0 mov x0, x20 400231a8: 94000482 bl 400243b0 400231ac: aa0003e1 mov x1, x0 if ( node != NULL ) { 400231b0: b5000080 cbnz x0, 400231c0 400231b4: d503201f nop rv = -1; 400231b8: 12800013 mov w19, #0xffffffff // #-1 400231bc: 17ffffdd b 40023130 parent = currentloc->node_access; 400231c0: f9404bf4 ldr x20, [sp, #144] _Timecounter_Getbintime( &now ); 400231c4: 910123e0 add x0, sp, #0x48 rv = 0; 400231c8: 52800013 mov w19, #0x0 // #0 old_last = tail->previous; 400231cc: 91016282 add x2, x20, #0x58 400231d0: f9403283 ldr x3, [x20, #96] the_node->next = tail; 400231d4: f9000022 str x2, [x1] IMFS_jnode_t *entry_node ) { IMFS_directory_t *dir = (IMFS_directory_t *) dir_node; entry_node->Parent = dir_node; 400231d8: f9000834 str x20, [x1, #16] tail->previous = the_node; 400231dc: f9003281 str x1, [x20, #96] old_last->next = the_node; 400231e0: f9000061 str x1, [x3] the_node->previous = old_last; 400231e4: f9000423 str x3, [x1, #8] _Timecounter_Getbintime( &now ); 400231e8: 9400091e bl 40025660 <_Timecounter_Getbintime> return now.sec; 400231ec: f94027e0 ldr x0, [sp, #72] jnode->stat_ctime = now; 400231f0: a9038280 stp x0, x0, [x20, #56] 400231f4: 17ffffcf b 40023130 ... =============================================================================== 00000000400244c0 : void IMFS_do_nothing_destroy( IMFS_jnode_t *node ) { (void) node; } 400244c0: d65f03c0 ret <== NOT EXECUTED ... =============================================================================== 0000000040022380 : return NULL; } void IMFS_eval_path_devfs( rtems_filesystem_eval_path_context_t *ctx ) { 40022380: a9bb7bfd stp x29, x30, [sp, #-80]! 40022384: 910003fd mov x29, sp 40022388: a9025bf5 stp x21, x22, [sp, #32] 4002238c: aa0003f6 mov x22, x0 40022390: a90363f7 stp x23, x24, [sp, #48] 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; 40022394: 9100a018 add x24, x0, #0x28 return ctx->pathlen; 40022398: 52800020 mov w0, #0x1 // #1 4002239c: a94056d7 ldp x23, x21, [x22] { 400223a0: a90153f3 stp x19, x20, [sp, #16] 400223a4: b0000094 adrp x20, 40033000 <_init> 400223a8: 9119c294 add x20, x20, #0x670 400223ac: f90023f9 str x25, [sp, #64] 400223b0: 91000693 add x19, x20, #0x1 400223b4: 91004694 add x20, x20, #0x11 dir = currentloc->node_access; 400223b8: f9400b19 ldr x25, [x24, #16] && memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0; 400223bc: eb2002bf cmp x21, w0, uxtb 400223c0: 540000e0 b.eq 400223dc // b.none <== NEVER TAKEN for ( i = 0; i < RTEMS_ARRAY_SIZE( IMFS_devfs_dirs ); ++i ) { 400223c4: 91001273 add x19, x19, #0x4 400223c8: eb13029f cmp x20, x19 400223cc: 540002a0 b.eq 40022420 // b.none match = IMFS_devfs_dirs[ i ].len == pathlen 400223d0: 385ff260 ldurb w0, [x19, #-1] && memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0; 400223d4: eb2002bf cmp x21, w0, uxtb 400223d8: 54ffff61 b.ne 400223c4 // b.any 400223dc: aa1503e2 mov x2, x21 400223e0: aa1703e1 mov x1, x23 400223e4: aa1303e0 mov x0, x19 400223e8: 94002569 bl 4002b98c 400223ec: 35fffec0 cbnz w0, 400223c4 <== NEVER TAKEN eval_flags &= ~RTEMS_FS_EXCLUSIVE; 400223f0: b94022c0 ldr w0, [x22, #32] 400223f4: d2800015 mov x21, #0x0 // #0 ctx->pathlen = 0; 400223f8: f90006df str xzr, [x22, #8] 400223fc: 12197800 and w0, w0, #0xffffffbf ctx->flags = flags; 40022400: b90022c0 str w0, [x22, #32] entry = IMFS_devfs_is_dir( ctx, dir ); if ( entry != NULL ) { 40022404: b40000f9 cbz x25, 40022420 <== NEVER TAKEN rtems_filesystem_eval_path_get_path( ctx ), rtems_filesystem_eval_path_get_pathlen( ctx ) ); rtems_filesystem_eval_path_clear_path( ctx ); } } 40022408: a94153f3 ldp x19, x20, [sp, #16] 4002240c: a9425bf5 ldp x21, x22, [sp, #32] 40022410: a94363f7 ldp x23, x24, [sp, #48] 40022414: f94023f9 ldr x25, [sp, #64] 40022418: a8c57bfd ldp x29, x30, [sp], #80 4002241c: d65f03c0 ret return _Chain_Immutable_head( the_chain )->next; 40022420: f9402b33 ldr x19, [x25, #80] return &the_chain->Tail.Node; 40022424: 91016334 add x20, x25, #0x58 while ( current != tail ) { 40022428: eb14027f cmp x19, x20 4002242c: 540000a1 b.ne 40022440 // b.any <== ALWAYS TAKEN 40022430: 14000027 b 400224cc <== NOT EXECUTED return the_node->next; 40022434: f9400273 ldr x19, [x19] 40022438: eb13029f cmp x20, x19 4002243c: 54000480 b.eq 400224cc // b.none match = entry->namelen == pathlen 40022440: 79404260 ldrh w0, [x19, #32] && memcmp( entry->name, path, pathlen ) == 0; 40022444: eb15001f cmp x0, x21 40022448: 54ffff61 b.ne 40022434 // b.any 4002244c: f9400e60 ldr x0, [x19, #24] 40022450: aa1503e2 mov x2, x21 40022454: aa1703e1 mov x1, x23 40022458: 9400254d bl 4002b98c 4002245c: 35fffec0 cbnz w0, 40022434 if ( ( eval_flags & RTEMS_FS_EXCLUSIVE ) == 0 ) { 40022460: b94022c0 ldr w0, [x22, #32] 40022464: 37300240 tbnz w0, #6, 400224ac <== NEVER TAKEN --dir->Node.reference_count; 40022468: 79405320 ldrh w0, [x25, #40] currentloc->node_access_2 = IMFS_generic_get_context_by_node( entry ); 4002246c: a9448a61 ldp x1, x2, [x19, #72] --dir->Node.reference_count; 40022470: 51000400 sub w0, w0, #0x1 40022474: 79005320 strh w0, [x25, #40] } 40022478: f94023f9 ldr x25, [sp, #64] ++entry->reference_count; 4002247c: 79405260 ldrh w0, [x19, #40] loc->handlers = node->control->handlers; 40022480: f9400021 ldr x1, [x1] 40022484: 11000400 add w0, w0, #0x1 40022488: 79005260 strh w0, [x19, #40] currentloc->node_access_2 = IMFS_generic_get_context_by_node( entry ); 4002248c: a9010b13 stp x19, x2, [x24, #16] 40022490: f9001301 str x1, [x24, #32] ctx->pathlen = 0; 40022494: f90006df str xzr, [x22, #8] } 40022498: a94153f3 ldp x19, x20, [sp, #16] 4002249c: a9425bf5 ldp x21, x22, [sp, #32] 400224a0: a94363f7 ldp x23, x24, [sp, #48] 400224a4: a8c57bfd ldp x29, x30, [sp], #80 400224a8: d65f03c0 ret rtems_filesystem_eval_path_error( ctx, EEXIST ); 400224ac: aa1603e0 mov x0, x22 <== NOT EXECUTED 400224b0: 52800221 mov w1, #0x11 // #17 <== NOT EXECUTED } 400224b4: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 400224b8: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 400224bc: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED 400224c0: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED 400224c4: a8c57bfd ldp x29, x30, [sp], #80 <== NOT EXECUTED rtems_filesystem_eval_path_error( ctx, EEXIST ); 400224c8: 17fffc0a b 400214f0 <== NOT EXECUTED ctx->token = token; 400224cc: a900dedf stp xzr, x23, [x22, #8] ctx->tokenlen = tokenlen; 400224d0: f9000ed5 str x21, [x22, #24] } 400224d4: 17ffffcd b 40022408 ... =============================================================================== 00000000400277c0 : ((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next)) void IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { 400277c0: a9bb7bfd stp x29, x30, [sp, #-80]! 400277c4: 910003fd mov x29, sp /* * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ loc = temp_mt_entry->mt_fs_root->location; 400277c8: f9402401 ldr x1, [x0, #72] { 400277cc: a90153f3 stp x19, x20, [sp, #16] loc = temp_mt_entry->mt_fs_root->location; 400277d0: a9411022 ldp x2, x4, [x1, #16] 400277d4: a9401420 ldp x0, x5, [x1] 400277d8: a9420423 ldp x3, x1, [x1, #32] 400277dc: f90013e0 str x0, [sp, #32] jnode = (IMFS_jnode_t *)loc.node_access; 400277e0: aa0203f3 mov x19, x2 return S_ISDIR( node->st_mode ); 400277e4: b9402440 ldr w0, [x2, #36] loc = temp_mt_entry->mt_fs_root->location; 400277e8: f90027e1 str x1, [sp, #72] do { next = jnode->Parent; 400277ec: 12140c00 and w0, w0, #0xf000 loc = temp_mt_entry->mt_fs_root->location; 400277f0: a9028be5 stp x5, x2, [sp, #40] loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 400277f4: 7140101f cmp w0, #0x4, lsl #12 loc->handlers = node->control->handlers; 400277f8: f9402661 ldr x1, [x19, #72] loc = temp_mt_entry->mt_fs_root->location; 400277fc: a9038fe4 stp x4, x3, [sp, #56] next = jnode->Parent; 40027800: f9400a74 ldr x20, [x19, #16] 40027804: f9400020 ldr x0, [x1] loc.node_access = (void *)jnode; 40027808: f9001bf3 str x19, [sp, #48] 4002780c: f90023e0 str x0, [sp, #64] if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 40027810: 54000241 b.ne 40027858 // b.any <== NEVER TAKEN 40027814: d503201f nop return _Chain_Immutable_head( the_chain )->next; 40027818: f9402a61 ldr x1, [x19, #80] return &the_chain->Tail.Node; 4002781c: 91016260 add x0, x19, #0x58 40027820: eb00003f cmp x1, x0 40027824: 540001a0 b.eq 40027858 // b.none if ( IMFS_is_directory( jnode ) ) { if ( jnode_has_children( jnode ) ) jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 40027828: b40003a1 cbz x1, 4002789c <== NEVER TAKEN return S_ISDIR( node->st_mode ); 4002782c: b9402420 ldr w0, [x1, #36] 40027830: aa0103f4 mov x20, x1 40027834: 12140c00 and w0, w0, #0xf000 40027838: aa1403f3 mov x19, x20 loc->handlers = node->control->handlers; 4002783c: f9402661 ldr x1, [x19, #72] if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 40027840: 7140101f cmp w0, #0x4, lsl #12 next = jnode->Parent; 40027844: f9400a74 ldr x20, [x19, #16] 40027848: f9400020 ldr x0, [x1] loc.node_access = (void *)jnode; 4002784c: f9001bf3 str x19, [sp, #48] 40027850: f90023e0 str x0, [sp, #64] if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 40027854: 54fffe20 b.eq 40027818 // b.none result = IMFS_rmnod( NULL, &loc ); 40027858: 910083e1 add x1, sp, #0x20 4002785c: d2800000 mov x0, #0x0 // #0 40027860: 97fff344 bl 40024570 if ( result != 0 ) 40027864: 35000220 cbnz w0, 400278a8 <== NEVER TAKEN IMFS_node_destroy( jnode ); 40027868: aa1303e0 mov x0, x19 4002786c: 97fff2c1 bl 40024370 if ( jnode != NULL ) { 40027870: b4000174 cbz x20, 4002789c return S_ISDIR( node->st_mode ); 40027874: b9402680 ldr w0, [x20, #36] 40027878: 12140c00 and w0, w0, #0xf000 if ( IMFS_is_directory( jnode ) ) { 4002787c: 7140101f cmp w0, #0x4, lsl #12 40027880: 54fffdc1 b.ne 40027838 // b.any <== NEVER TAKEN return _Chain_Immutable_head( the_chain )->next; 40027884: f9402a81 ldr x1, [x20, #80] return &the_chain->Tail.Node; 40027888: 91016282 add x2, x20, #0x58 if ( jnode_has_children( jnode ) ) 4002788c: eb02003f cmp x1, x2 40027890: 54fffcc1 b.ne 40027828 // b.any 40027894: aa1403f3 mov x19, x20 40027898: 17ffffe9 b 4002783c } 4002789c: a94153f3 ldp x19, x20, [sp, #16] 400278a0: a8c57bfd ldp x29, x30, [sp], #80 400278a4: d65f03c0 ret rtems_fatal_error_occurred( 0xdeadbeef ); 400278a8: 5297dde0 mov w0, #0xbeef // #48879 <== NOT EXECUTED 400278ac: 72bbd5a0 movk w0, #0xdead, lsl #16 <== NOT EXECUTED 400278b0: 97fff430 bl 40024970 <== NOT EXECUTED ... =============================================================================== 0000000040026680 : mode_t mode, const IMFS_node_control *node_control, size_t node_size, void *context ) { 40026680: a9b47bfd stp x29, x30, [sp, #-192]! 40026684: 910003fd mov x29, sp 40026688: a90153f3 stp x19, x20, [sp, #16] 4002668c: 2a0103f4 mov w20, w1 40026690: a9025bf5 stp x21, x22, [sp, #32] 40026694: aa0203f5 mov x21, x2 40026698: aa0303f6 mov x22, x3 4002669c: a90363f7 stp x23, x24, [sp, #48] 400266a0: aa0003f8 mov x24, x0 400266a4: aa0403f7 mov x23, x4 int rv = 0; mode &= ~rtems_filesystem_umask; 400266a8: 97fffc9e bl 40025920 400266ac: b9401013 ldr w19, [x0, #16] 400266b0: 0a330293 bic w19, w20, w19 switch (mode & S_IFMT) { 400266b4: 12140e65 and w5, w19, #0xf000 400266b8: 714018bf cmp w5, #0x6, lsl #12 400266bc: 54000260 b.eq 40026708 // b.none 400266c0: 540001e9 b.ls 400266fc // b.plast 400266c4: 52960005 mov w5, #0xb000 // #45056 400266c8: 0a050265 and w5, w19, w5 400266cc: 714020bf cmp w5, #0x8, lsl #12 400266d0: 540001c0 b.eq 40026708 // b.none <== ALWAYS TAKEN case S_IFIFO: case S_IFREG: case S_IFSOCK: break; default: errno = EINVAL; 400266d4: 9400386e bl 4003488c <__errno> rv = -1; 400266d8: 12800013 mov w19, #0xffffffff // #-1 errno = EINVAL; 400266dc: 528002c1 mov w1, #0x16 // #22 400266e0: b9000001 str w1, [x0] rtems_filesystem_eval_path_cleanup( &ctx ); } return rv; } 400266e4: 2a1303e0 mov w0, w19 400266e8: a94153f3 ldp x19, x20, [sp, #16] 400266ec: a9425bf5 ldp x21, x22, [sp, #32] 400266f0: a94363f7 ldp x23, x24, [sp, #48] 400266f4: a8cc7bfd ldp x29, x30, [sp], #192 400266f8: d65f03c0 ret switch (mode & S_IFMT) { 400266fc: 514004a5 sub w5, w5, #0x1, lsl #12 40026700: 721348bf tst w5, #0xffffe000 40026704: 54fffe81 b.ne 400266d4 // b.any rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40026708: 52800f02 mov w2, #0x78 // #120 4002670c: aa1803e1 mov x1, x24 40026710: 910163e0 add x0, sp, #0x58 40026714: 97fff9af bl 40024dd0 return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; 40026718: f9401402 ldr x2, [x0, #40] if ( IMFS_is_imfs_instance( currentloc ) ) { 4002671c: b0000001 adrp x1, 40027000 40026720: 910cc021 add x1, x1, #0x330 rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40026724: aa0003f4 mov x20, x0 40026728: f9400c42 ldr x2, [x2, #24] if ( IMFS_is_imfs_instance( currentloc ) ) { 4002672c: f9402442 ldr x2, [x2, #72] 40026730: eb01005f cmp x2, x1 40026734: 540001a0 b.eq 40026768 // b.none rtems_filesystem_eval_path_error( &ctx, ENOTSUP ); 40026738: 910163e0 add x0, sp, #0x58 rv = -1; 4002673c: 12800013 mov w19, #0xffffffff // #-1 rtems_filesystem_eval_path_error( &ctx, ENOTSUP ); 40026740: 528010c1 mov w1, #0x86 // #134 40026744: 97fff9ff bl 40024f40 rtems_filesystem_eval_path_cleanup( &ctx ); 40026748: 910163e0 add x0, sp, #0x58 4002674c: 97fffa19 bl 40024fb0 } 40026750: 2a1303e0 mov w0, w19 40026754: a94153f3 ldp x19, x20, [sp, #16] 40026758: a9425bf5 ldp x21, x22, [sp, #32] 4002675c: a94363f7 ldp x23, x24, [sp, #48] 40026760: a8cc7bfd ldp x29, x30, [sp], #192 40026764: d65f03c0 ret IMFS_jnode_t *new_node = IMFS_create_node( 40026768: a94693e3 ldp x3, x4, [sp, #104] 4002676c: 2a1303e5 mov w5, w19 40026770: aa1703e6 mov x6, x23 40026774: aa1603e2 mov x2, x22 40026778: aa1503e1 mov x1, x21 rv = -1; 4002677c: 12800013 mov w19, #0xffffffff // #-1 IMFS_jnode_t *new_node = IMFS_create_node( 40026780: 9400252c bl 4002fc30 if ( new_node != NULL ) { 40026784: b4fffe20 cbz x0, 40026748 IMFS_jnode_t *parent = currentloc->node_access; 40026788: f9400a94 ldr x20, [x20, #16] _Timecounter_Getbintime( &now ); 4002678c: 910123e0 add x0, sp, #0x48 40026790: 94000bb8 bl 40029670 <_Timecounter_Getbintime> int rv = 0; 40026794: 52800013 mov w19, #0x0 // #0 return now.sec; 40026798: f94027e0 ldr x0, [sp, #72] jnode->stat_ctime = now; 4002679c: a9038280 stp x0, x0, [x20, #56] } 400267a0: 17ffffea b 40026748 ... =============================================================================== 0000000040024090 : { 40024090: a9ba7bfd stp x29, x30, [sp, #-96]! 40024094: 910003fd mov x29, sp 40024098: a90153f3 stp x19, x20, [sp, #16] 4002409c: 2a0303f3 mov w19, w3 400240a0: aa0203f4 mov x20, x2 400240a4: a9046bf9 stp x25, x26, [sp, #64] 400240a8: aa0103f9 mov x25, x1 if ( last_byte > memfile->File.size ) { 400240ac: 0b010061 add w1, w3, w1 400240b0: f9402803 ldr x3, [x0, #80] { 400240b4: a90363f7 stp x23, x24, [sp, #48] 400240b8: aa0003f8 mov x24, x0 if ( last_byte > memfile->File.size ) { 400240bc: eb03003f cmp x1, x3 400240c0: 54000748 b.hi 400241a8 // b.pmore start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 400240c4: a9025bf5 stp x21, x22, [sp, #32] 400240c8: 900000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 400240cc: b941a815 ldr w21, [x0, #424] copied = 0; 400240d0: 52800017 mov w23, #0x0 // #0 start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 400240d4: 93407ea0 sxtw x0, w21 400240d8: 9ac00f3a sdiv x26, x25, x0 400240dc: 9b00e759 msub x25, x26, x0, x25 block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 400240e0: 2a1a03f6 mov w22, w26 if ( start_offset ) { 400240e4: 35000799 cbnz w25, 400241d4 while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 400240e8: 6b15027f cmp w19, w21 400240ec: 54000323 b.cc 40024150 // b.lo, b.ul, b.last memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 400240f0: 2a1503f9 mov w25, w21 400240f4: 14000008 b 40024114 400240f8: f9400000 ldr x0, [x0] src += to_copy; 400240fc: 8b190294 add x20, x20, x25 block++; 40024100: 110006d6 add w22, w22, #0x1 40024104: 0b1502f7 add w23, w23, w21 memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 40024108: 94002b60 bl 4002ee88 while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4002410c: 6b1302bf cmp w21, w19 40024110: 54000208 b.hi 40024150 // b.pmore block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 ); 40024114: 2a1603e1 mov w1, w22 40024118: 52800002 mov w2, #0x0 // #0 4002411c: aa1803e0 mov x0, x24 40024120: 97fffe60 bl 40023aa0 memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 40024124: aa1403e1 mov x1, x20 40024128: aa1903e2 mov x2, x25 my_length -= to_copy; 4002412c: 4b150273 sub w19, w19, w21 if ( !block_ptr ) 40024130: b5fffe40 cbnz x0, 400240f8 <== ALWAYS TAKEN return copied; 40024134: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 40024138: 93407ee0 sxtw x0, w23 <== NOT EXECUTED } 4002413c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 40024140: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED 40024144: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED 40024148: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED 4002414c: d65f03c0 ret <== NOT EXECUTED if ( my_length ) { 40024150: 34000173 cbz w19, 4002417c block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 ); 40024154: 2a1603e1 mov w1, w22 40024158: aa1803e0 mov x0, x24 4002415c: 52800002 mov w2, #0x0 // #0 40024160: 97fffe50 bl 40023aa0 if ( !block_ptr ) 40024164: b4fffe80 cbz x0, 40024134 <== NEVER TAKEN memcpy( &(*block_ptr)[ 0 ], src, my_length ); 40024168: f9400000 ldr x0, [x0] copied += to_copy; 4002416c: 0b1302f7 add w23, w23, w19 memcpy( &(*block_ptr)[ 0 ], src, my_length ); 40024170: aa1403e1 mov x1, x20 40024174: 2a1303e2 mov w2, w19 40024178: 94002b44 bl 4002ee88 _Timecounter_Getbintime( &now ); 4002417c: 910143e0 add x0, sp, #0x50 40024180: 94000538 bl 40025660 <_Timecounter_Getbintime> return now.sec; 40024184: f9402be1 ldr x1, [sp, #80] return copied; 40024188: 93407ee0 sxtw x0, w23 jnode->stat_ctime = now; 4002418c: a9425bf5 ldp x21, x22, [sp, #32] 40024190: a9038701 stp x1, x1, [x24, #56] } 40024194: a94153f3 ldp x19, x20, [sp, #16] 40024198: a94363f7 ldp x23, x24, [sp, #48] 4002419c: a9446bf9 ldp x25, x26, [sp, #64] 400241a0: a8c67bfd ldp x29, x30, [sp], #96 400241a4: d65f03c0 ret bool zero_fill = start > memfile->File.size; 400241a8: eb19007f cmp x3, x25 status = IMFS_memfile_extend( memfile, zero_fill, last_byte ); 400241ac: aa0103e2 mov x2, x1 400241b0: 1a9f27e1 cset w1, cc // cc = lo, ul, last 400241b4: 97fffec7 bl 40023cd0 if ( status ) 400241b8: 34fff860 cbz w0, 400240c4 return status; 400241bc: 93407c00 sxtw x0, w0 } 400241c0: a94153f3 ldp x19, x20, [sp, #16] 400241c4: a94363f7 ldp x23, x24, [sp, #48] 400241c8: a9446bf9 ldp x25, x26, [sp, #64] 400241cc: a8c67bfd ldp x29, x30, [sp], #96 400241d0: d65f03c0 ret block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 ); 400241d4: 2a1a03e1 mov w1, w26 400241d8: aa1803e0 mov x0, x24 400241dc: 52800002 mov w2, #0x0 // #0 400241e0: 97fffe30 bl 40023aa0 400241e4: aa0003e4 mov x4, x0 return copied; 400241e8: d2800000 mov x0, #0x0 // #0 if ( !block_ptr ) 400241ec: b40001a4 cbz x4, 40024220 <== NEVER TAKEN to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; 400241f0: 4b1902a3 sub w3, w21, w25 memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 400241f4: aa1403e1 mov x1, x20 400241f8: f9400080 ldr x0, [x4] 400241fc: 6b03027f cmp w19, w3 40024200: 1a839262 csel w2, w19, w3, ls // ls = plast 40024204: 1a839277 csel w23, w19, w3, ls // ls = plast block++; 40024208: 11000756 add w22, w26, #0x1 my_length -= to_copy; 4002420c: 4b170273 sub w19, w19, w23 src += to_copy; 40024210: 8b020294 add x20, x20, x2 memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 40024214: 8b394000 add x0, x0, w25, uxtw 40024218: 94002b1c bl 4002ee88 copied += to_copy; 4002421c: 17ffffb3 b 400240e8 40024220: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 40024224: 17ffffc6 b 4002413c <== NOT EXECUTED ... =============================================================================== 0000000040024340 : #endif #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40024340: a9bf7bfd stp x29, x30, [sp, #-16]! 40024344: aa0003e1 mov x1, x0 40024348: 910003fd mov x29, sp int rv = 0; IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access; 4002434c: f9402000 ldr x0, [x0, #64] 40024350: f9400802 ldr x2, [x0, #16] return S_ISDIR( node->st_mode ); 40024354: b9402440 ldr w0, [x2, #36] 40024358: 12140c00 and w0, w0, #0xf000 if ( IMFS_is_directory( node ) ) { 4002435c: 7140101f cmp w0, #0x4, lsl #12 40024360: 54000181 b.ne 40024390 // b.any IMFS_directory_t *dir = (IMFS_directory_t *) node; if ( dir->mt_fs == NULL ) { 40024364: f9403440 ldr x0, [x2, #104] 40024368: b5000080 cbnz x0, 40024378 <== NEVER TAKEN dir->mt_fs = mt_entry; 4002436c: f9003441 str x1, [x2, #104] errno = ENOTDIR; rv = -1; } return rv; } 40024370: a8c17bfd ldp x29, x30, [sp], #16 40024374: d65f03c0 ret errno = EBUSY; 40024378: 94002952 bl 4002e8c0 <__errno> <== NOT EXECUTED 4002437c: aa0003e1 mov x1, x0 <== NOT EXECUTED 40024380: 52800202 mov w2, #0x10 // #16 <== NOT EXECUTED rv = -1; 40024384: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED errno = EBUSY; 40024388: b9000022 str w2, [x1] <== NOT EXECUTED rv = -1; 4002438c: 17fffff9 b 40024370 <== NOT EXECUTED errno = ENOTDIR; 40024390: 9400294c bl 4002e8c0 <__errno> 40024394: aa0003e1 mov x1, x0 40024398: 52800282 mov w2, #0x14 // #20 rv = -1; 4002439c: 12800000 mov w0, #0xffffffff // #-1 errno = ENOTDIR; 400243a0: b9000022 str w2, [x1] return rv; 400243a4: 17fffff3 b 40024370 ... =============================================================================== 0000000040028c80 : { return dir->mt_fs != NULL; } IMFS_jnode_t *IMFS_node_remove_directory( IMFS_jnode_t *node ) { 40028c80: a9bf7bfd stp x29, x30, [sp, #-16]! return &the_chain->Tail.Node; 40028c84: 91016001 add x1, x0, #0x58 40028c88: 910003fd mov x29, sp IMFS_directory_t *dir = (IMFS_directory_t *) node; if ( !rtems_chain_is_empty( &dir->Entries ) ) { 40028c8c: f9402802 ldr x2, [x0, #80] 40028c90: eb01005f cmp x2, x1 40028c94: 54000100 b.eq 40028cb4 // b.none errno = ENOTEMPTY; 40028c98: 9400170a bl 4002e8c0 <__errno> 40028c9c: aa0003e1 mov x1, x0 40028ca0: 52800b42 mov w2, #0x5a // #90 dir = NULL; 40028ca4: d2800000 mov x0, #0x0 // #0 errno = ENOTEMPTY; 40028ca8: b9000022 str w2, [x1] errno = EBUSY; dir = NULL; } return &dir->Node; } 40028cac: a8c17bfd ldp x29, x30, [sp], #16 40028cb0: d65f03c0 ret } else if ( IMFS_is_mount_point( dir ) ) { 40028cb4: f9403401 ldr x1, [x0, #104] 40028cb8: b4ffffa1 cbz x1, 40028cac <== ALWAYS TAKEN errno = EBUSY; 40028cbc: 94001701 bl 4002e8c0 <__errno> <== NOT EXECUTED 40028cc0: aa0003e1 mov x1, x0 <== NOT EXECUTED 40028cc4: 52800202 mov w2, #0x10 // #16 <== NOT EXECUTED dir = NULL; 40028cc8: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED errno = EBUSY; 40028ccc: b9000022 str w2, [x1] <== NOT EXECUTED } 40028cd0: a8c17bfd ldp x29, x30, [sp], #16 <== NOT EXECUTED 40028cd4: d65f03c0 ret <== NOT EXECUTED ... =============================================================================== 0000000040024870 : sym_link = loc->node_access; 40024870: f9400804 ldr x4, [x0, #16] for( i=0; ((iname[i] != '\0')); i++ ) 40024874: d2800000 mov x0, #0x0 // #0 40024878: b50000c2 cbnz x2, 40024890 <== ALWAYS TAKEN 4002487c: 14000008 b 4002489c <== NOT EXECUTED buf[i] = sym_link->name[i]; 40024880: 38206823 strb w3, [x1, x0] for( i=0; ((iname[i] != '\0')); i++ ) 40024884: 91000400 add x0, x0, #0x1 40024888: eb02001f cmp x0, x2 4002488c: 54000080 b.eq 4002489c // b.none 40024890: f9402883 ldr x3, [x4, #80] 40024894: 38606863 ldrb w3, [x3, x0] 40024898: 35ffff43 cbnz w3, 40024880 } 4002489c: d65f03c0 ret =============================================================================== 0000000040024520 : const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen ) { 40024520: a9bb7bfd stp x29, x30, [sp, #-80]! 40024524: 910003fd mov x29, sp 40024528: a90153f3 stp x19, x20, [sp, #16] /* * FIXME: Due to insufficient checks we can create inaccessible nodes with * this operation. */ node = oldloc->node_access; 4002452c: f9400833 ldr x19, [x1, #16] { 40024530: a90363f7 stp x23, x24, [sp, #48] new_parent = newparentloc->node_access; 40024534: f9400857 ldr x23, [x2, #16] if ( node->Parent == NULL ) { 40024538: f9400a60 ldr x0, [x19, #16] 4002453c: b4000820 cbz x0, 40024640 <== NEVER TAKEN 40024540: a9025bf5 stp x21, x22, [sp, #32] rtems_set_errno_and_return_minus_one( EINVAL ); } if ( namelen >= IMFS_NAME_MAX ) { 40024544: f103f89f cmp x4, #0xfe 40024548: aa0403f5 mov x21, x4 4002454c: 540006c8 b.hi 40024624 // b.pmore rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); } control = malloc( sizeof( *control ) + namelen ); 40024550: aa0303f6 mov x22, x3 40024554: 9100a080 add x0, x4, #0x28 40024558: 97fff432 bl 40021620 4002455c: aa0003f4 mov x20, x0 if ( control == NULL ) { 40024560: b40007c0 cbz x0, 40024658 <== NEVER TAKEN rtems_set_errno_and_return_minus_one( ENOMEM ); } memcpy( control->name, name, namelen ); 40024564: 9100a018 add x24, x0, #0x28 40024568: aa1603e1 mov x1, x22 4002456c: aa1803e0 mov x0, x24 40024570: aa1503e2 mov x2, x21 40024574: 94002a45 bl 4002ee88 if ( node->control->node_destroy == IMFS_renamed_destroy ) { 40024578: 90000016 adrp x22, 40024000 4002457c: 911382d6 add x22, x22, #0x4e0 40024580: f9402661 ldr x1, [x19, #72] 40024584: f9400c20 ldr x0, [x1, #24] 40024588: eb16001f cmp x0, x22 4002458c: 54000400 b.eq 4002460c // b.none IMFS_restore_replaced_control( node ); } control->Base = *node->control; 40024590: f9400020 ldr x0, [x1] old_last = tail->previous; 40024594: 910162e2 add x2, x23, #0x58 next = the_node->next; 40024598: f9400264 ldr x4, [x19] 4002459c: f9000280 str x0, [x20] _Timecounter_Getbintime( &now ); 400245a0: 910103e0 add x0, sp, #0x40 400245a4: f9400423 ldr x3, [x1, #8] 400245a8: f9000683 str x3, [x20, #8] previous = the_node->previous; 400245ac: f9400663 ldr x3, [x19, #8] 400245b0: f9400825 ldr x5, [x1, #16] control->Base.node_destroy = IMFS_renamed_destroy; 400245b4: a9015a85 stp x5, x22, [x20, #16] control->replaced = node->control; 400245b8: f9001281 str x1, [x20, #32] node->control = &control->Base; node->name = control->name; 400245bc: f9000e78 str x24, [x19, #24] node->namelen = namelen; 400245c0: 79004275 strh w21, [x19, #32] node->control = &control->Base; 400245c4: f9002674 str x20, [x19, #72] next->previous = previous; 400245c8: f9000483 str x3, [x4, #8] old_last = tail->previous; 400245cc: f94032e1 ldr x1, [x23, #96] previous->next = next; 400245d0: f9000064 str x4, [x3] the_node->next = tail; 400245d4: f9000262 str x2, [x19] entry_node->Parent = dir_node; 400245d8: f9000a77 str x23, [x19, #16] tail->previous = the_node; 400245dc: f90032f3 str x19, [x23, #96] old_last->next = the_node; 400245e0: f9000033 str x19, [x1] the_node->previous = old_last; 400245e4: f9000661 str x1, [x19, #8] _Timecounter_Getbintime( &now ); 400245e8: 9400041e bl 40025660 <_Timecounter_Getbintime> return now.sec; 400245ec: f94023e1 ldr x1, [sp, #64] IMFS_remove_from_directory( node ); IMFS_add_to_directory( new_parent, node ); IMFS_update_ctime( node ); return 0; 400245f0: 52800000 mov w0, #0x0 // #0 jnode->stat_ctime = _IMFS_get_time(); 400245f4: a9425bf5 ldp x21, x22, [sp, #32] 400245f8: f9002261 str x1, [x19, #64] } 400245fc: a94153f3 ldp x19, x20, [sp, #16] 40024600: a94363f7 ldp x23, x24, [sp, #48] 40024604: a8c57bfd ldp x29, x30, [sp], #80 40024608: d65f03c0 ret node->control = control->replaced; 4002460c: f9401020 ldr x0, [x1, #32] 40024610: f9002660 str x0, [x19, #72] free( control ); 40024614: aa0103e0 mov x0, x1 40024618: 94000eea bl 400281c0 control->Base = *node->control; 4002461c: f9402661 ldr x1, [x19, #72] } 40024620: 17ffffdc b 40024590 rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 40024624: 940028a7 bl 4002e8c0 <__errno> 40024628: aa0003e1 mov x1, x0 4002462c: 52800b62 mov w2, #0x5b // #91 40024630: 12800000 mov w0, #0xffffffff // #-1 40024634: a9425bf5 ldp x21, x22, [sp, #32] 40024638: b9000022 str w2, [x1] 4002463c: 17fffff0 b 400245fc rtems_set_errno_and_return_minus_one( EINVAL ); 40024640: 940028a0 bl 4002e8c0 <__errno> <== NOT EXECUTED 40024644: aa0003e1 mov x1, x0 <== NOT EXECUTED 40024648: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED 4002464c: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED 40024650: b9000022 str w2, [x1] <== NOT EXECUTED 40024654: 17ffffea b 400245fc <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 40024658: 9400289a bl 4002e8c0 <__errno> <== NOT EXECUTED 4002465c: aa0003e1 mov x1, x0 <== NOT EXECUTED 40024660: 52800182 mov w2, #0xc // #12 <== NOT EXECUTED 40024664: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED 40024668: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 4002466c: b9000022 str w2, [x1] <== NOT EXECUTED 40024670: 17ffffe3 b 400245fc <== NOT EXECUTED ... =============================================================================== 00000000400248a0 : #endif #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 400248a0: a9bf7bfd stp x29, x30, [sp, #-16]! 400248a4: 910003fd mov x29, sp int rv = 0; IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access; 400248a8: f9402001 ldr x1, [x0, #64] 400248ac: f9400822 ldr x2, [x1, #16] return S_ISDIR( node->st_mode ); 400248b0: b9402441 ldr w1, [x2, #36] 400248b4: 12140c21 and w1, w1, #0xf000 if ( IMFS_is_directory( node ) ) { 400248b8: 7140103f cmp w1, #0x4, lsl #12 400248bc: 540001c1 b.ne 400248f4 // b.any <== NEVER TAKEN IMFS_directory_t *dir = (IMFS_directory_t *) node; if ( dir->mt_fs == mt_entry ) { 400248c0: f9403441 ldr x1, [x2, #104] 400248c4: eb00003f cmp x1, x0 400248c8: 540000a1 b.ne 400248dc // b.any <== NEVER TAKEN int rv = 0; 400248cc: 52800000 mov w0, #0x0 // #0 dir->mt_fs = NULL; 400248d0: f900345f str xzr, [x2, #104] errno = ENOTDIR; rv = -1; } return rv; } 400248d4: a8c17bfd ldp x29, x30, [sp], #16 400248d8: d65f03c0 ret errno = EINVAL; 400248dc: 940027f9 bl 4002e8c0 <__errno> <== NOT EXECUTED 400248e0: aa0003e1 mov x1, x0 <== NOT EXECUTED 400248e4: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED rv = -1; 400248e8: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED errno = EINVAL; 400248ec: b9000022 str w2, [x1] <== NOT EXECUTED rv = -1; 400248f0: 17fffff9 b 400248d4 <== NOT EXECUTED errno = ENOTDIR; 400248f4: 940027f3 bl 4002e8c0 <__errno> <== NOT EXECUTED 400248f8: aa0003e1 mov x1, x0 <== NOT EXECUTED 400248fc: 52800282 mov w2, #0x14 // #20 <== NOT EXECUTED rv = -1; 40024900: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED errno = ENOTDIR; 40024904: b9000022 str w2, [x1] <== NOT EXECUTED return rv; 40024908: 17fffff3 b 400248d4 <== NOT EXECUTED 4002490c: 00000000 udf #0 =============================================================================== 0000000040028b60 : rtems_libio_t *iop, off_t length ) { return 0; } 40028b60: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED 40028b64: d65f03c0 ret <== NOT EXECUTED ... =============================================================================== 0000000040023910 : int rtems_tarfs_load( const char *mountpoint, uint8_t *tar_image, size_t tar_size ) { 40023910: d10943ff sub sp, sp, #0x250 40023914: a9007bfd stp x29, x30, [sp] 40023918: 910003fd mov x29, sp 4002391c: a90153f3 stp x19, x20, [sp, #16] 40023920: aa0203f4 mov x20, x2 40023924: a9025bf5 stp x21, x22, [sp, #32] 40023928: aa0103f5 mov x21, x1 4002392c: aa0003f6 mov x22, x0 char buf[ 156 + UNTAR_FILE_NAME_SIZE ]; size_t len; Untar_HeaderContext ctx; unsigned long ptr; len = strlen( mountpoint ); 40023930: 94002e94 bl 4002f380 if ( len >= sizeof( buf ) - UNTAR_FILE_NAME_SIZE - 2 ) { 40023934: f102641f cmp x0, #0x99 40023938: 54000728 b.hi 40023a1c // b.pmore <== NEVER TAKEN return -1; } eval_flags = RTEMS_FS_FOLLOW_LINK; loc = rtems_filesystem_eval_path_start( &eval_ctx, mountpoint, eval_flags ); 4002393c: aa1603e1 mov x1, x22 40023940: 52800302 mov w2, #0x18 // #24 40023944: aa0003f3 mov x19, x0 40023948: 910123e0 add x0, sp, #0x48 4002394c: f9001bf7 str x23, [sp, #48] 40023950: 97fff9f0 bl 40022110 40023954: aa0003e1 mov x1, x0 is_imfs = IMFS_is_imfs_instance( loc ); rtems_filesystem_eval_path_cleanup( &eval_ctx ); 40023958: 910123e0 add x0, sp, #0x48 return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; 4002395c: f9401421 ldr x1, [x1, #40] 40023960: f9400c21 ldr x1, [x1, #24] 40023964: f9402437 ldr x23, [x1, #72] 40023968: 97fffa62 bl 400222f0 if ( !is_imfs ) { 4002396c: b0000000 adrp x0, 40024000 40023970: 91184000 add x0, x0, #0x610 40023974: eb0002ff cmp x23, x0 40023978: 54000501 b.ne 40023a18 // b.any return -1; } ctx.printer = NULL; ctx.file_path = memcpy( buf, mountpoint, len ); 4002397c: aa1603e1 mov x1, x22 40023980: aa1303e2 mov x2, x19 40023984: 910543e0 add x0, sp, #0x150 ctx.printer = NULL; 40023988: f900a7ff str xzr, [sp, #328] ctx.file_path = memcpy( buf, mountpoint, len ); 4002398c: 94002b4c bl 4002e6bc 40023990: f9005be0 str x0, [sp, #176] if ( len > 0 && ctx.file_path[ len - 1 ] != '/') { 40023994: b40003f3 cbz x19, 40023a10 <== NEVER TAKEN ctx.file_path[ len ] = '/'; 40023998: 8b130001 add x1, x0, x19 if ( len > 0 && ctx.file_path[ len - 1 ] != '/') { 4002399c: 385ff022 ldurb w2, [x1, #-1] 400239a0: 7100bc5f cmp w2, #0x2f 400239a4: 54000340 b.eq 40023a0c // b.none <== ALWAYS TAKEN ctx.file_name = ctx.file_path + len + 1; 400239a8: 91000661 add x1, x19, #0x1 <== NOT EXECUTED ctx.file_path[ len ] = '/'; 400239ac: 528005e2 mov w2, #0x2f // #47 <== NOT EXECUTED ctx.file_name = ctx.file_path + len + 1; 400239b0: 8b010001 add x1, x0, x1 <== NOT EXECUTED ctx.file_path[ len ] = '/'; 400239b4: 38336802 strb w2, [x0, x19] <== NOT EXECUTED ctx.file_name = ctx.file_path + len + 1; 400239b8: f9005fe1 str x1, [sp, #184] <== NOT EXECUTED 400239bc: d2800013 mov x19, #0x0 // #0 400239c0: 14000008 b 400239e0 ptr = 0; while ( ptr + 512 <= tar_size ) { int retval; retval = Untar_ProcessHeader( &ctx, (const char *) &tar_image[ ptr ] ); 400239c4: 8b0102a1 add x1, x21, x1 400239c8: 9102c3e0 add x0, sp, #0xb0 400239cc: 9400054d bl 40024f00 if ( retval != UNTAR_SUCCESSFUL ) { 400239d0: 35000240 cbnz w0, 40023a18 <== NEVER TAKEN return -1; } ptr += 512; if ( ctx.linkflag == REGTYPE ) { 400239d4: 394503e0 ldrb w0, [sp, #320] 400239d8: 7100c01f cmp w0, #0x30 400239dc: 540002c0 b.eq 40023a34 // b.none while ( ptr + 512 <= tar_size ) { 400239e0: aa1303e1 mov x1, x19 400239e4: 91080273 add x19, x19, #0x200 400239e8: eb14027f cmp x19, x20 400239ec: 54fffec9 b.ls 400239c4 // b.plast ptr += 512 * ctx.nblocks; } } return 0; 400239f0: 52800000 mov w0, #0x0 // #0 } 400239f4: a9407bfd ldp x29, x30, [sp] 400239f8: a94153f3 ldp x19, x20, [sp, #16] 400239fc: a9425bf5 ldp x21, x22, [sp, #32] return 0; 40023a00: f9401bf7 ldr x23, [sp, #48] } 40023a04: 910943ff add sp, sp, #0x250 40023a08: d65f03c0 ret 40023a0c: aa0103e0 mov x0, x1 ctx.file_name = ctx.file_path + len; 40023a10: f9005fe0 str x0, [sp, #184] 40023a14: 17ffffea b 400239bc 40023a18: f9401bf7 ldr x23, [sp, #48] return -1; 40023a1c: 12800000 mov w0, #0xffffffff // #-1 } 40023a20: a9407bfd ldp x29, x30, [sp] 40023a24: a94153f3 ldp x19, x20, [sp, #16] 40023a28: a9425bf5 ldp x21, x22, [sp, #32] 40023a2c: 910943ff add sp, sp, #0x250 40023a30: d65f03c0 ret retval = IMFS_make_linearfile( 40023a34: b9412be1 ldr w1, [sp, #296] 40023a38: 8b1302a2 add x2, x21, x19 40023a3c: f9405be0 ldr x0, [sp, #176] 40023a40: f9409be3 ldr x3, [sp, #304] 40023a44: 94000007 bl 40023a60 if ( retval != 0 ) { 40023a48: 35fffe80 cbnz w0, 40023a18 <== NEVER TAKEN ptr += 512 * ctx.nblocks; 40023a4c: f9409fe0 ldr x0, [sp, #312] 40023a50: 8b002673 add x19, x19, x0, lsl #9 40023a54: 17ffffe3 b 400239e0 ...