=============================================================================== a0006b64 : 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 ); a0006b64: e3a03000 mov r3, #0 <== NOT EXECUTED a0006b68: e5803084 str r3, [r0, #132] ; 0x84 <== NOT EXECUTED a0006b6c: e5803088 str r3, [r0, #136] ; 0x88 <== NOT EXECUTED #else the_thread->cpu_time_used = 0; #endif } a0006b70: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a000d83c : { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { a000d83c: e5903000 ldr r3, [r0] ) { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; a000d840: e5902010 ldr r2, [r0, #16] switch( node->type ) { a000d844: e593304c ldr r3, [r3, #76] ; 0x4c ) { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; a000d848: e5922034 ldr r2, [r2, #52] ; 0x34 switch( node->type ) { a000d84c: e2433001 sub r3, r3, #1 a000d850: e3530006 cmp r3, #6 a000d854: 979ff103 ldrls pc, [pc, r3, lsl #2] a000d858: ea000008 b a000d880 <== NOT EXECUTED a000d85c: a000d8a8 .word 0xa000d8a8 <== NOT EXECUTED a000d860: a000d8b8 .word 0xa000d8b8 <== NOT EXECUTED a000d864: a000d898 .word 0xa000d898 <== NOT EXECUTED a000d868: a000d898 .word 0xa000d898 <== NOT EXECUTED a000d86c: a000d888 .word 0xa000d888 <== NOT EXECUTED a000d870: a000d888 .word 0xa000d888 <== NOT EXECUTED a000d874: a000d878 .word 0xa000d878 <== NOT EXECUTED break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_FIFO: loc->handlers = fs_info->fifo_handlers; a000d878: e5923010 ldr r3, [r2, #16] <== NOT EXECUTED a000d87c: e5803008 str r3, [r0, #8] <== NOT EXECUTED break; } return 0; } a000d880: e3a00000 mov r0, #0 <== NOT EXECUTED a000d884: e12fff1e bx lr <== NOT EXECUTED break; case IMFS_LINEAR_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; a000d888: e5923008 ldr r3, [r2, #8] <== NOT EXECUTED a000d88c: e5803008 str r3, [r0, #8] <== NOT EXECUTED loc->handlers = fs_info->fifo_handlers; break; } return 0; } a000d890: e3a00000 mov r0, #0 <== NOT EXECUTED a000d894: e12fff1e bx lr <== NOT EXECUTED case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; break; case IMFS_SYM_LINK: case IMFS_HARD_LINK: loc->handlers = &IMFS_link_handlers; a000d898: e59f3028 ldr r3, [pc, #40] ; a000d8c8 <== NOT EXECUTED a000d89c: e5803008 str r3, [r0, #8] <== NOT EXECUTED loc->handlers = fs_info->fifo_handlers; break; } return 0; } a000d8a0: e3a00000 mov r0, #0 <== NOT EXECUTED a000d8a4: e12fff1e bx lr <== NOT EXECUTED IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; a000d8a8: e592300c ldr r3, [r2, #12] a000d8ac: e5803008 str r3, [r0, #8] loc->handlers = fs_info->fifo_handlers; break; } return 0; } a000d8b0: e3a00000 mov r0, #0 a000d8b4: e12fff1e bx lr switch( node->type ) { case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; break; case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; a000d8b8: e59f300c ldr r3, [pc, #12] ; a000d8cc <== NOT EXECUTED a000d8bc: e5803008 str r3, [r0, #8] <== NOT EXECUTED loc->handlers = fs_info->fifo_handlers; break; } return 0; } a000d8c0: e3a00000 mov r0, #0 <== NOT EXECUTED a000d8c4: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a000e238 : void IMFS_check_node_remove( IMFS_jnode_t *jnode ) { a000e238: e92d4010 push {r4, lr} <== NOT EXECUTED a000e23c: e1a04000 mov r4, r0 <== NOT EXECUTED if ( !rtems_libio_is_file_open( jnode ) && jnode->st_nlink < 1 ) { a000e240: eb000151 bl a000e78c <== NOT EXECUTED a000e244: e3500000 cmp r0, #0 <== NOT EXECUTED a000e248: 1a00000f bne a000e28c <== NOT EXECUTED a000e24c: e1d433b4 ldrh r3, [r4, #52] ; 0x34 <== NOT EXECUTED a000e250: e3530000 cmp r3, #0 <== NOT EXECUTED a000e254: 1a00000c bne a000e28c <== NOT EXECUTED if ( rtems_filesystem_current.node_access == jnode ) a000e258: e59f2048 ldr r2, [pc, #72] ; a000e2a8 <== NOT EXECUTED a000e25c: e5922000 ldr r2, [r2] <== NOT EXECUTED a000e260: e5921004 ldr r1, [r2, #4] <== NOT EXECUTED a000e264: e1510004 cmp r1, r4 <== NOT EXECUTED rtems_filesystem_current.node_access = NULL; a000e268: 05823004 streq r3, [r2, #4] <== NOT EXECUTED switch ( jnode->type ) { a000e26c: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000e270: e3530004 cmp r3, #4 <== NOT EXECUTED a000e274: 0a000008 beq a000e29c <== NOT EXECUTED a000e278: e3530005 cmp r3, #5 <== NOT EXECUTED a000e27c: 0a000003 beq a000e290 <== NOT EXECUTED break; default: break; } free( jnode ); a000e280: e1a00004 mov r0, r4 <== NOT EXECUTED } } a000e284: e8bd4010 pop {r4, lr} <== NOT EXECUTED break; default: break; } free( jnode ); a000e288: eaffe039 b a0006374 <== NOT EXECUTED a000e28c: e8bd8010 pop {r4, pc} <== NOT EXECUTED if ( rtems_filesystem_current.node_access == jnode ) rtems_filesystem_current.node_access = NULL; switch ( jnode->type ) { case IMFS_MEMORY_FILE: IMFS_memfile_remove( jnode ); a000e290: e1a00004 mov r0, r4 <== NOT EXECUTED a000e294: eb000734 bl a000ff6c <== NOT EXECUTED break; a000e298: eafffff8 b a000e280 <== NOT EXECUTED case IMFS_SYM_LINK: free( jnode->info.sym_link.name ); a000e29c: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED a000e2a0: ebffe033 bl a0006374 <== NOT EXECUTED break; a000e2a4: eafffff5 b a000e280 <== NOT EXECUTED =============================================================================== a000d5fc : int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { a000d5fc: e92d4010 push {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; a000d600: e5904000 ldr r4, [r0] <== NOT EXECUTED int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { a000d604: e24dd008 sub sp, sp, #8 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); a000d608: 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; a000d60c: e1c413bc strh r1, [r4, #60] ; 0x3c <== NOT EXECUTED jnode->st_gid = group; a000d610: e1c423be strh r2, [r4, #62] ; 0x3e <== NOT EXECUTED IMFS_update_ctime( jnode ); a000d614: e3a01000 mov r1, #0 <== NOT EXECUTED a000d618: ebffe38a bl a0006448 <== NOT EXECUTED a000d61c: e59d3000 ldr r3, [sp] <== NOT EXECUTED return 0; } a000d620: e3a00000 mov r0, #0 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); a000d624: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return 0; } a000d628: e28dd008 add sp, sp, #8 <== NOT EXECUTED a000d62c: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a000d6ac : IMFS_jnode_types_t type, const char *name, mode_t mode, const IMFS_types_union *info ) { a000d6ac: 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 ) a000d6b0: e3500000 cmp r0, #0 IMFS_jnode_types_t type, const char *name, mode_t mode, const IMFS_types_union *info ) { a000d6b4: e1a04001 mov r4, r1 a000d6b8: e59d7018 ldr r7, [sp, #24] /* * MUST have a parent node to call this routine. */ if ( parent_loc == NULL ) return NULL; a000d6bc: 01a08000 moveq r8, r0 IMFS_fs_info_t *fs_info; /* * MUST have a parent node to call this routine. */ if ( parent_loc == NULL ) a000d6c0: 0a00002b beq a000d774 return NULL; parent = parent_loc->node_access; fs_info = parent_loc->mt_entry->fs_info; a000d6c4: e5901010 ldr r1, [r0, #16] /* * Reject creation of FIFOs if support is disabled. */ if ( type == IMFS_FIFO && a000d6c8: e3540007 cmp r4, #7 * MUST have a parent node to call this routine. */ if ( parent_loc == NULL ) return NULL; parent = parent_loc->node_access; a000d6cc: e5906000 ldr r6, [r0] fs_info = parent_loc->mt_entry->fs_info; a000d6d0: e5915034 ldr r5, [r1, #52] ; 0x34 /* * Reject creation of FIFOs if support is disabled. */ if ( type == IMFS_FIFO && a000d6d4: 0a000028 beq a000d77c return NULL; /* * Allocate filesystem node and fill in basic information */ node = IMFS_allocate_node( type, name, mode & ~rtems_filesystem_umask ); a000d6d8: e1a01002 mov r1, r2 a000d6dc: e59f2110 ldr r2, [pc, #272] ; a000d7f4 a000d6e0: e1a00004 mov r0, r4 a000d6e4: e5922000 ldr r2, [r2] a000d6e8: e592202c ldr r2, [r2, #44] ; 0x2c a000d6ec: e1c32002 bic r2, r3, r2 a000d6f0: ebffffce bl a000d630 if ( !node ) a000d6f4: e2508000 subs r8, r0, #0 a000d6f8: 0a00001d beq a000d774 return NULL; /* * Set the type specific information */ if ( type == IMFS_DIRECTORY ) { a000d6fc: e3540001 cmp r4, #1 a000d700: 0a00000d beq a000d73c rtems_chain_initialize_empty(&node->info.directory.Entries); } else if ( type == IMFS_HARD_LINK ) { a000d704: e3540003 cmp r4, #3 a000d708: 0a000026 beq a000d7a8 node->info.hard_link.link_node = info->hard_link.link_node; } else if ( type == IMFS_SYM_LINK ) { a000d70c: e3540004 cmp r4, #4 a000d710: 0a000024 beq a000d7a8 node->info.sym_link.name = info->sym_link.name; } else if ( type == IMFS_DEVICE ) { a000d714: e3540002 cmp r4, #2 a000d718: 0a00001e beq a000d798 node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; } else if ( type == IMFS_LINEAR_FILE ) { a000d71c: e3540006 cmp r4, #6 <== NOT EXECUTED a000d720: 0a000023 beq a000d7b4 <== NOT EXECUTED node->info.linearfile.size = 0; node->info.linearfile.direct = 0; } else if ( type == IMFS_MEMORY_FILE ) { a000d724: e3540005 cmp r4, #5 <== NOT EXECUTED a000d728: 0a000028 beq a000d7d0 <== NOT EXECUTED node->info.file.size = 0; node->info.file.indirect = 0; node->info.file.doubly_indirect = 0; node->info.file.triply_indirect = 0; } else if ( type == IMFS_FIFO ) { a000d72c: e3540007 cmp r4, #7 <== NOT EXECUTED node->info.fifo.pipe = NULL; a000d730: 03a03000 moveq r3, #0 <== NOT EXECUTED a000d734: 05883050 streq r3, [r8, #80] ; 0x50 <== NOT EXECUTED a000d738: ea000005 b a000d754 <== NOT EXECUTED 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 ); a000d73c: e2882054 add r2, r8, #84 ; 0x54 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { Chain_Node *head = _Chain_Head( the_chain ); a000d740: e2883050 add r3, r8, #80 ; 0x50 Chain_Node *tail = _Chain_Tail( the_chain ); head->next = tail; a000d744: e5882050 str r2, [r8, #80] ; 0x50 head->previous = NULL; a000d748: e3a02000 mov r2, #0 a000d74c: e5882054 str r2, [r8, #84] ; 0x54 tail->previous = head; a000d750: e5883058 str r3, [r8, #88] ; 0x58 /* * This node MUST have a parent, so put it in that directory list. */ node->Parent = parent; node->st_ino = ++fs_info->ino_count; a000d754: e5953004 ldr r3, [r5, #4] a000d758: e2860050 add r0, r6, #80 ; 0x50 } /* * This node MUST have a parent, so put it in that directory list. */ node->Parent = parent; a000d75c: e5886008 str r6, [r8, #8] node->st_ino = ++fs_info->ino_count; a000d760: e2833001 add r3, r3, #1 a000d764: e5853004 str r3, [r5, #4] a000d768: e1a01008 mov r1, r8 a000d76c: e5883038 str r3, [r8, #56] ; 0x38 a000d770: ebfff31d bl a000a3ec <_Chain_Append> rtems_chain_append( &parent->info.directory.Entries, &node->Node ); return node; } a000d774: e1a00008 mov r0, r8 a000d778: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} fs_info = parent_loc->mt_entry->fs_info; /* * Reject creation of FIFOs if support is disabled. */ if ( type == IMFS_FIFO && a000d77c: e5950010 ldr r0, [r5, #16] <== NOT EXECUTED a000d780: e59f1070 ldr r1, [pc, #112] ; a000d7f8 <== NOT EXECUTED a000d784: e1500001 cmp r0, r1 <== NOT EXECUTED fs_info->fifo_handlers == &rtems_filesystem_handlers_default ) return NULL; a000d788: 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 && a000d78c: 1affffd1 bne a000d6d8 <== NOT EXECUTED node->st_ino = ++fs_info->ino_count; rtems_chain_append( &parent->info.directory.Entries, &node->Node ); return node; } a000d790: e1a00008 mov r0, r8 <== NOT EXECUTED a000d794: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED } else if ( type == IMFS_HARD_LINK ) { node->info.hard_link.link_node = info->hard_link.link_node; } else if ( type == IMFS_SYM_LINK ) { node->info.sym_link.name = info->sym_link.name; } else if ( type == IMFS_DEVICE ) { node->info.device.major = info->device.major; a000d798: e897000c ldm r7, {r2, r3} a000d79c: e5882050 str r2, [r8, #80] ; 0x50 node->info.device.minor = info->device.minor; a000d7a0: e5883054 str r3, [r8, #84] ; 0x54 a000d7a4: eaffffea b a000d754 if ( type == IMFS_DIRECTORY ) { rtems_chain_initialize_empty(&node->info.directory.Entries); } else if ( type == IMFS_HARD_LINK ) { node->info.hard_link.link_node = info->hard_link.link_node; } else if ( type == IMFS_SYM_LINK ) { node->info.sym_link.name = info->sym_link.name; a000d7a8: e5973000 ldr r3, [r7] <== NOT EXECUTED a000d7ac: e5883050 str r3, [r8, #80] ; 0x50 <== NOT EXECUTED a000d7b0: eaffffe7 b a000d754 <== NOT EXECUTED } else if ( type == IMFS_DEVICE ) { node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; } else if ( type == IMFS_LINEAR_FILE ) { node->info.linearfile.size = 0; a000d7b4: e3a03000 mov r3, #0 <== NOT EXECUTED a000d7b8: e3a04000 mov r4, #0 <== NOT EXECUTED a000d7bc: e5883050 str r3, [r8, #80] ; 0x50 <== NOT EXECUTED a000d7c0: e5884054 str r4, [r8, #84] ; 0x54 <== NOT EXECUTED node->info.linearfile.direct = 0; a000d7c4: e3a03000 mov r3, #0 <== NOT EXECUTED a000d7c8: e5883058 str r3, [r8, #88] ; 0x58 <== NOT EXECUTED a000d7cc: eaffffe0 b a000d754 <== NOT EXECUTED } else if ( type == IMFS_MEMORY_FILE ) { node->info.file.size = 0; node->info.file.indirect = 0; a000d7d0: e3a03000 mov r3, #0 <== NOT EXECUTED node->info.device.minor = info->device.minor; } else if ( type == IMFS_LINEAR_FILE ) { node->info.linearfile.size = 0; node->info.linearfile.direct = 0; } else if ( type == IMFS_MEMORY_FILE ) { node->info.file.size = 0; a000d7d4: e3a01000 mov r1, #0 <== NOT EXECUTED a000d7d8: e3a02000 mov r2, #0 <== NOT EXECUTED a000d7dc: e5881050 str r1, [r8, #80] ; 0x50 <== NOT EXECUTED a000d7e0: e5882054 str r2, [r8, #84] ; 0x54 <== NOT EXECUTED node->info.file.indirect = 0; a000d7e4: e5883058 str r3, [r8, #88] ; 0x58 <== NOT EXECUTED node->info.file.doubly_indirect = 0; a000d7e8: e588305c str r3, [r8, #92] ; 0x5c <== NOT EXECUTED node->info.file.triply_indirect = 0; a000d7ec: e5883060 str r3, [r8, #96] ; 0x60 <== NOT EXECUTED a000d7f0: eaffffd7 b a000d754 <== NOT EXECUTED =============================================================================== a000e1ec : #include #include "imfs.h" void IMFS_create_orphan( IMFS_jnode_t *jnode ) { a000e1ec: e92d4010 push {r4, lr} <== NOT EXECUTED if ( jnode->Parent != NULL ) { a000e1f0: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED #include #include "imfs.h" void IMFS_create_orphan( IMFS_jnode_t *jnode ) { a000e1f4: e24dd008 sub sp, sp, #8 <== NOT EXECUTED a000e1f8: e1a04000 mov r4, r0 <== NOT EXECUTED if ( jnode->Parent != NULL ) { a000e1fc: e3530000 cmp r3, #0 <== NOT EXECUTED a000e200: 0a000002 beq a000e210 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void rtems_chain_extract( rtems_chain_node *the_node ) { _Chain_Extract( the_node ); a000e204: ebfff083 bl a000a418 <_Chain_Extract> <== NOT EXECUTED rtems_chain_extract( &jnode->Node ); jnode->Parent = NULL; a000e208: e3a03000 mov r3, #0 <== NOT EXECUTED a000e20c: e5843008 str r3, [r4, #8] <== NOT EXECUTED } --jnode->st_nlink; a000e210: e1d433b4 ldrh r3, [r4, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( jnode ); a000e214: e1a0000d mov r0, sp <== NOT EXECUTED a000e218: e3a01000 mov r1, #0 <== NOT EXECUTED if ( jnode->Parent != NULL ) { rtems_chain_extract( &jnode->Node ); jnode->Parent = NULL; } --jnode->st_nlink; a000e21c: e2433001 sub r3, r3, #1 <== NOT EXECUTED a000e220: e1c433b4 strh r3, [r4, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( jnode ); a000e224: ebffe087 bl a0006448 <== NOT EXECUTED a000e228: e59d3000 ldr r3, [sp] <== NOT EXECUTED a000e22c: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED } a000e230: e28dd008 add sp, sp, #8 <== NOT EXECUTED a000e234: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a0008894 : * NOTE: Assuming the "/" directory is bad. * Not checking that the starting directory is in an IMFS is bad. */ void IMFS_dump( void ) { a0008894: e92d4010 push {r4, lr} <== NOT EXECUTED fprintf(stdout, "*************** Dump of Entire IMFS ***************\n" ); a0008898: e59f405c ldr r4, [pc, #92] ; a00088fc <== NOT EXECUTED a000889c: e3a01001 mov r1, #1 <== NOT EXECUTED a00088a0: e3a02034 mov r2, #52 ; 0x34 <== NOT EXECUTED a00088a4: e5943000 ldr r3, [r4] <== NOT EXECUTED a00088a8: e59f0050 ldr r0, [pc, #80] ; a0008900 <== NOT EXECUTED a00088ac: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a00088b0: eb00379c bl a0016728 <== NOT EXECUTED fprintf(stdout, "/\n" ); a00088b4: e5943000 ldr r3, [r4] <== NOT EXECUTED a00088b8: e3a02002 mov r2, #2 <== NOT EXECUTED a00088bc: e3a01001 mov r1, #1 <== NOT EXECUTED a00088c0: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a00088c4: e59f0038 ldr r0, [pc, #56] ; a0008904 <== NOT EXECUTED a00088c8: eb003796 bl a0016728 <== NOT EXECUTED IMFS_dump_directory( rtems_filesystem_root.node_access, 0 ); a00088cc: e59f3034 ldr r3, [pc, #52] ; a0008908 <== NOT EXECUTED a00088d0: e3a01000 mov r1, #0 <== NOT EXECUTED a00088d4: e5933000 ldr r3, [r3] <== NOT EXECUTED a00088d8: e5930018 ldr r0, [r3, #24] <== NOT EXECUTED a00088dc: ebffffc9 bl a0008808 <== NOT EXECUTED fprintf(stdout, "*************** End of Dump ***************\n" ); a00088e0: e5943000 ldr r3, [r4] <== NOT EXECUTED a00088e4: e59f0020 ldr r0, [pc, #32] ; a000890c <== NOT EXECUTED a00088e8: e3a01001 mov r1, #1 <== NOT EXECUTED a00088ec: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a00088f0: e3a02037 mov r2, #55 ; 0x37 <== NOT EXECUTED } a00088f4: 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" ); a00088f8: ea00378a b a0016728 <== NOT EXECUTED =============================================================================== a0008808 : */ void IMFS_dump_directory( IMFS_jnode_t *the_directory, int level ) { a0008808: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED * */ int IMFS_memfile_maximum_size( void ) { return IMFS_MEMFILE_MAXIMUM_SIZE; } a000880c: e5907050 ldr r7, [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)); a0008810: e2808054 add r8, r0, #84 ; 0x54 <== NOT EXECUTED */ void IMFS_dump_directory( IMFS_jnode_t *the_directory, int level ) { a0008814: e1a05001 mov r5, r1 <== 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 ); a0008818: e1570008 cmp r7, r8 <== NOT EXECUTED a000881c: 0a000015 beq a0008878 <== NOT EXECUTED a0008820: e59f6064 ldr r6, [pc, #100] ; a000888c <== NOT EXECUTED for ( i=0 ; i<=level ; i++ ) fprintf(stdout, "...." ); IMFS_print_jnode( the_jnode ); if ( the_jnode->type == IMFS_DIRECTORY ) IMFS_dump_directory( the_jnode, level + 1 ); a0008824: e281a001 add sl, r1, #1 <== 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++ ) a0008828: e3550000 cmp r5, #0 <== NOT EXECUTED a000882c: ba000009 blt a0008858 <== NOT EXECUTED a0008830: e3a04000 mov r4, #0 <== NOT EXECUTED fprintf(stdout, "...." ); a0008834: e5963000 ldr r3, [r6] <== NOT EXECUTED a0008838: e3a01001 mov r1, #1 <== 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++ ) a000883c: e0844001 add r4, r4, r1 <== NOT EXECUTED fprintf(stdout, "...." ); a0008840: e59f0048 ldr r0, [pc, #72] ; a0008890 <== NOT EXECUTED a0008844: e3a02004 mov r2, #4 <== NOT EXECUTED a0008848: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a000884c: eb0037b5 bl a0016728 <== 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++ ) a0008850: e1550004 cmp r5, r4 <== NOT EXECUTED a0008854: aafffff6 bge a0008834 <== NOT EXECUTED fprintf(stdout, "...." ); IMFS_print_jnode( the_jnode ); a0008858: e1a00007 mov r0, r7 <== NOT EXECUTED a000885c: ebffffa0 bl a00086e4 <== NOT EXECUTED if ( the_jnode->type == IMFS_DIRECTORY ) a0008860: e597304c ldr r3, [r7, #76] ; 0x4c <== NOT EXECUTED a0008864: e3530001 cmp r3, #1 <== NOT EXECUTED a0008868: 0a000003 beq a000887c <== 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 ) { a000886c: e5977000 ldr r7, [r7] <== 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 ); a0008870: e1570008 cmp r7, r8 <== NOT EXECUTED a0008874: 1affffeb bne a0008828 <== NOT EXECUTED a0008878: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED for ( i=0 ; i<=level ; i++ ) fprintf(stdout, "...." ); IMFS_print_jnode( the_jnode ); if ( the_jnode->type == IMFS_DIRECTORY ) IMFS_dump_directory( the_jnode, level + 1 ); a000887c: e1a00007 mov r0, r7 <== NOT EXECUTED a0008880: e1a0100a mov r1, sl <== NOT EXECUTED a0008884: ebffffdf bl a0008808 <== NOT EXECUTED a0008888: eafffff7 b a000886c <== NOT EXECUTED =============================================================================== a000d95c : const char *pathname, /* IN */ size_t pathnamelen, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { a000d95c: 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 ) ) { a000d960: e3d25007 bics r5, r2, #7 const char *pathname, /* IN */ size_t pathnamelen, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { a000d964: e24dd040 sub sp, sp, #64 ; 0x40 a000d968: e58d2000 str r2, [sp] a000d96c: e1a0a000 mov sl, r0 a000d970: e1a04001 mov r4, r1 a000d974: e1a07003 mov r7, r3 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 ) ) { a000d978: 1a000081 bne a000db84 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; a000d97c: e5936000 ldr r6, [r3] a000d980: e28d8004 add r8, sp, #4 a000d984: e28d903c add r9, sp, #60 ; 0x3c * 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 ); a000d988: e1a02008 mov r2, r8 a000d98c: e1a03009 mov r3, r9 a000d990: e08a0005 add r0, sl, r5 a000d994: e1a01004 mov r1, r4 a000d998: eb0001df bl a000e11c pathnamelen -= len; i += len; if ( !pathloc->node_access ) a000d99c: e5973000 ldr r3, [r7] * 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 ); a000d9a0: e1a0b000 mov fp, r0 pathnamelen -= len; a000d9a4: e59d203c ldr r2, [sp, #60] ; 0x3c i += len; if ( !pathloc->node_access ) a000d9a8: e3530000 cmp r3, #0 a000d9ac: 0a00004e beq a000daec rtems_set_errno_and_return_minus_one( ENOENT ); /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) a000d9b0: e3500000 cmp r0, #0 */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { type = IMFS_get_token( &pathname[i], pathnamelen, token, &len ); pathnamelen -= len; a000d9b4: e0624004 rsb r4, r2, r4 i += len; a000d9b8: e0855002 add r5, r5, r2 rtems_set_errno_and_return_minus_one( ENOENT ); /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) a000d9bc: 1a00000f bne a000da00 * 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 ) { a000d9c0: e593204c ldr r2, [r3, #76] ; 0x4c a000d9c4: e3520001 cmp r2, #1 a000d9c8: 0a000068 beq a000db70 flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); a000d9cc: e1a00007 mov r0, r7 a000d9d0: ebffff99 bl a000d83c /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) a000d9d4: e59d1000 ldr r1, [sp] flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); a000d9d8: e1a06000 mov r6, r0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) a000d9dc: e1a00007 mov r0, r7 a000d9e0: ebffffba bl a000d8d0 a000d9e4: e3500000 cmp r0, #0 a000d9e8: 1a000036 bne a000dac8 rtems_set_errno_and_return_minus_one( EACCES ); a000d9ec: eb000dbb bl a00110e0 <__errno> <== NOT EXECUTED a000d9f0: e3a0300d mov r3, #13 <== NOT EXECUTED a000d9f4: e5803000 str r3, [r0] <== NOT EXECUTED a000d9f8: e3e06000 mvn r6, #0 <== NOT EXECUTED a000d9fc: ea000031 b a000dac8 <== NOT EXECUTED /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) a000da00: e596104c ldr r1, [r6, #76] ; 0x4c a000da04: e3510001 cmp r1, #1 a000da08: 0a000031 beq a000dad4 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { a000da0c: e35b0003 cmp fp, #3 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; a000da10: e1a06003 mov r6, r3 switch( type ) { a000da14: 0a000006 beq a000da34 a000da18: e35b0004 cmp fp, #4 a000da1c: 0a000025 beq a000dab8 a000da20: e35b0002 cmp fp, #2 a000da24: 0a000013 beq a000da78 /* * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { a000da28: e35b0004 cmp fp, #4 a000da2c: 1affffd5 bne a000d988 a000da30: eaffffe2 b a000d9c0 <== NOT EXECUTED case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { a000da34: e593304c ldr r3, [r3, #76] ; 0x4c a000da38: e3530003 cmp r3, #3 a000da3c: 0a00002f beq a000db00 * It would be a design error if we evaluated the link and * was broken. */ IMFS_assert( node ); } else if ( node->type == IMFS_SYM_LINK ) { a000da40: e3530004 cmp r3, #4 a000da44: 0a000058 beq a000dbac } /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) a000da48: e3530001 cmp r3, #1 a000da4c: 1a000051 bne a000db98 /* * 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 ) { a000da50: e596e05c ldr lr, [r6, #92] ; 0x5c a000da54: e35e0000 cmp lr, #0 a000da58: 1a000047 bne a000db7c } /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); a000da5c: e1a00006 mov r0, r6 a000da60: e1a01008 mov r1, r8 a000da64: eb00018b bl a000e098 if ( !node ) a000da68: e2506000 subs r6, r0, #0 a000da6c: 0a00001e beq a000daec /* * Set the node access to the point we have found. */ pathloc->node_access = node; a000da70: e5876000 str r6, [r7] a000da74: eaffffc3 b a000d988 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) a000da78: e59f1154 ldr r1, [pc, #340] ; a000dbd4 <== NOT EXECUTED a000da7c: e5912000 ldr r2, [r1] <== NOT EXECUTED a000da80: e5922018 ldr r2, [r2, #24] <== NOT EXECUTED a000da84: e1520003 cmp r2, r3 <== NOT EXECUTED a000da88: 0affffbe beq a000d988 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access) { a000da8c: e597e010 ldr lr, [r7, #16] <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == a000da90: e59e201c ldr r2, [lr, #28] <== NOT EXECUTED a000da94: e1520003 cmp r2, r3 <== NOT EXECUTED a000da98: 0a00001e beq a000db18 <== NOT EXECUTED pathnamelen+len, flags,pathloc); } } else { if ( !node->Parent ) a000da9c: e5936008 ldr r6, [r3, #8] <== NOT EXECUTED a000daa0: e3560000 cmp r6, #0 <== NOT EXECUTED a000daa4: 1afffff1 bne a000da70 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); a000daa8: eb000d8c bl a00110e0 <__errno> <== NOT EXECUTED a000daac: e3e06000 mvn r6, #0 <== NOT EXECUTED a000dab0: e580b000 str fp, [r0] <== NOT EXECUTED a000dab4: ea000003 b a000dac8 <== NOT EXECUTED case IMFS_NO_MORE_PATH: case IMFS_CURRENT_DIR: break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); a000dab8: eb000d88 bl a00110e0 <__errno> <== NOT EXECUTED a000dabc: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED a000dac0: e5803000 str r3, [r0] <== NOT EXECUTED a000dac4: e3e06000 mvn r6, #0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } a000dac8: e1a00006 mov r0, r6 a000dacc: e28dd040 add sp, sp, #64 ; 0x40 a000dad0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) a000dad4: e1a00007 mov r0, r7 a000dad8: ebffff7c bl a000d8d0 a000dadc: e3500000 cmp r0, #0 a000dae0: 0affffc1 beq a000d9ec a000dae4: e5973000 ldr r3, [r7] a000dae8: eaffffc7 b a000da0c /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); if ( !node ) rtems_set_errno_and_return_minus_one( ENOENT ); a000daec: eb000d7b bl a00110e0 <__errno> a000daf0: e3a03002 mov r3, #2 a000daf4: e5803000 str r3, [r0] a000daf8: e3e06000 mvn r6, #0 a000dafc: eafffff1 b a000dac8 case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { IMFS_evaluate_hard_link( pathloc, 0 ); a000db00: e1a00007 mov r0, r7 <== NOT EXECUTED a000db04: e3a01000 mov r1, #0 <== NOT EXECUTED a000db08: ebffff80 bl a000d910 <== NOT EXECUTED node = pathloc->node_access; a000db0c: e5976000 ldr r6, [r7] <== NOT EXECUTED a000db10: e596304c ldr r3, [r6, #76] ; 0x4c <== NOT EXECUTED a000db14: eaffffcb b a000da48 <== 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; a000db18: e28ee008 add lr, lr, #8 <== NOT EXECUTED * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000db1c: e28d6028 add r6, sp, #40 ; 0x28 <== NOT EXECUTED a000db20: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED a000db24: e8a6000f stmia r6!, {r0, r1, r2, r3} <== NOT EXECUTED *pathloc = newloc; a000db28: e28dc028 add ip, sp, #40 ; 0x28 <== NOT EXECUTED a000db2c: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000db30: e59ec000 ldr ip, [lr] <== NOT EXECUTED *pathloc = newloc; a000db34: e1a0e007 mov lr, r7 <== NOT EXECUTED a000db38: e8ae000f stmia lr!, {r0, r1, r2, r3} <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], a000db3c: 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; a000db40: e58ec000 str ip, [lr] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], a000db44: e597300c ldr r3, [r7, #12] <== NOT EXECUTED a000db48: e0610005 rsb r0, r1, r5 <== NOT EXECUTED * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000db4c: e586c000 str ip, [r6] <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], a000db50: e08a0000 add r0, sl, r0 <== NOT EXECUTED a000db54: e593c000 ldr ip, [r3] <== NOT EXECUTED a000db58: e0841001 add r1, r4, r1 <== NOT EXECUTED a000db5c: e59d2000 ldr r2, [sp] <== NOT EXECUTED a000db60: e1a03007 mov r3, r7 <== NOT EXECUTED a000db64: e12fff3c blx ip <== NOT EXECUTED a000db68: e1a06000 mov r6, r0 <== NOT EXECUTED a000db6c: eaffffd5 b a000dac8 <== NOT EXECUTED * * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { a000db70: e593e05c ldr lr, [r3, #92] ; 0x5c a000db74: e35e0000 cmp lr, #0 a000db78: 0affff93 beq a000d9cc newloc = node->info.directory.mt_fs->mt_fs_root; a000db7c: e28ee01c add lr, lr, #28 <== NOT EXECUTED a000db80: eaffffe5 b a000db1c <== NOT EXECUTED rtems_filesystem_location_info_t newloc; IMFS_jnode_t *node; int result; if ( !rtems_libio_is_valid_perms( flags ) ) { rtems_set_errno_and_return_minus_one( EIO ); a000db84: eb000d55 bl a00110e0 <__errno> <== NOT EXECUTED a000db88: e3a03005 mov r3, #5 <== NOT EXECUTED a000db8c: e5803000 str r3, [r0] <== NOT EXECUTED a000db90: e3e06000 mvn r6, #0 <== NOT EXECUTED a000db94: eaffffcb b a000dac8 <== NOT EXECUTED /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); a000db98: eb000d50 bl a00110e0 <__errno> <== NOT EXECUTED a000db9c: e3a03014 mov r3, #20 <== NOT EXECUTED a000dba0: e5803000 str r3, [r0] <== NOT EXECUTED a000dba4: e3e06000 mvn r6, #0 <== NOT EXECUTED a000dba8: eaffffc6 b a000dac8 <== NOT EXECUTED * was broken. */ IMFS_assert( node ); } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); a000dbac: e1a00007 mov r0, r7 <== NOT EXECUTED a000dbb0: e3a01000 mov r1, #0 <== NOT EXECUTED a000dbb4: eb000007 bl a000dbd8 <== NOT EXECUTED /* * In contrast to a hard link, it is possible to have a broken * symbolic link. */ node = pathloc->node_access; if ( result == -1 ) a000dbb8: 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 ); a000dbbc: e1a06000 mov r6, r0 <== NOT EXECUTED /* * In contrast to a hard link, it is possible to have a broken * symbolic link. */ node = pathloc->node_access; a000dbc0: e5973000 ldr r3, [r7] <== NOT EXECUTED if ( result == -1 ) a000dbc4: 0affffbf beq a000dac8 <== NOT EXECUTED /* * In contrast to a hard link, it is possible to have a broken * symbolic link. */ node = pathloc->node_access; a000dbc8: e1a06003 mov r6, r3 <== NOT EXECUTED a000dbcc: e593304c ldr r3, [r3, #76] ; 0x4c <== NOT EXECUTED a000dbd0: eaffff9c b a000da48 <== NOT EXECUTED =============================================================================== a000dd40 : int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { a000dd40: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} a000dd44: e24dd040 sub sp, sp, #64 ; 0x40 a000dd48: e1a06001 mov r6, r1 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; a000dd4c: e5915000 ldr r5, [r1] int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { a000dd50: e1a0a000 mov sl, r0 a000dd54: e58d2000 str r2, [sp] node = pathloc->node_access; /* * Get the path length. */ pathlen = strlen( path ); a000dd58: eb0010ca bl a0012088 const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { int i = 0; a000dd5c: e3a07000 mov r7, #0 node = pathloc->node_access; /* * Get the path length. */ pathlen = strlen( path ); a000dd60: e1a04000 mov r4, r0 a000dd64: e28d8004 add r8, sp, #4 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); a000dd68: e1a01004 mov r1, r4 a000dd6c: e28d303c add r3, sp, #60 ; 0x3c a000dd70: e08a0007 add r0, sl, r7 a000dd74: e1a02008 mov r2, r8 a000dd78: eb0000e7 bl a000e11c pathlen -= len; i += len; if ( !pathloc->node_access ) a000dd7c: e5963000 ldr r3, [r6] */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); pathlen -= len; a000dd80: e59db03c ldr fp, [sp, #60] ; 0x3c * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); a000dd84: e1a09000 mov r9, r0 pathlen -= len; i += len; if ( !pathloc->node_access ) a000dd88: e3530000 cmp r3, #0 */ while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); pathlen -= len; a000dd8c: e06b4004 rsb r4, fp, r4 i += len; if ( !pathloc->node_access ) a000dd90: 0a000035 beq a000de6c /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) a000dd94: e3500000 cmp r0, #0 a000dd98: 1a000006 bne a000ddb8 pathloc->node_access = node; break; case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); a000dd9c: eb000ccf bl a00110e0 <__errno> a000dda0: e3a03011 mov r3, #17 a000dda4: e5803000 str r3, [r0] a000dda8: e3e05000 mvn r5, #0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } a000ddac: e1a00005 mov r0, r5 a000ddb0: e28dd040 add sp, sp, #64 ; 0x40 a000ddb4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) a000ddb8: e595104c ldr r1, [r5, #76] ; 0x4c a000ddbc: e3510001 cmp r1, #1 a000ddc0: 0a000044 beq a000ded8 while( !done ) { type = IMFS_get_token( &path[i], pathlen, token, &len ); pathlen -= len; i += len; a000ddc4: 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; a000ddc8: e1a05003 mov r5, r3 switch( type ) { a000ddcc: e3590004 cmp r9, #4 a000ddd0: 979ff109 ldrls pc, [pc, r9, lsl #2] a000ddd4: eaffffe3 b a000dd68 <== NOT EXECUTED a000ddd8: a000dd9c .word 0xa000dd9c <== NOT EXECUTED a000dddc: a000dd68 .word 0xa000dd68 <== NOT EXECUTED a000dde0: a000de3c .word 0xa000de3c <== NOT EXECUTED a000dde4: a000ddec .word 0xa000ddec <== NOT EXECUTED a000dde8: a000de80 .word 0xa000de80 <== NOT EXECUTED pathloc->node_access = node; break; case IMFS_NAME: if ( node->type == IMFS_HARD_LINK ) { a000ddec: e593304c ldr r3, [r3, #76] ; 0x4c a000ddf0: e3530003 cmp r3, #3 a000ddf4: 0a00006a beq a000dfa4 result = IMFS_evaluate_link( pathloc, 0 ); if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { a000ddf8: e3530004 cmp r3, #4 a000ddfc: 0a000068 beq a000dfa4 if ( result == -1 ) return -1; } node = pathloc->node_access; if ( !node ) a000de00: e3550000 cmp r5, #0 a000de04: 0a00005f beq a000df88 /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) a000de08: e595304c ldr r3, [r5, #76] ; 0x4c a000de0c: e3530001 cmp r3, #1 a000de10: 1a00005c bne a000df88 /* * 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 ) { a000de14: e595c05c ldr ip, [r5, #92] ; 0x5c a000de18: e35c0000 cmp ip, #0 a000de1c: 1a00005e bne a000df9c /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); a000de20: e1a00005 mov r0, r5 a000de24: e1a01008 mov r1, r8 a000de28: eb00009a bl a000e098 /* * If there is no node we have found the name of the node we * wish to create. */ if ( ! node ) a000de2c: e2505000 subs r5, r0, #0 a000de30: 0a000017 beq a000de94 done = true; else pathloc->node_access = node; a000de34: e5865000 str r5, [r6] a000de38: eaffffca b a000dd68 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) a000de3c: e59f1180 ldr r1, [pc, #384] ; a000dfc4 <== NOT EXECUTED a000de40: e5912000 ldr r2, [r1] <== NOT EXECUTED a000de44: e5922018 ldr r2, [r2, #24] <== NOT EXECUTED a000de48: e1530002 cmp r3, r2 <== NOT EXECUTED a000de4c: 0affffc5 beq a000dd68 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){ a000de50: e596c010 ldr ip, [r6, #16] <== NOT EXECUTED a000de54: e59c201c ldr r2, [ip, #28] <== NOT EXECUTED a000de58: e1530002 cmp r3, r2 <== NOT EXECUTED a000de5c: 0a000023 beq a000def0 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); } } else { if ( !node->Parent ) a000de60: e5935008 ldr r5, [r3, #8] <== NOT EXECUTED a000de64: e3550000 cmp r5, #0 <== NOT EXECUTED a000de68: 1afffff1 bne a000de34 <== NOT EXECUTED * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { if ( !IMFS_is_separator( path[ i ] ) ) rtems_set_errno_and_return_minus_one( ENOENT ); a000de6c: eb000c9b bl a00110e0 <__errno> <== NOT EXECUTED a000de70: e3a03002 mov r3, #2 <== NOT EXECUTED a000de74: e5803000 str r3, [r0] <== NOT EXECUTED a000de78: e3e05000 mvn r5, #0 <== NOT EXECUTED a000de7c: eaffffca b a000ddac <== NOT EXECUTED case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); a000de80: eb000c96 bl a00110e0 <__errno> <== NOT EXECUTED a000de84: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED a000de88: e5803000 str r3, [r0] <== NOT EXECUTED a000de8c: e3e05000 mvn r5, #0 <== NOT EXECUTED a000de90: eaffffc5 b a000ddac <== NOT EXECUTED case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; a000de94: e59d303c ldr r3, [sp, #60] ; 0x3c a000de98: e59d1000 ldr r1, [sp] /* * 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++) { a000de9c: e08a4007 add r4, sl, r7 case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; a000dea0: e0633007 rsb r3, r3, r7 a000dea4: e08a3003 add r3, sl, r3 a000dea8: e5813000 str r3, [r1] /* * 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++) { a000deac: e7da0007 ldrb r0, [sl, r7] a000deb0: e3500000 cmp r0, #0 a000deb4: 1a000003 bne a000dec8 a000deb8: ea000021 b a000df44 a000debc: e5f40001 ldrb r0, [r4, #1]! <== NOT EXECUTED a000dec0: e3500000 cmp r0, #0 <== NOT EXECUTED a000dec4: 0a00001e beq a000df44 <== NOT EXECUTED if ( !IMFS_is_separator( path[ i ] ) ) a000dec8: ebffe4f7 bl a00072ac <== NOT EXECUTED a000decc: e3500000 cmp r0, #0 <== NOT EXECUTED a000ded0: 1afffff9 bne a000debc <== NOT EXECUTED a000ded4: eaffffe4 b a000de6c <== NOT EXECUTED * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) a000ded8: e1a00006 mov r0, r6 a000dedc: ebfffe7b bl a000d8d0 a000dee0: e3500000 cmp r0, #0 a000dee4: 0a000022 beq a000df74 a000dee8: e5963000 ldr r3, [r6] a000deec: eaffffb4 b a000ddc4 if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; a000def0: e28cc008 add ip, ip, #8 <== 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 ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000def4: e28d4028 add r4, sp, #40 ; 0x28 <== NOT EXECUTED a000def8: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000defc: e8a4000f stmia r4!, {r0, r1, r2, r3} <== NOT EXECUTED *pathloc = newloc; a000df00: e28de028 add lr, sp, #40 ; 0x28 <== NOT EXECUTED a000df04: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED a000df08: e1a0e006 mov lr, r6 <== 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 ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000df0c: e59cc000 ldr ip, [ip] <== NOT EXECUTED *pathloc = newloc; a000df10: e8ae000f stmia lr!, {r0, r1, r2, r3} <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); a000df14: e59d003c ldr r0, [sp, #60] ; 0x3c <== 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; a000df18: e58ec000 str ip, [lr] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); a000df1c: e596300c ldr r3, [r6, #12] <== NOT EXECUTED a000df20: e0600007 rsb r0, r0, r7 <== 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 ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000df24: e584c000 str ip, [r4] <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); a000df28: e5933004 ldr r3, [r3, #4] <== NOT EXECUTED a000df2c: e08a0000 add r0, sl, r0 <== NOT EXECUTED a000df30: e1a01006 mov r1, r6 <== NOT EXECUTED a000df34: e59d2000 ldr r2, [sp] <== NOT EXECUTED a000df38: e12fff33 blx r3 <== NOT EXECUTED a000df3c: e1a05000 mov r5, r0 <== NOT EXECUTED a000df40: eaffff99 b a000ddac <== NOT EXECUTED /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); a000df44: e1a00006 mov r0, r6 a000df48: ebfffe3b bl a000d83c /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) a000df4c: e5963000 ldr r3, [r6] /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); a000df50: e1a05000 mov r5, r0 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) a000df54: e593304c ldr r3, [r3, #76] ; 0x4c a000df58: e3530001 cmp r3, #1 a000df5c: 1a000009 bne a000df88 /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) a000df60: e1a00006 mov r0, r6 a000df64: e3a01003 mov r1, #3 a000df68: ebfffe58 bl a000d8d0 a000df6c: e3500000 cmp r0, #0 a000df70: 1affff8d bne a000ddac rtems_set_errno_and_return_minus_one( EACCES ); a000df74: eb000c59 bl a00110e0 <__errno> <== NOT EXECUTED a000df78: e3a0300d mov r3, #13 <== NOT EXECUTED a000df7c: e5803000 str r3, [r0] <== NOT EXECUTED a000df80: e3e05000 mvn r5, #0 <== NOT EXECUTED a000df84: eaffff88 b a000ddac <== NOT EXECUTED /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); a000df88: eb000c54 bl a00110e0 <__errno> <== NOT EXECUTED a000df8c: e3a03014 mov r3, #20 <== NOT EXECUTED a000df90: e5803000 str r3, [r0] <== NOT EXECUTED a000df94: e3e05000 mvn r5, #0 <== NOT EXECUTED a000df98: eaffff83 b a000ddac <== 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 ) { newloc = node->info.directory.mt_fs->mt_fs_root; a000df9c: e28cc01c add ip, ip, #28 <== NOT EXECUTED a000dfa0: eaffffd3 b a000def4 <== NOT EXECUTED if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_link( pathloc, 0 ); a000dfa4: e1a00006 mov r0, r6 <== NOT EXECUTED a000dfa8: e3a01000 mov r1, #0 <== NOT EXECUTED a000dfac: ebffff2e bl a000dc6c <== NOT EXECUTED if ( result == -1 ) a000dfb0: e3700001 cmn r0, #1 <== NOT EXECUTED if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_link( pathloc, 0 ); a000dfb4: e1a05000 mov r5, r0 <== NOT EXECUTED if ( result == -1 ) a000dfb8: 0affff7b beq a000ddac <== NOT EXECUTED a000dfbc: e5965000 ldr r5, [r6] <== NOT EXECUTED a000dfc0: eaffff8e b a000de00 <== NOT EXECUTED =============================================================================== a000d910 : int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000d910: 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; a000d914: e5903000 ldr r3, [r0] <== NOT EXECUTED int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000d918: e1a04000 mov r4, r0 <== NOT EXECUTED a000d91c: 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; a000d920: e5933050 ldr r3, [r3, #80] ; 0x50 <== NOT EXECUTED a000d924: e5803000 str r3, [r0] <== NOT EXECUTED IMFS_Set_handlers( node ); a000d928: ebffffc3 bl a000d83c <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) a000d92c: e1a00004 mov r0, r4 <== NOT EXECUTED a000d930: e1a01005 mov r1, r5 <== NOT EXECUTED a000d934: ebffffe5 bl a000d8d0 <== NOT EXECUTED a000d938: e3500000 cmp r0, #0 <== NOT EXECUTED a000d93c: 0a000001 beq a000d948 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); return result; a000d940: e3a00000 mov r0, #0 <== NOT EXECUTED } a000d944: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); a000d948: eb000de4 bl a00110e0 <__errno> <== NOT EXECUTED a000d94c: e3a0300d mov r3, #13 <== NOT EXECUTED a000d950: e5803000 str r3, [r0] <== NOT EXECUTED a000d954: e3e00000 mvn r0, #0 <== NOT EXECUTED a000d958: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a000dc6c : */ int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000dc6c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED */ rtems_filesystem_link_counts ++; if ( rtems_filesystem_link_counts > MAXSYMLINK ) { rtems_filesystem_link_counts = 0; rtems_set_errno_and_return_minus_one( ELOOP ); a000dc70: e59f60c4 ldr r6, [pc, #196] ; a000dd3c <== NOT EXECUTED */ int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000dc74: e1a05000 mov r5, r0 <== NOT EXECUTED a000dc78: e1a07001 mov r7, r1 <== NOT EXECUTED */ rtems_filesystem_link_counts ++; if ( rtems_filesystem_link_counts > MAXSYMLINK ) { rtems_filesystem_link_counts = 0; rtems_set_errno_and_return_minus_one( ELOOP ); a000dc7c: e5962000 ldr r2, [r6] <== NOT EXECUTED a000dc80: ea000004 b a000dc98 <== NOT EXECUTED */ if ( jnode->type == IMFS_HARD_LINK ) result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) a000dc84: e3530004 cmp r3, #4 <== NOT EXECUTED a000dc88: 0a00001b beq a000dcfc <== NOT EXECUTED result = IMFS_evaluate_sym_link( node, flags ); } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || a000dc8c: e2433003 sub r3, r3, #3 <== NOT EXECUTED a000dc90: e3530001 cmp r3, #1 <== NOT EXECUTED a000dc94: 8a000014 bhi a000dcec <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000dc98: e1d233b0 ldrh r3, [r2, #48] ; 0x30 <== NOT EXECUTED { IMFS_jnode_t *jnode; int result = 0; do { jnode = node->node_access; a000dc9c: e5954000 ldr r4, [r5] <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000dca0: e2833001 add r3, r3, #1 <== NOT EXECUTED a000dca4: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED a000dca8: e1a03823 lsr r3, r3, #16 <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { a000dcac: e3530005 cmp r3, #5 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; a000dcb0: e1c233b0 strh r3, [r2, #48] ; 0x30 <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { a000dcb4: 8a000019 bhi a000dd20 <== NOT EXECUTED /* * Follow the Link node. */ if ( jnode->type == IMFS_HARD_LINK ) a000dcb8: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000dcbc: e3530003 cmp r3, #3 <== NOT EXECUTED a000dcc0: 1affffef bne a000dc84 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); a000dcc4: e1a00005 mov r0, r5 <== NOT EXECUTED a000dcc8: e1a01007 mov r1, r7 <== NOT EXECUTED a000dccc: ebffff0f bl a000d910 <== NOT EXECUTED else if (jnode->type == IMFS_SYM_LINK ) result = IMFS_evaluate_sym_link( node, flags ); } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); a000dcd0: e3500000 cmp r0, #0 <== NOT EXECUTED a000dcd4: 1a00000d bne a000dd10 <== NOT EXECUTED a000dcd8: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000dcdc: e5962000 ldr r2, [r6] <== 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 ) || a000dce0: e2433003 sub r3, r3, #3 <== NOT EXECUTED a000dce4: e3530001 cmp r3, #1 <== NOT EXECUTED a000dce8: 9affffea bls a000dc98 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; a000dcec: e3a03000 mov r3, #0 <== 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 ) || a000dcf0: e3a00000 mov r0, #0 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; a000dcf4: e1c233b0 strh r3, [r2, #48] ; 0x30 <== NOT EXECUTED return result; } a000dcf8: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED if ( jnode->type == IMFS_HARD_LINK ) result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) result = IMFS_evaluate_sym_link( node, flags ); a000dcfc: e1a00005 mov r0, r5 <== NOT EXECUTED a000dd00: e1a01007 mov r1, r7 <== NOT EXECUTED a000dd04: ebffffb3 bl a000dbd8 <== NOT EXECUTED } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); a000dd08: e3500000 cmp r0, #0 <== NOT EXECUTED a000dd0c: 0afffff1 beq a000dcd8 <== NOT EXECUTED a000dd10: e5962000 ldr r2, [r6] <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; a000dd14: e3a03000 mov r3, #0 <== NOT EXECUTED a000dd18: e1c233b0 strh r3, [r2, #48] ; 0x30 <== NOT EXECUTED return result; } a000dd1c: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED * Increment and check the link counter. */ rtems_filesystem_link_counts ++; if ( rtems_filesystem_link_counts > MAXSYMLINK ) { rtems_filesystem_link_counts = 0; a000dd20: e3a03000 mov r3, #0 <== NOT EXECUTED a000dd24: e1c233b0 strh r3, [r2, #48] ; 0x30 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ELOOP ); a000dd28: eb000cec bl a00110e0 <__errno> <== NOT EXECUTED a000dd2c: e3a0305c mov r3, #92 ; 0x5c <== NOT EXECUTED a000dd30: e5803000 str r3, [r0] <== NOT EXECUTED a000dd34: e3e00000 mvn r0, #0 <== NOT EXECUTED a000dd38: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED =============================================================================== a000d8d0 : uid_t st_uid; gid_t st_gid; IMFS_jnode_t *jnode; int flags_to_test; if ( !rtems_libio_is_valid_perms( flags ) ) a000d8d0: e3d13007 bics r3, r1, #7 */ int IMFS_evaluate_permission( rtems_filesystem_location_info_t *node, int flags ) { a000d8d4: 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 ) ) a000d8d8: 1a000007 bne a000d8fc /* * If all of the flags are set we have permission * to do this. */ if ( ( flags_to_test & jnode->st_mode) == flags_to_test ) a000d8dc: e5903000 ldr r3, [r0] */ flags_to_test = flags; if ( st_uid == jnode->st_uid ) flags_to_test <<= 6; a000d8e0: 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 ) a000d8e4: e5930030 ldr r0, [r3, #48] ; 0x30 a000d8e8: 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 ); a000d8ec: e1510000 cmp r1, r0 a000d8f0: 13a00000 movne r0, #0 a000d8f4: 03a00001 moveq r0, #1 */ if ( ( flags_to_test & jnode->st_mode) == flags_to_test ) return 1; return 0; } a000d8f8: e49df004 pop {pc} ; (ldr pc, [sp], #4) 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 ); a000d8fc: eb000df7 bl a00110e0 <__errno> <== NOT EXECUTED a000d900: e3a03001 mov r3, #1 <== NOT EXECUTED a000d904: e5803000 str r3, [r0] <== NOT EXECUTED a000d908: e3e00000 mvn r0, #0 <== NOT EXECUTED a000d90c: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a000dbd8 : int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000dbd8: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; a000dbdc: e5906000 ldr r6, [r0] <== NOT EXECUTED int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000dbe0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED a000dbe4: e1a04000 mov r4, r0 <== 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; a000dbe8: e5963008 ldr r3, [r6, #8] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( a000dbec: e1a02000 mov r2, r0 <== NOT EXECUTED int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { a000dbf0: 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; a000dbf4: e5803000 str r3, [r0] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( a000dbf8: e1a0100d mov r1, sp <== NOT EXECUTED a000dbfc: e5960050 ldr r0, [r6, #80] ; 0x50 <== NOT EXECUTED a000dc00: eb0003ac bl a000eab8 <== NOT EXECUTED ); /* * Use eval path to evaluate the path of the symbolic link. */ result = IMFS_eval_path( a000dc04: e59d3000 ldr r3, [sp] <== NOT EXECUTED a000dc08: e5966050 ldr r6, [r6, #80] ; 0x50 <== NOT EXECUTED a000dc0c: e0866003 add r6, r6, r3 <== NOT EXECUTED a000dc10: e1a00006 mov r0, r6 <== NOT EXECUTED a000dc14: eb00111b bl a0012088 <== NOT EXECUTED a000dc18: e1a02005 mov r2, r5 <== NOT EXECUTED a000dc1c: e1a01000 mov r1, r0 <== NOT EXECUTED a000dc20: e1a03004 mov r3, r4 <== NOT EXECUTED a000dc24: e1a00006 mov r0, r6 <== NOT EXECUTED a000dc28: ebffff4b bl a000d95c <== NOT EXECUTED a000dc2c: e1a06000 mov r6, r0 <== NOT EXECUTED strlen( &jnode->info.sym_link.name[i] ), flags, node ); IMFS_Set_handlers( node ); a000dc30: e1a00004 mov r0, r4 <== NOT EXECUTED a000dc34: ebffff00 bl a000d83c <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) a000dc38: e1a00004 mov r0, r4 <== NOT EXECUTED a000dc3c: e1a01005 mov r1, r5 <== NOT EXECUTED a000dc40: ebffff22 bl a000d8d0 <== NOT EXECUTED a000dc44: e3500000 cmp r0, #0 <== NOT EXECUTED a000dc48: 0a000002 beq a000dc58 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); return result; } a000dc4c: e1a00006 mov r0, r6 <== NOT EXECUTED a000dc50: e28dd004 add sp, sp, #4 <== NOT EXECUTED a000dc54: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); a000dc58: eb000d20 bl a00110e0 <__errno> <== NOT EXECUTED a000dc5c: e3a0300d mov r3, #13 <== NOT EXECUTED a000dc60: e5803000 str r3, [r0] <== NOT EXECUTED a000dc64: e3e06000 mvn r6, #0 <== NOT EXECUTED a000dc68: eafffff7 b a000dc4c <== NOT EXECUTED =============================================================================== a0010b24 : int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { a0010b24: e92d4010 push {r4, lr} <== NOT EXECUTED IMFS_jnode_t *jnode; #if defined(RTEMS_POSIX_API) uid_t st_uid; #endif jnode = loc->node_access; a0010b28: 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); a0010b2c: e1a02a01 lsl r2, r1, #20 <== NOT EXECUTED int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { a0010b30: e24dd008 sub sp, sp, #8 <== 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); a0010b34: e5943030 ldr r3, [r4, #48] ; 0x30 <== NOT EXECUTED jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); IMFS_update_ctime( jnode ); a0010b38: e1a0000d mov r0, sp <== NOT EXECUTED a0010b3c: e3a01000 mov r1, #0 <== 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); a0010b40: e3c33eff bic r3, r3, #4080 ; 0xff0 <== NOT EXECUTED a0010b44: e3c3300f bic r3, r3, #15 <== NOT EXECUTED jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX); a0010b48: e1833a22 orr r3, r3, r2, lsr #20 <== NOT EXECUTED a0010b4c: e5843030 str r3, [r4, #48] ; 0x30 <== NOT EXECUTED IMFS_update_ctime( jnode ); a0010b50: ebffd63c bl a0006448 <== NOT EXECUTED a0010b54: e59d3000 ldr r3, [sp] <== NOT EXECUTED return 0; } a0010b58: 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 ); a0010b5c: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return 0; } a0010b60: e28dd008 add sp, sp, #8 <== NOT EXECUTED a0010b64: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a0010b68 : int IMFS_fdatasync( rtems_libio_t *iop ) { return 0; } a0010b68: e3a00000 mov r0, #0 <== NOT EXECUTED a0010b6c: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a0007038 : } int IMFS_fifo_close( rtems_libio_t *iop ) { a0007038: e92d4030 push {r4, r5, lr} <== NOT EXECUTED int err = 0; IMFS_jnode_t *jnode = iop->pathinfo.node_access; a000703c: e5905018 ldr r5, [r0, #24] <== NOT EXECUTED } int IMFS_fifo_close( rtems_libio_t *iop ) { a0007040: e1a04000 mov r4, r0 <== NOT EXECUTED int err = 0; IMFS_jnode_t *jnode = iop->pathinfo.node_access; pipe_release(&JNODE2PIPE(jnode), iop); a0007044: e1a01000 mov r1, r0 <== NOT EXECUTED a0007048: e2850050 add r0, r5, #80 ; 0x50 <== NOT EXECUTED a000704c: eb00252b bl a0010500 <== NOT EXECUTED iop->flags &= ~LIBIO_FLAGS_OPEN; a0007050: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED IMFS_check_node_remove(jnode); a0007054: 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; a0007058: e3c33c01 bic r3, r3, #256 ; 0x100 <== NOT EXECUTED a000705c: e5843014 str r3, [r4, #20] <== NOT EXECUTED IMFS_check_node_remove(jnode); a0007060: eb00018c bl a0007698 <== NOT EXECUTED IMFS_FIFO_RETURN(err); } a0007064: e3a00000 mov r0, #0 <== NOT EXECUTED a0007068: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a0006efc : int IMFS_fifo_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { a0006efc: e1a03000 mov r3, r0 <== NOT EXECUTED int err; if (command == FIONBIO) { a0006f00: e59f0070 ldr r0, [pc, #112] ; a0006f78 <== NOT EXECUTED int IMFS_fifo_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { a0006f04: e92d4010 push {r4, lr} <== NOT EXECUTED int err; if (command == FIONBIO) { a0006f08: e1510000 cmp r1, r0 <== NOT EXECUTED a0006f0c: 0a000007 beq a0006f30 <== NOT EXECUTED iop->flags &= ~LIBIO_FLAGS_NO_DELAY; return 0; } } else err = pipe_ioctl(LIBIO2PIPE(iop), command, buffer, iop); a0006f10: e5930018 ldr r0, [r3, #24] <== NOT EXECUTED a0006f14: e5900050 ldr r0, [r0, #80] ; 0x50 <== NOT EXECUTED a0006f18: eb0027ac bl a0010dd0 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006f1c: e2502000 subs r2, r0, #0 <== NOT EXECUTED a0006f20: b2624000 rsblt r4, r2, #0 <== NOT EXECUTED a0006f24: ba00000f blt a0006f68 <== NOT EXECUTED } a0006f28: e1a00002 mov r0, r2 <== NOT EXECUTED a0006f2c: e8bd8010 pop {r4, pc} <== NOT EXECUTED ) { int err; if (command == FIONBIO) { if (buffer == NULL) a0006f30: e3520000 cmp r2, #0 <== NOT EXECUTED a0006f34: 0a00000a beq a0006f64 <== NOT EXECUTED err = -EFAULT; else { if (*(int *)buffer) a0006f38: e5922000 ldr r2, [r2] <== NOT EXECUTED a0006f3c: e3520000 cmp r2, #0 <== NOT EXECUTED iop->flags |= LIBIO_FLAGS_NO_DELAY; a0006f40: 15931014 ldrne r1, [r3, #20] <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_NO_DELAY; a0006f44: 05931014 ldreq r1, [r3, #20] <== NOT EXECUTED return 0; a0006f48: 13a02000 movne r2, #0 <== NOT EXECUTED if (command == FIONBIO) { if (buffer == NULL) err = -EFAULT; else { if (*(int *)buffer) iop->flags |= LIBIO_FLAGS_NO_DELAY; a0006f4c: 13811001 orrne r1, r1, #1 <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_NO_DELAY; a0006f50: 03c11001 biceq r1, r1, #1 <== NOT EXECUTED if (command == FIONBIO) { if (buffer == NULL) err = -EFAULT; else { if (*(int *)buffer) iop->flags |= LIBIO_FLAGS_NO_DELAY; a0006f54: 15831014 strne r1, [r3, #20] <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_NO_DELAY; a0006f58: 05831014 streq r1, [r3, #20] <== NOT EXECUTED } else err = pipe_ioctl(LIBIO2PIPE(iop), command, buffer, iop); IMFS_FIFO_RETURN(err); } a0006f5c: e1a00002 mov r0, r2 <== NOT EXECUTED a0006f60: e8bd8010 pop {r4, pc} <== NOT EXECUTED ) { int err; if (command == FIONBIO) { if (buffer == NULL) a0006f64: e3a0400e mov r4, #14 <== NOT EXECUTED } } else err = pipe_ioctl(LIBIO2PIPE(iop), command, buffer, iop); IMFS_FIFO_RETURN(err); a0006f68: eb003007 bl a0012f8c <__errno> <== NOT EXECUTED a0006f6c: e3e02000 mvn r2, #0 <== NOT EXECUTED a0006f70: e5804000 str r4, [r0] <== NOT EXECUTED a0006f74: eaffffeb b a0006f28 <== NOT EXECUTED =============================================================================== a0006e9c : rtems_off64_t IMFS_fifo_lseek( rtems_libio_t *iop, rtems_off64_t offset, int whence ) { a0006e9c: e92d4010 push {r4, lr} <== NOT EXECUTED off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop); a0006ea0: e590c018 ldr ip, [r0, #24] <== NOT EXECUTED rtems_off64_t IMFS_fifo_lseek( rtems_libio_t *iop, rtems_off64_t offset, int whence ) { a0006ea4: e24dd004 sub sp, sp, #4 <== NOT EXECUTED off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop); a0006ea8: e59cc050 ldr ip, [ip, #80] ; 0x50 <== NOT EXECUTED a0006eac: e58d0000 str r0, [sp] <== NOT EXECUTED a0006eb0: e1a0000c mov r0, ip <== NOT EXECUTED a0006eb4: eb0027e0 bl a0010e3c <== NOT EXECUTED a0006eb8: e1a02000 mov r2, r0 <== NOT EXECUTED a0006ebc: e1a03fc2 asr r3, r2, #31 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006ec0: 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); a0006ec4: e1a04000 mov r4, r0 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0006ec8: a1a04003 movge r4, r3 <== NOT EXECUTED a0006ecc: a1a03002 movge r3, r2 <== NOT EXECUTED a0006ed0: ba000003 blt a0006ee4 <== NOT EXECUTED } a0006ed4: e1a00003 mov r0, r3 <== NOT EXECUTED a0006ed8: e1a01004 mov r1, r4 <== NOT EXECUTED a0006edc: e28dd004 add sp, sp, #4 <== NOT EXECUTED a0006ee0: e8bd8010 pop {r4, pc} <== NOT EXECUTED rtems_off64_t offset, int whence ) { off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop); IMFS_FIFO_RETURN(err); a0006ee4: eb003028 bl a0012f8c <__errno> <== NOT EXECUTED a0006ee8: e2644000 rsb r4, r4, #0 <== NOT EXECUTED a0006eec: e5804000 str r4, [r0] <== NOT EXECUTED a0006ef0: e3e03000 mvn r3, #0 <== NOT EXECUTED a0006ef4: e3e04000 mvn r4, #0 <== NOT EXECUTED a0006ef8: eafffff5 b a0006ed4 <== NOT EXECUTED =============================================================================== a000706c : uint32_t mode ) { IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = fifo_open(&JNODE2PIPE(jnode), iop); a000706c: e5903018 ldr r3, [r0, #24] <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { a0007070: e92d4010 push {r4, lr} <== NOT EXECUTED a0007074: e1a01000 mov r1, r0 <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = fifo_open(&JNODE2PIPE(jnode), iop); a0007078: e2830050 add r0, r3, #80 ; 0x50 <== NOT EXECUTED a000707c: eb002555 bl a00105d8 <== NOT EXECUTED IMFS_FIFO_RETURN(err); a0007080: e2504000 subs r4, r0, #0 <== NOT EXECUTED a0007084: ba000001 blt a0007090 <== NOT EXECUTED } a0007088: e1a00004 mov r0, r4 <== NOT EXECUTED a000708c: e8bd8010 pop {r4, pc} <== NOT EXECUTED ) { IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = fifo_open(&JNODE2PIPE(jnode), iop); IMFS_FIFO_RETURN(err); a0007090: eb002fbd bl a0012f8c <__errno> <== NOT EXECUTED a0007094: e2644000 rsb r4, r4, #0 <== NOT EXECUTED a0007098: e5804000 str r4, [r0] <== NOT EXECUTED a000709c: e3e04000 mvn r4, #0 <== NOT EXECUTED a00070a0: eafffff8 b a0007088 <== NOT EXECUTED =============================================================================== a0006fdc : ssize_t IMFS_fifo_read( rtems_libio_t *iop, void *buffer, size_t count ) { a0006fdc: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; a0006fe0: e5904018 ldr r4, [r0, #24] <== NOT EXECUTED ssize_t IMFS_fifo_read( rtems_libio_t *iop, void *buffer, size_t count ) { a0006fe4: e1a03000 mov r3, r0 <== NOT EXECUTED a0006fe8: e24dd008 sub sp, sp, #8 <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = pipe_read(JNODE2PIPE(jnode), buffer, count, iop); a0006fec: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED a0006ff0: eb002689 bl a0010a1c <== NOT EXECUTED if (err > 0) a0006ff4: e2505000 subs r5, r0, #0 <== NOT EXECUTED a0006ff8: da000007 ble a000701c <== NOT EXECUTED IMFS_update_atime(jnode); a0006ffc: e1a0000d mov r0, sp <== NOT EXECUTED a0007000: e3a01000 mov r1, #0 <== NOT EXECUTED a0007004: eb00040a bl a0008034 <== NOT EXECUTED a0007008: e59d3000 ldr r3, [sp] <== NOT EXECUTED a000700c: e1a00005 mov r0, r5 <== NOT EXECUTED a0007010: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED IMFS_FIFO_RETURN(err); } a0007014: e28dd008 add sp, sp, #8 <== NOT EXECUTED a0007018: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED int err = pipe_read(JNODE2PIPE(jnode), buffer, count, iop); if (err > 0) IMFS_update_atime(jnode); IMFS_FIFO_RETURN(err); a000701c: 01a00005 moveq r0, r5 <== NOT EXECUTED a0007020: 0afffffb beq a0007014 <== NOT EXECUTED a0007024: eb002fd8 bl a0012f8c <__errno> <== NOT EXECUTED a0007028: e2655000 rsb r5, r5, #0 <== NOT EXECUTED a000702c: e5805000 str r5, [r0] <== NOT EXECUTED a0007030: e3e00000 mvn r0, #0 <== NOT EXECUTED a0007034: eafffff6 b a0007014 <== NOT EXECUTED =============================================================================== a0006f7c : ssize_t IMFS_fifo_write( rtems_libio_t *iop, const void *buffer, size_t count ) { a0006f7c: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; a0006f80: e5904018 ldr r4, [r0, #24] <== NOT EXECUTED ssize_t IMFS_fifo_write( rtems_libio_t *iop, const void *buffer, size_t count ) { a0006f84: e1a03000 mov r3, r0 <== NOT EXECUTED a0006f88: e24dd008 sub sp, sp, #8 <== NOT EXECUTED IMFS_jnode_t *jnode = iop->pathinfo.node_access; int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop); a0006f8c: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED a0006f90: eb00270d bl a0010bcc <== NOT EXECUTED if (err > 0) { a0006f94: e2505000 subs r5, r0, #0 <== NOT EXECUTED a0006f98: da000008 ble a0006fc0 <== NOT EXECUTED IMFS_mtime_ctime_update(jnode); a0006f9c: e1a0000d mov r0, sp <== NOT EXECUTED a0006fa0: e3a01000 mov r1, #0 <== NOT EXECUTED a0006fa4: eb000422 bl a0008034 <== NOT EXECUTED a0006fa8: e59d3000 ldr r3, [sp] <== NOT EXECUTED a0006fac: e1a00005 mov r0, r5 <== NOT EXECUTED a0006fb0: e5843044 str r3, [r4, #68] ; 0x44 <== NOT EXECUTED a0006fb4: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED } IMFS_FIFO_RETURN(err); } a0006fb8: e28dd008 add sp, sp, #8 <== NOT EXECUTED a0006fbc: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop); if (err > 0) { IMFS_mtime_ctime_update(jnode); } IMFS_FIFO_RETURN(err); a0006fc0: 01a00005 moveq r0, r5 <== NOT EXECUTED a0006fc4: 0afffffb beq a0006fb8 <== NOT EXECUTED a0006fc8: eb002fef bl a0012f8c <__errno> <== NOT EXECUTED a0006fcc: e2655000 rsb r5, r5, #0 <== NOT EXECUTED a0006fd0: e5805000 str r5, [r0] <== NOT EXECUTED a0006fd4: e3e00000 mvn r0, #0 <== NOT EXECUTED a0006fd8: eafffff6 b a0006fb8 <== NOT EXECUTED =============================================================================== a000e098 : IMFS_jnode_t *IMFS_find_match_in_dir( IMFS_jnode_t *directory, char *name ) { a000e098: e92d4070 push {r4, r5, r6, lr} a000e09c: e1a05001 mov r5, r1 a000e0a0: e1a04000 mov r4, r0 /* * Check for "." and ".." */ if ( !strcmp( name, dotname ) ) a000e0a4: e59f1068 ldr r1, [pc, #104] ; a000e114 a000e0a8: e1a00005 mov r0, r5 a000e0ac: eb000f19 bl a0011d18 a000e0b0: e3500000 cmp r0, #0 a000e0b4: 0a000005 beq a000e0d0 return directory; if ( !strcmp( name, dotdotname ) ) a000e0b8: e1a00005 mov r0, r5 a000e0bc: e59f1054 ldr r1, [pc, #84] ; a000e118 a000e0c0: eb000f14 bl a0011d18 a000e0c4: e3500000 cmp r0, #0 return directory->Parent; a000e0c8: 05944008 ldreq r4, [r4, #8] */ if ( !strcmp( name, dotname ) ) return directory; if ( !strcmp( name, dotdotname ) ) a000e0cc: 1a000001 bne a000e0d8 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } a000e0d0: e1a00004 mov r0, r4 a000e0d4: e8bd8070 pop {r4, r5, r6, pc} a000e0d8: e5943050 ldr r3, [r4, #80] ; 0x50 RTEMS_INLINE_ROUTINE bool _Chain_Is_tail( Chain_Control *the_chain, const Chain_Node *the_node ) { return (the_node == _Chain_Tail(the_chain)); a000e0dc: e2846054 add r6, r4, #84 ; 0x54 if ( !strcmp( name, dotdotname ) ) return directory->Parent; the_chain = &directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); a000e0e0: e1530006 cmp r3, r6 a000e0e4: 0a000008 beq a000e10c a000e0e8: e1a04003 mov r4, r3 !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 ) ) a000e0ec: e284100c add r1, r4, #12 a000e0f0: e1a00005 mov r0, r5 a000e0f4: eb000f07 bl a0011d18 a000e0f8: e3500000 cmp r0, #0 a000e0fc: 0afffff3 beq a000e0d0 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 ) { a000e100: e5944000 ldr r4, [r4] <== NOT EXECUTED if ( !strcmp( name, dotdotname ) ) return directory->Parent; the_chain = &directory->info.directory.Entries; for ( the_node = rtems_chain_first( the_chain ); a000e104: e1540006 cmp r4, r6 <== NOT EXECUTED a000e108: 1afffff7 bne a000e0ec <== NOT EXECUTED if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; a000e10c: e3a04000 mov r4, #0 a000e110: eaffffee b a000e0d0 =============================================================================== a000dfc8 : ((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { a000dfc8: 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; a000dfcc: e1a0c000 mov ip, r0 <== NOT EXECUTED a000dfd0: 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 ) { a000dfd4: 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; a000dfd8: e1a0600d mov r6, 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 ) { a000dfdc: e1a0e000 mov lr, 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; a000dfe0: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED a000dfe4: e8a6000f stmia r6!, {r0, r1, r2, r3} <== NOT EXECUTED a000dfe8: e59c2000 ldr r2, [ip] <== NOT EXECUTED /* * Set this to null to indicate that it is being unmounted. */ temp_mt_entry->mt_fs_root.node_access = NULL; a000dfec: e3a01000 mov r1, #0 <== 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; a000dff0: e1a0500d mov r5, sp <== NOT EXECUTED /* * Set this to null to indicate that it is being unmounted. */ temp_mt_entry->mt_fs_root.node_access = NULL; a000dff4: e58e101c str r1, [lr, #28] <== 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; a000dff8: e5862000 str r2, [r6] <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); a000dffc: e1a0000d mov r0, sp <== NOT EXECUTED */ temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; a000e000: e5946008 ldr r6, [r4, #8] <== NOT EXECUTED loc.node_access = (void *)jnode; a000e004: e58d4000 str r4, [sp] <== NOT EXECUTED IMFS_Set_handlers( &loc ); a000e008: ebfffe0b bl a000d83c <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { a000e00c: e594304c ldr r3, [r4, #76] ; 0x4c <== 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 ); a000e010: e2842054 add r2, r4, #84 ; 0x54 <== NOT EXECUTED a000e014: e3530001 cmp r3, #1 <== NOT EXECUTED a000e018: 1a000010 bne a000e060 <== NOT EXECUTED result = IMFS_unlink( NULL, &loc ); if (result != 0) return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { a000e01c: e5943050 ldr r3, [r4, #80] ; 0x50 <== NOT EXECUTED a000e020: e1530002 cmp r3, r2 <== NOT EXECUTED a000e024: 0a000014 beq a000e07c <== NOT EXECUTED result = IMFS_unlink( NULL, &loc ); if (result != 0) return -1; jnode = next; } if ( jnode != NULL ) { a000e028: e3540000 cmp r4, #0 <== NOT EXECUTED a000e02c: 0a000008 beq a000e054 <== NOT EXECUTED if ( jnode->type == IMFS_DIRECTORY ) { a000e030: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED a000e034: e3530001 cmp r3, #1 <== NOT EXECUTED a000e038: 1affffef bne a000dffc <== NOT EXECUTED } } } while (jnode != NULL); return 0; } a000e03c: e5943050 ldr r3, [r4, #80] ; 0x50 <== NOT EXECUTED a000e040: 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 ) ) a000e044: e1530002 cmp r3, r2 <== NOT EXECUTED a000e048: 0affffeb beq a000dffc <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); a000e04c: e2534000 subs r4, r3, #0 <== NOT EXECUTED a000e050: 1affffe9 bne a000dffc <== NOT EXECUTED return 0; a000e054: e1a00004 mov r0, r4 <== NOT EXECUTED } a000e058: e28dd014 add sp, sp, #20 <== NOT EXECUTED a000e05c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED next = jnode->Parent; loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); if ( jnode->type != IMFS_DIRECTORY ) { result = IMFS_unlink( NULL, &loc ); a000e060: e1a0100d mov r1, sp <== NOT EXECUTED a000e064: e3a00000 mov r0, #0 <== NOT EXECUTED a000e068: ebffdf84 bl a0005e80 <== NOT EXECUTED if (result != 0) a000e06c: e3500000 cmp r0, #0 <== NOT EXECUTED a000e070: 1a000006 bne a000e090 <== NOT EXECUTED jnode = next; } else if ( jnode_has_no_children( jnode ) ) { result = IMFS_unlink( NULL, &loc ); if (result != 0) return -1; jnode = next; a000e074: e1a04006 mov r4, r6 <== NOT EXECUTED a000e078: eaffffea b a000e028 <== NOT EXECUTED result = IMFS_unlink( NULL, &loc ); if (result != 0) return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { result = IMFS_unlink( NULL, &loc ); a000e07c: e3a00000 mov r0, #0 <== NOT EXECUTED a000e080: e1a0100d mov r1, sp <== NOT EXECUTED a000e084: ebffdf7d bl a0005e80 <== NOT EXECUTED if (result != 0) a000e088: e3500000 cmp r0, #0 <== NOT EXECUTED a000e08c: 0afffff8 beq a000e074 <== NOT EXECUTED return -1; a000e090: e3e00000 mvn r0, #0 <== NOT EXECUTED a000e094: eaffffef b a000e058 <== NOT EXECUTED =============================================================================== a000e11c : const char *path, int pathlen, char *token, int *token_len ) { a000e11c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} a000e120: e1a05001 mov r5, r1 a000e124: e1a04002 mov r4, r2 a000e128: e1a0a003 mov sl, r3 register char c; /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; a000e12c: e5d07000 ldrb r7, [r0] a000e130: e1a08000 mov r8, r0 int pathlen, char *token, int *token_len ) { register int i = 0; a000e134: 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) ) { a000e138: ea000006 b a000e158 a000e13c: e1560005 cmp r6, r5 a000e140: aa000008 bge a000e168 token[i] = c; if ( i == IMFS_NAME_MAX ) a000e144: 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; a000e148: e7c47006 strb r7, [r4, r6] if ( i == IMFS_NAME_MAX ) a000e14c: 0a00001b beq a000e1c0 return IMFS_INVALID_TOKEN; if ( !IMFS_is_valid_name_char(c) ) type = IMFS_INVALID_TOKEN; c = path [++i]; a000e150: e5f87001 ldrb r7, [r8, #1]! a000e154: 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) ) { a000e158: e1a00007 mov r0, r7 a000e15c: ebffe452 bl a00072ac a000e160: e3500000 cmp r0, #0 a000e164: 0afffff4 beq a000e13c /* * Copy a seperator into token. */ if ( i == 0 ) { a000e168: e3560000 cmp r6, #0 a000e16c: 1a000006 bne a000e18c token[i] = c; if ( (token[i] != '\0') && pathlen ) { a000e170: e3570000 cmp r7, #0 a000e174: 13550000 cmpne r5, #0 i++; type = IMFS_CURRENT_DIR; a000e178: 13a06001 movne r6, #1 /* * Copy a seperator into token. */ if ( i == 0 ) { token[i] = c; a000e17c: e5c47000 strb r7, [r4] if ( (token[i] != '\0') && pathlen ) { i++; a000e180: e1a00006 mov r0, r6 /* * Set token_len to the number of characters copied. */ *token_len = i; a000e184: e58a6000 str r6, [sl] a000e188: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { a000e18c: e0843006 add r3, r4, r6 a000e190: e5533001 ldrb r3, [r3, #-1] * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) a000e194: e1a00004 mov r0, r4 a000e198: e59f1044 ldr r1, [pc, #68] ; a000e1e4 i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { a000e19c: e3530000 cmp r3, #0 token[i] = '\0'; a000e1a0: 13a03000 movne r3, #0 a000e1a4: 17c43006 strbne r3, [r4, r6] /* * Set token_len to the number of characters copied. */ *token_len = i; a000e1a8: e58a6000 str r6, [sl] * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) a000e1ac: eb000ed9 bl a0011d18 a000e1b0: e3500000 cmp r0, #0 a000e1b4: 1a000003 bne a000e1c8 type = IMFS_UP_DIR; a000e1b8: e3a00002 mov r0, #2 <== NOT EXECUTED else if ( strcmp( token, "." ) == 0 ) type = IMFS_CURRENT_DIR; } return type; } a000e1bc: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) { token[i] = c; if ( i == IMFS_NAME_MAX ) return IMFS_INVALID_TOKEN; a000e1c0: e3a00004 mov r0, #4 <== NOT EXECUTED a000e1c4: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) type = IMFS_UP_DIR; else if ( strcmp( token, "." ) == 0 ) a000e1c8: e1a00004 mov r0, r4 a000e1cc: e59f1014 ldr r1, [pc, #20] ; a000e1e8 a000e1d0: eb000ed0 bl a0011d18 a000e1d4: e3500000 cmp r0, #0 a000e1d8: 03a00001 moveq r0, #1 a000e1dc: 13a00003 movne r0, #3 a000e1e0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} =============================================================================== a0005a64 : 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 ) { a0005a64: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} a0005a68: e1a08001 mov r8, r1 IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, a0005a6c: e59f10e0 ldr r1, [pc, #224] ; a0005b54 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 ) { a0005a70: e1a04000 mov r4, r0 a0005a74: e1a0a002 mov sl, r2 IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, a0005a78: e5911000 ldr r1, [r1] 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 ) { a0005a7c: e1a07003 mov r7, r3 /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) { if (bit_mask == requested_bytes_per_block) { a0005a80: e3510010 cmp r1, #16 a0005a84: 0a00000a beq a0005ab4 is_valid = true; break; } if(bit_mask > requested_bytes_per_block) a0005a88: e351000f cmp r1, #15 a0005a8c: c3a02005 movgt r2, #5 a0005a90: c3a03020 movgt r3, #32 a0005a94: da000005 ble a0005ab0 /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) { if (bit_mask == requested_bytes_per_block) { a0005a98: e1510003 cmp r1, r3 a0005a9c: 0a000004 beq a0005ab4 is_valid = true; break; } if(bit_mask > requested_bytes_per_block) a0005aa0: ba000002 blt a0005ab0 int bit_mask; /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) { a0005aa4: e2522001 subs r2, r2, #1 a0005aa8: e1a03083 lsl r3, r3, #1 a0005aac: 1afffff9 bne a0005a98 if(bit_mask > requested_bytes_per_block) break; } *dest_bytes_per_block = ((is_valid) ? requested_bytes_per_block : default_bytes_per_block); a0005ab0: e3a01080 mov r1, #128 ; 0x80 break; } if(bit_mask > requested_bytes_per_block) break; } *dest_bytes_per_block = ((is_valid) a0005ab4: e59f509c ldr r5, [pc, #156] ; a0005b58 a0005ab8: e5851000 str r1, [r5] /* * 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(); a0005abc: eb001f4e bl a000d7fc 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; a0005ac0: e59fe094 ldr lr, [pc, #148] ; a0005b5c a0005ac4: 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(); a0005ac8: e584001c str r0, [r4, #28] a0005acc: e1a06000 mov r6, 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; a0005ad0: e8be000f ldm lr!, {r0, r1, r2, r3} a0005ad4: e8ac000f stmia ip!, {r0, r1, r2, r3} a0005ad8: e8be000f ldm lr!, {r0, r1, r2, r3} a0005adc: e8ac000f stmia ip!, {r0, r1, r2, r3} a0005ae0: 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; a0005ae4: 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; a0005ae8: 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; a0005aec: e5848028 str r8, [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 ) ); a0005af0: e3a00001 mov r0, #1 a0005af4: e3a01014 mov r1, #20 a0005af8: eb0001af bl a00061bc if ( !fs_info ) { a0005afc: e3500000 cmp r0, #0 a0005b00: 0a00000c beq a0005b38 /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; a0005b04: e5952004 ldr r2, [r5, #4] fs_info->ino_count = 1; a0005b08: e3a03001 mov r3, #1 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; a0005b0c: e5840034 str r0, [r4, #52] ; 0x34 /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; a0005b10: e0821003 add r1, r2, r3 a0005b14: e5802000 str r2, [r0] fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; fs_info->fifo_handlers = fifo_handlers; a0005b18: e59d201c ldr r2, [sp, #28] /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; fs_info->ino_count = 1; a0005b1c: e9800408 stmib r0, {r3, sl} fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; a0005b20: e580700c str r7, [r0, #12] fs_info->fifo_handlers = fifo_handlers; a0005b24: e5802010 str r2, [r0, #16] /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; a0005b28: e5851004 str r1, [r5, #4] fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; fs_info->fifo_handlers = fifo_handlers; jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; a0005b2c: e5863038 str r3, [r6, #56] ; 0x38 return 0; a0005b30: e3a00000 mov r0, #0 } a0005b34: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); if ( !fs_info ) { free(temp_mt_entry->mt_fs_root.node_access); a0005b38: e1a00006 mov r0, r6 <== NOT EXECUTED a0005b3c: eb00020c bl a0006374 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); a0005b40: eb002d66 bl a00110e0 <__errno> <== NOT EXECUTED a0005b44: e3a0300c mov r3, #12 <== NOT EXECUTED a0005b48: e5803000 str r3, [r0] <== NOT EXECUTED a0005b4c: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005b50: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED =============================================================================== a0005b60 : int i; /* * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; a0005b60: 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 */ ) { a0005b64: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED a0005b68: 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 ) a0005b6c: e1d323b4 ldrh r2, [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 */ ) { a0005b70: e24dd048 sub sp, sp, #72 ; 0x48 <== NOT EXECUTED a0005b74: e1a05001 mov r5, r1 <== 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 ) a0005b78: e3520007 cmp r2, #7 <== NOT EXECUTED int i; /* * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; a0005b7c: e58d3028 str r3, [sp, #40] ; 0x28 <== NOT EXECUTED if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) a0005b80: 8a00001e bhi a0005c00 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EMLINK ); /* * Remove any separators at the end of the string. */ IMFS_get_token( token, strlen( token ), new_name, &i ); a0005b84: e1a00006 mov r0, r6 <== NOT EXECUTED a0005b88: eb00313e bl a0012088 <== NOT EXECUTED a0005b8c: e28d4004 add r4, sp, #4 <== NOT EXECUTED a0005b90: e1a01000 mov r1, r0 <== NOT EXECUTED a0005b94: e1a02004 mov r2, r4 <== NOT EXECUTED a0005b98: e28d3044 add r3, sp, #68 ; 0x44 <== NOT EXECUTED a0005b9c: e1a00006 mov r0, r6 <== NOT EXECUTED a0005ba0: eb00215d bl a000e11c <== 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( a0005ba4: e28d2028 add r2, sp, #40 ; 0x28 <== NOT EXECUTED a0005ba8: e3a03ca2 mov r3, #41472 ; 0xa200 <== NOT EXECUTED a0005bac: e58d2000 str r2, [sp] <== NOT EXECUTED a0005bb0: e3a01003 mov r1, #3 <== NOT EXECUTED a0005bb4: e1a00005 mov r0, r5 <== NOT EXECUTED a0005bb8: e1a02004 mov r2, r4 <== NOT EXECUTED a0005bbc: e2433001 sub r3, r3, #1 <== NOT EXECUTED a0005bc0: eb001eb9 bl a000d6ac <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) a0005bc4: e3500000 cmp r0, #0 <== NOT EXECUTED a0005bc8: 0a000011 beq a0005c14 <== 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++; a0005bcc: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); a0005bd0: e28d003c add r0, sp, #60 ; 0x3c <== NOT EXECUTED a0005bd4: 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++; a0005bd8: e1d323b4 ldrh r2, [r3, #52] ; 0x34 <== NOT EXECUTED a0005bdc: e2822001 add r2, r2, #1 <== NOT EXECUTED a0005be0: e1c323b4 strh r2, [r3, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); a0005be4: eb000217 bl a0006448 <== NOT EXECUTED a0005be8: e59d203c ldr r2, [sp, #60] ; 0x3c <== NOT EXECUTED a0005bec: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED return 0; a0005bf0: 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 ); a0005bf4: e5832048 str r2, [r3, #72] ; 0x48 <== NOT EXECUTED return 0; } a0005bf8: e28dd048 add sp, sp, #72 ; 0x48 <== NOT EXECUTED a0005bfc: e8bd8070 pop {r4, r5, r6, pc} <== 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 ) rtems_set_errno_and_return_minus_one( EMLINK ); a0005c00: eb002d36 bl a00110e0 <__errno> <== NOT EXECUTED a0005c04: e3a0301f mov r3, #31 <== NOT EXECUTED a0005c08: e5803000 str r3, [r0] <== NOT EXECUTED a0005c0c: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005c10: eafffff8 b a0005bf8 <== NOT EXECUTED ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); a0005c14: eb002d31 bl a00110e0 <__errno> <== NOT EXECUTED a0005c18: e3a0300c mov r3, #12 <== NOT EXECUTED a0005c1c: e5803000 str r3, [r0] <== NOT EXECUTED a0005c20: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005c24: eafffff3 b a0005bf8 <== NOT EXECUTED =============================================================================== a000feb4 : */ MEMFILE_STATIC int IMFS_memfile_addblock( IMFS_jnode_t *the_jnode, unsigned int block ) { a000feb4: 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 ); a000feb8: e3a02001 mov r2, #1 <== NOT EXECUTED a000febc: ebfffee9 bl a000fa68 <== NOT EXECUTED if ( *block_entry_ptr ) a000fec0: 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 ); a000fec4: e1a05000 mov r5, r0 <== NOT EXECUTED if ( *block_entry_ptr ) a000fec8: e3540000 cmp r4, #0 <== NOT EXECUTED a000fecc: 0a000001 beq a000fed8 <== NOT EXECUTED return 0; a000fed0: e3a00000 mov r0, #0 <== NOT EXECUTED a000fed4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED /* * There is no memory for this block number so allocate it. */ memory = memfile_alloc_block(); a000fed8: ebfffed5 bl a000fa34 <== NOT EXECUTED if ( !memory ) a000fedc: e3500000 cmp r0, #0 <== NOT EXECUTED a000fee0: 0a000002 beq a000fef0 <== NOT EXECUTED return 1; *block_entry_ptr = memory; a000fee4: e5850000 str r0, [r5] <== NOT EXECUTED return 0; a000fee8: e1a00004 mov r0, r4 <== NOT EXECUTED a000feec: 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; a000fef0: e3a00001 mov r0, #1 <== NOT EXECUTED *block_entry_ptr = memory; return 0; } a000fef4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a00100e0 : IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a00100e0: e59f3128 ldr r3, [pc, #296] ; a0010210 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a00100e4: e92d4df0 push {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 ) a00100e8: e593b000 ldr fp, [r3] <== NOT EXECUTED a00100ec: e3a03000 mov r3, #0 <== NOT EXECUTED a00100f0: e1530002 cmp r3, r2 <== NOT EXECUTED a00100f4: e1a0312b lsr r3, fp, #2 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a00100f8: e1a06002 mov r6, r2 <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a00100fc: e0223393 mla r2, r3, r3, r3 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a0010100: e24dd004 sub sp, sp, #4 <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a0010104: e0233392 mla r3, r2, r3, r3 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a0010108: 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 ) a001010c: e2433001 sub r3, r3, #1 <== NOT EXECUTED */ MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { a0010110: e1a08001 mov r8, r1 <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a0010114: e003039b mul r3, fp, r3 <== NOT EXECUTED a0010118: da000034 ble a00101f0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); /* * Verify new file size is actually larger than current size */ if ( new_length <= the_jnode->info.file.size ) a001011c: e5947054 ldr r7, [r4, #84] ; 0x54 <== NOT EXECUTED a0010120: e594a050 ldr sl, [r4, #80] ; 0x50 <== NOT EXECUTED a0010124: e1560007 cmp r6, r7 <== NOT EXECUTED a0010128: da000027 ble a00101cc <== NOT EXECUTED return 0; /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; a001012c: e1a0cfcb asr ip, fp, #31 <== NOT EXECUTED a0010130: e1a0300c mov r3, ip <== NOT EXECUTED a0010134: e1a0200b mov r2, fp <== NOT EXECUTED a0010138: e1a00008 mov r0, r8 <== NOT EXECUTED a001013c: e1a01006 mov r1, r6 <== NOT EXECUTED a0010140: e58dc000 str ip, [sp] <== NOT EXECUTED a0010144: eb001222 bl a00149d4 <__divdi3> <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; a0010148: e59dc000 ldr ip, [sp] <== NOT EXECUTED return 0; /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; a001014c: e1a05000 mov r5, r0 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; a0010150: e1a01007 mov r1, r7 <== NOT EXECUTED a0010154: e1a0000a mov r0, sl <== NOT EXECUTED a0010158: e1a0200b mov r2, fp <== NOT EXECUTED a001015c: e1a0300c mov r3, ip <== NOT EXECUTED a0010160: eb00121b bl a00149d4 <__divdi3> <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { a0010164: e1550000 cmp r5, r0 <== NOT EXECUTED /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; a0010168: e1a0a000 mov sl, r0 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { a001016c: 3a00001b bcc a00101e0 <== NOT EXECUTED a0010170: e1a07000 mov r7, r0 <== NOT EXECUTED a0010174: ea000002 b a0010184 <== NOT EXECUTED a0010178: e2877001 add r7, r7, #1 <== NOT EXECUTED a001017c: e1550007 cmp r5, r7 <== NOT EXECUTED a0010180: 3a000016 bcc a00101e0 <== NOT EXECUTED if ( IMFS_memfile_addblock( the_jnode, block ) ) { a0010184: e1a01007 mov r1, r7 <== NOT EXECUTED a0010188: e1a00004 mov r0, r4 <== NOT EXECUTED a001018c: ebffff48 bl a000feb4 <== NOT EXECUTED a0010190: e3500000 cmp r0, #0 <== NOT EXECUTED a0010194: 0afffff7 beq a0010178 <== NOT EXECUTED a0010198: ea000003 b a00101ac <== NOT EXECUTED for ( ; block>=old_blocks ; block-- ) { IMFS_memfile_remove_block( the_jnode, block ); a001019c: e1a01007 mov r1, r7 <== NOT EXECUTED a00101a0: e1a00004 mov r0, r4 <== 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-- ) { a00101a4: e2477001 sub r7, r7, #1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); a00101a8: ebffffc2 bl a00100b8 <== 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-- ) { a00101ac: e15a0007 cmp sl, r7 <== NOT EXECUTED a00101b0: 9afffff9 bls a001019c <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); } rtems_set_errno_and_return_minus_one( ENOSPC ); a00101b4: eb0003c9 bl a00110e0 <__errno> <== NOT EXECUTED a00101b8: e3a0301c mov r3, #28 <== NOT EXECUTED a00101bc: e5803000 str r3, [r0] <== NOT EXECUTED a00101c0: e3e00000 mvn r0, #0 <== NOT EXECUTED /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; return 0; } a00101c4: e28dd004 add sp, sp, #4 <== NOT EXECUTED a00101c8: e8bd8df0 pop {r4, r5, r6, r7, r8, sl, fp, pc} <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); /* * Verify new file size is actually larger than current size */ if ( new_length <= the_jnode->info.file.size ) a00101cc: 1a000001 bne a00101d8 <== NOT EXECUTED a00101d0: e158000a cmp r8, sl <== NOT EXECUTED a00101d4: 8affffd4 bhi a001012c <== NOT EXECUTED return 0; a00101d8: e3a00000 mov r0, #0 <== NOT EXECUTED a00101dc: eafffff8 b a00101c4 <== NOT EXECUTED } /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; a00101e0: e5848050 str r8, [r4, #80] ; 0x50 <== NOT EXECUTED a00101e4: e5846054 str r6, [r4, #84] ; 0x54 <== NOT EXECUTED return 0; a00101e8: e3a00000 mov r0, #0 <== NOT EXECUTED a00101ec: eafffff4 b a00101c4 <== NOT EXECUTED IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ); /* * Verify new file size is supported */ if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) a00101f0: 1a000001 bne a00101fc <== NOT EXECUTED a00101f4: e1530001 cmp r3, r1 <== NOT EXECUTED a00101f8: 8affffc7 bhi a001011c <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); a00101fc: eb0003b7 bl a00110e0 <__errno> <== NOT EXECUTED a0010200: e3a03016 mov r3, #22 <== NOT EXECUTED a0010204: e5803000 str r3, [r0] <== NOT EXECUTED a0010208: e3e00000 mvn r0, #0 <== NOT EXECUTED a001020c: eaffffec b a00101c4 <== NOT EXECUTED =============================================================================== a000fa68 : my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000fa68: e59f3200 ldr r3, [pc, #512] ; a000fc70 <== NOT EXECUTED #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { a000fa6c: 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 ) { a000fa70: e5935000 ldr r5, [r3] <== NOT EXECUTED #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { a000fa74: e24dd004 sub sp, sp, #4 <== NOT EXECUTED a000fa78: e1a04000 mov r4, r0 <== NOT EXECUTED my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000fa7c: e1a05125 lsr r5, r5, #2 <== NOT EXECUTED a000fa80: e2453001 sub r3, r5, #1 <== NOT EXECUTED a000fa84: e1510003 cmp r1, r3 <== NOT EXECUTED #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { a000fa88: e1a06002 mov r6, r2 <== NOT EXECUTED my_block = block; /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { a000fa8c: 8a000007 bhi a000fab0 <== NOT EXECUTED p = info->indirect; if ( malloc_it ) { a000fa90: e3520000 cmp r2, #0 <== NOT EXECUTED /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { p = info->indirect; a000fa94: e5900058 ldr r0, [r0, #88] ; 0x58 <== NOT EXECUTED if ( malloc_it ) { a000fa98: 0a00001c beq a000fb10 <== NOT EXECUTED if ( !p ) { a000fa9c: e3500000 cmp r0, #0 <== NOT EXECUTED a000faa0: 0a000041 beq a000fbac <== NOT EXECUTED } if ( !p ) return 0; return &info->indirect[ my_block ]; a000faa4: e0800101 add r0, r0, r1, lsl #2 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } a000faa8: e28dd004 add sp, sp, #4 <== NOT EXECUTED a000faac: 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 ) { a000fab0: e0275595 mla r7, r5, r5, r5 <== NOT EXECUTED a000fab4: e2473001 sub r3, r7, #1 <== NOT EXECUTED a000fab8: e1510003 cmp r1, r3 <== NOT EXECUTED a000fabc: 8a000016 bhi a000fb1c <== NOT EXECUTED my_block -= FIRST_DOUBLY_INDIRECT; a000fac0: e0657001 rsb r7, r5, r1 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000fac4: e1a00007 mov r0, r7 <== NOT EXECUTED a000fac8: e1a01005 mov r1, r5 <== NOT EXECUTED a000facc: eb00138c bl a0014904 <__umodsi3> <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000fad0: e1a01005 mov r1, r5 <== NOT EXECUTED */ if ( my_block <= LAST_DOUBLY_INDIRECT ) { my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000fad4: e1a08000 mov r8, r0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000fad8: e1a00007 mov r0, r7 <== NOT EXECUTED a000fadc: eb001342 bl a00147ec <__aeabi_uidiv> <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { a000fae0: e3560000 cmp r6, #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; a000fae4: e1a05000 mov r5, r0 <== NOT EXECUTED p = info->doubly_indirect; a000fae8: e594305c ldr r3, [r4, #92] ; 0x5c <== NOT EXECUTED if ( malloc_it ) { a000faec: 0a00003f beq a000fbf0 <== NOT EXECUTED if ( !p ) { a000faf0: e3530000 cmp r3, #0 <== NOT EXECUTED a000faf4: 0a000045 beq a000fc10 <== NOT EXECUTED if ( !p ) return 0; info->doubly_indirect = p; } p1 = (block_p *)p[ doubly ]; a000faf8: e7930105 ldr r0, [r3, r5, lsl #2] <== NOT EXECUTED a000fafc: e0835105 add r5, r3, r5, lsl #2 <== NOT EXECUTED if ( !p1 ) { a000fb00: e3500000 cmp r0, #0 <== NOT EXECUTED a000fb04: 0a00002f beq a000fbc8 <== NOT EXECUTED p = (block_p *)p[ doubly ]; if ( !p ) return 0; return (block_p *)&p[ singly ]; a000fb08: e0800108 add r0, r0, r8, lsl #2 <== NOT EXECUTED a000fb0c: eaffffe5 b a000faa8 <== NOT EXECUTED info->indirect = p; } return &info->indirect[ my_block ]; } if ( !p ) a000fb10: e3500000 cmp r0, #0 <== NOT EXECUTED a000fb14: 1affffe2 bne a000faa4 <== NOT EXECUTED a000fb18: eaffffe2 b a000faa8 <== NOT EXECUTED } /* * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { a000fb1c: e0235597 mla r3, r7, r5, r5 <== NOT EXECUTED a000fb20: e2433001 sub r3, r3, #1 <== NOT EXECUTED a000fb24: e1510003 cmp r1, r3 <== NOT EXECUTED } /* * This means the requested block number is out of range. */ return 0; a000fb28: 83a00000 movhi r0, #0 <== NOT EXECUTED } /* * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { a000fb2c: 8affffdd bhi a000faa8 <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; a000fb30: e0677001 rsb r7, r7, r1 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; a000fb34: e1a00007 mov r0, r7 <== NOT EXECUTED a000fb38: e1a01005 mov r1, r5 <== NOT EXECUTED a000fb3c: eb001370 bl a0014904 <__umodsi3> <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000fb40: 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; a000fb44: e1a0a000 mov sl, r0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; a000fb48: e1a00007 mov r0, r7 <== NOT EXECUTED a000fb4c: eb001326 bl a00147ec <__aeabi_uidiv> <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; a000fb50: 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; a000fb54: e1a08000 mov r8, r0 <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; a000fb58: eb001323 bl a00147ec <__aeabi_uidiv> <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; a000fb5c: 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; a000fb60: e1a07000 mov r7, r0 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; a000fb64: e1a00008 mov r0, r8 <== NOT EXECUTED a000fb68: eb001365 bl a0014904 <__umodsi3> <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { a000fb6c: e3560000 cmp r6, #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; a000fb70: e1a05000 mov r5, r0 <== NOT EXECUTED p = info->triply_indirect; a000fb74: e5940060 ldr r0, [r4, #96] ; 0x60 <== NOT EXECUTED if ( malloc_it ) { a000fb78: 0a000029 beq a000fc24 <== NOT EXECUTED if ( !p ) { a000fb7c: e3500000 cmp r0, #0 <== NOT EXECUTED a000fb80: 0a000035 beq a000fc5c <== NOT EXECUTED if ( !p ) return 0; info->triply_indirect = p; } p1 = (block_p *) p[ triply ]; a000fb84: e7903107 ldr r3, [r0, r7, lsl #2] <== NOT EXECUTED a000fb88: e0807107 add r7, r0, r7, lsl #2 <== NOT EXECUTED if ( !p1 ) { a000fb8c: e3530000 cmp r3, #0 <== NOT EXECUTED a000fb90: 0a00002c beq a000fc48 <== NOT EXECUTED if ( !p1 ) return 0; p[ triply ] = (block_p) p1; } p2 = (block_p *)p1[ doubly ]; a000fb94: e7930105 ldr r0, [r3, r5, lsl #2] <== NOT EXECUTED a000fb98: e0835105 add r5, r3, r5, lsl #2 <== NOT EXECUTED if ( !p2 ) { a000fb9c: e3500000 cmp r0, #0 <== NOT EXECUTED a000fba0: 0a00000d beq a000fbdc <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p2 ) return 0; return (block_p *)&p2[ singly ]; a000fba4: e080010a add r0, r0, sl, lsl #2 <== NOT EXECUTED a000fba8: eaffffbe b a000faa8 <== NOT EXECUTED p = info->indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); a000fbac: e58d1000 str r1, [sp] <== NOT EXECUTED a000fbb0: ebffff9f bl a000fa34 <== NOT EXECUTED if ( !p ) a000fbb4: e3500000 cmp r0, #0 <== NOT EXECUTED a000fbb8: e59d1000 ldr r1, [sp] <== NOT EXECUTED return 0; info->indirect = p; a000fbbc: 15840058 strne r0, [r4, #88] ; 0x58 <== NOT EXECUTED if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); if ( !p ) a000fbc0: 1affffb7 bne a000faa4 <== NOT EXECUTED a000fbc4: eaffffb7 b a000faa8 <== NOT EXECUTED info->doubly_indirect = p; } p1 = (block_p *)p[ doubly ]; if ( !p1 ) { p1 = memfile_alloc_block(); a000fbc8: ebffff99 bl a000fa34 <== NOT EXECUTED if ( !p1 ) a000fbcc: e3500000 cmp r0, #0 <== NOT EXECUTED return 0; p[ doubly ] = (block_p) p1; a000fbd0: 15850000 strne r0, [r5] <== NOT EXECUTED p = (block_p *)p[ doubly ]; if ( !p ) return 0; return (block_p *)&p[ singly ]; a000fbd4: 10800108 addne r0, r0, r8, lsl #2 <== NOT EXECUTED a000fbd8: eaffffb2 b a000faa8 <== NOT EXECUTED p[ triply ] = (block_p) p1; } p2 = (block_p *)p1[ doubly ]; if ( !p2 ) { p2 = memfile_alloc_block(); a000fbdc: ebffff94 bl a000fa34 <== NOT EXECUTED if ( !p2 ) a000fbe0: e3500000 cmp r0, #0 <== NOT EXECUTED return 0; p1[ doubly ] = (block_p) p2; a000fbe4: 15850000 strne r0, [r5] <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p2 ) return 0; return (block_p *)&p2[ singly ]; a000fbe8: 1080010a addne r0, r0, sl, lsl #2 <== NOT EXECUTED a000fbec: eaffffad b a000faa8 <== NOT EXECUTED } return (block_p *)&p1[ singly ]; } if ( !p ) a000fbf0: e3530000 cmp r3, #0 <== NOT EXECUTED a000fbf4: 1a000001 bne a000fc00 <== NOT EXECUTED p1 = (block_p *) p[ triply ]; if ( !p1 ) { p1 = memfile_alloc_block(); if ( !p1 ) return 0; a000fbf8: e1a00003 mov r0, r3 <== NOT EXECUTED a000fbfc: eaffffa9 b a000faa8 <== NOT EXECUTED } if ( !p ) return 0; p = (block_p *)p[ doubly ]; a000fc00: e7930100 ldr r0, [r3, r0, lsl #2] <== NOT EXECUTED if ( !p ) a000fc04: e3500000 cmp r0, #0 <== NOT EXECUTED return 0; return (block_p *)&p[ singly ]; a000fc08: 10800108 addne r0, r0, r8, lsl #2 <== NOT EXECUTED a000fc0c: eaffffa5 b a000faa8 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); a000fc10: ebffff87 bl a000fa34 <== NOT EXECUTED if ( !p ) a000fc14: e2503000 subs r3, r0, #0 <== NOT EXECUTED a000fc18: 0afffff6 beq a000fbf8 <== NOT EXECUTED return 0; info->doubly_indirect = p; a000fc1c: e584305c str r3, [r4, #92] ; 0x5c <== NOT EXECUTED a000fc20: eaffffb4 b a000faf8 <== NOT EXECUTED p1[ doubly ] = (block_p) p2; } return (block_p *)&p2[ singly ]; } if ( !p ) a000fc24: e3500000 cmp r0, #0 <== NOT EXECUTED a000fc28: 0affff9e beq a000faa8 <== NOT EXECUTED return 0; p1 = (block_p *) p[ triply ]; a000fc2c: e7900107 ldr r0, [r0, r7, lsl #2] <== NOT EXECUTED if ( !p1 ) a000fc30: e3500000 cmp r0, #0 <== NOT EXECUTED a000fc34: 0affff9b beq a000faa8 <== NOT EXECUTED return 0; p2 = (block_p *)p1[ doubly ]; a000fc38: e7900105 ldr r0, [r0, r5, lsl #2] <== NOT EXECUTED if ( !p2 ) a000fc3c: e3500000 cmp r0, #0 <== NOT EXECUTED return 0; return (block_p *)&p2[ singly ]; a000fc40: 1080010a addne r0, r0, sl, lsl #2 <== NOT EXECUTED a000fc44: eaffff97 b a000faa8 <== NOT EXECUTED info->triply_indirect = p; } p1 = (block_p *) p[ triply ]; if ( !p1 ) { p1 = memfile_alloc_block(); a000fc48: ebffff79 bl a000fa34 <== NOT EXECUTED if ( !p1 ) a000fc4c: e2503000 subs r3, r0, #0 <== NOT EXECUTED a000fc50: 0affffe8 beq a000fbf8 <== NOT EXECUTED return 0; p[ triply ] = (block_p) p1; a000fc54: e5873000 str r3, [r7] <== NOT EXECUTED a000fc58: eaffffcd b a000fb94 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); a000fc5c: ebffff74 bl a000fa34 <== NOT EXECUTED if ( !p ) a000fc60: e3500000 cmp r0, #0 <== NOT EXECUTED a000fc64: 0affff8f beq a000faa8 <== NOT EXECUTED return 0; info->triply_indirect = p; a000fc68: e5840060 str r0, [r4, #96] ; 0x60 <== NOT EXECUTED a000fc6c: eaffffc4 b a000fb84 <== NOT EXECUTED =============================================================================== a0008910 : * using the IMFS memory file type. * */ int IMFS_memfile_maximum_size( void ) { return IMFS_MEMFILE_MAXIMUM_SIZE; a0008910: e59f3018 ldr r3, [pc, #24] ; a0008930 <== NOT EXECUTED a0008914: e5932000 ldr r2, [r3] <== NOT EXECUTED a0008918: e1a03122 lsr r3, r2, #2 <== NOT EXECUTED a000891c: e0203393 mla r0, r3, r3, r3 <== NOT EXECUTED a0008920: e0233390 mla r3, r0, r3, r3 <== NOT EXECUTED a0008924: e2430001 sub r0, r3, #1 <== NOT EXECUTED } a0008928: e0000092 mul r0, r2, r0 <== NOT EXECUTED a000892c: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a000fc74 : IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { a000fc74: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED a000fc78: e1a09000 mov r9, r0 <== 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) { a000fc7c: e590004c ldr r0, [r0, #76] ; 0x4c <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { a000fc80: e24dd014 sub sp, sp, #20 <== NOT EXECUTED a000fc84: e1a07001 mov r7, 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) { a000fc88: e3500006 cmp r0, #6 <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { a000fc8c: e1a08002 mov r8, r2 <== NOT EXECUTED a000fc90: e1a0b003 mov fp, r3 <== NOT EXECUTED a000fc94: e59d5038 ldr r5, [sp, #56] ; 0x38 <== 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) { a000fc98: 0a00005c beq a000fe10 <== 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; if ( last_byte > the_jnode->info.file.size ) a000fc9c: e5992054 ldr r2, [r9, #84] ; 0x54 <== 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; a000fca0: e1a03001 mov r3, r1 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) a000fca4: e3a01000 mov r1, #0 <== NOT EXECUTED a000fca8: e1510002 cmp r1, r2 <== NOT EXECUTED a000fcac: e5992050 ldr r2, [r9, #80] ; 0x50 <== 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; a000fcb0: e0851007 add r1, r5, r7 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) a000fcb4: da00003d ble a000fdb0 <== NOT EXECUTED my_length = the_jnode->info.file.size - start; a000fcb8: e0635002 rsb r5, r3, r2 <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a000fcbc: e59f61b8 ldr r6, [pc, #440] ; a000fe7c <== NOT EXECUTED a000fcc0: e1a00007 mov r0, r7 <== NOT EXECUTED a000fcc4: e1a01008 mov r1, r8 <== NOT EXECUTED a000fcc8: e5964000 ldr r4, [r6] <== NOT EXECUTED a000fccc: e1a02004 mov r2, r4 <== NOT EXECUTED a000fcd0: e1a03fc2 asr r3, r2, #31 <== NOT EXECUTED a000fcd4: e98d000c stmib sp, {r2, r3} <== NOT EXECUTED a000fcd8: eb00146a bl a0014e88 <__moddi3> <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000fcdc: e99d000c ldmib sp, {r2, r3} <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a000fce0: e1a0a000 mov sl, r0 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a000fce4: e1a01008 mov r1, r8 <== NOT EXECUTED a000fce8: e1a00007 mov r0, r7 <== NOT EXECUTED a000fcec: eb001338 bl a00149d4 <__divdi3> <== NOT EXECUTED if ( start_offset ) { a000fcf0: e35a0000 cmp sl, #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; a000fcf4: e1a07000 mov r7, r0 <== NOT EXECUTED unsigned int last_byte; unsigned int copied; unsigned int start_offset; unsigned char *dest; dest = destination; a000fcf8: 01a0800b moveq r8, fp <== 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 ) { a000fcfc: 0a000014 beq a000fd54 <== 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 ); a000fd00: e1a00009 mov r0, r9 <== NOT EXECUTED a000fd04: e1a01007 mov r1, r7 <== NOT EXECUTED a000fd08: e3a02000 mov r2, #0 <== NOT EXECUTED a000fd0c: ebffff55 bl a000fa68 <== NOT EXECUTED if ( !block_ptr ) a000fd10: e3500000 cmp r0, #0 <== NOT EXECUTED a000fd14: 0a000023 beq a000fda8 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); a000fd18: 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; a000fd1c: e06a3004 rsb r3, sl, r4 <== NOT EXECUTED a000fd20: e1550003 cmp r5, r3 <== NOT EXECUTED a000fd24: 31a03005 movcc r3, 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 ); a000fd28: e081100a add r1, r1, sl <== NOT EXECUTED a000fd2c: e1a02003 mov r2, r3 <== NOT EXECUTED a000fd30: e1a0000b mov r0, fp <== NOT EXECUTED a000fd34: e58d3000 str r3, [sp] <== NOT EXECUTED a000fd38: eb000716 bl a0011998 <== NOT EXECUTED dest += to_copy; a000fd3c: e59d3000 ldr r3, [sp] <== NOT EXECUTED block++; my_length -= to_copy; a000fd40: e5964000 ldr r4, [r6] <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); dest += to_copy; block++; a000fd44: e2877001 add r7, r7, #1 <== NOT EXECUTED 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 ); dest += to_copy; a000fd48: e08b8003 add r8, fp, r3 <== NOT EXECUTED block++; my_length -= to_copy; a000fd4c: e0635005 rsb r5, r3, r5 <== NOT EXECUTED copied += to_copy; a000fd50: e1a0a003 mov sl, r3 <== 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 ) { a000fd54: e1550004 cmp r5, r4 <== NOT EXECUTED a000fd58: 2a000008 bcs a000fd80 <== NOT EXECUTED a000fd5c: ea000017 b a000fdc0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); a000fd60: e5931000 ldr r1, [r3] <== NOT EXECUTED a000fd64: eb00070b bl a0011998 <== 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 ) { a000fd68: e5963000 ldr r3, [r6] <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); dest += to_copy; a000fd6c: e0888004 add r8, r8, r4 <== NOT EXECUTED block++; a000fd70: e2877001 add r7, r7, #1 <== 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 ) { a000fd74: e1530005 cmp r3, r5 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); dest += to_copy; block++; my_length -= to_copy; copied += to_copy; a000fd78: e08aa004 add sl, sl, r4 <== 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 ) { a000fd7c: 8a00000f bhi a000fdc0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000fd80: e3a02000 mov r2, #0 <== NOT EXECUTED a000fd84: e1a01007 mov r1, r7 <== NOT EXECUTED a000fd88: e1a00009 mov r0, r9 <== NOT EXECUTED a000fd8c: ebffff35 bl a000fa68 <== NOT EXECUTED if ( !block_ptr ) a000fd90: e2503000 subs r3, r0, #0 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); a000fd94: e1a02004 mov r2, r4 <== NOT EXECUTED dest += to_copy; block++; my_length -= to_copy; a000fd98: e0645005 rsb r5, r4, r5 <== NOT EXECUTED to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); a000fd9c: e1a00008 mov r0, r8 <== 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 ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) a000fda0: 1affffee bne a000fd60 <== NOT EXECUTED IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) return copied; a000fda4: e1a0000a mov r0, sl <== NOT EXECUTED } IMFS_update_atime( the_jnode ); return copied; } a000fda8: e28dd014 add sp, sp, #20 <== NOT EXECUTED a000fdac: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== 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; if ( last_byte > the_jnode->info.file.size ) a000fdb0: 1affffc1 bne a000fcbc <== NOT EXECUTED a000fdb4: e1510002 cmp r1, r2 <== NOT EXECUTED a000fdb8: 9affffbf bls a000fcbc <== NOT EXECUTED a000fdbc: eaffffbd b a000fcb8 <== NOT EXECUTED /* * Phase 3: possibly the first part of one block */ IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { a000fdc0: e3550000 cmp r5, #0 <== NOT EXECUTED a000fdc4: 0a00000a beq a000fdf4 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a000fdc8: e1a00009 mov r0, r9 <== NOT EXECUTED a000fdcc: e1a01007 mov r1, r7 <== NOT EXECUTED a000fdd0: e3a02000 mov r2, #0 <== NOT EXECUTED a000fdd4: ebffff23 bl a000fa68 <== NOT EXECUTED if ( !block_ptr ) a000fdd8: e2503000 subs r3, r0, #0 <== NOT EXECUTED a000fddc: 0afffff0 beq a000fda4 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); a000fde0: e1a00008 mov r0, r8 <== NOT EXECUTED a000fde4: e5931000 ldr r1, [r3] <== NOT EXECUTED a000fde8: e1a02005 mov r2, r5 <== NOT EXECUTED a000fdec: eb0006e9 bl a0011998 <== NOT EXECUTED copied += my_length; a000fdf0: e08aa005 add sl, sl, r5 <== NOT EXECUTED } IMFS_update_atime( the_jnode ); a000fdf4: e28d000c add r0, sp, #12 <== NOT EXECUTED a000fdf8: e3a01000 mov r1, #0 <== NOT EXECUTED a000fdfc: ebffd991 bl a0006448 <== NOT EXECUTED a000fe00: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED return copied; a000fe04: e1a0000a mov r0, sl <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); a000fe08: e5893040 str r3, [r9, #64] ; 0x40 <== NOT EXECUTED return copied; a000fe0c: eaffffe5 b a000fda8 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) a000fe10: e2894050 add r4, r9, #80 ; 0x50 <== NOT EXECUTED a000fe14: e8940018 ldm r4, {r3, r4} <== NOT EXECUTED a000fe18: e1a00003 mov r0, r3 <== NOT EXECUTED a000fe1c: e1a01004 mov r1, r4 <== NOT EXECUTED a000fe20: e3a02000 mov r2, #0 <== NOT EXECUTED a000fe24: e0500007 subs r0, r0, r7 <== NOT EXECUTED a000fe28: e0c11008 sbc r1, r1, r8 <== NOT EXECUTED a000fe2c: e1520001 cmp r2, r1 <== 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; a000fe30: e5992058 ldr r2, [r9, #88] ; 0x58 <== NOT EXECUTED if (my_length > (the_jnode->info.linearfile.size - start)) a000fe34: da00000b ble a000fe68 <== NOT EXECUTED my_length = the_jnode->info.linearfile.size - start; a000fe38: e067a003 rsb sl, r7, r3 <== NOT EXECUTED memcpy(dest, &file_ptr[start], my_length); a000fe3c: e0821007 add r1, r2, r7 <== NOT EXECUTED a000fe40: e1a0000b mov r0, fp <== NOT EXECUTED a000fe44: e1a0200a mov r2, sl <== NOT EXECUTED a000fe48: eb0006d2 bl a0011998 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); a000fe4c: e28d000c add r0, sp, #12 <== NOT EXECUTED a000fe50: e3a01000 mov r1, #0 <== NOT EXECUTED a000fe54: ebffd97b bl a0006448 <== NOT EXECUTED a000fe58: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED return copied; a000fe5c: e1a0000a mov r0, sl <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); a000fe60: e5893040 str r3, [r9, #64] ; 0x40 <== NOT EXECUTED a000fe64: eaffffcf b a000fda8 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) a000fe68: 1a000001 bne a000fe74 <== NOT EXECUTED a000fe6c: e1550000 cmp r5, r0 <== NOT EXECUTED a000fe70: 8afffff0 bhi a000fe38 <== NOT EXECUTED /* * Linear files (as created from a tar file are easier to handle * than block files). */ my_length = length; a000fe74: e1a0a005 mov sl, r5 <== NOT EXECUTED a000fe78: eaffffef b a000fe3c <== NOT EXECUTED =============================================================================== a000ff6c : * is better to stick to simple, easy to understand algorithms. */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { a000ff6c: 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; a000ff70: e59f613c ldr r6, [pc, #316] ; a00100b4 <== NOT EXECUTED * + doubly indirect * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { a000ff74: e5903058 ldr r3, [r0, #88] ; 0x58 <== NOT EXECUTED * is better to stick to simple, easy to understand algorithms. */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { a000ff78: e1a0a000 mov sl, 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; a000ff7c: e5967000 ldr r7, [r6] <== NOT EXECUTED * + doubly indirect * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { a000ff80: e3530000 cmp r3, #0 <== 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; a000ff84: e1a07127 lsr r7, r7, #2 <== NOT EXECUTED * + doubly indirect * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { a000ff88: 0a000002 beq a000ff98 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); a000ff8c: e2800058 add r0, r0, #88 ; 0x58 <== NOT EXECUTED a000ff90: e1a01007 mov r1, r7 <== NOT EXECUTED a000ff94: ebffffdf bl a000ff18 <== NOT EXECUTED } if ( info->doubly_indirect ) { a000ff98: e59a305c ldr r3, [sl, #92] ; 0x5c <== NOT EXECUTED a000ff9c: e3530000 cmp r3, #0 <== NOT EXECUTED a000ffa0: 0a000015 beq a000fffc <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED a000ffb0: e3a02000 mov r2, #0 <== NOT EXECUTED a000ffb4: e1a04002 mov r4, r2 <== NOT EXECUTED a000ffb8: ea000000 b a000ffc0 <== NOT EXECUTED a000ffbc: e59a305c ldr r3, [sl, #92] ; 0x5c <== NOT EXECUTED if ( info->doubly_indirect[i] ) { a000ffc0: e7930102 ldr r0, [r3, r2, lsl #2] <== NOT EXECUTED a000ffc4: e1a02102 lsl r2, r2, #2 <== NOT EXECUTED if ( info->indirect ) { memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; idoubly_indirect[i] ) { a000ffcc: e3500000 cmp r0, #0 <== NOT EXECUTED memfile_free_blocks_in_table( a000ffd0: e1a01007 mov r1, r7 <== NOT EXECUTED a000ffd4: e0830002 add r0, r3, r2 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; idoubly_indirect[i] ) { a000ffd8: 0a000000 beq a000ffe0 <== NOT EXECUTED memfile_free_blocks_in_table( a000ffdc: ebffffcd bl a000ff18 <== 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 ); a000fff0: e28a005c add r0, sl, #92 ; 0x5c <== NOT EXECUTED a000fff4: e1a01007 mov r1, r7 <== NOT EXECUTED a000fff8: ebffffc6 bl a000ff18 <== NOT EXECUTED } if ( info->triply_indirect ) { a000fffc: e59a0060 ldr r0, [sl, #96] ; 0x60 <== NOT EXECUTED a0010000: e3500000 cmp r0, #0 <== NOT EXECUTED a0010004: 0a000028 beq a00100ac <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED p = (block_p *) info->triply_indirect[i]; a0010014: e5905000 ldr r5, [r0] <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ a0010018: e3550000 cmp r5, #0 <== NOT EXECUTED } if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; a001001c: 13a09000 movne r9, #0 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ a0010020: 11a08009 movne r8, r9 <== NOT EXECUTED a0010024: 0a00001d beq a00100a0 <== NOT EXECUTED break; for ( j=0 ; j <== NOT EXECUTED a0010030: e3a00000 mov r0, #0 <== NOT EXECUTED a0010034: e1a04000 mov r4, r0 <== NOT EXECUTED if ( p[j] ) { a0010038: e7953100 ldr r3, [r5, r0, lsl #2] <== NOT EXECUTED a001003c: e1a00100 lsl r0, r0, #2 <== NOT EXECUTED if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; if ( !p ) /* ensure we have a valid pointer */ break; for ( j=0 ; jtriply_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); a0010054: ebffffaf bl a000ff18 <== 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 a0010068: e59a0060 ldr r0, [sl, #96] ; 0x60 <== NOT EXECUTED if ( p[j] ) { memfile_free_blocks_in_table( (block_p **)&p[j], to_free); } } memfile_free_blocks_in_table( a001006c: e0800009 add r0, r0, r9 <== NOT EXECUTED a0010070: e1a01007 mov r1, r7 <== NOT EXECUTED a0010074: ebffffa7 bl a000ff18 <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED p = (block_p *) info->triply_indirect[i]; a001008c: e59a0060 ldr r0, [sl, #96] ; 0x60 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ a0010090: e1a09108 lsl r9, r8, #2 <== NOT EXECUTED } if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; a0010094: e7905108 ldr r5, [r0, r8, lsl #2] <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ a0010098: e3550000 cmp r5, #0 <== NOT EXECUTED a001009c: 1affffe1 bne a0010028 <== NOT EXECUTED } } memfile_free_blocks_in_table( (block_p **)&info->triply_indirect[i], to_free ); } memfile_free_blocks_in_table( a00100a0: e28a0060 add r0, sl, #96 ; 0x60 <== NOT EXECUTED a00100a4: e1a01007 mov r1, r7 <== NOT EXECUTED a00100a8: ebffff9a bl a000ff18 <== NOT EXECUTED (block_p **)&info->triply_indirect, to_free ); } return 0; } a00100ac: e3a00000 mov r0, #0 <== NOT EXECUTED a00100b0: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED =============================================================================== a00100b8 : */ MEMFILE_STATIC int IMFS_memfile_remove_block( IMFS_jnode_t *the_jnode, unsigned int block ) { a00100b8: 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 ); a00100bc: e3a02000 mov r2, #0 <== NOT EXECUTED a00100c0: ebfffe68 bl a000fa68 <== NOT EXECUTED IMFS_assert( block_ptr ); ptr = *block_ptr; *block_ptr = 0; a00100c4: e3a02000 mov r2, #0 <== NOT EXECUTED ) { block_p *block_ptr; block_p ptr; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a00100c8: e1a03000 mov r3, r0 <== NOT EXECUTED IMFS_assert( block_ptr ); ptr = *block_ptr; a00100cc: e5900000 ldr r0, [r0] <== NOT EXECUTED *block_ptr = 0; a00100d0: e5832000 str r2, [r3] <== NOT EXECUTED memfile_free_block( ptr ); a00100d4: ebffff87 bl a000fef8 <== NOT EXECUTED return 1; } a00100d8: e3a00001 mov r0, #1 <== NOT EXECUTED a00100dc: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a0010214 : IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { a0010214: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED a0010218: e1a09000 mov r9, r0 <== NOT EXECUTED a001021c: e24dd010 sub sp, sp, #16 <== 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 ) { a0010220: e5900054 ldr r0, [r0, #84] ; 0x54 <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { a0010224: e59db034 ldr fp, [sp, #52] ; 0x34 <== NOT EXECUTED a0010228: e1a06001 mov r6, 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 ) { a001022c: e3500000 cmp r0, #0 <== NOT EXECUTED IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { a0010230: e1a07002 mov r7, r2 <== NOT EXECUTED a0010234: e1a08003 mov r8, 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; a0010238: e08b1001 add r1, fp, r1 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) { a001023c: ba000054 blt a0010394 <== NOT EXECUTED a0010240: 0a000050 beq a0010388 <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a0010244: e59f5170 ldr r5, [pc, #368] ; a00103bc <== NOT EXECUTED a0010248: e1a00006 mov r0, r6 <== NOT EXECUTED a001024c: e1a01007 mov r1, r7 <== NOT EXECUTED a0010250: e5954000 ldr r4, [r5] <== NOT EXECUTED a0010254: e1a02004 mov r2, r4 <== NOT EXECUTED a0010258: e1a03fc2 asr r3, r2, #31 <== NOT EXECUTED a001025c: e88d000c stm sp, {r2, r3} <== NOT EXECUTED a0010260: eb001308 bl a0014e88 <__moddi3> <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a0010264: e89d000c ldm sp, {r2, r3} <== NOT EXECUTED */ /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; a0010268: e1a0a000 mov sl, r0 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; a001026c: e1a01007 mov r1, r7 <== NOT EXECUTED a0010270: e1a00006 mov r0, r6 <== NOT EXECUTED a0010274: eb0011d6 bl a00149d4 <__divdi3> <== NOT EXECUTED if ( start_offset ) { a0010278: e35a0000 cmp sl, #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; a001027c: e1a07000 mov r7, r0 <== NOT EXECUTED if ( start_offset ) { a0010280: 01a0600b moveq r6, fp <== NOT EXECUTED a0010284: 1a000016 bne a00102e4 <== 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 ) { a0010288: e1560004 cmp r6, r4 <== NOT EXECUTED a001028c: 2a000008 bcs a00102b4 <== NOT EXECUTED a0010290: ea000027 b a0010334 <== NOT EXECUTED if ( !block_ptr ) 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 ); a0010294: e5900000 ldr r0, [r0] <== NOT EXECUTED a0010298: eb0005be bl a0011998 <== 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 ) { a001029c: e5953000 ldr r3, [r5] <== 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 ); src += to_copy; a00102a0: e0888004 add r8, r8, r4 <== NOT EXECUTED block++; a00102a4: e2877001 add r7, r7, #1 <== 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 ) { a00102a8: e1530006 cmp r3, r6 <== 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( a00102ac: e08aa004 add sl, sl, r4 <== 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 ) { a00102b0: 8a00001f bhi a0010334 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a00102b4: e1a01007 mov r1, r7 <== NOT EXECUTED a00102b8: e3a02000 mov r2, #0 <== NOT EXECUTED a00102bc: e1a00009 mov r0, r9 <== NOT EXECUTED a00102c0: ebfffde8 bl a000fa68 <== NOT EXECUTED if ( !block_ptr ) a00102c4: e3500000 cmp r0, #0 <== 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 ); a00102c8: e1a01008 mov r1, r8 <== NOT EXECUTED a00102cc: e1a02004 mov r2, r4 <== NOT EXECUTED src += to_copy; block++; my_length -= to_copy; a00102d0: e0646006 rsb r6, r4, r6 <== NOT EXECUTED */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) a00102d4: 1affffee bne a0010294 <== NOT EXECUTED IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); if ( !block_ptr ) a00102d8: e1a0000a mov r0, sl <== NOT EXECUTED } IMFS_mtime_ctime_update( the_jnode ); return copied; } a00102dc: e28dd010 add sp, sp, #16 <== NOT EXECUTED a00102e0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 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 ); a00102e4: e1a00009 mov r0, r9 <== NOT EXECUTED a00102e8: e1a01007 mov r1, r7 <== NOT EXECUTED a00102ec: e3a02000 mov r2, #0 <== NOT EXECUTED a00102f0: ebfffddc bl a000fa68 <== NOT EXECUTED if ( !block_ptr ) a00102f4: e3500000 cmp r0, #0 <== NOT EXECUTED a00102f8: 0afffff7 beq a00102dc <== NOT EXECUTED block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); a00102fc: 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; a0010300: e06a4004 rsb r4, sl, r4 <== NOT EXECUTED a0010304: e154000b cmp r4, fp <== NOT EXECUTED a0010308: 21a0400b movcs r4, fp <== NOT EXECUTED block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); a001030c: e080000a add r0, r0, sl <== NOT EXECUTED a0010310: e1a01008 mov r1, r8 <== NOT EXECUTED a0010314: e1a02004 mov r2, r4 <== NOT EXECUTED a0010318: eb00059e bl a0011998 <== NOT EXECUTED src += to_copy; a001031c: e0888004 add r8, r8, r4 <== NOT EXECUTED block++; my_length -= to_copy; a0010320: e064600b rsb r6, r4, fp <== NOT EXECUTED copied += to_copy; a0010324: e1a0a004 mov sl, r4 <== NOT EXECUTED src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); src += to_copy; block++; a0010328: e2877001 add r7, r7, #1 <== NOT EXECUTED my_length -= to_copy; copied += to_copy; a001032c: e5954000 ldr r4, [r5] <== NOT EXECUTED a0010330: eaffffd4 b a0010288 <== 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 ) { a0010334: e3560000 cmp r6, #0 <== NOT EXECUTED a0010338: 0a00000a beq a0010368 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); a001033c: e1a00009 mov r0, r9 <== NOT EXECUTED a0010340: e1a01007 mov r1, r7 <== NOT EXECUTED a0010344: e3a02000 mov r2, #0 <== NOT EXECUTED a0010348: ebfffdc6 bl a000fa68 <== NOT EXECUTED if ( !block_ptr ) a001034c: e3500000 cmp r0, #0 <== NOT EXECUTED a0010350: 0affffe0 beq a00102d8 <== 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 ); a0010354: e5900000 ldr r0, [r0] <== NOT EXECUTED a0010358: e1a01008 mov r1, r8 <== NOT EXECUTED a001035c: e1a02006 mov r2, r6 <== NOT EXECUTED a0010360: eb00058c bl a0011998 <== NOT EXECUTED my_length = 0; copied += to_copy; a0010364: e08aa006 add sl, sl, r6 <== NOT EXECUTED } IMFS_mtime_ctime_update( the_jnode ); a0010368: e28d0008 add r0, sp, #8 <== NOT EXECUTED a001036c: e3a01000 mov r1, #0 <== NOT EXECUTED a0010370: ebffd834 bl a0006448 <== NOT EXECUTED a0010374: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED return copied; a0010378: e1a0000a mov r0, sl <== NOT EXECUTED memcpy( &(*block_ptr)[ 0 ], src, my_length ); my_length = 0; copied += to_copy; } IMFS_mtime_ctime_update( the_jnode ); a001037c: e5893044 str r3, [r9, #68] ; 0x44 <== NOT EXECUTED a0010380: e5893048 str r3, [r9, #72] ; 0x48 <== NOT EXECUTED return copied; a0010384: eaffffd4 b a00102dc <== 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 ) { a0010388: e5993050 ldr r3, [r9, #80] ; 0x50 <== NOT EXECUTED a001038c: e1530001 cmp r3, r1 <== NOT EXECUTED a0010390: 2affffab bcs a0010244 <== NOT EXECUTED status = IMFS_memfile_extend( the_jnode, last_byte ); a0010394: e1a00009 mov r0, r9 <== NOT EXECUTED a0010398: e3a02000 mov r2, #0 <== NOT EXECUTED a001039c: ebffff4f bl a00100e0 <== NOT EXECUTED if ( status ) a00103a0: e3500000 cmp r0, #0 <== NOT EXECUTED a00103a4: 0affffa6 beq a0010244 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); a00103a8: eb00034c bl a00110e0 <__errno> <== NOT EXECUTED a00103ac: e3a0301c mov r3, #28 <== NOT EXECUTED a00103b0: e5803000 str r3, [r0] <== NOT EXECUTED a00103b4: e3e00000 mvn r0, #0 <== NOT EXECUTED a00103b8: eaffffc7 b a00102dc <== NOT EXECUTED =============================================================================== a0005c28 : const char *token, /* IN */ mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { a0005c28: e92d41f0 push {r4, r5, r6, r7, r8, lr} a0005c2c: e24dd040 sub sp, sp, #64 ; 0x40 a0005c30: e1a04001 mov r4, r1 a0005c34: e1a08000 mov r8, r0 a0005c38: e1a07002 mov r7, r2 a0005c3c: e1a06003 mov r6, 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 ); a0005c40: eb003110 bl a0012088 a0005c44: e28d5004 add r5, sp, #4 a0005c48: e1a01000 mov r1, r0 a0005c4c: e1a02005 mov r2, r5 a0005c50: e1a00008 mov r0, r8 a0005c54: e28d303c add r3, sp, #60 ; 0x3c a0005c58: eb00212f bl a000e11c /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) a0005c5c: e2041a0f and r1, r4, #61440 ; 0xf000 a0005c60: e3510901 cmp r1, #16384 ; 0x4000 type = IMFS_DIRECTORY; a0005c64: 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) ) a0005c68: 0a000008 beq a0005c90 type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) a0005c6c: e3510902 cmp r1, #32768 ; 0x8000 type = IMFS_MEMORY_FILE; a0005c70: 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) ) a0005c74: 0a000005 beq a0005c90 type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { a0005c78: e3510a06 cmp r1, #24576 ; 0x6000 a0005c7c: 13510a02 cmpne r1, #8192 ; 0x2000 type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); a0005c80: 058d7028 streq r7, [sp, #40] ; 0x28 a0005c84: 058d602c streq r6, [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; a0005c88: 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) ) { a0005c8c: 1a00000a bne a0005cbc * 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 ); a0005c90: e28d3028 add r3, sp, #40 ; 0x28 a0005c94: e58d3000 str r3, [sp] a0005c98: e59d0058 ldr r0, [sp, #88] ; 0x58 a0005c9c: e1a02005 mov r2, r5 a0005ca0: e1a03004 mov r3, r4 a0005ca4: eb001e80 bl a000d6ac if ( !new_node ) a0005ca8: e3500000 cmp r0, #0 rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; a0005cac: 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 ) a0005cb0: 0a000005 beq a0005ccc rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; } a0005cb4: e28dd040 add sp, sp, #64 ; 0x40 a0005cb8: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { IMFS_token_types type = 0; a0005cbc: e3510a01 cmp r1, #4096 ; 0x1000 <== NOT EXECUTED a0005cc0: 03a01007 moveq r1, #7 <== NOT EXECUTED a0005cc4: 13a01000 movne r1, #0 <== NOT EXECUTED a0005cc8: eafffff0 b a0005c90 <== NOT EXECUTED * 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 ) rtems_set_errno_and_return_minus_one( ENOMEM ); a0005ccc: eb002d03 bl a00110e0 <__errno> <== NOT EXECUTED a0005cd0: e3a0300c mov r3, #12 <== NOT EXECUTED a0005cd4: e5803000 str r3, [r0] <== NOT EXECUTED a0005cd8: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005cdc: eafffff4 b a0005cb4 <== NOT EXECUTED =============================================================================== a0005ce0 : rtems_filesystem_mount_table_entry_t *mt_entry ) { IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; a0005ce0: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { a0005ce4: 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 ) a0005ce8: e593204c ldr r2, [r3, #76] ; 0x4c <== NOT EXECUTED a0005cec: e3520001 cmp r2, #1 <== NOT EXECUTED a0005cf0: 1a000002 bne a0005d00 <== 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; a0005cf4: e583005c str r0, [r3, #92] ; 0x5c <== NOT EXECUTED return 0; a0005cf8: e3a00000 mov r0, #0 <== NOT EXECUTED } a0005cfc: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); a0005d00: eb002cf6 bl a00110e0 <__errno> <== NOT EXECUTED a0005d04: e3a03014 mov r3, #20 <== NOT EXECUTED a0005d08: e5803000 str r3, [r0] <== NOT EXECUTED a0005d0c: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005d10: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a0005d14 : ) { IMFS_jnode_t *node; node = pathloc->node_access; return node->type; a0005d14: e5903000 ldr r3, [r0] <== NOT EXECUTED } a0005d18: e593004c ldr r0, [r3, #76] ; 0x4c <== NOT EXECUTED a0005d1c: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a00086e4 : * This routine prints the contents of the specified jnode. */ void IMFS_print_jnode( IMFS_jnode_t *the_jnode ) { a00086e4: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_assert( the_jnode ); fprintf(stdout, "%s", the_jnode->name ); a00086e8: e59f50f8 ldr r5, [pc, #248] ; a00087e8 <== NOT EXECUTED * This routine prints the contents of the specified jnode. */ void IMFS_print_jnode( IMFS_jnode_t *the_jnode ) { a00086ec: e1a04000 mov r4, r0 <== NOT EXECUTED IMFS_assert( the_jnode ); fprintf(stdout, "%s", the_jnode->name ); a00086f0: e280000c add r0, r0, #12 <== NOT EXECUTED a00086f4: e5953000 ldr r3, [r5] <== NOT EXECUTED a00086f8: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a00086fc: eb0034d9 bl a0015a68 <== NOT EXECUTED switch( the_jnode->type ) { a0008700: e594204c ldr r2, [r4, #76] ; 0x4c <== NOT EXECUTED a0008704: e2423001 sub r3, r2, #1 <== NOT EXECUTED a0008708: e3530006 cmp r3, #6 <== NOT EXECUTED a000870c: 979ff103 ldrls pc, [pc, r3, lsl #2] <== NOT EXECUTED a0008710: ea000023 b a00087a4 <== NOT EXECUTED a0008714: a00087b8 .word 0xa00087b8 <== NOT EXECUTED a0008718: a00087cc .word 0xa00087cc <== NOT EXECUTED a000871c: a0008730 .word 0xa0008730 <== NOT EXECUTED a0008720: a0008730 .word 0xa0008730 <== NOT EXECUTED a0008724: a0008768 .word 0xa0008768 <== NOT EXECUTED a0008728: a0008788 .word 0xa0008788 <== NOT EXECUTED a000872c: a000874c .word 0xa000874c <== NOT EXECUTED case IMFS_HARD_LINK: fprintf(stdout, " links not printed\n" ); return; case IMFS_SYM_LINK: fprintf(stdout, " links not printed\n" ); a0008730: e5953000 ldr r3, [r5] <== NOT EXECUTED a0008734: e59f00b0 ldr r0, [pc, #176] ; a00087ec <== NOT EXECUTED a0008738: e3a01001 mov r1, #1 <== NOT EXECUTED a000873c: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a0008740: e3a02013 mov r2, #19 <== NOT EXECUTED default: fprintf(stdout, " bad type %d\n", the_jnode->type ); return; } puts(""); } a0008744: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED case IMFS_HARD_LINK: fprintf(stdout, " links not printed\n" ); return; case IMFS_SYM_LINK: fprintf(stdout, " links not printed\n" ); a0008748: ea0037f6 b a0016728 <== NOT EXECUTED return; case IMFS_FIFO: fprintf(stdout, " FIFO not printed\n" ); a000874c: e5953000 ldr r3, [r5] <== NOT EXECUTED a0008750: e59f0098 ldr r0, [pc, #152] ; a00087f0 <== NOT EXECUTED a0008754: e3a01001 mov r1, #1 <== NOT EXECUTED a0008758: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED a000875c: e3a02012 mov r2, #18 <== NOT EXECUTED default: fprintf(stdout, " bad type %d\n", the_jnode->type ); return; } puts(""); } a0008760: 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" ); a0008764: ea0037ef b a0016728 <== NOT EXECUTED the_jnode->info.file.indirect, the_jnode->info.file.doubly_indirect, the_jnode->info.file.triply_indirect ); #else fprintf(stdout, " (file %" PRId32 ")", a0008768: e5953000 ldr r3, [r5] <== NOT EXECUTED a000876c: e59f1080 ldr r1, [pc, #128] ; a00087f4 <== NOT EXECUTED a0008770: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED a0008774: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED a0008778: eb003465 bl a0015914 <== NOT EXECUTED default: fprintf(stdout, " bad type %d\n", the_jnode->type ); return; } puts(""); a000877c: e59f0074 ldr r0, [pc, #116] ; a00087f8 <== NOT EXECUTED } a0008780: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED default: fprintf(stdout, " bad type %d\n", the_jnode->type ); return; } puts(""); a0008784: ea003bc9 b a00176b0 <== NOT EXECUTED fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")", the_jnode->info.device.major, the_jnode->info.device.minor ); break; case IMFS_LINEAR_FILE: fprintf(stdout, " (file %" PRId32 " %p)", a0008788: e5953000 ldr r3, [r5] <== NOT EXECUTED a000878c: e59f1068 ldr r1, [pc, #104] ; a00087fc <== NOT EXECUTED a0008790: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED a0008794: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED a0008798: e5943058 ldr r3, [r4, #88] ; 0x58 <== NOT EXECUTED a000879c: eb00345c bl a0015914 <== NOT EXECUTED (uint32_t)the_jnode->info.linearfile.size, the_jnode->info.linearfile.direct ); break; a00087a0: eafffff5 b a000877c <== NOT EXECUTED case IMFS_FIFO: fprintf(stdout, " FIFO not printed\n" ); return; default: fprintf(stdout, " bad type %d\n", the_jnode->type ); a00087a4: e5953000 ldr r3, [r5] <== NOT EXECUTED a00087a8: e59f1050 ldr r1, [pc, #80] ; a0008800 <== NOT EXECUTED a00087ac: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED return; } puts(""); } a00087b0: 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 ); a00087b4: ea003456 b a0015914 <== NOT EXECUTED IMFS_assert( the_jnode ); fprintf(stdout, "%s", the_jnode->name ); switch( the_jnode->type ) { case IMFS_DIRECTORY: fprintf(stdout, "/" ); a00087b8: e5953000 ldr r3, [r5] <== NOT EXECUTED a00087bc: e3a0002f mov r0, #47 ; 0x2f <== NOT EXECUTED a00087c0: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED a00087c4: eb003472 bl a0015994 <== NOT EXECUTED break; a00087c8: eaffffeb b a000877c <== NOT EXECUTED case IMFS_DEVICE: fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")", a00087cc: e5953000 ldr r3, [r5] <== NOT EXECUTED a00087d0: e59f102c ldr r1, [pc, #44] ; a0008804 <== NOT EXECUTED a00087d4: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED a00087d8: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED a00087dc: e5943054 ldr r3, [r4, #84] ; 0x54 <== NOT EXECUTED a00087e0: eb00344b bl a0015914 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor ); break; a00087e4: eaffffe4 b a000877c <== NOT EXECUTED =============================================================================== a0005d20 : node = loc->node_access; IMFS_assert( node->type == IMFS_SYM_LINK ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) a0005d20: e3520000 cmp r2, #0 <== NOT EXECUTED ssize_t IMFS_readlink( rtems_filesystem_location_info_t *loc, char *buf, /* OUT */ size_t bufsize ) { a0005d24: e52d4004 push {r4} ; (str r4, [sp, #-4]!) <== NOT EXECUTED IMFS_jnode_t *node; ssize_t i; node = loc->node_access; a0005d28: e5904000 ldr r4, [r0] <== NOT EXECUTED IMFS_assert( node->type == IMFS_SYM_LINK ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) a0005d2c: 01a00002 moveq r0, r2 <== NOT EXECUTED a0005d30: 0a000010 beq a0005d78 <== NOT EXECUTED a0005d34: e5943050 ldr r3, [r4, #80] ; 0x50 <== NOT EXECUTED a0005d38: e5d33000 ldrb r3, [r3] <== NOT EXECUTED a0005d3c: e3530000 cmp r3, #0 <== NOT EXECUTED a0005d40: 01a00003 moveq r0, r3 <== NOT EXECUTED a0005d44: 0a00000b beq a0005d78 <== NOT EXECUTED a0005d48: e3a0c000 mov ip, #0 <== NOT EXECUTED a0005d4c: e1a0000c mov r0, ip <== NOT EXECUTED a0005d50: ea000003 b a0005d64 <== NOT EXECUTED a0005d54: e5943050 ldr r3, [r4, #80] ; 0x50 <== NOT EXECUTED a0005d58: e7d33000 ldrb r3, [r3, r0] <== NOT EXECUTED a0005d5c: e3530000 cmp r3, #0 <== NOT EXECUTED a0005d60: 0a000004 beq a0005d78 <== NOT EXECUTED a0005d64: e2800001 add r0, r0, #1 <== NOT EXECUTED a0005d68: e1500002 cmp r0, r2 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; a0005d6c: e7c1300c strb r3, [r1, ip] <== NOT EXECUTED node = loc->node_access; IMFS_assert( node->type == IMFS_SYM_LINK ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) a0005d70: e1a0c000 mov ip, r0 <== NOT EXECUTED a0005d74: 3afffff6 bcc a0005d54 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; return i; } a0005d78: e8bd0010 pop {r4} <== NOT EXECUTED a0005d7c: e12fff1e bx lr <== NOT EXECUTED =============================================================================== a0005d80 : 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 */ ) { a0005d80: e92d4030 push {r4, r5, lr} <== NOT EXECUTED IMFS_jnode_t *the_jnode; IMFS_jnode_t *new_parent; the_jnode = old_loc->node_access; a0005d84: 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 */ ) { a0005d88: e24dd008 sub sp, sp, #8 <== 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 ); a0005d8c: e1a01003 mov r1, r3 <== 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 */ ) { a0005d90: 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 ); a0005d94: e284000c add r0, r4, #12 <== NOT EXECUTED a0005d98: e3a02020 mov r2, #32 <== NOT EXECUTED a0005d9c: eb0030d1 bl a00120e8 <== NOT EXECUTED if ( the_jnode->Parent != NULL ) a0005da0: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED a0005da4: e3530000 cmp r3, #0 <== NOT EXECUTED a0005da8: 0a000001 beq a0005db4 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void rtems_chain_extract( rtems_chain_node *the_node ) { _Chain_Extract( the_node ); a0005dac: e1a00004 mov r0, r4 <== NOT EXECUTED a0005db0: eb001198 bl a000a418 <_Chain_Extract> <== NOT EXECUTED rtems_chain_extract( (rtems_chain_node *) the_jnode ); new_parent = new_parent_loc->node_access; a0005db4: e5953000 ldr r3, [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 ); a0005db8: e1a01004 mov r1, r4 <== NOT EXECUTED a0005dbc: e2830050 add r0, r3, #80 ; 0x50 <== NOT EXECUTED the_jnode->Parent = new_parent; a0005dc0: e5843008 str r3, [r4, #8] <== NOT EXECUTED a0005dc4: eb001188 bl a000a3ec <_Chain_Append> <== NOT EXECUTED rtems_chain_append( &new_parent->info.directory.Entries, &the_jnode->Node ); /* * Update the time. */ IMFS_update_ctime( the_jnode ); a0005dc8: e1a0000d mov r0, sp <== NOT EXECUTED a0005dcc: e3a01000 mov r1, #0 <== NOT EXECUTED a0005dd0: eb00019c bl a0006448 <== NOT EXECUTED a0005dd4: e59d3000 ldr r3, [sp] <== NOT EXECUTED return 0; } a0005dd8: 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 ); a0005ddc: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED return 0; } a0005de0: e28dd008 add sp, sp, #8 <== NOT EXECUTED a0005de4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED =============================================================================== a000e2ac : int IMFS_rmnod( rtems_filesystem_location_info_t *parent_pathloc, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN */ ) { a000e2ac: e92d4010 push {r4, lr} <== NOT EXECUTED IMFS_jnode_t *jnode = (IMFS_jnode_t *) pathloc->node_access; a000e2b0: e5914000 ldr r4, [r1] <== NOT EXECUTED IMFS_create_orphan( jnode ); a000e2b4: e1a00004 mov r0, r4 <== NOT EXECUTED a000e2b8: ebffffcb bl a000e1ec <== NOT EXECUTED IMFS_check_node_remove( jnode ); a000e2bc: e1a00004 mov r0, r4 <== NOT EXECUTED a000e2c0: ebffffdc bl a000e238 <== NOT EXECUTED return 0; } a000e2c4: e3a00000 mov r0, #0 <== NOT EXECUTED a000e2c8: e8bd8010 pop {r4, pc} <== NOT EXECUTED =============================================================================== a000e2cc : { IMFS_fs_info_t *fs_info; IMFS_jnode_t *the_jnode; IMFS_device_t *io; the_jnode = loc->node_access; a000e2cc: e5903000 ldr r3, [r0] <== NOT EXECUTED int IMFS_stat( rtems_filesystem_location_info_t *loc, struct stat *buf ) { a000e2d0: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED IMFS_device_t *io; the_jnode = loc->node_access; switch ( the_jnode->type ) { a000e2d4: e593204c ldr r2, [r3, #76] ; 0x4c <== NOT EXECUTED a000e2d8: e2422002 sub r2, r2, #2 <== NOT EXECUTED a000e2dc: e3520005 cmp r2, #5 <== NOT EXECUTED a000e2e0: 979ff102 ldrls pc, [pc, r2, lsl #2] <== NOT EXECUTED a000e2e4: ea000027 b a000e388 <== NOT EXECUTED a000e2e8: a000e374 .word 0xa000e374 <== NOT EXECUTED a000e2ec: a000e388 .word 0xa000e388 <== NOT EXECUTED a000e2f0: a000e300 .word 0xa000e300 <== NOT EXECUTED a000e2f4: a000e39c .word 0xa000e39c <== NOT EXECUTED a000e2f8: a000e39c .word 0xa000e39c <== NOT EXECUTED a000e2fc: a000e300 .word 0xa000e300 <== NOT EXECUTED case IMFS_SYM_LINK: buf->st_size = 0; break; case IMFS_FIFO: buf->st_size = 0; a000e300: e3a04000 mov r4, #0 <== NOT EXECUTED a000e304: e3a05000 mov r5, #0 <== NOT EXECUTED a000e308: e5814020 str r4, [r1, #32] <== NOT EXECUTED a000e30c: e5815024 str r5, [r1, #36] ; 0x24 <== 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; a000e310: e5902010 ldr r2, [r0, #16] <== NOT EXECUTED buf->st_dev = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; a000e314: e5936030 ldr r6, [r3, #48] ; 0x30 <== NOT EXECUTED 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; buf->st_ctime = the_jnode->stat_ctime; a000e318: e5930048 ldr r0, [r3, #72] ; 0x48 <== 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 = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); a000e31c: e5922034 ldr r2, [r2, #52] ; 0x34 <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; a000e320: e5935038 ldr r5, [r3, #56] ; 0x38 <== NOT EXECUTED buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_atime = the_jnode->stat_atime; a000e324: e5934040 ldr r4, [r3, #64] ; 0x40 <== 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 = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); a000e328: e5927000 ldr r7, [r2] <== NOT EXECUTED rtems_device_minor_number _minor ) { union __rtems_dev_t temp; temp.__overlay.major = _major; a000e32c: e3a02cff mov r2, #65280 ; 0xff00 <== NOT EXECUTED a000e330: e28220fe add r2, r2, #254 ; 0xfe <== 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; a000e334: e593c044 ldr ip, [r3, #68] ; 0x44 <== NOT EXECUTED fs_info = loc->mt_entry->fs_info; buf->st_dev = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; a000e338: e1d383b4 ldrh r8, [r3, #52] ; 0x34 <== 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 = a000e33c: e5812000 str r2, [r1] <== NOT EXECUTED rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; buf->st_uid = the_jnode->st_uid; a000e340: e1d323bc ldrh r2, [r3, #60] ; 0x3c <== NOT EXECUTED buf->st_gid = the_jnode->st_gid; a000e344: e1d333be ldrh r3, [r3, #62] ; 0x3e <== NOT EXECUTED fs_info = loc->mt_entry->fs_info; buf->st_dev = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; a000e348: e1c181b0 strh r8, [r1, #16] <== NOT EXECUTED 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; buf->st_ctime = the_jnode->stat_ctime; a000e34c: e5810038 str r0, [r1, #56] ; 0x38 <== NOT EXECUTED rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; buf->st_uid = the_jnode->st_uid; a000e350: e1c121b2 strh r2, [r1, #18] <== 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 = a000e354: e5817004 str r7, [r1, #4] <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; a000e358: e1c131b4 strh r3, [r1, #20] <== NOT EXECUTED */ fs_info = loc->mt_entry->fs_info; buf->st_dev = rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance ); buf->st_mode = the_jnode->st_mode; a000e35c: e581600c str r6, [r1, #12] <== NOT EXECUTED buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; a000e360: e5815008 str r5, [r1, #8] <== NOT EXECUTED buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_atime = the_jnode->stat_atime; a000e364: e5814028 str r4, [r1, #40] ; 0x28 <== NOT EXECUTED buf->st_mtime = the_jnode->stat_mtime; a000e368: e581c030 str ip, [r1, #48] ; 0x30 <== NOT EXECUTED buf->st_ctime = the_jnode->stat_ctime; return 0; a000e36c: e3a00000 mov r0, #0 <== NOT EXECUTED } a000e370: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED switch ( the_jnode->type ) { case IMFS_DEVICE: io = &the_jnode->info.device; buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor ); a000e374: e593c054 ldr ip, [r3, #84] ; 0x54 <== NOT EXECUTED a000e378: e5932050 ldr r2, [r3, #80] ; 0x50 <== NOT EXECUTED a000e37c: e581c01c str ip, [r1, #28] <== NOT EXECUTED a000e380: e5812018 str r2, [r1, #24] <== NOT EXECUTED break; a000e384: eaffffe1 b a000e310 <== NOT EXECUTED case IMFS_FIFO: buf->st_size = 0; break; default: rtems_set_errno_and_return_minus_one( ENOTSUP ); a000e388: eb000b54 bl a00110e0 <__errno> <== NOT EXECUTED a000e38c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED a000e390: e5803000 str r3, [r0] <== NOT EXECUTED a000e394: e3e00000 mvn r0, #0 <== NOT EXECUTED a000e398: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor ); break; case IMFS_LINEAR_FILE: case IMFS_MEMORY_FILE: buf->st_size = the_jnode->info.file.size; a000e39c: e2835050 add r5, r3, #80 ; 0x50 <== NOT EXECUTED a000e3a0: e8950030 ldm r5, {r4, r5} <== NOT EXECUTED a000e3a4: e5814020 str r4, [r1, #32] <== NOT EXECUTED a000e3a8: e5815024 str r5, [r1, #36] ; 0x24 <== NOT EXECUTED break; a000e3ac: eaffffd7 b a000e310 <== NOT EXECUTED =============================================================================== a0005de8 : int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { a0005de8: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED a0005dec: e1a06000 mov r6, r0 <== NOT EXECUTED a0005df0: 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 ); a0005df4: e1a00002 mov r0, r2 <== NOT EXECUTED int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { a0005df8: e1a07002 mov r7, r2 <== NOT EXECUTED a0005dfc: e1a05001 mov r5, r1 <== NOT EXECUTED int i; /* * Remove any separators at the end of the string. */ IMFS_get_token( node_name, strlen( node_name ), new_name, &i ); a0005e00: eb0030a0 bl a0012088 <== NOT EXECUTED a0005e04: e28d4004 add r4, sp, #4 <== NOT EXECUTED a0005e08: e1a01000 mov r1, r0 <== NOT EXECUTED a0005e0c: e1a02004 mov r2, r4 <== NOT EXECUTED a0005e10: e28d303c add r3, sp, #60 ; 0x3c <== NOT EXECUTED a0005e14: e1a00007 mov r0, r7 <== NOT EXECUTED a0005e18: eb0020bf bl a000e11c <== NOT EXECUTED /* * Duplicate link name */ info.sym_link.name = strdup(link_name); a0005e1c: e1a00005 mov r0, r5 <== NOT EXECUTED a0005e20: eb003084 bl a0012038 <== NOT EXECUTED if (info.sym_link.name == NULL) { a0005e24: 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); a0005e28: e58d0028 str r0, [sp, #40] ; 0x28 <== NOT EXECUTED if (info.sym_link.name == NULL) { a0005e2c: 0a00000e beq a0005e6c <== 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( a0005e30: e28d2028 add r2, sp, #40 ; 0x28 <== NOT EXECUTED a0005e34: e3a03ca2 mov r3, #41472 ; 0xa200 <== NOT EXECUTED a0005e38: e58d2000 str r2, [sp] <== NOT EXECUTED a0005e3c: e3a01004 mov r1, #4 <== NOT EXECUTED a0005e40: e1a00006 mov r0, r6 <== NOT EXECUTED a0005e44: e1a02004 mov r2, r4 <== NOT EXECUTED a0005e48: e2433001 sub r3, r3, #1 <== NOT EXECUTED a0005e4c: eb001e16 bl a000d6ac <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if (new_node == NULL) { a0005e50: e3500000 cmp r0, #0 <== NOT EXECUTED free(info.sym_link.name); rtems_set_errno_and_return_minus_one(ENOMEM); } return 0; a0005e54: 13a00000 movne r0, #0 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if (new_node == NULL) { a0005e58: 0a000001 beq a0005e64 <== NOT EXECUTED free(info.sym_link.name); rtems_set_errno_and_return_minus_one(ENOMEM); } return 0; } a0005e5c: e28dd040 add sp, sp, #64 ; 0x40 <== NOT EXECUTED a0005e60: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if (new_node == NULL) { free(info.sym_link.name); a0005e64: e59d0028 ldr r0, [sp, #40] ; 0x28 <== NOT EXECUTED a0005e68: eb000141 bl a0006374 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); a0005e6c: eb002c9b bl a00110e0 <__errno> <== NOT EXECUTED a0005e70: e3a0300c mov r3, #12 <== NOT EXECUTED a0005e74: e5803000 str r3, [r0] <== NOT EXECUTED a0005e78: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005e7c: eafffff6 b a0005e5c <== NOT EXECUTED =============================================================================== a0005e80 : int IMFS_unlink( rtems_filesystem_location_info_t *parentloc, /* IN */ rtems_filesystem_location_info_t *loc /* IN */ ) { a0005e80: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED IMFS_jnode_t *node; rtems_filesystem_location_info_t the_link; int result = 0; node = loc->node_access; a0005e84: e5915000 ldr r5, [r1] <== NOT EXECUTED int IMFS_unlink( rtems_filesystem_location_info_t *parentloc, /* IN */ rtems_filesystem_location_info_t *loc /* IN */ ) { a0005e88: e24dd01c sub sp, sp, #28 <== NOT EXECUTED a0005e8c: 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 ) { a0005e90: 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 */ ) { a0005e94: 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 ) { a0005e98: e3530003 cmp r3, #3 <== NOT EXECUTED a0005e9c: 0a000006 beq a0005ebc <== NOT EXECUTED /* * Now actually free the node we were asked to free. */ result = (*loc->handlers->rmnod_h)( parentloc, loc ); a0005ea0: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED a0005ea4: e1a00006 mov r0, r6 <== NOT EXECUTED a0005ea8: e1a01004 mov r1, r4 <== NOT EXECUTED a0005eac: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED a0005eb0: e12fff33 blx r3 <== NOT EXECUTED return result; } a0005eb4: e28dd01c add sp, sp, #28 <== NOT EXECUTED a0005eb8: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED * free the node. */ if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) a0005ebc: e595e050 ldr lr, [r5, #80] ; 0x50 <== NOT EXECUTED a0005ec0: e35e0000 cmp lr, #0 <== NOT EXECUTED a0005ec4: 0a00001f beq a0005f48 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); the_link = *loc; a0005ec8: e1a0c00d mov ip, sp <== NOT EXECUTED a0005ecc: e1a07001 mov r7, r1 <== NOT EXECUTED a0005ed0: e8b7000f ldm r7!, {r0, r1, r2, r3} <== NOT EXECUTED a0005ed4: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED a0005ed8: e5973000 ldr r3, [r7] <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; a0005edc: e28d801c add r8, sp, #28 <== NOT EXECUTED IMFS_Set_handlers( &the_link ); a0005ee0: 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; a0005ee4: e58c3000 str r3, [ip] <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; a0005ee8: e528e01c str lr, [r8, #-28]! <== NOT EXECUTED IMFS_Set_handlers( &the_link ); a0005eec: eb001e52 bl a000d83c <== 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) a0005ef0: e5953050 ldr r3, [r5, #80] ; 0x50 <== NOT EXECUTED a0005ef4: e1d323b4 ldrh r2, [r3, #52] ; 0x34 <== NOT EXECUTED a0005ef8: e3520001 cmp r2, #1 <== NOT EXECUTED a0005efc: 0a000008 beq a0005f24 <== NOT EXECUTED if ( result != 0 ) return -1; } else { node->info.hard_link.link_node->st_nlink --; a0005f00: e2422001 sub r2, r2, #1 <== NOT EXECUTED a0005f04: e1c323b4 strh r2, [r3, #52] ; 0x34 <== NOT EXECUTED IMFS_update_ctime( node->info.hard_link.link_node ); a0005f08: e28d0014 add r0, sp, #20 <== NOT EXECUTED a0005f0c: e3a01000 mov r1, #0 <== NOT EXECUTED a0005f10: eb00014c bl a0006448 <== NOT EXECUTED a0005f14: e5953050 ldr r3, [r5, #80] ; 0x50 <== NOT EXECUTED a0005f18: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED a0005f1c: e5832048 str r2, [r3, #72] ; 0x48 <== NOT EXECUTED a0005f20: eaffffde b a0005ea0 <== NOT EXECUTED * to remove the node that is a link and the node itself. */ if ( node->info.hard_link.link_node->st_nlink == 1) { result = (*the_link.handlers->rmnod_h)( parentloc, &the_link ); a0005f24: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED a0005f28: e1a00006 mov r0, r6 <== NOT EXECUTED a0005f2c: e1a0100d mov r1, sp <== NOT EXECUTED a0005f30: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED a0005f34: e12fff33 blx r3 <== NOT EXECUTED if ( result != 0 ) a0005f38: e3500000 cmp r0, #0 <== NOT EXECUTED a0005f3c: 0affffd7 beq a0005ea0 <== NOT EXECUTED return -1; a0005f40: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005f44: eaffffda b a0005eb4 <== NOT EXECUTED */ if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) rtems_set_errno_and_return_minus_one( EINVAL ); a0005f48: eb002c64 bl a00110e0 <__errno> <== NOT EXECUTED a0005f4c: e3a03016 mov r3, #22 <== NOT EXECUTED a0005f50: e5803000 str r3, [r0] <== NOT EXECUTED a0005f54: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005f58: eaffffd5 b a0005eb4 <== NOT EXECUTED =============================================================================== a0005f5c : rtems_filesystem_mount_table_entry_t *mt_entry ) { IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; a0005f5c: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { a0005f60: 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 ) a0005f64: e593204c ldr r2, [r3, #76] ; 0x4c <== NOT EXECUTED a0005f68: e3520001 cmp r2, #1 <== NOT EXECUTED a0005f6c: 1a000005 bne a0005f88 <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) a0005f70: e593205c ldr r2, [r3, #92] ; 0x5c <== NOT EXECUTED a0005f74: e3520000 cmp r2, #0 <== NOT EXECUTED a0005f78: 0a000007 beq a0005f9c <== 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; a0005f7c: e3a00000 mov r0, #0 <== NOT EXECUTED a0005f80: e583005c str r0, [r3, #92] ; 0x5c <== NOT EXECUTED return 0; } a0005f84: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); a0005f88: eb002c54 bl a00110e0 <__errno> <== NOT EXECUTED a0005f8c: e3a03014 mov r3, #20 <== NOT EXECUTED a0005f90: e5803000 str r3, [r0] <== NOT EXECUTED a0005f94: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005f98: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */ a0005f9c: eb002c4f bl a00110e0 <__errno> <== NOT EXECUTED a0005fa0: e3a03016 mov r3, #22 <== NOT EXECUTED a0005fa4: e5803000 str r3, [r0] <== NOT EXECUTED a0005fa8: e3e00000 mvn r0, #0 <== NOT EXECUTED a0005fac: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED =============================================================================== a0005fb0 : int IMFS_utime( rtems_filesystem_location_info_t *pathloc, /* IN */ time_t actime, /* IN */ time_t modtime /* IN */ ) { a0005fb0: e92d4010 push {r4, lr} <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; a0005fb4: e5904000 ldr r4, [r0] <== NOT EXECUTED the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; the_jnode->stat_ctime = time( NULL ); a0005fb8: e3a00000 mov r0, #0 <== NOT EXECUTED { IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; the_jnode->stat_atime = actime; a0005fbc: e5841040 str r1, [r4, #64] ; 0x40 <== NOT EXECUTED the_jnode->stat_mtime = modtime; a0005fc0: e5842044 str r2, [r4, #68] ; 0x44 <== NOT EXECUTED the_jnode->stat_ctime = time( NULL ); a0005fc4: eb003082 bl a00121d4