RTEMS-6
Annotated Report
libimfs
Mon Mar 1 00:18:30 2021
0000000040023070 <IMFS_add_node>:
#endif
#include <rtems/imfs.h>
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 <rtems_current_user_env_get>
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 <IMFS_add_node+0x84> // b.none <== NEVER TAKEN
400230ac: 540001e9 b.ls 400230e8 <IMFS_add_node+0x78> // 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 <IMFS_add_node+0x84> // 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 <IMFS_add_node+0x50> // 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 <rtems_filesystem_eval_path_start>
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 <memfile_read+0xe0>
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 <IMFS_add_node+0xe0> // 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_error>
rtems_filesystem_eval_path_cleanup( &ctx );
40023130: 910163e0 add x0, sp, #0x58
40023134: 97fffcb3 bl 40022400 <rtems_filesystem_eval_path_cleanup>
}
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 <rtems_filesystem_eval_path_continue>
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 <IMFS_add_node+0x124> // b.none
if ( rtems_filesystem_eval_path_get_token( &ctx ) != NULL ) {
4002317c: b40001e0 cbz x0, 400231b8 <IMFS_add_node+0x148> <== 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 <rtems_filesystem_eval_path_error>
40023190: 17ffffe8 b 40023130 <IMFS_add_node+0xc0>
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 <IMFS_initialize_node>
400231ac: aa0003e1 mov x1, x0
if ( node != NULL ) {
400231b0: b5000080 cbnz x0, 400231c0 <IMFS_add_node+0x150>
400231b4: d503201f nop
rv = -1;
400231b8: 12800013 mov w19, #0xffffffff // #-1
400231bc: 17ffffdd b 40023130 <IMFS_add_node+0xc0>
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 <IMFS_add_node+0xc0>
...
00000000400244c0 <IMFS_do_nothing_destroy>:
void IMFS_do_nothing_destroy( IMFS_jnode_t *node )
{
(void) node;
}
400244c0: d65f03c0 ret <== NOT EXECUTED
...
0000000040022380 <IMFS_eval_path_devfs>:
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 <IMFS_eval_path_devfs+0x5c> // 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 <IMFS_eval_path_devfs+0xa0> // 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 <IMFS_eval_path_devfs+0x44> // b.any
400223dc: aa1503e2 mov x2, x21
400223e0: aa1703e1 mov x1, x23
400223e4: aa1303e0 mov x0, x19
400223e8: 94002569 bl 4002b98c <memcmp>
400223ec: 35fffec0 cbnz w0, 400223c4 <IMFS_eval_path_devfs+0x44> <== 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 <IMFS_eval_path_devfs+0xa0> <== 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 <IMFS_eval_path_devfs+0xc0> // b.any <== ALWAYS TAKEN
40022430: 14000027 b 400224cc <IMFS_eval_path_devfs+0x14c> <== NOT EXECUTED
return the_node->next;
40022434: f9400273 ldr x19, [x19]
40022438: eb13029f cmp x20, x19
4002243c: 54000480 b.eq 400224cc <IMFS_eval_path_devfs+0x14c> // 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 <IMFS_eval_path_devfs+0xb4> // b.any
4002244c: f9400e60 ldr x0, [x19, #24]
40022450: aa1503e2 mov x2, x21
40022454: aa1703e1 mov x1, x23
40022458: 9400254d bl 4002b98c <memcmp>
4002245c: 35fffec0 cbnz w0, 40022434 <IMFS_eval_path_devfs+0xb4>
if ( ( eval_flags & RTEMS_FS_EXCLUSIVE ) == 0 ) {
40022460: b94022c0 ldr w0, [x22, #32]
40022464: 37300240 tbnz w0, #6, 400224ac <IMFS_eval_path_devfs+0x12c> <== 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 <rtems_filesystem_eval_path_error> <== 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 <IMFS_eval_path_devfs+0x88>
...
00000000400277c0 <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
)
{
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 <IMFS_fsunmount+0x98> // 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 <IMFS_fsunmount+0x98> // 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 <IMFS_fsunmount+0xdc> <== 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 <IMFS_fsunmount+0x58> // b.none
result = IMFS_rmnod( NULL, &loc );
40027858: 910083e1 add x1, sp, #0x20
4002785c: d2800000 mov x0, #0x0 // #0
40027860: 97fff344 bl 40024570 <IMFS_rmnod>
if ( result != 0 )
40027864: 35000220 cbnz w0, 400278a8 <IMFS_fsunmount+0xe8> <== NEVER TAKEN
IMFS_node_destroy( jnode );
40027868: aa1303e0 mov x0, x19
4002786c: 97fff2c1 bl 40024370 <IMFS_node_destroy>
if ( jnode != NULL ) {
40027870: b4000174 cbz x20, 4002789c <IMFS_fsunmount+0xdc>
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 <IMFS_fsunmount+0x78> // 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 <IMFS_fsunmount+0x68> // b.any
40027894: aa1403f3 mov x19, x20
40027898: 17ffffe9 b 4002783c <IMFS_fsunmount+0x7c>
}
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 <rtems_fatal_error_occurred> <== NOT EXECUTED
...
0000000040026680 <IMFS_make_node>:
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 <rtems_current_user_env_get>
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 <IMFS_make_node+0x88> // b.none
400266c0: 540001e9 b.ls 400266fc <IMFS_make_node+0x7c> // 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 <IMFS_make_node+0x88> // 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 <IMFS_make_node+0x54> // 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 <rtems_filesystem_eval_path_start>
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 <IMFS_memfile_write+0x90>
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 <IMFS_make_node+0xe8> // 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_error>
rtems_filesystem_eval_path_cleanup( &ctx );
40026748: 910163e0 add x0, sp, #0x58
4002674c: 97fffa19 bl 40024fb0 <rtems_filesystem_eval_path_cleanup>
}
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 <IMFS_create_node>
if ( new_node != NULL ) {
40026784: b4fffe20 cbz x0, 40026748 <IMFS_make_node+0xc8>
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 <IMFS_make_node+0xc8>
...
0000000040024090 <IMFS_memfile_write>:
{
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 <IMFS_memfile_write+0x118> // 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 <IMFS_memfile_write+0x144>
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
400240e8: 6b15027f cmp w19, w21
400240ec: 54000323 b.cc 40024150 <IMFS_memfile_write+0xc0> // b.lo, b.ul, b.last
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
400240f0: 2a1503f9 mov w25, w21
400240f4: 14000008 b 40024114 <IMFS_memfile_write+0x84>
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 <memcpy>
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
4002410c: 6b1302bf cmp w21, w19
40024110: 54000208 b.hi 40024150 <IMFS_memfile_write+0xc0> // 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 <IMFS_memfile_get_block_pointer>
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 <IMFS_memfile_write+0x68> <== 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 <IMFS_memfile_write+0xec>
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 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
40024164: b4fffe80 cbz x0, 40024134 <IMFS_memfile_write+0xa4> <== 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 <memcpy>
_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 <IMFS_memfile_extend>
if ( status )
400241b8: 34fff860 cbz w0, 400240c4 <IMFS_memfile_write+0x34>
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 <IMFS_memfile_get_block_pointer>
400241e4: aa0003e4 mov x4, x0
return copied;
400241e8: d2800000 mov x0, #0x0 // #0
if ( !block_ptr )
400241ec: b40001a4 cbz x4, 40024220 <IMFS_memfile_write+0x190> <== 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 <memcpy>
copied += to_copy;
4002421c: 17ffffb3 b 400240e8 <IMFS_memfile_write+0x58>
40024220: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40024224: 17ffffc6 b 4002413c <IMFS_memfile_write+0xac> <== NOT EXECUTED
...
0000000040024340 <IMFS_mount>:
#endif
#include <rtems/imfs.h>
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 <IMFS_mount+0x50> // 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 <IMFS_mount+0x38> <== 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 <IMFS_mount+0x30> <== 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 <IMFS_mount+0x30>
...
0000000040028c80 <IMFS_node_remove_directory>:
{
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 <IMFS_node_remove_directory+0x34> // 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 <IMFS_node_remove_directory+0x2c> <== 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 <IMFS_readlink>:
sym_link = loc->node_access;
40024870: f9400804 ldr x4, [x0, #16]
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
40024874: d2800000 mov x0, #0x0 // #0
40024878: b50000c2 cbnz x2, 40024890 <IMFS_readlink+0x20> <== ALWAYS TAKEN
4002487c: 14000008 b 4002489c <IMFS_readlink+0x2c> <== NOT EXECUTED
buf[i] = sym_link->name[i];
40024880: 38206823 strb w3, [x1, x0]
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
40024884: 91000400 add x0, x0, #0x1
40024888: eb02001f cmp x0, x2
4002488c: 54000080 b.eq 4002489c <IMFS_readlink+0x2c> // b.none
40024890: f9402883 ldr x3, [x4, #80]
40024894: 38606863 ldrb w3, [x3, x0]
40024898: 35ffff43 cbnz w3, 40024880 <IMFS_readlink+0x10>
}
4002489c: d65f03c0 ret
0000000040024520 <IMFS_rename>:
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 <IMFS_rename+0x120> <== 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 <IMFS_rename+0x104> // 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 <malloc>
4002455c: aa0003f4 mov x20, x0
if ( control == NULL ) {
40024560: b40007c0 cbz x0, 40024658 <IMFS_rename+0x138> <== 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 <memcpy>
if ( node->control->node_destroy == IMFS_renamed_destroy ) {
40024578: 90000016 adrp x22, 40024000 <memfile_read+0xe0>
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 <IMFS_rename+0xec> // 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 <free>
control->Base = *node->control;
4002461c: f9402661 ldr x1, [x19, #72]
}
40024620: 17ffffdc b 40024590 <IMFS_rename+0x70>
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 <IMFS_rename+0xdc>
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 <IMFS_rename+0xdc> <== 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 <IMFS_rename+0xdc> <== NOT EXECUTED
...
00000000400248a0 <IMFS_unmount>:
#endif
#include <rtems/imfs.h>
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 <IMFS_unmount+0x54> // 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 <IMFS_unmount+0x3c> // 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 <IMFS_unmount+0x34> <== 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 <IMFS_unmount+0x34> <== NOT EXECUTED
4002490c: 00000000 udf #0
0000000040028b60 <device_ftruncate>:
rtems_libio_t *iop,
off_t length
)
{
return 0;
}
40028b60: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED
40028b64: d65f03c0 ret <== NOT EXECUTED
...
0000000040023910 <rtems_tarfs_load>:
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 <strlen>
if ( len >= sizeof( buf ) - UNTAR_FILE_NAME_SIZE - 2 ) {
40023934: f102641f cmp x0, #0x99
40023938: 54000728 b.hi 40023a1c <rtems_tarfs_load+0x10c> // 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 <rtems_filesystem_eval_path_start>
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 <rtems_filesystem_eval_path_cleanup>
if ( !is_imfs ) {
4002396c: b0000000 adrp x0, 40024000 <IMFS_memfile_extend+0x170>
40023970: 91184000 add x0, x0, #0x610
40023974: eb0002ff cmp x23, x0
40023978: 54000501 b.ne 40023a18 <rtems_tarfs_load+0x108> // 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 <memcpy>
40023990: f9005be0 str x0, [sp, #176]
if ( len > 0 && ctx.file_path[ len - 1 ] != '/') {
40023994: b40003f3 cbz x19, 40023a10 <rtems_tarfs_load+0x100> <== 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 <rtems_tarfs_load+0xfc> // 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 <rtems_tarfs_load+0xd0>
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 <Untar_ProcessHeader>
if ( retval != UNTAR_SUCCESSFUL ) {
400239d0: 35000240 cbnz w0, 40023a18 <rtems_tarfs_load+0x108> <== 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 <rtems_tarfs_load+0x124> // 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 <rtems_tarfs_load+0xb4> // 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 <rtems_tarfs_load+0xac>
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 <IMFS_make_linearfile>
if ( retval != 0 ) {
40023a48: 35fffe80 cbnz w0, 40023a18 <rtems_tarfs_load+0x108> <== NEVER TAKEN
ptr += 512 * ctx.nblocks;
40023a4c: f9409fe0 ldr x0, [sp, #312]
40023a50: 8b002673 add x19, x19, x0, lsl #9
40023a54: 17ffffe3 b 400239e0 <rtems_tarfs_load+0xd0>
...