4000af8c : { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { 4000af8c: c2 02 00 00 ld [ %o0 ], %g1 ) { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; 4000af90: c4 02 20 0c ld [ %o0 + 0xc ], %g2 switch( node->type ) { 4000af94: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 4000af98: 80 a0 60 06 cmp %g1, 6 4000af9c: 18 80 00 0a bgu 4000afc4 4000afa0: c8 00 a0 2c ld [ %g2 + 0x2c ], %g4 4000afa4: 83 28 60 02 sll %g1, 2, %g1 4000afa8: 05 10 00 2b sethi %hi(0x4000ac00), %g2 4000afac: 84 10 a3 70 or %g2, 0x370, %g2 ! 4000af70 4000afb0: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000afb4: 81 c0 c0 00 jmp %g3 4000afb8: 01 00 00 00 nop case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; 4000afbc: c2 01 20 08 ld [ %g4 + 8 ], %g1 4000afc0: c2 22 20 04 st %g1, [ %o0 + 4 ] loc->handlers = fs_info->memfile_handlers; break; } return 0; } 4000afc4: 81 c3 e0 08 retl 4000afc8: 90 10 20 00 clr %o0 break; case IMFS_LINEAR_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; 4000afcc: c2 01 20 04 ld [ %g4 + 4 ], %g1 <== NOT EXECUTED 4000afd0: c2 22 20 04 st %g1, [ %o0 + 4 ] <== NOT EXECUTED break; } return 0; } 4000afd4: 81 c3 e0 08 retl <== NOT EXECUTED 4000afd8: 90 10 20 00 clr %o0 <== NOT EXECUTED case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; break; case IMFS_SYM_LINK: case IMFS_HARD_LINK: loc->handlers = &IMFS_link_handlers; 4000afdc: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000afe0: 82 10 60 f8 or %g1, 0xf8, %g1 ! 400190f8 <== NOT EXECUTED 4000afe4: c2 22 20 04 st %g1, [ %o0 + 4 ] <== NOT EXECUTED loc->handlers = fs_info->memfile_handlers; break; } return 0; } 4000afe8: 81 c3 e0 08 retl <== NOT EXECUTED 4000afec: 90 10 20 00 clr %o0 <== NOT EXECUTED switch( node->type ) { case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; break; case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; 4000aff0: 03 10 00 64 sethi %hi(0x40019000), %g1 4000aff4: 82 10 60 c0 or %g1, 0xc0, %g1 ! 400190c0 4000aff8: c2 22 20 04 st %g1, [ %o0 + 4 ] loc->handlers = fs_info->memfile_handlers; break; } return 0; } 4000affc: 81 c3 e0 08 retl 4000b000: 90 10 20 00 clr %o0 40016ecc : int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { 40016ecc: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *jnode; #if defined(RTEMS_POSIX_API) uid_t st_uid; #endif jnode = (IMFS_jnode_t *) pathloc->node_access; 40016ed0: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); 40016ed4: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED if ( ( st_uid != jnode->st_uid ) && ( st_uid != 0 ) ) rtems_set_errno_and_return_minus_one( EPERM ); #endif jnode->st_uid = owner; 40016ed8: f2 34 20 38 sth %i1, [ %l0 + 0x38 ] <== NOT EXECUTED jnode->st_gid = group; 40016edc: f4 34 20 3a sth %i2, [ %l0 + 0x3a ] <== NOT EXECUTED IMFS_update_ctime( jnode ); 40016ee0: 7f ff b8 53 call 4000502c <== NOT EXECUTED 40016ee4: 92 10 20 00 clr %o1 <== NOT EXECUTED 40016ee8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40016eec: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED return 0; } 40016ef0: 81 c7 e0 08 ret <== NOT EXECUTED 40016ef4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000d7d0 : IMFS_jnode_types_t type, char *name, mode_t mode, IMFS_types_union *info ) { 4000d7d0: 9d e3 bf 90 save %sp, -112, %sp struct timeval tv; IMFS_jnode_t *parent = NULL; IMFS_fs_info_t *fs_info; char *sym_name; if ( parent_loc != NULL ) 4000d7d4: a6 96 20 00 orcc %i0, 0, %l3 4000d7d8: 02 80 00 03 be 4000d7e4 4000d7dc: a4 10 20 00 clr %l2 parent = parent_loc->node_access; 4000d7e0: e4 04 c0 00 ld [ %l3 ], %l2 /* * Allocate an IMFS jnode */ node = calloc( 1, sizeof( IMFS_jnode_t ) ); 4000d7e4: 90 10 20 01 mov 1, %o0 4000d7e8: 92 10 20 5c mov 0x5c, %o1 4000d7ec: 7f ff d3 6c call 4000259c 4000d7f0: b0 10 20 00 clr %i0 if ( !node ) 4000d7f4: a2 92 20 00 orcc %o0, 0, %l1 4000d7f8: 02 80 00 22 be 4000d880 4000d7fc: 82 10 20 01 mov 1, %g1 * Fill in the basic information */ node->st_nlink = 1; node->type = type; strncpy( node->name, name, IMFS_NAME_MAX ); 4000d800: 92 10 00 1a mov %i2, %o1 4000d804: 94 10 20 20 mov 0x20, %o2 /* * Fill in the basic information */ node->st_nlink = 1; 4000d808: c2 34 60 30 sth %g1, [ %l1 + 0x30 ] node->type = type; 4000d80c: f2 24 60 48 st %i1, [ %l1 + 0x48 ] strncpy( node->name, name, IMFS_NAME_MAX ); 4000d810: 40 00 07 92 call 4000f658 4000d814: 90 04 60 0c add %l1, 0xc, %o0 /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 4000d818: 03 10 00 64 sethi %hi(0x40019000), %g1 4000d81c: c4 00 61 30 ld [ %g1 + 0x130 ], %g2 ! 40019130 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000d820: 90 07 bf f0 add %fp, -16, %o0 /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 4000d824: c2 10 a0 24 lduh [ %g2 + 0x24 ], %g1 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000d828: 92 10 20 00 clr %o1 /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 4000d82c: 82 2e c0 01 andn %i3, %g1, %g1 #if defined(RTEMS_POSIX_API) node->st_uid = geteuid(); node->st_gid = getegid(); #else node->st_uid = 0; 4000d830: c0 34 60 38 clrh [ %l1 + 0x38 ] /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 4000d834: c2 34 60 2e sth %g1, [ %l1 + 0x2e ] /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000d838: 7f ff f9 f7 call 4000c014 4000d83c: c0 34 60 3a clrh [ %l1 + 0x3a ] node->stat_atime = (time_t) tv.tv_sec; 4000d840: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* * Allocate an IMFS jnode */ node = calloc( 1, sizeof( IMFS_jnode_t ) ); 4000d844: b0 10 00 11 mov %l1, %i0 gettimeofday( &tv, 0 ); node->stat_atime = (time_t) tv.tv_sec; node->stat_mtime = (time_t) tv.tv_sec; node->stat_ctime = (time_t) tv.tv_sec; 4000d848: c2 24 60 44 st %g1, [ %l1 + 0x44 ] * Now set all the times. */ gettimeofday( &tv, 0 ); node->stat_atime = (time_t) tv.tv_sec; 4000d84c: c2 24 60 3c st %g1, [ %l1 + 0x3c ] /* * Set the type specific information */ switch (type) { 4000d850: 80 a6 60 06 cmp %i1, 6 4000d854: 08 80 00 0d bleu 4000d888 4000d858: c2 24 60 40 st %g1, [ %l1 + 0x40 ] node->info.file.doubly_indirect = 0; node->info.file.triply_indirect = 0; break; default: assert(0); 4000d85c: 11 10 00 60 sethi %hi(0x40018000), %o0 <== NOT EXECUTED 4000d860: 15 10 00 5f sethi %hi(0x40017c00), %o2 <== NOT EXECUTED 4000d864: 90 12 23 a8 or %o0, 0x3a8, %o0 <== NOT EXECUTED 4000d868: 94 12 a1 e0 or %o2, 0x1e0, %o2 <== NOT EXECUTED 4000d86c: 7f ff d1 b2 call 40001f34 <__assert> <== NOT EXECUTED 4000d870: 92 10 20 77 mov 0x77, %o1 <== NOT EXECUTED /* * If this node has a parent, then put it in that directory list. */ if ( parent ) { 4000d874: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 4000d878: 12 80 00 13 bne 4000d8c4 <== NOT EXECUTED 4000d87c: 90 04 a0 4c add %l2, 0x4c, %o0 <== NOT EXECUTED node->st_ino = ++fs_info->ino_count; } return node; } 4000d880: 81 c7 e0 08 ret 4000d884: 81 e8 00 00 restore /* * Set the type specific information */ switch (type) { 4000d888: 83 2e 60 02 sll %i1, 2, %g1 4000d88c: 05 10 00 35 sethi %hi(0x4000d400), %g2 4000d890: 84 10 a3 b4 or %g2, 0x3b4, %g2 ! 4000d7b4 4000d894: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000d898: 81 c0 c0 00 jmp %g3 4000d89c: 01 00 00 00 nop node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; break; case IMFS_LINEAR_FILE: node->info.linearfile.size = 0; 4000d8a0: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.linearfile.direct = 0; 4000d8a4: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED case IMFS_MEMORY_FILE: node->info.file.size = 0; 4000d8a8: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.file.indirect = 0; 4000d8ac: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED node->info.file.doubly_indirect = 0; 4000d8b0: c0 24 60 54 clr [ %l1 + 0x54 ] <== NOT EXECUTED node->info.file.triply_indirect = 0; 4000d8b4: c0 24 60 58 clr [ %l1 + 0x58 ] <== NOT EXECUTED /* * If this node has a parent, then put it in that directory list. */ if ( parent ) { 4000d8b8: 80 a4 a0 00 cmp %l2, 0 4000d8bc: 02 bf ff f1 be 4000d880 4000d8c0: 90 04 a0 4c add %l2, 0x4c, %o0 Chain_Append( &parent->info.directory.Entries, &node->Node ); 4000d8c4: 7f ff e4 fe call 40006cbc <_Chain_Append> 4000d8c8: 92 10 00 11 mov %l1, %o1 node->Parent = parent; fs_info = parent_loc->mt_entry->fs_info; 4000d8cc: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 * If this node has a parent, then put it in that directory list. */ if ( parent ) { Chain_Append( &parent->info.directory.Entries, &node->Node ); node->Parent = parent; 4000d8d0: e4 24 60 08 st %l2, [ %l1 + 8 ] fs_info = parent_loc->mt_entry->fs_info; 4000d8d4: c6 00 60 2c ld [ %g1 + 0x2c ], %g3 node->st_ino = ++fs_info->ino_count; 4000d8d8: c4 00 c0 00 ld [ %g3 ], %g2 4000d8dc: 84 00 a0 01 inc %g2 4000d8e0: c4 20 c0 00 st %g2, [ %g3 ] 4000d8e4: c4 24 60 34 st %g2, [ %l1 + 0x34 ] } return node; } 4000d8e8: 81 c7 e0 08 ret 4000d8ec: 81 e8 00 00 restore case IMFS_HARD_LINK: node->info.hard_link.link_node = info->hard_link.link_node; break; case IMFS_SYM_LINK: sym_name = calloc( 1, strlen( info->sym_link.name ) + 1 ); 4000d8f0: 40 00 06 f0 call 4000f4b0 <== NOT EXECUTED 4000d8f4: d0 07 00 00 ld [ %i4 ], %o0 <== NOT EXECUTED 4000d8f8: 92 02 20 01 add %o0, 1, %o1 <== NOT EXECUTED 4000d8fc: 7f ff d3 28 call 4000259c <== NOT EXECUTED 4000d900: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED strcpy( sym_name, info->sym_link.name ); 4000d904: d2 07 00 00 ld [ %i4 ], %o1 <== NOT EXECUTED 4000d908: 40 00 06 ca call 4000f430 <== NOT EXECUTED 4000d90c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED node->info.sym_link.name = sym_name; 4000d910: 10 bf ff ea b 4000d8b8 <== NOT EXECUTED 4000d914: e0 24 60 4c st %l0, [ %l1 + 0x4c ] <== NOT EXECUTED case IMFS_DIRECTORY: Chain_Initialize_empty(&node->info.directory.Entries); break; case IMFS_HARD_LINK: node->info.hard_link.link_node = info->hard_link.link_node; 4000d918: c2 07 00 00 ld [ %i4 ], %g1 <== NOT EXECUTED 4000d91c: 10 bf ff e7 b 4000d8b8 <== NOT EXECUTED 4000d920: c2 24 60 4c st %g1, [ %l1 + 0x4c ] <== NOT EXECUTED node->info.sym_link.name = sym_name; break; case IMFS_DEVICE: node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; 4000d924: c2 07 20 04 ld [ %i4 + 4 ], %g1 strcpy( sym_name, info->sym_link.name ); node->info.sym_link.name = sym_name; break; case IMFS_DEVICE: node->info.device.major = info->device.major; 4000d928: c4 07 00 00 ld [ %i4 ], %g2 node->info.device.minor = info->device.minor; 4000d92c: c2 24 60 50 st %g1, [ %l1 + 0x50 ] strcpy( sym_name, info->sym_link.name ); node->info.sym_link.name = sym_name; break; case IMFS_DEVICE: node->info.device.major = info->device.major; 4000d930: 10 bf ff e2 b 4000d8b8 4000d934: c4 24 60 4c st %g2, [ %l1 + 0x4c ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000d938: 82 04 60 50 add %l1, 0x50, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000d93c: 84 04 60 4c add %l1, 0x4c, %g2 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4000d940: c0 24 60 50 clr [ %l1 + 0x50 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000d944: c2 24 60 4c st %g1, [ %l1 + 0x4c ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000d948: 10 bf ff dc b 4000d8b8 4000d94c: c4 24 60 54 st %g2, [ %l1 + 0x54 ] 4000b08c : int IMFS_eval_path( const char *pathname, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000b08c: 9d e3 bf 70 save %sp, -144, %sp /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000b090: e4 06 80 00 ld [ %i2 ], %l2 4000b094: a8 10 20 00 clr %l4 4000b098: aa 07 bf d3 add %fp, -45, %l5 4000b09c: ac 07 bf f4 add %fp, -12, %l6 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000b0a0: 2f 10 00 64 sethi %hi(0x40019000), %l7 * 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], token, &len ); 4000b0a4: 90 06 00 14 add %i0, %l4, %o0 4000b0a8: 92 10 00 15 mov %l5, %o1 4000b0ac: 40 00 01 f5 call 4000b880 4000b0b0: 94 10 00 16 mov %l6, %o2 i += len; if ( !pathloc->node_access ) 4000b0b4: e0 06 80 00 ld [ %i2 ], %l0 * 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], token, &len ); 4000b0b8: a2 10 00 08 mov %o0, %l1 i += len; if ( !pathloc->node_access ) 4000b0bc: 80 a4 20 00 cmp %l0, 0 4000b0c0: 02 80 00 4d be 4000b1f4 4000b0c4: e6 07 bf f4 ld [ %fp + -12 ], %l3 rtems_set_errno_and_return_minus_one( ENOENT ); /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) 4000b0c8: 80 a2 20 00 cmp %o0, 0 4000b0cc: 12 80 00 11 bne 4000b110 4000b0d0: a8 05 00 13 add %l4, %l3, %l4 * 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 ) { 4000b0d4: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000b0d8: 80 a0 60 01 cmp %g1, 1 4000b0dc: 22 80 00 55 be,a 4000b230 4000b0e0: c4 04 20 58 ld [ %l0 + 0x58 ], %g2 return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); 4000b0e4: 7f ff ff aa call 4000af8c 4000b0e8: 90 10 00 1a mov %i2, %o0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 4000b0ec: 92 10 00 19 mov %i1, %o1 return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); 4000b0f0: a0 10 00 08 mov %o0, %l0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 4000b0f4: 7f ff ff c4 call 4000b004 4000b0f8: 90 10 00 1a mov %i2, %o0 4000b0fc: 80 a2 20 00 cmp %o0, 0 4000b100: 02 80 00 47 be 4000b21c 4000b104: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b108: 81 c7 e0 08 ret 4000b10c: 91 e8 00 10 restore %g0, %l0, %o0 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) 4000b110: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 4000b114: 80 a0 60 01 cmp %g1, 1 4000b118: 02 80 00 3c be 4000b208 4000b11c: 90 10 00 1a mov %i2, %o0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000b120: 80 a4 60 03 cmp %l1, 3 <== NOT EXECUTED 4000b124: 02 80 00 21 be 4000b1a8 4000b128: a4 10 00 10 mov %l0, %l2 4000b12c: 80 a4 60 04 cmp %l1, 4 4000b130: 02 80 00 18 be 4000b190 4000b134: 80 a4 60 02 cmp %l1, 2 4000b138: 02 80 00 06 be 4000b150 4000b13c: 80 a4 60 04 cmp %l1, 4 /* * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { 4000b140: 12 bf ff da bne 4000b0a8 4000b144: 90 06 00 14 add %i0, %l4, %o0 * 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 ) { 4000b148: 10 bf ff e4 b 4000b0d8 <== NOT EXECUTED 4000b14c: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000b150: c2 05 e1 30 ld [ %l7 + 0x130 ], %g1 <== NOT EXECUTED 4000b154: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 <== NOT EXECUTED 4000b158: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 4000b15c: 02 bf ff d3 be 4000b0a8 <== NOT EXECUTED 4000b160: 90 06 00 14 add %i0, %l4, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == 4000b164: c4 06 a0 0c ld [ %i2 + 0xc ], %g2 <== NOT EXECUTED 4000b168: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 4000b16c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 4000b170: 22 80 00 60 be,a 4000b2f0 <== NOT EXECUTED 4000b174: c8 00 a0 10 ld [ %g2 + 0x10 ], %g4 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); } } else { if ( !node->Parent ) 4000b178: e4 04 20 08 ld [ %l0 + 8 ], %l2 <== NOT EXECUTED 4000b17c: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 4000b180: 02 80 00 49 be 4000b2a4 <== NOT EXECUTED 4000b184: 01 00 00 00 nop <== NOT EXECUTED /* * Set the node access to the point we have found. */ pathloc->node_access = node; 4000b188: 10 bf ff c8 b 4000b0a8 <== NOT EXECUTED 4000b18c: e4 26 80 00 st %l2, [ %i2 ] <== NOT EXECUTED case IMFS_NO_MORE_PATH: case IMFS_CURRENT_DIR: break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 4000b190: 40 00 0b ea call 4000e138 <__errno> <== NOT EXECUTED 4000b194: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b198: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED 4000b19c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b1a0: 81 c7 e0 08 ret <== NOT EXECUTED 4000b1a4: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { 4000b1a8: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000b1ac: 80 a0 60 03 cmp %g1, 3 4000b1b0: 02 80 00 34 be 4000b280 4000b1b4: 80 a0 60 04 cmp %g1, 4 node = pathloc->node_access; if ( !node ) rtems_set_errno_and_return_minus_one( ENOTDIR ); } else if ( node->type == IMFS_SYM_LINK ) { 4000b1b8: 02 80 00 53 be 4000b304 4000b1bc: 90 10 00 1a mov %i2, %o0 /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 4000b1c0: 80 a0 60 01 cmp %g1, 1 4000b1c4: 12 80 00 3c bne 4000b2b4 4000b1c8: 01 00 00 00 nop /* * 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 ) { 4000b1cc: c6 04 a0 58 ld [ %l2 + 0x58 ], %g3 4000b1d0: 80 a0 e0 00 cmp %g3, 0 4000b1d4: 32 80 00 3d bne,a 4000b2c8 4000b1d8: c8 00 e0 20 ld [ %g3 + 0x20 ], %g4 <== NOT EXECUTED /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); 4000b1dc: 90 10 00 12 mov %l2, %o0 4000b1e0: 40 00 01 76 call 4000b7b8 4000b1e4: 92 10 00 15 mov %l5, %o1 if ( !node ) 4000b1e8: a4 92 20 00 orcc %o0, 0, %l2 4000b1ec: 32 bf ff ae bne,a 4000b0a4 4000b1f0: e4 26 80 00 st %l2, [ %i2 ] rtems_set_errno_and_return_minus_one( ENOENT ); 4000b1f4: 40 00 0b d1 call 4000e138 <__errno> 4000b1f8: a0 10 3f ff mov -1, %l0 4000b1fc: 82 10 20 02 mov 2, %g1 4000b200: 10 bf ff c2 b 4000b108 4000b204: c2 22 00 00 st %g1, [ %o0 ] /* * 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 ) ) 4000b208: 7f ff ff 7f call 4000b004 4000b20c: 92 10 20 01 mov 1, %o1 4000b210: 80 a2 20 00 cmp %o0, 0 4000b214: 12 bf ff c4 bne 4000b124 4000b218: 80 a4 60 03 cmp %l1, 3 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); 4000b21c: 40 00 0b c7 call 4000e138 <__errno> <== NOT EXECUTED 4000b220: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b224: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b228: 10 bf ff b8 b 4000b108 <== NOT EXECUTED 4000b22c: c2 22 00 00 st %g1, [ %o0 ] <== 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 ) { 4000b230: 80 a0 a0 00 cmp %g2, 0 4000b234: 02 bf ff ac be 4000b0e4 4000b238: 01 00 00 00 nop newloc = node->info.directory.mt_fs->mt_fs_root; 4000b23c: c8 00 a0 20 ld [ %g2 + 0x20 ], %g4 <== NOT EXECUTED *pathloc = newloc; 4000b240: c6 00 a0 24 ld [ %g2 + 0x24 ], %g3 <== 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; 4000b244: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b248: da 01 00 00 ld [ %g4 ], %o5 <== 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; 4000b24c: c4 00 a0 18 ld [ %g2 + 0x18 ], %g2 <== NOT EXECUTED *pathloc = newloc; 4000b250: c6 26 a0 0c st %g3, [ %i2 + 0xc ] <== NOT EXECUTED 4000b254: c2 26 a0 04 st %g1, [ %i2 + 4 ] <== NOT EXECUTED 4000b258: c4 26 80 00 st %g2, [ %i2 ] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b25c: 90 25 00 13 sub %l4, %l3, %o0 <== NOT EXECUTED 4000b260: 90 02 00 18 add %o0, %i0, %o0 <== 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; 4000b264: c8 26 a0 08 st %g4, [ %i2 + 8 ] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b268: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b26c: 9f c3 40 00 call %o5 <== NOT EXECUTED 4000b270: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4000b274: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b278: 81 c7 e0 08 ret <== NOT EXECUTED 4000b27c: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { IMFS_evaluate_hard_link( pathloc, 0 ); 4000b280: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000b284: 7f ff ff 67 call 4000b020 <== NOT EXECUTED 4000b288: 92 10 20 00 clr %o1 <== NOT EXECUTED node = pathloc->node_access; 4000b28c: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED if ( !node ) 4000b290: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b294: 02 80 00 08 be 4000b2b4 <== NOT EXECUTED 4000b298: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); node = pathloc->node_access; 4000b29c: 10 bf ff c9 b 4000b1c0 <== NOT EXECUTED 4000b2a0: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 <== NOT EXECUTED return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); } } else { if ( !node->Parent ) rtems_set_errno_and_return_minus_one( ENOENT ); 4000b2a4: 40 00 0b a5 call 4000e138 <__errno> <== NOT EXECUTED 4000b2a8: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b2ac: 10 bf ff 97 b 4000b108 <== NOT EXECUTED 4000b2b0: e2 22 00 00 st %l1, [ %o0 ] <== NOT EXECUTED /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 4000b2b4: 40 00 0b a1 call 4000e138 <__errno> <== NOT EXECUTED 4000b2b8: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b2bc: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 4000b2c0: 10 bf ff 92 b 4000b108 <== NOT EXECUTED 4000b2c4: c2 22 00 00 st %g1, [ %o0 ] <== 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; 4000b2c8: c2 00 e0 24 ld [ %g3 + 0x24 ], %g1 <== 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; 4000b2cc: c4 00 e0 1c ld [ %g3 + 0x1c ], %g2 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b2d0: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== 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; 4000b2d4: c6 00 e0 18 ld [ %g3 + 0x18 ], %g3 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b2d8: da 01 00 00 ld [ %g4 ], %o5 <== 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; 4000b2dc: c2 26 a0 0c st %g1, [ %i2 + 0xc ] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b2e0: 90 25 00 08 sub %l4, %o0, %o0 <== 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; 4000b2e4: c4 26 a0 04 st %g2, [ %i2 + 4 ] <== NOT EXECUTED 4000b2e8: 10 bf ff de b 4000b260 <== NOT EXECUTED 4000b2ec: c6 26 80 00 st %g3, [ %i2 ] <== 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; *pathloc = newloc; 4000b2f0: c6 00 a0 14 ld [ %g2 + 0x14 ], %g3 <== 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; 4000b2f4: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); 4000b2f8: da 01 00 00 ld [ %g4 ], %o5 <== 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; 4000b2fc: 10 bf ff d5 b 4000b250 <== NOT EXECUTED 4000b300: c4 00 a0 08 ld [ %g2 + 8 ], %g2 <== NOT EXECUTED if ( !node ) rtems_set_errno_and_return_minus_one( ENOTDIR ); } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); 4000b304: 40 00 00 09 call 4000b328 <== NOT EXECUTED 4000b308: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000b30c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED node = pathloc->node_access; if ( result == -1 ) 4000b310: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000b314: 02 bf ff 7d be 4000b108 <== NOT EXECUTED 4000b318: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); node = pathloc->node_access; 4000b31c: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 <== NOT EXECUTED 4000b320: 10 bf ff a8 b 4000b1c0 <== NOT EXECUTED 4000b324: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 4000b4dc : int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 4000b4dc: 9d e3 bf 70 save %sp, -144, %sp /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000b4e0: e2 06 40 00 ld [ %i1 ], %l1 int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 4000b4e4: a8 10 00 18 mov %i0, %l4 4000b4e8: aa 07 bf d3 add %fp, -45, %l5 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000b4ec: b0 10 20 00 clr %i0 4000b4f0: ac 07 bf f4 add %fp, -12, %l6 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000b4f4: 2f 10 00 64 sethi %hi(0x40019000), %l7 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); 4000b4f8: 90 05 00 18 add %l4, %i0, %o0 4000b4fc: 92 10 00 15 mov %l5, %o1 4000b500: 40 00 00 e0 call 4000b880 4000b504: 94 10 00 16 mov %l6, %o2 i += len; if ( !pathloc->node_access ) 4000b508: e4 06 40 00 ld [ %i1 ], %l2 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); 4000b50c: a0 10 00 08 mov %o0, %l0 i += len; if ( !pathloc->node_access ) 4000b510: 80 a4 a0 00 cmp %l2, 0 4000b514: 02 80 00 5f be 4000b690 4000b518: e6 07 bf f4 ld [ %fp + -12 ], %l3 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) 4000b51c: 80 a2 20 00 cmp %o0, 0 4000b520: 02 80 00 10 be 4000b560 4000b524: 01 00 00 00 nop if ( node->type == IMFS_DIRECTORY ) 4000b528: c2 04 60 48 ld [ %l1 + 0x48 ], %g1 4000b52c: 80 a0 60 01 cmp %g1, 1 4000b530: 02 80 00 43 be 4000b63c 4000b534: 90 10 00 19 mov %i1, %o0 */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); i += len; 4000b538: b0 06 00 13 add %i0, %l3, %i0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000b53c: 80 a4 20 02 cmp %l0, 2 4000b540: 02 80 00 2c be 4000b5f0 4000b544: a2 10 00 12 mov %l2, %l1 4000b548: 80 a4 20 02 cmp %l0, 2 4000b54c: 18 80 00 0b bgu 4000b578 4000b550: 80 a4 20 03 cmp %l0, 3 4000b554: 80 a4 20 00 cmp %l0, 0 4000b558: 12 bf ff e9 bne 4000b4fc 4000b55c: 90 05 00 18 add %l4, %i0, %o0 pathloc->node_access = node; break; case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); 4000b560: 40 00 0a f6 call 4000e138 <__errno> <== NOT EXECUTED 4000b564: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b568: 82 10 20 11 mov 0x11, %g1 <== NOT EXECUTED 4000b56c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b570: 81 c7 e0 08 ret 4000b574: 91 e8 00 10 restore %g0, %l0, %o0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000b578: 02 80 00 0a be 4000b5a0 4000b57c: 80 a4 20 04 cmp %l0, 4 4000b580: 12 bf ff df bne 4000b4fc <== NOT EXECUTED 4000b584: 90 05 00 18 add %l4, %i0, %o0 <== 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 ); 4000b588: 40 00 0a ec call 4000e138 <__errno> <== NOT EXECUTED 4000b58c: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b590: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED 4000b594: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b598: 81 c7 e0 08 ret <== NOT EXECUTED 4000b59c: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED pathloc->node_access = node; break; case IMFS_NAME: if ( node->type == IMFS_HARD_LINK ) { 4000b5a0: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 4000b5a4: 80 a0 60 03 cmp %g1, 3 4000b5a8: 02 80 00 78 be 4000b788 4000b5ac: 80 a0 60 04 cmp %g1, 4 result = IMFS_evaluate_link( pathloc, 0 ); if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { 4000b5b0: 02 80 00 77 be 4000b78c 4000b5b4: 90 10 00 19 mov %i1, %o0 /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 4000b5b8: 80 a0 60 01 cmp %g1, 1 4000b5bc: 12 80 00 54 bne 4000b70c 4000b5c0: 01 00 00 00 nop /* * 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 ) { 4000b5c4: c6 04 60 58 ld [ %l1 + 0x58 ], %g3 4000b5c8: 80 a0 e0 00 cmp %g3, 0 4000b5cc: 12 80 00 55 bne 4000b720 4000b5d0: 90 10 00 11 mov %l1, %o0 /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); 4000b5d4: 40 00 00 79 call 4000b7b8 4000b5d8: 92 10 00 15 mov %l5, %o1 /* * If there is no node we have found the name of the node we * wish to create. */ if ( ! node ) 4000b5dc: a2 92 20 00 orcc %o0, 0, %l1 4000b5e0: 02 80 00 21 be 4000b664 4000b5e4: c2 07 bf f4 ld [ %fp + -12 ], %g1 done = TRUE; else pathloc->node_access = node; 4000b5e8: 10 bf ff c4 b 4000b4f8 4000b5ec: e2 26 40 00 st %l1, [ %i1 ] case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000b5f0: c2 05 e1 30 ld [ %l7 + 0x130 ], %g1 <== NOT EXECUTED 4000b5f4: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 <== NOT EXECUTED 4000b5f8: 80 a4 80 02 cmp %l2, %g2 <== NOT EXECUTED 4000b5fc: 02 bf ff c0 be 4000b4fc <== NOT EXECUTED 4000b600: 90 05 00 18 add %l4, %i0, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){ 4000b604: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 4000b608: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 4000b60c: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000b610: 22 80 00 55 be,a 4000b764 <== NOT EXECUTED 4000b614: c8 00 a0 10 ld [ %g2 + 0x10 ], %g4 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); } } else { if ( !node->Parent ) 4000b618: e2 04 a0 08 ld [ %l2 + 8 ], %l1 <== NOT EXECUTED 4000b61c: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4000b620: 32 bf ff b7 bne,a 4000b4fc <== NOT EXECUTED 4000b624: e2 26 40 00 st %l1, [ %i1 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000b628: 40 00 0a c4 call 4000e138 <__errno> <== NOT EXECUTED 4000b62c: 01 00 00 00 nop <== NOT EXECUTED 4000b630: e0 22 00 00 st %l0, [ %o0 ] <== NOT EXECUTED 4000b634: 10 bf ff cf b 4000b570 <== NOT EXECUTED 4000b638: a0 10 3f ff mov -1, %l0 <== 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 ) ) 4000b63c: 7f ff fe 72 call 4000b004 4000b640: 92 10 20 01 mov 1, %o1 4000b644: 80 a2 20 00 cmp %o0, 0 4000b648: 32 bf ff bd bne,a 4000b53c 4000b64c: b0 06 00 13 add %i0, %l3, %i0 /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); 4000b650: 40 00 0a ba call 4000e138 <__errno> <== NOT EXECUTED 4000b654: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b658: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b65c: 10 bf ff c5 b 4000b570 <== NOT EXECUTED 4000b660: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; 4000b664: 82 26 00 01 sub %i0, %g1, %g1 4000b668: 82 00 40 14 add %g1, %l4, %g1 4000b66c: c2 26 80 00 st %g1, [ %i2 ] /* * 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++) { 4000b670: c2 4d 00 18 ldsb [ %l4 + %i0 ], %g1 4000b674: 80 a0 60 00 cmp %g1, 0 4000b678: 02 80 00 17 be 4000b6d4 4000b67c: 80 a0 60 2f cmp %g1, 0x2f if ( !IMFS_is_separator( path[ i ] ) ) 4000b680: 02 80 00 09 be 4000b6a4 <== NOT EXECUTED 4000b684: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 4000b688: 02 80 00 08 be 4000b6a8 <== NOT EXECUTED 4000b68c: 82 05 00 18 add %l4, %i0, %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000b690: 40 00 0a aa call 4000e138 <__errno> <== NOT EXECUTED 4000b694: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b698: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 4000b69c: 10 bf ff b5 b 4000b570 <== NOT EXECUTED 4000b6a0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000b6a4: 82 05 00 18 add %l4, %i0, %g1 <== NOT EXECUTED /* * We have evaluated the path as far as we can. * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { 4000b6a8: c4 48 60 01 ldsb [ %g1 + 1 ], %g2 <== NOT EXECUTED 4000b6ac: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000b6b0: 02 80 00 09 be 4000b6d4 <== NOT EXECUTED 4000b6b4: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !IMFS_is_separator( path[ i ] ) ) 4000b6b8: 80 a0 a0 2f cmp %g2, 0x2f <== NOT EXECUTED 4000b6bc: 02 bf ff fb be 4000b6a8 <== NOT EXECUTED 4000b6c0: 80 a0 a0 5c cmp %g2, 0x5c <== NOT EXECUTED 4000b6c4: 12 bf ff f3 bne 4000b690 <== NOT EXECUTED 4000b6c8: 01 00 00 00 nop <== NOT EXECUTED /* * We have evaluated the path as far as we can. * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { 4000b6cc: 10 bf ff f8 b 4000b6ac <== NOT EXECUTED 4000b6d0: c4 48 60 01 ldsb [ %g1 + 1 ], %g2 <== NOT EXECUTED /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); 4000b6d4: 7f ff fe 2e call 4000af8c 4000b6d8: 90 10 00 19 mov %i1, %o0 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) 4000b6dc: c2 06 40 00 ld [ %i1 ], %g1 4000b6e0: c4 00 60 48 ld [ %g1 + 0x48 ], %g2 4000b6e4: 80 a0 a0 01 cmp %g2, 1 4000b6e8: 12 80 00 09 bne 4000b70c 4000b6ec: a0 10 00 08 mov %o0, %l0 /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) 4000b6f0: 90 10 00 19 mov %i1, %o0 4000b6f4: 7f ff fe 44 call 4000b004 4000b6f8: 92 10 20 03 mov 3, %o1 4000b6fc: 80 a2 20 00 cmp %o0, 0 4000b700: 12 bf ff 9c bne 4000b570 4000b704: 01 00 00 00 nop 4000b708: 30 bf ff d2 b,a 4000b650 <== 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 ); 4000b70c: 40 00 0a 8b call 4000e138 <__errno> <== NOT EXECUTED 4000b710: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b714: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 4000b718: 10 bf ff 96 b 4000b570 <== NOT EXECUTED 4000b71c: c2 22 00 00 st %g1, [ %o0 ] <== 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; 4000b720: c8 00 e0 20 ld [ %g3 + 0x20 ], %g4 <== NOT EXECUTED *pathloc = newloc; 4000b724: c2 00 e0 24 ld [ %g3 + 0x24 ], %g1 <== 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; 4000b728: c4 00 e0 1c ld [ %g3 + 0x1c ], %g2 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b72c: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== 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; 4000b730: c6 00 e0 18 ld [ %g3 + 0x18 ], %g3 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b734: da 01 20 04 ld [ %g4 + 4 ], %o5 <== 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; 4000b738: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b73c: 90 26 00 08 sub %i0, %o0, %o0 <== 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; 4000b740: c4 26 60 04 st %g2, [ %i1 + 4 ] <== NOT EXECUTED 4000b744: c6 26 40 00 st %g3, [ %i1 ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b748: 90 02 00 14 add %o0, %l4, %o0 <== 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; 4000b74c: c8 26 60 08 st %g4, [ %i1 + 8 ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b750: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b754: 9f c3 40 00 call %o5 <== NOT EXECUTED 4000b758: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4000b75c: 10 bf ff 85 b 4000b570 <== NOT EXECUTED 4000b760: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; *pathloc = newloc; 4000b764: c6 00 a0 14 ld [ %g2 + 0x14 ], %g3 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; 4000b768: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b76c: da 01 20 04 ld [ %g4 + 4 ], %o5 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; 4000b770: c4 00 a0 08 ld [ %g2 + 8 ], %g2 <== NOT EXECUTED *pathloc = newloc; 4000b774: c6 26 60 0c st %g3, [ %i1 + 0xc ] <== NOT EXECUTED 4000b778: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED 4000b77c: c4 26 40 00 st %g2, [ %i1 ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000b780: 10 bf ff f2 b 4000b748 <== NOT EXECUTED 4000b784: 90 26 00 13 sub %i0, %l3, %o0 <== NOT EXECUTED if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_link( pathloc, 0 ); 4000b788: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000b78c: 7f ff ff 22 call 4000b414 <== NOT EXECUTED 4000b790: 92 10 20 00 clr %o1 <== NOT EXECUTED if ( result == -1 ) 4000b794: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000b798: 02 bf ff 76 be 4000b570 <== NOT EXECUTED 4000b79c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return -1; } node = pathloc->node_access; 4000b7a0: d0 06 40 00 ld [ %i1 ], %o0 <== NOT EXECUTED if ( !node ) 4000b7a4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b7a8: 02 bf ff d9 be 4000b70c <== NOT EXECUTED 4000b7ac: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED if ( result == -1 ) return -1; } node = pathloc->node_access; 4000b7b0: 10 bf ff 82 b 4000b5b8 <== NOT EXECUTED 4000b7b4: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 <== NOT EXECUTED 4000b020 : int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000b020: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 4000b024: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_HARD_LINK ) 4000b028: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b02c: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000b030: 22 80 00 05 be,a 4000b044 <== NOT EXECUTED 4000b034: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 4000b038: 7f ff ee 6f call 400069f4 <== NOT EXECUTED 4000b03c: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED /* * Set the hard link value and the handlers. */ node->node_access = jnode->info.hard_link.link_node; 4000b040: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED IMFS_Set_handlers( node ); 4000b044: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b048: 7f ff ff d1 call 4000af8c <== NOT EXECUTED 4000b04c: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 4000b050: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b054: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b058: 7f ff ff eb call 4000b004 <== NOT EXECUTED 4000b05c: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000b060: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b064: 02 80 00 04 be 4000b074 <== NOT EXECUTED 4000b068: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b06c: 81 c7 e0 08 ret <== NOT EXECUTED 4000b070: 81 e8 00 00 restore <== 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 ); 4000b074: 40 00 0c 31 call 4000e138 <__errno> <== NOT EXECUTED 4000b078: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000b07c: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b080: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 4000b084: 81 c7 e0 08 ret <== NOT EXECUTED 4000b088: 81 e8 00 00 restore <== NOT EXECUTED 4000b414 : int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000b414: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED 4000b418: 10 80 00 07 b 4000b434 <== NOT EXECUTED 4000b41c: 23 10 00 64 sethi %hi(0x40019000), %l1 <== NOT EXECUTED */ if ( jnode->type == IMFS_HARD_LINK ) result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) 4000b420: 02 80 00 23 be 4000b4ac <== NOT EXECUTED 4000b424: 82 00 7f fd add %g1, -3, %g1 <== NOT EXECUTED result = IMFS_evaluate_sym_link( node, flags ); } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); 4000b428: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000b42c: 18 80 00 1c bgu 4000b49c <== NOT EXECUTED 4000b430: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 4000b434: c4 04 61 30 ld [ %l1 + 0x130 ], %g2 <== NOT EXECUTED { IMFS_jnode_t *jnode; int result = 0; do { jnode = node->node_access; 4000b438: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 4000b43c: c2 10 a0 26 lduh [ %g2 + 0x26 ], %g1 <== NOT EXECUTED 4000b440: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000b444: c2 30 a0 26 sth %g1, [ %g2 + 0x26 ] <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { 4000b448: 83 28 60 10 sll %g1, 0x10, %g1 <== NOT EXECUTED 4000b44c: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 4000b450: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4000b454: 18 80 00 1b bgu 4000b4c0 <== NOT EXECUTED 4000b458: 01 00 00 00 nop <== NOT EXECUTED /* * Follow the Link node. */ if ( jnode->type == IMFS_HARD_LINK ) 4000b45c: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b460: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000b464: 12 bf ff ef bne 4000b420 <== NOT EXECUTED 4000b468: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); 4000b46c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b470: 7f ff fe ec call 4000b020 <== NOT EXECUTED 4000b474: 92 10 00 19 mov %i1, %o1 <== 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 ) ) ); 4000b478: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b47c: 12 80 00 09 bne 4000b4a0 <== NOT EXECUTED 4000b480: c2 04 61 30 ld [ %l1 + 0x130 ], %g1 <== NOT EXECUTED 4000b484: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b488: 82 00 7f fd add %g1, -3, %g1 <== NOT EXECUTED 4000b48c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000b490: 08 bf ff ea bleu 4000b438 <== NOT EXECUTED 4000b494: c4 04 61 30 ld [ %l1 + 0x130 ], %g2 <== NOT EXECUTED 4000b498: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; 4000b49c: c2 04 61 30 ld [ %l1 + 0x130 ], %g1 <== NOT EXECUTED 4000b4a0: c0 30 60 26 clrh [ %g1 + 0x26 ] <== NOT EXECUTED return result; } 4000b4a4: 81 c7 e0 08 ret <== NOT EXECUTED 4000b4a8: 91 e8 00 08 restore %g0, %o0, %o0 <== 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 ); 4000b4ac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b4b0: 7f ff ff 9e call 4000b328 <== NOT EXECUTED 4000b4b4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); 4000b4b8: 10 bf ff f1 b 4000b47c <== NOT EXECUTED 4000b4bc: 80 a2 20 00 cmp %o0, 0 <== 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 ); 4000b4c0: 40 00 0b 1e call 4000e138 <__errno> <== NOT EXECUTED 4000b4c4: c0 30 a0 26 clrh [ %g2 + 0x26 ] <== NOT EXECUTED 4000b4c8: 82 10 20 5c mov 0x5c, %g1 <== NOT EXECUTED 4000b4cc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000b4d0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED */ rtems_filesystem_link_counts = 0; return result; } 4000b4d4: 81 c7 e0 08 ret <== NOT EXECUTED 4000b4d8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000b328 : int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000b328: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 4000b32c: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_SYM_LINK ) 4000b330: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b334: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000b338: 22 80 00 05 be,a 4000b34c <== NOT EXECUTED 4000b33c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 4000b340: 7f ff ed ad call 400069f4 <== NOT EXECUTED 4000b344: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED if ( !jnode->Parent ) 4000b348: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000b34c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000b350: 02 80 00 28 be 4000b3f0 <== NOT EXECUTED 4000b354: 01 00 00 00 nop <== 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; 4000b358: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( 4000b35c: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 4000b360: c2 48 80 00 ldsb [ %g2 ], %g1 <== NOT EXECUTED 4000b364: 80 a0 60 2f cmp %g1, 0x2f <== NOT EXECUTED 4000b368: 02 80 00 15 be 4000b3bc <== NOT EXECUTED 4000b36c: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 4000b370: 02 80 00 13 be 4000b3bc <== NOT EXECUTED 4000b374: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000b378: 02 80 00 11 be 4000b3bc <== NOT EXECUTED 4000b37c: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Use eval path to evaluate the path of the symbolic link. */ result = IMFS_eval_path( 4000b380: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 4000b384: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 4000b388: 7f ff ff 41 call 4000b08c <== NOT EXECUTED 4000b38c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b390: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED &jnode->info.sym_link.name[i], flags, node ); IMFS_Set_handlers( node ); 4000b394: 7f ff fe fe call 4000af8c <== NOT EXECUTED 4000b398: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 4000b39c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b3a0: 7f ff ff 19 call 4000b004 <== NOT EXECUTED 4000b3a4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b3a8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b3ac: 02 80 00 15 be 4000b400 <== NOT EXECUTED 4000b3b0: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000b3b4: 81 c7 e0 08 ret <== NOT EXECUTED 4000b3b8: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * root depending on the symbolic links path. */ node->node_access = jnode->Parent; rtems_filesystem_get_sym_start_loc( 4000b3bc: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000b3c0: c6 00 61 30 ld [ %g1 + 0x130 ], %g3 ! 40019130 <== NOT EXECUTED 4000b3c4: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 4000b3c8: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 <== NOT EXECUTED 4000b3cc: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED 4000b3d0: c4 00 e0 18 ld [ %g3 + 0x18 ], %g2 <== NOT EXECUTED 4000b3d4: c4 26 20 04 st %g2, [ %i0 + 4 ] <== NOT EXECUTED 4000b3d8: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 4000b3dc: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED 4000b3e0: c4 00 e0 20 ld [ %g3 + 0x20 ], %g2 <== NOT EXECUTED 4000b3e4: c4 26 20 0c st %g2, [ %i0 + 0xc ] <== NOT EXECUTED 4000b3e8: 10 bf ff e6 b 4000b380 <== NOT EXECUTED 4000b3ec: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED if ( jnode->type != IMFS_SYM_LINK ) rtems_fatal_error_occurred (0xABCD0000); if ( !jnode->Parent ) rtems_fatal_error_occurred( 0xBAD00000 ); 4000b3f0: 7f ff ed 81 call 400069f4 <== NOT EXECUTED 4000b3f4: 11 2e b4 00 sethi %hi(0xbad00000), %o0 <== NOT EXECUTED 4000b3f8: 10 bf ff d8 b 4000b358 <== NOT EXECUTED 4000b3fc: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== 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 ); 4000b400: 40 00 0b 4e call 4000e138 <__errno> <== NOT EXECUTED 4000b404: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000b408: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b40c: 10 bf ff ea b 4000b3b4 <== NOT EXECUTED 4000b410: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d950 : int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { 4000d950: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED #endif /* * Change only the RWX permissions on the jnode to mode. */ if ( mode & (~ (S_IRWXU | S_IRWXG | S_IRWXO ) ) ) 4000d954: 83 2e 60 10 sll %i1, 0x10, %g1 <== NOT EXECUTED 4000d958: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 4000d95c: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 4000d960: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d964: 12 80 00 0e bne 4000d99c <== NOT EXECUTED 4000d968: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EPERM ); jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO); 4000d96c: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 <== NOT EXECUTED jnode->st_mode |= mode; IMFS_update_ctime( jnode ); 4000d970: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED */ if ( mode & (~ (S_IRWXU | S_IRWXG | S_IRWXO ) ) ) rtems_set_errno_and_return_minus_one( EPERM ); jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO); jnode->st_mode |= mode; 4000d974: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 4000d978: 82 16 40 01 or %i1, %g1, %g1 <== NOT EXECUTED IMFS_update_ctime( jnode ); 4000d97c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000d980: 7f ff f9 a5 call 4000c014 <== NOT EXECUTED 4000d984: c2 36 20 2e sth %g1, [ %i0 + 0x2e ] <== NOT EXECUTED 4000d988: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000d98c: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000d990: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED return 0; } 4000d994: 81 c7 e0 08 ret <== NOT EXECUTED 4000d998: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED /* * Change only the RWX permissions on the jnode to mode. */ if ( mode & (~ (S_IRWXU | S_IRWXG | S_IRWXO ) ) ) rtems_set_errno_and_return_minus_one( EPERM ); 4000d99c: 40 00 01 e7 call 4000e138 <__errno> <== NOT EXECUTED 4000d9a0: 01 00 00 00 nop <== NOT EXECUTED 4000d9a4: 82 10 20 01 mov 1, %g1 ! 1 <== NOT EXECUTED 4000d9a8: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 4000d9ac: 10 bf ff fa b 4000d994 <== NOT EXECUTED 4000d9b0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40023244 : int cmd, rtems_libio_t *iop ) { return 0; } 40023244: 81 c3 e0 08 retl <== NOT EXECUTED 40023248: 90 10 20 00 clr %o0 <== NOT EXECUTED 4002324c : int IMFS_fdatasync( rtems_libio_t *iop ) { return 0; } 4002324c: 81 c3 e0 08 retl <== NOT EXECUTED 40023250: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000b7b8 : IMFS_jnode_t *IMFS_find_match_in_dir( IMFS_jnode_t *directory, char *name ) { 4000b7b8: 9d e3 bf 98 save %sp, -104, %sp /* * Check for fatal errors. A NULL directory show a problem in the * the IMFS code. */ assert( directory ); 4000b7bc: 80 a6 20 00 cmp %i0, 0 4000b7c0: 02 80 00 18 be 4000b820 4000b7c4: 11 10 00 60 sethi %hi(0x40018000), %o0 if ( !name ) 4000b7c8: 80 a6 60 00 cmp %i1, 0 4000b7cc: 12 80 00 04 bne 4000b7dc 4000b7d0: 80 a6 20 00 cmp %i0, 0 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } 4000b7d4: 81 c7 e0 08 ret 4000b7d8: 91 e8 20 00 restore %g0, 0, %o0 assert( directory ); if ( !name ) return 0; assert( name ); if ( !directory ) 4000b7dc: 02 80 00 0f be 4000b818 4000b7e0: 90 10 00 19 mov %i1, %o0 /* * Check for "." and ".." */ if ( !strcmp( name, dotname ) ) 4000b7e4: 13 10 00 64 sethi %hi(0x40019000), %o1 4000b7e8: 40 00 0e e2 call 4000f370 4000b7ec: 92 12 60 b0 or %o1, 0xb0, %o1 ! 400190b0 4000b7f0: 80 a2 20 00 cmp %o0, 0 4000b7f4: 02 80 00 09 be 4000b818 4000b7f8: 90 10 00 19 mov %i1, %o0 return directory; if ( !strcmp( name, dotdotname ) ) 4000b7fc: 13 10 00 64 sethi %hi(0x40019000), %o1 4000b800: 40 00 0e dc call 4000f370 4000b804: 92 12 60 b8 or %o1, 0xb8, %o1 ! 400190b8 4000b808: 80 a2 20 00 cmp %o0, 0 4000b80c: 32 80 00 0c bne,a 4000b83c 4000b810: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 return directory->Parent; 4000b814: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4000b818: 81 c7 e0 08 ret <== NOT EXECUTED 4000b81c: 81 e8 00 00 restore <== NOT EXECUTED /* * Check for fatal errors. A NULL directory show a problem in the * the IMFS code. */ assert( directory ); 4000b820: 15 10 00 60 sethi %hi(0x40018000), %o2 <== NOT EXECUTED 4000b824: 90 12 22 60 or %o0, 0x260, %o0 <== NOT EXECUTED 4000b828: 94 12 a2 b0 or %o2, 0x2b0, %o2 <== NOT EXECUTED 4000b82c: 7f ff d9 c2 call 40001f34 <__assert> <== NOT EXECUTED 4000b830: 92 10 20 2a mov 0x2a, %o1 <== NOT EXECUTED if ( !name ) 4000b834: 10 bf ff e6 b 4000b7cc <== NOT EXECUTED 4000b838: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000b83c: b0 06 20 50 add %i0, 0x50, %i0 return directory->Parent; the_chain = &directory->info.directory.Entries; for ( the_node = the_chain->first; !_Chain_Is_tail( the_chain, the_node ); 4000b840: 80 a4 00 18 cmp %l0, %i0 4000b844: 12 80 00 07 bne 4000b860 4000b848: 92 04 20 0c add %l0, 0xc, %o1 4000b84c: 81 c7 e0 08 ret 4000b850: 91 e8 20 00 restore %g0, 0, %o0 4000b854: 80 a6 00 10 cmp %i0, %l0 4000b858: 02 bf ff df be 4000b7d4 4000b85c: 92 04 20 0c add %l0, 0xc, %o1 the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; if ( !strcmp( name, the_jnode->name ) ) 4000b860: 40 00 0e c4 call 4000f370 4000b864: 90 10 00 19 mov %i1, %o0 4000b868: 80 a2 20 00 cmp %o0, 0 4000b86c: 32 bf ff fa bne,a 4000b854 4000b870: e0 04 00 00 ld [ %l0 ], %l0 4000b874: b0 10 00 10 mov %l0, %i0 4000b878: 81 c7 e0 08 ret 4000b87c: 81 e8 00 00 restore 400178dc : int IMFS_freenodinfo( rtems_filesystem_location_info_t *pathloc /* IN */ ) { return 0; } 400178dc: 81 c3 e0 08 retl <== NOT EXECUTED 400178e0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400178e4 : ((IMFS_jnode_t *)( Chain_Head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { 400178e4: 9d e3 bf 88 save %sp, -120, %sp <== 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; 400178e8: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 400178ec: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 <== NOT EXECUTED 400178f0: c6 06 20 24 ld [ %i0 + 0x24 ], %g3 <== 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; 400178f4: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 <== NOT EXECUTED loc = temp_mt_entry->mt_fs_root; 400178f8: c2 27 bf ec st %g1, [ %fp + -20 ] <== NOT EXECUTED 400178fc: c4 3f bf f0 std %g2, [ %fp + -16 ] <== NOT EXECUTED /* * Set this to null to indicate that it is being unmounted. */ temp_mt_entry->mt_fs_root.node_access = NULL; 40017900: c0 26 20 18 clr [ %i0 + 0x18 ] <== 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; 40017904: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED 40017908: a2 07 bf e8 add %fp, -24, %l1 <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; 4001790c: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED */ temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; 40017910: f0 04 20 08 ld [ %l0 + 8 ], %i0 <== NOT EXECUTED loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); 40017914: 7f ff fd e7 call 400170b0 <== NOT EXECUTED 40017918: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { 4001791c: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40017920: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40017924: 12 80 00 1c bne 40017994 <== NOT EXECUTED 40017928: 84 04 20 50 add %l0, 0x50, %g2 <== NOT EXECUTED result = IMFS_unlink( &loc ); if (result != 0) return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { 4001792c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 40017930: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40017934: 02 80 00 18 be 40017994 <== NOT EXECUTED 40017938: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED result = IMFS_unlink( &loc ); if (result != 0) return -1; jnode = next; } if ( jnode != NULL ) { 4001793c: 02 80 00 1e be 400179b4 <== NOT EXECUTED 40017940: 01 00 00 00 nop <== NOT EXECUTED if ( jnode->type == IMFS_DIRECTORY ) { 40017944: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40017948: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001794c: 32 bf ff f1 bne,a 40017910 <== NOT EXECUTED 40017950: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED if ( jnode_has_children( jnode ) ) 40017954: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40017958: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 4001795c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40017960: 22 bf ff ec be,a 40017910 <== NOT EXECUTED 40017964: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 40017968: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001796c: 02 80 00 12 be 400179b4 <== NOT EXECUTED 40017970: a0 10 00 02 mov %g2, %l0 <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); 40017974: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; 40017978: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED IMFS_Set_handlers( &loc ); 4001797c: 7f ff fd cd call 400170b0 <== NOT EXECUTED 40017980: f0 04 20 08 ld [ %l0 + 8 ], %i0 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { 40017984: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40017988: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001798c: 02 bf ff e8 be 4001792c <== NOT EXECUTED 40017990: 84 04 20 50 add %l0, 0x50, %g2 <== NOT EXECUTED result = IMFS_unlink( &loc ); if (result != 0) return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { result = IMFS_unlink( &loc ); 40017994: 7f ff b4 3b call 40004a80 <== NOT EXECUTED 40017998: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if (result != 0) 4001799c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400179a0: 12 80 00 07 bne 400179bc <== NOT EXECUTED 400179a4: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return -1; jnode = next; } if ( jnode != NULL ) { 400179a8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 400179ac: 32 bf ff e7 bne,a 40017948 <== NOT EXECUTED 400179b0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED } } } while (jnode != NULL); return 0; } 400179b4: 81 c7 e0 08 ret <== NOT EXECUTED 400179b8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED jnode = next; } if ( jnode != NULL ) { if ( jnode->type == IMFS_DIRECTORY ) { if ( jnode_has_children( jnode ) ) jnode = jnode_get_first_child( jnode ); 400179bc: 81 c7 e0 08 ret <== NOT EXECUTED 400179c0: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED 4000b880 : IMFS_token_types IMFS_get_token( const char *path, char *token, int *token_len ) { 4000b880: 9d e3 bf 98 save %sp, -104, %sp register char c; /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; 4000b884: c4 0e 00 00 ldub [ %i0 ], %g2 while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000b888: 87 28 a0 18 sll %g2, 0x18, %g3 4000b88c: 83 38 e0 18 sra %g3, 0x18, %g1 4000b890: 80 a0 60 2f cmp %g1, 0x2f 4000b894: 02 80 00 28 be 4000b934 4000b898: 80 a0 60 5c cmp %g1, 0x5c 4000b89c: 02 80 00 26 be 4000b934 4000b8a0: 80 a0 60 00 cmp %g1, 0 4000b8a4: 02 80 00 41 be 4000b9a8 4000b8a8: 86 10 20 00 clr %g3 token[i] = c; 4000b8ac: c4 2e 40 00 stb %g2, [ %i1 ] return IMFS_INVALID_TOKEN; if ( !IMFS_is_valid_name_char(c) ) type = IMFS_INVALID_TOKEN; c = path [++i]; 4000b8b0: 86 00 e0 01 inc %g3 /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000b8b4: c2 48 c0 18 ldsb [ %g3 + %i0 ], %g1 4000b8b8: 80 a0 60 2f cmp %g1, 0x2f 4000b8bc: 02 80 00 07 be 4000b8d8 4000b8c0: c4 08 c0 18 ldub [ %g3 + %i0 ], %g2 4000b8c4: 80 a0 60 5c cmp %g1, 0x5c 4000b8c8: 02 80 00 04 be 4000b8d8 4000b8cc: 80 a0 60 00 cmp %g1, 0 4000b8d0: 12 80 00 12 bne 4000b918 4000b8d4: 80 a0 e0 20 cmp %g3, 0x20 i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { 4000b8d8: 82 00 c0 19 add %g3, %i1, %g1 4000b8dc: c4 48 7f ff ldsb [ %g1 + -1 ], %g2 4000b8e0: 80 a0 a0 00 cmp %g2, 0 4000b8e4: 32 80 00 1c bne,a 4000b954 4000b8e8: c0 2e 40 03 clrb [ %i1 + %g3 ] /* * Set token_len to the number of characters copied. */ *token_len = i; 4000b8ec: c6 26 80 00 st %g3, [ %i2 ] <== NOT EXECUTED * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) 4000b8f0: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000b8f4: 13 10 00 60 sethi %hi(0x40018000), %o1 <== NOT EXECUTED 4000b8f8: b0 10 20 02 mov 2, %i0 <== NOT EXECUTED 4000b8fc: 40 00 0e 9d call 4000f370 <== NOT EXECUTED 4000b900: 92 12 60 60 or %o1, 0x60, %o1 <== NOT EXECUTED 4000b904: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b908: 12 80 00 1c bne 4000b978 <== NOT EXECUTED 4000b90c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED else if ( strcmp( token, "." ) == 0 ) type = IMFS_CURRENT_DIR; } return type; } 4000b910: 81 c7 e0 08 ret <== NOT EXECUTED 4000b914: 81 e8 00 00 restore <== NOT EXECUTED /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000b918: 14 bf ff f1 bg 4000b8dc 4000b91c: 82 00 c0 19 add %g3, %i1, %g1 token[i] = c; if ( i == IMFS_NAME_MAX ) 4000b920: 80 a0 e0 20 cmp %g3, 0x20 4000b924: 12 bf ff e3 bne 4000b8b0 4000b928: c4 28 c0 19 stb %g2, [ %g3 + %i1 ] 4000b92c: 81 c7 e0 08 ret <== NOT EXECUTED 4000b930: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED /* * Copy a seperator into token. */ if ( i == 0 ) { token[i] = c; 4000b934: c4 2e 40 00 stb %g2, [ %i1 ] if ( token[i] != '\0' ) { 4000b938: 80 a0 e0 00 cmp %g3, 0 4000b93c: 82 10 20 01 mov 1, %g1 4000b940: 02 80 00 16 be 4000b998 4000b944: b0 10 20 01 mov 1, %i0 /* * Set token_len to the number of characters copied. */ *token_len = i; 4000b948: c2 26 80 00 st %g1, [ %i2 ] 4000b94c: 81 c7 e0 08 ret 4000b950: 81 e8 00 00 restore 4000b954: c6 26 80 00 st %g3, [ %i2 ] * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) 4000b958: 90 10 00 19 mov %i1, %o0 4000b95c: 13 10 00 60 sethi %hi(0x40018000), %o1 4000b960: b0 10 20 02 mov 2, %i0 4000b964: 40 00 0e 83 call 4000f370 4000b968: 92 12 60 60 or %o1, 0x60, %o1 4000b96c: 80 a2 20 00 cmp %o0, 0 4000b970: 02 bf ff e8 be 4000b910 4000b974: 90 10 00 19 mov %i1, %o0 type = IMFS_UP_DIR; else if ( strcmp( token, "." ) == 0 ) 4000b978: 13 10 00 60 sethi %hi(0x40018000), %o1 4000b97c: 40 00 0e 7d call 4000f370 4000b980: 92 12 62 c0 or %o1, 0x2c0, %o1 ! 400182c0 <_CPU_Trap_slot_template+0x70> 4000b984: 80 a0 00 08 cmp %g0, %o0 4000b988: 82 60 20 00 subx %g0, 0, %g1 4000b98c: b0 08 60 02 and %g1, 2, %i0 4000b990: 81 c7 e0 08 ret 4000b994: 91 ee 20 01 restore %i0, 1, %o0 type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { token[i] = '\0'; 4000b998: 82 10 20 00 clr %g1 <== NOT EXECUTED /* * Set token_len to the number of characters copied. */ *token_len = i; 4000b99c: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { token[i] = '\0'; 4000b9a0: 81 c7 e0 08 ret <== NOT EXECUTED 4000b9a4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Copy a seperator into token. */ if ( i == 0 ) { token[i] = c; 4000b9a8: c4 2e 40 00 stb %g2, [ %i1 ] 4000b9ac: 82 10 20 00 clr %g1 4000b9b0: 10 bf ff e6 b 4000b948 4000b9b4: b0 10 20 00 clr %i0 400046cc : int IMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 400046cc: 13 10 00 ea sethi %hi(0x4003a800), %o1 <== NOT EXECUTED 400046d0: 15 10 00 eb sethi %hi(0x4003ac00), %o2 <== NOT EXECUTED 400046d4: 17 10 00 eb sethi %hi(0x4003ac00), %o3 <== NOT EXECUTED 400046d8: 92 12 61 90 or %o1, 0x190, %o1 <== NOT EXECUTED 400046dc: 94 12 a3 b8 or %o2, 0x3b8, %o2 <== NOT EXECUTED 400046e0: 96 12 e3 48 or %o3, 0x348, %o3 <== NOT EXECUTED 400046e4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400046e8: 40 00 00 03 call 400046f4 <== NOT EXECUTED 400046ec: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400046f0: 01 00 00 00 nop 4000b9b8 : rtems_filesystem_mount_table_entry_t *temp_mt_entry, rtems_filesystem_operations_table *op_table, rtems_filesystem_file_handlers_r *memfile_handlers, rtems_filesystem_file_handlers_r *directory_handlers ) { 4000b9b8: 9d e3 bf 98 save %sp, -104, %sp IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, 4000b9bc: 03 10 00 62 sethi %hi(0x40018800), %g1 4000b9c0: 84 10 20 00 clr %g2 4000b9c4: c6 00 63 10 ld [ %g1 + 0x310 ], %g3 4000b9c8: 82 10 20 10 mov 0x10, %g1 * 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) { 4000b9cc: 80 a0 40 03 cmp %g1, %g3 4000b9d0: 02 80 00 06 be 4000b9e8 4000b9d4: 84 00 a0 01 inc %g2 int bit_mask; /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); 4000b9d8: 80 a0 a0 06 cmp %g2, 6 4000b9dc: 12 bf ff fc bne 4000b9cc 4000b9e0: 83 28 60 01 sll %g1, 1, %g1 4000b9e4: 86 10 20 80 mov 0x80, %g3 <== NOT EXECUTED bit_mask <<= 1) { if (bit_mask == requested_bytes_per_block) { is_valid = TRUE; } } *dest_bytes_per_block = ((is_valid) 4000b9e8: 03 10 00 66 sethi %hi(0x40019800), %g1 * 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_node( 4000b9ec: 98 10 20 00 clr %o4 bit_mask <<= 1) { if (bit_mask == requested_bytes_per_block) { is_valid = TRUE; } } *dest_bytes_per_block = ((is_valid) 4000b9f0: c6 20 60 f0 st %g3, [ %g1 + 0xf0 ] * 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_node( 4000b9f4: 92 10 20 01 mov 1, %o1 4000b9f8: 90 10 20 00 clr %o0 4000b9fc: 15 10 00 5f sethi %hi(0x40017c00), %o2 4000ba00: 17 00 00 10 sethi %hi(0x4000), %o3 4000ba04: 94 12 a3 38 or %o2, 0x338, %o2 4000ba08: 40 00 07 72 call 4000d7d0 4000ba0c: 96 12 e1 ed or %o3, 0x1ed, %o3 NULL ); 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; 4000ba10: 94 10 20 30 mov 0x30, %o2 * 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_node( 4000ba14: d0 26 20 18 st %o0, [ %i0 + 0x18 ] ( S_IFDIR | 0755 ), NULL ); temp_mt_entry->mt_fs_root.handlers = directory_handlers; temp_mt_entry->mt_fs_root.ops = op_table; 4000ba18: f2 26 20 20 st %i1, [ %i0 + 0x20 ] "", ( S_IFDIR | 0755 ), NULL ); temp_mt_entry->mt_fs_root.handlers = directory_handlers; 4000ba1c: f6 26 20 1c st %i3, [ %i0 + 0x1c ] temp_mt_entry->mt_fs_root.ops = op_table; temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS; 4000ba20: 13 10 00 64 sethi %hi(0x40019000), %o1 4000ba24: 90 06 20 30 add %i0, 0x30, %o0 4000ba28: 40 00 0b 99 call 4000e88c 4000ba2c: 92 12 62 60 or %o1, 0x260, %o1 /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); 4000ba30: 90 10 20 01 mov 1, %o0 4000ba34: 7f ff da da call 4000259c 4000ba38: 92 10 20 0c mov 0xc, %o1 if ( !fs_info ){ 4000ba3c: 80 a2 20 00 cmp %o0, 0 4000ba40: 02 80 00 0a be 4000ba68 4000ba44: 82 10 20 01 mov 1, %g1 fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; 4000ba48: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 /* * Set st_ino for the root to 1. */ fs_info->ino_count = 1; 4000ba4c: c2 22 00 00 st %g1, [ %o0 ] 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; 4000ba50: d0 26 20 2c st %o0, [ %i0 + 0x2c ] * Set st_ino for the root to 1. */ fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; 4000ba54: f6 22 20 08 st %i3, [ %o0 + 8 ] jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; 4000ba58: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] /* * Set st_ino for the root to 1. */ fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; 4000ba5c: f4 22 20 04 st %i2, [ %o0 + 4 ] jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; return 0; } 4000ba60: 81 c7 e0 08 ret 4000ba64: 91 e8 20 00 restore %g0, 0, %o0 /* * 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); 4000ba68: d0 06 20 18 ld [ %i0 + 0x18 ], %o0 <== NOT EXECUTED 4000ba6c: 7f ff da 05 call 40002280 <== NOT EXECUTED 4000ba70: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); 4000ba74: 40 00 09 b1 call 4000e138 <__errno> <== NOT EXECUTED 4000ba78: 01 00 00 00 nop <== NOT EXECUTED 4000ba7c: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 4000ba80: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000ba84: 81 c7 e0 08 ret <== NOT EXECUTED 4000ba88: 81 e8 00 00 restore <== NOT EXECUTED 400047c8 : int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { 400047c8: 9d e3 bf 58 save %sp, -168, %sp <== NOT EXECUTED /* * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; 400047cc: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 400047d0: c2 27 bf dc st %g1, [ %fp + -36 ] <== NOT EXECUTED if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) 400047d4: c4 10 60 30 lduh [ %g1 + 0x30 ], %g2 <== NOT EXECUTED 400047d8: 80 a0 a0 07 cmp %g2, 7 <== NOT EXECUTED 400047dc: 18 80 00 1b bgu 40004848 <== NOT EXECUTED 400047e0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED /* * Remove any separators at the end of the string. */ IMFS_get_token( token, new_name, &i ); 400047e4: a0 07 bf bb add %fp, -69, %l0 <== NOT EXECUTED 400047e8: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 400047ec: 7f ff ff 6a call 40004594 <== NOT EXECUTED 400047f0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 400047f4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 400047f8: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 400047fc: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40004800: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 40004804: 98 07 bf dc add %fp, -36, %o4 <== NOT EXECUTED 40004808: 40 00 49 c3 call 40016f14 <== NOT EXECUTED 4000480c: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 40004810: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004814: 02 80 00 13 be 40004860 <== NOT EXECUTED 40004818: c4 07 bf dc ld [ %fp + -36 ], %g2 <== 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 ); 4000481c: 90 07 bf ec add %fp, -20, %o0 <== NOT EXECUTED /* * Increment the link count of the node being pointed to. */ info.hard_link.link_node->st_nlink++; 40004820: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 40004824: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Increment the link count of the node being pointed to. */ info.hard_link.link_node->st_nlink++; 40004828: 82 00 60 01 inc %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 4000482c: 40 00 02 00 call 4000502c <== NOT EXECUTED 40004830: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED 40004834: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 40004838: c2 07 bf dc ld [ %fp + -36 ], %g1 <== NOT EXECUTED 4000483c: c4 20 60 44 st %g2, [ %g1 + 0x44 ] <== NOT EXECUTED return 0; } 40004840: 81 c7 e0 08 ret <== NOT EXECUTED 40004844: 91 e8 20 00 restore %g0, 0, %o0 <== 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 ); 40004848: 40 00 83 f9 call 4002582c <__errno> <== NOT EXECUTED 4000484c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004850: 82 10 20 1f mov 0x1f, %g1 <== NOT EXECUTED 40004854: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004858: 81 c7 e0 08 ret <== NOT EXECUTED 4000485c: 81 e8 00 00 restore <== NOT EXECUTED ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); 40004860: 40 00 83 f3 call 4002582c <__errno> <== NOT EXECUTED 40004864: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004868: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000486c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004870: 81 c7 e0 08 ret <== NOT EXECUTED 40004874: 81 e8 00 00 restore <== NOT EXECUTED 4001bc54 : MEMFILE_STATIC int IMFS_memfile_addblock( IMFS_jnode_t *the_jnode, unsigned int block ) { 4001bc54: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED block_p memory; block_p *block_entry_ptr; assert( the_jnode ); 4001bc58: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001bc5c: 02 80 00 26 be 4001bcf4 <== NOT EXECUTED 4001bc60: 92 10 21 69 mov 0x169, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001bc64: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bc68: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001bc6c: 02 80 00 0b be 4001bc98 <== NOT EXECUTED 4001bc70: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001bc74: 92 10 21 6d mov 0x16d, %o1 <== NOT EXECUTED 4001bc78: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001bc7c: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001bc80: 7f ff a4 21 call 40004d04 <__assert> <== NOT EXECUTED 4001bc84: 94 12 a1 48 or %o2, 0x148, %o2 ! 40038148 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001bc88: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bc8c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001bc90: 12 80 00 13 bne 4001bcdc <== NOT EXECUTED 4001bc94: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); 4001bc98: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001bc9c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001bca0: 7f ff fe 54 call 4001b5f0 <== NOT EXECUTED 4001bca4: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED if ( *block_entry_ptr ) 4001bca8: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); 4001bcac: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( *block_entry_ptr ) 4001bcb0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001bcb4: 12 80 00 0e bne 4001bcec <== NOT EXECUTED 4001bcb8: b0 10 20 00 clr %i0 <== NOT EXECUTED #if 0 fprintf(stdout, "%d %p", block, block_entry_ptr ); fflush(stdout); #endif memory = memfile_alloc_block(); 4001bcbc: 7f ff fe 40 call 4001b5bc <== NOT EXECUTED 4001bcc0: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED if ( !memory ) 4001bcc4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001bcc8: 02 80 00 14 be 4001bd18 <== NOT EXECUTED 4001bccc: 01 00 00 00 nop <== NOT EXECUTED return 1; *block_entry_ptr = memory; 4001bcd0: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED return 0; } 4001bcd4: 81 c7 e0 08 ret <== NOT EXECUTED 4001bcd8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001bcdc: 40 00 26 d4 call 4002582c <__errno> <== NOT EXECUTED 4001bce0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001bce4: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001bce8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001bcec: 81 c7 e0 08 ret <== NOT EXECUTED 4001bcf0: 81 e8 00 00 restore <== NOT EXECUTED ) { block_p memory; block_p *block_entry_ptr; assert( the_jnode ); 4001bcf4: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001bcf8: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001bcfc: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001bd00: 7f ff a4 01 call 40004d04 <__assert> <== NOT EXECUTED 4001bd04: 94 12 a1 38 or %o2, 0x138, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001bd08: 40 00 26 c9 call 4002582c <__errno> <== NOT EXECUTED 4001bd0c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001bd10: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001bd14: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001bd18: 81 c7 e0 08 ret <== NOT EXECUTED 4001bd1c: 81 e8 00 00 restore <== NOT EXECUTED 4001bd20 : MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { 4001bd20: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001bd24: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001bd28: 02 80 00 56 be 4001be80 <== NOT EXECUTED 4001bd2c: 92 10 21 31 mov 0x131, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001bd30: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bd34: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001bd38: 02 80 00 0b be 4001bd64 <== NOT EXECUTED 4001bd3c: 92 10 21 35 mov 0x135, %o1 <== NOT EXECUTED 4001bd40: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001bd44: 90 12 20 e8 or %o0, 0xe8, %o0 ! 400380e8 <_CPU_Trap_slot_template+0xf38> <== NOT EXECUTED 4001bd48: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001bd4c: 7f ff a3 ee call 40004d04 <__assert> <== NOT EXECUTED 4001bd50: 94 12 a1 48 or %o2, 0x148, %o2 ! 40038148 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001bd54: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bd58: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001bd5c: 12 80 00 3d bne 4001be50 <== NOT EXECUTED 4001bd60: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) 4001bd64: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 4001bd68: e2 00 60 58 ld [ %g1 + 0x58 ], %l1 ! 4003c458 <== NOT EXECUTED 4001bd6c: a1 34 60 02 srl %l1, 2, %l0 <== NOT EXECUTED 4001bd70: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001bd74: 7f ff 9c bc call 40003064 <.umul> <== NOT EXECUTED 4001bd78: 90 04 20 01 add %l0, 1, %o0 <== NOT EXECUTED 4001bd7c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001bd80: 7f ff 9c b9 call 40003064 <.umul> <== NOT EXECUTED 4001bd84: 90 02 20 01 inc %o0 <== NOT EXECUTED 4001bd88: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001bd8c: 7f ff 9c b6 call 40003064 <.umul> <== NOT EXECUTED 4001bd90: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 4001bd94: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 4001bd98: 1a 80 00 34 bcc 4001be68 <== NOT EXECUTED 4001bd9c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); if ( new_length <= the_jnode->info.file.size ) 4001bda0: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 <== NOT EXECUTED 4001bda4: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 4001bda8: 04 80 00 24 ble 4001be38 <== NOT EXECUTED 4001bdac: 82 10 20 00 clr %g1 <== NOT EXECUTED /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bdb0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001bdb4: 40 00 63 1e call 40034a2c <.div> <== NOT EXECUTED 4001bdb8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bdbc: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED /* * Calculate the number of range of blocks to allocate */ new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bdc0: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bdc4: 40 00 63 1a call 40034a2c <.div> <== NOT EXECUTED 4001bdc8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { 4001bdcc: 80 a4 80 08 cmp %l2, %o0 <== NOT EXECUTED 4001bdd0: 0a 80 00 1c bcs 4001be40 <== NOT EXECUTED 4001bdd4: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 4001bdd8: 10 80 00 05 b 4001bdec <== NOT EXECUTED 4001bddc: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4001bde0: 80 a4 80 10 cmp %l2, %l0 <== NOT EXECUTED 4001bde4: 2a 80 00 18 bcs,a 4001be44 <== NOT EXECUTED 4001bde8: f2 26 20 4c st %i1, [ %i0 + 0x4c ] <== NOT EXECUTED if ( IMFS_memfile_addblock( the_jnode, block ) ) { 4001bdec: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001bdf0: 7f ff ff 99 call 4001bc54 <== NOT EXECUTED 4001bdf4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001bdf8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001bdfc: 22 bf ff f9 be,a 4001bde0 <== NOT EXECUTED 4001be00: a0 04 20 01 inc %l0 <== NOT EXECUTED for ( ; block>=old_blocks ; block-- ) { 4001be04: 10 80 00 06 b 4001be1c <== NOT EXECUTED 4001be08: 80 a4 40 10 cmp %l1, %l0 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); 4001be0c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001be10: 7f ff fe ac call 4001b8c0 <== NOT EXECUTED 4001be14: a0 04 3f ff add %l0, -1, %l0 <== 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-- ) { 4001be18: 80 a4 40 10 cmp %l1, %l0 <== NOT EXECUTED 4001be1c: 08 bf ff fc bleu 4001be0c <== NOT EXECUTED 4001be20: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); } rtems_set_errno_and_return_minus_one( ENOSPC ); 4001be24: 40 00 26 82 call 4002582c <__errno> <== NOT EXECUTED 4001be28: 01 00 00 00 nop <== NOT EXECUTED 4001be2c: 82 10 20 1c mov 0x1c, %g1 ! 1c <== NOT EXECUTED 4001be30: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001be34: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED * Set the new length of the file. */ the_jnode->info.file.size = new_length; return 0; } 4001be38: 81 c7 e0 08 ret <== NOT EXECUTED 4001be3c: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; 4001be40: f2 26 20 4c st %i1, [ %i0 + 0x4c ] <== NOT EXECUTED 4001be44: 82 10 20 00 clr %g1 <== NOT EXECUTED return 0; } 4001be48: 81 c7 e0 08 ret <== NOT EXECUTED 4001be4c: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001be50: 40 00 26 77 call 4002582c <__errno> <== NOT EXECUTED 4001be54: 01 00 00 00 nop <== NOT EXECUTED 4001be58: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001be5c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001be60: 10 bf ff f6 b 4001be38 <== NOT EXECUTED 4001be64: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001be68: 40 00 26 71 call 4002582c <__errno> <== NOT EXECUTED 4001be6c: 01 00 00 00 nop <== NOT EXECUTED 4001be70: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001be74: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001be78: 10 bf ff f0 b 4001be38 <== NOT EXECUTED 4001be7c: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001be80: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001be84: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001be88: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001be8c: 7f ff a3 9e call 40004d04 <__assert> <== NOT EXECUTED 4001be90: 94 12 a1 38 or %o2, 0x138, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001be94: 40 00 26 66 call 4002582c <__errno> <== NOT EXECUTED 4001be98: 01 00 00 00 nop <== NOT EXECUTED 4001be9c: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001bea0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001bea4: 10 bf ff e5 b 4001be38 <== NOT EXECUTED 4001bea8: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED 4001b5f0 : #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { 4001b5f0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001b5f4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001b5f8: 02 80 00 76 be 4001b7d0 <== NOT EXECUTED 4001b5fc: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED if ( !the_jnode ) return NULL; assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001b600: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001b604: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001b608: 12 80 00 2f bne 4001b6c4 <== NOT EXECUTED 4001b60c: 92 10 23 8a mov 0x38a, %o1 <== NOT EXECUTED /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { 4001b610: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 4001b614: c4 00 60 58 ld [ %g1 + 0x58 ], %g2 ! 4003c458 <== NOT EXECUTED 4001b618: a3 30 a0 02 srl %g2, 2, %l1 <== NOT EXECUTED 4001b61c: 82 04 7f ff add %l1, -1, %g1 <== NOT EXECUTED 4001b620: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001b624: 08 80 00 20 bleu 4001b6a4 <== NOT EXECUTED 4001b628: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED /* * Is the block number in the doubly indirect portion? */ if ( my_block <= LAST_DOUBLY_INDIRECT ) { 4001b62c: 90 04 60 01 add %l1, 1, %o0 <== NOT EXECUTED 4001b630: 7f ff 9e 8d call 40003064 <.umul> <== NOT EXECUTED 4001b634: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001b638: 82 02 3f ff add %o0, -1, %g1 <== NOT EXECUTED 4001b63c: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001b640: 18 80 00 31 bgu 4001b704 <== NOT EXECUTED 4001b644: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED #if 0 fprintf(stdout, "(d %d) ", block ); fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; 4001b648: a0 26 40 11 sub %i1, %l1, %l0 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001b64c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001b650: 40 00 65 a1 call 40034cd4 <.urem> <== NOT EXECUTED 4001b654: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001b658: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001b65c: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001b660: 40 00 64 f1 call 40034a24 <.udiv> <== NOT EXECUTED 4001b664: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 4001b668: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED #endif my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001b66c: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 4001b670: 02 80 00 4e be 4001b7a8 <== NOT EXECUTED 4001b674: e0 06 20 54 ld [ %i0 + 0x54 ], %l0 <== NOT EXECUTED if ( !p ) { 4001b678: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001b67c: 02 80 00 63 be 4001b808 <== NOT EXECUTED 4001b680: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) return 0; info->doubly_indirect = p; } p1 = (block_p *)p[ doubly ]; 4001b684: a3 2c 60 02 sll %l1, 2, %l1 <== NOT EXECUTED 4001b688: c2 04 40 10 ld [ %l1 + %l0 ], %g1 <== NOT EXECUTED if ( !p1 ) { 4001b68c: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001b690: 02 80 00 65 be 4001b824 <== NOT EXECUTED 4001b694: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) return 0; p[ doubly ] = (block_p) p1; } return (block_p *)&p1[ singly ]; 4001b698: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED 4001b69c: 81 c7 e0 08 ret <== NOT EXECUTED 4001b6a0: 91 e8 40 08 restore %g1, %o0, %o0 <== NOT EXECUTED fprintf(stdout, "(s %d) ", block ); fflush(stdout); #endif p = info->indirect; if ( malloc_it ) { 4001b6a4: 02 80 00 12 be 4001b6ec <== NOT EXECUTED 4001b6a8: d0 06 20 50 ld [ %i0 + 0x50 ], %o0 <== NOT EXECUTED if ( !p ) { 4001b6ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b6b0: 02 80 00 4f be 4001b7ec <== NOT EXECUTED 4001b6b4: 01 00 00 00 nop <== NOT EXECUTED p = memfile_alloc_block(); if ( !p ) return 0; info->indirect = p; } return &info->indirect[ my_block ]; 4001b6b8: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED 4001b6bc: 81 c7 e0 08 ret <== NOT EXECUTED 4001b6c0: 91 e8 40 08 restore %g1, %o0, %o0 <== NOT EXECUTED assert( the_jnode ); if ( !the_jnode ) return NULL; assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001b6c4: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001b6c8: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001b6cc: 7f ff a5 8e call 40004d04 <__assert> <== NOT EXECUTED 4001b6d0: 94 12 a1 48 or %o2, 0x148, %o2 ! 40038148 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001b6d4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001b6d8: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001b6dc: 02 bf ff ce be 4001b614 <== NOT EXECUTED 4001b6e0: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001b6e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001b6e8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED } if ( !p ) return 0; return &info->indirect[ my_block ]; 4001b6ec: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED info->indirect = p; } return &info->indirect[ my_block ]; } if ( !p ) 4001b6f0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b6f4: 02 bf ff fc be 4001b6e4 <== NOT EXECUTED 4001b6f8: b0 02 00 01 add %o0, %g1, %i0 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001b6fc: 81 c7 e0 08 ret <== NOT EXECUTED 4001b700: 81 e8 00 00 restore <== NOT EXECUTED #endif /* * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { 4001b704: 90 02 20 01 inc %o0 <== NOT EXECUTED 4001b708: 7f ff 9e 57 call 40003064 <.umul> <== NOT EXECUTED 4001b70c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001b710: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 4001b714: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 4001b718: 18 bf ff f3 bgu 4001b6e4 <== NOT EXECUTED 4001b71c: a0 26 40 10 sub %i1, %l0, %l0 <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001b720: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001b724: 40 00 65 6c call 40034cd4 <.urem> <== NOT EXECUTED 4001b728: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001b72c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001b730: a6 10 00 08 mov %o0, %l3 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001b734: 40 00 64 bc call 40034a24 <.udiv> <== NOT EXECUTED 4001b738: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; 4001b73c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001b740: 40 00 64 b9 call 40034a24 <.udiv> <== NOT EXECUTED 4001b744: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 4001b748: 92 10 00 11 mov %l1, %o1 <== 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; 4001b74c: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 4001b750: 40 00 65 61 call 40034cd4 <.urem> <== NOT EXECUTED 4001b754: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 4001b758: 80 a6 a0 00 cmp %i2, 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; 4001b75c: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 4001b760: 02 80 00 38 be 4001b840 <== NOT EXECUTED 4001b764: e0 06 20 58 ld [ %i0 + 0x58 ], %l0 <== NOT EXECUTED if ( !p ) { 4001b768: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001b76c: 02 80 00 40 be 4001b86c <== NOT EXECUTED 4001b770: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) return 0; info->triply_indirect = p; } p1 = (block_p *) p[ triply ]; 4001b774: a5 2c a0 02 sll %l2, 2, %l2 <== NOT EXECUTED 4001b778: c2 04 80 10 ld [ %l2 + %l0 ], %g1 <== NOT EXECUTED if ( !p1 ) { 4001b77c: a2 90 60 00 orcc %g1, 0, %l1 <== NOT EXECUTED 4001b780: 02 80 00 49 be 4001b8a4 <== NOT EXECUTED 4001b784: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) return 0; p[ triply ] = (block_p) p1; } p2 = (block_p *)p1[ doubly ]; 4001b788: a1 2e 60 02 sll %i1, 2, %l0 <== NOT EXECUTED 4001b78c: c2 04 00 11 ld [ %l0 + %l1 ], %g1 <== NOT EXECUTED if ( !p2 ) { 4001b790: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001b794: 02 80 00 3d be 4001b888 <== NOT EXECUTED 4001b798: 01 00 00 00 nop <== NOT EXECUTED p2 = memfile_alloc_block(); if ( !p2 ) return 0; p1[ doubly ] = (block_p) p2; } return (block_p *)&p2[ singly ]; 4001b79c: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED 4001b7a0: 81 c7 e0 08 ret <== NOT EXECUTED 4001b7a4: 91 e8 40 08 restore %g1, %o0, %o0 <== NOT EXECUTED } return (block_p *)&p1[ singly ]; } if ( !p ) 4001b7a8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001b7ac: 02 bf ff ce be 4001b6e4 <== NOT EXECUTED 4001b7b0: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED return 0; p = (block_p *)p[ doubly ]; 4001b7b4: c4 04 00 01 ld [ %l0 + %g1 ], %g2 <== NOT EXECUTED #if 0 fprintf(stdout, "(d %d %d %d %d %p %p) ", block, my_block, doubly, singly, p, &p[singly] ); fflush(stdout); #endif return (block_p *)&p[ singly ]; 4001b7b8: 87 2c a0 02 sll %l2, 2, %g3 <== NOT EXECUTED if ( !p ) return 0; p = (block_p *)p[ doubly ]; if ( !p ) 4001b7bc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001b7c0: 02 bf ff c9 be 4001b6e4 <== NOT EXECUTED 4001b7c4: b0 00 c0 02 add %g3, %g2, %i0 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001b7c8: 81 c7 e0 08 ret <== NOT EXECUTED 4001b7cc: 81 e8 00 00 restore <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001b7d0: 92 10 23 86 mov 0x386, %o1 <== NOT EXECUTED 4001b7d4: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001b7d8: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001b7dc: 7f ff a5 4a call 40004d04 <__assert> <== NOT EXECUTED 4001b7e0: 94 12 a1 38 or %o2, 0x138, %o2 ! 40038138 <_CPU_Trap_slot_template+0xf88> <== NOT EXECUTED 4001b7e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001b7e8: 81 e8 00 00 restore <== NOT EXECUTED p = info->indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); 4001b7ec: 7f ff ff 74 call 4001b5bc <== NOT EXECUTED 4001b7f0: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001b7f4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b7f8: 02 bf ff bb be 4001b6e4 <== NOT EXECUTED 4001b7fc: 01 00 00 00 nop <== NOT EXECUTED return 0; info->indirect = p; 4001b800: 10 bf ff ae b 4001b6b8 <== NOT EXECUTED 4001b804: d0 26 20 50 st %o0, [ %i0 + 0x50 ] <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); 4001b808: 7f ff ff 6d call 4001b5bc <== NOT EXECUTED 4001b80c: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001b810: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b814: 02 bf ff b4 be 4001b6e4 <== NOT EXECUTED 4001b818: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->doubly_indirect = p; 4001b81c: 10 bf ff 9a b 4001b684 <== NOT EXECUTED 4001b820: d0 26 20 54 st %o0, [ %i0 + 0x54 ] <== NOT EXECUTED } p1 = (block_p *)p[ doubly ]; if ( !p1 ) { p1 = memfile_alloc_block(); 4001b824: 7f ff ff 66 call 4001b5bc <== NOT EXECUTED 4001b828: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 4001b82c: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001b830: 02 bf ff ad be 4001b6e4 <== NOT EXECUTED 4001b834: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p[ doubly ] = (block_p) p1; 4001b838: 10 bf ff 98 b 4001b698 <== NOT EXECUTED 4001b83c: c2 24 40 10 st %g1, [ %l1 + %l0 ] <== NOT EXECUTED p1[ doubly ] = (block_p) p2; } return (block_p *)&p2[ singly ]; } if ( !p ) 4001b840: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001b844: 02 bf ff a8 be 4001b6e4 <== NOT EXECUTED 4001b848: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED #if 0 fprintf(stdout, "(t %d %d %d %d %d) ", block, my_block, triply, doubly, singly ); fflush(stdout); #endif p1 = (block_p *) p[ triply ]; 4001b84c: d0 04 00 01 ld [ %l0 + %g1 ], %o0 <== NOT EXECUTED if ( !p1 ) 4001b850: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b854: 02 bf ff a4 be 4001b6e4 <== NOT EXECUTED 4001b858: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p ) return 0; return (block_p *)&p2[ singly ]; 4001b85c: c6 02 00 01 ld [ %o0 + %g1 ], %g3 <== NOT EXECUTED 4001b860: 85 2c e0 02 sll %l3, 2, %g2 <== NOT EXECUTED 4001b864: 81 c7 e0 08 ret <== NOT EXECUTED 4001b868: 91 e8 80 03 restore %g2, %g3, %o0 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); 4001b86c: 7f ff ff 54 call 4001b5bc <== NOT EXECUTED 4001b870: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001b874: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b878: 02 bf ff 9b be 4001b6e4 <== NOT EXECUTED 4001b87c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->triply_indirect = p; 4001b880: 10 bf ff bd b 4001b774 <== NOT EXECUTED 4001b884: d0 26 20 58 st %o0, [ %i0 + 0x58 ] <== NOT EXECUTED p[ triply ] = (block_p) p1; } p2 = (block_p *)p1[ doubly ]; if ( !p2 ) { p2 = memfile_alloc_block(); 4001b888: 7f ff ff 4d call 4001b5bc <== NOT EXECUTED 4001b88c: 01 00 00 00 nop <== NOT EXECUTED if ( !p2 ) 4001b890: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001b894: 02 bf ff 94 be 4001b6e4 <== NOT EXECUTED 4001b898: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p1[ doubly ] = (block_p) p2; 4001b89c: 10 bf ff c0 b 4001b79c <== NOT EXECUTED 4001b8a0: c2 24 00 11 st %g1, [ %l0 + %l1 ] <== NOT EXECUTED info->triply_indirect = p; } p1 = (block_p *) p[ triply ]; if ( !p1 ) { p1 = memfile_alloc_block(); 4001b8a4: 7f ff ff 46 call 4001b5bc <== NOT EXECUTED 4001b8a8: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 4001b8ac: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001b8b0: 02 bf ff 8d be 4001b6e4 <== NOT EXECUTED 4001b8b4: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED return 0; p[ triply ] = (block_p) p1; 4001b8b8: 10 bf ff b4 b 4001b788 <== NOT EXECUTED 4001b8bc: c2 24 80 10 st %g1, [ %l2 + %l0 ] <== NOT EXECUTED 4001c314 : IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { 4001c314: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001c318: a4 96 20 00 orcc %i0, 0, %l2 <== NOT EXECUTED 4001c31c: 02 80 00 ac be 4001c5cc <== NOT EXECUTED 4001c320: 92 10 22 4a mov 0x24a, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE || 4001c324: c4 04 a0 48 ld [ %l2 + 0x48 ], %g2 <== NOT EXECUTED 4001c328: 82 00 bf fb add %g2, -5, %g1 <== NOT EXECUTED 4001c32c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001c330: 08 80 00 0c bleu 4001c360 <== NOT EXECUTED 4001c334: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c338: 92 10 22 4f mov 0x24f, %o1 <== NOT EXECUTED 4001c33c: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c340: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c344: 7f ff a2 70 call 40004d04 <__assert> <== NOT EXECUTED 4001c348: 94 12 a1 98 or %o2, 0x198, %o2 ! 40038198 <_CPU_Trap_slot_template+0xfe8> <== NOT EXECUTED the_jnode->type == IMFS_LINEAR_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE && 4001c34c: c4 04 a0 48 ld [ %l2 + 0x48 ], %g2 <== NOT EXECUTED 4001c350: 82 00 bf fb add %g2, -5, %g1 <== NOT EXECUTED 4001c354: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001c358: 18 80 00 82 bgu 4001c560 <== NOT EXECUTED 4001c35c: 01 00 00 00 nop <== NOT EXECUTED /* * Error checks on arguments */ assert( dest ); 4001c360: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001c364: 02 80 00 a5 be 4001c5f8 <== NOT EXECUTED 4001c368: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED /* * If there is nothing to read, then quick exit. */ my_length = length; if ( !my_length ) 4001c36c: 02 80 00 92 be 4001c5b4 <== NOT EXECUTED 4001c370: 80 a0 a0 06 cmp %g2, 6 <== NOT EXECUTED /* * Linear files (as created from a tar file are easier to handle * than block files). */ if (the_jnode->type == IMFS_LINEAR_FILE) { 4001c374: 02 80 00 4e be 4001c4ac <== NOT EXECUTED 4001c378: 82 06 c0 19 add %i3, %i1, %g1 <== 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 ) 4001c37c: c4 04 a0 4c ld [ %l2 + 0x4c ], %g2 <== NOT EXECUTED 4001c380: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4001c384: 18 80 00 31 bgu 4001c448 <== NOT EXECUTED 4001c388: a2 10 00 1b mov %i3, %l1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c38c: 27 10 00 f1 sethi %hi(0x4003c400), %l3 <== NOT EXECUTED 4001c390: f6 04 e0 58 ld [ %l3 + 0x58 ], %i3 ! 4003c458 <== NOT EXECUTED 4001c394: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001c398: 40 00 62 51 call 40034cdc <.rem> <== NOT EXECUTED 4001c39c: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c3a0: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c3a4: a8 10 00 08 mov %o0, %l4 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c3a8: 40 00 61 a1 call 40034a2c <.div> <== NOT EXECUTED 4001c3ac: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 4001c3b0: 80 a5 20 00 cmp %l4, 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; 4001c3b4: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( start_offset ) { 4001c3b8: a0 10 00 1a mov %i2, %l0 <== NOT EXECUTED 4001c3bc: 12 80 00 4d bne 4001c4f0 <== NOT EXECUTED 4001c3c0: b0 10 20 00 clr %i0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c3c4: f4 04 e0 58 ld [ %l3 + 0x58 ], %i2 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001c3c8: 80 a4 40 1a cmp %l1, %i2 <== NOT EXECUTED 4001c3cc: 1a 80 00 0e bcc 4001c404 <== NOT EXECUTED 4001c3d0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED * Phase 3: possibly the first part of one block */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { 4001c3d4: 10 80 00 20 b 4001c454 <== NOT EXECUTED 4001c3d8: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); 4001c3dc: d2 02 40 00 ld [ %o1 ], %o1 <== NOT EXECUTED 4001c3e0: 40 00 2b b8 call 400272c0 <== NOT EXECUTED 4001c3e4: a2 24 40 1a sub %l1, %i2, %l1 <== 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 ) { 4001c3e8: c2 04 e0 58 ld [ %l3 + 0x58 ], %g1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); 4001c3ec: a0 04 00 1a add %l0, %i2, %l0 <== 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 ) { 4001c3f0: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); dest += to_copy; block++; 4001c3f4: b2 06 60 01 inc %i1 <== 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 ) { 4001c3f8: 18 80 00 16 bgu 4001c450 <== NOT EXECUTED 4001c3fc: b0 06 00 1a add %i0, %i2, %i0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001c400: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001c404: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001c408: 7f ff fc 7a call 4001b5f0 <== NOT EXECUTED 4001c40c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); 4001c410: 94 10 00 1a mov %i2, %o2 <== 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 ); 4001c414: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED assert( block_ptr ); 4001c418: 80 a2 60 00 cmp %o1, 0 <== NOT EXECUTED 4001c41c: 12 bf ff f0 bne 4001c3dc <== NOT EXECUTED 4001c420: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001c424: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c428: 92 10 22 a5 mov 0x2a5, %o1 <== NOT EXECUTED 4001c42c: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c430: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c434: 7f ff a2 34 call 40004d04 <__assert> <== NOT EXECUTED 4001c438: 94 12 a1 88 or %o2, 0x188, %o2 ! 40038188 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED if ( !block_ptr ) return copied; 4001c43c: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED } IMFS_update_atime( the_jnode ); return copied; } 4001c440: 81 c7 e0 08 ret <== NOT EXECUTED 4001c444: 91 e8 00 0a restore %g0, %o2, %o0 <== NOT EXECUTED * in memory file, then shorten the length to read. */ last_byte = start + length; if ( last_byte > the_jnode->info.file.size ) my_length = the_jnode->info.file.size - start; 4001c448: 10 bf ff d1 b 4001c38c <== NOT EXECUTED 4001c44c: a2 20 80 19 sub %g2, %i1, %l1 <== NOT EXECUTED * Phase 3: possibly the first part of one block */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { 4001c450: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4001c454: 02 80 00 0f be 4001c490 <== NOT EXECUTED 4001c458: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001c45c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001c460: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4001c464: 7f ff fc 63 call 4001b5f0 <== NOT EXECUTED 4001c468: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001c46c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c470: 22 80 00 4a be,a 4001c598 <== NOT EXECUTED 4001c474: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); 4001c478: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED copied += my_length; 4001c47c: b0 06 00 11 add %i0, %l1, %i0 <== NOT EXECUTED if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); 4001c480: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001c484: 40 00 2b 8f call 400272c0 <== NOT EXECUTED 4001c488: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED copied += my_length; } IMFS_update_atime( the_jnode ); 4001c48c: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001c490: 7f ff a2 e7 call 4000502c <== NOT EXECUTED 4001c494: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001c498: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return copied; 4001c49c: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); 4001c4a0: c2 24 a0 3c st %g1, [ %l2 + 0x3c ] <== NOT EXECUTED return copied; } 4001c4a4: 81 c7 e0 08 ret <== NOT EXECUTED 4001c4a8: 91 e8 00 0a restore %g0, %o2, %o0 <== 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)) 4001c4ac: c2 04 a0 4c ld [ %l2 + 0x4c ], %g1 <== NOT EXECUTED 4001c4b0: b0 10 00 1b mov %i3, %i0 <== NOT EXECUTED 4001c4b4: 82 20 40 19 sub %g1, %i1, %g1 <== NOT EXECUTED 4001c4b8: 80 a6 c0 01 cmp %i3, %g1 <== NOT EXECUTED 4001c4bc: 18 80 00 22 bgu 4001c544 <== NOT EXECUTED 4001c4c0: d2 04 a0 50 ld [ %l2 + 0x50 ], %o1 <== NOT EXECUTED my_length = the_jnode->info.linearfile.size - start; memcpy(dest, &file_ptr[start], my_length); 4001c4c4: 92 02 40 19 add %o1, %i1, %o1 <== NOT EXECUTED 4001c4c8: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4001c4cc: 40 00 2b 7d call 400272c0 <== NOT EXECUTED 4001c4d0: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); 4001c4d4: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001c4d8: 7f ff a2 d5 call 4000502c <== NOT EXECUTED 4001c4dc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001c4e0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return copied; 4001c4e4: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); 4001c4e8: 10 bf ff ef b 4001c4a4 <== NOT EXECUTED 4001c4ec: c2 24 a0 3c st %g1, [ %l2 + 0x3c ] <== 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 ); 4001c4f0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4001c4f4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001c4f8: 7f ff fc 3e call 4001b5f0 <== NOT EXECUTED 4001c4fc: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001c500: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c504: 02 80 00 1d be 4001c578 <== NOT EXECUTED 4001c508: 92 26 c0 14 sub %i3, %l4, %o1 <== NOT EXECUTED */ 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; 4001c50c: 80 a4 40 09 cmp %l1, %o1 <== NOT EXECUTED 4001c510: 08 80 00 03 bleu 4001c51c <== NOT EXECUTED 4001c514: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 4001c518: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); 4001c51c: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED dest += to_copy; 4001c520: a0 06 80 0a add %i2, %o2, %l0 <== NOT EXECUTED to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); 4001c524: 92 05 00 09 add %l4, %o1, %o1 <== NOT EXECUTED dest += to_copy; block++; 4001c528: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001c52c: a2 24 40 0a sub %l1, %o2, %l1 <== NOT EXECUTED 4001c530: b0 10 00 0a mov %o2, %i0 <== NOT EXECUTED to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); 4001c534: 40 00 2b 63 call 400272c0 <== NOT EXECUTED 4001c538: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c53c: 10 bf ff a3 b 4001c3c8 <== NOT EXECUTED 4001c540: f4 04 e0 58 ld [ %l3 + 0x58 ], %i2 <== NOT EXECUTED unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) my_length = the_jnode->info.linearfile.size - start; 4001c544: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED memcpy(dest, &file_ptr[start], my_length); 4001c548: 92 02 40 19 add %o1, %i1, %o1 <== NOT EXECUTED 4001c54c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4001c550: 40 00 2b 5c call 400272c0 <== NOT EXECUTED 4001c554: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; } IMFS_update_atime( the_jnode ); 4001c558: 10 bf ff e0 b 4001c4d8 <== NOT EXECUTED 4001c55c: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED assert( the_jnode->type == IMFS_MEMORY_FILE || the_jnode->type == IMFS_LINEAR_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE && the_jnode->type != IMFS_LINEAR_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001c560: 40 00 24 b3 call 4002582c <__errno> <== NOT EXECUTED 4001c564: 01 00 00 00 nop <== NOT EXECUTED 4001c568: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001c56c: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001c570: 10 bf ff b4 b 4001c440 <== NOT EXECUTED 4001c574: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001c578: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c57c: 92 10 22 94 mov 0x294, %o1 <== NOT EXECUTED 4001c580: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c584: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c588: 7f ff a1 df call 40004d04 <__assert> <== NOT EXECUTED 4001c58c: 94 12 a1 88 or %o2, 0x188, %o2 ! 40038188 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED 4001c590: 10 bf ff ac b 4001c440 <== NOT EXECUTED 4001c594: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001c598: 92 10 22 b7 mov 0x2b7, %o1 <== NOT EXECUTED 4001c59c: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c5a0: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c5a4: 7f ff a1 d8 call 40004d04 <__assert> <== NOT EXECUTED 4001c5a8: 94 12 a1 88 or %o2, 0x188, %o2 ! 40038188 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED if ( !block_ptr ) return copied; 4001c5ac: 10 bf ff a5 b 4001c440 <== NOT EXECUTED 4001c5b0: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED * If there is nothing to read, then quick exit. */ my_length = length; if ( !my_length ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001c5b4: 40 00 24 9e call 4002582c <__errno> <== NOT EXECUTED 4001c5b8: 01 00 00 00 nop <== NOT EXECUTED 4001c5bc: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001c5c0: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001c5c4: 10 bf ff 9f b 4001c440 <== NOT EXECUTED 4001c5c8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001c5cc: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c5d0: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c5d4: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c5d8: 7f ff a1 cb call 40004d04 <__assert> <== NOT EXECUTED 4001c5dc: 94 12 a1 38 or %o2, 0x138, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001c5e0: 40 00 24 93 call 4002582c <__errno> <== NOT EXECUTED 4001c5e4: 01 00 00 00 nop <== NOT EXECUTED 4001c5e8: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001c5ec: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001c5f0: 10 bf ff 94 b 4001c440 <== NOT EXECUTED 4001c5f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Error checks on arguments */ assert( dest ); 4001c5f8: 92 10 22 58 mov 0x258, %o1 <== NOT EXECUTED 4001c5fc: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c600: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c604: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c608: 7f ff a1 bf call 40004d04 <__assert> <== NOT EXECUTED 4001c60c: 94 12 a1 e8 or %o2, 0x1e8, %o2 <== NOT EXECUTED if ( !dest ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001c610: 40 00 24 87 call 4002582c <__errno> <== NOT EXECUTED 4001c614: 01 00 00 00 nop <== NOT EXECUTED 4001c618: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001c61c: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001c620: 10 bf ff 88 b 4001c440 <== NOT EXECUTED 4001c624: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001b96c : */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { 4001b96c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001b970: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001b974: 02 80 00 74 be 4001bb44 <== NOT EXECUTED 4001b978: 92 10 21 ec mov 0x1ec, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001b97c: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001b980: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001b984: 02 80 00 0b be 4001b9b0 <== NOT EXECUTED 4001b988: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001b98c: 92 10 21 f0 mov 0x1f0, %o1 <== NOT EXECUTED 4001b990: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001b994: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001b998: 7f ff a4 db call 40004d04 <__assert> <== NOT EXECUTED 4001b99c: 94 12 a1 48 or %o2, 0x148, %o2 ! 40038148 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001b9a0: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001b9a4: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001b9a8: 12 80 00 5a bne 4001bb10 <== NOT EXECUTED 4001b9ac: 01 00 00 00 nop <== 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; 4001b9b0: 25 10 00 f1 sethi %hi(0x4003c400), %l2 <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 4001b9b4: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 <== 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; 4001b9b8: c4 04 a0 58 ld [ %l2 + 0x58 ], %g2 <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 4001b9bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001b9c0: 02 80 00 05 be 4001b9d4 <== NOT EXECUTED 4001b9c4: a7 30 a0 02 srl %g2, 2, %l3 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); 4001b9c8: 90 06 20 50 add %i0, 0x50, %o0 <== NOT EXECUTED 4001b9cc: 7f ff ff c9 call 4001b8f0 <== NOT EXECUTED 4001b9d0: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED } if ( info->doubly_indirect ) { 4001b9d4: d0 06 20 54 ld [ %i0 + 0x54 ], %o0 <== NOT EXECUTED 4001b9d8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b9dc: 02 80 00 19 be 4001ba40 <== NOT EXECUTED 4001b9e0: c2 04 a0 58 ld [ %l2 + 0x58 ], %g1 <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED 4001b9f0: 84 10 20 00 clr %g2 <== NOT EXECUTED 4001b9f4: 10 80 00 03 b 4001ba00 <== NOT EXECUTED 4001b9f8: a0 10 20 00 clr %l0 <== NOT EXECUTED 4001b9fc: d0 06 20 54 ld [ %i0 + 0x54 ], %o0 <== NOT EXECUTED if ( info->doubly_indirect[i] ) { 4001ba00: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001ba04: c4 00 40 08 ld [ %g1 + %o0 ], %g2 <== NOT EXECUTED 4001ba08: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001ba0c: 02 80 00 04 be 4001ba1c <== NOT EXECUTED 4001ba10: 90 00 40 08 add %g1, %o0, %o0 <== NOT EXECUTED memfile_free_blocks_in_table( 4001ba14: 7f ff ff b7 call 4001b8f0 <== NOT EXECUTED 4001ba18: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001ba30: a0 10 00 02 mov %g2, %l0 <== 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 ); 4001ba34: 90 06 20 54 add %i0, 0x54, %o0 <== NOT EXECUTED 4001ba38: 7f ff ff ae call 4001b8f0 <== NOT EXECUTED 4001ba3c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED } if ( info->triply_indirect ) { 4001ba40: c4 06 20 58 ld [ %i0 + 0x58 ], %g2 <== NOT EXECUTED 4001ba44: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001ba48: 02 80 00 37 be 4001bb24 <== NOT EXECUTED 4001ba4c: 82 10 20 00 clr %g1 <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED 4001ba60: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED p = (block_p *) info->triply_indirect[i]; 4001ba64: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ 4001ba68: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ba6c: 02 80 00 31 be 4001bb30 <== NOT EXECUTED 4001ba70: a0 10 00 01 mov %g1, %l0 <== NOT EXECUTED } if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; 4001ba74: a8 10 20 00 clr %l4 <== NOT EXECUTED 4001ba78: aa 10 20 00 clr %l5 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ break; for ( j=0 ; j <== NOT EXECUTED 4001ba8c: 90 05 40 02 add %l5, %g2, %o0 <== NOT EXECUTED 4001ba90: a2 10 20 00 clr %l1 <== NOT EXECUTED 4001ba94: 84 10 20 00 clr %g2 <== NOT EXECUTED if ( p[j] ) { 4001ba98: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001ba9c: c4 00 40 10 ld [ %g1 + %l0 ], %g2 <== NOT EXECUTED 4001baa0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001baa4: 02 80 00 04 be 4001bab4 <== NOT EXECUTED 4001baa8: 90 00 40 10 add %g1, %l0, %o0 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&p[j], to_free); 4001baac: 7f ff ff 91 call 4001b8f0 <== NOT EXECUTED 4001bab0: 92 10 00 13 mov %l3, %o1 <== 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 4001bac8: a2 10 00 02 mov %g2, %l1 <== NOT EXECUTED 4001bacc: c4 06 20 58 ld [ %i0 + 0x58 ], %g2 <== NOT EXECUTED if ( p[j] ) { memfile_free_blocks_in_table( (block_p **)&p[j], to_free); } } memfile_free_blocks_in_table( 4001bad0: 90 05 40 02 add %l5, %g2, %o0 <== NOT EXECUTED 4001bad4: 7f ff ff 87 call 4001b8f0 <== NOT EXECUTED 4001bad8: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001baf0: ab 2d 20 02 sll %l4, 2, %l5 <== NOT EXECUTED p = (block_p *) info->triply_indirect[i]; 4001baf4: c4 06 20 58 ld [ %i0 + 0x58 ], %g2 <== NOT EXECUTED 4001baf8: c2 00 80 15 ld [ %g2 + %l5 ], %g1 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ 4001bafc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001bb00: 02 80 00 0b be 4001bb2c <== NOT EXECUTED 4001bb04: a0 10 00 01 mov %g1, %l0 <== NOT EXECUTED break; for ( j=0 ; j <== NOT EXECUTED 4001bb0c: c2 04 a0 58 ld [ %l2 + 0x58 ], %g1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001bb10: 40 00 27 47 call 4002582c <__errno> <== NOT EXECUTED 4001bb14: 01 00 00 00 nop <== NOT EXECUTED 4001bb18: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001bb1c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001bb20: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&info->triply_indirect, to_free ); } return 0; } 4001bb24: 81 c7 e0 08 ret <== NOT EXECUTED 4001bb28: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED } } memfile_free_blocks_in_table( (block_p **)&info->triply_indirect[i], to_free ); } memfile_free_blocks_in_table( 4001bb2c: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED 4001bb30: 7f ff ff 70 call 4001b8f0 <== NOT EXECUTED 4001bb34: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4001bb38: 82 10 20 00 clr %g1 <== NOT EXECUTED (block_p **)&info->triply_indirect, to_free ); } return 0; } 4001bb3c: 81 c7 e0 08 ret <== NOT EXECUTED 4001bb40: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001bb44: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001bb48: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001bb4c: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001bb50: 7f ff a4 6d call 40004d04 <__assert> <== NOT EXECUTED 4001bb54: 94 12 a1 38 or %o2, 0x138, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001bb58: 40 00 27 35 call 4002582c <__errno> <== NOT EXECUTED 4001bb5c: 01 00 00 00 nop <== NOT EXECUTED 4001bb60: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001bb64: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001bb68: 10 bf ff ef b 4001bb24 <== NOT EXECUTED 4001bb6c: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED 4001b8c0 : MEMFILE_STATIC int IMFS_memfile_remove_block( IMFS_jnode_t *the_jnode, unsigned int block ) { 4001b8c0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED block_p *block_entry_ptr; block_p ptr; block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001b8c4: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001b8c8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001b8cc: 7f ff ff 49 call 4001b5f0 <== NOT EXECUTED 4001b8d0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ptr = *block_entry_ptr; 4001b8d4: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED *block_entry_ptr = 0; memfile_free_block( ptr ); return 1; } 4001b8d8: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED block_p *block_entry_ptr; block_p ptr; block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); ptr = *block_entry_ptr; *block_entry_ptr = 0; 4001b8dc: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED memfile_free_block( ptr ); 4001b8e0: 7f ff ff 2e call 4001b598 <== NOT EXECUTED 4001b8e4: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 1; } 4001b8e8: 81 c7 e0 08 ret <== NOT EXECUTED 4001b8ec: 81 e8 00 00 restore <== NOT EXECUTED 4001bf78 : IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { 4001bf78: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001bf7c: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001bf80: 02 80 00 99 be 4001c1e4 <== NOT EXECUTED 4001bf84: 92 10 22 e1 mov 0x2e1, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001bf88: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bf8c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001bf90: 02 80 00 0b be 4001bfbc <== NOT EXECUTED 4001bf94: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001bf98: 92 10 22 e5 mov 0x2e5, %o1 <== NOT EXECUTED 4001bf9c: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001bfa0: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001bfa4: 7f ff a3 58 call 40004d04 <__assert> <== NOT EXECUTED 4001bfa8: 94 12 a1 48 or %o2, 0x148, %o2 ! 40038148 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001bfac: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bfb0: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001bfb4: 12 80 00 82 bne 4001c1bc <== NOT EXECUTED 4001bfb8: 01 00 00 00 nop <== NOT EXECUTED /* * Error check arguments */ assert( source ); 4001bfbc: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001bfc0: 02 80 00 93 be 4001c20c <== NOT EXECUTED 4001bfc4: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED /* * If there is nothing to write, then quick exit. */ my_length = length; if ( !my_length ) 4001bfc8: 02 80 00 82 be 4001c1d0 <== NOT EXECUTED 4001bfcc: 92 06 c0 19 add %i3, %i1, %o1 <== 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 + length; if ( last_byte > the_jnode->info.file.size ) { 4001bfd0: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED 4001bfd4: 80 a2 40 01 cmp %o1, %g1 <== NOT EXECUTED 4001bfd8: 18 80 00 43 bgu 4001c0e4 <== NOT EXECUTED 4001bfdc: 25 10 00 f1 sethi %hi(0x4003c400), %l2 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bfe0: e0 04 a0 58 ld [ %l2 + 0x58 ], %l0 ! 4003c458 <== NOT EXECUTED 4001bfe4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001bfe8: 40 00 63 3d call 40034cdc <.rem> <== NOT EXECUTED 4001bfec: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bff0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bff4: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001bff8: 40 00 62 8d call 40034a2c <.div> <== NOT EXECUTED 4001bffc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 4001c000: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4001c004: 12 80 00 42 bne 4001c10c <== NOT EXECUTED 4001c008: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED 4001c00c: a0 10 00 1a mov %i2, %l0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c010: f4 04 a0 58 ld [ %l2 + 0x58 ], %i2 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001c014: 80 a6 c0 1a cmp %i3, %i2 <== NOT EXECUTED 4001c018: 1a 80 00 0e bcc 4001c050 <== NOT EXECUTED 4001c01c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { 4001c020: 10 80 00 1c b 4001c090 <== NOT EXECUTED 4001c024: 80 a6 e0 00 cmp %i3, 0 <== 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 ); 4001c028: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 4001c02c: 40 00 2c a5 call 400272c0 <== NOT EXECUTED 4001c030: b6 26 c0 1a sub %i3, %i2, %i3 <== 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 ) { 4001c034: c2 04 a0 58 ld [ %l2 + 0x58 ], %g1 <== 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 ); 4001c038: a0 04 00 1a add %l0, %i2, %l0 <== 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 ) { 4001c03c: 80 a0 40 1b cmp %g1, %i3 <== NOT EXECUTED #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; block++; 4001c040: b2 06 60 01 inc %i1 <== 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 ) { 4001c044: 18 80 00 12 bgu 4001c08c <== NOT EXECUTED 4001c048: a2 04 40 1a add %l1, %i2, %l1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001c04c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001c050: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001c054: 7f ff fd 67 call 4001b5f0 <== NOT EXECUTED 4001c058: 90 10 00 18 mov %i0, %o0 <== 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 ); 4001c05c: 92 10 00 10 mov %l0, %o1 <== 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 ); assert( block_ptr ); 4001c060: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c064: 12 bf ff f1 bne 4001c028 <== NOT EXECUTED 4001c068: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4001c06c: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c070: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c074: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c078: 94 12 a1 88 or %o2, 0x188, %o2 <== NOT EXECUTED 4001c07c: 7f ff a3 22 call 40004d04 <__assert> <== NOT EXECUTED 4001c080: 92 10 23 2e mov 0x32e, %o1 <== NOT EXECUTED } IMFS_atime_mtime_update( the_jnode ); return copied; } 4001c084: 81 c7 e0 08 ret <== NOT EXECUTED 4001c088: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { 4001c08c: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 4001c090: 02 80 00 0e be 4001c0c8 <== NOT EXECUTED 4001c094: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001c098: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001c09c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001c0a0: 7f ff fd 54 call 4001b5f0 <== NOT EXECUTED 4001c0a4: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001c0a8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c0ac: 02 80 00 3d be 4001c1a0 <== NOT EXECUTED 4001c0b0: 92 10 00 10 mov %l0, %o1 <== 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, my_length ); 4001c0b4: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED my_length = 0; copied += to_copy; 4001c0b8: a2 04 40 1b add %l1, %i3, %l1 <== 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, my_length ); 4001c0bc: 40 00 2c 81 call 400272c0 <== NOT EXECUTED 4001c0c0: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED my_length = 0; copied += to_copy; } IMFS_atime_mtime_update( the_jnode ); 4001c0c4: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001c0c8: 7f ff a3 d9 call 4000502c <== NOT EXECUTED 4001c0cc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001c0d0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001c0d4: c2 26 20 3c st %g1, [ %i0 + 0x3c ] <== NOT EXECUTED 4001c0d8: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED return copied; } 4001c0dc: 81 c7 e0 08 ret <== NOT EXECUTED 4001c0e0: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED * in memory file, then extend the length. */ last_byte = start + length; if ( last_byte > the_jnode->info.file.size ) { status = IMFS_memfile_extend( the_jnode, last_byte ); 4001c0e4: 7f ff ff 0f call 4001bd20 <== NOT EXECUTED 4001c0e8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status ) 4001c0ec: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c0f0: 02 bf ff bc be 4001bfe0 <== NOT EXECUTED 4001c0f4: 25 10 00 f1 sethi %hi(0x4003c400), %l2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); 4001c0f8: 40 00 25 cd call 4002582c <__errno> <== NOT EXECUTED 4001c0fc: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001c100: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED 4001c104: 10 bf ff e0 b 4001c084 <== NOT EXECUTED 4001c108: c2 22 00 00 st %g1, [ %o0 ] <== 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 ); 4001c10c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001c110: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001c114: 7f ff fd 37 call 4001b5f0 <== NOT EXECUTED 4001c118: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001c11c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c120: 22 80 00 19 be,a 4001c184 <== NOT EXECUTED 4001c124: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED */ 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; 4001c128: 94 24 00 11 sub %l0, %l1, %o2 <== NOT EXECUTED 4001c12c: 80 a2 80 1b cmp %o2, %i3 <== NOT EXECUTED 4001c130: 18 80 00 0b bgu 4001c15c <== NOT EXECUTED 4001c134: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); src += to_copy; 4001c138: a0 06 80 0a add %i2, %o2, %l0 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 4001c13c: 90 04 40 08 add %l1, %o0, %o0 <== NOT EXECUTED src += to_copy; block++; 4001c140: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001c144: b6 26 c0 0a sub %i3, %o2, %i3 <== NOT EXECUTED copied += to_copy; 4001c148: a2 10 00 0a mov %o2, %l1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 4001c14c: 40 00 2c 5d call 400272c0 <== NOT EXECUTED 4001c150: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c154: 10 bf ff b0 b 4001c014 <== NOT EXECUTED 4001c158: f4 04 a0 58 ld [ %l2 + 0x58 ], %i2 <== NOT EXECUTED */ 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; 4001c15c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 4001c160: 90 04 40 08 add %l1, %o0, %o0 <== NOT EXECUTED src += to_copy; 4001c164: a0 06 80 0a add %i2, %o2, %l0 <== NOT EXECUTED block++; 4001c168: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001c16c: b6 26 c0 0a sub %i3, %o2, %i3 <== NOT EXECUTED copied += to_copy; 4001c170: a2 10 00 0a mov %o2, %l1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 4001c174: 40 00 2c 53 call 400272c0 <== NOT EXECUTED 4001c178: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001c17c: 10 bf ff a6 b 4001c014 <== NOT EXECUTED 4001c180: f4 04 a0 58 ld [ %l2 + 0x58 ], %i2 <== NOT EXECUTED if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001c184: 92 10 23 1a mov 0x31a, %o1 <== NOT EXECUTED 4001c188: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c18c: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c190: a2 10 20 00 clr %l1 <== NOT EXECUTED 4001c194: 7f ff a2 dc call 40004d04 <__assert> <== NOT EXECUTED 4001c198: 94 12 a1 88 or %o2, 0x188, %o2 <== NOT EXECUTED 4001c19c: 30 bf ff ba b,a 4001c084 <== NOT EXECUTED 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 ); assert( block_ptr ); 4001c1a0: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c1a4: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c1a8: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c1ac: 94 12 a1 88 or %o2, 0x188, %o2 <== NOT EXECUTED 4001c1b0: 7f ff a2 d5 call 40004d04 <__assert> <== NOT EXECUTED 4001c1b4: 92 10 23 44 mov 0x344, %o1 <== NOT EXECUTED 4001c1b8: 30 bf ff b3 b,a 4001c084 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001c1bc: 40 00 25 9c call 4002582c <__errno> <== NOT EXECUTED 4001c1c0: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001c1c4: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001c1c8: 10 bf ff af b 4001c084 <== NOT EXECUTED 4001c1cc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * If there is nothing to write, then quick exit. */ my_length = length; if ( !my_length ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001c1d0: 40 00 25 97 call 4002582c <__errno> <== NOT EXECUTED 4001c1d4: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001c1d8: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001c1dc: 10 bf ff aa b 4001c084 <== NOT EXECUTED 4001c1e0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001c1e4: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c1e8: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c1ec: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c1f0: 7f ff a2 c5 call 40004d04 <__assert> <== NOT EXECUTED 4001c1f4: 94 12 a1 38 or %o2, 0x138, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001c1f8: 40 00 25 8d call 4002582c <__errno> <== NOT EXECUTED 4001c1fc: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001c200: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001c204: 10 bf ff a0 b 4001c084 <== NOT EXECUTED 4001c208: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Error check arguments */ assert( source ); 4001c20c: 92 10 22 ed mov 0x2ed, %o1 <== NOT EXECUTED 4001c210: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 4001c214: 15 10 00 e0 sethi %hi(0x40038000), %o2 <== NOT EXECUTED 4001c218: 90 12 20 e8 or %o0, 0xe8, %o0 <== NOT EXECUTED 4001c21c: 7f ff a2 ba call 40004d04 <__assert> <== NOT EXECUTED 4001c220: 94 12 a1 80 or %o2, 0x180, %o2 <== NOT EXECUTED if ( !source ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001c224: 40 00 25 82 call 4002582c <__errno> <== NOT EXECUTED 4001c228: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001c22c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001c230: 10 bf ff 95 b 4001c084 <== NOT EXECUTED 4001c234: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000ba8c : const char *token, /* IN */ mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000ba8c: 9d e3 bf 60 save %sp, -160, %sp IMFS_jnode_t *new_node; int result; char new_name[ IMFS_NAME_MAX + 1 ]; IMFS_types_union info; IMFS_get_token( token, new_name, &result ); 4000ba90: 90 10 00 18 mov %i0, %o0 4000ba94: 94 07 bf f4 add %fp, -12, %o2 4000ba98: b0 07 bf c3 add %fp, -61, %i0 4000ba9c: 7f ff ff 79 call 4000b880 4000baa0: 92 10 00 18 mov %i0, %o1 /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) 4000baa4: b3 2e 60 10 sll %i1, 0x10, %i1 4000baa8: 03 00 00 3c sethi %hi(0xf000), %g1 4000baac: 97 36 60 10 srl %i1, 0x10, %o3 4000bab0: 05 00 00 10 sethi %hi(0x4000), %g2 4000bab4: 86 0a c0 01 and %o3, %g1, %g3 4000bab8: 80 a0 c0 02 cmp %g3, %g2 4000babc: 02 80 00 1f be 4000bb38 4000bac0: 90 10 00 1c mov %i4, %o0 type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) 4000bac4: 03 00 00 20 sethi %hi(0x8000), %g1 4000bac8: 80 a0 c0 01 cmp %g3, %g1 4000bacc: 02 80 00 12 be 4000bb14 4000bad0: 92 10 20 05 mov 5, %o1 type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { 4000bad4: 03 00 00 18 sethi %hi(0x6000), %g1 4000bad8: 80 a0 c0 01 cmp %g3, %g1 4000badc: 02 80 00 0b be 4000bb08 4000bae0: 03 00 00 08 sethi %hi(0x2000), %g1 4000bae4: 80 a0 c0 01 cmp %g3, %g1 4000bae8: 22 80 00 09 be,a 4000bb0c 4000baec: f6 27 bf e8 st %i3, [ %fp + -24 ] type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); } else { rtems_set_errno_and_return_minus_one( EINVAL ); 4000baf0: 40 00 09 92 call 4000e138 <__errno> <== NOT EXECUTED 4000baf4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000baf8: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4000bafc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000bb00: 81 c7 e0 08 ret <== NOT EXECUTED 4000bb04: 81 e8 00 00 restore <== NOT EXECUTED type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); 4000bb08: f6 27 bf e8 st %i3, [ %fp + -24 ] <== NOT EXECUTED 4000bb0c: f4 27 bf e4 st %i2, [ %fp + -28 ] 4000bb10: 92 10 20 02 mov 2, %o1 /* * Allocate and fill in an IMFS jnode */ new_node = IMFS_create_node( 4000bb14: 94 10 00 18 mov %i0, %o2 4000bb18: 98 07 bf e4 add %fp, -28, %o4 4000bb1c: 40 00 07 2d call 4000d7d0 4000bb20: b0 10 20 00 clr %i0 new_name, mode, &info ); if ( !new_node ) 4000bb24: 80 a2 20 00 cmp %o0, 0 4000bb28: 02 80 00 06 be 4000bb40 4000bb2c: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; } 4000bb30: 81 c7 e0 08 ret 4000bb34: 81 e8 00 00 restore type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); } else { rtems_set_errno_and_return_minus_one( EINVAL ); 4000bb38: 10 bf ff f7 b 4000bb14 4000bb3c: 92 10 20 01 mov 1, %o1 mode, &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); 4000bb40: 40 00 09 7e call 4000e138 <__errno> <== NOT EXECUTED 4000bb44: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bb48: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000bb4c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 4000bb50: 81 c7 e0 08 ret <== NOT EXECUTED 4000bb54: 81 e8 00 00 restore <== NOT EXECUTED 40004944 : #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40004944: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 40004948: c4 06 20 08 ld [ %i0 + 8 ], %g2 <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) 4000494c: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 40004950: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40004954: 12 80 00 05 bne 40004968 <== NOT EXECUTED 40004958: 01 00 00 00 nop <== 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; 4000495c: f0 20 a0 58 st %i0, [ %g2 + 0x58 ] <== NOT EXECUTED return 0; } 40004960: 81 c7 e0 08 ret <== NOT EXECUTED 40004964: 91 e8 20 00 restore %g0, 0, %o0 <== 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 ); 40004968: 40 00 83 b1 call 4002582c <__errno> <== NOT EXECUTED 4000496c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004970: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40004974: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004978: 81 c7 e0 08 ret <== NOT EXECUTED 4000497c: 81 e8 00 00 restore <== NOT EXECUTED 4000498c : int IMFS_readlink( rtems_filesystem_location_info_t *loc, char *buf, /* OUT */ size_t bufsize ) { 4000498c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; int i; node = loc->node_access; 40004990: c6 06 00 00 ld [ %i0 ], %g3 <== NOT EXECUTED if ( node->type != IMFS_SYM_LINK ) 40004994: c2 00 e0 48 ld [ %g3 + 0x48 ], %g1 <== NOT EXECUTED 40004998: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000499c: 12 80 00 19 bne 40004a00 <== NOT EXECUTED 400049a0: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) 400049a4: 02 80 00 15 be 400049f8 <== NOT EXECUTED 400049a8: 88 10 20 00 clr %g4 <== NOT EXECUTED 400049ac: c2 00 e0 4c ld [ %g3 + 0x4c ], %g1 <== NOT EXECUTED int i; node = loc->node_access; if ( node->type != IMFS_SYM_LINK ) rtems_set_errno_and_return_minus_one( EINVAL ); 400049b0: b0 10 20 00 clr %i0 <== NOT EXECUTED for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) 400049b4: c4 48 40 00 ldsb [ %g1 ], %g2 <== NOT EXECUTED 400049b8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400049bc: 12 80 00 08 bne 400049dc <== NOT EXECUTED 400049c0: c2 08 40 00 ldub [ %g1 ], %g1 <== NOT EXECUTED 400049c4: 30 80 00 13 b,a 40004a10 <== NOT EXECUTED 400049c8: c2 00 e0 4c ld [ %g3 + 0x4c ], %g1 <== NOT EXECUTED 400049cc: c4 48 40 18 ldsb [ %g1 + %i0 ], %g2 <== NOT EXECUTED 400049d0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400049d4: 02 80 00 07 be 400049f0 <== NOT EXECUTED 400049d8: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; 400049dc: c2 2e 40 04 stb %g1, [ %i1 + %g4 ] <== NOT EXECUTED node = loc->node_access; if ( node->type != IMFS_SYM_LINK ) rtems_set_errno_and_return_minus_one( EINVAL ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) 400049e0: b0 06 20 01 inc %i0 <== NOT EXECUTED 400049e4: 80 a6 00 1a cmp %i0, %i2 <== NOT EXECUTED 400049e8: 12 bf ff f8 bne 400049c8 <== NOT EXECUTED 400049ec: 88 10 00 18 mov %i0, %g4 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; return i; } 400049f0: 81 c7 e0 08 ret <== NOT EXECUTED 400049f4: 81 e8 00 00 restore <== NOT EXECUTED 400049f8: 81 c7 e0 08 ret <== NOT EXECUTED 400049fc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED int i; node = loc->node_access; if ( node->type != IMFS_SYM_LINK ) rtems_set_errno_and_return_minus_one( EINVAL ); 40004a00: 40 00 83 8b call 4002582c <__errno> <== NOT EXECUTED 40004a04: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004a08: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40004a0c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004a10: 81 c7 e0 08 ret <== NOT EXECUTED 40004a14: 81 e8 00 00 restore <== NOT EXECUTED 4000bb64 : */ int IMFS_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4000bb64: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 4000bb68: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Take the node out of the parent's chain that contains this node */ if ( the_jnode->Parent != NULL ) { 4000bb6c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000bb70: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000bb74: 22 80 00 06 be,a 4000bb8c <== NOT EXECUTED 4000bb78: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4000bb7c: 40 00 04 04 call 4000cb8c <_Chain_Extract> <== NOT EXECUTED 4000bb80: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 4000bb84: c0 24 20 08 clr [ %l0 + 8 ] <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4000bb88: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4000bb8c: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4000bb90: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4000bb94: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4000bb98: 40 00 01 1f call 4000c014 <== NOT EXECUTED 4000bb9c: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 4000bba0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED /* * The file cannot be open and the link must be less than 1 to free. */ if ( !rtems_libio_is_file_open( the_jnode ) && (the_jnode->st_nlink < 1) ) { 4000bba4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000bba8: 40 00 01 55 call 4000c0fc <== NOT EXECUTED 4000bbac: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 4000bbb0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000bbb4: 12 80 00 12 bne 4000bbfc <== NOT EXECUTED 4000bbb8: 01 00 00 00 nop <== NOT EXECUTED 4000bbbc: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 4000bbc0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000bbc4: 12 80 00 0e bne 4000bbfc <== NOT EXECUTED 4000bbc8: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED /* * Is rtems_filesystem_current this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 4000bbcc: c6 00 61 30 ld [ %g1 + 0x130 ], %g3 ! 40019130 <== NOT EXECUTED 4000bbd0: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 4000bbd4: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 4000bbd8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000bbdc: 22 80 00 02 be,a 4000bbe4 <== NOT EXECUTED 4000bbe0: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ if ( the_jnode->type == IMFS_SYM_LINK ) { 4000bbe4: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000bbe8: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000bbec: 22 80 00 06 be,a 4000bc04 <== NOT EXECUTED 4000bbf0: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED if ( the_jnode->info.sym_link.name ) free( the_jnode->info.sym_link.name ); } free( the_jnode ); 4000bbf4: 7f ff d9 a3 call 40002280 <== NOT EXECUTED 4000bbf8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } return 0; } 4000bbfc: 81 c7 e0 08 ret <== NOT EXECUTED 4000bc00: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Free memory associated with a memory file. */ if ( the_jnode->type == IMFS_SYM_LINK ) { if ( the_jnode->info.sym_link.name ) 4000bc04: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000bc08: 02 bf ff fb be 4000bbf4 <== NOT EXECUTED 4000bc0c: 01 00 00 00 nop <== NOT EXECUTED free( the_jnode->info.sym_link.name ); 4000bc10: 7f ff d9 9c call 40002280 <== NOT EXECUTED 4000bc14: 01 00 00 00 nop <== NOT EXECUTED 4000bc18: 30 bf ff f7 b,a 4000bbf4 <== NOT EXECUTED 4000bc1c : int IMFS_stat( rtems_filesystem_location_info_t *loc, struct stat *buf ) { 4000bc1c: 9d e3 bf 98 save %sp, -104, %sp IMFS_jnode_t *the_jnode; IMFS_device_t *io; the_jnode = loc->node_access; 4000bc20: f0 06 00 00 ld [ %i0 ], %i0 switch ( the_jnode->type ) { 4000bc24: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 4000bc28: 80 a0 60 04 cmp %g1, 4 4000bc2c: 22 80 00 11 be,a 4000bc70 4000bc30: c0 26 60 20 clr [ %i1 + 0x20 ] <== NOT EXECUTED 4000bc34: 14 80 00 0b bg 4000bc60 4000bc38: 80 a0 60 06 cmp %g1, 6 4000bc3c: 80 a0 60 02 cmp %g1, 2 4000bc40: 22 80 00 1e be,a 4000bcb8 4000bc44: c4 06 20 4c ld [ %i0 + 0x4c ], %g2 case IMFS_SYM_LINK: buf->st_size = 0; break; default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 4000bc48: 40 00 09 3c call 4000e138 <__errno> <== NOT EXECUTED 4000bc4c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bc50: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000bc54: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000bc58: 81 c7 e0 08 ret <== NOT EXECUTED 4000bc5c: 81 e8 00 00 restore <== NOT EXECUTED IMFS_device_t *io; the_jnode = loc->node_access; switch ( the_jnode->type ) { 4000bc60: 14 bf ff fa bg 4000bc48 <== NOT EXECUTED 4000bc64: 01 00 00 00 nop <== NOT EXECUTED buf->st_dev = 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; 4000bc68: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED 4000bc6c: c2 26 60 20 st %g1, [ %i1 + 0x20 ] <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); break; } buf->st_mode = the_jnode->st_mode; 4000bc70: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 4000bc74: c4 06 20 34 ld [ %i0 + 0x34 ], %g2 default: rtems_set_errno_and_return_minus_one( ENOTSUP ); break; } buf->st_mode = the_jnode->st_mode; 4000bc78: c2 36 60 0c sth %g1, [ %i1 + 0xc ] buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 4000bc7c: c4 26 60 08 st %g2, [ %i1 + 8 ] rtems_set_errno_and_return_minus_one( ENOTSUP ); break; } buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; 4000bc80: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 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; 4000bc84: c4 06 20 3c ld [ %i0 + 0x3c ], %g2 rtems_set_errno_and_return_minus_one( ENOTSUP ); break; } buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; 4000bc88: c2 36 60 0e sth %g1, [ %i1 + 0xe ] 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; 4000bc8c: c4 26 60 24 st %g2, [ %i1 + 0x24 ] } 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; 4000bc90: c2 16 20 38 lduh [ %i0 + 0x38 ], %g1 buf->st_gid = the_jnode->st_gid; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; 4000bc94: c4 06 20 40 ld [ %i0 + 0x40 ], %g2 } 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; 4000bc98: c2 36 60 10 sth %g1, [ %i1 + 0x10 ] buf->st_gid = the_jnode->st_gid; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; 4000bc9c: c4 26 60 2c st %g2, [ %i1 + 0x2c ] 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; 4000bca0: c4 16 20 3a lduh [ %i0 + 0x3a ], %g2 buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; buf->st_ctime = the_jnode->stat_ctime; 4000bca4: c2 06 20 44 ld [ %i0 + 0x44 ], %g1 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; 4000bca8: c4 36 60 12 sth %g2, [ %i1 + 0x12 ] buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; buf->st_ctime = the_jnode->stat_ctime; 4000bcac: c2 26 60 34 st %g1, [ %i1 + 0x34 ] return 0; } 4000bcb0: 81 c7 e0 08 ret 4000bcb4: 91 e8 20 00 restore %g0, 0, %o0 4000bcb8: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 switch ( the_jnode->type ) { case IMFS_DEVICE: io = &the_jnode->info.device; buf->st_dev = rtems_filesystem_make_dev_t( io->major, io->minor ); 4000bcbc: 10 bf ff ed b 4000bc70 4000bcc0: c4 3e 40 00 std %g2, [ %i1 ] 40004a18 : int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { 40004a18: 9d e3 bf 60 save %sp, -160, %sp <== NOT EXECUTED /* * Remove any separators at the end of the string. */ IMFS_get_token( node_name, new_name, &i ); 40004a1c: a0 07 bf c3 add %fp, -61, %l0 <== NOT EXECUTED 40004a20: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40004a24: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40004a28: 7f ff fe db call 40004594 <== NOT EXECUTED 40004a2c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { 40004a30: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * Remove any separators at the end of the string. */ IMFS_get_token( node_name, new_name, &i ); info.sym_link.name = link_name; 40004a34: f2 27 bf e4 st %i1, [ %fp + -28 ] <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 40004a38: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40004a3c: 92 10 20 04 mov 4, %o1 <== NOT EXECUTED 40004a40: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 40004a44: 98 07 bf e4 add %fp, -28, %o4 <== NOT EXECUTED 40004a48: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED 40004a4c: 40 00 49 32 call 40016f14 <== NOT EXECUTED 40004a50: b0 10 20 00 clr %i0 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 40004a54: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004a58: 02 80 00 04 be 40004a68 <== NOT EXECUTED 40004a5c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; } 40004a60: 81 c7 e0 08 ret <== NOT EXECUTED 40004a64: 81 e8 00 00 restore <== NOT EXECUTED ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); 40004a68: 40 00 83 71 call 4002582c <__errno> <== NOT EXECUTED 40004a6c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004a70: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 40004a74: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 40004a78: 81 c7 e0 08 ret <== NOT EXECUTED 40004a7c: 81 e8 00 00 restore <== NOT EXECUTED 40004a80 : #include int IMFS_unlink( rtems_filesystem_location_info_t *loc /* IN */ ) { 40004a80: 9d e3 bf 80 save %sp, -128, %sp <== NOT EXECUTED IMFS_jnode_t *node; rtems_filesystem_location_info_t the_link; int result = 0; node = loc->node_access; 40004a84: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * If this is the last last pointer to the node * free the node. */ if ( node->type == IMFS_HARD_LINK ) { 40004a88: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40004a8c: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40004a90: 22 80 00 08 be,a 40004ab0 <== NOT EXECUTED 40004a94: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED /* * Now actually free the node we were asked to free. */ result = (*loc->handlers->rmnod_h)( loc ); 40004a98: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 40004a9c: c2 00 a0 34 ld [ %g2 + 0x34 ], %g1 <== NOT EXECUTED 40004aa0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004aa4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return result; } 40004aa8: 81 c7 e0 08 ret <== NOT EXECUTED 40004aac: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED * free the node. */ if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) 40004ab0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004ab4: 02 80 00 21 be 40004b38 <== NOT EXECUTED 40004ab8: a2 07 bf e0 add %fp, -32, %l1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); the_link = *loc; 40004abc: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40004ac0: c4 06 20 08 ld [ %i0 + 8 ], %g2 <== NOT EXECUTED 40004ac4: c6 06 20 0c ld [ %i0 + 0xc ], %g3 <== NOT EXECUTED 40004ac8: e0 27 bf e0 st %l0, [ %fp + -32 ] <== NOT EXECUTED 40004acc: c4 3f bf e8 std %g2, [ %fp + -24 ] <== NOT EXECUTED 40004ad0: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; 40004ad4: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 40004ad8: c2 27 bf e0 st %g1, [ %fp + -32 ] <== NOT EXECUTED IMFS_Set_handlers( &the_link ); 40004adc: 40 00 49 75 call 400170b0 <== NOT EXECUTED 40004ae0: 90 10 00 11 mov %l1, %o0 <== 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) 40004ae4: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40004ae8: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED 40004aec: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40004af0: 02 80 00 0a be 40004b18 <== NOT EXECUTED 40004af4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED return -1; } else { node->info.hard_link.link_node->st_nlink --; IMFS_update_ctime( node->info.hard_link.link_node ); 40004af8: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED if ( result != 0 ) return -1; } else { node->info.hard_link.link_node->st_nlink --; 40004afc: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED IMFS_update_ctime( node->info.hard_link.link_node ); 40004b00: 40 00 01 4b call 4000502c <== NOT EXECUTED 40004b04: 92 10 20 00 clr %o1 <== NOT EXECUTED 40004b08: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40004b0c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40004b10: 10 bf ff e2 b 40004a98 <== NOT EXECUTED 40004b14: c2 20 a0 44 st %g1, [ %g2 + 0x44 ] <== 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)( &the_link ); 40004b18: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED 40004b1c: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED 40004b20: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004b24: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( result != 0 ) 40004b28: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004b2c: 02 bf ff db be 40004a98 <== NOT EXECUTED 40004b30: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40004b34: 30 bf ff dd b,a 40004aa8 <== NOT EXECUTED */ if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) rtems_set_errno_and_return_minus_one( EINVAL ); 40004b38: 40 00 83 3d call 4002582c <__errno> <== NOT EXECUTED 40004b3c: 01 00 00 00 nop <== NOT EXECUTED 40004b40: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40004b44: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004b48: 10 bf ff d8 b 40004aa8 <== NOT EXECUTED 40004b4c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40004b50 : #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40004b50: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 40004b54: c4 06 20 08 ld [ %i0 + 8 ], %g2 <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) 40004b58: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 40004b5c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40004b60: 12 80 00 09 bne 40004b84 <== NOT EXECUTED 40004b64: 01 00 00 00 nop <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) 40004b68: c2 00 a0 58 ld [ %g2 + 0x58 ], %g1 <== NOT EXECUTED 40004b6c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004b70: 02 80 00 0b be 40004b9c <== NOT EXECUTED 40004b74: 01 00 00 00 nop <== 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; 40004b78: c0 20 a0 58 clr [ %g2 + 0x58 ] <== NOT EXECUTED return 0; } 40004b7c: 81 c7 e0 08 ret <== NOT EXECUTED 40004b80: 91 e8 20 00 restore %g0, 0, %o0 <== 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 ); 40004b84: 40 00 83 2a call 4002582c <__errno> <== NOT EXECUTED 40004b88: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004b8c: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40004b90: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004b94: 81 c7 e0 08 ret <== NOT EXECUTED 40004b98: 81 e8 00 00 restore <== 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 */ 40004b9c: 40 00 83 24 call 4002582c <__errno> <== NOT EXECUTED 40004ba0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40004ba4: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40004ba8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40004bac: 81 c7 e0 08 ret <== NOT EXECUTED 40004bb0: 81 e8 00 00 restore <== NOT EXECUTED 40004bb4 : time_t modtime /* IN */ ) { IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 40004bb4: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; return 0; } 40004bb8: 90 10 20 00 clr %o0 <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; 40004bbc: d4 20 60 40 st %o2, [ %g1 + 0x40 ] <== NOT EXECUTED return 0; } 40004bc0: 81 c3 e0 08 retl <== NOT EXECUTED 40004bc4: d2 20 60 3c st %o1, [ %g1 + 0x3c ] <== NOT EXECUTED 400025e8 : void RTEMS_Malloc_Initialize( void *start, size_t length, size_t sbrk_amount ) { 400025e8: 9d e3 bf 98 save %sp, -104, %sp */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400025ec: 03 10 00 66 sethi %hi(0x40019800), %g1 * get length worth of memory using sbrk. Make sure we * align the address that we get back. */ starting_address = start; RTEMS_Malloc_Sbrk_amount = sbrk_amount; 400025f0: 05 10 00 66 sethi %hi(0x40019800), %g2 400025f4: 82 10 61 b0 or %g1, 0x1b0, %g1 400025f8: f4 20 a1 a8 st %i2, [ %g2 + 0x1a8 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400025fc: c2 20 7f fc st %g1, [ %g1 + -4 ] 40002600: 82 00 7f fc add %g1, -4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40002604: c2 20 60 08 st %g1, [ %g1 + 8 ] if (!starting_address) { 40002608: 80 a6 20 00 cmp %i0, 0 4000260c: 02 80 00 19 be 40002670 40002610: c0 20 60 04 clr [ %g1 + 4 ] * of the time under UNIX because zero'ing memory when it is first * given to a process eliminates the chance of a process seeing data * left over from another process. This would be a security violation. */ if ( rtems_cpu_configuration_get_do_zero_of_workspace() ) 40002614: 03 10 00 66 sethi %hi(0x40019800), %g1 40002618: c4 00 63 34 ld [ %g1 + 0x334 ], %g2 ! 40019b34 <_CPU_Table+0x10> 4000261c: 80 a0 a0 00 cmp %g2, 0 40002620: 32 80 00 0f bne,a 4000265c 40002624: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED void *starting_address, size_t size, uint32_t page_size ) { return _Heap_Initialize( the_heap, starting_address, size, page_size ); 40002628: 92 10 00 18 mov %i0, %o1 4000262c: 94 10 00 19 mov %i1, %o2 40002630: 11 10 00 66 sethi %hi(0x40019800), %o0 40002634: 96 10 20 08 mov 8, %o3 40002638: 40 00 13 d7 call 40007594 <_Heap_Initialize> 4000263c: 90 12 21 50 or %o0, 0x150, %o0 &RTEMS_Malloc_Heap, starting_address, length, CPU_HEAP_ALIGNMENT ); if ( !status ) 40002640: 80 a2 20 00 cmp %o0, 0 40002644: 02 80 00 04 be 40002654 40002648: 01 00 00 00 nop 4000264c: 81 c7 e0 08 ret 40002650: 81 e8 00 00 restore rtems_fatal_error_occurred( status ); 40002654: 40 00 10 e8 call 400069f4 <== NOT EXECUTED 40002658: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED * given to a process eliminates the chance of a process seeing data * left over from another process. This would be a security violation. */ if ( rtems_cpu_configuration_get_do_zero_of_workspace() ) memset( starting_address, 0, length ); 4000265c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40002660: 40 00 30 b8 call 4000e940 <== NOT EXECUTED 40002664: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 40002668: 10 bf ff f1 b 4000262c <== NOT EXECUTED 4000266c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED starting_address = start; RTEMS_Malloc_Sbrk_amount = sbrk_amount; if (!starting_address) { uaddress = (uintptr_t)sbrk(length); 40002670: 7f ff fc fe call 40001a68 <== NOT EXECUTED 40002674: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if (uaddress == (uintptr_t) -1) { 40002678: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000267c: 02 80 00 0b be 400026a8 <== NOT EXECUTED 40002680: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_fatal_error_occurred( RTEMS_NO_MEMORY ); /* DOES NOT RETURN!!! */ } if (uaddress & (CPU_HEAP_ALIGNMENT-1)) { 40002684: 80 8a 20 07 btst 7, %o0 <== NOT EXECUTED 40002688: 02 bf ff e4 be 40002618 <== NOT EXECUTED 4000268c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED old_address = uaddress; uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1); 40002690: 82 06 20 08 add %i0, 8, %g1 <== NOT EXECUTED 40002694: 82 08 7f f8 and %g1, -8, %g1 <== NOT EXECUTED /* * adjust the length by whatever we aligned by */ length -= uaddress - old_address; 40002698: 84 20 40 18 sub %g1, %i0, %g2 <== NOT EXECUTED 4000269c: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED 400026a0: 10 bf ff dd b 40002614 <== NOT EXECUTED 400026a4: b2 26 40 02 sub %i1, %g2, %i1 <== NOT EXECUTED if (!starting_address) { uaddress = (uintptr_t)sbrk(length); if (uaddress == (uintptr_t) -1) { rtems_fatal_error_occurred( RTEMS_NO_MEMORY ); 400026a8: 40 00 10 d3 call 400069f4 <== NOT EXECUTED 400026ac: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED /* DOES NOT RETURN!!! */ } if (uaddress & (CPU_HEAP_ALIGNMENT-1)) { old_address = uaddress; uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1); 400026b0: 10 bf ff f9 b 40002694 <== NOT EXECUTED 400026b4: 82 06 20 08 add %i0, 8, %g1 <== NOT EXECUTED 40002750 : static rtems_printk_plugin_t print_handler; void Stack_check_Dump_threads_usage( Thread_Control *the_thread ) { 40002750: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED void *low; void *high_water_mark; Stack_Control *stack; char name[5]; if ( !the_thread ) 40002754: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40002758: 02 80 00 2a be 40002800 <== NOT EXECUTED 4000275c: 2b 10 00 75 sethi %hi(0x4001d400), %l5 <== NOT EXECUTED return; if ( !print_handler ) 40002760: e6 05 63 80 ld [ %l5 + 0x380 ], %l3 ! 4001d780 <== NOT EXECUTED 40002764: 80 a4 e0 00 cmp %l3, 0 <== NOT EXECUTED 40002768: 02 80 00 26 be 40002800 <== NOT EXECUTED 4000276c: 80 a6 3f ff cmp %i0, -1 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { 40002770: 02 80 00 33 be 4000283c <== NOT EXECUTED 40002774: a2 06 20 d0 add %i0, 0xd0, %l1 <== NOT EXECUTED else return; } else stack = &the_thread->Start.Initial_stack; low = Stack_check_usable_stack_start(stack); 40002778: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 4000277c: c4 04 40 00 ld [ %l1 ], %g2 <== NOT EXECUTED else return; } else stack = &the_thread->Start.Initial_stack; low = Stack_check_usable_stack_start(stack); 40002780: a0 00 60 10 add %g1, 0x10, %l0 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 40002784: a4 00 bf f0 add %g2, -16, %l2 <== NOT EXECUTED high_water_mark = Stack_check_find_high_water_mark(low, size); 40002788: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000278c: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 40002790: 7f ff ff d7 call 400026ec <== NOT EXECUTED 40002794: a8 10 20 00 clr %l4 <== NOT EXECUTED if ( high_water_mark ) 40002798: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000279c: 02 80 00 03 be 400027a8 <== NOT EXECUTED 400027a0: 82 04 00 12 add %l0, %l2, %g1 <== NOT EXECUTED used = Stack_check_Calculate_used( low, size, high_water_mark ); 400027a4: a8 20 40 08 sub %g1, %o0, %l4 <== NOT EXECUTED else used = 0; if ( the_thread ) { 400027a8: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 400027ac: 02 80 00 17 be 40002808 <== NOT EXECUTED 400027b0: 03 10 00 75 sethi %hi(0x4001d400), %g1 <== NOT EXECUTED rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 400027b4: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED 400027b8: a0 07 bf f3 add %fp, -13, %l0 <== NOT EXECUTED 400027bc: 92 10 20 05 mov 5, %o1 <== NOT EXECUTED 400027c0: 40 00 11 3d call 40006cb4 <== NOT EXECUTED 400027c4: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED name[ 2 ] = 'T'; name[ 3 ] = 'R'; name[ 4 ] = '\0'; } (*print_handler)( 400027c8: 03 10 00 75 sethi %hi(0x4001d400), %g1 <== NOT EXECUTED 400027cc: e6 05 63 80 ld [ %l5 + 0x380 ], %l3 <== NOT EXECUTED 400027d0: d4 06 20 08 ld [ %i0 + 8 ], %o2 <== NOT EXECUTED 400027d4: d0 00 63 7c ld [ %g1 + 0x37c ], %o0 <== NOT EXECUTED 400027d8: da 04 40 00 ld [ %l1 ], %o5 <== NOT EXECUTED 400027dc: d8 04 60 04 ld [ %l1 + 4 ], %o4 <== NOT EXECUTED 400027e0: 13 10 00 6c sethi %hi(0x4001b000), %o1 <== NOT EXECUTED 400027e4: 9a 03 00 0d add %o4, %o5, %o5 <== NOT EXECUTED 400027e8: e4 23 a0 5c st %l2, [ %sp + 0x5c ] <== NOT EXECUTED 400027ec: e8 23 a0 60 st %l4, [ %sp + 0x60 ] <== NOT EXECUTED 400027f0: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 400027f4: 9a 03 7f ff add %o5, -1, %o5 <== NOT EXECUTED 400027f8: 9f c4 c0 00 call %l3 <== NOT EXECUTED 400027fc: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40002800: 81 c7 e0 08 ret <== NOT EXECUTED 40002804: 81 e8 00 00 restore <== NOT EXECUTED 40002808: d0 00 63 7c ld [ %g1 + 0x37c ], %o0 <== NOT EXECUTED if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; name[ 1 ] = 'N'; 4000280c: 84 10 20 4e mov 0x4e, %g2 <== NOT EXECUTED used = 0; if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; 40002810: 82 10 20 49 mov 0x49, %g1 <== NOT EXECUTED name[ 1 ] = 'N'; 40002814: c4 2f bf f4 stb %g2, [ %fp + -12 ] <== NOT EXECUTED used = 0; if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; 40002818: c2 2f bf f3 stb %g1, [ %fp + -13 ] <== NOT EXECUTED name[ 1 ] = 'N'; name[ 2 ] = 'T'; name[ 3 ] = 'R'; 4000281c: 84 10 20 52 mov 0x52, %g2 <== NOT EXECUTED if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; name[ 1 ] = 'N'; name[ 2 ] = 'T'; 40002820: 82 10 20 54 mov 0x54, %g1 <== NOT EXECUTED name[ 3 ] = 'R'; name[ 4 ] = '\0'; 40002824: c0 2f bf f7 clrb [ %fp + -9 ] <== NOT EXECUTED if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; name[ 1 ] = 'N'; name[ 2 ] = 'T'; 40002828: c2 2f bf f5 stb %g1, [ %fp + -11 ] <== NOT EXECUTED name[ 3 ] = 'R'; 4000282c: c4 2f bf f6 stb %g2, [ %fp + -10 ] <== NOT EXECUTED name[ 4 ] = '\0'; } (*print_handler)( 40002830: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 40002834: 10 bf ff e9 b 400027d8 <== NOT EXECUTED 40002838: a0 07 bf f3 add %fp, -13, %l0 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { if (Stack_check_Interrupt_stack.area) { 4000283c: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 40002840: 82 10 61 10 or %g1, 0x110, %g1 ! 4001d910 <== NOT EXECUTED 40002844: c4 00 60 04 ld [ %g1 + 4 ], %g2 <== NOT EXECUTED stack = &Stack_check_Interrupt_stack; the_thread = 0; } else return; 40002848: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { if (Stack_check_Interrupt_stack.area) { 4000284c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40002850: 12 bf ff ca bne 40002778 <== NOT EXECUTED 40002854: b0 10 20 00 clr %i0 <== NOT EXECUTED 40002858: 81 c7 e0 08 ret <== NOT EXECUTED 4000285c: 81 e8 00 00 restore <== NOT EXECUTED 400026ec : */ void *Stack_check_find_high_water_mark( const void *s, size_t n ) { 400026ec: 82 10 00 08 mov %o0, %g1 <== NOT EXECUTED * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; for (ebase = base + length; base < ebase; base++) 400026f0: 92 0a 7f fc and %o1, -4, %o1 <== NOT EXECUTED /* * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; 400026f4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED for (ebase = base + length; base < ebase; base++) 400026f8: 92 02 40 08 add %o1, %o0, %o1 <== NOT EXECUTED 400026fc: 80 a2 00 09 cmp %o0, %o1 <== NOT EXECUTED 40002700: 3a 80 00 12 bcc,a 40002748 <== NOT EXECUTED 40002704: 90 10 20 00 clr %o0 <== NOT EXECUTED if (*base != U32_PATTERN) 40002708: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 4000270c: 03 29 69 69 sethi %hi(0xa5a5a400), %g1 <== NOT EXECUTED 40002710: 82 10 61 a5 or %g1, 0x1a5, %g1 ! a5a5a5a5 <== NOT EXECUTED 40002714: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40002718: 22 80 00 07 be,a 40002734 <== NOT EXECUTED 4000271c: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 40002720: 30 80 00 0a b,a 40002748 <== NOT EXECUTED 40002724: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40002728: 12 80 00 08 bne 40002748 <== NOT EXECUTED 4000272c: 01 00 00 00 nop <== NOT EXECUTED * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; for (ebase = base + length; base < ebase; base++) 40002730: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 40002734: 80 a2 40 08 cmp %o1, %o0 <== NOT EXECUTED 40002738: 38 bf ff fb bgu,a 40002724 <== NOT EXECUTED 4000273c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED if (*base != U32_PATTERN) return (void *) base; #endif return (void *)0; } 40002740: 81 c3 e0 08 retl <== NOT EXECUTED 40002744: 90 10 20 00 clr %o0 <== NOT EXECUTED 40002748: 81 c3 e0 08 retl <== NOT EXECUTED 4000274c: 01 00 00 00 nop 400028e4 : */ void Stack_check_report_blown_task( Thread_Control *running, boolean pattern_ok ) { 400028e4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *stack = &running->Start.Initial_stack; printk( 400028e8: d4 1e 20 08 ldd [ %i0 + 8 ], %o2 <== NOT EXECUTED 400028ec: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400028f0: 11 10 00 6c sethi %hi(0x4001b000), %o0 <== NOT EXECUTED 400028f4: 40 00 06 47 call 40004210 <== NOT EXECUTED 400028f8: 90 12 21 00 or %o0, 0x100, %o0 ! 4001b100 <== NOT EXECUTED rtems_configuration_get_user_multiprocessing_table()->node ); } #endif printk( 400028fc: d4 06 20 d4 ld [ %i0 + 0xd4 ], %o2 <== NOT EXECUTED 40002900: c2 06 20 d0 ld [ %i0 + 0xd0 ], %g1 <== NOT EXECUTED 40002904: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40002908: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 4000290c: 94 02 80 01 add %o2, %g1, %o2 <== NOT EXECUTED 40002910: 11 10 00 6c sethi %hi(0x4001b000), %o0 <== NOT EXECUTED 40002914: 94 02 bf ff add %o2, -1, %o2 <== NOT EXECUTED 40002918: 40 00 06 3e call 40004210 <== NOT EXECUTED 4000291c: 90 12 21 40 or %o0, 0x140, %o0 <== NOT EXECUTED stack->area, stack->area + stack->size - 1, stack->size ); if ( !pattern_ok ) { 40002920: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40002924: 12 80 00 07 bne 40002940 <== NOT EXECUTED 40002928: 11 10 00 6c sethi %hi(0x4001b000), %o0 <== NOT EXECUTED printk( 4000292c: d2 06 20 d4 ld [ %i0 + 0xd4 ], %o1 <== NOT EXECUTED 40002930: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 40002934: 90 12 21 70 or %o0, 0x170, %o0 <== NOT EXECUTED 40002938: 40 00 06 36 call 40004210 <== NOT EXECUTED 4000293c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED " Damaged pattern begins at 0x%08lx and is %ld bytes long\n", (unsigned long) Stack_check_Get_pattern_area(stack), (long) PATTERN_SIZE_BYTES); } rtems_fatal_error_occurred( 0x81 ); 40002940: 40 00 14 e5 call 40007cd4 <== NOT EXECUTED 40002944: 91 e8 20 81 restore %g0, 0x81, %o0 <== NOT EXECUTED 40002948: 01 00 00 00 nop 40006bb0 <_API_extensions_Run_postdriver>: * * _API_extensions_Run_postdriver */ void _API_extensions_Run_postdriver( void ) { 40006bb0: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40006bb4: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006bb8: e0 00 61 a0 ld [ %g1 + 0x1a0 ], %l0 ! 40019da0 <_API_extensions_List> 40006bbc: 82 10 61 a0 or %g1, 0x1a0, %g1 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40006bc0: a2 00 60 04 add %g1, 4, %l1 !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40006bc4: 80 a4 00 11 cmp %l0, %l1 40006bc8: 02 80 00 0c be 40006bf8 <_API_extensions_Run_postdriver+0x48> 40006bcc: 01 00 00 00 nop the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postdriver_hook ) 40006bd0: c2 04 20 0c ld [ %l0 + 0xc ], %g1 40006bd4: 80 a0 60 00 cmp %g1, 0 40006bd8: 22 80 00 05 be,a 40006bec <_API_extensions_Run_postdriver+0x3c> 40006bdc: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postdriver_hook)(); 40006be0: 9f c0 40 00 call %g1 40006be4: 01 00 00 00 nop Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; !_Chain_Is_tail( &_API_extensions_List, the_node ) ; the_node = the_node->next ) { 40006be8: e0 04 00 00 ld [ %l0 ], %l0 { Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40006bec: 80 a4 00 11 cmp %l0, %l1 40006bf0: 32 bf ff f9 bne,a 40006bd4 <_API_extensions_Run_postdriver+0x24> 40006bf4: c2 04 20 0c ld [ %l0 + 0xc ], %g1 <== NOT EXECUTED 40006bf8: 81 c7 e0 08 ret 40006bfc: 81 e8 00 00 restore 40006c6c <_API_extensions_Run_postswitch>: * * _API_extensions_Run_postswitch */ void _API_extensions_Run_postswitch( void ) { 40006c6c: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40006c70: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006c74: e0 00 61 a0 ld [ %g1 + 0x1a0 ], %l0 ! 40019da0 <_API_extensions_List> 40006c78: 82 10 61 a0 or %g1, 0x1a0, %g1 40006c7c: a2 00 60 04 add %g1, 4, %l1 !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40006c80: 80 a4 00 11 cmp %l0, %l1 40006c84: 02 80 00 0c be 40006cb4 <_API_extensions_Run_postswitch+0x48> 40006c88: 25 10 00 66 sethi %hi(0x40019800), %l2 the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postswitch_hook ) 40006c8c: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40006c90: 80 a0 60 00 cmp %g1, 0 40006c94: 22 80 00 05 be,a 40006ca8 <_API_extensions_Run_postswitch+0x3c> 40006c98: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postswitch_hook)( _Thread_Executing ); 40006c9c: 9f c0 40 00 call %g1 40006ca0: d0 04 a3 ec ld [ %l2 + 0x3ec ], %o0 Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; !_Chain_Is_tail( &_API_extensions_List, the_node ) ; the_node = the_node->next ) { 40006ca4: e0 04 00 00 ld [ %l0 ], %l0 { Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40006ca8: 80 a4 00 11 cmp %l0, %l1 40006cac: 32 bf ff f9 bne,a 40006c90 <_API_extensions_Run_postswitch+0x24> 40006cb0: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 <== NOT EXECUTED 40006cb4: 81 c7 e0 08 ret 40006cb8: 81 e8 00 00 restore 40006c1c <_API_extensions_Run_predriver>: * * _API_extensions_Run_predriver */ void _API_extensions_Run_predriver( void ) { 40006c1c: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40006c20: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006c24: e0 00 61 a0 ld [ %g1 + 0x1a0 ], %l0 ! 40019da0 <_API_extensions_List> 40006c28: 82 10 61 a0 or %g1, 0x1a0, %g1 40006c2c: a2 00 60 04 add %g1, 4, %l1 !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40006c30: 80 a4 00 11 cmp %l0, %l1 40006c34: 02 80 00 0c be 40006c64 <_API_extensions_Run_predriver+0x48> 40006c38: 01 00 00 00 nop the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->predriver_hook ) 40006c3c: c2 04 20 08 ld [ %l0 + 8 ], %g1 40006c40: 80 a0 60 00 cmp %g1, 0 40006c44: 22 80 00 05 be,a 40006c58 <_API_extensions_Run_predriver+0x3c> 40006c48: e0 04 00 00 ld [ %l0 ], %l0 (*the_extension->predriver_hook)(); 40006c4c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40006c50: 01 00 00 00 nop <== NOT EXECUTED Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; !_Chain_Is_tail( &_API_extensions_List, the_node ) ; the_node = the_node->next ) { 40006c54: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED { Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40006c58: 80 a4 00 11 cmp %l0, %l1 40006c5c: 32 bf ff f9 bne,a 40006c40 <_API_extensions_Run_predriver+0x24> 40006c60: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40006c64: 81 c7 e0 08 ret 40006c68: 81 e8 00 00 restore 40013f18 <_CORE_message_queue_Broadcast>: size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, uint32_t *count ) { 40013f18: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *the_thread; uint32_t number_broadcasted; Thread_Wait_information *waitp; if ( size > the_message_queue->maximum_message_size ) { 40013f1c: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, uint32_t *count ) { 40013f20: a4 10 00 18 mov %i0, %l2 Thread_Control *the_thread; uint32_t number_broadcasted; Thread_Wait_information *waitp; if ( size > the_message_queue->maximum_message_size ) { 40013f24: 80 a0 40 1a cmp %g1, %i2 40013f28: 0a 80 00 17 bcs 40013f84 <_CORE_message_queue_Broadcast+0x6c> 40013f2c: b0 10 20 01 mov 1, %i0 * NOTE: This check is critical because threads can block on * send and receive and this ensures that we are broadcasting * the message to threads waiting to receive -- not to send. */ if ( the_message_queue->number_of_pending_messages != 0 ) { 40013f30: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 40013f34: 80 a0 60 00 cmp %g1, 0 40013f38: 02 80 00 0a be 40013f60 <_CORE_message_queue_Broadcast+0x48> 40013f3c: a2 10 20 00 clr %l1 *count = 0; 40013f40: c0 27 40 00 clr [ %i5 ] <== NOT EXECUTED 40013f44: 81 c7 e0 08 ret <== NOT EXECUTED 40013f48: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 40013f4c: d0 04 20 28 ld [ %l0 + 0x28 ], %o0 40013f50: 40 00 21 ab call 4001c5fc 40013f54: a2 04 60 01 inc %l1 buffer, waitp->return_argument, size ); *(uint32_t *)the_thread->Wait.return_argument_1 = size; 40013f58: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 40013f5c: f4 20 40 00 st %i2, [ %g1 ] * There must be no pending messages if there is a thread waiting to * receive a message. */ number_broadcasted = 0; while ((the_thread = _Thread_queue_Dequeue(&the_message_queue->Wait_queue))) { 40013f60: 40 00 0b 94 call 40016db0 <_Thread_queue_Dequeue> 40013f64: 90 10 00 12 mov %l2, %o0 40013f68: 92 10 00 19 mov %i1, %o1 40013f6c: a0 10 00 08 mov %o0, %l0 40013f70: 80 a2 20 00 cmp %o0, 0 40013f74: 12 bf ff f6 bne 40013f4c <_CORE_message_queue_Broadcast+0x34> 40013f78: 94 10 00 1a mov %i2, %o2 if ( !_Objects_Is_local_id( the_thread->Object.id ) ) (*api_message_queue_mp_support) ( the_thread, id ); #endif } *count = number_broadcasted; 40013f7c: e2 27 40 00 st %l1, [ %i5 ] 40013f80: b0 10 20 00 clr %i0 return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL; } 40013f84: 81 c7 e0 08 ret 40013f88: 81 e8 00 00 restore 4001404c <_CORE_message_queue_Initialize>: CORE_message_queue_Control *the_message_queue, CORE_message_queue_Attributes *the_message_queue_attributes, uint32_t maximum_pending_messages, uint32_t maximum_message_size ) { 4001404c: 9d e3 bf 98 save %sp, -104, %sp uint32_t message_buffering_required; uint32_t allocated_message_size; the_message_queue->maximum_pending_messages = maximum_pending_messages; the_message_queue->number_of_pending_messages = 0; 40014050: c0 26 20 48 clr [ %i0 + 0x48 ] ) { uint32_t message_buffering_required; uint32_t allocated_message_size; the_message_queue->maximum_pending_messages = maximum_pending_messages; 40014054: f4 26 20 44 st %i2, [ %i0 + 0x44 ] the_message_queue->number_of_pending_messages = 0; the_message_queue->maximum_message_size = maximum_message_size; 40014058: f6 26 20 4c st %i3, [ %i0 + 0x4c ] CORE_message_queue_Control *the_message_queue, CORE_message_queue_Notify_Handler the_handler, void *the_argument ) { the_message_queue->notify_handler = the_handler; 4001405c: c0 26 20 60 clr [ %i0 + 0x60 ] the_message_queue->notify_argument = the_argument; 40014060: c0 26 20 64 clr [ %i0 + 0x64 ] * Round size up to multiple of a pointer for chain init and * check for overflow on adding overhead to each message. */ allocated_message_size = maximum_message_size; if (allocated_message_size & (sizeof(uint32_t) - 1)) { 40014064: 80 8e e0 03 btst 3, %i3 40014068: 02 80 00 07 be 40014084 <_CORE_message_queue_Initialize+0x38> 4001406c: a0 10 00 1b mov %i3, %l0 allocated_message_size += sizeof(uint32_t); 40014070: 82 06 e0 04 add %i3, 4, %g1 allocated_message_size &= ~(sizeof(uint32_t) - 1); 40014074: a0 08 7f fc and %g1, -4, %l0 } if (allocated_message_size < maximum_message_size) 40014078: 80 a6 c0 10 cmp %i3, %l0 4001407c: 18 80 00 09 bgu 400140a0 <_CORE_message_queue_Initialize+0x54> 40014080: 01 00 00 00 nop /* * Calculate how much total memory is required for message buffering and * check for overflow on the multiplication. */ message_buffering_required = maximum_pending_messages * 40014084: b6 04 20 14 add %l0, 0x14, %i3 40014088: 92 10 00 1a mov %i2, %o1 4001408c: 40 00 42 31 call 40024950 <.umul> 40014090: 90 10 00 1b mov %i3, %o0 (allocated_message_size + sizeof(CORE_message_queue_Buffer_control)); if (message_buffering_required < allocated_message_size) 40014094: 80 a2 00 10 cmp %o0, %l0 40014098: 1a 80 00 04 bcc 400140a8 <_CORE_message_queue_Initialize+0x5c> 4001409c: 92 10 00 08 mov %o0, %o1 STATES_WAITING_FOR_MESSAGE, CORE_MESSAGE_QUEUE_STATUS_TIMEOUT ); return TRUE; } 400140a0: 81 c7 e0 08 ret <== NOT EXECUTED 400140a4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 400140a8: 11 10 00 cd sethi %hi(0x40033400), %o0 400140ac: 40 00 02 20 call 4001492c <_Heap_Allocate> 400140b0: 90 12 21 2c or %o0, 0x12c, %o0 ! 4003352c <_Workspace_Area> * Attempt to allocate the message memory */ the_message_queue->message_buffers = (CORE_message_queue_Buffer *) _Workspace_Allocate( message_buffering_required ); if (the_message_queue->message_buffers == 0) 400140b4: 80 a2 20 00 cmp %o0, 0 400140b8: 02 bf ff fa be 400140a0 <_CORE_message_queue_Initialize+0x54> 400140bc: d0 26 20 5c st %o0, [ %i0 + 0x5c ] /* * Initialize the pool of inactive messages, pending messages, * and set of waiting threads. */ _Chain_Initialize ( 400140c0: 92 10 00 08 mov %o0, %o1 400140c4: 94 10 00 1a mov %i2, %o2 400140c8: 90 06 20 68 add %i0, 0x68, %o0 400140cc: 7f ff ff 7b call 40013eb8 <_Chain_Initialize> 400140d0: 96 10 00 1b mov %i3, %o3 allocated_message_size + sizeof( CORE_message_queue_Buffer_control ) ); _Chain_Initialize_empty( &the_message_queue->Pending_messages ); _Thread_queue_Initialize( 400140d4: c2 06 40 00 ld [ %i1 ], %g1 400140d8: 84 06 20 50 add %i0, 0x50, %g2 400140dc: 82 18 60 01 xor %g1, 1, %g1 400140e0: 80 a0 00 01 cmp %g0, %g1 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400140e4: 82 06 20 54 add %i0, 0x54, %g1 the_chain->permanent_null = NULL; 400140e8: c0 26 20 54 clr [ %i0 + 0x54 ] 400140ec: 90 10 00 18 mov %i0, %o0 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400140f0: c2 26 20 50 st %g1, [ %i0 + 0x50 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 400140f4: c4 26 20 58 st %g2, [ %i0 + 0x58 ] 400140f8: 92 60 3f ff subx %g0, -1, %o1 400140fc: 94 10 20 80 mov 0x80, %o2 40014100: 96 10 20 06 mov 6, %o3 40014104: 40 00 0c a7 call 400173a0 <_Thread_queue_Initialize> 40014108: b0 10 20 01 mov 1, %i0 4001410c: 81 c7 e0 08 ret 40014110: 81 e8 00 00 restore 40019264 <_CORE_message_queue_Insert_message>: void _CORE_message_queue_Insert_message( CORE_message_queue_Control *the_message_queue, CORE_message_queue_Buffer_control *the_message, CORE_message_queue_Submit_types submit_type ) { 40019264: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; boolean notify = FALSE; the_message->priority = submit_type; switch ( submit_type ) { 40019268: 03 20 00 00 sethi %hi(0x80000000), %g1 4001926c: 80 a6 80 01 cmp %i2, %g1 40019270: 02 80 00 40 be 40019370 <_CORE_message_queue_Insert_message+0x10c> 40019274: f4 26 60 08 st %i2, [ %i1 + 8 ] 40019278: 82 00 7c 00 add %g1, -1024, %g1 4001927c: 82 10 63 ff or %g1, 0x3ff, %g1 40019280: 80 a6 80 01 cmp %i2, %g1 40019284: 02 80 00 29 be 40019328 <_CORE_message_queue_Insert_message+0xc4> 40019288: 84 06 20 54 add %i0, 0x54, %g2 CORE_message_queue_Buffer_control *this_message; Chain_Node *the_node; Chain_Control *the_header; the_header = &the_message_queue->Pending_messages; the_node = the_header->first; 4001928c: e0 06 20 50 ld [ %i0 + 0x50 ], %l0 <== NOT EXECUTED while ( !_Chain_Is_tail( the_header, the_node ) ) { 40019290: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 40019294: 32 80 00 21 bne,a 40019318 <_CORE_message_queue_Insert_message+0xb4> <== NOT EXECUTED 40019298: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED continue; } break; } _ISR_Disable( level ); 4001929c: 7f ff a4 d8 call 400025fc <== NOT EXECUTED 400192a0: 01 00 00 00 nop <== NOT EXECUTED if ( the_message_queue->number_of_pending_messages++ == 0 ) notify = TRUE; _Chain_Insert_unprotected( the_node->previous, &the_message->Node ); 400192a4: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED } break; } _ISR_Disable( level ); if ( the_message_queue->number_of_pending_messages++ == 0 ) 400192a8: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 <== NOT EXECUTED ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 400192ac: c6 00 40 00 ld [ %g1 ], %g3 <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 400192b0: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED before_node = after_node->next; after_node->next = the_node; 400192b4: f2 20 40 00 st %i1, [ %g1 ] <== NOT EXECUTED 400192b8: 84 00 a0 01 inc %g2 <== NOT EXECUTED the_node->next = before_node; before_node->previous = the_node; 400192bc: f2 20 e0 04 st %i1, [ %g3 + 4 ] <== NOT EXECUTED 400192c0: 82 18 a0 01 xor %g2, 1, %g1 <== NOT EXECUTED Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; 400192c4: c6 26 40 00 st %g3, [ %i1 ] <== NOT EXECUTED 400192c8: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 400192cc: c4 26 20 48 st %g2, [ %i0 + 0x48 ] <== NOT EXECUTED 400192d0: a0 60 3f ff subx %g0, -1, %l0 <== NOT EXECUTED notify = TRUE; _Chain_Insert_unprotected( the_node->previous, &the_message->Node ); _ISR_Enable( level ); 400192d4: 7f ff a4 ce call 4000260c <== NOT EXECUTED 400192d8: 01 00 00 00 nop <== NOT EXECUTED * According to POSIX, does this happen before or after the message * is actually enqueued. It is logical to think afterwards, because * the message is actually in the queue at this point. */ if ( notify && the_message_queue->notify_handler ) 400192dc: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 400192e0: 02 80 00 08 be 40019300 <_CORE_message_queue_Insert_message+0x9c> 400192e4: 01 00 00 00 nop 400192e8: c2 06 20 60 ld [ %i0 + 0x60 ], %g1 400192ec: 80 a0 60 00 cmp %g1, 0 400192f0: 02 80 00 04 be 40019300 <_CORE_message_queue_Insert_message+0x9c> 400192f4: 01 00 00 00 nop (*the_message_queue->notify_handler)( the_message_queue->notify_argument ); 400192f8: 9f c0 40 00 call %g1 <== NOT EXECUTED 400192fc: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 40019300: 81 c7 e0 08 ret 40019304: 81 e8 00 00 restore Chain_Node *the_node; Chain_Control *the_header; the_header = &the_message_queue->Pending_messages; the_node = the_header->first; while ( !_Chain_Is_tail( the_header, the_node ) ) { 40019308: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 4001930c: 02 bf ff e4 be 4001929c <_CORE_message_queue_Insert_message+0x38> <== NOT EXECUTED 40019310: 01 00 00 00 nop <== NOT EXECUTED this_message = (CORE_message_queue_Buffer_control *) the_node; if ( this_message->priority <= the_message->priority ) { 40019314: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40019318: 80 a6 80 01 cmp %i2, %g1 <== NOT EXECUTED 4001931c: 36 bf ff fb bge,a 40019308 <_CORE_message_queue_Insert_message+0xa4> <== NOT EXECUTED 40019320: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 40019324: 30 bf ff de b,a 4001929c <_CORE_message_queue_Insert_message+0x38> <== NOT EXECUTED the_message->priority = submit_type; switch ( submit_type ) { case CORE_MESSAGE_QUEUE_SEND_REQUEST: _ISR_Disable( level ); 40019328: 7f ff a4 b5 call 400025fc 4001932c: 01 00 00 00 nop if ( the_message_queue->number_of_pending_messages++ == 0 ) 40019330: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 40019334: 82 06 20 54 add %i0, 0x54, %g1 40019338: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 4001933c: c6 06 20 58 ld [ %i0 + 0x58 ], %g3 the_chain->last = the_node; 40019340: f2 26 20 58 st %i1, [ %i0 + 0x58 ] 40019344: 84 00 a0 01 inc %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 40019348: c6 26 60 04 st %g3, [ %i1 + 4 ] 4001934c: 82 18 a0 01 xor %g2, 1, %g1 Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 40019350: f2 20 c0 00 st %i1, [ %g3 ] 40019354: 80 a0 00 01 cmp %g0, %g1 40019358: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 4001935c: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Append_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 40019360: 7f ff a4 ab call 4000260c 40019364: 01 00 00 00 nop * According to POSIX, does this happen before or after the message * is actually enqueued. It is logical to think afterwards, because * the message is actually in the queue at this point. */ if ( notify && the_message_queue->notify_handler ) 40019368: 10 bf ff de b 400192e0 <_CORE_message_queue_Insert_message+0x7c> 4001936c: 80 a4 20 00 cmp %l0, 0 notify = TRUE; _CORE_message_queue_Append_unprotected(the_message_queue, the_message); _ISR_Enable( level ); break; case CORE_MESSAGE_QUEUE_URGENT_REQUEST: _ISR_Disable( level ); 40019370: 7f ff a4 a3 call 400025fc 40019374: 01 00 00 00 nop ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 40019378: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 if ( the_message_queue->number_of_pending_messages++ == 0 ) 4001937c: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 40019380: 82 06 20 50 add %i0, 0x50, %g1 { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; after_node->next = the_node; 40019384: f2 26 20 50 st %i1, [ %i0 + 0x50 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 40019388: c2 26 60 04 st %g1, [ %i1 + 4 ] 4001938c: 84 00 a0 01 inc %g2 before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; before_node->previous = the_node; 40019390: f2 20 e0 04 st %i1, [ %g3 + 4 ] 40019394: 82 18 a0 01 xor %g2, 1, %g1 Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; 40019398: c6 26 40 00 st %g3, [ %i1 ] 4001939c: 80 a0 00 01 cmp %g0, %g1 400193a0: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 400193a4: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Prepend_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 400193a8: 7f ff a4 99 call 4000260c 400193ac: 01 00 00 00 nop * According to POSIX, does this happen before or after the message * is actually enqueued. It is logical to think afterwards, because * the message is actually in the queue at this point. */ if ( notify && the_message_queue->notify_handler ) 400193b0: 10 bf ff cc b 400192e0 <_CORE_message_queue_Insert_message+0x7c> 400193b4: 80 a4 20 00 cmp %l0, 0 400162a8 <_CORE_message_queue_Seize>: void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 400162a8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; CORE_message_queue_Buffer_control *the_message; Thread_Control *executing; Thread_Control *the_thread; executing = _Thread_Executing; 400162ac: 25 10 00 ac sethi %hi(0x4002b000), %l2 400162b0: e2 04 a2 6c ld [ %l2 + 0x26c ], %l1 ! 4002b26c <_Thread_Executing> void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 400162b4: a0 10 00 18 mov %i0, %l0 Thread_Control *executing; Thread_Control *the_thread; executing = _Thread_Executing; executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL; _ISR_Disable( level ); 400162b8: 7f ff b0 d1 call 400025fc 400162bc: c0 24 60 34 clr [ %l1 + 0x34 ] 400162c0: 88 10 00 08 mov %o0, %g4 if ( the_message_queue->number_of_pending_messages != 0 ) { 400162c4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 400162c8: 80 a0 60 00 cmp %g1, 0 400162cc: 02 80 00 23 be 40016358 <_CORE_message_queue_Seize+0xb0> 400162d0: 80 a7 20 00 cmp %i4, 0 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 400162d4: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 the_message_queue->number_of_pending_messages -= 1; 400162d8: 82 00 7f ff add %g1, -1, %g1 400162dc: c2 26 20 48 st %g1, [ %i0 + 0x48 ] */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected( Chain_Control *the_chain ) { if ( !_Chain_Is_empty(the_chain)) 400162e0: 84 06 20 54 add %i0, 0x54, %g2 400162e4: 80 a0 c0 02 cmp %g3, %g2 400162e8: 12 80 00 24 bne 40016378 <_CORE_message_queue_Seize+0xd0> 400162ec: b2 10 20 00 clr %i1 the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); 400162f0: 7f ff b0 c7 call 4000260c 400162f4: 90 10 00 04 mov %g4, %o0 *size = the_message->Contents.size; 400162f8: d4 06 60 0c ld [ %i1 + 0xc ], %o2 _Thread_Executing->Wait.count = the_message->priority; 400162fc: c4 04 a2 6c ld [ %l2 + 0x26c ], %g2 the_message_queue->number_of_pending_messages -= 1; the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); *size = the_message->Contents.size; 40016300: d4 26 c0 00 st %o2, [ %i3 ] _Thread_Executing->Wait.count = the_message->priority; 40016304: c2 06 60 08 ld [ %i1 + 8 ], %g1 40016308: a2 06 60 10 add %i1, 0x10, %l1 4001630c: c2 20 a0 24 st %g1, [ %g2 + 0x24 ] const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 40016310: 92 10 00 11 mov %l1, %o1 40016314: 40 00 13 00 call 4001af14 40016318: 90 10 00 1a mov %i2, %o0 * * NOTE: If we note that the queue was not full before this receive, * then we can avoid this dequeue. */ the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); 4001631c: 7f ff e9 3e call 40010814 <_Thread_queue_Dequeue> 40016320: 90 10 00 10 mov %l0, %o0 if ( !the_thread ) { 40016324: 80 a2 20 00 cmp %o0, 0 40016328: 02 80 00 24 be 400163b8 <_CORE_message_queue_Seize+0x110> 4001632c: 01 00 00 00 nop * puts the messages in the message queue on behalf of the * waiting task. */ the_message->priority = the_thread->Wait.count; the_message->Contents.size = (uint32_t)the_thread->Wait.option; 40016330: d4 02 20 30 ld [ %o0 + 0x30 ], %o2 <== NOT EXECUTED * There was a thread waiting to send a message. This code * puts the messages in the message queue on behalf of the * waiting task. */ the_message->priority = the_thread->Wait.count; 40016334: c2 02 20 24 ld [ %o0 + 0x24 ], %g1 <== NOT EXECUTED 40016338: d2 02 20 28 ld [ %o0 + 0x28 ], %o1 <== NOT EXECUTED the_message->Contents.size = (uint32_t)the_thread->Wait.option; 4001633c: d4 26 60 0c st %o2, [ %i1 + 0xc ] <== NOT EXECUTED * There was a thread waiting to send a message. This code * puts the messages in the message queue on behalf of the * waiting task. */ the_message->priority = the_thread->Wait.count; 40016340: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED 40016344: 40 00 12 f4 call 4001af14 <== NOT EXECUTED 40016348: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED the_thread->Wait.return_argument, the_message->Contents.buffer, the_message->Contents.size ); _CORE_message_queue_Insert_message( 4001634c: f4 06 60 08 ld [ %i1 + 8 ], %i2 <== NOT EXECUTED 40016350: 40 00 0b c5 call 40019264 <_CORE_message_queue_Insert_message> <== NOT EXECUTED 40016354: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED the_message->priority ); return; } if ( !wait ) { 40016358: 12 80 00 0e bne 40016390 <_CORE_message_queue_Seize+0xe8> 4001635c: 82 10 20 01 mov 1, %g1 _ISR_Enable( level ); 40016360: 7f ff b0 ab call 4000260c 40016364: 01 00 00 00 nop executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT; 40016368: 82 10 20 04 mov 4, %g1 ! 4 4001636c: c2 24 60 34 st %g1, [ %l1 + 0x34 ] executing->Wait.return_argument_1 = (void *)size; /* Wait.count will be filled in with the message priority */ _ISR_Enable( level ); _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); } 40016370: 81 c7 e0 08 ret 40016374: 81 e8 00 00 restore { Chain_Node *return_node; Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; 40016378: c4 00 c0 00 ld [ %g3 ], %g2 the_chain->first = new_first; new_first->previous = _Chain_Head(the_chain); 4001637c: 82 06 20 50 add %i0, 0x50, %g1 Chain_Node *return_node; Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; the_chain->first = new_first; 40016380: c4 26 20 50 st %g2, [ %i0 + 0x50 ] new_first->previous = _Chain_Head(the_chain); 40016384: b2 10 00 03 mov %g3, %i1 40016388: 10 bf ff da b 400162f0 <_CORE_message_queue_Seize+0x48> 4001638c: c2 20 a0 04 st %g1, [ %g2 + 4 ] _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); executing->Wait.queue = &the_message_queue->Wait_queue; executing->Wait.id = id; executing->Wait.return_argument = buffer; executing->Wait.return_argument_1 = (void *)size; 40016390: f6 24 60 2c st %i3, [ %l1 + 0x2c ] executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT; return; } _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); executing->Wait.queue = &the_message_queue->Wait_queue; 40016394: f0 24 60 44 st %i0, [ %l1 + 0x44 ] executing->Wait.id = id; 40016398: f2 24 60 20 st %i1, [ %l1 + 0x20 ] executing->Wait.return_argument = buffer; 4001639c: f4 24 60 28 st %i2, [ %l1 + 0x28 ] RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 400163a0: c2 26 20 30 st %g1, [ %i0 + 0x30 ] executing->Wait.return_argument_1 = (void *)size; /* Wait.count will be filled in with the message priority */ _ISR_Enable( level ); 400163a4: 7f ff b0 9a call 4000260c 400163a8: 35 10 00 43 sethi %hi(0x40010c00), %i2 _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 400163ac: b2 10 00 1d mov %i5, %i1 400163b0: 7f ff e9 87 call 400109cc <_Thread_queue_Enqueue_with_handler> 400163b4: 95 ee a3 0c restore %i2, 0x30c, %o2 RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer ( CORE_message_queue_Control *the_message_queue, CORE_message_queue_Buffer_control *the_message ) { _Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node ); 400163b8: 7f ff de d6 call 4000df10 <_Chain_Append> 400163bc: 91 ec 20 68 restore %l0, 0x68, %o0 400163c0: 01 00 00 00 nop 400163c4 <_CORE_message_queue_Submit>: CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, CORE_message_queue_Submit_types submit_type, boolean wait, Watchdog_Interval timeout ) { 400163c4: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; CORE_message_queue_Buffer_control *the_message; Thread_Control *the_thread; if ( size > the_message_queue->maximum_message_size ) { 400163c8: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, CORE_message_queue_Submit_types submit_type, boolean wait, Watchdog_Interval timeout ) { 400163cc: a2 10 00 18 mov %i0, %l1 ISR_Level level; CORE_message_queue_Buffer_control *the_message; Thread_Control *the_thread; if ( size > the_message_queue->maximum_message_size ) { 400163d0: 80 a0 40 1a cmp %g1, %i2 400163d4: 0a 80 00 22 bcs 4001645c <_CORE_message_queue_Submit+0x98> 400163d8: b0 10 20 01 mov 1, %i0 /* * Is there a thread currently waiting on this message queue? */ if ( the_message_queue->number_of_pending_messages == 0 ) { 400163dc: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 400163e0: 80 a0 a0 00 cmp %g2, 0 400163e4: 02 80 00 22 be 4001646c <_CORE_message_queue_Submit+0xa8> 400163e8: 01 00 00 00 nop /* * No one waiting on the message queue at this time, so attempt to * queue the message up for a future receive. */ if ( the_message_queue->number_of_pending_messages < 400163ec: c2 04 60 44 ld [ %l1 + 0x44 ], %g1 400163f0: 80 a0 40 02 cmp %g1, %g2 400163f4: 18 80 00 2b bgu 400164a0 <_CORE_message_queue_Submit+0xdc> 400163f8: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 * No message buffers were available so we may need to return an * overflow error or block the sender until the message is placed * on the queue. */ if ( !wait ) { 400163fc: 80 a0 60 00 cmp %g1, 0 40016400: 02 80 00 17 be 4001645c <_CORE_message_queue_Submit+0x98> 40016404: b0 10 20 02 mov 2, %i0 /* * Do NOT block on a send if the caller is in an ISR. It is * deadly to block in an ISR. */ if ( _ISR_Is_in_progress() ) { 40016408: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED 4001640c: c4 00 62 54 ld [ %g1 + 0x254 ], %g2 ! 4002b254 <_ISR_Nest_level> <== NOT EXECUTED 40016410: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40016414: 12 80 00 14 bne 40016464 <_CORE_message_queue_Submit+0xa0> <== NOT EXECUTED 40016418: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED */ { Thread_Control *executing = _Thread_Executing; _ISR_Disable( level ); 4001641c: 7f ff b0 78 call 400025fc <== NOT EXECUTED 40016420: e0 00 62 6c ld [ %g1 + 0x26c ], %l0 ! 4002b26c <_Thread_Executing> <== NOT EXECUTED 40016424: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); executing->Wait.queue = &the_message_queue->Wait_queue; executing->Wait.id = id; executing->Wait.return_argument = buffer; executing->Wait.option = size; executing->Wait.count = submit_type; 40016428: fa 24 20 24 st %i5, [ %l0 + 0x24 ] <== NOT EXECUTED Thread_Control *executing = _Thread_Executing; _ISR_Disable( level ); _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); executing->Wait.queue = &the_message_queue->Wait_queue; executing->Wait.id = id; 4001642c: f6 24 20 20 st %i3, [ %l0 + 0x20 ] <== NOT EXECUTED executing->Wait.return_argument = buffer; 40016430: f2 24 20 28 st %i1, [ %l0 + 0x28 ] <== NOT EXECUTED executing->Wait.option = size; 40016434: f4 24 20 30 st %i2, [ %l0 + 0x30 ] <== NOT EXECUTED { Thread_Control *executing = _Thread_Executing; _ISR_Disable( level ); _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); executing->Wait.queue = &the_message_queue->Wait_queue; 40016438: e2 24 20 44 st %l1, [ %l0 + 0x44 ] <== NOT EXECUTED 4001643c: c2 24 60 30 st %g1, [ %l1 + 0x30 ] <== NOT EXECUTED executing->Wait.id = id; executing->Wait.return_argument = buffer; executing->Wait.option = size; executing->Wait.count = submit_type; _ISR_Enable( level ); 40016440: 7f ff b0 73 call 4000260c <== NOT EXECUTED 40016444: b0 10 20 07 mov 7, %i0 <== NOT EXECUTED _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 40016448: d2 07 a0 60 ld [ %fp + 0x60 ], %o1 <== NOT EXECUTED 4001644c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40016450: 15 10 00 43 sethi %hi(0x40010c00), %o2 <== NOT EXECUTED 40016454: 7f ff e9 5e call 400109cc <_Thread_queue_Enqueue_with_handler> <== NOT EXECUTED 40016458: 94 12 a3 0c or %o2, 0x30c, %o2 ! 40010f0c <_Thread_queue_Timeout> <== NOT EXECUTED 4001645c: 81 c7 e0 08 ret 40016460: 81 e8 00 00 restore } return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT; } 40016464: 81 c7 e0 08 ret <== NOT EXECUTED 40016468: 91 e8 20 03 restore %g0, 3, %o0 <== NOT EXECUTED /* * Is there a thread currently waiting on this message queue? */ if ( the_message_queue->number_of_pending_messages == 0 ) { the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); 4001646c: 7f ff e8 ea call 40010814 <_Thread_queue_Dequeue> 40016470: 90 10 00 11 mov %l1, %o0 if ( the_thread ) { 40016474: a0 92 20 00 orcc %o0, 0, %l0 40016478: 02 80 00 1b be 400164e4 <_CORE_message_queue_Submit+0x120> 4001647c: 92 10 00 19 mov %i1, %o1 const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 40016480: d0 04 20 28 ld [ %l0 + 0x28 ], %o0 40016484: 40 00 12 a4 call 4001af14 40016488: 94 10 00 1a mov %i2, %o2 _CORE_message_queue_Copy_buffer( buffer, the_thread->Wait.return_argument, size ); *(size_t *)the_thread->Wait.return_argument_1 = size; 4001648c: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 the_thread->Wait.count = submit_type; 40016490: fa 24 20 24 st %i5, [ %l0 + 0x24 ] _CORE_message_queue_Copy_buffer( buffer, the_thread->Wait.return_argument, size ); *(size_t *)the_thread->Wait.return_argument_1 = size; 40016494: f4 20 40 00 st %i2, [ %g1 ] the_thread->Wait.count = submit_type; 40016498: 81 c7 e0 08 ret 4001649c: 91 e8 20 00 restore %g0, 0, %o0 RTEMS_INLINE_ROUTINE CORE_message_queue_Buffer_control * _CORE_message_queue_Allocate_message_buffer ( CORE_message_queue_Control *the_message_queue ) { return (CORE_message_queue_Buffer_control *) 400164a0: 7f ff de a8 call 4000df40 <_Chain_Get> 400164a4: 90 04 60 68 add %l1, 0x68, %o0 /* * NOTE: If the system is consistent, this error should never occur. */ if ( !the_message ) { 400164a8: a0 92 20 00 orcc %o0, 0, %l0 400164ac: 02 bf ff ee be 40016464 <_CORE_message_queue_Submit+0xa0> 400164b0: 92 10 00 19 mov %i1, %o1 const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 400164b4: 94 10 00 1a mov %i2, %o2 400164b8: 40 00 12 97 call 4001af14 400164bc: 90 04 20 10 add %l0, 0x10, %o0 size ); the_message->Contents.size = size; the_message->priority = submit_type; _CORE_message_queue_Insert_message( 400164c0: 90 10 00 11 mov %l1, %o0 _CORE_message_queue_Copy_buffer( buffer, the_message->Contents.buffer, size ); the_message->Contents.size = size; 400164c4: f4 24 20 0c st %i2, [ %l0 + 0xc ] the_message->priority = submit_type; 400164c8: fa 24 20 08 st %i5, [ %l0 + 8 ] _CORE_message_queue_Insert_message( 400164cc: 92 10 00 10 mov %l0, %o1 400164d0: 94 10 00 1d mov %i5, %o2 400164d4: 40 00 0b 64 call 40019264 <_CORE_message_queue_Insert_message> 400164d8: b0 10 20 00 clr %i0 400164dc: 81 c7 e0 08 ret 400164e0: 81 e8 00 00 restore * Is there a thread currently waiting on this message queue? */ if ( the_message_queue->number_of_pending_messages == 0 ) { the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); if ( the_thread ) { 400164e4: 10 bf ff c2 b 400163ec <_CORE_message_queue_Submit+0x28> 400164e8: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 40006d48 <_CORE_mutex_Initialize>: CORE_mutex_Status _CORE_mutex_Initialize( CORE_mutex_Control *the_mutex, CORE_mutex_Attributes *the_mutex_attributes, uint32_t initial_lock ) { 40006d48: 9d e3 bf 98 save %sp, -104, %sp /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40006d4c: c2 06 40 00 ld [ %i1 ], %g1 CORE_mutex_Status _CORE_mutex_Initialize( CORE_mutex_Control *the_mutex, CORE_mutex_Attributes *the_mutex_attributes, uint32_t initial_lock ) { 40006d50: 90 10 00 18 mov %i0, %o0 /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40006d54: c2 26 20 40 st %g1, [ %i0 + 0x40 ] 40006d58: c4 06 60 04 ld [ %i1 + 4 ], %g2 the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { 40006d5c: 80 a6 a0 00 cmp %i2, 0 /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40006d60: c4 26 20 44 st %g2, [ %i0 + 0x44 ] 40006d64: c8 06 60 08 ld [ %i1 + 8 ], %g4 40006d68: c8 26 20 48 st %g4, [ %i0 + 0x48 ] 40006d6c: da 06 60 0c ld [ %i1 + 0xc ], %o5 the_mutex->lock = initial_lock; 40006d70: f4 26 20 50 st %i2, [ %i0 + 0x50 ] /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40006d74: da 26 20 4c st %o5, [ %i0 + 0x4c ] the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { 40006d78: 12 80 00 1c bne 40006de8 <_CORE_mutex_Initialize+0xa0> 40006d7c: c0 26 20 58 clr [ %i0 + 0x58 ] the_mutex->nest_count = 1; the_mutex->holder = _Thread_Executing; 40006d80: 19 10 00 66 sethi %hi(0x40019800), %o4 40006d84: c6 03 23 ec ld [ %o4 + 0x3ec ], %g3 ! 40019bec <_Thread_Executing> the_mutex->Attributes = *the_mutex_attributes; the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { the_mutex->nest_count = 1; 40006d88: 82 10 20 01 mov 1, %g1 40006d8c: c2 26 20 54 st %g1, [ %i0 + 0x54 ] the_mutex->holder = _Thread_Executing; the_mutex->holder_id = _Thread_Executing->Object.id; 40006d90: c4 00 e0 08 ld [ %g3 + 8 ], %g2 the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { the_mutex->nest_count = 1; the_mutex->holder = _Thread_Executing; 40006d94: c6 26 20 5c st %g3, [ %i0 + 0x5c ] the_mutex->holder_id = _Thread_Executing->Object.id; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40006d98: 80 a1 20 02 cmp %g4, 2 40006d9c: 12 80 00 1f bne 40006e18 <_CORE_mutex_Initialize+0xd0> 40006da0: c4 26 20 60 st %g2, [ %i0 + 0x60 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < 40006da4: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 40006da8: 80 a0 40 0d cmp %g1, %o5 40006dac: 0a 80 00 0d bcs 40006de0 <_CORE_mutex_Initialize+0x98> 40006db0: b0 10 20 06 mov 6, %i0 the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; 40006db4: c4 03 23 ec ld [ %o4 + 0x3ec ], %g2 the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40006db8: 94 10 24 00 mov 0x400, %o2 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; 40006dbc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40006dc0: 96 10 20 05 mov 5, %o3 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; 40006dc4: 82 00 60 01 inc %g1 40006dc8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40006dcc: c2 06 60 08 ld [ %i1 + 8 ], %g1 40006dd0: b0 10 20 00 clr %i0 40006dd4: 80 a0 00 01 cmp %g0, %g1 40006dd8: 40 00 0b 60 call 40009b58 <_Thread_queue_Initialize> 40006ddc: 92 40 20 00 addx %g0, 0, %o1 STATES_WAITING_FOR_MUTEX, CORE_MUTEX_TIMEOUT ); return CORE_MUTEX_STATUS_SUCCESSFUL; } 40006de0: 81 c7 e0 08 ret 40006de4: 81 e8 00 00 restore the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40006de8: c2 06 60 08 ld [ %i1 + 8 ], %g1 if ( _Thread_Executing->current_priority < the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; } else { the_mutex->nest_count = 0; 40006dec: c0 26 20 54 clr [ %i0 + 0x54 ] the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40006df0: 80 a0 00 01 cmp %g0, %g1 the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; } else { the_mutex->nest_count = 0; the_mutex->holder = NULL; 40006df4: c0 26 20 5c clr [ %i0 + 0x5c ] the_mutex->holder_id = 0; 40006df8: c0 26 20 60 clr [ %i0 + 0x60 ] } _Thread_queue_Initialize( 40006dfc: 92 40 20 00 addx %g0, 0, %o1 40006e00: 94 10 24 00 mov 0x400, %o2 40006e04: 96 10 20 05 mov 5, %o3 40006e08: 40 00 0b 54 call 40009b58 <_Thread_queue_Initialize> 40006e0c: b0 10 20 00 clr %i0 STATES_WAITING_FOR_MUTEX, CORE_MUTEX_TIMEOUT ); return CORE_MUTEX_STATUS_SUCCESSFUL; } 40006e10: 81 c7 e0 08 ret 40006e14: 81 e8 00 00 restore if ( initial_lock == CORE_MUTEX_LOCKED ) { the_mutex->nest_count = 1; the_mutex->holder = _Thread_Executing; the_mutex->holder_id = _Thread_Executing->Object.id; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40006e18: 80 a1 20 03 cmp %g4, 3 40006e1c: 32 bf ff e7 bne,a 40006db8 <_CORE_mutex_Initialize+0x70> 40006e20: c4 03 23 ec ld [ %o4 + 0x3ec ], %g2 _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < 40006e24: 10 bf ff e1 b 40006da8 <_CORE_mutex_Initialize+0x60> <== NOT EXECUTED 40006e28: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 <== NOT EXECUTED 40006e2c <_CORE_mutex_Seize_interrupt_blocking>: void _CORE_mutex_Seize_interrupt_blocking( CORE_mutex_Control *the_mutex, Watchdog_Interval timeout ) { 40006e2c: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 40006e30: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 Watchdog_Interval timeout ) { Thread_Control *executing; executing = _Thread_Executing; 40006e34: 03 10 00 66 sethi %hi(0x40019800), %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 40006e38: 80 a0 a0 02 cmp %g2, 2 40006e3c: 12 80 00 08 bne 40006e5c <_CORE_mutex_Seize_interrupt_blocking+0x30> 40006e40: d2 00 63 ec ld [ %g1 + 0x3ec ], %o1 if ( the_mutex->holder->current_priority > executing->current_priority ) { 40006e44: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 40006e48: d2 02 60 14 ld [ %o1 + 0x14 ], %o1 40006e4c: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40006e50: 80 a0 40 09 cmp %g1, %o1 40006e54: 18 80 00 16 bgu 40006eac <_CORE_mutex_Seize_interrupt_blocking+0x80> 40006e58: 01 00 00 00 nop FALSE ); } } the_mutex->blocked_count++; 40006e5c: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40006e60: 90 10 00 18 mov %i0, %o0 FALSE ); } } the_mutex->blocked_count++; 40006e64: 82 00 60 01 inc %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40006e68: 92 10 00 19 mov %i1, %o1 FALSE ); } } the_mutex->blocked_count++; 40006e6c: c2 26 20 58 st %g1, [ %i0 + 0x58 ] _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40006e70: 15 10 00 27 sethi %hi(0x40009c00), %o2 40006e74: 40 00 0a 2b call 40009720 <_Thread_queue_Enqueue_with_handler> 40006e78: 94 12 a0 60 or %o2, 0x60, %o2 ! 40009c60 <_Thread_queue_Timeout> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006e7c: 05 10 00 66 sethi %hi(0x40019800), %g2 40006e80: c2 00 a3 10 ld [ %g2 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 40006e84: 82 00 7f ff add %g1, -1, %g1 40006e88: c2 20 a3 10 st %g1, [ %g2 + 0x310 ] 40006e8c: c6 00 a3 10 ld [ %g2 + 0x310 ], %g3 40006e90: 80 a0 e0 00 cmp %g3, 0 40006e94: 02 80 00 04 be 40006ea4 <_CORE_mutex_Seize_interrupt_blocking+0x78> 40006e98: 01 00 00 00 nop 40006e9c: 81 c7 e0 08 ret <== NOT EXECUTED 40006ea0: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40006ea4: 40 00 08 af call 40009160 <_Thread_Dispatch> 40006ea8: 81 e8 00 00 restore Thread_Control *executing; executing = _Thread_Executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { if ( the_mutex->holder->current_priority > executing->current_priority ) { _Thread_Change_priority( 40006eac: 40 00 07 89 call 40008cd0 <_Thread_Change_priority> 40006eb0: 94 10 20 00 clr %o2 FALSE ); } } the_mutex->blocked_count++; 40006eb4: 10 bf ff eb b 40006e60 <_CORE_mutex_Seize_interrupt_blocking+0x34> 40006eb8: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 40006ebc <_CORE_mutex_Surrender>: CORE_mutex_Status _CORE_mutex_Surrender( CORE_mutex_Control *the_mutex, Objects_Id id, CORE_mutex_API_mp_support_callout api_mutex_mp_support ) { 40006ebc: 9d e3 bf 98 save %sp, -104, %sp * allowed when the mutex in quetion is FIFO or simple Priority * discipline. But Priority Ceiling or Priority Inheritance mutexes * must be released by the thread which acquired them. */ if ( the_mutex->Attributes.only_owner_release ) { 40006ec0: c2 06 20 44 ld [ %i0 + 0x44 ], %g1 CORE_mutex_Status _CORE_mutex_Surrender( CORE_mutex_Control *the_mutex, Objects_Id id, CORE_mutex_API_mp_support_callout api_mutex_mp_support ) { 40006ec4: a0 10 00 18 mov %i0, %l0 * allowed when the mutex in quetion is FIFO or simple Priority * discipline. But Priority Ceiling or Priority Inheritance mutexes * must be released by the thread which acquired them. */ if ( the_mutex->Attributes.only_owner_release ) { 40006ec8: 80 a0 60 00 cmp %g1, 0 40006ecc: 02 80 00 07 be 40006ee8 <_CORE_mutex_Surrender+0x2c> 40006ed0: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 if ( !_Thread_Is_executing( holder ) ) 40006ed4: 03 10 00 66 sethi %hi(0x40019800), %g1 40006ed8: c4 00 63 ec ld [ %g1 + 0x3ec ], %g2 ! 40019bec <_Thread_Executing> 40006edc: 80 a2 00 02 cmp %o0, %g2 40006ee0: 12 80 00 49 bne 40007004 <_CORE_mutex_Surrender+0x148> 40006ee4: b0 10 20 03 mov 3, %i0 return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE; } /* XXX already unlocked -- not right status */ if ( !the_mutex->nest_count ) 40006ee8: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 40006eec: 80 a0 60 00 cmp %g1, 0 40006ef0: 22 80 00 45 be,a 40007004 <_CORE_mutex_Surrender+0x148> 40006ef4: b0 10 20 00 clr %i0 return CORE_MUTEX_STATUS_SUCCESSFUL; the_mutex->nest_count--; 40006ef8: 82 00 7f ff add %g1, -1, %g1 if ( the_mutex->nest_count != 0 ) { 40006efc: 80 a0 60 00 cmp %g1, 0 40006f00: 02 80 00 09 be 40006f24 <_CORE_mutex_Surrender+0x68> 40006f04: c2 24 20 54 st %g1, [ %l0 + 0x54 ] switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40006f08: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 40006f0c: 80 a0 60 00 cmp %g1, 0 40006f10: 02 80 00 3d be 40007004 <_CORE_mutex_Surrender+0x148> 40006f14: b0 10 20 00 clr %i0 40006f18: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40006f1c: 02 80 00 3a be 40007004 <_CORE_mutex_Surrender+0x148> <== NOT EXECUTED 40006f20: b0 10 20 02 mov 2, %i0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40006f24: c4 04 20 48 ld [ %l0 + 0x48 ], %g2 /* * Formally release the mutex before possibly transferring it to a * blocked thread. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40006f28: 80 a0 a0 02 cmp %g2, 2 40006f2c: 22 80 00 2a be,a 40006fd4 <_CORE_mutex_Surrender+0x118> 40006f30: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 40006f34: 80 a0 a0 03 cmp %g2, 3 40006f38: 22 80 00 27 be,a 40006fd4 <_CORE_mutex_Surrender+0x118> 40006f3c: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) holder->resource_count--; the_mutex->holder = NULL; 40006f40: c0 24 20 5c clr [ %l0 + 0x5c ] /* * Whether or not someone is waiting for the mutex, an * inherited priority must be lowered if this is the last * mutex (i.e. resource) this task has. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40006f44: 80 a0 a0 02 cmp %g2, 2 40006f48: 02 80 00 17 be 40006fa4 <_CORE_mutex_Surrender+0xe8> 40006f4c: c0 24 20 60 clr [ %l0 + 0x60 ] 40006f50: 80 a0 a0 03 cmp %g2, 3 40006f54: 22 80 00 15 be,a 40006fa8 <_CORE_mutex_Surrender+0xec> 40006f58: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED /* * Now we check if another thread was waiting for this mutex. If so, * transfer the mutex to that thread. */ if ( ( the_thread = _Thread_queue_Dequeue( &the_mutex->Wait_queue ) ) ) { 40006f5c: 40 00 09 83 call 40009568 <_Thread_queue_Dequeue> 40006f60: 90 10 00 10 mov %l0, %o0 40006f64: 86 92 20 00 orcc %o0, 0, %g3 40006f68: 02 80 00 2e be 40007020 <_CORE_mutex_Surrender+0x164> 40006f6c: 82 10 20 01 mov 1, %g1 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 40006f70: c2 00 e0 08 ld [ %g3 + 8 ], %g1 the_mutex->nest_count = 1; switch ( the_mutex->Attributes.discipline ) { 40006f74: c4 04 20 48 ld [ %l0 + 0x48 ], %g2 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 40006f78: c2 24 20 60 st %g1, [ %l0 + 0x60 ] } else #endif { the_mutex->holder = the_thread; 40006f7c: c6 24 20 5c st %g3, [ %l0 + 0x5c ] the_mutex->holder_id = the_thread->Object.id; the_mutex->nest_count = 1; 40006f80: 82 10 20 01 mov 1, %g1 switch ( the_mutex->Attributes.discipline ) { 40006f84: 80 a0 a0 02 cmp %g2, 2 40006f88: 02 80 00 21 be 4000700c <_CORE_mutex_Surrender+0x150> 40006f8c: c2 24 20 54 st %g1, [ %l0 + 0x54 ] 40006f90: 80 a0 a0 03 cmp %g2, 3 40006f94: 22 80 00 13 be,a 40006fe0 <_CORE_mutex_Surrender+0x124> 40006f98: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED } } else the_mutex->lock = CORE_MUTEX_UNLOCKED; return CORE_MUTEX_STATUS_SUCCESSFUL; } 40006f9c: 81 c7 e0 08 ret 40006fa0: 91 e8 20 00 restore %g0, 0, %o0 * inherited priority must be lowered if this is the last * mutex (i.e. resource) this task has. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { if ( holder->resource_count == 0 && 40006fa4: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 40006fa8: 80 a0 60 00 cmp %g1, 0 40006fac: 12 bf ff ec bne 40006f5c <_CORE_mutex_Surrender+0xa0> 40006fb0: 01 00 00 00 nop 40006fb4: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 40006fb8: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40006fbc: 80 a2 40 01 cmp %o1, %g1 40006fc0: 02 bf ff e7 be 40006f5c <_CORE_mutex_Surrender+0xa0> 40006fc4: 01 00 00 00 nop holder->real_priority != holder->current_priority ) { _Thread_Change_priority( holder, holder->real_priority, TRUE ); 40006fc8: 40 00 07 42 call 40008cd0 <_Thread_Change_priority> 40006fcc: 94 10 20 01 mov 1, %o2 ! 1 40006fd0: 30 bf ff e3 b,a 40006f5c <_CORE_mutex_Surrender+0xa0> * Formally release the mutex before possibly transferring it to a * blocked thread. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) holder->resource_count--; 40006fd4: 82 00 7f ff add %g1, -1, %g1 40006fd8: 10 bf ff da b 40006f40 <_CORE_mutex_Surrender+0x84> 40006fdc: c2 22 20 1c st %g1, [ %o0 + 0x1c ] case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_thread->resource_count++; break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: the_thread->resource_count++; if (the_mutex->Attributes.priority_ceiling < 40006fe0: c4 00 e0 14 ld [ %g3 + 0x14 ], %g2 <== NOT EXECUTED break; case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_thread->resource_count++; break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: the_thread->resource_count++; 40006fe4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40006fe8: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED if (the_mutex->Attributes.priority_ceiling < 40006fec: d2 04 20 4c ld [ %l0 + 0x4c ], %o1 <== NOT EXECUTED 40006ff0: 80 a2 40 02 cmp %o1, %g2 <== NOT EXECUTED 40006ff4: 1a 80 00 04 bcc 40007004 <_CORE_mutex_Surrender+0x148> <== NOT EXECUTED 40006ff8: b0 10 20 00 clr %i0 <== NOT EXECUTED the_thread->current_priority){ _Thread_Change_priority( 40006ffc: 40 00 07 35 call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 40007000: 94 10 20 00 clr %o2 <== NOT EXECUTED 40007004: 81 c7 e0 08 ret 40007008: 81 e8 00 00 restore switch ( the_mutex->Attributes.discipline ) { case CORE_MUTEX_DISCIPLINES_FIFO: case CORE_MUTEX_DISCIPLINES_PRIORITY: break; case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_thread->resource_count++; 4000700c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 40007010: 82 00 60 01 inc %g1 40007014: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] 40007018: 81 c7 e0 08 ret 4000701c: 91 e8 20 00 restore %g0, 0, %o0 } break; } } } else the_mutex->lock = CORE_MUTEX_UNLOCKED; 40007020: c2 24 20 50 st %g1, [ %l0 + 0x50 ] 40007024: 81 c7 e0 08 ret 40007028: 91 e8 20 00 restore %g0, 0, %o0 4000cb20 <_Debug_Is_enabled>: */ boolean _Debug_Is_enabled( rtems_debug_control level ) { 4000cb20: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000cb24: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 40019bf0 <_Debug_Level> <== NOT EXECUTED 4000cb28: 90 0a 00 02 and %o0, %g2, %o0 <== NOT EXECUTED return (_Debug_Level & level) ? TRUE : FALSE; } 4000cb2c: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000cb30: 81 c3 e0 08 retl <== NOT EXECUTED 4000cb34: 90 40 20 00 addx %g0, 0, %o0 <== NOT EXECUTED 400054ec <_Event_Seize>: rtems_event_set event_in, rtems_option option_set, rtems_interval ticks, rtems_event_set *event_out ) { 400054ec: 9d e3 bf 98 save %sp, -104, %sp rtems_event_set pending_events; ISR_Level level; RTEMS_API_Control *api; Event_Sync_states sync_state; executing = _Thread_Executing; 400054f0: 03 10 00 66 sethi %hi(0x40019800), %g1 400054f4: e0 00 63 ec ld [ %g1 + 0x3ec ], %l0 ! 40019bec <_Thread_Executing> executing->Wait.return_code = RTEMS_SUCCESSFUL; 400054f8: c0 24 20 34 clr [ %l0 + 0x34 ] api = executing->API_Extensions[ THREAD_API_RTEMS ]; _ISR_Disable( level ); 400054fc: 7f ff f2 37 call 40001dd8 40005500: e4 04 21 6c ld [ %l0 + 0x16c ], %l2 40005504: 84 10 00 08 mov %o0, %g2 pending_events = api->pending_events; 40005508: c2 04 a0 40 ld [ %l2 + 0x40 ], %g1 seized_events = _Event_sets_Get( pending_events, event_in ); if ( !_Event_sets_Is_empty( seized_events ) && 4000550c: a2 8e 00 01 andcc %i0, %g1, %l1 40005510: 02 80 00 0e be 40005548 <_Event_Seize+0x5c> 40005514: 80 8e 60 01 btst 1, %i1 40005518: 80 a6 00 11 cmp %i0, %l1 4000551c: 02 80 00 04 be 4000552c <_Event_Seize+0x40> 40005520: 80 8e 60 02 btst 2, %i1 40005524: 02 80 00 09 be 40005548 <_Event_Seize+0x5c> 40005528: 80 8e 60 01 btst 1, %i1 (seized_events == event_in || _Options_Is_any( option_set )) ) { api->pending_events = 4000552c: 82 28 40 11 andn %g1, %l1, %g1 40005530: c2 24 a0 40 st %g1, [ %l2 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); _ISR_Enable( level ); 40005534: 7f ff f2 2d call 40001de8 40005538: 01 00 00 00 nop *event_out = seized_events; 4000553c: e2 26 c0 00 st %l1, [ %i3 ] 40005540: 81 c7 e0 08 ret 40005544: 81 e8 00 00 restore return; } if ( _Options_Is_no_wait( option_set ) ) { 40005548: 12 80 00 1e bne 400055c0 <_Event_Seize+0xd4> 4000554c: 82 10 20 01 mov 1, %g1 executing->Wait.return_code = RTEMS_UNSATISFIED; *event_out = seized_events; return; } _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 40005550: 23 10 00 67 sethi %hi(0x40019c00), %l1 executing->Wait.option = (uint32_t ) option_set; 40005554: f2 24 20 30 st %i1, [ %l0 + 0x30 ] executing->Wait.count = (uint32_t ) event_in; 40005558: f0 24 20 24 st %i0, [ %l0 + 0x24 ] executing->Wait.return_argument = event_out; 4000555c: f6 24 20 28 st %i3, [ %l0 + 0x28 ] executing->Wait.return_code = RTEMS_UNSATISFIED; *event_out = seized_events; return; } _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 40005560: c2 24 62 24 st %g1, [ %l1 + 0x224 ] executing->Wait.option = (uint32_t ) option_set; executing->Wait.count = (uint32_t ) event_in; executing->Wait.return_argument = event_out; _ISR_Enable( level ); 40005564: 7f ff f2 21 call 40001de8 40005568: 90 10 00 02 mov %g2, %o0 if ( ticks ) { 4000556c: 80 a6 a0 00 cmp %i2, 0 40005570: 32 80 00 24 bne,a 40005600 <_Event_Seize+0x114> 40005574: c2 04 20 08 ld [ %l0 + 8 ], %g1 NULL ); _Watchdog_Insert_ticks( &executing->Timer, ticks ); } _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 40005578: 90 10 00 10 mov %l0, %o0 4000557c: 40 00 12 09 call 40009da0 <_Thread_Set_state> 40005580: 92 10 21 00 mov 0x100, %o1 _ISR_Disable( level ); 40005584: 7f ff f2 15 call 40001dd8 40005588: 01 00 00 00 nop 4000558c: b0 10 00 08 mov %o0, %i0 sync_state = _Event_Sync_state; 40005590: c4 04 62 24 ld [ %l1 + 0x224 ], %g2 _Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; 40005594: c0 24 62 24 clr [ %l1 + 0x224 ] switch ( sync_state ) { 40005598: 80 a0 a0 02 cmp %g2, 2 4000559c: 02 80 00 30 be 4000565c <_Event_Seize+0x170> 400055a0: 82 10 20 06 mov 6, %g1 400055a4: 80 a0 a0 03 cmp %g2, 3 400055a8: 02 80 00 0d be 400055dc <_Event_Seize+0xf0> 400055ac: 80 a0 a0 01 cmp %g2, 1 400055b0: 02 80 00 31 be 40005674 <_Event_Seize+0x188> 400055b4: 01 00 00 00 nop 400055b8: 81 c7 e0 08 ret <== NOT EXECUTED 400055bc: 81 e8 00 00 restore <== NOT EXECUTED *event_out = seized_events; return; } if ( _Options_Is_no_wait( option_set ) ) { _ISR_Enable( level ); 400055c0: 7f ff f2 0a call 40001de8 400055c4: 90 10 00 02 mov %g2, %o0 executing->Wait.return_code = RTEMS_UNSATISFIED; 400055c8: 82 10 20 0d mov 0xd, %g1 400055cc: c2 24 20 34 st %g1, [ %l0 + 0x34 ] *event_out = seized_events; 400055d0: e2 26 c0 00 st %l1, [ %i3 ] 400055d4: 81 c7 e0 08 ret 400055d8: 81 e8 00 00 restore _ISR_Enable( level ); _Thread_Unblock( executing ); return; case EVENT_SYNC_SATISFIED: if ( _Watchdog_Is_active( &executing->Timer ) ) { 400055dc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 400055e0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400055e4: 22 80 00 26 be,a 4000567c <_Event_Seize+0x190> <== NOT EXECUTED 400055e8: c4 24 20 50 st %g2, [ %l0 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &executing->Timer ); _ISR_Enable( level ); (void) _Watchdog_Remove( &executing->Timer ); } else _ISR_Enable( level ); 400055ec: 7f ff f1 ff call 40001de8 <== NOT EXECUTED 400055f0: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 400055f4: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 400055f8: 40 00 0e 25 call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 400055fc: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40005600: 92 04 20 48 add %l0, 0x48, %o1 void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; 40005604: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40005608: 03 10 00 16 sethi %hi(0x40005800), %g1 4000560c: 82 10 60 b0 or %g1, 0xb0, %g1 ! 400058b0 <_Event_Timeout> Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40005610: f4 24 20 54 st %i2, [ %l0 + 0x54 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40005614: c2 24 20 64 st %g1, [ %l0 + 0x64 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40005618: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 4000561c: c0 24 20 6c clr [ %l0 + 0x6c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40005620: 11 10 00 67 sethi %hi(0x40019c00), %o0 40005624: 40 00 13 f6 call 4000a5fc <_Watchdog_Insert> 40005628: 90 12 20 0c or %o0, 0xc, %o0 ! 40019c0c <_Watchdog_Ticks_chain> NULL ); _Watchdog_Insert_ticks( &executing->Timer, ticks ); } _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 4000562c: 90 10 00 10 mov %l0, %o0 40005630: 40 00 11 dc call 40009da0 <_Thread_Set_state> 40005634: 92 10 21 00 mov 0x100, %o1 _ISR_Disable( level ); 40005638: 7f ff f1 e8 call 40001dd8 4000563c: 01 00 00 00 nop 40005640: b0 10 00 08 mov %o0, %i0 sync_state = _Event_Sync_state; 40005644: c4 04 62 24 ld [ %l1 + 0x224 ], %g2 _Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; 40005648: c0 24 62 24 clr [ %l1 + 0x224 ] switch ( sync_state ) { 4000564c: 80 a0 a0 02 cmp %g2, 2 40005650: 12 bf ff d6 bne 400055a8 <_Event_Seize+0xbc> 40005654: 80 a0 a0 03 cmp %g2, 3 case EVENT_SYNC_NOTHING_HAPPENED: _ISR_Enable( level ); return; case EVENT_SYNC_TIMEOUT: executing->Wait.return_code = RTEMS_TIMEOUT; 40005658: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 4000565c: c2 24 20 34 st %g1, [ %l0 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40005660: 7f ff f1 e2 call 40001de8 <== NOT EXECUTED 40005664: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 40005668: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000566c: 40 00 0e 08 call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 40005670: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * enter the synchronization states above. */ return; case EVENT_SYNC_NOTHING_HAPPENED: _ISR_Enable( level ); 40005674: 7f ff f1 dd call 40001de8 40005678: 81 e8 00 00 restore return; case EVENT_SYNC_SATISFIED: if ( _Watchdog_Is_active( &executing->Timer ) ) { _Watchdog_Deactivate( &executing->Timer ); _ISR_Enable( level ); 4000567c: 7f ff f1 db call 40001de8 <== NOT EXECUTED 40005680: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED (void) _Watchdog_Remove( &executing->Timer ); 40005684: 40 00 14 48 call 4000a7a4 <_Watchdog_Remove> <== NOT EXECUTED 40005688: 90 04 20 48 add %l0, 0x48, %o0 <== NOT EXECUTED 4000568c: 10 bf ff db b 400055f8 <_Event_Seize+0x10c> <== NOT EXECUTED 40005690: b2 16 63 f8 or %i1, 0x3f8, %i1 <== NOT EXECUTED 40005790 <_Event_Surrender>: */ void _Event_Surrender( Thread_Control *the_thread ) { 40005790: 9d e3 bf 98 save %sp, -104, %sp rtems_event_set event_condition; rtems_event_set seized_events; rtems_option option_set; RTEMS_API_Control *api; api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; 40005794: e0 06 21 6c ld [ %i0 + 0x16c ], %l0 option_set = (rtems_option) the_thread->Wait.option; 40005798: e4 06 20 30 ld [ %i0 + 0x30 ], %l2 _ISR_Disable( level ); 4000579c: 7f ff f1 8f call 40001dd8 400057a0: b2 10 00 18 mov %i0, %i1 400057a4: a2 10 00 08 mov %o0, %l1 pending_events = api->pending_events; 400057a8: c8 04 20 40 ld [ %l0 + 0x40 ], %g4 event_condition = (rtems_event_set) the_thread->Wait.count; 400057ac: c6 06 20 24 ld [ %i0 + 0x24 ], %g3 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { 400057b0: 9a 88 c0 04 andcc %g3, %g4, %o5 400057b4: 02 80 00 20 be 40005834 <_Event_Surrender+0xa4> 400057b8: 01 00 00 00 nop if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { 400057bc: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 400057c0: 80 88 61 00 btst 0x100, %g1 400057c4: 02 80 00 08 be 400057e4 <_Event_Surrender+0x54> 400057c8: 19 10 00 67 sethi %hi(0x40019c00), %o4 if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { 400057cc: 80 a0 c0 0d cmp %g3, %o5 400057d0: 02 80 00 1b be 4000583c <_Event_Surrender+0xac> 400057d4: 80 8c a0 02 btst 2, %l2 400057d8: 12 80 00 1a bne 40005840 <_Event_Surrender+0xb0> 400057dc: 82 29 00 0d andn %g4, %o5, %g1 } return; } } switch ( _Event_Sync_state ) { 400057e0: 19 10 00 67 sethi %hi(0x40019c00), %o4 <== NOT EXECUTED 400057e4: c2 03 22 24 ld [ %o4 + 0x224 ], %g1 ! 40019e24 <_Event_Sync_state> <== NOT EXECUTED 400057e8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400057ec: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400057f0: 18 80 00 11 bgu 40005834 <_Event_Surrender+0xa4> <== NOT EXECUTED 400057f4: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED case EVENT_SYNC_SATISFIED: break; case EVENT_SYNC_NOTHING_HAPPENED: case EVENT_SYNC_TIMEOUT: if ( !_Thread_Is_executing( the_thread ) ) 400057f8: c4 00 63 ec ld [ %g1 + 0x3ec ], %g2 ! 40019bec <_Thread_Executing> <== NOT EXECUTED 400057fc: 80 a6 40 02 cmp %i1, %g2 <== NOT EXECUTED 40005800: 12 80 00 0d bne 40005834 <_Event_Surrender+0xa4> <== NOT EXECUTED 40005804: 80 a0 c0 0d cmp %g3, %o5 <== NOT EXECUTED break; if ( seized_events == event_condition || _Options_Is_any(option_set) ) { 40005808: 02 80 00 04 be 40005818 <_Event_Surrender+0x88> <== NOT EXECUTED 4000580c: 80 8c a0 02 btst 2, %l2 <== NOT EXECUTED 40005810: 02 80 00 09 be 40005834 <_Event_Surrender+0xa4> <== NOT EXECUTED 40005814: 01 00 00 00 nop <== NOT EXECUTED api->pending_events = 40005818: 82 29 00 0d andn %g4, %o5, %g1 <== NOT EXECUTED _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 4000581c: c4 06 60 28 ld [ %i1 + 0x28 ], %g2 <== NOT EXECUTED case EVENT_SYNC_TIMEOUT: if ( !_Thread_Is_executing( the_thread ) ) break; if ( seized_events == event_condition || _Options_Is_any(option_set) ) { api->pending_events = 40005820: c2 24 20 40 st %g1, [ %l0 + 0x40 ] <== NOT EXECUTED _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; 40005824: c0 26 60 24 clr [ %i1 + 0x24 ] <== NOT EXECUTED *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; _Event_Sync_state = EVENT_SYNC_SATISFIED; 40005828: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED if ( seized_events == event_condition || _Options_Is_any(option_set) ) { api->pending_events = _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 4000582c: da 20 80 00 st %o5, [ %g2 ] <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_SATISFIED; 40005830: c2 23 22 24 st %g1, [ %o4 + 0x224 ] <== NOT EXECUTED } break; } } _ISR_Enable( level ); 40005834: 7f ff f1 6d call 40001de8 40005838: 91 e8 00 11 restore %g0, %l1, %o0 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { api->pending_events = 4000583c: 82 29 00 0d andn %g4, %o5, %g1 _Event_sets_Clear( pending_events, seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 40005840: c4 06 60 28 ld [ %i1 + 0x28 ], %g2 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { api->pending_events = 40005844: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); the_thread->Wait.count = 0; 40005848: c0 26 60 24 clr [ %i1 + 0x24 ] *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 4000584c: da 20 80 00 st %o5, [ %g2 ] _ISR_Flash( level ); 40005850: 7f ff f1 66 call 40001de8 40005854: 01 00 00 00 nop 40005858: 7f ff f1 60 call 40001dd8 4000585c: 01 00 00 00 nop if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 40005860: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 40005864: 80 a0 60 02 cmp %g1, 2 40005868: 02 80 00 08 be 40005888 <_Event_Surrender+0xf8> 4000586c: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 40005870: 90 10 00 11 mov %l1, %o0 40005874: 7f ff f1 5d call 40001de8 40005878: 33 04 00 ff sethi %hi(0x1003fc00), %i1 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000587c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 40005880: 40 00 0d 83 call 40008e8c <_Thread_Clear_state> 40005884: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 40005888: c2 26 60 50 st %g1, [ %i1 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000588c: 7f ff f1 57 call 40001de8 40005890: 90 10 00 11 mov %l1, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 40005894: 40 00 13 c4 call 4000a7a4 <_Watchdog_Remove> 40005898: 90 06 60 48 add %i1, 0x48, %o0 4000589c: 33 04 00 ff sethi %hi(0x1003fc00), %i1 400058a0: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 400058a4: 40 00 0d 7a call 40008e8c <_Thread_Clear_state> 400058a8: 81 e8 00 00 restore 400058ac: 01 00 00 00 nop 400058b0 <_Event_Timeout>: void _Event_Timeout( Objects_Id id, void *ignored ) { 400058b0: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 400058b4: 92 96 20 00 orcc %i0, 0, %o1 400058b8: 12 80 00 25 bne 4000594c <_Event_Timeout+0x9c> 400058bc: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400058c0: 21 10 00 66 sethi %hi(0x40019800), %l0 <== NOT EXECUTED 400058c4: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400058c8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400058cc: c2 24 23 10 st %g1, [ %l0 + 0x310 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 400058d0: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 400058d4: f0 00 63 ec ld [ %g1 + 0x3ec ], %i0 ! 40019bec <_Thread_Executing> <== NOT EXECUTED Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 400058d8: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED * If it is not satisfied, then it is "nothing happened" and * this is the "timeout" transition. After a request is satisfied, * a timeout is not allowed to occur. */ _ISR_Disable( level ); 400058dc: 7f ff f1 3f call 40001dd8 400058e0: 01 00 00 00 nop 400058e4: 88 10 00 08 mov %o0, %g4 if ( the_thread->Wait.count ) { /* verify thread is waiting */ 400058e8: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 400058ec: 80 a0 60 00 cmp %g1, 0 400058f0: 02 80 00 3a be 400059d8 <_Event_Timeout+0x128> 400058f4: 07 10 00 67 sethi %hi(0x40019c00), %g3 the_thread->Wait.count = 0; if ( _Event_Sync_state != EVENT_SYNC_SYNCHRONIZED && 400058f8: c2 00 e2 24 ld [ %g3 + 0x224 ], %g1 ! 40019e24 <_Event_Sync_state> 400058fc: 80 a0 60 00 cmp %g1, 0 40005900: 02 80 00 29 be 400059a4 <_Event_Timeout+0xf4> 40005904: c0 26 20 24 clr [ %i0 + 0x24 ] 40005908: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000590c: c4 00 63 ec ld [ %g1 + 0x3ec ], %g2 ! 40019bec <_Thread_Executing> <== NOT EXECUTED 40005910: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 40005914: 12 80 00 25 bne 400059a8 <_Event_Timeout+0xf8> <== NOT EXECUTED 40005918: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) { 4000591c: c2 00 e2 24 ld [ %g3 + 0x224 ], %g1 <== NOT EXECUTED 40005920: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40005924: 02 80 00 03 be 40005930 <_Event_Timeout+0x80> <== NOT EXECUTED 40005928: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_TIMEOUT; 4000592c: c2 20 e2 24 st %g1, [ %g3 + 0x224 ] <== NOT EXECUTED } _ISR_Enable( level ); 40005930: 7f ff f1 2e call 40001de8 <== NOT EXECUTED 40005934: 01 00 00 00 nop <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 40005938: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 <== NOT EXECUTED 4000593c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40005940: c2 24 23 10 st %g1, [ %l0 + 0x310 ] <== NOT EXECUTED 40005944: 81 c7 e0 08 ret <== NOT EXECUTED 40005948: 81 e8 00 00 restore <== NOT EXECUTED 4000594c: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40005950: 80 a0 a0 04 cmp %g2, 4 40005954: 18 bf ff fc bgu 40005944 <_Event_Timeout+0x94> 40005958: 83 32 60 1b srl %o1, 0x1b, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000595c: 80 a0 60 01 cmp %g1, 1 40005960: 12 bf ff f9 bne 40005944 <_Event_Timeout+0x94> 40005964: 83 28 a0 02 sll %g2, 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40005968: 05 10 00 66 sethi %hi(0x40019800), %g2 4000596c: 84 10 a2 70 or %g2, 0x270, %g2 ! 40019a70 <_Objects_Information_table> 40005970: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40005974: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40005978: 80 a2 20 00 cmp %o0, 0 4000597c: 02 80 00 15 be 400059d0 <_Event_Timeout+0x120> 40005980: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40005984: 40 00 08 cf call 40007cc0 <_Objects_Get> 40005988: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; ISR_Level level; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000598c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40005990: 80 a0 60 00 cmp %g1, 0 40005994: 12 bf ff ec bne 40005944 <_Event_Timeout+0x94> 40005998: b0 10 00 08 mov %o0, %i0 4000599c: 10 bf ff d0 b 400058dc <_Event_Timeout+0x2c> 400059a0: 21 10 00 66 sethi %hi(0x40019800), %l0 if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) { _Event_Sync_state = EVENT_SYNC_TIMEOUT; } _ISR_Enable( level ); } else { the_thread->Wait.return_code = RTEMS_TIMEOUT; 400059a4: 82 10 20 06 mov 6, %g1 400059a8: c2 26 20 34 st %g1, [ %i0 + 0x34 ] _ISR_Enable( level ); 400059ac: 7f ff f1 0f call 40001de8 400059b0: 90 10 00 04 mov %g4, %o0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 400059b4: 13 04 00 ff sethi %hi(0x1003fc00), %o1 400059b8: 90 10 00 18 mov %i0, %o0 400059bc: 40 00 0d 34 call 40008e8c <_Thread_Clear_state> 400059c0: 92 12 63 f8 or %o1, 0x3f8, %o1 */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 400059c4: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 400059c8: 82 00 7f ff add %g1, -1, %g1 400059cc: c2 24 23 10 st %g1, [ %l0 + 0x310 ] 400059d0: 81 c7 e0 08 ret 400059d4: 81 e8 00 00 restore _Thread_Unblock( the_thread ); } } else { _ISR_Enable( level ); 400059d8: 7f ff f1 04 call 40001de8 <== NOT EXECUTED 400059dc: 01 00 00 00 nop <== NOT EXECUTED 400059e0: 30 bf ff f9 b,a 400059c4 <_Event_Timeout+0x114> <== NOT EXECUTED 40007200 <_Heap_Allocate>: void *_Heap_Allocate( Heap_Control *the_heap, size_t size ) { 40007200: 9d e3 bf 98 save %sp, -104, %sp Heap_Block *the_block; void *ptr = NULL; Heap_Statistics *const stats = &the_heap->stats; Heap_Block *const tail = _Heap_Tail(the_heap); the_size = 40007204: d2 06 20 10 ld [ %i0 + 0x10 ], %o1 40007208: d4 06 20 14 ld [ %i0 + 0x14 ], %o2 4000720c: 90 10 00 19 mov %i1, %o0 40007210: 40 00 00 cd call 40007544 <_Heap_Calc_block_size> 40007214: a0 10 00 18 mov %i0, %l0 _Heap_Calc_block_size(size, the_heap->page_size, the_heap->min_block_size); if(the_size == 0) 40007218: 80 a2 20 00 cmp %o0, 0 4000721c: 22 80 00 1a be,a 40007284 <_Heap_Allocate+0x84> 40007220: b0 10 20 00 clr %i0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First ( Heap_Control *the_heap ) { return _Heap_Head(the_heap)->next; 40007224: f0 06 20 08 ld [ %i0 + 8 ], %i0 return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; 40007228: 80 a4 00 18 cmp %l0, %i0 4000722c: 22 80 00 16 be,a 40007284 <_Heap_Allocate+0x84> 40007230: b0 10 20 00 clr %i0 /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); /* Don't bother to mask out the HEAP_PREV_USED bit as it won't change the result of the comparison. */ if(the_block->size >= the_size) { 40007234: c2 06 20 04 ld [ %i0 + 4 ], %g1 40007238: 80 a2 00 01 cmp %o0, %g1 4000723c: 08 80 00 16 bleu 40007294 <_Heap_Allocate+0x94> 40007240: b2 10 20 00 clr %i1 return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; the_block = the_block->next, ++search_count) 40007244: 10 80 00 07 b 40007260 <_Heap_Allocate+0x60> 40007248: f0 06 20 08 ld [ %i0 + 8 ], %i0 /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); /* Don't bother to mask out the HEAP_PREV_USED bit as it won't change the result of the comparison. */ if(the_block->size >= the_size) { 4000724c: c2 06 20 04 ld [ %i0 + 4 ], %g1 40007250: 80 a2 00 01 cmp %o0, %g1 40007254: 08 80 00 11 bleu 40007298 <_Heap_Allocate+0x98> 40007258: 94 10 00 08 mov %o0, %o2 return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; the_block = the_block->next, ++search_count) 4000725c: f0 06 20 08 ld [ %i0 + 8 ], %i0 if(the_size == 0) return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; 40007260: 80 a4 00 18 cmp %l0, %i0 40007264: 12 bf ff fa bne 4000724c <_Heap_Allocate+0x4c> 40007268: b2 06 60 01 inc %i1 4000726c: b0 10 20 00 clr %i0 _HAssert(_Heap_Is_aligned_ptr(ptr, the_heap->page_size)); break; } } if(stats->max_search < search_count) 40007270: c2 04 20 44 ld [ %l0 + 0x44 ], %g1 40007274: 80 a6 40 01 cmp %i1, %g1 40007278: 08 80 00 05 bleu 4000728c <_Heap_Allocate+0x8c> 4000727c: 01 00 00 00 nop stats->max_search = search_count; 40007280: f2 24 20 44 st %i1, [ %l0 + 0x44 ] 40007284: 81 c7 e0 08 ret 40007288: 81 e8 00 00 restore return ptr; } 4000728c: 81 c7 e0 08 ret 40007290: 81 e8 00 00 restore _HAssert(_Heap_Is_prev_used(the_block)); /* Don't bother to mask out the HEAP_PREV_USED bit as it won't change the result of the comparison. */ if(the_block->size >= the_size) { (void)_Heap_Block_allocate(the_heap, the_block, the_size ); 40007294: 94 10 00 08 mov %o0, %o2 40007298: 92 10 00 18 mov %i0, %o1 4000729c: 40 00 00 7e call 40007494 <_Heap_Block_allocate> 400072a0: 90 10 00 10 mov %l0, %o0 ptr = _Heap_User_area(the_block); stats->allocs += 1; 400072a4: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 stats->searches += search_count + 1; 400072a8: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 if(the_block->size >= the_size) { (void)_Heap_Block_allocate(the_heap, the_block, the_size ); ptr = _Heap_User_area(the_block); stats->allocs += 1; 400072ac: 82 00 60 01 inc %g1 stats->searches += search_count + 1; 400072b0: 84 00 a0 01 inc %g2 if(the_block->size >= the_size) { (void)_Heap_Block_allocate(the_heap, the_block, the_size ); ptr = _Heap_User_area(the_block); stats->allocs += 1; 400072b4: c2 24 20 48 st %g1, [ %l0 + 0x48 ] stats->searches += search_count + 1; 400072b8: 84 00 80 19 add %g2, %i1, %g2 RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset ( void *base, uint32_t offset ) { return (void *)((char *)base + offset); 400072bc: b0 06 20 08 add %i0, 8, %i0 400072c0: 10 bf ff ec b 40007270 <_Heap_Allocate+0x70> 400072c4: c4 24 20 4c st %g2, [ %l0 + 0x4c ] 40007544 <_Heap_Calc_block_size>: */ size_t _Heap_Calc_block_size( size_t size, uint32_t page_size, uint32_t min_size) { 40007544: 9d e3 bf 98 save %sp, -104, %sp 40007548: a0 10 00 19 mov %i1, %l0 uint32_t block_size = size + HEAP_BLOCK_USED_OVERHEAD; 4000754c: b2 06 20 04 add %i0, 4, %i1 uint32_t alignment ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; 40007550: 92 10 00 10 mov %l0, %o1 40007554: 40 00 37 ce call 4001548c <.urem> 40007558: 90 10 00 19 mov %i1, %o0 *value = r ? v - r + a : v; 4000755c: 80 a2 20 00 cmp %o0, 0 40007560: 02 80 00 04 be 40007570 <_Heap_Calc_block_size+0x2c> 40007564: 82 10 00 19 mov %i1, %g1 40007568: 82 04 00 19 add %l0, %i1, %g1 4000756c: 82 20 40 08 sub %g1, %o0, %g1 40007570: 80 a0 40 1a cmp %g1, %i2 40007574: 2a 80 00 02 bcs,a 4000757c <_Heap_Calc_block_size+0x38> 40007578: 82 10 00 1a mov %i2, %g1 <== NOT EXECUTED _Heap_Align_up(&block_size, page_size); if (block_size < min_size) block_size = min_size; /* 'block_size' becomes <= 'size' if and only if overflow occured. */ return (block_size > size) ? block_size : 0; 4000757c: 80 a6 00 01 cmp %i0, %g1 40007580: 1a 80 00 03 bcc 4000758c <_Heap_Calc_block_size+0x48> 40007584: b0 10 20 00 clr %i0 40007588: b0 10 00 01 mov %g1, %i0 } 4000758c: 81 c7 e0 08 ret 40007590: 81 e8 00 00 restore 4001ab98 <_Heap_Get_free_information>: */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First ( Heap_Control *the_heap ) { return _Heap_Head(the_heap)->next; 4001ab98: da 02 20 08 ld [ %o0 + 8 ], %o5 <== NOT EXECUTED ) { Heap_Block *the_block; Heap_Block *const tail = _Heap_Tail(the_heap); info->number = 0; 4001ab9c: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED info->largest = 0; 4001aba0: c0 22 60 04 clr [ %o1 + 4 ] <== NOT EXECUTED info->total = 0; 4001aba4: c0 22 60 08 clr [ %o1 + 8 ] <== NOT EXECUTED for(the_block = _Heap_First(the_heap); the_block != tail; 4001aba8: 80 a2 00 0d cmp %o0, %o5 <== NOT EXECUTED 4001abac: 02 80 00 12 be 4001abf4 <_Heap_Get_free_information+0x5c> <== NOT EXECUTED 4001abb0: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001abb4: 84 10 00 0c mov %o4, %g2 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE uint32_t _Heap_Block_size ( Heap_Block *the_block ) { return (the_block->size & ~HEAP_PREV_USED); 4001abb8: c2 03 60 04 ld [ %o5 + 4 ], %g1 <== NOT EXECUTED /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); info->number++; info->total += the_size; if ( info->largest < the_size ) 4001abbc: c6 02 60 04 ld [ %o1 + 4 ], %g3 <== NOT EXECUTED 4001abc0: 88 08 7f fe and %g1, -2, %g4 <== NOT EXECUTED uint32_t const the_size = _Heap_Block_size(the_block); /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); info->number++; 4001abc4: 84 00 a0 01 inc %g2 <== NOT EXECUTED info->total += the_size; 4001abc8: 82 03 00 04 add %o4, %g4, %g1 <== NOT EXECUTED uint32_t const the_size = _Heap_Block_size(the_block); /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); info->number++; 4001abcc: c4 22 40 00 st %g2, [ %o1 ] <== NOT EXECUTED info->total += the_size; 4001abd0: c2 22 60 08 st %g1, [ %o1 + 8 ] <== NOT EXECUTED if ( info->largest < the_size ) 4001abd4: 80 a1 00 03 cmp %g4, %g3 <== NOT EXECUTED 4001abd8: 08 80 00 03 bleu 4001abe4 <_Heap_Get_free_information+0x4c> <== NOT EXECUTED 4001abdc: 98 10 00 01 mov %g1, %o4 <== NOT EXECUTED info->largest = the_size; 4001abe0: c8 22 60 04 st %g4, [ %o1 + 4 ] <== NOT EXECUTED info->largest = 0; info->total = 0; for(the_block = _Heap_First(the_heap); the_block != tail; the_block = the_block->next) 4001abe4: da 03 60 08 ld [ %o5 + 8 ], %o5 <== NOT EXECUTED info->number = 0; info->largest = 0; info->total = 0; for(the_block = _Heap_First(the_heap); the_block != tail; 4001abe8: 80 a2 00 0d cmp %o0, %o5 <== NOT EXECUTED 4001abec: 32 bf ff f4 bne,a 4001abbc <_Heap_Get_free_information+0x24> <== NOT EXECUTED 4001abf0: c2 03 60 04 ld [ %o5 + 4 ], %g1 <== NOT EXECUTED 4001abf4: 81 c3 e0 08 retl <== NOT EXECUTED 4001abf8: 01 00 00 00 nop 40007594 <_Heap_Initialize>: Heap_Control *the_heap, void *starting_address, size_t size, uint32_t page_size ) { 40007594: 9d e3 bf 98 save %sp, -104, %sp _H_uptr_t start; _H_uptr_t aligned_start; uint32_t overhead; Heap_Statistics *const stats = &the_heap->stats; if (page_size == 0) 40007598: 80 a6 e0 00 cmp %i3, 0 4000759c: 12 80 00 43 bne 400076a8 <_Heap_Initialize+0x114> 400075a0: 84 8e e0 07 andcc %i3, 7, %g2 400075a4: b6 10 20 08 mov 8, %i3 <== NOT EXECUTED 400075a8: a4 10 20 00 clr %l2 <== NOT EXECUTED /* Calculate aligned_start so that aligned_start + HEAP_BLOCK_USER_OFFSET (value of user pointer) is aligned on 'page_size' boundary. Make sure resulting 'aligned_start' is not below 'starting_address'. */ start = _H_p2u(starting_address); aligned_start = start + HEAP_BLOCK_USER_OFFSET; 400075ac: a0 06 60 08 add %i1, 8, %l0 uint32_t alignment ) { _H_uptr_t v = *value; uint32_t a = alignment; _H_uptr_t r = v % a; 400075b0: 92 10 00 1b mov %i3, %o1 400075b4: 40 00 37 b6 call 4001548c <.urem> 400075b8: 90 10 00 10 mov %l0, %o0 *value = r ? v - r + a : v; 400075bc: 80 a2 20 00 cmp %o0, 0 400075c0: 02 80 00 05 be 400075d4 <_Heap_Initialize+0x40> 400075c4: a2 04 3f f8 add %l0, -8, %l1 400075c8: 82 06 c0 10 add %i3, %l0, %g1 400075cc: a0 20 40 08 sub %g1, %o0, %l0 _Heap_Align_up_uptr ( &aligned_start, page_size ); aligned_start -= HEAP_BLOCK_USER_OFFSET; 400075d0: a2 04 3f f8 add %l0, -8, %l1 ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; *value = r ? v - r + a : v; 400075d4: 80 a4 a0 00 cmp %l2, 0 400075d8: 02 80 00 04 be 400075e8 <_Heap_Initialize+0x54> 400075dc: 82 10 20 10 mov 0x10, %g1 400075e0: 82 06 e0 10 add %i3, 0x10, %g1 400075e4: 82 20 40 12 sub %g1, %l2, %g1 400075e8: c2 26 20 14 st %g1, [ %i0 + 0x14 ] /* Calculate 'the_size' -- size of the first block so that there is enough space at the end for the permanent last block. It is equal to 'size' minus total overhead aligned down to the nearest multiple of 'page_size'. */ overhead = HEAP_OVERHEAD + (aligned_start - start); 400075ec: 82 24 40 19 sub %l1, %i1, %g1 400075f0: 82 00 60 08 add %g1, 8, %g1 if ( size < overhead ) 400075f4: 80 a0 40 1a cmp %g1, %i2 400075f8: 18 80 00 2a bgu 400076a0 <_Heap_Initialize+0x10c> 400075fc: a0 26 80 01 sub %i2, %g1, %l0 uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 40007600: 92 10 00 1b mov %i3, %o1 40007604: 40 00 37 a2 call 4001548c <.urem> 40007608: 90 10 00 10 mov %l0, %o0 return 0; /* Too small area for the heap */ the_size = size - overhead; _Heap_Align_down ( &the_size, page_size ); if ( the_size == 0 ) 4000760c: a0 a4 00 08 subcc %l0, %o0, %l0 40007610: 02 80 00 24 be 400076a0 <_Heap_Initialize+0x10c> 40007614: 09 10 00 66 sethi %hi(0x40019800), %g4 return 0; /* Too small area for the heap */ the_heap->page_size = page_size; 40007618: f6 26 20 10 st %i3, [ %i0 + 0x10 ] the_heap->begin = starting_address; the_heap->end = starting_address + size; the_block = (Heap_Block *) aligned_start; the_block->prev_size = page_size; 4000761c: f6 24 40 00 st %i3, [ %l1 ] the_block->size = the_size | HEAP_PREV_USED; 40007620: 82 14 20 01 or %l0, 1, %g1 stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40007624: c6 01 20 e8 ld [ %g4 + 0xe8 ], %g3 the_heap->end = starting_address + size; the_block = (Heap_Block *) aligned_start; the_block->prev_size = page_size; the_block->size = the_size | HEAP_PREV_USED; 40007628: c2 24 60 04 st %g1, [ %l1 + 4 ] _HAssert(_Heap_Is_aligned(the_heap->min_block_size, page_size)); _HAssert(_Heap_Is_aligned_ptr(_Heap_User_area(the_block), page_size)); the_block = _Heap_Block_at( the_block, the_size ); the_heap->final = the_block; /* Permanent final block of the heap */ the_block->prev_size = the_size; /* Previous block is free */ 4000762c: e0 24 40 10 st %l0, [ %l1 + %l0 ] RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 40007630: 9a 04 40 10 add %l1, %l0, %o5 the_block->size = page_size; 40007634: f6 23 60 04 st %i3, [ %o5 + 4 ] the_block = (Heap_Block *) aligned_start; the_block->prev_size = page_size; the_block->size = the_size | HEAP_PREV_USED; the_block->next = _Heap_Tail( the_heap ); 40007638: f0 24 60 08 st %i0, [ %l1 + 8 ] the_block->prev = _Heap_Head( the_heap ); 4000763c: f0 24 60 0c st %i0, [ %l1 + 0xc ] stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40007640: c6 26 20 28 st %g3, [ %i0 + 0x28 ] the_block = _Heap_Block_at( the_block, the_size ); the_heap->final = the_block; /* Permanent final block of the heap */ the_block->prev_size = the_size; /* Previous block is free */ the_block->size = page_size; stats->size = size; 40007644: f4 26 20 2c st %i2, [ %i0 + 0x2c ] stats->free_size = the_size; 40007648: e0 26 20 30 st %l0, [ %i0 + 0x30 ] stats->min_free_size = the_size; 4000764c: e0 26 20 34 st %l0, [ %i0 + 0x34 ] stats->free_blocks = 1; stats->max_free_blocks = 1; stats->used_blocks = 0; 40007650: c0 26 20 40 clr [ %i0 + 0x40 ] stats->max_search = 0; 40007654: c0 26 20 44 clr [ %i0 + 0x44 ] stats->allocs = 0; 40007658: c0 26 20 48 clr [ %i0 + 0x48 ] stats->searches = 0; 4000765c: c0 26 20 4c clr [ %i0 + 0x4c ] stats->frees = 0; 40007660: c0 26 20 50 clr [ %i0 + 0x50 ] stats->resizes = 0; 40007664: c0 26 20 54 clr [ %i0 + 0x54 ] the_block->size = page_size; stats->size = size; stats->free_size = the_size; stats->min_free_size = the_size; stats->free_blocks = 1; 40007668: 84 10 20 01 mov 1, %g2 stats->max_free_blocks = 1; 4000766c: c4 26 20 3c st %g2, [ %i0 + 0x3c ] the_block->size = page_size; stats->size = size; stats->free_size = the_size; stats->min_free_size = the_size; stats->free_blocks = 1; 40007670: c4 26 20 38 st %g2, [ %i0 + 0x38 ] if ( the_size == 0 ) return 0; /* Too small area for the heap */ the_heap->page_size = page_size; the_heap->begin = starting_address; the_heap->end = starting_address + size; 40007674: 82 06 40 1a add %i1, %i2, %g1 stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40007678: 86 00 e0 01 inc %g3 if ( the_size == 0 ) return 0; /* Too small area for the heap */ the_heap->page_size = page_size; the_heap->begin = starting_address; the_heap->end = starting_address + size; 4000767c: c2 26 20 1c st %g1, [ %i0 + 0x1c ] _Heap_Align_down ( &the_size, page_size ); if ( the_size == 0 ) return 0; /* Too small area for the heap */ the_heap->page_size = page_size; the_heap->begin = starting_address; 40007680: f2 26 20 18 st %i1, [ %i0 + 0x18 ] the_block->prev_size = page_size; the_block->size = the_size | HEAP_PREV_USED; the_block->next = _Heap_Tail( the_heap ); the_block->prev = _Heap_Head( the_heap ); _Heap_Head(the_heap)->next = the_block; 40007684: e2 26 20 08 st %l1, [ %i0 + 8 ] _Heap_Tail(the_heap)->prev = the_block; 40007688: e2 26 20 0c st %l1, [ %i0 + 0xc ] the_heap->start = the_block; 4000768c: e2 26 20 20 st %l1, [ %i0 + 0x20 ] _HAssert(_Heap_Is_aligned(the_heap->page_size, CPU_ALIGNMENT)); _HAssert(_Heap_Is_aligned(the_heap->min_block_size, page_size)); _HAssert(_Heap_Is_aligned_ptr(_Heap_User_area(the_block), page_size)); the_block = _Heap_Block_at( the_block, the_size ); the_heap->final = the_block; /* Permanent final block of the heap */ 40007690: da 26 20 24 st %o5, [ %i0 + 0x24 ] stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40007694: c6 21 20 e8 st %g3, [ %g4 + 0xe8 ] return ( the_size - HEAP_BLOCK_USED_OVERHEAD ); 40007698: 81 c7 e0 08 ret 4000769c: 91 ec 3f fc restore %l0, -4, %o0 } 400076a0: 81 c7 e0 08 ret 400076a4: 91 e8 20 00 restore %g0, 0, %o0 ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; *value = r ? v - r + a : v; 400076a8: 02 80 00 04 be 400076b8 <_Heap_Initialize+0x124> 400076ac: 90 10 20 10 mov 0x10, %o0 400076b0: 82 06 e0 08 add %i3, 8, %g1 400076b4: b6 20 40 02 sub %g1, %g2, %i3 400076b8: 40 00 37 75 call 4001548c <.urem> 400076bc: 92 10 00 1b mov %i3, %o1 400076c0: 10 bf ff bb b 400075ac <_Heap_Initialize+0x18> 400076c4: a4 10 00 08 mov %o0, %l2 4000cd44 <_Heap_Resize_block>: void *starting_address, size_t size, uint32_t *old_mem_size, uint32_t *avail_mem_size ) { 4000cd44: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t old_block_size; uint32_t old_user_size; uint32_t prev_used_flag; Heap_Statistics *const stats = &the_heap->stats; uint32_t const min_block_size = the_heap->min_block_size; uint32_t const page_size = the_heap->page_size; 4000cd48: e6 06 20 10 ld [ %i0 + 0x10 ], %l3 <== NOT EXECUTED Heap_Block *next_next_block; uint32_t old_block_size; uint32_t old_user_size; uint32_t prev_used_flag; Heap_Statistics *const stats = &the_heap->stats; uint32_t const min_block_size = the_heap->min_block_size; 4000cd4c: ee 06 20 14 ld [ %i0 + 0x14 ], %l7 <== NOT EXECUTED uint32_t const page_size = the_heap->page_size; *old_mem_size = 0; 4000cd50: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED *avail_mem_size = 0; 4000cd54: c0 27 00 00 clr [ %i4 ] <== NOT EXECUTED /* The address passed could be greater than the block address plus * HEAP_BLOCK_USER_OFFSET as _Heap_Allocate_aligned() may produce such user * pointers. To get rid of this offset we need to align the address down * to the nearest 'page_size' boundary. */ _Heap_Align_down_uptr ( &addr, the_heap->page_size ); *the_block = (Heap_Block *)(addr - HEAP_BLOCK_USER_OFFSET); 4000cd58: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000cd5c: 40 00 21 cc call 4001548c <.urem> <== NOT EXECUTED 4000cd60: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Heap_Is_block_in ( Heap_Control *the_heap, Heap_Block *the_block ) { return _Addresses_Is_in_range( the_block, the_heap->start, the_heap->final ); 4000cd64: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 <== NOT EXECUTED /* The address passed could be greater than the block address plus * HEAP_BLOCK_USER_OFFSET as _Heap_Allocate_aligned() may produce such user * pointers. To get rid of this offset we need to align the address down * to the nearest 'page_size' boundary. */ _Heap_Align_down_uptr ( &addr, the_heap->page_size ); *the_block = (Heap_Block *)(addr - HEAP_BLOCK_USER_OFFSET); 4000cd68: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 4000cd6c: a4 02 3f f8 add %o0, -8, %l2 <== NOT EXECUTED _Heap_Start_of_block(the_heap, starting_address, &the_block); _HAssert(_Heap_Is_block_in(the_heap, the_block)); if (!_Heap_Is_block_in(the_heap, the_block)) 4000cd70: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000cd74: 1a 80 00 05 bcc 4000cd88 <_Heap_Resize_block+0x44> <== NOT EXECUTED 4000cd78: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 <== NOT EXECUTED } } } ++stats->resizes; return HEAP_RESIZE_SUCCESSFUL; 4000cd7c: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED } 4000cd80: 81 c7 e0 08 ret <== NOT EXECUTED 4000cd84: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED *old_mem_size = 0; *avail_mem_size = 0; _Heap_Start_of_block(the_heap, starting_address, &the_block); _HAssert(_Heap_Is_block_in(the_heap, the_block)); if (!_Heap_Is_block_in(the_heap, the_block)) 4000cd88: 80 a4 80 02 cmp %l2, %g2 <== NOT EXECUTED 4000cd8c: 38 bf ff fd bgu,a 4000cd80 <_Heap_Resize_block+0x3c> <== NOT EXECUTED 4000cd90: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED return HEAP_RESIZE_FATAL_ERROR; prev_used_flag = the_block->size & HEAP_PREV_USED; 4000cd94: c6 04 a0 04 ld [ %l2 + 4 ], %g3 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE uint32_t _Heap_Block_size ( Heap_Block *the_block ) { return (the_block->size & ~HEAP_PREV_USED); 4000cd98: a8 08 ff fe and %g3, -2, %l4 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000cd9c: a2 04 80 14 add %l2, %l4, %l1 <== NOT EXECUTED old_block_size = _Heap_Block_size(the_block); next_block = _Heap_Block_at(the_block, old_block_size); _HAssert(_Heap_Is_block_in(the_heap, next_block)); _HAssert(_Heap_Is_prev_used(next_block)); if ( !_Heap_Is_block_in(the_heap, next_block) || 4000cda0: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 4000cda4: 2a bf ff f7 bcs,a 4000cd80 <_Heap_Resize_block+0x3c> <== NOT EXECUTED 4000cda8: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 4000cdac: 80 a4 40 02 cmp %l1, %g2 <== NOT EXECUTED 4000cdb0: 38 bf ff f4 bgu,a 4000cd80 <_Heap_Resize_block+0x3c> <== NOT EXECUTED 4000cdb4: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _Heap_Is_prev_used ( Heap_Block *the_block ) { return (the_block->size & HEAP_PREV_USED); 4000cdb8: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED 4000cdbc: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000cdc0: 02 bf ff ef be 4000cd7c <_Heap_Resize_block+0x38> <== NOT EXECUTED 4000cdc4: aa 08 7f fe and %g1, -2, %l5 <== NOT EXECUTED !_Heap_Is_prev_used(next_block)) return HEAP_RESIZE_FATAL_ERROR; next_block_size = _Heap_Block_size(next_block); next_next_block = _Heap_Block_at(next_block, next_block_size); next_is_used = (next_block == the_heap->final) || 4000cdc8: 80 a0 80 11 cmp %g2, %l1 <== NOT EXECUTED 4000cdcc: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED 4000cdd0: 02 80 00 04 be 4000cde0 <_Heap_Resize_block+0x9c> <== NOT EXECUTED 4000cdd4: ba 04 40 15 add %l1, %l5, %i5 <== NOT EXECUTED 4000cdd8: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 4000cddc: ac 08 60 01 and %g1, 1, %l6 <== NOT EXECUTED _Heap_Is_prev_used(next_next_block); /* See _Heap_Size_of_user_area() source for explanations */ old_user_size = _Addresses_Subtract(next_block, starting_address) 4000cde0: 82 24 40 19 sub %l1, %i1, %g1 <== NOT EXECUTED 4000cde4: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED + HEAP_BLOCK_HEADER_OFFSET; *old_mem_size = old_user_size; 4000cde8: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED if (size > old_user_size) { 4000cdec: 80 a0 40 1a cmp %g1, %i2 <== NOT EXECUTED 4000cdf0: 1a 80 00 16 bcc 4000ce48 <_Heap_Resize_block+0x104> <== NOT EXECUTED 4000cdf4: b6 08 e0 01 and %g3, 1, %i3 <== NOT EXECUTED /* Need to extend the block: allocate part of the next block and then merge 'the_block' and allocated block together. */ if (next_is_used) /* Next block is in use, -- no way to extend */ 4000cdf8: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 4000cdfc: 12 80 00 10 bne 4000ce3c <_Heap_Resize_block+0xf8> <== NOT EXECUTED 4000ce00: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED return HEAP_RESIZE_UNSATISFIED; else { uint32_t add_block_size = size - old_user_size; 4000ce04: a0 26 80 01 sub %i2, %g1, %l0 <== NOT EXECUTED uint32_t alignment ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; 4000ce08: 40 00 21 a1 call 4001548c <.urem> <== NOT EXECUTED 4000ce0c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *value = r ? v - r + a : v; 4000ce10: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000ce14: 02 80 00 05 be 4000ce28 <_Heap_Resize_block+0xe4> <== NOT EXECUTED 4000ce18: 80 a4 00 17 cmp %l0, %l7 <== NOT EXECUTED 4000ce1c: 82 04 00 13 add %l0, %l3, %g1 <== NOT EXECUTED 4000ce20: a0 20 40 08 sub %g1, %o0, %l0 <== NOT EXECUTED 4000ce24: 80 a4 00 17 cmp %l0, %l7 <== NOT EXECUTED 4000ce28: 0a 80 00 1d bcs 4000ce9c <_Heap_Resize_block+0x158> <== NOT EXECUTED 4000ce2c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Heap_Align_up(&add_block_size, page_size); if (add_block_size < min_block_size) add_block_size = min_block_size; if (add_block_size > next_block_size) 4000ce30: 80 a5 40 08 cmp %l5, %o0 <== NOT EXECUTED 4000ce34: 1a 80 00 1f bcc 4000ceb0 <_Heap_Resize_block+0x16c> <== NOT EXECUTED 4000ce38: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED } } } ++stats->resizes; return HEAP_RESIZE_SUCCESSFUL; 4000ce3c: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED } 4000ce40: 81 c7 e0 08 ret <== NOT EXECUTED 4000ce44: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED --stats->used_blocks; } } else { /* Calculate how much memory we could free */ uint32_t free_block_size = old_user_size - size; 4000ce48: a0 20 40 1a sub %g1, %i2, %l0 <== NOT EXECUTED uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 4000ce4c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4000ce50: 40 00 21 8f call 4001548c <.urem> <== NOT EXECUTED 4000ce54: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Heap_Align_down(&free_block_size, page_size); if (free_block_size > 0) { 4000ce58: a0 a4 00 08 subcc %l0, %o0, %l0 <== NOT EXECUTED 4000ce5c: 22 80 00 0b be,a 4000ce88 <_Heap_Resize_block+0x144> <== NOT EXECUTED 4000ce60: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED /* To free some memory the block should be shortened so that it can can hold 'size' user bytes and still remain not shorter than 'min_block_size'. */ uint32_t new_block_size = old_block_size - free_block_size; 4000ce64: 86 25 00 10 sub %l4, %l0, %g3 <== NOT EXECUTED if (new_block_size < min_block_size) { 4000ce68: 80 a5 c0 03 cmp %l7, %g3 <== NOT EXECUTED 4000ce6c: 08 80 00 1c bleu 4000cedc <_Heap_Resize_block+0x198> <== NOT EXECUTED 4000ce70: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED uint32_t delta = min_block_size - new_block_size; 4000ce74: 82 25 c0 03 sub %l7, %g3, %g1 <== NOT EXECUTED _HAssert(free_block_size >= delta); free_block_size -= delta; if (free_block_size == 0) { 4000ce78: a0 a4 00 01 subcc %l0, %g1, %l0 <== NOT EXECUTED 4000ce7c: 32 80 00 17 bne,a 4000ced8 <_Heap_Resize_block+0x194> <== NOT EXECUTED 4000ce80: 86 00 c0 01 add %g3, %g1, %g3 <== NOT EXECUTED *avail_mem_size = free_block_size - HEAP_BLOCK_USED_OVERHEAD; } } } ++stats->resizes; 4000ce84: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED 4000ce88: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000ce8c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000ce90: c2 26 20 54 st %g1, [ %i0 + 0x54 ] <== NOT EXECUTED return HEAP_RESIZE_SUCCESSFUL; } 4000ce94: 81 c7 e0 08 ret <== NOT EXECUTED 4000ce98: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; *value = r ? v - r + a : v; 4000ce9c: 90 10 00 17 mov %l7, %o0 <== NOT EXECUTED else { uint32_t add_block_size = size - old_user_size; _Heap_Align_up(&add_block_size, page_size); if (add_block_size < min_block_size) add_block_size = min_block_size; if (add_block_size > next_block_size) 4000cea0: 80 a5 40 08 cmp %l5, %o0 <== NOT EXECUTED 4000cea4: 0a bf ff e7 bcs 4000ce40 <_Heap_Resize_block+0xfc> <== NOT EXECUTED 4000cea8: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED return HEAP_RESIZE_UNSATISFIED; /* Next block is too small or none. */ add_block_size = 4000ceac: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 4000ceb0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4000ceb4: 7f ff e9 78 call 40007494 <_Heap_Block_allocate> <== NOT EXECUTED 4000ceb8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Heap_Block_allocate(the_heap, next_block, add_block_size); /* Merge two subsequent blocks */ the_block->size = (old_block_size + add_block_size) | prev_used_flag; 4000cebc: 90 02 00 14 add %o0, %l4, %o0 <== NOT EXECUTED 4000cec0: 90 12 00 1b or %o0, %i3, %o0 <== NOT EXECUTED 4000cec4: d0 24 a0 04 st %o0, [ %l2 + 4 ] <== NOT EXECUTED --stats->used_blocks; 4000cec8: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED 4000cecc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000ced0: 10 bf ff ed b 4000ce84 <_Heap_Resize_block+0x140> <== NOT EXECUTED 4000ced4: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED _HAssert(new_block_size >= min_block_size); _HAssert(new_block_size + free_block_size == old_block_size); _HAssert(_Heap_Is_aligned(new_block_size, page_size)); _HAssert(_Heap_Is_aligned(free_block_size, page_size)); if (!next_is_used) { 4000ced8: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 4000cedc: 12 80 00 15 bne 4000cf30 <_Heap_Resize_block+0x1ec> <== NOT EXECUTED 4000cee0: 80 a4 00 17 cmp %l0, %l7 <== NOT EXECUTED Heap_Block *const new_next_block = _Heap_Block_at(the_block, new_block_size); uint32_t const new_next_block_size = next_block_size + free_block_size; _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; 4000cee4: 82 10 c0 1b or %g3, %i3, %g1 <== NOT EXECUTED 4000cee8: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000ceec: 86 04 80 03 add %l2, %g3, %g3 <== NOT EXECUTED if (!next_is_used) { /* Extend the next block to the low addresses by 'free_block_size' */ Heap_Block *const new_next_block = _Heap_Block_at(the_block, new_block_size); uint32_t const new_next_block_size = next_block_size + free_block_size; 4000cef0: 88 04 00 15 add %l0, %l5, %g4 <== NOT EXECUTED Heap_Block *new_block ) { Heap_Block *block = old_block; Heap_Block *next = block->next; Heap_Block *prev = block->prev; 4000cef4: d8 04 60 0c ld [ %l1 + 0xc ], %o4 <== NOT EXECUTED _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; new_next_block->size = new_next_block_size | HEAP_PREV_USED; next_next_block->prev_size = new_next_block_size; 4000cef8: c8 27 40 00 st %g4, [ %i5 ] <== NOT EXECUTED Heap_Block *old_block, Heap_Block *new_block ) { Heap_Block *block = old_block; Heap_Block *next = block->next; 4000cefc: da 04 60 08 ld [ %l1 + 8 ], %o5 <== NOT EXECUTED _Heap_Block_at(the_block, new_block_size); uint32_t const new_next_block_size = next_block_size + free_block_size; _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; new_next_block->size = new_next_block_size | HEAP_PREV_USED; 4000cf00: 84 11 20 01 or %g4, 1, %g2 <== NOT EXECUTED 4000cf04: c4 20 e0 04 st %g2, [ %g3 + 4 ] <== NOT EXECUTED next_next_block->prev_size = new_next_block_size; _Heap_Block_replace(next_block, new_next_block); the_heap->stats.free_size += free_block_size; 4000cf08: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Heap_Block *prev = block->prev; block = new_block; block->next = next; 4000cf0c: da 20 e0 08 st %o5, [ %g3 + 8 ] <== NOT EXECUTED 4000cf10: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED block->prev = prev; 4000cf14: d8 20 e0 0c st %o4, [ %g3 + 0xc ] <== NOT EXECUTED 4000cf18: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED *avail_mem_size = new_next_block_size - HEAP_BLOCK_USED_OVERHEAD; 4000cf1c: 88 01 3f fc add %g4, -4, %g4 <== NOT EXECUTED next->prev = prev->next = block; 4000cf20: c6 23 60 0c st %g3, [ %o5 + 0xc ] <== NOT EXECUTED 4000cf24: c6 23 20 08 st %g3, [ %o4 + 8 ] <== NOT EXECUTED 4000cf28: 10 bf ff d7 b 4000ce84 <_Heap_Resize_block+0x140> <== NOT EXECUTED 4000cf2c: c8 27 00 00 st %g4, [ %i4 ] <== NOT EXECUTED } else if (free_block_size >= min_block_size) { 4000cf30: 2a bf ff d6 bcs,a 4000ce88 <_Heap_Resize_block+0x144> <== NOT EXECUTED 4000cf34: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED /* Split the block into 2 used parts, then free the second one. */ the_block->size = new_block_size | prev_used_flag; 4000cf38: 82 10 c0 1b or %g3, %i3, %g1 <== NOT EXECUTED next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; 4000cf3c: 84 14 20 01 or %l0, 1, %g2 <== NOT EXECUTED the_heap->stats.free_size += free_block_size; *avail_mem_size = new_next_block_size - HEAP_BLOCK_USED_OVERHEAD; } else if (free_block_size >= min_block_size) { /* Split the block into 2 used parts, then free the second one. */ the_block->size = new_block_size | prev_used_flag; 4000cf40: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000cf44: 92 04 80 03 add %l2, %g3, %o1 <== NOT EXECUTED next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; 4000cf48: c4 22 60 04 st %g2, [ %o1 + 4 ] <== NOT EXECUTED ++stats->used_blocks; /* We have created used block */ 4000cf4c: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000cf50: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 <== NOT EXECUTED } else if (free_block_size >= min_block_size) { /* Split the block into 2 used parts, then free the second one. */ the_block->size = new_block_size | prev_used_flag; next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; ++stats->used_blocks; /* We have created used block */ 4000cf54: 82 00 60 01 inc %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000cf58: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED } else if (free_block_size >= min_block_size) { /* Split the block into 2 used parts, then free the second one. */ the_block->size = new_block_size | prev_used_flag; next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; ++stats->used_blocks; /* We have created used block */ 4000cf5c: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000cf60: c4 26 20 50 st %g2, [ %i0 + 0x50 ] <== NOT EXECUTED _Heap_Free(the_heap, _Heap_User_area(next_block)); 4000cf64: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 4000cf68: 7f ff e8 d8 call 400072c8 <_Heap_Free> <== NOT EXECUTED 4000cf6c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED *avail_mem_size = free_block_size - HEAP_BLOCK_USED_OVERHEAD; 4000cf70: 82 04 3f fc add %l0, -4, %g1 <== NOT EXECUTED 4000cf74: 10 bf ff c4 b 4000ce84 <_Heap_Resize_block+0x140> <== NOT EXECUTED 4000cf78: c2 27 00 00 st %g1, [ %i4 ] <== NOT EXECUTED 4000cf7c <_Heap_Size_of_user_area>: boolean _Heap_Size_of_user_area( Heap_Control *the_heap, void *starting_address, size_t *size ) { 4000cf7c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Heap_Block *the_block; Heap_Block *next_block; uint32_t the_size; if ( !_Addresses_Is_in_range( 4000cf80: e0 06 20 20 ld [ %i0 + 0x20 ], %l0 <== NOT EXECUTED 4000cf84: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 4000cf88: 0a 80 00 05 bcs 4000cf9c <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000cf8c: e2 06 20 24 ld [ %i0 + 0x24 ], %l1 <== NOT EXECUTED 4000cf90: 80 a6 40 11 cmp %i1, %l1 <== NOT EXECUTED 4000cf94: 28 80 00 04 bleu,a 4000cfa4 <_Heap_Size_of_user_area+0x28> <== NOT EXECUTED 4000cf98: d2 06 20 10 ld [ %i0 + 0x10 ], %o1 <== NOT EXECUTED *size = _Addresses_Subtract ( next_block, starting_address ) + HEAP_BLOCK_HEADER_OFFSET; return( TRUE ); } 4000cf9c: 81 c7 e0 08 ret <== NOT EXECUTED 4000cfa0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* The address passed could be greater than the block address plus * HEAP_BLOCK_USER_OFFSET as _Heap_Allocate_aligned() may produce such user * pointers. To get rid of this offset we need to align the address down * to the nearest 'page_size' boundary. */ _Heap_Align_down_uptr ( &addr, the_heap->page_size ); *the_block = (Heap_Block *)(addr - HEAP_BLOCK_USER_OFFSET); 4000cfa4: 40 00 21 3a call 4001548c <.urem> <== NOT EXECUTED 4000cfa8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000cfac: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 4000cfb0: 90 02 3f f8 add %o0, -8, %o0 <== NOT EXECUTED return( FALSE ); _Heap_Start_of_block( the_heap, starting_address, &the_block ); _HAssert(_Heap_Is_block_in( the_heap, the_block )); if ( !_Heap_Is_block_in( the_heap, the_block ) ) 4000cfb4: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 4000cfb8: 0a bf ff f9 bcs 4000cf9c <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000cfbc: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 4000cfc0: 18 bf ff f7 bgu 4000cf9c <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000cfc4: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000cfc8: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4000cfcc: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 4000cfd0: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED the_size = _Heap_Block_size( the_block ); next_block = _Heap_Block_at( the_block, the_size ); _HAssert(_Heap_Is_block_in( the_heap, next_block )); _HAssert(_Heap_Is_prev_used( next_block )); if ( 4000cfd4: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 4000cfd8: 0a bf ff f1 bcs 4000cf9c <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000cfdc: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 4000cfe0: 18 bf ff ef bgu 4000cf9c <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000cfe4: 01 00 00 00 nop <== NOT EXECUTED 4000cfe8: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4000cfec: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000cff0: 02 bf ff eb be 4000cf9c <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000cff4: 82 22 00 19 sub %o0, %i1, %g1 <== NOT EXECUTED and then add correction equal to the offset of the 'size' field of the 'Heap_Block' structure. The correction is due to the fact that 'prev_size' field of the next block is actually used as user accessible area of 'the_block'. */ *size = _Addresses_Subtract ( next_block, starting_address ) 4000cff8: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED 4000cffc: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 4000d000: 81 c7 e0 08 ret <== NOT EXECUTED 4000d004: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 40006a60 <_IO_Manager_initialization>: void _IO_Manager_initialization( rtems_driver_address_table *driver_table, uint32_t drivers_in_table, uint32_t number_of_drivers ) { 40006a60: 9d e3 bf 98 save %sp, -104, %sp /* * If the user claims there are less drivers than are actually in * the table, then let's just go with the table's count. */ if ( number_of_drivers <= drivers_in_table ) 40006a64: 80 a6 80 19 cmp %i2, %i1 40006a68: 08 80 00 27 bleu 40006b04 <_IO_Manager_initialization+0xa4> 40006a6c: 03 10 00 67 sethi %hi(0x40019c00), %g1 /* * The application requested extra slots in the driver table, so we * have to allocate a new driver table and copy theirs to it. */ _IO_Driver_address_table = (rtems_driver_address_table *) 40006a70: 83 2e a0 03 sll %i2, 3, %g1 <== NOT EXECUTED 40006a74: a1 2e a0 05 sll %i2, 5, %l0 <== NOT EXECUTED 40006a78: a0 24 00 01 sub %l0, %g1, %l0 <== NOT EXECUTED 40006a7c: 40 00 0f ab call 4000a928 <_Workspace_Allocate_or_fatal_error> <== NOT EXECUTED 40006a80: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Workspace_Allocate_or_fatal_error( sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); _IO_Number_of_drivers = number_of_drivers; 40006a84: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED memset( 40006a88: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED _IO_Driver_address_table = (rtems_driver_address_table *) _Workspace_Allocate_or_fatal_error( sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); _IO_Number_of_drivers = number_of_drivers; 40006a8c: f4 20 62 74 st %i2, [ %g1 + 0x274 ] <== NOT EXECUTED /* * The application requested extra slots in the driver table, so we * have to allocate a new driver table and copy theirs to it. */ _IO_Driver_address_table = (rtems_driver_address_table *) 40006a90: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED _Workspace_Allocate_or_fatal_error( sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); _IO_Number_of_drivers = number_of_drivers; memset( 40006a94: 92 10 20 00 clr %o1 <== NOT EXECUTED 40006a98: 40 00 1f aa call 4000e940 <== NOT EXECUTED 40006a9c: d0 24 22 78 st %o0, [ %l0 + 0x278 ] <== NOT EXECUTED _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40006aa0: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40006aa4: 02 80 00 16 be 40006afc <_IO_Manager_initialization+0x9c> <== NOT EXECUTED 40006aa8: d4 04 22 78 ld [ %l0 + 0x278 ], %o2 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40006aac: 96 10 20 00 clr %o3 <== NOT EXECUTED 40006ab0: 98 10 20 00 clr %o4 <== NOT EXECUTED 40006ab4: c2 03 00 18 ld [ %o4 + %i0 ], %g1 <== NOT EXECUTED 40006ab8: 9a 03 00 18 add %o4, %i0, %o5 <== NOT EXECUTED 40006abc: c2 23 00 0a st %g1, [ %o4 + %o2 ] <== NOT EXECUTED 40006ac0: c4 03 60 04 ld [ %o5 + 4 ], %g2 <== NOT EXECUTED 40006ac4: 86 03 00 0a add %o4, %o2, %g3 <== NOT EXECUTED 40006ac8: c4 20 e0 04 st %g2, [ %g3 + 4 ] <== NOT EXECUTED 40006acc: c2 03 60 08 ld [ %o5 + 8 ], %g1 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40006ad0: 96 02 e0 01 inc %o3 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40006ad4: c2 20 e0 08 st %g1, [ %g3 + 8 ] <== NOT EXECUTED 40006ad8: c4 03 60 0c ld [ %o5 + 0xc ], %g2 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40006adc: 98 03 20 18 add %o4, 0x18, %o4 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40006ae0: c4 20 e0 0c st %g2, [ %g3 + 0xc ] <== NOT EXECUTED 40006ae4: c8 03 60 10 ld [ %o5 + 0x10 ], %g4 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40006ae8: 80 a2 c0 19 cmp %o3, %i1 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40006aec: c8 20 e0 10 st %g4, [ %g3 + 0x10 ] <== NOT EXECUTED 40006af0: c2 03 60 14 ld [ %o5 + 0x14 ], %g1 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40006af4: 12 bf ff f0 bne 40006ab4 <_IO_Manager_initialization+0x54> <== NOT EXECUTED 40006af8: c2 20 e0 14 st %g1, [ %g3 + 0x14 ] <== NOT EXECUTED 40006afc: 81 c7 e0 08 ret <== NOT EXECUTED 40006b00: 81 e8 00 00 restore <== NOT EXECUTED * table, then we do not have to copy the driver table. They can't * register any dynamically. */ if ( number_of_drivers == drivers_in_table ) { _IO_Driver_address_table = driver_table; _IO_Number_of_drivers = number_of_drivers; 40006b04: 05 10 00 67 sethi %hi(0x40019c00), %g2 * If the maximum number of driver is the same as the number in the * table, then we do not have to copy the driver table. They can't * register any dynamically. */ if ( number_of_drivers == drivers_in_table ) { _IO_Driver_address_table = driver_table; 40006b08: f0 20 62 78 st %i0, [ %g1 + 0x278 ] _IO_Number_of_drivers = number_of_drivers; 40006b0c: f2 20 a2 74 st %i1, [ %g2 + 0x274 ] 40006b10: 81 c7 e0 08 ret 40006b14: 81 e8 00 00 restore 40007708 <_ISR_Handler_initialization>: * * Output parameters: NONE */ void _ISR_Handler_initialization( void ) { 40007708: 9d e3 bf 98 save %sp, -104, %sp _ISR_Signals_to_thread_executing = FALSE; 4000770c: 03 10 00 67 sethi %hi(0x40019c00), %g1 _ISR_Nest_level = 0; 40007710: 05 10 00 66 sethi %hi(0x40019800), %g2 * Output parameters: NONE */ void _ISR_Handler_initialization( void ) { _ISR_Signals_to_thread_executing = FALSE; 40007714: c0 20 60 98 clr [ %g1 + 0x98 ] _ISR_Nest_level = 0; 40007718: c0 20 a3 d4 clr [ %g2 + 0x3d4 ] _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 4000771c: 40 00 0c 83 call 4000a928 <_Workspace_Allocate_or_fatal_error> 40007720: 90 10 24 00 mov 0x400, %o0 _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 40007724: 03 10 00 66 sethi %hi(0x40019800), %g1 40007728: a0 10 63 24 or %g1, 0x324, %l0 ! 40019b24 <_CPU_Table> 4000772c: c4 04 20 18 ld [ %l0 + 0x18 ], %g2 { _ISR_Signals_to_thread_executing = FALSE; _ISR_Nest_level = 0; _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 40007730: 03 10 00 66 sethi %hi(0x40019800), %g1 _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 40007734: 80 a0 af ff cmp %g2, 0xfff 40007738: 18 80 00 07 bgu 40007754 <_ISR_Handler_initialization+0x4c> 4000773c: d0 20 63 b4 st %o0, [ %g1 + 0x3b4 ] _Internal_error_Occurred( 40007740: 90 10 20 00 clr %o0 <== NOT EXECUTED 40007744: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40007748: 7f ff ff e0 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000774c: 94 10 20 05 mov 5, %o2 <== NOT EXECUTED 40007750: c4 04 20 18 ld [ %l0 + 0x18 ], %g2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 40007754: 40 00 0c 75 call 4000a928 <_Workspace_Allocate_or_fatal_error> 40007758: 90 10 00 02 mov %g2, %o0 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 4000775c: c6 04 20 18 ld [ %l0 + 0x18 ], %g3 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 40007760: 03 10 00 66 sethi %hi(0x40019800), %g1 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 40007764: 86 02 00 03 add %o0, %g3, %g3 40007768: 05 10 00 66 sethi %hi(0x40019800), %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 4000776c: d0 20 63 20 st %o0, [ %g1 + 0x320 ] _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 40007770: c6 20 a2 6c st %g3, [ %g2 + 0x26c ] #if ( CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE ) _CPU_Install_interrupt_stack(); #endif } 40007774: 81 c7 e0 08 ret 40007778: 81 e8 00 00 restore 4000d018 <_Objects_Compare_name_string>: boolean _Objects_Compare_name_string( void *name_1, void *name_2, uint16_t length ) { 4000d018: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !strncmp( name_1, name_2, length ) ) 4000d01c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000d020: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 4000d024: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000d028: 40 00 09 42 call 4000f530 <== NOT EXECUTED 4000d02c: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED return TRUE; return FALSE; } 4000d030: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000d034: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 4000d038: 81 c7 e0 08 ret <== NOT EXECUTED 4000d03c: 81 e8 00 00 restore <== NOT EXECUTED 400193b8 <_Objects_Copy_name_raw>: const size_t length ) { uint32_t *source_p = (uint32_t *) source; uint32_t *destination_p = (uint32_t *) destination; size_t tmp_length = length / OBJECTS_NAME_ALIGNMENT; 400193b8: 95 32 a0 02 srl %o2, 2, %o2 <== NOT EXECUTED while ( tmp_length-- ) 400193bc: 80 a2 a0 00 cmp %o2, 0 <== NOT EXECUTED 400193c0: 02 80 00 09 be 400193e4 <_Objects_Copy_name_raw+0x2c> <== NOT EXECUTED 400193c4: 86 10 20 00 clr %g3 <== NOT EXECUTED 400193c8: 84 10 20 00 clr %g2 <== NOT EXECUTED *destination_p++ = *source_p++; 400193cc: c2 00 80 08 ld [ %g2 + %o0 ], %g1 <== NOT EXECUTED 400193d0: 86 00 e0 01 inc %g3 <== NOT EXECUTED 400193d4: c2 20 80 09 st %g1, [ %g2 + %o1 ] <== NOT EXECUTED { uint32_t *source_p = (uint32_t *) source; uint32_t *destination_p = (uint32_t *) destination; size_t tmp_length = length / OBJECTS_NAME_ALIGNMENT; while ( tmp_length-- ) 400193d8: 80 a0 c0 0a cmp %g3, %o2 <== NOT EXECUTED 400193dc: 12 bf ff fc bne 400193cc <_Objects_Copy_name_raw+0x14> <== NOT EXECUTED 400193e0: 84 00 a0 04 add %g2, 4, %g2 <== NOT EXECUTED 400193e4: 81 c3 e0 08 retl <== NOT EXECUTED 400193e8: 01 00 00 00 nop 40007830 <_Objects_Extend_information>: */ void _Objects_Extend_information( Objects_Information *information ) { 40007830: 9d e3 bf 88 save %sp, -120, %sp */ RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_index( Objects_Id id ) { return (id >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS; 40007834: c4 06 20 08 ld [ %i0 + 8 ], %g2 minimum_index = _Objects_Get_index( information->minimum_id ); index_base = minimum_index; block = 0; if ( information->maximum < minimum_index ) 40007838: e4 16 20 10 lduh [ %i0 + 0x10 ], %l2 4000783c: 03 00 00 3f sethi %hi(0xfc00), %g1 40007840: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40007844: a2 08 80 01 and %g2, %g1, %l1 40007848: 80 a4 40 12 cmp %l1, %l2 4000784c: 08 80 00 8c bleu 40007a7c <_Objects_Extend_information+0x24c> 40007850: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 40007854: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 minimum_index = _Objects_Get_index( information->minimum_id ); index_base = minimum_index; block = 0; if ( information->maximum < minimum_index ) 40007858: a8 10 00 11 mov %l1, %l4 4000785c: ac 10 20 00 clr %l6 40007860: a6 10 20 01 mov 1, %l3 40007864: 90 10 20 03 mov 3, %o0 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 40007868: 80 a0 60 00 cmp %g1, 0 4000786c: 12 80 00 a4 bne 40007afc <_Objects_Extend_information+0x2cc> 40007870: ba 04 00 12 add %l0, %l2, %i5 if ( !object_blocks ) return; } else { object_blocks = (void**) 40007874: 90 02 00 11 add %o0, %l1, %o0 40007878: 90 02 00 1d add %o0, %i5, %o0 4000787c: 40 00 0c 2b call 4000a928 <_Workspace_Allocate_or_fatal_error> 40007880: 91 2a 20 02 sll %o0, 2, %o0 40007884: ae 10 00 08 mov %o0, %l7 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 40007888: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 4000788c: 83 2c e0 02 sll %l3, 2, %g1 /* * Take the block count down. Saves all the (block_count - 1) * in the copies. */ block_count--; 40007890: 86 04 ff ff add %l3, -1, %g3 if ( information->maximum > minimum_index ) { 40007894: 80 a4 40 02 cmp %l1, %g2 /* * Break the block into the various sections. * */ inactive_per_block = (uint32_t *) _Addresses_Add_offset( 40007898: a6 05 c0 01 add %l7, %g1, %l3 object_blocks, block_count * sizeof(void*) ); name_table = (Objects_Name *) _Addresses_Add_offset( 4000789c: aa 00 40 13 add %g1, %l3, %l5 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 400078a0: 0a 80 00 ac bcs 40007b50 <_Objects_Extend_information+0x320> 400078a4: a4 00 40 15 add %g1, %l5, %l2 else { /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { 400078a8: 80 a4 60 00 cmp %l1, 0 400078ac: 02 80 00 09 be 400078d0 <_Objects_Extend_information+0xa0> 400078b0: a1 28 e0 02 sll %g3, 2, %l0 information->inactive_per_block, block_count * sizeof(uint32_t ) ); memcpy( name_table, information->name_table, block_count * sizeof(Objects_Name *) ); memcpy( local_table, 400078b4: 84 10 20 00 clr %g2 /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { local_table[ index ] = NULL; 400078b8: 83 28 a0 02 sll %g2, 2, %g1 else { /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { 400078bc: 84 00 a0 01 inc %g2 400078c0: 80 a0 80 11 cmp %g2, %l1 400078c4: 12 bf ff fd bne 400078b8 <_Objects_Extend_information+0x88> 400078c8: c0 20 40 12 clr [ %g1 + %l2 ] 400078cc: a1 28 e0 02 sll %g3, 2, %l0 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 400078d0: c0 24 00 17 clr [ %l0 + %l7 ] inactive_per_block[block_count] = 0; 400078d4: c0 24 00 13 clr [ %l0 + %l3 ] name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); 400078d8: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 400078dc: 86 05 00 01 add %l4, %g1, %g3 400078e0: 80 a0 c0 14 cmp %g3, %l4 400078e4: 08 80 00 0a bleu 4000790c <_Objects_Extend_information+0xdc> 400078e8: c0 25 40 10 clr [ %l5 + %l0 ] 400078ec: 83 2d 20 02 sll %l4, 2, %g1 400078f0: 84 04 80 01 add %l2, %g1, %g2 400078f4: 82 10 00 14 mov %l4, %g1 index++ ) { local_table[ index ] = NULL; 400078f8: c0 20 80 00 clr [ %g2 ] inactive_per_block[block_count] = 0; name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); index++ ) { 400078fc: 82 00 60 01 inc %g1 object_blocks[block_count] = NULL; inactive_per_block[block_count] = 0; name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); 40007900: 80 a0 40 03 cmp %g1, %g3 40007904: 12 bf ff fd bne 400078f8 <_Objects_Extend_information+0xc8> 40007908: 84 00 a0 04 add %g2, 4, %g2 index++ ) { local_table[ index ] = NULL; } _ISR_Disable( level ); 4000790c: 7f ff e9 33 call 40001dd8 40007910: 01 00 00 00 nop information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; information->maximum_id = _Objects_Build_id( 40007914: c4 06 00 00 ld [ %i0 ], %g2 40007918: c8 16 20 04 lduh [ %i0 + 4 ], %g4 4000791c: 87 2f 60 10 sll %i5, 0x10, %g3 40007920: 89 29 20 1b sll %g4, 0x1b, %g4 40007924: 87 30 e0 10 srl %g3, 0x10, %g3 local_table[ index ] = NULL; } _ISR_Disable( level ); old_tables = information->object_blocks; 40007928: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; information->maximum_id = _Objects_Build_id( 4000792c: 03 00 00 40 sethi %hi(0x10000), %g1 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; 40007930: e6 26 20 38 st %l3, [ %i0 + 0x38 ] information->name_table = name_table; 40007934: ea 26 20 24 st %l5, [ %i0 + 0x24 ] information->local_table = local_table; 40007938: e4 26 20 20 st %l2, [ %i0 + 0x20 ] information->maximum = maximum; information->maximum_id = _Objects_Build_id( 4000793c: 85 28 a0 18 sll %g2, 0x18, %g2 information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; 40007940: fa 36 20 10 sth %i5, [ %i0 + 0x10 ] information->maximum_id = _Objects_Build_id( 40007944: 84 10 80 01 or %g2, %g1, %g2 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; 40007948: ee 26 20 3c st %l7, [ %i0 + 0x3c ] information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; information->maximum_id = _Objects_Build_id( 4000794c: 84 10 80 04 or %g2, %g4, %g2 40007950: 84 10 80 03 or %g2, %g3, %g2 40007954: c4 26 20 0c st %g2, [ %i0 + 0xc ] information->the_class, _Objects_Local_node, information->maximum ); _ISR_Enable( level ); 40007958: 7f ff e9 24 call 40001de8 4000795c: 01 00 00 00 nop if ( old_tables ) 40007960: 80 a4 20 00 cmp %l0, 0 40007964: 02 80 00 05 be 40007978 <_Objects_Extend_information+0x148> 40007968: 92 10 00 10 mov %l0, %o1 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4000796c: 11 10 00 66 sethi %hi(0x40019800), %o0 40007970: 7f ff fe 56 call 400072c8 <_Heap_Free> 40007974: 90 12 23 5c or %o0, 0x35c, %o0 ! 40019b5c <_Workspace_Area> /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { 40007978: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 4000797c: 80 a0 60 00 cmp %g1, 0 40007980: 02 80 00 6a be 40007b28 <_Objects_Extend_information+0x2f8> 40007984: c2 16 20 44 lduh [ %i0 + 0x44 ], %g1 RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 40007988: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 4000798c: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 information->object_blocks[ block ] = 40007990: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 40007994: 40 00 35 d8 call 400150f4 <.umul> 40007998: 90 00 40 08 add %g1, %o0, %o0 4000799c: 92 10 00 08 mov %o0, %o1 400079a0: 11 10 00 66 sethi %hi(0x40019800), %o0 400079a4: 7f ff fe 17 call 40007200 <_Heap_Allocate> 400079a8: 90 12 23 5c or %o0, 0x35c, %o0 ! 40019b5c <_Workspace_Area> _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 400079ac: e4 06 20 3c ld [ %i0 + 0x3c ], %l2 /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { information->object_blocks[ block ] = 400079b0: a7 2d a0 02 sll %l6, 2, %l3 400079b4: d0 24 c0 10 st %o0, [ %l3 + %l0 ] _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 400079b8: c2 04 c0 12 ld [ %l3 + %l2 ], %g1 400079bc: 80 a0 60 00 cmp %g1, 0 400079c0: 02 80 00 7b be 40007bac <_Objects_Extend_information+0x37c> 400079c4: 01 00 00 00 nop 400079c8: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 400079cc: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 400079d0: 40 00 35 c9 call 400150f4 <.umul> 400079d4: a2 10 00 14 mov %l4, %l1 400079d8: c2 04 80 13 ld [ %l2 + %l3 ], %g1 name_area = (Objects_Name *) _Addresses_Add_offset( information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 400079dc: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 400079e0: a0 02 00 01 add %o0, %g1, %l0 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 400079e4: d4 06 20 18 ld [ %i0 + 0x18 ], %o2 name_area = (Objects_Name *) _Addresses_Add_offset( information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 400079e8: e0 20 80 13 st %l0, [ %g2 + %l3 ] /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 400079ec: d6 06 20 1c ld [ %i0 + 0x1c ], %o3 400079f0: d2 04 80 13 ld [ %l2 + %l3 ], %o1 400079f4: a8 07 bf ec add %fp, -20, %l4 index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 400079f8: 2b 00 00 40 sethi %hi(0x10000), %l5 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 400079fc: 90 10 00 14 mov %l4, %o0 40007a00: 40 00 14 6d call 4000cbb4 <_Chain_Initialize> 40007a04: a4 06 20 28 add %i0, 0x28, %l2 40007a08: 30 80 00 0f b,a 40007a44 <_Objects_Extend_information+0x214> index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 40007a0c: c4 16 20 04 lduh [ %i0 + 4 ], %g2 40007a10: c6 16 20 44 lduh [ %i0 + 0x44 ], %g3 40007a14: 83 28 60 18 sll %g1, 0x18, %g1 40007a18: 85 28 a0 1b sll %g2, 0x1b, %g2 40007a1c: 82 10 40 15 or %g1, %l5, %g1 40007a20: 82 10 40 02 or %g1, %g2, %g1 40007a24: 82 10 40 11 or %g1, %l1, %g1 information->the_class, _Objects_Local_node, index ); the_object->name = (void *) name_area; 40007a28: e0 22 20 0c st %l0, [ %o0 + 0xc ] index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 40007a2c: c2 22 20 08 st %g1, [ %o0 + 8 ] the_object->name = (void *) name_area; name_area = _Addresses_Add_offset( name_area, information->name_length ); _Chain_Append( &information->Inactive, &the_object->Node ); 40007a30: 92 10 00 08 mov %o0, %o1 40007a34: a0 04 00 03 add %l0, %g3, %l0 index++; 40007a38: a2 04 60 01 inc %l1 the_object->name = (void *) name_area; name_area = _Addresses_Add_offset( name_area, information->name_length ); _Chain_Append( &information->Inactive, &the_object->Node ); 40007a3c: 7f ff fc a0 call 40006cbc <_Chain_Append> 40007a40: 90 10 00 12 mov %l2, %o0 * Move from the local chain, initialise, then append to the inactive chain */ index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { 40007a44: 7f ff fc aa call 40006cec <_Chain_Get> 40007a48: 90 10 00 14 mov %l4, %o0 40007a4c: 80 a2 20 00 cmp %o0, 0 40007a50: 32 bf ff ef bne,a 40007a0c <_Objects_Extend_information+0x1dc> 40007a54: c2 06 00 00 ld [ %i0 ], %g1 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 40007a58: c6 06 20 38 ld [ %i0 + 0x38 ], %g3 40007a5c: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 information->inactive += information->allocation_size; 40007a60: c8 16 20 34 lduh [ %i0 + 0x34 ], %g4 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 40007a64: c4 20 c0 13 st %g2, [ %g3 + %l3 ] information->inactive += information->allocation_size; 40007a68: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 40007a6c: 82 00 40 04 add %g1, %g4, %g1 40007a70: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 40007a74: 81 c7 e0 08 ret 40007a78: 81 e8 00 00 restore block = 0; if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; 40007a7c: 90 10 00 12 mov %l2, %o0 40007a80: 40 00 35 d7 call 400151dc <.udiv> 40007a84: 92 10 00 10 mov %l0, %o1 for ( ; block < block_count; block++ ) { 40007a88: 80 a2 20 00 cmp %o0, 0 40007a8c: 02 80 00 46 be 40007ba4 <_Objects_Extend_information+0x374> 40007a90: a8 10 00 11 mov %l1, %l4 if ( information->object_blocks[ block ] == NULL ) 40007a94: c4 06 20 3c ld [ %i0 + 0x3c ], %g2 40007a98: c2 00 80 00 ld [ %g2 ], %g1 40007a9c: 80 a0 60 00 cmp %g1, 0 40007aa0: 12 80 00 08 bne 40007ac0 <_Objects_Extend_information+0x290> 40007aa4: ac 10 20 00 clr %l6 /* * If the index_base is the maximum we need to grow the tables. */ if (index_base >= information->maximum ) { 40007aa8: 10 80 00 0c b 40007ad8 <_Objects_Extend_information+0x2a8> <== NOT EXECUTED 40007aac: 80 a5 00 12 cmp %l4, %l2 <== NOT EXECUTED block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { if ( information->object_blocks[ block ] == NULL ) 40007ab0: c2 00 40 02 ld [ %g1 + %g2 ], %g1 40007ab4: 80 a0 60 00 cmp %g1, 0 40007ab8: 02 80 00 08 be 40007ad8 <_Objects_Extend_information+0x2a8> 40007abc: 80 a5 00 12 cmp %l4, %l2 if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40007ac0: ac 05 a0 01 inc %l6 if ( information->object_blocks[ block ] == NULL ) break; else index_base += information->allocation_size; 40007ac4: a8 05 00 10 add %l4, %l0, %l4 if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40007ac8: 80 a5 80 08 cmp %l6, %o0 40007acc: 12 bf ff f9 bne 40007ab0 <_Objects_Extend_information+0x280> 40007ad0: 83 2d a0 02 sll %l6, 2, %g1 /* * If the index_base is the maximum we need to grow the tables. */ if (index_base >= information->maximum ) { 40007ad4: 80 a5 00 12 cmp %l4, %l2 40007ad8: 2a bf ff a9 bcs,a 4000797c <_Objects_Extend_information+0x14c> 40007adc: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 40007ae0: a6 02 20 01 add %o0, 1, %l3 40007ae4: 83 2c e0 01 sll %l3, 1, %g1 40007ae8: 90 00 40 13 add %g1, %l3, %o0 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 40007aec: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 40007af0: 80 a0 60 00 cmp %g1, 0 40007af4: 02 bf ff 60 be 40007874 <_Objects_Extend_information+0x44> 40007af8: ba 04 00 12 add %l0, %l2, %i5 40007afc: 92 02 00 11 add %o0, %l1, %o1 40007b00: 11 10 00 66 sethi %hi(0x40019800), %o0 40007b04: 92 02 40 1d add %o1, %i5, %o1 40007b08: 90 12 23 5c or %o0, 0x35c, %o0 40007b0c: 7f ff fd bd call 40007200 <_Heap_Allocate> 40007b10: 93 2a 60 02 sll %o1, 2, %o1 block_count * (sizeof(void *) + sizeof(uint32_t ) + sizeof(Objects_Name *)) + ((maximum + minimum_index) * sizeof(Objects_Control *)) ); if ( !object_blocks ) 40007b14: ae 92 20 00 orcc %o0, 0, %l7 40007b18: 32 bf ff 5d bne,a 4000788c <_Objects_Extend_information+0x5c> 40007b1c: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 40007b20: 81 c7 e0 08 ret <== NOT EXECUTED 40007b24: 81 e8 00 00 restore <== NOT EXECUTED if ( !information->object_blocks[ block ] ) return; } else { information->object_blocks[ block ] = 40007b28: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 40007b2c: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 40007b30: 40 00 35 71 call 400150f4 <.umul> 40007b34: 90 00 40 08 add %g1, %o0, %o0 40007b38: 40 00 0b 7c call 4000a928 <_Workspace_Allocate_or_fatal_error> 40007b3c: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 40007b40: e4 06 20 3c ld [ %i0 + 0x3c ], %l2 40007b44: a7 2d a0 02 sll %l6, 2, %l3 40007b48: 10 bf ff a0 b 400079c8 <_Objects_Extend_information+0x198> 40007b4c: d0 24 c0 10 st %o0, [ %l3 + %l0 ] /* * Copy each section of the table over. This has to be performed as * separate parts as size of each block has changed. */ memcpy( object_blocks, 40007b50: d2 06 20 3c ld [ %i0 + 0x3c ], %o1 40007b54: a1 28 e0 02 sll %g3, 2, %l0 40007b58: 90 10 00 17 mov %l7, %o0 40007b5c: 40 00 1b 4c call 4000e88c 40007b60: 94 10 00 10 mov %l0, %o2 information->object_blocks, block_count * sizeof(void*) ); memcpy( inactive_per_block, 40007b64: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 40007b68: 94 10 00 10 mov %l0, %o2 40007b6c: 40 00 1b 48 call 4000e88c 40007b70: 90 10 00 13 mov %l3, %o0 information->inactive_per_block, block_count * sizeof(uint32_t ) ); memcpy( name_table, 40007b74: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 40007b78: 94 10 00 10 mov %l0, %o2 40007b7c: 40 00 1b 44 call 4000e88c 40007b80: 90 10 00 15 mov %l5, %o0 information->name_table, block_count * sizeof(Objects_Name *) ); memcpy( local_table, 40007b84: d4 16 20 10 lduh [ %i0 + 0x10 ], %o2 40007b88: d2 06 20 20 ld [ %i0 + 0x20 ], %o1 40007b8c: 94 02 80 11 add %o2, %l1, %o2 40007b90: 90 10 00 12 mov %l2, %o0 40007b94: 40 00 1b 3e call 4000e88c 40007b98: 95 2a a0 02 sll %o2, 2, %o2 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 40007b9c: 10 bf ff 4e b 400078d4 <_Objects_Extend_information+0xa4> 40007ba0: c0 24 00 17 clr [ %l0 + %l7 ] if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40007ba4: 10 bf ff cc b 40007ad4 <_Objects_Extend_information+0x2a4> <== NOT EXECUTED 40007ba8: ac 10 20 00 clr %l6 <== NOT EXECUTED 40007bac: 81 c7 e0 08 ret <== NOT EXECUTED 40007bb0: 81 e8 00 00 restore <== NOT EXECUTED 40007c48 <_Objects_Get_isr_disable>: Objects_Information *information, Objects_Id id, Objects_Locations *location, ISR_Level *level_p ) { 40007c48: 9d e3 bf 98 save %sp, -104, %sp Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 40007c4c: c2 06 20 08 ld [ %i0 + 8 ], %g1 _ISR_Disable( level ); 40007c50: 7f ff e8 62 call 40001dd8 40007c54: b2 26 40 01 sub %i1, %g1, %i1 { Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 40007c58: b2 06 60 01 inc %i1 _ISR_Disable( level ); if ( information->maximum >= index ) { 40007c5c: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 40007c60: 80 a6 40 01 cmp %i1, %g1 40007c64: 18 80 00 0b bgu 40007c90 <_Objects_Get_isr_disable+0x48> 40007c68: 83 2e 60 02 sll %i1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 40007c6c: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 40007c70: f0 00 80 01 ld [ %g2 + %g1 ], %i0 40007c74: 80 a6 20 00 cmp %i0, 0 40007c78: 02 80 00 0c be 40007ca8 <_Objects_Get_isr_disable+0x60> 40007c7c: 01 00 00 00 nop *location = OBJECTS_LOCAL; *level_p = level; 40007c80: d0 26 c0 00 st %o0, [ %i3 ] index = id - information->minimum_id + 1; _ISR_Disable( level ); if ( information->maximum >= index ) { if ( (the_object = information->local_table[ index ]) != NULL ) { *location = OBJECTS_LOCAL; 40007c84: c0 26 80 00 clr [ %i2 ] 40007c88: 81 c7 e0 08 ret 40007c8c: 81 e8 00 00 restore } _ISR_Enable( level ); *location = OBJECTS_ERROR; return NULL; } _ISR_Enable( level ); 40007c90: 7f ff e8 56 call 40001de8 40007c94: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; 40007c98: 82 10 20 02 mov 2, %g1 40007c9c: c2 26 80 00 st %g1, [ %i2 ] _Objects_MP_Is_remote( information, id, location, &the_object ); return the_object; #else return NULL; #endif } 40007ca0: 81 c7 e0 08 ret 40007ca4: 81 e8 00 00 restore if ( (the_object = information->local_table[ index ]) != NULL ) { *location = OBJECTS_LOCAL; *level_p = level; return the_object; } _ISR_Enable( level ); 40007ca8: 7f ff e8 50 call 40001de8 <== NOT EXECUTED 40007cac: 01 00 00 00 nop <== NOT EXECUTED *location = OBJECTS_ERROR; 40007cb0: 82 10 20 02 mov 2, %g1 ! 2 <== NOT EXECUTED 40007cb4: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 40007cb8: 81 c7 e0 08 ret <== NOT EXECUTED 40007cbc: 81 e8 00 00 restore <== NOT EXECUTED 4000975c <_Objects_Get_name_as_string>: char *_Objects_Get_name_as_string( Objects_Id id, size_t length, char *name ) { 4000975c: 9d e3 bf 88 save %sp, -120, %sp 40009760: 92 10 00 18 mov %i0, %o1 uint32_t i; char lname[5]; Objects_Control *the_object; Objects_Locations location; if ( length == 0 ) 40009764: 80 a6 60 00 cmp %i1, 0 40009768: 12 80 00 04 bne 40009778 <_Objects_Get_name_as_string+0x1c> 4000976c: b0 10 00 1a mov %i2, %i0 _Thread_Enable_dispatch(); return name; } return NULL; /* unreachable path */ } 40009770: 81 c7 e0 08 ret <== NOT EXECUTED 40009774: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED Objects_Locations location; if ( length == 0 ) return NULL; if ( name == NULL ) 40009778: 80 a6 a0 00 cmp %i2, 0 4000977c: 02 80 00 40 be 4000987c <_Objects_Get_name_as_string+0x120> 40009780: 87 32 60 16 srl %o1, 0x16, %g3 if ( !_Objects_Is_class_valid( the_class ) ) return NULL; the_api = _Objects_Get_API( id ); return _Objects_Information_table[ the_api ][ the_class ]; 40009784: 03 10 00 98 sethi %hi(0x40026000), %g1 40009788: 86 08 e0 1c and %g3, 0x1c, %g3 4000978c: 82 10 60 40 or %g1, 0x40, %g1 40009790: c8 00 40 03 ld [ %g1 + %g3 ], %g4 40009794: 85 32 60 1b srl %o1, 0x1b, %g2 40009798: 85 28 a0 02 sll %g2, 2, %g2 4000979c: f4 01 00 02 ld [ %g4 + %g2 ], %i2 return NULL; information = _Objects_Get_information( id ); if ( !information ) 400097a0: 80 a6 a0 00 cmp %i2, 0 400097a4: 22 80 00 36 be,a 4000987c <_Objects_Get_name_as_string+0x120> 400097a8: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; the_object = _Objects_Get( information, id, &location ); 400097ac: 90 10 00 1a mov %i2, %o0 400097b0: 40 00 00 3f call 400098ac <_Objects_Get> 400097b4: 94 07 bf f4 add %fp, -12, %o2 switch ( location ) { 400097b8: c2 07 bf f4 ld [ %fp + -12 ], %g1 400097bc: 80 a0 60 00 cmp %g1, 0 400097c0: 32 80 00 2f bne,a 4000987c <_Objects_Get_name_as_string+0x120> 400097c4: b0 10 20 00 clr %i0 <== NOT EXECUTED case OBJECTS_ERROR: return NULL; case OBJECTS_LOCAL: if ( information->is_string ) { 400097c8: c2 06 a0 40 ld [ %i2 + 0x40 ], %g1 400097cc: 80 a0 60 00 cmp %g1, 0 400097d0: 22 80 00 2d be,a 40009884 <_Objects_Get_name_as_string+0x128> 400097d4: c2 02 20 0c ld [ %o0 + 0xc ], %g1 s = the_object->name; 400097d8: d0 02 20 0c ld [ %o0 + 0xc ], %o0 lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; s = lname; } for ( i=0, d=name ; i<(length-1) && *s ; i++, s++, d++ ) { 400097dc: 80 a6 60 01 cmp %i1, 1 400097e0: 02 80 00 1c be 40009850 <_Objects_Get_name_as_string+0xf4> 400097e4: 9a 10 00 18 mov %i0, %o5 400097e8: c8 0a 00 00 ldub [ %o0 ], %g4 400097ec: 85 29 20 18 sll %g4, 0x18, %g2 400097f0: 80 a0 a0 00 cmp %g2, 0 400097f4: 22 80 00 18 be,a 40009854 <_Objects_Get_name_as_string+0xf8> 400097f8: c0 2b 40 00 clrb [ %o5 ] <== NOT EXECUTED 400097fc: b2 06 7f ff add %i1, -1, %i1 40009800: 98 10 20 00 clr %o4 40009804: 10 80 00 07 b 40009820 <_Objects_Get_name_as_string+0xc4> 40009808: 17 10 00 76 sethi %hi(0x4001d800), %o3 4000980c: c8 0a 00 00 ldub [ %o0 ], %g4 40009810: 85 29 20 18 sll %g4, 0x18, %g2 40009814: 80 a0 a0 00 cmp %g2, 0 40009818: 22 80 00 0f be,a 40009854 <_Objects_Get_name_as_string+0xf8> 4000981c: c0 2b 40 00 clrb [ %o5 ] <== NOT EXECUTED *d = (!isprint(*s)) ? '*' : *s; 40009820: c2 02 e3 08 ld [ %o3 + 0x308 ], %g1 40009824: 85 38 a0 18 sra %g2, 0x18, %g2 40009828: c6 48 80 01 ldsb [ %g2 + %g1 ], %g3 4000982c: 80 88 e0 97 btst 0x97, %g3 40009830: 12 80 00 03 bne 4000983c <_Objects_Get_name_as_string+0xe0> 40009834: 90 02 20 01 inc %o0 40009838: 88 10 20 2a mov 0x2a, %g4 <== NOT EXECUTED 4000983c: c8 2b 40 00 stb %g4, [ %o5 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; s = lname; } for ( i=0, d=name ; i<(length-1) && *s ; i++, s++, d++ ) { 40009840: 98 03 20 01 inc %o4 40009844: 80 a3 00 19 cmp %o4, %i1 40009848: 12 bf ff f1 bne 4000980c <_Objects_Get_name_as_string+0xb0> 4000984c: 9a 03 60 01 inc %o5 *d = (!isprint(*s)) ? '*' : *s; } *d = '\0'; 40009850: c0 2b 40 00 clrb [ %o5 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009854: 03 10 00 98 sethi %hi(0x40026000), %g1 40009858: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400260e0 <_Thread_Dispatch_disable_level> 4000985c: 84 00 bf ff add %g2, -1, %g2 40009860: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 40009864: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 40009868: 80 a0 e0 00 cmp %g3, 0 4000986c: 12 80 00 04 bne 4000987c <_Objects_Get_name_as_string+0x120> 40009870: 01 00 00 00 nop _Thread_Dispatch(); 40009874: 40 00 04 fa call 4000ac5c <_Thread_Dispatch> 40009878: 01 00 00 00 nop 4000987c: 81 c7 e0 08 ret 40009880: 81 e8 00 00 restore lname[ 0 ] = (u32_name >> 24) & 0xff; lname[ 1 ] = (u32_name >> 16) & 0xff; lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 40009884: c0 2f bf f3 clrb [ %fp + -13 ] if ( information->is_string ) { s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; 40009888: 85 30 60 18 srl %g1, 0x18, %g2 lname[ 1 ] = (u32_name >> 16) & 0xff; 4000988c: 87 30 60 10 srl %g1, 0x10, %g3 lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; 40009890: c2 2f bf f2 stb %g1, [ %fp + -14 ] if ( information->is_string ) { s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; 40009894: c4 2f bf ef stb %g2, [ %fp + -17 ] lname[ 1 ] = (u32_name >> 16) & 0xff; lname[ 2 ] = (u32_name >> 8) & 0xff; 40009898: 83 30 60 08 srl %g1, 8, %g1 s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; lname[ 1 ] = (u32_name >> 16) & 0xff; 4000989c: c6 2f bf f0 stb %g3, [ %fp + -16 ] lname[ 2 ] = (u32_name >> 8) & 0xff; 400098a0: c2 2f bf f1 stb %g1, [ %fp + -15 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 400098a4: 10 bf ff ce b 400097dc <_Objects_Get_name_as_string+0x80> 400098a8: 90 07 bf ef add %fp, -17, %o0 400193ec <_Objects_Get_next>: Objects_Information *information, Objects_Id id, Objects_Locations *location_p, Objects_Id *next_id_p ) { 400193ec: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Objects_Control *object; Objects_Id next_id; if (_Objects_Get_index(id) == OBJECTS_ID_INITIAL_INDEX) 400193f0: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 400193f4: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff <== NOT EXECUTED 400193f8: 80 8e 40 01 btst %i1, %g1 <== NOT EXECUTED 400193fc: 22 80 00 02 be,a 40019404 <_Objects_Get_next+0x18> <== NOT EXECUTED 40019400: f2 06 20 08 ld [ %i0 + 8 ], %i1 <== NOT EXECUTED else next_id = id; do { /* walked off end of list? */ if (_Objects_Get_index(next_id) > information->maximum) 40019404: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 40019408: a0 10 63 ff or %g1, 0x3ff, %l0 ! ffff <== NOT EXECUTED 4001940c: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED 40019410: 82 0e 40 10 and %i1, %l0, %g1 <== NOT EXECUTED *location_p = OBJECTS_ERROR; goto final; } /* try to grab one */ object = _Objects_Get(information, next_id, location_p); 40019414: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40019418: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED else next_id = id; do { /* walked off end of list? */ if (_Objects_Get_index(next_id) > information->maximum) 4001941c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40019420: 18 80 00 0b bgu 4001944c <_Objects_Get_next+0x60> <== NOT EXECUTED 40019424: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED *location_p = OBJECTS_ERROR; goto final; } /* try to grab one */ object = _Objects_Get(information, next_id, location_p); 40019428: 7f ff d6 bb call 4000ef14 <_Objects_Get> <== NOT EXECUTED 4001942c: b2 06 60 01 inc %i1 <== NOT EXECUTED next_id++; } while (*location_p != OBJECTS_LOCAL); 40019430: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40019434: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019438: 32 bf ff f6 bne,a 40019410 <_Objects_Get_next+0x24> <== NOT EXECUTED 4001943c: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED *next_id_p = next_id; 40019440: f2 26 c0 00 st %i1, [ %i3 ] <== NOT EXECUTED return object; final: *next_id_p = OBJECTS_ID_FINAL; return 0; } 40019444: 81 c7 e0 08 ret <== NOT EXECUTED 40019448: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED do { /* walked off end of list? */ if (_Objects_Get_index(next_id) > information->maximum) { *location_p = OBJECTS_ERROR; 4001944c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 40019450: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 40019454: 90 10 20 00 clr %o0 <== NOT EXECUTED do { /* walked off end of list? */ if (_Objects_Get_index(next_id) > information->maximum) { *location_p = OBJECTS_ERROR; 40019458: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 4001945c: c4 26 c0 00 st %g2, [ %i3 ] <== NOT EXECUTED return 0; } 40019460: 81 c7 e0 08 ret <== NOT EXECUTED 40019464: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400154b8 <_Objects_Get_no_protection>: ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 400154b8: c2 02 20 08 ld [ %o0 + 8 ], %g1 if ( information->maximum >= index ) { 400154bc: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 400154c0: 92 22 40 01 sub %o1, %g1, %o1 400154c4: 82 02 60 01 add %o1, 1, %g1 if ( information->maximum >= index ) { 400154c8: 80 a0 40 02 cmp %g1, %g2 400154cc: 18 80 00 09 bgu 400154f0 <_Objects_Get_no_protection+0x38> 400154d0: 83 28 60 02 sll %g1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 400154d4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 400154d8: d0 00 80 01 ld [ %g2 + %g1 ], %o0 400154dc: 80 a2 20 00 cmp %o0, 0 400154e0: 02 80 00 08 be 40015500 <_Objects_Get_no_protection+0x48> 400154e4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_LOCAL; 400154e8: 81 c3 e0 08 retl 400154ec: c0 22 80 00 clr [ %o2 ] return the_object; } *location = OBJECTS_ERROR; return NULL; } *location = OBJECTS_ERROR; 400154f0: 82 10 20 02 mov 2, %g1 400154f4: 90 10 20 00 clr %o0 /* * Not supported for multiprocessing */ return NULL; } 400154f8: 81 c3 e0 08 retl 400154fc: c2 22 80 00 st %g1, [ %o2 ] if ( information->maximum >= index ) { if ( (the_object = information->local_table[ index ]) != NULL ) { *location = OBJECTS_LOCAL; return the_object; } *location = OBJECTS_ERROR; 40015500: 81 c3 e0 08 retl <== NOT EXECUTED 40015504: c2 22 80 00 st %g1, [ %o2 ] <== NOT EXECUTED 40007f24 <_Objects_Handler_initialization>: uint32_t node, uint32_t maximum_nodes, uint32_t maximum_global_objects ) { if ( node < 1 || node > maximum_nodes ) 40007f24: 80 a2 20 00 cmp %o0, 0 40007f28: 22 80 00 07 be,a 40007f44 <_Objects_Handler_initialization+0x20> 40007f2c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40007f30: 80 a2 00 09 cmp %o0, %o1 40007f34: 18 80 00 04 bgu 40007f44 <_Objects_Handler_initialization+0x20> 40007f38: 90 10 20 00 clr %o0 40007f3c: 81 c3 e0 08 retl 40007f40: 01 00 00 00 nop _Internal_error_Occurred( 40007f44: 92 10 20 01 mov 1, %o1 ! 1 <== NOT EXECUTED 40007f48: 94 10 20 08 mov 8, %o2 <== NOT EXECUTED 40007f4c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40007f50: 7f ff fd de call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 40007f54: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40007f58: 01 00 00 00 nop 40009258 <_Objects_Id_to_name>: Objects_Name_or_id_lookup_errors _Objects_Id_to_name ( Objects_Id id, Objects_Name *name ) { 40009258: 9d e3 bf 90 save %sp, -112, %sp 4000925c: 92 10 00 18 mov %i0, %o1 uint32_t the_class; Objects_Information *information; Objects_Control *the_object = (Objects_Control *) 0; Objects_Locations ignored_location; if ( !name ) 40009260: 80 a6 60 00 cmp %i1, 0 40009264: 02 80 00 24 be 400092f4 <_Objects_Id_to_name+0x9c> 40009268: b0 10 20 01 mov 1, %i0 */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000926c: 83 32 60 18 srl %o1, 0x18, %g1 40009270: 82 08 60 07 and %g1, 7, %g1 return OBJECTS_INVALID_NAME; the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) 40009274: 80 a0 60 04 cmp %g1, 4 40009278: 18 80 00 25 bgu 4000930c <_Objects_Id_to_name+0xb4> 4000927c: 87 28 60 02 sll %g1, 2, %g3 return OBJECTS_INVALID_ID; the_class = _Objects_Get_class( id ); information = _Objects_Information_table[ the_api ][ the_class ]; 40009280: 03 10 00 77 sethi %hi(0x4001dc00), %g1 40009284: 82 10 61 b0 or %g1, 0x1b0, %g1 ! 4001ddb0 <_Objects_Information_table> 40009288: c8 00 40 03 ld [ %g1 + %g3 ], %g4 4000928c: 85 32 60 1b srl %o1, 0x1b, %g2 40009290: 85 28 a0 02 sll %g2, 2, %g2 40009294: d0 01 00 02 ld [ %g4 + %g2 ], %o0 if ( !information ) 40009298: 80 a2 20 00 cmp %o0, 0 4000929c: 02 80 00 1c be 4000930c <_Objects_Id_to_name+0xb4> 400092a0: 01 00 00 00 nop return OBJECTS_INVALID_ID; if ( information->is_string ) 400092a4: c2 02 20 40 ld [ %o0 + 0x40 ], %g1 400092a8: 80 a0 60 00 cmp %g1, 0 400092ac: 12 80 00 18 bne 4000930c <_Objects_Id_to_name+0xb4> 400092b0: 01 00 00 00 nop return OBJECTS_INVALID_ID; the_object = _Objects_Get( information, id, &ignored_location ); 400092b4: 7f ff ff c2 call 400091bc <_Objects_Get> 400092b8: 94 07 bf f4 add %fp, -12, %o2 if ( !the_object ) 400092bc: 80 a2 20 00 cmp %o0, 0 400092c0: 02 80 00 13 be 4000930c <_Objects_Id_to_name+0xb4> 400092c4: 01 00 00 00 nop return OBJECTS_INVALID_ID; *name = the_object->name; 400092c8: c2 02 20 0c ld [ %o0 + 0xc ], %g1 400092cc: c2 26 40 00 st %g1, [ %i1 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400092d0: 07 10 00 77 sethi %hi(0x4001dc00), %g3 400092d4: c2 00 e2 50 ld [ %g3 + 0x250 ], %g1 ! 4001de50 <_Thread_Dispatch_disable_level> 400092d8: b0 10 20 00 clr %i0 400092dc: 82 00 7f ff add %g1, -1, %g1 400092e0: c2 20 e2 50 st %g1, [ %g3 + 0x250 ] 400092e4: c4 00 e2 50 ld [ %g3 + 0x250 ], %g2 400092e8: 80 a0 a0 00 cmp %g2, 0 400092ec: 02 80 00 04 be 400092fc <_Objects_Id_to_name+0xa4> 400092f0: 01 00 00 00 nop _Thread_Enable_dispatch(); return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL; } 400092f4: 81 c7 e0 08 ret <== NOT EXECUTED 400092f8: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 400092fc: 40 00 05 07 call 4000a718 <_Thread_Dispatch> 40009300: 01 00 00 00 nop 40009304: 81 c7 e0 08 ret 40009308: 81 e8 00 00 restore 4000930c: 81 c7 e0 08 ret <== NOT EXECUTED 40009310: 91 e8 20 03 restore %g0, 3, %o0 <== NOT EXECUTED 40007d5c <_Objects_Initialize_information>: , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 40007d5c: 9d e3 bf 98 save %sp, -104, %sp /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40007d60: 03 10 00 66 sethi %hi(0x40019800), %g1 40007d64: 85 2e 60 02 sll %i1, 2, %g2 40007d68: 82 10 62 70 or %g1, 0x270, %g1 40007d6c: c8 00 40 02 ld [ %g1 + %g2 ], %g4 , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 40007d70: de 07 a0 5c ld [ %fp + 0x5c ], %o7 /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; 40007d74: 83 36 e0 1f srl %i3, 0x1f, %g1 maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 40007d78: 05 20 00 00 sethi %hi(0x80000000), %g2 /* * Set the size of the object */ information->size = size; 40007d7c: b9 2f 20 10 sll %i4, 0x10, %i4 40007d80: b9 37 20 10 srl %i4, 0x10, %i4 uint32_t index; #endif information->the_api = the_api; information->the_class = the_class; information->is_string = is_string; 40007d84: fa 26 20 40 st %i5, [ %i0 + 0x40 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007d88: 87 2e 60 18 sll %i1, 0x18, %g3 40007d8c: bb 2e a0 1b sll %i2, 0x1b, %i5 /* * Set the size of the object */ information->size = size; 40007d90: f8 26 20 1c st %i4, [ %i0 + 0x1c ] #if defined(RTEMS_MULTIPROCESSING) uint32_t index; #endif information->the_api = the_api; information->the_class = the_class; 40007d94: f4 36 20 04 sth %i2, [ %i0 + 4 ] /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 40007d98: b8 2e c0 02 andn %i3, %g2, %i4 /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40007d9c: b5 2e a0 02 sll %i2, 2, %i2 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007da0: 80 a0 00 1c cmp %g0, %i4 /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40007da4: f0 21 00 1a st %i0, [ %g4 + %i2 ] /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; 40007da8: c2 26 20 14 st %g1, [ %i0 + 0x14 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007dac: 88 40 20 00 addx %g0, 0, %g4 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40007db0: 03 10 00 66 sethi %hi(0x40019800), %g1 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007db4: 05 00 00 40 sethi %hi(0x10000), %g2 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40007db8: 82 10 60 ec or %g1, 0xec, %g1 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007dbc: 86 10 c0 02 or %g3, %g2, %g3 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40007dc0: c2 26 20 20 st %g1, [ %i0 + 0x20 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007dc4: 86 10 c0 1d or %g3, %i5, %g3 uint32_t name_length; #if defined(RTEMS_MULTIPROCESSING) uint32_t index; #endif information->the_api = the_api; 40007dc8: f2 26 00 00 st %i1, [ %i0 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007dcc: 86 10 c0 04 or %g3, %g4, %g3 information->the_api = the_api; information->the_class = the_class; information->is_string = is_string; information->local_table = 0; information->name_table = 0; 40007dd0: c0 26 20 24 clr [ %i0 + 0x24 ] information->inactive_per_block = 0; 40007dd4: c0 26 20 38 clr [ %i0 + 0x38 ] information->object_blocks = 0; 40007dd8: c0 26 20 3c clr [ %i0 + 0x3c ] information->inactive = 0; 40007ddc: c0 36 20 34 clrh [ %i0 + 0x34 ] /* * The allocation unit is the maximum value */ information->allocation_size = maximum; 40007de0: f8 26 20 18 st %i4, [ %i0 + 0x18 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40007de4: c6 26 20 08 st %g3, [ %i0 + 8 ] * Calculate the maximum name length */ name_length = maximum_name_length; if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) ) 40007de8: 80 8b e0 03 btst 3, %o7 40007dec: 02 80 00 04 be 40007dfc <_Objects_Initialize_information+0xa0> 40007df0: 82 10 00 0f mov %o7, %g1 name_length = (name_length + OBJECTS_NAME_ALIGNMENT) & 40007df4: 82 03 e0 04 add %o7, 4, %g1 <== NOT EXECUTED 40007df8: 82 08 7f fc and %g1, -4, %g1 <== NOT EXECUTED ~(OBJECTS_NAME_ALIGNMENT-1); information->name_length = name_length; 40007dfc: c2 36 20 44 sth %g1, [ %i0 + 0x44 ] Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40007e00: 84 06 20 28 add %i0, 0x28, %g2 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40007e04: 82 06 20 2c add %i0, 0x2c, %g1 the_chain->permanent_null = NULL; 40007e08: c0 26 20 2c clr [ %i0 + 0x2c ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40007e0c: c2 26 20 28 st %g1, [ %i0 + 0x28 ] /* * Initialize objects .. if there are any */ if ( maximum ) { 40007e10: 80 a7 20 00 cmp %i4, 0 40007e14: 12 80 00 04 bne 40007e24 <_Objects_Initialize_information+0xc8> 40007e18: c4 26 20 30 st %g2, [ %i0 + 0x30 ] 40007e1c: 81 c7 e0 08 ret 40007e20: 81 e8 00 00 restore /* * Reset the maximum value. It will be updated when the information is * extended. */ information->maximum = 0; 40007e24: c0 36 20 10 clrh [ %i0 + 0x10 ] * Always have the maximum size available so the current performance * figures are create are met. If the user moves past the maximum * number then a performance hit is taken. */ _Objects_Extend_information( information ); 40007e28: 7f ff fe 82 call 40007830 <_Objects_Extend_information> 40007e2c: 81 e8 00 00 restore 40007e30: 01 00 00 00 nop 40007e34 <_Objects_Name_to_id>: Objects_Information *information, Objects_Name name, uint32_t node, Objects_Id *id ) { 40007e34: 9d e3 bf 98 save %sp, -104, %sp 40007e38: a2 10 00 18 mov %i0, %l1 Objects_Control *the_object; uint32_t index; uint32_t name_length; Objects_Name_comparators compare_them; if ( !id ) 40007e3c: 80 a6 e0 00 cmp %i3, 0 40007e40: 02 80 00 2d be 40007ef4 <_Objects_Name_to_id+0xc0> 40007e44: b0 10 20 02 mov 2, %i0 return OBJECTS_INVALID_ADDRESS; if ( name == 0 ) 40007e48: 80 a6 60 00 cmp %i1, 0 40007e4c: 02 80 00 28 be 40007eec <_Objects_Name_to_id+0xb8> 40007e50: 01 00 00 00 nop return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40007e54: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 40007e58: 86 90 60 00 orcc %g1, 0, %g3 40007e5c: 02 80 00 24 be 40007eec <_Objects_Name_to_id+0xb8> 40007e60: 80 a6 a0 00 cmp %i2, 0 40007e64: 12 80 00 26 bne 40007efc <_Objects_Name_to_id+0xc8> 40007e68: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 search_local_node = TRUE; if ( search_local_node ) { name_length = information->name_length; if ( information->is_string ) compare_them = _Objects_Compare_name_string; 40007e6c: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 40007e70: 05 10 00 34 sethi %hi(0x4000d000), %g2 40007e74: 80 a0 60 00 cmp %g1, 0 40007e78: a4 10 a0 08 or %g2, 8, %l2 40007e7c: 02 80 00 04 be 40007e8c <_Objects_Name_to_id+0x58> 40007e80: c8 14 60 44 lduh [ %l1 + 0x44 ], %g4 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40007e84: 03 10 00 34 sethi %hi(0x4000d000), %g1 <== NOT EXECUTED 40007e88: a4 10 60 18 or %g1, 0x18, %l2 ! 4000d018 <_Objects_Compare_name_string> <== NOT EXECUTED for ( index = 1; index <= information->maximum; index++ ) { the_object = information->local_table[ index ]; if ( !the_object || !the_object->name ) continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 40007e8c: 83 29 20 10 sll %g4, 0x10, %g1 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40007e90: a0 10 20 01 mov 1, %l0 for ( index = 1; index <= information->maximum; index++ ) { the_object = information->local_table[ index ]; if ( !the_object || !the_object->name ) continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 40007e94: b1 30 60 10 srl %g1, 0x10, %i0 if ( information->is_string ) compare_them = _Objects_Compare_name_string; else compare_them = _Objects_Compare_name_raw; for ( index = 1; index <= information->maximum; index++ ) { the_object = information->local_table[ index ]; 40007e98: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 40007e9c: 83 2c 20 02 sll %l0, 2, %g1 40007ea0: f4 00 80 01 ld [ %g2 + %g1 ], %i2 if ( !the_object || !the_object->name ) 40007ea4: 80 a6 a0 00 cmp %i2, 0 40007ea8: 02 80 00 0c be 40007ed8 <_Objects_Name_to_id+0xa4> 40007eac: a0 04 20 01 inc %l0 40007eb0: d2 06 a0 0c ld [ %i2 + 0xc ], %o1 40007eb4: 80 a2 60 00 cmp %o1, 0 40007eb8: 02 80 00 08 be 40007ed8 <_Objects_Name_to_id+0xa4> 40007ebc: 90 10 00 19 mov %i1, %o0 continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 40007ec0: 9f c4 80 00 call %l2 40007ec4: 94 10 00 18 mov %i0, %o2 40007ec8: 80 a2 20 00 cmp %o0, 0 40007ecc: 32 80 00 13 bne,a 40007f18 <_Objects_Name_to_id+0xe4> 40007ed0: c2 06 a0 08 ld [ %i2 + 8 ], %g1 40007ed4: c6 14 60 10 lduh [ %l1 + 0x10 ], %g3 name_length = information->name_length; if ( information->is_string ) compare_them = _Objects_Compare_name_string; else compare_them = _Objects_Compare_name_raw; for ( index = 1; index <= information->maximum; index++ ) { 40007ed8: 83 28 e0 10 sll %g3, 0x10, %g1 40007edc: 83 30 60 10 srl %g1, 0x10, %g1 40007ee0: 80 a0 40 10 cmp %g1, %l0 40007ee4: 3a bf ff ee bcc,a 40007e9c <_Objects_Name_to_id+0x68> 40007ee8: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 40007eec: 81 c7 e0 08 ret 40007ef0: 91 e8 20 01 restore %g0, 1, %o0 return ( _Objects_MP_Global_name_search( information, name, node, id ) ); #else return OBJECTS_INVALID_NAME; #endif } 40007ef4: 81 c7 e0 08 ret <== NOT EXECUTED 40007ef8: 81 e8 00 00 restore <== NOT EXECUTED if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40007efc: 82 10 63 ff or %g1, 0x3ff, %g1 40007f00: 80 a6 80 01 cmp %i2, %g1 40007f04: 02 bf ff da be 40007e6c <_Objects_Name_to_id+0x38> 40007f08: 80 a6 a0 01 cmp %i2, 1 40007f0c: 22 bf ff d9 be,a 40007e70 <_Objects_Name_to_id+0x3c> 40007f10: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 40007f14: 30 bf ff f6 b,a 40007eec <_Objects_Name_to_id+0xb8> the_object = information->local_table[ index ]; if ( !the_object || !the_object->name ) continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { *id = the_object->id; 40007f18: c2 26 c0 00 st %g1, [ %i3 ] 40007f1c: 81 c7 e0 08 ret 40007f20: 91 e8 20 00 restore %g0, 0, %o0 40007f5c <_Objects_Shrink_information>: */ void _Objects_Shrink_information( Objects_Information *information ) { 40007f5c: 9d e3 bf 98 save %sp, -104, %sp 40007f60: c4 06 20 08 ld [ %i0 + 8 ], %g2 /* * Search the list to find block or chunnk with all objects inactive. */ index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; 40007f64: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 40007f68: d0 16 20 10 lduh [ %i0 + 0x10 ], %o0 40007f6c: 03 00 00 3f sethi %hi(0xfc00), %g1 40007f70: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40007f74: 92 10 00 10 mov %l0, %o1 40007f78: a2 08 80 01 and %g2, %g1, %l1 40007f7c: 40 00 34 98 call 400151dc <.udiv> 40007f80: 90 22 00 11 sub %o0, %l1, %o0 for ( block = 0; block < block_count; block++ ) { 40007f84: 80 a2 20 00 cmp %o0, 0 40007f88: 02 80 00 15 be 40007fdc <_Objects_Shrink_information+0x80> 40007f8c: 86 10 20 00 clr %g3 if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40007f90: c8 06 20 38 ld [ %i0 + 0x38 ], %g4 40007f94: c2 01 00 00 ld [ %g4 ], %g1 40007f98: 84 10 20 04 mov 4, %g2 40007f9c: 80 a4 00 01 cmp %l0, %g1 40007fa0: a8 10 20 00 clr %l4 40007fa4: 12 80 00 0a bne 40007fcc <_Objects_Shrink_information+0x70> 40007fa8: a4 10 20 00 clr %l2 /* * XXX - Not to sure how to use a chain where you need to iterate and * and remove elements. */ the_object = (Objects_Control *) information->Inactive.first; 40007fac: 10 80 00 10 b 40007fec <_Objects_Shrink_information+0x90> <== NOT EXECUTED 40007fb0: d0 06 20 28 ld [ %i0 + 0x28 ], %o0 <== NOT EXECUTED information->inactive -= information->allocation_size; return; } index_base += information->allocation_size; 40007fb4: a2 04 40 10 add %l1, %l0, %l1 index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; for ( block = 0; block < block_count; block++ ) { if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40007fb8: 80 a4 00 01 cmp %l0, %g1 information->inactive -= information->allocation_size; return; } index_base += information->allocation_size; 40007fbc: a4 10 00 02 mov %g2, %l2 index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; for ( block = 0; block < block_count; block++ ) { if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40007fc0: 02 80 00 09 be 40007fe4 <_Objects_Shrink_information+0x88> 40007fc4: 82 00 a0 04 add %g2, 4, %g1 information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; return; 40007fc8: 84 10 00 01 mov %g1, %g2 */ index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; for ( block = 0; block < block_count; block++ ) { 40007fcc: 86 00 e0 01 inc %g3 40007fd0: 80 a0 c0 08 cmp %g3, %o0 40007fd4: 32 bf ff f8 bne,a 40007fb4 <_Objects_Shrink_information+0x58> 40007fd8: c2 00 80 04 ld [ %g2 + %g4 ], %g1 40007fdc: 81 c7 e0 08 ret 40007fe0: 81 e8 00 00 restore if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40007fe4: a8 10 00 02 mov %g2, %l4 /* * XXX - Not to sure how to use a chain where you need to iterate and * and remove elements. */ the_object = (Objects_Control *) information->Inactive.first; 40007fe8: d0 06 20 28 ld [ %i0 + 0x28 ], %o0 40007fec: 03 00 00 3f sethi %hi(0xfc00), %g1 40007ff0: e0 02 00 00 ld [ %o0 ], %l0 40007ff4: 10 80 00 10 b 40008034 <_Objects_Shrink_information+0xd8> 40007ff8: a6 10 63 ff or %g1, 0x3ff, %l3 */ do { index = _Objects_Get_index( the_object->id ); if ((index >= index_base) && 40007ffc: 82 04 40 01 add %l1, %g1, %g1 40008000: 80 a0 80 01 cmp %g2, %g1 40008004: 3a 80 00 12 bcc,a 4000804c <_Objects_Shrink_information+0xf0> 40008008: 90 10 00 10 mov %l0, %o0 if ( !_Chain_Is_last( &the_object->Node ) ) the_object = (Objects_Control *) the_object->Node.next; else the_object = NULL; _Chain_Extract( &extract_me->Node ); 4000800c: 40 00 12 e0 call 4000cb8c <_Chain_Extract> 40008010: 01 00 00 00 nop 40008014: 90 10 00 10 mov %l0, %o0 } else { the_object = (Objects_Control *) the_object->Node.next; } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 40008018: 80 a2 20 00 cmp %o0, 0 4000801c: 22 80 00 10 be,a 4000805c <_Objects_Shrink_information+0x100> 40008020: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_last( const Chain_Node *the_node ) { return (the_node->next == NULL); 40008024: e0 02 00 00 ld [ %o0 ], %l0 40008028: 80 a4 20 00 cmp %l0, 0 4000802c: 22 80 00 0c be,a 4000805c <_Objects_Shrink_information+0x100> 40008030: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 40008034: c2 02 20 08 ld [ %o0 + 8 ], %g1 40008038: 84 08 40 13 and %g1, %l3, %g2 */ do { index = _Objects_Get_index( the_object->id ); if ((index >= index_base) && 4000803c: 80 a0 80 11 cmp %g2, %l1 40008040: 3a bf ff ef bcc,a 40007ffc <_Objects_Shrink_information+0xa0> 40008044: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 the_object = NULL; _Chain_Extract( &extract_me->Node ); } else { the_object = (Objects_Control *) the_object->Node.next; 40008048: 90 10 00 10 mov %l0, %o0 } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 4000804c: 80 a2 20 00 cmp %o0, 0 40008050: 32 bf ff f6 bne,a 40008028 <_Objects_Shrink_information+0xcc> 40008054: e0 02 00 00 ld [ %o0 ], %l0 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 40008058: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 4000805c: 11 10 00 66 sethi %hi(0x40019800), %o0 40008060: d2 00 40 14 ld [ %g1 + %l4 ], %o1 40008064: 7f ff fc 99 call 400072c8 <_Heap_Free> 40008068: 90 12 23 5c or %o0, 0x35c, %o0 */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 4000806c: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 /* * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; 40008070: c8 06 20 24 ld [ %i0 + 0x24 ], %g4 information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 40008074: c0 24 80 02 clr [ %l2 + %g2 ] information->inactive -= information->allocation_size; 40008078: c2 16 20 34 lduh [ %i0 + 0x34 ], %g1 * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; 4000807c: c4 06 20 3c ld [ %i0 + 0x3c ], %g2 information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 40008080: c6 06 20 18 ld [ %i0 + 0x18 ], %g3 /* * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; 40008084: c0 25 00 04 clr [ %l4 + %g4 ] information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 40008088: 82 20 40 03 sub %g1, %g3, %g1 * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; 4000808c: c0 25 00 02 clr [ %l4 + %g2 ] information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 40008090: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 40008094: 81 c7 e0 08 ret 40008098: 81 e8 00 00 restore 4000809c <_Protected_heap_Allocate>: void *_Protected_heap_Allocate( Heap_Control *the_heap, size_t size ) { 4000809c: 9d e3 bf 98 save %sp, -104, %sp void *p; _RTEMS_Lock_allocator(); 400080a0: 7f ff e7 4e call 40001dd8 400080a4: 01 00 00 00 nop 400080a8: a4 10 00 08 mov %o0, %l2 400080ac: 23 10 00 66 sethi %hi(0x40019800), %l1 400080b0: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 400080b4: 80 a0 60 00 cmp %g1, 0 400080b8: 02 80 00 0b be 400080e4 <_Protected_heap_Allocate+0x48> 400080bc: 27 10 00 66 sethi %hi(0x40019800), %l3 400080c0: 03 10 00 67 sethi %hi(0x40019c00), %g1 400080c4: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> 400080c8: 80 a0 a0 01 cmp %g2, 1 400080cc: 08 80 00 06 bleu 400080e4 <_Protected_heap_Allocate+0x48> 400080d0: 90 10 20 00 clr %o0 400080d4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400080d8: 7f ff fd 7c call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 400080dc: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400080e0: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400080e4: 09 10 00 66 sethi %hi(0x40019800), %g4 400080e8: e0 04 e3 e4 ld [ %l3 + 0x3e4 ], %l0 400080ec: c4 01 23 ec ld [ %g4 + 0x3ec ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400080f0: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400080f4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400080f8: 80 a0 60 00 cmp %g1, 0 400080fc: 22 80 00 27 be,a 40008198 <_Protected_heap_Allocate+0xfc> 40008100: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40008104: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008108: c2 00 a0 08 ld [ %g2 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 4000810c: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40008110: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008114: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 40008118: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000811c: 80 a0 e0 02 cmp %g3, 2 40008120: 12 80 00 2d bne 400081d4 <_Protected_heap_Allocate+0x138> 40008124: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008128: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000812c: 80 a0 e0 03 cmp %g3, 3 the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008130: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008134: 02 80 00 46 be 4000824c <_Protected_heap_Allocate+0x1b0> 40008138: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 4000813c: 7f ff e7 2b call 40001de8 40008140: 90 10 00 12 mov %l2, %o0 p = _Heap_Allocate( the_heap, size ); 40008144: 90 10 00 18 mov %i0, %o0 40008148: 7f ff fc 2e call 40007200 <_Heap_Allocate> 4000814c: 92 10 00 19 mov %i1, %o1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008150: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40008154: b0 10 00 08 mov %o0, %i0 40008158: 82 00 60 01 inc %g1 4000815c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] _RTEMS_Unlock_allocator(); 40008160: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 40008164: 94 10 20 00 clr %o2 40008168: d2 02 20 08 ld [ %o0 + 8 ], %o1 4000816c: 7f ff fb 54 call 40006ebc <_CORE_mutex_Surrender> 40008170: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008174: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40008178: 82 00 7f ff add %g1, -1, %g1 4000817c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] 40008180: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 40008184: 80 a0 a0 00 cmp %g2, 0 40008188: 02 80 00 2d be 4000823c <_Protected_heap_Allocate+0x1a0> 4000818c: 01 00 00 00 nop return p; } 40008190: 81 c7 e0 08 ret 40008194: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40008198: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000819c: 12 80 00 16 bne 400081f4 <_Protected_heap_Allocate+0x158> <== NOT EXECUTED 400081a0: c6 04 e3 e4 ld [ %l3 + 0x3e4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400081a4: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 400081a8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400081ac: 22 80 00 43 be,a 400082b8 <_Protected_heap_Allocate+0x21c> <== NOT EXECUTED 400081b0: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400081b4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400081b8: 12 80 00 0f bne 400081f4 <_Protected_heap_Allocate+0x158> <== NOT EXECUTED 400081bc: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400081c0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400081c4: 7f ff e7 09 call 40001de8 <== NOT EXECUTED 400081c8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { void *p; _RTEMS_Lock_allocator(); p = _Heap_Allocate( the_heap, size ); 400081cc: 10 bf ff df b 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 400081d0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400081d4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400081d8: 12 bf ff d9 bne 4000813c <_Protected_heap_Allocate+0xa0> <== NOT EXECUTED 400081dc: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400081e0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400081e4: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400081e8: 02 80 00 19 be 4000824c <_Protected_heap_Allocate+0x1b0> <== NOT EXECUTED 400081ec: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 400081f0: 30 bf ff d3 b,a 4000813c <_Protected_heap_Allocate+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400081f4: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED size_t size ) { void *p; _RTEMS_Lock_allocator(); 400081f8: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 400081fc: c8 01 23 ec ld [ %g4 + 0x3ec ], %g4 <== NOT EXECUTED 40008200: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008204: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40008208: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 4000820c: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 40008210: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008214: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40008218: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 4000821c: 7f ff e6 f3 call 40001de8 <== NOT EXECUTED 40008220: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008224: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 40008228: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000822c: 7f ff fb 00 call 40006e2c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008230: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED p = _Heap_Allocate( the_heap, size ); 40008234: 10 bf ff c5 b 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40008238: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000823c: 40 00 03 c9 call 40009160 <_Thread_Dispatch> 40008240: 01 00 00 00 nop 40008244: 81 c7 e0 08 ret 40008248: 81 e8 00 00 restore */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 4000824c: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40008250: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40008254: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40008258: 02 80 00 28 be 400082f8 <_Protected_heap_Allocate+0x25c> <== NOT EXECUTED 4000825c: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40008260: 1a 80 00 1c bcc 400082d0 <_Protected_heap_Allocate+0x234> <== NOT EXECUTED 40008264: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008268: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 4000826c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008270: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40008274: 7f ff e6 dd call 40001de8 <== NOT EXECUTED 40008278: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 4000827c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40008280: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40008284: 40 00 02 93 call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 40008288: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000828c: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008290: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008294: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40008298: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 4000829c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400082a0: 32 bf ff aa bne,a 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 400082a4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 400082a8: 40 00 03 ae call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 400082ac: 01 00 00 00 nop <== NOT EXECUTED 400082b0: 10 bf ff a6 b 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 400082b4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 400082b8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400082bc: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400082c0: 7f ff e6 ca call 40001de8 <== NOT EXECUTED 400082c4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400082c8: 10 bf ff a0 b 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 400082cc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400082d0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400082d4: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400082d8: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 400082dc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400082e0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400082e4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400082e8: 7f ff e6 c0 call 40001de8 <== NOT EXECUTED 400082ec: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400082f0: 10 bf ff 96 b 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 400082f4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 400082f8: 7f ff e6 bc call 40001de8 <== NOT EXECUTED 400082fc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008300: 10 bf ff 92 b 40008148 <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40008304: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008308 <_Protected_heap_Extend>: boolean _Protected_heap_Extend( Heap_Control *the_heap, void *starting_address, size_t size ) { 40008308: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 4000830c: 7f ff e6 b3 call 40001dd8 <== NOT EXECUTED 40008310: 01 00 00 00 nop <== NOT EXECUTED 40008314: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 40008318: 23 10 00 66 sethi %hi(0x40019800), %l1 <== NOT EXECUTED 4000831c: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008320: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008324: 02 80 00 0b be 40008350 <_Protected_heap_Extend+0x48> <== NOT EXECUTED 40008328: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED 4000832c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008330: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> <== NOT EXECUTED 40008334: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40008338: 08 80 00 06 bleu 40008350 <_Protected_heap_Extend+0x48> <== NOT EXECUTED 4000833c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40008340: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008344: 7f ff fc e1 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 40008348: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4000834c: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40008350: 09 10 00 66 sethi %hi(0x40019800), %g4 <== NOT EXECUTED 40008354: e0 04 e3 e4 ld [ %l3 + 0x3e4 ], %l0 <== NOT EXECUTED 40008358: c4 01 23 ec ld [ %g4 + 0x3ec ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4000835c: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40008360: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40008364: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008368: 22 80 00 2d be,a 4000841c <_Protected_heap_Extend+0x114> <== NOT EXECUTED 4000836c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40008370: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008374: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40008378: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4000837c: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008380: c2 24 20 70 st %g1, [ %l0 + 0x70 ] <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 40008384: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008388: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 4000838c: 12 80 00 33 bne 40008458 <_Protected_heap_Extend+0x150> <== NOT EXECUTED 40008390: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008394: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008398: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000839c: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400083a0: 02 80 00 48 be 400084c0 <_Protected_heap_Extend+0x1b8> <== NOT EXECUTED 400083a4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400083a8: 7f ff e6 90 call 40001de8 <== NOT EXECUTED 400083ac: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 400083b0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400083b4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 400083b8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 400083bc: 40 00 12 2f call 4000cc78 <_Heap_Extend> <== NOT EXECUTED 400083c0: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400083c4: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400083c8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 400083cc: 82 00 60 01 inc %g1 <== NOT EXECUTED 400083d0: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 400083d4: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 400083d8: 94 10 20 00 clr %o2 <== NOT EXECUTED 400083dc: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 400083e0: 7f ff fa b7 call 40006ebc <_CORE_mutex_Surrender> <== NOT EXECUTED 400083e4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400083e8: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400083ec: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400083f0: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 400083f4: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 400083f8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400083fc: 12 80 00 05 bne 40008410 <_Protected_heap_Extend+0x108> <== NOT EXECUTED 40008400: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED _Thread_Dispatch(); 40008404: 40 00 03 57 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40008408: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_EXTEND_SUCCESSFUL); } 4000840c: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 40008410: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 40008414: 81 c7 e0 08 ret <== NOT EXECUTED 40008418: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 4000841c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40008420: 12 80 00 16 bne 40008478 <_Protected_heap_Extend+0x170> <== NOT EXECUTED 40008424: c6 04 e3 e4 ld [ %l3 + 0x3e4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40008428: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 4000842c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008430: 22 80 00 3f be,a 4000852c <_Protected_heap_Extend+0x224> <== NOT EXECUTED 40008434: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008438: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000843c: 12 80 00 0f bne 40008478 <_Protected_heap_Extend+0x170> <== NOT EXECUTED 40008440: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40008444: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40008448: 7f ff e6 68 call 40001de8 <== NOT EXECUTED 4000844c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED { Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 40008450: 10 bf ff d9 b 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40008454: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008458: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000845c: 12 bf ff d3 bne 400083a8 <_Protected_heap_Extend+0xa0> <== NOT EXECUTED 40008460: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008464: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008468: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000846c: 02 80 00 15 be 400084c0 <_Protected_heap_Extend+0x1b8> <== NOT EXECUTED 40008470: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40008474: 30 bf ff cd b,a 400083a8 <_Protected_heap_Extend+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008478: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED ) { Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 4000847c: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40008480: c8 01 23 ec ld [ %g4 + 0x3ec ], %g4 <== NOT EXECUTED 40008484: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008488: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 4000848c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40008490: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40008494: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008498: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 4000849c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 400084a0: 7f ff e6 52 call 40001de8 <== NOT EXECUTED 400084a4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400084a8: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 400084ac: 92 10 20 00 clr %o1 <== NOT EXECUTED 400084b0: 7f ff fa 5f call 40006e2c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 400084b4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 400084b8: 10 bf ff bf b 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 400084bc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 400084c0: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400084c4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400084c8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400084cc: 02 80 00 28 be 4000856c <_Protected_heap_Extend+0x264> <== NOT EXECUTED 400084d0: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 400084d4: 1a 80 00 1c bcc 40008544 <_Protected_heap_Extend+0x23c> <== NOT EXECUTED 400084d8: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 400084dc: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400084e0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400084e4: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400084e8: 7f ff e6 40 call 40001de8 <== NOT EXECUTED 400084ec: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 400084f0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 400084f4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 400084f8: 40 00 01 f6 call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 400084fc: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008500: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008504: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008508: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 4000850c: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 40008510: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40008514: 32 bf ff a8 bne,a 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40008518: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000851c: 40 00 03 11 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40008520: 01 00 00 00 nop <== NOT EXECUTED 40008524: 10 bf ff a4 b 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40008528: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 4000852c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008530: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40008534: 7f ff e6 2d call 40001de8 <== NOT EXECUTED 40008538: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000853c: 10 bf ff 9e b 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40008540: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40008544: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008548: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000854c: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40008550: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008554: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008558: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000855c: 7f ff e6 23 call 40001de8 <== NOT EXECUTED 40008560: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008564: 10 bf ff 94 b 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40008568: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4000856c: 7f ff e6 1f call 40001de8 <== NOT EXECUTED 40008570: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008574: 10 bf ff 90 b 400083b4 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40008578: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000857c <_Protected_heap_Free>: boolean _Protected_heap_Free( Heap_Control *the_heap, void *start_address ) { 4000857c: 9d e3 bf 98 save %sp, -104, %sp boolean status; _RTEMS_Lock_allocator(); 40008580: 7f ff e6 16 call 40001dd8 40008584: 01 00 00 00 nop 40008588: a4 10 00 08 mov %o0, %l2 4000858c: 23 10 00 66 sethi %hi(0x40019800), %l1 40008590: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 40008594: 80 a0 60 00 cmp %g1, 0 40008598: 02 80 00 0b be 400085c4 <_Protected_heap_Free+0x48> 4000859c: 27 10 00 66 sethi %hi(0x40019800), %l3 400085a0: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400085a4: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> <== NOT EXECUTED 400085a8: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 400085ac: 08 80 00 06 bleu 400085c4 <_Protected_heap_Free+0x48> <== NOT EXECUTED 400085b0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400085b4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400085b8: 7f ff fc 44 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 400085bc: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400085c0: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400085c4: 09 10 00 66 sethi %hi(0x40019800), %g4 400085c8: e0 04 e3 e4 ld [ %l3 + 0x3e4 ], %l0 400085cc: c4 01 23 ec ld [ %g4 + 0x3ec ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400085d0: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400085d4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400085d8: 80 a0 60 00 cmp %g1, 0 400085dc: 22 80 00 27 be,a 40008678 <_Protected_heap_Free+0xfc> 400085e0: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400085e4: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400085e8: c2 00 a0 08 ld [ %g2 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 400085ec: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 400085f0: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400085f4: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 400085f8: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400085fc: 80 a0 e0 02 cmp %g3, 2 40008600: 12 80 00 2d bne 400086b4 <_Protected_heap_Free+0x138> 40008604: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008608: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000860c: 80 a0 e0 03 cmp %g3, 3 the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008610: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008614: 02 80 00 46 be 4000872c <_Protected_heap_Free+0x1b0> 40008618: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 4000861c: 7f ff e5 f3 call 40001de8 40008620: 90 10 00 12 mov %l2, %o0 status = _Heap_Free( the_heap, start_address ); 40008624: 90 10 00 18 mov %i0, %o0 40008628: 7f ff fb 28 call 400072c8 <_Heap_Free> 4000862c: 92 10 00 19 mov %i1, %o1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008630: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40008634: b0 10 00 08 mov %o0, %i0 40008638: 82 00 60 01 inc %g1 4000863c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] _RTEMS_Unlock_allocator(); 40008640: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 40008644: 94 10 20 00 clr %o2 40008648: d2 02 20 08 ld [ %o0 + 8 ], %o1 4000864c: 7f ff fa 1c call 40006ebc <_CORE_mutex_Surrender> 40008650: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008654: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40008658: 82 00 7f ff add %g1, -1, %g1 4000865c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] 40008660: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 40008664: 80 a0 a0 00 cmp %g2, 0 40008668: 02 80 00 2d be 4000871c <_Protected_heap_Free+0x1a0> 4000866c: 01 00 00 00 nop return status; } 40008670: 81 c7 e0 08 ret <== NOT EXECUTED 40008674: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40008678: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000867c: 12 80 00 16 bne 400086d4 <_Protected_heap_Free+0x158> <== NOT EXECUTED 40008680: c6 04 e3 e4 ld [ %l3 + 0x3e4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40008684: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40008688: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000868c: 22 80 00 43 be,a 40008798 <_Protected_heap_Free+0x21c> <== NOT EXECUTED 40008690: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008694: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008698: 12 80 00 0f bne 400086d4 <_Protected_heap_Free+0x158> <== NOT EXECUTED 4000869c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400086a0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400086a4: 7f ff e5 d1 call 40001de8 <== NOT EXECUTED 400086a8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { boolean status; _RTEMS_Lock_allocator(); status = _Heap_Free( the_heap, start_address ); 400086ac: 10 bf ff df b 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 400086b0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400086b4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400086b8: 12 bf ff d9 bne 4000861c <_Protected_heap_Free+0xa0> <== NOT EXECUTED 400086bc: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400086c0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400086c4: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400086c8: 02 80 00 19 be 4000872c <_Protected_heap_Free+0x1b0> <== NOT EXECUTED 400086cc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 400086d0: 30 bf ff d3 b,a 4000861c <_Protected_heap_Free+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400086d4: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED void *start_address ) { boolean status; _RTEMS_Lock_allocator(); 400086d8: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 400086dc: c8 01 23 ec ld [ %g4 + 0x3ec ], %g4 <== NOT EXECUTED 400086e0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400086e4: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 400086e8: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 400086ec: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 400086f0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400086f4: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 400086f8: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 400086fc: 7f ff e5 bb call 40001de8 <== NOT EXECUTED 40008700: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008704: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 40008708: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000870c: 7f ff f9 c8 call 40006e2c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008710: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Free( the_heap, start_address ); 40008714: 10 bf ff c5 b 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 40008718: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000871c: 40 00 02 91 call 40009160 <_Thread_Dispatch> 40008720: 01 00 00 00 nop 40008724: 81 c7 e0 08 ret 40008728: 81 e8 00 00 restore */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 4000872c: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40008730: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40008734: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40008738: 02 80 00 28 be 400087d8 <_Protected_heap_Free+0x25c> <== NOT EXECUTED 4000873c: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40008740: 1a 80 00 1c bcc 400087b0 <_Protected_heap_Free+0x234> <== NOT EXECUTED 40008744: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008748: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 4000874c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008750: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40008754: 7f ff e5 a5 call 40001de8 <== NOT EXECUTED 40008758: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 4000875c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40008760: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40008764: 40 00 01 5b call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 40008768: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000876c: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008770: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008774: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40008778: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 4000877c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40008780: 32 bf ff aa bne,a 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 40008784: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40008788: 40 00 02 76 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 4000878c: 01 00 00 00 nop <== NOT EXECUTED 40008790: 10 bf ff a6 b 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 40008794: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40008798: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000879c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400087a0: 7f ff e5 92 call 40001de8 <== NOT EXECUTED 400087a4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400087a8: 10 bf ff a0 b 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 400087ac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400087b0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400087b4: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400087b8: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 400087bc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400087c0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400087c4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400087c8: 7f ff e5 88 call 40001de8 <== NOT EXECUTED 400087cc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400087d0: 10 bf ff 96 b 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 400087d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 400087d8: 7f ff e5 84 call 40001de8 <== NOT EXECUTED 400087dc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400087e0: 10 bf ff 92 b 40008628 <_Protected_heap_Free+0xac> <== NOT EXECUTED 400087e4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400087e8 <_Protected_heap_Get_block_size>: boolean _Protected_heap_Get_block_size( Heap_Control *the_heap, void *starting_address, size_t *size ) { 400087e8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED boolean status; _RTEMS_Lock_allocator(); 400087ec: 7f ff e5 7b call 40001dd8 <== NOT EXECUTED 400087f0: 01 00 00 00 nop <== NOT EXECUTED 400087f4: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 400087f8: 23 10 00 66 sethi %hi(0x40019800), %l1 <== NOT EXECUTED 400087fc: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008800: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008804: 02 80 00 0b be 40008830 <_Protected_heap_Get_block_size+0x48> <== NOT EXECUTED 40008808: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED 4000880c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008810: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> <== NOT EXECUTED 40008814: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40008818: 08 80 00 06 bleu 40008830 <_Protected_heap_Get_block_size+0x48> <== NOT EXECUTED 4000881c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40008820: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008824: 7f ff fb a9 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 40008828: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4000882c: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40008830: 09 10 00 66 sethi %hi(0x40019800), %g4 <== NOT EXECUTED 40008834: e0 04 e3 e4 ld [ %l3 + 0x3e4 ], %l0 <== NOT EXECUTED 40008838: c4 01 23 ec ld [ %g4 + 0x3ec ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4000883c: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40008840: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40008844: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008848: 22 80 00 28 be,a 400088e8 <_Protected_heap_Get_block_size+0x100> <== NOT EXECUTED 4000884c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40008850: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008854: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40008858: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4000885c: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008860: c2 24 20 70 st %g1, [ %l0 + 0x70 ] <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 40008864: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008868: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 4000886c: 12 80 00 2e bne 40008924 <_Protected_heap_Get_block_size+0x13c> <== NOT EXECUTED 40008870: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008874: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008878: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000887c: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008880: 02 80 00 47 be 4000899c <_Protected_heap_Get_block_size+0x1b4> <== NOT EXECUTED 40008884: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008888: 7f ff e5 58 call 40001de8 <== NOT EXECUTED 4000888c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 40008890: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008894: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40008898: 40 00 11 b9 call 4000cf7c <_Heap_Size_of_user_area> <== NOT EXECUTED 4000889c: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400088a0: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400088a4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 400088a8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400088ac: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 400088b0: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 400088b4: 94 10 20 00 clr %o2 <== NOT EXECUTED 400088b8: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 400088bc: 7f ff f9 80 call 40006ebc <_CORE_mutex_Surrender> <== NOT EXECUTED 400088c0: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400088c4: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400088c8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400088cc: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 400088d0: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 400088d4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400088d8: 02 80 00 2d be 4000898c <_Protected_heap_Get_block_size+0x1a4> <== NOT EXECUTED 400088dc: 01 00 00 00 nop <== NOT EXECUTED return status; } 400088e0: 81 c7 e0 08 ret <== NOT EXECUTED 400088e4: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 400088e8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400088ec: 12 80 00 16 bne 40008944 <_Protected_heap_Get_block_size+0x15c> <== NOT EXECUTED 400088f0: c6 04 e3 e4 ld [ %l3 + 0x3e4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400088f4: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 400088f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400088fc: 22 80 00 43 be,a 40008a08 <_Protected_heap_Get_block_size+0x220> <== NOT EXECUTED 40008900: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008904: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008908: 12 80 00 0f bne 40008944 <_Protected_heap_Get_block_size+0x15c> <== NOT EXECUTED 4000890c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40008910: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40008914: 7f ff e5 35 call 40001de8 <== NOT EXECUTED 40008918: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { boolean status; _RTEMS_Lock_allocator(); status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 4000891c: 10 bf ff de b 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40008920: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008924: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40008928: 12 bf ff d8 bne 40008888 <_Protected_heap_Get_block_size+0xa0> <== NOT EXECUTED 4000892c: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008930: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008934: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008938: 02 80 00 19 be 4000899c <_Protected_heap_Get_block_size+0x1b4> <== NOT EXECUTED 4000893c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40008940: 30 bf ff d2 b,a 40008888 <_Protected_heap_Get_block_size+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008944: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED size_t *size ) { boolean status; _RTEMS_Lock_allocator(); 40008948: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 4000894c: c8 01 23 ec ld [ %g4 + 0x3ec ], %g4 <== NOT EXECUTED 40008950: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008954: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40008958: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 4000895c: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40008960: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008964: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40008968: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 4000896c: 7f ff e5 1f call 40001de8 <== NOT EXECUTED 40008970: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008974: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 40008978: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000897c: 7f ff f9 2c call 40006e2c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008980: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 40008984: 10 bf ff c4 b 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40008988: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000898c: 40 00 01 f5 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40008990: 01 00 00 00 nop <== NOT EXECUTED 40008994: 81 c7 e0 08 ret <== NOT EXECUTED 40008998: 81 e8 00 00 restore <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 4000899c: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400089a0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400089a4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400089a8: 02 80 00 28 be 40008a48 <_Protected_heap_Get_block_size+0x260> <== NOT EXECUTED 400089ac: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 400089b0: 1a 80 00 1c bcc 40008a20 <_Protected_heap_Get_block_size+0x238> <== NOT EXECUTED 400089b4: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400089b8: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400089bc: 82 00 60 01 inc %g1 <== NOT EXECUTED 400089c0: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400089c4: 7f ff e5 09 call 40001de8 <== NOT EXECUTED 400089c8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 400089cc: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 400089d0: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 400089d4: 40 00 00 bf call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 400089d8: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400089dc: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 400089e0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400089e4: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 400089e8: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 400089ec: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400089f0: 32 bf ff a9 bne,a 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 400089f4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 400089f8: 40 00 01 da call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 400089fc: 01 00 00 00 nop <== NOT EXECUTED 40008a00: 10 bf ff a5 b 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40008a04: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40008a08: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008a0c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40008a10: 7f ff e4 f6 call 40001de8 <== NOT EXECUTED 40008a14: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008a18: 10 bf ff 9f b 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40008a1c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40008a20: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008a24: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40008a28: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40008a2c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008a30: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008a34: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008a38: 7f ff e4 ec call 40001de8 <== NOT EXECUTED 40008a3c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008a40: 10 bf ff 95 b 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40008a44: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40008a48: 7f ff e4 e8 call 40001de8 <== NOT EXECUTED 40008a4c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008a50: 10 bf ff 91 b 40008894 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40008a54: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c234 <_Protected_heap_Get_free_information>: void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { 4000c234: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _RTEMS_Lock_allocator(); 4000c238: 7f ff de 9b call 40003ca4 <== NOT EXECUTED 4000c23c: 01 00 00 00 nop <== NOT EXECUTED 4000c240: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 4000c244: 23 10 00 f4 sethi %hi(0x4003d000), %l1 <== NOT EXECUTED 4000c248: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 ! 4003d0a0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000c24c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c250: 02 80 00 0b be 4000c27c <_Protected_heap_Get_free_information+0x48> <== NOT EXECUTED 4000c254: 27 10 00 f4 sethi %hi(0x4003d000), %l3 <== NOT EXECUTED 4000c258: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED 4000c25c: c4 00 62 80 ld [ %g1 + 0x280 ], %g2 ! 4003d280 <_System_state_Current> <== NOT EXECUTED 4000c260: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 4000c264: 08 80 00 06 bleu 4000c27c <_Protected_heap_Get_free_information+0x48> <== NOT EXECUTED 4000c268: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000c26c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c270: 7f ff fb 49 call 4000af94 <_Internal_error_Occurred> <== NOT EXECUTED 4000c274: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4000c278: 27 10 00 f4 sethi %hi(0x4003d000), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 4000c27c: 09 10 00 f4 sethi %hi(0x4003d000), %g4 <== NOT EXECUTED 4000c280: e0 04 e1 74 ld [ %l3 + 0x174 ], %l0 <== NOT EXECUTED 4000c284: c4 01 21 7c ld [ %g4 + 0x17c ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4000c288: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 4000c28c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 4000c290: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c294: 22 80 00 26 be,a 4000c32c <_Protected_heap_Get_free_information+0xf8> <== NOT EXECUTED 4000c298: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 4000c29c: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000c2a0: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 4000c2a4: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4000c2a8: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000c2ac: c2 24 20 70 st %g1, [ %l0 + 0x70 ] <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 4000c2b0: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000c2b4: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 4000c2b8: 12 80 00 2c bne 4000c368 <_Protected_heap_Get_free_information+0x134> <== NOT EXECUTED 4000c2bc: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000c2c0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000c2c4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000c2c8: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000c2cc: 02 80 00 43 be 4000c3d8 <_Protected_heap_Get_free_information+0x1a4> <== NOT EXECUTED 4000c2d0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000c2d4: 7f ff de 78 call 40003cb4 <== NOT EXECUTED 4000c2d8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 4000c2dc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c2e0: 40 00 3a 2e call 4001ab98 <_Heap_Get_free_information> <== NOT EXECUTED 4000c2e4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000c2e8: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 4000c2ec: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c2f0: c2 24 60 a0 st %g1, [ %l1 + 0xa0 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 4000c2f4: d0 04 e1 74 ld [ %l3 + 0x174 ], %o0 <== NOT EXECUTED 4000c2f8: 94 10 20 00 clr %o2 <== NOT EXECUTED 4000c2fc: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4000c300: 7f ff f9 22 call 4000a788 <_CORE_mutex_Surrender> <== NOT EXECUTED 4000c304: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000c308: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 4000c30c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000c310: c2 24 60 a0 st %g1, [ %l1 + 0xa0 ] <== NOT EXECUTED 4000c314: c4 04 60 a0 ld [ %l1 + 0xa0 ], %g2 <== NOT EXECUTED 4000c318: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000c31c: 02 80 00 2d be 4000c3d0 <_Protected_heap_Get_free_information+0x19c> <== NOT EXECUTED 4000c320: 01 00 00 00 nop <== NOT EXECUTED 4000c324: 81 c7 e0 08 ret <== NOT EXECUTED 4000c328: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 4000c32c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000c330: 12 80 00 16 bne 4000c388 <_Protected_heap_Get_free_information+0x154> <== NOT EXECUTED 4000c334: c6 04 e1 74 ld [ %l3 + 0x174 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4000c338: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 4000c33c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c340: 22 80 00 41 be,a 4000c444 <_Protected_heap_Get_free_information+0x210> <== NOT EXECUTED 4000c344: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 4000c348: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000c34c: 12 80 00 0f bne 4000c388 <_Protected_heap_Get_free_information+0x154> <== NOT EXECUTED 4000c350: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 4000c354: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4000c358: 7f ff de 57 call 40003cb4 <== NOT EXECUTED 4000c35c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED Heap_Control *the_heap, Heap_Information *info ) { _RTEMS_Lock_allocator(); _Heap_Get_free_information( the_heap, info ); 4000c360: 10 bf ff e0 b 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c364: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000c368: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000c36c: 12 bf ff da bne 4000c2d4 <_Protected_heap_Get_free_information+0xa0> <== NOT EXECUTED 4000c370: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000c374: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000c378: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000c37c: 02 80 00 17 be 4000c3d8 <_Protected_heap_Get_free_information+0x1a4> <== NOT EXECUTED 4000c380: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 4000c384: 30 bf ff d4 b,a 4000c2d4 <_Protected_heap_Get_free_information+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000c388: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { _RTEMS_Lock_allocator(); 4000c38c: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 4000c390: c8 01 21 7c ld [ %g4 + 0x17c ], %g4 <== NOT EXECUTED 4000c394: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c398: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 4000c39c: c2 24 60 a0 st %g1, [ %l1 + 0xa0 ] <== NOT EXECUTED 4000c3a0: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 4000c3a4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 4000c3a8: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 4000c3ac: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 4000c3b0: 7f ff de 41 call 40003cb4 <== NOT EXECUTED 4000c3b4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000c3b8: d0 04 e1 74 ld [ %l3 + 0x174 ], %o0 <== NOT EXECUTED 4000c3bc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c3c0: 7f ff f8 ce call 4000a6f8 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 4000c3c4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 4000c3c8: 10 bf ff c6 b 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c3cc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000c3d0: 40 00 01 f3 call 4000cb9c <_Thread_Dispatch> <== NOT EXECUTED 4000c3d4: 81 e8 00 00 restore <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 4000c3d8: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 4000c3dc: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 4000c3e0: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000c3e4: 02 80 00 28 be 4000c484 <_Protected_heap_Get_free_information+0x250> <== NOT EXECUTED 4000c3e8: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 4000c3ec: 1a 80 00 1c bcc 4000c45c <_Protected_heap_Get_free_information+0x228> <== NOT EXECUTED 4000c3f0: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000c3f4: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 4000c3f8: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c3fc: c2 24 60 a0 st %g1, [ %l1 + 0xa0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 4000c400: 7f ff de 2d call 40003cb4 <== NOT EXECUTED 4000c404: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 4000c408: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 4000c40c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 4000c410: 40 00 00 bf call 4000c70c <_Thread_Change_priority> <== NOT EXECUTED 4000c414: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000c418: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 4000c41c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000c420: c2 24 60 a0 st %g1, [ %l1 + 0xa0 ] <== NOT EXECUTED 4000c424: c4 04 60 a0 ld [ %l1 + 0xa0 ], %g2 <== NOT EXECUTED 4000c428: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000c42c: 32 bf ff ad bne,a 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c430: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000c434: 40 00 01 da call 4000cb9c <_Thread_Dispatch> <== NOT EXECUTED 4000c438: 01 00 00 00 nop <== NOT EXECUTED 4000c43c: 10 bf ff a9 b 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c440: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 4000c444: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c448: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 4000c44c: 7f ff de 1a call 40003cb4 <== NOT EXECUTED 4000c450: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000c454: 10 bf ff a3 b 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c458: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 4000c45c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 4000c460: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000c464: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 4000c468: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000c46c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000c470: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000c474: 7f ff de 10 call 40003cb4 <== NOT EXECUTED 4000c478: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000c47c: 10 bf ff 99 b 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c480: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4000c484: 7f ff de 0c call 40003cb4 <== NOT EXECUTED 4000c488: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000c48c: 10 bf ff 95 b 4000c2e0 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000c490: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008a58 <_Protected_heap_Resize_block>: boolean _Protected_heap_Resize_block( Heap_Control *the_heap, void *starting_address, size_t size ) { 40008a58: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); 40008a5c: 7f ff e4 df call 40001dd8 <== NOT EXECUTED 40008a60: 01 00 00 00 nop <== NOT EXECUTED 40008a64: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 40008a68: 23 10 00 66 sethi %hi(0x40019800), %l1 <== NOT EXECUTED 40008a6c: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008a70: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008a74: 02 80 00 0b be 40008aa0 <_Protected_heap_Resize_block+0x48> <== NOT EXECUTED 40008a78: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED 40008a7c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008a80: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> <== NOT EXECUTED 40008a84: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40008a88: 08 80 00 06 bleu 40008aa0 <_Protected_heap_Resize_block+0x48> <== NOT EXECUTED 40008a8c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40008a90: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008a94: 7f ff fb 0d call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 40008a98: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40008a9c: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40008aa0: 09 10 00 66 sethi %hi(0x40019800), %g4 <== NOT EXECUTED 40008aa4: e0 04 e3 e4 ld [ %l3 + 0x3e4 ], %l0 <== NOT EXECUTED 40008aa8: c4 01 23 ec ld [ %g4 + 0x3ec ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40008aac: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40008ab0: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40008ab4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008ab8: 22 80 00 2e be,a 40008b70 <_Protected_heap_Resize_block+0x118> <== NOT EXECUTED 40008abc: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40008ac0: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008ac4: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40008ac8: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40008acc: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008ad0: c2 24 20 70 st %g1, [ %l0 + 0x70 ] <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 40008ad4: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008ad8: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 40008adc: 12 80 00 34 bne 40008bac <_Protected_heap_Resize_block+0x154> <== NOT EXECUTED 40008ae0: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008ae4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008ae8: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008aec: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008af0: 02 80 00 49 be 40008c14 <_Protected_heap_Resize_block+0x1bc> <== NOT EXECUTED 40008af4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008af8: 7f ff e4 bc call 40001de8 <== NOT EXECUTED 40008afc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED status = _Heap_Resize_block( 40008b00: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008b04: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40008b08: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40008b0c: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED 40008b10: 40 00 10 8d call 4000cd44 <_Heap_Resize_block> <== NOT EXECUTED 40008b14: 98 07 bf f0 add %fp, -16, %o4 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008b18: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008b1c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40008b20: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008b24: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED the_heap, starting_address, size, &old_mem_size, &avail_mem_size ); _RTEMS_Unlock_allocator(); 40008b28: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 40008b2c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40008b30: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40008b34: 7f ff f8 e2 call 40006ebc <_CORE_mutex_Surrender> <== NOT EXECUTED 40008b38: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008b3c: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008b40: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008b44: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40008b48: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 40008b4c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40008b50: 12 80 00 05 bne 40008b64 <_Protected_heap_Resize_block+0x10c> <== NOT EXECUTED 40008b54: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED _Thread_Dispatch(); 40008b58: 40 00 01 82 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40008b5c: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_RESIZE_SUCCESSFUL); } 40008b60: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 40008b64: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 40008b68: 81 c7 e0 08 ret <== NOT EXECUTED 40008b6c: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40008b70: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40008b74: 12 80 00 16 bne 40008bcc <_Protected_heap_Resize_block+0x174> <== NOT EXECUTED 40008b78: c6 04 e3 e4 ld [ %l3 + 0x3e4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40008b7c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40008b80: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008b84: 22 80 00 3f be,a 40008c80 <_Protected_heap_Resize_block+0x228> <== NOT EXECUTED 40008b88: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008b8c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008b90: 12 80 00 0f bne 40008bcc <_Protected_heap_Resize_block+0x174> <== NOT EXECUTED 40008b94: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40008b98: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40008b9c: 7f ff e4 93 call 40001de8 <== NOT EXECUTED 40008ba0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); status = _Heap_Resize_block( 40008ba4: 10 bf ff d8 b 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008ba8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008bac: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40008bb0: 12 bf ff d2 bne 40008af8 <_Protected_heap_Resize_block+0xa0> <== NOT EXECUTED 40008bb4: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008bb8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008bbc: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008bc0: 02 80 00 15 be 40008c14 <_Protected_heap_Resize_block+0x1bc> <== NOT EXECUTED 40008bc4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40008bc8: 30 bf ff cc b,a 40008af8 <_Protected_heap_Resize_block+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008bcc: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED { Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); 40008bd0: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40008bd4: c8 01 23 ec ld [ %g4 + 0x3ec ], %g4 <== NOT EXECUTED 40008bd8: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008bdc: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40008be0: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40008be4: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40008be8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008bec: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40008bf0: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40008bf4: 7f ff e4 7d call 40001de8 <== NOT EXECUTED 40008bf8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008bfc: d0 04 e3 e4 ld [ %l3 + 0x3e4 ], %o0 <== NOT EXECUTED 40008c00: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008c04: 7f ff f8 8a call 40006e2c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008c08: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Resize_block( 40008c0c: 10 bf ff be b 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008c10: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40008c14: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40008c18: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40008c1c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40008c20: 02 80 00 28 be 40008cc0 <_Protected_heap_Resize_block+0x268> <== NOT EXECUTED 40008c24: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40008c28: 1a 80 00 1c bcc 40008c98 <_Protected_heap_Resize_block+0x240> <== NOT EXECUTED 40008c2c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 40008c30: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008c34: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008c38: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40008c3c: 7f ff e4 6b call 40001de8 <== NOT EXECUTED 40008c40: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40008c44: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40008c48: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40008c4c: 40 00 00 21 call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 40008c50: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008c54: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40008c58: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008c5c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40008c60: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 40008c64: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40008c68: 32 bf ff a7 bne,a 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008c6c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40008c70: 40 00 01 3c call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40008c74: 01 00 00 00 nop <== NOT EXECUTED 40008c78: 10 bf ff a3 b 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008c7c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40008c80: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008c84: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40008c88: 7f ff e4 58 call 40001de8 <== NOT EXECUTED 40008c8c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008c90: 10 bf ff 9d b 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008c94: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40008c98: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008c9c: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40008ca0: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40008ca4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008ca8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008cac: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008cb0: 7f ff e4 4e call 40001de8 <== NOT EXECUTED 40008cb4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008cb8: 10 bf ff 93 b 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008cbc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40008cc0: 7f ff e4 4a call 40001de8 <== NOT EXECUTED 40008cc4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40008cc8: 10 bf ff 8f b 40008b04 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40008ccc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ca28 <_RTEMS_tasks_Delete_extension>: User_extensions_routine _RTEMS_tasks_Delete_extension( Thread_Control *executing, Thread_Control *deleted ) { 4000ca28: 9d e3 bf 98 save %sp, -104, %sp /* * Free per task variable memory */ tvp = deleted->task_variables; 4000ca2c: e0 06 61 7c ld [ %i1 + 0x17c ], %l0 deleted->task_variables = NULL; 4000ca30: c0 26 61 7c clr [ %i1 + 0x17c ] while (tvp) { 4000ca34: 80 a4 20 00 cmp %l0, 0 4000ca38: 02 80 00 25 be 4000cacc <_RTEMS_tasks_Delete_extension+0xa4> 4000ca3c: 29 10 00 66 sethi %hi(0x40019800), %l4 4000ca40: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED 4000ca44: 10 80 00 12 b 4000ca8c <_RTEMS_tasks_Delete_extension+0x64> <== NOT EXECUTED 4000ca48: a4 15 23 5c or %l4, 0x35c, %l2 <== NOT EXECUTED next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { if (tvp->dtor) 4000ca4c: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 <== NOT EXECUTED 4000ca50: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000ca54: 22 80 00 06 be,a 4000ca6c <_RTEMS_tasks_Delete_extension+0x44> <== NOT EXECUTED 4000ca58: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED (*tvp->dtor)(*tvp->ptr); 4000ca5c: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 4000ca60: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000ca64: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 4000ca68: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 4000ca6c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000ca70: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4000ca74: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000ca78: 7f ff ea 14 call 400072c8 <_Heap_Free> <== NOT EXECUTED 4000ca7c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; while (tvp) { 4000ca80: a0 94 60 00 orcc %l1, 0, %l0 <== NOT EXECUTED 4000ca84: 22 80 00 13 be,a 4000cad0 <_RTEMS_tasks_Delete_extension+0xa8> <== NOT EXECUTED 4000ca88: d2 06 61 6c ld [ %i1 + 0x16c ], %o1 <== NOT EXECUTED next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { 4000ca8c: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED 4000ca90: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4000ca94: 02 bf ff ee be 4000ca4c <_RTEMS_tasks_Delete_extension+0x24> <== NOT EXECUTED 4000ca98: e2 04 00 00 ld [ %l0 ], %l1 <== NOT EXECUTED if (tvp->dtor) (*tvp->dtor)(*tvp->ptr); *tvp->ptr = tvp->gval; } else { if (tvp->dtor) 4000ca9c: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 <== NOT EXECUTED 4000caa0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000caa4: 02 bf ff f5 be 4000ca78 <_RTEMS_tasks_Delete_extension+0x50> <== NOT EXECUTED 4000caa8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 4000caac: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000cab0: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED 4000cab4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000cab8: 7f ff ea 04 call 400072c8 <_Heap_Free> <== NOT EXECUTED 4000cabc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; while (tvp) { 4000cac0: a0 94 60 00 orcc %l1, 0, %l0 <== NOT EXECUTED 4000cac4: 12 bf ff f3 bne 4000ca90 <_RTEMS_tasks_Delete_extension+0x68> <== NOT EXECUTED 4000cac8: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED 4000cacc: d2 06 61 6c ld [ %i1 + 0x16c ], %o1 4000cad0: 7f ff e9 fe call 400072c8 <_Heap_Free> 4000cad4: 90 15 23 5c or %l4, 0x35c, %o0 /* * Free API specific memory */ (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] ); deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL; 4000cad8: c0 26 61 6c clr [ %i1 + 0x16c ] } 4000cadc: 81 c7 e0 08 ret 4000cae0: 81 e8 00 00 restore 4000651c <_RTEMS_tasks_Initialize_user_tasks_body>: * * Output parameters: NONE */ void _RTEMS_tasks_Initialize_user_tasks_body( void ) { 4000651c: 9d e3 bf 90 save %sp, -112, %sp rtems_status_code return_value; rtems_initialization_tasks_table *user_tasks; rtems_api_configuration_table *api_configuration; api_configuration = _Configuration_Table->RTEMS_api_configuration; 40006520: 03 10 00 66 sethi %hi(0x40019800), %g1 40006524: c4 00 63 d0 ld [ %g1 + 0x3d0 ], %g2 ! 40019bd0 <_Configuration_Table> 40006528: c6 00 a0 2c ld [ %g2 + 0x2c ], %g3 /* * NOTE: This is slightly different from the Ada implementation. */ user_tasks = api_configuration->User_initialization_tasks_table; 4000652c: d0 00 e0 28 ld [ %g3 + 0x28 ], %o0 maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) 40006530: 80 a2 20 00 cmp %o0, 0 40006534: 02 80 00 2f be 400065f0 <_RTEMS_tasks_Initialize_user_tasks_body+0xd4> 40006538: e4 00 e0 24 ld [ %g3 + 0x24 ], %l2 4000653c: 80 a4 a0 00 cmp %l2, 0 40006540: 02 80 00 2c be 400065f0 <_RTEMS_tasks_Initialize_user_tasks_body+0xd4> 40006544: a0 10 00 08 mov %o0, %l0 return; for ( index=0 ; index < maximum ; index++ ) { 40006548: a2 10 20 00 clr %l1 4000654c: 10 80 00 0c b 4000657c <_RTEMS_tasks_Initialize_user_tasks_body+0x60> 40006550: a6 07 bf f4 add %fp, -12, %l3 ); if ( !rtems_is_status_successful( return_value ) ) _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); return_value = rtems_task_start( 40006554: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 40006558: d0 07 bf f4 ld [ %fp + -12 ], %o0 4000655c: 40 00 00 27 call 400065f8 40006560: a2 04 60 01 inc %l1 id, user_tasks[ index ].entry_point, user_tasks[ index ].argument ); if ( !rtems_is_status_successful( return_value ) ) 40006564: 80 a2 20 00 cmp %o0, 0 40006568: 12 80 00 1c bne 400065d8 <_RTEMS_tasks_Initialize_user_tasks_body+0xbc> 4000656c: 94 10 00 08 mov %o0, %o2 maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) return; for ( index=0 ; index < maximum ; index++ ) { 40006570: 80 a4 40 12 cmp %l1, %l2 40006574: 02 80 00 1f be 400065f0 <_RTEMS_tasks_Initialize_user_tasks_body+0xd4> 40006578: a0 04 20 1c add %l0, 0x1c, %l0 return_value = rtems_task_create( 4000657c: d6 04 20 14 ld [ %l0 + 0x14 ], %o3 40006580: d8 04 20 0c ld [ %l0 + 0xc ], %o4 40006584: d2 04 20 08 ld [ %l0 + 8 ], %o1 40006588: d4 04 20 04 ld [ %l0 + 4 ], %o2 4000658c: d0 04 00 00 ld [ %l0 ], %o0 40006590: 7f ff ff 1a call 400061f8 40006594: 9a 10 00 13 mov %l3, %o5 user_tasks[ index ].mode_set, user_tasks[ index ].attribute_set, &id ); if ( !rtems_is_status_successful( return_value ) ) 40006598: 80 a2 20 00 cmp %o0, 0 4000659c: 22 bf ff ee be,a 40006554 <_RTEMS_tasks_Initialize_user_tasks_body+0x38> 400065a0: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 400065a4: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 400065a8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 400065ac: 40 00 04 47 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 400065b0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED return_value = rtems_task_start( 400065b4: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 400065b8: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 <== NOT EXECUTED 400065bc: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED 400065c0: 40 00 00 0e call 400065f8 <== NOT EXECUTED 400065c4: a2 04 60 01 inc %l1 <== NOT EXECUTED id, user_tasks[ index ].entry_point, user_tasks[ index ].argument ); if ( !rtems_is_status_successful( return_value ) ) 400065c8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400065cc: 02 bf ff ea be 40006574 <_RTEMS_tasks_Initialize_user_tasks_body+0x58> <== NOT EXECUTED 400065d0: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 400065d4: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 400065d8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 400065dc: 40 00 04 3b call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 400065e0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) return; for ( index=0 ; index < maximum ; index++ ) { 400065e4: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED 400065e8: 12 bf ff e5 bne 4000657c <_RTEMS_tasks_Initialize_user_tasks_body+0x60> <== NOT EXECUTED 400065ec: a0 04 20 1c add %l0, 0x1c, %l0 <== NOT EXECUTED 400065f0: 81 c7 e0 08 ret 400065f4: 81 e8 00 00 restore 4000c938 <_RTEMS_tasks_Post_switch_extension>: */ void _RTEMS_tasks_Post_switch_extension( Thread_Control *executing ) { 4000c938: 9d e3 bf 90 save %sp, -112, %sp * Signal Processing */ asr = &api->Signal; _ISR_Disable( level ); 4000c93c: 7f ff d5 27 call 40001dd8 4000c940: f0 06 21 6c ld [ %i0 + 0x16c ], %i0 signal_set = asr->signals_posted; 4000c944: e4 06 20 54 ld [ %i0 + 0x54 ], %l2 asr->signals_posted = 0; 4000c948: c0 26 20 54 clr [ %i0 + 0x54 ] _ISR_Enable( level ); 4000c94c: 7f ff d5 27 call 40001de8 4000c950: 01 00 00 00 nop if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ 4000c954: 80 a4 a0 00 cmp %l2, 0 4000c958: 32 80 00 04 bne,a 4000c968 <_RTEMS_tasks_Post_switch_extension+0x30> 4000c95c: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 4000c960: 81 c7 e0 08 ret <== NOT EXECUTED 4000c964: 81 e8 00 00 restore <== NOT EXECUTED return; asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000c968: d0 06 20 50 ld [ %i0 + 0x50 ], %o0 if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ return; asr->nest_level += 1; 4000c96c: 82 00 60 01 inc %g1 rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000c970: a2 07 bf f4 add %fp, -12, %l1 if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ return; asr->nest_level += 1; 4000c974: c2 26 20 5c st %g1, [ %i0 + 0x5c ] rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000c978: 94 10 00 11 mov %l1, %o2 4000c97c: 21 00 00 3f sethi %hi(0xfc00), %l0 4000c980: 40 00 04 5a call 4000dae8 4000c984: 92 14 23 ff or %l0, 0x3ff, %o1 ! ffff (*asr->handler)( signal_set ); 4000c988: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 4000c98c: 9f c0 40 00 call %g1 4000c990: 90 10 00 12 mov %l2, %o0 asr->nest_level -= 1; 4000c994: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000c998: d0 07 bf f4 ld [ %fp + -12 ], %o0 asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); (*asr->handler)( signal_set ); asr->nest_level -= 1; 4000c99c: 82 00 7f ff add %g1, -1, %g1 rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000c9a0: 92 14 23 ff or %l0, 0x3ff, %o1 asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); (*asr->handler)( signal_set ); asr->nest_level -= 1; 4000c9a4: c2 26 20 5c st %g1, [ %i0 + 0x5c ] rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000c9a8: 40 00 04 50 call 4000dae8 4000c9ac: 94 10 00 11 mov %l1, %o2 4000c9b0: 81 c7 e0 08 ret 4000c9b4: 81 e8 00 00 restore 400071dc <_Rate_monotonic_Timeout>: void _Rate_monotonic_Timeout( Objects_Id id, void *ignored ) { 400071dc: 9d e3 bf 90 save %sp, -112, %sp 400071e0: 11 10 00 78 sethi %hi(0x4001e000), %o0 400071e4: 92 10 00 18 mov %i0, %o1 400071e8: 90 12 21 b8 or %o0, 0x1b8, %o0 400071ec: 40 00 09 a7 call 40009888 <_Objects_Get> 400071f0: 94 07 bf f4 add %fp, -12, %o2 * When we get here, the Timer is already off the chain so we do not * have to worry about that -- hence no _Watchdog_Remove(). */ the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 400071f4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400071f8: 80 a0 60 00 cmp %g1, 0 400071fc: 12 80 00 11 bne 40007240 <_Rate_monotonic_Timeout+0x64> 40007200: b0 10 00 08 mov %o0, %i0 case OBJECTS_REMOTE: /* impossible */ case OBJECTS_ERROR: break; case OBJECTS_LOCAL: the_thread = the_period->owner; 40007204: d0 02 20 50 ld [ %o0 + 0x50 ], %o0 if ( _States_Is_waiting_for_period( the_thread->current_state ) && 40007208: 03 00 00 10 sethi %hi(0x4000), %g1 4000720c: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 40007210: 80 88 80 01 btst %g2, %g1 40007214: 32 80 00 0d bne,a 40007248 <_Rate_monotonic_Timeout+0x6c> 40007218: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 the_thread->Wait.id == the_period->Object.id ) { _Thread_Unblock( the_thread ); _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); } else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) { 4000721c: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 40007220: 80 a0 60 01 cmp %g1, 1 40007224: 02 80 00 17 be 40007280 <_Rate_monotonic_Timeout+0xa4> 40007228: 82 10 20 04 mov 4, %g1 the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING; _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); } else the_period->state = RATE_MONOTONIC_EXPIRED; 4000722c: c2 26 20 38 st %g1, [ %i0 + 0x38 ] */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 40007230: 05 10 00 78 sethi %hi(0x4001e000), %g2 40007234: c2 00 a3 50 ld [ %g2 + 0x350 ], %g1 ! 4001e350 <_Thread_Dispatch_disable_level> 40007238: 82 00 7f ff add %g1, -1, %g1 4000723c: c2 20 a3 50 st %g1, [ %g2 + 0x350 ] 40007240: 81 c7 e0 08 ret 40007244: 81 e8 00 00 restore case OBJECTS_ERROR: break; case OBJECTS_LOCAL: the_thread = the_period->owner; if ( _States_Is_waiting_for_period( the_thread->current_state ) && 40007248: c2 06 20 08 ld [ %i0 + 8 ], %g1 4000724c: 80 a0 80 01 cmp %g2, %g1 40007250: 32 bf ff f4 bne,a 40007220 <_Rate_monotonic_Timeout+0x44> 40007254: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 40007258: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000725c: 40 00 0d fe call 4000aa54 <_Thread_Clear_state> 40007260: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40007264: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007268: 92 06 20 10 add %i0, 0x10, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4000726c: c2 26 20 1c st %g1, [ %i0 + 0x1c ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007270: 11 10 00 79 sethi %hi(0x4001e400), %o0 40007274: 40 00 14 33 call 4000c340 <_Watchdog_Insert> 40007278: 90 12 20 4c or %o0, 0x4c, %o0 ! 4001e44c <_Watchdog_Ticks_chain> 4000727c: 30 bf ff ed b,a 40007230 <_Rate_monotonic_Timeout+0x54> Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40007280: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED the_thread->Wait.id == the_period->Object.id ) { _Thread_Unblock( the_thread ); _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); } else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) { the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING; 40007284: 84 10 20 03 mov 3, %g2 <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007288: 92 06 20 10 add %i0, 0x10, %o1 <== NOT EXECUTED Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4000728c: c2 26 20 1c st %g1, [ %i0 + 0x1c ] <== NOT EXECUTED 40007290: c4 26 20 38 st %g2, [ %i0 + 0x38 ] <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007294: 11 10 00 79 sethi %hi(0x4001e400), %o0 <== NOT EXECUTED 40007298: 40 00 14 2a call 4000c340 <_Watchdog_Insert> <== NOT EXECUTED 4000729c: 90 12 20 4c or %o0, 0x4c, %o0 ! 4001e44c <_Watchdog_Ticks_chain> <== NOT EXECUTED 400072a0: 30 bf ff e4 b,a 40007230 <_Rate_monotonic_Timeout+0x54> <== NOT EXECUTED 4001a5d8 <_Region_Process_queue>: */ void _Region_Process_queue( Region_Control *the_region ) { 4001a5d8: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001a5dc: 27 10 00 cd sethi %hi(0x40033400), %l3 4001a5e0: c2 04 e0 e0 ld [ %l3 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 4001a5e4: 82 00 60 01 inc %g1 4001a5e8: c2 24 e0 e0 st %g1, [ %l3 + 0xe0 ] 4001a5ec: c2 04 e0 e0 ld [ %l3 + 0xe0 ], %g1 4001a5f0: 82 00 60 01 inc %g1 4001a5f4: c2 24 e0 e0 st %g1, [ %l3 + 0xe0 ] * NOTE: Be sure to disable dispatching before unlocking the mutex * since we do not want to open a window where a context * switch could occur. */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); 4001a5f8: 03 10 00 cd sethi %hi(0x40033400), %g1 4001a5fc: d0 00 61 b4 ld [ %g1 + 0x1b4 ], %o0 ! 400335b4 <_RTEMS_Allocator_Mutex> 4001a600: 94 10 20 00 clr %o2 4001a604: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001a608: 7f ff e7 b5 call 400144dc <_CORE_mutex_Surrender> 4001a60c: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a610: c2 04 e0 e0 ld [ %l3 + 0xe0 ], %g1 4001a614: a2 06 20 10 add %i0, 0x10, %l1 4001a618: 82 00 7f ff add %g1, -1, %g1 4001a61c: c2 24 e0 e0 st %g1, [ %l3 + 0xe0 ] 4001a620: c4 04 e0 e0 ld [ %l3 + 0xe0 ], %g2 4001a624: 80 a0 a0 00 cmp %g2, 0 4001a628: 02 80 00 21 be 4001a6ac <_Region_Process_queue+0xd4> 4001a62c: 01 00 00 00 nop RTEMS_INLINE_ROUTINE void *_Region_Allocate_segment ( Region_Control *the_region, uint32_t size ) { return _Heap_Allocate( &the_region->Memory, size ); 4001a630: 10 80 00 10 b 4001a670 <_Region_Process_queue+0x98> 4001a634: a4 06 20 68 add %i0, 0x68, %l2 the_segment = (void **) _Region_Allocate_segment( the_region, the_thread->Wait.count ); if ( the_segment == NULL ) 4001a638: 7f ff e8 bd call 4001492c <_Heap_Allocate> 4001a63c: d2 04 20 24 ld [ %l0 + 0x24 ], %o1 4001a640: 80 a2 20 00 cmp %o0, 0 4001a644: 02 80 00 11 be 4001a688 <_Region_Process_queue+0xb0> 4001a648: 01 00 00 00 nop break; *(void **)the_thread->Wait.return_argument = the_segment; the_region->number_of_used_blocks += 1; 4001a64c: c2 06 20 64 ld [ %i0 + 0x64 ], %g1 ); if ( the_segment == NULL ) break; *(void **)the_thread->Wait.return_argument = the_segment; 4001a650: c4 04 20 28 ld [ %l0 + 0x28 ], %g2 the_region->number_of_used_blocks += 1; 4001a654: 82 00 60 01 inc %g1 ); if ( the_segment == NULL ) break; *(void **)the_thread->Wait.return_argument = the_segment; 4001a658: d0 20 80 00 st %o0, [ %g2 ] the_region->number_of_used_blocks += 1; 4001a65c: c2 26 20 64 st %g1, [ %i0 + 0x64 ] _Thread_queue_Extract( &the_region->Wait_queue, the_thread ); 4001a660: 90 10 00 11 mov %l1, %o0 4001a664: 40 00 02 79 call 4001b048 <_Thread_queue_Extract> 4001a668: 92 10 00 10 mov %l0, %o1 the_thread->Wait.return_code = RTEMS_SUCCESSFUL; 4001a66c: c0 24 20 34 clr [ %l0 + 0x34 ] /* * NOTE: The following loop is O(n) where n is the number of * threads whose memory request is satisfied. */ for ( ; ; ) { the_thread = _Thread_queue_First( &the_region->Wait_queue ); 4001a670: 40 00 02 c0 call 4001b170 <_Thread_queue_First> 4001a674: 90 10 00 11 mov %l1, %o0 4001a678: a0 10 00 08 mov %o0, %l0 if ( the_thread == NULL ) 4001a67c: 80 a4 20 00 cmp %l0, 0 4001a680: 12 bf ff ee bne 4001a638 <_Region_Process_queue+0x60> 4001a684: 90 10 00 12 mov %l2, %o0 4001a688: c2 04 e0 e0 ld [ %l3 + 0xe0 ], %g1 4001a68c: 82 00 7f ff add %g1, -1, %g1 4001a690: c2 24 e0 e0 st %g1, [ %l3 + 0xe0 ] 4001a694: c4 04 e0 e0 ld [ %l3 + 0xe0 ], %g2 4001a698: 80 a0 a0 00 cmp %g2, 0 4001a69c: 02 80 00 07 be 4001a6b8 <_Region_Process_queue+0xe0> 4001a6a0: 01 00 00 00 nop 4001a6a4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a6a8: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 4001a6ac: 7f ff f0 bf call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 4001a6b0: a4 06 20 68 add %i0, 0x68, %l2 <== NOT EXECUTED 4001a6b4: 30 bf ff ef b,a 4001a670 <_Region_Process_queue+0x98> <== NOT EXECUTED 4001a6b8: 7f ff f0 bc call 400169a8 <_Thread_Dispatch> 4001a6bc: 81 e8 00 00 restore 4001a6c0: 01 00 00 00 nop 40008ad0 <_TOD_Set>: */ void _TOD_Set( const struct timespec *time ) { 40008ad0: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008ad4: 23 10 00 98 sethi %hi(0x40026000), %l1 40008ad8: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 ! 400260e0 <_Thread_Dispatch_disable_level> 40008adc: 82 00 60 01 inc %g1 40008ae0: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] _Thread_Disable_dispatch(); _TOD_Deactivate(); if ( time->tv_sec < _TOD_Seconds_since_epoch ) 40008ae4: 21 10 00 98 sethi %hi(0x40026000), %l0 40008ae8: c2 06 00 00 ld [ %i0 ], %g1 40008aec: d4 04 21 98 ld [ %l0 + 0x198 ], %o2 40008af0: 80 a0 40 0a cmp %g1, %o2 40008af4: 36 80 00 18 bge,a 40008b54 <_TOD_Set+0x84> 40008af8: 94 20 40 0a sub %g1, %o2, %o2 Watchdog_Adjust_directions direction, Watchdog_Interval units ) { _Watchdog_Adjust( &_Watchdog_Seconds_chain, direction, units ); 40008afc: 11 10 00 98 sethi %hi(0x40026000), %o0 40008b00: 94 22 80 01 sub %o2, %g1, %o2 40008b04: 90 12 21 d0 or %o0, 0x1d0, %o0 40008b08: 40 00 0e ea call 4000c6b0 <_Watchdog_Adjust> 40008b0c: 92 10 20 01 mov 1, %o1 else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 40008b10: c4 06 00 00 ld [ %i0 ], %g2 40008b14: 86 14 21 98 or %l0, 0x198, %g3 40008b18: c4 24 21 98 st %g2, [ %l0 + 0x198 ] 40008b1c: c2 06 20 04 ld [ %i0 + 4 ], %g1 _TOD_Is_set = TRUE; 40008b20: 84 10 20 01 mov 1, %g2 else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 40008b24: c2 20 e0 04 st %g1, [ %g3 + 4 ] _TOD_Is_set = TRUE; 40008b28: 03 10 00 98 sethi %hi(0x40026000), %g1 40008b2c: c4 20 61 1c st %g2, [ %g1 + 0x11c ] ! 4002611c <_TOD_Is_set> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008b30: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40008b34: 82 00 7f ff add %g1, -1, %g1 40008b38: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40008b3c: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40008b40: 80 a0 a0 00 cmp %g2, 0 40008b44: 02 80 00 0a be 40008b6c <_TOD_Set+0x9c> 40008b48: 01 00 00 00 nop 40008b4c: 81 c7 e0 08 ret 40008b50: 81 e8 00 00 restore 40008b54: 11 10 00 98 sethi %hi(0x40026000), %o0 40008b58: 92 10 20 00 clr %o1 40008b5c: 40 00 0e d5 call 4000c6b0 <_Watchdog_Adjust> 40008b60: 90 12 21 d0 or %o0, 0x1d0, %o0 else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 40008b64: 10 bf ff ec b 40008b14 <_TOD_Set+0x44> 40008b68: c4 06 00 00 ld [ %i0 ], %g2 _Thread_Dispatch(); 40008b6c: 40 00 08 3c call 4000ac5c <_Thread_Dispatch> <== NOT EXECUTED 40008b70: 81 e8 00 00 restore <== NOT EXECUTED 40008b74: 01 00 00 00 nop 40009010 <_Thread_Create_idle>: */ const char *_Thread_Idle_name = "IDLE"; void _Thread_Create_idle( void ) { 40009010: 9d e3 bf 80 save %sp, -128, %sp * This routine allocates an internal thread. */ RTEMS_INLINE_ROUTINE Thread_Control *_Thread_Internal_allocate( void ) { return (Thread_Control *) _Objects_Allocate( &_Thread_Internal_information ); 40009014: 39 10 00 67 sethi %hi(0x40019c00), %i4 40009018: 7f ff f9 d9 call 4000777c <_Objects_Allocate> 4000901c: 90 17 20 a0 or %i4, 0xa0, %o0 ! 40019ca0 <_Thread_Internal_information> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 40009020: 03 10 00 66 sethi %hi(0x40019800), %g1 40009024: 96 10 63 24 or %g1, 0x324, %o3 ! 40019b24 <_CPU_Table> 40009028: c4 02 e0 0c ld [ %o3 + 0xc ], %g2 * The entire workspace is zeroed during its initialization. Thus, all * fields not explicitly assigned were explicitly zeroed by * _Workspace_Initialization. */ _Thread_Idle = _Thread_Internal_allocate(); 4000902c: 37 10 00 67 sethi %hi(0x40019c00), %i3 40009030: d0 26 e0 f8 st %o0, [ %i3 + 0xf8 ] ! 40019cf8 <_Thread_Idle> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 40009034: 03 10 00 24 sethi %hi(0x40009000), %g1 40009038: 92 10 00 08 mov %o0, %o1 4000903c: 80 a0 a0 00 cmp %g2, 0 40009040: 02 80 00 03 be 4000904c <_Thread_Create_idle+0x3c> 40009044: b4 10 62 bc or %g1, 0x2bc, %i2 idle = _CPU_Table.idle_task; 40009048: b4 10 00 02 mov %g2, %i2 <== NOT EXECUTED idle_task_stack_size = _CPU_Table.idle_task_stack_size; 4000904c: d6 02 e0 14 ld [ %o3 + 0x14 ], %o3 if ( idle_task_stack_size < STACK_MINIMUM_SIZE ) 40009050: 80 a2 ef ff cmp %o3, 0xfff 40009054: 28 80 00 02 bleu,a 4000905c <_Thread_Create_idle+0x4c> 40009058: 17 00 00 04 sethi %hi(0x1000), %o3 idle_task_stack_size = STACK_MINIMUM_SIZE; _Thread_Initialize( 4000905c: 03 10 00 64 sethi %hi(0x40019000), %g1 40009060: c4 00 60 68 ld [ %g1 + 0x68 ], %g2 ! 40019068 <_Thread_Idle_name> 40009064: 82 10 20 01 mov 1, %g1 40009068: c4 23 a0 6c st %g2, [ %sp + 0x6c ] 4000906c: 90 17 20 a0 or %i4, 0xa0, %o0 40009070: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40009074: c0 23 a0 60 clr [ %sp + 0x60 ] 40009078: c0 23 a0 64 clr [ %sp + 0x64 ] 4000907c: c0 23 a0 68 clr [ %sp + 0x68 ] 40009080: 94 10 20 00 clr %o2 40009084: 98 10 20 00 clr %o4 40009088: 40 00 00 8e call 400092c0 <_Thread_Initialize> 4000908c: 9a 10 20 ff mov 0xff, %o5 /* * WARNING!!! This is necessary to "kick" start the system and * MUST be done before _Thread_Start is invoked. */ _Thread_Heir = 40009090: c6 06 e0 f8 ld [ %i3 + 0xf8 ], %g3 40009094: 03 10 00 66 sethi %hi(0x40019800), %g1 40009098: 05 10 00 66 sethi %hi(0x40019800), %g2 _Thread_Executing = _Thread_Idle; _Thread_Start( 4000909c: b0 10 00 03 mov %g3, %i0 /* * WARNING!!! This is necessary to "kick" start the system and * MUST be done before _Thread_Start is invoked. */ _Thread_Heir = 400090a0: c6 20 63 ec st %g3, [ %g1 + 0x3ec ] 400090a4: c6 20 a3 c4 st %g3, [ %g2 + 0x3c4 ] _Thread_Executing = _Thread_Idle; _Thread_Start( 400090a8: b2 10 20 00 clr %i1 400090ac: b6 10 20 00 clr %i3 400090b0: 40 00 04 07 call 4000a0cc <_Thread_Start> 400090b4: 99 e8 20 00 restore %g0, 0, %o4 400090b8: 01 00 00 00 nop 400090bc <_Thread_Delay_ended>: void _Thread_Delay_ended( Objects_Id id, void *ignored ) { 400090bc: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 400090c0: 92 96 20 00 orcc %i0, 0, %o1 400090c4: 12 80 00 11 bne 40009108 <_Thread_Delay_ended+0x4c> 400090c8: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400090cc: 31 10 00 66 sethi %hi(0x40019800), %i0 <== NOT EXECUTED 400090d0: c2 06 23 10 ld [ %i0 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400090d4: 82 00 60 01 inc %g1 <== NOT EXECUTED 400090d8: c2 26 23 10 st %g1, [ %i0 + 0x310 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 400090dc: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 400090e0: d0 00 63 ec ld [ %g1 + 0x3ec ], %o0 ! 40019bec <_Thread_Executing> <== NOT EXECUTED Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 400090e4: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 400090e8: 13 04 00 ff sethi %hi(0x1003fc00), %o1 <== NOT EXECUTED 400090ec: 7f ff ff 68 call 40008e8c <_Thread_Clear_state> 400090f0: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 400090f4: c2 06 23 10 ld [ %i0 + 0x310 ], %g1 400090f8: 82 00 7f ff add %g1, -1, %g1 400090fc: c2 26 23 10 st %g1, [ %i0 + 0x310 ] 40009100: 81 c7 e0 08 ret 40009104: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40009108: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 4000910c: 80 a0 a0 04 cmp %g2, 4 40009110: 18 bf ff fc bgu 40009100 <_Thread_Delay_ended+0x44> 40009114: 83 32 60 1b srl %o1, 0x1b, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40009118: 80 a0 60 01 cmp %g1, 1 4000911c: 12 bf ff f9 bne 40009100 <_Thread_Delay_ended+0x44> 40009120: 83 28 a0 02 sll %g2, 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40009124: 05 10 00 66 sethi %hi(0x40019800), %g2 40009128: 84 10 a2 70 or %g2, 0x270, %g2 ! 40019a70 <_Objects_Information_table> 4000912c: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40009130: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40009134: 80 a2 20 00 cmp %o0, 0 40009138: 02 bf ff f2 be 40009100 <_Thread_Delay_ended+0x44> 4000913c: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40009140: 7f ff fa e0 call 40007cc0 <_Objects_Get> 40009144: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40009148: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000914c: 80 a0 60 00 cmp %g1, 0 40009150: 12 bf ff ec bne 40009100 <_Thread_Delay_ended+0x44> 40009154: 31 10 00 66 sethi %hi(0x40019800), %i0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 40009158: 10 bf ff e5 b 400090ec <_Thread_Delay_ended+0x30> 4000915c: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000de9c <_Thread_Handler>: * * Output parameters: NONE */ void _Thread_Handler( void ) { 4000de9c: 9d e3 bf 98 save %sp, -104, %sp #endif #if defined(__USE__MAIN__) extern void _main(void); #endif executing = _Thread_Executing; 4000dea0: 03 10 00 66 sethi %hi(0x40019800), %g1 4000dea4: f4 00 63 ec ld [ %g1 + 0x3ec ], %i2 ! 40019bec <_Thread_Executing> /* * Some CPUs need to tinker with the call frame or registers when the * thread actually begins to execute for the first time. This is a * hook point where the port gets a shot at doing whatever it requires. */ _Context_Initialization_at_thread_begin(); 4000dea8: 3f 10 00 37 sethi %hi(0x4000dc00), %i7 4000deac: be 17 e2 9c or %i7, 0x29c, %i7 ! 4000de9c <_Thread_Handler> * have to put level into a register for those cpu's that use * inline asm here */ level = executing->Start.isr_level; _ISR_Set_level(level); 4000deb0: d0 06 a0 c4 ld [ %i2 + 0xc4 ], %o0 4000deb4: 7f ff cf cd call 40001de8 4000deb8: 91 2a 20 08 sll %o0, 8, %o0 #if defined(__USE_INIT_FINI__) || defined(__USE__MAIN__) doneCons = doneConstructors; 4000debc: 05 10 00 66 sethi %hi(0x40019800), %g2 doneConstructors = 1; 4000dec0: 82 10 20 01 mov 1, %g1 level = executing->Start.isr_level; _ISR_Set_level(level); #if defined(__USE_INIT_FINI__) || defined(__USE__MAIN__) doneCons = doneConstructors; 4000dec4: f2 08 a1 2c ldub [ %g2 + 0x12c ], %i1 * Take care that 'begin' extensions get to complete before * 'switch' extensions can run. This means must keep dispatch * disabled until all 'begin' extensions complete. */ _User_extensions_Thread_begin( executing ); 4000dec8: 90 10 00 1a mov %i2, %o0 4000decc: 7f ff f1 3e call 4000a3c4 <_User_extensions_Thread_begin> 4000ded0: c2 28 a1 2c stb %g1, [ %g2 + 0x12c ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000ded4: 05 10 00 66 sethi %hi(0x40019800), %g2 4000ded8: c2 00 a3 10 ld [ %g2 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 4000dedc: 82 00 7f ff add %g1, -1, %g1 4000dee0: c2 20 a3 10 st %g1, [ %g2 + 0x310 ] 4000dee4: c6 00 a3 10 ld [ %g2 + 0x310 ], %g3 4000dee8: 80 a0 e0 00 cmp %g3, 0 4000deec: 02 80 00 36 be 4000dfc4 <_Thread_Handler+0x128> 4000def0: 01 00 00 00 nop /* * _init could be a weak symbol and we SHOULD test it but it isn't * in any configuration I know of and it generates a warning on every * RTEMS target configuration. --joel (12 May 2007) */ if (!doneCons) /* && (volatile void *)_init) */ 4000def4: 83 2e 60 18 sll %i1, 0x18, %g1 <== NOT EXECUTED 4000def8: 80 a0 60 00 cmp %g1, 0 4000defc: 02 80 00 22 be 4000df84 <_Thread_Handler+0xe8> 4000df00: 01 00 00 00 nop #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000df04: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 4000df08: 80 a0 60 01 cmp %g1, 1 4000df0c: 22 80 00 25 be,a 4000dfa0 <_Thread_Handler+0x104> 4000df10: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000df14: 80 a0 60 01 cmp %g1, 1 4000df18: 1a 80 00 0c bcc 4000df48 <_Thread_Handler+0xac> 4000df1c: 80 a0 60 02 cmp %g1, 2 case THREAD_START_NUMERIC: executing->Wait.return_argument = 4000df20: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 4000df24: 9f c0 40 00 call %g1 4000df28: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 4000df2c: d0 26 a0 28 st %o0, [ %i2 + 0x28 ] * was placed in return_argument. This assumed that if it returned * anything (which is not supporting in all APIs), then it would be * able to fit in a (void *). */ _User_extensions_Thread_exitted( executing ); 4000df30: 90 10 00 1a mov %i2, %o0 4000df34: 7f ff f1 4c call 4000a464 <_User_extensions_Thread_exitted> 4000df38: b0 10 20 00 clr %i0 _Internal_error_Occurred( 4000df3c: b2 10 20 01 mov 1, %i1 4000df40: 7f ff e5 e2 call 400076c8 <_Internal_error_Occurred> 4000df44: 95 e8 20 06 restore %g0, 6, %o2 #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000df48: 02 80 00 23 be 4000dfd4 <_Thread_Handler+0x138> <== NOT EXECUTED 4000df4c: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000df50: 12 bf ff f9 bne 4000df34 <_Thread_Handler+0x98> <== NOT EXECUTED 4000df54: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED executing->Start.pointer_argument, executing->Start.numeric_argument ); break; case THREAD_START_BOTH_NUMERIC_FIRST: executing->Wait.return_argument = 4000df58: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000df5c: d2 06 a0 b0 ld [ %i2 + 0xb0 ], %o1 <== NOT EXECUTED 4000df60: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 <== NOT EXECUTED 4000df64: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000df68: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000df6c: d0 26 a0 28 st %o0, [ %i2 + 0x28 ] <== NOT EXECUTED * was placed in return_argument. This assumed that if it returned * anything (which is not supporting in all APIs), then it would be * able to fit in a (void *). */ _User_extensions_Thread_exitted( executing ); 4000df70: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000df74: 7f ff f1 3c call 4000a464 <_User_extensions_Thread_exitted> <== NOT EXECUTED 4000df78: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED _Internal_error_Occurred( 4000df7c: 7f ff e5 d3 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000df80: 95 e8 20 06 restore %g0, 6, %o2 <== NOT EXECUTED * _init could be a weak symbol and we SHOULD test it but it isn't * in any configuration I know of and it generates a warning on every * RTEMS target configuration. --joel (12 May 2007) */ if (!doneCons) /* && (volatile void *)_init) */ _init (); 4000df84: 40 00 2a d3 call 40018ad0 <_init> 4000df88: 01 00 00 00 nop #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000df8c: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 4000df90: 80 a0 60 01 cmp %g1, 1 4000df94: 12 bf ff e1 bne 4000df18 <_Thread_Handler+0x7c> 4000df98: 01 00 00 00 nop (*(Thread_Entry_numeric) executing->Start.entry_point)( executing->Start.numeric_argument ); break; case THREAD_START_POINTER: executing->Wait.return_argument = 4000df9c: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000dfa0: d0 06 a0 b0 ld [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED 4000dfa4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000dfa8: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000dfac: d0 26 a0 28 st %o0, [ %i2 + 0x28 ] <== NOT EXECUTED * was placed in return_argument. This assumed that if it returned * anything (which is not supporting in all APIs), then it would be * able to fit in a (void *). */ _User_extensions_Thread_exitted( executing ); 4000dfb0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000dfb4: 7f ff f1 2c call 4000a464 <_User_extensions_Thread_exitted> <== NOT EXECUTED 4000dfb8: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED _Internal_error_Occurred( 4000dfbc: 7f ff e5 c3 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000dfc0: 95 e8 20 06 restore %g0, 6, %o2 <== NOT EXECUTED _Thread_Dispatch(); 4000dfc4: 7f ff ec 67 call 40009160 <_Thread_Dispatch> 4000dfc8: 01 00 00 00 nop /* * _init could be a weak symbol and we SHOULD test it but it isn't * in any configuration I know of and it generates a warning on every * RTEMS target configuration. --joel (12 May 2007) */ if (!doneCons) /* && (volatile void *)_init) */ 4000dfcc: 10 bf ff cb b 4000def8 <_Thread_Handler+0x5c> 4000dfd0: 83 2e 60 18 sll %i1, 0x18, %g1 (*(Thread_Entry_pointer) executing->Start.entry_point)( executing->Start.pointer_argument ); break; case THREAD_START_BOTH_POINTER_FIRST: executing->Wait.return_argument = 4000dfd4: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000dfd8: d0 1e a0 b0 ldd [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED 4000dfdc: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000dfe0: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000dfe4: d0 26 a0 28 st %o0, [ %i2 + 0x28 ] <== NOT EXECUTED * was placed in return_argument. This assumed that if it returned * anything (which is not supporting in all APIs), then it would be * able to fit in a (void *). */ _User_extensions_Thread_exitted( executing ); 4000dfe8: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000dfec: 7f ff f1 1e call 4000a464 <_User_extensions_Thread_exitted> <== NOT EXECUTED 4000dff0: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED _Internal_error_Occurred( 4000dff4: 7f ff e5 b5 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000dff8: 95 e8 20 06 restore %g0, 6, %o2 <== NOT EXECUTED 4000dffc: 01 00 00 00 nop 4000947c <_Thread_Handler_initialization>: void _Thread_Handler_initialization( uint32_t ticks_per_timeslice, uint32_t maximum_extensions, uint32_t maximum_proxies ) { 4000947c: 9d e3 bf 90 save %sp, -112, %sp /* * BOTH stacks hooks must be set or both must be NULL. * Do not allow mixture. */ if ( !( ( _CPU_Table.stack_allocate_hook == 0 ) 40009480: 03 10 00 66 sethi %hi(0x40019800), %g1 40009484: 82 10 63 24 or %g1, 0x324, %g1 ! 40019b24 <_CPU_Table> 40009488: c4 00 60 20 ld [ %g1 + 0x20 ], %g2 4000948c: c6 00 60 24 ld [ %g1 + 0x24 ], %g3 40009490: 80 a0 00 02 cmp %g0, %g2 40009494: 88 60 3f ff subx %g0, -1, %g4 40009498: 80 a0 00 03 cmp %g0, %g3 4000949c: 82 60 3f ff subx %g0, -1, %g1 400094a0: 80 a1 00 01 cmp %g4, %g1 400094a4: 12 80 00 2c bne 40009554 <_Thread_Handler_initialization+0xd8> 400094a8: 90 10 20 00 clr %o0 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 400094ac: 03 10 00 66 sethi %hi(0x40019800), %g1 _Thread_Executing = NULL; 400094b0: 05 10 00 66 sethi %hi(0x40019800), %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 400094b4: c0 20 63 fc clr [ %g1 + 0x3fc ] _Thread_Executing = NULL; 400094b8: c0 20 a3 ec clr [ %g2 + 0x3ec ] _Thread_Heir = NULL; 400094bc: 03 10 00 66 sethi %hi(0x40019800), %g1 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; 400094c0: 05 10 00 66 sethi %hi(0x40019800), %g2 INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; _Thread_Executing = NULL; _Thread_Heir = NULL; 400094c4: c0 20 63 c4 clr [ %g1 + 0x3c4 ] #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; 400094c8: c0 20 a3 dc clr [ %g2 + 0x3dc ] _Thread_Maximum_extensions = maximum_extensions; 400094cc: 03 10 00 66 sethi %hi(0x40019800), %g1 _Thread_Ticks_per_timeslice = ticks_per_timeslice; 400094d0: 05 10 00 66 sethi %hi(0x40019800), %g2 _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; _Thread_Maximum_extensions = maximum_extensions; 400094d4: f2 20 63 d8 st %i1, [ %g1 + 0x3d8 ] _Thread_Ticks_per_timeslice = ticks_per_timeslice; 400094d8: f0 20 a2 68 st %i0, [ %g2 + 0x268 ] _Thread_Ready_chain = (Chain_Control *) _Workspace_Allocate_or_fatal_error( 400094dc: 40 00 05 13 call 4000a928 <_Workspace_Allocate_or_fatal_error> 400094e0: 90 10 2c 00 mov 0xc00, %o0 400094e4: 03 10 00 66 sethi %hi(0x40019800), %g1 400094e8: 84 10 00 08 mov %o0, %g2 400094ec: d0 20 62 64 st %o0, [ %g1 + 0x264 ] 400094f0: 86 02 2c 00 add %o0, 0xc00, %g3 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400094f4: 82 00 a0 04 add %g2, 4, %g1 the_chain->permanent_null = NULL; 400094f8: c0 20 a0 04 clr [ %g2 + 4 ] the_chain->last = _Chain_Head(the_chain); 400094fc: c4 20 a0 08 st %g2, [ %g2 + 8 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009500: c2 20 80 00 st %g1, [ %g2 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009504: 84 00 a0 0c add %g2, 0xc, %g2 (PRIORITY_MAXIMUM + 1) * sizeof(Chain_Control) ); for ( index=0; index <= PRIORITY_MAXIMUM ; index++ ) 40009508: 80 a0 80 03 cmp %g2, %g3 4000950c: 12 bf ff fb bne 400094f8 <_Thread_Handler_initialization+0x7c> 40009510: 82 00 a0 04 add %g2, 4, %g1 /* * Initialize this class of objects. */ _Objects_Initialize_information( 40009514: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009518: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 ! 40019c18 <_System_state_Is_multiprocessing> 4000951c: 82 10 20 08 mov 8, %g1 40009520: 80 a0 00 02 cmp %g0, %g2 40009524: 96 10 20 02 mov 2, %o3 40009528: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 4000952c: 96 42 ff ff addx %o3, -1, %o3 40009530: 11 10 00 67 sethi %hi(0x40019c00), %o0 40009534: 92 10 20 01 mov 1, %o1 40009538: 90 12 20 a0 or %o0, 0xa0, %o0 4000953c: 94 10 20 01 mov 1, %o2 40009540: 98 10 21 80 mov 0x180, %o4 40009544: 7f ff fa 06 call 40007d5c <_Objects_Initialize_information> 40009548: 9a 10 20 01 mov 1, %o5 FALSE, /* TRUE if this is a global object class */ NULL /* Proxy extraction support callout */ #endif ); } 4000954c: 81 c7 e0 08 ret 40009550: 81 e8 00 00 restore * Do not allow mixture. */ if ( !( ( _CPU_Table.stack_allocate_hook == 0 ) == ( _CPU_Table.stack_free_hook == 0 ) ) ) _Internal_error_Occurred( 40009554: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40009558: 7f ff f8 5c call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000955c: 94 10 20 0f mov 0xf, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 40009560: 10 bf ff d4 b 400094b0 <_Thread_Handler_initialization+0x34> <== NOT EXECUTED 40009564: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 400092c0 <_Thread_Initialize>: Thread_CPU_budget_algorithms budget_algorithm, Thread_CPU_budget_algorithm_callout budget_callout, uint32_t isr_level, Objects_Name name ) { 400092c0: 9d e3 bf 98 save %sp, -104, %sp /* * Initialize the Ada self pointer */ the_thread->rtems_ada_self = NULL; 400092c4: c0 26 60 80 clr [ %i1 + 0x80 ] /* * Allocate and Initialize the stack for this thread. */ if ( !stack_area ) { 400092c8: 80 a6 a0 00 cmp %i2, 0 400092cc: 02 80 00 59 be 40009430 <_Thread_Initialize+0x170> 400092d0: e2 07 a0 60 ld [ %fp + 0x60 ], %l1 stack = the_thread->Start.stack; the_thread->Start.core_allocated_stack = TRUE; } else { stack = stack_area; actual_stack_size = stack_size; the_thread->Start.core_allocated_stack = FALSE; 400092d4: c0 26 60 cc clr [ %i1 + 0xcc ] <== NOT EXECUTED 400092d8: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED /* * Allocate the extensions area for this thread */ if ( _Thread_Maximum_extensions ) { 400092dc: 21 10 00 66 sethi %hi(0x40019800), %l0 400092e0: d2 04 23 d8 ld [ %l0 + 0x3d8 ], %o1 ! 40019bd8 <_Thread_Maximum_extensions> Stack_Control *the_stack, void *starting_address, size_t size ) { the_stack->area = starting_address; 400092e4: f4 26 60 d4 st %i2, [ %i1 + 0xd4 ] the_stack->size = size; 400092e8: d0 26 60 d0 st %o0, [ %i1 + 0xd0 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400092ec: c0 26 60 50 clr [ %i1 + 0x50 ] the_watchdog->routine = routine; 400092f0: c0 26 60 64 clr [ %i1 + 0x64 ] the_watchdog->id = id; 400092f4: c0 26 60 68 clr [ %i1 + 0x68 ] the_watchdog->user_data = user_data; 400092f8: c0 26 60 6c clr [ %i1 + 0x6c ] 400092fc: 80 a2 60 00 cmp %o1, 0 40009300: 12 80 00 38 bne 400093e0 <_Thread_Initialize+0x120> 40009304: c0 26 61 68 clr [ %i1 + 0x168 ] return FALSE; } } else extensions_area = NULL; the_thread->extensions = (void **) extensions_area; 40009308: c0 26 61 78 clr [ %i1 + 0x178 ] 4000930c: b6 10 20 00 clr %i3 /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 40009310: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 the_thread->Start.budget_algorithm = budget_algorithm; 40009314: e2 26 60 bc st %l1, [ %i1 + 0xbc ] /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 40009318: c2 26 60 b8 st %g1, [ %i1 + 0xb8 ] the_thread->Start.budget_algorithm = budget_algorithm; the_thread->Start.budget_callout = budget_callout; 4000931c: c2 07 a0 64 ld [ %fp + 0x64 ], %g1 switch ( budget_algorithm ) { 40009320: 80 a4 60 02 cmp %l1, 2 40009324: 12 80 00 05 bne 40009338 <_Thread_Initialize+0x78> 40009328: c2 26 60 c0 st %g1, [ %i1 + 0xc0 ] case THREAD_CPU_BUDGET_ALGORITHM_NONE: case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE: break; case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE: the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice; 4000932c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 40009330: c4 00 62 68 ld [ %g1 + 0x268 ], %g2 ! 40019a68 <_Thread_Ticks_per_timeslice> <== NOT EXECUTED 40009334: c4 26 60 84 st %g2, [ %i1 + 0x84 ] <== NOT EXECUTED break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 40009338: c2 07 a0 68 ld [ %fp + 0x68 ], %g1 the_thread->current_state = STATES_DORMANT; the_thread->Wait.queue = NULL; 4000933c: c0 26 60 44 clr [ %i1 + 0x44 ] break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 40009340: c2 26 60 c4 st %g1, [ %i1 + 0xc4 ] the_thread->current_state = STATES_DORMANT; 40009344: 82 10 20 01 mov 1, %g1 the_thread->Wait.queue = NULL; the_thread->resource_count = 0; 40009348: c0 26 60 1c clr [ %i1 + 0x1c ] break; } the_thread->Start.isr_level = isr_level; the_thread->current_state = STATES_DORMANT; 4000934c: c2 26 60 10 st %g1, [ %i1 + 0x10 ] the_thread->Wait.queue = NULL; the_thread->resource_count = 0; the_thread->suspend_count = 0; 40009350: c0 26 60 70 clr [ %i1 + 0x70 ] the_thread->real_priority = priority; 40009354: fa 26 60 18 st %i5, [ %i1 + 0x18 ] the_thread->Start.initial_priority = priority; 40009358: fa 26 60 c8 st %i5, [ %i1 + 0xc8 ] _Thread_Set_priority( the_thread, priority ); 4000935c: 92 10 00 1d mov %i5, %o1 40009360: 40 00 02 76 call 40009d38 <_Thread_Set_priority> 40009364: 90 10 00 19 mov %i1, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40009368: c4 06 60 08 ld [ %i1 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000936c: c6 16 20 10 lduh [ %i0 + 0x10 ], %g3 /* * Initialize the CPU usage statistics */ #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS the_thread->cpu_time_used.tv_sec = 0; 40009370: c0 26 60 90 clr [ %i1 + 0x90 ] 40009374: 03 00 00 3f sethi %hi(0xfc00), %g1 40009378: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000937c: 82 08 80 01 and %g2, %g1, %g1 40009380: 80 a0 40 03 cmp %g1, %g3 40009384: 08 80 00 13 bleu 400093d0 <_Thread_Initialize+0x110> 40009388: c0 26 60 94 clr [ %i1 + 0x94 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 4000938c: c2 07 a0 6c ld [ %fp + 0x6c ], %g1 /* * Invoke create extensions */ if ( !_User_extensions_Thread_create( the_thread ) ) { 40009390: 90 10 00 19 mov %i1, %o0 40009394: c2 26 60 0c st %g1, [ %i1 + 0xc ] 40009398: 40 00 04 46 call 4000a4b0 <_User_extensions_Thread_create> 4000939c: b0 10 20 01 mov 1, %i0 400093a0: 80 a2 20 00 cmp %o0, 0 400093a4: 12 80 00 34 bne 40009474 <_Thread_Initialize+0x1b4> 400093a8: 80 a6 e0 00 cmp %i3, 0 if ( extensions_area ) 400093ac: 02 80 00 05 be 400093c0 <_Thread_Initialize+0x100> 400093b0: 11 10 00 66 sethi %hi(0x40019800), %o0 400093b4: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 400093b8: 7f ff f7 c4 call 400072c8 <_Heap_Free> <== NOT EXECUTED 400093bc: 90 12 23 5c or %o0, 0x35c, %o0 <== NOT EXECUTED #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) (void) _Workspace_Free( fp_area ); #endif _Thread_Stack_Free( the_thread ); 400093c0: 40 00 03 22 call 4000a048 <_Thread_Stack_Free> 400093c4: 90 10 00 19 mov %i1, %o0 400093c8: 81 c7 e0 08 ret 400093cc: 91 e8 20 00 restore %g0, 0, %o0 uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) information->local_table[ index ] = the_object; 400093d0: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 400093d4: 83 28 60 02 sll %g1, 2, %g1 400093d8: 10 bf ff ed b 4000938c <_Thread_Initialize+0xcc> 400093dc: f2 20 80 01 st %i1, [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 400093e0: 92 02 60 01 inc %o1 400093e4: 11 10 00 66 sethi %hi(0x40019800), %o0 400093e8: 93 2a 60 02 sll %o1, 2, %o1 400093ec: 7f ff f7 85 call 40007200 <_Heap_Allocate> 400093f0: 90 12 23 5c or %o0, 0x35c, %o0 if ( _Thread_Maximum_extensions ) { extensions_area = _Workspace_Allocate( (_Thread_Maximum_extensions + 1) * sizeof( void * ) ); if ( !extensions_area ) { 400093f4: b6 92 20 00 orcc %o0, 0, %i3 400093f8: 02 80 00 1c be 40009468 <_Thread_Initialize+0x1a8> 400093fc: c2 04 23 d8 ld [ %l0 + 0x3d8 ], %g1 * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 40009400: 80 a0 7f ff cmp %g1, -1 40009404: 02 bf ff c3 be 40009310 <_Thread_Initialize+0x50> 40009408: f6 26 61 78 st %i3, [ %i1 + 0x178 ] 4000940c: 86 00 60 01 add %g1, 1, %g3 40009410: 84 10 20 00 clr %g2 the_thread->extensions[i] = NULL; 40009414: 83 28 a0 02 sll %g2, 2, %g1 * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 40009418: 84 00 a0 01 inc %g2 4000941c: 80 a0 80 03 cmp %g2, %g3 40009420: 12 bf ff fd bne 40009414 <_Thread_Initialize+0x154> 40009424: c0 26 c0 01 clr [ %i3 + %g1 ] /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 40009428: 10 bf ff bb b 40009314 <_Thread_Initialize+0x54> 4000942c: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 * Allocate and Initialize the stack for this thread. */ if ( !stack_area ) { if ( !_Stack_Is_enough( stack_size ) ) 40009430: 80 a6 ef ff cmp %i3, 0xfff 40009434: 08 80 00 03 bleu 40009440 <_Thread_Initialize+0x180> 40009438: 13 00 00 04 sethi %hi(0x1000), %o1 4000943c: 92 10 00 1b mov %i3, %o1 actual_stack_size = STACK_MINIMUM_SIZE; else actual_stack_size = stack_size; actual_stack_size = _Thread_Stack_Allocate( the_thread, actual_stack_size ); 40009440: 40 00 02 e7 call 40009fdc <_Thread_Stack_Allocate> 40009444: 90 10 00 19 mov %i1, %o0 if ( !actual_stack_size || actual_stack_size < stack_size ) 40009448: 80 a2 20 00 cmp %o0, 0 4000944c: 02 bf ff df be 400093c8 <_Thread_Initialize+0x108> 40009450: 80 a6 c0 08 cmp %i3, %o0 40009454: 18 bf ff dd bgu 400093c8 <_Thread_Initialize+0x108> 40009458: 82 10 20 01 mov 1, %g1 return FALSE; /* stack allocation failed */ stack = the_thread->Start.stack; 4000945c: f4 06 60 d8 ld [ %i1 + 0xd8 ], %i2 the_thread->Start.core_allocated_stack = TRUE; 40009460: 10 bf ff 9f b 400092dc <_Thread_Initialize+0x1c> 40009464: c2 26 60 cc st %g1, [ %i1 + 0xcc ] #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) (void) _Workspace_Free( fp_area ); #endif _Thread_Stack_Free( the_thread ); 40009468: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000946c: 40 00 02 f7 call 4000a048 <_Thread_Stack_Free> <== NOT EXECUTED 40009470: b0 10 20 00 clr %i0 <== NOT EXECUTED 40009474: 81 c7 e0 08 ret 40009478: 81 e8 00 00 restore 4000e29c <_Thread_Reset>: void _Thread_Reset( Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { 4000e29c: 9d e3 bf 98 save %sp, -104, %sp the_thread->resource_count = 0; the_thread->suspend_count = 0; the_thread->is_preemptible = the_thread->Start.is_preemptible; 4000e2a0: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 the_thread->budget_algorithm = the_thread->Start.budget_algorithm; 4000e2a4: c4 06 20 bc ld [ %i0 + 0xbc ], %g2 the_thread->budget_callout = the_thread->Start.budget_callout; 4000e2a8: c6 06 20 c0 ld [ %i0 + 0xc0 ], %g3 uint32_t numeric_argument ) { the_thread->resource_count = 0; the_thread->suspend_count = 0; the_thread->is_preemptible = the_thread->Start.is_preemptible; 4000e2ac: c2 26 20 7c st %g1, [ %i0 + 0x7c ] the_thread->budget_algorithm = the_thread->Start.budget_algorithm; the_thread->budget_callout = the_thread->Start.budget_callout; 4000e2b0: c4 3e 20 88 std %g2, [ %i0 + 0x88 ] the_thread->Start.pointer_argument = pointer_argument; 4000e2b4: f2 26 20 b0 st %i1, [ %i0 + 0xb0 ] the_thread->Start.numeric_argument = numeric_argument; 4000e2b8: f4 26 20 b4 st %i2, [ %i0 + 0xb4 ] Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { the_thread->resource_count = 0; 4000e2bc: c0 26 20 1c clr [ %i0 + 0x1c ] the_thread->suspend_count = 0; 4000e2c0: c0 26 20 70 clr [ %i0 + 0x70 ] the_thread->budget_callout = the_thread->Start.budget_callout; the_thread->Start.pointer_argument = pointer_argument; the_thread->Start.numeric_argument = numeric_argument; if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) { 4000e2c4: 7f ff f1 24 call 4000a754 <_Thread_queue_Extract_with_proxy> 4000e2c8: 90 10 00 18 mov %i0, %o0 4000e2cc: 80 a2 20 00 cmp %o0, 0 4000e2d0: 32 80 00 07 bne,a 4000e2ec <_Thread_Reset+0x50> 4000e2d4: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 if ( _Watchdog_Is_active( &the_thread->Timer ) ) 4000e2d8: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000e2dc: 80 a0 60 02 cmp %g1, 2 4000e2e0: 02 80 00 0c be 4000e310 <_Thread_Reset+0x74> 4000e2e4: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); } if ( the_thread->current_priority != the_thread->Start.initial_priority ) { 4000e2e8: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 4000e2ec: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 4000e2f0: 80 a0 40 19 cmp %g1, %i1 4000e2f4: 02 80 00 05 be 4000e308 <_Thread_Reset+0x6c> 4000e2f8: 01 00 00 00 nop the_thread->real_priority = the_thread->Start.initial_priority; 4000e2fc: f2 26 20 18 st %i1, [ %i0 + 0x18 ] _Thread_Set_priority( the_thread, the_thread->Start.initial_priority ); 4000e300: 7f ff f1 d6 call 4000aa58 <_Thread_Set_priority> 4000e304: 81 e8 00 00 restore 4000e308: 81 c7 e0 08 ret 4000e30c: 81 e8 00 00 restore the_thread->Start.numeric_argument = numeric_argument; if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) { if ( _Watchdog_Is_active( &the_thread->Timer ) ) (void) _Watchdog_Remove( &the_thread->Timer ); 4000e310: 7f ff f4 81 call 4000b514 <_Watchdog_Remove> <== NOT EXECUTED 4000e314: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED } if ( the_thread->current_priority != the_thread->Start.initial_priority ) { 4000e318: 10 bf ff f5 b 4000e2ec <_Thread_Reset+0x50> <== NOT EXECUTED 4000e31c: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 <== NOT EXECUTED 4000d4a4 <_Thread_Reset_timeslice>: * ready chain * select heir */ void _Thread_Reset_timeslice( void ) { 4000d4a4: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *executing; Chain_Control *ready; executing = _Thread_Executing; 4000d4a8: 03 10 00 66 sethi %hi(0x40019800), %g1 4000d4ac: e0 00 63 ec ld [ %g1 + 0x3ec ], %l0 ! 40019bec <_Thread_Executing> ready = executing->ready; _ISR_Disable( level ); 4000d4b0: 7f ff d2 4a call 40001dd8 4000d4b4: e2 04 20 98 ld [ %l0 + 0x98 ], %l1 4000d4b8: b0 10 00 08 mov %o0, %i0 if ( _Chain_Has_only_one_node( ready ) ) { 4000d4bc: c4 04 40 00 ld [ %l1 ], %g2 4000d4c0: c2 04 60 08 ld [ %l1 + 8 ], %g1 4000d4c4: 80 a0 80 01 cmp %g2, %g1 4000d4c8: 32 80 00 04 bne,a 4000d4d8 <_Thread_Reset_timeslice+0x34> 4000d4cc: c6 04 00 00 ld [ %l0 ], %g3 _ISR_Enable( level ); 4000d4d0: 7f ff d2 46 call 40001de8 4000d4d4: 81 e8 00 00 restore { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 4000d4d8: c4 04 20 04 ld [ %l0 + 4 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000d4dc: 82 04 60 04 add %l1, 4, %g1 Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; previous->next = next; 4000d4e0: c6 20 80 00 st %g3, [ %g2 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000d4e4: c2 24 00 00 st %g1, [ %l0 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000d4e8: c4 20 e0 04 st %g2, [ %g3 + 4 ] ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; 4000d4ec: c2 04 60 08 ld [ %l1 + 8 ], %g1 the_chain->last = the_node; 4000d4f0: e0 24 60 08 st %l0, [ %l1 + 8 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000d4f4: c2 24 20 04 st %g1, [ %l0 + 4 ] Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 4000d4f8: e0 20 40 00 st %l0, [ %g1 ] return; } _Chain_Extract_unprotected( &executing->Object.Node ); _Chain_Append_unprotected( ready, &executing->Object.Node ); _ISR_Flash( level ); 4000d4fc: 7f ff d2 3b call 40001de8 4000d500: 01 00 00 00 nop 4000d504: 7f ff d2 35 call 40001dd8 4000d508: 01 00 00 00 nop if ( _Thread_Is_heir( executing ) ) 4000d50c: 05 10 00 66 sethi %hi(0x40019800), %g2 4000d510: c2 00 a3 c4 ld [ %g2 + 0x3c4 ], %g1 ! 40019bc4 <_Thread_Heir> 4000d514: 80 a4 00 01 cmp %l0, %g1 4000d518: 32 80 00 05 bne,a 4000d52c <_Thread_Reset_timeslice+0x88> 4000d51c: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED _Thread_Heir = (Thread_Control *) ready->first; 4000d520: c2 04 40 00 ld [ %l1 ], %g1 4000d524: c2 20 a3 c4 st %g1, [ %g2 + 0x3c4 ] _Context_Switch_necessary = TRUE; 4000d528: 84 10 20 01 mov 1, %g2 4000d52c: 03 10 00 66 sethi %hi(0x40019800), %g1 4000d530: c4 20 63 fc st %g2, [ %g1 + 0x3fc ] ! 40019bfc <_Context_Switch_necessary> _ISR_Enable( level ); 4000d534: 7f ff d2 2d call 40001de8 4000d538: 81 e8 00 00 restore 4000d53c: 01 00 00 00 nop 4000b88c <_Thread_Resume>: void _Thread_Resume( Thread_Control *the_thread, boolean force ) { 4000b88c: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; States_Control current_state; _ISR_Disable( level ); 4000b890: 7f ff dc 9a call 40002af8 4000b894: 01 00 00 00 nop 4000b898: a0 10 00 08 mov %o0, %l0 if ( force == TRUE ) 4000b89c: 80 a6 60 01 cmp %i1, 1 4000b8a0: 22 80 00 13 be,a 4000b8ec <_Thread_Resume+0x60> 4000b8a4: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 the_thread->suspend_count = 0; else the_thread->suspend_count--; 4000b8a8: c2 06 20 70 ld [ %i0 + 0x70 ], %g1 <== NOT EXECUTED 4000b8ac: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED if ( the_thread->suspend_count > 0 ) { 4000b8b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000b8b4: 12 80 00 0c bne 4000b8e4 <_Thread_Resume+0x58> <== NOT EXECUTED 4000b8b8: c2 26 20 70 st %g1, [ %i0 + 0x70 ] <== NOT EXECUTED _ISR_Enable( level ); return; } current_state = the_thread->current_state; 4000b8bc: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED if ( current_state & STATES_SUSPENDED ) { 4000b8c0: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 4000b8c4: 02 80 00 06 be 4000b8dc <_Thread_Resume+0x50> <== NOT EXECUTED 4000b8c8: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE States_Control _States_Clear ( States_Control states_to_clear, States_Control current_state ) { return (current_state & ~states_to_clear); 4000b8cc: 82 08 7f fd and %g1, -3, %g1 <== NOT EXECUTED current_state = the_thread->current_state = _States_Clear(STATES_SUSPENDED, current_state); if ( _States_Is_ready( current_state ) ) { 4000b8d0: 80 a0 60 00 cmp %g1, 0 4000b8d4: 02 80 00 0b be 4000b900 <_Thread_Resume+0x74> 4000b8d8: c2 26 20 10 st %g1, [ %i0 + 0x10 ] _Context_Switch_necessary = TRUE; } } } _ISR_Enable( level ); 4000b8dc: 7f ff dc 8b call 40002b08 4000b8e0: 91 e8 00 10 restore %g0, %l0, %o0 the_thread->suspend_count = 0; else the_thread->suspend_count--; if ( the_thread->suspend_count > 0 ) { _ISR_Enable( level ); 4000b8e4: 7f ff dc 89 call 40002b08 <== NOT EXECUTED 4000b8e8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED return; } current_state = the_thread->current_state; if ( current_state & STATES_SUSPENDED ) { 4000b8ec: 80 88 60 02 btst 2, %g1 4000b8f0: 02 bf ff fb be 4000b8dc <_Thread_Resume+0x50> 4000b8f4: c0 26 20 70 clr [ %i0 + 0x70 ] 4000b8f8: 10 bf ff f6 b 4000b8d0 <_Thread_Resume+0x44> 4000b8fc: 82 08 7f fd and %g1, -3, %g1 RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map ( Priority_Information *the_priority_map ) { *the_priority_map->minor |= the_priority_map->ready_minor; 4000b900: c8 06 20 9c ld [ %i0 + 0x9c ], %g4 4000b904: c4 16 20 a2 lduh [ %i0 + 0xa2 ], %g2 4000b908: c2 11 00 00 lduh [ %g4 ], %g1 if ( _States_Is_ready( current_state ) ) { _Priority_Add_to_bit_map( &the_thread->Priority_map ); _Chain_Append_unprotected(the_thread->ready, &the_thread->Object.Node); 4000b90c: c6 06 20 98 ld [ %i0 + 0x98 ], %g3 4000b910: 82 10 40 02 or %g1, %g2, %g1 _Priority_Major_bit_map |= the_priority_map->ready_major; 4000b914: 1b 10 00 98 sethi %hi(0x40026000), %o5 RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map ( Priority_Information *the_priority_map ) { *the_priority_map->minor |= the_priority_map->ready_minor; 4000b918: c2 31 00 00 sth %g1, [ %g4 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000b91c: 82 00 e0 04 add %g3, 4, %g1 _Priority_Major_bit_map |= the_priority_map->ready_major; 4000b920: d8 16 20 a0 lduh [ %i0 + 0xa0 ], %o4 4000b924: c2 26 00 00 st %g1, [ %i0 ] 4000b928: c4 13 61 b0 lduh [ %o5 + 0x1b0 ], %g2 old_last_node = the_chain->last; 4000b92c: c8 00 e0 08 ld [ %g3 + 8 ], %g4 the_chain->last = the_node; 4000b930: f0 20 e0 08 st %i0, [ %g3 + 8 ] 4000b934: 84 10 80 0c or %g2, %o4, %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 4000b938: c8 26 20 04 st %g4, [ %i0 + 4 ] 4000b93c: c4 33 61 b0 sth %g2, [ %o5 + 0x1b0 ] Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 4000b940: f0 21 00 00 st %i0, [ %g4 ] _ISR_Flash( level ); 4000b944: 7f ff dc 71 call 40002b08 4000b948: 90 10 00 10 mov %l0, %o0 4000b94c: 7f ff dc 6b call 40002af8 4000b950: 01 00 00 00 nop if ( the_thread->current_priority < _Thread_Heir->current_priority ) { 4000b954: 09 10 00 98 sethi %hi(0x40026000), %g4 4000b958: c4 01 21 94 ld [ %g4 + 0x194 ], %g2 ! 40026194 <_Thread_Heir> 4000b95c: c6 06 20 14 ld [ %i0 + 0x14 ], %g3 4000b960: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 4000b964: 80 a0 c0 01 cmp %g3, %g1 4000b968: 1a bf ff dd bcc 4000b8dc <_Thread_Resume+0x50> 4000b96c: 01 00 00 00 nop _Thread_Heir = the_thread; if ( _Thread_Executing->is_preemptible || 4000b970: 03 10 00 98 sethi %hi(0x40026000), %g1 4000b974: c4 00 61 bc ld [ %g1 + 0x1bc ], %g2 ! 400261bc <_Thread_Executing> _Chain_Append_unprotected(the_thread->ready, &the_thread->Object.Node); _ISR_Flash( level ); if ( the_thread->current_priority < _Thread_Heir->current_priority ) { _Thread_Heir = the_thread; 4000b978: f0 21 21 94 st %i0, [ %g4 + 0x194 ] if ( _Thread_Executing->is_preemptible || 4000b97c: c2 00 a0 7c ld [ %g2 + 0x7c ], %g1 4000b980: 80 a0 60 00 cmp %g1, 0 4000b984: 02 80 00 06 be 4000b99c <_Thread_Resume+0x110> 4000b988: 80 a0 e0 00 cmp %g3, 0 the_thread->current_priority == 0 ) _Context_Switch_necessary = TRUE; 4000b98c: 84 10 20 01 mov 1, %g2 4000b990: 03 10 00 98 sethi %hi(0x40026000), %g1 4000b994: c4 20 61 cc st %g2, [ %g1 + 0x1cc ] ! 400261cc <_Context_Switch_necessary> 4000b998: 30 bf ff d1 b,a 4000b8dc <_Thread_Resume+0x50> _ISR_Flash( level ); if ( the_thread->current_priority < _Thread_Heir->current_priority ) { _Thread_Heir = the_thread; if ( _Thread_Executing->is_preemptible || 4000b99c: 12 bf ff d0 bne 4000b8dc <_Thread_Resume+0x50> 4000b9a0: 84 10 20 01 mov 1, %g2 the_thread->current_priority == 0 ) _Context_Switch_necessary = TRUE; 4000b9a4: 10 bf ff fc b 4000b994 <_Thread_Resume+0x108> <== NOT EXECUTED 4000b9a8: 03 10 00 98 sethi %hi(0x40026000), %g1 <== NOT EXECUTED 40009fdc <_Thread_Stack_Allocate>: size_t _Thread_Stack_Allocate( Thread_Control *the_thread, size_t stack_size ) { 40009fdc: 9d e3 bf 98 save %sp, -104, %sp void *stack_addr = 0; size_t the_stack_size = stack_size; if ( !_Stack_Is_enough( the_stack_size ) ) 40009fe0: 80 a6 6f ff cmp %i1, 0xfff 40009fe4: 28 80 00 02 bleu,a 40009fec <_Thread_Stack_Allocate+0x10> 40009fe8: 33 00 00 04 sethi %hi(0x1000), %i1 <== NOT EXECUTED * Call ONLY the CPU table stack allocate hook, _or_ the * the RTEMS workspace allocate. This is so the stack free * routine can call the correct deallocation routine. */ if ( _CPU_Table.stack_allocate_hook ) { 40009fec: 03 10 00 66 sethi %hi(0x40019800), %g1 40009ff0: c2 00 63 44 ld [ %g1 + 0x344 ], %g1 ! 40019b44 <_CPU_Table+0x20> 40009ff4: 80 a0 60 00 cmp %g1, 0 40009ff8: 02 80 00 0a be 4000a020 <_Thread_Stack_Allocate+0x44> 40009ffc: 92 06 60 10 add %i1, 0x10, %o1 stack_addr = (*_CPU_Table.stack_allocate_hook)( the_stack_size ); 4000a000: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a004: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED } if ( !stack_addr ) the_stack_size = 0; the_thread->Start.stack = stack_addr; 4000a008: d0 26 20 d8 st %o0, [ %i0 + 0xd8 ] <== NOT EXECUTED the_stack_size = _Stack_Adjust_size( the_stack_size ); stack_addr = _Workspace_Allocate( the_stack_size ); } if ( !stack_addr ) 4000a00c: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000a010: b0 60 20 00 subx %g0, 0, %i0 <== NOT EXECUTED the_stack_size = 0; the_thread->Start.stack = stack_addr; return the_stack_size; } 4000a014: b0 0e 40 18 and %i1, %i0, %i0 <== NOT EXECUTED 4000a018: 81 c7 e0 08 ret <== NOT EXECUTED 4000a01c: 81 e8 00 00 restore <== NOT EXECUTED 4000a020: 11 10 00 66 sethi %hi(0x40019800), %o0 4000a024: b2 10 00 09 mov %o1, %i1 4000a028: 7f ff f4 76 call 40007200 <_Heap_Allocate> 4000a02c: 90 12 23 5c or %o0, 0x35c, %o0 } if ( !stack_addr ) the_stack_size = 0; the_thread->Start.stack = stack_addr; 4000a030: d0 26 20 d8 st %o0, [ %i0 + 0xd8 ] the_stack_size = _Stack_Adjust_size( the_stack_size ); stack_addr = _Workspace_Allocate( the_stack_size ); } if ( !stack_addr ) 4000a034: 80 a0 00 08 cmp %g0, %o0 4000a038: b0 60 20 00 subx %g0, 0, %i0 the_stack_size = 0; the_thread->Start.stack = stack_addr; return the_stack_size; } 4000a03c: b0 0e 40 18 and %i1, %i0, %i0 4000a040: 81 c7 e0 08 ret 4000a044: 81 e8 00 00 restore 4000a048 <_Thread_Stack_Free>: */ void _Thread_Stack_Free( Thread_Control *the_thread ) { 4000a048: 9d e3 bf 98 save %sp, -104, %sp /* * If the API provided the stack space, then don't free it. */ if ( !the_thread->Start.core_allocated_stack ) 4000a04c: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 4000a050: 80 a0 60 00 cmp %g1, 0 4000a054: 02 80 00 08 be 4000a074 <_Thread_Stack_Free+0x2c> 4000a058: 03 10 00 66 sethi %hi(0x40019800), %g1 * Call ONLY the CPU table stack free hook, or the * the RTEMS workspace free. This is so the free * routine properly matches the allocation of the stack. */ if ( _CPU_Table.stack_free_hook ) 4000a05c: c2 00 63 48 ld [ %g1 + 0x348 ], %g1 ! 40019b48 <_CPU_Table+0x24> 4000a060: 80 a0 60 00 cmp %g1, 0 4000a064: 22 80 00 06 be,a 4000a07c <_Thread_Stack_Free+0x34> 4000a068: f2 06 20 d4 ld [ %i0 + 0xd4 ], %i1 (*_CPU_Table.stack_free_hook)( the_thread->Start.Initial_stack.area ); 4000a06c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a070: d0 06 20 d4 ld [ %i0 + 0xd4 ], %o0 <== NOT EXECUTED 4000a074: 81 c7 e0 08 ret <== NOT EXECUTED 4000a078: 81 e8 00 00 restore <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4000a07c: 31 10 00 66 sethi %hi(0x40019800), %i0 4000a080: 7f ff f4 92 call 400072c8 <_Heap_Free> 4000a084: 91 ee 23 5c restore %i0, 0x35c, %o0 4000a088: 01 00 00 00 nop 4000a114 <_Thread_Tickle_timeslice>: * * Output parameters: NONE */ void _Thread_Tickle_timeslice( void ) { 4000a114: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; 4000a118: 03 10 00 66 sethi %hi(0x40019800), %g1 4000a11c: e0 00 63 ec ld [ %g1 + 0x3ec ], %l0 ! 40019bec <_Thread_Executing> /* * If the thread is not preemptible or is not ready, then * just return. */ if ( !executing->is_preemptible ) 4000a120: c4 04 20 7c ld [ %l0 + 0x7c ], %g2 4000a124: 80 a0 a0 00 cmp %g2, 0 4000a128: 02 80 00 24 be 4000a1b8 <_Thread_Tickle_timeslice+0xa4> 4000a12c: 01 00 00 00 nop return; if ( !_States_Is_ready( executing->current_state ) ) 4000a130: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000a134: 80 a0 60 00 cmp %g1, 0 4000a138: 12 80 00 20 bne 4000a1b8 <_Thread_Tickle_timeslice+0xa4> 4000a13c: 01 00 00 00 nop /* * The cpu budget algorithm determines what happens next. */ switch ( executing->budget_algorithm ) { 4000a140: c2 04 20 88 ld [ %l0 + 0x88 ], %g1 4000a144: 80 a0 60 01 cmp %g1, 1 4000a148: 0a 80 00 09 bcs 4000a16c <_Thread_Tickle_timeslice+0x58> 4000a14c: 80 a0 60 02 cmp %g1, 2 4000a150: 18 80 00 09 bgu 4000a174 <_Thread_Tickle_timeslice+0x60> 4000a154: 80 a0 60 03 cmp %g1, 3 case THREAD_CPU_BUDGET_ALGORITHM_NONE: break; case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE: case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE: if ( (int)(--executing->cpu_time_budget) <= 0 ) { 4000a158: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 4000a15c: 82 00 7f ff add %g1, -1, %g1 4000a160: 80 a0 60 00 cmp %g1, 0 4000a164: 04 80 00 10 ble 4000a1a4 <_Thread_Tickle_timeslice+0x90> 4000a168: c2 24 20 84 st %g1, [ %l0 + 0x84 ] 4000a16c: 81 c7 e0 08 ret 4000a170: 81 e8 00 00 restore /* * The cpu budget algorithm determines what happens next. */ switch ( executing->budget_algorithm ) { 4000a174: 12 80 00 11 bne 4000a1b8 <_Thread_Tickle_timeslice+0xa4> <== NOT EXECUTED 4000a178: 01 00 00 00 nop <== NOT EXECUTED executing->cpu_time_budget = _Thread_Ticks_per_timeslice; } break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: if ( --executing->cpu_time_budget == 0 ) 4000a17c: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 <== NOT EXECUTED 4000a180: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000a184: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000a188: 12 bf ff f9 bne 4000a16c <_Thread_Tickle_timeslice+0x58> <== NOT EXECUTED 4000a18c: c2 24 20 84 st %g1, [ %l0 + 0x84 ] <== NOT EXECUTED (*executing->budget_callout)( executing ); 4000a190: c2 04 20 8c ld [ %l0 + 0x8c ], %g1 <== NOT EXECUTED 4000a194: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a198: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000a19c: 81 c7 e0 08 ret <== NOT EXECUTED 4000a1a0: 81 e8 00 00 restore <== NOT EXECUTED break; case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE: case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE: if ( (int)(--executing->cpu_time_budget) <= 0 ) { _Thread_Reset_timeslice(); 4000a1a4: 40 00 0c c0 call 4000d4a4 <_Thread_Reset_timeslice> 4000a1a8: 01 00 00 00 nop executing->cpu_time_budget = _Thread_Ticks_per_timeslice; 4000a1ac: 03 10 00 66 sethi %hi(0x40019800), %g1 4000a1b0: c4 00 62 68 ld [ %g1 + 0x268 ], %g2 ! 40019a68 <_Thread_Ticks_per_timeslice> 4000a1b4: c4 24 20 84 st %g2, [ %l0 + 0x84 ] 4000a1b8: 81 c7 e0 08 ret 4000a1bc: 81 e8 00 00 restore 4000a1c0 <_Thread_Yield_processor>: * ready chain * select heir */ void _Thread_Yield_processor( void ) { 4000a1c0: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *executing; Chain_Control *ready; executing = _Thread_Executing; 4000a1c4: 03 10 00 66 sethi %hi(0x40019800), %g1 4000a1c8: e0 00 63 ec ld [ %g1 + 0x3ec ], %l0 ! 40019bec <_Thread_Executing> ready = executing->ready; _ISR_Disable( level ); 4000a1cc: 7f ff df 03 call 40001dd8 4000a1d0: e2 04 20 98 ld [ %l0 + 0x98 ], %l1 4000a1d4: b0 10 00 08 mov %o0, %i0 if ( !_Chain_Has_only_one_node( ready ) ) { 4000a1d8: c4 04 40 00 ld [ %l1 ], %g2 4000a1dc: c2 04 60 08 ld [ %l1 + 8 ], %g1 4000a1e0: 80 a0 80 01 cmp %g2, %g1 4000a1e4: 12 80 00 0b bne 4000a210 <_Thread_Yield_processor+0x50> 4000a1e8: 03 10 00 66 sethi %hi(0x40019800), %g1 if ( _Thread_Is_heir( executing ) ) _Thread_Heir = (Thread_Control *) ready->first; _Context_Switch_necessary = TRUE; } else if ( !_Thread_Is_heir( executing ) ) 4000a1ec: c4 00 63 c4 ld [ %g1 + 0x3c4 ], %g2 ! 40019bc4 <_Thread_Heir> 4000a1f0: 80 a4 00 02 cmp %l0, %g2 4000a1f4: 02 80 00 05 be 4000a208 <_Thread_Yield_processor+0x48> 4000a1f8: 01 00 00 00 nop _Context_Switch_necessary = TRUE; 4000a1fc: 84 10 20 01 mov 1, %g2 ! 1 4000a200: 03 10 00 66 sethi %hi(0x40019800), %g1 4000a204: c4 20 63 fc st %g2, [ %g1 + 0x3fc ] ! 40019bfc <_Context_Switch_necessary> _ISR_Enable( level ); 4000a208: 7f ff de f8 call 40001de8 4000a20c: 81 e8 00 00 restore ) { Chain_Node *next; Chain_Node *previous; next = the_node->next; 4000a210: c6 04 00 00 ld [ %l0 ], %g3 previous = the_node->previous; 4000a214: c4 04 20 04 ld [ %l0 + 4 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000a218: 82 04 60 04 add %l1, 4, %g1 Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; previous->next = next; 4000a21c: c6 20 80 00 st %g3, [ %g2 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000a220: c2 24 00 00 st %g1, [ %l0 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000a224: c4 20 e0 04 st %g2, [ %g3 + 4 ] ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; 4000a228: c2 04 60 08 ld [ %l1 + 8 ], %g1 the_chain->last = the_node; 4000a22c: e0 24 60 08 st %l0, [ %l1 + 8 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000a230: c2 24 20 04 st %g1, [ %l0 + 4 ] Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 4000a234: e0 20 40 00 st %l0, [ %g1 ] _ISR_Disable( level ); if ( !_Chain_Has_only_one_node( ready ) ) { _Chain_Extract_unprotected( &executing->Object.Node ); _Chain_Append_unprotected( ready, &executing->Object.Node ); _ISR_Flash( level ); 4000a238: 7f ff de ec call 40001de8 4000a23c: 01 00 00 00 nop 4000a240: 7f ff de e6 call 40001dd8 4000a244: 01 00 00 00 nop if ( _Thread_Is_heir( executing ) ) 4000a248: 05 10 00 66 sethi %hi(0x40019800), %g2 4000a24c: c2 00 a3 c4 ld [ %g2 + 0x3c4 ], %g1 ! 40019bc4 <_Thread_Heir> 4000a250: 80 a4 00 01 cmp %l0, %g1 4000a254: 32 bf ff eb bne,a 4000a200 <_Thread_Yield_processor+0x40> 4000a258: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED _Thread_Heir = (Thread_Control *) ready->first; 4000a25c: c2 04 40 00 ld [ %l1 ], %g1 4000a260: 10 bf ff e7 b 4000a1fc <_Thread_Yield_processor+0x3c> 4000a264: c2 20 a3 c4 st %g1, [ %g2 + 0x3c4 ] 40009568 <_Thread_queue_Dequeue>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 40009568: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4000956c: 80 a0 60 00 cmp %g1, 0 40009570: 12 80 00 05 bne 40009584 <_Thread_queue_Dequeue+0x1c> 40009574: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_Dequeue_fifo( the_thread_queue ); 40009578: 82 13 c0 00 mov %o7, %g1 4000957c: 40 00 0e c2 call 4000d084 <_Thread_queue_Dequeue_fifo> 40009580: 9e 10 40 00 mov %g1, %o7 Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 40009584: 02 80 00 04 be 40009594 <_Thread_queue_Dequeue+0x2c> 40009588: 01 00 00 00 nop the_thread = NULL; break; } return( the_thread ); } 4000958c: 81 c3 e0 08 retl <== NOT EXECUTED 40009590: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED switch ( the_thread_queue->discipline ) { case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_Dequeue_fifo( the_thread_queue ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_Dequeue_priority( the_thread_queue ); 40009594: 82 13 c0 00 mov %o7, %g1 40009598: 40 00 00 03 call 400095a4 <_Thread_queue_Dequeue_priority> 4000959c: 9e 10 40 00 mov %g1, %o7 400095a0: 01 00 00 00 nop 4000d084 <_Thread_queue_Dequeue_fifo>: */ Thread_Control *_Thread_queue_Dequeue_fifo( Thread_queue_Control *the_thread_queue ) { 4000d084: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *the_thread; _ISR_Disable( level ); 4000d088: 7f ff d3 54 call 40001dd8 4000d08c: a0 10 00 18 mov %i0, %l0 4000d090: 84 10 00 08 mov %o0, %g2 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 4000d094: f0 06 00 00 ld [ %i0 ], %i0 if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) { 4000d098: 82 04 20 04 add %l0, 4, %g1 4000d09c: 80 a6 00 01 cmp %i0, %g1 4000d0a0: 22 80 00 1d be,a 4000d114 <_Thread_queue_Dequeue_fifo+0x90> 4000d0a4: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 { Chain_Node *return_node; Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; 4000d0a8: c2 06 00 00 ld [ %i0 ], %g1 the_chain->first = new_first; 4000d0ac: c2 24 00 00 st %g1, [ %l0 ] the_thread = (Thread_Control *) _Chain_Get_first_unprotected( &the_thread_queue->Queues.Fifo ); the_thread->Wait.queue = NULL; if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000d0b0: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 new_first->previous = _Chain_Head(the_chain); 4000d0b4: e0 20 60 04 st %l0, [ %g1 + 4 ] 4000d0b8: 80 a0 a0 02 cmp %g2, 2 4000d0bc: 02 80 00 0a be 4000d0e4 <_Thread_queue_Dequeue_fifo+0x60> 4000d0c0: c0 26 20 44 clr [ %i0 + 0x44 ] _ISR_Enable( level ); 4000d0c4: 7f ff d3 49 call 40001de8 4000d0c8: 01 00 00 00 nop RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000d0cc: 90 10 00 18 mov %i0, %o0 4000d0d0: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000d0d4: 7f ff ef 6e call 40008e8c <_Thread_Clear_state> 4000d0d8: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 4000d0dc: 81 c7 e0 08 ret 4000d0e0: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 4000d0e4: 82 10 20 03 mov 3, %g1 4000d0e8: c2 26 20 50 st %g1, [ %i0 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000d0ec: 7f ff d3 3f call 40001de8 4000d0f0: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 4000d0f4: 7f ff f5 ac call 4000a7a4 <_Watchdog_Remove> 4000d0f8: 90 06 20 48 add %i0, 0x48, %o0 4000d0fc: 90 10 00 18 mov %i0, %o0 4000d100: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000d104: 7f ff ef 62 call 40008e8c <_Thread_Clear_state> 4000d108: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 4000d10c: 81 c7 e0 08 ret 4000d110: 81 e8 00 00 restore #endif return the_thread; } switch ( the_thread_queue->sync_state ) { 4000d114: 80 a0 60 02 cmp %g1, 2 4000d118: 18 80 00 0c bgu 4000d148 <_Thread_queue_Dequeue_fifo+0xc4> 4000d11c: 80 a0 60 03 cmp %g1, 3 4000d120: 80 a0 60 01 cmp %g1, 1 4000d124: 0a 80 00 0b bcs 4000d150 <_Thread_queue_Dequeue_fifo+0xcc> 4000d128: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 4000d12c: c2 24 20 30 st %g1, [ %l0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d130: 7f ff d3 2e call 40001de8 <== NOT EXECUTED 4000d134: 01 00 00 00 nop <== NOT EXECUTED return _Thread_Executing; 4000d138: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000d13c: f0 00 63 ec ld [ %g1 + 0x3ec ], %i0 ! 40019bec <_Thread_Executing> <== NOT EXECUTED } return NULL; /* this is only to prevent warnings */ } 4000d140: 81 c7 e0 08 ret <== NOT EXECUTED 4000d144: 81 e8 00 00 restore <== NOT EXECUTED #endif return the_thread; } switch ( the_thread_queue->sync_state ) { 4000d148: 12 bf ff e5 bne 4000d0dc <_Thread_queue_Dequeue_fifo+0x58> <== NOT EXECUTED 4000d14c: b0 10 20 00 clr %i0 <== NOT EXECUTED case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 4000d150: b0 10 20 00 clr %i0 4000d154: 7f ff d3 25 call 40001de8 4000d158: 90 10 00 02 mov %g2, %o0 4000d15c: 81 c7 e0 08 ret 4000d160: 81 e8 00 00 restore 400095a4 <_Thread_queue_Dequeue_priority>: */ Thread_Control *_Thread_queue_Dequeue_priority( Thread_queue_Control *the_thread_queue ) { 400095a4: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *new_second_node; Chain_Node *last_node; Chain_Node *next_node; Chain_Node *previous_node; _ISR_Disable( level ); 400095a8: 7f ff e2 0c call 40001dd8 400095ac: 01 00 00 00 nop 400095b0: 9a 10 00 08 mov %o0, %o5 400095b4: 86 10 20 00 clr %g3 400095b8: 88 10 20 00 clr %g4 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 400095bc: d0 01 00 18 ld [ %g4 + %i0 ], %o0 for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; index++ ) { if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) ) { 400095c0: 85 28 e0 02 sll %g3, 2, %g2 400095c4: 83 28 e0 04 sll %g3, 4, %g1 400095c8: 82 20 40 02 sub %g1, %g2, %g1 400095cc: 82 06 00 01 add %i0, %g1, %g1 400095d0: 82 00 60 04 add %g1, 4, %g1 400095d4: 80 a2 00 01 cmp %o0, %g1 400095d8: 12 80 00 50 bne 40009718 <_Thread_queue_Dequeue_priority+0x174> 400095dc: 88 01 20 0c add %g4, 0xc, %g4 Chain_Node *previous_node; _ISR_Disable( level ); for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; index++ ) { 400095e0: 86 00 e0 01 inc %g3 Chain_Node *next_node; Chain_Node *previous_node; _ISR_Disable( level ); for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; 400095e4: 80 a0 e0 04 cmp %g3, 4 400095e8: 32 bf ff f6 bne,a 400095c0 <_Thread_queue_Dequeue_priority+0x1c> 400095ec: d0 01 00 18 ld [ %g4 + %i0 ], %o0 the_thread_queue->Queues.Priority[ index ].first; goto dequeue; } } switch ( the_thread_queue->sync_state ) { 400095f0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 400095f4: 80 a0 60 02 cmp %g1, 2 400095f8: 08 80 00 23 bleu 40009684 <_Thread_queue_Dequeue_priority+0xe0> 400095fc: 80 a0 60 01 cmp %g1, 1 40009600: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40009604: 02 80 00 29 be 400096a8 <_Thread_queue_Dequeue_priority+0x104> <== NOT EXECUTED 40009608: b0 10 20 00 clr %i0 <== NOT EXECUTED return _Thread_Executing; } dequeue: the_thread->Wait.queue = NULL; new_first_node = the_thread->Wait.Block2n.first; 4000960c: c6 06 20 38 ld [ %i0 + 0x38 ], %g3 new_first_thread = (Thread_Control *) new_first_node; next_node = the_thread->Object.Node.next; previous_node = the_thread->Object.Node.previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 40009610: 82 06 20 3c add %i0, 0x3c, %g1 _ISR_Enable( level ); return _Thread_Executing; } dequeue: the_thread->Wait.queue = NULL; 40009614: c0 26 20 44 clr [ %i0 + 0x44 ] new_first_node = the_thread->Wait.Block2n.first; new_first_thread = (Thread_Control *) new_first_node; next_node = the_thread->Object.Node.next; previous_node = the_thread->Object.Node.previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 40009618: 80 a0 c0 01 cmp %g3, %g1 dequeue: the_thread->Wait.queue = NULL; new_first_node = the_thread->Wait.Block2n.first; new_first_thread = (Thread_Control *) new_first_node; next_node = the_thread->Object.Node.next; 4000961c: c4 06 00 00 ld [ %i0 ], %g2 previous_node = the_thread->Object.Node.previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 40009620: 02 80 00 27 be 400096bc <_Thread_queue_Dequeue_priority+0x118> 40009624: c2 06 20 04 ld [ %i0 + 4 ], %g1 last_node = the_thread->Wait.Block2n.last; 40009628: d8 06 20 40 ld [ %i0 + 0x40 ], %o4 new_second_node = new_first_node->next; 4000962c: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 40009630: c6 20 a0 04 st %g3, [ %g2 + 4 ] if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { last_node = the_thread->Wait.Block2n.last; new_second_node = new_first_node->next; previous_node->next = new_first_node; 40009634: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 40009638: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 4000963c: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 40009640: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 40009644: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 40009648: 80 a0 80 01 cmp %g2, %g1 4000964c: 12 80 00 2d bne 40009700 <_Thread_queue_Dequeue_priority+0x15c> 40009650: 82 00 e0 38 add %g3, 0x38, %g1 } else { previous_node->next = next_node; next_node->previous = previous_node; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 40009654: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 40009658: 80 a0 60 02 cmp %g1, 2 4000965c: 02 80 00 1e be 400096d4 <_Thread_queue_Dequeue_priority+0x130> 40009660: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 40009664: 7f ff e1 e1 call 40001de8 40009668: 90 10 00 0d mov %o5, %o0 4000966c: 90 10 00 18 mov %i0, %o0 40009670: 13 04 00 ff sethi %hi(0x1003fc00), %o1 40009674: 7f ff fe 06 call 40008e8c <_Thread_Clear_state> 40009678: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 4000967c: 81 c7 e0 08 ret 40009680: 81 e8 00 00 restore the_thread_queue->Queues.Priority[ index ].first; goto dequeue; } } switch ( the_thread_queue->sync_state ) { 40009684: 0a 80 00 09 bcs 400096a8 <_Thread_queue_Dequeue_priority+0x104> 40009688: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 4000968c: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 40009690: 7f ff e1 d6 call 40001de8 <== NOT EXECUTED 40009694: 90 10 00 0d mov %o5, %o0 <== NOT EXECUTED return _Thread_Executing; 40009698: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000969c: f0 00 63 ec ld [ %g1 + 0x3ec ], %i0 ! 40019bec <_Thread_Executing> <== NOT EXECUTED 400096a0: 81 c7 e0 08 ret <== NOT EXECUTED 400096a4: 81 e8 00 00 restore <== NOT EXECUTED } switch ( the_thread_queue->sync_state ) { case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 400096a8: b0 10 20 00 clr %i0 400096ac: 7f ff e1 cf call 40001de8 400096b0: 90 10 00 0d mov %o5, %o0 400096b4: 81 c7 e0 08 ret 400096b8: 81 e8 00 00 restore last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); } } else { previous_node->next = next_node; next_node->previous = previous_node; 400096bc: c2 20 a0 04 st %g1, [ %g2 + 4 ] new_first_thread->Wait.Block2n.last = last_node; last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); } } else { previous_node->next = next_node; 400096c0: c4 20 40 00 st %g2, [ %g1 ] next_node->previous = previous_node; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 400096c4: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 400096c8: 80 a0 60 02 cmp %g1, 2 400096cc: 12 bf ff e6 bne 40009664 <_Thread_queue_Dequeue_priority+0xc0> 400096d0: 82 10 20 03 mov 3, %g1 RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 400096d4: c2 26 20 50 st %g1, [ %i0 + 0x50 ] _ISR_Enable( level ); _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 400096d8: 7f ff e1 c4 call 40001de8 400096dc: 90 10 00 0d mov %o5, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 400096e0: 40 00 04 31 call 4000a7a4 <_Watchdog_Remove> 400096e4: 90 06 20 48 add %i0, 0x48, %o0 400096e8: 90 10 00 18 mov %i0, %o0 400096ec: 13 04 00 ff sethi %hi(0x1003fc00), %o1 400096f0: 7f ff fd e7 call 40008e8c <_Thread_Clear_state> 400096f4: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 #if defined(RTEMS_MULTIPROCESSING) if ( !_Objects_Is_local_id( the_thread->Object.id ) ) _Thread_MP_Free_proxy( the_thread ); #endif return( the_thread ); } 400096f8: 81 c7 e0 08 ret 400096fc: 81 e8 00 00 restore new_first_node->next = next_node; new_first_node->previous = previous_node; if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { /* > two threads on 2-n */ new_second_node->previous = 40009700: c2 21 20 04 st %g1, [ %g4 + 4 ] _Chain_Head( &new_first_thread->Wait.Block2n ); new_first_thread->Wait.Block2n.first = new_second_node; 40009704: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] new_first_thread->Wait.Block2n.last = last_node; 40009708: d8 20 e0 40 st %o4, [ %g3 + 0x40 ] last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 4000970c: 82 00 e0 3c add %g3, 0x3c, %g1 40009710: 10 bf ff d1 b 40009654 <_Thread_queue_Dequeue_priority+0xb0> 40009714: c2 23 00 00 st %g1, [ %o4 ] _ISR_Disable( level ); for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; index++ ) { if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) ) { the_thread = (Thread_Control *) 40009718: 10 bf ff bd b 4000960c <_Thread_queue_Dequeue_priority+0x68> 4000971c: b0 10 00 08 mov %o0, %i0 4000d164 <_Thread_queue_Enqueue_fifo>: void _Thread_queue_Enqueue_fifo ( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000d164: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_queue_States sync_state; _ISR_Disable( level ); 4000d168: 7f ff d3 1c call 40001dd8 4000d16c: 01 00 00 00 nop sync_state = the_thread_queue->sync_state; 4000d170: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; switch ( sync_state ) { 4000d174: 80 a0 a0 02 cmp %g2, 2 4000d178: 02 80 00 22 be 4000d200 <_Thread_queue_Enqueue_fifo+0x9c> 4000d17c: c0 26 20 30 clr [ %i0 + 0x30 ] 4000d180: 80 a0 a0 03 cmp %g2, 3 4000d184: 02 80 00 11 be 4000d1c8 <_Thread_queue_Enqueue_fifo+0x64> 4000d188: 80 a0 a0 01 cmp %g2, 1 4000d18c: 02 80 00 07 be 4000d1a8 <_Thread_queue_Enqueue_fifo+0x44> 4000d190: 82 06 20 04 add %i0, 4, %g1 4000d194: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000d198: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000d19c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000d1a0: 7f ff ef 3b call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 4000d1a4: 81 e8 00 00 restore <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000d1a8: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 4000d1ac: c4 06 20 08 ld [ %i0 + 8 ], %g2 the_chain->last = the_node; 4000d1b0: f2 26 20 08 st %i1, [ %i0 + 8 ] case THREAD_QUEUE_NOTHING_HAPPENED: _Chain_Append_unprotected( &the_thread_queue->Queues.Fifo, &the_thread->Object.Node ); the_thread->Wait.queue = the_thread_queue; 4000d1b4: f0 26 60 44 st %i0, [ %i1 + 0x44 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000d1b8: c4 26 60 04 st %g2, [ %i1 + 4 ] Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 4000d1bc: f2 20 80 00 st %i1, [ %g2 ] _ISR_Enable( level ); 4000d1c0: 7f ff d3 0a call 40001de8 4000d1c4: 91 e8 00 08 restore %g0, %o0, %o0 the_thread->Wait.queue = NULL; _ISR_Enable( level ); break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 4000d1c8: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== NOT EXECUTED 4000d1cc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000d1d0: 12 80 00 16 bne 4000d228 <_Thread_queue_Enqueue_fifo+0xc4> <== NOT EXECUTED 4000d1d4: 01 00 00 00 nop <== NOT EXECUTED 4000d1d8: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 4000d1dc: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d1e0: 7f ff d3 02 call 40001de8 <== NOT EXECUTED 4000d1e4: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000d1e8: 7f ff f5 6f call 4000a7a4 <_Watchdog_Remove> <== NOT EXECUTED 4000d1ec: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 4000d1f0: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000d1f4: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000d1f8: 7f ff ef 25 call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 4000d1fc: 81 e8 00 00 restore <== NOT EXECUTED the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); return; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000d200: c4 06 60 44 ld [ %i1 + 0x44 ], %g2 <== NOT EXECUTED the_thread->Wait.queue = NULL; 4000d204: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); return; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000d208: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 <== NOT EXECUTED 4000d20c: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 4000d210: 7f ff d2 f6 call 40001de8 <== NOT EXECUTED 4000d214: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000d218: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000d21c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000d220: 7f ff ef 1b call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 4000d224: 81 e8 00 00 restore <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; _ISR_Enable( level ); (void) _Watchdog_Remove( &the_thread->Timer ); } else _ISR_Enable( level ); 4000d228: 7f ff d2 f0 call 40001de8 <== NOT EXECUTED 4000d22c: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000d230: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000d234: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000d238: 7f ff ef 15 call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 4000d23c: 81 e8 00 00 restore <== NOT EXECUTED 4000d240: 01 00 00 00 nop 400097a4 <_Thread_queue_Enqueue_priority>: void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 400097a4: 9d e3 bf 98 save %sp, -104, %sp States_Control block_state; Thread_queue_States sync_state; _Chain_Initialize_empty( &the_thread->Wait.Block2n ); priority = the_thread->current_priority; 400097a8: e4 06 60 14 ld [ %i1 + 0x14 ], %l2 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400097ac: 82 06 60 3c add %i1, 0x3c, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 400097b0: 84 06 60 38 add %i1, 0x38, %g2 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400097b4: c2 26 60 38 st %g1, [ %i1 + 0x38 ] the_chain->permanent_null = NULL; 400097b8: c0 26 60 3c clr [ %i1 + 0x3c ] the_chain->last = _Chain_Head(the_chain); 400097bc: c4 26 60 40 st %g2, [ %i1 + 0x40 ] void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 400097c0: aa 10 00 18 mov %i0, %l5 priority = the_thread->current_priority; header_index = _Thread_queue_Header_number( priority ); header = &the_thread_queue->Queues.Priority[ header_index ]; block_state = the_thread_queue->state; if ( _Thread_queue_Is_reverse_search( priority ) ) 400097c4: 80 8c a0 20 btst 0x20, %l2 RTEMS_INLINE_ROUTINE uint32_t _Thread_queue_Header_number ( Priority_Control the_priority ) { return (the_priority / TASK_QUEUE_DATA_PRIORITIES_PER_HEADER); 400097c8: 83 34 a0 06 srl %l2, 6, %g1 400097cc: 12 80 00 40 bne 400098cc <_Thread_queue_Enqueue_priority+0x128> 400097d0: e8 06 20 38 ld [ %i0 + 0x38 ], %l4 400097d4: 85 28 60 04 sll %g1, 4, %g2 400097d8: 83 28 60 02 sll %g1, 2, %g1 goto restart_reverse_search; restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->first; 400097dc: ac 20 80 01 sub %g2, %g1, %l6 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400097e0: 82 06 00 16 add %i0, %l6, %g1 400097e4: a6 00 60 04 add %g1, 4, %l3 if ( _Thread_queue_Is_reverse_search( priority ) ) goto restart_reverse_search; restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); 400097e8: 7f ff e1 7c call 40001dd8 400097ec: 01 00 00 00 nop 400097f0: b0 10 00 08 mov %o0, %i0 search_thread = (Thread_Control *) header->first; 400097f4: e0 05 40 16 ld [ %l5 + %l6 ], %l0 while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) { 400097f8: 80 a4 00 13 cmp %l0, %l3 400097fc: 02 80 00 24 be 4000988c <_Thread_queue_Enqueue_priority+0xe8> 40009800: a2 10 3f ff mov -1, %l1 search_priority = search_thread->current_priority; 40009804: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority <= search_priority ) 40009808: 80 a4 80 11 cmp %l2, %l1 4000980c: 28 80 00 21 bleu,a 40009890 <_Thread_queue_Enqueue_priority+0xec> 40009810: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.next; 40009814: e0 04 00 00 ld [ %l0 ], %l0 if ( _Chain_Is_tail( header, (Chain_Node *)search_thread ) ) 40009818: 80 a4 c0 10 cmp %l3, %l0 4000981c: 32 80 00 19 bne,a 40009880 <_Thread_queue_Enqueue_priority+0xdc> 40009820: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 } search_thread = (Thread_Control *)search_thread->Object.Node.next; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 40009824: 10 80 00 1b b 40009890 <_Thread_queue_Enqueue_priority+0xec> 40009828: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; if ( priority <= search_priority ) break; #endif _ISR_Flash( level ); 4000982c: 7f ff e1 6f call 40001de8 40009830: 90 10 00 18 mov %i0, %o0 40009834: 7f ff e1 69 call 40001dd8 40009838: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 4000983c: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40009840: 80 8d 00 01 btst %l4, %g1 40009844: 02 80 00 91 be 40009a88 <_Thread_queue_Enqueue_priority+0x2e4> 40009848: 01 00 00 00 nop _ISR_Enable( level ); goto restart_forward_search; } search_thread = 4000984c: e0 04 00 00 ld [ %l0 ], %l0 restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->first; while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) { 40009850: 80 a4 00 13 cmp %l0, %l3 40009854: 22 80 00 0f be,a 40009890 <_Thread_queue_Enqueue_priority+0xec> 40009858: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 search_priority = search_thread->current_priority; 4000985c: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority <= search_priority ) 40009860: 80 a4 80 11 cmp %l2, %l1 40009864: 28 80 00 0b bleu,a 40009890 <_Thread_queue_Enqueue_priority+0xec> 40009868: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.next; 4000986c: e0 04 00 00 ld [ %l0 ], %l0 if ( _Chain_Is_tail( header, (Chain_Node *)search_thread ) ) 40009870: 80 a4 00 13 cmp %l0, %l3 40009874: 22 80 00 07 be,a 40009890 <_Thread_queue_Enqueue_priority+0xec> 40009878: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; 4000987c: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority <= search_priority ) 40009880: 80 a4 80 11 cmp %l2, %l1 40009884: 18 bf ff ea bgu 4000982c <_Thread_queue_Enqueue_priority+0x88> 40009888: 01 00 00 00 nop } search_thread = (Thread_Control *)search_thread->Object.Node.next; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000988c: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 40009890: 80 a0 60 01 cmp %g1, 1 40009894: 02 80 00 63 be 40009a20 <_Thread_queue_Enqueue_priority+0x27c> 40009898: 80 a4 80 11 cmp %l2, %l1 return; synchronize: sync_state = the_thread_queue->sync_state; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; 4000989c: c0 25 60 30 clr [ %l5 + 0x30 ] <== NOT EXECUTED switch ( sync_state ) { 400098a0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400098a4: 02 80 00 54 be 400099f4 <_Thread_queue_Enqueue_priority+0x250> <== NOT EXECUTED 400098a8: 84 10 00 01 mov %g1, %g2 <== NOT EXECUTED 400098ac: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 400098b0: 22 80 00 43 be,a 400099bc <_Thread_queue_Enqueue_priority+0x218> <== NOT EXECUTED 400098b4: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== NOT EXECUTED 400098b8: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 400098bc: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 400098c0: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 400098c4: 7f ff fd 72 call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 400098c8: 81 e8 00 00 restore <== NOT EXECUTED 400098cc: 85 28 60 04 sll %g1, 4, %g2 400098d0: 83 28 60 02 sll %g1, 2, %g1 restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->last; 400098d4: 82 20 80 01 sub %g2, %g1, %g1 400098d8: a6 00 40 18 add %g1, %i0, %l3 return; restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); 400098dc: 7f ff e1 3f call 40001dd8 400098e0: 01 00 00 00 nop 400098e4: b0 10 00 08 mov %o0, %i0 search_thread = (Thread_Control *) header->last; 400098e8: e0 04 e0 08 ld [ %l3 + 8 ], %l0 while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) { 400098ec: 80 a4 00 13 cmp %l0, %l3 400098f0: 02 80 00 24 be 40009980 <_Thread_queue_Enqueue_priority+0x1dc> 400098f4: a2 10 21 00 mov 0x100, %l1 search_priority = search_thread->current_priority; 400098f8: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority >= search_priority ) 400098fc: 80 a4 80 11 cmp %l2, %l1 40009900: 3a 80 00 21 bcc,a 40009984 <_Thread_queue_Enqueue_priority+0x1e0> 40009904: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.previous; 40009908: e0 04 20 04 ld [ %l0 + 4 ], %l0 if ( _Chain_Is_head( header, (Chain_Node *)search_thread ) ) 4000990c: 80 a4 c0 10 cmp %l3, %l0 40009910: 32 80 00 19 bne,a 40009974 <_Thread_queue_Enqueue_priority+0x1d0> 40009914: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 } search_thread = (Thread_Control *) search_thread->Object.Node.previous; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 40009918: 10 80 00 1b b 40009984 <_Thread_queue_Enqueue_priority+0x1e0> 4000991c: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; if ( priority >= search_priority ) break; #endif _ISR_Flash( level ); 40009920: 7f ff e1 32 call 40001de8 40009924: 90 10 00 18 mov %i0, %o0 40009928: 7f ff e1 2c call 40001dd8 4000992c: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 40009930: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40009934: 80 8d 00 01 btst %l4, %g1 40009938: 02 80 00 57 be 40009a94 <_Thread_queue_Enqueue_priority+0x2f0> 4000993c: 01 00 00 00 nop _ISR_Enable( level ); goto restart_reverse_search; } search_thread = (Thread_Control *) 40009940: e0 04 20 04 ld [ %l0 + 4 ], %l0 restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->last; while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) { 40009944: 80 a4 00 13 cmp %l0, %l3 40009948: 22 80 00 0f be,a 40009984 <_Thread_queue_Enqueue_priority+0x1e0> 4000994c: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 search_priority = search_thread->current_priority; 40009950: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 <== NOT EXECUTED if ( priority >= search_priority ) 40009954: 80 a4 80 11 cmp %l2, %l1 <== NOT EXECUTED 40009958: 3a 80 00 0b bcc,a 40009984 <_Thread_queue_Enqueue_priority+0x1e0> <== NOT EXECUTED 4000995c: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 <== NOT EXECUTED break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.previous; 40009960: e0 04 20 04 ld [ %l0 + 4 ], %l0 <== NOT EXECUTED if ( _Chain_Is_head( header, (Chain_Node *)search_thread ) ) 40009964: 80 a4 00 13 cmp %l0, %l3 <== NOT EXECUTED 40009968: 22 80 00 07 be,a 40009984 <_Thread_queue_Enqueue_priority+0x1e0> <== NOT EXECUTED 4000996c: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 <== NOT EXECUTED break; search_priority = search_thread->current_priority; 40009970: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 <== NOT EXECUTED if ( priority >= search_priority ) 40009974: 80 a4 80 11 cmp %l2, %l1 40009978: 0a bf ff ea bcs 40009920 <_Thread_queue_Enqueue_priority+0x17c> 4000997c: 01 00 00 00 nop } search_thread = (Thread_Control *) search_thread->Object.Node.previous; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 40009980: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 40009984: 80 a0 60 01 cmp %g1, 1 40009988: 12 bf ff c6 bne 400098a0 <_Thread_queue_Enqueue_priority+0xfc> 4000998c: c0 25 60 30 clr [ %l5 + 0x30 ] goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 40009990: 80 a4 80 11 cmp %l2, %l1 40009994: 22 80 00 35 be,a 40009a68 <_Thread_queue_Enqueue_priority+0x2c4> 40009998: 82 04 20 3c add %l0, 0x3c, %g1 goto equal_priority; search_node = (Chain_Node *) search_thread; next_node = search_node->next; 4000999c: c2 04 00 00 ld [ %l0 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = next_node; the_node->previous = search_node; 400099a0: e0 26 60 04 st %l0, [ %i1 + 4 ] search_node = (Chain_Node *) search_thread; next_node = search_node->next; the_node = (Chain_Node *) the_thread; the_node->next = next_node; 400099a4: c2 26 40 00 st %g1, [ %i1 ] the_node->previous = search_node; search_node->next = the_node; next_node->previous = the_node; the_thread->Wait.queue = the_thread_queue; 400099a8: ea 26 60 44 st %l5, [ %i1 + 0x44 ] next_node = search_node->next; the_node = (Chain_Node *) the_thread; the_node->next = next_node; the_node->previous = search_node; search_node->next = the_node; 400099ac: f2 24 00 00 st %i1, [ %l0 ] next_node->previous = the_node; 400099b0: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 400099b4: 7f ff e1 0d call 40001de8 400099b8: 81 e8 00 00 restore the_thread->Wait.queue = NULL; _ISR_Enable( level ); break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 400099bc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400099c0: 12 80 00 22 bne 40009a48 <_Thread_queue_Enqueue_priority+0x2a4> <== NOT EXECUTED 400099c4: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 400099c8: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 400099cc: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 400099d0: 7f ff e1 06 call 40001de8 <== NOT EXECUTED 400099d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 400099d8: 40 00 03 73 call 4000a7a4 <_Watchdog_Remove> <== NOT EXECUTED 400099dc: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 400099e0: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 400099e4: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 400099e8: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 400099ec: 7f ff fd 28 call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 400099f0: 81 e8 00 00 restore <== NOT EXECUTED * This should never happen. All of this was dealt with above. */ break; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 400099f4: c4 06 60 44 ld [ %i1 + 0x44 ], %g2 <== NOT EXECUTED the_thread->Wait.queue = NULL; 400099f8: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED * This should never happen. All of this was dealt with above. */ break; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 400099fc: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 <== NOT EXECUTED 40009a00: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 40009a04: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009a08: 7f ff e0 f8 call 40001de8 <== NOT EXECUTED 40009a0c: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 40009a10: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 40009a14: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 40009a18: 7f ff fd 1d call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 40009a1c: 81 e8 00 00 restore <== NOT EXECUTED if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 40009a20: 02 80 00 11 be 40009a64 <_Thread_queue_Enqueue_priority+0x2c0> 40009a24: c0 25 60 30 clr [ %l5 + 0x30 ] goto equal_priority; search_node = (Chain_Node *) search_thread; previous_node = search_node->previous; 40009a28: c2 04 20 04 ld [ %l0 + 4 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 40009a2c: e0 26 40 00 st %l0, [ %i1 ] the_node->previous = previous_node; 40009a30: c2 26 60 04 st %g1, [ %i1 + 4 ] previous_node->next = the_node; search_node->previous = the_node; the_thread->Wait.queue = the_thread_queue; 40009a34: ea 26 60 44 st %l5, [ %i1 + 0x44 ] previous_node = search_node->previous; the_node = (Chain_Node *) the_thread; the_node->next = search_node; the_node->previous = previous_node; previous_node->next = the_node; 40009a38: f2 20 40 00 st %i1, [ %g1 ] search_node->previous = the_node; 40009a3c: f2 24 20 04 st %i1, [ %l0 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 40009a40: 7f ff e0 ea call 40001de8 40009a44: 81 e8 00 00 restore _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; _ISR_Enable( level ); (void) _Watchdog_Remove( &the_thread->Timer ); } else _ISR_Enable( level ); 40009a48: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009a4c: 7f ff e0 e7 call 40001de8 <== NOT EXECUTED 40009a50: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 40009a54: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 40009a58: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 40009a5c: 7f ff fd 0c call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 40009a60: 81 e8 00 00 restore <== NOT EXECUTED 40009a64: 82 04 20 3c add %l0, 0x3c, %g1 _ISR_Enable( level ); return; equal_priority: /* add at end of priority group */ search_node = _Chain_Tail( &search_thread->Wait.Block2n ); previous_node = search_node->previous; 40009a68: c4 00 60 04 ld [ %g1 + 4 ], %g2 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 40009a6c: c2 26 40 00 st %g1, [ %i1 ] the_node->previous = previous_node; 40009a70: c4 26 60 04 st %g2, [ %i1 + 4 ] previous_node->next = the_node; search_node->previous = the_node; the_thread->Wait.queue = the_thread_queue; 40009a74: ea 26 60 44 st %l5, [ %i1 + 0x44 ] previous_node = search_node->previous; the_node = (Chain_Node *) the_thread; the_node->next = search_node; the_node->previous = previous_node; previous_node->next = the_node; 40009a78: f2 20 80 00 st %i1, [ %g2 ] search_node->previous = the_node; 40009a7c: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 40009a80: 7f ff e0 da call 40001de8 40009a84: 81 e8 00 00 restore if ( priority <= search_priority ) break; #endif _ISR_Flash( level ); if ( !_States_Are_set( search_thread->current_state, block_state) ) { _ISR_Enable( level ); 40009a88: 7f ff e0 d8 call 40001de8 <== NOT EXECUTED 40009a8c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009a90: 30 bf ff 56 b,a 400097e8 <_Thread_queue_Enqueue_priority+0x44> <== NOT EXECUTED if ( priority >= search_priority ) break; #endif _ISR_Flash( level ); if ( !_States_Are_set( search_thread->current_state, block_state) ) { _ISR_Enable( level ); 40009a94: 7f ff e0 d5 call 40001de8 <== NOT EXECUTED 40009a98: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009a9c: 30 bf ff 90 b,a 400098dc <_Thread_queue_Enqueue_priority+0x138> <== NOT EXECUTED 40009720 <_Thread_queue_Enqueue_with_handler>: void _Thread_queue_Enqueue_with_handler( Thread_queue_Control *the_thread_queue, Watchdog_Interval timeout, Thread_queue_Timeout_callout handler ) { 40009720: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *the_thread; the_thread = _Thread_Executing; 40009724: 03 10 00 66 sethi %hi(0x40019800), %g1 else #endif /* * Set the blocking state for this thread queue in the thread. */ _Thread_Set_state( the_thread, the_thread_queue->state ); 40009728: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 Thread_queue_Timeout_callout handler ) { Thread_Control *the_thread; the_thread = _Thread_Executing; 4000972c: e0 00 63 ec ld [ %g1 + 0x3ec ], %l0 void _Thread_queue_Enqueue_with_handler( Thread_queue_Control *the_thread_queue, Watchdog_Interval timeout, Thread_queue_Timeout_callout handler ) { 40009730: a2 10 00 18 mov %i0, %l1 else #endif /* * Set the blocking state for this thread queue in the thread. */ _Thread_Set_state( the_thread, the_thread_queue->state ); 40009734: 40 00 01 9b call 40009da0 <_Thread_Set_state> 40009738: 90 10 00 10 mov %l0, %o0 /* * If the thread wants to timeout, then schedule its timer. */ if ( timeout ) { 4000973c: 80 a6 60 00 cmp %i1, 0 40009740: 32 80 00 0e bne,a 40009778 <_Thread_queue_Enqueue_with_handler+0x58> 40009744: c2 04 20 08 ld [ %l0 + 8 ], %g1 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 40009748: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 4000974c: 80 a0 60 00 cmp %g1, 0 40009750: 12 80 00 04 bne 40009760 <_Thread_queue_Enqueue_with_handler+0x40> 40009754: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Enqueue_fifo( the_thread_queue, the_thread ); 40009758: 40 00 0e 83 call 4000d164 <_Thread_queue_Enqueue_fifo> 4000975c: 93 e8 00 10 restore %g0, %l0, %o1 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 40009760: 02 80 00 04 be 40009770 <_Thread_queue_Enqueue_with_handler+0x50> 40009764: 01 00 00 00 nop 40009768: 81 c7 e0 08 ret <== NOT EXECUTED 4000976c: 81 e8 00 00 restore <== NOT EXECUTED case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Enqueue_fifo( the_thread_queue, the_thread ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Enqueue_priority( the_thread_queue, the_thread ); 40009770: 40 00 00 0d call 400097a4 <_Thread_queue_Enqueue_priority> 40009774: 93 e8 00 10 restore %g0, %l0, %o1 Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40009778: f4 24 20 64 st %i2, [ %l0 + 0x64 ] the_watchdog->id = id; 4000977c: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40009780: f2 24 20 54 st %i1, [ %l0 + 0x54 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40009784: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40009788: c0 24 20 6c clr [ %l0 + 0x6c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 4000978c: 11 10 00 67 sethi %hi(0x40019c00), %o0 40009790: 92 04 20 48 add %l0, 0x48, %o1 40009794: 40 00 03 9a call 4000a5fc <_Watchdog_Insert> 40009798: 90 12 20 0c or %o0, 0xc, %o0 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 4000979c: 10 bf ff ec b 4000974c <_Thread_queue_Enqueue_with_handler+0x2c> 400097a0: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 4000d244 <_Thread_queue_Extract>: void _Thread_queue_Extract( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { switch ( the_thread_queue->discipline ) { 4000d244: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4000d248: 80 a0 60 00 cmp %g1, 0 4000d24c: 12 80 00 05 bne 4000d260 <_Thread_queue_Extract+0x1c> 4000d250: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Extract_fifo( the_thread_queue, the_thread ); 4000d254: 82 13 c0 00 mov %o7, %g1 4000d258: 40 00 03 6a call 4000e000 <_Thread_queue_Extract_fifo> 4000d25c: 9e 10 40 00 mov %g1, %o7 void _Thread_queue_Extract( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { switch ( the_thread_queue->discipline ) { 4000d260: 02 80 00 04 be 4000d270 <_Thread_queue_Extract+0x2c> 4000d264: 94 10 20 00 clr %o2 4000d268: 81 c3 e0 08 retl <== NOT EXECUTED 4000d26c: 01 00 00 00 nop <== NOT EXECUTED case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Extract_fifo( the_thread_queue, the_thread ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Extract_priority( the_thread_queue, the_thread ); 4000d270: 82 13 c0 00 mov %o7, %g1 4000d274: 40 00 00 03 call 4000d280 <_Thread_queue_Extract_priority_helper> 4000d278: 9e 10 40 00 mov %g1, %o7 4000d27c: 01 00 00 00 nop 4000e000 <_Thread_queue_Extract_fifo>: void _Thread_queue_Extract_fifo( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000e000: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; _ISR_Disable( level ); 4000e004: 7f ff cf 75 call 40001dd8 4000e008: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000e00c: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000e010: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000e014: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000e018: 80 88 80 01 btst %g2, %g1 4000e01c: 02 80 00 19 be 4000e080 <_Thread_queue_Extract_fifo+0x80> 4000e020: 01 00 00 00 nop ) { Chain_Node *next; Chain_Node *previous; next = the_node->next; 4000e024: c2 06 40 00 ld [ %i1 ], %g1 previous = the_node->previous; 4000e028: c4 06 60 04 ld [ %i1 + 4 ], %g2 _Chain_Extract_unprotected( &the_thread->Object.Node ); the_thread->Wait.queue = NULL; if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000e02c: c6 06 60 50 ld [ %i1 + 0x50 ], %g3 next->previous = previous; previous->next = next; 4000e030: c2 20 80 00 st %g1, [ %g2 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000e034: c4 20 60 04 st %g2, [ %g1 + 4 ] 4000e038: 80 a0 e0 02 cmp %g3, 2 4000e03c: 12 80 00 0c bne 4000e06c <_Thread_queue_Extract_fifo+0x6c> 4000e040: c0 26 60 44 clr [ %i1 + 0x44 ] 4000e044: 82 10 20 03 mov 3, %g1 4000e048: c2 26 60 50 st %g1, [ %i1 + 0x50 ] _ISR_Enable( level ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000e04c: 7f ff cf 67 call 40001de8 4000e050: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 4000e054: 7f ff f1 d4 call 4000a7a4 <_Watchdog_Remove> 4000e058: 90 06 60 48 add %i1, 0x48, %o0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000e05c: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000e060: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000e064: 7f ff eb 8a call 40008e8c <_Thread_Clear_state> 4000e068: 81 e8 00 00 restore _Chain_Extract_unprotected( &the_thread->Object.Node ); the_thread->Wait.queue = NULL; if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { _ISR_Enable( level ); 4000e06c: 7f ff cf 5f call 40001de8 4000e070: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000e074: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000e078: 7f ff eb 85 call 40008e8c <_Thread_Clear_state> 4000e07c: 81 e8 00 00 restore ISR_Level level; _ISR_Disable( level ); if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { _ISR_Enable( level ); 4000e080: 7f ff cf 5a call 40001de8 <== NOT EXECUTED 4000e084: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000e088: 01 00 00 00 nop 4000d280 <_Thread_queue_Extract_priority_helper>: void _Thread_queue_Extract_priority_helper( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread, boolean requeuing ) { 4000d280: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *new_first_node; Chain_Node *new_second_node; Chain_Node *last_node; the_node = (Chain_Node *) the_thread; _ISR_Disable( level ); 4000d284: 7f ff d2 d5 call 40001dd8 4000d288: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000d28c: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000d290: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000d294: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000d298: 80 88 80 01 btst %g2, %g1 4000d29c: 02 80 00 29 be 4000d340 <_Thread_queue_Extract_priority_helper+0xc0> 4000d2a0: 82 06 60 3c add %i1, 0x3c, %g1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 4000d2a4: c6 06 60 38 ld [ %i1 + 0x38 ], %g3 /* * The thread was actually waiting on a thread queue so let's remove it. */ next_node = the_node->next; 4000d2a8: c4 06 40 00 ld [ %i1 ], %g2 previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 4000d2ac: 80 a0 c0 01 cmp %g3, %g1 4000d2b0: 12 80 00 10 bne 4000d2f0 <_Thread_queue_Extract_priority_helper+0x70> 4000d2b4: c2 06 60 04 ld [ %i1 + 4 ], %g1 new_first_thread->Wait.Block2n.last = last_node; last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); } } else { previous_node->next = next_node; next_node->previous = previous_node; 4000d2b8: c2 20 a0 04 st %g1, [ %g2 + 4 ] new_first_thread->Wait.Block2n.last = last_node; last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); } } else { previous_node->next = next_node; 4000d2bc: c4 20 40 00 st %g2, [ %g1 ] /* * If we are not supposed to touch timers or the thread's state, return. */ if ( requeuing ) { 4000d2c0: 80 a6 a0 00 cmp %i2, 0 4000d2c4: 12 80 00 1d bne 4000d338 <_Thread_queue_Extract_priority_helper+0xb8> 4000d2c8: 01 00 00 00 nop _ISR_Enable( level ); return; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000d2cc: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000d2d0: 80 a0 60 02 cmp %g1, 2 4000d2d4: 02 80 00 1d be 4000d348 <_Thread_queue_Extract_priority_helper+0xc8> 4000d2d8: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 4000d2dc: 7f ff d2 c3 call 40001de8 4000d2e0: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000d2e4: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000d2e8: 7f ff ee e9 call 40008e8c <_Thread_Clear_state> 4000d2ec: 81 e8 00 00 restore previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { new_first_node = the_thread->Wait.Block2n.first; new_first_thread = (Thread_Control *) new_first_node; last_node = the_thread->Wait.Block2n.last; 4000d2f0: da 06 60 40 ld [ %i1 + 0x40 ], %o5 new_second_node = new_first_node->next; 4000d2f4: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 4000d2f8: c6 20 a0 04 st %g3, [ %g2 + 4 ] new_first_node = the_thread->Wait.Block2n.first; new_first_thread = (Thread_Control *) new_first_node; last_node = the_thread->Wait.Block2n.last; new_second_node = new_first_node->next; previous_node->next = new_first_node; 4000d2fc: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 4000d300: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 4000d304: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 4000d308: c4 06 60 38 ld [ %i1 + 0x38 ], %g2 4000d30c: c2 06 60 40 ld [ %i1 + 0x40 ], %g1 4000d310: 80 a0 80 01 cmp %g2, %g1 4000d314: 02 bf ff ec be 4000d2c4 <_Thread_queue_Extract_priority_helper+0x44> 4000d318: 80 a6 a0 00 cmp %i2, 0 /* > two threads on 2-n */ new_second_node->previous = 4000d31c: 82 00 e0 38 add %g3, 0x38, %g1 <== NOT EXECUTED 4000d320: c2 21 20 04 st %g1, [ %g4 + 4 ] <== NOT EXECUTED _Chain_Head( &new_first_thread->Wait.Block2n ); new_first_thread->Wait.Block2n.first = new_second_node; 4000d324: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] <== NOT EXECUTED new_first_thread->Wait.Block2n.last = last_node; 4000d328: da 20 e0 40 st %o5, [ %g3 + 0x40 ] <== NOT EXECUTED last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 4000d32c: 82 00 e0 3c add %g3, 0x3c, %g1 <== NOT EXECUTED /* * If we are not supposed to touch timers or the thread's state, return. */ if ( requeuing ) { 4000d330: 02 bf ff e7 be 4000d2cc <_Thread_queue_Extract_priority_helper+0x4c> <== NOT EXECUTED 4000d334: c2 23 40 00 st %g1, [ %o5 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d338: 7f ff d2 ac call 40001de8 4000d33c: 91 e8 00 08 restore %g0, %o0, %o0 Chain_Node *last_node; the_node = (Chain_Node *) the_thread; _ISR_Disable( level ); if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { _ISR_Enable( level ); 4000d340: 7f ff d2 aa call 40001de8 <== NOT EXECUTED 4000d344: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000d348: c2 26 20 50 st %g1, [ %i0 + 0x50 ] <== NOT EXECUTED if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { _ISR_Enable( level ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000d34c: 7f ff d2 a7 call 40001de8 <== NOT EXECUTED 4000d350: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000d354: 7f ff f5 14 call 4000a7a4 <_Watchdog_Remove> <== NOT EXECUTED 4000d358: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED 4000d35c: b2 16 63 f8 or %i1, 0x3f8, %i1 <== NOT EXECUTED 4000d360: 7f ff ee cb call 40008e8c <_Thread_Clear_state> <== NOT EXECUTED 4000d364: 81 e8 00 00 restore <== NOT EXECUTED 4000d368: 01 00 00 00 nop 40009aa0 <_Thread_queue_Extract_with_proxy>: */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 40009aa0: 9d e3 bf 98 save %sp, -104, %sp States_Control state; Objects_Information *the_information; Objects_Thread_queue_Extract_callout proxy_extract_callout; state = the_thread->current_state; 40009aa4: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 40009aa8: a0 10 00 18 mov %i0, %l0 Objects_Information *the_information; Objects_Thread_queue_Extract_callout proxy_extract_callout; state = the_thread->current_state; if ( _States_Is_waiting_on_thread_queue( state ) ) { 40009aac: 03 00 00 ef sethi %hi(0x3bc00), %g1 40009ab0: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 40009ab4: 80 88 80 01 btst %g2, %g1 40009ab8: 02 80 00 1e be 40009b30 <_Thread_queue_Extract_with_proxy+0x90> 40009abc: b0 10 20 00 clr %i0 if ( _States_Is_waiting_for_rpc_reply( state ) && 40009ac0: 03 00 00 08 sethi %hi(0x2000), %g1 40009ac4: 80 88 80 01 btst %g2, %g1 40009ac8: 22 80 00 17 be,a 40009b24 <_Thread_queue_Extract_with_proxy+0x84> 40009acc: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 40009ad0: 03 00 00 e7 sethi %hi(0x39c00), %g1 <== NOT EXECUTED 40009ad4: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 39ee0 <== NOT EXECUTED 40009ad8: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 40009adc: 22 80 00 12 be,a 40009b24 <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 40009ae0: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED _States_Is_locally_blocked( state ) ) { the_information = _Objects_Get_information( the_thread->Wait.id ); 40009ae4: c6 04 20 20 ld [ %l0 + 0x20 ], %g3 <== NOT EXECUTED proxy_extract_callout = 40009ae8: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 40009aec: 85 30 e0 16 srl %g3, 0x16, %g2 <== NOT EXECUTED 40009af0: 82 10 62 70 or %g1, 0x270, %g1 <== NOT EXECUTED 40009af4: 84 08 a0 1c and %g2, 0x1c, %g2 <== NOT EXECUTED 40009af8: c8 00 40 02 ld [ %g1 + %g2 ], %g4 <== NOT EXECUTED 40009afc: 87 30 e0 1b srl %g3, 0x1b, %g3 <== NOT EXECUTED 40009b00: 87 28 e0 02 sll %g3, 2, %g3 <== NOT EXECUTED 40009b04: c2 01 00 03 ld [ %g4 + %g3 ], %g1 <== NOT EXECUTED 40009b08: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 <== NOT EXECUTED (Objects_Thread_queue_Extract_callout) the_information->extract; if ( proxy_extract_callout ) 40009b0c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009b10: 22 80 00 05 be,a 40009b24 <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 40009b14: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED (*proxy_extract_callout)( the_thread ); 40009b18: 9f c0 40 00 call %g1 <== NOT EXECUTED 40009b1c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 40009b20: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED 40009b24: 92 10 00 10 mov %l0, %o1 40009b28: 40 00 0d c7 call 4000d244 <_Thread_queue_Extract> 40009b2c: b0 10 20 01 mov 1, %i0 return TRUE; } return FALSE; } 40009b30: 81 c7 e0 08 ret 40009b34: 81 e8 00 00 restore 4001b170 <_Thread_queue_First>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4001b170: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4001b174: 80 a0 60 00 cmp %g1, 0 4001b178: 12 80 00 05 bne 4001b18c <_Thread_queue_First+0x1c> 4001b17c: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_First_fifo( the_thread_queue ); 4001b180: 82 13 c0 00 mov %o7, %g1 4001b184: 40 00 03 1b call 4001bdf0 <_Thread_queue_First_fifo> 4001b188: 9e 10 40 00 mov %g1, %o7 Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4001b18c: 02 80 00 04 be 4001b19c <_Thread_queue_First+0x2c> 4001b190: 01 00 00 00 nop the_thread = NULL; break; } return the_thread; } 4001b194: 81 c3 e0 08 retl <== NOT EXECUTED 4001b198: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED switch ( the_thread_queue->discipline ) { case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_First_fifo( the_thread_queue ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_First_priority( the_thread_queue ); 4001b19c: 82 13 c0 00 mov %o7, %g1 4001b1a0: 40 00 00 03 call 4001b1ac <_Thread_queue_First_priority> 4001b1a4: 9e 10 40 00 mov %g1, %o7 4001b1a8: 01 00 00 00 nop 40009b58 <_Thread_queue_Initialize>: uint32_t timeout_status ) { uint32_t index; the_thread_queue->state = state; 40009b58: d4 22 20 38 st %o2, [ %o0 + 0x38 ] the_thread_queue->discipline = the_discipline; the_thread_queue->timeout_status = timeout_status; 40009b5c: d6 22 20 3c st %o3, [ %o0 + 0x3c ] the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; 40009b60: c0 22 20 30 clr [ %o0 + 0x30 ] switch ( the_discipline ) { 40009b64: 80 a2 60 00 cmp %o1, 0 40009b68: 12 80 00 07 bne 40009b84 <_Thread_queue_Initialize+0x2c> 40009b6c: d2 22 20 34 st %o1, [ %o0 + 0x34 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009b70: 82 02 20 04 add %o0, 4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009b74: d0 22 20 08 st %o0, [ %o0 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40009b78: c0 22 20 04 clr [ %o0 + 4 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009b7c: 81 c3 e0 08 retl 40009b80: c2 22 00 00 st %g1, [ %o0 ] 40009b84: 80 a2 60 01 cmp %o1, 1 40009b88: 02 80 00 04 be 40009b98 <_Thread_queue_Initialize+0x40> 40009b8c: 82 02 20 04 add %o0, 4, %g1 40009b90: 81 c3 e0 08 retl <== NOT EXECUTED 40009b94: 01 00 00 00 nop <== NOT EXECUTED 40009b98: 84 02 20 10 add %o0, 0x10, %g2 40009b9c: c2 22 00 00 st %g1, [ %o0 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009ba0: 82 02 20 0c add %o0, 0xc, %g1 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009ba4: c4 22 20 0c st %g2, [ %o0 + 0xc ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009ba8: c2 22 20 14 st %g1, [ %o0 + 0x14 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009bac: 84 02 20 1c add %o0, 0x1c, %g2 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009bb0: 82 02 20 18 add %o0, 0x18, %g1 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009bb4: c4 22 20 18 st %g2, [ %o0 + 0x18 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009bb8: c2 22 20 20 st %g1, [ %o0 + 0x20 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009bbc: 84 02 20 28 add %o0, 0x28, %g2 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009bc0: 82 02 20 24 add %o0, 0x24, %g1 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40009bc4: c0 22 20 04 clr [ %o0 + 4 ] the_chain->last = _Chain_Head(the_chain); 40009bc8: d0 22 20 08 st %o0, [ %o0 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40009bcc: c0 22 20 10 clr [ %o0 + 0x10 ] 40009bd0: c0 22 20 1c clr [ %o0 + 0x1c ] 40009bd4: c0 22 20 28 clr [ %o0 + 0x28 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009bd8: c4 22 20 24 st %g2, [ %o0 + 0x24 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009bdc: 81 c3 e0 08 retl 40009be0: c2 22 20 2c st %g1, [ %o0 + 0x2c ] 40009be4 <_Thread_queue_Requeue>: void _Thread_queue_Requeue( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 40009be4: 9d e3 bf 98 save %sp, -104, %sp /* just in case the thread really wasn't blocked here */ if ( !the_thread_queue ) { 40009be8: 80 a6 20 00 cmp %i0, 0 40009bec: 02 80 00 06 be 40009c04 <_Thread_queue_Requeue+0x20> 40009bf0: 01 00 00 00 nop return; } switch ( the_thread_queue->discipline ) { 40009bf4: e0 06 20 34 ld [ %i0 + 0x34 ], %l0 40009bf8: 80 a4 20 01 cmp %l0, 1 40009bfc: 02 80 00 04 be 40009c0c <_Thread_queue_Requeue+0x28> 40009c00: 01 00 00 00 nop 40009c04: 81 c7 e0 08 ret <== NOT EXECUTED 40009c08: 81 e8 00 00 restore <== NOT EXECUTED break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: { Thread_queue_Control *tq = the_thread_queue; ISR_Level level; _ISR_Disable( level ); 40009c0c: 7f ff e0 73 call 40001dd8 40009c10: 01 00 00 00 nop 40009c14: a2 10 00 08 mov %o0, %l1 if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 40009c18: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 40009c1c: 03 00 00 ef sethi %hi(0x3bc00), %g1 40009c20: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 40009c24: 80 88 80 01 btst %g2, %g1 40009c28: 12 80 00 04 bne 40009c38 <_Thread_queue_Requeue+0x54> 40009c2c: 94 10 20 01 mov 1, %o2 _Thread_queue_Enter_critical_section( tq ); _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE ); _Thread_queue_Enqueue_priority( tq, the_thread ); } _ISR_Enable( level ); 40009c30: 7f ff e0 6e call 40001de8 <== NOT EXECUTED 40009c34: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED ISR_Level level; _ISR_Disable( level ); if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { _Thread_queue_Enter_critical_section( tq ); _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE ); 40009c38: 90 10 00 18 mov %i0, %o0 40009c3c: 92 10 00 19 mov %i1, %o1 40009c40: 40 00 0d 90 call 4000d280 <_Thread_queue_Extract_priority_helper> 40009c44: e0 26 20 30 st %l0, [ %i0 + 0x30 ] _Thread_queue_Enqueue_priority( tq, the_thread ); 40009c48: 90 10 00 18 mov %i0, %o0 40009c4c: 7f ff fe d6 call 400097a4 <_Thread_queue_Enqueue_priority> 40009c50: 92 10 00 19 mov %i1, %o1 } _ISR_Enable( level ); 40009c54: 7f ff e0 65 call 40001de8 40009c58: 91 e8 00 11 restore %g0, %l1, %o0 40009c5c: 01 00 00 00 nop 40009c60 <_Thread_queue_Timeout>: void _Thread_queue_Timeout( Objects_Id id, void *ignored ) { 40009c60: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40009c64: 92 96 20 00 orcc %i0, 0, %o1 40009c68: 12 80 00 1a bne 40009cd0 <_Thread_queue_Timeout+0x70> 40009c6c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009c70: 31 10 00 66 sethi %hi(0x40019800), %i0 <== NOT EXECUTED 40009c74: c2 06 23 10 ld [ %i0 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009c78: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009c7c: c2 26 23 10 st %g1, [ %i0 + 0x310 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40009c80: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 40009c84: d2 00 63 ec ld [ %g1 + 0x3ec ], %o1 ! 40019bec <_Thread_Executing> <== NOT EXECUTED Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40009c88: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED */ static inline void _Thread_queue_Process_timeout( Thread_Control *the_thread ) { Thread_queue_Control *the_thread_queue = the_thread->Wait.queue; 40009c8c: d0 02 60 44 ld [ %o1 + 0x44 ], %o0 * If it is not satisfied, then it is "nothing happened" and * this is the "timeout" transition. After a request is satisfied, * a timeout is not allowed to occur. */ if ( the_thread_queue->sync_state != THREAD_QUEUE_SYNCHRONIZED && 40009c90: c6 02 20 30 ld [ %o0 + 0x30 ], %g3 40009c94: 80 a0 e0 00 cmp %g3, 0 40009c98: 02 80 00 06 be 40009cb0 <_Thread_queue_Timeout+0x50> 40009c9c: 03 10 00 66 sethi %hi(0x40019800), %g1 40009ca0: c4 00 63 ec ld [ %g1 + 0x3ec ], %g2 ! 40019bec <_Thread_Executing> <== NOT EXECUTED 40009ca4: 80 a2 40 02 cmp %o1, %g2 <== NOT EXECUTED 40009ca8: 02 80 00 20 be 40009d28 <_Thread_queue_Timeout+0xc8> <== NOT EXECUTED 40009cac: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED ) the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT; } else { the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 40009cb0: c2 02 20 3c ld [ %o0 + 0x3c ], %g1 _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 40009cb4: 40 00 0d 64 call 4000d244 <_Thread_queue_Extract> 40009cb8: c2 22 60 34 st %g1, [ %o1 + 0x34 ] */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 40009cbc: c2 06 23 10 ld [ %i0 + 0x310 ], %g1 40009cc0: 82 00 7f ff add %g1, -1, %g1 40009cc4: c2 26 23 10 st %g1, [ %i0 + 0x310 ] 40009cc8: 81 c7 e0 08 ret 40009ccc: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40009cd0: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40009cd4: 80 a0 a0 04 cmp %g2, 4 40009cd8: 18 bf ff fc bgu 40009cc8 <_Thread_queue_Timeout+0x68> 40009cdc: 83 32 60 1b srl %o1, 0x1b, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40009ce0: 80 a0 60 01 cmp %g1, 1 40009ce4: 12 bf ff f9 bne 40009cc8 <_Thread_queue_Timeout+0x68> 40009ce8: 83 28 a0 02 sll %g2, 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40009cec: 05 10 00 66 sethi %hi(0x40019800), %g2 40009cf0: 84 10 a2 70 or %g2, 0x270, %g2 ! 40019a70 <_Objects_Information_table> 40009cf4: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40009cf8: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40009cfc: 80 a2 20 00 cmp %o0, 0 40009d00: 02 bf ff f2 be 40009cc8 <_Thread_queue_Timeout+0x68> 40009d04: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40009d08: 7f ff f7 ee call 40007cc0 <_Objects_Get> 40009d0c: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40009d10: c2 07 bf f4 ld [ %fp + -12 ], %g1 40009d14: 80 a0 60 00 cmp %g1, 0 40009d18: 12 bf ff ec bne 40009cc8 <_Thread_queue_Timeout+0x68> 40009d1c: 92 10 00 08 mov %o0, %o1 40009d20: 10 bf ff db b 40009c8c <_Thread_queue_Timeout+0x2c> 40009d24: 31 10 00 66 sethi %hi(0x40019800), %i0 * a timeout is not allowed to occur. */ if ( the_thread_queue->sync_state != THREAD_QUEUE_SYNCHRONIZED && _Thread_Is_executing( the_thread ) ) { if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED ) 40009d28: 02 bf ff e5 be 40009cbc <_Thread_queue_Timeout+0x5c> <== NOT EXECUTED 40009d2c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT; 40009d30: 10 bf ff e3 b 40009cbc <_Thread_queue_Timeout+0x5c> <== NOT EXECUTED 40009d34: c2 22 20 30 st %g1, [ %o0 + 0x30 ] <== NOT EXECUTED 400133c0 <_Timer_Server_body>: */ Thread _Timer_Server_body( uint32_t ignored ) { 400133c0: 9d e3 bf 98 save %sp, -104, %sp /* * Initialize the "last time" markers to indicate the timer that * the server was initiated. */ _Timer_Server_ticks_last_time = _Watchdog_Ticks_since_boot; 400133c4: 03 10 00 cd sethi %hi(0x40033400), %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400133c8: 21 10 00 cd sethi %hi(0x40033400), %l0 400133cc: c6 00 62 64 ld [ %g1 + 0x264 ], %g3 _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 400133d0: 05 10 00 cd sethi %hi(0x40033400), %g2 400133d4: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 400133d8: c8 00 a1 98 ld [ %g2 + 0x198 ], %g4 /* * Initialize the "last time" markers to indicate the timer that * the server was initiated. */ _Timer_Server_ticks_last_time = _Watchdog_Ticks_since_boot; 400133dc: 05 10 00 cc sethi %hi(0x40033000), %g2 400133e0: 82 00 60 01 inc %g1 400133e4: c6 20 a3 ec st %g3, [ %g2 + 0x3ec ] 400133e8: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 400133ec: 05 10 00 cc sethi %hi(0x40033000), %g2 400133f0: c8 20 a3 e8 st %g4, [ %g2 + 0x3e8 ] ! 400333e8 <_Timer_Server_seconds_last_time> RTEMS_COMPILER_MEMORY_BARRIER(); 400133f4: 03 10 00 cc sethi %hi(0x40033000), %g1 400133f8: 05 10 00 cd sethi %hi(0x40033400), %g2 400133fc: ba 10 63 e0 or %g1, 0x3e0, %i5 40013400: 03 10 00 cc sethi %hi(0x40033000), %g1 40013404: 39 10 00 ce sethi %hi(0x40033800), %i4 /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 40013408: b4 10 a1 dc or %g2, 0x1dc, %i2 4001340c: ae 10 63 f4 or %g1, 0x3f4, %l7 40013410: 05 10 00 cc sethi %hi(0x40033000), %g2 40013414: 03 10 00 cd sethi %hi(0x40033400), %g1 40013418: a6 10 a3 fc or %g2, 0x3fc, %l3 4001341c: b6 10 61 d0 or %g1, 0x1d0, %i3 40013420: 2d 10 00 cc sethi %hi(0x40033000), %l6 40013424: 2b 10 00 cc sethi %hi(0x40033000), %l5 40013428: a4 10 00 1c mov %i4, %l2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001342c: a2 10 00 10 mov %l0, %l1 40013430: 10 80 00 18 b 40013490 <_Timer_Server_body+0xd0> 40013434: a8 10 00 13 mov %l3, %l4 _Timer_Server_reset_ticks_timer(); _Timer_Server_reset_seconds_timer(); 40013438: 80 a0 40 17 cmp %g1, %l7 4001343c: 32 80 00 27 bne,a 400134d8 <_Timer_Server_body+0x118> 40013440: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 40013444: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 40013448: 82 00 7f ff add %g1, -1, %g1 4001344c: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] 40013450: c4 04 20 e0 ld [ %l0 + 0xe0 ], %g2 40013454: 80 a0 a0 00 cmp %g2, 0 40013458: 02 80 00 2b be 40013504 <_Timer_Server_body+0x144> 4001345c: 01 00 00 00 nop * At this point, at least one of the timers this task relies * upon has fired. Stop them both while we process any outstanding * timers. Before we block, we will restart them. */ _Timer_Server_stop_ticks_timer(); 40013460: d0 04 a0 98 ld [ %l2 + 0x98 ], %o0 <== NOT EXECUTED 40013464: 40 00 14 19 call 400184c8 <_Watchdog_Remove> 40013468: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_stop_seconds_timer(); 4001346c: 40 00 14 17 call 400184c8 <_Watchdog_Remove> 40013470: 90 10 00 14 mov %l4, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40013474: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40013478: 82 00 60 01 inc %g1 4001347c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] * This ensures that the primary difference is that _ISR_Nest_level * is 0 for task-based timers and non-zero for the others. */ _Thread_Disable_dispatch(); _Timer_Server_process_ticks_chain(); 40013480: 7f ff ff bf call 4001337c <_Timer_Server_process_ticks_chain> 40013484: 01 00 00 00 nop _Timer_Server_process_seconds_chain(); 40013488: 7f ff ff a2 call 40013310 <_Timer_Server_process_seconds_chain> 4001348c: 01 00 00 00 nop /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 40013490: d0 07 20 98 ld [ %i4 + 0x98 ], %o0 40013494: 40 00 10 b8 call 40017774 <_Thread_Set_state> 40013498: 92 10 20 08 mov 8, %o1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 4001349c: c2 05 a3 dc ld [ %l6 + 0x3dc ], %g1 _Timer_Server_reset_ticks_timer(); 400134a0: 80 a0 40 1d cmp %g1, %i5 400134a4: 22 bf ff e5 be,a 40013438 <_Timer_Server_body+0x78> 400134a8: c2 05 63 f0 ld [ %l5 + 0x3f0 ], %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400134ac: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 400134b0: d2 04 a0 98 ld [ %l2 + 0x98 ], %o1 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400134b4: 90 10 00 1a mov %i2, %o0 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400134b8: c2 22 60 54 st %g1, [ %o1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400134bc: 40 00 13 99 call 40018320 <_Watchdog_Insert> 400134c0: 92 02 60 48 add %o1, 0x48, %o1 400134c4: c2 05 63 f0 ld [ %l5 + 0x3f0 ], %g1 _Timer_Server_reset_seconds_timer(); 400134c8: 80 a0 40 17 cmp %g1, %l7 400134cc: 02 bf ff de be 40013444 <_Timer_Server_body+0x84> 400134d0: 01 00 00 00 nop Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400134d4: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 400134d8: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400134dc: c2 24 e0 0c st %g1, [ %l3 + 0xc ] <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 400134e0: 40 00 13 90 call 40018320 <_Watchdog_Insert> <== NOT EXECUTED 400134e4: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400134e8: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 <== NOT EXECUTED 400134ec: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400134f0: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] <== NOT EXECUTED 400134f4: c4 04 20 e0 ld [ %l0 + 0xe0 ], %g2 <== NOT EXECUTED 400134f8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400134fc: 32 bf ff da bne,a 40013464 <_Timer_Server_body+0xa4> <== NOT EXECUTED 40013500: d0 04 a0 98 ld [ %l2 + 0x98 ], %o0 <== NOT EXECUTED _Thread_Dispatch(); 40013504: 40 00 0d 29 call 400169a8 <_Thread_Dispatch> 40013508: 01 00 00 00 nop * At this point, at least one of the timers this task relies * upon has fired. Stop them both while we process any outstanding * timers. Before we block, we will restart them. */ _Timer_Server_stop_ticks_timer(); 4001350c: 10 bf ff d6 b 40013464 <_Timer_Server_body+0xa4> 40013510: d0 04 a0 98 ld [ %l2 + 0x98 ], %o0 4001337c <_Timer_Server_process_ticks_chain>: void _Timer_Server_process_ticks_chain(void) { Watchdog_Interval snapshot; Watchdog_Interval ticks; snapshot = _Watchdog_Ticks_since_boot; 4001337c: 03 10 00 cd sethi %hi(0x40033400), %g1 if ( snapshot >= _Timer_Server_ticks_last_time ) 40013380: 07 10 00 cc sethi %hi(0x40033000), %g3 void _Timer_Server_process_ticks_chain(void) { Watchdog_Interval snapshot; Watchdog_Interval ticks; snapshot = _Watchdog_Ticks_since_boot; 40013384: c4 00 62 64 ld [ %g1 + 0x264 ], %g2 if ( snapshot >= _Timer_Server_ticks_last_time ) 40013388: c2 00 e3 ec ld [ %g3 + 0x3ec ], %g1 4001338c: 80 a0 80 01 cmp %g2, %g1 40013390: 1a 80 00 04 bcc 400133a0 <_Timer_Server_process_ticks_chain+0x24> 40013394: 94 20 80 01 sub %g2, %g1, %o2 ticks = snapshot - _Timer_Server_ticks_last_time; else ticks = (0xFFFFFFFF - _Timer_Server_ticks_last_time) + snapshot; 40013398: 82 38 00 01 xnor %g0, %g1, %g1 <== NOT EXECUTED 4001339c: 94 00 40 02 add %g1, %g2, %o2 <== NOT EXECUTED _Timer_Server_ticks_last_time = snapshot; _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 400133a0: 11 10 00 cc sethi %hi(0x40033000), %o0 if ( snapshot >= _Timer_Server_ticks_last_time ) ticks = snapshot - _Timer_Server_ticks_last_time; else ticks = (0xFFFFFFFF - _Timer_Server_ticks_last_time) + snapshot; _Timer_Server_ticks_last_time = snapshot; 400133a4: c4 20 e3 ec st %g2, [ %g3 + 0x3ec ] _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 400133a8: 90 12 23 dc or %o0, 0x3dc, %o0 400133ac: 92 10 20 00 clr %o1 400133b0: 82 13 c0 00 mov %o7, %g1 400133b4: 40 00 13 aa call 4001825c <_Watchdog_Adjust> 400133b8: 9e 10 40 00 mov %g1, %o7 400133bc: 01 00 00 00 nop 4000c0f8 <_Timespec_Divide>: const struct timespec *lhs, const struct timespec *rhs, uint32_t *ival_percentage, uint32_t *fval_percentage ) { 4000c0f8: 9d e3 bf 98 save %sp, -104, %sp * For math simplicity just convert the timespec to nanoseconds * in a 64-bit integer. */ left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; left += lhs->tv_nsec; right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c0fc: c2 06 40 00 ld [ %i1 ], %g1 /* * For math simplicity just convert the timespec to nanoseconds * in a 64-bit integer. */ left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; left += lhs->tv_nsec; 4000c100: de 06 20 04 ld [ %i0 + 4 ], %o7 right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c104: 96 10 00 01 mov %g1, %o3 4000c108: 95 38 60 1f sra %g1, 0x1f, %o2 4000c10c: 83 30 60 1d srl %g1, 0x1d, %g1 4000c110: 9b 2a e0 03 sll %o3, 3, %o5 4000c114: 99 2a a0 03 sll %o2, 3, %o4 4000c118: 98 10 40 0c or %g1, %o4, %o4 4000c11c: 83 33 60 1b srl %o5, 0x1b, %g1 4000c120: 85 2b 20 05 sll %o4, 5, %g2 4000c124: 87 2b 60 05 sll %o5, 5, %g3 4000c128: 84 10 40 02 or %g1, %g2, %g2 4000c12c: 86 a0 c0 0d subcc %g3, %o5, %g3 4000c130: 83 30 e0 1a srl %g3, 0x1a, %g1 4000c134: 84 60 80 0c subx %g2, %o4, %g2 4000c138: 9b 28 e0 06 sll %g3, 6, %o5 4000c13c: 99 28 a0 06 sll %g2, 6, %o4 4000c140: 9a a3 40 03 subcc %o5, %g3, %o5 4000c144: 98 10 40 0c or %g1, %o4, %o4 4000c148: 98 63 00 02 subx %o4, %g2, %o4 4000c14c: 9a 83 40 0b addcc %o5, %o3, %o5 4000c150: 83 33 60 1e srl %o5, 0x1e, %g1 4000c154: 98 43 00 0a addx %o4, %o2, %o4 4000c158: 87 2b 60 02 sll %o5, 2, %g3 4000c15c: 85 2b 20 02 sll %o4, 2, %g2 4000c160: 9a 83 40 03 addcc %o5, %g3, %o5 4000c164: 84 10 40 02 or %g1, %g2, %g2 4000c168: 83 33 60 1e srl %o5, 0x1e, %g1 4000c16c: 98 43 00 02 addx %o4, %g2, %o4 4000c170: 87 2b 60 02 sll %o5, 2, %g3 4000c174: 85 2b 20 02 sll %o4, 2, %g2 4000c178: 9a 83 40 03 addcc %o5, %g3, %o5 4000c17c: 84 10 40 02 or %g1, %g2, %g2 4000c180: 83 33 60 1e srl %o5, 0x1e, %g1 4000c184: 98 43 00 02 addx %o4, %g2, %o4 4000c188: 85 2b 20 02 sll %o4, 2, %g2 4000c18c: 84 10 40 02 or %g1, %g2, %g2 right += rhs->tv_nsec; 4000c190: c2 06 60 04 ld [ %i1 + 4 ], %g1 * For math simplicity just convert the timespec to nanoseconds * in a 64-bit integer. */ left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; left += lhs->tv_nsec; right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c194: 87 2b 60 02 sll %o5, 2, %g3 4000c198: 9a 83 40 03 addcc %o5, %g3, %o5 right += rhs->tv_nsec; 4000c19c: 95 38 60 1f sra %g1, 0x1f, %o2 * For math simplicity just convert the timespec to nanoseconds * in a 64-bit integer. */ left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; left += lhs->tv_nsec; right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c1a0: 98 43 00 02 addx %o4, %g2, %o4 4000c1a4: 89 33 60 17 srl %o5, 0x17, %g4 4000c1a8: 85 2b 20 09 sll %o4, 9, %g2 4000c1ac: 87 2b 60 09 sll %o5, 9, %g3 4000c1b0: 84 11 00 02 or %g4, %g2, %g2 right += rhs->tv_nsec; 4000c1b4: 96 80 c0 01 addcc %g3, %g1, %o3 4000c1b8: 94 40 80 0a addx %g2, %o2, %o2 if ( right == 0 ) { 4000c1bc: 80 92 80 0b orcc %o2, %o3, %g0 4000c1c0: 12 80 00 06 bne 4000c1d8 <_Timespec_Divide+0xe0> 4000c1c4: f0 06 00 00 ld [ %i0 ], %i0 *ival_percentage = 0; 4000c1c8: c0 26 80 00 clr [ %i2 ] <== NOT EXECUTED *fval_percentage = 0; 4000c1cc: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED 4000c1d0: 81 c7 e0 08 ret <== NOT EXECUTED 4000c1d4: 81 e8 00 00 restore <== NOT EXECUTED /* * For math simplicity just convert the timespec to nanoseconds * in a 64-bit integer. */ left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c1d8: 83 36 20 1d srl %i0, 0x1d, %g1 4000c1dc: 9b 2e 20 03 sll %i0, 3, %o5 4000c1e0: 91 3e 20 1f sra %i0, 0x1f, %o0 4000c1e4: 99 2a 20 03 sll %o0, 3, %o4 4000c1e8: 98 10 40 0c or %g1, %o4, %o4 4000c1ec: 83 33 60 1b srl %o5, 0x1b, %g1 4000c1f0: 85 2b 20 05 sll %o4, 5, %g2 4000c1f4: 87 2b 60 05 sll %o5, 5, %g3 4000c1f8: 84 10 40 02 or %g1, %g2, %g2 4000c1fc: 86 a0 c0 0d subcc %g3, %o5, %g3 4000c200: 83 30 e0 1a srl %g3, 0x1a, %g1 4000c204: 84 60 80 0c subx %g2, %o4, %g2 4000c208: 9b 28 e0 06 sll %g3, 6, %o5 4000c20c: 99 28 a0 06 sll %g2, 6, %o4 4000c210: 9a a3 40 03 subcc %o5, %g3, %o5 4000c214: 98 10 40 0c or %g1, %o4, %o4 4000c218: 98 63 00 02 subx %o4, %g2, %o4 4000c21c: 9a 83 40 18 addcc %o5, %i0, %o5 4000c220: 83 33 60 1e srl %o5, 0x1e, %g1 4000c224: 98 43 00 08 addx %o4, %o0, %o4 4000c228: 87 2b 60 02 sll %o5, 2, %g3 4000c22c: 85 2b 20 02 sll %o4, 2, %g2 4000c230: 9a 83 40 03 addcc %o5, %g3, %o5 4000c234: 84 10 40 02 or %g1, %g2, %g2 4000c238: 83 33 60 1e srl %o5, 0x1e, %g1 4000c23c: 98 43 00 02 addx %o4, %g2, %o4 4000c240: 87 2b 60 02 sll %o5, 2, %g3 4000c244: 85 2b 20 02 sll %o4, 2, %g2 4000c248: 9a 83 40 03 addcc %o5, %g3, %o5 4000c24c: 84 10 40 02 or %g1, %g2, %g2 4000c250: 83 33 60 1e srl %o5, 0x1e, %g1 4000c254: 98 43 00 02 addx %o4, %g2, %o4 4000c258: 87 2b 60 02 sll %o5, 2, %g3 4000c25c: 85 2b 20 02 sll %o4, 2, %g2 4000c260: 9a 83 40 03 addcc %o5, %g3, %o5 4000c264: 84 10 40 02 or %g1, %g2, %g2 4000c268: 83 33 60 17 srl %o5, 0x17, %g1 4000c26c: 98 43 00 02 addx %o4, %g2, %o4 4000c270: 93 2b 60 09 sll %o5, 9, %o1 4000c274: 91 2b 20 09 sll %o4, 9, %o0 * Put it back in the timespec result. * * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; 4000c278: 92 82 40 0f addcc %o1, %o7, %o1 /* * For math simplicity just convert the timespec to nanoseconds * in a 64-bit integer. */ left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c27c: 90 10 40 08 or %g1, %o0, %o0 * Put it back in the timespec result. * * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; 4000c280: 83 32 60 1e srl %o1, 0x1e, %g1 4000c284: a1 3b e0 1f sra %o7, 0x1f, %l0 4000c288: 87 2a 60 02 sll %o1, 2, %g3 4000c28c: 90 42 00 10 addx %o0, %l0, %o0 4000c290: 85 2a 20 02 sll %o0, 2, %g2 4000c294: 84 10 40 02 or %g1, %g2, %g2 4000c298: 83 30 e0 1b srl %g3, 0x1b, %g1 4000c29c: 99 28 a0 05 sll %g2, 5, %o4 4000c2a0: 9b 28 e0 05 sll %g3, 5, %o5 4000c2a4: 98 10 40 0c or %g1, %o4, %o4 4000c2a8: 9a a3 40 03 subcc %o5, %g3, %o5 4000c2ac: 98 63 00 02 subx %o4, %g2, %o4 4000c2b0: 9a 83 40 09 addcc %o5, %o1, %o5 4000c2b4: 83 33 60 1e srl %o5, 0x1e, %g1 4000c2b8: 98 43 00 08 addx %o4, %o0, %o4 4000c2bc: 87 2b 60 02 sll %o5, 2, %g3 4000c2c0: 85 2b 20 02 sll %o4, 2, %g2 4000c2c4: 9a 83 40 03 addcc %o5, %g3, %o5 4000c2c8: 84 10 40 02 or %g1, %g2, %g2 4000c2cc: 83 33 60 1e srl %o5, 0x1e, %g1 4000c2d0: 87 2b 60 02 sll %o5, 2, %g3 4000c2d4: 98 43 00 02 addx %o4, %g2, %o4 4000c2d8: 9a 83 40 03 addcc %o5, %g3, %o5 4000c2dc: 85 2b 20 02 sll %o4, 2, %g2 4000c2e0: 84 10 40 02 or %g1, %g2, %g2 4000c2e4: 83 33 60 1b srl %o5, 0x1b, %g1 4000c2e8: 98 43 00 02 addx %o4, %g2, %o4 4000c2ec: 93 2b 60 05 sll %o5, 5, %o1 4000c2f0: 91 2b 20 05 sll %o4, 5, %o0 4000c2f4: 40 00 33 56 call 4001904c <__udivdi3> 4000c2f8: 90 10 40 08 or %g1, %o0, %o0 *ival_percentage = answer / 1000; 4000c2fc: 94 10 20 00 clr %o2 * Put it back in the timespec result. * * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; 4000c300: a0 10 00 08 mov %o0, %l0 4000c304: a2 10 00 09 mov %o1, %l1 *ival_percentage = answer / 1000; 4000c308: 96 10 23 e8 mov 0x3e8, %o3 4000c30c: 40 00 33 50 call 4001904c <__udivdi3> 4000c310: 90 10 00 10 mov %l0, %o0 *fval_percentage = answer % 1000; 4000c314: 90 10 00 10 mov %l0, %o0 * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; *ival_percentage = answer / 1000; 4000c318: d2 26 80 00 st %o1, [ %i2 ] *fval_percentage = answer % 1000; 4000c31c: 94 10 20 00 clr %o2 4000c320: 92 10 00 11 mov %l1, %o1 4000c324: 40 00 34 29 call 400193c8 <__umoddi3> 4000c328: 96 10 23 e8 mov 0x3e8, %o3 4000c32c: d2 26 c0 00 st %o1, [ %i3 ] 4000c330: 81 c7 e0 08 ret 4000c334: 81 e8 00 00 restore 40016e18 <_Timespec_From_ticks>: void _Timespec_From_ticks( uint32_t ticks, struct timespec *time ) { 40016e18: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 40016e1c: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED 40016e20: d2 00 63 6c ld [ %g1 + 0x36c ], %o1 ! 4002b36c <_TOD_Microseconds_per_tick> <== NOT EXECUTED 40016e24: 40 00 2f c0 call 40022d24 <.umul> <== NOT EXECUTED 40016e28: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 40016e2c: 21 00 03 d0 sethi %hi(0xf4000), %l0 <== NOT EXECUTED struct timespec *time ) { uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 40016e30: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 40016e34: 7f ff aa 70 call 400017f4 <.udiv> <== NOT EXECUTED 40016e38: 92 14 22 40 or %l0, 0x240, %o1 <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 40016e3c: 92 14 22 40 or %l0, 0x240, %o1 <== NOT EXECUTED { uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 40016e40: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 40016e44: 40 00 2f f2 call 40022e0c <.urem> <== NOT EXECUTED 40016e48: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40016e4c: 85 2a 20 02 sll %o0, 2, %g2 <== NOT EXECUTED 40016e50: 83 2a 20 07 sll %o0, 7, %g1 <== NOT EXECUTED 40016e54: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40016e58: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40016e5c: 83 28 60 03 sll %g1, 3, %g1 <== NOT EXECUTED 40016e60: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED TOD_NANOSECONDS_PER_MICROSECOND; } 40016e64: 81 c7 e0 08 ret <== NOT EXECUTED 40016e68: 81 e8 00 00 restore <== NOT EXECUTED 40016e6c <_Timespec_Is_valid>: boolean _Timespec_Is_valid( const struct timespec *time ) { if ( !time ) 40016e6c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016e70: 02 80 00 0e be 40016ea8 <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 40016e74: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_sec < 0 ) 40016e78: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40016e7c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016e80: 06 80 00 0a bl 40016ea8 <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 40016e84: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_nsec < 0 ) 40016e88: d0 02 20 04 ld [ %o0 + 4 ], %o0 <== NOT EXECUTED 40016e8c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016e90: 06 80 00 06 bl 40016ea8 <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 40016e94: 03 0e e6 b2 sethi %hi(0x3b9ac800), %g1 <== NOT EXECUTED 40016e98: 82 10 61 ff or %g1, 0x1ff, %g1 ! 3b9ac9ff <== NOT EXECUTED 40016e9c: 80 a0 40 08 cmp %g1, %o0 <== NOT EXECUTED 40016ea0: 81 c3 e0 08 retl <== NOT EXECUTED 40016ea4: 90 60 3f ff subx %g0, -1, %o0 <== NOT EXECUTED if ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) return FALSE; return TRUE; } 40016ea8: 81 c3 e0 08 retl <== NOT EXECUTED 40016eac: 90 10 20 00 clr %o0 <== NOT EXECUTED 40016eb0 <_Timespec_To_ticks>: */ uint32_t _Timespec_To_ticks( const struct timespec *time ) { 40016eb0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) 40016eb4: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED 40016eb8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40016ebc: 02 80 00 15 be 40016f10 <_Timespec_To_ticks+0x60> <== NOT EXECUTED 40016ec0: e4 06 20 04 ld [ %i0 + 4 ], %l2 <== NOT EXECUTED return 0; ticks = time->tv_sec * TOD_TICKS_PER_SECOND; 40016ec4: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED 40016ec8: e2 00 63 6c ld [ %g1 + 0x36c ], %l1 ! 4002b36c <_TOD_Microseconds_per_tick> <== NOT EXECUTED 40016ecc: 11 00 03 d0 sethi %hi(0xf4000), %o0 <== NOT EXECUTED 40016ed0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 40016ed4: 7f ff aa 48 call 400017f4 <.udiv> <== NOT EXECUTED 40016ed8: 90 12 22 40 or %o0, 0x240, %o0 <== NOT EXECUTED 40016edc: 40 00 2f 92 call 40022d24 <.umul> <== NOT EXECUTED 40016ee0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED ticks += (time->tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND) / 40016ee4: 92 10 23 e8 mov 0x3e8, %o1 <== NOT EXECUTED uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) return 0; ticks = time->tv_sec * TOD_TICKS_PER_SECOND; 40016ee8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED ticks += (time->tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND) / 40016eec: 7f ff aa 42 call 400017f4 <.udiv> <== NOT EXECUTED 40016ef0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40016ef4: 7f ff aa 40 call 400017f4 <.udiv> <== NOT EXECUTED 40016ef8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED _TOD_Microseconds_per_tick; if (ticks) 40016efc: b0 82 00 10 addcc %o0, %l0, %i0 <== NOT EXECUTED 40016f00: 02 80 00 08 be 40016f20 <_Timespec_To_ticks+0x70> <== NOT EXECUTED 40016f04: 01 00 00 00 nop <== NOT EXECUTED return ticks; return 1; } 40016f08: 81 c7 e0 08 ret <== NOT EXECUTED 40016f0c: 81 e8 00 00 restore <== NOT EXECUTED const struct timespec *time ) { uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) 40016f10: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40016f14: 12 bf ff ec bne 40016ec4 <_Timespec_To_ticks+0x14> <== NOT EXECUTED 40016f18: b0 10 20 00 clr %i0 <== NOT EXECUTED 40016f1c: 30 bf ff fb b,a 40016f08 <_Timespec_To_ticks+0x58> <== NOT EXECUTED if (ticks) return ticks; return 1; } 40016f20: 81 c7 e0 08 ret <== NOT EXECUTED 40016f24: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 4000d540 <_User_extensions_Add_API_set>: */ void _User_extensions_Add_API_set ( User_extensions_Control *the_extension ) { 4000d540: 9d e3 bf 98 save %sp, -104, %sp _Chain_Append( &_User_extensions_List, &the_extension->Node ); 4000d544: 11 10 00 67 sethi %hi(0x40019c00), %o0 4000d548: 92 10 00 18 mov %i0, %o1 4000d54c: 7f ff e5 dc call 40006cbc <_Chain_Append> 4000d550: 90 12 21 94 or %o0, 0x194, %o0 /* * If a switch handler is present, append it to the switch chain. */ if ( the_extension->Callouts.thread_switch != NULL ) { 4000d554: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 4000d558: 80 a0 60 00 cmp %g1, 0 4000d55c: 02 80 00 06 be 4000d574 <_User_extensions_Add_API_set+0x34> 4000d560: b2 06 20 08 add %i0, 8, %i1 the_extension->Switch.thread_switch = the_extension->Callouts.thread_switch; 4000d564: c2 26 20 10 st %g1, [ %i0 + 0x10 ] _Chain_Append( 4000d568: 31 10 00 66 sethi %hi(0x40019800), %i0 4000d56c: 7f ff e5 d4 call 40006cbc <_Chain_Append> 4000d570: 91 ee 23 14 restore %i0, 0x314, %o0 4000d574: 81 c7 e0 08 ret <== NOT EXECUTED 4000d578: 81 e8 00 00 restore <== NOT EXECUTED 4000a414 <_User_extensions_Fatal>: void _User_extensions_Fatal ( Internal_errors_Source the_source, boolean is_internal, uint32_t the_error ) { 4000a414: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; 4000a418: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a41c: 82 10 61 94 or %g1, 0x194, %g1 ! 40019d94 <_User_extensions_List> 4000a420: e0 00 60 08 ld [ %g1 + 8 ], %l0 !_Chain_Is_head( &_User_extensions_List, the_node ) ; 4000a424: 80 a4 00 01 cmp %l0, %g1 4000a428: 02 80 00 0d be 4000a45c <_User_extensions_Fatal+0x48> 4000a42c: a2 10 00 01 mov %g1, %l1 the_node = the_node->previous ) { the_extension = (User_extensions_Control *) the_node; if ( the_extension->Callouts.fatal != NULL ) 4000a430: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 4000a434: 80 a0 60 00 cmp %g1, 0 4000a438: 02 80 00 05 be 4000a44c <_User_extensions_Fatal+0x38> 4000a43c: 90 10 00 18 mov %i0, %o0 (*the_extension->Callouts.fatal)( the_source, is_internal, the_error ); 4000a440: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000a444: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a448: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; !_Chain_Is_head( &_User_extensions_List, the_node ) ; the_node = the_node->previous ) { 4000a44c: e0 04 20 04 ld [ %l0 + 4 ], %l0 { Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; !_Chain_Is_head( &_User_extensions_List, the_node ) ; 4000a450: 80 a4 00 11 cmp %l0, %l1 4000a454: 32 bf ff f8 bne,a 4000a434 <_User_extensions_Fatal+0x20> 4000a458: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 4000a45c: 81 c7 e0 08 ret 4000a460: 81 e8 00 00 restore 400116bc <_User_extensions_Remove_set>: */ void _User_extensions_Remove_set ( User_extensions_Control *the_extension ) { 400116bc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _Chain_Extract( &the_extension->Node ); 400116c0: 40 00 12 b2 call 40016188 <_Chain_Extract> <== NOT EXECUTED 400116c4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * If a switch handler is present, remove it. */ if ( the_extension->Callouts.thread_switch != NULL ) 400116c8: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 <== NOT EXECUTED 400116cc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400116d0: 02 80 00 04 be 400116e0 <_User_extensions_Remove_set+0x24> <== NOT EXECUTED 400116d4: 01 00 00 00 nop <== NOT EXECUTED _Chain_Extract( &the_extension->Switch.Node ); 400116d8: 40 00 12 ac call 40016188 <_Chain_Extract> <== NOT EXECUTED 400116dc: 91 ee 20 08 restore %i0, 8, %o0 <== NOT EXECUTED 400116e0: 81 c7 e0 08 ret <== NOT EXECUTED 400116e4: 81 e8 00 00 restore <== NOT EXECUTED 4000a464 <_User_extensions_Thread_exitted>: */ void _User_extensions_Thread_exitted ( Thread_Control *executing ) { 4000a464: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; 4000a468: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a46c: 82 10 61 94 or %g1, 0x194, %g1 ! 40019d94 <_User_extensions_List> 4000a470: e0 00 60 08 ld [ %g1 + 8 ], %l0 !_Chain_Is_head( &_User_extensions_List, the_node ) ; 4000a474: 80 a4 00 01 cmp %l0, %g1 4000a478: 02 80 00 0c be 4000a4a8 <_User_extensions_Thread_exitted+0x44> 4000a47c: a2 10 00 01 mov %g1, %l1 the_node = the_node->previous ) { the_extension = (User_extensions_Control *) the_node; if ( the_extension->Callouts.thread_exitted != NULL ) 4000a480: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 4000a484: 80 a0 60 00 cmp %g1, 0 4000a488: 02 80 00 04 be 4000a498 <_User_extensions_Thread_exitted+0x34> 4000a48c: 90 10 00 18 mov %i0, %o0 (*the_extension->Callouts.thread_exitted)( executing ); 4000a490: 9f c0 40 00 call %g1 4000a494: 01 00 00 00 nop Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; !_Chain_Is_head( &_User_extensions_List, the_node ) ; the_node = the_node->previous ) { 4000a498: e0 04 20 04 ld [ %l0 + 4 ], %l0 { Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; !_Chain_Is_head( &_User_extensions_List, the_node ) ; 4000a49c: 80 a4 00 11 cmp %l0, %l1 4000a4a0: 32 bf ff f9 bne,a 4000a484 <_User_extensions_Thread_exitted+0x20> 4000a4a4: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 <== NOT EXECUTED 4000a4a8: 81 c7 e0 08 ret 4000a4ac: 81 e8 00 00 restore 4000a5fc <_Watchdog_Insert>: void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 4000a5fc: 9d e3 bf 98 save %sp, -104, %sp Watchdog_Control *after; uint32_t insert_isr_nest_level; Watchdog_Interval delta_interval; insert_isr_nest_level = _ISR_Nest_level; 4000a600: 03 10 00 66 sethi %hi(0x40019800), %g1 void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 4000a604: ac 10 00 18 mov %i0, %l6 Watchdog_Control *after; uint32_t insert_isr_nest_level; Watchdog_Interval delta_interval; insert_isr_nest_level = _ISR_Nest_level; 4000a608: e6 00 63 d4 ld [ %g1 + 0x3d4 ], %l3 _ISR_Disable( level ); 4000a60c: 7f ff dd f3 call 40001dd8 4000a610: 01 00 00 00 nop 4000a614: b0 10 00 08 mov %o0, %i0 /* * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_watchdog->state != WATCHDOG_INACTIVE ) { 4000a618: c2 06 60 08 ld [ %i1 + 8 ], %g1 4000a61c: 80 a0 60 00 cmp %g1, 0 4000a620: 12 80 00 49 bne 4000a744 <_Watchdog_Insert+0x148> 4000a624: 01 00 00 00 nop _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; 4000a628: 2b 10 00 67 sethi %hi(0x40019c00), %l5 4000a62c: c2 05 60 90 ld [ %l5 + 0x90 ], %g1 ! 40019c90 <_Watchdog_Sync_count> if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 4000a630: 84 10 20 01 mov 1, %g2 _Watchdog_Sync_count++; 4000a634: 82 00 60 01 inc %g1 4000a638: 29 10 00 66 sethi %hi(0x40019800), %l4 if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 4000a63c: c4 26 60 08 st %g2, [ %i1 + 8 ] _Watchdog_Sync_count++; 4000a640: c2 25 60 90 st %g1, [ %l5 + 0x90 ] if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 4000a644: ae 10 00 14 mov %l4, %l7 the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 4000a648: e4 06 60 0c ld [ %i1 + 0xc ], %l2 * cache *header!! * * Till Straumann, 7/2003 (gcc-3.2.2 -O4 on powerpc) * */ for ( after = (Watchdog_Control *) ((volatile Chain_Control *)header)->first ; 4000a64c: e2 05 80 00 ld [ %l6 ], %l1 ; after = _Watchdog_Next( after ) ) { if ( delta_interval == 0 || !_Watchdog_Next( after ) ) 4000a650: 80 a4 a0 00 cmp %l2, 0 4000a654: 02 80 00 2b be 4000a700 <_Watchdog_Insert+0x104> 4000a658: 03 10 00 67 sethi %hi(0x40019c00), %g1 RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_Next( Watchdog_Control *the_watchdog ) { return ( (Watchdog_Control *) the_watchdog->Node.next ); 4000a65c: c2 04 40 00 ld [ %l1 ], %g1 4000a660: 80 a0 60 00 cmp %g1, 0 4000a664: 02 80 00 27 be 4000a700 <_Watchdog_Insert+0x104> 4000a668: 03 10 00 67 sethi %hi(0x40019c00), %g1 break; if ( delta_interval < after->delta_interval ) { 4000a66c: e0 04 60 10 ld [ %l1 + 0x10 ], %l0 4000a670: 80 a4 80 10 cmp %l2, %l0 4000a674: 1a 80 00 13 bcc 4000a6c0 <_Watchdog_Insert+0xc4> 4000a678: 01 00 00 00 nop after->delta_interval -= delta_interval; 4000a67c: 10 80 00 1f b 4000a6f8 <_Watchdog_Insert+0xfc> 4000a680: a0 24 00 12 sub %l0, %l2, %l0 if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 4000a684: c2 05 23 e8 ld [ %l4 + 0x3e8 ], %g1 4000a688: 80 a4 c0 01 cmp %l3, %g1 4000a68c: 0a 80 00 30 bcs 4000a74c <_Watchdog_Insert+0x150> 4000a690: 01 00 00 00 nop */ for ( after = (Watchdog_Control *) ((volatile Chain_Control *)header)->first ; ; after = _Watchdog_Next( after ) ) { if ( delta_interval == 0 || !_Watchdog_Next( after ) ) 4000a694: a4 a4 80 10 subcc %l2, %l0, %l2 4000a698: 02 80 00 19 be 4000a6fc <_Watchdog_Insert+0x100> 4000a69c: e2 04 40 00 ld [ %l1 ], %l1 4000a6a0: c2 04 40 00 ld [ %l1 ], %g1 4000a6a4: 80 a0 60 00 cmp %g1, 0 4000a6a8: 02 80 00 16 be 4000a700 <_Watchdog_Insert+0x104> 4000a6ac: 03 10 00 67 sethi %hi(0x40019c00), %g1 break; if ( delta_interval < after->delta_interval ) { 4000a6b0: e0 04 60 10 ld [ %l1 + 0x10 ], %l0 4000a6b4: 80 a4 00 12 cmp %l0, %l2 4000a6b8: 38 80 00 10 bgu,a 4000a6f8 <_Watchdog_Insert+0xfc> 4000a6bc: a0 24 00 12 sub %l0, %l2, %l0 * used around this flash point allowed interrupts to execute * which violated the design assumptions. The critical section * mechanism used here WAS redesigned to address this. */ _ISR_Flash( level ); 4000a6c0: 7f ff dd ca call 40001de8 4000a6c4: 90 10 00 18 mov %i0, %o0 4000a6c8: 7f ff dd c4 call 40001dd8 4000a6cc: 01 00 00 00 nop if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { 4000a6d0: c2 06 60 08 ld [ %i1 + 8 ], %g1 4000a6d4: 80 a0 60 01 cmp %g1, 1 4000a6d8: 02 bf ff eb be 4000a684 <_Watchdog_Insert+0x88> 4000a6dc: 01 00 00 00 nop _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); the_watchdog->start_time = _Watchdog_Ticks_since_boot; exit_insert: _Watchdog_Sync_level = insert_isr_nest_level; 4000a6e0: e6 25 23 e8 st %l3, [ %l4 + 0x3e8 ] <== NOT EXECUTED _Watchdog_Sync_count--; 4000a6e4: c2 05 60 90 ld [ %l5 + 0x90 ], %g1 <== NOT EXECUTED 4000a6e8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000a6ec: c2 25 60 90 st %g1, [ %l5 + 0x90 ] <== NOT EXECUTED _ISR_Enable( level ); 4000a6f0: 7f ff dd be call 40001de8 <== NOT EXECUTED 4000a6f4: 81 e8 00 00 restore <== NOT EXECUTED if ( delta_interval == 0 || !_Watchdog_Next( after ) ) break; if ( delta_interval < after->delta_interval ) { after->delta_interval -= delta_interval; 4000a6f8: e0 24 60 10 st %l0, [ %l1 + 0x10 ] the_watchdog->delta_interval = delta_interval; _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); the_watchdog->start_time = _Watchdog_Ticks_since_boot; 4000a6fc: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a700: c6 00 60 94 ld [ %g1 + 0x94 ], %g3 ! 40019c94 <_Watchdog_Ticks_since_boot> _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); 4000a704: c4 04 60 04 ld [ %l1 + 4 ], %g2 the_watchdog->start_time = _Watchdog_Ticks_since_boot; 4000a708: c6 26 60 14 st %g3, [ %i1 + 0x14 ] } } _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; 4000a70c: e4 26 60 10 st %l2, [ %i1 + 0x10 ] RTEMS_INLINE_ROUTINE void _Watchdog_Activate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_ACTIVE; 4000a710: 82 10 20 02 mov 2, %g1 ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 4000a714: c8 00 80 00 ld [ %g2 ], %g4 _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); the_watchdog->start_time = _Watchdog_Ticks_since_boot; exit_insert: _Watchdog_Sync_level = insert_isr_nest_level; 4000a718: e6 25 23 e8 st %l3, [ %l4 + 0x3e8 ] 4000a71c: c2 26 60 08 st %g1, [ %i1 + 8 ] _Watchdog_Sync_count--; 4000a720: c2 05 60 90 ld [ %l5 + 0x90 ], %g1 after_node->next = the_node; 4000a724: f2 20 80 00 st %i1, [ %g2 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 4000a728: c4 26 60 04 st %g2, [ %i1 + 4 ] 4000a72c: 82 00 7f ff add %g1, -1, %g1 before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; before_node->previous = the_node; 4000a730: f2 21 20 04 st %i1, [ %g4 + 4 ] Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; 4000a734: c8 26 40 00 st %g4, [ %i1 ] 4000a738: c2 25 60 90 st %g1, [ %l5 + 0x90 ] _ISR_Enable( level ); 4000a73c: 7f ff dd ab call 40001de8 4000a740: 81 e8 00 00 restore * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); 4000a744: 7f ff dd a9 call 40001de8 <== NOT EXECUTED 4000a748: 81 e8 00 00 restore <== NOT EXECUTED if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { _Watchdog_Sync_level = insert_isr_nest_level; 4000a74c: e6 25 e3 e8 st %l3, [ %l7 + 0x3e8 ] the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 4000a750: 10 bf ff bf b 4000a64c <_Watchdog_Insert+0x50> 4000a754: e4 06 60 0c ld [ %i1 + 0xc ], %l2 4000a7a4 <_Watchdog_Remove>: */ Watchdog_States _Watchdog_Remove( Watchdog_Control *the_watchdog ) { 4000a7a4: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Watchdog_States previous_state; Watchdog_Control *next_watchdog; _ISR_Disable( level ); 4000a7a8: 7f ff dd 8c call 40001dd8 4000a7ac: a0 10 00 18 mov %i0, %l0 previous_state = the_watchdog->state; 4000a7b0: f0 06 20 08 ld [ %i0 + 8 ], %i0 switch ( previous_state ) { 4000a7b4: 80 a6 20 01 cmp %i0, 1 4000a7b8: 02 80 00 2a be 4000a860 <_Watchdog_Remove+0xbc> 4000a7bc: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a7c0: 1a 80 00 09 bcc 4000a7e4 <_Watchdog_Remove+0x40> 4000a7c4: 80 a6 20 03 cmp %i0, 3 _Watchdog_Sync_level = _ISR_Nest_level; _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000a7c8: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a7cc: c4 00 60 94 ld [ %g1 + 0x94 ], %g2 ! 40019c94 <_Watchdog_Ticks_since_boot> 4000a7d0: c4 24 20 18 st %g2, [ %l0 + 0x18 ] _ISR_Enable( level ); 4000a7d4: 7f ff dd 85 call 40001de8 4000a7d8: 01 00 00 00 nop return( previous_state ); } 4000a7dc: 81 c7 e0 08 ret 4000a7e0: 81 e8 00 00 restore Watchdog_States previous_state; Watchdog_Control *next_watchdog; _ISR_Disable( level ); previous_state = the_watchdog->state; switch ( previous_state ) { 4000a7e4: 18 bf ff fa bgu 4000a7cc <_Watchdog_Remove+0x28> 4000a7e8: 03 10 00 67 sethi %hi(0x40019c00), %g1 RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_Next( Watchdog_Control *the_watchdog ) { return ( (Watchdog_Control *) the_watchdog->Node.next ); 4000a7ec: c8 04 00 00 ld [ %l0 ], %g4 break; case WATCHDOG_ACTIVE: case WATCHDOG_REMOVE_IT: the_watchdog->state = WATCHDOG_INACTIVE; 4000a7f0: c0 24 20 08 clr [ %l0 + 8 ] next_watchdog = _Watchdog_Next( the_watchdog ); if ( _Watchdog_Next(next_watchdog) ) 4000a7f4: c2 01 00 00 ld [ %g4 ], %g1 4000a7f8: 80 a0 60 00 cmp %g1, 0 4000a7fc: 02 80 00 07 be 4000a818 <_Watchdog_Remove+0x74> 4000a800: 03 10 00 67 sethi %hi(0x40019c00), %g1 next_watchdog->delta_interval += the_watchdog->delta_interval; 4000a804: c2 01 20 10 ld [ %g4 + 0x10 ], %g1 4000a808: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 4000a80c: 82 00 40 02 add %g1, %g2, %g1 4000a810: c2 21 20 10 st %g1, [ %g4 + 0x10 ] if ( _Watchdog_Sync_count ) 4000a814: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a818: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 40019c90 <_Watchdog_Sync_count> 4000a81c: 80 a0 a0 00 cmp %g2, 0 4000a820: 22 80 00 07 be,a 4000a83c <_Watchdog_Remove+0x98> 4000a824: c2 04 20 04 ld [ %l0 + 4 ], %g1 _Watchdog_Sync_level = _ISR_Nest_level; 4000a828: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000a82c: c6 00 63 d4 ld [ %g1 + 0x3d4 ], %g3 ! 40019bd4 <_ISR_Nest_level> <== NOT EXECUTED 4000a830: 05 10 00 66 sethi %hi(0x40019800), %g2 <== NOT EXECUTED 4000a834: c6 20 a3 e8 st %g3, [ %g2 + 0x3e8 ] ! 40019be8 <_Watchdog_Sync_level> <== NOT EXECUTED { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 4000a838: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED next->previous = previous; previous->next = next; 4000a83c: c8 20 40 00 st %g4, [ %g1 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000a840: c2 21 20 04 st %g1, [ %g4 + 4 ] _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000a844: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a848: c4 00 60 94 ld [ %g1 + 0x94 ], %g2 ! 40019c94 <_Watchdog_Ticks_since_boot> 4000a84c: c4 24 20 18 st %g2, [ %l0 + 0x18 ] _ISR_Enable( level ); 4000a850: 7f ff dd 66 call 40001de8 4000a854: 01 00 00 00 nop return( previous_state ); } 4000a858: 81 c7 e0 08 ret 4000a85c: 81 e8 00 00 restore _Watchdog_Sync_level = _ISR_Nest_level; _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000a860: c4 00 60 94 ld [ %g1 + 0x94 ], %g2 <== NOT EXECUTED /* * It is not actually on the chain so just change the state and * the Insert operation we interrupted will be aborted. */ the_watchdog->state = WATCHDOG_INACTIVE; 4000a864: c0 24 20 08 clr [ %l0 + 8 ] <== NOT EXECUTED _Watchdog_Sync_level = _ISR_Nest_level; _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000a868: c4 24 20 18 st %g2, [ %l0 + 0x18 ] <== NOT EXECUTED _ISR_Enable( level ); 4000a86c: 7f ff dd 5f call 40001de8 <== NOT EXECUTED 4000a870: 01 00 00 00 nop <== NOT EXECUTED return( previous_state ); } 4000a874: 81 c7 e0 08 ret <== NOT EXECUTED 4000a878: 81 e8 00 00 restore <== NOT EXECUTED 4000a928 <_Workspace_Allocate_or_fatal_error>: */ void *_Workspace_Allocate_or_fatal_error( size_t size ) { 4000a928: 9d e3 bf 98 save %sp, -104, %sp RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4000a92c: 11 10 00 66 sethi %hi(0x40019800), %o0 4000a930: 92 10 00 18 mov %i0, %o1 4000a934: 7f ff f2 33 call 40007200 <_Heap_Allocate> 4000a938: 90 12 23 5c or %o0, 0x35c, %o0 void *memory; memory = _Workspace_Allocate( size ); if ( memory == NULL ) 4000a93c: b0 92 20 00 orcc %o0, 0, %i0 4000a940: 12 80 00 04 bne 4000a950 <_Workspace_Allocate_or_fatal_error+0x28> 4000a944: 92 10 20 01 mov 1, %o1 _Internal_error_Occurred( 4000a948: 7f ff f3 60 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000a94c: 94 10 20 04 mov 4, %o2 <== NOT EXECUTED TRUE, INTERNAL_ERROR_WORKSPACE_ALLOCATION ); return memory; } 4000a950: 81 c7 e0 08 ret 4000a954: 81 e8 00 00 restore 4000a958 <_Workspace_Handler_initialization>: void _Workspace_Handler_initialization( void *starting_address, size_t size ) { 4000a958: 9d e3 bf 98 save %sp, -104, %sp uint32_t *zero_out_array; uint32_t index; uint32_t memory_available; if ( !starting_address || !_Addresses_Is_aligned( starting_address ) ) 4000a95c: 80 a6 20 00 cmp %i0, 0 4000a960: 02 80 00 1d be 4000a9d4 <_Workspace_Handler_initialization+0x7c> 4000a964: 80 8e 20 07 btst 7, %i0 4000a968: 12 80 00 1c bne 4000a9d8 <_Workspace_Handler_initialization+0x80> 4000a96c: 90 10 20 00 clr %o0 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS ); if ( _CPU_Table.do_zero_of_workspace ) { 4000a970: 03 10 00 66 sethi %hi(0x40019800), %g1 4000a974: c4 00 63 34 ld [ %g1 + 0x334 ], %g2 ! 40019b34 <_CPU_Table+0x10> 4000a978: 80 a0 a0 00 cmp %g2, 0 4000a97c: 02 80 00 0c be 4000a9ac <_Workspace_Handler_initialization+0x54> 4000a980: 92 10 00 18 mov %i0, %o1 for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; 4000a984: 87 36 60 02 srl %i1, 2, %g3 <== NOT EXECUTED 4000a988: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4000a98c: 02 80 00 08 be 4000a9ac <_Workspace_Handler_initialization+0x54> <== NOT EXECUTED 4000a990: 84 10 20 00 clr %g2 <== NOT EXECUTED index++ ) zero_out_array[ index ] = 0; 4000a994: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED ); if ( _CPU_Table.do_zero_of_workspace ) { for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; index++ ) 4000a998: 84 00 a0 01 inc %g2 <== NOT EXECUTED INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS ); if ( _CPU_Table.do_zero_of_workspace ) { for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; 4000a99c: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 4000a9a0: 12 bf ff fd bne 4000a994 <_Workspace_Handler_initialization+0x3c> <== NOT EXECUTED 4000a9a4: c0 20 40 18 clr [ %g1 + %i0 ] <== NOT EXECUTED index++ ) zero_out_array[ index ] = 0; } memory_available = _Heap_Initialize( 4000a9a8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000a9ac: 94 10 00 19 mov %i1, %o2 4000a9b0: 11 10 00 66 sethi %hi(0x40019800), %o0 4000a9b4: 96 10 20 08 mov 8, %o3 4000a9b8: 7f ff f2 f7 call 40007594 <_Heap_Initialize> 4000a9bc: 90 12 23 5c or %o0, 0x35c, %o0 starting_address, size, CPU_HEAP_ALIGNMENT ); if ( memory_available == 0 ) 4000a9c0: 80 a2 20 00 cmp %o0, 0 4000a9c4: 02 80 00 0a be 4000a9ec <_Workspace_Handler_initialization+0x94> 4000a9c8: b0 10 20 00 clr %i0 4000a9cc: 81 c7 e0 08 ret 4000a9d0: 81 e8 00 00 restore uint32_t *zero_out_array; uint32_t index; uint32_t memory_available; if ( !starting_address || !_Addresses_Is_aligned( starting_address ) ) _Internal_error_Occurred( 4000a9d4: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000a9d8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 4000a9dc: 7f ff f3 3b call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000a9e0: 94 10 20 02 mov 2, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS ); if ( _CPU_Table.do_zero_of_workspace ) { 4000a9e4: 10 bf ff e4 b 4000a974 <_Workspace_Handler_initialization+0x1c> <== NOT EXECUTED 4000a9e8: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED size, CPU_HEAP_ALIGNMENT ); if ( memory_available == 0 ) _Internal_error_Occurred( 4000a9ec: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED 4000a9f0: 7f ff f3 36 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 4000a9f4: 95 e8 20 03 restore %g0, 3, %o2 <== NOT EXECUTED 4000a9f8: 01 00 00 00 nop 40001f34 <__assert>: #include #include void __assert(const char *file, int line, const char *failedexpr) { 40001f34: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED printk("assertion \"%s\" failed: file \"%s\", line %d\n", 40001f38: 11 10 00 60 sethi %hi(0x40018000), %o0 <== NOT EXECUTED 40001f3c: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 40001f40: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40001f44: 96 10 00 19 mov %i1, %o3 <== NOT EXECUTED 40001f48: 90 12 20 30 or %o0, 0x30, %o0 <== NOT EXECUTED 40001f4c: 40 00 04 b6 call 40003224 <== NOT EXECUTED 40001f50: b0 10 20 00 clr %i0 <== NOT EXECUTED failedexpr, file, line); rtems_fatal_error_occurred(0); 40001f54: 40 00 12 a8 call 400069f4 <== NOT EXECUTED 40001f58: 81 e8 00 00 restore <== NOT EXECUTED 40001f5c: 01 00 00 00 nop 4002503c <__kill>: #endif int __kill( pid_t pid, int sig ) { return 0; } 4002503c: 81 c3 e0 08 retl <== NOT EXECUTED 40025040: 90 10 20 00 clr %o0 <== NOT EXECUTED 40017700 <_exit>: #include #if !defined(RTEMS_UNIX) void _exit(int status) { 40017700: 9d e3 bf 98 save %sp, -104, %sp * We need to do the exit processing on the global reentrancy structure. * This has already been done on the per task reentrancy structure * associated with this task. */ libc_wrapup(); 40017704: 7f ff ff e4 call 40017694 40017708: 01 00 00 00 nop rtems_shutdown_executive(status); 4001770c: 40 00 00 4c call 4001783c 40017710: 90 10 00 18 mov %i0, %o0 40017714: 30 80 00 00 b,a 40017714 <_exit+0x14> <== NOT EXECUTED 40023598 <_fcntl_r>: int fd, int cmd, int arg ) { return fcntl( fd, cmd, arg ); 40023598: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4002359c: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 400235a0: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 400235a4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400235a8: 7f ff ff 6f call 40023364 <== NOT EXECUTED 400235ac: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400235b0: 01 00 00 00 nop 40024eb8 <_getpid_r>: pid_t _getpid_r( struct _reent *ptr ) { return getpid(); 40024eb8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40024ebc: 7f ff ff fd call 40024eb0 <== NOT EXECUTED 40024ec0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40024ec4: 01 00 00 00 nop 4000c078 <_gettimeofday>: int _gettimeofday( struct timeval *tp, struct timezone *tzp ) { return gettimeofday( tp, tzp ); 4000c078: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4000c07c: 7f ff ff e6 call 4000c014 <== NOT EXECUTED 4000c080: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000c084: 01 00 00 00 nop 40025034 <_kill_r>: #include int _kill_r( struct _reent *ptr, pid_t pid, int sig ) { return 0; } 40025034: 81 c3 e0 08 retl <== NOT EXECUTED 40025038: 90 10 20 00 clr %o0 <== NOT EXECUTED 40017678 <_lseek_r>: int fd, off_t offset, int whence ) { return lseek( fd, offset, whence ); 40017678: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4001767c: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40017680: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40017684: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40017688: 7f ff ff ba call 40017570 <== NOT EXECUTED 4001768c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40017690: 01 00 00 00 nop 40002e64 <_open_r>: const char *buf, int flags, int mode ) { return open( buf, flags, mode ); 40002e64: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40002e68: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40002e6c: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40002e70: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40002e74: 7f ff ff 36 call 40002b4c <== NOT EXECUTED 40002e78: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40002e7c: 01 00 00 00 nop <== NOT EXECUTED 40017804 <_read_r>: int fd, void *buf, size_t nbytes ) { return read( fd, buf, nbytes ); 40017804: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40017808: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 4001780c: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40017810: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40017814: 7f ff ff c1 call 40017718 <== NOT EXECUTED 40017818: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001781c: 01 00 00 00 nop 40002584 <_realloc_r>: struct _reent *ignored, void *ptr, size_t size ) { return realloc( ptr, size ); 40002584: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40002588: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 4000258c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40002590: 7f ff ff b6 call 40002468 <== NOT EXECUTED 40002594: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40002598: 01 00 00 00 nop 40006988 <_stat_r>: struct _reent *ptr, const char *path, struct stat *buf ) { return _STAT_NAME( path, buf ); 40006988: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4000698c: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40006990: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40006994: 7f ff ff b3 call 40006860 <== NOT EXECUTED 40006998: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000699c: 01 00 00 00 nop 40019de0 <_unlink_r>: int _unlink_r( struct _reent *ptr, const char *path ) { return unlink( path ); 40019de0: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40019de4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40019de8: 7f ff ff a5 call 40019c7c <== NOT EXECUTED 40019dec: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40019df0: 01 00 00 00 nop 40017e68 : #include int chdir( const char *pathname ) { 40017e68: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the node where we wish to go. */ result = rtems_filesystem_evaluate_path( 40017e6c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40017e70: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017e74: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40017e78: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40017e7c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40017e80: 7f ff b4 0d call 40004eb4 <== NOT EXECUTED 40017e84: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED pathname, RTEMS_LIBIO_PERMS_SEARCH, &loc, TRUE ); if ( result != 0 ) 40017e88: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017e8c: 12 80 00 2f bne 40017f48 <== NOT EXECUTED 40017e90: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Verify you can change directory into this node. */ if ( !loc.ops->node_type_h ) { 40017e94: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 40017e98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017e9c: 22 80 00 2d be,a 40017f50 <== NOT EXECUTED 40017ea0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 40017ea4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017ea8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017eac: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40017eb0: 12 80 00 19 bne 40017f14 <== NOT EXECUTED 40017eb4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTDIR ); } rtems_filesystem_freenode( &rtems_filesystem_current ); 40017eb8: 21 10 00 eb sethi %hi(0x4003ac00), %l0 <== NOT EXECUTED 40017ebc: d0 04 23 f0 ld [ %l0 + 0x3f0 ], %o0 ! 4003aff0 <== NOT EXECUTED 40017ec0: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 40017ec4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017ec8: 22 80 00 09 be,a 40017eec <== NOT EXECUTED 40017ecc: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40017ed0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40017ed4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017ed8: 22 80 00 05 be,a 40017eec <== NOT EXECUTED 40017edc: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40017ee0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017ee4: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED rtems_filesystem_current = loc; 40017ee8: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40017eec: c6 04 23 f0 ld [ %l0 + 0x3f0 ], %g3 <== NOT EXECUTED 40017ef0: c2 20 e0 04 st %g1, [ %g3 + 4 ] <== NOT EXECUTED 40017ef4: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 40017ef8: c4 20 e0 08 st %g2, [ %g3 + 8 ] <== NOT EXECUTED 40017efc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40017f00: c2 20 e0 0c st %g1, [ %g3 + 0xc ] <== NOT EXECUTED 40017f04: c4 07 bf f4 ld [ %fp + -12 ], %g2 <== NOT EXECUTED 40017f08: c4 20 e0 10 st %g2, [ %g3 + 0x10 ] <== NOT EXECUTED return 0; } 40017f0c: 81 c7 e0 08 ret <== NOT EXECUTED 40017f10: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { rtems_filesystem_freenode( &loc ); 40017f14: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017f18: 02 80 00 08 be 40017f38 <== NOT EXECUTED 40017f1c: 01 00 00 00 nop <== NOT EXECUTED 40017f20: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40017f24: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017f28: 02 80 00 04 be 40017f38 <== NOT EXECUTED 40017f2c: 01 00 00 00 nop <== NOT EXECUTED 40017f30: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017f34: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 40017f38: 40 00 36 3d call 4002582c <__errno> <== NOT EXECUTED 40017f3c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40017f40: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40017f44: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017f48: 81 c7 e0 08 ret <== NOT EXECUTED 40017f4c: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify you can change directory into this node. */ if ( !loc.ops->node_type_h ) { rtems_filesystem_freenode( &loc ); 40017f50: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017f54: 02 80 00 04 be 40017f64 <== NOT EXECUTED 40017f58: 01 00 00 00 nop <== NOT EXECUTED 40017f5c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017f60: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017f64: 40 00 36 32 call 4002582c <__errno> <== NOT EXECUTED 40017f68: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40017f6c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40017f70: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017f74: 81 c7 e0 08 ret <== NOT EXECUTED 40017f78: 81 e8 00 00 restore <== NOT EXECUTED 40017f7c : int chmod( const char *path, mode_t mode ) { 40017f7c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED int status; rtems_filesystem_location_info_t loc; int result; status = rtems_filesystem_evaluate_path( path, 0, &loc, TRUE ); 40017f80: 92 10 20 00 clr %o1 <== NOT EXECUTED 40017f84: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017f88: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40017f8c: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40017f90: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40017f94: 7f ff b3 c8 call 40004eb4 <== NOT EXECUTED 40017f98: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 40017f9c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017fa0: 12 80 00 16 bne 40017ff8 <== NOT EXECUTED 40017fa4: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED return -1; if ( !loc.handlers ){ 40017fa8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017fac: 22 80 00 25 be,a 40018040 <== NOT EXECUTED 40017fb0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EBADF ); } if ( !loc.handlers->fchmod_h ){ 40017fb4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40017fb8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017fbc: 02 80 00 11 be 40018000 <== NOT EXECUTED 40017fc0: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.handlers->fchmod_h)( &loc, mode ); 40017fc4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017fc8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017fcc: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40017fd0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40017fd4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017fd8: 02 80 00 08 be 40017ff8 <== NOT EXECUTED 40017fdc: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40017fe0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40017fe4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017fe8: 02 80 00 23 be 40018074 <== NOT EXECUTED 40017fec: 01 00 00 00 nop <== NOT EXECUTED 40017ff0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017ff4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40017ff8: 81 c7 e0 08 ret <== NOT EXECUTED 40017ffc: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EBADF ); } if ( !loc.handlers->fchmod_h ){ rtems_filesystem_freenode( &loc ); 40018000: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40018004: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018008: 02 80 00 08 be 40018028 <== NOT EXECUTED 4001800c: 01 00 00 00 nop <== NOT EXECUTED 40018010: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018014: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018018: 02 80 00 04 be 40018028 <== NOT EXECUTED 4001801c: 01 00 00 00 nop <== NOT EXECUTED 40018020: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018024: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40018028: 40 00 36 01 call 4002582c <__errno> <== NOT EXECUTED 4001802c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40018030: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40018034: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018038: 81 c7 e0 08 ret <== NOT EXECUTED 4001803c: 81 e8 00 00 restore <== NOT EXECUTED status = rtems_filesystem_evaluate_path( path, 0, &loc, TRUE ); if ( status != 0 ) return -1; if ( !loc.handlers ){ rtems_filesystem_freenode( &loc ); 40018040: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018044: 02 80 00 08 be 40018064 <== NOT EXECUTED 40018048: 01 00 00 00 nop <== NOT EXECUTED 4001804c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018050: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018054: 02 80 00 04 be 40018064 <== NOT EXECUTED 40018058: 01 00 00 00 nop <== NOT EXECUTED 4001805c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018060: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 40018064: 40 00 35 f2 call 4002582c <__errno> <== NOT EXECUTED 40018068: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001806c: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40018070: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018074: 81 c7 e0 08 ret <== NOT EXECUTED 40018078: 81 e8 00 00 restore <== NOT EXECUTED 4001807c : int chown( const char *path, uid_t owner, gid_t group ) { 4001807c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED rtems_filesystem_location_info_t loc; int result; if ( rtems_filesystem_evaluate_path( path, 0x00, &loc, TRUE ) ) 40018080: 92 10 20 00 clr %o1 <== NOT EXECUTED 40018084: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018088: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 4001808c: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40018090: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40018094: 7f ff b3 88 call 40004eb4 <== NOT EXECUTED 40018098: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001809c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400180a0: 12 80 00 15 bne 400180f4 <== NOT EXECUTED 400180a4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return -1; if ( !loc.ops->chown_h ) { 400180a8: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 <== NOT EXECUTED 400180ac: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400180b0: 02 80 00 13 be 400180fc <== NOT EXECUTED 400180b4: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->chown_h)( &loc, owner, group ); 400180b8: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 400180bc: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 400180c0: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED 400180c4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400180c8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 400180cc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400180d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400180d4: 02 80 00 08 be 400180f4 <== NOT EXECUTED 400180d8: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 400180dc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400180e0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400180e4: 02 80 00 10 be 40018124 <== NOT EXECUTED 400180e8: 01 00 00 00 nop <== NOT EXECUTED 400180ec: 9f c0 40 00 call %g1 <== NOT EXECUTED 400180f0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 400180f4: 81 c7 e0 08 ret <== NOT EXECUTED 400180f8: 81 e8 00 00 restore <== NOT EXECUTED if ( rtems_filesystem_evaluate_path( path, 0x00, &loc, TRUE ) ) return -1; if ( !loc.ops->chown_h ) { rtems_filesystem_freenode( &loc ); 400180fc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018100: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018104: 02 80 00 04 be 40018114 <== NOT EXECUTED 40018108: 01 00 00 00 nop <== NOT EXECUTED 4001810c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018110: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40018114: 40 00 35 c6 call 4002582c <__errno> <== NOT EXECUTED 40018118: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001811c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40018120: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018124: 81 c7 e0 08 ret <== NOT EXECUTED 40018128: 81 e8 00 00 restore <== NOT EXECUTED 4001812c : #include int chroot( const char *pathname ) { 4001812c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED int result; rtems_filesystem_location_info_t loc; /* an automatic call to new private env the first time */ if (rtems_current_user_env == &rtems_global_user_env) { 40018130: 23 10 00 eb sethi %hi(0x4003ac00), %l1 <== NOT EXECUTED 40018134: e0 04 63 f0 ld [ %l1 + 0x3f0 ], %l0 ! 4003aff0 <== NOT EXECUTED 40018138: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED 4001813c: 82 10 63 a4 or %g1, 0x3a4, %g1 ! 4003d3a4 <== NOT EXECUTED 40018140: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40018144: 02 80 00 24 be 400181d4 <== NOT EXECUTED 40018148: 01 00 00 00 nop <== NOT EXECUTED rtems_libio_set_private_env(); /* try to set a new private env*/ if (rtems_current_user_env == &rtems_global_user_env) /* not ok */ rtems_set_errno_and_return_minus_one( ENOTSUP ); }; result = chdir(pathname); 4001814c: 7f ff ff 47 call 40017e68 <== NOT EXECUTED 40018150: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if (result) { 40018154: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018158: 12 80 00 2b bne 40018204 <== NOT EXECUTED 4001815c: 11 10 00 de sethi %hi(0x40037800), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( errno ); }; /* clone the new root location */ if (rtems_filesystem_evaluate_path(".", 0, &loc, 0)) { 40018160: 92 10 20 00 clr %o1 <== NOT EXECUTED 40018164: 90 12 21 f0 or %o0, 0x1f0, %o0 <== NOT EXECUTED 40018168: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED 4001816c: 7f ff b3 52 call 40004eb4 <== NOT EXECUTED 40018170: 96 10 20 00 clr %o3 <== NOT EXECUTED 40018174: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018178: 12 80 00 23 bne 40018204 <== NOT EXECUTED 4001817c: d0 04 63 f0 ld [ %l1 + 0x3f0 ], %o0 <== NOT EXECUTED /* our cwd has changed, though - but there is no easy way of return :-( */ rtems_set_errno_and_return_minus_one( errno ); } rtems_filesystem_freenode(&rtems_filesystem_root); 40018180: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED 40018184: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018188: 22 80 00 09 be,a 400181ac <== NOT EXECUTED 4001818c: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40018190: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018194: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018198: 22 80 00 05 be,a 400181ac <== NOT EXECUTED 4001819c: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 400181a0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400181a4: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 400181a8: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 400181ac: c6 04 63 f0 ld [ %l1 + 0x3f0 ], %g3 <== NOT EXECUTED 400181b0: c2 20 e0 14 st %g1, [ %g3 + 0x14 ] <== NOT EXECUTED 400181b4: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 400181b8: c4 20 e0 18 st %g2, [ %g3 + 0x18 ] <== NOT EXECUTED 400181bc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400181c0: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED 400181c4: c4 07 bf f4 ld [ %fp + -12 ], %g2 <== NOT EXECUTED 400181c8: c4 20 e0 20 st %g2, [ %g3 + 0x20 ] <== NOT EXECUTED return 0; } 400181cc: 81 c7 e0 08 ret <== NOT EXECUTED 400181d0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED int result; rtems_filesystem_location_info_t loc; /* an automatic call to new private env the first time */ if (rtems_current_user_env == &rtems_global_user_env) { rtems_libio_set_private_env(); /* try to set a new private env*/ 400181d4: 40 00 05 59 call 40019738 <== NOT EXECUTED 400181d8: 01 00 00 00 nop <== NOT EXECUTED if (rtems_current_user_env == &rtems_global_user_env) /* not ok */ 400181dc: c2 04 63 f0 ld [ %l1 + 0x3f0 ], %g1 <== NOT EXECUTED 400181e0: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 400181e4: 12 bf ff da bne 4001814c <== NOT EXECUTED 400181e8: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 400181ec: 40 00 35 90 call 4002582c <__errno> <== NOT EXECUTED 400181f0: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 400181f4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400181f8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400181fc: 81 c7 e0 08 ret <== NOT EXECUTED 40018200: 81 e8 00 00 restore <== NOT EXECUTED rtems_set_errno_and_return_minus_one( errno ); }; /* clone the new root location */ if (rtems_filesystem_evaluate_path(".", 0, &loc, 0)) { /* our cwd has changed, though - but there is no easy way of return :-( */ rtems_set_errno_and_return_minus_one( errno ); 40018204: 40 00 35 8a call 4002582c <__errno> <== NOT EXECUTED 40018208: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001820c: 40 00 35 88 call 4002582c <__errno> <== NOT EXECUTED 40018210: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40018214: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40018218: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED 4001821c: 81 c7 e0 08 ret <== NOT EXECUTED 40018220: 81 e8 00 00 restore <== NOT EXECUTED 4000be34 : #include int close( int fd ) { 4000be34: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_t *iop; rtems_status_code rc; rtems_libio_check_fd(fd); 4000be38: 03 10 00 62 sethi %hi(0x40018800), %g1 4000be3c: c4 00 63 0c ld [ %g1 + 0x30c ], %g2 ! 40018b0c 4000be40: 80 a6 00 02 cmp %i0, %g2 4000be44: 1a 80 00 23 bcc 4000bed0 4000be48: 03 10 00 66 sethi %hi(0x40019800), %g1 iop = rtems_libio_iop(fd); 4000be4c: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 40019944 4000be50: 85 2e 20 02 sll %i0, 2, %g2 4000be54: 83 2e 20 04 sll %i0, 4, %g1 4000be58: 82 20 40 02 sub %g1, %g2, %g1 4000be5c: 82 00 40 18 add %g1, %i0, %g1 4000be60: 83 28 60 02 sll %g1, 2, %g1 4000be64: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 4000be68: c4 06 20 0c ld [ %i0 + 0xc ], %g2 4000be6c: 80 88 a1 00 btst 0x100, %g2 4000be70: 02 80 00 18 be 4000bed0 4000be74: 01 00 00 00 nop rc = RTEMS_SUCCESSFUL; if ( iop->handlers->close_h ) 4000be78: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4000be7c: c2 00 60 04 ld [ %g1 + 4 ], %g1 4000be80: 80 a0 60 00 cmp %g1, 0 4000be84: 02 80 00 05 be 4000be98 4000be88: a0 10 20 00 clr %l0 rc = (*iop->handlers->close_h)( iop ); 4000be8c: 9f c0 40 00 call %g1 4000be90: 90 10 00 18 mov %i0, %o0 4000be94: a0 10 00 08 mov %o0, %l0 rtems_filesystem_freenode( &iop->pathinfo ); 4000be98: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 4000be9c: 80 a0 60 00 cmp %g1, 0 4000bea0: 02 80 00 08 be 4000bec0 4000bea4: 01 00 00 00 nop 4000bea8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 4000beac: 80 a0 60 00 cmp %g1, 0 4000beb0: 02 80 00 04 be 4000bec0 4000beb4: 01 00 00 00 nop 4000beb8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000bebc: 90 06 20 10 add %i0, 0x10, %o0 <== NOT EXECUTED rtems_libio_free( iop ); 4000bec0: 40 00 00 d1 call 4000c204 4000bec4: 90 10 00 18 mov %i0, %o0 return rc; } 4000bec8: 81 c7 e0 08 ret 4000becc: 91 e8 00 10 restore %g0, %l0, %o0 rtems_libio_t *iop; rtems_status_code rc; rtems_libio_check_fd(fd); iop = rtems_libio_iop(fd); rtems_libio_check_is_open(iop); 4000bed0: 40 00 08 9a call 4000e138 <__errno> <== NOT EXECUTED 4000bed4: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000bed8: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 4000bedc: 10 bf ff fb b 4000bec8 <== NOT EXECUTED 4000bee0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018224 : * close a directory. */ int closedir(dirp) register DIR *dirp; { 40018224: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int fd; if ( !dirp ) 40018228: a0 96 20 00 orcc %i0, 0, %l0 <== NOT EXECUTED 4001822c: 02 80 00 0b be 40018258 <== NOT EXECUTED 40018230: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); fd = dirp->dd_fd; dirp->dd_fd = -1; dirp->dd_loc = 0; (void)free((void *)dirp->dd_buf); 40018234: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED int fd; if ( !dirp ) rtems_set_errno_and_return_minus_one( EBADF ); fd = dirp->dd_fd; 40018238: f0 04 00 00 ld [ %l0 ], %i0 <== NOT EXECUTED dirp->dd_fd = -1; dirp->dd_loc = 0; 4001823c: c0 24 20 04 clr [ %l0 + 4 ] <== NOT EXECUTED (void)free((void *)dirp->dd_buf); 40018240: 7f ff b4 9b call 400054ac <== NOT EXECUTED 40018244: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED (void)free((void *)dirp); 40018248: 7f ff b4 99 call 400054ac <== NOT EXECUTED 4001824c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return(close(fd)); 40018250: 7f ff b2 b8 call 40004d30 <== NOT EXECUTED 40018254: 81 e8 00 00 restore <== NOT EXECUTED register DIR *dirp; { int fd; if ( !dirp ) rtems_set_errno_and_return_minus_one( EBADF ); 40018258: 40 00 35 75 call 4002582c <__errno> <== NOT EXECUTED 4001825c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40018260: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40018264: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED dirp->dd_fd = -1; dirp->dd_loc = 0; (void)free((void *)dirp->dd_buf); (void)free((void *)dirp); return(close(fd)); } 40018268: 81 c7 e0 08 ret <== NOT EXECUTED 4001826c: 81 e8 00 00 restore <== NOT EXECUTED 4000d718 : */ int device_close( rtems_libio_t *iop ) { 4000d718: 9d e3 bf 88 save %sp, -120, %sp rtems_libio_open_close_args_t args; rtems_status_code status; IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4000d71c: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 args.iop = iop; 4000d720: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = 0; 4000d724: c0 27 bf f0 clr [ %fp + -16 ] args.mode = 0; 4000d728: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_close( 4000d72c: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 4000d730: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 4000d734: 94 07 bf ec add %fp, -20, %o2 4000d738: 40 00 01 55 call 4000dc8c 4000d73c: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) { 4000d740: 80 a2 20 00 cmp %o0, 0 4000d744: 12 80 00 04 bne 4000d754 4000d748: 01 00 00 00 nop return rtems_deviceio_errno(status); } return 0; } 4000d74c: 81 c7 e0 08 ret 4000d750: 81 e8 00 00 restore the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) { return rtems_deviceio_errno(status); 4000d754: 7f ff ff a1 call 4000d5d8 <== NOT EXECUTED 4000d758: 01 00 00 00 nop <== NOT EXECUTED } return 0; } 4000d75c: 81 c7 e0 08 ret <== NOT EXECUTED 4000d760: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000d5d0 : rtems_libio_t *iop, off_t length ) { return 0; } 4000d5d0: 81 c3 e0 08 retl <== NOT EXECUTED 4000d5d4: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000d60c : int device_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { 4000d60c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED args.iop = iop; args.command = command; args.buffer = buffer; the_jnode = iop->file_info; 4000d610: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 <== NOT EXECUTED rtems_libio_ioctl_args_t args; rtems_status_code status; IMFS_jnode_t *the_jnode; args.iop = iop; args.command = command; 4000d614: f2 27 bf ec st %i1, [ %fp + -20 ] <== NOT EXECUTED args.buffer = buffer; 4000d618: f4 27 bf f0 st %i2, [ %fp + -16 ] <== NOT EXECUTED { rtems_libio_ioctl_args_t args; rtems_status_code status; IMFS_jnode_t *the_jnode; args.iop = iop; 4000d61c: f0 27 bf e8 st %i0, [ %fp + -24 ] <== NOT EXECUTED args.command = command; args.buffer = buffer; the_jnode = iop->file_info; status = rtems_io_control( 4000d620: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 <== NOT EXECUTED 4000d624: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 <== NOT EXECUTED 4000d628: 40 00 01 af call 4000dce4 <== NOT EXECUTED 4000d62c: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000d630: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000d634: 12 80 00 05 bne 4000d648 <== NOT EXECUTED 4000d638: 01 00 00 00 nop <== NOT EXECUTED return rtems_deviceio_errno(status); return args.ioctl_return; 4000d63c: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED } 4000d640: 81 c7 e0 08 ret <== NOT EXECUTED 4000d644: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000d648: 7f ff ff e4 call 4000d5d8 <== NOT EXECUTED 4000d64c: 01 00 00 00 nop <== NOT EXECUTED return args.ioctl_return; } 4000d650: 81 c7 e0 08 ret <== NOT EXECUTED 4000d654: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000d5c8 : off_t offset, int whence ) { return offset; } 4000d5c8: 81 c3 e0 08 retl <== NOT EXECUTED 4000d5cc: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4000d764 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4000d764: 9d e3 bf 88 save %sp, -120, %sp IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; args.flags = iop->flags; 4000d768: c2 06 20 0c ld [ %i0 + 0xc ], %g1 { rtems_libio_open_close_args_t args; rtems_status_code status; IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4000d76c: c4 06 20 2c ld [ %i0 + 0x2c ], %g2 args.iop = iop; 4000d770: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = iop->flags; 4000d774: c2 27 bf f0 st %g1, [ %fp + -16 ] args.mode = mode; 4000d778: f6 27 bf f4 st %i3, [ %fp + -12 ] status = rtems_io_open( 4000d77c: d2 00 a0 50 ld [ %g2 + 0x50 ], %o1 4000d780: d0 00 a0 4c ld [ %g2 + 0x4c ], %o0 4000d784: 94 07 bf ec add %fp, -20, %o2 4000d788: 40 00 01 6d call 4000dd3c 4000d78c: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000d790: 80 a2 20 00 cmp %o0, 0 4000d794: 12 80 00 04 bne 4000d7a4 4000d798: 01 00 00 00 nop return rtems_deviceio_errno(status); return 0; } 4000d79c: 81 c7 e0 08 ret 4000d7a0: 81 e8 00 00 restore the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000d7a4: 7f ff ff 8d call 4000d5d8 <== NOT EXECUTED 4000d7a8: 01 00 00 00 nop <== NOT EXECUTED return 0; } 4000d7ac: 81 c7 e0 08 ret <== NOT EXECUTED 4000d7b0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000d6b8 : ssize_t device_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4000d6b8: 9d e3 bf 80 save %sp, -128, %sp <== NOT EXECUTED args.iop = iop; args.offset = iop->offset; args.buffer = buffer; args.count = count; args.flags = iop->flags; 4000d6bc: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; args.offset = iop->offset; 4000d6c0: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED { rtems_libio_rw_args_t args; rtems_status_code status; IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4000d6c4: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 <== NOT EXECUTED args.iop = iop; args.offset = iop->offset; args.buffer = buffer; 4000d6c8: f2 27 bf e8 st %i1, [ %fp + -24 ] <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; args.offset = iop->offset; 4000d6cc: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED args.buffer = buffer; args.count = count; 4000d6d0: f4 27 bf ec st %i2, [ %fp + -20 ] <== NOT EXECUTED args.flags = iop->flags; 4000d6d4: c4 27 bf f0 st %g2, [ %fp + -16 ] <== NOT EXECUTED rtems_status_code status; IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; 4000d6d8: f0 27 bf e0 st %i0, [ %fp + -32 ] <== NOT EXECUTED args.offset = iop->offset; args.buffer = buffer; args.count = count; args.flags = iop->flags; args.bytes_moved = 0; 4000d6dc: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED status = rtems_io_read( 4000d6e0: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 <== NOT EXECUTED 4000d6e4: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 <== NOT EXECUTED 4000d6e8: 40 00 01 ab call 4000dd94 <== NOT EXECUTED 4000d6ec: 94 07 bf e0 add %fp, -32, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000d6f0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000d6f4: 12 80 00 05 bne 4000d708 <== NOT EXECUTED 4000d6f8: 01 00 00 00 nop <== NOT EXECUTED return rtems_deviceio_errno(status); return (ssize_t) args.bytes_moved; 4000d6fc: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED } 4000d700: 81 c7 e0 08 ret <== NOT EXECUTED 4000d704: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000d708: 7f ff ff b4 call 4000d5d8 <== NOT EXECUTED 4000d70c: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 4000d710: 81 c7 e0 08 ret <== NOT EXECUTED 4000d714: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000d658 : ssize_t device_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4000d658: 9d e3 bf 80 save %sp, -128, %sp args.iop = iop; args.offset = iop->offset; args.buffer = (void *) buffer; args.count = count; args.flags = iop->flags; 4000d65c: c4 06 20 0c ld [ %i0 + 0xc ], %g2 IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; args.offset = iop->offset; 4000d660: c2 06 20 08 ld [ %i0 + 8 ], %g1 { rtems_libio_rw_args_t args; rtems_status_code status; IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4000d664: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 args.iop = iop; args.offset = iop->offset; args.buffer = (void *) buffer; 4000d668: f2 27 bf e8 st %i1, [ %fp + -24 ] IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; args.offset = iop->offset; 4000d66c: c2 27 bf e4 st %g1, [ %fp + -28 ] args.buffer = (void *) buffer; args.count = count; 4000d670: f4 27 bf ec st %i2, [ %fp + -20 ] args.flags = iop->flags; 4000d674: c4 27 bf f0 st %g2, [ %fp + -16 ] rtems_status_code status; IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; args.iop = iop; 4000d678: f0 27 bf e0 st %i0, [ %fp + -32 ] args.offset = iop->offset; args.buffer = (void *) buffer; args.count = count; args.flags = iop->flags; args.bytes_moved = 0; 4000d67c: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_write( 4000d680: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 4000d684: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 4000d688: 40 00 01 d9 call 4000ddec 4000d68c: 94 07 bf e0 add %fp, -32, %o2 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000d690: 80 a2 20 00 cmp %o0, 0 4000d694: 12 80 00 05 bne 4000d6a8 4000d698: 01 00 00 00 nop return rtems_deviceio_errno(status); return (ssize_t) args.bytes_moved; 4000d69c: d0 07 bf f4 ld [ %fp + -12 ], %o0 } 4000d6a0: 81 c7 e0 08 ret 4000d6a4: 91 e8 00 08 restore %g0, %o0, %o0 the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000d6a8: 7f ff ff cc call 4000d5d8 <== NOT EXECUTED 4000d6ac: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 4000d6b0: 81 c7 e0 08 ret <== NOT EXECUTED 4000d6b4: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40004170 : /* * Drain output queue */ static void drainOutput (struct rtems_termios_tty *tty) { 40004170: 9d e3 bf 98 save %sp, -104, %sp rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) { 40004174: c2 06 20 b4 ld [ %i0 + 0xb4 ], %g1 40004178: 80 a0 60 00 cmp %g1, 0 4000417c: 12 80 00 04 bne 4000418c 40004180: 01 00 00 00 nop 40004184: 81 c7 e0 08 ret 40004188: 81 e8 00 00 restore rtems_interrupt_disable (level); 4000418c: 7f ff f7 13 call 40001dd8 <== NOT EXECUTED 40004190: 01 00 00 00 nop <== NOT EXECUTED while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) { 40004194: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 40004198: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 4000419c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400041a0: 12 80 00 0a bne 400041c8 <== NOT EXECUTED 400041a4: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 400041a8: 30 80 00 1b b,a 40004214 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); 400041ac: 7f ff f7 0b call 40001dd8 <== NOT EXECUTED 400041b0: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) { rtems_interrupt_disable (level); while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) { 400041b4: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 400041b8: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 400041bc: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400041c0: 02 80 00 15 be 40004214 <== NOT EXECUTED 400041c4: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_wait; 400041c8: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 400041cc: 7f ff f7 07 call 40001de8 <== NOT EXECUTED 400041d0: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 400041d4: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 400041d8: 92 10 20 00 clr %o1 <== NOT EXECUTED 400041dc: 40 00 06 eb call 40005d88 <== NOT EXECUTED 400041e0: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 400041e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400041e8: 02 bf ff f1 be 400041ac <== NOT EXECUTED 400041ec: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400041f0: 40 00 0a 01 call 400069f4 <== NOT EXECUTED 400041f4: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 400041f8: 7f ff f6 f8 call 40001dd8 <== NOT EXECUTED 400041fc: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) { rtems_interrupt_disable (level); while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) { 40004200: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 40004204: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40004208: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4000420c: 12 bf ff ef bne 400041c8 <== NOT EXECUTED 40004210: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); } rtems_interrupt_enable (level); 40004214: 7f ff f6 f5 call 40001de8 <== NOT EXECUTED 40004218: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000421c: 01 00 00 00 nop 40003b80 : /* * Echo a typed character */ static void echo (unsigned char c, struct rtems_termios_tty *tty) { 40003b80: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) { 40003b84: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40003b88: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40003b8c: 02 80 00 18 be 40003bec <== NOT EXECUTED 40003b90: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40003b94: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40019290 <__ctype_ptr> <== NOT EXECUTED 40003b98: 90 0e 20 ff and %i0, 0xff, %o0 <== NOT EXECUTED 40003b9c: c2 0a 00 02 ldub [ %o0 + %g2 ], %g1 <== NOT EXECUTED 40003ba0: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40003ba4: 02 80 00 13 be 40003bf0 <== NOT EXECUTED 40003ba8: 80 a2 20 09 cmp %o0, 9 <== NOT EXECUTED 40003bac: 02 80 00 11 be 40003bf0 <== NOT EXECUTED 40003bb0: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED 40003bb4: 02 80 00 0f be 40003bf0 <== NOT EXECUTED 40003bb8: 82 1e 20 40 xor %i0, 0x40, %g1 <== NOT EXECUTED char echobuf[2]; echobuf[0] = '^'; 40003bbc: 84 10 20 5e mov 0x5e, %g2 <== NOT EXECUTED echobuf[1] = c ^ 0x40; 40003bc0: c2 2f bf f7 stb %g1, [ %fp + -9 ] <== NOT EXECUTED echo (unsigned char c, struct rtems_termios_tty *tty) { if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) { char echobuf[2]; echobuf[0] = '^'; 40003bc4: c4 2f bf f6 stb %g2, [ %fp + -10 ] <== NOT EXECUTED echobuf[1] = c ^ 0x40; rtems_termios_puts (echobuf, 2, tty); 40003bc8: 90 07 bf f6 add %fp, -10, %o0 <== NOT EXECUTED 40003bcc: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40003bd0: 7f ff ff 36 call 400038a8 <== NOT EXECUTED 40003bd4: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED tty->column += 2; 40003bd8: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40003bdc: 82 00 60 02 add %g1, 2, %g1 <== NOT EXECUTED 40003be0: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED 40003be4: 81 c7 e0 08 ret <== NOT EXECUTED 40003be8: 81 e8 00 00 restore <== NOT EXECUTED 40003bec: 90 0e 20 ff and %i0, 0xff, %o0 <== NOT EXECUTED } else { oproc (c, tty); 40003bf0: 7f ff ff 83 call 400039fc <== NOT EXECUTED 40003bf4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40003bf8: 81 c7 e0 08 ret <== NOT EXECUTED 40003bfc: 81 e8 00 00 restore <== NOT EXECUTED 40018a30 : group_fp = fopen("/etc/group", "r"); } void endgrent(void) { if (group_fp != NULL) 40018a30: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 40018a34: d0 00 63 04 ld [ %g1 + 0x304 ], %o0 ! 4003c704 <== NOT EXECUTED 40018a38: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018a3c: 02 80 00 05 be 40018a50 <== NOT EXECUTED 40018a40: 01 00 00 00 nop <== NOT EXECUTED fclose(group_fp); 40018a44: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40018a48: 40 00 33 c0 call 40025948 <== NOT EXECUTED 40018a4c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40018a50: 81 c3 e0 08 retl <== NOT EXECUTED 40018a54: 01 00 00 00 nop 40018a58 : passwd_fp = fopen("/etc/passwd", "r"); } void endpwent(void) { if (passwd_fp != NULL) 40018a58: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 40018a5c: d0 00 62 1c ld [ %g1 + 0x21c ], %o0 ! 4003c61c <== NOT EXECUTED 40018a60: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018a64: 02 80 00 05 be 40018a78 <== NOT EXECUTED 40018a68: 01 00 00 00 nop <== NOT EXECUTED fclose(passwd_fp); 40018a6c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40018a70: 40 00 33 b6 call 40025948 <== NOT EXECUTED 40018a74: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40018a78: 81 c3 e0 08 retl <== NOT EXECUTED 40018a7c: 01 00 00 00 nop 40003c00 : * FIXME: Needs support for WERASE and ECHOPRT. * FIXME: Some of the tests should check for IEXTEN, too. */ static void erase (struct rtems_termios_tty *tty, int lineFlag) { 40003c00: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->ccount == 0) 40003c04: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 <== NOT EXECUTED 40003c08: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003c0c: 02 80 00 36 be 40003ce4 <== NOT EXECUTED 40003c10: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return; if (lineFlag) { 40003c14: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40003c18: 12 80 00 35 bne 40003cec <== NOT EXECUTED 40003c1c: c6 06 20 3c ld [ %i0 + 0x3c ], %g3 <== NOT EXECUTED 40003c20: 27 10 00 60 sethi %hi(0x40018000), %l3 <== NOT EXECUTED 40003c24: 03 10 00 60 sethi %hi(0x40018000), %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { 40003c28: 25 10 00 64 sethi %hi(0x40019000), %l2 <== NOT EXECUTED 40003c2c: a2 10 60 d8 or %g1, 0xd8, %l1 <== NOT EXECUTED 40003c30: 10 80 00 0d b 40003c64 <== NOT EXECUTED 40003c34: a8 14 e0 e0 or %l3, 0xe0, %l4 <== NOT EXECUTED 40003c38: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40003c3c: 12 80 00 6a bne 40003de4 <== NOT EXECUTED 40003c40: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40003c44: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40003c48: 02 80 00 65 be 40003ddc <== NOT EXECUTED 40003c4c: 01 00 00 00 nop <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) echo ('\n', tty); return; } } while (tty->ccount) { 40003c50: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 <== NOT EXECUTED 40003c54: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003c58: 02 80 00 61 be 40003ddc <== NOT EXECUTED 40003c5c: 01 00 00 00 nop <== NOT EXECUTED 40003c60: c6 04 20 3c ld [ %l0 + 0x3c ], %g3 <== NOT EXECUTED unsigned char c = tty->cbuf[--tty->ccount]; 40003c64: da 04 20 1c ld [ %l0 + 0x1c ], %o5 <== NOT EXECUTED 40003c68: 88 00 bf ff add %g2, -1, %g4 <== NOT EXECUTED 40003c6c: c8 24 20 20 st %g4, [ %l0 + 0x20 ] <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) { 40003c70: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40003c74: 02 bf ff f4 be 40003c44 <== NOT EXECUTED 40003c78: c4 0b 40 04 ldub [ %o5 + %g4 ], %g2 <== NOT EXECUTED if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) { 40003c7c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40003c80: 12 80 00 05 bne 40003c94 <== NOT EXECUTED 40003c84: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED 40003c88: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 40003c8c: 22 80 00 6a be,a 40003e34 <== NOT EXECUTED 40003c90: f0 0c 20 43 ldub [ %l0 + 0x43 ], %i0 <== NOT EXECUTED echo (tty->termios.c_cc[VERASE], tty); } else if (c == '\t') { 40003c94: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40003c98: 80 a0 60 09 cmp %g1, 9 <== NOT EXECUTED 40003c9c: 02 80 00 24 be 40003d2c <== NOT EXECUTED 40003ca0: c2 04 a2 90 ld [ %l2 + 0x290 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { 40003ca4: b0 08 a0 ff and %g2, 0xff, %i0 <== NOT EXECUTED 40003ca8: c4 0e 00 01 ldub [ %i0 + %g1 ], %g2 <== NOT EXECUTED 40003cac: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 40003cb0: 12 bf ff e2 bne 40003c38 <== NOT EXECUTED 40003cb4: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED rtems_termios_puts ("\b \b", 3, tty); if (tty->column) tty->column--; } if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) { rtems_termios_puts ("\b \b", 3, tty); 40003cb8: 90 12 20 e0 or %o0, 0xe0, %o0 <== NOT EXECUTED 40003cbc: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40003cc0: 7f ff fe fa call 400038a8 <== NOT EXECUTED 40003cc4: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 40003cc8: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40003ccc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003cd0: 02 bf ff de be 40003c48 <== NOT EXECUTED 40003cd4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED tty->column--; 40003cd8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED } } } if (!lineFlag) 40003cdc: 12 bf ff dd bne 40003c50 <== NOT EXECUTED 40003ce0: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED 40003ce4: 81 c7 e0 08 ret <== NOT EXECUTED 40003ce8: 81 e8 00 00 restore <== NOT EXECUTED erase (struct rtems_termios_tty *tty, int lineFlag) { if (tty->ccount == 0) return; if (lineFlag) { if (!(tty->termios.c_lflag & ECHO)) { 40003cec: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40003cf0: 22 bf ff fd be,a 40003ce4 <== NOT EXECUTED 40003cf4: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED tty->ccount = 0; return; } if (!(tty->termios.c_lflag & ECHOE)) { 40003cf8: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 40003cfc: 12 bf ff ca bne 40003c24 <== NOT EXECUTED 40003d00: 27 10 00 60 sethi %hi(0x40018000), %l3 <== NOT EXECUTED tty->ccount = 0; echo (tty->termios.c_cc[VKILL], tty); 40003d04: d0 0e 20 44 ldub [ %i0 + 0x44 ], %o0 <== NOT EXECUTED if (!(tty->termios.c_lflag & ECHO)) { tty->ccount = 0; return; } if (!(tty->termios.c_lflag & ECHOE)) { tty->ccount = 0; 40003d08: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED echo (tty->termios.c_cc[VKILL], tty); 40003d0c: 7f ff ff 9d call 40003b80 <== NOT EXECUTED 40003d10: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) 40003d14: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 40003d18: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40003d1c: 02 bf ff f2 be 40003ce4 <== NOT EXECUTED 40003d20: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED echo ('\n', tty); 40003d24: 7f ff ff 97 call 40003b80 <== NOT EXECUTED 40003d28: 91 e8 20 0a restore %g0, 0xa, %o0 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 40003d2c: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 40003d30: 02 80 00 19 be 40003d94 <== NOT EXECUTED 40003d34: f0 04 20 2c ld [ %l0 + 0x2c ], %i0 <== NOT EXECUTED c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40003d38: d8 04 a2 90 ld [ %l2 + 0x290 ], %o4 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOCTL) 40003d3c: 96 08 e2 00 and %g3, 0x200, %o3 <== NOT EXECUTED while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40003d40: 10 80 00 07 b 40003d5c <== NOT EXECUTED 40003d44: 86 10 20 00 clr %g3 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOCTL) 40003d48: 32 80 00 02 bne,a 40003d50 <== NOT EXECUTED 40003d4c: b0 06 20 02 add %i0, 2, %i0 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 40003d50: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 40003d54: 22 80 00 11 be,a 40003d98 <== NOT EXECUTED 40003d58: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED c = tty->cbuf[i++]; 40003d5c: c2 08 c0 0d ldub [ %g3 + %o5 ], %g1 <== NOT EXECUTED if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40003d60: 84 08 60 ff and %g1, 0xff, %g2 <== NOT EXECUTED /* * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { 40003d64: 83 28 60 18 sll %g1, 0x18, %g1 <== NOT EXECUTED 40003d68: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40003d6c: 80 a0 60 09 cmp %g1, 9 <== NOT EXECUTED 40003d70: 02 80 00 18 be 40003dd0 <== NOT EXECUTED 40003d74: 86 00 e0 01 inc %g3 <== NOT EXECUTED col = (col | 7) + 1; } else if (iscntrl (c)) { 40003d78: c2 08 80 0c ldub [ %g2 + %o4 ], %g1 <== NOT EXECUTED 40003d7c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40003d80: 12 bf ff f2 bne 40003d48 <== NOT EXECUTED 40003d84: 80 a2 e0 00 cmp %o3, 0 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 40003d88: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 40003d8c: 12 bf ff f4 bne 40003d5c <== NOT EXECUTED 40003d90: b0 06 20 01 inc %i0 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 40003d94: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40003d98: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 40003d9c: 16 bf ff ab bge 40003c48 <== NOT EXECUTED 40003da0: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); 40003da4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40003da8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40003dac: 7f ff fe bf call 400038a8 <== NOT EXECUTED 40003db0: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED tty->column--; 40003db4: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40003db8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 40003dbc: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 40003dc0: 14 bf ff f9 bg 40003da4 <== NOT EXECUTED 40003dc4: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40003dc8: 10 bf ff a0 b 40003c48 <== NOT EXECUTED 40003dcc: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; 40003dd0: 82 16 20 07 or %i0, 7, %g1 <== NOT EXECUTED 40003dd4: 10 bf ff df b 40003d50 <== NOT EXECUTED 40003dd8: b0 00 60 01 add %g1, 1, %i0 <== NOT EXECUTED 40003ddc: 81 c7 e0 08 ret <== NOT EXECUTED 40003de0: 81 e8 00 00 restore <== NOT EXECUTED tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { rtems_termios_puts ("\b \b", 3, tty); 40003de4: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40003de8: 7f ff fe b0 call 400038a8 <== NOT EXECUTED 40003dec: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 40003df0: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40003df4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003df8: 02 80 00 04 be 40003e08 <== NOT EXECUTED 40003dfc: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED tty->column--; 40003e00: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40003e04: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) { 40003e08: c2 04 a2 90 ld [ %l2 + 0x290 ], %g1 <== NOT EXECUTED 40003e0c: c4 0e 00 01 ldub [ %i0 + %g1 ], %g2 <== NOT EXECUTED 40003e10: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 40003e14: 22 bf ff aa be,a 40003cbc <== NOT EXECUTED 40003e18: 90 12 20 e0 or %o0, 0xe0, %o0 <== NOT EXECUTED 40003e1c: c6 04 20 3c ld [ %l0 + 0x3c ], %g3 <== NOT EXECUTED 40003e20: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40003e24: 32 bf ff a6 bne,a 40003cbc <== NOT EXECUTED 40003e28: 90 12 20 e0 or %o0, 0xe0, %o0 <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40003e2c: 10 bf ff 87 b 40003c48 <== NOT EXECUTED 40003e30: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED while (tty->ccount) { unsigned char c = tty->cbuf[--tty->ccount]; if (tty->termios.c_lflag & ECHO) { if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) { echo (tty->termios.c_cc[VERASE], tty); 40003e34: 7f ff ff 53 call 40003b80 <== NOT EXECUTED 40003e38: 93 e8 00 10 restore %g0, %l0, %o1 <== NOT EXECUTED 40003e3c: 01 00 00 00 nop 40023364 : int fcntl( int fd, int cmd, ... ) { 40023364: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 40023368: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 4002336c: d8 00 63 dc ld [ %g1 + 0x3dc ], %o4 ! 4003a7dc <== NOT EXECUTED ... ) { int ret; va_list ap; va_start( ap, cmd ); 40023370: 88 07 a0 4c add %fp, 0x4c, %g4 <== NOT EXECUTED int fcntl( int fd, int cmd, ... ) { 40023374: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40023378: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 4002337c: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40023380: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 40023384: 80 a6 00 0c cmp %i0, %o4 <== NOT EXECUTED 40023388: 1a 80 00 78 bcc 40023568 <== NOT EXECUTED 4002338c: c8 27 bf f4 st %g4, [ %fp + -12 ] <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40023390: 3b 10 00 f3 sethi %hi(0x4003cc00), %i5 <== NOT EXECUTED 40023394: da 07 62 c4 ld [ %i5 + 0x2c4 ], %o5 ! 4003cec4 <== NOT EXECUTED 40023398: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 4002339c: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 400233a0: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400233a4: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 400233a8: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400233ac: b0 00 40 0d add %g1, %o5, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 400233b0: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 400233b4: 80 8a 21 00 btst 0x100, %o0 <== NOT EXECUTED 400233b8: 02 80 00 6c be 40023568 <== NOT EXECUTED 400233bc: 80 a6 60 09 cmp %i1, 9 <== NOT EXECUTED /* * This switch should contain all the cases from POSIX. */ switch ( cmd ) { 400233c0: 08 80 00 09 bleu 400233e4 <== NOT EXECUTED 400233c4: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED errno = ENOTSUP; ret = -1; break; default: errno = EINVAL; 400233c8: 40 00 09 19 call 4002582c <__errno> <== NOT EXECUTED 400233cc: 01 00 00 00 nop <== NOT EXECUTED 400233d0: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 400233d4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED { int ret; va_list ap; va_start( ap, cmd ); ret = vfcntl(fd,cmd,ap); va_end(ap); 400233d8: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED return ret; } 400233dc: 81 c7 e0 08 ret <== NOT EXECUTED 400233e0: 91 e8 00 1c restore %g0, %i4, %o0 <== NOT EXECUTED /* * This switch should contain all the cases from POSIX. */ switch ( cmd ) { 400233e4: 05 10 00 8c sethi %hi(0x40023000), %g2 <== NOT EXECUTED 400233e8: 84 10 a3 3c or %g2, 0x33c, %g2 ! 4002333c <== NOT EXECUTED 400233ec: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 400233f0: 81 c0 c0 00 jmp %g3 <== NOT EXECUTED 400233f4: 01 00 00 00 nop <== NOT EXECUTED errno = ENOTSUP; ret = -1; break; case F_GETOWN: /* for sockets. */ errno = ENOTSUP; 400233f8: 40 00 09 0d call 4002582c <__errno> <== NOT EXECUTED 400233fc: b8 10 3f ff mov -1, %i4 ! ffffffff <== NOT EXECUTED 40023400: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40023404: 10 bf ff f6 b 400233dc <== NOT EXECUTED 40023408: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED case F_GETFL: /* more flags (cloexec) */ ret = rtems_libio_to_fcntl_flags( iop->flags ); break; case F_SETFL: flags = rtems_libio_fcntl_flags( va_arg( ap, int ) ); 4002340c: d0 01 00 00 ld [ %g4 ], %o0 <== NOT EXECUTED 40023410: 7f ff 88 0e call 40005448 <== NOT EXECUTED 40023414: b8 10 20 00 clr %i4 <== NOT EXECUTED /* * XXX If we are turning on append, should we seek to the end? */ iop->flags = (iop->flags & ~mask) | (flags & mask); 40023418: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4002341c: 90 0a 22 01 and %o0, 0x201, %o0 <== NOT EXECUTED 40023420: 82 08 7d fe and %g1, -514, %g1 <== NOT EXECUTED 40023424: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED 40023428: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED * If we got this far successfully, then we give the optional * filesystem specific handler a chance to process this. */ if (ret >= 0) { if (iop->handlers->fcntl_h) { 4002342c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40023430: c2 00 60 30 ld [ %g1 + 0x30 ], %g1 <== NOT EXECUTED 40023434: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023438: 02 bf ff e9 be 400233dc <== NOT EXECUTED 4002343c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED int err = (*iop->handlers->fcntl_h)( cmd, iop ); 40023440: 9f c0 40 00 call %g1 <== NOT EXECUTED 40023444: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (err) { 40023448: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 4002344c: 02 bf ff e4 be 400233dc <== NOT EXECUTED 40023450: 01 00 00 00 nop <== NOT EXECUTED errno = err; 40023454: 40 00 08 f6 call 4002582c <__errno> <== NOT EXECUTED 40023458: b8 10 3f ff mov -1, %i4 ! ffffffff <== NOT EXECUTED 4002345c: 10 bf ff e0 b 400233dc <== NOT EXECUTED 40023460: fa 22 00 00 st %i5, [ %o0 ] <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; break; case F_GETFL: /* more flags (cloexec) */ ret = rtems_libio_to_fcntl_flags( iop->flags ); 40023464: 7f ff 87 4b call 40005190 <== NOT EXECUTED 40023468: 01 00 00 00 nop <== NOT EXECUTED 4002346c: b8 10 00 08 mov %o0, %i4 <== NOT EXECUTED /* * If we got this far successfully, then we give the optional * filesystem specific handler a chance to process this. */ if (ret >= 0) { 40023470: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40023474: 36 bf ff ef bge,a 40023430 <== NOT EXECUTED 40023478: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4002347c: 30 bf ff d8 b,a 400233dc <== NOT EXECUTED * if a new process is exec()'ed. Since RTEMS does not support * processes, then we can ignore this one except to make * F_GETFD work. */ if ( va_arg( ap, int ) ) 40023480: c2 01 00 00 ld [ %g4 ], %g1 <== NOT EXECUTED 40023484: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023488: 22 80 00 2d be,a 4002353c <== NOT EXECUTED 4002348c: 90 0a 37 ff and %o0, -2049, %o0 <== NOT EXECUTED iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC; 40023490: 90 12 28 00 or %o0, 0x800, %o0 <== NOT EXECUTED 40023494: b8 10 20 00 clr %i4 <== NOT EXECUTED 40023498: 10 bf ff e5 b 4002342c <== NOT EXECUTED 4002349c: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); break; case F_GETFD: /* get f_flags */ ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0); 400234a0: 83 32 20 0b srl %o0, 0xb, %g1 <== NOT EXECUTED 400234a4: 10 bf ff e2 b 4002342c <== NOT EXECUTED 400234a8: b8 08 60 01 and %g1, 1, %i4 <== NOT EXECUTED * This switch should contain all the cases from POSIX. */ switch ( cmd ) { case F_DUPFD: /* dup */ fd2 = va_arg( ap, int ); 400234ac: c6 01 00 00 ld [ %g4 ], %g3 <== NOT EXECUTED if ( fd2 ) 400234b0: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 400234b4: 02 80 00 32 be 4002357c <== NOT EXECUTED 400234b8: 80 a3 00 03 cmp %o4, %g3 <== NOT EXECUTED diop = rtems_libio_iop( fd2 ); 400234bc: 96 10 20 00 clr %o3 <== NOT EXECUTED 400234c0: 18 80 00 22 bgu 40023548 <== NOT EXECUTED 400234c4: 98 10 20 00 clr %o4 <== NOT EXECUTED } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 400234c8: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED break; } } diop->handlers = iop->handlers; diop->file_info = iop->file_info; 400234cc: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 <== NOT EXECUTED diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 400234d0: c2 23 20 10 st %g1, [ %o4 + 0x10 ] <== NOT EXECUTED 400234d4: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 <== NOT EXECUTED ret = (int) (diop - rtems_libio_iops); 400234d8: c8 07 62 c4 ld [ %i5 + 0x2c4 ], %g4 <== NOT EXECUTED } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 400234dc: c4 23 20 14 st %g2, [ %o4 + 0x14 ] <== NOT EXECUTED 400234e0: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 400234e4: da 06 20 30 ld [ %i0 + 0x30 ], %o5 <== NOT EXECUTED diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 400234e8: c2 23 20 18 st %g1, [ %o4 + 0x18 ] <== NOT EXECUTED 400234ec: c4 06 20 1c ld [ %i0 + 0x1c ], %g2 <== NOT EXECUTED ret = (int) (diop - rtems_libio_iops); 400234f0: 88 22 c0 04 sub %o3, %g4, %g4 <== NOT EXECUTED break; } } diop->handlers = iop->handlers; diop->file_info = iop->file_info; 400234f4: c6 23 20 2c st %g3, [ %o4 + 0x2c ] <== NOT EXECUTED diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); 400234f8: 89 39 20 02 sra %g4, 2, %g4 <== NOT EXECUTED 400234fc: 87 29 20 02 sll %g4, 2, %g3 <== NOT EXECUTED } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 40023500: c4 23 20 1c st %g2, [ %o4 + 0x1c ] <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 40023504: da 23 20 30 st %o5, [ %o4 + 0x30 ] <== NOT EXECUTED diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); 40023508: 85 29 20 06 sll %g4, 6, %g2 <== NOT EXECUTED } } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; 4002350c: d0 23 20 0c st %o0, [ %o4 + 0xc ] <== NOT EXECUTED diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); 40023510: 84 20 80 03 sub %g2, %g3, %g2 <== NOT EXECUTED 40023514: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40023518: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4002351c: 87 28 60 0c sll %g1, 0xc, %g3 <== NOT EXECUTED 40023520: 82 00 40 03 add %g1, %g3, %g1 <== NOT EXECUTED 40023524: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 40023528: 83 28 60 04 sll %g1, 4, %g1 <== NOT EXECUTED 4002352c: 82 20 40 04 sub %g1, %g4, %g1 <== NOT EXECUTED 40023530: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40023534: 10 bf ff cf b 40023470 <== NOT EXECUTED 40023538: b8 21 00 01 sub %g4, %g1, %i4 <== NOT EXECUTED */ if ( va_arg( ap, int ) ) iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC; else iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; 4002353c: b8 10 20 00 clr %i4 <== NOT EXECUTED 40023540: 10 bf ff bb b 4002342c <== NOT EXECUTED 40023544: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED switch ( cmd ) { case F_DUPFD: /* dup */ fd2 = va_arg( ap, int ); if ( fd2 ) diop = rtems_libio_iop( fd2 ); 40023548: 85 28 e0 02 sll %g3, 2, %g2 <== NOT EXECUTED 4002354c: 83 28 e0 04 sll %g3, 4, %g1 <== NOT EXECUTED 40023550: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40023554: 82 00 40 03 add %g1, %g3, %g1 <== NOT EXECUTED 40023558: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4002355c: 96 03 40 01 add %o5, %g1, %o3 <== NOT EXECUTED 40023560: 10 bf ff da b 400234c8 <== NOT EXECUTED 40023564: 98 10 00 0b mov %o3, %o4 <== NOT EXECUTED int mask; int ret = 0; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 40023568: 40 00 08 b1 call 4002582c <__errno> <== NOT EXECUTED 4002356c: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED 40023570: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40023574: 10 bf ff 9a b 400233dc <== NOT EXECUTED 40023578: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fd2 = va_arg( ap, int ); if ( fd2 ) diop = rtems_libio_iop( fd2 ); else { /* allocate a file control block */ diop = rtems_libio_allocate(); 4002357c: 7f ff 87 75 call 40005350 <== NOT EXECUTED 40023580: 01 00 00 00 nop <== NOT EXECUTED if ( diop == 0 ) { 40023584: 98 92 20 00 orcc %o0, 0, %o4 <== NOT EXECUTED 40023588: 02 bf ff 94 be 400233d8 <== NOT EXECUTED 4002358c: 96 10 00 0c mov %o4, %o3 <== NOT EXECUTED 40023590: 10 bf ff ce b 400234c8 <== NOT EXECUTED 40023594: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 40002280 : } void free( void *ptr ) { 40002280: 9d e3 bf 98 save %sp, -104, %sp MSBUMP(free_calls, 1); if ( !ptr ) 40002284: 80 a6 20 00 cmp %i0, 0 40002288: 02 80 00 19 be 400022ec 4000228c: 03 10 00 67 sethi %hi(0x40019c00), %g1 /* * Do not attempt to free memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 40002290: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> 40002294: 80 a0 a0 03 cmp %g2, 3 40002298: 12 80 00 0e bne 400022d0 4000229c: 03 10 00 66 sethi %hi(0x40019800), %g1 if ((_Thread_Dispatch_disable_level > 0) || (_ISR_Nest_level > 0)) { 400022a0: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 400022a4: 80 a0 a0 00 cmp %g2, 0 400022a8: 12 80 00 06 bne 400022c0 400022ac: 03 10 00 66 sethi %hi(0x40019800), %g1 400022b0: c4 00 63 d4 ld [ %g1 + 0x3d4 ], %g2 ! 40019bd4 <_ISR_Nest_level> 400022b4: 80 a0 a0 00 cmp %g2, 0 400022b8: 02 80 00 07 be 400022d4 400022bc: 37 10 00 66 sethi %hi(0x40019800), %i3 Chain_Append(&RTEMS_Malloc_GC_list, (Chain_Node *)ptr); 400022c0: b2 10 00 18 mov %i0, %i1 400022c4: 31 10 00 66 sethi %hi(0x40019800), %i0 400022c8: 40 00 12 7d call 40006cbc <_Chain_Append> 400022cc: 91 ee 21 ac restore %i0, 0x1ac, %o0 MSBUMP(lifetime_freed, size); } } #endif if ( !_Protected_heap_Free( &RTEMS_Malloc_Heap, ptr ) ) { 400022d0: 37 10 00 66 sethi %hi(0x40019800), %i3 <== NOT EXECUTED 400022d4: 92 10 00 18 mov %i0, %o1 400022d8: 40 00 18 a9 call 4000857c <_Protected_heap_Free> 400022dc: 90 16 e1 50 or %i3, 0x150, %o0 400022e0: 80 a2 20 00 cmp %o0, 0 400022e4: 02 80 00 04 be 400022f4 400022e8: 82 16 e1 50 or %i3, 0x150, %g1 400022ec: 81 c7 e0 08 ret 400022f0: 81 e8 00 00 restore printk( "Program heap: free of bad pointer %p -- range %p - %p \n", 400022f4: f6 00 60 1c ld [ %g1 + 0x1c ], %i3 <== NOT EXECUTED 400022f8: f4 00 60 18 ld [ %g1 + 0x18 ], %i2 <== NOT EXECUTED 400022fc: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED 40002300: 31 10 00 60 sethi %hi(0x40018000), %i0 <== NOT EXECUTED 40002304: 40 00 03 c8 call 40003224 <== NOT EXECUTED 40002308: 91 ee 20 68 restore %i0, 0x68, %o0 <== NOT EXECUTED 4000230c: 01 00 00 00 nop 4001960c : * NOTE: this must be called with * thread dispatching disabled! */ static void free_user_env(void *venv) { 4001960c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_user_env_t *env = (rtems_user_env_t*) venv ; if (env != &rtems_global_user_env 40019610: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED 40019614: 82 10 63 a4 or %g1, 0x3a4, %g1 ! 4003d3a4 <== NOT EXECUTED 40019618: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 4001961c: 02 80 00 18 be 4001967c <== NOT EXECUTED 40019620: 01 00 00 00 nop <== NOT EXECUTED #ifdef HAVE_USERENV_REFCNT && --env->refcnt <= 0 #endif ) { rtems_filesystem_freenode( &env->current_directory); 40019624: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40019628: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001962c: 22 80 00 09 be,a 40019650 <== NOT EXECUTED 40019630: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40019634: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019638: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001963c: 22 80 00 05 be,a 40019650 <== NOT EXECUTED 40019640: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40019644: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019648: 90 06 20 04 add %i0, 4, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &env->root_directory); 4001964c: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40019650: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019654: 02 80 00 08 be 40019674 <== NOT EXECUTED 40019658: 01 00 00 00 nop <== NOT EXECUTED 4001965c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019660: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019664: 02 80 00 04 be 40019674 <== NOT EXECUTED 40019668: 01 00 00 00 nop <== NOT EXECUTED 4001966c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019670: 90 06 20 14 add %i0, 0x14, %o0 <== NOT EXECUTED free(env); 40019674: 7f ff af 8e call 400054ac <== NOT EXECUTED 40019678: 81 e8 00 00 restore <== NOT EXECUTED 4001967c: 81 c7 e0 08 ret <== NOT EXECUTED 40019680: 81 e8 00 00 restore <== NOT EXECUTED 400173fc : int fstat( int fd, struct stat *sbuf ) { 400173fc: 9d e3 bf 98 save %sp, -104, %sp /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) 40017400: 92 96 60 00 orcc %i1, 0, %o1 40017404: 02 80 00 3f be 40017500 40017408: 03 10 00 62 sethi %hi(0x40018800), %g1 /* * Now process the stat() request. */ iop = rtems_libio_iop( fd ); 4001740c: c4 00 63 0c ld [ %g1 + 0x30c ], %g2 ! 40018b0c 40017410: 80 a6 00 02 cmp %i0, %g2 40017414: 1a 80 00 2f bcc 400174d0 40017418: 03 10 00 66 sethi %hi(0x40019800), %g1 4001741c: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 40019944 40017420: 85 2e 20 02 sll %i0, 2, %g2 40017424: 83 2e 20 04 sll %i0, 4, %g1 40017428: 82 20 40 02 sub %g1, %g2, %g1 4001742c: 82 00 40 18 add %g1, %i0, %g1 40017430: 83 28 60 02 sll %g1, 2, %g1 40017434: 90 00 40 03 add %g1, %g3, %o0 rtems_libio_check_fd( fd ); rtems_libio_check_is_open(iop); 40017438: c4 02 20 0c ld [ %o0 + 0xc ], %g2 4001743c: 80 88 a1 00 btst 0x100, %g2 40017440: 02 80 00 24 be 400174d0 40017444: 01 00 00 00 nop if ( !iop->handlers ) 40017448: c2 02 20 30 ld [ %o0 + 0x30 ], %g1 4001744c: 80 a0 60 00 cmp %g1, 0 40017450: 02 80 00 20 be 400174d0 40017454: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EBADF ); if ( !iop->handlers->fstat_h ) 40017458: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 4001745c: 80 a0 60 00 cmp %g1, 0 40017460: 02 80 00 22 be 400174e8 40017464: 01 00 00 00 nop /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( sbuf, 0, sizeof(struct stat) ); 40017468: c0 22 40 00 clr [ %o1 ] 4001746c: c0 22 60 04 clr [ %o1 + 4 ] 40017470: c0 22 60 08 clr [ %o1 + 8 ] 40017474: c0 22 60 0c clr [ %o1 + 0xc ] 40017478: c0 22 60 10 clr [ %o1 + 0x10 ] 4001747c: c0 22 60 14 clr [ %o1 + 0x14 ] 40017480: c0 22 60 18 clr [ %o1 + 0x18 ] 40017484: c0 22 60 1c clr [ %o1 + 0x1c ] 40017488: c0 22 60 20 clr [ %o1 + 0x20 ] 4001748c: c0 22 60 24 clr [ %o1 + 0x24 ] 40017490: c0 22 60 28 clr [ %o1 + 0x28 ] 40017494: c0 22 60 2c clr [ %o1 + 0x2c ] 40017498: c0 22 60 30 clr [ %o1 + 0x30 ] 4001749c: c0 22 60 34 clr [ %o1 + 0x34 ] 400174a0: c0 22 60 38 clr [ %o1 + 0x38 ] 400174a4: c0 22 60 3c clr [ %o1 + 0x3c ] 400174a8: c0 22 60 40 clr [ %o1 + 0x40 ] 400174ac: c0 22 60 44 clr [ %o1 + 0x44 ] 400174b0: c0 22 60 48 clr [ %o1 + 0x48 ] 400174b4: c0 22 60 4c clr [ %o1 + 0x4c ] return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf ); 400174b8: c2 02 20 30 ld [ %o0 + 0x30 ], %g1 400174bc: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 400174c0: 9f c0 80 00 call %g2 400174c4: 90 02 20 10 add %o0, 0x10, %o0 } 400174c8: 81 c7 e0 08 ret 400174cc: 91 e8 00 08 restore %g0, %o0, %o0 iop = rtems_libio_iop( fd ); rtems_libio_check_fd( fd ); rtems_libio_check_is_open(iop); if ( !iop->handlers ) rtems_set_errno_and_return_minus_one( EBADF ); 400174d0: 7f ff db 1a call 4000e138 <__errno> <== NOT EXECUTED 400174d4: 01 00 00 00 nop <== NOT EXECUTED 400174d8: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 400174dc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400174e0: 10 bf ff fa b 400174c8 <== NOT EXECUTED 400174e4: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED if ( !iop->handlers->fstat_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 400174e8: 7f ff db 14 call 4000e138 <__errno> <== NOT EXECUTED 400174ec: 01 00 00 00 nop <== NOT EXECUTED 400174f0: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 400174f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400174f8: 10 bf ff f4 b 400174c8 <== NOT EXECUTED 400174fc: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) rtems_set_errno_and_return_minus_one( EFAULT ); 40017500: 7f ff db 0e call 4000e138 <__errno> <== NOT EXECUTED 40017504: 01 00 00 00 nop <== NOT EXECUTED 40017508: 82 10 20 0e mov 0xe, %g1 ! e <== NOT EXECUTED 4001750c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017510: 10 bf ff ee b 400174c8 <== NOT EXECUTED 40017514: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 4000bef8 : int ftruncate( int fd, off_t length ) { 4000bef8: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED rtems_libio_t *iop; rtems_filesystem_location_info_t loc; rtems_libio_check_fd( fd ); 4000befc: 03 10 00 62 sethi %hi(0x40018800), %g1 <== NOT EXECUTED 4000bf00: c4 00 63 0c ld [ %g1 + 0x30c ], %g2 ! 40018b0c <== NOT EXECUTED 4000bf04: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 4000bf08: 1a 80 00 2b bcc 4000bfb4 <== NOT EXECUTED 4000bf0c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 4000bf10: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 40019944 <== NOT EXECUTED 4000bf14: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 4000bf18: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 4000bf1c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4000bf20: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4000bf24: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4000bf28: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 4000bf2c: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED 4000bf30: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED 4000bf34: 02 80 00 20 be 4000bfb4 <== NOT EXECUTED 4000bf38: 01 00 00 00 nop <== NOT EXECUTED /* * Make sure we are not working on a directory */ loc = iop->pathinfo; 4000bf3c: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED 4000bf40: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED 4000bf44: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 <== NOT EXECUTED 4000bf48: c4 27 bf ec st %g2, [ %fp + -20 ] <== NOT EXECUTED 4000bf4c: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 <== NOT EXECUTED 4000bf50: c2 27 bf f0 st %g1, [ %fp + -16 ] <== NOT EXECUTED 4000bf54: c4 06 20 1c ld [ %i0 + 0x1c ], %g2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 4000bf58: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 4000bf5c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000bf60: 02 80 00 1b be 4000bfcc <== NOT EXECUTED 4000bf64: c4 27 bf f4 st %g2, [ %fp + -12 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) 4000bf68: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000bf6c: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 4000bf70: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4000bf74: 02 80 00 22 be 4000bffc <== NOT EXECUTED 4000bf78: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 4000bf7c: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000bf80: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 4000bf84: 02 80 00 18 be 4000bfe4 <== NOT EXECUTED 4000bf88: 01 00 00 00 nop <== NOT EXECUTED if ( !iop->handlers->ftruncate_h ) 4000bf8c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4000bf90: c2 00 60 20 ld [ %g1 + 0x20 ], %g1 <== NOT EXECUTED 4000bf94: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000bf98: 02 80 00 0d be 4000bfcc <== NOT EXECUTED 4000bf9c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); return (*iop->handlers->ftruncate_h)( iop, length ); 4000bfa0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000bfa4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000bfa8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } 4000bfac: 81 c7 e0 08 ret <== NOT EXECUTED 4000bfb0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED rtems_libio_t *iop; rtems_filesystem_location_info_t loc; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 4000bfb4: 40 00 08 61 call 4000e138 <__errno> <== NOT EXECUTED 4000bfb8: 01 00 00 00 nop <== NOT EXECUTED 4000bfbc: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 4000bfc0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000bfc4: 10 bf ff fa b 4000bfac <== NOT EXECUTED 4000bfc8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); if ( !iop->handlers->ftruncate_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 4000bfcc: 40 00 08 5b call 4000e138 <__errno> <== NOT EXECUTED 4000bfd0: 01 00 00 00 nop <== NOT EXECUTED 4000bfd4: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4000bfd8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000bfdc: 10 bf ff f4 b 4000bfac <== NOT EXECUTED 4000bfe0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) rtems_set_errno_and_return_minus_one( EISDIR ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 4000bfe4: 40 00 08 55 call 4000e138 <__errno> <== NOT EXECUTED 4000bfe8: 01 00 00 00 nop <== NOT EXECUTED 4000bfec: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4000bff0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000bff4: 10 bf ff ee b 4000bfac <== NOT EXECUTED 4000bff8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED loc = iop->pathinfo; if ( !loc.ops->node_type_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) rtems_set_errno_and_return_minus_one( EISDIR ); 4000bffc: 40 00 08 4f call 4000e138 <__errno> <== NOT EXECUTED 4000c000: 01 00 00 00 nop <== NOT EXECUTED 4000c004: 82 10 20 15 mov 0x15, %g1 ! 15 <== NOT EXECUTED 4000c008: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c00c: 10 bf ff e8 b 4000bfac <== NOT EXECUTED 4000c010: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 400185c8 : char * getcwd (pt, size) char *pt; size_t size; { 400185c8: 9d e3 bf 30 save %sp, -208, %sp <== NOT EXECUTED * If no buffer specified by the user, allocate one as necessary. * If a buffer is specified, the size has to be non-zero. The path * is built from the end of the buffer backwards. */ if (pt) 400185cc: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 400185d0: 02 80 00 fa be 400189b8 <== NOT EXECUTED 400185d4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED if (!size) { errno = EINVAL; return (char *) NULL; } ept = pt + size; 400185d8: b6 10 20 00 clr %i3 <== NOT EXECUTED */ if (pt) { ptsize = 0; if (!size) 400185dc: 02 80 00 f1 be 400189a0 <== NOT EXECUTED 400185e0: b2 06 00 19 add %i0, %i1, %i1 <== NOT EXECUTED return (char *) NULL; } ept = pt + ptsize; } bpt = ept - 1; *bpt = '\0'; 400185e4: c0 2e 7f ff clrb [ %i1 + -1 ] <== NOT EXECUTED * Allocate bytes (1024 - malloc space) for the string of "../"'s. * Should always be enough (it's 340 levels). If it's not, allocate * as necessary. Special * case the first stat, it's ".", not "..". */ if (!(up = (char *) malloc (upsize = 1024 - 4))) 400185e8: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 400185ec: 7f ff b3 d9 call 40005550 <== NOT EXECUTED 400185f0: b8 06 7f ff add %i1, -1, %i4 <== NOT EXECUTED 400185f4: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 400185f8: 02 80 00 0c be 40018628 <== NOT EXECUTED 400185fc: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; up[1] = '\0'; 40018600: c0 2c 60 01 clrb [ %l1 + 1 ] <== NOT EXECUTED { goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; 40018604: c2 2c 40 00 stb %g1, [ %l1 ] <== NOT EXECUTED up[1] = '\0'; /* Save root values, so know when to stop. */ if (stat ("/", &s)) 40018608: ae 07 bf a8 add %fp, -88, %l7 <== NOT EXECUTED 4001860c: 11 10 00 dd sethi %hi(0x40037400), %o0 <== NOT EXECUTED 40018610: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 40018614: 7f ff b8 93 call 40006860 <== NOT EXECUTED 40018618: 90 12 21 68 or %o0, 0x168, %o0 <== NOT EXECUTED 4001861c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018620: 02 80 00 10 be 40018660 <== NOT EXECUTED 40018624: c4 1f bf a8 ldd [ %fp + -88 ], %g2 <== NOT EXECUTED /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); if (ptsize) 40018628: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 4001862c: 12 80 00 06 bne 40018644 <== NOT EXECUTED 40018630: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED free (pt); free (up); 40018634: 7f ff b3 9e call 400054ac <== NOT EXECUTED 40018638: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001863c: 81 c7 e0 08 ret <== NOT EXECUTED 40018640: 81 e8 00 00 restore <== NOT EXECUTED err: if(dir) (void) _closedir (dir); if (ptsize) free (pt); 40018644: 7f ff b3 9a call 400054ac <== NOT EXECUTED 40018648: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 4001864c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40018650: 7f ff b3 97 call 400054ac <== NOT EXECUTED 40018654: b0 10 20 00 clr %i0 <== NOT EXECUTED 40018658: 81 c7 e0 08 ret <== NOT EXECUTED 4001865c: 81 e8 00 00 restore <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 40018660: 82 04 64 00 add %l1, 0x400, %g1 <== NOT EXECUTED up[1] = '\0'; /* Save root values, so know when to stop. */ if (stat ("/", &s)) goto err; root_dev = s.st_dev; 40018664: c4 3f bf 98 std %g2, [ %fp + -104 ] <== NOT EXECUTED root_ino = s.st_ino; 40018668: c6 07 bf b0 ld [ %fp + -80 ], %g3 <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 4001866c: c2 27 bf a4 st %g1, [ %fp + -92 ] <== NOT EXECUTED if (stat ("/", &s)) goto err; root_dev = s.st_dev; root_ino = s.st_ino; errno = 0; /* XXX readdir has no error return. */ 40018670: 40 00 34 6f call 4002582c <__errno> <== NOT EXECUTED 40018674: c6 27 bf a0 st %g3, [ %fp + -96 ] <== NOT EXECUTED 40018678: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 4001867c: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED 40018680: a8 10 00 11 mov %l1, %l4 <== NOT EXECUTED 40018684: c4 27 bf 94 st %g2, [ %fp + -108 ] <== NOT EXECUTED 40018688: b4 10 23 fc mov 0x3fc, %i2 <== NOT EXECUTED for (first = 1;; first = 0) { /* Stat the current level. */ if (_stat (up, &s)) 4001868c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40018690: 7f ff b8 74 call 40006860 <== NOT EXECUTED 40018694: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 40018698: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001869c: 12 bf ff e3 bne 40018628 <== NOT EXECUTED 400186a0: e4 1f bf a8 ldd [ %fp + -88 ], %l2 <== NOT EXECUTED /* Save current node values. */ ino = s.st_ino; dev = s.st_dev; /* Check for reaching root. */ if (root_dev == dev && root_ino == ino) 400186a4: c6 07 bf 98 ld [ %fp + -104 ], %g3 <== NOT EXECUTED 400186a8: 80 a0 c0 12 cmp %g3, %l2 <== NOT EXECUTED 400186ac: 02 80 00 a9 be 40018950 <== NOT EXECUTED 400186b0: fa 07 bf b0 ld [ %fp + -80 ], %i5 <== NOT EXECUTED * Build pointer to the parent directory, allocating memory * as necessary. Max length is 3 for "../", the largest * possible component name, plus a trailing NULL. */ if (bup + 3 + MAXNAMLEN + 1 >= eup) 400186b4: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 400186b8: 82 05 24 04 add %l4, 0x404, %g1 <== NOT EXECUTED 400186bc: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400186c0: 08 80 00 5a bleu 40018828 <== NOT EXECUTED 400186c4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED goto err; } bup = up; eup = up + upsize; } *bup++ = '.'; 400186c8: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; 400186cc: c0 2d 20 02 clrb [ %l4 + 2 ] <== NOT EXECUTED } bup = up; eup = up + upsize; } *bup++ = '.'; *bup++ = '.'; 400186d0: c2 2d 20 01 stb %g1, [ %l4 + 1 ] <== NOT EXECUTED goto err; } bup = up; eup = up + upsize; } *bup++ = '.'; 400186d4: c2 2d 00 00 stb %g1, [ %l4 ] <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; /* Open and stat parent directory. */ if (!(dir = _opendir (up)) || _fstat (__dirfd (dir), &s)) 400186d8: 40 00 03 a8 call 40019578 <== NOT EXECUTED 400186dc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400186e0: aa 92 20 00 orcc %o0, 0, %l5 <== NOT EXECUTED 400186e4: 02 bf ff d2 be 4001862c <== NOT EXECUTED 400186e8: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 400186ec: d0 05 40 00 ld [ %l5 ], %o0 <== NOT EXECUTED 400186f0: 40 00 2b b1 call 400235b4 <== NOT EXECUTED 400186f4: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 400186f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400186fc: 12 80 00 39 bne 400187e0 <== NOT EXECUTED 40018700: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED goto err; /* Add trailing slash for next directory. */ *bup++ = '/'; 40018704: c2 2d 20 02 stb %g1, [ %l4 + 2 ] <== NOT EXECUTED * the inode number in the directory is for the entry in the * parent directory, not the inode number of the mounted file. */ save_errno = 0; if (s.st_dev == dev) 40018708: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED 4001870c: 80 a0 40 12 cmp %g1, %l2 <== NOT EXECUTED 40018710: 02 80 00 4f be 4001884c <== NOT EXECUTED 40018714: a8 05 20 03 add %l4, 3, %l4 <== NOT EXECUTED 40018718: ac 10 20 00 clr %l6 <== NOT EXECUTED } } else for (;;) { if (!(dp = _readdir (dir))) 4001871c: 40 00 04 59 call 40019880 <== NOT EXECUTED 40018720: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED 40018724: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018728: 02 80 00 28 be 400187c8 <== NOT EXECUTED 4001872c: 01 00 00 00 nop <== NOT EXECUTED goto notfound; if (ISDOT (dp)) 40018730: c2 4a 20 0c ldsb [ %o0 + 0xc ], %g1 <== NOT EXECUTED 40018734: 80 a0 60 2e cmp %g1, 0x2e <== NOT EXECUTED 40018738: 12 80 00 0d bne 4001876c <== NOT EXECUTED 4001873c: a0 02 20 0c add %o0, 0xc, %l0 <== NOT EXECUTED 40018740: c2 4a 20 0d ldsb [ %o0 + 0xd ], %g1 <== NOT EXECUTED 40018744: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018748: 02 bf ff f5 be 4001871c <== NOT EXECUTED 4001874c: 05 00 3f ff sethi %hi(0xfffc00), %g2 <== NOT EXECUTED 40018750: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 40018754: 07 00 0b 80 sethi %hi(0x2e0000), %g3 <== NOT EXECUTED 40018758: 84 10 a3 00 or %g2, 0x300, %g2 <== NOT EXECUTED 4001875c: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 40018760: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40018764: 02 bf ff ee be 4001871c <== NOT EXECUTED 40018768: 01 00 00 00 nop <== NOT EXECUTED continue; bcopy (dp->d_name, bup, strlen (dp->d_name) + 1); 4001876c: 40 00 49 18 call 4002abcc <== NOT EXECUTED 40018770: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018774: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40018778: 94 02 20 01 add %o0, 1, %o2 <== NOT EXECUTED 4001877c: 40 00 3a fe call 40027374 <== NOT EXECUTED 40018780: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED /* Save the first error for later. */ if (stat (up, &s)) 40018784: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40018788: 7f ff b8 36 call 40006860 <== NOT EXECUTED 4001878c: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 40018790: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018794: 02 80 00 17 be 400187f0 <== NOT EXECUTED 40018798: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED { if (!save_errno) 4001879c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 400187a0: 02 80 00 1e be 40018818 <== NOT EXECUTED 400187a4: 01 00 00 00 nop <== NOT EXECUTED save_errno = errno; errno = 0; 400187a8: 40 00 34 21 call 4002582c <__errno> <== NOT EXECUTED 400187ac: 01 00 00 00 nop <== NOT EXECUTED 400187b0: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED } } else for (;;) { if (!(dp = _readdir (dir))) 400187b4: 40 00 04 33 call 40019880 <== NOT EXECUTED 400187b8: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED 400187bc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400187c0: 32 bf ff dd bne,a 40018734 <== NOT EXECUTED 400187c4: c2 4a 20 0c ldsb [ %o0 + 0xc ], %g1 <== NOT EXECUTED * If readdir set errno, use it, not any saved error; otherwise, * didn't find the current directory in its parent directory, set * errno to ENOENT. */ if (!errno) 400187c8: 40 00 34 19 call 4002582c <__errno> <== NOT EXECUTED 400187cc: 01 00 00 00 nop <== NOT EXECUTED 400187d0: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 400187d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400187d8: 02 80 00 57 be 40018934 <== NOT EXECUTED 400187dc: 01 00 00 00 nop <== NOT EXECUTED errno = save_errno ? save_errno : ENOENT; /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); 400187e0: 7f ff fe 91 call 40018224 <== NOT EXECUTED 400187e4: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED if (ptsize) 400187e8: 10 bf ff 91 b 4001862c <== NOT EXECUTED 400187ec: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED if (!save_errno) save_errno = errno; errno = 0; continue; } if (s.st_dev == dev && s.st_ino == ino) 400187f0: 80 a0 40 12 cmp %g1, %l2 <== NOT EXECUTED 400187f4: 12 bf ff ca bne 4001871c <== NOT EXECUTED 400187f8: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 400187fc: 80 a0 40 13 cmp %g1, %l3 <== NOT EXECUTED 40018800: 12 bf ff c7 bne 4001871c <== NOT EXECUTED 40018804: c2 07 bf b0 ld [ %fp + -80 ], %g1 <== NOT EXECUTED 40018808: 80 a0 40 1d cmp %g1, %i5 <== NOT EXECUTED 4001880c: 12 bf ff c4 bne 4001871c <== NOT EXECUTED 40018810: 01 00 00 00 nop <== NOT EXECUTED 40018814: 30 80 00 1b b,a 40018880 <== NOT EXECUTED /* Save the first error for later. */ if (stat (up, &s)) { if (!save_errno) save_errno = errno; 40018818: 40 00 34 05 call 4002582c <__errno> <== NOT EXECUTED 4001881c: 01 00 00 00 nop <== NOT EXECUTED 40018820: 10 bf ff e2 b 400187a8 <== NOT EXECUTED 40018824: ec 02 00 00 ld [ %o0 ], %l6 <== NOT EXECUTED * possible component name, plus a trailing NULL. */ if (bup + 3 + MAXNAMLEN + 1 >= eup) { if (!(up = (char *) realloc (up, upsize *= 2))) 40018828: b5 2e a0 01 sll %i2, 1, %i2 <== NOT EXECUTED 4001882c: 7f ff b3 9a call 40005694 <== NOT EXECUTED 40018830: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40018834: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 40018838: 02 bf ff 7c be 40018628 <== NOT EXECUTED 4001883c: 82 04 40 1a add %l1, %i2, %g1 <== NOT EXECUTED { goto err; } bup = up; eup = up + upsize; 40018840: a8 10 00 11 mov %l1, %l4 <== NOT EXECUTED 40018844: 10 bf ff a1 b 400186c8 <== NOT EXECUTED 40018848: c2 27 bf a4 st %g1, [ %fp + -92 ] <== NOT EXECUTED * the inode number in the directory is for the entry in the * parent directory, not the inode number of the mounted file. */ save_errno = 0; if (s.st_dev == dev) 4001884c: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 40018850: 80 a0 40 13 cmp %g1, %l3 <== NOT EXECUTED 40018854: 12 bf ff b2 bne 4001871c <== NOT EXECUTED 40018858: ac 10 20 00 clr %l6 <== NOT EXECUTED { for (;;) { if (!(dp = _readdir (dir))) 4001885c: 40 00 04 09 call 40019880 <== NOT EXECUTED 40018860: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED 40018864: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018868: 02 bf ff d8 be 400187c8 <== NOT EXECUTED 4001886c: ac 10 20 00 clr %l6 <== NOT EXECUTED goto notfound; if (dp->d_ino == ino) 40018870: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40018874: 80 a0 40 1d cmp %g1, %i5 <== NOT EXECUTED 40018878: 12 bf ff f9 bne 4001885c <== NOT EXECUTED 4001887c: a0 02 20 0c add %o0, 0xc, %l0 <== NOT EXECUTED /* * Check for length of the current name, preceding slash, * leading slash. */ if (bpt - pt <= strlen (dp->d_name) + (first ? 1 : 2)) 40018880: 40 00 48 d3 call 4002abcc <== NOT EXECUTED 40018884: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018888: c2 07 bf 94 ld [ %fp + -108 ], %g1 <== NOT EXECUTED 4001888c: a4 27 00 18 sub %i4, %i0, %l2 <== NOT EXECUTED 40018890: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40018894: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED 40018898: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001889c: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 400188a0: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 400188a4: 18 80 00 13 bgu 400188f0 <== NOT EXECUTED 400188a8: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED { size_t len, off; if (!ptsize) 400188ac: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 400188b0: 02 80 00 4a be 400189d8 <== NOT EXECUTED 400188b4: 01 00 00 00 nop <== NOT EXECUTED errno = ERANGE; goto err; } off = bpt - pt; len = ept - bpt; if (!(pt = (char *) realloc (pt, ptsize *= 2))) 400188b8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400188bc: b7 2e e0 01 sll %i3, 1, %i3 <== NOT EXECUTED 400188c0: 7f ff b3 75 call 40005694 <== NOT EXECUTED 400188c4: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 400188c8: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 400188cc: 02 bf ff c5 be 400187e0 <== NOT EXECUTED 400188d0: 82 26 40 1c sub %i1, %i4, %g1 <== NOT EXECUTED { goto err; } bpt = pt + off; ept = pt + ptsize; (void) bcopy (bpt, ept - len, len); 400188d4: 92 06 00 12 add %i0, %l2, %o1 <== NOT EXECUTED if (!(pt = (char *) realloc (pt, ptsize *= 2))) { goto err; } bpt = pt + off; ept = pt + ptsize; 400188d8: b2 06 00 1b add %i0, %i3, %i1 <== NOT EXECUTED (void) bcopy (bpt, ept - len, len); 400188dc: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 400188e0: b8 26 40 01 sub %i1, %g1, %i4 <== NOT EXECUTED 400188e4: 40 00 3a a4 call 40027374 <== NOT EXECUTED 400188e8: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED bpt = ept - len; } if (!first) 400188ec: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED 400188f0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400188f4: 12 80 00 04 bne 40018904 <== NOT EXECUTED 400188f8: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED *--bpt = '/'; 400188fc: b8 07 3f ff add %i4, -1, %i4 <== NOT EXECUTED 40018900: c2 2f 00 00 stb %g1, [ %i4 ] <== NOT EXECUTED bpt -= strlen (dp->d_name); 40018904: 40 00 48 b2 call 4002abcc <== NOT EXECUTED 40018908: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); 4001890c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40018910: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED (void) bcopy (bpt, ept - len, len); bpt = ept - len; } if (!first) *--bpt = '/'; bpt -= strlen (dp->d_name); 40018914: b8 27 00 08 sub %i4, %o0, %i4 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); (void) _closedir (dir); dir = 0; /* Truncate any file name. */ *bup = '\0'; 40018918: c0 27 bf 94 clr [ %fp + -108 ] <== NOT EXECUTED bpt = ept - len; } if (!first) *--bpt = '/'; bpt -= strlen (dp->d_name); bcopy (dp->d_name, bpt, strlen (dp->d_name)); 4001891c: 40 00 3a 96 call 40027374 <== NOT EXECUTED 40018920: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED (void) _closedir (dir); 40018924: 7f ff fe 40 call 40018224 <== NOT EXECUTED 40018928: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED dir = 0; /* Truncate any file name. */ *bup = '\0'; 4001892c: 10 bf ff 58 b 4001868c <== NOT EXECUTED 40018930: c0 2d 00 00 clrb [ %l4 ] <== NOT EXECUTED * didn't find the current directory in its parent directory, set * errno to ENOENT. */ if (!errno) errno = save_errno ? save_errno : ENOENT; 40018934: 40 00 33 be call 4002582c <__errno> <== NOT EXECUTED 40018938: 01 00 00 00 nop <== NOT EXECUTED 4001893c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 40018940: 22 80 00 16 be,a 40018998 <== NOT EXECUTED 40018944: ac 10 20 02 mov 2, %l6 <== NOT EXECUTED 40018948: 10 bf ff a6 b 400187e0 <== NOT EXECUTED 4001894c: ec 22 00 00 st %l6, [ %o0 ] <== NOT EXECUTED /* Save current node values. */ ino = s.st_ino; dev = s.st_dev; /* Check for reaching root. */ if (root_dev == dev && root_ino == ino) 40018950: c2 07 bf 9c ld [ %fp + -100 ], %g1 <== NOT EXECUTED 40018954: 80 a0 40 13 cmp %g1, %l3 <== NOT EXECUTED 40018958: 12 bf ff 58 bne 400186b8 <== NOT EXECUTED 4001895c: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 40018960: c4 07 bf a0 ld [ %fp + -96 ], %g2 <== NOT EXECUTED 40018964: 80 a0 80 1d cmp %g2, %i5 <== NOT EXECUTED 40018968: 12 bf ff 55 bne 400186bc <== NOT EXECUTED 4001896c: 82 05 24 04 add %l4, 0x404, %g1 <== NOT EXECUTED { *--bpt = '/'; 40018970: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED 40018974: 92 07 3f ff add %i4, -1, %o1 <== NOT EXECUTED 40018978: c2 2f 3f ff stb %g1, [ %i4 + -1 ] <== NOT EXECUTED /* * It's unclear that it's a requirement to copy the * path to the beginning of the buffer, but it's always * been that way and stuff would probably break. */ (void) bcopy (bpt, pt, ept - bpt); 4001897c: 94 26 40 09 sub %i1, %o1, %o2 <== NOT EXECUTED 40018980: 40 00 3a 7d call 40027374 <== NOT EXECUTED 40018984: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 40018988: 7f ff b2 c9 call 400054ac <== NOT EXECUTED 4001898c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40018990: 81 c7 e0 08 ret <== NOT EXECUTED 40018994: 81 e8 00 00 restore <== NOT EXECUTED * didn't find the current directory in its parent directory, set * errno to ENOENT. */ if (!errno) errno = save_errno ? save_errno : ENOENT; 40018998: 10 bf ff 92 b 400187e0 <== NOT EXECUTED 4001899c: ec 22 00 00 st %l6, [ %o0 ] <== NOT EXECUTED if (pt) { ptsize = 0; if (!size) { errno = EINVAL; 400189a0: 40 00 33 a3 call 4002582c <__errno> <== NOT EXECUTED 400189a4: b0 10 20 00 clr %i0 <== NOT EXECUTED 400189a8: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 400189ac: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400189b0: 81 c7 e0 08 ret <== NOT EXECUTED 400189b4: 81 e8 00 00 restore <== NOT EXECUTED } ept = pt + size; } else { if (!(pt = (char *) malloc (ptsize = 1024 - 4))) 400189b8: 7f ff b2 e6 call 40005550 <== NOT EXECUTED 400189bc: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 400189c0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400189c4: 02 bf ff 1e be 4001863c <== NOT EXECUTED 400189c8: b6 10 23 fc mov 0x3fc, %i3 <== NOT EXECUTED 400189cc: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED { return (char *) NULL; } ept = pt + ptsize; 400189d0: 10 bf ff 05 b 400185e4 <== NOT EXECUTED 400189d4: b2 02 23 fc add %o0, 0x3fc, %i1 <== NOT EXECUTED { size_t len, off; if (!ptsize) { errno = ERANGE; 400189d8: 40 00 33 95 call 4002582c <__errno> <== NOT EXECUTED 400189dc: 01 00 00 00 nop <== NOT EXECUTED 400189e0: 82 10 20 22 mov 0x22, %g1 ! 22 <== NOT EXECUTED 400189e4: 10 bf ff 7f b 400187e0 <== NOT EXECUTED 400189e8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400236e8 : int getdents( int dd_fd, char *dd_buf, int dd_len ) { 400236e8: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the file control block structure associated with the file descriptor */ iop = rtems_libio_iop( dd_fd ); 400236ec: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 400236f0: c4 00 63 dc ld [ %g1 + 0x3dc ], %g2 ! 4003a7dc <== NOT EXECUTED int getdents( int dd_fd, char *dd_buf, int dd_len ) { 400236f4: 88 10 00 18 mov %i0, %g4 <== NOT EXECUTED /* * Get the file control block structure associated with the file descriptor */ iop = rtems_libio_iop( dd_fd ); 400236f8: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 400236fc: 1a 80 00 0a bcc 40023724 <== NOT EXECUTED 40023700: b0 10 20 00 clr %i0 <== NOT EXECUTED 40023704: 03 10 00 f3 sethi %hi(0x4003cc00), %g1 <== NOT EXECUTED 40023708: c6 00 62 c4 ld [ %g1 + 0x2c4 ], %g3 ! 4003cec4 <== NOT EXECUTED 4002370c: 85 29 20 02 sll %g4, 2, %g2 <== NOT EXECUTED 40023710: 83 29 20 04 sll %g4, 4, %g1 <== NOT EXECUTED 40023714: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40023718: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 4002371c: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40023720: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED /* * Make sure we are working on a directory */ loc = iop->pathinfo; 40023724: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED 40023728: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED 4002372c: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 <== NOT EXECUTED 40023730: c4 27 bf ec st %g2, [ %fp + -20 ] <== NOT EXECUTED 40023734: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 <== NOT EXECUTED 40023738: c2 27 bf f0 st %g1, [ %fp + -16 ] <== NOT EXECUTED 4002373c: c4 06 20 1c ld [ %i0 + 0x1c ], %g2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 40023740: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 40023744: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023748: 02 80 00 17 be 400237a4 <== NOT EXECUTED 4002374c: c4 27 bf f4 st %g2, [ %fp + -12 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) 40023750: 9f c0 40 00 call %g1 <== NOT EXECUTED 40023754: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 40023758: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4002375c: 12 80 00 0c bne 4002378c <== NOT EXECUTED 40023760: 01 00 00 00 nop <== NOT EXECUTED /* * Return the number of bytes that were actually transfered as a result * of the read attempt. */ if ( !iop->handlers->read_h ) 40023764: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40023768: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 4002376c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023770: 02 80 00 0d be 400237a4 <== NOT EXECUTED 40023774: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); return (*iop->handlers->read_h)( iop, dd_buf, dd_len ); 40023778: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4002377c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40023780: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED } 40023784: 81 c7 e0 08 ret <== NOT EXECUTED 40023788: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED loc = iop->pathinfo; if ( !loc.ops->node_type_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 4002378c: 40 00 08 28 call 4002582c <__errno> <== NOT EXECUTED 40023790: 01 00 00 00 nop <== NOT EXECUTED 40023794: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 40023798: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4002379c: 10 bf ff fa b 40023784 <== NOT EXECUTED 400237a0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED * Return the number of bytes that were actually transfered as a result * of the read attempt. */ if ( !iop->handlers->read_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 400237a4: 40 00 08 22 call 4002582c <__errno> <== NOT EXECUTED 400237a8: 01 00 00 00 nop <== NOT EXECUTED 400237ac: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 400237b0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400237b4: 10 bf ff f4 b 40023784 <== NOT EXECUTED 400237b8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 400189ec : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getegid( void ) { 400189ec: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 400189f0: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED return _POSIX_types_Egid; } 400189f4: 81 c3 e0 08 retl <== NOT EXECUTED 400189f8: d0 10 a0 2e lduh [ %g2 + 0x2e ], %o0 <== NOT EXECUTED 400189fc : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t geteuid( void ) { 400189fc: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 40018a00: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED return _POSIX_types_Euid; } 40018a04: 81 c3 e0 08 retl <== NOT EXECUTED 40018a08: d0 10 a0 2c lduh [ %g2 + 0x2c ], %o0 <== NOT EXECUTED 40018a0c : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getgid( void ) { 40018a0c: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 40018a10: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED return _POSIX_types_Gid; } 40018a14: 81 c3 e0 08 retl <== NOT EXECUTED 40018a18: d0 10 a0 2a lduh [ %g2 + 0x2a ], %o0 <== NOT EXECUTED 400190e4 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 400190e4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 400190e8: 7f ff ff b3 call 40018fb4 <== NOT EXECUTED 400190ec: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/group", "r")) == NULL) { 400190f0: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 400190f4: 13 10 00 e8 sethi %hi(0x4003a000), %o1 <== NOT EXECUTED 400190f8: 90 12 20 a0 or %o0, 0xa0, %o0 <== NOT EXECUTED 400190fc: 40 00 34 11 call 40026140 <== NOT EXECUTED 40019100: 92 12 63 08 or %o1, 0x308, %o1 <== NOT EXECUTED 40019104: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 40019108: 12 80 00 0b bne 40019134 <== NOT EXECUTED 4001910c: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40019110: 30 80 00 27 b,a 400191ac <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { match = (strcmp(grp->gr_name, name) == 0); 40019114: 40 00 40 8d call 40029348 <== NOT EXECUTED 40019118: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4001911c: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40019120: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } else { match = (grp->gr_gid == gid); } if (match) { 40019124: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019128: 12 80 00 14 bne 40019178 <== NOT EXECUTED 4001912c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ((fp = fopen("/etc/group", "r")) == NULL) { errno = EINVAL; return -1; } for(;;) { if (!scangr(fp, grp, buffer, bufsize)) { 40019130: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40019134: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40019138: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 4001913c: 7f ff fe d2 call 40018c84 <== NOT EXECUTED 40019140: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019144: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019148: 02 80 00 11 be 4001918c <== NOT EXECUTED 4001914c: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { 40019150: 32 bf ff f1 bne,a 40019114 <== NOT EXECUTED 40019154: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED match = (strcmp(grp->gr_name, name) == 0); } else { match = (grp->gr_gid == gid); 40019158: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED 4001915c: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 40019160: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40019164: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 40019168: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001916c: 02 bf ff f2 be 40019134 <== NOT EXECUTED 40019170: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 40019174: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019178: 40 00 31 f4 call 40025948 <== NOT EXECUTED 4001917c: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = grp; 40019180: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 40019184: 81 c7 e0 08 ret <== NOT EXECUTED 40019188: 81 e8 00 00 restore <== NOT EXECUTED errno = EINVAL; return -1; } for(;;) { if (!scangr(fp, grp, buffer, bufsize)) { errno = EINVAL; 4001918c: 40 00 31 a8 call 4002582c <__errno> <== NOT EXECUTED 40019190: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019194: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40019198: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 4001919c: 40 00 31 eb call 40025948 <== NOT EXECUTED 400191a0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400191a4: 81 c7 e0 08 ret <== NOT EXECUTED 400191a8: 81 e8 00 00 restore <== NOT EXECUTED int match; init_etc_passwd_group(); if ((fp = fopen("/etc/group", "r")) == NULL) { errno = EINVAL; 400191ac: 40 00 31 a0 call 4002582c <__errno> <== NOT EXECUTED 400191b0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400191b4: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 400191b8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400191bc: 81 c7 e0 08 ret <== NOT EXECUTED 400191c0: 81 e8 00 00 restore <== NOT EXECUTED 40018e00 : return NULL; return p; } struct group *getgrent() { 40018e00: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (group_fp == NULL) 40018e04: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 40018e08: d0 00 63 04 ld [ %g1 + 0x304 ], %o0 ! 4003c704 <== NOT EXECUTED 40018e0c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018e10: 02 80 00 0d be 40018e44 <== NOT EXECUTED 40018e14: 21 10 00 f1 sethi %hi(0x4003c400), %l0 <== NOT EXECUTED return NULL; if (!scangr(group_fp, &grent, grbuf, sizeof grbuf)) 40018e18: 15 10 00 f1 sethi %hi(0x4003c400), %o2 <== NOT EXECUTED 40018e1c: 92 14 23 d0 or %l0, 0x3d0, %o1 <== NOT EXECUTED 40018e20: 94 12 a3 08 or %o2, 0x308, %o2 <== NOT EXECUTED 40018e24: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40018e28: 7f ff ff 97 call 40018c84 <== NOT EXECUTED 40018e2c: b0 14 23 d0 or %l0, 0x3d0, %i0 <== NOT EXECUTED 40018e30: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018e34: 02 80 00 04 be 40018e44 <== NOT EXECUTED 40018e38: 01 00 00 00 nop <== NOT EXECUTED return NULL; return &grent; } 40018e3c: 81 c7 e0 08 ret <== NOT EXECUTED 40018e40: 81 e8 00 00 restore <== NOT EXECUTED 40018e44: 81 c7 e0 08 ret <== NOT EXECUTED 40018e48: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 400191fc : } struct group *getgrgid( gid_t gid ) { 400191fc: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrgid_r(gid, &grent, grbuf, sizeof grbuf, &p)) 40019200: 13 10 00 f1 sethi %hi(0x4003c400), %o1 <== NOT EXECUTED 40019204: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 40019208: 92 12 63 d0 or %o1, 0x3d0, %o1 <== NOT EXECUTED 4001920c: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 40019210: 15 10 00 f1 sethi %hi(0x4003c400), %o2 <== NOT EXECUTED 40019214: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40019218: 94 12 a3 08 or %o2, 0x308, %o2 <== NOT EXECUTED 4001921c: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 40019220: 7f ff ff e9 call 400191c4 <== NOT EXECUTED 40019224: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019228: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001922c: 22 80 00 02 be,a 40019234 <== NOT EXECUTED 40019230: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 40019234: 81 c7 e0 08 ret <== NOT EXECUTED 40019238: 81 e8 00 00 restore <== NOT EXECUTED 400191c4 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 400191c4: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 400191c8: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 400191cc: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 400191d0: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 400191d4: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 400191d8: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 400191dc: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 400191e0: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 400191e4: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 400191e8: 90 10 20 00 clr %o0 <== NOT EXECUTED 400191ec: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400191f0: 7f ff ff bd call 400190e4 <== NOT EXECUTED 400191f4: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400191f8: 01 00 00 00 nop 40019268 : } struct group *getgrnam( const char *name ) { 40019268: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrnam_r(name, &grent, grbuf, sizeof grbuf, &p)) 4001926c: 13 10 00 f1 sethi %hi(0x4003c400), %o1 <== NOT EXECUTED 40019270: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019274: 92 12 63 d0 or %o1, 0x3d0, %o1 <== NOT EXECUTED 40019278: 15 10 00 f1 sethi %hi(0x4003c400), %o2 <== NOT EXECUTED 4001927c: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40019280: 94 12 a3 08 or %o2, 0x308, %o2 <== NOT EXECUTED 40019284: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 40019288: 7f ff ff ed call 4001923c <== NOT EXECUTED 4001928c: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019290: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019294: 22 80 00 02 be,a 4001929c <== NOT EXECUTED 40019298: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 4001929c: 81 c7 e0 08 ret <== NOT EXECUTED 400192a0: 81 e8 00 00 restore <== NOT EXECUTED 4001923c : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 4001923c: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 40019240: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 40019244: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(name, 0, grp, buffer, bufsize, result); 40019248: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 4001924c: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 40019250: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 40019254: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019258: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001925c: 7f ff ff a2 call 400190e4 <== NOT EXECUTED 40019260: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40019264: 01 00 00 00 nop 40024eb0 : */ pid_t getpid( void ) { return _Objects_Local_node; } 40024eb0: 81 c3 e0 08 retl <== NOT EXECUTED 40024eb4: 90 10 20 01 mov 1, %o0 ! 1 <== NOT EXECUTED 400192e8 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 400192e8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 400192ec: 7f ff ff 32 call 40018fb4 <== NOT EXECUTED 400192f0: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/passwd", "r")) == NULL) { 400192f4: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 400192f8: 13 10 00 e8 sethi %hi(0x4003a000), %o1 <== NOT EXECUTED 400192fc: 90 12 20 28 or %o0, 0x28, %o0 <== NOT EXECUTED 40019300: 40 00 33 90 call 40026140 <== NOT EXECUTED 40019304: 92 12 63 08 or %o1, 0x308, %o1 <== NOT EXECUTED 40019308: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 4001930c: 12 80 00 0b bne 40019338 <== NOT EXECUTED 40019310: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40019314: 30 80 00 27 b,a 400193b0 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { match = (strcmp(pwd->pw_name, name) == 0); 40019318: 40 00 40 0c call 40029348 <== NOT EXECUTED 4001931c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40019320: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40019324: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } else { match = (pwd->pw_uid == uid); } if (match) { 40019328: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001932c: 12 80 00 14 bne 4001937c <== NOT EXECUTED 40019330: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ((fp = fopen("/etc/passwd", "r")) == NULL) { errno = EINVAL; return -1; } for(;;) { if (!scanpw(fp, pwd, buffer, bufsize)) { 40019334: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40019338: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001933c: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 40019340: 7f ff fe c3 call 40018e4c <== NOT EXECUTED 40019344: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019348: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001934c: 02 80 00 11 be 40019390 <== NOT EXECUTED 40019350: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { 40019354: 32 bf ff f1 bne,a 40019318 <== NOT EXECUTED 40019358: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED match = (strcmp(pwd->pw_name, name) == 0); } else { match = (pwd->pw_uid == uid); 4001935c: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED 40019360: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 40019364: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40019368: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 4001936c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019370: 02 bf ff f2 be 40019338 <== NOT EXECUTED 40019374: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 40019378: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001937c: 40 00 31 73 call 40025948 <== NOT EXECUTED 40019380: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = pwd; 40019384: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 40019388: 81 c7 e0 08 ret <== NOT EXECUTED 4001938c: 81 e8 00 00 restore <== NOT EXECUTED errno = EINVAL; return -1; } for(;;) { if (!scanpw(fp, pwd, buffer, bufsize)) { errno = EINVAL; 40019390: 40 00 31 27 call 4002582c <__errno> <== NOT EXECUTED 40019394: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019398: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001939c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 400193a0: 40 00 31 6a call 40025948 <== NOT EXECUTED 400193a4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400193a8: 81 c7 e0 08 ret <== NOT EXECUTED 400193ac: 81 e8 00 00 restore <== NOT EXECUTED int match; init_etc_passwd_group(); if ((fp = fopen("/etc/passwd", "r")) == NULL) { errno = EINVAL; 400193b0: 40 00 31 1f call 4002582c <__errno> <== NOT EXECUTED 400193b4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400193b8: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 400193bc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400193c0: 81 c7 e0 08 ret <== NOT EXECUTED 400193c4: 81 e8 00 00 restore <== NOT EXECUTED 40018f68 : return NULL; return p; } struct passwd *getpwent() { 40018f68: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (passwd_fp == NULL) 40018f6c: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 40018f70: d0 00 62 1c ld [ %g1 + 0x21c ], %o0 ! 4003c61c <== NOT EXECUTED 40018f74: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018f78: 02 80 00 0d be 40018fac <== NOT EXECUTED 40018f7c: 21 10 00 f1 sethi %hi(0x4003c400), %l0 <== NOT EXECUTED return NULL; if (!scanpw(passwd_fp, &pwent, pwbuf, sizeof pwbuf)) 40018f80: 15 10 00 f1 sethi %hi(0x4003c400), %o2 <== NOT EXECUTED 40018f84: 92 14 22 e8 or %l0, 0x2e8, %o1 <== NOT EXECUTED 40018f88: 94 12 a2 20 or %o2, 0x220, %o2 <== NOT EXECUTED 40018f8c: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40018f90: 7f ff ff af call 40018e4c <== NOT EXECUTED 40018f94: b0 14 22 e8 or %l0, 0x2e8, %i0 <== NOT EXECUTED 40018f98: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018f9c: 02 80 00 04 be 40018fac <== NOT EXECUTED 40018fa0: 01 00 00 00 nop <== NOT EXECUTED return NULL; return &pwent; } 40018fa4: 81 c7 e0 08 ret <== NOT EXECUTED 40018fa8: 81 e8 00 00 restore <== NOT EXECUTED 40018fac: 81 c7 e0 08 ret <== NOT EXECUTED 40018fb0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001946c : } struct passwd *getpwnam( const char *name ) { 4001946c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwnam_r(name, &pwent, pwbuf, sizeof pwbuf, &p)) 40019470: 13 10 00 f1 sethi %hi(0x4003c400), %o1 <== NOT EXECUTED 40019474: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019478: 92 12 62 e8 or %o1, 0x2e8, %o1 <== NOT EXECUTED 4001947c: 15 10 00 f1 sethi %hi(0x4003c400), %o2 <== NOT EXECUTED 40019480: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40019484: 94 12 a2 20 or %o2, 0x220, %o2 <== NOT EXECUTED 40019488: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 4001948c: 7f ff ff ed call 40019440 <== NOT EXECUTED 40019490: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019494: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019498: 22 80 00 02 be,a 400194a0 <== NOT EXECUTED 4001949c: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 400194a0: 81 c7 e0 08 ret <== NOT EXECUTED 400194a4: 81 e8 00 00 restore <== NOT EXECUTED 40019440 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 40019440: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 40019444: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 40019448: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(name, 0, pwd, buffer, bufsize, result); 4001944c: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 40019450: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 40019454: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 40019458: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001945c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40019460: 7f ff ff a2 call 400192e8 <== NOT EXECUTED 40019464: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40019468: 01 00 00 00 nop 40019400 : } struct passwd *getpwuid( uid_t uid ) { 40019400: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwuid_r(uid, &pwent, pwbuf, sizeof pwbuf, &p)) 40019404: 13 10 00 f1 sethi %hi(0x4003c400), %o1 <== NOT EXECUTED 40019408: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 4001940c: 92 12 62 e8 or %o1, 0x2e8, %o1 <== NOT EXECUTED 40019410: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 40019414: 15 10 00 f1 sethi %hi(0x4003c400), %o2 <== NOT EXECUTED 40019418: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 4001941c: 94 12 a2 20 or %o2, 0x220, %o2 <== NOT EXECUTED 40019420: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 40019424: 7f ff ff e9 call 400193c8 <== NOT EXECUTED 40019428: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001942c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019430: 22 80 00 02 be,a 40019438 <== NOT EXECUTED 40019434: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 40019438: 81 c7 e0 08 ret <== NOT EXECUTED 4001943c: 81 e8 00 00 restore <== NOT EXECUTED 400193c8 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 400193c8: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 400193cc: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 400193d0: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 400193d4: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 400193d8: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 400193dc: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 400193e0: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 400193e4: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 400193e8: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 400193ec: 90 10 20 00 clr %o0 <== NOT EXECUTED 400193f0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400193f4: 7f ff ff bd call 400192e8 <== NOT EXECUTED 400193f8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400193fc: 01 00 00 00 nop 4000c014 : int gettimeofday( struct timeval *tp, void * __tz ) { 4000c014: 9d e3 bf 90 save %sp, -112, %sp /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) { 4000c018: 80 a6 20 00 cmp %i0, 0 4000c01c: 02 80 00 11 be 4000c060 4000c020: 01 00 00 00 nop ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 4000c024: 7f ff d7 6d call 40001dd8 4000c028: 01 00 00 00 nop 4000c02c: a0 10 00 08 mov %o0, %l0 _TOD_Get( &now ); 4000c030: 7f ff ec 2a call 400070d8 <_TOD_Get> 4000c034: 90 07 bf f0 add %fp, -16, %o0 _ISR_Enable(level); 4000c038: 7f ff d7 6c call 40001de8 4000c03c: 90 10 00 10 mov %l0, %o0 time->tv_sec = now.tv_sec; time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 4000c040: d0 07 bf f4 ld [ %fp + -12 ], %o0 _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 4000c044: c2 07 bf f0 ld [ %fp + -16 ], %g1 time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 4000c048: 92 10 23 e8 mov 0x3e8, %o1 4000c04c: 40 00 24 64 call 400151dc <.udiv> 4000c050: c2 26 00 00 st %g1, [ %i0 ] 4000c054: d0 26 20 04 st %o0, [ %i0 + 4 ] * with Eric Norum, this is how GNU/Linux, Solaris, and MacOS X * do it. This puts us in good company. */ return 0; } 4000c058: 81 c7 e0 08 ret 4000c05c: 91 e8 20 00 restore %g0, 0, %o0 void * __tz ) { /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) { errno = EFAULT; 4000c060: 40 00 08 36 call 4000e138 <__errno> <== NOT EXECUTED 4000c064: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c068: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 4000c06c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c070: 81 c7 e0 08 ret <== NOT EXECUTED 4000c074: 81 e8 00 00 restore <== NOT EXECUTED 400194a8 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t getuid( void ) { 400194a8: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 400194ac: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED return _POSIX_types_Uid; } 400194b0: 81 c3 e0 08 retl <== NOT EXECUTED 400194b4: d0 10 a0 28 lduh [ %g2 + 0x28 ], %o0 <== NOT EXECUTED 40022ef4 : * and associated memory. At present the imfs_dir_close simply * returns a successful completion status. */ return 0; } 40022ef4: 81 c3 e0 08 retl <== NOT EXECUTED 40022ef8: 90 10 20 00 clr %o0 <== NOT EXECUTED 40022efc : Chain_Node *the_node; Chain_Control *the_chain; IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) loc->node_access; 40022efc: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED buf->st_dev = 0ll; 40022f00: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; 40022f04: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 40022f08: c6 10 60 2e lduh [ %g1 + 0x2e ], %g3 <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) loc->node_access; buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; 40022f0c: c4 22 60 08 st %g2, [ %o1 + 8 ] <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 40022f10: c6 32 60 0c sth %g3, [ %o1 + 0xc ] <== NOT EXECUTED buf->st_nlink = the_jnode->st_nlink; buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_rdev = 0ll; buf->st_blksize = 0; 40022f14: c0 22 60 3c clr [ %o1 + 0x3c ] <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) loc->node_access; buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; 40022f18: c4 10 60 30 lduh [ %g1 + 0x30 ], %g2 <== NOT EXECUTED buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_rdev = 0ll; buf->st_blksize = 0; buf->st_blocks = 0; 40022f1c: c0 22 60 40 clr [ %o1 + 0x40 ] <== NOT EXECUTED buf->st_atime = the_jnode->stat_atime; 40022f20: c6 00 60 3c ld [ %g1 + 0x3c ], %g3 <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) loc->node_access; buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; 40022f24: c4 32 60 0e sth %g2, [ %o1 + 0xe ] <== NOT EXECUTED buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_rdev = 0ll; buf->st_blksize = 0; buf->st_blocks = 0; buf->st_atime = the_jnode->stat_atime; 40022f28: c6 22 60 24 st %g3, [ %o1 + 0x24 ] <== NOT EXECUTED buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_uid = the_jnode->st_uid; 40022f2c: c4 10 60 38 lduh [ %g1 + 0x38 ], %g2 <== NOT EXECUTED buf->st_gid = the_jnode->st_gid; buf->st_rdev = 0ll; buf->st_blksize = 0; buf->st_blocks = 0; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; 40022f30: c6 00 60 40 ld [ %g1 + 0x40 ], %g3 <== NOT EXECUTED buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_uid = the_jnode->st_uid; 40022f34: c4 32 60 10 sth %g2, [ %o1 + 0x10 ] <== NOT EXECUTED buf->st_gid = the_jnode->st_gid; buf->st_rdev = 0ll; buf->st_blksize = 0; buf->st_blocks = 0; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; 40022f38: c6 22 60 2c st %g3, [ %o1 + 0x2c ] <== NOT EXECUTED buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; 40022f3c: c4 10 60 3a lduh [ %g1 + 0x3a ], %g2 <== NOT EXECUTED buf->st_rdev = 0ll; buf->st_blksize = 0; buf->st_blocks = 0; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; buf->st_ctime = the_jnode->stat_ctime; 40022f40: c6 00 60 44 ld [ %g1 + 0x44 ], %g3 <== NOT EXECUTED buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; 40022f44: c4 32 60 12 sth %g2, [ %o1 + 0x12 ] <== NOT EXECUTED buf->st_rdev = 0ll; buf->st_blksize = 0; buf->st_blocks = 0; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; buf->st_ctime = the_jnode->stat_ctime; 40022f48: c6 22 60 34 st %g3, [ %o1 + 0x34 ] <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) loc->node_access; buf->st_dev = 0ll; 40022f4c: c0 22 60 04 clr [ %o1 + 4 ] <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; buf->st_uid = the_jnode->st_uid; buf->st_gid = the_jnode->st_gid; buf->st_rdev = 0ll; 40022f50: c0 22 60 18 clr [ %o1 + 0x18 ] <== NOT EXECUTED 40022f54: c0 22 60 1c clr [ %o1 + 0x1c ] <== NOT EXECUTED buf->st_blocks = 0; buf->st_atime = the_jnode->stat_atime; buf->st_mtime = the_jnode->stat_mtime; buf->st_ctime = the_jnode->stat_ctime; buf->st_size = 0; 40022f58: c0 22 60 20 clr [ %o1 + 0x20 ] <== NOT EXECUTED the_chain = &the_jnode->info.directory.Entries; /* Run through the chain and count the number of directory entries */ /* that are subordinate to this directory node */ for ( the_node = the_chain->first ; 40022f5c: c4 00 60 4c ld [ %g1 + 0x4c ], %g2 <== NOT EXECUTED 40022f60: 82 00 60 50 add %g1, 0x50, %g1 <== NOT EXECUTED !_Chain_Is_tail( the_chain, the_node ) ; 40022f64: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40022f68: 02 80 00 07 be 40022f84 <== NOT EXECUTED 40022f6c: 86 10 20 00 clr %g3 <== NOT EXECUTED the_node = the_node->next ) { 40022f70: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED the_chain = &the_jnode->info.directory.Entries; /* Run through the chain and count the number of directory entries */ /* that are subordinate to this directory node */ for ( the_node = the_chain->first ; !_Chain_Is_tail( the_chain, the_node ) ; 40022f74: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40022f78: 12 bf ff fe bne 40022f70 <== NOT EXECUTED 40022f7c: 86 00 e1 0c add %g3, 0x10c, %g3 <== NOT EXECUTED 40022f80: c6 22 60 20 st %g3, [ %o1 + 0x20 ] <== NOT EXECUTED buf->st_size = buf->st_size + sizeof( struct dirent ); } return 0; } 40022f84: 81 c3 e0 08 retl <== NOT EXECUTED 40022f88: 90 10 20 00 clr %o0 <== NOT EXECUTED 40022f8c : off_t imfs_dir_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 40022f8c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch( whence ) { 40022f90: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED 40022f94: 28 80 00 09 bleu,a 40022fb8 <== NOT EXECUTED 40022f98: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED break; case SEEK_END: /* Movement past the end of the directory via lseek */ /* is not a permitted operation */ default: rtems_set_errno_and_return_minus_one( EINVAL ); 40022f9c: 40 00 0a 24 call 4002582c <__errno> <== NOT EXECUTED 40022fa0: 01 00 00 00 nop <== NOT EXECUTED 40022fa4: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40022fa8: 86 10 3f ff mov -1, %g3 <== NOT EXECUTED 40022fac: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED break; } return 0; } 40022fb0: 81 c7 e0 08 ret <== NOT EXECUTED 40022fb4: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED ) { switch( whence ) { case SEEK_SET: /* absolute move from the start of the file */ case SEEK_CUR: /* relative move */ iop->offset = (iop->offset/sizeof(struct dirent)) * 40022fb8: 40 00 46 9b call 40034a24 <.udiv> <== NOT EXECUTED 40022fbc: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 40022fc0: 86 10 20 00 clr %g3 <== NOT EXECUTED 40022fc4: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 40022fc8: 85 2a 20 06 sll %o0, 6, %g2 <== NOT EXECUTED 40022fcc: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40022fd0: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 40022fd4: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40022fd8: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); break; } return 0; } 40022fdc: 81 c7 e0 08 ret <== NOT EXECUTED 40022fe0: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED 40022ec8 : IMFS_jnode_t *the_jnode; /* Is the node a directory ? */ the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) 40022ec8: c4 02 20 2c ld [ %o0 + 0x2c ], %g2 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 40022ecc: 86 10 00 08 mov %o0, %g3 <== NOT EXECUTED IMFS_jnode_t *the_jnode; /* Is the node a directory ? */ the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) 40022ed0: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 40022ed4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40022ed8: 02 80 00 04 be 40022ee8 <== NOT EXECUTED 40022edc: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED return -1; /* It wasn't a directory --> return error */ iop->offset = 0; return 0; } 40022ee0: 81 c3 e0 08 retl <== NOT EXECUTED 40022ee4: 01 00 00 00 nop <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) return -1; /* It wasn't a directory --> return error */ iop->offset = 0; 40022ee8: c0 20 e0 08 clr [ %g3 + 8 ] <== NOT EXECUTED return 0; } 40022eec: 81 c3 e0 08 retl <== NOT EXECUTED 40022ef0: 90 10 20 00 clr %o0 <== NOT EXECUTED 40022fe4 : ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 40022fe4: 9d e3 be 88 save %sp, -376, %sp <== NOT EXECUTED int current_entry; int first_entry; int last_entry; struct dirent tmp_dirent; the_jnode = (IMFS_jnode_t *)iop->file_info; 40022fe8: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 <== NOT EXECUTED ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 40022fec: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 40022ff0: e2 00 60 4c ld [ %g1 + 0x4c ], %l1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40022ff4: a4 00 60 50 add %g1, 0x50, %l2 <== NOT EXECUTED struct dirent tmp_dirent; the_jnode = (IMFS_jnode_t *)iop->file_info; the_chain = &the_jnode->info.directory.Entries; if ( Chain_Is_empty( the_chain ) ) 40022ff8: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED 40022ffc: 02 80 00 34 be 400230cc <== NOT EXECUTED 40023000: aa 10 20 00 clr %l5 <== NOT EXECUTED /* Move to the first of the desired directory entries */ the_node = the_chain->first; bytes_transferred = 0; first_entry = iop->offset; 40023004: e8 06 20 08 ld [ %i0 + 8 ], %l4 <== NOT EXECUTED /* protect against using sizes that are not exact multiples of the */ /* -dirent- size. These could result in unexpected results */ last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); 40023008: 40 00 46 87 call 40034a24 <.udiv> <== NOT EXECUTED 4002300c: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 40023010: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 40023014: 85 2a 20 06 sll %o0, 6, %g2 <== NOT EXECUTED 40023018: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 4002301c: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 40023020: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40023024: a6 00 40 14 add %g1, %l4, %l3 <== NOT EXECUTED /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 40023028: 80 a4 e0 00 cmp %l3, 0 <== NOT EXECUTED 4002302c: 04 80 00 2a ble 400230d4 <== NOT EXECUTED 40023030: 80 a4 80 11 cmp %l2, %l1 <== NOT EXECUTED current_entry = current_entry + sizeof(struct dirent) ){ if ( Chain_Is_tail( the_chain, the_node ) ){ 40023034: 02 80 00 28 be 400230d4 <== NOT EXECUTED 40023038: b4 10 20 00 clr %i2 <== NOT EXECUTED tmp_dirent.d_off = current_entry; tmp_dirent.d_reclen = sizeof( struct dirent ); the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; tmp_dirent.d_namlen = strlen( the_jnode->name ); strcpy( tmp_dirent.d_name, the_jnode->name ); 4002303c: ae 07 be ec add %fp, -276, %l7 <== NOT EXECUTED 40023040: 10 80 00 08 b 40023060 <== NOT EXECUTED 40023044: ac 07 be f8 add %fp, -264, %l6 <== NOT EXECUTED last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 40023048: 80 a4 c0 1a cmp %l3, %i2 <== NOT EXECUTED 4002304c: 04 80 00 20 ble 400230cc <== NOT EXECUTED 40023050: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED current_entry = current_entry + sizeof(struct dirent) ){ if ( Chain_Is_tail( the_chain, the_node ) ){ 40023054: 80 a4 80 11 cmp %l2, %l1 <== NOT EXECUTED 40023058: 02 80 00 1d be 400230cc <== NOT EXECUTED 4002305c: 01 00 00 00 nop <== NOT EXECUTED /* entry in the read */ return bytes_transferred; /* Indicate that there are no more */ /* entries to return */ } if( current_entry >= first_entry ) { 40023060: 80 a5 00 1a cmp %l4, %i2 <== NOT EXECUTED 40023064: 34 bf ff f9 bg,a 40023048 <== NOT EXECUTED 40023068: b4 06 a1 0c add %i2, 0x10c, %i2 <== NOT EXECUTED /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; 4002306c: f4 27 be f0 st %i2, [ %fp + -272 ] <== NOT EXECUTED tmp_dirent.d_reclen = sizeof( struct dirent ); the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; 40023070: c4 04 60 34 ld [ %l1 + 0x34 ], %g2 <== NOT EXECUTED } if( current_entry >= first_entry ) { /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; tmp_dirent.d_reclen = sizeof( struct dirent ); 40023074: 82 10 21 0c mov 0x10c, %g1 <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; tmp_dirent.d_namlen = strlen( the_jnode->name ); 40023078: a0 04 60 0c add %l1, 0xc, %l0 <== NOT EXECUTED } if( current_entry >= first_entry ) { /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; tmp_dirent.d_reclen = sizeof( struct dirent ); 4002307c: c2 37 be f4 sth %g1, [ %fp + -268 ] <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; 40023080: c4 27 be ec st %g2, [ %fp + -276 ] <== NOT EXECUTED tmp_dirent.d_namlen = strlen( the_jnode->name ); 40023084: 40 00 1e d2 call 4002abcc <== NOT EXECUTED 40023088: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 4002308c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; tmp_dirent.d_reclen = sizeof( struct dirent ); the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; tmp_dirent.d_namlen = strlen( the_jnode->name ); 40023090: d0 37 be f6 sth %o0, [ %fp + -266 ] <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 40023094: 40 00 18 dd call 40029408 <== NOT EXECUTED 40023098: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED memcpy( 4002309c: 90 06 40 15 add %i1, %l5, %o0 <== NOT EXECUTED 400230a0: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 400230a4: 40 00 10 87 call 400272c0 <== NOT EXECUTED 400230a8: 94 10 21 0c mov 0x10c, %o2 <== NOT EXECUTED buffer + bytes_transferred, (void *)&tmp_dirent, sizeof( struct dirent ) ); iop->offset = iop->offset + sizeof(struct dirent); 400230ac: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); } the_node = the_node->next; 400230b0: b4 06 a1 0c add %i2, 0x10c, %i2 <== NOT EXECUTED memcpy( buffer + bytes_transferred, (void *)&tmp_dirent, sizeof( struct dirent ) ); iop->offset = iop->offset + sizeof(struct dirent); 400230b4: 82 00 61 0c add %g1, 0x10c, %g1 <== NOT EXECUTED 400230b8: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); 400230bc: aa 05 61 0c add %l5, 0x10c, %l5 <== NOT EXECUTED last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 400230c0: 80 a4 c0 1a cmp %l3, %i2 <== NOT EXECUTED 400230c4: 14 bf ff e4 bg 40023054 <== NOT EXECUTED 400230c8: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED the_node = the_node->next; } /* Success */ return bytes_transferred; } 400230cc: 81 c7 e0 08 ret <== NOT EXECUTED 400230d0: 91 e8 00 15 restore %g0, %l5, %o0 <== NOT EXECUTED last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 400230d4: 10 bf ff fe b 400230cc <== NOT EXECUTED 400230d8: aa 10 20 00 clr %l5 <== NOT EXECUTED 400230dc : */ int imfs_dir_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 400230dc: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 400230e0: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * You cannot remove a node that still has children */ if ( ! Chain_Is_empty( &the_jnode->info.directory.Entries ) ) 400230e4: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 400230e8: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 400230ec: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400230f0: 12 80 00 36 bne 400231c8 <== NOT EXECUTED 400230f4: 01 00 00 00 nop <== NOT EXECUTED /* * You cannot remove the file system root node. */ if ( pathloc->mt_entry->mt_fs_root.node_access == pathloc->node_access ) 400230f8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 400230fc: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 <== NOT EXECUTED 40023100: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 40023104: 02 80 00 2b be 400231b0 <== NOT EXECUTED 40023108: 01 00 00 00 nop <== NOT EXECUTED /* * You cannot remove a mountpoint. */ if ( the_jnode->info.directory.mt_fs != NULL ) 4002310c: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 40023110: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023114: 12 80 00 27 bne 400231b0 <== NOT EXECUTED 40023118: 01 00 00 00 nop <== NOT EXECUTED /* * Take the node out of the parent's chain that contains this node */ if ( the_jnode->Parent != NULL ) { 4002311c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40023120: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023124: 22 80 00 06 be,a 4002313c <== NOT EXECUTED 40023128: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4002312c: 7f ff de 2d call 4001a9e0 <_Chain_Extract> <== NOT EXECUTED 40023130: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 40023134: c0 24 20 08 clr [ %l0 + 8 ] <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 40023138: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4002313c: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 40023140: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 40023144: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 40023148: 7f ff 87 b9 call 4000502c <== NOT EXECUTED 4002314c: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 40023150: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED /* * The file cannot be open and the link must be less than 1 to free. */ if ( !rtems_libio_is_file_open( the_jnode ) && (the_jnode->st_nlink < 1) ) { 40023154: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40023158: 7f ff 88 25 call 400051ec <== NOT EXECUTED 4002315c: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 40023160: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40023164: 12 80 00 11 bne 400231a8 <== NOT EXECUTED 40023168: 01 00 00 00 nop <== NOT EXECUTED 4002316c: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 40023170: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40023174: 12 80 00 0d bne 400231a8 <== NOT EXECUTED 40023178: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 4002317c: c6 00 63 f0 ld [ %g1 + 0x3f0 ], %g3 ! 4003aff0 <== NOT EXECUTED 40023180: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 40023184: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 40023188: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4002318c: 22 80 00 02 be,a 40023194 <== NOT EXECUTED 40023190: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ free( the_jnode ); 40023194: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40023198: 7f ff 88 c5 call 400054ac <== NOT EXECUTED 4002319c: b0 10 20 00 clr %i0 <== NOT EXECUTED 400231a0: 81 c7 e0 08 ret <== NOT EXECUTED 400231a4: 81 e8 00 00 restore <== NOT EXECUTED } return 0; } 400231a8: 81 c7 e0 08 ret <== NOT EXECUTED 400231ac: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * You cannot remove a mountpoint. */ if ( the_jnode->info.directory.mt_fs != NULL ) rtems_set_errno_and_return_minus_one( EBUSY ); 400231b0: 40 00 09 9f call 4002582c <__errno> <== NOT EXECUTED 400231b4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400231b8: 82 10 20 10 mov 0x10, %g1 <== NOT EXECUTED 400231bc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400231c0: 81 c7 e0 08 ret <== NOT EXECUTED 400231c4: 81 e8 00 00 restore <== NOT EXECUTED /* * You cannot remove a node that still has children */ if ( ! Chain_Is_empty( &the_jnode->info.directory.Entries ) ) rtems_set_errno_and_return_minus_one( ENOTEMPTY ); 400231c8: 40 00 09 99 call 4002582c <__errno> <== NOT EXECUTED 400231cc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400231d0: 82 10 20 5a mov 0x5a, %g1 <== NOT EXECUTED 400231d4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400231d8: 81 c7 e0 08 ret <== NOT EXECUTED 400231dc: 81 e8 00 00 restore <== NOT EXECUTED 40018fb4 : /* * Initialize useable but dummy databases */ void init_etc_passwd_group(void) { 40018fb4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; static char etc_passwd_initted = 0; if (etc_passwd_initted) 40018fb8: 05 10 00 f1 sethi %hi(0x4003c400), %g2 <== NOT EXECUTED 40018fbc: c2 48 a2 18 ldsb [ %g2 + 0x218 ], %g1 ! 4003c618 <== NOT EXECUTED 40018fc0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018fc4: 02 80 00 04 be 40018fd4 <== NOT EXECUTED 40018fc8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40018fcc: 81 c7 e0 08 ret <== NOT EXECUTED 40018fd0: 81 e8 00 00 restore <== NOT EXECUTED return; etc_passwd_initted = 1; mkdir("/etc", 0777); 40018fd4: 92 10 21 ff mov 0x1ff, %o1 <== NOT EXECUTED FILE *fp; static char etc_passwd_initted = 0; if (etc_passwd_initted) return; etc_passwd_initted = 1; 40018fd8: c2 28 a2 18 stb %g1, [ %g2 + 0x218 ] <== NOT EXECUTED mkdir("/etc", 0777); 40018fdc: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 40018fe0: 40 00 01 3b call 400194cc <== NOT EXECUTED 40018fe4: 90 12 20 20 or %o0, 0x20, %o0 ! 40038020 <_CPU_Trap_slot_template+0xe70> <== NOT EXECUTED /* * Initialize /etc/passwd */ if ((fp = fopen("/etc/passwd", "r")) != NULL) { 40018fe8: 31 10 00 e0 sethi %hi(0x40038000), %i0 <== NOT EXECUTED 40018fec: 21 10 00 e8 sethi %hi(0x4003a000), %l0 <== NOT EXECUTED 40018ff0: 90 16 20 28 or %i0, 0x28, %o0 <== NOT EXECUTED 40018ff4: 40 00 34 53 call 40026140 <== NOT EXECUTED 40018ff8: 92 14 23 08 or %l0, 0x308, %o1 <== NOT EXECUTED 40018ffc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019000: 22 80 00 0d be,a 40019034 <== NOT EXECUTED 40019004: 90 16 20 28 or %i0, 0x28, %o0 <== NOT EXECUTED } else if ((fp = fopen("/etc/passwd", "w")) != NULL) { fprintf(fp, "root:*:0:0:root::/:/bin/sh\n" "rtems:*:1:1:RTEMS Application::/:/bin/sh\n" "tty:!:2:2:tty owner::/:/bin/false\n" ); fclose(fp); 40019008: 40 00 32 50 call 40025948 <== NOT EXECUTED 4001900c: 01 00 00 00 nop <== NOT EXECUTED } /* * Initialize /etc/group */ if ((fp = fopen("/etc/group", "r")) != NULL) { 40019010: 92 14 23 08 or %l0, 0x308, %o1 <== NOT EXECUTED 40019014: 31 10 00 e0 sethi %hi(0x40038000), %i0 <== NOT EXECUTED 40019018: 40 00 34 4a call 40026140 <== NOT EXECUTED 4001901c: 90 16 20 a0 or %i0, 0xa0, %o0 ! 400380a0 <_CPU_Trap_slot_template+0xef0> <== NOT EXECUTED 40019020: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019024: 22 80 00 11 be,a 40019068 <== NOT EXECUTED 40019028: 90 16 20 a0 or %i0, 0xa0, %o0 <== NOT EXECUTED fclose(fp); 4001902c: 40 00 32 47 call 40025948 <== NOT EXECUTED 40019030: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED * Initialize /etc/passwd */ if ((fp = fopen("/etc/passwd", "r")) != NULL) { fclose(fp); } else if ((fp = fopen("/etc/passwd", "w")) != NULL) { 40019034: 13 10 00 dc sethi %hi(0x40037000), %o1 <== NOT EXECUTED 40019038: 40 00 34 42 call 40026140 <== NOT EXECUTED 4001903c: 92 12 61 c0 or %o1, 0x1c0, %o1 ! 400371c0 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 40019040: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40019044: 02 bf ff f3 be 40019010 <== NOT EXECUTED 40019048: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED fprintf(fp, "root:*:0:0:root::/:/bin/sh\n" 4001904c: 94 10 20 66 mov 0x66, %o2 <== NOT EXECUTED 40019050: 96 10 00 18 mov %i0, %o3 <== NOT EXECUTED 40019054: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 40019058: 40 00 37 80 call 40026e58 <== NOT EXECUTED 4001905c: 90 12 20 38 or %o0, 0x38, %o0 ! 40038038 <_CPU_Trap_slot_template+0xe88> <== NOT EXECUTED "rtems:*:1:1:RTEMS Application::/:/bin/sh\n" "tty:!:2:2:tty owner::/:/bin/false\n" ); fclose(fp); 40019060: 10 bf ff ea b 40019008 <== NOT EXECUTED 40019064: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * Initialize /etc/group */ if ((fp = fopen("/etc/group", "r")) != NULL) { fclose(fp); } else if ((fp = fopen("/etc/group", "w")) != NULL) { 40019068: 13 10 00 dc sethi %hi(0x40037000), %o1 <== NOT EXECUTED 4001906c: 40 00 34 35 call 40026140 <== NOT EXECUTED 40019070: 92 12 61 c0 or %o1, 0x1c0, %o1 ! 400371c0 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 40019074: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40019078: 02 bf ff d5 be 40018fcc <== NOT EXECUTED 4001907c: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED fprintf( fp, "root:x:0:root\n" 40019080: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40019084: 94 10 20 2a mov 0x2a, %o2 <== NOT EXECUTED 40019088: 96 10 00 18 mov %i0, %o3 <== NOT EXECUTED 4001908c: 40 00 37 73 call 40026e58 <== NOT EXECUTED 40019090: 90 12 20 b0 or %o0, 0xb0, %o0 <== NOT EXECUTED "rtems:x:1:rtems\n" "tty:x:2:tty\n" ); fclose(fp); 40019094: 40 00 32 2d call 40025948 <== NOT EXECUTED 40019098: 81 e8 00 00 restore <== NOT EXECUTED 4001909c: 01 00 00 00 nop 40018ff0 : int ioctl( int fd, ioctl_command_t command, ... ) { 40018ff0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list ap; rtems_status_code rc; rtems_libio_t *iop; void *buffer; rtems_libio_check_fd( fd ); 40018ff4: 03 10 00 a3 sethi %hi(0x40028c00), %g1 <== NOT EXECUTED 40018ff8: c4 00 63 6c ld [ %g1 + 0x36c ], %g2 ! 40028f6c <== NOT EXECUTED int ioctl( int fd, ioctl_command_t command, ... ) { 40018ffc: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40019000: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40019004: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED 40019008: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED va_list ap; rtems_status_code rc; rtems_libio_t *iop; void *buffer; rtems_libio_check_fd( fd ); 4001900c: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 40019010: 1a 80 00 1b bcc 4001907c <== NOT EXECUTED 40019014: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40019018: 03 10 00 ab sethi %hi(0x4002ac00), %g1 <== NOT EXECUTED 4001901c: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4002afc8 <== NOT EXECUTED 40019020: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40019024: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40019028: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4001902c: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 40019030: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40019034: 90 00 40 03 add %g1, %g3, %o0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40019038: c4 02 20 0c ld [ %o0 + 0xc ], %g2 <== NOT EXECUTED 4001903c: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED 40019040: 02 80 00 0f be 4001907c <== NOT EXECUTED 40019044: 82 07 a0 50 add %fp, 0x50, %g1 <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 40019048: c4 02 20 30 ld [ %o0 + 0x30 ], %g2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); va_start(ap, command); buffer = va_arg(ap, void *); 4001904c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 40019050: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40019054: 02 80 00 0a be 4001907c <== NOT EXECUTED 40019058: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); if ( !iop->handlers->ioctl_h ) 4001905c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 40019060: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019064: 02 80 00 0c be 40019094 <== NOT EXECUTED 40019068: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); rc = (*iop->handlers->ioctl_h)( iop, command, buffer ); 4001906c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019070: 01 00 00 00 nop <== NOT EXECUTED return rc; } 40019074: 81 c7 e0 08 ret <== NOT EXECUTED 40019078: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) rtems_set_errno_and_return_minus_one( EBADF ); 4001907c: 40 00 01 85 call 40019690 <__errno> <== NOT EXECUTED 40019080: 01 00 00 00 nop <== NOT EXECUTED 40019084: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 40019088: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001908c: 10 bf ff fa b 40019074 <== NOT EXECUTED 40019090: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED if ( !iop->handlers->ioctl_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40019094: 40 00 01 7f call 40019690 <__errno> <== NOT EXECUTED 40019098: 01 00 00 00 nop <== NOT EXECUTED 4001909c: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 400190a0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400190a4: 10 bf ff f4 b 40019074 <== NOT EXECUTED 400190a8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40003e40 : /* * Process a single input character */ static int iproc (unsigned char c, struct rtems_termios_tty *tty) { 40003e40: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->termios.c_iflag & ISTRIP) 40003e44: c6 06 60 30 ld [ %i1 + 0x30 ], %g3 <== NOT EXECUTED 40003e48: 80 88 e0 20 btst 0x20, %g3 <== NOT EXECUTED 40003e4c: 02 80 00 03 be 40003e58 <== NOT EXECUTED 40003e50: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED c &= 0x7f; 40003e54: a0 0e 20 7f and %i0, 0x7f, %l0 <== NOT EXECUTED if (tty->termios.c_iflag & IUCLC) 40003e58: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40003e5c: 02 80 00 0b be 40003e88 <== NOT EXECUTED 40003e60: 82 0c 20 ff and %l0, 0xff, %g1 <== NOT EXECUTED c = tolower (c); 40003e64: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40003e68: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40019290 <__ctype_ptr> <== NOT EXECUTED 40003e6c: 90 0c 20 ff and %l0, 0xff, %o0 <== NOT EXECUTED 40003e70: c2 08 80 08 ldub [ %g2 + %o0 ], %g1 <== NOT EXECUTED 40003e74: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40003e78: 32 80 00 02 bne,a 40003e80 <== NOT EXECUTED 40003e7c: 90 02 20 20 add %o0, 0x20, %o0 <== NOT EXECUTED 40003e80: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if (c == '\r') { 40003e84: 82 0c 20 ff and %l0, 0xff, %g1 <== NOT EXECUTED 40003e88: 80 a0 60 0d cmp %g1, 0xd <== NOT EXECUTED 40003e8c: 02 80 00 32 be 40003f54 <== NOT EXECUTED 40003e90: 80 a0 60 0a cmp %g1, 0xa <== NOT EXECUTED if (tty->termios.c_iflag & IGNCR) return 0; if (tty->termios.c_iflag & ICRNL) c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { 40003e94: 02 80 00 35 be 40003f68 <== NOT EXECUTED 40003e98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40003e9c: 02 80 00 1f be 40003f18 <== NOT EXECUTED 40003ea0: 05 10 00 64 sethi %hi(0x40019000), %g2 <== NOT EXECUTED 40003ea4: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED 40003ea8: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 40003eac: 22 80 00 1b be,a 40003f18 <== NOT EXECUTED 40003eb0: 05 10 00 64 sethi %hi(0x40019000), %g2 <== NOT EXECUTED if (c == tty->termios.c_cc[VERASE]) { 40003eb4: c2 0e 60 43 ldub [ %i1 + 0x43 ], %g1 <== NOT EXECUTED 40003eb8: a2 0c 20 ff and %l0, 0xff, %l1 <== NOT EXECUTED 40003ebc: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40003ec0: 02 80 00 5a be 40004028 <== NOT EXECUTED 40003ec4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED erase (tty, 0); return 0; } else if (c == tty->termios.c_cc[VKILL]) { 40003ec8: c2 0e 60 44 ldub [ %i1 + 0x44 ], %g1 <== NOT EXECUTED 40003ecc: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40003ed0: 02 80 00 5b be 4000403c <== NOT EXECUTED 40003ed4: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED erase (tty, 1); return 0; } else if (c == tty->termios.c_cc[VEOF]) { 40003ed8: c2 0e 60 45 ldub [ %i1 + 0x45 ], %g1 <== NOT EXECUTED 40003edc: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40003ee0: 02 80 00 55 be 40004034 <== NOT EXECUTED 40003ee4: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return 1; } else if (c == '\n') { 40003ee8: 80 a4 60 0a cmp %l1, 0xa <== NOT EXECUTED 40003eec: 02 80 00 3e be 40003fe4 <== NOT EXECUTED 40003ef0: 80 88 a0 48 btst 0x48, %g2 <== NOT EXECUTED if (tty->termios.c_lflag & (ECHO | ECHONL)) echo (c, tty); tty->cbuf[tty->ccount++] = c; return 1; } else if ((c == tty->termios.c_cc[VEOL]) 40003ef4: c2 0e 60 4c ldub [ %i1 + 0x4c ], %g1 <== NOT EXECUTED 40003ef8: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40003efc: 02 80 00 27 be 40003f98 <== NOT EXECUTED 40003f00: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED 40003f04: c2 0e 60 51 ldub [ %i1 + 0x51 ], %g1 <== NOT EXECUTED 40003f08: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40003f0c: 02 80 00 23 be 40003f98 <== NOT EXECUTED 40003f10: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED } /* * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { 40003f14: 05 10 00 64 sethi %hi(0x40019000), %g2 <== NOT EXECUTED 40003f18: c6 06 60 20 ld [ %i1 + 0x20 ], %g3 <== NOT EXECUTED 40003f1c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED 40003f20: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40003f24: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40003f28: 16 80 00 0e bge 40003f60 <== NOT EXECUTED 40003f2c: 01 00 00 00 nop <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) 40003f30: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40003f34: 80 88 60 08 btst 8, %g1 <== NOT EXECUTED 40003f38: 12 80 00 21 bne 40003fbc <== NOT EXECUTED 40003f3c: 84 00 e0 01 add %g3, 1, %g2 <== NOT EXECUTED echo (c, tty); tty->cbuf[tty->ccount++] = c; 40003f40: c2 06 60 1c ld [ %i1 + 0x1c ], %g1 <== NOT EXECUTED 40003f44: e0 28 40 03 stb %l0, [ %g1 + %g3 ] <== NOT EXECUTED 40003f48: c4 26 60 20 st %g2, [ %i1 + 0x20 ] <== NOT EXECUTED 40003f4c: 81 c7 e0 08 ret <== NOT EXECUTED 40003f50: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (tty->termios.c_iflag & ISTRIP) c &= 0x7f; if (tty->termios.c_iflag & IUCLC) c = tolower (c); if (c == '\r') { if (tty->termios.c_iflag & IGNCR) 40003f54: 80 88 e0 80 btst 0x80, %g3 <== NOT EXECUTED 40003f58: 02 80 00 0c be 40003f88 <== NOT EXECUTED 40003f5c: 80 88 e1 00 btst 0x100, %g3 <== NOT EXECUTED * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { if (tty->termios.c_lflag & ECHO) echo (c, tty); tty->cbuf[tty->ccount++] = c; 40003f60: 81 c7 e0 08 ret <== NOT EXECUTED 40003f64: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (tty->termios.c_iflag & IGNCR) return 0; if (tty->termios.c_iflag & ICRNL) c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { 40003f68: 80 88 e0 40 btst 0x40, %g3 <== NOT EXECUTED 40003f6c: 02 bf ff cf be 40003ea8 <== NOT EXECUTED 40003f70: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40003f74: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 40003f78: 02 bf ff e7 be 40003f14 <== NOT EXECUTED 40003f7c: a0 10 20 0d mov 0xd, %l0 <== NOT EXECUTED if (c == tty->termios.c_cc[VERASE]) { 40003f80: 10 bf ff ce b 40003eb8 <== NOT EXECUTED 40003f84: c2 0e 60 43 ldub [ %i1 + 0x43 ], %g1 <== NOT EXECUTED if (tty->termios.c_iflag & IUCLC) c = tolower (c); if (c == '\r') { if (tty->termios.c_iflag & IGNCR) return 0; if (tty->termios.c_iflag & ICRNL) 40003f88: 32 bf ff c7 bne,a 40003ea4 <== NOT EXECUTED 40003f8c: a0 10 20 0a mov 0xa, %l0 <== NOT EXECUTED c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40003f90: 10 bf ff c6 b 40003ea8 <== NOT EXECUTED 40003f94: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; return 1; } else if ((c == tty->termios.c_cc[VEOL]) || (c == tty->termios.c_cc[VEOL2])) { if (tty->termios.c_lflag & ECHO) 40003f98: 12 80 00 1c bne 40004008 <== NOT EXECUTED 40003f9c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED echo (c, tty); tty->cbuf[tty->ccount++] = c; 40003fa0: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40003fa4: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 40003fa8: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 40003fac: e0 28 80 01 stb %l0, [ %g2 + %g1 ] <== NOT EXECUTED 40003fb0: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 40003fb4: 81 c7 e0 08 ret <== NOT EXECUTED 40003fb8: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED /* * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { if (tty->termios.c_lflag & ECHO) echo (c, tty); 40003fbc: 90 0c 20 ff and %l0, 0xff, %o0 <== NOT EXECUTED 40003fc0: 7f ff fe f0 call 40003b80 <== NOT EXECUTED 40003fc4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40003fc8: c6 06 60 20 ld [ %i1 + 0x20 ], %g3 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40003fcc: c2 06 60 1c ld [ %i1 + 0x1c ], %g1 <== NOT EXECUTED 40003fd0: 84 00 e0 01 add %g3, 1, %g2 <== NOT EXECUTED 40003fd4: e0 28 40 03 stb %l0, [ %g1 + %g3 ] <== NOT EXECUTED 40003fd8: c4 26 60 20 st %g2, [ %i1 + 0x20 ] <== NOT EXECUTED 40003fdc: 81 c7 e0 08 ret <== NOT EXECUTED 40003fe0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED } else if (c == tty->termios.c_cc[VEOF]) { return 1; } else if (c == '\n') { if (tty->termios.c_lflag & (ECHO | ECHONL)) 40003fe4: 12 80 00 0d bne 40004018 <== NOT EXECUTED 40003fe8: 90 10 20 0a mov 0xa, %o0 <== NOT EXECUTED echo (c, tty); tty->cbuf[tty->ccount++] = c; 40003fec: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40003ff0: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 40003ff4: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 40003ff8: e2 28 80 01 stb %l1, [ %g2 + %g1 ] <== NOT EXECUTED 40003ffc: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 40004000: 81 c7 e0 08 ret <== NOT EXECUTED 40004004: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED return 1; } else if ((c == tty->termios.c_cc[VEOL]) || (c == tty->termios.c_cc[VEOL2])) { if (tty->termios.c_lflag & ECHO) echo (c, tty); 40004008: 7f ff fe de call 40003b80 <== NOT EXECUTED 4000400c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40004010: 10 bf ff e5 b 40003fa4 <== NOT EXECUTED 40004014: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED else if (c == tty->termios.c_cc[VEOF]) { return 1; } else if (c == '\n') { if (tty->termios.c_lflag & (ECHO | ECHONL)) echo (c, tty); 40004018: 7f ff fe da call 40003b80 <== NOT EXECUTED 4000401c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40004020: 10 bf ff f4 b 40003ff0 <== NOT EXECUTED 40004024: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { if (c == tty->termios.c_cc[VERASE]) { erase (tty, 0); 40004028: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000402c: 7f ff fe f5 call 40003c00 <== NOT EXECUTED 40004030: b0 10 20 00 clr %i0 <== NOT EXECUTED 40004034: 81 c7 e0 08 ret <== NOT EXECUTED 40004038: 81 e8 00 00 restore <== NOT EXECUTED return 0; } else if (c == tty->termios.c_cc[VKILL]) { erase (tty, 1); 4000403c: 7f ff fe f1 call 40003c00 <== NOT EXECUTED 40004040: b0 10 20 00 clr %i0 <== NOT EXECUTED 40004044: 81 c7 e0 08 ret <== NOT EXECUTED 40004048: 81 e8 00 00 restore <== NOT EXECUTED 4002502c : #if !defined(RTEMS_POSIX_API) int kill( pid_t pid, int sig ) { return 0; } 4002502c: 81 c3 e0 08 retl <== NOT EXECUTED 40025030: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED 40017694 : extern void _wrapup_reent(struct _reent *); extern void _reclaim_reent(struct _reent *); void libc_wrapup(void) { 40017694: 9d e3 bf 98 save %sp, -104, %sp /* * In case RTEMS is already down, don't do this. It could be * dangerous. */ if (!_System_state_Is_up(_System_state_Get())) 40017698: 03 10 00 67 sethi %hi(0x40019c00), %g1 4001769c: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> 400176a0: 80 a0 a0 03 cmp %g2, 3 400176a4: 12 80 00 15 bne 400176f8 400176a8: 21 10 00 64 sethi %hi(0x40019000), %l0 /* * This was already done if the user called exit() directly . _wrapup_reent(0); */ if (_REENT != &libc_global_reent) { 400176ac: c4 04 22 98 ld [ %l0 + 0x298 ], %g2 ! 40019298 <_impure_ptr> 400176b0: 03 10 00 63 sethi %hi(0x40018c00), %g1 400176b4: b0 10 60 10 or %g1, 0x10, %i0 ! 40018c10 400176b8: 80 a0 80 18 cmp %g2, %i0 400176bc: 02 80 00 06 be 400176d4 400176c0: c2 04 22 98 ld [ %l0 + 0x298 ], %g1 _wrapup_reent(&libc_global_reent); 400176c4: 40 00 00 ab call 40017970 <_wrapup_reent> 400176c8: 90 10 00 18 mov %i0, %o0 /* Don't reclaim this one, just in case we do printfs * on the way out to ROM. */ _reclaim_reent(&libc_global_reent); #endif _REENT = &libc_global_reent; 400176cc: f0 24 22 98 st %i0, [ %l0 + 0x298 ] * * Should this be changed to do *all* file streams? * _fwalk (_REENT, fclose); */ fclose (stdin); 400176d0: c2 04 22 98 ld [ %l0 + 0x298 ], %g1 400176d4: 7f ff da ef call 4000e290 400176d8: d0 00 60 04 ld [ %g1 + 4 ], %o0 fclose (stdout); 400176dc: c2 04 22 98 ld [ %l0 + 0x298 ], %g1 400176e0: 7f ff da ec call 4000e290 400176e4: d0 00 60 08 ld [ %g1 + 8 ], %o0 fclose (stderr); 400176e8: c2 04 22 98 ld [ %l0 + 0x298 ], %g1 400176ec: f0 00 60 0c ld [ %g1 + 0xc ], %i0 400176f0: 7f ff da e8 call 4000e290 400176f4: 81 e8 00 00 restore 400176f8: 81 c7 e0 08 ret <== NOT EXECUTED 400176fc: 81 e8 00 00 restore <== NOT EXECUTED 40017570 : off_t lseek( int fd, off_t offset, int whence ) { 40017570: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_libio_t *iop; off_t old_offset; off_t status; rtems_libio_check_fd( fd ); 40017574: 03 10 00 62 sethi %hi(0x40018800), %g1 <== NOT EXECUTED 40017578: c4 00 63 0c ld [ %g1 + 0x30c ], %g2 ! 40018b0c <== NOT EXECUTED off_t lseek( int fd, off_t offset, int whence ) { 4001757c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED rtems_libio_t *iop; off_t old_offset; off_t status; rtems_libio_check_fd( fd ); 40017580: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 40017584: 1a 80 00 31 bcc 40017648 <== NOT EXECUTED 40017588: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 4001758c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 40017590: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 40019944 <== NOT EXECUTED 40017594: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40017598: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 4001759c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400175a0: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 400175a4: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400175a8: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 400175ac: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED 400175b0: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED 400175b4: 02 80 00 25 be 40017648 <== NOT EXECUTED 400175b8: 01 00 00 00 nop <== NOT EXECUTED /* * Check as many errors as possible before touching iop->offset. */ if ( !iop->handlers->lseek_h ) 400175bc: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 <== NOT EXECUTED 400175c0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED 400175c4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400175c8: 02 80 00 26 be 40017660 <== NOT EXECUTED 400175cc: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED /* * Now process the lseek(). */ old_offset = iop->offset; switch ( whence ) { 400175d0: 02 80 00 14 be 40017620 <== NOT EXECUTED 400175d4: f4 06 20 08 ld [ %i0 + 8 ], %i2 <== NOT EXECUTED 400175d8: 80 a2 a0 02 cmp %o2, 2 <== NOT EXECUTED 400175dc: 02 80 00 0d be 40017610 <== NOT EXECUTED 400175e0: 80 a2 a0 00 cmp %o2, 0 <== NOT EXECUTED 400175e4: 12 80 00 12 bne 4001762c <== NOT EXECUTED 400175e8: 01 00 00 00 nop <== NOT EXECUTED case SEEK_SET: iop->offset = offset; 400175ec: f2 26 20 08 st %i1, [ %i0 + 8 ] <== NOT EXECUTED /* * At this time, handlers assume iop->offset has the desired * new offset. */ status = (*iop->handlers->lseek_h)( iop, offset, whence ); 400175f0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED 400175f4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400175f8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status == (off_t) -1 ) 400175fc: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40017600: 22 80 00 02 be,a 40017608 <== NOT EXECUTED 40017604: f4 26 20 08 st %i2, [ %i0 + 8 ] <== NOT EXECUTED /* * So if the operation failed, we have to restore iop->offset. */ return status; } 40017608: 81 c7 e0 08 ret <== NOT EXECUTED 4001760c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED case SEEK_CUR: iop->offset += offset; break; case SEEK_END: iop->offset = iop->size + offset; 40017610: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40017614: 82 06 40 01 add %i1, %g1, %g1 <== NOT EXECUTED 40017618: 10 bf ff f6 b 400175f0 <== NOT EXECUTED 4001761c: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED case SEEK_SET: iop->offset = offset; break; case SEEK_CUR: iop->offset += offset; 40017620: 82 06 40 1a add %i1, %i2, %g1 <== NOT EXECUTED 40017624: 10 bf ff f3 b 400175f0 <== NOT EXECUTED 40017628: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED case SEEK_END: iop->offset = iop->size + offset; break; default: rtems_set_errno_and_return_minus_one( EINVAL ); 4001762c: 7f ff da c3 call 4000e138 <__errno> <== NOT EXECUTED 40017630: 01 00 00 00 nop <== NOT EXECUTED 40017634: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40017638: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001763c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * So if the operation failed, we have to restore iop->offset. */ return status; } 40017640: 81 c7 e0 08 ret <== NOT EXECUTED 40017644: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED off_t old_offset; off_t status; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 40017648: 7f ff da bc call 4000e138 <__errno> <== NOT EXECUTED 4001764c: 01 00 00 00 nop <== NOT EXECUTED 40017650: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 40017654: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017658: 10 bf ff ec b 40017608 <== NOT EXECUTED 4001765c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Check as many errors as possible before touching iop->offset. */ if ( !iop->handlers->lseek_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017660: 7f ff da b6 call 4000e138 <__errno> <== NOT EXECUTED 40017664: 01 00 00 00 nop <== NOT EXECUTED 40017668: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4001766c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017670: 10 bf ff e6 b 40017608 <== NOT EXECUTED 40017674: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40002324 : #ifdef RTEMS_NEWLIB void *malloc( size_t size ) { 40002324: 9d e3 bf 98 save %sp, -104, %sp uint32_t sbrk_amount; Chain_Node *to_be_freed; MSBUMP(malloc_calls, 1); if ( !size ) 40002328: a2 96 20 00 orcc %i0, 0, %l1 4000232c: 02 80 00 1c be 4000239c 40002330: 03 10 00 67 sethi %hi(0x40019c00), %g1 /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 40002334: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> 40002338: 80 a0 a0 03 cmp %g2, 3 4000233c: 02 80 00 13 be 40002388 40002340: 11 10 00 66 sethi %hi(0x40019800), %o0 40002344: 10 80 00 04 b 40002354 40002348: a0 12 21 ac or %o0, 0x1ac, %l0 ! 400199ac /* * If some free's have been deferred, then do them now. */ while ((to_be_freed = Chain_Get(&RTEMS_Malloc_GC_list)) != NULL) free(to_be_freed); 4000234c: 7f ff ff cd call 40002280 40002350: 01 00 00 00 nop } /* * If some free's have been deferred, then do them now. */ while ((to_be_freed = Chain_Get(&RTEMS_Malloc_GC_list)) != NULL) 40002354: 40 00 12 66 call 40006cec <_Chain_Get> 40002358: 90 10 00 10 mov %l0, %o0 4000235c: 80 a2 20 00 cmp %o0, 0 40002360: 12 bf ff fb bne 4000234c 40002364: 92 10 00 11 mov %l1, %o1 */ #ifdef MALLOC_ARENA_CHECK size += sizeof(struct mallocNode) + SENTINELSIZE; #endif return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 40002368: 21 10 00 66 sethi %hi(0x40019800), %l0 4000236c: 40 00 17 4c call 4000809c <_Protected_heap_Allocate> 40002370: 90 14 21 50 or %l0, 0x150, %o0 ! 40019950 if ( !return_this ) { 40002374: b0 92 20 00 orcc %o0, 0, %i0 40002378: 02 80 00 11 be 400023bc 4000237c: 03 10 00 66 sethi %hi(0x40019800), %g1 mallocNodeHead.forw = mp; rtems_interrupt_enable(key); } #endif return return_this; } 40002380: 81 c7 e0 08 ret 40002384: 81 e8 00 00 restore /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) 40002388: 03 10 00 66 sethi %hi(0x40019800), %g1 4000238c: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 40002390: 80 a0 a0 00 cmp %g2, 0 40002394: 02 80 00 04 be 400023a4 40002398: 03 10 00 66 sethi %hi(0x40019800), %g1 mallocNodeHead.forw = mp; rtems_interrupt_enable(key); } #endif return return_this; } 4000239c: 81 c7 e0 08 ret <== NOT EXECUTED 400023a0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) return (void *) 0; if (_ISR_Nest_level > 0) 400023a4: c4 00 63 d4 ld [ %g1 + 0x3d4 ], %g2 400023a8: 80 a0 a0 00 cmp %g2, 0 400023ac: 02 bf ff ea be 40002354 400023b0: a0 12 21 ac or %o0, 0x1ac, %l0 MSBUMP(space_available, the_size); return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); if ( !return_this ) { errno = ENOMEM; return (void *) 0; 400023b4: 81 c7 e0 08 ret <== NOT EXECUTED 400023b8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED * Round to the "requested sbrk amount" so hopefully we won't have * to grow again for a while. This effectively does sbrk() calls * in "page" amounts. */ sbrk_amount = RTEMS_Malloc_Sbrk_amount; 400023bc: e4 00 61 a8 ld [ %g1 + 0x1a8 ], %l2 <== NOT EXECUTED if ( sbrk_amount == 0 ) 400023c0: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 400023c4: 02 bf ff ef be 40002380 <== NOT EXECUTED 400023c8: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED return (void *) 0; the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount); 400023cc: 40 00 4b 84 call 400151dc <.udiv> <== NOT EXECUTED 400023d0: 90 04 40 12 add %l1, %l2, %o0 <== NOT EXECUTED 400023d4: 40 00 4b 48 call 400150f4 <.umul> <== NOT EXECUTED 400023d8: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED if ((starting_address = (void *)sbrk(the_size)) 400023dc: 7f ff fd a3 call 40001a68 <== NOT EXECUTED 400023e0: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 400023e4: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 400023e8: 02 bf ff e6 be 40002380 <== NOT EXECUTED 400023ec: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED == (void*) -1) return (void *) 0; if ( !_Protected_heap_Extend( 400023f0: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED 400023f4: 40 00 17 c5 call 40008308 <_Protected_heap_Extend> <== NOT EXECUTED 400023f8: 90 14 21 50 or %l0, 0x150, %o0 <== NOT EXECUTED 400023fc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40002400: 02 80 00 0d be 40002434 <== NOT EXECUTED 40002404: 90 14 21 50 or %l0, 0x150, %o0 <== NOT EXECUTED return (void *) 0; } MSBUMP(space_available, the_size); return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 40002408: 40 00 17 25 call 4000809c <_Protected_heap_Allocate> <== NOT EXECUTED 4000240c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED if ( !return_this ) { 40002410: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40002414: 12 80 00 0e bne 4000244c <== NOT EXECUTED 40002418: 01 00 00 00 nop <== NOT EXECUTED errno = ENOMEM; 4000241c: 40 00 2f 47 call 4000e138 <__errno> <== NOT EXECUTED 40002420: 01 00 00 00 nop <== NOT EXECUTED 40002424: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 40002428: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000242c: 81 c7 e0 08 ret <== NOT EXECUTED 40002430: 81 e8 00 00 restore <== NOT EXECUTED == (void*) -1) return (void *) 0; if ( !_Protected_heap_Extend( &RTEMS_Malloc_Heap, starting_address, the_size) ) { sbrk(-the_size); 40002434: 7f ff fd 8d call 40001a68 <== NOT EXECUTED 40002438: 90 20 00 12 neg %l2, %o0 <== NOT EXECUTED errno = ENOMEM; 4000243c: 40 00 2f 3f call 4000e138 <__errno> <== NOT EXECUTED 40002440: 01 00 00 00 nop <== NOT EXECUTED 40002444: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 40002448: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000244c: 81 c7 e0 08 ret <== NOT EXECUTED 40002450: 81 e8 00 00 restore <== NOT EXECUTED 4000547c : /* * Find amount of free heap remaining */ size_t malloc_free_space( void ) { 4000547c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED Heap_Information info; _Protected_heap_Get_free_information( &RTEMS_Malloc_Heap, &info ); 40005480: 11 10 00 f3 sethi %hi(0x4003cc00), %o0 <== NOT EXECUTED 40005484: 92 07 bf ec add %fp, -20, %o1 <== NOT EXECUTED 40005488: 40 00 1b 6b call 4000c234 <_Protected_heap_Get_free_information> <== NOT EXECUTED 4000548c: 90 12 22 d0 or %o0, 0x2d0, %o0 <== NOT EXECUTED return (size_t) info.largest; } 40005490: f0 07 bf f0 ld [ %fp + -16 ], %i0 <== NOT EXECUTED 40005494: 81 c7 e0 08 ret <== NOT EXECUTED 40005498: 81 e8 00 00 restore <== NOT EXECUTED 4001b5bc : */ int memfile_blocks_allocated = 0; void *memfile_alloc_block(void) { 4001b5bc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED void *memory; memory = (void *)calloc(1, IMFS_MEMFILE_BYTES_PER_BLOCK); 4001b5c0: 03 10 00 f1 sethi %hi(0x4003c400), %g1 <== NOT EXECUTED 4001b5c4: d2 00 60 58 ld [ %g1 + 0x58 ], %o1 ! 4003c458 <== NOT EXECUTED 4001b5c8: 7f ff a8 80 call 400057c8 <== NOT EXECUTED 4001b5cc: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED if ( memory ) 4001b5d0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b5d4: 02 80 00 05 be 4001b5e8 <== NOT EXECUTED 4001b5d8: 05 10 00 f1 sethi %hi(0x4003c400), %g2 <== NOT EXECUTED memfile_blocks_allocated++; 4001b5dc: c2 00 a3 e0 ld [ %g2 + 0x3e0 ], %g1 ! 4003c7e0 <== NOT EXECUTED 4001b5e0: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001b5e4: c2 20 a3 e0 st %g1, [ %g2 + 0x3e0 ] <== NOT EXECUTED return memory; } 4001b5e8: 81 c7 e0 08 ret <== NOT EXECUTED 4001b5ec: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001bb70 : return memfile_check_rmnod( the_jnode ); } int memfile_check_rmnod( IMFS_jnode_t *the_jnode ){ 4001bb70: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * The file cannot be open and the link must be less than 1 to free. */ if ( !rtems_libio_is_file_open( the_jnode ) && (the_jnode->st_nlink < 1) ) { 4001bb74: 7f ff a5 9e call 400051ec <== NOT EXECUTED 4001bb78: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001bb7c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001bb80: 12 80 00 13 bne 4001bbcc <== NOT EXECUTED 4001bb84: 01 00 00 00 nop <== NOT EXECUTED 4001bb88: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4001bb8c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001bb90: 12 80 00 0f bne 4001bbcc <== NOT EXECUTED 4001bb94: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == the_jnode ) 4001bb98: c2 00 63 f0 ld [ %g1 + 0x3f0 ], %g1 ! 4003aff0 <== NOT EXECUTED 4001bb9c: c4 00 60 04 ld [ %g1 + 4 ], %g2 <== NOT EXECUTED 4001bba0: 80 a0 80 18 cmp %g2, %i0 <== NOT EXECUTED 4001bba4: 22 80 00 02 be,a 4001bbac <== NOT EXECUTED 4001bba8: c0 20 60 04 clr [ %g1 + 4 ] <== NOT EXECUTED rtems_filesystem_current.node_access = NULL; /* * Free memory associated with a memory file. */ if (the_jnode->type != IMFS_LINEAR_FILE) 4001bbac: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001bbb0: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001bbb4: 02 80 00 04 be 4001bbc4 <== NOT EXECUTED 4001bbb8: 01 00 00 00 nop <== NOT EXECUTED IMFS_memfile_remove( the_jnode ); 4001bbbc: 7f ff ff 6c call 4001b96c <== NOT EXECUTED 4001bbc0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free( the_jnode ); 4001bbc4: 7f ff a6 3a call 400054ac <== NOT EXECUTED 4001bbc8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 4001bbcc: 81 c7 e0 08 ret <== NOT EXECUTED 4001bbd0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001bc28 : */ int memfile_close( rtems_libio_t *iop ) { 4001bc28: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; if (iop->flags & LIBIO_FLAGS_APPEND) 4001bc2c: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4001bc30: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 4001bc34: 02 80 00 04 be 4001bc44 <== NOT EXECUTED 4001bc38: d0 06 20 2c ld [ %i0 + 0x2c ], %o0 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001bc3c: c2 02 20 4c ld [ %o0 + 0x4c ], %g1 <== NOT EXECUTED 4001bc40: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED memfile_check_rmnod( the_jnode ); 4001bc44: 7f ff ff cb call 4001bb70 <== NOT EXECUTED 4001bc48: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 4001bc4c: 81 c7 e0 08 ret <== NOT EXECUTED 4001bc50: 81 e8 00 00 restore <== NOT EXECUTED 4001b598 : */ void memfile_free_block( void *memory ) { 4001b598: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED #if 0 fprintf(stdout, "(d %p) ", memory ); fflush(stdout); #endif free(memory); 4001b59c: 7f ff a7 c4 call 400054ac <== NOT EXECUTED 4001b5a0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED memfile_blocks_allocated--; 4001b5a4: 05 10 00 f1 sethi %hi(0x4003c400), %g2 <== NOT EXECUTED 4001b5a8: c2 00 a3 e0 ld [ %g2 + 0x3e0 ], %g1 ! 4003c7e0 <== NOT EXECUTED 4001b5ac: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001b5b0: c2 20 a3 e0 st %g1, [ %g2 + 0x3e0 ] <== NOT EXECUTED } 4001b5b4: 81 c7 e0 08 ret <== NOT EXECUTED 4001b5b8: 81 e8 00 00 restore <== NOT EXECUTED 4001b8f0 : void memfile_free_blocks_in_table( block_p **block_table, int entries ) { 4001b8f0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( block_table ); 4001b8f4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001b8f8: 02 80 00 16 be 4001b950 <== NOT EXECUTED 4001b8fc: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED * Now go through all the slots in the table and free the memory. */ b = *block_table; for ( i=0 ; i <== NOT EXECUTED 4001b904: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED 4001b908: a2 10 20 00 clr %l1 <== NOT EXECUTED 4001b90c: b4 10 20 00 clr %i2 <== NOT EXECUTED if ( b[i] ) { 4001b910: d0 06 80 10 ld [ %i2 + %l0 ], %o0 <== NOT EXECUTED 4001b914: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b918: 02 80 00 05 be 4001b92c <== NOT EXECUTED 4001b91c: a2 04 60 01 inc %l1 <== NOT EXECUTED memfile_free_block( b[i] ); 4001b920: 7f ff ff 1e call 4001b598 <== NOT EXECUTED 4001b924: 01 00 00 00 nop <== NOT EXECUTED b[i] = 0; 4001b928: c0 26 80 10 clr [ %i2 + %l0 ] <== NOT EXECUTED * Now go through all the slots in the table and free the memory. */ b = *block_table; for ( i=0 ; i <== NOT EXECUTED 4001b934: b4 06 a0 04 add %i2, 4, %i2 <== NOT EXECUTED 4001b938: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Now that all the blocks in the block table are free, we can * free the block table itself. */ memfile_free_block( *block_table ); 4001b93c: 7f ff ff 17 call 4001b598 <== NOT EXECUTED 4001b940: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *block_table = 0; 4001b944: c0 26 00 00 clr [ %i0 ] <== NOT EXECUTED } 4001b948: 81 c7 e0 08 ret <== NOT EXECUTED 4001b94c: 81 e8 00 00 restore <== NOT EXECUTED /* * Perform internal consistency checks */ assert( block_table ); 4001b950: 31 10 00 e0 sethi %hi(0x40038000), %i0 <== NOT EXECUTED 4001b954: 35 10 00 e0 sethi %hi(0x40038000), %i2 <== NOT EXECUTED 4001b958: b0 16 20 e8 or %i0, 0xe8, %i0 <== NOT EXECUTED 4001b95c: b4 16 a1 70 or %i2, 0x170, %i2 <== NOT EXECUTED 4001b960: 7f ff a4 e9 call 40004d04 <__assert> <== NOT EXECUTED 4001b964: 93 e8 21 b1 restore %g0, 0x1b1, %o1 <== NOT EXECUTED 4001b968: 01 00 00 00 nop 4001beac : int memfile_ftruncate( rtems_libio_t *iop, off_t length ) { 4001beac: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4001beb0: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED * POSIX 1003.1b does not specify what happens if you truncate a file * and the new length is greater than the current size. We treat this * as an extend operation. */ if ( length > the_jnode->info.file.size ) 4001beb4: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001beb8: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001bebc: 16 80 00 06 bge 4001bed4 <== NOT EXECUTED 4001bec0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED return IMFS_memfile_extend( the_jnode, length ); 4001bec4: 7f ff ff 97 call 4001bd20 <== NOT EXECUTED 4001bec8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; IMFS_update_atime( the_jnode ); return 0; } 4001becc: 81 c7 e0 08 ret <== NOT EXECUTED 4001bed0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED * The in-memory files do not currently reclaim memory until the file is * deleted. So we leave the previously allocated blocks in place for * future use and just set the length. */ the_jnode->info.file.size = length; 4001bed4: f2 24 20 4c st %i1, [ %l0 + 0x4c ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001bed8: f2 26 20 04 st %i1, [ %i0 + 4 ] <== NOT EXECUTED IMFS_update_atime( the_jnode ); 4001bedc: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001bee0: 7f ff a4 53 call 4000502c <== NOT EXECUTED 4001bee4: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001bee8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001beec: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001bef0: c2 24 20 3c st %g1, [ %l0 + 0x3c ] <== NOT EXECUTED return 0; } 4001bef4: 81 c7 e0 08 ret <== NOT EXECUTED 4001bef8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001b590 : IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; return 0; } 4001b590: 81 c3 e0 08 retl <== NOT EXECUTED 4001b594: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001befc : off_t memfile_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 4001befc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4001bf00: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { 4001bf04: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4001bf08: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001bf0c: 02 80 00 0d be 4001bf40 <== NOT EXECUTED 4001bf10: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED if (iop->offset > the_jnode->info.linearfile.size) iop->offset = the_jnode->info.linearfile.size; } else { /* Must be a block file (IMFS_MEMORY_FILE). */ if (IMFS_memfile_extend( the_jnode, iop->offset )) 4001bf14: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 4001bf18: 7f ff ff 82 call 4001bd20 <== NOT EXECUTED 4001bf1c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001bf20: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001bf24: 12 80 00 0f bne 4001bf60 <== NOT EXECUTED 4001bf28: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); iop->size = the_jnode->info.file.size; 4001bf2c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001bf30: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4001bf34: c2 24 60 04 st %g1, [ %l1 + 4 ] <== NOT EXECUTED } return iop->offset; } 4001bf38: 81 c7 e0 08 ret <== NOT EXECUTED 4001bf3c: 81 e8 00 00 restore <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; if (the_jnode->type == IMFS_LINEAR_FILE) { if (iop->offset > the_jnode->info.linearfile.size) 4001bf40: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 4001bf44: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4001bf48: 80 a6 00 08 cmp %i0, %o0 <== NOT EXECUTED 4001bf4c: 04 80 00 09 ble 4001bf70 <== NOT EXECUTED 4001bf50: 01 00 00 00 nop <== NOT EXECUTED iop->offset = the_jnode->info.linearfile.size; 4001bf54: d0 24 60 08 st %o0, [ %l1 + 8 ] <== NOT EXECUTED 4001bf58: 81 c7 e0 08 ret <== NOT EXECUTED 4001bf5c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED } else { /* Must be a block file (IMFS_MEMORY_FILE). */ if (IMFS_memfile_extend( the_jnode, iop->offset )) rtems_set_errno_and_return_minus_one( ENOSPC ); 4001bf60: 40 00 26 33 call 4002582c <__errno> <== NOT EXECUTED 4001bf64: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001bf68: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED 4001bf6c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001bf70: 81 c7 e0 08 ret <== NOT EXECUTED 4001bf74: 81 e8 00 00 restore <== NOT EXECUTED 4001c268 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4001c268: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED the_jnode = iop->file_info; /* * Perform 'copy on write' for linear files */ if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND)) 4001c26c: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4001c270: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED the_jnode = iop->file_info; /* * Perform 'copy on write' for linear files */ if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND)) 4001c274: 80 88 a2 04 btst 0x204, %g2 <== NOT EXECUTED 4001c278: 02 80 00 06 be 4001c290 <== NOT EXECUTED 4001c27c: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED 4001c280: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4001c284: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001c288: 22 80 00 0b be,a 4001c2b4 <== NOT EXECUTED 4001c28c: d6 04 20 4c ld [ %l0 + 0x4c ], %o3 <== NOT EXECUTED the_jnode->info.file.triply_indirect = 0; if ((count != 0) && (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1)) return -1; } if (iop->flags & LIBIO_FLAGS_APPEND) 4001c290: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED 4001c294: 02 80 00 04 be 4001c2a4 <== NOT EXECUTED 4001c298: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001c29c: c2 24 60 08 st %g1, [ %l1 + 8 ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001c2a0: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001c2a4: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001c2a8: c2 24 60 04 st %g1, [ %l1 + 4 ] <== NOT EXECUTED return 0; } 4001c2ac: 81 c7 e0 08 ret <== NOT EXECUTED 4001c2b0: 81 e8 00 00 restore <== NOT EXECUTED * Perform 'copy on write' for linear files */ if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND)) && (the_jnode->type == IMFS_LINEAR_FILE)) { uint32_t count = the_jnode->info.linearfile.size; const unsigned char *buffer = the_jnode->info.linearfile.direct; 4001c2b4: d4 04 20 50 ld [ %l0 + 0x50 ], %o2 <== NOT EXECUTED the_jnode->type = IMFS_MEMORY_FILE; 4001c2b8: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED the_jnode->info.file.size = 0; the_jnode->info.file.indirect = 0; the_jnode->info.file.doubly_indirect = 0; 4001c2bc: c0 24 20 54 clr [ %l0 + 0x54 ] <== NOT EXECUTED && (the_jnode->type == IMFS_LINEAR_FILE)) { uint32_t count = the_jnode->info.linearfile.size; const unsigned char *buffer = the_jnode->info.linearfile.direct; the_jnode->type = IMFS_MEMORY_FILE; the_jnode->info.file.size = 0; 4001c2c0: c0 24 20 4c clr [ %l0 + 0x4c ] <== NOT EXECUTED the_jnode->info.file.indirect = 0; the_jnode->info.file.doubly_indirect = 0; the_jnode->info.file.triply_indirect = 0; 4001c2c4: c0 24 20 58 clr [ %l0 + 0x58 ] <== NOT EXECUTED uint32_t count = the_jnode->info.linearfile.size; const unsigned char *buffer = the_jnode->info.linearfile.direct; the_jnode->type = IMFS_MEMORY_FILE; the_jnode->info.file.size = 0; the_jnode->info.file.indirect = 0; 4001c2c8: c0 24 20 50 clr [ %l0 + 0x50 ] <== NOT EXECUTED the_jnode->info.file.doubly_indirect = 0; the_jnode->info.file.triply_indirect = 0; if ((count != 0) 4001c2cc: 80 a2 e0 00 cmp %o3, 0 <== NOT EXECUTED 4001c2d0: 12 80 00 08 bne 4001c2f0 <== NOT EXECUTED 4001c2d4: c2 24 20 48 st %g1, [ %l0 + 0x48 ] <== NOT EXECUTED 4001c2d8: c4 04 60 0c ld [ %l1 + 0xc ], %g2 <== NOT EXECUTED && (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1)) return -1; } if (iop->flags & LIBIO_FLAGS_APPEND) 4001c2dc: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED 4001c2e0: 02 bf ff f1 be 4001c2a4 <== NOT EXECUTED 4001c2e4: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001c2e8: 10 bf ff ee b 4001c2a0 <== NOT EXECUTED 4001c2ec: c2 24 60 08 st %g1, [ %l1 + 8 ] <== NOT EXECUTED the_jnode->type = IMFS_MEMORY_FILE; the_jnode->info.file.size = 0; the_jnode->info.file.indirect = 0; the_jnode->info.file.doubly_indirect = 0; the_jnode->info.file.triply_indirect = 0; if ((count != 0) 4001c2f0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001c2f4: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001c2f8: 7f ff ff 20 call 4001bf78 <== NOT EXECUTED 4001c2fc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001c300: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4001c304: 02 bf ff ea be 4001c2ac <== NOT EXECUTED 4001c308: 01 00 00 00 nop <== NOT EXECUTED 4001c30c: 10 bf ff f4 b 4001c2dc <== NOT EXECUTED 4001c310: c4 04 60 0c ld [ %l1 + 0xc ], %g2 <== NOT EXECUTED 4001c628 : ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4001c628: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; return IMFS_memfile_read( the_jnode, iop->offset, buffer, count ); 4001c62c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4001c630: d0 02 20 2c ld [ %o0 + 0x2c ], %o0 <== NOT EXECUTED ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4001c634: 96 10 00 0a mov %o2, %o3 <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; return IMFS_memfile_read( the_jnode, iop->offset, buffer, count ); 4001c638: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 4001c63c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001c640: 7f ff ff 35 call 4001c314 <== NOT EXECUTED 4001c644: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001c648: 01 00 00 00 nop <== NOT EXECUTED 4001bbd4 : */ int memfile_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4001bbd4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 4001bbd8: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED /* * Take the node out of the parent's chain that contains this node */ if ( the_jnode->Parent != NULL ) { 4001bbdc: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 4001bbe0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001bbe4: 22 80 00 06 be,a 4001bbfc <== NOT EXECUTED 4001bbe8: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4001bbec: 7f ff fb 7d call 4001a9e0 <_Chain_Extract> <== NOT EXECUTED 4001bbf0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 4001bbf4: c0 26 20 08 clr [ %i0 + 8 ] <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4001bbf8: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4001bbfc: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4001bc00: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4001bc04: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001bc08: 7f ff a5 09 call 4000502c <== NOT EXECUTED 4001bc0c: c2 36 20 30 sth %g1, [ %i0 + 0x30 ] <== NOT EXECUTED 4001bc10: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return memfile_check_rmnod( the_jnode ); 4001bc14: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001bc18: 7f ff ff d6 call 4001bb70 <== NOT EXECUTED 4001bc1c: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED } 4001bc20: 81 c7 e0 08 ret <== NOT EXECUTED 4001bc24: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001c238 : ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4001c238: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; ssize_t status; the_jnode = iop->file_info; 4001c23c: e2 06 20 2c ld [ %i0 + 0x2c ], %l1 <== NOT EXECUTED status = IMFS_memfile_write( the_jnode, iop->offset, buffer, count ); 4001c240: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 4001c244: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 4001c248: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001c24c: 7f ff ff 4b call 4001bf78 <== NOT EXECUTED 4001c250: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001c254: c2 04 60 4c ld [ %l1 + 0x4c ], %g1 <== NOT EXECUTED ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4001c258: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED ssize_t status; the_jnode = iop->file_info; status = IMFS_memfile_write( the_jnode, iop->offset, buffer, count ); iop->size = the_jnode->info.file.size; 4001c25c: c2 24 20 04 st %g1, [ %l0 + 4 ] <== NOT EXECUTED return status; } 4001c260: 81 c7 e0 08 ret <== NOT EXECUTED 4001c264: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000af4c : int miniIMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 4000af4c: 13 10 00 64 sethi %hi(0x40019000), %o1 4000af50: 15 10 00 66 sethi %hi(0x40019800), %o2 4000af54: 92 12 60 6c or %o1, 0x6c, %o1 4000af58: 94 12 a0 f4 or %o2, 0xf4, %o2 4000af5c: 96 10 00 0a mov %o2, %o3 4000af60: 82 13 c0 00 mov %o7, %g1 4000af64: 40 00 02 95 call 4000b9b8 4000af68: 9e 10 40 00 mov %g1, %o7 4000af6c: 01 00 00 00 nop <== NOT EXECUTED 400026b8 : int mknod( const char *pathname, mode_t mode, dev_t dev ) { 400026b8: 9d e3 bf 80 save %sp, -128, %sp rtems_filesystem_location_info_t temp_loc; int i; const char *name_start; int result; if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) ) 400026bc: 03 00 00 3c sethi %hi(0xf000), %g1 400026c0: b3 2e 60 10 sll %i1, 0x10, %i1 400026c4: b3 36 60 10 srl %i1, 0x10, %i1 400026c8: 84 8e 40 01 andcc %i1, %g1, %g2 400026cc: 02 80 00 4e be 40002804 400026d0: 03 00 00 04 sethi %hi(0x1000), %g1 rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) 400026d4: 80 a0 80 01 cmp %g2, %g1 400026d8: 02 80 00 18 be 40002738 400026dc: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 400026e0: c2 4e 00 00 ldsb [ %i0 ], %g1 400026e4: 80 a0 60 2f cmp %g1, 0x2f 400026e8: 02 80 00 1a be 40002750 400026ec: 80 a0 60 5c cmp %g1, 0x5c 400026f0: 02 80 00 18 be 40002750 <== NOT EXECUTED 400026f4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400026f8: 02 80 00 17 be 40002754 <== NOT EXECUTED 400026fc: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40002700: c6 00 61 30 ld [ %g1 + 0x130 ], %g3 ! 40019130 <== NOT EXECUTED 40002704: 88 10 20 00 clr %g4 <== NOT EXECUTED 40002708: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 4000270c: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED 40002710: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40002714: c4 27 bf e8 st %g2, [ %fp + -24 ] <== NOT EXECUTED 40002718: c2 00 e0 0c ld [ %g3 + 0xc ], %g1 <== NOT EXECUTED 4000271c: c2 27 bf ec st %g1, [ %fp + -20 ] <== NOT EXECUTED if ( !temp_loc.ops->evalformake_h ) { 40002720: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 40002724: c4 00 e0 10 ld [ %g3 + 0x10 ], %g2 <== NOT EXECUTED if ( !temp_loc.ops->evalformake_h ) { 40002728: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 4000272c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002730: 12 80 00 17 bne 4000278c <== NOT EXECUTED 40002734: c4 27 bf f0 st %g2, [ %fp + -16 ] <== NOT EXECUTED if ( result != 0 ) return -1; if ( !temp_loc.ops->mknod_h ) { rtems_filesystem_freenode( &temp_loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); 40002738: 40 00 2e 80 call 4000e138 <__errno> <== NOT EXECUTED 4000273c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002740: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40002744: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002748: 81 c7 e0 08 ret <== NOT EXECUTED 4000274c: 81 e8 00 00 restore <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 40002750: 03 10 00 64 sethi %hi(0x40019000), %g1 40002754: c6 00 61 30 ld [ %g1 + 0x130 ], %g3 ! 40019130 40002758: 88 10 20 01 mov 1, %g4 4000275c: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 40002760: c2 27 bf e4 st %g1, [ %fp + -28 ] 40002764: c4 00 e0 18 ld [ %g3 + 0x18 ], %g2 40002768: c4 27 bf e8 st %g2, [ %fp + -24 ] 4000276c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 40002770: c2 27 bf ec st %g1, [ %fp + -20 ] if ( !temp_loc.ops->evalformake_h ) { 40002774: c2 07 bf ec ld [ %fp + -20 ], %g1 rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 40002778: c4 00 e0 20 ld [ %g3 + 0x20 ], %g2 if ( !temp_loc.ops->evalformake_h ) { 4000277c: c2 00 60 04 ld [ %g1 + 4 ], %g1 40002780: 80 a0 60 00 cmp %g1, 0 40002784: 02 bf ff ed be 40002738 40002788: c4 27 bf f0 st %g2, [ %fp + -16 ] rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->evalformake_h)( 4000278c: 90 06 00 04 add %i0, %g4, %o0 40002790: a0 07 bf e4 add %fp, -28, %l0 40002794: 94 07 bf f4 add %fp, -12, %o2 40002798: 92 10 00 10 mov %l0, %o1 4000279c: 9f c0 40 00 call %g1 400027a0: b0 10 3f ff mov -1, %i0 &pathname[i], &temp_loc, &name_start ); if ( result != 0 ) 400027a4: 80 a2 20 00 cmp %o0, 0 400027a8: 12 bf ff e8 bne 40002748 400027ac: c2 07 bf ec ld [ %fp + -20 ], %g1 return -1; if ( !temp_loc.ops->mknod_h ) { 400027b0: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 400027b4: 80 a0 a0 00 cmp %g2, 0 400027b8: 02 80 00 19 be 4000281c 400027bc: d0 07 bf f4 ld [ %fp + -12 ], %o0 rtems_filesystem_freenode( &temp_loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc ); 400027c0: 92 10 00 19 mov %i1, %o1 400027c4: 94 10 00 1a mov %i2, %o2 400027c8: 96 10 00 1b mov %i3, %o3 400027cc: 9f c0 80 00 call %g2 400027d0: 98 10 00 10 mov %l0, %o4 rtems_filesystem_freenode( &temp_loc ); 400027d4: c2 07 bf ec ld [ %fp + -20 ], %g1 400027d8: 80 a0 60 00 cmp %g1, 0 400027dc: 02 bf ff db be 40002748 400027e0: b0 10 00 08 mov %o0, %i0 400027e4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 400027e8: 80 a0 60 00 cmp %g1, 0 400027ec: 02 80 00 0a be 40002814 400027f0: 01 00 00 00 nop 400027f4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400027f8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 400027fc: 81 c7 e0 08 ret <== NOT EXECUTED 40002800: 81 e8 00 00 restore <== NOT EXECUTED int i; const char *name_start; int result; if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) ) rtems_set_errno_and_return_minus_one( EINVAL ); 40002804: 40 00 2e 4d call 4000e138 <__errno> <== NOT EXECUTED 40002808: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000280c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40002810: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002814: 81 c7 e0 08 ret 40002818: 81 e8 00 00 restore ); if ( result != 0 ) return -1; if ( !temp_loc.ops->mknod_h ) { rtems_filesystem_freenode( &temp_loc ); 4000281c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40002820: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002824: 02 bf ff c5 be 40002738 <== NOT EXECUTED 40002828: 01 00 00 00 nop <== NOT EXECUTED 4000282c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002830: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40002834: 30 bf ff c1 b,a 40002738 <== NOT EXECUTED 4000c3d4 : rtems_filesystem_operations_table *fs_ops, rtems_filesystem_options_t options, char *device, char *mount_point ) { 4000c3d4: 9d e3 bf 88 save %sp, -120, %sp /* * Is there a file system operations table? */ if ( fs_ops == NULL ) { 4000c3d8: 80 a6 60 00 cmp %i1, 0 4000c3dc: 02 80 00 8c be 4000c60c 4000c3e0: a4 10 00 18 mov %i0, %l2 /* * Are the file system options valid? */ if ( options != RTEMS_FILESYSTEM_READ_ONLY && 4000c3e4: 80 a6 a0 01 cmp %i2, 1 4000c3e8: 18 80 00 89 bgu 4000c60c 4000c3ec: 01 00 00 00 nop errno = EINVAL; return -1; } /* Do they support being mounted at all ? */ if ( !fs_ops->fsmount_me_h ) { 4000c3f0: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 4000c3f4: 80 a0 60 00 cmp %g1, 0 4000c3f8: 02 80 00 4c be 4000c528 4000c3fc: 80 a6 e0 00 cmp %i3, 0 /* * Allocate a mount table entry */ size = sizeof(rtems_filesystem_mount_table_entry_t); if ( device ) 4000c400: 02 80 00 05 be 4000c414 4000c404: 90 10 20 64 mov 0x64, %o0 size += strlen( device ) + 1; 4000c408: 40 00 0c 2a call 4000f4b0 <== NOT EXECUTED 4000c40c: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED 4000c410: 90 02 20 65 add %o0, 0x65, %o0 <== NOT EXECUTED temp_mt_entry = malloc( size ); 4000c414: 7f ff d7 c4 call 40002324 4000c418: 01 00 00 00 nop if ( !temp_mt_entry ) { 4000c41c: a2 92 20 00 orcc %o0, 0, %l1 4000c420: 02 80 00 95 be 4000c674 4000c424: a0 10 00 11 mov %l1, %l0 errno = ENOMEM; return -1; } temp_mt_entry->mt_fs_root.mt_entry = temp_mt_entry; temp_mt_entry->options = options; 4000c428: f4 24 60 28 st %i2, [ %l1 + 0x28 ] if ( device ) { 4000c42c: 80 a6 e0 00 cmp %i3, 0 4000c430: 02 80 00 47 be 4000c54c 4000c434: e2 24 20 24 st %l1, [ %l0 + 0x24 ] temp_mt_entry->dev = 4000c438: 90 04 60 64 add %l1, 0x64, %o0 <== NOT EXECUTED (char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t ); strcpy( temp_mt_entry->dev, device ); 4000c43c: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 4000c440: 40 00 0b fc call 4000f430 <== NOT EXECUTED 4000c444: d0 24 60 60 st %o0, [ %l1 + 0x60 ] <== NOT EXECUTED /* * The mount_point should be a directory with read/write/execute * permissions in the existing tree. */ if ( mount_point ) { 4000c448: 80 a7 20 00 cmp %i4, 0 4000c44c: 02 80 00 20 be 4000c4cc 4000c450: 90 10 00 1c mov %i4, %o0 if ( rtems_filesystem_evaluate_path( 4000c454: 92 10 20 07 mov 7, %o1 <== NOT EXECUTED 4000c458: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 4000c45c: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 4000c460: 7f ff d6 f0 call 40002020 <== NOT EXECUTED 4000c464: 94 10 00 1c mov %i4, %o2 <== NOT EXECUTED 4000c468: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000c46c: 02 80 00 33 be 4000c538 <== NOT EXECUTED 4000c470: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED /* * Test for node_type_h */ if (!loc.ops->node_type_h) { 4000c474: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 4000c478: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c47c: 02 80 00 5a be 4000c5e4 <== NOT EXECUTED 4000c480: 01 00 00 00 nop <== NOT EXECUTED /* * Test to see if it is a directory */ if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 4000c484: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c488: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 4000c48c: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4000c490: 02 80 00 31 be 4000c554 <== NOT EXECUTED 4000c494: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED errno = ENOTDIR; 4000c498: 40 00 07 28 call 4000e138 <__errno> <== NOT EXECUTED 4000c49c: 01 00 00 00 nop <== NOT EXECUTED 4000c4a0: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 4000c4a4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000c4a8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000c4ac: 7f ff d7 75 call 40002280 <== NOT EXECUTED 4000c4b0: a0 10 00 1c mov %i4, %l0 <== NOT EXECUTED if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); 4000c4b4: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000c4b8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c4bc: 32 80 00 5a bne,a 4000c624 <== NOT EXECUTED 4000c4c0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4000c4c4: 81 c7 e0 08 ret <== NOT EXECUTED 4000c4c8: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED * This is a mount of the base file system --> The * mt_point_node.node_access will be set to null to indicate that this * is the root of the entire file system. */ temp_mt_entry->mt_fs_root.node_access = NULL; 4000c4cc: c0 24 60 18 clr [ %l1 + 0x18 ] temp_mt_entry->mt_fs_root.handlers = NULL; 4000c4d0: c0 24 60 1c clr [ %l1 + 0x1c ] temp_mt_entry->mt_fs_root.ops = NULL; 4000c4d4: c0 24 60 20 clr [ %l1 + 0x20 ] temp_mt_entry->mt_point_node.node_access = NULL; 4000c4d8: c0 24 60 08 clr [ %l1 + 8 ] temp_mt_entry->mt_point_node.handlers = NULL; 4000c4dc: c0 24 60 0c clr [ %l1 + 0xc ] temp_mt_entry->mt_point_node.ops = NULL; 4000c4e0: c0 24 60 10 clr [ %l1 + 0x10 ] temp_mt_entry->mt_point_node.mt_entry = NULL; 4000c4e4: c0 24 60 14 clr [ %l1 + 0x14 ] 4000c4e8: a0 10 20 00 clr %l0 } if ( fs_ops->fsmount_me_h( temp_mt_entry ) ) { 4000c4ec: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 4000c4f0: 9f c0 40 00 call %g1 4000c4f4: 90 10 00 11 mov %l1, %o0 4000c4f8: 80 a2 20 00 cmp %o0, 0 4000c4fc: 12 80 00 51 bne 4000c640 4000c500: 11 10 00 67 sethi %hi(0x40019c00), %o0 /* * Add the mount table entry to the mount table chain */ Chain_Append( &rtems_filesystem_mount_table_control, &temp_mt_entry->Node ); 4000c504: 92 10 00 11 mov %l1, %o1 4000c508: 7f ff e9 ed call 40006cbc <_Chain_Append> 4000c50c: 90 12 22 18 or %o0, 0x218, %o0 if ( mt_entry ) 4000c510: 80 a4 a0 00 cmp %l2, 0 4000c514: 02 80 00 03 be 4000c520 4000c518: b0 10 20 00 clr %i0 *mt_entry = temp_mt_entry; 4000c51c: e2 24 80 00 st %l1, [ %l2 ] 4000c520: 81 c7 e0 08 ret 4000c524: 81 e8 00 00 restore return -1; } /* Do they support being mounted at all ? */ if ( !fs_ops->fsmount_me_h ) { errno = ENOTSUP; 4000c528: 40 00 07 04 call 4000e138 <__errno> <== NOT EXECUTED 4000c52c: a0 10 20 00 clr %l0 <== NOT EXECUTED 4000c530: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000c534: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000c538: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000c53c: 7f ff d7 51 call 40002280 <== NOT EXECUTED 4000c540: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); return -1; } 4000c544: 81 c7 e0 08 ret <== NOT EXECUTED 4000c548: 81 e8 00 00 restore <== NOT EXECUTED if ( device ) { temp_mt_entry->dev = (char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t ); strcpy( temp_mt_entry->dev, device ); } else temp_mt_entry->dev = 0; 4000c54c: 10 bf ff bf b 4000c448 4000c550: c0 24 60 60 clr [ %l1 + 0x60 ] /* * For each mount table entry */ for ( the_node = rtems_filesystem_mount_table_control.first; 4000c554: c4 00 62 18 ld [ %g1 + 0x218 ], %g2 <== NOT EXECUTED 4000c558: 82 10 62 18 or %g1, 0x218, %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000c55c: 88 00 60 04 add %g1, 4, %g4 <== NOT EXECUTED !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node ); 4000c560: 80 a0 80 04 cmp %g2, %g4 <== NOT EXECUTED 4000c564: 02 80 00 0e be 4000c59c <== NOT EXECUTED 4000c568: c6 07 bf e8 ld [ %fp + -24 ], %g3 <== NOT EXECUTED the_node = the_node->next ) { the_mount_entry = (rtems_filesystem_mount_table_entry_t *) the_node; if ( the_mount_entry->mt_fs_root.node_access == loc->node_access ) 4000c56c: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 4000c570: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000c574: 32 80 00 07 bne,a 4000c590 <== NOT EXECUTED 4000c578: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED 4000c57c: 30 80 00 1f b,a 4000c5f8 <== NOT EXECUTED 4000c580: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000c584: 02 80 00 1d be 4000c5f8 <== NOT EXECUTED 4000c588: 01 00 00 00 nop <== NOT EXECUTED * For each mount table entry */ for ( the_node = rtems_filesystem_mount_table_control.first; !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node ); the_node = the_node->next ) { 4000c58c: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED /* * For each mount table entry */ for ( the_node = rtems_filesystem_mount_table_control.first; !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node ); 4000c590: 80 a0 80 04 cmp %g2, %g4 <== NOT EXECUTED 4000c594: 32 bf ff fb bne,a 4000c580 <== NOT EXECUTED 4000c598: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED * traverse the tree. */ temp_mt_entry->mt_point_node.node_access = loc.node_access; temp_mt_entry->mt_point_node.handlers = loc.handlers; temp_mt_entry->mt_point_node.ops = loc.ops; 4000c59c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED * may have been allocated in loc should not be sent to freenode * until the system is unmounted. It may be needed to correctly * traverse the tree. */ temp_mt_entry->mt_point_node.node_access = loc.node_access; 4000c5a0: c6 24 60 08 st %g3, [ %l1 + 8 ] <== NOT EXECUTED temp_mt_entry->mt_point_node.handlers = loc.handlers; 4000c5a4: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED temp_mt_entry->mt_point_node.ops = loc.ops; temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry; 4000c5a8: c6 07 bf f4 ld [ %fp + -12 ], %g3 <== NOT EXECUTED /* * This link to the parent is only done when we are dealing with system * below the base file system */ if ( !loc.ops->mount_h ){ 4000c5ac: c8 00 60 20 ld [ %g1 + 0x20 ], %g4 <== NOT EXECUTED * until the system is unmounted. It may be needed to correctly * traverse the tree. */ temp_mt_entry->mt_point_node.node_access = loc.node_access; temp_mt_entry->mt_point_node.handlers = loc.handlers; 4000c5b0: c4 24 60 0c st %g2, [ %l1 + 0xc ] <== NOT EXECUTED temp_mt_entry->mt_point_node.ops = loc.ops; temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry; 4000c5b4: c6 24 60 14 st %g3, [ %l1 + 0x14 ] <== NOT EXECUTED /* * This link to the parent is only done when we are dealing with system * below the base file system */ if ( !loc.ops->mount_h ){ 4000c5b8: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 4000c5bc: 02 80 00 0a be 4000c5e4 <== NOT EXECUTED 4000c5c0: c2 24 60 10 st %g1, [ %l1 + 0x10 ] <== NOT EXECUTED errno = ENOTSUP; goto cleanup_and_bail; } if ( loc.ops->mount_h( temp_mt_entry ) ) { 4000c5c4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000c5c8: 9f c1 00 00 call %g4 <== NOT EXECUTED 4000c5cc: a0 10 00 1c mov %i4, %l0 <== NOT EXECUTED 4000c5d0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c5d4: 22 bf ff c7 be,a 4000c4f0 <== NOT EXECUTED 4000c5d8: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000c5dc: 10 bf ff b4 b 4000c4ac <== NOT EXECUTED 4000c5e0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED * This link to the parent is only done when we are dealing with system * below the base file system */ if ( !loc.ops->mount_h ){ errno = ENOTSUP; 4000c5e4: 40 00 06 d5 call 4000e138 <__errno> <== NOT EXECUTED 4000c5e8: 01 00 00 00 nop <== NOT EXECUTED 4000c5ec: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4000c5f0: 10 bf ff ae b 4000c4a8 <== NOT EXECUTED 4000c5f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * You can only mount one file system onto a single mount point. */ if ( Is_node_fs_root( &loc ) ){ errno = EBUSY; 4000c5f8: 40 00 06 d0 call 4000e138 <__errno> <== NOT EXECUTED 4000c5fc: 01 00 00 00 nop <== NOT EXECUTED 4000c600: 82 10 20 10 mov 0x10, %g1 ! 10 <== NOT EXECUTED 4000c604: 10 bf ff a9 b 4000c4a8 <== NOT EXECUTED 4000c608: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * Are the file system options valid? */ if ( options != RTEMS_FILESYSTEM_READ_ONLY && options != RTEMS_FILESYSTEM_READ_WRITE ) { errno = EINVAL; 4000c60c: 40 00 06 cb call 4000e138 <__errno> <== NOT EXECUTED 4000c610: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c614: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4000c618: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c61c: 81 c7 e0 08 ret <== NOT EXECUTED 4000c620: 81 e8 00 00 restore <== NOT EXECUTED cleanup_and_bail: free( temp_mt_entry ); if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); 4000c624: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c628: 02 bf ff a7 be 4000c4c4 <== NOT EXECUTED 4000c62c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000c630: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c634: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c638: 81 c7 e0 08 ret <== NOT EXECUTED 4000c63c: 81 e8 00 00 restore <== NOT EXECUTED temp_mt_entry->mt_point_node.mt_entry = NULL; } if ( fs_ops->fsmount_me_h( temp_mt_entry ) ) { /* try to undo the mount operation */ if ( loc.ops->unmount_h ) { 4000c640: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000c644: c2 00 60 28 ld [ %g1 + 0x28 ], %g1 <== NOT EXECUTED 4000c648: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c64c: 02 80 00 04 be 4000c65c <== NOT EXECUTED 4000c650: 01 00 00 00 nop <== NOT EXECUTED loc.ops->unmount_h( temp_mt_entry ); 4000c654: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c658: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000c65c: 7f ff d7 09 call 40002280 <== NOT EXECUTED 4000c660: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( loc_to_free ) 4000c664: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4000c668: 32 bf ff 94 bne,a 4000c4b8 <== NOT EXECUTED 4000c66c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000c670: 30 bf ff 95 b,a 4000c4c4 <== NOT EXECUTED if ( device ) size += strlen( device ) + 1; temp_mt_entry = malloc( size ); if ( !temp_mt_entry ) { errno = ENOMEM; 4000c674: 40 00 06 b1 call 4000e138 <__errno> <== NOT EXECUTED 4000c678: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c67c: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000c680: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c684: 81 c7 e0 08 ret <== NOT EXECUTED 4000c688: 81 e8 00 00 restore <== NOT EXECUTED 400028c8 : */ int newlib_free_buffers( FILE *fp ) { 400028c8: 9d e3 bf 98 save %sp, -104, %sp switch ( fileno(fp) ) { 400028cc: 40 00 2e eb call 4000e478 400028d0: 90 10 00 18 mov %i0, %o0 400028d4: 80 a2 20 02 cmp %o0, 2 400028d8: 28 80 00 06 bleu,a 400028f0 400028dc: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 fp->_flags &= ~__SMBF; fp->_bf._base = fp->_p = (unsigned char *) NULL; } break; default: fclose(fp); 400028e0: 40 00 2e 6c call 4000e290 <== NOT EXECUTED 400028e4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 400028e8: 81 c7 e0 08 ret 400028ec: 91 e8 20 00 restore %g0, 0, %o0 { switch ( fileno(fp) ) { case 0: case 1: case 2: if (fp->_flags & __SMBF) { 400028f0: 80 88 60 80 btst 0x80, %g1 400028f4: 02 bf ff fd be 400028e8 400028f8: 01 00 00 00 nop free( fp->_bf._base ); 400028fc: 7f ff fe 61 call 40002280 40002900: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 fp->_flags &= ~__SMBF; 40002904: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 40002908: c0 26 20 10 clr [ %i0 + 0x10 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 4000290c: 82 08 7f 7f and %g1, -129, %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 40002910: c0 26 00 00 clr [ %i0 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 40002914: c2 36 20 0c sth %g1, [ %i0 + 0xc ] break; default: fclose(fp); } return 0; } 40002918: 81 c7 e0 08 ret 4000291c: 91 e8 20 00 restore %g0, 0, %o0 40002944 : rtems_device_driver null_initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *pargp ) { 40002944: 9d e3 bf 98 save %sp, -104, %sp rtems_device_driver status; if ( !initialized ) { 40002948: 05 10 00 74 sethi %hi(0x4001d000), %g2 4000294c: c2 48 a3 f0 ldsb [ %g2 + 0x3f0 ], %g1 ! 4001d3f0 40002950: 80 a0 60 00 cmp %g1, 0 40002954: 02 80 00 04 be 40002964 40002958: 82 10 20 01 mov 1, %g1 NULL_major = major; } return RTEMS_SUCCESSFUL; } 4000295c: 81 c7 e0 08 ret 40002960: 91 e8 20 00 restore %g0, 0, %o0 rtems_device_driver status; if ( !initialized ) { initialized = 1; status = rtems_io_register_name( 40002964: 11 10 00 6b sethi %hi(0x4001ac00), %o0 ) { rtems_device_driver status; if ( !initialized ) { initialized = 1; 40002968: c2 28 a3 f0 stb %g1, [ %g2 + 0x3f0 ] status = rtems_io_register_name( 4000296c: 90 12 22 60 or %o0, 0x260, %o0 40002970: 92 10 00 18 mov %i0, %o1 40002974: 40 00 00 50 call 40002ab4 40002978: 94 10 20 00 clr %o2 "/dev/null", major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) 4000297c: 80 a2 20 00 cmp %o0, 0 40002980: 12 80 00 05 bne 40002994 40002984: 03 10 00 75 sethi %hi(0x4001d400), %g1 rtems_fatal_error_occurred(status); NULL_major = major; 40002988: f0 20 61 70 st %i0, [ %g1 + 0x170 ] ! 4001d570 } return RTEMS_SUCCESSFUL; } 4000298c: 81 c7 e0 08 ret 40002990: 91 e8 20 00 restore %g0, 0, %o0 major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred(status); 40002994: 40 00 13 ae call 4000784c <== NOT EXECUTED 40002998: 01 00 00 00 nop <== NOT EXECUTED NULL_major = major; 4000299c: 03 10 00 75 sethi %hi(0x4001d400), %g1 <== NOT EXECUTED 400029a0: 10 bf ff fb b 4000298c <== NOT EXECUTED 400029a4: f0 20 61 70 st %i0, [ %g1 + 0x170 ] ! 4001d570 <== NOT EXECUTED 40002920 : void *pargp ) { rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp; if ( rw_args ) 40002920: 80 a2 a0 00 cmp %o2, 0 40002924: 02 80 00 04 be 40002934 40002928: 01 00 00 00 nop rw_args->bytes_moved = rw_args->count; 4000292c: c2 02 a0 0c ld [ %o2 + 0xc ], %g1 <== NOT EXECUTED 40002930: c2 22 a0 14 st %g1, [ %o2 + 0x14 ] <== NOT EXECUTED return NULL_SUCCESSFUL; } 40002934: 81 c3 e0 08 retl 40002938: 90 10 20 00 clr %o0 40002b4c : int open( const char *pathname, int flags, ... ) { 40002b4c: 9d e3 bf 80 save %sp, -128, %sp 40002b50: f6 27 a0 50 st %i3, [ %fp + 0x50 ] 40002b54: f8 27 a0 54 st %i4, [ %fp + 0x54 ] 40002b58: fa 27 a0 58 st %i5, [ %fp + 0x58 ] 40002b5c: f4 27 a0 4c st %i2, [ %fp + 0x4c ] /* * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; 40002b60: 82 06 60 01 add %i1, 1, %g1 if ( ( status & _FREAD ) == _FREAD ) eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 40002b64: 80 88 60 02 btst 2, %g1 * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; if ( ( status & _FREAD ) == _FREAD ) 40002b68: 82 08 60 01 and %g1, 1, %g1 eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 40002b6c: 02 80 00 03 be 40002b78 40002b70: a1 28 60 02 sll %g1, 2, %l0 eval_flags |= RTEMS_LIBIO_PERMS_WRITE; 40002b74: a0 14 20 02 or %l0, 2, %l0 va_start(ap, flags); mode = va_arg( ap, int ); 40002b78: 82 07 a0 50 add %fp, 0x50, %g1 * descriptors are obtained using socket(), not open(). */ /* allocate a file control block */ iop = rtems_libio_allocate(); if ( iop == 0 ) { 40002b7c: b8 10 20 17 mov 0x17, %i4 * code does not require changes here since network file * descriptors are obtained using socket(), not open(). */ /* allocate a file control block */ iop = rtems_libio_allocate(); 40002b80: 40 00 25 b8 call 4000c260 40002b84: c2 27 bf f4 st %g1, [ %fp + -12 ] if ( iop == 0 ) { 40002b88: ba 92 20 00 orcc %o0, 0, %i5 40002b8c: 02 80 00 62 be 40002d14 40002b90: 92 10 00 10 mov %l0, %o1 /* * See if the file exists. */ status = rtems_filesystem_evaluate_path( 40002b94: b6 07 bf e4 add %fp, -28, %i3 40002b98: 90 10 00 18 mov %i0, %o0 40002b9c: 94 10 00 1b mov %i3, %o2 40002ba0: 7f ff fd 20 call 40002020 40002ba4: 96 10 20 01 mov 1, %o3 pathname, eval_flags, &loc, TRUE ); if ( status == -1 ) { 40002ba8: 80 a2 3f ff cmp %o0, -1 40002bac: 02 80 00 73 be 40002d78 40002bb0: 82 0e 6a 00 and %i1, 0xa00, %g1 if ( status != 0 ) { /* The file did not exist */ rc = EACCES; goto done; } } else if ((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) { 40002bb4: b8 10 20 11 mov 0x11, %i4 40002bb8: 80 a0 6a 00 cmp %g1, 0xa00 40002bbc: 02 80 00 62 be 40002d44 40002bc0: a0 10 00 1b mov %i3, %l0 /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40002bc4: c2 07 bf e8 ld [ %fp + -24 ], %g1 iop->file_info = loc.node_access; 40002bc8: c4 07 bf e4 ld [ %fp + -28 ], %g2 /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40002bcc: c2 27 60 30 st %g1, [ %i5 + 0x30 ] iop->file_info = loc.node_access; 40002bd0: c4 27 60 2c st %g2, [ %i5 + 0x2c ] iop->flags |= rtems_libio_fcntl_flags( flags ); 40002bd4: e0 07 60 0c ld [ %i5 + 0xc ], %l0 40002bd8: 40 00 25 e0 call 4000c358 40002bdc: 90 10 00 19 mov %i1, %o0 iop->pathinfo = loc; 40002be0: c2 07 bf e4 ld [ %fp + -28 ], %g1 if ( !iop->handlers->open_h ) { 40002be4: c4 07 60 30 ld [ %i5 + 0x30 ], %g2 */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); iop->pathinfo = loc; 40002be8: c2 27 60 10 st %g1, [ %i5 + 0x10 ] 40002bec: c2 07 bf e8 ld [ %fp + -24 ], %g1 if ( !iop->handlers->open_h ) { 40002bf0: c4 00 80 00 ld [ %g2 ], %g2 */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); iop->pathinfo = loc; 40002bf4: c2 27 60 14 st %g1, [ %i5 + 0x14 ] 40002bf8: c2 07 bf ec ld [ %fp + -20 ], %g1 * returned by successful path evaluation. */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 40002bfc: 90 12 00 10 or %o0, %l0, %o0 iop->pathinfo = loc; 40002c00: c2 27 60 18 st %g1, [ %i5 + 0x18 ] 40002c04: c2 07 bf f0 ld [ %fp + -16 ], %g1 * returned by successful path evaluation. */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 40002c08: d0 27 60 0c st %o0, [ %i5 + 0xc ] iop->pathinfo = loc; if ( !iop->handlers->open_h ) { 40002c0c: 80 a0 a0 00 cmp %g2, 0 40002c10: 02 80 00 54 be 40002d60 40002c14: c2 27 60 1c st %g1, [ %i5 + 0x1c ] rc = ENOTSUP; goto done; } rc = (*iop->handlers->open_h)( iop, pathname, flags, mode ); 40002c18: 92 10 00 18 mov %i0, %o1 40002c1c: 96 10 00 1a mov %i2, %o3 40002c20: 90 10 00 1d mov %i5, %o0 40002c24: 9f c0 80 00 call %g2 40002c28: 94 10 00 19 mov %i1, %o2 if ( rc ) 40002c2c: b8 92 20 00 orcc %o0, 0, %i4 40002c30: 12 80 00 29 bne 40002cd4 40002c34: 80 8e 64 00 btst 0x400, %i1 /* * Optionally truncate the file. */ if ( (flags & O_TRUNC) == O_TRUNC ) { 40002c38: 02 80 00 16 be 40002c90 40002c3c: 21 10 00 66 sethi %hi(0x40019800), %l0 rc = ftruncate( iop - rtems_libio_iops, 0 ); 40002c40: c4 04 21 44 ld [ %l0 + 0x144 ], %g2 ! 40019944 <== NOT EXECUTED 40002c44: 92 10 20 00 clr %o1 <== NOT EXECUTED 40002c48: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 40002c4c: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 40002c50: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 40002c54: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40002c58: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40002c5c: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 40002c60: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40002c64: 87 2a 20 0c sll %o0, 0xc, %g3 <== NOT EXECUTED 40002c68: 90 02 00 03 add %o0, %g3, %o0 <== NOT EXECUTED 40002c6c: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 40002c70: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 40002c74: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40002c78: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 40002c7c: 40 00 24 9f call 4000bef8 <== NOT EXECUTED 40002c80: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED if ( rc ) { 40002c84: b8 92 20 00 orcc %o0, 0, %i4 <== NOT EXECUTED 40002c88: 12 80 00 5a bne 40002df0 <== NOT EXECUTED 40002c8c: 01 00 00 00 nop <== NOT EXECUTED if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); rtems_set_errno_and_return_minus_one( rc ); } return iop - rtems_libio_iops; 40002c90: c6 04 21 44 ld [ %l0 + 0x144 ], %g3 40002c94: 86 27 40 03 sub %i5, %g3, %g3 40002c98: 87 38 e0 02 sra %g3, 2, %g3 40002c9c: 89 28 e0 02 sll %g3, 2, %g4 40002ca0: 85 28 e0 06 sll %g3, 6, %g2 40002ca4: 84 20 80 04 sub %g2, %g4, %g2 40002ca8: 83 28 a0 06 sll %g2, 6, %g1 40002cac: 82 20 40 02 sub %g1, %g2, %g1 40002cb0: 89 28 60 0c sll %g1, 0xc, %g4 40002cb4: 82 00 40 04 add %g1, %g4, %g1 40002cb8: 82 00 40 03 add %g1, %g3, %g1 40002cbc: 83 28 60 04 sll %g1, 4, %g1 40002cc0: 82 20 40 03 sub %g1, %g3, %g1 40002cc4: 83 28 60 02 sll %g1, 2, %g1 40002cc8: b0 20 c0 01 sub %g3, %g1, %i0 40002ccc: 81 c7 e0 08 ret 40002cd0: 81 e8 00 00 restore /* * Single exit and clean up path. */ done: va_end(ap); 40002cd4: a0 10 00 1b mov %i3, %l0 <== NOT EXECUTED if ( rc ) { if ( iop ) rtems_libio_free( iop ); 40002cd8: 40 00 25 4b call 4000c204 <== NOT EXECUTED 40002cdc: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED if ( loc_to_free ) 40002ce0: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40002ce4: 02 80 00 0c be 40002d14 40002ce8: 01 00 00 00 nop rtems_filesystem_freenode( loc_to_free ); 40002cec: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40002cf0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002cf4: 02 80 00 08 be 40002d14 <== NOT EXECUTED 40002cf8: 01 00 00 00 nop <== NOT EXECUTED 40002cfc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40002d00: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002d04: 02 80 00 04 be 40002d14 <== NOT EXECUTED 40002d08: 01 00 00 00 nop <== NOT EXECUTED 40002d0c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002d10: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( rc ); 40002d14: 40 00 2d 09 call 4000e138 <__errno> 40002d18: b0 10 3f ff mov -1, %i0 40002d1c: f8 22 00 00 st %i4, [ %o0 ] 40002d20: 81 c7 e0 08 ret 40002d24: 81 e8 00 00 restore } /* Create the node for the new regular file */ rc = mknod( pathname, S_IFREG | mode, 0LL ); if ( rc ) { rc = errno; 40002d28: 40 00 2d 04 call 4000e138 <__errno> <== NOT EXECUTED 40002d2c: 01 00 00 00 nop <== NOT EXECUTED 40002d30: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED */ done: va_end(ap); if ( rc ) { 40002d34: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40002d38: 02 bf ff d6 be 40002c90 <== NOT EXECUTED 40002d3c: 21 10 00 66 sethi %hi(0x40019800), %l0 <== NOT EXECUTED 40002d40: a0 10 20 00 clr %l0 <== NOT EXECUTED if ( iop ) 40002d44: 80 a7 60 00 cmp %i5, 0 40002d48: 22 bf ff e7 be,a 40002ce4 40002d4c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED rtems_libio_free( iop ); 40002d50: 40 00 25 2d call 4000c204 40002d54: 90 10 00 1d mov %i5, %o0 if ( loc_to_free ) 40002d58: 10 bf ff e3 b 40002ce4 40002d5c: 80 a4 20 00 cmp %l0, 0 rtems_filesystem_freenode( loc_to_free ); rtems_set_errno_and_return_minus_one( rc ); } return iop - rtems_libio_iops; 40002d60: a0 10 00 1b mov %i3, %l0 <== NOT EXECUTED done: va_end(ap); if ( rc ) { if ( iop ) 40002d64: 80 a7 60 00 cmp %i5, 0 <== NOT EXECUTED 40002d68: 12 bf ff fa bne 40002d50 <== NOT EXECUTED 40002d6c: b8 10 20 86 mov 0x86, %i4 <== NOT EXECUTED rtems_libio_free( iop ); if ( loc_to_free ) 40002d70: 10 bf ff dd b 40002ce4 <== NOT EXECUTED 40002d74: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED status = rtems_filesystem_evaluate_path( pathname, eval_flags, &loc, TRUE ); if ( status == -1 ) { if ( errno != ENOENT ) { 40002d78: 40 00 2c f0 call 4000e138 <__errno> 40002d7c: 01 00 00 00 nop 40002d80: c2 02 00 00 ld [ %o0 ], %g1 40002d84: 80 a0 60 02 cmp %g1, 2 40002d88: 12 bf ff e8 bne 40002d28 40002d8c: 80 8e 62 00 btst 0x200, %i1 rc = errno; goto done; } /* If the file does not exist and we are not trying to create it--> error */ if ( !(flags & O_CREAT) ) { 40002d90: b8 10 20 02 mov 2, %i4 40002d94: 02 bf ff ec be 40002d44 40002d98: a0 10 20 00 clr %l0 rc = ENOENT; goto done; } /* Create the node for the new regular file */ rc = mknod( pathname, S_IFREG | mode, 0LL ); 40002d9c: 13 3f ff e0 sethi %hi(0xffff8000), %o1 <== NOT EXECUTED 40002da0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002da4: 92 16 80 09 or %i2, %o1, %o1 <== NOT EXECUTED 40002da8: 94 10 20 00 clr %o2 <== NOT EXECUTED 40002dac: 93 2a 60 10 sll %o1, 0x10, %o1 <== NOT EXECUTED 40002db0: 96 10 20 00 clr %o3 <== NOT EXECUTED 40002db4: 7f ff fe 41 call 400026b8 <== NOT EXECUTED 40002db8: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED if ( rc ) { 40002dbc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40002dc0: 12 bf ff da bne 40002d28 <== NOT EXECUTED 40002dc4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rc = errno; goto done; } /* Sanity check to see if the file name exists after the mknod() */ status = rtems_filesystem_evaluate_path( pathname, 0x0, &loc, TRUE ); 40002dc8: 92 10 20 00 clr %o1 <== NOT EXECUTED 40002dcc: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40002dd0: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40002dd4: 7f ff fc 93 call 40002020 <== NOT EXECUTED 40002dd8: b8 10 20 0d mov 0xd, %i4 <== NOT EXECUTED if ( status != 0 ) { /* The file did not exist */ 40002ddc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40002de0: 12 bf ff d9 bne 40002d44 <== NOT EXECUTED 40002de4: a0 10 20 00 clr %l0 <== NOT EXECUTED /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40002de8: 10 bf ff 78 b 40002bc8 <== NOT EXECUTED 40002dec: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED */ if ( (flags & O_TRUNC) == O_TRUNC ) { rc = ftruncate( iop - rtems_libio_iops, 0 ); if ( rc ) { if(errno) rc = errno; 40002df0: 40 00 2c d2 call 4000e138 <__errno> <== NOT EXECUTED 40002df4: 01 00 00 00 nop <== NOT EXECUTED 40002df8: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40002dfc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002e00: 12 80 00 15 bne 40002e54 <== NOT EXECUTED 40002e04: 01 00 00 00 nop <== NOT EXECUTED close( iop - rtems_libio_iops ); 40002e08: c4 04 21 44 ld [ %l0 + 0x144 ], %g2 <== NOT EXECUTED 40002e0c: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 40002e10: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 40002e14: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 40002e18: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40002e1c: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40002e20: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 40002e24: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40002e28: 87 2a 20 0c sll %o0, 0xc, %g3 <== NOT EXECUTED 40002e2c: ba 10 20 00 clr %i5 <== NOT EXECUTED 40002e30: 90 02 00 03 add %o0, %g3, %o0 <== NOT EXECUTED 40002e34: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 40002e38: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 40002e3c: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40002e40: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 40002e44: 40 00 23 fc call 4000be34 <== NOT EXECUTED 40002e48: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED */ done: va_end(ap); if ( rc ) { 40002e4c: 10 bf ff bb b 40002d38 <== NOT EXECUTED 40002e50: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED */ if ( (flags & O_TRUNC) == O_TRUNC ) { rc = ftruncate( iop - rtems_libio_iops, 0 ); if ( rc ) { if(errno) rc = errno; 40002e54: 40 00 2c b9 call 4000e138 <__errno> <== NOT EXECUTED 40002e58: 01 00 00 00 nop <== NOT EXECUTED 40002e5c: 10 bf ff eb b 40002e08 <== NOT EXECUTED 40002e60: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED 40002ad0 : /* * This is a replaceable stub */ void open_dev_console(void) { 40002ad0: 9d e3 bf 98 save %sp, -104, %sp int error_code = 'S' << 24 | 'T' << 16 | 'D' << 8; /* * Attempt to open /dev/console. */ if ((stdin_fd = open("/dev/console", O_RDONLY, 0)) == -1) { 40002ad4: 31 10 00 5f sethi %hi(0x40017c00), %i0 40002ad8: 92 10 20 00 clr %o1 40002adc: 90 16 21 70 or %i0, 0x170, %o0 40002ae0: 40 00 00 1b call 40002b4c 40002ae4: 94 10 20 00 clr %o2 40002ae8: 80 a2 3f ff cmp %o0, -1 40002aec: 02 80 00 0f be 40002b28 40002af0: 90 16 21 70 or %i0, 0x170, %o0 /* * But if we find /dev/console once, we better find it twice more * or something is REALLY wrong. */ if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1) 40002af4: 92 10 20 01 mov 1, %o1 40002af8: 40 00 00 15 call 40002b4c 40002afc: 94 10 20 00 clr %o2 40002b00: 80 a2 3f ff cmp %o0, -1 40002b04: 02 80 00 0e be 40002b3c 40002b08: 11 14 d5 11 sethi %hi(0x53544400), %o0 rtems_fatal_error_occurred( error_code | '1' ); if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1) 40002b0c: 90 16 21 70 or %i0, 0x170, %o0 40002b10: 92 10 20 01 mov 1, %o1 40002b14: 40 00 00 0e call 40002b4c 40002b18: 94 10 20 00 clr %o2 40002b1c: 80 a2 3f ff cmp %o0, -1 40002b20: 02 80 00 04 be 40002b30 40002b24: 31 14 d5 11 sethi %hi(0x53544400), %i0 40002b28: 81 c7 e0 08 ret 40002b2c: 81 e8 00 00 restore rtems_fatal_error_occurred( error_code | '2' ); 40002b30: b0 16 20 32 or %i0, 0x32, %i0 <== NOT EXECUTED 40002b34: 40 00 0f b0 call 400069f4 <== NOT EXECUTED 40002b38: 81 e8 00 00 restore <== NOT EXECUTED /* * But if we find /dev/console once, we better find it twice more * or something is REALLY wrong. */ if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1) rtems_fatal_error_occurred( error_code | '1' ); 40002b3c: 40 00 0f ae call 400069f4 <== NOT EXECUTED 40002b40: 90 12 20 31 or %o0, 0x31, %o0 <== NOT EXECUTED if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1) 40002b44: 10 bf ff f3 b 40002b10 <== NOT EXECUTED 40002b48: 90 16 21 70 or %i0, 0x170, %o0 <== NOT EXECUTED 40019578 : * open a directory. */ DIR * opendir(name) const char *name; { 40019578: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register DIR *dirp; register int fd; if ((fd = open(name, 0)) == -1) 4001957c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019580: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019584: 7f ff b2 b3 call 40006050 <== NOT EXECUTED 40019588: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001958c: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40019590: 02 80 00 18 be 400195f0 <== NOT EXECUTED 40019594: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return NULL; if (fcntl(fd, F_SETFD, 1) == -1 || 40019598: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 4001959c: 40 00 27 72 call 40023364 <== NOT EXECUTED 400195a0: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 400195a4: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 400195a8: 02 80 00 15 be 400195fc <== NOT EXECUTED 400195ac: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400195b0: 7f ff af e8 call 40005550 <== NOT EXECUTED 400195b4: 90 10 20 18 mov 0x18, %o0 <== NOT EXECUTED 400195b8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400195bc: 22 80 00 10 be,a 400195fc <== NOT EXECUTED 400195c0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400195c4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED * If CLSIZE is an exact multiple of DIRBLKSIZ, use a CLSIZE * buffer that it cluster boundary aligned. * Hopefully this can be a big win someday by allowing page trades * to user space to be done by getdirentries() */ dirp->dd_buf = malloc (512); 400195c8: 7f ff af e2 call 40005550 <== NOT EXECUTED 400195cc: 90 10 22 00 mov 0x200, %o0 <== NOT EXECUTED dirp->dd_len = 512; 400195d0: 82 10 22 00 mov 0x200, %g1 <== NOT EXECUTED * If CLSIZE is an exact multiple of DIRBLKSIZ, use a CLSIZE * buffer that it cluster boundary aligned. * Hopefully this can be a big win someday by allowing page trades * to user space to be done by getdirentries() */ dirp->dd_buf = malloc (512); 400195d4: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED dirp->dd_len = 512; if (dirp->dd_buf == NULL) { 400195d8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400195dc: 02 80 00 07 be 400195f8 <== NOT EXECUTED 400195e0: c2 26 20 10 st %g1, [ %i0 + 0x10 ] <== NOT EXECUTED close (fd); return NULL; } dirp->dd_fd = fd; 400195e4: e0 26 00 00 st %l0, [ %i0 ] <== NOT EXECUTED dirp->dd_loc = 0; 400195e8: c0 26 20 04 clr [ %i0 + 4 ] <== NOT EXECUTED dirp->dd_seek = 0; 400195ec: c0 26 20 14 clr [ %i0 + 0x14 ] <== NOT EXECUTED /* * Set up seek point for rewinddir. */ return dirp; } 400195f0: 81 c7 e0 08 ret <== NOT EXECUTED 400195f4: 81 e8 00 00 restore <== NOT EXECUTED */ dirp->dd_buf = malloc (512); dirp->dd_len = 512; if (dirp->dd_buf == NULL) { close (fd); 400195f8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400195fc: 7f ff ad cd call 40004d30 <== NOT EXECUTED 40019600: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019604: 81 c7 e0 08 ret <== NOT EXECUTED 40019608: 81 e8 00 00 restore <== NOT EXECUTED 400039fc : /* * Handle output processing */ static void oproc (unsigned char c, struct rtems_termios_tty *tty) { 400039fc: 9d e3 bf 98 save %sp, -104, %sp int i; if (tty->termios.c_oflag & OPOST) { 40003a00: c6 06 60 34 ld [ %i1 + 0x34 ], %g3 40003a04: 80 88 e0 01 btst 1, %g3 40003a08: 02 80 00 10 be 40003a48 40003a0c: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] switch (c) { 40003a10: b0 0e 20 ff and %i0, 0xff, %i0 40003a14: 80 a6 20 09 cmp %i0, 9 40003a18: 22 80 00 28 be,a 40003ab8 40003a1c: c8 06 60 28 ld [ %i1 + 0x28 ], %g4 40003a20: 18 80 00 10 bgu 40003a60 40003a24: 80 a6 20 0a cmp %i0, 0xa 40003a28: 80 a6 20 08 cmp %i0, 8 <== NOT EXECUTED 40003a2c: 12 80 00 11 bne 40003a70 <== NOT EXECUTED 40003a30: 80 88 e0 02 btst 2, %g3 <== NOT EXECUTED } tty->column += i; break; case '\b': if (tty->column > 0) 40003a34: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40003a38: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003a3c: 04 80 00 03 ble 40003a48 <== NOT EXECUTED 40003a40: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->column--; 40003a44: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED if (!iscntrl(c)) tty->column++; break; } } rtems_termios_puts (&c, 1, tty); 40003a48: 94 10 00 19 mov %i1, %o2 40003a4c: 90 07 a0 44 add %fp, 0x44, %o0 40003a50: 7f ff ff 96 call 400038a8 40003a54: 92 10 20 01 mov 1, %o1 40003a58: 81 c7 e0 08 ret 40003a5c: 81 e8 00 00 restore oproc (unsigned char c, struct rtems_termios_tty *tty) { int i; if (tty->termios.c_oflag & OPOST) { switch (c) { 40003a60: 02 80 00 24 be 40003af0 40003a64: 80 a6 20 0d cmp %i0, 0xd 40003a68: 02 80 00 2f be 40003b24 40003a6c: 80 88 e0 02 btst 2, %g3 if (tty->column > 0) tty->column--; break; default: if (tty->termios.c_oflag & OLCUC) 40003a70: 02 80 00 08 be 40003a90 40003a74: 07 10 00 64 sethi %hi(0x40019000), %g3 c = toupper(c); 40003a78: c4 00 e2 90 ld [ %g3 + 0x290 ], %g2 ! 40019290 <__ctype_ptr> <== NOT EXECUTED 40003a7c: c2 08 80 18 ldub [ %g2 + %i0 ], %g1 <== NOT EXECUTED 40003a80: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40003a84: 32 80 00 02 bne,a 40003a8c <== NOT EXECUTED 40003a88: b0 06 3f e0 add %i0, -32, %i0 <== NOT EXECUTED 40003a8c: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] <== NOT EXECUTED if (!iscntrl(c)) 40003a90: c2 00 e2 90 ld [ %g3 + 0x290 ], %g1 40003a94: c4 0f a0 44 ldub [ %fp + 0x44 ], %g2 40003a98: c6 08 80 01 ldub [ %g2 + %g1 ], %g3 40003a9c: 80 88 e0 20 btst 0x20, %g3 40003aa0: 12 bf ff eb bne 40003a4c 40003aa4: 94 10 00 19 mov %i1, %o2 tty->column++; 40003aa8: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 40003aac: 82 00 60 01 inc %g1 40003ab0: 10 bf ff e7 b 40003a4c 40003ab4: c2 26 60 28 st %g1, [ %i1 + 0x28 ] tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40003ab8: 05 00 00 06 sethi %hi(0x1800), %g2 40003abc: 82 08 c0 02 and %g3, %g2, %g1 } tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); 40003ac0: 86 09 20 07 and %g4, 7, %g3 if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40003ac4: 80 a0 40 02 cmp %g1, %g2 } tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); 40003ac8: 82 10 20 08 mov 8, %g1 if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40003acc: 02 80 00 25 be 40003b60 40003ad0: 92 20 40 03 sub %g1, %g3, %o1 tty->column += i; rtems_termios_puts ( " ", i, tty); return; } tty->column += i; 40003ad4: 82 02 40 04 add %o1, %g4, %g1 <== NOT EXECUTED if (!iscntrl(c)) tty->column++; break; } } rtems_termios_puts (&c, 1, tty); 40003ad8: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED if ((tty->termios.c_oflag & TABDLY) == XTABS) { tty->column += i; rtems_termios_puts ( " ", i, tty); return; } tty->column += i; 40003adc: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED if (!iscntrl(c)) tty->column++; break; } } rtems_termios_puts (&c, 1, tty); 40003ae0: 90 07 a0 44 add %fp, 0x44, %o0 <== NOT EXECUTED 40003ae4: 7f ff ff 71 call 400038a8 <== NOT EXECUTED 40003ae8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40003aec: 30 80 00 23 b,a 40003b78 <== NOT EXECUTED int i; if (tty->termios.c_oflag & OPOST) { switch (c) { case '\n': if (tty->termios.c_oflag & ONLRET) 40003af0: 80 88 e0 20 btst 0x20, %g3 40003af4: 32 80 00 02 bne,a 40003afc 40003af8: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED tty->column = 0; if (tty->termios.c_oflag & ONLCR) { 40003afc: 80 88 e0 04 btst 4, %g3 40003b00: 02 bf ff d3 be 40003a4c 40003b04: 94 10 00 19 mov %i1, %o2 rtems_termios_puts ("\r", 1, tty); 40003b08: 11 10 00 60 sethi %hi(0x40018000), %o0 40003b0c: 92 10 20 01 mov 1, %o1 40003b10: 90 12 20 c0 or %o0, 0xc0, %o0 40003b14: 7f ff ff 65 call 400038a8 40003b18: 94 10 00 19 mov %i1, %o2 tty->column = 0; 40003b1c: 10 bf ff cb b 40003a48 40003b20: c0 26 60 28 clr [ %i1 + 0x28 ] } break; case '\r': if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0)) 40003b24: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 40003b28: 02 80 00 06 be 40003b40 <== NOT EXECUTED 40003b2c: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40003b30: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40003b34: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003b38: 02 bf ff c8 be 40003a58 <== NOT EXECUTED 40003b3c: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED return; if (tty->termios.c_oflag & OCRNL) { 40003b40: 22 bf ff c2 be,a 40003a48 <== NOT EXECUTED 40003b44: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED c = '\n'; 40003b48: 82 10 20 0a mov 0xa, %g1 <== NOT EXECUTED if (tty->termios.c_oflag & ONLRET) 40003b4c: 80 88 e0 20 btst 0x20, %g3 <== NOT EXECUTED 40003b50: 02 bf ff be be 40003a48 <== NOT EXECUTED 40003b54: c2 2f a0 44 stb %g1, [ %fp + 0x44 ] <== NOT EXECUTED tty->column = 0; break; } tty->column = 0; 40003b58: 10 bf ff bc b 40003a48 <== NOT EXECUTED 40003b5c: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { tty->column += i; 40003b60: 82 02 40 04 add %o1, %g4, %g1 rtems_termios_puts ( " ", i, tty); 40003b64: 94 10 00 19 mov %i1, %o2 break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { tty->column += i; 40003b68: c2 26 60 28 st %g1, [ %i1 + 0x28 ] rtems_termios_puts ( " ", i, tty); 40003b6c: 11 10 00 60 sethi %hi(0x40018000), %o0 40003b70: 7f ff ff 4e call 400038a8 40003b74: 90 12 20 c8 or %o0, 0xc8, %o0 ! 400180c8 40003b78: 81 c7 e0 08 ret 40003b7c: 81 e8 00 00 restore 40003224 : } } /* vprintk */ void printk(const char *fmt, ...) { 40003224: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list ap; /* points to each unnamed argument in turn */ va_start(ap, fmt); /* make ap point to 1st unnamed arg */ 40003228: 92 07 a0 48 add %fp, 0x48, %o1 <== NOT EXECUTED } } /* vprintk */ void printk(const char *fmt, ...) { 4000322c: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 40003230: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40003234: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40003238: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 4000323c: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED va_list ap; /* points to each unnamed argument in turn */ va_start(ap, fmt); /* make ap point to 1st unnamed arg */ vprintk(fmt, ap); 40003240: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003244: 7f ff ff 44 call 40002f54 <== NOT EXECUTED 40003248: d2 27 bf f4 st %o1, [ %fp + -12 ] <== NOT EXECUTED va_end(ap); /* clean up when done */ } /* printk */ 4000324c: 81 c7 e0 08 ret <== NOT EXECUTED 40003250: 81 e8 00 00 restore <== NOT EXECUTED 40017718 : ssize_t read( int fd, void *buffer, size_t count ) { 40017718: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 4001771c: 03 10 00 62 sethi %hi(0x40018800), %g1 <== NOT EXECUTED 40017720: c4 00 63 0c ld [ %g1 + 0x30c ], %g2 ! 40018b0c <== NOT EXECUTED ssize_t read( int fd, void *buffer, size_t count ) { 40017724: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40017728: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 4001772c: 1a 80 00 24 bcc 400177bc <== NOT EXECUTED 40017730: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40017734: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 40017738: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 40019944 <== NOT EXECUTED 4001773c: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40017740: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40017744: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40017748: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4001774c: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40017750: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40017754: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40017758: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4001775c: 02 80 00 18 be 400177bc <== NOT EXECUTED 40017760: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 40017764: 02 80 00 1c be 400177d4 <== NOT EXECUTED 40017768: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_libio_check_count( count ); 4001776c: 02 80 00 12 be 400177b4 <== NOT EXECUTED 40017770: 90 10 20 00 clr %o0 <== NOT EXECUTED rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); 40017774: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40017778: 02 80 00 17 be 400177d4 <== NOT EXECUTED 4001777c: 01 00 00 00 nop <== NOT EXECUTED /* * Now process the read(). */ if ( !iop->handlers->read_h ) 40017780: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40017784: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 40017788: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001778c: 02 80 00 18 be 400177ec <== NOT EXECUTED 40017790: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); rc = (*iop->handlers->read_h)( iop, buffer, count ); 40017794: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017798: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( rc > 0 ) 4001779c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400177a0: 04 80 00 05 ble 400177b4 <== NOT EXECUTED 400177a4: 01 00 00 00 nop <== NOT EXECUTED iop->offset += rc; 400177a8: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 400177ac: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 400177b0: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED return rc; } 400177b4: 81 c7 e0 08 ret <== NOT EXECUTED 400177b8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 400177bc: 7f ff da 5f call 4000e138 <__errno> <== NOT EXECUTED 400177c0: 01 00 00 00 nop <== NOT EXECUTED 400177c4: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 400177c8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400177cc: 10 bf ff fa b 400177b4 <== NOT EXECUTED 400177d0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); rtems_libio_check_count( count ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); 400177d4: 7f ff da 59 call 4000e138 <__errno> <== NOT EXECUTED 400177d8: 01 00 00 00 nop <== NOT EXECUTED 400177dc: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 400177e0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400177e4: 10 bf ff f4 b 400177b4 <== NOT EXECUTED 400177e8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Now process the read(). */ if ( !iop->handlers->read_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 400177ec: 7f ff da 53 call 4000e138 <__errno> <== NOT EXECUTED 400177f0: 01 00 00 00 nop <== NOT EXECUTED 400177f4: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 400177f8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400177fc: 10 bf ff ee b 400177b4 <== NOT EXECUTED 40017800: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40019880 : /* * get next entry in a directory. */ struct dirent * readdir(dirp) register DIR *dirp; { 40019880: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register struct dirent *dp; if ( !dirp ) 40019884: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40019888: 02 80 00 29 be 4001992c <== NOT EXECUTED 4001988c: 88 10 20 00 clr %g4 <== NOT EXECUTED 40019890: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED return NULL; for (;;) { if (dirp->dd_loc == 0) { 40019894: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 40019898: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001989c: 22 80 00 1b be,a 40019908 <== NOT EXECUTED 400198a0: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED dirp->dd_len); if (dirp->dd_size <= 0) return NULL; } if (dirp->dd_loc >= dirp->dd_size) { 400198a4: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 400198a8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400198ac: 24 bf ff fa ble,a 40019894 <== NOT EXECUTED 400198b0: c0 26 20 04 clr [ %i0 + 4 ] <== NOT EXECUTED dirp->dd_loc = 0; continue; } dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc); 400198b4: 88 00 80 09 add %g2, %o1, %g4 <== NOT EXECUTED if ((intptr_t)dp & 03) /* bogus pointer check */ 400198b8: 80 89 20 03 btst 3, %g4 <== NOT EXECUTED 400198bc: 32 80 00 1c bne,a 4001992c <== NOT EXECUTED 400198c0: 88 10 20 00 clr %g4 <== NOT EXECUTED return NULL; if (dp->d_reclen <= 0 || 400198c4: c6 11 20 08 lduh [ %g4 + 8 ], %g3 <== NOT EXECUTED 400198c8: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 400198cc: 02 80 00 17 be 40019928 <== NOT EXECUTED 400198d0: 9a 00 80 03 add %g2, %g3, %o5 <== NOT EXECUTED 400198d4: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED 400198d8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400198dc: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400198e0: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400198e4: 34 80 00 12 bg,a 4001992c <== NOT EXECUTED 400198e8: 88 10 20 00 clr %g4 <== NOT EXECUTED dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) return NULL; dirp->dd_loc += dp->d_reclen; 400198ec: da 26 20 04 st %o5, [ %i0 + 4 ] <== NOT EXECUTED if (dp->d_ino == 0) 400198f0: c2 00 80 09 ld [ %g2 + %o1 ], %g1 <== NOT EXECUTED 400198f4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400198f8: 22 bf ff e8 be,a 40019898 <== NOT EXECUTED 400198fc: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED continue; return (dp); } } 40019900: 81 c7 e0 08 ret <== NOT EXECUTED 40019904: 91 e8 00 04 restore %g0, %g4, %o0 <== NOT EXECUTED if ( !dirp ) return NULL; for (;;) { if (dirp->dd_loc == 0) { dirp->dd_size = getdents (dirp->dd_fd, 40019908: 40 00 27 78 call 400236e8 <== NOT EXECUTED 4001990c: d4 06 20 10 ld [ %i0 + 0x10 ], %o2 <== NOT EXECUTED dirp->dd_buf, dirp->dd_len); if (dirp->dd_size <= 0) 40019910: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019914: 04 80 00 05 ble 40019928 <== NOT EXECUTED 40019918: d0 26 20 08 st %o0, [ %i0 + 8 ] <== NOT EXECUTED 4001991c: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 40019920: 10 bf ff e1 b 400198a4 <== NOT EXECUTED 40019924: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED return NULL; if (dp->d_reclen <= 0 || dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) return NULL; dirp->dd_loc += dp->d_reclen; if (dp->d_ino == 0) 40019928: 88 10 20 00 clr %g4 <== NOT EXECUTED continue; return (dp); } } 4001992c: 81 c7 e0 08 ret <== NOT EXECUTED 40019930: 91 e8 00 04 restore %g0, %g4, %o0 <== NOT EXECUTED 40002468 : void *realloc( void *ptr, size_t size ) { 40002468: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 4000246c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40002470: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> <== NOT EXECUTED 40002474: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 40002478: 02 80 00 10 be 400024b8 <== NOT EXECUTED 4000247c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED } /* * Continue with realloc(). */ if ( !ptr ) 40002480: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40002484: 02 80 00 13 be 400024d0 <== NOT EXECUTED 40002488: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED return malloc( size ); if ( !size ) { 4000248c: 02 80 00 15 be 400024e0 <== NOT EXECUTED 40002490: 21 10 00 66 sethi %hi(0x40019800), %l0 <== NOT EXECUTED memcpy(np,ptr,size); free(ptr); return np; } #endif if ( _Protected_heap_Resize_block( &RTEMS_Malloc_Heap, ptr, size ) ) { 40002494: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40002498: 90 14 21 50 or %l0, 0x150, %o0 <== NOT EXECUTED 4000249c: 40 00 19 6f call 40008a58 <_Protected_heap_Resize_block> <== NOT EXECUTED 400024a0: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 400024a4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400024a8: 02 80 00 13 be 400024f4 <== NOT EXECUTED 400024ac: 01 00 00 00 nop <== NOT EXECUTED memcpy( new_area, ptr, (size < old_size) ? size : old_size ); free( ptr ); return new_area; } 400024b0: 81 c7 e0 08 ret <== NOT EXECUTED 400024b4: 81 e8 00 00 restore <== NOT EXECUTED /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) 400024b8: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 <== NOT EXECUTED 400024bc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400024c0: 02 80 00 25 be 40002554 <== NOT EXECUTED 400024c4: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED memcpy( new_area, ptr, (size < old_size) ? size : old_size ); free( ptr ); return new_area; } 400024c8: 81 c7 e0 08 ret <== NOT EXECUTED 400024cc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Continue with realloc(). */ if ( !ptr ) return malloc( size ); 400024d0: 7f ff ff 95 call 40002324 <== NOT EXECUTED 400024d4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 400024d8: 81 c7 e0 08 ret <== NOT EXECUTED 400024dc: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( !size ) { free( ptr ); 400024e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400024e4: 7f ff ff 67 call 40002280 <== NOT EXECUTED 400024e8: b0 10 20 00 clr %i0 <== NOT EXECUTED 400024ec: 81 c7 e0 08 ret <== NOT EXECUTED 400024f0: 81 e8 00 00 restore <== NOT EXECUTED #endif if ( _Protected_heap_Resize_block( &RTEMS_Malloc_Heap, ptr, size ) ) { return ptr; } new_area = malloc( size ); 400024f4: 7f ff ff 8c call 40002324 <== NOT EXECUTED 400024f8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED * There used to be a free on this error case but it is wrong to * free the memory per OpenGroup Single UNIX Specification V2 * and the C Standard. */ if ( !new_area ) { 400024fc: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 40002500: 02 bf ff f2 be 400024c8 <== NOT EXECUTED 40002504: 90 14 21 50 or %l0, 0x150, %o0 <== NOT EXECUTED return (void *) 0; } if ( !_Protected_heap_Get_block_size(&RTEMS_Malloc_Heap, ptr, &old_size) ) { 40002508: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000250c: 40 00 18 b7 call 400087e8 <_Protected_heap_Get_block_size> <== NOT EXECUTED 40002510: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40002514: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40002518: 02 80 00 15 be 4000256c <== NOT EXECUTED 4000251c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED errno = EINVAL; return (void *) 0; } memcpy( new_area, ptr, (size < old_size) ? size : old_size ); 40002520: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 40002524: 08 80 00 03 bleu 40002530 <== NOT EXECUTED 40002528: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000252c: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED 40002530: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40002534: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40002538: 40 00 30 d5 call 4000e88c <== NOT EXECUTED 4000253c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED free( ptr ); 40002540: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002544: 7f ff ff 4f call 40002280 <== NOT EXECUTED 40002548: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 4000254c: 81 c7 e0 08 ret <== NOT EXECUTED 40002550: 81 e8 00 00 restore <== NOT EXECUTED if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) return (void *) 0; if (_ISR_Nest_level > 0) 40002554: c4 00 63 d4 ld [ %g1 + 0x3d4 ], %g2 <== NOT EXECUTED 40002558: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000255c: 02 bf ff ca be 40002484 <== NOT EXECUTED 40002560: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED } memcpy( new_area, ptr, (size < old_size) ? size : old_size ); free( ptr ); return new_area; 40002564: 81 c7 e0 08 ret <== NOT EXECUTED 40002568: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if ( !new_area ) { return (void *) 0; } if ( !_Protected_heap_Get_block_size(&RTEMS_Malloc_Heap, ptr, &old_size) ) { errno = EINVAL; 4000256c: 40 00 2e f3 call 4000e138 <__errno> <== NOT EXECUTED 40002570: b0 10 20 00 clr %i0 <== NOT EXECUTED 40002574: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40002578: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000257c: 81 c7 e0 08 ret <== NOT EXECUTED 40002580: 81 e8 00 00 restore <== NOT EXECUTED 40019934 : #include int rmdir( const char *pathname ) { 40019934: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the node where we wish to go. */ result = rtems_filesystem_evaluate_path( pathname, 0, &loc, FALSE ); 40019938: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001993c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019940: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40019944: 96 10 20 00 clr %o3 <== NOT EXECUTED 40019948: 7f ff ad 5b call 40004eb4 <== NOT EXECUTED 4001994c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 40019950: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019954: 02 80 00 04 be 40019964 <== NOT EXECUTED 40019958: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED result = (*loc.handlers->rmnod_h)( &loc ); rtems_filesystem_freenode( &loc ); return result; } 4001995c: 81 c7 e0 08 ret <== NOT EXECUTED 40019960: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED result = rtems_filesystem_evaluate_path( pathname, 0, &loc, FALSE ); if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 40019964: 7f ff ad 24 call 40004df4 <== NOT EXECUTED 40019968: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0) { 4001996c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019970: 12 80 00 2d bne 40019a24 <== NOT EXECUTED 40019974: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Verify you can remove this node as a directory. */ if ( !loc.ops->node_type_h ){ 40019978: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4001997c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019980: 22 80 00 35 be,a 40019a54 <== NOT EXECUTED 40019984: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ 40019988: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001998c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019990: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40019994: 12 80 00 14 bne 400199e4 <== NOT EXECUTED 40019998: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ 4001999c: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 400199a0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400199a4: 22 80 00 37 be,a 40019a80 <== NOT EXECUTED 400199a8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.handlers->rmnod_h)( &loc ); 400199ac: 9f c0 40 00 call %g1 <== NOT EXECUTED 400199b0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 400199b4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400199b8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400199bc: 02 80 00 08 be 400199dc <== NOT EXECUTED 400199c0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 400199c4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400199c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400199cc: 02 80 00 2b be 40019a78 <== NOT EXECUTED 400199d0: 01 00 00 00 nop <== NOT EXECUTED 400199d4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400199d8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400199dc: 81 c7 e0 08 ret <== NOT EXECUTED 400199e0: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ rtems_filesystem_freenode( &loc ); 400199e4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400199e8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400199ec: 02 80 00 08 be 40019a0c <== NOT EXECUTED 400199f0: 01 00 00 00 nop <== NOT EXECUTED 400199f4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400199f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400199fc: 02 80 00 04 be 40019a0c <== NOT EXECUTED 40019a00: 01 00 00 00 nop <== NOT EXECUTED 40019a04: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019a08: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 40019a0c: 40 00 2f 88 call 4002582c <__errno> <== NOT EXECUTED 40019a10: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019a14: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40019a18: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019a1c: 81 c7 e0 08 ret <== NOT EXECUTED 40019a20: 81 e8 00 00 restore <== NOT EXECUTED if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); if (result != 0) { rtems_filesystem_freenode( &loc ); 40019a24: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019a28: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019a2c: 02 bf ff ec be 400199dc <== NOT EXECUTED 40019a30: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019a34: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019a38: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019a3c: 02 bf ff e8 be 400199dc <== NOT EXECUTED 40019a40: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019a44: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019a48: 01 00 00 00 nop <== NOT EXECUTED 40019a4c: 81 c7 e0 08 ret <== NOT EXECUTED 40019a50: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify you can remove this node as a directory. */ if ( !loc.ops->node_type_h ){ rtems_filesystem_freenode( &loc ); 40019a54: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019a58: 02 80 00 04 be 40019a68 <== NOT EXECUTED 40019a5c: 01 00 00 00 nop <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ rtems_filesystem_freenode( &loc ); 40019a60: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019a64: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40019a68: 40 00 2f 71 call 4002582c <__errno> <== NOT EXECUTED 40019a6c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019a70: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40019a74: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019a78: 81 c7 e0 08 ret <== NOT EXECUTED 40019a7c: 81 e8 00 00 restore <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ rtems_filesystem_freenode( &loc ); 40019a80: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019a84: 02 bf ff f9 be 40019a68 <== NOT EXECUTED 40019a88: 01 00 00 00 nop <== NOT EXECUTED 40019a8c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019a90: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019a94: 12 bf ff f3 bne 40019a60 <== NOT EXECUTED 40019a98: 01 00 00 00 nop <== NOT EXECUTED 40019a9c: 30 bf ff f3 b,a 40019a68 <== NOT EXECUTED 4000d9b4 : uint32_t rtems_assoc_local_by_remote_bitfield( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000d9b4: 9d e3 bf 98 save %sp, -104, %sp 4000d9b8: a2 10 20 01 mov 1, %l1 4000d9bc: a4 10 00 18 mov %i0, %l2 4000d9c0: a0 10 20 00 clr %l0 4000d9c4: 10 80 00 05 b 4000d9d8 4000d9c8: b0 10 20 00 clr %i0 uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000d9cc: 80 a4 20 20 cmp %l0, 0x20 4000d9d0: 02 80 00 0d be 4000da04 4000d9d4: a3 2c 60 01 sll %l1, 1, %l1 if (b & remote_value) 4000d9d8: 80 8c 40 19 btst %l1, %i1 4000d9dc: 22 bf ff fc be,a 4000d9cc 4000d9e0: a0 04 20 01 inc %l0 local_value |= rtems_assoc_local_by_remote(ap, b); 4000d9e4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4000d9e8: 40 00 00 09 call 4000da0c <== NOT EXECUTED 4000d9ec: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000d9f0: a0 04 20 01 inc %l0 <== NOT EXECUTED if (b & remote_value) local_value |= rtems_assoc_local_by_remote(ap, b); 4000d9f4: b0 16 00 08 or %i0, %o0, %i0 <== NOT EXECUTED ) { uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000d9f8: 80 a4 20 20 cmp %l0, 0x20 <== NOT EXECUTED 4000d9fc: 12 bf ff f7 bne 4000d9d8 <== NOT EXECUTED 4000da00: a3 2c 60 01 sll %l1, 1, %l1 <== NOT EXECUTED if (b & remote_value) local_value |= rtems_assoc_local_by_remote(ap, b); } return local_value; } 4000da04: 81 c7 e0 08 ret 4000da08: 81 e8 00 00 restore 40018f30 : sprintf(bad_buffer, "< %" PRId32 "[0x%" PRIx32 " ] >", bad_value, bad_value); #else static char bad_buffer[32] = ""; #endif return bad_buffer; } 40018f30: 11 10 00 a8 sethi %hi(0x4002a000), %o0 <== NOT EXECUTED 40018f34: 81 c3 e0 08 retl <== NOT EXECUTED 40018f38: 90 12 21 e8 or %o0, 0x1e8, %o0 ! 4002a1e8 <== NOT EXECUTED 40014d74 : const char *rtems_assoc_name_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 40014d74: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 40014d78: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40014d7c: 40 00 00 0b call 40014da8 <== NOT EXECUTED 40014d80: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED if (nap) 40014d84: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40014d88: 02 80 00 05 be 40014d9c <== NOT EXECUTED 40014d8c: 01 00 00 00 nop <== NOT EXECUTED return nap->name; return rtems_assoc_name_bad(local_value); } 40014d90: f0 02 00 00 ld [ %o0 ], %i0 <== NOT EXECUTED 40014d94: 81 c7 e0 08 ret <== NOT EXECUTED 40014d98: 81 e8 00 00 restore <== NOT EXECUTED nap = rtems_assoc_ptr_by_local(ap, local_value); if (nap) return nap->name; return rtems_assoc_name_bad(local_value); 40014d9c: 40 00 10 65 call 40018f30 <== NOT EXECUTED 40014da0: 91 e8 00 19 restore %g0, %i1, %o0 <== NOT EXECUTED 40014da4: 01 00 00 00 nop 4000e08c : const rtems_assoc_t *rtems_assoc_ptr_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 4000e08c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000e090: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED 4000e094: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000e098: 02 80 00 1e be 4000e110 <== NOT EXECUTED 4000e09c: 13 10 00 60 sethi %hi(0x40018000), %o1 <== NOT EXECUTED 4000e0a0: 40 00 04 b4 call 4000f370 <== NOT EXECUTED 4000e0a4: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 400183f8 <_CPU_Trap_slot_template+0x1a8> <== NOT EXECUTED 4000e0a8: 84 10 00 18 mov %i0, %g2 <== NOT EXECUTED 4000e0ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000e0b0: 12 80 00 0f bne 4000e0ec <== NOT EXECUTED 4000e0b4: 86 10 20 00 clr %g3 <== NOT EXECUTED default_ap = ap++; for ( ; ap->name; ap++) 4000e0b8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000e0bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000e0c0: 02 80 00 10 be 4000e100 <== NOT EXECUTED 4000e0c4: 84 06 20 0c add %i0, 0xc, %g2 <== NOT EXECUTED if (ap->local_value == local_value) 4000e0c8: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4000e0cc: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000e0d0: 02 80 00 0b be 4000e0fc <== NOT EXECUTED 4000e0d4: 86 10 00 18 mov %i0, %g3 <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000e0d8: 84 00 a0 0c add %g2, 0xc, %g2 <== NOT EXECUTED 4000e0dc: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED 4000e0e0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000e0e4: 02 80 00 09 be 4000e108 <== NOT EXECUTED 4000e0e8: 01 00 00 00 nop <== NOT EXECUTED if (ap->local_value == local_value) 4000e0ec: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4000e0f0: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000e0f4: 32 bf ff fa bne,a 4000e0dc <== NOT EXECUTED 4000e0f8: 84 00 a0 0c add %g2, 0xc, %g2 <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000e0fc: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED if (ap->local_value == local_value) return ap; return default_ap; } 4000e100: 81 c7 e0 08 ret <== NOT EXECUTED 4000e104: 81 e8 00 00 restore <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000e108: 81 c7 e0 08 ret <== NOT EXECUTED 4000e10c: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED uint32_t local_value ) { const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000e110: 81 c7 e0 08 ret <== NOT EXECUTED 4000e114: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000da34 : const rtems_assoc_t *rtems_assoc_ptr_by_remote( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000da34: 9d e3 bf 98 save %sp, -104, %sp const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000da38: d0 06 00 00 ld [ %i0 ], %o0 4000da3c: 80 a2 20 00 cmp %o0, 0 4000da40: 02 80 00 1e be 4000dab8 4000da44: 13 10 00 60 sethi %hi(0x40018000), %o1 4000da48: 40 00 06 4a call 4000f370 4000da4c: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 400183f8 <_CPU_Trap_slot_template+0x1a8> 4000da50: 84 10 00 18 mov %i0, %g2 4000da54: 80 a2 20 00 cmp %o0, 0 4000da58: 12 80 00 0f bne 4000da94 4000da5c: 86 10 20 00 clr %g3 default_ap = ap++; for ( ; ap->name; ap++) 4000da60: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000da64: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000da68: 02 80 00 10 be 4000daa8 <== NOT EXECUTED 4000da6c: 84 06 20 0c add %i0, 0xc, %g2 <== NOT EXECUTED if (ap->remote_value == remote_value) 4000da70: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED 4000da74: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000da78: 02 80 00 0b be 4000daa4 <== NOT EXECUTED 4000da7c: 86 10 00 18 mov %i0, %g3 <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000da80: 84 00 a0 0c add %g2, 0xc, %g2 <== NOT EXECUTED 4000da84: c2 00 80 00 ld [ %g2 ], %g1 4000da88: 80 a0 60 00 cmp %g1, 0 4000da8c: 02 80 00 09 be 4000dab0 4000da90: 01 00 00 00 nop if (ap->remote_value == remote_value) 4000da94: c2 00 a0 08 ld [ %g2 + 8 ], %g1 4000da98: 80 a0 40 19 cmp %g1, %i1 4000da9c: 32 bf ff fa bne,a 4000da84 4000daa0: 84 00 a0 0c add %g2, 0xc, %g2 const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000daa4: b0 10 00 02 mov %g2, %i0 if (ap->remote_value == remote_value) return ap; return default_ap; } 4000daa8: 81 c7 e0 08 ret 4000daac: 81 e8 00 00 restore const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000dab0: 81 c7 e0 08 ret <== NOT EXECUTED 4000dab4: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED uint32_t remote_value ) { const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000dab8: 81 c7 e0 08 ret <== NOT EXECUTED 4000dabc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000dac0 : uint32_t rtems_assoc_remote_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 4000dac0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 4000dac4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000dac8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000dacc: 40 00 01 70 call 4000e08c <== NOT EXECUTED 4000dad0: b0 10 20 00 clr %i0 <== NOT EXECUTED if (nap) 4000dad4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000dad8: 32 80 00 02 bne,a 4000dae0 <== NOT EXECUTED 4000dadc: f0 02 20 08 ld [ %o0 + 8 ], %i0 <== NOT EXECUTED return nap->remote_value; return 0; } 4000dae0: 81 c7 e0 08 ret <== NOT EXECUTED 4000dae4: 81 e8 00 00 restore <== NOT EXECUTED 40006230 : rtems_name name, rtems_attribute attribute_set, uint32_t maximum_waiters, rtems_id *id ) { 40006230: 9d e3 bf 90 save %sp, -112, %sp Barrier_Control *the_barrier; CORE_barrier_Attributes the_attributes; if ( !rtems_is_name_valid( name ) ) 40006234: a4 96 20 00 orcc %i0, 0, %l2 40006238: 02 80 00 20 be 400062b8 4000623c: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 40006240: 80 a6 e0 00 cmp %i3, 0 40006244: 02 80 00 1d be 400062b8 40006248: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; /* Initialize core barrier attributes */ if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { 4000624c: 80 8e 60 10 btst 0x10, %i1 40006250: 02 80 00 39 be 40006334 40006254: 80 a6 a0 00 cmp %i2, 0 the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; if ( maximum_waiters == 0 ) 40006258: 02 80 00 18 be 400062b8 4000625c: b0 10 20 0a mov 0xa, %i0 if ( !id ) return RTEMS_INVALID_ADDRESS; /* Initialize core barrier attributes */ if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; 40006260: c0 27 bf f0 clr [ %fp + -16 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006264: 21 10 00 76 sethi %hi(0x4001d800), %l0 40006268: c2 04 23 70 ld [ %l0 + 0x370 ], %g1 ! 4001db70 <_Thread_Dispatch_disable_level> if ( maximum_waiters == 0 ) return RTEMS_INVALID_NUMBER; } else the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE; the_attributes.maximum_count = maximum_waiters; 4000626c: f4 27 bf f4 st %i2, [ %fp + -12 ] 40006270: 82 00 60 01 inc %g1 40006274: c2 24 23 70 st %g1, [ %l0 + 0x370 ] * This function allocates a barrier control block from * the inactive chain of free barrier control blocks. */ RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Allocate( void ) { return (Barrier_Control *) _Objects_Allocate( &_Barrier_Information ); 40006278: 23 10 00 76 sethi %hi(0x4001d800), %l1 4000627c: 40 00 0a 45 call 40008b90 <_Objects_Allocate> 40006280: 90 14 61 d4 or %l1, 0x1d4, %o0 ! 4001d9d4 <_Barrier_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_barrier = _Barrier_Allocate(); if ( !the_barrier ) { 40006284: b4 92 20 00 orcc %o0, 0, %i2 40006288: 12 80 00 0e bne 400062c0 4000628c: 90 06 a0 14 add %i2, 0x14, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006290: c2 04 23 70 ld [ %l0 + 0x370 ], %g1 40006294: b0 10 20 05 mov 5, %i0 40006298: 82 00 7f ff add %g1, -1, %g1 4000629c: c2 24 23 70 st %g1, [ %l0 + 0x370 ] 400062a0: c4 04 23 70 ld [ %l0 + 0x370 ], %g2 400062a4: 80 a0 a0 00 cmp %g2, 0 400062a8: 12 80 00 21 bne 4000632c 400062ac: 01 00 00 00 nop _Thread_Dispatch(); 400062b0: 40 00 10 b1 call 4000a574 <_Thread_Dispatch> 400062b4: 01 00 00 00 nop 400062b8: 81 c7 e0 08 ret 400062bc: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } the_barrier->attribute_set = attribute_set; 400062c0: f2 26 a0 10 st %i1, [ %i2 + 0x10 ] _CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes ); 400062c4: 40 00 07 67 call 40008060 <_CORE_barrier_Initialize> 400062c8: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400062cc: 90 14 61 d4 or %l1, 0x1d4, %o0 Objects_Name name ) { uint32_t index; index = _Objects_Get_index( the_object->id ); 400062d0: c6 06 a0 08 ld [ %i2 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400062d4: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 400062d8: 03 00 00 3f sethi %hi(0xfc00), %g1 400062dc: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 400062e0: 82 08 c0 01 and %g3, %g1, %g1 400062e4: 80 a0 40 02 cmp %g1, %g2 400062e8: 38 80 00 06 bgu,a 40006300 400062ec: e4 26 a0 0c st %l2, [ %i2 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 400062f0: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 400062f4: 83 28 60 02 sll %g1, 2, %g1 400062f8: f4 20 80 01 st %i2, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 400062fc: e4 26 a0 0c st %l2, [ %i2 + 0xc ] &_Barrier_Information, &the_barrier->Object, (Objects_Name) name ); *id = the_barrier->Object.id; 40006300: c6 26 c0 00 st %g3, [ %i3 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006304: c2 04 23 70 ld [ %l0 + 0x370 ], %g1 40006308: b0 10 20 00 clr %i0 4000630c: 82 00 7f ff add %g1, -1, %g1 40006310: c2 24 23 70 st %g1, [ %l0 + 0x370 ] 40006314: c4 04 23 70 ld [ %l0 + 0x370 ], %g2 40006318: 80 a0 a0 00 cmp %g2, 0 4000631c: 12 80 00 04 bne 4000632c 40006320: 01 00 00 00 nop _Thread_Dispatch(); 40006324: 40 00 10 94 call 4000a574 <_Thread_Dispatch> 40006328: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 4000632c: 81 c7 e0 08 ret 40006330: 81 e8 00 00 restore if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; if ( maximum_waiters == 0 ) return RTEMS_INVALID_NUMBER; } else the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE; 40006334: 82 10 20 01 mov 1, %g1 40006338: 10 bf ff cb b 40006264 4000633c: c2 27 bf f0 st %g1, [ %fp + -16 ] 40006340 : */ rtems_status_code rtems_barrier_delete( rtems_id id ) { 40006340: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 40006344: 21 10 00 76 sethi %hi(0x4001d800), %l0 40006348: 92 10 00 18 mov %i0, %o1 4000634c: 94 07 bf f4 add %fp, -12, %o2 40006350: 40 00 0b 61 call 400090d4 <_Objects_Get> 40006354: 90 14 21 d4 or %l0, 0x1d4, %o0 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40006358: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000635c: 80 a0 60 00 cmp %g1, 0 40006360: 12 80 00 20 bne 400063e0 40006364: b0 10 00 08 mov %o0, %i0 case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _CORE_barrier_Flush( 40006368: 90 02 20 14 add %o0, 0x14, %o0 4000636c: 92 10 20 00 clr %o1 40006370: 40 00 12 f7 call 4000af4c <_Thread_queue_Flush> 40006374: 94 10 20 02 mov 2, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006378: 90 14 21 d4 or %l0, 0x1d4, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000637c: c2 06 20 08 ld [ %i0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006380: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40006384: 05 00 00 3f sethi %hi(0xfc00), %g2 40006388: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000638c: 82 08 40 02 and %g1, %g2, %g1 40006390: 80 a0 40 03 cmp %g1, %g3 40006394: 38 80 00 06 bgu,a 400063ac 40006398: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000639c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 400063a0: 83 28 60 02 sll %g1, 2, %g1 400063a4: c0 20 80 01 clr [ %g2 + %g1 ] uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); /* _Objects_Clear_name( the_object->name, information->name_length ); */ the_object->name = 0; 400063a8: c0 26 20 0c clr [ %i0 + 0xc ] */ RTEMS_INLINE_ROUTINE void _Barrier_Free ( Barrier_Control *the_barrier ) { _Objects_Free( &_Barrier_Information, &the_barrier->Object ); 400063ac: 40 00 0b 07 call 40008fc8 <_Objects_Free> 400063b0: 92 10 00 18 mov %i0, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400063b4: 03 10 00 76 sethi %hi(0x4001d800), %g1 400063b8: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001db70 <_Thread_Dispatch_disable_level> 400063bc: b0 10 20 00 clr %i0 400063c0: 84 00 bf ff add %g2, -1, %g2 400063c4: c4 20 63 70 st %g2, [ %g1 + 0x370 ] 400063c8: c6 00 63 70 ld [ %g1 + 0x370 ], %g3 400063cc: 80 a0 e0 00 cmp %g3, 0 400063d0: 02 80 00 09 be 400063f4 400063d4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400063d8: 81 c7 e0 08 ret 400063dc: 81 e8 00 00 restore { Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 400063e0: 80 a0 60 02 cmp %g1, 2 400063e4: 08 bf ff fd bleu 400063d8 400063e8: b0 10 20 04 mov 4, %i0 400063ec: 81 c7 e0 08 ret <== NOT EXECUTED 400063f0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED _Thread_Dispatch(); 400063f4: 40 00 10 60 call 4000a574 <_Thread_Dispatch> 400063f8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400063fc: 81 c7 e0 08 ret 40006400: 81 e8 00 00 restore 4000643c : rtems_status_code rtems_barrier_release( rtems_id id, uint32_t *released ) { 4000643c: 9d e3 bf 90 save %sp, -112, %sp 40006440: a0 10 00 18 mov %i0, %l0 Barrier_Control *the_barrier; Objects_Locations location; if ( !released ) 40006444: 80 a6 60 00 cmp %i1, 0 40006448: 02 80 00 1f be 400064c4 4000644c: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 40006450: 11 10 00 76 sethi %hi(0x4001d800), %o0 40006454: 92 10 00 10 mov %l0, %o1 40006458: 90 12 21 d4 or %o0, 0x1d4, %o0 4000645c: 40 00 0b 1e call 400090d4 <_Objects_Get> 40006460: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40006464: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006468: 80 a0 60 00 cmp %g1, 0 4000646c: 02 80 00 07 be 40006488 40006470: 92 10 00 10 mov %l0, %o1 40006474: 80 a0 60 02 cmp %g1, 2 40006478: 08 80 00 13 bleu 400064c4 4000647c: b0 10 20 04 mov 4, %i0 40006480: 81 c7 e0 08 ret <== NOT EXECUTED 40006484: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: *released = _CORE_barrier_Release( &the_barrier->Barrier, id, NULL ); 40006488: 94 10 20 00 clr %o2 4000648c: 40 00 07 01 call 40008090 <_CORE_barrier_Release> 40006490: 90 02 20 14 add %o0, 0x14, %o0 40006494: d0 26 40 00 st %o0, [ %i1 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006498: 03 10 00 76 sethi %hi(0x4001d800), %g1 4000649c: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001db70 <_Thread_Dispatch_disable_level> 400064a0: b0 10 20 00 clr %i0 400064a4: 84 00 bf ff add %g2, -1, %g2 400064a8: c4 20 63 70 st %g2, [ %g1 + 0x370 ] 400064ac: c6 00 63 70 ld [ %g1 + 0x370 ], %g3 400064b0: 80 a0 e0 00 cmp %g3, 0 400064b4: 12 80 00 04 bne 400064c4 400064b8: 01 00 00 00 nop _Thread_Dispatch(); 400064bc: 40 00 10 2e call 4000a574 <_Thread_Dispatch> 400064c0: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400064c4: 81 c7 e0 08 ret 400064c8: 81 e8 00 00 restore 400064cc : rtems_status_code rtems_barrier_wait( rtems_id id, rtems_interval timeout ) { 400064cc: 9d e3 bf 90 save %sp, -112, %sp 400064d0: 11 10 00 76 sethi %hi(0x4001d800), %o0 400064d4: 92 10 00 18 mov %i0, %o1 400064d8: 90 12 21 d4 or %o0, 0x1d4, %o0 400064dc: 40 00 0a fe call 400090d4 <_Objects_Get> 400064e0: 94 07 bf f4 add %fp, -12, %o2 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 400064e4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400064e8: 80 a0 60 00 cmp %g1, 0 400064ec: 12 80 00 14 bne 4000653c 400064f0: 96 10 00 19 mov %i1, %o3 case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _CORE_barrier_Wait( 400064f4: 90 02 20 14 add %o0, 0x14, %o0 400064f8: 92 10 00 18 mov %i0, %o1 400064fc: 94 10 20 01 mov 1, %o2 40006500: 40 00 06 ef call 400080bc <_CORE_barrier_Wait> 40006504: 98 10 20 00 clr %o4 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006508: 03 10 00 76 sethi %hi(0x4001d800), %g1 4000650c: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001db70 <_Thread_Dispatch_disable_level> 40006510: 84 00 bf ff add %g2, -1, %g2 40006514: c4 20 63 70 st %g2, [ %g1 + 0x370 ] 40006518: c6 00 63 70 ld [ %g1 + 0x370 ], %g3 4000651c: 80 a0 e0 00 cmp %g3, 0 40006520: 02 80 00 0d be 40006554 40006524: 03 10 00 77 sethi %hi(0x4001dc00), %g1 TRUE, timeout, NULL ); _Thread_Enable_dispatch(); return _Barrier_Translate_core_barrier_return_code( 40006528: c4 00 60 4c ld [ %g1 + 0x4c ], %g2 ! 4001dc4c <_Thread_Executing> <== NOT EXECUTED 4000652c: 40 00 1d 9a call 4000db94 <_Barrier_Translate_core_barrier_return_code> <== NOT EXECUTED 40006530: d0 00 a0 34 ld [ %g2 + 0x34 ], %o0 <== NOT EXECUTED _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006534: 81 c7 e0 08 ret 40006538: 91 e8 00 08 restore %g0, %o0, %o0 { Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 4000653c: 80 a0 60 02 cmp %g1, 2 40006540: 08 bf ff fd bleu 40006534 40006544: 90 10 20 04 mov 4, %o0 40006548: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000654c: 81 c7 e0 08 ret <== NOT EXECUTED 40006550: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40006554: 40 00 10 08 call 4000a574 <_Thread_Dispatch> 40006558: 01 00 00 00 nop TRUE, timeout, NULL ); _Thread_Enable_dispatch(); return _Barrier_Translate_core_barrier_return_code( 4000655c: 03 10 00 77 sethi %hi(0x4001dc00), %g1 40006560: c4 00 60 4c ld [ %g1 + 0x4c ], %g2 ! 4001dc4c <_Thread_Executing> 40006564: 40 00 1d 8c call 4000db94 <_Barrier_Translate_core_barrier_return_code> 40006568: d0 00 a0 34 ld [ %g2 + 0x34 ], %o0 4000656c: 30 bf ff f2 b,a 40006534 40005244 : rtems_status_code rtems_clock_get( rtems_clock_get_options option, void *time_buffer ) { 40005244: 9d e3 bf 60 save %sp, -160, %sp 40005248: 82 10 00 18 mov %i0, %g1 if ( !time_buffer ) 4000524c: 80 a6 60 00 cmp %i1, 0 40005250: 02 80 00 19 be 400052b4 40005254: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; switch ( option ) { 40005258: 80 a0 60 04 cmp %g1, 4 4000525c: 18 80 00 16 bgu 400052b4 40005260: b0 10 20 19 mov 0x19, %i0 40005264: 83 28 60 02 sll %g1, 2, %g1 40005268: 05 10 00 14 sethi %hi(0x40005000), %g2 4000526c: 84 10 a2 30 or %g2, 0x230, %g2 ! 40005230 40005270: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40005274: 81 c0 c0 00 jmp %g3 40005278: 01 00 00 00 nop } case RTEMS_CLOCK_GET_TIME_VALUE: { struct timeval *time = (struct timeval *)time_buffer; if ( !_TOD_Is_set ) 4000527c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 40005280: c4 00 63 4c ld [ %g1 + 0x34c ], %g2 ! 40019b4c <_TOD_Is_set> <== NOT EXECUTED 40005284: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005288: 12 80 00 46 bne 400053a0 <== NOT EXECUTED 4000528c: 01 00 00 00 nop <== NOT EXECUTED } } return RTEMS_INTERNAL_ERROR; /* should never get here */ } 40005290: 81 c7 e0 08 ret 40005294: 91 e8 20 0b restore %g0, 0xb, %o0 } case RTEMS_CLOCK_GET_TICKS_PER_SECOND: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = TOD_MICROSECONDS_PER_SECOND / _TOD_Microseconds_per_tick; 40005298: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000529c: d2 00 60 ec ld [ %g1 + 0xec ], %o1 ! 40019cec <_TOD_Microseconds_per_tick> 400052a0: 11 00 03 d0 sethi %hi(0xf4000), %o0 400052a4: b0 10 20 00 clr %i0 400052a8: 40 00 3f cd call 400151dc <.udiv> 400052ac: 90 12 22 40 or %o0, 0x240, %o0 400052b0: d0 26 40 00 st %o0, [ %i1 ] 400052b4: 81 c7 e0 08 ret 400052b8: 81 e8 00 00 restore } case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = _Watchdog_Ticks_since_boot; 400052bc: 03 10 00 67 sethi %hi(0x40019c00), %g1 400052c0: c4 00 60 94 ld [ %g1 + 0x94 ], %g2 ! 40019c94 <_Watchdog_Ticks_since_boot> 400052c4: c4 26 40 00 st %g2, [ %i1 ] 400052c8: 81 c7 e0 08 ret 400052cc: 91 e8 20 00 restore %g0, 0, %o0 return RTEMS_SUCCESSFUL; } case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH: { rtems_interval *interval = (rtems_interval *)time_buffer; if ( !_TOD_Is_set ) 400052d0: 03 10 00 66 sethi %hi(0x40019800), %g1 400052d4: c4 00 63 4c ld [ %g1 + 0x34c ], %g2 ! 40019b4c <_TOD_Is_set> 400052d8: 80 a0 a0 00 cmp %g2, 0 400052dc: 02 bf ff ed be 40005290 400052e0: 03 10 00 66 sethi %hi(0x40019800), %g1 return RTEMS_NOT_DEFINED; *interval = _TOD_Seconds_since_epoch; 400052e4: c4 00 63 c8 ld [ %g1 + 0x3c8 ], %g2 ! 40019bc8 <_TOD_Now> 400052e8: c4 26 40 00 st %g2, [ %i1 ] 400052ec: 81 c7 e0 08 ret 400052f0: 91 e8 20 00 restore %g0, 0, %o0 case RTEMS_CLOCK_GET_TOD: { struct tm time; struct timeval now; rtems_time_of_day *tmbuf = (rtems_time_of_day *)time_buffer; if ( !_TOD_Is_set ) 400052f4: 03 10 00 66 sethi %hi(0x40019800), %g1 400052f8: c4 00 63 4c ld [ %g1 + 0x34c ], %g2 ! 40019b4c <_TOD_Is_set> 400052fc: 80 a0 a0 00 cmp %g2, 0 40005300: 02 bf ff e4 be 40005290 40005304: 01 00 00 00 nop ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 40005308: 7f ff f2 b4 call 40001dd8 4000530c: 01 00 00 00 nop 40005310: a0 10 00 08 mov %o0, %l0 _TOD_Get( &now ); 40005314: 40 00 07 71 call 400070d8 <_TOD_Get> 40005318: 90 07 bf e8 add %fp, -24, %o0 _ISR_Enable(level); 4000531c: 7f ff f2 b3 call 40001de8 40005320: 90 10 00 10 mov %l0, %o0 time->tv_sec = now.tv_sec; 40005324: c2 07 bf e8 ld [ %fp + -24 ], %g1 time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 40005328: d0 07 bf ec ld [ %fp + -20 ], %o0 _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 4000532c: c2 27 bf f0 st %g1, [ %fp + -16 ] time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 40005330: 40 00 3f ab call 400151dc <.udiv> 40005334: 92 10 23 e8 mov 0x3e8, %o1 /* Obtain the current time */ _TOD_Get_timeval( &now ); /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); 40005338: 92 07 bf c4 add %fp, -60, %o1 4000533c: d0 27 bf f4 st %o0, [ %fp + -12 ] 40005340: 40 00 25 4e call 4000e878 40005344: 90 07 bf f0 add %fp, -16, %o0 /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; tmbuf->month = time.tm_mon + 1; tmbuf->day = time.tm_mday; 40005348: c4 07 bf d0 ld [ %fp + -48 ], %g2 tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 4000534c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005350: d2 00 60 ec ld [ %g1 + 0xec ], %o1 ! 40019cec <_TOD_Microseconds_per_tick> gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; tmbuf->month = time.tm_mon + 1; tmbuf->day = time.tm_mday; 40005354: c4 26 60 08 st %g2, [ %i1 + 8 ] tmbuf->hour = time.tm_hour; 40005358: c2 07 bf cc ld [ %fp + -52 ], %g1 tmbuf->minute = time.tm_min; 4000535c: c4 07 bf c8 ld [ %fp + -56 ], %g2 /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; tmbuf->month = time.tm_mon + 1; tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; 40005360: c2 26 60 0c st %g1, [ %i1 + 0xc ] tmbuf->minute = time.tm_min; 40005364: c4 26 60 10 st %g2, [ %i1 + 0x10 ] /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; 40005368: c2 07 bf d8 ld [ %fp + -40 ], %g1 tmbuf->month = time.tm_mon + 1; 4000536c: c4 07 bf d4 ld [ %fp + -44 ], %g2 tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; 40005370: c6 07 bf c4 ld [ %fp + -60 ], %g3 tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 40005374: d0 07 bf f4 ld [ %fp + -12 ], %o0 /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; 40005378: 82 00 67 6c add %g1, 0x76c, %g1 tmbuf->month = time.tm_mon + 1; 4000537c: 84 00 a0 01 inc %g2 tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; 40005380: c6 26 60 14 st %g3, [ %i1 + 0x14 ] /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; 40005384: c2 26 40 00 st %g1, [ %i1 ] tmbuf->month = time.tm_mon + 1; 40005388: c4 26 60 04 st %g2, [ %i1 + 4 ] tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 4000538c: 40 00 3f 94 call 400151dc <.udiv> 40005390: b0 10 20 00 clr %i0 40005394: d0 26 60 18 st %o0, [ %i1 + 0x18 ] 40005398: 81 c7 e0 08 ret 4000539c: 81 e8 00 00 restore ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 400053a0: 7f ff f2 8e call 40001dd8 <== NOT EXECUTED 400053a4: 01 00 00 00 nop <== NOT EXECUTED 400053a8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED _TOD_Get( &now ); 400053ac: 40 00 07 4b call 400070d8 <_TOD_Get> <== NOT EXECUTED 400053b0: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED _ISR_Enable(level); 400053b4: 7f ff f2 8d call 40001de8 <== NOT EXECUTED 400053b8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED time->tv_sec = now.tv_sec; 400053bc: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 400053c0: d0 07 bf ec ld [ %fp + -20 ], %o0 <== NOT EXECUTED 400053c4: 92 10 23 e8 mov 0x3e8, %o1 <== NOT EXECUTED _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 400053c8: c2 26 40 00 st %g1, [ %i1 ] <== NOT EXECUTED time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 400053cc: 40 00 3f 84 call 400151dc <.udiv> <== NOT EXECUTED 400053d0: b0 10 20 00 clr %i0 <== NOT EXECUTED 400053d4: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED 400053d8: 81 c7 e0 08 ret <== NOT EXECUTED 400053dc: 81 e8 00 00 restore <== NOT EXECUTED 40005400 : * * NOTE: This routine only works for leap-years through 2099. */ rtems_status_code rtems_clock_tick( void ) { 40005400: 9d e3 bf 98 save %sp, -104, %sp _TOD_Tickle_ticks(); 40005404: 40 00 07 5d call 40007178 <_TOD_Tickle_ticks> 40005408: 01 00 00 00 nop */ RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_ticks( void ) { _Watchdog_Tickle( &_Watchdog_Ticks_chain ); 4000540c: 11 10 00 67 sethi %hi(0x40019c00), %o0 40005410: 40 00 15 1b call 4000a87c <_Watchdog_Tickle> 40005414: 90 12 20 0c or %o0, 0xc, %o0 ! 40019c0c <_Watchdog_Ticks_chain> _Watchdog_Tickle_ticks(); _Thread_Tickle_timeslice(); 40005418: 40 00 13 3f call 4000a114 <_Thread_Tickle_timeslice> 4000541c: 01 00 00 00 nop * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_context_switch_necessary( void ) { return ( _Context_Switch_necessary ); 40005420: 03 10 00 66 sethi %hi(0x40019800), %g1 40005424: c4 00 63 fc ld [ %g1 + 0x3fc ], %g2 ! 40019bfc <_Context_Switch_necessary> if ( _Thread_Is_context_switch_necessary() && 40005428: 80 a0 a0 00 cmp %g2, 0 4000542c: 02 80 00 06 be 40005444 40005430: 03 10 00 66 sethi %hi(0x40019800), %g1 * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_dispatching_enabled( void ) { return ( _Thread_Dispatch_disable_level == 0 ); 40005434: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 40005438: 80 a0 a0 00 cmp %g2, 0 4000543c: 02 80 00 04 be 4000544c 40005440: 01 00 00 00 nop _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); return RTEMS_SUCCESSFUL; } 40005444: 81 c7 e0 08 ret 40005448: 91 e8 20 00 restore %g0, 0, %o0 _Thread_Tickle_timeslice(); if ( _Thread_Is_context_switch_necessary() && _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); 4000544c: 40 00 0f 45 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40005450: b0 10 20 00 clr %i0 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 40005454: 81 c7 e0 08 ret <== NOT EXECUTED 40005458: 81 e8 00 00 restore <== NOT EXECUTED 40002b18 : void rtems_cpu_usage_report_with_plugin( void *context, rtems_printk_plugin_t print ) { 40002b18: 9d e3 bf 68 save %sp, -152, %sp struct timespec uptime, total, ran; #else uint32_t total_units = 0; #endif if ( !print ) 40002b1c: 80 a6 60 00 cmp %i1, 0 40002b20: 02 80 00 61 be 40002ca4 40002b24: 01 00 00 00 nop * When not using nanosecond CPU usage resolution, we have to count * the number of "ticks" we gave credit for to give the user a rough * guideline as to what each number means proportionally. */ #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS _TOD_Get_uptime( &uptime ); 40002b28: 40 00 17 c2 call 40008a30 <_TOD_Get_uptime> 40002b2c: 90 07 bf e0 add %fp, -32, %o0 _Timespec_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total ); 40002b30: 92 07 bf e0 add %fp, -32, %o1 40002b34: 94 07 bf d8 add %fp, -40, %o2 40002b38: 11 10 00 98 sethi %hi(0x40026000), %o0 40002b3c: 40 00 25 ff call 4000c338 <_Timespec_Subtract> 40002b40: 90 12 23 f4 or %o0, 0x3f4, %o0 ! 400263f4 } } } #endif (*print)( context, "CPU Usage by thread\n" 40002b44: 90 10 00 18 mov %i0, %o0 40002b48: 13 10 00 6e sethi %hi(0x4001b800), %o1 40002b4c: 9f c6 40 00 call %i1 40002b50: 92 12 61 e8 or %o1, 0x1e8, %o1 ! 4001b9e8 40002b54: 03 10 00 98 sethi %hi(0x40026000), %g1 if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 40002b58: 05 10 00 6e sethi %hi(0x4001b800), %g2 } } } #endif (*print)( context, "CPU Usage by thread\n" 40002b5c: aa 10 60 44 or %g1, 0x44, %l5 the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40002b60: a8 07 bf eb add %fp, -21, %l4 /* * Print the information */ (*print)( context, 40002b64: 03 10 00 6e sethi %hi(0x4001b800), %g1 if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 40002b68: b4 10 a2 28 or %g2, 0x228, %i2 /* * Print the information */ (*print)( context, 40002b6c: b6 10 62 40 or %g1, 0x240, %i3 /* * If this is the currently executing thread, account for time * since the last context switch. */ ran = the_thread->cpu_time_used; if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 40002b70: 39 10 00 98 sethi %hi(0x40026000), %i4 _Timespec_Subtract( &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40002b74: ba 07 bf f4 add %fp, -12, %i5 40002b78: ae 07 bf f0 add %fp, -16, %l7 40002b7c: ac 07 bf d0 add %fp, -48, %l6 ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 40002b80: c2 05 40 00 ld [ %l5 ], %g1 40002b84: 80 a0 60 00 cmp %g1, 0 40002b88: 22 80 00 39 be,a 40002c6c 40002b8c: aa 05 60 04 add %l5, 4, %l5 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 40002b90: e6 00 60 04 ld [ %g1 + 4 ], %l3 if ( information ) { 40002b94: 80 a4 e0 00 cmp %l3, 0 40002b98: 22 80 00 35 be,a 40002c6c 40002b9c: aa 05 60 04 add %l5, 4, %l5 <== NOT EXECUTED for ( i=1 ; i <= information->maximum ; i++ ) { 40002ba0: c2 14 e0 10 lduh [ %l3 + 0x10 ], %g1 40002ba4: 86 90 60 00 orcc %g1, 0, %g3 40002ba8: 22 80 00 31 be,a 40002c6c 40002bac: aa 05 60 04 add %l5, 4, %l5 <== NOT EXECUTED 40002bb0: a4 10 20 01 mov 1, %l2 the_thread = (Thread_Control *)information->local_table[ i ]; 40002bb4: c4 04 e0 20 ld [ %l3 + 0x20 ], %g2 40002bb8: 83 2c a0 02 sll %l2, 2, %g1 40002bbc: e0 00 80 01 ld [ %g2 + %g1 ], %l0 if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40002bc0: 94 10 00 14 mov %l4, %o2 40002bc4: 92 10 20 05 mov 5, %o1 information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) 40002bc8: 80 a4 20 00 cmp %l0, 0 40002bcc: 02 80 00 22 be 40002c54 40002bd0: a4 04 a0 01 inc %l2 continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40002bd4: d0 04 20 08 ld [ %l0 + 8 ], %o0 40002bd8: 40 00 10 bb call 40006ec4 40002bdc: a2 10 00 16 mov %l6, %l1 (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 40002be0: d4 04 20 08 ld [ %l0 + 8 ], %o2 40002be4: 90 10 00 18 mov %i0, %o0 40002be8: 92 10 00 1a mov %i2, %o1 40002bec: 9f c6 40 00 call %i1 40002bf0: 96 10 00 14 mov %l4, %o3 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS /* * If this is the currently executing thread, account for time * since the last context switch. */ ran = the_thread->cpu_time_used; 40002bf4: c4 1c 20 90 ldd [ %l0 + 0x90 ], %g2 if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 40002bf8: c8 07 21 bc ld [ %i4 + 0x1bc ], %g4 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS /* * If this is the currently executing thread, account for time * since the last context switch. */ ran = the_thread->cpu_time_used; 40002bfc: c4 3f bf d0 std %g2, [ %fp + -48 ] if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 40002c00: da 01 20 08 ld [ %g4 + 8 ], %o5 40002c04: c2 04 20 08 ld [ %l0 + 8 ], %g1 40002c08: 80 a3 40 01 cmp %o5, %g1 40002c0c: 02 80 00 28 be 40002cac 40002c10: 92 07 bf e0 add %fp, -32, %o1 _Timespec_Subtract( &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40002c14: 94 10 00 1d mov %i5, %o2 40002c18: 96 10 00 17 mov %l7, %o3 40002c1c: 90 10 00 11 mov %l1, %o0 40002c20: 40 00 25 36 call 4000c0f8 <_Timespec_Divide> 40002c24: 92 07 bf d8 add %fp, -40, %o1 /* * Print the information */ (*print)( context, 40002c28: d0 07 bf d4 ld [ %fp + -44 ], %o0 40002c2c: 40 00 57 b0 call 40018aec <.udiv> 40002c30: 92 10 23 e8 mov 0x3e8, %o1 40002c34: d4 07 bf d0 ld [ %fp + -48 ], %o2 40002c38: d8 07 bf f4 ld [ %fp + -12 ], %o4 40002c3c: da 07 bf f0 ld [ %fp + -16 ], %o5 40002c40: 96 10 00 08 mov %o0, %o3 40002c44: 92 10 00 1b mov %i3, %o1 40002c48: 9f c6 40 00 call %i1 40002c4c: 90 10 00 18 mov %i0, %o0 40002c50: c6 14 e0 10 lduh [ %l3 + 0x10 ], %g3 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) continue; information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { 40002c54: 83 28 e0 10 sll %g3, 0x10, %g1 40002c58: 83 30 60 10 srl %g1, 0x10, %g1 40002c5c: 80 a0 40 12 cmp %g1, %l2 40002c60: 3a bf ff d6 bcc,a 40002bb8 40002c64: c4 04 e0 20 ld [ %l3 + 0x20 ], %g2 40002c68: aa 05 60 04 add %l5, 4, %l5 " ID NAME TICKS PERCENT\n" #endif ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40002c6c: 03 10 00 98 sethi %hi(0x40026000), %g1 40002c70: 82 10 60 54 or %g1, 0x54, %g1 ! 40026054 <_Objects_Information_table+0x14> 40002c74: 80 a5 40 01 cmp %l5, %g1 40002c78: 32 bf ff c3 bne,a 40002b84 40002c7c: c2 05 40 00 ld [ %l5 ], %g1 } } } #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS (*print)( context, "Time since last CPU Usage reset %" PRId32 40002c80: d0 07 bf dc ld [ %fp + -36 ], %o0 40002c84: 40 00 57 9a call 40018aec <.udiv> 40002c88: 92 10 23 e8 mov 0x3e8, %o1 40002c8c: d4 07 bf d8 ld [ %fp + -40 ], %o2 40002c90: 96 10 00 08 mov %o0, %o3 40002c94: 13 10 00 6e sethi %hi(0x4001b800), %o1 40002c98: 90 10 00 18 mov %i0, %o0 40002c9c: 9f c6 40 00 call %i1 40002ca0: 92 12 62 58 or %o1, 0x258, %o1 40002ca4: 81 c7 e0 08 ret 40002ca8: 81 e8 00 00 restore * since the last context switch. */ ran = the_thread->cpu_time_used; if ( _Thread_Executing->Object.id == the_thread->Object.id ) { struct timespec used; _Timespec_Subtract( 40002cac: 94 07 bf c8 add %fp, -56, %o2 40002cb0: 11 10 00 98 sethi %hi(0x40026000), %o0 40002cb4: 40 00 25 a1 call 4000c338 <_Timespec_Subtract> 40002cb8: 90 12 21 c4 or %o0, 0x1c4, %o0 ! 400261c4 <_Thread_Time_of_last_context_switch> &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); 40002cbc: 92 07 bf c8 add %fp, -56, %o1 40002cc0: 40 00 24 f4 call 4000c090 <_Timespec_Add_to> 40002cc4: 90 10 00 16 mov %l6, %o0 }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40002cc8: 10 bf ff d4 b 40002c18 40002ccc: 94 10 00 1d mov %i5, %o2 4000d5d8 : { 0, 0, 0 }, }; static int rtems_deviceio_errno(rtems_status_code code) { 4000d5d8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int rc; if ((rc = rtems_assoc_remote_by_local(errno_assoc, (uint32_t ) code))) 4000d5dc: 11 10 00 64 sethi %hi(0x40019000), %o0 <== NOT EXECUTED 4000d5e0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000d5e4: 40 00 01 37 call 4000dac0 <== NOT EXECUTED 4000d5e8: 90 12 21 dc or %o0, 0x1dc, %o0 <== NOT EXECUTED 4000d5ec: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4000d5f0: 02 80 00 05 be 4000d604 <== NOT EXECUTED 4000d5f4: 01 00 00 00 nop <== NOT EXECUTED { errno = rc; 4000d5f8: 40 00 02 d0 call 4000e138 <__errno> <== NOT EXECUTED 4000d5fc: 01 00 00 00 nop <== NOT EXECUTED 4000d600: f0 22 00 00 st %i0, [ %o0 ] <== NOT EXECUTED return -1; } return -1; } 4000d604: 81 c7 e0 08 ret <== NOT EXECUTED 4000d608: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED 40008bcc : int rtems_error( int error_flag, const char *printf_format, ... ) { 40008bcc: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list arglist; int chars_written; va_start(arglist, printf_format); 40008bd0: 94 07 a0 4c add %fp, 0x4c, %o2 <== NOT EXECUTED int rtems_error( int error_flag, const char *printf_format, ... ) { 40008bd4: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40008bd8: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40008bdc: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40008be0: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED va_list arglist; int chars_written; va_start(arglist, printf_format); chars_written = rtems_verror(error_flag, printf_format, arglist); 40008be4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008be8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40008bec: 7f ff ff 7c call 400089dc <== NOT EXECUTED 40008bf0: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); return chars_written; } 40008bf4: 81 c7 e0 08 ret <== NOT EXECUTED 40008bf8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40005694 : rtems_status_code rtems_event_send( Objects_Id id, rtems_event_set event_in ) { 40005694: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40005698: 92 96 20 00 orcc %i0, 0, %o1 4000569c: 12 80 00 1c bne 4000570c 400056a0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400056a4: 23 10 00 66 sethi %hi(0x40019800), %l1 400056a8: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 400056ac: 82 00 60 01 inc %g1 400056b0: c2 24 63 10 st %g1, [ %l1 + 0x310 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 400056b4: 03 10 00 66 sethi %hi(0x40019800), %g1 400056b8: f0 00 63 ec ld [ %g1 + 0x3ec ], %i0 ! 40019bec <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 400056bc: c0 27 bf f4 clr [ %fp + -12 ] rtems_event_set *the_event_set ) { ISR_Level level; _ISR_Disable( level ); 400056c0: 7f ff f1 c6 call 40001dd8 400056c4: e0 06 21 6c ld [ %i0 + 0x16c ], %l0 *the_event_set |= the_new_events; 400056c8: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 400056cc: 82 10 40 19 or %g1, %i1, %g1 400056d0: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _ISR_Enable( level ); 400056d4: 7f ff f1 c5 call 40001de8 400056d8: 01 00 00 00 nop case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; _Event_sets_Post( event_in, &api->pending_events ); _Event_Surrender( the_thread ); 400056dc: 40 00 00 2d call 40005790 <_Event_Surrender> 400056e0: 90 10 00 18 mov %i0, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400056e4: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 400056e8: b0 10 20 00 clr %i0 400056ec: 82 00 7f ff add %g1, -1, %g1 400056f0: c2 24 63 10 st %g1, [ %l1 + 0x310 ] 400056f4: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 400056f8: 80 a0 a0 00 cmp %g2, 0 400056fc: 02 80 00 0a be 40005724 40005700: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40005704: 81 c7 e0 08 ret 40005708: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000570c: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40005710: 80 a0 a0 04 cmp %g2, 4 40005714: 08 80 00 08 bleu 40005734 40005718: 83 32 60 1b srl %o1, 0x1b, %g1 4000571c: 81 c7 e0 08 ret <== NOT EXECUTED 40005720: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40005724: 40 00 0e 8f call 40009160 <_Thread_Dispatch> 40005728: 01 00 00 00 nop 4000572c: 81 c7 e0 08 ret 40005730: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40005734: 80 a0 60 01 cmp %g1, 1 40005738: 12 bf ff f3 bne 40005704 4000573c: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40005740: 83 28 a0 02 sll %g2, 2, %g1 40005744: 05 10 00 66 sethi %hi(0x40019800), %g2 40005748: 84 10 a2 70 or %g2, 0x270, %g2 ! 40019a70 <_Objects_Information_table> 4000574c: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40005750: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40005754: 80 a2 20 00 cmp %o0, 0 40005758: 02 bf ff f5 be 4000572c 4000575c: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40005760: 40 00 09 58 call 40007cc0 <_Objects_Get> 40005764: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40005768: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000576c: b0 10 00 08 mov %o0, %i0 40005770: 80 a0 60 00 cmp %g1, 0 40005774: 02 bf ff d3 be 400056c0 40005778: 23 10 00 66 sethi %hi(0x40019800), %l1 4000577c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40005780: 18 bf ff e1 bgu 40005704 <== NOT EXECUTED 40005784: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40005788: 81 c7 e0 08 ret <== NOT EXECUTED 4000578c: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4000da80 : rtems_status_code rtems_extension_create( rtems_name name, rtems_extensions_table *extension_table, Objects_Id *id ) { 4000da80: 9d e3 bf 98 save %sp, -104, %sp Extension_Control *the_extension; if ( !rtems_is_name_valid( name ) ) 4000da84: a6 96 20 00 orcc %i0, 0, %l3 4000da88: 02 80 00 16 be 4000dae0 4000da8c: b0 10 20 03 mov 3, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000da90: 23 10 00 ac sethi %hi(0x4002b000), %l1 4000da94: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4002b190 <_Thread_Dispatch_disable_level> 4000da98: 82 00 60 01 inc %g1 4000da9c: c2 24 61 90 st %g1, [ %l1 + 0x190 ] * the inactive chain of free extension control blocks. */ RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void ) { return (Extension_Control *) _Objects_Allocate( &_Extension_Information ); 4000daa0: 25 10 00 ad sethi %hi(0x4002b400), %l2 4000daa4: 40 00 03 cb call 4000e9d0 <_Objects_Allocate> 4000daa8: 90 14 a0 2c or %l2, 0x2c, %o0 ! 4002b42c <_Extension_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_extension = _Extension_Allocate(); if ( !the_extension ) { 4000daac: a0 92 20 00 orcc %o0, 0, %l0 4000dab0: 12 80 00 0e bne 4000dae8 4000dab4: 90 04 20 10 add %l0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000dab8: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 4000dabc: b0 10 20 05 mov 5, %i0 <== NOT EXECUTED 4000dac0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000dac4: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 4000dac8: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 4000dacc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000dad0: 12 80 00 20 bne 4000db50 <== NOT EXECUTED 4000dad4: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4000dad8: 40 00 0a 37 call 400103b4 <_Thread_Dispatch> <== NOT EXECUTED 4000dadc: 01 00 00 00 nop <== NOT EXECUTED 4000dae0: 81 c7 e0 08 ret <== NOT EXECUTED 4000dae4: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } _User_extensions_Add_set( &the_extension->Extension, extension_table ); 4000dae8: 40 00 0e bb call 400115d4 <_User_extensions_Add_set> 4000daec: 92 10 00 19 mov %i1, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000daf0: 90 14 a0 2c or %l2, 0x2c, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000daf4: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000daf8: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 4000dafc: 03 00 00 3f sethi %hi(0xfc00), %g1 4000db00: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000db04: 82 08 c0 01 and %g3, %g1, %g1 4000db08: 80 a0 40 02 cmp %g1, %g2 4000db0c: 38 80 00 06 bgu,a 4000db24 4000db10: e6 24 20 0c st %l3, [ %l0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000db14: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000db18: 83 28 60 02 sll %g1, 2, %g1 4000db1c: e0 20 80 01 st %l0, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 4000db20: e6 24 20 0c st %l3, [ %l0 + 0xc ] &_Extension_Information, &the_extension->Object, (Objects_Name) name ); *id = the_extension->Object.id; 4000db24: c6 26 80 00 st %g3, [ %i2 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000db28: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 4000db2c: b0 10 20 00 clr %i0 4000db30: 82 00 7f ff add %g1, -1, %g1 4000db34: c2 24 61 90 st %g1, [ %l1 + 0x190 ] 4000db38: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 4000db3c: 80 a0 a0 00 cmp %g2, 0 4000db40: 12 80 00 04 bne 4000db50 4000db44: 01 00 00 00 nop _Thread_Dispatch(); 4000db48: 40 00 0a 1b call 400103b4 <_Thread_Dispatch> 4000db4c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 4000db50: 81 c7 e0 08 ret 4000db54: 81 e8 00 00 restore 4000db58 : */ rtems_status_code rtems_extension_delete( Objects_Id id ) { 4000db58: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Get ( Objects_Id id, Objects_Locations *location ) { return (Extension_Control *) 4000db5c: 21 10 00 ad sethi %hi(0x4002b400), %l0 <== NOT EXECUTED 4000db60: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000db64: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 4000db68: 40 00 04 eb call 4000ef14 <_Objects_Get> <== NOT EXECUTED 4000db6c: 90 14 20 2c or %l0, 0x2c, %o0 <== NOT EXECUTED Extension_Control *the_extension; Objects_Locations location; the_extension = _Extension_Get( id, &location ); switch ( location ) { 4000db70: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4000db74: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000db78: 12 80 00 1e bne 4000dbf0 <== NOT EXECUTED 4000db7c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED case OBJECTS_ERROR: case OBJECTS_REMOTE: /* should never return this */ return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _User_extensions_Remove_set( &the_extension->Extension ); 4000db80: 40 00 0e cf call 400116bc <_User_extensions_Remove_set> <== NOT EXECUTED 4000db84: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000db88: 90 14 20 2c or %l0, 0x2c, %o0 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000db8c: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000db90: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 <== NOT EXECUTED 4000db94: 05 00 00 3f sethi %hi(0xfc00), %g2 <== NOT EXECUTED 4000db98: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff <== NOT EXECUTED 4000db9c: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 4000dba0: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000dba4: 38 80 00 06 bgu,a 4000dbbc <== NOT EXECUTED 4000dba8: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000dbac: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 <== NOT EXECUTED 4000dbb0: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4000dbb4: c0 20 80 01 clr [ %g2 + %g1 ] <== NOT EXECUTED uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); /* _Objects_Clear_name( the_object->name, information->name_length ); */ the_object->name = 0; 4000dbb8: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Extension_Free ( Extension_Control *the_extension ) { _Objects_Free( &_Extension_Information, &the_extension->Object ); 4000dbbc: 40 00 04 93 call 4000ee08 <_Objects_Free> <== NOT EXECUTED 4000dbc0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000dbc4: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED 4000dbc8: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4002b190 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000dbcc: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000dbd0: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 4000dbd4: c4 20 61 90 st %g2, [ %g1 + 0x190 ] <== NOT EXECUTED 4000dbd8: c6 00 61 90 ld [ %g1 + 0x190 ], %g3 <== NOT EXECUTED 4000dbdc: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4000dbe0: 02 80 00 09 be 4000dc04 <== NOT EXECUTED 4000dbe4: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000dbe8: 81 c7 e0 08 ret <== NOT EXECUTED 4000dbec: 81 e8 00 00 restore <== NOT EXECUTED { Extension_Control *the_extension; Objects_Locations location; the_extension = _Extension_Get( id, &location ); switch ( location ) { 4000dbf0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000dbf4: 08 bf ff fd bleu 4000dbe8 <== NOT EXECUTED 4000dbf8: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 4000dbfc: 81 c7 e0 08 ret <== NOT EXECUTED 4000dc00: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000dc04: 40 00 09 ec call 400103b4 <_Thread_Dispatch> <== NOT EXECUTED 4000dc08: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000dc0c: 81 c7 e0 08 ret <== NOT EXECUTED 4000dc10: 81 e8 00 00 restore <== NOT EXECUTED 400069f4 : */ void rtems_fatal_error_occurred( uint32_t the_error ) { 400069f4: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, FALSE, the_error ); 400069f8: 92 10 20 00 clr %o1 <== NOT EXECUTED 400069fc: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 40006a00: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40006a04: 40 00 03 31 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 40006a08: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40006a0c: 01 00 00 00 nop 40001f60 : int rtems_filesystem_evaluate_parent( int flags, rtems_filesystem_location_info_t *pathloc ) { 40001f60: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED rtems_filesystem_location_info_t parent; int result; if ( !pathloc ) 40001f64: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40001f68: 02 80 00 28 be 40002008 <== NOT EXECUTED 40001f6c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ if ( !pathloc->ops->evalpath_h ) 40001f70: c8 06 60 08 ld [ %i1 + 8 ], %g4 <== NOT EXECUTED 40001f74: da 01 00 00 ld [ %g4 ], %o5 <== NOT EXECUTED 40001f78: 80 a3 60 00 cmp %o5, 0 <== NOT EXECUTED 40001f7c: 02 80 00 1d be 40001ff0 <== NOT EXECUTED 40001f80: 11 10 00 60 sethi %hi(0x40018000), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); parent = *pathloc; 40001f84: c6 06 60 0c ld [ %i1 + 0xc ], %g3 <== NOT EXECUTED 40001f88: c2 06 40 00 ld [ %i1 ], %g1 <== NOT EXECUTED 40001f8c: c4 06 60 04 ld [ %i1 + 4 ], %g2 <== NOT EXECUTED 40001f90: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED 40001f94: c4 27 bf ec st %g2, [ %fp + -20 ] <== NOT EXECUTED 40001f98: c8 27 bf f0 st %g4, [ %fp + -16 ] <== NOT EXECUTED 40001f9c: c6 27 bf f4 st %g3, [ %fp + -12 ] <== NOT EXECUTED result = (*pathloc->ops->evalpath_h)( "..", flags, &parent ); 40001fa0: b2 07 bf e8 add %fp, -24, %i1 <== NOT EXECUTED 40001fa4: 90 12 20 60 or %o0, 0x60, %o0 <== NOT EXECUTED 40001fa8: 9f c3 40 00 call %o5 <== NOT EXECUTED 40001fac: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED if (result != 0){ 40001fb0: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40001fb4: 12 80 00 0d bne 40001fe8 <== NOT EXECUTED 40001fb8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return -1; } rtems_filesystem_freenode( &parent ); 40001fbc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40001fc0: 02 80 00 16 be 40002018 <== NOT EXECUTED 40001fc4: 01 00 00 00 nop <== NOT EXECUTED 40001fc8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40001fcc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40001fd0: 02 80 00 12 be 40002018 <== NOT EXECUTED 40001fd4: 01 00 00 00 nop <== NOT EXECUTED 40001fd8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40001fdc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED return result; } 40001fe0: 81 c7 e0 08 ret <== NOT EXECUTED 40001fe4: 81 e8 00 00 restore <== NOT EXECUTED if ( !pathloc->ops->evalpath_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); parent = *pathloc; result = (*pathloc->ops->evalpath_h)( "..", flags, &parent ); if (result != 0){ 40001fe8: 81 c7 e0 08 ret <== NOT EXECUTED 40001fec: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED if ( !pathloc ) rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ if ( !pathloc->ops->evalpath_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40001ff0: 40 00 30 52 call 4000e138 <__errno> <== NOT EXECUTED 40001ff4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40001ff8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40001ffc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002000: 81 c7 e0 08 ret <== NOT EXECUTED 40002004: 81 e8 00 00 restore <== NOT EXECUTED { rtems_filesystem_location_info_t parent; int result; if ( !pathloc ) rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 40002008: 40 00 30 4c call 4000e138 <__errno> <== NOT EXECUTED 4000200c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002010: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 40002014: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002018: 81 c7 e0 08 ret <== NOT EXECUTED 4000201c: 81 e8 00 00 restore <== NOT EXECUTED 40002020 : const char *pathname, int flags, rtems_filesystem_location_info_t *pathloc, int follow_link ) { 40002020: 9d e3 bf 98 save %sp, -104, %sp /* * Verify Input parameters. */ if ( !pathname ) 40002024: 80 a6 20 00 cmp %i0, 0 40002028: 02 80 00 50 be 40002168 4000202c: 80 a6 a0 00 cmp %i2, 0 rtems_set_errno_and_return_minus_one( EFAULT ); if ( !pathloc ) 40002030: 02 80 00 54 be 40002180 40002034: 01 00 00 00 nop /* * Evaluate the path using the optable evalpath. */ rtems_filesystem_get_start_loc( pathname, &i, pathloc ); 40002038: c2 4e 00 00 ldsb [ %i0 ], %g1 4000203c: 80 a0 60 2f cmp %g1, 0x2f 40002040: 02 80 00 11 be 40002084 40002044: 80 a0 60 5c cmp %g1, 0x5c 40002048: 02 80 00 0f be 40002084 <== NOT EXECUTED 4000204c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002050: 02 80 00 0e be 40002088 <== NOT EXECUTED 40002054: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40002058: c6 00 61 30 ld [ %g1 + 0x130 ], %g3 ! 40019130 <== NOT EXECUTED 4000205c: 88 10 20 00 clr %g4 <== NOT EXECUTED 40002060: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 40002064: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 40002068: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 4000206c: c4 26 a0 04 st %g2, [ %i2 + 4 ] <== NOT EXECUTED 40002070: c2 00 e0 0c ld [ %g3 + 0xc ], %g1 <== NOT EXECUTED 40002074: c2 26 a0 08 st %g1, [ %i2 + 8 ] <== NOT EXECUTED 40002078: c4 00 e0 10 ld [ %g3 + 0x10 ], %g2 <== NOT EXECUTED 4000207c: 10 80 00 0d b 400020b0 <== NOT EXECUTED 40002080: c4 26 a0 0c st %g2, [ %i2 + 0xc ] <== NOT EXECUTED 40002084: 03 10 00 64 sethi %hi(0x40019000), %g1 40002088: c6 00 61 30 ld [ %g1 + 0x130 ], %g3 ! 40019130 4000208c: 88 10 20 01 mov 1, %g4 40002090: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 40002094: c2 26 80 00 st %g1, [ %i2 ] 40002098: c4 00 e0 18 ld [ %g3 + 0x18 ], %g2 4000209c: c4 26 a0 04 st %g2, [ %i2 + 4 ] 400020a0: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 400020a4: c2 26 a0 08 st %g1, [ %i2 + 8 ] 400020a8: c4 00 e0 20 ld [ %g3 + 0x20 ], %g2 400020ac: c4 26 a0 0c st %g2, [ %i2 + 0xc ] if ( !pathloc->ops->evalpath_h ) 400020b0: c2 06 a0 08 ld [ %i2 + 8 ], %g1 400020b4: c2 00 40 00 ld [ %g1 ], %g1 400020b8: 80 a0 60 00 cmp %g1, 0 400020bc: 02 80 00 25 be 40002150 400020c0: 90 06 00 04 add %i0, %g4, %o0 rtems_set_errno_and_return_minus_one( ENOTSUP ); result = (*pathloc->ops->evalpath_h)( &pathname[i], flags, pathloc ); 400020c4: 92 10 00 19 mov %i1, %o1 400020c8: 9f c0 40 00 call %g1 400020cc: 94 10 00 1a mov %i2, %o2 /* * Get the Node type and determine if you need to follow the link or * not. */ if ( (result == 0) && follow_link ) { 400020d0: b0 92 20 00 orcc %o0, 0, %i0 400020d4: 12 80 00 0f bne 40002110 400020d8: 80 a6 e0 00 cmp %i3, 0 400020dc: 02 80 00 2d be 40002190 400020e0: 01 00 00 00 nop if ( !pathloc->ops->node_type_h ){ 400020e4: c4 06 a0 08 ld [ %i2 + 8 ], %g2 400020e8: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 400020ec: 80 a0 60 00 cmp %g1, 0 400020f0: 22 80 00 13 be,a 4000213c 400020f4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( pathloc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } type = (*pathloc->ops->node_type_h)( pathloc ); 400020f8: 9f c0 40 00 call %g1 400020fc: 90 10 00 1a mov %i2, %o0 if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || 40002100: 90 02 3f fd add %o0, -3, %o0 40002104: 80 a2 20 01 cmp %o0, 1 40002108: 28 80 00 04 bleu,a 40002118 4000210c: c4 06 a0 08 ld [ %i2 + 8 ], %g2 <== NOT EXECUTED } } return result; } 40002110: 81 c7 e0 08 ret 40002114: 81 e8 00 00 restore type = (*pathloc->ops->node_type_h)( pathloc ); if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || ( type == RTEMS_FILESYSTEM_SYM_LINK ) ) { if ( !pathloc->ops->eval_link_h ){ 40002118: c2 00 a0 34 ld [ %g2 + 0x34 ], %g1 <== NOT EXECUTED 4000211c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002120: 02 80 00 06 be 40002138 <== NOT EXECUTED 40002124: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED * pathloc will be passed up (and eventually released). * Hence, the (valid) originial node that we submit to * eval_link_h() should be released by the handler. */ result = (*pathloc->ops->eval_link_h)( pathloc, flags ); 40002128: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000212c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } } return result; } 40002130: 81 c7 e0 08 ret <== NOT EXECUTED 40002134: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || ( type == RTEMS_FILESYSTEM_SYM_LINK ) ) { if ( !pathloc->ops->eval_link_h ){ rtems_filesystem_freenode( pathloc ); 40002138: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000213c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002140: 02 80 00 04 be 40002150 <== NOT EXECUTED 40002144: 01 00 00 00 nop <== NOT EXECUTED 40002148: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000214c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40002150: 40 00 2f fa call 4000e138 <__errno> <== NOT EXECUTED 40002154: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002158: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000215c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002160: 81 c7 e0 08 ret <== NOT EXECUTED 40002164: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify Input parameters. */ if ( !pathname ) rtems_set_errno_and_return_minus_one( EFAULT ); 40002168: 40 00 2f f4 call 4000e138 <__errno> <== NOT EXECUTED 4000216c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002170: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 40002174: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002178: 81 c7 e0 08 ret <== NOT EXECUTED 4000217c: 81 e8 00 00 restore <== NOT EXECUTED if ( !pathloc ) rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 40002180: 40 00 2f ee call 4000e138 <__errno> <== NOT EXECUTED 40002184: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002188: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4000218c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002190: 81 c7 e0 08 ret 40002194: 81 e8 00 00 restore 4000bcc4 : * configuration is a single instantiation of the IMFS or miniIMFS with * a single "/dev" directory in it. */ void rtems_filesystem_initialize( void ) { 4000bcc4: 9d e3 bf 80 save %sp, -128, %sp /* * Set the default umask to "022". */ rtems_filesystem_umask = 022; 4000bcc8: 25 10 00 64 sethi %hi(0x40019000), %l2 4000bccc: c4 04 a1 30 ld [ %l2 + 0x130 ], %g2 ! 40019130 4000bcd0: 82 10 20 12 mov 0x12, %g1 init_fs_mount_table(); 4000bcd4: 40 00 01 b8 call 4000c3b4 4000bcd8: c2 30 a0 24 sth %g1, [ %g2 + 0x24 ] /* * mount the first filesystem. */ if ( rtems_filesystem_mount_table_size == 0 ) 4000bcdc: 03 10 00 62 sethi %hi(0x40018800), %g1 4000bce0: c4 00 63 28 ld [ %g1 + 0x328 ], %g2 ! 40018b28 4000bce4: 80 a0 a0 00 cmp %g2, 0 4000bce8: 02 80 00 40 be 4000bde8 4000bcec: 03 10 00 62 sethi %hi(0x40018800), %g1 rtems_fatal_error_occurred( 0xABCD0001 ); mt = &rtems_filesystem_mount_table[0]; 4000bcf0: c4 00 63 24 ld [ %g1 + 0x324 ], %g2 ! 40018b24 status = mount( 4000bcf4: 90 07 bf f4 add %fp, -12, %o0 4000bcf8: d8 00 a0 0c ld [ %g2 + 0xc ], %o4 4000bcfc: d2 00 80 00 ld [ %g2 ], %o1 4000bd00: d4 00 a0 04 ld [ %g2 + 4 ], %o2 4000bd04: 40 00 01 b4 call 4000c3d4 4000bd08: d6 00 a0 08 ld [ %g2 + 8 ], %o3 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) 4000bd0c: 80 a2 3f ff cmp %o0, -1 4000bd10: 02 80 00 45 be 4000be24 4000bd14: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000bd18: c8 07 bf f4 ld [ %fp + -12 ], %g4 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) rtems_fatal_error_occurred( 0xABCD0002 ); rtems_filesystem_link_counts = 0; 4000bd1c: c2 04 a1 30 ld [ %l2 + 0x130 ], %g1 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000bd20: c4 01 20 18 ld [ %g4 + 0x18 ], %g2 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) rtems_fatal_error_occurred( 0xABCD0002 ); rtems_filesystem_link_counts = 0; 4000bd24: c0 30 60 26 clrh [ %g1 + 0x26 ] * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000bd28: c4 20 60 14 st %g2, [ %g1 + 0x14 ] 4000bd2c: c6 01 20 1c ld [ %g4 + 0x1c ], %g3 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd30: a0 07 bf e4 add %fp, -28, %l0 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000bd34: c6 20 60 18 st %g3, [ %g1 + 0x18 ] 4000bd38: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd3c: 23 10 00 60 sethi %hi(0x40018000), %l1 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000bd40: c4 20 60 1c st %g2, [ %g1 + 0x1c ] 4000bd44: c6 01 20 24 ld [ %g4 + 0x24 ], %g3 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd48: 92 10 20 00 clr %o1 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000bd4c: c6 20 60 20 st %g3, [ %g1 + 0x20 ] /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd50: 94 10 00 10 mov %l0, %o2 4000bd54: 96 10 20 00 clr %o3 4000bd58: 7f ff d8 b2 call 40002020 4000bd5c: 90 14 62 c8 or %l1, 0x2c8, %o0 rtems_filesystem_root = loc; 4000bd60: c4 04 a1 30 ld [ %l2 + 0x130 ], %g2 4000bd64: c2 07 bf e4 ld [ %fp + -28 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd68: 94 10 00 10 mov %l0, %o2 * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4000bd6c: c2 20 a0 14 st %g1, [ %g2 + 0x14 ] 4000bd70: c2 07 bf e8 ld [ %fp + -24 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd74: 92 10 20 00 clr %o1 * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4000bd78: c2 20 a0 18 st %g1, [ %g2 + 0x18 ] 4000bd7c: c2 07 bf ec ld [ %fp + -20 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd80: 96 10 20 00 clr %o3 * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4000bd84: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] 4000bd88: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000bd8c: 90 14 62 c8 or %l1, 0x2c8, %o0 4000bd90: 7f ff d8 a4 call 40002020 4000bd94: c2 20 a0 20 st %g1, [ %g2 + 0x20 ] rtems_filesystem_current = loc; 4000bd98: c2 07 bf e4 ld [ %fp + -28 ], %g1 4000bd9c: c6 04 a1 30 ld [ %l2 + 0x130 ], %g3 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000bda0: 11 10 00 60 sethi %hi(0x40018000), %o0 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_current = loc; 4000bda4: c2 20 e0 04 st %g1, [ %g3 + 4 ] 4000bda8: c2 07 bf e8 ld [ %fp + -24 ], %g1 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000bdac: 90 12 22 d0 or %o0, 0x2d0, %o0 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_current = loc; 4000bdb0: c2 20 e0 08 st %g1, [ %g3 + 8 ] 4000bdb4: c2 07 bf ec ld [ %fp + -20 ], %g1 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000bdb8: 92 10 21 ff mov 0x1ff, %o1 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_current = loc; 4000bdbc: c2 20 e0 0c st %g1, [ %g3 + 0xc ] 4000bdc0: c4 07 bf f0 ld [ %fp + -16 ], %g2 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000bdc4: 40 00 01 72 call 4000c38c 4000bdc8: c4 20 e0 10 st %g2, [ %g3 + 0x10 ] if ( status != 0 ) 4000bdcc: 80 a2 20 00 cmp %o0, 0 4000bdd0: 02 80 00 04 be 4000bde0 4000bdd4: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 rtems_fatal_error_occurred( 0xABCD0003 ); 4000bdd8: 7f ff eb 07 call 400069f4 <== NOT EXECUTED 4000bddc: 90 12 20 03 or %o0, 3, %o0 ! abcd0003 <== NOT EXECUTED 4000bde0: 81 c7 e0 08 ret 4000bde4: 81 e8 00 00 restore /* * mount the first filesystem. */ if ( rtems_filesystem_mount_table_size == 0 ) rtems_fatal_error_occurred( 0xABCD0001 ); 4000bde8: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 4000bdec: 7f ff eb 02 call 400069f4 <== NOT EXECUTED 4000bdf0: 90 12 20 01 or %o0, 1, %o0 ! abcd0001 <== NOT EXECUTED mt = &rtems_filesystem_mount_table[0]; 4000bdf4: 03 10 00 62 sethi %hi(0x40018800), %g1 <== NOT EXECUTED 4000bdf8: c4 00 63 24 ld [ %g1 + 0x324 ], %g2 ! 40018b24 <== NOT EXECUTED status = mount( 4000bdfc: 90 07 bf f4 add %fp, -12, %o0 <== NOT EXECUTED 4000be00: d8 00 a0 0c ld [ %g2 + 0xc ], %o4 <== NOT EXECUTED 4000be04: d2 00 80 00 ld [ %g2 ], %o1 <== NOT EXECUTED 4000be08: d4 00 a0 04 ld [ %g2 + 4 ], %o2 <== NOT EXECUTED 4000be0c: 40 00 01 72 call 4000c3d4 <== NOT EXECUTED 4000be10: d6 00 a0 08 ld [ %g2 + 8 ], %o3 <== NOT EXECUTED &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) 4000be14: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000be18: 32 bf ff c1 bne,a 4000bd1c <== NOT EXECUTED 4000be1c: c8 07 bf f4 ld [ %fp + -12 ], %g4 <== NOT EXECUTED rtems_fatal_error_occurred( 0xABCD0002 ); 4000be20: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 4000be24: 7f ff ea f4 call 400069f4 <== NOT EXECUTED 4000be28: 90 12 20 02 or %o0, 2, %o0 ! abcd0002 <== NOT EXECUTED * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000be2c: 10 bf ff bc b 4000bd1c <== NOT EXECUTED 4000be30: c8 07 bf f4 ld [ %fp + -12 ], %g4 <== NOT EXECUTED 40006a10 : #include const char *rtems_get_version_string(void) { return _RTEMS_version; } 40006a10: 11 10 00 62 sethi %hi(0x40018800), %o0 <== NOT EXECUTED 40006a14: 81 c3 e0 08 retl <== NOT EXECUTED 40006a18: 90 12 22 a8 or %o0, 0x2a8, %o0 ! 40018aa8 <_RTEMS_version> <== NOT EXECUTED 400067bc : rtems_interrupt_level rtems_initialize_executive_early( rtems_configuration_table *configuration_table, rtems_cpu_table *cpu_table ) { 400067bc: 9d e3 bf 80 save %sp, -128, %sp * Dispatching and interrupts are disabled until the end of the * initialization sequence. This prevents an inadvertent context * switch before the executive is initialized. */ _ISR_Disable( bsp_level ); 400067c0: 7f ff ed 86 call 40001dd8 400067c4: 01 00 00 00 nop 400067c8: a6 10 00 08 mov %o0, %l3 if ( configuration_table == NULL ) 400067cc: 80 a6 20 00 cmp %i0, 0 400067d0: 22 80 00 77 be,a 400069ac 400067d4: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Grab our own copy of the user's CPU table. */ _CPU_Table = *cpu_table; 400067d8: 05 10 00 66 sethi %hi(0x40019800), %g2 RTEMS_INLINE_ROUTINE void _System_state_Handler_initialization ( boolean is_multiprocessing ) { _System_state_Current = SYSTEM_STATE_BEFORE_INITIALIZATION; _System_state_Is_multiprocessing = is_multiprocessing; 400067dc: 03 10 00 67 sethi %hi(0x40019c00), %g1 400067e0: a4 10 a3 24 or %g2, 0x324, %l2 400067e4: 94 10 20 28 mov 0x28, %o2 400067e8: 92 10 00 19 mov %i1, %o1 400067ec: c0 20 60 18 clr [ %g1 + 0x18 ] RTEMS_INLINE_ROUTINE void _System_state_Handler_initialization ( boolean is_multiprocessing ) { _System_state_Current = SYSTEM_STATE_BEFORE_INITIALIZATION; 400067f0: 29 10 00 67 sethi %hi(0x40019c00), %l4 400067f4: 90 10 00 12 mov %l2, %o0 400067f8: 40 00 20 25 call 4000e88c 400067fc: c0 25 20 f0 clr [ %l4 + 0xf0 ] /* * Provided just for user convenience. */ _Configuration_Table = configuration_table; 40006800: 03 10 00 66 sethi %hi(0x40019800), %g1 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_NO_CPU_TABLE ); _CPU_Initialize( cpu_table, _Thread_Dispatch ); 40006804: 90 10 00 19 mov %i1, %o0 40006808: 13 10 00 24 sethi %hi(0x40009000), %o1 4000680c: 92 12 61 60 or %o1, 0x160, %o1 ! 40009160 <_Thread_Dispatch> 40006810: 40 00 11 80 call 4000ae10 <_CPU_Initialize> 40006814: f0 20 63 d0 st %i0, [ %g1 + 0x3d0 ] /* * Do this as early as possible to insure no debugging output * is even attempted to be printed. */ _Debug_Manager_initialization(); 40006818: 40 00 18 bd call 4000cb0c <_Debug_Manager_initialization> 4000681c: a2 10 20 01 mov 1, %l1 _API_extensions_Initialization(); 40006820: 40 00 00 dd call 40006b94 <_API_extensions_Initialization> 40006824: 01 00 00 00 nop _Thread_Dispatch_initialization(); _Workspace_Handler_initialization( 40006828: d2 06 20 04 ld [ %i0 + 4 ], %o1 4000682c: d0 06 00 00 ld [ %i0 ], %o0 * This routine initializes the thread dispatching subsystem. */ RTEMS_INLINE_ROUTINE void _Thread_Dispatch_initialization( void ) { _Thread_Dispatch_disable_level = 1; 40006830: 03 10 00 66 sethi %hi(0x40019800), %g1 40006834: e2 20 63 10 st %l1, [ %g1 + 0x310 ] ! 40019b10 <_Thread_Dispatch_disable_level> 40006838: 40 00 10 48 call 4000a958 <_Workspace_Handler_initialization> 4000683c: 21 10 00 67 sethi %hi(0x40019c00), %l0 (void *)configuration_table->work_space_start, configuration_table->work_space_size ); _User_extensions_Handler_initialization( 40006840: d0 06 20 20 ld [ %i0 + 0x20 ], %o0 40006844: 40 00 0e b9 call 4000a328 <_User_extensions_Handler_initialization> 40006848: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 configuration_table->number_of_initial_extensions, configuration_table->User_extension_table ); _ISR_Handler_initialization(); 4000684c: 40 00 03 af call 40007708 <_ISR_Handler_initialization> 40006850: 01 00 00 00 nop _Objects_Handler_initialization( 40006854: 90 10 20 01 mov 1, %o0 ! 1 40006858: 92 10 20 01 mov 1, %o1 4000685c: 40 00 05 b2 call 40007f24 <_Objects_Handler_initialization> 40006860: 94 10 20 00 clr %o2 multiprocessing_table->node, multiprocessing_table->maximum_nodes, multiprocessing_table->maximum_global_objects ); _Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects; 40006864: 05 10 00 66 sethi %hi(0x40019800), %g2 /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 40006868: c0 23 a0 5c clr [ %sp + 0x5c ] multiprocessing_table->node, multiprocessing_table->maximum_nodes, multiprocessing_table->maximum_global_objects ); _Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects; 4000686c: 03 10 00 66 sethi %hi(0x40019800), %g1 40006870: 82 10 63 50 or %g1, 0x350, %g1 ! 40019b50 <_Internal_Objects> /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 40006874: 92 10 20 01 mov 1, %o1 multiprocessing_table->node, multiprocessing_table->maximum_nodes, multiprocessing_table->maximum_global_objects ); _Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects; 40006878: c2 20 a2 74 st %g1, [ %g2 + 0x274 ] /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 4000687c: 94 10 20 02 mov 2, %o2 40006880: 96 10 20 01 mov 1, %o3 40006884: 98 10 20 74 mov 0x74, %o4 40006888: 9a 10 20 00 clr %o5 4000688c: 40 00 05 34 call 40007d5c <_Objects_Initialize_information> 40006890: 90 14 20 1c or %l0, 0x1c, %o0 _API_Mutex_Allocate( _RTEMS_Allocator_Mutex ); 40006894: 82 10 20 02 mov 2, %g1 40006898: e2 27 bf e8 st %l1, [ %fp + -24 ] 4000689c: c2 27 bf f0 st %g1, [ %fp + -16 ] 400068a0: c0 27 bf ec clr [ %fp + -20 ] 400068a4: c0 27 bf f4 clr [ %fp + -12 ] 400068a8: 40 00 03 b5 call 4000777c <_Objects_Allocate> 400068ac: 90 14 20 1c or %l0, 0x1c, %o0 400068b0: 03 10 00 66 sethi %hi(0x40019800), %g1 400068b4: 84 10 00 08 mov %o0, %g2 400068b8: 92 07 bf e8 add %fp, -24, %o1 400068bc: c4 20 63 e4 st %g2, [ %g1 + 0x3e4 ] 400068c0: 90 02 20 10 add %o0, 0x10, %o0 400068c4: 40 00 01 21 call 40006d48 <_CORE_mutex_Initialize> 400068c8: 94 10 20 01 mov 1, %o2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; 400068cc: 03 10 00 66 sethi %hi(0x40019800), %g1 for ( index=0 ; index <16 ; index++ ) _Priority_Bit_map[ index ] = 0; 400068d0: 05 10 00 67 sethi %hi(0x40019c00), %g2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; 400068d4: c0 30 63 e0 clrh [ %g1 + 0x3e0 ] for ( index=0 ; index <16 ; index++ ) _Priority_Bit_map[ index ] = 0; 400068d8: c0 30 a0 70 clrh [ %g2 + 0x70 ] 400068dc: 82 10 20 02 mov 2, %g1 400068e0: 84 10 a0 70 or %g2, 0x70, %g2 400068e4: c0 30 40 02 clrh [ %g1 + %g2 ] 400068e8: 82 00 60 02 add %g1, 2, %g1 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; for ( index=0 ; index <16 ; index++ ) 400068ec: 80 a0 60 20 cmp %g1, 0x20 400068f0: 32 bf ff fe bne,a 400068e8 400068f4: c0 30 40 02 clrh [ %g1 + %g2 ] _Priority_Handler_initialization(); _Watchdog_Handler_initialization(); 400068f8: 40 00 0f 98 call 4000a758 <_Watchdog_Handler_initialization> 400068fc: 01 00 00 00 nop _TOD_Handler_initialization( configuration_table->microseconds_per_tick ); 40006900: 40 00 02 0f call 4000713c <_TOD_Handler_initialization> 40006904: d0 06 20 0c ld [ %i0 + 0xc ], %o0 _Thread_Handler_initialization( 40006908: d2 06 20 08 ld [ %i0 + 8 ], %o1 4000690c: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 40006910: 40 00 0a db call 4000947c <_Thread_Handler_initialization> 40006914: 94 10 20 00 clr %o2 ); #endif /* MANAGERS */ _RTEMS_API_Initialize( configuration_table ); 40006918: 40 00 00 80 call 40006b18 <_RTEMS_API_Initialize> 4000691c: 90 10 00 18 mov %i0, %o0 _Extension_Manager_initialization( configuration_table->maximum_extensions ); 40006920: 40 00 00 28 call 400069c0 <_Extension_Manager_initialization> 40006924: d0 06 20 08 ld [ %i0 + 8 ], %o0 _IO_Manager_initialization( 40006928: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 4000692c: d4 06 20 14 ld [ %i0 + 0x14 ], %o2 40006930: 40 00 00 4c call 40006a60 <_IO_Manager_initialization> 40006934: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 RTEMS_INLINE_ROUTINE void _System_state_Set ( System_state_Codes state ) { _System_state_Current = state; 40006938: 82 10 20 01 mov 1, %g1 * * At this point all API extensions are in place. After the call to * _Thread_Create_idle() _Thread_Executing and _Thread_Heir will be set. */ _Thread_Create_idle(); 4000693c: 40 00 09 b5 call 40009010 <_Thread_Create_idle> 40006940: c2 25 20 f0 st %g1, [ %l4 + 0xf0 ] /* * Scheduling can properly occur now as long as we avoid dispatching. */ if ( cpu_table->pretasking_hook ) 40006944: d0 06 40 00 ld [ %i1 ], %o0 40006948: 80 a2 20 00 cmp %o0, 0 4000694c: 02 80 00 04 be 4000695c 40006950: 01 00 00 00 nop (*cpu_table->pretasking_hook)(); 40006954: 9f c2 00 00 call %o0 40006958: 01 00 00 00 nop /* * Run the API and BSPs predriver hook. */ _API_extensions_Run_predriver(); 4000695c: 40 00 00 b0 call 40006c1c <_API_extensions_Run_predriver> 40006960: 01 00 00 00 nop if ( _CPU_Table.predriver_hook ) 40006964: c2 04 a0 04 ld [ %l2 + 4 ], %g1 40006968: 80 a0 60 00 cmp %g1, 0 4000696c: 02 80 00 04 be 4000697c 40006970: 01 00 00 00 nop (*_CPU_Table.predriver_hook)(); 40006974: 9f c0 40 00 call %g1 <== NOT EXECUTED 40006978: 01 00 00 00 nop <== NOT EXECUTED * Initialize all the device drivers and initialize the MPCI layer. * * NOTE: The MPCI may be build upon a device driver. */ _IO_Initialize_all_drivers(); 4000697c: 40 00 00 28 call 40006a1c <_IO_Initialize_all_drivers> 40006980: 01 00 00 00 nop * Run the APIs and BSPs postdriver hooks. * * The API extensions are supposed to create user initialization tasks. */ _API_extensions_Run_postdriver(); 40006984: 40 00 00 8b call 40006bb0 <_API_extensions_Run_postdriver> 40006988: 01 00 00 00 nop if ( _CPU_Table.postdriver_hook ) 4000698c: c4 04 a0 08 ld [ %l2 + 8 ], %g2 40006990: 80 a0 a0 00 cmp %g2, 0 40006994: 02 80 00 04 be 400069a4 40006998: 01 00 00 00 nop (*_CPU_Table.postdriver_hook)(); 4000699c: 9f c0 80 00 call %g2 400069a0: 01 00 00 00 nop return bsp_level; } 400069a4: 81 c7 e0 08 ret 400069a8: 91 e8 00 13 restore %g0, %l3, %o0 */ _ISR_Disable( bsp_level ); if ( configuration_table == NULL ) _Internal_error_Occurred( 400069ac: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 400069b0: 40 00 03 46 call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 400069b4: 94 10 20 00 clr %o2 <== NOT EXECUTED /* * Grab our own copy of the user's CPU table. */ _CPU_Table = *cpu_table; 400069b8: 10 bf ff 89 b 400067dc <== NOT EXECUTED 400069bc: 05 10 00 66 sethi %hi(0x40019800), %g2 <== NOT EXECUTED 40001df8 : rtems_status_code rtems_io_lookup_name( const char *name, rtems_driver_name_t *device_info ) { 40001df8: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; rtems_filesystem_location_info_t loc; int result; rtems_filesystem_node_types_t node_type; result = rtems_filesystem_evaluate_path( name, 0x00, &loc, TRUE ); 40001dfc: 92 10 20 00 clr %o1 <== NOT EXECUTED 40001e00: a2 07 bf e8 add %fp, -24, %l1 <== NOT EXECUTED 40001e04: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40001e08: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 40001e0c: 40 00 00 85 call 40002020 <== NOT EXECUTED 40001e10: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 40001e14: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED IMFS_jnode_t *the_jnode; rtems_filesystem_location_info_t loc; int result; rtems_filesystem_node_types_t node_type; result = rtems_filesystem_evaluate_path( name, 0x00, &loc, TRUE ); 40001e18: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 40001e1c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 40001e20: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40001e24: 12 80 00 0e bne 40001e5c <== NOT EXECUTED 40001e28: e4 07 bf e8 ld [ %fp + -24 ], %l2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40001e2c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40001e30: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40001e34: 02 80 00 04 be 40001e44 <== NOT EXECUTED 40001e38: 01 00 00 00 nop <== NOT EXECUTED 40001e3c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40001e40: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40001e44: 40 00 30 bd call 4000e138 <__errno> <== NOT EXECUTED 40001e48: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40001e4c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40001e50: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40001e54: 81 c7 e0 08 ret <== NOT EXECUTED 40001e58: 81 e8 00 00 restore <== NOT EXECUTED } node_type = (*loc.ops->node_type_h)( &loc ); 40001e5c: 9f c0 80 00 call %g2 <== NOT EXECUTED 40001e60: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { 40001e64: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40001e68: 12 80 00 18 bne 40001ec8 <== NOT EXECUTED 40001e6c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40001e70: 80 a2 20 02 cmp %o0, 2 <== NOT EXECUTED 40001e74: 12 80 00 16 bne 40001ecc <== NOT EXECUTED 40001e78: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); return RTEMS_UNSATISFIED; } device_info->device_name = (char *) name; 40001e7c: f0 26 40 00 st %i0, [ %i1 ] <== NOT EXECUTED device_info->device_name_length = strlen( name ); 40001e80: 40 00 35 8c call 4000f4b0 <== NOT EXECUTED 40001e84: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40001e88: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED device_info->major = the_jnode->info.device.major; 40001e8c: c2 04 a0 4c ld [ %l2 + 0x4c ], %g1 <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; rtems_filesystem_freenode( &loc ); 40001e90: c6 07 bf f0 ld [ %fp + -16 ], %g3 <== NOT EXECUTED return RTEMS_UNSATISFIED; } device_info->device_name = (char *) name; device_info->device_name_length = strlen( name ); device_info->major = the_jnode->info.device.major; 40001e94: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; 40001e98: c4 04 a0 50 ld [ %l2 + 0x50 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40001e9c: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40001ea0: 02 80 00 17 be 40001efc <== NOT EXECUTED 40001ea4: c4 26 60 0c st %g2, [ %i1 + 0xc ] <== NOT EXECUTED 40001ea8: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 40001eac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40001eb0: 02 80 00 13 be 40001efc <== NOT EXECUTED 40001eb4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40001eb8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40001ebc: b0 10 20 00 clr %i0 <== NOT EXECUTED 40001ec0: 81 c7 e0 08 ret <== NOT EXECUTED 40001ec4: 81 e8 00 00 restore <== NOT EXECUTED } node_type = (*loc.ops->node_type_h)( &loc ); if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { rtems_filesystem_freenode( &loc ); 40001ec8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40001ecc: 02 80 00 0a be 40001ef4 <== NOT EXECUTED 40001ed0: 01 00 00 00 nop <== NOT EXECUTED 40001ed4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40001ed8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40001edc: 02 80 00 06 be 40001ef4 <== NOT EXECUTED 40001ee0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40001ee4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40001ee8: b0 10 20 0d mov 0xd, %i0 <== NOT EXECUTED 40001eec: 81 c7 e0 08 ret <== NOT EXECUTED 40001ef0: 81 e8 00 00 restore <== NOT EXECUTED device_info->device_name = (char *) name; device_info->device_name_length = strlen( name ); device_info->major = the_jnode->info.device.major; device_info->minor = the_jnode->info.device.minor; rtems_filesystem_freenode( &loc ); 40001ef4: 81 c7 e0 08 ret <== NOT EXECUTED 40001ef8: 91 e8 20 0d restore %g0, 0xd, %o0 <== NOT EXECUTED #endif return RTEMS_SUCCESSFUL; } 40001efc: 81 c7 e0 08 ret <== NOT EXECUTED 40001f00: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40007b24 : rtems_status_code rtems_io_register_driver( rtems_device_major_number major, rtems_driver_address_table *driver_table, rtems_device_major_number *registered_major ) { 40007b24: 9d e3 bf 98 save %sp, -104, %sp /* * Validate the pointer data and contents passed in */ if ( !driver_table ) 40007b28: 80 a6 60 00 cmp %i1, 0 40007b2c: 02 80 00 3e be 40007c24 40007b30: 90 10 00 18 mov %i0, %o0 return RTEMS_INVALID_ADDRESS; if ( !registered_major ) 40007b34: 80 a6 a0 00 cmp %i2, 0 40007b38: 02 80 00 3b be 40007c24 40007b3c: 01 00 00 00 nop return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) 40007b40: c2 06 40 00 ld [ %i1 ], %g1 40007b44: 80 a0 60 00 cmp %g1, 0 40007b48: 22 80 00 34 be,a 40007c18 40007b4c: c2 06 60 04 ld [ %i1 + 4 ], %g1 return RTEMS_INVALID_ADDRESS; *registered_major = 0; 40007b50: c0 26 80 00 clr [ %i2 ] /* * The requested major number is higher than what is configured. */ if ( major >= _IO_Number_of_drivers ) 40007b54: 03 10 00 76 sethi %hi(0x4001d800), %g1 40007b58: c6 00 61 dc ld [ %g1 + 0x1dc ], %g3 ! 4001d9dc <_IO_Number_of_drivers> 40007b5c: 80 a0 c0 08 cmp %g3, %o0 40007b60: 08 80 00 43 bleu 40007c6c 40007b64: b0 10 20 0a mov 0xa, %i0 /* * Test for initialise/open being present to indicate the driver slot is * in use. */ if ( major == 0 ) { 40007b68: 80 a2 20 00 cmp %o0, 0 40007b6c: 12 80 00 1f bne 40007be8 40007b70: 03 10 00 76 sethi %hi(0x4001d800), %g1 boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 40007b74: 90 80 ff ff addcc %g3, -1, %o0 40007b78: 02 80 00 26 be 40007c10 40007b7c: c8 00 61 e0 ld [ %g1 + 0x1e0 ], %g4 if ( !_IO_Driver_address_table[major].initialization_entry && 40007b80: 85 28 e0 05 sll %g3, 5, %g2 40007b84: 83 28 e0 03 sll %g3, 3, %g1 40007b88: 84 20 80 01 sub %g2, %g1, %g2 40007b8c: 84 00 bf e8 add %g2, -24, %g2 40007b90: 10 80 00 04 b 40007ba0 40007b94: 84 00 80 04 add %g2, %g4, %g2 * in use. */ if ( major == 0 ) { boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 40007b98: 02 80 00 1e be 40007c10 40007b9c: 84 00 bf e8 add %g2, -24, %g2 if ( !_IO_Driver_address_table[major].initialization_entry && 40007ba0: c2 00 80 00 ld [ %g2 ], %g1 40007ba4: 80 a0 60 00 cmp %g1, 0 40007ba8: 32 bf ff fc bne,a 40007b98 40007bac: 90 82 3f ff addcc %o0, -1, %o0 40007bb0: c2 00 a0 04 ld [ %g2 + 4 ], %g1 40007bb4: 80 a0 60 00 cmp %g1, 0 40007bb8: 32 bf ff f8 bne,a 40007b98 40007bbc: 90 82 3f ff addcc %o0, -1, %o0 <== NOT EXECUTED if ( !found ) return RTEMS_TOO_MANY; } if ( _IO_Driver_address_table[major].initialization_entry || 40007bc0: 85 2a 20 03 sll %o0, 3, %g2 40007bc4: 83 2a 20 05 sll %o0, 5, %g1 40007bc8: 82 20 40 02 sub %g1, %g2, %g1 40007bcc: 88 01 00 01 add %g4, %g1, %g4 40007bd0: c2 01 20 04 ld [ %g4 + 4 ], %g1 40007bd4: 80 a0 60 00 cmp %g1, 0 40007bd8: 22 80 00 15 be,a 40007c2c 40007bdc: c2 06 40 00 ld [ %i1 ], %g1 _IO_Driver_address_table[major] = *driver_table; *registered_major = major; rtems_io_initialize( major, 0, NULL ); return RTEMS_SUCCESSFUL; 40007be0: 81 c7 e0 08 ret <== NOT EXECUTED 40007be4: 91 e8 20 0c restore %g0, 0xc, %o0 <== NOT EXECUTED if ( !found ) return RTEMS_TOO_MANY; } if ( _IO_Driver_address_table[major].initialization_entry || 40007be8: c8 00 61 e0 ld [ %g1 + 0x1e0 ], %g4 40007bec: 85 2a 20 03 sll %o0, 3, %g2 40007bf0: 83 2a 20 05 sll %o0, 5, %g1 40007bf4: 82 20 40 02 sub %g1, %g2, %g1 40007bf8: c6 00 40 04 ld [ %g1 + %g4 ], %g3 40007bfc: 80 a0 e0 00 cmp %g3, 0 40007c00: 02 bf ff f4 be 40007bd0 40007c04: 88 00 40 04 add %g1, %g4, %g4 _IO_Driver_address_table[major] = *driver_table; *registered_major = major; rtems_io_initialize( major, 0, NULL ); return RTEMS_SUCCESSFUL; 40007c08: 81 c7 e0 08 ret 40007c0c: 91 e8 20 0c restore %g0, 0xc, %o0 40007c10: 81 c7 e0 08 ret 40007c14: 91 e8 20 05 restore %g0, 5, %o0 return RTEMS_INVALID_ADDRESS; if ( !registered_major ) return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) 40007c18: 80 a0 60 00 cmp %g1, 0 40007c1c: 32 bf ff ce bne,a 40007b54 40007c20: c0 26 80 00 clr [ %i2 ] <== NOT EXECUTED _IO_Driver_address_table[major] = *driver_table; *registered_major = major; rtems_io_initialize( major, 0, NULL ); return RTEMS_SUCCESSFUL; 40007c24: 81 c7 e0 08 ret 40007c28: 91 e8 20 09 restore %g0, 9, %o0 _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; *registered_major = major; 40007c2c: d0 26 80 00 st %o0, [ %i2 ] if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40007c30: c2 21 00 00 st %g1, [ %g4 ] 40007c34: c4 06 60 04 ld [ %i1 + 4 ], %g2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40007c38: 92 10 20 00 clr %o1 if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40007c3c: c4 21 20 04 st %g2, [ %g4 + 4 ] 40007c40: c2 06 60 08 ld [ %i1 + 8 ], %g1 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40007c44: 94 10 20 00 clr %o2 if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40007c48: c2 21 20 08 st %g1, [ %g4 + 8 ] 40007c4c: c4 06 60 0c ld [ %i1 + 0xc ], %g2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40007c50: b0 10 20 00 clr %i0 if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40007c54: c4 21 20 0c st %g2, [ %g4 + 0xc ] 40007c58: c2 06 60 10 ld [ %i1 + 0x10 ], %g1 40007c5c: c2 21 20 10 st %g1, [ %g4 + 0x10 ] 40007c60: c4 06 60 14 ld [ %i1 + 0x14 ], %g2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40007c64: 7f ff ff 30 call 40007924 40007c68: c4 21 20 14 st %g2, [ %g4 + 0x14 ] 40007c6c: 81 c7 e0 08 ret 40007c70: 81 e8 00 00 restore 4000917c : #include #include void rtems_iterate_over_all_threads(rtems_per_thread_routine routine) { 4000917c: 9d e3 bf 98 save %sp, -104, %sp uint32_t i; uint32_t api_index; Thread_Control *the_thread; Objects_Information *information; if ( !routine ) 40009180: 80 a6 20 00 cmp %i0, 0 40009184: 02 80 00 23 be 40009210 40009188: 03 10 00 98 sethi %hi(0x40026000), %g1 return; 4000918c: a4 10 60 44 or %g1, 0x44, %l2 ! 40026044 <_Objects_Information_table+0x4> 40009190: a6 04 a0 10 add %l2, 0x10, %l3 for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 40009194: c2 04 80 00 ld [ %l2 ], %g1 40009198: 80 a0 60 00 cmp %g1, 0 4000919c: 22 80 00 1a be,a 40009204 400091a0: a4 04 a0 04 add %l2, 4, %l2 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 400091a4: e2 00 60 04 ld [ %g1 + 4 ], %l1 if ( information ) { 400091a8: 80 a4 60 00 cmp %l1, 0 400091ac: 22 80 00 16 be,a 40009204 400091b0: a4 04 a0 04 add %l2, 4, %l2 <== NOT EXECUTED for ( i=1 ; i <= information->maximum ; i++ ) { 400091b4: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 400091b8: 86 90 60 00 orcc %g1, 0, %g3 400091bc: 22 80 00 12 be,a 40009204 400091c0: a4 04 a0 04 add %l2, 4, %l2 <== NOT EXECUTED 400091c4: a0 10 20 01 mov 1, %l0 the_thread = (Thread_Control *)information->local_table[ i ]; 400091c8: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 400091cc: 83 2c 20 02 sll %l0, 2, %g1 400091d0: d0 00 80 01 ld [ %g2 + %g1 ], %o0 if ( !the_thread ) 400091d4: 80 a2 20 00 cmp %o0, 0 400091d8: 02 80 00 05 be 400091ec 400091dc: a0 04 20 01 inc %l0 continue; (*routine)(the_thread); 400091e0: 9f c6 00 00 call %i0 400091e4: 01 00 00 00 nop 400091e8: c6 14 60 10 lduh [ %l1 + 0x10 ], %g3 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) continue; information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { 400091ec: 83 28 e0 10 sll %g3, 0x10, %g1 400091f0: 83 30 60 10 srl %g1, 0x10, %g1 400091f4: 80 a0 40 10 cmp %g1, %l0 400091f8: 3a bf ff f5 bcc,a 400091cc 400091fc: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 40009200: a4 04 a0 04 add %l2, 4, %l2 if ( !routine ) return; for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40009204: 80 a4 80 13 cmp %l2, %l3 40009208: 32 bf ff e4 bne,a 40009198 4000920c: c2 04 80 00 ld [ %l2 ], %g1 40009210: 81 c7 e0 08 ret 40009214: 81 e8 00 00 restore 4000c260 : * This routine searches the IOP Table for an unused entry. If it * finds one, it returns it. Otherwise, it returns NULL. */ rtems_libio_t *rtems_libio_allocate( void ) { 4000c260: 9d e3 bf 90 save %sp, -112, %sp rtems_libio_t *iop, *next; rtems_status_code rc; rtems_id sema; rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); 4000c264: 23 10 00 66 sethi %hi(0x40019800), %l1 4000c268: d0 04 61 4c ld [ %l1 + 0x14c ], %o0 ! 4001994c 4000c26c: 92 10 20 00 clr %o1 4000c270: 7f ff e6 c6 call 40005d88 4000c274: 94 10 20 00 clr %o2 if (rtems_libio_iop_freelist) { 4000c278: 21 10 00 66 sethi %hi(0x40019800), %l0 4000c27c: c4 04 21 48 ld [ %l0 + 0x148 ], %g2 ! 40019948 4000c280: 80 a0 a0 00 cmp %g2, 0 4000c284: 12 80 00 07 bne 4000c2a0 4000c288: 03 10 00 66 sethi %hi(0x40019800), %g1 } failed: iop = 0; done: 4000c28c: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_semaphore_release( rtems_libio_semaphore ); 4000c290: 7f ff e7 8d call 400060c4 4000c294: d0 04 61 4c ld [ %l1 + 0x14c ], %o0 return iop; } 4000c298: 81 c7 e0 08 ret 4000c29c: 81 e8 00 00 restore rtems_id sema; rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); if (rtems_libio_iop_freelist) { rc = rtems_semaphore_create( 4000c2a0: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 4000c2a4: 92 10 20 01 mov 1, %o1 4000c2a8: 86 20 80 03 sub %g2, %g3, %g3 4000c2ac: 87 38 e0 02 sra %g3, 2, %g3 4000c2b0: 83 28 e0 02 sll %g3, 2, %g1 4000c2b4: 85 28 e0 06 sll %g3, 6, %g2 4000c2b8: 84 20 80 01 sub %g2, %g1, %g2 4000c2bc: 83 28 a0 06 sll %g2, 6, %g1 4000c2c0: 82 20 40 02 sub %g1, %g2, %g1 4000c2c4: 85 28 60 0c sll %g1, 0xc, %g2 4000c2c8: 82 00 40 02 add %g1, %g2, %g1 4000c2cc: 82 00 40 03 add %g1, %g3, %g1 4000c2d0: 83 28 60 04 sll %g1, 4, %g1 4000c2d4: 82 20 40 03 sub %g1, %g3, %g1 4000c2d8: 83 28 60 02 sll %g1, 2, %g1 4000c2dc: 86 20 c0 01 sub %g3, %g1, %g3 4000c2e0: 94 10 20 54 mov 0x54, %o2 4000c2e4: 96 10 20 00 clr %o3 4000c2e8: 11 13 10 92 sethi %hi(0x4c424800), %o0 4000c2ec: 98 07 bf f4 add %fp, -12, %o4 4000c2f0: 90 12 21 00 or %o0, 0x100, %o0 4000c2f4: 7f ff e5 ce call 40005a2c 4000c2f8: 90 10 c0 08 or %g3, %o0, %o0 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &sema ); if (rc != RTEMS_SUCCESSFUL) 4000c2fc: 80 a2 20 00 cmp %o0, 0 4000c300: 32 bf ff e4 bne,a 4000c290 4000c304: b0 10 20 00 clr %i0 <== NOT EXECUTED goto failed; iop = rtems_libio_iop_freelist; 4000c308: f0 04 21 48 ld [ %l0 + 0x148 ], %i0 next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; 4000c30c: c4 07 bf f4 ld [ %fp + -12 ], %g2 &sema ); if (rc != RTEMS_SUCCESSFUL) goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; 4000c310: c2 06 20 28 ld [ %i0 + 0x28 ], %g1 (void) memset( iop, 0, sizeof(rtems_libio_t) ); 4000c314: c0 26 20 20 clr [ %i0 + 0x20 ] 4000c318: c0 26 00 00 clr [ %i0 ] 4000c31c: c0 26 20 04 clr [ %i0 + 4 ] 4000c320: c0 26 20 08 clr [ %i0 + 8 ] 4000c324: c0 26 20 10 clr [ %i0 + 0x10 ] 4000c328: c0 26 20 14 clr [ %i0 + 0x14 ] 4000c32c: c0 26 20 18 clr [ %i0 + 0x18 ] 4000c330: c0 26 20 1c clr [ %i0 + 0x1c ] 4000c334: c0 26 20 24 clr [ %i0 + 0x24 ] 4000c338: c0 26 20 28 clr [ %i0 + 0x28 ] 4000c33c: c0 26 20 2c clr [ %i0 + 0x2c ] 4000c340: c0 26 20 30 clr [ %i0 + 0x30 ] iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; rtems_libio_iop_freelist = next; 4000c344: c2 24 21 48 st %g1, [ %l0 + 0x148 ] goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; 4000c348: c4 26 20 20 st %g2, [ %i0 + 0x20 ] if (rc != RTEMS_SUCCESSFUL) goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); iop->flags = LIBIO_FLAGS_OPEN; 4000c34c: 82 10 21 00 mov 0x100, %g1 4000c350: 10 bf ff d0 b 4000c290 4000c354: c2 26 20 0c st %g1, [ %i0 + 0xc ] 40002198 : * * Called by BSP startup code to initialize the libio subsystem. */ void rtems_libio_init( void ) { 40002198: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code rc; int i; rtems_libio_t *iop; if (rtems_libio_number_iops > 0) 4000219c: 21 10 00 62 sethi %hi(0x40018800), %l0 400021a0: d0 04 23 0c ld [ %l0 + 0x30c ], %o0 ! 40018b0c 400021a4: 80 a2 20 00 cmp %o0, 0 400021a8: 12 80 00 13 bne 400021f4 400021ac: 92 10 20 34 mov 0x34, %o1 /* * Create the binary semaphore used to provide mutual exclusion * on the IOP Table. */ rc = rtems_semaphore_create( 400021b0: 11 13 10 92 sethi %hi(0x4c424800), %o0 400021b4: 92 10 20 01 mov 1, %o1 400021b8: 90 12 21 4f or %o0, 0x14f, %o0 400021bc: 94 10 20 54 mov 0x54, %o2 400021c0: 96 10 20 00 clr %o3 400021c4: 19 10 00 66 sethi %hi(0x40019800), %o4 400021c8: 40 00 0e 19 call 40005a2c 400021cc: 98 13 21 4c or %o4, 0x14c, %o4 ! 4001994c 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_libio_semaphore ); if ( rc != RTEMS_SUCCESSFUL ) 400021d0: 80 a2 20 00 cmp %o0, 0 400021d4: 12 80 00 04 bne 400021e4 400021d8: 01 00 00 00 nop /* * Initialize the base file system infrastructure. */ rtems_filesystem_initialize(); 400021dc: 40 00 26 ba call 4000bcc4 400021e0: 81 e8 00 00 restore RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_libio_semaphore ); if ( rc != RTEMS_SUCCESSFUL ) rtems_fatal_error_occurred( rc ); 400021e4: 40 00 12 04 call 400069f4 <== NOT EXECUTED 400021e8: 01 00 00 00 nop <== NOT EXECUTED /* * Initialize the base file system infrastructure. */ rtems_filesystem_initialize(); 400021ec: 40 00 26 b6 call 4000bcc4 <== NOT EXECUTED 400021f0: 81 e8 00 00 restore <== NOT EXECUTED int i; rtems_libio_t *iop; if (rtems_libio_number_iops > 0) { rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, 400021f4: 40 00 00 ea call 4000259c 400021f8: 23 10 00 66 sethi %hi(0x40019800), %l1 sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) 400021fc: 80 a2 20 00 cmp %o0, 0 40002200: 02 80 00 18 be 40002260 40002204: d0 24 61 44 st %o0, [ %l1 + 0x144 ] rtems_fatal_error_occurred(RTEMS_NO_MEMORY); iop = rtems_libio_iop_freelist = rtems_libio_iops; 40002208: c8 04 61 44 ld [ %l1 + 0x144 ], %g4 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 4000220c: c6 04 23 0c ld [ %l0 + 0x30c ], %g3 rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) rtems_fatal_error_occurred(RTEMS_NO_MEMORY); iop = rtems_libio_iop_freelist = rtems_libio_iops; 40002210: 03 10 00 66 sethi %hi(0x40019800), %g1 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40002214: 80 a0 e0 01 cmp %g3, 1 40002218: 02 80 00 10 be 40002258 4000221c: c8 20 61 48 st %g4, [ %g1 + 0x148 ] 40002220: 82 10 00 04 mov %g4, %g1 40002224: 84 10 20 01 mov 1, %g2 iop->data1 = iop + 1; 40002228: 82 00 60 34 add %g1, 0x34, %g1 4000222c: 84 00 a0 01 inc %g2 sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) rtems_fatal_error_occurred(RTEMS_NO_MEMORY); iop = rtems_libio_iop_freelist = rtems_libio_iops; for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40002230: 80 a0 80 03 cmp %g2, %g3 40002234: 12 bf ff fd bne 40002228 40002238: c2 20 7f f4 st %g1, [ %g1 + -12 ] 4000223c: 85 28 e0 02 sll %g3, 2, %g2 40002240: 83 28 e0 04 sll %g3, 4, %g1 40002244: 82 20 40 02 sub %g1, %g2, %g1 40002248: 82 00 40 03 add %g1, %g3, %g1 4000224c: 83 28 60 02 sll %g1, 2, %g1 40002250: 82 01 00 01 add %g4, %g1, %g1 40002254: 88 00 7f cc add %g1, -52, %g4 iop->data1 = iop + 1; iop->data1 = NULL; 40002258: 10 bf ff d6 b 400021b0 4000225c: c0 21 20 28 clr [ %g4 + 0x28 ] if (rtems_libio_number_iops > 0) { rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) rtems_fatal_error_occurred(RTEMS_NO_MEMORY); 40002260: 40 00 11 e5 call 400069f4 <== NOT EXECUTED 40002264: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED iop = rtems_libio_iop_freelist = rtems_libio_iops; 40002268: 10 bf ff e9 b 4000220c <== NOT EXECUTED 4000226c: c8 04 61 44 ld [ %l1 + 0x144 ], %g4 <== NOT EXECUTED 4000c0fc : */ int rtems_libio_is_file_open( void *node_access ) { 4000c0fc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_libio_t *iop; int result=0; int i; rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); 4000c100: 21 10 00 66 sethi %hi(0x40019800), %l0 <== NOT EXECUTED 4000c104: d0 04 21 4c ld [ %l0 + 0x14c ], %o0 ! 4001994c <== NOT EXECUTED 4000c108: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c10c: 7f ff e7 1f call 40005d88 <== NOT EXECUTED 4000c110: 94 10 20 00 clr %o2 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000c114: 03 10 00 62 sethi %hi(0x40018800), %g1 <== NOT EXECUTED 4000c118: c8 00 63 0c ld [ %g1 + 0x30c ], %g4 ! 40018b0c <== NOT EXECUTED 4000c11c: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000c120: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 4000c124: 02 80 00 0e be 4000c15c <== NOT EXECUTED 4000c128: c4 00 61 44 ld [ %g1 + 0x144 ], %g2 <== NOT EXECUTED 4000c12c: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 4000c130: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4000c134: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000c138: 02 80 00 06 be 4000c150 <== NOT EXECUTED 4000c13c: 86 00 e0 01 inc %g3 <== NOT EXECUTED /* * Check if this node is under the file system that we * are trying to dismount. */ if ( iop->pathinfo.node_access == node_access ) { 4000c140: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4000c144: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4000c148: 02 80 00 0a be 4000c170 <== NOT EXECUTED 4000c14c: d0 04 21 4c ld [ %l0 + 0x14c ], %o0 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000c150: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 4000c154: 12 bf ff f7 bne 4000c130 <== NOT EXECUTED 4000c158: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000c15c: d0 04 21 4c ld [ %l0 + 0x14c ], %o0 <== NOT EXECUTED 4000c160: 7f ff e7 d9 call 400060c4 <== NOT EXECUTED 4000c164: b0 10 20 00 clr %i0 <== NOT EXECUTED return result; } 4000c168: 81 c7 e0 08 ret <== NOT EXECUTED 4000c16c: 81 e8 00 00 restore <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000c170: 7f ff e7 d5 call 400060c4 <== NOT EXECUTED 4000c174: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return result; } 4000c178: 81 c7 e0 08 ret <== NOT EXECUTED 4000c17c: 81 e8 00 00 restore <== NOT EXECUTED 4000c180 : */ int rtems_libio_is_open_files_in_fs( rtems_filesystem_mount_table_entry_t * fs_mt_entry ) { 4000c180: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_libio_t *iop; int result = 0; int i; rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); 4000c184: 21 10 00 66 sethi %hi(0x40019800), %l0 <== NOT EXECUTED 4000c188: d0 04 21 4c ld [ %l0 + 0x14c ], %o0 ! 4001994c <== NOT EXECUTED 4000c18c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c190: 7f ff e6 fe call 40005d88 <== NOT EXECUTED 4000c194: 94 10 20 00 clr %o2 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000c198: 03 10 00 62 sethi %hi(0x40018800), %g1 <== NOT EXECUTED 4000c19c: c8 00 63 0c ld [ %g1 + 0x30c ], %g4 ! 40018b0c <== NOT EXECUTED 4000c1a0: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 4000c1a4: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 4000c1a8: 02 80 00 0e be 4000c1e0 <== NOT EXECUTED 4000c1ac: c4 00 61 44 ld [ %g1 + 0x144 ], %g2 <== NOT EXECUTED 4000c1b0: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 4000c1b4: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4000c1b8: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000c1bc: 02 80 00 06 be 4000c1d4 <== NOT EXECUTED 4000c1c0: 86 00 e0 01 inc %g3 <== NOT EXECUTED /* * Check if this node is under the file system that we * are trying to dismount. */ if ( iop->pathinfo.mt_entry == fs_mt_entry ) { 4000c1c4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000c1c8: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4000c1cc: 02 80 00 0a be 4000c1f4 <== NOT EXECUTED 4000c1d0: d0 04 21 4c ld [ %l0 + 0x14c ], %o0 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000c1d4: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 4000c1d8: 12 bf ff f7 bne 4000c1b4 <== NOT EXECUTED 4000c1dc: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000c1e0: d0 04 21 4c ld [ %l0 + 0x14c ], %o0 <== NOT EXECUTED 4000c1e4: 7f ff e7 b8 call 400060c4 <== NOT EXECUTED 4000c1e8: b0 10 20 00 clr %i0 <== NOT EXECUTED return result; } 4000c1ec: 81 c7 e0 08 ret <== NOT EXECUTED 4000c1f0: 81 e8 00 00 restore <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000c1f4: 7f ff e7 b4 call 400060c4 <== NOT EXECUTED 4000c1f8: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return result; } 4000c1fc: 81 c7 e0 08 ret <== NOT EXECUTED 4000c200: 81 e8 00 00 restore <== NOT EXECUTED 40019738 : rtems_filesystem_freenode( &env->root_directory); free(env); } } rtems_status_code rtems_libio_set_private_env(void) { 40019738: 9d e3 bf 80 save %sp, -128, %sp <== NOT EXECUTED rtems_status_code sc; rtems_id task_id; rtems_filesystem_location_info_t loc; sc=rtems_task_ident(RTEMS_SELF,0,&task_id); 4001973c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40019740: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019744: 40 00 02 1e call 40019fbc <== NOT EXECUTED 40019748: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 4001974c: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40019750: 12 80 00 44 bne 40019860 <== NOT EXECUTED 40019754: 25 10 00 eb sethi %hi(0x4003ac00), %l2 <== NOT EXECUTED /* Only for the first time a malloc is necesary */ if (rtems_current_user_env==&rtems_global_user_env) { 40019758: c4 04 a3 f0 ld [ %l2 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED 4001975c: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED 40019760: a6 10 63 a4 or %g1, 0x3a4, %l3 ! 4003d3a4 <== NOT EXECUTED 40019764: 80 a0 80 13 cmp %g2, %l3 <== NOT EXECUTED 40019768: 12 80 00 0f bne 400197a4 <== NOT EXECUTED 4001976c: a2 14 a3 f0 or %l2, 0x3f0, %l1 <== NOT EXECUTED rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t)); 40019770: 7f ff af 78 call 40005550 <== NOT EXECUTED 40019774: 90 10 20 40 mov 0x40, %o0 <== NOT EXECUTED if (!tmp) 40019778: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 4001977c: 02 80 00 3b be 40019868 <== NOT EXECUTED 40019780: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED #ifdef HAVE_USERENV_REFCNT tmp->refcnt = 1; #endif sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,(void(*)(void *))free_user_env); 40019784: 90 10 20 00 clr %o0 <== NOT EXECUTED 40019788: 15 10 00 65 sethi %hi(0x40019400), %o2 <== NOT EXECUTED 4001978c: 40 00 03 31 call 4001a450 <== NOT EXECUTED 40019790: 94 12 a2 0c or %o2, 0x20c, %o2 ! 4001960c <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 40019794: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 40019798: 32 80 00 36 bne,a 40019870 <== NOT EXECUTED 4001979c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED * not initialized yet */ free(tmp); return sc; } rtems_current_user_env = tmp; 400197a0: e0 24 a3 f0 st %l0, [ %l2 + 0x3f0 ] <== NOT EXECUTED }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ 400197a4: d0 04 a3 f0 ld [ %l2 + 0x3f0 ], %o0 <== NOT EXECUTED 400197a8: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 400197ac: 40 00 36 c5 call 400272c0 <== NOT EXECUTED 400197b0: 94 10 20 40 mov 0x40, %o2 <== NOT EXECUTED rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197b4: 03 10 00 f3 sethi %hi(0x4003cc00), %g1 <== NOT EXECUTED 400197b8: c8 00 63 38 ld [ %g1 + 0x338 ], %g4 ! 4003cf38 <== NOT EXECUTED } rtems_current_user_env = tmp; }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ 400197bc: c4 04 a3 f0 ld [ %l2 + 0x3f0 ], %g2 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197c0: c2 01 20 18 ld [ %g4 + 0x18 ], %g1 <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 400197c4: a2 07 bf e4 add %fp, -28, %l1 <== NOT EXECUTED *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197c8: c2 20 a0 14 st %g1, [ %g2 + 0x14 ] <== NOT EXECUTED } rtems_current_user_env = tmp; }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ 400197cc: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197d0: c6 01 20 1c ld [ %g4 + 0x1c ], %g3 <== NOT EXECUTED } rtems_current_user_env = tmp; }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ 400197d4: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197d8: c6 20 a0 18 st %g3, [ %g2 + 0x18 ] <== NOT EXECUTED 400197dc: c2 01 20 20 ld [ %g4 + 0x20 ], %g1 <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 400197e0: 21 10 00 dd sethi %hi(0x40037400), %l0 <== NOT EXECUTED *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197e4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 400197e8: c6 01 20 24 ld [ %g4 + 0x24 ], %g3 <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 400197ec: 92 10 20 00 clr %o1 <== NOT EXECUTED *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400197f0: c6 20 a0 20 st %g3, [ %g2 + 0x20 ] <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 400197f4: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 400197f8: 96 10 20 00 clr %o3 <== NOT EXECUTED 400197fc: 7f ff ad ae call 40004eb4 <== NOT EXECUTED 40019800: 90 14 21 68 or %l0, 0x168, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 40019804: c4 04 a3 f0 ld [ %l2 + 0x3f0 ], %g2 <== NOT EXECUTED 40019808: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001980c: 90 14 21 68 or %l0, 0x168, %o0 <== NOT EXECUTED * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 40019810: c2 20 a0 14 st %g1, [ %g2 + 0x14 ] <== NOT EXECUTED 40019814: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 40019818: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4001981c: c2 20 a0 18 st %g1, [ %g2 + 0x18 ] <== NOT EXECUTED 40019820: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 40019824: 92 10 20 00 clr %o1 <== NOT EXECUTED * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 40019828: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 4001982c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 40019830: 96 10 20 00 clr %o3 <== NOT EXECUTED 40019834: 7f ff ad a0 call 40004eb4 <== NOT EXECUTED 40019838: c2 20 a0 20 st %g1, [ %g2 + 0x20 ] <== NOT EXECUTED rtems_filesystem_current = loc; 4001983c: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED 40019840: c6 04 a3 f0 ld [ %l2 + 0x3f0 ], %g3 <== NOT EXECUTED 40019844: c2 20 e0 04 st %g1, [ %g3 + 4 ] <== NOT EXECUTED 40019848: c4 07 bf e8 ld [ %fp + -24 ], %g2 <== NOT EXECUTED 4001984c: c4 20 e0 08 st %g2, [ %g3 + 8 ] <== NOT EXECUTED 40019850: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED 40019854: c2 20 e0 0c st %g1, [ %g3 + 0xc ] <== NOT EXECUTED 40019858: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED 4001985c: c4 20 e0 10 st %g2, [ %g3 + 0x10 ] <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 40019860: 81 c7 e0 08 ret <== NOT EXECUTED 40019864: 81 e8 00 00 restore <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; /* Only for the first time a malloc is necesary */ if (rtems_current_user_env==&rtems_global_user_env) { rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t)); if (!tmp) 40019868: 81 c7 e0 08 ret <== NOT EXECUTED 4001986c: 91 e8 20 1a restore %g0, 0x1a, %o0 <== NOT EXECUTED sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,(void(*)(void *))free_user_env); if (sc != RTEMS_SUCCESSFUL) { /* don't use free_user_env because the pathlocs are * not initialized yet */ free(tmp); 40019870: 7f ff af 0f call 400054ac <== NOT EXECUTED 40019874: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 40019878: 81 c7 e0 08 ret <== NOT EXECUTED 4001987c: 81 e8 00 00 restore <== NOT EXECUTED 40019684 : * b) mutex access to rtems_filesystem_current, rtems_filesytem_root * while changing any of those (chdir(), chroot()). */ #ifndef HAVE_USERENV_REFCNT rtems_status_code rtems_libio_share_private_env(rtems_id task_id) { 40019684: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED rtems_status_code sc; rtems_user_env_t * shared_user_env; rtems_id current_task_id; sc=rtems_task_ident(RTEMS_SELF,0,¤t_task_id); 40019688: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001968c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019690: 40 00 02 4b call 40019fbc <== NOT EXECUTED 40019694: 94 07 bf f0 add %fp, -16, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 40019698: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 4001969c: 12 80 00 13 bne 400196e8 <== NOT EXECUTED 400196a0: 25 10 00 eb sethi %hi(0x4003ac00), %l2 <== NOT EXECUTED if (rtems_current_user_env->task_id==current_task_id) { 400196a4: e2 04 a3 f0 ld [ %l2 + 0x3f0 ], %l1 ! 4003aff0 <== NOT EXECUTED 400196a8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400196ac: c4 04 40 00 ld [ %l1 ], %g2 <== NOT EXECUTED 400196b0: 86 14 a3 f0 or %l2, 0x3f0, %g3 <== NOT EXECUTED 400196b4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400196b8: 02 80 00 0e be 400196f0 <== NOT EXECUTED 400196bc: a0 10 00 03 mov %g3, %l0 <== NOT EXECUTED free_user_env(tmp); }; /* AT THIS POINT, rtems_current_user_env is DANGLING */ sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env, 400196c0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400196c4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400196c8: 40 00 04 35 call 4001a79c <== NOT EXECUTED 400196cc: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED (void*)&shared_user_env ); if (sc != RTEMS_SUCCESSFUL) 400196d0: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 400196d4: 02 80 00 10 be 40019714 <== NOT EXECUTED 400196d8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED return RTEMS_SUCCESSFUL; bailout: /* fallback to the global env */ rtems_current_user_env = &rtems_global_user_env; 400196dc: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED 400196e0: 82 10 63 a4 or %g1, 0x3a4, %g1 ! 4003d3a4 <== NOT EXECUTED 400196e4: c2 24 a3 f0 st %g1, [ %l2 + 0x3f0 ] <== NOT EXECUTED return sc; } 400196e8: 81 c7 e0 08 ret <== NOT EXECUTED 400196ec: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; if (rtems_current_user_env->task_id==current_task_id) { /* kill the current user env & task_var*/ rtems_user_env_t *tmp = rtems_current_user_env; sc = rtems_task_variable_delete(RTEMS_SELF,(void*)&rtems_current_user_env); 400196f0: 40 00 03 b7 call 4001a5cc <== NOT EXECUTED 400196f4: 92 10 00 03 mov %g3, %o1 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 400196f8: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 400196fc: 12 bf ff fb bne 400196e8 <== NOT EXECUTED 40019700: 01 00 00 00 nop <== NOT EXECUTED free_user_env(tmp); 40019704: 7f ff ff c2 call 4001960c <== NOT EXECUTED 40019708: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED }; /* AT THIS POINT, rtems_current_user_env is DANGLING */ sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env, 4001970c: 10 bf ff ee b 400196c4 <== NOT EXECUTED 40019710: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED (void*)&shared_user_env ); if (sc != RTEMS_SUCCESSFUL) goto bailout; sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env); 40019714: 15 10 00 65 sethi %hi(0x40019400), %o2 <== NOT EXECUTED 40019718: 40 00 03 4e call 4001a450 <== NOT EXECUTED 4001971c: 94 12 a2 0c or %o2, 0x20c, %o2 ! 4001960c <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 40019720: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 40019724: 12 bf ff ef bne 400196e0 <== NOT EXECUTED 40019728: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED goto bailout; /* the current_user_env is the same pointer that remote env */ rtems_current_user_env = shared_user_env; 4001972c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40019730: 10 bf ff ee b 400196e8 <== NOT EXECUTED 40019734: c2 24 a3 f0 st %g1, [ %l2 + 0x3f0 ] <== NOT EXECUTED 4000c0a0 : */ uint32_t rtems_libio_to_fcntl_flags( uint32_t flags ) { 4000c0a0: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED uint32_t fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { 4000c0a4: 82 08 a0 06 and %g2, 6, %g1 <== NOT EXECUTED 4000c0a8: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4000c0ac: 02 80 00 05 be 4000c0c0 <== NOT EXECUTED 4000c0b0: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED fcntl_flags |= O_RDWR; } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 4000c0b4: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 4000c0b8: 02 80 00 0e be 4000c0f0 <== NOT EXECUTED 4000c0bc: 90 10 20 00 clr %o0 <== NOT EXECUTED fcntl_flags |= O_RDONLY; } else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) { fcntl_flags |= O_WRONLY; } if ( (flags & LIBIO_FLAGS_NO_DELAY) == LIBIO_FLAGS_NO_DELAY ) { 4000c0c0: 80 88 a0 01 btst 1, %g2 <== NOT EXECUTED 4000c0c4: 02 80 00 04 be 4000c0d4 <== NOT EXECUTED 4000c0c8: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED fcntl_flags |= O_NONBLOCK; 4000c0cc: 03 00 00 10 sethi %hi(0x4000), %g1 <== NOT EXECUTED 4000c0d0: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED } if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) { 4000c0d4: 32 80 00 02 bne,a 4000c0dc <== NOT EXECUTED 4000c0d8: 90 12 20 08 or %o0, 8, %o0 <== NOT EXECUTED fcntl_flags |= O_APPEND; } if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) { 4000c0dc: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED 4000c0e0: 32 80 00 02 bne,a 4000c0e8 <== NOT EXECUTED 4000c0e4: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED fcntl_flags |= O_CREAT; } return fcntl_flags; } 4000c0e8: 81 c3 e0 08 retl <== NOT EXECUTED 4000c0ec: 01 00 00 00 nop <== NOT EXECUTED { uint32_t fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { fcntl_flags |= O_RDWR; } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 4000c0f0: 83 30 a0 02 srl %g2, 2, %g1 <== NOT EXECUTED 4000c0f4: 10 bf ff f3 b 4000c0c0 <== NOT EXECUTED 4000c0f8: 90 08 60 01 and %g1, 1, %o0 <== NOT EXECUTED 4000ef70 : Objects_Id id, void *buffer, size_t size, uint32_t *count ) { 4000ef70: 9d e3 bf 90 save %sp, -112, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; CORE_message_queue_Status core_status; if ( !buffer ) 4000ef74: 80 a6 60 00 cmp %i1, 0 4000ef78: 02 80 00 28 be 4000f018 4000ef7c: 80 a6 e0 00 cmp %i3, 0 return RTEMS_INVALID_ADDRESS; if ( !count ) 4000ef80: 02 80 00 26 be 4000f018 4000ef84: 92 10 00 18 mov %i0, %o1 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 4000ef88: 11 10 00 ce sethi %hi(0x40033800), %o0 4000ef8c: 90 12 20 00 mov %o0, %o0 ! 40033800 <_Message_queue_Information> 4000ef90: 40 00 19 5e call 40015508 <_Objects_Get> 4000ef94: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4000ef98: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000ef9c: 80 a0 60 00 cmp %g1, 0 4000efa0: 02 80 00 08 be 4000efc0 4000efa4: 9a 10 00 1b mov %i3, %o5 4000efa8: 80 a0 60 02 cmp %g1, 2 4000efac: 08 80 00 03 bleu 4000efb8 4000efb0: 90 10 20 04 mov 4, %o0 4000efb4: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Message_queue_Translate_core_message_queue_return_code( core_status ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000efb8: 81 c7 e0 08 ret 4000efbc: 91 e8 00 08 restore %g0, %o0, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: core_status = _CORE_message_queue_Broadcast( 4000efc0: 92 10 00 19 mov %i1, %o1 4000efc4: 94 10 00 1a mov %i2, %o2 4000efc8: 96 10 00 18 mov %i0, %o3 4000efcc: 98 10 20 00 clr %o4 4000efd0: 40 00 13 d2 call 40013f18 <_CORE_message_queue_Broadcast> 4000efd4: 90 02 20 14 add %o0, 0x14, %o0 4000efd8: b6 10 00 08 mov %o0, %i3 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000efdc: 03 10 00 cd sethi %hi(0x40033400), %g1 4000efe0: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000efe4: 84 00 bf ff add %g2, -1, %g2 4000efe8: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000efec: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000eff0: 80 a0 e0 00 cmp %g3, 0 4000eff4: 02 80 00 06 be 4000f00c 4000eff8: 01 00 00 00 nop #endif count ); _Thread_Enable_dispatch(); return 4000effc: 40 00 01 35 call 4000f4d0 <_Message_queue_Translate_core_message_queue_return_code> 4000f000: 90 10 00 1b mov %i3, %o0 _Message_queue_Translate_core_message_queue_return_code( core_status ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f004: 81 c7 e0 08 ret 4000f008: 91 e8 00 08 restore %g0, %o0, %o0 _Thread_Dispatch(); 4000f00c: 40 00 1e 67 call 400169a8 <_Thread_Dispatch> 4000f010: 01 00 00 00 nop 4000f014: 30 bf ff fa b,a 4000effc #endif count ); _Thread_Enable_dispatch(); return 4000f018: 10 bf ff e8 b 4000efb8 <== NOT EXECUTED 4000f01c: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED 4000f020 : uint32_t count, uint32_t max_message_size, rtems_attribute attribute_set, Objects_Id *id ) { 4000f020: 9d e3 bf 90 save %sp, -112, %sp CORE_message_queue_Attributes the_msgq_attributes; #if defined(RTEMS_MULTIPROCESSING) boolean is_global; #endif if ( !rtems_is_name_valid( name ) ) 4000f024: a4 96 20 00 orcc %i0, 0, %l2 4000f028: 02 80 00 1f be 4000f0a4 4000f02c: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 4000f030: 80 a7 20 00 cmp %i4, 0 4000f034: 02 80 00 1c be 4000f0a4 4000f038: b0 10 20 09 mov 9, %i0 if ( (is_global = _Attributes_Is_global( attribute_set ) ) && !_System_state_Is_multiprocessing ) return RTEMS_MP_NOT_CONFIGURED; #endif if ( count == 0 ) 4000f03c: 80 a6 60 00 cmp %i1, 0 4000f040: 02 80 00 19 be 4000f0a4 4000f044: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( max_message_size == 0 ) 4000f048: 80 a6 a0 00 cmp %i2, 0 4000f04c: 02 80 00 16 be 4000f0a4 4000f050: b0 10 20 08 mov 8, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000f054: 23 10 00 cd sethi %hi(0x40033400), %l1 4000f058: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f05c: 82 00 60 01 inc %g1 4000f060: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] #endif #endif _Thread_Disable_dispatch(); /* protects object pointer */ the_message_queue = _Message_queue_Allocate( count, max_message_size ); 4000f064: 90 10 00 19 mov %i1, %o0 4000f068: 40 00 2d 2f call 4001a524 <_Message_queue_Allocate> 4000f06c: 92 10 00 1a mov %i2, %o1 if ( !the_message_queue ) { 4000f070: a0 92 20 00 orcc %o0, 0, %l0 4000f074: 12 80 00 0e bne 4000f0ac 4000f078: 80 8e e0 04 btst 4, %i3 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f07c: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 4000f080: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 4000f084: 82 00 7f ff add %g1, -1, %g1 4000f088: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 4000f08c: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 4000f090: 80 a0 a0 00 cmp %g2, 0 4000f094: 12 80 00 33 bne 4000f160 4000f098: 01 00 00 00 nop 4000f09c: 40 00 1e 43 call 400169a8 <_Thread_Dispatch> 4000f0a0: 01 00 00 00 nop 4000f0a4: 81 c7 e0 08 ret 4000f0a8: 81 e8 00 00 restore } #endif the_message_queue->attribute_set = attribute_set; if (_Attributes_Is_priority( attribute_set ) ) 4000f0ac: 12 80 00 11 bne 4000f0f0 4000f0b0: f6 24 20 10 st %i3, [ %l0 + 0x10 ] the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY; else the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO; 4000f0b4: c0 27 bf f4 clr [ %fp + -12 ] if ( ! _CORE_message_queue_Initialize( 4000f0b8: 94 10 00 19 mov %i1, %o2 4000f0bc: 96 10 00 1a mov %i2, %o3 4000f0c0: 90 04 20 14 add %l0, 0x14, %o0 4000f0c4: 40 00 13 e2 call 4001404c <_CORE_message_queue_Initialize> 4000f0c8: 92 07 bf f4 add %fp, -12, %o1 4000f0cc: 80 a2 20 00 cmp %o0, 0 4000f0d0: 12 80 00 0b bne 4000f0fc 4000f0d4: 92 10 00 10 mov %l0, %o1 RTEMS_INLINE_ROUTINE void _Message_queue_Free ( Message_queue_Control *the_message_queue ) { _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 4000f0d8: 11 10 00 ce sethi %hi(0x40033800), %o0 <== NOT EXECUTED 4000f0dc: 40 00 18 b4 call 400153ac <_Objects_Free> <== NOT EXECUTED 4000f0e0: 90 12 20 00 mov %o0, %o0 ! 40033800 <_Message_queue_Information> <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f0e4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 4000f0e8: 10 bf ff e7 b 4000f084 <== NOT EXECUTED 4000f0ec: b0 10 20 0d mov 0xd, %i0 <== NOT EXECUTED #endif the_message_queue->attribute_set = attribute_set; if (_Attributes_Is_priority( attribute_set ) ) the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY; 4000f0f0: 82 10 20 01 mov 1, %g1 4000f0f4: 10 bf ff f1 b 4000f0b8 4000f0f8: c2 27 bf f4 st %g1, [ %fp + -12 ] Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f0fc: 03 10 00 ce sethi %hi(0x40033800), %g1 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000f100: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f104: 88 10 60 00 mov %g1, %g4 4000f108: c4 11 20 10 lduh [ %g4 + 0x10 ], %g2 4000f10c: 03 00 00 3f sethi %hi(0xfc00), %g1 4000f110: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000f114: 82 08 c0 01 and %g3, %g1, %g1 4000f118: 80 a0 40 02 cmp %g1, %g2 4000f11c: 38 80 00 06 bgu,a 4000f134 4000f120: e4 24 20 0c st %l2, [ %l0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000f124: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 4000f128: 83 28 60 02 sll %g1, 2, %g1 4000f12c: e0 20 80 01 st %l0, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 4000f130: e4 24 20 0c st %l2, [ %l0 + 0xc ] &_Message_queue_Information, &the_message_queue->Object, (Objects_Name) name ); *id = the_message_queue->Object.id; 4000f134: c6 27 00 00 st %g3, [ %i4 ] 4000f138: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 4000f13c: b0 10 20 00 clr %i0 4000f140: 82 00 7f ff add %g1, -1, %g1 4000f144: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 4000f148: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 4000f14c: 80 a0 a0 00 cmp %g2, 0 4000f150: 12 80 00 04 bne 4000f160 4000f154: 01 00 00 00 nop _Thread_Dispatch(); 4000f158: 40 00 1e 14 call 400169a8 <_Thread_Dispatch> 4000f15c: 01 00 00 00 nop ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 4000f160: 81 c7 e0 08 ret 4000f164: 81 e8 00 00 restore 40015ab0 : */ rtems_status_code rtems_message_queue_delete( Objects_Id id ) { 40015ab0: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 40015ab4: 21 10 00 ad sethi %hi(0x4002b400), %l0 40015ab8: 92 10 00 18 mov %i0, %o1 40015abc: 94 07 bf f4 add %fp, -12, %o2 40015ac0: 7f ff e5 15 call 4000ef14 <_Objects_Get> 40015ac4: 90 14 21 2c or %l0, 0x12c, %o0 register Message_queue_Control *the_message_queue; Objects_Locations location; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40015ac8: c2 07 bf f4 ld [ %fp + -12 ], %g1 40015acc: 80 a0 60 00 cmp %g1, 0 40015ad0: 12 80 00 20 bne 40015b50 40015ad4: b0 10 00 08 mov %o0, %i0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40015ad8: a0 14 21 2c or %l0, 0x12c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40015adc: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40015ae0: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40015ae4: 05 00 00 3f sethi %hi(0xfc00), %g2 40015ae8: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40015aec: 82 08 40 02 and %g1, %g2, %g1 40015af0: 80 a0 40 03 cmp %g1, %g3 40015af4: 18 80 00 05 bgu 40015b08 40015af8: 94 10 20 05 mov 5, %o2 information->local_table[ index ] = the_object; 40015afc: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 40015b00: 83 28 60 02 sll %g1, 2, %g1 40015b04: c0 20 80 01 clr [ %g2 + %g1 ] case OBJECTS_LOCAL: _Objects_Close( &_Message_queue_Information, &the_message_queue->Object ); _CORE_message_queue_Close( 40015b08: 90 06 20 14 add %i0, 0x14, %o0 uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); /* _Objects_Clear_name( the_object->name, information->name_length ); */ the_object->name = 0; 40015b0c: c0 26 20 0c clr [ %i0 + 0xc ] 40015b10: 40 00 01 c0 call 40016210 <_CORE_message_queue_Close> 40015b14: 92 10 20 00 clr %o1 RTEMS_INLINE_ROUTINE void _Message_queue_Free ( Message_queue_Control *the_message_queue ) { _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 40015b18: 90 10 00 10 mov %l0, %o0 40015b1c: 7f ff e4 bb call 4000ee08 <_Objects_Free> 40015b20: 92 10 00 18 mov %i0, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40015b24: 03 10 00 ac sethi %hi(0x4002b000), %g1 40015b28: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4002b190 <_Thread_Dispatch_disable_level> 40015b2c: b0 10 20 00 clr %i0 40015b30: 84 00 bf ff add %g2, -1, %g2 40015b34: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 40015b38: c6 00 61 90 ld [ %g1 + 0x190 ], %g3 40015b3c: 80 a0 e0 00 cmp %g3, 0 40015b40: 02 80 00 09 be 40015b64 40015b44: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40015b48: 81 c7 e0 08 ret 40015b4c: 81 e8 00 00 restore { register Message_queue_Control *the_message_queue; Objects_Locations location; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40015b50: 80 a0 60 02 cmp %g1, 2 40015b54: 08 bf ff fd bleu 40015b48 40015b58: b0 10 20 04 mov 4, %i0 40015b5c: 81 c7 e0 08 ret <== NOT EXECUTED 40015b60: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40015b64: 7f ff ea 14 call 400103b4 <_Thread_Dispatch> 40015b68: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40015b6c: 81 c7 e0 08 ret 40015b70: 81 e8 00 00 restore 4000f22c : rtems_status_code rtems_message_queue_flush( Objects_Id id, uint32_t *count ) { 4000f22c: 9d e3 bf 90 save %sp, -112, %sp 4000f230: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 4000f234: 80 a6 60 00 cmp %i1, 0 4000f238: 02 80 00 1c be 4000f2a8 4000f23c: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 4000f240: 11 10 00 ce sethi %hi(0x40033800), %o0 4000f244: 94 07 bf f4 add %fp, -12, %o2 4000f248: 40 00 18 b0 call 40015508 <_Objects_Get> 4000f24c: 90 12 20 00 mov %o0, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4000f250: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f254: 80 a0 60 00 cmp %g1, 0 4000f258: 02 80 00 06 be 4000f270 4000f25c: 80 a0 60 02 cmp %g1, 2 4000f260: 08 80 00 12 bleu 4000f2a8 4000f264: b0 10 20 04 mov 4, %i0 4000f268: 81 c7 e0 08 ret <== NOT EXECUTED 4000f26c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: *count = _CORE_message_queue_Flush( &the_message_queue->message_queue ); 4000f270: 40 00 13 57 call 40013fcc <_CORE_message_queue_Flush> 4000f274: 90 02 20 14 add %o0, 0x14, %o0 4000f278: d0 26 40 00 st %o0, [ %i1 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f27c: 03 10 00 cd sethi %hi(0x40033400), %g1 4000f280: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f284: b0 10 20 00 clr %i0 4000f288: 84 00 bf ff add %g2, -1, %g2 4000f28c: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000f290: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000f294: 80 a0 e0 00 cmp %g3, 0 4000f298: 12 80 00 04 bne 4000f2a8 4000f29c: 01 00 00 00 nop _Thread_Dispatch(); 4000f2a0: 40 00 1d c2 call 400169a8 <_Thread_Dispatch> 4000f2a4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f2a8: 81 c7 e0 08 ret 4000f2ac: 81 e8 00 00 restore 4000f2b0 : rtems_status_code rtems_message_queue_get_number_pending( Objects_Id id, uint32_t *count ) { 4000f2b0: 9d e3 bf 90 save %sp, -112, %sp 4000f2b4: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 4000f2b8: 80 a6 60 00 cmp %i1, 0 4000f2bc: 02 80 00 1b be 4000f328 4000f2c0: b0 10 20 09 mov 9, %i0 4000f2c4: 11 10 00 ce sethi %hi(0x40033800), %o0 4000f2c8: 94 07 bf f4 add %fp, -12, %o2 4000f2cc: 40 00 18 8f call 40015508 <_Objects_Get> 4000f2d0: 90 12 20 00 mov %o0, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4000f2d4: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f2d8: 80 a0 60 00 cmp %g1, 0 4000f2dc: 22 80 00 07 be,a 4000f2f8 4000f2e0: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 4000f2e4: 80 a0 60 02 cmp %g1, 2 4000f2e8: 08 80 00 10 bleu 4000f328 4000f2ec: b0 10 20 04 mov 4, %i0 4000f2f0: 81 c7 e0 08 ret <== NOT EXECUTED 4000f2f4: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: *count = the_message_queue->message_queue.number_of_pending_messages; 4000f2f8: c2 26 40 00 st %g1, [ %i1 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f2fc: 07 10 00 cd sethi %hi(0x40033400), %g3 4000f300: c2 00 e0 e0 ld [ %g3 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f304: b0 10 20 00 clr %i0 4000f308: 82 00 7f ff add %g1, -1, %g1 4000f30c: c2 20 e0 e0 st %g1, [ %g3 + 0xe0 ] 4000f310: c4 00 e0 e0 ld [ %g3 + 0xe0 ], %g2 4000f314: 80 a0 a0 00 cmp %g2, 0 4000f318: 12 80 00 04 bne 4000f328 4000f31c: 01 00 00 00 nop _Thread_Dispatch(); 4000f320: 40 00 1d a2 call 400169a8 <_Thread_Dispatch> 4000f324: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f328: 81 c7 e0 08 ret 4000f32c: 81 e8 00 00 restore 40015ba8 : void *buffer, size_t *size, uint32_t option_set, rtems_interval timeout ) { 40015ba8: 9d e3 bf 90 save %sp, -112, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; boolean wait; if ( !buffer ) 40015bac: 80 a6 60 00 cmp %i1, 0 40015bb0: 02 80 00 2b be 40015c5c 40015bb4: 92 10 00 18 mov %i0, %o1 return RTEMS_INVALID_ADDRESS; if ( !size ) 40015bb8: 80 a6 a0 00 cmp %i2, 0 40015bbc: 02 80 00 28 be 40015c5c 40015bc0: 94 07 bf f4 add %fp, -12, %o2 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 40015bc4: 11 10 00 ad sethi %hi(0x4002b400), %o0 40015bc8: 7f ff e4 d3 call 4000ef14 <_Objects_Get> 40015bcc: 90 12 21 2c or %o0, 0x12c, %o0 ! 4002b52c <_Message_queue_Information> return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40015bd0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40015bd4: 80 a0 60 00 cmp %g1, 0 40015bd8: 22 80 00 08 be,a 40015bf8 40015bdc: d2 02 20 08 ld [ %o0 + 8 ], %o1 40015be0: 80 a0 60 02 cmp %g1, 2 40015be4: 08 80 00 03 bleu 40015bf0 40015be8: 90 10 20 04 mov 4, %o0 40015bec: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40015bf0: 81 c7 e0 08 ret 40015bf4: 91 e8 00 08 restore %g0, %o0, %o0 40015bf8: 98 0e e0 01 and %i3, 1, %o4 if ( _Options_Is_no_wait( option_set ) ) wait = FALSE; else wait = TRUE; _CORE_message_queue_Seize( 40015bfc: 94 10 00 19 mov %i1, %o2 40015c00: 96 10 00 1a mov %i2, %o3 40015c04: 98 1b 20 01 xor %o4, 1, %o4 40015c08: 9a 10 00 1c mov %i4, %o5 40015c0c: 40 00 01 a7 call 400162a8 <_CORE_message_queue_Seize> 40015c10: 90 02 20 14 add %o0, 0x14, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40015c14: 05 10 00 ac sethi %hi(0x4002b000), %g2 40015c18: c2 00 a1 90 ld [ %g2 + 0x190 ], %g1 ! 4002b190 <_Thread_Dispatch_disable_level> 40015c1c: 82 00 7f ff add %g1, -1, %g1 40015c20: c2 20 a1 90 st %g1, [ %g2 + 0x190 ] 40015c24: c6 00 a1 90 ld [ %g2 + 0x190 ], %g3 40015c28: 80 a0 e0 00 cmp %g3, 0 40015c2c: 02 80 00 08 be 40015c4c 40015c30: 01 00 00 00 nop size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 40015c34: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED 40015c38: c4 00 62 6c ld [ %g1 + 0x26c ], %g2 ! 4002b26c <_Thread_Executing> 40015c3c: 40 00 00 36 call 40015d14 <_Message_queue_Translate_core_message_queue_return_code> 40015c40: d0 00 a0 34 ld [ %g2 + 0x34 ], %o0 ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40015c44: 81 c7 e0 08 ret 40015c48: 91 e8 00 08 restore %g0, %o0, %o0 _Thread_Dispatch(); 40015c4c: 7f ff e9 da call 400103b4 <_Thread_Dispatch> 40015c50: 01 00 00 00 nop size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 40015c54: 10 bf ff f9 b 40015c38 40015c58: 03 10 00 ac sethi %hi(0x4002b000), %g1 40015c5c: 10 bf ff e5 b 40015bf0 <== NOT EXECUTED 40015c60: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED 40015c64 : rtems_status_code rtems_message_queue_send( Objects_Id id, void *buffer, size_t size ) { 40015c64: 9d e3 bf 88 save %sp, -120, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; CORE_message_queue_Status status; if ( !buffer ) 40015c68: 80 a6 60 00 cmp %i1, 0 40015c6c: 02 80 00 20 be 40015cec 40015c70: 90 10 20 09 mov 9, %o0 40015c74: 11 10 00 ad sethi %hi(0x4002b400), %o0 40015c78: 92 10 00 18 mov %i0, %o1 40015c7c: 90 12 21 2c or %o0, 0x12c, %o0 40015c80: 7f ff e4 a5 call 4000ef14 <_Objects_Get> 40015c84: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40015c88: c2 07 bf f4 ld [ %fp + -12 ], %g1 40015c8c: 80 a0 60 00 cmp %g1, 0 40015c90: 12 80 00 19 bne 40015cf4 40015c94: 80 a0 60 02 cmp %g1, 2 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, boolean wait, Watchdog_Interval timeout ) { return _CORE_message_queue_Submit( 40015c98: 94 10 00 1a mov %i2, %o2 40015c9c: c0 23 a0 5c clr [ %sp + 0x5c ] 40015ca0: c0 23 a0 60 clr [ %sp + 0x60 ] 40015ca4: 92 10 00 19 mov %i1, %o1 40015ca8: 96 10 00 18 mov %i0, %o3 40015cac: 98 10 20 00 clr %o4 40015cb0: 90 02 20 14 add %o0, 0x14, %o0 40015cb4: 1b 1f ff ff sethi %hi(0x7ffffc00), %o5 40015cb8: 40 00 01 c3 call 400163c4 <_CORE_message_queue_Submit> 40015cbc: 9a 13 63 ff or %o5, 0x3ff, %o5 ! 7fffffff 40015cc0: b4 10 00 08 mov %o0, %i2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40015cc4: 05 10 00 ac sethi %hi(0x4002b000), %g2 40015cc8: c2 00 a1 90 ld [ %g2 + 0x190 ], %g1 ! 4002b190 <_Thread_Dispatch_disable_level> 40015ccc: 82 00 7f ff add %g1, -1, %g1 40015cd0: c2 20 a1 90 st %g1, [ %g2 + 0x190 ] 40015cd4: c6 00 a1 90 ld [ %g2 + 0x190 ], %g3 40015cd8: 80 a0 e0 00 cmp %g3, 0 40015cdc: 02 80 00 0b be 40015d08 40015ce0: 01 00 00 00 nop /* * Since this API does not allow for blocking sends, we can directly * return the returned status. */ return _Message_queue_Translate_core_message_queue_return_code(status); 40015ce4: 40 00 00 0c call 40015d14 <_Message_queue_Translate_core_message_queue_return_code> 40015ce8: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40015cec: 81 c7 e0 08 ret 40015cf0: 91 e8 00 08 restore %g0, %o0, %o0 if ( !buffer ) return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40015cf4: 08 bf ff fe bleu 40015cec 40015cf8: 90 10 20 04 mov 4, %o0 40015cfc: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Message_queue_Translate_core_message_queue_return_code(status); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40015d00: 81 c7 e0 08 ret <== NOT EXECUTED 40015d04: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40015d08: 7f ff e9 ab call 400103b4 <_Thread_Dispatch> 40015d0c: 01 00 00 00 nop 40015d10: 30 bf ff f5 b,a 40015ce4 40008870 : rtems_status_code rtems_message_queue_urgent( Objects_Id id, void *buffer, size_t size ) { 40008870: 9d e3 bf 88 save %sp, -120, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; CORE_message_queue_Status status; if ( !buffer ) 40008874: 80 a6 60 00 cmp %i1, 0 40008878: 02 80 00 1f be 400088f4 4000887c: 90 10 20 09 mov 9, %o0 40008880: 11 10 00 85 sethi %hi(0x40021400), %o0 40008884: 92 10 00 18 mov %i0, %o1 40008888: 90 12 23 38 or %o0, 0x338, %o0 4000888c: 40 00 0a 21 call 4000b110 <_Objects_Get> 40008890: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40008894: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008898: 80 a0 60 00 cmp %g1, 0 4000889c: 12 80 00 18 bne 400088fc 400088a0: 80 a0 60 02 cmp %g1, 2 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, boolean wait, Watchdog_Interval timeout ) { return _CORE_message_queue_Submit( 400088a4: 94 10 00 1a mov %i2, %o2 400088a8: c0 23 a0 5c clr [ %sp + 0x5c ] 400088ac: c0 23 a0 60 clr [ %sp + 0x60 ] 400088b0: 92 10 00 19 mov %i1, %o1 400088b4: 96 10 00 18 mov %i0, %o3 400088b8: 98 10 20 00 clr %o4 400088bc: 1b 20 00 00 sethi %hi(0x80000000), %o5 400088c0: 40 00 05 e8 call 4000a060 <_CORE_message_queue_Submit> 400088c4: 90 02 20 14 add %o0, 0x14, %o0 400088c8: b4 10 00 08 mov %o0, %i2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400088cc: 03 10 00 85 sethi %hi(0x40021400), %g1 400088d0: c4 00 60 20 ld [ %g1 + 0x20 ], %g2 ! 40021420 <_Thread_Dispatch_disable_level> 400088d4: 84 00 bf ff add %g2, -1, %g2 400088d8: c4 20 60 20 st %g2, [ %g1 + 0x20 ] 400088dc: c6 00 60 20 ld [ %g1 + 0x20 ], %g3 400088e0: 80 a0 e0 00 cmp %g3, 0 400088e4: 02 80 00 0b be 40008910 400088e8: 01 00 00 00 nop /* * Since this API does not allow for blocking sends, we can directly * return the returned status. */ return _Message_queue_Translate_core_message_queue_return_code(status); 400088ec: 7f ff ff d7 call 40008848 <_Message_queue_Translate_core_message_queue_return_code> 400088f0: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400088f4: 81 c7 e0 08 ret 400088f8: 91 e8 00 08 restore %g0, %o0, %o0 if ( !buffer ) return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 400088fc: 08 bf ff fe bleu 400088f4 <== NOT EXECUTED 40008900: 90 10 20 04 mov 4, %o0 <== NOT EXECUTED 40008904: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Message_queue_Translate_core_message_queue_return_code(status); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008908: 81 c7 e0 08 ret <== NOT EXECUTED 4000890c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40008910: 40 00 0f 28 call 4000c5b0 <_Thread_Dispatch> 40008914: 01 00 00 00 nop 40008918: 30 bf ff f5 b,a 400088ec 40008b98 : void rtems_panic( const char *printf_format, ... ) { 40008b98: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list arglist; va_start(arglist, printf_format); (void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist); 40008b9c: 11 08 00 00 sethi %hi(0x20000000), %o0 <== NOT EXECUTED ... ) { va_list arglist; va_start(arglist, printf_format); 40008ba0: 94 07 a0 48 add %fp, 0x48, %o2 <== NOT EXECUTED void rtems_panic( const char *printf_format, ... ) { 40008ba4: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 40008ba8: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40008bac: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40008bb0: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40008bb4: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED va_list arglist; va_start(arglist, printf_format); (void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist); 40008bb8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40008bbc: 7f ff ff 88 call 400089dc <== NOT EXECUTED 40008bc0: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); } 40008bc4: 81 c7 e0 08 ret <== NOT EXECUTED 40008bc8: 81 e8 00 00 restore <== NOT EXECUTED 4000f4f8 : uint32_t length, uint32_t buffer_size, rtems_attribute attribute_set, Objects_Id *id ) { 4000f4f8: 9d e3 bf 98 save %sp, -104, %sp register Partition_Control *the_partition; if ( !rtems_is_name_valid( name ) ) 4000f4fc: a8 96 20 00 orcc %i0, 0, %l4 4000f500: 02 80 00 29 be 4000f5a4 4000f504: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 4000f508: 80 a6 60 00 cmp %i1, 0 4000f50c: 02 80 00 11 be 4000f550 4000f510: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 4000f514: 02 80 00 0f be 4000f550 4000f518: 80 a6 a0 00 cmp %i2, 0 return RTEMS_INVALID_ADDRESS; if ( length == 0 || buffer_size == 0 || length < buffer_size || 4000f51c: 12 80 00 04 bne 4000f52c 4000f520: 80 a6 e0 00 cmp %i3, 0 ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 4000f524: 81 c7 e0 08 ret 4000f528: 91 e8 20 08 restore %g0, 8, %o0 return RTEMS_INVALID_ADDRESS; if ( !id ) return RTEMS_INVALID_ADDRESS; if ( length == 0 || buffer_size == 0 || length < buffer_size || 4000f52c: 02 80 00 1e be 4000f5a4 4000f530: b0 10 20 08 mov 8, %i0 4000f534: 80 a6 80 1b cmp %i2, %i3 4000f538: 0a 80 00 1b bcs 4000f5a4 4000f53c: 80 8e e0 07 btst 7, %i3 4000f540: 12 80 00 19 bne 4000f5a4 4000f544: 80 8e 60 07 btst 7, %i1 !_Partition_Is_buffer_size_aligned( buffer_size ) ) return RTEMS_INVALID_SIZE; if ( !_Addresses_Is_aligned( starting_address ) ) 4000f548: 02 80 00 04 be 4000f558 4000f54c: 25 10 00 cd sethi %hi(0x40033400), %l2 4000f550: 81 c7 e0 08 ret 4000f554: 91 e8 20 09 restore %g0, 9, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000f558: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 4000f55c: 82 00 60 01 inc %g1 4000f560: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] * the inactive chain of free partition control blocks. */ RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void ) { return (Partition_Control *) _Objects_Allocate( &_Partition_Information ); 4000f564: 27 10 00 cc sethi %hi(0x40033000), %l3 4000f568: 40 00 16 83 call 40014f74 <_Objects_Allocate> 4000f56c: 90 14 e2 60 or %l3, 0x260, %o0 ! 40033260 <_Partition_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_partition = _Partition_Allocate(); if ( !the_partition ) { 4000f570: a2 92 20 00 orcc %o0, 0, %l1 4000f574: 12 80 00 0e bne 4000f5ac 4000f578: 92 10 00 1b mov %i3, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f57c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 4000f580: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 4000f584: 82 00 7f ff add %g1, -1, %g1 4000f588: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] 4000f58c: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 4000f590: 80 a0 a0 00 cmp %g2, 0 4000f594: 12 80 00 04 bne 4000f5a4 4000f598: 01 00 00 00 nop 4000f59c: 40 00 1d 03 call 400169a8 <_Thread_Dispatch> 4000f5a0: 01 00 00 00 nop 4000f5a4: 81 c7 e0 08 ret 4000f5a8: 81 e8 00 00 restore #endif the_partition->starting_address = starting_address; the_partition->length = length; the_partition->buffer_size = buffer_size; the_partition->attribute_set = attribute_set; 4000f5ac: f8 24 60 1c st %i4, [ %l1 + 0x1c ] _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } #endif the_partition->starting_address = starting_address; 4000f5b0: f2 24 60 10 st %i1, [ %l1 + 0x10 ] the_partition->length = length; 4000f5b4: f4 24 60 14 st %i2, [ %l1 + 0x14 ] the_partition->buffer_size = buffer_size; 4000f5b8: f6 24 60 18 st %i3, [ %l1 + 0x18 ] the_partition->attribute_set = attribute_set; the_partition->number_of_used_blocks = 0; 4000f5bc: c0 24 60 20 clr [ %l1 + 0x20 ] _Chain_Initialize( &the_partition->Memory, starting_address, 4000f5c0: 40 00 55 1e call 40024a38 <.udiv> 4000f5c4: 90 10 00 1a mov %i2, %o0 4000f5c8: a0 04 60 24 add %l1, 0x24, %l0 4000f5cc: 94 10 00 08 mov %o0, %o2 4000f5d0: 92 10 00 19 mov %i1, %o1 4000f5d4: 90 10 00 10 mov %l0, %o0 4000f5d8: 40 00 12 38 call 40013eb8 <_Chain_Initialize> 4000f5dc: 96 10 00 1b mov %i3, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f5e0: 90 14 e2 60 or %l3, 0x260, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000f5e4: c6 04 60 08 ld [ %l1 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f5e8: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 4000f5ec: 03 00 00 3f sethi %hi(0xfc00), %g1 4000f5f0: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000f5f4: 82 08 c0 01 and %g3, %g1, %g1 4000f5f8: 80 a0 40 02 cmp %g1, %g2 4000f5fc: 38 80 00 06 bgu,a 4000f614 4000f600: e8 24 60 0c st %l4, [ %l1 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000f604: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000f608: 83 28 60 02 sll %g1, 2, %g1 4000f60c: e2 20 80 01 st %l1, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 4000f610: e8 24 60 0c st %l4, [ %l1 + 0xc ] &_Partition_Information, &the_partition->Object, (Objects_Name) name ); *id = the_partition->Object.id; 4000f614: c6 27 40 00 st %g3, [ %i5 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f618: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 4000f61c: 10 bf ff da b 4000f584 4000f620: b0 10 20 00 clr %i0 4000f624 : */ rtems_status_code rtems_partition_delete( Objects_Id id ) { 4000f624: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 4000f628: 92 10 00 18 mov %i0, %o1 4000f62c: 94 07 bf f4 add %fp, -12, %o2 4000f630: 31 10 00 cc sethi %hi(0x40033000), %i0 4000f634: 40 00 17 b5 call 40015508 <_Objects_Get> 4000f638: 90 16 22 60 or %i0, 0x260, %o0 ! 40033260 <_Partition_Information> register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000f63c: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f640: 80 a0 60 00 cmp %g1, 0 4000f644: 12 80 00 13 bne 4000f690 4000f648: 92 10 00 08 mov %o0, %o1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( the_partition->number_of_used_blocks == 0 ) { 4000f64c: c2 02 20 20 ld [ %o0 + 0x20 ], %g1 4000f650: 80 a0 60 00 cmp %g1, 0 4000f654: 02 80 00 14 be 4000f6a4 4000f658: 90 16 22 60 or %i0, 0x260, %o0 4000f65c: 03 10 00 cd sethi %hi(0x40033400), %g1 4000f660: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f664: b0 10 20 0c mov 0xc, %i0 4000f668: 84 00 bf ff add %g2, -1, %g2 4000f66c: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000f670: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000f674: 80 a0 e0 00 cmp %g3, 0 4000f678: 12 80 00 22 bne 4000f700 4000f67c: 01 00 00 00 nop _Thread_Dispatch(); 4000f680: 40 00 1c ca call 400169a8 <_Thread_Dispatch> 4000f684: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f688: 81 c7 e0 08 ret 4000f68c: 81 e8 00 00 restore { register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000f690: 80 a0 60 02 cmp %g1, 2 4000f694: 08 bf ff fd bleu 4000f688 4000f698: b0 10 20 04 mov 4, %i0 4000f69c: 81 c7 e0 08 ret <== NOT EXECUTED 4000f6a0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000f6a4: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f6a8: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000f6ac: 05 00 00 3f sethi %hi(0xfc00), %g2 4000f6b0: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000f6b4: 82 08 40 02 and %g1, %g2, %g1 4000f6b8: 80 a0 40 03 cmp %g1, %g3 4000f6bc: 18 80 00 04 bgu 4000f6cc 4000f6c0: 83 28 60 02 sll %g1, 2, %g1 information->local_table[ index ] = the_object; 4000f6c4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000f6c8: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Partition_Free ( Partition_Control *the_partition ) { _Objects_Free( &_Partition_Information, &the_partition->Object ); 4000f6cc: 40 00 17 38 call 400153ac <_Objects_Free> 4000f6d0: c0 22 60 0c clr [ %o1 + 0xc ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f6d4: 03 10 00 cd sethi %hi(0x40033400), %g1 4000f6d8: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f6dc: b0 10 20 00 clr %i0 4000f6e0: 84 00 bf ff add %g2, -1, %g2 4000f6e4: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000f6e8: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000f6ec: 80 a0 e0 00 cmp %g3, 0 4000f6f0: 12 80 00 04 bne 4000f700 4000f6f4: 01 00 00 00 nop _Thread_Dispatch(); 4000f6f8: 40 00 1c ac call 400169a8 <_Thread_Dispatch> 4000f6fc: 01 00 00 00 nop 4000f700: 81 c7 e0 08 ret 4000f704: 81 e8 00 00 restore 4000f708 : rtems_status_code rtems_partition_get_buffer( Objects_Id id, void **buffer ) { 4000f708: 9d e3 bf 90 save %sp, -112, %sp 4000f70c: 92 10 00 18 mov %i0, %o1 register Partition_Control *the_partition; Objects_Locations location; void *the_buffer; if ( !buffer ) 4000f710: 80 a6 60 00 cmp %i1, 0 4000f714: 02 80 00 1a be 4000f77c 4000f718: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 4000f71c: 11 10 00 cc sethi %hi(0x40033000), %o0 4000f720: 94 07 bf f4 add %fp, -12, %o2 4000f724: 40 00 17 79 call 40015508 <_Objects_Get> 4000f728: 90 12 22 60 or %o0, 0x260, %o0 return RTEMS_INVALID_ADDRESS; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000f72c: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f730: 80 a0 60 00 cmp %g1, 0 4000f734: 12 80 00 14 bne 4000f784 4000f738: b0 10 00 08 mov %o0, %i0 RTEMS_INLINE_ROUTINE void *_Partition_Allocate_buffer ( Partition_Control *the_partition ) { return _Chain_Get( &the_partition->Memory ); 4000f73c: 40 00 11 cc call 40013e6c <_Chain_Get> 4000f740: 90 02 20 24 add %o0, 0x24, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_buffer = _Partition_Allocate_buffer( the_partition ); if ( the_buffer ) { 4000f744: a0 92 20 00 orcc %o0, 0, %l0 4000f748: 32 80 00 14 bne,a 4000f798 4000f74c: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f750: 03 10 00 cd sethi %hi(0x40033400), %g1 4000f754: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f758: b0 10 20 0d mov 0xd, %i0 4000f75c: 84 00 bf ff add %g2, -1, %g2 4000f760: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000f764: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000f768: 80 a0 e0 00 cmp %g3, 0 4000f76c: 12 80 00 04 bne 4000f77c 4000f770: 01 00 00 00 nop _Thread_Dispatch(); 4000f774: 40 00 1c 8d call 400169a8 <_Thread_Dispatch> 4000f778: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_UNSATISFIED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f77c: 81 c7 e0 08 ret 4000f780: 81 e8 00 00 restore if ( !buffer ) return RTEMS_INVALID_ADDRESS; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000f784: 80 a0 60 02 cmp %g1, 2 4000f788: 08 bf ff fd bleu 4000f77c 4000f78c: b0 10 20 04 mov 4, %i0 4000f790: 81 c7 e0 08 ret <== NOT EXECUTED 4000f794: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_buffer = _Partition_Allocate_buffer( the_partition ); if ( the_buffer ) { the_partition->number_of_used_blocks += 1; 4000f798: 82 00 60 01 inc %g1 4000f79c: c2 26 20 20 st %g1, [ %i0 + 0x20 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f7a0: 05 10 00 cd sethi %hi(0x40033400), %g2 4000f7a4: c2 00 a0 e0 ld [ %g2 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f7a8: 82 00 7f ff add %g1, -1, %g1 4000f7ac: c2 20 a0 e0 st %g1, [ %g2 + 0xe0 ] 4000f7b0: c6 00 a0 e0 ld [ %g2 + 0xe0 ], %g3 4000f7b4: 80 a0 e0 00 cmp %g3, 0 4000f7b8: 02 80 00 05 be 4000f7cc 4000f7bc: 01 00 00 00 nop _Thread_Enable_dispatch(); *buffer = the_buffer; 4000f7c0: e0 26 40 00 st %l0, [ %i1 ] <== NOT EXECUTED 4000f7c4: 81 c7 e0 08 ret 4000f7c8: 91 e8 20 00 restore %g0, 0, %o0 _Thread_Dispatch(); 4000f7cc: 40 00 1c 77 call 400169a8 <_Thread_Dispatch> 4000f7d0: 01 00 00 00 nop 4000f7d4: 10 bf ff fc b 4000f7c4 4000f7d8: e0 26 40 00 st %l0, [ %i1 ] 4000f810 : rtems_status_code rtems_partition_return_buffer( Objects_Id id, void *buffer ) { 4000f810: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 4000f814: 11 10 00 cc sethi %hi(0x40033000), %o0 4000f818: 92 10 00 18 mov %i0, %o1 4000f81c: 90 12 22 60 or %o0, 0x260, %o0 4000f820: 40 00 17 3a call 40015508 <_Objects_Get> 4000f824: 94 07 bf f4 add %fp, -12, %o2 register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000f828: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f82c: 80 a0 60 00 cmp %g1, 0 4000f830: 12 80 00 12 bne 4000f878 4000f834: b0 10 00 08 mov %o0, %i0 ) { void *starting; void *ending; starting = the_partition->starting_address; 4000f838: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 ending = _Addresses_Add_offset( starting, the_partition->length ); return ( 4000f83c: 80 a0 80 19 cmp %g2, %i1 4000f840: 28 80 00 13 bleu,a 4000f88c 4000f844: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f848: 03 10 00 cd sethi %hi(0x40033400), %g1 4000f84c: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f850: 84 00 bf ff add %g2, -1, %g2 4000f854: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000f858: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000f85c: 80 a0 e0 00 cmp %g3, 0 4000f860: 12 80 00 27 bne 4000f8fc 4000f864: 01 00 00 00 nop _Thread_Dispatch(); 4000f868: 40 00 1c 50 call 400169a8 <_Thread_Dispatch> 4000f86c: b0 10 20 09 mov 9, %i0 ! 9 4000f870: 81 c7 e0 08 ret 4000f874: 81 e8 00 00 restore 4000f878: 80 a0 60 02 cmp %g1, 2 4000f87c: 08 bf ff fd bleu 4000f870 4000f880: b0 10 20 04 mov 4, %i0 4000f884: 81 c7 e0 08 ret <== NOT EXECUTED 4000f888: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED 4000f88c: 82 00 80 01 add %g2, %g1, %g1 4000f890: 80 a0 40 19 cmp %g1, %i1 4000f894: 0a bf ff ed bcs 4000f848 4000f898: 01 00 00 00 nop 4000f89c: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 4000f8a0: 40 00 55 12 call 40024ce8 <.urem> 4000f8a4: 90 26 40 02 sub %i1, %g2, %o0 4000f8a8: 80 a2 20 00 cmp %o0, 0 4000f8ac: 12 bf ff e7 bne 4000f848 4000f8b0: 92 10 00 19 mov %i1, %o1 RTEMS_INLINE_ROUTINE void _Partition_Free_buffer ( Partition_Control *the_partition, Chain_Node *the_buffer ) { _Chain_Append( &the_partition->Memory, the_buffer ); 4000f8b4: 40 00 11 62 call 40013e3c <_Chain_Append> 4000f8b8: 90 06 20 24 add %i0, 0x24, %o0 return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) { _Partition_Free_buffer( the_partition, buffer ); the_partition->number_of_used_blocks -= 1; 4000f8bc: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 4000f8c0: 82 00 7f ff add %g1, -1, %g1 4000f8c4: c2 26 20 20 st %g1, [ %i0 + 0x20 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f8c8: 07 10 00 cd sethi %hi(0x40033400), %g3 4000f8cc: c2 00 e0 e0 ld [ %g3 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 4000f8d0: b0 10 20 00 clr %i0 4000f8d4: 82 00 7f ff add %g1, -1, %g1 4000f8d8: c2 20 e0 e0 st %g1, [ %g3 + 0xe0 ] 4000f8dc: c4 00 e0 e0 ld [ %g3 + 0xe0 ], %g2 4000f8e0: 80 a0 a0 00 cmp %g2, 0 4000f8e4: 12 80 00 04 bne 4000f8f4 4000f8e8: 01 00 00 00 nop _Thread_Dispatch(); 4000f8ec: 40 00 1c 2f call 400169a8 <_Thread_Dispatch> 4000f8f0: 01 00 00 00 nop 4000f8f4: 81 c7 e0 08 ret 4000f8f8: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f8fc: 81 c7 e0 08 ret <== NOT EXECUTED 4000f900: 91 e8 20 09 restore %g0, 9, %o0 <== NOT EXECUTED 4000e77c : */ rtems_status_code rtems_port_delete( Objects_Id id ) { 4000e77c: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Dual_ported_memory_Control *_Dual_ported_memory_Get ( Objects_Id id, Objects_Locations *location ) { return (Dual_ported_memory_Control *) 4000e780: 92 10 00 18 mov %i0, %o1 4000e784: 94 07 bf f4 add %fp, -12, %o2 4000e788: 31 10 00 cc sethi %hi(0x40033000), %i0 4000e78c: 40 00 1b 5f call 40015508 <_Objects_Get> 4000e790: 90 16 22 14 or %i0, 0x214, %o0 ! 40033214 <_Dual_ported_memory_Information> register Dual_ported_memory_Control *the_port; Objects_Locations location; the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { 4000e794: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000e798: 80 a0 60 00 cmp %g1, 0 4000e79c: 12 80 00 1a bne 4000e804 4000e7a0: 92 10 00 08 mov %o0, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000e7a4: 90 16 22 14 or %i0, 0x214, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000e7a8: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000e7ac: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000e7b0: 05 00 00 3f sethi %hi(0xfc00), %g2 4000e7b4: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000e7b8: 82 08 40 02 and %g1, %g2, %g1 4000e7bc: 80 a0 40 03 cmp %g1, %g3 4000e7c0: 18 80 00 04 bgu 4000e7d0 4000e7c4: 83 28 60 02 sll %g1, 2, %g1 information->local_table[ index ] = the_object; 4000e7c8: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000e7cc: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Dual_ported_memory_Free ( Dual_ported_memory_Control *the_port ) { _Objects_Free( &_Dual_ported_memory_Information, &the_port->Object ); 4000e7d0: 40 00 1a f7 call 400153ac <_Objects_Free> 4000e7d4: c0 22 60 0c clr [ %o1 + 0xc ] 4000e7d8: 03 10 00 cd sethi %hi(0x40033400), %g1 4000e7dc: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000e7e0: b0 10 20 00 clr %i0 4000e7e4: 84 00 bf ff add %g2, -1, %g2 4000e7e8: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000e7ec: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000e7f0: 80 a0 e0 00 cmp %g3, 0 4000e7f4: 02 80 00 0a be 4000e81c 4000e7f8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e7fc: 81 c7 e0 08 ret <== NOT EXECUTED 4000e800: 81 e8 00 00 restore <== NOT EXECUTED { register Dual_ported_memory_Control *the_port; Objects_Locations location; the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { 4000e804: 82 18 60 02 xor %g1, 2, %g1 4000e808: 80 a0 00 01 cmp %g0, %g1 4000e80c: 84 60 20 00 subx %g0, 0, %g2 4000e810: b0 08 a0 15 and %g2, 0x15, %i0 4000e814: 81 c7 e0 08 ret 4000e818: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 4000e81c: 40 00 20 63 call 400169a8 <_Thread_Dispatch> 4000e820: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e824: 81 c7 e0 08 ret 4000e828: 81 e8 00 00 restore 4000fb18 : */ rtems_status_code rtems_rate_monotonic_delete( Objects_Id id ) { 4000fb18: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Rate_monotonic_Control *_Rate_monotonic_Get ( Objects_Id id, Objects_Locations *location ) { return (Rate_monotonic_Control *) 4000fb1c: 21 10 00 cc sethi %hi(0x40033000), %l0 4000fb20: 92 10 00 18 mov %i0, %o1 4000fb24: 94 07 bf f4 add %fp, -12, %o2 4000fb28: 40 00 16 78 call 40015508 <_Objects_Get> 4000fb2c: 90 14 22 ac or %l0, 0x2ac, %o0 Rate_monotonic_Control *the_period; Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000fb30: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000fb34: 80 a0 60 00 cmp %g1, 0 4000fb38: 12 80 00 20 bne 4000fbb8 4000fb3c: b0 10 00 08 mov %o0, %i0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000fb40: a0 14 22 ac or %l0, 0x2ac, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000fb44: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000fb48: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 4000fb4c: 05 00 00 3f sethi %hi(0xfc00), %g2 4000fb50: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000fb54: 82 08 40 02 and %g1, %g2, %g1 4000fb58: 80 a0 40 03 cmp %g1, %g3 4000fb5c: 38 80 00 06 bgu,a 4000fb74 4000fb60: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000fb64: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 4000fb68: 83 28 60 02 sll %g1, 2, %g1 4000fb6c: c0 20 80 01 clr [ %g2 + %g1 ] uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); /* _Objects_Clear_name( the_object->name, information->name_length ); */ the_object->name = 0; 4000fb70: c0 26 20 0c clr [ %i0 + 0xc ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _Objects_Close( &_Rate_monotonic_Information, &the_period->Object ); (void) _Watchdog_Remove( &the_period->Timer ); 4000fb74: 40 00 22 55 call 400184c8 <_Watchdog_Remove> 4000fb78: 90 06 20 10 add %i0, 0x10, %o0 RTEMS_INLINE_ROUTINE void _Rate_monotonic_Free ( Rate_monotonic_Control *the_period ) { _Objects_Free( &_Rate_monotonic_Information, &the_period->Object ); 4000fb7c: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_INACTIVE; 4000fb80: c0 26 20 38 clr [ %i0 + 0x38 ] 4000fb84: 40 00 16 0a call 400153ac <_Objects_Free> 4000fb88: 92 10 00 18 mov %i0, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000fb8c: 03 10 00 cd sethi %hi(0x40033400), %g1 4000fb90: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 4000fb94: b0 10 20 00 clr %i0 4000fb98: 84 00 bf ff add %g2, -1, %g2 4000fb9c: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4000fba0: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000fba4: 80 a0 e0 00 cmp %g3, 0 4000fba8: 02 80 00 0a be 4000fbd0 4000fbac: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000fbb0: 81 c7 e0 08 ret <== NOT EXECUTED 4000fbb4: 81 e8 00 00 restore <== NOT EXECUTED { Rate_monotonic_Control *the_period; Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000fbb8: 82 18 60 02 xor %g1, 2, %g1 4000fbbc: 80 a0 00 01 cmp %g0, %g1 4000fbc0: 84 60 20 00 subx %g0, 0, %g2 4000fbc4: b0 08 a0 15 and %g2, 0x15, %i0 4000fbc8: 81 c7 e0 08 ret 4000fbcc: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 4000fbd0: 40 00 1b 76 call 400169a8 <_Thread_Dispatch> 4000fbd4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000fbd8: 81 c7 e0 08 ret 4000fbdc: 81 e8 00 00 restore 4000e5a8 : rtems_status_code rtems_rate_monotonic_get_statistics( Objects_Id id, rtems_rate_monotonic_period_statistics *statistics ) { 4000e5a8: 9d e3 bf 90 save %sp, -112, %sp 4000e5ac: 92 10 00 18 mov %i0, %o1 Objects_Locations location; Rate_monotonic_Control *the_period; if ( !statistics ) 4000e5b0: 80 a6 60 00 cmp %i1, 0 4000e5b4: 02 80 00 17 be 4000e610 4000e5b8: b0 10 20 09 mov 9, %i0 4000e5bc: 11 10 00 78 sethi %hi(0x4001e000), %o0 4000e5c0: 94 07 bf f4 add %fp, -12, %o2 4000e5c4: 7f ff ec b1 call 40009888 <_Objects_Get> 4000e5c8: 90 12 21 b8 or %o0, 0x1b8, %o0 return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000e5cc: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000e5d0: 80 a0 60 00 cmp %g1, 0 4000e5d4: 12 80 00 11 bne 4000e618 4000e5d8: 92 10 00 08 mov %o0, %o1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: *statistics = the_period->Statistics; 4000e5dc: 90 10 00 19 mov %i1, %o0 4000e5e0: 92 02 60 54 add %o1, 0x54, %o1 4000e5e4: 40 00 08 00 call 400105e4 4000e5e8: 94 10 20 38 mov 0x38, %o2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000e5ec: 03 10 00 78 sethi %hi(0x4001e000), %g1 4000e5f0: c4 00 63 50 ld [ %g1 + 0x350 ], %g2 ! 4001e350 <_Thread_Dispatch_disable_level> 4000e5f4: b0 10 20 00 clr %i0 4000e5f8: 84 00 bf ff add %g2, -1, %g2 4000e5fc: c4 20 63 50 st %g2, [ %g1 + 0x350 ] 4000e600: c6 00 63 50 ld [ %g1 + 0x350 ], %g3 4000e604: 80 a0 e0 00 cmp %g3, 0 4000e608: 02 80 00 0a be 4000e630 4000e60c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e610: 81 c7 e0 08 ret <== NOT EXECUTED 4000e614: 81 e8 00 00 restore <== NOT EXECUTED if ( !statistics ) return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000e618: 82 18 60 02 xor %g1, 2, %g1 4000e61c: 80 a0 00 01 cmp %g0, %g1 4000e620: 84 60 20 00 subx %g0, 0, %g2 4000e624: b0 08 a0 15 and %g2, 0x15, %i0 4000e628: 81 c7 e0 08 ret 4000e62c: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 4000e630: 7f ff f1 be call 4000ad28 <_Thread_Dispatch> 4000e634: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e638: 81 c7 e0 08 ret 4000e63c: 81 e8 00 00 restore 4000e640 : rtems_status_code rtems_rate_monotonic_get_status( Objects_Id id, rtems_rate_monotonic_period_status *status ) { 4000e640: 9d e3 bf 88 save %sp, -120, %sp 4000e644: 92 10 00 18 mov %i0, %o1 Objects_Locations location; Rate_monotonic_Control *the_period; if ( !status ) 4000e648: 80 a6 60 00 cmp %i1, 0 4000e64c: 02 80 00 21 be 4000e6d0 4000e650: b0 10 20 09 mov 9, %i0 4000e654: 11 10 00 78 sethi %hi(0x4001e000), %o0 4000e658: 94 07 bf f4 add %fp, -12, %o2 4000e65c: 7f ff ec 8b call 40009888 <_Objects_Get> 4000e660: 90 12 21 b8 or %o0, 0x1b8, %o0 return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000e664: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000e668: 80 a0 60 00 cmp %g1, 0 4000e66c: 12 80 00 1b bne 4000e6d8 4000e670: b0 10 00 08 mov %o0, %i0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: status->owner = ((the_period->owner) ? the_period->owner->Object.id : 0); 4000e674: c2 02 20 50 ld [ %o0 + 0x50 ], %g1 4000e678: 80 a0 60 00 cmp %g1, 0 4000e67c: 02 80 00 03 be 4000e688 4000e680: 84 10 20 00 clr %g2 4000e684: c4 00 60 08 ld [ %g1 + 8 ], %g2 status->state = the_period->state; 4000e688: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: status->owner = ((the_period->owner) ? the_period->owner->Object.id : 0); 4000e68c: c4 26 40 00 st %g2, [ %i1 ] status->state = the_period->state; if ( status->state == RATE_MONOTONIC_INACTIVE ) { 4000e690: 80 a0 60 00 cmp %g1, 0 4000e694: 12 80 00 1b bne 4000e700 4000e698: c2 26 60 04 st %g1, [ %i1 + 4 ] #else status->ticks_since_last_period = 0; #endif #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS status->executed_since_last_period.tv_sec = 0; status->executed_since_last_period.tv_nsec = 0; 4000e69c: c0 26 60 14 clr [ %i1 + 0x14 ] <== NOT EXECUTED status->owner = ((the_period->owner) ? the_period->owner->Object.id : 0); status->state = the_period->state; if ( status->state == RATE_MONOTONIC_INACTIVE ) { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS status->since_last_period.tv_sec = 0; 4000e6a0: c0 26 60 08 clr [ %i1 + 8 ] <== NOT EXECUTED status->since_last_period.tv_nsec = 0; 4000e6a4: c0 26 60 0c clr [ %i1 + 0xc ] <== NOT EXECUTED #else status->ticks_since_last_period = 0; #endif #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS status->executed_since_last_period.tv_sec = 0; 4000e6a8: c0 26 60 10 clr [ %i1 + 0x10 ] <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000e6ac: 03 10 00 78 sethi %hi(0x4001e000), %g1 4000e6b0: c4 00 63 50 ld [ %g1 + 0x350 ], %g2 ! 4001e350 <_Thread_Dispatch_disable_level> 4000e6b4: b0 10 20 00 clr %i0 4000e6b8: 84 00 bf ff add %g2, -1, %g2 4000e6bc: c4 20 63 50 st %g2, [ %g1 + 0x350 ] 4000e6c0: c6 00 63 50 ld [ %g1 + 0x350 ], %g3 4000e6c4: 80 a0 e0 00 cmp %g3, 0 4000e6c8: 02 80 00 0a be 4000e6f0 4000e6cc: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e6d0: 81 c7 e0 08 ret <== NOT EXECUTED 4000e6d4: 81 e8 00 00 restore <== NOT EXECUTED if ( !status ) return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000e6d8: 82 18 60 02 xor %g1, 2, %g1 <== NOT EXECUTED 4000e6dc: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4000e6e0: 84 60 20 00 subx %g0, 0, %g2 <== NOT EXECUTED 4000e6e4: b0 08 a0 15 and %g2, 0x15, %i0 <== NOT EXECUTED 4000e6e8: 81 c7 e0 08 ret <== NOT EXECUTED 4000e6ec: 91 ee 20 04 restore %i0, 4, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000e6f0: 7f ff f1 8e call 4000ad28 <_Thread_Dispatch> 4000e6f4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e6f8: 81 c7 e0 08 ret 4000e6fc: 81 e8 00 00 restore * This lets them share one single invocation of _TOD_Get_uptime(). */ #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) || \ defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) struct timespec uptime; _TOD_Get_uptime( &uptime ); 4000e700: a0 07 bf ec add %fp, -20, %l0 4000e704: 7f ff e9 13 call 40008b50 <_TOD_Get_uptime> 4000e708: 90 10 00 10 mov %l0, %o0 #endif #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS _Timespec_Subtract( 4000e70c: 90 06 20 44 add %i0, 0x44, %o0 4000e710: 92 10 00 10 mov %l0, %o1 4000e714: 7f ff f6 40 call 4000c014 <_Timespec_Subtract> 4000e718: 94 06 60 08 add %i1, 8, %o2 status->ticks_since_last_period = _Watchdog_Ticks_since_boot - the_period->time_at_period; #endif #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS _Timespec_Subtract( 4000e71c: 92 10 00 10 mov %l0, %o1 4000e720: 94 06 60 10 add %i1, 0x10, %o2 4000e724: 11 10 00 79 sethi %hi(0x4001e400), %o0 4000e728: 7f ff f6 3b call 4000c014 <_Timespec_Subtract> 4000e72c: 90 12 20 34 or %o0, 0x34, %o0 ! 4001e434 <_Thread_Time_of_last_context_switch> 4000e730: 30 bf ff df b,a 4000e6ac 40006bb4 : rtems_status_code rtems_rate_monotonic_period( Objects_Id id, rtems_interval length ) { 40006bb4: 9d e3 bf 80 save %sp, -128, %sp RTEMS_INLINE_ROUTINE Rate_monotonic_Control *_Rate_monotonic_Get ( Objects_Id id, Objects_Locations *location ) { return (Rate_monotonic_Control *) 40006bb8: 11 10 00 78 sethi %hi(0x4001e000), %o0 40006bbc: 92 10 00 18 mov %i0, %o1 40006bc0: 90 12 21 b8 or %o0, 0x1b8, %o0 40006bc4: 40 00 0b 31 call 40009888 <_Objects_Get> 40006bc8: 94 07 bf f4 add %fp, -12, %o2 rtems_status_code return_value; rtems_rate_monotonic_period_states local_state; ISR_Level level; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 40006bcc: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006bd0: 80 a0 60 00 cmp %g1, 0 40006bd4: 12 80 00 15 bne 40006c28 40006bd8: a2 10 00 08 mov %o0, %l1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Thread_Is_executing( the_period->owner ) ) { 40006bdc: 25 10 00 79 sethi %hi(0x4001e400), %l2 40006be0: c4 02 20 50 ld [ %o0 + 0x50 ], %g2 40006be4: c2 04 a0 2c ld [ %l2 + 0x2c ], %g1 40006be8: 80 a0 80 01 cmp %g2, %g1 40006bec: 02 80 00 14 be 40006c3c 40006bf0: 80 a6 60 00 cmp %i1, 0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006bf4: 03 10 00 78 sethi %hi(0x4001e000), %g1 40006bf8: c4 00 63 50 ld [ %g1 + 0x350 ], %g2 ! 4001e350 <_Thread_Dispatch_disable_level> 40006bfc: b0 10 20 17 mov 0x17, %i0 _Thread_Dispatch(); 40006c00: 84 00 bf ff add %g2, -1, %g2 40006c04: c4 20 63 50 st %g2, [ %g1 + 0x350 ] 40006c08: c6 00 63 50 ld [ %g1 + 0x350 ], %g3 40006c0c: 80 a0 e0 00 cmp %g3, 0 40006c10: 12 80 00 66 bne 40006da8 40006c14: 01 00 00 00 nop 40006c18: 40 00 10 44 call 4000ad28 <_Thread_Dispatch> 40006c1c: 01 00 00 00 nop 40006c20: 81 c7 e0 08 ret 40006c24: 81 e8 00 00 restore rtems_status_code return_value; rtems_rate_monotonic_period_states local_state; ISR_Level level; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 40006c28: 80 a0 60 02 cmp %g1, 2 40006c2c: 02 bf ff fd be 40006c20 40006c30: b0 10 20 04 mov 4, %i0 break; } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006c34: 81 c7 e0 08 ret <== NOT EXECUTED 40006c38: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED if ( !_Thread_Is_executing( the_period->owner ) ) { _Thread_Enable_dispatch(); return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { 40006c3c: 22 80 00 73 be,a 40006e08 40006c40: d0 02 20 38 ld [ %o0 + 0x38 ], %o0 } _Thread_Enable_dispatch(); return( return_value ); } _ISR_Disable( level ); 40006c44: 7f ff ef 57 call 400029a0 40006c48: 01 00 00 00 nop 40006c4c: a0 10 00 08 mov %o0, %l0 switch ( the_period->state ) { 40006c50: e6 04 60 38 ld [ %l1 + 0x38 ], %l3 40006c54: 80 a4 e0 02 cmp %l3, 2 40006c58: 02 80 00 34 be 40006d28 40006c5c: 80 a4 e0 04 cmp %l3, 4 40006c60: 02 80 00 54 be 40006db0 40006c64: 80 a4 e0 00 cmp %l3, 0 40006c68: 32 bf ff ee bne,a 40006c20 40006c6c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED /* * No need to update statistics -- there are not a period active */ _ISR_Enable( level ); 40006c70: 7f ff ef 50 call 400029b0 40006c74: a0 07 bf ec add %fp, -20, %l0 #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) || \ defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) _TOD_Get_uptime( &uptime ); 40006c78: 40 00 07 b6 call 40008b50 <_TOD_Get_uptime> 40006c7c: 90 10 00 10 mov %l0, %o0 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS /* * Since the statistics didn't update the starting time, * we do it here. */ the_period->time_at_period = uptime; 40006c80: c2 07 bf ec ld [ %fp + -20 ], %g1 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40006c84: c6 04 a0 2c ld [ %l2 + 0x2c ], %g3 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS /* * Since the statistics didn't update the starting time, * we do it here. */ the_period->time_at_period = uptime; 40006c88: c2 24 60 44 st %g1, [ %l1 + 0x44 ] 40006c8c: c2 07 bf f0 ld [ %fp + -16 ], %g1 the_period->owner_executed_at_period = _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40006c90: 92 10 00 10 mov %l0, %o1 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS /* * Since the statistics didn't update the starting time, * we do it here. */ the_period->time_at_period = uptime; 40006c94: c2 24 60 48 st %g1, [ %l1 + 0x48 ] #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40006c98: c4 00 e0 90 ld [ %g3 + 0x90 ], %g2 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40006c9c: a0 07 bf e4 add %fp, -28, %l0 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40006ca0: c4 24 60 3c st %g2, [ %l1 + 0x3c ] 40006ca4: c2 00 e0 94 ld [ %g3 + 0x94 ], %g1 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40006ca8: 94 10 00 10 mov %l0, %o2 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40006cac: c2 24 60 40 st %g1, [ %l1 + 0x40 ] _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40006cb0: 11 10 00 79 sethi %hi(0x4001e400), %o0 40006cb4: 40 00 14 d8 call 4000c014 <_Timespec_Subtract> 40006cb8: 90 12 20 34 or %o0, 0x34, %o0 ! 4001e434 <_Thread_Time_of_last_context_switch> /* The thread had executed before the last context switch also. * * the_period->owner_executed_at_period += ran */ _Timespec_Add_to( &the_period->owner_executed_at_period, &ran ); 40006cbc: 92 10 00 10 mov %l0, %o1 40006cc0: 40 00 14 72 call 4000be88 <_Timespec_Add_to> 40006cc4: 90 04 60 3c add %l1, 0x3c, %o0 #else the_period->owner_ticks_executed_at_period = _Thread_Executing->ticks_executed; #endif the_period->state = RATE_MONOTONIC_ACTIVE; 40006cc8: 84 10 20 02 mov 2, %g2 Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40006ccc: 03 10 00 1c sethi %hi(0x40007000), %g1 40006cd0: 82 10 61 dc or %g1, 0x1dc, %g1 ! 400071dc <_Rate_monotonic_Timeout> the_watchdog->id = id; 40006cd4: f0 24 60 30 st %i0, [ %l1 + 0x30 ] Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40006cd8: f2 24 60 1c st %i1, [ %l1 + 0x1c ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40006cdc: c0 24 60 18 clr [ %l1 + 0x18 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40006ce0: c0 24 60 34 clr [ %l1 + 0x34 ] _Rate_monotonic_Timeout, id, NULL ); the_period->next_length = length; 40006ce4: f2 24 60 4c st %i1, [ %l1 + 0x4c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40006ce8: 92 04 60 10 add %l1, 0x10, %o1 #else the_period->owner_ticks_executed_at_period = _Thread_Executing->ticks_executed; #endif the_period->state = RATE_MONOTONIC_ACTIVE; 40006cec: c4 24 60 38 st %g2, [ %l1 + 0x38 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40006cf0: c2 24 60 2c st %g1, [ %l1 + 0x2c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40006cf4: 11 10 00 79 sethi %hi(0x4001e400), %o0 40006cf8: 40 00 15 92 call 4000c340 <_Watchdog_Insert> 40006cfc: 90 12 20 4c or %o0, 0x4c, %o0 ! 4001e44c <_Watchdog_Ticks_chain> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006d00: 05 10 00 78 sethi %hi(0x4001e000), %g2 40006d04: c2 00 a3 50 ld [ %g2 + 0x350 ], %g1 ! 4001e350 <_Thread_Dispatch_disable_level> 40006d08: 82 00 7f ff add %g1, -1, %g1 40006d0c: c2 20 a3 50 st %g1, [ %g2 + 0x350 ] 40006d10: c6 00 a3 50 ld [ %g2 + 0x350 ], %g3 40006d14: 80 a0 e0 00 cmp %g3, 0 40006d18: 02 80 00 22 be 40006da0 40006d1c: 01 00 00 00 nop _Thread_Dispatch(); 40006d20: 81 c7 e0 08 ret <== NOT EXECUTED 40006d24: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED case RATE_MONOTONIC_ACTIVE: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 40006d28: 7f ff ff 43 call 40006a34 <_Rate_monotonic_Update_statistics> 40006d2c: 90 10 00 11 mov %l1, %o0 * This tells the _Rate_monotonic_Timeout that this task is * in the process of blocking on the period and that we * may be changing the length of the next period. */ the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING; 40006d30: 82 10 20 01 mov 1, %g1 the_period->next_length = length; 40006d34: f2 24 60 4c st %i1, [ %l1 + 0x4c ] * This tells the _Rate_monotonic_Timeout that this task is * in the process of blocking on the period and that we * may be changing the length of the next period. */ the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING; 40006d38: c2 24 60 38 st %g1, [ %l1 + 0x38 ] the_period->next_length = length; _ISR_Enable( level ); 40006d3c: 7f ff ef 1d call 400029b0 40006d40: 90 10 00 10 mov %l0, %o0 _Thread_Executing->Wait.id = the_period->Object.id; 40006d44: c2 04 a0 2c ld [ %l2 + 0x2c ], %g1 40006d48: c4 04 60 08 ld [ %l1 + 8 ], %g2 _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 40006d4c: 90 10 00 01 mov %g1, %o0 the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING; the_period->next_length = length; _ISR_Enable( level ); _Thread_Executing->Wait.id = the_period->Object.id; 40006d50: c4 20 60 20 st %g2, [ %g1 + 0x20 ] _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 40006d54: 40 00 13 1b call 4000b9c0 <_Thread_Set_state> 40006d58: 13 00 00 10 sethi %hi(0x4000), %o1 /* * Did the watchdog timer expire while we were actually blocking * on it? */ _ISR_Disable( level ); 40006d5c: 7f ff ef 11 call 400029a0 40006d60: 01 00 00 00 nop local_state = the_period->state; 40006d64: e0 04 60 38 ld [ %l1 + 0x38 ], %l0 the_period->state = RATE_MONOTONIC_ACTIVE; 40006d68: e6 24 60 38 st %l3, [ %l1 + 0x38 ] _ISR_Enable( level ); 40006d6c: 7f ff ef 11 call 400029b0 40006d70: 01 00 00 00 nop /* * If it did, then we want to unblock ourself and continue as * if nothing happen. The period was reset in the timeout routine. */ if ( local_state == RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING ) 40006d74: 80 a4 20 03 cmp %l0, 3 40006d78: 02 80 00 32 be 40006e40 40006d7c: d0 04 a0 2c ld [ %l2 + 0x2c ], %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006d80: 03 10 00 78 sethi %hi(0x4001e000), %g1 40006d84: c4 00 63 50 ld [ %g1 + 0x350 ], %g2 ! 4001e350 <_Thread_Dispatch_disable_level> 40006d88: 84 00 bf ff add %g2, -1, %g2 40006d8c: c4 20 63 50 st %g2, [ %g1 + 0x350 ] 40006d90: c6 00 63 50 ld [ %g1 + 0x350 ], %g3 40006d94: 80 a0 e0 00 cmp %g3, 0 40006d98: 12 bf ff e2 bne 40006d20 40006d9c: 01 00 00 00 nop _Thread_Dispatch(); 40006da0: 40 00 0f e2 call 4000ad28 <_Thread_Dispatch> 40006da4: b0 10 20 00 clr %i0 ! 0 40006da8: 81 c7 e0 08 ret 40006dac: 81 e8 00 00 restore case RATE_MONOTONIC_EXPIRED: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 40006db0: 7f ff ff 21 call 40006a34 <_Rate_monotonic_Update_statistics> 40006db4: 90 10 00 11 mov %l1, %o0 _ISR_Enable( level ); 40006db8: 7f ff ee fe call 400029b0 40006dbc: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_ACTIVE; 40006dc0: 82 10 20 02 mov 2, %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40006dc4: f2 24 60 1c st %i1, [ %l1 + 0x1c ] the_period->next_length = length; 40006dc8: f2 24 60 4c st %i1, [ %l1 + 0x4c ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40006dcc: 92 04 60 10 add %l1, 0x10, %o1 */ _Rate_monotonic_Update_statistics( the_period ); _ISR_Enable( level ); the_period->state = RATE_MONOTONIC_ACTIVE; 40006dd0: c2 24 60 38 st %g1, [ %l1 + 0x38 ] 40006dd4: 11 10 00 79 sethi %hi(0x4001e400), %o0 40006dd8: 40 00 15 5a call 4000c340 <_Watchdog_Insert> 40006ddc: 90 12 20 4c or %o0, 0x4c, %o0 ! 4001e44c <_Watchdog_Ticks_chain> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006de0: 07 10 00 78 sethi %hi(0x4001e000), %g3 40006de4: c2 00 e3 50 ld [ %g3 + 0x350 ], %g1 ! 4001e350 <_Thread_Dispatch_disable_level> 40006de8: b0 10 20 06 mov 6, %i0 40006dec: 82 00 7f ff add %g1, -1, %g1 40006df0: c2 20 e3 50 st %g1, [ %g3 + 0x350 ] 40006df4: c4 00 e3 50 ld [ %g3 + 0x350 ], %g2 40006df8: 80 a0 a0 00 cmp %g2, 0 40006dfc: 02 bf ff 87 be 40006c18 40006e00: 01 00 00 00 nop 40006e04: 30 bf ff e9 b,a 40006da8 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { switch ( the_period->state ) { 40006e08: 80 a2 20 02 cmp %o0, 2 40006e0c: 02 80 00 09 be 40006e30 40006e10: b0 10 20 00 clr %i0 40006e14: 80 a2 20 04 cmp %o0, 4 40006e18: 02 80 00 06 be 40006e30 40006e1c: b0 10 20 06 mov 6, %i0 40006e20: 80 a2 20 00 cmp %o0, 0 40006e24: 02 80 00 03 be 40006e30 40006e28: b0 10 20 0b mov 0xb, %i0 40006e2c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40006e30: 03 10 00 78 sethi %hi(0x4001e000), %g1 40006e34: c4 00 63 50 ld [ %g1 + 0x350 ], %g2 ! 4001e350 <_Thread_Dispatch_disable_level> 40006e38: 10 bf ff 73 b 40006c04 40006e3c: 84 00 bf ff add %g2, -1, %g2 * If it did, then we want to unblock ourself and continue as * if nothing happen. The period was reset in the timeout routine. */ if ( local_state == RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING ) _Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 40006e40: 40 00 0f 05 call 4000aa54 <_Thread_Clear_state> <== NOT EXECUTED 40006e44: 13 00 00 10 sethi %hi(0x4000), %o1 <== NOT EXECUTED 40006e48: 30 bf ff ce b,a 40006d80 <== NOT EXECUTED 40006e4c : */ void rtems_rate_monotonic_report_statistics_with_plugin( void *context, rtems_printk_plugin_t print ) { 40006e4c: 9d e3 bf 30 save %sp, -208, %sp rtems_id id; rtems_rate_monotonic_period_statistics the_stats; rtems_rate_monotonic_period_status the_status; char name[5]; if ( !print ) 40006e50: 80 a6 60 00 cmp %i1, 0 40006e54: 02 80 00 4e be 40006f8c 40006e58: 90 10 00 18 mov %i0, %o0 return; (*print)( context, "Period information by period\n" ); 40006e5c: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40006e60: 9f c6 40 00 call %i1 40006e64: 92 12 60 e8 or %o1, 0xe8, %o1 ! 4001bce8 #if defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) (*print)( context, "--- CPU times are in seconds ---\n" ); 40006e68: 90 10 00 18 mov %i0, %o0 40006e6c: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40006e70: 9f c6 40 00 call %i1 40006e74: 92 12 61 08 or %o1, 0x108, %o1 ! 4001bd08 #endif #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) (*print)( context, "--- Wall times are in seconds ---\n" ); 40006e78: 90 10 00 18 mov %i0, %o0 40006e7c: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40006e80: 9f c6 40 00 call %i1 40006e84: 92 12 61 30 or %o1, 0x130, %o1 ! 4001bd30 Be sure to test the various cases. (*print)( context,"\ 1234567890123456789012345678901234567890123456789012345678901234567890123456789\ \n"); */ (*print)( context, " ID OWNER COUNT MISSED " 40006e88: 90 10 00 18 mov %i0, %o0 40006e8c: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40006e90: 9f c6 40 00 call %i1 40006e94: 92 12 61 58 or %o1, 0x158, %o1 ! 4001bd58 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS " " #endif " WALL TIME\n" ); (*print)( context, " " 40006e98: 90 10 00 18 mov %i0, %o0 40006e9c: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40006ea0: 9f c6 40 00 call %i1 40006ea4: 92 12 61 a8 or %o1, 0x1a8, %o1 ! 4001bda8 /* * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; 40006ea8: 03 10 00 78 sethi %hi(0x4001e000), %g1 40006eac: a6 10 61 b8 or %g1, 0x1b8, %l3 ! 4001e1b8 <_Rate_monotonic_Information> 40006eb0: e4 04 e0 08 ld [ %l3 + 8 ], %l2 id <= _Rate_monotonic_Information.maximum_id ; 40006eb4: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 40006eb8: 80 a4 80 01 cmp %l2, %g1 40006ebc: 18 80 00 34 bgu 40006f8c 40006ec0: 03 10 00 6f sethi %hi(0x4001bc00), %g1 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { (*print)( context, "\n" ); 40006ec4: 05 10 00 6f sethi %hi(0x4001bc00), %g2 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 40006ec8: b6 10 61 f8 or %g1, 0x1f8, %i3 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { (*print)( context, "\n" ); 40006ecc: b8 10 a1 28 or %g2, 0x128, %i4 40006ed0: a8 07 bf 98 add %fp, -104, %l4 status = rtems_rate_monotonic_get_statistics( id, &the_stats ); if ( status != RTEMS_SUCCESSFUL ) continue; /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); 40006ed4: aa 07 bf d0 add %fp, -48, %l5 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 40006ed8: ba 07 bf b0 add %fp, -80, %i5 40006edc: ac 07 bf e8 add %fp, -24, %l6 * print Wall time part of statistics */ { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS struct timespec wall_average; _Timespec_Divide_by_integer( 40006ee0: b4 07 bf c8 add %fp, -56, %i2 40006ee4: 10 80 00 06 b 40006efc 40006ee8: ae 07 bf f3 add %fp, -13, %l7 * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; id++ ) { 40006eec: a4 04 a0 01 inc %l2 /* * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 40006ef0: 80 a0 40 12 cmp %g1, %l2 40006ef4: 0a 80 00 26 bcs 40006f8c 40006ef8: 01 00 00 00 nop id++ ) { status = rtems_rate_monotonic_get_statistics( id, &the_stats ); 40006efc: 90 10 00 12 mov %l2, %o0 40006f00: 40 00 1d aa call 4000e5a8 40006f04: 92 10 00 14 mov %l4, %o1 if ( status != RTEMS_SUCCESSFUL ) 40006f08: 80 a2 20 00 cmp %o0, 0 40006f0c: 32 bf ff f8 bne,a 40006eec 40006f10: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 continue; /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); 40006f14: 92 10 00 15 mov %l5, %o1 40006f18: 40 00 1d ca call 4000e640 40006f1c: 90 10 00 12 mov %l2, %o0 if ( status != RTEMS_SUCCESSFUL ) 40006f20: 80 a2 20 00 cmp %o0, 0 40006f24: 32 bf ff f2 bne,a 40006eec 40006f28: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 <== NOT EXECUTED continue; name[ 0 ] = '\0'; if ( the_status.owner ) { 40006f2c: d0 07 bf d0 ld [ %fp + -48 ], %o0 /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); if ( status != RTEMS_SUCCESSFUL ) continue; name[ 0 ] = '\0'; 40006f30: c0 2f bf f3 clrb [ %fp + -13 ] if ( the_status.owner ) { 40006f34: 80 a2 20 00 cmp %o0, 0 40006f38: 12 80 00 4b bne 40007064 40006f3c: a0 10 00 17 mov %l7, %l0 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 40006f40: d8 1f bf 98 ldd [ %fp + -104 ], %o4 <== NOT EXECUTED 40006f44: 94 10 00 12 mov %l2, %o2 40006f48: 92 10 00 1b mov %i3, %o1 40006f4c: 96 10 00 10 mov %l0, %o3 40006f50: 9f c6 40 00 call %i1 40006f54: 90 10 00 18 mov %i0, %o0 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 40006f58: c2 07 bf 98 ld [ %fp + -104 ], %g1 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 40006f5c: 94 10 00 16 mov %l6, %o2 40006f60: 90 10 00 1d mov %i5, %o0 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 40006f64: 80 a0 60 00 cmp %g1, 0 40006f68: 12 80 00 0b bne 40006f94 40006f6c: 92 10 00 1c mov %i4, %o1 (*print)( context, "\n" ); 40006f70: 9f c6 40 00 call %i1 40006f74: 90 10 00 18 mov %i0, %o0 /* * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 40006f78: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 id++ ) { 40006f7c: a4 04 a0 01 inc %l2 /* * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 40006f80: 80 a0 40 12 cmp %g1, %l2 40006f84: 1a bf ff df bcc 40006f00 40006f88: 90 10 00 12 mov %l2, %o0 40006f8c: 81 c7 e0 08 ret 40006f90: 81 e8 00 00 restore */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 40006f94: 40 00 13 d7 call 4000bef0 <_Timespec_Divide_by_integer> 40006f98: 92 10 00 01 mov %g1, %o1 &the_stats.total_cpu_time, the_stats.count, &cpu_average ); (*print)( context, 40006f9c: d0 07 bf a4 ld [ %fp + -92 ], %o0 40006fa0: 40 00 46 a2 call 40018a28 <.div> 40006fa4: 92 10 23 e8 mov 0x3e8, %o1 40006fa8: a2 10 00 08 mov %o0, %l1 40006fac: d0 07 bf ac ld [ %fp + -84 ], %o0 40006fb0: 40 00 46 9e call 40018a28 <.div> 40006fb4: 92 10 23 e8 mov 0x3e8, %o1 40006fb8: c2 07 bf e8 ld [ %fp + -24 ], %g1 40006fbc: a0 10 00 08 mov %o0, %l0 40006fc0: d0 07 bf ec ld [ %fp + -20 ], %o0 40006fc4: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40006fc8: 40 00 46 98 call 40018a28 <.div> 40006fcc: 92 10 23 e8 mov 0x3e8, %o1 40006fd0: d8 07 bf a8 ld [ %fp + -88 ], %o4 40006fd4: d4 07 bf a0 ld [ %fp + -96 ], %o2 40006fd8: 96 10 00 11 mov %l1, %o3 40006fdc: 9a 10 00 10 mov %l0, %o5 40006fe0: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 40006fe4: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40006fe8: 90 10 00 18 mov %i0, %o0 40006fec: 9f c6 40 00 call %i1 40006ff0: 92 12 62 10 or %o1, 0x210, %o1 * print Wall time part of statistics */ { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS struct timespec wall_average; _Timespec_Divide_by_integer( 40006ff4: d2 07 bf 98 ld [ %fp + -104 ], %o1 40006ff8: 94 10 00 16 mov %l6, %o2 40006ffc: 40 00 13 bd call 4000bef0 <_Timespec_Divide_by_integer> 40007000: 90 10 00 1a mov %i2, %o0 &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 40007004: d0 07 bf bc ld [ %fp + -68 ], %o0 40007008: 40 00 46 88 call 40018a28 <.div> 4000700c: 92 10 23 e8 mov 0x3e8, %o1 40007010: a2 10 00 08 mov %o0, %l1 40007014: d0 07 bf c4 ld [ %fp + -60 ], %o0 40007018: 40 00 46 84 call 40018a28 <.div> 4000701c: 92 10 23 e8 mov 0x3e8, %o1 40007020: c2 07 bf e8 ld [ %fp + -24 ], %g1 40007024: a0 10 00 08 mov %o0, %l0 40007028: d0 07 bf ec ld [ %fp + -20 ], %o0 4000702c: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40007030: 40 00 46 7e call 40018a28 <.div> 40007034: 92 10 23 e8 mov 0x3e8, %o1 40007038: d4 07 bf b8 ld [ %fp + -72 ], %o2 4000703c: d8 07 bf c0 ld [ %fp + -64 ], %o4 40007040: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 40007044: 96 10 00 11 mov %l1, %o3 40007048: 9a 10 00 10 mov %l0, %o5 4000704c: 90 10 00 18 mov %i0, %o0 40007050: 13 10 00 6f sethi %hi(0x4001bc00), %o1 40007054: 9f c6 40 00 call %i1 40007058: 92 12 62 30 or %o1, 0x230, %o1 ! 4001be30 /* * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 4000705c: 10 bf ff a4 b 40006eec 40007060: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 continue; name[ 0 ] = '\0'; if ( the_status.owner ) { rtems_object_get_name( the_status.owner, sizeof(name), name ); 40007064: 92 10 20 05 mov 5, %o1 40007068: 40 00 00 8f call 400072a4 4000706c: 94 10 00 17 mov %l7, %o2 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 40007070: 10 bf ff b5 b 40006f44 40007074: d8 1f bf 98 ldd [ %fp + -104 ], %o4 40007094 : /* * rtems_rate_monotonic_reset_all_statistics */ void rtems_rate_monotonic_reset_all_statistics( void ) { 40007094: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007098: 25 10 00 78 sethi %hi(0x4001e000), %l2 4000709c: c2 04 a3 50 ld [ %l2 + 0x350 ], %g1 ! 4001e350 <_Thread_Dispatch_disable_level> 400070a0: 82 00 60 01 inc %g1 400070a4: c2 24 a3 50 st %g1, [ %l2 + 0x350 ] /* * Cycle through all possible ids and try to reset each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; 400070a8: 03 10 00 78 sethi %hi(0x4001e000), %g1 400070ac: a2 10 61 b8 or %g1, 0x1b8, %l1 ! 4001e1b8 <_Rate_monotonic_Information> 400070b0: e0 04 60 08 ld [ %l1 + 8 ], %l0 id <= _Rate_monotonic_Information.maximum_id ; 400070b4: c2 04 60 0c ld [ %l1 + 0xc ], %g1 400070b8: 80 a4 00 01 cmp %l0, %g1 400070bc: 18 80 00 09 bgu 400070e0 400070c0: 01 00 00 00 nop id++ ) { status = rtems_rate_monotonic_reset_statistics( id ); 400070c4: 40 00 00 13 call 40007110 400070c8: 90 10 00 10 mov %l0, %o0 /* * Cycle through all possible ids and try to reset each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 400070cc: c2 04 60 0c ld [ %l1 + 0xc ], %g1 id++ ) { 400070d0: a0 04 20 01 inc %l0 /* * Cycle through all possible ids and try to reset each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 400070d4: 80 a0 40 10 cmp %g1, %l0 400070d8: 1a bf ff fb bcc 400070c4 400070dc: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400070e0: c2 04 a3 50 ld [ %l2 + 0x350 ], %g1 400070e4: 82 00 7f ff add %g1, -1, %g1 400070e8: c2 24 a3 50 st %g1, [ %l2 + 0x350 ] 400070ec: c4 04 a3 50 ld [ %l2 + 0x350 ], %g2 400070f0: 80 a0 a0 00 cmp %g2, 0 400070f4: 02 80 00 04 be 40007104 400070f8: 01 00 00 00 nop 400070fc: 81 c7 e0 08 ret <== NOT EXECUTED 40007100: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40007104: 40 00 0f 09 call 4000ad28 <_Thread_Dispatch> 40007108: 81 e8 00 00 restore 4000710c: 01 00 00 00 nop 400100f8 : uint32_t length, uint32_t page_size, rtems_attribute attribute_set, Objects_Id *id ) { 400100f8: 9d e3 bf 98 save %sp, -104, %sp Region_Control *the_region; if ( !rtems_is_name_valid( name ) ) 400100fc: a8 96 20 00 orcc %i0, 0, %l4 40010100: 02 80 00 58 be 40010260 40010104: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 40010108: 80 a6 60 00 cmp %i1, 0 4001010c: 02 80 00 06 be 40010124 40010110: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 40010114: 02 80 00 04 be 40010124 40010118: 80 8e 60 07 btst 7, %i1 return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( starting_address ) ) 4001011c: 02 80 00 04 be 4001012c 40010120: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40010124: 81 c7 e0 08 ret 40010128: 91 e8 20 09 restore %g0, 9, %o0 return RTEMS_INVALID_ADDRESS; _RTEMS_Lock_allocator(); /* to prevent deletion */ 4001012c: 7f ff ea 73 call 4000aaf8 40010130: 01 00 00 00 nop 40010134: a2 10 00 08 mov %o0, %l1 40010138: 25 10 00 cd sethi %hi(0x40033400), %l2 4001013c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 40010140: 80 a0 60 00 cmp %g1, 0 40010144: 02 80 00 0b be 40010170 40010148: 03 10 00 cd sethi %hi(0x40033400), %g1 4001014c: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40010150: c4 00 62 c0 ld [ %g1 + 0x2c0 ], %g2 ! 400336c0 <_System_state_Current> <== NOT EXECUTED 40010154: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40010158: 08 80 00 05 bleu 4001016c <== NOT EXECUTED 4001015c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40010160: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010164: 40 00 13 57 call 40014ec0 <_Internal_error_Occurred> <== NOT EXECUTED 40010168: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 4001016c: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40010170: 27 10 00 cd sethi %hi(0x40033400), %l3 40010174: c6 00 61 bc ld [ %g1 + 0x1bc ], %g3 40010178: e0 04 e1 b4 ld [ %l3 + 0x1b4 ], %l0 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4001017c: c0 20 e0 34 clr [ %g3 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40010180: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40010184: 80 a0 60 00 cmp %g1, 0 40010188: 22 80 00 12 be,a 400101d0 4001018c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40010190: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010194: c2 00 e0 08 ld [ %g3 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40010198: c4 04 20 58 ld [ %l0 + 0x58 ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4001019c: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400101a0: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 400101a4: c6 24 20 6c st %g3, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400101a8: 80 a0 a0 02 cmp %g2, 2 400101ac: 12 80 00 2f bne 40010268 400101b0: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400101b4: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 400101b8: 82 00 60 01 inc %g1 400101bc: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 400101c0: 7f ff ea 52 call 4000ab08 400101c4: 90 10 00 11 mov %l1, %o0 * the inactive chain of free region control blocks. */ RTEMS_INLINE_ROUTINE Region_Control *_Region_Allocate( void ) { return (Region_Control *) _Objects_Allocate( &_Region_Information ); 400101c8: 10 80 00 0f b 40010204 400101cc: 23 10 00 cc sethi %hi(0x40033000), %l1 /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 400101d0: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400101d4: 32 80 00 48 bne,a 400102f4 <== NOT EXECUTED 400101d8: c4 04 20 08 ld [ %l0 + 8 ], %g2 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400101dc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 400101e0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400101e4: 12 80 00 41 bne 400102e8 <== NOT EXECUTED 400101e8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 400101ec: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400101f0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400101f4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400101f8: 7f ff ea 44 call 4000ab08 <== NOT EXECUTED 400101fc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010200: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED 40010204: 40 00 13 5c call 40014f74 <_Objects_Allocate> 40010208: 90 14 62 f8 or %l1, 0x2f8, %o0 ! 400332f8 <_Region_Information> the_region = _Region_Allocate(); if ( !the_region ) { 4001020c: a0 92 20 00 orcc %o0, 0, %l0 40010210: 32 80 00 4e bne,a 40010348 40010214: 90 04 20 68 add %l0, 0x68, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010218: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 4001021c: 82 00 60 01 inc %g1 40010220: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] _RTEMS_Unlock_allocator(); 40010224: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 40010228: 94 10 20 00 clr %o2 4001022c: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010230: 40 00 10 ab call 400144dc <_CORE_mutex_Surrender> 40010234: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010238: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 4001023c: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 40010240: 82 00 7f ff add %g1, -1, %g1 40010244: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] 40010248: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 4001024c: 80 a0 a0 00 cmp %g2, 0 40010250: 12 80 00 04 bne 40010260 40010254: 01 00 00 00 nop 40010258: 40 00 19 d4 call 400169a8 <_Thread_Dispatch> 4001025c: 01 00 00 00 nop 40010260: 81 c7 e0 08 ret 40010264: 81 e8 00 00 restore if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40010268: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 4001026c: 12 bf ff d5 bne 400101c0 <== NOT EXECUTED 40010270: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010274: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 40010278: c4 00 e0 14 ld [ %g3 + 0x14 ], %g2 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4001027c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010280: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40010284: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 <== NOT EXECUTED current = executing->current_priority; if ( current == ceiling ) { 40010288: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001028c: 02 80 00 4e be 400103c4 <== NOT EXECUTED 40010290: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40010294: 1a 80 00 42 bcc 4001039c <== NOT EXECUTED 40010298: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001029c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 400102a0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400102a4: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400102a8: 7f ff ea 18 call 4000ab08 <== NOT EXECUTED 400102ac: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 400102b0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 400102b4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 400102b8: 40 00 18 98 call 40016518 <_Thread_Change_priority> <== NOT EXECUTED 400102bc: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400102c0: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 400102c4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400102c8: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED 400102cc: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 <== NOT EXECUTED 400102d0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400102d4: 12 bf ff cc bne 40010204 <== NOT EXECUTED 400102d8: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED _Thread_Dispatch(); 400102dc: 40 00 19 b3 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 400102e0: 01 00 00 00 nop <== NOT EXECUTED 400102e4: 30 bf ff c8 b,a 40010204 <== NOT EXECUTED * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400102e8: 02 80 00 13 be 40010334 <== NOT EXECUTED 400102ec: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( starting_address ) ) return RTEMS_INVALID_ADDRESS; _RTEMS_Lock_allocator(); /* to prevent deletion */ 400102f0: c4 04 20 08 ld [ %l0 + 8 ], %g2 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400102f4: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 400102f8: c4 20 e0 20 st %g2, [ %g3 + 0x20 ] <== NOT EXECUTED 400102fc: 82 00 60 01 inc %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 40010300: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 40010304: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED 40010308: c4 24 20 40 st %g2, [ %l0 + 0x40 ] <== NOT EXECUTED 4001030c: 82 04 20 10 add %l0, 0x10, %g1 <== NOT EXECUTED 40010310: c2 20 e0 44 st %g1, [ %g3 + 0x44 ] <== NOT EXECUTED 40010314: 7f ff e9 fd call 4000ab08 <== NOT EXECUTED 40010318: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4001031c: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 40010320: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010324: 40 00 10 4a call 4001444c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40010328: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 4001032c: 10 bf ff b6 b 40010204 <== NOT EXECUTED 40010330: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40010334: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40010338: 7f ff e9 f4 call 4000ab08 <== NOT EXECUTED 4001033c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010340: 10 bf ff b1 b 40010204 <== NOT EXECUTED 40010344: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED if ( !the_region ) { _RTEMS_Unlock_allocator(); return RTEMS_TOO_MANY; } the_region->maximum_segment_size = 40010348: 92 10 00 19 mov %i1, %o1 4001034c: 94 10 00 1a mov %i2, %o2 40010350: 40 00 12 8f call 40014d8c <_Heap_Initialize> 40010354: 96 10 00 1b mov %i3, %o3 _Heap_Initialize(&the_region->Memory, starting_address, length, page_size); if ( !the_region->maximum_segment_size ) { 40010358: 80 a2 20 00 cmp %o0, 0 4001035c: 12 80 00 1e bne 400103d4 40010360: d0 24 20 5c st %o0, [ %l0 + 0x5c ] RTEMS_INLINE_ROUTINE void _Region_Free ( Region_Control *the_region ) { _Objects_Free( &_Region_Information, &the_region->Object ); 40010364: 90 14 62 f8 or %l1, 0x2f8, %o0 40010368: 40 00 14 11 call 400153ac <_Objects_Free> 4001036c: 92 10 00 10 mov %l0, %o1 40010370: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 40010374: 82 00 60 01 inc %g1 40010378: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 4001037c: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 40010380: 94 10 20 00 clr %o2 40010384: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010388: 40 00 10 55 call 400144dc <_CORE_mutex_Surrender> 4001038c: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010390: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 40010394: 10 bf ff ab b 40010240 40010398: b0 10 20 08 mov 8, %i0 ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 4001039c: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400103a0: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400103a4: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 400103a8: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 400103ac: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400103b0: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400103b4: 7f ff e9 d5 call 4000ab08 <== NOT EXECUTED 400103b8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED * the inactive chain of free region control blocks. */ RTEMS_INLINE_ROUTINE Region_Control *_Region_Allocate( void ) { return (Region_Control *) _Objects_Allocate( &_Region_Information ); 400103bc: 10 bf ff 92 b 40010204 <== NOT EXECUTED 400103c0: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 400103c4: 7f ff e9 d1 call 4000ab08 <== NOT EXECUTED 400103c8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400103cc: 10 bf ff 8e b 40010204 <== NOT EXECUTED 400103d0: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED the_region->length = length; the_region->page_size = page_size; the_region->attribute_set = attribute_set; the_region->number_of_used_blocks = 0; _Thread_queue_Initialize( 400103d4: 90 04 20 10 add %l0, 0x10, %o0 _Region_Free( the_region ); _RTEMS_Unlock_allocator(); return RTEMS_INVALID_SIZE; } the_region->starting_address = starting_address; 400103d8: f2 24 20 50 st %i1, [ %l0 + 0x50 ] the_region->length = length; 400103dc: f4 24 20 54 st %i2, [ %l0 + 0x54 ] the_region->page_size = page_size; 400103e0: f6 24 20 58 st %i3, [ %l0 + 0x58 ] the_region->attribute_set = attribute_set; 400103e4: f8 24 20 60 st %i4, [ %l0 + 0x60 ] the_region->number_of_used_blocks = 0; 400103e8: c0 24 20 64 clr [ %l0 + 0x64 ] _Thread_queue_Initialize( 400103ec: 93 37 20 02 srl %i4, 2, %o1 400103f0: 94 10 20 40 mov 0x40, %o2 400103f4: 92 0a 60 01 and %o1, 1, %o1 400103f8: 40 00 1b ea call 400173a0 <_Thread_queue_Initialize> 400103fc: 96 10 20 06 mov 6, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010400: 90 14 62 f8 or %l1, 0x2f8, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40010404: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010408: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 4001040c: 03 00 00 3f sethi %hi(0xfc00), %g1 40010410: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40010414: 82 08 c0 01 and %g3, %g1, %g1 40010418: 80 a0 40 02 cmp %g1, %g2 4001041c: 38 80 00 06 bgu,a 40010434 40010420: c6 27 40 00 st %g3, [ %i5 ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40010424: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40010428: 83 28 60 02 sll %g1, 2, %g1 4001042c: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Region_Information, &the_region->Object, (Objects_Name) name ); *id = the_region->Object.id; 40010430: c6 27 40 00 st %g3, [ %i5 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010434: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 40010438: e8 24 20 0c st %l4, [ %l0 + 0xc ] 4001043c: 82 00 60 01 inc %g1 40010440: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] _RTEMS_Unlock_allocator(); 40010444: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 40010448: 94 10 20 00 clr %o2 4001044c: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010450: 40 00 10 23 call 400144dc <_CORE_mutex_Surrender> 40010454: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010458: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 4001045c: 10 bf ff 79 b 40010240 40010460: b0 10 20 00 clr %i0 40010464 : */ rtems_status_code rtems_region_delete( Objects_Id id ) { 40010464: 9d e3 bf 90 save %sp, -112, %sp register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); 40010468: 7f ff e9 a4 call 4000aaf8 4001046c: 01 00 00 00 nop 40010470: a2 10 00 08 mov %o0, %l1 40010474: 25 10 00 cd sethi %hi(0x40033400), %l2 40010478: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 4001047c: 80 a0 60 00 cmp %g1, 0 40010480: 02 80 00 0b be 400104ac 40010484: 27 10 00 cd sethi %hi(0x40033400), %l3 40010488: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 4001048c: c4 00 62 c0 ld [ %g1 + 0x2c0 ], %g2 ! 400336c0 <_System_state_Current> <== NOT EXECUTED 40010490: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40010494: 08 80 00 06 bleu 400104ac <== NOT EXECUTED 40010498: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001049c: 92 10 20 00 clr %o1 <== NOT EXECUTED 400104a0: 40 00 12 88 call 40014ec0 <_Internal_error_Occurred> <== NOT EXECUTED 400104a4: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400104a8: 27 10 00 cd sethi %hi(0x40033400), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400104ac: 09 10 00 cd sethi %hi(0x40033400), %g4 400104b0: e0 04 e1 b4 ld [ %l3 + 0x1b4 ], %l0 400104b4: c4 01 21 bc ld [ %g4 + 0x1bc ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400104b8: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400104bc: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400104c0: 80 a0 60 00 cmp %g1, 0 400104c4: 22 80 00 36 be,a 4001059c 400104c8: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400104cc: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400104d0: c2 00 a0 08 ld [ %g2 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 400104d4: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 400104d8: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400104dc: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 400104e0: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400104e4: 80 a0 e0 02 cmp %g3, 2 400104e8: 12 80 00 56 bne 40010640 400104ec: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400104f0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400104f4: 80 a0 e0 03 cmp %g3, 3 the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400104f8: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400104fc: 02 80 00 7c be 400106ec 40010500: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 40010504: 7f ff e9 81 call 4000ab08 40010508: 90 10 00 11 mov %l1, %o0 RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 4001050c: 92 10 00 18 mov %i0, %o1 40010510: 21 10 00 cc sethi %hi(0x40033000), %l0 40010514: 94 07 bf f4 add %fp, -12, %o2 40010518: 40 00 13 e8 call 400154b8 <_Objects_Get_no_protection> 4001051c: 90 14 22 f8 or %l0, 0x2f8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 40010520: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010524: 80 a0 60 01 cmp %g1, 1 40010528: 02 80 00 33 be 400105f4 4001052c: 92 10 00 08 mov %o0, %o1 40010530: 80 a0 60 01 cmp %g1, 1 40010534: 1a 80 00 5f bcc 400106b0 40010538: 80 a0 60 02 cmp %g1, 2 _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 5 ); if ( the_region->number_of_used_blocks == 0 ) { 4001053c: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 40010540: 80 a0 60 00 cmp %g1, 0 40010544: 22 80 00 99 be,a 400107a8 40010548: 90 14 22 f8 or %l0, 0x2f8, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001054c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 40010550: 82 00 60 01 inc %g1 40010554: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _RTEMS_Unlock_allocator(); return RTEMS_SUCCESSFUL; } _RTEMS_Unlock_allocator(); 40010558: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 4001055c: 94 10 20 00 clr %o2 40010560: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010564: 40 00 0f de call 400144dc <_CORE_mutex_Surrender> 40010568: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001056c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 40010570: b0 10 20 0c mov 0xc, %i0 40010574: 82 00 7f ff add %g1, -1, %g1 40010578: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] 4001057c: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 40010580: 80 a0 a0 00 cmp %g2, 0 40010584: 12 80 00 49 bne 400106a8 40010588: 01 00 00 00 nop _Thread_Dispatch(); 4001058c: 40 00 19 07 call 400169a8 <_Thread_Dispatch> 40010590: 01 00 00 00 nop 40010594: 81 c7 e0 08 ret 40010598: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 4001059c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400105a0: 12 80 00 30 bne 40010660 <== NOT EXECUTED 400105a4: c6 04 e1 b4 ld [ %l3 + 0x1b4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400105a8: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 400105ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400105b0: 22 80 00 6a be,a 40010758 <== NOT EXECUTED 400105b4: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400105b8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400105bc: 12 80 00 29 bne 40010660 <== NOT EXECUTED 400105c0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400105c4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400105c8: 7f ff e9 50 call 4000ab08 <== NOT EXECUTED 400105cc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400105d0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400105d4: 21 10 00 cc sethi %hi(0x40033000), %l0 <== NOT EXECUTED 400105d8: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 400105dc: 40 00 13 b7 call 400154b8 <_Objects_Get_no_protection> <== NOT EXECUTED 400105e0: 90 14 22 f8 or %l0, 0x2f8, %o0 <== NOT EXECUTED register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); switch ( location ) { 400105e4: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 400105e8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400105ec: 12 bf ff d2 bne 40010534 <== NOT EXECUTED 400105f0: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400105f4: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 400105f8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400105fc: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40010600: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 40010604: 94 10 20 00 clr %o2 <== NOT EXECUTED 40010608: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4001060c: 40 00 0f b4 call 400144dc <_CORE_mutex_Surrender> <== NOT EXECUTED 40010610: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010614: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 40010618: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001061c: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED 40010620: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 <== NOT EXECUTED 40010624: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40010628: 12 80 00 24 bne 400106b8 <== NOT EXECUTED 4001062c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40010630: 40 00 18 de call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40010634: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 40010638: 81 c7 e0 08 ret <== NOT EXECUTED 4001063c: 81 e8 00 00 restore <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40010640: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40010644: 12 bf ff b0 bne 40010504 <== NOT EXECUTED 40010648: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4001064c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010650: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010654: 02 80 00 26 be 400106ec <== NOT EXECUTED 40010658: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 4001065c: 30 bf ff aa b,a 40010504 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010660: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED ) { register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); 40010664: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40010668: c8 01 21 bc ld [ %g4 + 0x1bc ], %g4 <== NOT EXECUTED 4001066c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010670: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40010674: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED 40010678: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 4001067c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40010680: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40010684: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40010688: 7f ff e9 20 call 4000ab08 <== NOT EXECUTED 4001068c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010690: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 40010694: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010698: 40 00 0f 6d call 4001444c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 4001069c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 400106a0: 10 bf ff 9c b 40010510 <== NOT EXECUTED 400106a4: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED _RTEMS_Unlock_allocator(); return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400106a8: 81 c7 e0 08 ret <== NOT EXECUTED 400106ac: 81 e8 00 00 restore <== NOT EXECUTED register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); switch ( location ) { 400106b0: 02 80 00 04 be 400106c0 400106b4: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400106b8: 81 c7 e0 08 ret <== NOT EXECUTED 400106bc: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400106c0: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 400106c4: 82 00 60 01 inc %g1 400106c8: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 400106cc: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 400106d0: 94 10 20 00 clr %o2 400106d4: d2 02 20 08 ld [ %o0 + 8 ], %o1 400106d8: 40 00 0f 81 call 400144dc <_CORE_mutex_Surrender> 400106dc: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400106e0: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 400106e4: 10 bf ff a4 b 40010574 400106e8: b0 10 20 04 mov 4, %i0 */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 400106ec: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400106f0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400106f4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400106f8: 02 80 00 28 be 40010798 <== NOT EXECUTED 400106fc: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40010700: 1a 80 00 1c bcc 40010770 <== NOT EXECUTED 40010704: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010708: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 4001070c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010710: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40010714: 7f ff e8 fd call 4000ab08 <== NOT EXECUTED 40010718: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 4001071c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40010720: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40010724: 40 00 17 7d call 40016518 <_Thread_Change_priority> <== NOT EXECUTED 40010728: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001072c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 <== NOT EXECUTED 40010730: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010734: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] <== NOT EXECUTED 40010738: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 <== NOT EXECUTED 4001073c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40010740: 32 bf ff 74 bne,a 40010510 <== NOT EXECUTED 40010744: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED _Thread_Dispatch(); 40010748: 40 00 18 98 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 4001074c: 01 00 00 00 nop <== NOT EXECUTED 40010750: 10 bf ff 70 b 40010510 <== NOT EXECUTED 40010754: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40010758: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001075c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40010760: 7f ff e8 ea call 4000ab08 <== NOT EXECUTED 40010764: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010768: 10 bf ff 6a b 40010510 <== NOT EXECUTED 4001076c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40010770: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010774: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40010778: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 4001077c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010780: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010784: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40010788: 7f ff e8 e0 call 4000ab08 <== NOT EXECUTED 4001078c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010790: 10 bf ff 60 b 40010510 <== NOT EXECUTED 40010794: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40010798: 7f ff e8 dc call 4000ab08 <== NOT EXECUTED 4001079c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400107a0: 10 bf ff 5c b 40010510 <== NOT EXECUTED 400107a4: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 400107a8: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400107ac: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 400107b0: 05 00 00 3f sethi %hi(0xfc00), %g2 400107b4: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 400107b8: 82 08 40 02 and %g1, %g2, %g1 400107bc: 80 a0 40 03 cmp %g1, %g3 400107c0: 18 80 00 05 bgu 400107d4 400107c4: 01 00 00 00 nop information->local_table[ index ] = the_object; 400107c8: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 400107cc: 83 28 60 02 sll %g1, 2, %g1 400107d0: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Region_Free ( Region_Control *the_region ) { _Objects_Free( &_Region_Information, &the_region->Object ); 400107d4: 40 00 12 f6 call 400153ac <_Objects_Free> 400107d8: c0 22 60 0c clr [ %o1 + 0xc ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400107dc: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 400107e0: 82 00 60 01 inc %g1 400107e4: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 5 ); if ( the_region->number_of_used_blocks == 0 ) { _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 400107e8: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 400107ec: 94 10 20 00 clr %o2 400107f0: d2 02 20 08 ld [ %o0 + 8 ], %o1 400107f4: 40 00 0f 3a call 400144dc <_CORE_mutex_Surrender> 400107f8: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400107fc: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 40010800: 10 bf ff 5d b 40010574 40010804: b0 10 20 00 clr %i0 40010808 : rtems_status_code rtems_region_extend( Objects_Id id, void *starting_address, uint32_t length ) { 40010808: 9d e3 bf 90 save %sp, -112, %sp 4001080c: a8 10 00 18 mov %i0, %l4 Objects_Locations location; uint32_t amount_extended; Heap_Extend_status heap_status; rtems_status_code status; if ( !starting_address ) 40010810: 80 a6 60 00 cmp %i1, 0 40010814: 02 80 00 59 be 40010978 40010818: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ 4001081c: 7f ff e8 b7 call 4000aaf8 40010820: 01 00 00 00 nop 40010824: a4 10 00 08 mov %o0, %l2 40010828: 23 10 00 cd sethi %hi(0x40033400), %l1 4001082c: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 40010830: 80 a0 60 00 cmp %g1, 0 40010834: 02 80 00 0b be 40010860 40010838: 27 10 00 cd sethi %hi(0x40033400), %l3 4001083c: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40010840: c4 00 62 c0 ld [ %g1 + 0x2c0 ], %g2 ! 400336c0 <_System_state_Current> <== NOT EXECUTED 40010844: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40010848: 08 80 00 06 bleu 40010860 <== NOT EXECUTED 4001084c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40010850: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010854: 40 00 11 9b call 40014ec0 <_Internal_error_Occurred> <== NOT EXECUTED 40010858: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4001085c: 27 10 00 cd sethi %hi(0x40033400), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40010860: 09 10 00 cd sethi %hi(0x40033400), %g4 40010864: e0 04 e1 b4 ld [ %l3 + 0x1b4 ], %l0 40010868: c4 01 21 bc ld [ %g4 + 0x1bc ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4001086c: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40010870: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40010874: 80 a0 60 00 cmp %g1, 0 40010878: 22 80 00 42 be,a 40010980 4001087c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40010880: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010884: c2 00 a0 08 ld [ %g2 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40010888: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4001088c: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010890: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 40010894: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40010898: 80 a0 e0 02 cmp %g3, 2 4001089c: 02 80 00 61 be 40010a20 400108a0: c8 24 20 64 st %g4, [ %l0 + 0x64 ] 400108a4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400108a8: 22 80 00 60 be,a 40010a28 <== NOT EXECUTED 400108ac: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 400108b0: 7f ff e8 96 call 4000ab08 400108b4: 90 10 00 12 mov %l2, %o0 RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 400108b8: 92 10 00 14 mov %l4, %o1 400108bc: 11 10 00 cc sethi %hi(0x40033000), %o0 400108c0: 94 07 bf f4 add %fp, -12, %o2 400108c4: 40 00 12 fd call 400154b8 <_Objects_Get_no_protection> 400108c8: 90 12 22 f8 or %o0, 0x2f8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 400108cc: c2 07 bf f4 ld [ %fp + -12 ], %g1 400108d0: 80 a0 60 01 cmp %g1, 1 400108d4: 02 80 00 40 be 400109d4 400108d8: a0 10 00 08 mov %o0, %l0 400108dc: 80 a0 60 01 cmp %g1, 1 400108e0: 1a 80 00 70 bcc 40010aa0 400108e4: 80 a0 60 02 cmp %g1, 2 _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ID; case OBJECTS_LOCAL: heap_status = _Heap_Extend( 400108e8: 92 10 00 19 mov %i1, %o1 400108ec: 94 10 00 1a mov %i2, %o2 400108f0: 90 02 20 68 add %o0, 0x68, %o0 400108f4: 96 07 bf f0 add %fp, -16, %o3 400108f8: 40 00 10 3f call 400149f4 <_Heap_Extend> 400108fc: b0 10 20 09 mov 9, %i0 starting_address, length, &amount_extended ); switch ( heap_status ) { 40010900: 80 a2 20 01 cmp %o0, 1 40010904: 02 80 00 0c be 40010934 40010908: 01 00 00 00 nop 4001090c: 1a 80 00 8e bcc 40010b44 40010910: 82 1a 20 02 xor %o0, 2, %g1 case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 40010914: c6 07 bf f0 ld [ %fp + -16 ], %g3 40010918: c4 04 20 54 ld [ %l0 + 0x54 ], %g2 the_region->maximum_segment_size += amount_extended; 4001091c: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 40010920: 84 00 80 03 add %g2, %g3, %g2 the_region->maximum_segment_size += amount_extended; 40010924: 82 00 40 03 add %g1, %g3, %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 40010928: c4 24 20 54 st %g2, [ %l0 + 0x54 ] the_region->maximum_segment_size += amount_extended; 4001092c: c2 24 20 5c st %g1, [ %l0 + 0x5c ] 40010930: b0 10 20 00 clr %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010934: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010938: 82 00 60 01 inc %g1 4001093c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] break; case HEAP_EXTEND_NOT_IMPLEMENTED: status = RTEMS_NOT_IMPLEMENTED; break; } _RTEMS_Unlock_allocator(); 40010940: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 40010944: 94 10 20 00 clr %o2 40010948: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001094c: 40 00 0e e4 call 400144dc <_CORE_mutex_Surrender> 40010950: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010954: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010958: 82 00 7f ff add %g1, -1, %g1 4001095c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40010960: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40010964: 80 a0 a0 00 cmp %g2, 0 40010968: 12 80 00 2c bne 40010a18 4001096c: 01 00 00 00 nop _Thread_Dispatch(); 40010970: 40 00 18 0e call 400169a8 <_Thread_Dispatch> 40010974: 01 00 00 00 nop 40010978: 81 c7 e0 08 ret 4001097c: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40010980: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40010984: 12 80 00 4d bne 40010ab8 <== NOT EXECUTED 40010988: c6 04 e1 b4 ld [ %l3 + 0x1b4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4001098c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40010990: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40010994: 12 80 00 47 bne 40010ab0 <== NOT EXECUTED 40010998: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 4001099c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400109a0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400109a4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400109a8: 7f ff e8 58 call 4000ab08 <== NOT EXECUTED 400109ac: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400109b0: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED 400109b4: 11 10 00 cc sethi %hi(0x40033000), %o0 <== NOT EXECUTED 400109b8: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 400109bc: 40 00 12 bf call 400154b8 <_Objects_Get_no_protection> <== NOT EXECUTED 400109c0: 90 12 22 f8 or %o0, 0x2f8, %o0 <== NOT EXECUTED status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ the_region = _Region_Get( id, &location ); switch ( location ) { 400109c4: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 400109c8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400109cc: 12 bf ff c5 bne 400108e0 <== NOT EXECUTED 400109d0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400109d4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 400109d8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400109dc: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 400109e0: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 400109e4: 94 10 20 00 clr %o2 <== NOT EXECUTED 400109e8: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 400109ec: 40 00 0e bc call 400144dc <_CORE_mutex_Surrender> <== NOT EXECUTED 400109f0: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400109f4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 400109f8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400109fc: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40010a00: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 <== NOT EXECUTED 40010a04: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40010a08: 12 80 00 28 bne 40010aa8 <== NOT EXECUTED 40010a0c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40010a10: 40 00 17 e6 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40010a14: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 40010a18: 81 c7 e0 08 ret <== NOT EXECUTED 40010a1c: 81 e8 00 00 restore <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010a20: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010a24: 80 a0 e0 03 cmp %g3, 3 the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010a28: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010a2c: 12 bf ff a1 bne 400108b0 40010a30: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40010a34: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40010a38: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40010a3c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40010a40: 02 80 00 50 be 40010b80 <== NOT EXECUTED 40010a44: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40010a48: 1a 80 00 44 bcc 40010b58 <== NOT EXECUTED 40010a4c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010a50: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40010a54: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010a58: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40010a5c: 7f ff e8 2b call 4000ab08 <== NOT EXECUTED 40010a60: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40010a64: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40010a68: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40010a6c: 40 00 16 ab call 40016518 <_Thread_Change_priority> <== NOT EXECUTED 40010a70: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010a74: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40010a78: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010a7c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40010a80: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 <== NOT EXECUTED 40010a84: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40010a88: 32 bf ff 8d bne,a 400108bc <== NOT EXECUTED 40010a8c: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED _Thread_Dispatch(); 40010a90: 40 00 17 c6 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40010a94: 01 00 00 00 nop <== NOT EXECUTED 40010a98: 10 bf ff 89 b 400108bc <== NOT EXECUTED 40010a9c: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ the_region = _Region_Get( id, &location ); switch ( location ) { 40010aa0: 02 80 00 18 be 40010b00 40010aa4: 01 00 00 00 nop 40010aa8: 81 c7 e0 08 ret <== NOT EXECUTED 40010aac: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40010ab0: 02 80 00 1f be 40010b2c <== NOT EXECUTED 40010ab4: c6 04 e1 b4 ld [ %l3 + 0x1b4 ], %g3 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010ab8: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED if ( !starting_address ) return RTEMS_INVALID_ADDRESS; status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ 40010abc: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40010ac0: c8 01 21 bc ld [ %g4 + 0x1bc ], %g4 <== NOT EXECUTED 40010ac4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010ac8: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40010acc: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40010ad0: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40010ad4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40010ad8: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40010adc: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40010ae0: 7f ff e8 0a call 4000ab08 <== NOT EXECUTED 40010ae4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010ae8: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 40010aec: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010af0: 40 00 0e 57 call 4001444c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40010af4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40010af8: 10 bf ff 71 b 400108bc <== NOT EXECUTED 40010afc: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED 40010b00: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010b04: 82 00 60 01 inc %g1 40010b08: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40010b0c: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 40010b10: 94 10 20 00 clr %o2 40010b14: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010b18: 40 00 0e 71 call 400144dc <_CORE_mutex_Surrender> 40010b1c: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010b20: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010b24: 10 bf ff 8d b 40010958 40010b28: b0 10 20 04 mov 4, %i0 case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40010b2c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 40010b30: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40010b34: 7f ff e7 f5 call 4000ab08 <== NOT EXECUTED 40010b38: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010b3c: 10 bf ff 60 b 400108bc <== NOT EXECUTED 40010b40: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED starting_address, length, &amount_extended ); switch ( heap_status ) { 40010b44: 80 a0 00 01 cmp %g0, %g1 40010b48: 84 60 20 00 subx %g0, 0, %g2 40010b4c: b0 08 bf e8 and %g2, -24, %i0 40010b50: 10 bf ff 79 b 40010934 40010b54: b0 06 20 18 add %i0, 0x18, %i0 ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40010b58: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010b5c: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40010b60: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40010b64: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010b68: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010b6c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40010b70: 7f ff e7 e6 call 4000ab08 <== NOT EXECUTED 40010b74: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010b78: 10 bf ff 51 b 400108bc <== NOT EXECUTED 40010b7c: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40010b80: 7f ff e7 e2 call 4000ab08 <== NOT EXECUTED 40010b84: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010b88: 10 bf ff 4d b 400108bc <== NOT EXECUTED 40010b8c: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED 40010b90 : uint32_t size, rtems_option option_set, rtems_interval timeout, void **segment ) { 40010b90: 9d e3 bf 90 save %sp, -112, %sp 40010b94: aa 10 00 18 mov %i0, %l5 register Region_Control *the_region; Objects_Locations location; Thread_Control *executing; void *the_segment; if ( !segment ) 40010b98: 80 a7 20 00 cmp %i4, 0 40010b9c: 02 80 00 4e be 40010cd4 40010ba0: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; *segment = NULL; if ( size == 0 ) 40010ba4: 80 a6 60 00 cmp %i1, 0 40010ba8: 02 80 00 c8 be 40010ec8 40010bac: c0 27 00 00 clr [ %i4 ] return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 40010bb0: 7f ff e7 d2 call 4000aaf8 40010bb4: 01 00 00 00 nop 40010bb8: a4 10 00 08 mov %o0, %l2 40010bbc: 23 10 00 cd sethi %hi(0x40033400), %l1 40010bc0: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 40010bc4: 80 a0 60 00 cmp %g1, 0 40010bc8: 02 80 00 0b be 40010bf4 40010bcc: 29 10 00 cd sethi %hi(0x40033400), %l4 40010bd0: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40010bd4: c4 00 62 c0 ld [ %g1 + 0x2c0 ], %g2 ! 400336c0 <_System_state_Current> <== NOT EXECUTED 40010bd8: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40010bdc: 08 80 00 06 bleu 40010bf4 <== NOT EXECUTED 40010be0: 90 10 20 00 clr %o0 <== NOT EXECUTED 40010be4: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010be8: 40 00 10 b6 call 40014ec0 <_Internal_error_Occurred> <== NOT EXECUTED 40010bec: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40010bf0: 29 10 00 cd sethi %hi(0x40033400), %l4 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40010bf4: 27 10 00 cd sethi %hi(0x40033400), %l3 40010bf8: e0 05 21 b4 ld [ %l4 + 0x1b4 ], %l0 40010bfc: c4 04 e1 bc ld [ %l3 + 0x1bc ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40010c00: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40010c04: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40010c08: 80 a0 60 00 cmp %g1, 0 40010c0c: 22 80 00 34 be,a 40010cdc 40010c10: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40010c14: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010c18: c2 00 a0 08 ld [ %g2 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40010c1c: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40010c20: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010c24: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 40010c28: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40010c2c: 80 a0 e0 02 cmp %g3, 2 40010c30: 02 80 00 54 be 40010d80 40010c34: c8 24 20 64 st %g4, [ %l0 + 0x64 ] 40010c38: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40010c3c: 22 80 00 53 be,a 40010d88 <== NOT EXECUTED 40010c40: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 40010c44: 7f ff e7 b1 call 4000ab08 40010c48: 90 10 00 12 mov %l2, %o0 executing = _Thread_Executing; 40010c4c: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 40010c50: 11 10 00 cc sethi %hi(0x40033000), %o0 40010c54: 92 10 00 15 mov %l5, %o1 40010c58: 90 12 22 f8 or %o0, 0x2f8, %o0 40010c5c: 40 00 12 17 call 400154b8 <_Objects_Get_no_protection> 40010c60: 94 07 bf f4 add %fp, -12, %o2 the_region = _Region_Get( id, &location ); switch ( location ) { 40010c64: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010c68: 80 a0 60 01 cmp %g1, 1 40010c6c: 02 80 00 32 be 40010d34 40010c70: a0 10 00 08 mov %o0, %l0 40010c74: 80 a0 60 01 cmp %g1, 1 40010c78: 1a 80 00 62 bcc 40010e00 40010c7c: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( size > the_region->maximum_segment_size ) { 40010c80: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 40010c84: 80 a6 40 01 cmp %i1, %g1 40010c88: 28 80 00 a0 bleu,a 40010f08 40010c8c: 90 02 20 68 add %o0, 0x68, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010c90: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010c94: 82 00 60 01 inc %g1 40010c98: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] _RTEMS_Unlock_allocator(); 40010c9c: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 40010ca0: 94 10 20 00 clr %o2 40010ca4: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010ca8: 40 00 0e 0d call 400144dc <_CORE_mutex_Surrender> 40010cac: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010cb0: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010cb4: 82 00 7f ff add %g1, -1, %g1 40010cb8: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40010cbc: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40010cc0: 80 a0 a0 00 cmp %g2, 0 40010cc4: 12 80 00 81 bne 40010ec8 40010cc8: 01 00 00 00 nop _Thread_Dispatch(); 40010ccc: 40 00 17 37 call 400169a8 <_Thread_Dispatch> 40010cd0: b0 10 20 08 mov 8, %i0 ! 8 40010cd4: 81 c7 e0 08 ret 40010cd8: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40010cdc: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40010ce0: 12 80 00 4e bne 40010e18 <== NOT EXECUTED 40010ce4: c6 05 21 b4 ld [ %l4 + 0x1b4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40010ce8: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40010cec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40010cf0: 12 80 00 48 bne 40010e10 <== NOT EXECUTED 40010cf4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40010cf8: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40010cfc: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010d00: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40010d04: 7f ff e7 81 call 4000ab08 <== NOT EXECUTED 40010d08: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010d0c: 11 10 00 cc sethi %hi(0x40033000), %o0 <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40010d10: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED 40010d14: 90 12 22 f8 or %o0, 0x2f8, %o0 <== NOT EXECUTED 40010d18: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 40010d1c: 40 00 11 e7 call 400154b8 <_Objects_Get_no_protection> <== NOT EXECUTED 40010d20: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED the_region = _Region_Get( id, &location ); switch ( location ) { 40010d24: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40010d28: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010d2c: 12 bf ff d3 bne 40010c78 <== NOT EXECUTED 40010d30: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010d34: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40010d38: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010d3c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40010d40: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 <== NOT EXECUTED 40010d44: 94 10 20 00 clr %o2 <== NOT EXECUTED 40010d48: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40010d4c: 40 00 0d e4 call 400144dc <_CORE_mutex_Surrender> <== NOT EXECUTED 40010d50: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010d54: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40010d58: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010d5c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40010d60: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 <== NOT EXECUTED 40010d64: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40010d68: 12 80 00 28 bne 40010e08 <== NOT EXECUTED 40010d6c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40010d70: 40 00 17 0e call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40010d74: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 40010d78: 81 c7 e0 08 ret <== NOT EXECUTED 40010d7c: 81 e8 00 00 restore <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010d80: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010d84: 80 a0 e0 03 cmp %g3, 3 the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010d88: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010d8c: 12 bf ff ae bne 40010c44 40010d90: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40010d94: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40010d98: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40010d9c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40010da0: 02 80 00 56 be 40010ef8 <== NOT EXECUTED 40010da4: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40010da8: 1a 80 00 4a bcc 40010ed0 <== NOT EXECUTED 40010dac: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010db0: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40010db4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010db8: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40010dbc: 7f ff e7 53 call 4000ab08 <== NOT EXECUTED 40010dc0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40010dc4: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40010dc8: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40010dcc: 40 00 15 d3 call 40016518 <_Thread_Change_priority> <== NOT EXECUTED 40010dd0: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010dd4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40010dd8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010ddc: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40010de0: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 <== NOT EXECUTED 40010de4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40010de8: 32 bf ff 9a bne,a 40010c50 <== NOT EXECUTED 40010dec: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED _Thread_Dispatch(); 40010df0: 40 00 16 ee call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40010df4: 01 00 00 00 nop <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40010df8: 10 bf ff 96 b 40010c50 <== NOT EXECUTED 40010dfc: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED the_region = _Region_Get( id, &location ); switch ( location ) { 40010e00: 02 80 00 18 be 40010e60 40010e04: 01 00 00 00 nop _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); _Thread_Enable_dispatch(); return (rtems_status_code) executing->Wait.return_code; 40010e08: 81 c7 e0 08 ret <== NOT EXECUTED 40010e0c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40010e10: 02 80 00 28 be 40010eb0 <== NOT EXECUTED 40010e14: c6 05 21 b4 ld [ %l4 + 0x1b4 ], %g3 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010e18: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED *segment = NULL; if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 40010e1c: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40010e20: c8 04 e1 bc ld [ %l3 + 0x1bc ], %g4 <== NOT EXECUTED 40010e24: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010e28: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40010e2c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40010e30: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40010e34: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40010e38: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40010e3c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40010e40: 7f ff e7 32 call 4000ab08 <== NOT EXECUTED 40010e44: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010e48: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 <== NOT EXECUTED 40010e4c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010e50: 40 00 0d 7f call 4001444c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40010e54: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED executing = _Thread_Executing; 40010e58: 10 bf ff 7e b 40010c50 <== NOT EXECUTED 40010e5c: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED 40010e60: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010e64: 82 00 60 01 inc %g1 40010e68: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40010e6c: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 40010e70: 94 10 20 00 clr %o2 40010e74: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010e78: 40 00 0d 99 call 400144dc <_CORE_mutex_Surrender> 40010e7c: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010e80: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010e84: b0 10 20 04 mov 4, %i0 _Thread_Dispatch(); 40010e88: 82 00 7f ff add %g1, -1, %g1 40010e8c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40010e90: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40010e94: 80 a0 a0 00 cmp %g2, 0 40010e98: 12 80 00 6d bne 4001104c 40010e9c: 01 00 00 00 nop 40010ea0: 40 00 16 c2 call 400169a8 <_Thread_Dispatch> 40010ea4: 01 00 00 00 nop 40010ea8: 81 c7 e0 08 ret 40010eac: 81 e8 00 00 restore case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40010eb0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 40010eb4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40010eb8: 7f ff e7 14 call 4000ab08 <== NOT EXECUTED 40010ebc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40010ec0: 10 bf ff 64 b 40010c50 <== NOT EXECUTED 40010ec4: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); _Thread_Enable_dispatch(); return (rtems_status_code) executing->Wait.return_code; 40010ec8: 81 c7 e0 08 ret <== NOT EXECUTED 40010ecc: 91 e8 20 08 restore %g0, 8, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40010ed0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010ed4: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40010ed8: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40010edc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010ee0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010ee4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40010ee8: 7f ff e7 08 call 4000ab08 <== NOT EXECUTED 40010eec: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40010ef0: 10 bf ff 58 b 40010c50 <== NOT EXECUTED 40010ef4: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40010ef8: 7f ff e7 04 call 4000ab08 <== NOT EXECUTED 40010efc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40010f00: 10 bf ff 54 b 40010c50 <== NOT EXECUTED 40010f04: f0 04 e1 bc ld [ %l3 + 0x1bc ], %i0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Region_Allocate_segment ( Region_Control *the_region, uint32_t size ) { return _Heap_Allocate( &the_region->Memory, size ); 40010f08: 40 00 0e 89 call 4001492c <_Heap_Allocate> 40010f0c: 92 10 00 19 mov %i1, %o1 the_segment = _Region_Allocate_segment( the_region, size ); _Region_Debug_Walk( the_region, 2 ); if ( the_segment ) { 40010f10: a4 92 20 00 orcc %o0, 0, %l2 40010f14: 02 80 00 17 be 40010f70 40010f18: 80 8e a0 01 btst 1, %i2 the_region->number_of_used_blocks += 1; 40010f1c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010f20: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40010f24: 82 00 60 01 inc %g1 40010f28: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 40010f2c: 84 00 a0 01 inc %g2 40010f30: c4 24 60 e0 st %g2, [ %l1 + 0xe0 ] _RTEMS_Unlock_allocator(); 40010f34: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 40010f38: 94 10 20 00 clr %o2 40010f3c: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010f40: 40 00 0d 67 call 400144dc <_CORE_mutex_Surrender> 40010f44: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010f48: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010f4c: 82 00 7f ff add %g1, -1, %g1 40010f50: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40010f54: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40010f58: 80 a0 a0 00 cmp %g2, 0 40010f5c: 02 80 00 12 be 40010fa4 40010f60: 01 00 00 00 nop *segment = the_segment; 40010f64: e4 27 00 00 st %l2, [ %i4 ] <== NOT EXECUTED 40010f68: 81 c7 e0 08 ret 40010f6c: 91 e8 20 00 restore %g0, 0, %o0 return RTEMS_SUCCESSFUL; } if ( _Options_Is_no_wait( option_set ) ) { 40010f70: 02 80 00 11 be 40010fb4 40010f74: 01 00 00 00 nop rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010f78: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010f7c: 82 00 60 01 inc %g1 40010f80: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] _RTEMS_Unlock_allocator(); 40010f84: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 40010f88: 94 10 20 00 clr %o2 40010f8c: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010f90: 40 00 0d 53 call 400144dc <_CORE_mutex_Surrender> 40010f94: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010f98: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010f9c: 10 bf ff bb b 40010e88 40010fa0: b0 10 20 0d mov 0xd, %i0 _Thread_Dispatch(); 40010fa4: 40 00 16 81 call 400169a8 <_Thread_Dispatch> 40010fa8: 01 00 00 00 nop _Region_Debug_Walk( the_region, 2 ); if ( the_segment ) { the_region->number_of_used_blocks += 1; _RTEMS_Unlock_allocator(); *segment = the_segment; 40010fac: 10 bf ff ef b 40010f68 40010fb0: e4 27 00 00 st %l2, [ %i4 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010fb4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010fb8: 25 10 00 cd sethi %hi(0x40033400), %l2 40010fbc: 82 00 60 01 inc %g1 40010fc0: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40010fc4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010fc8: 82 00 60 01 inc %g1 40010fcc: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] * Switch from using the memory allocation mutex to using a * dispatching disabled critical section. We have to do this * because this thread is going to block. */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); 40010fd0: d0 05 21 b4 ld [ %l4 + 0x1b4 ], %o0 40010fd4: 94 10 20 00 clr %o2 40010fd8: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010fdc: 40 00 0d 40 call 400144dc <_CORE_mutex_Surrender> 40010fe0: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010fe4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40010fe8: 82 00 7f ff add %g1, -1, %g1 40010fec: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40010ff0: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40010ff4: 80 a0 a0 00 cmp %g2, 0 40010ff8: 02 80 00 17 be 40011054 40010ffc: 01 00 00 00 nop 40011000: 82 10 20 01 mov 1, %g1 ! 1 executing->Wait.queue = &the_region->Wait_queue; 40011004: 90 04 20 10 add %l0, 0x10, %o0 executing->Wait.id = id; 40011008: ea 26 20 20 st %l5, [ %i0 + 0x20 ] executing->Wait.count = size; 4001100c: f2 26 20 24 st %i1, [ %i0 + 0x24 ] executing->Wait.return_argument = segment; 40011010: f8 26 20 28 st %i4, [ %i0 + 0x28 ] _Thread_queue_Enter_critical_section( &the_region->Wait_queue ); _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); 40011014: 92 10 00 1b mov %i3, %o1 * because this thread is going to block. */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); executing->Wait.queue = &the_region->Wait_queue; 40011018: d0 26 20 44 st %o0, [ %i0 + 0x44 ] 4001101c: c2 24 20 40 st %g1, [ %l0 + 0x40 ] executing->Wait.count = size; executing->Wait.return_argument = segment; _Thread_queue_Enter_critical_section( &the_region->Wait_queue ); _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); 40011020: 15 10 00 5d sethi %hi(0x40017400), %o2 40011024: 40 00 17 d1 call 40016f68 <_Thread_queue_Enqueue_with_handler> 40011028: 94 12 a0 a8 or %o2, 0xa8, %o2 ! 400174a8 <_Thread_queue_Timeout> 4001102c: c2 04 a0 e0 ld [ %l2 + 0xe0 ], %g1 40011030: 82 00 7f ff add %g1, -1, %g1 40011034: c2 24 a0 e0 st %g1, [ %l2 + 0xe0 ] 40011038: c4 04 a0 e0 ld [ %l2 + 0xe0 ], %g2 4001103c: 80 a0 a0 00 cmp %g2, 0 40011040: 02 80 00 09 be 40011064 40011044: 01 00 00 00 nop _Thread_Enable_dispatch(); return (rtems_status_code) executing->Wait.return_code; 40011048: f0 06 20 34 ld [ %i0 + 0x34 ], %i0 <== NOT EXECUTED 4001104c: 81 c7 e0 08 ret <== NOT EXECUTED 40011050: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40011054: 40 00 16 55 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40011058: 01 00 00 00 nop <== NOT EXECUTED 4001105c: 10 bf ff ea b 40011004 <== NOT EXECUTED 40011060: 82 10 20 01 mov 1, %g1 ! 1 <== NOT EXECUTED 40011064: 40 00 16 51 call 400169a8 <_Thread_Dispatch> 40011068: 01 00 00 00 nop 4001106c: f0 06 20 34 ld [ %i0 + 0x34 ], %i0 40011070: 81 c7 e0 08 ret 40011074: 81 e8 00 00 restore 400110b0 : rtems_status_code rtems_region_return_segment( Objects_Id id, void *segment ) { 400110b0: 9d e3 bf 90 save %sp, -112, %sp #ifdef RTEMS_REGION_FREE_SHRED_PATTERN uint32_t size; #endif int status; _RTEMS_Lock_allocator(); 400110b4: 7f ff e6 91 call 4000aaf8 400110b8: 01 00 00 00 nop 400110bc: a4 10 00 08 mov %o0, %l2 400110c0: 23 10 00 cd sethi %hi(0x40033400), %l1 400110c4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 400110c8: 80 a0 60 00 cmp %g1, 0 400110cc: 02 80 00 0b be 400110f8 400110d0: 27 10 00 cd sethi %hi(0x40033400), %l3 400110d4: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 400110d8: c4 00 62 c0 ld [ %g1 + 0x2c0 ], %g2 ! 400336c0 <_System_state_Current> <== NOT EXECUTED 400110dc: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 400110e0: 08 80 00 06 bleu 400110f8 <== NOT EXECUTED 400110e4: 90 10 20 00 clr %o0 <== NOT EXECUTED 400110e8: 92 10 20 00 clr %o1 <== NOT EXECUTED 400110ec: 40 00 0f 75 call 40014ec0 <_Internal_error_Occurred> <== NOT EXECUTED 400110f0: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400110f4: 27 10 00 cd sethi %hi(0x40033400), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400110f8: 09 10 00 cd sethi %hi(0x40033400), %g4 400110fc: e0 04 e1 b4 ld [ %l3 + 0x1b4 ], %l0 40011100: c4 01 21 bc ld [ %g4 + 0x1bc ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40011104: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40011108: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 4001110c: 80 a0 60 00 cmp %g1, 0 40011110: 22 80 00 38 be,a 400111f0 40011114: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40011118: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4001111c: c2 00 a0 08 ld [ %g2 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40011120: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40011124: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40011128: c2 24 20 70 st %g1, [ %l0 + 0x70 ] executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; 4001112c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40011130: 80 a0 e0 02 cmp %g3, 2 40011134: 12 80 00 58 bne 40011294 40011138: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4001113c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011140: 80 a0 e0 03 cmp %g3, 3 the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40011144: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011148: 02 80 00 7c be 40011338 4001114c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 40011150: 7f ff e6 6e call 4000ab08 40011154: 90 10 00 12 mov %l2, %o0 RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40011158: 92 10 00 18 mov %i0, %o1 4001115c: 11 10 00 cc sethi %hi(0x40033000), %o0 40011160: 94 07 bf f4 add %fp, -12, %o2 40011164: 40 00 10 d5 call 400154b8 <_Objects_Get_no_protection> 40011168: 90 12 22 f8 or %o0, 0x2f8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 4001116c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40011170: 80 a0 60 01 cmp %g1, 1 40011174: 02 80 00 35 be 40011248 40011178: a0 10 00 08 mov %o0, %l0 4001117c: 80 a0 60 01 cmp %g1, 1 40011180: 1a 80 00 5f bcc 400112fc 40011184: 80 a0 60 02 cmp %g1, 2 RTEMS_INLINE_ROUTINE boolean _Region_Free_segment ( Region_Control *the_region, void *the_segment ) { return _Heap_Free( &the_region->Memory, the_segment ); 40011188: 92 10 00 19 mov %i1, %o1 4001118c: 40 00 0e 4d call 40014ac0 <_Heap_Free> 40011190: 90 02 20 68 add %o0, 0x68, %o0 status = _Region_Free_segment( the_region, segment ); _Region_Debug_Walk( the_region, 4 ); if ( !status ) { 40011194: 80 a2 20 00 cmp %o0, 0 40011198: 32 80 00 97 bne,a 400113f4 4001119c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400111a0: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 400111a4: 82 00 60 01 inc %g1 400111a8: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] _RTEMS_Unlock_allocator(); 400111ac: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 400111b0: 94 10 20 00 clr %o2 400111b4: d2 02 20 08 ld [ %o0 + 8 ], %o1 400111b8: 40 00 0c c9 call 400144dc <_CORE_mutex_Surrender> 400111bc: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400111c0: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 400111c4: b0 10 20 09 mov 9, %i0 400111c8: 82 00 7f ff add %g1, -1, %g1 400111cc: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 400111d0: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 400111d4: 80 a0 a0 00 cmp %g2, 0 400111d8: 12 80 00 8c bne 40011408 400111dc: 01 00 00 00 nop _Thread_Dispatch(); 400111e0: 40 00 15 f2 call 400169a8 <_Thread_Dispatch> 400111e4: 01 00 00 00 nop 400111e8: 81 c7 e0 08 ret 400111ec: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 400111f0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400111f4: 12 80 00 30 bne 400112b4 <== NOT EXECUTED 400111f8: c6 04 e1 b4 ld [ %l3 + 0x1b4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400111fc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40011200: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40011204: 22 80 00 68 be,a 400113a4 <== NOT EXECUTED 40011208: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 4001120c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011210: 12 80 00 29 bne 400112b4 <== NOT EXECUTED 40011214: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40011218: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4001121c: 7f ff e6 3b call 4000ab08 <== NOT EXECUTED 40011220: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40011224: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40011228: 11 10 00 cc sethi %hi(0x40033000), %o0 <== NOT EXECUTED 4001122c: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40011230: 40 00 10 a2 call 400154b8 <_Objects_Get_no_protection> <== NOT EXECUTED 40011234: 90 12 22 f8 or %o0, 0x2f8, %o0 <== NOT EXECUTED #endif int status; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); switch ( location ) { 40011238: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001123c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011240: 12 bf ff d0 bne 40011180 <== NOT EXECUTED 40011244: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011248: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 4001124c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011250: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40011254: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 40011258: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001125c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40011260: 40 00 0c 9f call 400144dc <_CORE_mutex_Surrender> <== NOT EXECUTED 40011264: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011268: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 4001126c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011270: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40011274: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 <== NOT EXECUTED 40011278: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001127c: 12 80 00 22 bne 40011304 <== NOT EXECUTED 40011280: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40011284: 40 00 15 c9 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40011288: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 4001128c: 81 c7 e0 08 ret <== NOT EXECUTED 40011290: 81 e8 00 00 restore <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40011294: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40011298: 12 bf ff ae bne 40011150 <== NOT EXECUTED 4001129c: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400112a0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400112a4: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400112a8: 02 80 00 24 be 40011338 <== NOT EXECUTED 400112ac: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 400112b0: 30 bf ff a8 b,a 40011150 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400112b4: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED #ifdef RTEMS_REGION_FREE_SHRED_PATTERN uint32_t size; #endif int status; _RTEMS_Lock_allocator(); 400112b8: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 400112bc: c8 01 21 bc ld [ %g4 + 0x1bc ], %g4 <== NOT EXECUTED 400112c0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400112c4: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 400112c8: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 400112cc: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 400112d0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400112d4: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 400112d8: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 400112dc: 7f ff e6 0b call 4000ab08 <== NOT EXECUTED 400112e0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400112e4: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 <== NOT EXECUTED 400112e8: 92 10 20 00 clr %o1 <== NOT EXECUTED 400112ec: 40 00 0c 58 call 4001444c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 400112f0: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 400112f4: 10 bf ff 9a b 4001115c <== NOT EXECUTED 400112f8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED the_region = _Region_Get( id, &location ); switch ( location ) { 400112fc: 02 80 00 04 be 4001130c 40011300: 01 00 00 00 nop the_region->number_of_used_blocks -= 1; _Region_Process_queue(the_region); /* unlocks allocator internally */ return RTEMS_SUCCESSFUL; 40011304: 81 c7 e0 08 ret <== NOT EXECUTED 40011308: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED 4001130c: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40011310: 82 00 60 01 inc %g1 40011314: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40011318: d0 04 e1 b4 ld [ %l3 + 0x1b4 ], %o0 4001131c: 94 10 20 00 clr %o2 40011320: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011324: 40 00 0c 6e call 400144dc <_CORE_mutex_Surrender> 40011328: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001132c: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40011330: 10 bf ff a6 b 400111c8 40011334: b0 10 20 04 mov 4, %i0 */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40011338: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 4001133c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40011340: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40011344: 02 80 00 28 be 400113e4 <== NOT EXECUTED 40011348: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 4001134c: 1a 80 00 1c bcc 400113bc <== NOT EXECUTED 40011350: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011354: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 40011358: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001135c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40011360: 7f ff e5 ea call 4000ab08 <== NOT EXECUTED 40011364: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40011368: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 4001136c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40011370: 40 00 14 6a call 40016518 <_Thread_Change_priority> <== NOT EXECUTED 40011374: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011378: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 <== NOT EXECUTED 4001137c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011380: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED 40011384: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 <== NOT EXECUTED 40011388: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001138c: 32 bf ff 74 bne,a 4001115c <== NOT EXECUTED 40011390: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED _Thread_Dispatch(); 40011394: 40 00 15 85 call 400169a8 <_Thread_Dispatch> <== NOT EXECUTED 40011398: 01 00 00 00 nop <== NOT EXECUTED 4001139c: 10 bf ff 70 b 4001115c <== NOT EXECUTED 400113a0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 400113a4: 82 00 60 01 inc %g1 <== NOT EXECUTED 400113a8: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400113ac: 7f ff e5 d7 call 4000ab08 <== NOT EXECUTED 400113b0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400113b4: 10 bf ff 6a b 4001115c <== NOT EXECUTED 400113b8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400113bc: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400113c0: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400113c4: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 400113c8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400113cc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400113d0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400113d4: 7f ff e5 cd call 4000ab08 <== NOT EXECUTED 400113d8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400113dc: 10 bf ff 60 b 4001115c <== NOT EXECUTED 400113e0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 400113e4: 7f ff e5 c9 call 4000ab08 <== NOT EXECUTED 400113e8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400113ec: 10 bf ff 5c b 4001115c <== NOT EXECUTED 400113f0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; _Region_Process_queue(the_region); /* unlocks allocator internally */ 400113f4: 90 10 00 10 mov %l0, %o0 if ( !status ) { _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; 400113f8: 82 00 7f ff add %g1, -1, %g1 _Region_Process_queue(the_region); /* unlocks allocator internally */ 400113fc: b0 10 20 00 clr %i0 40011400: 40 00 24 76 call 4001a5d8 <_Region_Process_queue> 40011404: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 40011408: 81 c7 e0 08 ret 4001140c: 81 e8 00 00 restore 40005a2c : uint32_t count, rtems_attribute attribute_set, rtems_task_priority priority_ceiling, rtems_id *id ) { 40005a2c: 9d e3 bf 80 save %sp, -128, %sp register Semaphore_Control *the_semaphore; CORE_mutex_Attributes the_mutex_attributes; CORE_semaphore_Attributes the_semaphore_attributes; if ( !rtems_is_name_valid( name ) ) 40005a30: aa 96 20 00 orcc %i0, 0, %l5 40005a34: 02 80 00 12 be 40005a7c 40005a38: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 40005a3c: 80 a7 20 00 cmp %i4, 0 40005a40: 02 80 00 0f be 40005a7c 40005a44: b0 10 20 09 mov 9, %i0 return RTEMS_NOT_DEFINED; } else #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || 40005a48: a4 8e a0 40 andcc %i2, 0x40, %l2 40005a4c: 12 80 00 0e bne 40005a84 40005a50: a0 0e a0 30 and %i2, 0x30, %l0 40005a54: 80 8e a0 80 btst 0x80, %i2 40005a58: 12 80 00 0c bne 40005a88 40005a5c: 80 a4 20 10 cmp %l0, 0x10 RTEMS_INLINE_ROUTINE boolean _Attributes_Is_counting_semaphore( rtems_attribute attribute_set ) { return ((attribute_set & RTEMS_SEMAPHORE_CLASS) == RTEMS_COUNTING_SEMAPHORE); 40005a60: 80 a0 00 10 cmp %g0, %l0 40005a64: a2 60 3f ff subx %g0, -1, %l1 if ( _Attributes_Is_inherit_priority( attribute_set ) && _Attributes_Is_priority_ceiling( attribute_set ) ) return RTEMS_NOT_DEFINED; if ( !_Attributes_Is_counting_semaphore( attribute_set ) && ( count > 1 ) ) 40005a68: 80 a4 60 00 cmp %l1, 0 40005a6c: 12 80 00 17 bne 40005ac8 40005a70: 80 a6 60 01 cmp %i1, 1 40005a74: 08 80 00 15 bleu 40005ac8 40005a78: b0 10 20 0a mov 0xa, %i0 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 40005a7c: 81 c7 e0 08 ret 40005a80: 81 e8 00 00 restore #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || _Attributes_Is_priority_ceiling( attribute_set ) ) { if ( ! ( (_Attributes_Is_binary_semaphore( attribute_set ) || 40005a84: 80 a4 20 10 cmp %l0, 0x10 40005a88: 12 80 00 0b bne 40005ab4 40005a8c: 80 a4 20 20 cmp %l0, 0x20 40005a90: 80 8e a0 04 btst 4, %i2 40005a94: 02 80 00 06 be 40005aac 40005a98: 80 a4 a0 00 cmp %l2, 0 _Attributes_Is_priority( attribute_set ) ) ) return RTEMS_NOT_DEFINED; } if ( _Attributes_Is_inherit_priority( attribute_set ) && 40005a9c: 02 bf ff f1 be 40005a60 40005aa0: 80 8e a0 80 btst 0x80, %i2 40005aa4: 02 bf ff f0 be 40005a64 40005aa8: 80 a0 00 10 cmp %g0, %l0 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 40005aac: 81 c7 e0 08 ret 40005ab0: 91 e8 20 0b restore %g0, 0xb, %o0 #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || _Attributes_Is_priority_ceiling( attribute_set ) ) { if ( ! ( (_Attributes_Is_binary_semaphore( attribute_set ) || 40005ab4: 12 bf ff fe bne 40005aac 40005ab8: 80 8e a0 04 btst 4, %i2 40005abc: 12 bf ff f8 bne 40005a9c 40005ac0: 80 a4 a0 00 cmp %l2, 0 40005ac4: 30 bf ff fa b,a 40005aac <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40005ac8: 29 10 00 66 sethi %hi(0x40019800), %l4 40005acc: c2 05 23 10 ld [ %l4 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 40005ad0: 82 00 60 01 inc %g1 40005ad4: c2 25 23 10 st %g1, [ %l4 + 0x310 ] * the inactive chain of free semaphore control blocks. */ RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Allocate( void ) { return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information ); 40005ad8: 31 10 00 66 sethi %hi(0x40019800), %i0 40005adc: 40 00 07 28 call 4000777c <_Objects_Allocate> 40005ae0: 90 16 21 c4 or %i0, 0x1c4, %o0 ! 400199c4 <_Semaphore_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_semaphore = _Semaphore_Allocate(); if ( !the_semaphore ) { 40005ae4: a6 92 20 00 orcc %o0, 0, %l3 40005ae8: 12 80 00 0e bne 40005b20 40005aec: 80 a4 60 00 cmp %l1, 0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40005af0: c2 05 23 10 ld [ %l4 + 0x310 ], %g1 40005af4: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 40005af8: 82 00 7f ff add %g1, -1, %g1 40005afc: c2 25 23 10 st %g1, [ %l4 + 0x310 ] 40005b00: c4 05 23 10 ld [ %l4 + 0x310 ], %g2 40005b04: 80 a0 a0 00 cmp %g2, 0 40005b08: 12 80 00 04 bne 40005b18 40005b0c: 01 00 00 00 nop 40005b10: 40 00 0d 94 call 40009160 <_Thread_Dispatch> 40005b14: 01 00 00 00 nop 40005b18: 81 c7 e0 08 ret 40005b1c: 81 e8 00 00 restore * If it is not a counting semaphore, then it is either a * simple binary semaphore or a more powerful mutex style binary * semaphore. */ if ( !_Attributes_Is_counting_semaphore( attribute_set ) ) { 40005b20: 12 80 00 1e bne 40005b98 40005b24: f4 24 e0 10 st %i2, [ %l3 + 0x10 ] CORE_mutex_Status mutex_status; if ( _Attributes_Is_inherit_priority( attribute_set ) ) 40005b28: 80 a4 a0 00 cmp %l2, 0 40005b2c: 02 80 00 39 be 40005c10 40005b30: 80 8e a0 80 btst 0x80, %i2 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40005b34: 82 10 20 02 mov 2, %g1 40005b38: c2 27 bf e8 st %g1, [ %fp + -24 ] the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; else the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_FIFO; if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { 40005b3c: 80 a4 20 10 cmp %l0, 0x10 40005b40: 12 80 00 39 bne 40005c24 40005b44: 82 10 20 02 mov 2, %g1 the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { 40005b48: c2 07 bf e8 ld [ %fp + -24 ], %g1 40005b4c: 80 a0 60 01 cmp %g1, 1 40005b50: 18 80 00 3d bgu 40005c44 40005b54: c0 27 bf e0 clr [ %fp + -32 ] case CORE_MUTEX_DISCIPLINES_FIFO: case CORE_MUTEX_DISCIPLINES_PRIORITY: the_mutex_attributes.only_owner_release = FALSE; 40005b58: c0 27 bf e4 clr [ %fp + -28 ] the_mutex_attributes.only_owner_release = FALSE; } the_mutex_attributes.priority_ceiling = priority_ceiling; mutex_status = _CORE_mutex_Initialize( 40005b5c: 82 1e 60 01 xor %i1, 1, %g1 40005b60: 80 a0 00 01 cmp %g0, %g1 } else { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS; the_mutex_attributes.only_owner_release = FALSE; } the_mutex_attributes.priority_ceiling = priority_ceiling; 40005b64: f6 27 bf ec st %i3, [ %fp + -20 ] mutex_status = _CORE_mutex_Initialize( 40005b68: 94 60 3f ff subx %g0, -1, %o2 40005b6c: 90 04 e0 14 add %l3, 0x14, %o0 40005b70: 40 00 04 76 call 40006d48 <_CORE_mutex_Initialize> 40005b74: 92 07 bf e0 add %fp, -32, %o1 &the_semaphore->Core_control.mutex, &the_mutex_attributes, (count == 1) ? CORE_MUTEX_UNLOCKED : CORE_MUTEX_LOCKED ); if ( mutex_status == CORE_MUTEX_STATUS_CEILING_VIOLATED ) { 40005b78: 80 a2 20 06 cmp %o0, 6 40005b7c: 12 80 00 14 bne 40005bcc 40005b80: 90 16 21 c4 or %i0, 0x1c4, %o0 RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 40005b84: 40 00 08 0c call 40007bb4 <_Objects_Free> <== NOT EXECUTED 40005b88: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40005b8c: c2 05 23 10 ld [ %l4 + 0x310 ], %g1 <== NOT EXECUTED 40005b90: 10 bf ff da b 40005af8 <== NOT EXECUTED 40005b94: b0 10 20 13 mov 0x13, %i0 <== NOT EXECUTED _Semaphore_Free( the_semaphore ); _Thread_Enable_dispatch(); return RTEMS_INVALID_PRIORITY; } } else { if ( _Attributes_Is_priority( attribute_set ) ) 40005b98: 80 8e a0 04 btst 4, %i2 40005b9c: 22 80 00 04 be,a 40005bac 40005ba0: c0 27 bf f4 clr [ %fp + -12 ] the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY; 40005ba4: 82 10 20 01 mov 1, %g1 40005ba8: c2 27 bf f4 st %g1, [ %fp + -12 ] /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 40005bac: 82 10 3f ff mov -1, %g1 /* * The following are just to make Purify happy. */ the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; 40005bb0: c0 27 bf e0 clr [ %fp + -32 ] the_mutex_attributes.priority_ceiling = PRIORITY_MINIMUM; 40005bb4: c0 27 bf ec clr [ %fp + -20 ] _CORE_semaphore_Initialize( 40005bb8: 94 10 00 19 mov %i1, %o2 /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 40005bbc: c2 27 bf f0 st %g1, [ %fp + -16 ] */ the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; the_mutex_attributes.priority_ceiling = PRIORITY_MINIMUM; _CORE_semaphore_Initialize( 40005bc0: 90 04 e0 14 add %l3, 0x14, %o0 40005bc4: 40 00 05 1e call 4000703c <_CORE_semaphore_Initialize> 40005bc8: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40005bcc: 90 16 21 c4 or %i0, 0x1c4, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40005bd0: c6 04 e0 08 ld [ %l3 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40005bd4: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 40005bd8: 03 00 00 3f sethi %hi(0xfc00), %g1 40005bdc: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40005be0: 82 08 c0 01 and %g3, %g1, %g1 40005be4: 80 a0 40 02 cmp %g1, %g2 40005be8: 38 80 00 06 bgu,a 40005c00 40005bec: ea 24 e0 0c st %l5, [ %l3 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40005bf0: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40005bf4: 83 28 60 02 sll %g1, 2, %g1 40005bf8: e6 20 80 01 st %l3, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 40005bfc: ea 24 e0 0c st %l5, [ %l3 + 0xc ] &_Semaphore_Information, &the_semaphore->Object, (Objects_Name) name ); *id = the_semaphore->Object.id; 40005c00: c6 27 00 00 st %g3, [ %i4 ] 40005c04: c2 05 23 10 ld [ %l4 + 0x310 ], %g1 40005c08: 10 bf ff bc b 40005af8 40005c0c: b0 10 20 00 clr %i0 if ( !_Attributes_Is_counting_semaphore( attribute_set ) ) { CORE_mutex_Status mutex_status; if ( _Attributes_Is_inherit_priority( attribute_set ) ) the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) 40005c10: 02 80 00 08 be 40005c30 40005c14: 80 8e a0 04 btst 4, %i2 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; 40005c18: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 40005c1c: 10 bf ff c8 b 40005b3c <== NOT EXECUTED 40005c20: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED the_mutex_attributes.only_owner_release = TRUE; break; } } else { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS; the_mutex_attributes.only_owner_release = FALSE; 40005c24: c0 27 bf e4 clr [ %fp + -28 ] case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_mutex_attributes.only_owner_release = TRUE; break; } } else { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS; 40005c28: 10 bf ff cd b 40005b5c 40005c2c: c2 27 bf e0 st %g1, [ %fp + -32 ] if ( _Attributes_Is_inherit_priority( attribute_set ) ) the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; else if ( _Attributes_Is_priority( attribute_set ) ) 40005c30: 22 bf ff c3 be,a 40005b3c 40005c34: c0 27 bf e8 clr [ %fp + -24 ] the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; 40005c38: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40005c3c: 10 bf ff c0 b 40005b3c <== NOT EXECUTED 40005c40: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { 40005c44: 80 a0 60 03 cmp %g1, 3 40005c48: 18 bf ff c6 bgu 40005b60 40005c4c: 82 1e 60 01 xor %i1, 1, %g1 case CORE_MUTEX_DISCIPLINES_PRIORITY: the_mutex_attributes.only_owner_release = FALSE; break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_mutex_attributes.only_owner_release = TRUE; 40005c50: 82 10 20 01 mov 1, %g1 40005c54: 10 bf ff c2 b 40005b5c 40005c58: c2 27 bf e4 st %g1, [ %fp + -28 ] 40005c5c : #endif rtems_status_code rtems_semaphore_delete( rtems_id id ) { 40005c5c: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 40005c60: 21 10 00 66 sethi %hi(0x40019800), %l0 40005c64: 92 10 00 18 mov %i0, %o1 40005c68: 94 07 bf f4 add %fp, -12, %o2 40005c6c: 40 00 08 15 call 40007cc0 <_Objects_Get> 40005c70: 90 14 21 c4 or %l0, 0x1c4, %o0 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40005c74: c2 07 bf f4 ld [ %fp + -12 ], %g1 40005c78: 80 a0 60 00 cmp %g1, 0 40005c7c: 12 80 00 19 bne 40005ce0 40005c80: b0 10 00 08 mov %o0, %i0 40005c84: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 40005c88: 84 88 60 30 andcc %g1, 0x30, %g2 40005c8c: 22 80 00 1a be,a 40005cf4 40005c90: 90 02 20 14 add %o0, 0x14, %o0 if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) && 40005c94: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 40005c98: 80 a0 60 00 cmp %g1, 0 40005c9c: 12 80 00 35 bne 40005d70 40005ca0: 80 a0 a0 20 cmp %g2, 0x20 40005ca4: 02 80 00 34 be 40005d74 40005ca8: 90 06 20 14 add %i0, 0x14, %o0 40005cac: 03 10 00 66 sethi %hi(0x40019800), %g1 40005cb0: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 40005cb4: b0 10 20 0c mov 0xc, %i0 40005cb8: 84 00 bf ff add %g2, -1, %g2 40005cbc: c4 20 63 10 st %g2, [ %g1 + 0x310 ] 40005cc0: c6 00 63 10 ld [ %g1 + 0x310 ], %g3 40005cc4: 80 a0 e0 00 cmp %g3, 0 40005cc8: 12 80 00 28 bne 40005d68 40005ccc: 01 00 00 00 nop _Thread_Dispatch(); 40005cd0: 40 00 0d 24 call 40009160 <_Thread_Dispatch> 40005cd4: 01 00 00 00 nop 40005cd8: 81 c7 e0 08 ret 40005cdc: 81 e8 00 00 restore { register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40005ce0: 80 a0 60 02 cmp %g1, 2 40005ce4: 08 bf ff fd bleu 40005cd8 40005ce8: b0 10 20 04 mov 4, %i0 40005cec: 81 c7 e0 08 ret <== NOT EXECUTED 40005cf0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED &the_semaphore->Core_control.mutex, SEMAPHORE_MP_OBJECT_WAS_DELETED, CORE_MUTEX_WAS_DELETED ); } else { _CORE_semaphore_Flush( 40005cf4: 92 10 20 00 clr %o1 40005cf8: 40 00 04 cd call 4000702c <_CORE_semaphore_Flush> 40005cfc: 94 10 20 02 mov 2, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40005d00: 90 14 21 c4 or %l0, 0x1c4, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40005d04: c2 06 20 08 ld [ %i0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40005d08: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40005d0c: 05 00 00 3f sethi %hi(0xfc00), %g2 40005d10: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40005d14: 82 08 40 02 and %g1, %g2, %g1 40005d18: 80 a0 40 03 cmp %g1, %g3 40005d1c: 38 80 00 06 bgu,a 40005d34 40005d20: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40005d24: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40005d28: 83 28 60 02 sll %g1, 2, %g1 40005d2c: c0 20 80 01 clr [ %g2 + %g1 ] uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); /* _Objects_Clear_name( the_object->name, information->name_length ); */ the_object->name = 0; 40005d30: c0 26 20 0c clr [ %i0 + 0xc ] RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 40005d34: 40 00 07 a0 call 40007bb4 <_Objects_Free> 40005d38: 92 10 00 18 mov %i0, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40005d3c: 03 10 00 66 sethi %hi(0x40019800), %g1 40005d40: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 40005d44: b0 10 20 00 clr %i0 40005d48: 84 00 bf ff add %g2, -1, %g2 40005d4c: c4 20 63 10 st %g2, [ %g1 + 0x310 ] 40005d50: c6 00 63 10 ld [ %g1 + 0x310 ], %g3 40005d54: 80 a0 e0 00 cmp %g3, 0 40005d58: 12 80 00 04 bne 40005d68 40005d5c: 01 00 00 00 nop _Thread_Dispatch(); 40005d60: 40 00 0d 00 call 40009160 <_Thread_Dispatch> 40005d64: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40005d68: 81 c7 e0 08 ret 40005d6c: 81 e8 00 00 restore !_Attributes_Is_simple_binary_semaphore( the_semaphore->attribute_set ) ) { _Thread_Enable_dispatch(); return RTEMS_RESOURCE_IN_USE; } _CORE_mutex_Flush( 40005d70: 90 06 20 14 add %i0, 0x14, %o0 40005d74: 92 10 20 00 clr %o1 40005d78: 40 00 03 f0 call 40006d38 <_CORE_mutex_Flush> 40005d7c: 94 10 20 04 mov 4, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40005d80: 10 bf ff e1 b 40005d04 40005d84: 90 14 21 c4 or %l0, 0x1c4, %o0 40006228 : #endif rtems_status_code rtems_semaphore_flush( rtems_id id ) { 40006228: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 4000622c: 11 10 00 6d sethi %hi(0x4001b400), %o0 40006230: 92 10 00 18 mov %i0, %o1 40006234: 90 12 20 dc or %o0, 0xdc, %o0 40006238: 40 00 08 75 call 4000840c <_Objects_Get> 4000623c: 94 07 bf f4 add %fp, -12, %o2 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40006240: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006244: 80 a0 60 00 cmp %g1, 0 40006248: 12 80 00 16 bne 400062a0 4000624c: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 40006250: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40006254: 80 88 60 30 btst 0x30, %g1 40006258: 12 80 00 16 bne 400062b0 4000625c: 90 02 20 14 add %o0, 0x14, %o0 &the_semaphore->Core_control.mutex, SEND_OBJECT_WAS_DELETED, CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT ); } else { _CORE_semaphore_Flush( 40006260: 92 10 20 00 clr %o1 <== NOT EXECUTED 40006264: 40 00 05 45 call 40007778 <_CORE_semaphore_Flush> <== NOT EXECUTED 40006268: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000626c: 03 10 00 6d sethi %hi(0x4001b400), %g1 40006270: c4 00 62 30 ld [ %g1 + 0x230 ], %g2 ! 4001b630 <_Thread_Dispatch_disable_level> 40006274: b0 10 20 00 clr %i0 40006278: 84 00 bf ff add %g2, -1, %g2 4000627c: c4 20 62 30 st %g2, [ %g1 + 0x230 ] 40006280: c6 00 62 30 ld [ %g1 + 0x230 ], %g3 40006284: 80 a0 e0 00 cmp %g3, 0 40006288: 12 80 00 04 bne 40006298 4000628c: 01 00 00 00 nop _Thread_Dispatch(); 40006290: 40 00 0d 4b call 400097bc <_Thread_Dispatch> 40006294: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006298: 81 c7 e0 08 ret 4000629c: 81 e8 00 00 restore { register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 400062a0: 08 bf ff fe bleu 40006298 <== NOT EXECUTED 400062a4: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 400062a8: 81 c7 e0 08 ret <== NOT EXECUTED 400062ac: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Flush( 400062b0: 92 10 20 00 clr %o1 400062b4: 40 00 04 74 call 40007484 <_CORE_mutex_Flush> 400062b8: 94 10 20 01 mov 1, %o2 400062bc: 30 bf ff ec b,a 4000626c 40005d88 : rtems_status_code rtems_semaphore_obtain( rtems_id id, uint32_t option_set, rtems_interval timeout ) { 40005d88: 9d e3 bf 90 save %sp, -112, %sp Objects_Id id, Objects_Locations *location, ISR_Level *level ) { return (Semaphore_Control *) 40005d8c: 11 10 00 66 sethi %hi(0x40019800), %o0 40005d90: 92 10 00 18 mov %i0, %o1 40005d94: 90 12 21 c4 or %o0, 0x1c4, %o0 40005d98: 94 07 bf f4 add %fp, -12, %o2 40005d9c: 40 00 07 ab call 40007c48 <_Objects_Get_isr_disable> 40005da0: 96 07 bf f0 add %fp, -16, %o3 register Semaphore_Control *the_semaphore; Objects_Locations location; ISR_Level level; the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level ); switch ( location ) { 40005da4: c2 07 bf f4 ld [ %fp + -12 ], %g1 40005da8: 80 a0 60 00 cmp %g1, 0 40005dac: 12 80 00 19 bne 40005e10 40005db0: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 40005db4: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40005db8: 80 88 60 30 btst 0x30, %g1 40005dbc: 12 80 00 1b bne 40005e28 40005dc0: 23 10 00 66 sethi %hi(0x40019800), %l1 Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40005dc4: 27 10 00 66 sethi %hi(0x40019800), %l3 40005dc8: e4 04 e3 ec ld [ %l3 + 0x3ec ], %l2 ! 40019bec <_Thread_Executing> Watchdog_Interval timeout, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 40005dcc: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL; 40005dd0: c0 24 a0 34 clr [ %l2 + 0x34 ] if ( the_semaphore->count != 0 ) { 40005dd4: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 40005dd8: 80 a0 60 00 cmp %g1, 0 40005ddc: 12 80 00 8f bne 40006018 40005de0: 80 8e 60 01 btst 1, %i1 the_semaphore->count -= 1; _ISR_Enable( level ); return; } if ( !wait ) { 40005de4: 02 80 00 73 be 40005fb0 40005de8: 01 00 00 00 nop _ISR_Enable( level ); 40005dec: 7f ff ef ff call 40001de8 40005df0: 01 00 00 00 nop executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT; 40005df4: 82 10 20 01 mov 1, %g1 ! 1 40005df8: c2 24 a0 34 st %g1, [ %l2 + 0x34 ] id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, &level ); return _Semaphore_Translate_core_semaphore_return_code( 40005dfc: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 40005e00: 40 00 00 f4 call 400061d0 <_Semaphore_Translate_core_semaphore_return_code> 40005e04: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40005e08: 81 c7 e0 08 ret 40005e0c: 91 e8 00 08 restore %g0, %o0, %o0 register Semaphore_Control *the_semaphore; Objects_Locations location; ISR_Level level; the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level ); switch ( location ) { 40005e10: 80 a0 60 02 cmp %g1, 2 40005e14: 08 bf ff fd bleu 40005e08 40005e18: 90 10 20 04 mov 4, %o0 40005e1c: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Semaphore_Translate_core_semaphore_return_code( _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40005e20: 81 c7 e0 08 ret <== NOT EXECUTED 40005e24: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 40005e28: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40005e2c: 80 a0 60 00 cmp %g1, 0 40005e30: 02 80 00 0e be 40005e68 40005e34: 27 10 00 66 sethi %hi(0x40019800), %l3 40005e38: 80 8e 60 01 btst 1, %i1 40005e3c: 12 80 00 0c bne 40005e6c 40005e40: c6 04 e3 ec ld [ %l3 + 0x3ec ], %g3 40005e44: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005e48: c4 00 60 f0 ld [ %g1 + 0xf0 ], %g2 ! 40019cf0 <_System_state_Current> 40005e4c: 80 a0 a0 01 cmp %g2, 1 40005e50: 08 80 00 07 bleu 40005e6c 40005e54: 90 10 20 00 clr %o0 40005e58: 92 10 20 00 clr %o1 <== NOT EXECUTED 40005e5c: 40 00 06 1b call 400076c8 <_Internal_error_Occurred> <== NOT EXECUTED 40005e60: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40005e64: 27 10 00 66 sethi %hi(0x40019800), %l3 <== NOT EXECUTED 40005e68: c6 04 e3 ec ld [ %l3 + 0x3ec ], %g3 ! 40019bec <_Thread_Executing> CORE_mutex_Control *the_mutex, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 40005e6c: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40005e70: c0 20 e0 34 clr [ %g3 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40005e74: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 40005e78: 80 a0 60 00 cmp %g1, 0 40005e7c: 22 80 00 37 be,a 40005f58 40005e80: c2 04 20 70 ld [ %l0 + 0x70 ], %g1 the_mutex->lock = CORE_MUTEX_LOCKED; 40005e84: c0 24 20 64 clr [ %l0 + 0x64 ] the_mutex->holder = executing; 40005e88: c6 24 20 70 st %g3, [ %l0 + 0x70 ] the_mutex->holder_id = executing->Object.id; 40005e8c: c2 00 e0 08 ld [ %g3 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40005e90: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40005e94: 88 10 20 01 mov 1, %g4 executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40005e98: c2 24 20 74 st %g1, [ %l0 + 0x74 ] the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40005e9c: 80 a0 a0 02 cmp %g2, 2 40005ea0: 12 80 00 24 bne 40005f30 40005ea4: c8 24 20 68 st %g4, [ %l0 + 0x68 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40005ea8: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 40005eac: 82 00 60 01 inc %g1 40005eb0: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40005eb4: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 40005eb8: 80 a0 a0 03 cmp %g2, 3 40005ebc: 12 80 00 20 bne 40005f3c 40005ec0: 01 00 00 00 nop */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40005ec4: c4 04 20 60 ld [ %l0 + 0x60 ], %g2 <== NOT EXECUTED current = executing->current_priority; 40005ec8: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40005ecc: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40005ed0: 02 80 00 79 be 400060b4 <== NOT EXECUTED 40005ed4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40005ed8: 1a 80 00 6d bcc 4000608c <== NOT EXECUTED 40005edc: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40005ee0: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40005ee4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40005ee8: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40005eec: 7f ff ef bf call 40001de8 <== NOT EXECUTED 40005ef0: 01 00 00 00 nop <== NOT EXECUTED _Thread_Change_priority( 40005ef4: d2 04 20 60 ld [ %l0 + 0x60 ], %o1 <== NOT EXECUTED 40005ef8: d0 04 20 70 ld [ %l0 + 0x70 ], %o0 <== NOT EXECUTED 40005efc: 40 00 0b 75 call 40008cd0 <_Thread_Change_priority> <== NOT EXECUTED 40005f00: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40005f04: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 <== NOT EXECUTED 40005f08: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40005f0c: c2 24 63 10 st %g1, [ %l1 + 0x310 ] <== NOT EXECUTED 40005f10: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 <== NOT EXECUTED 40005f14: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005f18: 32 80 00 0c bne,a 40005f48 <== NOT EXECUTED 40005f1c: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED _Thread_Dispatch(); 40005f20: 40 00 0c 90 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 40005f24: 01 00 00 00 nop <== NOT EXECUTED id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, level ); return _Semaphore_Translate_core_mutex_return_code( 40005f28: 10 80 00 08 b 40005f48 <== NOT EXECUTED 40005f2c: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40005f30: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 40005f34: 22 bf ff de be,a 40005eac <== NOT EXECUTED 40005f38: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 40005f3c: 7f ff ef ab call 40001de8 40005f40: 01 00 00 00 nop 40005f44: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 40005f48: 40 00 00 98 call 400061a8 <_Semaphore_Translate_core_mutex_return_code> 40005f4c: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 return _Semaphore_Translate_core_semaphore_return_code( _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40005f50: 81 c7 e0 08 ret 40005f54: 91 e8 00 08 restore %g0, %o0, %o0 /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40005f58: 80 a0 40 03 cmp %g1, %g3 40005f5c: 12 80 00 0d bne 40005f90 40005f60: 80 8e 60 01 btst 1, %i1 switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40005f64: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 40005f68: 80 a0 60 00 cmp %g1, 0 40005f6c: 12 80 00 40 bne 4000606c 40005f70: 80 a0 60 01 cmp %g1, 1 case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40005f74: c2 04 20 68 ld [ %l0 + 0x68 ], %g1 40005f78: 82 00 60 01 inc %g1 40005f7c: c2 24 20 68 st %g1, [ %l0 + 0x68 ] _ISR_Enable( level ); 40005f80: 7f ff ef 9a call 40001de8 40005f84: 01 00 00 00 nop id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, level ); return _Semaphore_Translate_core_mutex_return_code( 40005f88: 10 bf ff f0 b 40005f48 40005f8c: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 40005f90: 02 80 00 28 be 40006030 40005f94: c6 04 e3 ec ld [ %l3 + 0x3ec ], %g3 40005f98: 7f ff ef 94 call 40001de8 40005f9c: d0 07 bf f0 ld [ %fp + -16 ], %o0 40005fa0: c4 04 e3 ec ld [ %l3 + 0x3ec ], %g2 40005fa4: 82 10 20 01 mov 1, %g1 40005fa8: 10 bf ff e7 b 40005f44 40005fac: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40005fb0: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40005fb4: 82 00 60 01 inc %g1 40005fb8: c2 24 63 10 st %g1, [ %l1 + 0x310 ] RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 40005fbc: 82 10 20 01 mov 1, %g1 40005fc0: c2 24 20 44 st %g1, [ %l0 + 0x44 ] } _Thread_Disable_dispatch(); _Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue ); executing->Wait.queue = &the_semaphore->Wait_queue; executing->Wait.id = id; 40005fc4: f0 24 a0 20 st %i0, [ %l2 + 0x20 ] return; } _Thread_Disable_dispatch(); _Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue ); executing->Wait.queue = &the_semaphore->Wait_queue; 40005fc8: a0 04 20 14 add %l0, 0x14, %l0 40005fcc: e0 24 a0 44 st %l0, [ %l2 + 0x44 ] executing->Wait.id = id; _ISR_Enable( level ); 40005fd0: 7f ff ef 86 call 40001de8 40005fd4: 01 00 00 00 nop _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout ); 40005fd8: 90 10 00 10 mov %l0, %o0 40005fdc: 92 10 00 1a mov %i2, %o1 40005fe0: 15 10 00 27 sethi %hi(0x40009c00), %o2 40005fe4: 40 00 0d cf call 40009720 <_Thread_queue_Enqueue_with_handler> 40005fe8: 94 12 a0 60 or %o2, 0x60, %o2 ! 40009c60 <_Thread_queue_Timeout> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40005fec: c2 04 63 10 ld [ %l1 + 0x310 ], %g1 40005ff0: 82 00 7f ff add %g1, -1, %g1 40005ff4: c2 24 63 10 st %g1, [ %l1 + 0x310 ] 40005ff8: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 40005ffc: 80 a0 a0 00 cmp %g2, 0 40006000: 32 bf ff 80 bne,a 40005e00 40006004: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED _Thread_Dispatch(); 40006008: 40 00 0c 56 call 40009160 <_Thread_Dispatch> 4000600c: 01 00 00 00 nop id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, &level ); return _Semaphore_Translate_core_semaphore_return_code( 40006010: 10 bf ff 7c b 40005e00 40006014: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL; if ( the_semaphore->count != 0 ) { the_semaphore->count -= 1; 40006018: 82 00 7f ff add %g1, -1, %g1 4000601c: c2 24 20 5c st %g1, [ %l0 + 0x5c ] _ISR_Enable( level ); 40006020: 7f ff ef 72 call 40001de8 40006024: 01 00 00 00 nop 40006028: 10 bf ff 76 b 40005e00 4000602c: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006030: c4 04 63 10 ld [ %l1 + 0x310 ], %g2 40006034: 82 10 20 01 mov 1, %g1 40006038: c2 24 20 44 st %g1, [ %l0 + 0x44 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 4000603c: f0 20 e0 20 st %i0, [ %g3 + 0x20 ] 40006040: 84 00 a0 01 inc %g2 40006044: a0 04 20 14 add %l0, 0x14, %l0 40006048: c4 24 63 10 st %g2, [ %l1 + 0x310 ] 4000604c: e0 20 e0 44 st %l0, [ %g3 + 0x44 ] 40006050: 7f ff ef 66 call 40001de8 40006054: d0 07 bf f0 ld [ %fp + -16 ], %o0 40006058: 90 10 00 10 mov %l0, %o0 4000605c: 40 00 03 74 call 40006e2c <_CORE_mutex_Seize_interrupt_blocking> 40006060: 92 10 00 1a mov %i2, %o1 id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, level ); return _Semaphore_Translate_core_mutex_return_code( 40006064: 10 bf ff b9 b 40005f48 40006068: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4000606c: 12 bf ff c9 bne 40005f90 40006070: 80 8e 60 01 btst 1, %i1 case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40006074: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 40006078: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4000607c: 7f ff ef 5b call 40001de8 <== NOT EXECUTED 40006080: 01 00 00 00 nop <== NOT EXECUTED 40006084: 10 bf ff b1 b 40005f48 <== NOT EXECUTED 40006088: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 4000608c: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40006090: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40006094: c0 24 20 68 clr [ %l0 + 0x68 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40006098: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 4000609c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400060a0: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400060a4: 7f ff ef 51 call 40001de8 <== NOT EXECUTED 400060a8: 01 00 00 00 nop <== NOT EXECUTED 400060ac: 10 bf ff a7 b 40005f48 <== NOT EXECUTED 400060b0: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 400060b4: 7f ff ef 4d call 40001de8 <== NOT EXECUTED 400060b8: 01 00 00 00 nop <== NOT EXECUTED 400060bc: 10 bf ff a3 b 40005f48 <== NOT EXECUTED 400060c0: c2 04 e3 ec ld [ %l3 + 0x3ec ], %g1 <== NOT EXECUTED 400060c4 : #endif rtems_status_code rtems_semaphore_release( rtems_id id ) { 400060c4: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 400060c8: 11 10 00 66 sethi %hi(0x40019800), %o0 400060cc: 92 10 00 18 mov %i0, %o1 400060d0: 90 12 21 c4 or %o0, 0x1c4, %o0 400060d4: 40 00 06 fb call 40007cc0 <_Objects_Get> 400060d8: 94 07 bf f4 add %fp, -12, %o2 Objects_Locations location; CORE_mutex_Status mutex_status; CORE_semaphore_Status semaphore_status; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 400060dc: c2 07 bf f4 ld [ %fp + -12 ], %g1 400060e0: 80 a0 60 00 cmp %g1, 0 400060e4: 12 80 00 16 bne 4000613c 400060e8: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 400060ec: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 400060f0: 80 88 60 30 btst 0x30, %g1 400060f4: 02 80 00 17 be 40006150 400060f8: 92 10 00 18 mov %i0, %o1 mutex_status = _CORE_mutex_Surrender( 400060fc: 94 10 20 00 clr %o2 40006100: 40 00 03 6f call 40006ebc <_CORE_mutex_Surrender> 40006104: 90 02 20 14 add %o0, 0x14, %o0 40006108: b0 10 00 08 mov %o0, %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000610c: 03 10 00 66 sethi %hi(0x40019800), %g1 40006110: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 40006114: 84 00 bf ff add %g2, -1, %g2 40006118: c4 20 63 10 st %g2, [ %g1 + 0x310 ] 4000611c: c6 00 63 10 ld [ %g1 + 0x310 ], %g3 40006120: 80 a0 e0 00 cmp %g3, 0 40006124: 02 80 00 1e be 4000619c 40006128: 01 00 00 00 nop &the_semaphore->Core_control.mutex, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return _Semaphore_Translate_core_mutex_return_code( mutex_status ); 4000612c: 40 00 00 1f call 400061a8 <_Semaphore_Translate_core_mutex_return_code> 40006130: 90 10 00 18 mov %i0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006134: 81 c7 e0 08 ret 40006138: 91 e8 00 08 restore %g0, %o0, %o0 Objects_Locations location; CORE_mutex_Status mutex_status; CORE_semaphore_Status semaphore_status; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 4000613c: 08 bf ff fe bleu 40006134 40006140: 90 10 20 04 mov 4, %o0 40006144: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006148: 81 c7 e0 08 ret <== NOT EXECUTED 4000614c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return _Semaphore_Translate_core_mutex_return_code( mutex_status ); } else { semaphore_status = _CORE_semaphore_Surrender( 40006150: 94 10 20 00 clr %o2 40006154: 40 00 03 c9 call 40007078 <_CORE_semaphore_Surrender> 40006158: 90 02 20 14 add %o0, 0x14, %o0 4000615c: b0 10 00 08 mov %o0, %i0 40006160: 03 10 00 66 sethi %hi(0x40019800), %g1 40006164: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 40019b10 <_Thread_Dispatch_disable_level> 40006168: 84 00 bf ff add %g2, -1, %g2 4000616c: c4 20 63 10 st %g2, [ %g1 + 0x310 ] 40006170: c6 00 63 10 ld [ %g1 + 0x310 ], %g3 40006174: 80 a0 e0 00 cmp %g3, 0 40006178: 02 80 00 06 be 40006190 4000617c: 01 00 00 00 nop &the_semaphore->Core_control.semaphore, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return 40006180: 40 00 00 14 call 400061d0 <_Semaphore_Translate_core_semaphore_return_code> 40006184: 90 10 00 18 mov %i0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006188: 81 c7 e0 08 ret 4000618c: 91 e8 00 08 restore %g0, %o0, %o0 _Thread_Dispatch(); 40006190: 40 00 0b f4 call 40009160 <_Thread_Dispatch> 40006194: 01 00 00 00 nop 40006198: 30 bf ff fa b,a 40006180 4000619c: 40 00 0b f1 call 40009160 <_Thread_Dispatch> 400061a0: 01 00 00 00 nop 400061a4: 30 bf ff e2 b,a 4000612c 4001783c : */ void rtems_shutdown_executive( uint32_t result ) { 4001783c: 9d e3 bf 98 save %sp, -104, %sp if ( _System_state_Current != SYSTEM_STATE_SHUTDOWN ) { 40017840: 33 10 00 67 sethi %hi(0x40019c00), %i1 40017844: c2 06 60 f0 ld [ %i1 + 0xf0 ], %g1 ! 40019cf0 <_System_state_Current> 40017848: 80 a0 60 04 cmp %g1, 4 4001784c: 02 80 00 0c be 4001787c 40017850: 11 10 00 62 sethi %hi(0x40018800), %o0 #if defined(__USE_INIT_FINI__) extern void _fini( void ); atexit( _fini ); 40017854: 7f ff da 31 call 4000e118 40017858: 90 12 22 ec or %o0, 0x2ec, %o0 ! 40018aec <_fini> * routine which initialized the system. */ RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) { _Context_Switch( &_Thread_Executing->Registers, &_Thread_BSP_context ); 4001785c: 03 10 00 66 sethi %hi(0x40019800), %g1 40017860: f0 00 63 ec ld [ %g1 + 0x3ec ], %i0 ! 40019bec <_Thread_Executing> 40017864: 84 10 20 04 mov 4, %g2 40017868: b0 06 20 e0 add %i0, 0xe0, %i0 4001786c: c4 26 60 f0 st %g2, [ %i1 + 0xf0 ] 40017870: 33 10 00 66 sethi %hi(0x40019800), %i1 40017874: 7f ff cc 62 call 4000a9fc <_CPU_Context_switch> 40017878: 93 ee 62 88 restore %i1, 0x288, %o1 4001787c: 81 c7 e0 08 ret <== NOT EXECUTED 40017880: 81 e8 00 00 restore <== NOT EXECUTED 40011c10 : rtems_status_code rtems_signal_send( Objects_Id id, rtems_signal_set signal_set ) { 40011c10: 9d e3 bf 90 save %sp, -112, %sp 40011c14: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; ASR_Information *asr; if ( !signal_set ) 40011c18: 80 a6 60 00 cmp %i1, 0 40011c1c: 02 80 00 1b be 40011c88 40011c20: b0 10 20 0a mov 0xa, %i0 uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40011c24: 80 a2 60 00 cmp %o1, 0 40011c28: 12 80 00 1a bne 40011c90 40011c2c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011c30: 23 10 00 cd sethi %hi(0x40033400), %l1 40011c34: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 40011c38: 82 00 60 01 inc %g1 40011c3c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40011c40: 03 10 00 cd sethi %hi(0x40033400), %g1 40011c44: e0 00 61 bc ld [ %g1 + 0x1bc ], %l0 ! 400335bc <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40011c48: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; 40011c4c: f0 04 21 6c ld [ %l0 + 0x16c ], %i0 asr = &api->Signal; if ( ! _ASR_Is_null_handler( asr->handler ) ) { 40011c50: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 40011c54: 80 a0 60 00 cmp %g1, 0 40011c58: 32 80 00 2c bne,a 40011d08 40011c5c: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011c60: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40011c64: b0 10 20 0b mov 0xb, %i0 40011c68: 82 00 7f ff add %g1, -1, %g1 40011c6c: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] 40011c70: c4 04 60 e0 ld [ %l1 + 0xe0 ], %g2 40011c74: 80 a0 a0 00 cmp %g2, 0 40011c78: 12 80 00 0b bne 40011ca4 40011c7c: 01 00 00 00 nop _Thread_Dispatch(); 40011c80: 40 00 13 4a call 400169a8 <_Thread_Dispatch> 40011c84: 01 00 00 00 nop 40011c88: 81 c7 e0 08 ret 40011c8c: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40011c90: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40011c94: 80 a0 a0 04 cmp %g2, 4 40011c98: 08 80 00 05 bleu 40011cac 40011c9c: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40011ca0: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_NOT_DEFINED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40011ca4: 81 c7 e0 08 ret 40011ca8: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40011cac: 80 a0 60 01 cmp %g1, 1 40011cb0: 12 bf ff f6 bne 40011c88 40011cb4: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40011cb8: 83 28 a0 02 sll %g2, 2, %g1 40011cbc: 05 10 00 cd sethi %hi(0x40033400), %g2 40011cc0: 84 10 a0 40 or %g2, 0x40, %g2 ! 40033440 <_Objects_Information_table> 40011cc4: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40011cc8: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40011ccc: 80 a2 20 00 cmp %o0, 0 40011cd0: 02 bf ff f5 be 40011ca4 40011cd4: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40011cd8: 40 00 0e 0c call 40015508 <_Objects_Get> 40011cdc: 94 07 bf f4 add %fp, -12, %o2 if ( !signal_set ) return RTEMS_INVALID_NUMBER; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40011ce0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40011ce4: a0 10 00 08 mov %o0, %l0 40011ce8: 80 a0 60 00 cmp %g1, 0 40011cec: 02 bf ff d8 be 40011c4c 40011cf0: 23 10 00 cd sethi %hi(0x40033400), %l1 40011cf4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40011cf8: 18 bf ff e4 bgu 40011c88 <== NOT EXECUTED 40011cfc: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40011d00: 81 c7 e0 08 ret <== NOT EXECUTED 40011d04: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; if ( ! _ASR_Is_null_handler( asr->handler ) ) { if ( asr->is_enabled ) { 40011d08: 80 a0 60 00 cmp %g1, 0 40011d0c: 02 80 00 19 be 40011d70 40011d10: 01 00 00 00 nop rtems_signal_set *signal_set ) { ISR_Level _level; _ISR_Disable( _level ); 40011d14: 7f ff e3 79 call 4000aaf8 40011d18: 01 00 00 00 nop *signal_set |= signals; 40011d1c: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 40011d20: 82 10 40 19 or %g1, %i1, %g1 40011d24: c2 26 20 54 st %g1, [ %i0 + 0x54 ] _ISR_Enable( _level ); 40011d28: 7f ff e3 78 call 4000ab08 40011d2c: 01 00 00 00 nop _ASR_Post_signals( signal_set, &asr->signals_posted ); the_thread->do_post_task_switch_extension = TRUE; if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 40011d30: 03 10 00 cd sethi %hi(0x40033400), %g1 40011d34: c4 00 61 a4 ld [ %g1 + 0x1a4 ], %g2 ! 400335a4 <_ISR_Nest_level> if ( ! _ASR_Is_null_handler( asr->handler ) ) { if ( asr->is_enabled ) { _ASR_Post_signals( signal_set, &asr->signals_posted ); the_thread->do_post_task_switch_extension = TRUE; 40011d38: 86 10 20 01 mov 1, %g3 if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 40011d3c: 80 a0 a0 00 cmp %g2, 0 40011d40: 02 80 00 09 be 40011d64 40011d44: c6 24 20 78 st %g3, [ %l0 + 0x78 ] 40011d48: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40011d4c: c4 00 61 bc ld [ %g1 + 0x1bc ], %g2 ! 400335bc <_Thread_Executing> <== NOT EXECUTED 40011d50: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 40011d54: 12 80 00 04 bne 40011d64 <== NOT EXECUTED 40011d58: 01 00 00 00 nop <== NOT EXECUTED _ISR_Signals_to_thread_executing = TRUE; 40011d5c: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40011d60: c6 20 62 68 st %g3, [ %g1 + 0x268 ] ! 40033668 <_ISR_Signals_to_thread_executing> <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011d64: c2 04 60 e0 ld [ %l1 + 0xe0 ], %g1 40011d68: 10 bf ff c0 b 40011c68 40011d6c: b0 10 20 00 clr %i0 rtems_signal_set *signal_set ) { ISR_Level _level; _ISR_Disable( _level ); 40011d70: 7f ff e3 62 call 4000aaf8 40011d74: 01 00 00 00 nop *signal_set |= signals; 40011d78: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 40011d7c: 82 10 40 19 or %g1, %i1, %g1 40011d80: c2 26 20 58 st %g1, [ %i0 + 0x58 ] _ISR_Enable( _level ); 40011d84: 7f ff e3 61 call 4000ab08 40011d88: 01 00 00 00 nop 40011d8c: 30 bf ff f6 b,a 40011d64 4000294c : /* * Check if blown */ boolean rtems_stack_checker_is_blown( void ) { 4000294c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack; 40002950: 21 10 00 76 sethi %hi(0x4001d800), %l0 <== NOT EXECUTED 40002954: c2 04 23 cc ld [ %l0 + 0x3cc ], %g1 ! 4001dbcc <_Thread_Executing> <== NOT EXECUTED ) { void *sp = __builtin_frame_address(0); #if defined(__GNUC__) if ( sp < the_stack->area ) { 40002958: d0 00 60 d4 ld [ %g1 + 0xd4 ], %o0 <== NOT EXECUTED 4000295c: 80 a7 80 08 cmp %fp, %o0 <== NOT EXECUTED 40002960: 0a 80 00 07 bcs 4000297c <== NOT EXECUTED 40002964: b0 10 20 00 clr %i0 <== NOT EXECUTED 40002968: c2 00 60 d0 ld [ %g1 + 0xd0 ], %g1 <== NOT EXECUTED 4000296c: 82 02 00 01 add %o0, %g1, %g1 <== NOT EXECUTED 40002970: 80 a0 40 1e cmp %g1, %fp <== NOT EXECUTED 40002974: 84 60 3f ff subx %g0, -1, %g2 <== NOT EXECUTED 40002978: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED /* * The stack checker must be initialized before the pattern is there * to check. */ if ( Stack_check_Initialized ) { 4000297c: 03 10 00 75 sethi %hi(0x4001d400), %g1 <== NOT EXECUTED 40002980: c4 00 63 78 ld [ %g1 + 0x378 ], %g2 ! 4001d778 <== NOT EXECUTED 40002984: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40002988: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000298c: 12 80 00 0d bne 400029c0 <== NOT EXECUTED 40002990: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED } /* * The Stack Pointer and the Pattern Area are OK so return FALSE. */ if ( sp_ok && pattern_ok ) 40002994: 80 8e 20 ff btst 0xff, %i0 <== NOT EXECUTED 40002998: 22 80 00 06 be,a 400029b0 <== NOT EXECUTED 4000299c: d0 04 23 cc ld [ %l0 + 0x3cc ], %o0 <== NOT EXECUTED 400029a0: 80 88 60 ff btst 0xff, %g1 <== NOT EXECUTED 400029a4: 12 80 00 05 bne 400029b8 <== NOT EXECUTED 400029a8: b0 10 20 00 clr %i0 <== NOT EXECUTED return FALSE; /* * Let's report as much as we can. */ Stack_check_report_blown_task( _Thread_Executing, pattern_ok ); 400029ac: d0 04 23 cc ld [ %l0 + 0x3cc ], %o0 <== NOT EXECUTED 400029b0: 7f ff ff cd call 400028e4 <== NOT EXECUTED 400029b4: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return TRUE; } 400029b8: 81 c7 e0 08 ret <== NOT EXECUTED 400029bc: 81 e8 00 00 restore <== NOT EXECUTED /* * The stack checker must be initialized before the pattern is there * to check. */ if ( Stack_check_Initialized ) { pattern_ok = (!memcmp( 400029c0: 90 02 20 08 add %o0, 8, %o0 <== NOT EXECUTED 400029c4: 13 10 00 76 sethi %hi(0x4001d800), %o1 <== NOT EXECUTED 400029c8: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 400029cc: 40 00 35 6c call 4000ff7c <== NOT EXECUTED 400029d0: 92 12 61 00 or %o1, 0x100, %o1 <== NOT EXECUTED 400029d4: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 400029d8: 92 60 3f ff subx %g0, -1, %o1 <== NOT EXECUTED 400029dc: 10 bf ff ee b 40002994 <== NOT EXECUTED 400029e0: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 400028c8 : } void rtems_stack_checker_report_usage( void ) { rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin ); 400028c8: 13 10 00 10 sethi %hi(0x40004000), %o1 <== NOT EXECUTED 400028cc: 90 10 20 00 clr %o0 <== NOT EXECUTED 400028d0: 92 12 62 40 or %o1, 0x240, %o1 <== NOT EXECUTED 400028d4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400028d8: 7f ff ff e2 call 40002860 <== NOT EXECUTED 400028dc: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400028e0: 01 00 00 00 nop 40002860 : void rtems_stack_checker_report_usage_with_plugin( void *context, rtems_printk_plugin_t print ) { 40002860: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (Stack_check_Initialized == 0) 40002864: 03 10 00 75 sethi %hi(0x4001d400), %g1 <== NOT EXECUTED 40002868: c4 00 63 78 ld [ %g1 + 0x378 ], %g2 ! 4001d778 <== NOT EXECUTED 4000286c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40002870: 02 80 00 14 be 400028c0 <== NOT EXECUTED 40002874: 23 10 00 75 sethi %hi(0x4001d400), %l1 <== NOT EXECUTED return; print_context = context; print_handler = print; 40002878: 21 10 00 75 sethi %hi(0x4001d400), %l0 <== NOT EXECUTED ) { if (Stack_check_Initialized == 0) return; print_context = context; 4000287c: f0 24 63 7c st %i0, [ %l1 + 0x37c ] <== NOT EXECUTED print_handler = print; 40002880: f2 24 23 80 st %i1, [ %l0 + 0x380 ] <== NOT EXECUTED (*print)( context, "Stack usage by thread\n"); 40002884: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002888: 13 10 00 6c sethi %hi(0x4001b000), %o1 <== NOT EXECUTED 4000288c: 9f c6 40 00 call %i1 <== NOT EXECUTED 40002890: 92 12 60 a8 or %o1, 0xa8, %o1 ! 4001b0a8 <== NOT EXECUTED (*print)( context, 40002894: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002898: 13 10 00 6c sethi %hi(0x4001b000), %o1 <== NOT EXECUTED 4000289c: 9f c6 40 00 call %i1 <== NOT EXECUTED 400028a0: 92 12 60 c0 or %o1, 0xc0, %o1 ! 4001b0c0 <== NOT EXECUTED " ID NAME LOW HIGH AVAILABLE USED\n" ); /* iterate over all threads and dump the usage */ rtems_iterate_over_all_threads( Stack_check_Dump_threads_usage ); 400028a4: 11 10 00 09 sethi %hi(0x40002400), %o0 <== NOT EXECUTED 400028a8: 40 00 18 97 call 40008b04 <== NOT EXECUTED 400028ac: 90 12 23 50 or %o0, 0x350, %o0 ! 40002750 <== NOT EXECUTED /* dump interrupt stack info if any */ Stack_check_Dump_threads_usage((Thread_Control *) -1); 400028b0: 7f ff ff a8 call 40002750 <== NOT EXECUTED 400028b4: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED print_context = NULL; 400028b8: c0 24 63 7c clr [ %l1 + 0x37c ] <== NOT EXECUTED print_handler = NULL; 400028bc: c0 24 23 80 clr [ %l0 + 0x380 ] <== NOT EXECUTED 400028c0: 81 c7 e0 08 ret <== NOT EXECUTED 400028c4: 81 e8 00 00 restore <== NOT EXECUTED 40002ab4 : */ void rtems_stack_checker_switch_extension( Thread_Control *running, Thread_Control *heir ) { 40002ab4: 9d e3 bf 98 save %sp, -104, %sp Stack_Control *the_stack = &running->Start.Initial_stack; void *pattern; boolean sp_ok; boolean pattern_ok = TRUE; pattern = (void *) Stack_check_Get_pattern_area(the_stack)->pattern; 40002ab8: c4 06 20 d4 ld [ %i0 + 0xd4 ], %g2 ) { void *sp = __builtin_frame_address(0); #if defined(__GNUC__) if ( sp < the_stack->area ) { 40002abc: 80 a7 80 02 cmp %fp, %g2 40002ac0: 0a 80 00 07 bcs 40002adc 40002ac4: 90 00 a0 08 add %g2, 8, %o0 return FALSE; } if ( sp > (the_stack->area + the_stack->size) ) { 40002ac8: c2 06 20 d0 ld [ %i0 + 0xd0 ], %g1 40002acc: 82 00 80 01 add %g2, %g1, %g1 40002ad0: 80 a7 80 01 cmp %fp, %g1 40002ad4: 28 80 00 0a bleu,a 40002afc 40002ad8: 13 10 00 76 sethi %hi(0x4001d800), %o1 /* * Check for an out of bounds stack pointer or an overwrite */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); pattern_ok = (!memcmp( pattern, 40002adc: 13 10 00 76 sethi %hi(0x4001d800), %o1 <== NOT EXECUTED 40002ae0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40002ae4: 40 00 35 26 call 4000ff7c <== NOT EXECUTED 40002ae8: 92 12 61 00 or %o1, 0x100, %o1 <== NOT EXECUTED 40002aec: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40002af0: b2 60 3f ff subx %g0, -1, %i1 <== NOT EXECUTED (void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES)); if ( !sp_ok || !pattern_ok ) { Stack_check_report_blown_task( running, pattern_ok ); 40002af4: 7f ff ff 7c call 400028e4 <== NOT EXECUTED 40002af8: 81 e8 00 00 restore <== NOT EXECUTED /* * Check for an out of bounds stack pointer or an overwrite */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); pattern_ok = (!memcmp( pattern, 40002afc: 94 10 20 10 mov 0x10, %o2 40002b00: 40 00 35 1f call 4000ff7c 40002b04: 92 12 61 00 or %o1, 0x100, %o1 40002b08: 80 a2 20 00 cmp %o0, 0 40002b0c: 02 80 00 04 be 40002b1c 40002b10: 01 00 00 00 nop (void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES)); if ( !sp_ok || !pattern_ok ) { Stack_check_report_blown_task( running, pattern_ok ); 40002b14: 7f ff ff 74 call 400028e4 <== NOT EXECUTED 40002b18: 93 e8 20 00 restore %g0, 0, %o1 <== NOT EXECUTED 40002b1c: 81 c7 e0 08 ret 40002b20: 81 e8 00 00 restore 400089c0 : const char * rtems_status_text( rtems_status_code status ) { 400089c0: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED return rtems_assoc_name_by_local(rtems_status_assoc, status); 400089c4: 11 10 00 a4 sethi %hi(0x40029000), %o0 <== NOT EXECUTED 400089c8: 90 12 22 24 or %o0, 0x224, %o0 ! 40029224 <== NOT EXECUTED 400089cc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400089d0: 40 00 30 e9 call 40014d74 <== NOT EXECUTED 400089d4: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400089d8: 01 00 00 00 nop 40006364 : */ rtems_status_code rtems_task_delete( Objects_Id id ) { 40006364: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40006368: 92 96 20 00 orcc %i0, 0, %o1 4000636c: 12 80 00 20 bne 400063ec 40006370: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006374: 21 10 00 66 sethi %hi(0x40019800), %l0 40006378: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 4000637c: 82 00 60 01 inc %g1 40006380: c2 24 23 10 st %g1, [ %l0 + 0x310 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40006384: 03 10 00 66 sethi %hi(0x40019800), %g1 40006388: f0 00 63 ec ld [ %g1 + 0x3ec ], %i0 ! 40019bec <_Thread_Executing> 4000638c: 07 10 00 66 sethi %hi(0x40019800), %g3 Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40006390: c0 27 bf f4 clr [ %fp + -12 ] 40006394: a2 10 e2 70 or %g3, 0x270, %l1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_information = _Objects_Get_information( the_thread->Object.id ); 40006398: c2 06 20 08 ld [ %i0 + 8 ], %g1 4000639c: 85 30 60 16 srl %g1, 0x16, %g2 400063a0: 84 08 a0 1c and %g2, 0x1c, %g2 400063a4: c6 04 40 02 ld [ %l1 + %g2 ], %g3 400063a8: 83 30 60 1b srl %g1, 0x1b, %g1 400063ac: 83 28 60 02 sll %g1, 2, %g1 400063b0: d0 00 c0 01 ld [ %g3 + %g1 ], %o0 if ( !the_information ) { 400063b4: 80 a2 20 00 cmp %o0, 0 400063b8: 12 80 00 13 bne 40006404 400063bc: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400063c0: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 <== NOT EXECUTED 400063c4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400063c8: c2 24 23 10 st %g1, [ %l0 + 0x310 ] <== NOT EXECUTED 400063cc: c4 04 23 10 ld [ %l0 + 0x310 ], %g2 <== NOT EXECUTED 400063d0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400063d4: 12 80 00 04 bne 400063e4 <== NOT EXECUTED 400063d8: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Dispatch(); 400063dc: 40 00 0b 61 call 40009160 <_Thread_Dispatch> <== NOT EXECUTED 400063e0: 01 00 00 00 nop <== NOT EXECUTED 400063e4: 81 c7 e0 08 ret 400063e8: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 400063ec: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 400063f0: 80 a0 a0 04 cmp %g2, 4 400063f4: 08 80 00 1b bleu 40006460 400063f8: 83 32 60 1b srl %o1, 0x1b, %g1 _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400063fc: 81 c7 e0 08 ret <== NOT EXECUTED 40006400: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INVALID_ID; /* This should never happen if _Thread_Get() works right */ } _Thread_Close( the_information, the_thread ); 40006404: 40 00 0a d9 call 40008f68 <_Thread_Close> 40006408: 92 10 00 18 mov %i0, %o1 4000640c: c4 06 20 08 ld [ %i0 + 8 ], %g2 40006410: 92 10 00 18 mov %i0, %o1 if ( !_Objects_Is_class_valid( the_class ) ) return NULL; the_api = _Objects_Get_API( id ); return _Objects_Information_table[ the_api ][ the_class ]; 40006414: 83 30 a0 16 srl %g2, 0x16, %g1 40006418: 82 08 60 1c and %g1, 0x1c, %g1 4000641c: c6 04 40 01 ld [ %l1 + %g1 ], %g3 40006420: 85 30 a0 1b srl %g2, 0x1b, %g2 40006424: 85 28 a0 02 sll %g2, 2, %g2 40006428: 40 00 05 e3 call 40007bb4 <_Objects_Free> 4000642c: d0 00 c0 02 ld [ %g3 + %g2 ], %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006430: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 40006434: b0 10 20 00 clr %i0 40006438: 82 00 7f ff add %g1, -1, %g1 4000643c: c2 24 23 10 st %g1, [ %l0 + 0x310 ] 40006440: c4 04 23 10 ld [ %l0 + 0x310 ], %g2 40006444: 80 a0 a0 00 cmp %g2, 0 40006448: 12 80 00 04 bne 40006458 4000644c: 01 00 00 00 nop _Thread_Dispatch(); 40006450: 40 00 0b 44 call 40009160 <_Thread_Dispatch> 40006454: 01 00 00 00 nop 40006458: 81 c7 e0 08 ret 4000645c: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40006460: 80 a0 60 01 cmp %g1, 1 40006464: 12 bf ff e0 bne 400063e4 40006468: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000646c: 85 28 a0 02 sll %g2, 2, %g2 40006470: 07 10 00 66 sethi %hi(0x40019800), %g3 40006474: a2 10 e2 70 or %g3, 0x270, %l1 ! 40019a70 <_Objects_Information_table> 40006478: c2 04 40 02 ld [ %l1 + %g2 ], %g1 4000647c: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40006480: 80 a2 20 00 cmp %o0, 0 40006484: 02 bf ff f5 be 40006458 40006488: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000648c: 40 00 06 0d call 40007cc0 <_Objects_Get> 40006490: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; Objects_Information *the_information; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40006494: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006498: b0 10 00 08 mov %o0, %i0 4000649c: 80 a0 60 00 cmp %g1, 0 400064a0: 02 bf ff be be 40006398 400064a4: 21 10 00 66 sethi %hi(0x40019800), %l0 400064a8: 80 a0 60 02 cmp %g1, 2 400064ac: 18 bf ff ce bgu 400063e4 400064b0: b0 10 20 19 mov 0x19, %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400064b4: 81 c7 e0 08 ret 400064b8: 91 e8 20 04 restore %g0, 4, %o0 40007c70 : rtems_status_code rtems_task_get_note( Objects_Id id, uint32_t notepad, uint32_t *note ) { 40007c70: 9d e3 bf 90 save %sp, -112, %sp 40007c74: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; if ( !note ) 40007c78: 80 a6 a0 00 cmp %i2, 0 40007c7c: 02 80 00 3b be 40007d68 40007c80: b0 10 20 09 mov 9, %i0 /* * NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would * be checking an unsigned number for being negative. */ if ( notepad > RTEMS_NOTEPAD_LAST ) 40007c84: 80 a6 60 0f cmp %i1, 0xf 40007c88: 18 80 00 38 bgu 40007d68 40007c8c: b0 10 20 0a mov 0xa, %i0 /* * Optimize the most likely case to avoid the Thread_Dispatch. */ if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 40007c90: 80 a2 60 00 cmp %o1, 0 40007c94: 12 80 00 09 bne 40007cb8 40007c98: 07 10 00 7b sethi %hi(0x4001ec00), %g3 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; *note = api->Notepads[ notepad ]; 40007c9c: c2 00 e1 ec ld [ %g3 + 0x1ec ], %g1 ! 4001edec <_Thread_Executing> 40007ca0: 87 2e 60 02 sll %i1, 2, %g3 40007ca4: c4 00 61 6c ld [ %g1 + 0x16c ], %g2 40007ca8: c2 00 80 03 ld [ %g2 + %g3 ], %g1 40007cac: c2 26 80 00 st %g1, [ %i2 ] 40007cb0: 81 c7 e0 08 ret 40007cb4: 91 e8 20 00 restore %g0, 0, %o0 /* * Optimize the most likely case to avoid the Thread_Dispatch. */ if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 40007cb8: c2 00 e1 ec ld [ %g3 + 0x1ec ], %g1 40007cbc: c4 00 60 08 ld [ %g1 + 8 ], %g2 40007cc0: 80 a2 40 02 cmp %o1, %g2 40007cc4: 22 bf ff f8 be,a 40007ca4 40007cc8: 87 2e 60 02 sll %i1, 2, %g3 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40007ccc: 83 32 60 18 srl %o1, 0x18, %g1 40007cd0: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40007cd4: 80 a0 a0 04 cmp %g2, 4 40007cd8: 08 80 00 04 bleu 40007ce8 40007cdc: 83 32 60 1b srl %o1, 0x1b, %g1 _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007ce0: 81 c7 e0 08 ret <== NOT EXECUTED 40007ce4: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007ce8: 80 a0 60 01 cmp %g1, 1 40007cec: 12 80 00 1f bne 40007d68 40007cf0: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007cf4: 83 28 a0 02 sll %g2, 2, %g1 40007cf8: 05 10 00 7b sethi %hi(0x4001ec00), %g2 40007cfc: 84 10 a0 70 or %g2, 0x70, %g2 ! 4001ec70 <_Objects_Information_table> 40007d00: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40007d04: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40007d08: 80 a2 20 00 cmp %o0, 0 40007d0c: 02 80 00 17 be 40007d68 40007d10: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007d14: 40 00 07 53 call 40009a60 <_Objects_Get> 40007d18: 94 07 bf f4 add %fp, -12, %o2 *note = api->Notepads[ notepad ]; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007d1c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007d20: 80 a0 60 00 cmp %g1, 0 40007d24: 12 80 00 13 bne 40007d70 40007d28: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; *note = api->Notepads[ notepad ]; 40007d2c: c6 02 21 6c ld [ %o0 + 0x16c ], %g3 40007d30: 83 2e 60 02 sll %i1, 2, %g1 40007d34: c4 00 c0 01 ld [ %g3 + %g1 ], %g2 40007d38: c4 26 80 00 st %g2, [ %i2 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007d3c: 07 10 00 7b sethi %hi(0x4001ec00), %g3 40007d40: c2 00 e1 10 ld [ %g3 + 0x110 ], %g1 ! 4001ed10 <_Thread_Dispatch_disable_level> 40007d44: b0 10 20 00 clr %i0 40007d48: 82 00 7f ff add %g1, -1, %g1 40007d4c: c2 20 e1 10 st %g1, [ %g3 + 0x110 ] 40007d50: c4 00 e1 10 ld [ %g3 + 0x110 ], %g2 40007d54: 80 a0 a0 00 cmp %g2, 0 40007d58: 12 80 00 04 bne 40007d68 40007d5c: 01 00 00 00 nop _Thread_Dispatch(); 40007d60: 40 00 0c 2c call 4000ae10 <_Thread_Dispatch> 40007d64: 01 00 00 00 nop 40007d68: 81 c7 e0 08 ret 40007d6c: 81 e8 00 00 restore *note = api->Notepads[ notepad ]; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007d70: 18 bf ff fe bgu 40007d68 <== NOT EXECUTED 40007d74: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40007d78: 81 c7 e0 08 ret <== NOT EXECUTED 40007d7c: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 40006b4c : */ rtems_status_code rtems_task_is_suspended( Objects_Id id ) { 40006b4c: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40006b50: 92 96 20 00 orcc %i0, 0, %o1 40006b54: 12 80 00 19 bne 40006bb8 40006b58: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006b5c: 05 10 00 72 sethi %hi(0x4001c800), %g2 <== NOT EXECUTED 40006b60: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 4001cbb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40006b64: 82 00 60 01 inc %g1 <== NOT EXECUTED 40006b68: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40006b6c: 03 10 00 73 sethi %hi(0x4001cc00), %g1 <== NOT EXECUTED 40006b70: d0 00 60 8c ld [ %g1 + 0x8c ], %o0 ! 4001cc8c <_Thread_Executing> <== NOT EXECUTED Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40006b74: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { 40006b78: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40006b7c: 80 88 60 02 btst 2, %g1 40006b80: 02 80 00 15 be 40006bd4 40006b84: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006b88: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 40006b8c: b0 10 20 0f mov 0xf, %i0 40006b90: 82 00 7f ff add %g1, -1, %g1 40006b94: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 40006b98: c4 00 a3 b0 ld [ %g2 + 0x3b0 ], %g2 40006b9c: 80 a0 a0 00 cmp %g2, 0 40006ba0: 12 80 00 0b bne 40006bcc 40006ba4: 01 00 00 00 nop _Thread_Dispatch(); 40006ba8: 40 00 0b 4e call 400098e0 <_Thread_Dispatch> 40006bac: 01 00 00 00 nop 40006bb0: 81 c7 e0 08 ret 40006bb4: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40006bb8: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40006bbc: 80 a0 a0 04 cmp %g2, 4 40006bc0: 08 80 00 08 bleu 40006be0 40006bc4: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40006bc8: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006bcc: 81 c7 e0 08 ret <== NOT EXECUTED 40006bd0: 81 e8 00 00 restore <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006bd4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 40006bd8: 10 bf ff ee b 40006b90 40006bdc: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40006be0: 80 a0 60 01 cmp %g1, 1 40006be4: 12 bf ff f3 bne 40006bb0 40006be8: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40006bec: 83 28 a0 02 sll %g2, 2, %g1 40006bf0: 05 10 00 72 sethi %hi(0x4001c800), %g2 40006bf4: 84 10 a3 10 or %g2, 0x310, %g2 ! 4001cb10 <_Objects_Information_table> 40006bf8: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40006bfc: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40006c00: 80 a2 20 00 cmp %o0, 0 40006c04: 02 bf ff f2 be 40006bcc 40006c08: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40006c0c: 40 00 06 49 call 40008530 <_Objects_Get> 40006c10: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40006c14: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006c18: 80 a0 60 00 cmp %g1, 0 40006c1c: 02 bf ff d7 be 40006b78 40006c20: 05 10 00 72 sethi %hi(0x4001c800), %g2 40006c24: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40006c28: 18 bf ff e2 bgu 40006bb0 <== NOT EXECUTED 40006c2c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40006c30: 81 c7 e0 08 ret <== NOT EXECUTED 40006c34: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 40007128 : rtems_status_code rtems_task_restart( Objects_Id id, uint32_t argument ) { 40007128: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4000712c: 92 96 20 00 orcc %i0, 0, %o1 40007130: 12 80 00 1b bne 4000719c 40007134: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007138: 21 10 00 74 sethi %hi(0x4001d000), %l0 4000713c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 ! 4001d060 <_Thread_Dispatch_disable_level> 40007140: 82 00 60 01 inc %g1 40007144: c2 24 20 60 st %g1, [ %l0 + 0x60 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40007148: 03 10 00 74 sethi %hi(0x4001d000), %g1 4000714c: d0 00 61 3c ld [ %g1 + 0x13c ], %o0 ! 4001d13c <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40007150: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Restart( the_thread, NULL, argument ) ) { 40007154: 94 10 00 19 mov %i1, %o2 40007158: 40 00 0e 25 call 4000a9ec <_Thread_Restart> 4000715c: 92 10 20 00 clr %o1 40007160: 80 a2 20 00 cmp %o0, 0 40007164: 12 80 00 15 bne 400071b8 40007168: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000716c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40007170: b0 10 20 0e mov 0xe, %i0 40007174: 82 00 7f ff add %g1, -1, %g1 40007178: c2 24 20 60 st %g1, [ %l0 + 0x60 ] 4000717c: c4 04 20 60 ld [ %l0 + 0x60 ], %g2 40007180: 80 a0 a0 00 cmp %g2, 0 40007184: 12 80 00 0b bne 400071b0 40007188: 01 00 00 00 nop _Thread_Dispatch(); 4000718c: 40 00 0b 22 call 40009e14 <_Thread_Dispatch> 40007190: 01 00 00 00 nop 40007194: 81 c7 e0 08 ret 40007198: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000719c: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 400071a0: 80 a0 a0 04 cmp %g2, 4 400071a4: 08 80 00 08 bleu 400071c4 400071a8: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400071ac: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400071b0: 81 c7 e0 08 ret <== NOT EXECUTED 400071b4: 81 e8 00 00 restore <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400071b8: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400071bc: 10 bf ff ee b 40007174 400071c0: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400071c4: 80 a0 60 01 cmp %g1, 1 400071c8: 12 bf ff f3 bne 40007194 400071cc: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400071d0: 83 28 a0 02 sll %g2, 2, %g1 400071d4: 05 10 00 73 sethi %hi(0x4001cc00), %g2 400071d8: 84 10 a3 c0 or %g2, 0x3c0, %g2 ! 4001cfc0 <_Objects_Information_table> 400071dc: c6 00 80 01 ld [ %g2 + %g1 ], %g3 400071e0: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 400071e4: 80 a2 20 00 cmp %o0, 0 400071e8: 02 bf ff f2 be 400071b0 400071ec: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400071f0: 40 00 06 1d call 40008a64 <_Objects_Get> 400071f4: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 400071f8: c2 07 bf f4 ld [ %fp + -12 ], %g1 400071fc: 80 a0 60 00 cmp %g1, 0 40007200: 02 bf ff d5 be 40007154 40007204: 21 10 00 74 sethi %hi(0x4001d000), %l0 40007208: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000720c: 18 bf ff e2 bgu 40007194 <== NOT EXECUTED 40007210: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007214: 81 c7 e0 08 ret <== NOT EXECUTED 40007218: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 40007be4 : */ rtems_status_code rtems_task_resume( Objects_Id id ) { 40007be4: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40007be8: 92 96 20 00 orcc %i0, 0, %o1 40007bec: 12 80 00 19 bne 40007c50 40007bf0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007bf4: 21 10 00 98 sethi %hi(0x40026000), %l0 40007bf8: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 ! 400260e0 <_Thread_Dispatch_disable_level> 40007bfc: 82 00 60 01 inc %g1 40007c00: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40007c04: 03 10 00 98 sethi %hi(0x40026000), %g1 40007c08: d0 00 61 bc ld [ %g1 + 0x1bc ], %o0 ! 400261bc <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40007c0c: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _States_Is_suspended( the_thread->current_state ) ) { 40007c10: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40007c14: 80 88 60 02 btst 2, %g1 40007c18: 12 80 00 2b bne 40007cc4 40007c1c: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007c20: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 40007c24: b0 10 20 0e mov 0xe, %i0 40007c28: 82 00 7f ff add %g1, -1, %g1 40007c2c: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] 40007c30: c4 04 20 e0 ld [ %l0 + 0xe0 ], %g2 40007c34: 80 a0 a0 00 cmp %g2, 0 40007c38: 12 80 00 0b bne 40007c64 40007c3c: 01 00 00 00 nop _Thread_Dispatch(); 40007c40: 40 00 0c 07 call 4000ac5c <_Thread_Dispatch> 40007c44: 01 00 00 00 nop 40007c48: 81 c7 e0 08 ret 40007c4c: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40007c50: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40007c54: 80 a0 a0 04 cmp %g2, 4 40007c58: 08 80 00 05 bleu 40007c6c 40007c5c: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007c60: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007c64: 81 c7 e0 08 ret 40007c68: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007c6c: 80 a0 60 01 cmp %g1, 1 40007c70: 12 bf ff f6 bne 40007c48 40007c74: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007c78: 83 28 a0 02 sll %g2, 2, %g1 40007c7c: 05 10 00 98 sethi %hi(0x40026000), %g2 40007c80: 84 10 a0 40 or %g2, 0x40, %g2 ! 40026040 <_Objects_Information_table> 40007c84: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40007c88: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40007c8c: 80 a2 20 00 cmp %o0, 0 40007c90: 02 bf ff f5 be 40007c64 40007c94: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007c98: 40 00 07 05 call 400098ac <_Objects_Get> 40007c9c: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007ca0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007ca4: 80 a0 60 00 cmp %g1, 0 40007ca8: 02 bf ff da be 40007c10 40007cac: 21 10 00 98 sethi %hi(0x40026000), %l0 40007cb0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40007cb4: 18 bf ff e5 bgu 40007c48 <== NOT EXECUTED 40007cb8: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007cbc: 81 c7 e0 08 ret <== NOT EXECUTED 40007cc0: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _States_Is_suspended( the_thread->current_state ) ) { _Thread_Resume( the_thread, TRUE ); 40007cc4: 40 00 0e f2 call 4000b88c <_Thread_Resume> 40007cc8: 92 10 20 01 mov 1, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007ccc: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 40007cd0: 10 bf ff d6 b 40007c28 40007cd4: b0 10 20 00 clr %i0 40007f50 : rtems_status_code rtems_task_set_note( Objects_Id id, uint32_t notepad, uint32_t note ) { 40007f50: 9d e3 bf 90 save %sp, -112, %sp 40007f54: 92 10 00 18 mov %i0, %o1 /* * NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would * be checking an unsigned number for being negative. */ if ( notepad > RTEMS_NOTEPAD_LAST ) 40007f58: 80 a6 60 0f cmp %i1, 0xf 40007f5c: 18 80 00 36 bgu 40008034 40007f60: b0 10 20 0a mov 0xa, %i0 /* * Optimize the most likely case to avoid the Thread_Dispatch. */ if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 40007f64: 80 a2 60 00 cmp %o1, 0 40007f68: 12 80 00 08 bne 40007f88 40007f6c: 07 10 00 7b sethi %hi(0x4001ec00), %g3 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; api->Notepads[ notepad ] = note; 40007f70: c2 00 e1 ec ld [ %g3 + 0x1ec ], %g1 ! 4001edec <_Thread_Executing> <== NOT EXECUTED 40007f74: c4 00 61 6c ld [ %g1 + 0x16c ], %g2 <== NOT EXECUTED 40007f78: 87 2e 60 02 sll %i1, 2, %g3 <== NOT EXECUTED 40007f7c: f4 20 80 03 st %i2, [ %g2 + %g3 ] <== NOT EXECUTED 40007f80: 81 c7 e0 08 ret <== NOT EXECUTED 40007f84: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Optimize the most likely case to avoid the Thread_Dispatch. */ if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 40007f88: c2 00 e1 ec ld [ %g3 + 0x1ec ], %g1 40007f8c: c4 00 60 08 ld [ %g1 + 8 ], %g2 40007f90: 80 a2 40 02 cmp %o1, %g2 40007f94: 22 bf ff f9 be,a 40007f78 40007f98: c4 00 61 6c ld [ %g1 + 0x16c ], %g2 <== NOT EXECUTED 40007f9c: 83 32 60 18 srl %o1, 0x18, %g1 40007fa0: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40007fa4: 80 a0 a0 04 cmp %g2, 4 40007fa8: 08 80 00 04 bleu 40007fb8 40007fac: 83 32 60 1b srl %o1, 0x1b, %g1 _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007fb0: 81 c7 e0 08 ret <== NOT EXECUTED 40007fb4: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007fb8: 80 a0 60 01 cmp %g1, 1 40007fbc: 12 80 00 1e bne 40008034 40007fc0: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007fc4: 83 28 a0 02 sll %g2, 2, %g1 40007fc8: 05 10 00 7b sethi %hi(0x4001ec00), %g2 40007fcc: 84 10 a0 70 or %g2, 0x70, %g2 ! 4001ec70 <_Objects_Information_table> 40007fd0: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40007fd4: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40007fd8: 80 a2 20 00 cmp %o0, 0 40007fdc: 02 80 00 16 be 40008034 40007fe0: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007fe4: 40 00 06 9f call 40009a60 <_Objects_Get> 40007fe8: 94 07 bf f4 add %fp, -12, %o2 api->Notepads[ notepad ] = note; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007fec: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007ff0: 80 a0 60 00 cmp %g1, 0 40007ff4: 12 80 00 12 bne 4000803c 40007ff8: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; api->Notepads[ notepad ] = note; 40007ffc: c4 02 21 6c ld [ %o0 + 0x16c ], %g2 40008000: 83 2e 60 02 sll %i1, 2, %g1 40008004: f4 20 80 01 st %i2, [ %g2 + %g1 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008008: 07 10 00 7b sethi %hi(0x4001ec00), %g3 4000800c: c2 00 e1 10 ld [ %g3 + 0x110 ], %g1 ! 4001ed10 <_Thread_Dispatch_disable_level> 40008010: b0 10 20 00 clr %i0 40008014: 82 00 7f ff add %g1, -1, %g1 40008018: c2 20 e1 10 st %g1, [ %g3 + 0x110 ] 4000801c: c4 00 e1 10 ld [ %g3 + 0x110 ], %g2 40008020: 80 a0 a0 00 cmp %g2, 0 40008024: 12 80 00 04 bne 40008034 40008028: 01 00 00 00 nop _Thread_Dispatch(); 4000802c: 40 00 0b 79 call 4000ae10 <_Thread_Dispatch> 40008030: 01 00 00 00 nop 40008034: 81 c7 e0 08 ret 40008038: 81 e8 00 00 restore api->Notepads[ notepad ] = note; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000803c: 18 bf ff fe bgu 40008034 <== NOT EXECUTED 40008040: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40008044: 81 c7 e0 08 ret <== NOT EXECUTED 40008048: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4000d538 : rtems_status_code rtems_task_set_priority( Objects_Id id, rtems_task_priority new_priority, rtems_task_priority *old_priority ) { 4000d538: 9d e3 bf 90 save %sp, -112, %sp register Thread_Control *the_thread; Objects_Locations location; if ( new_priority != RTEMS_CURRENT_PRIORITY && 4000d53c: 80 a6 60 00 cmp %i1, 0 4000d540: 02 80 00 06 be 4000d558 4000d544: 92 10 00 18 mov %i0, %o1 4000d548: 82 06 7f ff add %i1, -1, %g1 4000d54c: 80 a0 60 fe cmp %g1, 0xfe 4000d550: 18 80 00 26 bgu 4000d5e8 4000d554: b0 10 20 13 mov 0x13, %i0 !_RTEMS_tasks_Priority_is_valid( new_priority ) ) return RTEMS_INVALID_PRIORITY; if ( !old_priority ) 4000d558: 80 a6 a0 00 cmp %i2, 0 4000d55c: 02 80 00 23 be 4000d5e8 4000d560: b0 10 20 09 mov 9, %i0 uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4000d564: 80 a2 60 00 cmp %o1, 0 4000d568: 12 80 00 22 bne 4000d5f0 4000d56c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000d570: 21 10 00 ac sethi %hi(0x4002b000), %l0 4000d574: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 ! 4002b190 <_Thread_Dispatch_disable_level> 4000d578: 82 00 60 01 inc %g1 4000d57c: c2 24 21 90 st %g1, [ %l0 + 0x190 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 4000d580: 03 10 00 ac sethi %hi(0x4002b000), %g1 4000d584: d0 00 62 6c ld [ %g1 + 0x26c ], %o0 ! 4002b26c <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 4000d588: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: /* XXX convert from core priority */ *old_priority = the_thread->current_priority; 4000d58c: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 if ( new_priority != RTEMS_CURRENT_PRIORITY ) { 4000d590: 80 a6 60 00 cmp %i1, 0 4000d594: 02 80 00 0d be 4000d5c8 4000d598: c2 26 80 00 st %g1, [ %i2 ] the_thread->real_priority = new_priority; if ( the_thread->resource_count == 0 || 4000d59c: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 4000d5a0: 80 a0 60 00 cmp %g1, 0 4000d5a4: 02 80 00 06 be 4000d5bc 4000d5a8: f2 22 20 18 st %i1, [ %o0 + 0x18 ] 4000d5ac: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 4000d5b0: 80 a6 40 01 cmp %i1, %g1 4000d5b4: 1a 80 00 05 bcc 4000d5c8 4000d5b8: 01 00 00 00 nop the_thread->current_priority > new_priority ) _Thread_Change_priority( the_thread, new_priority, FALSE ); 4000d5bc: 92 10 00 19 mov %i1, %o1 4000d5c0: 40 00 0a 59 call 4000ff24 <_Thread_Change_priority> 4000d5c4: 94 10 20 00 clr %o2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000d5c8: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 4000d5cc: b0 10 20 00 clr %i0 4000d5d0: 82 00 7f ff add %g1, -1, %g1 4000d5d4: c2 24 21 90 st %g1, [ %l0 + 0x190 ] 4000d5d8: c4 04 21 90 ld [ %l0 + 0x190 ], %g2 4000d5dc: 80 a0 a0 00 cmp %g2, 0 4000d5e0: 02 80 00 0a be 4000d608 4000d5e4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000d5e8: 81 c7 e0 08 ret 4000d5ec: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000d5f0: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 4000d5f4: 80 a0 a0 04 cmp %g2, 4 4000d5f8: 08 80 00 08 bleu 4000d618 4000d5fc: 83 32 60 1b srl %o1, 0x1b, %g1 4000d600: 81 c7 e0 08 ret <== NOT EXECUTED 4000d604: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000d608: 40 00 0b 6b call 400103b4 <_Thread_Dispatch> 4000d60c: 01 00 00 00 nop 4000d610: 81 c7 e0 08 ret 4000d614: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000d618: 80 a0 60 01 cmp %g1, 1 4000d61c: 12 bf ff f3 bne 4000d5e8 4000d620: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000d624: 83 28 a0 02 sll %g2, 2, %g1 4000d628: 05 10 00 ac sethi %hi(0x4002b000), %g2 4000d62c: 84 10 a0 f0 or %g2, 0xf0, %g2 ! 4002b0f0 <_Objects_Information_table> 4000d630: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000d634: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 4000d638: 80 a2 20 00 cmp %o0, 0 4000d63c: 02 bf ff f5 be 4000d610 4000d640: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000d644: 40 00 06 34 call 4000ef14 <_Objects_Get> 4000d648: 94 07 bf f4 add %fp, -12, %o2 if ( !old_priority ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000d64c: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000d650: 80 a0 60 00 cmp %g1, 0 4000d654: 02 bf ff ce be 4000d58c 4000d658: 21 10 00 ac sethi %hi(0x4002b000), %l0 4000d65c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000d660: 18 bf ff e2 bgu 4000d5e8 <== NOT EXECUTED 4000d664: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000d668: 81 c7 e0 08 ret <== NOT EXECUTED 4000d66c: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 400065f8 : rtems_status_code rtems_task_start( rtems_id id, rtems_task_entry entry_point, rtems_task_argument argument ) { 400065f8: 9d e3 bf 90 save %sp, -112, %sp 400065fc: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; if ( entry_point == NULL ) 40006600: 80 a6 60 00 cmp %i1, 0 40006604: 02 80 00 1e be 4000667c 40006608: b0 10 20 09 mov 9, %i0 uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4000660c: 80 a2 60 00 cmp %o1, 0 40006610: 12 80 00 1d bne 40006684 40006614: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006618: 21 10 00 66 sethi %hi(0x40019800), %l0 4000661c: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 ! 40019b10 <_Thread_Dispatch_disable_level> 40006620: 82 00 60 01 inc %g1 40006624: c2 24 23 10 st %g1, [ %l0 + 0x310 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40006628: 03 10 00 66 sethi %hi(0x40019800), %g1 4000662c: d0 00 63 ec ld [ %g1 + 0x3ec ], %o0 ! 40019bec <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40006630: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Start( 40006634: 94 10 00 19 mov %i1, %o2 40006638: 98 10 00 1a mov %i2, %o4 4000663c: 92 10 20 00 clr %o1 40006640: 40 00 0e a3 call 4000a0cc <_Thread_Start> 40006644: 96 10 20 00 clr %o3 40006648: 80 a2 20 00 cmp %o0, 0 4000664c: 12 80 00 2b bne 400066f8 40006650: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006654: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 40006658: b0 10 20 0e mov 0xe, %i0 4000665c: 82 00 7f ff add %g1, -1, %g1 40006660: c2 24 23 10 st %g1, [ %l0 + 0x310 ] 40006664: c4 04 23 10 ld [ %l0 + 0x310 ], %g2 40006668: 80 a0 a0 00 cmp %g2, 0 4000666c: 12 80 00 0b bne 40006698 40006670: 01 00 00 00 nop _Thread_Dispatch(); 40006674: 40 00 0a bb call 40009160 <_Thread_Dispatch> 40006678: 01 00 00 00 nop 4000667c: 81 c7 e0 08 ret 40006680: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40006684: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40006688: 80 a0 a0 04 cmp %g2, 4 4000668c: 08 80 00 05 bleu 400066a0 40006690: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40006694: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006698: 81 c7 e0 08 ret 4000669c: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400066a0: 80 a0 60 01 cmp %g1, 1 400066a4: 12 bf ff f6 bne 4000667c 400066a8: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400066ac: 83 28 a0 02 sll %g2, 2, %g1 400066b0: 05 10 00 66 sethi %hi(0x40019800), %g2 400066b4: 84 10 a2 70 or %g2, 0x270, %g2 ! 40019a70 <_Objects_Information_table> 400066b8: c6 00 80 01 ld [ %g2 + %g1 ], %g3 400066bc: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 400066c0: 80 a2 20 00 cmp %o0, 0 400066c4: 02 bf ff f5 be 40006698 400066c8: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400066cc: 40 00 05 7d call 40007cc0 <_Objects_Get> 400066d0: 94 07 bf f4 add %fp, -12, %o2 if ( entry_point == NULL ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 400066d4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400066d8: 80 a0 60 00 cmp %g1, 0 400066dc: 02 bf ff d6 be 40006634 400066e0: 21 10 00 66 sethi %hi(0x40019800), %l0 400066e4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400066e8: 18 bf ff e5 bgu 4000667c <== NOT EXECUTED 400066ec: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400066f0: 81 c7 e0 08 ret <== NOT EXECUTED 400066f4: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400066f8: c2 04 23 10 ld [ %l0 + 0x310 ], %g1 400066fc: 10 bf ff d8 b 4000665c 40006700: b0 10 20 00 clr %i0 40007de4 : */ rtems_status_code rtems_task_suspend( Objects_Id id ) { 40007de4: 9d e3 bf 90 save %sp, -112, %sp uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 40007de8: 92 96 20 00 orcc %i0, 0, %o1 40007dec: 12 80 00 19 bne 40007e50 40007df0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007df4: 21 10 00 98 sethi %hi(0x40026000), %l0 40007df8: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 ! 400260e0 <_Thread_Dispatch_disable_level> 40007dfc: 82 00 60 01 inc %g1 40007e00: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40007e04: 03 10 00 98 sethi %hi(0x40026000), %g1 40007e08: d0 00 61 bc ld [ %g1 + 0x1bc ], %o0 ! 400261bc <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40007e0c: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { 40007e10: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40007e14: 80 88 60 02 btst 2, %g1 40007e18: 02 80 00 2b be 40007ec4 40007e1c: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007e20: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 40007e24: b0 10 20 0f mov 0xf, %i0 40007e28: 82 00 7f ff add %g1, -1, %g1 40007e2c: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] 40007e30: c4 04 20 e0 ld [ %l0 + 0xe0 ], %g2 40007e34: 80 a0 a0 00 cmp %g2, 0 40007e38: 12 80 00 0b bne 40007e64 40007e3c: 01 00 00 00 nop _Thread_Dispatch(); 40007e40: 40 00 0b 87 call 4000ac5c <_Thread_Dispatch> 40007e44: 01 00 00 00 nop 40007e48: 81 c7 e0 08 ret 40007e4c: 81 e8 00 00 restore 40007e50: 84 08 60 07 and %g1, 7, %g2 tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 40007e54: 80 a0 a0 04 cmp %g2, 4 40007e58: 08 80 00 05 bleu 40007e6c 40007e5c: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007e60: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007e64: 81 c7 e0 08 ret <== NOT EXECUTED 40007e68: 81 e8 00 00 restore <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007e6c: 80 a0 60 01 cmp %g1, 1 40007e70: 12 bf ff f6 bne 40007e48 40007e74: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007e78: 83 28 a0 02 sll %g2, 2, %g1 40007e7c: 05 10 00 98 sethi %hi(0x40026000), %g2 40007e80: 84 10 a0 40 or %g2, 0x40, %g2 ! 40026040 <_Objects_Information_table> 40007e84: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40007e88: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40007e8c: 80 a2 20 00 cmp %o0, 0 40007e90: 02 bf ff f5 be 40007e64 40007e94: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007e98: 40 00 06 85 call 400098ac <_Objects_Get> 40007e9c: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007ea0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007ea4: 80 a0 60 00 cmp %g1, 0 40007ea8: 02 bf ff da be 40007e10 40007eac: 21 10 00 98 sethi %hi(0x40026000), %l0 40007eb0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40007eb4: 18 bf ff e5 bgu 40007e48 <== NOT EXECUTED 40007eb8: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007ebc: 81 c7 e0 08 ret <== NOT EXECUTED 40007ec0: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { _Thread_Suspend( the_thread ); 40007ec4: 40 00 0f b1 call 4000bd88 <_Thread_Suspend> 40007ec8: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007ecc: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 40007ed0: 10 bf ff d6 b 40007e28 40007ed4: b0 10 20 00 clr %i0 4001a450 : rtems_status_code rtems_task_variable_add( rtems_id tid, void **ptr, void (*dtor)(void *) ) { 4001a450: 9d e3 bf 90 save %sp, -112, %sp 4001a454: 92 10 00 18 mov %i0, %o1 Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *new; if ( !ptr ) 4001a458: 80 a6 60 00 cmp %i1, 0 4001a45c: 02 80 00 22 be 4001a4e4 4001a460: b0 10 20 09 mov 9, %i0 uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4001a464: 80 a2 60 00 cmp %o1, 0 4001a468: 12 80 00 21 bne 4001a4ec 4001a46c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001a470: 21 10 00 f4 sethi %hi(0x4003d000), %l0 4001a474: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 ! 4003d0a0 <_Thread_Dispatch_disable_level> 4001a478: 82 00 60 01 inc %g1 4001a47c: c2 24 20 a0 st %g1, [ %l0 + 0xa0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 4001a480: 03 10 00 f4 sethi %hi(0x4003d000), %g1 4001a484: f0 00 61 7c ld [ %g1 + 0x17c ], %i0 ! 4003d17c <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 4001a488: c0 27 bf f4 clr [ %fp + -12 ] /* * Figure out if the variable is already in this task's list. */ tvp = the_thread->task_variables; 4001a48c: c4 06 21 7c ld [ %i0 + 0x17c ], %g2 while (tvp) { 4001a490: 80 a0 a0 00 cmp %g2, 0 4001a494: 32 80 00 08 bne,a 4001a4b4 4001a498: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4001a49c: 10 80 00 1a b 4001a504 4001a4a0: 11 10 00 f4 sethi %hi(0x4003d000), %o0 4001a4a4: 84 90 60 00 orcc %g1, 0, %g2 <== NOT EXECUTED 4001a4a8: 02 80 00 17 be 4001a504 <== NOT EXECUTED 4001a4ac: 11 10 00 f4 sethi %hi(0x4003d000), %o0 <== NOT EXECUTED if (tvp->ptr == ptr) { 4001a4b0: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4001a4b4: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001a4b8: 32 bf ff fb bne,a 4001a4a4 <== NOT EXECUTED 4001a4bc: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED tvp->dtor = dtor; 4001a4c0: f4 20 a0 10 st %i2, [ %g2 + 0x10 ] <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a4c4: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 _Thread_Dispatch(); 4001a4c8: b0 10 20 00 clr %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a4cc: 82 00 7f ff add %g1, -1, %g1 4001a4d0: c2 24 20 a0 st %g1, [ %l0 + 0xa0 ] 4001a4d4: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 4001a4d8: 80 a0 a0 00 cmp %g2, 0 4001a4dc: 02 80 00 1c be 4001a54c 4001a4e0: 01 00 00 00 nop the_thread->task_variables = new; _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001a4e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a4e8: 81 e8 00 00 restore <== NOT EXECUTED 4001a4ec: 84 08 60 07 and %g1, 7, %g2 <== NOT EXECUTED tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 4001a4f0: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001a4f4: 08 80 00 21 bleu 4001a578 <== NOT EXECUTED 4001a4f8: 83 32 60 1b srl %o1, 0x1b, %g1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001a4fc: 81 c7 e0 08 ret <== NOT EXECUTED 4001a500: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4001a504: 92 10 20 14 mov 0x14, %o1 4001a508: 7f ff c1 71 call 4000aacc <_Heap_Allocate> 4001a50c: 90 12 20 ec or %o0, 0xec, %o0 * Now allocate memory for this task variable. */ new = (rtems_task_variable_t *) _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { 4001a510: 80 a2 20 00 cmp %o0, 0 4001a514: 32 80 00 12 bne,a 4001a55c 4001a518: c4 06 21 7c ld [ %i0 + 0x17c ], %g2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a51c: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 4001a520: b0 10 20 1a mov 0x1a, %i0 <== NOT EXECUTED 4001a524: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001a528: c2 24 20 a0 st %g1, [ %l0 + 0xa0 ] <== NOT EXECUTED 4001a52c: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED 4001a530: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a534: 12 80 00 08 bne 4001a554 <== NOT EXECUTED 4001a538: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4001a53c: 7f ff c9 98 call 4000cb9c <_Thread_Dispatch> <== NOT EXECUTED 4001a540: 01 00 00 00 nop <== NOT EXECUTED 4001a544: 81 c7 e0 08 ret <== NOT EXECUTED 4001a548: 81 e8 00 00 restore <== NOT EXECUTED 4001a54c: 7f ff c9 94 call 4000cb9c <_Thread_Dispatch> 4001a550: b0 10 20 00 clr %i0 4001a554: 81 c7 e0 08 ret 4001a558: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_NO_MEMORY; } new->gval = *ptr; 4001a55c: c2 06 40 00 ld [ %i1 ], %g1 new->ptr = ptr; new->dtor = dtor; new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; the_thread->task_variables = new; 4001a560: d0 26 21 7c st %o0, [ %i0 + 0x17c ] _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { _Thread_Enable_dispatch(); return RTEMS_NO_MEMORY; } new->gval = *ptr; 4001a564: c2 22 20 08 st %g1, [ %o0 + 8 ] new->ptr = ptr; 4001a568: f2 22 20 04 st %i1, [ %o0 + 4 ] new->dtor = dtor; 4001a56c: f4 22 20 10 st %i2, [ %o0 + 0x10 ] new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; 4001a570: 10 bf ff d5 b 4001a4c4 4001a574: c4 22 00 00 st %g2, [ %o0 ] *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4001a578: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001a57c: 12 bf ff e0 bne 4001a4fc <== NOT EXECUTED 4001a580: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4001a584: 05 10 00 f4 sethi %hi(0x4003d000), %g2 <== NOT EXECUTED 4001a588: 84 10 a0 00 mov %g2, %g2 ! 4003d000 <_Objects_Information_table> <== NOT EXECUTED 4001a58c: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 4001a590: d0 00 e0 04 ld [ %g3 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 4001a594: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a598: 02 bf ff d9 be 4001a4fc <== NOT EXECUTED 4001a59c: 01 00 00 00 nop <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001a5a0: 7f ff c3 fb call 4000b58c <_Objects_Get> <== NOT EXECUTED 4001a5a4: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if ( !ptr ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 4001a5a8: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001a5ac: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4001a5b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a5b4: 02 bf ff b6 be 4001a48c <== NOT EXECUTED 4001a5b8: 21 10 00 f4 sethi %hi(0x4003d000), %l0 <== NOT EXECUTED 4001a5bc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4001a5c0: 18 bf ff c9 bgu 4001a4e4 <== NOT EXECUTED 4001a5c4: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 4001a5c8: 30 bf ff cd b,a 4001a4fc <== NOT EXECUTED 4001a5cc : rtems_status_code rtems_task_variable_delete( rtems_id tid, void **ptr ) { 4001a5cc: 9d e3 bf 90 save %sp, -112, %sp Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *prev; if ( !ptr ) 4001a5d0: 80 a6 60 00 cmp %i1, 0 4001a5d4: 02 80 00 50 be 4001a714 4001a5d8: 92 10 00 18 mov %i0, %o1 uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4001a5dc: 80 a6 20 00 cmp %i0, 0 4001a5e0: 12 80 00 26 bne 4001a678 4001a5e4: 83 36 20 18 srl %i0, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001a5e8: 21 10 00 f4 sethi %hi(0x4003d000), %l0 4001a5ec: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 ! 4003d0a0 <_Thread_Dispatch_disable_level> 4001a5f0: 82 00 60 01 inc %g1 4001a5f4: c2 24 20 a0 st %g1, [ %l0 + 0xa0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 4001a5f8: 03 10 00 f4 sethi %hi(0x4003d000), %g1 4001a5fc: d0 00 61 7c ld [ %g1 + 0x17c ], %o0 ! 4003d17c <_Thread_Executing> Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 4001a600: c0 27 bf f4 clr [ %fp + -12 ] default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; 4001a604: c6 02 21 7c ld [ %o0 + 0x17c ], %g3 while (tvp) { 4001a608: 80 a0 e0 00 cmp %g3, 0 4001a60c: 02 80 00 10 be 4001a64c 4001a610: 01 00 00 00 nop if (tvp->ptr == ptr) { 4001a614: c2 00 e0 04 ld [ %g3 + 4 ], %g1 4001a618: 80 a0 40 19 cmp %g1, %i1 4001a61c: 32 80 00 09 bne,a 4001a640 4001a620: c4 00 c0 00 ld [ %g3 ], %g2 <== NOT EXECUTED if (prev) prev->next = tvp->next; else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; 4001a624: 10 80 00 5b b 4001a790 4001a628: c2 00 c0 00 ld [ %g3 ], %g1 return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { if (tvp->ptr == ptr) { 4001a62c: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001a630: 02 80 00 18 be 4001a690 <== NOT EXECUTED 4001a634: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001a638: 86 10 00 02 mov %g2, %g3 <== NOT EXECUTED _Workspace_Free(tvp); _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } prev = tvp; tvp = (rtems_task_variable_t *)tvp->next; 4001a63c: c4 00 c0 00 ld [ %g3 ], %g2 <== NOT EXECUTED default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { 4001a640: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a644: 32 bf ff fa bne,a 4001a62c <== NOT EXECUTED 4001a648: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a64c: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 4001a650: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001a654: c2 24 20 a0 st %g1, [ %l0 + 0xa0 ] <== NOT EXECUTED 4001a658: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED 4001a65c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a660: 12 80 00 2d bne 4001a714 <== NOT EXECUTED 4001a664: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4001a668: 7f ff c9 4d call 4000cb9c <_Thread_Dispatch> <== NOT EXECUTED 4001a66c: b0 10 20 09 mov 9, %i0 ! 9 <== NOT EXECUTED 4001a670: 81 c7 e0 08 ret <== NOT EXECUTED 4001a674: 81 e8 00 00 restore <== NOT EXECUTED 4001a678: 84 08 60 07 and %g1, 7, %g2 <== NOT EXECUTED tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 4001a67c: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001a680: 08 80 00 2e bleu 4001a738 <== NOT EXECUTED 4001a684: 83 36 20 1b srl %i0, 0x1b, %g1 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001a688: 81 c7 e0 08 ret <== NOT EXECUTED 4001a68c: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { if (tvp->ptr == ptr) { if (prev) prev->next = tvp->next; 4001a690: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED 4001a694: c2 20 c0 00 st %g1, [ %g3 ] <== NOT EXECUTED else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(the_thread)) { 4001a698: 03 10 00 f4 sethi %hi(0x4003d000), %g1 4001a69c: c4 00 61 7c ld [ %g1 + 0x17c ], %g2 ! 4003d17c <_Thread_Executing> 4001a6a0: 80 a2 00 02 cmp %o0, %g2 4001a6a4: 32 80 00 1e bne,a 4001a71c 4001a6a8: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED if (tvp->dtor) 4001a6ac: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 4001a6b0: 80 a0 a0 00 cmp %g2, 0 4001a6b4: 22 80 00 06 be,a 4001a6cc 4001a6b8: c4 06 20 04 ld [ %i0 + 4 ], %g2 (*tvp->dtor)(*tvp->ptr); 4001a6bc: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 4001a6c0: 9f c0 80 00 call %g2 <== NOT EXECUTED 4001a6c4: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 4001a6c8: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 4001a6cc: c2 06 20 08 ld [ %i0 + 8 ], %g1 4001a6d0: c2 20 80 00 st %g1, [ %g2 ] RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4001a6d4: 92 10 00 18 mov %i0, %o1 4001a6d8: 11 10 00 f4 sethi %hi(0x4003d000), %o0 4001a6dc: 7f ff c1 2e call 4000ab94 <_Heap_Free> 4001a6e0: 90 12 20 ec or %o0, 0xec, %o0 ! 4003d0ec <_Workspace_Area> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a6e4: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 4001a6e8: b0 10 20 00 clr %i0 4001a6ec: 82 00 7f ff add %g1, -1, %g1 4001a6f0: c2 24 20 a0 st %g1, [ %l0 + 0xa0 ] 4001a6f4: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 4001a6f8: 80 a0 a0 00 cmp %g2, 0 4001a6fc: 12 80 00 04 bne 4001a70c 4001a700: 01 00 00 00 nop _Thread_Dispatch(); 4001a704: 7f ff c9 26 call 4000cb9c <_Thread_Dispatch> 4001a708: 01 00 00 00 nop 4001a70c: 81 c7 e0 08 ret 4001a710: 81 e8 00 00 restore 4001a714: 81 c7 e0 08 ret <== NOT EXECUTED 4001a718: 91 e8 20 09 restore %g0, 9, %o0 <== NOT EXECUTED } else { if (tvp->dtor) 4001a71c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a720: 22 bf ff ee be,a 4001a6d8 <== NOT EXECUTED 4001a724: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 4001a728: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001a72c: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 4001a730: 10 bf ff ea b 4001a6d8 <== NOT EXECUTED 4001a734: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4001a738: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001a73c: 32 bf ff cd bne,a 4001a670 <== NOT EXECUTED 4001a740: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4001a744: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001a748: 05 10 00 f4 sethi %hi(0x4003d000), %g2 <== NOT EXECUTED 4001a74c: 84 10 a0 00 mov %g2, %g2 ! 4003d000 <_Objects_Information_table> <== NOT EXECUTED 4001a750: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 4001a754: d0 00 e0 04 ld [ %g3 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 4001a758: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a75c: 22 bf ff c5 be,a 4001a670 <== NOT EXECUTED 4001a760: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001a764: 7f ff c3 8a call 4000b58c <_Objects_Get> <== NOT EXECUTED 4001a768: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; prev = NULL; the_thread = _Thread_Get (tid, &location); switch (location) { 4001a76c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001a770: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a774: 02 bf ff a4 be 4001a604 <== NOT EXECUTED 4001a778: 21 10 00 f4 sethi %hi(0x4003d000), %l0 <== NOT EXECUTED 4001a77c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4001a780: 18 bf ff bc bgu 4001a670 <== NOT EXECUTED 4001a784: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001a788: 81 c7 e0 08 ret <== NOT EXECUTED 4001a78c: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED while (tvp) { if (tvp->ptr == ptr) { if (prev) prev->next = tvp->next; else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; 4001a790: b0 10 00 03 mov %g3, %i0 4001a794: 10 bf ff c1 b 4001a698 4001a798: c2 22 21 7c st %g1, [ %o0 + 0x17c ] 4001a79c : rtems_status_code rtems_task_variable_get( rtems_id tid, void **ptr, void **result ) { 4001a79c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp; if ( !ptr ) 4001a7a0: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 4001a7a4: 02 80 00 3b be 4001a890 <== NOT EXECUTED 4001a7a8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !result ) 4001a7ac: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001a7b0: 02 80 00 38 be 4001a890 <== NOT EXECUTED 4001a7b4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4001a7b8: 12 80 00 21 bne 4001a83c <== NOT EXECUTED 4001a7bc: 83 36 20 18 srl %i0, 0x18, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001a7c0: 05 10 00 f4 sethi %hi(0x4003d000), %g2 <== NOT EXECUTED 4001a7c4: c2 00 a0 a0 ld [ %g2 + 0xa0 ], %g1 ! 4003d0a0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4001a7c8: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001a7cc: c2 20 a0 a0 st %g1, [ %g2 + 0xa0 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 4001a7d0: 03 10 00 f4 sethi %hi(0x4003d000), %g1 <== NOT EXECUTED 4001a7d4: d0 00 61 7c ld [ %g1 + 0x17c ], %o0 ! 4003d17c <_Thread_Executing> <== NOT EXECUTED Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 4001a7d8: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED /* * Figure out if the variable is in this task's list. */ tvp = the_thread->task_variables; 4001a7dc: d0 02 21 7c ld [ %o0 + 0x17c ], %o0 <== NOT EXECUTED while (tvp) { 4001a7e0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a7e4: 32 80 00 07 bne,a 4001a800 <== NOT EXECUTED 4001a7e8: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4001a7ec: 30 80 00 1a b,a 4001a854 <== NOT EXECUTED 4001a7f0: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001a7f4: 02 80 00 18 be 4001a854 <== NOT EXECUTED 4001a7f8: 01 00 00 00 nop <== NOT EXECUTED if (tvp->ptr == ptr) { 4001a7fc: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4001a800: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001a804: 32 bf ff fb bne,a 4001a7f0 <== NOT EXECUTED 4001a808: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED /* * Should this return the current (i.e not the * saved) value if `tid' is the current task? */ *result = tvp->tval; 4001a80c: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 4001a810: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a814: c2 00 a0 a0 ld [ %g2 + 0xa0 ], %g1 <== NOT EXECUTED 4001a818: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a81c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001a820: c2 20 a0 a0 st %g1, [ %g2 + 0xa0 ] <== NOT EXECUTED 4001a824: c4 00 a0 a0 ld [ %g2 + 0xa0 ], %g2 <== NOT EXECUTED 4001a828: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a82c: 02 80 00 15 be 4001a880 <== NOT EXECUTED 4001a830: 01 00 00 00 nop <== NOT EXECUTED } _Thread_Enable_dispatch(); return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001a834: 81 c7 e0 08 ret <== NOT EXECUTED 4001a838: 81 e8 00 00 restore <== NOT EXECUTED 4001a83c: 84 08 60 07 and %g1, 7, %g2 <== NOT EXECUTED tp = _Thread_Executing; goto done; } the_api = _Objects_Get_API( id ); if ( the_api && the_api > OBJECTS_APIS_LAST ) { 4001a840: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001a844: 08 80 00 15 bleu 4001a898 <== NOT EXECUTED 4001a848: 83 36 20 1b srl %i0, 0x1b, %g1 <== NOT EXECUTED 4001a84c: 81 c7 e0 08 ret <== NOT EXECUTED 4001a850: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001a854: c2 00 a0 a0 ld [ %g2 + 0xa0 ], %g1 <== NOT EXECUTED 4001a858: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001a85c: c2 20 a0 a0 st %g1, [ %g2 + 0xa0 ] <== NOT EXECUTED 4001a860: c4 00 a0 a0 ld [ %g2 + 0xa0 ], %g2 <== NOT EXECUTED 4001a864: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a868: 12 80 00 0a bne 4001a890 <== NOT EXECUTED 4001a86c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4001a870: 7f ff c8 cb call 4000cb9c <_Thread_Dispatch> <== NOT EXECUTED 4001a874: b0 10 20 09 mov 9, %i0 ! 9 <== NOT EXECUTED 4001a878: 81 c7 e0 08 ret <== NOT EXECUTED 4001a87c: 81 e8 00 00 restore <== NOT EXECUTED 4001a880: 7f ff c8 c7 call 4000cb9c <_Thread_Dispatch> <== NOT EXECUTED 4001a884: 01 00 00 00 nop <== NOT EXECUTED 4001a888: 81 c7 e0 08 ret <== NOT EXECUTED 4001a88c: 81 e8 00 00 restore <== NOT EXECUTED 4001a890: 81 c7 e0 08 ret <== NOT EXECUTED 4001a894: 91 e8 20 09 restore %g0, 9, %o0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4001a898: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001a89c: 32 bf ff e6 bne,a 4001a834 <== NOT EXECUTED 4001a8a0: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4001a8a4: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001a8a8: 05 10 00 f4 sethi %hi(0x4003d000), %g2 <== NOT EXECUTED 4001a8ac: 84 10 a0 00 mov %g2, %g2 ! 4003d000 <_Objects_Information_table> <== NOT EXECUTED 4001a8b0: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 4001a8b4: d0 00 e0 04 ld [ %g3 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 4001a8b8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a8bc: 22 bf ff de be,a 4001a834 <== NOT EXECUTED 4001a8c0: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001a8c4: 7f ff c3 32 call 4000b58c <_Objects_Get> <== NOT EXECUTED 4001a8c8: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if ( !result ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 4001a8cc: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001a8d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a8d4: 02 bf ff c2 be 4001a7dc <== NOT EXECUTED 4001a8d8: 05 10 00 f4 sethi %hi(0x4003d000), %g2 <== NOT EXECUTED 4001a8dc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4001a8e0: 18 bf ff d5 bgu 4001a834 <== NOT EXECUTED 4001a8e4: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001a8e8: 81 c7 e0 08 ret <== NOT EXECUTED 4001a8ec: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 400032a4 : int cbufsize, int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; 400032a4: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED rtems_termios_raw_input_size = raw_input; 400032a8: 05 10 00 64 sethi %hi(0x40019000), %g2 <== NOT EXECUTED int cbufsize, int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; 400032ac: d0 20 60 14 st %o0, [ %g1 + 0x14 ] <== NOT EXECUTED rtems_termios_raw_input_size = raw_input; 400032b0: d2 20 a0 18 st %o1, [ %g2 + 0x18 ] <== NOT EXECUTED rtems_termios_raw_output_size = raw_output; 400032b4: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 400032b8: 90 10 20 00 clr %o0 <== NOT EXECUTED 400032bc: 81 c3 e0 08 retl <== NOT EXECUTED 400032c0: d4 20 60 1c st %o2, [ %g1 + 0x1c ] <== NOT EXECUTED 40004a58 : } } rtems_status_code rtems_termios_close (void *arg) { 40004a58: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004a5c: 23 10 00 66 sethi %hi(0x40019800), %l1 rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004a60: c2 06 00 00 ld [ %i0 ], %g1 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004a64: d0 04 61 b8 ld [ %l1 + 0x1b8 ], %o0 rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004a68: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004a6c: 92 10 20 00 clr %o1 40004a70: 40 00 04 c6 call 40005d88 40004a74: 94 10 20 00 clr %o2 if (sc != RTEMS_SUCCESSFUL) 40004a78: 80 a2 20 00 cmp %o0, 0 40004a7c: 12 80 00 47 bne 40004b98 40004a80: 01 00 00 00 nop rtems_fatal_error_occurred (sc); if (--tty->refcount == 0) { 40004a84: c2 04 20 08 ld [ %l0 + 8 ], %g1 40004a88: 82 00 7f ff add %g1, -1, %g1 40004a8c: 80 a0 60 00 cmp %g1, 0 40004a90: 12 80 00 3a bne 40004b78 40004a94: c2 24 20 08 st %g1, [ %l0 + 8 ] if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 40004a98: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 40004a9c: 03 10 00 65 sethi %hi(0x40019400), %g1 40004aa0: 82 10 63 e8 or %g1, 0x3e8, %g1 ! 400197e8 40004aa4: 85 28 a0 05 sll %g2, 5, %g2 40004aa8: 84 00 80 01 add %g2, %g1, %g2 40004aac: c2 00 a0 04 ld [ %g2 + 4 ], %g1 40004ab0: 80 a0 60 00 cmp %g1, 0 40004ab4: 02 80 00 49 be 40004bd8 40004ab8: 01 00 00 00 nop /* * call discipline-specific close */ sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40004abc: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004ac0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED * default: just flush output buffer */ drainOutput (tty); } if (tty->device.outputUsesInterrupts 40004ac4: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED 40004ac8: 80 a0 60 02 cmp %g1, 2 40004acc: 22 80 00 47 be,a 40004be8 40004ad0: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } if (tty->device.lastClose) 40004ad4: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 40004ad8: 80 a0 60 00 cmp %g1, 0 40004adc: 22 80 00 07 be,a 40004af8 40004ae0: c4 04 00 00 ld [ %l0 ], %g2 (*tty->device.lastClose)(tty->major, tty->minor, arg); 40004ae4: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED 40004ae8: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 40004aec: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004af0: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED if (tty->forw == NULL) { 40004af4: c4 04 00 00 ld [ %l0 ], %g2 <== NOT EXECUTED 40004af8: 80 a0 a0 00 cmp %g2, 0 40004afc: 22 80 00 30 be,a 40004bbc 40004b00: c6 04 20 04 ld [ %l0 + 4 ], %g3 if ( rtems_termios_ttyTail != NULL ) { rtems_termios_ttyTail->forw = NULL; } } else { tty->forw->back = tty->back; 40004b04: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 40004b08: c2 20 a0 04 st %g1, [ %g2 + 4 ] <== NOT EXECUTED } if (tty->back == NULL) { 40004b0c: c2 04 20 04 ld [ %l0 + 4 ], %g1 40004b10: 80 a0 60 00 cmp %g1, 0 40004b14: 22 80 00 25 be,a 40004ba8 40004b18: 03 10 00 66 sethi %hi(0x40019800), %g1 if ( rtems_termios_ttyHead != NULL ) { rtems_termios_ttyHead->back = NULL; } } else { tty->back->forw = tty->forw; 40004b1c: c4 20 40 00 st %g2, [ %g1 ] <== NOT EXECUTED } rtems_semaphore_delete (tty->isem); 40004b20: 40 00 04 4f call 40005c5c 40004b24: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 rtems_semaphore_delete (tty->osem); 40004b28: 40 00 04 4d call 40005c5c 40004b2c: d0 04 20 18 ld [ %l0 + 0x18 ], %o0 rtems_semaphore_delete (tty->rawOutBuf.Semaphore); 40004b30: 40 00 04 4b call 40005c5c 40004b34: d0 04 20 8c ld [ %l0 + 0x8c ], %o0 if ((tty->device.pollRead == NULL) || 40004b38: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 40004b3c: 80 a0 60 00 cmp %g1, 0 40004b40: 02 80 00 13 be 40004b8c 40004b44: 01 00 00 00 nop 40004b48: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40004b4c: 80 a0 60 02 cmp %g1, 2 40004b50: 02 80 00 0f be 40004b8c 40004b54: 01 00 00 00 nop (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)) rtems_semaphore_delete (tty->rawInBuf.Semaphore); free (tty->rawInBuf.theBuf); 40004b58: 7f ff f5 ca call 40002280 40004b5c: d0 04 20 58 ld [ %l0 + 0x58 ], %o0 free (tty->rawOutBuf.theBuf); 40004b60: 7f ff f5 c8 call 40002280 40004b64: d0 04 20 7c ld [ %l0 + 0x7c ], %o0 free (tty->cbuf); 40004b68: 7f ff f5 c6 call 40002280 40004b6c: d0 04 20 1c ld [ %l0 + 0x1c ], %o0 free (tty); 40004b70: 7f ff f5 c4 call 40002280 40004b74: 90 10 00 10 mov %l0, %o0 } rtems_semaphore_release (rtems_termios_ttyMutex); 40004b78: d0 04 61 b8 ld [ %l1 + 0x1b8 ], %o0 40004b7c: 40 00 05 52 call 400060c4 40004b80: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 40004b84: 81 c7 e0 08 ret 40004b88: 81 e8 00 00 restore rtems_semaphore_delete (tty->isem); rtems_semaphore_delete (tty->osem); rtems_semaphore_delete (tty->rawOutBuf.Semaphore); if ((tty->device.pollRead == NULL) || (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)) rtems_semaphore_delete (tty->rawInBuf.Semaphore); 40004b8c: 40 00 04 34 call 40005c5c <== NOT EXECUTED 40004b90: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED 40004b94: 30 bf ff f1 b,a 40004b58 <== NOT EXECUTED struct rtems_termios_tty *tty = args->iop->data1; rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 40004b98: 40 00 07 97 call 400069f4 <== NOT EXECUTED 40004b9c: 01 00 00 00 nop <== NOT EXECUTED if (--tty->refcount == 0) { 40004ba0: 10 bf ff ba b 40004a88 <== NOT EXECUTED 40004ba4: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED else { tty->forw->back = tty->back; } if (tty->back == NULL) { rtems_termios_ttyHead = tty->forw; if ( rtems_termios_ttyHead != NULL ) { 40004ba8: 80 a0 a0 00 cmp %g2, 0 40004bac: 02 bf ff dd be 40004b20 40004bb0: c4 20 61 c0 st %g2, [ %g1 + 0x1c0 ] rtems_termios_ttyHead->back = NULL; 40004bb4: 10 bf ff db b 40004b20 <== NOT EXECUTED 40004bb8: c0 20 a0 04 clr [ %g2 + 4 ] <== NOT EXECUTED rtems_fatal_error_occurred (sc); } if (tty->device.lastClose) (*tty->device.lastClose)(tty->major, tty->minor, arg); if (tty->forw == NULL) { rtems_termios_ttyTail = tty->back; 40004bbc: 03 10 00 66 sethi %hi(0x40019800), %g1 if ( rtems_termios_ttyTail != NULL ) { 40004bc0: 80 a0 e0 00 cmp %g3, 0 40004bc4: 02 bf ff d2 be 40004b0c 40004bc8: c6 20 61 bc st %g3, [ %g1 + 0x1bc ] rtems_termios_ttyTail->forw = NULL; 40004bcc: c0 20 c0 00 clr [ %g3 ] <== NOT EXECUTED 40004bd0: 10 bf ff cf b 40004b0c <== NOT EXECUTED 40004bd4: c4 04 00 00 ld [ %l0 ], %g2 <== NOT EXECUTED } else { /* * default: just flush output buffer */ drainOutput (tty); 40004bd8: 7f ff fd 66 call 40004170 40004bdc: 90 10 00 10 mov %l0, %o0 } if (tty->device.outputUsesInterrupts 40004be0: 10 bf ff ba b 40004ac8 40004be4: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 == TERMIOS_TASK_DRIVEN) { /* * send "terminate" to I/O tasks */ sc = rtems_event_send( 40004be8: 40 00 02 ab call 40005694 <== NOT EXECUTED 40004bec: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 40004bf0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004bf4: 12 80 00 0c bne 40004c24 <== NOT EXECUTED 40004bf8: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); sc = rtems_event_send( 40004bfc: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 40004c00: 40 00 02 a5 call 40005694 <== NOT EXECUTED 40004c04: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 40004c08: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004c0c: 22 bf ff b3 be,a 40004ad8 <== NOT EXECUTED 40004c10: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40004c14: 40 00 07 78 call 400069f4 <== NOT EXECUTED 40004c18: 01 00 00 00 nop <== NOT EXECUTED } if (tty->device.lastClose) 40004c1c: 10 bf ff af b 40004ad8 <== NOT EXECUTED 40004c20: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED */ sc = rtems_event_send( tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 40004c24: 40 00 07 74 call 400069f4 <== NOT EXECUTED 40004c28: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_event_send( 40004c2c: 10 bf ff f5 b 40004c00 <== NOT EXECUTED 40004c30: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 400034d8 : * for each transmitted character. * It returns number of characters left to transmit */ int rtems_termios_dequeue_characters (void *ttyp, int len) { 400034d8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 400034dc: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 400034e0: c4 06 20 b4 ld [ %i0 + 0xb4 ], %g2 <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 400034e4: 82 00 40 19 add %g1, %i1, %g1 <== NOT EXECUTED 400034e8: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 400034ec: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 400034f0: 02 80 00 10 be 40003530 <== NOT EXECUTED 400034f4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED TERMIOS_TX_START_EVENT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); return 0; /* nothing to output in IRQ... */ } else if (tty->t_line == PPPDISC ) { 400034f8: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 400034fc: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 40003500: 02 80 00 04 be 40003510 <== NOT EXECUTED 40003504: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); } return 0; /* nothing to output in IRQ... */ } else { return rtems_termios_refill_transmitter(tty); 40003508: 7f ff ff 75 call 400032dc <== NOT EXECUTED 4000350c: 81 e8 00 00 restore <== NOT EXECUTED } else if (tty->t_line == PPPDISC ) { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40003510: c2 00 60 9c ld [ %g1 + 0x9c ], %g1 <== NOT EXECUTED 40003514: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003518: 02 80 00 04 be 40003528 <== NOT EXECUTED 4000351c: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 40003520: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003524: 01 00 00 00 nop <== NOT EXECUTED return 0; /* nothing to output in IRQ... */ } else { return rtems_termios_refill_transmitter(tty); } } 40003528: 81 c7 e0 08 ret <== NOT EXECUTED 4000352c: 81 e8 00 00 restore <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { /* * send wake up to transmitter task */ sc = rtems_event_send(tty->txTaskId, 40003530: d0 06 20 c8 ld [ %i0 + 0xc8 ], %o0 <== NOT EXECUTED 40003534: 40 00 08 58 call 40005694 <== NOT EXECUTED 40003538: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED TERMIOS_TX_START_EVENT); if (sc != RTEMS_SUCCESSFUL) 4000353c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003540: 02 bf ff fa be 40003528 <== NOT EXECUTED 40003544: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40003548: 40 00 0d 2b call 400069f4 <== NOT EXECUTED 4000354c: 01 00 00 00 nop <== NOT EXECUTED 40003550: 30 bf ff f6 b,a 40003528 <== NOT EXECUTED 40003554 : * device receive interrupt handler. * Returns the number of characters dropped because of overflow. */ int rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len) { 40003554: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED char c; int dropped = 0; boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 40003558: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 4000355c: 05 10 00 65 sethi %hi(0x40019400), %g2 <== NOT EXECUTED 40003560: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40003564: a0 10 a3 e8 or %g2, 0x3e8, %l0 <== NOT EXECUTED 40003568: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 4000356c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 40003570: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003574: 02 80 00 24 be 40003604 <== NOT EXECUTED 40003578: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED while (len--) { 4000357c: 22 80 00 11 be,a 400035c0 <== NOT EXECUTED 40003580: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED 40003584: b4 06 80 19 add %i2, %i1, %i2 <== NOT EXECUTED c = *buf++; rtems_termios_linesw[tty->t_line].l_rint(c,tty); 40003588: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { while (len--) { c = *buf++; 4000358c: d0 0e 40 00 ldub [ %i1 ], %o0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_rint(c,tty); 40003590: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40003594: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 40003598: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 4000359c: 91 2a 20 18 sll %o0, 0x18, %o0 <== NOT EXECUTED 400035a0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400035a4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400035a8: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { while (len--) { c = *buf++; 400035ac: b2 06 60 01 inc %i1 <== NOT EXECUTED int dropped = 0; boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { while (len--) { 400035b0: 80 a6 40 1a cmp %i1, %i2 <== NOT EXECUTED 400035b4: 32 bf ff f6 bne,a 4000358c <== NOT EXECUTED 400035b8: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED } /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { 400035bc: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED 400035c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400035c4: 12 80 00 0e bne 400035fc <== NOT EXECUTED 400035c8: a8 10 20 00 clr %l4 <== NOT EXECUTED 400035cc: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 400035d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400035d4: 02 80 00 0a be 400035fc <== NOT EXECUTED 400035d8: 01 00 00 00 nop <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 400035dc: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 400035e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400035e4: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 400035e8: a8 10 20 00 clr %l4 <== NOT EXECUTED 400035ec: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400035f0: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; } 400035f4: 81 c7 e0 08 ret <== NOT EXECUTED 400035f8: 91 e8 00 14 restore %g0, %l4, %o0 <== NOT EXECUTED 400035fc: 81 c7 e0 08 ret <== NOT EXECUTED 40003600: 91 e8 00 14 restore %g0, %l4, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40003604: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED char c; int dropped = 0; boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 40003608: a8 10 20 00 clr %l4 <== NOT EXECUTED 4000360c: a6 10 20 00 clr %l3 <== NOT EXECUTED /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40003610: aa 06 20 30 add %i0, 0x30, %l5 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40003614: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 40003618: 02 80 00 1c be 40003688 <== NOT EXECUTED 4000361c: ac 06 20 4a add %i0, 0x4a, %l6 <== NOT EXECUTED c = *buf++; /* FIXME: implement IXANY: any character restarts output */ /* if incoming XON/XOFF controls outgoing stream: */ if (tty->flow_ctrl & FL_MDXON) { 40003620: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40003624: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40003628: 02 80 00 0b be 40003654 <== NOT EXECUTED 4000362c: e2 0e 40 00 ldub [ %i1 ], %l1 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { 40003630: c4 0e 20 4a ldub [ %i0 + 0x4a ], %g2 <== NOT EXECUTED 40003634: 83 2c 60 18 sll %l1, 0x18, %g1 <== NOT EXECUTED 40003638: 87 38 60 18 sra %g1, 0x18, %g3 <== NOT EXECUTED 4000363c: 80 a0 c0 02 cmp %g3, %g2 <== NOT EXECUTED 40003640: 02 80 00 63 be 400037cc <== NOT EXECUTED 40003644: c2 0e 20 49 ldub [ %i0 + 0x49 ], %g1 <== NOT EXECUTED /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; } flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { 40003648: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 4000364c: 02 80 00 68 be 400037ec <== NOT EXECUTED 40003650: 01 00 00 00 nop <== NOT EXECUTED /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; flow_rcv = TRUE; } } if (flow_rcv) { 40003654: 80 a4 e0 00 cmp %l3, 0 <== NOT EXECUTED 40003658: 02 80 00 23 be 400036e4 <== NOT EXECUTED 4000365c: 01 00 00 00 nop <== NOT EXECUTED /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 40003660: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40003664: 82 08 60 30 and %g1, 0x30, %g1 <== NOT EXECUTED 40003668: 80 a0 60 20 cmp %g1, 0x20 <== NOT EXECUTED 4000366c: 02 80 00 0f be 400036a8 <== NOT EXECUTED 40003670: 01 00 00 00 nop <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 40003674: b2 06 60 01 inc %i1 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40003678: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED 4000367c: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 40003680: 12 bf ff e8 bne 40003620 <== NOT EXECUTED 40003684: 01 00 00 00 nop <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 40003688: c2 06 20 78 ld [ %i0 + 0x78 ], %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 4000368c: d0 06 20 68 ld [ %i0 + 0x68 ], %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 40003690: 82 00 40 14 add %g1, %l4, %g1 <== NOT EXECUTED 40003694: c2 26 20 78 st %g1, [ %i0 + 0x78 ] <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 40003698: 40 00 0a 8b call 400060c4 <== NOT EXECUTED 4000369c: b0 10 00 14 mov %l4, %i0 <== NOT EXECUTED return dropped; } 400036a0: 81 c7 e0 08 ret <== NOT EXECUTED 400036a4: 81 e8 00 00 restore <== NOT EXECUTED } if (flow_rcv) { /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { /* disable interrupts */ rtems_interrupt_disable(level); 400036a8: 7f ff f9 cc call 40001dd8 <== NOT EXECUTED 400036ac: 01 00 00 00 nop <== NOT EXECUTED 400036b0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 400036b4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 400036b8: c4 06 20 94 ld [ %i0 + 0x94 ], %g2 <== NOT EXECUTED if (flow_rcv) { /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { /* disable interrupts */ rtems_interrupt_disable(level); tty->flow_ctrl &= ~FL_OSTOP; 400036bc: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 400036c0: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 400036c4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400036c8: 12 80 00 55 bne 4000381c <== NOT EXECUTED 400036cc: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); } /* reenable interrupts */ rtems_interrupt_enable(level); 400036d0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400036d4: 7f ff f9 c5 call 40001de8 <== NOT EXECUTED 400036d8: b2 06 60 01 inc %i1 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 400036dc: 10 bf ff e8 b 4000367c <== NOT EXECUTED 400036e0: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED /* reenable interrupts */ rtems_interrupt_enable(level); } } else { newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size; 400036e4: d0 06 20 60 ld [ %i0 + 0x60 ], %o0 <== NOT EXECUTED 400036e8: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 400036ec: 40 00 47 68 call 4001548c <.urem> <== NOT EXECUTED 400036f0: 90 02 20 01 inc %o0 <== NOT EXECUTED /* if chars_in_buffer > highwater */ rtems_interrupt_disable(level); 400036f4: 7f ff f9 b9 call 40001dd8 <== NOT EXECUTED 400036f8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 400036fc: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size) 40003700: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 40003704: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 40003708: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 4000370c: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40003710: 40 00 47 5f call 4001548c <.urem> <== NOT EXECUTED 40003714: 90 02 00 10 add %o0, %l0, %o0 <== NOT EXECUTED 40003718: c2 06 20 c0 ld [ %i0 + 0xc0 ], %g1 <== NOT EXECUTED 4000371c: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 40003720: 08 80 00 13 bleu 4000376c <== NOT EXECUTED 40003724: 01 00 00 00 nop <== NOT EXECUTED 40003728: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000372c: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40003730: 12 80 00 0f bne 4000376c <== NOT EXECUTED 40003734: 01 00 00 00 nop <== NOT EXECUTED % tty->rawInBuf.Size) > tty->highwater) && !(tty->flow_ctrl & FL_IREQXOF)) { /* incoming data stream should be stopped */ tty->flow_ctrl |= FL_IREQXOF; 40003738: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000373c: 82 10 60 01 or %g1, 1, %g1 <== NOT EXECUTED 40003740: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 40003744: c4 06 20 b8 ld [ %i0 + 0xb8 ], %g2 <== NOT EXECUTED 40003748: 84 08 a4 02 and %g2, 0x402, %g2 <== NOT EXECUTED 4000374c: 80 a0 a4 00 cmp %g2, 0x400 <== NOT EXECUTED 40003750: 02 80 00 45 be 40003864 <== NOT EXECUTED 40003754: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) 40003758: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000375c: 82 08 61 04 and %g1, 0x104, %g1 <== NOT EXECUTED 40003760: 80 a0 61 00 cmp %g1, 0x100 <== NOT EXECUTED 40003764: 02 80 00 36 be 4000383c <== NOT EXECUTED 40003768: 01 00 00 00 nop <== NOT EXECUTED tty->device.stopRemoteTx(tty->minor); } } } /* reenable interrupts */ rtems_interrupt_enable(level); 4000376c: 7f ff f9 9f call 40001de8 <== NOT EXECUTED 40003770: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { 40003774: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 40003778: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 4000377c: 22 80 00 21 be,a 40003800 <== NOT EXECUTED 40003780: a8 05 20 01 inc %l4 <== NOT EXECUTED dropped++; } else { tty->rawInBuf.theBuf[newTail] = c; 40003784: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED 40003788: e2 28 40 10 stb %l1, [ %g1 + %l0 ] <== NOT EXECUTED tty->rawInBuf.Tail = newTail; /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { 4000378c: c4 06 20 e4 ld [ %i0 + 0xe4 ], %g2 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { dropped++; } else { tty->rawInBuf.theBuf[newTail] = c; tty->rawInBuf.Tail = newTail; 40003790: e0 26 20 60 st %l0, [ %i0 + 0x60 ] <== NOT EXECUTED /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { 40003794: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003798: 32 bf ff b8 bne,a 40003678 <== NOT EXECUTED 4000379c: b2 06 60 01 inc %i1 <== NOT EXECUTED 400037a0: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 400037a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400037a8: 22 bf ff b4 be,a 40003678 <== NOT EXECUTED 400037ac: b2 06 60 01 inc %i1 <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 400037b0: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 400037b4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400037b8: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 400037bc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 400037c0: b2 06 60 01 inc %i1 <== NOT EXECUTED /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); tty->tty_rcvwakeup = 1; 400037c4: 10 bf ff ad b 40003678 <== NOT EXECUTED 400037c8: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED /* FIXME: implement IXANY: any character restarts output */ /* if incoming XON/XOFF controls outgoing stream: */ if (tty->flow_ctrl & FL_MDXON) { /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { if (c == tty->termios.c_cc[VSTART]) { 400037cc: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400037d0: 02 80 00 0e be 40003808 <== NOT EXECUTED 400037d4: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; } else { /* VSTOP received (other code than VSTART) */ /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; 400037d8: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 400037dc: a6 10 20 01 mov 1, %l3 <== NOT EXECUTED tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; } else { /* VSTOP received (other code than VSTART) */ /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; 400037e0: 82 10 60 10 or %g1, 0x10, %g1 <== NOT EXECUTED 400037e4: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED 400037e8: 30 bf ff 9e b,a 40003660 <== NOT EXECUTED flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { /* VSTART received */ /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; 400037ec: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 400037f0: a6 10 20 01 mov 1, %l3 <== NOT EXECUTED flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { /* VSTART received */ /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; 400037f4: 82 08 7f ef and %g1, -17, %g1 <== NOT EXECUTED 400037f8: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED 400037fc: 30 bf ff 99 b,a 40003660 <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 40003800: 10 bf ff 9e b 40003678 <== NOT EXECUTED 40003804: b2 06 60 01 inc %i1 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { if (c == tty->termios.c_cc[VSTART]) { /* received VSTOP and VSTART==VSTOP? */ /* then toggle "stop output" status */ tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 40003808: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 4000380c: a6 10 20 01 mov 1, %l3 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { if (c == tty->termios.c_cc[VSTART]) { /* received VSTOP and VSTART==VSTOP? */ /* then toggle "stop output" status */ tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 40003810: 82 18 60 10 xor %g1, 0x10, %g1 <== NOT EXECUTED 40003814: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED 40003818: 30 bf ff 92 b,a 40003660 <== NOT EXECUTED rtems_interrupt_disable(level); tty->flow_ctrl &= ~FL_OSTOP; /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 4000381c: d2 06 20 84 ld [ %i0 + 0x84 ], %o1 <== NOT EXECUTED 40003820: c2 06 20 7c ld [ %i0 + 0x7c ], %g1 <== NOT EXECUTED 40003824: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 40003828: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 4000382c: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 40003830: 9f c0 80 00 call %g2 <== NOT EXECUTED 40003834: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40003838: 30 bf ff a6 b,a 400036d0 <== NOT EXECUTED 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS ) ) { tty->flow_ctrl |= FL_IRTSOFF; 4000383c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 40003840: c4 06 20 ac ld [ %i0 + 0xac ], %g2 <== NOT EXECUTED 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS ) ) { tty->flow_ctrl |= FL_IRTSOFF; 40003844: 82 10 60 04 or %g1, 4, %g1 <== NOT EXECUTED 40003848: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 4000384c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003850: 02 bf ff c7 be 4000376c <== NOT EXECUTED 40003854: 01 00 00 00 nop <== NOT EXECUTED tty->device.stopRemoteTx(tty->minor); 40003858: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000385c: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 40003860: 30 bf ff c3 b,a 4000376c <== NOT EXECUTED !(tty->flow_ctrl & FL_IREQXOF)) { /* incoming data stream should be stopped */ tty->flow_ctrl |= FL_IREQXOF; if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || 40003864: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40003868: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 4000386c: 12 80 00 06 bne 40003884 <== NOT EXECUTED 40003870: 01 00 00 00 nop <== NOT EXECUTED 40003874: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED 40003878: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000387c: 12 bf ff bc bne 4000376c <== NOT EXECUTED 40003880: 01 00 00 00 nop <== NOT EXECUTED (tty->rawOutBufState == rob_idle)) { /* if tx is stopped due to XOFF or out of data */ /* call write function here */ tty->flow_ctrl |= FL_ISNTXOF; 40003884: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40003888: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 4000388c: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || (tty->rawOutBufState == rob_idle)) { /* if tx is stopped due to XOFF or out of data */ /* call write function here */ tty->flow_ctrl |= FL_ISNTXOF; 40003890: 82 10 60 02 or %g1, 2, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40003894: 92 10 00 16 mov %l6, %o1 <== NOT EXECUTED == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || (tty->rawOutBufState == rob_idle)) { /* if tx is stopped due to XOFF or out of data */ /* call write function here */ tty->flow_ctrl |= FL_ISNTXOF; 40003898: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 4000389c: 9f c0 80 00 call %g2 <== NOT EXECUTED 400038a0: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 400038a4: 30 bf ff b2 b,a 4000376c <== NOT EXECUTED 40003254 : struct rtems_termios_tty *rtems_termios_ttyTail; rtems_id rtems_termios_ttyMutex; void rtems_termios_initialize (void) { 40003254: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code sc; /* * Create the mutex semaphore for the tty list */ if (!rtems_termios_ttyMutex) { 40003258: 03 10 00 66 sethi %hi(0x40019800), %g1 4000325c: c4 00 61 b8 ld [ %g1 + 0x1b8 ], %g2 ! 400199b8 40003260: 80 a0 a0 00 cmp %g2, 0 40003264: 02 80 00 04 be 40003274 40003268: 98 10 61 b8 or %g1, 0x1b8, %o4 4000326c: 81 c7 e0 08 ret 40003270: 81 e8 00 00 restore sc = rtems_semaphore_create ( 40003274: 11 15 14 9b sethi %hi(0x54526c00), %o0 40003278: 92 10 20 01 mov 1, %o1 4000327c: 90 12 21 69 or %o0, 0x169, %o0 40003280: 94 10 20 54 mov 0x54, %o2 40003284: 40 00 09 ea call 40005a2c 40003288: 96 10 20 00 clr %o3 rtems_build_name ('T', 'R', 'm', 'i'), 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_termios_ttyMutex); if (sc != RTEMS_SUCCESSFUL) 4000328c: 80 a2 20 00 cmp %o0, 0 40003290: 02 bf ff f7 be 4000326c 40003294: 01 00 00 00 nop rtems_fatal_error_occurred (sc); 40003298: 40 00 0d d7 call 400069f4 <== NOT EXECUTED 4000329c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400032a0: 01 00 00 00 nop 4000463c : } } rtems_status_code rtems_termios_ioctl (void *arg) { 4000463c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED rtems_libio_ioctl_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004640: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; rtems_status_code sc; args->ioctl_return = 0; 40004644: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED rtems_status_code rtems_termios_ioctl (void *arg) { rtems_libio_ioctl_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004648: e2 00 60 28 ld [ %g1 + 0x28 ], %l1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; 4000464c: e0 06 20 08 ld [ %i0 + 8 ], %l0 <== NOT EXECUTED rtems_status_code sc; args->ioctl_return = 0; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004650: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED } } rtems_status_code rtems_termios_ioctl (void *arg) { 40004654: a4 10 00 18 mov %i0, %l2 <== NOT EXECUTED struct rtems_termios_tty *tty = args->iop->data1; struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; rtems_status_code sc; args->ioctl_return = 0; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004658: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000465c: 40 00 05 cb call 40005d88 <== NOT EXECUTED 40004660: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 40004664: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40004668: 22 80 00 05 be,a 4000467c <== NOT EXECUTED 4000466c: c4 04 a0 04 ld [ %l2 + 4 ], %g2 <== NOT EXECUTED args->ioctl_return = sc; 40004670: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED 40004674: 81 c7 e0 08 ret <== NOT EXECUTED 40004678: 81 e8 00 00 restore <== NOT EXECUTED return sc; } switch (args->command) { 4000467c: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 40004680: 22 80 00 27 be,a 4000471c <== NOT EXECUTED 40004684: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED 40004688: 18 80 00 0e bgu 400046c0 <== NOT EXECUTED 4000468c: 03 10 01 19 sethi %hi(0x40046400), %g1 <== NOT EXECUTED 40004690: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 40004694: 22 80 00 61 be,a 40004818 <== NOT EXECUTED 40004698: d2 04 a0 08 ld [ %l2 + 8 ], %o1 <== NOT EXECUTED 4000469c: 08 80 00 4c bleu 400047cc <== NOT EXECUTED 400046a0: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED if (tty->device.setAttributes) (*tty->device.setAttributes)(tty->minor, &tty->termios); break; case RTEMS_IO_TCDRAIN: drainOutput (tty); 400046a4: 7f ff fe b3 call 40004170 <== NOT EXECUTED 400046a8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED /* Half guess that this is the right operation */ *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; } break; } rtems_semaphore_release (tty->osem); 400046ac: 40 00 06 86 call 400060c4 <== NOT EXECUTED 400046b0: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED args->ioctl_return = sc; 400046b4: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED return sc; } 400046b8: 81 c7 e0 08 ret <== NOT EXECUTED 400046bc: 81 e8 00 00 restore <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) { args->ioctl_return = sc; return sc; } switch (args->command) { 400046c0: 82 10 62 7f or %g1, 0x27f, %g1 <== NOT EXECUTED 400046c4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400046c8: 02 80 00 48 be 400047e8 <== NOT EXECUTED 400046cc: 01 00 00 00 nop <== NOT EXECUTED 400046d0: 18 80 00 1b bgu 4000473c <== NOT EXECUTED 400046d4: 03 10 01 1d sethi %hi(0x40047400), %g1 <== NOT EXECUTED 400046d8: 80 a0 a0 05 cmp %g2, 5 <== NOT EXECUTED 400046dc: 22 80 00 14 be,a 4000472c <== NOT EXECUTED 400046e0: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED default: if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { 400046e4: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED 400046e8: 03 10 00 65 sethi %hi(0x40019400), %g1 <== NOT EXECUTED 400046ec: 82 10 63 e8 or %g1, 0x3e8, %g1 ! 400197e8 <== NOT EXECUTED 400046f0: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 400046f4: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 400046f8: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 400046fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004700: 02 bf ff eb be 400046ac <== NOT EXECUTED 40004704: b0 10 20 0a mov 0xa, %i0 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); 40004708: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000470c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004710: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 40004714: 10 bf ff e6 b 400046ac <== NOT EXECUTED 40004718: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; break; case RTEMS_IO_RCVWAKEUP: tty->tty_rcv = *wakeup; 4000471c: c2 24 60 dc st %g1, [ %l1 + 0xdc ] <== NOT EXECUTED 40004720: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 40004724: 10 bf ff e2 b 400046ac <== NOT EXECUTED 40004728: c4 24 60 e0 st %g2, [ %l1 + 0xe0 ] <== NOT EXECUTED case RTEMS_IO_TCDRAIN: drainOutput (tty); break; case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; 4000472c: c2 24 60 d4 st %g1, [ %l1 + 0xd4 ] <== NOT EXECUTED 40004730: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 40004734: 10 bf ff de b 400046ac <== NOT EXECUTED 40004738: c4 24 60 d8 st %g2, [ %l1 + 0xd8 ] <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) { args->ioctl_return = sc; return sc; } switch (args->command) { 4000473c: 82 10 60 1a or %g1, 0x1a, %g1 <== NOT EXECUTED 40004740: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004744: 02 80 00 1e be 400047bc <== NOT EXECUTED 40004748: 03 20 01 1d sethi %hi(0x80047400), %g1 <== NOT EXECUTED 4000474c: 82 10 60 1b or %g1, 0x1b, %g1 ! 8004741b <== NOT EXECUTED 40004750: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004754: 32 bf ff e5 bne,a 400046e8 <== NOT EXECUTED 40004758: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED #if 1 /* FIXME */ case TIOCSETD: /* * close old line discipline */ if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 4000475c: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED 40004760: 05 10 00 65 sethi %hi(0x40019400), %g2 <== NOT EXECUTED 40004764: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40004768: a0 10 a3 e8 or %g2, 0x3e8, %l0 <== NOT EXECUTED 4000476c: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 40004770: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 40004774: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004778: 22 80 00 06 be,a 40004790 <== NOT EXECUTED 4000477c: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40004780: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004784: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40004788: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } tty->t_line=*(int*)(args->buffer); 4000478c: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED tty->t_sc = NULL; /* ensure that no more valid data */ 40004790: c0 24 60 d0 clr [ %l1 + 0xd0 ] <== NOT EXECUTED * close old line discipline */ if (rtems_termios_linesw[tty->t_line].l_close != NULL) { sc = rtems_termios_linesw[tty->t_line].l_close(tty); } tty->t_line=*(int*)(args->buffer); 40004794: c6 00 40 00 ld [ %g1 ], %g3 <== NOT EXECUTED tty->t_sc = NULL; /* ensure that no more valid data */ /* * open new line discipline */ if (rtems_termios_linesw[tty->t_line].l_open != NULL) { 40004798: 85 28 e0 05 sll %g3, 5, %g2 <== NOT EXECUTED 4000479c: c4 04 00 02 ld [ %l0 + %g2 ], %g2 <== NOT EXECUTED 400047a0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400047a4: 02 bf ff c2 be 400046ac <== NOT EXECUTED 400047a8: c6 24 60 cc st %g3, [ %l1 + 0xcc ] <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_open(tty); 400047ac: 9f c0 80 00 call %g2 <== NOT EXECUTED 400047b0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400047b4: 10 bf ff be b 400046ac <== NOT EXECUTED 400047b8: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } break; case TIOCGETD: *(int*)(args->buffer)=tty->t_line; 400047bc: c4 04 a0 08 ld [ %l2 + 8 ], %g2 <== NOT EXECUTED 400047c0: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED 400047c4: 10 bf ff ba b 400046ac <== NOT EXECUTED 400047c8: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) { args->ioctl_return = sc; return sc; } switch (args->command) { 400047cc: 32 bf ff c7 bne,a 400046e8 <== NOT EXECUTED 400047d0: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED sc = RTEMS_INVALID_NUMBER; } break; case RTEMS_IO_GET_ATTRIBUTES: *(struct termios *)args->buffer = tty->termios; 400047d4: d0 04 a0 08 ld [ %l2 + 8 ], %o0 <== NOT EXECUTED 400047d8: 92 04 60 30 add %l1, 0x30, %o1 <== NOT EXECUTED 400047dc: 40 00 28 2c call 4000e88c <== NOT EXECUTED 400047e0: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 400047e4: 30 bf ff b2 b,a 400046ac <== NOT EXECUTED *(int*)(args->buffer)=tty->t_line; break; #endif case FIONREAD: { int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; 400047e8: c4 04 60 60 ld [ %l1 + 0x60 ], %g2 <== NOT EXECUTED 400047ec: c2 04 60 5c ld [ %l1 + 0x5c ], %g1 <== NOT EXECUTED if ( rawnc < 0 ) 400047f0: 88 a0 80 01 subcc %g2, %g1, %g4 <== NOT EXECUTED 400047f4: 0c 80 00 82 bneg 400049fc <== NOT EXECUTED 400047f8: 01 00 00 00 nop <== NOT EXECUTED rawnc += tty->rawInBuf.Size; /* Half guess that this is the right operation */ *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 400047fc: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 <== NOT EXECUTED 40004800: c4 04 60 24 ld [ %l1 + 0x24 ], %g2 <== NOT EXECUTED 40004804: c6 04 a0 08 ld [ %l2 + 8 ], %g3 <== NOT EXECUTED 40004808: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4000480c: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 40004810: 10 bf ff a7 b 400046ac <== NOT EXECUTED 40004814: c2 20 c0 00 st %g1, [ %g3 ] <== NOT EXECUTED case RTEMS_IO_GET_ATTRIBUTES: *(struct termios *)args->buffer = tty->termios; break; case RTEMS_IO_SET_ATTRIBUTES: tty->termios = *(struct termios *)args->buffer; 40004818: a6 04 60 30 add %l1, 0x30, %l3 <== NOT EXECUTED 4000481c: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 40004820: 40 00 28 1b call 4000e88c <== NOT EXECUTED 40004824: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED /* * check for flow control options to be switched off */ /* check for outgoing XON/XOFF flow control switched off */ if (( tty->flow_ctrl & FL_MDXON) && 40004828: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000482c: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40004830: 02 80 00 19 be 40004894 <== NOT EXECUTED 40004834: 01 00 00 00 nop <== NOT EXECUTED 40004838: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED 4000483c: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 40004840: 12 80 00 15 bne 40004894 <== NOT EXECUTED 40004844: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_iflag & IXON)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDXON | FL_ORCVXOF); 40004848: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000484c: 82 08 7d ef and %g1, -529, %g1 <== NOT EXECUTED 40004850: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* has output been stopped due to received XOFF? */ if (tty->flow_ctrl & FL_OSTOP) { 40004854: c4 04 60 b8 ld [ %l1 + 0xb8 ], %g2 <== NOT EXECUTED 40004858: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 4000485c: 02 80 00 0e be 40004894 <== NOT EXECUTED 40004860: 01 00 00 00 nop <== NOT EXECUTED /* disable interrupts */ rtems_interrupt_disable(level); 40004864: 7f ff f5 5d call 40001dd8 <== NOT EXECUTED 40004868: 01 00 00 00 nop <== NOT EXECUTED 4000486c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 40004870: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 40004874: c4 04 60 94 ld [ %l1 + 0x94 ], %g2 <== NOT EXECUTED /* has output been stopped due to received XOFF? */ if (tty->flow_ctrl & FL_OSTOP) { /* disable interrupts */ rtems_interrupt_disable(level); tty->flow_ctrl &= ~FL_OSTOP; 40004878: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 4000487c: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 40004880: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004884: 12 80 00 6d bne 40004a38 <== NOT EXECUTED 40004888: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); } /* reenable interrupts */ rtems_interrupt_enable(level); 4000488c: 7f ff f5 57 call 40001de8 <== NOT EXECUTED 40004890: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } } /* check for incoming XON/XOFF flow control switched off */ if (( tty->flow_ctrl & FL_MDXOF) && 40004894: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40004898: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 4000489c: 02 80 00 0c be 400048cc <== NOT EXECUTED 400048a0: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 400048a4: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 400048a8: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 400048ac: 12 80 00 08 bne 400048cc <== NOT EXECUTED 400048b0: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_iflag & IXOFF)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDXOF); 400048b4: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400048b8: 82 08 7b ff and %g1, -1025, %g1 <== NOT EXECUTED 400048bc: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* FIXME: what happens, if we had sent XOFF but not yet XON? */ tty->flow_ctrl &= ~(FL_ISNTXOF); 400048c0: c4 04 60 b8 ld [ %l1 + 0xb8 ], %g2 <== NOT EXECUTED 400048c4: 84 08 bf fd and %g2, -3, %g2 <== NOT EXECUTED 400048c8: c4 24 60 b8 st %g2, [ %l1 + 0xb8 ] <== NOT EXECUTED } /* check for incoming RTS/CTS flow control switched off */ if (( tty->flow_ctrl & FL_MDRTS) && 400048cc: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400048d0: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 400048d4: 12 80 00 22 bne 4000495c <== NOT EXECUTED 400048d8: c6 04 60 38 ld [ %l1 + 0x38 ], %g3 <== NOT EXECUTED /* * check for flow control options to be switched on */ /* check for incoming RTS/CTS flow control switched on */ if (tty->termios.c_cflag & CRTSCTS) { 400048dc: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 400048e0: 06 80 00 4a bl 40004a08 <== NOT EXECUTED 400048e4: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl |= FL_MDRTS; } /* check for incoming XON/XOF flow control switched on */ if (tty->termios.c_iflag & IXOFF) { 400048e8: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 400048ec: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 400048f0: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 400048f4: 02 80 00 06 be 4000490c <== NOT EXECUTED 400048f8: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXOF; 400048fc: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40004900: 82 10 64 00 or %g1, 0x400, %g1 <== NOT EXECUTED 40004904: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED } /* check for outgoing XON/XOF flow control switched on */ if (tty->termios.c_iflag & IXON) { 40004908: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED 4000490c: 22 80 00 06 be,a 40004924 <== NOT EXECUTED 40004910: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXON; 40004914: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40004918: 82 10 62 00 or %g1, 0x200, %g1 <== NOT EXECUTED 4000491c: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED tty->termios = *(struct termios *)args->buffer; /* check for and process change in flow control options */ termios_set_flowctrl(tty); if (tty->termios.c_lflag & ICANON) { 40004920: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED 40004924: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40004928: 02 80 00 23 be 400049b4 <== NOT EXECUTED 4000492c: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; } else { if (tty->termios.c_cc[VMIN]) { tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 40004930: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; 40004934: c0 24 60 70 clr [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; 40004938: c0 24 60 74 clr [ %l1 + 0x74 ] <== NOT EXECUTED else { tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT; } } } if (tty->device.setAttributes) 4000493c: c2 04 60 a8 ld [ %l1 + 0xa8 ], %g1 <== NOT EXECUTED 40004940: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004944: 02 bf ff 5a be 400046ac <== NOT EXECUTED 40004948: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.setAttributes)(tty->minor, &tty->termios); 4000494c: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 40004950: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004954: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 40004958: 30 bf ff 55 b,a 400046ac <== NOT EXECUTED /* FIXME: what happens, if we had sent XOFF but not yet XON? */ tty->flow_ctrl &= ~(FL_ISNTXOF); } /* check for incoming RTS/CTS flow control switched off */ if (( tty->flow_ctrl & FL_MDRTS) && 4000495c: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40004960: 06 80 00 2a bl 40004a08 <== NOT EXECUTED 40004964: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_cflag & CRTSCTS)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDRTS); 40004968: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000496c: 82 08 7e ff and %g1, -257, %g1 <== NOT EXECUTED 40004970: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* restart remote Tx, if it was stopped */ if ((tty->flow_ctrl & FL_IRTSOFF) && 40004974: c4 04 60 b8 ld [ %l1 + 0xb8 ], %g2 <== NOT EXECUTED 40004978: 80 88 a0 04 btst 4, %g2 <== NOT EXECUTED 4000497c: 02 80 00 09 be 400049a0 <== NOT EXECUTED 40004980: 01 00 00 00 nop <== NOT EXECUTED 40004984: c2 04 60 b0 ld [ %l1 + 0xb0 ], %g1 <== NOT EXECUTED 40004988: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000498c: 02 80 00 05 be 400049a0 <== NOT EXECUTED 40004990: 01 00 00 00 nop <== NOT EXECUTED (tty->device.startRemoteTx != NULL)) { tty->device.startRemoteTx(tty->minor); 40004994: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004998: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 4000499c: c6 04 60 38 ld [ %l1 + 0x38 ], %g3 <== NOT EXECUTED } tty->flow_ctrl &= ~(FL_IRTSOFF); 400049a0: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400049a4: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 400049a8: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* * check for flow control options to be switched on */ /* check for incoming RTS/CTS flow control switched on */ if (tty->termios.c_cflag & CRTSCTS) { 400049ac: 10 bf ff cd b 400048e0 <== NOT EXECUTED 400049b0: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; } else { rtems_interval ticksPerSecond; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond); 400049b4: 40 00 02 24 call 40005244 <== NOT EXECUTED 400049b8: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED tty->vtimeTicks = tty->termios.c_cc[VTIME] * ticksPerSecond / 10; 400049bc: d2 07 bf f4 ld [ %fp + -12 ], %o1 <== NOT EXECUTED 400049c0: e0 0c 60 46 ldub [ %l1 + 0x46 ], %l0 <== NOT EXECUTED 400049c4: 40 00 41 cc call 400150f4 <.umul> <== NOT EXECUTED 400049c8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400049cc: 40 00 42 04 call 400151dc <.udiv> <== NOT EXECUTED 400049d0: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED if (tty->termios.c_cc[VTIME]) { 400049d4: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 400049d8: 02 80 00 11 be 40004a1c <== NOT EXECUTED 400049dc: d0 24 60 54 st %o0, [ %l1 + 0x54 ] <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; if (tty->termios.c_cc[VMIN]) 400049e0: c2 0c 60 47 ldub [ %l1 + 0x47 ], %g1 <== NOT EXECUTED else { rtems_interval ticksPerSecond; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond); tty->vtimeTicks = tty->termios.c_cc[VTIME] * ticksPerSecond / 10; if (tty->termios.c_cc[VTIME]) { tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 400049e4: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; if (tty->termios.c_cc[VMIN]) 400049e8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400049ec: 12 bf ff d3 bne 40004938 <== NOT EXECUTED 400049f0: d0 24 60 70 st %o0, [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; 400049f4: 10 bf ff d2 b 4000493c <== NOT EXECUTED 400049f8: d0 24 60 74 st %o0, [ %l1 + 0x74 ] <== NOT EXECUTED #endif case FIONREAD: { int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; if ( rawnc < 0 ) rawnc += tty->rawInBuf.Size; 400049fc: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 <== NOT EXECUTED 40004a00: 10 bf ff 7f b 400047fc <== NOT EXECUTED 40004a04: 88 01 00 01 add %g4, %g1, %g4 <== NOT EXECUTED /* * check for flow control options to be switched on */ /* check for incoming RTS/CTS flow control switched on */ if (tty->termios.c_cflag & CRTSCTS) { tty->flow_ctrl |= FL_MDRTS; 40004a08: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40004a0c: 82 10 61 00 or %g1, 0x100, %g1 <== NOT EXECUTED 40004a10: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED } /* check for incoming XON/XOF flow control switched on */ if (tty->termios.c_iflag & IXOFF) { 40004a14: 10 bf ff b6 b 400048ec <== NOT EXECUTED 40004a18: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; } else { if (tty->termios.c_cc[VMIN]) { 40004a1c: c2 0c 60 47 ldub [ %l1 + 0x47 ], %g1 <== NOT EXECUTED 40004a20: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004a24: 32 bf ff c4 bne,a 40004934 <== NOT EXECUTED 40004a28: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; } else { tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT; 40004a2c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40004a30: 10 bf ff c3 b 4000493c <== NOT EXECUTED 40004a34: c2 24 60 6c st %g1, [ %l1 + 0x6c ] <== NOT EXECUTED rtems_interrupt_disable(level); tty->flow_ctrl &= ~FL_OSTOP; /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 40004a38: d2 04 60 84 ld [ %l1 + 0x84 ], %o1 <== NOT EXECUTED 40004a3c: c2 04 60 7c ld [ %l1 + 0x7c ], %g1 <== NOT EXECUTED 40004a40: c4 04 60 a4 ld [ %l1 + 0xa4 ], %g2 <== NOT EXECUTED 40004a44: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 40004a48: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 40004a4c: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004a50: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40004a54: 30 bf ff 8e b,a 4000488c <== NOT EXECUTED 40004c34 : rtems_device_major_number major, rtems_device_minor_number minor, void *arg, const rtems_termios_callbacks *callbacks ) { 40004c34: 9d e3 bf 98 save %sp, -104, %sp struct rtems_termios_tty *tty; /* * See if the device has already been opened */ sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, 40004c38: 29 10 00 66 sethi %hi(0x40019800), %l4 40004c3c: d0 05 21 b8 ld [ %l4 + 0x1b8 ], %o0 ! 400199b8 40004c40: 92 10 20 00 clr %o1 40004c44: 40 00 04 51 call 40005d88 40004c48: 94 10 20 00 clr %o2 RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 40004c4c: a4 92 20 00 orcc %o0, 0, %l2 40004c50: 32 80 00 1e bne,a 40004cc8 40004c54: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED return sc; for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40004c58: 27 10 00 66 sethi %hi(0x40019800), %l3 40004c5c: e0 04 e1 c0 ld [ %l3 + 0x1c0 ], %l0 ! 400199c0 40004c60: 80 a4 20 00 cmp %l0, 0 40004c64: 32 80 00 08 bne,a 40004c84 40004c68: c2 04 20 0c ld [ %l0 + 0xc ], %g1 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40004c6c: 10 80 00 19 b 40004cd0 40004c70: 90 10 20 01 mov 1, %o0 */ sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) return sc; for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40004c74: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40004c78: 02 80 00 16 be 40004cd0 <== NOT EXECUTED 40004c7c: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED if ((tty->major == major) && (tty->minor == minor)) 40004c80: c2 04 20 0c ld [ %l0 + 0xc ], %g1 <== NOT EXECUTED 40004c84: 80 a0 40 18 cmp %g1, %i0 40004c88: 32 bf ff fb bne,a 40004c74 40004c8c: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 40004c90: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40004c94: 80 a0 40 19 cmp %g1, %i1 40004c98: 32 bf ff f7 bne,a 40004c74 40004c9c: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; if (!tty->refcount++) { 40004ca0: c2 04 20 08 ld [ %l0 + 8 ], %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 40004ca4: c4 06 80 00 ld [ %i2 ], %g2 if (!tty->refcount++) { 40004ca8: 82 00 60 01 inc %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 40004cac: e0 20 a0 28 st %l0, [ %g2 + 0x28 ] if (!tty->refcount++) { 40004cb0: 80 a0 60 01 cmp %g1, 1 40004cb4: 02 80 00 1e be 40004d2c 40004cb8: c2 24 20 08 st %g1, [ %l0 + 8 ] (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } } rtems_semaphore_release (rtems_termios_ttyMutex); 40004cbc: 40 00 05 02 call 400060c4 40004cc0: d0 05 21 b8 ld [ %l4 + 0x1b8 ], %o0 return RTEMS_SUCCESSFUL; } 40004cc4: b0 10 00 12 mov %l2, %i0 40004cc8: 81 c7 e0 08 ret 40004ccc: 81 e8 00 00 restore static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40004cd0: 7f ff f6 33 call 4000259c 40004cd4: 92 10 20 e8 mov 0xe8, %o1 if (tty == NULL) { 40004cd8: a2 92 20 00 orcc %o0, 0, %l1 40004cdc: 12 80 00 06 bne 40004cf4 40004ce0: d0 05 21 b8 ld [ %l4 + 0x1b8 ], %o0 */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size); if (tty->rawInBuf.theBuf == NULL) { free(tty); rtems_semaphore_release (rtems_termios_ttyMutex); 40004ce4: 40 00 04 f8 call 400060c4 <== NOT EXECUTED 40004ce8: a4 10 20 1a mov 0x1a, %l2 <== NOT EXECUTED rtems_fatal_error_occurred (sc); } } rtems_semaphore_release (rtems_termios_ttyMutex); return RTEMS_SUCCESSFUL; } 40004cec: 81 c7 e0 08 ret <== NOT EXECUTED 40004cf0: 91 e8 00 12 restore %g0, %l2, %o0 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 40004cf4: 03 10 00 64 sethi %hi(0x40019000), %g1 40004cf8: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 ! 40019018 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40004cfc: a0 10 00 11 mov %l1, %l0 return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 40004d00: c4 24 60 64 st %g2, [ %l1 + 0x64 ] tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size); 40004d04: d0 04 60 64 ld [ %l1 + 0x64 ], %o0 40004d08: 7f ff f5 87 call 40002324 40004d0c: 01 00 00 00 nop if (tty->rawInBuf.theBuf == NULL) { 40004d10: 80 a2 20 00 cmp %o0, 0 40004d14: 12 80 00 25 bne 40004da8 40004d18: d0 24 60 58 st %o0, [ %l1 + 0x58 ] free(tty); 40004d1c: 7f ff f5 59 call 40002280 <== NOT EXECUTED 40004d20: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_semaphore_release (rtems_termios_ttyMutex); 40004d24: 10 bf ff f0 b 40004ce4 <== NOT EXECUTED 40004d28: d0 05 21 b8 ld [ %l4 + 0x1b8 ], %o0 <== NOT EXECUTED c = 'a'; } args->iop->data1 = tty; if (!tty->refcount++) { if (tty->device.firstOpen) 40004d2c: c2 04 20 98 ld [ %l0 + 0x98 ], %g1 40004d30: 80 a0 60 00 cmp %g1, 0 40004d34: 02 80 00 05 be 40004d48 40004d38: 90 10 00 18 mov %i0, %o0 (*tty->device.firstOpen)(major, minor, arg); 40004d3c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40004d40: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004d44: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED /* * start I/O tasks, if needed */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40004d48: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40004d4c: 80 a0 60 02 cmp %g1, 2 40004d50: 12 bf ff db bne 40004cbc 40004d54: 13 10 00 14 sethi %hi(0x40005000), %o1 sc = rtems_task_start(tty->rxTaskId, 40004d58: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED 40004d5c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40004d60: 40 00 06 26 call 400065f8 <== NOT EXECUTED 40004d64: 92 12 61 08 or %o1, 0x108, %o1 <== NOT EXECUTED rtems_termios_rxdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 40004d68: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004d6c: 22 80 00 05 be,a 40004d80 <== NOT EXECUTED 40004d70: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40004d74: 40 00 07 20 call 400069f4 <== NOT EXECUTED 40004d78: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_start(tty->txTaskId, 40004d7c: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 40004d80: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40004d84: 13 10 00 14 sethi %hi(0x40005000), %o1 <== NOT EXECUTED 40004d88: 40 00 06 1c call 400065f8 <== NOT EXECUTED 40004d8c: 92 12 61 98 or %o1, 0x198, %o1 ! 40005198 <== NOT EXECUTED rtems_termios_txdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 40004d90: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004d94: 02 bf ff ca be 40004cbc <== NOT EXECUTED 40004d98: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40004d9c: 40 00 07 16 call 400069f4 <== NOT EXECUTED 40004da0: 01 00 00 00 nop <== NOT EXECUTED 40004da4: 30 bf ff c6 b,a 40004cbc <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate raw output buffer */ tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE; 40004da8: 03 10 00 64 sethi %hi(0x40019000), %g1 40004dac: c4 00 60 1c ld [ %g1 + 0x1c ], %g2 ! 4001901c 40004db0: c4 24 60 88 st %g2, [ %l1 + 0x88 ] tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size); 40004db4: d0 04 60 88 ld [ %l1 + 0x88 ], %o0 40004db8: 7f ff f5 5b call 40002324 40004dbc: 01 00 00 00 nop if (tty->rawOutBuf.theBuf == NULL) { 40004dc0: 80 a2 20 00 cmp %o0, 0 40004dc4: 12 80 00 0b bne 40004df0 40004dc8: d0 24 60 7c st %o0, [ %l1 + 0x7c ] free((void *)(tty->rawInBuf.theBuf)); 40004dcc: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED free(tty); rtems_semaphore_release (rtems_termios_ttyMutex); 40004dd0: a4 10 20 1a mov 0x1a, %l2 <== NOT EXECUTED * allocate cooked buffer */ tty->cbuf = malloc (CBUFSIZE); if (tty->cbuf == NULL) { free((void *)(tty->rawOutBuf.theBuf)); free((void *)(tty->rawInBuf.theBuf)); 40004dd4: 7f ff f5 2b call 40002280 <== NOT EXECUTED 40004dd8: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED free(tty); 40004ddc: 7f ff f5 29 call 40002280 <== NOT EXECUTED 40004de0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_semaphore_release (rtems_termios_ttyMutex); 40004de4: 40 00 04 b8 call 400060c4 <== NOT EXECUTED 40004de8: d0 05 21 b8 ld [ %l4 + 0x1b8 ], %o0 <== NOT EXECUTED 40004dec: 30 bf ff b7 b,a 40004cc8 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate cooked buffer */ tty->cbuf = malloc (CBUFSIZE); 40004df0: 03 10 00 64 sethi %hi(0x40019000), %g1 40004df4: 7f ff f5 4c call 40002324 40004df8: d0 00 60 14 ld [ %g1 + 0x14 ], %o0 ! 40019014 if (tty->cbuf == NULL) { 40004dfc: 80 a2 20 00 cmp %o0, 0 40004e00: 12 80 00 07 bne 40004e1c 40004e04: d0 24 60 1c st %o0, [ %l1 + 0x1c ] free((void *)(tty->rawOutBuf.theBuf)); 40004e08: d0 04 60 7c ld [ %l1 + 0x7c ], %o0 <== NOT EXECUTED 40004e0c: 7f ff f5 1d call 40002280 <== NOT EXECUTED 40004e10: a4 10 20 1a mov 0x1a, %l2 <== NOT EXECUTED free((void *)(tty->rawInBuf.theBuf)); 40004e14: 10 bf ff f0 b 40004dd4 <== NOT EXECUTED 40004e18: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 0; /* * link tty */ tty->forw = rtems_termios_ttyHead; 40004e1c: c2 04 e1 c0 ld [ %l3 + 0x1c0 ], %g1 return RTEMS_NO_MEMORY; } /* * Initialize wakeup callbacks */ tty->tty_snd.sw_pfn = NULL; 40004e20: c0 24 60 d4 clr [ %l1 + 0xd4 ] tty->tty_snd.sw_arg = NULL; 40004e24: c0 24 60 d8 clr [ %l1 + 0xd8 ] tty->tty_rcv.sw_pfn = NULL; 40004e28: c0 24 60 dc clr [ %l1 + 0xdc ] tty->tty_rcv.sw_arg = NULL; 40004e2c: c0 24 60 e0 clr [ %l1 + 0xe0 ] tty->tty_rcvwakeup = 0; 40004e30: c0 24 60 e4 clr [ %l1 + 0xe4 ] /* * link tty */ tty->forw = rtems_termios_ttyHead; 40004e34: c2 24 40 00 st %g1, [ %l1 ] tty->back = NULL; if (rtems_termios_ttyHead != NULL) 40004e38: 80 a0 60 00 cmp %g1, 0 40004e3c: 02 80 00 03 be 40004e48 40004e40: c0 24 60 04 clr [ %l1 + 4 ] rtems_termios_ttyHead->back = tty; 40004e44: e2 20 60 04 st %l1, [ %g1 + 4 ] <== NOT EXECUTED rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) 40004e48: 07 10 00 66 sethi %hi(0x40019800), %g3 40004e4c: c4 00 e1 bc ld [ %g3 + 0x1bc ], %g2 ! 400199bc */ tty->forw = rtems_termios_ttyHead; tty->back = NULL; if (rtems_termios_ttyHead != NULL) rtems_termios_ttyHead->back = tty; rtems_termios_ttyHead = tty; 40004e50: 03 10 00 66 sethi %hi(0x40019800), %g1 if (rtems_termios_ttyTail == NULL) 40004e54: 80 a0 a0 00 cmp %g2, 0 40004e58: 02 80 00 72 be 40005020 40004e5c: e0 20 61 c0 st %l0, [ %g1 + 0x1c0 ] tty->major = major; /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 40004e60: 27 10 00 64 sethi %hi(0x40019000), %l3 40004e64: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 ! 40019020 40004e68: 11 15 14 9a sethi %hi(0x54526800), %o0 rtems_termios_ttyHead->back = tty; rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) rtems_termios_ttyTail = tty; tty->minor = minor; 40004e6c: f2 24 20 10 st %i1, [ %l0 + 0x10 ] tty->major = major; 40004e70: f0 24 20 0c st %i0, [ %l0 + 0xc ] /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 40004e74: 90 12 21 00 or %o0, 0x100, %o0 40004e78: 92 10 20 01 mov 1, %o1 40004e7c: 90 10 40 08 or %g1, %o0, %o0 40004e80: 94 10 20 54 mov 0x54, %o2 40004e84: 96 10 20 00 clr %o3 40004e88: 40 00 02 e9 call 40005a2c 40004e8c: 98 04 20 14 add %l0, 0x14, %o4 rtems_build_name ('T', 'R', 'i', c), 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->isem); if (sc != RTEMS_SUCCESSFUL) 40004e90: 80 a2 20 00 cmp %o0, 0 40004e94: 12 80 00 99 bne 400050f8 40004e98: 01 00 00 00 nop rtems_fatal_error_occurred (sc); sc = rtems_semaphore_create ( 40004e9c: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 40004ea0: 11 15 14 9b sethi %hi(0x54526c00), %o0 40004ea4: 92 10 20 01 mov 1, %o1 40004ea8: 90 12 23 00 or %o0, 0x300, %o0 40004eac: 94 10 20 54 mov 0x54, %o2 40004eb0: 90 10 40 08 or %g1, %o0, %o0 40004eb4: 96 10 20 00 clr %o3 40004eb8: 40 00 02 dd call 40005a2c 40004ebc: 98 04 20 18 add %l0, 0x18, %o4 rtems_build_name ('T', 'R', 'o', c), 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->osem); if (sc != RTEMS_SUCCESSFUL) 40004ec0: 80 a2 20 00 cmp %o0, 0 40004ec4: 12 80 00 89 bne 400050e8 40004ec8: 01 00 00 00 nop rtems_fatal_error_occurred (sc); sc = rtems_semaphore_create ( 40004ecc: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 40004ed0: 11 15 14 9e sethi %hi(0x54527800), %o0 40004ed4: 92 10 20 00 clr %o1 40004ed8: 90 10 40 08 or %g1, %o0, %o0 40004edc: 94 10 20 20 mov 0x20, %o2 40004ee0: 96 10 20 00 clr %o3 40004ee4: 40 00 02 d2 call 40005a2c 40004ee8: 98 04 20 8c add %l0, 0x8c, %o4 rtems_build_name ('T', 'R', 'x', c), 0, RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO, RTEMS_NO_PRIORITY, &tty->rawOutBuf.Semaphore); if (sc != RTEMS_SUCCESSFUL) 40004eec: 80 a2 20 00 cmp %o0, 0 40004ef0: 12 80 00 7a bne 400050d8 40004ef4: 01 00 00 00 nop rtems_fatal_error_occurred (sc); tty->rawOutBufState = rob_idle; 40004ef8: c0 24 20 94 clr [ %l0 + 0x94 ] /* * Set callbacks */ tty->device = *callbacks; 40004efc: 92 10 00 1b mov %i3, %o1 40004f00: 90 04 20 98 add %l0, 0x98, %o0 40004f04: 40 00 26 62 call 4000e88c 40004f08: 94 10 20 20 mov 0x20, %o2 /* * Create I/O tasks */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40004f0c: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40004f10: 80 a0 60 02 cmp %g1, 2 40004f14: 02 80 00 54 be 40005064 40004f18: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 &tty->rxTaskId); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } if ((tty->device.pollRead == NULL) || 40004f1c: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 40004f20: 80 a0 60 00 cmp %g1, 0 40004f24: 02 80 00 41 be 40005028 40004f28: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 40004f2c: c2 04 60 b4 ld [ %l1 + 0xb4 ], %g1 40004f30: 80 a0 60 02 cmp %g1, 2 40004f34: 02 80 00 3d be 40005028 40004f38: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 40004f3c: c8 0c e0 20 ldub [ %l3 + 0x20 ], %g4 tty->termios.c_cc[VDISCARD] = '\017'; tty->termios.c_cc[VWERASE] = '\027'; tty->termios.c_cc[VLNEXT] = '\026'; /* start with no flow control, clear flow control flags */ tty->flow_ctrl = 0; 40004f40: c0 24 60 b8 clr [ %l1 + 0xb8 ] /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 40004f44: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 40004f48: 88 01 20 01 inc %g4 tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 40004f4c: da 04 60 64 ld [ %l1 + 0x64 ], %o5 /* start with no flow control, clear flow control flags */ tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 40004f50: 83 30 60 01 srl %g1, 1, %g1 tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 40004f54: c8 2c e0 20 stb %g4, [ %l3 + 0x20 ] /* start with no flow control, clear flow control flags */ tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 40004f58: c2 24 60 bc st %g1, [ %l1 + 0xbc ] } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 40004f5c: 03 00 00 09 sethi %hi(0x2400), %g1 40004f60: 82 10 61 02 or %g1, 0x102, %g1 ! 2502 tty->termios.c_oflag = OPOST | ONLCR | XTABS; 40004f64: 05 00 00 06 sethi %hi(0x1800), %g2 } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 40004f68: c2 24 60 30 st %g1, [ %l1 + 0x30 ] tty->termios.c_oflag = OPOST | ONLCR | XTABS; 40004f6c: 84 10 a0 05 or %g2, 5, %g2 tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; 40004f70: 03 00 00 20 sethi %hi(0x8000), %g1 40004f74: 82 10 62 3b or %g1, 0x23b, %g1 ! 823b /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; 40004f78: c4 24 60 34 st %g2, [ %l1 + 0x34 ] tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; 40004f7c: c2 24 60 3c st %g1, [ %l1 + 0x3c ] tty->termios.c_cc[VINTR] = '\003'; 40004f80: 84 10 20 03 mov 3, %g2 tty->termios.c_cc[VQUIT] = '\034'; 40004f84: 82 10 20 1c mov 0x1c, %g1 tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; tty->termios.c_cc[VINTR] = '\003'; 40004f88: c4 2c 60 41 stb %g2, [ %l1 + 0x41 ] tty->termios.c_cc[VQUIT] = '\034'; 40004f8c: c2 2c 60 42 stb %g1, [ %l1 + 0x42 ] tty->termios.c_cc[VERASE] = '\177'; 40004f90: 84 10 20 7f mov 0x7f, %g2 tty->termios.c_cc[VKILL] = '\025'; 40004f94: 82 10 20 15 mov 0x15, %g1 tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; tty->termios.c_cc[VINTR] = '\003'; tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; 40004f98: c4 2c 60 43 stb %g2, [ %l1 + 0x43 ] tty->termios.c_cc[VKILL] = '\025'; 40004f9c: c2 2c 60 44 stb %g1, [ %l1 + 0x44 ] tty->termios.c_cc[VEOF] = '\004'; 40004fa0: 84 10 20 04 mov 4, %g2 tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; 40004fa4: 82 10 20 11 mov 0x11, %g1 tty->termios.c_cc[VINTR] = '\003'; tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; 40004fa8: c4 2c 60 45 stb %g2, [ %l1 + 0x45 ] tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; 40004fac: c2 2c 60 49 stb %g1, [ %l1 + 0x49 ] tty->termios.c_cc[VSTOP] = '\023'; 40004fb0: 84 10 20 13 mov 0x13, %g2 tty->termios.c_cc[VSUSP] = '\032'; 40004fb4: 82 10 20 1a mov 0x1a, %g1 /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 40004fb8: 86 10 28 bd mov 0x8bd, %g3 tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; tty->termios.c_cc[VSTOP] = '\023'; 40004fbc: c4 2c 60 4a stb %g2, [ %l1 + 0x4a ] tty->termios.c_cc[VSUSP] = '\032'; 40004fc0: c2 2c 60 4b stb %g1, [ %l1 + 0x4b ] tty->termios.c_cc[VREPRINT] = '\022'; 40004fc4: 84 10 20 12 mov 0x12, %g2 tty->termios.c_cc[VDISCARD] = '\017'; 40004fc8: 82 10 20 0f mov 0xf, %g1 /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 40004fcc: c6 24 60 38 st %g3, [ %l1 + 0x38 ] tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; tty->termios.c_cc[VSTOP] = '\023'; tty->termios.c_cc[VSUSP] = '\032'; tty->termios.c_cc[VREPRINT] = '\022'; 40004fd0: c4 2c 60 4d stb %g2, [ %l1 + 0x4d ] tty->termios.c_cc[VDISCARD] = '\017'; 40004fd4: c2 2c 60 4e stb %g1, [ %l1 + 0x4e ] tty->termios.c_cc[VWERASE] = '\027'; 40004fd8: 84 10 20 17 mov 0x17, %g2 tty->termios.c_cc[VLNEXT] = '\026'; 40004fdc: 86 10 20 16 mov 0x16, %g3 tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 40004fe0: 83 2b 60 01 sll %o5, 1, %g1 tty->termios.c_cc[VINTR] = '\003'; tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; tty->termios.c_cc[VEOL] = '\000'; 40004fe4: c0 2c 60 4c clrb [ %l1 + 0x4c ] tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 40004fe8: 82 00 40 0d add %g1, %o5, %g1 tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; 40004fec: c0 2c 60 51 clrb [ %l1 + 0x51 ] tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 40004ff0: 83 30 60 02 srl %g1, 2, %g1 tty->termios.c_cc[VSTART] = '\021'; tty->termios.c_cc[VSTOP] = '\023'; tty->termios.c_cc[VSUSP] = '\032'; tty->termios.c_cc[VREPRINT] = '\022'; tty->termios.c_cc[VDISCARD] = '\017'; tty->termios.c_cc[VWERASE] = '\027'; 40004ff4: c4 2c 60 4f stb %g2, [ %l1 + 0x4f ] tty->termios.c_cc[VLNEXT] = '\026'; 40004ff8: c6 2c 60 50 stb %g3, [ %l1 + 0x50 ] tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 40004ffc: 89 29 20 18 sll %g4, 0x18, %g4 40005000: 89 39 20 18 sra %g4, 0x18, %g4 40005004: 80 a1 20 7b cmp %g4, 0x7b 40005008: 12 bf ff 26 bne 40004ca0 4000500c: c2 24 60 c0 st %g1, [ %l1 + 0xc0 ] c = 'a'; 40005010: 84 10 20 61 mov 0x61, %g2 <== NOT EXECUTED 40005014: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40005018: 10 bf ff 22 b 40004ca0 <== NOT EXECUTED 4000501c: c4 28 60 20 stb %g2, [ %g1 + 0x20 ] ! 40019020 <== NOT EXECUTED tty->back = NULL; if (rtems_termios_ttyHead != NULL) rtems_termios_ttyHead->back = tty; rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) rtems_termios_ttyTail = tty; 40005020: 10 bf ff 90 b 40004e60 40005024: e0 20 e1 bc st %l0, [ %g3 + 0x1bc ] rtems_fatal_error_occurred (sc); } if ((tty->device.pollRead == NULL) || (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){ sc = rtems_semaphore_create ( 40005028: 11 15 14 9c sethi %hi(0x54527000), %o0 <== NOT EXECUTED 4000502c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40005030: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED 40005034: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 40005038: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 4000503c: 96 10 20 00 clr %o3 <== NOT EXECUTED 40005040: 40 00 02 7b call 40005a2c <== NOT EXECUTED 40005044: 98 04 60 68 add %l1, 0x68, %o4 <== NOT EXECUTED rtems_build_name ('T', 'R', 'r', c), 0, RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->rawInBuf.Semaphore); if (sc != RTEMS_SUCCESSFUL) 40005048: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000504c: 22 bf ff bd be,a 40004f40 <== NOT EXECUTED 40005050: c8 0c e0 20 ldub [ %l3 + 0x20 ], %g4 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005054: 40 00 06 68 call 400069f4 <== NOT EXECUTED 40005058: 01 00 00 00 nop <== NOT EXECUTED tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 4000505c: 10 bf ff b9 b 40004f40 <== NOT EXECUTED 40005060: c8 0c e0 20 ldub [ %l3 + 0x20 ], %g4 <== NOT EXECUTED /* * Create I/O tasks */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { sc = rtems_task_create ( 40005064: 11 15 1e 15 sethi %hi(0x54785400), %o0 <== NOT EXECUTED 40005068: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 4000506c: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 40005070: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 40005074: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 40005078: 98 10 20 00 clr %o4 <== NOT EXECUTED 4000507c: 40 00 04 5f call 400061f8 <== NOT EXECUTED 40005080: 9a 04 20 c8 add %l0, 0xc8, %o5 <== NOT EXECUTED TERMIOS_TXTASK_STACKSIZE, RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR, RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL, &tty->txTaskId); if (sc != RTEMS_SUCCESSFUL) 40005084: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005088: 02 80 00 05 be 4000509c <== NOT EXECUTED 4000508c: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005090: 40 00 06 59 call 400069f4 <== NOT EXECUTED 40005094: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_create ( 40005098: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 <== NOT EXECUTED 4000509c: 11 14 9e 15 sethi %hi(0x52785400), %o0 <== NOT EXECUTED 400050a0: 92 10 20 09 mov 9, %o1 <== NOT EXECUTED 400050a4: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 400050a8: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 400050ac: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 400050b0: 98 10 20 00 clr %o4 <== NOT EXECUTED 400050b4: 40 00 04 51 call 400061f8 <== NOT EXECUTED 400050b8: 9a 04 20 c4 add %l0, 0xc4, %o5 <== NOT EXECUTED TERMIOS_RXTASK_STACKSIZE, RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR, RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL, &tty->rxTaskId); if (sc != RTEMS_SUCCESSFUL) 400050bc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400050c0: 22 bf ff 98 be,a 40004f20 <== NOT EXECUTED 400050c4: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400050c8: 40 00 06 4b call 400069f4 <== NOT EXECUTED 400050cc: 01 00 00 00 nop <== NOT EXECUTED } if ((tty->device.pollRead == NULL) || 400050d0: 10 bf ff 94 b 40004f20 <== NOT EXECUTED 400050d4: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 0, RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO, RTEMS_NO_PRIORITY, &tty->rawOutBuf.Semaphore); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 400050d8: 40 00 06 47 call 400069f4 <== NOT EXECUTED 400050dc: 01 00 00 00 nop <== NOT EXECUTED tty->rawOutBufState = rob_idle; 400050e0: 10 bf ff 87 b 40004efc <== NOT EXECUTED 400050e4: c0 24 20 94 clr [ %l0 + 0x94 ] <== NOT EXECUTED 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->osem); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 400050e8: 40 00 06 43 call 400069f4 <== NOT EXECUTED 400050ec: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 400050f0: 10 bf ff 78 b 40004ed0 <== NOT EXECUTED 400050f4: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 <== NOT EXECUTED 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->isem); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 400050f8: 40 00 06 3f call 400069f4 <== NOT EXECUTED 400050fc: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 40005100: 10 bf ff 68 b 40004ea0 <== NOT EXECUTED 40005104: c2 4c e0 20 ldsb [ %l3 + 0x20 ], %g1 <== NOT EXECUTED 400038a8 : * Send characters to device-specific code */ void rtems_termios_puts ( const void *_buf, int len, struct rtems_termios_tty *tty) { 400038a8: 9d e3 bf 98 save %sp, -104, %sp const unsigned char *buf = _buf; unsigned int newHead; rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) { 400038ac: c2 06 a0 b4 ld [ %i2 + 0xb4 ], %g1 400038b0: 80 a0 60 00 cmp %g1, 0 400038b4: 22 80 00 4c be,a 400039e4 400038b8: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 (*tty->device.write)(tty->minor, (void *)buf, len); return; } newHead = tty->rawOutBuf.Head; 400038bc: e4 06 a0 80 ld [ %i2 + 0x80 ], %l2 <== NOT EXECUTED while (len) { 400038c0: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400038c4: 02 80 00 4c be 400039f4 <== NOT EXECUTED 400038c8: 01 00 00 00 nop <== NOT EXECUTED * len -= ncopy * * To minimize latency, the memcpy should be done * with interrupts enabled. */ newHead = (newHead + 1) % tty->rawOutBuf.Size; 400038cc: d2 06 a0 88 ld [ %i2 + 0x88 ], %o1 <== NOT EXECUTED 400038d0: 40 00 46 ef call 4001548c <.urem> <== NOT EXECUTED 400038d4: 90 04 a0 01 add %l2, 1, %o0 <== NOT EXECUTED rtems_interrupt_disable (level); 400038d8: 7f ff f9 40 call 40001dd8 <== NOT EXECUTED 400038dc: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 400038e0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED while (newHead == tty->rawOutBuf.Tail) { 400038e4: e2 06 a0 84 ld [ %i2 + 0x84 ], %l1 <== NOT EXECUTED 400038e8: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED 400038ec: 02 80 00 0a be 40003914 <== NOT EXECUTED 400038f0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 400038f4: 30 80 00 1b b,a 40003960 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); 400038f8: 7f ff f9 38 call 40001dd8 <== NOT EXECUTED 400038fc: 01 00 00 00 nop <== NOT EXECUTED 40003900: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED * To minimize latency, the memcpy should be done * with interrupts enabled. */ newHead = (newHead + 1) % tty->rawOutBuf.Size; rtems_interrupt_disable (level); while (newHead == tty->rawOutBuf.Tail) { 40003904: c2 06 a0 84 ld [ %i2 + 0x84 ], %g1 <== NOT EXECUTED 40003908: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 4000390c: 12 80 00 15 bne 40003960 <== NOT EXECUTED 40003910: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_wait; 40003914: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 40003918: 7f ff f9 34 call 40001de8 <== NOT EXECUTED 4000391c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 40003920: d0 06 a0 8c ld [ %i2 + 0x8c ], %o0 <== NOT EXECUTED 40003924: 92 10 20 00 clr %o1 <== NOT EXECUTED 40003928: 40 00 09 18 call 40005d88 <== NOT EXECUTED 4000392c: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 40003930: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003934: 02 bf ff f1 be 400038f8 <== NOT EXECUTED 40003938: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 4000393c: 40 00 0c 2e call 400069f4 <== NOT EXECUTED 40003940: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 40003944: 7f ff f9 25 call 40001dd8 <== NOT EXECUTED 40003948: 01 00 00 00 nop <== NOT EXECUTED 4000394c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED * To minimize latency, the memcpy should be done * with interrupts enabled. */ newHead = (newHead + 1) % tty->rawOutBuf.Size; rtems_interrupt_disable (level); while (newHead == tty->rawOutBuf.Tail) { 40003950: c2 06 a0 84 ld [ %i2 + 0x84 ], %g1 <== NOT EXECUTED 40003954: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40003958: 02 bf ff ef be 40003914 <== NOT EXECUTED 4000395c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); } tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++; 40003960: c8 06 a0 80 ld [ %i2 + 0x80 ], %g4 <== NOT EXECUTED 40003964: c4 0e 00 00 ldub [ %i0 ], %g2 <== NOT EXECUTED 40003968: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 4000396c: c4 28 40 04 stb %g2, [ %g1 + %g4 ] <== NOT EXECUTED tty->rawOutBuf.Head = newHead; if (tty->rawOutBufState == rob_idle) { 40003970: c6 06 a0 94 ld [ %i2 + 0x94 ], %g3 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); } tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++; tty->rawOutBuf.Head = newHead; 40003974: e4 26 a0 80 st %l2, [ %i2 + 0x80 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_idle) { 40003978: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4000397c: 12 80 00 0b bne 400039a8 <== NOT EXECUTED 40003980: 01 00 00 00 nop <== NOT EXECUTED /* check, whether XOFF has been received */ if (!(tty->flow_ctrl & FL_ORCVXOF)) { 40003984: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 40003988: 80 88 60 10 btst 0x10, %g1 <== NOT EXECUTED 4000398c: 02 80 00 0d be 400039c0 <== NOT EXECUTED 40003990: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.write)(tty->minor, (char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); } else { /* remember that output has been stopped due to flow ctrl*/ tty->flow_ctrl |= FL_OSTOP; 40003994: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 40003998: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED 4000399c: c2 26 a0 b8 st %g1, [ %i2 + 0xb8 ] <== NOT EXECUTED } tty->rawOutBufState = rob_busy; 400039a0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400039a4: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== NOT EXECUTED } rtems_interrupt_enable (level); 400039a8: 7f ff f9 10 call 40001de8 <== NOT EXECUTED 400039ac: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) { (*tty->device.write)(tty->minor, (void *)buf, len); return; } newHead = tty->rawOutBuf.Head; while (len) { 400039b0: b2 86 7f ff addcc %i1, -1, %i1 <== NOT EXECUTED 400039b4: 02 80 00 10 be 400039f4 <== NOT EXECUTED 400039b8: b0 06 20 01 inc %i0 <== NOT EXECUTED 400039bc: 30 bf ff c4 b,a 400038cc <== NOT EXECUTED tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++; tty->rawOutBuf.Head = newHead; if (tty->rawOutBufState == rob_idle) { /* check, whether XOFF has been received */ if (!(tty->flow_ctrl & FL_ORCVXOF)) { (*tty->device.write)(tty->minor, 400039c0: d2 06 a0 84 ld [ %i2 + 0x84 ], %o1 <== NOT EXECUTED 400039c4: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 400039c8: c4 06 a0 a4 ld [ %i2 + 0xa4 ], %g2 <== NOT EXECUTED 400039cc: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 <== NOT EXECUTED 400039d0: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 400039d4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400039d8: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED } else { /* remember that output has been stopped due to flow ctrl*/ tty->flow_ctrl |= FL_OSTOP; } tty->rawOutBufState = rob_busy; 400039dc: 10 bf ff f2 b 400039a4 <== NOT EXECUTED 400039e0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED unsigned int newHead; rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) { (*tty->device.write)(tty->minor, (void *)buf, len); 400039e4: c2 06 a0 a4 ld [ %i2 + 0xa4 ], %g1 400039e8: 92 10 00 18 mov %i0, %o1 400039ec: 9f c0 40 00 call %g1 400039f0: 94 10 00 19 mov %i1, %o2 400039f4: 81 c7 e0 08 ret 400039f8: 81 e8 00 00 restore 40004220 : return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 40004220: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004224: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED uint32_t count = args->count; 40004228: e2 06 20 0c ld [ %i0 + 0xc ], %l1 <== NOT EXECUTED rtems_status_code rtems_termios_read (void *arg) { rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 4000422c: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 <== NOT EXECUTED uint32_t count = args->count; char *buffer = args->buffer; 40004230: e4 06 20 08 ld [ %i0 + 8 ], %l2 <== NOT EXECUTED rtems_status_code sc; sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004234: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 40004238: a8 10 00 18 mov %i0, %l4 <== NOT EXECUTED struct rtems_termios_tty *tty = args->iop->data1; uint32_t count = args->count; char *buffer = args->buffer; rtems_status_code sc; sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 4000423c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40004240: 40 00 06 d2 call 40005d88 <== NOT EXECUTED 40004244: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 40004248: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4000424c: 12 80 00 10 bne 4000428c <== NOT EXECUTED 40004250: 03 10 00 65 sethi %hi(0x40019400), %g1 <== NOT EXECUTED return sc; if (rtems_termios_linesw[tty->t_line].l_read != NULL) { 40004254: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 <== NOT EXECUTED 40004258: 82 10 63 e8 or %g1, 0x3e8, %g1 <== NOT EXECUTED 4000425c: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 40004260: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 40004264: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED 40004268: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000426c: 02 80 00 0a be 40004294 <== NOT EXECUTED 40004270: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_read(tty,args); 40004274: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004278: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000427c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 40004280: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED 40004284: 40 00 07 90 call 400060c4 <== NOT EXECUTED 40004288: c0 24 20 e4 clr [ %l0 + 0xe4 ] <== NOT EXECUTED 4000428c: 81 c7 e0 08 ret <== NOT EXECUTED 40004290: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->cindex == tty->ccount) { 40004294: c4 04 20 24 ld [ %l0 + 0x24 ], %g2 <== NOT EXECUTED 40004298: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 4000429c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400042a0: 22 80 00 20 be,a 40004320 <== NOT EXECUTED 400042a4: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 400042a8: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 400042ac: 22 80 00 16 be,a 40004304 <== NOT EXECUTED 400042b0: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED 400042b4: c6 04 20 24 ld [ %l0 + 0x24 ], %g3 <== NOT EXECUTED 400042b8: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 400042bc: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400042c0: 26 80 00 09 bl,a 400042e4 <== NOT EXECUTED 400042c4: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 400042c8: 10 80 00 0f b 40004304 <== NOT EXECUTED 400042cc: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 400042d0: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 400042d4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400042d8: 24 80 00 0b ble,a 40004304 <== NOT EXECUTED 400042dc: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; 400042e0: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 400042e4: a2 84 7f ff addcc %l1, -1, %l1 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; 400042e8: c4 08 40 03 ldub [ %g1 + %g3 ], %g2 <== NOT EXECUTED 400042ec: 86 00 e0 01 inc %g3 <== NOT EXECUTED 400042f0: c4 2c 80 00 stb %g2, [ %l2 ] <== NOT EXECUTED 400042f4: c6 24 20 24 st %g3, [ %l0 + 0x24 ] <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 400042f8: 12 bf ff f6 bne 400042d0 <== NOT EXECUTED 400042fc: a4 04 a0 01 inc %l2 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 40004300: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED tty->tty_rcvwakeup = 0; 40004304: c0 24 20 e4 clr [ %l0 + 0xe4 ] <== NOT EXECUTED } while (count && (tty->cindex < tty->ccount)) { *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 40004308: 82 20 40 11 sub %g1, %l1, %g1 <== NOT EXECUTED 4000430c: c2 25 20 14 st %g1, [ %l4 + 0x14 ] <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 40004310: 40 00 07 6d call 400060c4 <== NOT EXECUTED 40004314: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return sc; } 40004318: 81 c7 e0 08 ret <== NOT EXECUTED 4000431c: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->cindex == tty->ccount) { tty->cindex = tty->ccount = 0; tty->read_start_column = tty->column; if (tty->device.pollRead != NULL 40004320: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED rtems_semaphore_release (tty->isem); return sc; } if (tty->cindex == tty->ccount) { tty->cindex = tty->ccount = 0; tty->read_start_column = tty->column; 40004324: c2 24 20 2c st %g1, [ %l0 + 0x2c ] <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); return sc; } if (tty->cindex == tty->ccount) { tty->cindex = tty->ccount = 0; 40004328: c0 24 20 20 clr [ %l0 + 0x20 ] <== NOT EXECUTED tty->read_start_column = tty->column; if (tty->device.pollRead != NULL 4000432c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004330: 02 80 00 06 be 40004348 <== NOT EXECUTED 40004334: c0 24 20 24 clr [ %l0 + 0x24 ] <== NOT EXECUTED 40004338: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED 4000433c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004340: 22 80 00 51 be,a 40004484 <== NOT EXECUTED 40004344: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED * Fill the input buffer from the raw input queue */ static rtems_status_code fillBufferQueue (struct rtems_termios_tty *tty) { rtems_interval timeout = tty->rawInBufSemaphoreFirstTimeout; 40004348: e6 04 20 74 ld [ %l0 + 0x74 ], %l3 <== NOT EXECUTED 4000434c: aa 10 20 01 mov 1, %l5 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 40004350: 2d 10 00 64 sethi %hi(0x40019000), %l6 <== NOT EXECUTED if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF)) == (FL_MDXON | FL_ISNTXOF)) && ((tty->rawOutBufState == rob_idle) || (tty->flow_ctrl & FL_OSTOP))) { /* XON should be sent now... */ (*tty->device.write)(tty->minor, 40004354: ae 04 20 49 add %l0, 0x49, %l7 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 40004358: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 <== NOT EXECUTED 4000435c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40004360: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004364: 02 80 00 3e be 4000445c <== NOT EXECUTED 40004368: 80 a5 60 00 cmp %l5, 0 <== NOT EXECUTED 4000436c: c2 05 a0 14 ld [ %l6 + 0x14 ], %g1 <== NOT EXECUTED 40004370: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 <== NOT EXECUTED 40004374: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40004378: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4000437c: 16 80 00 38 bge 4000445c <== NOT EXECUTED 40004380: 80 a5 60 00 cmp %l5, 0 <== NOT EXECUTED (tty->ccount < (CBUFSIZE-1))) { unsigned char c; unsigned int newHead; newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size; 40004384: d0 04 20 5c ld [ %l0 + 0x5c ], %o0 <== NOT EXECUTED 40004388: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 4000438c: 40 00 44 40 call 4001548c <.urem> <== NOT EXECUTED 40004390: 90 02 20 01 inc %o0 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 40004394: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && (tty->ccount < (CBUFSIZE-1))) { unsigned char c; unsigned int newHead; newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size; 40004398: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 4000439c: e6 08 40 08 ldub [ %g1 + %o0 ], %l3 <== NOT EXECUTED tty->rawInBuf.Head = newHead; 400043a0: d0 24 20 5c st %o0, [ %l0 + 0x5c ] <== NOT EXECUTED if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size) 400043a4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 400043a8: d0 04 20 64 ld [ %l0 + 0x64 ], %o0 <== NOT EXECUTED 400043ac: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 400043b0: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 400043b4: 40 00 44 36 call 4001548c <.urem> <== NOT EXECUTED 400043b8: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 400043bc: c2 04 20 bc ld [ %l0 + 0xbc ], %g1 <== NOT EXECUTED 400043c0: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 400043c4: 3a 80 00 18 bcc,a 40004424 <== NOT EXECUTED 400043c8: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED % tty->rawInBuf.Size) < tty->lowwater) { tty->flow_ctrl &= ~FL_IREQXOF; 400043cc: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 400043d0: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 400043d4: c2 24 20 b8 st %g1, [ %l0 + 0xb8 ] <== NOT EXECUTED /* if tx stopped and XON should be sent... */ if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF)) 400043d8: c4 04 20 b8 ld [ %l0 + 0xb8 ], %g2 <== NOT EXECUTED 400043dc: 84 08 a2 02 and %g2, 0x202, %g2 <== NOT EXECUTED 400043e0: 80 a0 a2 02 cmp %g2, 0x202 <== NOT EXECUTED 400043e4: 22 80 00 88 be,a 40004604 <== NOT EXECUTED 400043e8: c2 04 20 94 ld [ %l0 + 0x94 ], %g1 <== NOT EXECUTED /* XON should be sent now... */ (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1); } else if (tty->flow_ctrl & FL_MDRTS) { 400043ec: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 400043f0: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 400043f4: 22 80 00 0c be,a 40004424 <== NOT EXECUTED 400043f8: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_IRTSOFF; 400043fc: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 40004400: c4 04 20 b0 ld [ %l0 + 0xb0 ], %g2 <== NOT EXECUTED (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1); } else if (tty->flow_ctrl & FL_MDRTS) { tty->flow_ctrl &= ~FL_IRTSOFF; 40004404: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 40004408: c2 24 20 b8 st %g1, [ %l0 + 0xb8 ] <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 4000440c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004410: 22 80 00 05 be,a 40004424 <== NOT EXECUTED 40004414: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->device.startRemoteTx(tty->minor); 40004418: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000441c: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 40004420: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 40004424: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40004428: 02 80 00 63 be 400045b4 <== NOT EXECUTED 4000442c: 90 0c e0 ff and %l3, 0xff, %o0 <== NOT EXECUTED if (siproc (c, tty)) 40004430: 7f ff ff 07 call 4000404c <== NOT EXECUTED 40004434: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40004438: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000443c: 32 80 00 02 bne,a 40004444 <== NOT EXECUTED 40004440: aa 10 20 00 clr %l5 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 40004444: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 <== NOT EXECUTED 40004448: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 4000444c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004450: 12 bf ff c7 bne 4000436c <== NOT EXECUTED 40004454: e6 04 20 70 ld [ %l0 + 0x70 ], %l3 <== NOT EXECUTED } /* * Wait for characters */ if ( wait ) { 40004458: 80 a5 60 00 cmp %l5, 0 <== NOT EXECUTED 4000445c: 02 bf ff 94 be 400042ac <== NOT EXECUTED 40004460: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawInBuf.Semaphore, 40004464: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED 40004468: d2 04 20 6c ld [ %l0 + 0x6c ], %o1 <== NOT EXECUTED 4000446c: 40 00 06 47 call 40005d88 <== NOT EXECUTED 40004470: 94 10 00 13 mov %l3, %o2 <== NOT EXECUTED tty->rawInBufSemaphoreOptions, timeout); if (sc != RTEMS_SUCCESSFUL) 40004474: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004478: 02 bf ff b8 be 40004358 <== NOT EXECUTED 4000447c: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40004480: 30 bf ff 8b b,a 400042ac <== NOT EXECUTED static rtems_status_code fillBufferPoll (struct rtems_termios_tty *tty) { int n; if (tty->termios.c_lflag & ICANON) { 40004484: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40004488: 12 80 00 3a bne 40004570 <== NOT EXECUTED 4000448c: 01 00 00 00 nop <== NOT EXECUTED } } } else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 40004490: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED 40004494: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004498: 12 80 00 07 bne 400044b4 <== NOT EXECUTED 4000449c: aa 07 bf f4 add %fp, -12, %l5 <== NOT EXECUTED 400044a0: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 400044a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400044a8: 12 80 00 3f bne 400045a4 <== NOT EXECUTED 400044ac: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED else { siproc (n, tty); if (tty->ccount >= tty->termios.c_cc[VMIN]) break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 400044b0: aa 07 bf f4 add %fp, -12, %l5 <== NOT EXECUTED } } else { if (!tty->termios.c_cc[VTIME]) break; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); 400044b4: a6 07 bf f0 add %fp, -16, %l3 <== NOT EXECUTED else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); for (;;) { n = (*tty->device.pollRead)(tty->minor); 400044b8: 9f c0 80 00 call %g2 <== NOT EXECUTED 400044bc: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 400044c0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400044c4: 26 80 00 17 bl,a 40004520 <== NOT EXECUTED 400044c8: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED } } rtems_task_wake_after (1); } else { siproc (n, tty); 400044cc: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED 400044d0: 7f ff fe df call 4000404c <== NOT EXECUTED 400044d4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 400044d8: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 400044dc: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 400044e0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400044e4: 16 bf ff 71 bge 400042a8 <== NOT EXECUTED 400044e8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 400044ec: 22 80 00 07 be,a 40004508 <== NOT EXECUTED 400044f0: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED 400044f4: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 400044f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400044fc: 12 80 00 26 bne 40004594 <== NOT EXECUTED 40004500: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 40004504: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); for (;;) { n = (*tty->device.pollRead)(tty->minor); 40004508: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000450c: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 40004510: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004514: 36 bf ff ef bge,a 400044d0 <== NOT EXECUTED 40004518: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED if (tty->termios.c_cc[VMIN]) { 4000451c: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED 40004520: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004524: 02 80 00 2c be 400045d4 <== NOT EXECUTED 40004528: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED if (tty->termios.c_cc[VTIME] && tty->ccount) { 4000452c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004530: 02 80 00 06 be 40004548 <== NOT EXECUTED 40004534: 01 00 00 00 nop <== NOT EXECUTED 40004538: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 4000453c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004540: 12 80 00 28 bne 400045e0 <== NOT EXECUTED 40004544: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); if ((now - then) > tty->vtimeTicks) { break; } } rtems_task_wake_after (1); 40004548: 40 00 08 6f call 40006704 <== NOT EXECUTED 4000454c: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 40004550: 10 bf ff da b 400044b8 <== NOT EXECUTED 40004554: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED n = (*tty->device.pollRead)(tty->minor); if (n < 0) { rtems_task_wake_after (1); } else { if (siproc (n, tty)) 40004558: 7f ff fe bd call 4000404c <== NOT EXECUTED 4000455c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40004560: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004564: 12 bf ff 52 bne 400042ac <== NOT EXECUTED 40004568: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4000456c: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED { int n; if (tty->termios.c_lflag & ICANON) { for (;;) { n = (*tty->device.pollRead)(tty->minor); 40004570: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004574: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 40004578: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000457c: 16 bf ff f7 bge 40004558 <== NOT EXECUTED 40004580: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED rtems_task_wake_after (1); 40004584: 40 00 08 60 call 40006704 <== NOT EXECUTED 40004588: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 4000458c: 10 bf ff f9 b 40004570 <== NOT EXECUTED 40004590: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED else { siproc (n, tty); if (tty->ccount >= tty->termios.c_cc[VMIN]) break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 40004594: 40 00 03 2c call 40005244 <== NOT EXECUTED 40004598: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 4000459c: 10 bf ff db b 40004508 <== NOT EXECUTED 400045a0: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED } } else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 400045a4: 40 00 03 28 call 40005244 <== NOT EXECUTED 400045a8: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 400045ac: 10 bf ff c1 b 400044b0 <== NOT EXECUTED 400045b0: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED if (tty->termios.c_lflag & ICANON) { if (siproc (c, tty)) wait = 0; } else { siproc (c, tty); 400045b4: 7f ff fe a6 call 4000404c <== NOT EXECUTED 400045b8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 400045bc: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 400045c0: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 400045c4: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400045c8: 36 bf ff 9f bge,a 40004444 <== NOT EXECUTED 400045cc: aa 10 20 00 clr %l5 <== NOT EXECUTED 400045d0: 30 bf ff 9d b,a 40004444 <== NOT EXECUTED break; } } } else { if (!tty->termios.c_cc[VTIME]) 400045d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400045d8: 02 bf ff 34 be 400042a8 <== NOT EXECUTED 400045dc: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED break; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); 400045e0: 40 00 03 19 call 40005244 <== NOT EXECUTED 400045e4: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED if ((now - then) > tty->vtimeTicks) { 400045e8: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 <== NOT EXECUTED 400045ec: c4 1f bf f0 ldd [ %fp + -16 ], %g2 <== NOT EXECUTED 400045f0: 84 20 80 03 sub %g2, %g3, %g2 <== NOT EXECUTED 400045f4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400045f8: 08 bf ff d4 bleu 40004548 <== NOT EXECUTED 400045fc: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40004600: 30 bf ff 2b b,a 400042ac <== NOT EXECUTED if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size) % tty->rawInBuf.Size) < tty->lowwater) { tty->flow_ctrl &= ~FL_IREQXOF; /* if tx stopped and XON should be sent... */ if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF)) 40004604: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004608: 22 80 00 07 be,a 40004624 <== NOT EXECUTED 4000460c: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 40004610: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40004614: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004618: 02 bf ff 75 be 400043ec <== NOT EXECUTED 4000461c: 01 00 00 00 nop <== NOT EXECUTED == (FL_MDXON | FL_ISNTXOF)) && ((tty->rawOutBufState == rob_idle) || (tty->flow_ctrl & FL_OSTOP))) { /* XON should be sent now... */ (*tty->device.write)(tty->minor, 40004620: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 40004624: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED 40004628: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 4000462c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004630: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 40004634: 10 bf ff 7c b 40004424 <== NOT EXECUTED 40004638: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 400032dc : * in task-driven mode, this function is called in Tx task context * in interrupt-driven mode, this function is called in TxIRQ context */ int rtems_termios_refill_transmitter (struct rtems_termios_tty *tty) { 400032dc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int nToSend; rtems_interrupt_level level; int len; /* check for XOF/XON to send */ if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF)) 400032e0: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400032e4: 82 08 64 03 and %g1, 0x403, %g1 <== NOT EXECUTED 400032e8: 80 a0 64 01 cmp %g1, 0x401 <== NOT EXECUTED 400032ec: 22 80 00 41 be,a 400033f0 <== NOT EXECUTED 400032f0: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; rtems_interrupt_enable(level); nToSend = 1; } else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF)) 400032f4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400032f8: 82 08 60 03 and %g1, 3, %g1 <== NOT EXECUTED 400032fc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40003300: 22 80 00 4c be,a 40003430 <== NOT EXECUTED 40003304: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED rtems_interrupt_enable(level); nToSend = 1; } else { if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) { 40003308: c4 06 20 80 ld [ %i0 + 0x80 ], %g2 <== NOT EXECUTED 4000330c: c2 06 20 84 ld [ %i0 + 0x84 ], %g1 <== NOT EXECUTED 40003310: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40003314: 22 80 00 2f be,a 400033d0 <== NOT EXECUTED 40003318: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawOutBuf.Semaphore); } return 0; } rtems_interrupt_disable(level); 4000331c: 7f ff fa af call 40001dd8 <== NOT EXECUTED 40003320: 01 00 00 00 nop <== NOT EXECUTED len = tty->t_dqlen; 40003324: e0 06 20 90 ld [ %i0 + 0x90 ], %l0 <== NOT EXECUTED tty->t_dqlen = 0; 40003328: c0 26 20 90 clr [ %i0 + 0x90 ] <== NOT EXECUTED rtems_interrupt_enable(level); 4000332c: 7f ff fa af call 40001de8 <== NOT EXECUTED 40003330: 01 00 00 00 nop <== NOT EXECUTED newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size; 40003334: d0 06 20 84 ld [ %i0 + 0x84 ], %o0 <== NOT EXECUTED 40003338: d2 06 20 88 ld [ %i0 + 0x88 ], %o1 <== NOT EXECUTED 4000333c: 40 00 48 54 call 4001548c <.urem> <== NOT EXECUTED 40003340: 90 04 00 08 add %l0, %o0, %o0 <== NOT EXECUTED tty->rawOutBuf.Tail = newTail; if (tty->rawOutBufState == rob_wait) { 40003344: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED len = tty->t_dqlen; tty->t_dqlen = 0; rtems_interrupt_enable(level); newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size; tty->rawOutBuf.Tail = newTail; 40003348: d0 26 20 84 st %o0, [ %i0 + 0x84 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_wait) { 4000334c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40003350: 02 80 00 54 be 400034a0 <== NOT EXECUTED 40003354: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * wake up any pending writer task */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); } if (newTail == tty->rawOutBuf.Head) { 40003358: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 4000335c: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 40003360: 22 80 00 44 be,a 40003470 <== NOT EXECUTED 40003364: c2 06 20 d4 ld [ %i0 + 0xd4 ], %g1 <== NOT EXECUTED if ( tty->tty_snd.sw_pfn != NULL) { (*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg); } } /* check, whether output should stop due to received XOFF */ else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) 40003368: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000336c: 82 08 62 10 and %g1, 0x210, %g1 <== NOT EXECUTED 40003370: 80 a0 62 10 cmp %g1, 0x210 <== NOT EXECUTED 40003374: 02 80 00 4e be 400034ac <== NOT EXECUTED 40003378: 01 00 00 00 nop <== NOT EXECUTED } else { /* * Buffer not empty, start tranmitter */ if (newTail > tty->rawOutBuf.Head) 4000337c: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40003380: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40003384: 18 80 00 18 bgu 400033e4 <== NOT EXECUTED 40003388: 01 00 00 00 nop <== NOT EXECUTED nToSend = tty->rawOutBuf.Size - newTail; else nToSend = tty->rawOutBuf.Head - newTail; 4000338c: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40003390: a2 20 40 10 sub %g1, %l0, %l1 <== NOT EXECUTED /* when flow control XON or XOF, don't send blocks of data */ /* to allow fast reaction on incoming flow ctrl and low latency*/ /* for outgoing flow control */ if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) { 40003394: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40003398: 80 88 66 00 btst 0x600, %g1 <== NOT EXECUTED 4000339c: 32 80 00 02 bne,a 400033a4 <== NOT EXECUTED 400033a0: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend = 1; } tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, 400033a4: d2 06 20 7c ld [ %i0 + 0x7c ], %o1 <== NOT EXECUTED 400033a8: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 400033ac: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED /* to allow fast reaction on incoming flow ctrl and low latency*/ /* for outgoing flow control */ if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) { nToSend = 1; } tty->rawOutBufState = rob_busy; /*apm*/ 400033b0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 400033b4: 92 04 00 09 add %l0, %o1, %o1 <== NOT EXECUTED /* to allow fast reaction on incoming flow ctrl and low latency*/ /* for outgoing flow control */ if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) { nToSend = 1; } tty->rawOutBufState = rob_busy; /*apm*/ 400033b8: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 400033bc: 9f c0 80 00 call %g2 <== NOT EXECUTED 400033c0: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 400033c4: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED } return nToSend; } 400033c8: 81 c7 e0 08 ret <== NOT EXECUTED 400033cc: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED else { if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) { /* * buffer was empty */ if (tty->rawOutBufState == rob_wait) { 400033d0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400033d4: 02 80 00 30 be 40003494 <== NOT EXECUTED 400033d8: a2 10 20 00 clr %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 400033dc: 81 c7 e0 08 ret <== NOT EXECUTED 400033e0: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED else { /* * Buffer not empty, start tranmitter */ if (newTail > tty->rawOutBuf.Head) nToSend = tty->rawOutBuf.Size - newTail; 400033e4: c2 06 20 88 ld [ %i0 + 0x88 ], %g1 <== NOT EXECUTED 400033e8: 10 bf ff eb b 40003394 <== NOT EXECUTED 400033ec: a2 20 40 10 sub %g1, %l0, %l1 <== NOT EXECUTED /* check for XOF/XON to send */ if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF)) == (FL_MDXOF | FL_IREQXOF)) { /* XOFF should be sent now... */ (*tty->device.write)(tty->minor, 400033f0: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 400033f4: 92 06 20 4a add %i0, 0x4a, %o1 <== NOT EXECUTED 400033f8: 9f c0 40 00 call %g1 <== NOT EXECUTED 400033fc: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTOP]), 1); rtems_interrupt_disable(level); 40003400: 7f ff fa 76 call 40001dd8 <== NOT EXECUTED 40003404: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 40003408: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 4000340c: c4 06 20 b8 ld [ %i0 + 0xb8 ], %g2 <== NOT EXECUTED /* XOFF should be sent now... */ (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1); rtems_interrupt_disable(level); tty->t_dqlen--; 40003410: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40003414: 84 10 a0 02 or %g2, 2, %g2 <== NOT EXECUTED /* XOFF should be sent now... */ (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1); rtems_interrupt_disable(level); tty->t_dqlen--; 40003418: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 4000341c: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 40003420: 7f ff fa 72 call 40001de8 <== NOT EXECUTED 40003424: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 40003428: 81 c7 e0 08 ret <== NOT EXECUTED 4000342c: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED * FIXME: this .write call will generate another * dequeue callback. This will advance the "Tail" in the data * buffer, although the corresponding data is not yet out! * Therefore the dequeue "length" should be reduced by 1 */ (*tty->device.write)(tty->minor, 40003430: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 40003434: 92 06 20 49 add %i0, 0x49, %o1 <== NOT EXECUTED 40003438: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000343c: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTART]), 1); rtems_interrupt_disable(level); 40003440: 7f ff fa 66 call 40001dd8 <== NOT EXECUTED 40003444: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 40003448: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 4000344c: c4 06 20 b8 ld [ %i0 + 0xb8 ], %g2 <== NOT EXECUTED */ (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1); rtems_interrupt_disable(level); tty->t_dqlen--; 40003450: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 40003454: 84 08 bf fd and %g2, -3, %g2 <== NOT EXECUTED */ (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1); rtems_interrupt_disable(level); tty->t_dqlen--; 40003458: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 4000345c: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 40003460: 7f ff fa 62 call 40001de8 <== NOT EXECUTED 40003464: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 40003468: 81 c7 e0 08 ret <== NOT EXECUTED 4000346c: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED } if (newTail == tty->rawOutBuf.Head) { /* * Buffer has become empty */ tty->rawOutBufState = rob_idle; 40003470: c0 26 20 94 clr [ %i0 + 0x94 ] <== NOT EXECUTED nToSend = 0; /* * check to see if snd wakeup callback was set */ if ( tty->tty_snd.sw_pfn != NULL) { 40003474: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003478: 02 bf ff d3 be 400033c4 <== NOT EXECUTED 4000347c: a2 10 20 00 clr %l1 <== NOT EXECUTED (*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg); 40003480: d2 06 20 d8 ld [ %i0 + 0xd8 ], %o1 <== NOT EXECUTED 40003484: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003488: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 4000348c: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED 40003490: 30 bf ff ce b,a 400033c8 <== NOT EXECUTED */ if (tty->rawOutBufState == rob_wait) { /* * this should never happen... */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 40003494: 40 00 0b 0c call 400060c4 <== NOT EXECUTED 40003498: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 4000349c: 30 bf ff d0 b,a 400033dc <== NOT EXECUTED tty->rawOutBuf.Tail = newTail; if (tty->rawOutBufState == rob_wait) { /* * wake up any pending writer task */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 400034a0: 40 00 0b 09 call 400060c4 <== NOT EXECUTED 400034a4: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 400034a8: 30 bf ff ac b,a 40003358 <== NOT EXECUTED /* check, whether output should stop due to received XOFF */ else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) == (FL_MDXON | FL_ORCVXOF)) { /* Buffer not empty, but output stops due to XOFF */ /* set flag, that output has been stopped */ rtems_interrupt_disable(level); 400034ac: 7f ff fa 4b call 40001dd8 <== NOT EXECUTED 400034b0: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl |= FL_OSTOP; 400034b4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 400034b8: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) == (FL_MDXON | FL_ORCVXOF)) { /* Buffer not empty, but output stops due to XOFF */ /* set flag, that output has been stopped */ rtems_interrupt_disable(level); tty->flow_ctrl |= FL_OSTOP; 400034bc: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 400034c0: c4 26 20 94 st %g2, [ %i0 + 0x94 ] <== NOT EXECUTED else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) == (FL_MDXON | FL_ORCVXOF)) { /* Buffer not empty, but output stops due to XOFF */ /* set flag, that output has been stopped */ rtems_interrupt_disable(level); tty->flow_ctrl |= FL_OSTOP; 400034c4: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ rtems_interrupt_enable(level); 400034c8: 7f ff fa 48 call 40001de8 <== NOT EXECUTED 400034cc: a2 10 20 00 clr %l1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 400034d0: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED 400034d4: 30 bf ff bd b,a 400033c8 <== NOT EXECUTED 40005108 : /* * this task actually processes any receive events */ static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument) { 40005108: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED 4000510c: a0 07 bf f0 add %fp, -16, %l0 <== NOT EXECUTED 40005110: a2 07 bf f7 add %fp, -9, %l1 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005114: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40005118: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 4000511c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005120: 40 00 00 cf call 4000545c <== NOT EXECUTED 40005124: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED TERMIOS_RX_TERMINATE_EVENT), RTEMS_EVENT_ANY | RTEMS_WAIT, RTEMS_NO_TIMEOUT, &the_event); if ((the_event & TERMIOS_RX_TERMINATE_EVENT) != 0) { 40005128: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000512c: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40005130: 32 80 00 16 bne,a 40005188 <== NOT EXECUTED 40005134: c0 26 20 c4 clr [ %i0 + 0xc4 ] <== NOT EXECUTED } else { /* * do something */ c = tty->device.pollRead(tty->minor); 40005138: c2 06 20 a0 ld [ %i0 + 0xa0 ], %g1 <== NOT EXECUTED 4000513c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005140: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED if (c != EOF) { 40005144: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40005148: 02 bf ff f3 be 40005114 <== NOT EXECUTED 4000514c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED /* * pollRead did call enqueue on its own */ c_buf = c; 40005150: d0 2f bf f7 stb %o0, [ %fp + -9 ] <== NOT EXECUTED rtems_termios_enqueue_raw_characters ( 40005154: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40005158: 7f ff f8 ff call 40003554 <== NOT EXECUTED 4000515c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005160: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40005164: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40005168: 94 10 20 00 clr %o2 <== NOT EXECUTED 4000516c: 40 00 00 bc call 4000545c <== NOT EXECUTED 40005170: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED TERMIOS_RX_TERMINATE_EVENT), RTEMS_EVENT_ANY | RTEMS_WAIT, RTEMS_NO_TIMEOUT, &the_event); if ((the_event & TERMIOS_RX_TERMINATE_EVENT) != 0) { 40005174: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40005178: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000517c: 22 bf ff f0 be,a 4000513c <== NOT EXECUTED 40005180: c2 06 20 a0 ld [ %i0 + 0xa0 ], %g1 <== NOT EXECUTED tty->rxTaskId = 0; 40005184: c0 26 20 c4 clr [ %i0 + 0xc4 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 40005188: 40 00 04 77 call 40006364 <== NOT EXECUTED 4000518c: 90 10 20 00 clr %o0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005190: 10 bf ff e2 b 40005118 <== NOT EXECUTED 40005194: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 400032c4 : void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty) { /* * send event to rx daemon task */ rtems_event_send(tty->rxTaskId,TERMIOS_RX_PROC_EVENT); 400032c4: d0 02 20 c4 ld [ %o0 + 0xc4 ], %o0 <== NOT EXECUTED 400032c8: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 400032cc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400032d0: 40 00 08 f1 call 40005694 <== NOT EXECUTED 400032d4: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400032d8: 01 00 00 00 nop 40005198 : /* * this task actually processes any transmit events */ static rtems_task rtems_termios_txdaemon(rtems_task_argument argument) { 40005198: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED 4000519c: 03 10 00 65 sethi %hi(0x40019400), %g1 <== NOT EXECUTED 400051a0: a0 07 bf f4 add %fp, -12, %l0 <== NOT EXECUTED 400051a4: a2 10 63 e8 or %g1, 0x3e8, %l1 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 400051a8: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 400051ac: 94 10 20 00 clr %o2 <== NOT EXECUTED 400051b0: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 400051b4: 40 00 00 aa call 4000545c <== NOT EXECUTED 400051b8: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED TERMIOS_TX_TERMINATE_EVENT), RTEMS_EVENT_ANY | RTEMS_WAIT, RTEMS_NO_TIMEOUT, &the_event); if ((the_event & TERMIOS_TX_TERMINATE_EVENT) != 0) { 400051bc: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 400051c0: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 400051c4: 12 80 00 16 bne 4000521c <== NOT EXECUTED 400051c8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } else { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 400051cc: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 400051d0: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 400051d4: 82 00 40 11 add %g1, %l1, %g1 <== NOT EXECUTED 400051d8: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 400051dc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400051e0: 02 80 00 04 be 400051f0 <== NOT EXECUTED 400051e4: 01 00 00 00 nop <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 400051e8: 9f c0 40 00 call %g1 <== NOT EXECUTED 400051ec: 01 00 00 00 nop <== NOT EXECUTED } /* * try to push further characters to device */ rtems_termios_refill_transmitter(tty); 400051f0: 7f ff f8 3b call 400032dc <== NOT EXECUTED 400051f4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 400051f8: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 400051fc: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005200: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40005204: 40 00 00 96 call 4000545c <== NOT EXECUTED 40005208: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED TERMIOS_TX_TERMINATE_EVENT), RTEMS_EVENT_ANY | RTEMS_WAIT, RTEMS_NO_TIMEOUT, &the_event); if ((the_event & TERMIOS_TX_TERMINATE_EVENT) != 0) { 4000520c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40005210: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40005214: 02 bf ff ee be 400051cc <== NOT EXECUTED 40005218: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED tty->txTaskId = 0; 4000521c: c0 26 20 c8 clr [ %i0 + 0xc8 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 40005220: 40 00 04 51 call 40006364 <== NOT EXECUTED 40005224: 90 10 20 00 clr %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 40005228: 10 bf ff e1 b 400051ac <== NOT EXECUTED 4000522c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40004098 : rtems_termios_puts (&c, 1, tty); } rtems_status_code rtems_termios_write (void *arg) { 40004098: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 4000409c: c2 06 00 00 ld [ %i0 ], %g1 rtems_termios_puts (&c, 1, tty); } rtems_status_code rtems_termios_write (void *arg) { 400040a0: a6 10 00 18 mov %i0, %l3 rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 400040a4: e2 00 60 28 ld [ %g1 + 0x28 ], %l1 rtems_status_code sc; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 400040a8: 92 10 20 00 clr %o1 400040ac: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 400040b0: 40 00 07 36 call 40005d88 400040b4: 94 10 20 00 clr %o2 if (sc != RTEMS_SUCCESSFUL) 400040b8: b0 92 20 00 orcc %o0, 0, %i0 400040bc: 12 80 00 0f bne 400040f8 400040c0: 03 10 00 65 sethi %hi(0x40019400), %g1 return sc; if (rtems_termios_linesw[tty->t_line].l_write != NULL) { 400040c4: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 400040c8: 82 10 63 e8 or %g1, 0x3e8, %g1 400040cc: 85 28 a0 05 sll %g2, 5, %g2 400040d0: 84 00 80 01 add %g2, %g1, %g2 400040d4: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 400040d8: 80 a0 60 00 cmp %g1, 0 400040dc: 02 80 00 09 be 40004100 400040e0: 92 10 00 13 mov %l3, %o1 sc = rtems_termios_linesw[tty->t_line].l_write(tty,args); 400040e4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400040e8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400040ec: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_semaphore_release (tty->osem); 400040f0: 40 00 07 f5 call 400060c4 <== NOT EXECUTED 400040f4: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED 400040f8: 81 c7 e0 08 ret <== NOT EXECUTED 400040fc: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->termios.c_oflag & OPOST) { 40004100: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 40004104: 80 88 60 01 btst 1, %g1 40004108: 32 80 00 0c bne,a 40004138 4000410c: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 while (count--) oproc (*buffer++, tty); args->bytes_moved = args->count; } else { rtems_termios_puts (args->buffer, args->count, tty); 40004110: d0 04 e0 08 ld [ %l3 + 8 ], %o0 <== NOT EXECUTED 40004114: d2 04 e0 0c ld [ %l3 + 0xc ], %o1 <== NOT EXECUTED 40004118: 7f ff fd e4 call 400038a8 <== NOT EXECUTED 4000411c: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED args->bytes_moved = args->count; 40004120: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 <== NOT EXECUTED 40004124: c2 24 e0 14 st %g1, [ %l3 + 0x14 ] } rtems_semaphore_release (tty->osem); 40004128: 40 00 07 e7 call 400060c4 4000412c: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 return sc; } 40004130: 81 c7 e0 08 ret 40004134: 81 e8 00 00 restore return sc; } if (tty->termios.c_oflag & OPOST) { uint32_t count = args->count; char *buffer = args->buffer; while (count--) 40004138: 80 a0 60 00 cmp %g1, 0 4000413c: 02 bf ff fa be 40004124 40004140: c4 04 e0 08 ld [ %l3 + 8 ], %g2 40004144: a0 10 00 02 mov %g2, %l0 40004148: a4 00 80 01 add %g2, %g1, %l2 oproc (*buffer++, tty); 4000414c: d0 0c 00 00 ldub [ %l0 ], %o0 40004150: 7f ff fe 2b call 400039fc 40004154: 92 10 00 11 mov %l1, %o1 40004158: a0 04 20 01 inc %l0 return sc; } if (tty->termios.c_oflag & OPOST) { uint32_t count = args->count; char *buffer = args->buffer; while (count--) 4000415c: 80 a4 00 12 cmp %l0, %l2 40004160: 32 bf ff fc bne,a 40004150 40004164: d0 0c 00 00 ldub [ %l0 ], %o0 oproc (*buffer++, tty); args->bytes_moved = args->count; } else { rtems_termios_puts (args->buffer, args->count, tty); args->bytes_moved = args->count; 40004168: 10 bf ff ef b 40004124 4000416c: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 40012a48 : */ rtems_status_code rtems_timer_cancel( Objects_Id id ) { 40012a48: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40012a4c: 11 10 00 ce sethi %hi(0x40033800), %o0 40012a50: 92 10 00 18 mov %i0, %o1 40012a54: 90 12 20 4c or %o0, 0x4c, %o0 40012a58: 40 00 0a ac call 40015508 <_Objects_Get> 40012a5c: 94 07 bf f4 add %fp, -12, %o2 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012a60: c2 07 bf f4 ld [ %fp + -12 ], %g1 40012a64: 80 a0 60 00 cmp %g1, 0 40012a68: 12 80 00 11 bne 40012aac 40012a6c: 82 18 60 02 xor %g1, 2, %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) 40012a70: c2 02 20 38 ld [ %o0 + 0x38 ], %g1 40012a74: 80 a0 60 04 cmp %g1, 4 40012a78: 12 80 00 16 bne 40012ad0 40012a7c: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012a80: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40012a84: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40012a88: b0 10 20 00 clr %i0 <== NOT EXECUTED 40012a8c: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 40012a90: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] <== NOT EXECUTED 40012a94: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 <== NOT EXECUTED 40012a98: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40012a9c: 02 80 00 09 be 40012ac0 <== NOT EXECUTED 40012aa0: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012aa4: 81 c7 e0 08 ret <== NOT EXECUTED 40012aa8: 81 e8 00 00 restore <== NOT EXECUTED { Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012aac: 80 a0 00 01 cmp %g0, %g1 40012ab0: 84 60 20 00 subx %g0, 0, %g2 40012ab4: b0 08 a0 15 and %g2, 0x15, %i0 40012ab8: 81 c7 e0 08 ret 40012abc: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 40012ac0: 40 00 0f ba call 400169a8 <_Thread_Dispatch> 40012ac4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012ac8: 81 c7 e0 08 ret 40012acc: 81 e8 00 00 restore case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) (void) _Watchdog_Remove( &the_timer->Ticker ); 40012ad0: 40 00 16 7e call 400184c8 <_Watchdog_Remove> 40012ad4: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012ad8: 03 10 00 cd sethi %hi(0x40033400), %g1 40012adc: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 40012ae0: b0 10 20 00 clr %i0 40012ae4: 84 00 bf ff add %g2, -1, %g2 40012ae8: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 40012aec: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 40012af0: 80 a0 e0 00 cmp %g3, 0 40012af4: 12 bf ff f5 bne 40012ac8 40012af8: 01 00 00 00 nop 40012afc: 30 bf ff f1 b,a 40012ac0 40012bec : */ rtems_status_code rtems_timer_delete( Objects_Id id ) { 40012bec: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40012bf0: 21 10 00 ce sethi %hi(0x40033800), %l0 40012bf4: 92 10 00 18 mov %i0, %o1 40012bf8: 94 07 bf f4 add %fp, -12, %o2 40012bfc: 40 00 0a 43 call 40015508 <_Objects_Get> 40012c00: 90 14 20 4c or %l0, 0x4c, %o0 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012c04: c2 07 bf f4 ld [ %fp + -12 ], %g1 40012c08: 80 a0 60 00 cmp %g1, 0 40012c0c: 12 80 00 1f bne 40012c88 40012c10: b0 10 00 08 mov %o0, %i0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40012c14: a0 14 20 4c or %l0, 0x4c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40012c18: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40012c1c: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40012c20: 05 00 00 3f sethi %hi(0xfc00), %g2 40012c24: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40012c28: 82 08 40 02 and %g1, %g2, %g1 40012c2c: 80 a0 40 03 cmp %g1, %g3 40012c30: 38 80 00 06 bgu,a 40012c48 40012c34: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40012c38: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 40012c3c: 83 28 60 02 sll %g1, 2, %g1 40012c40: c0 20 80 01 clr [ %g2 + %g1 ] uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); /* _Objects_Clear_name( the_object->name, information->name_length ); */ the_object->name = 0; 40012c44: c0 26 20 0c clr [ %i0 + 0xc ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _Objects_Close( &_Timer_Information, &the_timer->Object ); (void) _Watchdog_Remove( &the_timer->Ticker ); 40012c48: 40 00 16 20 call 400184c8 <_Watchdog_Remove> 40012c4c: 90 06 20 10 add %i0, 0x10, %o0 RTEMS_INLINE_ROUTINE void _Timer_Free ( Timer_Control *the_timer ) { _Objects_Free( &_Timer_Information, &the_timer->Object ); 40012c50: 90 10 00 10 mov %l0, %o0 40012c54: 40 00 09 d6 call 400153ac <_Objects_Free> 40012c58: 92 10 00 18 mov %i0, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012c5c: 03 10 00 cd sethi %hi(0x40033400), %g1 40012c60: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 40012c64: b0 10 20 00 clr %i0 40012c68: 84 00 bf ff add %g2, -1, %g2 40012c6c: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 40012c70: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 40012c74: 80 a0 e0 00 cmp %g3, 0 40012c78: 02 80 00 0a be 40012ca0 40012c7c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012c80: 81 c7 e0 08 ret <== NOT EXECUTED 40012c84: 81 e8 00 00 restore <== NOT EXECUTED { Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012c88: 82 18 60 02 xor %g1, 2, %g1 40012c8c: 80 a0 00 01 cmp %g0, %g1 40012c90: 84 60 20 00 subx %g0, 0, %g2 40012c94: b0 08 a0 15 and %g2, 0x15, %i0 40012c98: 81 c7 e0 08 ret 40012c9c: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 40012ca0: 40 00 0f 42 call 400169a8 <_Thread_Dispatch> 40012ca4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012ca8: 81 c7 e0 08 ret 40012cac: 81 e8 00 00 restore 40012cb0 : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 40012cb0: 9d e3 bf 90 save %sp, -112, %sp 40012cb4: a4 10 00 18 mov %i0, %l2 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( ticks == 0 ) 40012cb8: 80 a6 60 00 cmp %i1, 0 40012cbc: 02 80 00 3e be 40012db4 40012cc0: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( !routine ) 40012cc4: 80 a6 a0 00 cmp %i2, 0 40012cc8: 02 80 00 3b be 40012db4 40012ccc: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40012cd0: 11 10 00 ce sethi %hi(0x40033800), %o0 40012cd4: 92 10 00 12 mov %l2, %o1 40012cd8: 90 12 20 4c or %o0, 0x4c, %o0 40012cdc: 40 00 0a 0b call 40015508 <_Objects_Get> 40012ce0: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012ce4: c2 07 bf f4 ld [ %fp + -12 ], %g1 40012ce8: 80 a0 60 00 cmp %g1, 0 40012cec: 12 80 00 17 bne 40012d48 40012cf0: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 40012cf4: a2 02 20 10 add %o0, 0x10, %l1 40012cf8: 40 00 15 f4 call 400184c8 <_Watchdog_Remove> 40012cfc: 90 10 00 11 mov %l1, %o0 _ISR_Disable( level ); 40012d00: 7f ff df 7e call 4000aaf8 40012d04: 01 00 00 00 nop /* * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) { 40012d08: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 40012d0c: 80 a0 60 00 cmp %g1, 0 40012d10: 22 80 00 14 be,a 40012d60 40012d14: f4 24 20 2c st %i2, [ %l0 + 0x2c ] _ISR_Enable( level ); 40012d18: 7f ff df 7c call 4000ab08 <== NOT EXECUTED 40012d1c: 01 00 00 00 nop <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012d20: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40012d24: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40012d28: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 40012d2c: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] <== NOT EXECUTED 40012d30: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 <== NOT EXECUTED 40012d34: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40012d38: 02 80 00 1d be 40012dac <== NOT EXECUTED 40012d3c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012d40: 81 c7 e0 08 ret <== NOT EXECUTED 40012d44: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if ( !routine ) return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012d48: 82 18 60 02 xor %g1, 2, %g1 40012d4c: 80 a0 00 01 cmp %g0, %g1 40012d50: 84 60 20 00 subx %g0, 0, %g2 40012d54: b0 08 a0 15 and %g2, 0x15, %i0 40012d58: 81 c7 e0 08 ret 40012d5c: 91 ee 20 04 restore %i0, 4, %o0 void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; 40012d60: e4 24 20 30 st %l2, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 40012d64: f6 24 20 34 st %i3, [ %l0 + 0x34 ] /* * OK. Now we now the timer was not rescheduled by an interrupt * so we can atomically initialize it as in use. */ the_timer->the_class = TIMER_INTERVAL; 40012d68: c0 24 20 38 clr [ %l0 + 0x38 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40012d6c: c0 24 20 18 clr [ %l0 + 0x18 ] _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); _ISR_Enable( level ); 40012d70: 7f ff df 66 call 4000ab08 40012d74: 01 00 00 00 nop ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40012d78: 92 10 00 11 mov %l1, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40012d7c: f2 24 20 1c st %i1, [ %l0 + 0x1c ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40012d80: 11 10 00 cd sethi %hi(0x40033400), %o0 40012d84: 40 00 15 67 call 40018320 <_Watchdog_Insert> 40012d88: 90 12 21 dc or %o0, 0x1dc, %o0 ! 400335dc <_Watchdog_Ticks_chain> 40012d8c: 05 10 00 cd sethi %hi(0x40033400), %g2 40012d90: c2 00 a0 e0 ld [ %g2 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 40012d94: 82 00 7f ff add %g1, -1, %g1 40012d98: c2 20 a0 e0 st %g1, [ %g2 + 0xe0 ] 40012d9c: c6 00 a0 e0 ld [ %g2 + 0xe0 ], %g3 40012da0: 80 a0 e0 00 cmp %g3, 0 40012da4: 32 80 00 04 bne,a 40012db4 40012da8: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Dispatch(); 40012dac: 40 00 0e ff call 400169a8 <_Thread_Dispatch> 40012db0: b0 10 20 00 clr %i0 40012db4: 81 c7 e0 08 ret 40012db8: 81 e8 00 00 restore 400085f8 : rtems_status_code rtems_timer_get_information( Objects_Id id, rtems_timer_information *the_info ) { 400085f8: 9d e3 bf 90 save %sp, -112, %sp 400085fc: 92 10 00 18 mov %i0, %o1 Timer_Control *the_timer; Objects_Locations location; if ( !the_info ) 40008600: 80 a6 60 00 cmp %i1, 0 40008604: 02 80 00 1b be 40008670 40008608: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 4000860c: 11 10 00 7c sethi %hi(0x4001f000), %o0 40008610: 94 07 bf f4 add %fp, -12, %o2 40008614: 40 00 07 90 call 4000a454 <_Objects_Get> 40008618: 90 12 23 a4 or %o0, 0x3a4, %o0 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 4000861c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008620: 80 a0 60 00 cmp %g1, 0 40008624: 12 80 00 15 bne 40008678 40008628: 82 18 60 02 xor %g1, 2, %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; the_info->initial = the_timer->Ticker.initial; 4000862c: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; 40008630: c6 02 20 38 ld [ %o0 + 0x38 ], %g3 the_info->initial = the_timer->Ticker.initial; 40008634: c2 26 60 04 st %g1, [ %i1 + 4 ] the_info->start_time = the_timer->Ticker.start_time; 40008638: c4 02 20 24 ld [ %o0 + 0x24 ], %g2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; 4000863c: c6 26 40 00 st %g3, [ %i1 ] the_info->initial = the_timer->Ticker.initial; the_info->start_time = the_timer->Ticker.start_time; 40008640: c4 26 60 08 st %g2, [ %i1 + 8 ] the_info->stop_time = the_timer->Ticker.stop_time; 40008644: c2 02 20 28 ld [ %o0 + 0x28 ], %g1 40008648: c2 26 60 0c st %g1, [ %i1 + 0xc ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000864c: 07 10 00 7d sethi %hi(0x4001f400), %g3 40008650: c2 00 e1 90 ld [ %g3 + 0x190 ], %g1 ! 4001f590 <_Thread_Dispatch_disable_level> 40008654: b0 10 20 00 clr %i0 40008658: 82 00 7f ff add %g1, -1, %g1 4000865c: c2 20 e1 90 st %g1, [ %g3 + 0x190 ] 40008660: c4 00 e1 90 ld [ %g3 + 0x190 ], %g2 40008664: 80 a0 a0 00 cmp %g2, 0 40008668: 02 80 00 09 be 4000868c 4000866c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008670: 81 c7 e0 08 ret <== NOT EXECUTED 40008674: 81 e8 00 00 restore <== NOT EXECUTED if ( !the_info ) return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40008678: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4000867c: 84 60 20 00 subx %g0, 0, %g2 <== NOT EXECUTED 40008680: b0 08 a0 15 and %g2, 0x15, %i0 <== NOT EXECUTED 40008684: 81 c7 e0 08 ret <== NOT EXECUTED 40008688: 91 ee 20 04 restore %i0, 4, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000868c: 40 00 0c 9a call 4000b8f4 <_Thread_Dispatch> 40008690: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008694: 81 c7 e0 08 ret 40008698: 81 e8 00 00 restore 40013514 : rtems_status_code rtems_timer_initiate_server( uint32_t priority, uint32_t stack_size, rtems_attribute attribute_set ) { 40013514: 9d e3 bf 90 save %sp, -112, %sp /* * Make sure the requested priority is valid. */ _priority = priority; if ( priority == RTEMS_TIMER_SERVER_DEFAULT_PRIORITY ) 40013518: 92 10 20 00 clr %o1 4001351c: 80 a6 3f ff cmp %i0, -1 40013520: 02 80 00 07 be 4001353c 40013524: 94 10 00 19 mov %i1, %o2 _priority = 0; else if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) 40013528: 82 06 3f ff add %i0, -1, %g1 4001352c: 80 a0 60 fe cmp %g1, 0xfe 40013530: 18 80 00 16 bgu 40013588 40013534: a2 10 20 13 mov 0x13, %l1 40013538: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001353c: 21 10 00 cd sethi %hi(0x40033400), %l0 40013540: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 ! 400334e0 <_Thread_Dispatch_disable_level> 40013544: 82 00 60 01 inc %g1 40013548: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] * Just to make sure the test versus create/start operation are atomic. */ _Thread_Disable_dispatch(); if ( _Timer_Server ) { 4001354c: 33 10 00 ce sethi %hi(0x40033800), %i1 40013550: c2 06 60 98 ld [ %i1 + 0x98 ], %g1 ! 40033898 <_Timer_Server> 40013554: 80 a0 60 00 cmp %g1, 0 40013558: 02 80 00 0e be 40013590 4001355c: 19 00 00 20 sethi %hi(0x8000), %o4 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40013560: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 <== NOT EXECUTED 40013564: a2 10 20 0e mov 0xe, %l1 <== NOT EXECUTED _Thread_Dispatch(); 40013568: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001356c: c2 24 20 e0 st %g1, [ %l0 + 0xe0 ] 40013570: c4 04 20 e0 ld [ %l0 + 0xe0 ], %g2 40013574: 80 a0 a0 00 cmp %g2, 0 40013578: 12 80 00 04 bne 40013588 4001357c: 01 00 00 00 nop 40013580: 40 00 0d 0a call 400169a8 <_Thread_Dispatch> 40013584: 01 00 00 00 nop _Watchdog_Initialize( &_Timer_Server->Timer, _Thread_Delay_ended, id, NULL ); _Watchdog_Initialize( &_Timer_Seconds_timer, _Thread_Delay_ended, id, NULL ); _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 40013588: 81 c7 e0 08 ret 4001358c: 91 e8 00 11 restore %g0, %l1, %o0 * Server should run at the same priority as the priority Ada task. * Otherwise, the priority ceiling for the mutex used to protect the * GNAT run-time is violated. */ status = rtems_task_create( 40013590: 11 15 12 53 sethi %hi(0x54494c00), %o0 40013594: 98 16 80 0c or %i2, %o4, %o4 40013598: 90 12 21 45 or %o0, 0x145, %o0 4001359c: 96 10 21 00 mov 0x100, %o3 400135a0: 7f ff f9 fc call 40011d90 400135a4: 9a 07 bf f4 add %fp, -12, %o5 /* user may want floating point but we need */ /* system task specified for 0 priority */ attribute_set | RTEMS_SYSTEM_TASK, &id /* get the id back */ ); if (status) { 400135a8: a2 92 20 00 orcc %o0, 0, %l1 400135ac: 02 80 00 05 be 400135c0 400135b0: d0 07 bf f4 ld [ %fp + -12 ], %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400135b4: c2 04 20 e0 ld [ %l0 + 0xe0 ], %g1 400135b8: 10 bf ff ed b 4001356c 400135bc: 82 00 7f ff add %g1, -1, %g1 _Thread_Enable_dispatch(); return status; } status = rtems_task_start( 400135c0: 13 10 00 4c sethi %hi(0x40013000), %o1 400135c4: 94 10 20 00 clr %o2 400135c8: 7f ff fc 3d call 400126bc 400135cc: 92 12 63 c0 or %o1, 0x3c0, %o1 id, /* the id from create */ (rtems_task_entry) _Timer_Server_body, /* the timer server entry point */ 0 /* there is no argument */ ); if (status) { 400135d0: a2 92 20 00 orcc %o0, 0, %l1 400135d4: 12 bf ff f8 bne 400135b4 400135d8: c8 07 bf f4 ld [ %fp + -12 ], %g4 RTEMS_INLINE_ROUTINE Objects_Control *_Objects_Get_local_object( Objects_Information *information, uint16_t index ) { if ( index > information->maximum ) 400135dc: 03 10 00 cc sethi %hi(0x40033000), %g1 400135e0: 9a 10 63 90 or %g1, 0x390, %o5 ! 40033390 <_RTEMS_tasks_Information> 400135e4: c4 13 60 10 lduh [ %o5 + 0x10 ], %g2 400135e8: 03 00 00 3f sethi %hi(0xfc00), %g1 400135ec: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 400135f0: 86 09 00 01 and %g4, %g1, %g3 400135f4: 80 a0 c0 02 cmp %g3, %g2 400135f8: 18 80 00 05 bgu 4001360c 400135fc: 82 10 20 00 clr %g1 40013600: c4 03 60 20 ld [ %o5 + 0x20 ], %g2 40013604: 83 28 e0 02 sll %g3, 2, %g1 40013608: c2 00 80 01 ld [ %g2 + %g1 ], %g1 ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 4001360c: c0 20 60 6c clr [ %g1 + 0x6c ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40013610: c0 20 60 50 clr [ %g1 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; 40013614: c8 20 60 68 st %g4, [ %g1 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40013618: 07 10 00 5a sethi %hi(0x40016800), %g3 * * NOTE: Setting the pointer to the Timer Server TCB to a value other than * NULL indicates that task-based timer support is initialized. */ _Timer_Server = (Thread_Control *)_Objects_Get_local_object( 4001361c: c2 26 60 98 st %g1, [ %i1 + 0x98 ] 40013620: 86 10 e1 04 or %g3, 0x104, %g3 40013624: c6 20 60 64 st %g3, [ %g1 + 0x64 ] */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013628: 03 10 00 cc sethi %hi(0x40033000), %g1 4001362c: 82 10 63 e0 or %g1, 0x3e0, %g1 ! 400333e0 <_Timer_Ticks_chain+0x4> */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40013630: c2 20 7f fc st %g1, [ %g1 + -4 ] 40013634: 82 00 7f fc add %g1, -4, %g1 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013638: 05 10 00 cc sethi %hi(0x40033000), %g2 Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4001363c: c2 20 60 08 st %g1, [ %g1 + 8 ] */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013640: 84 10 a3 f4 or %g2, 0x3f4, %g2 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40013644: c0 20 60 04 clr [ %g1 + 4 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40013648: c4 20 bf fc st %g2, [ %g2 + -4 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 4001364c: 03 10 00 cc sethi %hi(0x40033000), %g1 40013650: 84 00 bf fc add %g2, -4, %g2 40013654: 82 10 63 fc or %g1, 0x3fc, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40013658: c4 20 a0 08 st %g2, [ %g2 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4001365c: c0 20 a0 04 clr [ %g2 + 4 ] the_watchdog->routine = routine; 40013660: c6 20 60 1c st %g3, [ %g1 + 0x1c ] the_watchdog->id = id; 40013664: c8 20 60 20 st %g4, [ %g1 + 0x20 ] the_watchdog->user_data = user_data; 40013668: c0 20 60 24 clr [ %g1 + 0x24 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 4001366c: 10 bf ff d2 b 400135b4 40013670: c0 20 60 08 clr [ %g1 + 8 ] 40012f08 : */ rtems_status_code rtems_timer_reset( Objects_Id id ) { 40012f08: 9d e3 bf 90 save %sp, -112, %sp 40012f0c: 11 10 00 ce sethi %hi(0x40033800), %o0 40012f10: 92 10 00 18 mov %i0, %o1 40012f14: 90 12 20 4c or %o0, 0x4c, %o0 40012f18: 40 00 09 7c call 40015508 <_Objects_Get> 40012f1c: 94 07 bf f4 add %fp, -12, %o2 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012f20: c2 07 bf f4 ld [ %fp + -12 ], %g1 40012f24: 80 a0 60 00 cmp %g1, 0 40012f28: 12 80 00 18 bne 40012f88 40012f2c: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: switch ( the_timer->the_class ) { 40012f30: c2 02 20 38 ld [ %o0 + 0x38 ], %g1 40012f34: 80 a0 60 01 cmp %g1, 1 40012f38: 22 80 00 2f be,a 40012ff4 40012f3c: 31 10 00 ce sethi %hi(0x40033800), %i0 40012f40: 2a 80 00 18 bcs,a 40012fa0 40012f44: a0 02 20 10 add %o0, 0x10, %l0 40012f48: 80 a0 60 04 cmp %g1, 4 40012f4c: 18 80 00 1b bgu 40012fb8 40012f50: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012f54: 03 10 00 cd sethi %hi(0x40033400), %g1 40012f58: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 40012f5c: b0 10 20 0b mov 0xb, %i0 40012f60: 84 00 bf ff add %g2, -1, %g2 40012f64: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 40012f68: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 40012f6c: 80 a0 e0 00 cmp %g3, 0 40012f70: 12 80 00 1f bne 40012fec 40012f74: 01 00 00 00 nop _Thread_Dispatch(); 40012f78: 40 00 0e 8c call 400169a8 <_Thread_Dispatch> 40012f7c: 01 00 00 00 nop 40012f80: 81 c7 e0 08 ret 40012f84: 81 e8 00 00 restore { Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40012f88: 82 18 60 02 xor %g1, 2, %g1 40012f8c: 80 a0 00 01 cmp %g0, %g1 40012f90: 84 60 20 00 subx %g0, 0, %g2 40012f94: b0 08 a0 15 and %g2, 0x15, %i0 40012f98: 81 c7 e0 08 ret 40012f9c: 91 ee 20 04 restore %i0, 4, %o0 return RTEMS_INVALID_ID; case OBJECTS_LOCAL: switch ( the_timer->the_class ) { case TIMER_INTERVAL: _Watchdog_Remove( &the_timer->Ticker ); 40012fa0: 40 00 15 4a call 400184c8 <_Watchdog_Remove> 40012fa4: 90 10 00 10 mov %l0, %o0 _Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker ); 40012fa8: 11 10 00 cd sethi %hi(0x40033400), %o0 40012fac: 92 10 00 10 mov %l0, %o1 40012fb0: 40 00 14 dc call 40018320 <_Watchdog_Insert> 40012fb4: 90 12 21 dc or %o0, 0x1dc, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012fb8: 03 10 00 cd sethi %hi(0x40033400), %g1 40012fbc: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> 40012fc0: b0 10 20 00 clr %i0 40012fc4: 84 00 bf ff add %g2, -1, %g2 40012fc8: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 40012fcc: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 40012fd0: 80 a0 e0 00 cmp %g3, 0 40012fd4: 02 80 00 04 be 40012fe4 40012fd8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012fdc: 81 c7 e0 08 ret <== NOT EXECUTED 40012fe0: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40012fe4: 40 00 0e 71 call 400169a8 <_Thread_Dispatch> 40012fe8: 01 00 00 00 nop 40012fec: 81 c7 e0 08 ret 40012ff0: 81 e8 00 00 restore case TIMER_INTERVAL: _Watchdog_Remove( &the_timer->Ticker ); _Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker ); break; case TIMER_INTERVAL_ON_TASK: _Timer_Server_stop_ticks_timer(); 40012ff4: d0 06 20 98 ld [ %i0 + 0x98 ], %o0 _Watchdog_Remove( &the_timer->Ticker ); 40012ff8: a2 04 20 10 add %l0, 0x10, %l1 case TIMER_INTERVAL: _Watchdog_Remove( &the_timer->Ticker ); _Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker ); break; case TIMER_INTERVAL_ON_TASK: _Timer_Server_stop_ticks_timer(); 40012ffc: 40 00 15 33 call 400184c8 <_Watchdog_Remove> 40013000: 90 02 20 48 add %o0, 0x48, %o0 _Watchdog_Remove( &the_timer->Ticker ); 40013004: 40 00 15 31 call 400184c8 <_Watchdog_Remove> 40013008: 90 10 00 11 mov %l1, %o0 _Timer_Server_process_ticks_chain(); 4001300c: 40 00 00 dc call 4001337c <_Timer_Server_process_ticks_chain> 40013010: 21 10 00 cc sethi %hi(0x40033000), %l0 _Watchdog_Insert( &_Timer_Ticks_chain, &the_timer->Ticker ); 40013014: 92 10 00 11 mov %l1, %o1 40013018: 40 00 14 c2 call 40018320 <_Watchdog_Insert> 4001301c: 90 14 23 dc or %l0, 0x3dc, %o0 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 40013020: c4 04 23 dc ld [ %l0 + 0x3dc ], %g2 40013024: a0 14 23 dc or %l0, 0x3dc, %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013028: a0 04 20 04 add %l0, 4, %l0 _Timer_Server_reset_ticks_timer(); 4001302c: 80 a0 80 10 cmp %g2, %l0 40013030: 02 bf ff e2 be 40012fb8 40013034: c2 06 20 98 ld [ %i0 + 0x98 ], %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013038: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 4001303c: 92 00 60 48 add %g1, 0x48, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013040: c4 20 60 54 st %g2, [ %g1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013044: 11 10 00 cd sethi %hi(0x40033400), %o0 40013048: 40 00 14 b6 call 40018320 <_Watchdog_Insert> 4001304c: 90 12 21 dc or %o0, 0x1dc, %o0 ! 400335dc <_Watchdog_Ticks_chain> 40013050: 30 bf ff da b,a 40012fb8 40013054 : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 40013054: 9d e3 bf 90 save %sp, -112, %sp Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 40013058: 23 10 00 ce sethi %hi(0x40033800), %l1 4001305c: c2 04 60 98 ld [ %l1 + 0x98 ], %g1 ! 40033898 <_Timer_Server> Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 40013060: a6 10 00 18 mov %i0, %l3 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 40013064: 80 a0 60 00 cmp %g1, 0 40013068: 02 80 00 3b be 40013154 4001306c: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; if ( !routine ) 40013070: 80 a6 a0 00 cmp %i2, 0 40013074: 02 80 00 38 be 40013154 40013078: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; if ( ticks == 0 ) 4001307c: 80 a6 60 00 cmp %i1, 0 40013080: 02 80 00 35 be 40013154 40013084: b0 10 20 0a mov 0xa, %i0 40013088: 11 10 00 ce sethi %hi(0x40033800), %o0 4001308c: 92 10 00 13 mov %l3, %o1 40013090: 90 12 20 4c or %o0, 0x4c, %o0 40013094: 40 00 09 1d call 40015508 <_Objects_Get> 40013098: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { 4001309c: c2 07 bf f4 ld [ %fp + -12 ], %g1 400130a0: 80 a0 60 00 cmp %g1, 0 400130a4: 12 80 00 30 bne 40013164 400130a8: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 400130ac: a4 02 20 10 add %o0, 0x10, %l2 400130b0: 40 00 15 06 call 400184c8 <_Watchdog_Remove> 400130b4: 90 10 00 12 mov %l2, %o0 _ISR_Disable( level ); 400130b8: 7f ff de 90 call 4000aaf8 400130bc: 01 00 00 00 nop /* * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) { 400130c0: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 400130c4: 80 a0 60 00 cmp %g1, 0 400130c8: 12 80 00 2d bne 4001317c 400130cc: 82 10 20 01 mov 1, %g1 * so we can atomically initialize it as in use. */ the_timer->the_class = TIMER_INTERVAL_ON_TASK; _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); the_timer->Ticker.initial = ticks; 400130d0: f2 24 20 1c st %i1, [ %l0 + 0x1c ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 400130d4: f4 24 20 2c st %i2, [ %l0 + 0x2c ] the_watchdog->id = id; 400130d8: e6 24 20 30 st %l3, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 400130dc: f6 24 20 34 st %i3, [ %l0 + 0x34 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400130e0: c0 24 20 18 clr [ %l0 + 0x18 ] /* * OK. Now we now the timer was not rescheduled by an interrupt * so we can atomically initialize it as in use. */ the_timer->the_class = TIMER_INTERVAL_ON_TASK; 400130e4: c2 24 20 38 st %g1, [ %l0 + 0x38 ] _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); the_timer->Ticker.initial = ticks; _ISR_Enable( level ); 400130e8: 7f ff de 88 call 4000ab08 400130ec: 21 10 00 cc sethi %hi(0x40033000), %l0 _Timer_Server_stop_ticks_timer(); 400130f0: d0 04 60 98 ld [ %l1 + 0x98 ], %o0 400130f4: 40 00 14 f5 call 400184c8 <_Watchdog_Remove> 400130f8: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_process_ticks_chain(); 400130fc: 40 00 00 a0 call 4001337c <_Timer_Server_process_ticks_chain> 40013100: 01 00 00 00 nop _Watchdog_Insert( &_Timer_Ticks_chain, &the_timer->Ticker ); 40013104: 90 14 23 dc or %l0, 0x3dc, %o0 40013108: 40 00 14 86 call 40018320 <_Watchdog_Insert> 4001310c: 92 10 00 12 mov %l2, %o1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 40013110: c4 04 23 dc ld [ %l0 + 0x3dc ], %g2 40013114: a0 14 23 dc or %l0, 0x3dc, %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013118: a0 04 20 04 add %l0, 4, %l0 _Timer_Server_reset_ticks_timer(); 4001311c: 80 a0 80 10 cmp %g2, %l0 40013120: 12 80 00 1a bne 40013188 40013124: c2 04 60 98 ld [ %l1 + 0x98 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40013128: 03 10 00 cd sethi %hi(0x40033400), %g1 4001312c: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 400334e0 <_Thread_Dispatch_disable_level> _Thread_Dispatch(); 40013130: b0 10 20 00 clr %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40013134: 84 00 bf ff add %g2, -1, %g2 40013138: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 4001313c: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 40013140: 80 a0 e0 00 cmp %g3, 0 40013144: 12 80 00 06 bne 4001315c 40013148: 01 00 00 00 nop _Thread_Dispatch(); 4001314c: 40 00 0e 17 call 400169a8 <_Thread_Dispatch> 40013150: b0 10 20 00 clr %i0 ! 0 40013154: 81 c7 e0 08 ret 40013158: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001315c: 81 c7 e0 08 ret <== NOT EXECUTED 40013160: 81 e8 00 00 restore <== NOT EXECUTED if ( ticks == 0 ) return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013164: 82 18 60 02 xor %g1, 2, %g1 40013168: 80 a0 00 01 cmp %g0, %g1 4001316c: 84 60 20 00 subx %g0, 0, %g2 40013170: b0 08 a0 15 and %g2, 0x15, %i0 40013174: 81 c7 e0 08 ret 40013178: 91 ee 20 04 restore %i0, 4, %o0 * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); 4001317c: 7f ff de 63 call 4000ab08 <== NOT EXECUTED 40013180: 01 00 00 00 nop <== NOT EXECUTED 40013184: 30 bf ff e9 b,a 40013128 <== NOT EXECUTED Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013188: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 4001318c: 92 00 60 48 add %g1, 0x48, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013190: c4 20 60 54 st %g2, [ %g1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013194: 11 10 00 cd sethi %hi(0x40033400), %o0 40013198: 40 00 14 62 call 40018320 <_Watchdog_Insert> 4001319c: 90 12 21 dc or %o0, 0x1dc, %o0 ! 400335dc <_Watchdog_Ticks_chain> 400131a0: 30 bf ff e2 b,a 40013128 400089dc : static int rtems_verror( uint32_t error_flag, const char *printf_format, va_list arglist ) { 400089dc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int local_errno = 0; int chars_written = 0; rtems_status_code status; if (error_flag & RTEMS_ERROR_PANIC) 400089e0: 03 08 00 00 sethi %hi(0x20000000), %g1 <== NOT EXECUTED 400089e4: a8 8e 00 01 andcc %i0, %g1, %l4 <== NOT EXECUTED 400089e8: 02 80 00 10 be 40008a28 <== NOT EXECUTED 400089ec: a6 10 00 18 mov %i0, %l3 <== NOT EXECUTED { if (rtems_panic_in_progress++) 400089f0: 07 10 00 ab sethi %hi(0x4002ac00), %g3 <== NOT EXECUTED 400089f4: c2 00 e3 c4 ld [ %g3 + 0x3c4 ], %g1 ! 4002afc4 <== NOT EXECUTED 400089f8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400089fc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008a00: 02 80 00 0a be 40008a28 <== NOT EXECUTED 40008a04: c2 20 e3 c4 st %g1, [ %g3 + 0x3c4 ] <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008a08: 03 10 00 ac sethi %hi(0x4002b000), %g1 <== NOT EXECUTED 40008a0c: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4002b190 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008a10: 84 00 a0 01 inc %g2 <== NOT EXECUTED 40008a14: c4 20 61 90 st %g2, [ %g1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); /* disable task switches */ /* don't aggravate things */ if (rtems_panic_in_progress > 2) 40008a18: c2 00 e3 c4 ld [ %g3 + 0x3c4 ], %g1 <== NOT EXECUTED 40008a1c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40008a20: 14 80 00 3c bg 40008b10 <== NOT EXECUTED 40008a24: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40008a28: 25 10 00 a8 sethi %hi(0x4002a000), %l2 <== NOT EXECUTED 40008a2c: c2 04 a2 10 ld [ %l2 + 0x210 ], %g1 ! 4002a210 <_impure_ptr> <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40008a30: a2 10 20 00 clr %l1 <== NOT EXECUTED /* don't aggravate things */ if (rtems_panic_in_progress > 2) return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40008a34: 40 00 43 74 call 40019804 <== NOT EXECUTED 40008a38: d0 00 60 08 ld [ %g1 + 8 ], %o0 <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; 40008a3c: 03 1c 00 00 sethi %hi(0x70000000), %g1 <== NOT EXECUTED if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40008a40: 05 10 00 00 sethi %hi(0x40000000), %g2 <== NOT EXECUTED 40008a44: 80 8c c0 02 btst %l3, %g2 <== NOT EXECUTED 40008a48: 12 80 00 3f bne 40008b44 <== NOT EXECUTED 40008a4c: a0 2c c0 01 andn %l3, %g1, %l0 <== NOT EXECUTED #if defined(RTEMS_MULTIPROCESSING) if (_System_state_Is_multiprocessing) fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node); #endif chars_written += vfprintf(stderr, printf_format, arglist); 40008a50: c2 04 a2 10 ld [ %l2 + 0x210 ], %g1 <== NOT EXECUTED 40008a54: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40008a58: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40008a5c: 40 00 5c 29 call 4001fb00 <== NOT EXECUTED 40008a60: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED if (status) 40008a64: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED #if defined(RTEMS_MULTIPROCESSING) if (_System_state_Is_multiprocessing) fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node); #endif chars_written += vfprintf(stderr, printf_format, arglist); 40008a68: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED if (status) 40008a6c: 12 80 00 2b bne 40008b18 <== NOT EXECUTED 40008a70: 35 10 00 a8 sethi %hi(0x4002a000), %i2 <== NOT EXECUTED chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); if (local_errno) 40008a74: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40008a78: 02 80 00 12 be 40008ac0 <== NOT EXECUTED 40008a7c: c2 04 a2 10 ld [ %l2 + 0x210 ], %g1 <== NOT EXECUTED { if ((local_errno > 0) && *strerror(local_errno)) 40008a80: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40008a84: 04 80 00 09 ble 40008aa8 <== NOT EXECUTED 40008a88: 13 10 00 99 sethi %hi(0x40026400), %o1 <== NOT EXECUTED 40008a8c: 40 00 51 32 call 4001cf54 <== NOT EXECUTED 40008a90: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40008a94: c2 4a 00 00 ldsb [ %o0 ], %g1 <== NOT EXECUTED 40008a98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008a9c: 12 80 00 2e bne 40008b54 <== NOT EXECUTED 40008aa0: c2 04 a2 10 ld [ %l2 + 0x210 ], %g1 <== NOT EXECUTED chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); 40008aa4: 13 10 00 99 sethi %hi(0x40026400), %o1 <== NOT EXECUTED 40008aa8: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40008aac: 92 12 62 a8 or %o1, 0x2a8, %o1 <== NOT EXECUTED 40008ab0: 40 00 45 16 call 40019f08 <== NOT EXECUTED 40008ab4: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 40008ab8: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED } chars_written += fprintf(stderr, "\n"); 40008abc: c2 04 a2 10 ld [ %l2 + 0x210 ], %g1 <== NOT EXECUTED 40008ac0: 13 10 00 9b sethi %hi(0x40026c00), %o1 <== NOT EXECUTED 40008ac4: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40008ac8: 40 00 45 10 call 40019f08 <== NOT EXECUTED 40008acc: 92 12 61 20 or %o1, 0x120, %o1 <== NOT EXECUTED (void) fflush(stderr); 40008ad0: c2 04 a2 10 ld [ %l2 + 0x210 ], %g1 <== NOT EXECUTED chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); } chars_written += fprintf(stderr, "\n"); 40008ad4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED (void) fflush(stderr); 40008ad8: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40008adc: 40 00 43 4a call 40019804 <== NOT EXECUTED 40008ae0: b0 04 00 18 add %l0, %i0, %i0 <== NOT EXECUTED if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT)) 40008ae4: 03 0c 00 00 sethi %hi(0x30000000), %g1 <== NOT EXECUTED 40008ae8: 80 8c c0 01 btst %l3, %g1 <== NOT EXECUTED 40008aec: 02 80 00 09 be 40008b10 <== NOT EXECUTED 40008af0: 80 a5 20 00 cmp %l4, 0 <== NOT EXECUTED { if (error_flag & RTEMS_ERROR_PANIC) 40008af4: 02 80 00 23 be 40008b80 <== NOT EXECUTED 40008af8: 90 10 20 00 clr %o0 <== NOT EXECUTED { rtems_error(0, "fatal error, exiting"); 40008afc: 13 10 00 99 sethi %hi(0x40026400), %o1 <== NOT EXECUTED 40008b00: 40 00 00 33 call 40008bcc <== NOT EXECUTED 40008b04: 92 12 62 c0 or %o1, 0x2c0, %o1 ! 400266c0 <== NOT EXECUTED _exit(local_errno); 40008b08: 40 00 02 8e call 40009540 <_exit> <== NOT EXECUTED 40008b0c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_error(0, "fatal error, aborting"); abort(); } } return chars_written; } 40008b10: 81 c7 e0 08 ret <== NOT EXECUTED 40008b14: 81 e8 00 00 restore <== NOT EXECUTED #endif chars_written += vfprintf(stderr, printf_format, arglist); if (status) chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); 40008b18: c2 06 a2 10 ld [ %i2 + 0x210 ], %g1 <== NOT EXECUTED 40008b1c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40008b20: 7f ff ff a8 call 400089c0 <== NOT EXECUTED 40008b24: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 40008b28: 13 10 00 99 sethi %hi(0x40026400), %o1 <== NOT EXECUTED 40008b2c: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40008b30: 92 12 62 88 or %o1, 0x288, %o1 <== NOT EXECUTED 40008b34: 40 00 44 f5 call 40019f08 <== NOT EXECUTED 40008b38: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40008b3c: 10 bf ff ce b 40008a74 <== NOT EXECUTED 40008b40: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED (void) fflush(stdout); /* in case stdout/stderr same */ status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ local_errno = errno; 40008b44: 40 00 42 d3 call 40019690 <__errno> <== NOT EXECUTED 40008b48: 01 00 00 00 nop <== NOT EXECUTED 40008b4c: 10 bf ff c1 b 40008a50 <== NOT EXECUTED 40008b50: e2 02 00 00 ld [ %o0 ], %l1 <== NOT EXECUTED chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); if (local_errno) { if ((local_errno > 0) && *strerror(local_errno)) chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); 40008b54: c2 06 a2 10 ld [ %i2 + 0x210 ], %g1 <== NOT EXECUTED 40008b58: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40008b5c: 40 00 50 fe call 4001cf54 <== NOT EXECUTED 40008b60: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 40008b64: 13 10 00 99 sethi %hi(0x40026400), %o1 <== NOT EXECUTED 40008b68: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40008b6c: 92 12 62 98 or %o1, 0x298, %o1 <== NOT EXECUTED 40008b70: 40 00 44 e6 call 40019f08 <== NOT EXECUTED 40008b74: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40008b78: 10 bf ff d1 b 40008abc <== NOT EXECUTED 40008b7c: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED rtems_error(0, "fatal error, exiting"); _exit(local_errno); } else { rtems_error(0, "fatal error, aborting"); 40008b80: 13 10 00 99 sethi %hi(0x40026400), %o1 <== NOT EXECUTED 40008b84: 40 00 00 12 call 40008bcc <== NOT EXECUTED 40008b88: 92 12 62 d8 or %o1, 0x2d8, %o1 ! 400266d8 <== NOT EXECUTED abort(); 40008b8c: 40 00 42 b3 call 40019658 <== NOT EXECUTED 40008b90: 01 00 00 00 nop 40008b94: 01 00 00 00 nop 40018a80 : /* * Extract an integer value from the database */ static int scanInt(FILE *fp, int *val) { 40018a80: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED 40018a84: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 <== NOT EXECUTED 40018a88: a2 10 20 00 clr %l1 <== NOT EXECUTED 40018a8c: a6 10 63 ff or %g1, 0x3ff, %l3 <== NOT EXECUTED 40018a90: a4 10 20 00 clr %l2 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40018a94: 2b 10 00 ef sethi %hi(0x4003bc00), %l5 <== NOT EXECUTED limit++; continue; } sign = 1; } if (!isdigit(c)) 40018a98: 29 10 00 ef sethi %hi(0x4003bc00), %l4 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40018a9c: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40018aa0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40018aa4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018aa8: 06 80 00 23 bl 40018b34 <== NOT EXECUTED 40018aac: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40018ab0: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40018ab4: e0 08 40 00 ldub [ %g1 ], %l0 <== NOT EXECUTED 40018ab8: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED if (c == ':') 40018abc: 80 a4 20 3a cmp %l0, 0x3a <== NOT EXECUTED 40018ac0: 02 80 00 24 be 40018b50 <== NOT EXECUTED 40018ac4: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED break; if (sign == 0) { 40018ac8: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40018acc: 12 80 00 06 bne 40018ae4 <== NOT EXECUTED 40018ad0: c2 05 22 d0 ld [ %l4 + 0x2d0 ], %g1 <== NOT EXECUTED if (c == '-') { 40018ad4: 80 a4 20 2d cmp %l0, 0x2d <== NOT EXECUTED 40018ad8: 02 80 00 2f be 40018b94 <== NOT EXECUTED 40018adc: a4 10 20 01 mov 1, %l2 <== NOT EXECUTED limit++; continue; } sign = 1; } if (!isdigit(c)) 40018ae0: c2 05 22 d0 ld [ %l4 + 0x2d0 ], %g1 <== NOT EXECUTED 40018ae4: c4 08 40 10 ldub [ %g1 + %l0 ], %g2 <== NOT EXECUTED 40018ae8: 80 88 a0 04 btst 4, %g2 <== NOT EXECUTED 40018aec: 02 80 00 28 be 40018b8c <== NOT EXECUTED 40018af0: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED return 0; d = c - '0'; if ((i > (limit / 10)) 40018af4: 40 00 6f cc call 40034a24 <.udiv> <== NOT EXECUTED 40018af8: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 40018afc: 80 a4 40 08 cmp %l1, %o0 <== NOT EXECUTED 40018b00: 18 80 00 23 bgu 40018b8c <== NOT EXECUTED 40018b04: 01 00 00 00 nop <== NOT EXECUTED 40018b08: 02 80 00 1b be 40018b74 <== NOT EXECUTED 40018b0c: a0 04 3f d0 add %l0, -48, %l0 <== NOT EXECUTED || ((i == (limit / 10)) && (d > (limit % 10)))) return 0; i = i * 10 + d; 40018b10: 85 2c 60 03 sll %l1, 3, %g2 <== NOT EXECUTED 40018b14: 83 2c 60 01 sll %l1, 1, %g1 <== NOT EXECUTED 40018b18: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40018b1c: a2 04 00 01 add %l0, %g1, %l1 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40018b20: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40018b24: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40018b28: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018b2c: 16 bf ff e1 bge 40018ab0 <== NOT EXECUTED 40018b30: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40018b34: d0 05 62 d8 ld [ %l5 + 0x2d8 ], %o0 <== NOT EXECUTED 40018b38: 40 00 40 7a call 40028d20 <__srget_r> <== NOT EXECUTED 40018b3c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40018b40: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if (c == ':') 40018b44: 80 a4 20 3a cmp %l0, 0x3a <== NOT EXECUTED 40018b48: 12 bf ff e1 bne 40018acc <== NOT EXECUTED 40018b4c: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED if ((i > (limit / 10)) || ((i == (limit / 10)) && (d > (limit % 10)))) return 0; i = i * 10 + d; } if (sign == 0) 40018b50: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40018b54: 02 80 00 0e be 40018b8c <== NOT EXECUTED 40018b58: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED return 0; *val = i * sign; 40018b5c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 40018b60: 7f ff a9 41 call 40003064 <.umul> <== NOT EXECUTED 40018b64: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED 40018b68: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED 40018b6c: 81 c7 e0 08 ret <== NOT EXECUTED 40018b70: 81 e8 00 00 restore <== NOT EXECUTED sign = 1; } if (!isdigit(c)) return 0; d = c - '0'; if ((i > (limit / 10)) 40018b74: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 40018b78: 40 00 70 57 call 40034cd4 <.urem> <== NOT EXECUTED 40018b7c: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 40018b80: 80 a4 00 08 cmp %l0, %o0 <== NOT EXECUTED 40018b84: 08 bf ff e4 bleu 40018b14 <== NOT EXECUTED 40018b88: 85 2c 60 03 sll %l1, 3, %g2 <== NOT EXECUTED } if (sign == 0) return 0; *val = i * sign; return 1; } 40018b8c: 81 c7 e0 08 ret <== NOT EXECUTED 40018b90: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (c == ':') break; if (sign == 0) { if (c == '-') { sign = -1; limit++; 40018b94: a6 04 e0 01 inc %l3 <== NOT EXECUTED 40018b98: 10 bf ff c1 b 40018a9c <== NOT EXECUTED 40018b9c: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 40018ba0 : /* * Extract a string value from the database */ static int scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag) { 40018ba0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int c; *name = *bufp; 40018ba4: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40018ba8: c2 26 40 00 st %g1, [ %i1 ] <== NOT EXECUTED for (;;) { c = getc(fp); 40018bac: 10 80 00 19 b 40018c10 <== NOT EXECUTED 40018bb0: 33 10 00 ef sethi %hi(0x4003bc00), %i1 <== NOT EXECUTED 40018bb4: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40018bb8: d0 08 40 00 ldub [ %g1 ], %o0 <== NOT EXECUTED 40018bbc: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED if (c == ':') { 40018bc0: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED 40018bc4: 02 80 00 1e be 40018c3c <== NOT EXECUTED 40018bc8: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED if (nlFlag) return 0; break; } if (c == '\n') { 40018bcc: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED 40018bd0: 02 80 00 28 be 40018c70 <== NOT EXECUTED 40018bd4: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED if (!nlFlag) return 0; break; } if (c == EOF) 40018bd8: 02 80 00 29 be 40018c7c <== NOT EXECUTED 40018bdc: 01 00 00 00 nop <== NOT EXECUTED return 0; if (*nleft < 2) 40018be0: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED 40018be4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40018be8: 08 80 00 25 bleu 40018c7c <== NOT EXECUTED 40018bec: 01 00 00 00 nop <== NOT EXECUTED return 0; **bufp = c; 40018bf0: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40018bf4: d0 28 40 00 stb %o0, [ %g1 ] <== NOT EXECUTED ++(*bufp); 40018bf8: c4 06 80 00 ld [ %i2 ], %g2 <== NOT EXECUTED --(*nleft); 40018bfc: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 40018c00: 84 00 a0 01 inc %g2 <== NOT EXECUTED --(*nleft); 40018c04: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 40018c08: c4 26 80 00 st %g2, [ %i2 ] <== NOT EXECUTED --(*nleft); 40018c0c: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED { int c; *name = *bufp; for (;;) { c = getc(fp); 40018c10: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40018c14: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40018c18: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018c1c: 16 bf ff e6 bge 40018bb4 <== NOT EXECUTED 40018c20: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40018c24: d0 06 62 d8 ld [ %i1 + 0x2d8 ], %o0 <== NOT EXECUTED 40018c28: 40 00 40 3e call 40028d20 <__srget_r> <== NOT EXECUTED 40018c2c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (c == ':') { 40018c30: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED 40018c34: 12 bf ff e7 bne 40018bd0 <== NOT EXECUTED 40018c38: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED if (nlFlag) 40018c3c: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40018c40: 12 80 00 0f bne 40018c7c <== NOT EXECUTED 40018c44: 01 00 00 00 nop <== NOT EXECUTED return 0; **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; 40018c48: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40018c4c: c0 28 40 00 clrb [ %g1 ] <== NOT EXECUTED ++(*bufp); 40018c50: c4 06 80 00 ld [ %i2 ], %g2 <== NOT EXECUTED --(*nleft); 40018c54: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 40018c58: 84 00 a0 01 inc %g2 <== NOT EXECUTED --(*nleft); 40018c5c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 40018c60: c4 26 80 00 st %g2, [ %i2 ] <== NOT EXECUTED --(*nleft); 40018c64: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED 40018c68: 81 c7 e0 08 ret <== NOT EXECUTED 40018c6c: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED if (nlFlag) return 0; break; } if (c == '\n') { if (!nlFlag) 40018c70: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40018c74: 32 bf ff f6 bne,a 40018c4c <== NOT EXECUTED 40018c78: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED } **bufp = '\0'; ++(*bufp); --(*nleft); return 1; } 40018c7c: 81 c7 e0 08 ret <== NOT EXECUTED 40018c80: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40018c84 : FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 40018c84: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int grgid; char *grmem, *cp; int memcount; if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40018c88: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 40018c8c: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40018c90: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED int grgid; char *grmem, *cp; int memcount; if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40018c94: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 40018c98: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 40018c9c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018ca0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40018ca4: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018ca8: 7f ff ff be call 40018ba0 <== NOT EXECUTED 40018cac: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018cb0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018cb4: 12 80 00 04 bne 40018cc4 <== NOT EXECUTED 40018cb8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED grp->gr_mem[memcount++] = cp + 1; } } grp->gr_mem[memcount] = NULL; return 1; } 40018cbc: 81 c7 e0 08 ret <== NOT EXECUTED 40018cc0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED { int grgid; char *grmem, *cp; int memcount; if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40018cc4: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 40018cc8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018ccc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018cd0: 7f ff ff b4 call 40018ba0 <== NOT EXECUTED 40018cd4: 98 10 20 00 clr %o4 <== NOT EXECUTED 40018cd8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018cdc: 02 bf ff f8 be 40018cbc <== NOT EXECUTED 40018ce0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018ce4: 7f ff ff 67 call 40018a80 <== NOT EXECUTED 40018ce8: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 40018cec: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018cf0: 02 bf ff f3 be 40018cbc <== NOT EXECUTED 40018cf4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018cf8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018cfc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018d00: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 40018d04: 7f ff ff a7 call 40018ba0 <== NOT EXECUTED 40018d08: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 40018d0c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018d10: 02 bf ff eb be 40018cbc <== NOT EXECUTED 40018d14: da 07 bf f0 ld [ %fp + -16 ], %o5 <== NOT EXECUTED || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) || !scanInt(fp, &grgid) || !scanString(fp, &grmem, &buffer, &bufsize, 1)) return 0; grp->gr_gid = grgid; 40018d18: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018d1c: 86 10 00 0d mov %o5, %g3 <== NOT EXECUTED if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) || !scanInt(fp, &grgid) || !scanString(fp, &grmem, &buffer, &bufsize, 1)) return 0; grp->gr_gid = grgid; 40018d20: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018d24: c4 0b 40 00 ldub [ %o5 ], %g2 <== NOT EXECUTED 40018d28: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED 40018d2c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018d30: 02 80 00 0f be 40018d6c <== NOT EXECUTED 40018d34: 88 10 20 17 mov 0x17, %g4 <== NOT EXECUTED 40018d38: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED 40018d3c: 86 00 e0 01 inc %g3 <== NOT EXECUTED 40018d40: c4 08 c0 00 ldub [ %g3 ], %g2 <== NOT EXECUTED if(*cp == ',') 40018d44: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED memcount++; 40018d48: 82 18 60 2c xor %g1, 0x2c, %g1 <== NOT EXECUTED 40018d4c: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED grp->gr_gid = grgid; /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018d50: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED if(*cp == ',') memcount++; 40018d54: 88 61 3f ff subx %g4, -1, %g4 <== NOT EXECUTED grp->gr_gid = grgid; /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018d58: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018d5c: 32 bf ff f9 bne,a 40018d40 <== NOT EXECUTED 40018d60: 86 00 e0 01 inc %g3 <== NOT EXECUTED 40018d64: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 40018d68: 88 00 60 13 add %g1, 0x13, %g4 <== NOT EXECUTED } /* * Hack to produce (hopefully) a suitably-aligned array of pointers */ if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 40018d6c: c2 07 a0 50 ld [ %fp + 0x50 ], %g1 <== NOT EXECUTED 40018d70: 80 a0 40 04 cmp %g1, %g4 <== NOT EXECUTED 40018d74: 0a bf ff d2 bcs 40018cbc <== NOT EXECUTED 40018d78: c2 07 a0 4c ld [ %fp + 0x4c ], %g1 <== NOT EXECUTED return 0; grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15); 40018d7c: 82 00 60 0f add %g1, 0xf, %g1 <== NOT EXECUTED 40018d80: 82 08 7f f0 and %g1, -16, %g1 <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 40018d84: da 20 40 00 st %o5, [ %g1 ] <== NOT EXECUTED for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018d88: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Hack to produce (hopefully) a suitably-aligned array of pointers */ if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) return 0; grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15); 40018d8c: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018d90: c2 08 80 00 ldub [ %g2 ], %g1 <== NOT EXECUTED 40018d94: 83 28 60 18 sll %g1, 0x18, %g1 <== NOT EXECUTED 40018d98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018d9c: 02 80 00 15 be 40018df0 <== NOT EXECUTED 40018da0: 86 10 20 04 mov 4, %g3 <== NOT EXECUTED 40018da4: 86 00 a0 01 add %g2, 1, %g3 <== NOT EXECUTED 40018da8: 10 80 00 07 b 40018dc4 <== NOT EXECUTED 40018dac: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED 40018db0: c2 08 c0 00 ldub [ %g3 ], %g1 <== NOT EXECUTED 40018db4: 83 28 60 18 sll %g1, 0x18, %g1 <== NOT EXECUTED 40018db8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018dbc: 02 80 00 0c be 40018dec <== NOT EXECUTED 40018dc0: 86 00 e0 01 inc %g3 <== NOT EXECUTED if(*cp == ',') { 40018dc4: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40018dc8: 80 a0 60 2c cmp %g1, 0x2c <== NOT EXECUTED 40018dcc: 32 bf ff fa bne,a 40018db4 <== NOT EXECUTED 40018dd0: c2 08 c0 00 ldub [ %g3 ], %g1 <== NOT EXECUTED *cp = '\0'; 40018dd4: c0 28 ff ff clrb [ %g3 + -1 ] <== NOT EXECUTED grp->gr_mem[memcount++] = cp + 1; 40018dd8: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 40018ddc: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 40018de0: 88 01 20 01 inc %g4 <== NOT EXECUTED 40018de4: 10 bf ff f3 b 40018db0 <== NOT EXECUTED 40018de8: c6 20 80 01 st %g3, [ %g2 + %g1 ] <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40018dec: 87 29 20 02 sll %g4, 2, %g3 <== NOT EXECUTED if(*cp == ',') { *cp = '\0'; grp->gr_mem[memcount++] = cp + 1; } } grp->gr_mem[memcount] = NULL; 40018df0: c2 06 60 0c ld [ %i1 + 0xc ], %g1 <== NOT EXECUTED 40018df4: c0 20 40 03 clr [ %g1 + %g3 ] <== NOT EXECUTED 40018df8: 81 c7 e0 08 ret <== NOT EXECUTED 40018dfc: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 40018e4c : FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40018e4c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40018e50: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40018e54: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40018e58: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40018e5c: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 40018e60: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 40018e64: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018e68: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40018e6c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018e70: 7f ff ff 4c call 40018ba0 <== NOT EXECUTED 40018e74: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018e78: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018e7c: 12 80 00 04 bne 40018e8c <== NOT EXECUTED 40018e80: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; pwd->pw_uid = pwuid; pwd->pw_gid = pwgid; return 1; } 40018e84: 81 c7 e0 08 ret <== NOT EXECUTED 40018e88: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED size_t bufsize ) { int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40018e8c: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 40018e90: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018e94: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018e98: 7f ff ff 42 call 40018ba0 <== NOT EXECUTED 40018e9c: 98 10 20 00 clr %o4 <== NOT EXECUTED 40018ea0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018ea4: 02 bf ff f8 be 40018e84 <== NOT EXECUTED 40018ea8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018eac: 7f ff fe f5 call 40018a80 <== NOT EXECUTED 40018eb0: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 40018eb4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018eb8: 02 bf ff f3 be 40018e84 <== NOT EXECUTED 40018ebc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018ec0: 7f ff fe f0 call 40018a80 <== NOT EXECUTED 40018ec4: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 40018ec8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018ecc: 02 bf ff ee be 40018e84 <== NOT EXECUTED 40018ed0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018ed4: 92 06 60 0c add %i1, 0xc, %o1 <== NOT EXECUTED 40018ed8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018edc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018ee0: 7f ff ff 30 call 40018ba0 <== NOT EXECUTED 40018ee4: 98 10 20 00 clr %o4 <== NOT EXECUTED 40018ee8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018eec: 02 bf ff e6 be 40018e84 <== NOT EXECUTED 40018ef0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018ef4: 92 06 60 10 add %i1, 0x10, %o1 <== NOT EXECUTED 40018ef8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018efc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018f00: 7f ff ff 28 call 40018ba0 <== NOT EXECUTED 40018f04: 98 10 20 00 clr %o4 <== NOT EXECUTED 40018f08: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018f0c: 02 bf ff de be 40018e84 <== NOT EXECUTED 40018f10: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018f14: 92 06 60 14 add %i1, 0x14, %o1 <== NOT EXECUTED 40018f18: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018f1c: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018f20: 7f ff ff 20 call 40018ba0 <== NOT EXECUTED 40018f24: 98 10 20 00 clr %o4 <== NOT EXECUTED 40018f28: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018f2c: 02 bf ff d6 be 40018e84 <== NOT EXECUTED 40018f30: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018f34: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40018f38: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40018f3c: 92 06 60 18 add %i1, 0x18, %o1 <== NOT EXECUTED 40018f40: 7f ff ff 18 call 40018ba0 <== NOT EXECUTED 40018f44: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 40018f48: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018f4c: 02 bf ff ce be 40018e84 <== NOT EXECUTED 40018f50: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; pwd->pw_uid = pwuid; pwd->pw_gid = pwgid; 40018f54: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED || !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; pwd->pw_uid = pwuid; 40018f58: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED pwd->pw_gid = pwgid; 40018f5c: c4 36 60 0a sth %g2, [ %i1 + 0xa ] <== NOT EXECUTED 40018f60: 81 c7 e0 08 ret <== NOT EXECUTED 40018f64: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 40018a1c : int setgid( gid_t gid ) { _POSIX_types_Gid = gid; 40018a1c: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 40018a20: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED 40018a24: d0 30 a0 2a sth %o0, [ %g2 + 0x2a ] <== NOT EXECUTED return 0; } 40018a28: 81 c3 e0 08 retl <== NOT EXECUTED 40018a2c: 90 10 20 00 clr %o0 <== NOT EXECUTED 400190a0 : return NULL; return &grent; } void setgrent(void) { 400190a0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 400190a4: 7f ff ff c4 call 40018fb4 <== NOT EXECUTED 400190a8: 21 10 00 f1 sethi %hi(0x4003c400), %l0 <== NOT EXECUTED if (group_fp != NULL) 400190ac: d0 04 23 04 ld [ %l0 + 0x304 ], %o0 ! 4003c704 <== NOT EXECUTED 400190b0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400190b4: 22 80 00 05 be,a 400190c8 <== NOT EXECUTED 400190b8: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED fclose(group_fp); 400190bc: 40 00 32 23 call 40025948 <== NOT EXECUTED 400190c0: 01 00 00 00 nop <== NOT EXECUTED group_fp = fopen("/etc/group", "r"); 400190c4: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 400190c8: 13 10 00 e8 sethi %hi(0x4003a000), %o1 <== NOT EXECUTED 400190cc: 90 12 20 a0 or %o0, 0xa0, %o0 <== NOT EXECUTED 400190d0: 40 00 34 1c call 40026140 <== NOT EXECUTED 400190d4: 92 12 63 08 or %o1, 0x308, %o1 <== NOT EXECUTED 400190d8: d0 24 23 04 st %o0, [ %l0 + 0x304 ] <== NOT EXECUTED } 400190dc: 81 c7 e0 08 ret <== NOT EXECUTED 400190e0: 81 e8 00 00 restore <== NOT EXECUTED 400192a4 : return NULL; return &pwent; } void setpwent(void) { 400192a4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 400192a8: 7f ff ff 43 call 40018fb4 <== NOT EXECUTED 400192ac: 21 10 00 f1 sethi %hi(0x4003c400), %l0 <== NOT EXECUTED if (passwd_fp != NULL) 400192b0: d0 04 22 1c ld [ %l0 + 0x21c ], %o0 ! 4003c61c <== NOT EXECUTED 400192b4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400192b8: 22 80 00 05 be,a 400192cc <== NOT EXECUTED 400192bc: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED fclose(passwd_fp); 400192c0: 40 00 31 a2 call 40025948 <== NOT EXECUTED 400192c4: 01 00 00 00 nop <== NOT EXECUTED passwd_fp = fopen("/etc/passwd", "r"); 400192c8: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED 400192cc: 13 10 00 e8 sethi %hi(0x4003a000), %o1 <== NOT EXECUTED 400192d0: 90 12 20 28 or %o0, 0x28, %o0 <== NOT EXECUTED 400192d4: 40 00 33 9b call 40026140 <== NOT EXECUTED 400192d8: 92 12 63 08 or %o1, 0x308, %o1 <== NOT EXECUTED 400192dc: d0 24 22 1c st %o0, [ %l0 + 0x21c ] <== NOT EXECUTED } 400192e0: 81 c7 e0 08 ret <== NOT EXECUTED 400192e4: 81 e8 00 00 restore <== NOT EXECUTED 400194b8 : int setuid( uid_t uid ) { _POSIX_types_Uid = uid; 400194b8: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 400194bc: c4 00 63 f0 ld [ %g1 + 0x3f0 ], %g2 ! 4003aff0 <== NOT EXECUTED 400194c0: d0 30 a0 28 sth %o0, [ %g2 + 0x28 ] <== NOT EXECUTED return 0; } 400194c4: 81 c3 e0 08 retl <== NOT EXECUTED 400194c8: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000404c : /* * Process input character, with semaphore. */ static int siproc (unsigned char c, struct rtems_termios_tty *tty) { 4000404c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int i; /* * Obtain output semaphore if character will be echoed */ if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) { 40004050: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40004054: 80 88 6e 78 btst 0xe78, %g1 <== NOT EXECUTED 40004058: 32 80 00 05 bne,a 4000406c <== NOT EXECUTED 4000405c: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); i = iproc (c, tty); rtems_semaphore_release (tty->osem); } else { i = iproc (c, tty); 40004060: b0 0e 20 ff and %i0, 0xff, %i0 <== NOT EXECUTED 40004064: 7f ff ff 77 call 40003e40 <== NOT EXECUTED 40004068: 81 e8 00 00 restore <== NOT EXECUTED /* * Obtain output semaphore if character will be echoed */ if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) { rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 4000406c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40004070: 40 00 07 46 call 40005d88 <== NOT EXECUTED 40004074: 92 10 20 00 clr %o1 <== NOT EXECUTED i = iproc (c, tty); 40004078: 90 0e 20 ff and %i0, 0xff, %o0 <== NOT EXECUTED 4000407c: 7f ff ff 71 call 40003e40 <== NOT EXECUTED 40004080: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40004084: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_semaphore_release (tty->osem); 40004088: 40 00 08 0f call 400060c4 <== NOT EXECUTED 4000408c: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED } else { i = iproc (c, tty); } return i; } 40004090: 81 c7 e0 08 ret <== NOT EXECUTED 40004094: 81 e8 00 00 restore <== NOT EXECUTED 40006860 : int _STAT_NAME( const char *path, struct stat *buf ) { 40006860: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !buf ) 40006864: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40006868: 02 80 00 32 be 40006930 <== NOT EXECUTED 4000686c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); status = rtems_filesystem_evaluate_path( path, 0, &loc, _STAT_FOLLOW_LINKS ); 40006870: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40006874: 92 10 20 00 clr %o1 <== NOT EXECUTED 40006878: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 4000687c: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40006880: 7f ff f9 8d call 40004eb4 <== NOT EXECUTED 40006884: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 40006888: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000688c: 12 80 00 27 bne 40006928 <== NOT EXECUTED 40006890: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED return -1; if ( !loc.handlers->fstat_h ){ 40006894: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 40006898: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000689c: 02 80 00 2b be 40006948 <== NOT EXECUTED 400068a0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( buf, 0, sizeof(struct stat) ); 400068a4: c0 26 40 00 clr [ %i1 ] <== NOT EXECUTED 400068a8: c0 26 60 04 clr [ %i1 + 4 ] <== NOT EXECUTED 400068ac: c0 26 60 08 clr [ %i1 + 8 ] <== NOT EXECUTED 400068b0: c0 26 60 0c clr [ %i1 + 0xc ] <== NOT EXECUTED 400068b4: c0 26 60 10 clr [ %i1 + 0x10 ] <== NOT EXECUTED 400068b8: c0 26 60 14 clr [ %i1 + 0x14 ] <== NOT EXECUTED 400068bc: c0 26 60 18 clr [ %i1 + 0x18 ] <== NOT EXECUTED 400068c0: c0 26 60 1c clr [ %i1 + 0x1c ] <== NOT EXECUTED 400068c4: c0 26 60 20 clr [ %i1 + 0x20 ] <== NOT EXECUTED 400068c8: c0 26 60 24 clr [ %i1 + 0x24 ] <== NOT EXECUTED 400068cc: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED 400068d0: c0 26 60 2c clr [ %i1 + 0x2c ] <== NOT EXECUTED 400068d4: c0 26 60 30 clr [ %i1 + 0x30 ] <== NOT EXECUTED 400068d8: c0 26 60 34 clr [ %i1 + 0x34 ] <== NOT EXECUTED 400068dc: c0 26 60 38 clr [ %i1 + 0x38 ] <== NOT EXECUTED 400068e0: c0 26 60 3c clr [ %i1 + 0x3c ] <== NOT EXECUTED 400068e4: c0 26 60 40 clr [ %i1 + 0x40 ] <== NOT EXECUTED 400068e8: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED 400068ec: c0 26 60 48 clr [ %i1 + 0x48 ] <== NOT EXECUTED 400068f0: c0 26 60 4c clr [ %i1 + 0x4c ] <== NOT EXECUTED status = (*loc.handlers->fstat_h)( &loc, buf ); 400068f4: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 400068f8: 9f c0 40 00 call %g1 <== NOT EXECUTED 400068fc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40006900: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40006904: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40006908: 02 80 00 08 be 40006928 <== NOT EXECUTED 4000690c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40006910: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40006914: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40006918: 02 80 00 1a be 40006980 <== NOT EXECUTED 4000691c: 01 00 00 00 nop <== NOT EXECUTED 40006920: 9f c0 40 00 call %g1 <== NOT EXECUTED 40006924: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return status; } 40006928: 81 c7 e0 08 ret <== NOT EXECUTED 4000692c: 81 e8 00 00 restore <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !buf ) rtems_set_errno_and_return_minus_one( EFAULT ); 40006930: 40 00 7b bf call 4002582c <__errno> <== NOT EXECUTED 40006934: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40006938: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 4000693c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40006940: 81 c7 e0 08 ret <== NOT EXECUTED 40006944: 81 e8 00 00 restore <== NOT EXECUTED status = rtems_filesystem_evaluate_path( path, 0, &loc, _STAT_FOLLOW_LINKS ); if ( status != 0 ) return -1; if ( !loc.handlers->fstat_h ){ rtems_filesystem_freenode( &loc ); 40006948: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000694c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40006950: 02 80 00 08 be 40006970 <== NOT EXECUTED 40006954: 01 00 00 00 nop <== NOT EXECUTED 40006958: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4000695c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40006960: 02 80 00 04 be 40006970 <== NOT EXECUTED 40006964: 01 00 00 00 nop <== NOT EXECUTED 40006968: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000696c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40006970: 40 00 7b af call 4002582c <__errno> <== NOT EXECUTED 40006974: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40006978: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000697c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40006980: 81 c7 e0 08 ret <== NOT EXECUTED 40006984: 81 e8 00 00 restore <== NOT EXECUTED 40019aa0 : int tcdrain( int fd ) { return ioctl( fd, RTEMS_IO_TCDRAIN, 0 ); 40019aa0: 92 10 20 03 mov 3, %o1 ! 3 <== NOT EXECUTED 40019aa4: 94 10 20 00 clr %o2 <== NOT EXECUTED 40019aa8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40019aac: 40 00 27 44 call 400237bc <== NOT EXECUTED 40019ab0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40019ab4: 01 00 00 00 nop 400157fc : int tcgetattr( int fd, struct termios *tp ) { 400157fc: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED return ioctl( fd, RTEMS_IO_GET_ATTRIBUTES, tp ); 40015800: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40015804: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40015808: 40 00 0d fa call 40018ff0 <== NOT EXECUTED 4001580c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40015810: 01 00 00 00 nop 40015814 : int tcsetattr( int fd, int opt, struct termios *tp ) { 40015814: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch (opt) { 40015818: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 4001581c: 02 80 00 10 be 4001585c <== NOT EXECUTED 40015820: 80 a6 60 01 cmp %i1, 1 <== NOT EXECUTED 40015824: 02 80 00 08 be 40015844 <== NOT EXECUTED 40015828: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 4001582c: 40 00 0f 99 call 40019690 <__errno> <== NOT EXECUTED 40015830: 01 00 00 00 nop <== NOT EXECUTED 40015834: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40015838: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * Fall through to.... */ case TCSANOW: return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp ); } } 4001583c: 81 c7 e0 08 ret <== NOT EXECUTED 40015840: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED switch (opt) { default: rtems_set_errno_and_return_minus_one( ENOTSUP ); case TCSADRAIN: if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0) 40015844: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40015848: 40 00 0d ea call 40018ff0 <== NOT EXECUTED 4001584c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40015850: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40015854: 06 bf ff fa bl 4001583c <== NOT EXECUTED 40015858: 01 00 00 00 nop <== NOT EXECUTED return -1; /* * Fall through to.... */ case TCSANOW: return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp ); 4001585c: 40 00 0d e5 call 40018ff0 <== NOT EXECUTED 40015860: 93 e8 20 02 restore %g0, 2, %o1 <== NOT EXECUTED 40015864: 01 00 00 00 nop 40019c28 : */ char *ttyname( int fd ) { 40019c28: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !ttyname_r( fd, ttyname_buf, sizeof(ttyname_buf) ) ) 40019c2c: 21 10 00 ec sethi %hi(0x4003b000), %l0 <== NOT EXECUTED 40019c30: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019c34: 94 10 24 06 mov 0x406, %o2 <== NOT EXECUTED 40019c38: 92 14 21 60 or %l0, 0x160, %o1 <== NOT EXECUTED 40019c3c: 7f ff ff ba call 40019b24 <== NOT EXECUTED 40019c40: b0 14 21 60 or %l0, 0x160, %i0 <== NOT EXECUTED 40019c44: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019c48: 12 80 00 04 bne 40019c58 <== NOT EXECUTED 40019c4c: 01 00 00 00 nop <== NOT EXECUTED return ttyname_buf; return NULL; } 40019c50: 81 c7 e0 08 ret <== NOT EXECUTED 40019c54: 81 e8 00 00 restore <== NOT EXECUTED 40019c58: 81 c7 e0 08 ret <== NOT EXECUTED 40019c5c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40019b24 : int ttyname_r( int fd, char *name, int namesize ) { 40019b24: 9d e3 be d0 save %sp, -304, %sp <== NOT EXECUTED DIR *dp; struct stat dsb; char *rval; /* Must be a terminal. */ if (tcgetattr (fd, &tty) < 0) 40019b28: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019b2c: 7f ff ff e3 call 40019ab8 <== NOT EXECUTED 40019b30: 92 07 bf d4 add %fp, -44, %o1 <== NOT EXECUTED 40019b34: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019b38: 06 80 00 0d bl 40019b6c <== NOT EXECUTED 40019b3c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EBADF); /* Must be a character device. */ if (fstat (fd, &sb) || !S_ISCHR (sb.st_mode)) 40019b40: 40 00 26 9d call 400235b4 <== NOT EXECUTED 40019b44: 92 07 bf 80 add %fp, -128, %o1 <== NOT EXECUTED 40019b48: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019b4c: 12 80 00 08 bne 40019b6c <== NOT EXECUTED 40019b50: c2 17 bf 8c lduh [ %fp + -116 ], %g1 <== NOT EXECUTED 40019b54: 05 00 00 3c sethi %hi(0xf000), %g2 <== NOT EXECUTED 40019b58: 07 00 00 08 sethi %hi(0x2000), %g3 <== NOT EXECUTED 40019b5c: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 40019b60: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40019b64: 02 80 00 08 be 40019b84 <== NOT EXECUTED 40019b68: 11 10 00 e0 sethi %hi(0x40038000), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EBADF); if ((dp = opendir (_PATH_DEV)) == NULL) rtems_set_errno_and_return_minus_one(EBADF); 40019b6c: 40 00 2f 30 call 4002582c <__errno> <== NOT EXECUTED 40019b70: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019b74: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40019b78: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019b7c: 81 c7 e0 08 ret <== NOT EXECUTED 40019b80: 81 e8 00 00 restore <== NOT EXECUTED for (rval = NULL; (dirp = readdir (dp)) != NULL ;) { if (dirp->d_ino != sb.st_ino) continue; strcpy (name + sizeof (_PATH_DEV) - 1, dirp->d_name); 40019b84: a0 06 60 05 add %i1, 5, %l0 <== NOT EXECUTED /* Must be a character device. */ if (fstat (fd, &sb) || !S_ISCHR (sb.st_mode)) rtems_set_errno_and_return_minus_one(EBADF); if ((dp = opendir (_PATH_DEV)) == NULL) 40019b88: 90 12 20 e0 or %o0, 0xe0, %o0 <== NOT EXECUTED 40019b8c: 7f ff fe 7b call 40019578 <== NOT EXECUTED 40019b90: a2 07 bf 30 add %fp, -208, %l1 <== NOT EXECUTED 40019b94: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40019b98: 02 bf ff f5 be 40019b6c <== NOT EXECUTED 40019b9c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EBADF); for (rval = NULL; (dirp = readdir (dp)) != NULL ;) 40019ba0: 7f ff ff 38 call 40019880 <== NOT EXECUTED 40019ba4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019ba8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019bac: 02 80 00 1a be 40019c14 <== NOT EXECUTED 40019bb0: c2 07 bf 88 ld [ %fp + -120 ], %g1 <== NOT EXECUTED { if (dirp->d_ino != sb.st_ino) 40019bb4: c4 02 00 00 ld [ %o0 ], %g2 <== NOT EXECUTED 40019bb8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40019bbc: 12 bf ff f9 bne 40019ba0 <== NOT EXECUTED 40019bc0: 92 02 20 0c add %o0, 0xc, %o1 <== NOT EXECUTED continue; strcpy (name + sizeof (_PATH_DEV) - 1, dirp->d_name); 40019bc4: 40 00 3e 11 call 40029408 <== NOT EXECUTED 40019bc8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if (stat (name, &dsb) || sb.st_dev != dsb.st_dev || 40019bcc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 40019bd0: 7f ff b3 24 call 40006860 <== NOT EXECUTED 40019bd4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 40019bd8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019bdc: 12 bf ff f1 bne 40019ba0 <== NOT EXECUTED 40019be0: c4 07 bf 80 ld [ %fp + -128 ], %g2 <== NOT EXECUTED 40019be4: c2 07 bf 30 ld [ %fp + -208 ], %g1 <== NOT EXECUTED 40019be8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40019bec: 12 bf ff ed bne 40019ba0 <== NOT EXECUTED 40019bf0: c4 07 bf 84 ld [ %fp + -124 ], %g2 <== NOT EXECUTED 40019bf4: c2 07 bf 34 ld [ %fp + -204 ], %g1 <== NOT EXECUTED 40019bf8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40019bfc: 12 bf ff e9 bne 40019ba0 <== NOT EXECUTED 40019c00: c4 07 bf 88 ld [ %fp + -120 ], %g2 <== NOT EXECUTED 40019c04: c2 07 bf 38 ld [ %fp + -200 ], %g1 <== NOT EXECUTED 40019c08: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40019c0c: 12 bf ff e5 bne 40019ba0 <== NOT EXECUTED 40019c10: 01 00 00 00 nop <== NOT EXECUTED sb.st_ino != dsb.st_ino) continue; rval = name; break; } (void) closedir (dp); 40019c14: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019c18: 7f ff f9 83 call 40018224 <== NOT EXECUTED 40019c1c: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 40019c20: 81 c7 e0 08 ret <== NOT EXECUTED 40019c24: 81 e8 00 00 restore <== NOT EXECUTED 40019c60 : mode_t cmask ) { mode_t old_mask; old_mask = rtems_filesystem_umask; 40019c60: 03 10 00 eb sethi %hi(0x4003ac00), %g1 <== NOT EXECUTED 40019c64: c6 00 63 f0 ld [ %g1 + 0x3f0 ], %g3 ! 4003aff0 <== NOT EXECUTED 40019c68: c4 10 e0 24 lduh [ %g3 + 0x24 ], %g2 <== NOT EXECUTED rtems_filesystem_umask = cmask; 40019c6c: d0 30 e0 24 sth %o0, [ %g3 + 0x24 ] <== NOT EXECUTED 40019c70: 85 28 a0 10 sll %g2, 0x10, %g2 <== NOT EXECUTED return old_mask; } 40019c74: 81 c3 e0 08 retl <== NOT EXECUTED 40019c78: 91 30 a0 10 srl %g2, 0x10, %o0 <== NOT EXECUTED 40019c7c : #include int unlink( const char *path ) { 40019c7c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the node to be unlinked. */ result = rtems_filesystem_evaluate_path( path, 0, &loc, FALSE ); 40019c80: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019c84: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019c88: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40019c8c: 96 10 20 00 clr %o3 <== NOT EXECUTED 40019c90: 7f ff ac 89 call 40004eb4 <== NOT EXECUTED 40019c94: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 40019c98: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019c9c: 02 80 00 04 be 40019cac <== NOT EXECUTED 40019ca0: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED result = (*loc.ops->unlink_h)( &loc ); rtems_filesystem_freenode( &loc ); return result; } 40019ca4: 81 c7 e0 08 ret <== NOT EXECUTED 40019ca8: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED result = rtems_filesystem_evaluate_path( path, 0, &loc, FALSE ); if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 40019cac: 7f ff ac 52 call 40004df4 <== NOT EXECUTED 40019cb0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0 && errno != ENOTSUP) { 40019cb4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019cb8: 12 80 00 1d bne 40019d2c <== NOT EXECUTED 40019cbc: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); return -1; } if ( !loc.ops->node_type_h ) { 40019cc0: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 40019cc4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019cc8: 22 80 00 2b be,a 40019d74 <== NOT EXECUTED 40019ccc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { 40019cd0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019cd4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019cd8: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40019cdc: 02 80 00 31 be 40019da0 <== NOT EXECUTED 40019ce0: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EISDIR ); } if ( !loc.ops->unlink_h ) { 40019ce4: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 40019ce8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019cec: 22 80 00 22 be,a 40019d74 <== NOT EXECUTED 40019cf0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->unlink_h)( &loc ); 40019cf4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019cf8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40019cfc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019d00: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019d04: 02 80 00 08 be 40019d24 <== NOT EXECUTED 40019d08: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40019d0c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019d10: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019d14: 02 80 00 31 be 40019dd8 <== NOT EXECUTED 40019d18: 01 00 00 00 nop <== NOT EXECUTED 40019d1c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019d20: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019d24: 81 c7 e0 08 ret <== NOT EXECUTED 40019d28: 81 e8 00 00 restore <== NOT EXECUTED result = rtems_filesystem_evaluate_path( path, 0, &loc, FALSE ); if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); if (result != 0 && errno != ENOTSUP) { 40019d2c: 40 00 2e c0 call 4002582c <__errno> <== NOT EXECUTED 40019d30: 01 00 00 00 nop <== NOT EXECUTED 40019d34: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40019d38: 80 a0 60 86 cmp %g1, 0x86 <== NOT EXECUTED 40019d3c: 02 bf ff e1 be 40019cc0 <== NOT EXECUTED 40019d40: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40019d44: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019d48: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019d4c: 02 bf ff f6 be 40019d24 <== NOT EXECUTED 40019d50: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019d54: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019d58: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019d5c: 02 bf ff f2 be 40019d24 <== NOT EXECUTED 40019d60: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019d64: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019d68: 01 00 00 00 nop <== NOT EXECUTED 40019d6c: 81 c7 e0 08 ret <== NOT EXECUTED 40019d70: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EISDIR ); } if ( !loc.ops->unlink_h ) { rtems_filesystem_freenode( &loc ); 40019d74: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019d78: 02 80 00 04 be 40019d88 <== NOT EXECUTED 40019d7c: 01 00 00 00 nop <== NOT EXECUTED 40019d80: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019d84: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40019d88: 40 00 2e a9 call 4002582c <__errno> <== NOT EXECUTED 40019d8c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019d90: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40019d94: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019d98: 81 c7 e0 08 ret <== NOT EXECUTED 40019d9c: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { rtems_filesystem_freenode( &loc ); 40019da0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019da4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019da8: 02 80 00 08 be 40019dc8 <== NOT EXECUTED 40019dac: 01 00 00 00 nop <== NOT EXECUTED 40019db0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019db4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019db8: 02 80 00 04 be 40019dc8 <== NOT EXECUTED 40019dbc: 01 00 00 00 nop <== NOT EXECUTED 40019dc0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019dc4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); 40019dc8: 40 00 2e 99 call 4002582c <__errno> <== NOT EXECUTED 40019dcc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019dd0: 82 10 20 15 mov 0x15, %g1 <== NOT EXECUTED 40019dd4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019dd8: 81 c7 e0 08 ret <== NOT EXECUTED 40019ddc: 81 e8 00 00 restore <== NOT EXECUTED 40002f54 : | Arguments: as in printf: fmt - format string, ... - unnamed arguments. | Returns: Nothing. +--------------------------------------------------------------------------*/ void vprintk(const char *fmt, va_list ap) { 40002f54: 9d e3 bf 80 save %sp, -128, %sp char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 40002f58: d0 0e 00 00 ldub [ %i0 ], %o0 40002f5c: 91 2a 20 18 sll %o0, 0x18, %o0 40002f60: 80 a2 20 00 cmp %o0, 0 40002f64: 02 80 00 3a be 4000304c 40002f68: 03 10 00 0b sethi %hi(0x40002c00), %g1 40002f6c: 05 10 00 60 sethi %hi(0x40018000), %g2 if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 40002f70: b4 10 62 80 or %g1, 0x280, %i2 40002f74: b8 10 a0 a8 or %g2, 0xa8, %i4 break; case 'c': BSP_output_char(va_arg(ap, int)); break; default: BSP_output_char(c); 40002f78: 3b 10 00 63 sethi %hi(0x40018c00), %i5 40002f7c: ac 07 bf e4 add %fp, -28, %l6 lflag = 0; base = 0; sign = 0; width = 0; lead = ' '; if (*fmt == '%') 40002f80: 91 3a 20 18 sra %o0, 0x18, %o0 40002f84: 80 a2 20 25 cmp %o0, 0x25 40002f88: 12 80 00 33 bne 40003054 40002f8c: c2 07 60 04 ld [ %i5 + 4 ], %g1 { fmt++; 40002f90: b0 06 20 01 inc %i0 if (*fmt == '0' ) { 40002f94: d0 0e 00 00 ldub [ %i0 ], %o0 40002f98: 87 2a 20 18 sll %o0, 0x18, %g3 40002f9c: 83 38 e0 18 sra %g3, 0x18, %g1 40002fa0: 80 a0 60 30 cmp %g1, 0x30 40002fa4: 02 80 00 97 be 40003200 40002fa8: b6 10 20 20 mov 0x20, %i3 lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40002fac: 82 02 3f d0 add %o0, -48, %g1 40002fb0: 82 08 60 ff and %g1, 0xff, %g1 40002fb4: 80 a0 60 09 cmp %g1, 9 40002fb8: 08 80 00 05 bleu 40002fcc 40002fbc: aa 10 20 00 clr %l5 width *= 10; width += (*fmt - '0'); fmt++; } if ((c = *fmt) == 'l') 40002fc0: 10 80 00 11 b 40003004 40002fc4: 83 38 e0 18 sra %g3, 0x18, %g1 40002fc8: 87 2a 20 18 sll %o0, 0x18, %g3 <== NOT EXECUTED fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; width += (*fmt - '0'); fmt++; 40002fcc: b0 06 20 01 inc %i0 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40002fd0: d0 0e 00 00 ldub [ %i0 ], %o0 width *= 10; width += (*fmt - '0'); 40002fd4: 85 2d 60 03 sll %l5, 3, %g2 40002fd8: 83 2d 60 01 sll %l5, 1, %g1 40002fdc: 87 38 e0 18 sra %g3, 0x18, %g3 40002fe0: 82 00 40 02 add %g1, %g2, %g1 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40002fe4: 84 02 3f d0 add %o0, -48, %g2 width *= 10; width += (*fmt - '0'); 40002fe8: 82 00 40 03 add %g1, %g3, %g1 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40002fec: 84 08 a0 ff and %g2, 0xff, %g2 40002ff0: 80 a0 a0 09 cmp %g2, 9 40002ff4: 08 bf ff f5 bleu 40002fc8 40002ff8: aa 00 7f d0 add %g1, -48, %l5 40002ffc: 87 2a 20 18 sll %o0, 0x18, %g3 width *= 10; width += (*fmt - '0'); fmt++; } if ((c = *fmt) == 'l') 40003000: 83 38 e0 18 sra %g3, 0x18, %g1 40003004: 80 a0 60 6c cmp %g1, 0x6c 40003008: 22 80 00 83 be,a 40003214 4000300c: b0 06 20 01 inc %i0 { lflag = 1; c = *++fmt; } switch (c) 40003010: 82 02 3f bc add %o0, -68, %g1 40003014: 82 08 60 ff and %g1, 0xff, %g1 40003018: 80 a0 60 34 cmp %g1, 0x34 4000301c: 08 80 00 12 bleu 40003064 40003020: 83 28 60 02 sll %g1, 2, %g1 break; case 'c': BSP_output_char(va_arg(ap, int)); break; default: BSP_output_char(c); 40003024: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 40003028: 91 2a 20 18 sll %o0, 0x18, %o0 <== NOT EXECUTED 4000302c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003030: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 40003034: b0 06 20 01 inc %i0 <== NOT EXECUTED 40003038: d0 0e 00 00 ldub [ %i0 ], %o0 4000303c: 91 2a 20 18 sll %o0, 0x18, %o0 40003040: 80 a2 20 00 cmp %o0, 0 40003044: 12 bf ff d0 bne 40002f84 40003048: 91 3a 20 18 sra %o0, 0x18, %o0 4000304c: 81 c7 e0 08 ret 40003050: 81 e8 00 00 restore printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), base, sign, width, lead); } else { BSP_output_char(*fmt); 40003054: 9f c0 40 00 call %g1 40003058: b0 06 20 01 inc %i0 vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 4000305c: 10 bf ff f8 b 4000303c 40003060: d0 0e 00 00 ldub [ %i0 ], %o0 if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 40003064: c4 06 80 01 ld [ %i2 + %g1 ], %g2 40003068: 81 c0 80 00 jmp %g2 4000306c: 01 00 00 00 nop case 'd': case 'D': base = 10; sign = 1; break; case 'u': case 'U': base = 10; sign = 0; break; case 'x': case 'X': base = 16; sign = 0; break; case 'p': base = 16; sign = 0; break; case 's': for (str = va_arg(ap, char *); *str; str++) 40003070: e0 06 40 00 ld [ %i1 ], %l0 40003074: d0 0c 00 00 ldub [ %l0 ], %o0 40003078: 91 2a 20 18 sll %o0, 0x18, %o0 4000307c: 80 a2 20 00 cmp %o0, 0 40003080: 02 bf ff ed be 40003034 40003084: b2 06 60 04 add %i1, 4, %i1 BSP_output_char(*str); 40003088: c2 07 60 04 ld [ %i5 + 4 ], %g1 4000308c: 9f c0 40 00 call %g1 40003090: 91 3a 20 18 sra %o0, 0x18, %o0 case 'd': case 'D': base = 10; sign = 1; break; case 'u': case 'U': base = 10; sign = 0; break; case 'x': case 'X': base = 16; sign = 0; break; case 'p': base = 16; sign = 0; break; case 's': for (str = va_arg(ap, char *); *str; str++) 40003094: a0 04 20 01 inc %l0 40003098: d0 0c 00 00 ldub [ %l0 ], %o0 4000309c: 91 2a 20 18 sll %o0, 0x18, %o0 400030a0: 80 a2 20 00 cmp %o0, 0 400030a4: 12 bf ff fa bne 4000308c 400030a8: c2 07 60 04 ld [ %i5 + 4 ], %g1 vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 400030ac: 10 bf ff e3 b 40003038 400030b0: b0 06 20 01 inc %i0 break; case 'c': BSP_output_char(va_arg(ap, int)); break; default: BSP_output_char(c); 400030b4: 82 10 20 00 clr %g1 400030b8: a4 10 20 10 mov 0x10, %l2 break; } /* switch*/ if (base) printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), 400030bc: e2 06 40 00 ld [ %i1 ], %l1 { long unsigned int n; int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { 400030c0: 80 88 60 ff btst 0xff, %g1 BSP_output_char(c); break; } /* switch*/ if (base) printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), 400030c4: b2 06 60 04 add %i1, 4, %i1 { long unsigned int n; int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { 400030c8: 02 80 00 0d be 400030fc 400030cc: a6 10 00 1d mov %i5, %l3 400030d0: 80 a4 60 00 cmp %l1, 0 400030d4: 16 80 00 0b bge 40003100 400030d8: 90 10 00 11 mov %l1, %o0 BSP_output_char('-'); 400030dc: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 400030e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400030e4: 90 10 20 2d mov 0x2d, %o0 <== NOT EXECUTED num = -num; if (maxwidth) maxwidth--; 400030e8: 82 1d 60 00 xor %l5, 0, %g1 <== NOT EXECUTED int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { BSP_output_char('-'); num = -num; 400030ec: a2 20 00 11 neg %l1 <== NOT EXECUTED if (maxwidth) maxwidth--; 400030f0: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 400030f4: 84 40 20 00 addx %g0, 0, %g2 <== NOT EXECUTED 400030f8: aa 25 40 02 sub %l5, %g2, %l5 <== NOT EXECUTED } count = 0; while ((n = num / base) > 0) { 400030fc: 90 10 00 11 mov %l1, %o0 40003100: 92 10 00 12 mov %l2, %o1 40003104: 40 00 48 36 call 400151dc <.udiv> 40003108: a8 10 20 00 clr %l4 4000310c: a0 92 20 00 orcc %o0, 0, %l0 40003110: 12 80 00 05 bne 40003124 40003114: ae 10 00 16 mov %l6, %l7 40003118: 10 80 00 41 b 4000321c 4000311c: a4 10 20 01 mov 1, %l2 40003120: a0 10 00 08 mov %o0, %l0 toPrint[count++] = (num - (n*base)); 40003124: 92 10 00 12 mov %l2, %o1 40003128: 40 00 47 f3 call 400150f4 <.umul> 4000312c: 90 10 00 10 mov %l0, %o0 40003130: 90 24 40 08 sub %l1, %o0, %o0 num = -num; if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { 40003134: 92 10 00 12 mov %l2, %o1 toPrint[count++] = (num - (n*base)); 40003138: d0 2d 00 16 stb %o0, [ %l4 + %l6 ] num = -num; if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { 4000313c: 90 10 00 10 mov %l0, %o0 40003140: 40 00 48 27 call 400151dc <.udiv> 40003144: a8 05 20 01 inc %l4 40003148: 80 a2 20 00 cmp %o0, 0 4000314c: 12 bf ff f5 bne 40003120 40003150: a2 10 00 10 mov %l0, %l1 40003154: a4 05 20 01 add %l4, 1, %l2 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 40003158: 84 07 bf f8 add %fp, -8, %g2 4000315c: 82 00 80 14 add %g2, %l4, %g1 40003160: e2 28 7f ec stb %l1, [ %g1 + -20 ] for (n=maxwidth ; n > count; n-- ) 40003164: 80 a5 40 12 cmp %l5, %l2 40003168: 08 80 00 0a bleu 40003190 4000316c: a0 10 00 15 mov %l5, %l0 40003170: a2 10 00 1b mov %i3, %l1 BSP_output_char(lead); 40003174: c2 04 e0 04 ld [ %l3 + 4 ], %g1 40003178: 9f c0 40 00 call %g1 4000317c: 90 10 00 11 mov %l1, %o0 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) 40003180: a0 04 3f ff add %l0, -1, %l0 40003184: 80 a4 00 12 cmp %l0, %l2 40003188: 18 bf ff fc bgu 40003178 4000318c: c2 04 e0 04 ld [ %l3 + 4 ], %g1 40003190: 82 04 bf ff add %l2, -1, %g1 40003194: a2 10 20 00 clr %l1 40003198: a0 05 c0 01 add %l7, %g1, %l0 BSP_output_char(lead); for (n = 0; n < count; n++){ BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]); 4000319c: c2 4c 00 00 ldsb [ %l0 ], %g1 400031a0: c4 04 e0 04 ld [ %l3 + 4 ], %g2 400031a4: d0 4f 00 01 ldsb [ %i4 + %g1 ], %o0 400031a8: 9f c0 80 00 call %g2 400031ac: a2 04 60 01 inc %l1 toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ 400031b0: 80 a4 40 12 cmp %l1, %l2 400031b4: 0a bf ff fa bcs 4000319c 400031b8: a0 04 3f ff add %l0, -1, %l0 vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 400031bc: 10 bf ff 9f b 40003038 400031c0: b0 06 20 01 inc %i0 case 's': for (str = va_arg(ap, char *); *str; str++) BSP_output_char(*str); break; case 'c': BSP_output_char(va_arg(ap, int)); 400031c4: d0 4e 60 03 ldsb [ %i1 + 3 ], %o0 <== NOT EXECUTED 400031c8: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 400031cc: 9f c0 40 00 call %g1 <== NOT EXECUTED 400031d0: b2 06 60 04 add %i1, 4, %i1 <== NOT EXECUTED vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 400031d4: 10 bf ff 99 b 40003038 <== NOT EXECUTED 400031d8: b0 06 20 01 inc %i0 <== NOT EXECUTED } switch (c) { case 'o': case 'O': base = 8; sign = 0; break; case 'i': case 'I': case 'd': case 'D': base = 10; sign = 1; break; 400031dc: 82 10 20 00 clr %g1 <== NOT EXECUTED 400031e0: 10 bf ff b7 b 400030bc <== NOT EXECUTED 400031e4: a4 10 20 0a mov 0xa, %l2 <== NOT EXECUTED if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 400031e8: 82 10 20 00 clr %g1 <== NOT EXECUTED 400031ec: 10 bf ff b4 b 400030bc <== NOT EXECUTED 400031f0: a4 10 20 08 mov 8, %l2 <== NOT EXECUTED { case 'o': case 'O': base = 8; sign = 0; break; 400031f4: 82 10 20 01 mov 1, %g1 400031f8: 10 bf ff b1 b 400030bc 400031fc: a4 10 20 0a mov 0xa, %l2 if (*fmt == '%') { fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; 40003200: b0 06 20 01 inc %i0 40003204: d0 0e 00 00 ldub [ %i0 ], %o0 40003208: b6 10 20 30 mov 0x30, %i3 4000320c: 10 bf ff 68 b 40002fac 40003210: 87 2a 20 18 sll %o0, 0x18, %g3 } if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; 40003214: 10 bf ff 7f b 40003010 40003218: d0 0e 00 00 ldub [ %i0 ], %o0 count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 4000321c: 10 bf ff d0 b 4000315c 40003220: 84 07 bf f8 add %fp, -8, %g2 40017884 : ssize_t write( int fd, const void *buffer, size_t count ) { 40017884: 9d e3 bf 98 save %sp, -104, %sp ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40017888: 03 10 00 62 sethi %hi(0x40018800), %g1 4001788c: c4 00 63 0c ld [ %g1 + 0x30c ], %g2 ! 40018b0c ssize_t write( int fd, const void *buffer, size_t count ) { 40017890: 92 10 00 19 mov %i1, %o1 ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40017894: 80 a6 00 02 cmp %i0, %g2 40017898: 1a 80 00 24 bcc 40017928 4001789c: 94 10 00 1a mov %i2, %o2 iop = rtems_libio_iop( fd ); 400178a0: 03 10 00 66 sethi %hi(0x40019800), %g1 400178a4: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 40019944 400178a8: 85 2e 20 02 sll %i0, 2, %g2 400178ac: 83 2e 20 04 sll %i0, 4, %g1 400178b0: 82 20 40 02 sub %g1, %g2, %g1 400178b4: 82 00 40 18 add %g1, %i0, %g1 400178b8: 83 28 60 02 sll %g1, 2, %g1 400178bc: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 400178c0: c2 06 20 0c ld [ %i0 + 0xc ], %g1 400178c4: 80 88 61 00 btst 0x100, %g1 400178c8: 02 80 00 18 be 40017928 400178cc: 80 a6 60 00 cmp %i1, 0 rtems_libio_check_buffer( buffer ); 400178d0: 02 80 00 1c be 40017940 400178d4: 80 a6 a0 00 cmp %i2, 0 rtems_libio_check_count( count ); 400178d8: 02 80 00 12 be 40017920 400178dc: 90 10 20 00 clr %o0 rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 400178e0: 80 88 60 04 btst 4, %g1 400178e4: 02 80 00 17 be 40017940 400178e8: 01 00 00 00 nop /* * Now process the write() request. */ if ( !iop->handlers->write_h ) 400178ec: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 400178f0: c2 00 60 0c ld [ %g1 + 0xc ], %g1 400178f4: 80 a0 60 00 cmp %g1, 0 400178f8: 02 80 00 18 be 40017958 400178fc: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); rc = (*iop->handlers->write_h)( iop, buffer, count ); 40017900: 9f c0 40 00 call %g1 40017904: 90 10 00 18 mov %i0, %o0 if ( rc > 0 ) 40017908: 80 a2 20 00 cmp %o0, 0 4001790c: 04 80 00 05 ble 40017920 40017910: 01 00 00 00 nop iop->offset += rc; 40017914: c2 06 20 08 ld [ %i0 + 8 ], %g1 40017918: 82 00 40 08 add %g1, %o0, %g1 4001791c: c2 26 20 08 st %g1, [ %i0 + 8 ] return rc; } 40017920: 81 c7 e0 08 ret 40017924: 91 e8 00 08 restore %g0, %o0, %o0 ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 40017928: 7f ff da 04 call 4000e138 <__errno> <== NOT EXECUTED 4001792c: 01 00 00 00 nop <== NOT EXECUTED 40017930: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 40017934: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017938: 10 bf ff fa b 40017920 <== NOT EXECUTED 4001793c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); rtems_libio_check_count( count ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 40017940: 7f ff d9 fe call 4000e138 <__errno> <== NOT EXECUTED 40017944: 01 00 00 00 nop <== NOT EXECUTED 40017948: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001794c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017950: 10 bf ff f4 b 40017920 <== NOT EXECUTED 40017954: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Now process the write() request. */ if ( !iop->handlers->write_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017958: 7f ff d9 f8 call 4000e138 <__errno> <== NOT EXECUTED 4001795c: 01 00 00 00 nop <== NOT EXECUTED 40017960: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40017964: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017968: 10 bf ff ee b 40017920 <== NOT EXECUTED 4001796c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED