=============================================================================== 40004d08 : #endif #include int IMFS_add_node( const char *path, IMFS_jnode_t *node, void *arg ) { 40004d08: 9d e3 bf 58 save %sp, -168, %sp const rtems_filesystem_location_info_t *currentloc; int eval_flags; int rv; mode = node->st_mode; mode &= ~rtems_filesystem_umask; 40004d0c: 7f ff ff 59 call 40004a70 40004d10: fa 06 60 14 ld [ %i1 + 0x14 ], %i5 40004d14: c2 02 20 08 ld [ %o0 + 8 ], %g1 40004d18: ba 2f 40 01 andn %i5, %g1, %i5 switch (mode & S_IFMT) { 40004d1c: 05 00 00 18 sethi %hi(0x6000), %g2 40004d20: 03 00 00 3c sethi %hi(0xf000), %g1 40004d24: 82 0f 40 01 and %i5, %g1, %g1 40004d28: 80 a0 40 02 cmp %g1, %g2 40004d2c: 02 80 00 0c be 40004d5c 40004d30: 94 10 20 18 mov 0x18, %o2 40004d34: 08 80 00 1c bleu 40004da4 40004d38: 05 00 00 04 sethi %hi(0x1000), %g2 40004d3c: 05 00 00 20 sethi %hi(0x8000), %g2 <== NOT EXECUTED 40004d40: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40004d44: 02 80 00 06 be 40004d5c <== NOT EXECUTED 40004d48: 05 00 00 30 sethi %hi(0xc000), %g2 <== NOT EXECUTED 40004d4c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40004d50: 12 80 00 1b bne 40004dbc <== NOT EXECUTED 40004d54: 01 00 00 00 nop <== NOT EXECUTED errno = EINVAL; return -1; } eval_flags = RTEMS_FS_FOLLOW_LINK; currentloc = rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40004d58: 94 10 20 18 mov 0x18, %o2 ! 18 <_TLS_Alignment+0x17> <== NOT EXECUTED 40004d5c: 92 10 00 18 mov %i0, %o1 40004d60: 7f ff fd 76 call 40004338 40004d64: 90 07 bf c8 add %fp, -56, %o0 static inline bool IMFS_is_imfs_instance( const rtems_filesystem_location_info_t *loc ) { return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; 40004d68: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40004d6c: c2 00 60 0c ld [ %g1 + 0xc ], %g1 if ( IMFS_is_imfs_instance( currentloc ) ) { 40004d70: c4 00 60 24 ld [ %g1 + 0x24 ], %g2 40004d74: 03 10 00 18 sethi %hi(0x40006000), %g1 40004d78: 82 10 60 f0 or %g1, 0xf0, %g1 ! 400060f0 40004d7c: 80 a0 80 01 cmp %g2, %g1 40004d80: 02 80 00 15 be 40004dd4 40004d84: 92 10 20 86 mov 0x86, %o1 } rv = -1; } } else { rtems_filesystem_eval_path_error( &ctx, ENOTSUP ); 40004d88: 90 07 bf c8 add %fp, -56, %o0 40004d8c: 7f ff fc b0 call 4000404c 40004d90: b0 10 3f ff mov -1, %i0 rv = -1; } rtems_filesystem_eval_path_cleanup( &ctx ); 40004d94: 7f ff fd 75 call 40004368 40004d98: 90 07 bf c8 add %fp, -56, %o0 return rv; } 40004d9c: 81 c7 e0 08 ret 40004da0: 81 e8 00 00 restore switch (mode & S_IFMT) { 40004da4: 80 a0 40 02 cmp %g1, %g2 40004da8: 02 bf ff ec be 40004d58 40004dac: 05 00 00 08 sethi %hi(0x2000), %g2 40004db0: 80 a0 40 02 cmp %g1, %g2 40004db4: 02 bf ff ea be 40004d5c 40004db8: 94 10 20 18 mov 0x18, %o2 errno = EINVAL; 40004dbc: 40 00 29 81 call 4000f3c0 <__errno> 40004dc0: b0 10 3f ff mov -1, %i0 40004dc4: 82 10 20 16 mov 0x16, %g1 40004dc8: c2 22 00 00 st %g1, [ %o0 ] return -1; 40004dcc: 81 c7 e0 08 ret 40004dd0: 81 e8 00 00 restore ctx->path = path; 40004dd4: c4 06 60 0c ld [ %i1 + 0xc ], %g2 rtems_filesystem_eval_path_set_path( &ctx, node->name, node->namelen ); 40004dd8: c2 16 60 10 lduh [ %i1 + 0x10 ], %g1 40004ddc: c4 27 bf c8 st %g2, [ %fp + -56 ] ctx->flags = flags; 40004de0: 84 10 20 60 mov 0x60, %g2 ctx->pathlen = pathlen; 40004de4: c2 27 bf cc st %g1, [ %fp + -52 ] rtems_filesystem_eval_path_continue( &ctx ); 40004de8: 90 07 bf c8 add %fp, -56, %o0 40004dec: 7f ff fc e0 call 4000416c 40004df0: c4 27 bf d8 st %g2, [ %fp + -40 ] if ( rtems_filesystem_eval_path_get_token( &ctx ) == node->name ) { 40004df4: c2 07 bf d0 ld [ %fp + -48 ], %g1 40004df8: d4 06 60 0c ld [ %i1 + 0xc ], %o2 40004dfc: 80 a2 80 01 cmp %o2, %g1 40004e00: 02 80 00 0b be 40004e2c 40004e04: 80 a0 60 00 cmp %g1, 0 if ( rtems_filesystem_eval_path_get_token( &ctx ) != NULL ) { 40004e08: 02 80 00 12 be 40004e50 40004e0c: 90 07 bf c8 add %fp, -56, %o0 rtems_filesystem_eval_path_error( &ctx, EINVAL ); 40004e10: 7f ff fc 8f call 4000404c 40004e14: 92 10 20 16 mov 0x16, %o1 rv = -1; 40004e18: b0 10 3f ff mov -1, %i0 rtems_filesystem_eval_path_cleanup( &ctx ); 40004e1c: 7f ff fd 53 call 40004368 40004e20: 90 07 bf c8 add %fp, -56, %o0 } 40004e24: 81 c7 e0 08 ret 40004e28: 81 e8 00 00 restore node = IMFS_initialize_node( 40004e2c: d6 16 60 10 lduh [ %i1 + 0x10 ], %o3 40004e30: d2 06 60 38 ld [ %i1 + 0x38 ], %o1 40004e34: 9a 10 00 1a mov %i2, %o5 40004e38: 98 10 00 1d mov %i5, %o4 40004e3c: 40 00 04 8d call 40006070 40004e40: 90 10 00 19 mov %i1, %o0 if ( node != NULL ) { 40004e44: 82 92 20 00 orcc %o0, 0, %g1 40004e48: 12 80 00 07 bne 40004e64 40004e4c: fa 07 bf e8 ld [ %fp + -24 ], %i5 rv = -1; 40004e50: b0 10 3f ff mov -1, %i0 rtems_filesystem_eval_path_cleanup( &ctx ); 40004e54: 7f ff fd 45 call 40004368 40004e58: 90 07 bf c8 add %fp, -56, %o0 } 40004e5c: 81 c7 e0 08 ret 40004e60: 81 e8 00 00 restore old_last = tail->previous; 40004e64: c4 07 60 48 ld [ %i5 + 0x48 ], %g2 return &the_chain->Tail.Node; 40004e68: 86 07 60 44 add %i5, 0x44, %g3 IMFS_jnode_t *entry_node ) { IMFS_directory_t *dir = (IMFS_directory_t *) dir_node; entry_node->Parent = dir_node; 40004e6c: fa 20 60 08 st %i5, [ %g1 + 8 ] _Timecounter_Getbintime( &now ); 40004e70: 90 07 bf b8 add %fp, -72, %o0 the_node->next = tail; 40004e74: c6 20 40 00 st %g3, [ %g1 ] rv = 0; 40004e78: b0 10 20 00 clr %i0 tail->previous = the_node; 40004e7c: c2 27 60 48 st %g1, [ %i5 + 0x48 ] old_last->next = the_node; 40004e80: c2 20 80 00 st %g1, [ %g2 ] 40004e84: 40 00 17 f2 call 4000ae4c <_Timecounter_Getbintime> 40004e88: c4 20 60 04 st %g2, [ %g1 + 4 ] return now.sec; 40004e8c: c4 1f bf b8 ldd [ %fp + -72 ], %g2 jnode->stat_mtime = now; 40004e90: c4 3f 60 28 std %g2, [ %i5 + 0x28 ] 40004e94: 10 bf ff c0 b 40004d94 40004e98: c4 3f 60 30 std %g2, [ %i5 + 0x30 ] =============================================================================== 4000c260 : const char *name, size_t namelen, mode_t mode, void *arg ) { 4000c260: 9d e3 bf a0 save %sp, -96, %sp IMFS_jnode_t *allocated_node; char *allocated_name; IMFS_jnode_t *node; allocated_node = calloc( 1, node_size + namelen ); 4000c264: 90 10 20 01 mov 1, %o0 4000c268: 7f ff fd df call 4000b9e4 4000c26c: 92 06 80 1c add %i2, %i4, %o1 if ( allocated_node == NULL ) { 4000c270: a0 92 20 00 orcc %o0, 0, %l0 4000c274: 02 80 00 1d be 4000c2e8 4000c278: 94 10 00 1c mov %i4, %o2 return NULL; } allocated_name = (char *) allocated_node + node_size; allocated_name = memcpy( allocated_name, name, namelen ); 4000c27c: 92 10 00 1b mov %i3, %o1 4000c280: 40 00 0d 0b call 4000f6ac 4000c284: 90 04 00 1a add %l0, %i2, %o0 node = IMFS_initialize_node( 4000c288: da 07 a0 5c ld [ %fp + 0x5c ], %o5 4000c28c: 98 10 00 1d mov %i5, %o4 4000c290: 94 10 00 08 mov %o0, %o2 4000c294: 96 10 00 1c mov %i4, %o3 4000c298: 92 10 00 19 mov %i1, %o1 4000c29c: 7f ff e7 75 call 40006070 4000c2a0: 90 10 00 10 mov %l0, %o0 allocated_name, namelen, mode, arg ); if ( node != NULL ) { 4000c2a4: ba 92 20 00 orcc %o0, 0, %i5 4000c2a8: 02 80 00 0c be 4000c2d8 4000c2ac: 90 10 00 10 mov %l0, %o0 IMFS_jnode_t *parent = parentloc->node_access; 4000c2b0: c2 06 20 08 ld [ %i0 + 8 ], %g1 old_last = tail->previous; 4000c2b4: c4 00 60 48 ld [ %g1 + 0x48 ], %g2 return &the_chain->Tail.Node; 4000c2b8: 86 00 60 44 add %g1, 0x44, %g3 entry_node->Parent = dir_node; 4000c2bc: c2 27 60 08 st %g1, [ %i5 + 8 ] the_node->next = tail; 4000c2c0: c6 27 40 00 st %g3, [ %i5 ] tail->previous = the_node; 4000c2c4: fa 20 60 48 st %i5, [ %g1 + 0x48 ] old_last->next = the_node; 4000c2c8: fa 20 80 00 st %i5, [ %g2 ] the_node->previous = old_last; 4000c2cc: c4 27 60 04 st %g2, [ %i5 + 4 ] } else { free( allocated_node ); } return node; } 4000c2d0: 81 c7 e0 08 ret 4000c2d4: 91 e8 00 1d restore %g0, %i5, %o0 free( allocated_node ); 4000c2d8: 7f ff dc 79 call 400034bc 4000c2dc: b0 10 00 1d mov %i5, %i0 } 4000c2e0: 81 c7 e0 08 ret <== NOT EXECUTED 4000c2e4: 81 e8 00 00 restore errno = ENOMEM; 4000c2e8: 40 00 0c 36 call 4000f3c0 <__errno> 4000c2ec: ba 10 20 00 clr %i5 4000c2f0: 82 10 20 0c mov 0xc, %g1 return NULL; 4000c2f4: 10 bf ff f7 b 4000c2d0 4000c2f8: c2 22 00 00 st %g1, [ %o0 ] =============================================================================== 40006168 : void IMFS_do_nothing_destroy( IMFS_jnode_t *node ) { (void) node; } 40006168: 81 c3 e0 08 retl <== NOT EXECUTED 4000616c: 01 00 00 00 nop <== NOT EXECUTED =============================================================================== 40003bd0 : return NULL; } void IMFS_eval_path_devfs( rtems_filesystem_eval_path_context_t *ctx ) { 40003bd0: 9d e3 bf a0 save %sp, -96, %sp pathlen = rtems_filesystem_eval_path_get_pathlen( ctx ); 40003bd4: f8 06 20 04 ld [ %i0 + 4 ], %i4 && memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0; 40003bd8: 37 10 00 31 sethi %hi(0x4000c400), %i3 pathlen = rtems_filesystem_eval_path_get_pathlen( ctx ); 40003bdc: 82 10 20 01 mov 1, %g1 && memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0; 40003be0: b6 16 e1 64 or %i3, 0x164, %i3 match = IMFS_devfs_dirs[ i ].len == pathlen 40003be4: 82 08 60 ff and %g1, 0xff, %g1 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; 40003be8: f2 06 20 20 ld [ %i0 + 0x20 ], %i1 path = rtems_filesystem_eval_path_get_path( ctx ); 40003bec: f4 06 00 00 ld [ %i0 ], %i2 pathlen = rtems_filesystem_eval_path_get_pathlen( ctx ); 40003bf0: ba 10 20 00 clr %i5 && memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0; 40003bf4: 80 a7 00 01 cmp %i4, %g1 40003bf8: 02 80 00 0b be 40003c24 40003bfc: a0 06 e0 01 add %i3, 1, %l0 40003c00: ba 07 60 04 add %i5, 4, %i5 for ( i = 0; i < RTEMS_ARRAY_SIZE( IMFS_devfs_dirs ); ++i ) { 40003c04: 80 a7 60 10 cmp %i5, 0x10 40003c08: 22 80 00 16 be,a 40003c60 40003c0c: fa 06 60 40 ld [ %i1 + 0x40 ], %i5 40003c10: c2 0e c0 1d ldub [ %i3 + %i5 ], %g1 match = IMFS_devfs_dirs[ i ].len == pathlen 40003c14: 82 08 60 ff and %g1, 0xff, %g1 && memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0; 40003c18: 80 a7 00 01 cmp %i4, %g1 40003c1c: 32 bf ff fa bne,a 40003c04 40003c20: ba 07 60 04 add %i5, 4, %i5 40003c24: 94 10 00 1c mov %i4, %o2 40003c28: 92 10 00 1a mov %i2, %o1 40003c2c: 40 00 1f 70 call 4000b9ec 40003c30: 90 04 00 1d add %l0, %i5, %o0 40003c34: 80 a2 20 00 cmp %o0, 0 40003c38: 32 bf ff f3 bne,a 40003c04 <== NEVER TAKEN 40003c3c: ba 07 60 04 add %i5, 4, %i5 <== NOT EXECUTED eval_flags &= ~RTEMS_FS_EXCLUSIVE; 40003c40: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 40003c44: 82 08 7f bf and %g1, -65, %g1 ctx->pathlen = 0; 40003c48: c0 26 20 04 clr [ %i0 + 4 ] 40003c4c: b8 10 20 00 clr %i4 entry = IMFS_devfs_is_dir( ctx, dir ); if ( entry != NULL ) { 40003c50: 80 a6 60 00 cmp %i1, 0 40003c54: 12 80 00 28 bne 40003cf4 40003c58: c2 26 20 10 st %g1, [ %i0 + 0x10 ] return _Chain_Immutable_head( the_chain )->next; 40003c5c: fa 06 60 40 ld [ %i1 + 0x40 ], %i5 <== NOT EXECUTED return &the_chain->Tail.Node; 40003c60: b6 06 60 44 add %i1, 0x44, %i3 while ( current != tail ) { 40003c64: 80 a7 40 1b cmp %i5, %i3 40003c68: 32 80 00 08 bne,a 40003c88 <== ALWAYS TAKEN 40003c6c: c2 17 60 10 lduh [ %i5 + 0x10 ], %g1 ctx->token = token; 40003c70: 10 80 00 23 b 40003cfc <== NOT EXECUTED 40003c74: f4 26 20 08 st %i2, [ %i0 + 8 ] <== NOT EXECUTED 40003c78: 80 a6 c0 1d cmp %i3, %i5 40003c7c: 22 80 00 20 be,a 40003cfc 40003c80: f4 26 20 08 st %i2, [ %i0 + 8 ] match = entry->namelen == pathlen 40003c84: c2 17 60 10 lduh [ %i5 + 0x10 ], %g1 && memcmp( entry->name, path, pathlen ) == 0; 40003c88: 80 a0 40 1c cmp %g1, %i4 40003c8c: 32 bf ff fb bne,a 40003c78 40003c90: fa 07 40 00 ld [ %i5 ], %i5 40003c94: d0 07 60 0c ld [ %i5 + 0xc ], %o0 40003c98: 94 10 00 1c mov %i4, %o2 40003c9c: 40 00 1f 54 call 4000b9ec 40003ca0: 92 10 00 1a mov %i2, %o1 40003ca4: 80 a2 20 00 cmp %o0, 0 40003ca8: 32 bf ff f4 bne,a 40003c78 40003cac: fa 07 40 00 ld [ %i5 ], %i5 if ( entry != NULL ) { int eval_flags; eval_flags = rtems_filesystem_eval_path_get_flags( ctx ); if ( ( eval_flags & RTEMS_FS_EXCLUSIVE ) == 0 ) { 40003cb0: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 40003cb4: 80 88 60 40 btst 0x40, %g1 40003cb8: 12 80 00 15 bne 40003d0c 40003cbc: 01 00 00 00 nop --dir->Node.reference_count; 40003cc0: c2 16 60 18 lduh [ %i1 + 0x18 ], %g1 40003cc4: 82 00 7f ff add %g1, -1, %g1 40003cc8: c2 36 60 18 sth %g1, [ %i1 + 0x18 ] loc->handlers = node->control->handlers; 40003ccc: c4 07 60 38 ld [ %i5 + 0x38 ], %g2 ++entry->reference_count; 40003cd0: c2 17 60 18 lduh [ %i5 + 0x18 ], %g1 40003cd4: c4 00 80 00 ld [ %g2 ], %g2 currentloc->node_access = entry; currentloc->node_access_2 = IMFS_generic_get_context_by_node( entry ); 40003cd8: c6 07 60 40 ld [ %i5 + 0x40 ], %g3 ++entry->reference_count; 40003cdc: 82 00 60 01 inc %g1 40003ce0: c2 37 60 18 sth %g1, [ %i5 + 0x18 ] currentloc->node_access = entry; 40003ce4: fa 26 20 20 st %i5, [ %i0 + 0x20 ] currentloc->node_access_2 = IMFS_generic_get_context_by_node( entry ); 40003ce8: c6 26 20 24 st %g3, [ %i0 + 0x24 ] 40003cec: c4 26 20 28 st %g2, [ %i0 + 0x28 ] ctx->pathlen = 0; 40003cf0: c0 26 20 04 clr [ %i0 + 4 ] 40003cf4: 81 c7 e0 08 ret 40003cf8: 81 e8 00 00 restore ctx->tokenlen = tokenlen; 40003cfc: f8 26 20 0c st %i4, [ %i0 + 0xc ] ctx->pathlen = 0; 40003d00: c0 26 20 04 clr [ %i0 + 4 ] 40003d04: 81 c7 e0 08 ret 40003d08: 81 e8 00 00 restore IMFS_Set_handlers( currentloc ); rtems_filesystem_eval_path_clear_path( ctx ); } else { rtems_filesystem_eval_path_error( ctx, EEXIST ); 40003d0c: 7f ff fc 1d call 40002d80 <== NOT EXECUTED 40003d10: 93 e8 20 11 restore %g0, 0x11, %o1 <== NOT EXECUTED =============================================================================== 4000b0cc : ((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next)) void IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { 4000b0cc: 9d e3 bf 88 save %sp, -120, %sp /* * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ loc = temp_mt_entry->mt_fs_root->location; 4000b0d0: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 4000b0d4: c4 00 60 08 ld [ %g1 + 8 ], %g2 4000b0d8: f6 00 40 00 ld [ %g1 ], %i3 4000b0dc: f8 00 60 04 ld [ %g1 + 4 ], %i4 4000b0e0: c8 00 60 0c ld [ %g1 + 0xc ], %g4 4000b0e4: c6 00 60 10 ld [ %g1 + 0x10 ], %g3 4000b0e8: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 jnode = (IMFS_jnode_t *)loc.node_access; 4000b0ec: ba 10 00 02 mov %g2, %i5 loc = temp_mt_entry->mt_fs_root->location; 4000b0f0: c4 27 bf f0 st %g2, [ %fp + -16 ] return S_ISDIR( node->st_mode ); 4000b0f4: 35 00 00 3c sethi %hi(0xf000), %i2 4000b0f8: c2 27 bf fc st %g1, [ %fp + -4 ] 4000b0fc: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 loc->handlers = node->control->handlers; 4000b100: c4 07 60 38 ld [ %i5 + 0x38 ], %g2 4000b104: c4 00 80 00 ld [ %g2 ], %g2 4000b108: c6 27 bf f8 st %g3, [ %fp + -8 ] return S_ISDIR( node->st_mode ); 4000b10c: 82 08 40 1a and %g1, %i2, %g1 4000b110: f6 27 bf e8 st %i3, [ %fp + -24 ] do { next = jnode->Parent; loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 4000b114: 37 00 00 10 sethi %hi(0x4000), %i3 loc = temp_mt_entry->mt_fs_root->location; 4000b118: f8 27 bf ec st %i4, [ %fp + -20 ] if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 4000b11c: 80 a0 40 1b cmp %g1, %i3 next = jnode->Parent; 4000b120: f8 07 60 08 ld [ %i5 + 8 ], %i4 loc = temp_mt_entry->mt_fs_root->location; 4000b124: c8 27 bf f4 st %g4, [ %fp + -12 ] loc.node_access = (void *)jnode; 4000b128: fa 27 bf f0 st %i5, [ %fp + -16 ] if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 4000b12c: 12 80 00 14 bne 4000b17c 4000b130: c4 27 bf f8 st %g2, [ %fp + -8 ] return _Chain_Immutable_head( the_chain )->next; 4000b134: c4 07 60 40 ld [ %i5 + 0x40 ], %g2 return &the_chain->Tail.Node; 4000b138: 82 07 60 44 add %i5, 0x44, %g1 4000b13c: 80 a0 80 01 cmp %g2, %g1 4000b140: 02 80 00 10 be 4000b180 4000b144: 92 07 bf e8 add %fp, -24, %o1 if ( IMFS_is_directory( jnode ) ) { if ( jnode_has_children( jnode ) ) jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 4000b148: 80 a0 a0 00 cmp %g2, 0 4000b14c: 02 80 00 23 be 4000b1d8 4000b150: b8 10 00 02 mov %g2, %i4 4000b154: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 4000b158: ba 10 00 1c mov %i4, %i5 loc->handlers = node->control->handlers; 4000b15c: c4 07 60 38 ld [ %i5 + 0x38 ], %g2 4000b160: c4 00 80 00 ld [ %g2 ], %g2 next = jnode->Parent; 4000b164: f8 07 60 08 ld [ %i5 + 8 ], %i4 loc.node_access = (void *)jnode; 4000b168: fa 27 bf f0 st %i5, [ %fp + -16 ] return S_ISDIR( node->st_mode ); 4000b16c: 82 08 40 1a and %g1, %i2, %g1 if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) { 4000b170: 80 a0 40 1b cmp %g1, %i3 4000b174: 02 bf ff f0 be 4000b134 4000b178: c4 27 bf f8 st %g2, [ %fp + -8 ] result = IMFS_rmnod( NULL, &loc ); 4000b17c: 92 07 bf e8 add %fp, -24, %o1 4000b180: 7f ff e9 e3 call 4000590c 4000b184: 90 10 20 00 clr %o0 if ( result != 0 ) 4000b188: 80 a2 20 00 cmp %o0, 0 4000b18c: 12 80 00 15 bne 4000b1e0 4000b190: 11 37 ab 6f sethi %hi(0xdeadbc00), %o0 IMFS_node_destroy( jnode ); 4000b194: 7f ff e9 6b call 40005740 4000b198: 90 10 00 1d mov %i5, %o0 if ( jnode != NULL ) { 4000b19c: 80 a7 20 00 cmp %i4, 0 4000b1a0: 02 80 00 0e be 4000b1d8 4000b1a4: 01 00 00 00 nop if ( IMFS_is_directory( jnode ) ) { 4000b1a8: c2 07 20 14 ld [ %i4 + 0x14 ], %g1 4000b1ac: 84 08 40 1a and %g1, %i2, %g2 4000b1b0: 80 a0 80 1b cmp %g2, %i3 4000b1b4: 32 bf ff ea bne,a 4000b15c <== NEVER TAKEN 4000b1b8: ba 10 00 1c mov %i4, %i5 <== NOT EXECUTED 4000b1bc: c4 07 20 40 ld [ %i4 + 0x40 ], %g2 if ( jnode_has_children( jnode ) ) 4000b1c0: 86 07 20 44 add %i4, 0x44, %g3 4000b1c4: 80 a0 80 03 cmp %g2, %g3 4000b1c8: 12 bf ff e1 bne 4000b14c 4000b1cc: 80 a0 a0 00 cmp %g2, 0 } while (jnode != NULL); 4000b1d0: 10 bf ff e3 b 4000b15c 4000b1d4: ba 10 00 1c mov %i4, %i5 } 4000b1d8: 81 c7 e0 08 ret 4000b1dc: 81 e8 00 00 restore rtems_fatal_error_occurred( 0xdeadbeef ); 4000b1e0: 7f ff fa 9e call 40009c58 <== NOT EXECUTED 4000b1e4: 90 12 22 ef or %o0, 0x2ef, %o0 <== NOT EXECUTED 4000b1e8: 01 00 00 00 nop <== NOT EXECUTED =============================================================================== 400047a0 : int IMFS_initialize( rtems_filesystem_mount_table_entry_t *mt_entry, const void *data ) { 400047a0: 9d e3 bf 90 save %sp, -112, %sp IMFS_fs_info_t *fs_info = calloc( 1, sizeof( *fs_info ) ); 400047a4: 92 10 20 58 mov 0x58, %o1 400047a8: 40 00 17 4f call 4000a4e4 400047ac: 90 10 20 01 mov 1, %o0 IMFS_mount_data mount_data = { 400047b0: 03 10 00 3c sethi %hi(0x4000f000), %g1 400047b4: 82 10 61 c0 or %g1, 0x1c0, %g1 ! 4000f1c0 400047b8: d0 27 bf f4 st %o0, [ %fp + -12 ] .fs_info = fs_info, .ops = &IMFS_ops, .mknod_controls = &IMFS_default_mknod_controls }; if ( fs_info == NULL ) { 400047bc: 80 a2 20 00 cmp %o0, 0 IMFS_mount_data mount_data = { 400047c0: c2 27 bf f8 st %g1, [ %fp + -8 ] 400047c4: 03 10 00 3c sethi %hi(0x4000f000), %g1 400047c8: 82 10 61 b0 or %g1, 0x1b0, %g1 ! 4000f1b0 if ( fs_info == NULL ) { 400047cc: 02 80 00 07 be 400047e8 400047d0: c2 27 bf fc st %g1, [ %fp + -4 ] rtems_set_errno_and_return_minus_one( ENOMEM ); } return IMFS_initialize_support( mt_entry, &mount_data ); 400047d4: 92 07 bf f4 add %fp, -12, %o1 400047d8: 40 00 00 11 call 4000481c 400047dc: 90 10 00 18 mov %i0, %o0 } 400047e0: 81 c7 e0 08 ret <== NOT EXECUTED 400047e4: 91 e8 00 08 restore %g0, %o0, %o0 rtems_set_errno_and_return_minus_one( ENOMEM ); 400047e8: 40 00 26 22 call 4000e070 <__errno> 400047ec: b0 10 3f ff mov -1, %i0 400047f0: 82 10 20 0c mov 0xc, %g1 400047f4: c2 22 00 00 st %g1, [ %o0 ] 400047f8: 81 c7 e0 08 ret 400047fc: 81 e8 00 00 restore =============================================================================== 40006070 : const char *name, size_t namelen, mode_t mode, void *arg ) { 40006070: 9d e3 bf 90 save %sp, -112, %sp time_t now; if ( namelen > IMFS_NAME_MAX ) { 40006074: 80 a6 e0 ff cmp %i3, 0xff 40006078: 18 80 00 18 bgu 400060d8 4000607c: 03 00 00 40 sethi %hi(0x10000), %g1 } /* * Fill in the basic information */ node->name = name; 40006080: f4 26 20 0c st %i2, [ %i0 + 0xc ] node->namelen = namelen; 40006084: f6 36 20 10 sth %i3, [ %i0 + 0x10 ] node->reference_count = 1; 40006088: 82 10 60 01 or %g1, 1, %g1 node->st_nlink = 1; node->control = node_control; 4000608c: f2 26 20 38 st %i1, [ %i0 + 0x38 ] node->reference_count = 1; 40006090: c2 26 20 18 st %g1, [ %i0 + 0x18 ] /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode; node->st_uid = geteuid(); 40006094: 40 00 16 8a call 4000babc 40006098: f8 26 20 14 st %i4, [ %i0 + 0x14 ] node->st_gid = getegid(); 4000609c: 40 00 16 82 call 4000baa4 400060a0: d0 36 20 1c sth %o0, [ %i0 + 0x1c ] 400060a4: d0 36 20 1e sth %o0, [ %i0 + 0x1e ] _Timecounter_Getbintime( &now ); 400060a8: 40 00 13 69 call 4000ae4c <_Timecounter_Getbintime> 400060ac: 90 07 bf f0 add %fp, -16, %o0 return now.sec; 400060b0: c4 1f bf f0 ldd [ %fp + -16 ], %g2 /* * Now set all the times. */ now = _IMFS_get_time(); node->stat_atime = now; 400060b4: c4 3e 20 20 std %g2, [ %i0 + 0x20 ] node->stat_mtime = now; node->stat_ctime = now; return (*node_control->node_initialize)( node, arg ); 400060b8: 92 10 00 1d mov %i5, %o1 node->stat_mtime = now; 400060bc: c4 3e 20 28 std %g2, [ %i0 + 0x28 ] node->stat_ctime = now; 400060c0: c4 3e 20 30 std %g2, [ %i0 + 0x30 ] return (*node_control->node_initialize)( node, arg ); 400060c4: c2 06 60 04 ld [ %i1 + 4 ], %g1 400060c8: 9f c0 40 00 call %g1 400060cc: 90 10 00 18 mov %i0, %o0 } 400060d0: 81 c7 e0 08 ret 400060d4: 91 e8 00 08 restore %g0, %o0, %o0 errno = ENAMETOOLONG; 400060d8: 40 00 24 ba call 4000f3c0 <__errno> 400060dc: b0 10 20 00 clr %i0 <== NOT EXECUTED 400060e0: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED 400060e4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return NULL; 400060e8: 81 c7 e0 08 ret <== NOT EXECUTED 400060ec: 81 e8 00 00 restore <== NOT EXECUTED =============================================================================== 40005328 : { 40005328: 9d e3 bf a0 save %sp, -96, %sp fs_info->mknod_controls = mount_data->mknod_controls; 4000532c: c2 06 60 08 ld [ %i1 + 8 ], %g1 fs_info = mount_data->fs_info; 40005330: d0 06 40 00 ld [ %i1 ], %o0 node_control = &mount_data->mknod_controls->directory->node_control; 40005334: d2 00 40 00 ld [ %g1 ], %o1 fs_info->mknod_controls = mount_data->mknod_controls; 40005338: c2 22 20 50 st %g1, [ %o0 + 0x50 ] root_node = IMFS_initialize_node( 4000533c: 9a 10 20 00 clr %o5 mt_entry->ops = mount_data->ops; 40005340: c2 06 60 04 ld [ %i1 + 4 ], %g1 40005344: c2 26 20 0c st %g1, [ %i0 + 0xc ] mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS; 40005348: 03 10 00 5d sethi %hi(0x40017400), %g1 4000534c: 82 10 63 04 or %g1, 0x304, %g1 ! 40017704 mt_entry->mt_fs_root->location.node_access = root_node; 40005350: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS; 40005354: c2 26 20 2c st %g1, [ %i0 + 0x2c ] root_node = IMFS_initialize_node( 40005358: 19 00 00 10 sethi %hi(0x4000), %o4 mt_entry->fs_info = fs_info; 4000535c: d0 26 20 08 st %o0, [ %i0 + 8 ] root_node = IMFS_initialize_node( 40005360: 98 13 21 ed or %o4, 0x1ed, %o4 mt_entry->mt_fs_root->location.handlers = node_control->handlers; 40005364: c2 02 40 00 ld [ %o1 ], %g1 40005368: c2 20 a0 10 st %g1, [ %g2 + 0x10 ] } 4000536c: b0 10 20 00 clr %i0 mt_entry->mt_fs_root->location.node_access = root_node; 40005370: d0 20 a0 08 st %o0, [ %g2 + 8 ] root_node = IMFS_initialize_node( 40005374: 96 10 20 00 clr %o3 40005378: 15 10 00 5b sethi %hi(0x40016c00), %o2 4000537c: 40 00 03 3d call 40006070 40005380: 94 12 a1 e8 or %o2, 0x1e8, %o2 ! 40016de8 } 40005384: 81 c7 e0 08 ret 40005388: 81 e8 00 00 restore =============================================================================== 40005478 : { 40005478: 9d e3 bf 88 save %sp, -120, %sp target = targetloc->node_access; 4000547c: fa 06 60 08 ld [ %i1 + 8 ], %i5 if ( target->st_nlink >= LINK_MAX ) 40005480: c2 17 60 1a lduh [ %i5 + 0x1a ], %g1 40005484: 80 a0 60 07 cmp %g1, 7 40005488: 18 80 00 19 bgu 400054ec 4000548c: 9a 10 21 ff mov 0x1ff, %o5 new_node = IMFS_create_node( 40005490: fa 23 a0 5c st %i5, [ %sp + 0x5c ] 40005494: 98 10 00 1b mov %i3, %o4 40005498: 96 10 00 1a mov %i2, %o3 4000549c: 94 10 20 48 mov 0x48, %o2 400054a0: 90 10 00 18 mov %i0, %o0 400054a4: 13 10 00 5d sethi %hi(0x40017400), %o1 400054a8: 40 00 1b 6e call 4000c260 400054ac: 92 12 61 6c or %o1, 0x16c, %o1 ! 4001756c if ( !new_node ) 400054b0: 80 a2 20 00 cmp %o0, 0 400054b4: 02 80 00 14 be 40005504 400054b8: 90 07 bf f0 add %fp, -16, %o0 target->reference_count++; 400054bc: c4 17 60 18 lduh [ %i5 + 0x18 ], %g2 target->st_nlink++; 400054c0: c2 17 60 1a lduh [ %i5 + 0x1a ], %g1 target->reference_count++; 400054c4: 84 00 a0 01 inc %g2 target->st_nlink++; 400054c8: 82 00 60 01 inc %g1 target->reference_count++; 400054cc: c4 37 60 18 sth %g2, [ %i5 + 0x18 ] target->st_nlink++; 400054d0: c2 37 60 1a sth %g1, [ %i5 + 0x1a ] _Timecounter_Getbintime( &now ); 400054d4: 40 00 16 5e call 4000ae4c <_Timecounter_Getbintime> 400054d8: b0 10 20 00 clr %i0 return now.sec; 400054dc: c4 1f bf f0 ldd [ %fp + -16 ], %g2 <== NOT EXECUTED jnode->stat_ctime = _IMFS_get_time(); 400054e0: c4 3f 60 30 std %g2, [ %i5 + 0x30 ] <== NOT EXECUTED } 400054e4: 81 c7 e0 08 ret <== NOT EXECUTED 400054e8: 81 e8 00 00 restore rtems_set_errno_and_return_minus_one( EMLINK ); 400054ec: 40 00 27 b5 call 4000f3c0 <__errno> 400054f0: b0 10 3f ff mov -1, %i0 400054f4: 82 10 20 1f mov 0x1f, %g1 400054f8: c2 22 00 00 st %g1, [ %o0 ] 400054fc: 81 c7 e0 08 ret 40005500: 81 e8 00 00 restore rtems_set_errno_and_return_minus_one( ENOMEM ); 40005504: 40 00 27 af call 4000f3c0 <__errno> 40005508: b0 10 3f ff mov -1, %i0 4000550c: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 40005510: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005514: 81 c7 e0 08 ret <== NOT EXECUTED 40005518: 81 e8 00 00 restore =============================================================================== 40004cf8 : const char *path, mode_t mode, const void *data, size_t size ) { 40004cf8: 9d e3 bf 98 save %sp, -104, %sp .size = size }; return IMFS_make_node( path, ( mode & ~S_IFMT ) | S_IFREG, 40004cfc: 13 00 00 3c sethi %hi(0xf000), %o1 IMFS_linearfile_context ctx = { 40004d00: f4 3f bf f8 std %i2, [ %fp + -8 ] ( mode & ~S_IFMT ) | S_IFREG, 40004d04: b2 2e 40 09 andn %i1, %o1, %i1 return IMFS_make_node( 40004d08: 98 07 bf f8 add %fp, -8, %o4 40004d0c: 96 10 20 58 mov 0x58, %o3 40004d10: 90 10 00 18 mov %i0, %o0 40004d14: 13 00 00 20 sethi %hi(0x8000), %o1 40004d18: 15 10 00 ab sethi %hi(0x4002ac00), %o2 40004d1c: 92 16 40 09 or %i1, %o1, %o1 40004d20: 40 00 35 d0 call 40012460 40004d24: 94 12 a1 e8 or %o2, 0x1e8, %o2 &IMFS_node_control_linfile, sizeof( IMFS_file_t ), &ctx ); } 40004d28: 81 c7 e0 08 ret <== NOT EXECUTED 40004d2c: 91 e8 00 08 restore %g0, %o0, %o0 =============================================================================== 40007a08 : mode_t mode, const IMFS_node_control *node_control, size_t node_size, void *context ) { 40007a08: 9d e3 bf 50 save %sp, -176, %sp int rv = 0; mode &= ~rtems_filesystem_umask; 40007a0c: 7f ff fc e6 call 40006da4 40007a10: 01 00 00 00 nop 40007a14: da 02 20 08 ld [ %o0 + 8 ], %o5 40007a18: b2 2e 40 0d andn %i1, %o5, %i1 switch (mode & S_IFMT) { 40007a1c: 03 00 00 3c sethi %hi(0xf000), %g1 40007a20: 05 00 00 18 sethi %hi(0x6000), %g2 40007a24: 82 0e 40 01 and %i1, %g1, %g1 40007a28: 80 a0 40 02 cmp %g1, %g2 40007a2c: 02 80 00 0c be 40007a5c 40007a30: 94 10 20 78 mov 0x78, %o2 40007a34: 08 80 00 1d bleu 40007aa8 40007a38: 05 00 00 04 sethi %hi(0x1000), %g2 40007a3c: 05 00 00 20 sethi %hi(0x8000), %g2 40007a40: 80 a0 40 02 cmp %g1, %g2 40007a44: 02 80 00 06 be 40007a5c 40007a48: 05 00 00 30 sethi %hi(0xc000), %g2 40007a4c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40007a50: 12 80 00 1c bne 40007ac0 <== NOT EXECUTED 40007a54: 01 00 00 00 nop <== NOT EXECUTED if ( rv == 0 ) { rtems_filesystem_eval_path_context_t ctx; int eval_flags = RTEMS_FS_FOLLOW_LINK | RTEMS_FS_MAKE | RTEMS_FS_EXCLUSIVE; const rtems_filesystem_location_info_t *currentloc = 40007a58: 94 10 20 78 mov 0x78, %o2 ! 78 <_TLS_Alignment+0x77> <== NOT EXECUTED 40007a5c: 92 10 00 18 mov %i0, %o1 40007a60: 7f ff fa 9f call 400064dc 40007a64: 90 07 bf c8 add %fp, -56, %o0 return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; 40007a68: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40007a6c: c2 00 60 0c ld [ %g1 + 0xc ], %g1 rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); if ( IMFS_is_imfs_instance( currentloc ) ) { 40007a70: c4 00 60 24 ld [ %g1 + 0x24 ], %g2 40007a74: 03 10 00 21 sethi %hi(0x40008400), %g1 40007a78: 82 10 63 18 or %g1, 0x318, %g1 ! 40008718 40007a7c: 80 a0 80 01 cmp %g2, %g1 40007a80: 02 80 00 16 be 40007ad8 40007a84: ba 10 00 08 mov %o0, %i5 IMFS_mtime_ctime_update( parent ); } else { rv = -1; } } else { rtems_filesystem_eval_path_error( &ctx, ENOTSUP ); 40007a88: 92 10 20 86 mov 0x86, %o1 40007a8c: 90 07 bf c8 add %fp, -56, %o0 40007a90: 7f ff f9 d8 call 400061f0 40007a94: b0 10 3f ff mov -1, %i0 rv = -1; } rtems_filesystem_eval_path_cleanup( &ctx ); 40007a98: 7f ff fa db call 40006604 40007a9c: 90 07 bf c8 add %fp, -56, %o0 } return rv; } 40007aa0: 81 c7 e0 08 ret 40007aa4: 81 e8 00 00 restore switch (mode & S_IFMT) { 40007aa8: 80 a0 40 02 cmp %g1, %g2 40007aac: 02 bf ff eb be 40007a58 40007ab0: 05 00 00 08 sethi %hi(0x2000), %g2 40007ab4: 80 a0 40 02 cmp %g1, %g2 40007ab8: 02 bf ff e9 be 40007a5c 40007abc: 94 10 20 78 mov 0x78, %o2 errno = EINVAL; 40007ac0: 40 00 33 85 call 400148d4 <__errno> 40007ac4: b0 10 3f ff mov -1, %i0 40007ac8: 82 10 20 16 mov 0x16, %g1 40007acc: c2 22 00 00 st %g1, [ %o0 ] 40007ad0: 81 c7 e0 08 ret 40007ad4: 81 e8 00 00 restore IMFS_jnode_t *new_node = IMFS_create_node( 40007ad8: f8 23 a0 5c st %i4, [ %sp + 0x5c ] 40007adc: 9a 10 00 19 mov %i1, %o5 40007ae0: d8 07 bf d4 ld [ %fp + -44 ], %o4 40007ae4: d6 07 bf d0 ld [ %fp + -48 ], %o3 40007ae8: 94 10 00 1b mov %i3, %o2 40007aec: 92 10 00 1a mov %i2, %o1 40007af0: 40 00 27 ba call 400119d8 40007af4: b0 10 3f ff mov -1, %i0 if ( new_node != NULL ) { 40007af8: 80 a2 20 00 cmp %o0, 0 40007afc: 02 bf ff e7 be 40007a98 40007b00: 01 00 00 00 nop IMFS_jnode_t *parent = currentloc->node_access; 40007b04: fa 07 60 08 ld [ %i5 + 8 ], %i5 _Timecounter_Getbintime( &now ); 40007b08: 40 00 17 78 call 4000d8e8 <_Timecounter_Getbintime> 40007b0c: 90 07 bf b8 add %fp, -72, %o0 return now.sec; 40007b10: c4 1f bf b8 ldd [ %fp + -72 ], %g2 jnode->stat_mtime = now; 40007b14: c4 3f 60 28 std %g2, [ %i5 + 0x28 ] int rv = 0; 40007b18: b0 10 20 00 clr %i0 jnode->stat_ctime = now; 40007b1c: c4 3f 60 30 std %g2, [ %i5 + 0x30 ] rtems_filesystem_eval_path_cleanup( &ctx ); 40007b20: 7f ff fa b9 call 40006604 40007b24: 90 07 bf c8 add %fp, -56, %o0 } 40007b28: 81 c7 e0 08 ret <== NOT EXECUTED 40007b2c: 81 e8 00 00 restore =============================================================================== 40005cfc : { 40005cfc: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED if ( last_byte > memfile->File.size ) { 40005d00: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED last_byte = start + my_length; 40005d04: 96 07 00 1a add %i4, %i2, %o3 <== NOT EXECUTED if ( last_byte > memfile->File.size ) { 40005d08: 80 a0 40 0b cmp %g1, %o3 <== NOT EXECUTED 40005d0c: 0a 80 00 52 bcs 40005e54 <== NOT EXECUTED 40005d10: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 40005d14: 03 10 00 5a sethi %hi(0x40016800), %g1 <== NOT EXECUTED 40005d18: fa 00 63 98 ld [ %g1 + 0x398 ], %i5 ! 40016b98 <== NOT EXECUTED 40005d1c: b1 3f 60 1f sra %i5, 0x1f, %i0 <== NOT EXECUTED 40005d20: 96 10 00 1d mov %i5, %o3 <== NOT EXECUTED 40005d24: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 40005d28: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40005d2c: 40 00 23 53 call 4000ea78 <__moddi3> <== NOT EXECUTED 40005d30: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 40005d34: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 40005d38: a2 10 00 09 mov %o1, %l1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 40005d3c: 96 10 00 1d mov %i5, %o3 <== NOT EXECUTED 40005d40: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40005d44: 40 00 22 c2 call 4000e84c <__divdi3> <== NOT EXECUTED 40005d48: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED copied = 0; 40005d4c: b0 10 20 00 clr %i0 <== NOT EXECUTED if ( start_offset ) { 40005d50: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40005d54: 12 80 00 19 bne 40005db8 <== NOT EXECUTED 40005d58: b4 10 00 09 mov %o1, %i2 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 40005d5c: 80 a7 00 1d cmp %i4, %i5 <== NOT EXECUTED 40005d60: 1a 80 00 0d bcc 40005d94 <== NOT EXECUTED 40005d64: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED if ( my_length ) { 40005d68: 10 80 00 28 b 40005e08 <== NOT EXECUTED 40005d6c: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 40005d70: 40 00 26 4f call 4000f6ac <== NOT EXECUTED 40005d74: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED my_length -= to_copy; 40005d78: b8 27 00 1d sub %i4, %i5, %i4 <== NOT EXECUTED src += to_copy; 40005d7c: b6 06 c0 1d add %i3, %i5, %i3 <== NOT EXECUTED block++; 40005d80: b4 06 a0 01 inc %i2 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 40005d84: 80 a7 40 1c cmp %i5, %i4 <== NOT EXECUTED 40005d88: 18 80 00 1f bgu 40005e04 <== NOT EXECUTED 40005d8c: b0 06 00 1d add %i0, %i5, %i0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 ); 40005d90: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40005d94: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005d98: 7f ff fd ee call 40005550 <== NOT EXECUTED 40005d9c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 40005da0: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED if ( !block_ptr ) 40005da4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005da8: 12 bf ff f2 bne 40005d70 <== NOT EXECUTED 40005dac: 94 10 00 1d mov %i5, %o2 <== NOT EXECUTED } 40005db0: 81 c7 e0 08 ret <== NOT EXECUTED 40005db4: 81 e8 00 00 restore <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 ); 40005db8: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005dbc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40005dc0: 7f ff fd e4 call 40005550 <== NOT EXECUTED 40005dc4: b0 10 20 00 clr %i0 <== NOT EXECUTED if ( !block_ptr ) 40005dc8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005dcc: 02 bf ff f9 be 40005db0 <== NOT EXECUTED 40005dd0: 82 27 40 11 sub %i5, %l1, %g1 <== NOT EXECUTED 40005dd4: 80 a7 00 01 cmp %i4, %g1 <== NOT EXECUTED 40005dd8: 18 80 00 36 bgu 40005eb0 <== NOT EXECUTED 40005ddc: b0 10 00 1c mov %i4, %i0 <== NOT EXECUTED memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 40005de0: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 40005de4: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 40005de8: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 40005dec: 90 02 00 11 add %o0, %l1, %o0 <== NOT EXECUTED 40005df0: 40 00 26 2f call 4000f6ac <== NOT EXECUTED 40005df4: b6 06 c0 18 add %i3, %i0, %i3 <== NOT EXECUTED block++; 40005df8: b4 06 a0 01 inc %i2 <== NOT EXECUTED my_length -= to_copy; 40005dfc: 10 bf ff d8 b 40005d5c <== NOT EXECUTED 40005e00: b8 27 00 18 sub %i4, %i0, %i4 <== NOT EXECUTED if ( my_length ) { 40005e04: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40005e08: 02 80 00 0c be 40005e38 <== NOT EXECUTED 40005e0c: 94 10 20 00 clr %o2 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 ); 40005e10: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40005e14: 7f ff fd cf call 40005550 <== NOT EXECUTED 40005e18: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ( !block_ptr ) 40005e1c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005e20: 02 bf ff e4 be 40005db0 <== NOT EXECUTED 40005e24: 94 10 00 1c mov %i4, %o2 <== NOT EXECUTED memcpy( &(*block_ptr)[ 0 ], src, my_length ); 40005e28: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 40005e2c: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 40005e30: 40 00 26 1f call 4000f6ac <== NOT EXECUTED 40005e34: b0 06 00 1c add %i0, %i4, %i0 <== NOT EXECUTED _Timecounter_Getbintime( &now ); 40005e38: 40 00 14 05 call 4000ae4c <_Timecounter_Getbintime> <== NOT EXECUTED 40005e3c: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED return now.sec; 40005e40: c4 1f bf f0 ldd [ %fp + -16 ], %g2 <== NOT EXECUTED jnode->stat_mtime = now; 40005e44: c4 3c 20 28 std %g2, [ %l0 + 0x28 ] <== NOT EXECUTED jnode->stat_ctime = now; 40005e48: c4 3c 20 30 std %g2, [ %l0 + 0x30 ] <== NOT EXECUTED } 40005e4c: 81 c7 e0 08 ret <== NOT EXECUTED 40005e50: 81 e8 00 00 restore <== NOT EXECUTED bool zero_fill = start > memfile->File.size; 40005e54: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40005e58: 04 80 00 0b ble 40005e84 <== NOT EXECUTED 40005e5c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED status = IMFS_memfile_extend( memfile, zero_fill, last_byte ); 40005e60: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005e64: 92 0a 60 01 and %o1, 1, %o1 <== NOT EXECUTED 40005e68: 7f ff fe 63 call 400057f4 <== NOT EXECUTED 40005e6c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ( status ) 40005e70: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40005e74: 02 bf ff a9 be 40005d18 <== NOT EXECUTED 40005e78: 03 10 00 5a sethi %hi(0x40016800), %g1 <== NOT EXECUTED 40005e7c: 81 c7 e0 08 ret <== NOT EXECUTED 40005e80: 81 e8 00 00 restore <== NOT EXECUTED bool zero_fill = start > memfile->File.size; 40005e84: 02 80 00 15 be 40005ed8 <== NOT EXECUTED 40005e88: 80 a6 80 01 cmp %i2, %g1 <== NOT EXECUTED 40005e8c: 92 10 20 00 clr %o1 <== NOT EXECUTED status = IMFS_memfile_extend( memfile, zero_fill, last_byte ); 40005e90: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005e94: 92 0a 60 01 and %o1, 1, %o1 <== NOT EXECUTED 40005e98: 7f ff fe 57 call 400057f4 <== NOT EXECUTED 40005e9c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ( status ) 40005ea0: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40005ea4: 02 bf ff 9d be 40005d18 <== NOT EXECUTED 40005ea8: 03 10 00 5a sethi %hi(0x40016800), %g1 <== NOT EXECUTED 40005eac: 30 bf ff f4 b,a 40005e7c <== NOT EXECUTED memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 40005eb0: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 40005eb4: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED 40005eb8: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 40005ebc: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 40005ec0: 90 02 00 11 add %o0, %l1, %o0 <== NOT EXECUTED 40005ec4: 40 00 25 fa call 4000f6ac <== NOT EXECUTED 40005ec8: b6 06 c0 18 add %i3, %i0, %i3 <== NOT EXECUTED block++; 40005ecc: b4 06 a0 01 inc %i2 <== NOT EXECUTED my_length -= to_copy; 40005ed0: 10 bf ff a3 b 40005d5c <== NOT EXECUTED 40005ed4: b8 27 00 18 sub %i4, %i0, %i4 <== NOT EXECUTED bool zero_fill = start > memfile->File.size; 40005ed8: 18 bf ff e3 bgu 40005e64 <== NOT EXECUTED 40005edc: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005ee0: 10 bf ff ed b 40005e94 <== NOT EXECUTED 40005ee4: 92 10 20 00 clr %o1 <== NOT EXECUTED =============================================================================== 40005f4c : const char *name, size_t namelen, mode_t mode, dev_t dev ) { 40005f4c: 9d e3 bf 80 save %sp, -128, %sp int rv = 0; const IMFS_fs_info_t *fs_info = parentloc->mt_entry->fs_info; 40005f50: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 { 40005f54: f8 3f bf e8 std %i4, [ %fp + -24 ] const IMFS_mknod_control *mknod_control = get_control( fs_info->mknod_controls, mode ); 40005f58: c4 00 60 08 ld [ %g1 + 8 ], %g2 40005f5c: c6 00 a0 50 ld [ %g2 + 0x50 ], %g3 if ( S_ISDIR( mode ) ) { 40005f60: 03 00 00 3c sethi %hi(0xf000), %g1 40005f64: 05 00 00 10 sethi %hi(0x4000), %g2 40005f68: 82 0e c0 01 and %i3, %g1, %g1 40005f6c: 80 a0 40 02 cmp %g1, %g2 40005f70: 02 80 00 1f be 40005fec 40005f74: 05 00 00 2c sethi %hi(0xb000), %g2 } else if ( S_ISBLK( mode ) || S_ISCHR( mode ) ) { 40005f78: 09 00 00 08 sethi %hi(0x2000), %g4 40005f7c: 84 0e c0 02 and %i3, %g2, %g2 40005f80: 80 a0 80 04 cmp %g2, %g4 40005f84: 22 80 00 07 be,a 40005fa0 40005f88: d2 00 e0 04 ld [ %g3 + 4 ], %o1 } else if ( S_ISFIFO( mode ) ) { 40005f8c: 05 00 00 04 sethi %hi(0x1000), %g2 40005f90: 80 a0 40 02 cmp %g1, %g2 40005f94: 22 80 00 03 be,a 40005fa0 40005f98: d2 00 e0 0c ld [ %g3 + 0xc ], %o1 return controls->file; 40005f9c: d2 00 e0 08 ld [ %g3 + 8 ], %o1 IMFS_jnode_t *new_node; new_node = IMFS_create_node( 40005fa0: 82 07 bf e8 add %fp, -24, %g1 40005fa4: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40005fa8: 9a 10 00 1b mov %i3, %o5 40005fac: d4 02 60 10 ld [ %o1 + 0x10 ], %o2 40005fb0: 98 10 00 1a mov %i2, %o4 40005fb4: 96 10 00 19 mov %i1, %o3 40005fb8: 40 00 18 aa call 4000c260 40005fbc: 90 10 00 18 mov %i0, %o0 name, namelen, mode, &dev ); if ( new_node != NULL ) { 40005fc0: 80 a2 20 00 cmp %o0, 0 40005fc4: 02 80 00 0c be 40005ff4 <== NEVER TAKEN 40005fc8: 01 00 00 00 nop IMFS_jnode_t *parent = parentloc->node_access; 40005fcc: fa 06 20 08 ld [ %i0 + 8 ], %i5 _Timecounter_Getbintime( &now ); 40005fd0: 40 00 13 9f call 4000ae4c <_Timecounter_Getbintime> 40005fd4: 90 07 bf f0 add %fp, -16, %o0 return now.sec; 40005fd8: c4 1f bf f0 ldd [ %fp + -16 ], %g2 jnode->stat_mtime = now; 40005fdc: c4 3f 60 28 std %g2, [ %i5 + 0x28 ] jnode->stat_ctime = now; 40005fe0: c4 3f 60 30 std %g2, [ %i5 + 0x30 ] int rv = 0; 40005fe4: 81 c7 e0 08 ret 40005fe8: 91 e8 20 00 restore %g0, 0, %o0 return controls->directory; 40005fec: 10 bf ff ed b 40005fa0 40005ff0: d2 00 c0 00 ld [ %g3 ], %o1 } else { rv = -1; } return rv; } 40005ff4: 81 c7 e0 08 ret <== NOT EXECUTED 40005ff8: 91 e8 3f ff restore %g0, -1, %o0 =============================================================================== 40005ffc : #endif #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40005ffc: 9d e3 bf a0 save %sp, -96, %sp int rv = 0; IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access; 40006000: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 40006004: c4 00 60 08 ld [ %g1 + 8 ], %g2 return S_ISDIR( node->st_mode ); 40006008: 07 00 00 3c sethi %hi(0xf000), %g3 4000600c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 40006010: 82 08 40 03 and %g1, %g3, %g1 if ( IMFS_is_directory( node ) ) { 40006014: 07 00 00 10 sethi %hi(0x4000), %g3 40006018: 80 a0 40 03 cmp %g1, %g3 4000601c: 12 80 00 0f bne 40006058 <== NEVER TAKEN 40006020: 01 00 00 00 nop IMFS_directory_t *dir = (IMFS_directory_t *) node; if ( dir->mt_fs == NULL ) { 40006024: c2 00 a0 4c ld [ %g2 + 0x4c ], %g1 40006028: 80 a0 60 00 cmp %g1, 0 4000602c: 12 80 00 05 bne 40006040 40006030: 01 00 00 00 nop dir->mt_fs = mt_entry; 40006034: f0 20 a0 4c st %i0, [ %g2 + 0x4c ] 40006038: 81 c7 e0 08 ret 4000603c: 91 e8 20 00 restore %g0, 0, %o0 } else { errno = EBUSY; 40006040: 40 00 24 e0 call 4000f3c0 <__errno> <== NOT EXECUTED 40006044: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40006048: 82 10 20 10 mov 0x10, %g1 <== NOT EXECUTED 4000604c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40006050: 81 c7 e0 08 ret <== NOT EXECUTED 40006054: 81 e8 00 00 restore <== NOT EXECUTED rv = -1; } } else { errno = ENOTDIR; 40006058: 40 00 24 da call 4000f3c0 <__errno> 4000605c: b0 10 3f ff mov -1, %i0 40006060: 82 10 20 14 mov 0x14, %g1 40006064: c2 22 00 00 st %g1, [ %o0 ] rv = -1; } return rv; } 40006068: 81 c7 e0 08 ret 4000606c: 81 e8 00 00 restore =============================================================================== 40006108 : void IMFS_node_destroy( IMFS_jnode_t *node ) { 40006108: 9d e3 bf a0 save %sp, -96, %sp <== NOT EXECUTED IMFS_assert( node->reference_count == 0 ); (*node->control->node_destroy)( node ); 4000610c: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 <== NOT EXECUTED 40006110: c2 00 60 0c ld [ %g1 + 0xc ], %g1 <== NOT EXECUTED 40006114: 9f c0 40 00 call %g1 <== NOT EXECUTED 40006118: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } 4000611c: 81 c7 e0 08 ret <== NOT EXECUTED 40006120: 81 e8 00 00 restore <== NOT EXECUTED =============================================================================== 40006170 : #include void IMFS_node_destroy_default( IMFS_jnode_t *node ) { free( node ); 40006170: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40006174: 7f ff f4 d2 call 400034bc <== NOT EXECUTED 40006178: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED =============================================================================== 40006124 : void IMFS_node_free( const rtems_filesystem_location_info_t *loc ) { 40006124: 9d e3 bf a0 save %sp, -96, %sp IMFS_jnode_t *node = loc->node_access; 40006128: d0 06 20 08 ld [ %i0 + 8 ], %o0 --node->reference_count; 4000612c: c2 12 20 18 lduh [ %o0 + 0x18 ], %g1 40006130: 82 00 7f ff add %g1, -1, %g1 40006134: c2 32 20 18 sth %g1, [ %o0 + 0x18 ] if ( node->reference_count == 0 ) { 40006138: 83 28 60 10 sll %g1, 0x10, %g1 4000613c: 80 a0 60 00 cmp %g1, 0 40006140: 12 80 00 06 bne 40006158 <== ALWAYS TAKEN 40006144: 01 00 00 00 nop (*node->control->node_destroy)( node ); 40006148: c2 02 20 38 ld [ %o0 + 0x38 ], %g1 4000614c: c2 00 60 0c ld [ %g1 + 0xc ], %g1 40006150: 9f c0 40 00 call %g1 40006154: 01 00 00 00 nop IMFS_node_destroy( node ); } } 40006158: 81 c7 e0 08 ret 4000615c: 81 e8 00 00 restore =============================================================================== 4000c314 : { return dir->mt_fs != NULL; } IMFS_jnode_t *IMFS_node_remove_directory( IMFS_jnode_t *node ) { 4000c314: 9d e3 bf a0 save %sp, -96, %sp IMFS_directory_t *dir = (IMFS_directory_t *) node; if ( !rtems_chain_is_empty( &dir->Entries ) ) { 4000c318: c4 06 20 40 ld [ %i0 + 0x40 ], %g2 return &the_chain->Tail.Node; 4000c31c: 82 06 20 44 add %i0, 0x44, %g1 4000c320: 80 a0 80 01 cmp %g2, %g1 4000c324: 12 80 00 0c bne 4000c354 4000c328: 01 00 00 00 nop errno = ENOTEMPTY; dir = NULL; } else if ( IMFS_is_mount_point( dir ) ) { 4000c32c: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 4000c330: 80 a0 60 00 cmp %g1, 0 4000c334: 02 80 00 0c be 4000c364 4000c338: 01 00 00 00 nop errno = EBUSY; 4000c33c: 40 00 0c 21 call 4000f3c0 <__errno> <== NOT EXECUTED 4000c340: b0 10 20 00 clr %i0 ! 0 <== NOT EXECUTED 4000c344: 82 10 20 10 mov 0x10, %g1 <== NOT EXECUTED 4000c348: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED dir = NULL; } return &dir->Node; } 4000c34c: 81 c7 e0 08 ret <== NOT EXECUTED 4000c350: 81 e8 00 00 restore <== NOT EXECUTED errno = ENOTEMPTY; 4000c354: 40 00 0c 1b call 4000f3c0 <__errno> 4000c358: b0 10 20 00 clr %i0 4000c35c: 82 10 20 5a mov 0x5a, %g1 4000c360: c2 22 00 00 st %g1, [ %o0 ] 4000c364: 81 c7 e0 08 ret 4000c368: 81 e8 00 00 restore =============================================================================== 4000647c : for( i=0; ((iname[i] != '\0')); i++ ) 4000647c: 80 a2 a0 00 cmp %o2, 0 40006480: 02 80 00 16 be 400064d8 40006484: c6 02 20 08 ld [ %o0 + 8 ], %g3 40006488: c2 00 e0 40 ld [ %g3 + 0x40 ], %g1 4000648c: c4 48 40 00 ldsb [ %g1 ], %g2 40006490: 90 10 20 00 clr %o0 40006494: 80 a0 a0 00 cmp %g2, 0 40006498: 12 80 00 07 bne 400064b4 4000649c: c2 08 40 00 ldub [ %g1 ], %g1 400064a0: 30 80 00 0c b,a 400064d0 <== NOT EXECUTED 400064a4: c4 48 40 08 ldsb [ %g1 + %o0 ], %g2 400064a8: 80 a0 a0 00 cmp %g2, 0 400064ac: 02 80 00 07 be 400064c8 400064b0: c2 08 40 08 ldub [ %g1 + %o0 ], %g1 buf[i] = sym_link->name[i]; 400064b4: c2 2a 40 08 stb %g1, [ %o1 + %o0 ] for( i=0; ((iname[i] != '\0')); i++ ) 400064b8: 90 02 20 01 inc %o0 400064bc: 80 a2 80 08 cmp %o2, %o0 400064c0: 32 bf ff f9 bne,a 400064a4 400064c4: c2 00 e0 40 ld [ %g3 + 0x40 ], %g1 } 400064c8: 81 c3 e0 08 retl 400064cc: 01 00 00 00 nop 400064d0: 81 c3 e0 08 retl <== NOT EXECUTED 400064d4: 01 00 00 00 nop <== NOT EXECUTED for( i=0; ((iname[i] != '\0')); i++ ) 400064d8: 81 c3 e0 08 retl <== NOT EXECUTED 400064dc: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED =============================================================================== 400061a8 : const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen ) { 400061a8: 9d e3 bf 90 save %sp, -112, %sp /* * FIXME: Due to insufficient checks we can create inaccessible nodes with * this operation. */ node = oldloc->node_access; 400061ac: fa 06 60 08 ld [ %i1 + 8 ], %i5 new_parent = newparentloc->node_access; if ( node->Parent == NULL ) { 400061b0: c2 07 60 08 ld [ %i5 + 8 ], %g1 400061b4: 80 a0 60 00 cmp %g1, 0 400061b8: 02 80 00 43 be 400062c4 400061bc: f2 06 a0 08 ld [ %i2 + 8 ], %i1 rtems_set_errno_and_return_minus_one( EINVAL ); } if ( namelen >= IMFS_NAME_MAX ) { 400061c0: 80 a7 20 fe cmp %i4, 0xfe 400061c4: 18 80 00 34 bgu 40006294 400061c8: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); } control = malloc( sizeof( *control ) + namelen ); 400061cc: 7f ff f4 fa call 400035b4 400061d0: 90 07 20 14 add %i4, 0x14, %o0 if ( control == NULL ) { 400061d4: b4 92 20 00 orcc %o0, 0, %i2 400061d8: 02 80 00 35 be 400062ac 400061dc: 92 10 00 1b mov %i3, %o1 rtems_set_errno_and_return_minus_one( ENOMEM ); } memcpy( control->name, name, namelen ); 400061e0: b0 06 a0 14 add %i2, 0x14, %i0 400061e4: 94 10 00 1c mov %i4, %o2 400061e8: 40 00 25 31 call 4000f6ac 400061ec: 90 10 00 18 mov %i0, %o0 if ( node->control->node_destroy == IMFS_renamed_destroy ) { 400061f0: c2 07 60 38 ld [ %i5 + 0x38 ], %g1 400061f4: c4 00 60 0c ld [ %g1 + 0xc ], %g2 400061f8: 37 10 00 18 sethi %hi(0x40006000), %i3 400061fc: b6 16 e1 7c or %i3, 0x17c, %i3 ! 4000617c 40006200: 80 a0 80 1b cmp %g2, %i3 40006204: 22 80 00 1f be,a 40006280 40006208: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 IMFS_restore_replaced_control( node ); } control->Base = *node->control; 4000620c: c4 00 40 00 ld [ %g1 ], %g2 40006210: c4 26 80 00 st %g2, [ %i2 ] 40006214: 86 06 60 44 add %i1, 0x44, %g3 40006218: c4 00 60 04 ld [ %g1 + 4 ], %g2 4000621c: c4 26 a0 04 st %g2, [ %i2 + 4 ] _Timecounter_Getbintime( &now ); 40006220: 90 07 bf f0 add %fp, -16, %o0 40006224: c4 00 60 08 ld [ %g1 + 8 ], %g2 40006228: c4 26 a0 08 st %g2, [ %i2 + 8 ] control->Base.node_destroy = IMFS_renamed_destroy; control->replaced = node->control; 4000622c: c2 26 a0 10 st %g1, [ %i2 + 0x10 ] control->Base.node_destroy = IMFS_renamed_destroy; 40006230: f6 26 a0 0c st %i3, [ %i2 + 0xc ] next = the_node->next; 40006234: c4 07 40 00 ld [ %i5 ], %g2 previous = the_node->previous; 40006238: c2 07 60 04 ld [ %i5 + 4 ], %g1 node->control = &control->Base; node->name = control->name; 4000623c: f0 27 60 0c st %i0, [ %i5 + 0xc ] IMFS_remove_from_directory( node ); IMFS_add_to_directory( new_parent, node ); IMFS_update_ctime( node ); return 0; 40006240: b0 10 20 00 clr %i0 node->control = &control->Base; 40006244: f4 27 60 38 st %i2, [ %i5 + 0x38 ] node->namelen = namelen; 40006248: f8 37 60 10 sth %i4, [ %i5 + 0x10 ] next->previous = previous; 4000624c: c2 20 a0 04 st %g1, [ %g2 + 4 ] previous->next = next; 40006250: c4 20 40 00 st %g2, [ %g1 ] old_last = tail->previous; 40006254: c2 06 60 48 ld [ %i1 + 0x48 ], %g1 the_node->next = tail; 40006258: c6 27 40 00 st %g3, [ %i5 ] entry_node->Parent = dir_node; 4000625c: f2 27 60 08 st %i1, [ %i5 + 8 ] tail->previous = the_node; 40006260: fa 26 60 48 st %i5, [ %i1 + 0x48 ] old_last->next = the_node; 40006264: fa 20 40 00 st %i5, [ %g1 ] _Timecounter_Getbintime( &now ); 40006268: 40 00 12 f9 call 4000ae4c <_Timecounter_Getbintime> 4000626c: c2 27 60 04 st %g1, [ %i5 + 4 ] return now.sec; 40006270: c4 1f bf f0 ldd [ %fp + -16 ], %g2 jnode->stat_ctime = _IMFS_get_time(); 40006274: c4 3f 60 30 std %g2, [ %i5 + 0x30 ] } 40006278: 81 c7 e0 08 ret 4000627c: 81 e8 00 00 restore node->control = control->replaced; 40006280: c4 27 60 38 st %g2, [ %i5 + 0x38 ] free( control ); 40006284: 7f ff f4 8e call 400034bc 40006288: 90 10 00 01 mov %g1, %o0 4000628c: 10 bf ff e0 b 4000620c 40006290: c2 07 60 38 ld [ %i5 + 0x38 ], %g1 rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 40006294: 40 00 24 4b call 4000f3c0 <__errno> 40006298: b0 10 3f ff mov -1, %i0 4000629c: 82 10 20 5b mov 0x5b, %g1 400062a0: c2 22 00 00 st %g1, [ %o0 ] 400062a4: 81 c7 e0 08 ret 400062a8: 81 e8 00 00 restore rtems_set_errno_and_return_minus_one( ENOMEM ); 400062ac: 40 00 24 45 call 4000f3c0 <__errno> <== NOT EXECUTED 400062b0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400062b4: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 400062b8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400062bc: 81 c7 e0 08 ret <== NOT EXECUTED 400062c0: 81 e8 00 00 restore <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 400062c4: 40 00 24 3f call 4000f3c0 <__errno> <== NOT EXECUTED 400062c8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400062cc: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 400062d0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400062d4: 81 c7 e0 08 ret <== NOT EXECUTED 400062d8: 81 e8 00 00 restore <== NOT EXECUTED =============================================================================== 400062dc : int IMFS_rmnod( const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc ) { 400062dc: 9d e3 bf a0 save %sp, -96, %sp int rv = 0; IMFS_jnode_t *node = loc->node_access; 400062e0: d0 06 60 08 ld [ %i1 + 8 ], %o0 node = (*node->control->node_remove)( node ); 400062e4: c2 02 20 38 ld [ %o0 + 0x38 ], %g1 400062e8: c2 00 60 08 ld [ %g1 + 8 ], %g1 400062ec: 9f c0 40 00 call %g1 400062f0: 01 00 00 00 nop if ( node != NULL ) { 400062f4: 80 a2 20 00 cmp %o0, 0 400062f8: 22 80 00 11 be,a 4000633c 400062fc: b0 10 3f ff mov -1, %i0 --node->reference_count; 40006300: c4 12 20 18 lduh [ %o0 + 0x18 ], %g2 --node->st_nlink; 40006304: c2 12 20 1a lduh [ %o0 + 0x1a ], %g1 40006308: 82 00 7f ff add %g1, -1, %g1 --node->reference_count; 4000630c: 84 00 bf ff add %g2, -1, %g2 --node->st_nlink; 40006310: c2 32 20 1a sth %g1, [ %o0 + 0x1a ] --node->reference_count; 40006314: c4 32 20 18 sth %g2, [ %o0 + 0x18 ] if ( node->Parent != NULL ) { 40006318: c2 02 20 08 ld [ %o0 + 8 ], %g1 4000631c: 80 a0 60 00 cmp %g1, 0 40006320: 02 80 00 07 be 4000633c 40006324: b0 10 20 00 clr %i0 node->Parent = NULL; 40006328: c0 22 20 08 clr [ %o0 + 8 ] next = the_node->next; 4000632c: c4 02 00 00 ld [ %o0 ], %g2 previous = the_node->previous; 40006330: c2 02 20 04 ld [ %o0 + 4 ], %g1 next->previous = previous; 40006334: c2 20 a0 04 st %g1, [ %g2 + 4 ] previous->next = next; 40006338: c4 20 40 00 st %g2, [ %g1 ] 4000633c: 81 c7 e0 08 ret 40006340: 81 e8 00 00 restore } else { rv = -1; } return rv; } 40006344: 81 c7 e0 08 ret <== NOT EXECUTED 40006348: 81 e8 00 00 restore <== NOT EXECUTED =============================================================================== 40006418 : { 40006418: 9d e3 bf 98 save %sp, -104, %sp sizeof( IMFS_sym_link_t ) + strlen( target ) + 1, 4000641c: 40 00 26 10 call 4000fc5c 40006420: 90 10 00 1b mov %i3, %o0 new_node = IMFS_create_node( 40006424: f6 23 a0 5c st %i3, [ %sp + 0x5c ] 40006428: 94 02 20 49 add %o0, 0x49, %o2 4000642c: 98 10 00 1a mov %i2, %o4 40006430: 90 10 00 18 mov %i0, %o0 40006434: 1b 00 00 28 sethi %hi(0xa000), %o5 40006438: 96 10 00 19 mov %i1, %o3 4000643c: 9a 13 61 ff or %o5, 0x1ff, %o5 40006440: 13 10 00 5d sethi %hi(0x40017400), %o1 return 0; 40006444: b0 10 20 00 clr %i0 new_node = IMFS_create_node( 40006448: 40 00 17 86 call 4000c260 4000644c: 92 12 62 10 or %o1, 0x210, %o1 if ( new_node == NULL ) { 40006450: 80 a2 20 00 cmp %o0, 0 40006454: 02 80 00 04 be 40006464 40006458: 01 00 00 00 nop } 4000645c: 81 c7 e0 08 ret <== NOT EXECUTED 40006460: 81 e8 00 00 restore rtems_set_errno_and_return_minus_one( ENOMEM ); 40006464: 40 00 23 d7 call 4000f3c0 <__errno> 40006468: b0 10 3f ff mov -1, %i0 4000646c: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 40006470: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED } 40006474: 81 c7 e0 08 ret <== NOT EXECUTED 40006478: 81 e8 00 00 restore =============================================================================== 400064e0 : #endif #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 400064e0: 9d e3 bf a0 save %sp, -96, %sp int rv = 0; IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access; 400064e4: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 400064e8: c4 00 60 08 ld [ %g1 + 8 ], %g2 return S_ISDIR( node->st_mode ); 400064ec: 07 00 00 3c sethi %hi(0xf000), %g3 400064f0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 400064f4: 82 08 40 03 and %g1, %g3, %g1 if ( IMFS_is_directory( node ) ) { 400064f8: 07 00 00 10 sethi %hi(0x4000), %g3 400064fc: 80 a0 40 03 cmp %g1, %g3 40006500: 12 80 00 0f bne 4000653c 40006504: 01 00 00 00 nop IMFS_directory_t *dir = (IMFS_directory_t *) node; if ( dir->mt_fs == mt_entry ) { 40006508: c2 00 a0 4c ld [ %g2 + 0x4c ], %g1 4000650c: 80 a0 40 18 cmp %g1, %i0 40006510: 12 80 00 05 bne 40006524 40006514: 01 00 00 00 nop dir->mt_fs = NULL; 40006518: c0 20 a0 4c clr [ %g2 + 0x4c ] 4000651c: 81 c7 e0 08 ret 40006520: 91 e8 20 00 restore %g0, 0, %o0 } else { errno = EINVAL; 40006524: 40 00 23 a7 call 4000f3c0 <__errno> <== NOT EXECUTED 40006528: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000652c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40006530: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40006534: 81 c7 e0 08 ret <== NOT EXECUTED 40006538: 81 e8 00 00 restore <== NOT EXECUTED rv = -1; } } else { errno = ENOTDIR; 4000653c: 40 00 23 a1 call 4000f3c0 <__errno> <== NOT EXECUTED 40006540: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40006544: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40006548: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED rv = -1; } return rv; } 4000654c: 81 c7 e0 08 ret <== NOT EXECUTED 40006550: 81 e8 00 00 restore <== NOT EXECUTED =============================================================================== 4000c258 : rtems_libio_t *iop, off_t length ) { return 0; } 4000c258: 81 c3 e0 08 retl <== NOT EXECUTED 4000c25c: 90 10 20 00 clr %o0 <== NOT EXECUTED =============================================================================== 400095c8 : rtems_status_code rtems_io_lookup_name( const char *name, rtems_driver_name_t *device_info ) { 400095c8: 9d e3 bf 38 save %sp, -200, %sp rtems_status_code sc = RTEMS_SUCCESSFUL; struct stat st; int rv = stat( name, &st ); 400095cc: 90 10 00 18 mov %i0, %o0 { 400095d0: ba 10 00 18 mov %i0, %i5 int rv = stat( name, &st ); 400095d4: 92 07 bf 98 add %fp, -104, %o1 400095d8: 40 00 19 9a call 4000fc40 400095dc: b0 10 20 0d mov 0xd, %i0 if ( rv == 0 && S_ISCHR( st.st_mode ) ) { 400095e0: 80 a2 20 00 cmp %o0, 0 400095e4: 12 80 00 11 bne 40009628 400095e8: 05 00 00 3c sethi %hi(0xf000), %g2 400095ec: c2 07 bf a8 ld [ %fp + -88 ], %g1 400095f0: 82 08 40 02 and %g1, %g2, %g1 400095f4: 05 00 00 08 sethi %hi(0x2000), %g2 400095f8: 80 a0 40 02 cmp %g1, %g2 400095fc: 12 80 00 0b bne 40009628 40009600: 01 00 00 00 nop device_info->device_name = name; 40009604: fa 26 40 00 st %i5, [ %i1 ] device_info->device_name_length = strlen( name ); 40009608: 40 00 26 0c call 40012e38 4000960c: 90 10 00 1d mov %i5, %o0 device_info->major = rtems_filesystem_dev_major_t( st.st_rdev ); 40009610: c2 07 bf b8 ld [ %fp + -72 ], %g1 <== NOT EXECUTED 40009614: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED rtems_status_code sc = RTEMS_SUCCESSFUL; 40009618: b0 10 20 00 clr %i0 <== NOT EXECUTED device_info->minor = rtems_filesystem_dev_minor_t( st.st_rdev ); 4000961c: c2 07 bf bc ld [ %fp + -68 ], %g1 <== NOT EXECUTED device_info->device_name_length = strlen( name ); 40009620: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED device_info->minor = rtems_filesystem_dev_minor_t( st.st_rdev ); 40009624: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED } else { sc = RTEMS_UNSATISFIED; } return sc; } 40009628: 81 c7 e0 08 ret 4000962c: 81 e8 00 00 restore =============================================================================== 400079f0 : rtems_status_code rtems_io_register_name( const char *device_name, rtems_device_major_number major, rtems_device_minor_number minor ) { 400079f0: 9d e3 bf a0 save %sp, -96, %sp int status; dev_t dev; dev = rtems_filesystem_make_dev_t( major, minor ); status = mknod( device_name, 0777 | S_IFCHR, dev ); 400079f4: 13 00 00 08 sethi %hi(0x2000), %o1 400079f8: 90 10 00 18 mov %i0, %o0 400079fc: 94 10 00 19 mov %i1, %o2 40007a00: 96 10 00 1a mov %i2, %o3 40007a04: 7f ff f2 f5 call 400045d8 40007a08: 92 12 61 ff or %o1, 0x1ff, %o1 /* this is the only error returned by the old version */ if ( status ) return RTEMS_TOO_MANY; return RTEMS_SUCCESSFUL; 40007a0c: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40007a10: b0 60 20 00 subx %g0, 0, %i0 <== NOT EXECUTED } 40007a14: b0 0e 20 05 and %i0, 5, %i0 <== NOT EXECUTED 40007a18: 81 c7 e0 08 ret <== NOT EXECUTED 40007a1c: 81 e8 00 00 restore =============================================================================== 40004be8 : int rtems_tarfs_load( const char *mountpoint, uint8_t *tar_image, size_t tar_size ) { 40004be8: 9d e3 bd e8 save %sp, -536, %sp char buf[ 156 + UNTAR_FILE_NAME_SIZE ]; size_t len; Untar_HeaderContext ctx; unsigned long ptr; len = strlen( mountpoint ); 40004bec: 40 00 70 99 call 40020e50 40004bf0: 90 10 00 18 mov %i0, %o0 if ( len >= sizeof( buf ) - UNTAR_FILE_NAME_SIZE - 2 ) { 40004bf4: 80 a2 20 99 cmp %o0, 0x99 40004bf8: 18 80 00 28 bgu 40004c98 40004bfc: ba 10 00 08 mov %o0, %i5 return -1; } eval_flags = RTEMS_FS_FOLLOW_LINK; loc = rtems_filesystem_eval_path_start( &eval_ctx, mountpoint, eval_flags ); 40004c00: 94 10 20 18 mov 0x18, %o2 40004c04: 92 10 00 18 mov %i0, %o1 40004c08: 7f ff fb 3c call 400038f8 40004c0c: 90 07 be 48 add %fp, -440, %o0 return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; 40004c10: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40004c14: c2 00 60 0c ld [ %g1 + 0xc ], %g1 40004c18: f8 00 60 24 ld [ %g1 + 0x24 ], %i4 is_imfs = IMFS_is_imfs_instance( loc ); rtems_filesystem_eval_path_cleanup( &eval_ctx ); 40004c1c: 7f ff fb 81 call 40003a20 40004c20: 90 07 be 48 add %fp, -440, %o0 if ( !is_imfs ) { 40004c24: 03 10 00 16 sethi %hi(0x40005800), %g1 40004c28: 82 10 61 04 or %g1, 0x104, %g1 ! 40005904 40004c2c: 80 a7 00 01 cmp %i4, %g1 40004c30: 12 80 00 1a bne 40004c98 40004c34: 94 10 00 1d mov %i5, %o2 return -1; } ctx.printer = NULL; 40004c38: c0 27 be fc clr [ %fp + -260 ] ctx.file_path = memcpy( buf, mountpoint, len ); 40004c3c: 92 10 00 18 mov %i0, %o1 40004c40: 40 00 66 c3 call 4001e74c 40004c44: 90 07 bf 00 add %fp, -256, %o0 if ( len > 0 && ctx.file_path[ len - 1 ] != '/') { 40004c48: 80 a7 60 00 cmp %i5, 0 40004c4c: 12 80 00 15 bne 40004ca0 40004c50: d0 27 be 80 st %o0, [ %fp + -384 ] ctx.file_path[ len ] = '/'; ctx.file_name = ctx.file_path + len + 1; 40004c54: d0 27 be 84 st %o0, [ %fp + -380 ] 40004c58: 10 80 00 0a b 40004c80 40004c5c: ba 10 20 00 clr %i5 ptr = 0; while ( ptr + 512 <= tar_size ) { int retval; retval = Untar_ProcessHeader( &ctx, (const char *) &tar_image[ ptr ] ); 40004c60: 40 00 33 f8 call 40011c40 40004c64: 90 07 be 80 add %fp, -384, %o0 if ( retval != UNTAR_SUCCESSFUL ) { 40004c68: 80 a2 20 00 cmp %o0, 0 40004c6c: 12 80 00 0b bne 40004c98 40004c70: c2 0f be f8 ldub [ %fp + -264 ], %g1 return -1; } ptr += 512; if ( ctx.linkflag == REGTYPE ) { 40004c74: 80 a0 60 30 cmp %g1, 0x30 40004c78: 02 80 00 13 be 40004cc4 40004c7c: ba 10 00 1c mov %i4, %i5 while ( ptr + 512 <= tar_size ) { 40004c80: b8 07 62 00 add %i5, 0x200, %i4 40004c84: 80 a7 00 1a cmp %i4, %i2 40004c88: 08 bf ff f6 bleu 40004c60 40004c8c: 92 06 40 1d add %i1, %i5, %o1 ptr += 512 * ctx.nblocks; } } return 0; } 40004c90: 81 c7 e0 08 ret <== NOT EXECUTED 40004c94: 91 e8 20 00 restore %g0, 0, %o0 return -1; 40004c98: 81 c7 e0 08 ret <== NOT EXECUTED 40004c9c: 91 e8 3f ff restore %g0, -1, %o0 40004ca0: 82 02 00 1d add %o0, %i5, %g1 if ( len > 0 && ctx.file_path[ len - 1 ] != '/') { 40004ca4: c4 48 7f ff ldsb [ %g1 + -1 ], %g2 40004ca8: 80 a0 a0 2f cmp %g2, 0x2f 40004cac: 02 80 00 11 be 40004cf0 40004cb0: 84 10 20 2f mov 0x2f, %g2 ctx.file_name = ctx.file_path + len + 1; 40004cb4: 82 07 60 01 add %i5, 1, %g1 <== NOT EXECUTED ctx.file_path[ len ] = '/'; 40004cb8: c4 2a 00 1d stb %g2, [ %o0 + %i5 ] <== NOT EXECUTED ctx.file_name = ctx.file_path + len + 1; 40004cbc: 10 bf ff e6 b 40004c54 <== NOT EXECUTED 40004cc0: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED retval = IMFS_make_linearfile( 40004cc4: d6 07 be f0 ld [ %fp + -272 ], %o3 40004cc8: d2 07 be ec ld [ %fp + -276 ], %o1 40004ccc: d0 07 be 80 ld [ %fp + -384 ], %o0 40004cd0: 40 00 00 0a call 40004cf8 40004cd4: 94 06 40 1c add %i1, %i4, %o2 if ( retval != 0 ) { 40004cd8: 80 a2 20 00 cmp %o0, 0 40004cdc: 12 bf ff ef bne 40004c98 40004ce0: c2 07 be f4 ld [ %fp + -268 ], %g1 ptr += 512 * ctx.nblocks; 40004ce4: 83 28 60 09 sll %g1, 9, %g1 40004ce8: 10 bf ff e6 b 40004c80 40004cec: ba 00 40 1c add %g1, %i4, %i5 40004cf0: 10 bf ff d9 b 40004c54 40004cf4: 90 10 00 01 mov %g1, %o0