=============================================================================== a0006980 : static void CPU_usage_Per_thread_handler( Thread_Control *the_thread ) { #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__ _Timestamp_Set_to_zero( &the_thread->cpu_time_used ); a0006980: e3a03000 mov r3, #0 <== NOT EXECUTED a0006984: e5803084 str r3, [r0, #132] ; 0x84 <== NOT EXECUTED a0006988: e5803088 str r3, [r0, #136] ; 0x88 <== NOT EXECUTED #else the_thread->cpu_time_used = 0; #endif } a000698c: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a00058c8 : static inline void Dump_Line( const unsigned char *buffer, int length ) { a00058c8: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED a00058cc: e24dd078 sub sp, sp, #120 ; 0x78 <== NOT EXECUTED int i; char line_buffer[120]; line_buffer[0] = '\0'; a00058d0: e3a04000 mov r4, #0 <== NOT EXECUTED a00058d4: e28d7078 add r7, sp, #120 ; 0x78 <== NOT EXECUTED static inline void Dump_Line( const unsigned char *buffer, int length ) { a00058d8: e1a05000 mov r5, r0 <== NOT EXECUTED a00058dc: e1a06001 mov r6, r1 <== NOT EXECUTED int i; char line_buffer[120]; line_buffer[0] = '\0'; a00058e0: e5674078 strb r4, [r7, #-120]! ; 0x78 <== NOT EXECUTED for( i=0 ; i <== NOT EXECUTED sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] ); a00058e8: e7d53004 ldrb r3, [r5, r4] <== NOT EXECUTED a00058ec: e1a0000d mov r0, sp <== NOT EXECUTED a00058f0: e59f10bc ldr r1, [pc, #188] ; a00059b4 <== NOT EXECUTED a00058f4: e1a0200d mov r2, sp <== NOT EXECUTED a00058f8: eb002d12 bl a0010d48 <== NOT EXECUTED int i; char line_buffer[120]; line_buffer[0] = '\0'; for( i=0 ; i <== NOT EXECUTED a0005908: ea000003 b a000591c <== NOT EXECUTED sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] ); for( ; i<16 ; i++ ) strcat( line_buffer, " " ); a000590c: e1a0000d mov r0, sp <== NOT EXECUTED a0005910: e59f10a0 ldr r1, [pc, #160] ; a00059b8 <== NOT EXECUTED a0005914: eb002d66 bl a0010eb4 <== NOT EXECUTED line_buffer[0] = '\0'; for( i=0 ; i <== NOT EXECUTED strcat( line_buffer, " " ); strcat( line_buffer, "|" ); a0005924: e1a0000d mov r0, sp <== NOT EXECUTED a0005928: e59f108c ldr r1, [pc, #140] ; a00059bc <== NOT EXECUTED a000592c: eb002d60 bl a0010eb4 <== NOT EXECUTED for( i=0 ; i <== NOT EXECUTED for( ; i<16 ; i++ ) strcat( line_buffer, " " ); strcat( line_buffer, "|" ); for( i=0 ; i <== NOT EXECUTED sprintf( line_buffer, "%s%c", line_buffer, isprint( buffer[ i ] ) ? buffer[ i ] : '.' ); a0005940: e7d53004 ldrb r3, [r5, r4] <== NOT EXECUTED a0005944: e5972000 ldr r2, [r7] <== NOT EXECUTED for( ; i<16 ; i++ ) strcat( line_buffer, " " ); strcat( line_buffer, "|" ); for( i=0 ; i <== NOT EXECUTED isprint( buffer[ i ] ) ? buffer[ i ] : '.' ); a0005950: e0822003 add r2, r2, r3 <== NOT EXECUTED a0005954: e5d22001 ldrb r2, [r2, #1] <== NOT EXECUTED for( ; i<16 ; i++ ) strcat( line_buffer, " " ); strcat( line_buffer, "|" ); for( i=0 ; i <== NOT EXECUTED for( ; i<16 ; i++ ) strcat( line_buffer, " " ); strcat( line_buffer, "|" ); for( i=0 ; i <== NOT EXECUTED a0005974: ea000004 b a000598c <== NOT EXECUTED sprintf( line_buffer, "%s%c", line_buffer, isprint( buffer[ i ] ) ? buffer[ i ] : '.' ); for( ; i<16 ; i++ ) strcat( line_buffer, " " ); a0005978: e1a0000d mov r0, sp <== NOT EXECUTED a000597c: e59f1044 ldr r1, [pc, #68] ; a00059c8 <== NOT EXECUTED a0005980: eb002d4b bl a0010eb4 <== NOT EXECUTED strcat( line_buffer, "|" ); for( i=0 ; i <== NOT EXECUTED a000598c: e1a0500d mov r5, sp <== NOT EXECUTED a0005990: e354000f cmp r4, #15 <== NOT EXECUTED a0005994: dafffff7 ble a0005978 <== NOT EXECUTED strcat( line_buffer, " " ); strcat( line_buffer, "|\n" ); a0005998: e1a0000d mov r0, sp <== NOT EXECUTED a000599c: e59f1028 ldr r1, [pc, #40] ; a00059cc <== NOT EXECUTED a00059a0: eb002d43 bl a0010eb4 <== NOT EXECUTED printk( line_buffer ); a00059a4: e1a0000d mov r0, sp <== NOT EXECUTED a00059a8: eb0005c1 bl a00070b4 <== NOT EXECUTED } a00059ac: e28dd078 add sp, sp, #120 ; 0x78 <== NOT EXECUTED a00059b0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED =============================================================================== a000ce48 : { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { a000ce48: e5902000 ldr r2, [r0] ) { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; a000ce4c: e5903010 ldr r3, [r0, #16] switch( node->type ) { a000ce50: e592204c ldr r2, [r2, #76] ; 0x4c ) { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; a000ce54: e5933034 ldr r3, [r3, #52] ; 0x34 switch( node->type ) { a000ce58: e2422001 sub r2, r2, #1 a000ce5c: e3520006 cmp r2, #6 a000ce60: 979ff102 ldrls pc, [pc, r2, lsl #2] a000ce64: ea000010 b a000ceac <== NOT EXECUTED a000ce68: a000ce84 .word 0xa000ce84 <== NOT EXECUTED a000ce6c: a000ce8c .word 0xa000ce8c <== NOT EXECUTED a000ce70: a000ce94 .word 0xa000ce94 <== NOT EXECUTED a000ce74: a000ce94 .word 0xa000ce94 <== NOT EXECUTED a000ce78: a000ce9c .word 0xa000ce9c <== NOT EXECUTED a000ce7c: a000ce9c .word 0xa000ce9c <== NOT EXECUTED a000ce80: a000cea4 .word 0xa000cea4 <== NOT EXECUTED case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; a000ce84: e593300c ldr r3, [r3, #12] a000ce88: ea000006 b a000cea8 break; case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; a000ce8c: e59f3020 ldr r3, [pc, #32] ; a000ceb4 <== NOT EXECUTED a000ce90: ea000004 b a000cea8 <== NOT EXECUTED break; case IMFS_SYM_LINK: case IMFS_HARD_LINK: loc->handlers = &IMFS_link_handlers; a000ce94: e59f301c ldr r3, [pc, #28] ; a000ceb8 <== NOT EXECUTED a000ce98: ea000002 b a000cea8 <== NOT EXECUTED break; case IMFS_LINEAR_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; a000ce9c: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a000cea0: ea000000 b a000cea8 <== NOT EXECUTED break; case IMFS_FIFO: loc->handlers = fs_info->fifo_handlers; a000cea4: e5933010 ldr r3, [r3, #16] <== NOT EXECUTED a000cea8: e5803008 str r3, [r0, #8] break; } return 0; } a000ceac: e3a00000 mov r0, #0 a000ceb0: e12fff1e bx lr =============================================================================== a000d770 : void IMFS_check_node_remove( IMFS_jnode_t *jnode ) { a000d770: e92d4010 push {r4, lr} <== NOT EXECUTED a000d774: e1a04000 mov r4, r0 <== NOT EXECUTED if ( !rtems_libio_is_file_open( jnode ) && jnode->st_nlink < 1 ) { a000d778: eb000128 bl a000dc20 <== NOT EXECUTED a000d77c: e3500000 cmp r0, #0 <== NOT EXECUTED a000d780: 1a000014 bne a000d7d8 <== NOT EXECUTED a000d784: e1d423b4 ldrh r2, [r4, #52] ; 0x34 <== NOT EXECUTED a000d788: e3520000 cmp r2, #0 <== NOT EXECUTED a000d78c: 1a000011 bne a000d7d8 <== NOT EXECUTED if ( rtems_filesystem_current.node_access == jnode ) a000d790: e59f3044 ldr r3, [pc, #68] ; a000d7dc <== NOT EXECUTED a000d794: e5933000 ldr r3, [r3] <== NOT EXECUTED a000d798: e5931004 ldr r1, [r3, #4] <== NOT EXECUTED a000d79c: e1510004 cmp r1, r4 <== NOT EXECUTED rtems_filesystem_current.node_access = NULL; a000d7a0: 05832004 streq r2, [r3, #4] <== NOT EXECUTED switch ( jnode->type ) { a000d7a4: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000d7a8: e3530004 cmp r3, #4 <== NOT EXECUTED a000d7ac: 0a000004 beq a000d7c4 <== NOT EXECUTED a000d7b0: e3530005 cmp r3, #5 <== NOT EXECUTED a000d7b4: 1a000004 bne a000d7cc <== NOT EXECUTED case IMFS_MEMORY_FILE: IMFS_memfile_remove( jnode ); a000d7b8: e1a00004 mov r0, r4 <== NOT EXECUTED a000d7bc: eb00068a bl a000f1ec <== NOT EXECUTED break; a000d7c0: ea000001 b a000d7cc <== NOT EXECUTED case IMFS_SYM_LINK: free( jnode->info.sym_link.name ); a000d7c4: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED a000d7c8: ebffe268 bl a0006170 <== NOT EXECUTED break; default: break; } free( jnode ); a000d7cc: e1a00004 mov r0, r4 <== NOT EXECUTED } } a000d7d0: e8bd4010 pop {r4, lr} <== NOT EXECUTED break; default: break; } free( jnode ); a000d7d4: eaffe265 b a0006170 <== NOT EXECUTED a000d7d8: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a000cc28 : int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { a000cc28: e92d4013 push {r0, r1, r4, lr} <== NOT EXECUTED IMFS_jnode_t *jnode; #if defined(RTEMS_POSIX_API) uid_t st_uid; #endif jnode = (IMFS_jnode_t *) pathloc->node_access; a000cc2c: e5904000 ldr r4, [r0] <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); a000cc30: e1a0000d mov r0, sp <== NOT EXECUTED if ( ( st_uid != jnode->st_uid ) && ( st_uid != 0 ) ) rtems_set_errno_and_return_minus_one( EPERM ); #endif jnode->st_uid = owner; a000cc34: e1c413bc strh r1, [r4, #60] ; 0x3c <== NOT EXECUTED jnode->st_gid = group; a000cc38: e1c423be strh r2, [r4, #62] ; 0x3e <== NOT EXECUTED IMFS_update_ctime( jnode ); a000cc3c: e3a01000 mov r1, #0 <== NOT EXECUTED a000cc40: ebffe57f bl a0006244 <== NOT EXECUTED a000cc44: e59d3000 ldr r3, [sp] <== NOT EXECUTED return 0; } a000cc48: e3a00000 mov r0, #0 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); a000cc4c: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return 0; } a000cc50: e8bd801c pop {r2, r3, r4, pc} <== NOT EXECUTED =============================================================================== a000ccc8 : IMFS_jnode_types_t type, const char *name, mode_t mode, const IMFS_types_union *info ) { a000ccc8: e92d41f0 push {r4, r5, r6, r7, r8, lr} IMFS_fs_info_t *fs_info; /* * MUST have a parent node to call this routine. */ if ( parent_loc == NULL ) a000cccc: e2508000 subs r8, r0, #0 IMFS_jnode_types_t type, const char *name, mode_t mode, const IMFS_types_union *info ) { a000ccd0: e1a04001 mov r4, r1 a000ccd4: e59d5018 ldr r5, [sp, #24] a000ccd8: e1a01002 mov r1, r2 IMFS_fs_info_t *fs_info; /* * MUST have a parent node to call this routine. */ if ( parent_loc == NULL ) a000ccdc: 0a000045 beq a000cdf8 return NULL; parent = parent_loc->node_access; fs_info = parent_loc->mt_entry->fs_info; a000cce0: e5982010 ldr r2, [r8, #16] /* * Reject creation of FIFOs if support is disabled. */ if ( type == IMFS_FIFO && a000cce4: e3540007 cmp r4, #7 * MUST have a parent node to call this routine. */ if ( parent_loc == NULL ) return NULL; parent = parent_loc->node_access; a000cce8: e5987000 ldr r7, [r8] fs_info = parent_loc->mt_entry->fs_info; a000ccec: e5926034 ldr r6, [r2, #52] ; 0x34 /* * Reject creation of FIFOs if support is disabled. */ if ( type == IMFS_FIFO && a000ccf0: 1a000004 bne a000cd08 a000ccf4: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED a000ccf8: e59f2100 ldr r2, [pc, #256] ; a000ce00 <== NOT EXECUTED a000ccfc: e1500002 cmp r0, r2 <== NOT EXECUTED fs_info->fifo_handlers == &rtems_filesystem_handlers_default ) return NULL; a000cd00: 03a08000 moveq r8, #0 <== NOT EXECUTED fs_info = parent_loc->mt_entry->fs_info; /* * Reject creation of FIFOs if support is disabled. */ if ( type == IMFS_FIFO && a000cd04: 0a00003b beq a000cdf8 <== NOT EXECUTED return NULL; /* * Allocate filesystem node and fill in basic information */ node = IMFS_allocate_node( type, name, mode & ~rtems_filesystem_umask ); a000cd08: e59f20f4 ldr r2, [pc, #244] ; a000ce04 a000cd0c: e1a00004 mov r0, r4 a000cd10: e5922000 ldr r2, [r2] a000cd14: e592202c ldr r2, [r2, #44] ; 0x2c a000cd18: e1c32002 bic r2, r3, r2 a000cd1c: ebffffcc bl a000cc54 if ( !node ) a000cd20: e2508000 subs r8, r0, #0 a000cd24: 0a000033 beq a000cdf8 return NULL; /* * Set the type specific information */ if ( type == IMFS_DIRECTORY ) { a000cd28: e3540001 cmp r4, #1 a000cd2c: 1a000005 bne a000cd48 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { Chain_Node *head = _Chain_Head( the_chain ); Chain_Node *tail = _Chain_Tail( the_chain ); a000cd30: e2883054 add r3, r8, #84 ; 0x54 head->next = tail; a000cd34: e5883050 str r3, [r8, #80] ; 0x50 head->previous = NULL; a000cd38: e3a03000 mov r3, #0 a000cd3c: e5883054 str r3, [r8, #84] ; 0x54 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { Chain_Node *head = _Chain_Head( the_chain ); a000cd40: e2883050 add r3, r8, #80 ; 0x50 a000cd44: ea000012 b a000cd94 rtems_chain_initialize_empty(&node->info.directory.Entries); } else if ( type == IMFS_HARD_LINK ) { a000cd48: e3540003 cmp r4, #3 a000cd4c: 0a000001 beq a000cd58 node->info.hard_link.link_node = info->hard_link.link_node; } else if ( type == IMFS_SYM_LINK ) { a000cd50: e3540004 cmp r4, #4 a000cd54: 1a000001 bne a000cd60 node->info.sym_link.name = info->sym_link.name; a000cd58: e5953000 ldr r3, [r5] <== NOT EXECUTED a000cd5c: ea00001c b a000cdd4 <== NOT EXECUTED } else if ( type == IMFS_DEVICE ) { a000cd60: e3540002 cmp r4, #2 node->info.device.major = info->device.major; a000cd64: 05953000 ldreq r3, [r5] a000cd68: 05883050 streq r3, [r8, #80] ; 0x50 node->info.device.minor = info->device.minor; a000cd6c: 05953004 ldreq r3, [r5, #4] a000cd70: 05883054 streq r3, [r8, #84] ; 0x54 a000cd74: 0a000017 beq a000cdd8 } else if ( type == IMFS_LINEAR_FILE ) { a000cd78: e3540006 cmp r4, #6 <== NOT EXECUTED a000cd7c: 1a000006 bne a000cd9c <== NOT EXECUTED node->info.linearfile.size = 0; a000cd80: e3a03000 mov r3, #0 <== NOT EXECUTED a000cd84: e3a04000 mov r4, #0 <== NOT EXECUTED a000cd88: e5883050 str r3, [r8, #80] ; 0x50 <== NOT EXECUTED a000cd8c: e5884054 str r4, [r8, #84] ; 0x54 <== NOT EXECUTED node->info.linearfile.direct = 0; a000cd90: e3a03000 mov r3, #0 <== NOT EXECUTED a000cd94: e5883058 str r3, [r8, #88] ; 0x58 a000cd98: ea00000e b a000cdd8 } else if ( type == IMFS_MEMORY_FILE ) { a000cd9c: e3540005 cmp r4, #5 <== NOT EXECUTED a000cda0: 1a000008 bne a000cdc8 <== NOT EXECUTED node->info.file.size = 0; a000cda4: e3a03000 mov r3, #0 <== NOT EXECUTED a000cda8: e3a04000 mov r4, #0 <== NOT EXECUTED a000cdac: e5883050 str r3, [r8, #80] ; 0x50 <== NOT EXECUTED a000cdb0: e5884054 str r4, [r8, #84] ; 0x54 <== NOT EXECUTED node->info.file.indirect = 0; a000cdb4: e3a03000 mov r3, #0 <== NOT EXECUTED a000cdb8: e5883058 str r3, [r8, #88] ; 0x58 <== NOT EXECUTED node->info.file.doubly_indirect = 0; a000cdbc: e588305c str r3, [r8, #92] ; 0x5c <== NOT EXECUTED node->info.file.triply_indirect = 0; a000cdc0: e5883060 str r3, [r8, #96] ; 0x60 <== NOT EXECUTED a000cdc4: ea000003 b a000cdd8 <== NOT EXECUTED } else if ( type == IMFS_FIFO ) { a000cdc8: e3540007 cmp r4, #7 <== NOT EXECUTED a000cdcc: 1a000001 bne a000cdd8 <== NOT EXECUTED node->info.fifo.pipe = NULL; a000cdd0: e3a03000 mov r3, #0 <== NOT EXECUTED a000cdd4: e5883050 str r3, [r8, #80] ; 0x50 <== NOT EXECUTED /* * This node MUST have a parent, so put it in that directory list. */ node->Parent = parent; node->st_ino = ++fs_info->ino_count; a000cdd8: e5963004 ldr r3, [r6, #4] } /* * This node MUST have a parent, so put it in that directory list. */ node->Parent = parent; a000cddc: e5887008 str r7, [r8, #8] a000cde0: e2870050 add r0, r7, #80 ; 0x50 node->st_ino = ++fs_info->ino_count; a000cde4: e2833001 add r3, r3, #1 a000cde8: e5863004 str r3, [r6, #4] a000cdec: e1a01008 mov r1, r8 a000cdf0: e5883038 str r3, [r8, #56] ; 0x38 a000cdf4: ebfff3b4 bl a0009ccc <_Chain_Append> rtems_chain_append( &parent->info.directory.Entries, &node->Node ); return node; } a000cdf8: e1a00008 mov r0, r8 a000cdfc: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} =============================================================================== a000d72c : #include "imfs.h" void IMFS_create_orphan( IMFS_jnode_t *jnode ) { if ( jnode->Parent != NULL ) { a000d72c: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED #include #include "imfs.h" void IMFS_create_orphan( IMFS_jnode_t *jnode ) { a000d730: e92d4013 push {r0, r1, r4, lr} <== NOT EXECUTED if ( jnode->Parent != NULL ) { a000d734: e3530000 cmp r3, #0 <== NOT EXECUTED #include #include "imfs.h" void IMFS_create_orphan( IMFS_jnode_t *jnode ) { a000d738: e1a04000 mov r4, r0 <== NOT EXECUTED if ( jnode->Parent != NULL ) { a000d73c: 0a000002 beq a000d74c <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void rtems_chain_extract( rtems_chain_node *the_node ) { _Chain_Extract( the_node ); a000d740: ebfff16c bl a0009cf8 <_Chain_Extract> <== NOT EXECUTED rtems_chain_extract( &jnode->Node ); jnode->Parent = NULL; a000d744: e3a03000 mov r3, #0 <== NOT EXECUTED a000d748: e5843008 str r3, [r4, #8] <== NOT EXECUTED } --jnode->st_nlink; a000d74c: e1d433b4 ldrh r3, [r4, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( jnode ); a000d750: e1a0000d mov r0, sp <== NOT EXECUTED a000d754: e3a01000 mov r1, #0 <== NOT EXECUTED if ( jnode->Parent != NULL ) { rtems_chain_extract( &jnode->Node ); jnode->Parent = NULL; } --jnode->st_nlink; a000d758: e2433001 sub r3, r3, #1 <== NOT EXECUTED a000d75c: e1c433b4 strh r3, [r4, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( jnode ); a000d760: ebffe2b7 bl a0006244 <== NOT EXECUTED a000d764: e59d3000 ldr r3, [sp] <== NOT EXECUTED a000d768: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED } a000d76c: e8bd801c pop {r2, r3, r4, pc} <== NOT EXECUTED =============================================================================== a0008664 : * NOTE: Assuming the "/" directory is bad. * Not checking that the starting directory is in an IMFS is bad. */ void IMFS_dump( void ) { a0008664: e92d4010 push {r4, lr} <== NOT EXECUTED fprintf(stdout, "*************** Dump of Entire IMFS ***************\n" ); a0008668: e59f4044 ldr r4, [pc, #68] ; a00086b4 <== NOT EXECUTED a000866c: e59f0044 ldr r0, [pc, #68] ; a00086b8 <== NOT EXECUTED a0008670: e5943000 ldr r3, [r4] <== NOT EXECUTED a0008674: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a0008678: eb0030b6 bl a0014958 <== NOT EXECUTED fprintf(stdout, "/\n" ); a000867c: e5943000 ldr r3, [r4] <== NOT EXECUTED a0008680: e59f0034 ldr r0, [pc, #52] ; a00086bc <== NOT EXECUTED a0008684: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a0008688: eb0030b2 bl a0014958 <== NOT EXECUTED IMFS_dump_directory( rtems_filesystem_root.node_access, 0 ); a000868c: e59f302c ldr r3, [pc, #44] ; a00086c0 <== NOT EXECUTED a0008690: e3a01000 mov r1, #0 <== NOT EXECUTED a0008694: e5933000 ldr r3, [r3] <== NOT EXECUTED a0008698: e5930018 ldr r0, [r3, #24] <== NOT EXECUTED a000869c: ebffffd2 bl a00085ec <== NOT EXECUTED fprintf(stdout, "*************** End of Dump ***************\n" ); a00086a0: e5943000 ldr r3, [r4] <== NOT EXECUTED a00086a4: e59f0018 ldr r0, [pc, #24] ; a00086c4 <== NOT EXECUTED a00086a8: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED } a00086ac: e8bd4010 pop {r4, lr} <== NOT EXECUTED void IMFS_dump( void ) { fprintf(stdout, "*************** Dump of Entire IMFS ***************\n" ); fprintf(stdout, "/\n" ); IMFS_dump_directory( rtems_filesystem_root.node_access, 0 ); fprintf(stdout, "*************** End of Dump ***************\n" ); a00086b0: ea0030a8 b a0014958 <== NOT EXECUTED =============================================================================== a00085ec : */ void IMFS_dump_directory( IMFS_jnode_t *the_directory, int level ) { a00085ec: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED a00085f0: e1a06001 mov r6, r1 <== NOT EXECUTED * */ int IMFS_memfile_maximum_size( void ) { return IMFS_MEMFILE_MAXIMUM_SIZE; } a00085f4: e5904050 ldr r4, [r0, #80] ; 0x50 <== NOT EXECUTED RTEMS_INLINE_ROUTINE bool _Chain_Is_tail( Chain_Control *the_chain, const Chain_Node *the_node ) { return (the_node == _Chain_Tail(the_chain)); a00085f8: e280a054 add sl, r0, #84 ; 0x54 <== NOT EXECUTED the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; for ( i=0 ; i<=level ; i++ ) fprintf(stdout, "...." ); a00085fc: e59f8058 ldr r8, [pc, #88] ; a000865c <== NOT EXECUTED IMFS_print_jnode( the_jnode ); if ( the_jnode->type == IMFS_DIRECTORY ) IMFS_dump_directory( the_jnode, level + 1 ); a0008600: e2817001 add r7, r1, #1 <== NOT EXECUTED IMFS_assert( level >= 0 ); IMFS_assert( the_directory->type == IMFS_DIRECTORY ); the_chain = &the_directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); a0008604: ea000011 b a0008650 <== NOT EXECUTED !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; for ( i=0 ; i<=level ; i++ ) a0008608: e3a05000 mov r5, #0 <== NOT EXECUTED a000860c: ea000004 b a0008624 <== NOT EXECUTED fprintf(stdout, "...." ); a0008610: e5983000 ldr r3, [r8] <== NOT EXECUTED a0008614: e59f0044 ldr r0, [pc, #68] ; a0008660 <== NOT EXECUTED !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; for ( i=0 ; i<=level ; i++ ) a0008618: e2855001 add r5, r5, #1 <== NOT EXECUTED fprintf(stdout, "...." ); a000861c: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a0008620: eb0030cc bl a0014958 <== NOT EXECUTED !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; for ( i=0 ; i<=level ; i++ ) a0008624: e1550006 cmp r5, r6 <== NOT EXECUTED a0008628: dafffff8 ble a0008610 <== NOT EXECUTED fprintf(stdout, "...." ); IMFS_print_jnode( the_jnode ); a000862c: e1a00004 mov r0, r4 <== NOT EXECUTED a0008630: ebffffaa bl a00084e0 <== NOT EXECUTED if ( the_jnode->type == IMFS_DIRECTORY ) a0008634: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a0008638: e3530001 cmp r3, #1 <== NOT EXECUTED a000863c: 1a000002 bne a000864c <== NOT EXECUTED IMFS_dump_directory( the_jnode, level + 1 ); a0008640: e1a00004 mov r0, r4 <== NOT EXECUTED a0008644: e1a01007 mov r1, r7 <== NOT EXECUTED a0008648: ebffffe7 bl a00085ec <== NOT EXECUTED the_chain = &the_directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { a000864c: e5944000 ldr r4, [r4] <== NOT EXECUTED IMFS_assert( level >= 0 ); IMFS_assert( the_directory->type == IMFS_DIRECTORY ); the_chain = &the_directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); a0008650: e154000a cmp r4, sl <== NOT EXECUTED a0008654: 1affffeb bne a0008608 <== NOT EXECUTED fprintf(stdout, "...." ); IMFS_print_jnode( the_jnode ); if ( the_jnode->type == IMFS_DIRECTORY ) IMFS_dump_directory( the_jnode, level + 1 ); } } a0008658: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED =============================================================================== a000cf48 : const char *pathname, /* IN */ size_t pathnamelen, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { a000cf48: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} char token[ IMFS_NAME_MAX + 1 ]; rtems_filesystem_location_info_t newloc; IMFS_jnode_t *node; int result; if ( !rtems_libio_is_valid_perms( flags ) ) { a000cf4c: e3d27007 bics r7, r2, #7 const char *pathname, /* IN */ size_t pathnamelen, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { a000cf50: e24dd040 sub sp, sp, #64 ; 0x40 a000cf54: e58d0000 str r0, [sp] a000cf58: e1a06001 mov r6, r1 a000cf5c: e1a08002 mov r8, r2 a000cf60: e1a04003 mov r4, r3 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; a000cf64: 05935000 ldreq r5, [r3] rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { int i = 0; int len; IMFS_token_types type = IMFS_CURRENT_DIR; a000cf68: 03a09001 moveq r9, #1 * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { type = IMFS_get_token( &pathname[i], pathnamelen, token, &len ); a000cf6c: 028da004 addeq sl, sp, #4 char token[ IMFS_NAME_MAX + 1 ]; rtems_filesystem_location_info_t newloc; IMFS_jnode_t *node; int result; if ( !rtems_libio_is_valid_perms( flags ) ) { a000cf70: 0a000057 beq a000d0d4 rtems_set_errno_and_return_minus_one( EIO ); a000cf74: eb000c95 bl a00101d0 <__errno> <== NOT EXECUTED a000cf78: e3a03005 mov r3, #5 <== NOT EXECUTED a000cf7c: ea00007e b a000d17c <== NOT EXECUTED * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { type = IMFS_get_token( &pathname[i], pathnamelen, token, &len ); a000cf80: e59d2000 ldr r2, [sp] a000cf84: e28d303c add r3, sp, #60 ; 0x3c a000cf88: e1a01006 mov r1, r6 a000cf8c: e0820007 add r0, r2, r7 a000cf90: e1a0200a mov r2, sl a000cf94: eb0001ae bl a000d654 pathnamelen -= len; i += len; if ( !pathloc->node_access ) a000cf98: e5943000 ldr r3, [r4] * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { type = IMFS_get_token( &pathname[i], pathnamelen, token, &len ); a000cf9c: e1a09000 mov r9, r0 pathnamelen -= len; a000cfa0: e59db03c ldr fp, [sp, #60] ; 0x3c i += len; if ( !pathloc->node_access ) a000cfa4: e3530000 cmp r3, #0 a000cfa8: 0a000041 beq a000d0b4 rtems_set_errno_and_return_minus_one( ENOENT ); /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) a000cfac: e3500000 cmp r0, #0 a000cfb0: 0a000006 beq a000cfd0 if ( node->type == IMFS_DIRECTORY ) a000cfb4: e595104c ldr r1, [r5, #76] ; 0x4c a000cfb8: e3510001 cmp r1, #1 a000cfbc: 1a000003 bne a000cfd0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) a000cfc0: e1a00004 mov r0, r4 a000cfc4: ebffffbc bl a000cebc a000cfc8: e3500000 cmp r0, #0 a000cfcc: 0a000068 beq a000d174 rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { a000cfd0: e3590003 cmp r9, #3 */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { type = IMFS_get_token( &pathname[i], pathnamelen, token, &len ); pathnamelen -= len; a000cfd4: e06b6006 rsb r6, fp, r6 i += len; a000cfd8: e087700b add r7, r7, fp if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; a000cfdc: e5945000 ldr r5, [r4] switch( type ) { a000cfe0: 0a000014 beq a000d038 a000cfe4: e3590004 cmp r9, #4 a000cfe8: 0a000036 beq a000d0c8 a000cfec: e3590002 cmp r9, #2 a000cff0: 1a000037 bne a000d0d4 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) a000cff4: e59fc194 ldr ip, [pc, #404] ; a000d190 <== NOT EXECUTED a000cff8: e59c3000 ldr r3, [ip] <== NOT EXECUTED a000cffc: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED a000d000: e1550003 cmp r5, r3 <== NOT EXECUTED a000d004: 0a000032 beq a000d0d4 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access) { a000d008: e594e010 ldr lr, [r4, #16] <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == a000d00c: e59e301c ldr r3, [lr, #28] <== NOT EXECUTED a000d010: e1550003 cmp r5, r3 <== NOT EXECUTED */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; /* Throw out the .. in this case */ } else { newloc = pathloc->mt_entry->mt_point_node; a000d014: 028dc028 addeq ip, sp, #40 ; 0x28 <== NOT EXECUTED a000d018: 028ee008 addeq lr, lr, #8 <== NOT EXECUTED a000d01c: 0a000037 beq a000d100 <== NOT EXECUTED pathnamelen+len, flags,pathloc); } } else { if ( !node->Parent ) a000d020: e5955008 ldr r5, [r5, #8] <== NOT EXECUTED a000d024: e3550000 cmp r5, #0 <== NOT EXECUTED a000d028: 1a000024 bne a000d0c0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); a000d02c: eb000c67 bl a00101d0 <__errno> <== NOT EXECUTED a000d030: e5809000 str r9, [r0] <== NOT EXECUTED a000d034: ea000051 b a000d180 <== NOT EXECUTED case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { a000d038: e595304c ldr r3, [r5, #76] ; 0x4c a000d03c: e3530003 cmp r3, #3 a000d040: 1a000004 bne a000d058 IMFS_evaluate_hard_link( pathloc, 0 ); a000d044: e1a00004 mov r0, r4 <== NOT EXECUTED a000d048: e3a01000 mov r1, #0 <== NOT EXECUTED a000d04c: ebffffaa bl a000cefc <== NOT EXECUTED node = pathloc->node_access; a000d050: e5945000 ldr r5, [r4] <== NOT EXECUTED a000d054: ea000008 b a000d07c <== NOT EXECUTED * It would be a design error if we evaluated the link and * was broken. */ IMFS_assert( node ); } else if ( node->type == IMFS_SYM_LINK ) { a000d058: e3530004 cmp r3, #4 a000d05c: 1a000006 bne a000d07c result = IMFS_evaluate_sym_link( pathloc, 0 ); a000d060: e1a00004 mov r0, r4 <== NOT EXECUTED a000d064: e3a01000 mov r1, #0 <== NOT EXECUTED a000d068: eb000049 bl a000d194 <== NOT EXECUTED /* * In contrast to a hard link, it is possible to have a broken * symbolic link. */ node = pathloc->node_access; if ( result == -1 ) a000d06c: e3700001 cmn r0, #1 <== NOT EXECUTED * was broken. */ IMFS_assert( node ); } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); a000d070: e1a0b000 mov fp, r0 <== NOT EXECUTED /* * In contrast to a hard link, it is possible to have a broken * symbolic link. */ node = pathloc->node_access; a000d074: e5945000 ldr r5, [r4] <== NOT EXECUTED if ( result == -1 ) a000d078: 0a000041 beq a000d184 <== NOT EXECUTED } /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) a000d07c: e595304c ldr r3, [r5, #76] ; 0x4c a000d080: e3530001 cmp r3, #1 a000d084: 0a000002 beq a000d094 rtems_set_errno_and_return_minus_one( ENOTDIR ); a000d088: eb000c50 bl a00101d0 <__errno> <== NOT EXECUTED a000d08c: e3a03014 mov r3, #20 <== NOT EXECUTED a000d090: ea000039 b a000d17c <== NOT EXECUTED /* * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { a000d094: e595e05c ldr lr, [r5, #92] ; 0x5c a000d098: e35e0000 cmp lr, #0 a000d09c: 1a000015 bne a000d0f8 } /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); a000d0a0: e1a00005 mov r0, r5 a000d0a4: e1a0100a mov r1, sl a000d0a8: eb000149 bl a000d5d4 if ( !node ) a000d0ac: e2505000 subs r5, r0, #0 a000d0b0: 1a000002 bne a000d0c0 rtems_set_errno_and_return_minus_one( ENOENT ); a000d0b4: eb000c45 bl a00101d0 <__errno> a000d0b8: e3a03002 mov r3, #2 a000d0bc: ea00002e b a000d17c /* * Set the node access to the point we have found. */ pathloc->node_access = node; a000d0c0: e5845000 str r5, [r4] a000d0c4: ea000002 b a000d0d4 case IMFS_NO_MORE_PATH: case IMFS_CURRENT_DIR: break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); a000d0c8: eb000c40 bl a00101d0 <__errno> <== NOT EXECUTED a000d0cc: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED a000d0d0: ea000029 b a000d17c <== NOT EXECUTED /* * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { a000d0d4: e3590004 cmp r9, #4 a000d0d8: 13590000 cmpne r9, #0 a000d0dc: 1affffa7 bne a000cf80 * new fs root node and let let the mounted filesystem set the handlers. * * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { a000d0e0: e595304c ldr r3, [r5, #76] ; 0x4c a000d0e4: e3530001 cmp r3, #1 a000d0e8: 1a000019 bne a000d154 if ( node->info.directory.mt_fs != NULL ) { a000d0ec: e595e05c ldr lr, [r5, #92] ; 0x5c a000d0f0: e35e0000 cmp lr, #0 a000d0f4: 0a000016 beq a000d154 newloc = node->info.directory.mt_fs->mt_fs_root; a000d0f8: e28dc028 add ip, sp, #40 ; 0x28 <== NOT EXECUTED a000d0fc: e28ee01c add lr, lr, #28 <== NOT EXECUTED a000d100: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED a000d104: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000d108: e59ee000 ldr lr, [lr] <== NOT EXECUTED a000d10c: e58ce000 str lr, [ip] <== NOT EXECUTED *pathloc = newloc; a000d110: e28dc028 add ip, sp, #40 ; 0x28 <== NOT EXECUTED a000d114: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000d118: e1a0c004 mov ip, r4 <== NOT EXECUTED a000d11c: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], a000d120: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; a000d124: e58ce000 str lr, [ip] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], a000d128: e594300c ldr r3, [r4, #12] <== NOT EXECUTED a000d12c: e59d2000 ldr r2, [sp] <== NOT EXECUTED a000d130: e0610007 rsb r0, r1, r7 <== NOT EXECUTED a000d134: e593c000 ldr ip, [r3] <== NOT EXECUTED a000d138: e0820000 add r0, r2, r0 <== NOT EXECUTED a000d13c: e0861001 add r1, r6, r1 <== NOT EXECUTED a000d140: e1a02008 mov r2, r8 <== NOT EXECUTED a000d144: e1a03004 mov r3, r4 <== NOT EXECUTED a000d148: e12fff3c blx ip <== NOT EXECUTED a000d14c: e1a0b000 mov fp, r0 <== NOT EXECUTED a000d150: ea00000b b a000d184 <== NOT EXECUTED flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); a000d154: e1a00004 mov r0, r4 a000d158: ebffff3a bl a000ce48 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) a000d15c: e1a01008 mov r1, r8 flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); a000d160: e1a0b000 mov fp, r0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) a000d164: e1a00004 mov r0, r4 a000d168: ebffff53 bl a000cebc a000d16c: e3500000 cmp r0, #0 a000d170: 1a000003 bne a000d184 rtems_set_errno_and_return_minus_one( EACCES ); a000d174: eb000c15 bl a00101d0 <__errno> <== NOT EXECUTED a000d178: e3a0300d mov r3, #13 <== NOT EXECUTED a000d17c: e5803000 str r3, [r0] a000d180: e3e0b000 mvn fp, #0 return result; } a000d184: e1a0000b mov r0, fp a000d188: e28dd040 add sp, sp, #64 ; 0x40 a000d18c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} =============================================================================== a000d2d0 : int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { a000d2d0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} a000d2d4: e24dd03c sub sp, sp, #60 ; 0x3c a000d2d8: e1a07000 mov r7, r0 a000d2dc: e1a04001 mov r4, r1 a000d2e0: e1a0a002 mov sl, r2 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; a000d2e4: e5916000 ldr r6, [r1] /* * Get the path length. */ pathlen = strlen( path ); a000d2e8: eb000fa2 bl a0011178 const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { int i = 0; a000d2ec: e3a05000 mov r5, #0 node = pathloc->node_access; /* * Get the path length. */ pathlen = strlen( path ); a000d2f0: e1a08000 mov r8, r0 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); a000d2f4: e1a01008 mov r1, r8 a000d2f8: e28d3038 add r3, sp, #56 ; 0x38 a000d2fc: e0870005 add r0, r7, r5 a000d300: e1a0200d mov r2, sp a000d304: eb0000d2 bl a000d654 pathlen -= len; i += len; if ( !pathloc->node_access ) a000d308: e5943000 ldr r3, [r4] */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); pathlen -= len; a000d30c: e59db038 ldr fp, [sp, #56] ; 0x38 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); a000d310: e1a09000 mov r9, r0 pathlen -= len; i += len; if ( !pathloc->node_access ) a000d314: e3530000 cmp r3, #0 */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); pathlen -= len; a000d318: e06b8008 rsb r8, fp, r8 i += len; if ( !pathloc->node_access ) a000d31c: 0a000060 beq a000d4a4 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) a000d320: e3500000 cmp r0, #0 a000d324: 0a000006 beq a000d344 if ( node->type == IMFS_DIRECTORY ) a000d328: e596104c ldr r1, [r6, #76] ; 0x4c a000d32c: e3510001 cmp r1, #1 a000d330: 1a000003 bne a000d344 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) a000d334: e1a00004 mov r0, r4 a000d338: ebfffedf bl a000cebc a000d33c: e3500000 cmp r0, #0 a000d340: 0a00006c beq a000d4f8 rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; a000d344: e5943000 ldr r3, [r4] while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); pathlen -= len; i += len; a000d348: e085500b add r5, r5, fp if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; a000d34c: e1a06003 mov r6, r3 switch( type ) { a000d350: e3590004 cmp r9, #4 a000d354: 979ff109 ldrls pc, [pc, r9, lsl #2] a000d358: eaffffe5 b a000d2f4 <== NOT EXECUTED a000d35c: a000d468 .word 0xa000d468 <== NOT EXECUTED a000d360: a000d2f4 .word 0xa000d2f4 <== NOT EXECUTED a000d364: a000d370 .word 0xa000d370 <== NOT EXECUTED a000d368: a000d3ac .word 0xa000d3ac <== NOT EXECUTED a000d36c: a000d474 .word 0xa000d474 <== NOT EXECUTED case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) a000d370: e59f119c ldr r1, [pc, #412] ; a000d514 <== NOT EXECUTED a000d374: e5912000 ldr r2, [r1] <== NOT EXECUTED a000d378: e5922018 ldr r2, [r2, #24] <== NOT EXECUTED a000d37c: e1530002 cmp r3, r2 <== NOT EXECUTED a000d380: 0affffdb beq a000d2f4 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){ a000d384: e594e010 ldr lr, [r4, #16] <== NOT EXECUTED a000d388: e59e201c ldr r2, [lr, #28] <== NOT EXECUTED a000d38c: e1530002 cmp r3, r2 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; a000d390: 028dc024 addeq ip, sp, #36 ; 0x24 <== NOT EXECUTED a000d394: 028ee008 addeq lr, lr, #8 <== NOT EXECUTED a000d398: 0a000019 beq a000d404 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); } } else { if ( !node->Parent ) a000d39c: e5936008 ldr r6, [r3, #8] <== NOT EXECUTED a000d3a0: e3560000 cmp r6, #0 <== NOT EXECUTED a000d3a4: 1a00002d bne a000d460 <== NOT EXECUTED a000d3a8: ea00003d b a000d4a4 <== NOT EXECUTED pathloc->node_access = node; break; case IMFS_NAME: if ( node->type == IMFS_HARD_LINK ) { a000d3ac: e593304c ldr r3, [r3, #76] ; 0x4c a000d3b0: e3530003 cmp r3, #3 a000d3b4: 0a000001 beq a000d3c0 result = IMFS_evaluate_link( pathloc, 0 ); if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { a000d3b8: e3530004 cmp r3, #4 a000d3bc: 1a000005 bne a000d3d8 result = IMFS_evaluate_link( pathloc, 0 ); a000d3c0: e1a00004 mov r0, r4 <== NOT EXECUTED a000d3c4: e3a01000 mov r1, #0 <== NOT EXECUTED a000d3c8: ebffff93 bl a000d21c <== NOT EXECUTED if ( result == -1 ) a000d3cc: e3700001 cmn r0, #1 <== NOT EXECUTED if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_link( pathloc, 0 ); a000d3d0: e1a06000 mov r6, r0 <== NOT EXECUTED if ( result == -1 ) a000d3d4: 0a00004b beq a000d508 <== NOT EXECUTED return -1; } node = pathloc->node_access; a000d3d8: e5940000 ldr r0, [r4] if ( !node ) a000d3dc: e3500000 cmp r0, #0 a000d3e0: 0a00003c beq a000d4d8 /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) a000d3e4: e590304c ldr r3, [r0, #76] ; 0x4c a000d3e8: e3530001 cmp r3, #1 a000d3ec: 1a000039 bne a000d4d8 /* * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { a000d3f0: e590e05c ldr lr, [r0, #92] ; 0x5c a000d3f4: e35e0000 cmp lr, #0 a000d3f8: 0a000014 beq a000d450 newloc = node->info.directory.mt_fs->mt_fs_root; a000d3fc: e28dc024 add ip, sp, #36 ; 0x24 <== NOT EXECUTED a000d400: e28ee01c add lr, lr, #28 <== NOT EXECUTED a000d404: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED a000d408: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000d40c: e59ee000 ldr lr, [lr] <== NOT EXECUTED a000d410: e58ce000 str lr, [ip] <== NOT EXECUTED *pathloc = newloc; a000d414: e28dc024 add ip, sp, #36 ; 0x24 <== NOT EXECUTED a000d418: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000d41c: e1a0c004 mov ip, r4 <== NOT EXECUTED a000d420: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); a000d424: e59d2038 ldr r2, [sp, #56] ; 0x38 <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; a000d428: e58ce000 str lr, [ip] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); a000d42c: e594300c ldr r3, [r4, #12] <== NOT EXECUTED a000d430: e0625005 rsb r5, r2, r5 <== NOT EXECUTED a000d434: e0870005 add r0, r7, r5 <== NOT EXECUTED a000d438: e5933004 ldr r3, [r3, #4] <== NOT EXECUTED a000d43c: e1a01004 mov r1, r4 <== NOT EXECUTED a000d440: e1a0200a mov r2, sl <== NOT EXECUTED a000d444: e12fff33 blx r3 <== NOT EXECUTED a000d448: e1a06000 mov r6, r0 <== NOT EXECUTED a000d44c: ea00002d b a000d508 <== NOT EXECUTED /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); a000d450: e1a0100d mov r1, sp a000d454: eb00005e bl a000d5d4 /* * If there is no node we have found the name of the node we * wish to create. */ if ( ! node ) a000d458: e2506000 subs r6, r0, #0 a000d45c: 0a000007 beq a000d480 done = true; else pathloc->node_access = node; a000d460: e5846000 str r6, [r4] a000d464: eaffffa2 b a000d2f4 break; case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); a000d468: eb000b58 bl a00101d0 <__errno> a000d46c: e3a03011 mov r3, #17 a000d470: ea000022 b a000d500 break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); a000d474: eb000b55 bl a00101d0 <__errno> <== NOT EXECUTED a000d478: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED a000d47c: ea00001f b a000d500 <== NOT EXECUTED case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; a000d480: e59d3038 ldr r3, [sp, #56] ; 0x38 a000d484: e0633005 rsb r3, r3, r5 a000d488: e0873003 add r3, r7, r3 a000d48c: e58a3000 str r3, [sl] * pathloc is returned with a pointer to the parent of the new node. * name is returned with a pointer to the first character in the * new node name. The parent node is verified to be a directory. */ int IMFS_evaluate_for_make( a000d490: e0875005 add r5, r7, r5 /* * We have evaluated the path as far as we can. * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { a000d494: ea000005 b a000d4b0 if ( !IMFS_is_separator( path[ i ] ) ) a000d498: ebffe6cd bl a0006fd4 <== NOT EXECUTED a000d49c: e3500000 cmp r0, #0 <== NOT EXECUTED a000d4a0: 1a000002 bne a000d4b0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); a000d4a4: eb000b49 bl a00101d0 <__errno> <== NOT EXECUTED a000d4a8: e3a03002 mov r3, #2 <== NOT EXECUTED a000d4ac: ea000013 b a000d500 <== NOT EXECUTED /* * We have evaluated the path as far as we can. * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { a000d4b0: e4d50001 ldrb r0, [r5], #1 a000d4b4: e3500000 cmp r0, #0 a000d4b8: 1afffff6 bne a000d498 /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); a000d4bc: e1a00004 mov r0, r4 a000d4c0: ebfffe60 bl a000ce48 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) a000d4c4: e5943000 ldr r3, [r4] /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); a000d4c8: e1a06000 mov r6, r0 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) a000d4cc: e593304c ldr r3, [r3, #76] ; 0x4c a000d4d0: e3530001 cmp r3, #1 a000d4d4: 0a000002 beq a000d4e4 rtems_set_errno_and_return_minus_one( ENOTDIR ); a000d4d8: eb000b3c bl a00101d0 <__errno> <== NOT EXECUTED a000d4dc: e3a03014 mov r3, #20 <== NOT EXECUTED a000d4e0: ea000006 b a000d500 <== NOT EXECUTED /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) a000d4e4: e1a00004 mov r0, r4 a000d4e8: e3a01003 mov r1, #3 a000d4ec: ebfffe72 bl a000cebc a000d4f0: e3500000 cmp r0, #0 a000d4f4: 1a000003 bne a000d508 rtems_set_errno_and_return_minus_one( EACCES ); a000d4f8: eb000b34 bl a00101d0 <__errno> <== NOT EXECUTED a000d4fc: e3a0300d mov r3, #13 <== NOT EXECUTED a000d500: e5803000 str r3, [r0] a000d504: e3e06000 mvn r6, #0 return result; } a000d508: e1a00006 mov r0, r6 a000d50c: e28dd03c add sp, sp, #60 ; 0x3c a000d510: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} =============================================================================== a000cefc : int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000cefc: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_assert( jnode->type == IMFS_HARD_LINK ); /* * Set the hard link value and the handlers. */ node->node_access = jnode->info.hard_link.link_node; a000cf00: e5903000 ldr r3, [r0] <== NOT EXECUTED int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000cf04: e1a04000 mov r4, r0 <== NOT EXECUTED a000cf08: e1a05001 mov r5, r1 <== NOT EXECUTED IMFS_assert( jnode->type == IMFS_HARD_LINK ); /* * Set the hard link value and the handlers. */ node->node_access = jnode->info.hard_link.link_node; a000cf0c: e5933050 ldr r3, [r3, #80] ; 0x50 <== NOT EXECUTED a000cf10: e5803000 str r3, [r0] <== NOT EXECUTED IMFS_Set_handlers( node ); a000cf14: ebffffcb bl a000ce48 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) a000cf18: e1a00004 mov r0, r4 <== NOT EXECUTED a000cf1c: e1a01005 mov r1, r5 <== NOT EXECUTED a000cf20: ebffffe5 bl a000cebc <== NOT EXECUTED a000cf24: e3500000 cmp r0, #0 <== NOT EXECUTED a000cf28: 1a000004 bne a000cf40 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); a000cf2c: eb000ca7 bl a00101d0 <__errno> <== NOT EXECUTED a000cf30: e3a0300d mov r3, #13 <== NOT EXECUTED a000cf34: e5803000 str r3, [r0] <== NOT EXECUTED a000cf38: e3e00000 mvn r0, #0 <== NOT EXECUTED a000cf3c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED return result; a000cf40: e3a00000 mov r0, #0 <== NOT EXECUTED } a000cf44: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a000d21c : */ int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000d21c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000d220: e59f70a4 ldr r7, [pc, #164] ; a000d2cc <== NOT EXECUTED */ int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000d224: e1a04000 mov r4, r0 <== NOT EXECUTED a000d228: e1a05001 mov r5, r1 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000d22c: e5973000 ldr r3, [r7] <== NOT EXECUTED { IMFS_jnode_t *jnode; int result = 0; do { jnode = node->node_access; a000d230: e5946000 ldr r6, [r4] <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000d234: e1d323b0 ldrh r2, [r3, #48] ; 0x30 <== NOT EXECUTED a000d238: e2822001 add r2, r2, #1 <== NOT EXECUTED a000d23c: e1a02802 lsl r2, r2, #16 <== NOT EXECUTED a000d240: e1a02822 lsr r2, r2, #16 <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { a000d244: e3520005 cmp r2, #5 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000d248: e1c323b0 strh r2, [r3, #48] ; 0x30 <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { a000d24c: 9a000006 bls a000d26c <== NOT EXECUTED rtems_filesystem_link_counts = 0; a000d250: e3a02000 mov r2, #0 <== NOT EXECUTED a000d254: e1c323b0 strh r2, [r3, #48] ; 0x30 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ELOOP ); a000d258: eb000bdc bl a00101d0 <__errno> <== NOT EXECUTED a000d25c: e3a0305c mov r3, #92 ; 0x5c <== NOT EXECUTED a000d260: e5803000 str r3, [r0] <== NOT EXECUTED a000d264: e3e00000 mvn r0, #0 <== NOT EXECUTED a000d268: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED /* * Follow the Link node. */ if ( jnode->type == IMFS_HARD_LINK ) a000d26c: e596304c ldr r3, [r6, #76] ; 0x4c <== NOT EXECUTED a000d270: e3530003 cmp r3, #3 <== NOT EXECUTED a000d274: 1a000003 bne a000d288 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); a000d278: e1a00004 mov r0, r4 <== NOT EXECUTED a000d27c: e1a01005 mov r1, r5 <== NOT EXECUTED a000d280: ebffff1d bl a000cefc <== NOT EXECUTED a000d284: ea000004 b a000d29c <== NOT EXECUTED else if (jnode->type == IMFS_SYM_LINK ) a000d288: e3530004 cmp r3, #4 <== NOT EXECUTED a000d28c: 1a000004 bne a000d2a4 <== NOT EXECUTED result = IMFS_evaluate_sym_link( node, flags ); a000d290: e1a00004 mov r0, r4 <== NOT EXECUTED a000d294: e1a01005 mov r1, r5 <== NOT EXECUTED a000d298: ebffffbd bl a000d194 <== NOT EXECUTED } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); a000d29c: e3500000 cmp r0, #0 <== NOT EXECUTED a000d2a0: 1a000004 bne a000d2b8 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) result = IMFS_evaluate_sym_link( node, flags ); } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || a000d2a4: e596304c ldr r3, [r6, #76] ; 0x4c <== NOT EXECUTED a000d2a8: e2433003 sub r3, r3, #3 <== NOT EXECUTED a000d2ac: e3530001 cmp r3, #1 <== NOT EXECUTED a000d2b0: 9affffdd bls a000d22c <== NOT EXECUTED a000d2b4: e3a00000 mov r0, #0 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; a000d2b8: e59f300c ldr r3, [pc, #12] ; a000d2cc <== NOT EXECUTED a000d2bc: e3a02000 mov r2, #0 <== NOT EXECUTED a000d2c0: e5933000 ldr r3, [r3] <== NOT EXECUTED a000d2c4: e1c323b0 strh r2, [r3, #48] ; 0x30 <== NOT EXECUTED return result; } a000d2c8: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED =============================================================================== a000cebc : uid_t st_uid; gid_t st_gid; IMFS_jnode_t *jnode; int flags_to_test; if ( !rtems_libio_is_valid_perms( flags ) ) a000cebc: e3d13007 bics r3, r1, #7 */ int IMFS_evaluate_permission( rtems_filesystem_location_info_t *node, int flags ) { a000cec0: e52de004 push {lr} ; (str lr, [sp, #-4]!) uid_t st_uid; gid_t st_gid; IMFS_jnode_t *jnode; int flags_to_test; if ( !rtems_libio_is_valid_perms( flags ) ) a000cec4: 0a000004 beq a000cedc rtems_set_errno_and_return_minus_one( EPERM ); a000cec8: eb000cc0 bl a00101d0 <__errno> <== NOT EXECUTED a000cecc: e3a03001 mov r3, #1 <== NOT EXECUTED a000ced0: e5803000 str r3, [r0] <== NOT EXECUTED a000ced4: e3e00000 mvn r0, #0 <== NOT EXECUTED a000ced8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED /* * If all of the flags are set we have permission * to do this. */ if ( ( flags_to_test & jnode->st_mode) == flags_to_test ) a000cedc: e5903000 ldr r3, [r0] */ flags_to_test = flags; if ( st_uid == jnode->st_uid ) flags_to_test <<= 6; a000cee0: e1a01301 lsl r1, r1, #6 /* * If all of the flags are set we have permission * to do this. */ if ( ( flags_to_test & jnode->st_mode) == flags_to_test ) a000cee4: e5930030 ldr r0, [r3, #48] ; 0x30 a000cee8: e0010000 and r0, r1, r0 gid_t st_gid; IMFS_jnode_t *jnode; int flags_to_test; if ( !rtems_libio_is_valid_perms( flags ) ) rtems_set_errno_and_return_minus_one( EPERM ); a000ceec: e1500001 cmp r0, r1 a000cef0: 13a00000 movne r0, #0 a000cef4: 03a00001 moveq r0, #1 */ if ( ( flags_to_test & jnode->st_mode) == flags_to_test ) return 1; return 0; } a000cef8: e49df004 pop {pc} ; (ldr pc, [sp], #4) =============================================================================== a000d194 : int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000d194: e92d4071 push {r0, r4, r5, r6, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; a000d198: e5906000 ldr r6, [r0] <== NOT EXECUTED int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000d19c: e1a04000 mov r4, r0 <== NOT EXECUTED a000d1a0: e1a05001 mov r5, r1 <== NOT EXECUTED /* * Move the node_access to either the symbolic links parent or * root depending on the symbolic links path. */ node->node_access = jnode->Parent; a000d1a4: e5963008 ldr r3, [r6, #8] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( a000d1a8: e1a0100d mov r1, sp <== NOT EXECUTED a000d1ac: e1a02004 mov r2, r4 <== NOT EXECUTED /* * Move the node_access to either the symbolic links parent or * root depending on the symbolic links path. */ node->node_access = jnode->Parent; a000d1b0: e5803000 str r3, [r0] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( a000d1b4: e5960050 ldr r0, [r6, #80] ; 0x50 <== NOT EXECUTED a000d1b8: eb000343 bl a000decc <== NOT EXECUTED ); /* * Use eval path to evaluate the path of the symbolic link. */ result = IMFS_eval_path( a000d1bc: e59d3000 ldr r3, [sp] <== NOT EXECUTED a000d1c0: e5966050 ldr r6, [r6, #80] ; 0x50 <== NOT EXECUTED a000d1c4: e0866003 add r6, r6, r3 <== NOT EXECUTED a000d1c8: e1a00006 mov r0, r6 <== NOT EXECUTED a000d1cc: eb000fe9 bl a0011178 <== NOT EXECUTED a000d1d0: e1a02005 mov r2, r5 <== NOT EXECUTED a000d1d4: e1a01000 mov r1, r0 <== NOT EXECUTED a000d1d8: e1a03004 mov r3, r4 <== NOT EXECUTED a000d1dc: e1a00006 mov r0, r6 <== NOT EXECUTED a000d1e0: ebffff58 bl a000cf48 <== NOT EXECUTED a000d1e4: e1a06000 mov r6, r0 <== NOT EXECUTED strlen( &jnode->info.sym_link.name[i] ), flags, node ); IMFS_Set_handlers( node ); a000d1e8: e1a00004 mov r0, r4 <== NOT EXECUTED a000d1ec: ebffff15 bl a000ce48 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) a000d1f0: e1a00004 mov r0, r4 <== NOT EXECUTED a000d1f4: e1a01005 mov r1, r5 <== NOT EXECUTED a000d1f8: ebffff2f bl a000cebc <== NOT EXECUTED a000d1fc: e3500000 cmp r0, #0 <== NOT EXECUTED a000d200: 1a000003 bne a000d214 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); a000d204: eb000bf1 bl a00101d0 <__errno> <== NOT EXECUTED a000d208: e3a0300d mov r3, #13 <== NOT EXECUTED a000d20c: e5803000 str r3, [r0] <== NOT EXECUTED a000d210: e3e06000 mvn r6, #0 <== NOT EXECUTED return result; } a000d214: e1a00006 mov r0, r6 <== NOT EXECUTED a000d218: e8bd8078 pop {r3, r4, r5, r6, pc} <== NOT EXECUTED =============================================================================== a000fc84 : int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { a000fc84: e92d4013 push {r0, r1, r4, lr} <== NOT EXECUTED IMFS_jnode_t *jnode; #if defined(RTEMS_POSIX_API) uid_t st_uid; #endif jnode = loc->node_access; a000fc88: e5904000 ldr r4, [r0] <== NOT EXECUTED /* * Change only the RWX permissions on the jnode to mode. */ jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); a000fc8c: e1a01a01 lsl r1, r1, #20 <== NOT EXECUTED IMFS_update_ctime( jnode ); a000fc90: e1a0000d mov r0, sp <== NOT EXECUTED /* * Change only the RWX permissions on the jnode to mode. */ jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); a000fc94: e5943030 ldr r3, [r4, #48] ; 0x30 <== NOT EXECUTED a000fc98: e3c33eff bic r3, r3, #4080 ; 0xff0 <== NOT EXECUTED a000fc9c: e3c3300f bic r3, r3, #15 <== NOT EXECUTED jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); a000fca0: e1833a21 orr r3, r3, r1, lsr #20 <== NOT EXECUTED a000fca4: e5843030 str r3, [r4, #48] ; 0x30 <== NOT EXECUTED IMFS_update_ctime( jnode ); a000fca8: e3a01000 mov r1, #0 <== NOT EXECUTED a000fcac: ebffd964 bl a0006244 <== NOT EXECUTED a000fcb0: e59d3000 ldr r3, [sp] <== NOT EXECUTED return 0; } a000fcb4: e3a00000 mov r0, #0 <== NOT EXECUTED */ jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); IMFS_update_ctime( jnode ); a000fcb8: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return 0; } a000fcbc: e8bd801c pop {r2, r3, r4, pc} <== NOT EXECUTED =============================================================================== a000fcc0 : int IMFS_fdatasync( rtems_libio_t *iop ) { return 0; } a000fcc0: e3a00000 mov r0, #0 <== NOT EXECUTED a000fcc4: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a0006cf0 : } int IMFS_fifo_close( rtems_libio_t *iop ) { a0006cf0: e92d4030 push {r4, r5, lr} <== NOT EXECUTED int err = 0; IMFS_jnode_t *jnode = iop->pathinfo.node_access; a0006cf4: e5905018 ldr r5, [r0, #24] <== NOT EXECUTED } int IMFS_fifo_close( rtems_libio_t *iop ) { a0006cf8: e1a04000 mov r4, r0 <== NOT EXECUTED int err = 0; IMFS_jnode_t *jnode = iop->pathinfo.node_access; pipe_release(&JNODE2PIPE(jnode), iop); a0006cfc: e1a01004 mov r1, r4 <== NOT EXECUTED a0006d00: e2850050 add r0, r5, #80 ; 0x50 <== NOT EXECUTED a0006d04: eb00228f bl a000f748 <== NOT EXECUTED iop->flags &= ~LIBIO_FLAGS_OPEN; a0006d08: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED IMFS_check_node_remove(jnode); a0006d0c: e1a00005 mov r0, r5 <== NOT EXECUTED int err = 0; IMFS_jnode_t *jnode = iop->pathinfo.node_access; pipe_release(&JNODE2PIPE(jnode), iop); iop->flags &= ~LIBIO_FLAGS_OPEN; a0006d10: e3c33c01 bic r3, r3, #256 ; 0x100 <== NOT EXECUTED a0006d14: e5843014 str r3, [r4, #20] <== NOT EXECUTED IMFS_check_node_remove(jnode); a0006d18: eb00016e bl a00072d8 <== NOT EXECUTED IMFS_FIFO_RETURN(err); } a0006d1c: e3a00000 mov r0, #0 <== NOT EXECUTED a0006d20: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a0006bcc : void *buffer ) { int err; if (command == FIONBIO) { a0006bcc: e59fc06c ldr ip, [pc, #108] ; a0006c40 <== NOT EXECUTED int IMFS_fifo_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { a0006bd0: e92d4010 push {r4, lr} <== NOT EXECUTED int err; if (command == FIONBIO) { a0006bd4: e151000c cmp r1, ip <== NOT EXECUTED int IMFS_fifo_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { a0006bd8: e1a03000 mov r3, r0 <== NOT EXECUTED int err; if (command == FIONBIO) { a0006bdc: 1a00000a bne a0006c0c <== NOT EXECUTED if (buffer == NULL) a0006be0: e3520000 cmp r2, #0 <== NOT EXECUTED a0006be4: 0a00000e beq a0006c24 <== NOT EXECUTED err = -EFAULT; else { if (*(int *)buffer) a0006be8: e5924000 ldr r4, [r2] <== NOT EXECUTED a0006bec: e5932014 ldr r2, [r3, #20] <== NOT EXECUTED a0006bf0: e3540000 cmp r4, #0 <== NOT EXECUTED iop->flags |= LIBIO_FLAGS_NO_DELAY; a0006bf4: 13822001 orrne r2, r2, #1 <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_NO_DELAY; a0006bf8: 03c22001 biceq r2, r2, #1 <== NOT EXECUTED if (command == FIONBIO) { if (buffer == NULL) err = -EFAULT; else { if (*(int *)buffer) iop->flags |= LIBIO_FLAGS_NO_DELAY; a0006bfc: 15832014 strne r2, [r3, #20] <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_NO_DELAY; return 0; a0006c00: 13a04000 movne r4, #0 <== NOT EXECUTED err = -EFAULT; else { if (*(int *)buffer) iop->flags |= LIBIO_FLAGS_NO_DELAY; else iop->flags &= ~LIBIO_FLAGS_NO_DELAY; a0006c04: 05832014 streq r2, [r3, #20] <== NOT EXECUTED a0006c08: ea00000a b a0006c38 <== NOT EXECUTED return 0; } } else err = pipe_ioctl(LIBIO2PIPE(iop), command, buffer, iop); a0006c0c: e5930018 ldr r0, [r3, #24] <== NOT EXECUTED a0006c10: e5900050 ldr r0, [r0, #80] ; 0x50 <== NOT EXECUTED a0006c14: eb0024ac bl a000fecc <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006c18: e2504000 subs r4, r0, #0 <== NOT EXECUTED a0006c1c: aa000005 bge a0006c38 <== NOT EXECUTED a0006c20: ea000000 b a0006c28 <== NOT EXECUTED { int err; if (command == FIONBIO) { if (buffer == NULL) err = -EFAULT; a0006c24: e3e0400d mvn r4, #13 <== NOT EXECUTED } } else err = pipe_ioctl(LIBIO2PIPE(iop), command, buffer, iop); IMFS_FIFO_RETURN(err); a0006c28: eb002c6a bl a0011dd8 <__errno> <== NOT EXECUTED a0006c2c: e2644000 rsb r4, r4, #0 <== NOT EXECUTED a0006c30: e5804000 str r4, [r0] <== NOT EXECUTED a0006c34: e3e04000 mvn r4, #0 <== NOT EXECUTED } a0006c38: e1a00004 mov r0, r4 <== NOT EXECUTED a0006c3c: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a0006b7c : rtems_off64_t IMFS_fifo_lseek( rtems_libio_t *iop, rtems_off64_t offset, int whence ) { a0006b7c: e92d4011 push {r0, r4, lr} <== NOT EXECUTED off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop); a0006b80: e590c018 ldr ip, [r0, #24] <== NOT EXECUTED a0006b84: e58d0000 str r0, [sp] <== NOT EXECUTED a0006b88: e59c0050 ldr r0, [ip, #80] ; 0x50 <== NOT EXECUTED a0006b8c: eb0024e9 bl a000ff38 <== NOT EXECUTED a0006b90: e1a02000 mov r2, r0 <== NOT EXECUTED a0006b94: e1a03fc2 asr r3, r2, #31 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006b98: e3530000 cmp r3, #0 <== NOT EXECUTED rtems_libio_t *iop, rtems_off64_t offset, int whence ) { off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop); a0006b9c: e1a04000 mov r4, r0 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006ba0: a1a04003 movge r4, r3 <== NOT EXECUTED a0006ba4: a1a03002 movge r3, r2 <== NOT EXECUTED a0006ba8: aa000004 bge a0006bc0 <== NOT EXECUTED a0006bac: eb002c89 bl a0011dd8 <__errno> <== NOT EXECUTED a0006bb0: e2644000 rsb r4, r4, #0 <== NOT EXECUTED a0006bb4: e5804000 str r4, [r0] <== NOT EXECUTED a0006bb8: e3e03000 mvn r3, #0 <== NOT EXECUTED a0006bbc: e3e04000 mvn r4, #0 <== NOT EXECUTED } a0006bc0: e1a00003 mov r0, r3 <== NOT EXECUTED a0006bc4: e1a01004 mov r1, r4 <== NOT EXECUTED a0006bc8: e8bd8018 pop {r3, r4, pc} <== NOT EXECUTED =============================================================================== a0006d24 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { a0006d24: e1a01000 mov r1, r0 <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = fifo_open(&JNODE2PIPE(jnode), iop); a0006d28: e5900018 ldr r0, [r0, #24] <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { a0006d2c: e92d4010 push {r4, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = fifo_open(&JNODE2PIPE(jnode), iop); a0006d30: e2800050 add r0, r0, #80 ; 0x50 <== NOT EXECUTED a0006d34: eb0022af bl a000f7f8 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006d38: e2504000 subs r4, r0, #0 <== NOT EXECUTED a0006d3c: aa000003 bge a0006d50 <== NOT EXECUTED a0006d40: eb002c24 bl a0011dd8 <__errno> <== NOT EXECUTED a0006d44: e2644000 rsb r4, r4, #0 <== NOT EXECUTED a0006d48: e5804000 str r4, [r0] <== NOT EXECUTED a0006d4c: e3e04000 mvn r4, #0 <== NOT EXECUTED } a0006d50: e1a00004 mov r0, r4 <== NOT EXECUTED a0006d54: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a0006c9c : ssize_t IMFS_fifo_read( rtems_libio_t *iop, void *buffer, size_t count ) { a0006c9c: e92d4033 push {r0, r1, r4, r5, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; a0006ca0: e5904018 ldr r4, [r0, #24] <== NOT EXECUTED ssize_t IMFS_fifo_read( rtems_libio_t *iop, void *buffer, size_t count ) { a0006ca4: e1a03000 mov r3, r0 <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = pipe_read(JNODE2PIPE(jnode), buffer, count, iop); a0006ca8: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED a0006cac: eb0023be bl a000fbac <== NOT EXECUTED if (err > 0) a0006cb0: e2505000 subs r5, r0, #0 <== NOT EXECUTED a0006cb4: da000005 ble a0006cd0 <== NOT EXECUTED IMFS_update_atime(jnode); a0006cb8: e1a0000d mov r0, sp <== NOT EXECUTED a0006cbc: e3a01000 mov r1, #0 <== NOT EXECUTED a0006cc0: eb0003d6 bl a0007c20 <== NOT EXECUTED a0006cc4: e59d3000 ldr r3, [sp] <== NOT EXECUTED a0006cc8: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED a0006ccc: ea000005 b a0006ce8 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006cd0: 0a000004 beq a0006ce8 <== NOT EXECUTED a0006cd4: eb002c3f bl a0011dd8 <__errno> <== NOT EXECUTED a0006cd8: e2655000 rsb r5, r5, #0 <== NOT EXECUTED a0006cdc: e5805000 str r5, [r0] <== NOT EXECUTED a0006ce0: e3e00000 mvn r0, #0 <== NOT EXECUTED a0006ce4: ea000000 b a0006cec <== NOT EXECUTED a0006ce8: e1a00005 mov r0, r5 <== NOT EXECUTED } a0006cec: e8bd803c pop {r2, r3, r4, r5, pc} <== NOT EXECUTED =============================================================================== a0006c44 : ssize_t IMFS_fifo_write( rtems_libio_t *iop, const void *buffer, size_t count ) { a0006c44: e92d4033 push {r0, r1, r4, r5, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; a0006c48: e5904018 ldr r4, [r0, #24] <== NOT EXECUTED ssize_t IMFS_fifo_write( rtems_libio_t *iop, const void *buffer, size_t count ) { a0006c4c: e1a03000 mov r3, r0 <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop); a0006c50: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED a0006c54: eb002434 bl a000fd2c <== NOT EXECUTED if (err > 0) { a0006c58: e2505000 subs r5, r0, #0 <== NOT EXECUTED a0006c5c: da000006 ble a0006c7c <== NOT EXECUTED IMFS_mtime_ctime_update(jnode); a0006c60: e1a0000d mov r0, sp <== NOT EXECUTED a0006c64: e3a01000 mov r1, #0 <== NOT EXECUTED a0006c68: eb0003ec bl a0007c20 <== NOT EXECUTED a0006c6c: e59d3000 ldr r3, [sp] <== NOT EXECUTED a0006c70: e5843044 str r3, [r4, #68] ; 0x44 <== NOT EXECUTED a0006c74: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED a0006c78: ea000005 b a0006c94 <== NOT EXECUTED } IMFS_FIFO_RETURN(err); a0006c7c: 0a000004 beq a0006c94 <== NOT EXECUTED a0006c80: eb002c54 bl a0011dd8 <__errno> <== NOT EXECUTED a0006c84: e2655000 rsb r5, r5, #0 <== NOT EXECUTED a0006c88: e5805000 str r5, [r0] <== NOT EXECUTED a0006c8c: e3e00000 mvn r0, #0 <== NOT EXECUTED a0006c90: ea000000 b a0006c98 <== NOT EXECUTED a0006c94: e1a00005 mov r0, r5 <== NOT EXECUTED } a0006c98: e8bd803c pop {r2, r3, r4, r5, pc} <== NOT EXECUTED =============================================================================== a000d5d4 : IMFS_jnode_t *IMFS_find_match_in_dir( IMFS_jnode_t *directory, char *name ) { a000d5d4: e92d4070 push {r4, r5, r6, lr} a000d5d8: e1a04000 mov r4, r0 a000d5dc: e1a06001 mov r6, r1 /* * Check for "." and ".." */ if ( !strcmp( name, dotname ) ) a000d5e0: e1a00001 mov r0, r1 a000d5e4: e59f1060 ldr r1, [pc, #96] ; a000d64c a000d5e8: eb000e06 bl a0010e08 a000d5ec: e3500000 cmp r0, #0 a000d5f0: 0a000013 beq a000d644 return directory; if ( !strcmp( name, dotdotname ) ) a000d5f4: e1a00006 mov r0, r6 a000d5f8: e59f1050 ldr r1, [pc, #80] ; a000d650 a000d5fc: eb000e01 bl a0010e08 a000d600: e3500000 cmp r0, #0 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } a000d604: 15945050 ldrne r5, [r4, #80] ; 0x50 if ( !strcmp( name, dotname ) ) return directory; if ( !strcmp( name, dotdotname ) ) return directory->Parent; a000d608: 05944008 ldreq r4, [r4, #8] RTEMS_INLINE_ROUTINE bool _Chain_Is_tail( Chain_Control *the_chain, const Chain_Node *the_node ) { return (the_node == _Chain_Tail(the_chain)); a000d60c: 12844054 addne r4, r4, #84 ; 0x54 */ if ( !strcmp( name, dotname ) ) return directory; if ( !strcmp( name, dotdotname ) ) a000d610: 0a00000b beq a000d644 a000d614: ea000005 b a000d630 !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; if ( !strcmp( name, the_jnode->name ) ) a000d618: e1a00006 mov r0, r6 a000d61c: e285100c add r1, r5, #12 a000d620: eb000df8 bl a0010e08 a000d624: e3500000 cmp r0, #0 a000d628: 0a000004 beq a000d640 the_chain = &directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { a000d62c: e5955000 ldr r5, [r5] <== NOT EXECUTED if ( !strcmp( name, dotdotname ) ) return directory->Parent; the_chain = &directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); a000d630: e1550004 cmp r5, r4 a000d634: 1afffff7 bne a000d618 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; a000d638: e3a04000 mov r4, #0 a000d63c: ea000000 b a000d644 for ( the_node = rtems_chain_first( the_chain ); !rtems_chain_is_tail( the_chain, the_node ); the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; a000d640: e1a04005 mov r4, r5 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } a000d644: e1a00004 mov r0, r4 a000d648: e8bd8070 pop {r4, r5, r6, pc} =============================================================================== a000d518 : ((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { a000d518: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED /* * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access; a000d51c: e1a0c000 mov ip, r0 <== NOT EXECUTED a000d520: e5bc401c ldr r4, [ip, #28]! <== NOT EXECUTED ((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { a000d524: e24dd014 sub sp, sp, #20 <== NOT EXECUTED * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access; loc = temp_mt_entry->mt_fs_root; a000d528: e1a0e00d mov lr, sp <== NOT EXECUTED ((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { a000d52c: e1a05000 mov r5, r0 <== NOT EXECUTED * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access; loc = temp_mt_entry->mt_fs_root; a000d530: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000d534: e8ae000f stmia lr!, {r0, r1, r2, r3} <== NOT EXECUTED a000d538: e59c3000 ldr r3, [ip] <== NOT EXECUTED a000d53c: e58e3000 str r3, [lr] <== NOT EXECUTED /* * Set this to null to indicate that it is being unmounted. */ temp_mt_entry->mt_fs_root.node_access = NULL; a000d540: e3a03000 mov r3, #0 <== NOT EXECUTED a000d544: e585301c str r3, [r5, #28] <== NOT EXECUTED do { next = jnode->Parent; loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); a000d548: e1a0500d mov r5, sp <== NOT EXECUTED a000d54c: e1a0000d mov r0, sp <== NOT EXECUTED */ temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; a000d550: e5946008 ldr r6, [r4, #8] <== NOT EXECUTED loc.node_access = (void *)jnode; a000d554: e58d4000 str r4, [sp] <== NOT EXECUTED IMFS_Set_handlers( &loc ); a000d558: ebfffe3a bl a000ce48 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { a000d55c: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000d560: e3530001 cmp r3, #1 <== NOT EXECUTED a000d564: 1a000003 bne a000d578 <== NOT EXECUTED result = IMFS_unlink( NULL, &loc ); if (result != 0) return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { a000d568: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED RTEMS_INLINE_ROUTINE bool _Chain_Is_empty( const Chain_Control *the_chain ) { return _Chain_Immutable_first( the_chain ) == _Chain_Immutable_tail( the_chain ); a000d56c: e2843054 add r3, r4, #84 ; 0x54 <== NOT EXECUTED a000d570: e1520003 cmp r2, r3 <== NOT EXECUTED a000d574: 1a000005 bne a000d590 <== NOT EXECUTED result = IMFS_unlink( NULL, &loc ); a000d578: e3a00000 mov r0, #0 <== NOT EXECUTED a000d57c: e1a0100d mov r1, sp <== NOT EXECUTED a000d580: ebffe1cb bl a0005cb4 <== NOT EXECUTED if (result != 0) a000d584: e3500000 cmp r0, #0 <== NOT EXECUTED a000d588: 1a00000c bne a000d5c0 <== NOT EXECUTED return -1; jnode = next; a000d58c: e1a04006 mov r4, r6 <== NOT EXECUTED } if ( jnode != NULL ) { a000d590: e3540000 cmp r4, #0 <== NOT EXECUTED a000d594: 0a00000b beq a000d5c8 <== NOT EXECUTED if ( jnode->type == IMFS_DIRECTORY ) { a000d598: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000d59c: e3530001 cmp r3, #1 <== NOT EXECUTED a000d5a0: 1affffe9 bne a000d54c <== NOT EXECUTED } } } while (jnode != NULL); return 0; } a000d5a4: e5943050 ldr r3, [r4, #80] ; 0x50 <== NOT EXECUTED a000d5a8: e2842054 add r2, r4, #84 ; 0x54 <== NOT EXECUTED return -1; jnode = next; } if ( jnode != NULL ) { if ( jnode->type == IMFS_DIRECTORY ) { if ( jnode_has_children( jnode ) ) a000d5ac: e1530002 cmp r3, r2 <== NOT EXECUTED a000d5b0: 0affffe5 beq a000d54c <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); a000d5b4: e2534000 subs r4, r3, #0 <== NOT EXECUTED a000d5b8: 1affffe3 bne a000d54c <== NOT EXECUTED a000d5bc: ea000001 b a000d5c8 <== NOT EXECUTED return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { result = IMFS_unlink( NULL, &loc ); if (result != 0) return -1; a000d5c0: e3e00000 mvn r0, #0 <== NOT EXECUTED a000d5c4: ea000000 b a000d5cc <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); return 0; a000d5c8: e1a00004 mov r0, r4 <== NOT EXECUTED } a000d5cc: e28dd014 add sp, sp, #20 <== NOT EXECUTED a000d5d0: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED =============================================================================== a000d654 : const char *path, int pathlen, char *token, int *token_len ) { a000d654: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} a000d658: e1a05001 mov r5, r1 a000d65c: e1a04002 mov r4, r2 a000d660: e1a0a003 mov sl, r3 register char c; /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; a000d664: e5d07000 ldrb r7, [r0] a000d668: e1a08000 mov r8, r0 int pathlen, char *token, int *token_len ) { register int i = 0; a000d66c: e3a06000 mov r6, #0 /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) { a000d670: ea000004 b a000d688 token[i] = c; if ( i == IMFS_NAME_MAX ) a000d674: e3560020 cmp r6, #32 * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) { token[i] = c; a000d678: e7c47006 strb r7, [r4, r6] if ( i == IMFS_NAME_MAX ) a000d67c: 0a000025 beq a000d718 return IMFS_INVALID_TOKEN; if ( !IMFS_is_valid_name_char(c) ) type = IMFS_INVALID_TOKEN; c = path [++i]; a000d680: e5f87001 ldrb r7, [r8, #1]! a000d684: e2866001 add r6, r6, #1 /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) { a000d688: e1a00007 mov r0, r7 a000d68c: ebffe650 bl a0006fd4 a000d690: e3500000 cmp r0, #0 a000d694: 1a000001 bne a000d6a0 a000d698: e1560005 cmp r6, r5 a000d69c: bafffff4 blt a000d674 /* * Copy a seperator into token. */ if ( i == 0 ) { a000d6a0: e3560000 cmp r6, #0 a000d6a4: 1a000005 bne a000d6c0 token[i] = c; if ( (token[i] != '\0') && pathlen ) { a000d6a8: e3570000 cmp r7, #0 a000d6ac: 13550000 cmpne r5, #0 i++; type = IMFS_CURRENT_DIR; a000d6b0: 13a06001 movne r6, #1 /* * Copy a seperator into token. */ if ( i == 0 ) { token[i] = c; a000d6b4: e5c47000 strb r7, [r4] if ( (token[i] != '\0') && pathlen ) { i++; a000d6b8: e1a00006 mov r0, r6 a000d6bc: ea000005 b a000d6d8 type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { a000d6c0: e0843006 add r3, r4, r6 a000d6c4: e5533001 ldrb r3, [r3, #-1] char *token, int *token_len ) { register int i = 0; IMFS_token_types type = IMFS_NAME; a000d6c8: e3a00003 mov r0, #3 i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { a000d6cc: e3530000 cmp r3, #0 token[i] = '\0'; a000d6d0: 13a03000 movne r3, #0 a000d6d4: 17c43006 strbne r3, [r4, r6] /* * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { a000d6d8: e3500003 cmp r0, #3 /* * Set token_len to the number of characters copied. */ *token_len = i; a000d6dc: e58a6000 str r6, [sl] /* * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { a000d6e0: 1a00000e bne a000d720 if ( strcmp( token, "..") == 0 ) a000d6e4: e1a00004 mov r0, r4 a000d6e8: e59f1034 ldr r1, [pc, #52] ; a000d724 a000d6ec: eb000dc5 bl a0010e08 a000d6f0: e3500000 cmp r0, #0 type = IMFS_UP_DIR; a000d6f4: 03a00002 moveq r0, #2 * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) a000d6f8: 0a000008 beq a000d720 type = IMFS_UP_DIR; else if ( strcmp( token, "." ) == 0 ) a000d6fc: e1a00004 mov r0, r4 a000d700: e59f1020 ldr r1, [pc, #32] ; a000d728 a000d704: eb000dbf bl a0010e08 type = IMFS_CURRENT_DIR; a000d708: e3500000 cmp r0, #0 a000d70c: 13a00003 movne r0, #3 a000d710: 03a00001 moveq r0, #1 a000d714: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) { token[i] = c; if ( i == IMFS_NAME_MAX ) return IMFS_INVALID_TOKEN; a000d718: e3a00004 mov r0, #4 <== NOT EXECUTED a000d71c: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED else if ( strcmp( token, "." ) == 0 ) type = IMFS_CURRENT_DIR; } return type; } a000d720: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} =============================================================================== a00058f8 : const rtems_filesystem_operations_table *op_table, const rtems_filesystem_file_handlers_r *memfile_handlers, const rtems_filesystem_file_handlers_r *directory_handlers, const rtems_filesystem_file_handlers_r *fifo_handlers ) { a00058f8: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} a00058fc: e1a07003 mov r7, r3 IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, a0005900: e59f30d0 ldr r3, [pc, #208] ; a00059d8 const rtems_filesystem_operations_table *op_table, const rtems_filesystem_file_handlers_r *memfile_handlers, const rtems_filesystem_file_handlers_r *directory_handlers, const rtems_filesystem_file_handlers_r *fifo_handlers ) { a0005904: e1a0a001 mov sl, r1 a0005908: e1a08002 mov r8, r2 IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, a000590c: e5933000 ldr r3, [r3] const rtems_filesystem_operations_table *op_table, const rtems_filesystem_file_handlers_r *memfile_handlers, const rtems_filesystem_file_handlers_r *directory_handlers, const rtems_filesystem_file_handlers_r *fifo_handlers ) { a0005910: e1a04000 mov r4, r0 IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, a0005914: e3a01006 mov r1, #6 int bit_mask; /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) { a0005918: e3a02010 mov r2, #16 if (bit_mask == requested_bytes_per_block) { a000591c: e1520003 cmp r2, r3 a0005920: 0a000004 beq a0005938 is_valid = true; break; } if(bit_mask > requested_bytes_per_block) a0005924: ca000002 bgt a0005934 int bit_mask; /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) { a0005928: e2511001 subs r1, r1, #1 a000592c: e1a02082 lsl r2, r2, #1 a0005930: 1afffff9 bne a000591c if(bit_mask > requested_bytes_per_block) break; } *dest_bytes_per_block = ((is_valid) ? requested_bytes_per_block : default_bytes_per_block); a0005934: e3a03080 mov r3, #128 ; 0x80 break; } if(bit_mask > requested_bytes_per_block) break; } *dest_bytes_per_block = ((is_valid) a0005938: e59f609c ldr r6, [pc, #156] ; a00059dc a000593c: e5863000 str r3, [r6] /* * Create the root node * * NOTE: UNIX root is 755 and owned by root/root (0/0). */ temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node(); a0005940: eb001d30 bl a000ce08 temp_mt_entry->mt_fs_root.handlers = directory_handlers; temp_mt_entry->mt_fs_root.ops = op_table; temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS; a0005944: e59fe094 ldr lr, [pc, #148] ; a00059e0 a0005948: e284c038 add ip, r4, #56 ; 0x38 /* * Create the root node * * NOTE: UNIX root is 755 and owned by root/root (0/0). */ temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node(); a000594c: e584001c str r0, [r4, #28] a0005950: e1a05000 mov r5, r0 temp_mt_entry->mt_fs_root.handlers = directory_handlers; temp_mt_entry->mt_fs_root.ops = op_table; temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS; a0005954: e8be000f ldm lr!, {r0, r1, r2, r3} a0005958: e8ac000f stmia ip!, {r0, r1, r2, r3} a000595c: e8be000f ldm lr!, {r0, r1, r2, r3} a0005960: e8ac000f stmia ip!, {r0, r1, r2, r3} a0005964: e89e000f ldm lr, {r0, r1, r2, r3} * Create the root node * * NOTE: UNIX root is 755 and owned by root/root (0/0). */ temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node(); temp_mt_entry->mt_fs_root.handlers = directory_handlers; a0005968: e5847024 str r7, [r4, #36] ; 0x24 temp_mt_entry->mt_fs_root.ops = op_table; temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS; a000596c: e88c000f stm ip, {r0, r1, r2, r3} * * NOTE: UNIX root is 755 and owned by root/root (0/0). */ temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node(); temp_mt_entry->mt_fs_root.handlers = directory_handlers; temp_mt_entry->mt_fs_root.ops = op_table; a0005970: e584a028 str sl, [r4, #40] ; 0x28 temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS; /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); a0005974: e3a00001 mov r0, #1 a0005978: e3a01014 mov r1, #20 a000597c: eb000196 bl a0005fdc if ( !fs_info ) { a0005980: e3500000 cmp r0, #0 a0005984: 1a000006 bne a00059a4 free(temp_mt_entry->mt_fs_root.node_access); a0005988: e1a00005 mov r0, r5 <== NOT EXECUTED a000598c: eb0001f7 bl a0006170 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); a0005990: eb002a0e bl a00101d0 <__errno> <== NOT EXECUTED a0005994: e3a0300c mov r3, #12 <== NOT EXECUTED a0005998: e5803000 str r3, [r0] <== NOT EXECUTED a000599c: e3e00000 mvn r0, #0 <== NOT EXECUTED a00059a0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; a00059a4: e5963004 ldr r3, [r6, #4] fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; fs_info->fifo_handlers = fifo_handlers; a00059a8: e59d201c ldr r2, [sp, #28] fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); if ( !fs_info ) { free(temp_mt_entry->mt_fs_root.node_access); rtems_set_errno_and_return_minus_one(ENOMEM); } temp_mt_entry->fs_info = fs_info; a00059ac: e5840034 str r0, [r4, #52] ; 0x34 /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; a00059b0: e5803000 str r3, [r0] a00059b4: e2833001 add r3, r3, #1 a00059b8: e5863004 str r3, [r6, #4] fs_info->ino_count = 1; a00059bc: e3a03001 mov r3, #1 a00059c0: e9800108 stmib r0, {r3, r8} fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; a00059c4: e580700c str r7, [r0, #12] fs_info->fifo_handlers = fifo_handlers; a00059c8: e5802010 str r2, [r0, #16] jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; a00059cc: e5853038 str r3, [r5, #56] ; 0x38 return 0; a00059d0: e3a00000 mov r0, #0 } a00059d4: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} =============================================================================== a00059e4 : int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { a00059e4: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED int i; /* * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; a00059e8: e5903000 ldr r3, [r0] <== NOT EXECUTED int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { a00059ec: e24dd048 sub sp, sp, #72 ; 0x48 <== NOT EXECUTED a00059f0: e1a05001 mov r5, r1 <== NOT EXECUTED int i; /* * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; a00059f4: e58d3028 str r3, [sp, #40] ; 0x28 <== NOT EXECUTED if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) a00059f8: e1d333b4 ldrh r3, [r3, #52] ; 0x34 <== NOT EXECUTED int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { a00059fc: e1a06002 mov r6, r2 <== NOT EXECUTED /* * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) a0005a00: e3530007 cmp r3, #7 <== NOT EXECUTED a0005a04: 9a000002 bls a0005a14 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EMLINK ); a0005a08: eb0029f0 bl a00101d0 <__errno> <== NOT EXECUTED a0005a0c: e3a0301f mov r3, #31 <== NOT EXECUTED a0005a10: ea000012 b a0005a60 <== NOT EXECUTED /* * Remove any separators at the end of the string. */ IMFS_get_token( token, strlen( token ), new_name, &i ); a0005a14: e1a00002 mov r0, r2 <== NOT EXECUTED a0005a18: eb002dd6 bl a0011178 <== NOT EXECUTED a0005a1c: e28d4004 add r4, sp, #4 <== NOT EXECUTED a0005a20: e1a01000 mov r1, r0 <== NOT EXECUTED a0005a24: e1a02004 mov r2, r4 <== NOT EXECUTED a0005a28: e28d3044 add r3, sp, #68 ; 0x44 <== NOT EXECUTED a0005a2c: e1a00006 mov r0, r6 <== NOT EXECUTED a0005a30: eb001f07 bl a000d654 <== NOT EXECUTED new_node = IMFS_create_node( parent_loc, IMFS_HARD_LINK, new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info a0005a34: e28d3028 add r3, sp, #40 ; 0x28 <== NOT EXECUTED * was ONLY passed a NULL when we created the root node. We * added a new IMFS_create_root_node() so this path no longer * existed. The result was simpler code which should not have * this path. */ new_node = IMFS_create_node( a0005a38: e58d3000 str r3, [sp] <== NOT EXECUTED a0005a3c: e1a00005 mov r0, r5 <== NOT EXECUTED a0005a40: e3a01003 mov r1, #3 <== NOT EXECUTED a0005a44: e1a02004 mov r2, r4 <== NOT EXECUTED a0005a48: e59f3050 ldr r3, [pc, #80] ; a0005aa0 <== NOT EXECUTED a0005a4c: eb001c9d bl a000ccc8 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) a0005a50: e3500000 cmp r0, #0 <== NOT EXECUTED a0005a54: 1a000004 bne a0005a6c <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); a0005a58: eb0029dc bl a00101d0 <__errno> <== NOT EXECUTED a0005a5c: e3a0300c mov r3, #12 <== NOT EXECUTED a0005a60: e5803000 str r3, [r0] <== NOT EXECUTED a0005a64: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005a68: ea00000a b a0005a98 <== NOT EXECUTED /* * Increment the link count of the node being pointed to. */ info.hard_link.link_node->st_nlink++; a0005a6c: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); a0005a70: e28d003c add r0, sp, #60 ; 0x3c <== NOT EXECUTED a0005a74: e3a01000 mov r1, #0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); /* * Increment the link count of the node being pointed to. */ info.hard_link.link_node->st_nlink++; a0005a78: e1d323b4 ldrh r2, [r3, #52] ; 0x34 <== NOT EXECUTED a0005a7c: e2822001 add r2, r2, #1 <== NOT EXECUTED a0005a80: e1c323b4 strh r2, [r3, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); a0005a84: eb0001ee bl a0006244 <== NOT EXECUTED a0005a88: e59d203c ldr r2, [sp, #60] ; 0x3c <== NOT EXECUTED a0005a8c: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED return 0; a0005a90: e3a00000 mov r0, #0 <== NOT EXECUTED /* * Increment the link count of the node being pointed to. */ info.hard_link.link_node->st_nlink++; IMFS_update_ctime( info.hard_link.link_node ); a0005a94: e5832048 str r2, [r3, #72] ; 0x48 <== NOT EXECUTED return 0; } a0005a98: e28dd048 add sp, sp, #72 ; 0x48 <== NOT EXECUTED a0005a9c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED =============================================================================== a000f138 : */ MEMFILE_STATIC int IMFS_memfile_addblock( IMFS_jnode_t *the_jnode, unsigned int block ) { a000f138: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Obtain the pointer for the specified block number */ block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); a000f13c: e3a02001 mov r2, #1 <== NOT EXECUTED a000f140: ebffff00 bl a000ed48 <== NOT EXECUTED if ( *block_entry_ptr ) a000f144: e5904000 ldr r4, [r0] <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Obtain the pointer for the specified block number */ block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); a000f148: e1a05000 mov r5, r0 <== NOT EXECUTED if ( *block_entry_ptr ) a000f14c: e3540000 cmp r4, #0 <== NOT EXECUTED a000f150: 1a000005 bne a000f16c <== NOT EXECUTED return 0; /* * There is no memory for this block number so allocate it. */ memory = memfile_alloc_block(); a000f154: ebfffeee bl a000ed14 <== NOT EXECUTED if ( !memory ) a000f158: e3500000 cmp r0, #0 <== NOT EXECUTED a000f15c: 0a000004 beq a000f174 <== NOT EXECUTED return 1; *block_entry_ptr = memory; a000f160: e5850000 str r0, [r5] <== NOT EXECUTED return 0; a000f164: e1a00004 mov r0, r4 <== NOT EXECUTED a000f168: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED /* * Obtain the pointer for the specified block number */ block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); if ( *block_entry_ptr ) return 0; a000f16c: e3a00000 mov r0, #0 <== NOT EXECUTED a000f170: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED /* * There is no memory for this block number so allocate it. */ memory = memfile_alloc_block(); if ( !memory ) return 1; a000f174: e3a00001 mov r0, #1 <== NOT EXECUTED *block_entry_ptr = memory; return 0; } a000f178: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a000f32c : IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a000f32c: e59f3110 ldr r3, [pc, #272] ; a000f444 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a000f330: e92d4df1 push {r0, r4, r5, r6, r7, r8, sl, fp, lr} <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a000f334: e593b000 ldr fp, [r3] <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a000f338: e1a05002 mov r5, r2 <== NOT EXECUTED a000f33c: e1a04000 mov r4, r0 <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a000f340: e1a0312b lsr r3, fp, #2 <== NOT EXECUTED a000f344: e2832001 add r2, r3, #1 <== NOT EXECUTED a000f348: e0020293 mul r2, r3, r2 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a000f34c: e1a06001 mov r6, r1 <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a000f350: e2822001 add r2, r2, #1 <== NOT EXECUTED a000f354: e0030392 mul r3, r2, r3 <== NOT EXECUTED a000f358: e3a02000 mov r2, #0 <== NOT EXECUTED a000f35c: e2433001 sub r3, r3, #1 <== NOT EXECUTED a000f360: e1520005 cmp r2, r5 <== NOT EXECUTED a000f364: e003039b mul r3, fp, r3 <== NOT EXECUTED a000f368: ca000005 bgt a000f384 <== NOT EXECUTED a000f36c: 1a000001 bne a000f378 <== NOT EXECUTED a000f370: e1530001 cmp r3, r1 <== NOT EXECUTED a000f374: 8a000002 bhi a000f384 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); a000f378: eb000394 bl a00101d0 <__errno> <== NOT EXECUTED a000f37c: e3a03016 mov r3, #22 <== NOT EXECUTED a000f380: ea000025 b a000f41c <== NOT EXECUTED /* * Verify new file size is actually larger than current size */ if ( new_length <= the_jnode->info.file.size ) a000f384: e5948054 ldr r8, [r4, #84] ; 0x54 <== NOT EXECUTED a000f388: e5947050 ldr r7, [r4, #80] ; 0x50 <== NOT EXECUTED a000f38c: e1550008 cmp r5, r8 <== NOT EXECUTED a000f390: ca000002 bgt a000f3a0 <== NOT EXECUTED a000f394: 1a000028 bne a000f43c <== NOT EXECUTED a000f398: e1560007 cmp r6, r7 <== NOT EXECUTED a000f39c: 9a000026 bls a000f43c <== NOT EXECUTED return 0; /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f3a0: e1a0cfcb asr ip, fp, #31 <== NOT EXECUTED a000f3a4: e1a0300c mov r3, ip <== NOT EXECUTED a000f3a8: e1a0200b mov r2, fp <== NOT EXECUTED a000f3ac: e1a00006 mov r0, r6 <== NOT EXECUTED a000f3b0: e1a01005 mov r1, r5 <== NOT EXECUTED a000f3b4: e58dc000 str ip, [sp] <== NOT EXECUTED a000f3b8: eb001213 bl a0013c0c <__divdi3> <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f3bc: e59dc000 ldr ip, [sp] <== NOT EXECUTED a000f3c0: e1a01008 mov r1, r8 <== NOT EXECUTED return 0; /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f3c4: e1a0a000 mov sl, r0 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f3c8: e1a0200b mov r2, fp <== NOT EXECUTED a000f3cc: e1a00007 mov r0, r7 <== NOT EXECUTED a000f3d0: e1a0300c mov r3, ip <== NOT EXECUTED a000f3d4: eb00120c bl a0013c0c <__divdi3> <== NOT EXECUTED a000f3d8: e1a08000 mov r8, r0 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { a000f3dc: e1a07000 mov r7, r0 <== NOT EXECUTED a000f3e0: ea000011 b a000f42c <== NOT EXECUTED if ( IMFS_memfile_addblock( the_jnode, block ) ) { a000f3e4: e1a00004 mov r0, r4 <== NOT EXECUTED a000f3e8: e1a01007 mov r1, r7 <== NOT EXECUTED a000f3ec: ebffff51 bl a000f138 <== NOT EXECUTED a000f3f0: e3500000 cmp r0, #0 <== NOT EXECUTED a000f3f4: 0a00000b beq a000f428 <== NOT EXECUTED a000f3f8: ea000003 b a000f40c <== NOT EXECUTED for ( ; block>=old_blocks ; block-- ) { IMFS_memfile_remove_block( the_jnode, block ); a000f3fc: e1a01007 mov r1, r7 <== NOT EXECUTED a000f400: e1a00004 mov r0, r4 <== NOT EXECUTED a000f404: ebffffbe bl a000f304 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { if ( IMFS_memfile_addblock( the_jnode, block ) ) { for ( ; block>=old_blocks ; block-- ) { a000f408: e2477001 sub r7, r7, #1 <== NOT EXECUTED a000f40c: e1570008 cmp r7, r8 <== NOT EXECUTED a000f410: 2afffff9 bcs a000f3fc <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); } rtems_set_errno_and_return_minus_one( ENOSPC ); a000f414: eb00036d bl a00101d0 <__errno> <== NOT EXECUTED a000f418: e3a0301c mov r3, #28 <== NOT EXECUTED a000f41c: e5803000 str r3, [r0] <== NOT EXECUTED a000f420: e3e00000 mvn r0, #0 <== NOT EXECUTED a000f424: ea000005 b a000f440 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { a000f428: e2877001 add r7, r7, #1 <== NOT EXECUTED a000f42c: e157000a cmp r7, sl <== NOT EXECUTED a000f430: 9affffeb bls a000f3e4 <== NOT EXECUTED } /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; a000f434: e5846050 str r6, [r4, #80] ; 0x50 <== NOT EXECUTED a000f438: e5845054 str r5, [r4, #84] ; 0x54 <== NOT EXECUTED /* * Verify new file size is actually larger than current size */ if ( new_length <= the_jnode->info.file.size ) return 0; a000f43c: e3a00000 mov r0, #0 <== NOT EXECUTED /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; return 0; } a000f440: e8bd8df8 pop {r3, r4, r5, r6, r7, r8, sl, fp, pc} <== NOT EXECUTED =============================================================================== a000ed48 : my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000ed48: e59f31e4 ldr r3, [pc, #484] ; a000ef34 <== NOT EXECUTED #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { a000ed4c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000ed50: e5935000 ldr r5, [r3] <== NOT EXECUTED #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { a000ed54: e1a04000 mov r4, r0 <== NOT EXECUTED a000ed58: e1a06001 mov r6, r1 <== NOT EXECUTED my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000ed5c: e1a05125 lsr r5, r5, #2 <== NOT EXECUTED a000ed60: e2453001 sub r3, r5, #1 <== NOT EXECUTED a000ed64: e1510003 cmp r1, r3 <== NOT EXECUTED #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { a000ed68: e1a08002 mov r8, r2 <== NOT EXECUTED my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000ed6c: 8a00000e bhi a000edac <== NOT EXECUTED p = info->indirect; if ( malloc_it ) { a000ed70: e3520000 cmp r2, #0 <== NOT EXECUTED /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { p = info->indirect; a000ed74: e5900058 ldr r0, [r0, #88] ; 0x58 <== NOT EXECUTED if ( malloc_it ) { a000ed78: 0a000007 beq a000ed9c <== NOT EXECUTED if ( !p ) { a000ed7c: e3500000 cmp r0, #0 <== NOT EXECUTED a000ed80: 1a000003 bne a000ed94 <== NOT EXECUTED p = memfile_alloc_block(); a000ed84: ebffffe2 bl a000ed14 <== NOT EXECUTED if ( !p ) a000ed88: e3500000 cmp r0, #0 <== NOT EXECUTED a000ed8c: 0a000067 beq a000ef30 <== NOT EXECUTED return 0; info->indirect = p; a000ed90: e5840058 str r0, [r4, #88] ; 0x58 <== NOT EXECUTED } return &info->indirect[ my_block ]; a000ed94: e5940058 ldr r0, [r4, #88] ; 0x58 <== NOT EXECUTED a000ed98: ea000001 b a000eda4 <== NOT EXECUTED } if ( !p ) a000ed9c: e3500000 cmp r0, #0 <== NOT EXECUTED a000eda0: 0a000062 beq a000ef30 <== NOT EXECUTED return 0; return &info->indirect[ my_block ]; a000eda4: e0800106 add r0, r0, r6, lsl #2 <== NOT EXECUTED a000eda8: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED /* * Is the block number in the doubly indirect portion? */ if ( my_block <= LAST_DOUBLY_INDIRECT ) { a000edac: e2853001 add r3, r5, #1 <== NOT EXECUTED a000edb0: e0030395 mul r3, r5, r3 <== NOT EXECUTED a000edb4: e2432001 sub r2, r3, #1 <== NOT EXECUTED a000edb8: e1510002 cmp r1, r2 <== NOT EXECUTED a000edbc: 8a000021 bhi a000ee48 <== NOT EXECUTED my_block -= FIRST_DOUBLY_INDIRECT; a000edc0: e0656001 rsb r6, r5, r1 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000edc4: e1a00006 mov r0, r6 <== NOT EXECUTED a000edc8: e1a01005 mov r1, r5 <== NOT EXECUTED a000edcc: eb00135a bl a0013b3c <__umodsi3> <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000edd0: e1a01005 mov r1, r5 <== NOT EXECUTED */ if ( my_block <= LAST_DOUBLY_INDIRECT ) { my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000edd4: e1a07000 mov r7, r0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000edd8: e1a00006 mov r0, r6 <== NOT EXECUTED a000eddc: eb0012be bl a00138dc <__aeabi_uidiv> <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { a000ede0: e3580000 cmp r8, #0 <== NOT EXECUTED if ( my_block <= LAST_DOUBLY_INDIRECT ) { my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000ede4: e1a05000 mov r5, r0 <== NOT EXECUTED p = info->doubly_indirect; a000ede8: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED if ( malloc_it ) { a000edec: 0a00000e beq a000ee2c <== NOT EXECUTED if ( !p ) { a000edf0: e3500000 cmp r0, #0 <== NOT EXECUTED a000edf4: 1a000003 bne a000ee08 <== NOT EXECUTED p = memfile_alloc_block(); a000edf8: ebffffc5 bl a000ed14 <== NOT EXECUTED if ( !p ) a000edfc: e3500000 cmp r0, #0 <== NOT EXECUTED a000ee00: 0a00004a beq a000ef30 <== NOT EXECUTED return 0; info->doubly_indirect = p; a000ee04: e584005c str r0, [r4, #92] ; 0x5c <== NOT EXECUTED } p1 = (block_p *)p[ doubly ]; a000ee08: e0804105 add r4, r0, r5, lsl #2 <== NOT EXECUTED a000ee0c: e7900105 ldr r0, [r0, r5, lsl #2] <== NOT EXECUTED if ( !p1 ) { a000ee10: e3500000 cmp r0, #0 <== NOT EXECUTED a000ee14: 1a000009 bne a000ee40 <== NOT EXECUTED p1 = memfile_alloc_block(); a000ee18: ebffffbd bl a000ed14 <== NOT EXECUTED if ( !p1 ) a000ee1c: e3500000 cmp r0, #0 <== NOT EXECUTED return 0; p[ doubly ] = (block_p) p1; a000ee20: 15840000 strne r0, [r4] <== NOT EXECUTED } p1 = (block_p *)p[ doubly ]; if ( !p1 ) { p1 = memfile_alloc_block(); if ( !p1 ) a000ee24: 1a000005 bne a000ee40 <== NOT EXECUTED a000ee28: ea000040 b a000ef30 <== NOT EXECUTED } return (block_p *)&p1[ singly ]; } if ( !p ) a000ee2c: e3500000 cmp r0, #0 <== NOT EXECUTED a000ee30: 0a00003e beq a000ef30 <== NOT EXECUTED return 0; p = (block_p *)p[ doubly ]; a000ee34: e7900105 ldr r0, [r0, r5, lsl #2] <== NOT EXECUTED if ( !p ) a000ee38: e3500000 cmp r0, #0 <== NOT EXECUTED a000ee3c: 0a00003b beq a000ef30 <== NOT EXECUTED return 0; return (block_p *)&p[ singly ]; a000ee40: e0800107 add r0, r0, r7, lsl #2 <== NOT EXECUTED a000ee44: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED } /* * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { a000ee48: e2832001 add r2, r3, #1 <== NOT EXECUTED a000ee4c: e0020295 mul r2, r5, r2 <== NOT EXECUTED a000ee50: e2422001 sub r2, r2, #1 <== NOT EXECUTED a000ee54: e1510002 cmp r1, r2 <== NOT EXECUTED a000ee58: 8a000033 bhi a000ef2c <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; a000ee5c: e0636001 rsb r6, r3, r1 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000ee60: e1a00006 mov r0, r6 <== NOT EXECUTED a000ee64: e1a01005 mov r1, r5 <== NOT EXECUTED a000ee68: eb001333 bl a0013b3c <__umodsi3> <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000ee6c: e1a01005 mov r1, r5 <== NOT EXECUTED * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000ee70: e1a0a000 mov sl, r0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000ee74: e1a00006 mov r0, r6 <== NOT EXECUTED a000ee78: eb001297 bl a00138dc <__aeabi_uidiv> <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; a000ee7c: e1a01005 mov r1, r5 <== NOT EXECUTED */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000ee80: e1a06000 mov r6, r0 <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; a000ee84: eb001294 bl a00138dc <__aeabi_uidiv> <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; a000ee88: e1a01005 mov r1, r5 <== NOT EXECUTED if ( my_block <= LAST_TRIPLY_INDIRECT ) { my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; a000ee8c: e1a07000 mov r7, r0 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; a000ee90: e1a00006 mov r0, r6 <== NOT EXECUTED a000ee94: eb001328 bl a0013b3c <__umodsi3> <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { a000ee98: e3580000 cmp r8, #0 <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; doubly %= IMFS_MEMFILE_BLOCK_SLOTS; a000ee9c: e1a05000 mov r5, r0 <== NOT EXECUTED p = info->triply_indirect; a000eea0: e5940060 ldr r0, [r4, #96] ; 0x60 <== NOT EXECUTED if ( malloc_it ) { a000eea4: 0a000016 beq a000ef04 <== NOT EXECUTED if ( !p ) { a000eea8: e3500000 cmp r0, #0 <== NOT EXECUTED a000eeac: 1a000003 bne a000eec0 <== NOT EXECUTED p = memfile_alloc_block(); a000eeb0: ebffff97 bl a000ed14 <== NOT EXECUTED if ( !p ) a000eeb4: e3500000 cmp r0, #0 <== NOT EXECUTED a000eeb8: 0a00001c beq a000ef30 <== NOT EXECUTED return 0; info->triply_indirect = p; a000eebc: e5840060 str r0, [r4, #96] ; 0x60 <== NOT EXECUTED } p1 = (block_p *) p[ triply ]; a000eec0: e0804107 add r4, r0, r7, lsl #2 <== NOT EXECUTED a000eec4: e7900107 ldr r0, [r0, r7, lsl #2] <== NOT EXECUTED if ( !p1 ) { a000eec8: e3500000 cmp r0, #0 <== NOT EXECUTED a000eecc: 1a000003 bne a000eee0 <== NOT EXECUTED p1 = memfile_alloc_block(); a000eed0: ebffff8f bl a000ed14 <== NOT EXECUTED if ( !p1 ) a000eed4: e3500000 cmp r0, #0 <== NOT EXECUTED a000eed8: 0a000014 beq a000ef30 <== NOT EXECUTED return 0; p[ triply ] = (block_p) p1; a000eedc: e5840000 str r0, [r4] <== NOT EXECUTED } p2 = (block_p *)p1[ doubly ]; a000eee0: e0804105 add r4, r0, r5, lsl #2 <== NOT EXECUTED a000eee4: e7900105 ldr r0, [r0, r5, lsl #2] <== NOT EXECUTED if ( !p2 ) { a000eee8: e3500000 cmp r0, #0 <== NOT EXECUTED a000eeec: 1a00000c bne a000ef24 <== NOT EXECUTED p2 = memfile_alloc_block(); a000eef0: ebffff87 bl a000ed14 <== NOT EXECUTED if ( !p2 ) a000eef4: e3500000 cmp r0, #0 <== NOT EXECUTED return 0; p1[ doubly ] = (block_p) p2; a000eef8: 15840000 strne r0, [r4] <== NOT EXECUTED } p2 = (block_p *)p1[ doubly ]; if ( !p2 ) { p2 = memfile_alloc_block(); if ( !p2 ) a000eefc: 1a000008 bne a000ef24 <== NOT EXECUTED a000ef00: ea00000a b a000ef30 <== NOT EXECUTED p1[ doubly ] = (block_p) p2; } return (block_p *)&p2[ singly ]; } if ( !p ) a000ef04: e3500000 cmp r0, #0 <== NOT EXECUTED a000ef08: 0a000008 beq a000ef30 <== NOT EXECUTED return 0; p1 = (block_p *) p[ triply ]; a000ef0c: e7900107 ldr r0, [r0, r7, lsl #2] <== NOT EXECUTED if ( !p1 ) a000ef10: e3500000 cmp r0, #0 <== NOT EXECUTED a000ef14: 0a000005 beq a000ef30 <== NOT EXECUTED return 0; p2 = (block_p *)p1[ doubly ]; a000ef18: e7900105 ldr r0, [r0, r5, lsl #2] <== NOT EXECUTED if ( !p2 ) a000ef1c: e3500000 cmp r0, #0 <== NOT EXECUTED a000ef20: 0a000002 beq a000ef30 <== NOT EXECUTED return 0; return (block_p *)&p2[ singly ]; a000ef24: e080010a add r0, r0, sl, lsl #2 <== NOT EXECUTED a000ef28: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED } /* * This means the requested block number is out of range. */ return 0; a000ef2c: e3a00000 mov r0, #0 <== NOT EXECUTED } a000ef30: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED =============================================================================== a00086c8 : * using the IMFS memory file type. * */ int IMFS_memfile_maximum_size( void ) { return IMFS_MEMFILE_MAXIMUM_SIZE; a00086c8: e59f3020 ldr r3, [pc, #32] ; a00086f0 <== NOT EXECUTED a00086cc: e5932000 ldr r2, [r3] <== NOT EXECUTED a00086d0: e1a03122 lsr r3, r2, #2 <== NOT EXECUTED a00086d4: e2830001 add r0, r3, #1 <== NOT EXECUTED a00086d8: e0000093 mul r0, r3, r0 <== NOT EXECUTED a00086dc: e2800001 add r0, r0, #1 <== NOT EXECUTED a00086e0: e0030390 mul r3, r0, r3 <== NOT EXECUTED a00086e4: e2430001 sub r0, r3, #1 <== NOT EXECUTED } a00086e8: e0000092 mul r0, r2, r0 <== NOT EXECUTED a00086ec: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a000ef38 : IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { a000ef38: e92d4fff push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}<== NOT EXECUTED a000ef3c: e1a07003 mov r7, r3 <== NOT EXECUTED * Linear files (as created from a tar file are easier to handle * than block files). */ my_length = length; if (the_jnode->type == IMFS_LINEAR_FILE) { a000ef40: e590304c ldr r3, [r0, #76] ; 0x4c <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { a000ef44: e1a04000 mov r4, r0 <== NOT EXECUTED a000ef48: e1a08001 mov r8, r1 <== NOT EXECUTED * Linear files (as created from a tar file are easier to handle * than block files). */ my_length = length; if (the_jnode->type == IMFS_LINEAR_FILE) { a000ef4c: e3530006 cmp r3, #6 <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { a000ef50: e1a09002 mov r9, r2 <== NOT EXECUTED a000ef54: e59d6034 ldr r6, [sp, #52] ; 0x34 <== NOT EXECUTED * Linear files (as created from a tar file are easier to handle * than block files). */ my_length = length; if (the_jnode->type == IMFS_LINEAR_FILE) { a000ef58: 1a000012 bne a000efa8 <== NOT EXECUTED unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) a000ef5c: e280b050 add fp, r0, #80 ; 0x50 <== NOT EXECUTED a000ef60: e89b0c00 ldm fp, {sl, fp} <== NOT EXECUTED a000ef64: e1a0200a mov r2, sl <== NOT EXECUTED a000ef68: e1a0300b mov r3, fp <== NOT EXECUTED my_length = length; if (the_jnode->type == IMFS_LINEAR_FILE) { unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; a000ef6c: e5901058 ldr r1, [r0, #88] ; 0x58 <== NOT EXECUTED if (my_length > (the_jnode->info.linearfile.size - start)) a000ef70: e0522008 subs r2, r2, r8 <== NOT EXECUTED a000ef74: e0c33009 sbc r3, r3, r9 <== NOT EXECUTED a000ef78: e3a00000 mov r0, #0 <== NOT EXECUTED a000ef7c: e1500003 cmp r0, r3 <== NOT EXECUTED a000ef80: ca000002 bgt a000ef90 <== NOT EXECUTED a000ef84: 1a000002 bne a000ef94 <== NOT EXECUTED a000ef88: e1560002 cmp r6, r2 <== NOT EXECUTED a000ef8c: 9a000000 bls a000ef94 <== NOT EXECUTED my_length = the_jnode->info.linearfile.size - start; a000ef90: e068600a rsb r6, r8, sl <== NOT EXECUTED memcpy(dest, &file_ptr[start], my_length); a000ef94: e1a00007 mov r0, r7 <== NOT EXECUTED a000ef98: e0811008 add r1, r1, r8 <== NOT EXECUTED a000ef9c: e1a02006 mov r2, r6 <== NOT EXECUTED a000efa0: eb0006b8 bl a0010a88 <== NOT EXECUTED a000efa4: ea000050 b a000f0ec <== NOT EXECUTED /* * If the last byte we are supposed to read is past the end of this * in memory file, then shorten the length to read. */ last_byte = start + length; a000efa8: e1a03001 mov r3, r1 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) a000efac: e5901054 ldr r1, [r0, #84] ; 0x54 <== NOT EXECUTED a000efb0: e5905050 ldr r5, [r0, #80] ; 0x50 <== NOT EXECUTED a000efb4: e3a00000 mov r0, #0 <== NOT EXECUTED a000efb8: e1500001 cmp r0, r1 <== NOT EXECUTED /* * If the last byte we are supposed to read is past the end of this * in memory file, then shorten the length to read. */ last_byte = start + length; a000efbc: e0862008 add r2, r6, r8 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) a000efc0: ca000002 bgt a000efd0 <== NOT EXECUTED a000efc4: 1a000003 bne a000efd8 <== NOT EXECUTED a000efc8: e1520005 cmp r2, r5 <== NOT EXECUTED a000efcc: 9a000001 bls a000efd8 <== NOT EXECUTED my_length = the_jnode->info.file.size - start; a000efd0: e0635005 rsb r5, r3, r5 <== NOT EXECUTED a000efd4: ea000000 b a000efdc <== NOT EXECUTED /* * Linear files (as created from a tar file are easier to handle * than block files). */ my_length = length; a000efd8: e1a05006 mov r5, r6 <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a000efdc: e59f3128 ldr r3, [pc, #296] ; a000f10c <== NOT EXECUTED a000efe0: e1a00008 mov r0, r8 <== NOT EXECUTED a000efe4: e1a01009 mov r1, r9 <== NOT EXECUTED a000efe8: e593b000 ldr fp, [r3] <== NOT EXECUTED a000efec: e1a0200b mov r2, fp <== NOT EXECUTED a000eff0: e1a03fc2 asr r3, r2, #31 <== NOT EXECUTED a000eff4: e88d000c stm sp, {r2, r3} <== NOT EXECUTED a000eff8: eb001430 bl a00140c0 <__moddi3> <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000effc: e89d000c ldm sp, {r2, r3} <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a000f000: e1a06000 mov r6, r0 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f004: e1a01009 mov r1, r9 <== NOT EXECUTED a000f008: e1a00008 mov r0, r8 <== NOT EXECUTED a000f00c: eb0012fe bl a0013c0c <__divdi3> <== NOT EXECUTED if ( start_offset ) { a000f010: e3560000 cmp r6, #0 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f014: e1a08000 mov r8, r0 <== NOT EXECUTED if ( start_offset ) { a000f018: 0a000012 beq a000f068 <== NOT EXECUTED to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f01c: e1a00004 mov r0, r4 <== NOT EXECUTED a000f020: e1a01008 mov r1, r8 <== NOT EXECUTED a000f024: e3a02000 mov r2, #0 <== NOT EXECUTED a000f028: ebffff46 bl a000ed48 <== NOT EXECUTED if ( !block_ptr ) a000f02c: e3500000 cmp r0, #0 <== NOT EXECUTED return copied; a000f030: 01a06000 moveq r6, r0 <== NOT EXECUTED if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) a000f034: 0a000031 beq a000f100 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); a000f038: e5901000 ldr r1, [r0] <== NOT EXECUTED * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; a000f03c: e066a00b rsb sl, r6, fp <== NOT EXECUTED a000f040: e155000a cmp r5, sl <== NOT EXECUTED a000f044: 31a0a005 movcc sl, r5 <== NOT EXECUTED if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); a000f048: e1a00007 mov r0, r7 <== NOT EXECUTED a000f04c: e0811006 add r1, r1, r6 <== NOT EXECUTED a000f050: e1a0200a mov r2, sl <== NOT EXECUTED a000f054: eb00068b bl a0010a88 <== NOT EXECUTED dest += to_copy; a000f058: e087700a add r7, r7, sl <== NOT EXECUTED block++; a000f05c: e2888001 add r8, r8, #1 <== NOT EXECUTED my_length -= to_copy; a000f060: e06a5005 rsb r5, sl, r5 <== NOT EXECUTED copied += to_copy; a000f064: e1a0600a mov r6, sl <== NOT EXECUTED } /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; a000f068: e59f909c ldr r9, [pc, #156] ; a000f10c <== NOT EXECUTED a000f06c: e599a000 ldr sl, [r9] <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { a000f070: ea00000d b a000f0ac <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f074: e1a00004 mov r0, r4 <== NOT EXECUTED a000f078: e1a01008 mov r1, r8 <== NOT EXECUTED a000f07c: e3a02000 mov r2, #0 <== NOT EXECUTED a000f080: ebffff30 bl a000ed48 <== NOT EXECUTED if ( !block_ptr ) a000f084: e2503000 subs r3, r0, #0 <== NOT EXECUTED a000f088: 0a00001c beq a000f100 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); a000f08c: e1a00007 mov r0, r7 <== NOT EXECUTED a000f090: e5931000 ldr r1, [r3] <== NOT EXECUTED a000f094: e1a0200a mov r2, sl <== NOT EXECUTED a000f098: eb00067a bl a0010a88 <== NOT EXECUTED dest += to_copy; a000f09c: e087700a add r7, r7, sl <== NOT EXECUTED block++; a000f0a0: e2888001 add r8, r8, #1 <== NOT EXECUTED my_length -= to_copy; a000f0a4: e06a5005 rsb r5, sl, r5 <== NOT EXECUTED copied += to_copy; a000f0a8: e086600a add r6, r6, sl <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { a000f0ac: e5993000 ldr r3, [r9] <== NOT EXECUTED a000f0b0: e1550003 cmp r5, r3 <== NOT EXECUTED a000f0b4: 2affffee bcs a000f074 <== NOT EXECUTED /* * Phase 3: possibly the first part of one block */ IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { a000f0b8: e3550000 cmp r5, #0 <== NOT EXECUTED a000f0bc: 0a00000a beq a000f0ec <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f0c0: e1a00004 mov r0, r4 <== NOT EXECUTED a000f0c4: e1a01008 mov r1, r8 <== NOT EXECUTED a000f0c8: e3a02000 mov r2, #0 <== NOT EXECUTED a000f0cc: ebffff1d bl a000ed48 <== NOT EXECUTED if ( !block_ptr ) a000f0d0: e2503000 subs r3, r0, #0 <== NOT EXECUTED a000f0d4: 0a000009 beq a000f100 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); a000f0d8: e1a00007 mov r0, r7 <== NOT EXECUTED a000f0dc: e5931000 ldr r1, [r3] <== NOT EXECUTED a000f0e0: e1a02005 mov r2, r5 <== NOT EXECUTED a000f0e4: eb000667 bl a0010a88 <== NOT EXECUTED copied += my_length; a000f0e8: e0856006 add r6, r5, r6 <== NOT EXECUTED } IMFS_update_atime( the_jnode ); a000f0ec: e28d0008 add r0, sp, #8 <== NOT EXECUTED a000f0f0: e3a01000 mov r1, #0 <== NOT EXECUTED a000f0f4: ebffdc52 bl a0006244 <== NOT EXECUTED a000f0f8: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED a000f0fc: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED return copied; } a000f100: e1a00006 mov r0, r6 <== NOT EXECUTED a000f104: e28dd010 add sp, sp, #16 <== NOT EXECUTED a000f108: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED =============================================================================== a000f1ec : * is better to stick to simple, easy to understand algorithms. */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { a000f1ec: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED /* * Eventually this could be set smarter at each call to * memfile_free_blocks_in_table to greatly speed this up. */ to_free = IMFS_MEMFILE_BLOCK_SLOTS; a000f1f0: e59f3108 ldr r3, [pc, #264] ; a000f300 <== NOT EXECUTED * is better to stick to simple, easy to understand algorithms. */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { a000f1f4: e1a04000 mov r4, r0 <== NOT EXECUTED /* * Eventually this could be set smarter at each call to * memfile_free_blocks_in_table to greatly speed this up. */ to_free = IMFS_MEMFILE_BLOCK_SLOTS; a000f1f8: e5935000 ldr r5, [r3] <== NOT EXECUTED * + doubly indirect * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { a000f1fc: e5903058 ldr r3, [r0, #88] ; 0x58 <== NOT EXECUTED /* * Eventually this could be set smarter at each call to * memfile_free_blocks_in_table to greatly speed this up. */ to_free = IMFS_MEMFILE_BLOCK_SLOTS; a000f200: e1a05125 lsr r5, r5, #2 <== NOT EXECUTED * + doubly indirect * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { a000f204: e3530000 cmp r3, #0 <== NOT EXECUTED a000f208: 0a000002 beq a000f218 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); a000f20c: e2800058 add r0, r0, #88 ; 0x58 <== NOT EXECUTED a000f210: e1a01005 mov r1, r5 <== NOT EXECUTED a000f214: ebffffe0 bl a000f19c <== NOT EXECUTED } if ( info->doubly_indirect ) { a000f218: e594305c ldr r3, [r4, #92] ; 0x5c <== NOT EXECUTED a000f21c: e3530000 cmp r3, #0 <== NOT EXECUTED a000f220: 13a06000 movne r6, #0 <== NOT EXECUTED for ( i=0 ; i<== NOT EXECUTED if ( info->indirect ) { memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { a000f228: 1a000009 bne a000f254 <== NOT EXECUTED a000f22c: ea00000e b a000f26c <== NOT EXECUTED for ( i=0 ; idoubly_indirect[i] ) { a000f230: e594305c ldr r3, [r4, #92] ; 0x5c <== NOT EXECUTED a000f234: e1a00106 lsl r0, r6, #2 <== NOT EXECUTED a000f238: e7932106 ldr r2, [r3, r6, lsl #2] <== NOT EXECUTED a000f23c: e3520000 cmp r2, #0 <== NOT EXECUTED a000f240: 0a000002 beq a000f250 <== NOT EXECUTED memfile_free_blocks_in_table( a000f244: e0830000 add r0, r3, r0 <== NOT EXECUTED a000f248: e1a01005 mov r1, r5 <== NOT EXECUTED a000f24c: ebffffd2 bl a000f19c <== NOT EXECUTED if ( info->indirect ) { memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; i <== NOT EXECUTED if ( info->doubly_indirect[i] ) { memfile_free_blocks_in_table( (block_p **)&info->doubly_indirect[i], to_free ); } } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); a000f260: e284005c add r0, r4, #92 ; 0x5c <== NOT EXECUTED a000f264: e1a01005 mov r1, r5 <== NOT EXECUTED a000f268: ebffffcb bl a000f19c <== NOT EXECUTED } if ( info->triply_indirect ) { a000f26c: e5943060 ldr r3, [r4, #96] ; 0x60 <== NOT EXECUTED a000f270: e3530000 cmp r3, #0 <== NOT EXECUTED a000f274: 13a06000 movne r6, #0 <== NOT EXECUTED for ( i=0 ; i<== NOT EXECUTED } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { a000f27c: 1a000017 bne a000f2e0 <== NOT EXECUTED a000f280: ea00001c b a000f2f8 <== NOT EXECUTED for ( i=0 ; itriply_indirect[i]; a000f284: e5943060 ldr r3, [r4, #96] ; 0x60 <== NOT EXECUTED } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { a000f288: e1a09106 lsl r9, r6, #2 <== NOT EXECUTED for ( i=0 ; itriply_indirect[i]; a000f28c: e7938106 ldr r8, [r3, r6, lsl #2] <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ a000f290: e3580000 cmp r8, #0 <== NOT EXECUTED a000f294: 0a000014 beq a000f2ec <== NOT EXECUTED * a significant difference in the performance of this routine. * * Regardless until the IMFS implementation is proven, it * is better to stick to simple, easy to understand algorithms. */ int IMFS_memfile_remove( a000f298: e2488004 sub r8, r8, #4 <== NOT EXECUTED a000f29c: e3a07000 mov r7, #0 <== NOT EXECUTED a000f2a0: ea000006 b a000f2c0 <== NOT EXECUTED for ( i=0 ; itriply_indirect[i]; if ( !p ) /* ensure we have a valid pointer */ break; for ( j=0 ; j <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&p[j], to_free); a000f2b0: e1a00008 mov r0, r8 <== NOT EXECUTED a000f2b4: e1a01005 mov r1, r5 <== NOT EXECUTED a000f2b8: ebffffb7 bl a000f19c <== NOT EXECUTED if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; if ( !p ) /* ensure we have a valid pointer */ break; for ( j=0 ; j <== NOT EXECUTED if ( p[j] ) { memfile_free_blocks_in_table( (block_p **)&p[j], to_free); } } memfile_free_blocks_in_table( a000f2cc: e5940060 ldr r0, [r4, #96] ; 0x60 <== NOT EXECUTED a000f2d0: e1a01005 mov r1, r5 <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED } } memfile_free_blocks_in_table( (block_p **)&info->triply_indirect[i], to_free ); } memfile_free_blocks_in_table( a000f2ec: e2840060 add r0, r4, #96 ; 0x60 <== NOT EXECUTED a000f2f0: e1a01005 mov r1, r5 <== NOT EXECUTED a000f2f4: ebffffa8 bl a000f19c <== NOT EXECUTED (block_p **)&info->triply_indirect, to_free ); } return 0; } a000f2f8: e3a00000 mov r0, #0 <== NOT EXECUTED a000f2fc: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED =============================================================================== a000f304 : */ MEMFILE_STATIC int IMFS_memfile_remove_block( IMFS_jnode_t *the_jnode, unsigned int block ) { a000f304: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED block_p *block_ptr; block_p ptr; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f308: e3a02000 mov r2, #0 <== NOT EXECUTED a000f30c: ebfffe8d bl a000ed48 <== NOT EXECUTED IMFS_assert( block_ptr ); ptr = *block_ptr; *block_ptr = 0; a000f310: e3a02000 mov r2, #0 <== NOT EXECUTED ) { block_p *block_ptr; block_p ptr; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f314: e1a03000 mov r3, r0 <== NOT EXECUTED IMFS_assert( block_ptr ); ptr = *block_ptr; a000f318: e5900000 ldr r0, [r0] <== NOT EXECUTED *block_ptr = 0; a000f31c: e5832000 str r2, [r3] <== NOT EXECUTED memfile_free_block( ptr ); a000f320: ebffff95 bl a000f17c <== NOT EXECUTED return 1; } a000f324: e3a00001 mov r0, #1 <== NOT EXECUTED a000f328: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a000f448 : IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { a000f448: e92d4ff7 push {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}<== NOT EXECUTED a000f44c: e1a06003 mov r6, r3 <== NOT EXECUTED * If the last byte we are supposed to write is past the end of this * in memory file, then extend the length. */ last_byte = start + my_length; if ( last_byte > the_jnode->info.file.size ) { a000f450: e5903054 ldr r3, [r0, #84] ; 0x54 <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { a000f454: e59d8030 ldr r8, [sp, #48] ; 0x30 <== NOT EXECUTED a000f458: e1a07001 mov r7, r1 <== NOT EXECUTED * If the last byte we are supposed to write is past the end of this * in memory file, then extend the length. */ last_byte = start + my_length; if ( last_byte > the_jnode->info.file.size ) { a000f45c: e3530000 cmp r3, #0 <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { a000f460: e1a04000 mov r4, r0 <== NOT EXECUTED a000f464: e1a0a002 mov sl, r2 <== NOT EXECUTED /* * If the last byte we are supposed to write is past the end of this * in memory file, then extend the length. */ last_byte = start + my_length; a000f468: e0881001 add r1, r8, r1 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) { a000f46c: ba000003 blt a000f480 <== NOT EXECUTED a000f470: 1a00000c bne a000f4a8 <== NOT EXECUTED a000f474: e5903050 ldr r3, [r0, #80] ; 0x50 <== NOT EXECUTED a000f478: e1530001 cmp r3, r1 <== NOT EXECUTED a000f47c: 2a000009 bcs a000f4a8 <== NOT EXECUTED status = IMFS_memfile_extend( the_jnode, last_byte ); a000f480: e1a00004 mov r0, r4 <== NOT EXECUTED a000f484: e3a02000 mov r2, #0 <== NOT EXECUTED a000f488: ebffffa7 bl a000f32c <== NOT EXECUTED if ( status ) a000f48c: e3500000 cmp r0, #0 <== NOT EXECUTED a000f490: 0a000004 beq a000f4a8 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); a000f494: eb00034d bl a00101d0 <__errno> <== NOT EXECUTED a000f498: e3a0301c mov r3, #28 <== NOT EXECUTED a000f49c: e5803000 str r3, [r0] <== NOT EXECUTED a000f4a0: e3e05000 mvn r5, #0 <== NOT EXECUTED a000f4a4: ea00004d b a000f5e0 <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a000f4a8: e59f3138 ldr r3, [pc, #312] ; a000f5e8 <== NOT EXECUTED a000f4ac: e1a00007 mov r0, r7 <== NOT EXECUTED a000f4b0: e1a0100a mov r1, sl <== NOT EXECUTED a000f4b4: e5939000 ldr r9, [r3] <== NOT EXECUTED a000f4b8: e1a0b009 mov fp, r9 <== NOT EXECUTED a000f4bc: e1a0cfcb asr ip, fp, #31 <== NOT EXECUTED a000f4c0: e1a0300c mov r3, ip <== NOT EXECUTED a000f4c4: e1a0200b mov r2, fp <== NOT EXECUTED a000f4c8: e58dc000 str ip, [sp] <== NOT EXECUTED a000f4cc: eb0012fb bl a00140c0 <__moddi3> <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f4d0: e59dc000 ldr ip, [sp] <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a000f4d4: e1a05000 mov r5, r0 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f4d8: e1a0100a mov r1, sl <== NOT EXECUTED a000f4dc: e1a00007 mov r0, r7 <== NOT EXECUTED a000f4e0: e1a0200b mov r2, fp <== NOT EXECUTED a000f4e4: e1a0300c mov r3, ip <== NOT EXECUTED a000f4e8: eb0011c7 bl a0013c0c <__divdi3> <== NOT EXECUTED if ( start_offset ) { a000f4ec: e3550000 cmp r5, #0 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000f4f0: e1a07000 mov r7, r0 <== NOT EXECUTED if ( start_offset ) { a000f4f4: 0a000012 beq a000f544 <== NOT EXECUTED to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f4f8: e1a00004 mov r0, r4 <== NOT EXECUTED a000f4fc: e1a01007 mov r1, r7 <== NOT EXECUTED a000f500: e3a02000 mov r2, #0 <== NOT EXECUTED a000f504: ebfffe0f bl a000ed48 <== NOT EXECUTED if ( !block_ptr ) a000f508: e3500000 cmp r0, #0 <== NOT EXECUTED return copied; a000f50c: 01a05000 moveq r5, r0 <== NOT EXECUTED if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) a000f510: 0a000032 beq a000f5e0 <== NOT EXECUTED block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); a000f514: e5900000 ldr r0, [r0] <== NOT EXECUTED * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; a000f518: e065a009 rsb sl, r5, r9 <== NOT EXECUTED a000f51c: e15a0008 cmp sl, r8 <== NOT EXECUTED a000f520: 21a0a008 movcs sl, r8 <== NOT EXECUTED block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); a000f524: e0800005 add r0, r0, r5 <== NOT EXECUTED a000f528: e1a01006 mov r1, r6 <== NOT EXECUTED a000f52c: e1a0200a mov r2, sl <== NOT EXECUTED a000f530: eb000554 bl a0010a88 <== NOT EXECUTED src += to_copy; a000f534: e086600a add r6, r6, sl <== NOT EXECUTED block++; a000f538: e2877001 add r7, r7, #1 <== NOT EXECUTED my_length -= to_copy; a000f53c: e06a8008 rsb r8, sl, r8 <== NOT EXECUTED copied += to_copy; a000f540: e1a0500a mov r5, sl <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; a000f544: e59f909c ldr r9, [pc, #156] ; a000f5e8 <== NOT EXECUTED a000f548: e599a000 ldr sl, [r9] <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { a000f54c: ea00000d b a000f588 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f550: e1a00004 mov r0, r4 <== NOT EXECUTED a000f554: e1a01007 mov r1, r7 <== NOT EXECUTED a000f558: e3a02000 mov r2, #0 <== NOT EXECUTED a000f55c: ebfffdf9 bl a000ed48 <== NOT EXECUTED if ( !block_ptr ) a000f560: e3500000 cmp r0, #0 <== NOT EXECUTED a000f564: 0a00001d beq a000f5e0 <== NOT EXECUTED return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, to_copy ); a000f568: e1a01006 mov r1, r6 <== NOT EXECUTED a000f56c: e5900000 ldr r0, [r0] <== NOT EXECUTED a000f570: e1a0200a mov r2, sl <== NOT EXECUTED a000f574: eb000543 bl a0010a88 <== NOT EXECUTED src += to_copy; a000f578: e086600a add r6, r6, sl <== NOT EXECUTED block++; a000f57c: e2877001 add r7, r7, #1 <== NOT EXECUTED my_length -= to_copy; a000f580: e06a8008 rsb r8, sl, r8 <== NOT EXECUTED * IMFS_memfile_write * * This routine writes the specified data buffer into the in memory * file pointed to by the_jnode. The file is extended as needed. */ MEMFILE_STATIC ssize_t IMFS_memfile_write( a000f584: e085500a add r5, r5, sl <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { a000f588: e5993000 ldr r3, [r9] <== NOT EXECUTED a000f58c: e1580003 cmp r8, r3 <== NOT EXECUTED a000f590: 2affffee bcs a000f550 <== NOT EXECUTED * Phase 3: possibly the first part of one block */ IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { a000f594: e3580000 cmp r8, #0 <== NOT EXECUTED a000f598: 0a00000a beq a000f5c8 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000f59c: e1a00004 mov r0, r4 <== NOT EXECUTED a000f5a0: e1a01007 mov r1, r7 <== NOT EXECUTED a000f5a4: e3a02000 mov r2, #0 <== NOT EXECUTED a000f5a8: ebfffde6 bl a000ed48 <== NOT EXECUTED if ( !block_ptr ) a000f5ac: e3500000 cmp r0, #0 <== NOT EXECUTED a000f5b0: 0a00000a beq a000f5e0 <== NOT EXECUTED return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, my_length ); a000f5b4: e5900000 ldr r0, [r0] <== NOT EXECUTED a000f5b8: e1a01006 mov r1, r6 <== NOT EXECUTED a000f5bc: e1a02008 mov r2, r8 <== NOT EXECUTED a000f5c0: eb000530 bl a0010a88 <== NOT EXECUTED my_length = 0; copied += to_copy; a000f5c4: e0855008 add r5, r5, r8 <== NOT EXECUTED } IMFS_mtime_ctime_update( the_jnode ); a000f5c8: e28d0004 add r0, sp, #4 <== NOT EXECUTED a000f5cc: e3a01000 mov r1, #0 <== NOT EXECUTED a000f5d0: ebffdb1b bl a0006244 <== NOT EXECUTED a000f5d4: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED a000f5d8: e5843044 str r3, [r4, #68] ; 0x44 <== NOT EXECUTED a000f5dc: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return copied; } a000f5e0: e1a00005 mov r0, r5 <== NOT EXECUTED a000f5e4: e8bd8ffe pop {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}<== NOT EXECUTED =============================================================================== a0005aa4 : const char *token, /* IN */ mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { a0005aa4: e92d40f0 push {r4, r5, r6, r7, lr} a0005aa8: e24dd040 sub sp, sp, #64 ; 0x40 a0005aac: e1a04001 mov r4, r1 a0005ab0: e1a07000 mov r7, r0 a0005ab4: e1a06002 mov r6, r2 a0005ab8: e1a05003 mov r5, r3 IMFS_jnode_t *new_node; int result; char new_name[ IMFS_NAME_MAX + 1 ]; IMFS_types_union info; IMFS_get_token( token, strlen( token ), new_name, &result ); a0005abc: eb002dad bl a0011178 a0005ac0: e28d2004 add r2, sp, #4 a0005ac4: e1a01000 mov r1, r0 a0005ac8: e28d303c add r3, sp, #60 ; 0x3c a0005acc: e1a00007 mov r0, r7 a0005ad0: eb001edf bl a000d654 /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) a0005ad4: e2041a0f and r1, r4, #61440 ; 0xf000 a0005ad8: e3510901 cmp r1, #16384 ; 0x4000 type = IMFS_DIRECTORY; a0005adc: 03a01001 moveq r1, #1 IMFS_get_token( token, strlen( token ), new_name, &result ); /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) a0005ae0: 0a00000b beq a0005b14 type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) a0005ae4: e3510902 cmp r1, #32768 ; 0x8000 type = IMFS_MEMORY_FILE; a0005ae8: 03a01005 moveq r1, #5 /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) a0005aec: 0a000008 beq a0005b14 type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { a0005af0: e3510a06 cmp r1, #24576 ; 0x6000 a0005af4: 13510a02 cmpne r1, #8192 ; 0x2000 type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); a0005af8: 058d6028 streq r6, [sp, #40] ; 0x28 a0005afc: 058d502c streq r5, [sp, #44] ; 0x2c if ( S_ISDIR(mode) ) type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { type = IMFS_DEVICE; a0005b00: 03a01002 moveq r1, #2 */ if ( S_ISDIR(mode) ) type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { a0005b04: 0a000002 beq a0005b14 mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { IMFS_token_types type = 0; a0005b08: e3510a01 cmp r1, #4096 ; 0x1000 <== NOT EXECUTED a0005b0c: 03a01007 moveq r1, #7 <== NOT EXECUTED a0005b10: 13a01000 movne r1, #0 <== NOT EXECUTED * was ONLY passed a NULL when we created the root node. We * added a new IMFS_create_root_node() so this path no longer * existed. The result was simpler code which should not have * this path. */ new_node = IMFS_create_node( pathloc, type, new_name, mode, &info ); a0005b14: e28d3028 add r3, sp, #40 ; 0x28 a0005b18: e58d3000 str r3, [sp] a0005b1c: e59d0054 ldr r0, [sp, #84] ; 0x54 a0005b20: e28d2004 add r2, sp, #4 a0005b24: e1a03004 mov r3, r4 a0005b28: eb001c66 bl a000ccc8 if ( !new_node ) a0005b2c: e3500000 cmp r0, #0 rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; a0005b30: 13a00000 movne r0, #0 * added a new IMFS_create_root_node() so this path no longer * existed. The result was simpler code which should not have * this path. */ new_node = IMFS_create_node( pathloc, type, new_name, mode, &info ); if ( !new_node ) a0005b34: 1a000003 bne a0005b48 rtems_set_errno_and_return_minus_one( ENOMEM ); a0005b38: eb0029a4 bl a00101d0 <__errno> <== NOT EXECUTED a0005b3c: e3a0300c mov r3, #12 <== NOT EXECUTED a0005b40: e5803000 str r3, [r0] <== NOT EXECUTED a0005b44: e3e00000 mvn r0, #0 <== NOT EXECUTED return 0; } a0005b48: e28dd040 add sp, sp, #64 ; 0x40 a0005b4c: e8bd80f0 pop {r4, r5, r6, r7, pc} =============================================================================== a0005b50 : rtems_filesystem_mount_table_entry_t *mt_entry ) { IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; a0005b50: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { a0005b54: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) a0005b58: e593204c ldr r2, [r3, #76] ; 0x4c <== NOT EXECUTED a0005b5c: e3520001 cmp r2, #1 <== NOT EXECUTED a0005b60: 0a000004 beq a0005b78 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); a0005b64: eb002999 bl a00101d0 <__errno> <== NOT EXECUTED a0005b68: e3a03014 mov r3, #20 <== NOT EXECUTED a0005b6c: e5803000 str r3, [r0] <== NOT EXECUTED a0005b70: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005b74: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED /* * Set mt_fs pointer to point to the mount table entry for * the mounted file system. */ node->info.directory.mt_fs = mt_entry; a0005b78: e583005c str r0, [r3, #92] ; 0x5c <== NOT EXECUTED return 0; a0005b7c: e3a00000 mov r0, #0 <== NOT EXECUTED } a0005b80: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a0005b84 : ) { IMFS_jnode_t *node; node = pathloc->node_access; return node->type; a0005b84: e5903000 ldr r3, [r0] <== NOT EXECUTED } a0005b88: e593004c ldr r0, [r3, #76] ; 0x4c <== NOT EXECUTED a0005b8c: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a00084e0 : * This routine prints the contents of the specified jnode. */ void IMFS_print_jnode( IMFS_jnode_t *the_jnode ) { a00084e0: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_assert( the_jnode ); fprintf(stdout, "%s", the_jnode->name ); a00084e4: e59f50e0 ldr r5, [pc, #224] ; a00085cc <== NOT EXECUTED * This routine prints the contents of the specified jnode. */ void IMFS_print_jnode( IMFS_jnode_t *the_jnode ) { a00084e8: e1a04000 mov r4, r0 <== NOT EXECUTED IMFS_assert( the_jnode ); fprintf(stdout, "%s", the_jnode->name ); a00084ec: e280000c add r0, r0, #12 <== NOT EXECUTED a00084f0: e5953000 ldr r3, [r5] <== NOT EXECUTED a00084f4: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a00084f8: eb003116 bl a0014958 <== NOT EXECUTED switch( the_jnode->type ) { a00084fc: e594204c ldr r2, [r4, #76] ; 0x4c <== NOT EXECUTED a0008500: e2423001 sub r3, r2, #1 <== NOT EXECUTED a0008504: e3530006 cmp r3, #6 <== NOT EXECUTED a0008508: 979ff103 ldrls pc, [pc, r3, lsl #2] <== NOT EXECUTED a000850c: ea000026 b a00085ac <== NOT EXECUTED a0008510: a000852c .word 0xa000852c <== NOT EXECUTED a0008514: a0008540 .word 0xa0008540 <== NOT EXECUTED a0008518: a000858c .word 0xa000858c <== NOT EXECUTED a000851c: a000858c .word 0xa000858c <== NOT EXECUTED a0008520: a0008574 .word 0xa0008574 <== NOT EXECUTED a0008524: a0008558 .word 0xa0008558 <== NOT EXECUTED a0008528: a0008598 .word 0xa0008598 <== NOT EXECUTED case IMFS_DIRECTORY: fprintf(stdout, "/" ); a000852c: e5953000 ldr r3, [r5] <== NOT EXECUTED a0008530: e3a0002f mov r0, #47 ; 0x2f <== NOT EXECUTED a0008534: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a0008538: eb0030d1 bl a0014884 <== NOT EXECUTED break; a000853c: ea00001f b a00085c0 <== NOT EXECUTED case IMFS_DEVICE: fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")", a0008540: e5953000 ldr r3, [r5] <== NOT EXECUTED a0008544: e59f1084 ldr r1, [pc, #132] ; a00085d0 <== NOT EXECUTED a0008548: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED a000854c: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED a0008550: e5943054 ldr r3, [r4, #84] ; 0x54 <== NOT EXECUTED a0008554: ea000004 b a000856c <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor ); break; case IMFS_LINEAR_FILE: fprintf(stdout, " (file %" PRId32 " %p)", a0008558: e5953000 ldr r3, [r5] <== NOT EXECUTED a000855c: e59f1070 ldr r1, [pc, #112] ; a00085d4 <== NOT EXECUTED a0008560: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED a0008564: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED a0008568: e5943058 ldr r3, [r4, #88] ; 0x58 <== NOT EXECUTED a000856c: eb0030a4 bl a0014804 <== NOT EXECUTED (uint32_t)the_jnode->info.linearfile.size, the_jnode->info.linearfile.direct ); break; a0008570: ea000012 b a00085c0 <== NOT EXECUTED the_jnode->info.file.indirect, the_jnode->info.file.doubly_indirect, the_jnode->info.file.triply_indirect ); #else fprintf(stdout, " (file %" PRId32 ")", a0008574: e5953000 ldr r3, [r5] <== NOT EXECUTED a0008578: e59f1058 ldr r1, [pc, #88] ; a00085d8 <== NOT EXECUTED a000857c: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED a0008580: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED a0008584: eb00309e bl a0014804 <== NOT EXECUTED (uint32_t)the_jnode->info.file.size ); #endif break; a0008588: ea00000c b a00085c0 <== NOT EXECUTED case IMFS_HARD_LINK: fprintf(stdout, " links not printed\n" ); return; case IMFS_SYM_LINK: fprintf(stdout, " links not printed\n" ); a000858c: e5953000 ldr r3, [r5] <== NOT EXECUTED a0008590: e59f0044 ldr r0, [pc, #68] ; a00085dc <== NOT EXECUTED a0008594: ea000001 b a00085a0 <== NOT EXECUTED return; case IMFS_FIFO: fprintf(stdout, " FIFO not printed\n" ); a0008598: e5953000 ldr r3, [r5] <== NOT EXECUTED a000859c: e59f003c ldr r0, [pc, #60] ; a00085e0 <== NOT EXECUTED a00085a0: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED default: fprintf(stdout, " bad type %d\n", the_jnode->type ); return; } puts(""); } a00085a4: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED case IMFS_SYM_LINK: fprintf(stdout, " links not printed\n" ); return; case IMFS_FIFO: fprintf(stdout, " FIFO not printed\n" ); a00085a8: ea0030ea b a0014958 <== NOT EXECUTED return; default: fprintf(stdout, " bad type %d\n", the_jnode->type ); a00085ac: e5953000 ldr r3, [r5] <== NOT EXECUTED a00085b0: e59f102c ldr r1, [pc, #44] ; a00085e4 <== NOT EXECUTED a00085b4: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED return; } puts(""); } a00085b8: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED case IMFS_FIFO: fprintf(stdout, " FIFO not printed\n" ); return; default: fprintf(stdout, " bad type %d\n", the_jnode->type ); a00085bc: ea003090 b a0014804 <== NOT EXECUTED return; } puts(""); a00085c0: e59f0020 ldr r0, [pc, #32] ; a00085e8 <== NOT EXECUTED } a00085c4: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED default: fprintf(stdout, " bad type %d\n", the_jnode->type ); return; } puts(""); a00085c8: ea0037bc b a00164c0 <== NOT EXECUTED =============================================================================== a0005b90 : ) { IMFS_jnode_t *node; ssize_t i; node = loc->node_access; a0005b90: e590c000 ldr ip, [r0] <== NOT EXECUTED IMFS_assert( node->type == IMFS_SYM_LINK ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) a0005b94: e3a00000 mov r0, #0 <== NOT EXECUTED a0005b98: ea000001 b a0005ba4 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; a0005b9c: e7c13000 strb r3, [r1, r0] <== NOT EXECUTED node = loc->node_access; IMFS_assert( node->type == IMFS_SYM_LINK ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) a0005ba0: e2800001 add r0, r0, #1 <== NOT EXECUTED a0005ba4: e1500002 cmp r0, r2 <== NOT EXECUTED a0005ba8: 212fff1e bxcs lr <== NOT EXECUTED a0005bac: e59c3050 ldr r3, [ip, #80] ; 0x50 <== NOT EXECUTED a0005bb0: e7d33000 ldrb r3, [r3, r0] <== NOT EXECUTED a0005bb4: e3530000 cmp r3, #0 <== NOT EXECUTED a0005bb8: 1afffff7 bne a0005b9c <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; return i; } a0005bbc: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a0005bc0 : rtems_filesystem_location_info_t *old_parent_loc, /* IN */ rtems_filesystem_location_info_t *old_loc, /* IN */ rtems_filesystem_location_info_t *new_parent_loc, /* IN */ const char *new_name /* IN */ ) { a0005bc0: e92d4033 push {r0, r1, r4, r5, lr} <== NOT EXECUTED IMFS_jnode_t *the_jnode; IMFS_jnode_t *new_parent; the_jnode = old_loc->node_access; a0005bc4: e5914000 ldr r4, [r1] <== NOT EXECUTED rtems_filesystem_location_info_t *old_parent_loc, /* IN */ rtems_filesystem_location_info_t *old_loc, /* IN */ rtems_filesystem_location_info_t *new_parent_loc, /* IN */ const char *new_name /* IN */ ) { a0005bc8: e1a05002 mov r5, r2 <== NOT EXECUTED IMFS_jnode_t *the_jnode; IMFS_jnode_t *new_parent; the_jnode = old_loc->node_access; strncpy( the_jnode->name, new_name, IMFS_NAME_MAX ); a0005bcc: e1a01003 mov r1, r3 <== NOT EXECUTED a0005bd0: e284000c add r0, r4, #12 <== NOT EXECUTED a0005bd4: e3a02020 mov r2, #32 <== NOT EXECUTED a0005bd8: eb002d7e bl a00111d8 <== NOT EXECUTED if ( the_jnode->Parent != NULL ) a0005bdc: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED a0005be0: e3530000 cmp r3, #0 <== NOT EXECUTED a0005be4: 0a000001 beq a0005bf0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void rtems_chain_extract( rtems_chain_node *the_node ) { _Chain_Extract( the_node ); a0005be8: e1a00004 mov r0, r4 <== NOT EXECUTED a0005bec: eb001041 bl a0009cf8 <_Chain_Extract> <== NOT EXECUTED rtems_chain_extract( (rtems_chain_node *) the_jnode ); new_parent = new_parent_loc->node_access; a0005bf0: e5950000 ldr r0, [r5] <== NOT EXECUTED RTEMS_INLINE_ROUTINE void rtems_chain_append( rtems_chain_control *the_chain, rtems_chain_node *the_node ) { _Chain_Append( the_chain, the_node ); a0005bf4: e1a01004 mov r1, r4 <== NOT EXECUTED the_jnode->Parent = new_parent; a0005bf8: e5840008 str r0, [r4, #8] <== NOT EXECUTED a0005bfc: e2800050 add r0, r0, #80 ; 0x50 <== NOT EXECUTED a0005c00: eb001031 bl a0009ccc <_Chain_Append> <== NOT EXECUTED rtems_chain_append( &new_parent->info.directory.Entries, &the_jnode->Node ); /* * Update the time. */ IMFS_update_ctime( the_jnode ); a0005c04: e1a0000d mov r0, sp <== NOT EXECUTED a0005c08: e3a01000 mov r1, #0 <== NOT EXECUTED a0005c0c: eb00018c bl a0006244 <== NOT EXECUTED a0005c10: e59d3000 ldr r3, [sp] <== NOT EXECUTED return 0; } a0005c14: e3a00000 mov r0, #0 <== NOT EXECUTED rtems_chain_append( &new_parent->info.directory.Entries, &the_jnode->Node ); /* * Update the time. */ IMFS_update_ctime( the_jnode ); a0005c18: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return 0; } a0005c1c: e8bd803c pop {r2, r3, r4, r5, pc} <== NOT EXECUTED =============================================================================== a000d7e0 : int IMFS_rmnod( rtems_filesystem_location_info_t *parent_pathloc, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN */ ) { a000d7e0: e92d4010 push {r4, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = (IMFS_jnode_t *) pathloc->node_access; a000d7e4: e5914000 ldr r4, [r1] <== NOT EXECUTED IMFS_create_orphan( jnode ); a000d7e8: e1a00004 mov r0, r4 <== NOT EXECUTED a000d7ec: ebffffce bl a000d72c <== NOT EXECUTED IMFS_check_node_remove( jnode ); a000d7f0: e1a00004 mov r0, r4 <== NOT EXECUTED a000d7f4: ebffffdd bl a000d770 <== NOT EXECUTED return 0; } a000d7f8: e3a00000 mov r0, #0 <== NOT EXECUTED a000d7fc: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a000d800 : { IMFS_fs_info_t *fs_info; IMFS_jnode_t *the_jnode; IMFS_device_t *io; the_jnode = loc->node_access; a000d800: e5903000 ldr r3, [r0] <== NOT EXECUTED int IMFS_stat( rtems_filesystem_location_info_t *loc, struct stat *buf ) { a000d804: e92d4800 push {fp, lr} <== NOT EXECUTED IMFS_device_t *io; the_jnode = loc->node_access; switch ( the_jnode->type ) { a000d808: e593204c ldr r2, [r3, #76] ; 0x4c <== NOT EXECUTED a000d80c: e2422002 sub r2, r2, #2 <== NOT EXECUTED a000d810: e3520005 cmp r2, #5 <== NOT EXECUTED a000d814: 979ff102 ldrls pc, [pc, r2, lsl #2] <== NOT EXECUTED a000d818: ea000012 b a000d868 <== NOT EXECUTED a000d81c: a000d834 .word 0xa000d834 <== NOT EXECUTED a000d820: a000d868 .word 0xa000d868 <== NOT EXECUTED a000d824: a000d854 .word 0xa000d854 <== NOT EXECUTED a000d828: a000d848 .word 0xa000d848 <== NOT EXECUTED a000d82c: a000d848 .word 0xa000d848 <== NOT EXECUTED a000d830: a000d854 .word 0xa000d854 <== NOT EXECUTED case IMFS_DEVICE: io = &the_jnode->info.device; buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor ); a000d834: e5932054 ldr r2, [r3, #84] ; 0x54 <== NOT EXECUTED rtems_device_minor_number _minor ) { union __rtems_dev_t temp; temp.__overlay.major = _major; a000d838: e593c050 ldr ip, [r3, #80] ; 0x50 <== NOT EXECUTED a000d83c: e581201c str r2, [r1, #28] <== NOT EXECUTED a000d840: e581c018 str ip, [r1, #24] <== NOT EXECUTED break; a000d844: ea00000c b a000d87c <== NOT EXECUTED case IMFS_LINEAR_FILE: case IMFS_MEMORY_FILE: buf->st_size = the_jnode->info.file.size; a000d848: e283c050 add ip, r3, #80 ; 0x50 <== NOT EXECUTED a000d84c: e89c1800 ldm ip, {fp, ip} <== NOT EXECUTED a000d850: ea000001 b a000d85c <== NOT EXECUTED case IMFS_SYM_LINK: buf->st_size = 0; break; case IMFS_FIFO: buf->st_size = 0; a000d854: e3a0b000 mov fp, #0 <== NOT EXECUTED a000d858: e3a0c000 mov ip, #0 <== NOT EXECUTED a000d85c: e581b020 str fp, [r1, #32] <== NOT EXECUTED a000d860: e581c024 str ip, [r1, #36] ; 0x24 <== NOT EXECUTED break; a000d864: ea000004 b a000d87c <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); a000d868: eb000a58 bl a00101d0 <__errno> <== NOT EXECUTED a000d86c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED a000d870: e5803000 str r3, [r0] <== NOT EXECUTED a000d874: e3e00000 mvn r0, #0 <== NOT EXECUTED a000d878: e8bd8800 pop {fp, pc} <== NOT EXECUTED /* * The device number of the IMFS is the major number and the minor is the * instance. */ fs_info = loc->mt_entry->fs_info; a000d87c: e5902010 ldr r2, [r0, #16] <== NOT EXECUTED a000d880: e59f0054 ldr r0, [pc, #84] ; a000d8dc <== NOT EXECUTED buf->st_dev = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); a000d884: e5922034 ldr r2, [r2, #52] ; 0x34 <== NOT EXECUTED a000d888: e5922000 ldr r2, [r2] <== NOT EXECUTED /* * The device number of the IMFS is the major number and the minor is the * instance. */ fs_info = loc->mt_entry->fs_info; buf->st_dev = a000d88c: e5810000 str r0, [r1] <== NOT EXECUTED buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; buf->st_ctime = the_jnode->stat_ctime; return 0; a000d890: e3a00000 mov r0, #0 <== NOT EXECUTED /* * The device number of the IMFS is the major number and the minor is the * instance. */ fs_info = loc->mt_entry->fs_info; buf->st_dev = a000d894: e5812004 str r2, [r1, #4] <== NOT EXECUTED rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; a000d898: e5932030 ldr r2, [r3, #48] ; 0x30 <== NOT EXECUTED a000d89c: e581200c str r2, [r1, #12] <== NOT EXECUTED buf->st_nlink = the_jnode->st_nlink; a000d8a0: e1d323b4 ldrh r2, [r3, #52] ; 0x34 <== NOT EXECUTED a000d8a4: e1c121b0 strh r2, [r1, #16] <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; a000d8a8: e5932038 ldr r2, [r3, #56] ; 0x38 <== NOT EXECUTED a000d8ac: e5812008 str r2, [r1, #8] <== NOT EXECUTED buf->st_uid = the_jnode->st_uid; a000d8b0: e1d323bc ldrh r2, [r3, #60] ; 0x3c <== NOT EXECUTED a000d8b4: e1c121b2 strh r2, [r1, #18] <== NOT EXECUTED buf->st_gid = the_jnode->st_gid; a000d8b8: e1d323be ldrh r2, [r3, #62] ; 0x3e <== NOT EXECUTED a000d8bc: e1c121b4 strh r2, [r1, #20] <== NOT EXECUTED buf->st_atime = the_jnode->stat_atime; a000d8c0: e5932040 ldr r2, [r3, #64] ; 0x40 <== NOT EXECUTED a000d8c4: e5812028 str r2, [r1, #40] ; 0x28 <== NOT EXECUTED buf->st_mtime = the_jnode->stat_mtime; a000d8c8: e5932044 ldr r2, [r3, #68] ; 0x44 <== NOT EXECUTED buf->st_ctime = the_jnode->stat_ctime; a000d8cc: e5933048 ldr r3, [r3, #72] ; 0x48 <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; a000d8d0: e5812030 str r2, [r1, #48] ; 0x30 <== NOT EXECUTED buf->st_ctime = the_jnode->stat_ctime; a000d8d4: e5813038 str r3, [r1, #56] ; 0x38 <== NOT EXECUTED return 0; } a000d8d8: e8bd8800 pop {fp, pc} <== NOT EXECUTED =============================================================================== a0005c20 : int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { a0005c20: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED a0005c24: e1a05000 mov r5, r0 <== NOT EXECUTED a0005c28: e24dd040 sub sp, sp, #64 ; 0x40 <== NOT EXECUTED int i; /* * Remove any separators at the end of the string. */ IMFS_get_token( node_name, strlen( node_name ), new_name, &i ); a0005c2c: e1a00002 mov r0, r2 <== NOT EXECUTED int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { a0005c30: e1a06001 mov r6, r1 <== NOT EXECUTED a0005c34: e1a07002 mov r7, r2 <== NOT EXECUTED int i; /* * Remove any separators at the end of the string. */ IMFS_get_token( node_name, strlen( node_name ), new_name, &i ); a0005c38: eb002d4e bl a0011178 <== NOT EXECUTED a0005c3c: e28d4004 add r4, sp, #4 <== NOT EXECUTED a0005c40: e1a01000 mov r1, r0 <== NOT EXECUTED a0005c44: e1a02004 mov r2, r4 <== NOT EXECUTED a0005c48: e28d303c add r3, sp, #60 ; 0x3c <== NOT EXECUTED a0005c4c: e1a00007 mov r0, r7 <== NOT EXECUTED a0005c50: eb001e7f bl a000d654 <== NOT EXECUTED /* * Duplicate link name */ info.sym_link.name = strdup(link_name); a0005c54: e1a00006 mov r0, r6 <== NOT EXECUTED a0005c58: eb002d32 bl a0011128 <== NOT EXECUTED if (info.sym_link.name == NULL) { a0005c5c: e3500000 cmp r0, #0 <== NOT EXECUTED IMFS_get_token( node_name, strlen( node_name ), new_name, &i ); /* * Duplicate link name */ info.sym_link.name = strdup(link_name); a0005c60: e58d0028 str r0, [sp, #40] ; 0x28 <== NOT EXECUTED if (info.sym_link.name == NULL) { a0005c64: 0a00000b beq a0005c98 <== NOT EXECUTED new_node = IMFS_create_node( parent_loc, IMFS_SYM_LINK, new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info a0005c68: e28d3028 add r3, sp, #40 ; 0x28 <== NOT EXECUTED * was ONLY passed a NULL when we created the root node. We * added a new IMFS_create_root_node() so this path no longer * existed. The result was simpler code which should not have * this path. */ new_node = IMFS_create_node( a0005c6c: e58d3000 str r3, [sp] <== NOT EXECUTED a0005c70: e1a00005 mov r0, r5 <== NOT EXECUTED a0005c74: e3a01004 mov r1, #4 <== NOT EXECUTED a0005c78: e1a02004 mov r2, r4 <== NOT EXECUTED a0005c7c: e59f302c ldr r3, [pc, #44] ; a0005cb0 <== NOT EXECUTED a0005c80: eb001c10 bl a000ccc8 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if (new_node == NULL) { a0005c84: e3500000 cmp r0, #0 <== NOT EXECUTED free(info.sym_link.name); rtems_set_errno_and_return_minus_one(ENOMEM); } return 0; a0005c88: 13a00000 movne r0, #0 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if (new_node == NULL) { a0005c8c: 1a000005 bne a0005ca8 <== NOT EXECUTED free(info.sym_link.name); a0005c90: e59d0028 ldr r0, [sp, #40] ; 0x28 <== NOT EXECUTED a0005c94: eb000135 bl a0006170 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); a0005c98: eb00294c bl a00101d0 <__errno> <== NOT EXECUTED a0005c9c: e3a0300c mov r3, #12 <== NOT EXECUTED a0005ca0: e5803000 str r3, [r0] <== NOT EXECUTED a0005ca4: e3e00000 mvn r0, #0 <== NOT EXECUTED } return 0; } a0005ca8: e28dd040 add sp, sp, #64 ; 0x40 <== NOT EXECUTED a0005cac: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED =============================================================================== a0005cb4 : int IMFS_unlink( rtems_filesystem_location_info_t *parentloc, /* IN */ rtems_filesystem_location_info_t *loc /* IN */ ) { a0005cb4: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED IMFS_jnode_t *node; rtems_filesystem_location_info_t the_link; int result = 0; node = loc->node_access; a0005cb8: e5915000 ldr r5, [r1] <== NOT EXECUTED int IMFS_unlink( rtems_filesystem_location_info_t *parentloc, /* IN */ rtems_filesystem_location_info_t *loc /* IN */ ) { a0005cbc: e24dd01c sub sp, sp, #28 <== NOT EXECUTED a0005cc0: e1a06000 mov r6, r0 <== NOT EXECUTED /* * If this is the last last pointer to the node * free the node. */ if ( node->type == IMFS_HARD_LINK ) { a0005cc4: e595304c ldr r3, [r5, #76] ; 0x4c <== NOT EXECUTED int IMFS_unlink( rtems_filesystem_location_info_t *parentloc, /* IN */ rtems_filesystem_location_info_t *loc /* IN */ ) { a0005cc8: e1a04001 mov r4, r1 <== NOT EXECUTED /* * If this is the last last pointer to the node * free the node. */ if ( node->type == IMFS_HARD_LINK ) { a0005ccc: e3530003 cmp r3, #3 <== NOT EXECUTED a0005cd0: 1a000024 bne a0005d68 <== NOT EXECUTED if ( !node->info.hard_link.link_node ) a0005cd4: e595e050 ldr lr, [r5, #80] ; 0x50 <== NOT EXECUTED a0005cd8: e35e0000 cmp lr, #0 <== NOT EXECUTED a0005cdc: 1a000003 bne a0005cf0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); a0005ce0: eb00293a bl a00101d0 <__errno> <== NOT EXECUTED a0005ce4: e3a03016 mov r3, #22 <== NOT EXECUTED a0005ce8: e5803000 str r3, [r0] <== NOT EXECUTED a0005cec: ea000023 b a0005d80 <== NOT EXECUTED the_link = *loc; a0005cf0: e1a0c00d mov ip, sp <== NOT EXECUTED a0005cf4: e1a07001 mov r7, r1 <== NOT EXECUTED a0005cf8: e8b7000f ldm r7!, {r0, r1, r2, r3} <== NOT EXECUTED a0005cfc: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED a0005d00: e5973000 ldr r3, [r7] <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; a0005d04: e28d701c add r7, sp, #28 <== NOT EXECUTED a0005d08: e527e01c str lr, [r7, #-28]! <== NOT EXECUTED IMFS_Set_handlers( &the_link ); a0005d0c: e1a0000d mov r0, sp <== NOT EXECUTED if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) rtems_set_errno_and_return_minus_one( EINVAL ); the_link = *loc; a0005d10: e58c3000 str r3, [ip] <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; IMFS_Set_handlers( &the_link ); a0005d14: eb001c4b bl a000ce48 <== NOT EXECUTED /* * If removing the last hard link to a node, then we need * to remove the node that is a link and the node itself. */ if ( node->info.hard_link.link_node->st_nlink == 1) a0005d18: e5953050 ldr r3, [r5, #80] ; 0x50 <== NOT EXECUTED a0005d1c: e1d323b4 ldrh r2, [r3, #52] ; 0x34 <== NOT EXECUTED a0005d20: e3520001 cmp r2, #1 <== NOT EXECUTED a0005d24: 1a000007 bne a0005d48 <== NOT EXECUTED { result = (*the_link.handlers->rmnod_h)( parentloc, &the_link ); a0005d28: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED a0005d2c: e1a00006 mov r0, r6 <== NOT EXECUTED a0005d30: e1a0100d mov r1, sp <== NOT EXECUTED a0005d34: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED a0005d38: e12fff33 blx r3 <== NOT EXECUTED if ( result != 0 ) a0005d3c: e3500000 cmp r0, #0 <== NOT EXECUTED a0005d40: 0a000008 beq a0005d68 <== NOT EXECUTED a0005d44: ea00000d b a0005d80 <== NOT EXECUTED return -1; } else { node->info.hard_link.link_node->st_nlink --; a0005d48: e2422001 sub r2, r2, #1 <== NOT EXECUTED a0005d4c: e1c323b4 strh r2, [r3, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( node->info.hard_link.link_node ); a0005d50: e28d0014 add r0, sp, #20 <== NOT EXECUTED a0005d54: e3a01000 mov r1, #0 <== NOT EXECUTED a0005d58: eb000139 bl a0006244 <== NOT EXECUTED a0005d5c: e5953050 ldr r3, [r5, #80] ; 0x50 <== NOT EXECUTED a0005d60: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED a0005d64: e5832048 str r2, [r3, #72] ; 0x48 <== NOT EXECUTED /* * Now actually free the node we were asked to free. */ result = (*loc->handlers->rmnod_h)( parentloc, loc ); a0005d68: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED a0005d6c: e1a00006 mov r0, r6 <== NOT EXECUTED a0005d70: e1a01004 mov r1, r4 <== NOT EXECUTED a0005d74: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED a0005d78: e12fff33 blx r3 <== NOT EXECUTED return result; a0005d7c: ea000000 b a0005d84 <== NOT EXECUTED if ( node->info.hard_link.link_node->st_nlink == 1) { result = (*the_link.handlers->rmnod_h)( parentloc, &the_link ); if ( result != 0 ) return -1; a0005d80: e3e00000 mvn r0, #0 <== NOT EXECUTED */ result = (*loc->handlers->rmnod_h)( parentloc, loc ); return result; } a0005d84: e28dd01c add sp, sp, #28 <== NOT EXECUTED a0005d88: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED =============================================================================== a0005d8c : rtems_filesystem_mount_table_entry_t *mt_entry ) { IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; a0005d8c: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { a0005d90: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) a0005d94: e593204c ldr r2, [r3, #76] ; 0x4c <== NOT EXECUTED a0005d98: e3520001 cmp r2, #1 <== NOT EXECUTED a0005d9c: 0a000002 beq a0005dac <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); a0005da0: eb00290a bl a00101d0 <__errno> <== NOT EXECUTED a0005da4: e3a03014 mov r3, #20 <== NOT EXECUTED a0005da8: ea000004 b a0005dc0 <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) a0005dac: e593205c ldr r2, [r3, #92] ; 0x5c <== NOT EXECUTED a0005db0: e3520000 cmp r2, #0 <== NOT EXECUTED a0005db4: 1a000004 bne a0005dcc <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */ a0005db8: eb002904 bl a00101d0 <__errno> <== NOT EXECUTED a0005dbc: e3a03016 mov r3, #22 <== NOT EXECUTED a0005dc0: e5803000 str r3, [r0] <== NOT EXECUTED a0005dc4: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005dc8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED /* * Set the mt_fs pointer to indicate that there is no longer * a file system mounted to this point. */ node->info.directory.mt_fs = NULL; a0005dcc: e3a00000 mov r0, #0 <== NOT EXECUTED a0005dd0: e583005c str r0, [r3, #92] ; 0x5c <== NOT EXECUTED return 0; } a0005dd4: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a0005dd8 : int IMFS_utime( rtems_filesystem_location_info_t *pathloc, /* IN */ time_t actime, /* IN */ time_t modtime /* IN */ ) { a0005dd8: e92d4010 push {r4, lr} <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; a0005ddc: e5904000 ldr r4, [r0] <== NOT EXECUTED the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; the_jnode->stat_ctime = time( NULL ); a0005de0: e3a00000 mov r0, #0 <== NOT EXECUTED { IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; the_jnode->stat_atime = actime; a0005de4: e5841040 str r1, [r4, #64] ; 0x40 <== NOT EXECUTED the_jnode->stat_mtime = modtime; a0005de8: e5842044 str r2, [r4, #68] ; 0x44 <== NOT EXECUTED the_jnode->stat_ctime = time( NULL ); a0005dec: eb002d34 bl a00112c4