4000b5ac : { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { 4000b5ac: 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; 4000b5b0: c4 02 20 0c ld [ %o0 + 0xc ], %g2 switch( node->type ) { 4000b5b4: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 4000b5b8: 82 00 7f ff add %g1, -1, %g1 4000b5bc: 80 a0 60 05 cmp %g1, 5 4000b5c0: 18 80 00 12 bgu 4000b608 4000b5c4: c6 00 a0 2c ld [ %g2 + 0x2c ], %g3 4000b5c8: 83 28 60 02 sll %g1, 2, %g1 4000b5cc: 05 10 00 2d sethi %hi(0x4000b400), %g2 4000b5d0: 84 10 a1 94 or %g2, 0x194, %g2 ! 4000b594 4000b5d4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000b5d8: 81 c0 40 00 jmp %g1 4000b5dc: 01 00 00 00 nop case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; 4000b5e0: 10 80 00 09 b 4000b604 4000b5e4: c2 00 e0 08 ld [ %g3 + 8 ], %g1 break; case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; 4000b5e8: 03 10 00 64 sethi %hi(0x40019000), %g1 4000b5ec: 10 80 00 06 b 4000b604 4000b5f0: 82 10 63 00 or %g1, 0x300, %g1 ! 40019300 break; case IMFS_SYM_LINK: case IMFS_HARD_LINK: loc->handlers = &IMFS_link_handlers; 4000b5f4: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000b5f8: 10 80 00 03 b 4000b604 <== NOT EXECUTED 4000b5fc: 82 10 63 38 or %g1, 0x338, %g1 ! 40019338 <== NOT EXECUTED break; case IMFS_LINEAR_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; 4000b600: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 4000b604: c2 22 20 04 st %g1, [ %o0 + 4 ] break; } return 0; } 4000b608: 81 c3 e0 08 retl 4000b60c: 90 10 20 00 clr %o0 40015cc4 : int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { 40015cc4: 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; 40015cc8: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); 40015ccc: 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; 40015cd0: f2 34 20 38 sth %i1, [ %l0 + 0x38 ] <== NOT EXECUTED jnode->st_gid = group; 40015cd4: f4 34 20 3a sth %i2, [ %l0 + 0x3a ] <== NOT EXECUTED IMFS_update_ctime( jnode ); 40015cd8: 7f ff bf db call 40005c44 <== NOT EXECUTED 40015cdc: 92 10 20 00 clr %o1 <== NOT EXECUTED 40015ce0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40015ce4: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED return 0; } 40015ce8: 81 c7 e0 08 ret <== NOT EXECUTED 40015cec: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000dbd4 : IMFS_jnode_types_t type, char *name, mode_t mode, IMFS_types_union *info ) { 4000dbd4: 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 ) 4000dbd8: a6 96 20 00 orcc %i0, 0, %l3 4000dbdc: 02 80 00 03 be 4000dbe8 4000dbe0: a4 10 20 00 clr %l2 parent = parent_loc->node_access; 4000dbe4: e4 04 c0 00 ld [ %l3 ], %l2 /* * Allocate an IMFS jnode */ node = calloc( 1, sizeof( IMFS_jnode_t ) ); 4000dbe8: 90 10 20 01 mov 1, %o0 4000dbec: 92 10 20 5c mov 0x5c, %o1 4000dbf0: 7f ff d5 ce call 40003328 4000dbf4: b0 10 20 00 clr %i0 if ( !node ) 4000dbf8: a2 92 20 00 orcc %o0, 0, %l1 4000dbfc: 02 80 00 51 be 4000dd40 4000dc00: 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 ); 4000dc04: 92 10 00 1a mov %i2, %o1 /* * Fill in the basic information */ node->st_nlink = 1; node->type = type; 4000dc08: f2 24 60 48 st %i1, [ %l1 + 0x48 ] strncpy( node->name, name, IMFS_NAME_MAX ); 4000dc0c: 94 10 20 20 mov 0x20, %o2 /* * Fill in the basic information */ node->st_nlink = 1; 4000dc10: c2 34 60 30 sth %g1, [ %l1 + 0x30 ] node->type = type; strncpy( node->name, name, IMFS_NAME_MAX ); 4000dc14: 40 00 07 4d call 4000f948 4000dc18: 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; 4000dc1c: 03 10 00 64 sethi %hi(0x40019000), %g1 4000dc20: c2 00 63 70 ld [ %g1 + 0x370 ], %g1 ! 40019370 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000dc24: 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; 4000dc28: c2 10 60 24 lduh [ %g1 + 0x24 ], %g1 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000dc2c: 92 10 20 00 clr %o1 /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 4000dc30: 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; 4000dc34: 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; 4000dc38: c2 34 60 2e sth %g1, [ %l1 + 0x2e ] /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000dc3c: 7f ff fa 3c call 4000c52c 4000dc40: c0 34 60 3a clrh [ %l1 + 0x3a ] node->stat_atime = (time_t) tv.tv_sec; 4000dc44: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* * Set the type specific information */ switch (type) { 4000dc48: b2 06 7f ff add %i1, -1, %i1 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; 4000dc4c: c2 24 60 44 st %g1, [ %l1 + 0x44 ] * Now set all the times. */ gettimeofday( &tv, 0 ); node->stat_atime = (time_t) tv.tv_sec; 4000dc50: c2 24 60 3c st %g1, [ %l1 + 0x3c ] node->stat_mtime = (time_t) tv.tv_sec; 4000dc54: c2 24 60 40 st %g1, [ %l1 + 0x40 ] /* * Set the type specific information */ switch (type) { 4000dc58: 80 a6 60 05 cmp %i1, 5 4000dc5c: 18 80 00 27 bgu 4000dcf8 4000dc60: b0 10 00 11 mov %l1, %i0 4000dc64: 83 2e 60 02 sll %i1, 2, %g1 4000dc68: 05 10 00 36 sethi %hi(0x4000d800), %g2 4000dc6c: 84 10 a3 bc or %g2, 0x3bc, %g2 ! 4000dbbc 4000dc70: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000dc74: 81 c0 40 00 jmp %g1 4000dc78: 01 00 00 00 nop */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000dc7c: 82 04 60 50 add %l1, 0x50, %g1 the_chain->permanent_null = NULL; 4000dc80: 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); 4000dc84: c2 24 60 4c st %g1, [ %l1 + 0x4c ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000dc88: 82 04 60 4c add %l1, 0x4c, %g1 4000dc8c: 10 80 00 21 b 4000dd10 4000dc90: c2 24 60 54 st %g1, [ %l1 + 0x54 ] 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; 4000dc94: c2 07 00 00 ld [ %i4 ], %g1 <== NOT EXECUTED 4000dc98: 10 80 00 1e b 4000dd10 <== NOT EXECUTED 4000dc9c: c2 24 60 4c st %g1, [ %l1 + 0x4c ] <== NOT EXECUTED break; case IMFS_SYM_LINK: sym_name = calloc( 1, strlen( info->sym_link.name ) + 1 ); 4000dca0: 40 00 06 c0 call 4000f7a0 <== NOT EXECUTED 4000dca4: d0 07 00 00 ld [ %i4 ], %o0 <== NOT EXECUTED 4000dca8: 92 02 20 01 add %o0, 1, %o1 <== NOT EXECUTED 4000dcac: 7f ff d5 9f call 40003328 <== NOT EXECUTED 4000dcb0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED strcpy( sym_name, info->sym_link.name ); 4000dcb4: d2 07 00 00 ld [ %i4 ], %o1 <== NOT EXECUTED 4000dcb8: 40 00 06 9a call 4000f720 <== NOT EXECUTED 4000dcbc: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED node->info.sym_link.name = sym_name; 4000dcc0: 10 80 00 14 b 4000dd10 <== NOT EXECUTED 4000dcc4: e0 24 60 4c st %l0, [ %l1 + 0x4c ] <== NOT EXECUTED break; case IMFS_DEVICE: node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; 4000dcc8: 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; 4000dccc: c4 07 00 00 ld [ %i4 ], %g2 node->info.device.minor = info->device.minor; 4000dcd0: 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; 4000dcd4: 10 80 00 0f b 4000dd10 4000dcd8: c4 24 60 4c st %g2, [ %l1 + 0x4c ] node->info.device.minor = info->device.minor; break; case IMFS_LINEAR_FILE: node->info.linearfile.size = 0; 4000dcdc: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.linearfile.direct = 0; 4000dce0: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED case IMFS_MEMORY_FILE: node->info.file.size = 0; 4000dce4: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.file.indirect = 0; 4000dce8: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED node->info.file.doubly_indirect = 0; 4000dcec: c0 24 60 54 clr [ %l1 + 0x54 ] <== NOT EXECUTED node->info.file.triply_indirect = 0; 4000dcf0: 10 80 00 08 b 4000dd10 <== NOT EXECUTED 4000dcf4: c0 24 60 58 clr [ %l1 + 0x58 ] <== NOT EXECUTED break; default: assert(0); 4000dcf8: 11 10 00 61 sethi %hi(0x40018400), %o0 <== NOT EXECUTED 4000dcfc: 15 10 00 60 sethi %hi(0x40018000), %o2 <== NOT EXECUTED 4000dd00: 90 12 21 e8 or %o0, 0x1e8, %o0 <== NOT EXECUTED 4000dd04: 94 12 a0 58 or %o2, 0x58, %o2 <== NOT EXECUTED 4000dd08: 7f ff d4 0c call 40002d38 <__assert> <== NOT EXECUTED 4000dd0c: 92 10 20 77 mov 0x77, %o1 <== NOT EXECUTED /* * If this node has a parent, then put it in that directory list. */ if ( parent ) { 4000dd10: 80 a4 a0 00 cmp %l2, 0 4000dd14: 02 80 00 0b be 4000dd40 4000dd18: 90 04 a0 4c add %l2, 0x4c, %o0 Chain_Append( &parent->info.directory.Entries, &node->Node ); 4000dd1c: 7f ff e6 39 call 40007600 <_Chain_Append> 4000dd20: 92 10 00 11 mov %l1, %o1 node->Parent = parent; fs_info = parent_loc->mt_entry->fs_info; 4000dd24: 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; 4000dd28: e4 24 60 08 st %l2, [ %l1 + 8 ] fs_info = parent_loc->mt_entry->fs_info; 4000dd2c: c4 00 60 2c ld [ %g1 + 0x2c ], %g2 node->st_ino = ++fs_info->ino_count; 4000dd30: c2 00 80 00 ld [ %g2 ], %g1 4000dd34: 82 00 60 01 inc %g1 4000dd38: c2 20 80 00 st %g1, [ %g2 ] 4000dd3c: c2 24 60 34 st %g1, [ %l1 + 0x34 ] } return node; } 4000dd40: 81 c7 e0 08 ret 4000dd44: 81 e8 00 00 restore 4000b690 : int IMFS_eval_path( const char *pathname, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000b690: 9d e3 bf 60 save %sp, -160, %sp /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000b694: e0 06 80 00 ld [ %i2 ], %l0 int IMFS_eval_path( const char *pathname, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000b698: aa 10 00 18 mov %i0, %l5 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000b69c: a8 10 20 00 clr %l4 4000b6a0: a4 10 20 01 mov 1, %l2 * 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 ); 4000b6a4: ac 07 bf c3 add %fp, -61, %l6 4000b6a8: ba 07 bf f4 add %fp, -12, %i5 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000b6ac: 10 80 00 74 b 4000b87c 4000b6b0: 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 ); 4000b6b4: 92 10 00 16 mov %l6, %o1 4000b6b8: 40 00 01 eb call 4000be64 4000b6bc: 94 10 00 1d mov %i5, %o2 i += len; if ( !pathloc->node_access ) 4000b6c0: e2 06 80 00 ld [ %i2 ], %l1 * 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 ); 4000b6c4: a4 10 00 08 mov %o0, %l2 i += len; if ( !pathloc->node_access ) 4000b6c8: 80 a4 60 00 cmp %l1, 0 4000b6cc: 02 80 00 64 be 4000b85c 4000b6d0: 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 ) 4000b6d4: 80 a2 20 00 cmp %o0, 0 4000b6d8: 22 80 00 12 be,a 4000b720 4000b6dc: a0 10 00 11 mov %l1, %l0 if ( node->type == IMFS_DIRECTORY ) 4000b6e0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000b6e4: 80 a0 60 01 cmp %g1, 1 4000b6e8: 32 80 00 0e bne,a 4000b720 4000b6ec: a0 10 00 11 mov %l1, %l0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) 4000b6f0: 90 10 00 1a mov %i2, %o0 4000b6f4: 7f ff ff c7 call 4000b610 4000b6f8: 92 10 20 01 mov 1, %o1 4000b6fc: 80 a2 20 00 cmp %o0, 0 4000b700: 12 80 00 08 bne 4000b720 4000b704: a0 10 00 11 mov %l1, %l0 rtems_set_errno_and_return_minus_one( EACCES ); 4000b708: 40 00 0b 48 call 4000e428 <__errno> <== NOT EXECUTED 4000b70c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000b710: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b714: c2 22 00 00 st %g1, [ %o0 ] 4000b718: 81 c7 e0 08 ret 4000b71c: 81 e8 00 00 restore node = pathloc->node_access; switch( type ) { 4000b720: 80 a4 a0 03 cmp %l2, 3 4000b724: 02 80 00 26 be 4000b7bc 4000b728: a8 05 00 13 add %l4, %l3, %l4 4000b72c: 80 a4 a0 04 cmp %l2, 4 4000b730: 02 80 00 4f be 4000b86c 4000b734: 80 a4 a0 02 cmp %l2, 2 4000b738: 12 80 00 52 bne 4000b880 4000b73c: 80 a4 a0 00 cmp %l2, 0 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000b740: c2 05 e3 70 ld [ %l7 + 0x370 ], %g1 <== NOT EXECUTED 4000b744: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 4000b748: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 4000b74c: 02 bf ff da be 4000b6b4 <== NOT EXECUTED 4000b750: 90 05 40 14 add %l5, %l4, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == 4000b754: d2 06 a0 0c ld [ %i2 + 0xc ], %o1 <== NOT EXECUTED 4000b758: c2 02 60 18 ld [ %o1 + 0x18 ], %g1 <== NOT EXECUTED 4000b75c: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 4000b760: 32 80 00 0f bne,a 4000b79c <== NOT EXECUTED 4000b764: e0 04 60 08 ld [ %l1 + 8 ], %l0 <== 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; 4000b768: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 4000b76c: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 4000b770: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 4000b774: 40 00 0d 02 call 4000eb7c <== NOT EXECUTED 4000b778: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 4000b77c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000b780: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000b784: 40 00 0c fe call 4000eb7c <== NOT EXECUTED 4000b788: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); 4000b78c: c2 06 a0 08 ld [ %i2 + 8 ], %g1 <== NOT EXECUTED 4000b790: 90 25 00 13 sub %l4, %l3, %o0 <== NOT EXECUTED 4000b794: 10 80 00 54 b 4000b8e4 <== NOT EXECUTED 4000b798: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED } } else { if ( !node->Parent ) 4000b79c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4000b7a0: 32 80 00 3a bne,a 4000b888 <== NOT EXECUTED 4000b7a4: e0 26 80 00 st %l0, [ %i2 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000b7a8: 40 00 0b 20 call 4000e428 <__errno> <== NOT EXECUTED 4000b7ac: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000b7b0: e4 22 00 00 st %l2, [ %o0 ] <== NOT EXECUTED 4000b7b4: 81 c7 e0 08 ret <== NOT EXECUTED 4000b7b8: 81 e8 00 00 restore <== NOT EXECUTED case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { 4000b7bc: c2 04 60 48 ld [ %l1 + 0x48 ], %g1 4000b7c0: 80 a0 60 03 cmp %g1, 3 4000b7c4: 12 80 00 0a bne 4000b7ec 4000b7c8: 80 a0 60 04 cmp %g1, 4 IMFS_evaluate_hard_link( pathloc, 0 ); 4000b7cc: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000b7d0: 7f ff ff 97 call 4000b62c <== NOT EXECUTED 4000b7d4: 92 10 20 00 clr %o1 <== NOT EXECUTED node = pathloc->node_access; 4000b7d8: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED if ( !node ) 4000b7dc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b7e0: 32 80 00 0d bne,a 4000b814 <== NOT EXECUTED 4000b7e4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4000b7e8: 30 80 00 0f b,a 4000b824 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); } else if ( node->type == IMFS_SYM_LINK ) { 4000b7ec: 32 80 00 0b bne,a 4000b818 4000b7f0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 result = IMFS_evaluate_sym_link( pathloc, 0 ); 4000b7f4: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000b7f8: 40 00 00 50 call 4000b938 <== NOT EXECUTED 4000b7fc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000b800: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED node = pathloc->node_access; if ( result == -1 ) 4000b804: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000b808: 02 bf ff c4 be 4000b718 <== NOT EXECUTED 4000b80c: 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; 4000b810: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 4000b814: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b818: 80 a0 60 01 cmp %g1, 1 4000b81c: 22 80 00 06 be,a 4000b834 4000b820: d2 04 20 58 ld [ %l0 + 0x58 ], %o1 rtems_set_errno_and_return_minus_one( ENOTDIR ); 4000b824: 40 00 0b 01 call 4000e428 <__errno> <== NOT EXECUTED 4000b828: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000b82c: 10 bf ff ba b 4000b714 <== NOT EXECUTED 4000b830: 82 10 20 14 mov 0x14, %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 ) { 4000b834: 80 a2 60 00 cmp %o1, 0 4000b838: 02 80 00 04 be 4000b848 4000b83c: 90 10 00 10 mov %l0, %o0 newloc = node->info.directory.mt_fs->mt_fs_root; 4000b840: 10 80 00 1d b 4000b8b4 <== NOT EXECUTED 4000b844: 92 02 60 18 add %o1, 0x18, %o1 <== NOT EXECUTED /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); 4000b848: 40 00 01 59 call 4000bdac 4000b84c: 92 10 00 16 mov %l6, %o1 if ( !node ) 4000b850: a0 92 20 00 orcc %o0, 0, %l0 4000b854: 32 80 00 0d bne,a 4000b888 4000b858: e0 26 80 00 st %l0, [ %i2 ] rtems_set_errno_and_return_minus_one( ENOENT ); 4000b85c: 40 00 0a f3 call 4000e428 <__errno> 4000b860: b0 10 3f ff mov -1, %i0 4000b864: 10 bf ff ac b 4000b714 4000b868: 82 10 20 02 mov 2, %g1 case IMFS_NO_MORE_PATH: case IMFS_CURRENT_DIR: break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 4000b86c: 40 00 0a ef call 4000e428 <__errno> <== NOT EXECUTED 4000b870: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000b874: 10 bf ff a8 b 4000b714 <== NOT EXECUTED 4000b878: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED /* * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { 4000b87c: 80 a4 a0 00 cmp %l2, 0 4000b880: 22 80 00 06 be,a 4000b898 4000b884: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000b888: 80 a4 a0 04 cmp %l2, 4 4000b88c: 12 bf ff 8a bne 4000b6b4 4000b890: 90 05 40 14 add %l5, %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 ) { 4000b894: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b898: 80 a0 60 01 cmp %g1, 1 4000b89c: 12 80 00 18 bne 4000b8fc 4000b8a0: 01 00 00 00 nop if ( node->info.directory.mt_fs != NULL ) { 4000b8a4: d0 04 20 58 ld [ %l0 + 0x58 ], %o0 4000b8a8: 80 a2 20 00 cmp %o0, 0 4000b8ac: 02 80 00 14 be 4000b8fc 4000b8b0: 92 02 20 18 add %o0, 0x18, %o1 newloc = node->info.directory.mt_fs->mt_fs_root; 4000b8b4: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 4000b8b8: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 4000b8bc: 40 00 0c b0 call 4000eb7c <== NOT EXECUTED 4000b8c0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 4000b8c4: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000b8c8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000b8cc: 40 00 0c ac call 4000eb7c <== NOT EXECUTED 4000b8d0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000b8d4: c2 06 a0 08 ld [ %i2 + 8 ], %g1 <== NOT EXECUTED 4000b8d8: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED 4000b8dc: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED 4000b8e0: 90 25 00 08 sub %l4, %o0, %o0 <== NOT EXECUTED 4000b8e4: 90 05 40 08 add %l5, %o0, %o0 <== NOT EXECUTED 4000b8e8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b8ec: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000b8f0: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4000b8f4: 81 c7 e0 08 ret <== NOT EXECUTED 4000b8f8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); 4000b8fc: 7f ff ff 2c call 4000b5ac 4000b900: 90 10 00 1a mov %i2, %o0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 4000b904: 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 ); 4000b908: b0 10 00 08 mov %o0, %i0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 4000b90c: 7f ff ff 41 call 4000b610 4000b910: 90 10 00 1a mov %i2, %o0 4000b914: 80 a2 20 00 cmp %o0, 0 4000b918: 12 80 00 06 bne 4000b930 4000b91c: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EACCES ); 4000b920: 40 00 0a c2 call 4000e428 <__errno> <== NOT EXECUTED 4000b924: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 4000b928: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b92c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 4000b930: 81 c7 e0 08 ret 4000b934: 81 e8 00 00 restore 4000babc : int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 4000babc: 9d e3 bf 60 save %sp, -160, %sp /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000bac0: e0 06 40 00 ld [ %i1 ], %l0 int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 4000bac4: aa 10 00 18 mov %i0, %l5 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000bac8: a6 10 20 00 clr %l3 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); 4000bacc: ac 07 bf c3 add %fp, -61, %l6 4000bad0: ba 07 bf f4 add %fp, -12, %i5 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000bad4: 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 ); 4000bad8: 90 05 40 13 add %l5, %l3, %o0 4000badc: 92 10 00 16 mov %l6, %o1 4000bae0: 40 00 00 e1 call 4000be64 4000bae4: 94 10 00 1d mov %i5, %o2 i += len; if ( !pathloc->node_access ) 4000bae8: 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 ); 4000baec: a2 10 00 08 mov %o0, %l1 i += len; if ( !pathloc->node_access ) 4000baf0: 80 a4 a0 00 cmp %l2, 0 4000baf4: 02 80 00 8d be 4000bd28 4000baf8: e8 07 bf f4 ld [ %fp + -12 ], %l4 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) 4000bafc: 80 a2 20 00 cmp %o0, 0 4000bb00: 22 80 00 10 be,a 4000bb40 4000bb04: a6 04 c0 14 add %l3, %l4, %l3 <== NOT EXECUTED if ( node->type == IMFS_DIRECTORY ) 4000bb08: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000bb0c: 80 a0 60 01 cmp %g1, 1 4000bb10: 32 80 00 0c bne,a 4000bb40 4000bb14: a6 04 c0 14 add %l3, %l4, %l3 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) 4000bb18: 90 10 00 19 mov %i1, %o0 4000bb1c: 7f ff fe bd call 4000b610 4000bb20: 92 10 20 01 mov 1, %o1 4000bb24: 80 a2 20 00 cmp %o0, 0 4000bb28: 32 80 00 06 bne,a 4000bb40 4000bb2c: a6 04 c0 14 add %l3, %l4, %l3 rtems_set_errno_and_return_minus_one( EACCES ); 4000bb30: 40 00 0a 3e call 4000e428 <__errno> <== NOT EXECUTED 4000bb34: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bb38: 10 80 00 8e b 4000bd70 <== NOT EXECUTED 4000bb3c: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED node = pathloc->node_access; switch( type ) { 4000bb40: 80 a4 60 02 cmp %l1, 2 4000bb44: 02 80 00 0f be 4000bb80 4000bb48: a0 10 00 12 mov %l2, %l0 4000bb4c: 80 a4 60 02 cmp %l1, 2 4000bb50: 18 80 00 07 bgu 4000bb6c 4000bb54: 80 a4 60 03 cmp %l1, 3 4000bb58: 80 a4 60 00 cmp %l1, 0 4000bb5c: 02 80 00 61 be 4000bce0 4000bb60: 01 00 00 00 nop * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); 4000bb64: 10 bf ff de b 4000badc 4000bb68: 90 05 40 13 add %l5, %l3, %o0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000bb6c: 02 80 00 24 be 4000bbfc 4000bb70: 80 a4 60 04 cmp %l1, 4 4000bb74: 32 bf ff da bne,a 4000badc <== NOT EXECUTED 4000bb78: 90 05 40 13 add %l5, %l3, %o0 <== NOT EXECUTED 4000bb7c: 30 80 00 5d b,a 4000bcf0 <== 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 ) 4000bb80: c2 05 e3 70 ld [ %l7 + 0x370 ], %g1 <== NOT EXECUTED 4000bb84: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 4000bb88: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000bb8c: 02 bf ff d4 be 4000badc <== NOT EXECUTED 4000bb90: 90 05 40 13 add %l5, %l3, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){ 4000bb94: d2 06 60 0c ld [ %i1 + 0xc ], %o1 <== NOT EXECUTED 4000bb98: c2 02 60 18 ld [ %o1 + 0x18 ], %g1 <== NOT EXECUTED 4000bb9c: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000bba0: 32 80 00 0f bne,a 4000bbdc <== NOT EXECUTED 4000bba4: e0 04 a0 08 ld [ %l2 + 8 ], %l0 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; 4000bba8: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 4000bbac: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 4000bbb0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 4000bbb4: 40 00 0b f2 call 4000eb7c <== NOT EXECUTED 4000bbb8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 4000bbbc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000bbc0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000bbc4: 40 00 0b ee call 4000eb7c <== NOT EXECUTED 4000bbc8: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000bbcc: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED 4000bbd0: 90 24 c0 14 sub %l3, %l4, %o0 <== NOT EXECUTED 4000bbd4: 10 80 00 36 b 4000bcac <== NOT EXECUTED 4000bbd8: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED } } else { if ( !node->Parent ) 4000bbdc: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4000bbe0: 32 bf ff be bne,a 4000bad8 <== NOT EXECUTED 4000bbe4: e0 26 40 00 st %l0, [ %i1 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000bbe8: 40 00 0a 10 call 4000e428 <__errno> <== NOT EXECUTED 4000bbec: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bbf0: e2 22 00 00 st %l1, [ %o0 ] <== NOT EXECUTED 4000bbf4: 81 c7 e0 08 ret <== NOT EXECUTED 4000bbf8: 81 e8 00 00 restore <== NOT EXECUTED pathloc->node_access = node; break; case IMFS_NAME: if ( node->type == IMFS_HARD_LINK ) { 4000bbfc: d0 04 a0 48 ld [ %l2 + 0x48 ], %o0 4000bc00: 80 a2 20 03 cmp %o0, 3 4000bc04: 12 80 00 0a bne 4000bc2c 4000bc08: 80 a2 20 04 cmp %o0, 4 result = IMFS_evaluate_link( pathloc, 0 ); 4000bc0c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000bc10: 7f ff ff 7e call 4000ba08 <== NOT EXECUTED 4000bc14: 92 10 20 00 clr %o1 <== NOT EXECUTED if ( result == -1 ) 4000bc18: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000bc1c: 12 80 00 0c bne 4000bc4c <== NOT EXECUTED 4000bc20: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4000bc24: 81 c7 e0 08 ret <== NOT EXECUTED 4000bc28: 81 e8 00 00 restore <== NOT EXECUTED return -1; } else if ( node->type == IMFS_SYM_LINK ) { 4000bc2c: 32 80 00 09 bne,a 4000bc50 4000bc30: d0 06 40 00 ld [ %i1 ], %o0 result = IMFS_evaluate_link( pathloc, 0 ); 4000bc34: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000bc38: 7f ff ff 74 call 4000ba08 <== NOT EXECUTED 4000bc3c: 92 10 20 00 clr %o1 <== NOT EXECUTED if ( result == -1 ) 4000bc40: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000bc44: 02 bf ff ec be 4000bbf4 <== NOT EXECUTED 4000bc48: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED return -1; } node = pathloc->node_access; 4000bc4c: d0 06 40 00 ld [ %i1 ], %o0 <== NOT EXECUTED if ( !node ) 4000bc50: 80 a2 20 00 cmp %o0, 0 4000bc54: 02 80 00 44 be 4000bd64 4000bc58: 01 00 00 00 nop /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 4000bc5c: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 4000bc60: 80 a0 60 01 cmp %g1, 1 4000bc64: 12 80 00 40 bne 4000bd64 4000bc68: 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 ) { 4000bc6c: d2 02 20 58 ld [ %o0 + 0x58 ], %o1 4000bc70: 80 a2 60 00 cmp %o1, 0 4000bc74: 02 80 00 14 be 4000bcc4 4000bc78: 92 02 60 18 add %o1, 0x18, %o1 newloc = node->info.directory.mt_fs->mt_fs_root; 4000bc7c: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 4000bc80: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 4000bc84: 40 00 0b be call 4000eb7c <== NOT EXECUTED 4000bc88: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 4000bc8c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000bc90: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000bc94: 40 00 0b ba call 4000eb7c <== NOT EXECUTED 4000bc98: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000bc9c: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED 4000bca0: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED 4000bca4: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 4000bca8: 90 24 c0 08 sub %l3, %o0, %o0 <== NOT EXECUTED 4000bcac: 90 05 40 08 add %l5, %o0, %o0 <== NOT EXECUTED 4000bcb0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000bcb4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000bcb8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4000bcbc: 81 c7 e0 08 ret <== NOT EXECUTED 4000bcc0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); 4000bcc4: 40 00 00 3a call 4000bdac 4000bcc8: 92 10 00 16 mov %l6, %o1 /* * If there is no node we have found the name of the node we * wish to create. */ if ( ! node ) 4000bccc: a0 92 20 00 orcc %o0, 0, %l0 4000bcd0: 02 80 00 0c be 4000bd00 4000bcd4: c2 07 bf f4 ld [ %fp + -12 ], %g1 done = TRUE; else pathloc->node_access = node; 4000bcd8: 10 bf ff 80 b 4000bad8 4000bcdc: e0 26 40 00 st %l0, [ %i1 ] break; case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); 4000bce0: 40 00 09 d2 call 4000e428 <__errno> <== NOT EXECUTED 4000bce4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bce8: 10 80 00 22 b 4000bd70 <== NOT EXECUTED 4000bcec: 82 10 20 11 mov 0x11, %g1 <== NOT EXECUTED break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 4000bcf0: 40 00 09 ce call 4000e428 <__errno> <== NOT EXECUTED 4000bcf4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bcf8: 10 80 00 1e b 4000bd70 <== NOT EXECUTED 4000bcfc: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; 4000bd00: 84 05 40 13 add %l5, %l3, %g2 4000bd04: 82 24 c0 01 sub %l3, %g1, %g1 4000bd08: 82 05 40 01 add %l5, %g1, %g1 4000bd0c: 10 80 00 0b b 4000bd38 4000bd10: 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++) { if ( !IMFS_is_separator( path[ i ] ) ) 4000bd14: 80 a0 60 2f cmp %g1, 0x2f <== NOT EXECUTED 4000bd18: 02 80 00 08 be 4000bd38 <== NOT EXECUTED 4000bd1c: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 4000bd20: 22 80 00 07 be,a 4000bd3c <== NOT EXECUTED 4000bd24: c2 48 80 00 ldsb [ %g2 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000bd28: 40 00 09 c0 call 4000e428 <__errno> <== NOT EXECUTED 4000bd2c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bd30: 10 80 00 10 b 4000bd70 <== NOT EXECUTED 4000bd34: 82 10 20 02 mov 2, %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++) { 4000bd38: c2 48 80 00 ldsb [ %g2 ], %g1 4000bd3c: 80 a0 60 00 cmp %g1, 0 4000bd40: 12 bf ff f5 bne 4000bd14 4000bd44: 84 00 a0 01 inc %g2 /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); 4000bd48: 7f ff fe 19 call 4000b5ac 4000bd4c: 90 10 00 19 mov %i1, %o0 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) 4000bd50: c2 06 40 00 ld [ %i1 ], %g1 4000bd54: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 4000bd58: 80 a0 60 01 cmp %g1, 1 4000bd5c: 02 80 00 08 be 4000bd7c 4000bd60: b0 10 00 08 mov %o0, %i0 rtems_set_errno_and_return_minus_one( ENOTDIR ); 4000bd64: 40 00 09 b1 call 4000e428 <__errno> <== NOT EXECUTED 4000bd68: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bd6c: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 4000bd70: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000bd74: 81 c7 e0 08 ret <== NOT EXECUTED 4000bd78: 81 e8 00 00 restore <== NOT EXECUTED /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) 4000bd7c: 90 10 00 19 mov %i1, %o0 4000bd80: 7f ff fe 24 call 4000b610 4000bd84: 92 10 20 03 mov 3, %o1 4000bd88: 80 a2 20 00 cmp %o0, 0 4000bd8c: 12 80 00 06 bne 4000bda4 4000bd90: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EACCES ); 4000bd94: 40 00 09 a5 call 4000e428 <__errno> <== NOT EXECUTED 4000bd98: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 4000bd9c: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000bda0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 4000bda4: 81 c7 e0 08 ret 4000bda8: 81 e8 00 00 restore 4000b62c : int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000b62c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 4000b630: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_HARD_LINK ) 4000b634: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b638: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000b63c: 22 80 00 05 be,a 4000b650 <== NOT EXECUTED 4000b640: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 4000b644: 7f ff ef 55 call 40007398 <== NOT EXECUTED 4000b648: 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; 4000b64c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED IMFS_Set_handlers( node ); 4000b650: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b654: 7f ff ff d6 call 4000b5ac <== NOT EXECUTED 4000b658: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 4000b65c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000b660: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b664: 7f ff ff eb call 4000b610 <== NOT EXECUTED 4000b668: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000b66c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b670: 12 80 00 06 bne 4000b688 <== NOT EXECUTED 4000b674: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); 4000b678: 40 00 0b 6c call 4000e428 <__errno> <== NOT EXECUTED 4000b67c: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 4000b680: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b684: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 4000b688: 81 c7 e0 08 ret <== NOT EXECUTED 4000b68c: 81 e8 00 00 restore <== NOT EXECUTED 4000ba08 : int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000ba08: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 4000ba0c: 23 10 00 64 sethi %hi(0x40019000), %l1 <== NOT EXECUTED 4000ba10: c4 04 63 70 ld [ %l1 + 0x370 ], %g2 ! 40019370 <== NOT EXECUTED { IMFS_jnode_t *jnode; int result = 0; do { jnode = node->node_access; 4000ba14: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 4000ba18: c2 10 a0 26 lduh [ %g2 + 0x26 ], %g1 <== NOT EXECUTED 4000ba1c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000ba20: c2 30 a0 26 sth %g1, [ %g2 + 0x26 ] <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { 4000ba24: 83 28 60 10 sll %g1, 0x10, %g1 <== NOT EXECUTED 4000ba28: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 4000ba2c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4000ba30: 08 80 00 08 bleu 4000ba50 <== NOT EXECUTED 4000ba34: 90 10 20 00 clr %o0 <== NOT EXECUTED rtems_filesystem_link_counts = 0; rtems_set_errno_and_return_minus_one( ELOOP ); 4000ba38: 40 00 0a 7c call 4000e428 <__errno> <== NOT EXECUTED 4000ba3c: c0 30 a0 26 clrh [ %g2 + 0x26 ] <== NOT EXECUTED 4000ba40: 82 10 20 5c mov 0x5c, %g1 <== NOT EXECUTED 4000ba44: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000ba48: 10 80 00 1b b 4000bab4 <== NOT EXECUTED 4000ba4c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Follow the Link node. */ if ( jnode->type == IMFS_HARD_LINK ) 4000ba50: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000ba54: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000ba58: 32 80 00 07 bne,a 4000ba74 <== NOT EXECUTED 4000ba5c: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); 4000ba60: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ba64: 7f ff fe f2 call 4000b62c <== NOT EXECUTED 4000ba68: 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 ) ) ); 4000ba6c: 10 80 00 08 b 4000ba8c <== NOT EXECUTED 4000ba70: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED */ if ( jnode->type == IMFS_HARD_LINK ) result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) 4000ba74: 32 80 00 09 bne,a 4000ba98 <== NOT EXECUTED 4000ba78: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED result = IMFS_evaluate_sym_link( node, flags ); 4000ba7c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ba80: 7f ff ff ae call 4000b938 <== NOT EXECUTED 4000ba84: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); 4000ba88: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000ba8c: 12 80 00 08 bne 4000baac <== NOT EXECUTED 4000ba90: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000ba94: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000ba98: 82 00 7f fd add %g1, -3, %g1 <== NOT EXECUTED 4000ba9c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000baa0: 08 bf ff dd bleu 4000ba14 <== NOT EXECUTED 4000baa4: c4 04 63 70 ld [ %l1 + 0x370 ], %g2 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; 4000baa8: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000baac: c2 00 63 70 ld [ %g1 + 0x370 ], %g1 ! 40019370 <== NOT EXECUTED 4000bab0: c0 30 60 26 clrh [ %g1 + 0x26 ] <== NOT EXECUTED return result; } 4000bab4: 81 c7 e0 08 ret <== NOT EXECUTED 4000bab8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000b938 : int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000b938: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 4000b93c: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_SYM_LINK ) 4000b940: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000b944: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000b948: 02 80 00 04 be 4000b958 <== NOT EXECUTED 4000b94c: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 4000b950: 7f ff ee 92 call 40007398 <== NOT EXECUTED 4000b954: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED if ( !jnode->Parent ) 4000b958: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000b95c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000b960: 32 80 00 06 bne,a 4000b978 <== NOT EXECUTED 4000b964: c2 24 40 00 st %g1, [ %l1 ] <== NOT EXECUTED rtems_fatal_error_occurred( 0xBAD00000 ); 4000b968: 7f ff ee 8c call 40007398 <== NOT EXECUTED 4000b96c: 11 2e b4 00 sethi %hi(0xbad00000), %o0 <== 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; 4000b970: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000b974: c2 24 40 00 st %g1, [ %l1 ] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( 4000b978: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4000b97c: c2 48 40 00 ldsb [ %g1 ], %g1 <== NOT EXECUTED 4000b980: 80 a0 60 2f cmp %g1, 0x2f <== NOT EXECUTED 4000b984: 02 80 00 06 be 4000b99c <== NOT EXECUTED 4000b988: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 4000b98c: 02 80 00 04 be 4000b99c <== NOT EXECUTED 4000b990: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000b994: 12 80 00 09 bne 4000b9b8 <== NOT EXECUTED 4000b998: 82 10 20 00 clr %g1 <== NOT EXECUTED 4000b99c: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000b9a0: d2 00 63 70 ld [ %g1 + 0x370 ], %o1 ! 40019370 <== NOT EXECUTED 4000b9a4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000b9a8: 92 02 60 14 add %o1, 0x14, %o1 <== NOT EXECUTED 4000b9ac: 40 00 0c 74 call 4000eb7c <== NOT EXECUTED 4000b9b0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 4000b9b4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED /* * Use eval path to evaluate the path of the symbolic link. */ result = IMFS_eval_path( 4000b9b8: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 4000b9bc: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 4000b9c0: 90 00 40 08 add %g1, %o0, %o0 <== NOT EXECUTED 4000b9c4: 7f ff ff 33 call 4000b690 <== NOT EXECUTED 4000b9c8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b9cc: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED &jnode->info.sym_link.name[i], flags, node ); IMFS_Set_handlers( node ); 4000b9d0: 7f ff fe f7 call 4000b5ac <== NOT EXECUTED 4000b9d4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 4000b9d8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000b9dc: 7f ff ff 0d call 4000b610 <== NOT EXECUTED 4000b9e0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b9e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000b9e8: 12 80 00 06 bne 4000ba00 <== NOT EXECUTED 4000b9ec: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); 4000b9f0: 40 00 0a 8e call 4000e428 <__errno> <== NOT EXECUTED 4000b9f4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 4000b9f8: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000b9fc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 4000ba00: 81 c7 e0 08 ret <== NOT EXECUTED 4000ba04: 81 e8 00 00 restore <== NOT EXECUTED 4000dd48 : int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { 4000dd48: 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 ) ) ) 4000dd4c: 83 2e 60 10 sll %i1, 0x10, %g1 <== NOT EXECUTED 4000dd50: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 4000dd54: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 4000dd58: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000dd5c: 02 80 00 08 be 4000dd7c <== NOT EXECUTED 4000dd60: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EPERM ); 4000dd64: 40 00 01 b1 call 4000e428 <__errno> <== NOT EXECUTED 4000dd68: 01 00 00 00 nop <== NOT EXECUTED 4000dd6c: 82 10 20 01 mov 1, %g1 ! 1 <== NOT EXECUTED 4000dd70: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 4000dd74: 10 80 00 0c b 4000dda4 <== NOT EXECUTED 4000dd78: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO); 4000dd7c: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 <== NOT EXECUTED jnode->st_mode |= mode; IMFS_update_ctime( jnode ); 4000dd80: 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; 4000dd84: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 4000dd88: 82 16 40 01 or %i1, %g1, %g1 <== NOT EXECUTED IMFS_update_ctime( jnode ); 4000dd8c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000dd90: 7f ff f9 e7 call 4000c52c <== NOT EXECUTED 4000dd94: c2 36 20 2e sth %g1, [ %i0 + 0x2e ] <== NOT EXECUTED 4000dd98: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000dd9c: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000dda0: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED return 0; } 4000dda4: 81 c7 e0 08 ret <== NOT EXECUTED 4000dda8: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED 40020a64 : int cmd, rtems_libio_t *iop ) { return 0; } 40020a64: 81 c3 e0 08 retl <== NOT EXECUTED 40020a68: 90 10 20 00 clr %o0 <== NOT EXECUTED 40020a6c : int IMFS_fdatasync( rtems_libio_t *iop ) { return 0; } 40020a6c: 81 c3 e0 08 retl <== NOT EXECUTED 40020a70: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000bdac : IMFS_jnode_t *IMFS_find_match_in_dir( IMFS_jnode_t *directory, char *name ) { 4000bdac: 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 ); 4000bdb0: 80 a6 20 00 cmp %i0, 0 4000bdb4: 12 80 00 09 bne 4000bdd8 4000bdb8: 80 a6 60 00 cmp %i1, 0 4000bdbc: 11 10 00 61 sethi %hi(0x40018400), %o0 <== NOT EXECUTED 4000bdc0: 15 10 00 61 sethi %hi(0x40018400), %o2 <== NOT EXECUTED 4000bdc4: 90 12 20 a0 or %o0, 0xa0, %o0 <== NOT EXECUTED 4000bdc8: 94 12 a0 f0 or %o2, 0xf0, %o2 <== NOT EXECUTED 4000bdcc: 7f ff db db call 40002d38 <__assert> <== NOT EXECUTED 4000bdd0: 92 10 20 2a mov 0x2a, %o1 <== NOT EXECUTED if ( !name ) 4000bdd4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 4000bdd8: 22 80 00 12 be,a 4000be20 4000bddc: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; assert( name ); if ( !directory ) 4000bde0: 80 a6 20 00 cmp %i0, 0 4000bde4: 02 80 00 0f be 4000be20 4000bde8: 90 10 00 19 mov %i1, %o0 /* * Check for "." and ".." */ if ( !strcmp( name, dotname ) ) 4000bdec: 13 10 00 64 sethi %hi(0x40019000), %o1 4000bdf0: 40 00 0e 1c call 4000f660 4000bdf4: 92 12 62 f0 or %o1, 0x2f0, %o1 ! 400192f0 4000bdf8: 80 a2 20 00 cmp %o0, 0 4000bdfc: 02 80 00 09 be 4000be20 4000be00: 90 10 00 19 mov %i1, %o0 return directory; if ( !strcmp( name, dotdotname ) ) 4000be04: 13 10 00 64 sethi %hi(0x40019000), %o1 4000be08: 40 00 0e 16 call 4000f660 4000be0c: 92 12 62 f8 or %o1, 0x2f8, %o1 ! 400192f8 4000be10: 80 a2 20 00 cmp %o0, 0 4000be14: 32 80 00 05 bne,a 4000be28 4000be18: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 return directory->Parent; 4000be1c: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4000be20: 81 c7 e0 08 ret <== NOT EXECUTED 4000be24: 81 e8 00 00 restore <== NOT EXECUTED the_chain = &directory->info.directory.Entries; for ( the_node = the_chain->first; !_Chain_Is_tail( the_chain, the_node ); 4000be28: 10 80 00 09 b 4000be4c 4000be2c: b0 06 20 50 add %i0, 0x50, %i0 the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; if ( !strcmp( name, the_jnode->name ) ) 4000be30: 40 00 0e 0c call 4000f660 4000be34: 90 10 00 19 mov %i1, %o0 4000be38: 80 a2 20 00 cmp %o0, 0 4000be3c: 32 80 00 04 bne,a 4000be4c 4000be40: e0 04 00 00 ld [ %l0 ], %l0 4000be44: 81 c7 e0 08 ret 4000be48: 91 e8 00 10 restore %g0, %l0, %o0 return directory->Parent; the_chain = &directory->info.directory.Entries; for ( the_node = the_chain->first; !_Chain_Is_tail( the_chain, the_node ); 4000be4c: 80 a4 00 18 cmp %l0, %i0 4000be50: 12 bf ff f8 bne 4000be30 4000be54: 92 04 20 0c add %l0, 0xc, %o1 4000be58: b0 10 20 00 clr %i0 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } 4000be5c: 81 c7 e0 08 ret 4000be60: 81 e8 00 00 restore 40016694 : int IMFS_freenodinfo( rtems_filesystem_location_info_t *pathloc /* IN */ ) { return 0; } 40016694: 81 c3 e0 08 retl <== NOT EXECUTED 40016698: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001669c : ((IMFS_jnode_t *)( Chain_Head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { 4001669c: 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; 400166a0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 400166a4: 90 07 bf e8 add %fp, -24, %o0 <== 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; 400166a8: e0 06 20 18 ld [ %i0 + 0x18 ], %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 ); 400166ac: a2 10 00 08 mov %o0, %l1 <== 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; 400166b0: 40 00 38 76 call 40024888 <== NOT EXECUTED 400166b4: 92 06 20 18 add %i0, 0x18, %o1 <== NOT EXECUTED /* * Set this to null to indicate that it is being unmounted. */ temp_mt_entry->mt_fs_root.node_access = NULL; 400166b8: c0 26 20 18 clr [ %i0 + 0x18 ] <== NOT EXECUTED do { next = jnode->Parent; loc.node_access = (void *)jnode; 400166bc: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED */ temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; 400166c0: f0 04 20 08 ld [ %l0 + 8 ], %i0 <== NOT EXECUTED loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); 400166c4: 7f ff fd f4 call 40015e94 <== NOT EXECUTED 400166c8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { 400166cc: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 400166d0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400166d4: 12 80 00 06 bne 400166ec <== NOT EXECUTED 400166d8: 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 ) ) { 400166dc: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 400166e0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400166e4: 12 80 00 08 bne 40016704 <== NOT EXECUTED 400166e8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED result = IMFS_unlink( &loc ); 400166ec: 7f ff bb ff call 400056e8 <== NOT EXECUTED 400166f0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if (result != 0) 400166f4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400166f8: 12 80 00 13 bne 40016744 <== NOT EXECUTED 400166fc: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return -1; jnode = next; } if ( jnode != NULL ) { 40016700: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40016704: 02 80 00 12 be 4001674c <== NOT EXECUTED 40016708: 01 00 00 00 nop <== NOT EXECUTED if ( jnode->type == IMFS_DIRECTORY ) { 4001670c: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40016710: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40016714: 32 bf ff eb bne,a 400166c0 <== NOT EXECUTED 40016718: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED if ( jnode_has_children( jnode ) ) 4001671c: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40016720: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 40016724: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40016728: 22 bf ff e6 be,a 400166c0 <== NOT EXECUTED 4001672c: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 40016730: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40016734: 02 80 00 06 be 4001674c <== NOT EXECUTED 40016738: 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; 4001673c: 10 bf ff e1 b 400166c0 <== NOT EXECUTED 40016740: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED jnode = next; } if ( jnode != NULL ) { if ( jnode->type == IMFS_DIRECTORY ) { if ( jnode_has_children( jnode ) ) jnode = jnode_get_first_child( jnode ); 40016744: 81 c7 e0 08 ret <== NOT EXECUTED 40016748: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED } } } while (jnode != NULL); return 0; } 4001674c: 81 c7 e0 08 ret <== NOT EXECUTED 40016750: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000be64 : IMFS_token_types IMFS_get_token( const char *path, char *token, int *token_len ) { 4000be64: 9d e3 bf 98 save %sp, -104, %sp register char c; /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; 4000be68: c4 0e 00 00 ldub [ %i0 ], %g2 4000be6c: 10 80 00 07 b 4000be88 4000be70: 86 10 20 00 clr %g3 while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { token[i] = c; if ( i == IMFS_NAME_MAX ) 4000be74: 12 80 00 04 bne 4000be84 4000be78: 86 00 e0 01 inc %g3 4000be7c: 81 c7 e0 08 ret <== NOT EXECUTED 4000be80: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED return IMFS_INVALID_TOKEN; if ( !IMFS_is_valid_name_char(c) ) type = IMFS_INVALID_TOKEN; c = path [++i]; 4000be84: c4 08 c0 18 ldub [ %g3 + %i0 ], %g2 /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000be88: 83 28 a0 18 sll %g2, 0x18, %g1 4000be8c: 83 38 60 18 sra %g1, 0x18, %g1 4000be90: 80 a0 60 2f cmp %g1, 0x2f 4000be94: 02 80 00 09 be 4000beb8 4000be98: 80 a0 60 5c cmp %g1, 0x5c 4000be9c: 02 80 00 07 be 4000beb8 4000bea0: 80 a0 60 00 cmp %g1, 0 4000bea4: 02 80 00 06 be 4000bebc 4000bea8: 80 a0 e0 00 cmp %g3, 0 4000beac: 80 a0 e0 20 cmp %g3, 0x20 4000beb0: 24 bf ff f1 ble,a 4000be74 4000beb4: c4 28 c0 19 stb %g2, [ %g3 + %i1 ] /* * Copy a seperator into token. */ if ( i == 0 ) { 4000beb8: 80 a0 e0 00 cmp %g3, 0 4000bebc: 12 80 00 0a bne 4000bee4 4000bec0: 82 00 c0 19 add %g3, %i1, %g1 token[i] = c; 4000bec4: c4 2e 40 00 stb %g2, [ %i1 ] if ( token[i] != '\0' ) { 4000bec8: 83 28 a0 18 sll %g2, 0x18, %g1 4000becc: 80 a0 60 00 cmp %g1, 0 4000bed0: 02 80 00 0a be 4000bef8 4000bed4: b0 10 20 00 clr %i0 4000bed8: 86 10 20 01 mov 1, %g3 4000bedc: 10 80 00 07 b 4000bef8 4000bee0: b0 10 20 01 mov 1, %i0 i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { 4000bee4: c2 48 7f ff ldsb [ %g1 + -1 ], %g1 4000bee8: 80 a0 60 00 cmp %g1, 0 4000beec: 02 80 00 03 be 4000bef8 4000bef0: b0 10 20 03 mov 3, %i0 token[i] = '\0'; 4000bef4: c0 2e 40 03 clrb [ %i1 + %g3 ] /* * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { 4000bef8: 80 a6 20 03 cmp %i0, 3 4000befc: 12 80 00 11 bne 4000bf40 4000bf00: c6 26 80 00 st %g3, [ %i2 ] if ( strcmp( token, "..") == 0 ) 4000bf04: 90 10 00 19 mov %i1, %o0 4000bf08: 13 10 00 60 sethi %hi(0x40018000), %o1 4000bf0c: 40 00 0d d5 call 4000f660 4000bf10: 92 12 62 90 or %o1, 0x290, %o1 ! 40018290 4000bf14: 80 a2 20 00 cmp %o0, 0 4000bf18: 12 80 00 04 bne 4000bf28 4000bf1c: 90 10 00 19 mov %i1, %o0 4000bf20: 81 c7 e0 08 ret <== NOT EXECUTED 4000bf24: 91 e8 20 02 restore %g0, 2, %o0 <== NOT EXECUTED type = IMFS_UP_DIR; else if ( strcmp( token, "." ) == 0 ) 4000bf28: 13 10 00 61 sethi %hi(0x40018400), %o1 4000bf2c: 40 00 0d cd call 4000f660 4000bf30: 92 12 61 00 or %o1, 0x100, %o1 ! 40018500 <_CPU_Trap_slot_template+0x70> 4000bf34: 80 a2 20 00 cmp %o0, 0 4000bf38: 22 80 00 02 be,a 4000bf40 4000bf3c: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED type = IMFS_CURRENT_DIR; } return type; } 4000bf40: 81 c7 e0 08 ret 4000bf44: 81 e8 00 00 restore 40005374 : int IMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 40005374: 13 10 00 df sethi %hi(0x40037c00), %o1 <== NOT EXECUTED 40005378: 15 10 00 e1 sethi %hi(0x40038400), %o2 <== NOT EXECUTED 4000537c: 17 10 00 e1 sethi %hi(0x40038400), %o3 <== NOT EXECUTED 40005380: 92 12 63 00 or %o1, 0x300, %o1 <== NOT EXECUTED 40005384: 94 12 a1 28 or %o2, 0x128, %o2 <== NOT EXECUTED 40005388: 96 12 e0 b8 or %o3, 0xb8, %o3 <== NOT EXECUTED 4000538c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40005390: 40 00 00 03 call 4000539c <== NOT EXECUTED 40005394: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40005398: 01 00 00 00 nop 4000bf48 : 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 ) { 4000bf48: 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, 4000bf4c: 03 10 00 63 sethi %hi(0x40018c00), %g1 4000bf50: c4 00 61 50 ld [ %g1 + 0x150 ], %g2 ! 40018d50 4000bf54: 86 10 20 00 clr %g3 4000bf58: 10 80 00 05 b 4000bf6c 4000bf5c: 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) { 4000bf60: 22 80 00 02 be,a 4000bf68 4000bf64: 86 10 20 01 mov 1, %g3 /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) { 4000bf68: 83 28 60 01 sll %g1, 1, %g1 int bit_mask; /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); 4000bf6c: 80 a0 e0 00 cmp %g3, 0 4000bf70: 32 80 00 07 bne,a 4000bf8c 4000bf74: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000bf78: 80 a0 62 00 cmp %g1, 0x200 4000bf7c: 04 bf ff f9 ble 4000bf60 4000bf80: 80 a0 40 02 cmp %g1, %g2 bit_mask <<= 1) { if (bit_mask == requested_bytes_per_block) { is_valid = TRUE; } } *dest_bytes_per_block = ((is_valid) 4000bf84: 84 10 20 80 mov 0x80, %g2 <== NOT EXECUTED 4000bf88: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED * 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( 4000bf8c: 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) 4000bf90: c4 20 60 84 st %g2, [ %g1 + 0x84 ] * 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( 4000bf94: 92 10 20 01 mov 1, %o1 4000bf98: 90 10 20 00 clr %o0 4000bf9c: 15 10 00 60 sethi %hi(0x40018000), %o2 4000bfa0: 17 00 00 10 sethi %hi(0x4000), %o3 4000bfa4: 94 12 a2 30 or %o2, 0x230, %o2 4000bfa8: 40 00 07 0b call 4000dbd4 4000bfac: 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; 4000bfb0: 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( 4000bfb4: 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; 4000bfb8: f2 26 20 20 st %i1, [ %i0 + 0x20 ] "", ( S_IFDIR | 0755 ), NULL ); temp_mt_entry->mt_fs_root.handlers = directory_handlers; 4000bfbc: 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; 4000bfc0: 13 10 00 65 sethi %hi(0x40019400), %o1 4000bfc4: 90 06 20 30 add %i0, 0x30, %o0 4000bfc8: 40 00 0a ed call 4000eb7c 4000bfcc: 92 12 60 a0 or %o1, 0xa0, %o1 /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); 4000bfd0: 90 10 20 01 mov 1, %o0 4000bfd4: 7f ff dc d5 call 40003328 4000bfd8: 92 10 20 0c mov 0xc, %o1 if ( !fs_info ){ 4000bfdc: 80 a2 20 00 cmp %o0, 0 4000bfe0: 12 80 00 0a bne 4000c008 4000bfe4: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 free(temp_mt_entry->mt_fs_root.node_access); 4000bfe8: 7f ff dc 12 call 40003030 <== NOT EXECUTED 4000bfec: 90 10 00 02 mov %g2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); 4000bff0: 40 00 09 0e call 4000e428 <__errno> <== NOT EXECUTED 4000bff4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000bff8: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000bffc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c000: 81 c7 e0 08 ret <== NOT EXECUTED 4000c004: 81 e8 00 00 restore <== NOT EXECUTED /* * Set st_ino for the root to 1. */ fs_info->ino_count = 1; 4000c008: 82 10 20 01 mov 1, %g1 4000c00c: 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; 4000c010: 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; 4000c014: f6 22 20 08 st %i3, [ %o0 + 8 ] jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; 4000c018: 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; 4000c01c: 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; } 4000c020: 81 c7 e0 08 ret 4000c024: 91 e8 20 00 restore %g0, 0, %o0 4000547c : int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { 4000547c: 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; 40005480: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40005484: c2 27 bf dc st %g1, [ %fp + -36 ] <== NOT EXECUTED if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) 40005488: c2 10 60 30 lduh [ %g1 + 0x30 ], %g1 <== NOT EXECUTED 4000548c: 80 a0 60 07 cmp %g1, 7 <== NOT EXECUTED 40005490: 08 80 00 06 bleu 400054a8 <== NOT EXECUTED 40005494: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EMLINK ); 40005498: 40 00 76 57 call 40022df4 <__errno> <== NOT EXECUTED 4000549c: 01 00 00 00 nop <== NOT EXECUTED 400054a0: 10 80 00 13 b 400054ec <== NOT EXECUTED 400054a4: 82 10 20 1f mov 0x1f, %g1 ! 1f <== NOT EXECUTED /* * Remove any separators at the end of the string. */ IMFS_get_token( token, new_name, &i ); 400054a8: a0 07 bf bb add %fp, -69, %l0 <== NOT EXECUTED 400054ac: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 400054b0: 7f ff ff 78 call 40005290 <== NOT EXECUTED 400054b4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 400054b8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 400054bc: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 400054c0: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 400054c4: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 400054c8: 98 07 bf dc add %fp, -36, %o4 <== NOT EXECUTED 400054cc: 40 00 42 0f call 40015d08 <== NOT EXECUTED 400054d0: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 400054d4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400054d8: 12 80 00 08 bne 400054f8 <== NOT EXECUTED 400054dc: c4 07 bf dc ld [ %fp + -36 ], %g2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 400054e0: 40 00 76 45 call 40022df4 <__errno> <== NOT EXECUTED 400054e4: 01 00 00 00 nop <== NOT EXECUTED 400054e8: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 400054ec: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400054f0: 81 c7 e0 08 ret <== NOT EXECUTED 400054f4: 91 e8 3f ff restore %g0, -1, %o0 <== 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 ); 400054f8: 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++; 400054fc: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 40005500: 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++; 40005504: 82 00 60 01 inc %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 40005508: 40 00 01 cf call 40005c44 <== NOT EXECUTED 4000550c: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED 40005510: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 40005514: c2 07 bf dc ld [ %fp + -36 ], %g1 <== NOT EXECUTED 40005518: c4 20 60 44 st %g2, [ %g1 + 0x44 ] <== NOT EXECUTED return 0; } 4000551c: 81 c7 e0 08 ret <== NOT EXECUTED 40005520: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001a660 : MEMFILE_STATIC int IMFS_memfile_addblock( IMFS_jnode_t *the_jnode, unsigned int block ) { 4001a660: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED block_p memory; block_p *block_entry_ptr; assert( the_jnode ); 4001a664: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001a668: 32 80 00 09 bne,a 4001a68c <== NOT EXECUTED 4001a66c: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a670: 92 10 21 69 mov 0x169, %o1 <== NOT EXECUTED 4001a674: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a678: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a67c: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a680: 7f ff ac b6 call 40005958 <__assert> <== NOT EXECUTED 4001a684: 94 12 a2 a8 or %o2, 0x2a8, %o2 <== NOT EXECUTED 4001a688: 30 80 00 0d b,a 4001a6bc <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001a68c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a690: 02 80 00 07 be 4001a6ac <== NOT EXECUTED 4001a694: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a698: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a69c: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a6a0: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001a6a4: 7f ff ac ad call 40005958 <__assert> <== NOT EXECUTED 4001a6a8: 92 10 21 6d mov 0x16d, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001a6ac: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a6b0: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a6b4: 02 80 00 08 be 4001a6d4 <== NOT EXECUTED 4001a6b8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 4001a6bc: 40 00 21 ce call 40022df4 <__errno> <== NOT EXECUTED 4001a6c0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001a6c4: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001a6c8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a6cc: 81 c7 e0 08 ret <== NOT EXECUTED 4001a6d0: 81 e8 00 00 restore <== NOT EXECUTED block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); 4001a6d4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001a6d8: 7f ff fe 68 call 4001a078 <== NOT EXECUTED 4001a6dc: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED if ( *block_entry_ptr ) 4001a6e0: 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 ); 4001a6e4: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( *block_entry_ptr ) 4001a6e8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a6ec: 12 bf ff f8 bne 4001a6cc <== NOT EXECUTED 4001a6f0: 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(); 4001a6f4: 7f ff fe 54 call 4001a044 <== NOT EXECUTED 4001a6f8: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED if ( !memory ) 4001a6fc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a700: 02 80 00 04 be 4001a710 <== NOT EXECUTED 4001a704: 01 00 00 00 nop <== NOT EXECUTED return 1; *block_entry_ptr = memory; 4001a708: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED 4001a70c: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 4001a710: 81 c7 e0 08 ret <== NOT EXECUTED 4001a714: 81 e8 00 00 restore <== NOT EXECUTED 4001a718 : MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { 4001a718: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001a71c: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001a720: 32 80 00 09 bne,a 4001a744 <== NOT EXECUTED 4001a724: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a728: 92 10 21 31 mov 0x131, %o1 <== NOT EXECUTED 4001a72c: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a730: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a734: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a738: 7f ff ac 88 call 40005958 <__assert> <== NOT EXECUTED 4001a73c: 94 12 a2 a8 or %o2, 0x2a8, %o2 <== NOT EXECUTED 4001a740: 30 80 00 0d b,a 4001a774 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001a744: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a748: 02 80 00 07 be 4001a764 <== NOT EXECUTED 4001a74c: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a750: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a754: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a758: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001a75c: 7f ff ac 7f call 40005958 <__assert> <== NOT EXECUTED 4001a760: 92 10 21 35 mov 0x135, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001a764: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a768: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a76c: 22 80 00 06 be,a 4001a784 <== NOT EXECUTED 4001a770: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 4001a774: 40 00 21 a0 call 40022df4 <__errno> <== NOT EXECUTED 4001a778: 01 00 00 00 nop <== NOT EXECUTED 4001a77c: 10 80 00 31 b 4001a840 <== NOT EXECUTED 4001a780: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) 4001a784: e2 00 63 1c ld [ %g1 + 0x31c ], %l1 <== NOT EXECUTED 4001a788: a1 34 60 02 srl %l1, 2, %l0 <== NOT EXECUTED 4001a78c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001a790: 7f ff a2 1a call 40002ff8 <.umul> <== NOT EXECUTED 4001a794: 90 04 20 01 add %l0, 1, %o0 <== NOT EXECUTED 4001a798: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001a79c: 7f ff a2 17 call 40002ff8 <.umul> <== NOT EXECUTED 4001a7a0: 90 02 20 01 inc %o0 <== NOT EXECUTED 4001a7a4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a7a8: 7f ff a2 14 call 40002ff8 <.umul> <== NOT EXECUTED 4001a7ac: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 4001a7b0: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 4001a7b4: 2a 80 00 06 bcs,a 4001a7cc <== NOT EXECUTED 4001a7b8: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 4001a7bc: 40 00 21 8e call 40022df4 <__errno> <== NOT EXECUTED 4001a7c0: 01 00 00 00 nop <== NOT EXECUTED 4001a7c4: 10 80 00 1f b 4001a840 <== NOT EXECUTED 4001a7c8: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED if ( new_length <= the_jnode->info.file.size ) 4001a7cc: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 4001a7d0: 04 80 00 24 ble 4001a860 <== NOT EXECUTED 4001a7d4: 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; 4001a7d8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a7dc: 40 00 5e 06 call 40031ff4 <.div> <== NOT EXECUTED 4001a7e0: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001a7e4: 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; 4001a7e8: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001a7ec: 40 00 5e 02 call 40031ff4 <.div> <== NOT EXECUTED 4001a7f0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a7f4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4001a7f8: 10 80 00 15 b 4001a84c <== NOT EXECUTED 4001a7fc: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { if ( IMFS_memfile_addblock( the_jnode, block ) ) { 4001a800: 7f ff ff 98 call 4001a660 <== NOT EXECUTED 4001a804: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a808: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a80c: 22 80 00 10 be,a 4001a84c <== NOT EXECUTED 4001a810: a0 04 20 01 inc %l0 <== NOT EXECUTED for ( ; block>=old_blocks ; block-- ) { 4001a814: 10 80 00 06 b 4001a82c <== NOT EXECUTED 4001a818: 80 a4 00 11 cmp %l0, %l1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); 4001a81c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a820: 7f ff fe c6 call 4001a338 <== NOT EXECUTED 4001a824: 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-- ) { 4001a828: 80 a4 00 11 cmp %l0, %l1 <== NOT EXECUTED 4001a82c: 1a bf ff fc bcc 4001a81c <== NOT EXECUTED 4001a830: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); } rtems_set_errno_and_return_minus_one( ENOSPC ); 4001a834: 40 00 21 70 call 40022df4 <__errno> <== NOT EXECUTED 4001a838: 01 00 00 00 nop <== NOT EXECUTED 4001a83c: 82 10 20 1c mov 0x1c, %g1 ! 1c <== NOT EXECUTED 4001a840: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a844: 10 80 00 07 b 4001a860 <== NOT EXECUTED 4001a848: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { 4001a84c: 80 a4 00 12 cmp %l0, %l2 <== NOT EXECUTED 4001a850: 08 bf ff ec bleu 4001a800 <== NOT EXECUTED 4001a854: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; 4001a858: f2 26 20 4c st %i1, [ %i0 + 0x4c ] <== NOT EXECUTED 4001a85c: 82 10 20 00 clr %g1 <== NOT EXECUTED return 0; } 4001a860: 81 c7 e0 08 ret <== NOT EXECUTED 4001a864: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED 4001a078 : #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { 4001a078: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001a07c: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001a080: 32 80 00 0a bne,a 4001a0a8 <== NOT EXECUTED 4001a084: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a088: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a08c: 92 10 23 86 mov 0x386, %o1 <== NOT EXECUTED 4001a090: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a094: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a098: 7f ff ae 30 call 40005958 <__assert> <== NOT EXECUTED 4001a09c: 94 12 a2 a8 or %o2, 0x2a8, %o2 ! 400356a8 <_CPU_Trap_slot_template+0xf88> <== NOT EXECUTED 4001a0a0: 81 c7 e0 08 ret <== NOT EXECUTED 4001a0a4: 81 e8 00 00 restore <== NOT EXECUTED if ( !the_jnode ) return NULL; assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001a0a8: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a0ac: 02 80 00 07 be 4001a0c8 <== NOT EXECUTED 4001a0b0: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a0b4: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a0b8: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a0bc: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001a0c0: 7f ff ae 26 call 40005958 <__assert> <== NOT EXECUTED 4001a0c4: 92 10 23 8a mov 0x38a, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001a0c8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a0cc: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a0d0: 32 bf ff f4 bne,a 4001a0a0 <== NOT EXECUTED 4001a0d4: b0 10 20 00 clr %i0 <== NOT EXECUTED /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { 4001a0d8: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED 4001a0dc: c2 00 63 1c ld [ %g1 + 0x31c ], %g1 ! 40039b1c <== NOT EXECUTED 4001a0e0: a3 30 60 02 srl %g1, 2, %l1 <== NOT EXECUTED 4001a0e4: 82 04 7f ff add %l1, -1, %g1 <== NOT EXECUTED 4001a0e8: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001a0ec: 18 80 00 15 bgu 4001a140 <== NOT EXECUTED 4001a0f0: 90 04 60 01 add %l1, 1, %o0 <== NOT EXECUTED fprintf(stdout, "(s %d) ", block ); fflush(stdout); #endif p = info->indirect; if ( malloc_it ) { 4001a0f4: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001a0f8: 02 80 00 0e be 4001a130 <== NOT EXECUTED 4001a0fc: e0 06 20 50 ld [ %i0 + 0x50 ], %l0 <== NOT EXECUTED if ( !p ) { 4001a100: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001a104: 32 80 00 09 bne,a 4001a128 <== NOT EXECUTED 4001a108: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 <== NOT EXECUTED p = memfile_alloc_block(); 4001a10c: 7f ff ff ce call 4001a044 <== NOT EXECUTED 4001a110: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001a114: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a118: 22 bf ff e2 be,a 4001a0a0 <== NOT EXECUTED 4001a11c: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; info->indirect = p; 4001a120: d0 26 20 50 st %o0, [ %i0 + 0x50 ] <== NOT EXECUTED } return &info->indirect[ my_block ]; 4001a124: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 <== NOT EXECUTED 4001a128: 10 80 00 7f b 4001a324 <== NOT EXECUTED 4001a12c: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED } if ( !p ) return 0; return &info->indirect[ my_block ]; 4001a130: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED info->indirect = p; } return &info->indirect[ my_block ]; } if ( !p ) 4001a134: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED return 0; return &info->indirect[ my_block ]; 4001a138: 10 80 00 32 b 4001a200 <== NOT EXECUTED 4001a13c: b0 04 00 01 add %l0, %g1, %i0 <== NOT EXECUTED /* * Is the block number in the doubly indirect portion? */ if ( my_block <= LAST_DOUBLY_INDIRECT ) { 4001a140: 7f ff a3 ae call 40002ff8 <.umul> <== NOT EXECUTED 4001a144: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a148: 82 02 3f ff add %o0, -1, %g1 <== NOT EXECUTED 4001a14c: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001a150: 18 80 00 30 bgu 4001a210 <== NOT EXECUTED 4001a154: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED #if 0 fprintf(stdout, "(d %d) ", block ); fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; 4001a158: a0 26 40 11 sub %i1, %l1, %l0 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001a15c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a160: 40 00 60 4f call 4003229c <.urem> <== NOT EXECUTED 4001a164: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001a168: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001a16c: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001a170: 40 00 5f 9f call 40031fec <.udiv> <== NOT EXECUTED 4001a174: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 4001a178: 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; 4001a17c: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 4001a180: 02 80 00 18 be 4001a1e0 <== NOT EXECUTED 4001a184: e0 06 20 54 ld [ %i0 + 0x54 ], %l0 <== NOT EXECUTED if ( !p ) { 4001a188: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001a18c: 32 80 00 09 bne,a 4001a1b0 <== NOT EXECUTED 4001a190: a3 2c 60 02 sll %l1, 2, %l1 <== NOT EXECUTED p = memfile_alloc_block(); 4001a194: 7f ff ff ac call 4001a044 <== NOT EXECUTED 4001a198: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001a19c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a1a0: 02 80 00 63 be 4001a32c <== NOT EXECUTED 4001a1a4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->doubly_indirect = p; 4001a1a8: d0 26 20 54 st %o0, [ %i0 + 0x54 ] <== NOT EXECUTED } p1 = (block_p *)p[ doubly ]; 4001a1ac: a3 2c 60 02 sll %l1, 2, %l1 <== NOT EXECUTED 4001a1b0: c2 04 00 11 ld [ %l0 + %l1 ], %g1 <== NOT EXECUTED if ( !p1 ) { 4001a1b4: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001a1b8: 12 80 00 4f bne 4001a2f4 <== NOT EXECUTED 4001a1bc: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED p1 = memfile_alloc_block(); 4001a1c0: 7f ff ff a1 call 4001a044 <== NOT EXECUTED 4001a1c4: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 4001a1c8: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001a1cc: 02 80 00 58 be 4001a32c <== NOT EXECUTED 4001a1d0: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p[ doubly ] = (block_p) p1; 4001a1d4: c2 24 00 11 st %g1, [ %l0 + %l1 ] <== NOT EXECUTED } return (block_p *)&p1[ singly ]; 4001a1d8: 10 80 00 47 b 4001a2f4 <== NOT EXECUTED 4001a1dc: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED } if ( !p ) 4001a1e0: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001a1e4: 02 bf ff af be 4001a0a0 <== NOT EXECUTED 4001a1e8: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; p = (block_p *)p[ doubly ]; 4001a1ec: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 4001a1f0: c2 04 00 01 ld [ %l0 + %g1 ], %g1 <== 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 ]; 4001a1f4: 85 2c a0 02 sll %l2, 2, %g2 <== NOT EXECUTED if ( !p ) return 0; p = (block_p *)p[ doubly ]; if ( !p ) 4001a1f8: 80 a0 60 00 cmp %g1, 0 <== 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 ]; 4001a1fc: b0 00 40 02 add %g1, %g2, %i0 <== NOT EXECUTED if ( !p ) return 0; p = (block_p *)p[ doubly ]; if ( !p ) 4001a200: 12 80 00 4c bne 4001a330 <== NOT EXECUTED 4001a204: 01 00 00 00 nop <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p ) return 0; return (block_p *)&p2[ singly ]; 4001a208: 81 c7 e0 08 ret <== NOT EXECUTED 4001a20c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED #endif /* * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { 4001a210: 90 02 20 01 inc %o0 <== NOT EXECUTED 4001a214: 7f ff a3 79 call 40002ff8 <.umul> <== NOT EXECUTED 4001a218: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a21c: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 4001a220: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 4001a224: 18 80 00 42 bgu 4001a32c <== NOT EXECUTED 4001a228: a0 26 40 10 sub %i1, %l0, %l0 <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001a22c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a230: 40 00 60 1b call 4003229c <.urem> <== NOT EXECUTED 4001a234: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001a238: 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; 4001a23c: a6 10 00 08 mov %o0, %l3 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001a240: 40 00 5f 6b call 40031fec <.udiv> <== NOT EXECUTED 4001a244: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; 4001a248: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001a24c: 40 00 5f 68 call 40031fec <.udiv> <== NOT EXECUTED 4001a250: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 4001a254: 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; 4001a258: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 4001a25c: 40 00 60 10 call 4003229c <.urem> <== NOT EXECUTED 4001a260: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 4001a264: 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; 4001a268: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 4001a26c: 02 80 00 24 be 4001a2fc <== NOT EXECUTED 4001a270: e0 06 20 58 ld [ %i0 + 0x58 ], %l0 <== NOT EXECUTED if ( !p ) { 4001a274: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001a278: 12 80 00 09 bne 4001a29c <== NOT EXECUTED 4001a27c: b5 2e 60 02 sll %i1, 2, %i2 <== NOT EXECUTED p = memfile_alloc_block(); 4001a280: 7f ff ff 71 call 4001a044 <== NOT EXECUTED 4001a284: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001a288: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a28c: 02 80 00 28 be 4001a32c <== NOT EXECUTED 4001a290: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->triply_indirect = p; 4001a294: d0 26 20 58 st %o0, [ %i0 + 0x58 ] <== NOT EXECUTED } p1 = (block_p *) p[ triply ]; 4001a298: b5 2e 60 02 sll %i1, 2, %i2 <== NOT EXECUTED 4001a29c: c2 04 00 1a ld [ %l0 + %i2 ], %g1 <== NOT EXECUTED if ( !p1 ) { 4001a2a0: a2 90 60 00 orcc %g1, 0, %l1 <== NOT EXECUTED 4001a2a4: 32 80 00 09 bne,a 4001a2c8 <== NOT EXECUTED 4001a2a8: a1 2c a0 02 sll %l2, 2, %l0 <== NOT EXECUTED p1 = memfile_alloc_block(); 4001a2ac: 7f ff ff 66 call 4001a044 <== NOT EXECUTED 4001a2b0: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 4001a2b4: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001a2b8: 02 80 00 1d be 4001a32c <== NOT EXECUTED 4001a2bc: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED return 0; p[ triply ] = (block_p) p1; 4001a2c0: c2 24 00 1a st %g1, [ %l0 + %i2 ] <== NOT EXECUTED } p2 = (block_p *)p1[ doubly ]; 4001a2c4: a1 2c a0 02 sll %l2, 2, %l0 <== NOT EXECUTED 4001a2c8: c2 04 40 10 ld [ %l1 + %l0 ], %g1 <== NOT EXECUTED if ( !p2 ) { 4001a2cc: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001a2d0: 12 80 00 09 bne 4001a2f4 <== NOT EXECUTED 4001a2d4: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED p2 = memfile_alloc_block(); 4001a2d8: 7f ff ff 5b call 4001a044 <== NOT EXECUTED 4001a2dc: 01 00 00 00 nop <== NOT EXECUTED if ( !p2 ) 4001a2e0: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001a2e4: 02 80 00 12 be 4001a32c <== NOT EXECUTED 4001a2e8: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p1[ doubly ] = (block_p) p2; 4001a2ec: c2 24 40 10 st %g1, [ %l1 + %l0 ] <== NOT EXECUTED } return (block_p *)&p2[ singly ]; 4001a2f0: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED 4001a2f4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a2f8: 91 ea 00 01 restore %o0, %g1, %o0 <== NOT EXECUTED } if ( !p ) 4001a2fc: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001a300: 02 bf ff 68 be 4001a0a0 <== NOT EXECUTED 4001a304: b0 10 20 00 clr %i0 <== 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 ]; 4001a308: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED 4001a30c: d0 04 00 01 ld [ %l0 + %g1 ], %o0 <== NOT EXECUTED if ( !p1 ) 4001a310: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a314: 02 bf ff 63 be 4001a0a0 <== NOT EXECUTED 4001a318: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p ) return 0; return (block_p *)&p2[ singly ]; 4001a31c: c4 02 00 01 ld [ %o0 + %g1 ], %g2 <== NOT EXECUTED 4001a320: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED 4001a324: 81 c7 e0 08 ret <== NOT EXECUTED 4001a328: 91 e8 40 02 restore %g1, %g2, %o0 <== NOT EXECUTED 4001a32c: b0 10 20 00 clr %i0 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001a330: 81 c7 e0 08 ret <== NOT EXECUTED 4001a334: 81 e8 00 00 restore <== NOT EXECUTED 4001ac58 : IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { 4001ac58: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001ac5c: a8 96 20 00 orcc %i0, 0, %l4 <== NOT EXECUTED 4001ac60: 32 80 00 09 bne,a 4001ac84 <== NOT EXECUTED 4001ac64: c2 05 20 48 ld [ %l4 + 0x48 ], %g1 <== NOT EXECUTED 4001ac68: 92 10 22 4a mov 0x24a, %o1 <== NOT EXECUTED 4001ac6c: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001ac70: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001ac74: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001ac78: 7f ff ab 38 call 40005958 <__assert> <== NOT EXECUTED 4001ac7c: 94 12 a2 a8 or %o2, 0x2a8, %o2 <== NOT EXECUTED 4001ac80: 30 80 00 0f b,a 4001acbc <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE || 4001ac84: 82 00 7f fb add %g1, -5, %g1 <== NOT EXECUTED 4001ac88: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001ac8c: 08 80 00 07 bleu 4001aca8 <== NOT EXECUTED 4001ac90: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001ac94: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001ac98: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001ac9c: 94 12 a3 08 or %o2, 0x308, %o2 <== NOT EXECUTED 4001aca0: 7f ff ab 2e call 40005958 <__assert> <== NOT EXECUTED 4001aca4: 92 10 22 4f mov 0x24f, %o1 <== NOT EXECUTED the_jnode->type == IMFS_LINEAR_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE && 4001aca8: c4 05 20 48 ld [ %l4 + 0x48 ], %g2 <== NOT EXECUTED 4001acac: 82 00 bf fb add %g2, -5, %g1 <== NOT EXECUTED 4001acb0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001acb4: 08 80 00 06 bleu 4001accc <== NOT EXECUTED 4001acb8: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED the_jnode->type != IMFS_LINEAR_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001acbc: 40 00 20 4e call 40022df4 <__errno> <== NOT EXECUTED 4001acc0: 01 00 00 00 nop <== NOT EXECUTED 4001acc4: 10 80 00 0d b 4001acf8 <== NOT EXECUTED 4001acc8: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED /* * Error checks on arguments */ assert( dest ); 4001accc: 12 80 00 0e bne 4001ad04 <== NOT EXECUTED 4001acd0: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 4001acd4: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001acd8: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001acdc: 92 10 22 58 mov 0x258, %o1 <== NOT EXECUTED 4001ace0: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001ace4: 7f ff ab 1d call 40005958 <__assert> <== NOT EXECUTED 4001ace8: 94 12 a3 58 or %o2, 0x358, %o2 <== NOT EXECUTED if ( !dest ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001acec: 40 00 20 42 call 40022df4 <__errno> <== NOT EXECUTED 4001acf0: 01 00 00 00 nop <== NOT EXECUTED 4001acf4: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001acf8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001acfc: 10 80 00 74 b 4001aecc <== NOT EXECUTED 4001ad00: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED /* * If there is nothing to read, then quick exit. */ my_length = length; if ( !my_length ) 4001ad04: 02 bf ff fa be 4001acec <== NOT EXECUTED 4001ad08: 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) { 4001ad0c: 32 80 00 0d bne,a 4001ad40 <== NOT EXECUTED 4001ad10: c4 05 20 4c ld [ %l4 + 0x4c ], %g2 <== NOT EXECUTED unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) 4001ad14: c2 05 20 4c ld [ %l4 + 0x4c ], %g1 <== NOT EXECUTED 4001ad18: b0 10 00 1b mov %i3, %i0 <== NOT EXECUTED 4001ad1c: 82 20 40 19 sub %g1, %i1, %g1 <== NOT EXECUTED 4001ad20: 80 a6 c0 01 cmp %i3, %g1 <== NOT EXECUTED 4001ad24: 08 80 00 03 bleu 4001ad30 <== NOT EXECUTED 4001ad28: d2 05 20 50 ld [ %l4 + 0x50 ], %o1 <== NOT EXECUTED my_length = the_jnode->info.linearfile.size - start; 4001ad2c: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED memcpy(dest, &file_ptr[start], my_length); 4001ad30: 92 02 40 19 add %o1, %i1, %o1 <== NOT EXECUTED 4001ad34: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4001ad38: 10 80 00 5d b 4001aeac <== NOT EXECUTED 4001ad3c: 94 10 00 18 mov %i0, %o2 <== 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 ) 4001ad40: 82 06 c0 19 add %i3, %i1, %g1 <== NOT EXECUTED 4001ad44: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4001ad48: 08 80 00 03 bleu 4001ad54 <== NOT EXECUTED 4001ad4c: a0 10 00 1b mov %i3, %l0 <== NOT EXECUTED my_length = the_jnode->info.file.size - start; 4001ad50: a0 20 80 19 sub %g2, %i1, %l0 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001ad54: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED 4001ad58: e2 00 63 1c ld [ %g1 + 0x31c ], %l1 ! 40039b1c <== NOT EXECUTED 4001ad5c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001ad60: 40 00 5d 51 call 400322a4 <.rem> <== NOT EXECUTED 4001ad64: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001ad68: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001ad6c: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001ad70: 40 00 5c a1 call 40031ff4 <.div> <== NOT EXECUTED 4001ad74: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 4001ad78: 80 a4 a0 00 cmp %l2, 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; 4001ad7c: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( start_offset ) { 4001ad80: a6 10 00 1a mov %i2, %l3 <== NOT EXECUTED 4001ad84: 02 80 00 1d be 4001adf8 <== NOT EXECUTED 4001ad88: b0 10 20 00 clr %i0 <== NOT EXECUTED to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001ad8c: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED 4001ad90: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001ad94: 7f ff fc b9 call 4001a078 <== NOT EXECUTED 4001ad98: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001ad9c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ada0: 12 80 00 0a bne 4001adc8 <== NOT EXECUTED 4001ada4: 92 24 40 12 sub %l1, %l2, %o1 <== NOT EXECUTED 4001ada8: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001adac: 92 10 22 94 mov 0x294, %o1 <== NOT EXECUTED 4001adb0: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001adb4: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001adb8: 7f ff aa e8 call 40005958 <__assert> <== NOT EXECUTED 4001adbc: 94 12 a2 f8 or %o2, 0x2f8, %o2 ! 400356f8 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED 4001adc0: 10 80 00 43 b 4001aecc <== NOT EXECUTED 4001adc4: 94 10 20 00 clr %o2 <== 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; 4001adc8: 80 a4 00 09 cmp %l0, %o1 <== NOT EXECUTED 4001adcc: 08 80 00 03 bleu 4001add8 <== NOT EXECUTED 4001add0: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 4001add4: 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 ); 4001add8: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED dest += to_copy; 4001addc: a6 06 80 0a add %i2, %o2, %l3 <== 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 ); 4001ade0: 92 04 80 09 add %l2, %o1, %o1 <== NOT EXECUTED dest += to_copy; block++; 4001ade4: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001ade8: a0 24 00 0a sub %l0, %o2, %l0 <== NOT EXECUTED 4001adec: 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 ); 4001adf0: 40 00 26 a6 call 40024888 <== NOT EXECUTED 4001adf4: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001adf8: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED 4001adfc: f4 00 63 1c ld [ %g1 + 0x31c ], %i2 ! 40039b1c <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001ae00: 10 80 00 12 b 4001ae48 <== NOT EXECUTED 4001ae04: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001ae08: 7f ff fc 9c call 4001a078 <== NOT EXECUTED 4001ae0c: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 4001ae10: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ae14: 32 80 00 06 bne,a 4001ae2c <== NOT EXECUTED 4001ae18: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED 4001ae1c: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001ae20: 92 10 22 a5 mov 0x2a5, %o1 <== NOT EXECUTED 4001ae24: 10 80 00 1a b 4001ae8c <== NOT EXECUTED 4001ae28: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); dest += to_copy; block++; 4001ae2c: b2 06 60 01 inc %i1 <== 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 ); 4001ae30: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED dest += to_copy; block++; my_length -= to_copy; 4001ae34: a0 24 00 1a sub %l0, %i2, %l0 <== NOT EXECUTED copied += to_copy; 4001ae38: b0 06 00 1a add %i0, %i2, %i0 <== 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 ); 4001ae3c: a6 04 c0 1a add %l3, %i2, %l3 <== NOT EXECUTED 4001ae40: 40 00 26 92 call 40024888 <== NOT EXECUTED 4001ae44: 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 ) { 4001ae48: c2 04 63 1c ld [ %l1 + 0x31c ], %g1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001ae4c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001ae50: 94 10 20 00 clr %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 ) { 4001ae54: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 4001ae58: 1a bf ff ec bcc 4001ae08 <== NOT EXECUTED 4001ae5c: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED * Phase 3: possibly the first part of one block */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { 4001ae60: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001ae64: 22 80 00 15 be,a 4001aeb8 <== NOT EXECUTED 4001ae68: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001ae6c: 7f ff fc 83 call 4001a078 <== NOT EXECUTED 4001ae70: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 4001ae74: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ae78: 32 80 00 0a bne,a 4001aea0 <== NOT EXECUTED 4001ae7c: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED 4001ae80: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001ae84: 92 10 22 b7 mov 0x2b7, %o1 <== NOT EXECUTED 4001ae88: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001ae8c: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001ae90: 7f ff aa b2 call 40005958 <__assert> <== NOT EXECUTED 4001ae94: 94 12 a2 f8 or %o2, 0x2f8, %o2 ! 400356f8 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED if ( !block_ptr ) return copied; 4001ae98: 10 80 00 0d b 4001aecc <== NOT EXECUTED 4001ae9c: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; 4001aea0: b0 06 00 10 add %i0, %l0, %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 ); 4001aea4: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 4001aea8: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 4001aeac: 40 00 26 77 call 40024888 <== NOT EXECUTED 4001aeb0: 01 00 00 00 nop <== NOT EXECUTED copied += my_length; } IMFS_update_atime( the_jnode ); 4001aeb4: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001aeb8: 7f ff ab 63 call 40005c44 <== NOT EXECUTED 4001aebc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001aec0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return copied; 4001aec4: 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 ); 4001aec8: c2 25 20 3c st %g1, [ %l4 + 0x3c ] <== NOT EXECUTED return copied; } 4001aecc: 81 c7 e0 08 ret <== NOT EXECUTED 4001aed0: 91 e8 00 0a restore %g0, %o2, %o0 <== NOT EXECUTED 4001a3d8 : */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { 4001a3d8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001a3dc: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001a3e0: 32 80 00 09 bne,a 4001a404 <== NOT EXECUTED 4001a3e4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a3e8: 92 10 21 ec mov 0x1ec, %o1 <== NOT EXECUTED 4001a3ec: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a3f0: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a3f4: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a3f8: 7f ff ad 58 call 40005958 <__assert> <== NOT EXECUTED 4001a3fc: 94 12 a2 a8 or %o2, 0x2a8, %o2 <== NOT EXECUTED 4001a400: 30 80 00 0d b,a 4001a434 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001a404: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a408: 02 80 00 07 be 4001a424 <== NOT EXECUTED 4001a40c: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a410: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a414: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a418: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001a41c: 7f ff ad 4f call 40005958 <__assert> <== NOT EXECUTED 4001a420: 92 10 21 f0 mov 0x1f0, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001a424: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a428: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a42c: 22 80 00 08 be,a 4001a44c <== NOT EXECUTED 4001a430: 21 10 00 e6 sethi %hi(0x40039800), %l0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 4001a434: 40 00 22 70 call 40022df4 <__errno> <== NOT EXECUTED 4001a438: 01 00 00 00 nop <== NOT EXECUTED 4001a43c: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001a440: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 4001a444: 10 80 00 4b b 4001a570 <== NOT EXECUTED 4001a448: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 4001a44c: 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; 4001a450: c4 04 23 1c ld [ %l0 + 0x31c ], %g2 <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 4001a454: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a458: 02 80 00 05 be 4001a46c <== NOT EXECUTED 4001a45c: a5 30 a0 02 srl %g2, 2, %l2 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); 4001a460: 90 06 20 50 add %i0, 0x50, %o0 <== NOT EXECUTED 4001a464: 7f ff ff c1 call 4001a368 <== NOT EXECUTED 4001a468: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED } if ( info->doubly_indirect ) { 4001a46c: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED for ( i=0 ; iindirect ) { memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { 4001a474: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a478: 12 80 00 0c bne 4001a4a8 <== NOT EXECUTED 4001a47c: a0 10 20 00 clr %l0 <== NOT EXECUTED } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { 4001a480: 10 80 00 13 b 4001a4cc <== NOT EXECUTED 4001a484: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED } if ( info->doubly_indirect ) { for ( i=0 ; idoubly_indirect[i] ) { 4001a488: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; idoubly_indirect[i] ) { 4001a490: c4 02 00 01 ld [ %o0 + %g1 ], %g2 <== NOT EXECUTED 4001a494: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a498: 02 80 00 04 be 4001a4a8 <== NOT EXECUTED 4001a49c: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED memfile_free_blocks_in_table( 4001a4a0: 7f ff ff b2 call 4001a368 <== NOT EXECUTED 4001a4a4: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001a4b8: 91 2c 20 02 sll %l0, 2, %o0 <== 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 ); 4001a4bc: 90 06 20 54 add %i0, 0x54, %o0 <== NOT EXECUTED 4001a4c0: 7f ff ff aa call 4001a368 <== NOT EXECUTED 4001a4c4: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED } if ( info->triply_indirect ) { 4001a4c8: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED 4001a4cc: 84 10 20 00 clr %g2 <== NOT EXECUTED 4001a4d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a4d4: a6 10 20 00 clr %l3 <== NOT EXECUTED 4001a4d8: 12 80 00 1d bne 4001a54c <== NOT EXECUTED 4001a4dc: 2b 10 00 e6 sethi %hi(0x40039800), %l5 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&info->triply_indirect, to_free ); } return 0; } 4001a4e0: 81 c7 e0 08 ret <== NOT EXECUTED 4001a4e4: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { 4001a4e8: a9 2c e0 02 sll %l3, 2, %l4 <== NOT EXECUTED for ( i=0 ; itriply_indirect[i]; 4001a4ec: d0 00 40 14 ld [ %g1 + %l4 ], %o0 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ 4001a4f0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a4f4: 22 80 00 1c be,a 4001a564 <== NOT EXECUTED 4001a4f8: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED break; 4001a4fc: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4001a500: 10 80 00 09 b 4001a524 <== NOT EXECUTED 4001a504: a2 10 20 00 clr %l1 <== NOT EXECUTED for ( j=0 ; j <== NOT EXECUTED 4001a514: a2 04 60 01 inc %l1 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&p[j], to_free); 4001a518: 7f ff ff 94 call 4001a368 <== NOT EXECUTED 4001a51c: 92 10 00 12 mov %l2, %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 4001a534: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ( p[j] ) { memfile_free_blocks_in_table( (block_p **)&p[j], to_free); } } memfile_free_blocks_in_table( 4001a538: d0 06 20 58 ld [ %i0 + 0x58 ], %o0 <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001a548: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001a55c: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED } } memfile_free_blocks_in_table( (block_p **)&info->triply_indirect[i], to_free ); } memfile_free_blocks_in_table( 4001a560: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED 4001a564: 7f ff ff 81 call 4001a368 <== NOT EXECUTED 4001a568: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 4001a56c: 84 10 20 00 clr %g2 <== NOT EXECUTED (block_p **)&info->triply_indirect, to_free ); } return 0; } 4001a570: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED 4001a574: 81 c7 e0 08 ret <== NOT EXECUTED 4001a578: 81 e8 00 00 restore <== NOT EXECUTED 4001a338 : MEMFILE_STATIC int IMFS_memfile_remove_block( IMFS_jnode_t *the_jnode, unsigned int block ) { 4001a338: 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 ); 4001a33c: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001a340: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001a344: 7f ff ff 4d call 4001a078 <== NOT EXECUTED 4001a348: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ptr = *block_entry_ptr; 4001a34c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED *block_entry_ptr = 0; memfile_free_block( ptr ); return 1; } 4001a350: 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; 4001a354: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED memfile_free_block( ptr ); 4001a358: 7f ff ff 32 call 4001a020 <== NOT EXECUTED 4001a35c: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 1; } 4001a360: 81 c7 e0 08 ret <== NOT EXECUTED 4001a364: 81 e8 00 00 restore <== NOT EXECUTED 4001a92c : IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { 4001a92c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001a930: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001a934: 32 80 00 09 bne,a 4001a958 <== NOT EXECUTED 4001a938: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a93c: 92 10 22 e1 mov 0x2e1, %o1 <== NOT EXECUTED 4001a940: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a944: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a948: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a94c: 7f ff ac 03 call 40005958 <__assert> <== NOT EXECUTED 4001a950: 94 12 a2 a8 or %o2, 0x2a8, %o2 <== NOT EXECUTED 4001a954: 30 80 00 0d b,a 4001a988 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001a958: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a95c: 02 80 00 07 be 4001a978 <== NOT EXECUTED 4001a960: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a964: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a968: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a96c: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001a970: 7f ff ab fa call 40005958 <__assert> <== NOT EXECUTED 4001a974: 92 10 22 e5 mov 0x2e5, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001a978: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a97c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001a980: 02 80 00 06 be 4001a998 <== NOT EXECUTED 4001a984: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 4001a988: 40 00 21 1b call 40022df4 <__errno> <== NOT EXECUTED 4001a98c: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 4001a990: 10 80 00 0d b 4001a9c4 <== NOT EXECUTED 4001a994: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED /* * Error check arguments */ assert( source ); 4001a998: 12 80 00 0d bne 4001a9cc <== NOT EXECUTED 4001a99c: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 4001a9a0: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001a9a4: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001a9a8: 92 10 22 ed mov 0x2ed, %o1 <== NOT EXECUTED 4001a9ac: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001a9b0: 7f ff ab ea call 40005958 <__assert> <== NOT EXECUTED 4001a9b4: 94 12 a2 f0 or %o2, 0x2f0, %o2 <== NOT EXECUTED if ( !source ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001a9b8: 40 00 21 0f call 40022df4 <__errno> <== NOT EXECUTED 4001a9bc: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 4001a9c0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001a9c4: 10 80 00 71 b 4001ab88 <== NOT EXECUTED 4001a9c8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * If there is nothing to write, then quick exit. */ my_length = length; if ( !my_length ) 4001a9cc: 02 bf ff fb be 4001a9b8 <== NOT EXECUTED 4001a9d0: 01 00 00 00 nop <== 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 ) { 4001a9d4: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== 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; 4001a9d8: 92 06 c0 19 add %i3, %i1, %o1 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) { 4001a9dc: 80 a2 40 01 cmp %o1, %g1 <== NOT EXECUTED 4001a9e0: 08 80 00 0b bleu 4001aa0c <== NOT EXECUTED 4001a9e4: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED status = IMFS_memfile_extend( the_jnode, last_byte ); 4001a9e8: 7f ff ff 4c call 4001a718 <== NOT EXECUTED 4001a9ec: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status ) 4001a9f0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a9f4: 22 80 00 06 be,a 4001aa0c <== NOT EXECUTED 4001a9f8: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); 4001a9fc: 40 00 20 fe call 40022df4 <__errno> <== NOT EXECUTED 4001aa00: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 4001aa04: 10 bf ff f0 b 4001a9c4 <== NOT EXECUTED 4001aa08: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001aa0c: e0 00 63 1c ld [ %g1 + 0x31c ], %l0 <== NOT EXECUTED 4001aa10: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001aa14: 40 00 5e 24 call 400322a4 <.rem> <== NOT EXECUTED 4001aa18: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001aa1c: 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; 4001aa20: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001aa24: 40 00 5d 74 call 40031ff4 <.div> <== NOT EXECUTED 4001aa28: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 4001aa2c: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4001aa30: 12 80 00 05 bne 4001aa44 <== NOT EXECUTED 4001aa34: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED 4001aa38: a0 10 00 1a mov %i2, %l0 <== NOT EXECUTED 4001aa3c: 10 80 00 1d b 4001aab0 <== NOT EXECUTED 4001aa40: a4 10 20 00 clr %l2 <== NOT EXECUTED to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001aa44: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001aa48: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001aa4c: 7f ff fd 8b call 4001a078 <== NOT EXECUTED 4001aa50: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001aa54: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001aa58: 32 80 00 0b bne,a 4001aa84 <== NOT EXECUTED 4001aa5c: 94 24 00 11 sub %l0, %l1, %o2 <== NOT EXECUTED 4001aa60: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001aa64: 92 10 23 1a mov 0x31a, %o1 <== NOT EXECUTED 4001aa68: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001aa6c: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001aa70: a4 10 20 00 clr %l2 <== NOT EXECUTED 4001aa74: 7f ff ab b9 call 40005958 <__assert> <== NOT EXECUTED 4001aa78: 94 12 a2 f8 or %o2, 0x2f8, %o2 <== NOT EXECUTED } IMFS_atime_mtime_update( the_jnode ); return copied; } 4001aa7c: 81 c7 e0 08 ret <== NOT EXECUTED 4001aa80: 91 e8 00 12 restore %g0, %l2, %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; 4001aa84: 80 a2 80 1b cmp %o2, %i3 <== NOT EXECUTED 4001aa88: 38 80 00 02 bgu,a 4001aa90 <== NOT EXECUTED 4001aa8c: 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 ); 4001aa90: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED src += to_copy; 4001aa94: 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 ); 4001aa98: 90 04 40 08 add %l1, %o0, %o0 <== NOT EXECUTED src += to_copy; block++; 4001aa9c: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001aaa0: b6 26 c0 0a sub %i3, %o2, %i3 <== NOT EXECUTED copied += to_copy; 4001aaa4: a4 10 00 0a mov %o2, %l2 <== 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 ); 4001aaa8: 40 00 27 78 call 40024888 <== NOT EXECUTED 4001aaac: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001aab0: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED 4001aab4: f4 00 63 1c ld [ %g1 + 0x31c ], %i2 ! 40039b1c <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001aab8: 10 80 00 14 b 4001ab08 <== NOT EXECUTED 4001aabc: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001aac0: 7f ff fd 6e call 4001a078 <== NOT EXECUTED 4001aac4: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 4001aac8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001aacc: 32 80 00 08 bne,a 4001aaec <== NOT EXECUTED 4001aad0: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 4001aad4: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001aad8: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001aadc: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001aae0: 94 12 a2 f8 or %o2, 0x2f8, %o2 <== NOT EXECUTED 4001aae4: 10 80 00 1c b 4001ab54 <== NOT EXECUTED 4001aae8: 92 10 23 2e mov 0x32e, %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, to_copy ); 4001aaec: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED src += to_copy; block++; 4001aaf0: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001aaf4: b6 26 c0 1a sub %i3, %i2, %i3 <== NOT EXECUTED 4001aaf8: a4 04 80 1a add %l2, %i2, %l2 <== 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 ); 4001aafc: a0 04 00 1a add %l0, %i2, %l0 <== NOT EXECUTED 4001ab00: 40 00 27 62 call 40024888 <== NOT EXECUTED 4001ab04: 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 ) { 4001ab08: c2 04 63 1c ld [ %l1 + 0x31c ], %g1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001ab0c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001ab10: 94 10 20 00 clr %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 ) { 4001ab14: 80 a6 c0 01 cmp %i3, %g1 <== NOT EXECUTED 4001ab18: 1a bf ff ea bcc 4001aac0 <== NOT EXECUTED 4001ab1c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { 4001ab20: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 4001ab24: 22 80 00 14 be,a 4001ab74 <== NOT EXECUTED 4001ab28: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001ab2c: 7f ff fd 53 call 4001a078 <== NOT EXECUTED 4001ab30: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 4001ab34: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ab38: 32 80 00 0a bne,a 4001ab60 <== NOT EXECUTED 4001ab3c: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 4001ab40: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 4001ab44: 15 10 00 d5 sethi %hi(0x40035400), %o2 <== NOT EXECUTED 4001ab48: 90 12 22 58 or %o0, 0x258, %o0 <== NOT EXECUTED 4001ab4c: 94 12 a2 f8 or %o2, 0x2f8, %o2 <== NOT EXECUTED 4001ab50: 92 10 23 44 mov 0x344, %o1 <== NOT EXECUTED 4001ab54: 7f ff ab 81 call 40005958 <__assert> <== NOT EXECUTED 4001ab58: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED 4001ab5c: 30 80 00 0c b,a 4001ab8c <== NOT EXECUTED #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, my_length ); my_length = 0; copied += to_copy; 4001ab60: a4 04 80 1b add %l2, %i3, %l2 <== 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 ); 4001ab64: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001ab68: 40 00 27 48 call 40024888 <== NOT EXECUTED 4001ab6c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED my_length = 0; copied += to_copy; } IMFS_atime_mtime_update( the_jnode ); 4001ab70: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001ab74: 7f ff ac 34 call 40005c44 <== NOT EXECUTED 4001ab78: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001ab7c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001ab80: c2 26 20 3c st %g1, [ %i0 + 0x3c ] <== NOT EXECUTED 4001ab84: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED return copied; } 4001ab88: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED 4001ab8c: 81 c7 e0 08 ret <== NOT EXECUTED 4001ab90: 81 e8 00 00 restore <== NOT EXECUTED 4000c028 : const char *token, /* IN */ mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000c028: 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 ); 4000c02c: 90 10 00 18 mov %i0, %o0 4000c030: 92 07 bf c3 add %fp, -61, %o1 4000c034: 7f ff ff 8c call 4000be64 4000c038: 94 07 bf f4 add %fp, -12, %o2 /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) 4000c03c: 03 00 00 3c sethi %hi(0xf000), %g1 4000c040: b3 2e 60 10 sll %i1, 0x10, %i1 4000c044: 97 36 60 10 srl %i1, 0x10, %o3 4000c048: 84 0a c0 01 and %o3, %g1, %g2 4000c04c: 03 00 00 10 sethi %hi(0x4000), %g1 4000c050: 80 a0 80 01 cmp %g2, %g1 4000c054: 02 80 00 17 be 4000c0b0 4000c058: 90 10 00 1c mov %i4, %o0 type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) 4000c05c: 03 00 00 20 sethi %hi(0x8000), %g1 4000c060: 80 a0 80 01 cmp %g2, %g1 4000c064: 02 80 00 14 be 4000c0b4 4000c068: 92 10 20 05 mov 5, %o1 type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { 4000c06c: 03 00 00 18 sethi %hi(0x6000), %g1 4000c070: 80 a0 80 01 cmp %g2, %g1 4000c074: 02 80 00 05 be 4000c088 4000c078: 03 00 00 08 sethi %hi(0x2000), %g1 4000c07c: 80 a0 80 01 cmp %g2, %g1 4000c080: 12 80 00 06 bne 4000c098 4000c084: 01 00 00 00 nop type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); 4000c088: f6 27 bf e8 st %i3, [ %fp + -24 ] 4000c08c: f4 27 bf e4 st %i2, [ %fp + -28 ] 4000c090: 10 80 00 09 b 4000c0b4 4000c094: 92 10 20 02 mov 2, %o1 } else { rtems_set_errno_and_return_minus_one( EINVAL ); 4000c098: 40 00 08 e4 call 4000e428 <__errno> <== NOT EXECUTED 4000c09c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c0a0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4000c0a4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c0a8: 81 c7 e0 08 ret <== NOT EXECUTED 4000c0ac: 81 e8 00 00 restore <== NOT EXECUTED 4000c0b0: 92 10 20 01 mov 1, %o1 /* * Allocate and fill in an IMFS jnode */ new_node = IMFS_create_node( 4000c0b4: 94 07 bf c3 add %fp, -61, %o2 4000c0b8: 98 07 bf e4 add %fp, -28, %o4 4000c0bc: 40 00 06 c6 call 4000dbd4 4000c0c0: b0 10 20 00 clr %i0 new_name, mode, &info ); if ( !new_node ) 4000c0c4: 80 a2 20 00 cmp %o0, 0 4000c0c8: 12 80 00 06 bne 4000c0e0 4000c0cc: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOMEM ); 4000c0d0: 40 00 08 d6 call 4000e428 <__errno> <== NOT EXECUTED 4000c0d4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 4000c0d8: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000c0dc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 4000c0e0: 81 c7 e0 08 ret 4000c0e4: 81 e8 00 00 restore 400055e4 : #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 400055e4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 400055e8: 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 ) 400055ec: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 400055f0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400055f4: 22 80 00 08 be,a 40005614 <== NOT EXECUTED 400055f8: f0 20 a0 58 st %i0, [ %g2 + 0x58 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 400055fc: 40 00 75 fe call 40022df4 <__errno> <== NOT EXECUTED 40005600: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005604: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40005608: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000560c: 81 c7 e0 08 ret <== NOT EXECUTED 40005610: 81 e8 00 00 restore <== NOT EXECUTED * the mounted file system. */ node->info.directory.mt_fs = mt_entry; return 0; } 40005614: 81 c7 e0 08 ret <== NOT EXECUTED 40005618: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40005628 : int IMFS_readlink( rtems_filesystem_location_info_t *loc, char *buf, /* OUT */ size_t bufsize ) { 40005628: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; int i; node = loc->node_access; 4000562c: c6 06 00 00 ld [ %i0 ], %g3 <== NOT EXECUTED if ( node->type != IMFS_SYM_LINK ) 40005630: c2 00 e0 48 ld [ %g3 + 0x48 ], %g1 <== NOT EXECUTED 40005634: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 40005638: 02 80 00 0a be 40005660 <== NOT EXECUTED 4000563c: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 40005640: 40 00 75 ed call 40022df4 <__errno> <== NOT EXECUTED 40005644: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005648: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4000564c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005650: 81 c7 e0 08 ret <== NOT EXECUTED 40005654: 81 e8 00 00 restore <== NOT EXECUTED for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) buf[i] = node->info.sym_link.name[i]; 40005658: c2 2e 00 19 stb %g1, [ %i0 + %i1 ] <== 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++ ) 4000565c: b0 06 20 01 inc %i0 <== NOT EXECUTED 40005660: 80 a6 00 1a cmp %i0, %i2 <== NOT EXECUTED 40005664: 02 80 00 07 be 40005680 <== NOT EXECUTED 40005668: 01 00 00 00 nop <== NOT EXECUTED 4000566c: c2 00 e0 4c ld [ %g3 + 0x4c ], %g1 <== NOT EXECUTED 40005670: c4 48 40 18 ldsb [ %g1 + %i0 ], %g2 <== NOT EXECUTED 40005674: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005678: 12 bf ff f8 bne 40005658 <== NOT EXECUTED 4000567c: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; return i; } 40005680: 81 c7 e0 08 ret <== NOT EXECUTED 40005684: 81 e8 00 00 restore <== NOT EXECUTED 4000c0f4 : */ int IMFS_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4000c0f4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 4000c0f8: 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 ) { 4000c0fc: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000c100: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c104: 22 80 00 06 be,a 4000c11c <== NOT EXECUTED 4000c108: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4000c10c: 40 00 03 c1 call 4000d010 <_Chain_Extract> <== NOT EXECUTED 4000c110: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 4000c114: 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--; 4000c118: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4000c11c: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4000c120: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4000c124: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4000c128: 40 00 01 01 call 4000c52c <== NOT EXECUTED 4000c12c: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 4000c130: 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) ) { 4000c134: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000c138: 40 00 01 36 call 4000c610 <== NOT EXECUTED 4000c13c: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 4000c140: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c144: 12 80 00 18 bne 4000c1a4 <== NOT EXECUTED 4000c148: 01 00 00 00 nop <== NOT EXECUTED 4000c14c: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 4000c150: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c154: 12 80 00 14 bne 4000c1a4 <== NOT EXECUTED 4000c158: 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 ) 4000c15c: c6 00 63 70 ld [ %g1 + 0x370 ], %g3 ! 40019370 <== NOT EXECUTED 4000c160: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 4000c164: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 4000c168: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000c16c: 22 80 00 02 be,a 4000c174 <== NOT EXECUTED 4000c170: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ if ( the_jnode->type == IMFS_SYM_LINK ) { 4000c174: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000c178: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000c17c: 12 80 00 08 bne 4000c19c <== NOT EXECUTED 4000c180: 01 00 00 00 nop <== NOT EXECUTED if ( the_jnode->info.sym_link.name ) 4000c184: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 4000c188: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c18c: 02 80 00 04 be 4000c19c <== NOT EXECUTED 4000c190: 01 00 00 00 nop <== NOT EXECUTED free( the_jnode->info.sym_link.name ); 4000c194: 7f ff db a7 call 40003030 <== NOT EXECUTED 4000c198: 01 00 00 00 nop <== NOT EXECUTED } free( the_jnode ); 4000c19c: 7f ff db a5 call 40003030 <== NOT EXECUTED 4000c1a0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } return 0; } 4000c1a4: 81 c7 e0 08 ret <== NOT EXECUTED 4000c1a8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000c1ac : int IMFS_stat( rtems_filesystem_location_info_t *loc, struct stat *buf ) { 4000c1ac: 9d e3 bf 98 save %sp, -104, %sp IMFS_jnode_t *the_jnode; IMFS_device_t *io; the_jnode = loc->node_access; 4000c1b0: f0 06 00 00 ld [ %i0 ], %i0 switch ( the_jnode->type ) { 4000c1b4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 4000c1b8: 80 a0 60 04 cmp %g1, 4 4000c1bc: 22 80 00 18 be,a 4000c21c 4000c1c0: c0 26 60 20 clr [ %i1 + 0x20 ] <== NOT EXECUTED 4000c1c4: 14 80 00 07 bg 4000c1e0 4000c1c8: 80 a0 60 06 cmp %g1, 6 4000c1cc: 80 a0 60 02 cmp %g1, 2 4000c1d0: 12 80 00 0d bne 4000c204 4000c1d4: 01 00 00 00 nop rtems_device_minor_number _minor ) { union __rtems_dev_t temp; temp.__overlay.major = _major; 4000c1d8: 10 80 00 06 b 4000c1f0 4000c1dc: c4 06 20 4c ld [ %i0 + 0x4c ], %g2 4000c1e0: 14 80 00 09 bg 4000c204 <== NOT EXECUTED 4000c1e4: 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; 4000c1e8: 10 80 00 05 b 4000c1fc <== NOT EXECUTED 4000c1ec: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED temp.__overlay.minor = _minor; 4000c1f0: 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 ); 4000c1f4: 10 80 00 0a b 4000c21c 4000c1f8: c4 3e 40 00 std %g2, [ %i1 ] break; case IMFS_LINEAR_FILE: case IMFS_MEMORY_FILE: buf->st_size = the_jnode->info.file.size; 4000c1fc: 10 80 00 08 b 4000c21c <== NOT EXECUTED 4000c200: c2 26 60 20 st %g1, [ %i1 + 0x20 ] <== NOT EXECUTED case IMFS_SYM_LINK: buf->st_size = 0; break; default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 4000c204: 40 00 08 89 call 4000e428 <__errno> <== NOT EXECUTED 4000c208: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c20c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000c210: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c214: 81 c7 e0 08 ret <== NOT EXECUTED 4000c218: 81 e8 00 00 restore <== NOT EXECUTED break; } buf->st_mode = the_jnode->st_mode; 4000c21c: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 4000c220: 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; 4000c224: c2 36 60 0c sth %g1, [ %i1 + 0xc ] buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 4000c228: 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; 4000c22c: 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; 4000c230: 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; 4000c234: 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; 4000c238: 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; 4000c23c: 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; 4000c240: 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; 4000c244: 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; 4000c248: 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; 4000c24c: 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; 4000c250: 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; 4000c254: 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; 4000c258: c2 26 60 34 st %g1, [ %i1 + 0x34 ] return 0; } 4000c25c: 81 c7 e0 08 ret 4000c260: 91 e8 20 00 restore %g0, 0, %o0 40005688 : int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { 40005688: 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 ); 4000568c: a0 07 bf c3 add %fp, -61, %l0 <== NOT EXECUTED 40005690: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40005694: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40005698: 7f ff fe fe call 40005290 <== NOT EXECUTED 4000569c: 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 ) { 400056a0: 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; 400056a4: f2 27 bf e4 st %i1, [ %fp + -28 ] <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 400056a8: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 400056ac: 92 10 20 04 mov 4, %o1 <== NOT EXECUTED 400056b0: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 400056b4: 98 07 bf e4 add %fp, -28, %o4 <== NOT EXECUTED 400056b8: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED 400056bc: 40 00 41 93 call 40015d08 <== NOT EXECUTED 400056c0: b0 10 20 00 clr %i0 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 400056c4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400056c8: 12 80 00 06 bne 400056e0 <== NOT EXECUTED 400056cc: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 400056d0: 40 00 75 c9 call 40022df4 <__errno> <== NOT EXECUTED 400056d4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 400056d8: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 400056dc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 400056e0: 81 c7 e0 08 ret <== NOT EXECUTED 400056e4: 81 e8 00 00 restore <== NOT EXECUTED 400056e8 : #include int IMFS_unlink( rtems_filesystem_location_info_t *loc /* IN */ ) { 400056e8: 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; 400056ec: 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 ) { 400056f0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 400056f4: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 400056f8: 32 80 00 2a bne,a 400057a0 <== NOT EXECUTED 400056fc: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED if ( !node->info.hard_link.link_node ) 40005700: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 40005704: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005708: 12 80 00 08 bne 40005728 <== NOT EXECUTED 4000570c: a2 07 bf e0 add %fp, -32, %l1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 40005710: 40 00 75 b9 call 40022df4 <__errno> <== NOT EXECUTED 40005714: 01 00 00 00 nop <== NOT EXECUTED 40005718: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4000571c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005720: 10 80 00 23 b 400057ac <== NOT EXECUTED 40005724: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED the_link = *loc; 40005728: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000572c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40005730: 40 00 7c 56 call 40024888 <== NOT EXECUTED 40005734: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; 40005738: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED IMFS_Set_handlers( &the_link ); 4000573c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005740: 40 00 41 d5 call 40015e94 <== NOT EXECUTED 40005744: c2 27 bf e0 st %g1, [ %fp + -32 ] <== 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) 40005748: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 4000574c: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED 40005750: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40005754: 12 80 00 0b bne 40005780 <== NOT EXECUTED 40005758: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED { result = (*the_link.handlers->rmnod_h)( &the_link ); 4000575c: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED 40005760: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 40005764: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005768: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( result != 0 ) 4000576c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005770: 12 80 00 0f bne 400057ac <== NOT EXECUTED 40005774: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Now actually free the node we were asked to free. */ result = (*loc->handlers->rmnod_h)( loc ); 40005778: 10 80 00 0a b 400057a0 <== NOT EXECUTED 4000577c: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED return -1; } else { node->info.hard_link.link_node->st_nlink --; IMFS_update_ctime( node->info.hard_link.link_node ); 40005780: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED if ( result != 0 ) return -1; } else { node->info.hard_link.link_node->st_nlink --; 40005784: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED IMFS_update_ctime( node->info.hard_link.link_node ); 40005788: 40 00 01 2f call 40005c44 <== NOT EXECUTED 4000578c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40005790: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40005794: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40005798: c2 20 a0 44 st %g1, [ %g2 + 0x44 ] <== NOT EXECUTED /* * Now actually free the node we were asked to free. */ result = (*loc->handlers->rmnod_h)( loc ); 4000579c: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 400057a0: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 400057a4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400057a8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return result; } 400057ac: 81 c7 e0 08 ret <== NOT EXECUTED 400057b0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400057b4 : #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 400057b4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 400057b8: 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 ) 400057bc: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 400057c0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400057c4: 22 80 00 06 be,a 400057dc <== NOT EXECUTED 400057c8: c2 00 a0 58 ld [ %g2 + 0x58 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 400057cc: 40 00 75 8a call 40022df4 <__errno> <== NOT EXECUTED 400057d0: 01 00 00 00 nop <== NOT EXECUTED 400057d4: 10 80 00 08 b 400057f4 <== NOT EXECUTED 400057d8: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) 400057dc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400057e0: 32 80 00 08 bne,a 40005800 <== NOT EXECUTED 400057e4: c0 20 a0 58 clr [ %g2 + 0x58 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */ 400057e8: 40 00 75 83 call 40022df4 <__errno> <== NOT EXECUTED 400057ec: 01 00 00 00 nop <== NOT EXECUTED 400057f0: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 400057f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400057f8: 81 c7 e0 08 ret <== NOT EXECUTED 400057fc: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED */ node->info.directory.mt_fs = NULL; return 0; } 40005800: 81 c7 e0 08 ret <== NOT EXECUTED 40005804: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40005808 : time_t modtime /* IN */ ) { IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 40005808: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; return 0; } 4000580c: 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; 40005810: d4 20 60 40 st %o2, [ %g1 + 0x40 ] <== NOT EXECUTED return 0; } 40005814: 81 c3 e0 08 retl <== NOT EXECUTED 40005818: d2 20 60 3c st %o1, [ %g1 + 0x3c ] <== NOT EXECUTED 40003374 : void RTEMS_Malloc_Initialize( void *start, size_t length, size_t sbrk_amount ) { 40003374: 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; 40003378: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000337c: 82 10 61 44 or %g1, 0x144, %g1 ! 40019d44 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40003380: c2 20 7f fc st %g1, [ %g1 + -4 ] 40003384: 82 00 7f fc add %g1, -4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40003388: c2 20 60 08 st %g1, [ %g1 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4000338c: c0 20 60 04 clr [ %g1 + 4 ] * 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; 40003390: 03 10 00 67 sethi %hi(0x40019c00), %g1 if (!starting_address) { 40003394: 80 a6 20 00 cmp %i0, 0 40003398: 12 80 00 11 bne 400033dc 4000339c: f4 20 61 3c st %i2, [ %g1 + 0x13c ] uaddress = (uintptr_t)sbrk(length); 400033a0: 7f ff fa 29 call 40001c44 <== NOT EXECUTED 400033a4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if (uaddress == (uintptr_t) -1) { 400033a8: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 400033ac: 12 80 00 04 bne 400033bc <== NOT EXECUTED 400033b0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_fatal_error_occurred( RTEMS_NO_MEMORY ); 400033b4: 40 00 0f f9 call 40007398 <== NOT EXECUTED 400033b8: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED /* DOES NOT RETURN!!! */ } if (uaddress & (CPU_HEAP_ALIGNMENT-1)) { 400033bc: 80 8e 20 07 btst 7, %i0 <== NOT EXECUTED 400033c0: 02 80 00 08 be 400033e0 <== NOT EXECUTED 400033c4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED old_address = uaddress; uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1); 400033c8: 82 06 20 08 add %i0, 8, %g1 <== NOT EXECUTED 400033cc: 82 08 7f f8 and %g1, -8, %g1 <== NOT EXECUTED /* * adjust the length by whatever we aligned by */ length -= uaddress - old_address; 400033d0: 84 20 40 18 sub %g1, %i0, %g2 <== NOT EXECUTED 400033d4: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED 400033d8: b2 26 40 02 sub %i1, %g2, %i1 <== NOT EXECUTED * 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() ) 400033dc: 03 10 00 67 sethi %hi(0x40019c00), %g1 400033e0: c2 00 62 c4 ld [ %g1 + 0x2c4 ], %g1 ! 40019ec4 <_CPU_Table+0x10> 400033e4: 80 a0 60 00 cmp %g1, 0 400033e8: 02 80 00 07 be 40003404 400033ec: 92 10 00 18 mov %i0, %o1 memset( starting_address, 0, length ); 400033f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400033f4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400033f8: 40 00 2e 0e call 4000ec30 <== NOT EXECUTED 400033fc: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED void *starting_address, size_t size, uint32_t page_size ) { return _Heap_Initialize( the_heap, starting_address, size, page_size ); 40003400: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40003404: 94 10 00 19 mov %i1, %o2 40003408: 11 10 00 67 sethi %hi(0x40019c00), %o0 4000340c: 96 10 20 08 mov 8, %o3 40003410: 40 00 12 9a call 40007e78 <_Heap_Initialize> 40003414: 90 12 20 e4 or %o0, 0xe4, %o0 &RTEMS_Malloc_Heap, starting_address, length, CPU_HEAP_ALIGNMENT ); if ( !status ) 40003418: 80 a2 20 00 cmp %o0, 0 4000341c: 12 80 00 04 bne 4000342c 40003420: 01 00 00 00 nop rtems_fatal_error_occurred( status ); 40003424: 40 00 0f dd call 40007398 <== NOT EXECUTED 40003428: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000342c: 81 c7 e0 08 ret 40003430: 81 e8 00 00 restore 40003504 : static rtems_printk_plugin_t print_handler; void Stack_check_Dump_threads_usage( Thread_Control *the_thread ) { 40003504: 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 ) 40003508: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4000350c: 02 80 00 3e be 40003604 <== NOT EXECUTED 40003510: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED return; if ( !print_handler ) 40003514: c2 00 62 24 ld [ %g1 + 0x224 ], %g1 ! 4001da24 <== NOT EXECUTED 40003518: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000351c: 02 80 00 3a be 40003604 <== NOT EXECUTED 40003520: 80 a6 3f ff cmp %i0, -1 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { 40003524: 12 80 00 09 bne 40003548 <== NOT EXECUTED 40003528: a2 06 20 d0 add %i0, 0xd0, %l1 <== NOT EXECUTED if (Stack_check_Interrupt_stack.area) { 4000352c: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 40003530: 82 10 63 b4 or %g1, 0x3b4, %g1 ! 4001dbb4 <== NOT EXECUTED 40003534: c4 00 60 04 ld [ %g1 + 4 ], %g2 <== NOT EXECUTED stack = &Stack_check_Interrupt_stack; the_thread = 0; } else return; 40003538: 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) { 4000353c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003540: 02 80 00 31 be 40003604 <== NOT EXECUTED 40003544: b0 10 20 00 clr %i0 <== NOT EXECUTED else return; } else stack = &the_thread->Start.Initial_stack; low = Stack_check_usable_stack_start(stack); 40003548: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 4000354c: 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); 40003550: a0 00 60 10 add %g1, 0x10, %l0 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 40003554: a4 00 bf f0 add %g2, -16, %l2 <== NOT EXECUTED high_water_mark = Stack_check_find_high_water_mark(low, size); 40003558: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000355c: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 40003560: 7f ff ff d9 call 400034c4 <== NOT EXECUTED 40003564: a6 10 20 00 clr %l3 <== NOT EXECUTED if ( high_water_mark ) 40003568: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000356c: 02 80 00 03 be 40003578 <== NOT EXECUTED 40003570: 82 04 00 12 add %l0, %l2, %g1 <== NOT EXECUTED used = Stack_check_Calculate_used( low, size, high_water_mark ); 40003574: a6 20 40 08 sub %g1, %o0, %l3 <== NOT EXECUTED else used = 0; if ( the_thread ) { 40003578: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4000357c: 02 80 00 07 be 40003598 <== NOT EXECUTED 40003580: 92 10 20 05 mov 5, %o1 <== NOT EXECUTED rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003584: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED 40003588: 40 00 10 21 call 4000760c <== NOT EXECUTED 4000358c: 94 07 bf f3 add %fp, -13, %o2 <== NOT EXECUTED name[ 2 ] = 'T'; name[ 3 ] = 'R'; name[ 4 ] = '\0'; } (*print_handler)( 40003590: 10 80 00 0c b 400035c0 <== NOT EXECUTED 40003594: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED used = 0; if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; 40003598: 82 10 20 49 mov 0x49, %g1 <== NOT EXECUTED 4000359c: c2 2f bf f3 stb %g1, [ %fp + -13 ] <== NOT EXECUTED name[ 1 ] = 'N'; 400035a0: 82 10 20 4e mov 0x4e, %g1 <== NOT EXECUTED 400035a4: c2 2f bf f4 stb %g1, [ %fp + -12 ] <== NOT EXECUTED name[ 2 ] = 'T'; 400035a8: 82 10 20 54 mov 0x54, %g1 <== NOT EXECUTED name[ 3 ] = 'R'; name[ 4 ] = '\0'; 400035ac: 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'; 400035b0: c2 2f bf f5 stb %g1, [ %fp + -11 ] <== NOT EXECUTED name[ 3 ] = 'R'; 400035b4: 82 10 20 52 mov 0x52, %g1 <== NOT EXECUTED 400035b8: c2 2f bf f6 stb %g1, [ %fp + -10 ] <== NOT EXECUTED name[ 4 ] = '\0'; } (*print_handler)( 400035bc: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 400035c0: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 400035c4: c4 00 62 24 ld [ %g1 + 0x224 ], %g2 <== NOT EXECUTED 400035c8: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 400035cc: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 400035d0: 02 80 00 03 be 400035dc <== NOT EXECUTED 400035d4: d0 00 62 20 ld [ %g1 + 0x220 ], %o0 ! 4001da20 <== NOT EXECUTED 400035d8: d4 06 20 08 ld [ %i0 + 8 ], %o2 <== NOT EXECUTED 400035dc: da 04 40 00 ld [ %l1 ], %o5 <== NOT EXECUTED 400035e0: d8 04 60 04 ld [ %l1 + 4 ], %o4 <== NOT EXECUTED 400035e4: 13 10 00 6c sethi %hi(0x4001b000), %o1 <== NOT EXECUTED 400035e8: 9a 03 00 0d add %o4, %o5, %o5 <== NOT EXECUTED 400035ec: e4 23 a0 5c st %l2, [ %sp + 0x5c ] <== NOT EXECUTED 400035f0: e6 23 a0 60 st %l3, [ %sp + 0x60 ] <== NOT EXECUTED 400035f4: 9a 03 7f ff add %o5, -1, %o5 <== NOT EXECUTED 400035f8: 92 12 61 b0 or %o1, 0x1b0, %o1 <== NOT EXECUTED 400035fc: 9f c0 80 00 call %g2 <== NOT EXECUTED 40003600: 96 07 bf f3 add %fp, -13, %o3 <== NOT EXECUTED 40003604: 81 c7 e0 08 ret <== NOT EXECUTED 40003608: 81 e8 00 00 restore <== NOT EXECUTED 400034c4 : /* * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; 400034c4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED for (ebase = base + length; base < ebase; base++) 400034c8: 92 0a 7f fc and %o1, -4, %o1 <== NOT EXECUTED if (*base != U32_PATTERN) 400034cc: 03 29 69 69 sethi %hi(0xa5a5a400), %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++) 400034d0: 84 02 00 09 add %o0, %o1, %g2 <== NOT EXECUTED if (*base != U32_PATTERN) 400034d4: 10 80 00 06 b 400034ec <== NOT EXECUTED 400034d8: 86 10 61 a5 or %g1, 0x1a5, %g3 <== NOT EXECUTED 400034dc: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400034e0: 12 80 00 07 bne 400034fc <== NOT EXECUTED 400034e4: 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++) 400034e8: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 400034ec: 80 a2 00 02 cmp %o0, %g2 <== NOT EXECUTED 400034f0: 2a bf ff fb bcs,a 400034dc <== NOT EXECUTED 400034f4: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 400034f8: 90 10 20 00 clr %o0 <== NOT EXECUTED if (*base != U32_PATTERN) return (void *) base; #endif return (void *)0; } 400034fc: 81 c3 e0 08 retl <== NOT EXECUTED 40003500: 01 00 00 00 nop 400036c0 : */ void Stack_check_report_blown_task( Thread_Control *running, boolean pattern_ok ) { 400036c0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *stack = &running->Start.Initial_stack; printk( 400036c4: d4 1e 20 08 ldd [ %i0 + 8 ], %o2 <== NOT EXECUTED 400036c8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400036cc: 11 10 00 6c sethi %hi(0x4001b000), %o0 <== NOT EXECUTED 400036d0: 40 00 05 b9 call 40004db4 <== NOT EXECUTED 400036d4: 90 12 22 38 or %o0, 0x238, %o0 ! 4001b238 <== NOT EXECUTED rtems_configuration_get_user_multiprocessing_table()->node ); } #endif printk( 400036d8: d4 06 20 d4 ld [ %i0 + 0xd4 ], %o2 <== NOT EXECUTED 400036dc: c2 06 20 d0 ld [ %i0 + 0xd0 ], %g1 <== NOT EXECUTED 400036e0: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 400036e4: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 400036e8: 94 02 80 01 add %o2, %g1, %o2 <== NOT EXECUTED 400036ec: 11 10 00 6c sethi %hi(0x4001b000), %o0 <== NOT EXECUTED 400036f0: 94 02 bf ff add %o2, -1, %o2 <== NOT EXECUTED 400036f4: 40 00 05 b0 call 40004db4 <== NOT EXECUTED 400036f8: 90 12 22 78 or %o0, 0x278, %o0 <== NOT EXECUTED stack->area, stack->area + stack->size - 1, stack->size ); if ( !pattern_ok ) { 400036fc: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40003700: 12 80 00 07 bne 4000371c <== NOT EXECUTED 40003704: 11 10 00 6c sethi %hi(0x4001b000), %o0 <== NOT EXECUTED printk( 40003708: d2 06 20 d4 ld [ %i0 + 0xd4 ], %o1 <== NOT EXECUTED 4000370c: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 40003710: 90 12 22 a8 or %o0, 0x2a8, %o0 <== NOT EXECUTED 40003714: 40 00 05 a8 call 40004db4 <== NOT EXECUTED 40003718: 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 ); 4000371c: 40 00 13 b6 call 400085f4 <== NOT EXECUTED 40003720: 91 e8 20 81 restore %g0, 0x81, %o0 <== NOT EXECUTED 40003724: 01 00 00 00 nop 40007514 <_API_extensions_Run_postdriver>: * * _API_extensions_Run_postdriver */ void _API_extensions_Run_postdriver( void ) { 40007514: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40007518: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000751c: e0 00 61 30 ld [ %g1 + 0x130 ], %l0 ! 4001a130 <_API_extensions_List> */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40007520: 03 10 00 68 sethi %hi(0x4001a000), %g1 40007524: 10 80 00 08 b 40007544 <_API_extensions_Run_postdriver+0x30> 40007528: a2 10 61 34 or %g1, 0x134, %l1 ! 4001a134 <_API_extensions_List+0x4> !_Chain_Is_tail( &_API_extensions_List, the_node ) ; the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postdriver_hook ) 4000752c: 80 a0 60 00 cmp %g1, 0 40007530: 22 80 00 05 be,a 40007544 <_API_extensions_Run_postdriver+0x30> 40007534: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postdriver_hook)(); 40007538: 9f c0 40 00 call %g1 4000753c: 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 ) { 40007540: 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 ) ; 40007544: 80 a4 00 11 cmp %l0, %l1 40007548: 32 bf ff f9 bne,a 4000752c <_API_extensions_Run_postdriver+0x18> 4000754c: c2 04 20 0c ld [ %l0 + 0xc ], %g1 the_extension = (API_extensions_Control *) the_node; if ( the_extension->postdriver_hook ) (*the_extension->postdriver_hook)(); } } 40007550: 81 c7 e0 08 ret 40007554: 81 e8 00 00 restore 400075b8 <_API_extensions_Run_postswitch>: * * _API_extensions_Run_postswitch */ void _API_extensions_Run_postswitch( void ) { 400075b8: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 400075bc: 03 10 00 68 sethi %hi(0x4001a000), %g1 400075c0: e0 00 61 30 ld [ %g1 + 0x130 ], %l0 ! 4001a130 <_API_extensions_List> the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postswitch_hook ) (*the_extension->postswitch_hook)( _Thread_Executing ); 400075c4: 23 10 00 67 sethi %hi(0x40019c00), %l1 400075c8: 03 10 00 68 sethi %hi(0x4001a000), %g1 400075cc: 10 80 00 08 b 400075ec <_API_extensions_Run_postswitch+0x34> 400075d0: a4 10 61 34 or %g1, 0x134, %l2 ! 4001a134 <_API_extensions_List+0x4> !_Chain_Is_tail( &_API_extensions_List, the_node ) ; the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postswitch_hook ) 400075d4: 80 a0 60 00 cmp %g1, 0 400075d8: 22 80 00 05 be,a 400075ec <_API_extensions_Run_postswitch+0x34> 400075dc: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postswitch_hook)( _Thread_Executing ); 400075e0: 9f c0 40 00 call %g1 400075e4: d0 04 63 7c ld [ %l1 + 0x37c ], %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 ) { 400075e8: 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 ) ; 400075ec: 80 a4 00 12 cmp %l0, %l2 400075f0: 32 bf ff f9 bne,a 400075d4 <_API_extensions_Run_postswitch+0x1c> 400075f4: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 the_extension = (API_extensions_Control *) the_node; if ( the_extension->postswitch_hook ) (*the_extension->postswitch_hook)( _Thread_Executing ); } } 400075f8: 81 c7 e0 08 ret 400075fc: 81 e8 00 00 restore 40007574 <_API_extensions_Run_predriver>: * * _API_extensions_Run_predriver */ void _API_extensions_Run_predriver( void ) { 40007574: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40007578: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000757c: e0 00 61 30 ld [ %g1 + 0x130 ], %l0 ! 4001a130 <_API_extensions_List> 40007580: 03 10 00 68 sethi %hi(0x4001a000), %g1 40007584: 10 80 00 08 b 400075a4 <_API_extensions_Run_predriver+0x30> 40007588: a2 10 61 34 or %g1, 0x134, %l1 ! 4001a134 <_API_extensions_List+0x4> !_Chain_Is_tail( &_API_extensions_List, the_node ) ; the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->predriver_hook ) 4000758c: 80 a0 60 00 cmp %g1, 0 40007590: 22 80 00 05 be,a 400075a4 <_API_extensions_Run_predriver+0x30> 40007594: e0 04 00 00 ld [ %l0 ], %l0 (*the_extension->predriver_hook)(); 40007598: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000759c: 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 ) { 400075a0: 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 ) ; 400075a4: 80 a4 00 11 cmp %l0, %l1 400075a8: 32 bf ff f9 bne,a 4000758c <_API_extensions_Run_predriver+0x18> 400075ac: c2 04 20 08 ld [ %l0 + 8 ], %g1 the_extension = (API_extensions_Control *) the_node; if ( the_extension->predriver_hook ) (*the_extension->predriver_hook)(); } } 400075b0: 81 c7 e0 08 ret 400075b4: 81 e8 00 00 restore 400142c0 <_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 ) { 400142c0: 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 ) { 400142c4: 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 ) { 400142c8: 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 ) { 400142cc: 80 a6 80 01 cmp %i2, %g1 400142d0: 18 80 00 17 bgu 4001432c <_CORE_message_queue_Broadcast+0x6c> 400142d4: 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 ) { 400142d8: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 400142dc: 80 a0 60 00 cmp %g1, 0 400142e0: 02 80 00 0a be 40014308 <_CORE_message_queue_Broadcast+0x48> 400142e4: a2 10 20 00 clr %l1 *count = 0; 400142e8: c0 27 40 00 clr [ %i5 ] <== NOT EXECUTED 400142ec: 81 c7 e0 08 ret <== NOT EXECUTED 400142f0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 400142f4: d0 04 20 28 ld [ %l0 + 0x28 ], %o0 400142f8: 40 00 20 07 call 4001c314 400142fc: a2 04 60 01 inc %l1 buffer, waitp->return_argument, size ); *(uint32_t *)the_thread->Wait.return_argument_1 = size; 40014300: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 40014304: 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))) { 40014308: 40 00 0b 3f call 40017004 <_Thread_queue_Dequeue> 4001430c: 90 10 00 12 mov %l2, %o0 40014310: 92 10 00 19 mov %i1, %o1 40014314: a0 10 00 08 mov %o0, %l0 40014318: 80 a2 20 00 cmp %o0, 0 4001431c: 12 bf ff f6 bne 400142f4 <_CORE_message_queue_Broadcast+0x34> 40014320: 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; 40014324: e2 27 40 00 st %l1, [ %i5 ] 40014328: b0 10 20 00 clr %i0 return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL; } 4001432c: 81 c7 e0 08 ret 40014330: 81 e8 00 00 restore 400143f0 <_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 ) { 400143f0: 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; 400143f4: 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; 400143f8: 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; 400143fc: 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; 40014400: c0 26 20 60 clr [ %i0 + 0x60 ] the_message_queue->notify_argument = the_argument; 40014404: 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)) { 40014408: 80 8e e0 03 btst 3, %i3 4001440c: 02 80 00 07 be 40014428 <_CORE_message_queue_Initialize+0x38> 40014410: a0 10 00 1b mov %i3, %l0 allocated_message_size += sizeof(uint32_t); 40014414: 82 06 e0 04 add %i3, 4, %g1 allocated_message_size &= ~(sizeof(uint32_t) - 1); 40014418: a0 08 7f fc and %g1, -4, %l0 } if (allocated_message_size < maximum_message_size) 4001441c: 80 a4 00 1b cmp %l0, %i3 40014420: 0a 80 00 24 bcs 400144b0 <_CORE_message_queue_Initialize+0xc0> 40014424: 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 * 40014428: b6 04 20 14 add %l0, 0x14, %i3 4001442c: 92 10 00 1a mov %i2, %o1 40014430: 40 00 40 8e call 40024668 <.umul> 40014434: 90 10 00 1b mov %i3, %o0 (allocated_message_size + sizeof(CORE_message_queue_Buffer_control)); if (message_buffering_required < allocated_message_size) 40014438: 80 a2 00 10 cmp %o0, %l0 4001443c: 0a 80 00 1d bcs 400144b0 <_CORE_message_queue_Initialize+0xc0> 40014440: 92 10 00 08 mov %o0, %o1 RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 40014444: 11 10 00 cc sethi %hi(0x40033000), %o0 40014448: 40 00 02 20 call 40014cc8 <_Heap_Allocate> 4001444c: 90 12 22 dc or %o0, 0x2dc, %o0 ! 400332dc <_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) 40014450: 80 a2 20 00 cmp %o0, 0 40014454: 02 80 00 17 be 400144b0 <_CORE_message_queue_Initialize+0xc0> 40014458: d0 26 20 5c st %o0, [ %i0 + 0x5c ] /* * Initialize the pool of inactive messages, pending messages, * and set of waiting threads. */ _Chain_Initialize ( 4001445c: 92 10 00 08 mov %o0, %o1 40014460: 94 10 00 1a mov %i2, %o2 40014464: 90 06 20 68 add %i0, 0x68, %o0 40014468: 7f ff ff 88 call 40014288 <_Chain_Initialize> 4001446c: 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( 40014470: c2 06 40 00 ld [ %i1 ], %g1 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40014474: c0 26 20 54 clr [ %i0 + 0x54 ] 40014478: 82 18 60 01 xor %g1, 1, %g1 4001447c: 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); 40014480: 82 06 20 54 add %i0, 0x54, %g1 40014484: c2 26 20 50 st %g1, [ %i0 + 0x50 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40014488: 82 06 20 50 add %i0, 0x50, %g1 4001448c: 90 10 00 18 mov %i0, %o0 40014490: c2 26 20 58 st %g1, [ %i0 + 0x58 ] 40014494: 92 60 3f ff subx %g0, -1, %o1 40014498: 94 10 20 80 mov 0x80, %o2 4001449c: 96 10 20 06 mov 6, %o3 400144a0: 40 00 0c 2e call 40017558 <_Thread_queue_Initialize> 400144a4: b0 10 20 01 mov 1, %i0 400144a8: 81 c7 e0 08 ret 400144ac: 81 e8 00 00 restore STATES_WAITING_FOR_MESSAGE, CORE_MESSAGE_QUEUE_STATUS_TIMEOUT ); return TRUE; } 400144b0: 81 c7 e0 08 ret <== NOT EXECUTED 400144b4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40016830 <_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 ) { 40016830: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; boolean notify = FALSE; the_message->priority = submit_type; switch ( submit_type ) { 40016834: 03 20 00 00 sethi %hi(0x80000000), %g1 40016838: 80 a6 80 01 cmp %i2, %g1 4001683c: 02 80 00 16 be 40016894 <_CORE_message_queue_Insert_message+0x64> 40016840: f4 26 60 08 st %i2, [ %i1 + 8 ] 40016844: 82 00 7c 00 add %g1, -1024, %g1 40016848: 82 10 63 ff or %g1, 0x3ff, %g1 4001684c: 80 a6 80 01 cmp %i2, %g1 40016850: 32 80 00 20 bne,a 400168d0 <_CORE_message_queue_Insert_message+0xa0> 40016854: e0 06 20 50 ld [ %i0 + 0x50 ], %l0 <== NOT EXECUTED case CORE_MESSAGE_QUEUE_SEND_REQUEST: _ISR_Disable( level ); 40016858: 7f ff af 80 call 40002658 4001685c: 01 00 00 00 nop Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 40016860: 82 06 20 54 add %i0, 0x54, %g1 if ( the_message_queue->number_of_pending_messages++ == 0 ) 40016864: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 40016868: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 4001686c: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 the_chain->last = the_node; 40016870: f2 26 20 58 st %i1, [ %i0 + 0x58 ] 40016874: 84 00 a0 01 inc %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 40016878: c2 26 60 04 st %g1, [ %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; 4001687c: f2 20 40 00 st %i1, [ %g1 ] 40016880: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 40016884: 82 18 a0 01 xor %g2, 1, %g1 40016888: 80 a0 00 01 cmp %g0, %g1 4001688c: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Append_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 40016890: 30 80 00 27 b,a 4001692c <_CORE_message_queue_Insert_message+0xfc> break; case CORE_MESSAGE_QUEUE_URGENT_REQUEST: _ISR_Disable( level ); 40016894: 7f ff af 71 call 40002658 40016898: 01 00 00 00 nop ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 4001689c: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 if ( the_message_queue->number_of_pending_messages++ == 0 ) 400168a0: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 400168a4: 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; 400168a8: f2 26 20 50 st %i1, [ %i0 + 0x50 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 400168ac: c2 26 60 04 st %g1, [ %i1 + 4 ] 400168b0: 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; 400168b4: f2 20 e0 04 st %i1, [ %g3 + 4 ] 400168b8: 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; 400168bc: c6 26 40 00 st %g3, [ %i1 ] 400168c0: 80 a0 00 01 cmp %g0, %g1 400168c4: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 400168c8: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Prepend_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 400168cc: 30 80 00 18 b,a 4001692c <_CORE_message_queue_Insert_message+0xfc> 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 ) ) { 400168d0: 10 80 00 06 b 400168e8 <_CORE_message_queue_Insert_message+0xb8> <== NOT EXECUTED 400168d4: 84 06 20 54 add %i0, 0x54, %g2 <== NOT EXECUTED this_message = (CORE_message_queue_Buffer_control *) the_node; if ( this_message->priority <= the_message->priority ) { 400168d8: 80 a0 40 1a cmp %g1, %i2 <== NOT EXECUTED 400168dc: 14 80 00 06 bg 400168f4 <_CORE_message_queue_Insert_message+0xc4> <== NOT EXECUTED 400168e0: 01 00 00 00 nop <== NOT EXECUTED the_node = the_node->next; 400168e4: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 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 ) ) { 400168e8: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 400168ec: 32 bf ff fb bne,a 400168d8 <_CORE_message_queue_Insert_message+0xa8> <== NOT EXECUTED 400168f0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED continue; } break; } _ISR_Disable( level ); 400168f4: 7f ff af 59 call 40002658 <== NOT EXECUTED 400168f8: 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 ); 400168fc: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED } break; } _ISR_Disable( level ); if ( the_message_queue->number_of_pending_messages++ == 0 ) 40016900: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 <== NOT EXECUTED ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 40016904: c6 00 40 00 ld [ %g1 ], %g3 <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 40016908: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED before_node = after_node->next; after_node->next = the_node; 4001690c: f2 20 40 00 st %i1, [ %g1 ] <== NOT EXECUTED 40016910: 84 00 a0 01 inc %g2 <== NOT EXECUTED the_node->next = before_node; before_node->previous = the_node; 40016914: f2 20 e0 04 st %i1, [ %g3 + 4 ] <== NOT EXECUTED 40016918: 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; 4001691c: c6 26 40 00 st %g3, [ %i1 ] <== NOT EXECUTED 40016920: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40016924: c4 26 20 48 st %g2, [ %i0 + 0x48 ] <== NOT EXECUTED 40016928: a0 60 3f ff subx %g0, -1, %l0 <== NOT EXECUTED notify = TRUE; _Chain_Insert_unprotected( the_node->previous, &the_message->Node ); _ISR_Enable( level ); 4001692c: 7f ff af 4f call 40002668 40016930: 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 ) 40016934: 80 a4 20 00 cmp %l0, 0 40016938: 02 80 00 08 be 40016958 <_CORE_message_queue_Insert_message+0x128> 4001693c: 01 00 00 00 nop 40016940: c2 06 20 60 ld [ %i0 + 0x60 ], %g1 40016944: 80 a0 60 00 cmp %g1, 0 40016948: 02 80 00 04 be 40016958 <_CORE_message_queue_Insert_message+0x128> 4001694c: 01 00 00 00 nop (*the_message_queue->notify_handler)( the_message_queue->notify_argument ); 40016950: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016954: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 40016958: 81 c7 e0 08 ret 4001695c: 81 e8 00 00 restore 40013abc <_CORE_message_queue_Seize>: void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 40013abc: 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; 40013ac0: 03 10 00 a1 sethi %hi(0x40028400), %g1 40013ac4: e2 00 63 7c ld [ %g1 + 0x37c ], %l1 ! 4002877c <_Thread_Executing> void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 40013ac8: 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 ); 40013acc: 7f ff ba e3 call 40002658 40013ad0: c0 24 60 34 clr [ %l1 + 0x34 ] 40013ad4: 86 10 00 08 mov %o0, %g3 if ( the_message_queue->number_of_pending_messages != 0 ) { 40013ad8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 40013adc: 80 a0 60 00 cmp %g1, 0 40013ae0: 02 80 00 2a be 40013b88 <_CORE_message_queue_Seize+0xcc> 40013ae4: 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)); 40013ae8: f2 06 20 50 ld [ %i0 + 0x50 ], %i1 the_message_queue->number_of_pending_messages -= 1; 40013aec: 82 00 7f ff add %g1, -1, %g1 40013af0: 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)) 40013af4: 82 06 20 54 add %i0, 0x54, %g1 40013af8: 80 a6 40 01 cmp %i1, %g1 40013afc: 32 80 00 04 bne,a 40013b0c <_CORE_message_queue_Seize+0x50> 40013b00: c2 06 40 00 ld [ %i1 ], %g1 40013b04: 10 80 00 05 b 40013b18 <_CORE_message_queue_Seize+0x5c> <== NOT EXECUTED 40013b08: b2 10 20 00 clr %i1 <== NOT EXECUTED Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; the_chain->first = new_first; new_first->previous = _Chain_Head(the_chain); 40013b0c: 84 06 20 50 add %i0, 0x50, %g2 Chain_Node *return_node; Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; the_chain->first = new_first; 40013b10: c2 26 20 50 st %g1, [ %i0 + 0x50 ] new_first->previous = _Chain_Head(the_chain); 40013b14: c4 20 60 04 st %g2, [ %g1 + 4 ] the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); 40013b18: 7f ff ba d4 call 40002668 40013b1c: 90 10 00 03 mov %g3, %o0 *size = the_message->Contents.size; 40013b20: d4 06 60 0c ld [ %i1 + 0xc ], %o2 _Thread_Executing->Wait.count = the_message->priority; 40013b24: 03 10 00 a1 sethi %hi(0x40028400), %g1 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; 40013b28: d4 26 c0 00 st %o2, [ %i3 ] _Thread_Executing->Wait.count = the_message->priority; 40013b2c: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 40013b30: c2 06 60 08 ld [ %i1 + 8 ], %g1 _CORE_message_queue_Copy_buffer(the_message->Contents.buffer,buffer,*size); 40013b34: 92 10 00 1a mov %i2, %o1 the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); *size = the_message->Contents.size; _Thread_Executing->Wait.count = the_message->priority; 40013b38: c2 20 a0 24 st %g1, [ %g2 + 0x24 ] _CORE_message_queue_Copy_buffer(the_message->Contents.buffer,buffer,*size); 40013b3c: a2 06 60 10 add %i1, 0x10, %l1 40013b40: 7f ff ff d8 call 40013aa0 <_CORE_message_queue_Copy_buffer> 40013b44: 90 10 00 11 mov %l1, %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 ); 40013b48: 7f ff ea a2 call 4000e5d0 <_Thread_queue_Dequeue> 40013b4c: 90 10 00 10 mov %l0, %o0 if ( !the_thread ) { 40013b50: 82 92 20 00 orcc %o0, 0, %g1 40013b54: 32 80 00 04 bne,a 40013b64 <_CORE_message_queue_Seize+0xa8> 40013b58: d4 00 60 30 ld [ %g1 + 0x30 ], %o2 <== NOT EXECUTED 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 ); 40013b5c: 7f ff e0 c0 call 4000be5c <_Chain_Append> 40013b60: 91 ec 20 68 restore %l0, 0x68, %o0 * waiting task. */ the_message->priority = the_thread->Wait.count; the_message->Contents.size = (uint32_t)the_thread->Wait.option; _CORE_message_queue_Copy_buffer( 40013b64: d0 00 60 28 ld [ %g1 + 0x28 ], %o0 <== 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; 40013b68: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 <== NOT EXECUTED the_message->Contents.size = (uint32_t)the_thread->Wait.option; 40013b6c: 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; 40013b70: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED the_message->Contents.size = (uint32_t)the_thread->Wait.option; _CORE_message_queue_Copy_buffer( 40013b74: 7f ff ff cb call 40013aa0 <_CORE_message_queue_Copy_buffer> <== NOT EXECUTED 40013b78: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED the_thread->Wait.return_argument, the_message->Contents.buffer, the_message->Contents.size ); _CORE_message_queue_Insert_message( 40013b7c: f4 06 60 08 ld [ %i1 + 8 ], %i2 <== NOT EXECUTED 40013b80: 40 00 0b 2c call 40016830 <_CORE_message_queue_Insert_message> <== NOT EXECUTED 40013b84: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED the_message->priority ); return; } if ( !wait ) { 40013b88: 12 80 00 08 bne 40013ba8 <_CORE_message_queue_Seize+0xec> 40013b8c: 82 10 20 01 mov 1, %g1 _ISR_Enable( level ); 40013b90: 7f ff ba b6 call 40002668 40013b94: 01 00 00 00 nop executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT; 40013b98: 82 10 20 04 mov 4, %g1 ! 4 40013b9c: 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 ); } 40013ba0: 81 c7 e0 08 ret 40013ba4: 81 e8 00 00 restore _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; 40013ba8: 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; 40013bac: f0 24 60 44 st %i0, [ %l1 + 0x44 ] executing->Wait.id = id; 40013bb0: f2 24 60 20 st %i1, [ %l1 + 0x20 ] executing->Wait.return_argument = buffer; 40013bb4: 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; 40013bb8: 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 ); 40013bbc: 7f ff ba ab call 40002668 40013bc0: 35 10 00 3b sethi %hi(0x4000ec00), %i2 _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 40013bc4: b2 10 00 1d mov %i5, %i1 40013bc8: 7f ff ea f0 call 4000e788 <_Thread_queue_Enqueue_with_handler> 40013bcc: 95 ee a0 20 restore %i2, 0x20, %o2 40013bd0: 01 00 00 00 nop 40013bf0 <_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 ) { 40013bf0: 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 ) { 40013bf4: 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 ) { 40013bf8: 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 ) { 40013bfc: 80 a6 80 01 cmp %i2, %g1 40013c00: 18 80 00 3f bgu 40013cfc <_CORE_message_queue_Submit+0x10c> 40013c04: 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 ) { 40013c08: c2 04 60 48 ld [ %l1 + 0x48 ], %g1 40013c0c: 80 a0 60 00 cmp %g1, 0 40013c10: 32 80 00 0f bne,a 40013c4c <_CORE_message_queue_Submit+0x5c> 40013c14: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); 40013c18: 7f ff ea 6e call 4000e5d0 <_Thread_queue_Dequeue> 40013c1c: 90 10 00 11 mov %l1, %o0 if ( the_thread ) { 40013c20: a0 92 20 00 orcc %o0, 0, %l0 40013c24: 02 80 00 09 be 40013c48 <_CORE_message_queue_Submit+0x58> 40013c28: 90 10 00 19 mov %i1, %o0 _CORE_message_queue_Copy_buffer( 40013c2c: d2 04 20 28 ld [ %l0 + 0x28 ], %o1 40013c30: 7f ff ff e9 call 40013bd4 <_CORE_message_queue_Copy_buffer> 40013c34: 94 10 00 1a mov %i2, %o2 buffer, the_thread->Wait.return_argument, size ); *(size_t *)the_thread->Wait.return_argument_1 = size; 40013c38: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 the_thread->Wait.count = submit_type; 40013c3c: 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; 40013c40: 10 80 00 15 b 40013c94 <_CORE_message_queue_Submit+0xa4> 40013c44: f4 20 40 00 st %i2, [ %g1 ] /* * 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 < 40013c48: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 40013c4c: c2 04 60 44 ld [ %l1 + 0x44 ], %g1 40013c50: 80 a0 80 01 cmp %g2, %g1 40013c54: 1a 80 00 12 bcc 40013c9c <_CORE_message_queue_Submit+0xac> 40013c58: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 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 *) 40013c5c: 7f ff e0 8c call 4000be8c <_Chain_Get> 40013c60: 90 04 60 68 add %l1, 0x68, %o0 /* * NOTE: If the system is consistent, this error should never occur. */ if ( !the_message ) { 40013c64: a0 92 20 00 orcc %o0, 0, %l0 40013c68: 02 80 00 27 be 40013d04 <_CORE_message_queue_Submit+0x114> 40013c6c: 90 10 00 19 mov %i1, %o0 return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED; } _CORE_message_queue_Copy_buffer( 40013c70: 92 04 20 10 add %l0, 0x10, %o1 40013c74: 7f ff ff d8 call 40013bd4 <_CORE_message_queue_Copy_buffer> 40013c78: 94 10 00 1a mov %i2, %o2 size ); the_message->Contents.size = size; the_message->priority = submit_type; _CORE_message_queue_Insert_message( 40013c7c: 90 10 00 11 mov %l1, %o0 _CORE_message_queue_Copy_buffer( buffer, the_message->Contents.buffer, size ); the_message->Contents.size = size; 40013c80: f4 24 20 0c st %i2, [ %l0 + 0xc ] the_message->priority = submit_type; 40013c84: fa 24 20 08 st %i5, [ %l0 + 8 ] _CORE_message_queue_Insert_message( 40013c88: 92 10 00 10 mov %l0, %o1 40013c8c: 40 00 0a e9 call 40016830 <_CORE_message_queue_Insert_message> 40013c90: 94 10 00 1d mov %i5, %o2 40013c94: 81 c7 e0 08 ret 40013c98: 91 e8 20 00 restore %g0, 0, %o0 * 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 ) { 40013c9c: 80 a0 60 00 cmp %g1, 0 40013ca0: 02 80 00 17 be 40013cfc <_CORE_message_queue_Submit+0x10c> 40013ca4: 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() ) { 40013ca8: 03 10 00 a1 sethi %hi(0x40028400), %g1 <== NOT EXECUTED 40013cac: c2 00 63 64 ld [ %g1 + 0x364 ], %g1 ! 40028764 <_ISR_Nest_level> <== NOT EXECUTED 40013cb0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40013cb4: 12 80 00 14 bne 40013d04 <_CORE_message_queue_Submit+0x114> <== NOT EXECUTED 40013cb8: 03 10 00 a1 sethi %hi(0x40028400), %g1 <== NOT EXECUTED */ { Thread_Control *executing = _Thread_Executing; _ISR_Disable( level ); 40013cbc: 7f ff ba 67 call 40002658 <== NOT EXECUTED 40013cc0: e0 00 63 7c ld [ %g1 + 0x37c ], %l0 ! 4002877c <_Thread_Executing> <== NOT EXECUTED 40013cc4: 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; 40013cc8: 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; 40013ccc: f6 24 20 20 st %i3, [ %l0 + 0x20 ] <== NOT EXECUTED executing->Wait.return_argument = buffer; 40013cd0: f2 24 20 28 st %i1, [ %l0 + 0x28 ] <== NOT EXECUTED executing->Wait.option = size; 40013cd4: 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; 40013cd8: e2 24 20 44 st %l1, [ %l0 + 0x44 ] <== NOT EXECUTED 40013cdc: 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 ); 40013ce0: 7f ff ba 62 call 40002668 <== NOT EXECUTED 40013ce4: b0 10 20 07 mov 7, %i0 <== NOT EXECUTED _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 40013ce8: d2 07 a0 60 ld [ %fp + 0x60 ], %o1 <== NOT EXECUTED 40013cec: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40013cf0: 15 10 00 3b sethi %hi(0x4000ec00), %o2 <== NOT EXECUTED 40013cf4: 7f ff ea a5 call 4000e788 <_Thread_queue_Enqueue_with_handler> <== NOT EXECUTED 40013cf8: 94 12 a0 20 or %o2, 0x20, %o2 ! 4000ec20 <_Thread_queue_Timeout> <== NOT EXECUTED 40013cfc: 81 c7 e0 08 ret 40013d00: 81 e8 00 00 restore } return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT; 40013d04: b0 10 20 03 mov 3, %i0 <== NOT EXECUTED } 40013d08: 81 c7 e0 08 ret <== NOT EXECUTED 40013d0c: 81 e8 00 00 restore <== NOT EXECUTED 40007738 <_CORE_mutex_Seize_interrupt_blocking>: void _CORE_mutex_Seize_interrupt_blocking( CORE_mutex_Control *the_mutex, Watchdog_Interval timeout ) { 40007738: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 4000773c: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 40007740: 80 a0 60 02 cmp %g1, 2 Watchdog_Interval timeout ) { Thread_Control *executing; executing = _Thread_Executing; 40007744: 03 10 00 67 sethi %hi(0x40019c00), %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 40007748: 12 80 00 0a bne 40007770 <_CORE_mutex_Seize_interrupt_blocking+0x38> 4000774c: d2 00 63 7c ld [ %g1 + 0x37c ], %o1 ! 40019f7c <_Thread_Executing> if ( the_mutex->holder->current_priority > executing->current_priority ) { 40007750: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 40007754: d2 02 60 14 ld [ %o1 + 0x14 ], %o1 40007758: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 4000775c: 80 a0 40 09 cmp %g1, %o1 40007760: 28 80 00 05 bleu,a 40007774 <_CORE_mutex_Seize_interrupt_blocking+0x3c> 40007764: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 _Thread_Change_priority( 40007768: 40 00 07 47 call 40009484 <_Thread_Change_priority> 4000776c: 94 10 20 00 clr %o2 FALSE ); } } the_mutex->blocked_count++; 40007770: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40007774: 90 10 00 18 mov %i0, %o0 FALSE ); } } the_mutex->blocked_count++; 40007778: 82 00 60 01 inc %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 4000777c: 92 10 00 19 mov %i1, %o1 FALSE ); } } the_mutex->blocked_count++; 40007780: c2 26 20 58 st %g1, [ %i0 + 0x58 ] _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40007784: 15 10 00 28 sethi %hi(0x4000a000), %o2 40007788: 40 00 09 d3 call 40009ed4 <_Thread_queue_Enqueue_with_handler> 4000778c: 94 12 a3 6c or %o2, 0x36c, %o2 ! 4000a36c <_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 ) 40007790: 05 10 00 67 sethi %hi(0x40019c00), %g2 40007794: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40007798: 82 00 7f ff add %g1, -1, %g1 4000779c: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 400077a0: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 400077a4: 80 a0 60 00 cmp %g1, 0 400077a8: 12 80 00 04 bne 400077b8 <_CORE_mutex_Seize_interrupt_blocking+0x80> 400077ac: 01 00 00 00 nop _Thread_Dispatch(); 400077b0: 40 00 08 61 call 40009934 <_Thread_Dispatch> 400077b4: 81 e8 00 00 restore 400077b8: 81 c7 e0 08 ret <== NOT EXECUTED 400077bc: 81 e8 00 00 restore <== NOT EXECUTED 400077c0 <_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 ) { 400077c0: 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 ) { 400077c4: c2 06 20 44 ld [ %i0 + 0x44 ], %g1 400077c8: 80 a0 60 00 cmp %g1, 0 400077cc: 02 80 00 07 be 400077e8 <_CORE_mutex_Surrender+0x28> 400077d0: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 if ( !_Thread_Is_executing( holder ) ) 400077d4: 03 10 00 67 sethi %hi(0x40019c00), %g1 400077d8: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 40019f7c <_Thread_Executing> 400077dc: 80 a2 00 01 cmp %o0, %g1 400077e0: 12 80 00 51 bne 40007924 <_CORE_mutex_Surrender+0x164> 400077e4: 84 10 20 03 mov 3, %g2 return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE; } /* XXX already unlocked -- not right status */ if ( !the_mutex->nest_count ) 400077e8: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 400077ec: 80 a0 60 00 cmp %g1, 0 400077f0: 02 80 00 4c be 40007920 <_CORE_mutex_Surrender+0x160> 400077f4: 82 00 7f ff add %g1, -1, %g1 return CORE_MUTEX_STATUS_SUCCESSFUL; the_mutex->nest_count--; if ( the_mutex->nest_count != 0 ) { 400077f8: 80 a0 60 00 cmp %g1, 0 400077fc: 02 80 00 09 be 40007820 <_CORE_mutex_Surrender+0x60> 40007800: c2 26 20 54 st %g1, [ %i0 + 0x54 ] switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40007804: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 40007808: 80 a0 60 00 cmp %g1, 0 4000780c: 02 80 00 46 be 40007924 <_CORE_mutex_Surrender+0x164> 40007810: 84 10 20 00 clr %g2 40007814: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40007818: 02 80 00 43 be 40007924 <_CORE_mutex_Surrender+0x164> <== NOT EXECUTED 4000781c: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 40007820: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 /* * Formally release the mutex before possibly transferring it to a * blocked thread. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40007824: 80 a0 60 02 cmp %g1, 2 40007828: 22 80 00 06 be,a 40007840 <_CORE_mutex_Surrender+0x80> 4000782c: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 40007830: 80 a0 60 03 cmp %g1, 3 40007834: 32 80 00 07 bne,a 40007850 <_CORE_mutex_Surrender+0x90> 40007838: c0 26 20 5c clr [ %i0 + 0x5c ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) holder->resource_count--; 4000783c: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED 40007840: 82 00 7f ff add %g1, -1, %g1 40007844: c2 22 20 1c st %g1, [ %o0 + 0x1c ] 40007848: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 the_mutex->holder = NULL; 4000784c: c0 26 20 5c clr [ %i0 + 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 ) || 40007850: 80 a0 60 02 cmp %g1, 2 40007854: 02 80 00 05 be 40007868 <_CORE_mutex_Surrender+0xa8> 40007858: c0 26 20 60 clr [ %i0 + 0x60 ] 4000785c: 80 a0 60 03 cmp %g1, 3 40007860: 12 80 00 0d bne 40007894 <_CORE_mutex_Surrender+0xd4> 40007864: 01 00 00 00 nop _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { if ( holder->resource_count == 0 && 40007868: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 4000786c: 80 a0 60 00 cmp %g1, 0 40007870: 12 80 00 09 bne 40007894 <_CORE_mutex_Surrender+0xd4> 40007874: 01 00 00 00 nop 40007878: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 4000787c: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40007880: 80 a2 40 01 cmp %o1, %g1 40007884: 02 80 00 04 be 40007894 <_CORE_mutex_Surrender+0xd4> 40007888: 01 00 00 00 nop holder->real_priority != holder->current_priority ) { _Thread_Change_priority( holder, holder->real_priority, TRUE ); 4000788c: 40 00 06 fe call 40009484 <_Thread_Change_priority> 40007890: 94 10 20 01 mov 1, %o2 ! 1 /* * 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 ) ) ) { 40007894: 40 00 09 22 call 40009d1c <_Thread_queue_Dequeue> 40007898: 90 10 00 18 mov %i0, %o0 4000789c: 86 92 20 00 orcc %o0, 0, %g3 400078a0: 02 80 00 1f be 4000791c <_CORE_mutex_Surrender+0x15c> 400078a4: 82 10 20 01 mov 1, %g1 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 400078a8: c2 00 e0 08 ld [ %g3 + 8 ], %g1 the_mutex->nest_count = 1; switch ( the_mutex->Attributes.discipline ) { 400078ac: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 400078b0: c2 26 20 60 st %g1, [ %i0 + 0x60 ] } else #endif { the_mutex->holder = the_thread; 400078b4: c6 26 20 5c st %g3, [ %i0 + 0x5c ] the_mutex->holder_id = the_thread->Object.id; the_mutex->nest_count = 1; 400078b8: 82 10 20 01 mov 1, %g1 switch ( the_mutex->Attributes.discipline ) { 400078bc: 80 a0 a0 02 cmp %g2, 2 400078c0: 02 80 00 07 be 400078dc <_CORE_mutex_Surrender+0x11c> 400078c4: c2 26 20 54 st %g1, [ %i0 + 0x54 ] 400078c8: 80 a0 a0 03 cmp %g2, 3 400078cc: 12 80 00 16 bne 40007924 <_CORE_mutex_Surrender+0x164> 400078d0: 84 10 20 00 clr %g2 break; case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_thread->resource_count++; break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: the_thread->resource_count++; 400078d4: 10 80 00 07 b 400078f0 <_CORE_mutex_Surrender+0x130> <== NOT EXECUTED 400078d8: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 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++; 400078dc: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 400078e0: 84 10 20 00 clr %g2 400078e4: 82 00 60 01 inc %g1 400078e8: 10 80 00 0f b 40007924 <_CORE_mutex_Surrender+0x164> 400078ec: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: the_thread->resource_count++; if (the_mutex->Attributes.priority_ceiling < 400078f0: 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++; 400078f4: 82 00 60 01 inc %g1 <== NOT EXECUTED 400078f8: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED if (the_mutex->Attributes.priority_ceiling < 400078fc: d2 06 20 4c ld [ %i0 + 0x4c ], %o1 <== NOT EXECUTED 40007900: 80 a2 40 02 cmp %o1, %g2 <== NOT EXECUTED 40007904: 3a 80 00 08 bcc,a 40007924 <_CORE_mutex_Surrender+0x164> <== NOT EXECUTED 40007908: 84 10 20 00 clr %g2 <== NOT EXECUTED the_thread->current_priority){ _Thread_Change_priority( 4000790c: 40 00 06 de call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 40007910: 94 10 20 00 clr %o2 <== NOT EXECUTED } break; } } } else the_mutex->lock = CORE_MUTEX_UNLOCKED; 40007914: 10 80 00 04 b 40007924 <_CORE_mutex_Surrender+0x164> <== NOT EXECUTED 40007918: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000791c: c2 26 20 50 st %g1, [ %i0 + 0x50 ] 40007920: 84 10 20 00 clr %g2 return CORE_MUTEX_STATUS_SUCCESSFUL; } 40007924: 81 c7 e0 08 ret 40007928: 91 e8 00 02 restore %g0, %g2, %o0 4000cf98 <_Debug_Is_enabled>: */ boolean _Debug_Is_enabled( rtems_debug_control level ) { 4000cf98: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000cf9c: c2 00 63 80 ld [ %g1 + 0x380 ], %g1 ! 40019f80 <_Debug_Level> <== NOT EXECUTED 4000cfa0: 90 0a 00 01 and %o0, %g1, %o0 <== NOT EXECUTED return (_Debug_Level & level) ? TRUE : FALSE; } 4000cfa4: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000cfa8: 81 c3 e0 08 retl <== NOT EXECUTED 4000cfac: 90 40 20 00 addx %g0, 0, %o0 <== NOT EXECUTED 40005f00 <_Event_Seize>: rtems_event_set event_in, rtems_option option_set, rtems_interval ticks, rtems_event_set *event_out ) { 40005f00: 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; 40005f04: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005f08: e0 00 63 7c ld [ %g1 + 0x37c ], %l0 ! 40019f7c <_Thread_Executing> executing->Wait.return_code = RTEMS_SUCCESSFUL; 40005f0c: c0 24 20 34 clr [ %l0 + 0x34 ] api = executing->API_Extensions[ THREAD_API_RTEMS ]; _ISR_Disable( level ); 40005f10: 7f ff ef e8 call 40001eb0 40005f14: e4 04 21 6c ld [ %l0 + 0x16c ], %l2 40005f18: 84 10 00 08 mov %o0, %g2 pending_events = api->pending_events; 40005f1c: c2 04 a0 40 ld [ %l2 + 0x40 ], %g1 seized_events = _Event_sets_Get( pending_events, event_in ); if ( !_Event_sets_Is_empty( seized_events ) && 40005f20: a2 8e 00 01 andcc %i0, %g1, %l1 40005f24: 02 80 00 0e be 40005f5c <_Event_Seize+0x5c> 40005f28: 80 8e 60 01 btst 1, %i1 40005f2c: 80 a4 40 18 cmp %l1, %i0 40005f30: 02 80 00 04 be 40005f40 <_Event_Seize+0x40> 40005f34: 80 8e 60 02 btst 2, %i1 40005f38: 02 80 00 09 be 40005f5c <_Event_Seize+0x5c> 40005f3c: 80 8e 60 01 btst 1, %i1 (seized_events == event_in || _Options_Is_any( option_set )) ) { api->pending_events = 40005f40: 82 28 40 11 andn %g1, %l1, %g1 40005f44: c2 24 a0 40 st %g1, [ %l2 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); _ISR_Enable( level ); 40005f48: 7f ff ef de call 40001ec0 40005f4c: 01 00 00 00 nop 40005f50: e2 26 c0 00 st %l1, [ %i3 ] 40005f54: 81 c7 e0 08 ret 40005f58: 81 e8 00 00 restore *event_out = seized_events; return; } if ( _Options_Is_no_wait( option_set ) ) { 40005f5c: 22 80 00 09 be,a 40005f80 <_Event_Seize+0x80> 40005f60: 23 10 00 68 sethi %hi(0x4001a000), %l1 _ISR_Enable( level ); 40005f64: 7f ff ef d7 call 40001ec0 40005f68: 90 10 00 02 mov %g2, %o0 executing->Wait.return_code = RTEMS_UNSATISFIED; 40005f6c: 82 10 20 0d mov 0xd, %g1 40005f70: c2 24 20 34 st %g1, [ %l0 + 0x34 ] *event_out = seized_events; 40005f74: e2 26 c0 00 st %l1, [ %i3 ] 40005f78: 81 c7 e0 08 ret 40005f7c: 81 e8 00 00 restore return; } _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 40005f80: 82 10 20 01 mov 1, %g1 executing->Wait.option = (uint32_t ) option_set; 40005f84: f2 24 20 30 st %i1, [ %l0 + 0x30 ] executing->Wait.count = (uint32_t ) event_in; 40005f88: f0 24 20 24 st %i0, [ %l0 + 0x24 ] executing->Wait.return_argument = event_out; 40005f8c: 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; 40005f90: c2 24 61 b4 st %g1, [ %l1 + 0x1b4 ] executing->Wait.option = (uint32_t ) option_set; executing->Wait.count = (uint32_t ) event_in; executing->Wait.return_argument = event_out; _ISR_Enable( level ); 40005f94: 7f ff ef cb call 40001ec0 40005f98: 90 10 00 02 mov %g2, %o0 if ( ticks ) { 40005f9c: 80 a6 a0 00 cmp %i2, 0 40005fa0: 02 80 00 0f be 40005fdc <_Event_Seize+0xdc> 40005fa4: 90 10 00 10 mov %l0, %o0 _Watchdog_Initialize( 40005fa8: c2 04 20 08 ld [ %l0 + 8 ], %g1 ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40005fac: 11 10 00 67 sethi %hi(0x40019c00), %o0 void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; 40005fb0: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40005fb4: 03 10 00 18 sethi %hi(0x40006000), %g1 40005fb8: 82 10 62 88 or %g1, 0x288, %g1 ! 40006288 <_Event_Timeout> Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40005fbc: f4 24 20 54 st %i2, [ %l0 + 0x54 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40005fc0: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40005fc4: c0 24 20 6c clr [ %l0 + 0x6c ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40005fc8: c2 24 20 64 st %g1, [ %l0 + 0x64 ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40005fcc: 90 12 23 9c or %o0, 0x39c, %o0 40005fd0: 40 00 13 36 call 4000aca8 <_Watchdog_Insert> 40005fd4: 92 04 20 48 add %l0, 0x48, %o1 NULL ); _Watchdog_Insert_ticks( &executing->Timer, ticks ); } _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 40005fd8: 90 10 00 10 mov %l0, %o0 40005fdc: 40 00 11 3c call 4000a4cc <_Thread_Set_state> 40005fe0: 92 10 21 00 mov 0x100, %o1 _ISR_Disable( level ); 40005fe4: 7f ff ef b3 call 40001eb0 40005fe8: 01 00 00 00 nop 40005fec: b0 10 00 08 mov %o0, %i0 sync_state = _Event_Sync_state; 40005ff0: c4 04 61 b4 ld [ %l1 + 0x1b4 ], %g2 _Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; 40005ff4: c0 24 61 b4 clr [ %l1 + 0x1b4 ] switch ( sync_state ) { 40005ff8: 80 a0 a0 02 cmp %g2, 2 40005ffc: 02 80 00 08 be 4000601c <_Event_Seize+0x11c> 40006000: 80 a0 a0 03 cmp %g2, 3 40006004: 02 80 00 09 be 40006028 <_Event_Seize+0x128> 40006008: 80 a0 a0 01 cmp %g2, 1 4000600c: 12 80 00 15 bne 40006060 <_Event_Seize+0x160> 40006010: 01 00 00 00 nop * enter the synchronization states above. */ return; case EVENT_SYNC_NOTHING_HAPPENED: _ISR_Enable( level ); 40006014: 7f ff ef ab call 40001ec0 40006018: 81 e8 00 00 restore return; case EVENT_SYNC_TIMEOUT: executing->Wait.return_code = RTEMS_TIMEOUT; 4000601c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 40006020: c2 24 20 34 st %g1, [ %l0 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40006024: 30 80 00 0b b,a 40006050 <_Event_Seize+0x150> <== NOT EXECUTED _Thread_Unblock( executing ); return; case EVENT_SYNC_SATISFIED: if ( _Watchdog_Is_active( &executing->Timer ) ) { 40006028: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 4000602c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40006030: 12 80 00 08 bne 40006050 <_Event_Seize+0x150> <== NOT EXECUTED 40006034: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 40006038: c4 24 20 50 st %g2, [ %l0 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &executing->Timer ); _ISR_Enable( level ); 4000603c: 7f ff ef a1 call 40001ec0 <== NOT EXECUTED 40006040: b0 10 00 10 mov %l0, %i0 <== NOT EXECUTED (void) _Watchdog_Remove( &executing->Timer ); 40006044: 40 00 13 71 call 4000ae08 <_Watchdog_Remove> <== NOT EXECUTED 40006048: 90 04 20 48 add %l0, 0x48, %o0 <== NOT EXECUTED 4000604c: 30 80 00 03 b,a 40006058 <_Event_Seize+0x158> <== NOT EXECUTED } else _ISR_Enable( level ); 40006050: 7f ff ef 9c call 40001ec0 <== NOT EXECUTED 40006054: b0 10 00 10 mov %l0, %i0 <== NOT EXECUTED _Thread_Unblock( executing ); 40006058: 7f ff ff a4 call 40005ee8 <_Thread_Unblock> <== NOT EXECUTED 4000605c: 81 e8 00 00 restore <== NOT EXECUTED 40006060: 81 c7 e0 08 ret <== NOT EXECUTED 40006064: 81 e8 00 00 restore <== NOT EXECUTED 40006180 <_Event_Surrender>: */ void _Event_Surrender( Thread_Control *the_thread ) { 40006180: 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 ]; 40006184: e2 06 21 6c ld [ %i0 + 0x16c ], %l1 option_set = (rtems_option) the_thread->Wait.option; 40006188: e6 06 20 30 ld [ %i0 + 0x30 ], %l3 _ISR_Disable( level ); 4000618c: 7f ff ef 49 call 40001eb0 40006190: a0 10 00 18 mov %i0, %l0 40006194: a4 10 00 08 mov %o0, %l2 pending_events = api->pending_events; 40006198: c8 04 60 40 ld [ %l1 + 0x40 ], %g4 event_condition = (rtems_event_set) the_thread->Wait.count; 4000619c: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { 400061a0: 86 88 80 04 andcc %g2, %g4, %g3 400061a4: 02 80 00 36 be 4000627c <_Event_Surrender+0xfc> 400061a8: 01 00 00 00 nop if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { 400061ac: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 400061b0: 80 88 61 00 btst 0x100, %g1 400061b4: 02 80 00 1e be 4000622c <_Event_Surrender+0xac> 400061b8: 1b 10 00 68 sethi %hi(0x4001a000), %o5 if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { 400061bc: 80 a0 c0 02 cmp %g3, %g2 400061c0: 02 80 00 04 be 400061d0 <_Event_Surrender+0x50> 400061c4: 80 8c e0 02 btst 2, %l3 400061c8: 02 80 00 19 be 4000622c <_Event_Surrender+0xac> 400061cc: 01 00 00 00 nop api->pending_events = 400061d0: 82 29 00 03 andn %g4, %g3, %g1 400061d4: c2 24 60 40 st %g1, [ %l1 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 400061d8: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 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 = _Event_sets_Clear( pending_events, seized_events ); the_thread->Wait.count = 0; 400061dc: c0 24 20 24 clr [ %l0 + 0x24 ] *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 400061e0: c6 20 40 00 st %g3, [ %g1 ] _ISR_Flash( level ); 400061e4: 7f ff ef 37 call 40001ec0 400061e8: 01 00 00 00 nop 400061ec: 7f ff ef 31 call 40001eb0 400061f0: 01 00 00 00 nop if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 400061f4: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 400061f8: 80 a0 60 02 cmp %g1, 2 400061fc: 02 80 00 05 be 40006210 <_Event_Surrender+0x90> 40006200: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 40006204: 7f ff ef 2f call 40001ec0 40006208: 90 10 00 12 mov %l2, %o0 4000620c: 30 80 00 06 b,a 40006224 <_Event_Surrender+0xa4> 40006210: c2 24 20 50 st %g1, [ %l0 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 40006214: 7f ff ef 2b call 40001ec0 40006218: 90 10 00 12 mov %l2, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 4000621c: 40 00 12 fb call 4000ae08 <_Watchdog_Remove> 40006220: 90 04 20 48 add %l0, 0x48, %o0 _Thread_Unblock( the_thread ); 40006224: 7f ff ff d1 call 40006168 <_Thread_Unblock> 40006228: 81 e8 00 00 restore } return; } } switch ( _Event_Sync_state ) { 4000622c: c2 03 61 b4 ld [ %o5 + 0x1b4 ], %g1 <== NOT EXECUTED 40006230: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40006234: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40006238: 18 80 00 11 bgu 4000627c <_Event_Surrender+0xfc> <== NOT EXECUTED 4000623c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED case EVENT_SYNC_SATISFIED: break; case EVENT_SYNC_NOTHING_HAPPENED: case EVENT_SYNC_TIMEOUT: if ( !_Thread_Is_executing( the_thread ) ) 40006240: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED 40006244: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40006248: 12 80 00 0d bne 4000627c <_Event_Surrender+0xfc> <== NOT EXECUTED 4000624c: 80 a0 c0 02 cmp %g3, %g2 <== NOT EXECUTED break; if ( seized_events == event_condition || _Options_Is_any(option_set) ) { 40006250: 02 80 00 04 be 40006260 <_Event_Surrender+0xe0> <== NOT EXECUTED 40006254: 80 8c e0 02 btst 2, %l3 <== NOT EXECUTED 40006258: 02 80 00 09 be 4000627c <_Event_Surrender+0xfc> <== NOT EXECUTED 4000625c: 01 00 00 00 nop <== NOT EXECUTED api->pending_events = 40006260: 82 29 00 03 andn %g4, %g3, %g1 <== NOT EXECUTED 40006264: c2 24 60 40 st %g1, [ %l1 + 0x40 ] <== NOT EXECUTED _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 40006268: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED break; 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; 4000626c: c0 24 20 24 clr [ %l0 + 0x24 ] <== NOT EXECUTED *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 40006270: c6 20 40 00 st %g3, [ %g1 ] <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_SATISFIED; 40006274: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 40006278: c2 23 61 b4 st %g1, [ %o5 + 0x1b4 ] <== NOT EXECUTED } break; } } _ISR_Enable( level ); 4000627c: 7f ff ef 11 call 40001ec0 40006280: 91 e8 00 12 restore %g0, %l2, %o0 40006284: 01 00 00 00 nop 40006288 <_Event_Timeout>: void _Event_Timeout( Objects_Id id, void *ignored ) { 40006288: 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 ) ) { 4000628c: 92 96 20 00 orcc %i0, 0, %o1 40006290: 12 80 00 0a bne 400062b8 <_Event_Timeout+0x30> 40006294: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006298: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000629c: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400062a0: 84 00 a0 01 inc %g2 <== NOT EXECUTED 400062a4: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] <== 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; 400062a8: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400062ac: f0 00 63 7c ld [ %g1 + 0x37c ], %i0 ! 40019f7c <_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; 400062b0: 10 80 00 18 b 40006310 <_Event_Timeout+0x88> <== NOT EXECUTED 400062b4: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED 400062b8: 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 ) { 400062bc: 80 a0 a0 04 cmp %g2, 4 400062c0: 18 80 00 0e bgu 400062f8 <_Event_Timeout+0x70> 400062c4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400062c8: 83 32 60 1b srl %o1, 0x1b, %g1 400062cc: 80 a0 60 01 cmp %g1, 1 400062d0: 12 80 00 0a bne 400062f8 <_Event_Timeout+0x70> 400062d4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400062d8: 83 28 a0 02 sll %g2, 2, %g1 400062dc: 05 10 00 67 sethi %hi(0x40019c00), %g2 400062e0: 84 10 a2 00 or %g2, 0x200, %g2 ! 40019e00 <_Objects_Information_table> 400062e4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 400062e8: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 400062ec: 80 a2 20 00 cmp %o0, 0 400062f0: 12 80 00 05 bne 40006304 <_Event_Timeout+0x7c> 400062f4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400062f8: b0 10 20 00 clr %i0 <== NOT EXECUTED 400062fc: 10 80 00 05 b 40006310 <_Event_Timeout+0x88> <== NOT EXECUTED 40006300: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40006304: 40 00 08 98 call 40008564 <_Objects_Get> 40006308: 94 07 bf f4 add %fp, -12, %o2 4000630c: b0 10 00 08 mov %o0, %i0 Thread_Control *the_thread; Objects_Locations location; ISR_Level level; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40006310: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006314: 80 a0 60 00 cmp %g1, 0 40006318: 12 80 00 27 bne 400063b4 <_Event_Timeout+0x12c> 4000631c: 01 00 00 00 nop * 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 ); 40006320: 7f ff ee e4 call 40001eb0 40006324: 01 00 00 00 nop 40006328: 86 10 00 08 mov %o0, %g3 if ( the_thread->Wait.count ) { /* verify thread is waiting */ 4000632c: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 40006330: 80 a0 60 00 cmp %g1, 0 40006334: 02 80 00 1a be 4000639c <_Event_Timeout+0x114> 40006338: 05 10 00 68 sethi %hi(0x4001a000), %g2 the_thread->Wait.count = 0; if ( _Event_Sync_state != EVENT_SYNC_SYNCHRONIZED && 4000633c: c2 00 a1 b4 ld [ %g2 + 0x1b4 ], %g1 ! 4001a1b4 <_Event_Sync_state> 40006340: 80 a0 60 00 cmp %g1, 0 40006344: 02 80 00 0d be 40006378 <_Event_Timeout+0xf0> 40006348: c0 26 20 24 clr [ %i0 + 0x24 ] 4000634c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40006350: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED 40006354: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 40006358: 12 80 00 09 bne 4000637c <_Event_Timeout+0xf4> <== NOT EXECUTED 4000635c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) { 40006360: c2 00 a1 b4 ld [ %g2 + 0x1b4 ], %g1 <== NOT EXECUTED 40006364: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40006368: 02 80 00 03 be 40006374 <_Event_Timeout+0xec> <== NOT EXECUTED 4000636c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_TIMEOUT; 40006370: c2 20 a1 b4 st %g1, [ %g2 + 0x1b4 ] <== NOT EXECUTED } _ISR_Enable( level ); 40006374: 30 80 00 0a b,a 4000639c <_Event_Timeout+0x114> <== NOT EXECUTED } else { the_thread->Wait.return_code = RTEMS_TIMEOUT; 40006378: 82 10 20 06 mov 6, %g1 4000637c: c2 26 20 34 st %g1, [ %i0 + 0x34 ] _ISR_Enable( level ); 40006380: 7f ff ee d0 call 40001ec0 40006384: 90 10 00 03 mov %g3, %o0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 40006388: 90 10 00 18 mov %i0, %o0 4000638c: 13 04 00 ff sethi %hi(0x1003fc00), %o1 40006390: 40 00 0c af call 4000964c <_Thread_Clear_state> 40006394: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 40006398: 30 80 00 03 b,a 400063a4 <_Event_Timeout+0x11c> _Thread_Unblock( the_thread ); } } else { _ISR_Enable( level ); 4000639c: 7f ff ee c9 call 40001ec0 <== NOT EXECUTED 400063a0: 01 00 00 00 nop <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 400063a4: 05 10 00 67 sethi %hi(0x40019c00), %g2 400063a8: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 400063ac: 82 00 7f ff add %g1, -1, %g1 400063b0: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 400063b4: 81 c7 e0 08 ret 400063b8: 81 e8 00 00 restore 40007d88 <_Heap_Calc_block_size>: */ size_t _Heap_Calc_block_size( size_t size, uint32_t page_size, uint32_t min_size) { 40007d88: 9d e3 bf 90 save %sp, -112, %sp uint32_t block_size = size + HEAP_BLOCK_USED_OVERHEAD; 40007d8c: 82 06 20 04 add %i0, 4, %g1 _Heap_Align_up(&block_size, page_size); 40007d90: 92 10 00 19 mov %i1, %o1 size_t _Heap_Calc_block_size( size_t size, uint32_t page_size, uint32_t min_size) { uint32_t block_size = size + HEAP_BLOCK_USED_OVERHEAD; 40007d94: c2 27 bf f4 st %g1, [ %fp + -12 ] _Heap_Align_up(&block_size, page_size); 40007d98: 7f ff ff f0 call 40007d58 <_Heap_Align_up> 40007d9c: 90 07 bf f4 add %fp, -12, %o0 if (block_size < min_size) block_size = min_size; 40007da0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007da4: 80 a0 40 1a cmp %g1, %i2 40007da8: 1a 80 00 04 bcc 40007db8 <_Heap_Calc_block_size+0x30> 40007dac: a0 10 00 18 mov %i0, %l0 40007db0: f4 27 bf f4 st %i2, [ %fp + -12 ] <== NOT EXECUTED /* 'block_size' becomes <= 'size' if and only if overflow occured. */ return (block_size > size) ? block_size : 0; 40007db4: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40007db8: 80 a0 40 10 cmp %g1, %l0 40007dbc: 08 80 00 03 bleu 40007dc8 <_Heap_Calc_block_size+0x40> 40007dc0: b0 10 20 00 clr %i0 40007dc4: b0 10 00 01 mov %g1, %i0 } 40007dc8: 81 c7 e0 08 ret 40007dcc: 81 e8 00 00 restore 40019664 <_Heap_Get_free_information>: */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First ( Heap_Control *the_heap ) { return _Heap_Head(the_heap)->next; 40019664: 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; 40019668: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED info->largest = 0; 4001966c: c0 22 60 04 clr [ %o1 + 4 ] <== NOT EXECUTED info->total = 0; 40019670: 10 80 00 0e b 400196a8 <_Heap_Get_free_information+0x44> <== NOT EXECUTED 40019674: c0 22 60 08 clr [ %o1 + 8 ] <== 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++; 40019678: c2 02 40 00 ld [ %o1 ], %g1 <== NOT EXECUTED info->total += the_size; 4001967c: c4 02 60 08 ld [ %o1 + 8 ], %g2 <== NOT EXECUTED if ( info->largest < the_size ) 40019680: c8 02 60 04 ld [ %o1 + 4 ], %g4 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE uint32_t _Heap_Block_size ( Heap_Block *the_block ) { return (the_block->size & ~HEAP_PREV_USED); 40019684: 86 08 ff fe and %g3, -2, %g3 <== 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++; 40019688: 82 00 60 01 inc %g1 <== NOT EXECUTED info->total += the_size; 4001968c: 84 00 80 03 add %g2, %g3, %g2 <== 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++; 40019690: c2 22 40 00 st %g1, [ %o1 ] <== NOT EXECUTED info->total += the_size; if ( info->largest < the_size ) 40019694: 80 a1 00 03 cmp %g4, %g3 <== NOT EXECUTED 40019698: 1a 80 00 03 bcc 400196a4 <_Heap_Get_free_information+0x40> <== NOT EXECUTED 4001969c: c4 22 60 08 st %g2, [ %o1 + 8 ] <== NOT EXECUTED info->largest = the_size; 400196a0: c6 22 60 04 st %g3, [ %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) 400196a4: 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; 400196a8: 80 a3 40 08 cmp %o5, %o0 <== NOT EXECUTED 400196ac: 32 bf ff f3 bne,a 40019678 <_Heap_Get_free_information+0x14> <== NOT EXECUTED 400196b0: c6 03 60 04 ld [ %o5 + 4 ], %g3 <== NOT EXECUTED info->number++; info->total += the_size; if ( info->largest < the_size ) info->largest = the_size; } } 400196b4: 81 c3 e0 08 retl <== NOT EXECUTED 400196b8: 01 00 00 00 nop 40007e78 <_Heap_Initialize>: Heap_Control *the_heap, void *starting_address, size_t size, uint32_t page_size ) { 40007e78: 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) 40007e7c: 80 a6 e0 00 cmp %i3, 0 40007e80: 12 80 00 05 bne 40007e94 <_Heap_Initialize+0x1c> 40007e84: f6 27 a0 50 st %i3, [ %fp + 0x50 ] page_size = CPU_ALIGNMENT; 40007e88: 82 10 20 08 mov 8, %g1 <== NOT EXECUTED 40007e8c: 10 80 00 05 b 40007ea0 <_Heap_Initialize+0x28> <== NOT EXECUTED 40007e90: c2 27 a0 50 st %g1, [ %fp + 0x50 ] <== NOT EXECUTED else _Heap_Align_up( &page_size, CPU_ALIGNMENT ); 40007e94: 90 07 a0 50 add %fp, 0x50, %o0 40007e98: 7f ff ff b0 call 40007d58 <_Heap_Align_up> 40007e9c: 92 10 20 08 mov 8, %o1 /* 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; _Heap_Align_up_uptr ( &aligned_start, page_size ); 40007ea0: e0 07 a0 50 ld [ %fp + 0x50 ], %l0 /* 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; 40007ea4: a4 06 60 08 add %i1, 8, %l2 uint32_t alignment ) { _H_uptr_t v = *value; uint32_t a = alignment; _H_uptr_t r = v % a; 40007ea8: 92 10 00 10 mov %l0, %o1 40007eac: 40 00 36 34 call 4001577c <.urem> 40007eb0: 90 10 00 12 mov %l2, %o0 *value = r ? v - r + a : v; 40007eb4: 80 a2 20 00 cmp %o0, 0 40007eb8: 02 80 00 05 be 40007ecc <_Heap_Initialize+0x54> 40007ebc: 82 10 20 10 mov 0x10, %g1 40007ec0: 82 04 80 10 add %l2, %l0, %g1 40007ec4: a4 20 40 08 sub %g1, %o0, %l2 _Heap_Align_up_uptr ( &aligned_start, page_size ); aligned_start -= HEAP_BLOCK_USER_OFFSET; /* Calculate 'min_block_size'. It's HEAP_MIN_BLOCK_SIZE aligned up to the nearest multiple of 'page_size'. */ the_heap->min_block_size = HEAP_MIN_BLOCK_SIZE; 40007ec8: 82 10 20 10 mov 0x10, %g1 _Heap_Align_up ( &the_heap->min_block_size, page_size ); 40007ecc: 92 10 00 10 mov %l0, %o1 _Heap_Align_up_uptr ( &aligned_start, page_size ); aligned_start -= HEAP_BLOCK_USER_OFFSET; /* Calculate 'min_block_size'. It's HEAP_MIN_BLOCK_SIZE aligned up to the nearest multiple of 'page_size'. */ the_heap->min_block_size = HEAP_MIN_BLOCK_SIZE; 40007ed0: c2 26 20 14 st %g1, [ %i0 + 0x14 ] _Heap_Align_up ( &the_heap->min_block_size, page_size ); 40007ed4: 7f ff ff a1 call 40007d58 <_Heap_Align_up> 40007ed8: 90 06 20 14 add %i0, 0x14, %o0 (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; _Heap_Align_up_uptr ( &aligned_start, page_size ); aligned_start -= HEAP_BLOCK_USER_OFFSET; 40007edc: b6 04 bf f8 add %l2, -8, %i3 /* 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); 40007ee0: 82 26 c0 19 sub %i3, %i1, %g1 40007ee4: 82 00 60 08 add %g1, 8, %g1 if ( size < overhead ) 40007ee8: 80 a6 80 01 cmp %i2, %g1 40007eec: 0a 80 00 2b bcs 40007f98 <_Heap_Initialize+0x120> 40007ef0: e2 07 a0 50 ld [ %fp + 0x50 ], %l1 return 0; /* Too small area for the heap */ the_size = size - overhead; 40007ef4: a0 26 80 01 sub %i2, %g1, %l0 uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 40007ef8: 92 10 00 11 mov %l1, %o1 40007efc: 40 00 36 20 call 4001577c <.urem> 40007f00: 90 10 00 10 mov %l0, %o0 _Heap_Align_down ( &the_size, page_size ); if ( the_size == 0 ) 40007f04: a0 a4 00 08 subcc %l0, %o0, %l0 40007f08: 02 80 00 24 be 40007f98 <_Heap_Initialize+0x120> 40007f0c: 07 10 00 67 sethi %hi(0x40019c00), %g3 return 0; /* Too small area for the heap */ the_heap->page_size = page_size; 40007f10: e2 26 20 10 st %l1, [ %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; 40007f14: e2 24 bf f8 st %l1, [ %l2 + -8 ] the_block->size = the_size | HEAP_PREV_USED; 40007f18: 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++; 40007f1c: c4 00 e0 7c ld [ %g3 + 0x7c ], %g2 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; 40007f20: c2 26 e0 04 st %g1, [ %i3 + 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 */ 40007f24: e0 26 c0 10 st %l0, [ %i3 + %l0 ] RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 40007f28: 88 06 c0 10 add %i3, %l0, %g4 the_block->size = page_size; 40007f2c: e2 21 20 04 st %l1, [ %g4 + 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 ); 40007f30: f0 26 e0 08 st %i0, [ %i3 + 8 ] the_block->prev = _Heap_Head( the_heap ); 40007f34: f0 26 e0 0c st %i0, [ %i3 + 0xc ] stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40007f38: c4 26 20 28 st %g2, [ %i0 + 0x28 ] the_block->size = page_size; stats->size = size; stats->free_size = the_size; stats->min_free_size = the_size; stats->free_blocks = 1; 40007f3c: 82 10 20 01 mov 1, %g1 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; 40007f40: f4 26 20 2c st %i2, [ %i0 + 0x2c ] stats->free_size = the_size; stats->min_free_size = the_size; stats->free_blocks = 1; stats->max_free_blocks = 1; 40007f44: c2 26 20 3c st %g1, [ %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; 40007f48: c2 26 20 38 st %g1, [ %i0 + 0x38 ] 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; stats->free_size = the_size; 40007f4c: e0 26 20 30 st %l0, [ %i0 + 0x30 ] stats->min_free_size = the_size; 40007f50: e0 26 20 34 st %l0, [ %i0 + 0x34 ] stats->free_blocks = 1; stats->max_free_blocks = 1; stats->used_blocks = 0; 40007f54: c0 26 20 40 clr [ %i0 + 0x40 ] stats->max_search = 0; 40007f58: c0 26 20 44 clr [ %i0 + 0x44 ] stats->allocs = 0; 40007f5c: c0 26 20 48 clr [ %i0 + 0x48 ] stats->searches = 0; 40007f60: c0 26 20 4c clr [ %i0 + 0x4c ] stats->frees = 0; 40007f64: c0 26 20 50 clr [ %i0 + 0x50 ] stats->resizes = 0; 40007f68: c0 26 20 54 clr [ %i0 + 0x54 ] 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; 40007f6c: 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++; 40007f70: 84 00 a0 01 inc %g2 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; 40007f74: 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; 40007f78: 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; 40007f7c: f6 26 20 08 st %i3, [ %i0 + 8 ] _Heap_Tail(the_heap)->prev = the_block; 40007f80: f6 26 20 0c st %i3, [ %i0 + 0xc ] the_heap->start = the_block; 40007f84: f6 26 20 20 st %i3, [ %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 */ 40007f88: c8 26 20 24 st %g4, [ %i0 + 0x24 ] stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40007f8c: c4 20 e0 7c st %g2, [ %g3 + 0x7c ] return ( the_size - HEAP_BLOCK_USED_OVERHEAD ); 40007f90: 81 c7 e0 08 ret 40007f94: 91 ec 3f fc restore %l0, -4, %o0 } 40007f98: 81 c7 e0 08 ret 40007f9c: 91 e8 20 00 restore %g0, 0, %o0 4000d198 <_Heap_Resize_block>: void *starting_address, size_t size, uint32_t *old_mem_size, uint32_t *avail_mem_size ) { 4000d198: 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; 4000d19c: 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; 4000d1a0: ea 06 20 14 ld [ %i0 + 0x14 ], %l5 <== NOT EXECUTED uint32_t const page_size = the_heap->page_size; *old_mem_size = 0; 4000d1a4: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED *avail_mem_size = 0; 4000d1a8: 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); 4000d1ac: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000d1b0: 40 00 21 73 call 4001577c <.urem> <== NOT EXECUTED 4000d1b4: 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 ); 4000d1b8: 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); 4000d1bc: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 4000d1c0: 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)) 4000d1c4: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000d1c8: 0a 80 00 78 bcs 4000d3a8 <_Heap_Resize_block+0x210> <== NOT EXECUTED 4000d1cc: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 <== NOT EXECUTED 4000d1d0: 80 a4 80 02 cmp %l2, %g2 <== NOT EXECUTED 4000d1d4: 38 80 00 78 bgu,a 4000d3b4 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 4000d1d8: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED return HEAP_RESIZE_FATAL_ERROR; prev_used_flag = the_block->size & HEAP_PREV_USED; 4000d1dc: 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); 4000d1e0: ae 08 ff fe and %g3, -2, %l7 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000d1e4: a2 04 80 17 add %l2, %l7, %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) || 4000d1e8: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 4000d1ec: 2a 80 00 72 bcs,a 4000d3b4 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 4000d1f0: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 4000d1f4: 80 a4 40 02 cmp %l1, %g2 <== NOT EXECUTED 4000d1f8: 38 80 00 6f bgu,a 4000d3b4 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 4000d1fc: 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); 4000d200: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED 4000d204: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000d208: 02 80 00 68 be 4000d3a8 <_Heap_Resize_block+0x210> <== NOT EXECUTED 4000d20c: a8 08 7f fe and %g1, -2, %l4 <== 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) || 4000d210: 80 a4 40 02 cmp %l1, %g2 <== NOT EXECUTED 4000d214: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED 4000d218: 02 80 00 04 be 4000d228 <_Heap_Resize_block+0x90> <== NOT EXECUTED 4000d21c: ba 04 40 14 add %l1, %l4, %i5 <== NOT EXECUTED 4000d220: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 4000d224: 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) 4000d228: 82 24 40 19 sub %l1, %i1, %g1 <== NOT EXECUTED 4000d22c: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED + HEAP_BLOCK_HEADER_OFFSET; *old_mem_size = old_user_size; 4000d230: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED if (size > old_user_size) { 4000d234: 80 a6 80 01 cmp %i2, %g1 <== NOT EXECUTED 4000d238: 08 80 00 1f bleu 4000d2b4 <_Heap_Resize_block+0x11c> <== NOT EXECUTED 4000d23c: 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 */ 4000d240: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 4000d244: 12 80 00 5b bne 4000d3b0 <_Heap_Resize_block+0x218> <== NOT EXECUTED 4000d248: 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; 4000d24c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4000d250: 40 00 21 4b call 4001577c <.urem> <== NOT EXECUTED 4000d254: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *value = r ? v - r + a : v; 4000d258: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000d25c: 02 80 00 05 be 4000d270 <_Heap_Resize_block+0xd8> <== NOT EXECUTED 4000d260: 80 a4 00 15 cmp %l0, %l5 <== NOT EXECUTED 4000d264: 82 04 00 13 add %l0, %l3, %g1 <== NOT EXECUTED 4000d268: a0 20 40 08 sub %g1, %o0, %l0 <== NOT EXECUTED 4000d26c: 80 a4 00 15 cmp %l0, %l5 <== NOT EXECUTED 4000d270: 1a 80 00 03 bcc 4000d27c <_Heap_Resize_block+0xe4> <== NOT EXECUTED 4000d274: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000d278: 90 10 00 15 mov %l5, %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) 4000d27c: 80 a2 00 14 cmp %o0, %l4 <== NOT EXECUTED 4000d280: 38 80 00 4d bgu,a 4000d3b4 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 4000d284: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED return HEAP_RESIZE_UNSATISFIED; /* Next block is too small or none. */ add_block_size = 4000d288: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 4000d28c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4000d290: 7f ff ea d0 call 40007dd0 <_Heap_Block_allocate> <== NOT EXECUTED 4000d294: 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; 4000d298: 90 02 00 17 add %o0, %l7, %o0 <== NOT EXECUTED 4000d29c: 90 12 00 1b or %o0, %i3, %o0 <== NOT EXECUTED 4000d2a0: d0 24 a0 04 st %o0, [ %l2 + 4 ] <== NOT EXECUTED --stats->used_blocks; 4000d2a4: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED 4000d2a8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000d2ac: 10 80 00 3a b 4000d394 <_Heap_Resize_block+0x1fc> <== NOT EXECUTED 4000d2b0: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED } } else { /* Calculate how much memory we could free */ uint32_t free_block_size = old_user_size - size; 4000d2b4: a0 20 40 1a sub %g1, %i2, %l0 <== NOT EXECUTED uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 4000d2b8: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4000d2bc: 40 00 21 30 call 4001577c <.urem> <== NOT EXECUTED 4000d2c0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Heap_Align_down(&free_block_size, page_size); if (free_block_size > 0) { 4000d2c4: a0 a4 00 08 subcc %l0, %o0, %l0 <== NOT EXECUTED 4000d2c8: 22 80 00 34 be,a 4000d398 <_Heap_Resize_block+0x200> <== NOT EXECUTED 4000d2cc: 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; 4000d2d0: 84 25 c0 10 sub %l7, %l0, %g2 <== NOT EXECUTED if (new_block_size < min_block_size) { 4000d2d4: 80 a0 80 15 cmp %g2, %l5 <== NOT EXECUTED 4000d2d8: 1a 80 00 08 bcc 4000d2f8 <_Heap_Resize_block+0x160> <== NOT EXECUTED 4000d2dc: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED uint32_t delta = min_block_size - new_block_size; 4000d2e0: 82 25 40 02 sub %l5, %g2, %g1 <== NOT EXECUTED _HAssert(free_block_size >= delta); free_block_size -= delta; if (free_block_size == 0) { 4000d2e4: a0 a4 00 01 subcc %l0, %g1, %l0 <== NOT EXECUTED 4000d2e8: 22 80 00 2c be,a 4000d398 <_Heap_Resize_block+0x200> <== NOT EXECUTED 4000d2ec: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED ++stats->resizes; return HEAP_RESIZE_SUCCESSFUL; } new_block_size += delta; 4000d2f0: 84 00 80 01 add %g2, %g1, %g2 <== 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) { 4000d2f4: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 4000d2f8: 12 80 00 15 bne 4000d34c <_Heap_Resize_block+0x1b4> <== NOT EXECUTED 4000d2fc: 80 a4 00 15 cmp %l0, %l5 <== 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; 4000d300: 82 10 80 1b or %g2, %i3, %g1 <== 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; 4000d304: 86 04 00 14 add %l0, %l4, %g3 <== NOT EXECUTED _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; 4000d308: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED new_next_block->size = new_next_block_size | HEAP_PREV_USED; 4000d30c: 82 10 e0 01 or %g3, 1, %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000d310: 84 04 80 02 add %l2, %g2, %g2 <== NOT EXECUTED next_next_block->prev_size = new_next_block_size; 4000d314: c6 27 40 00 st %g3, [ %i5 ] <== NOT EXECUTED Heap_Block *new_block ) { Heap_Block *block = old_block; Heap_Block *next = block->next; Heap_Block *prev = block->prev; 4000d318: da 04 60 0c ld [ %l1 + 0xc ], %o5 <== NOT EXECUTED Heap_Block *old_block, Heap_Block *new_block ) { Heap_Block *block = old_block; Heap_Block *next = block->next; 4000d31c: c8 04 60 08 ld [ %l1 + 8 ], %g4 <== 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; 4000d320: c2 20 a0 04 st %g1, [ %g2 + 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; 4000d324: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Heap_Block *prev = block->prev; block = new_block; block->next = next; 4000d328: c8 20 a0 08 st %g4, [ %g2 + 8 ] <== NOT EXECUTED 4000d32c: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED block->prev = prev; 4000d330: da 20 a0 0c st %o5, [ %g2 + 0xc ] <== NOT EXECUTED 4000d334: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED *avail_mem_size = new_next_block_size - HEAP_BLOCK_USED_OVERHEAD; 4000d338: 86 00 ff fc add %g3, -4, %g3 <== NOT EXECUTED next->prev = prev->next = block; 4000d33c: c4 21 20 0c st %g2, [ %g4 + 0xc ] <== NOT EXECUTED 4000d340: c4 23 60 08 st %g2, [ %o5 + 8 ] <== NOT EXECUTED 4000d344: 10 80 00 14 b 4000d394 <_Heap_Resize_block+0x1fc> <== NOT EXECUTED 4000d348: c6 27 00 00 st %g3, [ %i4 ] <== NOT EXECUTED } else if (free_block_size >= min_block_size) { 4000d34c: 2a 80 00 13 bcs,a 4000d398 <_Heap_Resize_block+0x200> <== NOT EXECUTED 4000d350: 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; 4000d354: 82 10 80 1b or %g2, %i3, %g1 <== NOT EXECUTED 4000d358: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; 4000d35c: 82 14 20 01 or %l0, 1, %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000d360: 92 04 80 02 add %l2, %g2, %o1 <== NOT EXECUTED 4000d364: c2 22 60 04 st %g1, [ %o1 + 4 ] <== NOT EXECUTED ++stats->used_blocks; /* We have created used block */ 4000d368: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000d36c: 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 */ 4000d370: 82 00 60 01 inc %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000d374: 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 */ 4000d378: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000d37c: c4 26 20 50 st %g2, [ %i0 + 0x50 ] <== NOT EXECUTED _Heap_Free(the_heap, _Heap_User_area(next_block)); 4000d380: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 4000d384: 7f ff ea 03 call 40007b90 <_Heap_Free> <== NOT EXECUTED 4000d388: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED *avail_mem_size = free_block_size - HEAP_BLOCK_USED_OVERHEAD; 4000d38c: 82 04 3f fc add %l0, -4, %g1 <== NOT EXECUTED 4000d390: c2 27 00 00 st %g1, [ %i4 ] <== NOT EXECUTED } } } ++stats->resizes; 4000d394: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED 4000d398: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000d39c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000d3a0: 10 80 00 05 b 4000d3b4 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 4000d3a4: c2 26 20 54 st %g1, [ %i0 + 0x54 ] <== NOT EXECUTED return HEAP_RESIZE_SUCCESSFUL; 4000d3a8: 10 80 00 03 b 4000d3b4 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 4000d3ac: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 4000d3b0: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED } 4000d3b4: 81 c7 e0 08 ret <== NOT EXECUTED 4000d3b8: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED 4000d3bc <_Heap_Size_of_user_area>: boolean _Heap_Size_of_user_area( Heap_Control *the_heap, void *starting_address, size_t *size ) { 4000d3bc: 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( 4000d3c0: e2 06 20 20 ld [ %i0 + 0x20 ], %l1 <== NOT EXECUTED 4000d3c4: 80 a6 40 11 cmp %i1, %l1 <== NOT EXECUTED 4000d3c8: 0a 80 00 1f bcs 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d3cc: e0 06 20 24 ld [ %i0 + 0x24 ], %l0 <== NOT EXECUTED 4000d3d0: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 4000d3d4: 18 80 00 1c bgu 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d3d8: 01 00 00 00 nop <== 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); 4000d3dc: d2 06 20 10 ld [ %i0 + 0x10 ], %o1 <== NOT EXECUTED 4000d3e0: 40 00 20 e7 call 4001577c <.urem> <== NOT EXECUTED 4000d3e4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000d3e8: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 4000d3ec: 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 ) ) 4000d3f0: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 4000d3f4: 0a 80 00 14 bcs 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d3f8: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 4000d3fc: 18 80 00 12 bgu 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d400: 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 ); 4000d404: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4000d408: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 4000d40c: 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 ( 4000d410: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 4000d414: 0a 80 00 0c bcs 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d418: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 4000d41c: 18 80 00 0a bgu 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d420: 01 00 00 00 nop <== NOT EXECUTED 4000d424: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4000d428: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000d42c: 02 80 00 06 be 4000d444 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 4000d430: 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 ) 4000d434: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED 4000d438: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 4000d43c: 81 c7 e0 08 ret <== NOT EXECUTED 4000d440: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED + HEAP_BLOCK_HEADER_OFFSET; return( TRUE ); } 4000d444: 81 c7 e0 08 ret <== NOT EXECUTED 4000d448: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 400073f8 <_IO_Manager_initialization>: void _IO_Manager_initialization( rtems_driver_address_table *driver_table, uint32_t drivers_in_table, uint32_t number_of_drivers ) { 400073f8: 9d e3 bf 98 save %sp, -104, %sp 400073fc: 23 10 00 68 sethi %hi(0x4001a000), %l1 /* * 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 ) 40007400: 80 a6 80 19 cmp %i2, %i1 40007404: 18 80 00 06 bgu 4000741c <_IO_Manager_initialization+0x24> 40007408: 25 10 00 68 sethi %hi(0x4001a000), %l2 * 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; 4000740c: f0 24 62 08 st %i0, [ %l1 + 0x208 ] _IO_Number_of_drivers = number_of_drivers; 40007410: f2 24 a2 04 st %i1, [ %l2 + 0x204 ] 40007414: 81 c7 e0 08 ret 40007418: 81 e8 00 00 restore /* * 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 *) 4000741c: 83 2e a0 03 sll %i2, 3, %g1 <== NOT EXECUTED 40007420: a1 2e a0 05 sll %i2, 5, %l0 <== NOT EXECUTED 40007424: a0 24 00 01 sub %l0, %g1, %l0 <== NOT EXECUTED 40007428: 40 00 0e cb call 4000af54 <_Workspace_Allocate_or_fatal_error> <== NOT EXECUTED 4000742c: 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; memset( 40007430: 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; 40007434: f4 24 a2 04 st %i2, [ %l2 + 0x204 ] <== 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 *) 40007438: d0 24 62 08 st %o0, [ %l1 + 0x208 ] <== NOT EXECUTED _Workspace_Allocate_or_fatal_error( sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); _IO_Number_of_drivers = number_of_drivers; memset( 4000743c: 40 00 1d fd call 4000ec30 <== NOT EXECUTED 40007440: 92 10 20 00 clr %o1 <== NOT EXECUTED _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) _IO_Driver_address_table[index] = driver_table[index]; 40007444: e2 04 62 08 ld [ %l1 + 0x208 ], %l1 <== NOT EXECUTED 40007448: b4 10 20 00 clr %i2 <== NOT EXECUTED 4000744c: 10 80 00 07 b 40007468 <_IO_Manager_initialization+0x70> <== NOT EXECUTED 40007450: a0 10 20 00 clr %l0 <== NOT EXECUTED 40007454: 92 04 00 18 add %l0, %i0, %o1 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007458: b4 06 a0 01 inc %i2 <== NOT EXECUTED 4000745c: a0 04 20 18 add %l0, 0x18, %l0 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40007460: 40 00 1d c7 call 4000eb7c <== NOT EXECUTED 40007464: 94 10 20 18 mov 0x18, %o2 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007468: 80 a6 80 19 cmp %i2, %i1 <== NOT EXECUTED 4000746c: 12 bf ff fa bne 40007454 <_IO_Manager_initialization+0x5c> <== NOT EXECUTED 40007470: 90 04 00 11 add %l0, %l1, %o0 <== NOT EXECUTED 40007474: 81 c7 e0 08 ret <== NOT EXECUTED 40007478: 81 e8 00 00 restore <== NOT EXECUTED 40007fe0 <_ISR_Handler_initialization>: * * Output parameters: NONE */ void _ISR_Handler_initialization( void ) { 40007fe0: 9d e3 bf 98 save %sp, -104, %sp _ISR_Signals_to_thread_executing = FALSE; 40007fe4: 03 10 00 68 sethi %hi(0x4001a000), %g1 40007fe8: c0 20 60 28 clr [ %g1 + 0x28 ] ! 4001a028 <_ISR_Signals_to_thread_executing> _ISR_Nest_level = 0; 40007fec: 03 10 00 67 sethi %hi(0x40019c00), %g1 _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 40007ff0: 90 10 24 00 mov 0x400, %o0 void _ISR_Handler_initialization( void ) { _ISR_Signals_to_thread_executing = FALSE; _ISR_Nest_level = 0; 40007ff4: c0 20 63 64 clr [ %g1 + 0x364 ] _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 40007ff8: 40 00 0b d7 call 4000af54 <_Workspace_Allocate_or_fatal_error> 40007ffc: 01 00 00 00 nop _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 40008000: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008004: a0 10 62 b4 or %g1, 0x2b4, %l0 ! 40019eb4 <_CPU_Table> 40008008: 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( 4000800c: 03 10 00 67 sethi %hi(0x40019c00), %g1 _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 40008010: 80 a0 af ff cmp %g2, 0xfff 40008014: 18 80 00 06 bgu 4000802c <_ISR_Handler_initialization+0x4c> 40008018: d0 20 63 44 st %o0, [ %g1 + 0x344 ] _Internal_error_Occurred( 4000801c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40008020: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40008024: 7f ff ff df call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40008028: 94 10 20 05 mov 5, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 4000802c: 40 00 0b ca call 4000af54 <_Workspace_Allocate_or_fatal_error> 40008030: d0 04 20 18 ld [ %l0 + 0x18 ], %o0 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 40008034: c4 04 20 18 ld [ %l0 + 0x18 ], %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 40008038: 03 10 00 67 sethi %hi(0x40019c00), %g1 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 4000803c: 84 02 00 02 add %o0, %g2, %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 40008040: d0 20 62 b0 st %o0, [ %g1 + 0x2b0 ] _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 40008044: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008048: c4 20 61 fc st %g2, [ %g1 + 0x1fc ] ! 40019dfc <_CPU_Interrupt_stack_high> #if ( CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE ) _CPU_Install_interrupt_stack(); #endif } 4000804c: 81 c7 e0 08 ret 40008050: 81 e8 00 00 restore 4000d45c <_Objects_Compare_name_string>: boolean _Objects_Compare_name_string( void *name_1, void *name_2, uint16_t length ) { 4000d45c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !strncmp( name_1, name_2, length ) ) 4000d460: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000d464: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 4000d468: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000d46c: 40 00 08 ed call 4000f820 <== NOT EXECUTED 4000d470: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED return TRUE; return FALSE; } 4000d474: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000d478: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 4000d47c: 81 c7 e0 08 ret <== NOT EXECUTED 4000d480: 81 e8 00 00 restore <== NOT EXECUTED 40016960 <_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; 40016960: 10 80 00 05 b 40016974 <_Objects_Copy_name_raw+0x14> <== NOT EXECUTED 40016964: 95 32 a0 02 srl %o2, 2, %o2 <== NOT EXECUTED while ( tmp_length-- ) *destination_p++ = *source_p++; 40016968: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 4001696c: c2 22 40 00 st %g1, [ %o1 ] <== NOT EXECUTED 40016970: 92 02 60 04 add %o1, 4, %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-- ) 40016974: 94 02 bf ff add %o2, -1, %o2 <== NOT EXECUTED 40016978: 80 a2 bf ff cmp %o2, -1 <== NOT EXECUTED 4001697c: 32 bf ff fb bne,a 40016968 <_Objects_Copy_name_raw+0x8> <== NOT EXECUTED 40016980: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED *destination_p++ = *source_p++; } 40016984: 81 c3 e0 08 retl <== NOT EXECUTED 40016988: 01 00 00 00 nop 40008130 <_Objects_Extend_information>: */ void _Objects_Extend_information( Objects_Information *information ) { 40008130: 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; 40008134: 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 ) 40008138: e0 16 20 10 lduh [ %i0 + 0x10 ], %l0 4000813c: 03 00 00 3f sethi %hi(0xfc00), %g1 40008140: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40008144: a2 08 80 01 and %g2, %g1, %l1 40008148: 80 a4 00 11 cmp %l0, %l1 4000814c: 3a 80 00 06 bcc,a 40008164 <_Objects_Extend_information+0x34> 40008150: e4 06 20 18 ld [ %i0 + 0x18 ], %l2 40008154: ac 10 00 11 mov %l1, %l6 40008158: 90 10 20 00 clr %o0 4000815c: 10 80 00 12 b 400081a4 <_Objects_Extend_information+0x74> 40008160: b8 10 20 00 clr %i4 block_count = 0; else { block_count = information->maximum / information->allocation_size; 40008164: 90 10 00 10 mov %l0, %o0 40008168: 92 10 00 12 mov %l2, %o1 4000816c: 40 00 34 d8 call 400154cc <.udiv> 40008170: ac 10 00 11 mov %l1, %l6 40008174: 10 80 00 09 b 40008198 <_Objects_Extend_information+0x68> 40008178: b8 10 20 00 clr %i4 for ( ; block < block_count; block++ ) { if ( information->object_blocks[ block ] == NULL ) 4000817c: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 40008180: c2 00 40 02 ld [ %g1 + %g2 ], %g1 40008184: 80 a0 60 00 cmp %g1, 0 40008188: 02 80 00 08 be 400081a8 <_Objects_Extend_information+0x78> 4000818c: 80 a5 80 10 cmp %l6, %l0 break; else index_base += information->allocation_size; 40008190: ac 05 80 12 add %l6, %l2, %l6 if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40008194: b8 07 20 01 inc %i4 40008198: 80 a7 00 08 cmp %i4, %o0 4000819c: 12 bf ff f8 bne 4000817c <_Objects_Extend_information+0x4c> 400081a0: 85 2f 20 02 sll %i4, 2, %g2 /* * If the index_base is the maximum we need to grow the tables. */ if (index_base >= information->maximum ) { 400081a4: 80 a5 80 10 cmp %l6, %l0 400081a8: 2a 80 00 63 bcs,a 40008334 <_Objects_Extend_information+0x204> 400081ac: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 * Up the block count and maximum */ block_count++; maximum = information->maximum + information->allocation_size; 400081b0: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 400081b4: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 * Up the block count and maximum */ block_count++; maximum = information->maximum + information->allocation_size; 400081b8: ae 04 00 01 add %l0, %g1, %l7 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 400081bc: 80 a0 a0 00 cmp %g2, 0 /* * Up the block count and maximum */ block_count++; 400081c0: a0 02 20 01 add %o0, 1, %l0 400081c4: 82 05 c0 11 add %l7, %l1, %g1 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 400081c8: 02 80 00 0b be 400081f4 <_Objects_Extend_information+0xc4> 400081cc: 91 2c 20 01 sll %l0, 1, %o0 object_blocks = (void**) 400081d0: 90 02 00 10 add %o0, %l0, %o0 400081d4: 90 00 40 08 add %g1, %o0, %o0 400081d8: 7f ff ff cf call 40008114 <_Workspace_Allocate> 400081dc: 91 2a 20 02 sll %o0, 2, %o0 block_count * (sizeof(void *) + sizeof(uint32_t ) + sizeof(Objects_Name *)) + ((maximum + minimum_index) * sizeof(Objects_Control *)) ); if ( !object_blocks ) 400081e0: a4 92 20 00 orcc %o0, 0, %l2 400081e4: 32 80 00 0a bne,a 4000820c <_Objects_Extend_information+0xdc> 400081e8: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 400081ec: 81 c7 e0 08 ret <== NOT EXECUTED 400081f0: 81 e8 00 00 restore <== NOT EXECUTED return; } else { object_blocks = (void**) 400081f4: 90 02 00 10 add %o0, %l0, %o0 400081f8: 90 00 40 08 add %g1, %o0, %o0 400081fc: 40 00 0b 56 call 4000af54 <_Workspace_Allocate_or_fatal_error> 40008200: 91 2a 20 02 sll %o0, 2, %o0 40008204: a4 10 00 08 mov %o0, %l2 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 40008208: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 /* * Take the block count down. Saves all the (block_count - 1) * in the copies. */ block_count--; 4000820c: ba 04 3f ff add %l0, -1, %i5 if ( information->maximum > minimum_index ) { 40008210: 80 a0 40 11 cmp %g1, %l1 40008214: 84 10 20 00 clr %g2 40008218: 83 2c 20 02 sll %l0, 2, %g1 /* * Break the block into the various sections. * */ inactive_per_block = (uint32_t *) _Addresses_Add_offset( 4000821c: a8 04 80 01 add %l2, %g1, %l4 object_blocks, block_count * sizeof(void*) ); name_table = (Objects_Name *) _Addresses_Add_offset( 40008220: aa 05 00 01 add %l4, %g1, %l5 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 40008224: 08 80 00 19 bleu 40008288 <_Objects_Extend_information+0x158> 40008228: a6 05 40 01 add %l5, %g1, %l3 /* * 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, 4000822c: d2 06 20 3c ld [ %i0 + 0x3c ], %o1 40008230: a1 2f 60 02 sll %i5, 2, %l0 40008234: 90 10 00 12 mov %l2, %o0 40008238: 40 00 1a 51 call 4000eb7c 4000823c: 94 10 00 10 mov %l0, %o2 information->object_blocks, block_count * sizeof(void*) ); memcpy( inactive_per_block, 40008240: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 40008244: 94 10 00 10 mov %l0, %o2 40008248: 40 00 1a 4d call 4000eb7c 4000824c: 90 10 00 14 mov %l4, %o0 information->inactive_per_block, block_count * sizeof(uint32_t ) ); memcpy( name_table, 40008250: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 40008254: 94 10 00 10 mov %l0, %o2 40008258: 40 00 1a 49 call 4000eb7c 4000825c: 90 10 00 15 mov %l5, %o0 information->name_table, block_count * sizeof(Objects_Name *) ); memcpy( local_table, 40008260: d4 16 20 10 lduh [ %i0 + 0x10 ], %o2 40008264: d2 06 20 20 ld [ %i0 + 0x20 ], %o1 40008268: 94 02 80 11 add %o2, %l1, %o2 4000826c: 90 10 00 13 mov %l3, %o0 40008270: 40 00 1a 43 call 4000eb7c 40008274: 95 2a a0 02 sll %o2, 2, %o2 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 40008278: 10 80 00 08 b 40008298 <_Objects_Extend_information+0x168> 4000827c: 83 2f 60 02 sll %i5, 2, %g1 else { /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { 40008280: 84 00 a0 01 inc %g2 local_table[ index ] = NULL; 40008284: c0 20 40 13 clr [ %g1 + %l3 ] else { /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { 40008288: 80 a0 80 11 cmp %g2, %l1 4000828c: 32 bf ff fd bne,a 40008280 <_Objects_Extend_information+0x150> 40008290: 83 28 a0 02 sll %g2, 2, %g1 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 40008294: 83 2f 60 02 sll %i5, 2, %g1 inactive_per_block[block_count] = 0; 40008298: c0 25 00 01 clr [ %l4 + %g1 ] /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 4000829c: c0 24 80 01 clr [ %l2 + %g1 ] inactive_per_block[block_count] = 0; name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); 400082a0: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; inactive_per_block[block_count] = 0; name_table[block_count] = NULL; 400082a4: c0 25 40 01 clr [ %l5 + %g1 ] for ( index=index_base ; index < ( information->allocation_size + index_base ); 400082a8: 83 2d a0 02 sll %l6, 2, %g1 400082ac: 86 05 80 02 add %l6, %g2, %g3 400082b0: 84 04 c0 01 add %l3, %g1, %g2 400082b4: 10 80 00 04 b 400082c4 <_Objects_Extend_information+0x194> 400082b8: 82 10 00 16 mov %l6, %g1 index++ ) { local_table[ index ] = NULL; 400082bc: c0 20 bf fc clr [ %g2 + -4 ] inactive_per_block[block_count] = 0; name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); index++ ) { 400082c0: 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 ); 400082c4: 80 a0 40 03 cmp %g1, %g3 400082c8: 0a bf ff fd bcs 400082bc <_Objects_Extend_information+0x18c> 400082cc: 84 00 a0 04 add %g2, 4, %g2 index++ ) { local_table[ index ] = NULL; } _ISR_Disable( level ); 400082d0: 7f ff e6 f8 call 40001eb0 400082d4: 01 00 00 00 nop 400082d8: a0 10 00 08 mov %o0, %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( 400082dc: d0 06 00 00 ld [ %i0 ], %o0 400082e0: d2 16 20 04 lduh [ %i0 + 4 ], %o1 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; 400082e4: e8 26 20 38 st %l4, [ %i0 + 0x38 ] information->name_table = name_table; 400082e8: ea 26 20 24 st %l5, [ %i0 + 0x24 ] information->local_table = local_table; 400082ec: e6 26 20 20 st %l3, [ %i0 + 0x20 ] information->maximum = maximum; 400082f0: ee 36 20 10 sth %l7, [ %i0 + 0x10 ] information->maximum_id = _Objects_Build_id( 400082f4: 97 2d e0 10 sll %l7, 0x10, %o3 local_table[ index ] = NULL; } _ISR_Disable( level ); old_tables = information->object_blocks; 400082f8: e2 06 20 3c ld [ %i0 + 0x3c ], %l1 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( 400082fc: 97 32 e0 10 srl %o3, 0x10, %o3 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; 40008300: e4 26 20 3c st %l2, [ %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( 40008304: 7f ff ff 7d call 400080f8 <_Objects_Build_id> 40008308: 94 10 20 01 mov 1, %o2 4000830c: d0 26 20 0c st %o0, [ %i0 + 0xc ] information->the_class, _Objects_Local_node, information->maximum ); _ISR_Enable( level ); 40008310: 7f ff e6 ec call 40001ec0 40008314: 90 10 00 10 mov %l0, %o0 if ( old_tables ) 40008318: 80 a4 60 00 cmp %l1, 0 4000831c: 02 80 00 05 be 40008330 <_Objects_Extend_information+0x200> 40008320: 11 10 00 67 sethi %hi(0x40019c00), %o0 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 40008324: 92 10 00 11 mov %l1, %o1 40008328: 7f ff fe 1a call 40007b90 <_Heap_Free> 4000832c: 90 12 22 ec or %o0, 0x2ec, %o0 /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { 40008330: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 40008334: e2 06 20 3c ld [ %i0 + 0x3c ], %l1 40008338: 80 a0 60 00 cmp %g1, 0 4000833c: a1 2f 20 02 sll %i4, 2, %l0 40008340: d0 16 20 44 lduh [ %i0 + 0x44 ], %o0 40008344: 02 80 00 11 be 40008388 <_Objects_Extend_information+0x258> 40008348: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 information->object_blocks[ block ] = 4000834c: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 40008350: 91 2a 20 10 sll %o0, 0x10, %o0 40008354: 91 32 20 10 srl %o0, 0x10, %o0 40008358: 40 00 34 23 call 400153e4 <.umul> 4000835c: 90 02 00 01 add %o0, %g1, %o0 40008360: 7f ff ff 6d call 40008114 <_Workspace_Allocate> 40008364: 01 00 00 00 nop _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 40008368: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { information->object_blocks[ block ] = 4000836c: d0 24 00 11 st %o0, [ %l0 + %l1 ] _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 40008370: c2 00 40 10 ld [ %g1 + %l0 ], %g1 40008374: 80 a0 60 00 cmp %g1, 0 40008378: 32 80 00 0d bne,a 400083ac <_Objects_Extend_information+0x27c> 4000837c: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 40008380: 81 c7 e0 08 ret <== NOT EXECUTED 40008384: 81 e8 00 00 restore <== NOT EXECUTED return; } else { information->object_blocks[ block ] = 40008388: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 4000838c: 91 2a 20 10 sll %o0, 0x10, %o0 40008390: 91 32 20 10 srl %o0, 0x10, %o0 40008394: 40 00 34 14 call 400153e4 <.umul> 40008398: 90 02 00 01 add %o0, %g1, %o0 4000839c: 40 00 0a ee call 4000af54 <_Workspace_Allocate_or_fatal_error> 400083a0: 01 00 00 00 nop 400083a4: d0 24 00 11 st %o0, [ %l0 + %l1 ] 400083a8: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 400083ac: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 400083b0: 40 00 34 0d call 400153e4 <.umul> 400083b4: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); } name_area = (Objects_Name *) _Addresses_Add_offset( 400083b8: a7 2f 20 02 sll %i4, 2, %l3 information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 400083bc: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 400083c0: c2 04 00 13 ld [ %l0 + %l3 ], %g1 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 400083c4: d4 06 20 18 ld [ %i0 + 0x18 ], %o2 400083c8: a2 02 00 01 add %o0, %g1, %l1 400083cc: d6 06 20 1c ld [ %i0 + 0x1c ], %o3 name_area = (Objects_Name *) _Addresses_Add_offset( information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 400083d0: e2 20 80 13 st %l1, [ %g2 + %l3 ] /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 400083d4: d2 04 00 13 ld [ %l0 + %l3 ], %o1 400083d8: 90 07 bf ec add %fp, -20, %o0 400083dc: a4 10 00 16 mov %l6, %l2 * Move from the local chain, initialise, then append to the inactive chain */ index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { 400083e0: aa 10 00 08 mov %o0, %l5 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 400083e4: 40 00 13 15 call 4000d038 <_Chain_Initialize> 400083e8: a8 06 20 28 add %i0, 0x28, %l4 400083ec: 30 80 00 0c b,a 4000841c <_Objects_Extend_information+0x2ec> index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 400083f0: d2 16 20 04 lduh [ %i0 + 4 ], %o1 400083f4: d0 06 00 00 ld [ %i0 ], %o0 400083f8: 7f ff ff 40 call 400080f8 <_Objects_Build_id> 400083fc: a4 04 a0 01 inc %l2 40008400: c2 16 20 44 lduh [ %i0 + 0x44 ], %g1 40008404: d0 24 20 08 st %o0, [ %l0 + 8 ] information->the_class, _Objects_Local_node, index ); the_object->name = (void *) name_area; 40008408: e2 24 20 0c st %l1, [ %l0 + 0xc ] name_area = _Addresses_Add_offset( name_area, information->name_length ); _Chain_Append( &information->Inactive, &the_object->Node ); 4000840c: 92 10 00 10 mov %l0, %o1 40008410: a2 04 40 01 add %l1, %g1, %l1 40008414: 7f ff fc 7b call 40007600 <_Chain_Append> 40008418: 90 10 00 14 mov %l4, %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 ) { 4000841c: 7f ff fc 85 call 40007630 <_Chain_Get> 40008420: 90 10 00 15 mov %l5, %o0 the_object->id = _Objects_Build_id( 40008424: 96 10 00 12 mov %l2, %o3 * Move from the local chain, initialise, then append to the inactive chain */ index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { 40008428: a0 10 00 08 mov %o0, %l0 4000842c: 80 a2 20 00 cmp %o0, 0 40008430: 12 bf ff f0 bne 400083f0 <_Objects_Extend_information+0x2c0> 40008434: 94 10 20 01 mov 1, %o2 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 40008438: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 4000843c: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 information->inactive += information->allocation_size; 40008440: c6 16 20 34 lduh [ %i0 + 0x34 ], %g3 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 40008444: c2 20 80 13 st %g1, [ %g2 + %l3 ] information->inactive += information->allocation_size; 40008448: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 4000844c: 82 00 40 03 add %g1, %g3, %g1 40008450: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 40008454: 81 c7 e0 08 ret 40008458: 81 e8 00 00 restore 400084ec <_Objects_Get_isr_disable>: Objects_Information *information, Objects_Id id, Objects_Locations *location, ISR_Level *level_p ) { 400084ec: 9d e3 bf 98 save %sp, -104, %sp Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 400084f0: c2 06 20 08 ld [ %i0 + 8 ], %g1 _ISR_Disable( level ); 400084f4: 7f ff e6 6f call 40001eb0 400084f8: b2 26 40 01 sub %i1, %g1, %i1 { Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 400084fc: b2 06 60 01 inc %i1 _ISR_Disable( level ); if ( information->maximum >= index ) { 40008500: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 40008504: 80 a0 40 19 cmp %g1, %i1 40008508: 0a 80 00 11 bcs 4000854c <_Objects_Get_isr_disable+0x60> 4000850c: 83 2e 60 02 sll %i1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 40008510: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 40008514: f0 00 80 01 ld [ %g2 + %g1 ], %i0 40008518: 80 a6 20 00 cmp %i0, 0 4000851c: 02 80 00 06 be 40008534 <_Objects_Get_isr_disable+0x48> 40008520: 01 00 00 00 nop *location = OBJECTS_LOCAL; *level_p = level; 40008524: 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; 40008528: c0 26 80 00 clr [ %i2 ] 4000852c: 81 c7 e0 08 ret 40008530: 81 e8 00 00 restore *level_p = level; return the_object; } _ISR_Enable( level ); 40008534: 7f ff e6 63 call 40001ec0 <== NOT EXECUTED 40008538: 01 00 00 00 nop <== NOT EXECUTED *location = OBJECTS_ERROR; 4000853c: 82 10 20 02 mov 2, %g1 ! 2 <== NOT EXECUTED 40008540: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 40008544: 81 c7 e0 08 ret <== NOT EXECUTED 40008548: 81 e8 00 00 restore <== NOT EXECUTED return NULL; } _ISR_Enable( level ); 4000854c: 7f ff e6 5d call 40001ec0 40008550: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; 40008554: 82 10 20 02 mov 2, %g1 40008558: c2 26 80 00 st %g1, [ %i2 ] _Objects_MP_Is_remote( information, id, location, &the_object ); return the_object; #else return NULL; #endif } 4000855c: 81 c7 e0 08 ret 40008560: 81 e8 00 00 restore 40009fb8 <_Objects_Get_name_as_string>: char *_Objects_Get_name_as_string( Objects_Id id, size_t length, char *name ) { 40009fb8: 9d e3 bf 88 save %sp, -120, %sp 40009fbc: 92 10 00 18 mov %i0, %o1 uint32_t i; char lname[5]; Objects_Control *the_object; Objects_Locations location; if ( length == 0 ) 40009fc0: 80 a6 60 00 cmp %i1, 0 40009fc4: 02 80 00 43 be 4000a0d0 <_Objects_Get_name_as_string+0x118> 40009fc8: b0 10 00 1a mov %i2, %i0 return NULL; if ( name == NULL ) 40009fcc: 80 a6 a0 00 cmp %i2, 0 40009fd0: 02 80 00 3e be 4000a0c8 <_Objects_Get_name_as_string+0x110> 40009fd4: 85 32 60 16 srl %o1, 0x16, %g2 if ( !_Objects_Is_class_valid( the_class ) ) return NULL; the_api = _Objects_Get_API( id ); return _Objects_Information_table[ the_api ][ the_class ]; 40009fd8: 03 10 00 98 sethi %hi(0x40026000), %g1 40009fdc: 84 08 a0 1c and %g2, 0x1c, %g2 40009fe0: 82 10 63 10 or %g1, 0x310, %g1 40009fe4: c4 00 40 02 ld [ %g1 + %g2 ], %g2 40009fe8: 83 32 60 1b srl %o1, 0x1b, %g1 40009fec: 83 28 60 02 sll %g1, 2, %g1 40009ff0: e0 00 80 01 ld [ %g2 + %g1 ], %l0 return NULL; information = _Objects_Get_information( id ); if ( !information ) 40009ff4: 80 a4 20 00 cmp %l0, 0 40009ff8: 22 80 00 34 be,a 4000a0c8 <_Objects_Get_name_as_string+0x110> 40009ffc: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; the_object = _Objects_Get( information, id, &location ); 4000a000: 90 10 00 10 mov %l0, %o0 4000a004: 40 00 00 36 call 4000a0dc <_Objects_Get> 4000a008: 94 07 bf f4 add %fp, -12, %o2 switch ( location ) { 4000a00c: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000a010: 80 a0 60 00 cmp %g1, 0 4000a014: 32 80 00 2d bne,a 4000a0c8 <_Objects_Get_name_as_string+0x110> 4000a018: b0 10 20 00 clr %i0 <== NOT EXECUTED case OBJECTS_ERROR: return NULL; case OBJECTS_LOCAL: if ( information->is_string ) { 4000a01c: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 4000a020: 80 a0 60 00 cmp %g1, 0 4000a024: 12 80 00 0b bne 4000a050 <_Objects_Get_name_as_string+0x98> 4000a028: d0 02 20 0c ld [ %o0 + 0xc ], %o0 s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; 4000a02c: 83 32 20 18 srl %o0, 0x18, %g1 4000a030: c2 2f bf ef stb %g1, [ %fp + -17 ] lname[ 1 ] = (u32_name >> 16) & 0xff; 4000a034: 83 32 20 10 srl %o0, 0x10, %g1 lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; 4000a038: d0 2f bf f2 stb %o0, [ %fp + -14 ] 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; 4000a03c: c2 2f bf f0 stb %g1, [ %fp + -16 ] lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 4000a040: c0 2f bf f3 clrb [ %fp + -13 ] } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; lname[ 1 ] = (u32_name >> 16) & 0xff; lname[ 2 ] = (u32_name >> 8) & 0xff; 4000a044: 83 32 20 08 srl %o0, 8, %g1 lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 4000a048: 90 07 bf ef add %fp, -17, %o0 } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; lname[ 1 ] = (u32_name >> 16) & 0xff; lname[ 2 ] = (u32_name >> 8) & 0xff; 4000a04c: c2 2f bf f1 stb %g1, [ %fp + -15 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 4000a050: 84 10 00 18 mov %i0, %g2 4000a054: 88 10 20 01 mov 1, %g4 s = lname; } for ( i=0, d=name ; i<(length-1) && *s ; i++, s++, d++ ) { *d = (!isprint(*s)) ? '*' : *s; 4000a058: 10 80 00 09 b 4000a07c <_Objects_Get_name_as_string+0xc4> 4000a05c: 19 10 00 77 sethi %hi(0x4001dc00), %o4 4000a060: c2 03 20 88 ld [ %o4 + 0x88 ], %g1 ! 4001dc88 <__ctype_ptr> 4000a064: c2 48 40 03 ldsb [ %g1 + %g3 ], %g1 4000a068: 80 88 60 97 btst 0x97, %g1 4000a06c: 22 80 00 02 be,a 4000a074 <_Objects_Get_name_as_string+0xbc> 4000a070: 9a 10 20 2a mov 0x2a, %o5 <== NOT EXECUTED 4000a074: da 28 80 00 stb %o5, [ %g2 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; s = lname; } for ( i=0, d=name ; i<(length-1) && *s ; i++, s++, d++ ) { 4000a078: 84 00 a0 01 inc %g2 4000a07c: 80 a1 00 19 cmp %g4, %i1 4000a080: 02 80 00 07 be 4000a09c <_Objects_Get_name_as_string+0xe4> 4000a084: 82 02 00 04 add %o0, %g4, %g1 4000a088: c6 48 7f ff ldsb [ %g1 + -1 ], %g3 4000a08c: 88 01 20 01 inc %g4 4000a090: 80 a0 e0 00 cmp %g3, 0 4000a094: 12 bf ff f3 bne 4000a060 <_Objects_Get_name_as_string+0xa8> 4000a098: da 08 7f ff ldub [ %g1 + -1 ], %o5 *d = (!isprint(*s)) ? '*' : *s; } *d = '\0'; 4000a09c: c0 28 80 00 clrb [ %g2 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000a0a0: 03 10 00 98 sethi %hi(0x40026000), %g1 4000a0a4: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 400263b0 <_Thread_Dispatch_disable_level> 4000a0a8: 84 00 bf ff add %g2, -1, %g2 4000a0ac: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 4000a0b0: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 4000a0b4: 80 a0 60 00 cmp %g1, 0 4000a0b8: 12 80 00 07 bne 4000a0d4 <_Objects_Get_name_as_string+0x11c> 4000a0bc: 01 00 00 00 nop _Thread_Dispatch(); 4000a0c0: 40 00 04 bc call 4000b3b0 <_Thread_Dispatch> 4000a0c4: 01 00 00 00 nop 4000a0c8: 81 c7 e0 08 ret 4000a0cc: 81 e8 00 00 restore 4000a0d0: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return name; } return NULL; /* unreachable path */ } 4000a0d4: 81 c7 e0 08 ret <== NOT EXECUTED 4000a0d8: 81 e8 00 00 restore <== NOT EXECUTED 4001698c <_Objects_Get_next>: Objects_Information *information, Objects_Id id, Objects_Locations *location_p, Objects_Id *next_id_p ) { 4001698c: 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) 40016990: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 40016994: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff <== NOT EXECUTED 40016998: 80 8e 40 01 btst %i1, %g1 <== NOT EXECUTED 4001699c: 22 80 00 02 be,a 400169a4 <_Objects_Get_next+0x18> <== NOT EXECUTED 400169a0: 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) 400169a4: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 400169a8: a0 10 63 ff or %g1, 0x3ff, %l0 ! ffff <== NOT EXECUTED 400169ac: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED 400169b0: 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); 400169b4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 400169b8: 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) 400169bc: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400169c0: 18 80 00 0a bgu 400169e8 <_Objects_Get_next+0x5c> <== NOT EXECUTED 400169c4: 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); 400169c8: 7f ff d8 fe call 4000cdc0 <_Objects_Get> <== NOT EXECUTED 400169cc: b2 06 60 01 inc %i1 <== NOT EXECUTED next_id++; } while (*location_p != OBJECTS_LOCAL); 400169d0: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 400169d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400169d8: 32 bf ff f6 bne,a 400169b0 <_Objects_Get_next+0x24> <== NOT EXECUTED 400169dc: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED *next_id_p = next_id; 400169e0: 10 80 00 07 b 400169fc <_Objects_Get_next+0x70> <== NOT EXECUTED 400169e4: f2 26 c0 00 st %i1, [ %i3 ] <== NOT EXECUTED do { /* walked off end of list? */ if (_Objects_Get_index(next_id) > information->maximum) { *location_p = OBJECTS_ERROR; 400169e8: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 400169ec: 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; 400169f0: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 400169f4: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED 400169f8: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED return 0; } 400169fc: 81 c7 e0 08 ret <== NOT EXECUTED 40016a00: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400157fc <_Objects_Get_no_protection>: ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 400157fc: c2 02 20 08 ld [ %o0 + 8 ], %g1 if ( information->maximum >= index ) { 40015800: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 40015804: 92 22 40 01 sub %o1, %g1, %o1 40015808: 82 02 60 01 add %o1, 1, %g1 if ( information->maximum >= index ) { 4001580c: 80 a0 80 01 cmp %g2, %g1 40015810: 0a 80 00 0b bcs 4001583c <_Objects_Get_no_protection+0x40> 40015814: 83 28 60 02 sll %g1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 40015818: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4001581c: d0 00 80 01 ld [ %g2 + %g1 ], %o0 40015820: 80 a2 20 00 cmp %o0, 0 40015824: 02 80 00 04 be 40015834 <_Objects_Get_no_protection+0x38> 40015828: 82 10 20 02 mov 2, %g1 *location = OBJECTS_LOCAL; 4001582c: 81 c3 e0 08 retl 40015830: c0 22 80 00 clr [ %o2 ] return the_object; } *location = OBJECTS_ERROR; 40015834: 81 c3 e0 08 retl <== NOT EXECUTED 40015838: c2 22 80 00 st %g1, [ %o2 ] <== NOT EXECUTED return NULL; } *location = OBJECTS_ERROR; 4001583c: 82 10 20 02 mov 2, %g1 40015840: 90 10 20 00 clr %o0 /* * Not supported for multiprocessing */ return NULL; } 40015844: 81 c3 e0 08 retl 40015848: c2 22 80 00 st %g1, [ %o2 ] 400087c8 <_Objects_Handler_initialization>: uint32_t node, uint32_t maximum_nodes, uint32_t maximum_global_objects ) { if ( node < 1 || node > maximum_nodes ) 400087c8: 80 a2 20 00 cmp %o0, 0 400087cc: 22 80 00 05 be,a 400087e0 <_Objects_Handler_initialization+0x18> 400087d0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400087d4: 80 a2 00 09 cmp %o0, %o1 400087d8: 08 80 00 07 bleu 400087f4 <_Objects_Handler_initialization+0x2c> 400087dc: 90 10 20 00 clr %o0 _Internal_error_Occurred( 400087e0: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 400087e4: 94 10 20 08 mov 8, %o2 <== NOT EXECUTED 400087e8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400087ec: 7f ff fd ed call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 400087f0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400087f4: 81 c3 e0 08 retl 400087f8: 01 00 00 00 nop 40009c0c <_Objects_Id_to_name>: Objects_Name_or_id_lookup_errors _Objects_Id_to_name ( Objects_Id id, Objects_Name *name ) { 40009c0c: 9d e3 bf 90 save %sp, -112, %sp 40009c10: 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 ) 40009c14: 80 a6 60 00 cmp %i1, 0 40009c18: 02 80 00 26 be 40009cb0 <_Objects_Id_to_name+0xa4> 40009c1c: 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); 40009c20: 83 32 60 18 srl %o1, 0x18, %g1 40009c24: 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 ) 40009c28: 80 a0 60 04 cmp %g1, 4 40009c2c: 18 80 00 23 bgu 40009cb8 <_Objects_Id_to_name+0xac> 40009c30: 85 28 60 02 sll %g1, 2, %g2 return OBJECTS_INVALID_ID; the_class = _Objects_Get_class( id ); information = _Objects_Information_table[ the_api ][ the_class ]; 40009c34: 03 10 00 78 sethi %hi(0x4001e000), %g1 40009c38: 82 10 62 10 or %g1, 0x210, %g1 ! 4001e210 <_Objects_Information_table> 40009c3c: c4 00 40 02 ld [ %g1 + %g2 ], %g2 40009c40: 83 32 60 1b srl %o1, 0x1b, %g1 40009c44: 83 28 60 02 sll %g1, 2, %g1 40009c48: d0 00 80 01 ld [ %g2 + %g1 ], %o0 if ( !information ) 40009c4c: 80 a2 20 00 cmp %o0, 0 40009c50: 02 80 00 18 be 40009cb0 <_Objects_Id_to_name+0xa4> 40009c54: b0 10 20 03 mov 3, %i0 return OBJECTS_INVALID_ID; if ( information->is_string ) 40009c58: c2 02 20 40 ld [ %o0 + 0x40 ], %g1 40009c5c: 80 a0 60 00 cmp %g1, 0 40009c60: 12 80 00 17 bne 40009cbc <_Objects_Id_to_name+0xb0> 40009c64: 01 00 00 00 nop return OBJECTS_INVALID_ID; the_object = _Objects_Get( information, id, &ignored_location ); 40009c68: 7f ff ff c4 call 40009b78 <_Objects_Get> 40009c6c: 94 07 bf f4 add %fp, -12, %o2 if ( !the_object ) 40009c70: 80 a2 20 00 cmp %o0, 0 40009c74: 02 80 00 0f be 40009cb0 <_Objects_Id_to_name+0xa4> 40009c78: b0 10 20 03 mov 3, %i0 return OBJECTS_INVALID_ID; *name = the_object->name; 40009c7c: c2 02 20 0c ld [ %o0 + 0xc ], %g1 40009c80: 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 ) 40009c84: 05 10 00 78 sethi %hi(0x4001e000), %g2 40009c88: c2 00 a2 b0 ld [ %g2 + 0x2b0 ], %g1 ! 4001e2b0 <_Thread_Dispatch_disable_level> 40009c8c: b0 10 20 00 clr %i0 40009c90: 82 00 7f ff add %g1, -1, %g1 40009c94: c2 20 a2 b0 st %g1, [ %g2 + 0x2b0 ] 40009c98: c2 00 a2 b0 ld [ %g2 + 0x2b0 ], %g1 40009c9c: 80 a0 60 00 cmp %g1, 0 40009ca0: 12 80 00 07 bne 40009cbc <_Objects_Id_to_name+0xb0> 40009ca4: 01 00 00 00 nop _Thread_Dispatch(); 40009ca8: 40 00 04 d6 call 4000b000 <_Thread_Dispatch> 40009cac: 01 00 00 00 nop 40009cb0: 81 c7 e0 08 ret 40009cb4: 81 e8 00 00 restore 40009cb8: b0 10 20 03 mov 3, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL; } 40009cbc: 81 c7 e0 08 ret <== NOT EXECUTED 40009cc0: 81 e8 00 00 restore <== NOT EXECUTED 400085f8 <_Objects_Initialize_information>: , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 400085f8: 9d e3 bf 98 save %sp, -104, %sp /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 400085fc: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008600: 85 2e 60 02 sll %i1, 2, %g2 40008604: 82 10 62 00 or %g1, 0x200, %g1 40008608: c2 00 40 02 ld [ %g1 + %g2 ], %g1 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 4000860c: 89 2e a0 1b sll %i2, 0x1b, %g4 #if defined(RTEMS_MULTIPROCESSING) uint32_t index; #endif information->the_api = the_api; information->the_class = the_class; 40008610: f4 36 20 04 sth %i2, [ %i0 + 4 ] /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40008614: b5 2e a0 02 sll %i2, 2, %i2 40008618: f0 20 40 1a st %i0, [ %g1 + %i2 ] /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; 4000861c: 83 36 e0 1f srl %i3, 0x1f, %g1 40008620: c2 26 20 14 st %g1, [ %i0 + 0x14 ] maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 40008624: 03 20 00 00 sethi %hi(0x80000000), %g1 , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 40008628: de 07 a0 5c ld [ %fp + 0x5c ], %o7 uint32_t index; #endif information->the_api = the_api; information->the_class = the_class; information->is_string = is_string; 4000862c: fa 26 20 40 st %i5, [ %i0 + 0x40 ] /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 40008630: ba 2e c0 01 andn %i3, %g1, %i5 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40008634: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008638: 82 10 60 80 or %g1, 0x80, %g1 ! 40019c80 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 4000863c: 80 a0 00 1d cmp %g0, %i5 /* * Set the size of the object */ information->size = size; 40008640: b9 2f 20 10 sll %i4, 0x10, %i4 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008644: 86 40 20 00 addx %g0, 0, %g3 40008648: 85 2e 60 18 sll %i1, 0x18, %g2 /* * Set the size of the object */ information->size = size; 4000864c: b9 37 20 10 srl %i4, 0x10, %i4 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40008650: c2 26 20 20 st %g1, [ %i0 + 0x20 ] /* * Set the size of the object */ information->size = size; 40008654: f8 26 20 1c st %i4, [ %i0 + 0x1c ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008658: 03 00 00 40 sethi %hi(0x10000), %g1 uint32_t name_length; #if defined(RTEMS_MULTIPROCESSING) uint32_t index; #endif information->the_api = the_api; 4000865c: f2 26 00 00 st %i1, [ %i0 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008660: 84 10 80 01 or %g2, %g1, %g2 information->the_api = the_api; information->the_class = the_class; information->is_string = is_string; information->local_table = 0; information->name_table = 0; 40008664: c0 26 20 24 clr [ %i0 + 0x24 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008668: 84 10 80 04 or %g2, %g4, %g2 information->the_class = the_class; information->is_string = is_string; information->local_table = 0; information->name_table = 0; information->inactive_per_block = 0; 4000866c: c0 26 20 38 clr [ %i0 + 0x38 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008670: 84 10 80 03 or %g2, %g3, %g2 information->is_string = is_string; information->local_table = 0; information->name_table = 0; information->inactive_per_block = 0; information->object_blocks = 0; 40008674: c0 26 20 3c clr [ %i0 + 0x3c ] information->inactive = 0; 40008678: c0 36 20 34 clrh [ %i0 + 0x34 ] /* * The allocation unit is the maximum value */ information->allocation_size = maximum; 4000867c: fa 26 20 18 st %i5, [ %i0 + 0x18 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008680: c4 26 20 08 st %g2, [ %i0 + 8 ] * Calculate the maximum name length */ name_length = maximum_name_length; if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) ) 40008684: 80 8b e0 03 btst 3, %o7 40008688: 02 80 00 04 be 40008698 <_Objects_Initialize_information+0xa0> 4000868c: 82 10 00 0f mov %o7, %g1 name_length = (name_length + OBJECTS_NAME_ALIGNMENT) & 40008690: 82 03 e0 04 add %o7, 4, %g1 <== NOT EXECUTED 40008694: 82 08 7f fc and %g1, -4, %g1 <== NOT EXECUTED ~(OBJECTS_NAME_ALIGNMENT-1); information->name_length = name_length; 40008698: c2 36 20 44 sth %g1, [ %i0 + 0x44 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000869c: 82 06 20 2c add %i0, 0x2c, %g1 the_chain->permanent_null = NULL; 400086a0: 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); 400086a4: c2 26 20 28 st %g1, [ %i0 + 0x28 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 400086a8: 82 06 20 28 add %i0, 0x28, %g1 /* * Initialize objects .. if there are any */ if ( maximum ) { 400086ac: 80 a7 60 00 cmp %i5, 0 400086b0: 02 80 00 05 be 400086c4 <_Objects_Initialize_information+0xcc> 400086b4: c2 26 20 30 st %g1, [ %i0 + 0x30 ] /* * Reset the maximum value. It will be updated when the information is * extended. */ information->maximum = 0; 400086b8: 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 ); 400086bc: 7f ff fe 9d call 40008130 <_Objects_Extend_information> 400086c0: 81 e8 00 00 restore 400086c4: 81 c7 e0 08 ret 400086c8: 81 e8 00 00 restore 400086cc <_Objects_Name_to_id>: Objects_Information *information, Objects_Name name, uint32_t node, Objects_Id *id ) { 400086cc: 9d e3 bf 98 save %sp, -104, %sp 400086d0: 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 ) 400086d4: 80 a6 e0 00 cmp %i3, 0 400086d8: 02 80 00 3a be 400087c0 <_Objects_Name_to_id+0xf4> 400086dc: b0 10 20 02 mov 2, %i0 return OBJECTS_INVALID_ADDRESS; if ( name == 0 ) 400086e0: 80 a6 60 00 cmp %i1, 0 400086e4: 02 80 00 2d be 40008798 <_Objects_Name_to_id+0xcc> 400086e8: 01 00 00 00 nop return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 400086ec: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 400086f0: 80 a0 60 00 cmp %g1, 0 400086f4: 02 80 00 29 be 40008798 <_Objects_Name_to_id+0xcc> 400086f8: 80 a6 a0 00 cmp %i2, 0 400086fc: 22 80 00 2a be,a 400087a4 <_Objects_Name_to_id+0xd8> 40008700: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 40008704: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 40008708: 82 10 63 ff or %g1, 0x3ff, %g1 ! 7fffffff 4000870c: 80 a6 80 01 cmp %i2, %g1 40008710: 02 80 00 24 be 400087a0 <_Objects_Name_to_id+0xd4> 40008714: 80 a6 a0 01 cmp %i2, 1 40008718: 22 80 00 23 be,a 400087a4 <_Objects_Name_to_id+0xd8> 4000871c: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 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++ ) { 40008720: 81 c7 e0 08 ret 40008724: 91 e8 20 01 restore %g0, 1, %o0 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40008728: a4 10 60 5c or %g1, 0x5c, %l2 <== 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 ) ) { 4000872c: 83 28 a0 10 sll %g2, 0x10, %g1 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40008730: 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 ) ) { 40008734: 10 80 00 15 b 40008788 <_Objects_Name_to_id+0xbc> 40008738: 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 ]; 4000873c: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 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++ ) { 40008740: a0 04 20 01 inc %l0 the_object = information->local_table[ index ]; 40008744: f4 00 40 02 ld [ %g1 + %g2 ], %i2 if ( !the_object || !the_object->name ) 40008748: 80 a6 a0 00 cmp %i2, 0 4000874c: 02 80 00 0f be 40008788 <_Objects_Name_to_id+0xbc> 40008750: 90 10 00 19 mov %i1, %o0 40008754: d2 06 a0 0c ld [ %i2 + 0xc ], %o1 40008758: 80 a2 60 00 cmp %o1, 0 4000875c: 02 80 00 0b be 40008788 <_Objects_Name_to_id+0xbc> 40008760: 94 10 00 18 mov %i0, %o2 continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 40008764: 9f c4 80 00 call %l2 40008768: 01 00 00 00 nop 4000876c: 80 a2 20 00 cmp %o0, 0 40008770: 22 80 00 07 be,a 4000878c <_Objects_Name_to_id+0xc0> 40008774: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 *id = the_object->id; 40008778: c2 06 a0 08 ld [ %i2 + 8 ], %g1 4000877c: c2 26 c0 00 st %g1, [ %i3 ] 40008780: 81 c7 e0 08 ret 40008784: 91 e8 20 00 restore %g0, 0, %o0 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++ ) { 40008788: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 4000878c: 80 a4 00 01 cmp %l0, %g1 40008790: 08 bf ff eb bleu 4000873c <_Objects_Name_to_id+0x70> 40008794: 85 2c 20 02 sll %l0, 2, %g2 40008798: 81 c7 e0 08 ret 4000879c: 91 e8 20 01 restore %g0, 1, %o0 search_local_node = TRUE; if ( search_local_node ) { name_length = information->name_length; if ( information->is_string ) compare_them = _Objects_Compare_name_string; 400087a0: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 _Objects_Is_local_node( node ) )) search_local_node = TRUE; if ( search_local_node ) { name_length = information->name_length; 400087a4: c4 14 60 44 lduh [ %l1 + 0x44 ], %g2 if ( information->is_string ) compare_them = _Objects_Compare_name_string; 400087a8: 80 a0 60 00 cmp %g1, 0 400087ac: 03 10 00 35 sethi %hi(0x4000d400), %g1 400087b0: 02 bf ff df be 4000872c <_Objects_Name_to_id+0x60> 400087b4: a4 10 60 4c or %g1, 0x4c, %l2 ! 4000d44c <_Objects_Compare_name_raw> if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 400087b8: 10 bf ff dc b 40008728 <_Objects_Name_to_id+0x5c> <== NOT EXECUTED 400087bc: 03 10 00 35 sethi %hi(0x4000d400), %g1 <== NOT EXECUTED return ( _Objects_MP_Global_name_search( information, name, node, id ) ); #else return OBJECTS_INVALID_NAME; #endif } 400087c0: 81 c7 e0 08 ret <== NOT EXECUTED 400087c4: 81 e8 00 00 restore <== NOT EXECUTED 400087fc <_Objects_Shrink_information>: */ void _Objects_Shrink_information( Objects_Information *information ) { 400087fc: 9d e3 bf 98 save %sp, -104, %sp 40008800: 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; 40008804: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 40008808: d0 16 20 10 lduh [ %i0 + 0x10 ], %o0 4000880c: 03 00 00 3f sethi %hi(0xfc00), %g1 40008810: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40008814: 92 10 00 10 mov %l0, %o1 40008818: a2 08 80 01 and %g2, %g1, %l1 4000881c: 40 00 33 2c call 400154cc <.udiv> 40008820: 90 22 00 11 sub %o0, %l1, %o0 40008824: 86 10 20 00 clr %g3 40008828: 10 80 00 33 b 400088f4 <_Objects_Shrink_information+0xf8> 4000882c: a4 10 20 00 clr %l2 for ( block = 0; block < block_count; block++ ) { 40008830: 86 00 e0 01 inc %g3 if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40008834: c2 00 40 12 ld [ %g1 + %l2 ], %g1 40008838: 80 a0 40 10 cmp %g1, %l0 4000883c: 12 80 00 2c bne 400088ec <_Objects_Shrink_information+0xf0> 40008840: 84 04 a0 04 add %l2, 4, %g2 /* * 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; 40008844: e0 06 20 28 ld [ %i0 + 0x28 ], %l0 40008848: 03 00 00 3f sethi %hi(0xfc00), %g1 4000884c: a6 10 63 ff or %g1, 0x3ff, %l3 ! ffff 40008850: c2 04 20 08 ld [ %l0 + 8 ], %g1 40008854: 84 08 40 13 and %g1, %l3, %g2 */ do { index = _Objects_Get_index( the_object->id ); if ((index >= index_base) && 40008858: 80 a0 80 11 cmp %g2, %l1 4000885c: 2a 80 00 0c bcs,a 4000888c <_Objects_Shrink_information+0x90> 40008860: e0 04 00 00 ld [ %l0 ], %l0 40008864: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 40008868: 82 04 40 01 add %l1, %g1, %g1 4000886c: 80 a0 80 01 cmp %g2, %g1 40008870: 1a 80 00 06 bcc 40008888 <_Objects_Shrink_information+0x8c> 40008874: 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 ); 40008878: 40 00 11 e6 call 4000d010 <_Chain_Extract> 4000887c: e0 04 00 00 ld [ %l0 ], %l0 } else { the_object = (Objects_Control *) the_object->Node.next; } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 40008880: 10 80 00 04 b 40008890 <_Objects_Shrink_information+0x94> 40008884: 80 a4 20 00 cmp %l0, 0 the_object = NULL; _Chain_Extract( &extract_me->Node ); } else { the_object = (Objects_Control *) the_object->Node.next; 40008888: e0 04 00 00 ld [ %l0 ], %l0 } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 4000888c: 80 a4 20 00 cmp %l0, 0 40008890: 22 80 00 07 be,a 400088ac <_Objects_Shrink_information+0xb0> 40008894: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 40008898: c2 04 00 00 ld [ %l0 ], %g1 4000889c: 80 a0 60 00 cmp %g1, 0 400088a0: 32 bf ff ed bne,a 40008854 <_Objects_Shrink_information+0x58> 400088a4: c2 04 20 08 ld [ %l0 + 8 ], %g1 400088a8: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 400088ac: 11 10 00 67 sethi %hi(0x40019c00), %o0 400088b0: d2 00 40 12 ld [ %g1 + %l2 ], %o1 400088b4: 7f ff fc b7 call 40007b90 <_Heap_Free> 400088b8: 90 12 22 ec or %o0, 0x2ec, %o0 */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 400088bc: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 /* * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; 400088c0: c6 06 20 24 ld [ %i0 + 0x24 ], %g3 information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 400088c4: c0 20 40 12 clr [ %g1 + %l2 ] * 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; 400088c8: c8 06 20 3c ld [ %i0 + 0x3c ], %g4 information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 400088cc: c2 16 20 34 lduh [ %i0 + 0x34 ], %g1 400088d0: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 /* * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; 400088d4: c0 20 c0 12 clr [ %g3 + %l2 ] information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 400088d8: 82 20 40 02 sub %g1, %g2, %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; 400088dc: c0 21 00 12 clr [ %g4 + %l2 ] information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 400088e0: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 400088e4: 81 c7 e0 08 ret 400088e8: 81 e8 00 00 restore return; } index_base += information->allocation_size; 400088ec: 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++ ) { 400088f0: a4 10 00 02 mov %g2, %l2 400088f4: 80 a0 c0 08 cmp %g3, %o0 400088f8: 32 bf ff ce bne,a 40008830 <_Objects_Shrink_information+0x34> 400088fc: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 40008900: 81 c7 e0 08 ret 40008904: 81 e8 00 00 restore 4000893c <_Protected_heap_Allocate>: void *_Protected_heap_Allocate( Heap_Control *the_heap, size_t size ) { 4000893c: 9d e3 bf 98 save %sp, -104, %sp void *p; _RTEMS_Lock_allocator(); 40008940: 7f ff e5 5c call 40001eb0 40008944: 01 00 00 00 nop 40008948: a2 10 00 08 mov %o0, %l1 4000894c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008950: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40008954: 80 a0 60 00 cmp %g1, 0 40008958: 02 80 00 0b be 40008984 <_Protected_heap_Allocate+0x48> 4000895c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008960: 03 10 00 68 sethi %hi(0x4001a000), %g1 40008964: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> 40008968: 80 a0 60 01 cmp %g1, 1 4000896c: 08 80 00 05 bleu 40008980 <_Protected_heap_Allocate+0x44> 40008970: 90 10 20 00 clr %o0 40008974: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008978: 7f ff fd 8a call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 4000897c: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40008980: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008984: e0 00 63 74 ld [ %g1 + 0x374 ], %l0 ! 40019f74 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40008988: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000898c: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40008990: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40008994: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40008998: 80 a0 60 00 cmp %g1, 0 4000899c: 22 80 00 33 be,a 40008a68 <_Protected_heap_Allocate+0x12c> 400089a0: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400089a4: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400089a8: 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; 400089ac: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 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; 400089b0: 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; 400089b4: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 400089b8: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400089bc: 80 a0 e0 02 cmp %g3, 2 400089c0: 02 80 00 05 be 400089d4 <_Protected_heap_Allocate+0x98> 400089c4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 400089c8: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400089cc: 32 80 00 06 bne,a 400089e4 <_Protected_heap_Allocate+0xa8> <== NOT EXECUTED 400089d0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400089d4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 400089d8: 82 00 60 01 inc %g1 400089dc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400089e0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 400089e4: 80 a0 60 03 cmp %g1, 3 400089e8: 22 80 00 03 be,a 400089f4 <_Protected_heap_Allocate+0xb8> 400089ec: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 400089f0: 30 80 00 2c b,a 40008aa0 <_Protected_heap_Allocate+0x164> { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 400089f4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400089f8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400089fc: 12 80 00 03 bne 40008a08 <_Protected_heap_Allocate+0xcc> <== NOT EXECUTED 40008a00: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40008a04: 30 80 00 27 b,a 40008aa0 <_Protected_heap_Allocate+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40008a08: 08 80 00 10 bleu 40008a48 <_Protected_heap_Allocate+0x10c> <== NOT EXECUTED 40008a0c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008a10: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008a14: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008a18: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008a1c: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40008a20: 7f ff e5 28 call 40001ec0 <== NOT EXECUTED 40008a24: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40008a28: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40008a2c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40008a30: 40 00 02 95 call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 40008a34: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40008a38: 7f ff ff b4 call 40008908 <_Thread_Enable_dispatch> <== NOT EXECUTED 40008a3c: 01 00 00 00 nop <== NOT EXECUTED p = _Heap_Allocate( the_heap, size ); 40008a40: 10 80 00 32 b 40008b08 <_Protected_heap_Allocate+0x1cc> <== NOT EXECUTED 40008a44: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40008a48: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008a4c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40008a50: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008a54: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40008a58: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008a5c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008a60: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008a64: 30 80 00 0f b,a 40008aa0 <_Protected_heap_Allocate+0x164> <== 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 ) ) { 40008a68: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40008a6c: 32 80 00 13 bne,a 40008ab8 <_Protected_heap_Allocate+0x17c> <== NOT EXECUTED 40008a70: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40008a74: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40019c50 <== NOT EXECUTED 40008a78: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008a7c: 22 80 00 07 be,a 40008a98 <_Protected_heap_Allocate+0x15c> <== NOT EXECUTED 40008a80: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008a84: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008a88: 32 80 00 0c bne,a 40008ab8 <_Protected_heap_Allocate+0x17c> <== NOT EXECUTED 40008a8c: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== 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; 40008a90: 10 80 00 08 b 40008ab0 <_Protected_heap_Allocate+0x174> <== NOT EXECUTED 40008a94: 82 10 20 02 mov 2, %g1 <== 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++; 40008a98: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008a9c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40008aa0: 7f ff e5 08 call 40001ec0 40008aa4: 90 10 00 11 mov %l1, %o0 40008aa8: 10 80 00 18 b 40008b08 <_Protected_heap_Allocate+0x1cc> 40008aac: 90 10 00 18 mov %i0, %o0 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40008ab0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40008ab4: 30 bf ff fb b,a 40008aa0 <_Protected_heap_Allocate+0x164> <== NOT EXECUTED size_t size ) { void *p; _RTEMS_Lock_allocator(); 40008ab8: c6 04 23 74 ld [ %l0 + 0x374 ], %g3 <== NOT EXECUTED 40008abc: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008ac0: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 40008ac4: c8 00 63 7c ld [ %g1 + 0x37c ], %g4 <== NOT EXECUTED 40008ac8: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008acc: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008ad0: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 40008ad4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008ad8: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED 40008adc: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40008ae0: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== 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; 40008ae4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008ae8: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40008aec: 7f ff e4 f5 call 40001ec0 <== NOT EXECUTED 40008af0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40008af4: d0 04 23 74 ld [ %l0 + 0x374 ], %o0 <== NOT EXECUTED 40008af8: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008afc: 7f ff fb 0f call 40007738 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008b00: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED p = _Heap_Allocate( the_heap, size ); 40008b04: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008b08: 7f ff fb fb call 40007af4 <_Heap_Allocate> 40008b0c: 92 10 00 19 mov %i1, %o1 40008b10: 05 10 00 67 sethi %hi(0x40019c00), %g2 40008b14: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40008b18: b0 10 00 08 mov %o0, %i0 40008b1c: 82 00 60 01 inc %g1 40008b20: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] _RTEMS_Unlock_allocator(); 40008b24: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008b28: d0 00 63 74 ld [ %g1 + 0x374 ], %o0 ! 40019f74 <_RTEMS_Allocator_Mutex> 40008b2c: 94 10 20 00 clr %o2 40008b30: d2 02 20 08 ld [ %o0 + 8 ], %o1 40008b34: 7f ff fb 23 call 400077c0 <_CORE_mutex_Surrender> 40008b38: 90 02 20 10 add %o0, 0x10, %o0 40008b3c: 7f ff ff 73 call 40008908 <_Thread_Enable_dispatch> 40008b40: 01 00 00 00 nop return p; } 40008b44: 81 c7 e0 08 ret 40008b48: 81 e8 00 00 restore 40008b80 <_Protected_heap_Extend>: boolean _Protected_heap_Extend( Heap_Control *the_heap, void *starting_address, size_t size ) { 40008b80: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 40008b84: 7f ff e4 cb call 40001eb0 <== NOT EXECUTED 40008b88: 01 00 00 00 nop <== NOT EXECUTED 40008b8c: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 40008b90: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008b94: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008b98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008b9c: 02 80 00 0b be 40008bc8 <_Protected_heap_Extend+0x48> <== NOT EXECUTED 40008ba0: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008ba4: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40008ba8: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> <== NOT EXECUTED 40008bac: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008bb0: 08 80 00 05 bleu 40008bc4 <_Protected_heap_Extend+0x44> <== NOT EXECUTED 40008bb4: 90 10 20 00 clr %o0 <== NOT EXECUTED 40008bb8: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008bbc: 7f ff fc f9 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40008bc0: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40008bc4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008bc8: e0 00 63 74 ld [ %g1 + 0x374 ], %l0 ! 40019f74 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40008bcc: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008bd0: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40008bd4: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40008bd8: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40008bdc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008be0: 22 80 00 33 be,a 40008cac <_Protected_heap_Extend+0x12c> <== NOT EXECUTED 40008be4: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40008be8: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008bec: 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; 40008bf0: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== 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; 40008bf4: 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; 40008bf8: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40008bfc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008c00: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 40008c04: 02 80 00 05 be 40008c18 <_Protected_heap_Extend+0x98> <== NOT EXECUTED 40008c08: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 40008c0c: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40008c10: 32 80 00 06 bne,a 40008c28 <_Protected_heap_Extend+0xa8> <== NOT EXECUTED 40008c14: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008c18: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008c1c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008c20: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008c24: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 40008c28: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40008c2c: 22 80 00 03 be,a 40008c38 <_Protected_heap_Extend+0xb8> <== NOT EXECUTED 40008c30: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40008c34: 30 80 00 2c b,a 40008ce4 <_Protected_heap_Extend+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 40008c38: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40008c3c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40008c40: 12 80 00 03 bne 40008c4c <_Protected_heap_Extend+0xcc> <== NOT EXECUTED 40008c44: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40008c48: 30 80 00 27 b,a 40008ce4 <_Protected_heap_Extend+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40008c4c: 08 80 00 10 bleu 40008c8c <_Protected_heap_Extend+0x10c> <== NOT EXECUTED 40008c50: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008c54: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008c58: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008c5c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008c60: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40008c64: 7f ff e4 97 call 40001ec0 <== NOT EXECUTED 40008c68: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40008c6c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40008c70: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40008c74: 40 00 02 04 call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 40008c78: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40008c7c: 7f ff ff b4 call 40008b4c <_Thread_Enable_dispatch> <== NOT EXECUTED 40008c80: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 40008c84: 10 80 00 32 b 40008d4c <_Protected_heap_Extend+0x1cc> <== NOT EXECUTED 40008c88: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40008c8c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008c90: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40008c94: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008c98: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40008c9c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008ca0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008ca4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008ca8: 30 80 00 0f b,a 40008ce4 <_Protected_heap_Extend+0x164> <== 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 ) ) { 40008cac: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40008cb0: 32 80 00 13 bne,a 40008cfc <_Protected_heap_Extend+0x17c> <== NOT EXECUTED 40008cb4: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40008cb8: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40019c50 <== NOT EXECUTED 40008cbc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008cc0: 22 80 00 07 be,a 40008cdc <_Protected_heap_Extend+0x15c> <== NOT EXECUTED 40008cc4: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008cc8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008ccc: 12 80 00 0c bne 40008cfc <_Protected_heap_Extend+0x17c> <== NOT EXECUTED 40008cd0: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== 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; 40008cd4: 10 80 00 08 b 40008cf4 <_Protected_heap_Extend+0x174> <== NOT EXECUTED 40008cd8: 82 10 20 02 mov 2, %g1 <== 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++; 40008cdc: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008ce0: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40008ce4: 7f ff e4 77 call 40001ec0 <== NOT EXECUTED 40008ce8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40008cec: 10 80 00 18 b 40008d4c <_Protected_heap_Extend+0x1cc> <== NOT EXECUTED 40008cf0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40008cf4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40008cf8: 30 bf ff fb b,a 40008ce4 <_Protected_heap_Extend+0x164> <== NOT EXECUTED ) { Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 40008cfc: c6 04 23 74 ld [ %l0 + 0x374 ], %g3 <== NOT EXECUTED 40008d00: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008d04: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 40008d08: c8 00 63 7c ld [ %g1 + 0x37c ], %g4 <== NOT EXECUTED 40008d0c: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008d10: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008d14: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 40008d18: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008d1c: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED 40008d20: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40008d24: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 40008d28: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008d2c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40008d30: 7f ff e4 64 call 40001ec0 <== NOT EXECUTED 40008d34: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40008d38: d0 04 23 74 ld [ %l0 + 0x374 ], %o0 <== NOT EXECUTED 40008d3c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008d40: 7f ff fa 7e call 40007738 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008d44: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 40008d48: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008d4c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40008d50: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40008d54: 40 00 10 e0 call 4000d0d4 <_Heap_Extend> <== NOT EXECUTED 40008d58: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED 40008d5c: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008d60: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008d64: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40008d68: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008d6c: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 40008d70: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008d74: d0 00 63 74 ld [ %g1 + 0x374 ], %o0 ! 40019f74 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 40008d78: 94 10 20 00 clr %o2 <== NOT EXECUTED 40008d7c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40008d80: 7f ff fa 90 call 400077c0 <_CORE_mutex_Surrender> <== NOT EXECUTED 40008d84: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40008d88: 7f ff ff 71 call 40008b4c <_Thread_Enable_dispatch> <== NOT EXECUTED 40008d8c: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_EXTEND_SUCCESSFUL); } 40008d90: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 40008d94: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 40008d98: 81 c7 e0 08 ret <== NOT EXECUTED 40008d9c: 81 e8 00 00 restore <== NOT EXECUTED 40008dd4 <_Protected_heap_Free>: boolean _Protected_heap_Free( Heap_Control *the_heap, void *start_address ) { 40008dd4: 9d e3 bf 98 save %sp, -104, %sp boolean status; _RTEMS_Lock_allocator(); 40008dd8: 7f ff e4 36 call 40001eb0 40008ddc: 01 00 00 00 nop 40008de0: a2 10 00 08 mov %o0, %l1 40008de4: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008de8: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40008dec: 80 a0 60 00 cmp %g1, 0 40008df0: 02 80 00 0b be 40008e1c <_Protected_heap_Free+0x48> 40008df4: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008df8: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40008dfc: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> <== NOT EXECUTED 40008e00: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008e04: 08 80 00 05 bleu 40008e18 <_Protected_heap_Free+0x44> <== NOT EXECUTED 40008e08: 90 10 20 00 clr %o0 <== NOT EXECUTED 40008e0c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008e10: 7f ff fc 64 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40008e14: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40008e18: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008e1c: e0 00 63 74 ld [ %g1 + 0x374 ], %l0 ! 40019f74 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40008e20: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008e24: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40008e28: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40008e2c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40008e30: 80 a0 60 00 cmp %g1, 0 40008e34: 22 80 00 33 be,a 40008f00 <_Protected_heap_Free+0x12c> 40008e38: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40008e3c: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40008e40: 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; 40008e44: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 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; 40008e48: 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; 40008e4c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40008e50: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40008e54: 80 a0 e0 02 cmp %g3, 2 40008e58: 02 80 00 05 be 40008e6c <_Protected_heap_Free+0x98> 40008e5c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 40008e60: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40008e64: 32 80 00 06 bne,a 40008e7c <_Protected_heap_Free+0xa8> <== NOT EXECUTED 40008e68: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40008e6c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 40008e70: 82 00 60 01 inc %g1 40008e74: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40008e78: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 40008e7c: 80 a0 60 03 cmp %g1, 3 40008e80: 22 80 00 03 be,a 40008e8c <_Protected_heap_Free+0xb8> 40008e84: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40008e88: 30 80 00 2c b,a 40008f38 <_Protected_heap_Free+0x164> { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 40008e8c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40008e90: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40008e94: 12 80 00 03 bne 40008ea0 <_Protected_heap_Free+0xcc> <== NOT EXECUTED 40008e98: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40008e9c: 30 80 00 27 b,a 40008f38 <_Protected_heap_Free+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40008ea0: 08 80 00 10 bleu 40008ee0 <_Protected_heap_Free+0x10c> <== NOT EXECUTED 40008ea4: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008ea8: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008eac: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008eb0: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008eb4: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40008eb8: 7f ff e4 02 call 40001ec0 <== NOT EXECUTED 40008ebc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40008ec0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40008ec4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40008ec8: 40 00 01 6f call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 40008ecc: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40008ed0: 7f ff ff b4 call 40008da0 <_Thread_Enable_dispatch> <== NOT EXECUTED 40008ed4: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Free( the_heap, start_address ); 40008ed8: 10 80 00 32 b 40008fa0 <_Protected_heap_Free+0x1cc> <== NOT EXECUTED 40008edc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40008ee0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008ee4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40008ee8: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40008eec: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40008ef0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40008ef4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40008ef8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40008efc: 30 80 00 0f b,a 40008f38 <_Protected_heap_Free+0x164> <== 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 ) ) { 40008f00: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40008f04: 32 80 00 13 bne,a 40008f50 <_Protected_heap_Free+0x17c> <== NOT EXECUTED 40008f08: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40008f0c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40019c50 <== NOT EXECUTED 40008f10: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40008f14: 22 80 00 07 be,a 40008f30 <_Protected_heap_Free+0x15c> <== NOT EXECUTED 40008f18: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40008f1c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40008f20: 32 80 00 0c bne,a 40008f50 <_Protected_heap_Free+0x17c> <== NOT EXECUTED 40008f24: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== 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; 40008f28: 10 80 00 08 b 40008f48 <_Protected_heap_Free+0x174> <== NOT EXECUTED 40008f2c: 82 10 20 02 mov 2, %g1 <== 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++; 40008f30: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008f34: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40008f38: 7f ff e3 e2 call 40001ec0 40008f3c: 90 10 00 11 mov %l1, %o0 40008f40: 10 80 00 18 b 40008fa0 <_Protected_heap_Free+0x1cc> 40008f44: 90 10 00 18 mov %i0, %o0 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40008f48: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40008f4c: 30 bf ff fb b,a 40008f38 <_Protected_heap_Free+0x164> <== NOT EXECUTED void *start_address ) { boolean status; _RTEMS_Lock_allocator(); 40008f50: c6 04 23 74 ld [ %l0 + 0x374 ], %g3 <== NOT EXECUTED 40008f54: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40008f58: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 40008f5c: c8 00 63 7c ld [ %g1 + 0x37c ], %g4 <== NOT EXECUTED 40008f60: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40008f64: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40008f68: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 40008f6c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40008f70: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED 40008f74: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40008f78: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 40008f7c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40008f80: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40008f84: 7f ff e3 cf call 40001ec0 <== NOT EXECUTED 40008f88: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40008f8c: d0 04 23 74 ld [ %l0 + 0x374 ], %o0 <== NOT EXECUTED 40008f90: 92 10 20 00 clr %o1 <== NOT EXECUTED 40008f94: 7f ff f9 e9 call 40007738 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40008f98: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Free( the_heap, start_address ); 40008f9c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40008fa0: 7f ff fa fc call 40007b90 <_Heap_Free> 40008fa4: 92 10 00 19 mov %i1, %o1 40008fa8: 05 10 00 67 sethi %hi(0x40019c00), %g2 40008fac: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40008fb0: b0 10 00 08 mov %o0, %i0 40008fb4: 82 00 60 01 inc %g1 40008fb8: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] _RTEMS_Unlock_allocator(); 40008fbc: 03 10 00 67 sethi %hi(0x40019c00), %g1 40008fc0: d0 00 63 74 ld [ %g1 + 0x374 ], %o0 ! 40019f74 <_RTEMS_Allocator_Mutex> 40008fc4: 94 10 20 00 clr %o2 40008fc8: d2 02 20 08 ld [ %o0 + 8 ], %o1 40008fcc: 7f ff f9 fd call 400077c0 <_CORE_mutex_Surrender> 40008fd0: 90 02 20 10 add %o0, 0x10, %o0 40008fd4: 7f ff ff 73 call 40008da0 <_Thread_Enable_dispatch> 40008fd8: 01 00 00 00 nop return status; } 40008fdc: 81 c7 e0 08 ret 40008fe0: 81 e8 00 00 restore 40009018 <_Protected_heap_Get_block_size>: boolean _Protected_heap_Get_block_size( Heap_Control *the_heap, void *starting_address, size_t *size ) { 40009018: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED boolean status; _RTEMS_Lock_allocator(); 4000901c: 7f ff e3 a5 call 40001eb0 <== NOT EXECUTED 40009020: 01 00 00 00 nop <== NOT EXECUTED 40009024: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 40009028: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000902c: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009030: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009034: 02 80 00 0b be 40009060 <_Protected_heap_Get_block_size+0x48> <== NOT EXECUTED 40009038: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000903c: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40009040: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> <== NOT EXECUTED 40009044: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40009048: 08 80 00 05 bleu 4000905c <_Protected_heap_Get_block_size+0x44> <== NOT EXECUTED 4000904c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40009050: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009054: 7f ff fb d3 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40009058: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4000905c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009060: e0 00 63 74 ld [ %g1 + 0x374 ], %l0 ! 40019f74 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40009064: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009068: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4000906c: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40009070: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40009074: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009078: 22 80 00 33 be,a 40009144 <_Protected_heap_Get_block_size+0x12c> <== NOT EXECUTED 4000907c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40009080: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40009084: 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; 40009088: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== 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; 4000908c: 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; 40009090: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40009094: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40009098: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 4000909c: 02 80 00 05 be 400090b0 <_Protected_heap_Get_block_size+0x98> <== NOT EXECUTED 400090a0: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 400090a4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400090a8: 32 80 00 06 bne,a 400090c0 <_Protected_heap_Get_block_size+0xa8> <== NOT EXECUTED 400090ac: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400090b0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400090b4: 82 00 60 01 inc %g1 <== NOT EXECUTED 400090b8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400090bc: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 400090c0: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 400090c4: 22 80 00 03 be,a 400090d0 <_Protected_heap_Get_block_size+0xb8> <== NOT EXECUTED 400090c8: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 400090cc: 30 80 00 2c b,a 4000917c <_Protected_heap_Get_block_size+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 400090d0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400090d4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400090d8: 12 80 00 03 bne 400090e4 <_Protected_heap_Get_block_size+0xcc> <== NOT EXECUTED 400090dc: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 400090e0: 30 80 00 27 b,a 4000917c <_Protected_heap_Get_block_size+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 400090e4: 08 80 00 10 bleu 40009124 <_Protected_heap_Get_block_size+0x10c> <== NOT EXECUTED 400090e8: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400090ec: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 400090f0: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400090f4: 82 00 60 01 inc %g1 <== NOT EXECUTED 400090f8: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400090fc: 7f ff e3 71 call 40001ec0 <== NOT EXECUTED 40009100: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40009104: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40009108: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 4000910c: 40 00 00 de call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 40009110: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40009114: 7f ff ff b4 call 40008fe4 <_Thread_Enable_dispatch> <== NOT EXECUTED 40009118: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 4000911c: 10 80 00 32 b 400091e4 <_Protected_heap_Get_block_size+0x1cc> <== NOT EXECUTED 40009120: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40009124: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009128: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000912c: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009130: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40009134: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009138: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000913c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40009140: 30 80 00 0f b,a 4000917c <_Protected_heap_Get_block_size+0x164> <== 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 ) ) { 40009144: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40009148: 32 80 00 13 bne,a 40009194 <_Protected_heap_Get_block_size+0x17c> <== NOT EXECUTED 4000914c: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40009150: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40019c50 <== NOT EXECUTED 40009154: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009158: 22 80 00 07 be,a 40009174 <_Protected_heap_Get_block_size+0x15c> <== NOT EXECUTED 4000915c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40009160: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40009164: 32 80 00 0c bne,a 40009194 <_Protected_heap_Get_block_size+0x17c> <== NOT EXECUTED 40009168: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== 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; 4000916c: 10 80 00 08 b 4000918c <_Protected_heap_Get_block_size+0x174> <== NOT EXECUTED 40009170: 82 10 20 02 mov 2, %g1 <== 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++; 40009174: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009178: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 4000917c: 7f ff e3 51 call 40001ec0 <== NOT EXECUTED 40009180: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40009184: 10 80 00 18 b 400091e4 <_Protected_heap_Get_block_size+0x1cc> <== NOT EXECUTED 40009188: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 4000918c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40009190: 30 bf ff fb b,a 4000917c <_Protected_heap_Get_block_size+0x164> <== NOT EXECUTED size_t *size ) { boolean status; _RTEMS_Lock_allocator(); 40009194: c6 04 23 74 ld [ %l0 + 0x374 ], %g3 <== NOT EXECUTED 40009198: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000919c: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 400091a0: c8 00 63 7c ld [ %g1 + 0x37c ], %g4 <== NOT EXECUTED 400091a4: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 400091a8: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400091ac: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 400091b0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400091b4: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED 400091b8: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 400091bc: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 400091c0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400091c4: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 400091c8: 7f ff e3 3e call 40001ec0 <== NOT EXECUTED 400091cc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400091d0: d0 04 23 74 ld [ %l0 + 0x374 ], %o0 <== NOT EXECUTED 400091d4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400091d8: 7f ff f9 58 call 40007738 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 400091dc: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 400091e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400091e4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 400091e8: 40 00 10 75 call 4000d3bc <_Heap_Size_of_user_area> <== NOT EXECUTED 400091ec: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 400091f0: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 400091f4: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400091f8: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 400091fc: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009200: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 40009204: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009208: d0 00 63 74 ld [ %g1 + 0x374 ], %o0 ! 40019f74 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 4000920c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40009210: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40009214: 7f ff f9 6b call 400077c0 <_CORE_mutex_Surrender> <== NOT EXECUTED 40009218: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 4000921c: 7f ff ff 72 call 40008fe4 <_Thread_Enable_dispatch> <== NOT EXECUTED 40009220: 01 00 00 00 nop <== NOT EXECUTED return status; } 40009224: 81 c7 e0 08 ret <== NOT EXECUTED 40009228: 81 e8 00 00 restore <== NOT EXECUTED 4000c7e0 <_Protected_heap_Get_free_information>: void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { 4000c7e0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _RTEMS_Lock_allocator(); 4000c7e4: 7f ff dd 4b call 40003d10 <== NOT EXECUTED 4000c7e8: 01 00 00 00 nop <== NOT EXECUTED 4000c7ec: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 4000c7f0: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 4000c7f4: c2 00 63 60 ld [ %g1 + 0x360 ], %g1 ! 4003a760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000c7f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c7fc: 02 80 00 0b be 4000c828 <_Protected_heap_Get_free_information+0x48> <== NOT EXECUTED 4000c800: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4000c804: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4000c808: c2 00 61 40 ld [ %g1 + 0x140 ], %g1 ! 4003a940 <_System_state_Current> <== NOT EXECUTED 4000c80c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000c810: 08 80 00 05 bleu 4000c824 <_Protected_heap_Get_free_information+0x44> <== NOT EXECUTED 4000c814: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000c818: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c81c: 7f ff fb 80 call 4000b61c <_Internal_error_Occurred> <== NOT EXECUTED 4000c820: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4000c824: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4000c828: e0 00 60 34 ld [ %g1 + 0x34 ], %l0 ! 4003a834 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 4000c82c: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4000c830: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 4003a83c <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4000c834: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 4000c838: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 4000c83c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c840: 22 80 00 33 be,a 4000c90c <_Protected_heap_Get_free_information+0x12c> <== NOT EXECUTED 4000c844: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 4000c848: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000c84c: 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; 4000c850: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== 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; 4000c854: 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; 4000c858: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4000c85c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000c860: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 4000c864: 02 80 00 05 be 4000c878 <_Protected_heap_Get_free_information+0x98> <== NOT EXECUTED 4000c868: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 4000c86c: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000c870: 32 80 00 06 bne,a 4000c888 <_Protected_heap_Get_free_information+0xa8> <== NOT EXECUTED 4000c874: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000c878: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000c87c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c880: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000c884: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 4000c888: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000c88c: 22 80 00 03 be,a 4000c898 <_Protected_heap_Get_free_information+0xb8> <== NOT EXECUTED 4000c890: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 4000c894: 30 80 00 2c b,a 4000c944 <_Protected_heap_Get_free_information+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 4000c898: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 4000c89c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000c8a0: 12 80 00 03 bne 4000c8ac <_Protected_heap_Get_free_information+0xcc> <== NOT EXECUTED 4000c8a4: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 4000c8a8: 30 80 00 27 b,a 4000c944 <_Protected_heap_Get_free_information+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 4000c8ac: 08 80 00 10 bleu 4000c8ec <_Protected_heap_Get_free_information+0x10c> <== NOT EXECUTED 4000c8b0: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000c8b4: 05 10 00 e9 sethi %hi(0x4003a400), %g2 <== NOT EXECUTED 4000c8b8: c2 00 a3 60 ld [ %g2 + 0x360 ], %g1 ! 4003a760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000c8bc: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c8c0: c2 20 a3 60 st %g1, [ %g2 + 0x360 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 4000c8c4: 7f ff dd 17 call 40003d20 <== NOT EXECUTED 4000c8c8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 4000c8cc: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 4000c8d0: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 4000c8d4: 40 00 00 db call 4000cc40 <_Thread_Change_priority> <== NOT EXECUTED 4000c8d8: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 4000c8dc: 7f ff ff b4 call 4000c7ac <_Thread_Enable_dispatch> <== NOT EXECUTED 4000c8e0: 01 00 00 00 nop <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 4000c8e4: 10 80 00 32 b 4000c9ac <_Protected_heap_Get_free_information+0x1cc> <== NOT EXECUTED 4000c8e8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 4000c8ec: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 4000c8f0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000c8f4: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 4000c8f8: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 4000c8fc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000c900: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000c904: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000c908: 30 80 00 0f b,a 4000c944 <_Protected_heap_Get_free_information+0x164> <== 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 ) ) { 4000c90c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000c910: 32 80 00 13 bne,a 4000c95c <_Protected_heap_Get_free_information+0x17c> <== NOT EXECUTED 4000c914: 21 10 00 ea sethi %hi(0x4003a800), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4000c918: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 4003a850 <_Watchdog_Seconds_chain> <== NOT EXECUTED 4000c91c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c920: 22 80 00 07 be,a 4000c93c <_Protected_heap_Get_free_information+0x15c> <== NOT EXECUTED 4000c924: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 4000c928: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000c92c: 32 80 00 0c bne,a 4000c95c <_Protected_heap_Get_free_information+0x17c> <== NOT EXECUTED 4000c930: 21 10 00 ea sethi %hi(0x4003a800), %l0 <== 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; 4000c934: 10 80 00 08 b 4000c954 <_Protected_heap_Get_free_information+0x174> <== NOT EXECUTED 4000c938: 82 10 20 02 mov 2, %g1 <== 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++; 4000c93c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c940: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 4000c944: 7f ff dc f7 call 40003d20 <== NOT EXECUTED 4000c948: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000c94c: 10 80 00 18 b 4000c9ac <_Protected_heap_Get_free_information+0x1cc> <== NOT EXECUTED 4000c950: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 4000c954: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4000c958: 30 bf ff fb b,a 4000c944 <_Protected_heap_Get_free_information+0x164> <== NOT EXECUTED void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { _RTEMS_Lock_allocator(); 4000c95c: c6 04 20 34 ld [ %l0 + 0x34 ], %g3 <== NOT EXECUTED 4000c960: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4000c964: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 4000c968: c8 00 60 3c ld [ %g1 + 0x3c ], %g4 <== NOT EXECUTED 4000c96c: 05 10 00 e9 sethi %hi(0x4003a400), %g2 <== NOT EXECUTED 4000c970: c2 00 a3 60 ld [ %g2 + 0x360 ], %g1 ! 4003a760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000c974: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 4000c978: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c97c: c2 20 a3 60 st %g1, [ %g2 + 0x360 ] <== NOT EXECUTED 4000c980: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 4000c984: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 4000c988: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 4000c98c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 4000c990: 7f ff dc e4 call 40003d20 <== NOT EXECUTED 4000c994: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000c998: d0 04 20 34 ld [ %l0 + 0x34 ], %o0 <== NOT EXECUTED 4000c99c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c9a0: 7f ff f9 05 call 4000adb4 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 4000c9a4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 4000c9a8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c9ac: 40 00 33 2e call 40019664 <_Heap_Get_free_information> <== NOT EXECUTED 4000c9b0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000c9b4: 05 10 00 e9 sethi %hi(0x4003a400), %g2 <== NOT EXECUTED 4000c9b8: c2 00 a3 60 ld [ %g2 + 0x360 ], %g1 ! 4003a760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000c9bc: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c9c0: c2 20 a3 60 st %g1, [ %g2 + 0x360 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 4000c9c4: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4000c9c8: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 ! 4003a834 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 4000c9cc: 94 10 20 00 clr %o2 <== NOT EXECUTED 4000c9d0: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4000c9d4: 7f ff f9 1a call 4000ae3c <_CORE_mutex_Surrender> <== NOT EXECUTED 4000c9d8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 4000c9dc: 7f ff ff 74 call 4000c7ac <_Thread_Enable_dispatch> <== NOT EXECUTED 4000c9e0: 81 e8 00 00 restore <== NOT EXECUTED 4000c9e4: 01 00 00 00 nop 40009260 <_Protected_heap_Resize_block>: boolean _Protected_heap_Resize_block( Heap_Control *the_heap, void *starting_address, size_t size ) { 40009260: 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(); 40009264: 7f ff e3 13 call 40001eb0 <== NOT EXECUTED 40009268: 01 00 00 00 nop <== NOT EXECUTED 4000926c: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 40009270: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009274: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009278: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000927c: 02 80 00 0b be 400092a8 <_Protected_heap_Resize_block+0x48> <== NOT EXECUTED 40009280: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009284: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40009288: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> <== NOT EXECUTED 4000928c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40009290: 08 80 00 05 bleu 400092a4 <_Protected_heap_Resize_block+0x44> <== NOT EXECUTED 40009294: 90 10 20 00 clr %o0 <== NOT EXECUTED 40009298: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000929c: 7f ff fb 41 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 400092a0: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400092a4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400092a8: e0 00 63 74 ld [ %g1 + 0x374 ], %l0 ! 40019f74 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400092ac: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400092b0: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400092b4: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400092b8: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 400092bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400092c0: 22 80 00 33 be,a 4000938c <_Protected_heap_Resize_block+0x12c> <== NOT EXECUTED 400092c4: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400092c8: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400092cc: 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; 400092d0: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== 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; 400092d4: 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; 400092d8: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 400092dc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400092e0: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 400092e4: 02 80 00 05 be 400092f8 <_Protected_heap_Resize_block+0x98> <== NOT EXECUTED 400092e8: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 400092ec: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400092f0: 32 80 00 06 bne,a 40009308 <_Protected_heap_Resize_block+0xa8> <== NOT EXECUTED 400092f4: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400092f8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400092fc: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009300: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009304: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 40009308: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000930c: 22 80 00 03 be,a 40009318 <_Protected_heap_Resize_block+0xb8> <== NOT EXECUTED 40009310: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40009314: 30 80 00 2c b,a 400093c4 <_Protected_heap_Resize_block+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 40009318: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 4000931c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40009320: 12 80 00 03 bne 4000932c <_Protected_heap_Resize_block+0xcc> <== NOT EXECUTED 40009324: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40009328: 30 80 00 27 b,a 400093c4 <_Protected_heap_Resize_block+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 4000932c: 08 80 00 10 bleu 4000936c <_Protected_heap_Resize_block+0x10c> <== NOT EXECUTED 40009330: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009334: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40009338: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000933c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009340: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40009344: 7f ff e2 df call 40001ec0 <== NOT EXECUTED 40009348: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 4000934c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40009350: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40009354: 40 00 00 4c call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 40009358: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 4000935c: 7f ff ff b4 call 4000922c <_Thread_Enable_dispatch> <== NOT EXECUTED 40009360: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Resize_block( 40009364: 10 80 00 32 b 4000942c <_Protected_heap_Resize_block+0x1cc> <== NOT EXECUTED 40009368: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 4000936c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009370: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40009374: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009378: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 4000937c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009380: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009384: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40009388: 30 80 00 0f b,a 400093c4 <_Protected_heap_Resize_block+0x164> <== 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 ) ) { 4000938c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40009390: 32 80 00 13 bne,a 400093dc <_Protected_heap_Resize_block+0x17c> <== NOT EXECUTED 40009394: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40009398: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40019c50 <== NOT EXECUTED 4000939c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400093a0: 22 80 00 07 be,a 400093bc <_Protected_heap_Resize_block+0x15c> <== NOT EXECUTED 400093a4: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400093a8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400093ac: 12 80 00 0c bne 400093dc <_Protected_heap_Resize_block+0x17c> <== NOT EXECUTED 400093b0: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== 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; 400093b4: 10 80 00 08 b 400093d4 <_Protected_heap_Resize_block+0x174> <== NOT EXECUTED 400093b8: 82 10 20 02 mov 2, %g1 <== 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++; 400093bc: 82 00 60 01 inc %g1 <== NOT EXECUTED 400093c0: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400093c4: 7f ff e2 bf call 40001ec0 <== NOT EXECUTED 400093c8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400093cc: 10 80 00 18 b 4000942c <_Protected_heap_Resize_block+0x1cc> <== NOT EXECUTED 400093d0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400093d4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400093d8: 30 bf ff fb b,a 400093c4 <_Protected_heap_Resize_block+0x164> <== NOT EXECUTED { Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); 400093dc: c6 04 23 74 ld [ %l0 + 0x374 ], %g3 <== NOT EXECUTED 400093e0: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400093e4: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 400093e8: c8 00 63 7c ld [ %g1 + 0x37c ], %g4 <== NOT EXECUTED 400093ec: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 400093f0: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400093f4: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 400093f8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400093fc: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED 40009400: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40009404: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 40009408: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 4000940c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40009410: 7f ff e2 ac call 40001ec0 <== NOT EXECUTED 40009414: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40009418: d0 04 23 74 ld [ %l0 + 0x374 ], %o0 <== NOT EXECUTED 4000941c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009420: 7f ff f8 c6 call 40007738 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40009424: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Resize_block( 40009428: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000942c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40009430: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40009434: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED 40009438: 40 00 0f 58 call 4000d198 <_Heap_Resize_block> <== NOT EXECUTED 4000943c: 98 07 bf f0 add %fp, -16, %o4 <== NOT EXECUTED 40009440: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 40009444: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009448: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4000944c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009450: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED the_heap, starting_address, size, &old_mem_size, &avail_mem_size ); _RTEMS_Unlock_allocator(); 40009454: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009458: d0 00 63 74 ld [ %g1 + 0x374 ], %o0 ! 40019f74 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 4000945c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40009460: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40009464: 7f ff f8 d7 call 400077c0 <_CORE_mutex_Surrender> <== NOT EXECUTED 40009468: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 4000946c: 7f ff ff 70 call 4000922c <_Thread_Enable_dispatch> <== NOT EXECUTED 40009470: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_RESIZE_SUCCESSFUL); } 40009474: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 40009478: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 4000947c: 81 c7 e0 08 ret <== NOT EXECUTED 40009480: 81 e8 00 00 restore <== NOT EXECUTED 4000ce78 <_RTEMS_tasks_Delete_extension>: User_extensions_routine _RTEMS_tasks_Delete_extension( Thread_Control *executing, Thread_Control *deleted ) { 4000ce78: 9d e3 bf 98 save %sp, -104, %sp /* * Free per task variable memory */ tvp = deleted->task_variables; 4000ce7c: e0 06 61 7c ld [ %i1 + 0x17c ], %l0 deleted->task_variables = NULL; while (tvp) { next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { 4000ce80: 25 10 00 67 sethi %hi(0x40019c00), %l2 /* * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; 4000ce84: 10 80 00 18 b 4000cee4 <_RTEMS_tasks_Delete_extension+0x6c> 4000ce88: c0 26 61 7c clr [ %i1 + 0x17c ] 4000ce8c: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 <== NOT EXECUTED while (tvp) { next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { 4000ce90: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4000ce94: 12 80 00 0c bne 4000cec4 <_RTEMS_tasks_Delete_extension+0x4c> <== NOT EXECUTED 4000ce98: e2 04 00 00 ld [ %l0 ], %l1 <== NOT EXECUTED if (tvp->dtor) 4000ce9c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000cea0: 22 80 00 06 be,a 4000ceb8 <_RTEMS_tasks_Delete_extension+0x40> <== NOT EXECUTED 4000cea4: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED (*tvp->dtor)(*tvp->ptr); 4000cea8: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 4000ceac: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000ceb0: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 4000ceb4: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 4000ceb8: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000cebc: 10 80 00 07 b 4000ced8 <_RTEMS_tasks_Delete_extension+0x60> <== NOT EXECUTED 4000cec0: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED } else { if (tvp->dtor) 4000cec4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000cec8: 02 80 00 05 be 4000cedc <_RTEMS_tasks_Delete_extension+0x64> <== NOT EXECUTED 4000cecc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 4000ced0: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000ced4: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED } _Workspace_Free( tvp ); 4000ced8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000cedc: 7f ff ff e0 call 4000ce5c <_Workspace_Free> <== NOT EXECUTED 4000cee0: a0 10 00 11 mov %l1, %l0 <== NOT EXECUTED * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; while (tvp) { 4000cee4: 80 a4 20 00 cmp %l0, 0 4000cee8: 12 bf ff e9 bne 4000ce8c <_RTEMS_tasks_Delete_extension+0x14> 4000ceec: c2 04 a3 7c ld [ %l2 + 0x37c ], %g1 /* * Free API specific memory */ (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] ); 4000cef0: 7f ff ff db call 4000ce5c <_Workspace_Free> 4000cef4: d0 06 61 6c ld [ %i1 + 0x16c ], %o0 deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL; 4000cef8: c0 26 61 6c clr [ %i1 + 0x16c ] } 4000cefc: 81 c7 e0 08 ret 4000cf00: 81 e8 00 00 restore 40006ebc <_RTEMS_tasks_Initialize_user_tasks_body>: * * Output parameters: NONE */ void _RTEMS_tasks_Initialize_user_tasks_body( void ) { 40006ebc: 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; 40006ec0: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006ec4: c2 00 63 60 ld [ %g1 + 0x360 ], %g1 ! 40019f60 <_Configuration_Table> 40006ec8: c2 00 60 2c ld [ %g1 + 0x2c ], %g1 /* * NOTE: This is slightly different from the Ada implementation. */ user_tasks = api_configuration->User_initialization_tasks_table; 40006ecc: d0 00 60 28 ld [ %g1 + 0x28 ], %o0 maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) 40006ed0: 80 a2 20 00 cmp %o0, 0 40006ed4: 02 80 00 25 be 40006f68 <_RTEMS_tasks_Initialize_user_tasks_body+0xac> 40006ed8: e4 00 60 24 ld [ %g1 + 0x24 ], %l2 40006edc: 80 a4 a0 00 cmp %l2, 0 40006ee0: 02 80 00 22 be 40006f68 <_RTEMS_tasks_Initialize_user_tasks_body+0xac> 40006ee4: a0 10 00 08 mov %o0, %l0 return; 40006ee8: a2 10 20 00 clr %l1 for ( index=0 ; index < maximum ; index++ ) { return_value = rtems_task_create( 40006eec: 10 80 00 1c b 40006f5c <_RTEMS_tasks_Initialize_user_tasks_body+0xa0> 40006ef0: a6 07 bf f4 add %fp, -12, %l3 40006ef4: d6 04 20 14 ld [ %l0 + 0x14 ], %o3 40006ef8: d8 04 20 0c ld [ %l0 + 0xc ], %o4 40006efc: d2 04 20 08 ld [ %l0 + 8 ], %o1 40006f00: d4 04 20 04 ld [ %l0 + 4 ], %o2 40006f04: d0 04 00 00 ld [ %l0 ], %o0 40006f08: 7f ff ff 34 call 40006bd8 40006f0c: a2 04 60 01 inc %l1 user_tasks[ index ].mode_set, user_tasks[ index ].attribute_set, &id ); if ( !rtems_is_status_successful( return_value ) ) 40006f10: 80 a2 20 00 cmp %o0, 0 40006f14: 22 80 00 07 be,a 40006f30 <_RTEMS_tasks_Initialize_user_tasks_body+0x74> 40006f18: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 40006f1c: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40006f20: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40006f24: 40 00 04 1f call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40006f28: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED return_value = rtems_task_start( 40006f2c: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 40006f30: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 40006f34: d0 07 bf f4 ld [ %fp + -12 ], %o0 40006f38: 40 00 00 1b call 40006fa4 40006f3c: a0 04 20 1c add %l0, 0x1c, %l0 id, user_tasks[ index ].entry_point, user_tasks[ index ].argument ); if ( !rtems_is_status_successful( return_value ) ) 40006f40: 80 a2 20 00 cmp %o0, 0 40006f44: 02 80 00 07 be 40006f60 <_RTEMS_tasks_Initialize_user_tasks_body+0xa4> 40006f48: 80 a4 40 12 cmp %l1, %l2 _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 40006f4c: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40006f50: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40006f54: 40 00 04 13 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40006f58: 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++ ) { 40006f5c: 80 a4 40 12 cmp %l1, %l2 40006f60: 12 bf ff e5 bne 40006ef4 <_RTEMS_tasks_Initialize_user_tasks_body+0x38> 40006f64: 9a 10 00 13 mov %l3, %o5 40006f68: 81 c7 e0 08 ret 40006f6c: 81 e8 00 00 restore 40007acc <_Rate_monotonic_Timeout>: void _Rate_monotonic_Timeout( Objects_Id id, void *ignored ) { 40007acc: 9d e3 bf 90 save %sp, -112, %sp 40007ad0: 11 10 00 78 sethi %hi(0x4001e000), %o0 40007ad4: 92 10 00 18 mov %i0, %o1 40007ad8: 90 12 23 fc or %o0, 0x3fc, %o0 40007adc: 40 00 09 38 call 40009fbc <_Objects_Get> 40007ae0: 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 ) { 40007ae4: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007ae8: 80 a0 60 00 cmp %g1, 0 40007aec: 12 80 00 20 bne 40007b6c <_Rate_monotonic_Timeout+0xa0> 40007af0: b0 10 00 08 mov %o0, %i0 case OBJECTS_REMOTE: /* impossible */ case OBJECTS_ERROR: break; case OBJECTS_LOCAL: the_thread = the_period->owner; 40007af4: d0 02 20 50 ld [ %o0 + 0x50 ], %o0 if ( _States_Is_waiting_for_period( the_thread->current_state ) && 40007af8: 03 00 00 10 sethi %hi(0x4000), %g1 40007afc: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 40007b00: 80 88 80 01 btst %g2, %g1 40007b04: 22 80 00 0c be,a 40007b34 <_Rate_monotonic_Timeout+0x68> 40007b08: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 40007b0c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40007b10: c2 06 20 08 ld [ %i0 + 8 ], %g1 40007b14: 80 a0 80 01 cmp %g2, %g1 40007b18: 32 80 00 07 bne,a 40007b34 <_Rate_monotonic_Timeout+0x68> 40007b1c: 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 ); 40007b20: 13 04 00 ff sethi %hi(0x1003fc00), %o1 40007b24: 40 00 0d 60 call 4000b0a4 <_Thread_Clear_state> 40007b28: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 the_thread->Wait.id == the_period->Object.id ) { _Thread_Unblock( the_thread ); _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); 40007b2c: 10 80 00 08 b 40007b4c <_Rate_monotonic_Timeout+0x80> 40007b30: d2 06 20 4c ld [ %i0 + 0x4c ], %o1 } else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) { 40007b34: 80 a0 60 01 cmp %g1, 1 40007b38: 12 80 00 08 bne 40007b58 <_Rate_monotonic_Timeout+0x8c> 40007b3c: 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 ); 40007b40: d2 06 20 4c ld [ %i0 + 0x4c ], %o1 <== 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; 40007b44: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 40007b48: c2 26 20 38 st %g1, [ %i0 + 0x38 ] <== NOT EXECUTED _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); 40007b4c: 7f ff ff d8 call 40007aac <_Watchdog_Insert_ticks> 40007b50: 90 06 20 10 add %i0, 0x10, %o0 40007b54: 30 80 00 02 b,a 40007b5c <_Rate_monotonic_Timeout+0x90> } else the_period->state = RATE_MONOTONIC_EXPIRED; 40007b58: 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; 40007b5c: 05 10 00 79 sethi %hi(0x4001e400), %g2 40007b60: c2 00 a1 90 ld [ %g2 + 0x190 ], %g1 ! 4001e590 <_Thread_Dispatch_disable_level> 40007b64: 82 00 7f ff add %g1, -1, %g1 40007b68: c2 20 a1 90 st %g1, [ %g2 + 0x190 ] 40007b6c: 81 c7 e0 08 ret 40007b70: 81 e8 00 00 restore 400093a4 <_TOD_Set>: */ void _TOD_Set( const struct timespec *time ) { 400093a4: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400093a8: 03 10 00 98 sethi %hi(0x40026000), %g1 400093ac: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 400263b0 <_Thread_Dispatch_disable_level> 400093b0: 84 00 a0 01 inc %g2 400093b4: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] _Thread_Disable_dispatch(); _TOD_Deactivate(); if ( time->tv_sec < _TOD_Seconds_since_epoch ) 400093b8: 03 10 00 99 sethi %hi(0x40026400), %g1 400093bc: d2 06 00 00 ld [ %i0 ], %o1 400093c0: c2 00 60 68 ld [ %g1 + 0x68 ], %g1 400093c4: 80 a2 40 01 cmp %o1, %g1 400093c8: 36 80 00 05 bge,a 400093dc <_TOD_Set+0x38> 400093cc: 92 22 40 01 sub %o1, %g1, %o1 _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, 400093d0: 92 20 40 09 sub %g1, %o1, %o1 400093d4: 10 80 00 03 b 400093e0 <_TOD_Set+0x3c> 400093d8: 90 10 20 01 mov 1, %o0 _TOD_Seconds_since_epoch - time->tv_sec ); else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, 400093dc: 90 10 20 00 clr %o0 400093e0: 7f ff ff e9 call 40009384 <_Watchdog_Adjust_seconds> 400093e4: 01 00 00 00 nop time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 400093e8: c4 06 00 00 ld [ %i0 ], %g2 400093ec: 03 10 00 99 sethi %hi(0x40026400), %g1 400093f0: c4 20 60 68 st %g2, [ %g1 + 0x68 ] ! 40026468 <_TOD_Now> 400093f4: c4 06 20 04 ld [ %i0 + 4 ], %g2 400093f8: 82 10 60 68 or %g1, 0x68, %g1 400093fc: c4 20 60 04 st %g2, [ %g1 + 4 ] _TOD_Is_set = TRUE; 40009400: 84 10 20 01 mov 1, %g2 40009404: 03 10 00 98 sethi %hi(0x40026000), %g1 40009408: c4 20 63 ec st %g2, [ %g1 + 0x3ec ] ! 400263ec <_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 ) 4000940c: 05 10 00 98 sethi %hi(0x40026000), %g2 40009410: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 400263b0 <_Thread_Dispatch_disable_level> 40009414: 82 00 7f ff add %g1, -1, %g1 40009418: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 4000941c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 40009420: 80 a0 60 00 cmp %g1, 0 40009424: 12 80 00 04 bne 40009434 <_TOD_Set+0x90> 40009428: 01 00 00 00 nop _Thread_Dispatch(); 4000942c: 40 00 07 e1 call 4000b3b0 <_Thread_Dispatch> <== NOT EXECUTED 40009430: 81 e8 00 00 restore <== NOT EXECUTED 40009434: 81 c7 e0 08 ret 40009438: 81 e8 00 00 restore 400097c4 <_Thread_Create_idle>: */ const char *_Thread_Idle_name = "IDLE"; void _Thread_Create_idle( void ) { 400097c4: 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 ); 400097c8: 11 10 00 68 sethi %hi(0x4001a000), %o0 400097cc: 7f ff fa 22 call 40008054 <_Objects_Allocate> 400097d0: 90 12 20 30 or %o0, 0x30, %o0 ! 4001a030 <_Thread_Internal_information> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 400097d4: 03 10 00 67 sethi %hi(0x40019c00), %g1 400097d8: c4 00 62 c0 ld [ %g1 + 0x2c0 ], %g2 ! 40019ec0 <_CPU_Table+0xc> * 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(); 400097dc: 03 10 00 68 sethi %hi(0x4001a000), %g1 400097e0: d0 20 60 88 st %o0, [ %g1 + 0x88 ] ! 4001a088 <_Thread_Idle> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 400097e4: 80 a0 a0 00 cmp %g2, 0 400097e8: 03 10 00 26 sethi %hi(0x40009800), %g1 400097ec: 02 80 00 03 be 400097f8 <_Thread_Create_idle+0x34> 400097f0: b4 10 62 74 or %g1, 0x274, %i2 ! 40009a74 <_Thread_Idle_body> idle = _CPU_Table.idle_task; 400097f4: b4 10 00 02 mov %g2, %i2 <== NOT EXECUTED idle_task_stack_size = _CPU_Table.idle_task_stack_size; 400097f8: 03 10 00 67 sethi %hi(0x40019c00), %g1 400097fc: d6 00 62 c8 ld [ %g1 + 0x2c8 ], %o3 ! 40019ec8 <_CPU_Table+0x14> if ( idle_task_stack_size < STACK_MINIMUM_SIZE ) 40009800: 80 a2 ef ff cmp %o3, 0xfff 40009804: 28 80 00 02 bleu,a 4000980c <_Thread_Create_idle+0x48> 40009808: 17 00 00 04 sethi %hi(0x1000), %o3 idle_task_stack_size = STACK_MINIMUM_SIZE; _Thread_Initialize( 4000980c: 03 10 00 64 sethi %hi(0x40019000), %g1 40009810: c2 00 62 a8 ld [ %g1 + 0x2a8 ], %g1 ! 400192a8 <_Thread_Idle_name> 40009814: 92 10 00 08 mov %o0, %o1 40009818: c2 23 a0 6c st %g1, [ %sp + 0x6c ] 4000981c: 82 10 20 01 mov 1, %g1 40009820: c0 23 a0 60 clr [ %sp + 0x60 ] 40009824: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40009828: c0 23 a0 64 clr [ %sp + 0x64 ] 4000982c: c0 23 a0 68 clr [ %sp + 0x68 ] 40009830: 11 10 00 68 sethi %hi(0x4001a000), %o0 40009834: 94 10 20 00 clr %o2 40009838: 90 12 20 30 or %o0, 0x30, %o0 4000983c: 98 10 20 00 clr %o4 40009840: 40 00 00 8e call 40009a78 <_Thread_Initialize> 40009844: 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 = 40009848: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000984c: c4 00 60 88 ld [ %g1 + 0x88 ], %g2 ! 4001a088 <_Thread_Idle> 40009850: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009854: c4 20 63 7c st %g2, [ %g1 + 0x37c ] ! 40019f7c <_Thread_Executing> 40009858: 03 10 00 67 sethi %hi(0x40019c00), %g1 _Thread_Executing = _Thread_Idle; _Thread_Start( 4000985c: b0 10 00 02 mov %g2, %i0 /* * WARNING!!! This is necessary to "kick" start the system and * MUST be done before _Thread_Start is invoked. */ _Thread_Heir = 40009860: c4 20 63 54 st %g2, [ %g1 + 0x354 ] _Thread_Executing = _Thread_Idle; _Thread_Start( 40009864: b2 10 20 00 clr %i1 40009868: b6 10 20 00 clr %i3 4000986c: 40 00 03 d8 call 4000a7cc <_Thread_Start> 40009870: 99 e8 20 00 restore %g0, 0, %o4 40009874: 01 00 00 00 nop 40009878 <_Thread_Delay_ended>: void _Thread_Delay_ended( Objects_Id id, void *ignored ) { 40009878: 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 ) ) { 4000987c: 92 96 20 00 orcc %i0, 0, %o1 40009880: 12 80 00 0a bne 400098a8 <_Thread_Delay_ended+0x30> 40009884: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009888: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000988c: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009890: 84 00 a0 01 inc %g2 <== NOT EXECUTED 40009894: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] <== 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; 40009898: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000989c: d0 00 63 7c ld [ %g1 + 0x37c ], %o0 ! 40019f7c <_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; 400098a0: 10 80 00 19 b 40009904 <_Thread_Delay_ended+0x8c> <== NOT EXECUTED 400098a4: c0 27 bf f4 clr [ %fp + -12 ] <== 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); 400098a8: 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 ) { 400098ac: 80 a0 a0 04 cmp %g2, 4 400098b0: 18 80 00 06 bgu 400098c8 <_Thread_Delay_ended+0x50> 400098b4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400098b8: 83 32 60 1b srl %o1, 0x1b, %g1 400098bc: 80 a0 60 01 cmp %g1, 1 400098c0: 02 80 00 05 be 400098d4 <_Thread_Delay_ended+0x5c> 400098c4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400098c8: 90 10 20 00 clr %o0 <== NOT EXECUTED 400098cc: 10 80 00 0e b 40009904 <_Thread_Delay_ended+0x8c> <== NOT EXECUTED 400098d0: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400098d4: 83 28 a0 02 sll %g2, 2, %g1 400098d8: 05 10 00 67 sethi %hi(0x40019c00), %g2 400098dc: 84 10 a2 00 or %g2, 0x200, %g2 ! 40019e00 <_Objects_Information_table> 400098e0: c2 00 80 01 ld [ %g2 + %g1 ], %g1 400098e4: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 400098e8: 80 a2 20 00 cmp %o0, 0 400098ec: 12 80 00 04 bne 400098fc <_Thread_Delay_ended+0x84> 400098f0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400098f4: 10 80 00 04 b 40009904 <_Thread_Delay_ended+0x8c> <== NOT EXECUTED 400098f8: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400098fc: 7f ff fb 1a call 40008564 <_Objects_Get> 40009900: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40009904: c2 07 bf f4 ld [ %fp + -12 ], %g1 40009908: 80 a0 60 00 cmp %g1, 0 4000990c: 12 80 00 08 bne 4000992c <_Thread_Delay_ended+0xb4> 40009910: 13 04 00 ff sethi %hi(0x1003fc00), %o1 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 40009914: 7f ff ff 4e call 4000964c <_Thread_Clear_state> 40009918: 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; 4000991c: 05 10 00 67 sethi %hi(0x40019c00), %g2 40009920: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40009924: 82 00 7f ff add %g1, -1, %g1 40009928: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 4000992c: 81 c7 e0 08 ret 40009930: 81 e8 00 00 restore 4000e1c8 <_Thread_Evaluate_mode>: boolean _Thread_Evaluate_mode( void ) { Thread_Control *executing; executing = _Thread_Executing; 4000e1c8: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000e1cc: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> if ( !_States_Is_ready( executing->current_state ) || 4000e1d0: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 4000e1d4: 80 a0 60 00 cmp %g1, 0 4000e1d8: 32 80 00 0b bne,a 4000e204 <_Thread_Evaluate_mode+0x3c> 4000e1dc: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 4000e1e0: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000e1e4: c2 00 63 54 ld [ %g1 + 0x354 ], %g1 ! 40019f54 <_Thread_Heir> 4000e1e8: 80 a0 80 01 cmp %g2, %g1 4000e1ec: 02 80 00 0b be 4000e218 <_Thread_Evaluate_mode+0x50> 4000e1f0: 01 00 00 00 nop 4000e1f4: c2 00 a0 7c ld [ %g2 + 0x7c ], %g1 4000e1f8: 80 a0 60 00 cmp %g1, 0 4000e1fc: 02 80 00 07 be 4000e218 <_Thread_Evaluate_mode+0x50> 4000e200: 84 10 20 01 mov 1, %g2 ( !_Thread_Is_heir( executing ) && executing->is_preemptible ) ) { _Context_Switch_necessary = TRUE; 4000e204: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000e208: 90 10 20 01 mov 1, %o0 4000e20c: c4 20 63 8c st %g2, [ %g1 + 0x38c ] 4000e210: 81 c3 e0 08 retl 4000e214: 01 00 00 00 nop return TRUE; } return FALSE; } 4000e218: 81 c3 e0 08 retl 4000e21c: 90 10 20 00 clr %o0 ! 0 4000e220 <_Thread_Handler>: * * Output parameters: NONE */ void _Thread_Handler( void ) { 4000e220: 9d e3 bf 98 save %sp, -104, %sp #endif #if defined(__USE__MAIN__) extern void _main(void); #endif executing = _Thread_Executing; 4000e224: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000e228: f4 00 63 7c ld [ %g1 + 0x37c ], %i2 ! 40019f7c <_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(); 4000e22c: 3f 10 00 38 sethi %hi(0x4000e000), %i7 4000e230: be 17 e2 20 or %i7, 0x220, %i7 ! 4000e220 <_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); 4000e234: d0 06 a0 c4 ld [ %i2 + 0xc4 ], %o0 4000e238: 7f ff cf 22 call 40001ec0 4000e23c: 91 2a 20 08 sll %o0, 8, %o0 #if defined(__USE_INIT_FINI__) || defined(__USE__MAIN__) doneCons = doneConstructors; 4000e240: 05 10 00 67 sethi %hi(0x40019c00), %g2 doneConstructors = 1; 4000e244: 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; 4000e248: f2 08 a0 c0 ldub [ %g2 + 0xc0 ], %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 ); 4000e24c: 90 10 00 1a mov %i2, %o0 4000e250: 7f ff f2 17 call 4000aaac <_User_extensions_Thread_begin> 4000e254: c2 28 a0 c0 stb %g1, [ %g2 + 0xc0 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000e258: 05 10 00 67 sethi %hi(0x40019c00), %g2 4000e25c: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 4000e260: 82 00 7f ff add %g1, -1, %g1 4000e264: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 4000e268: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 4000e26c: 80 a0 60 00 cmp %g1, 0 4000e270: 12 80 00 05 bne 4000e284 <_Thread_Handler+0x64> 4000e274: 83 2e 60 18 sll %i1, 0x18, %g1 _Thread_Dispatch(); 4000e278: 7f ff ed af call 40009934 <_Thread_Dispatch> 4000e27c: 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) */ 4000e280: 83 2e 60 18 sll %i1, 0x18, %g1 4000e284: 80 a0 60 00 cmp %g1, 0 4000e288: 32 80 00 05 bne,a 4000e29c <_Thread_Handler+0x7c> 4000e28c: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 _init (); 4000e290: 40 00 2a 9e call 40018d08 <_init> 4000e294: 01 00 00 00 nop #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000e298: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 4000e29c: 80 a0 60 01 cmp %g1, 1 4000e2a0: 22 80 00 0d be,a 4000e2d4 <_Thread_Handler+0xb4> 4000e2a4: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000e2a8: 2a 80 00 09 bcs,a 4000e2cc <_Thread_Handler+0xac> 4000e2ac: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 4000e2b0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000e2b4: 02 80 00 0d be 4000e2e8 <_Thread_Handler+0xc8> <== NOT EXECUTED 4000e2b8: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000e2bc: 12 80 00 14 bne 4000e30c <_Thread_Handler+0xec> <== NOT EXECUTED 4000e2c0: 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 = 4000e2c4: 10 80 00 0c b 4000e2f4 <_Thread_Handler+0xd4> <== NOT EXECUTED 4000e2c8: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED __main (); #endif switch ( executing->Start.prototype ) { case THREAD_START_NUMERIC: executing->Wait.return_argument = 4000e2cc: 10 80 00 03 b 4000e2d8 <_Thread_Handler+0xb8> 4000e2d0: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 (*(Thread_Entry_numeric) executing->Start.entry_point)( executing->Start.numeric_argument ); break; case THREAD_START_POINTER: executing->Wait.return_argument = 4000e2d4: d0 06 a0 b0 ld [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED 4000e2d8: 9f c0 40 00 call %g1 4000e2dc: 01 00 00 00 nop executing->Start.pointer_argument, executing->Start.numeric_argument ); break; case THREAD_START_BOTH_NUMERIC_FIRST: executing->Wait.return_argument = 4000e2e0: 10 80 00 0a b 4000e308 <_Thread_Handler+0xe8> 4000e2e4: d0 26 a0 28 st %o0, [ %i2 + 0x28 ] (*(Thread_Entry_pointer) executing->Start.entry_point)( executing->Start.pointer_argument ); break; case THREAD_START_BOTH_POINTER_FIRST: executing->Wait.return_argument = 4000e2e8: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000e2ec: 10 80 00 04 b 4000e2fc <_Thread_Handler+0xdc> <== NOT EXECUTED 4000e2f0: d0 1e a0 b0 ldd [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED executing->Start.pointer_argument, executing->Start.numeric_argument ); break; case THREAD_START_BOTH_NUMERIC_FIRST: executing->Wait.return_argument = 4000e2f4: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 <== NOT EXECUTED 4000e2f8: d2 06 a0 b0 ld [ %i2 + 0xb0 ], %o1 <== NOT EXECUTED 4000e2fc: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000e300: 01 00 00 00 nop <== NOT EXECUTED 4000e304: 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 ); 4000e308: 90 10 00 1a mov %i2, %o0 4000e30c: 7f ff f2 0b call 4000ab38 <_User_extensions_Thread_exitted> 4000e310: b0 10 20 00 clr %i0 _Internal_error_Occurred( 4000e314: b2 10 20 01 mov 1, %i1 4000e318: 7f ff e7 22 call 40007fa0 <_Internal_error_Occurred> 4000e31c: 95 e8 20 06 restore %g0, 6, %o2 4000e320: 01 00 00 00 nop 40009c34 <_Thread_Handler_initialization>: void _Thread_Handler_initialization( uint32_t ticks_per_timeslice, uint32_t maximum_extensions, uint32_t maximum_proxies ) { 40009c34: 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 ) 40009c38: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009c3c: 82 10 62 b4 or %g1, 0x2b4, %g1 ! 40019eb4 <_CPU_Table> 40009c40: c4 00 60 20 ld [ %g1 + 0x20 ], %g2 40009c44: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 40009c48: 80 a0 00 02 cmp %g0, %g2 40009c4c: 84 60 3f ff subx %g0, -1, %g2 40009c50: 80 a0 00 01 cmp %g0, %g1 40009c54: 82 60 3f ff subx %g0, -1, %g1 40009c58: 80 a0 80 01 cmp %g2, %g1 40009c5c: 02 80 00 07 be 40009c78 <_Thread_Handler_initialization+0x44> 40009c60: 03 10 00 67 sethi %hi(0x40019c00), %g1 == ( _CPU_Table.stack_free_hook == 0 ) ) ) _Internal_error_Occurred( 40009c64: 90 10 20 00 clr %o0 <== NOT EXECUTED 40009c68: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40009c6c: 7f ff f8 cd call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40009c70: 94 10 20 0f mov 0xf, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 40009c74: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009c78: c0 20 63 8c clr [ %g1 + 0x38c ] ! 40019f8c <_Context_Switch_necessary> _Thread_Executing = NULL; 40009c7c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009c80: c0 20 63 7c clr [ %g1 + 0x37c ] ! 40019f7c <_Thread_Executing> _Thread_Heir = NULL; 40009c84: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009c88: c0 20 63 54 clr [ %g1 + 0x354 ] ! 40019f54 <_Thread_Heir> #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; 40009c8c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009c90: c0 20 63 6c clr [ %g1 + 0x36c ] ! 40019f6c <_Thread_Do_post_task_switch_extension> _Thread_Maximum_extensions = maximum_extensions; 40009c94: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009c98: f2 20 63 68 st %i1, [ %g1 + 0x368 ] ! 40019f68 <_Thread_Maximum_extensions> _Thread_Ticks_per_timeslice = ticks_per_timeslice; 40009c9c: 03 10 00 67 sethi %hi(0x40019c00), %g1 _Thread_Ready_chain = (Chain_Control *) _Workspace_Allocate_or_fatal_error( 40009ca0: 90 10 2c 00 mov 0xc00, %o0 40009ca4: 40 00 04 ac call 4000af54 <_Workspace_Allocate_or_fatal_error> 40009ca8: f0 20 61 f8 st %i0, [ %g1 + 0x1f8 ] 40009cac: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009cb0: 84 10 00 08 mov %o0, %g2 40009cb4: d0 20 61 f4 st %o0, [ %g1 + 0x1f4 ] (PRIORITY_MAXIMUM + 1) * sizeof(Chain_Control) ); for ( index=0; index <= PRIORITY_MAXIMUM ; index++ ) 40009cb8: 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); 40009cbc: 82 00 a0 04 add %g2, 4, %g1 the_chain->permanent_null = NULL; 40009cc0: c0 20 a0 04 clr [ %g2 + 4 ] the_chain->last = _Chain_Head(the_chain); 40009cc4: 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); 40009cc8: c2 20 80 00 st %g1, [ %g2 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009ccc: 84 00 a0 0c add %g2, 0xc, %g2 40009cd0: 80 a0 80 03 cmp %g2, %g3 40009cd4: 12 bf ff fb bne 40009cc0 <_Thread_Handler_initialization+0x8c> 40009cd8: 82 00 a0 04 add %g2, 4, %g1 /* * Initialize this class of objects. */ _Objects_Initialize_information( 40009cdc: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009ce0: c2 00 63 a8 ld [ %g1 + 0x3a8 ], %g1 ! 40019fa8 <_System_state_Is_multiprocessing> 40009ce4: 96 10 20 02 mov 2, %o3 40009ce8: 80 a0 00 01 cmp %g0, %g1 40009cec: 82 10 20 08 mov 8, %g1 40009cf0: 96 42 ff ff addx %o3, -1, %o3 40009cf4: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40009cf8: 11 10 00 68 sethi %hi(0x4001a000), %o0 40009cfc: 92 10 20 01 mov 1, %o1 40009d00: 90 12 20 30 or %o0, 0x30, %o0 40009d04: 94 10 20 01 mov 1, %o2 40009d08: 98 10 21 80 mov 0x180, %o4 40009d0c: 7f ff fa 3b call 400085f8 <_Objects_Initialize_information> 40009d10: 9a 10 20 01 mov 1, %o5 FALSE, /* TRUE if this is a global object class */ NULL /* Proxy extraction support callout */ #endif ); } 40009d14: 81 c7 e0 08 ret 40009d18: 81 e8 00 00 restore 40009a78 <_Thread_Initialize>: Thread_CPU_budget_algorithms budget_algorithm, Thread_CPU_budget_algorithm_callout budget_callout, uint32_t isr_level, Objects_Name name ) { 40009a78: 9d e3 bf 98 save %sp, -104, %sp /* * Initialize the Ada self pointer */ the_thread->rtems_ada_self = NULL; 40009a7c: c0 26 60 80 clr [ %i1 + 0x80 ] /* * Allocate and Initialize the stack for this thread. */ if ( !stack_area ) { 40009a80: 80 a6 a0 00 cmp %i2, 0 40009a84: 12 80 00 10 bne 40009ac4 <_Thread_Initialize+0x4c> 40009a88: e0 07 a0 60 ld [ %fp + 0x60 ], %l0 if ( !_Stack_Is_enough( stack_size ) ) 40009a8c: 80 a6 ef ff cmp %i3, 0xfff 40009a90: 08 80 00 03 bleu 40009a9c <_Thread_Initialize+0x24> 40009a94: 13 00 00 04 sethi %hi(0x1000), %o1 40009a98: 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 ); 40009a9c: 40 00 03 13 call 4000a6e8 <_Thread_Stack_Allocate> 40009aa0: 90 10 00 19 mov %i1, %o0 if ( !actual_stack_size || actual_stack_size < stack_size ) 40009aa4: 80 a2 20 00 cmp %o0, 0 40009aa8: 02 80 00 1f be 40009b24 <_Thread_Initialize+0xac> 40009aac: 80 a2 00 1b cmp %o0, %i3 40009ab0: 0a 80 00 1d bcs 40009b24 <_Thread_Initialize+0xac> 40009ab4: 82 10 20 01 mov 1, %g1 return FALSE; /* stack allocation failed */ stack = the_thread->Start.stack; 40009ab8: f4 06 60 d8 ld [ %i1 + 0xd8 ], %i2 the_thread->Start.core_allocated_stack = TRUE; 40009abc: 10 80 00 04 b 40009acc <_Thread_Initialize+0x54> 40009ac0: c2 26 60 cc st %g1, [ %i1 + 0xcc ] } else { stack = stack_area; actual_stack_size = stack_size; the_thread->Start.core_allocated_stack = FALSE; 40009ac4: c0 26 60 cc clr [ %i1 + 0xcc ] <== NOT EXECUTED 40009ac8: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED /* * Allocate the extensions area for this thread */ if ( _Thread_Maximum_extensions ) { 40009acc: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009ad0: d2 00 63 68 ld [ %g1 + 0x368 ], %o1 ! 40019f68 <_Thread_Maximum_extensions> Stack_Control *the_stack, void *starting_address, size_t size ) { the_stack->area = starting_address; 40009ad4: f4 26 60 d4 st %i2, [ %i1 + 0xd4 ] the_stack->size = size; 40009ad8: d0 26 60 d0 st %o0, [ %i1 + 0xd0 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40009adc: c0 26 60 50 clr [ %i1 + 0x50 ] the_watchdog->routine = routine; 40009ae0: c0 26 60 64 clr [ %i1 + 0x64 ] the_watchdog->id = id; 40009ae4: c0 26 60 68 clr [ %i1 + 0x68 ] the_watchdog->user_data = user_data; 40009ae8: c0 26 60 6c clr [ %i1 + 0x6c ] /* * Clear the libc reent hook. */ the_thread->libc_reent = NULL; 40009aec: c0 26 61 68 clr [ %i1 + 0x168 ] /* * Allocate the extensions area for this thread */ if ( _Thread_Maximum_extensions ) { 40009af0: 80 a2 60 00 cmp %o1, 0 40009af4: 02 80 00 0e be 40009b2c <_Thread_Initialize+0xb4> 40009af8: b6 10 20 00 clr %i3 RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 40009afc: 92 02 60 01 inc %o1 40009b00: 11 10 00 67 sethi %hi(0x40019c00), %o0 40009b04: 93 2a 60 02 sll %o1, 2, %o1 40009b08: 7f ff f7 fb call 40007af4 <_Heap_Allocate> 40009b0c: 90 12 22 ec or %o0, 0x2ec, %o0 extensions_area = _Workspace_Allocate( (_Thread_Maximum_extensions + 1) * sizeof( void * ) ); if ( !extensions_area ) { 40009b10: b6 92 20 00 orcc %o0, 0, %i3 40009b14: 12 80 00 07 bne 40009b30 <_Thread_Initialize+0xb8> 40009b18: 80 a6 e0 00 cmp %i3, 0 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) (void) _Workspace_Free( fp_area ); #endif _Thread_Stack_Free( the_thread ); 40009b1c: 40 00 03 0a call 4000a744 <_Thread_Stack_Free> <== NOT EXECUTED 40009b20: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 40009b24: 81 c7 e0 08 ret 40009b28: 91 e8 20 00 restore %g0, 0, %o0 * create the extension long after tasks have been created * so they cannot rely on the thread create user extension * call. */ if ( the_thread->extensions ) { 40009b2c: 80 a6 e0 00 cmp %i3, 0 40009b30: 02 80 00 0d be 40009b64 <_Thread_Initialize+0xec> 40009b34: f6 26 61 78 st %i3, [ %i1 + 0x178 ] int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 40009b38: 03 10 00 67 sethi %hi(0x40019c00), %g1 40009b3c: c2 00 63 68 ld [ %g1 + 0x368 ], %g1 ! 40019f68 <_Thread_Maximum_extensions> 40009b40: 86 10 20 00 clr %g3 40009b44: 10 80 00 05 b 40009b58 <_Thread_Initialize+0xe0> 40009b48: 88 00 60 01 add %g1, 1, %g4 the_thread->extensions[i] = NULL; 40009b4c: 83 28 e0 02 sll %g3, 2, %g1 * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 40009b50: 86 00 e0 01 inc %g3 the_thread->extensions[i] = NULL; 40009b54: c0 20 80 01 clr [ %g2 + %g1 ] * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 40009b58: 80 a0 c0 04 cmp %g3, %g4 40009b5c: 32 bf ff fc bne,a 40009b4c <_Thread_Initialize+0xd4> 40009b60: c4 06 61 78 ld [ %i1 + 0x178 ], %g2 /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 40009b64: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 the_thread->Start.budget_algorithm = budget_algorithm; 40009b68: e0 26 60 bc st %l0, [ %i1 + 0xbc ] /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 40009b6c: c2 26 60 b8 st %g1, [ %i1 + 0xb8 ] the_thread->Start.budget_algorithm = budget_algorithm; the_thread->Start.budget_callout = budget_callout; 40009b70: c2 07 a0 64 ld [ %fp + 0x64 ], %g1 switch ( budget_algorithm ) { 40009b74: 80 a4 20 02 cmp %l0, 2 40009b78: 12 80 00 05 bne 40009b8c <_Thread_Initialize+0x114> 40009b7c: 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; 40009b80: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009b84: c2 00 61 f8 ld [ %g1 + 0x1f8 ], %g1 ! 40019df8 <_Thread_Ticks_per_timeslice> <== NOT EXECUTED 40009b88: c2 26 60 84 st %g1, [ %i1 + 0x84 ] <== NOT EXECUTED break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 40009b8c: c2 07 a0 68 ld [ %fp + 0x68 ], %g1 the_thread->current_state = STATES_DORMANT; the_thread->Wait.queue = NULL; 40009b90: c0 26 60 44 clr [ %i1 + 0x44 ] break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 40009b94: c2 26 60 c4 st %g1, [ %i1 + 0xc4 ] the_thread->current_state = STATES_DORMANT; 40009b98: 82 10 20 01 mov 1, %g1 the_thread->Wait.queue = NULL; the_thread->resource_count = 0; 40009b9c: c0 26 60 1c clr [ %i1 + 0x1c ] break; } the_thread->Start.isr_level = isr_level; the_thread->current_state = STATES_DORMANT; 40009ba0: c2 26 60 10 st %g1, [ %i1 + 0x10 ] the_thread->Wait.queue = NULL; the_thread->resource_count = 0; the_thread->suspend_count = 0; 40009ba4: c0 26 60 70 clr [ %i1 + 0x70 ] the_thread->real_priority = priority; 40009ba8: fa 26 60 18 st %i5, [ %i1 + 0x18 ] the_thread->Start.initial_priority = priority; 40009bac: fa 26 60 c8 st %i5, [ %i1 + 0xc8 ] _Thread_Set_priority( the_thread, priority ); 40009bb0: 92 10 00 1d mov %i5, %o1 40009bb4: 40 00 02 2c call 4000a464 <_Thread_Set_priority> 40009bb8: 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 ); 40009bbc: c4 06 60 08 ld [ %i1 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40009bc0: 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; 40009bc4: c0 26 60 90 clr [ %i1 + 0x90 ] 40009bc8: 03 00 00 3f sethi %hi(0xfc00), %g1 40009bcc: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40009bd0: 82 08 80 01 and %g2, %g1, %g1 40009bd4: 80 a0 40 03 cmp %g1, %g3 40009bd8: 18 80 00 05 bgu 40009bec <_Thread_Initialize+0x174> 40009bdc: c0 26 60 94 clr [ %i1 + 0x94 ] information->local_table[ index ] = the_object; 40009be0: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 40009be4: 83 28 60 02 sll %g1, 2, %g1 40009be8: f2 20 80 01 st %i1, [ %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; 40009bec: c2 07 a0 6c ld [ %fp + 0x6c ], %g1 /* * Invoke create extensions */ if ( !_User_extensions_Thread_create( the_thread ) ) { 40009bf0: 90 10 00 19 mov %i1, %o0 40009bf4: c2 26 60 0c st %g1, [ %i1 + 0xc ] 40009bf8: 40 00 03 e1 call 4000ab7c <_User_extensions_Thread_create> 40009bfc: b0 10 20 01 mov 1, %i0 40009c00: 80 a2 20 00 cmp %o0, 0 40009c04: 12 80 00 0a bne 40009c2c <_Thread_Initialize+0x1b4> 40009c08: 80 a6 e0 00 cmp %i3, 0 if ( extensions_area ) 40009c0c: 02 80 00 05 be 40009c20 <_Thread_Initialize+0x1a8> 40009c10: 11 10 00 67 sethi %hi(0x40019c00), %o0 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 40009c14: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 40009c18: 7f ff f7 de call 40007b90 <_Heap_Free> <== NOT EXECUTED 40009c1c: 90 12 22 ec or %o0, 0x2ec, %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 ); 40009c20: 90 10 00 19 mov %i1, %o0 40009c24: 40 00 02 c8 call 4000a744 <_Thread_Stack_Free> 40009c28: b0 10 20 00 clr %i0 return FALSE; } return TRUE; } 40009c2c: 81 c7 e0 08 ret 40009c30: 81 e8 00 00 restore 4000e708 <_Thread_Reset>: void _Thread_Reset( Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { 4000e708: 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; 4000e70c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 the_thread->budget_algorithm = the_thread->Start.budget_algorithm; 4000e710: c4 06 20 bc ld [ %i0 + 0xbc ], %g2 the_thread->budget_callout = the_thread->Start.budget_callout; 4000e714: 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; 4000e718: 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; 4000e71c: c4 3e 20 88 std %g2, [ %i0 + 0x88 ] the_thread->Start.pointer_argument = pointer_argument; 4000e720: f2 26 20 b0 st %i1, [ %i0 + 0xb0 ] the_thread->Start.numeric_argument = numeric_argument; 4000e724: f4 26 20 b4 st %i2, [ %i0 + 0xb4 ] Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { the_thread->resource_count = 0; 4000e728: c0 26 20 1c clr [ %i0 + 0x1c ] the_thread->suspend_count = 0; 4000e72c: 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 ) ) { 4000e730: 7f ff f1 f4 call 4000af00 <_Thread_queue_Extract_with_proxy> 4000e734: 90 10 00 18 mov %i0, %o0 4000e738: 80 a2 20 00 cmp %o0, 0 4000e73c: 32 80 00 09 bne,a 4000e760 <_Thread_Reset+0x58> 4000e740: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 if ( _Watchdog_Is_active( &the_thread->Timer ) ) 4000e744: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000e748: 80 a0 60 02 cmp %g1, 2 4000e74c: 32 80 00 05 bne,a 4000e760 <_Thread_Reset+0x58> 4000e750: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 (void) _Watchdog_Remove( &the_thread->Timer ); 4000e754: 7f ff f5 2c call 4000bc04 <_Watchdog_Remove> <== NOT EXECUTED 4000e758: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED } if ( the_thread->current_priority != the_thread->Start.initial_priority ) { 4000e75c: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 <== NOT EXECUTED 4000e760: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 4000e764: 80 a0 40 19 cmp %g1, %i1 4000e768: 02 80 00 05 be 4000e77c <_Thread_Reset+0x74> 4000e76c: 01 00 00 00 nop the_thread->real_priority = the_thread->Start.initial_priority; 4000e770: f2 26 20 18 st %i1, [ %i0 + 0x18 ] _Thread_Set_priority( the_thread, the_thread->Start.initial_priority ); 4000e774: 7f ff f2 a9 call 4000b218 <_Thread_Set_priority> 4000e778: 81 e8 00 00 restore 4000e77c: 81 c7 e0 08 ret 4000e780: 81 e8 00 00 restore 4000d8b8 <_Thread_Reset_timeslice>: * ready chain * select heir */ void _Thread_Reset_timeslice( void ) { 4000d8b8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *executing; Chain_Control *ready; executing = _Thread_Executing; 4000d8bc: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000d8c0: e0 00 63 7c ld [ %g1 + 0x37c ], %l0 ! 40019f7c <_Thread_Executing> ready = executing->ready; _ISR_Disable( level ); 4000d8c4: 7f ff d1 7b call 40001eb0 4000d8c8: e2 04 20 98 ld [ %l0 + 0x98 ], %l1 4000d8cc: b0 10 00 08 mov %o0, %i0 if ( _Chain_Has_only_one_node( ready ) ) { 4000d8d0: c4 04 40 00 ld [ %l1 ], %g2 4000d8d4: c2 04 60 08 ld [ %l1 + 8 ], %g1 4000d8d8: 80 a0 80 01 cmp %g2, %g1 4000d8dc: 32 80 00 03 bne,a 4000d8e8 <_Thread_Reset_timeslice+0x30> 4000d8e0: c6 04 00 00 ld [ %l0 ], %g3 _ISR_Enable( level ); 4000d8e4: 30 80 00 18 b,a 4000d944 <_Thread_Reset_timeslice+0x8c> { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 4000d8e8: c4 04 20 04 ld [ %l0 + 4 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000d8ec: 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; 4000d8f0: c6 20 80 00 st %g3, [ %g2 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000d8f4: c2 24 00 00 st %g1, [ %l0 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000d8f8: 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; 4000d8fc: c2 04 60 08 ld [ %l1 + 8 ], %g1 the_chain->last = the_node; 4000d900: e0 24 60 08 st %l0, [ %l1 + 8 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000d904: 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; 4000d908: e0 20 40 00 st %l0, [ %g1 ] return; } _Chain_Extract_unprotected( &executing->Object.Node ); _Chain_Append_unprotected( ready, &executing->Object.Node ); _ISR_Flash( level ); 4000d90c: 7f ff d1 6d call 40001ec0 4000d910: 01 00 00 00 nop 4000d914: 7f ff d1 67 call 40001eb0 4000d918: 01 00 00 00 nop if ( _Thread_Is_heir( executing ) ) 4000d91c: 05 10 00 67 sethi %hi(0x40019c00), %g2 4000d920: c2 00 a3 54 ld [ %g2 + 0x354 ], %g1 ! 40019f54 <_Thread_Heir> 4000d924: 80 a4 00 01 cmp %l0, %g1 4000d928: 32 80 00 05 bne,a 4000d93c <_Thread_Reset_timeslice+0x84> 4000d92c: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED _Thread_Heir = (Thread_Control *) ready->first; 4000d930: c2 04 40 00 ld [ %l1 ], %g1 4000d934: c2 20 a3 54 st %g1, [ %g2 + 0x354 ] _Context_Switch_necessary = TRUE; 4000d938: 84 10 20 01 mov 1, %g2 4000d93c: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000d940: c4 20 63 8c st %g2, [ %g1 + 0x38c ] ! 40019f8c <_Context_Switch_necessary> _ISR_Enable( level ); 4000d944: 7f ff d1 5f call 40001ec0 4000d948: 81 e8 00 00 restore 4000d94c: 01 00 00 00 nop 4000bf38 <_Thread_Resume>: void _Thread_Resume( Thread_Control *the_thread, boolean force ) { 4000bf38: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; States_Control current_state; _ISR_Disable( level ); 4000bf3c: 7f ff db 26 call 40002bd4 4000bf40: 01 00 00 00 nop 4000bf44: a0 10 00 08 mov %o0, %l0 if ( force == TRUE ) 4000bf48: 80 a6 60 01 cmp %i1, 1 4000bf4c: 32 80 00 04 bne,a 4000bf5c <_Thread_Resume+0x24> 4000bf50: c2 06 20 70 ld [ %i0 + 0x70 ], %g1 <== NOT EXECUTED the_thread->suspend_count = 0; 4000bf54: 10 80 00 04 b 4000bf64 <_Thread_Resume+0x2c> 4000bf58: c0 26 20 70 clr [ %i0 + 0x70 ] else the_thread->suspend_count--; 4000bf5c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000bf60: c2 26 20 70 st %g1, [ %i0 + 0x70 ] <== NOT EXECUTED if ( the_thread->suspend_count > 0 ) { 4000bf64: c2 06 20 70 ld [ %i0 + 0x70 ], %g1 4000bf68: 80 a0 60 00 cmp %g1, 0 4000bf6c: 22 80 00 03 be,a 4000bf78 <_Thread_Resume+0x40> 4000bf70: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 _ISR_Enable( level ); 4000bf74: 30 80 00 2e b,a 4000c02c <_Thread_Resume+0xf4> <== NOT EXECUTED return; } current_state = the_thread->current_state; if ( current_state & STATES_SUSPENDED ) { 4000bf78: 80 88 60 02 btst 2, %g1 4000bf7c: 02 80 00 2c be 4000c02c <_Thread_Resume+0xf4> 4000bf80: 82 08 7f fd and %g1, -3, %g1 current_state = the_thread->current_state = _States_Clear(STATES_SUSPENDED, current_state); if ( _States_Is_ready( current_state ) ) { 4000bf84: 80 a0 60 00 cmp %g1, 0 4000bf88: 12 80 00 29 bne 4000c02c <_Thread_Resume+0xf4> 4000bf8c: c2 26 20 10 st %g1, [ %i0 + 0x10 ] RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map ( Priority_Information *the_priority_map ) { *the_priority_map->minor |= the_priority_map->ready_minor; 4000bf90: c8 06 20 9c ld [ %i0 + 0x9c ], %g4 4000bf94: c4 16 20 a2 lduh [ %i0 + 0xa2 ], %g2 4000bf98: c2 11 00 00 lduh [ %g4 ], %g1 _Priority_Add_to_bit_map( &the_thread->Priority_map ); _Chain_Append_unprotected(the_thread->ready, &the_thread->Object.Node); 4000bf9c: c6 06 20 98 ld [ %i0 + 0x98 ], %g3 4000bfa0: 82 10 40 02 or %g1, %g2, %g1 4000bfa4: c2 31 00 00 sth %g1, [ %g4 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000bfa8: 82 00 e0 04 add %g3, 4, %g1 _Priority_Major_bit_map |= the_priority_map->ready_major; 4000bfac: 09 10 00 99 sethi %hi(0x40026400), %g4 4000bfb0: c2 26 00 00 st %g1, [ %i0 ] 4000bfb4: da 16 20 a0 lduh [ %i0 + 0xa0 ], %o5 old_last_node = the_chain->last; 4000bfb8: c2 00 e0 08 ld [ %g3 + 8 ], %g1 4000bfbc: c4 11 20 80 lduh [ %g4 + 0x80 ], %g2 the_chain->last = the_node; 4000bfc0: f0 20 e0 08 st %i0, [ %g3 + 8 ] 4000bfc4: 84 10 80 0d or %g2, %o5, %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 4000bfc8: c2 26 20 04 st %g1, [ %i0 + 4 ] 4000bfcc: c4 31 20 80 sth %g2, [ %g4 + 0x80 ] 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; 4000bfd0: f0 20 40 00 st %i0, [ %g1 ] _ISR_Flash( level ); 4000bfd4: 7f ff db 04 call 40002be4 4000bfd8: 90 10 00 10 mov %l0, %o0 4000bfdc: 7f ff da fe call 40002bd4 4000bfe0: 01 00 00 00 nop if ( the_thread->current_priority < _Thread_Heir->current_priority ) { 4000bfe4: 07 10 00 99 sethi %hi(0x40026400), %g3 4000bfe8: c2 00 e0 64 ld [ %g3 + 0x64 ], %g1 ! 40026464 <_Thread_Heir> 4000bfec: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 4000bff0: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 4000bff4: 80 a0 80 01 cmp %g2, %g1 4000bff8: 1a 80 00 0d bcc 4000c02c <_Thread_Resume+0xf4> 4000bffc: 03 10 00 99 sethi %hi(0x40026400), %g1 _Thread_Heir = the_thread; if ( _Thread_Executing->is_preemptible || 4000c000: c2 00 60 8c ld [ %g1 + 0x8c ], %g1 ! 4002648c <_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; 4000c004: f0 20 e0 64 st %i0, [ %g3 + 0x64 ] if ( _Thread_Executing->is_preemptible || 4000c008: c2 00 60 7c ld [ %g1 + 0x7c ], %g1 4000c00c: 80 a0 60 00 cmp %g1, 0 4000c010: 32 80 00 05 bne,a 4000c024 <_Thread_Resume+0xec> 4000c014: 84 10 20 01 mov 1, %g2 4000c018: 80 a0 a0 00 cmp %g2, 0 4000c01c: 12 80 00 04 bne 4000c02c <_Thread_Resume+0xf4> 4000c020: 84 10 20 01 mov 1, %g2 the_thread->current_priority == 0 ) _Context_Switch_necessary = TRUE; 4000c024: 03 10 00 99 sethi %hi(0x40026400), %g1 4000c028: c4 20 60 9c st %g2, [ %g1 + 0x9c ] ! 4002649c <_Context_Switch_necessary> } } } _ISR_Enable( level ); 4000c02c: 7f ff da ee call 40002be4 4000c030: 91 e8 00 10 restore %g0, %l0, %o0 4000c034: 01 00 00 00 nop 4000a6e8 <_Thread_Stack_Allocate>: size_t _Thread_Stack_Allocate( Thread_Control *the_thread, size_t stack_size ) { 4000a6e8: 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 ) ) 4000a6ec: 80 a6 6f ff cmp %i1, 0xfff 4000a6f0: 28 80 00 02 bleu,a 4000a6f8 <_Thread_Stack_Allocate+0x10> 4000a6f4: 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 ) { 4000a6f8: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a6fc: c2 00 62 d4 ld [ %g1 + 0x2d4 ], %g1 ! 40019ed4 <_CPU_Table+0x20> 4000a700: 80 a0 60 00 cmp %g1, 0 4000a704: 02 80 00 06 be 4000a71c <_Thread_Stack_Allocate+0x34> 4000a708: 92 06 60 10 add %i1, 0x10, %o1 stack_addr = (*_CPU_Table.stack_allocate_hook)( the_stack_size ); 4000a70c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a710: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED } if ( !stack_addr ) the_stack_size = 0; the_thread->Start.stack = stack_addr; 4000a714: 10 80 00 07 b 4000a730 <_Thread_Stack_Allocate+0x48> <== NOT EXECUTED 4000a718: d0 26 20 d8 st %o0, [ %i0 + 0xd8 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4000a71c: 11 10 00 67 sethi %hi(0x40019c00), %o0 4000a720: b2 10 00 09 mov %o1, %i1 4000a724: 7f ff f4 f4 call 40007af4 <_Heap_Allocate> 4000a728: 90 12 22 ec or %o0, 0x2ec, %o0 4000a72c: 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 ) 4000a730: 80 a0 00 08 cmp %g0, %o0 4000a734: b0 60 20 00 subx %g0, 0, %i0 the_stack_size = 0; the_thread->Start.stack = stack_addr; return the_stack_size; } 4000a738: b0 0e 40 18 and %i1, %i0, %i0 4000a73c: 81 c7 e0 08 ret 4000a740: 81 e8 00 00 restore 4000a744 <_Thread_Stack_Free>: */ void _Thread_Stack_Free( Thread_Control *the_thread ) { 4000a744: 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 ) 4000a748: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 4000a74c: 80 a0 60 00 cmp %g1, 0 4000a750: 02 80 00 08 be 4000a770 <_Thread_Stack_Free+0x2c> 4000a754: 03 10 00 67 sethi %hi(0x40019c00), %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 ) 4000a758: c2 00 62 d8 ld [ %g1 + 0x2d8 ], %g1 ! 40019ed8 <_CPU_Table+0x24> 4000a75c: 80 a0 60 00 cmp %g1, 0 4000a760: 02 80 00 06 be 4000a778 <_Thread_Stack_Free+0x34> 4000a764: d0 06 20 d4 ld [ %i0 + 0xd4 ], %o0 (*_CPU_Table.stack_free_hook)( the_thread->Start.Initial_stack.area ); 4000a768: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a76c: 01 00 00 00 nop <== NOT EXECUTED 4000a770: 81 c7 e0 08 ret <== NOT EXECUTED 4000a774: 81 e8 00 00 restore <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4000a778: 31 10 00 67 sethi %hi(0x40019c00), %i0 4000a77c: b2 10 00 08 mov %o0, %i1 4000a780: 7f ff f5 04 call 40007b90 <_Heap_Free> 4000a784: 91 ee 22 ec restore %i0, 0x2ec, %o0 4000a788: 01 00 00 00 nop 4000a814 <_Thread_Tickle_timeslice>: * * Output parameters: NONE */ void _Thread_Tickle_timeslice( void ) { 4000a814: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; 4000a818: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a81c: e0 00 63 7c ld [ %g1 + 0x37c ], %l0 ! 40019f7c <_Thread_Executing> /* * If the thread is not preemptible or is not ready, then * just return. */ if ( !executing->is_preemptible ) 4000a820: c2 04 20 7c ld [ %l0 + 0x7c ], %g1 4000a824: 80 a0 60 00 cmp %g1, 0 4000a828: 02 80 00 23 be 4000a8b4 <_Thread_Tickle_timeslice+0xa0> 4000a82c: 01 00 00 00 nop return; if ( !_States_Is_ready( executing->current_state ) ) 4000a830: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000a834: 80 a0 60 00 cmp %g1, 0 4000a838: 12 80 00 1f bne 4000a8b4 <_Thread_Tickle_timeslice+0xa0> 4000a83c: 01 00 00 00 nop /* * The cpu budget algorithm determines what happens next. */ switch ( executing->budget_algorithm ) { 4000a840: c2 04 20 88 ld [ %l0 + 0x88 ], %g1 4000a844: 80 a0 60 01 cmp %g1, 1 4000a848: 0a 80 00 12 bcs 4000a890 <_Thread_Tickle_timeslice+0x7c> 4000a84c: 80 a0 60 02 cmp %g1, 2 4000a850: 28 80 00 07 bleu,a 4000a86c <_Thread_Tickle_timeslice+0x58> 4000a854: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 4000a858: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000a85c: 12 80 00 16 bne 4000a8b4 <_Thread_Tickle_timeslice+0xa0> <== NOT EXECUTED 4000a860: 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 ) 4000a864: 10 80 00 0d b 4000a898 <_Thread_Tickle_timeslice+0x84> <== NOT EXECUTED 4000a868: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 <== NOT EXECUTED 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 ) { 4000a86c: 82 00 7f ff add %g1, -1, %g1 4000a870: 80 a0 60 00 cmp %g1, 0 4000a874: 14 80 00 07 bg 4000a890 <_Thread_Tickle_timeslice+0x7c> 4000a878: c2 24 20 84 st %g1, [ %l0 + 0x84 ] _Thread_Reset_timeslice(); 4000a87c: 40 00 0c 0f call 4000d8b8 <_Thread_Reset_timeslice> 4000a880: 01 00 00 00 nop executing->cpu_time_budget = _Thread_Ticks_per_timeslice; 4000a884: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a888: c2 00 61 f8 ld [ %g1 + 0x1f8 ], %g1 ! 40019df8 <_Thread_Ticks_per_timeslice> 4000a88c: c2 24 20 84 st %g1, [ %l0 + 0x84 ] 4000a890: 81 c7 e0 08 ret 4000a894: 81 e8 00 00 restore } break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: if ( --executing->cpu_time_budget == 0 ) 4000a898: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000a89c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000a8a0: 12 bf ff fc bne 4000a890 <_Thread_Tickle_timeslice+0x7c> <== NOT EXECUTED 4000a8a4: c2 24 20 84 st %g1, [ %l0 + 0x84 ] <== NOT EXECUTED (*executing->budget_callout)( executing ); 4000a8a8: c2 04 20 8c ld [ %l0 + 0x8c ], %g1 <== NOT EXECUTED 4000a8ac: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a8b0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000a8b4: 81 c7 e0 08 ret 4000a8b8: 81 e8 00 00 restore 40009d1c <_Thread_queue_Dequeue>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 40009d1c: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 40009d20: 80 a0 60 00 cmp %g1, 0 40009d24: 02 80 00 05 be 40009d38 <_Thread_queue_Dequeue+0x1c> 40009d28: 80 a0 60 01 cmp %g1, 1 40009d2c: 12 80 00 09 bne 40009d50 <_Thread_queue_Dequeue+0x34> 40009d30: 01 00 00 00 nop 40009d34: 30 80 00 04 b,a 40009d44 <_Thread_queue_Dequeue+0x28> case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_Dequeue_fifo( the_thread_queue ); 40009d38: 82 13 c0 00 mov %o7, %g1 40009d3c: 40 00 0d e9 call 4000d4e0 <_Thread_queue_Dequeue_fifo> 40009d40: 9e 10 40 00 mov %g1, %o7 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_Dequeue_priority( the_thread_queue ); 40009d44: 82 13 c0 00 mov %o7, %g1 40009d48: 40 00 00 0a call 40009d70 <_Thread_queue_Dequeue_priority> 40009d4c: 9e 10 40 00 mov %g1, %o7 the_thread = NULL; break; } return( the_thread ); } 40009d50: 81 c3 e0 08 retl <== NOT EXECUTED 40009d54: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000d4e0 <_Thread_queue_Dequeue_fifo>: */ Thread_Control *_Thread_queue_Dequeue_fifo( Thread_queue_Control *the_thread_queue ) { 4000d4e0: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *the_thread; _ISR_Disable( level ); 4000d4e4: 7f ff d2 73 call 40001eb0 4000d4e8: a0 10 00 18 mov %i0, %l0 4000d4ec: 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)); 4000d4f0: f0 06 00 00 ld [ %i0 ], %i0 if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) { 4000d4f4: 82 04 20 04 add %l0, 4, %g1 4000d4f8: 80 a6 00 01 cmp %i0, %g1 4000d4fc: 22 80 00 16 be,a 4000d554 <_Thread_queue_Dequeue_fifo+0x74> 4000d500: 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; 4000d504: c2 06 00 00 ld [ %i0 ], %g1 the_chain->first = new_first; 4000d508: 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 ) ) { 4000d50c: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 new_first->previous = _Chain_Head(the_chain); 4000d510: e0 20 60 04 st %l0, [ %g1 + 4 ] 4000d514: 80 a0 a0 02 cmp %g2, 2 4000d518: 02 80 00 05 be 4000d52c <_Thread_queue_Dequeue_fifo+0x4c> 4000d51c: c0 26 20 44 clr [ %i0 + 0x44 ] _ISR_Enable( level ); 4000d520: 7f ff d2 68 call 40001ec0 4000d524: 01 00 00 00 nop 4000d528: 30 80 00 07 b,a 4000d544 <_Thread_queue_Dequeue_fifo+0x64> RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 4000d52c: 82 10 20 03 mov 3, %g1 ! 3 4000d530: c2 26 20 50 st %g1, [ %i0 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000d534: 7f ff d2 63 call 40001ec0 4000d538: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 4000d53c: 7f ff f6 33 call 4000ae08 <_Watchdog_Remove> 4000d540: 90 06 20 48 add %i0, 0x48, %o0 _Thread_Unblock( the_thread ); 4000d544: 7f ff ff e1 call 4000d4c8 <_Thread_Unblock> 4000d548: 90 10 00 18 mov %i0, %o0 4000d54c: 81 c7 e0 08 ret 4000d550: 81 e8 00 00 restore #endif return the_thread; } switch ( the_thread_queue->sync_state ) { 4000d554: 80 a0 60 02 cmp %g1, 2 4000d558: 18 80 00 06 bgu 4000d570 <_Thread_queue_Dequeue_fifo+0x90> 4000d55c: 80 a0 60 03 cmp %g1, 3 4000d560: 80 a0 60 01 cmp %g1, 1 4000d564: 1a 80 00 0a bcc 4000d58c <_Thread_queue_Dequeue_fifo+0xac> 4000d568: 82 10 20 03 mov 3, %g1 4000d56c: 30 80 00 03 b,a 4000d578 <_Thread_queue_Dequeue_fifo+0x98> 4000d570: 12 bf ff f7 bne 4000d54c <_Thread_queue_Dequeue_fifo+0x6c> <== NOT EXECUTED 4000d574: b0 10 20 00 clr %i0 <== NOT EXECUTED case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 4000d578: b0 10 20 00 clr %i0 4000d57c: 7f ff d2 51 call 40001ec0 4000d580: 90 10 00 02 mov %g2, %o0 4000d584: 81 c7 e0 08 ret 4000d588: 81 e8 00 00 restore return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 4000d58c: c2 24 20 30 st %g1, [ %l0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d590: 7f ff d2 4c call 40001ec0 <== NOT EXECUTED 4000d594: 01 00 00 00 nop <== NOT EXECUTED return _Thread_Executing; 4000d598: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000d59c: f0 00 63 7c ld [ %g1 + 0x37c ], %i0 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED } return NULL; /* this is only to prevent warnings */ } 4000d5a0: 81 c7 e0 08 ret <== NOT EXECUTED 4000d5a4: 81 e8 00 00 restore <== NOT EXECUTED 40009d70 <_Thread_queue_Dequeue_priority>: */ Thread_Control *_Thread_queue_Dequeue_priority( Thread_queue_Control *the_thread_queue ) { 40009d70: 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 ); 40009d74: 7f ff e0 4f call 40001eb0 40009d78: 01 00 00 00 nop 40009d7c: 98 10 00 08 mov %o0, %o4 40009d80: 86 10 20 00 clr %g3 40009d84: 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)); 40009d88: 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 ] ) ) { 40009d8c: 85 28 e0 02 sll %g3, 2, %g2 40009d90: 83 28 e0 04 sll %g3, 4, %g1 40009d94: 82 20 40 02 sub %g1, %g2, %g1 40009d98: 82 06 00 01 add %i0, %g1, %g1 40009d9c: 82 00 60 04 add %g1, 4, %g1 40009da0: 80 a2 00 01 cmp %o0, %g1 40009da4: 02 80 00 04 be 40009db4 <_Thread_queue_Dequeue_priority+0x44> 40009da8: 88 01 20 0c add %g4, 0xc, %g4 the_thread = (Thread_Control *) 40009dac: 10 80 00 1c b 40009e1c <_Thread_queue_Dequeue_priority+0xac> 40009db0: b0 10 00 08 mov %o0, %i0 Chain_Node *previous_node; _ISR_Disable( level ); for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; index++ ) { 40009db4: 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 ; 40009db8: 80 a0 e0 04 cmp %g3, 4 40009dbc: 32 bf ff f4 bne,a 40009d8c <_Thread_queue_Dequeue_priority+0x1c> 40009dc0: d0 01 00 18 ld [ %g4 + %i0 ], %o0 the_thread_queue->Queues.Priority[ index ].first; goto dequeue; } } switch ( the_thread_queue->sync_state ) { 40009dc4: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 40009dc8: 80 a0 60 02 cmp %g1, 2 40009dcc: 18 80 00 06 bgu 40009de4 <_Thread_queue_Dequeue_priority+0x74> 40009dd0: 80 a0 60 03 cmp %g1, 3 40009dd4: 80 a0 60 01 cmp %g1, 1 40009dd8: 1a 80 00 0a bcc 40009e00 <_Thread_queue_Dequeue_priority+0x90> 40009ddc: 82 10 20 03 mov 3, %g1 40009de0: 30 80 00 03 b,a 40009dec <_Thread_queue_Dequeue_priority+0x7c> 40009de4: 12 80 00 0e bne 40009e1c <_Thread_queue_Dequeue_priority+0xac> <== NOT EXECUTED 40009de8: b0 10 20 00 clr %i0 <== NOT EXECUTED case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 40009dec: b0 10 20 00 clr %i0 40009df0: 7f ff e0 34 call 40001ec0 40009df4: 90 10 00 0c mov %o4, %o0 40009df8: 81 c7 e0 08 ret 40009dfc: 81 e8 00 00 restore return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 40009e00: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 40009e04: 7f ff e0 2f call 40001ec0 <== NOT EXECUTED 40009e08: 90 10 00 0c mov %o4, %o0 <== NOT EXECUTED return _Thread_Executing; 40009e0c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40009e10: f0 00 63 7c ld [ %g1 + 0x37c ], %i0 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED 40009e14: 81 c7 e0 08 ret <== NOT EXECUTED 40009e18: 81 e8 00 00 restore <== NOT EXECUTED } dequeue: the_thread->Wait.queue = NULL; new_first_node = the_thread->Wait.Block2n.first; 40009e1c: 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 ) ) { 40009e20: 82 06 20 3c add %i0, 0x3c, %g1 _ISR_Enable( level ); return _Thread_Executing; } dequeue: the_thread->Wait.queue = NULL; 40009e24: 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 ) ) { 40009e28: 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; 40009e2c: c4 06 00 00 ld [ %i0 ], %g2 previous_node = the_thread->Object.Node.previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 40009e30: 02 80 00 14 be 40009e80 <_Thread_queue_Dequeue_priority+0x110> 40009e34: c2 06 20 04 ld [ %i0 + 4 ], %g1 last_node = the_thread->Wait.Block2n.last; 40009e38: da 06 20 40 ld [ %i0 + 0x40 ], %o5 new_second_node = new_first_node->next; 40009e3c: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 40009e40: 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; 40009e44: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 40009e48: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 40009e4c: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 40009e50: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 40009e54: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 40009e58: 80 a0 80 01 cmp %g2, %g1 40009e5c: 22 80 00 0c be,a 40009e8c <_Thread_queue_Dequeue_priority+0x11c> 40009e60: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 /* > two threads on 2-n */ new_second_node->previous = 40009e64: 82 00 e0 38 add %g3, 0x38, %g1 40009e68: c2 21 20 04 st %g1, [ %g4 + 4 ] _Chain_Head( &new_first_thread->Wait.Block2n ); new_first_thread->Wait.Block2n.first = new_second_node; 40009e6c: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] new_first_thread->Wait.Block2n.last = last_node; 40009e70: da 20 e0 40 st %o5, [ %g3 + 0x40 ] last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 40009e74: 82 00 e0 3c add %g3, 0x3c, %g1 40009e78: 10 80 00 04 b 40009e88 <_Thread_queue_Dequeue_priority+0x118> 40009e7c: c2 23 40 00 st %g1, [ %o5 ] } } else { previous_node->next = next_node; next_node->previous = previous_node; 40009e80: 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; 40009e84: c4 20 40 00 st %g2, [ %g1 ] next_node->previous = previous_node; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 40009e88: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 40009e8c: 80 a0 60 02 cmp %g1, 2 40009e90: 02 80 00 08 be 40009eb0 <_Thread_queue_Dequeue_priority+0x140> 40009e94: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 40009e98: 7f ff e0 0a call 40001ec0 40009e9c: 90 10 00 0c mov %o4, %o0 _Thread_Unblock( the_thread ); 40009ea0: 7f ff ff ae call 40009d58 <_Thread_Unblock> 40009ea4: 90 10 00 18 mov %i0, %o0 40009ea8: 81 c7 e0 08 ret 40009eac: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 40009eb0: c2 26 20 50 st %g1, [ %i0 + 0x50 ] } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 40009eb4: 7f ff e0 03 call 40001ec0 40009eb8: 90 10 00 0c mov %o4, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 40009ebc: 40 00 03 d3 call 4000ae08 <_Watchdog_Remove> 40009ec0: 90 06 20 48 add %i0, 0x48, %o0 _Thread_Unblock( the_thread ); 40009ec4: 7f ff ff a5 call 40009d58 <_Thread_Unblock> 40009ec8: 90 10 00 18 mov %i0, %o0 #if defined(RTEMS_MULTIPROCESSING) if ( !_Objects_Is_local_id( the_thread->Object.id ) ) _Thread_MP_Free_proxy( the_thread ); #endif return( the_thread ); } 40009ecc: 81 c7 e0 08 ret 40009ed0: 81 e8 00 00 restore 4000d5a8 <_Thread_queue_Enqueue_fifo>: void _Thread_queue_Enqueue_fifo ( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000d5a8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_queue_States sync_state; _ISR_Disable( level ); 4000d5ac: 7f ff d2 41 call 40001eb0 4000d5b0: a0 10 00 18 mov %i0, %l0 void _Thread_queue_Enqueue_fifo ( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000d5b4: b0 10 00 19 mov %i1, %i0 ISR_Level level; Thread_queue_States sync_state; _ISR_Disable( level ); sync_state = the_thread_queue->sync_state; 4000d5b8: c4 04 20 30 ld [ %l0 + 0x30 ], %g2 the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; switch ( sync_state ) { 4000d5bc: 80 a0 a0 02 cmp %g2, 2 4000d5c0: 02 80 00 10 be 4000d600 <_Thread_queue_Enqueue_fifo+0x58> 4000d5c4: c0 24 20 30 clr [ %l0 + 0x30 ] 4000d5c8: 80 a0 a0 03 cmp %g2, 3 4000d5cc: 02 80 00 12 be 4000d614 <_Thread_queue_Enqueue_fifo+0x6c> 4000d5d0: 80 a0 a0 01 cmp %g2, 1 4000d5d4: 32 80 00 1e bne,a 4000d64c <_Thread_queue_Enqueue_fifo+0xa4> 4000d5d8: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000d5dc: 82 04 20 04 add %l0, 4, %g1 4000d5e0: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 4000d5e4: c2 04 20 08 ld [ %l0 + 8 ], %g1 the_chain->last = the_node; 4000d5e8: f2 24 20 08 st %i1, [ %l0 + 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; 4000d5ec: e0 26 60 44 st %l0, [ %i1 + 0x44 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000d5f0: c2 26 60 04 st %g1, [ %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; 4000d5f4: f2 20 40 00 st %i1, [ %g1 ] _ISR_Enable( level ); 4000d5f8: 7f ff d2 32 call 40001ec0 4000d5fc: 91 e8 00 08 restore %g0, %o0, %o0 return; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000d600: c2 06 60 44 ld [ %i1 + 0x44 ], %g1 <== NOT EXECUTED the_thread->Wait.queue = NULL; 4000d604: 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; 4000d608: c2 00 60 3c ld [ %g1 + 0x3c ], %g1 <== NOT EXECUTED 4000d60c: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 4000d610: 30 80 00 0d b,a 4000d644 <_Thread_queue_Enqueue_fifo+0x9c> <== NOT EXECUTED break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 4000d614: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== NOT EXECUTED 4000d618: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000d61c: 12 80 00 0a bne 4000d644 <_Thread_queue_Enqueue_fifo+0x9c> <== NOT EXECUTED 4000d620: 01 00 00 00 nop <== NOT EXECUTED 4000d624: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 4000d628: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d62c: 7f ff d2 25 call 40001ec0 <== NOT EXECUTED 4000d630: 01 00 00 00 nop <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000d634: 7f ff f5 f5 call 4000ae08 <_Watchdog_Remove> <== NOT EXECUTED 4000d638: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 4000d63c: 10 80 00 04 b 4000d64c <_Thread_queue_Enqueue_fifo+0xa4> <== NOT EXECUTED 4000d640: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED } else _ISR_Enable( level ); 4000d644: 7f ff d2 1f call 40001ec0 <== NOT EXECUTED 4000d648: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000d64c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000d650: 7f ff ef ff call 4000964c <_Thread_Clear_state> <== NOT EXECUTED 4000d654: 81 e8 00 00 restore <== NOT EXECUTED 4000d658: 01 00 00 00 nop 40009f58 <_Thread_queue_Enqueue_priority>: void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 40009f58: 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; 40009f5c: 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); 40009f60: 82 06 60 3c add %i1, 0x3c, %g1 the_chain->permanent_null = NULL; 40009f64: c0 26 60 3c clr [ %i1 + 0x3c ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40009f68: c2 26 60 38 st %g1, [ %i1 + 0x38 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40009f6c: 82 06 60 38 add %i1, 0x38, %g1 40009f70: c2 26 60 40 st %g1, [ %i1 + 0x40 ] 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 ) ) 40009f74: 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); 40009f78: 85 34 a0 06 srl %l2, 6, %g2 40009f7c: 12 80 00 34 bne 4000a04c <_Thread_queue_Enqueue_priority+0xf4> 40009f80: ec 06 20 38 ld [ %i0 + 0x38 ], %l6 goto restart_reverse_search; restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->first; 40009f84: 83 28 a0 04 sll %g2, 4, %g1 40009f88: 85 28 a0 02 sll %g2, 2, %g2 40009f8c: aa 20 40 02 sub %g1, %g2, %l5 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40009f90: 82 06 00 15 add %i0, %l5, %g1 40009f94: a8 00 60 04 add %g1, 4, %l4 if ( _Thread_queue_Is_reverse_search( priority ) ) goto restart_reverse_search; restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); 40009f98: 7f ff df c6 call 40001eb0 40009f9c: 01 00 00 00 nop 40009fa0: a2 10 00 08 mov %o0, %l1 search_thread = (Thread_Control *) header->first; 40009fa4: e0 06 00 15 ld [ %i0 + %l5 ], %l0 40009fa8: 10 80 00 18 b 4000a008 <_Thread_queue_Enqueue_priority+0xb0> 40009fac: a6 10 3f ff mov -1, %l3 while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) { search_priority = search_thread->current_priority; if ( priority <= search_priority ) 40009fb0: 80 a4 80 13 cmp %l2, %l3 40009fb4: 28 80 00 19 bleu,a 4000a018 <_Thread_queue_Enqueue_priority+0xc0> 40009fb8: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.next; 40009fbc: e0 04 00 00 ld [ %l0 ], %l0 if ( _Chain_Is_tail( header, (Chain_Node *)search_thread ) ) 40009fc0: 80 a4 00 14 cmp %l0, %l4 40009fc4: 22 80 00 15 be,a 4000a018 <_Thread_queue_Enqueue_priority+0xc0> 40009fc8: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; 40009fcc: e6 04 20 14 ld [ %l0 + 0x14 ], %l3 if ( priority <= search_priority ) 40009fd0: 80 a4 80 13 cmp %l2, %l3 40009fd4: 28 80 00 11 bleu,a 4000a018 <_Thread_queue_Enqueue_priority+0xc0> 40009fd8: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; #endif _ISR_Flash( level ); 40009fdc: 7f ff df b9 call 40001ec0 40009fe0: 90 10 00 11 mov %l1, %o0 40009fe4: 7f ff df b3 call 40001eb0 40009fe8: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 40009fec: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40009ff0: 80 8d 80 01 btst %l6, %g1 40009ff4: 32 80 00 05 bne,a 4000a008 <_Thread_queue_Enqueue_priority+0xb0> 40009ff8: e0 04 00 00 ld [ %l0 ], %l0 _ISR_Enable( level ); 40009ffc: 7f ff df b1 call 40001ec0 <== NOT EXECUTED 4000a000: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000a004: 30 bf ff e5 b,a 40009f98 <_Thread_queue_Enqueue_priority+0x40> <== NOT EXECUTED 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 ) ) { 4000a008: 80 a4 00 14 cmp %l0, %l4 4000a00c: 32 bf ff e9 bne,a 40009fb0 <_Thread_queue_Enqueue_priority+0x58> 4000a010: e6 04 20 14 ld [ %l0 + 0x14 ], %l3 } search_thread = (Thread_Control *)search_thread->Object.Node.next; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000a014: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4000a018: 80 a0 60 01 cmp %g1, 1 4000a01c: 32 80 00 47 bne,a 4000a138 <_Thread_queue_Enqueue_priority+0x1e0> 4000a020: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 <== NOT EXECUTED goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 4000a024: 80 a4 80 13 cmp %l2, %l3 4000a028: 02 80 00 3c be 4000a118 <_Thread_queue_Enqueue_priority+0x1c0> 4000a02c: c0 26 20 30 clr [ %i0 + 0x30 ] goto equal_priority; search_node = (Chain_Node *) search_thread; previous_node = search_node->previous; 4000a030: c2 04 20 04 ld [ %l0 + 4 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 4000a034: e0 26 40 00 st %l0, [ %i1 ] the_node->previous = previous_node; 4000a038: 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; 4000a03c: f0 26 60 44 st %i0, [ %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; 4000a040: f2 20 40 00 st %i1, [ %g1 ] search_node->previous = the_node; 4000a044: f2 24 20 04 st %i1, [ %l0 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 4000a048: 30 80 00 32 b,a 4000a110 <_Thread_queue_Enqueue_priority+0x1b8> restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->last; 4000a04c: 83 28 a0 04 sll %g2, 4, %g1 4000a050: 85 28 a0 02 sll %g2, 2, %g2 4000a054: 82 20 40 02 sub %g1, %g2, %g1 4000a058: a6 00 40 18 add %g1, %i0, %l3 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 4000a05c: aa 10 00 13 mov %l3, %l5 return; restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); 4000a060: 7f ff df 94 call 40001eb0 4000a064: 01 00 00 00 nop 4000a068: a2 10 00 08 mov %o0, %l1 search_thread = (Thread_Control *) header->last; 4000a06c: e0 05 60 08 ld [ %l5 + 8 ], %l0 4000a070: 10 80 00 18 b 4000a0d0 <_Thread_queue_Enqueue_priority+0x178> 4000a074: a8 10 21 00 mov 0x100, %l4 while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) { search_priority = search_thread->current_priority; if ( priority >= search_priority ) 4000a078: 80 a4 80 14 cmp %l2, %l4 4000a07c: 3a 80 00 19 bcc,a 4000a0e0 <_Thread_queue_Enqueue_priority+0x188> 4000a080: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.previous; 4000a084: e0 04 20 04 ld [ %l0 + 4 ], %l0 if ( _Chain_Is_head( header, (Chain_Node *)search_thread ) ) 4000a088: 80 a4 00 13 cmp %l0, %l3 4000a08c: 22 80 00 15 be,a 4000a0e0 <_Thread_queue_Enqueue_priority+0x188> 4000a090: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; 4000a094: e8 04 20 14 ld [ %l0 + 0x14 ], %l4 if ( priority >= search_priority ) 4000a098: 80 a4 80 14 cmp %l2, %l4 4000a09c: 3a 80 00 11 bcc,a 4000a0e0 <_Thread_queue_Enqueue_priority+0x188> 4000a0a0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED break; #endif _ISR_Flash( level ); 4000a0a4: 7f ff df 87 call 40001ec0 4000a0a8: 90 10 00 11 mov %l1, %o0 4000a0ac: 7f ff df 81 call 40001eb0 4000a0b0: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 4000a0b4: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000a0b8: 80 8d 80 01 btst %l6, %g1 4000a0bc: 32 80 00 05 bne,a 4000a0d0 <_Thread_queue_Enqueue_priority+0x178> 4000a0c0: e0 04 20 04 ld [ %l0 + 4 ], %l0 _ISR_Enable( level ); 4000a0c4: 7f ff df 7f call 40001ec0 <== NOT EXECUTED 4000a0c8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000a0cc: 30 bf ff e5 b,a 4000a060 <_Thread_queue_Enqueue_priority+0x108> <== NOT EXECUTED 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 ) ) { 4000a0d0: 80 a4 00 13 cmp %l0, %l3 4000a0d4: 32 bf ff e9 bne,a 4000a078 <_Thread_queue_Enqueue_priority+0x120> 4000a0d8: e8 04 20 14 ld [ %l0 + 0x14 ], %l4 } search_thread = (Thread_Control *) search_thread->Object.Node.previous; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000a0dc: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4000a0e0: 80 a0 60 01 cmp %g1, 1 4000a0e4: 32 80 00 15 bne,a 4000a138 <_Thread_queue_Enqueue_priority+0x1e0> 4000a0e8: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 <== NOT EXECUTED goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 4000a0ec: 80 a4 80 14 cmp %l2, %l4 4000a0f0: 02 80 00 0a be 4000a118 <_Thread_queue_Enqueue_priority+0x1c0> 4000a0f4: c0 26 20 30 clr [ %i0 + 0x30 ] goto equal_priority; search_node = (Chain_Node *) search_thread; next_node = search_node->next; 4000a0f8: c2 04 00 00 ld [ %l0 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = next_node; the_node->previous = search_node; 4000a0fc: 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; 4000a100: 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; 4000a104: f0 26 60 44 st %i0, [ %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; 4000a108: f2 24 00 00 st %i1, [ %l0 ] next_node->previous = the_node; 4000a10c: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 4000a110: 7f ff df 6c call 40001ec0 4000a114: 91 e8 00 11 restore %g0, %l1, %o0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000a118: 82 04 20 3c add %l0, 0x3c, %g1 return; equal_priority: /* add at end of priority group */ search_node = _Chain_Tail( &search_thread->Wait.Block2n ); previous_node = search_node->previous; 4000a11c: c4 00 60 04 ld [ %g1 + 4 ], %g2 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 4000a120: c2 26 40 00 st %g1, [ %i1 ] the_node->previous = previous_node; 4000a124: 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; 4000a128: f0 26 60 44 st %i0, [ %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; 4000a12c: f2 20 80 00 st %i1, [ %g2 ] search_node->previous = the_node; 4000a130: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 4000a134: 30 bf ff f7 b,a 4000a110 <_Thread_queue_Enqueue_priority+0x1b8> synchronize: sync_state = the_thread_queue->sync_state; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; switch ( sync_state ) { 4000a138: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 4000a13c: 02 80 00 07 be 4000a158 <_Thread_queue_Enqueue_priority+0x200> <== NOT EXECUTED 4000a140: c0 26 20 30 clr [ %i0 + 0x30 ] <== NOT EXECUTED 4000a144: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 4000a148: 12 80 00 17 bne 4000a1a4 <_Thread_queue_Enqueue_priority+0x24c> <== NOT EXECUTED 4000a14c: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 4000a150: 10 80 00 07 b 4000a16c <_Thread_queue_Enqueue_priority+0x214> <== NOT EXECUTED 4000a154: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== 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; 4000a158: c2 06 60 44 ld [ %i1 + 0x44 ], %g1 <== NOT EXECUTED the_thread->Wait.queue = NULL; 4000a15c: 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; 4000a160: c2 00 60 3c ld [ %g1 + 0x3c ], %g1 <== NOT EXECUTED 4000a164: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 4000a168: 30 80 00 0c b,a 4000a198 <_Thread_queue_Enqueue_priority+0x240> <== NOT EXECUTED break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 4000a16c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000a170: 12 80 00 0a bne 4000a198 <_Thread_queue_Enqueue_priority+0x240> <== NOT EXECUTED 4000a174: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 4000a178: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 4000a17c: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 4000a180: 7f ff df 50 call 40001ec0 <== NOT EXECUTED 4000a184: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000a188: 40 00 03 20 call 4000ae08 <_Watchdog_Remove> <== NOT EXECUTED 4000a18c: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 4000a190: 10 80 00 05 b 4000a1a4 <_Thread_queue_Enqueue_priority+0x24c> <== NOT EXECUTED 4000a194: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED } else _ISR_Enable( level ); 4000a198: 7f ff df 4a call 40001ec0 <== NOT EXECUTED 4000a19c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000a1a0: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000a1a4: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000a1a8: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000a1ac: 7f ff fd 28 call 4000964c <_Thread_Clear_state> <== NOT EXECUTED 4000a1b0: 81 e8 00 00 restore <== NOT EXECUTED 4000a1b4: 01 00 00 00 nop 40009ed4 <_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 ) { 40009ed4: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *the_thread; the_thread = _Thread_Executing; 40009ed8: 03 10 00 67 sethi %hi(0x40019c00), %g1 else #endif /* * Set the blocking state for this thread queue in the thread. */ _Thread_Set_state( the_thread, the_thread_queue->state ); 40009edc: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 Thread_queue_Timeout_callout handler ) { Thread_Control *the_thread; the_thread = _Thread_Executing; 40009ee0: e0 00 63 7c ld [ %g1 + 0x37c ], %l0 void _Thread_queue_Enqueue_with_handler( Thread_queue_Control *the_thread_queue, Watchdog_Interval timeout, Thread_queue_Timeout_callout handler ) { 40009ee4: 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 ); 40009ee8: 40 00 01 79 call 4000a4cc <_Thread_Set_state> 40009eec: 90 10 00 10 mov %l0, %o0 /* * If the thread wants to timeout, then schedule its timer. */ if ( timeout ) { 40009ef0: 80 a6 60 00 cmp %i1, 0 40009ef4: 22 80 00 0d be,a 40009f28 <_Thread_queue_Enqueue_with_handler+0x54> 40009ef8: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 _Watchdog_Initialize( 40009efc: c2 04 20 08 ld [ %l0 + 8 ], %g1 ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40009f00: 11 10 00 67 sethi %hi(0x40019c00), %o0 Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40009f04: f4 24 20 64 st %i2, [ %l0 + 0x64 ] the_watchdog->id = id; 40009f08: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40009f0c: f2 24 20 54 st %i1, [ %l0 + 0x54 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40009f10: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40009f14: c0 24 20 6c clr [ %l0 + 0x6c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40009f18: 90 12 23 9c or %o0, 0x39c, %o0 40009f1c: 40 00 03 63 call 4000aca8 <_Watchdog_Insert> 40009f20: 92 04 20 48 add %l0, 0x48, %o1 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 40009f24: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 40009f28: 80 a0 60 00 cmp %g1, 0 40009f2c: 02 80 00 05 be 40009f40 <_Thread_queue_Enqueue_with_handler+0x6c> 40009f30: 80 a0 60 01 cmp %g1, 1 40009f34: 12 80 00 07 bne 40009f50 <_Thread_queue_Enqueue_with_handler+0x7c> 40009f38: 01 00 00 00 nop 40009f3c: 30 80 00 03 b,a 40009f48 <_Thread_queue_Enqueue_with_handler+0x74> case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Enqueue_fifo( the_thread_queue, the_thread ); 40009f40: 40 00 0d 9a call 4000d5a8 <_Thread_queue_Enqueue_fifo> 40009f44: 93 e8 00 10 restore %g0, %l0, %o1 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Enqueue_priority( the_thread_queue, the_thread ); 40009f48: 40 00 00 04 call 40009f58 <_Thread_queue_Enqueue_priority> 40009f4c: 93 e8 00 10 restore %g0, %l0, %o1 40009f50: 81 c7 e0 08 ret <== NOT EXECUTED 40009f54: 81 e8 00 00 restore <== NOT EXECUTED 4000d65c <_Thread_queue_Extract>: void _Thread_queue_Extract( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { switch ( the_thread_queue->discipline ) { 4000d65c: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4000d660: 80 a0 60 00 cmp %g1, 0 4000d664: 02 80 00 05 be 4000d678 <_Thread_queue_Extract+0x1c> 4000d668: 80 a0 60 01 cmp %g1, 1 4000d66c: 12 80 00 09 bne 4000d690 <_Thread_queue_Extract+0x34> 4000d670: 94 10 20 00 clr %o2 4000d674: 30 80 00 04 b,a 4000d684 <_Thread_queue_Extract+0x28> case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Extract_fifo( the_thread_queue, the_thread ); 4000d678: 82 13 c0 00 mov %o7, %g1 4000d67c: 40 00 03 2a call 4000e324 <_Thread_queue_Extract_fifo> 4000d680: 9e 10 40 00 mov %g1, %o7 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Extract_priority( the_thread_queue, the_thread ); 4000d684: 82 13 c0 00 mov %o7, %g1 4000d688: 40 00 00 04 call 4000d698 <_Thread_queue_Extract_priority_helper> 4000d68c: 9e 10 40 00 mov %g1, %o7 4000d690: 81 c3 e0 08 retl <== NOT EXECUTED 4000d694: 01 00 00 00 nop 4000e324 <_Thread_queue_Extract_fifo>: void _Thread_queue_Extract_fifo( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000e324: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; _ISR_Disable( level ); 4000e328: 7f ff ce e2 call 40001eb0 4000e32c: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000e330: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000e334: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000e338: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000e33c: 80 88 80 01 btst %g2, %g1 4000e340: 32 80 00 04 bne,a 4000e350 <_Thread_queue_Extract_fifo+0x2c> 4000e344: c2 06 40 00 ld [ %i1 ], %g1 _ISR_Enable( level ); 4000e348: 7f ff ce de call 40001ec0 <== NOT EXECUTED 4000e34c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 4000e350: 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 ) ) { 4000e354: c6 06 60 50 ld [ %i1 + 0x50 ], %g3 next->previous = previous; previous->next = next; 4000e358: c2 20 80 00 st %g1, [ %g2 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000e35c: c4 20 60 04 st %g2, [ %g1 + 4 ] 4000e360: 80 a0 e0 02 cmp %g3, 2 4000e364: 02 80 00 06 be 4000e37c <_Thread_queue_Extract_fifo+0x58> 4000e368: c0 26 60 44 clr [ %i1 + 0x44 ] _ISR_Enable( level ); 4000e36c: 7f ff ce d5 call 40001ec0 4000e370: 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 ); 4000e374: 10 80 00 0a b 4000e39c <_Thread_queue_Extract_fifo+0x78> 4000e378: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000e37c: 82 10 20 03 mov 3, %g1 4000e380: c2 26 60 50 st %g1, [ %i1 + 0x50 ] } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000e384: 7f ff ce cf call 40001ec0 4000e388: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 4000e38c: 7f ff f2 9f call 4000ae08 <_Watchdog_Remove> 4000e390: 90 06 60 48 add %i1, 0x48, %o0 4000e394: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000e398: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000e39c: 7f ff ec ac call 4000964c <_Thread_Clear_state> 4000e3a0: 81 e8 00 00 restore 4000e3a4: 01 00 00 00 nop 4000d698 <_Thread_queue_Extract_priority_helper>: void _Thread_queue_Extract_priority_helper( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread, boolean requeuing ) { 4000d698: 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 ); 4000d69c: 7f ff d2 05 call 40001eb0 4000d6a0: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000d6a4: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000d6a8: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000d6ac: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000d6b0: 80 88 80 01 btst %g2, %g1 4000d6b4: 32 80 00 03 bne,a 4000d6c0 <_Thread_queue_Extract_priority_helper+0x28> 4000d6b8: c6 06 60 38 ld [ %i1 + 0x38 ], %g3 _ISR_Enable( level ); 4000d6bc: 30 80 00 1d b,a 4000d730 <_Thread_queue_Extract_priority_helper+0x98> <== NOT EXECUTED */ next_node = the_node->next; previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 4000d6c0: 82 06 60 3c add %i1, 0x3c, %g1 /* * The thread was actually waiting on a thread queue so let's remove it. */ next_node = the_node->next; 4000d6c4: c4 06 40 00 ld [ %i1 ], %g2 previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 4000d6c8: 80 a0 c0 01 cmp %g3, %g1 4000d6cc: 02 80 00 14 be 4000d71c <_Thread_queue_Extract_priority_helper+0x84> 4000d6d0: c2 06 60 04 ld [ %i1 + 4 ], %g1 new_first_node = the_thread->Wait.Block2n.first; new_first_thread = (Thread_Control *) new_first_node; last_node = the_thread->Wait.Block2n.last; 4000d6d4: da 06 60 40 ld [ %i1 + 0x40 ], %o5 new_second_node = new_first_node->next; 4000d6d8: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 4000d6dc: 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; 4000d6e0: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 4000d6e4: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 4000d6e8: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 4000d6ec: c4 06 60 38 ld [ %i1 + 0x38 ], %g2 4000d6f0: c2 06 60 40 ld [ %i1 + 0x40 ], %g1 4000d6f4: 80 a0 80 01 cmp %g2, %g1 4000d6f8: 02 80 00 0c be 4000d728 <_Thread_queue_Extract_priority_helper+0x90> 4000d6fc: 80 a6 a0 00 cmp %i2, 0 /* > two threads on 2-n */ new_second_node->previous = 4000d700: 82 00 e0 38 add %g3, 0x38, %g1 <== NOT EXECUTED 4000d704: 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; 4000d708: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] <== NOT EXECUTED new_first_thread->Wait.Block2n.last = last_node; 4000d70c: da 20 e0 40 st %o5, [ %g3 + 0x40 ] <== NOT EXECUTED last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 4000d710: 82 00 e0 3c add %g3, 0x3c, %g1 <== NOT EXECUTED 4000d714: 10 80 00 05 b 4000d728 <_Thread_queue_Extract_priority_helper+0x90> <== NOT EXECUTED 4000d718: c2 23 40 00 st %g1, [ %o5 ] <== NOT EXECUTED } } else { previous_node->next = next_node; next_node->previous = previous_node; 4000d71c: 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; 4000d720: c4 20 40 00 st %g2, [ %g1 ] /* * If we are not supposed to touch timers or the thread's state, return. */ if ( requeuing ) { 4000d724: 80 a6 a0 00 cmp %i2, 0 4000d728: 22 80 00 04 be,a 4000d738 <_Thread_queue_Extract_priority_helper+0xa0> 4000d72c: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 _ISR_Enable( level ); 4000d730: 7f ff d1 e4 call 40001ec0 4000d734: 91 e8 00 08 restore %g0, %o0, %o0 return; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000d738: 80 a0 60 02 cmp %g1, 2 4000d73c: 02 80 00 06 be 4000d754 <_Thread_queue_Extract_priority_helper+0xbc> 4000d740: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 4000d744: 7f ff d1 df call 40001ec0 4000d748: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000d74c: 10 80 00 08 b 4000d76c <_Thread_queue_Extract_priority_helper+0xd4> 4000d750: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000d754: c2 26 20 50 st %g1, [ %i0 + 0x50 ] <== NOT EXECUTED } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000d758: 7f ff d1 da call 40001ec0 <== NOT EXECUTED 4000d75c: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000d760: 7f ff f5 aa call 4000ae08 <_Watchdog_Remove> <== NOT EXECUTED 4000d764: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED 4000d768: b2 16 63 f8 or %i1, 0x3f8, %i1 <== NOT EXECUTED 4000d76c: 7f ff ef b8 call 4000964c <_Thread_Clear_state> 4000d770: 81 e8 00 00 restore 4000d774: 01 00 00 00 nop 4000a1b8 <_Thread_queue_Extract_with_proxy>: */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 4000a1b8: 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; 4000a1bc: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 4000a1c0: 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 ) ) { 4000a1c4: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000a1c8: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000a1cc: 80 88 80 01 btst %g2, %g1 4000a1d0: 02 80 00 1e be 4000a248 <_Thread_queue_Extract_with_proxy+0x90> 4000a1d4: b0 10 20 00 clr %i0 if ( _States_Is_waiting_for_rpc_reply( state ) && 4000a1d8: 03 00 00 08 sethi %hi(0x2000), %g1 4000a1dc: 80 88 80 01 btst %g2, %g1 4000a1e0: 22 80 00 17 be,a 4000a23c <_Thread_queue_Extract_with_proxy+0x84> 4000a1e4: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 4000a1e8: 03 00 00 e7 sethi %hi(0x39c00), %g1 <== NOT EXECUTED 4000a1ec: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 39ee0 <== NOT EXECUTED 4000a1f0: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 4000a1f4: 22 80 00 12 be,a 4000a23c <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 4000a1f8: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED _States_Is_locally_blocked( state ) ) { the_information = _Objects_Get_information( the_thread->Wait.id ); 4000a1fc: c6 04 20 20 ld [ %l0 + 0x20 ], %g3 <== NOT EXECUTED proxy_extract_callout = 4000a200: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000a204: 85 30 e0 16 srl %g3, 0x16, %g2 <== NOT EXECUTED 4000a208: 82 10 62 00 or %g1, 0x200, %g1 <== NOT EXECUTED 4000a20c: 84 08 a0 1c and %g2, 0x1c, %g2 <== NOT EXECUTED 4000a210: c2 00 40 02 ld [ %g1 + %g2 ], %g1 <== NOT EXECUTED 4000a214: 87 30 e0 1b srl %g3, 0x1b, %g3 <== NOT EXECUTED 4000a218: 87 28 e0 02 sll %g3, 2, %g3 <== NOT EXECUTED 4000a21c: c2 00 40 03 ld [ %g1 + %g3 ], %g1 <== NOT EXECUTED 4000a220: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 <== NOT EXECUTED (Objects_Thread_queue_Extract_callout) the_information->extract; if ( proxy_extract_callout ) 4000a224: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000a228: 22 80 00 05 be,a 4000a23c <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 4000a22c: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED (*proxy_extract_callout)( the_thread ); 4000a230: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000a234: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 4000a238: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED 4000a23c: 92 10 00 10 mov %l0, %o1 4000a240: 40 00 0d 07 call 4000d65c <_Thread_queue_Extract> 4000a244: b0 10 20 01 mov 1, %i0 return TRUE; } return FALSE; } 4000a248: 81 c7 e0 08 ret 4000a24c: 81 e8 00 00 restore 4001af80 <_Thread_queue_First>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4001af80: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4001af84: 80 a0 60 00 cmp %g1, 0 4001af88: 02 80 00 05 be 4001af9c <_Thread_queue_First+0x1c> 4001af8c: 80 a0 60 01 cmp %g1, 1 4001af90: 12 80 00 09 bne 4001afb4 <_Thread_queue_First+0x34> 4001af94: 01 00 00 00 nop 4001af98: 30 80 00 04 b,a 4001afa8 <_Thread_queue_First+0x28> case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_First_fifo( the_thread_queue ); 4001af9c: 82 13 c0 00 mov %o7, %g1 4001afa0: 40 00 02 da call 4001bb08 <_Thread_queue_First_fifo> 4001afa4: 9e 10 40 00 mov %g1, %o7 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_First_priority( the_thread_queue ); 4001afa8: 82 13 c0 00 mov %o7, %g1 4001afac: 40 00 00 04 call 4001afbc <_Thread_queue_First_priority> 4001afb0: 9e 10 40 00 mov %g1, %o7 the_thread = NULL; break; } return the_thread; } 4001afb4: 81 c3 e0 08 retl <== NOT EXECUTED 4001afb8: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000a2fc <_Thread_queue_Requeue>: void _Thread_queue_Requeue( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000a2fc: 9d e3 bf 98 save %sp, -104, %sp /* just in case the thread really wasn't blocked here */ if ( !the_thread_queue ) { 4000a300: 80 a6 20 00 cmp %i0, 0 4000a304: 02 80 00 18 be 4000a364 <_Thread_queue_Requeue+0x68> 4000a308: 01 00 00 00 nop return; } switch ( the_thread_queue->discipline ) { 4000a30c: e0 06 20 34 ld [ %i0 + 0x34 ], %l0 4000a310: 80 a4 20 01 cmp %l0, 1 4000a314: 12 80 00 14 bne 4000a364 <_Thread_queue_Requeue+0x68> 4000a318: 01 00 00 00 nop break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: { Thread_queue_Control *tq = the_thread_queue; ISR_Level level; _ISR_Disable( level ); 4000a31c: 7f ff de e5 call 40001eb0 4000a320: 01 00 00 00 nop 4000a324: a2 10 00 08 mov %o0, %l1 if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000a328: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000a32c: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000a330: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000a334: 80 88 80 01 btst %g2, %g1 4000a338: 02 80 00 09 be 4000a35c <_Thread_queue_Requeue+0x60> 4000a33c: 90 10 00 18 mov %i0, %o0 _Thread_queue_Enter_critical_section( tq ); _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE ); 4000a340: 92 10 00 19 mov %i1, %o1 4000a344: 94 10 20 01 mov 1, %o2 4000a348: 40 00 0c d4 call 4000d698 <_Thread_queue_Extract_priority_helper> 4000a34c: e0 26 20 30 st %l0, [ %i0 + 0x30 ] _Thread_queue_Enqueue_priority( tq, the_thread ); 4000a350: 90 10 00 18 mov %i0, %o0 4000a354: 7f ff ff 01 call 40009f58 <_Thread_queue_Enqueue_priority> 4000a358: 92 10 00 19 mov %i1, %o1 } _ISR_Enable( level ); 4000a35c: 7f ff de d9 call 40001ec0 4000a360: 91 e8 00 11 restore %g0, %l1, %o0 4000a364: 81 c7 e0 08 ret <== NOT EXECUTED 4000a368: 81 e8 00 00 restore <== NOT EXECUTED 4000a36c <_Thread_queue_Timeout>: void _Thread_queue_Timeout( Objects_Id id, void *ignored ) { 4000a36c: 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 ) ) { 4000a370: 92 96 20 00 orcc %i0, 0, %o1 4000a374: 12 80 00 0a bne 4000a39c <_Thread_queue_Timeout+0x30> 4000a378: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000a37c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000a380: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000a384: 84 00 a0 01 inc %g2 <== NOT EXECUTED 4000a388: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] <== 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; 4000a38c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000a390: d2 00 63 7c ld [ %g1 + 0x37c ], %o1 ! 40019f7c <_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; 4000a394: 10 80 00 18 b 4000a3f4 <_Thread_queue_Timeout+0x88> <== NOT EXECUTED 4000a398: c0 27 bf f4 clr [ %fp + -12 ] <== 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); 4000a39c: 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 ) { 4000a3a0: 80 a0 a0 04 cmp %g2, 4 4000a3a4: 18 80 00 0e bgu 4000a3dc <_Thread_queue_Timeout+0x70> 4000a3a8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000a3ac: 83 32 60 1b srl %o1, 0x1b, %g1 4000a3b0: 80 a0 60 01 cmp %g1, 1 4000a3b4: 12 80 00 0a bne 4000a3dc <_Thread_queue_Timeout+0x70> 4000a3b8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000a3bc: 83 28 a0 02 sll %g2, 2, %g1 4000a3c0: 05 10 00 67 sethi %hi(0x40019c00), %g2 4000a3c4: 84 10 a2 00 or %g2, 0x200, %g2 ! 40019e00 <_Objects_Information_table> 4000a3c8: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000a3cc: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 4000a3d0: 80 a2 20 00 cmp %o0, 0 4000a3d4: 12 80 00 05 bne 4000a3e8 <_Thread_queue_Timeout+0x7c> 4000a3d8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4000a3dc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000a3e0: 10 80 00 05 b 4000a3f4 <_Thread_queue_Timeout+0x88> <== NOT EXECUTED 4000a3e4: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000a3e8: 7f ff f8 5f call 40008564 <_Objects_Get> 4000a3ec: 94 07 bf f4 add %fp, -12, %o2 4000a3f0: 92 10 00 08 mov %o0, %o1 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000a3f4: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000a3f8: 80 a0 60 00 cmp %g1, 0 4000a3fc: 12 80 00 18 bne 4000a45c <_Thread_queue_Timeout+0xf0> 4000a400: 01 00 00 00 nop */ static inline void _Thread_queue_Process_timeout( Thread_Control *the_thread ) { Thread_queue_Control *the_thread_queue = the_thread->Wait.queue; 4000a404: c4 02 60 44 ld [ %o1 + 0x44 ], %g2 * 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 && 4000a408: c6 00 a0 30 ld [ %g2 + 0x30 ], %g3 4000a40c: 80 a0 e0 00 cmp %g3, 0 4000a410: 02 80 00 0b be 4000a43c <_Thread_queue_Timeout+0xd0> 4000a414: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000a418: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 40019f7c <_Thread_Executing> <== NOT EXECUTED 4000a41c: 80 a2 40 01 cmp %o1, %g1 <== NOT EXECUTED 4000a420: 32 80 00 08 bne,a 4000a440 <_Thread_queue_Timeout+0xd4> <== NOT EXECUTED 4000a424: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED ) 4000a428: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000a42c: 02 80 00 08 be 4000a44c <_Thread_queue_Timeout+0xe0> <== NOT EXECUTED 4000a430: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT; 4000a434: 10 80 00 06 b 4000a44c <_Thread_queue_Timeout+0xe0> <== NOT EXECUTED 4000a438: c2 20 a0 30 st %g1, [ %g2 + 0x30 ] <== NOT EXECUTED } else { the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000a43c: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 4000a440: d0 02 60 44 ld [ %o1 + 0x44 ], %o0 4000a444: 40 00 0c 86 call 4000d65c <_Thread_queue_Extract> 4000a448: 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; 4000a44c: 05 10 00 67 sethi %hi(0x40019c00), %g2 4000a450: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 4000a454: 82 00 7f ff add %g1, -1, %g1 4000a458: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 4000a45c: 81 c7 e0 08 ret 4000a460: 81 e8 00 00 restore 4001386c <_Timer_Server_body>: */ Thread _Timer_Server_body( uint32_t ignored ) { 4001386c: 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; 40013870: 03 10 00 cd sethi %hi(0x40033400), %g1 40013874: c8 00 60 14 ld [ %g1 + 0x14 ], %g4 ! 40033414 <_Watchdog_Ticks_since_boot> _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 40013878: 03 10 00 cc sethi %hi(0x40033000), %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001387c: 07 10 00 cc sethi %hi(0x40033000), %g3 40013880: da 00 63 48 ld [ %g1 + 0x348 ], %o5 40013884: c2 00 e2 90 ld [ %g3 + 0x290 ], %g1 /* * Initialize the "last time" markers to indicate the timer that * the server was initiated. */ _Timer_Server_ticks_last_time = _Watchdog_Ticks_since_boot; 40013888: 05 10 00 cc sethi %hi(0x40033000), %g2 4001388c: 82 00 60 01 inc %g1 40013890: c8 20 a1 9c st %g4, [ %g2 + 0x19c ] 40013894: c2 20 e2 90 st %g1, [ %g3 + 0x290 ] _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 40013898: 03 10 00 cc sethi %hi(0x40033000), %g1 4001389c: da 20 61 98 st %o5, [ %g1 + 0x198 ] ! 40033198 <_Timer_Server_seconds_last_time> ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400138a0: 03 10 00 cc sethi %hi(0x40033000), %g1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 400138a4: 27 10 00 cc sethi %hi(0x40033000), %l3 400138a8: ba 10 63 8c or %g1, 0x38c, %i5 400138ac: 82 14 e1 8c or %l3, 0x18c, %g1 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400138b0: ae 00 60 04 add %g1, 4, %l7 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400138b4: 03 10 00 cc sethi %hi(0x40033000), %g1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 400138b8: 25 10 00 cc sethi %hi(0x40033000), %l2 400138bc: a2 10 61 ac or %g1, 0x1ac, %l1 400138c0: 82 14 a1 a0 or %l2, 0x1a0, %g1 400138c4: a8 10 00 03 mov %g3, %l4 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400138c8: ac 00 60 04 add %g1, 4, %l6 /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 400138cc: 21 10 00 cd sethi %hi(0x40033400), %l0 _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 400138d0: 03 10 00 cc sethi %hi(0x40033000), %g1 400138d4: aa 10 63 80 or %g1, 0x380, %l5 ! 40033380 <_Watchdog_Seconds_chain> 400138d8: d0 04 22 48 ld [ %l0 + 0x248 ], %o0 400138dc: 40 00 10 11 call 40017920 <_Thread_Set_state> 400138e0: 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)); 400138e4: c2 04 e1 8c ld [ %l3 + 0x18c ], %g1 _Timer_Server_reset_ticks_timer(); 400138e8: 80 a0 40 17 cmp %g1, %l7 400138ec: 22 80 00 09 be,a 40013910 <_Timer_Server_body+0xa4> 400138f0: c2 04 a1 a0 ld [ %l2 + 0x1a0 ], %g1 400138f4: d2 04 22 48 ld [ %l0 + 0x248 ], %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400138f8: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400138fc: 90 10 00 1d mov %i5, %o0 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013900: c2 22 60 54 st %g1, [ %o1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013904: 40 00 12 c0 call 40018404 <_Watchdog_Insert> 40013908: 92 02 60 48 add %o1, 0x48, %o1 4001390c: c2 04 a1 a0 ld [ %l2 + 0x1a0 ], %g1 _Timer_Server_reset_seconds_timer(); 40013910: 80 a0 40 16 cmp %g1, %l6 40013914: 02 80 00 06 be 4001392c <_Timer_Server_body+0xc0> 40013918: 92 10 00 11 mov %l1, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4001391c: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 40013920: c2 24 60 0c st %g1, [ %l1 + 0xc ] <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 40013924: 40 00 12 b8 call 40018404 <_Watchdog_Insert> <== NOT EXECUTED 40013928: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED _Thread_Enable_dispatch(); 4001392c: 7f ff ff c3 call 40013838 <_Thread_Enable_dispatch> 40013930: 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(); 40013934: d0 04 22 48 ld [ %l0 + 0x248 ], %o0 40013938: 40 00 13 0b call 40018564 <_Watchdog_Remove> 4001393c: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_stop_seconds_timer(); 40013940: 40 00 13 09 call 40018564 <_Watchdog_Remove> 40013944: 90 10 00 11 mov %l1, %o0 40013948: c2 05 22 90 ld [ %l4 + 0x290 ], %g1 4001394c: 82 00 60 01 inc %g1 40013950: c2 25 22 90 st %g1, [ %l4 + 0x290 ] * 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(); 40013954: 7f ff ff a7 call 400137f0 <_Timer_Server_process_ticks_chain> 40013958: 01 00 00 00 nop _Timer_Server_process_seconds_chain(); 4001395c: 7f ff ff 8d call 40013790 <_Timer_Server_process_seconds_chain> 40013960: 01 00 00 00 nop /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 40013964: 10 bf ff de b 400138dc <_Timer_Server_body+0x70> 40013968: d0 04 22 48 ld [ %l0 + 0x248 ], %o0 400137f0 <_Timer_Server_process_ticks_chain>: void _Timer_Server_process_ticks_chain(void) { Watchdog_Interval snapshot; Watchdog_Interval ticks; snapshot = _Watchdog_Ticks_since_boot; 400137f0: 03 10 00 cd sethi %hi(0x40033400), %g1 400137f4: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 ! 40033414 <_Watchdog_Ticks_since_boot> if ( snapshot >= _Timer_Server_ticks_last_time ) 400137f8: 03 10 00 cc sethi %hi(0x40033000), %g1 400137fc: c2 00 61 9c ld [ %g1 + 0x19c ], %g1 ! 4003319c <_Timer_Server_ticks_last_time> 40013800: 80 a0 80 01 cmp %g2, %g1 40013804: 1a 80 00 04 bcc 40013814 <_Timer_Server_process_ticks_chain+0x24> 40013808: 94 20 80 01 sub %g2, %g1, %o2 ticks = snapshot - _Timer_Server_ticks_last_time; else ticks = (0xFFFFFFFF - _Timer_Server_ticks_last_time) + snapshot; 4001380c: 82 38 00 01 xnor %g0, %g1, %g1 <== NOT EXECUTED 40013810: 94 00 40 02 add %g1, %g2, %o2 <== NOT EXECUTED _Timer_Server_ticks_last_time = snapshot; 40013814: 03 10 00 cc sethi %hi(0x40033000), %g1 _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 40013818: 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; 4001381c: c4 20 61 9c st %g2, [ %g1 + 0x19c ] _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 40013820: 90 12 21 8c or %o0, 0x18c, %o0 40013824: 92 10 20 00 clr %o1 40013828: 82 13 c0 00 mov %o7, %g1 4001382c: 40 00 12 ce call 40018364 <_Watchdog_Adjust> 40013830: 9e 10 40 00 mov %g1, %o7 40013834: 01 00 00 00 nop 4000c72c <_Timespec_Divide>: const struct timespec *lhs, const struct timespec *rhs, uint32_t *ival_percentage, uint32_t *fval_percentage ) { 4000c72c: 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; 4000c730: 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; 4000c734: de 06 20 04 ld [ %i0 + 4 ], %o7 right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000c738: 96 10 00 01 mov %g1, %o3 4000c73c: 95 38 60 1f sra %g1, 0x1f, %o2 4000c740: 83 30 60 1d srl %g1, 0x1d, %g1 4000c744: 9b 2a e0 03 sll %o3, 3, %o5 4000c748: 99 2a a0 03 sll %o2, 3, %o4 4000c74c: 98 10 40 0c or %g1, %o4, %o4 4000c750: 83 33 60 1b srl %o5, 0x1b, %g1 4000c754: 85 2b 20 05 sll %o4, 5, %g2 4000c758: 87 2b 60 05 sll %o5, 5, %g3 4000c75c: 84 10 40 02 or %g1, %g2, %g2 4000c760: 86 a0 c0 0d subcc %g3, %o5, %g3 4000c764: 83 30 e0 1a srl %g3, 0x1a, %g1 4000c768: 84 60 80 0c subx %g2, %o4, %g2 4000c76c: 9b 28 e0 06 sll %g3, 6, %o5 4000c770: 99 28 a0 06 sll %g2, 6, %o4 4000c774: 9a a3 40 03 subcc %o5, %g3, %o5 4000c778: 98 10 40 0c or %g1, %o4, %o4 4000c77c: 98 63 00 02 subx %o4, %g2, %o4 4000c780: 9a 83 40 0b addcc %o5, %o3, %o5 4000c784: 83 33 60 1e srl %o5, 0x1e, %g1 4000c788: 98 43 00 0a addx %o4, %o2, %o4 4000c78c: 87 2b 60 02 sll %o5, 2, %g3 4000c790: 85 2b 20 02 sll %o4, 2, %g2 4000c794: 9a 83 40 03 addcc %o5, %g3, %o5 4000c798: 84 10 40 02 or %g1, %g2, %g2 4000c79c: 83 33 60 1e srl %o5, 0x1e, %g1 4000c7a0: 98 43 00 02 addx %o4, %g2, %o4 4000c7a4: 87 2b 60 02 sll %o5, 2, %g3 4000c7a8: 85 2b 20 02 sll %o4, 2, %g2 4000c7ac: 9a 83 40 03 addcc %o5, %g3, %o5 4000c7b0: 84 10 40 02 or %g1, %g2, %g2 4000c7b4: 83 33 60 1e srl %o5, 0x1e, %g1 4000c7b8: 98 43 00 02 addx %o4, %g2, %o4 4000c7bc: 85 2b 20 02 sll %o4, 2, %g2 4000c7c0: 84 10 40 02 or %g1, %g2, %g2 right += rhs->tv_nsec; 4000c7c4: 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; 4000c7c8: 87 2b 60 02 sll %o5, 2, %g3 4000c7cc: 9a 83 40 03 addcc %o5, %g3, %o5 right += rhs->tv_nsec; 4000c7d0: 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; 4000c7d4: 98 43 00 02 addx %o4, %g2, %o4 4000c7d8: 89 33 60 17 srl %o5, 0x17, %g4 4000c7dc: 85 2b 20 09 sll %o4, 9, %g2 4000c7e0: 87 2b 60 09 sll %o5, 9, %g3 4000c7e4: 84 11 00 02 or %g4, %g2, %g2 right += rhs->tv_nsec; 4000c7e8: 96 80 c0 01 addcc %g3, %g1, %o3 4000c7ec: 94 40 80 0a addx %g2, %o2, %o2 if ( right == 0 ) { 4000c7f0: 80 92 80 0b orcc %o2, %o3, %g0 4000c7f4: 12 80 00 06 bne 4000c80c <_Timespec_Divide+0xe0> 4000c7f8: f0 06 00 00 ld [ %i0 ], %i0 *ival_percentage = 0; 4000c7fc: c0 26 80 00 clr [ %i2 ] <== NOT EXECUTED *fval_percentage = 0; 4000c800: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED 4000c804: 81 c7 e0 08 ret <== NOT EXECUTED 4000c808: 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; 4000c80c: 83 36 20 1d srl %i0, 0x1d, %g1 4000c810: 9b 2e 20 03 sll %i0, 3, %o5 4000c814: 91 3e 20 1f sra %i0, 0x1f, %o0 4000c818: 99 2a 20 03 sll %o0, 3, %o4 4000c81c: 98 10 40 0c or %g1, %o4, %o4 4000c820: 83 33 60 1b srl %o5, 0x1b, %g1 4000c824: 85 2b 20 05 sll %o4, 5, %g2 4000c828: 87 2b 60 05 sll %o5, 5, %g3 4000c82c: 84 10 40 02 or %g1, %g2, %g2 4000c830: 86 a0 c0 0d subcc %g3, %o5, %g3 4000c834: 83 30 e0 1a srl %g3, 0x1a, %g1 4000c838: 84 60 80 0c subx %g2, %o4, %g2 4000c83c: 9b 28 e0 06 sll %g3, 6, %o5 4000c840: 99 28 a0 06 sll %g2, 6, %o4 4000c844: 9a a3 40 03 subcc %o5, %g3, %o5 4000c848: 98 10 40 0c or %g1, %o4, %o4 4000c84c: 98 63 00 02 subx %o4, %g2, %o4 4000c850: 9a 83 40 18 addcc %o5, %i0, %o5 4000c854: 83 33 60 1e srl %o5, 0x1e, %g1 4000c858: 98 43 00 08 addx %o4, %o0, %o4 4000c85c: 87 2b 60 02 sll %o5, 2, %g3 4000c860: 85 2b 20 02 sll %o4, 2, %g2 4000c864: 9a 83 40 03 addcc %o5, %g3, %o5 4000c868: 84 10 40 02 or %g1, %g2, %g2 4000c86c: 83 33 60 1e srl %o5, 0x1e, %g1 4000c870: 98 43 00 02 addx %o4, %g2, %o4 4000c874: 87 2b 60 02 sll %o5, 2, %g3 4000c878: 85 2b 20 02 sll %o4, 2, %g2 4000c87c: 9a 83 40 03 addcc %o5, %g3, %o5 4000c880: 84 10 40 02 or %g1, %g2, %g2 4000c884: 83 33 60 1e srl %o5, 0x1e, %g1 4000c888: 98 43 00 02 addx %o4, %g2, %o4 4000c88c: 87 2b 60 02 sll %o5, 2, %g3 4000c890: 85 2b 20 02 sll %o4, 2, %g2 4000c894: 9a 83 40 03 addcc %o5, %g3, %o5 4000c898: 84 10 40 02 or %g1, %g2, %g2 4000c89c: 83 33 60 17 srl %o5, 0x17, %g1 4000c8a0: 98 43 00 02 addx %o4, %g2, %o4 4000c8a4: 93 2b 60 09 sll %o5, 9, %o1 4000c8a8: 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; 4000c8ac: 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; 4000c8b0: 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; 4000c8b4: 83 32 60 1e srl %o1, 0x1e, %g1 4000c8b8: a1 3b e0 1f sra %o7, 0x1f, %l0 4000c8bc: 87 2a 60 02 sll %o1, 2, %g3 4000c8c0: 90 42 00 10 addx %o0, %l0, %o0 4000c8c4: 85 2a 20 02 sll %o0, 2, %g2 4000c8c8: 84 10 40 02 or %g1, %g2, %g2 4000c8cc: 83 30 e0 1b srl %g3, 0x1b, %g1 4000c8d0: 99 28 a0 05 sll %g2, 5, %o4 4000c8d4: 9b 28 e0 05 sll %g3, 5, %o5 4000c8d8: 98 10 40 0c or %g1, %o4, %o4 4000c8dc: 9a a3 40 03 subcc %o5, %g3, %o5 4000c8e0: 98 63 00 02 subx %o4, %g2, %o4 4000c8e4: 9a 83 40 09 addcc %o5, %o1, %o5 4000c8e8: 83 33 60 1e srl %o5, 0x1e, %g1 4000c8ec: 98 43 00 08 addx %o4, %o0, %o4 4000c8f0: 87 2b 60 02 sll %o5, 2, %g3 4000c8f4: 85 2b 20 02 sll %o4, 2, %g2 4000c8f8: 9a 83 40 03 addcc %o5, %g3, %o5 4000c8fc: 84 10 40 02 or %g1, %g2, %g2 4000c900: 83 33 60 1e srl %o5, 0x1e, %g1 4000c904: 87 2b 60 02 sll %o5, 2, %g3 4000c908: 98 43 00 02 addx %o4, %g2, %o4 4000c90c: 9a 83 40 03 addcc %o5, %g3, %o5 4000c910: 85 2b 20 02 sll %o4, 2, %g2 4000c914: 84 10 40 02 or %g1, %g2, %g2 4000c918: 83 33 60 1b srl %o5, 0x1b, %g1 4000c91c: 98 43 00 02 addx %o4, %g2, %o4 4000c920: 93 2b 60 05 sll %o5, 5, %o1 4000c924: 91 2b 20 05 sll %o4, 5, %o0 4000c928: 40 00 32 59 call 4001928c <__udivdi3> 4000c92c: 90 10 40 08 or %g1, %o0, %o0 *ival_percentage = answer / 1000; 4000c930: 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; 4000c934: a0 10 00 08 mov %o0, %l0 4000c938: a2 10 00 09 mov %o1, %l1 *ival_percentage = answer / 1000; 4000c93c: 96 10 23 e8 mov 0x3e8, %o3 4000c940: 40 00 32 53 call 4001928c <__udivdi3> 4000c944: 90 10 00 10 mov %l0, %o0 *fval_percentage = answer % 1000; 4000c948: 90 10 00 10 mov %l0, %o0 * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; *ival_percentage = answer / 1000; 4000c94c: d2 26 80 00 st %o1, [ %i2 ] *fval_percentage = answer % 1000; 4000c950: 94 10 20 00 clr %o2 4000c954: 92 10 00 11 mov %l1, %o1 4000c958: 40 00 33 2c call 40019608 <__umoddi3> 4000c95c: 96 10 23 e8 mov 0x3e8, %o3 4000c960: d2 26 c0 00 st %o1, [ %i3 ] 4000c964: 81 c7 e0 08 ret 4000c968: 81 e8 00 00 restore 400145f0 <_Timespec_From_ticks>: void _Timespec_From_ticks( uint32_t ticks, struct timespec *time ) { 400145f0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 400145f4: 03 10 00 a2 sethi %hi(0x40028800), %g1 <== NOT EXECUTED 400145f8: d2 00 60 7c ld [ %g1 + 0x7c ], %o1 ! 4002887c <_TOD_Microseconds_per_tick> <== NOT EXECUTED 400145fc: 40 00 2e e8 call 4002019c <.umul> <== NOT EXECUTED 40014600: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 40014604: 21 00 03 d0 sethi %hi(0xf4000), %l0 <== NOT EXECUTED struct timespec *time ) { uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 40014608: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 4001460c: 7f ff b4 5b call 40001778 <.udiv> <== NOT EXECUTED 40014610: 92 14 22 40 or %l0, 0x240, %o1 <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 40014614: 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; 40014618: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 4001461c: 40 00 2f 1a call 40020284 <.urem> <== NOT EXECUTED 40014620: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40014624: 85 2a 20 02 sll %o0, 2, %g2 <== NOT EXECUTED 40014628: 83 2a 20 07 sll %o0, 7, %g1 <== NOT EXECUTED 4001462c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40014630: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40014634: 83 28 60 03 sll %g1, 3, %g1 <== NOT EXECUTED 40014638: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED TOD_NANOSECONDS_PER_MICROSECOND; } 4001463c: 81 c7 e0 08 ret <== NOT EXECUTED 40014640: 81 e8 00 00 restore <== NOT EXECUTED 40014644 <_Timespec_Is_valid>: boolean _Timespec_Is_valid( const struct timespec *time ) { if ( !time ) 40014644: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40014648: 02 80 00 0e be 40014680 <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 4001464c: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_sec < 0 ) 40014650: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40014654: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40014658: 06 80 00 0a bl 40014680 <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 4001465c: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_nsec < 0 ) 40014660: d0 02 20 04 ld [ %o0 + 4 ], %o0 <== NOT EXECUTED 40014664: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40014668: 06 80 00 06 bl 40014680 <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 4001466c: 03 0e e6 b2 sethi %hi(0x3b9ac800), %g1 <== NOT EXECUTED 40014670: 82 10 61 ff or %g1, 0x1ff, %g1 ! 3b9ac9ff <== NOT EXECUTED 40014674: 80 a0 40 08 cmp %g1, %o0 <== NOT EXECUTED 40014678: 81 c3 e0 08 retl <== NOT EXECUTED 4001467c: 90 60 3f ff subx %g0, -1, %o0 <== NOT EXECUTED if ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) return FALSE; return TRUE; } 40014680: 81 c3 e0 08 retl <== NOT EXECUTED 40014684: 90 10 20 00 clr %o0 <== NOT EXECUTED 40014688 <_Timespec_To_ticks>: */ uint32_t _Timespec_To_ticks( const struct timespec *time ) { 40014688: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) 4001468c: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED 40014690: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40014694: 12 80 00 06 bne 400146ac <_Timespec_To_ticks+0x24> <== NOT EXECUTED 40014698: a4 10 00 18 mov %i0, %l2 <== NOT EXECUTED 4001469c: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 400146a0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400146a4: 02 80 00 13 be 400146f0 <_Timespec_To_ticks+0x68> <== NOT EXECUTED 400146a8: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; ticks = time->tv_sec * TOD_TICKS_PER_SECOND; 400146ac: 03 10 00 a2 sethi %hi(0x40028800), %g1 <== NOT EXECUTED 400146b0: e2 00 60 7c ld [ %g1 + 0x7c ], %l1 ! 4002887c <_TOD_Microseconds_per_tick> <== NOT EXECUTED 400146b4: 11 00 03 d0 sethi %hi(0xf4000), %o0 <== NOT EXECUTED 400146b8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 400146bc: 7f ff b4 2f call 40001778 <.udiv> <== NOT EXECUTED 400146c0: 90 12 22 40 or %o0, 0x240, %o0 <== NOT EXECUTED 400146c4: 40 00 2e b6 call 4002019c <.umul> <== NOT EXECUTED 400146c8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400146cc: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED ticks += (time->tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND) / 400146d0: d0 04 a0 04 ld [ %l2 + 4 ], %o0 <== NOT EXECUTED 400146d4: 7f ff b4 29 call 40001778 <.udiv> <== NOT EXECUTED 400146d8: 92 10 23 e8 mov 0x3e8, %o1 <== NOT EXECUTED 400146dc: 7f ff b4 27 call 40001778 <.udiv> <== NOT EXECUTED 400146e0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED _TOD_Microseconds_per_tick; if (ticks) 400146e4: b0 82 00 10 addcc %o0, %l0, %i0 <== NOT EXECUTED 400146e8: 22 80 00 02 be,a 400146f0 <_Timespec_To_ticks+0x68> <== NOT EXECUTED 400146ec: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return ticks; return 1; } 400146f0: 81 c7 e0 08 ret <== NOT EXECUTED 400146f4: 81 e8 00 00 restore <== NOT EXECUTED 4000d950 <_User_extensions_Add_API_set>: */ void _User_extensions_Add_API_set ( User_extensions_Control *the_extension ) { 4000d950: 9d e3 bf 98 save %sp, -104, %sp _Chain_Append( &_User_extensions_List, &the_extension->Node ); 4000d954: 11 10 00 68 sethi %hi(0x4001a000), %o0 4000d958: 92 10 00 18 mov %i0, %o1 4000d95c: 7f ff e7 29 call 40007600 <_Chain_Append> 4000d960: 90 12 21 24 or %o0, 0x124, %o0 /* * If a switch handler is present, append it to the switch chain. */ if ( the_extension->Callouts.thread_switch != NULL ) { 4000d964: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 4000d968: 80 a0 60 00 cmp %g1, 0 4000d96c: 02 80 00 06 be 4000d984 <_User_extensions_Add_API_set+0x34> 4000d970: b2 06 20 08 add %i0, 8, %i1 the_extension->Switch.thread_switch = the_extension->Callouts.thread_switch; 4000d974: c2 26 20 10 st %g1, [ %i0 + 0x10 ] _Chain_Append( 4000d978: 31 10 00 67 sethi %hi(0x40019c00), %i0 4000d97c: 7f ff e7 21 call 40007600 <_Chain_Append> 4000d980: 91 ee 22 a4 restore %i0, 0x2a4, %o0 4000d984: 81 c7 e0 08 ret <== NOT EXECUTED 4000d988: 81 e8 00 00 restore <== NOT EXECUTED 4000aaf0 <_User_extensions_Fatal>: void _User_extensions_Fatal ( Internal_errors_Source the_source, boolean is_internal, uint32_t the_error ) { 4000aaf0: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; 4000aaf4: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000aaf8: 82 10 61 24 or %g1, 0x124, %g1 ! 4001a124 <_User_extensions_List> 4000aafc: e0 00 60 08 ld [ %g1 + 8 ], %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 4000ab00: 10 80 00 09 b 4000ab24 <_User_extensions_Fatal+0x34> 4000ab04: a2 10 00 01 mov %g1, %l1 !_Chain_Is_head( &_User_extensions_List, the_node ) ; the_node = the_node->previous ) { the_extension = (User_extensions_Control *) the_node; if ( the_extension->Callouts.fatal != NULL ) 4000ab08: 80 a0 60 00 cmp %g1, 0 4000ab0c: 02 80 00 05 be 4000ab20 <_User_extensions_Fatal+0x30> 4000ab10: 90 10 00 18 mov %i0, %o0 (*the_extension->Callouts.fatal)( the_source, is_internal, the_error ); 4000ab14: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000ab18: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000ab1c: 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 ) { 4000ab20: 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 ) ; 4000ab24: 80 a4 00 11 cmp %l0, %l1 4000ab28: 32 bf ff f8 bne,a 4000ab08 <_User_extensions_Fatal+0x18> 4000ab2c: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 the_extension = (User_extensions_Control *) the_node; if ( the_extension->Callouts.fatal != NULL ) (*the_extension->Callouts.fatal)( the_source, is_internal, the_error ); } } 4000ab30: 81 c7 e0 08 ret 4000ab34: 81 e8 00 00 restore 4000f3ac <_User_extensions_Remove_set>: */ void _User_extensions_Remove_set ( User_extensions_Control *the_extension ) { 4000f3ac: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _Chain_Extract( &the_extension->Node ); 4000f3b0: 40 00 11 7e call 400139a8 <_Chain_Extract> <== NOT EXECUTED 4000f3b4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * If a switch handler is present, remove it. */ if ( the_extension->Callouts.thread_switch != NULL ) 4000f3b8: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 <== NOT EXECUTED 4000f3bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000f3c0: 02 80 00 04 be 4000f3d0 <_User_extensions_Remove_set+0x24> <== NOT EXECUTED 4000f3c4: 01 00 00 00 nop <== NOT EXECUTED _Chain_Extract( &the_extension->Switch.Node ); 4000f3c8: 40 00 11 78 call 400139a8 <_Chain_Extract> <== NOT EXECUTED 4000f3cc: 91 ee 20 08 restore %i0, 8, %o0 <== NOT EXECUTED 4000f3d0: 81 c7 e0 08 ret <== NOT EXECUTED 4000f3d4: 81 e8 00 00 restore <== NOT EXECUTED 4000aca8 <_Watchdog_Insert>: void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 4000aca8: 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; 4000acac: 03 10 00 67 sethi %hi(0x40019c00), %g1 void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 4000acb0: aa 10 00 18 mov %i0, %l5 Watchdog_Control *after; uint32_t insert_isr_nest_level; Watchdog_Interval delta_interval; insert_isr_nest_level = _ISR_Nest_level; 4000acb4: e6 00 63 64 ld [ %g1 + 0x364 ], %l3 _ISR_Disable( level ); 4000acb8: 7f ff dc 7e call 40001eb0 4000acbc: 01 00 00 00 nop 4000acc0: 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 ) { 4000acc4: c2 06 60 08 ld [ %i1 + 8 ], %g1 4000acc8: 80 a0 60 00 cmp %g1, 0 4000accc: 02 80 00 03 be 4000acd8 <_Watchdog_Insert+0x30> 4000acd0: 03 10 00 68 sethi %hi(0x4001a000), %g1 _ISR_Enable( level ); 4000acd4: 30 80 00 37 b,a 4000adb0 <_Watchdog_Insert+0x108> <== NOT EXECUTED return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; 4000acd8: c4 00 60 20 ld [ %g1 + 0x20 ], %g2 ! 4001a020 <_Watchdog_Sync_count> if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 4000acdc: 86 10 20 01 mov 1, %g3 _Watchdog_Sync_count++; 4000ace0: 84 00 a0 01 inc %g2 if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 4000ace4: c6 26 60 08 st %g3, [ %i1 + 8 ] _Watchdog_Sync_count++; 4000ace8: c4 20 60 20 st %g2, [ %g1 + 0x20 ] if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 4000acec: 29 10 00 67 sethi %hi(0x40019c00), %l4 the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 4000acf0: 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 ; 4000acf4: e2 05 40 00 ld [ %l5 ], %l1 ; after = _Watchdog_Next( after ) ) { if ( delta_interval == 0 || !_Watchdog_Next( after ) ) 4000acf8: 80 a4 a0 00 cmp %l2, 0 4000acfc: 22 80 00 1c be,a 4000ad6c <_Watchdog_Insert+0xc4> 4000ad00: c4 04 60 04 ld [ %l1 + 4 ], %g2 RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_Next( Watchdog_Control *the_watchdog ) { return ( (Watchdog_Control *) the_watchdog->Node.next ); 4000ad04: c2 04 40 00 ld [ %l1 ], %g1 4000ad08: 80 a0 60 00 cmp %g1, 0 4000ad0c: 22 80 00 18 be,a 4000ad6c <_Watchdog_Insert+0xc4> 4000ad10: c4 04 60 04 ld [ %l1 + 4 ], %g2 break; if ( delta_interval < after->delta_interval ) { 4000ad14: e0 04 60 10 ld [ %l1 + 0x10 ], %l0 4000ad18: 80 a4 80 10 cmp %l2, %l0 4000ad1c: 1a 80 00 04 bcc 4000ad2c <_Watchdog_Insert+0x84> 4000ad20: 82 24 00 12 sub %l0, %l2, %g1 after->delta_interval -= delta_interval; 4000ad24: 10 80 00 11 b 4000ad68 <_Watchdog_Insert+0xc0> 4000ad28: c2 24 60 10 st %g1, [ %l1 + 0x10 ] * 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 ); 4000ad2c: 7f ff dc 65 call 40001ec0 4000ad30: 90 10 00 18 mov %i0, %o0 4000ad34: 7f ff dc 5f call 40001eb0 4000ad38: 01 00 00 00 nop if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { 4000ad3c: c2 06 60 08 ld [ %i1 + 8 ], %g1 4000ad40: 80 a0 60 01 cmp %g1, 1 4000ad44: 12 80 00 15 bne 4000ad98 <_Watchdog_Insert+0xf0> 4000ad48: a4 24 80 10 sub %l2, %l0, %l2 goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 4000ad4c: c2 05 23 78 ld [ %l4 + 0x378 ], %g1 4000ad50: 80 a0 40 13 cmp %g1, %l3 4000ad54: 28 bf ff e9 bleu,a 4000acf8 <_Watchdog_Insert+0x50> 4000ad58: e2 04 40 00 ld [ %l1 ], %l1 _Watchdog_Sync_level = insert_isr_nest_level; 4000ad5c: e6 25 23 78 st %l3, [ %l4 + 0x378 ] the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 4000ad60: 10 bf ff e5 b 4000acf4 <_Watchdog_Insert+0x4c> 4000ad64: e4 06 60 0c ld [ %i1 + 0xc ], %l2 _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); 4000ad68: c4 04 60 04 ld [ %l1 + 4 ], %g2 the_watchdog->start_time = _Watchdog_Ticks_since_boot; 4000ad6c: 03 10 00 68 sethi %hi(0x4001a000), %g1 ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 4000ad70: c6 00 80 00 ld [ %g2 ], %g3 4000ad74: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 after_node->next = the_node; 4000ad78: f2 20 80 00 st %i1, [ %g2 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 4000ad7c: c4 26 60 04 st %g2, [ %i1 + 4 ] 4000ad80: c2 26 60 14 st %g1, [ %i1 + 0x14 ] } } _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; 4000ad84: e4 26 60 10 st %l2, [ %i1 + 0x10 ] RTEMS_INLINE_ROUTINE void _Watchdog_Activate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_ACTIVE; 4000ad88: 82 10 20 02 mov 2, %g1 before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; before_node->previous = the_node; 4000ad8c: f2 20 e0 04 st %i1, [ %g3 + 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; 4000ad90: c6 26 40 00 st %g3, [ %i1 ] 4000ad94: c2 26 60 08 st %g1, [ %i1 + 8 ] _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; 4000ad98: 03 10 00 67 sethi %hi(0x40019c00), %g1 _Watchdog_Sync_count--; 4000ad9c: 05 10 00 68 sethi %hi(0x4001a000), %g2 _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; 4000ada0: e6 20 63 78 st %l3, [ %g1 + 0x378 ] _Watchdog_Sync_count--; 4000ada4: c2 00 a0 20 ld [ %g2 + 0x20 ], %g1 4000ada8: 82 00 7f ff add %g1, -1, %g1 4000adac: c2 20 a0 20 st %g1, [ %g2 + 0x20 ] _ISR_Enable( level ); 4000adb0: 7f ff dc 44 call 40001ec0 4000adb4: 81 e8 00 00 restore 4000adb8: 01 00 00 00 nop 4000ae08 <_Watchdog_Remove>: */ Watchdog_States _Watchdog_Remove( Watchdog_Control *the_watchdog ) { 4000ae08: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Watchdog_States previous_state; Watchdog_Control *next_watchdog; _ISR_Disable( level ); 4000ae0c: 7f ff dc 29 call 40001eb0 4000ae10: 01 00 00 00 nop previous_state = the_watchdog->state; 4000ae14: e0 06 20 08 ld [ %i0 + 8 ], %l0 switch ( previous_state ) { 4000ae18: 80 a4 20 01 cmp %l0, 1 4000ae1c: 22 80 00 1e be,a 4000ae94 <_Watchdog_Remove+0x8c> 4000ae20: c0 26 20 08 clr [ %i0 + 8 ] <== NOT EXECUTED 4000ae24: 0a 80 00 1d bcs 4000ae98 <_Watchdog_Remove+0x90> 4000ae28: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000ae2c: 80 a4 20 03 cmp %l0, 3 4000ae30: 18 80 00 1a bgu 4000ae98 <_Watchdog_Remove+0x90> 4000ae34: 01 00 00 00 nop 4000ae38: c6 06 00 00 ld [ %i0 ], %g3 break; case WATCHDOG_ACTIVE: case WATCHDOG_REMOVE_IT: the_watchdog->state = WATCHDOG_INACTIVE; 4000ae3c: c0 26 20 08 clr [ %i0 + 8 ] next_watchdog = _Watchdog_Next( the_watchdog ); if ( _Watchdog_Next(next_watchdog) ) 4000ae40: c2 00 c0 00 ld [ %g3 ], %g1 4000ae44: 80 a0 60 00 cmp %g1, 0 4000ae48: 02 80 00 07 be 4000ae64 <_Watchdog_Remove+0x5c> 4000ae4c: 03 10 00 68 sethi %hi(0x4001a000), %g1 next_watchdog->delta_interval += the_watchdog->delta_interval; 4000ae50: c2 00 e0 10 ld [ %g3 + 0x10 ], %g1 4000ae54: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 4000ae58: 82 00 40 02 add %g1, %g2, %g1 4000ae5c: c2 20 e0 10 st %g1, [ %g3 + 0x10 ] if ( _Watchdog_Sync_count ) 4000ae60: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000ae64: c2 00 60 20 ld [ %g1 + 0x20 ], %g1 ! 4001a020 <_Watchdog_Sync_count> 4000ae68: 80 a0 60 00 cmp %g1, 0 4000ae6c: 22 80 00 07 be,a 4000ae88 <_Watchdog_Remove+0x80> 4000ae70: c4 06 00 00 ld [ %i0 ], %g2 _Watchdog_Sync_level = _ISR_Nest_level; 4000ae74: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000ae78: c4 00 63 64 ld [ %g1 + 0x364 ], %g2 ! 40019f64 <_ISR_Nest_level> <== NOT EXECUTED 4000ae7c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000ae80: c4 20 63 78 st %g2, [ %g1 + 0x378 ] ! 40019f78 <_Watchdog_Sync_level> <== NOT EXECUTED ) { Chain_Node *next; Chain_Node *previous; next = the_node->next; 4000ae84: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED previous = the_node->previous; 4000ae88: c2 06 20 04 ld [ %i0 + 4 ], %g1 next->previous = previous; previous->next = next; 4000ae8c: c4 20 40 00 st %g2, [ %g1 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000ae90: c2 20 a0 04 st %g1, [ %g2 + 4 ] _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000ae94: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000ae98: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 ! 4001a024 <_Watchdog_Ticks_since_boot> 4000ae9c: c2 26 20 18 st %g1, [ %i0 + 0x18 ] _ISR_Enable( level ); 4000aea0: 7f ff dc 08 call 40001ec0 4000aea4: b0 10 00 10 mov %l0, %i0 return( previous_state ); } 4000aea8: 81 c7 e0 08 ret 4000aeac: 81 e8 00 00 restore 4000af54 <_Workspace_Allocate_or_fatal_error>: */ void *_Workspace_Allocate_or_fatal_error( size_t size ) { 4000af54: 9d e3 bf 98 save %sp, -104, %sp RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4000af58: 11 10 00 67 sethi %hi(0x40019c00), %o0 4000af5c: 92 10 00 18 mov %i0, %o1 4000af60: 7f ff f2 e5 call 40007af4 <_Heap_Allocate> 4000af64: 90 12 22 ec or %o0, 0x2ec, %o0 void *memory; memory = _Workspace_Allocate( size ); if ( memory == NULL ) 4000af68: b0 92 20 00 orcc %o0, 0, %i0 4000af6c: 12 80 00 04 bne 4000af7c <_Workspace_Allocate_or_fatal_error+0x28> 4000af70: 92 10 20 01 mov 1, %o1 _Internal_error_Occurred( 4000af74: 7f ff f4 0b call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 4000af78: 94 10 20 04 mov 4, %o2 <== NOT EXECUTED TRUE, INTERNAL_ERROR_WORKSPACE_ALLOCATION ); return memory; } 4000af7c: 81 c7 e0 08 ret 4000af80: 81 e8 00 00 restore 4000af84 <_Workspace_Handler_initialization>: void _Workspace_Handler_initialization( void *starting_address, size_t size ) { 4000af84: 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 ) ) 4000af88: 80 a6 20 00 cmp %i0, 0 4000af8c: 02 80 00 04 be 4000af9c <_Workspace_Handler_initialization+0x18> 4000af90: 80 8e 20 07 btst 7, %i0 4000af94: 02 80 00 07 be 4000afb0 <_Workspace_Handler_initialization+0x2c> 4000af98: 03 10 00 67 sethi %hi(0x40019c00), %g1 _Internal_error_Occurred( 4000af9c: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000afa0: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 4000afa4: 7f ff f3 ff call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 4000afa8: 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 ) { 4000afac: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000afb0: c2 00 62 c4 ld [ %g1 + 0x2c4 ], %g1 ! 40019ec4 <_CPU_Table+0x10> 4000afb4: 84 10 20 00 clr %g2 4000afb8: 80 a0 60 00 cmp %g1, 0 4000afbc: 12 80 00 06 bne 4000afd4 <_Workspace_Handler_initialization+0x50> 4000afc0: 87 36 60 02 srl %i1, 2, %g3 index < size / sizeof( uint32_t ) ; index++ ) zero_out_array[ index ] = 0; } memory_available = _Heap_Initialize( 4000afc4: 10 80 00 08 b 4000afe4 <_Workspace_Handler_initialization+0x60> 4000afc8: 92 10 00 18 mov %i0, %o1 ); if ( _CPU_Table.do_zero_of_workspace ) { for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; index++ ) 4000afcc: 84 00 a0 01 inc %g2 <== NOT EXECUTED zero_out_array[ index ] = 0; 4000afd0: c0 20 40 18 clr [ %g1 + %i0 ] <== 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 ) ; 4000afd4: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 4000afd8: 0a bf ff fd bcs 4000afcc <_Workspace_Handler_initialization+0x48> <== NOT EXECUTED 4000afdc: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED index++ ) zero_out_array[ index ] = 0; } memory_available = _Heap_Initialize( 4000afe0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000afe4: 94 10 00 19 mov %i1, %o2 4000afe8: 11 10 00 67 sethi %hi(0x40019c00), %o0 4000afec: 96 10 20 08 mov 8, %o3 4000aff0: 7f ff f3 a2 call 40007e78 <_Heap_Initialize> 4000aff4: 90 12 22 ec or %o0, 0x2ec, %o0 starting_address, size, CPU_HEAP_ALIGNMENT ); if ( memory_available == 0 ) 4000aff8: 80 a2 20 00 cmp %o0, 0 4000affc: 12 80 00 05 bne 4000b010 <_Workspace_Handler_initialization+0x8c> 4000b000: b0 10 20 00 clr %i0 _Internal_error_Occurred( 4000b004: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED 4000b008: 7f ff f3 e6 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 4000b00c: 95 e8 20 03 restore %g0, 3, %o2 <== NOT EXECUTED 4000b010: 81 c7 e0 08 ret 4000b014: 81 e8 00 00 restore 40002d38 <__assert>: #include #include void __assert(const char *file, int line, const char *failedexpr) { 40002d38: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED printk("assertion \"%s\" failed: file \"%s\", line %d\n", 40002d3c: 11 10 00 60 sethi %hi(0x40018000), %o0 <== NOT EXECUTED 40002d40: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 40002d44: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 40002d48: 96 10 00 19 mov %i1, %o3 <== NOT EXECUTED 40002d4c: 90 12 22 60 or %o0, 0x260, %o0 <== NOT EXECUTED 40002d50: 40 00 04 37 call 40003e2c <== NOT EXECUTED 40002d54: b0 10 20 00 clr %i0 <== NOT EXECUTED failedexpr, file, line); rtems_fatal_error_occurred(0); 40002d58: 40 00 11 90 call 40007398 <== NOT EXECUTED 40002d5c: 81 e8 00 00 restore <== NOT EXECUTED 40002d60: 01 00 00 00 nop 40022450 <__kill>: #endif int __kill( pid_t pid, int sig ) { return 0; } 40022450: 81 c3 e0 08 retl <== NOT EXECUTED 40022454: 90 10 20 00 clr %o0 <== NOT EXECUTED 40017994 <_exit>: #include #if !defined(RTEMS_UNIX) void _exit(int status) { 40017994: 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(); 40017998: 7f ff ff e4 call 40017928 4001799c: 01 00 00 00 nop rtems_shutdown_executive(status); 400179a0: 40 00 00 47 call 40017abc 400179a4: 90 10 00 18 mov %i0, %o0 400179a8: 30 80 00 00 b,a 400179a8 <_exit+0x14> <== NOT EXECUTED 40020d60 <_fcntl_r>: int fd, int cmd, int arg ) { return fcntl( fd, cmd, arg ); 40020d60: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40020d64: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40020d68: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40020d6c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40020d70: 7f ff ff 78 call 40020b50 <== NOT EXECUTED 40020d74: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40020d78: 01 00 00 00 nop 400222e8 <_getpid_r>: pid_t _getpid_r( struct _reent *ptr ) { return getpid(); } 400222e8: 81 c3 e0 08 retl <== NOT EXECUTED 400222ec: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 4000c590 <_gettimeofday>: int _gettimeofday( struct timeval *tp, struct timezone *tzp ) { return gettimeofday( tp, tzp ); 4000c590: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4000c594: 7f ff ff e6 call 4000c52c <== NOT EXECUTED 4000c598: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000c59c: 01 00 00 00 nop 40022448 <_kill_r>: #include int _kill_r( struct _reent *ptr, pid_t pid, int sig ) { return 0; } 40022448: 81 c3 e0 08 retl <== NOT EXECUTED 4002244c: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001790c <_lseek_r>: int fd, off_t offset, int whence ) { return lseek( fd, offset, whence ); 4001790c: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40017910: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40017914: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40017918: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001791c: 7f ff ff bf call 40017818 <== NOT EXECUTED 40017920: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40017924: 01 00 00 00 nop 40003b5c <_open_r>: const char *buf, int flags, int mode ) { return open( buf, flags, mode ); 40003b5c: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40003b60: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40003b64: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40003b68: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40003b6c: 7f ff ff 3e call 40003864 <== NOT EXECUTED 40003b70: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40003b74: 01 00 00 00 nop 40017a84 <_read_r>: int fd, void *buf, size_t nbytes ) { return read( fd, buf, nbytes ); 40017a84: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40017a88: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40017a8c: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40017a90: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40017a94: 7f ff ff c6 call 400179ac <== NOT EXECUTED 40017a98: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40017a9c: 01 00 00 00 nop 40003310 <_realloc_r>: struct _reent *ignored, void *ptr, size_t size ) { return realloc( ptr, size ); 40003310: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40003314: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40003318: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4000331c: 7f ff ff b8 call 400031fc <== NOT EXECUTED 40003320: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40003324: 01 00 00 00 nop 40007330 <_stat_r>: struct _reent *ptr, const char *path, struct stat *buf ) { return _STAT_NAME( path, buf ); 40007330: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40007334: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40007338: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4000733c: 7f ff ff c4 call 4000724c <== NOT EXECUTED 40007340: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40007344: 01 00 00 00 nop 40018988 <_unlink_r>: int _unlink_r( struct _reent *ptr, const char *path ) { return unlink( path ); 40018988: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4001898c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40018990: 7f ff ff a2 call 40018818 <== NOT EXECUTED 40018994: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40018998: 01 00 00 00 nop 40016b5c : #include int chdir( const char *pathname ) { 40016b5c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the node where we wish to go. */ result = rtems_filesystem_evaluate_path( 40016b60: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40016b64: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40016b68: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40016b6c: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40016b70: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40016b74: 7f ff bb e3 call 40005b00 <== NOT EXECUTED 40016b78: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED pathname, RTEMS_LIBIO_PERMS_SEARCH, &loc, TRUE ); if ( result != 0 ) 40016b7c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016b80: 12 80 00 37 bne 40016c5c <== NOT EXECUTED 40016b84: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Verify you can change directory into this node. */ if ( !loc.ops->node_type_h ) { 40016b88: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 40016b8c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016b90: 12 80 00 0c bne 40016bc0 <== NOT EXECUTED 40016b94: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016b98: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40016b9c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016ba0: 02 80 00 04 be 40016bb0 <== NOT EXECUTED 40016ba4: 01 00 00 00 nop <== NOT EXECUTED 40016ba8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016bac: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40016bb0: 40 00 30 91 call 40022df4 <__errno> <== NOT EXECUTED 40016bb4: 01 00 00 00 nop <== NOT EXECUTED 40016bb8: 10 80 00 14 b 40016c08 <== NOT EXECUTED 40016bbc: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 40016bc0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016bc4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40016bc8: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40016bcc: 02 80 00 12 be 40016c14 <== NOT EXECUTED 40016bd0: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016bd4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40016bd8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016bdc: 02 80 00 08 be 40016bfc <== NOT EXECUTED 40016be0: 01 00 00 00 nop <== NOT EXECUTED 40016be4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40016be8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016bec: 02 80 00 04 be 40016bfc <== NOT EXECUTED 40016bf0: 01 00 00 00 nop <== NOT EXECUTED 40016bf4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016bf8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 40016bfc: 40 00 30 7e call 40022df4 <__errno> <== NOT EXECUTED 40016c00: 01 00 00 00 nop <== NOT EXECUTED 40016c04: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 40016c08: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40016c0c: 81 c7 e0 08 ret <== NOT EXECUTED 40016c10: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED } rtems_filesystem_freenode( &rtems_filesystem_current ); 40016c14: d0 00 61 60 ld [ %g1 + 0x160 ], %o0 <== NOT EXECUTED 40016c18: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 40016c1c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016c20: 22 80 00 09 be,a 40016c44 <== NOT EXECUTED 40016c24: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40016c28: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 ! 4003841c <== NOT EXECUTED 40016c2c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016c30: 22 80 00 05 be,a 40016c44 <== NOT EXECUTED 40016c34: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40016c38: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016c3c: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED rtems_filesystem_current = loc; 40016c40: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40016c44: d0 00 61 60 ld [ %g1 + 0x160 ], %o0 ! 40038560 <== NOT EXECUTED 40016c48: 92 07 bf e8 add %fp, -24, %o1 <== NOT EXECUTED 40016c4c: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 40016c50: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40016c54: 40 00 37 0d call 40024888 <== NOT EXECUTED 40016c58: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 40016c5c: 81 c7 e0 08 ret <== NOT EXECUTED 40016c60: 81 e8 00 00 restore <== NOT EXECUTED 40016c64 : int chmod( const char *path, mode_t mode ) { 40016c64: 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 ); 40016c68: 92 10 20 00 clr %o1 <== NOT EXECUTED 40016c6c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40016c70: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40016c74: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40016c78: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40016c7c: 7f ff bb a1 call 40005b00 <== NOT EXECUTED 40016c80: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 40016c84: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016c88: 12 80 00 24 bne 40016d18 <== NOT EXECUTED 40016c8c: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED return -1; if ( !loc.handlers ){ 40016c90: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016c94: 32 80 00 10 bne,a 40016cd4 <== NOT EXECUTED 40016c98: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016c9c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40016ca0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016ca4: 02 80 00 08 be 40016cc4 <== NOT EXECUTED 40016ca8: 01 00 00 00 nop <== NOT EXECUTED 40016cac: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40016cb0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016cb4: 02 80 00 04 be 40016cc4 <== NOT EXECUTED 40016cb8: 01 00 00 00 nop <== NOT EXECUTED 40016cbc: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016cc0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 40016cc4: 40 00 30 4c call 40022df4 <__errno> <== NOT EXECUTED 40016cc8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40016ccc: 10 80 00 12 b 40016d14 <== NOT EXECUTED 40016cd0: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED } if ( !loc.handlers->fchmod_h ){ 40016cd4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016cd8: 12 80 00 12 bne 40016d20 <== NOT EXECUTED 40016cdc: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016ce0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40016ce4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016ce8: 02 80 00 08 be 40016d08 <== NOT EXECUTED 40016cec: 01 00 00 00 nop <== NOT EXECUTED 40016cf0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40016cf4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016cf8: 02 80 00 04 be 40016d08 <== NOT EXECUTED 40016cfc: 01 00 00 00 nop <== NOT EXECUTED 40016d00: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016d04: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40016d08: 40 00 30 3b call 40022df4 <__errno> <== NOT EXECUTED 40016d0c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40016d10: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40016d14: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40016d18: 81 c7 e0 08 ret <== NOT EXECUTED 40016d1c: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.handlers->fchmod_h)( &loc, mode ); 40016d20: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40016d24: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016d28: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016d2c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40016d30: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016d34: 02 bf ff f9 be 40016d18 <== NOT EXECUTED 40016d38: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40016d3c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40016d40: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016d44: 02 80 00 04 be 40016d54 <== NOT EXECUTED 40016d48: 01 00 00 00 nop <== NOT EXECUTED 40016d4c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016d50: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40016d54: 81 c7 e0 08 ret <== NOT EXECUTED 40016d58: 81 e8 00 00 restore <== NOT EXECUTED 40016d5c : int chown( const char *path, uid_t owner, gid_t group ) { 40016d5c: 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 ) ) 40016d60: 92 10 20 00 clr %o1 <== NOT EXECUTED 40016d64: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40016d68: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40016d6c: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40016d70: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40016d74: 7f ff bb 63 call 40005b00 <== NOT EXECUTED 40016d78: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40016d7c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016d80: 12 80 00 10 bne 40016dc0 <== NOT EXECUTED 40016d84: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return -1; if ( !loc.ops->chown_h ) { 40016d88: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 <== NOT EXECUTED 40016d8c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40016d90: 12 80 00 0e bne 40016dc8 <== NOT EXECUTED 40016d94: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016d98: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40016d9c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016da0: 02 80 00 04 be 40016db0 <== NOT EXECUTED 40016da4: 01 00 00 00 nop <== NOT EXECUTED 40016da8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016dac: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40016db0: 40 00 30 11 call 40022df4 <__errno> <== NOT EXECUTED 40016db4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40016db8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40016dbc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40016dc0: 81 c7 e0 08 ret <== NOT EXECUTED 40016dc4: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.ops->chown_h)( &loc, owner, group ); 40016dc8: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 40016dcc: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 40016dd0: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED 40016dd4: 9f c0 80 00 call %g2 <== NOT EXECUTED 40016dd8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40016ddc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40016de0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016de4: 02 bf ff f7 be 40016dc0 <== NOT EXECUTED 40016de8: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40016dec: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40016df0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016df4: 02 80 00 04 be 40016e04 <== NOT EXECUTED 40016df8: 01 00 00 00 nop <== NOT EXECUTED 40016dfc: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016e00: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40016e04: 81 c7 e0 08 ret <== NOT EXECUTED 40016e08: 81 e8 00 00 restore <== NOT EXECUTED 40016e0c : #include int chroot( const char *pathname ) { 40016e0c: 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) { 40016e10: 23 10 00 e1 sethi %hi(0x40038400), %l1 <== NOT EXECUTED 40016e14: e0 04 61 60 ld [ %l1 + 0x160 ], %l0 ! 40038560 <== NOT EXECUTED 40016e18: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 40016e1c: 82 10 62 64 or %g1, 0x264, %g1 ! 4003aa64 <== NOT EXECUTED 40016e20: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40016e24: 12 80 00 0e bne 40016e5c <== NOT EXECUTED 40016e28: 01 00 00 00 nop <== NOT EXECUTED rtems_libio_set_private_env(); /* try to set a new private env*/ 40016e2c: 40 00 05 39 call 40018310 <== NOT EXECUTED 40016e30: 01 00 00 00 nop <== NOT EXECUTED if (rtems_current_user_env == &rtems_global_user_env) /* not ok */ 40016e34: c2 04 61 60 ld [ %l1 + 0x160 ], %g1 <== NOT EXECUTED 40016e38: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 40016e3c: 12 80 00 08 bne 40016e5c <== NOT EXECUTED 40016e40: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40016e44: 40 00 2f ec call 40022df4 <__errno> <== NOT EXECUTED 40016e48: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 40016e4c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40016e50: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40016e54: 81 c7 e0 08 ret <== NOT EXECUTED 40016e58: 81 e8 00 00 restore <== NOT EXECUTED }; result = chdir(pathname); 40016e5c: 7f ff ff 40 call 40016b5c <== NOT EXECUTED 40016e60: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if (result) { 40016e64: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016e68: 12 80 00 0a bne 40016e90 <== NOT EXECUTED 40016e6c: 11 10 00 d3 sethi %hi(0x40034c00), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( errno ); }; /* clone the new root location */ if (rtems_filesystem_evaluate_path(".", 0, &loc, 0)) { 40016e70: 92 10 20 00 clr %o1 <== NOT EXECUTED 40016e74: 90 12 23 60 or %o0, 0x360, %o0 <== NOT EXECUTED 40016e78: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED 40016e7c: 7f ff bb 21 call 40005b00 <== NOT EXECUTED 40016e80: 96 10 20 00 clr %o3 <== NOT EXECUTED 40016e84: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40016e88: 02 80 00 0a be 40016eb0 <== NOT EXECUTED 40016e8c: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED /* our cwd has changed, though - but there is no easy way of return :-( */ rtems_set_errno_and_return_minus_one( errno ); 40016e90: 40 00 2f d9 call 40022df4 <__errno> <== NOT EXECUTED 40016e94: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40016e98: 40 00 2f d7 call 40022df4 <__errno> <== NOT EXECUTED 40016e9c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40016ea0: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40016ea4: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED 40016ea8: 81 c7 e0 08 ret <== NOT EXECUTED 40016eac: 81 e8 00 00 restore <== NOT EXECUTED } rtems_filesystem_freenode(&rtems_filesystem_root); 40016eb0: d0 00 61 60 ld [ %g1 + 0x160 ], %o0 <== NOT EXECUTED 40016eb4: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED 40016eb8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016ebc: 22 80 00 09 be,a 40016ee0 <== NOT EXECUTED 40016ec0: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40016ec4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 ! 4003841c <== NOT EXECUTED 40016ec8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016ecc: 22 80 00 05 be,a 40016ee0 <== NOT EXECUTED 40016ed0: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40016ed4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40016ed8: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 40016edc: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40016ee0: d0 00 61 60 ld [ %g1 + 0x160 ], %o0 ! 40038560 <== NOT EXECUTED 40016ee4: 92 07 bf e8 add %fp, -24, %o1 <== NOT EXECUTED 40016ee8: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40016eec: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED 40016ef0: 40 00 36 66 call 40024888 <== NOT EXECUTED 40016ef4: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 40016ef8: 81 c7 e0 08 ret <== NOT EXECUTED 40016efc: 81 e8 00 00 restore <== NOT EXECUTED 4000c374 : #include int close( int fd ) { 4000c374: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_t *iop; rtems_status_code rc; rtems_libio_check_fd(fd); 4000c378: 03 10 00 63 sethi %hi(0x40018c00), %g1 4000c37c: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 ! 40018d4c 4000c380: 80 a6 00 01 cmp %i0, %g1 4000c384: 1a 80 00 0d bcc 4000c3b8 4000c388: 03 10 00 67 sethi %hi(0x40019c00), %g1 iop = rtems_libio_iop(fd); 4000c38c: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 4000c390: 85 2e 20 02 sll %i0, 2, %g2 4000c394: 83 2e 20 04 sll %i0, 4, %g1 4000c398: 82 20 40 02 sub %g1, %g2, %g1 4000c39c: 82 00 40 18 add %g1, %i0, %g1 4000c3a0: 83 28 60 02 sll %g1, 2, %g1 4000c3a4: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 4000c3a8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 4000c3ac: 80 88 61 00 btst 0x100, %g1 4000c3b0: 32 80 00 08 bne,a 4000c3d0 4000c3b4: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4000c3b8: 40 00 08 1c call 4000e428 <__errno> <== NOT EXECUTED 4000c3bc: 01 00 00 00 nop <== NOT EXECUTED 4000c3c0: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 4000c3c4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c3c8: 10 80 00 16 b 4000c420 <== NOT EXECUTED 4000c3cc: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = RTEMS_SUCCESSFUL; if ( iop->handlers->close_h ) 4000c3d0: c2 00 60 04 ld [ %g1 + 4 ], %g1 4000c3d4: 80 a0 60 00 cmp %g1, 0 4000c3d8: 02 80 00 05 be 4000c3ec 4000c3dc: a0 10 20 00 clr %l0 rc = (*iop->handlers->close_h)( iop ); 4000c3e0: 9f c0 40 00 call %g1 4000c3e4: 90 10 00 18 mov %i0, %o0 4000c3e8: a0 10 00 08 mov %o0, %l0 rtems_filesystem_freenode( &iop->pathinfo ); 4000c3ec: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 4000c3f0: 80 a0 60 00 cmp %g1, 0 4000c3f4: 02 80 00 08 be 4000c414 4000c3f8: 01 00 00 00 nop 4000c3fc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 4000c400: 80 a0 60 00 cmp %g1, 0 4000c404: 02 80 00 04 be 4000c414 4000c408: 01 00 00 00 nop 4000c40c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c410: 90 06 20 10 add %i0, 0x10, %o0 <== NOT EXECUTED rtems_libio_free( iop ); 4000c414: 40 00 00 bd call 4000c708 4000c418: 90 10 00 18 mov %i0, %o0 return rc; 4000c41c: 90 10 00 10 mov %l0, %o0 } 4000c420: 81 c7 e0 08 ret 4000c424: 91 e8 00 08 restore %g0, %o0, %o0 40016f00 : * close a directory. */ int closedir(dirp) register DIR *dirp; { 40016f00: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int fd; if ( !dirp ) 40016f04: a0 96 20 00 orcc %i0, 0, %l0 <== NOT EXECUTED 40016f08: 02 80 00 0b be 40016f34 <== NOT EXECUTED 40016f0c: 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); 40016f10: 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; 40016f14: f0 04 00 00 ld [ %l0 ], %i0 <== NOT EXECUTED dirp->dd_fd = -1; dirp->dd_loc = 0; 40016f18: c0 24 20 04 clr [ %l0 + 4 ] <== NOT EXECUTED (void)free((void *)dirp->dd_buf); 40016f1c: 7f ff bc 58 call 4000607c <== NOT EXECUTED 40016f20: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED (void)free((void *)dirp); 40016f24: 7f ff bc 56 call 4000607c <== NOT EXECUTED 40016f28: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return(close(fd)); 40016f2c: 7f ff ba 96 call 40005984 <== NOT EXECUTED 40016f30: 81 e8 00 00 restore <== NOT EXECUTED register DIR *dirp; { int fd; if ( !dirp ) rtems_set_errno_and_return_minus_one( EBADF ); 40016f34: 40 00 2f b0 call 40022df4 <__errno> <== NOT EXECUTED 40016f38: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40016f3c: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40016f40: 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)); } 40016f44: 81 c7 e0 08 ret <== NOT EXECUTED 40016f48: 81 e8 00 00 restore <== NOT EXECUTED 4000db28 : */ int device_close( rtems_libio_t *iop ) { 4000db28: 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; 4000db2c: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 args.iop = iop; 4000db30: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = 0; 4000db34: c0 27 bf f0 clr [ %fp + -16 ] args.mode = 0; 4000db38: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_close( 4000db3c: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 4000db40: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 4000db44: 94 07 bf ec add %fp, -20, %o2 4000db48: 40 00 01 32 call 4000e010 4000db4c: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) { 4000db50: 80 a2 20 00 cmp %o0, 0 4000db54: 02 80 00 05 be 4000db68 4000db58: 01 00 00 00 nop return rtems_deviceio_errno(status); 4000db5c: 7f ff ff a3 call 4000d9e8 <== NOT EXECUTED 4000db60: 01 00 00 00 nop <== NOT EXECUTED 4000db64: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } return 0; } 4000db68: 81 c7 e0 08 ret 4000db6c: 81 e8 00 00 restore 4000d9e0 : rtems_libio_t *iop, off_t length ) { return 0; } 4000d9e0: 81 c3 e0 08 retl <== NOT EXECUTED 4000d9e4: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000da1c : int device_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { 4000da1c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED args.iop = iop; args.command = command; args.buffer = buffer; the_jnode = iop->file_info; 4000da20: 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; 4000da24: f2 27 bf ec st %i1, [ %fp + -20 ] <== NOT EXECUTED args.buffer = buffer; 4000da28: 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; 4000da2c: 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( 4000da30: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 <== NOT EXECUTED 4000da34: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 <== NOT EXECUTED 4000da38: 40 00 01 8c call 4000e068 <== NOT EXECUTED 4000da3c: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000da40: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000da44: 22 80 00 06 be,a 4000da5c <== NOT EXECUTED 4000da48: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED return rtems_deviceio_errno(status); 4000da4c: 7f ff ff e7 call 4000d9e8 <== NOT EXECUTED 4000da50: 01 00 00 00 nop <== NOT EXECUTED return args.ioctl_return; } 4000da54: 81 c7 e0 08 ret <== NOT EXECUTED 4000da58: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000da5c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4000da60: 81 c7 e0 08 ret <== NOT EXECUTED 4000da64: 81 e8 00 00 restore <== NOT EXECUTED 4000d9d8 : off_t offset, int whence ) { return offset; } 4000d9d8: 81 c3 e0 08 retl <== NOT EXECUTED 4000d9dc: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4000db70 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4000db70: 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; 4000db74: 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; 4000db78: c4 06 20 2c ld [ %i0 + 0x2c ], %g2 args.iop = iop; 4000db7c: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = iop->flags; 4000db80: c2 27 bf f0 st %g1, [ %fp + -16 ] args.mode = mode; 4000db84: f6 27 bf f4 st %i3, [ %fp + -12 ] status = rtems_io_open( 4000db88: d2 00 a0 50 ld [ %g2 + 0x50 ], %o1 4000db8c: d0 00 a0 4c ld [ %g2 + 0x4c ], %o0 4000db90: 94 07 bf ec add %fp, -20, %o2 4000db94: 40 00 01 4b call 4000e0c0 4000db98: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000db9c: 80 a2 20 00 cmp %o0, 0 4000dba0: 02 80 00 05 be 4000dbb4 4000dba4: 01 00 00 00 nop return rtems_deviceio_errno(status); 4000dba8: 7f ff ff 90 call 4000d9e8 <== NOT EXECUTED 4000dbac: 01 00 00 00 nop <== NOT EXECUTED 4000dbb0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED return 0; } 4000dbb4: 81 c7 e0 08 ret 4000dbb8: 81 e8 00 00 restore 4000dac8 : ssize_t device_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4000dac8: 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; 4000dacc: 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; 4000dad0: 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; 4000dad4: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 <== NOT EXECUTED args.iop = iop; args.offset = iop->offset; args.buffer = buffer; 4000dad8: 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; 4000dadc: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED args.buffer = buffer; args.count = count; 4000dae0: f4 27 bf ec st %i2, [ %fp + -20 ] <== NOT EXECUTED args.flags = iop->flags; 4000dae4: 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; 4000dae8: 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; 4000daec: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED status = rtems_io_read( 4000daf0: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 <== NOT EXECUTED 4000daf4: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 <== NOT EXECUTED 4000daf8: 40 00 01 88 call 4000e118 <== NOT EXECUTED 4000dafc: 94 07 bf e0 add %fp, -32, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000db00: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000db04: 22 80 00 06 be,a 4000db1c <== NOT EXECUTED 4000db08: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED return rtems_deviceio_errno(status); 4000db0c: 7f ff ff b7 call 4000d9e8 <== NOT EXECUTED 4000db10: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 4000db14: 81 c7 e0 08 ret <== NOT EXECUTED 4000db18: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000db1c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4000db20: 81 c7 e0 08 ret <== NOT EXECUTED 4000db24: 81 e8 00 00 restore <== NOT EXECUTED 4000da68 : ssize_t device_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4000da68: 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; 4000da6c: 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; 4000da70: 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; 4000da74: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 args.iop = iop; args.offset = iop->offset; args.buffer = (void *) buffer; 4000da78: 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; 4000da7c: c2 27 bf e4 st %g1, [ %fp + -28 ] args.buffer = (void *) buffer; args.count = count; 4000da80: f4 27 bf ec st %i2, [ %fp + -20 ] args.flags = iop->flags; 4000da84: 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; 4000da88: 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; 4000da8c: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_write( 4000da90: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 4000da94: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 4000da98: 40 00 01 b6 call 4000e170 4000da9c: 94 07 bf e0 add %fp, -32, %o2 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000daa0: 80 a2 20 00 cmp %o0, 0 4000daa4: 22 80 00 06 be,a 4000dabc 4000daa8: d0 07 bf f4 ld [ %fp + -12 ], %o0 return rtems_deviceio_errno(status); 4000daac: 7f ff ff cf call 4000d9e8 <== NOT EXECUTED 4000dab0: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 4000dab4: 81 c7 e0 08 ret <== NOT EXECUTED 4000dab8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000dabc: b0 10 00 08 mov %o0, %i0 4000dac0: 81 c7 e0 08 ret 4000dac4: 81 e8 00 00 restore 40004cac : /* * Drain output queue */ static void drainOutput (struct rtems_termios_tty *tty) { 40004cac: 9d e3 bf 98 save %sp, -104, %sp rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) { 40004cb0: c2 06 20 b4 ld [ %i0 + 0xb4 ], %g1 40004cb4: 80 a0 60 00 cmp %g1, 0 40004cb8: 02 80 00 1a be 40004d20 40004cbc: 01 00 00 00 nop rtems_interrupt_disable (level); 40004cc0: 7f ff f4 7c call 40001eb0 <== NOT EXECUTED 40004cc4: 01 00 00 00 nop <== NOT EXECUTED 40004cc8: 30 80 00 0f b,a 40004d04 <== NOT EXECUTED while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) { tty->rawOutBufState = rob_wait; 40004ccc: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 40004cd0: 7f ff f4 7c call 40001ec0 <== NOT EXECUTED 40004cd4: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 40004cd8: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 40004cdc: 92 10 20 00 clr %o1 <== NOT EXECUTED 40004ce0: 40 00 06 b1 call 400067a4 <== NOT EXECUTED 40004ce4: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 40004ce8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004cec: 02 80 00 04 be 40004cfc <== NOT EXECUTED 40004cf0: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40004cf4: 40 00 09 a9 call 40007398 <== NOT EXECUTED 40004cf8: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 40004cfc: 7f ff f4 6d call 40001eb0 <== NOT EXECUTED 40004d00: 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) { 40004d04: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 40004d08: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40004d0c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004d10: 12 bf ff ef bne 40004ccc <== NOT EXECUTED 40004d14: 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); 40004d18: 7f ff f4 6a call 40001ec0 <== NOT EXECUTED 40004d1c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40004d20: 81 c7 e0 08 ret 40004d24: 81 e8 00 00 restore 40004720 : /* * Echo a typed character */ static void echo (unsigned char c, struct rtems_termios_tty *tty) { 40004720: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) { 40004724: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40004728: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 4000472c: 02 80 00 1a be 40004794 <== NOT EXECUTED 40004730: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40004734: 03 10 00 65 sethi %hi(0x40019400), %g1 <== NOT EXECUTED 40004738: c2 00 60 d0 ld [ %g1 + 0xd0 ], %g1 ! 400194d0 <__ctype_ptr> <== NOT EXECUTED 4000473c: 84 0e 20 ff and %i0, 0xff, %g2 <== NOT EXECUTED 40004740: c2 08 40 02 ldub [ %g1 + %g2 ], %g1 <== NOT EXECUTED 40004744: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004748: 22 80 00 14 be,a 40004798 <== NOT EXECUTED 4000474c: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED 40004750: 80 a0 a0 09 cmp %g2, 9 <== NOT EXECUTED 40004754: 02 80 00 10 be 40004794 <== NOT EXECUTED 40004758: 80 a0 a0 0a cmp %g2, 0xa <== NOT EXECUTED 4000475c: 02 80 00 0e be 40004794 <== NOT EXECUTED 40004760: 82 1e 20 40 xor %i0, 0x40, %g1 <== NOT EXECUTED char echobuf[2]; echobuf[0] = '^'; echobuf[1] = c ^ 0x40; 40004764: 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] = '^'; 40004768: 82 10 20 5e mov 0x5e, %g1 <== NOT EXECUTED echobuf[1] = c ^ 0x40; rtems_termios_puts (echobuf, 2, tty); 4000476c: 90 07 bf f6 add %fp, -10, %o0 <== 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] = '^'; 40004770: c2 2f bf f6 stb %g1, [ %fp + -10 ] <== NOT EXECUTED echobuf[1] = c ^ 0x40; rtems_termios_puts (echobuf, 2, tty); 40004774: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40004778: 7f ff ff 3c call 40004468 <== NOT EXECUTED 4000477c: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED tty->column += 2; 40004780: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40004784: 82 00 60 02 add %g1, 2, %g1 <== NOT EXECUTED 40004788: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED 4000478c: 81 c7 e0 08 ret <== NOT EXECUTED 40004790: 81 e8 00 00 restore <== NOT EXECUTED } else { oproc (c, tty); 40004794: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED 40004798: 7f ff ff 80 call 40004598 <== NOT EXECUTED 4000479c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 400047a0: 81 c7 e0 08 ret <== NOT EXECUTED 400047a4: 81 e8 00 00 restore <== NOT EXECUTED 400176a8 : group_fp = fopen("/etc/group", "r"); } void endgrent(void) { if (group_fp != NULL) 400176a8: 03 10 00 e7 sethi %hi(0x40039c00), %g1 <== NOT EXECUTED 400176ac: d0 00 61 c4 ld [ %g1 + 0x1c4 ], %o0 ! 40039dc4 <== NOT EXECUTED 400176b0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400176b4: 02 80 00 05 be 400176c8 <== NOT EXECUTED 400176b8: 01 00 00 00 nop <== NOT EXECUTED fclose(group_fp); 400176bc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400176c0: 40 00 2e 14 call 40022f10 <== NOT EXECUTED 400176c4: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400176c8: 81 c3 e0 08 retl <== NOT EXECUTED 400176cc: 01 00 00 00 nop 400176d0 : passwd_fp = fopen("/etc/passwd", "r"); } void endpwent(void) { if (passwd_fp != NULL) 400176d0: 03 10 00 e7 sethi %hi(0x40039c00), %g1 <== NOT EXECUTED 400176d4: d0 00 60 dc ld [ %g1 + 0xdc ], %o0 ! 40039cdc <== NOT EXECUTED 400176d8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400176dc: 02 80 00 05 be 400176f0 <== NOT EXECUTED 400176e0: 01 00 00 00 nop <== NOT EXECUTED fclose(passwd_fp); 400176e4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400176e8: 40 00 2e 0a call 40022f10 <== NOT EXECUTED 400176ec: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400176f0: 81 c3 e0 08 retl <== NOT EXECUTED 400176f4: 01 00 00 00 nop 400047a8 : * 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) { 400047a8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->ccount == 0) 400047ac: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 <== NOT EXECUTED 400047b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400047b4: 02 80 00 0a be 400047dc <== NOT EXECUTED 400047b8: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return; if (lineFlag) { 400047bc: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400047c0: 02 80 00 7d be 400049b4 <== NOT EXECUTED 400047c4: 03 10 00 60 sethi %hi(0x40018000), %g1 <== NOT EXECUTED if (!(tty->termios.c_lflag & ECHO)) { 400047c8: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 400047cc: 80 88 60 08 btst 8, %g1 <== NOT EXECUTED 400047d0: 32 80 00 05 bne,a 400047e4 <== NOT EXECUTED 400047d4: 80 88 60 10 btst 0x10, %g1 <== NOT EXECUTED tty->ccount = 0; 400047d8: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED 400047dc: 81 c7 e0 08 ret <== NOT EXECUTED 400047e0: 81 e8 00 00 restore <== NOT EXECUTED return; } if (!(tty->termios.c_lflag & ECHOE)) { 400047e4: 12 80 00 74 bne 400049b4 <== NOT EXECUTED 400047e8: 03 10 00 60 sethi %hi(0x40018000), %g1 <== NOT EXECUTED tty->ccount = 0; echo (tty->termios.c_cc[VKILL], tty); 400047ec: 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; 400047f0: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED echo (tty->termios.c_cc[VKILL], tty); 400047f4: 7f ff ff cb call 40004720 <== NOT EXECUTED 400047f8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) 400047fc: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED echo ('\n', tty); 40004800: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED return; } if (!(tty->termios.c_lflag & ECHOE)) { tty->ccount = 0; echo (tty->termios.c_cc[VKILL], tty); if (tty->termios.c_lflag & ECHOK) 40004804: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004808: 12 80 00 11 bne 4000484c <== NOT EXECUTED 4000480c: b0 10 20 0a mov 0xa, %i0 <== NOT EXECUTED 40004810: 30 80 00 71 b,a 400049d4 <== NOT EXECUTED } } while (tty->ccount) { unsigned char c = tty->cbuf[--tty->ccount]; if (tty->termios.c_lflag & ECHO) { 40004814: c6 04 20 3c ld [ %l0 + 0x3c ], %g3 <== NOT EXECUTED echo ('\n', tty); return; } } while (tty->ccount) { unsigned char c = tty->cbuf[--tty->ccount]; 40004818: 82 01 3f ff add %g4, -1, %g1 <== NOT EXECUTED 4000481c: c2 24 20 20 st %g1, [ %l0 + 0x20 ] <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) { 40004820: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40004824: 02 80 00 5f be 400049a0 <== NOT EXECUTED 40004828: c4 08 80 01 ldub [ %g2 + %g1 ], %g2 <== NOT EXECUTED if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) { 4000482c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40004830: 12 80 00 09 bne 40004854 <== NOT EXECUTED 40004834: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED 40004838: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 4000483c: 12 80 00 07 bne 40004858 <== NOT EXECUTED 40004840: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED echo (tty->termios.c_cc[VERASE], tty); 40004844: f0 0c 20 43 ldub [ %l0 + 0x43 ], %i0 <== NOT EXECUTED 40004848: b2 10 00 10 mov %l0, %i1 <== NOT EXECUTED 4000484c: 7f ff ff b5 call 40004720 <== NOT EXECUTED 40004850: 81 e8 00 00 restore <== NOT EXECUTED } else if (c == '\t') { 40004854: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40004858: 80 a0 60 09 cmp %g1, 9 <== NOT EXECUTED 4000485c: 32 80 00 2c bne,a 4000490c <== NOT EXECUTED 40004860: c2 04 60 d0 ld [ %l1 + 0xd0 ], %g1 <== NOT EXECUTED int col = tty->read_start_column; 40004864: f0 04 20 2c ld [ %l0 + 0x2c ], %i0 <== NOT EXECUTED while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40004868: d8 04 60 d0 ld [ %l1 + 0xd0 ], %o4 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 4000486c: 9a 01 3f ff add %g4, -1, %o5 <== NOT EXECUTED c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { if (tty->termios.c_lflag & ECHOCTL) 40004870: 88 08 e2 00 and %g3, 0x200, %g4 <== NOT EXECUTED while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40004874: 10 80 00 14 b 400048c4 <== NOT EXECUTED 40004878: 86 10 20 00 clr %g3 <== NOT EXECUTED /* * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { 4000487c: c4 48 40 03 ldsb [ %g1 + %g3 ], %g2 <== NOT EXECUTED 40004880: c2 08 40 03 ldub [ %g1 + %g3 ], %g1 <== NOT EXECUTED 40004884: 80 a0 a0 09 cmp %g2, 9 <== NOT EXECUTED 40004888: 12 80 00 05 bne 4000489c <== NOT EXECUTED 4000488c: 82 08 60 ff and %g1, 0xff, %g1 <== NOT EXECUTED col = (col | 7) + 1; 40004890: 82 16 20 07 or %i0, 7, %g1 <== NOT EXECUTED 40004894: 10 80 00 0b b 400048c0 <== NOT EXECUTED 40004898: b0 00 60 01 add %g1, 1, %i0 <== NOT EXECUTED } else if (iscntrl (c)) { 4000489c: c2 0b 00 01 ldub [ %o4 + %g1 ], %g1 <== NOT EXECUTED 400048a0: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 400048a4: 22 80 00 07 be,a 400048c0 <== NOT EXECUTED 400048a8: b0 06 20 01 inc %i0 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOCTL) 400048ac: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 400048b0: 32 80 00 04 bne,a 400048c0 <== NOT EXECUTED 400048b4: b0 06 20 02 add %i0, 2, %i0 <== NOT EXECUTED /* * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; 400048b8: 10 80 00 03 b 400048c4 <== NOT EXECUTED 400048bc: 86 00 e0 01 inc %g3 <== NOT EXECUTED 400048c0: 86 00 e0 01 inc %g3 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 400048c4: 80 a0 c0 0d cmp %g3, %o5 <== NOT EXECUTED 400048c8: 32 bf ff ed bne,a 4000487c <== NOT EXECUTED 400048cc: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 400048d0: 10 80 00 08 b 400048f0 <== NOT EXECUTED 400048d4: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); 400048d8: 7f ff fe e4 call 40004468 <== NOT EXECUTED 400048dc: 01 00 00 00 nop <== NOT EXECUTED tty->column--; 400048e0: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 400048e4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400048e8: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 400048ec: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); 400048f0: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 400048f4: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 400048f8: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 400048fc: 14 bf ff f7 bg 400048d8 <== NOT EXECUTED 40004900: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40004904: 10 80 00 28 b 400049a4 <== NOT EXECUTED 40004908: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { 4000490c: b0 08 a0 ff and %g2, 0xff, %i0 <== NOT EXECUTED 40004910: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED 40004914: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004918: 02 80 00 10 be 40004958 <== NOT EXECUTED 4000491c: c2 04 60 d0 ld [ %l1 + 0xd0 ], %g1 <== NOT EXECUTED 40004920: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40004924: 22 80 00 0e be,a 4000495c <== NOT EXECUTED 40004928: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b \b", 3, tty); 4000492c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40004930: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40004934: 7f ff fe cd call 40004468 <== NOT EXECUTED 40004938: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 4000493c: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40004940: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004944: 22 80 00 05 be,a 40004958 <== NOT EXECUTED 40004948: c2 04 60 d0 ld [ %l1 + 0xd0 ], %g1 <== NOT EXECUTED tty->column--; 4000494c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40004950: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) { 40004954: c2 04 60 d0 ld [ %l1 + 0xd0 ], %g1 <== NOT EXECUTED 40004958: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED 4000495c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004960: 02 80 00 07 be 4000497c <== NOT EXECUTED 40004964: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40004968: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 4000496c: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40004970: 02 80 00 0d be 400049a4 <== NOT EXECUTED 40004974: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_termios_puts ("\b \b", 3, tty); 40004978: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000497c: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40004980: 7f ff fe ba call 40004468 <== NOT EXECUTED 40004984: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 40004988: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 4000498c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004990: 02 80 00 05 be 400049a4 <== NOT EXECUTED 40004994: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED tty->column--; 40004998: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000499c: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } } } if (!lineFlag) 400049a0: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400049a4: 02 80 00 0c be 400049d4 <== NOT EXECUTED 400049a8: 01 00 00 00 nop <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) echo ('\n', tty); return; } } while (tty->ccount) { 400049ac: 10 80 00 07 b 400049c8 <== NOT EXECUTED 400049b0: c8 04 20 20 ld [ %l0 + 0x20 ], %g4 <== NOT EXECUTED 400049b4: 23 10 00 65 sethi %hi(0x40019400), %l1 <== 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); 400049b8: a4 10 63 10 or %g1, 0x310, %l2 <== NOT EXECUTED /* * Back up over the tab */ while (tty->column > col) { rtems_termios_puts ("\b", 1, tty); 400049bc: 03 10 00 60 sethi %hi(0x40018000), %g1 <== NOT EXECUTED 400049c0: a6 10 63 08 or %g1, 0x308, %l3 ! 40018308 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) echo ('\n', tty); return; } } while (tty->ccount) { 400049c4: c8 04 20 20 ld [ %l0 + 0x20 ], %g4 <== NOT EXECUTED 400049c8: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 400049cc: 32 bf ff 92 bne,a 40004814 <== NOT EXECUTED 400049d0: c4 04 20 1c ld [ %l0 + 0x1c ], %g2 <== NOT EXECUTED 400049d4: 81 c7 e0 08 ret <== NOT EXECUTED 400049d8: 81 e8 00 00 restore <== NOT EXECUTED 40020b50 : int fcntl( int fd, int cmd, ... ) { 40020b50: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 40020b54: 03 10 00 df sethi %hi(0x40037c00), %g1 <== NOT EXECUTED 40020b58: da 00 61 4c ld [ %g1 + 0x14c ], %o5 ! 40037d4c <== NOT EXECUTED ... ) { int ret; va_list ap; va_start( ap, cmd ); 40020b5c: 86 07 a0 4c add %fp, 0x4c, %g3 <== NOT EXECUTED int fcntl( int fd, int cmd, ... ) { 40020b60: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40020b64: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40020b68: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40020b6c: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 40020b70: 80 a6 00 0d cmp %i0, %o5 <== NOT EXECUTED 40020b74: 1a 80 00 0e bcc 40020bac <== NOT EXECUTED 40020b78: c6 27 bf f4 st %g3, [ %fp + -12 ] <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40020b7c: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 40020b80: c8 00 61 84 ld [ %g1 + 0x184 ], %g4 ! 4003a584 <== NOT EXECUTED 40020b84: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40020b88: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40020b8c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40020b90: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 40020b94: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40020b98: b0 01 00 01 add %g4, %g1, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40020b9c: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 40020ba0: 80 8a 21 00 btst 0x100, %o0 <== NOT EXECUTED 40020ba4: 12 80 00 07 bne 40020bc0 <== NOT EXECUTED 40020ba8: 80 a6 60 09 cmp %i1, 9 <== NOT EXECUTED 40020bac: 40 00 08 92 call 40022df4 <__errno> <== NOT EXECUTED 40020bb0: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED 40020bb4: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40020bb8: 10 80 00 68 b 40020d58 <== NOT EXECUTED 40020bbc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * This switch should contain all the cases from POSIX. */ switch ( cmd ) { 40020bc0: 18 80 00 50 bgu 40020d00 <== NOT EXECUTED 40020bc4: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED 40020bc8: 05 10 00 82 sethi %hi(0x40020800), %g2 <== NOT EXECUTED 40020bcc: 84 10 a3 28 or %g2, 0x328, %g2 ! 40020b28 <== NOT EXECUTED 40020bd0: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 40020bd4: 81 c0 40 00 jmp %g1 <== NOT EXECUTED 40020bd8: 01 00 00 00 nop <== NOT EXECUTED case F_DUPFD: /* dup */ fd2 = va_arg( ap, int ); 40020bdc: d0 00 c0 00 ld [ %g3 ], %o0 <== NOT EXECUTED if ( fd2 ) 40020be0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40020be4: 02 80 00 0b be 40020c10 <== NOT EXECUTED 40020be8: 80 a2 00 0d cmp %o0, %o5 <== NOT EXECUTED diop = rtems_libio_iop( fd2 ); 40020bec: 1a 80 00 0e bcc 40020c24 <== NOT EXECUTED 40020bf0: ba 10 20 00 clr %i5 <== NOT EXECUTED 40020bf4: 85 2a 20 02 sll %o0, 2, %g2 <== NOT EXECUTED 40020bf8: 83 2a 20 04 sll %o0, 4, %g1 <== NOT EXECUTED 40020bfc: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40020c00: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40020c04: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40020c08: 10 80 00 07 b 40020c24 <== NOT EXECUTED 40020c0c: ba 01 00 01 add %g4, %g1, %i5 <== NOT EXECUTED else { /* allocate a file control block */ diop = rtems_libio_allocate(); 40020c10: 7f ff 94 cc call 40005f40 <== NOT EXECUTED 40020c14: 01 00 00 00 nop <== NOT EXECUTED if ( diop == 0 ) { 40020c18: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 40020c1c: 22 80 00 4f be,a 40020d58 <== NOT EXECUTED 40020c20: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 40020c24: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED diop->file_info = iop->file_info; 40020c28: c4 06 20 2c ld [ %i0 + 0x2c ], %g2 <== NOT EXECUTED diop->flags = iop->flags; 40020c2c: c6 06 20 0c ld [ %i0 + 0xc ], %g3 <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 40020c30: c2 27 60 30 st %g1, [ %i5 + 0x30 ] <== NOT EXECUTED diop->file_info = iop->file_info; 40020c34: c4 27 60 2c st %g2, [ %i5 + 0x2c ] <== NOT EXECUTED diop->flags = iop->flags; 40020c38: c6 27 60 0c st %g3, [ %i5 + 0xc ] <== NOT EXECUTED diop->pathinfo = iop->pathinfo; 40020c3c: 90 07 60 10 add %i5, 0x10, %o0 <== NOT EXECUTED 40020c40: 92 06 20 10 add %i0, 0x10, %o1 <== NOT EXECUTED 40020c44: 40 00 0f 11 call 40024888 <== NOT EXECUTED 40020c48: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED ret = (int) (diop - rtems_libio_iops); 40020c4c: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 40020c50: c6 00 61 84 ld [ %g1 + 0x184 ], %g3 ! 4003a584 <== NOT EXECUTED 40020c54: 86 27 40 03 sub %i5, %g3, %g3 <== NOT EXECUTED 40020c58: 87 38 e0 02 sra %g3, 2, %g3 <== NOT EXECUTED 40020c5c: 83 28 e0 02 sll %g3, 2, %g1 <== NOT EXECUTED 40020c60: 85 28 e0 06 sll %g3, 6, %g2 <== NOT EXECUTED 40020c64: 84 20 80 01 sub %g2, %g1, %g2 <== NOT EXECUTED 40020c68: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40020c6c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40020c70: 85 28 60 0c sll %g1, 0xc, %g2 <== NOT EXECUTED 40020c74: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40020c78: 82 00 40 03 add %g1, %g3, %g1 <== NOT EXECUTED 40020c7c: 83 28 60 04 sll %g1, 4, %g1 <== NOT EXECUTED 40020c80: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40020c84: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40020c88: 10 80 00 23 b 40020d14 <== NOT EXECUTED 40020c8c: b8 20 c0 01 sub %g3, %g1, %i4 <== NOT EXECUTED break; case F_GETFD: /* get f_flags */ ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0); 40020c90: 83 32 20 0b srl %o0, 0xb, %g1 <== NOT EXECUTED 40020c94: 10 80 00 23 b 40020d20 <== NOT EXECUTED 40020c98: b8 08 60 01 and %g1, 1, %i4 <== 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 ) ) 40020c9c: c2 00 c0 00 ld [ %g3 ], %g1 <== NOT EXECUTED 40020ca0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40020ca4: 22 80 00 03 be,a 40020cb0 <== NOT EXECUTED 40020ca8: 82 0a 37 ff and %o0, -2049, %g1 <== NOT EXECUTED 40020cac: 82 12 28 00 or %o0, 0x800, %g1 <== NOT EXECUTED iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC; else iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; 40020cb0: c2 26 20 0c st %g1, [ %i0 + 0xc ] <== NOT EXECUTED 40020cb4: 10 80 00 1b b 40020d20 <== NOT EXECUTED 40020cb8: b8 10 20 00 clr %i4 <== NOT EXECUTED break; case F_GETFL: /* more flags (cloexec) */ ret = rtems_libio_to_fcntl_flags( iop->flags ); 40020cbc: 7f ff 94 36 call 40005d94 <== NOT EXECUTED 40020cc0: 01 00 00 00 nop <== NOT EXECUTED 40020cc4: 10 80 00 14 b 40020d14 <== NOT EXECUTED 40020cc8: b8 10 00 08 mov %o0, %i4 <== NOT EXECUTED break; case F_SETFL: flags = rtems_libio_fcntl_flags( va_arg( ap, int ) ); 40020ccc: d0 00 c0 00 ld [ %g3 ], %o0 <== NOT EXECUTED 40020cd0: 7f ff 94 d2 call 40006018 <== NOT EXECUTED 40020cd4: 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); 40020cd8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40020cdc: 90 0a 22 01 and %o0, 0x201, %o0 <== NOT EXECUTED 40020ce0: 82 08 7d fe and %g1, -514, %g1 <== NOT EXECUTED 40020ce4: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED 40020ce8: 10 80 00 0e b 40020d20 <== NOT EXECUTED 40020cec: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED errno = ENOTSUP; ret = -1; break; case F_GETOWN: /* for sockets. */ errno = ENOTSUP; 40020cf0: 40 00 08 41 call 40022df4 <__errno> <== NOT EXECUTED 40020cf4: 01 00 00 00 nop <== NOT EXECUTED 40020cf8: 10 80 00 05 b 40020d0c <== NOT EXECUTED 40020cfc: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED ret = -1; break; default: errno = EINVAL; 40020d00: 40 00 08 3d call 40022df4 <__errno> <== NOT EXECUTED 40020d04: 01 00 00 00 nop <== NOT EXECUTED 40020d08: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40020d0c: 10 80 00 12 b 40020d54 <== NOT EXECUTED 40020d10: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * If we got this far successfully, then we give the optional * filesystem specific handler a chance to process this. */ if (ret >= 0) { 40020d14: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40020d18: 06 80 00 10 bl 40020d58 <== NOT EXECUTED 40020d1c: 01 00 00 00 nop <== NOT EXECUTED if (iop->handlers->fcntl_h) { 40020d20: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40020d24: c2 00 60 30 ld [ %g1 + 0x30 ], %g1 <== NOT EXECUTED 40020d28: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40020d2c: 02 80 00 0b be 40020d58 <== NOT EXECUTED 40020d30: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED int err = (*iop->handlers->fcntl_h)( cmd, iop ); 40020d34: 9f c0 40 00 call %g1 <== NOT EXECUTED 40020d38: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (err) { 40020d3c: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 40020d40: 02 80 00 06 be 40020d58 <== NOT EXECUTED 40020d44: 01 00 00 00 nop <== NOT EXECUTED errno = err; 40020d48: 40 00 08 2b call 40022df4 <__errno> <== NOT EXECUTED 40020d4c: 01 00 00 00 nop <== NOT EXECUTED 40020d50: fa 22 00 00 st %i5, [ %o0 ] <== NOT EXECUTED { int ret; va_list ap; va_start( ap, cmd ); ret = vfcntl(fd,cmd,ap); va_end(ap); 40020d54: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED return ret; } 40020d58: 81 c7 e0 08 ret <== NOT EXECUTED 40020d5c: 91 e8 00 1c restore %g0, %i4, %o0 <== NOT EXECUTED 40003030 : } void free( void *ptr ) { 40003030: 9d e3 bf 98 save %sp, -104, %sp MSBUMP(free_calls, 1); if ( !ptr ) 40003034: 80 a6 20 00 cmp %i0, 0 40003038: 02 80 00 1f be 400030b4 4000303c: 03 10 00 68 sethi %hi(0x4001a000), %g1 /* * Do not attempt to free memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 40003040: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> 40003044: 80 a0 60 03 cmp %g1, 3 40003048: 12 80 00 0e bne 40003080 4000304c: 03 10 00 67 sethi %hi(0x40019c00), %g1 if ((_Thread_Dispatch_disable_level > 0) || (_ISR_Nest_level > 0)) { 40003050: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40003054: 80 a0 60 00 cmp %g1, 0 40003058: 12 80 00 06 bne 40003070 4000305c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40003060: c2 00 63 64 ld [ %g1 + 0x364 ], %g1 ! 40019f64 <_ISR_Nest_level> 40003064: 80 a0 60 00 cmp %g1, 0 40003068: 02 80 00 07 be 40003084 4000306c: 37 10 00 67 sethi %hi(0x40019c00), %i3 Chain_Append(&RTEMS_Malloc_GC_list, (Chain_Node *)ptr); 40003070: b2 10 00 18 mov %i0, %i1 40003074: 31 10 00 67 sethi %hi(0x40019c00), %i0 40003078: 40 00 11 62 call 40007600 <_Chain_Append> 4000307c: 91 ee 21 40 restore %i0, 0x140, %o0 MSBUMP(lifetime_freed, size); } } #endif if ( !_Protected_heap_Free( &RTEMS_Malloc_Heap, ptr ) ) { 40003080: 37 10 00 67 sethi %hi(0x40019c00), %i3 <== NOT EXECUTED 40003084: 92 10 00 18 mov %i0, %o1 40003088: 40 00 17 53 call 40008dd4 <_Protected_heap_Free> 4000308c: 90 16 e0 e4 or %i3, 0xe4, %o0 40003090: 80 a2 20 00 cmp %o0, 0 40003094: 12 80 00 08 bne 400030b4 40003098: 82 16 e0 e4 or %i3, 0xe4, %g1 printk( "Program heap: free of bad pointer %p -- range %p - %p \n", 4000309c: f6 00 60 1c ld [ %g1 + 0x1c ], %i3 <== NOT EXECUTED 400030a0: f4 00 60 18 ld [ %g1 + 0x18 ], %i2 <== NOT EXECUTED 400030a4: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED 400030a8: 31 10 00 60 sethi %hi(0x40018000), %i0 <== NOT EXECUTED 400030ac: 40 00 03 60 call 40003e2c <== NOT EXECUTED 400030b0: 91 ee 22 98 restore %i0, 0x298, %o0 <== NOT EXECUTED 400030b4: 81 c7 e0 08 ret 400030b8: 81 e8 00 00 restore 400181ec : * NOTE: this must be called with * thread dispatching disabled! */ static void free_user_env(void *venv) { 400181ec: 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 400181f0: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 400181f4: 82 10 62 64 or %g1, 0x264, %g1 ! 4003aa64 <== NOT EXECUTED 400181f8: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 400181fc: 02 80 00 18 be 4001825c <== NOT EXECUTED 40018200: 01 00 00 00 nop <== NOT EXECUTED #ifdef HAVE_USERENV_REFCNT && --env->refcnt <= 0 #endif ) { rtems_filesystem_freenode( &env->current_directory); 40018204: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40018208: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001820c: 22 80 00 09 be,a 40018230 <== NOT EXECUTED 40018210: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40018214: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018218: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001821c: 22 80 00 05 be,a 40018230 <== NOT EXECUTED 40018220: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40018224: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018228: 90 06 20 04 add %i0, 4, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &env->root_directory); 4001822c: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40018230: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018234: 02 80 00 08 be 40018254 <== NOT EXECUTED 40018238: 01 00 00 00 nop <== NOT EXECUTED 4001823c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018240: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018244: 02 80 00 04 be 40018254 <== NOT EXECUTED 40018248: 01 00 00 00 nop <== NOT EXECUTED 4001824c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018250: 90 06 20 14 add %i0, 0x14, %o0 <== NOT EXECUTED free(env); 40018254: 7f ff b7 8a call 4000607c <== NOT EXECUTED 40018258: 81 e8 00 00 restore <== NOT EXECUTED 4001825c: 81 c7 e0 08 ret <== NOT EXECUTED 40018260: 81 e8 00 00 restore <== NOT EXECUTED 400176ec : int fstat( int fd, struct stat *sbuf ) { 400176ec: 9d e3 bf 98 save %sp, -104, %sp /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) 400176f0: 80 a6 60 00 cmp %i1, 0 400176f4: 32 80 00 06 bne,a 4001770c 400176f8: 03 10 00 63 sethi %hi(0x40018c00), %g1 rtems_set_errno_and_return_minus_one( EFAULT ); 400176fc: 7f ff db 4b call 4000e428 <__errno> <== NOT EXECUTED 40017700: 01 00 00 00 nop <== NOT EXECUTED 40017704: 10 80 00 2a b 400177ac <== NOT EXECUTED 40017708: 82 10 20 0e mov 0xe, %g1 ! e <== NOT EXECUTED /* * Now process the stat() request. */ iop = rtems_libio_iop( fd ); 4001770c: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 40017710: 80 a6 00 01 cmp %i0, %g1 40017714: 1a 80 00 23 bcc 400177a0 40017718: 03 10 00 67 sethi %hi(0x40019c00), %g1 4001771c: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 40017720: 85 2e 20 02 sll %i0, 2, %g2 40017724: 83 2e 20 04 sll %i0, 4, %g1 40017728: 82 20 40 02 sub %g1, %g2, %g1 4001772c: 82 00 40 18 add %g1, %i0, %g1 40017730: 83 28 60 02 sll %g1, 2, %g1 40017734: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_fd( fd ); rtems_libio_check_is_open(iop); 40017738: c2 06 20 0c ld [ %i0 + 0xc ], %g1 4001773c: 80 88 61 00 btst 0x100, %g1 40017740: 02 80 00 18 be 400177a0 40017744: 01 00 00 00 nop if ( !iop->handlers ) 40017748: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4001774c: 80 a0 60 00 cmp %g1, 0 40017750: 02 80 00 14 be 400177a0 40017754: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EBADF ); if ( !iop->handlers->fstat_h ) 40017758: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 4001775c: 80 a0 60 00 cmp %g1, 0 40017760: 12 80 00 06 bne 40017778 40017764: 92 10 20 00 clr %o1 rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017768: 7f ff db 30 call 4000e428 <__errno> <== NOT EXECUTED 4001776c: 01 00 00 00 nop <== NOT EXECUTED 40017770: 10 80 00 0f b 400177ac <== NOT EXECUTED 40017774: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( sbuf, 0, sizeof(struct stat) ); 40017778: 94 10 20 50 mov 0x50, %o2 4001777c: 7f ff dd 2d call 4000ec30 40017780: 90 10 00 19 mov %i1, %o0 return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf ); 40017784: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 40017788: 90 06 20 10 add %i0, 0x10, %o0 4001778c: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 40017790: 9f c0 40 00 call %g1 40017794: 92 10 00 19 mov %i1, %o1 } 40017798: 81 c7 e0 08 ret 4001779c: 91 e8 00 08 restore %g0, %o0, %o0 /* * Now process the stat() request. */ iop = rtems_libio_iop( fd ); rtems_libio_check_fd( fd ); 400177a0: 7f ff db 22 call 4000e428 <__errno> <== NOT EXECUTED 400177a4: 01 00 00 00 nop <== NOT EXECUTED 400177a8: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 400177ac: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400177b0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED * versions of stat don't have to. */ memset( sbuf, 0, sizeof(struct stat) ); return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf ); } 400177b4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 400177b8: 81 c7 e0 08 ret <== NOT EXECUTED 400177bc: 81 e8 00 00 restore <== NOT EXECUTED 4000c43c : int ftruncate( int fd, off_t length ) { 4000c43c: 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 ); 4000c440: 03 10 00 63 sethi %hi(0x40018c00), %g1 <== NOT EXECUTED 4000c444: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 ! 40018d4c <== NOT EXECUTED 4000c448: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 4000c44c: 1a 80 00 0d bcc 4000c480 <== NOT EXECUTED 4000c450: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 4000c454: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c458: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 <== NOT EXECUTED 4000c45c: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 4000c460: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4000c464: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4000c468: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4000c46c: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 4000c470: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000c474: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000c478: 12 80 00 06 bne 4000c490 <== NOT EXECUTED 4000c47c: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 4000c480: 40 00 07 ea call 4000e428 <__errno> <== NOT EXECUTED 4000c484: 01 00 00 00 nop <== NOT EXECUTED 4000c488: 10 80 00 22 b 4000c510 <== NOT EXECUTED 4000c48c: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED /* * Make sure we are not working on a directory */ loc = iop->pathinfo; 4000c490: 92 06 20 10 add %i0, 0x10, %o1 <== NOT EXECUTED 4000c494: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000c498: 40 00 09 b9 call 4000eb7c <== NOT EXECUTED 4000c49c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 4000c4a0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000c4a4: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 4000c4a8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c4ac: 02 80 00 16 be 4000c504 <== NOT EXECUTED 4000c4b0: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) 4000c4b4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c4b8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000c4bc: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4000c4c0: 32 80 00 06 bne,a 4000c4d8 <== NOT EXECUTED 4000c4c4: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); 4000c4c8: 40 00 07 d8 call 4000e428 <__errno> <== NOT EXECUTED 4000c4cc: 01 00 00 00 nop <== NOT EXECUTED 4000c4d0: 10 80 00 10 b 4000c510 <== NOT EXECUTED 4000c4d4: 82 10 20 15 mov 0x15, %g1 ! 15 <== NOT EXECUTED rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 4000c4d8: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 4000c4dc: 32 80 00 06 bne,a 4000c4f4 <== NOT EXECUTED 4000c4e0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4000c4e4: 40 00 07 d1 call 4000e428 <__errno> <== NOT EXECUTED 4000c4e8: 01 00 00 00 nop <== NOT EXECUTED 4000c4ec: 10 80 00 09 b 4000c510 <== NOT EXECUTED 4000c4f0: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED if ( !iop->handlers->ftruncate_h ) 4000c4f4: c2 00 60 20 ld [ %g1 + 0x20 ], %g1 <== NOT EXECUTED 4000c4f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c4fc: 32 80 00 08 bne,a 4000c51c <== NOT EXECUTED 4000c500: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 4000c504: 40 00 07 c9 call 4000e428 <__errno> <== NOT EXECUTED 4000c508: 01 00 00 00 nop <== NOT EXECUTED 4000c50c: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4000c510: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c514: 10 80 00 04 b 4000c524 <== NOT EXECUTED 4000c518: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED return (*iop->handlers->ftruncate_h)( iop, length ); 4000c51c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c520: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } 4000c524: 81 c7 e0 08 ret <== NOT EXECUTED 4000c528: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001726c : char * getcwd (pt, size) char *pt; size_t size; { 4001726c: 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) 40017270: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40017274: 02 80 00 0b be 400172a0 <== NOT EXECUTED 40017278: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED if (!size) { errno = EINVAL; return (char *) NULL; } ept = pt + size; 4001727c: b6 10 20 00 clr %i3 <== NOT EXECUTED */ if (pt) { ptsize = 0; if (!size) 40017280: 12 80 00 0f bne 400172bc <== NOT EXECUTED 40017284: b2 06 00 19 add %i0, %i1, %i1 <== NOT EXECUTED { errno = EINVAL; 40017288: 40 00 2e db call 40022df4 <__errno> <== NOT EXECUTED 4001728c: b0 10 20 00 clr %i0 <== NOT EXECUTED 40017290: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40017294: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017298: 81 c7 e0 08 ret <== NOT EXECUTED 4001729c: 81 e8 00 00 restore <== NOT EXECUTED } ept = pt + size; } else { if (!(pt = (char *) malloc (ptsize = 1024 - 4))) 400172a0: 7f ff bb 9f call 4000611c <== NOT EXECUTED 400172a4: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 400172a8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400172ac: 02 bf ff fb be 40017298 <== NOT EXECUTED 400172b0: b6 10 23 fc mov 0x3fc, %i3 <== NOT EXECUTED 400172b4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED { return (char *) NULL; } ept = pt + ptsize; 400172b8: b2 02 23 fc add %o0, 0x3fc, %i1 <== NOT EXECUTED } bpt = ept - 1; *bpt = '\0'; 400172bc: 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))) 400172c0: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 400172c4: 7f ff bb 96 call 4000611c <== NOT EXECUTED 400172c8: ac 06 7f ff add %i1, -1, %l6 <== NOT EXECUTED 400172cc: a4 92 20 00 orcc %o0, 0, %l2 <== NOT EXECUTED 400172d0: 02 80 00 d7 be 4001762c <== NOT EXECUTED 400172d4: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; up[1] = '\0'; 400172d8: c0 2c a0 01 clrb [ %l2 + 1 ] <== NOT EXECUTED { goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; 400172dc: c2 2c 80 00 stb %g1, [ %l2 ] <== NOT EXECUTED up[1] = '\0'; /* Save root values, so know when to stop. */ if (stat ("/", &s)) 400172e0: a0 07 bf a8 add %fp, -88, %l0 <== NOT EXECUTED 400172e4: 11 10 00 d2 sethi %hi(0x40034800), %o0 <== NOT EXECUTED 400172e8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400172ec: 7f ff bf d8 call 4000724c <== NOT EXECUTED 400172f0: 90 12 22 d8 or %o0, 0x2d8, %o0 <== NOT EXECUTED 400172f4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400172f8: 12 80 00 ce bne 40017630 <== NOT EXECUTED 400172fc: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED goto err; root_dev = s.st_dev; 40017300: c4 1f bf a8 ldd [ %fp + -88 ], %g2 <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 40017304: 82 04 a4 00 add %l2, 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; 40017308: c4 3f bf 98 std %g2, [ %fp + -104 ] <== NOT EXECUTED root_ino = s.st_ino; 4001730c: c6 07 bf b0 ld [ %fp + -80 ], %g3 <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 40017310: 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. */ 40017314: 40 00 2e b8 call 40022df4 <__errno> <== NOT EXECUTED 40017318: c6 27 bf a0 st %g3, [ %fp + -96 ] <== NOT EXECUTED 4001731c: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 40017320: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED 40017324: a6 10 00 12 mov %l2, %l3 <== NOT EXECUTED 40017328: c4 27 bf 94 st %g2, [ %fp + -108 ] <== NOT EXECUTED 4001732c: b4 10 23 fc mov 0x3fc, %i2 <== NOT EXECUTED for (first = 1;; first = 0) { /* Stat the current level. */ if (_stat (up, &s)) 40017330: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40017334: 7f ff bf c6 call 4000724c <== NOT EXECUTED 40017338: 92 07 bf a8 add %fp, -88, %o1 <== NOT EXECUTED 4001733c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017340: 12 80 00 bb bne 4001762c <== NOT EXECUTED 40017344: e8 1f bf a8 ldd [ %fp + -88 ], %l4 <== 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) 40017348: c6 07 bf 98 ld [ %fp + -104 ], %g3 <== NOT EXECUTED 4001734c: 80 a0 c0 14 cmp %g3, %l4 <== NOT EXECUTED 40017350: 12 80 00 14 bne 400173a0 <== NOT EXECUTED 40017354: f8 07 bf b0 ld [ %fp + -80 ], %i4 <== NOT EXECUTED 40017358: c2 07 bf 9c ld [ %fp + -100 ], %g1 <== NOT EXECUTED 4001735c: 80 a0 40 15 cmp %g1, %l5 <== NOT EXECUTED 40017360: 12 80 00 11 bne 400173a4 <== NOT EXECUTED 40017364: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 40017368: c4 07 bf a0 ld [ %fp + -96 ], %g2 <== NOT EXECUTED 4001736c: 80 a0 80 1c cmp %g2, %i4 <== NOT EXECUTED 40017370: 12 80 00 0e bne 400173a8 <== NOT EXECUTED 40017374: 82 04 e4 04 add %l3, 0x404, %g1 <== NOT EXECUTED { *--bpt = '/'; 40017378: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED 4001737c: 92 05 bf ff add %l6, -1, %o1 <== NOT EXECUTED 40017380: c2 2d bf ff stb %g1, [ %l6 + -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); 40017384: 94 26 40 09 sub %i1, %o1, %o2 <== NOT EXECUTED 40017388: 40 00 35 6d call 4002493c <== NOT EXECUTED 4001738c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 40017390: 7f ff bb 3b call 4000607c <== NOT EXECUTED 40017394: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40017398: 81 c7 e0 08 ret <== NOT EXECUTED 4001739c: 81 e8 00 00 restore <== 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) 400173a0: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 400173a4: 82 04 e4 04 add %l3, 0x404, %g1 <== NOT EXECUTED 400173a8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400173ac: 0a 80 00 0c bcs 400173dc <== NOT EXECUTED 400173b0: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED { if (!(up = (char *) realloc (up, upsize *= 2))) 400173b4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400173b8: b5 2e a0 01 sll %i2, 1, %i2 <== NOT EXECUTED 400173bc: 7f ff bb a3 call 40006248 <== NOT EXECUTED 400173c0: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 400173c4: a4 92 20 00 orcc %o0, 0, %l2 <== NOT EXECUTED 400173c8: 02 80 00 99 be 4001762c <== NOT EXECUTED 400173cc: 82 04 80 1a add %l2, %i2, %g1 <== NOT EXECUTED { goto err; } bup = up; eup = up + upsize; 400173d0: a6 10 00 12 mov %l2, %l3 <== NOT EXECUTED 400173d4: c2 27 bf a4 st %g1, [ %fp + -92 ] <== NOT EXECUTED } *bup++ = '.'; 400173d8: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; 400173dc: c0 2c e0 02 clrb [ %l3 + 2 ] <== NOT EXECUTED } bup = up; eup = up + upsize; } *bup++ = '.'; *bup++ = '.'; 400173e0: c2 2c e0 01 stb %g1, [ %l3 + 1 ] <== NOT EXECUTED goto err; } bup = up; eup = up + upsize; } *bup++ = '.'; 400173e4: c2 2c c0 00 stb %g1, [ %l3 ] <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; /* Open and stat parent directory. */ if (!(dir = _opendir (up)) || _fstat (__dirfd (dir), &s)) 400173e8: 40 00 03 5c call 40018158 <== NOT EXECUTED 400173ec: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400173f0: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 400173f4: 02 80 00 8f be 40017630 <== NOT EXECUTED 400173f8: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 400173fc: d0 07 40 00 ld [ %i5 ], %o0 <== NOT EXECUTED 40017400: 40 00 26 5f call 40020d7c <== NOT EXECUTED 40017404: 92 07 bf a8 add %fp, -88, %o1 <== NOT EXECUTED 40017408: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001740c: 12 80 00 92 bne 40017654 <== NOT EXECUTED 40017410: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED goto err; /* Add trailing slash for next directory. */ *bup++ = '/'; 40017414: c2 2c e0 02 stb %g1, [ %l3 + 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) 40017418: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED 4001741c: 80 a0 40 14 cmp %g1, %l4 <== NOT EXECUTED 40017420: 12 80 00 06 bne 40017438 <== NOT EXECUTED 40017424: a6 04 e0 03 add %l3, 3, %l3 <== NOT EXECUTED 40017428: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 4001742c: 80 a0 40 15 cmp %g1, %l5 <== NOT EXECUTED 40017430: 02 80 00 04 be 40017440 <== NOT EXECUTED 40017434: 01 00 00 00 nop <== NOT EXECUTED 40017438: 10 80 00 0c b 40017468 <== NOT EXECUTED 4001743c: ae 10 20 00 clr %l7 ! 0 <== NOT EXECUTED { for (;;) { if (!(dp = _readdir (dir))) 40017440: 40 00 03 fc call 40018430 <== NOT EXECUTED 40017444: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED 40017448: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 4001744c: 02 80 00 6b be 400175f8 <== NOT EXECUTED 40017450: ae 10 20 00 clr %l7 <== NOT EXECUTED goto notfound; if (dp->d_ino == ino) 40017454: c2 04 40 00 ld [ %l1 ], %g1 <== NOT EXECUTED 40017458: 80 a0 40 1c cmp %g1, %i4 <== NOT EXECUTED 4001745c: 02 80 00 36 be 40017534 <== NOT EXECUTED 40017460: a0 04 60 0c add %l1, 0xc, %l0 <== NOT EXECUTED 40017464: 30 bf ff f7 b,a 40017440 <== NOT EXECUTED } } else for (;;) { if (!(dp = _readdir (dir))) 40017468: 40 00 03 f2 call 40018430 <== NOT EXECUTED 4001746c: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED 40017470: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 40017474: 02 80 00 61 be 400175f8 <== NOT EXECUTED 40017478: 01 00 00 00 nop <== NOT EXECUTED goto notfound; if (ISDOT (dp)) 4001747c: c2 4c 60 0c ldsb [ %l1 + 0xc ], %g1 <== NOT EXECUTED 40017480: 80 a0 60 2e cmp %g1, 0x2e <== NOT EXECUTED 40017484: 12 80 00 0d bne 400174b8 <== NOT EXECUTED 40017488: a0 04 60 0c add %l1, 0xc, %l0 <== NOT EXECUTED 4001748c: c2 4c 60 0d ldsb [ %l1 + 0xd ], %g1 <== NOT EXECUTED 40017490: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017494: 02 bf ff f5 be 40017468 <== NOT EXECUTED 40017498: 05 00 3f ff sethi %hi(0xfffc00), %g2 <== NOT EXECUTED 4001749c: c2 04 60 0c ld [ %l1 + 0xc ], %g1 <== NOT EXECUTED 400174a0: 07 00 0b 80 sethi %hi(0x2e0000), %g3 <== NOT EXECUTED 400174a4: 84 10 a3 00 or %g2, 0x300, %g2 <== NOT EXECUTED 400174a8: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 400174ac: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400174b0: 02 bf ff ee be 40017468 <== NOT EXECUTED 400174b4: 01 00 00 00 nop <== NOT EXECUTED continue; bcopy (dp->d_name, bup, strlen (dp->d_name) + 1); 400174b8: 40 00 43 37 call 40028194 <== NOT EXECUTED 400174bc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400174c0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400174c4: 94 02 20 01 add %o0, 1, %o2 <== NOT EXECUTED 400174c8: 40 00 35 1d call 4002493c <== NOT EXECUTED 400174cc: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED /* Save the first error for later. */ if (stat (up, &s)) 400174d0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400174d4: 7f ff bf 5e call 4000724c <== NOT EXECUTED 400174d8: 92 07 bf a8 add %fp, -88, %o1 <== NOT EXECUTED 400174dc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400174e0: 02 80 00 0c be 40017510 <== NOT EXECUTED 400174e4: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED { if (!save_errno) 400174e8: 80 a5 e0 00 cmp %l7, 0 <== NOT EXECUTED 400174ec: 12 80 00 05 bne 40017500 <== NOT EXECUTED 400174f0: 01 00 00 00 nop <== NOT EXECUTED save_errno = errno; 400174f4: 40 00 2e 40 call 40022df4 <__errno> <== NOT EXECUTED 400174f8: 01 00 00 00 nop <== NOT EXECUTED 400174fc: ee 02 00 00 ld [ %o0 ], %l7 <== NOT EXECUTED errno = 0; 40017500: 40 00 2e 3d call 40022df4 <__errno> <== NOT EXECUTED 40017504: 01 00 00 00 nop <== NOT EXECUTED 40017508: 10 bf ff d8 b 40017468 <== NOT EXECUTED 4001750c: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED continue; } if (s.st_dev == dev && s.st_ino == ino) 40017510: 80 a0 40 14 cmp %g1, %l4 <== NOT EXECUTED 40017514: 12 bf ff d5 bne 40017468 <== NOT EXECUTED 40017518: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 4001751c: 80 a0 40 15 cmp %g1, %l5 <== NOT EXECUTED 40017520: 12 bf ff d2 bne 40017468 <== NOT EXECUTED 40017524: c2 07 bf b0 ld [ %fp + -80 ], %g1 <== NOT EXECUTED 40017528: 80 a0 40 1c cmp %g1, %i4 <== NOT EXECUTED 4001752c: 12 bf ff cf bne 40017468 <== NOT EXECUTED 40017530: a0 04 60 0c add %l1, 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)) 40017534: 40 00 43 18 call 40028194 <== NOT EXECUTED 40017538: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001753c: c2 07 bf 94 ld [ %fp + -108 ], %g1 <== NOT EXECUTED 40017540: a2 25 80 18 sub %l6, %i0, %l1 <== NOT EXECUTED 40017544: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40017548: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED 4001754c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40017550: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40017554: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 40017558: 18 80 00 17 bgu 400175b4 <== NOT EXECUTED 4001755c: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED { size_t len, off; if (!ptsize) 40017560: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 40017564: 32 80 00 07 bne,a 40017580 <== NOT EXECUTED 40017568: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED { errno = ERANGE; 4001756c: 40 00 2e 22 call 40022df4 <__errno> <== NOT EXECUTED 40017570: 01 00 00 00 nop <== NOT EXECUTED 40017574: 82 10 20 22 mov 0x22, %g1 ! 22 <== NOT EXECUTED 40017578: 10 80 00 37 b 40017654 <== NOT EXECUTED 4001757c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED goto err; } off = bpt - pt; len = ept - bpt; if (!(pt = (char *) realloc (pt, ptsize *= 2))) 40017580: b7 2e e0 01 sll %i3, 1, %i3 <== NOT EXECUTED 40017584: 7f ff bb 31 call 40006248 <== NOT EXECUTED 40017588: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 4001758c: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40017590: 02 80 00 31 be 40017654 <== NOT EXECUTED 40017594: 82 26 40 16 sub %i1, %l6, %g1 <== NOT EXECUTED { goto err; } bpt = pt + off; ept = pt + ptsize; (void) bcopy (bpt, ept - len, len); 40017598: 92 06 00 11 add %i0, %l1, %o1 <== NOT EXECUTED if (!(pt = (char *) realloc (pt, ptsize *= 2))) { goto err; } bpt = pt + off; ept = pt + ptsize; 4001759c: b2 06 00 1b add %i0, %i3, %i1 <== NOT EXECUTED (void) bcopy (bpt, ept - len, len); 400175a0: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 400175a4: ac 26 40 01 sub %i1, %g1, %l6 <== NOT EXECUTED 400175a8: 40 00 34 e5 call 4002493c <== NOT EXECUTED 400175ac: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED bpt = ept - len; } if (!first) 400175b0: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED 400175b4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400175b8: 12 80 00 04 bne 400175c8 <== NOT EXECUTED 400175bc: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED *--bpt = '/'; 400175c0: ac 05 bf ff add %l6, -1, %l6 <== NOT EXECUTED 400175c4: c2 2d 80 00 stb %g1, [ %l6 ] <== NOT EXECUTED bpt -= strlen (dp->d_name); 400175c8: 40 00 42 f3 call 40028194 <== NOT EXECUTED 400175cc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); 400175d0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400175d4: 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); 400175d8: ac 25 80 08 sub %l6, %o0, %l6 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); (void) _closedir (dir); dir = 0; /* Truncate any file name. */ *bup = '\0'; 400175dc: 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)); 400175e0: 40 00 34 d7 call 4002493c <== NOT EXECUTED 400175e4: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED (void) _closedir (dir); 400175e8: 7f ff fe 46 call 40016f00 <== NOT EXECUTED 400175ec: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED dir = 0; /* Truncate any file name. */ *bup = '\0'; 400175f0: 10 bf ff 50 b 40017330 <== NOT EXECUTED 400175f4: c0 2c c0 00 clrb [ %l3 ] <== 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) 400175f8: 40 00 2d ff call 40022df4 <__errno> <== NOT EXECUTED 400175fc: 01 00 00 00 nop <== NOT EXECUTED 40017600: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40017604: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017608: 12 80 00 13 bne 40017654 <== NOT EXECUTED 4001760c: 01 00 00 00 nop <== NOT EXECUTED errno = save_errno ? save_errno : ENOENT; 40017610: 40 00 2d f9 call 40022df4 <__errno> <== NOT EXECUTED 40017614: 01 00 00 00 nop <== NOT EXECUTED 40017618: 80 a5 e0 00 cmp %l7, 0 <== NOT EXECUTED 4001761c: 22 80 00 02 be,a 40017624 <== NOT EXECUTED 40017620: ae 10 20 02 mov 2, %l7 <== NOT EXECUTED 40017624: 10 80 00 0c b 40017654 <== NOT EXECUTED 40017628: ee 22 00 00 st %l7, [ %o0 ] <== NOT EXECUTED /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); if (ptsize) 4001762c: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 40017630: 02 80 00 05 be 40017644 <== NOT EXECUTED 40017634: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED free (pt); 40017638: 7f ff ba 91 call 4000607c <== NOT EXECUTED 4001763c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 40017640: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40017644: 7f ff ba 8e call 4000607c <== NOT EXECUTED 40017648: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001764c: 81 c7 e0 08 ret <== NOT EXECUTED 40017650: 81 e8 00 00 restore <== NOT EXECUTED errno = save_errno ? save_errno : ENOENT; /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); 40017654: 7f ff fe 2b call 40016f00 <== NOT EXECUTED 40017658: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED if (ptsize) 4001765c: 10 bf ff f5 b 40017630 <== NOT EXECUTED 40017660: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 40020e68 : int getdents( int dd_fd, char *dd_buf, int dd_len ) { 40020e68: 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 ); 40020e6c: 03 10 00 df sethi %hi(0x40037c00), %g1 <== NOT EXECUTED 40020e70: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 ! 40037d4c <== NOT EXECUTED 40020e74: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 40020e78: 1a 80 00 0a bcc 40020ea0 <== NOT EXECUTED 40020e7c: a0 10 20 00 clr %l0 <== NOT EXECUTED 40020e80: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 40020e84: c6 00 61 84 ld [ %g1 + 0x184 ], %g3 ! 4003a584 <== NOT EXECUTED 40020e88: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40020e8c: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40020e90: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40020e94: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 40020e98: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40020e9c: a0 00 40 03 add %g1, %g3, %l0 <== NOT EXECUTED /* * Make sure we are working on a directory */ loc = iop->pathinfo; 40020ea0: b0 07 bf e8 add %fp, -24, %i0 <== NOT EXECUTED 40020ea4: 92 04 20 10 add %l0, 0x10, %o1 <== NOT EXECUTED 40020ea8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40020eac: 40 00 0e 77 call 40024888 <== NOT EXECUTED 40020eb0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 40020eb4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40020eb8: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 40020ebc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40020ec0: 02 80 00 11 be 40020f04 <== NOT EXECUTED 40020ec4: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) 40020ec8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40020ecc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40020ed0: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40020ed4: 22 80 00 08 be,a 40020ef4 <== NOT EXECUTED 40020ed8: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 40020edc: 40 00 07 c6 call 40022df4 <__errno> <== NOT EXECUTED 40020ee0: 01 00 00 00 nop <== NOT EXECUTED 40020ee4: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 40020ee8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40020eec: 10 80 00 0d b 40020f20 <== NOT EXECUTED 40020ef0: 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 ) 40020ef4: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 40020ef8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40020efc: 32 80 00 06 bne,a 40020f14 <== NOT EXECUTED 40020f00: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40020f04: 40 00 07 bc call 40022df4 <__errno> <== NOT EXECUTED 40020f08: 01 00 00 00 nop <== NOT EXECUTED 40020f0c: 10 bf ff f7 b 40020ee8 <== NOT EXECUTED 40020f10: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED return (*iop->handlers->read_h)( iop, dd_buf, dd_len ); 40020f14: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40020f18: 9f c0 40 00 call %g1 <== NOT EXECUTED 40020f1c: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED } 40020f20: 81 c7 e0 08 ret <== NOT EXECUTED 40020f24: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40017664 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getegid( void ) { 40017664: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40017668: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 40038560 <== NOT EXECUTED return _POSIX_types_Egid; } 4001766c: 81 c3 e0 08 retl <== NOT EXECUTED 40017670: d0 10 60 2e lduh [ %g1 + 0x2e ], %o0 <== NOT EXECUTED 40017674 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t geteuid( void ) { 40017674: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40017678: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 40038560 <== NOT EXECUTED return _POSIX_types_Euid; } 4001767c: 81 c3 e0 08 retl <== NOT EXECUTED 40017680: d0 10 60 2c lduh [ %g1 + 0x2c ], %o0 <== NOT EXECUTED 40017684 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getgid( void ) { 40017684: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40017688: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 40038560 <== NOT EXECUTED return _POSIX_types_Gid; } 4001768c: 81 c3 e0 08 retl <== NOT EXECUTED 40017690: d0 10 60 2a lduh [ %g1 + 0x2a ], %o0 <== NOT EXECUTED 40017cec : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 40017cec: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 40017cf0: 7f ff ff b7 call 40017bcc <== NOT EXECUTED 40017cf4: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/group", "r")) == NULL) { 40017cf8: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 40017cfc: 13 10 00 de sethi %hi(0x40037800), %o1 <== NOT EXECUTED 40017d00: 90 12 22 10 or %o0, 0x210, %o0 <== NOT EXECUTED 40017d04: 40 00 2e 81 call 40023708 <== NOT EXECUTED 40017d08: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40017d0c: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 40017d10: 12 80 00 08 bne 40017d30 <== NOT EXECUTED 40017d14: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED errno = EINVAL; 40017d18: 40 00 2c 37 call 40022df4 <__errno> <== NOT EXECUTED 40017d1c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40017d20: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40017d24: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017d28: 81 c7 e0 08 ret <== NOT EXECUTED 40017d2c: 81 e8 00 00 restore <== NOT EXECUTED return -1; } for(;;) { if (!scangr(fp, grp, buffer, bufsize)) { 40017d30: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017d34: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 40017d38: 7f ff fe ea call 400178e0 <== NOT EXECUTED 40017d3c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017d40: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017d44: 12 80 00 0a bne 40017d6c <== NOT EXECUTED 40017d48: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; 40017d4c: 40 00 2c 2a call 40022df4 <__errno> <== NOT EXECUTED 40017d50: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40017d54: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40017d58: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 40017d5c: 40 00 2c 6d call 40022f10 <== NOT EXECUTED 40017d60: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017d64: 81 c7 e0 08 ret <== NOT EXECUTED 40017d68: 81 e8 00 00 restore <== NOT EXECUTED return -1; } if (name) { 40017d6c: 22 80 00 07 be,a 40017d88 <== NOT EXECUTED 40017d70: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED match = (strcmp(grp->gr_name, name) == 0); 40017d74: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED 40017d78: 40 00 3a e6 call 40026910 <== NOT EXECUTED 40017d7c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40017d80: 10 80 00 04 b 40017d90 <== NOT EXECUTED 40017d84: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED } else { match = (grp->gr_gid == gid); 40017d88: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 40017d8c: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40017d90: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 40017d94: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017d98: 02 bf ff e6 be 40017d30 <== NOT EXECUTED 40017d9c: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 40017da0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017da4: 40 00 2c 5b call 40022f10 <== NOT EXECUTED 40017da8: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = grp; 40017dac: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 40017db0: 81 c7 e0 08 ret <== NOT EXECUTED 40017db4: 81 e8 00 00 restore <== NOT EXECUTED 40017a20 : return NULL; return p; } struct group *getgrent() { 40017a20: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (group_fp == NULL) 40017a24: 03 10 00 e7 sethi %hi(0x40039c00), %g1 <== NOT EXECUTED 40017a28: d0 00 61 c4 ld [ %g1 + 0x1c4 ], %o0 ! 40039dc4 <== NOT EXECUTED 40017a2c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017a30: 02 80 00 0b be 40017a5c <== NOT EXECUTED 40017a34: 15 10 00 e7 sethi %hi(0x40039c00), %o2 <== NOT EXECUTED return NULL; if (!scangr(group_fp, &grent, grbuf, sizeof grbuf)) 40017a38: 21 10 00 e7 sethi %hi(0x40039c00), %l0 <== NOT EXECUTED 40017a3c: 92 14 22 90 or %l0, 0x290, %o1 ! 40039e90 <== NOT EXECUTED 40017a40: 94 12 a1 c8 or %o2, 0x1c8, %o2 <== NOT EXECUTED 40017a44: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40017a48: 7f ff ff a6 call 400178e0 <== NOT EXECUTED 40017a4c: b0 14 22 90 or %l0, 0x290, %i0 <== NOT EXECUTED 40017a50: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017a54: 12 80 00 03 bne 40017a60 <== NOT EXECUTED 40017a58: 01 00 00 00 nop <== NOT EXECUTED 40017a5c: b0 10 20 00 clr %i0 ! 0 <== NOT EXECUTED return NULL; return &grent; } 40017a60: 81 c7 e0 08 ret <== NOT EXECUTED 40017a64: 81 e8 00 00 restore <== NOT EXECUTED 40017df0 : } struct group *getgrgid( gid_t gid ) { 40017df0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrgid_r(gid, &grent, grbuf, sizeof grbuf, &p)) 40017df4: 13 10 00 e7 sethi %hi(0x40039c00), %o1 <== NOT EXECUTED 40017df8: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 40017dfc: 92 12 62 90 or %o1, 0x290, %o1 <== NOT EXECUTED 40017e00: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 40017e04: 15 10 00 e7 sethi %hi(0x40039c00), %o2 <== NOT EXECUTED 40017e08: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40017e0c: 94 12 a1 c8 or %o2, 0x1c8, %o2 <== NOT EXECUTED 40017e10: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 40017e14: 7f ff ff e9 call 40017db8 <== NOT EXECUTED 40017e18: b0 10 20 00 clr %i0 <== NOT EXECUTED 40017e1c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017e20: 22 80 00 02 be,a 40017e28 <== NOT EXECUTED 40017e24: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 40017e28: 81 c7 e0 08 ret <== NOT EXECUTED 40017e2c: 81 e8 00 00 restore <== NOT EXECUTED 40017db8 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 40017db8: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 40017dbc: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 40017dc0: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 40017dc4: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 40017dc8: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 40017dcc: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 40017dd0: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 40017dd4: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 40017dd8: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 40017ddc: 90 10 20 00 clr %o0 <== NOT EXECUTED 40017de0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40017de4: 7f ff ff c2 call 40017cec <== NOT EXECUTED 40017de8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40017dec: 01 00 00 00 nop 40017e5c : } struct group *getgrnam( const char *name ) { 40017e5c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrnam_r(name, &grent, grbuf, sizeof grbuf, &p)) 40017e60: 13 10 00 e7 sethi %hi(0x40039c00), %o1 <== NOT EXECUTED 40017e64: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017e68: 92 12 62 90 or %o1, 0x290, %o1 <== NOT EXECUTED 40017e6c: 15 10 00 e7 sethi %hi(0x40039c00), %o2 <== NOT EXECUTED 40017e70: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40017e74: 94 12 a1 c8 or %o2, 0x1c8, %o2 <== NOT EXECUTED 40017e78: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 40017e7c: 7f ff ff ed call 40017e30 <== NOT EXECUTED 40017e80: b0 10 20 00 clr %i0 <== NOT EXECUTED 40017e84: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017e88: 22 80 00 02 be,a 40017e90 <== NOT EXECUTED 40017e8c: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 40017e90: 81 c7 e0 08 ret <== NOT EXECUTED 40017e94: 81 e8 00 00 restore <== NOT EXECUTED 40017e30 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 40017e30: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 40017e34: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 40017e38: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(name, 0, grp, buffer, bufsize, result); 40017e3c: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 40017e40: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 40017e44: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 40017e48: 92 10 20 00 clr %o1 <== NOT EXECUTED 40017e4c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40017e50: 7f ff ff a7 call 40017cec <== NOT EXECUTED 40017e54: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40017e58: 01 00 00 00 nop 400222e0 : */ pid_t getpid( void ) { return _Objects_Local_node; } 400222e0: 81 c3 e0 08 retl <== NOT EXECUTED 400222e4: 90 10 20 01 mov 1, %o0 ! 1 <== NOT EXECUTED 40017edc : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 40017edc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 40017ee0: 7f ff ff 3b call 40017bcc <== NOT EXECUTED 40017ee4: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/passwd", "r")) == NULL) { 40017ee8: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 40017eec: 13 10 00 de sethi %hi(0x40037800), %o1 <== NOT EXECUTED 40017ef0: 90 12 21 98 or %o0, 0x198, %o0 <== NOT EXECUTED 40017ef4: 40 00 2e 05 call 40023708 <== NOT EXECUTED 40017ef8: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40017efc: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 40017f00: 12 80 00 08 bne 40017f20 <== NOT EXECUTED 40017f04: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED errno = EINVAL; 40017f08: 40 00 2b bb call 40022df4 <__errno> <== NOT EXECUTED 40017f0c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40017f10: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40017f14: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017f18: 81 c7 e0 08 ret <== NOT EXECUTED 40017f1c: 81 e8 00 00 restore <== NOT EXECUTED return -1; } for(;;) { if (!scanpw(fp, pwd, buffer, bufsize)) { 40017f20: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017f24: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 40017f28: 7f ff fe d0 call 40017a68 <== NOT EXECUTED 40017f2c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017f30: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017f34: 12 80 00 0a bne 40017f5c <== NOT EXECUTED 40017f38: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; 40017f3c: 40 00 2b ae call 40022df4 <__errno> <== NOT EXECUTED 40017f40: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40017f44: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40017f48: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 40017f4c: 40 00 2b f1 call 40022f10 <== NOT EXECUTED 40017f50: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017f54: 81 c7 e0 08 ret <== NOT EXECUTED 40017f58: 81 e8 00 00 restore <== NOT EXECUTED return -1; } if (name) { 40017f5c: 22 80 00 07 be,a 40017f78 <== NOT EXECUTED 40017f60: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED match = (strcmp(pwd->pw_name, name) == 0); 40017f64: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED 40017f68: 40 00 3a 6a call 40026910 <== NOT EXECUTED 40017f6c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40017f70: 10 80 00 04 b 40017f80 <== NOT EXECUTED 40017f74: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED } else { match = (pwd->pw_uid == uid); 40017f78: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 40017f7c: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40017f80: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 40017f84: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017f88: 02 bf ff e6 be 40017f20 <== NOT EXECUTED 40017f8c: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 40017f90: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40017f94: 40 00 2b df call 40022f10 <== NOT EXECUTED 40017f98: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = pwd; 40017f9c: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 40017fa0: 81 c7 e0 08 ret <== NOT EXECUTED 40017fa4: 81 e8 00 00 restore <== NOT EXECUTED 40017b84 : return NULL; return p; } struct passwd *getpwent() { 40017b84: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (passwd_fp == NULL) 40017b88: 03 10 00 e7 sethi %hi(0x40039c00), %g1 <== NOT EXECUTED 40017b8c: d0 00 60 dc ld [ %g1 + 0xdc ], %o0 ! 40039cdc <== NOT EXECUTED 40017b90: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017b94: 02 80 00 0b be 40017bc0 <== NOT EXECUTED 40017b98: 15 10 00 e7 sethi %hi(0x40039c00), %o2 <== NOT EXECUTED return NULL; if (!scanpw(passwd_fp, &pwent, pwbuf, sizeof pwbuf)) 40017b9c: 21 10 00 e7 sethi %hi(0x40039c00), %l0 <== NOT EXECUTED 40017ba0: 92 14 21 a8 or %l0, 0x1a8, %o1 ! 40039da8 <== NOT EXECUTED 40017ba4: 94 12 a0 e0 or %o2, 0xe0, %o2 <== NOT EXECUTED 40017ba8: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40017bac: 7f ff ff af call 40017a68 <== NOT EXECUTED 40017bb0: b0 14 21 a8 or %l0, 0x1a8, %i0 <== NOT EXECUTED 40017bb4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017bb8: 12 80 00 03 bne 40017bc4 <== NOT EXECUTED 40017bbc: 01 00 00 00 nop <== NOT EXECUTED 40017bc0: b0 10 20 00 clr %i0 ! 0 <== NOT EXECUTED return NULL; return &pwent; } 40017bc4: 81 c7 e0 08 ret <== NOT EXECUTED 40017bc8: 81 e8 00 00 restore <== NOT EXECUTED 4001804c : } struct passwd *getpwnam( const char *name ) { 4001804c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwnam_r(name, &pwent, pwbuf, sizeof pwbuf, &p)) 40018050: 13 10 00 e7 sethi %hi(0x40039c00), %o1 <== NOT EXECUTED 40018054: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018058: 92 12 61 a8 or %o1, 0x1a8, %o1 <== NOT EXECUTED 4001805c: 15 10 00 e7 sethi %hi(0x40039c00), %o2 <== NOT EXECUTED 40018060: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40018064: 94 12 a0 e0 or %o2, 0xe0, %o2 <== NOT EXECUTED 40018068: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 4001806c: 7f ff ff ed call 40018020 <== NOT EXECUTED 40018070: b0 10 20 00 clr %i0 <== NOT EXECUTED 40018074: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018078: 22 80 00 02 be,a 40018080 <== NOT EXECUTED 4001807c: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 40018080: 81 c7 e0 08 ret <== NOT EXECUTED 40018084: 81 e8 00 00 restore <== NOT EXECUTED 40018020 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 40018020: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 40018024: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 40018028: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(name, 0, pwd, buffer, bufsize, result); 4001802c: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 40018030: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 40018034: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 40018038: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001803c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40018040: 7f ff ff a7 call 40017edc <== NOT EXECUTED 40018044: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40018048: 01 00 00 00 nop 40017fe0 : } struct passwd *getpwuid( uid_t uid ) { 40017fe0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwuid_r(uid, &pwent, pwbuf, sizeof pwbuf, &p)) 40017fe4: 13 10 00 e7 sethi %hi(0x40039c00), %o1 <== NOT EXECUTED 40017fe8: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 40017fec: 92 12 61 a8 or %o1, 0x1a8, %o1 <== NOT EXECUTED 40017ff0: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 40017ff4: 15 10 00 e7 sethi %hi(0x40039c00), %o2 <== NOT EXECUTED 40017ff8: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40017ffc: 94 12 a0 e0 or %o2, 0xe0, %o2 <== NOT EXECUTED 40018000: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 40018004: 7f ff ff e9 call 40017fa8 <== NOT EXECUTED 40018008: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001800c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018010: 22 80 00 02 be,a 40018018 <== NOT EXECUTED 40018014: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 40018018: 81 c7 e0 08 ret <== NOT EXECUTED 4001801c: 81 e8 00 00 restore <== NOT EXECUTED 40017fa8 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 40017fa8: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 40017fac: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 40017fb0: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 40017fb4: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 40017fb8: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 40017fbc: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 40017fc0: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 40017fc4: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 40017fc8: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 40017fcc: 90 10 20 00 clr %o0 <== NOT EXECUTED 40017fd0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40017fd4: 7f ff ff c2 call 40017edc <== NOT EXECUTED 40017fd8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40017fdc: 01 00 00 00 nop 4000c52c : int gettimeofday( struct timeval *tp, void * __tz ) { 4000c52c: 9d e3 bf 90 save %sp, -112, %sp /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) { 4000c530: 80 a6 20 00 cmp %i0, 0 4000c534: 12 80 00 08 bne 4000c554 4000c538: 01 00 00 00 nop errno = EFAULT; 4000c53c: 40 00 07 bb call 4000e428 <__errno> <== NOT EXECUTED 4000c540: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 4000c544: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 4000c548: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c54c: 81 c7 e0 08 ret <== NOT EXECUTED 4000c550: 81 e8 00 00 restore <== NOT EXECUTED ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 4000c554: 7f ff d6 57 call 40001eb0 4000c558: 01 00 00 00 nop 4000c55c: a0 10 00 08 mov %o0, %l0 _TOD_Get( &now ); 4000c560: 7f ff ed 1b call 400079cc <_TOD_Get> 4000c564: 90 07 bf f0 add %fp, -16, %o0 _ISR_Enable(level); 4000c568: 7f ff d6 56 call 40001ec0 4000c56c: 90 10 00 10 mov %l0, %o0 time->tv_sec = now.tv_sec; time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 4000c570: d0 07 bf f4 ld [ %fp + -12 ], %o0 _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 4000c574: c2 07 bf f0 ld [ %fp + -16 ], %g1 time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 4000c578: 92 10 23 e8 mov 0x3e8, %o1 4000c57c: 40 00 23 d4 call 400154cc <.udiv> 4000c580: c2 26 00 00 st %g1, [ %i0 ] 4000c584: 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; } 4000c588: 81 c7 e0 08 ret 4000c58c: 91 e8 20 00 restore %g0, 0, %o0 40018088 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t getuid( void ) { 40018088: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 4001808c: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 40038560 <== NOT EXECUTED return _POSIX_types_Uid; } 40018090: 81 c3 e0 08 retl <== NOT EXECUTED 40018094: d0 10 60 28 lduh [ %g1 + 0x28 ], %o0 <== NOT EXECUTED 40020750 : * and associated memory. At present the imfs_dir_close simply * returns a successful completion status. */ return 0; } 40020750: 81 c3 e0 08 retl <== NOT EXECUTED 40020754: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED 40020758 : Chain_Node *the_node; Chain_Control *the_chain; IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) loc->node_access; 40020758: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED buf->st_dev = 0ll; 4002075c: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; 40020760: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 40020764: 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; 40020768: c4 22 60 08 st %g2, [ %o1 + 8 ] <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 4002076c: 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; 40020770: c0 22 60 3c clr [ %o1 + 0x3c ] <== NOT EXECUTED buf->st_blocks = 0; 40020774: c0 22 60 40 clr [ %o1 + 0x40 ] <== 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; 40020778: 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; buf->st_atime = the_jnode->stat_atime; 4002077c: 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; 40020780: 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; 40020784: 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; 40020788: 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; 4002078c: 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; 40020790: 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; 40020794: 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; 40020798: 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; 4002079c: 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; 400207a0: 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; 400207a4: 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; 400207a8: 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; 400207ac: c0 22 60 18 clr [ %o1 + 0x18 ] <== NOT EXECUTED 400207b0: 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; 400207b4: 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 ; 400207b8: c4 00 60 4c ld [ %g1 + 0x4c ], %g2 <== NOT EXECUTED !_Chain_Is_tail( the_chain, the_node ) ; 400207bc: 10 80 00 05 b 400207d0 <== NOT EXECUTED 400207c0: 86 00 60 50 add %g1, 0x50, %g3 <== NOT EXECUTED the_node = the_node->next ) { 400207c4: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED buf->st_size = buf->st_size + sizeof( struct dirent ); 400207c8: 82 00 61 0c add %g1, 0x10c, %g1 <== NOT EXECUTED 400207cc: c2 22 60 20 st %g1, [ %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 ; !_Chain_Is_tail( the_chain, the_node ) ; 400207d0: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 400207d4: 32 bf ff fc bne,a 400207c4 <== NOT EXECUTED 400207d8: c2 02 60 20 ld [ %o1 + 0x20 ], %g1 <== NOT EXECUTED buf->st_size = buf->st_size + sizeof( struct dirent ); } return 0; } 400207dc: 81 c3 e0 08 retl <== NOT EXECUTED 400207e0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400207e4 : off_t imfs_dir_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 400207e4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch( whence ) { 400207e8: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED 400207ec: 18 80 00 0e bgu 40020824 <== NOT EXECUTED 400207f0: b4 10 00 18 mov %i0, %i2 <== NOT EXECUTED case SEEK_SET: /* absolute move from the start of the file */ case SEEK_CUR: /* relative move */ iop->offset = (iop->offset/sizeof(struct dirent)) * 400207f4: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED 400207f8: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 400207fc: 40 00 45 fc call 40031fec <.udiv> <== NOT EXECUTED 40020800: b0 10 20 00 clr %i0 <== NOT EXECUTED 40020804: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 40020808: 85 2a 20 06 sll %o0, 6, %g2 <== NOT EXECUTED 4002080c: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40020810: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 40020814: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40020818: c2 26 a0 08 st %g1, [ %i2 + 8 ] <== NOT EXECUTED 4002081c: 81 c7 e0 08 ret <== NOT EXECUTED 40020820: 81 e8 00 00 restore <== 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 ); 40020824: 40 00 09 74 call 40022df4 <__errno> <== NOT EXECUTED 40020828: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4002082c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40020830: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED break; } return 0; } 40020834: 81 c7 e0 08 ret <== NOT EXECUTED 40020838: 81 e8 00 00 restore <== NOT EXECUTED 40020728 : IMFS_jnode_t *the_jnode; /* Is the node a directory ? */ the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) 40020728: c2 02 20 2c ld [ %o0 + 0x2c ], %g1 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4002072c: 84 10 00 08 mov %o0, %g2 <== 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 ) 40020730: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 <== NOT EXECUTED 40020734: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40020738: 12 80 00 04 bne 40020748 <== NOT EXECUTED 4002073c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED return -1; /* It wasn't a directory --> return error */ iop->offset = 0; 40020740: c0 20 a0 08 clr [ %g2 + 8 ] <== NOT EXECUTED 40020744: 90 10 20 00 clr %o0 <== NOT EXECUTED return 0; } 40020748: 81 c3 e0 08 retl <== NOT EXECUTED 4002074c: 01 00 00 00 nop 4002083c : ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4002083c: 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; 40020840: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 <== NOT EXECUTED ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 40020844: 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)); 40020848: 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; 4002084c: a8 00 60 50 add %g1, 0x50, %l4 <== 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 ) ) 40020850: 80 a4 40 14 cmp %l1, %l4 <== NOT EXECUTED 40020854: 02 80 00 2c be 40020904 <== NOT EXECUTED 40020858: a4 10 20 00 clr %l2 <== NOT EXECUTED /* Move to the first of the desired directory entries */ the_node = the_chain->first; bytes_transferred = 0; first_entry = iop->offset; 4002085c: e6 06 20 08 ld [ %i0 + 8 ], %l3 <== 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); 40020860: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 40020864: 40 00 45 e2 call 40031fec <.udiv> <== NOT EXECUTED 40020868: 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 ); 4002086c: ae 07 be ec add %fp, -276, %l7 <== NOT EXECUTED bytes_transferred = 0; first_entry = iop->offset; /* 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); 40020870: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 40020874: 85 2a 20 06 sll %o0, 6, %g2 <== 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 ); 40020878: ac 07 be f8 add %fp, -264, %l6 <== NOT EXECUTED bytes_transferred = 0; first_entry = iop->offset; /* 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); 4002087c: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40020880: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 40020884: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40020888: 10 80 00 1c b 400208f8 <== NOT EXECUTED 4002088c: aa 00 40 13 add %g1, %l3, %l5 <== NOT EXECUTED for ( current_entry = 0; current_entry < last_entry; current_entry = current_entry + sizeof(struct dirent) ){ if ( Chain_Is_tail( the_chain, the_node ) ){ 40020890: 02 80 00 1d be 40020904 <== NOT EXECUTED 40020894: 80 a6 80 13 cmp %i2, %l3 <== NOT EXECUTED /* entry in the read */ return bytes_transferred; /* Indicate that there are no more */ /* entries to return */ } if( current_entry >= first_entry ) { 40020898: 26 80 00 17 bl,a 400208f4 <== NOT EXECUTED 4002089c: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; 400208a0: 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; 400208a4: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 <== NOT EXECUTED tmp_dirent.d_namlen = strlen( the_jnode->name ); 400208a8: 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 ); the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; 400208ac: c2 27 be ec st %g1, [ %fp + -276 ] <== 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 ); 400208b0: 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 ); 400208b4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400208b8: 40 00 1e 37 call 40028194 <== NOT EXECUTED 400208bc: c2 37 be f4 sth %g1, [ %fp + -268 ] <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 400208c0: 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 ); 400208c4: d0 37 be f6 sth %o0, [ %fp + -266 ] <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 400208c8: 40 00 18 42 call 400269d0 <== NOT EXECUTED 400208cc: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED memcpy( 400208d0: 90 06 40 12 add %i1, %l2, %o0 <== NOT EXECUTED 400208d4: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 400208d8: 40 00 0f ec call 40024888 <== NOT EXECUTED 400208dc: 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); 400208e0: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); 400208e4: a4 04 a1 0c add %l2, 0x10c, %l2 <== NOT EXECUTED memcpy( buffer + bytes_transferred, (void *)&tmp_dirent, sizeof( struct dirent ) ); iop->offset = iop->offset + sizeof(struct dirent); 400208e8: 82 00 61 0c add %g1, 0x10c, %g1 <== NOT EXECUTED 400208ec: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); } the_node = the_node->next; 400208f0: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED 400208f4: b4 06 a1 0c add %i2, 0x10c, %i2 <== 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; 400208f8: 80 a6 80 15 cmp %i2, %l5 <== NOT EXECUTED 400208fc: 06 bf ff e5 bl 40020890 <== NOT EXECUTED 40020900: 80 a4 40 14 cmp %l1, %l4 <== NOT EXECUTED the_node = the_node->next; } /* Success */ return bytes_transferred; } 40020904: 81 c7 e0 08 ret <== NOT EXECUTED 40020908: 91 e8 00 12 restore %g0, %l2, %o0 <== NOT EXECUTED 4002090c : */ int imfs_dir_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4002090c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 40020910: 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 ) ) 40020914: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40020918: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 4002091c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40020920: 22 80 00 06 be,a 40020938 <== NOT EXECUTED 40020924: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTEMPTY ); 40020928: 40 00 09 33 call 40022df4 <__errno> <== NOT EXECUTED 4002092c: 01 00 00 00 nop <== NOT EXECUTED 40020930: 10 80 00 0d b 40020964 <== NOT EXECUTED 40020934: 82 10 20 5a mov 0x5a, %g1 ! 5a <== NOT EXECUTED /* * You cannot remove the file system root node. */ if ( pathloc->mt_entry->mt_fs_root.node_access == pathloc->node_access ) 40020938: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 4002093c: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 40020940: 02 80 00 06 be 40020958 <== NOT EXECUTED 40020944: 01 00 00 00 nop <== NOT EXECUTED /* * You cannot remove a mountpoint. */ if ( the_jnode->info.directory.mt_fs != NULL ) 40020948: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 4002094c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40020950: 22 80 00 08 be,a 40020970 <== NOT EXECUTED 40020954: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBUSY ); 40020958: 40 00 09 27 call 40022df4 <__errno> <== NOT EXECUTED 4002095c: 01 00 00 00 nop <== NOT EXECUTED 40020960: 82 10 20 10 mov 0x10, %g1 ! 10 <== NOT EXECUTED 40020964: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40020968: 81 c7 e0 08 ret <== NOT EXECUTED 4002096c: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED /* * Take the node out of the parent's chain that contains this node */ if ( the_jnode->Parent != NULL ) { 40020970: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40020974: 22 80 00 06 be,a 4002098c <== NOT EXECUTED 40020978: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4002097c: 7f ff e2 d8 call 400194dc <_Chain_Extract> <== NOT EXECUTED 40020980: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 40020984: 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--; 40020988: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4002098c: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 40020990: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 40020994: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 40020998: 7f ff 94 ab call 40005c44 <== NOT EXECUTED 4002099c: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 400209a0: 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) ) { 400209a4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400209a8: 7f ff 95 11 call 40005dec <== NOT EXECUTED 400209ac: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 400209b0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400209b4: 12 80 00 11 bne 400209f8 <== NOT EXECUTED 400209b8: 01 00 00 00 nop <== NOT EXECUTED 400209bc: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 400209c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400209c4: 12 80 00 0d bne 400209f8 <== NOT EXECUTED 400209c8: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 400209cc: c6 00 61 60 ld [ %g1 + 0x160 ], %g3 ! 40038560 <== NOT EXECUTED 400209d0: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 400209d4: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 400209d8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400209dc: 22 80 00 02 be,a 400209e4 <== NOT EXECUTED 400209e0: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ free( the_jnode ); 400209e4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400209e8: 7f ff 95 a5 call 4000607c <== NOT EXECUTED 400209ec: b0 10 20 00 clr %i0 <== NOT EXECUTED 400209f0: 81 c7 e0 08 ret <== NOT EXECUTED 400209f4: 81 e8 00 00 restore <== NOT EXECUTED } return 0; } 400209f8: 81 c7 e0 08 ret <== NOT EXECUTED 400209fc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40017bcc : /* * Initialize useable but dummy databases */ void init_etc_passwd_group(void) { 40017bcc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; static char etc_passwd_initted = 0; if (etc_passwd_initted) 40017bd0: 05 10 00 e7 sethi %hi(0x40039c00), %g2 <== NOT EXECUTED 40017bd4: c2 48 a0 d8 ldsb [ %g2 + 0xd8 ], %g1 ! 40039cd8 <== NOT EXECUTED 40017bd8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017bdc: 12 80 00 31 bne 40017ca0 <== NOT EXECUTED 40017be0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED return; etc_passwd_initted = 1; mkdir("/etc", 0777); 40017be4: 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; 40017be8: c2 28 a0 d8 stb %g1, [ %g2 + 0xd8 ] <== NOT EXECUTED mkdir("/etc", 0777); 40017bec: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 40017bf0: 40 00 01 2f call 400180ac <== NOT EXECUTED 40017bf4: 90 12 21 90 or %o0, 0x190, %o0 ! 40035590 <_CPU_Trap_slot_template+0xe70> <== NOT EXECUTED /* * Initialize /etc/passwd */ if ((fp = fopen("/etc/passwd", "r")) != NULL) { 40017bf8: 31 10 00 d5 sethi %hi(0x40035400), %i0 <== NOT EXECUTED 40017bfc: 13 10 00 de sethi %hi(0x40037800), %o1 <== NOT EXECUTED 40017c00: 90 16 21 98 or %i0, 0x198, %o0 <== NOT EXECUTED 40017c04: 40 00 2e c1 call 40023708 <== NOT EXECUTED 40017c08: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40017c0c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017c10: 12 80 00 0d bne 40017c44 <== NOT EXECUTED 40017c14: 01 00 00 00 nop <== NOT EXECUTED fclose(fp); } else if ((fp = fopen("/etc/passwd", "w")) != NULL) { 40017c18: 90 16 21 98 or %i0, 0x198, %o0 <== NOT EXECUTED 40017c1c: 13 10 00 d1 sethi %hi(0x40034400), %o1 <== NOT EXECUTED 40017c20: 40 00 2e ba call 40023708 <== NOT EXECUTED 40017c24: 92 12 63 30 or %o1, 0x330, %o1 ! 40034730 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 40017c28: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40017c2c: 02 80 00 08 be 40017c4c <== NOT EXECUTED 40017c30: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED fprintf(fp, "root:*:0:0:root::/:/bin/sh\n" 40017c34: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40017c38: 40 00 2f 09 call 4002385c <== NOT EXECUTED 40017c3c: 90 12 21 a8 or %o0, 0x1a8, %o0 <== NOT EXECUTED "rtems:*:1:1:RTEMS Application::/:/bin/sh\n" "tty:!:2:2:tty owner::/:/bin/false\n" ); fclose(fp); 40017c40: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017c44: 40 00 2c b3 call 40022f10 <== NOT EXECUTED 40017c48: 01 00 00 00 nop <== NOT EXECUTED } /* * Initialize /etc/group */ if ((fp = fopen("/etc/group", "r")) != NULL) { 40017c4c: 31 10 00 d5 sethi %hi(0x40035400), %i0 <== NOT EXECUTED 40017c50: 13 10 00 de sethi %hi(0x40037800), %o1 <== NOT EXECUTED 40017c54: 90 16 22 10 or %i0, 0x210, %o0 <== NOT EXECUTED 40017c58: 40 00 2e ac call 40023708 <== NOT EXECUTED 40017c5c: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40017c60: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017c64: 22 80 00 04 be,a 40017c74 <== NOT EXECUTED 40017c68: 90 16 22 10 or %i0, 0x210, %o0 <== NOT EXECUTED fclose(fp); 40017c6c: 10 80 00 0b b 40017c98 <== NOT EXECUTED 40017c70: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } else if ((fp = fopen("/etc/group", "w")) != NULL) { 40017c74: 13 10 00 d1 sethi %hi(0x40034400), %o1 <== NOT EXECUTED 40017c78: 40 00 2e a4 call 40023708 <== NOT EXECUTED 40017c7c: 92 12 63 30 or %o1, 0x330, %o1 ! 40034730 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 40017c80: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40017c84: 02 80 00 07 be 40017ca0 <== NOT EXECUTED 40017c88: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED fprintf( fp, "root:x:0:root\n" 40017c8c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40017c90: 40 00 2e f3 call 4002385c <== NOT EXECUTED 40017c94: 90 12 22 20 or %o0, 0x220, %o0 <== NOT EXECUTED "rtems:x:1:rtems\n" "tty:x:2:tty\n" ); fclose(fp); 40017c98: 40 00 2c 9e call 40022f10 <== NOT EXECUTED 40017c9c: 81 e8 00 00 restore <== NOT EXECUTED 40017ca0: 81 c7 e0 08 ret <== NOT EXECUTED 40017ca4: 81 e8 00 00 restore <== NOT EXECUTED 400165c0 : int ioctl( int fd, ioctl_command_t command, ... ) { 400165c0: 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 ); 400165c4: 03 10 00 98 sethi %hi(0x40026000), %g1 <== NOT EXECUTED 400165c8: c2 00 63 2c ld [ %g1 + 0x32c ], %g1 ! 4002632c <== NOT EXECUTED int ioctl( int fd, ioctl_command_t command, ... ) { 400165cc: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 400165d0: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 400165d4: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED 400165d8: 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 ); 400165dc: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 400165e0: 1a 80 00 14 bcc 40016630 <== NOT EXECUTED 400165e4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 400165e8: 03 10 00 a1 sethi %hi(0x40028400), %g1 <== NOT EXECUTED 400165ec: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 400284d8 <== NOT EXECUTED 400165f0: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 400165f4: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 400165f8: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400165fc: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 40016600: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40016604: 90 00 40 03 add %g1, %g3, %o0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40016608: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 4001660c: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 40016610: 02 80 00 08 be 40016630 <== NOT EXECUTED 40016614: 01 00 00 00 nop <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 40016618: 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 *); 4001661c: 82 07 a0 50 add %fp, 0x50, %g1 <== NOT EXECUTED 40016620: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 40016624: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40016628: 12 80 00 06 bne 40016640 <== NOT EXECUTED 4001662c: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 40016630: 40 00 01 65 call 40016bc4 <__errno> <== NOT EXECUTED 40016634: 01 00 00 00 nop <== NOT EXECUTED 40016638: 10 80 00 09 b 4001665c <== NOT EXECUTED 4001663c: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED if ( !iop->handlers->ioctl_h ) 40016640: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 40016644: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40016648: 12 80 00 08 bne 40016668 <== NOT EXECUTED 4001664c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40016650: 40 00 01 5d call 40016bc4 <__errno> <== NOT EXECUTED 40016654: 01 00 00 00 nop <== NOT EXECUTED 40016658: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4001665c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40016660: 10 80 00 04 b 40016670 <== NOT EXECUTED 40016664: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = (*iop->handlers->ioctl_h)( iop, command, buffer ); 40016668: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001666c: 01 00 00 00 nop <== NOT EXECUTED return rc; } 40016670: 81 c7 e0 08 ret <== NOT EXECUTED 40016674: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400049dc : /* * Process a single input character */ static int iproc (unsigned char c, struct rtems_termios_tty *tty) { 400049dc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->termios.c_iflag & ISTRIP) 400049e0: c4 06 60 30 ld [ %i1 + 0x30 ], %g2 <== NOT EXECUTED 400049e4: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 400049e8: 02 80 00 03 be 400049f4 <== NOT EXECUTED 400049ec: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED c &= 0x7f; 400049f0: a2 0e 20 7f and %i0, 0x7f, %l1 <== NOT EXECUTED if (tty->termios.c_iflag & IUCLC) 400049f4: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED 400049f8: 02 80 00 0b be 40004a24 <== NOT EXECUTED 400049fc: 82 0c 60 ff and %l1, 0xff, %g1 <== NOT EXECUTED c = tolower (c); 40004a00: 03 10 00 65 sethi %hi(0x40019400), %g1 <== NOT EXECUTED 40004a04: c2 00 60 d0 ld [ %g1 + 0xd0 ], %g1 ! 400194d0 <__ctype_ptr> <== NOT EXECUTED 40004a08: 90 0c 60 ff and %l1, 0xff, %o0 <== NOT EXECUTED 40004a0c: c2 08 40 08 ldub [ %g1 + %o0 ], %g1 <== NOT EXECUTED 40004a10: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40004a14: 32 80 00 02 bne,a 40004a1c <== NOT EXECUTED 40004a18: 90 02 20 20 add %o0, 0x20, %o0 <== NOT EXECUTED 40004a1c: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED if (c == '\r') { 40004a20: 82 0c 60 ff and %l1, 0xff, %g1 <== NOT EXECUTED 40004a24: 80 a0 60 0d cmp %g1, 0xd <== NOT EXECUTED 40004a28: 12 80 00 09 bne 40004a4c <== NOT EXECUTED 40004a2c: 80 a0 60 0a cmp %g1, 0xa <== NOT EXECUTED if (tty->termios.c_iflag & IGNCR) 40004a30: 80 88 a0 80 btst 0x80, %g2 <== NOT EXECUTED 40004a34: 12 80 00 59 bne 40004b98 <== NOT EXECUTED 40004a38: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED return 0; if (tty->termios.c_iflag & ICRNL) 40004a3c: 32 80 00 0d bne,a 40004a70 <== NOT EXECUTED 40004a40: a2 10 20 0a mov 0xa, %l1 <== NOT EXECUTED c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40004a44: 10 80 00 0c b 40004a74 <== NOT EXECUTED 40004a48: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== 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)) { 40004a4c: 12 80 00 07 bne 40004a68 <== NOT EXECUTED 40004a50: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004a54: 80 88 a0 40 btst 0x40, %g2 <== NOT EXECUTED 40004a58: 32 80 00 06 bne,a 40004a70 <== NOT EXECUTED 40004a5c: a2 10 20 0d mov 0xd, %l1 <== NOT EXECUTED c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40004a60: 10 80 00 05 b 40004a74 <== NOT EXECUTED 40004a64: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED 40004a68: 02 80 00 3a be 40004b50 <== NOT EXECUTED 40004a6c: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40004a70: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED 40004a74: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 40004a78: 02 80 00 36 be 40004b50 <== NOT EXECUTED 40004a7c: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED if (c == tty->termios.c_cc[VERASE]) { 40004a80: c2 0e 60 43 ldub [ %i1 + 0x43 ], %g1 <== NOT EXECUTED 40004a84: a0 0c 60 ff and %l1, 0xff, %l0 <== NOT EXECUTED erase (tty, 0); 40004a88: 90 10 00 19 mov %i1, %o0 <== 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]) { 40004a8c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004a90: 02 80 00 08 be 40004ab0 <== NOT EXECUTED 40004a94: 92 10 20 00 clr %o1 <== NOT EXECUTED erase (tty, 0); return 0; } else if (c == tty->termios.c_cc[VKILL]) { 40004a98: c2 0e 60 44 ldub [ %i1 + 0x44 ], %g1 <== NOT EXECUTED 40004a9c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004aa0: 32 80 00 07 bne,a 40004abc <== NOT EXECUTED 40004aa4: c2 0e 60 45 ldub [ %i1 + 0x45 ], %g1 <== NOT EXECUTED erase (tty, 1); 40004aa8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 40004aac: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40004ab0: 7f ff ff 3e call 400047a8 <== NOT EXECUTED 40004ab4: b0 10 20 00 clr %i0 <== NOT EXECUTED 40004ab8: 30 80 00 39 b,a 40004b9c <== NOT EXECUTED return 0; } else if (c == tty->termios.c_cc[VEOF]) { 40004abc: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004ac0: 02 80 00 37 be 40004b9c <== NOT EXECUTED 40004ac4: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return 1; } else if (c == '\n') { 40004ac8: 80 a4 20 0a cmp %l0, 0xa <== NOT EXECUTED 40004acc: 32 80 00 0d bne,a 40004b00 <== NOT EXECUTED 40004ad0: c2 0e 60 4c ldub [ %i1 + 0x4c ], %g1 <== NOT EXECUTED if (tty->termios.c_lflag & (ECHO | ECHONL)) 40004ad4: 80 88 a0 48 btst 0x48, %g2 <== NOT EXECUTED 40004ad8: 22 80 00 06 be,a 40004af0 <== NOT EXECUTED 40004adc: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED echo (c, tty); 40004ae0: 90 10 20 0a mov 0xa, %o0 <== NOT EXECUTED 40004ae4: 7f ff ff 0f call 40004720 <== NOT EXECUTED 40004ae8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40004aec: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40004af0: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 40004af4: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 40004af8: 10 80 00 13 b 40004b44 <== NOT EXECUTED 40004afc: e0 28 80 01 stb %l0, [ %g2 + %g1 ] <== NOT EXECUTED return 1; } else if ((c == tty->termios.c_cc[VEOL]) 40004b00: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004b04: 02 80 00 07 be 40004b20 <== NOT EXECUTED 40004b08: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED 40004b0c: c2 0e 60 51 ldub [ %i1 + 0x51 ], %g1 <== NOT EXECUTED 40004b10: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004b14: 12 80 00 0f bne 40004b50 <== NOT EXECUTED 40004b18: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED || (c == tty->termios.c_cc[VEOL2])) { if (tty->termios.c_lflag & ECHO) 40004b1c: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED 40004b20: 22 80 00 06 be,a 40004b38 <== NOT EXECUTED 40004b24: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED echo (c, tty); 40004b28: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40004b2c: 7f ff fe fd call 40004720 <== NOT EXECUTED 40004b30: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40004b34: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40004b38: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 40004b3c: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 40004b40: e2 28 80 01 stb %l1, [ %g2 + %g1 ] <== NOT EXECUTED 40004b44: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 40004b48: 81 c7 e0 08 ret <== NOT EXECUTED 40004b4c: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED } /* * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { 40004b50: c4 06 60 20 ld [ %i1 + 0x20 ], %g2 <== NOT EXECUTED 40004b54: c2 00 62 54 ld [ %g1 + 0x254 ], %g1 <== NOT EXECUTED 40004b58: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40004b5c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004b60: 16 80 00 0f bge 40004b9c <== NOT EXECUTED 40004b64: b0 10 20 00 clr %i0 <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) 40004b68: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40004b6c: 80 88 60 08 btst 8, %g1 <== NOT EXECUTED 40004b70: 22 80 00 06 be,a 40004b88 <== NOT EXECUTED 40004b74: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED echo (c, tty); 40004b78: 90 0c 60 ff and %l1, 0xff, %o0 <== NOT EXECUTED 40004b7c: 7f ff fe e9 call 40004720 <== NOT EXECUTED 40004b80: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40004b84: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40004b88: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 40004b8c: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 40004b90: e2 28 80 01 stb %l1, [ %g2 + %g1 ] <== NOT EXECUTED 40004b94: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 40004b98: b0 10 20 00 clr %i0 <== NOT EXECUTED } return 0; } 40004b9c: 81 c7 e0 08 ret <== NOT EXECUTED 40004ba0: 81 e8 00 00 restore <== NOT EXECUTED 40022440 : #if !defined(RTEMS_POSIX_API) int kill( pid_t pid, int sig ) { return 0; } 40022440: 81 c3 e0 08 retl <== NOT EXECUTED 40022444: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED 40017928 : extern void _wrapup_reent(struct _reent *); extern void _reclaim_reent(struct _reent *); void libc_wrapup(void) { 40017928: 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())) 4001792c: 03 10 00 68 sethi %hi(0x4001a000), %g1 40017930: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> 40017934: 80 a0 60 03 cmp %g1, 3 40017938: 12 80 00 15 bne 4001798c 4001793c: 21 10 00 65 sethi %hi(0x40019400), %l0 /* * This was already done if the user called exit() directly . _wrapup_reent(0); */ if (_REENT != &libc_global_reent) { 40017940: c4 04 20 d8 ld [ %l0 + 0xd8 ], %g2 ! 400194d8 <_impure_ptr> 40017944: 03 10 00 63 sethi %hi(0x40018c00), %g1 40017948: b0 10 62 50 or %g1, 0x250, %i0 ! 40018e50 4001794c: 80 a0 80 18 cmp %g2, %i0 40017950: 02 80 00 06 be 40017968 40017954: c2 04 20 d8 ld [ %l0 + 0xd8 ], %g1 _wrapup_reent(&libc_global_reent); 40017958: 40 00 00 a1 call 40017bdc <_wrapup_reent> 4001795c: 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; 40017960: f0 24 20 d8 st %i0, [ %l0 + 0xd8 ] * * Should this be changed to do *all* file streams? * _fwalk (_REENT, fclose); */ fclose (stdin); 40017964: c2 04 20 d8 ld [ %l0 + 0xd8 ], %g1 40017968: 7f ff db 06 call 4000e580 4001796c: d0 00 60 04 ld [ %g1 + 4 ], %o0 fclose (stdout); 40017970: c2 04 20 d8 ld [ %l0 + 0xd8 ], %g1 40017974: 7f ff db 03 call 4000e580 40017978: d0 00 60 08 ld [ %g1 + 8 ], %o0 fclose (stderr); 4001797c: c2 04 20 d8 ld [ %l0 + 0xd8 ], %g1 40017980: f0 00 60 0c ld [ %g1 + 0xc ], %i0 40017984: 7f ff da ff call 4000e580 40017988: 81 e8 00 00 restore 4001798c: 81 c7 e0 08 ret <== NOT EXECUTED 40017990: 81 e8 00 00 restore <== NOT EXECUTED 40017818 : off_t lseek( int fd, off_t offset, int whence ) { 40017818: 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 ); 4001781c: 03 10 00 63 sethi %hi(0x40018c00), %g1 <== NOT EXECUTED 40017820: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 ! 40018d4c <== NOT EXECUTED off_t lseek( int fd, off_t offset, int whence ) { 40017824: 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 ); 40017828: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 4001782c: 1a 80 00 0e bcc 40017864 <== NOT EXECUTED 40017830: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40017834: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40017838: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 <== NOT EXECUTED 4001783c: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40017840: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40017844: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40017848: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4001784c: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40017850: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40017854: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40017858: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4001785c: 32 80 00 06 bne,a 40017874 <== NOT EXECUTED 40017860: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40017864: 7f ff da f1 call 4000e428 <__errno> <== NOT EXECUTED 40017868: 01 00 00 00 nop <== NOT EXECUTED 4001786c: 10 80 00 1c b 400178dc <== NOT EXECUTED 40017870: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED /* * Check as many errors as possible before touching iop->offset. */ if ( !iop->handlers->lseek_h ) 40017874: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 40017878: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001787c: 12 80 00 06 bne 40017894 <== NOT EXECUTED 40017880: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017884: 7f ff da e9 call 4000e428 <__errno> <== NOT EXECUTED 40017888: 01 00 00 00 nop <== NOT EXECUTED 4001788c: 10 80 00 14 b 400178dc <== NOT EXECUTED 40017890: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED /* * Now process the lseek(). */ old_offset = iop->offset; switch ( whence ) { 40017894: 02 80 00 09 be 400178b8 <== NOT EXECUTED 40017898: f4 06 20 08 ld [ %i0 + 8 ], %i2 <== NOT EXECUTED 4001789c: 80 a2 a0 02 cmp %o2, 2 <== NOT EXECUTED 400178a0: 02 80 00 08 be 400178c0 <== NOT EXECUTED 400178a4: 80 a2 a0 00 cmp %o2, 0 <== NOT EXECUTED 400178a8: 12 80 00 0a bne 400178d0 <== NOT EXECUTED 400178ac: 01 00 00 00 nop <== NOT EXECUTED case SEEK_SET: iop->offset = offset; 400178b0: 10 80 00 0e b 400178e8 <== NOT EXECUTED 400178b4: f2 26 20 08 st %i1, [ %i0 + 8 ] <== NOT EXECUTED break; case SEEK_CUR: iop->offset += offset; 400178b8: 10 80 00 04 b 400178c8 <== NOT EXECUTED 400178bc: 82 06 40 1a add %i1, %i2, %g1 <== NOT EXECUTED break; case SEEK_END: iop->offset = iop->size + offset; 400178c0: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 400178c4: 82 06 40 01 add %i1, %g1, %g1 <== NOT EXECUTED 400178c8: 10 80 00 08 b 400178e8 <== NOT EXECUTED 400178cc: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED break; default: rtems_set_errno_and_return_minus_one( EINVAL ); 400178d0: 7f ff da d6 call 4000e428 <__errno> <== NOT EXECUTED 400178d4: 01 00 00 00 nop <== NOT EXECUTED 400178d8: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 400178dc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400178e0: 10 80 00 09 b 40017904 <== NOT EXECUTED 400178e4: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * At this time, handlers assume iop->offset has the desired * new offset. */ status = (*iop->handlers->lseek_h)( iop, offset, whence ); 400178e8: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 400178ec: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 400178f0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400178f4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status == (off_t) -1 ) 400178f8: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 400178fc: 22 80 00 02 be,a 40017904 <== NOT EXECUTED 40017900: f4 26 20 08 st %i2, [ %i0 + 8 ] <== NOT EXECUTED /* * So if the operation failed, we have to restore iop->offset. */ return status; } 40017904: 81 c7 e0 08 ret <== NOT EXECUTED 40017908: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400030d0 : #ifdef RTEMS_NEWLIB void *malloc( size_t size ) { 400030d0: 9d e3 bf 98 save %sp, -104, %sp uint32_t sbrk_amount; Chain_Node *to_be_freed; MSBUMP(malloc_calls, 1); if ( !size ) 400030d4: a4 96 20 00 orcc %i0, 0, %l2 400030d8: 02 80 00 41 be 400031dc 400030dc: 03 10 00 68 sethi %hi(0x4001a000), %g1 /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 400030e0: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> 400030e4: 80 a0 60 03 cmp %g1, 3 400030e8: 12 80 00 10 bne 40003128 400030ec: 03 10 00 67 sethi %hi(0x40019c00), %g1 if (_Thread_Dispatch_disable_level > 0) 400030f0: 03 10 00 67 sethi %hi(0x40019c00), %g1 400030f4: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 400030f8: 80 a0 60 00 cmp %g1, 0 400030fc: 12 80 00 36 bne 400031d4 40003100: b0 10 20 00 clr %i0 return (void *) 0; if (_ISR_Nest_level > 0) 40003104: 03 10 00 67 sethi %hi(0x40019c00), %g1 40003108: c2 00 63 64 ld [ %g1 + 0x364 ], %g1 ! 40019f64 <_ISR_Nest_level> 4000310c: 80 a0 60 00 cmp %g1, 0 40003110: 02 80 00 06 be 40003128 40003114: 03 10 00 67 sethi %hi(0x40019c00), %g1 40003118: 30 80 00 32 b,a 400031e0 <== NOT EXECUTED /* * 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); 4000311c: 7f ff ff c5 call 40003030 40003120: 01 00 00 00 nop 40003124: 30 80 00 02 b,a 4000312c } /* * If some free's have been deferred, then do them now. */ while ((to_be_freed = Chain_Get(&RTEMS_Malloc_GC_list)) != NULL) 40003128: a0 10 61 40 or %g1, 0x140, %l0 4000312c: 40 00 11 41 call 40007630 <_Chain_Get> 40003130: 90 10 00 10 mov %l0, %o0 40003134: 80 a2 20 00 cmp %o0, 0 40003138: 12 bf ff f9 bne 4000311c 4000313c: 23 10 00 67 sethi %hi(0x40019c00), %l1 */ #ifdef MALLOC_ARENA_CHECK size += sizeof(struct mallocNode) + SENTINELSIZE; #endif return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 40003140: 92 10 00 12 mov %l2, %o1 40003144: 40 00 15 fe call 4000893c <_Protected_heap_Allocate> 40003148: 90 14 60 e4 or %l1, 0xe4, %o0 if ( !return_this ) { 4000314c: b0 92 20 00 orcc %o0, 0, %i0 40003150: 12 80 00 21 bne 400031d4 40003154: 03 10 00 67 sethi %hi(0x40019c00), %g1 * 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; 40003158: e0 00 61 3c ld [ %g1 + 0x13c ], %l0 ! 40019d3c <== NOT EXECUTED if ( sbrk_amount == 0 ) 4000315c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40003160: 02 80 00 1d be 400031d4 <== NOT EXECUTED 40003164: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED return (void *) 0; the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount); 40003168: 40 00 48 d9 call 400154cc <.udiv> <== NOT EXECUTED 4000316c: 90 04 80 10 add %l2, %l0, %o0 <== NOT EXECUTED 40003170: 40 00 48 9d call 400153e4 <.umul> <== NOT EXECUTED 40003174: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if ((starting_address = (void *)sbrk(the_size)) 40003178: 7f ff fa b3 call 40001c44 <== NOT EXECUTED 4000317c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40003180: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40003184: 02 80 00 14 be 400031d4 <== NOT EXECUTED 40003188: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED == (void*) -1) return (void *) 0; if ( !_Protected_heap_Extend( 4000318c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40003190: 40 00 16 7c call 40008b80 <_Protected_heap_Extend> <== NOT EXECUTED 40003194: 90 14 60 e4 or %l1, 0xe4, %o0 <== NOT EXECUTED 40003198: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000319c: 12 80 00 05 bne 400031b0 <== NOT EXECUTED 400031a0: 90 14 60 e4 or %l1, 0xe4, %o0 <== NOT EXECUTED &RTEMS_Malloc_Heap, starting_address, the_size) ) { sbrk(-the_size); 400031a4: 7f ff fa a8 call 40001c44 <== NOT EXECUTED 400031a8: 90 20 00 10 neg %l0, %o0 <== NOT EXECUTED 400031ac: 30 80 00 06 b,a 400031c4 <== NOT EXECUTED return (void *) 0; } MSBUMP(space_available, the_size); return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 400031b0: 40 00 15 e3 call 4000893c <_Protected_heap_Allocate> <== NOT EXECUTED 400031b4: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED if ( !return_this ) { 400031b8: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 400031bc: 12 80 00 09 bne 400031e0 <== NOT EXECUTED 400031c0: 01 00 00 00 nop <== NOT EXECUTED errno = ENOMEM; 400031c4: 40 00 2c 99 call 4000e428 <__errno> <== NOT EXECUTED 400031c8: 01 00 00 00 nop <== NOT EXECUTED 400031cc: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 400031d0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400031d4: 81 c7 e0 08 ret 400031d8: 81 e8 00 00 restore return (void *) 0; 400031dc: b0 10 20 00 clr %i0 <== NOT EXECUTED mallocNodeHead.forw = mp; rtems_interrupt_enable(key); } #endif return return_this; } 400031e0: 81 c7 e0 08 ret <== NOT EXECUTED 400031e4: 81 e8 00 00 restore <== NOT EXECUTED 4000604c : /* * Find amount of free heap remaining */ size_t malloc_free_space( void ) { 4000604c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED Heap_Information info; _Protected_heap_Get_free_information( &RTEMS_Malloc_Heap, &info ); 40006050: 11 10 00 e9 sethi %hi(0x4003a400), %o0 <== NOT EXECUTED 40006054: 92 07 bf ec add %fp, -20, %o1 <== NOT EXECUTED 40006058: 40 00 19 e2 call 4000c7e0 <_Protected_heap_Get_free_information> <== NOT EXECUTED 4000605c: 90 12 21 90 or %o0, 0x190, %o0 <== NOT EXECUTED return (size_t) info.largest; } 40006060: f0 07 bf f0 ld [ %fp + -16 ], %i0 <== NOT EXECUTED 40006064: 81 c7 e0 08 ret <== NOT EXECUTED 40006068: 81 e8 00 00 restore <== NOT EXECUTED 4001a044 : */ int memfile_blocks_allocated = 0; void *memfile_alloc_block(void) { 4001a044: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED void *memory; memory = (void *)calloc(1, IMFS_MEMFILE_BYTES_PER_BLOCK); 4001a048: 03 10 00 e6 sethi %hi(0x40039800), %g1 <== NOT EXECUTED 4001a04c: d2 00 63 1c ld [ %g1 + 0x31c ], %o1 ! 40039b1c <== NOT EXECUTED 4001a050: 7f ff b0 c9 call 40006374 <== NOT EXECUTED 4001a054: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED if ( memory ) 4001a058: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a05c: 02 80 00 05 be 4001a070 <== NOT EXECUTED 4001a060: 05 10 00 e7 sethi %hi(0x40039c00), %g2 <== NOT EXECUTED memfile_blocks_allocated++; 4001a064: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40039ea0 <== NOT EXECUTED 4001a068: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001a06c: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED return memory; } 4001a070: 81 c7 e0 08 ret <== NOT EXECUTED 4001a074: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001a57c : return memfile_check_rmnod( the_jnode ); } int memfile_check_rmnod( IMFS_jnode_t *the_jnode ){ 4001a57c: 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) ) { 4001a580: 7f ff ae 1b call 40005dec <== NOT EXECUTED 4001a584: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a588: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a58c: 12 80 00 13 bne 4001a5d8 <== NOT EXECUTED 4001a590: 01 00 00 00 nop <== NOT EXECUTED 4001a594: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4001a598: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a59c: 12 80 00 0f bne 4001a5d8 <== NOT EXECUTED 4001a5a0: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == the_jnode ) 4001a5a4: c4 00 61 60 ld [ %g1 + 0x160 ], %g2 ! 40038560 <== NOT EXECUTED 4001a5a8: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4001a5ac: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4001a5b0: 22 80 00 02 be,a 4001a5b8 <== NOT EXECUTED 4001a5b4: c0 20 a0 04 clr [ %g2 + 4 ] <== NOT EXECUTED rtems_filesystem_current.node_access = NULL; /* * Free memory associated with a memory file. */ if (the_jnode->type != IMFS_LINEAR_FILE) 4001a5b8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001a5bc: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001a5c0: 02 80 00 04 be 4001a5d0 <== NOT EXECUTED 4001a5c4: 01 00 00 00 nop <== NOT EXECUTED IMFS_memfile_remove( the_jnode ); 4001a5c8: 7f ff ff 84 call 4001a3d8 <== NOT EXECUTED 4001a5cc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free( the_jnode ); 4001a5d0: 7f ff ae ab call 4000607c <== NOT EXECUTED 4001a5d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 4001a5d8: 81 c7 e0 08 ret <== NOT EXECUTED 4001a5dc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001a634 : */ int memfile_close( rtems_libio_t *iop ) { 4001a634: 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) 4001a638: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4001a63c: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 4001a640: 02 80 00 04 be 4001a650 <== NOT EXECUTED 4001a644: d0 06 20 2c ld [ %i0 + 0x2c ], %o0 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001a648: c2 02 20 4c ld [ %o0 + 0x4c ], %g1 <== NOT EXECUTED 4001a64c: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED memfile_check_rmnod( the_jnode ); 4001a650: 7f ff ff cb call 4001a57c <== NOT EXECUTED 4001a654: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 4001a658: 81 c7 e0 08 ret <== NOT EXECUTED 4001a65c: 81 e8 00 00 restore <== NOT EXECUTED 4001a020 : */ void memfile_free_block( void *memory ) { 4001a020: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED #if 0 fprintf(stdout, "(d %p) ", memory ); fflush(stdout); #endif free(memory); 4001a024: 7f ff b0 16 call 4000607c <== NOT EXECUTED 4001a028: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED memfile_blocks_allocated--; 4001a02c: 05 10 00 e7 sethi %hi(0x40039c00), %g2 <== NOT EXECUTED 4001a030: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40039ea0 <== NOT EXECUTED 4001a034: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001a038: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED } 4001a03c: 81 c7 e0 08 ret <== NOT EXECUTED 4001a040: 81 e8 00 00 restore <== NOT EXECUTED 4001a368 : void memfile_free_blocks_in_table( block_p **block_table, int entries ) { 4001a368: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( block_table ); 4001a36c: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001a370: 32 80 00 08 bne,a 4001a390 <== NOT EXECUTED 4001a374: e2 06 00 00 ld [ %i0 ], %l1 <== NOT EXECUTED 4001a378: 31 10 00 d5 sethi %hi(0x40035400), %i0 <== NOT EXECUTED 4001a37c: 35 10 00 d5 sethi %hi(0x40035400), %i2 <== NOT EXECUTED 4001a380: b0 16 22 58 or %i0, 0x258, %i0 <== NOT EXECUTED 4001a384: b4 16 a2 e0 or %i2, 0x2e0, %i2 <== NOT EXECUTED 4001a388: 7f ff ad 74 call 40005958 <__assert> <== NOT EXECUTED 4001a38c: 93 e8 21 b1 restore %g0, 0x1b1, %o1 <== NOT EXECUTED /* * Now go through all the slots in the table and free the memory. */ b = *block_table; 4001a390: a0 10 20 00 clr %l0 <== NOT EXECUTED 4001a394: 10 80 00 09 b 4001a3b8 <== NOT EXECUTED 4001a398: b4 10 20 00 clr %i2 <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED 4001a3a4: a0 04 20 01 inc %l0 <== NOT EXECUTED memfile_free_block( b[i] ); 4001a3a8: 7f ff ff 1e call 4001a020 <== NOT EXECUTED 4001a3ac: 01 00 00 00 nop <== NOT EXECUTED b[i] = 0; 4001a3b0: c0 26 80 11 clr [ %i2 + %l1 ] <== NOT EXECUTED * Now go through all the slots in the table and free the memory. */ b = *block_table; for ( i=0 ; i <== NOT EXECUTED 4001a3c0: d0 06 80 11 ld [ %i2 + %l1 ], %o0 <== 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 ); 4001a3c4: 7f ff ff 17 call 4001a020 <== NOT EXECUTED 4001a3c8: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED *block_table = 0; 4001a3cc: c0 26 00 00 clr [ %i0 ] <== NOT EXECUTED } 4001a3d0: 81 c7 e0 08 ret <== NOT EXECUTED 4001a3d4: 81 e8 00 00 restore <== NOT EXECUTED 4001a868 : int memfile_ftruncate( rtems_libio_t *iop, off_t length ) { 4001a868: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4001a86c: 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 ) 4001a870: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001a874: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001a878: 04 80 00 06 ble 4001a890 <== NOT EXECUTED 4001a87c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED return IMFS_memfile_extend( the_jnode, length ); 4001a880: 7f ff ff a6 call 4001a718 <== NOT EXECUTED 4001a884: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; IMFS_update_atime( the_jnode ); return 0; } 4001a888: 81 c7 e0 08 ret <== NOT EXECUTED 4001a88c: 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; 4001a890: f2 24 20 4c st %i1, [ %l0 + 0x4c ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001a894: f2 26 20 04 st %i1, [ %i0 + 4 ] <== NOT EXECUTED IMFS_update_atime( the_jnode ); 4001a898: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001a89c: 7f ff ac ea call 40005c44 <== NOT EXECUTED 4001a8a0: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001a8a4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001a8a8: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a8ac: c2 24 20 3c st %g1, [ %l0 + 0x3c ] <== NOT EXECUTED return 0; } 4001a8b0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4001a8b4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a8b8: 81 e8 00 00 restore <== NOT EXECUTED 4001a018 : IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; return 0; } 4001a018: 81 c3 e0 08 retl <== NOT EXECUTED 4001a01c: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a8bc : off_t memfile_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 4001a8bc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4001a8c0: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { 4001a8c4: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4001a8c8: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001a8cc: 12 80 00 09 bne 4001a8f0 <== NOT EXECUTED 4001a8d0: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED if (iop->offset > the_jnode->info.linearfile.size) 4001a8d4: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 4001a8d8: 80 a2 40 08 cmp %o1, %o0 <== NOT EXECUTED 4001a8dc: 34 80 00 11 bg,a 4001a920 <== NOT EXECUTED 4001a8e0: d0 26 20 08 st %o0, [ %i0 + 8 ] <== NOT EXECUTED 4001a8e4: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4001a8e8: 81 c7 e0 08 ret <== NOT EXECUTED 4001a8ec: 81 e8 00 00 restore <== NOT EXECUTED iop->offset = the_jnode->info.linearfile.size; } else { /* Must be a block file (IMFS_MEMORY_FILE). */ if (IMFS_memfile_extend( the_jnode, iop->offset )) 4001a8f0: 7f ff ff 8a call 4001a718 <== NOT EXECUTED 4001a8f4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a8f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a8fc: 22 80 00 08 be,a 4001a91c <== NOT EXECUTED 4001a900: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); 4001a904: 40 00 21 3c call 40022df4 <__errno> <== NOT EXECUTED 4001a908: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001a90c: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED 4001a910: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a914: 81 c7 e0 08 ret <== NOT EXECUTED 4001a918: 81 e8 00 00 restore <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001a91c: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED } return iop->offset; 4001a920: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED } 4001a924: 81 c7 e0 08 ret <== NOT EXECUTED 4001a928: 81 e8 00 00 restore <== NOT EXECUTED 4001abc4 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4001abc4: 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)) 4001abc8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4001abcc: 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)) 4001abd0: 80 88 62 04 btst 0x204, %g1 <== NOT EXECUTED 4001abd4: 02 80 00 17 be 4001ac30 <== NOT EXECUTED 4001abd8: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED 4001abdc: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4001abe0: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001abe4: 32 80 00 14 bne,a 4001ac34 <== NOT EXECUTED 4001abe8: c2 04 60 0c ld [ %l1 + 0xc ], %g1 <== NOT EXECUTED && (the_jnode->type == IMFS_LINEAR_FILE)) { uint32_t count = the_jnode->info.linearfile.size; 4001abec: d6 04 20 4c ld [ %l0 + 0x4c ], %o3 <== NOT EXECUTED const unsigned char *buffer = the_jnode->info.linearfile.direct; 4001abf0: d4 04 20 50 ld [ %l0 + 0x50 ], %o2 <== NOT EXECUTED the_jnode->type = IMFS_MEMORY_FILE; 4001abf4: 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; 4001abf8: 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; 4001abfc: 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; 4001ac00: 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; 4001ac04: 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) 4001ac08: 80 a2 e0 00 cmp %o3, 0 <== NOT EXECUTED 4001ac0c: 02 80 00 09 be 4001ac30 <== NOT EXECUTED 4001ac10: c2 24 20 48 st %g1, [ %l0 + 0x48 ] <== NOT EXECUTED 4001ac14: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001ac18: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001ac1c: 7f ff ff 44 call 4001a92c <== NOT EXECUTED 4001ac20: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001ac24: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4001ac28: 02 80 00 0a be 4001ac50 <== NOT EXECUTED 4001ac2c: 01 00 00 00 nop <== NOT EXECUTED && (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1)) return -1; } if (iop->flags & LIBIO_FLAGS_APPEND) 4001ac30: c2 04 60 0c ld [ %l1 + 0xc ], %g1 <== NOT EXECUTED 4001ac34: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 4001ac38: 02 80 00 04 be 4001ac48 <== NOT EXECUTED 4001ac3c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001ac40: c2 24 60 08 st %g1, [ %l1 + 8 ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001ac44: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001ac48: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001ac4c: c2 24 60 04 st %g1, [ %l1 + 4 ] <== NOT EXECUTED return 0; } 4001ac50: 81 c7 e0 08 ret <== NOT EXECUTED 4001ac54: 81 e8 00 00 restore <== NOT EXECUTED 4001aed4 : ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4001aed4: 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 ); 4001aed8: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4001aedc: d0 02 20 2c ld [ %o0 + 0x2c ], %o0 <== NOT EXECUTED ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4001aee0: 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 ); 4001aee4: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 4001aee8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001aeec: 7f ff ff 5b call 4001ac58 <== NOT EXECUTED 4001aef0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001aef4: 01 00 00 00 nop <== NOT EXECUTED 4001a5e0 : */ int memfile_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4001a5e0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 4001a5e4: 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 ) { 4001a5e8: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 4001a5ec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a5f0: 22 80 00 06 be,a 4001a608 <== NOT EXECUTED 4001a5f4: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4001a5f8: 7f ff fb b9 call 400194dc <_Chain_Extract> <== NOT EXECUTED 4001a5fc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 4001a600: 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--; 4001a604: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4001a608: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4001a60c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4001a610: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001a614: 7f ff ad 8c call 40005c44 <== NOT EXECUTED 4001a618: c2 36 20 30 sth %g1, [ %i0 + 0x30 ] <== NOT EXECUTED 4001a61c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return memfile_check_rmnod( the_jnode ); 4001a620: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a624: 7f ff ff d6 call 4001a57c <== NOT EXECUTED 4001a628: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED } 4001a62c: 81 c7 e0 08 ret <== NOT EXECUTED 4001a630: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001ab94 : ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4001ab94: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; ssize_t status; the_jnode = iop->file_info; 4001ab98: e2 06 20 2c ld [ %i0 + 0x2c ], %l1 <== NOT EXECUTED status = IMFS_memfile_write( the_jnode, iop->offset, buffer, count ); 4001ab9c: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 4001aba0: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 4001aba4: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001aba8: 7f ff ff 61 call 4001a92c <== NOT EXECUTED 4001abac: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001abb0: c2 04 60 4c ld [ %l1 + 0x4c ], %g1 <== NOT EXECUTED ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4001abb4: 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; 4001abb8: c2 24 20 04 st %g1, [ %l0 + 4 ] <== NOT EXECUTED return status; } 4001abbc: 81 c7 e0 08 ret <== NOT EXECUTED 4001abc0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000b570 : int miniIMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 4000b570: 13 10 00 64 sethi %hi(0x40019000), %o1 4000b574: 15 10 00 67 sethi %hi(0x40019c00), %o2 4000b578: 92 12 62 ac or %o1, 0x2ac, %o1 4000b57c: 94 12 a0 88 or %o2, 0x88, %o2 4000b580: 96 10 00 0a mov %o2, %o3 4000b584: 82 13 c0 00 mov %o7, %g1 4000b588: 40 00 02 70 call 4000bf48 4000b58c: 9e 10 40 00 mov %g1, %o7 4000b590: 01 00 00 00 nop <== NOT EXECUTED 40003434 : int mknod( const char *pathname, mode_t mode, dev_t dev ) { 40003434: 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) ) ) 40003438: 03 00 00 3c sethi %hi(0xf000), %g1 4000343c: b3 2e 60 10 sll %i1, 0x10, %i1 40003440: b3 36 60 10 srl %i1, 0x10, %i1 40003444: 84 8e 40 01 andcc %i1, %g1, %g2 40003448: 32 80 00 06 bne,a 40003460 4000344c: 03 00 00 04 sethi %hi(0x1000), %g1 rtems_set_errno_and_return_minus_one( EINVAL ); 40003450: 40 00 2b f6 call 4000e428 <__errno> <== NOT EXECUTED 40003454: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40003458: 10 80 00 35 b 4000352c <== NOT EXECUTED 4000345c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED if ( S_ISFIFO(mode) ) 40003460: 80 a0 80 01 cmp %g2, %g1 40003464: 02 80 00 2f be 40003520 40003468: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 4000346c: c2 4e 00 00 ldsb [ %i0 ], %g1 40003470: 80 a0 60 2f cmp %g1, 0x2f 40003474: 02 80 00 06 be 4000348c 40003478: 80 a0 60 5c cmp %g1, 0x5c 4000347c: 02 80 00 04 be 4000348c <== NOT EXECUTED 40003480: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003484: 12 80 00 0a bne 400034ac <== NOT EXECUTED 40003488: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 4000348c: 03 10 00 64 sethi %hi(0x40019000), %g1 40003490: d2 00 63 70 ld [ %g1 + 0x370 ], %o1 ! 40019370 40003494: 90 07 bf e4 add %fp, -28, %o0 40003498: 92 02 60 14 add %o1, 0x14, %o1 4000349c: 40 00 2d b8 call 4000eb7c 400034a0: 94 10 20 10 mov 0x10, %o2 400034a4: 10 80 00 08 b 400034c4 400034a8: 84 10 20 01 mov 1, %g2 400034ac: d2 00 63 70 ld [ %g1 + 0x370 ], %o1 <== NOT EXECUTED 400034b0: 90 07 bf e4 add %fp, -28, %o0 <== NOT EXECUTED 400034b4: 92 02 60 04 add %o1, 4, %o1 <== NOT EXECUTED 400034b8: 40 00 2d b1 call 4000eb7c <== NOT EXECUTED 400034bc: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 400034c0: 84 10 20 00 clr %g2 <== NOT EXECUTED if ( !temp_loc.ops->evalformake_h ) { 400034c4: c2 07 bf ec ld [ %fp + -20 ], %g1 400034c8: c2 00 60 04 ld [ %g1 + 4 ], %g1 400034cc: 80 a0 60 00 cmp %g1, 0 400034d0: 02 80 00 14 be 40003520 400034d4: 90 06 00 02 add %i0, %g2, %o0 rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->evalformake_h)( 400034d8: a0 07 bf e4 add %fp, -28, %l0 400034dc: 94 07 bf f4 add %fp, -12, %o2 400034e0: 92 10 00 10 mov %l0, %o1 400034e4: 9f c0 40 00 call %g1 400034e8: b0 10 3f ff mov -1, %i0 &pathname[i], &temp_loc, &name_start ); if ( result != 0 ) 400034ec: 80 a2 20 00 cmp %o0, 0 400034f0: 12 80 00 10 bne 40003530 400034f4: c2 07 bf ec ld [ %fp + -20 ], %g1 return -1; if ( !temp_loc.ops->mknod_h ) { 400034f8: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 400034fc: 80 a0 a0 00 cmp %g2, 0 40003500: 12 80 00 0e bne 40003538 40003504: d0 07 bf f4 ld [ %fp + -12 ], %o0 rtems_filesystem_freenode( &temp_loc ); 40003508: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4000350c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003510: 02 80 00 04 be 40003520 <== NOT EXECUTED 40003514: 01 00 00 00 nop <== NOT EXECUTED 40003518: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000351c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40003520: 40 00 2b c2 call 4000e428 <__errno> <== NOT EXECUTED 40003524: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40003528: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000352c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40003530: 81 c7 e0 08 ret <== NOT EXECUTED 40003534: 81 e8 00 00 restore <== NOT EXECUTED } result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc ); 40003538: 92 10 00 19 mov %i1, %o1 4000353c: 94 10 00 1a mov %i2, %o2 40003540: 96 10 00 1b mov %i3, %o3 40003544: 9f c0 80 00 call %g2 40003548: 98 10 00 10 mov %l0, %o4 rtems_filesystem_freenode( &temp_loc ); 4000354c: c2 07 bf ec ld [ %fp + -20 ], %g1 40003550: 80 a0 60 00 cmp %g1, 0 40003554: 02 bf ff f7 be 40003530 40003558: b0 10 00 08 mov %o0, %i0 4000355c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 40003560: 80 a0 60 00 cmp %g1, 0 40003564: 02 80 00 04 be 40003574 40003568: 01 00 00 00 nop 4000356c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003570: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40003574: 81 c7 e0 08 ret 40003578: 81 e8 00 00 restore 4000c8b8 : rtems_filesystem_operations_table *fs_ops, rtems_filesystem_options_t options, char *device, char *mount_point ) { 4000c8b8: 9d e3 bf 88 save %sp, -120, %sp /* * Is there a file system operations table? */ if ( fs_ops == NULL ) { 4000c8bc: 80 a6 60 00 cmp %i1, 0 4000c8c0: 02 80 00 05 be 4000c8d4 4000c8c4: a2 10 00 18 mov %i0, %l1 /* * Are the file system options valid? */ if ( options != RTEMS_FILESYSTEM_READ_ONLY && 4000c8c8: 80 a6 a0 01 cmp %i2, 1 4000c8cc: 28 80 00 06 bleu,a 4000c8e4 4000c8d0: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 options != RTEMS_FILESYSTEM_READ_WRITE ) { errno = EINVAL; 4000c8d4: 40 00 06 d5 call 4000e428 <__errno> <== NOT EXECUTED 4000c8d8: 01 00 00 00 nop <== NOT EXECUTED 4000c8dc: 10 80 00 17 b 4000c938 <== NOT EXECUTED 4000c8e0: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED return -1; } /* Do they support being mounted at all ? */ if ( !fs_ops->fsmount_me_h ) { 4000c8e4: 80 a0 60 00 cmp %g1, 0 4000c8e8: 12 80 00 07 bne 4000c904 4000c8ec: 80 a6 e0 00 cmp %i3, 0 errno = ENOTSUP; 4000c8f0: 40 00 06 ce call 4000e428 <__errno> <== NOT EXECUTED 4000c8f4: b4 10 20 00 clr %i2 <== NOT EXECUTED 4000c8f8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000c8fc: 10 80 00 77 b 4000cad8 <== NOT EXECUTED 4000c900: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Allocate a mount table entry */ size = sizeof(rtems_filesystem_mount_table_entry_t); if ( device ) 4000c904: 02 80 00 05 be 4000c918 4000c908: 90 10 20 64 mov 0x64, %o0 size += strlen( device ) + 1; 4000c90c: 40 00 0b a5 call 4000f7a0 <== NOT EXECUTED 4000c910: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED 4000c914: 90 02 20 65 add %o0, 0x65, %o0 <== NOT EXECUTED temp_mt_entry = malloc( size ); 4000c918: 7f ff d9 ee call 400030d0 4000c91c: 01 00 00 00 nop if ( !temp_mt_entry ) { 4000c920: a0 92 20 00 orcc %o0, 0, %l0 4000c924: 32 80 00 07 bne,a 4000c940 4000c928: f4 24 20 28 st %i2, [ %l0 + 0x28 ] errno = ENOMEM; 4000c92c: 40 00 06 bf call 4000e428 <__errno> <== NOT EXECUTED 4000c930: 01 00 00 00 nop <== NOT EXECUTED 4000c934: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 4000c938: 10 80 00 78 b 4000cb18 <== NOT EXECUTED 4000c93c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return -1; } temp_mt_entry->mt_fs_root.mt_entry = temp_mt_entry; 4000c940: e0 24 20 24 st %l0, [ %l0 + 0x24 ] temp_mt_entry->options = options; if ( device ) { 4000c944: 80 a6 e0 00 cmp %i3, 0 4000c948: 02 80 00 08 be 4000c968 4000c94c: b4 10 00 10 mov %l0, %i2 temp_mt_entry->dev = 4000c950: 90 04 20 64 add %l0, 0x64, %o0 <== NOT EXECUTED (char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t ); strcpy( temp_mt_entry->dev, device ); 4000c954: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 4000c958: 40 00 0b 72 call 4000f720 <== NOT EXECUTED 4000c95c: d0 24 20 60 st %o0, [ %l0 + 0x60 ] <== NOT EXECUTED /* * The mount_point should be a directory with read/write/execute * permissions in the existing tree. */ if ( mount_point ) { 4000c960: 10 80 00 04 b 4000c970 <== NOT EXECUTED 4000c964: 80 a7 20 00 cmp %i4, 0 <== 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; 4000c968: c0 24 20 60 clr [ %l0 + 0x60 ] /* * The mount_point should be a directory with read/write/execute * permissions in the existing tree. */ if ( mount_point ) { 4000c96c: 80 a7 20 00 cmp %i4, 0 4000c970: 02 80 00 3b be 4000ca5c 4000c974: 90 10 00 1c mov %i4, %o0 if ( rtems_filesystem_evaluate_path( 4000c978: 92 10 20 07 mov 7, %o1 <== NOT EXECUTED 4000c97c: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 4000c980: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 4000c984: 7f ff d9 25 call 40002e18 <== NOT EXECUTED 4000c988: 94 10 00 1c mov %i4, %o2 <== NOT EXECUTED 4000c98c: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000c990: 02 80 00 52 be 4000cad8 <== NOT EXECUTED 4000c994: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED /* * Test for node_type_h */ if (!loc.ops->node_type_h) { 4000c998: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 4000c99c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c9a0: 12 80 00 06 bne 4000c9b8 <== NOT EXECUTED 4000c9a4: 01 00 00 00 nop <== NOT EXECUTED errno = ENOTSUP; 4000c9a8: 40 00 06 a0 call 4000e428 <__errno> <== NOT EXECUTED 4000c9ac: 01 00 00 00 nop <== 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; 4000c9b0: 10 80 00 0a b 4000c9d8 <== NOT EXECUTED 4000c9b4: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED /* * Test to see if it is a directory */ if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 4000c9b8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000c9bc: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 4000c9c0: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4000c9c4: 02 80 00 07 be 4000c9e0 <== NOT EXECUTED 4000c9c8: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED errno = ENOTDIR; 4000c9cc: 40 00 06 97 call 4000e428 <__errno> <== NOT EXECUTED 4000c9d0: 01 00 00 00 nop <== NOT EXECUTED 4000c9d4: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 4000c9d8: 10 80 00 41 b 4000cadc <== NOT EXECUTED 4000c9dc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED for ( the_node = rtems_filesystem_mount_table_control.first; !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node ); 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 ) 4000c9e0: c8 07 bf e8 ld [ %fp + -24 ], %g4 <== NOT EXECUTED /* * For each mount table entry */ for ( the_node = rtems_filesystem_mount_table_control.first; 4000c9e4: c4 00 61 a8 ld [ %g1 + 0x1a8 ], %g2 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000c9e8: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 4000c9ec: 10 80 00 06 b 4000ca04 <== NOT EXECUTED 4000c9f0: 86 10 61 ac or %g1, 0x1ac, %g3 ! 4001a1ac <== NOT EXECUTED !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node ); 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 ) 4000c9f4: 80 a0 40 04 cmp %g1, %g4 <== NOT EXECUTED 4000c9f8: 02 80 00 08 be 4000ca18 <== NOT EXECUTED 4000c9fc: 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 ) { 4000ca00: 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 ); 4000ca04: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 4000ca08: 32 bf ff fb bne,a 4000c9f4 <== NOT EXECUTED 4000ca0c: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== 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; 4000ca10: 10 80 00 44 b 4000cb20 <== NOT EXECUTED 4000ca14: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED /* * You can only mount one file system onto a single mount point. */ if ( Is_node_fs_root( &loc ) ){ errno = EBUSY; 4000ca18: 40 00 06 84 call 4000e428 <__errno> <== NOT EXECUTED 4000ca1c: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 4000ca20: 10 bf ff ee b 4000c9d8 <== NOT EXECUTED 4000ca24: 82 10 20 10 mov 0x10, %g1 <== 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; 4000ca28: 40 00 06 80 call 4000e428 <__errno> <== NOT EXECUTED 4000ca2c: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 4000ca30: 10 bf ff ea b 4000c9d8 <== NOT EXECUTED 4000ca34: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED goto cleanup_and_bail; } if ( loc.ops->mount_h( temp_mt_entry ) ) { 4000ca38: 9f c0 c0 00 call %g3 <== NOT EXECUTED 4000ca3c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000ca40: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000ca44: 02 80 00 04 be 4000ca54 <== NOT EXECUTED 4000ca48: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 4000ca4c: 10 80 00 24 b 4000cadc <== NOT EXECUTED 4000ca50: b8 10 00 08 mov %o0, %i4 <== NOT EXECUTED 4000ca54: 10 80 00 0a b 4000ca7c <== NOT EXECUTED 4000ca58: b8 10 00 08 mov %o0, %i4 <== 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; 4000ca5c: c0 24 20 18 clr [ %l0 + 0x18 ] temp_mt_entry->mt_fs_root.handlers = NULL; 4000ca60: c0 24 20 1c clr [ %l0 + 0x1c ] temp_mt_entry->mt_fs_root.ops = NULL; 4000ca64: c0 24 20 20 clr [ %l0 + 0x20 ] temp_mt_entry->mt_point_node.node_access = NULL; 4000ca68: c0 24 20 08 clr [ %l0 + 8 ] temp_mt_entry->mt_point_node.handlers = NULL; 4000ca6c: c0 24 20 0c clr [ %l0 + 0xc ] temp_mt_entry->mt_point_node.ops = NULL; 4000ca70: c0 24 20 10 clr [ %l0 + 0x10 ] temp_mt_entry->mt_point_node.mt_entry = NULL; 4000ca74: c0 24 20 14 clr [ %l0 + 0x14 ] 4000ca78: b8 10 20 00 clr %i4 } if ( fs_ops->fsmount_me_h( temp_mt_entry ) ) { 4000ca7c: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 4000ca80: 9f c0 40 00 call %g1 4000ca84: 90 10 00 10 mov %l0, %o0 4000ca88: 80 a2 20 00 cmp %o0, 0 4000ca8c: 02 80 00 09 be 4000cab0 4000ca90: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* try to undo the mount operation */ if ( loc.ops->unmount_h ) { 4000ca94: c2 00 60 28 ld [ %g1 + 0x28 ], %g1 <== NOT EXECUTED 4000ca98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000ca9c: 02 80 00 10 be 4000cadc <== NOT EXECUTED 4000caa0: 01 00 00 00 nop <== NOT EXECUTED loc.ops->unmount_h( temp_mt_entry ); 4000caa4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000caa8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000caac: 30 80 00 0c b,a 4000cadc <== NOT EXECUTED /* * Add the mount table entry to the mount table chain */ Chain_Append( &rtems_filesystem_mount_table_control, &temp_mt_entry->Node ); 4000cab0: 11 10 00 68 sethi %hi(0x4001a000), %o0 4000cab4: 92 10 00 10 mov %l0, %o1 4000cab8: 7f ff ea d2 call 40007600 <_Chain_Append> 4000cabc: 90 12 21 a8 or %o0, 0x1a8, %o0 if ( mt_entry ) 4000cac0: 80 a4 60 00 cmp %l1, 0 4000cac4: 02 80 00 03 be 4000cad0 4000cac8: b0 10 20 00 clr %i0 *mt_entry = temp_mt_entry; 4000cacc: e0 24 40 00 st %l0, [ %l1 ] 4000cad0: 81 c7 e0 08 ret 4000cad4: 81 e8 00 00 restore 4000cad8: b8 10 20 00 clr %i4 <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000cadc: 7f ff d9 55 call 40003030 <== NOT EXECUTED 4000cae0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED if ( loc_to_free ) 4000cae4: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 4000cae8: 02 80 00 0c be 4000cb18 <== NOT EXECUTED 4000caec: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( loc_to_free ); 4000caf0: c2 07 20 08 ld [ %i4 + 8 ], %g1 <== NOT EXECUTED 4000caf4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000caf8: 02 80 00 08 be 4000cb18 <== NOT EXECUTED 4000cafc: 01 00 00 00 nop <== NOT EXECUTED 4000cb00: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4000cb04: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000cb08: 02 80 00 04 be 4000cb18 <== NOT EXECUTED 4000cb0c: 01 00 00 00 nop <== NOT EXECUTED 4000cb10: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000cb14: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 4000cb18: 81 c7 e0 08 ret <== NOT EXECUTED 4000cb1c: 91 e8 3f ff restore %g0, -1, %o0 <== 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; 4000cb20: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== 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; 4000cb24: c4 24 20 0c st %g2, [ %l0 + 0xc ] <== NOT EXECUTED temp_mt_entry->mt_point_node.ops = loc.ops; temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry; 4000cb28: c4 07 bf f4 ld [ %fp + -12 ], %g2 <== 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 ){ 4000cb2c: c6 00 60 20 ld [ %g1 + 0x20 ], %g3 <== 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; 4000cb30: c8 24 20 08 st %g4, [ %l0 + 8 ] <== NOT EXECUTED temp_mt_entry->mt_point_node.handlers = loc.handlers; temp_mt_entry->mt_point_node.ops = loc.ops; temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry; 4000cb34: c4 24 20 14 st %g2, [ %l0 + 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 ){ 4000cb38: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4000cb3c: 12 bf ff bf bne 4000ca38 <== NOT EXECUTED 4000cb40: c2 24 20 10 st %g1, [ %l0 + 0x10 ] <== NOT EXECUTED 4000cb44: 30 bf ff b9 b,a 4000ca28 <== NOT EXECUTED 40003608 : */ int newlib_free_buffers( FILE *fp ) { 40003608: 9d e3 bf 98 save %sp, -104, %sp switch ( fileno(fp) ) { 4000360c: 40 00 2c 57 call 4000e768 40003610: 90 10 00 18 mov %i0, %o0 40003614: 80 a2 20 02 cmp %o0, 2 40003618: 18 80 00 0e bgu 40003650 4000361c: 01 00 00 00 nop case 0: case 1: case 2: if (fp->_flags & __SMBF) { 40003620: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 40003624: 80 88 60 80 btst 0x80, %g1 40003628: 02 80 00 0c be 40003658 4000362c: 01 00 00 00 nop free( fp->_bf._base ); 40003630: 7f ff fe 80 call 40003030 40003634: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 fp->_flags &= ~__SMBF; 40003638: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 4000363c: c0 26 20 10 clr [ %i0 + 0x10 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 40003640: 82 08 7f 7f and %g1, -129, %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 40003644: c0 26 00 00 clr [ %i0 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 40003648: 10 80 00 04 b 40003658 4000364c: c2 36 20 0c sth %g1, [ %i0 + 0xc ] fp->_bf._base = fp->_p = (unsigned char *) NULL; } break; default: fclose(fp); 40003650: 40 00 2b cc call 4000e580 <== NOT EXECUTED 40003654: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 40003658: 81 c7 e0 08 ret 4000365c: 91 e8 20 00 restore %g0, 0, %o0 40003730 : rtems_device_driver null_initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *pargp ) { 40003730: 9d e3 bf 98 save %sp, -104, %sp rtems_device_driver status; if ( !initialized ) { 40003734: 05 10 00 75 sethi %hi(0x4001d400), %g2 40003738: c2 48 a2 e4 ldsb [ %g2 + 0x2e4 ], %g1 ! 4001d6e4 4000373c: 80 a0 60 00 cmp %g1, 0 40003740: 12 80 00 0f bne 4000377c 40003744: 82 10 20 01 mov 1, %g1 initialized = 1; status = rtems_io_register_name( 40003748: 11 10 00 6c sethi %hi(0x4001b000), %o0 ) { rtems_device_driver status; if ( !initialized ) { initialized = 1; 4000374c: c2 28 a2 e4 stb %g1, [ %g2 + 0x2e4 ] status = rtems_io_register_name( 40003750: 90 12 20 00 mov %o0, %o0 40003754: 92 10 00 18 mov %i0, %o1 40003758: 40 00 00 4e call 40003890 4000375c: 94 10 20 00 clr %o2 "/dev/null", major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) 40003760: 80 a2 20 00 cmp %o0, 0 40003764: 02 80 00 05 be 40003778 40003768: 03 10 00 76 sethi %hi(0x4001d800), %g1 rtems_fatal_error_occurred(status); 4000376c: 40 00 12 94 call 400081bc <== NOT EXECUTED 40003770: 01 00 00 00 nop <== NOT EXECUTED NULL_major = major; 40003774: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 40003778: f0 20 60 64 st %i0, [ %g1 + 0x64 ] ! 4001d864 } return RTEMS_SUCCESSFUL; } 4000377c: 81 c7 e0 08 ret 40003780: 91 e8 20 00 restore %g0, 0, %o0 4000370c : void *pargp ) { rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp; if ( rw_args ) 4000370c: 80 a2 a0 00 cmp %o2, 0 40003710: 02 80 00 04 be 40003720 40003714: 01 00 00 00 nop rw_args->bytes_moved = rw_args->count; 40003718: c2 02 a0 0c ld [ %o2 + 0xc ], %g1 <== NOT EXECUTED 4000371c: c2 22 a0 14 st %g1, [ %o2 + 0x14 ] <== NOT EXECUTED return NULL_SUCCESSFUL; } 40003720: 81 c3 e0 08 retl 40003724: 90 10 20 00 clr %o0 40003864 : int open( const char *pathname, int flags, ... ) { 40003864: 9d e3 bf 80 save %sp, -128, %sp 40003868: f6 27 a0 50 st %i3, [ %fp + 0x50 ] 4000386c: f8 27 a0 54 st %i4, [ %fp + 0x54 ] 40003870: fa 27 a0 58 st %i5, [ %fp + 0x58 ] 40003874: f4 27 a0 4c st %i2, [ %fp + 0x4c ] /* * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; 40003878: 82 06 60 01 add %i1, 1, %g1 if ( ( status & _FREAD ) == _FREAD ) eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 4000387c: 80 88 60 02 btst 2, %g1 * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; if ( ( status & _FREAD ) == _FREAD ) 40003880: 82 08 60 01 and %g1, 1, %g1 eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 40003884: 02 80 00 03 be 40003890 40003888: a1 28 60 02 sll %g1, 2, %l0 eval_flags |= RTEMS_LIBIO_PERMS_WRITE; 4000388c: a0 14 20 02 or %l0, 2, %l0 va_start(ap, flags); mode = va_arg( ap, int ); 40003890: 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 ) { 40003894: 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(); 40003898: 40 00 23 b3 call 4000c764 4000389c: c2 27 bf f4 st %g1, [ %fp + -12 ] if ( iop == 0 ) { 400038a0: ba 92 20 00 orcc %o0, 0, %i5 400038a4: 02 80 00 98 be 40003b04 400038a8: 92 10 00 10 mov %l0, %o1 /* * See if the file exists. */ status = rtems_filesystem_evaluate_path( 400038ac: 90 10 00 18 mov %i0, %o0 400038b0: a0 07 bf e4 add %fp, -28, %l0 400038b4: 96 10 20 01 mov 1, %o3 400038b8: 7f ff fd 58 call 40002e18 400038bc: 94 10 00 10 mov %l0, %o2 pathname, eval_flags, &loc, TRUE ); if ( status == -1 ) { 400038c0: 80 a2 3f ff cmp %o0, -1 400038c4: 12 80 00 28 bne 40003964 400038c8: 82 0e 6a 00 and %i1, 0xa00, %g1 if ( errno != ENOENT ) { 400038cc: 40 00 2a d7 call 4000e428 <__errno> 400038d0: 01 00 00 00 nop 400038d4: c2 02 00 00 ld [ %o0 ], %g1 400038d8: 80 a0 60 02 cmp %g1, 2 400038dc: 02 80 00 06 be 400038f4 400038e0: 80 8e 62 00 btst 0x200, %i1 rc = errno; 400038e4: 40 00 2a d1 call 4000e428 <__errno> <== NOT EXECUTED 400038e8: b6 10 20 00 clr %i3 <== NOT EXECUTED 400038ec: 10 80 00 71 b 40003ab0 <== NOT EXECUTED 400038f0: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED goto done; } /* If the file does not exist and we are not trying to create it--> error */ if ( !(flags & O_CREAT) ) { 400038f4: b8 10 20 02 mov 2, %i4 400038f8: 02 80 00 71 be 40003abc 400038fc: b6 10 20 00 clr %i3 rc = ENOENT; goto done; } /* Create the node for the new regular file */ rc = mknod( pathname, S_IFREG | mode, 0LL ); 40003900: 13 3f ff e0 sethi %hi(0xffff8000), %o1 <== NOT EXECUTED 40003904: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003908: 92 16 80 09 or %i2, %o1, %o1 <== NOT EXECUTED 4000390c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40003910: 93 2a 60 10 sll %o1, 0x10, %o1 <== NOT EXECUTED 40003914: 96 10 20 00 clr %o3 <== NOT EXECUTED 40003918: 7f ff fe c7 call 40003434 <== NOT EXECUTED 4000391c: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED if ( rc ) { 40003920: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003924: 02 80 00 06 be 4000393c <== NOT EXECUTED 40003928: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED rc = errno; 4000392c: 40 00 2a bf call 4000e428 <__errno> <== NOT EXECUTED 40003930: 01 00 00 00 nop <== NOT EXECUTED 40003934: 10 80 00 5f b 40003ab0 <== NOT EXECUTED 40003938: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED goto done; } /* Sanity check to see if the file name exists after the mknod() */ status = rtems_filesystem_evaluate_path( pathname, 0x0, &loc, TRUE ); 4000393c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003940: 92 10 20 00 clr %o1 <== NOT EXECUTED 40003944: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40003948: 7f ff fd 34 call 40002e18 <== NOT EXECUTED 4000394c: b8 10 20 0d mov 0xd, %i4 <== NOT EXECUTED if ( status != 0 ) { /* The file did not exist */ 40003950: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003954: 12 80 00 5a bne 40003abc <== NOT EXECUTED 40003958: b6 10 20 00 clr %i3 <== NOT EXECUTED /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 4000395c: 10 80 00 07 b 40003978 <== NOT EXECUTED 40003960: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED if ( status != 0 ) { /* The file did not exist */ rc = EACCES; goto done; } } else if ((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) { 40003964: b6 10 00 10 mov %l0, %i3 40003968: 80 a0 6a 00 cmp %g1, 0xa00 4000396c: 02 80 00 54 be 40003abc 40003970: b8 10 20 11 mov 0x11, %i4 /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40003974: c2 07 bf e8 ld [ %fp + -24 ], %g1 iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 40003978: e0 07 60 0c ld [ %i5 + 0xc ], %l0 /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 4000397c: c2 27 60 30 st %g1, [ %i5 + 0x30 ] iop->file_info = loc.node_access; 40003980: c2 07 bf e4 ld [ %fp + -28 ], %g1 iop->flags |= rtems_libio_fcntl_flags( flags ); 40003984: 90 10 00 19 mov %i1, %o0 40003988: 40 00 23 ad call 4000c83c 4000398c: c2 27 60 2c st %g1, [ %i5 + 0x2c ] 40003990: 90 12 00 10 or %o0, %l0, %o0 iop->pathinfo = loc; 40003994: 94 10 20 10 mov 0x10, %o2 * returned by successful path evaluation. */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 40003998: d0 27 60 0c st %o0, [ %i5 + 0xc ] iop->pathinfo = loc; 4000399c: a0 07 bf e4 add %fp, -28, %l0 400039a0: 90 07 60 10 add %i5, 0x10, %o0 400039a4: 40 00 2c 76 call 4000eb7c 400039a8: 92 10 00 10 mov %l0, %o1 if ( !iop->handlers->open_h ) { 400039ac: c2 07 60 30 ld [ %i5 + 0x30 ], %g1 400039b0: b8 10 20 86 mov 0x86, %i4 400039b4: c2 00 40 00 ld [ %g1 ], %g1 400039b8: 80 a0 60 00 cmp %g1, 0 400039bc: 02 80 00 40 be 40003abc 400039c0: b6 10 00 10 mov %l0, %i3 rc = ENOTSUP; goto done; } rc = (*iop->handlers->open_h)( iop, pathname, flags, mode ); 400039c4: 92 10 00 18 mov %i0, %o1 400039c8: 96 10 00 1a mov %i2, %o3 400039cc: 90 10 00 1d mov %i5, %o0 400039d0: 9f c0 40 00 call %g1 400039d4: 94 10 00 19 mov %i1, %o2 if ( rc ) 400039d8: b8 92 20 00 orcc %o0, 0, %i4 400039dc: 12 80 00 36 bne 40003ab4 400039e0: 80 a7 20 00 cmp %i4, 0 /* * Optionally truncate the file. */ if ( (flags & O_TRUNC) == O_TRUNC ) { 400039e4: 80 8e 64 00 btst 0x400, %i1 400039e8: 02 80 00 4c be 40003b18 400039ec: 03 10 00 67 sethi %hi(0x40019c00), %g1 rc = ftruncate( iop - rtems_libio_iops, 0 ); 400039f0: 21 10 00 67 sethi %hi(0x40019c00), %l0 <== NOT EXECUTED 400039f4: c4 04 20 d8 ld [ %l0 + 0xd8 ], %g2 ! 40019cd8 <== NOT EXECUTED 400039f8: 92 10 20 00 clr %o1 <== NOT EXECUTED 400039fc: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 40003a00: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 40003a04: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 40003a08: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40003a0c: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40003a10: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 40003a14: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40003a18: 83 2a 20 0c sll %o0, 0xc, %g1 <== NOT EXECUTED 40003a1c: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 40003a20: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 40003a24: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 40003a28: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40003a2c: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 40003a30: 40 00 22 83 call 4000c43c <== NOT EXECUTED 40003a34: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED if ( rc ) { 40003a38: b8 92 20 00 orcc %o0, 0, %i4 <== NOT EXECUTED 40003a3c: 02 80 00 37 be 40003b18 <== NOT EXECUTED 40003a40: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED if(errno) rc = errno; 40003a44: 40 00 2a 79 call 4000e428 <__errno> <== NOT EXECUTED 40003a48: 01 00 00 00 nop <== NOT EXECUTED 40003a4c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40003a50: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003a54: 02 80 00 06 be 40003a6c <== NOT EXECUTED 40003a58: c4 04 20 d8 ld [ %l0 + 0xd8 ], %g2 <== NOT EXECUTED 40003a5c: 40 00 2a 73 call 4000e428 <__errno> <== NOT EXECUTED 40003a60: 01 00 00 00 nop <== NOT EXECUTED 40003a64: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED close( iop - rtems_libio_iops ); 40003a68: c4 04 20 d8 ld [ %l0 + 0xd8 ], %g2 <== NOT EXECUTED 40003a6c: b6 10 20 00 clr %i3 <== NOT EXECUTED 40003a70: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 40003a74: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 40003a78: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 40003a7c: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40003a80: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40003a84: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 40003a88: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40003a8c: 83 2a 20 0c sll %o0, 0xc, %g1 <== NOT EXECUTED 40003a90: ba 10 20 00 clr %i5 <== NOT EXECUTED 40003a94: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 40003a98: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 40003a9c: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 40003aa0: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40003aa4: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 40003aa8: 40 00 22 33 call 4000c374 <== NOT EXECUTED 40003aac: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED */ done: va_end(ap); if ( rc ) { 40003ab0: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40003ab4: 02 80 00 19 be 40003b18 <== NOT EXECUTED 40003ab8: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED if ( iop ) 40003abc: 80 a7 60 00 cmp %i5, 0 40003ac0: 02 80 00 05 be 40003ad4 40003ac4: 80 a6 e0 00 cmp %i3, 0 rtems_libio_free( iop ); 40003ac8: 40 00 23 10 call 4000c708 40003acc: 90 10 00 1d mov %i5, %o0 if ( loc_to_free ) 40003ad0: 80 a6 e0 00 cmp %i3, 0 40003ad4: 02 80 00 0c be 40003b04 40003ad8: 01 00 00 00 nop rtems_filesystem_freenode( loc_to_free ); 40003adc: c2 06 e0 08 ld [ %i3 + 8 ], %g1 <== NOT EXECUTED 40003ae0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003ae4: 02 80 00 08 be 40003b04 <== NOT EXECUTED 40003ae8: 01 00 00 00 nop <== NOT EXECUTED 40003aec: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40003af0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003af4: 02 80 00 04 be 40003b04 <== NOT EXECUTED 40003af8: 01 00 00 00 nop <== NOT EXECUTED 40003afc: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003b00: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( rc ); 40003b04: 40 00 2a 49 call 4000e428 <__errno> 40003b08: b0 10 3f ff mov -1, %i0 40003b0c: f8 22 00 00 st %i4, [ %o0 ] 40003b10: 81 c7 e0 08 ret 40003b14: 81 e8 00 00 restore } return iop - rtems_libio_iops; 40003b18: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 40003b1c: 86 27 40 03 sub %i5, %g3, %g3 40003b20: 87 38 e0 02 sra %g3, 2, %g3 40003b24: 83 28 e0 02 sll %g3, 2, %g1 40003b28: 85 28 e0 06 sll %g3, 6, %g2 40003b2c: 84 20 80 01 sub %g2, %g1, %g2 40003b30: 83 28 a0 06 sll %g2, 6, %g1 40003b34: 82 20 40 02 sub %g1, %g2, %g1 40003b38: 85 28 60 0c sll %g1, 0xc, %g2 40003b3c: 82 00 40 02 add %g1, %g2, %g1 40003b40: 82 00 40 03 add %g1, %g3, %g1 40003b44: 83 28 60 04 sll %g1, 4, %g1 40003b48: 82 20 40 03 sub %g1, %g3, %g1 40003b4c: 83 28 60 02 sll %g1, 2, %g1 40003b50: b0 20 c0 01 sub %g3, %g1, %i0 } 40003b54: 81 c7 e0 08 ret 40003b58: 81 e8 00 00 restore 400037ec : /* * This is a replaceable stub */ void open_dev_console(void) { 400037ec: 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) { 400037f0: 31 10 00 5f sethi %hi(0x40017c00), %i0 400037f4: 92 10 20 00 clr %o1 400037f8: 90 16 23 e8 or %i0, 0x3e8, %o0 400037fc: 40 00 00 1a call 40003864 40003800: 94 10 20 00 clr %o2 40003804: 80 a2 3f ff cmp %o0, -1 40003808: 02 80 00 15 be 4000385c 4000380c: 90 16 23 e8 or %i0, 0x3e8, %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) 40003810: 92 10 20 01 mov 1, %o1 40003814: 40 00 00 14 call 40003864 40003818: 94 10 20 00 clr %o2 4000381c: 80 a2 3f ff cmp %o0, -1 40003820: 32 80 00 06 bne,a 40003838 40003824: 90 16 23 e8 or %i0, 0x3e8, %o0 rtems_fatal_error_occurred( error_code | '1' ); 40003828: 11 14 d5 11 sethi %hi(0x53544400), %o0 <== NOT EXECUTED 4000382c: 40 00 0e db call 40007398 <== NOT EXECUTED 40003830: 90 12 20 31 or %o0, 0x31, %o0 ! 53544431 <== NOT EXECUTED if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1) 40003834: 90 16 23 e8 or %i0, 0x3e8, %o0 <== NOT EXECUTED 40003838: 92 10 20 01 mov 1, %o1 4000383c: 40 00 00 0a call 40003864 40003840: 94 10 20 00 clr %o2 40003844: 80 a2 3f ff cmp %o0, -1 40003848: 12 80 00 05 bne 4000385c 4000384c: 31 14 d5 11 sethi %hi(0x53544400), %i0 rtems_fatal_error_occurred( error_code | '2' ); 40003850: b0 16 20 32 or %i0, 0x32, %i0 ! 53544432 <== NOT EXECUTED 40003854: 40 00 0e d1 call 40007398 <== NOT EXECUTED 40003858: 81 e8 00 00 restore <== NOT EXECUTED 4000385c: 81 c7 e0 08 ret 40003860: 81 e8 00 00 restore 40018158 : * open a directory. */ DIR * opendir(name) const char *name; { 40018158: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register DIR *dirp; register int fd; if ((fd = open(name, 0)) == -1) 4001815c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40018160: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018164: 7f ff ba 7f call 40006b60 <== NOT EXECUTED 40018168: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001816c: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40018170: 02 80 00 18 be 400181d0 <== NOT EXECUTED 40018174: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return NULL; if (fcntl(fd, F_SETFD, 1) == -1 || 40018178: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 4001817c: 40 00 22 75 call 40020b50 <== NOT EXECUTED 40018180: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40018184: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40018188: 02 80 00 10 be 400181c8 <== NOT EXECUTED 4001818c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018190: 7f ff b7 e3 call 4000611c <== NOT EXECUTED 40018194: 90 10 20 18 mov 0x18, %o0 <== NOT EXECUTED 40018198: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001819c: 22 80 00 0b be,a 400181c8 <== NOT EXECUTED 400181a0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400181a4: 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); 400181a8: 7f ff b7 dd call 4000611c <== NOT EXECUTED 400181ac: 90 10 22 00 mov 0x200, %o0 <== NOT EXECUTED dirp->dd_len = 512; 400181b0: 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); 400181b4: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED dirp->dd_len = 512; if (dirp->dd_buf == NULL) { 400181b8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400181bc: 12 80 00 07 bne 400181d8 <== NOT EXECUTED 400181c0: c2 26 20 10 st %g1, [ %i0 + 0x10 ] <== NOT EXECUTED close (fd); 400181c4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400181c8: 7f ff b5 ef call 40005984 <== NOT EXECUTED 400181cc: b0 10 20 00 clr %i0 <== NOT EXECUTED 400181d0: 81 c7 e0 08 ret <== NOT EXECUTED 400181d4: 81 e8 00 00 restore <== NOT EXECUTED return NULL; } dirp->dd_fd = fd; 400181d8: e0 26 00 00 st %l0, [ %i0 ] <== NOT EXECUTED dirp->dd_loc = 0; 400181dc: c0 26 20 04 clr [ %i0 + 4 ] <== NOT EXECUTED dirp->dd_seek = 0; 400181e0: c0 26 20 14 clr [ %i0 + 0x14 ] <== NOT EXECUTED /* * Set up seek point for rewinddir. */ return dirp; } 400181e4: 81 c7 e0 08 ret <== NOT EXECUTED 400181e8: 81 e8 00 00 restore <== NOT EXECUTED 40004598 : /* * Handle output processing */ static void oproc (unsigned char c, struct rtems_termios_tty *tty) { 40004598: 9d e3 bf 98 save %sp, -104, %sp int i; if (tty->termios.c_oflag & OPOST) { 4000459c: c8 06 60 34 ld [ %i1 + 0x34 ], %g4 400045a0: 80 89 20 01 btst 1, %g4 400045a4: 02 80 00 59 be 40004708 400045a8: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] switch (c) { 400045ac: 82 0e 20 ff and %i0, 0xff, %g1 400045b0: 80 a0 60 09 cmp %g1, 9 400045b4: 22 80 00 2b be,a 40004660 400045b8: c6 06 60 28 ld [ %i1 + 0x28 ], %g3 400045bc: 18 80 00 07 bgu 400045d8 400045c0: 80 a0 60 0a cmp %g1, 0xa 400045c4: 80 a0 60 08 cmp %g1, 8 <== NOT EXECUTED 400045c8: 12 80 00 3c bne 400046b8 <== NOT EXECUTED 400045cc: 80 89 20 02 btst 2, %g4 <== NOT EXECUTED } tty->column += i; break; case '\b': if (tty->column > 0) 400045d0: 10 80 00 35 b 400046a4 <== NOT EXECUTED 400045d4: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED oproc (unsigned char c, struct rtems_termios_tty *tty) { int i; if (tty->termios.c_oflag & OPOST) { switch (c) { 400045d8: 02 80 00 06 be 400045f0 400045dc: 80 a0 60 0d cmp %g1, 0xd 400045e0: 32 80 00 36 bne,a 400046b8 400045e4: 80 89 20 02 btst 2, %g4 tty->column = 0; } break; case '\r': if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0)) 400045e8: 10 80 00 10 b 40004628 <== NOT EXECUTED 400045ec: 80 89 20 10 btst 0x10, %g4 <== NOT EXECUTED int i; if (tty->termios.c_oflag & OPOST) { switch (c) { case '\n': if (tty->termios.c_oflag & ONLRET) 400045f0: 80 89 20 20 btst 0x20, %g4 400045f4: 32 80 00 02 bne,a 400045fc 400045f8: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED tty->column = 0; if (tty->termios.c_oflag & ONLCR) { 400045fc: c2 06 60 34 ld [ %i1 + 0x34 ], %g1 40004600: 80 88 60 04 btst 4, %g1 40004604: 02 80 00 42 be 4000470c 40004608: 94 10 00 19 mov %i1, %o2 rtems_termios_puts ("\r", 1, tty); 4000460c: 11 10 00 60 sethi %hi(0x40018000), %o0 40004610: 92 10 20 01 mov 1, %o1 40004614: 90 12 22 f0 or %o0, 0x2f0, %o0 40004618: 7f ff ff 94 call 40004468 4000461c: 94 10 00 19 mov %i1, %o2 c = '\n'; if (tty->termios.c_oflag & ONLRET) tty->column = 0; break; } tty->column = 0; 40004620: 10 80 00 3a b 40004708 40004624: c0 26 60 28 clr [ %i1 + 0x28 ] tty->column = 0; } break; case '\r': if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0)) 40004628: 02 80 00 06 be 40004640 <== NOT EXECUTED 4000462c: 80 89 20 08 btst 8, %g4 <== NOT EXECUTED 40004630: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40004634: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004638: 02 80 00 17 be 40004694 <== NOT EXECUTED 4000463c: 80 89 20 08 btst 8, %g4 <== NOT EXECUTED return; if (tty->termios.c_oflag & OCRNL) { 40004640: 22 80 00 32 be,a 40004708 <== NOT EXECUTED 40004644: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED c = '\n'; 40004648: 82 10 20 0a mov 0xa, %g1 <== NOT EXECUTED if (tty->termios.c_oflag & ONLRET) 4000464c: 80 89 20 20 btst 0x20, %g4 <== NOT EXECUTED 40004650: 02 80 00 2e be 40004708 <== NOT EXECUTED 40004654: c2 2f a0 44 stb %g1, [ %fp + 0x44 ] <== NOT EXECUTED tty->column = 0; break; } tty->column = 0; 40004658: 10 80 00 2c b 40004708 <== NOT EXECUTED 4000465c: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40004660: 05 00 00 06 sethi %hi(0x1800), %g2 40004664: 82 09 00 02 and %g4, %g2, %g1 40004668: 80 a0 40 02 cmp %g1, %g2 } tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); 4000466c: 84 08 e0 07 and %g3, 7, %g2 40004670: 82 10 20 08 mov 8, %g1 40004674: 92 20 40 02 sub %g1, %g2, %o1 if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40004678: 12 80 00 09 bne 4000469c 4000467c: 84 02 40 03 add %o1, %g3, %g2 tty->column += i; 40004680: c4 26 60 28 st %g2, [ %i1 + 0x28 ] rtems_termios_puts ( " ", i, tty); 40004684: 94 10 00 19 mov %i1, %o2 40004688: 11 10 00 60 sethi %hi(0x40018000), %o0 4000468c: 7f ff ff 77 call 40004468 40004690: 90 12 22 f8 or %o0, 0x2f8, %o0 ! 400182f8 40004694: 81 c7 e0 08 ret 40004698: 81 e8 00 00 restore return; } tty->column += i; 4000469c: 10 80 00 1b b 40004708 <== NOT EXECUTED 400046a0: c4 26 60 28 st %g2, [ %i1 + 0x28 ] <== NOT EXECUTED break; case '\b': if (tty->column > 0) 400046a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400046a8: 04 80 00 18 ble 40004708 <== NOT EXECUTED 400046ac: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED default: if (tty->termios.c_oflag & OLCUC) c = toupper(c); if (!iscntrl(c)) tty->column++; 400046b0: 10 80 00 16 b 40004708 <== NOT EXECUTED 400046b4: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED if (tty->column > 0) tty->column--; break; default: if (tty->termios.c_oflag & OLCUC) 400046b8: 02 80 00 0b be 400046e4 400046bc: c4 0f a0 44 ldub [ %fp + 0x44 ], %g2 c = toupper(c); 400046c0: 03 10 00 65 sethi %hi(0x40019400), %g1 <== NOT EXECUTED 400046c4: c2 00 60 d0 ld [ %g1 + 0xd0 ], %g1 ! 400194d0 <__ctype_ptr> <== NOT EXECUTED oproc (unsigned char c, struct rtems_termios_tty *tty) { int i; if (tty->termios.c_oflag & OPOST) { switch (c) { 400046c8: b0 0e 20 ff and %i0, 0xff, %i0 <== NOT EXECUTED tty->column--; break; default: if (tty->termios.c_oflag & OLCUC) c = toupper(c); 400046cc: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED 400046d0: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 400046d4: 32 80 00 02 bne,a 400046dc <== NOT EXECUTED 400046d8: b0 06 3f e0 add %i0, -32, %i0 <== NOT EXECUTED 400046dc: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] <== NOT EXECUTED if (!iscntrl(c)) 400046e0: c4 0f a0 44 ldub [ %fp + 0x44 ], %g2 <== NOT EXECUTED 400046e4: 03 10 00 65 sethi %hi(0x40019400), %g1 400046e8: c2 00 60 d0 ld [ %g1 + 0xd0 ], %g1 ! 400194d0 <__ctype_ptr> 400046ec: c2 08 40 02 ldub [ %g1 + %g2 ], %g1 400046f0: 80 88 60 20 btst 0x20, %g1 400046f4: 12 80 00 06 bne 4000470c 400046f8: 94 10 00 19 mov %i1, %o2 tty->column++; 400046fc: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 40004700: 82 00 60 01 inc %g1 40004704: c2 26 60 28 st %g1, [ %i1 + 0x28 ] break; } } rtems_termios_puts (&c, 1, tty); 40004708: 94 10 00 19 mov %i1, %o2 4000470c: 90 07 a0 44 add %fp, 0x44, %o0 40004710: 7f ff ff 56 call 40004468 40004714: 92 10 20 01 mov 1, %o1 40004718: 81 c7 e0 08 ret 4000471c: 81 e8 00 00 restore 40003e2c : } } /* vprintk */ void printk(const char *fmt, ...) { 40003e2c: 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 */ 40003e30: 92 07 a0 48 add %fp, 0x48, %o1 <== NOT EXECUTED } } /* vprintk */ void printk(const char *fmt, ...) { 40003e34: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 40003e38: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40003e3c: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40003e40: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40003e44: 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); 40003e48: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003e4c: 7f ff ff 4b call 40003b78 <== NOT EXECUTED 40003e50: d2 27 bf f4 st %o1, [ %fp + -12 ] <== NOT EXECUTED va_end(ap); /* clean up when done */ } /* printk */ 40003e54: 81 c7 e0 08 ret <== NOT EXECUTED 40003e58: 81 e8 00 00 restore <== NOT EXECUTED 400179ac : ssize_t read( int fd, void *buffer, size_t count ) { 400179ac: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 400179b0: 03 10 00 63 sethi %hi(0x40018c00), %g1 <== NOT EXECUTED 400179b4: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 ! 40018d4c <== NOT EXECUTED ssize_t read( int fd, void *buffer, size_t count ) { 400179b8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 400179bc: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 400179c0: 1a 80 00 0e bcc 400179f8 <== NOT EXECUTED 400179c4: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 400179c8: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400179cc: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 <== NOT EXECUTED 400179d0: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 400179d4: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 400179d8: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400179dc: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 400179e0: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400179e4: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 400179e8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 400179ec: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 400179f0: 12 80 00 06 bne 40017a08 <== NOT EXECUTED 400179f4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400179f8: 7f ff da 8c call 4000e428 <__errno> <== NOT EXECUTED 400179fc: 01 00 00 00 nop <== NOT EXECUTED 40017a00: 10 80 00 14 b 40017a50 <== NOT EXECUTED 40017a04: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 40017a08: 02 80 00 07 be 40017a24 <== NOT EXECUTED 40017a0c: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_libio_check_count( count ); 40017a10: 02 80 00 1b be 40017a7c <== NOT EXECUTED 40017a14: 90 10 20 00 clr %o0 <== NOT EXECUTED rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); 40017a18: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40017a1c: 32 80 00 06 bne,a 40017a34 <== NOT EXECUTED 40017a20: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40017a24: 7f ff da 81 call 4000e428 <__errno> <== NOT EXECUTED 40017a28: 01 00 00 00 nop <== NOT EXECUTED 40017a2c: 10 80 00 09 b 40017a50 <== NOT EXECUTED 40017a30: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED /* * Now process the read(). */ if ( !iop->handlers->read_h ) 40017a34: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 40017a38: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017a3c: 12 80 00 08 bne 40017a5c <== NOT EXECUTED 40017a40: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017a44: 7f ff da 79 call 4000e428 <__errno> <== NOT EXECUTED 40017a48: 01 00 00 00 nop <== NOT EXECUTED 40017a4c: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40017a50: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017a54: 10 80 00 0a b 40017a7c <== NOT EXECUTED 40017a58: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = (*iop->handlers->read_h)( iop, buffer, count ); 40017a5c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40017a60: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( rc > 0 ) 40017a64: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017a68: 04 80 00 05 ble 40017a7c <== NOT EXECUTED 40017a6c: 01 00 00 00 nop <== NOT EXECUTED iop->offset += rc; 40017a70: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 40017a74: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40017a78: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED return rc; } 40017a7c: 81 c7 e0 08 ret <== NOT EXECUTED 40017a80: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40018430 : /* * get next entry in a directory. */ struct dirent * readdir(dirp) register DIR *dirp; { 40018430: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register struct dirent *dp; if ( !dirp ) 40018434: a0 96 20 00 orcc %i0, 0, %l0 <== NOT EXECUTED 40018438: 02 80 00 2a be 400184e0 <== NOT EXECUTED 4001843c: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; for (;;) { if (dirp->dd_loc == 0) { 40018440: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 40018444: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018448: 32 80 00 0a bne,a 40018470 <== NOT EXECUTED 4001844c: c6 04 20 04 ld [ %l0 + 4 ], %g3 <== NOT EXECUTED dirp->dd_size = getdents (dirp->dd_fd, 40018450: d0 04 00 00 ld [ %l0 ], %o0 <== NOT EXECUTED 40018454: d2 04 20 0c ld [ %l0 + 0xc ], %o1 <== NOT EXECUTED 40018458: 40 00 22 84 call 40020e68 <== NOT EXECUTED 4001845c: d4 04 20 10 ld [ %l0 + 0x10 ], %o2 <== NOT EXECUTED dirp->dd_buf, dirp->dd_len); if (dirp->dd_size <= 0) 40018460: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018464: 04 80 00 1e ble 400184dc <== NOT EXECUTED 40018468: d0 24 20 08 st %o0, [ %l0 + 8 ] <== NOT EXECUTED return NULL; } if (dirp->dd_loc >= dirp->dd_size) { 4001846c: c6 04 20 04 ld [ %l0 + 4 ], %g3 <== NOT EXECUTED 40018470: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40018474: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40018478: 26 80 00 04 bl,a 40018488 <== NOT EXECUTED 4001847c: da 04 20 0c ld [ %l0 + 0xc ], %o5 <== NOT EXECUTED dirp->dd_loc = 0; 40018480: 10 bf ff f0 b 40018440 <== NOT EXECUTED 40018484: c0 24 20 04 clr [ %l0 + 4 ] <== NOT EXECUTED continue; } dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc); 40018488: b0 00 c0 0d add %g3, %o5, %i0 <== NOT EXECUTED if ((intptr_t)dp & 03) /* bogus pointer check */ 4001848c: 80 8e 20 03 btst 3, %i0 <== NOT EXECUTED 40018490: 32 80 00 14 bne,a 400184e0 <== NOT EXECUTED 40018494: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; if (dp->d_reclen <= 0 || 40018498: c4 16 20 08 lduh [ %i0 + 8 ], %g2 <== NOT EXECUTED 4001849c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400184a0: 02 80 00 0f be 400184dc <== NOT EXECUTED 400184a4: 88 00 80 03 add %g2, %g3, %g4 <== NOT EXECUTED 400184a8: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 <== NOT EXECUTED 400184ac: 82 00 60 01 inc %g1 <== NOT EXECUTED 400184b0: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 400184b4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400184b8: 34 80 00 0a bg,a 400184e0 <== NOT EXECUTED 400184bc: b0 10 20 00 clr %i0 <== NOT EXECUTED dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) return NULL; dirp->dd_loc += dp->d_reclen; 400184c0: c8 24 20 04 st %g4, [ %l0 + 4 ] <== NOT EXECUTED if (dp->d_ino == 0) 400184c4: c2 00 c0 0d ld [ %g3 + %o5 ], %g1 <== NOT EXECUTED 400184c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400184cc: 12 80 00 05 bne 400184e0 <== NOT EXECUTED 400184d0: 01 00 00 00 nop <== NOT EXECUTED if ( !dirp ) return NULL; for (;;) { if (dirp->dd_loc == 0) { 400184d4: 10 bf ff dc b 40018444 <== NOT EXECUTED 400184d8: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== 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) 400184dc: b0 10 20 00 clr %i0 <== NOT EXECUTED continue; return (dp); } } 400184e0: 81 c7 e0 08 ret <== NOT EXECUTED 400184e4: 81 e8 00 00 restore <== NOT EXECUTED 400031fc : void *realloc( void *ptr, size_t size ) { 400031fc: 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())) { 40003200: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40003204: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> <== NOT EXECUTED 40003208: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000320c: 12 80 00 0c bne 4000323c <== NOT EXECUTED 40003210: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED if (_Thread_Dispatch_disable_level > 0) 40003214: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40003218: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000321c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003220: 32 80 00 12 bne,a 40003268 <== NOT EXECUTED 40003224: b0 10 20 00 clr %i0 <== NOT EXECUTED return (void *) 0; if (_ISR_Nest_level > 0) 40003228: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000322c: c2 00 63 64 ld [ %g1 + 0x364 ], %g1 ! 40019f64 <_ISR_Nest_level> <== NOT EXECUTED 40003230: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003234: 12 80 00 34 bne 40003304 <== NOT EXECUTED 40003238: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED } /* * Continue with realloc(). */ if ( !ptr ) 4000323c: 12 80 00 06 bne 40003254 <== NOT EXECUTED 40003240: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED return malloc( size ); 40003244: 7f ff ff a3 call 400030d0 <== NOT EXECUTED 40003248: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000324c: 81 c7 e0 08 ret <== NOT EXECUTED 40003250: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( !size ) { 40003254: 12 80 00 07 bne 40003270 <== NOT EXECUTED 40003258: 23 10 00 67 sethi %hi(0x40019c00), %l1 <== NOT EXECUTED free( ptr ); 4000325c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003260: 7f ff ff 74 call 40003030 <== NOT EXECUTED 40003264: b0 10 20 00 clr %i0 <== NOT EXECUTED 40003268: 81 c7 e0 08 ret <== NOT EXECUTED 4000326c: 81 e8 00 00 restore <== NOT EXECUTED memcpy(np,ptr,size); free(ptr); return np; } #endif if ( _Protected_heap_Resize_block( &RTEMS_Malloc_Heap, ptr, size ) ) { 40003270: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40003274: 90 14 60 e4 or %l1, 0xe4, %o0 <== NOT EXECUTED 40003278: 40 00 17 fa call 40009260 <_Protected_heap_Resize_block> <== NOT EXECUTED 4000327c: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 40003280: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003284: 12 80 00 21 bne 40003308 <== NOT EXECUTED 40003288: 01 00 00 00 nop <== NOT EXECUTED return ptr; } new_area = malloc( size ); 4000328c: 7f ff ff 91 call 400030d0 <== NOT EXECUTED 40003290: 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 ) { 40003294: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 40003298: 02 80 00 1b be 40003304 <== NOT EXECUTED 4000329c: 90 14 60 e4 or %l1, 0xe4, %o0 <== NOT EXECUTED return (void *) 0; } if ( !_Protected_heap_Get_block_size(&RTEMS_Malloc_Heap, ptr, &old_size) ) { 400032a0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400032a4: 40 00 17 5d call 40009018 <_Protected_heap_Get_block_size> <== NOT EXECUTED 400032a8: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 400032ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400032b0: 12 80 00 08 bne 400032d0 <== NOT EXECUTED 400032b4: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED errno = EINVAL; 400032b8: 40 00 2c 5c call 4000e428 <__errno> <== NOT EXECUTED 400032bc: b0 10 20 00 clr %i0 <== NOT EXECUTED 400032c0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 400032c4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400032c8: 81 c7 e0 08 ret <== NOT EXECUTED 400032cc: 81 e8 00 00 restore <== NOT EXECUTED return (void *) 0; } memcpy( new_area, ptr, (size < old_size) ? size : old_size ); 400032d0: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 400032d4: 08 80 00 03 bleu 400032e0 <== NOT EXECUTED 400032d8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 400032dc: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED 400032e0: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 400032e4: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400032e8: 40 00 2e 25 call 4000eb7c <== NOT EXECUTED 400032ec: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED free( ptr ); 400032f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400032f4: 7f ff ff 4f call 40003030 <== NOT EXECUTED 400032f8: b0 10 00 10 mov %l0, %i0 <== NOT EXECUTED 400032fc: 81 c7 e0 08 ret <== NOT EXECUTED 40003300: 81 e8 00 00 restore <== NOT EXECUTED return new_area; 40003304: b0 10 20 00 clr %i0 <== NOT EXECUTED } 40003308: 81 c7 e0 08 ret <== NOT EXECUTED 4000330c: 81 e8 00 00 restore <== NOT EXECUTED 400184e8 : #include int rmdir( const char *pathname ) { 400184e8: 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 ); 400184ec: 92 10 20 00 clr %o1 <== NOT EXECUTED 400184f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400184f4: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 400184f8: 96 10 20 00 clr %o3 <== NOT EXECUTED 400184fc: 7f ff b5 81 call 40005b00 <== NOT EXECUTED 40018500: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 40018504: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018508: 32 80 00 11 bne,a 4001854c <== NOT EXECUTED 4001850c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 40018510: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 40018514: 7f ff b5 4e call 40005a4c <== NOT EXECUTED 40018518: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0) { 4001851c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018520: 02 80 00 0d be 40018554 <== NOT EXECUTED 40018524: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40018528: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001852c: 02 80 00 08 be 4001854c <== NOT EXECUTED 40018530: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40018534: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018538: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001853c: 02 80 00 04 be 4001854c <== NOT EXECUTED 40018540: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018544: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018548: 01 00 00 00 nop <== NOT EXECUTED 4001854c: 81 c7 e0 08 ret <== NOT EXECUTED 40018550: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify you can remove this node as a directory. */ if ( !loc.ops->node_type_h ){ 40018554: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 40018558: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001855c: 22 80 00 1e be,a 400185d4 <== NOT EXECUTED 40018560: c2 00 60 1c ld [ %g1 + 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 ){ 40018564: 9f c0 80 00 call %g2 <== NOT EXECUTED 40018568: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001856c: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40018570: 02 80 00 10 be 400185b0 <== NOT EXECUTED 40018574: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40018578: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001857c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018580: 02 80 00 08 be 400185a0 <== NOT EXECUTED 40018584: 01 00 00 00 nop <== NOT EXECUTED 40018588: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001858c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018590: 02 80 00 04 be 400185a0 <== NOT EXECUTED 40018594: 01 00 00 00 nop <== NOT EXECUTED 40018598: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001859c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 400185a0: 40 00 2a 15 call 40022df4 <__errno> <== NOT EXECUTED 400185a4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400185a8: 10 80 00 13 b 400185f4 <== NOT EXECUTED 400185ac: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ 400185b0: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 400185b4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400185b8: 12 80 00 12 bne 40018600 <== NOT EXECUTED 400185bc: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 400185c0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400185c4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400185c8: 02 80 00 08 be 400185e8 <== NOT EXECUTED 400185cc: 01 00 00 00 nop <== NOT EXECUTED 400185d0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400185d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400185d8: 02 80 00 04 be 400185e8 <== NOT EXECUTED 400185dc: 01 00 00 00 nop <== NOT EXECUTED 400185e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400185e4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 400185e8: 40 00 2a 03 call 40022df4 <__errno> <== NOT EXECUTED 400185ec: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400185f0: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400185f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400185f8: 81 c7 e0 08 ret <== NOT EXECUTED 400185fc: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.handlers->rmnod_h)( &loc ); 40018600: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018604: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40018608: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001860c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018610: 02 bf ff cf be 4001854c <== NOT EXECUTED 40018614: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40018618: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001861c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018620: 02 80 00 06 be 40018638 <== NOT EXECUTED 40018624: 01 00 00 00 nop <== NOT EXECUTED 40018628: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001862c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018630: 81 c7 e0 08 ret <== NOT EXECUTED 40018634: 81 e8 00 00 restore <== NOT EXECUTED return result; } 40018638: 81 c7 e0 08 ret <== NOT EXECUTED 4001863c: 81 e8 00 00 restore <== NOT EXECUTED 4000ddac : uint32_t rtems_assoc_local_by_remote_bitfield( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000ddac: 9d e3 bf 98 save %sp, -104, %sp 4000ddb0: a0 10 20 01 mov 1, %l0 4000ddb4: a4 10 00 18 mov %i0, %l2 4000ddb8: a2 10 20 00 clr %l1 4000ddbc: b0 10 20 00 clr %i0 uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { if (b & remote_value) 4000ddc0: 80 8c 00 19 btst %l0, %i1 4000ddc4: 22 80 00 07 be,a 4000dde0 4000ddc8: a2 04 60 01 inc %l1 local_value |= rtems_assoc_local_by_remote(ap, b); 4000ddcc: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000ddd0: 40 00 00 09 call 4000ddf4 <== NOT EXECUTED 4000ddd4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000ddd8: b0 16 00 08 or %i0, %o0, %i0 <== NOT EXECUTED ) { uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000dddc: a2 04 60 01 inc %l1 <== NOT EXECUTED 4000dde0: 80 a4 60 20 cmp %l1, 0x20 4000dde4: 12 bf ff f7 bne 4000ddc0 4000dde8: a1 2c 20 01 sll %l0, 1, %l0 if (b & remote_value) local_value |= rtems_assoc_local_by_remote(ap, b); } return local_value; } 4000ddec: 81 c7 e0 08 ret 4000ddf0: 81 e8 00 00 restore 4001652c : sprintf(bad_buffer, "< %" PRId32 "[0x%" PRIx32 " ] >", bad_value, bad_value); #else static char bad_buffer[32] = ""; #endif return bad_buffer; } 4001652c: 11 10 00 9d sethi %hi(0x40027400), %o0 <== NOT EXECUTED 40016530: 81 c3 e0 08 retl <== NOT EXECUTED 40016534: 90 12 21 a8 or %o0, 0x1a8, %o0 ! 400275a8 <== NOT EXECUTED 40012710 : const char *rtems_assoc_name_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 40012710: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 40012714: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40012718: 40 00 00 09 call 4001273c <== NOT EXECUTED 4001271c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED if (nap) 40012720: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40012724: 32 80 00 04 bne,a 40012734 <== NOT EXECUTED 40012728: f0 02 00 00 ld [ %o0 ], %i0 <== NOT EXECUTED return nap->name; return rtems_assoc_name_bad(local_value); 4001272c: 40 00 0f 80 call 4001652c <== NOT EXECUTED 40012730: 91 e8 00 19 restore %g0, %i1, %o0 <== NOT EXECUTED } 40012734: 81 c7 e0 08 ret <== NOT EXECUTED 40012738: 81 e8 00 00 restore <== NOT EXECUTED 4000e3a8 : const rtems_assoc_t *rtems_assoc_ptr_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 4000e3a8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000e3ac: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED 4000e3b0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000e3b4: 02 80 00 0e be 4000e3ec <== NOT EXECUTED 4000e3b8: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000e3bc: 13 10 00 61 sethi %hi(0x40018400), %o1 <== NOT EXECUTED 4000e3c0: 40 00 04 a8 call 4000f660 <== NOT EXECUTED 4000e3c4: 92 12 62 38 or %o1, 0x238, %o1 ! 40018638 <_CPU_Trap_slot_template+0x1a8> <== NOT EXECUTED 4000e3c8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000e3cc: 02 80 00 07 be 4000e3e8 <== NOT EXECUTED 4000e3d0: 84 10 00 18 mov %i0, %g2 <== NOT EXECUTED default_ap = ap++; 4000e3d4: 10 80 00 06 b 4000e3ec <== NOT EXECUTED 4000e3d8: 84 10 20 00 clr %g2 <== NOT EXECUTED for ( ; ap->name; ap++) if (ap->local_value == local_value) 4000e3dc: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000e3e0: 02 80 00 08 be 4000e400 <== NOT EXECUTED 4000e3e4: 01 00 00 00 nop <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000e3e8: b0 06 20 0c add %i0, 0xc, %i0 <== NOT EXECUTED 4000e3ec: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 4000e3f0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000e3f4: 32 bf ff fa bne,a 4000e3dc <== NOT EXECUTED 4000e3f8: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 4000e3fc: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED if (ap->local_value == local_value) return ap; return default_ap; } 4000e400: 81 c7 e0 08 ret <== NOT EXECUTED 4000e404: 81 e8 00 00 restore <== NOT EXECUTED 4000de1c : const rtems_assoc_t *rtems_assoc_ptr_by_remote( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000de1c: 9d e3 bf 98 save %sp, -104, %sp const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000de20: d0 06 00 00 ld [ %i0 ], %o0 4000de24: 80 a2 20 00 cmp %o0, 0 4000de28: 02 80 00 0e be 4000de60 4000de2c: 84 10 20 00 clr %g2 4000de30: 13 10 00 61 sethi %hi(0x40018400), %o1 4000de34: 40 00 06 0b call 4000f660 4000de38: 92 12 62 38 or %o1, 0x238, %o1 ! 40018638 <_CPU_Trap_slot_template+0x1a8> 4000de3c: 80 a2 20 00 cmp %o0, 0 4000de40: 02 80 00 07 be 4000de5c 4000de44: 84 10 00 18 mov %i0, %g2 default_ap = ap++; 4000de48: 10 80 00 06 b 4000de60 4000de4c: 84 10 20 00 clr %g2 for ( ; ap->name; ap++) if (ap->remote_value == remote_value) 4000de50: 80 a0 40 19 cmp %g1, %i1 4000de54: 02 80 00 08 be 4000de74 4000de58: 01 00 00 00 nop const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000de5c: b0 06 20 0c add %i0, 0xc, %i0 4000de60: c2 06 00 00 ld [ %i0 ], %g1 4000de64: 80 a0 60 00 cmp %g1, 0 4000de68: 32 bf ff fa bne,a 4000de50 4000de6c: c2 06 20 08 ld [ %i0 + 8 ], %g1 4000de70: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED if (ap->remote_value == remote_value) return ap; return default_ap; } 4000de74: 81 c7 e0 08 ret 4000de78: 81 e8 00 00 restore 4000de7c : uint32_t rtems_assoc_remote_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 4000de7c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 4000de80: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000de84: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000de88: 40 00 01 48 call 4000e3a8 <== NOT EXECUTED 4000de8c: b0 10 20 00 clr %i0 <== NOT EXECUTED if (nap) 4000de90: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000de94: 32 80 00 02 bne,a 4000de9c <== NOT EXECUTED 4000de98: f0 02 20 08 ld [ %o0 + 8 ], %i0 <== NOT EXECUTED return nap->remote_value; return 0; } 4000de9c: 81 c7 e0 08 ret <== NOT EXECUTED 4000dea0: 81 e8 00 00 restore <== NOT EXECUTED 40006b8c : rtems_name name, rtems_attribute attribute_set, uint32_t maximum_waiters, rtems_id *id ) { 40006b8c: 9d e3 bf 90 save %sp, -112, %sp Barrier_Control *the_barrier; CORE_barrier_Attributes the_attributes; if ( !rtems_is_name_valid( name ) ) 40006b90: a2 96 20 00 orcc %i0, 0, %l1 40006b94: 02 80 00 1b be 40006c00 40006b98: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 40006b9c: 80 a6 e0 00 cmp %i3, 0 40006ba0: 02 80 00 18 be 40006c00 40006ba4: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; /* Initialize core barrier attributes */ if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { 40006ba8: 80 8e 60 10 btst 0x10, %i1 40006bac: 02 80 00 06 be 40006bc4 40006bb0: 80 a6 a0 00 cmp %i2, 0 the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; if ( maximum_waiters == 0 ) 40006bb4: 02 80 00 13 be 40006c00 40006bb8: 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; 40006bbc: 10 80 00 04 b 40006bcc 40006bc0: c0 27 bf f0 clr [ %fp + -16 ] if ( maximum_waiters == 0 ) return RTEMS_INVALID_NUMBER; } else the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE; 40006bc4: 82 10 20 01 mov 1, %g1 40006bc8: c2 27 bf f0 st %g1, [ %fp + -16 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006bcc: 05 10 00 77 sethi %hi(0x4001dc00), %g2 40006bd0: c2 00 a1 c0 ld [ %g2 + 0x1c0 ], %g1 ! 4001ddc0 <_Thread_Dispatch_disable_level> the_attributes.maximum_count = maximum_waiters; 40006bd4: f4 27 bf f4 st %i2, [ %fp + -12 ] 40006bd8: 82 00 60 01 inc %g1 40006bdc: c2 20 a1 c0 st %g1, [ %g2 + 0x1c0 ] * 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 ); 40006be0: 21 10 00 77 sethi %hi(0x4001dc00), %l0 40006be4: 40 00 09 d5 call 40009338 <_Objects_Allocate> 40006be8: 90 14 20 28 or %l0, 0x28, %o0 ! 4001dc28 <_Barrier_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_barrier = _Barrier_Allocate(); if ( !the_barrier ) { 40006bec: b4 92 20 00 orcc %o0, 0, %i2 40006bf0: 12 80 00 06 bne 40006c08 40006bf4: 90 06 a0 14 add %i2, 0x14, %o0 _Thread_Enable_dispatch(); 40006bf8: 7f ff ff d8 call 40006b58 <_Thread_Enable_dispatch> 40006bfc: b0 10 20 05 mov 5, %i0 40006c00: 81 c7 e0 08 ret 40006c04: 81 e8 00 00 restore return RTEMS_TOO_MANY; } the_barrier->attribute_set = attribute_set; 40006c08: f2 26 a0 10 st %i1, [ %i2 + 0x10 ] _CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes ); 40006c0c: 40 00 07 17 call 40008868 <_CORE_barrier_Initialize> 40006c10: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006c14: 90 14 20 28 or %l0, 0x28, %o0 Objects_Name name ) { uint32_t index; index = _Objects_Get_index( the_object->id ); 40006c18: c6 06 a0 08 ld [ %i2 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006c1c: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 40006c20: 03 00 00 3f sethi %hi(0xfc00), %g1 40006c24: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40006c28: 82 08 c0 01 and %g3, %g1, %g1 40006c2c: 80 a0 40 02 cmp %g1, %g2 40006c30: 38 80 00 06 bgu,a 40006c48 40006c34: e2 26 a0 0c st %l1, [ %i2 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40006c38: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40006c3c: 83 28 60 02 sll %g1, 2, %g1 40006c40: 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; 40006c44: e2 26 a0 0c st %l1, [ %i2 + 0xc ] &_Barrier_Information, &the_barrier->Object, (Objects_Name) name ); *id = the_barrier->Object.id; 40006c48: c6 26 c0 00 st %g3, [ %i3 ] _Thread_Enable_dispatch(); 40006c4c: 7f ff ff c3 call 40006b58 <_Thread_Enable_dispatch> 40006c50: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 40006c54: 81 c7 e0 08 ret 40006c58: 81 e8 00 00 restore 40006c5c : */ rtems_status_code rtems_barrier_delete( rtems_id id ) { 40006c5c: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 40006c60: 21 10 00 77 sethi %hi(0x4001dc00), %l0 40006c64: 92 10 00 18 mov %i0, %o1 40006c68: 94 07 bf f4 add %fp, -12, %o2 40006c6c: 40 00 0a f7 call 40009848 <_Objects_Get> 40006c70: 90 14 20 28 or %l0, 0x28, %o0 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40006c74: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006c78: 80 a0 60 00 cmp %g1, 0 40006c7c: 02 80 00 07 be 40006c98 40006c80: b0 10 00 08 mov %o0, %i0 40006c84: 80 a0 60 02 cmp %g1, 2 40006c88: 08 80 00 22 bleu 40006d10 40006c8c: b0 10 20 04 mov 4, %i0 40006c90: 81 c7 e0 08 ret <== NOT EXECUTED 40006c94: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _CORE_barrier_Flush( 40006c98: 90 02 20 14 add %o0, 0x14, %o0 40006c9c: 92 10 20 00 clr %o1 40006ca0: 40 00 12 25 call 4000b534 <_Thread_queue_Flush> 40006ca4: 94 10 20 02 mov 2, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006ca8: 90 14 20 28 or %l0, 0x28, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40006cac: c2 06 20 08 ld [ %i0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006cb0: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40006cb4: 05 00 00 3f sethi %hi(0xfc00), %g2 40006cb8: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40006cbc: 82 08 40 02 and %g1, %g2, %g1 40006cc0: 80 a0 40 03 cmp %g1, %g3 40006cc4: 38 80 00 06 bgu,a 40006cdc 40006cc8: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40006ccc: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40006cd0: 83 28 60 02 sll %g1, 2, %g1 40006cd4: 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; 40006cd8: c0 26 20 0c clr [ %i0 + 0xc ] */ RTEMS_INLINE_ROUTINE void _Barrier_Free ( Barrier_Control *the_barrier ) { _Objects_Free( &_Barrier_Information, &the_barrier->Object ); 40006cdc: 40 00 0a 99 call 40009740 <_Objects_Free> 40006ce0: 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 ) 40006ce4: 03 10 00 77 sethi %hi(0x4001dc00), %g1 40006ce8: c4 00 61 c0 ld [ %g1 + 0x1c0 ], %g2 ! 4001ddc0 <_Thread_Dispatch_disable_level> 40006cec: b0 10 20 00 clr %i0 40006cf0: 84 00 bf ff add %g2, -1, %g2 40006cf4: c4 20 61 c0 st %g2, [ %g1 + 0x1c0 ] 40006cf8: c2 00 61 c0 ld [ %g1 + 0x1c0 ], %g1 40006cfc: 80 a0 60 00 cmp %g1, 0 40006d00: 12 80 00 04 bne 40006d10 40006d04: 01 00 00 00 nop _Thread_Dispatch(); 40006d08: 40 00 0f c4 call 4000ac18 <_Thread_Dispatch> 40006d0c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006d10: 81 c7 e0 08 ret 40006d14: 81 e8 00 00 restore 40006d50 : rtems_status_code rtems_barrier_release( rtems_id id, uint32_t *released ) { 40006d50: 9d e3 bf 90 save %sp, -112, %sp 40006d54: a0 10 00 18 mov %i0, %l0 Barrier_Control *the_barrier; Objects_Locations location; if ( !released ) 40006d58: 80 a6 60 00 cmp %i1, 0 40006d5c: 02 80 00 1f be 40006dd8 40006d60: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 40006d64: 11 10 00 77 sethi %hi(0x4001dc00), %o0 40006d68: 92 10 00 10 mov %l0, %o1 40006d6c: 90 12 20 28 or %o0, 0x28, %o0 40006d70: 40 00 0a b6 call 40009848 <_Objects_Get> 40006d74: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40006d78: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006d7c: 80 a0 60 00 cmp %g1, 0 40006d80: 02 80 00 07 be 40006d9c 40006d84: 92 10 00 10 mov %l0, %o1 40006d88: 80 a0 60 02 cmp %g1, 2 40006d8c: 08 80 00 13 bleu 40006dd8 40006d90: b0 10 20 04 mov 4, %i0 40006d94: 81 c7 e0 08 ret <== NOT EXECUTED 40006d98: 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 ); 40006d9c: 94 10 20 00 clr %o2 40006da0: 40 00 06 be call 40008898 <_CORE_barrier_Release> 40006da4: 90 02 20 14 add %o0, 0x14, %o0 40006da8: 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 ) 40006dac: 03 10 00 77 sethi %hi(0x4001dc00), %g1 40006db0: c4 00 61 c0 ld [ %g1 + 0x1c0 ], %g2 ! 4001ddc0 <_Thread_Dispatch_disable_level> 40006db4: b0 10 20 00 clr %i0 40006db8: 84 00 bf ff add %g2, -1, %g2 40006dbc: c4 20 61 c0 st %g2, [ %g1 + 0x1c0 ] 40006dc0: c2 00 61 c0 ld [ %g1 + 0x1c0 ], %g1 40006dc4: 80 a0 60 00 cmp %g1, 0 40006dc8: 12 80 00 04 bne 40006dd8 40006dcc: 01 00 00 00 nop _Thread_Dispatch(); 40006dd0: 40 00 0f 92 call 4000ac18 <_Thread_Dispatch> 40006dd4: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006dd8: 81 c7 e0 08 ret 40006ddc: 81 e8 00 00 restore 40006de0 : rtems_status_code rtems_barrier_wait( rtems_id id, rtems_interval timeout ) { 40006de0: 9d e3 bf 90 save %sp, -112, %sp 40006de4: 11 10 00 77 sethi %hi(0x4001dc00), %o0 40006de8: 92 10 00 18 mov %i0, %o1 40006dec: 90 12 20 28 or %o0, 0x28, %o0 40006df0: 40 00 0a 96 call 40009848 <_Objects_Get> 40006df4: 94 07 bf f4 add %fp, -12, %o2 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40006df8: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006dfc: 80 a0 60 00 cmp %g1, 0 40006e00: 02 80 00 07 be 40006e1c 40006e04: 96 10 00 19 mov %i1, %o3 40006e08: 80 a0 60 02 cmp %g1, 2 40006e0c: 08 80 00 17 bleu 40006e68 40006e10: 90 10 20 04 mov 4, %o0 40006e14: 10 80 00 15 b 40006e68 <== NOT EXECUTED 40006e18: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _CORE_barrier_Wait( 40006e1c: 90 02 20 14 add %o0, 0x14, %o0 40006e20: 92 10 00 18 mov %i0, %o1 40006e24: 94 10 20 01 mov 1, %o2 40006e28: 40 00 06 a7 call 400088c4 <_CORE_barrier_Wait> 40006e2c: 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 ) 40006e30: 03 10 00 77 sethi %hi(0x4001dc00), %g1 40006e34: c4 00 61 c0 ld [ %g1 + 0x1c0 ], %g2 ! 4001ddc0 <_Thread_Dispatch_disable_level> 40006e38: 84 00 bf ff add %g2, -1, %g2 40006e3c: c4 20 61 c0 st %g2, [ %g1 + 0x1c0 ] 40006e40: c2 00 61 c0 ld [ %g1 + 0x1c0 ], %g1 40006e44: 80 a0 60 00 cmp %g1, 0 40006e48: 12 80 00 05 bne 40006e5c 40006e4c: 03 10 00 77 sethi %hi(0x4001dc00), %g1 _Thread_Dispatch(); 40006e50: 40 00 0f 72 call 4000ac18 <_Thread_Dispatch> 40006e54: 01 00 00 00 nop TRUE, timeout, NULL ); _Thread_Enable_dispatch(); return _Barrier_Translate_core_barrier_return_code( 40006e58: 03 10 00 77 sethi %hi(0x4001dc00), %g1 40006e5c: c2 00 62 9c ld [ %g1 + 0x29c ], %g1 ! 4001de9c <_Thread_Executing> 40006e60: 40 00 1c 23 call 4000deec <_Barrier_Translate_core_barrier_return_code> 40006e64: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006e68: 81 c7 e0 08 ret 40006e6c: 91 e8 00 08 restore %g0, %o0, %o0 40005cb4 : rtems_status_code rtems_clock_get( rtems_clock_get_options option, void *time_buffer ) { 40005cb4: 9d e3 bf 68 save %sp, -152, %sp 40005cb8: 82 10 00 18 mov %i0, %g1 if ( !time_buffer ) 40005cbc: 80 a6 60 00 cmp %i1, 0 40005cc0: 02 80 00 47 be 40005ddc 40005cc4: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; switch ( option ) { 40005cc8: 80 a0 60 04 cmp %g1, 4 40005ccc: 18 80 00 44 bgu 40005ddc 40005cd0: b0 10 20 19 mov 0x19, %i0 40005cd4: 83 28 60 02 sll %g1, 2, %g1 40005cd8: 05 10 00 17 sethi %hi(0x40005c00), %g2 40005cdc: 84 10 a0 60 or %g2, 0x60, %g2 ! 40005c60 40005ce0: c2 00 80 01 ld [ %g2 + %g1 ], %g1 40005ce4: 81 c0 40 00 jmp %g1 40005ce8: 01 00 00 00 nop 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 ) 40005cec: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005cf0: c2 00 62 dc ld [ %g1 + 0x2dc ], %g1 ! 40019edc <_TOD_Is_set> 40005cf4: 80 a0 60 00 cmp %g1, 0 40005cf8: 22 80 00 39 be,a 40005ddc 40005cfc: b0 10 20 0b mov 0xb, %i0 return RTEMS_NOT_DEFINED; /* Obtain the current time */ _TOD_Get_timeval( &now ); 40005d00: a0 07 bf f0 add %fp, -16, %l0 40005d04: 7f ff ff dc call 40005c74 <_TOD_Get_timeval> 40005d08: 90 10 00 10 mov %l0, %o0 /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); 40005d0c: 92 07 bf cc add %fp, -52, %o1 40005d10: 40 00 23 96 call 4000eb68 40005d14: 90 10 00 10 mov %l0, %o0 tmbuf->month = time.tm_mon + 1; 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; 40005d18: 03 10 00 68 sethi %hi(0x4001a000), %g1 40005d1c: d2 00 60 7c ld [ %g1 + 0x7c ], %o1 ! 4001a07c <_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; 40005d20: c2 07 bf d8 ld [ %fp + -40 ], %g1 tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 40005d24: d0 07 bf f4 ld [ %fp + -12 ], %o0 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; 40005d28: c2 26 60 08 st %g1, [ %i1 + 8 ] tmbuf->hour = time.tm_hour; 40005d2c: c2 07 bf d4 ld [ %fp + -44 ], %g1 40005d30: c2 26 60 0c st %g1, [ %i1 + 0xc ] tmbuf->minute = time.tm_min; 40005d34: c2 07 bf d0 ld [ %fp + -48 ], %g1 40005d38: c2 26 60 10 st %g1, [ %i1 + 0x10 ] tmbuf->second = time.tm_sec; 40005d3c: c2 07 bf cc ld [ %fp + -52 ], %g1 40005d40: c2 26 60 14 st %g1, [ %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; 40005d44: c2 07 bf e0 ld [ %fp + -32 ], %g1 40005d48: 82 00 67 6c add %g1, 0x76c, %g1 40005d4c: c2 26 40 00 st %g1, [ %i1 ] tmbuf->month = time.tm_mon + 1; 40005d50: c2 07 bf dc ld [ %fp + -36 ], %g1 40005d54: 82 00 60 01 inc %g1 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; 40005d58: 40 00 3d dd call 400154cc <.udiv> 40005d5c: c2 26 60 04 st %g1, [ %i1 + 4 ] 40005d60: 10 80 00 1c b 40005dd0 40005d64: d0 26 60 18 st %o0, [ %i1 + 0x18 ] return RTEMS_SUCCESSFUL; } case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH: { rtems_interval *interval = (rtems_interval *)time_buffer; if ( !_TOD_Is_set ) 40005d68: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005d6c: c2 00 62 dc ld [ %g1 + 0x2dc ], %g1 ! 40019edc <_TOD_Is_set> 40005d70: 80 a0 60 00 cmp %g1, 0 40005d74: 02 80 00 19 be 40005dd8 40005d78: 03 10 00 67 sethi %hi(0x40019c00), %g1 return RTEMS_NOT_DEFINED; *interval = _TOD_Seconds_since_epoch; 40005d7c: 10 80 00 04 b 40005d8c 40005d80: c2 00 63 58 ld [ %g1 + 0x358 ], %g1 ! 40019f58 <_TOD_Now> } case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = _Watchdog_Ticks_since_boot; 40005d84: 03 10 00 68 sethi %hi(0x4001a000), %g1 40005d88: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 ! 4001a024 <_Watchdog_Ticks_since_boot> 40005d8c: c2 26 40 00 st %g1, [ %i1 ] 40005d90: 81 c7 e0 08 ret 40005d94: 91 e8 20 00 restore %g0, 0, %o0 } case RTEMS_CLOCK_GET_TICKS_PER_SECOND: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = TOD_MICROSECONDS_PER_SECOND / _TOD_Microseconds_per_tick; 40005d98: 03 10 00 68 sethi %hi(0x4001a000), %g1 40005d9c: d2 00 60 7c ld [ %g1 + 0x7c ], %o1 ! 4001a07c <_TOD_Microseconds_per_tick> 40005da0: 11 00 03 d0 sethi %hi(0xf4000), %o0 40005da4: 40 00 3d ca call 400154cc <.udiv> 40005da8: 90 12 22 40 or %o0, 0x240, %o0 ! f4240 40005dac: 10 80 00 09 b 40005dd0 40005db0: d0 26 40 00 st %o0, [ %i1 ] } case RTEMS_CLOCK_GET_TIME_VALUE: { struct timeval *time = (struct timeval *)time_buffer; if ( !_TOD_Is_set ) 40005db4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40005db8: c2 00 62 dc ld [ %g1 + 0x2dc ], %g1 ! 40019edc <_TOD_Is_set> <== NOT EXECUTED 40005dbc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005dc0: 22 80 00 07 be,a 40005ddc <== NOT EXECUTED 40005dc4: b0 10 20 0b mov 0xb, %i0 <== NOT EXECUTED return RTEMS_NOT_DEFINED; _TOD_Get_timeval( time ); 40005dc8: 7f ff ff ab call 40005c74 <_TOD_Get_timeval> <== NOT EXECUTED 40005dcc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 40005dd0: 81 c7 e0 08 ret 40005dd4: 91 e8 20 00 restore %g0, 0, %o0 return RTEMS_SUCCESSFUL; 40005dd8: b0 10 20 0b mov 0xb, %i0 <== NOT EXECUTED } } return RTEMS_INTERNAL_ERROR; /* should never get here */ } 40005ddc: 81 c7 e0 08 ret 40005de0: 81 e8 00 00 restore 40005e04 : * * NOTE: This routine only works for leap-years through 2099. */ rtems_status_code rtems_clock_tick( void ) { 40005e04: 9d e3 bf 98 save %sp, -104, %sp _TOD_Tickle_ticks(); 40005e08: 40 00 07 19 call 40007a6c <_TOD_Tickle_ticks> 40005e0c: 01 00 00 00 nop */ RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_ticks( void ) { _Watchdog_Tickle( &_Watchdog_Ticks_chain ); 40005e10: 11 10 00 67 sethi %hi(0x40019c00), %o0 40005e14: 40 00 14 27 call 4000aeb0 <_Watchdog_Tickle> 40005e18: 90 12 23 9c or %o0, 0x39c, %o0 ! 40019f9c <_Watchdog_Ticks_chain> _Watchdog_Tickle_ticks(); _Thread_Tickle_timeslice(); 40005e1c: 40 00 12 7e call 4000a814 <_Thread_Tickle_timeslice> 40005e20: 01 00 00 00 nop * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_context_switch_necessary( void ) { return ( _Context_Switch_necessary ); 40005e24: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005e28: c2 00 63 8c ld [ %g1 + 0x38c ], %g1 ! 40019f8c <_Context_Switch_necessary> if ( _Thread_Is_context_switch_necessary() && 40005e2c: 80 a0 60 00 cmp %g1, 0 40005e30: 02 80 00 08 be 40005e50 40005e34: 03 10 00 67 sethi %hi(0x40019c00), %g1 * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_dispatching_enabled( void ) { return ( _Thread_Dispatch_disable_level == 0 ); 40005e38: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 40005e3c: 80 a0 60 00 cmp %g1, 0 40005e40: 12 80 00 04 bne 40005e50 40005e44: 01 00 00 00 nop _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); 40005e48: 40 00 0e bb call 40009934 <_Thread_Dispatch> <== NOT EXECUTED 40005e4c: 01 00 00 00 nop <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 40005e50: 81 c7 e0 08 ret 40005e54: 91 e8 20 00 restore %g0, 0, %o0 40003920 : void rtems_cpu_usage_report_with_plugin( void *context, rtems_printk_plugin_t print ) { 40003920: 9d e3 bf 68 save %sp, -152, %sp struct timespec uptime, total, ran; #else uint32_t total_units = 0; #endif if ( !print ) 40003924: 80 a6 60 00 cmp %i1, 0 40003928: 02 80 00 62 be 40003ab0 4000392c: a0 07 bf e0 add %fp, -32, %l0 * 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 ); 40003930: 40 00 16 6d call 400092e4 <_TOD_Get_uptime> 40003934: 90 10 00 10 mov %l0, %o0 _Timespec_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total ); 40003938: 92 10 00 10 mov %l0, %o1 4000393c: a2 07 bf d8 add %fp, -40, %l1 40003940: 11 10 00 99 sethi %hi(0x40026400), %o0 40003944: 94 10 00 11 mov %l1, %o2 40003948: 40 00 24 09 call 4000c96c <_Timespec_Subtract> 4000394c: 90 12 22 c4 or %o0, 0x2c4, %o0 } } } #endif (*print)( context, "CPU Usage by thread\n" 40003950: 90 10 00 18 mov %i0, %o0 40003954: 13 10 00 6e sethi %hi(0x4001b800), %o1 40003958: 9f c6 40 00 call %i1 4000395c: 92 12 63 50 or %o1, 0x350, %o1 ! 4001bb50 40003960: 03 10 00 98 sethi %hi(0x40026000), %g1 the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003964: ac 07 bf eb add %fp, -21, %l6 } } } #endif (*print)( context, "CPU Usage by thread\n" 40003968: a6 10 63 14 or %g1, 0x314, %l3 /* * 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 ) { 4000396c: 37 10 00 99 sethi %hi(0x40026400), %i3 struct timespec used; _Timespec_Subtract( 40003970: 03 10 00 99 sethi %hi(0x40026400), %g1 &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40003974: aa 07 bf d0 add %fp, -48, %l5 * 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( 40003978: b4 10 60 94 or %g1, 0x94, %i2 &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 4000397c: b8 07 bf f4 add %fp, -12, %i4 40003980: ba 07 bf f0 add %fp, -16, %i5 * 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( 40003984: a8 07 bf c8 add %fp, -56, %l4 " ID NAME TICKS PERCENT\n" #endif ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40003988: ae 04 e0 10 add %l3, 0x10, %l7 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 4000398c: c2 04 c0 00 ld [ %l3 ], %g1 40003990: 80 a0 60 00 cmp %g1, 0 40003994: 22 80 00 3b be,a 40003a80 40003998: a6 04 e0 04 add %l3, 4, %l3 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 4000399c: e2 00 60 04 ld [ %g1 + 4 ], %l1 if ( information ) { 400039a0: 80 a4 60 00 cmp %l1, 0 400039a4: 12 80 00 30 bne 40003a64 400039a8: a4 10 20 01 mov 1, %l2 for ( i=1 ; i <= information->maximum ; i++ ) { 400039ac: 10 80 00 35 b 40003a80 <== NOT EXECUTED 400039b0: a6 04 e0 04 add %l3, 4, %l3 <== NOT EXECUTED the_thread = (Thread_Control *)information->local_table[ i ]; 400039b4: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 400039b8: e0 00 40 02 ld [ %g1 + %g2 ], %l0 if ( !the_thread ) 400039bc: 80 a4 20 00 cmp %l0, 0 400039c0: 02 80 00 29 be 40003a64 400039c4: a4 04 a0 01 inc %l2 continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 400039c8: 40 00 0f a4 call 40007858 400039cc: d0 04 20 08 ld [ %l0 + 8 ], %o0 (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 400039d0: d4 04 20 08 ld [ %l0 + 8 ], %o2 400039d4: 90 10 00 18 mov %i0, %o0 400039d8: 13 10 00 6e sethi %hi(0x4001b800), %o1 400039dc: 96 10 00 16 mov %l6, %o3 400039e0: 9f c6 40 00 call %i1 400039e4: 92 12 63 90 or %o1, 0x390, %o1 #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; 400039e8: c4 1c 20 90 ldd [ %l0 + 0x90 ], %g2 if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 400039ec: c2 06 e0 8c ld [ %i3 + 0x8c ], %g1 #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; 400039f0: c4 3f bf d0 std %g2, [ %fp + -48 ] if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 400039f4: c4 00 60 08 ld [ %g1 + 8 ], %g2 400039f8: c2 04 20 08 ld [ %l0 + 8 ], %g1 400039fc: 80 a0 80 01 cmp %g2, %g1 40003a00: 12 80 00 0a bne 40003a28 40003a04: 94 10 00 1c mov %i4, %o2 struct timespec used; _Timespec_Subtract( 40003a08: 90 10 00 1a mov %i2, %o0 40003a0c: 92 07 bf e0 add %fp, -32, %o1 40003a10: 40 00 23 d7 call 4000c96c <_Timespec_Subtract> 40003a14: 94 10 00 14 mov %l4, %o2 &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); 40003a18: 90 10 00 15 mov %l5, %o0 40003a1c: 40 00 23 2c call 4000c6cc <_Timespec_Add_to> 40003a20: 92 10 00 14 mov %l4, %o1 }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40003a24: 94 10 00 1c mov %i4, %o2 40003a28: 96 10 00 1d mov %i5, %o3 40003a2c: 90 10 00 15 mov %l5, %o0 40003a30: 40 00 23 3f call 4000c72c <_Timespec_Divide> 40003a34: 92 07 bf d8 add %fp, -40, %o1 /* * Print the information */ (*print)( context, 40003a38: d0 07 bf d4 ld [ %fp + -44 ], %o0 40003a3c: 40 00 54 bc call 40018d2c <.udiv> 40003a40: 92 10 23 e8 mov 0x3e8, %o1 40003a44: d4 07 bf d0 ld [ %fp + -48 ], %o2 40003a48: d8 07 bf f4 ld [ %fp + -12 ], %o4 40003a4c: da 07 bf f0 ld [ %fp + -16 ], %o5 40003a50: 96 10 00 08 mov %o0, %o3 40003a54: 13 10 00 6e sethi %hi(0x4001b800), %o1 40003a58: 90 10 00 18 mov %i0, %o0 40003a5c: 9f c6 40 00 call %i1 40003a60: 92 12 63 a8 or %o1, 0x3a8, %o1 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++ ) { 40003a64: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003a68: 94 10 00 16 mov %l6, %o2 40003a6c: 92 10 20 05 mov 5, %o1 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++ ) { 40003a70: 80 a4 80 01 cmp %l2, %g1 40003a74: 08 bf ff d0 bleu 400039b4 40003a78: 85 2c a0 02 sll %l2, 2, %g2 40003a7c: a6 04 e0 04 add %l3, 4, %l3 " ID NAME TICKS PERCENT\n" #endif ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40003a80: 80 a4 c0 17 cmp %l3, %l7 40003a84: 32 bf ff c3 bne,a 40003990 40003a88: c2 04 c0 00 ld [ %l3 ], %g1 } } } #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS (*print)( context, "Time since last CPU Usage reset %" PRId32 40003a8c: d0 07 bf dc ld [ %fp + -36 ], %o0 40003a90: 40 00 54 a7 call 40018d2c <.udiv> 40003a94: 92 10 23 e8 mov 0x3e8, %o1 40003a98: d4 07 bf d8 ld [ %fp + -40 ], %o2 40003a9c: 96 10 00 08 mov %o0, %o3 40003aa0: 13 10 00 6e sethi %hi(0x4001b800), %o1 40003aa4: 90 10 00 18 mov %i0, %o0 40003aa8: 9f c6 40 00 call %i1 40003aac: 92 12 63 c0 or %o1, 0x3c0, %o1 40003ab0: 81 c7 e0 08 ret 40003ab4: 81 e8 00 00 restore 4000d9e8 : { 0, 0, 0 }, }; static int rtems_deviceio_errno(rtems_status_code code) { 4000d9e8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int rc; if ((rc = rtems_assoc_remote_by_local(errno_assoc, (uint32_t ) code))) 4000d9ec: 11 10 00 65 sethi %hi(0x40019400), %o0 <== NOT EXECUTED 4000d9f0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000d9f4: 40 00 01 22 call 4000de7c <== NOT EXECUTED 4000d9f8: 90 12 20 1c or %o0, 0x1c, %o0 <== NOT EXECUTED 4000d9fc: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4000da00: 02 80 00 05 be 4000da14 <== NOT EXECUTED 4000da04: 01 00 00 00 nop <== NOT EXECUTED { errno = rc; 4000da08: 40 00 02 88 call 4000e428 <__errno> <== NOT EXECUTED 4000da0c: 01 00 00 00 nop <== NOT EXECUTED 4000da10: f0 22 00 00 st %i0, [ %o0 ] <== NOT EXECUTED return -1; } return -1; } 4000da14: 81 c7 e0 08 ret <== NOT EXECUTED 4000da18: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED 40007014 : int rtems_error( int error_flag, const char *printf_format, ... ) { 40007014: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list arglist; int chars_written; va_start(arglist, printf_format); 40007018: 94 07 a0 4c add %fp, 0x4c, %o2 <== NOT EXECUTED int rtems_error( int error_flag, const char *printf_format, ... ) { 4000701c: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40007020: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40007024: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40007028: 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); 4000702c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40007030: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40007034: 7f ff ff 7f call 40006e30 <== NOT EXECUTED 40007038: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); return chars_written; } 4000703c: 81 c7 e0 08 ret <== NOT EXECUTED 40007040: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40006068 : rtems_status_code rtems_event_send( Objects_Id id, rtems_event_set event_in ) { 40006068: 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 ) ) { 4000606c: 92 96 20 00 orcc %i0, 0, %o1 40006070: 12 80 00 0a bne 40006098 40006074: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006078: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000607c: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> 40006080: 84 00 a0 01 inc %g2 40006084: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 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; 40006088: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000608c: f0 00 63 7c ld [ %g1 + 0x37c ], %i0 ! 40019f7c <_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; 40006090: 10 80 00 18 b 400060f0 40006094: c0 27 bf f4 clr [ %fp + -12 ] */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40006098: 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 ) { 4000609c: 80 a0 a0 04 cmp %g2, 4 400060a0: 18 80 00 0e bgu 400060d8 400060a4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400060a8: 83 32 60 1b srl %o1, 0x1b, %g1 400060ac: 80 a0 60 01 cmp %g1, 1 400060b0: 12 80 00 0a bne 400060d8 400060b4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400060b8: 83 28 a0 02 sll %g2, 2, %g1 400060bc: 05 10 00 67 sethi %hi(0x40019c00), %g2 400060c0: 84 10 a2 00 or %g2, 0x200, %g2 ! 40019e00 <_Objects_Information_table> 400060c4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 400060c8: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 400060cc: 80 a2 20 00 cmp %o0, 0 400060d0: 12 80 00 05 bne 400060e4 400060d4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400060d8: b0 10 20 00 clr %i0 400060dc: 10 80 00 05 b 400060f0 400060e0: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400060e4: 40 00 09 20 call 40008564 <_Objects_Get> 400060e8: 94 07 bf f4 add %fp, -12, %o2 400060ec: b0 10 00 08 mov %o0, %i0 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; the_thread = _Thread_Get( id, &location ); switch ( location ) { 400060f0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400060f4: 80 a0 60 00 cmp %g1, 0 400060f8: 02 80 00 06 be 40006110 400060fc: 80 a0 60 02 cmp %g1, 2 40006100: 08 80 00 18 bleu 40006160 40006104: b0 10 20 04 mov 4, %i0 40006108: 81 c7 e0 08 ret <== NOT EXECUTED 4000610c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED rtems_event_set *the_event_set ) { ISR_Level level; _ISR_Disable( level ); 40006110: 7f ff ef 68 call 40001eb0 40006114: e0 06 21 6c ld [ %i0 + 0x16c ], %l0 *the_event_set |= the_new_events; 40006118: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 4000611c: 82 10 40 19 or %g1, %i1, %g1 40006120: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _ISR_Enable( level ); 40006124: 7f ff ef 67 call 40001ec0 40006128: 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 ); 4000612c: 40 00 00 15 call 40006180 <_Event_Surrender> 40006130: 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 ) 40006134: 05 10 00 67 sethi %hi(0x40019c00), %g2 40006138: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 4000613c: b0 10 20 00 clr %i0 40006140: 82 00 7f ff add %g1, -1, %g1 40006144: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 40006148: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 4000614c: 80 a0 60 00 cmp %g1, 0 40006150: 12 80 00 04 bne 40006160 40006154: 01 00 00 00 nop _Thread_Dispatch(); 40006158: 40 00 0d f7 call 40009934 <_Thread_Dispatch> 4000615c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006160: 81 c7 e0 08 ret 40006164: 81 e8 00 00 restore 4000ba70 : rtems_status_code rtems_extension_create( rtems_name name, rtems_extensions_table *extension_table, Objects_Id *id ) { 4000ba70: 9d e3 bf 98 save %sp, -104, %sp Extension_Control *the_extension; if ( !rtems_is_name_valid( name ) ) 4000ba74: a4 96 20 00 orcc %i0, 0, %l2 4000ba78: 02 80 00 0e be 4000bab0 4000ba7c: b0 10 20 03 mov 3, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000ba80: 05 10 00 a1 sethi %hi(0x40028400), %g2 4000ba84: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 400286a0 <_Thread_Dispatch_disable_level> 4000ba88: 82 00 60 01 inc %g1 4000ba8c: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] * the inactive chain of free extension control blocks. */ RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void ) { return (Extension_Control *) _Objects_Allocate( &_Extension_Information ); 4000ba90: 23 10 00 a2 sethi %hi(0x40028800), %l1 4000ba94: 40 00 03 87 call 4000c8b0 <_Objects_Allocate> 4000ba98: 90 14 61 3c or %l1, 0x13c, %o0 ! 4002893c <_Extension_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_extension = _Extension_Allocate(); if ( !the_extension ) { 4000ba9c: a0 92 20 00 orcc %o0, 0, %l0 4000baa0: 12 80 00 06 bne 4000bab8 4000baa4: 90 04 20 10 add %l0, 0x10, %o0 _Thread_Enable_dispatch(); 4000baa8: 7f ff ff e5 call 4000ba3c <_Thread_Enable_dispatch> <== NOT EXECUTED 4000baac: b0 10 20 05 mov 5, %i0 <== NOT EXECUTED 4000bab0: 81 c7 e0 08 ret <== NOT EXECUTED 4000bab4: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_TOO_MANY; } _User_extensions_Add_set( &the_extension->Extension, extension_table ); 4000bab8: 40 00 0e 03 call 4000f2c4 <_User_extensions_Add_set> 4000babc: 92 10 00 19 mov %i1, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000bac0: 90 14 61 3c or %l1, 0x13c, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000bac4: c2 04 20 08 ld [ %l0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000bac8: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000bacc: 05 00 00 3f sethi %hi(0xfc00), %g2 4000bad0: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000bad4: 82 08 40 02 and %g1, %g2, %g1 4000bad8: 80 a0 40 03 cmp %g1, %g3 4000badc: 38 80 00 06 bgu,a 4000baf4 4000bae0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 4000bae4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000bae8: 83 28 60 02 sll %g1, 2, %g1 4000baec: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Extension_Information, &the_extension->Object, (Objects_Name) name ); *id = the_extension->Object.id; 4000baf0: c2 04 20 08 ld [ %l0 + 8 ], %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; 4000baf4: e4 24 20 0c st %l2, [ %l0 + 0xc ] 4000baf8: c2 26 80 00 st %g1, [ %i2 ] _Thread_Enable_dispatch(); 4000bafc: 7f ff ff d0 call 4000ba3c <_Thread_Enable_dispatch> 4000bb00: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 4000bb04: 81 c7 e0 08 ret 4000bb08: 81 e8 00 00 restore 4000bb0c : */ rtems_status_code rtems_extension_delete( Objects_Id id ) { 4000bb0c: 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 *) 4000bb10: 21 10 00 a2 sethi %hi(0x40028800), %l0 <== NOT EXECUTED 4000bb14: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000bb18: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 4000bb1c: 40 00 04 a9 call 4000cdc0 <_Objects_Get> <== NOT EXECUTED 4000bb20: 90 14 21 3c or %l0, 0x13c, %o0 <== NOT EXECUTED Extension_Control *the_extension; Objects_Locations location; the_extension = _Extension_Get( id, &location ); switch ( location ) { 4000bb24: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4000bb28: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000bb2c: 02 80 00 07 be 4000bb48 <== NOT EXECUTED 4000bb30: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4000bb34: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000bb38: 08 80 00 20 bleu 4000bbb8 <== NOT EXECUTED 4000bb3c: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 4000bb40: 81 c7 e0 08 ret <== NOT EXECUTED 4000bb44: 91 e8 20 19 restore %g0, 0x19, %o0 <== 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 ); 4000bb48: 40 00 0e 19 call 4000f3ac <_User_extensions_Remove_set> <== NOT EXECUTED 4000bb4c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000bb50: 90 14 21 3c or %l0, 0x13c, %o0 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000bb54: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000bb58: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 <== NOT EXECUTED 4000bb5c: 05 00 00 3f sethi %hi(0xfc00), %g2 <== NOT EXECUTED 4000bb60: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff <== NOT EXECUTED 4000bb64: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 4000bb68: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000bb6c: 38 80 00 06 bgu,a 4000bb84 <== NOT EXECUTED 4000bb70: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000bb74: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 <== NOT EXECUTED 4000bb78: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4000bb7c: 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; 4000bb80: 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 ); 4000bb84: 40 00 04 4d call 4000ccb8 <_Objects_Free> <== NOT EXECUTED 4000bb88: 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 ) 4000bb8c: 03 10 00 a1 sethi %hi(0x40028400), %g1 <== NOT EXECUTED 4000bb90: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 400286a0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000bb94: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000bb98: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 4000bb9c: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] <== NOT EXECUTED 4000bba0: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 <== NOT EXECUTED 4000bba4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000bba8: 12 80 00 04 bne 4000bbb8 <== NOT EXECUTED 4000bbac: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4000bbb0: 40 00 09 78 call 4000e190 <_Thread_Dispatch> <== NOT EXECUTED 4000bbb4: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000bbb8: 81 c7 e0 08 ret <== NOT EXECUTED 4000bbbc: 81 e8 00 00 restore <== NOT EXECUTED 40007398 : */ void rtems_fatal_error_occurred( uint32_t the_error ) { 40007398: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, FALSE, the_error ); 4000739c: 92 10 20 00 clr %o1 <== NOT EXECUTED 400073a0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 400073a4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400073a8: 40 00 02 fe call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 400073ac: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400073b0: 01 00 00 00 nop 40002d64 : int rtems_filesystem_evaluate_parent( int flags, rtems_filesystem_location_info_t *pathloc ) { 40002d64: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED rtems_filesystem_location_info_t parent; int result; if ( !pathloc ) 40002d68: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40002d6c: 32 80 00 06 bne,a 40002d84 <== NOT EXECUTED 40002d70: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 40002d74: 40 00 2d ad call 4000e428 <__errno> <== NOT EXECUTED 40002d78: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002d7c: 10 80 00 09 b 40002da0 <== NOT EXECUTED 40002d80: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED if ( !pathloc->ops->evalpath_h ) 40002d84: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED 40002d88: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002d8c: 12 80 00 08 bne 40002dac <== NOT EXECUTED 40002d90: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40002d94: 40 00 2d a5 call 4000e428 <__errno> <== NOT EXECUTED 40002d98: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002d9c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40002da0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002da4: 81 c7 e0 08 ret <== NOT EXECUTED 40002da8: 81 e8 00 00 restore <== NOT EXECUTED parent = *pathloc; 40002dac: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40002db0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40002db4: 40 00 2f 72 call 4000eb7c <== NOT EXECUTED 40002db8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED result = (*pathloc->ops->evalpath_h)( "..", flags, &parent ); 40002dbc: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED 40002dc0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40002dc4: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED 40002dc8: 11 10 00 60 sethi %hi(0x40018000), %o0 <== NOT EXECUTED 40002dcc: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40002dd0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002dd4: 90 12 22 90 or %o0, 0x290, %o0 <== NOT EXECUTED if (result != 0){ 40002dd8: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40002ddc: 02 80 00 04 be 40002dec <== NOT EXECUTED 40002de0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40002de4: 81 c7 e0 08 ret <== NOT EXECUTED 40002de8: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED return -1; } rtems_filesystem_freenode( &parent ); 40002dec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002df0: 02 80 00 08 be 40002e10 <== NOT EXECUTED 40002df4: 01 00 00 00 nop <== NOT EXECUTED 40002df8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40002dfc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002e00: 02 80 00 04 be 40002e10 <== NOT EXECUTED 40002e04: 01 00 00 00 nop <== NOT EXECUTED 40002e08: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002e0c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40002e10: 81 c7 e0 08 ret <== NOT EXECUTED 40002e14: 81 e8 00 00 restore <== NOT EXECUTED 40002e18 : const char *pathname, int flags, rtems_filesystem_location_info_t *pathloc, int follow_link ) { 40002e18: 9d e3 bf 98 save %sp, -104, %sp /* * Verify Input parameters. */ if ( !pathname ) 40002e1c: 80 a6 20 00 cmp %i0, 0 40002e20: 12 80 00 06 bne 40002e38 40002e24: 80 a6 a0 00 cmp %i2, 0 rtems_set_errno_and_return_minus_one( EFAULT ); 40002e28: 40 00 2d 80 call 4000e428 <__errno> <== NOT EXECUTED 40002e2c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002e30: 10 80 00 43 b 40002f3c <== NOT EXECUTED 40002e34: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED if ( !pathloc ) 40002e38: 32 80 00 06 bne,a 40002e50 40002e3c: c2 4e 00 00 ldsb [ %i0 ], %g1 rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 40002e40: 40 00 2d 7a call 4000e428 <__errno> <== NOT EXECUTED 40002e44: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002e48: 10 80 00 3d b 40002f3c <== NOT EXECUTED 40002e4c: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED /* * Evaluate the path using the optable evalpath. */ rtems_filesystem_get_start_loc( pathname, &i, pathloc ); 40002e50: 80 a0 60 2f cmp %g1, 0x2f 40002e54: 02 80 00 06 be 40002e6c 40002e58: 80 a0 60 5c cmp %g1, 0x5c 40002e5c: 02 80 00 04 be 40002e6c <== NOT EXECUTED 40002e60: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002e64: 12 80 00 0a bne 40002e8c <== NOT EXECUTED 40002e68: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40002e6c: 03 10 00 64 sethi %hi(0x40019000), %g1 40002e70: d2 00 63 70 ld [ %g1 + 0x370 ], %o1 ! 40019370 40002e74: 90 10 00 1a mov %i2, %o0 40002e78: 92 02 60 14 add %o1, 0x14, %o1 40002e7c: 40 00 2f 40 call 4000eb7c 40002e80: 94 10 20 10 mov 0x10, %o2 40002e84: 10 80 00 08 b 40002ea4 40002e88: 84 10 20 01 mov 1, %g2 40002e8c: d2 00 63 70 ld [ %g1 + 0x370 ], %o1 <== NOT EXECUTED 40002e90: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 40002e94: 92 02 60 04 add %o1, 4, %o1 <== NOT EXECUTED 40002e98: 40 00 2f 39 call 4000eb7c <== NOT EXECUTED 40002e9c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40002ea0: 84 10 20 00 clr %g2 <== NOT EXECUTED if ( !pathloc->ops->evalpath_h ) 40002ea4: c2 06 a0 08 ld [ %i2 + 8 ], %g1 40002ea8: c2 00 40 00 ld [ %g1 ], %g1 40002eac: 80 a0 60 00 cmp %g1, 0 40002eb0: 02 80 00 20 be 40002f30 40002eb4: 90 06 00 02 add %i0, %g2, %o0 rtems_set_errno_and_return_minus_one( ENOTSUP ); result = (*pathloc->ops->evalpath_h)( &pathname[i], flags, pathloc ); 40002eb8: 92 10 00 19 mov %i1, %o1 40002ebc: 9f c0 40 00 call %g1 40002ec0: 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 ) { 40002ec4: b0 92 20 00 orcc %o0, 0, %i0 40002ec8: 12 80 00 1e bne 40002f40 40002ecc: 80 a6 e0 00 cmp %i3, 0 40002ed0: 02 80 00 21 be 40002f54 40002ed4: 01 00 00 00 nop if ( !pathloc->ops->node_type_h ){ 40002ed8: c2 06 a0 08 ld [ %i2 + 8 ], %g1 40002edc: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 40002ee0: 80 a0 a0 00 cmp %g2, 0 40002ee4: 22 80 00 0e be,a 40002f1c 40002ee8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( pathloc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } type = (*pathloc->ops->node_type_h)( pathloc ); 40002eec: 9f c0 80 00 call %g2 40002ef0: 90 10 00 1a mov %i2, %o0 if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || 40002ef4: 90 02 3f fd add %o0, -3, %o0 40002ef8: 80 a2 20 01 cmp %o0, 1 40002efc: 18 80 00 16 bgu 40002f54 40002f00: 01 00 00 00 nop ( type == RTEMS_FILESYSTEM_SYM_LINK ) ) { if ( !pathloc->ops->eval_link_h ){ 40002f04: c2 06 a0 08 ld [ %i2 + 8 ], %g1 <== NOT EXECUTED 40002f08: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED 40002f0c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40002f10: 12 80 00 0e bne 40002f48 <== NOT EXECUTED 40002f14: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_filesystem_freenode( pathloc ); 40002f18: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40002f1c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002f20: 02 80 00 04 be 40002f30 <== NOT EXECUTED 40002f24: 01 00 00 00 nop <== NOT EXECUTED 40002f28: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002f2c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40002f30: 40 00 2d 3e call 4000e428 <__errno> <== NOT EXECUTED 40002f34: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002f38: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40002f3c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002f40: 81 c7 e0 08 ret 40002f44: 81 e8 00 00 restore * 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 ); 40002f48: 9f c0 80 00 call %g2 <== NOT EXECUTED 40002f4c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40002f50: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } } return result; } 40002f54: 81 c7 e0 08 ret 40002f58: 81 e8 00 00 restore 4000c264 : * configuration is a single instantiation of the IMFS or miniIMFS with * a single "/dev" directory in it. */ void rtems_filesystem_initialize( void ) { 4000c264: 9d e3 bf 80 save %sp, -128, %sp /* * Set the default umask to "022". */ rtems_filesystem_umask = 022; 4000c268: 25 10 00 64 sethi %hi(0x40019000), %l2 4000c26c: c4 04 a3 70 ld [ %l2 + 0x370 ], %g2 ! 40019370 4000c270: 82 10 20 12 mov 0x12, %g1 init_fs_mount_table(); 4000c274: 40 00 01 89 call 4000c898 4000c278: c2 30 a0 24 sth %g1, [ %g2 + 0x24 ] /* * mount the first filesystem. */ if ( rtems_filesystem_mount_table_size == 0 ) 4000c27c: 03 10 00 63 sethi %hi(0x40018c00), %g1 4000c280: c2 00 61 68 ld [ %g1 + 0x168 ], %g1 ! 40018d68 4000c284: 80 a0 60 00 cmp %g1, 0 4000c288: 12 80 00 06 bne 4000c2a0 4000c28c: 03 10 00 63 sethi %hi(0x40018c00), %g1 rtems_fatal_error_occurred( 0xABCD0001 ); 4000c290: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 4000c294: 7f ff ec 41 call 40007398 <== NOT EXECUTED 4000c298: 90 12 20 01 or %o0, 1, %o0 ! abcd0001 <== NOT EXECUTED mt = &rtems_filesystem_mount_table[0]; 4000c29c: 03 10 00 63 sethi %hi(0x40018c00), %g1 <== NOT EXECUTED 4000c2a0: c2 00 61 64 ld [ %g1 + 0x164 ], %g1 ! 40018d64 status = mount( 4000c2a4: 90 07 bf f4 add %fp, -12, %o0 4000c2a8: d8 00 60 0c ld [ %g1 + 0xc ], %o4 4000c2ac: d2 00 40 00 ld [ %g1 ], %o1 4000c2b0: d4 00 60 04 ld [ %g1 + 4 ], %o2 4000c2b4: 40 00 01 81 call 4000c8b8 4000c2b8: d6 00 60 08 ld [ %g1 + 8 ], %o3 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) 4000c2bc: 80 a2 3f ff cmp %o0, -1 4000c2c0: 32 80 00 06 bne,a 4000c2d8 4000c2c4: d0 04 a3 70 ld [ %l2 + 0x370 ], %o0 rtems_fatal_error_occurred( 0xABCD0002 ); 4000c2c8: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 4000c2cc: 7f ff ec 33 call 40007398 <== NOT EXECUTED 4000c2d0: 90 12 20 02 or %o0, 2, %o0 ! abcd0002 <== NOT EXECUTED rtems_filesystem_link_counts = 0; 4000c2d4: d0 04 a3 70 ld [ %l2 + 0x370 ], %o0 <== NOT EXECUTED * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000c2d8: d2 07 bf f4 ld [ %fp + -12 ], %o1 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) rtems_fatal_error_occurred( 0xABCD0002 ); rtems_filesystem_link_counts = 0; 4000c2dc: c0 32 20 26 clrh [ %o0 + 0x26 ] * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000c2e0: 92 02 60 18 add %o1, 0x18, %o1 4000c2e4: 94 10 20 10 mov 0x10, %o2 4000c2e8: 40 00 0a 25 call 4000eb7c 4000c2ec: 90 02 20 14 add %o0, 0x14, %o0 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000c2f0: a0 07 bf e4 add %fp, -28, %l0 4000c2f4: 96 10 20 00 clr %o3 4000c2f8: 23 10 00 61 sethi %hi(0x40018400), %l1 4000c2fc: 92 10 20 00 clr %o1 4000c300: 94 10 00 10 mov %l0, %o2 4000c304: 7f ff da c5 call 40002e18 4000c308: 90 14 61 08 or %l1, 0x108, %o0 rtems_filesystem_root = loc; 4000c30c: d0 04 a3 70 ld [ %l2 + 0x370 ], %o0 4000c310: 92 10 00 10 mov %l0, %o1 4000c314: 94 10 20 10 mov 0x10, %o2 4000c318: 40 00 0a 19 call 4000eb7c 4000c31c: 90 02 20 14 add %o0, 0x14, %o0 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000c320: 96 10 20 00 clr %o3 4000c324: 92 10 20 00 clr %o1 4000c328: 94 10 00 10 mov %l0, %o2 4000c32c: 7f ff da bb call 40002e18 4000c330: 90 14 61 08 or %l1, 0x108, %o0 rtems_filesystem_current = loc; 4000c334: d0 04 a3 70 ld [ %l2 + 0x370 ], %o0 4000c338: 92 10 00 10 mov %l0, %o1 4000c33c: 94 10 20 10 mov 0x10, %o2 4000c340: 40 00 0a 0f call 4000eb7c 4000c344: 90 02 20 04 add %o0, 4, %o0 * * 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); 4000c348: 92 10 21 ff mov 0x1ff, %o1 4000c34c: 11 10 00 61 sethi %hi(0x40018400), %o0 4000c350: 40 00 01 48 call 4000c870 4000c354: 90 12 21 10 or %o0, 0x110, %o0 ! 40018510 <_CPU_Trap_slot_template+0x80> if ( status != 0 ) 4000c358: 80 a2 20 00 cmp %o0, 0 4000c35c: 02 80 00 04 be 4000c36c 4000c360: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 rtems_fatal_error_occurred( 0xABCD0003 ); 4000c364: 7f ff ec 0d call 40007398 <== NOT EXECUTED 4000c368: 90 12 20 03 or %o0, 3, %o0 ! abcd0003 <== NOT EXECUTED 4000c36c: 81 c7 e0 08 ret 4000c370: 81 e8 00 00 restore 400073b4 : #include const char *rtems_get_version_string(void) { return _RTEMS_version; } 400073b4: 11 10 00 63 sethi %hi(0x40018c00), %o0 <== NOT EXECUTED 400073b8: 81 c3 e0 08 retl <== NOT EXECUTED 400073bc: 90 12 20 e0 or %o0, 0xe0, %o0 ! 40018ce0 <_RTEMS_version> <== NOT EXECUTED 4000715c : rtems_interrupt_level rtems_initialize_executive_early( rtems_configuration_table *configuration_table, rtems_cpu_table *cpu_table ) { 4000715c: 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 ); 40007160: 7f ff eb 54 call 40001eb0 40007164: 01 00 00 00 nop 40007168: a4 10 00 08 mov %o0, %l2 if ( configuration_table == NULL ) 4000716c: 80 a6 20 00 cmp %i0, 0 40007170: 12 80 00 07 bne 4000718c 40007174: 03 10 00 68 sethi %hi(0x4001a000), %g1 _Internal_error_Occurred( 40007178: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000717c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40007180: 40 00 03 88 call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40007184: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _System_state_Handler_initialization ( boolean is_multiprocessing ) { _System_state_Current = SYSTEM_STATE_BEFORE_INITIALIZATION; 40007188: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 4000718c: c0 20 60 80 clr [ %g1 + 0x80 ] ! 4001a080 <_System_state_Current> _System_state_Is_multiprocessing = is_multiprocessing; 40007190: 03 10 00 67 sethi %hi(0x40019c00), %g1 /* * Grab our own copy of the user's CPU table. */ _CPU_Table = *cpu_table; 40007194: 94 10 20 28 mov 0x28, %o2 40007198: 92 10 00 19 mov %i1, %o1 4000719c: c0 20 63 a8 clr [ %g1 + 0x3a8 ] 400071a0: 11 10 00 67 sethi %hi(0x40019c00), %o0 400071a4: 40 00 1e 76 call 4000eb7c 400071a8: 90 12 22 b4 or %o0, 0x2b4, %o0 ! 40019eb4 <_CPU_Table> /* * Provided just for user convenience. */ _Configuration_Table = configuration_table; 400071ac: 03 10 00 67 sethi %hi(0x40019c00), %g1 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_NO_CPU_TABLE ); _CPU_Initialize( cpu_table, _Thread_Dispatch ); 400071b0: 90 10 00 19 mov %i1, %o0 400071b4: 13 10 00 26 sethi %hi(0x40009800), %o1 400071b8: 92 12 61 34 or %o1, 0x134, %o1 ! 40009934 <_Thread_Dispatch> 400071bc: 40 00 10 9c call 4000b42c <_CPU_Initialize> 400071c0: f0 20 63 60 st %i0, [ %g1 + 0x360 ] /* * Do this as early as possible to insure no debugging output * is even attempted to be printed. */ _Debug_Manager_initialization(); 400071c4: 40 00 17 7b call 4000cfb0 <_Debug_Manager_initialization> 400071c8: 01 00 00 00 nop _API_extensions_Initialization(); 400071cc: 40 00 00 cb call 400074f8 <_API_extensions_Initialization> 400071d0: 01 00 00 00 nop _Thread_Dispatch_initialization(); _Workspace_Handler_initialization( 400071d4: d2 06 20 04 ld [ %i0 + 4 ], %o1 400071d8: 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; 400071dc: 84 10 20 01 mov 1, %g2 400071e0: 03 10 00 67 sethi %hi(0x40019c00), %g1 400071e4: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] ! 40019ea0 <_Thread_Dispatch_disable_level> 400071e8: 40 00 0f 67 call 4000af84 <_Workspace_Handler_initialization> 400071ec: 23 10 00 67 sethi %hi(0x40019c00), %l1 (void *)configuration_table->work_space_start, configuration_table->work_space_size ); _User_extensions_Handler_initialization( 400071f0: d0 06 20 20 ld [ %i0 + 0x20 ], %o0 400071f4: 40 00 0e 07 call 4000aa10 <_User_extensions_Handler_initialization> 400071f8: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 configuration_table->number_of_initial_extensions, configuration_table->User_extension_table ); _ISR_Handler_initialization(); 400071fc: 40 00 03 79 call 40007fe0 <_ISR_Handler_initialization> 40007200: a0 07 bf e8 add %fp, -24, %l0 _Objects_Handler_initialization( 40007204: 90 10 20 01 mov 1, %o0 40007208: 92 10 20 01 mov 1, %o1 4000720c: 40 00 05 6f call 400087c8 <_Objects_Handler_initialization> 40007210: 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; 40007214: 05 10 00 67 sethi %hi(0x40019c00), %g2 /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 40007218: 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; 4000721c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40007220: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 40019ee0 <_Internal_Objects> /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 40007224: 96 10 20 01 mov 1, %o3 multiprocessing_table->node, multiprocessing_table->maximum_nodes, multiprocessing_table->maximum_global_objects ); _Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects; 40007228: c2 20 a2 04 st %g1, [ %g2 + 0x204 ] /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 4000722c: 98 10 20 74 mov 0x74, %o4 40007230: 9a 10 20 00 clr %o5 40007234: 90 14 63 ac or %l1, 0x3ac, %o0 40007238: 92 10 20 01 mov 1, %o1 4000723c: 40 00 04 ef call 400085f8 <_Objects_Initialize_information> 40007240: 94 10 20 02 mov 2, %o2 _API_Mutex_Allocate( _RTEMS_Allocator_Mutex ); 40007244: 94 10 20 10 mov 0x10, %o2 40007248: 13 10 00 61 sethi %hi(0x40018400), %o1 4000724c: 90 10 00 10 mov %l0, %o0 40007250: 40 00 1e 4b call 4000eb7c 40007254: 92 12 60 78 or %o1, 0x78, %o1 40007258: 40 00 03 7f call 40008054 <_Objects_Allocate> 4000725c: 90 14 63 ac or %l1, 0x3ac, %o0 40007260: 03 10 00 67 sethi %hi(0x40019c00), %g1 40007264: 84 10 00 08 mov %o0, %g2 40007268: 92 10 00 10 mov %l0, %o1 4000726c: c4 20 63 74 st %g2, [ %g1 + 0x374 ] 40007270: 90 02 20 10 add %o0, 0x10, %o0 40007274: 40 00 01 03 call 40007680 <_CORE_mutex_Initialize> 40007278: 94 10 20 01 mov 1, %o2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; 4000727c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40007280: 84 10 20 00 clr %g2 40007284: c0 30 63 70 clrh [ %g1 + 0x370 ] for ( index=0 ; index <16 ; index++ ) _Priority_Bit_map[ index ] = 0; 40007288: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000728c: 82 10 60 00 mov %g1, %g1 ! 4001a000 <_Priority_Bit_map> 40007290: c0 30 80 01 clrh [ %g2 + %g1 ] 40007294: 84 00 a0 02 add %g2, 2, %g2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; for ( index=0 ; index <16 ; index++ ) 40007298: 80 a0 a0 20 cmp %g2, 0x20 4000729c: 32 bf ff fe bne,a 40007294 400072a0: c0 30 80 01 clrh [ %g2 + %g1 ] _Priority_Handler_initialization(); _Watchdog_Handler_initialization(); 400072a4: 40 00 0e c6 call 4000adbc <_Watchdog_Handler_initialization> 400072a8: 01 00 00 00 nop _TOD_Handler_initialization( configuration_table->microseconds_per_tick ); 400072ac: 40 00 01 e1 call 40007a30 <_TOD_Handler_initialization> 400072b0: d0 06 20 0c ld [ %i0 + 0xc ], %o0 _Thread_Handler_initialization( 400072b4: d2 06 20 08 ld [ %i0 + 8 ], %o1 400072b8: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 400072bc: 40 00 0a 5e call 40009c34 <_Thread_Handler_initialization> 400072c0: 94 10 20 00 clr %o2 ); #endif /* MANAGERS */ _RTEMS_API_Initialize( configuration_table ); 400072c4: 40 00 00 6e call 4000747c <_RTEMS_API_Initialize> 400072c8: 90 10 00 18 mov %i0, %o0 _Extension_Manager_initialization( configuration_table->maximum_extensions ); 400072cc: 40 00 00 26 call 40007364 <_Extension_Manager_initialization> 400072d0: d0 06 20 08 ld [ %i0 + 8 ], %o0 _IO_Manager_initialization( 400072d4: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 400072d8: d4 06 20 14 ld [ %i0 + 0x14 ], %o2 400072dc: 40 00 00 47 call 400073f8 <_IO_Manager_initialization> 400072e0: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 RTEMS_INLINE_ROUTINE void _System_state_Set ( System_state_Codes state ) { _System_state_Current = state; 400072e4: 84 10 20 01 mov 1, %g2 400072e8: 03 10 00 68 sethi %hi(0x4001a000), %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(); 400072ec: 40 00 09 36 call 400097c4 <_Thread_Create_idle> 400072f0: c4 20 60 80 st %g2, [ %g1 + 0x80 ] ! 4001a080 <_System_state_Current> /* * Scheduling can properly occur now as long as we avoid dispatching. */ if ( cpu_table->pretasking_hook ) 400072f4: d0 06 40 00 ld [ %i1 ], %o0 400072f8: 80 a2 20 00 cmp %o0, 0 400072fc: 02 80 00 04 be 4000730c 40007300: 01 00 00 00 nop (*cpu_table->pretasking_hook)(); 40007304: 9f c2 00 00 call %o0 40007308: 01 00 00 00 nop /* * Run the API and BSPs predriver hook. */ _API_extensions_Run_predriver(); 4000730c: 40 00 00 9a call 40007574 <_API_extensions_Run_predriver> 40007310: 01 00 00 00 nop if ( _CPU_Table.predriver_hook ) 40007314: 03 10 00 67 sethi %hi(0x40019c00), %g1 40007318: a0 10 62 b4 or %g1, 0x2b4, %l0 ! 40019eb4 <_CPU_Table> 4000731c: c2 04 20 04 ld [ %l0 + 4 ], %g1 40007320: 80 a0 60 00 cmp %g1, 0 40007324: 02 80 00 04 be 40007334 40007328: 01 00 00 00 nop (*_CPU_Table.predriver_hook)(); 4000732c: 9f c0 40 00 call %g1 40007330: 01 00 00 00 nop * Initialize all the device drivers and initialize the MPCI layer. * * NOTE: The MPCI may be build upon a device driver. */ _IO_Initialize_all_drivers(); 40007334: 40 00 00 23 call 400073c0 <_IO_Initialize_all_drivers> 40007338: 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(); 4000733c: 40 00 00 76 call 40007514 <_API_extensions_Run_postdriver> 40007340: 01 00 00 00 nop if ( _CPU_Table.postdriver_hook ) 40007344: c2 04 20 08 ld [ %l0 + 8 ], %g1 40007348: 80 a0 60 00 cmp %g1, 0 4000734c: 02 80 00 04 be 4000735c 40007350: 01 00 00 00 nop (*_CPU_Table.postdriver_hook)(); 40007354: 9f c0 40 00 call %g1 40007358: 01 00 00 00 nop return bsp_level; } 4000735c: 81 c7 e0 08 ret 40007360: 91 e8 00 12 restore %g0, %l2, %o0 40002bfc : rtems_status_code rtems_io_lookup_name( const char *name, rtems_driver_name_t *device_info ) { 40002bfc: 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 ); 40002c00: 92 10 20 00 clr %o1 <== NOT EXECUTED 40002c04: a4 07 bf e8 add %fp, -24, %l2 <== NOT EXECUTED 40002c08: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002c0c: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED 40002c10: 40 00 00 82 call 40002e18 <== NOT EXECUTED 40002c14: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 40002c18: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== 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 ); 40002c1c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 40002c20: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 40002c24: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002c28: 12 80 00 0e bne 40002c60 <== NOT EXECUTED 40002c2c: e2 07 bf e8 ld [ %fp + -24 ], %l1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40002c30: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40002c34: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002c38: 02 80 00 04 be 40002c48 <== NOT EXECUTED 40002c3c: 01 00 00 00 nop <== NOT EXECUTED 40002c40: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002c44: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40002c48: 40 00 2d f8 call 4000e428 <__errno> <== NOT EXECUTED 40002c4c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002c50: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40002c54: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002c58: 81 c7 e0 08 ret <== NOT EXECUTED 40002c5c: 81 e8 00 00 restore <== NOT EXECUTED } node_type = (*loc.ops->node_type_h)( &loc ); 40002c60: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002c64: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { 40002c68: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40002c6c: 12 80 00 05 bne 40002c80 <== NOT EXECUTED 40002c70: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40002c74: 80 a2 20 02 cmp %o0, 2 <== NOT EXECUTED 40002c78: 22 80 00 0d be,a 40002cac <== NOT EXECUTED 40002c7c: f0 26 40 00 st %i0, [ %i1 ] <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40002c80: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002c84: 02 80 00 1c be 40002cf4 <== NOT EXECUTED 40002c88: 01 00 00 00 nop <== NOT EXECUTED 40002c8c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40002c90: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002c94: 02 80 00 18 be 40002cf4 <== NOT EXECUTED 40002c98: 01 00 00 00 nop <== NOT EXECUTED 40002c9c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002ca0: 90 10 00 12 mov %l2, %o0 <== 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 ); 40002ca4: 81 c7 e0 08 ret <== NOT EXECUTED 40002ca8: 91 e8 20 0d restore %g0, 0xd, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); return RTEMS_UNSATISFIED; } device_info->device_name = (char *) name; device_info->device_name_length = strlen( name ); 40002cac: 40 00 32 bd call 4000f7a0 <== NOT EXECUTED 40002cb0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002cb4: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED device_info->major = the_jnode->info.device.major; 40002cb8: c2 04 60 4c ld [ %l1 + 0x4c ], %g1 <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; rtems_filesystem_freenode( &loc ); 40002cbc: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== 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; 40002cc0: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; 40002cc4: c2 04 60 50 ld [ %l1 + 0x50 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40002cc8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40002ccc: 02 80 00 0c be 40002cfc <== NOT EXECUTED 40002cd0: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED 40002cd4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40002cd8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002cdc: 02 80 00 08 be 40002cfc <== NOT EXECUTED 40002ce0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40002ce4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002ce8: b0 10 20 00 clr %i0 <== NOT EXECUTED 40002cec: 81 c7 e0 08 ret <== NOT EXECUTED 40002cf0: 81 e8 00 00 restore <== NOT EXECUTED 40002cf4: 81 c7 e0 08 ret <== NOT EXECUTED 40002cf8: 91 e8 20 0d restore %g0, 0xd, %o0 <== NOT EXECUTED 40002cfc: b0 10 20 00 clr %i0 <== NOT EXECUTED #endif return RTEMS_SUCCESSFUL; } 40002d00: 81 c7 e0 08 ret <== NOT EXECUTED 40002d04: 81 e8 00 00 restore <== NOT EXECUTED 40008454 : rtems_status_code rtems_io_register_driver( rtems_device_major_number major, rtems_driver_address_table *driver_table, rtems_device_major_number *registered_major ) { 40008454: 9d e3 bf 98 save %sp, -104, %sp /* * Validate the pointer data and contents passed in */ if ( !driver_table ) 40008458: 92 96 60 00 orcc %i1, 0, %o1 4000845c: 02 80 00 40 be 4000855c 40008460: 80 a6 a0 00 cmp %i2, 0 return RTEMS_INVALID_ADDRESS; if ( !registered_major ) 40008464: 02 80 00 41 be 40008568 40008468: 82 10 20 09 mov 9, %g1 return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) 4000846c: c2 02 40 00 ld [ %o1 ], %g1 40008470: 80 a0 60 00 cmp %g1, 0 40008474: 12 80 00 07 bne 40008490 40008478: 03 10 00 77 sethi %hi(0x4001dc00), %g1 4000847c: c2 02 60 04 ld [ %o1 + 4 ], %g1 40008480: 80 a0 60 00 cmp %g1, 0 40008484: 22 80 00 39 be,a 40008568 40008488: 82 10 20 09 mov 9, %g1 *registered_major = 0; /* * The requested major number is higher than what is configured. */ if ( major >= _IO_Number_of_drivers ) 4000848c: 03 10 00 77 sethi %hi(0x4001dc00), %g1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) return RTEMS_INVALID_ADDRESS; *registered_major = 0; 40008490: c0 26 80 00 clr [ %i2 ] /* * The requested major number is higher than what is configured. */ if ( major >= _IO_Number_of_drivers ) 40008494: c8 00 60 dc ld [ %g1 + 0xdc ], %g4 40008498: 80 a6 00 04 cmp %i0, %g4 4000849c: 1a 80 00 33 bcc 40008568 400084a0: 82 10 20 0a mov 0xa, %g1 /* * Test for initialise/open being present to indicate the driver slot is * in use. */ if ( major == 0 ) { 400084a4: 80 a6 20 00 cmp %i0, 0 400084a8: 12 80 00 18 bne 40008508 400084ac: 03 10 00 77 sethi %hi(0x4001dc00), %g1 boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 400084b0: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 ! 4001dce0 <_IO_Driver_address_table> 400084b4: 85 29 20 03 sll %g4, 3, %g2 400084b8: 83 29 20 05 sll %g4, 5, %g1 400084bc: b0 01 3f ff add %g4, -1, %i0 400084c0: 82 20 40 02 sub %g1, %g2, %g1 400084c4: 82 00 7f e8 add %g1, -24, %g1 400084c8: 10 80 00 0b b 400084f4 400084cc: 84 00 40 03 add %g1, %g3, %g2 if ( !_IO_Driver_address_table[major].initialization_entry && 400084d0: 80 a0 60 00 cmp %g1, 0 400084d4: 32 80 00 07 bne,a 400084f0 400084d8: b0 06 3f ff add %i0, -1, %i0 400084dc: c2 00 a0 04 ld [ %g2 + 4 ], %g1 400084e0: 80 a0 60 00 cmp %g1, 0 400084e4: 02 80 00 09 be 40008508 400084e8: 03 10 00 77 sethi %hi(0x4001dc00), %g1 * in use. */ if ( major == 0 ) { boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 400084ec: b0 06 3f ff add %i0, -1, %i0 <== NOT EXECUTED 400084f0: 84 00 bf e8 add %g2, -24, %g2 400084f4: 80 a6 20 00 cmp %i0, 0 400084f8: 32 bf ff f6 bne,a 400084d0 400084fc: c2 00 80 00 ld [ %g2 ], %g1 40008500: 10 80 00 1a b 40008568 40008504: 82 10 20 05 mov 5, %g1 if ( !found ) return RTEMS_TOO_MANY; } if ( _IO_Driver_address_table[major].initialization_entry || 40008508: c6 00 60 e0 ld [ %g1 + 0xe0 ], %g3 4000850c: 85 2e 20 03 sll %i0, 3, %g2 40008510: 83 2e 20 05 sll %i0, 5, %g1 40008514: 82 20 40 02 sub %g1, %g2, %g1 40008518: c4 00 40 03 ld [ %g1 + %g3 ], %g2 4000851c: 80 a0 a0 00 cmp %g2, 0 40008520: 12 80 00 11 bne 40008564 40008524: 90 00 40 03 add %g1, %g3, %o0 40008528: c2 02 20 04 ld [ %o0 + 4 ], %g1 4000852c: 80 a0 60 00 cmp %g1, 0 40008530: 32 80 00 0e bne,a 40008568 40008534: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40008538: 40 00 1d 52 call 4000fa80 4000853c: 94 10 20 18 mov 0x18, %o2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40008540: 90 10 00 18 mov %i0, %o0 _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; *registered_major = major; 40008544: f0 26 80 00 st %i0, [ %i2 ] rtems_io_initialize( major, 0, NULL ); 40008548: 92 10 20 00 clr %o1 4000854c: 7f ff ff 52 call 40008294 40008550: 94 10 20 00 clr %o2 40008554: 10 80 00 05 b 40008568 40008558: 82 10 20 00 clr %g1 return RTEMS_SUCCESSFUL; 4000855c: 10 80 00 03 b 40008568 40008560: 82 10 20 09 mov 9, %g1 40008564: 82 10 20 0c mov 0xc, %g1 } 40008568: 81 c7 e0 08 ret 4000856c: 91 e8 00 01 restore %g0, %g1, %o0 40009a24 : #include #include void rtems_iterate_over_all_threads(rtems_per_thread_routine routine) { 40009a24: 9d e3 bf 98 save %sp, -104, %sp uint32_t i; uint32_t api_index; Thread_Control *the_thread; Objects_Information *information; if ( !routine ) 40009a28: 80 a6 20 00 cmp %i0, 0 40009a2c: 02 80 00 1d be 40009aa0 40009a30: 03 10 00 98 sethi %hi(0x40026000), %g1 return; 40009a34: a4 10 63 14 or %g1, 0x314, %l2 ! 40026314 <_Objects_Information_table+0x4> for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40009a38: a6 04 a0 10 add %l2, 0x10, %l3 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 40009a3c: c2 04 80 00 ld [ %l2 ], %g1 40009a40: 80 a0 60 00 cmp %g1, 0 40009a44: 22 80 00 14 be,a 40009a94 40009a48: a4 04 a0 04 add %l2, 4, %l2 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 40009a4c: e0 00 60 04 ld [ %g1 + 4 ], %l0 if ( information ) { 40009a50: 80 a4 20 00 cmp %l0, 0 40009a54: 12 80 00 0b bne 40009a80 40009a58: a2 10 20 01 mov 1, %l1 for ( i=1 ; i <= information->maximum ; i++ ) { 40009a5c: 10 80 00 0e b 40009a94 <== NOT EXECUTED 40009a60: a4 04 a0 04 add %l2, 4, %l2 <== NOT EXECUTED the_thread = (Thread_Control *)information->local_table[ i ]; 40009a64: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 40009a68: d0 00 40 08 ld [ %g1 + %o0 ], %o0 if ( !the_thread ) 40009a6c: 80 a2 20 00 cmp %o0, 0 40009a70: 02 80 00 04 be 40009a80 40009a74: a2 04 60 01 inc %l1 continue; (*routine)(the_thread); 40009a78: 9f c6 00 00 call %i0 40009a7c: 01 00 00 00 nop 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++ ) { 40009a80: c2 14 20 10 lduh [ %l0 + 0x10 ], %g1 40009a84: 80 a4 40 01 cmp %l1, %g1 40009a88: 08 bf ff f7 bleu 40009a64 40009a8c: 91 2c 60 02 sll %l1, 2, %o0 40009a90: a4 04 a0 04 add %l2, 4, %l2 if ( !routine ) return; for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40009a94: 80 a4 80 13 cmp %l2, %l3 40009a98: 32 bf ff ea bne,a 40009a40 40009a9c: c2 04 80 00 ld [ %l2 ], %g1 40009aa0: 81 c7 e0 08 ret 40009aa4: 81 e8 00 00 restore 4000c764 : * 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 ) { 4000c764: 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 ); 4000c768: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000c76c: d0 00 60 e0 ld [ %g1 + 0xe0 ], %o0 ! 40019ce0 4000c770: 92 10 20 00 clr %o1 4000c774: 7f ff e8 0c call 400067a4 4000c778: 94 10 20 00 clr %o2 if (rtems_libio_iop_freelist) { 4000c77c: 23 10 00 67 sethi %hi(0x40019c00), %l1 4000c780: c4 04 60 dc ld [ %l1 + 0xdc ], %g2 ! 40019cdc 4000c784: 80 a0 a0 00 cmp %g2, 0 4000c788: 02 80 00 28 be 4000c828 4000c78c: b0 10 20 00 clr %i0 rc = rtems_semaphore_create( 4000c790: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000c794: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 4000c798: 92 10 20 01 mov 1, %o1 4000c79c: 86 20 80 03 sub %g2, %g3, %g3 4000c7a0: 87 38 e0 02 sra %g3, 2, %g3 4000c7a4: 83 28 e0 02 sll %g3, 2, %g1 4000c7a8: 85 28 e0 06 sll %g3, 6, %g2 4000c7ac: 84 20 80 01 sub %g2, %g1, %g2 4000c7b0: 83 28 a0 06 sll %g2, 6, %g1 4000c7b4: 82 20 40 02 sub %g1, %g2, %g1 4000c7b8: 85 28 60 0c sll %g1, 0xc, %g2 4000c7bc: 82 00 40 02 add %g1, %g2, %g1 4000c7c0: 82 00 40 03 add %g1, %g3, %g1 4000c7c4: 83 28 60 04 sll %g1, 4, %g1 4000c7c8: 82 20 40 03 sub %g1, %g3, %g1 4000c7cc: 83 28 60 02 sll %g1, 2, %g1 4000c7d0: 86 20 c0 01 sub %g3, %g1, %g3 4000c7d4: 94 10 20 54 mov 0x54, %o2 4000c7d8: 96 10 20 00 clr %o3 4000c7dc: 11 13 10 92 sethi %hi(0x4c424800), %o0 4000c7e0: 98 07 bf f4 add %fp, -12, %o4 4000c7e4: 90 12 21 00 or %o0, 0x100, %o0 4000c7e8: 7f ff e7 15 call 4000643c 4000c7ec: 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) 4000c7f0: 80 a2 20 00 cmp %o0, 0 4000c7f4: 32 80 00 0d bne,a 4000c828 4000c7f8: b0 10 20 00 clr %i0 <== NOT EXECUTED goto failed; iop = rtems_libio_iop_freelist; 4000c7fc: f0 04 60 dc ld [ %l1 + 0xdc ], %i0 next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); 4000c800: 92 10 20 00 clr %o1 &sema ); if (rc != RTEMS_SUCCESSFUL) goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; 4000c804: e0 06 20 28 ld [ %i0 + 0x28 ], %l0 (void) memset( iop, 0, sizeof(rtems_libio_t) ); 4000c808: 90 10 00 18 mov %i0, %o0 4000c80c: 40 00 09 09 call 4000ec30 4000c810: 94 10 20 34 mov 0x34, %o2 iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; 4000c814: c2 07 bf f4 ld [ %fp + -12 ], %g1 rtems_libio_iop_freelist = next; 4000c818: e0 24 60 dc st %l0, [ %l1 + 0xdc ] 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; 4000c81c: c2 26 20 20 st %g1, [ %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; 4000c820: 82 10 21 00 mov 0x100, %g1 4000c824: c2 26 20 0c st %g1, [ %i0 + 0xc ] failed: iop = 0; done: rtems_semaphore_release( rtems_libio_semaphore ); 4000c828: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000c82c: 7f ff e8 a5 call 40006ac0 4000c830: d0 00 60 e0 ld [ %g1 + 0xe0 ], %o0 ! 40019ce0 return iop; } 4000c834: 81 c7 e0 08 ret 4000c838: 81 e8 00 00 restore 40002f5c : * * Called by BSP startup code to initialize the libio subsystem. */ void rtems_libio_init( void ) { 40002f5c: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code rc; int i; rtems_libio_t *iop; if (rtems_libio_number_iops > 0) 40002f60: 23 10 00 63 sethi %hi(0x40018c00), %l1 40002f64: d0 04 61 4c ld [ %l1 + 0x14c ], %o0 ! 40018d4c 40002f68: 80 a2 20 00 cmp %o0, 0 40002f6c: 22 80 00 1e be,a 40002fe4 40002f70: 11 13 10 92 sethi %hi(0x4c424800), %o0 <== NOT EXECUTED { rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, 40002f74: 92 10 20 34 mov 0x34, %o1 40002f78: 40 00 00 ec call 40003328 40002f7c: 21 10 00 67 sethi %hi(0x40019c00), %l0 sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) 40002f80: 80 a2 20 00 cmp %o0, 0 40002f84: 12 80 00 04 bne 40002f94 40002f88: d0 24 20 d8 st %o0, [ %l0 + 0xd8 ] rtems_fatal_error_occurred(RTEMS_NO_MEMORY); 40002f8c: 40 00 11 03 call 40007398 <== NOT EXECUTED 40002f90: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED iop = rtems_libio_iop_freelist = rtems_libio_iops; 40002f94: c8 04 20 d8 ld [ %l0 + 0xd8 ], %g4 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40002f98: c6 04 61 4c ld [ %l1 + 0x14c ], %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; 40002f9c: 03 10 00 67 sethi %hi(0x40019c00), %g1 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40002fa0: 84 10 20 00 clr %g2 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; 40002fa4: c8 20 60 dc st %g4, [ %g1 + 0xdc ] for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40002fa8: 10 80 00 03 b 40002fb4 40002fac: 82 10 00 04 mov %g4, %g1 iop->data1 = iop + 1; 40002fb0: c2 20 7f f4 st %g1, [ %g1 + -12 ] 40002fb4: 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++) 40002fb8: 80 a0 80 03 cmp %g2, %g3 40002fbc: 12 bf ff fd bne 40002fb0 40002fc0: 82 00 60 34 add %g1, 0x34, %g1 iop->data1 = iop + 1; iop->data1 = NULL; 40002fc4: 85 28 e0 02 sll %g3, 2, %g2 40002fc8: 83 28 e0 04 sll %g3, 4, %g1 40002fcc: 82 20 40 02 sub %g1, %g2, %g1 40002fd0: 82 00 40 03 add %g1, %g3, %g1 40002fd4: 83 28 60 02 sll %g1, 2, %g1 40002fd8: 82 00 40 04 add %g1, %g4, %g1 40002fdc: c0 20 7f f4 clr [ %g1 + -12 ] /* * Create the binary semaphore used to provide mutual exclusion * on the IOP Table. */ rc = rtems_semaphore_create( 40002fe0: 11 13 10 92 sethi %hi(0x4c424800), %o0 40002fe4: 92 10 20 01 mov 1, %o1 40002fe8: 90 12 21 4f or %o0, 0x14f, %o0 40002fec: 94 10 20 54 mov 0x54, %o2 40002ff0: 96 10 20 00 clr %o3 40002ff4: 19 10 00 67 sethi %hi(0x40019c00), %o4 40002ff8: 40 00 0d 11 call 4000643c 40002ffc: 98 13 20 e0 or %o4, 0xe0, %o4 ! 40019ce0 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_libio_semaphore ); if ( rc != RTEMS_SUCCESSFUL ) 40003000: 80 a2 20 00 cmp %o0, 0 40003004: 02 80 00 04 be 40003014 40003008: 01 00 00 00 nop rtems_fatal_error_occurred( rc ); 4000300c: 40 00 10 e3 call 40007398 <== NOT EXECUTED 40003010: 01 00 00 00 nop <== NOT EXECUTED /* * Initialize the base file system infrastructure. */ rtems_filesystem_initialize(); 40003014: 40 00 24 94 call 4000c264 40003018: 81 e8 00 00 restore 4000301c: 01 00 00 00 nop 4000c610 : */ int rtems_libio_is_file_open( void *node_access ) { 4000c610: 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 ); 4000c614: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c618: d0 00 60 e0 ld [ %g1 + 0xe0 ], %o0 ! 40019ce0 <== NOT EXECUTED 4000c61c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c620: 7f ff e8 61 call 400067a4 <== NOT EXECUTED 4000c624: 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++){ 4000c628: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c62c: c4 00 60 d8 ld [ %g1 + 0xd8 ], %g2 ! 40019cd8 <== NOT EXECUTED 4000c630: 03 10 00 63 sethi %hi(0x40018c00), %g1 <== NOT EXECUTED 4000c634: c8 00 61 4c ld [ %g1 + 0x14c ], %g4 ! 40018d4c <== NOT EXECUTED 4000c638: 10 80 00 0c b 4000c668 <== NOT EXECUTED 4000c63c: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 4000c640: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000c644: 02 80 00 08 be 4000c664 <== NOT EXECUTED 4000c648: 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 ) { 4000c64c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4000c650: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4000c654: 12 80 00 05 bne 4000c668 <== NOT EXECUTED 4000c658: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 4000c65c: 10 80 00 07 b 4000c678 <== NOT EXECUTED 4000c660: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000c664: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 4000c668: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 4000c66c: 32 bf ff f5 bne,a 4000c640 <== NOT EXECUTED 4000c670: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4000c674: b0 10 20 00 clr %i0 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000c678: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c67c: 7f ff e9 11 call 40006ac0 <== NOT EXECUTED 4000c680: d0 00 60 e0 ld [ %g1 + 0xe0 ], %o0 ! 40019ce0 <== NOT EXECUTED return result; } 4000c684: 81 c7 e0 08 ret <== NOT EXECUTED 4000c688: 81 e8 00 00 restore <== NOT EXECUTED 4000c68c : */ int rtems_libio_is_open_files_in_fs( rtems_filesystem_mount_table_entry_t * fs_mt_entry ) { 4000c68c: 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 ); 4000c690: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c694: d0 00 60 e0 ld [ %g1 + 0xe0 ], %o0 ! 40019ce0 <== NOT EXECUTED 4000c698: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c69c: 7f ff e8 42 call 400067a4 <== NOT EXECUTED 4000c6a0: 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++){ 4000c6a4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c6a8: c4 00 60 d8 ld [ %g1 + 0xd8 ], %g2 ! 40019cd8 <== NOT EXECUTED 4000c6ac: 03 10 00 63 sethi %hi(0x40018c00), %g1 <== NOT EXECUTED 4000c6b0: c8 00 61 4c ld [ %g1 + 0x14c ], %g4 ! 40018d4c <== NOT EXECUTED 4000c6b4: 10 80 00 0c b 4000c6e4 <== NOT EXECUTED 4000c6b8: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 4000c6bc: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000c6c0: 02 80 00 08 be 4000c6e0 <== NOT EXECUTED 4000c6c4: 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 ) { 4000c6c8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000c6cc: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4000c6d0: 12 80 00 05 bne 4000c6e4 <== NOT EXECUTED 4000c6d4: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 4000c6d8: 10 80 00 07 b 4000c6f4 <== NOT EXECUTED 4000c6dc: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000c6e0: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 4000c6e4: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 4000c6e8: 32 bf ff f5 bne,a 4000c6bc <== NOT EXECUTED 4000c6ec: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4000c6f0: b0 10 20 00 clr %i0 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000c6f4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000c6f8: 7f ff e8 f2 call 40006ac0 <== NOT EXECUTED 4000c6fc: d0 00 60 e0 ld [ %g1 + 0xe0 ], %o0 ! 40019ce0 <== NOT EXECUTED return result; } 4000c700: 81 c7 e0 08 ret <== NOT EXECUTED 4000c704: 81 e8 00 00 restore <== NOT EXECUTED 40018310 : rtems_filesystem_freenode( &env->root_directory); free(env); } } rtems_status_code rtems_libio_set_private_env(void) { 40018310: 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); 40018314: 90 10 20 00 clr %o0 <== NOT EXECUTED 40018318: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001831c: 40 00 02 12 call 40018b64 <== NOT EXECUTED 40018320: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 40018324: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40018328: 12 80 00 19 bne 4001838c <== NOT EXECUTED 4001832c: 25 10 00 e1 sethi %hi(0x40038400), %l2 <== NOT EXECUTED /* Only for the first time a malloc is necesary */ if (rtems_current_user_env==&rtems_global_user_env) { 40018330: c4 04 a1 60 ld [ %l2 + 0x160 ], %g2 ! 40038560 <== NOT EXECUTED 40018334: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 40018338: 82 10 62 64 or %g1, 0x264, %g1 ! 4003aa64 <== NOT EXECUTED 4001833c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40018340: 12 80 00 15 bne 40018394 <== NOT EXECUTED 40018344: a2 14 a1 60 or %l2, 0x160, %l1 <== NOT EXECUTED rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t)); 40018348: 7f ff b7 75 call 4000611c <== NOT EXECUTED 4001834c: 90 10 20 40 mov 0x40, %o0 <== NOT EXECUTED if (!tmp) 40018350: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 40018354: 12 80 00 04 bne 40018364 <== NOT EXECUTED 40018358: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001835c: 81 c7 e0 08 ret <== NOT EXECUTED 40018360: 91 e8 20 1a restore %g0, 0x1a, %o0 <== 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); 40018364: 90 10 20 00 clr %o0 <== NOT EXECUTED 40018368: 15 10 00 60 sethi %hi(0x40018000), %o2 <== NOT EXECUTED 4001836c: 40 00 03 16 call 40018fc4 <== NOT EXECUTED 40018370: 94 12 a1 ec or %o2, 0x1ec, %o2 ! 400181ec <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 40018374: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 40018378: 22 80 00 07 be,a 40018394 <== NOT EXECUTED 4001837c: e0 24 a1 60 st %l0, [ %l2 + 0x160 ] <== NOT EXECUTED /* don't use free_user_env because the pathlocs are * not initialized yet */ free(tmp); 40018380: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018384: 7f ff b7 3e call 4000607c <== NOT EXECUTED 40018388: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 4001838c: 81 c7 e0 08 ret <== NOT EXECUTED 40018390: 81 e8 00 00 restore <== NOT EXECUTED return sc; } rtems_current_user_env = tmp; }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ 40018394: 23 10 00 e1 sethi %hi(0x40038400), %l1 <== NOT EXECUTED 40018398: d0 04 61 60 ld [ %l1 + 0x160 ], %o0 ! 40038560 <== NOT EXECUTED 4001839c: 94 10 20 40 mov 0x40, %o2 <== NOT EXECUTED 400183a0: 13 10 00 ea sethi %hi(0x4003a800), %o1 <== NOT EXECUTED 400183a4: 40 00 31 39 call 40024888 <== NOT EXECUTED 400183a8: 92 12 62 64 or %o1, 0x264, %o1 ! 4003aa64 <== 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; 400183ac: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== 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*/ 400183b0: d0 04 61 60 ld [ %l1 + 0x160 ], %o0 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400183b4: d2 00 61 f8 ld [ %g1 + 0x1f8 ], %o1 <== 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*/ 400183b8: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400183bc: 92 02 60 18 add %o1, 0x18, %o1 <== 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*/ 400183c0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 400183c4: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 400183c8: 40 00 31 30 call 40024888 <== NOT EXECUTED 400183cc: 90 02 20 14 add %o0, 0x14, %o0 <== 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); 400183d0: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 400183d4: 96 10 20 00 clr %o3 <== NOT EXECUTED 400183d8: 25 10 00 d2 sethi %hi(0x40034800), %l2 <== NOT EXECUTED 400183dc: 92 10 20 00 clr %o1 <== NOT EXECUTED 400183e0: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 400183e4: 7f ff b5 c7 call 40005b00 <== NOT EXECUTED 400183e8: 90 14 a2 d8 or %l2, 0x2d8, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 400183ec: d0 04 61 60 ld [ %l1 + 0x160 ], %o0 <== NOT EXECUTED 400183f0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400183f4: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 400183f8: 40 00 31 24 call 40024888 <== NOT EXECUTED 400183fc: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 40018400: 92 10 20 00 clr %o1 <== NOT EXECUTED 40018404: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40018408: 90 14 a2 d8 or %l2, 0x2d8, %o0 <== NOT EXECUTED 4001840c: 7f ff b5 bd call 40005b00 <== NOT EXECUTED 40018410: 96 10 20 00 clr %o3 <== NOT EXECUTED rtems_filesystem_current = loc; 40018414: d0 04 61 60 ld [ %l1 + 0x160 ], %o0 <== NOT EXECUTED 40018418: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001841c: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 40018420: 40 00 31 1a call 40024888 <== NOT EXECUTED 40018424: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 40018428: 81 c7 e0 08 ret <== NOT EXECUTED 4001842c: 81 e8 00 00 restore <== NOT EXECUTED 40018264 : * 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) { 40018264: 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); 40018268: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001826c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40018270: 40 00 02 3d call 40018b64 <== NOT EXECUTED 40018274: 94 07 bf f0 add %fp, -16, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 40018278: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 4001827c: 12 80 00 23 bne 40018308 <== NOT EXECUTED 40018280: 25 10 00 e1 sethi %hi(0x40038400), %l2 <== NOT EXECUTED if (rtems_current_user_env->task_id==current_task_id) { 40018284: e0 04 a1 60 ld [ %l2 + 0x160 ], %l0 ! 40038560 <== NOT EXECUTED 40018288: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001828c: c4 04 00 00 ld [ %l0 ], %g2 <== NOT EXECUTED 40018290: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40018294: 12 80 00 09 bne 400182b8 <== NOT EXECUTED 40018298: a2 14 a1 60 or %l2, 0x160, %l1 <== NOT EXECUTED /* 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); 4001829c: 40 00 03 a6 call 40019134 <== NOT EXECUTED 400182a0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 400182a4: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 400182a8: 12 80 00 18 bne 40018308 <== NOT EXECUTED 400182ac: 01 00 00 00 nop <== NOT EXECUTED free_user_env(tmp); 400182b0: 7f ff ff cf call 400181ec <== NOT EXECUTED 400182b4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED }; /* AT THIS POINT, rtems_current_user_env is DANGLING */ sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env, 400182b8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400182bc: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 400182c0: 40 00 04 09 call 400192e4 <== NOT EXECUTED 400182c4: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED (void*)&shared_user_env ); if (sc != RTEMS_SUCCESSFUL) 400182c8: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 400182cc: 12 80 00 0c bne 400182fc <== NOT EXECUTED 400182d0: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED goto bailout; sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env); 400182d4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 400182d8: 15 10 00 60 sethi %hi(0x40018000), %o2 <== NOT EXECUTED 400182dc: 40 00 03 3a call 40018fc4 <== NOT EXECUTED 400182e0: 94 12 a1 ec or %o2, 0x1ec, %o2 ! 400181ec <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 400182e4: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 400182e8: 12 80 00 05 bne 400182fc <== NOT EXECUTED 400182ec: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED goto bailout; /* the current_user_env is the same pointer that remote env */ rtems_current_user_env = shared_user_env; 400182f0: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 400182f4: 10 80 00 05 b 40018308 <== NOT EXECUTED 400182f8: c2 24 a1 60 st %g1, [ %l2 + 0x160 ] <== NOT EXECUTED return RTEMS_SUCCESSFUL; bailout: /* fallback to the global env */ rtems_current_user_env = &rtems_global_user_env; 400182fc: 05 10 00 e1 sethi %hi(0x40038400), %g2 <== NOT EXECUTED 40018300: 82 10 62 64 or %g1, 0x264, %g1 <== NOT EXECUTED 40018304: c2 20 a1 60 st %g1, [ %g2 + 0x160 ] <== NOT EXECUTED return sc; } 40018308: 81 c7 e0 08 ret <== NOT EXECUTED 4001830c: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED 4000c5b8 : */ uint32_t rtems_libio_to_fcntl_flags( uint32_t flags ) { 4000c5b8: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED uint32_t fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { 4000c5bc: 82 08 a0 06 and %g2, 6, %g1 <== NOT EXECUTED 4000c5c0: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4000c5c4: 02 80 00 07 be 4000c5e0 <== NOT EXECUTED 4000c5c8: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED fcntl_flags |= O_RDWR; } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 4000c5cc: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 4000c5d0: 12 80 00 04 bne 4000c5e0 <== NOT EXECUTED 4000c5d4: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000c5d8: 83 30 a0 02 srl %g2, 2, %g1 <== NOT EXECUTED 4000c5dc: 90 08 60 01 and %g1, 1, %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 ) { 4000c5e0: 80 88 a0 01 btst 1, %g2 <== NOT EXECUTED 4000c5e4: 02 80 00 04 be 4000c5f4 <== NOT EXECUTED 4000c5e8: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED fcntl_flags |= O_NONBLOCK; 4000c5ec: 03 00 00 10 sethi %hi(0x4000), %g1 <== NOT EXECUTED 4000c5f0: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED } if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) { 4000c5f4: 32 80 00 02 bne,a 4000c5fc <== NOT EXECUTED 4000c5f8: 90 12 20 08 or %o0, 8, %o0 <== NOT EXECUTED fcntl_flags |= O_APPEND; } if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) { 4000c5fc: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED 4000c600: 32 80 00 02 bne,a 4000c608 <== NOT EXECUTED 4000c604: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED fcntl_flags |= O_CREAT; } return fcntl_flags; } 4000c608: 81 c3 e0 08 retl <== NOT EXECUTED 4000c60c: 01 00 00 00 nop 4000f608 : Objects_Id id, void *buffer, size_t size, uint32_t *count ) { 4000f608: 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 ) 4000f60c: 80 a6 60 00 cmp %i1, 0 4000f610: 02 80 00 26 be 4000f6a8 4000f614: 80 a6 e0 00 cmp %i3, 0 return RTEMS_INVALID_ADDRESS; if ( !count ) 4000f618: 02 80 00 24 be 4000f6a8 4000f61c: 11 10 00 cd sethi %hi(0x40033400), %o0 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 4000f620: 92 10 00 18 mov %i0, %o1 4000f624: 90 12 21 b0 or %o0, 0x1b0, %o0 4000f628: 40 00 18 89 call 4001584c <_Objects_Get> 4000f62c: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4000f630: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f634: 80 a0 60 00 cmp %g1, 0 4000f638: 02 80 00 07 be 4000f654 4000f63c: 9a 10 00 1b mov %i3, %o5 4000f640: 80 a0 60 02 cmp %g1, 2 4000f644: 08 80 00 1a bleu 4000f6ac 4000f648: 90 10 20 04 mov 4, %o0 4000f64c: 10 80 00 18 b 4000f6ac <== NOT EXECUTED 4000f650: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: core_status = _CORE_message_queue_Broadcast( 4000f654: 92 10 00 19 mov %i1, %o1 4000f658: 94 10 00 1a mov %i2, %o2 4000f65c: 96 10 00 18 mov %i0, %o3 4000f660: 98 10 20 00 clr %o4 4000f664: 40 00 13 17 call 400142c0 <_CORE_message_queue_Broadcast> 4000f668: 90 02 20 14 add %o0, 0x14, %o0 4000f66c: 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 ) 4000f670: 03 10 00 cc sethi %hi(0x40033000), %g1 4000f674: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40033290 <_Thread_Dispatch_disable_level> 4000f678: 84 00 bf ff add %g2, -1, %g2 4000f67c: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 4000f680: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 4000f684: 80 a0 60 00 cmp %g1, 0 4000f688: 12 80 00 04 bne 4000f698 4000f68c: 01 00 00 00 nop _Thread_Dispatch(); 4000f690: 40 00 1d 63 call 40016c1c <_Thread_Dispatch> 4000f694: 01 00 00 00 nop #endif count ); _Thread_Enable_dispatch(); return 4000f698: 40 00 01 2e call 4000fb50 <_Message_queue_Translate_core_message_queue_return_code> 4000f69c: 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 */ } 4000f6a0: 81 c7 e0 08 ret 4000f6a4: 91 e8 00 08 restore %g0, %o0, %o0 #endif count ); _Thread_Enable_dispatch(); return 4000f6a8: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED _Message_queue_Translate_core_message_queue_return_code( core_status ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f6ac: b0 10 00 08 mov %o0, %i0 4000f6b0: 81 c7 e0 08 ret 4000f6b4: 81 e8 00 00 restore 4000f6ec : uint32_t count, uint32_t max_message_size, rtems_attribute attribute_set, Objects_Id *id ) { 4000f6ec: 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 ) ) 4000f6f0: a2 96 20 00 orcc %i0, 0, %l1 4000f6f4: 02 80 00 17 be 4000f750 4000f6f8: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 4000f6fc: 80 a7 20 00 cmp %i4, 0 4000f700: 02 80 00 14 be 4000f750 4000f704: 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 ) 4000f708: 80 a6 60 00 cmp %i1, 0 4000f70c: 02 80 00 11 be 4000f750 4000f710: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( max_message_size == 0 ) 4000f714: 80 a6 a0 00 cmp %i2, 0 4000f718: 02 80 00 0e be 4000f750 4000f71c: b0 10 20 08 mov 8, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000f720: 05 10 00 cc sethi %hi(0x40033000), %g2 4000f724: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4000f728: 82 00 60 01 inc %g1 4000f72c: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] #endif #endif _Thread_Disable_dispatch(); /* protects object pointer */ the_message_queue = _Message_queue_Allocate( count, max_message_size ); 4000f730: 90 10 00 19 mov %i1, %o0 4000f734: 40 00 2b 2c call 4001a3e4 <_Message_queue_Allocate> 4000f738: 92 10 00 1a mov %i2, %o1 if ( !the_message_queue ) { 4000f73c: a0 92 20 00 orcc %o0, 0, %l0 4000f740: 12 80 00 06 bne 4000f758 4000f744: 80 8e e0 04 btst 4, %i3 _Thread_Enable_dispatch(); 4000f748: 7f ff ff dc call 4000f6b8 <_Thread_Enable_dispatch> 4000f74c: b0 10 20 05 mov 5, %i0 4000f750: 81 c7 e0 08 ret 4000f754: 81 e8 00 00 restore } #endif the_message_queue->attribute_set = attribute_set; if (_Attributes_Is_priority( attribute_set ) ) 4000f758: 02 80 00 05 be 4000f76c 4000f75c: f6 24 20 10 st %i3, [ %l0 + 0x10 ] the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY; 4000f760: 82 10 20 01 mov 1, %g1 4000f764: 10 80 00 03 b 4000f770 4000f768: c2 27 bf f4 st %g1, [ %fp + -12 ] else the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO; 4000f76c: c0 27 bf f4 clr [ %fp + -12 ] if ( ! _CORE_message_queue_Initialize( 4000f770: 94 10 00 19 mov %i1, %o2 4000f774: 96 10 00 1a mov %i2, %o3 4000f778: 90 04 20 14 add %l0, 0x14, %o0 4000f77c: 40 00 13 1d call 400143f0 <_CORE_message_queue_Initialize> 4000f780: 92 07 bf f4 add %fp, -12, %o1 4000f784: 80 a2 20 00 cmp %o0, 0 4000f788: 12 80 00 0a bne 4000f7b0 4000f78c: 11 10 00 cd sethi %hi(0x40033400), %o0 RTEMS_INLINE_ROUTINE void _Message_queue_Free ( Message_queue_Control *the_message_queue ) { _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 4000f790: 90 12 21 b0 or %o0, 0x1b0, %o0 ! 400335b0 <_Message_queue_Information> <== NOT EXECUTED 4000f794: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000f798: 40 00 17 d7 call 400156f4 <_Objects_Free> <== NOT EXECUTED 4000f79c: b0 10 20 0d mov 0xd, %i0 <== NOT EXECUTED _Objects_MP_Close( &_Message_queue_Information, the_message_queue->Object.id); #endif _Message_queue_Free( the_message_queue ); _Thread_Enable_dispatch(); 4000f7a0: 7f ff ff c6 call 4000f6b8 <_Thread_Enable_dispatch> <== NOT EXECUTED 4000f7a4: 01 00 00 00 nop <== NOT EXECUTED 4000f7a8: 81 c7 e0 08 ret <== NOT EXECUTED 4000f7ac: 81 e8 00 00 restore <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f7b0: 90 12 21 b0 or %o0, 0x1b0, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000f7b4: c2 04 20 08 ld [ %l0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f7b8: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000f7bc: 05 00 00 3f sethi %hi(0xfc00), %g2 4000f7c0: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000f7c4: 82 08 40 02 and %g1, %g2, %g1 4000f7c8: 80 a0 40 03 cmp %g1, %g3 4000f7cc: 38 80 00 06 bgu,a 4000f7e4 4000f7d0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 4000f7d4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000f7d8: 83 28 60 02 sll %g1, 2, %g1 4000f7dc: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Message_queue_Information, &the_message_queue->Object, (Objects_Name) name ); *id = the_message_queue->Object.id; 4000f7e0: c2 04 20 08 ld [ %l0 + 8 ], %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; 4000f7e4: e2 24 20 0c st %l1, [ %l0 + 0xc ] 4000f7e8: c2 27 00 00 st %g1, [ %i4 ] name, 0 ); #endif _Thread_Enable_dispatch(); 4000f7ec: 7f ff ff b3 call 4000f6b8 <_Thread_Enable_dispatch> 4000f7f0: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 4000f7f4: 81 c7 e0 08 ret 4000f7f8: 81 e8 00 00 restore 4001331c : */ rtems_status_code rtems_message_queue_delete( Objects_Id id ) { 4001331c: 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 *) 40013320: 21 10 00 a2 sethi %hi(0x40028800), %l0 40013324: 92 10 00 18 mov %i0, %o1 40013328: 94 07 bf f4 add %fp, -12, %o2 4001332c: 7f ff e6 a5 call 4000cdc0 <_Objects_Get> 40013330: 90 14 22 3c or %l0, 0x23c, %o0 register Message_queue_Control *the_message_queue; Objects_Locations location; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40013334: c2 07 bf f4 ld [ %fp + -12 ], %g1 40013338: 80 a0 60 00 cmp %g1, 0 4001333c: 02 80 00 07 be 40013358 40013340: b0 10 00 08 mov %o0, %i0 40013344: 80 a0 60 02 cmp %g1, 2 40013348: 08 80 00 22 bleu 400133d0 4001334c: b0 10 20 04 mov 4, %i0 40013350: 81 c7 e0 08 ret <== NOT EXECUTED 40013354: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40013358: a0 14 22 3c or %l0, 0x23c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4001335c: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40013360: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40013364: 05 00 00 3f sethi %hi(0xfc00), %g2 40013368: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4001336c: 82 08 40 02 and %g1, %g2, %g1 40013370: 80 a0 40 03 cmp %g1, %g3 40013374: 18 80 00 05 bgu 40013388 40013378: 94 10 20 05 mov 5, %o2 information->local_table[ index ] = the_object; 4001337c: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 40013380: 83 28 60 02 sll %g1, 2, %g1 40013384: c0 20 80 01 clr [ %g2 + %g1 ] case OBJECTS_LOCAL: _Objects_Close( &_Message_queue_Information, &the_message_queue->Object ); _CORE_message_queue_Close( 40013388: 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; 4001338c: c0 26 20 0c clr [ %i0 + 0xc ] 40013390: 40 00 01 9e call 40013a08 <_CORE_message_queue_Close> 40013394: 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 ); 40013398: 90 10 00 10 mov %l0, %o0 4001339c: 7f ff e6 47 call 4000ccb8 <_Objects_Free> 400133a0: 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 ) 400133a4: 03 10 00 a1 sethi %hi(0x40028400), %g1 400133a8: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 400286a0 <_Thread_Dispatch_disable_level> 400133ac: b0 10 20 00 clr %i0 400133b0: 84 00 bf ff add %g2, -1, %g2 400133b4: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 400133b8: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 400133bc: 80 a0 60 00 cmp %g1, 0 400133c0: 12 80 00 04 bne 400133d0 400133c4: 01 00 00 00 nop _Thread_Dispatch(); 400133c8: 7f ff eb 72 call 4000e190 <_Thread_Dispatch> 400133cc: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400133d0: 81 c7 e0 08 ret 400133d4: 81 e8 00 00 restore 4000f8b8 : rtems_status_code rtems_message_queue_flush( Objects_Id id, uint32_t *count ) { 4000f8b8: 9d e3 bf 90 save %sp, -112, %sp 4000f8bc: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 4000f8c0: 80 a6 60 00 cmp %i1, 0 4000f8c4: 02 80 00 1c be 4000f934 4000f8c8: 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 *) 4000f8cc: 11 10 00 cd sethi %hi(0x40033400), %o0 4000f8d0: 94 07 bf f4 add %fp, -12, %o2 4000f8d4: 40 00 17 de call 4001584c <_Objects_Get> 4000f8d8: 90 12 21 b0 or %o0, 0x1b0, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4000f8dc: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f8e0: 80 a0 60 00 cmp %g1, 0 4000f8e4: 02 80 00 06 be 4000f8fc 4000f8e8: 80 a0 60 02 cmp %g1, 2 4000f8ec: 08 80 00 12 bleu 4000f934 4000f8f0: b0 10 20 04 mov 4, %i0 4000f8f4: 81 c7 e0 08 ret <== NOT EXECUTED 4000f8f8: 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 ); 4000f8fc: 40 00 12 9e call 40014374 <_CORE_message_queue_Flush> 4000f900: 90 02 20 14 add %o0, 0x14, %o0 4000f904: 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 ) 4000f908: 03 10 00 cc sethi %hi(0x40033000), %g1 4000f90c: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40033290 <_Thread_Dispatch_disable_level> 4000f910: b0 10 20 00 clr %i0 4000f914: 84 00 bf ff add %g2, -1, %g2 4000f918: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 4000f91c: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 4000f920: 80 a0 60 00 cmp %g1, 0 4000f924: 12 80 00 04 bne 4000f934 4000f928: 01 00 00 00 nop _Thread_Dispatch(); 4000f92c: 40 00 1c bc call 40016c1c <_Thread_Dispatch> 4000f930: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f934: 81 c7 e0 08 ret 4000f938: 81 e8 00 00 restore 4000f93c : rtems_status_code rtems_message_queue_get_number_pending( Objects_Id id, uint32_t *count ) { 4000f93c: 9d e3 bf 90 save %sp, -112, %sp 4000f940: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 4000f944: 80 a6 60 00 cmp %i1, 0 4000f948: 02 80 00 1b be 4000f9b4 4000f94c: b0 10 20 09 mov 9, %i0 4000f950: 11 10 00 cd sethi %hi(0x40033400), %o0 4000f954: 94 07 bf f4 add %fp, -12, %o2 4000f958: 40 00 17 bd call 4001584c <_Objects_Get> 4000f95c: 90 12 21 b0 or %o0, 0x1b0, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4000f960: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f964: 80 a0 60 00 cmp %g1, 0 4000f968: 22 80 00 07 be,a 4000f984 4000f96c: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 4000f970: 80 a0 60 02 cmp %g1, 2 4000f974: 08 80 00 10 bleu 4000f9b4 4000f978: b0 10 20 04 mov 4, %i0 4000f97c: 81 c7 e0 08 ret <== NOT EXECUTED 4000f980: 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; 4000f984: 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 ) 4000f988: 05 10 00 cc sethi %hi(0x40033000), %g2 4000f98c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4000f990: b0 10 20 00 clr %i0 4000f994: 82 00 7f ff add %g1, -1, %g1 4000f998: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] 4000f99c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 4000f9a0: 80 a0 60 00 cmp %g1, 0 4000f9a4: 12 80 00 04 bne 4000f9b4 4000f9a8: 01 00 00 00 nop _Thread_Dispatch(); 4000f9ac: 40 00 1c 9c call 40016c1c <_Thread_Dispatch> 4000f9b0: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f9b4: 81 c7 e0 08 ret 4000f9b8: 81 e8 00 00 restore 4001340c : void *buffer, size_t *size, uint32_t option_set, rtems_interval timeout ) { 4001340c: 9d e3 bf 90 save %sp, -112, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; boolean wait; if ( !buffer ) 40013410: 80 a6 60 00 cmp %i1, 0 40013414: 02 80 00 28 be 400134b4 40013418: 92 10 00 18 mov %i0, %o1 return RTEMS_INVALID_ADDRESS; if ( !size ) 4001341c: 80 a6 a0 00 cmp %i2, 0 40013420: 02 80 00 25 be 400134b4 40013424: 11 10 00 a2 sethi %hi(0x40028800), %o0 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 40013428: 94 07 bf f4 add %fp, -12, %o2 4001342c: 7f ff e6 65 call 4000cdc0 <_Objects_Get> 40013430: 90 12 22 3c or %o0, 0x23c, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40013434: c2 07 bf f4 ld [ %fp + -12 ], %g1 40013438: 80 a0 60 00 cmp %g1, 0 4001343c: 22 80 00 07 be,a 40013458 40013440: d2 02 20 08 ld [ %o0 + 8 ], %o1 40013444: 80 a0 60 02 cmp %g1, 2 40013448: 08 80 00 1c bleu 400134b8 4001344c: 90 10 20 04 mov 4, %o0 40013450: 10 80 00 1a b 400134b8 <== NOT EXECUTED 40013454: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED 40013458: 98 0e e0 01 and %i3, 1, %o4 if ( _Options_Is_no_wait( option_set ) ) wait = FALSE; else wait = TRUE; _CORE_message_queue_Seize( 4001345c: 94 10 00 19 mov %i1, %o2 40013460: 96 10 00 1a mov %i2, %o3 40013464: 98 1b 20 01 xor %o4, 1, %o4 40013468: 9a 10 00 1c mov %i4, %o5 4001346c: 40 00 01 94 call 40013abc <_CORE_message_queue_Seize> 40013470: 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 ) 40013474: 05 10 00 a1 sethi %hi(0x40028400), %g2 40013478: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 400286a0 <_Thread_Dispatch_disable_level> 4001347c: 82 00 7f ff add %g1, -1, %g1 40013480: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 40013484: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 40013488: 80 a0 60 00 cmp %g1, 0 4001348c: 12 80 00 05 bne 400134a0 40013490: 03 10 00 a1 sethi %hi(0x40028400), %g1 _Thread_Dispatch(); 40013494: 7f ff eb 3f call 4000e190 <_Thread_Dispatch> 40013498: 01 00 00 00 nop size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 4001349c: 03 10 00 a1 sethi %hi(0x40028400), %g1 400134a0: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 4002877c <_Thread_Executing> 400134a4: 40 00 00 32 call 4001356c <_Message_queue_Translate_core_message_queue_return_code> 400134a8: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400134ac: 81 c7 e0 08 ret 400134b0: 91 e8 00 08 restore %g0, %o0, %o0 size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 400134b4: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400134b8: b0 10 00 08 mov %o0, %i0 400134bc: 81 c7 e0 08 ret 400134c0: 81 e8 00 00 restore 400134c4 : rtems_status_code rtems_message_queue_send( Objects_Id id, void *buffer, size_t size ) { 400134c4: 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 ) 400134c8: 80 a6 60 00 cmp %i1, 0 400134cc: 02 80 00 26 be 40013564 400134d0: 90 10 20 09 mov 9, %o0 400134d4: 11 10 00 a2 sethi %hi(0x40028800), %o0 400134d8: 92 10 00 18 mov %i0, %o1 400134dc: 90 12 22 3c or %o0, 0x23c, %o0 400134e0: 7f ff e6 38 call 4000cdc0 <_Objects_Get> 400134e4: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 400134e8: c2 07 bf f4 ld [ %fp + -12 ], %g1 400134ec: 80 a0 60 00 cmp %g1, 0 400134f0: 22 80 00 07 be,a 4001350c 400134f4: 94 10 00 1a mov %i2, %o2 400134f8: 80 a0 60 02 cmp %g1, 2 400134fc: 08 80 00 1a bleu 40013564 40013500: 90 10 20 04 mov 4, %o0 40013504: 10 80 00 18 b 40013564 <== NOT EXECUTED 40013508: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, boolean wait, Watchdog_Interval timeout ) { return _CORE_message_queue_Submit( 4001350c: c0 23 a0 5c clr [ %sp + 0x5c ] 40013510: c0 23 a0 60 clr [ %sp + 0x60 ] 40013514: 92 10 00 19 mov %i1, %o1 40013518: 96 10 00 18 mov %i0, %o3 4001351c: 98 10 20 00 clr %o4 40013520: 90 02 20 14 add %o0, 0x14, %o0 40013524: 1b 1f ff ff sethi %hi(0x7ffffc00), %o5 40013528: 40 00 01 b2 call 40013bf0 <_CORE_message_queue_Submit> 4001352c: 9a 13 63 ff or %o5, 0x3ff, %o5 ! 7fffffff 40013530: 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 ) 40013534: 05 10 00 a1 sethi %hi(0x40028400), %g2 40013538: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 400286a0 <_Thread_Dispatch_disable_level> 4001353c: 82 00 7f ff add %g1, -1, %g1 40013540: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 40013544: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 40013548: 80 a0 60 00 cmp %g1, 0 4001354c: 12 80 00 04 bne 4001355c 40013550: 01 00 00 00 nop _Thread_Dispatch(); 40013554: 7f ff eb 0f call 4000e190 <_Thread_Dispatch> 40013558: 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); 4001355c: 40 00 00 04 call 4001356c <_Message_queue_Translate_core_message_queue_return_code> 40013560: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013564: 81 c7 e0 08 ret 40013568: 91 e8 00 08 restore %g0, %o0, %o0 4000914c : rtems_status_code rtems_message_queue_urgent( Objects_Id id, void *buffer, size_t size ) { 4000914c: 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 ) 40009150: 80 a6 60 00 cmp %i1, 0 40009154: 02 80 00 25 be 400091e8 40009158: 90 10 20 09 mov 9, %o0 4000915c: 11 10 00 86 sethi %hi(0x40021800), %o0 40009160: 92 10 00 18 mov %i0, %o1 40009164: 90 12 21 a8 or %o0, 0x1a8, %o0 40009168: 40 00 09 de call 4000b8e0 <_Objects_Get> 4000916c: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40009170: c2 07 bf f4 ld [ %fp + -12 ], %g1 40009174: 80 a0 60 00 cmp %g1, 0 40009178: 22 80 00 07 be,a 40009194 4000917c: 94 10 00 1a mov %i2, %o2 40009180: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40009184: 08 80 00 19 bleu 400091e8 <== NOT EXECUTED 40009188: 90 10 20 04 mov 4, %o0 <== NOT EXECUTED 4000918c: 10 80 00 17 b 400091e8 <== NOT EXECUTED 40009190: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, boolean wait, Watchdog_Interval timeout ) { return _CORE_message_queue_Submit( 40009194: c0 23 a0 5c clr [ %sp + 0x5c ] 40009198: c0 23 a0 60 clr [ %sp + 0x60 ] 4000919c: 92 10 00 19 mov %i1, %o1 400091a0: 96 10 00 18 mov %i0, %o3 400091a4: 98 10 20 00 clr %o4 400091a8: 1b 20 00 00 sethi %hi(0x80000000), %o5 400091ac: 40 00 05 c8 call 4000a8cc <_CORE_message_queue_Submit> 400091b0: 90 02 20 14 add %o0, 0x14, %o0 400091b4: 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 ) 400091b8: 03 10 00 85 sethi %hi(0x40021400), %g1 400091bc: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40021690 <_Thread_Dispatch_disable_level> 400091c0: 84 00 bf ff add %g2, -1, %g2 400091c4: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 400091c8: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 400091cc: 80 a0 60 00 cmp %g1, 0 400091d0: 12 80 00 04 bne 400091e0 400091d4: 01 00 00 00 nop _Thread_Dispatch(); 400091d8: 40 00 0e b6 call 4000ccb0 <_Thread_Dispatch> 400091dc: 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); 400091e0: 7f ff ff d1 call 40009124 <_Message_queue_Translate_core_message_queue_return_code> 400091e4: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400091e8: 81 c7 e0 08 ret 400091ec: 91 e8 00 08 restore %g0, %o0, %o0 40006fe0 : void rtems_panic( const char *printf_format, ... ) { 40006fe0: 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); 40006fe4: 11 08 00 00 sethi %hi(0x20000000), %o0 <== NOT EXECUTED ... ) { va_list arglist; va_start(arglist, printf_format); 40006fe8: 94 07 a0 48 add %fp, 0x48, %o2 <== NOT EXECUTED void rtems_panic( const char *printf_format, ... ) { 40006fec: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 40006ff0: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40006ff4: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40006ff8: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40006ffc: 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); 40007000: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40007004: 7f ff ff 8b call 40006e30 <== NOT EXECUTED 40007008: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); } 4000700c: 81 c7 e0 08 ret <== NOT EXECUTED 40007010: 81 e8 00 00 restore <== NOT EXECUTED 4000fbac : uint32_t length, uint32_t buffer_size, rtems_attribute attribute_set, Objects_Id *id ) { 4000fbac: 9d e3 bf 98 save %sp, -104, %sp register Partition_Control *the_partition; if ( !rtems_is_name_valid( name ) ) 4000fbb0: a6 96 20 00 orcc %i0, 0, %l3 4000fbb4: 02 80 00 1e be 4000fc2c 4000fbb8: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 4000fbbc: 80 a6 60 00 cmp %i1, 0 4000fbc0: 02 80 00 3d be 4000fcb4 4000fbc4: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 4000fbc8: 02 80 00 3b be 4000fcb4 4000fbcc: 80 a6 a0 00 cmp %i2, 0 return RTEMS_INVALID_ADDRESS; if ( length == 0 || buffer_size == 0 || length < buffer_size || 4000fbd0: 22 80 00 17 be,a 4000fc2c 4000fbd4: b0 10 20 08 mov 8, %i0 4000fbd8: 80 a6 e0 00 cmp %i3, 0 4000fbdc: 22 80 00 14 be,a 4000fc2c 4000fbe0: b0 10 20 08 mov 8, %i0 4000fbe4: 80 a6 80 1b cmp %i2, %i3 4000fbe8: 0a 80 00 35 bcs 4000fcbc 4000fbec: 80 8e e0 07 btst 7, %i3 4000fbf0: 12 80 00 33 bne 4000fcbc 4000fbf4: 80 8e 60 07 btst 7, %i1 !_Partition_Is_buffer_size_aligned( buffer_size ) ) return RTEMS_INVALID_SIZE; if ( !_Addresses_Is_aligned( starting_address ) ) 4000fbf8: 12 80 00 2f bne 4000fcb4 4000fbfc: 05 10 00 cc sethi %hi(0x40033000), %g2 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000fc00: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4000fc04: 82 00 60 01 inc %g1 4000fc08: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] * the inactive chain of free partition control blocks. */ RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void ) { return (Partition_Control *) _Objects_Allocate( &_Partition_Information ); 4000fc0c: 25 10 00 cc sethi %hi(0x40033000), %l2 4000fc10: 40 00 15 b7 call 400152ec <_Objects_Allocate> 4000fc14: 90 14 a0 10 or %l2, 0x10, %o0 ! 40033010 <_Partition_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_partition = _Partition_Allocate(); if ( !the_partition ) { 4000fc18: a2 92 20 00 orcc %o0, 0, %l1 4000fc1c: 12 80 00 06 bne 4000fc34 4000fc20: 92 10 00 1b mov %i3, %o1 _Thread_Enable_dispatch(); 4000fc24: 7f ff ff d5 call 4000fb78 <_Thread_Enable_dispatch> 4000fc28: b0 10 20 05 mov 5, %i0 4000fc2c: 81 c7 e0 08 ret 4000fc30: 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; 4000fc34: f8 24 60 1c st %i4, [ %l1 + 0x1c ] _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } #endif the_partition->starting_address = starting_address; 4000fc38: f2 24 60 10 st %i1, [ %l1 + 0x10 ] the_partition->length = length; 4000fc3c: f4 24 60 14 st %i2, [ %l1 + 0x14 ] the_partition->buffer_size = buffer_size; 4000fc40: f6 24 60 18 st %i3, [ %l1 + 0x18 ] the_partition->attribute_set = attribute_set; the_partition->number_of_used_blocks = 0; 4000fc44: c0 24 60 20 clr [ %l1 + 0x20 ] _Chain_Initialize( &the_partition->Memory, starting_address, 4000fc48: 40 00 52 c2 call 40024750 <.udiv> 4000fc4c: 90 10 00 1a mov %i2, %o0 4000fc50: a0 04 60 24 add %l1, 0x24, %l0 4000fc54: 94 10 00 08 mov %o0, %o2 4000fc58: 92 10 00 19 mov %i1, %o1 4000fc5c: 90 10 00 10 mov %l0, %o0 4000fc60: 40 00 11 8a call 40014288 <_Chain_Initialize> 4000fc64: 96 10 00 1b mov %i3, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000fc68: 90 14 a0 10 or %l2, 0x10, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000fc6c: c4 04 60 08 ld [ %l1 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000fc70: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000fc74: 03 00 00 3f sethi %hi(0xfc00), %g1 4000fc78: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000fc7c: 82 08 80 01 and %g2, %g1, %g1 4000fc80: 80 a0 40 03 cmp %g1, %g3 4000fc84: 38 80 00 06 bgu,a 4000fc9c 4000fc88: c2 04 60 08 ld [ %l1 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 4000fc8c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000fc90: 83 28 60 02 sll %g1, 2, %g1 4000fc94: e2 20 80 01 st %l1, [ %g2 + %g1 ] &_Partition_Information, &the_partition->Object, (Objects_Name) name ); *id = the_partition->Object.id; 4000fc98: c2 04 60 08 ld [ %l1 + 8 ], %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; 4000fc9c: e6 24 60 0c st %l3, [ %l1 + 0xc ] 4000fca0: c2 27 40 00 st %g1, [ %i5 ] name, 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); 4000fca4: 7f ff ff b5 call 4000fb78 <_Thread_Enable_dispatch> 4000fca8: b0 10 20 00 clr %i0 4000fcac: 81 c7 e0 08 ret 4000fcb0: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 4000fcb4: 81 c7 e0 08 ret 4000fcb8: 91 e8 20 09 restore %g0, 9, %o0 4000fcbc: b0 10 20 08 mov 8, %i0 } 4000fcc0: 81 c7 e0 08 ret 4000fcc4: 81 e8 00 00 restore 4000fcfc : */ rtems_status_code rtems_partition_delete( Objects_Id id ) { 4000fcfc: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 4000fd00: 92 10 00 18 mov %i0, %o1 4000fd04: 94 07 bf f4 add %fp, -12, %o2 4000fd08: 31 10 00 cc sethi %hi(0x40033000), %i0 4000fd0c: 40 00 16 d0 call 4001584c <_Objects_Get> 4000fd10: 90 16 20 10 or %i0, 0x10, %o0 ! 40033010 <_Partition_Information> register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000fd14: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000fd18: 80 a0 60 00 cmp %g1, 0 4000fd1c: 02 80 00 07 be 4000fd38 4000fd20: 88 10 00 08 mov %o0, %g4 4000fd24: 80 a0 60 02 cmp %g1, 2 4000fd28: 08 80 00 18 bleu 4000fd88 4000fd2c: b0 10 20 04 mov 4, %i0 4000fd30: 81 c7 e0 08 ret <== NOT EXECUTED 4000fd34: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( the_partition->number_of_used_blocks == 0 ) { 4000fd38: c2 02 20 20 ld [ %o0 + 0x20 ], %g1 4000fd3c: 80 a0 60 00 cmp %g1, 0 4000fd40: 12 80 00 14 bne 4000fd90 4000fd44: 90 16 20 10 or %i0, 0x10, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000fd48: c2 01 20 08 ld [ %g4 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000fd4c: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000fd50: 05 00 00 3f sethi %hi(0xfc00), %g2 4000fd54: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000fd58: 82 08 40 02 and %g1, %g2, %g1 4000fd5c: 80 a0 40 03 cmp %g1, %g3 4000fd60: 18 80 00 05 bgu 4000fd74 4000fd64: 92 10 00 04 mov %g4, %o1 information->local_table[ index ] = the_object; 4000fd68: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000fd6c: 83 28 60 02 sll %g1, 2, %g1 4000fd70: 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; 4000fd74: c0 21 20 0c clr [ %g4 + 0xc ] RTEMS_INLINE_ROUTINE void _Partition_Free ( Partition_Control *the_partition ) { _Objects_Free( &_Partition_Information, &the_partition->Object ); 4000fd78: 40 00 16 5f call 400156f4 <_Objects_Free> 4000fd7c: b0 10 20 00 clr %i0 0 /* Not used */ ); } #endif _Thread_Enable_dispatch(); 4000fd80: 7f ff ff d2 call 4000fcc8 <_Thread_Enable_dispatch> 4000fd84: 01 00 00 00 nop 4000fd88: 81 c7 e0 08 ret 4000fd8c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 4000fd90: 7f ff ff ce call 4000fcc8 <_Thread_Enable_dispatch> 4000fd94: b0 10 20 0c mov 0xc, %i0 return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000fd98: 81 c7 e0 08 ret 4000fd9c: 81 e8 00 00 restore 4000fdd4 : rtems_status_code rtems_partition_get_buffer( Objects_Id id, void **buffer ) { 4000fdd4: 9d e3 bf 90 save %sp, -112, %sp 4000fdd8: 92 10 00 18 mov %i0, %o1 register Partition_Control *the_partition; Objects_Locations location; void *the_buffer; if ( !buffer ) 4000fddc: 80 a6 60 00 cmp %i1, 0 4000fde0: 02 80 00 1a be 4000fe48 4000fde4: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 4000fde8: 11 10 00 cc sethi %hi(0x40033000), %o0 4000fdec: 94 07 bf f4 add %fp, -12, %o2 4000fdf0: 40 00 16 97 call 4001584c <_Objects_Get> 4000fdf4: 90 12 20 10 or %o0, 0x10, %o0 return RTEMS_INVALID_ADDRESS; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000fdf8: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000fdfc: 80 a0 60 00 cmp %g1, 0 4000fe00: 02 80 00 07 be 4000fe1c 4000fe04: b0 10 00 08 mov %o0, %i0 4000fe08: 80 a0 60 02 cmp %g1, 2 4000fe0c: 08 80 00 0f bleu 4000fe48 4000fe10: b0 10 20 04 mov 4, %i0 4000fe14: 81 c7 e0 08 ret <== NOT EXECUTED 4000fe18: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Partition_Allocate_buffer ( Partition_Control *the_partition ) { return _Chain_Get( &the_partition->Memory ); 4000fe1c: 40 00 11 0b call 40014248 <_Chain_Get> 4000fe20: 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 ) { 4000fe24: a0 92 20 00 orcc %o0, 0, %l0 4000fe28: 02 80 00 0a be 4000fe50 4000fe2c: 01 00 00 00 nop the_partition->number_of_used_blocks += 1; 4000fe30: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 4000fe34: 82 00 60 01 inc %g1 4000fe38: c2 26 20 20 st %g1, [ %i0 + 0x20 ] _Thread_Enable_dispatch(); 4000fe3c: 7f ff ff d9 call 4000fda0 <_Thread_Enable_dispatch> 4000fe40: b0 10 20 00 clr %i0 *buffer = the_buffer; 4000fe44: e0 26 40 00 st %l0, [ %i1 ] 4000fe48: 81 c7 e0 08 ret 4000fe4c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 4000fe50: 7f ff ff d4 call 4000fda0 <_Thread_Enable_dispatch> 4000fe54: b0 10 20 0d mov 0xd, %i0 return RTEMS_UNSATISFIED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000fe58: 81 c7 e0 08 ret 4000fe5c: 81 e8 00 00 restore 4000fec8 : rtems_status_code rtems_partition_return_buffer( Objects_Id id, void *buffer ) { 4000fec8: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 4000fecc: 11 10 00 cc sethi %hi(0x40033000), %o0 4000fed0: 92 10 00 18 mov %i0, %o1 4000fed4: 90 12 20 10 or %o0, 0x10, %o0 4000fed8: 40 00 16 5d call 4001584c <_Objects_Get> 4000fedc: 94 07 bf f4 add %fp, -12, %o2 register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 4000fee0: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000fee4: 80 a0 60 00 cmp %g1, 0 4000fee8: 02 80 00 07 be 4000ff04 4000feec: b0 10 00 08 mov %o0, %i0 4000fef0: 80 a0 60 02 cmp %g1, 2 4000fef4: 08 80 00 1a bleu 4000ff5c 4000fef8: b0 10 20 04 mov 4, %i0 4000fefc: 81 c7 e0 08 ret <== NOT EXECUTED 4000ff00: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED ) { void *starting; void *ending; starting = the_partition->starting_address; 4000ff04: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 ending = _Addresses_Add_offset( starting, the_partition->length ); return ( 4000ff08: 80 a6 40 02 cmp %i1, %g2 4000ff0c: 0a 80 00 16 bcs 4000ff64 4000ff10: 01 00 00 00 nop 4000ff14: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 4000ff18: 82 00 80 01 add %g2, %g1, %g1 4000ff1c: 80 a6 40 01 cmp %i1, %g1 4000ff20: 18 80 00 11 bgu 4000ff64 4000ff24: 01 00 00 00 nop 4000ff28: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 4000ff2c: 40 00 52 b5 call 40024a00 <.urem> 4000ff30: 90 26 40 02 sub %i1, %g2, %o0 4000ff34: 80 a2 20 00 cmp %o0, 0 4000ff38: 12 80 00 0b bne 4000ff64 4000ff3c: 90 06 20 24 add %i0, 0x24, %o0 RTEMS_INLINE_ROUTINE void _Partition_Free_buffer ( Partition_Control *the_partition, Chain_Node *the_buffer ) { _Chain_Append( &the_partition->Memory, the_buffer ); 4000ff40: 40 00 10 b6 call 40014218 <_Chain_Append> 4000ff44: 92 10 00 19 mov %i1, %o1 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; 4000ff48: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 4000ff4c: 82 00 7f ff add %g1, -1, %g1 4000ff50: c2 26 20 20 st %g1, [ %i0 + 0x20 ] _Thread_Enable_dispatch(); 4000ff54: 7f ff ff d0 call 4000fe94 <_Thread_Enable_dispatch> 4000ff58: b0 10 20 00 clr %i0 4000ff5c: 81 c7 e0 08 ret 4000ff60: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 4000ff64: 7f ff ff cc call 4000fe94 <_Thread_Enable_dispatch> 4000ff68: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000ff6c: 81 c7 e0 08 ret 4000ff70: 81 e8 00 00 restore 4000ed70 : void *internal_start, void *external_start, uint32_t length, Objects_Id *id ) { 4000ed70: 9d e3 bf 98 save %sp, -104, %sp register Dual_ported_memory_Control *the_port; if ( !rtems_is_name_valid( name) ) 4000ed74: a2 96 20 00 orcc %i0, 0, %l1 4000ed78: 02 80 00 15 be 4000edcc 4000ed7c: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 4000ed80: 80 a7 20 00 cmp %i4, 0 4000ed84: 02 80 00 29 be 4000ee28 4000ed88: 80 8e 60 07 btst 7, %i1 return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( internal_start ) || 4000ed8c: 12 80 00 27 bne 4000ee28 4000ed90: 80 8e a0 07 btst 7, %i2 4000ed94: 32 80 00 0e bne,a 4000edcc 4000ed98: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000ed9c: 05 10 00 cc sethi %hi(0x40033000), %g2 4000eda0: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4000eda4: 82 00 60 01 inc %g1 4000eda8: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] */ RTEMS_INLINE_ROUTINE Dual_ported_memory_Control *_Dual_ported_memory_Allocate ( void ) { return (Dual_ported_memory_Control *) 4000edac: 21 10 00 cb sethi %hi(0x40032c00), %l0 4000edb0: 40 00 19 4f call 400152ec <_Objects_Allocate> 4000edb4: 90 14 23 c4 or %l0, 0x3c4, %o0 ! 40032fc4 <_Dual_ported_memory_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_port = _Dual_ported_memory_Allocate(); if ( !the_port ) { 4000edb8: 80 a2 20 00 cmp %o0, 0 4000edbc: 12 80 00 06 bne 4000edd4 4000edc0: 88 14 23 c4 or %l0, 0x3c4, %g4 _Thread_Enable_dispatch(); 4000edc4: 7f ff ff de call 4000ed3c <_Thread_Enable_dispatch> 4000edc8: b0 10 20 05 mov 5, %i0 4000edcc: 81 c7 e0 08 ret 4000edd0: 81 e8 00 00 restore ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000edd4: c4 02 20 08 ld [ %o0 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000edd8: c6 11 20 10 lduh [ %g4 + 0x10 ], %g3 return RTEMS_TOO_MANY; } the_port->internal_base = internal_start; the_port->external_base = external_start; the_port->length = length - 1; 4000eddc: 82 06 ff ff add %i3, -1, %g1 if ( !the_port ) { _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } the_port->internal_base = internal_start; 4000ede0: f2 22 20 10 st %i1, [ %o0 + 0x10 ] the_port->external_base = external_start; the_port->length = length - 1; 4000ede4: c2 22 20 18 st %g1, [ %o0 + 0x18 ] 4000ede8: 03 00 00 3f sethi %hi(0xfc00), %g1 4000edec: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000edf0: 82 08 80 01 and %g2, %g1, %g1 4000edf4: 80 a0 40 03 cmp %g1, %g3 4000edf8: 18 80 00 05 bgu 4000ee0c 4000edfc: f4 22 20 14 st %i2, [ %o0 + 0x14 ] information->local_table[ index ] = the_object; 4000ee00: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 4000ee04: 83 28 60 02 sll %g1, 2, %g1 4000ee08: d0 20 80 01 st %o0, [ %g2 + %g1 ] &_Dual_ported_memory_Information, &the_port->Object, (Objects_Name) name ); *id = the_port->Object.id; 4000ee0c: c2 02 20 08 ld [ %o0 + 8 ], %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; 4000ee10: e2 22 20 0c st %l1, [ %o0 + 0xc ] 4000ee14: c2 27 00 00 st %g1, [ %i4 ] _Thread_Enable_dispatch(); 4000ee18: 7f ff ff c9 call 4000ed3c <_Thread_Enable_dispatch> 4000ee1c: b0 10 20 00 clr %i0 4000ee20: 81 c7 e0 08 ret 4000ee24: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 4000ee28: b0 10 20 09 mov 9, %i0 } 4000ee2c: 81 c7 e0 08 ret 4000ee30: 81 e8 00 00 restore 40007278 : rtems_status_code rtems_rate_monotonic_create( rtems_name name, Objects_Id *id ) { 40007278: 9d e3 bf 98 save %sp, -104, %sp Rate_monotonic_Control *the_period; if ( !rtems_is_name_valid( name ) ) 4000727c: a4 96 20 00 orcc %i0, 0, %l2 40007280: 02 80 00 11 be 400072c4 40007284: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 40007288: 80 a6 60 00 cmp %i1, 0 4000728c: 02 80 00 0e be 400072c4 40007290: b0 10 20 09 mov 9, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007294: 05 10 00 79 sethi %hi(0x4001e400), %g2 40007298: c2 00 a1 90 ld [ %g2 + 0x190 ], %g1 ! 4001e590 <_Thread_Dispatch_disable_level> 4000729c: 82 00 60 01 inc %g1 400072a0: c2 20 a1 90 st %g1, [ %g2 + 0x190 ] * the inactive chain of free period control blocks. */ RTEMS_INLINE_ROUTINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void ) { return (Rate_monotonic_Control *) 400072a4: 23 10 00 78 sethi %hi(0x4001e000), %l1 400072a8: 40 00 09 b8 call 40009988 <_Objects_Allocate> 400072ac: 90 14 63 fc or %l1, 0x3fc, %o0 ! 4001e3fc <_Rate_monotonic_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_period = _Rate_monotonic_Allocate(); if ( !the_period ) { 400072b0: a0 92 20 00 orcc %o0, 0, %l0 400072b4: 12 80 00 06 bne 400072cc 400072b8: 03 10 00 79 sethi %hi(0x4001e400), %g1 _Thread_Enable_dispatch(); 400072bc: 7f ff ff e2 call 40007244 <_Thread_Enable_dispatch> 400072c0: b0 10 20 05 mov 5, %i0 400072c4: 81 c7 e0 08 ret 400072c8: 81 e8 00 00 restore return RTEMS_TOO_MANY; } the_period->owner = _Thread_Executing; 400072cc: c2 00 62 6c ld [ %g1 + 0x26c ], %g1 the_period->state = RATE_MONOTONIC_INACTIVE; 400072d0: c0 24 20 38 clr [ %l0 + 0x38 ] if ( !the_period ) { _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } the_period->owner = _Thread_Executing; 400072d4: c2 24 20 50 st %g1, [ %l0 + 0x50 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400072d8: c0 24 20 18 clr [ %l0 + 0x18 ] the_watchdog->routine = routine; 400072dc: c0 24 20 2c clr [ %l0 + 0x2c ] the_watchdog->id = id; 400072e0: c0 24 20 30 clr [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 400072e4: c0 24 20 34 clr [ %l0 + 0x34 ] the_period->state = RATE_MONOTONIC_INACTIVE; _Watchdog_Initialize( &the_period->Timer, NULL, 0, NULL ); _Rate_monotonic_Reset_statistics( the_period ); 400072e8: 90 04 20 54 add %l0, 0x54, %o0 400072ec: 92 10 20 00 clr %o1 400072f0: 40 00 25 52 call 40010838 400072f4: 94 10 20 38 mov 0x38, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400072f8: 90 14 63 fc or %l1, 0x3fc, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 400072fc: c4 04 20 08 ld [ %l0 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40007300: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40007304: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 40007308: 82 10 63 ff or %g1, 0x3ff, %g1 ! 7fffffff 4000730c: c2 24 20 78 st %g1, [ %l0 + 0x78 ] 40007310: c2 24 20 5c st %g1, [ %l0 + 0x5c ] 40007314: c2 24 20 60 st %g1, [ %l0 + 0x60 ] 40007318: c2 24 20 74 st %g1, [ %l0 + 0x74 ] 4000731c: 03 00 00 3f sethi %hi(0xfc00), %g1 40007320: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40007324: 82 08 80 01 and %g2, %g1, %g1 40007328: 80 a0 40 03 cmp %g1, %g3 4000732c: 38 80 00 06 bgu,a 40007344 40007330: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 40007334: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40007338: 83 28 60 02 sll %g1, 2, %g1 4000733c: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Rate_monotonic_Information, &the_period->Object, (Objects_Name) name ); *id = the_period->Object.id; 40007340: c2 04 20 08 ld [ %l0 + 8 ], %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; 40007344: e4 24 20 0c st %l2, [ %l0 + 0xc ] 40007348: c2 26 40 00 st %g1, [ %i1 ] _Thread_Enable_dispatch(); 4000734c: 7f ff ff be call 40007244 <_Thread_Enable_dispatch> 40007350: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 40007354: 81 c7 e0 08 ret 40007358: 81 e8 00 00 restore 40010144 : */ rtems_status_code rtems_rate_monotonic_delete( Objects_Id id ) { 40010144: 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 *) 40010148: 21 10 00 cc sethi %hi(0x40033000), %l0 4001014c: 92 10 00 18 mov %i0, %o1 40010150: 94 07 bf f4 add %fp, -12, %o2 40010154: 40 00 15 be call 4001584c <_Objects_Get> 40010158: 90 14 20 5c or %l0, 0x5c, %o0 Rate_monotonic_Control *the_period; Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4001015c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010160: 80 a0 60 00 cmp %g1, 0 40010164: 02 80 00 08 be 40010184 40010168: b0 10 00 08 mov %o0, %i0 4001016c: 82 18 60 02 xor %g1, 2, %g1 40010170: 80 a0 00 01 cmp %g0, %g1 40010174: 82 60 20 00 subx %g0, 0, %g1 40010178: b0 08 60 15 and %g1, 0x15, %i0 4001017c: 81 c7 e0 08 ret 40010180: 91 ee 20 04 restore %i0, 4, %o0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010184: a0 14 20 5c or %l0, 0x5c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40010188: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4001018c: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40010190: 05 00 00 3f sethi %hi(0xfc00), %g2 40010194: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40010198: 82 08 40 02 and %g1, %g2, %g1 4001019c: 80 a0 40 03 cmp %g1, %g3 400101a0: 38 80 00 06 bgu,a 400101b8 400101a4: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 400101a8: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 400101ac: 83 28 60 02 sll %g1, 2, %g1 400101b0: 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; 400101b4: 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 ); 400101b8: 40 00 20 eb call 40018564 <_Watchdog_Remove> 400101bc: 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 ); 400101c0: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_INACTIVE; 400101c4: c0 26 20 38 clr [ %i0 + 0x38 ] 400101c8: 40 00 15 4b call 400156f4 <_Objects_Free> 400101cc: 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 ) 400101d0: 03 10 00 cc sethi %hi(0x40033000), %g1 400101d4: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40033290 <_Thread_Dispatch_disable_level> 400101d8: b0 10 20 00 clr %i0 400101dc: 84 00 bf ff add %g2, -1, %g2 400101e0: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 400101e4: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 400101e8: 80 a0 60 00 cmp %g1, 0 400101ec: 12 80 00 04 bne 400101fc 400101f0: 01 00 00 00 nop _Thread_Dispatch(); 400101f4: 40 00 1a 8a call 40016c1c <_Thread_Dispatch> 400101f8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400101fc: 81 c7 e0 08 ret 40010200: 81 e8 00 00 restore 4000e950 : rtems_status_code rtems_rate_monotonic_get_status( Objects_Id id, rtems_rate_monotonic_period_status *status ) { 4000e950: 9d e3 bf 88 save %sp, -120, %sp 4000e954: 92 10 00 18 mov %i0, %o1 Objects_Locations location; Rate_monotonic_Control *the_period; if ( !status ) 4000e958: 80 a6 60 00 cmp %i1, 0 4000e95c: 02 80 00 36 be 4000ea34 4000e960: b0 10 20 09 mov 9, %i0 4000e964: 11 10 00 78 sethi %hi(0x4001e000), %o0 4000e968: 94 07 bf f4 add %fp, -12, %o2 4000e96c: 7f ff ed 94 call 40009fbc <_Objects_Get> 4000e970: 90 12 23 fc or %o0, 0x3fc, %o0 return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000e974: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000e978: 80 a0 60 00 cmp %g1, 0 4000e97c: 02 80 00 08 be 4000e99c 4000e980: b0 10 00 08 mov %o0, %i0 4000e984: 82 18 60 02 xor %g1, 2, %g1 <== NOT EXECUTED 4000e988: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4000e98c: 82 60 20 00 subx %g0, 0, %g1 <== NOT EXECUTED 4000e990: b0 08 60 15 and %g1, 0x15, %i0 <== NOT EXECUTED 4000e994: 81 c7 e0 08 ret <== NOT EXECUTED 4000e998: 91 ee 20 04 restore %i0, 4, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: status->owner = ((the_period->owner) ? the_period->owner->Object.id : 0); 4000e99c: c2 02 20 50 ld [ %o0 + 0x50 ], %g1 4000e9a0: 80 a0 60 00 cmp %g1, 0 4000e9a4: 02 80 00 03 be 4000e9b0 4000e9a8: 84 10 20 00 clr %g2 4000e9ac: c4 00 60 08 ld [ %g1 + 8 ], %g2 status->state = the_period->state; 4000e9b0: 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); 4000e9b4: c4 26 40 00 st %g2, [ %i1 ] status->state = the_period->state; if ( status->state == RATE_MONOTONIC_INACTIVE ) { 4000e9b8: 80 a0 60 00 cmp %g1, 0 4000e9bc: 12 80 00 07 bne 4000e9d8 4000e9c0: 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; 4000e9c4: 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; 4000e9c8: c0 26 60 08 clr [ %i1 + 8 ] <== NOT EXECUTED status->since_last_period.tv_nsec = 0; 4000e9cc: 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; 4000e9d0: 10 80 00 0e b 4000ea08 <== NOT EXECUTED 4000e9d4: c0 26 60 10 clr [ %i1 + 0x10 ] <== NOT EXECUTED * 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 ); 4000e9d8: a0 07 bf ec add %fp, -20, %l0 4000e9dc: 7f ff ea 49 call 40009300 <_TOD_Get_uptime> 4000e9e0: 90 10 00 10 mov %l0, %o0 #endif #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS _Timespec_Subtract( 4000e9e4: 90 06 20 44 add %i0, 0x44, %o0 4000e9e8: 92 10 00 10 mov %l0, %o1 4000e9ec: 7f ff f6 ea call 4000c594 <_Timespec_Subtract> 4000e9f0: 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( 4000e9f4: 11 10 00 79 sethi %hi(0x4001e400), %o0 4000e9f8: 92 10 00 10 mov %l0, %o1 4000e9fc: 94 06 60 10 add %i1, 0x10, %o2 4000ea00: 7f ff f6 e5 call 4000c594 <_Timespec_Subtract> 4000ea04: 90 12 22 74 or %o0, 0x274, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000ea08: 03 10 00 79 sethi %hi(0x4001e400), %g1 4000ea0c: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001e590 <_Thread_Dispatch_disable_level> 4000ea10: b0 10 20 00 clr %i0 4000ea14: 84 00 bf ff add %g2, -1, %g2 4000ea18: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 4000ea1c: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 4000ea20: 80 a0 60 00 cmp %g1, 0 4000ea24: 12 80 00 04 bne 4000ea34 4000ea28: 01 00 00 00 nop _Thread_Dispatch(); 4000ea2c: 7f ff f2 58 call 4000b38c <_Thread_Dispatch> 4000ea30: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000ea34: 81 c7 e0 08 ret 4000ea38: 81 e8 00 00 restore 40007564 : rtems_status_code rtems_rate_monotonic_period( Objects_Id id, rtems_interval length ) { 40007564: 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 *) 40007568: 11 10 00 78 sethi %hi(0x4001e000), %o0 4000756c: 92 10 00 18 mov %i0, %o1 40007570: 90 12 23 fc or %o0, 0x3fc, %o0 40007574: 40 00 0a 92 call 40009fbc <_Objects_Get> 40007578: 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 ) { 4000757c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007580: 80 a0 60 00 cmp %g1, 0 40007584: 02 80 00 07 be 400075a0 40007588: a2 10 00 08 mov %o0, %l1 4000758c: 80 a0 60 02 cmp %g1, 2 40007590: 02 80 00 0c be 400075c0 40007594: b0 10 20 04 mov 4, %i0 the_period->state = RATE_MONOTONIC_ACTIVE; the_period->next_length = length; _Watchdog_Insert_ticks( &the_period->Timer, length ); _Thread_Enable_dispatch(); return RTEMS_TIMEOUT; 40007598: 81 c7 e0 08 ret <== NOT EXECUTED 4000759c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Thread_Is_executing( the_period->owner ) ) { 400075a0: 27 10 00 79 sethi %hi(0x4001e400), %l3 400075a4: c4 02 20 50 ld [ %o0 + 0x50 ], %g2 400075a8: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 400075ac: 80 a0 80 01 cmp %g2, %g1 400075b0: 02 80 00 06 be 400075c8 400075b4: 80 a6 60 00 cmp %i1, 0 _Thread_Enable_dispatch(); 400075b8: 7f ff ff 7f call 400073b4 <_Thread_Enable_dispatch> 400075bc: b0 10 20 17 mov 0x17, %i0 400075c0: 81 c7 e0 08 ret 400075c4: 81 e8 00 00 restore return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { 400075c8: 12 80 00 11 bne 4000760c 400075cc: 01 00 00 00 nop switch ( the_period->state ) { 400075d0: d0 02 20 38 ld [ %o0 + 0x38 ], %o0 400075d4: 80 a2 20 02 cmp %o0, 2 400075d8: 02 80 00 09 be 400075fc 400075dc: b0 10 20 00 clr %i0 400075e0: 80 a2 20 04 cmp %o0, 4 400075e4: 02 80 00 06 be 400075fc 400075e8: b0 10 20 06 mov 6, %i0 400075ec: 80 a2 20 00 cmp %o0, 0 400075f0: 02 80 00 03 be 400075fc 400075f4: b0 10 20 0b mov 0xb, %i0 400075f8: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED break; default: /* unreached -- only to remove warnings */ return_value = RTEMS_INTERNAL_ERROR; break; } _Thread_Enable_dispatch(); 400075fc: 7f ff ff 6e call 400073b4 <_Thread_Enable_dispatch> 40007600: 01 00 00 00 nop 40007604: 81 c7 e0 08 ret 40007608: 81 e8 00 00 restore return( return_value ); } _ISR_Disable( level ); 4000760c: 7f ff ed 0b call 40002a38 40007610: 01 00 00 00 nop 40007614: a0 10 00 08 mov %o0, %l0 switch ( the_period->state ) { 40007618: e4 04 60 38 ld [ %l1 + 0x38 ], %l2 4000761c: 80 a4 a0 02 cmp %l2, 2 40007620: 02 80 00 29 be 400076c4 40007624: 80 a4 a0 04 cmp %l2, 4 40007628: 02 80 00 43 be 40007734 4000762c: 80 a4 a0 00 cmp %l2, 0 40007630: 32 bf ff e4 bne,a 400075c0 40007634: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED /* * No need to update statistics -- there are not a period active */ _ISR_Enable( level ); 40007638: 7f ff ed 04 call 40002a48 4000763c: 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 ); 40007640: 40 00 07 30 call 40009300 <_TOD_Get_uptime> 40007644: 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; 40007648: c2 07 bf ec ld [ %fp + -20 ], %g1 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 4000764c: c4 04 e2 6c ld [ %l3 + 0x26c ], %g2 #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; 40007650: c2 24 60 44 st %g1, [ %l1 + 0x44 ] 40007654: 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( 40007658: 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; 4000765c: c2 24 60 48 st %g1, [ %l1 + 0x48 ] #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007660: c2 00 a0 90 ld [ %g2 + 0x90 ], %g1 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40007664: a0 07 bf e4 add %fp, -28, %l0 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007668: c2 24 60 3c st %g1, [ %l1 + 0x3c ] 4000766c: c2 00 a0 94 ld [ %g2 + 0x94 ], %g1 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40007670: 94 10 00 10 mov %l0, %o2 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007674: c2 24 60 40 st %g1, [ %l1 + 0x40 ] _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40007678: 11 10 00 79 sethi %hi(0x4001e400), %o0 4000767c: 40 00 13 c6 call 4000c594 <_Timespec_Subtract> 40007680: 90 12 22 74 or %o0, 0x274, %o0 ! 4001e674 <_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 ); 40007684: 92 10 00 10 mov %l0, %o1 40007688: 40 00 13 62 call 4000c410 <_Timespec_Add_to> 4000768c: 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; 40007690: 82 10 20 02 mov 2, %g1 40007694: c2 24 60 38 st %g1, [ %l1 + 0x38 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40007698: 03 10 00 1e sethi %hi(0x40007800), %g1 4000769c: 82 10 62 cc or %g1, 0x2cc, %g1 ! 40007acc <_Rate_monotonic_Timeout> NULL ); the_period->next_length = length; _Watchdog_Insert_ticks( &the_period->Timer, length ); 400076a0: 90 04 60 10 add %l1, 0x10, %o0 400076a4: 92 10 00 19 mov %i1, %o1 the_watchdog->id = id; 400076a8: f0 24 60 30 st %i0, [ %l1 + 0x30 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400076ac: c0 24 60 18 clr [ %l1 + 0x18 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 400076b0: c0 24 60 34 clr [ %l1 + 0x34 ] _Rate_monotonic_Timeout, id, NULL ); the_period->next_length = length; 400076b4: f2 24 60 4c st %i1, [ %l1 + 0x4c ] _Watchdog_Insert_ticks( &the_period->Timer, length ); 400076b8: 7f ff ff 37 call 40007394 <_Watchdog_Insert_ticks> 400076bc: c2 24 60 2c st %g1, [ %l1 + 0x2c ] 400076c0: 30 80 00 19 b,a 40007724 case RATE_MONOTONIC_ACTIVE: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 400076c4: 7f ff ff 49 call 400073e8 <_Rate_monotonic_Update_statistics> 400076c8: 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; 400076cc: 82 10 20 01 mov 1, %g1 the_period->next_length = length; 400076d0: 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; 400076d4: c2 24 60 38 st %g1, [ %l1 + 0x38 ] the_period->next_length = length; _ISR_Enable( level ); 400076d8: 7f ff ec dc call 40002a48 400076dc: 90 10 00 10 mov %l0, %o0 _Thread_Executing->Wait.id = the_period->Object.id; 400076e0: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 400076e4: c4 04 60 08 ld [ %l1 + 8 ], %g2 _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 400076e8: 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; 400076ec: c4 20 60 20 st %g2, [ %g1 + 0x20 ] _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 400076f0: 40 00 12 23 call 4000bf7c <_Thread_Set_state> 400076f4: 13 00 00 10 sethi %hi(0x4000), %o1 /* * Did the watchdog timer expire while we were actually blocking * on it? */ _ISR_Disable( level ); 400076f8: 7f ff ec d0 call 40002a38 400076fc: 01 00 00 00 nop local_state = the_period->state; 40007700: e0 04 60 38 ld [ %l1 + 0x38 ], %l0 the_period->state = RATE_MONOTONIC_ACTIVE; 40007704: e4 24 60 38 st %l2, [ %l1 + 0x38 ] _ISR_Enable( level ); 40007708: 7f ff ec d0 call 40002a48 4000770c: 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 ) 40007710: 80 a4 20 03 cmp %l0, 3 40007714: 12 80 00 04 bne 40007724 40007718: d0 04 e2 6c ld [ %l3 + 0x26c ], %o0 _Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 4000771c: 40 00 0e 62 call 4000b0a4 <_Thread_Clear_state> <== NOT EXECUTED 40007720: 13 00 00 10 sethi %hi(0x4000), %o1 <== NOT EXECUTED _Thread_Enable_dispatch(); 40007724: 7f ff ff 24 call 400073b4 <_Thread_Enable_dispatch> 40007728: b0 10 20 00 clr %i0 4000772c: 81 c7 e0 08 ret 40007730: 81 e8 00 00 restore case RATE_MONOTONIC_EXPIRED: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 40007734: 7f ff ff 2d call 400073e8 <_Rate_monotonic_Update_statistics> 40007738: 90 10 00 11 mov %l1, %o0 _ISR_Enable( level ); 4000773c: 7f ff ec c3 call 40002a48 40007740: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_ACTIVE; 40007744: 82 10 20 02 mov 2, %g1 the_period->next_length = length; _Watchdog_Insert_ticks( &the_period->Timer, length ); 40007748: 90 04 60 10 add %l1, 0x10, %o0 4000774c: 92 10 00 19 mov %i1, %o1 */ _Rate_monotonic_Update_statistics( the_period ); _ISR_Enable( level ); the_period->state = RATE_MONOTONIC_ACTIVE; 40007750: c2 24 60 38 st %g1, [ %l1 + 0x38 ] the_period->next_length = length; 40007754: f2 24 60 4c st %i1, [ %l1 + 0x4c ] _Watchdog_Insert_ticks( &the_period->Timer, length ); 40007758: 7f ff ff 0f call 40007394 <_Watchdog_Insert_ticks> 4000775c: b0 10 20 06 mov 6, %i0 _Thread_Enable_dispatch(); 40007760: 7f ff ff 15 call 400073b4 <_Thread_Enable_dispatch> 40007764: 01 00 00 00 nop 40007768: 81 c7 e0 08 ret 4000776c: 81 e8 00 00 restore break; } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007770: 81 c7 e0 08 ret <== NOT EXECUTED 40007774: 81 e8 00 00 restore <== NOT EXECUTED 40007778 : */ void rtems_rate_monotonic_report_statistics_with_plugin( void *context, rtems_printk_plugin_t print ) { 40007778: 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 ) 4000777c: 80 a6 60 00 cmp %i1, 0 40007780: 02 80 00 7f be 4000797c 40007784: 90 10 00 18 mov %i0, %o0 return; (*print)( context, "Period information by period\n" ); 40007788: 13 10 00 6f sethi %hi(0x4001bc00), %o1 4000778c: 9f c6 40 00 call %i1 40007790: 92 12 61 c8 or %o1, 0x1c8, %o1 ! 4001bdc8 #if defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) (*print)( context, "--- CPU times are in seconds ---\n" ); 40007794: 90 10 00 18 mov %i0, %o0 40007798: 13 10 00 6f sethi %hi(0x4001bc00), %o1 4000779c: 9f c6 40 00 call %i1 400077a0: 92 12 61 e8 or %o1, 0x1e8, %o1 ! 4001bde8 #endif #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) (*print)( context, "--- Wall times are in seconds ---\n" ); 400077a4: 90 10 00 18 mov %i0, %o0 400077a8: 13 10 00 6f sethi %hi(0x4001bc00), %o1 400077ac: 9f c6 40 00 call %i1 400077b0: 92 12 62 10 or %o1, 0x210, %o1 ! 4001be10 Be sure to test the various cases. (*print)( context,"\ 1234567890123456789012345678901234567890123456789012345678901234567890123456789\ \n"); */ (*print)( context, " ID OWNER COUNT MISSED " 400077b4: 90 10 00 18 mov %i0, %o0 400077b8: 13 10 00 6f sethi %hi(0x4001bc00), %o1 400077bc: 9f c6 40 00 call %i1 400077c0: 92 12 62 38 or %o1, 0x238, %o1 ! 4001be38 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS " " #endif " WALL TIME\n" ); (*print)( context, " " 400077c4: 90 10 00 18 mov %i0, %o0 400077c8: 13 10 00 6f sethi %hi(0x4001bc00), %o1 400077cc: 9f c6 40 00 call %i1 400077d0: 92 12 62 88 or %o1, 0x288, %o1 ! 4001be88 /* * 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 ; 400077d4: 03 10 00 78 sethi %hi(0x4001e000), %g1 400077d8: 82 10 63 fc or %g1, 0x3fc, %g1 ! 4001e3fc <_Rate_monotonic_Information> 400077dc: e4 00 60 08 ld [ %g1 + 8 ], %l2 _Timespec_Divide_by_integer( &the_stats.total_cpu_time, the_stats.count, &cpu_average ); (*print)( context, 400077e0: 03 10 00 6f sethi %hi(0x4001bc00), %g1 400077e4: b4 10 62 f0 or %g1, 0x2f0, %i2 ! 4001bef0 _Timespec_Divide_by_integer( &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 400077e8: 03 10 00 6f sethi %hi(0x4001bc00), %g1 * 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++ ) { status = rtems_rate_monotonic_get_statistics( id, &the_stats ); 400077ec: ba 07 bf 98 add %fp, -104, %i5 _Timespec_Divide_by_integer( &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 400077f0: b6 10 63 10 or %g1, 0x310, %i3 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 ); 400077f4: ae 07 bf d0 add %fp, -48, %l7 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { (*print)( context, "\n" ); 400077f8: 03 10 00 6f sethi %hi(0x4001bc00), %g1 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 400077fc: a8 07 bf f3 add %fp, -13, %l4 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { (*print)( context, "\n" ); 40007800: b8 10 62 08 or %g1, 0x208, %i4 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 40007804: ac 07 bf b0 add %fp, -80, %l6 40007808: a6 07 bf e8 add %fp, -24, %l3 * print Wall time part of statistics */ { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS struct timespec wall_average; _Timespec_Divide_by_integer( 4000780c: 10 80 00 56 b 40007964 40007810: aa 07 bf c8 add %fp, -56, %l5 * 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++ ) { status = rtems_rate_monotonic_get_statistics( id, &the_stats ); 40007814: 40 00 1c 2b call 4000e8c0 40007818: 92 10 00 1d mov %i5, %o1 if ( status != RTEMS_SUCCESSFUL ) 4000781c: 80 a2 20 00 cmp %o0, 0 40007820: 32 80 00 51 bne,a 40007964 40007824: a4 04 a0 01 inc %l2 continue; /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); 40007828: 92 10 00 17 mov %l7, %o1 4000782c: 40 00 1c 49 call 4000e950 40007830: 90 10 00 12 mov %l2, %o0 if ( status != RTEMS_SUCCESSFUL ) 40007834: 80 a2 20 00 cmp %o0, 0 40007838: 32 80 00 4b bne,a 40007964 4000783c: a4 04 a0 01 inc %l2 <== NOT EXECUTED continue; name[ 0 ] = '\0'; if ( the_status.owner ) { 40007840: d0 07 bf d0 ld [ %fp + -48 ], %o0 40007844: 80 a2 20 00 cmp %o0, 0 40007848: 02 80 00 05 be 4000785c 4000784c: c0 2f bf f3 clrb [ %fp + -13 ] rtems_object_get_name( the_status.owner, sizeof(name), name ); 40007850: 94 10 00 14 mov %l4, %o2 40007854: 40 00 00 c8 call 40007b74 40007858: 92 10 20 05 mov 5, %o1 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 4000785c: d8 1f bf 98 ldd [ %fp + -104 ], %o4 40007860: 94 10 00 12 mov %l2, %o2 40007864: 96 10 00 14 mov %l4, %o3 40007868: 13 10 00 6f sethi %hi(0x4001bc00), %o1 4000786c: 90 10 00 18 mov %i0, %o0 40007870: 9f c6 40 00 call %i1 40007874: 92 12 62 d8 or %o1, 0x2d8, %o1 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 40007878: c2 07 bf 98 ld [ %fp + -104 ], %g1 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 4000787c: 94 10 00 13 mov %l3, %o2 40007880: 90 10 00 16 mov %l6, %o0 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 40007884: 80 a0 60 00 cmp %g1, 0 40007888: 12 80 00 06 bne 400078a0 4000788c: 92 10 00 1c mov %i4, %o1 (*print)( context, "\n" ); 40007890: 9f c6 40 00 call %i1 40007894: 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 ; id++ ) { 40007898: 10 80 00 33 b 40007964 4000789c: a4 04 a0 01 inc %l2 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 400078a0: 40 00 12 f4 call 4000c470 <_Timespec_Divide_by_integer> 400078a4: 92 10 00 01 mov %g1, %o1 &the_stats.total_cpu_time, the_stats.count, &cpu_average ); (*print)( context, 400078a8: d0 07 bf a4 ld [ %fp + -92 ], %o0 400078ac: 40 00 44 c7 call 40018bc8 <.div> 400078b0: 92 10 23 e8 mov 0x3e8, %o1 400078b4: a2 10 00 08 mov %o0, %l1 400078b8: d0 07 bf ac ld [ %fp + -84 ], %o0 400078bc: 40 00 44 c3 call 40018bc8 <.div> 400078c0: 92 10 23 e8 mov 0x3e8, %o1 400078c4: c2 07 bf e8 ld [ %fp + -24 ], %g1 400078c8: a0 10 00 08 mov %o0, %l0 400078cc: d0 07 bf ec ld [ %fp + -20 ], %o0 400078d0: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 400078d4: 40 00 44 bd call 40018bc8 <.div> 400078d8: 92 10 23 e8 mov 0x3e8, %o1 400078dc: d8 07 bf a8 ld [ %fp + -88 ], %o4 400078e0: d4 07 bf a0 ld [ %fp + -96 ], %o2 400078e4: 96 10 00 11 mov %l1, %o3 400078e8: 9a 10 00 10 mov %l0, %o5 400078ec: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 400078f0: 92 10 00 1a mov %i2, %o1 400078f4: 9f c6 40 00 call %i1 400078f8: 90 10 00 18 mov %i0, %o0 * print Wall time part of statistics */ { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS struct timespec wall_average; _Timespec_Divide_by_integer( 400078fc: d2 07 bf 98 ld [ %fp + -104 ], %o1 40007900: 94 10 00 13 mov %l3, %o2 40007904: 40 00 12 db call 4000c470 <_Timespec_Divide_by_integer> 40007908: 90 10 00 15 mov %l5, %o0 &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 4000790c: d0 07 bf bc ld [ %fp + -68 ], %o0 40007910: 40 00 44 ae call 40018bc8 <.div> 40007914: 92 10 23 e8 mov 0x3e8, %o1 40007918: a2 10 00 08 mov %o0, %l1 4000791c: d0 07 bf c4 ld [ %fp + -60 ], %o0 40007920: 40 00 44 aa call 40018bc8 <.div> 40007924: 92 10 23 e8 mov 0x3e8, %o1 40007928: c2 07 bf e8 ld [ %fp + -24 ], %g1 4000792c: a0 10 00 08 mov %o0, %l0 40007930: d0 07 bf ec ld [ %fp + -20 ], %o0 40007934: 92 10 23 e8 mov 0x3e8, %o1 40007938: 40 00 44 a4 call 40018bc8 <.div> 4000793c: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 40007940: d4 07 bf b8 ld [ %fp + -72 ], %o2 40007944: d8 07 bf c0 ld [ %fp + -64 ], %o4 40007948: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 4000794c: 96 10 00 11 mov %l1, %o3 40007950: 9a 10 00 10 mov %l0, %o5 40007954: 90 10 00 18 mov %i0, %o0 40007958: 9f c6 40 00 call %i1 4000795c: 92 10 00 1b mov %i3, %o1 * 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++ ) { 40007960: 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 ; 40007964: 05 10 00 78 sethi %hi(0x4001e000), %g2 40007968: 84 10 a3 fc or %g2, 0x3fc, %g2 ! 4001e3fc <_Rate_monotonic_Information> 4000796c: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 40007970: 80 a4 80 01 cmp %l2, %g1 40007974: 08 bf ff a8 bleu 40007814 40007978: 90 10 00 12 mov %l2, %o0 4000797c: 81 c7 e0 08 ret 40007980: 81 e8 00 00 restore 400079a0 : /* * rtems_rate_monotonic_reset_all_statistics */ void rtems_rate_monotonic_reset_all_statistics( void ) { 400079a0: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400079a4: 03 10 00 79 sethi %hi(0x4001e400), %g1 400079a8: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001e590 <_Thread_Dispatch_disable_level> 400079ac: 84 00 a0 01 inc %g2 400079b0: c4 20 61 90 st %g2, [ %g1 + 0x190 ] /* * 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 ; 400079b4: 03 10 00 78 sethi %hi(0x4001e000), %g1 400079b8: 82 10 63 fc or %g1, 0x3fc, %g1 ! 4001e3fc <_Rate_monotonic_Information> 400079bc: e0 00 60 08 ld [ %g1 + 8 ], %l0 id <= _Rate_monotonic_Information.maximum_id ; 400079c0: 10 80 00 04 b 400079d0 400079c4: a2 10 00 01 mov %g1, %l1 id++ ) { status = rtems_rate_monotonic_reset_statistics( id ); 400079c8: 40 00 00 12 call 40007a10 400079cc: 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 ; 400079d0: c2 04 60 0c ld [ %l1 + 0xc ], %g1 400079d4: 80 a4 00 01 cmp %l0, %g1 400079d8: 08 bf ff fc bleu 400079c8 400079dc: 90 10 00 10 mov %l0, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400079e0: 03 10 00 79 sethi %hi(0x4001e400), %g1 400079e4: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001e590 <_Thread_Dispatch_disable_level> 400079e8: 84 00 bf ff add %g2, -1, %g2 400079ec: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 400079f0: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 400079f4: 80 a0 60 00 cmp %g1, 0 400079f8: 12 80 00 04 bne 40007a08 400079fc: 01 00 00 00 nop _Thread_Dispatch(); 40007a00: 40 00 0e 63 call 4000b38c <_Thread_Dispatch> 40007a04: 81 e8 00 00 restore 40007a08: 81 c7 e0 08 ret <== NOT EXECUTED 40007a0c: 81 e8 00 00 restore <== NOT EXECUTED 4001071c : uint32_t length, uint32_t page_size, rtems_attribute attribute_set, Objects_Id *id ) { 4001071c: 9d e3 bf 98 save %sp, -104, %sp Region_Control *the_region; if ( !rtems_is_name_valid( name ) ) 40010720: a4 96 20 00 orcc %i0, 0, %l2 40010724: 02 80 00 87 be 40010940 40010728: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 4001072c: 80 a6 60 00 cmp %i1, 0 40010730: 02 80 00 c7 be 40010a4c 40010734: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 40010738: 02 80 00 c5 be 40010a4c 4001073c: 80 8e 60 07 btst 7, %i1 return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( starting_address ) ) 40010740: 32 80 00 80 bne,a 40010940 40010744: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; _RTEMS_Lock_allocator(); /* to prevent deletion */ 40010748: 7f ff e8 53 call 4000a894 4001074c: 01 00 00 00 nop 40010750: a2 10 00 08 mov %o0, %l1 40010754: 03 10 00 cc sethi %hi(0x40033000), %g1 40010758: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4001075c: 80 a0 60 00 cmp %g1, 0 40010760: 02 80 00 0b be 4001078c 40010764: 03 10 00 cc sethi %hi(0x40033000), %g1 40010768: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 4001076c: c2 00 60 70 ld [ %g1 + 0x70 ], %g1 ! 40033470 <_System_state_Current> <== NOT EXECUTED 40010770: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010774: 08 80 00 05 bleu 40010788 <== NOT EXECUTED 40010778: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001077c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010780: 40 00 12 ae call 40015238 <_Internal_error_Occurred> <== NOT EXECUTED 40010784: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40010788: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 4001078c: e0 00 63 64 ld [ %g1 + 0x364 ], %l0 ! 40033364 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40010790: 03 10 00 cc sethi %hi(0x40033000), %g1 40010794: c4 00 63 6c ld [ %g1 + 0x36c ], %g2 ! 4003336c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40010798: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 4001079c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400107a0: 80 a0 60 00 cmp %g1, 0 400107a4: 22 80 00 30 be,a 40010864 400107a8: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400107ac: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400107b0: 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; 400107b4: 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; 400107b8: 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; 400107bc: 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; 400107c0: 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 ) || 400107c4: 80 a0 e0 02 cmp %g3, 2 400107c8: 02 80 00 05 be 400107dc 400107cc: c8 24 20 64 st %g4, [ %l0 + 0x64 ] 400107d0: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400107d4: 12 80 00 07 bne 400107f0 <== NOT EXECUTED 400107d8: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400107dc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400107e0: 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++; 400107e4: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400107e8: 02 80 00 03 be 400107f4 400107ec: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 400107f0: 30 80 00 2b b,a 4001089c */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 400107f4: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400107f8: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400107fc: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40010800: 12 80 00 03 bne 4001080c <== NOT EXECUTED 40010804: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40010808: 30 80 00 25 b,a 4001089c <== NOT EXECUTED return 0; } if ( current > ceiling ) { 4001080c: 08 80 00 0f bleu 40010848 <== NOT EXECUTED 40010810: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010814: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40010818: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4001081c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010820: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40010824: 7f ff e8 20 call 4000a8a4 <== NOT EXECUTED 40010828: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 4001082c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40010830: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40010834: 40 00 17 ce call 4001676c <_Thread_Change_priority> <== NOT EXECUTED 40010838: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 4001083c: 7f ff ff ab call 400106e8 <_Thread_Enable_dispatch> <== NOT EXECUTED 40010840: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED 40010844: 30 80 00 2f b,a 40010900 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40010848: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 4001084c: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40010850: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40010854: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010858: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001085c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40010860: 30 80 00 0f b,a 4001089c <== 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 ) ) { 40010864: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40010868: 12 80 00 13 bne 400108b4 <== NOT EXECUTED 4001086c: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40010870: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40010874: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40010878: 22 80 00 07 be,a 40010894 <== NOT EXECUTED 4001087c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40010880: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010884: 32 80 00 0c bne,a 400108b4 <== NOT EXECUTED 40010888: 03 10 00 cc sethi %hi(0x40033000), %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; 4001088c: 10 80 00 08 b 400108ac <== NOT EXECUTED 40010890: 82 10 20 02 mov 2, %g1 <== 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++; 40010894: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010898: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 4001089c: 7f ff e8 02 call 4000a8a4 400108a0: 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 ); 400108a4: 10 80 00 17 b 40010900 400108a8: 23 10 00 cc sethi %hi(0x40033000), %l1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400108ac: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400108b0: 30 bf ff fb b,a 4001089c <== NOT EXECUTED 400108b4: c6 04 20 08 ld [ %l0 + 8 ], %g3 <== NOT EXECUTED 400108b8: c8 00 63 6c ld [ %g1 + 0x36c ], %g4 <== NOT EXECUTED 400108bc: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 400108c0: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400108c4: c6 21 20 20 st %g3, [ %g4 + 0x20 ] <== NOT EXECUTED 400108c8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400108cc: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== 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; 400108d0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400108d4: c2 24 20 40 st %g1, [ %l0 + 0x40 ] <== NOT EXECUTED 400108d8: 82 04 20 10 add %l0, 0x10, %g1 <== NOT EXECUTED 400108dc: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 400108e0: 7f ff e7 f1 call 4000a8a4 <== NOT EXECUTED 400108e4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400108e8: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 400108ec: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 400108f0: 92 10 20 00 clr %o1 <== NOT EXECUTED 400108f4: 40 00 0f bf call 400147f0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 400108f8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 400108fc: 23 10 00 cc sethi %hi(0x40033000), %l1 <== NOT EXECUTED 40010900: 40 00 12 7b call 400152ec <_Objects_Allocate> 40010904: 90 14 60 a8 or %l1, 0xa8, %o0 ! 400330a8 <_Region_Information> the_region = _Region_Allocate(); if ( !the_region ) { 40010908: a0 92 20 00 orcc %o0, 0, %l0 4001090c: 12 80 00 0f bne 40010948 40010910: 05 10 00 cc sethi %hi(0x40033000), %g2 40010914: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 40010918: 82 00 60 01 inc %g1 4001091c: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _RTEMS_Unlock_allocator(); 40010920: 03 10 00 cc sethi %hi(0x40033000), %g1 40010924: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 40010928: 94 10 20 00 clr %o2 4001092c: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010930: 40 00 0f d2 call 40014878 <_CORE_mutex_Surrender> 40010934: 90 02 20 10 add %o0, 0x10, %o0 40010938: 7f ff ff 6c call 400106e8 <_Thread_Enable_dispatch> 4001093c: b0 10 20 05 mov 5, %i0 40010940: 81 c7 e0 08 ret 40010944: 81 e8 00 00 restore return RTEMS_TOO_MANY; } the_region->maximum_segment_size = 40010948: 90 04 20 68 add %l0, 0x68, %o0 4001094c: 92 10 00 19 mov %i1, %o1 40010950: 94 10 00 1a mov %i2, %o2 40010954: 40 00 11 ef call 40015110 <_Heap_Initialize> 40010958: 96 10 00 1b mov %i3, %o3 _Heap_Initialize(&the_region->Memory, starting_address, length, page_size); if ( !the_region->maximum_segment_size ) { 4001095c: 80 a2 20 00 cmp %o0, 0 40010960: 12 80 00 13 bne 400109ac 40010964: 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 ); 40010968: 90 14 60 a8 or %l1, 0xa8, %o0 4001096c: 40 00 13 62 call 400156f4 <_Objects_Free> 40010970: 92 10 00 10 mov %l0, %o1 40010974: 05 10 00 cc sethi %hi(0x40033000), %g2 40010978: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4001097c: 82 00 60 01 inc %g1 40010980: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 40010984: 03 10 00 cc sethi %hi(0x40033000), %g1 40010988: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 4001098c: 94 10 20 00 clr %o2 40010990: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010994: 40 00 0f b9 call 40014878 <_CORE_mutex_Surrender> 40010998: 90 02 20 10 add %o0, 0x10, %o0 4001099c: 7f ff ff 53 call 400106e8 <_Thread_Enable_dispatch> 400109a0: b0 10 20 08 mov 8, %i0 400109a4: 81 c7 e0 08 ret 400109a8: 81 e8 00 00 restore 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( 400109ac: 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; 400109b0: f2 24 20 50 st %i1, [ %l0 + 0x50 ] the_region->length = length; 400109b4: f4 24 20 54 st %i2, [ %l0 + 0x54 ] the_region->page_size = page_size; 400109b8: f6 24 20 58 st %i3, [ %l0 + 0x58 ] the_region->attribute_set = attribute_set; 400109bc: f8 24 20 60 st %i4, [ %l0 + 0x60 ] the_region->number_of_used_blocks = 0; 400109c0: c0 24 20 64 clr [ %l0 + 0x64 ] _Thread_queue_Initialize( 400109c4: 93 37 20 02 srl %i4, 2, %o1 400109c8: 94 10 20 40 mov 0x40, %o2 400109cc: 92 0a 60 01 and %o1, 1, %o1 400109d0: 40 00 1a e2 call 40017558 <_Thread_queue_Initialize> 400109d4: 96 10 20 06 mov 6, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400109d8: 90 14 60 a8 or %l1, 0xa8, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 400109dc: c4 04 20 08 ld [ %l0 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400109e0: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 400109e4: 03 00 00 3f sethi %hi(0xfc00), %g1 400109e8: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 400109ec: 82 08 80 01 and %g2, %g1, %g1 400109f0: 80 a0 40 03 cmp %g1, %g3 400109f4: 38 80 00 06 bgu,a 40010a0c 400109f8: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 400109fc: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40010a00: 83 28 60 02 sll %g1, 2, %g1 40010a04: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Region_Information, &the_region->Object, (Objects_Name) name ); *id = the_region->Object.id; 40010a08: c2 04 20 08 ld [ %l0 + 8 ], %g1 40010a0c: 05 10 00 cc sethi %hi(0x40033000), %g2 40010a10: c2 27 40 00 st %g1, [ %i5 ] 40010a14: c2 00 a2 90 ld [ %g2 + 0x290 ], %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; 40010a18: e4 24 20 0c st %l2, [ %l0 + 0xc ] 40010a1c: 82 00 60 01 inc %g1 40010a20: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _RTEMS_Unlock_allocator(); 40010a24: 03 10 00 cc sethi %hi(0x40033000), %g1 40010a28: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 40010a2c: 94 10 20 00 clr %o2 40010a30: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010a34: 40 00 0f 91 call 40014878 <_CORE_mutex_Surrender> 40010a38: 90 02 20 10 add %o0, 0x10, %o0 40010a3c: 7f ff ff 2b call 400106e8 <_Thread_Enable_dispatch> 40010a40: b0 10 20 00 clr %i0 40010a44: 81 c7 e0 08 ret 40010a48: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 40010a4c: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED } 40010a50: 81 c7 e0 08 ret <== NOT EXECUTED 40010a54: 81 e8 00 00 restore <== NOT EXECUTED 40010a8c : */ rtems_status_code rtems_region_delete( Objects_Id id ) { 40010a8c: 9d e3 bf 90 save %sp, -112, %sp register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); 40010a90: 7f ff e7 81 call 4000a894 40010a94: 01 00 00 00 nop 40010a98: a2 10 00 08 mov %o0, %l1 40010a9c: 03 10 00 cc sethi %hi(0x40033000), %g1 40010aa0: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 40010aa4: 80 a0 60 00 cmp %g1, 0 40010aa8: 02 80 00 0b be 40010ad4 40010aac: 03 10 00 cc sethi %hi(0x40033000), %g1 40010ab0: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40010ab4: c2 00 60 70 ld [ %g1 + 0x70 ], %g1 ! 40033470 <_System_state_Current> <== NOT EXECUTED 40010ab8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010abc: 08 80 00 05 bleu 40010ad0 <== NOT EXECUTED 40010ac0: 90 10 20 00 clr %o0 <== NOT EXECUTED 40010ac4: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010ac8: 40 00 11 dc call 40015238 <_Internal_error_Occurred> <== NOT EXECUTED 40010acc: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40010ad0: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40010ad4: e0 00 63 64 ld [ %g1 + 0x364 ], %l0 ! 40033364 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40010ad8: 03 10 00 cc sethi %hi(0x40033000), %g1 40010adc: c4 00 63 6c ld [ %g1 + 0x36c ], %g2 ! 4003336c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40010ae0: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40010ae4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40010ae8: 80 a0 60 00 cmp %g1, 0 40010aec: 22 80 00 33 be,a 40010bb8 40010af0: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40010af4: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010af8: 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; 40010afc: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 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; 40010b00: 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; 40010b04: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40010b08: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40010b0c: 80 a0 e0 02 cmp %g3, 2 40010b10: 02 80 00 05 be 40010b24 40010b14: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 40010b18: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40010b1c: 32 80 00 06 bne,a 40010b34 <== NOT EXECUTED 40010b20: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010b24: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 40010b28: 82 00 60 01 inc %g1 40010b2c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010b30: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 40010b34: 80 a0 60 03 cmp %g1, 3 40010b38: 22 80 00 03 be,a 40010b44 40010b3c: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40010b40: 30 80 00 2c b,a 40010bf0 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 40010b44: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40010b48: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40010b4c: 12 80 00 03 bne 40010b58 <== NOT EXECUTED 40010b50: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40010b54: 30 80 00 27 b,a 40010bf0 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40010b58: 08 80 00 10 bleu 40010b98 <== NOT EXECUTED 40010b5c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010b60: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40010b64: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40010b68: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010b6c: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40010b70: 7f ff e7 4d call 4000a8a4 <== NOT EXECUTED 40010b74: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40010b78: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40010b7c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40010b80: 40 00 16 fb call 4001676c <_Thread_Change_priority> <== NOT EXECUTED 40010b84: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40010b88: 7f ff ff b4 call 40010a58 <_Thread_Enable_dispatch> <== NOT EXECUTED 40010b8c: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40010b90: 10 80 00 32 b 40010c58 <== NOT EXECUTED 40010b94: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40010b98: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010b9c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40010ba0: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010ba4: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40010ba8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010bac: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010bb0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40010bb4: 30 80 00 0f b,a 40010bf0 <== 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 ) ) { 40010bb8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40010bbc: 32 80 00 13 bne,a 40010c08 <== NOT EXECUTED 40010bc0: 21 10 00 cc sethi %hi(0x40033000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40010bc4: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40033050 <_Partition_Information+0x40> <== NOT EXECUTED 40010bc8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40010bcc: 22 80 00 07 be,a 40010be8 <== NOT EXECUTED 40010bd0: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40010bd4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010bd8: 12 80 00 0c bne 40010c08 <== NOT EXECUTED 40010bdc: 21 10 00 cc sethi %hi(0x40033000), %l0 <== 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; 40010be0: 10 80 00 08 b 40010c00 <== NOT EXECUTED 40010be4: 82 10 20 02 mov 2, %g1 <== 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++; 40010be8: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010bec: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40010bf0: 7f ff e7 2d call 4000a8a4 40010bf4: 90 10 00 11 mov %l1, %o0 40010bf8: 10 80 00 18 b 40010c58 40010bfc: 92 10 00 18 mov %i0, %o1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40010c00: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40010c04: 30 bf ff fb b,a 40010bf0 <== NOT EXECUTED 40010c08: c6 04 23 64 ld [ %l0 + 0x364 ], %g3 <== NOT EXECUTED 40010c0c: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40010c10: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 40010c14: c8 00 63 6c ld [ %g1 + 0x36c ], %g4 <== NOT EXECUTED 40010c18: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40010c1c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40010c20: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 40010c24: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010c28: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 40010c2c: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40010c30: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 40010c34: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40010c38: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40010c3c: 7f ff e7 1a call 4000a8a4 <== NOT EXECUTED 40010c40: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010c44: d0 04 23 64 ld [ %l0 + 0x364 ], %o0 <== NOT EXECUTED 40010c48: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010c4c: 40 00 0e e9 call 400147f0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40010c50: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40010c54: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40010c58: 21 10 00 cc sethi %hi(0x40033000), %l0 40010c5c: 94 07 bf f4 add %fp, -12, %o2 40010c60: 40 00 12 e7 call 400157fc <_Objects_Get_no_protection> 40010c64: 90 14 20 a8 or %l0, 0xa8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 40010c68: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010c6c: 80 a0 60 01 cmp %g1, 1 40010c70: 02 80 00 0a be 40010c98 40010c74: 92 10 00 08 mov %o0, %o1 40010c78: 80 a0 60 01 cmp %g1, 1 40010c7c: 2a 80 00 22 bcs,a 40010d04 40010c80: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 40010c84: 80 a0 60 02 cmp %g1, 2 40010c88: 12 80 00 10 bne 40010cc8 40010c8c: b0 10 20 19 mov 0x19, %i0 40010c90: 10 80 00 10 b 40010cd0 40010c94: 05 10 00 cc sethi %hi(0x40033000), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40010c98: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40010c9c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40010ca0: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010ca4: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 40010ca8: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40010cac: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 40010cb0: 94 10 20 00 clr %o2 <== NOT EXECUTED 40010cb4: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40010cb8: 40 00 0e f0 call 40014878 <_CORE_mutex_Surrender> <== NOT EXECUTED 40010cbc: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40010cc0: 7f ff ff 66 call 40010a58 <_Thread_Enable_dispatch> <== NOT EXECUTED 40010cc4: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40010cc8: 81 c7 e0 08 ret <== NOT EXECUTED 40010ccc: 81 e8 00 00 restore <== NOT EXECUTED 40010cd0: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 40010cd4: 82 00 60 01 inc %g1 40010cd8: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40010cdc: 03 10 00 cc sethi %hi(0x40033000), %g1 40010ce0: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 40010ce4: 94 10 20 00 clr %o2 40010ce8: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010cec: 40 00 0e e3 call 40014878 <_CORE_mutex_Surrender> 40010cf0: 90 02 20 10 add %o0, 0x10, %o0 40010cf4: 7f ff ff 59 call 40010a58 <_Thread_Enable_dispatch> 40010cf8: b0 10 20 04 mov 4, %i0 40010cfc: 81 c7 e0 08 ret 40010d00: 81 e8 00 00 restore return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 5 ); if ( the_region->number_of_used_blocks == 0 ) { 40010d04: 80 a0 60 00 cmp %g1, 0 40010d08: 12 80 00 1d bne 40010d7c 40010d0c: 05 10 00 cc sethi %hi(0x40033000), %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010d10: 90 14 20 a8 or %l0, 0xa8, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40010d14: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010d18: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40010d1c: 05 00 00 3f sethi %hi(0xfc00), %g2 40010d20: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40010d24: 82 08 40 02 and %g1, %g2, %g1 40010d28: 80 a0 40 03 cmp %g1, %g3 40010d2c: 18 80 00 04 bgu 40010d3c 40010d30: 83 28 60 02 sll %g1, 2, %g1 information->local_table[ index ] = the_object; 40010d34: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40010d38: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Region_Free ( Region_Control *the_region ) { _Objects_Free( &_Region_Information, &the_region->Object ); 40010d3c: 40 00 12 6e call 400156f4 <_Objects_Free> 40010d40: c0 22 60 0c clr [ %o1 + 0xc ] 40010d44: 05 10 00 cc sethi %hi(0x40033000), %g2 40010d48: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 40010d4c: 82 00 60 01 inc %g1 40010d50: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 40010d54: 03 10 00 cc sethi %hi(0x40033000), %g1 40010d58: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 40010d5c: 94 10 20 00 clr %o2 40010d60: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010d64: 40 00 0e c5 call 40014878 <_CORE_mutex_Surrender> 40010d68: 90 02 20 10 add %o0, 0x10, %o0 40010d6c: 7f ff ff 3b call 40010a58 <_Thread_Enable_dispatch> 40010d70: b0 10 20 00 clr %i0 40010d74: 81 c7 e0 08 ret 40010d78: 81 e8 00 00 restore 40010d7c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 40010d80: 82 00 60 01 inc %g1 40010d84: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] return RTEMS_SUCCESSFUL; } _RTEMS_Unlock_allocator(); 40010d88: 03 10 00 cc sethi %hi(0x40033000), %g1 40010d8c: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 40010d90: 94 10 20 00 clr %o2 40010d94: d2 02 20 08 ld [ %o0 + 8 ], %o1 40010d98: 40 00 0e b8 call 40014878 <_CORE_mutex_Surrender> 40010d9c: 90 02 20 10 add %o0, 0x10, %o0 40010da0: 7f ff ff 2e call 40010a58 <_Thread_Enable_dispatch> 40010da4: b0 10 20 0c mov 0xc, %i0 return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40010da8: 81 c7 e0 08 ret 40010dac: 81 e8 00 00 restore 40010de4 : rtems_status_code rtems_region_extend( Objects_Id id, void *starting_address, uint32_t length ) { 40010de4: 9d e3 bf 90 save %sp, -112, %sp 40010de8: a4 10 00 18 mov %i0, %l2 Objects_Locations location; uint32_t amount_extended; Heap_Extend_status heap_status; rtems_status_code status; if ( !starting_address ) 40010dec: 80 a6 60 00 cmp %i1, 0 40010df0: 02 80 00 90 be 40011030 40010df4: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ 40010df8: 7f ff e6 a7 call 4000a894 40010dfc: 01 00 00 00 nop 40010e00: a2 10 00 08 mov %o0, %l1 40010e04: 03 10 00 cc sethi %hi(0x40033000), %g1 40010e08: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 40010e0c: 80 a0 60 00 cmp %g1, 0 40010e10: 02 80 00 0b be 40010e3c 40010e14: 03 10 00 cc sethi %hi(0x40033000), %g1 40010e18: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 40010e1c: c2 00 60 70 ld [ %g1 + 0x70 ], %g1 ! 40033470 <_System_state_Current> <== NOT EXECUTED 40010e20: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010e24: 08 80 00 05 bleu 40010e38 <== NOT EXECUTED 40010e28: 90 10 20 00 clr %o0 <== NOT EXECUTED 40010e2c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010e30: 40 00 11 02 call 40015238 <_Internal_error_Occurred> <== NOT EXECUTED 40010e34: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40010e38: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40010e3c: e0 00 63 64 ld [ %g1 + 0x364 ], %l0 ! 40033364 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40010e40: 03 10 00 cc sethi %hi(0x40033000), %g1 40010e44: c4 00 63 6c ld [ %g1 + 0x36c ], %g2 ! 4003336c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40010e48: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40010e4c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40010e50: 80 a0 60 00 cmp %g1, 0 40010e54: 22 80 00 33 be,a 40010f20 40010e58: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40010e5c: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40010e60: 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; 40010e64: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 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; 40010e68: 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; 40010e6c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40010e70: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40010e74: 80 a0 e0 02 cmp %g3, 2 40010e78: 02 80 00 05 be 40010e8c 40010e7c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 40010e80: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40010e84: 32 80 00 06 bne,a 40010e9c <== NOT EXECUTED 40010e88: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40010e8c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 40010e90: 82 00 60 01 inc %g1 40010e94: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40010e98: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 40010e9c: 80 a0 60 03 cmp %g1, 3 40010ea0: 22 80 00 03 be,a 40010eac 40010ea4: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40010ea8: 30 80 00 2c b,a 40010f58 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 40010eac: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40010eb0: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40010eb4: 12 80 00 03 bne 40010ec0 <== NOT EXECUTED 40010eb8: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 40010ebc: 30 80 00 27 b,a 40010f58 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40010ec0: 08 80 00 10 bleu 40010f00 <== NOT EXECUTED 40010ec4: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40010ec8: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40010ecc: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40010ed0: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010ed4: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40010ed8: 7f ff e6 73 call 4000a8a4 <== NOT EXECUTED 40010edc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40010ee0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40010ee4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40010ee8: 40 00 16 21 call 4001676c <_Thread_Change_priority> <== NOT EXECUTED 40010eec: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40010ef0: 7f ff ff b0 call 40010db0 <_Thread_Enable_dispatch> <== NOT EXECUTED 40010ef4: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40010ef8: 10 80 00 32 b 40010fc0 <== NOT EXECUTED 40010efc: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40010f00: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010f04: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40010f08: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40010f0c: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40010f10: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40010f14: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40010f18: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40010f1c: 30 80 00 0f b,a 40010f58 <== 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 ) ) { 40010f20: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40010f24: 32 80 00 13 bne,a 40010f70 <== NOT EXECUTED 40010f28: 21 10 00 cc sethi %hi(0x40033000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40010f2c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40033050 <_Partition_Information+0x40> <== NOT EXECUTED 40010f30: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40010f34: 22 80 00 07 be,a 40010f50 <== NOT EXECUTED 40010f38: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40010f3c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40010f40: 12 80 00 0c bne 40010f70 <== NOT EXECUTED 40010f44: 21 10 00 cc sethi %hi(0x40033000), %l0 <== 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; 40010f48: 10 80 00 08 b 40010f68 <== NOT EXECUTED 40010f4c: 82 10 20 02 mov 2, %g1 <== 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++; 40010f50: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010f54: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40010f58: 7f ff e6 53 call 4000a8a4 40010f5c: 90 10 00 11 mov %l1, %o0 40010f60: 10 80 00 18 b 40010fc0 40010f64: 92 10 00 12 mov %l2, %o1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40010f68: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40010f6c: 30 bf ff fb b,a 40010f58 <== NOT EXECUTED 40010f70: c6 04 23 64 ld [ %l0 + 0x364 ], %g3 <== NOT EXECUTED 40010f74: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40010f78: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 40010f7c: c8 00 63 6c ld [ %g1 + 0x36c ], %g4 <== NOT EXECUTED 40010f80: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40010f84: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40010f88: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 40010f8c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40010f90: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 40010f94: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40010f98: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 40010f9c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40010fa0: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40010fa4: 7f ff e6 40 call 4000a8a4 <== NOT EXECUTED 40010fa8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40010fac: d0 04 23 64 ld [ %l0 + 0x364 ], %o0 <== NOT EXECUTED 40010fb0: 92 10 20 00 clr %o1 <== NOT EXECUTED 40010fb4: 40 00 0e 0f call 400147f0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40010fb8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40010fbc: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 40010fc0: 11 10 00 cc sethi %hi(0x40033000), %o0 40010fc4: 94 07 bf f4 add %fp, -12, %o2 40010fc8: 40 00 12 0d call 400157fc <_Objects_Get_no_protection> 40010fcc: 90 12 20 a8 or %o0, 0xa8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 40010fd0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010fd4: 80 a0 60 01 cmp %g1, 1 40010fd8: 02 80 00 0a be 40011000 40010fdc: a0 10 00 08 mov %o0, %l0 40010fe0: 80 a0 60 01 cmp %g1, 1 40010fe4: 0a 80 00 22 bcs 4001106c 40010fe8: 92 10 00 19 mov %i1, %o1 40010fec: 80 a0 60 02 cmp %g1, 2 40010ff0: 12 80 00 10 bne 40011030 40010ff4: b0 10 20 19 mov 0x19, %i0 40010ff8: 10 80 00 10 b 40011038 40010ffc: 05 10 00 cc sethi %hi(0x40033000), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40011000: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40011004: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40011008: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001100c: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 40011010: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40011014: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 40011018: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001101c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40011020: 40 00 0e 16 call 40014878 <_CORE_mutex_Surrender> <== NOT EXECUTED 40011024: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40011028: 7f ff ff 62 call 40010db0 <_Thread_Enable_dispatch> <== NOT EXECUTED 4001102c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40011030: 81 c7 e0 08 ret <== NOT EXECUTED 40011034: 81 e8 00 00 restore <== NOT EXECUTED 40011038: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 4001103c: 82 00 60 01 inc %g1 40011040: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40011044: 03 10 00 cc sethi %hi(0x40033000), %g1 40011048: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 4001104c: 94 10 20 00 clr %o2 40011050: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011054: 40 00 0e 09 call 40014878 <_CORE_mutex_Surrender> 40011058: 90 02 20 10 add %o0, 0x10, %o0 4001105c: 7f ff ff 55 call 40010db0 <_Thread_Enable_dispatch> 40011060: b0 10 20 04 mov 4, %i0 40011064: 81 c7 e0 08 ret 40011068: 81 e8 00 00 restore return RTEMS_INVALID_ID; case OBJECTS_LOCAL: heap_status = _Heap_Extend( 4001106c: 94 10 00 1a mov %i2, %o2 40011070: 90 02 20 68 add %o0, 0x68, %o0 40011074: 96 07 bf f0 add %fp, -16, %o3 40011078: 40 00 0f 3b call 40014d64 <_Heap_Extend> 4001107c: b0 10 20 09 mov 9, %i0 starting_address, length, &amount_extended ); switch ( heap_status ) { 40011080: 80 a2 20 01 cmp %o0, 1 40011084: 02 80 00 12 be 400110cc 40011088: 05 10 00 cc sethi %hi(0x40033000), %g2 4001108c: 0a 80 00 08 bcs 400110ac 40011090: c6 07 bf f0 ld [ %fp + -16 ], %g3 40011094: 82 1a 20 02 xor %o0, 2, %g1 40011098: 80 a0 00 01 cmp %g0, %g1 4001109c: 82 60 20 00 subx %g0, 0, %g1 400110a0: b0 08 7f e8 and %g1, -24, %i0 400110a4: 10 80 00 0a b 400110cc 400110a8: b0 06 20 18 add %i0, 0x18, %i0 case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 400110ac: c4 04 20 54 ld [ %l0 + 0x54 ], %g2 the_region->maximum_segment_size += amount_extended; 400110b0: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 400110b4: 84 00 80 03 add %g2, %g3, %g2 the_region->maximum_segment_size += amount_extended; 400110b8: 82 00 40 03 add %g1, %g3, %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 400110bc: c4 24 20 54 st %g2, [ %l0 + 0x54 ] the_region->maximum_segment_size += amount_extended; 400110c0: c2 24 20 5c st %g1, [ %l0 + 0x5c ] 400110c4: b0 10 20 00 clr %i0 400110c8: 05 10 00 cc sethi %hi(0x40033000), %g2 400110cc: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 400110d0: 82 00 60 01 inc %g1 400110d4: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] break; case HEAP_EXTEND_NOT_IMPLEMENTED: status = RTEMS_NOT_IMPLEMENTED; break; } _RTEMS_Unlock_allocator(); 400110d8: 03 10 00 cc sethi %hi(0x40033000), %g1 400110dc: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 400110e0: 94 10 20 00 clr %o2 400110e4: d2 02 20 08 ld [ %o0 + 8 ], %o1 400110e8: 40 00 0d e4 call 40014878 <_CORE_mutex_Surrender> 400110ec: 90 02 20 10 add %o0, 0x10, %o0 400110f0: 7f ff ff 30 call 40010db0 <_Thread_Enable_dispatch> 400110f4: 01 00 00 00 nop return( status ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400110f8: 81 c7 e0 08 ret 400110fc: 81 e8 00 00 restore 40011134 : uint32_t size, rtems_option option_set, rtems_interval timeout, void **segment ) { 40011134: 9d e3 bf 90 save %sp, -112, %sp 40011138: a4 10 00 18 mov %i0, %l2 register Region_Control *the_region; Objects_Locations location; Thread_Control *executing; void *the_segment; if ( !segment ) 4001113c: 80 a7 20 00 cmp %i4, 0 40011140: 02 80 00 96 be 40011398 40011144: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; *segment = NULL; 40011148: c0 27 00 00 clr [ %i4 ] if ( size == 0 ) 4001114c: 80 a6 60 00 cmp %i1, 0 40011150: 02 80 00 92 be 40011398 40011154: b0 10 20 08 mov 8, %i0 return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 40011158: 7f ff e5 cf call 4000a894 4001115c: 01 00 00 00 nop 40011160: a2 10 00 08 mov %o0, %l1 40011164: 03 10 00 cc sethi %hi(0x40033000), %g1 40011168: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4001116c: 80 a0 60 00 cmp %g1, 0 40011170: 02 80 00 0b be 4001119c 40011174: 03 10 00 cc sethi %hi(0x40033000), %g1 40011178: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 4001117c: c2 00 60 70 ld [ %g1 + 0x70 ], %g1 ! 40033470 <_System_state_Current> <== NOT EXECUTED 40011180: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011184: 08 80 00 05 bleu 40011198 <== NOT EXECUTED 40011188: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001118c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011190: 40 00 10 2a call 40015238 <_Internal_error_Occurred> <== NOT EXECUTED 40011194: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40011198: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 4001119c: e0 00 63 64 ld [ %g1 + 0x364 ], %l0 ! 40033364 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400111a0: 03 10 00 cc sethi %hi(0x40033000), %g1 400111a4: c4 00 63 6c ld [ %g1 + 0x36c ], %g2 ! 4003336c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400111a8: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400111ac: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400111b0: 80 a0 60 00 cmp %g1, 0 400111b4: 22 80 00 33 be,a 40011280 400111b8: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400111bc: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400111c0: 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; 400111c4: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 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; 400111c8: 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; 400111cc: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 400111d0: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400111d4: 80 a0 e0 02 cmp %g3, 2 400111d8: 02 80 00 05 be 400111ec 400111dc: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 400111e0: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400111e4: 32 80 00 06 bne,a 400111fc <== NOT EXECUTED 400111e8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400111ec: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 400111f0: 82 00 60 01 inc %g1 400111f4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400111f8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 400111fc: 80 a0 60 03 cmp %g1, 3 40011200: 22 80 00 03 be,a 4001120c 40011204: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40011208: 30 80 00 2c b,a 400112b8 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 4001120c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40011210: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40011214: 12 80 00 03 bne 40011220 <== NOT EXECUTED 40011218: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 4001121c: 30 80 00 27 b,a 400112b8 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40011220: 28 80 00 10 bleu,a 40011260 <== NOT EXECUTED 40011224: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011228: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 4001122c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40011230: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011234: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40011238: 7f ff e5 9b call 4000a8a4 <== NOT EXECUTED 4001123c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40011240: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40011244: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40011248: 40 00 15 49 call 4001676c <_Thread_Change_priority> <== NOT EXECUTED 4001124c: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40011250: 7f ff ff ac call 40011100 <_Thread_Enable_dispatch> <== NOT EXECUTED 40011254: 01 00 00 00 nop <== NOT EXECUTED executing = _Thread_Executing; 40011258: 10 80 00 32 b 40011320 <== NOT EXECUTED 4001125c: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40011260: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40011264: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40011268: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 4001126c: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40011270: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40011274: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011278: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4001127c: 30 80 00 0f b,a 400112b8 <== 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 ) ) { 40011280: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40011284: 32 80 00 13 bne,a 400112d0 <== NOT EXECUTED 40011288: 21 10 00 cc sethi %hi(0x40033000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4001128c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40033050 <_Partition_Information+0x40> <== NOT EXECUTED 40011290: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40011294: 22 80 00 07 be,a 400112b0 <== NOT EXECUTED 40011298: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 4001129c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400112a0: 12 80 00 0c bne 400112d0 <== NOT EXECUTED 400112a4: 21 10 00 cc sethi %hi(0x40033000), %l0 <== 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; 400112a8: 10 80 00 08 b 400112c8 <== NOT EXECUTED 400112ac: 82 10 20 02 mov 2, %g1 <== 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++; 400112b0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400112b4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400112b8: 7f ff e5 7b call 4000a8a4 400112bc: 90 10 00 11 mov %l1, %o0 400112c0: 10 80 00 18 b 40011320 400112c4: 03 10 00 cc sethi %hi(0x40033000), %g1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400112c8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400112cc: 30 bf ff fb b,a 400112b8 <== NOT EXECUTED *segment = NULL; if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 400112d0: c6 04 23 64 ld [ %l0 + 0x364 ], %g3 <== NOT EXECUTED 400112d4: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 400112d8: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 400112dc: c8 00 63 6c ld [ %g1 + 0x36c ], %g4 <== NOT EXECUTED 400112e0: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 400112e4: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400112e8: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 400112ec: 82 00 60 01 inc %g1 <== NOT EXECUTED 400112f0: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 400112f4: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 400112f8: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 400112fc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40011300: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40011304: 7f ff e5 68 call 4000a8a4 <== NOT EXECUTED 40011308: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4001130c: d0 04 23 64 ld [ %l0 + 0x364 ], %o0 <== NOT EXECUTED 40011310: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011314: 40 00 0d 37 call 400147f0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40011318: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED executing = _Thread_Executing; 4001131c: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40011320: 11 10 00 cc sethi %hi(0x40033000), %o0 40011324: f0 00 63 6c ld [ %g1 + 0x36c ], %i0 40011328: 90 12 20 a8 or %o0, 0xa8, %o0 4001132c: 92 10 00 12 mov %l2, %o1 40011330: 40 00 11 33 call 400157fc <_Objects_Get_no_protection> 40011334: 94 07 bf f4 add %fp, -12, %o2 the_region = _Region_Get( id, &location ); switch ( location ) { 40011338: c2 07 bf f4 ld [ %fp + -12 ], %g1 4001133c: 80 a0 60 01 cmp %g1, 1 40011340: 02 80 00 0a be 40011368 40011344: a0 10 00 08 mov %o0, %l0 40011348: 80 a0 60 01 cmp %g1, 1 4001134c: 2a 80 00 22 bcs,a 400113d4 40011350: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 40011354: 80 a0 60 02 cmp %g1, 2 40011358: 12 80 00 10 bne 40011398 4001135c: b0 10 20 19 mov 0x19, %i0 40011360: 10 80 00 10 b 400113a0 40011364: 05 10 00 cc sethi %hi(0x40033000), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40011368: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 4001136c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40011370: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011374: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 40011378: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 4001137c: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 40011380: 94 10 20 00 clr %o2 <== NOT EXECUTED 40011384: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40011388: 40 00 0d 3c call 40014878 <_CORE_mutex_Surrender> <== NOT EXECUTED 4001138c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40011390: 7f ff ff 5c call 40011100 <_Thread_Enable_dispatch> <== NOT EXECUTED 40011394: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40011398: 81 c7 e0 08 ret <== NOT EXECUTED 4001139c: 81 e8 00 00 restore <== NOT EXECUTED 400113a0: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 400113a4: 82 00 60 01 inc %g1 400113a8: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 400113ac: 03 10 00 cc sethi %hi(0x40033000), %g1 400113b0: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 400113b4: 94 10 20 00 clr %o2 400113b8: d2 02 20 08 ld [ %o0 + 8 ], %o1 400113bc: 40 00 0d 2f call 40014878 <_CORE_mutex_Surrender> 400113c0: 90 02 20 10 add %o0, 0x10, %o0 400113c4: 7f ff ff 4f call 40011100 <_Thread_Enable_dispatch> 400113c8: b0 10 20 04 mov 4, %i0 400113cc: 81 c7 e0 08 ret 400113d0: 81 e8 00 00 restore return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( size > the_region->maximum_segment_size ) { 400113d4: 80 a6 40 01 cmp %i1, %g1 400113d8: 08 80 00 0f bleu 40011414 400113dc: 05 10 00 cc sethi %hi(0x40033000), %g2 400113e0: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 400113e4: 82 00 60 01 inc %g1 400113e8: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _RTEMS_Unlock_allocator(); 400113ec: 03 10 00 cc sethi %hi(0x40033000), %g1 400113f0: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 400113f4: 94 10 20 00 clr %o2 400113f8: d2 02 20 08 ld [ %o0 + 8 ], %o1 400113fc: 40 00 0d 1f call 40014878 <_CORE_mutex_Surrender> 40011400: 90 02 20 10 add %o0, 0x10, %o0 40011404: 7f ff ff 3f call 40011100 <_Thread_Enable_dispatch> 40011408: b0 10 20 08 mov 8, %i0 4001140c: 81 c7 e0 08 ret 40011410: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void *_Region_Allocate_segment ( Region_Control *the_region, uint32_t size ) { return _Heap_Allocate( &the_region->Memory, size ); 40011414: 90 02 20 68 add %o0, 0x68, %o0 40011418: 40 00 0e 2c call 40014cc8 <_Heap_Allocate> 4001141c: 92 10 00 19 mov %i1, %o1 the_segment = _Region_Allocate_segment( the_region, size ); _Region_Debug_Walk( the_region, 2 ); if ( the_segment ) { 40011420: a2 92 20 00 orcc %o0, 0, %l1 40011424: 02 80 00 13 be 40011470 40011428: 07 10 00 cc sethi %hi(0x40033000), %g3 the_region->number_of_used_blocks += 1; 4001142c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 40011430: c4 00 e2 90 ld [ %g3 + 0x290 ], %g2 40011434: 82 00 60 01 inc %g1 40011438: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 4001143c: 84 00 a0 01 inc %g2 40011440: c4 20 e2 90 st %g2, [ %g3 + 0x290 ] _RTEMS_Unlock_allocator(); 40011444: 03 10 00 cc sethi %hi(0x40033000), %g1 40011448: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 4001144c: 94 10 20 00 clr %o2 40011450: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011454: 40 00 0d 09 call 40014878 <_CORE_mutex_Surrender> 40011458: 90 02 20 10 add %o0, 0x10, %o0 4001145c: 7f ff ff 29 call 40011100 <_Thread_Enable_dispatch> 40011460: b0 10 20 00 clr %i0 *segment = the_segment; 40011464: e2 27 00 00 st %l1, [ %i4 ] 40011468: 81 c7 e0 08 ret 4001146c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } if ( _Options_Is_no_wait( option_set ) ) { 40011470: 80 8e a0 01 btst 1, %i2 40011474: 05 10 00 cc sethi %hi(0x40033000), %g2 40011478: 02 80 00 0e be 400114b0 4001147c: 07 10 00 cc sethi %hi(0x40033000), %g3 40011480: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 40011484: 82 00 60 01 inc %g1 40011488: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _RTEMS_Unlock_allocator(); 4001148c: d0 00 e3 64 ld [ %g3 + 0x364 ], %o0 40011490: 94 10 20 00 clr %o2 40011494: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011498: 40 00 0c f8 call 40014878 <_CORE_mutex_Surrender> 4001149c: 90 02 20 10 add %o0, 0x10, %o0 400114a0: 7f ff ff 18 call 40011100 <_Thread_Enable_dispatch> 400114a4: b0 10 20 0d mov 0xd, %i0 400114a8: 81 c7 e0 08 ret 400114ac: 81 e8 00 00 restore 400114b0: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 400114b4: 82 00 60 01 inc %g1 400114b8: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] 400114bc: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 400114c0: 82 00 60 01 inc %g1 400114c4: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] * 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(); 400114c8: d0 00 e3 64 ld [ %g3 + 0x364 ], %o0 400114cc: 94 10 20 00 clr %o2 400114d0: d2 02 20 08 ld [ %o0 + 8 ], %o1 400114d4: 40 00 0c e9 call 40014878 <_CORE_mutex_Surrender> 400114d8: 90 02 20 10 add %o0, 0x10, %o0 400114dc: 7f ff ff 09 call 40011100 <_Thread_Enable_dispatch> 400114e0: 01 00 00 00 nop executing->Wait.queue = &the_region->Wait_queue; 400114e4: 82 04 20 10 add %l0, 0x10, %g1 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 ); 400114e8: 92 10 00 1b mov %i3, %o1 400114ec: 90 10 00 01 mov %g1, %o0 * because this thread is going to block. */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); executing->Wait.queue = &the_region->Wait_queue; 400114f0: c2 26 20 44 st %g1, [ %i0 + 0x44 ] 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 ); 400114f4: 15 10 00 5d sethi %hi(0x40017400), %o2 400114f8: 82 10 20 01 mov 1, %g1 400114fc: 94 12 a2 54 or %o2, 0x254, %o2 */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); executing->Wait.queue = &the_region->Wait_queue; executing->Wait.id = id; 40011500: e4 26 20 20 st %l2, [ %i0 + 0x20 ] executing->Wait.count = size; 40011504: f2 26 20 24 st %i1, [ %i0 + 0x24 ] executing->Wait.return_argument = segment; 40011508: 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 ); 4001150c: 40 00 17 2c call 400171bc <_Thread_queue_Enqueue_with_handler> 40011510: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _Thread_Enable_dispatch(); 40011514: 7f ff fe fb call 40011100 <_Thread_Enable_dispatch> 40011518: 01 00 00 00 nop return (rtems_status_code) executing->Wait.return_code; 4001151c: f0 06 20 34 ld [ %i0 + 0x34 ], %i0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40011520: 81 c7 e0 08 ret 40011524: 81 e8 00 00 restore 40011594 : rtems_status_code rtems_region_return_segment( Objects_Id id, void *segment ) { 40011594: 9d e3 bf 90 save %sp, -112, %sp #ifdef RTEMS_REGION_FREE_SHRED_PATTERN uint32_t size; #endif int status; _RTEMS_Lock_allocator(); 40011598: 7f ff e4 bf call 4000a894 4001159c: 01 00 00 00 nop 400115a0: a2 10 00 08 mov %o0, %l1 400115a4: 03 10 00 cc sethi %hi(0x40033000), %g1 400115a8: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 400115ac: 80 a0 60 00 cmp %g1, 0 400115b0: 02 80 00 0b be 400115dc 400115b4: 03 10 00 cc sethi %hi(0x40033000), %g1 400115b8: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED 400115bc: c2 00 60 70 ld [ %g1 + 0x70 ], %g1 ! 40033470 <_System_state_Current> <== NOT EXECUTED 400115c0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400115c4: 08 80 00 05 bleu 400115d8 <== NOT EXECUTED 400115c8: 90 10 20 00 clr %o0 <== NOT EXECUTED 400115cc: 92 10 20 00 clr %o1 <== NOT EXECUTED 400115d0: 40 00 0f 1a call 40015238 <_Internal_error_Occurred> <== NOT EXECUTED 400115d4: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400115d8: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 400115dc: e0 00 63 64 ld [ %g1 + 0x364 ], %l0 ! 40033364 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400115e0: 03 10 00 cc sethi %hi(0x40033000), %g1 400115e4: c4 00 63 6c ld [ %g1 + 0x36c ], %g2 ! 4003336c <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400115e8: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400115ec: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400115f0: 80 a0 60 00 cmp %g1, 0 400115f4: 22 80 00 33 be,a 400116c0 400115f8: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400115fc: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40011600: 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; 40011604: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 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; 40011608: 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; 4001160c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40011610: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40011614: 80 a0 e0 02 cmp %g3, 2 40011618: 02 80 00 05 be 4001162c 4001161c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 40011620: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40011624: 32 80 00 06 bne,a 4001163c <== NOT EXECUTED 40011628: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4001162c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 40011630: 82 00 60 01 inc %g1 40011634: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011638: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 4001163c: 80 a0 60 03 cmp %g1, 3 40011640: 22 80 00 03 be,a 4001164c 40011644: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 40011648: 30 80 00 2c b,a 400116f8 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 4001164c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40011650: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40011654: 12 80 00 03 bne 40011660 <== NOT EXECUTED 40011658: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 4001165c: 30 80 00 27 b,a 400116f8 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 40011660: 08 80 00 10 bleu 400116a0 <== NOT EXECUTED 40011664: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011668: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 4001166c: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40011670: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011674: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40011678: 7f ff e4 8b call 4000a8a4 <== NOT EXECUTED 4001167c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40011680: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40011684: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40011688: 40 00 14 39 call 4001676c <_Thread_Change_priority> <== NOT EXECUTED 4001168c: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 40011690: 7f ff ff b4 call 40011560 <_Thread_Enable_dispatch> <== NOT EXECUTED 40011694: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40011698: 10 80 00 32 b 40011760 <== NOT EXECUTED 4001169c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400116a0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400116a4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400116a8: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 400116ac: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 400116b0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400116b4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400116b8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400116bc: 30 80 00 0f b,a 400116f8 <== 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 ) ) { 400116c0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400116c4: 32 80 00 13 bne,a 40011710 <== NOT EXECUTED 400116c8: 21 10 00 cc sethi %hi(0x40033000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400116cc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 40033050 <_Partition_Information+0x40> <== NOT EXECUTED 400116d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400116d4: 22 80 00 07 be,a 400116f0 <== NOT EXECUTED 400116d8: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400116dc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400116e0: 12 80 00 0c bne 40011710 <== NOT EXECUTED 400116e4: 21 10 00 cc sethi %hi(0x40033000), %l0 <== 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; 400116e8: 10 80 00 08 b 40011708 <== NOT EXECUTED 400116ec: 82 10 20 02 mov 2, %g1 <== 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++; 400116f0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400116f4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400116f8: 7f ff e4 6b call 4000a8a4 400116fc: 90 10 00 11 mov %l1, %o0 40011700: 10 80 00 18 b 40011760 40011704: 92 10 00 18 mov %i0, %o1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40011708: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4001170c: 30 bf ff fb b,a 400116f8 <== NOT EXECUTED 40011710: c6 04 23 64 ld [ %l0 + 0x364 ], %g3 <== NOT EXECUTED 40011714: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 40011718: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 4001171c: c8 00 63 6c ld [ %g1 + 0x36c ], %g4 <== NOT EXECUTED 40011720: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 40011724: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40011728: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 4001172c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011730: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 40011734: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 40011738: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 4001173c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40011740: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40011744: 7f ff e4 58 call 4000a8a4 <== NOT EXECUTED 40011748: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4001174c: d0 04 23 64 ld [ %l0 + 0x364 ], %o0 <== NOT EXECUTED 40011750: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011754: 40 00 0c 27 call 400147f0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40011758: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 4001175c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40011760: 11 10 00 cc sethi %hi(0x40033000), %o0 40011764: 94 07 bf f4 add %fp, -12, %o2 40011768: 40 00 10 25 call 400157fc <_Objects_Get_no_protection> 4001176c: 90 12 20 a8 or %o0, 0xa8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 40011770: c2 07 bf f4 ld [ %fp + -12 ], %g1 40011774: 80 a0 60 01 cmp %g1, 1 40011778: 02 80 00 0a be 400117a0 4001177c: a0 10 00 08 mov %o0, %l0 40011780: 80 a0 60 01 cmp %g1, 1 40011784: 0a 80 00 22 bcs 4001180c 40011788: 92 10 00 19 mov %i1, %o1 4001178c: 80 a0 60 02 cmp %g1, 2 40011790: 12 80 00 10 bne 400117d0 40011794: b0 10 20 19 mov 0x19, %i0 40011798: 10 80 00 10 b 400117d8 4001179c: 05 10 00 cc sethi %hi(0x40033000), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 400117a0: 05 10 00 cc sethi %hi(0x40033000), %g2 <== NOT EXECUTED 400117a4: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400117a8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400117ac: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] <== NOT EXECUTED 400117b0: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 400117b4: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 400117b8: 94 10 20 00 clr %o2 <== NOT EXECUTED 400117bc: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 400117c0: 40 00 0c 2e call 40014878 <_CORE_mutex_Surrender> <== NOT EXECUTED 400117c4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 400117c8: 7f ff ff 66 call 40011560 <_Thread_Enable_dispatch> <== NOT EXECUTED 400117cc: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 400117d0: 81 c7 e0 08 ret <== NOT EXECUTED 400117d4: 81 e8 00 00 restore <== NOT EXECUTED 400117d8: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 400117dc: 82 00 60 01 inc %g1 400117e0: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 400117e4: 03 10 00 cc sethi %hi(0x40033000), %g1 400117e8: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 400117ec: 94 10 20 00 clr %o2 400117f0: d2 02 20 08 ld [ %o0 + 8 ], %o1 400117f4: 40 00 0c 21 call 40014878 <_CORE_mutex_Surrender> 400117f8: 90 02 20 10 add %o0, 0x10, %o0 400117fc: 7f ff ff 59 call 40011560 <_Thread_Enable_dispatch> 40011800: b0 10 20 04 mov 4, %i0 40011804: 81 c7 e0 08 ret 40011808: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE boolean _Region_Free_segment ( Region_Control *the_region, void *the_segment ) { return _Heap_Free( &the_region->Memory, the_segment ); 4001180c: 40 00 0d 87 call 40014e28 <_Heap_Free> 40011810: 90 02 20 68 add %o0, 0x68, %o0 status = _Region_Free_segment( the_region, segment ); _Region_Debug_Walk( the_region, 4 ); if ( !status ) { 40011814: 80 a2 20 00 cmp %o0, 0 40011818: 12 80 00 0f bne 40011854 4001181c: 05 10 00 cc sethi %hi(0x40033000), %g2 40011820: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 40011824: 82 00 60 01 inc %g1 40011828: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] _RTEMS_Unlock_allocator(); 4001182c: 03 10 00 cc sethi %hi(0x40033000), %g1 40011830: d0 00 63 64 ld [ %g1 + 0x364 ], %o0 ! 40033364 <_RTEMS_Allocator_Mutex> 40011834: 94 10 20 00 clr %o2 40011838: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001183c: 40 00 0c 0f call 40014878 <_CORE_mutex_Surrender> 40011840: 90 02 20 10 add %o0, 0x10, %o0 40011844: 7f ff ff 47 call 40011560 <_Thread_Enable_dispatch> 40011848: b0 10 20 09 mov 9, %i0 4001184c: 81 c7 e0 08 ret 40011850: 81 e8 00 00 restore return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; 40011854: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 _Region_Process_queue(the_region); /* unlocks allocator internally */ 40011858: 90 10 00 10 mov %l0, %o0 if ( !status ) { _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; 4001185c: 82 00 7f ff add %g1, -1, %g1 _Region_Process_queue(the_region); /* unlocks allocator internally */ 40011860: b0 10 20 00 clr %i0 40011864: 40 00 23 1a call 4001a4cc <_Region_Process_queue> 40011868: c2 24 20 64 st %g1, [ %l0 + 0x64 ] return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001186c: 81 c7 e0 08 ret 40011870: 81 e8 00 00 restore 4000643c : uint32_t count, rtems_attribute attribute_set, rtems_task_priority priority_ceiling, rtems_id *id ) { 4000643c: 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 ) ) 40006440: a8 96 20 00 orcc %i0, 0, %l4 40006444: 02 80 00 2c be 400064f4 40006448: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 4000644c: 80 a7 20 00 cmp %i4, 0 40006450: 02 80 00 29 be 400064f4 40006454: b0 10 20 09 mov 9, %i0 return RTEMS_NOT_DEFINED; } else #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || 40006458: a4 8e a0 40 andcc %i2, 0x40, %l2 4000645c: 12 80 00 06 bne 40006474 40006460: 82 0e a0 30 and %i2, 0x30, %g1 40006464: 80 8e a0 80 btst 0x80, %i2 40006468: 02 80 00 10 be 400064a8 4000646c: a6 0e a0 30 and %i2, 0x30, %l3 RTEMS_INLINE_ROUTINE boolean _Attributes_Is_binary_semaphore( rtems_attribute attribute_set ) { return ((attribute_set & RTEMS_SEMAPHORE_CLASS) == RTEMS_BINARY_SEMAPHORE); 40006470: 82 0e a0 30 and %i2, 0x30, %g1 _Attributes_Is_priority_ceiling( attribute_set ) ) { if ( ! ( (_Attributes_Is_binary_semaphore( attribute_set ) || 40006474: 80 a0 60 10 cmp %g1, 0x10 40006478: 02 80 00 05 be 4000648c 4000647c: 80 8e a0 04 btst 4, %i2 40006480: 80 a0 60 20 cmp %g1, 0x20 40006484: 12 80 00 71 bne 40006648 40006488: 80 8e a0 04 btst 4, %i2 4000648c: 02 80 00 6f be 40006648 40006490: 80 a4 a0 00 cmp %l2, 0 _Attributes_Is_priority( attribute_set ) ) ) return RTEMS_NOT_DEFINED; } if ( _Attributes_Is_inherit_priority( attribute_set ) && 40006494: 02 80 00 04 be 400064a4 40006498: 80 8e a0 80 btst 0x80, %i2 4000649c: 32 80 00 16 bne,a 400064f4 400064a0: b0 10 20 0b mov 0xb, %i0 RTEMS_INLINE_ROUTINE boolean _Attributes_Is_counting_semaphore( rtems_attribute attribute_set ) { return ((attribute_set & RTEMS_SEMAPHORE_CLASS) == RTEMS_COUNTING_SEMAPHORE); 400064a4: a6 0e a0 30 and %i2, 0x30, %l3 400064a8: 80 a0 00 13 cmp %g0, %l3 400064ac: a2 60 3f ff subx %g0, -1, %l1 _Attributes_Is_priority_ceiling( attribute_set ) ) return RTEMS_NOT_DEFINED; if ( !_Attributes_Is_counting_semaphore( attribute_set ) && ( count > 1 ) ) 400064b0: 80 a4 60 00 cmp %l1, 0 400064b4: 12 80 00 04 bne 400064c4 400064b8: 80 a6 60 01 cmp %i1, 1 400064bc: 18 80 00 0e bgu 400064f4 400064c0: b0 10 20 0a mov 0xa, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400064c4: 03 10 00 67 sethi %hi(0x40019c00), %g1 400064c8: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> 400064cc: 84 00 a0 01 inc %g2 400064d0: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] * the inactive chain of free semaphore control blocks. */ RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Allocate( void ) { return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information ); 400064d4: 11 10 00 67 sethi %hi(0x40019c00), %o0 400064d8: 40 00 06 df call 40008054 <_Objects_Allocate> 400064dc: 90 12 21 58 or %o0, 0x158, %o0 ! 40019d58 <_Semaphore_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_semaphore = _Semaphore_Allocate(); if ( !the_semaphore ) { 400064e0: a0 92 20 00 orcc %o0, 0, %l0 400064e4: 12 80 00 06 bne 400064fc 400064e8: 80 a4 60 00 cmp %l1, 0 _Thread_Enable_dispatch(); 400064ec: 7f ff ff c7 call 40006408 <_Thread_Enable_dispatch> 400064f0: b0 10 20 05 mov 5, %i0 400064f4: 81 c7 e0 08 ret 400064f8: 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 ) ) { 400064fc: 12 80 00 32 bne 400065c4 40006500: f4 24 20 10 st %i2, [ %l0 + 0x10 ] CORE_mutex_Status mutex_status; if ( _Attributes_Is_inherit_priority( attribute_set ) ) 40006504: 80 a4 a0 00 cmp %l2, 0 40006508: 12 80 00 06 bne 40006520 4000650c: 82 10 20 02 mov 2, %g1 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) 40006510: 80 8e a0 80 btst 0x80, %i2 40006514: 02 80 00 05 be 40006528 40006518: 80 8e a0 04 btst 4, %i2 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; 4000651c: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 40006520: 10 80 00 05 b 40006534 40006524: c2 27 bf e8 st %g1, [ %fp + -24 ] else if ( _Attributes_Is_priority( attribute_set ) ) 40006528: 12 bf ff fe bne 40006520 4000652c: 82 10 20 01 mov 1, %g1 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; else the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_FIFO; 40006530: c0 27 bf e8 clr [ %fp + -24 ] if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { 40006534: 80 a4 e0 10 cmp %l3, 0x10 40006538: 12 80 00 0f bne 40006574 4000653c: 82 10 20 02 mov 2, %g1 the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { 40006540: c2 07 bf e8 ld [ %fp + -24 ], %g1 40006544: 80 a0 60 01 cmp %g1, 1 40006548: 08 80 00 07 bleu 40006564 4000654c: c0 27 bf e0 clr [ %fp + -32 ] 40006550: 80 a0 60 03 cmp %g1, 3 40006554: 38 80 00 0b bgu,a 40006580 40006558: 82 1e 60 01 xor %i1, 1, %g1 <== NOT EXECUTED 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; 4000655c: 10 80 00 04 b 4000656c 40006560: 82 10 20 01 mov 1, %g1 the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { case CORE_MUTEX_DISCIPLINES_FIFO: case CORE_MUTEX_DISCIPLINES_PRIORITY: the_mutex_attributes.only_owner_release = FALSE; 40006564: 10 80 00 06 b 4000657c 40006568: c0 27 bf e4 clr [ %fp + -28 ] break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_mutex_attributes.only_owner_release = TRUE; 4000656c: 10 80 00 04 b 4000657c 40006570: c2 27 bf e4 st %g1, [ %fp + -28 ] break; } } else { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS; the_mutex_attributes.only_owner_release = FALSE; 40006574: 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; 40006578: c2 27 bf e0 st %g1, [ %fp + -32 ] the_mutex_attributes.only_owner_release = FALSE; } the_mutex_attributes.priority_ceiling = priority_ceiling; mutex_status = _CORE_mutex_Initialize( 4000657c: 82 1e 60 01 xor %i1, 1, %g1 40006580: 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; 40006584: f6 27 bf ec st %i3, [ %fp + -20 ] mutex_status = _CORE_mutex_Initialize( 40006588: 94 60 3f ff subx %g0, -1, %o2 4000658c: 90 04 20 14 add %l0, 0x14, %o0 40006590: 40 00 04 3c call 40007680 <_CORE_mutex_Initialize> 40006594: 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 ) { 40006598: 80 a2 20 06 cmp %o0, 6 4000659c: 12 80 00 17 bne 400065f8 400065a0: 92 10 00 10 mov %l0, %o1 RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 400065a4: 11 10 00 67 sethi %hi(0x40019c00), %o0 <== NOT EXECUTED 400065a8: 90 12 21 58 or %o0, 0x158, %o0 ! 40019d58 <_Semaphore_Information> <== NOT EXECUTED 400065ac: 40 00 07 ac call 4000845c <_Objects_Free> <== NOT EXECUTED 400065b0: b0 10 20 13 mov 0x13, %i0 <== NOT EXECUTED _Semaphore_Free( the_semaphore ); _Thread_Enable_dispatch(); 400065b4: 7f ff ff 95 call 40006408 <_Thread_Enable_dispatch> <== NOT EXECUTED 400065b8: 01 00 00 00 nop <== NOT EXECUTED 400065bc: 81 c7 e0 08 ret <== NOT EXECUTED 400065c0: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_INVALID_PRIORITY; } } else { if ( _Attributes_Is_priority( attribute_set ) ) 400065c4: 80 8e a0 04 btst 4, %i2 400065c8: 22 80 00 04 be,a 400065d8 400065cc: c0 27 bf f4 clr [ %fp + -12 ] the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY; 400065d0: 82 10 20 01 mov 1, %g1 400065d4: c2 27 bf f4 st %g1, [ %fp + -12 ] /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 400065d8: 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; 400065dc: c0 27 bf e0 clr [ %fp + -32 ] the_mutex_attributes.priority_ceiling = PRIORITY_MINIMUM; 400065e0: c0 27 bf ec clr [ %fp + -20 ] _CORE_semaphore_Initialize( 400065e4: 94 10 00 19 mov %i1, %o2 /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 400065e8: 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( 400065ec: 90 04 20 14 add %l0, 0x14, %o0 400065f0: 40 00 04 d3 call 4000793c <_CORE_semaphore_Initialize> 400065f4: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400065f8: 03 10 00 67 sethi %hi(0x40019c00), %g1 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 400065fc: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006600: 88 10 61 58 or %g1, 0x158, %g4 40006604: c4 11 20 10 lduh [ %g4 + 0x10 ], %g2 40006608: 03 00 00 3f sethi %hi(0xfc00), %g1 4000660c: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40006610: 82 08 c0 01 and %g3, %g1, %g1 40006614: 80 a0 40 02 cmp %g1, %g2 40006618: 38 80 00 06 bgu,a 40006630 4000661c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 40006620: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 40006624: 83 28 60 02 sll %g1, 2, %g1 40006628: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Semaphore_Information, &the_semaphore->Object, (Objects_Name) name ); *id = the_semaphore->Object.id; 4000662c: c2 04 20 08 ld [ %l0 + 8 ], %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; 40006630: e8 24 20 0c st %l4, [ %l0 + 0xc ] 40006634: c2 27 00 00 st %g1, [ %i4 ] the_semaphore->Object.id, name, 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); 40006638: 7f ff ff 74 call 40006408 <_Thread_Enable_dispatch> 4000663c: b0 10 20 00 clr %i0 40006640: 81 c7 e0 08 ret 40006644: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 40006648: b0 10 20 0b mov 0xb, %i0 } 4000664c: 81 c7 e0 08 ret 40006650: 81 e8 00 00 restore 40006688 : #endif rtems_status_code rtems_semaphore_delete( rtems_id id ) { 40006688: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 4000668c: 11 10 00 67 sethi %hi(0x40019c00), %o0 40006690: 92 10 00 18 mov %i0, %o1 40006694: 90 12 21 58 or %o0, 0x158, %o0 40006698: 40 00 07 b3 call 40008564 <_Objects_Get> 4000669c: 94 07 bf f4 add %fp, -12, %o2 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 400066a0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400066a4: 80 a0 60 00 cmp %g1, 0 400066a8: 02 80 00 07 be 400066c4 400066ac: b0 10 00 08 mov %o0, %i0 400066b0: 80 a0 60 02 cmp %g1, 2 400066b4: 08 80 00 10 bleu 400066f4 400066b8: b0 10 20 04 mov 4, %i0 400066bc: 81 c7 e0 08 ret <== NOT EXECUTED 400066c0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED 400066c4: 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) ) { 400066c8: 84 88 60 30 andcc %g1, 0x30, %g2 400066cc: 22 80 00 12 be,a 40006714 400066d0: 90 02 20 14 add %o0, 0x14, %o0 if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) && 400066d4: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 400066d8: 80 a0 60 00 cmp %g1, 0 400066dc: 12 80 00 08 bne 400066fc 400066e0: 80 a0 a0 20 cmp %g2, 0x20 400066e4: 02 80 00 07 be 40006700 400066e8: 90 06 20 14 add %i0, 0x14, %o0 !_Attributes_Is_simple_binary_semaphore( the_semaphore->attribute_set ) ) { _Thread_Enable_dispatch(); 400066ec: 7f ff ff da call 40006654 <_Thread_Enable_dispatch> 400066f0: b0 10 20 0c mov 0xc, %i0 400066f4: 81 c7 e0 08 ret 400066f8: 81 e8 00 00 restore return RTEMS_RESOURCE_IN_USE; } _CORE_mutex_Flush( 400066fc: 90 06 20 14 add %i0, 0x14, %o0 40006700: 92 10 20 00 clr %o1 40006704: 40 00 03 db call 40007670 <_CORE_mutex_Flush> 40006708: 94 10 20 04 mov 4, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000670c: 10 80 00 06 b 40006724 40006710: 03 10 00 67 sethi %hi(0x40019c00), %g1 &the_semaphore->Core_control.mutex, SEMAPHORE_MP_OBJECT_WAS_DELETED, CORE_MUTEX_WAS_DELETED ); } else { _CORE_semaphore_Flush( 40006714: 92 10 20 00 clr %o1 40006718: 40 00 04 85 call 4000792c <_CORE_semaphore_Flush> 4000671c: 94 10 20 02 mov 2, %o2 40006720: 03 10 00 67 sethi %hi(0x40019c00), %g1 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40006724: c6 06 20 08 ld [ %i0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006728: 90 10 61 58 or %g1, 0x158, %o0 4000672c: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 40006730: 03 00 00 3f sethi %hi(0xfc00), %g1 40006734: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40006738: 82 08 c0 01 and %g3, %g1, %g1 4000673c: 80 a0 40 02 cmp %g1, %g2 40006740: 18 80 00 05 bgu 40006754 40006744: 92 10 00 18 mov %i0, %o1 information->local_table[ index ] = the_object; 40006748: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000674c: 83 28 60 02 sll %g1, 2, %g1 40006750: 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; 40006754: c0 26 20 0c clr [ %i0 + 0xc ] RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 40006758: 40 00 07 41 call 4000845c <_Objects_Free> 4000675c: b0 10 20 00 clr %i0 0, /* Not used */ 0 /* Not used */ ); } #endif _Thread_Enable_dispatch(); 40006760: 7f ff ff bd call 40006654 <_Thread_Enable_dispatch> 40006764: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006768: 81 c7 e0 08 ret 4000676c: 81 e8 00 00 restore 40006bcc : #endif rtems_status_code rtems_semaphore_flush( rtems_id id ) { 40006bcc: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 40006bd0: 11 10 00 6e sethi %hi(0x4001b800), %o0 40006bd4: 92 10 00 18 mov %i0, %o1 40006bd8: 90 12 20 10 or %o0, 0x10, %o0 40006bdc: 40 00 08 30 call 40008c9c <_Objects_Get> 40006be0: 94 07 bf f4 add %fp, -12, %o2 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40006be4: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006be8: 80 a0 60 00 cmp %g1, 0 40006bec: 22 80 00 07 be,a 40006c08 40006bf0: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40006bf4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40006bf8: 08 80 00 19 bleu 40006c5c <== NOT EXECUTED 40006bfc: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 40006c00: 81 c7 e0 08 ret <== NOT EXECUTED 40006c04: 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) ) { 40006c08: 80 88 60 30 btst 0x30, %g1 40006c0c: 02 80 00 06 be 40006c24 40006c10: 90 02 20 14 add %o0, 0x14, %o0 _CORE_mutex_Flush( 40006c14: 92 10 20 00 clr %o1 40006c18: 40 00 04 64 call 40007da8 <_CORE_mutex_Flush> 40006c1c: 94 10 20 01 mov 1, %o2 40006c20: 30 80 00 04 b,a 40006c30 &the_semaphore->Core_control.mutex, SEND_OBJECT_WAS_DELETED, CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT ); } else { _CORE_semaphore_Flush( 40006c24: 92 10 20 00 clr %o1 <== NOT EXECUTED 40006c28: 40 00 05 0f call 40008064 <_CORE_semaphore_Flush> <== NOT EXECUTED 40006c2c: 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 ) 40006c30: 03 10 00 6e sethi %hi(0x4001b800), %g1 40006c34: c4 00 61 60 ld [ %g1 + 0x160 ], %g2 ! 4001b960 <_Thread_Dispatch_disable_level> 40006c38: b0 10 20 00 clr %i0 40006c3c: 84 00 bf ff add %g2, -1, %g2 40006c40: c4 20 61 60 st %g2, [ %g1 + 0x160 ] 40006c44: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 40006c48: 80 a0 60 00 cmp %g1, 0 40006c4c: 12 80 00 04 bne 40006c5c 40006c50: 01 00 00 00 nop _Thread_Dispatch(); 40006c54: 40 00 0c c7 call 40009f70 <_Thread_Dispatch> 40006c58: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006c5c: 81 c7 e0 08 ret 40006c60: 81 e8 00 00 restore 400067a4 : rtems_status_code rtems_semaphore_obtain( rtems_id id, uint32_t option_set, rtems_interval timeout ) { 400067a4: 9d e3 bf 90 save %sp, -112, %sp Objects_Id id, Objects_Locations *location, ISR_Level *level ) { return (Semaphore_Control *) 400067a8: 11 10 00 67 sethi %hi(0x40019c00), %o0 400067ac: 92 10 00 18 mov %i0, %o1 400067b0: 90 12 21 58 or %o0, 0x158, %o0 400067b4: 94 07 bf f4 add %fp, -12, %o2 400067b8: 40 00 07 4d call 400084ec <_Objects_Get_isr_disable> 400067bc: 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 ) { 400067c0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400067c4: 80 a0 60 00 cmp %g1, 0 400067c8: 02 80 00 07 be 400067e4 400067cc: a0 10 00 08 mov %o0, %l0 400067d0: 80 a0 60 02 cmp %g1, 2 400067d4: 08 80 00 ab bleu 40006a80 400067d8: 90 10 20 04 mov 4, %o0 400067dc: 10 80 00 a9 b 40006a80 <== NOT EXECUTED 400067e0: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 400067e4: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 400067e8: 80 88 60 30 btst 0x30, %g1 400067ec: 02 80 00 7c be 400069dc 400067f0: 03 10 00 67 sethi %hi(0x40019c00), %g1 _CORE_mutex_Seize( 400067f4: 03 10 00 67 sethi %hi(0x40019c00), %g1 400067f8: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> 400067fc: 80 a0 60 00 cmp %g1, 0 40006800: 02 80 00 0e be 40006838 40006804: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006808: 80 8e 60 01 btst 1, %i1 4000680c: 12 80 00 0c bne 4000683c 40006810: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 40006814: 03 10 00 68 sethi %hi(0x4001a000), %g1 40006818: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> 4000681c: 80 a0 60 01 cmp %g1, 1 40006820: 08 80 00 05 bleu 40006834 40006824: 90 10 20 00 clr %o0 40006828: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000682c: 40 00 05 dd call 40007fa0 <_Internal_error_Occurred> <== NOT EXECUTED 40006830: 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; 40006834: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006838: c4 00 63 7c ld [ %g1 + 0x37c ], %g2 ! 40019f7c <_Thread_Executing> CORE_mutex_Control *the_mutex, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 4000683c: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40006840: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40006844: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 40006848: 80 a0 60 00 cmp %g1, 0 4000684c: 22 80 00 33 be,a 40006918 40006850: c2 04 20 70 ld [ %l0 + 0x70 ], %g1 the_mutex->lock = CORE_MUTEX_LOCKED; 40006854: c0 24 20 64 clr [ %l0 + 0x64 ] the_mutex->holder = executing; 40006858: c4 24 20 70 st %g2, [ %l0 + 0x70 ] the_mutex->holder_id = executing->Object.id; 4000685c: 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; 40006860: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 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; 40006864: c2 24 20 74 st %g1, [ %l0 + 0x74 ] the_mutex->nest_count = 1; 40006868: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000686c: 80 a0 e0 02 cmp %g3, 2 40006870: 02 80 00 05 be 40006884 40006874: c2 24 20 68 st %g1, [ %l0 + 0x68 ] 40006878: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000687c: 32 80 00 06 bne,a 40006894 <== NOT EXECUTED 40006880: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40006884: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 40006888: 82 00 60 01 inc %g1 4000688c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40006890: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 40006894: 80 a0 60 03 cmp %g1, 3 40006898: 22 80 00 03 be,a 400068a4 4000689c: c6 04 20 60 ld [ %l0 + 0x60 ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 400068a0: 30 80 00 2e b,a 40006958 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 400068a4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400068a8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400068ac: 12 80 00 03 bne 400068b8 <== NOT EXECUTED 400068b0: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 400068b4: 30 80 00 29 b,a 40006958 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 400068b8: 28 80 00 10 bleu,a 400068f8 <== NOT EXECUTED 400068bc: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400068c0: 05 10 00 67 sethi %hi(0x40019c00), %g2 <== NOT EXECUTED 400068c4: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 40019ea0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400068c8: 82 00 60 01 inc %g1 <== NOT EXECUTED 400068cc: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400068d0: 7f ff ed 7c call 40001ec0 <== NOT EXECUTED 400068d4: 01 00 00 00 nop <== NOT EXECUTED _Thread_Change_priority( 400068d8: d2 04 20 60 ld [ %l0 + 0x60 ], %o1 <== NOT EXECUTED 400068dc: d0 04 20 70 ld [ %l0 + 0x70 ], %o0 <== NOT EXECUTED 400068e0: 40 00 0a e9 call 40009484 <_Thread_Change_priority> <== NOT EXECUTED 400068e4: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 400068e8: 7f ff ff a2 call 40006770 <_Thread_Enable_dispatch> <== NOT EXECUTED 400068ec: 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( 400068f0: 10 80 00 36 b 400069c8 <== NOT EXECUTED 400068f4: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400068f8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400068fc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40006900: c0 24 20 68 clr [ %l0 + 0x68 ] <== NOT EXECUTED _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; the_mutex->lock = CORE_MUTEX_UNLOCKED; 40006904: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 40006908: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000690c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40006910: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40006914: 30 80 00 11 b,a 40006958 <== 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 ) ) { 40006918: 80 a0 40 02 cmp %g1, %g2 4000691c: 12 80 00 13 bne 40006968 40006920: 80 8e 60 01 btst 1, %i1 switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40006924: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 40006928: 80 a0 60 00 cmp %g1, 0 4000692c: 22 80 00 07 be,a 40006948 40006930: c2 04 20 68 ld [ %l0 + 0x68 ], %g1 40006934: 80 a0 60 01 cmp %g1, 1 40006938: 12 80 00 0c bne 40006968 4000693c: 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; 40006940: 10 80 00 05 b 40006954 <== NOT EXECUTED 40006944: 82 10 20 02 mov 2, %g1 <== 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++; 40006948: 82 00 60 01 inc %g1 4000694c: c2 24 20 68 st %g1, [ %l0 + 0x68 ] _ISR_Enable( level ); 40006950: 30 80 00 02 b,a 40006958 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40006954: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40006958: 7f ff ed 5a call 40001ec0 4000695c: 01 00 00 00 nop 40006960: 10 80 00 1a b 400069c8 40006964: 03 10 00 67 sethi %hi(0x40019c00), %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 40006968: 02 80 00 08 be 40006988 4000696c: 23 10 00 67 sethi %hi(0x40019c00), %l1 40006970: 7f ff ed 54 call 40001ec0 40006974: d0 07 bf f0 ld [ %fp + -16 ], %o0 40006978: c4 04 63 7c ld [ %l1 + 0x37c ], %g2 4000697c: 82 10 20 01 mov 1, %g1 40006980: 10 80 00 11 b 400069c4 40006984: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] 40006988: c6 04 63 7c ld [ %l1 + 0x37c ], %g3 RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 4000698c: 82 10 20 01 mov 1, %g1 40006990: 05 10 00 67 sethi %hi(0x40019c00), %g2 40006994: c2 24 20 44 st %g1, [ %l0 + 0x44 ] 40006998: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 4000699c: f0 20 e0 20 st %i0, [ %g3 + 0x20 ] 400069a0: 82 00 60 01 inc %g1 400069a4: a0 04 20 14 add %l0, 0x14, %l0 400069a8: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 400069ac: e0 20 e0 44 st %l0, [ %g3 + 0x44 ] 400069b0: 7f ff ed 44 call 40001ec0 400069b4: d0 07 bf f0 ld [ %fp + -16 ], %o0 400069b8: 90 10 00 10 mov %l0, %o0 400069bc: 40 00 03 5f call 40007738 <_CORE_mutex_Seize_interrupt_blocking> 400069c0: 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( 400069c4: 03 10 00 67 sethi %hi(0x40019c00), %g1 400069c8: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 40019f7c <_Thread_Executing> 400069cc: 40 00 00 62 call 40006b54 <_Semaphore_Translate_core_mutex_return_code> 400069d0: 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 */ } 400069d4: 81 c7 e0 08 ret 400069d8: 91 e8 00 08 restore %g0, %o0, %o0 Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400069dc: e2 00 63 7c ld [ %g1 + 0x37c ], %l1 Watchdog_Interval timeout, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 400069e0: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL; 400069e4: c0 24 60 34 clr [ %l1 + 0x34 ] if ( the_semaphore->count != 0 ) { 400069e8: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 400069ec: 80 a0 60 00 cmp %g1, 0 400069f0: 02 80 00 08 be 40006a10 400069f4: 80 8e 60 01 btst 1, %i1 the_semaphore->count -= 1; 400069f8: 82 00 7f ff add %g1, -1, %g1 400069fc: c2 24 20 5c st %g1, [ %l0 + 0x5c ] _ISR_Enable( level ); 40006a00: 7f ff ed 30 call 40001ec0 40006a04: 01 00 00 00 nop id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, &level ); return _Semaphore_Translate_core_semaphore_return_code( 40006a08: 10 80 00 1b b 40006a74 40006a0c: 03 10 00 67 sethi %hi(0x40019c00), %g1 return; } if ( !wait ) { 40006a10: 02 80 00 07 be 40006a2c 40006a14: 05 10 00 67 sethi %hi(0x40019c00), %g2 _ISR_Enable( level ); 40006a18: 7f ff ed 2a call 40001ec0 40006a1c: 01 00 00 00 nop executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT; 40006a20: 82 10 20 01 mov 1, %g1 ! 1 40006a24: 10 80 00 13 b 40006a70 40006a28: c2 24 60 34 st %g1, [ %l1 + 0x34 ] 40006a2c: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 40006a30: 82 00 60 01 inc %g1 40006a34: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 40006a38: 82 10 20 01 mov 1, %g1 40006a3c: 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; 40006a40: f0 24 60 20 st %i0, [ %l1 + 0x20 ] return; } _Thread_Disable_dispatch(); _Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue ); executing->Wait.queue = &the_semaphore->Wait_queue; 40006a44: a0 04 20 14 add %l0, 0x14, %l0 40006a48: e0 24 60 44 st %l0, [ %l1 + 0x44 ] executing->Wait.id = id; _ISR_Enable( level ); 40006a4c: 7f ff ed 1d call 40001ec0 40006a50: 01 00 00 00 nop _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout ); 40006a54: 90 10 00 10 mov %l0, %o0 40006a58: 92 10 00 1a mov %i2, %o1 40006a5c: 15 10 00 28 sethi %hi(0x4000a000), %o2 40006a60: 40 00 0d 1d call 40009ed4 <_Thread_queue_Enqueue_with_handler> 40006a64: 94 12 a3 6c or %o2, 0x36c, %o2 ! 4000a36c <_Thread_queue_Timeout> _Thread_Enable_dispatch(); 40006a68: 7f ff ff 42 call 40006770 <_Thread_Enable_dispatch> 40006a6c: 01 00 00 00 nop 40006a70: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006a74: c2 00 63 7c ld [ %g1 + 0x37c ], %g1 ! 40019f7c <_Thread_Executing> 40006a78: 40 00 00 41 call 40006b7c <_Semaphore_Translate_core_semaphore_return_code> 40006a7c: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006a80: b0 10 00 08 mov %o0, %i0 40006a84: 81 c7 e0 08 ret 40006a88: 81 e8 00 00 restore 40006ac0 : #endif rtems_status_code rtems_semaphore_release( rtems_id id ) { 40006ac0: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 40006ac4: 11 10 00 67 sethi %hi(0x40019c00), %o0 40006ac8: 92 10 00 18 mov %i0, %o1 40006acc: 90 12 21 58 or %o0, 0x158, %o0 40006ad0: 40 00 06 a5 call 40008564 <_Objects_Get> 40006ad4: 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 ) { 40006ad8: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006adc: 80 a0 60 00 cmp %g1, 0 40006ae0: 22 80 00 07 be,a 40006afc 40006ae4: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40006ae8: 80 a0 60 02 cmp %g1, 2 40006aec: 08 80 00 17 bleu 40006b48 40006af0: 90 10 20 04 mov 4, %o0 40006af4: 10 80 00 15 b 40006b48 <== NOT EXECUTED 40006af8: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 40006afc: 80 88 60 30 btst 0x30, %g1 40006b00: 02 80 00 0b be 40006b2c 40006b04: 90 02 20 14 add %o0, 0x14, %o0 mutex_status = _CORE_mutex_Surrender( 40006b08: 92 10 00 18 mov %i0, %o1 40006b0c: 40 00 03 2d call 400077c0 <_CORE_mutex_Surrender> 40006b10: 94 10 20 00 clr %o2 &the_semaphore->Core_control.mutex, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); 40006b14: 7f ff ff de call 40006a8c <_Thread_Enable_dispatch> 40006b18: a0 10 00 08 mov %o0, %l0 return _Semaphore_Translate_core_mutex_return_code( mutex_status ); 40006b1c: 40 00 00 0e call 40006b54 <_Semaphore_Translate_core_mutex_return_code> 40006b20: 90 10 00 10 mov %l0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006b24: 81 c7 e0 08 ret 40006b28: 91 e8 00 08 restore %g0, %o0, %o0 MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return _Semaphore_Translate_core_mutex_return_code( mutex_status ); } else { semaphore_status = _CORE_semaphore_Surrender( 40006b2c: 92 10 00 18 mov %i0, %o1 40006b30: 40 00 03 92 call 40007978 <_CORE_semaphore_Surrender> 40006b34: 94 10 20 00 clr %o2 &the_semaphore->Core_control.semaphore, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); 40006b38: 7f ff ff d5 call 40006a8c <_Thread_Enable_dispatch> 40006b3c: a0 10 00 08 mov %o0, %l0 return 40006b40: 40 00 00 0f call 40006b7c <_Semaphore_Translate_core_semaphore_return_code> 40006b44: 90 10 00 10 mov %l0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006b48: b0 10 00 08 mov %o0, %i0 40006b4c: 81 c7 e0 08 ret 40006b50: 81 e8 00 00 restore 40017abc : */ void rtems_shutdown_executive( uint32_t result ) { 40017abc: 9d e3 bf 98 save %sp, -104, %sp if ( _System_state_Current != SYSTEM_STATE_SHUTDOWN ) { 40017ac0: 33 10 00 68 sethi %hi(0x4001a000), %i1 40017ac4: c2 06 60 80 ld [ %i1 + 0x80 ], %g1 ! 4001a080 <_System_state_Current> 40017ac8: 80 a0 60 04 cmp %g1, 4 40017acc: 02 80 00 0c be 40017afc 40017ad0: 11 10 00 63 sethi %hi(0x40018c00), %o0 #if defined(__USE_INIT_FINI__) extern void _fini( void ); atexit( _fini ); 40017ad4: 7f ff da 4d call 4000e408 40017ad8: 90 12 21 24 or %o0, 0x124, %o0 ! 40018d24 <_fini> * routine which initialized the system. */ RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) { _Context_Switch( &_Thread_Executing->Registers, &_Thread_BSP_context ); 40017adc: 03 10 00 67 sethi %hi(0x40019c00), %g1 40017ae0: f0 00 63 7c ld [ %g1 + 0x37c ], %i0 ! 40019f7c <_Thread_Executing> 40017ae4: 82 10 20 04 mov 4, %g1 40017ae8: b0 06 20 e0 add %i0, 0xe0, %i0 40017aec: c2 26 60 80 st %g1, [ %i1 + 0x80 ] 40017af0: 33 10 00 67 sethi %hi(0x40019c00), %i1 40017af4: 7f ff cd 49 call 4000b018 <_CPU_Context_switch> 40017af8: 93 ee 62 18 restore %i1, 0x218, %o1 40017afc: 81 c7 e0 08 ret <== NOT EXECUTED 40017b00: 81 e8 00 00 restore <== NOT EXECUTED 4001209c : rtems_status_code rtems_signal_send( Objects_Id id, rtems_signal_set signal_set ) { 4001209c: 9d e3 bf 90 save %sp, -112, %sp 400120a0: 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 ) 400120a4: 80 a6 60 00 cmp %i1, 0 400120a8: 02 80 00 47 be 400121c4 400120ac: 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 ) ) { 400120b0: 80 a2 60 00 cmp %o1, 0 400120b4: 12 80 00 0a bne 400120dc 400120b8: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400120bc: 03 10 00 cc sethi %hi(0x40033000), %g1 400120c0: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40033290 <_Thread_Dispatch_disable_level> 400120c4: 84 00 a0 01 inc %g2 400120c8: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 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; 400120cc: 03 10 00 cc sethi %hi(0x40033000), %g1 400120d0: f0 00 63 6c ld [ %g1 + 0x36c ], %i0 ! 4003336c <_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; 400120d4: 10 80 00 18 b 40012134 400120d8: c0 27 bf f4 clr [ %fp + -12 ] */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 400120dc: 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 ) { 400120e0: 80 a0 a0 04 cmp %g2, 4 400120e4: 18 80 00 0e bgu 4001211c 400120e8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400120ec: 83 32 60 1b srl %o1, 0x1b, %g1 400120f0: 80 a0 60 01 cmp %g1, 1 400120f4: 12 80 00 0a bne 4001211c 400120f8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400120fc: 83 28 a0 02 sll %g2, 2, %g1 40012100: 05 10 00 cc sethi %hi(0x40033000), %g2 40012104: 84 10 a1 f0 or %g2, 0x1f0, %g2 ! 400331f0 <_Objects_Information_table> 40012108: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4001210c: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40012110: 80 a2 20 00 cmp %o0, 0 40012114: 12 80 00 05 bne 40012128 40012118: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4001211c: b0 10 20 00 clr %i0 40012120: 10 80 00 05 b 40012134 40012124: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40012128: 40 00 0d c9 call 4001584c <_Objects_Get> 4001212c: 94 07 bf f4 add %fp, -12, %o2 40012130: b0 10 00 08 mov %o0, %i0 return RTEMS_INVALID_NUMBER; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40012134: c2 07 bf f4 ld [ %fp + -12 ], %g1 40012138: 80 a0 60 00 cmp %g1, 0 4001213c: 22 80 00 07 be,a 40012158 40012140: d2 06 21 6c ld [ %i0 + 0x16c ], %o1 40012144: 80 a0 60 02 cmp %g1, 2 40012148: 08 80 00 1f bleu 400121c4 4001214c: b0 10 20 04 mov 4, %i0 40012150: 81 c7 e0 08 ret <== NOT EXECUTED 40012154: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; if ( ! _ASR_Is_null_handler( asr->handler ) ) { 40012158: c2 02 60 4c ld [ %o1 + 0x4c ], %g1 4001215c: 80 a0 60 00 cmp %g1, 0 40012160: 02 80 00 1b be 400121cc 40012164: 01 00 00 00 nop if ( asr->is_enabled ) { 40012168: c2 02 60 48 ld [ %o1 + 0x48 ], %g1 4001216c: 80 a0 60 00 cmp %g1, 0 40012170: 02 80 00 11 be 400121b4 40012174: 90 10 00 19 mov %i1, %o0 _ASR_Post_signals( signal_set, &asr->signals_posted ); 40012178: 7f ff ff b3 call 40012044 <_ASR_Post_signals> 4001217c: 92 02 60 54 add %o1, 0x54, %o1 the_thread->do_post_task_switch_extension = TRUE; if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 40012180: 03 10 00 cc sethi %hi(0x40033000), %g1 40012184: c2 00 63 54 ld [ %g1 + 0x354 ], %g1 ! 40033354 <_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; 40012188: 84 10 20 01 mov 1, %g2 if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 4001218c: 80 a0 60 00 cmp %g1, 0 40012190: 02 80 00 0b be 400121bc 40012194: c4 26 20 78 st %g2, [ %i0 + 0x78 ] 40012198: 03 10 00 cc sethi %hi(0x40033000), %g1 <== NOT EXECUTED 4001219c: c2 00 63 6c ld [ %g1 + 0x36c ], %g1 ! 4003336c <_Thread_Executing> <== NOT EXECUTED 400121a0: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 400121a4: 12 80 00 06 bne 400121bc <== NOT EXECUTED 400121a8: 03 10 00 cd sethi %hi(0x40033400), %g1 <== NOT EXECUTED _ISR_Signals_to_thread_executing = TRUE; 400121ac: 10 80 00 04 b 400121bc <== NOT EXECUTED 400121b0: c4 20 60 18 st %g2, [ %g1 + 0x18 ] ! 40033418 <_ISR_Signals_to_thread_executing> <== NOT EXECUTED } else { _ASR_Post_signals( signal_set, &asr->signals_pending ); 400121b4: 7f ff ff a4 call 40012044 <_ASR_Post_signals> 400121b8: 92 02 60 58 add %o1, 0x58, %o1 } _Thread_Enable_dispatch(); 400121bc: 7f ff ff ab call 40012068 <_Thread_Enable_dispatch> 400121c0: b0 10 20 00 clr %i0 400121c4: 81 c7 e0 08 ret 400121c8: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 400121cc: 7f ff ff a7 call 40012068 <_Thread_Enable_dispatch> 400121d0: b0 10 20 0b mov 0xb, %i0 return RTEMS_NOT_DEFINED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400121d4: 81 c7 e0 08 ret 400121d8: 81 e8 00 00 restore 40003728 : /* * Check if blown */ boolean rtems_stack_checker_is_blown( void ) { 40003728: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack; 4000372c: 03 10 00 77 sethi %hi(0x4001dc00), %g1 <== NOT EXECUTED 40003730: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001de6c <_Thread_Executing> <== NOT EXECUTED /* * Check for an out of bounds stack pointer */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); 40003734: 7f ff ff d7 call 40003690 <== NOT EXECUTED 40003738: 90 06 20 d0 add %i0, 0xd0, %o0 <== NOT EXECUTED /* * The stack checker must be initialized before the pattern is there * to check. */ if ( Stack_check_Initialized ) { 4000373c: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 40003740: c2 00 62 1c ld [ %g1 + 0x21c ], %g1 ! 4001da1c <== NOT EXECUTED /* * Check for an out of bounds stack pointer */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); 40003744: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * The stack checker must be initialized before the pattern is there * to check. */ if ( Stack_check_Initialized ) { 40003748: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000374c: 02 80 00 0a be 40003774 <== NOT EXECUTED 40003750: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED pattern_ok = (!memcmp( 40003754: d0 06 20 d4 ld [ %i0 + 0xd4 ], %o0 <== NOT EXECUTED 40003758: 13 10 00 76 sethi %hi(0x4001d800), %o1 <== NOT EXECUTED 4000375c: 90 02 20 08 add %o0, 8, %o0 <== NOT EXECUTED 40003760: 92 12 63 a4 or %o1, 0x3a4, %o1 <== NOT EXECUTED 40003764: 40 00 32 89 call 40010188 <== NOT EXECUTED 40003768: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 4000376c: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40003770: 92 60 3f ff subx %g0, -1, %o1 <== NOT EXECUTED } /* * The Stack Pointer and the Pattern Area are OK so return FALSE. */ if ( sp_ok && pattern_ok ) 40003774: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40003778: 02 80 00 06 be 40003790 <== NOT EXECUTED 4000377c: 03 10 00 77 sethi %hi(0x4001dc00), %g1 <== NOT EXECUTED 40003780: 80 a2 60 00 cmp %o1, 0 <== NOT EXECUTED 40003784: 12 80 00 06 bne 4000379c <== NOT EXECUTED 40003788: 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 ); 4000378c: 03 10 00 77 sethi %hi(0x4001dc00), %g1 <== NOT EXECUTED 40003790: d0 00 62 6c ld [ %g1 + 0x26c ], %o0 ! 4001de6c <_Thread_Executing> <== NOT EXECUTED 40003794: 7f ff ff cb call 400036c0 <== NOT EXECUTED 40003798: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return TRUE; } 4000379c: 81 c7 e0 08 ret <== NOT EXECUTED 400037a0: 81 e8 00 00 restore <== NOT EXECUTED 40003674 : } void rtems_stack_checker_report_usage( void ) { rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin ); 40003674: 13 10 00 13 sethi %hi(0x40004c00), %o1 <== NOT EXECUTED 40003678: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000367c: 92 12 61 e4 or %o1, 0x1e4, %o1 <== NOT EXECUTED 40003680: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40003684: 7f ff ff e2 call 4000360c <== NOT EXECUTED 40003688: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000368c: 01 00 00 00 nop 4000360c : void rtems_stack_checker_report_usage_with_plugin( void *context, rtems_printk_plugin_t print ) { 4000360c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (Stack_check_Initialized == 0) 40003610: 03 10 00 76 sethi %hi(0x4001d800), %g1 <== NOT EXECUTED 40003614: c2 00 62 1c ld [ %g1 + 0x21c ], %g1 ! 4001da1c <== NOT EXECUTED 40003618: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000361c: 02 80 00 14 be 4000366c <== NOT EXECUTED 40003620: 23 10 00 76 sethi %hi(0x4001d800), %l1 <== NOT EXECUTED return; print_context = context; print_handler = print; 40003624: 21 10 00 76 sethi %hi(0x4001d800), %l0 <== NOT EXECUTED ) { if (Stack_check_Initialized == 0) return; print_context = context; 40003628: f0 24 62 20 st %i0, [ %l1 + 0x220 ] <== NOT EXECUTED print_handler = print; 4000362c: f2 24 22 24 st %i1, [ %l0 + 0x224 ] <== NOT EXECUTED (*print)( context, "Stack usage by thread\n"); 40003630: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003634: 13 10 00 6c sethi %hi(0x4001b000), %o1 <== NOT EXECUTED 40003638: 9f c6 40 00 call %i1 <== NOT EXECUTED 4000363c: 92 12 61 e0 or %o1, 0x1e0, %o1 ! 4001b1e0 <== NOT EXECUTED (*print)( context, 40003640: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003644: 13 10 00 6c sethi %hi(0x4001b000), %o1 <== NOT EXECUTED 40003648: 9f c6 40 00 call %i1 <== NOT EXECUTED 4000364c: 92 12 61 f8 or %o1, 0x1f8, %o1 ! 4001b1f8 <== 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 ); 40003650: 11 10 00 0d sethi %hi(0x40003400), %o0 <== NOT EXECUTED 40003654: 40 00 17 45 call 40009368 <== NOT EXECUTED 40003658: 90 12 21 04 or %o0, 0x104, %o0 ! 40003504 <== NOT EXECUTED /* dump interrupt stack info if any */ Stack_check_Dump_threads_usage((Thread_Control *) -1); 4000365c: 7f ff ff aa call 40003504 <== NOT EXECUTED 40003660: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED print_context = NULL; 40003664: c0 24 62 20 clr [ %l1 + 0x220 ] <== NOT EXECUTED print_handler = NULL; 40003668: c0 24 22 24 clr [ %l0 + 0x224 ] <== NOT EXECUTED 4000366c: 81 c7 e0 08 ret <== NOT EXECUTED 40003670: 81 e8 00 00 restore <== NOT EXECUTED 400037a4 : */ void rtems_stack_checker_switch_extension( Thread_Control *running, Thread_Control *heir ) { 400037a4: 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; 400037a8: e0 06 20 d4 ld [ %i0 + 0xd4 ], %l0 /* * Check for an out of bounds stack pointer or an overwrite */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); 400037ac: 7f ff ff b9 call 40003690 400037b0: 90 06 20 d0 add %i0, 0xd0, %o0 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; 400037b4: a0 04 20 08 add %l0, 8, %l0 /* * Check for an out of bounds stack pointer or an overwrite */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); 400037b8: a2 10 00 08 mov %o0, %l1 pattern_ok = (!memcmp( pattern, 400037bc: 13 10 00 76 sethi %hi(0x4001d800), %o1 400037c0: 90 10 00 10 mov %l0, %o0 400037c4: 92 12 63 a4 or %o1, 0x3a4, %o1 400037c8: 40 00 32 70 call 40010188 400037cc: 94 10 20 10 mov 0x10, %o2 400037d0: 80 a0 00 08 cmp %g0, %o0 400037d4: b2 60 3f ff subx %g0, -1, %i1 (void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES)); if ( !sp_ok || !pattern_ok ) { 400037d8: 80 a4 60 00 cmp %l1, 0 400037dc: 02 80 00 04 be 400037ec 400037e0: 80 a6 60 00 cmp %i1, 0 400037e4: 12 80 00 04 bne 400037f4 400037e8: 01 00 00 00 nop Stack_check_report_blown_task( running, pattern_ok ); 400037ec: 7f ff ff b5 call 400036c0 <== NOT EXECUTED 400037f0: 81 e8 00 00 restore <== NOT EXECUTED 400037f4: 81 c7 e0 08 ret 400037f8: 81 e8 00 00 restore 40006e14 : const char * rtems_status_text( rtems_status_code status ) { 40006e14: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED return rtems_assoc_name_by_local(rtems_status_assoc, status); 40006e18: 11 10 00 99 sethi %hi(0x40026400), %o0 <== NOT EXECUTED 40006e1c: 90 12 21 e4 or %o0, 0x1e4, %o0 ! 400265e4 <== NOT EXECUTED 40006e20: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40006e24: 40 00 2e 3b call 40012710 <== NOT EXECUTED 40006e28: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40006e2c: 01 00 00 00 nop 40006d64 : */ rtems_status_code rtems_task_delete( Objects_Id id ) { 40006d64: 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 ) ) { 40006d68: 92 96 20 00 orcc %i0, 0, %o1 40006d6c: 12 80 00 0a bne 40006d94 40006d70: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006d74: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006d78: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> 40006d7c: 84 00 a0 01 inc %g2 40006d80: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 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; 40006d84: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006d88: f0 00 63 7c ld [ %g1 + 0x37c ], %i0 ! 40019f7c <_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; 40006d8c: 10 80 00 18 b 40006dec 40006d90: c0 27 bf f4 clr [ %fp + -12 ] */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40006d94: 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 ) { 40006d98: 80 a0 a0 04 cmp %g2, 4 40006d9c: 18 80 00 0e bgu 40006dd4 40006da0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40006da4: 83 32 60 1b srl %o1, 0x1b, %g1 40006da8: 80 a0 60 01 cmp %g1, 1 40006dac: 12 80 00 0a bne 40006dd4 40006db0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40006db4: 83 28 a0 02 sll %g2, 2, %g1 40006db8: 05 10 00 67 sethi %hi(0x40019c00), %g2 40006dbc: 84 10 a2 00 or %g2, 0x200, %g2 ! 40019e00 <_Objects_Information_table> 40006dc0: c2 00 80 01 ld [ %g2 + %g1 ], %g1 40006dc4: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40006dc8: 80 a2 20 00 cmp %o0, 0 40006dcc: 12 80 00 05 bne 40006de0 40006dd0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40006dd4: b0 10 20 00 clr %i0 40006dd8: 10 80 00 05 b 40006dec 40006ddc: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40006de0: 40 00 05 e1 call 40008564 <_Objects_Get> 40006de4: 94 07 bf f4 add %fp, -12, %o2 40006de8: b0 10 00 08 mov %o0, %i0 register Thread_Control *the_thread; Objects_Locations location; Objects_Information *the_information; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40006dec: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006df0: 80 a0 60 00 cmp %g1, 0 40006df4: 02 80 00 06 be 40006e0c 40006df8: 80 a0 60 02 cmp %g1, 2 40006dfc: 08 80 00 0b bleu 40006e28 40006e00: b0 10 20 04 mov 4, %i0 40006e04: 81 c7 e0 08 ret <== NOT EXECUTED 40006e08: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_information = _Objects_Get_information( the_thread->Object.id ); 40006e0c: 7f ff ff c0 call 40006d0c <_Objects_Get_information> 40006e10: d0 06 20 08 ld [ %i0 + 8 ], %o0 if ( !the_information ) { 40006e14: 80 a2 20 00 cmp %o0, 0 40006e18: 12 80 00 06 bne 40006e30 40006e1c: 01 00 00 00 nop _Thread_Enable_dispatch(); 40006e20: 7f ff ff c4 call 40006d30 <_Thread_Enable_dispatch> <== NOT EXECUTED 40006e24: b0 10 20 04 mov 4, %i0 ! 4 <== NOT EXECUTED 40006e28: 81 c7 e0 08 ret 40006e2c: 81 e8 00 00 restore return RTEMS_INVALID_ID; /* This should never happen if _Thread_Get() works right */ } _Thread_Close( the_information, the_thread ); 40006e30: 40 00 0a 3c call 40009720 <_Thread_Close> 40006e34: 92 10 00 18 mov %i0, %o1 40006e38: 7f ff ff b5 call 40006d0c <_Objects_Get_information> 40006e3c: d0 06 20 08 ld [ %i0 + 8 ], %o0 40006e40: 92 10 00 18 mov %i0, %o1 40006e44: 40 00 05 86 call 4000845c <_Objects_Free> 40006e48: b0 10 20 00 clr %i0 0 /* Not used */ ); } #endif _Thread_Enable_dispatch(); 40006e4c: 7f ff ff b9 call 40006d30 <_Thread_Enable_dispatch> 40006e50: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006e54: 81 c7 e0 08 ret 40006e58: 81 e8 00 00 restore 40008670 : rtems_status_code rtems_task_get_note( Objects_Id id, uint32_t notepad, uint32_t *note ) { 40008670: 9d e3 bf 90 save %sp, -112, %sp 40008674: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; if ( !note ) 40008678: 80 a6 a0 00 cmp %i2, 0 4000867c: 02 80 00 43 be 40008788 40008680: 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 ) 40008684: 80 a6 60 0f cmp %i1, 0xf 40008688: 18 80 00 40 bgu 40008788 4000868c: 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 ) || 40008690: 80 a2 60 00 cmp %o1, 0 40008694: 02 80 00 08 be 400086b4 40008698: 03 10 00 7c sethi %hi(0x4001f000), %g1 4000869c: c2 00 62 0c ld [ %g1 + 0x20c ], %g1 ! 4001f20c <_Thread_Executing> 400086a0: c2 00 60 08 ld [ %g1 + 8 ], %g1 400086a4: 80 a2 40 01 cmp %o1, %g1 400086a8: 12 80 00 0a bne 400086d0 400086ac: 83 32 60 18 srl %o1, 0x18, %g1 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; *note = api->Notepads[ notepad ]; 400086b0: 03 10 00 7c sethi %hi(0x4001f000), %g1 <== NOT EXECUTED 400086b4: c2 00 62 0c ld [ %g1 + 0x20c ], %g1 ! 4001f20c <_Thread_Executing> 400086b8: 85 2e 60 02 sll %i1, 2, %g2 400086bc: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 400086c0: c2 00 40 02 ld [ %g1 + %g2 ], %g1 400086c4: c2 26 80 00 st %g1, [ %i2 ] 400086c8: 81 c7 e0 08 ret 400086cc: 91 e8 20 00 restore %g0, 0, %o0 400086d0: 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 ) { 400086d4: 80 a0 a0 04 cmp %g2, 4 400086d8: 18 80 00 06 bgu 400086f0 400086dc: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400086e0: 83 32 60 1b srl %o1, 0x1b, %g1 400086e4: 80 a0 60 01 cmp %g1, 1 400086e8: 02 80 00 05 be 400086fc 400086ec: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400086f0: 90 10 20 00 clr %o0 400086f4: 10 80 00 0e b 4000872c 400086f8: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400086fc: 83 28 a0 02 sll %g2, 2, %g1 40008700: 05 10 00 7c sethi %hi(0x4001f000), %g2 40008704: 84 10 a0 90 or %g2, 0x90, %g2 ! 4001f090 <_Objects_Information_table> 40008708: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000870c: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40008710: 80 a2 20 00 cmp %o0, 0 40008714: 12 80 00 04 bne 40008724 40008718: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4000871c: 10 80 00 04 b 4000872c <== NOT EXECUTED 40008720: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40008724: 40 00 07 2b call 4000a3d0 <_Objects_Get> 40008728: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000872c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008730: 80 a0 60 00 cmp %g1, 0 40008734: 22 80 00 07 be,a 40008750 40008738: c4 02 21 6c ld [ %o0 + 0x16c ], %g2 4000873c: 80 a0 60 02 cmp %g1, 2 40008740: 08 80 00 12 bleu 40008788 40008744: b0 10 20 04 mov 4, %i0 40008748: 81 c7 e0 08 ret <== NOT EXECUTED 4000874c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; *note = api->Notepads[ notepad ]; 40008750: 83 2e 60 02 sll %i1, 2, %g1 40008754: c2 00 80 01 ld [ %g2 + %g1 ], %g1 40008758: c2 26 80 00 st %g1, [ %i2 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000875c: 05 10 00 7c sethi %hi(0x4001f000), %g2 40008760: c2 00 a1 30 ld [ %g2 + 0x130 ], %g1 ! 4001f130 <_Thread_Dispatch_disable_level> 40008764: b0 10 20 00 clr %i0 40008768: 82 00 7f ff add %g1, -1, %g1 4000876c: c2 20 a1 30 st %g1, [ %g2 + 0x130 ] 40008770: c2 00 a1 30 ld [ %g2 + 0x130 ], %g1 40008774: 80 a0 60 00 cmp %g1, 0 40008778: 12 80 00 04 bne 40008788 4000877c: 01 00 00 00 nop _Thread_Dispatch(); 40008780: 40 00 0b c9 call 4000b6a4 <_Thread_Dispatch> 40008784: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008788: 81 c7 e0 08 ret 4000878c: 81 e8 00 00 restore 400074f0 : */ rtems_status_code rtems_task_is_suspended( Objects_Id id ) { 400074f0: 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 ) ) { 400074f4: 92 96 20 00 orcc %i0, 0, %o1 400074f8: 12 80 00 0a bne 40007520 400074fc: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007500: 03 10 00 73 sethi %hi(0x4001cc00), %g1 <== NOT EXECUTED 40007504: c4 00 63 40 ld [ %g1 + 0x340 ], %g2 ! 4001cf40 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40007508: 84 00 a0 01 inc %g2 <== NOT EXECUTED 4000750c: c4 20 63 40 st %g2, [ %g1 + 0x340 ] <== 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; 40007510: 03 10 00 74 sethi %hi(0x4001d000), %g1 <== NOT EXECUTED 40007514: d0 00 60 1c ld [ %g1 + 0x1c ], %o0 ! 4001d01c <_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; 40007518: 10 80 00 19 b 4000757c <== NOT EXECUTED 4000751c: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED 40007520: 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 ) { 40007524: 80 a0 a0 04 cmp %g2, 4 40007528: 18 80 00 06 bgu 40007540 4000752c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007530: 83 32 60 1b srl %o1, 0x1b, %g1 40007534: 80 a0 60 01 cmp %g1, 1 40007538: 02 80 00 05 be 4000754c 4000753c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40007540: 90 10 20 00 clr %o0 <== NOT EXECUTED 40007544: 10 80 00 0e b 4000757c <== NOT EXECUTED 40007548: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000754c: 83 28 a0 02 sll %g2, 2, %g1 40007550: 05 10 00 73 sethi %hi(0x4001cc00), %g2 40007554: 84 10 a2 a0 or %g2, 0x2a0, %g2 ! 4001cea0 <_Objects_Information_table> 40007558: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000755c: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40007560: 80 a2 20 00 cmp %o0, 0 40007564: 12 80 00 04 bne 40007574 40007568: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4000756c: 10 80 00 04 b 4000757c <== NOT EXECUTED 40007570: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007574: 40 00 06 31 call 40008e38 <_Objects_Get> 40007578: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000757c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007580: 80 a0 60 00 cmp %g1, 0 40007584: 22 80 00 07 be,a 400075a0 40007588: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 4000758c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40007590: 08 80 00 09 bleu 400075b4 <== NOT EXECUTED 40007594: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 40007598: 81 c7 e0 08 ret <== NOT EXECUTED 4000759c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { 400075a0: 80 88 60 02 btst 2, %g1 400075a4: 12 80 00 06 bne 400075bc 400075a8: 01 00 00 00 nop _Thread_Enable_dispatch(); 400075ac: 7f ff ff c4 call 400074bc <_Thread_Enable_dispatch> 400075b0: b0 10 20 00 clr %i0 ! 0 400075b4: 81 c7 e0 08 ret 400075b8: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 400075bc: 7f ff ff c0 call 400074bc <_Thread_Enable_dispatch> 400075c0: b0 10 20 0f mov 0xf, %i0 return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400075c4: 81 c7 e0 08 ret 400075c8: 81 e8 00 00 restore 40007b44 : rtems_status_code rtems_task_restart( Objects_Id id, uint32_t argument ) { 40007b44: 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 ) ) { 40007b48: 92 96 20 00 orcc %i0, 0, %o1 40007b4c: 12 80 00 0a bne 40007b74 40007b50: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007b54: 03 10 00 75 sethi %hi(0x4001d400), %g1 40007b58: c4 00 60 60 ld [ %g1 + 0x60 ], %g2 ! 4001d460 <_Thread_Dispatch_disable_level> 40007b5c: 84 00 a0 01 inc %g2 40007b60: c4 20 60 60 st %g2, [ %g1 + 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; 40007b64: 03 10 00 75 sethi %hi(0x4001d400), %g1 40007b68: d0 00 61 3c ld [ %g1 + 0x13c ], %o0 ! 4001d53c <_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; 40007b6c: 10 80 00 19 b 40007bd0 40007b70: c0 27 bf f4 clr [ %fp + -12 ] 40007b74: 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 ) { 40007b78: 80 a0 a0 04 cmp %g2, 4 40007b7c: 18 80 00 06 bgu 40007b94 40007b80: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007b84: 83 32 60 1b srl %o1, 0x1b, %g1 40007b88: 80 a0 60 01 cmp %g1, 1 40007b8c: 02 80 00 05 be 40007ba0 40007b90: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40007b94: 90 10 20 00 clr %o0 40007b98: 10 80 00 0e b 40007bd0 40007b9c: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007ba0: 83 28 a0 02 sll %g2, 2, %g1 40007ba4: 05 10 00 74 sethi %hi(0x4001d000), %g2 40007ba8: 84 10 a3 c0 or %g2, 0x3c0, %g2 ! 4001d3c0 <_Objects_Information_table> 40007bac: c2 00 80 01 ld [ %g2 + %g1 ], %g1 40007bb0: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40007bb4: 80 a2 20 00 cmp %o0, 0 40007bb8: 12 80 00 04 bne 40007bc8 40007bbc: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40007bc0: 10 80 00 04 b 40007bd0 <== NOT EXECUTED 40007bc4: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007bc8: 40 00 05 f8 call 400093a8 <_Objects_Get> 40007bcc: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007bd0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007bd4: 80 a0 60 00 cmp %g1, 0 40007bd8: 22 80 00 07 be,a 40007bf4 40007bdc: 94 10 00 19 mov %i1, %o2 40007be0: 80 a0 60 02 cmp %g1, 2 40007be4: 08 80 00 0b bleu 40007c10 40007be8: b0 10 20 04 mov 4, %i0 40007bec: 81 c7 e0 08 ret <== NOT EXECUTED 40007bf0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Restart( the_thread, NULL, argument ) ) { 40007bf4: 40 00 0d 6e call 4000b1ac <_Thread_Restart> 40007bf8: 92 10 20 00 clr %o1 40007bfc: 80 a2 20 00 cmp %o0, 0 40007c00: 02 80 00 06 be 40007c18 40007c04: 01 00 00 00 nop _Thread_Enable_dispatch(); 40007c08: 7f ff ff c2 call 40007b10 <_Thread_Enable_dispatch> 40007c0c: b0 10 20 00 clr %i0 ! 0 40007c10: 81 c7 e0 08 ret 40007c14: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 40007c18: 7f ff ff be call 40007b10 <_Thread_Enable_dispatch> 40007c1c: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007c20: 81 c7 e0 08 ret 40007c24: 81 e8 00 00 restore 40008510 : */ rtems_status_code rtems_task_resume( Objects_Id id ) { 40008510: 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 ) ) { 40008514: 92 96 20 00 orcc %i0, 0, %o1 40008518: 12 80 00 0a bne 40008540 4000851c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008520: 03 10 00 98 sethi %hi(0x40026000), %g1 40008524: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 400263b0 <_Thread_Dispatch_disable_level> 40008528: 84 00 a0 01 inc %g2 4000852c: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 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; 40008530: 03 10 00 99 sethi %hi(0x40026400), %g1 40008534: d0 00 60 8c ld [ %g1 + 0x8c ], %o0 ! 4002648c <_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; 40008538: 10 80 00 19 b 4000859c 4000853c: c0 27 bf f4 clr [ %fp + -12 ] 40008540: 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 ) { 40008544: 80 a0 a0 04 cmp %g2, 4 40008548: 18 80 00 06 bgu 40008560 4000854c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40008550: 83 32 60 1b srl %o1, 0x1b, %g1 40008554: 80 a0 60 01 cmp %g1, 1 40008558: 02 80 00 05 be 4000856c 4000855c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40008560: 90 10 20 00 clr %o0 40008564: 10 80 00 0e b 4000859c 40008568: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000856c: 83 28 a0 02 sll %g2, 2, %g1 40008570: 05 10 00 98 sethi %hi(0x40026000), %g2 40008574: 84 10 a3 10 or %g2, 0x310, %g2 ! 40026310 <_Objects_Information_table> 40008578: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000857c: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40008580: 80 a2 20 00 cmp %o0, 0 40008584: 12 80 00 04 bne 40008594 40008588: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4000858c: 10 80 00 04 b 4000859c <== NOT EXECUTED 40008590: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40008594: 40 00 06 d2 call 4000a0dc <_Objects_Get> 40008598: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000859c: c2 07 bf f4 ld [ %fp + -12 ], %g1 400085a0: 80 a0 60 00 cmp %g1, 0 400085a4: 22 80 00 07 be,a 400085c0 400085a8: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 400085ac: 80 a0 60 02 cmp %g1, 2 400085b0: 08 80 00 0b bleu 400085dc 400085b4: b0 10 20 04 mov 4, %i0 400085b8: 81 c7 e0 08 ret <== NOT EXECUTED 400085bc: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _States_Is_suspended( the_thread->current_state ) ) { 400085c0: 80 88 60 02 btst 2, %g1 400085c4: 02 80 00 08 be 400085e4 400085c8: 92 10 20 01 mov 1, %o1 _Thread_Resume( the_thread, TRUE ); 400085cc: 40 00 0e 5b call 4000bf38 <_Thread_Resume> 400085d0: b0 10 20 00 clr %i0 _Thread_Enable_dispatch(); 400085d4: 7f ff ff c2 call 400084dc <_Thread_Enable_dispatch> 400085d8: 01 00 00 00 nop 400085dc: 81 c7 e0 08 ret 400085e0: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 400085e4: 7f ff ff be call 400084dc <_Thread_Enable_dispatch> 400085e8: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400085ec: 81 c7 e0 08 ret 400085f0: 81 e8 00 00 restore 4000895c : rtems_status_code rtems_task_set_note( Objects_Id id, uint32_t notepad, uint32_t note ) { 4000895c: 9d e3 bf 90 save %sp, -112, %sp 40008960: 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 ) 40008964: 80 a6 60 0f cmp %i1, 0xf 40008968: 18 80 00 3e bgu 40008a60 4000896c: 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 ) || 40008970: 80 a2 60 00 cmp %o1, 0 40008974: 02 80 00 08 be 40008994 40008978: 03 10 00 7c sethi %hi(0x4001f000), %g1 4000897c: c2 00 62 0c ld [ %g1 + 0x20c ], %g1 ! 4001f20c <_Thread_Executing> 40008980: c2 00 60 08 ld [ %g1 + 8 ], %g1 40008984: 80 a2 40 01 cmp %o1, %g1 40008988: 12 80 00 09 bne 400089ac 4000898c: 83 32 60 18 srl %o1, 0x18, %g1 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; api->Notepads[ notepad ] = note; 40008990: 03 10 00 7c sethi %hi(0x4001f000), %g1 <== NOT EXECUTED 40008994: c2 00 62 0c ld [ %g1 + 0x20c ], %g1 ! 4001f20c <_Thread_Executing> <== NOT EXECUTED 40008998: 85 2e 60 02 sll %i1, 2, %g2 <== NOT EXECUTED 4000899c: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 <== NOT EXECUTED 400089a0: f4 20 40 02 st %i2, [ %g1 + %g2 ] <== NOT EXECUTED 400089a4: 81 c7 e0 08 ret <== NOT EXECUTED 400089a8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 400089ac: 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 ) { 400089b0: 80 a0 a0 04 cmp %g2, 4 400089b4: 18 80 00 06 bgu 400089cc 400089b8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400089bc: 83 32 60 1b srl %o1, 0x1b, %g1 400089c0: 80 a0 60 01 cmp %g1, 1 400089c4: 02 80 00 05 be 400089d8 400089c8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400089cc: 90 10 20 00 clr %o0 400089d0: 10 80 00 0e b 40008a08 400089d4: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400089d8: 83 28 a0 02 sll %g2, 2, %g1 400089dc: 05 10 00 7c sethi %hi(0x4001f000), %g2 400089e0: 84 10 a0 90 or %g2, 0x90, %g2 ! 4001f090 <_Objects_Information_table> 400089e4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 400089e8: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 400089ec: 80 a2 20 00 cmp %o0, 0 400089f0: 12 80 00 04 bne 40008a00 400089f4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400089f8: 10 80 00 04 b 40008a08 <== NOT EXECUTED 400089fc: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40008a00: 40 00 06 74 call 4000a3d0 <_Objects_Get> 40008a04: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40008a08: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008a0c: 80 a0 60 00 cmp %g1, 0 40008a10: 22 80 00 07 be,a 40008a2c 40008a14: c4 02 21 6c ld [ %o0 + 0x16c ], %g2 40008a18: 80 a0 60 02 cmp %g1, 2 40008a1c: 08 80 00 11 bleu 40008a60 40008a20: b0 10 20 04 mov 4, %i0 40008a24: 81 c7 e0 08 ret <== NOT EXECUTED 40008a28: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; api->Notepads[ notepad ] = note; 40008a2c: 83 2e 60 02 sll %i1, 2, %g1 40008a30: 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 ) 40008a34: 05 10 00 7c sethi %hi(0x4001f000), %g2 40008a38: c2 00 a1 30 ld [ %g2 + 0x130 ], %g1 ! 4001f130 <_Thread_Dispatch_disable_level> 40008a3c: b0 10 20 00 clr %i0 40008a40: 82 00 7f ff add %g1, -1, %g1 40008a44: c2 20 a1 30 st %g1, [ %g2 + 0x130 ] 40008a48: c2 00 a1 30 ld [ %g2 + 0x130 ], %g1 40008a4c: 80 a0 60 00 cmp %g1, 0 40008a50: 12 80 00 04 bne 40008a60 40008a54: 01 00 00 00 nop _Thread_Dispatch(); 40008a58: 40 00 0b 13 call 4000b6a4 <_Thread_Dispatch> 40008a5c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008a60: 81 c7 e0 08 ret 40008a64: 81 e8 00 00 restore 4000b4bc : rtems_status_code rtems_task_set_priority( Objects_Id id, rtems_task_priority new_priority, rtems_task_priority *old_priority ) { 4000b4bc: 9d e3 bf 90 save %sp, -112, %sp register Thread_Control *the_thread; Objects_Locations location; if ( new_priority != RTEMS_CURRENT_PRIORITY && 4000b4c0: 80 a6 60 00 cmp %i1, 0 4000b4c4: 02 80 00 06 be 4000b4dc 4000b4c8: 92 10 00 18 mov %i0, %o1 4000b4cc: 82 06 7f ff add %i1, -1, %g1 4000b4d0: 80 a0 60 fe cmp %g1, 0xfe 4000b4d4: 18 80 00 49 bgu 4000b5f8 4000b4d8: b0 10 20 13 mov 0x13, %i0 !_RTEMS_tasks_Priority_is_valid( new_priority ) ) return RTEMS_INVALID_PRIORITY; if ( !old_priority ) 4000b4dc: 80 a6 a0 00 cmp %i2, 0 4000b4e0: 02 80 00 46 be 4000b5f8 4000b4e4: 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 ) ) { 4000b4e8: 80 a2 60 00 cmp %o1, 0 4000b4ec: 12 80 00 0a bne 4000b514 4000b4f0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000b4f4: 03 10 00 a1 sethi %hi(0x40028400), %g1 4000b4f8: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 400286a0 <_Thread_Dispatch_disable_level> 4000b4fc: 84 00 a0 01 inc %g2 4000b500: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 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; 4000b504: 03 10 00 a1 sethi %hi(0x40028400), %g1 4000b508: d0 00 63 7c ld [ %g1 + 0x37c ], %o0 ! 4002877c <_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; 4000b50c: 10 80 00 19 b 4000b570 4000b510: c0 27 bf f4 clr [ %fp + -12 ] 4000b514: 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 ) { 4000b518: 80 a0 a0 04 cmp %g2, 4 4000b51c: 18 80 00 06 bgu 4000b534 4000b520: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000b524: 83 32 60 1b srl %o1, 0x1b, %g1 4000b528: 80 a0 60 01 cmp %g1, 1 4000b52c: 02 80 00 05 be 4000b540 4000b530: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4000b534: 90 10 20 00 clr %o0 4000b538: 10 80 00 0e b 4000b570 4000b53c: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000b540: 83 28 a0 02 sll %g2, 2, %g1 4000b544: 05 10 00 a1 sethi %hi(0x40028400), %g2 4000b548: 84 10 a2 00 or %g2, 0x200, %g2 ! 40028600 <_Objects_Information_table> 4000b54c: c2 00 80 01 ld [ %g2 + %g1 ], %g1 4000b550: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 4000b554: 80 a2 20 00 cmp %o0, 0 4000b558: 12 80 00 04 bne 4000b568 4000b55c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 4000b560: 10 80 00 04 b 4000b570 <== NOT EXECUTED 4000b564: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000b568: 40 00 06 16 call 4000cdc0 <_Objects_Get> 4000b56c: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000b570: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000b574: 80 a0 60 00 cmp %g1, 0 4000b578: 22 80 00 07 be,a 4000b594 4000b57c: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 4000b580: 80 a0 60 02 cmp %g1, 2 4000b584: 08 80 00 1d bleu 4000b5f8 4000b588: b0 10 20 04 mov 4, %i0 4000b58c: 81 c7 e0 08 ret <== NOT EXECUTED 4000b590: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED return RTEMS_INVALID_ID; case OBJECTS_LOCAL: /* XXX convert from core priority */ *old_priority = the_thread->current_priority; if ( new_priority != RTEMS_CURRENT_PRIORITY ) { 4000b594: 80 a6 60 00 cmp %i1, 0 4000b598: 02 80 00 0d be 4000b5cc 4000b59c: c2 26 80 00 st %g1, [ %i2 ] the_thread->real_priority = new_priority; if ( the_thread->resource_count == 0 || 4000b5a0: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 4000b5a4: 80 a0 60 00 cmp %g1, 0 4000b5a8: 02 80 00 06 be 4000b5c0 4000b5ac: f2 22 20 18 st %i1, [ %o0 + 0x18 ] 4000b5b0: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 4000b5b4: 80 a0 40 19 cmp %g1, %i1 4000b5b8: 08 80 00 05 bleu 4000b5cc 4000b5bc: 01 00 00 00 nop the_thread->current_priority > new_priority ) _Thread_Change_priority( the_thread, new_priority, FALSE ); 4000b5c0: 92 10 00 19 mov %i1, %o1 4000b5c4: 40 00 09 c7 call 4000dce0 <_Thread_Change_priority> 4000b5c8: 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 ) 4000b5cc: 03 10 00 a1 sethi %hi(0x40028400), %g1 4000b5d0: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 400286a0 <_Thread_Dispatch_disable_level> 4000b5d4: b0 10 20 00 clr %i0 4000b5d8: 84 00 bf ff add %g2, -1, %g2 4000b5dc: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 4000b5e0: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 4000b5e4: 80 a0 60 00 cmp %g1, 0 4000b5e8: 12 80 00 04 bne 4000b5f8 4000b5ec: 01 00 00 00 nop _Thread_Dispatch(); 4000b5f0: 40 00 0a e8 call 4000e190 <_Thread_Dispatch> 4000b5f4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000b5f8: 81 c7 e0 08 ret 4000b5fc: 81 e8 00 00 restore 40006fa4 : rtems_status_code rtems_task_start( rtems_id id, rtems_task_entry entry_point, rtems_task_argument argument ) { 40006fa4: 9d e3 bf 90 save %sp, -112, %sp 40006fa8: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; if ( entry_point == NULL ) 40006fac: 80 a6 60 00 cmp %i1, 0 40006fb0: 02 80 00 36 be 40007088 40006fb4: 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 ) ) { 40006fb8: 80 a2 60 00 cmp %o1, 0 40006fbc: 12 80 00 0a bne 40006fe4 40006fc0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006fc4: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006fc8: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 40019ea0 <_Thread_Dispatch_disable_level> 40006fcc: 84 00 a0 01 inc %g2 40006fd0: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 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; 40006fd4: 03 10 00 67 sethi %hi(0x40019c00), %g1 40006fd8: d0 00 63 7c ld [ %g1 + 0x37c ], %o0 ! 40019f7c <_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; 40006fdc: 10 80 00 19 b 40007040 40006fe0: c0 27 bf f4 clr [ %fp + -12 ] 40006fe4: 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 ) { 40006fe8: 80 a0 a0 04 cmp %g2, 4 40006fec: 18 80 00 06 bgu 40007004 40006ff0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40006ff4: 83 32 60 1b srl %o1, 0x1b, %g1 40006ff8: 80 a0 60 01 cmp %g1, 1 40006ffc: 02 80 00 05 be 40007010 40007000: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40007004: 90 10 20 00 clr %o0 40007008: 10 80 00 0e b 40007040 4000700c: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007010: 83 28 a0 02 sll %g2, 2, %g1 40007014: 05 10 00 67 sethi %hi(0x40019c00), %g2 40007018: 84 10 a2 00 or %g2, 0x200, %g2 ! 40019e00 <_Objects_Information_table> 4000701c: c2 00 80 01 ld [ %g2 + %g1 ], %g1 40007020: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40007024: 80 a2 20 00 cmp %o0, 0 40007028: 12 80 00 04 bne 40007038 4000702c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 40007030: 10 80 00 04 b 40007040 <== NOT EXECUTED 40007034: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007038: 40 00 05 4b call 40008564 <_Objects_Get> 4000703c: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007040: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007044: 80 a0 60 00 cmp %g1, 0 40007048: 22 80 00 07 be,a 40007064 4000704c: 94 10 00 19 mov %i1, %o2 40007050: 80 a0 60 02 cmp %g1, 2 40007054: 08 80 00 0d bleu 40007088 40007058: b0 10 20 04 mov 4, %i0 4000705c: 81 c7 e0 08 ret <== NOT EXECUTED 40007060: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Start( 40007064: 98 10 00 1a mov %i2, %o4 40007068: 92 10 20 00 clr %o1 4000706c: 40 00 0d d8 call 4000a7cc <_Thread_Start> 40007070: 96 10 20 00 clr %o3 40007074: 80 a2 20 00 cmp %o0, 0 40007078: 02 80 00 06 be 40007090 4000707c: 01 00 00 00 nop the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) { _Thread_Enable_dispatch(); 40007080: 7f ff ff bc call 40006f70 <_Thread_Enable_dispatch> 40007084: b0 10 20 00 clr %i0 ! 0 40007088: 81 c7 e0 08 ret 4000708c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 40007090: 7f ff ff b8 call 40006f70 <_Thread_Enable_dispatch> 40007094: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007098: 81 c7 e0 08 ret 4000709c: 81 e8 00 00 restore 40008758 : */ rtems_status_code rtems_task_suspend( Objects_Id id ) { 40008758: 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 ) ) { 4000875c: 92 96 20 00 orcc %i0, 0, %o1 40008760: 12 80 00 0a bne 40008788 40008764: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008768: 03 10 00 98 sethi %hi(0x40026000), %g1 4000876c: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 400263b0 <_Thread_Dispatch_disable_level> 40008770: 84 00 a0 01 inc %g2 40008774: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 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; 40008778: 03 10 00 99 sethi %hi(0x40026400), %g1 4000877c: d0 00 60 8c ld [ %g1 + 0x8c ], %o0 ! 4002648c <_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; 40008780: 10 80 00 19 b 400087e4 40008784: c0 27 bf f4 clr [ %fp + -12 ] 40008788: 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 ) { 4000878c: 80 a0 a0 04 cmp %g2, 4 40008790: 18 80 00 06 bgu 400087a8 40008794: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40008798: 83 32 60 1b srl %o1, 0x1b, %g1 4000879c: 80 a0 60 01 cmp %g1, 1 400087a0: 02 80 00 05 be 400087b4 400087a4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400087a8: 90 10 20 00 clr %o0 400087ac: 10 80 00 0e b 400087e4 400087b0: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400087b4: 83 28 a0 02 sll %g2, 2, %g1 400087b8: 05 10 00 98 sethi %hi(0x40026000), %g2 400087bc: 84 10 a3 10 or %g2, 0x310, %g2 ! 40026310 <_Objects_Information_table> 400087c0: c2 00 80 01 ld [ %g2 + %g1 ], %g1 400087c4: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 400087c8: 80 a2 20 00 cmp %o0, 0 400087cc: 12 80 00 04 bne 400087dc 400087d0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 400087d4: 10 80 00 04 b 400087e4 <== NOT EXECUTED 400087d8: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400087dc: 40 00 06 40 call 4000a0dc <_Objects_Get> 400087e0: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 400087e4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400087e8: 80 a0 60 00 cmp %g1, 0 400087ec: 22 80 00 07 be,a 40008808 400087f0: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 400087f4: 80 a0 60 02 cmp %g1, 2 400087f8: 08 80 00 0b bleu 40008824 400087fc: b0 10 20 04 mov 4, %i0 40008800: 81 c7 e0 08 ret <== NOT EXECUTED 40008804: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { 40008808: 80 88 60 02 btst 2, %g1 4000880c: 12 80 00 08 bne 4000882c 40008810: 01 00 00 00 nop _Thread_Suspend( the_thread ); 40008814: 40 00 0e f5 call 4000c3e8 <_Thread_Suspend> 40008818: b0 10 20 00 clr %i0 ! 0 _Thread_Enable_dispatch(); 4000881c: 7f ff ff c2 call 40008724 <_Thread_Enable_dispatch> 40008820: 01 00 00 00 nop 40008824: 81 c7 e0 08 ret 40008828: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 4000882c: 7f ff ff be call 40008724 <_Thread_Enable_dispatch> 40008830: b0 10 20 0f mov 0xf, %i0 return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008834: 81 c7 e0 08 ret 40008838: 81 e8 00 00 restore 40018fc4 : rtems_status_code rtems_task_variable_add( rtems_id tid, void **ptr, void (*dtor)(void *) ) { 40018fc4: 9d e3 bf 90 save %sp, -112, %sp 40018fc8: 92 10 00 18 mov %i0, %o1 Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *new; if ( !ptr ) 40018fcc: 80 a6 60 00 cmp %i1, 0 40018fd0: 02 80 00 32 be 40019098 40018fd4: 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 ) ) { 40018fd8: 80 a2 60 00 cmp %o1, 0 40018fdc: 12 80 00 0a bne 40019004 40018fe0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40018fe4: 03 10 00 e9 sethi %hi(0x4003a400), %g1 40018fe8: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 4003a760 <_Thread_Dispatch_disable_level> 40018fec: 84 00 a0 01 inc %g2 40018ff0: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 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; 40018ff4: 03 10 00 ea sethi %hi(0x4003a800), %g1 40018ff8: f0 00 60 3c ld [ %g1 + 0x3c ], %i0 ! 4003a83c <_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; 40018ffc: 10 80 00 18 b 4001905c 40019000: c0 27 bf f4 clr [ %fp + -12 ] 40019004: 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 ) { 40019008: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001900c: 18 80 00 0e bgu 40019044 <== NOT EXECUTED 40019010: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40019014: 83 32 60 1b srl %o1, 0x1b, %g1 <== NOT EXECUTED 40019018: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001901c: 12 80 00 0a bne 40019044 <== NOT EXECUTED 40019020: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40019024: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 40019028: 05 10 00 e9 sethi %hi(0x4003a400), %g2 <== NOT EXECUTED 4001902c: 84 10 a2 c0 or %g2, 0x2c0, %g2 ! 4003a6c0 <_Objects_Information_table> <== NOT EXECUTED 40019030: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 40019034: d0 00 60 04 ld [ %g1 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 40019038: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001903c: 12 80 00 05 bne 40019050 <== NOT EXECUTED 40019040: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 40019044: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019048: 10 80 00 05 b 4001905c <== NOT EXECUTED 4001904c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40019050: 7f ff ca e4 call 4000bbe0 <_Objects_Get> <== NOT EXECUTED 40019054: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40019058: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 4001905c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40019060: 80 a0 60 00 cmp %g1, 0 40019064: 22 80 00 0f be,a 400190a0 40019068: c4 06 21 7c ld [ %i0 + 0x17c ], %g2 4001906c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40019070: 08 80 00 0a bleu 40019098 <== NOT EXECUTED 40019074: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 40019078: 81 c7 e0 08 ret <== NOT EXECUTED 4001907c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED * Figure out if the variable is already in this task's list. */ tvp = the_thread->task_variables; while (tvp) { if (tvp->ptr == ptr) { 40019080: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 40019084: 32 80 00 07 bne,a 400190a0 <== NOT EXECUTED 40019088: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED tvp->dtor = dtor; 4001908c: f4 20 a0 10 st %i2, [ %g2 + 0x10 ] <== NOT EXECUTED _Thread_Enable_dispatch(); 40019090: 7f ff ff c0 call 40018f90 <_Thread_Enable_dispatch> <== NOT EXECUTED 40019094: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019098: 81 c7 e0 08 ret <== NOT EXECUTED 4001909c: 81 e8 00 00 restore <== NOT EXECUTED /* * Figure out if the variable is already in this task's list. */ tvp = the_thread->task_variables; while (tvp) { 400190a0: 80 a0 a0 00 cmp %g2, 0 400190a4: 32 bf ff f7 bne,a 40019080 400190a8: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 400190ac: 11 10 00 e9 sethi %hi(0x4003a400), %o0 400190b0: 92 10 20 14 mov 0x14, %o1 400190b4: 7f ff c8 2f call 4000b170 <_Heap_Allocate> 400190b8: 90 12 23 ac or %o0, 0x3ac, %o0 * Now allocate memory for this task variable. */ new = (rtems_task_variable_t *) _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { 400190bc: 80 a2 20 00 cmp %o0, 0 400190c0: 32 80 00 06 bne,a 400190d8 400190c4: c4 06 21 7c ld [ %i0 + 0x17c ], %g2 _Thread_Enable_dispatch(); 400190c8: 7f ff ff b2 call 40018f90 <_Thread_Enable_dispatch> <== NOT EXECUTED 400190cc: b0 10 20 1a mov 0x1a, %i0 <== NOT EXECUTED 400190d0: 81 c7 e0 08 ret <== NOT EXECUTED 400190d4: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_NO_MEMORY; } new->gval = *ptr; 400190d8: 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; 400190dc: 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; 400190e0: c2 22 20 08 st %g1, [ %o0 + 8 ] new->ptr = ptr; 400190e4: f2 22 20 04 st %i1, [ %o0 + 4 ] new->dtor = dtor; 400190e8: f4 22 20 10 st %i2, [ %o0 + 0x10 ] new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; 400190ec: c4 22 00 00 st %g2, [ %o0 ] the_thread->task_variables = new; _Thread_Enable_dispatch(); 400190f0: 7f ff ff a8 call 40018f90 <_Thread_Enable_dispatch> 400190f4: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400190f8: 81 c7 e0 08 ret 400190fc: 81 e8 00 00 restore 40019134 : rtems_status_code rtems_task_variable_delete( rtems_id tid, void **ptr ) { 40019134: 9d e3 bf 90 save %sp, -112, %sp 40019138: 92 10 00 18 mov %i0, %o1 Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *prev; if ( !ptr ) 4001913c: 80 a6 60 00 cmp %i1, 0 40019140: 02 80 00 52 be 40019288 40019144: 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 ) ) { 40019148: 80 a2 60 00 cmp %o1, 0 4001914c: 12 80 00 0a bne 40019174 40019150: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40019154: 03 10 00 e9 sethi %hi(0x4003a400), %g1 40019158: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 4003a760 <_Thread_Dispatch_disable_level> 4001915c: 84 00 a0 01 inc %g2 40019160: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 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; 40019164: 03 10 00 ea sethi %hi(0x4003a800), %g1 40019168: d0 00 60 3c ld [ %g1 + 0x3c ], %o0 ! 4003a83c <_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; 4001916c: 10 80 00 19 b 400191d0 40019170: c0 27 bf f4 clr [ %fp + -12 ] 40019174: 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 ) { 40019178: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001917c: 18 80 00 06 bgu 40019194 <== NOT EXECUTED 40019180: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40019184: 83 32 60 1b srl %o1, 0x1b, %g1 <== NOT EXECUTED 40019188: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001918c: 02 80 00 05 be 400191a0 <== NOT EXECUTED 40019190: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 40019194: 90 10 20 00 clr %o0 <== NOT EXECUTED 40019198: 10 80 00 0e b 400191d0 <== NOT EXECUTED 4001919c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400191a0: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 400191a4: 05 10 00 e9 sethi %hi(0x4003a400), %g2 <== NOT EXECUTED 400191a8: 84 10 a2 c0 or %g2, 0x2c0, %g2 ! 4003a6c0 <_Objects_Information_table> <== NOT EXECUTED 400191ac: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 400191b0: d0 00 60 04 ld [ %g1 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 400191b4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400191b8: 12 80 00 04 bne 400191c8 <== NOT EXECUTED 400191bc: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 400191c0: 10 80 00 04 b 400191d0 <== NOT EXECUTED 400191c4: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400191c8: 7f ff ca 86 call 4000bbe0 <_Objects_Get> <== NOT EXECUTED 400191cc: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; prev = NULL; the_thread = _Thread_Get (tid, &location); switch (location) { 400191d0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400191d4: 80 a0 60 00 cmp %g1, 0 400191d8: 22 80 00 07 be,a 400191f4 400191dc: f0 02 21 7c ld [ %o0 + 0x17c ], %i0 400191e0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400191e4: 08 80 00 29 bleu 40019288 <== NOT EXECUTED 400191e8: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 400191ec: 81 c7 e0 08 ret <== NOT EXECUTED 400191f0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; 400191f4: 10 80 00 28 b 40019294 400191f8: 84 10 20 00 clr %g2 while (tvp) { if (tvp->ptr == ptr) { 400191fc: 80 a0 40 19 cmp %g1, %i1 40019200: 32 80 00 24 bne,a 40019290 40019204: 84 10 00 18 mov %i0, %g2 <== NOT EXECUTED if (prev) 40019208: 80 a0 a0 00 cmp %g2, 0 4001920c: 02 80 00 04 be 4001921c 40019210: c2 06 00 00 ld [ %i0 ], %g1 prev->next = tvp->next; 40019214: 10 80 00 03 b 40019220 <== NOT EXECUTED 40019218: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; 4001921c: c2 22 21 7c st %g1, [ %o0 + 0x17c ] if (_Thread_Is_executing(the_thread)) { 40019220: 03 10 00 ea sethi %hi(0x4003a800), %g1 40019224: c2 00 60 3c ld [ %g1 + 0x3c ], %g1 ! 4003a83c <_Thread_Executing> 40019228: 80 a2 00 01 cmp %o0, %g1 4001922c: 12 80 00 0c bne 4001925c 40019230: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 if (tvp->dtor) 40019234: 80 a0 a0 00 cmp %g2, 0 40019238: 22 80 00 06 be,a 40019250 4001923c: c4 06 20 04 ld [ %i0 + 4 ], %g2 (*tvp->dtor)(*tvp->ptr); 40019240: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40019244: 9f c0 80 00 call %g2 <== NOT EXECUTED 40019248: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 4001924c: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 40019250: c2 06 20 08 ld [ %i0 + 8 ], %g1 40019254: 10 80 00 07 b 40019270 40019258: c2 20 80 00 st %g1, [ %g2 ] } else { if (tvp->dtor) 4001925c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40019260: 02 80 00 05 be 40019274 <== NOT EXECUTED 40019264: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 40019268: 9f c0 80 00 call %g2 <== NOT EXECUTED 4001926c: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 40019270: 92 10 00 18 mov %i0, %o1 40019274: 11 10 00 e9 sethi %hi(0x4003a400), %o0 40019278: 7f ff c7 e5 call 4000b20c <_Heap_Free> 4001927c: 90 12 23 ac or %o0, 0x3ac, %o0 ! 4003a7ac <_Workspace_Area> } _Workspace_Free(tvp); _Thread_Enable_dispatch(); 40019280: 7f ff ff a0 call 40019100 <_Thread_Enable_dispatch> 40019284: b0 10 20 00 clr %i0 40019288: 81 c7 e0 08 ret 4001928c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } prev = tvp; tvp = (rtems_task_variable_t *)tvp->next; 40019290: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { 40019294: 80 a6 20 00 cmp %i0, 0 40019298: 32 bf ff d9 bne,a 400191fc 4001929c: c2 06 20 04 ld [ %i0 + 4 ], %g1 return RTEMS_SUCCESSFUL; } prev = tvp; tvp = (rtems_task_variable_t *)tvp->next; } _Thread_Enable_dispatch(); 400192a0: 7f ff ff 98 call 40019100 <_Thread_Enable_dispatch> <== NOT EXECUTED 400192a4: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400192a8: 81 c7 e0 08 ret <== NOT EXECUTED 400192ac: 81 e8 00 00 restore <== NOT EXECUTED 400192e4 : rtems_status_code rtems_task_variable_get( rtems_id tid, void **ptr, void **result ) { 400192e4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp; if ( !ptr ) 400192e8: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400192ec: 02 80 00 3f be 400193e8 <== NOT EXECUTED 400192f0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !result ) 400192f4: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 400192f8: 02 80 00 3c be 400193e8 <== NOT EXECUTED 400192fc: 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 ) ) { 40019300: 12 80 00 0a bne 40019328 <== NOT EXECUTED 40019304: 83 36 20 18 srl %i0, 0x18, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40019308: 03 10 00 e9 sethi %hi(0x4003a400), %g1 <== NOT EXECUTED 4001930c: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 4003a760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40019310: 84 00 a0 01 inc %g2 <== NOT EXECUTED 40019314: c4 20 63 60 st %g2, [ %g1 + 0x360 ] <== 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; 40019318: 03 10 00 ea sethi %hi(0x4003a800), %g1 <== NOT EXECUTED 4001931c: d0 00 60 3c ld [ %g1 + 0x3c ], %o0 ! 4003a83c <_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; 40019320: 10 80 00 19 b 40019384 <== NOT EXECUTED 40019324: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED 40019328: 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 ) { 4001932c: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 40019330: 18 80 00 06 bgu 40019348 <== NOT EXECUTED 40019334: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40019338: 83 36 20 1b srl %i0, 0x1b, %g1 <== NOT EXECUTED 4001933c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40019340: 02 80 00 05 be 40019354 <== NOT EXECUTED 40019344: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 40019348: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001934c: 10 80 00 0e b 40019384 <== NOT EXECUTED 40019350: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40019354: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 40019358: 05 10 00 e9 sethi %hi(0x4003a400), %g2 <== NOT EXECUTED 4001935c: 84 10 a2 c0 or %g2, 0x2c0, %g2 ! 4003a6c0 <_Objects_Information_table> <== NOT EXECUTED 40019360: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 40019364: d0 00 60 04 ld [ %g1 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 40019368: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001936c: 12 80 00 04 bne 4001937c <== NOT EXECUTED 40019370: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 40019374: 10 80 00 04 b 40019384 <== NOT EXECUTED 40019378: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001937c: 7f ff ca 19 call 4000bbe0 <_Objects_Get> <== NOT EXECUTED 40019380: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 40019384: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40019388: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001938c: 22 80 00 10 be,a 400193cc <== NOT EXECUTED 40019390: d0 02 21 7c ld [ %o0 + 0x17c ], %o0 <== NOT EXECUTED 40019394: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40019398: 08 80 00 0b bleu 400193c4 <== NOT EXECUTED 4001939c: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 400193a0: 81 c7 e0 08 ret <== NOT EXECUTED 400193a4: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED * Figure out if the variable is in this task's list. */ tvp = the_thread->task_variables; while (tvp) { if (tvp->ptr == ptr) { 400193a8: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 400193ac: 32 80 00 08 bne,a 400193cc <== NOT EXECUTED 400193b0: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED /* * Should this return the current (i.e not the * saved) value if `tid' is the current task? */ *result = tvp->tval; 400193b4: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED _Thread_Enable_dispatch(); 400193b8: b0 10 20 00 clr %i0 <== NOT EXECUTED 400193bc: 7f ff ff bd call 400192b0 <_Thread_Enable_dispatch> <== NOT EXECUTED 400193c0: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 400193c4: 81 c7 e0 08 ret <== NOT EXECUTED 400193c8: 81 e8 00 00 restore <== NOT EXECUTED /* * Figure out if the variable is in this task's list. */ tvp = the_thread->task_variables; while (tvp) { 400193cc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400193d0: 32 bf ff f6 bne,a 400193a8 <== NOT EXECUTED 400193d4: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } tvp = (rtems_task_variable_t *)tvp->next; } _Thread_Enable_dispatch(); 400193d8: 7f ff ff b6 call 400192b0 <_Thread_Enable_dispatch> <== NOT EXECUTED 400193dc: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED 400193e0: 81 c7 e0 08 ret <== NOT EXECUTED 400193e4: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; 400193e8: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400193ec: 81 c7 e0 08 ret <== NOT EXECUTED 400193f0: 81 e8 00 00 restore <== NOT EXECUTED 40003ea8 : int cbufsize, int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; 40003ea8: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED 40003eac: d0 20 62 54 st %o0, [ %g1 + 0x254 ] ! 40019254 <== NOT EXECUTED rtems_termios_raw_input_size = raw_input; 40003eb0: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED rtems_termios_raw_output_size = raw_output; return RTEMS_SUCCESSFUL; } 40003eb4: 90 10 20 00 clr %o0 <== NOT EXECUTED int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; rtems_termios_raw_input_size = raw_input; 40003eb8: d2 20 62 58 st %o1, [ %g1 + 0x258 ] <== NOT EXECUTED rtems_termios_raw_output_size = raw_output; 40003ebc: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 40003ec0: 81 c3 e0 08 retl <== NOT EXECUTED 40003ec4: d4 20 62 5c st %o2, [ %g1 + 0x25c ] ! 4001925c <== NOT EXECUTED 4000551c : } } rtems_status_code rtems_termios_close (void *arg) { 4000551c: 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); 40005520: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005524: d0 00 61 4c ld [ %g1 + 0x14c ], %o0 ! 40019d4c rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40005528: c2 06 00 00 ld [ %i0 ], %g1 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 4000552c: 92 10 20 00 clr %o1 rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40005530: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40005534: 40 00 04 9c call 400067a4 40005538: 94 10 20 00 clr %o2 if (sc != RTEMS_SUCCESSFUL) 4000553c: 80 a2 20 00 cmp %o0, 0 40005540: 22 80 00 05 be,a 40005554 40005544: c2 04 20 08 ld [ %l0 + 8 ], %g1 rtems_fatal_error_occurred (sc); 40005548: 40 00 07 94 call 40007398 <== NOT EXECUTED 4000554c: 01 00 00 00 nop <== NOT EXECUTED if (--tty->refcount == 0) { 40005550: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40005554: 82 00 7f ff add %g1, -1, %g1 40005558: 80 a0 60 00 cmp %g1, 0 4000555c: 12 80 00 5b bne 400056c8 40005560: c2 24 20 08 st %g1, [ %l0 + 8 ] if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 40005564: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 40005568: 03 10 00 66 sethi %hi(0x40019800), %g1 4000556c: 82 10 63 7c or %g1, 0x37c, %g1 ! 40019b7c 40005570: 85 28 a0 05 sll %g2, 5, %g2 40005574: 84 00 80 01 add %g2, %g1, %g2 40005578: c2 00 a0 04 ld [ %g2 + 4 ], %g1 4000557c: 80 a0 60 00 cmp %g1, 0 40005580: 02 80 00 06 be 40005598 40005584: 01 00 00 00 nop /* * call discipline-specific close */ sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40005588: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000558c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED * default: just flush output buffer */ drainOutput (tty); } if (tty->device.outputUsesInterrupts 40005590: 10 80 00 05 b 400055a4 <== NOT EXECUTED 40005594: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED } else { /* * default: just flush output buffer */ drainOutput (tty); 40005598: 7f ff fd c5 call 40004cac 4000559c: 90 10 00 10 mov %l0, %o0 } if (tty->device.outputUsesInterrupts 400055a0: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 400055a4: 80 a0 60 02 cmp %g1, 2 400055a8: 32 80 00 13 bne,a 400055f4 400055ac: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 == TERMIOS_TASK_DRIVEN) { /* * send "terminate" to I/O tasks */ sc = rtems_event_send( 400055b0: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED 400055b4: 40 00 02 ad call 40006068 <== NOT EXECUTED 400055b8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 400055bc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400055c0: 22 80 00 05 be,a 400055d4 <== NOT EXECUTED 400055c4: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400055c8: 40 00 07 74 call 40007398 <== NOT EXECUTED 400055cc: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_event_send( 400055d0: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 400055d4: 40 00 02 a5 call 40006068 <== NOT EXECUTED 400055d8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 400055dc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400055e0: 22 80 00 05 be,a 400055f4 <== NOT EXECUTED 400055e4: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400055e8: 40 00 07 6c call 40007398 <== NOT EXECUTED 400055ec: 01 00 00 00 nop <== NOT EXECUTED } if (tty->device.lastClose) 400055f0: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED 400055f4: 80 a0 60 00 cmp %g1, 0 400055f8: 22 80 00 07 be,a 40005614 400055fc: c2 04 00 00 ld [ %l0 ], %g1 (*tty->device.lastClose)(tty->major, tty->minor, arg); 40005600: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED 40005604: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 40005608: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000560c: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED if (tty->forw == NULL) { 40005610: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED 40005614: 80 a0 60 00 cmp %g1, 0 40005618: 12 80 00 08 bne 40005638 4000561c: c4 04 20 04 ld [ %l0 + 4 ], %g2 rtems_termios_ttyTail = tty->back; 40005620: 03 10 00 67 sethi %hi(0x40019c00), %g1 if ( rtems_termios_ttyTail != NULL ) { 40005624: 80 a0 a0 00 cmp %g2, 0 40005628: 02 80 00 05 be 4000563c 4000562c: c4 20 61 50 st %g2, [ %g1 + 0x150 ] rtems_termios_ttyTail->forw = NULL; 40005630: 10 80 00 03 b 4000563c <== NOT EXECUTED 40005634: c0 20 80 00 clr [ %g2 ] <== NOT EXECUTED } } else { tty->forw->back = tty->back; 40005638: c4 20 60 04 st %g2, [ %g1 + 4 ] <== NOT EXECUTED } if (tty->back == NULL) { 4000563c: c2 04 20 04 ld [ %l0 + 4 ], %g1 40005640: 80 a0 60 00 cmp %g1, 0 40005644: 12 80 00 08 bne 40005664 40005648: c4 04 00 00 ld [ %l0 ], %g2 rtems_termios_ttyHead = tty->forw; 4000564c: 03 10 00 67 sethi %hi(0x40019c00), %g1 if ( rtems_termios_ttyHead != NULL ) { 40005650: 80 a0 a0 00 cmp %g2, 0 40005654: 02 80 00 05 be 40005668 40005658: c4 20 61 54 st %g2, [ %g1 + 0x154 ] rtems_termios_ttyHead->back = NULL; 4000565c: 10 80 00 03 b 40005668 <== NOT EXECUTED 40005660: c0 20 a0 04 clr [ %g2 + 4 ] <== NOT EXECUTED } } else { tty->back->forw = tty->forw; 40005664: c4 20 40 00 st %g2, [ %g1 ] <== NOT EXECUTED } rtems_semaphore_delete (tty->isem); 40005668: 40 00 04 08 call 40006688 4000566c: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 rtems_semaphore_delete (tty->osem); 40005670: 40 00 04 06 call 40006688 40005674: d0 04 20 18 ld [ %l0 + 0x18 ], %o0 rtems_semaphore_delete (tty->rawOutBuf.Semaphore); 40005678: 40 00 04 04 call 40006688 4000567c: d0 04 20 8c ld [ %l0 + 0x8c ], %o0 if ((tty->device.pollRead == NULL) || 40005680: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 40005684: 80 a0 60 00 cmp %g1, 0 40005688: 02 80 00 06 be 400056a0 4000568c: 01 00 00 00 nop 40005690: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40005694: 80 a0 60 02 cmp %g1, 2 40005698: 12 80 00 04 bne 400056a8 4000569c: 01 00 00 00 nop (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)) rtems_semaphore_delete (tty->rawInBuf.Semaphore); 400056a0: 40 00 03 fa call 40006688 <== NOT EXECUTED 400056a4: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED free (tty->rawInBuf.theBuf); 400056a8: 7f ff f6 62 call 40003030 400056ac: d0 04 20 58 ld [ %l0 + 0x58 ], %o0 free (tty->rawOutBuf.theBuf); 400056b0: 7f ff f6 60 call 40003030 400056b4: d0 04 20 7c ld [ %l0 + 0x7c ], %o0 free (tty->cbuf); 400056b8: 7f ff f6 5e call 40003030 400056bc: d0 04 20 1c ld [ %l0 + 0x1c ], %o0 free (tty); 400056c0: 7f ff f6 5c call 40003030 400056c4: 90 10 00 10 mov %l0, %o0 } rtems_semaphore_release (rtems_termios_ttyMutex); 400056c8: 03 10 00 67 sethi %hi(0x40019c00), %g1 400056cc: d0 00 61 4c ld [ %g1 + 0x14c ], %o0 ! 40019d4c 400056d0: 40 00 04 fc call 40006ac0 400056d4: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 400056d8: 81 c7 e0 08 ret 400056dc: 81 e8 00 00 restore 400040cc : * for each transmitted character. * It returns number of characters left to transmit */ int rtems_termios_dequeue_characters (void *ttyp, int len) { 400040cc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 400040d0: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 400040d4: c4 06 20 b4 ld [ %i0 + 0xb4 ], %g2 <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 400040d8: 82 00 40 19 add %g1, %i1, %g1 <== NOT EXECUTED 400040dc: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 400040e0: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 400040e4: 12 80 00 0b bne 40004110 <== NOT EXECUTED 400040e8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * send wake up to transmitter task */ sc = rtems_event_send(tty->txTaskId, 400040ec: d0 06 20 c8 ld [ %i0 + 0xc8 ], %o0 <== NOT EXECUTED 400040f0: 40 00 07 de call 40006068 <== NOT EXECUTED 400040f4: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED TERMIOS_TX_START_EVENT); if (sc != RTEMS_SUCCESSFUL) 400040f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400040fc: 02 80 00 12 be 40004144 <== NOT EXECUTED 40004100: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40004104: 40 00 0c a5 call 40007398 <== NOT EXECUTED 40004108: 01 00 00 00 nop <== NOT EXECUTED 4000410c: 30 80 00 0e b,a 40004144 <== NOT EXECUTED return 0; /* nothing to output in IRQ... */ } else if (tty->t_line == PPPDISC ) { 40004110: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 40004114: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 40004118: 12 80 00 09 bne 4000413c <== NOT EXECUTED 4000411c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40004120: c2 00 60 30 ld [ %g1 + 0x30 ], %g1 ! 40019c30 <== NOT EXECUTED 40004124: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004128: 02 80 00 07 be 40004144 <== NOT EXECUTED 4000412c: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 40004130: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004134: 01 00 00 00 nop <== NOT EXECUTED 40004138: 30 80 00 03 b,a 40004144 <== NOT EXECUTED } return 0; /* nothing to output in IRQ... */ } else { return rtems_termios_refill_transmitter(tty); 4000413c: 7f ff ff 69 call 40003ee0 <== NOT EXECUTED 40004140: 81 e8 00 00 restore <== NOT EXECUTED } } 40004144: 81 c7 e0 08 ret <== NOT EXECUTED 40004148: 81 e8 00 00 restore <== NOT EXECUTED 4000414c : * 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) { 4000414c: 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) { 40004150: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 40004154: 05 10 00 66 sethi %hi(0x40019800), %g2 <== NOT EXECUTED 40004158: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 4000415c: 84 10 a3 7c or %g2, 0x37c, %g2 <== NOT EXECUTED 40004160: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40004164: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 40004168: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000416c: 12 80 00 10 bne 400041ac <== NOT EXECUTED 40004170: a0 10 00 02 mov %g2, %l0 <== NOT EXECUTED 40004174: a6 10 20 00 clr %l3 <== NOT EXECUTED 40004178: ac 10 20 00 clr %l6 <== 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); 4000417c: aa 06 20 30 add %i0, 0x30, %l5 <== NOT EXECUTED 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; (*tty->device.write)(tty->minor, 40004180: 10 80 00 ac b 40004430 <== NOT EXECUTED 40004184: a8 06 20 4a add %i0, 0x4a, %l4 <== 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++; 40004188: d0 0e 40 00 ldub [ %i1 ], %o0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_rint(c,tty); 4000418c: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40004190: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 40004194: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 40004198: 91 2a 20 18 sll %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++; 4000419c: b2 06 60 01 inc %i1 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_rint(c,tty); 400041a0: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED 400041a4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400041a8: 92 10 00 18 mov %i0, %o1 <== 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--) { 400041ac: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED 400041b0: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 400041b4: 32 bf ff f5 bne,a 40004188 <== NOT EXECUTED 400041b8: 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 )) { 400041bc: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED 400041c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400041c4: 12 80 00 a6 bne 4000445c <== NOT EXECUTED 400041c8: a6 10 20 00 clr %l3 <== NOT EXECUTED 400041cc: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 400041d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400041d4: 22 80 00 a3 be,a 40004460 <== NOT EXECUTED 400041d8: b0 10 00 13 mov %l3, %i0 <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 400041dc: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 400041e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400041e4: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 400041e8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 400041ec: a6 10 20 00 clr %l3 <== NOT EXECUTED 400041f0: 10 80 00 9b b 4000445c <== NOT EXECUTED 400041f4: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED while (len--) { c = *buf++; /* FIXME: implement IXANY: any character restarts output */ /* if incoming XON/XOFF controls outgoing stream: */ if (tty->flow_ctrl & FL_MDXON) { 400041f8: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400041fc: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40004200: 02 80 00 1b be 4000426c <== NOT EXECUTED 40004204: e4 0e 40 00 ldub [ %i1 ], %l2 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { 40004208: c4 0e 20 4a ldub [ %i0 + 0x4a ], %g2 <== NOT EXECUTED 4000420c: 83 2c a0 18 sll %l2, 0x18, %g1 <== NOT EXECUTED 40004210: 87 38 60 18 sra %g1, 0x18, %g3 <== NOT EXECUTED 40004214: 80 a0 c0 02 cmp %g3, %g2 <== NOT EXECUTED 40004218: 12 80 00 0e bne 40004250 <== NOT EXECUTED 4000421c: c2 0e 20 49 ldub [ %i0 + 0x49 ], %g1 <== NOT EXECUTED if (c == tty->termios.c_cc[VSTART]) { 40004220: 82 08 60 ff and %g1, 0xff, %g1 <== NOT EXECUTED 40004224: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40004228: 12 80 00 05 bne 4000423c <== NOT EXECUTED 4000422c: 01 00 00 00 nop <== NOT EXECUTED /* received VSTOP and VSTART==VSTOP? */ /* then toggle "stop output" status */ tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 40004230: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004234: 10 80 00 04 b 40004244 <== NOT EXECUTED 40004238: 82 18 60 10 xor %g1, 0x10, %g1 <== NOT EXECUTED } else { /* VSTOP received (other code than VSTART) */ /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; 4000423c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004240: 82 10 60 10 or %g1, 0x10, %g1 <== NOT EXECUTED 40004244: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 40004248: 10 80 00 0c b 40004278 <== NOT EXECUTED 4000424c: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; } flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { 40004250: 82 08 60 ff and %g1, 0xff, %g1 <== NOT EXECUTED 40004254: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40004258: 12 80 00 06 bne 40004270 <== NOT EXECUTED 4000425c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED /* VSTART received */ /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; 40004260: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004264: 10 bf ff f8 b 40004244 <== NOT EXECUTED 40004268: 82 08 7f ef and %g1, -17, %g1 <== NOT EXECUTED flow_rcv = TRUE; } } if (flow_rcv) { 4000426c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 40004270: 02 80 00 1c be 400042e0 <== NOT EXECUTED 40004274: 01 00 00 00 nop <== NOT EXECUTED /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 40004278: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000427c: 82 08 60 30 and %g1, 0x30, %g1 <== NOT EXECUTED 40004280: 80 a0 60 20 cmp %g1, 0x20 <== NOT EXECUTED 40004284: 32 80 00 6b bne,a 40004430 <== NOT EXECUTED 40004288: b2 06 60 01 inc %i1 <== NOT EXECUTED /* disable interrupts */ rtems_interrupt_disable(level); 4000428c: 7f ff f7 09 call 40001eb0 <== NOT EXECUTED 40004290: 01 00 00 00 nop <== NOT EXECUTED 40004294: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 40004298: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 4000429c: 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; 400042a0: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 400042a4: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 400042a8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400042ac: 02 80 00 09 be 400042d0 <== NOT EXECUTED 400042b0: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 400042b4: d2 06 20 84 ld [ %i0 + 0x84 ], %o1 <== NOT EXECUTED 400042b8: c2 06 20 7c ld [ %i0 + 0x7c ], %g1 <== NOT EXECUTED 400042bc: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 400042c0: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 400042c4: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 400042c8: 9f c0 80 00 call %g2 <== NOT EXECUTED 400042cc: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); } /* reenable interrupts */ rtems_interrupt_enable(level); 400042d0: 7f ff f6 fc call 40001ec0 <== NOT EXECUTED 400042d4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 400042d8: 10 80 00 56 b 40004430 <== NOT EXECUTED 400042dc: b2 06 60 01 inc %i1 <== NOT EXECUTED /* reenable interrupts */ rtems_interrupt_enable(level); } } else { newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size; 400042e0: d0 06 20 60 ld [ %i0 + 0x60 ], %o0 <== NOT EXECUTED 400042e4: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 400042e8: 40 00 45 25 call 4001577c <.urem> <== NOT EXECUTED 400042ec: 90 02 20 01 inc %o0 <== NOT EXECUTED /* if chars_in_buffer > highwater */ rtems_interrupt_disable(level); 400042f0: 7f ff f6 f0 call 40001eb0 <== NOT EXECUTED 400042f4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 400042f8: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size) 400042fc: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 40004300: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 40004304: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 40004308: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 4000430c: 40 00 45 1c call 4001577c <.urem> <== NOT EXECUTED 40004310: 90 02 00 10 add %o0, %l0, %o0 <== NOT EXECUTED 40004314: c2 06 20 c0 ld [ %i0 + 0xc0 ], %g1 <== NOT EXECUTED 40004318: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 4000431c: 08 80 00 2d bleu 400043d0 <== NOT EXECUTED 40004320: 01 00 00 00 nop <== NOT EXECUTED 40004324: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004328: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000432c: 12 80 00 29 bne 400043d0 <== NOT EXECUTED 40004330: 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; 40004334: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004338: 82 10 60 01 or %g1, 1, %g1 <== NOT EXECUTED 4000433c: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 40004340: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004344: 82 08 64 02 and %g1, 0x402, %g1 <== NOT EXECUTED 40004348: 80 a0 64 00 cmp %g1, 0x400 <== NOT EXECUTED 4000434c: 12 80 00 13 bne 40004398 <== NOT EXECUTED 40004350: 01 00 00 00 nop <== NOT EXECUTED == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || 40004354: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004358: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 4000435c: 12 80 00 06 bne 40004374 <== NOT EXECUTED 40004360: 01 00 00 00 nop <== NOT EXECUTED 40004364: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED 40004368: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000436c: 12 80 00 19 bne 400043d0 <== NOT EXECUTED 40004370: 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; 40004374: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004378: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 4000437c: 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; 40004380: 82 10 60 02 or %g1, 2, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004384: 92 10 00 14 mov %l4, %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; 40004388: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 4000438c: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004390: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40004394: 30 80 00 0f b,a 400043d0 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTOP]), 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) 40004398: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000439c: 82 08 61 04 and %g1, 0x104, %g1 <== NOT EXECUTED 400043a0: 80 a0 61 00 cmp %g1, 0x100 <== NOT EXECUTED 400043a4: 12 80 00 0b bne 400043d0 <== NOT EXECUTED 400043a8: 01 00 00 00 nop <== NOT EXECUTED == (FL_MDRTS ) ) { tty->flow_ctrl |= FL_IRTSOFF; 400043ac: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 400043b0: 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; 400043b4: 82 10 60 04 or %g1, 4, %g1 <== NOT EXECUTED 400043b8: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 400043bc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400043c0: 02 80 00 04 be 400043d0 <== NOT EXECUTED 400043c4: 01 00 00 00 nop <== NOT EXECUTED tty->device.stopRemoteTx(tty->minor); 400043c8: 9f c0 80 00 call %g2 <== NOT EXECUTED 400043cc: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED } } } /* reenable interrupts */ rtems_interrupt_enable(level); 400043d0: 7f ff f6 bc call 40001ec0 <== NOT EXECUTED 400043d4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { 400043d8: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 400043dc: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 400043e0: 32 80 00 04 bne,a 400043f0 <== NOT EXECUTED 400043e4: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED dropped++; 400043e8: 10 80 00 11 b 4000442c <== NOT EXECUTED 400043ec: a6 04 e0 01 inc %l3 <== NOT EXECUTED } else { tty->rawInBuf.theBuf[newTail] = c; 400043f0: e4 28 40 10 stb %l2, [ %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 )) { 400043f4: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { dropped++; } else { tty->rawInBuf.theBuf[newTail] = c; tty->rawInBuf.Tail = newTail; 400043f8: 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 )) { 400043fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004400: 32 80 00 0c bne,a 40004430 <== NOT EXECUTED 40004404: b2 06 60 01 inc %i1 <== NOT EXECUTED 40004408: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 4000440c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004410: 22 80 00 08 be,a 40004430 <== NOT EXECUTED 40004414: b2 06 60 01 inc %i1 <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40004418: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 4000441c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004420: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 40004424: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40004428: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 4000442c: b2 06 60 01 inc %i1 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40004430: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED 40004434: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 40004438: 12 bf ff 70 bne 400041f8 <== NOT EXECUTED 4000443c: 01 00 00 00 nop <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 40004440: c2 06 20 78 ld [ %i0 + 0x78 ], %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 40004444: d0 06 20 68 ld [ %i0 + 0x68 ], %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 40004448: 82 00 40 13 add %g1, %l3, %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 4000444c: 40 00 09 9d call 40006ac0 <== NOT EXECUTED 40004450: c2 26 20 78 st %g1, [ %i0 + 0x78 ] <== NOT EXECUTED return dropped; } 40004454: 81 c7 e0 08 ret <== NOT EXECUTED 40004458: 91 e8 00 13 restore %g0, %l3, %o0 <== NOT EXECUTED 4000445c: b0 10 00 13 mov %l3, %i0 <== NOT EXECUTED 40004460: 81 c7 e0 08 ret <== NOT EXECUTED 40004464: 81 e8 00 00 restore <== NOT EXECUTED 40003e5c : struct rtems_termios_tty *rtems_termios_ttyTail; rtems_id rtems_termios_ttyMutex; void rtems_termios_initialize (void) { 40003e5c: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code sc; /* * Create the mutex semaphore for the tty list */ if (!rtems_termios_ttyMutex) { 40003e60: 03 10 00 67 sethi %hi(0x40019c00), %g1 40003e64: c4 00 61 4c ld [ %g1 + 0x14c ], %g2 ! 40019d4c 40003e68: 80 a0 a0 00 cmp %g2, 0 40003e6c: 12 80 00 0d bne 40003ea0 40003e70: 98 10 61 4c or %g1, 0x14c, %o4 sc = rtems_semaphore_create ( 40003e74: 11 15 14 9b sethi %hi(0x54526c00), %o0 40003e78: 92 10 20 01 mov 1, %o1 40003e7c: 90 12 21 69 or %o0, 0x169, %o0 40003e80: 94 10 20 54 mov 0x54, %o2 40003e84: 40 00 09 6e call 4000643c 40003e88: 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) 40003e8c: 80 a2 20 00 cmp %o0, 0 40003e90: 02 80 00 04 be 40003ea0 40003e94: 01 00 00 00 nop rtems_fatal_error_occurred (sc); 40003e98: 40 00 0d 40 call 40007398 <== NOT EXECUTED 40003e9c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40003ea0: 81 c7 e0 08 ret 40003ea4: 81 e8 00 00 restore 40005114 : } } rtems_status_code rtems_termios_ioctl (void *arg) { 40005114: 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; 40005118: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; rtems_status_code sc; args->ioctl_return = 0; 4000511c: 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; 40005120: e2 00 60 28 ld [ %g1 + 0x28 ], %l1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; 40005124: 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); 40005128: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED } } rtems_status_code rtems_termios_ioctl (void *arg) { 4000512c: 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); 40005130: 92 10 20 00 clr %o1 <== NOT EXECUTED 40005134: 40 00 05 9c call 400067a4 <== NOT EXECUTED 40005138: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 4000513c: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40005140: 22 80 00 05 be,a 40005154 <== NOT EXECUTED 40005144: c4 04 a0 04 ld [ %l2 + 4 ], %g2 <== NOT EXECUTED args->ioctl_return = sc; 40005148: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED 4000514c: 81 c7 e0 08 ret <== NOT EXECUTED 40005150: 81 e8 00 00 restore <== NOT EXECUTED return sc; } switch (args->command) { 40005154: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 40005158: 22 80 00 c0 be,a 40005458 <== NOT EXECUTED 4000515c: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED 40005160: 18 80 00 0b bgu 4000518c <== NOT EXECUTED 40005164: 03 10 01 19 sethi %hi(0x40046400), %g1 <== NOT EXECUTED 40005168: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 4000516c: 22 80 00 2d be,a 40005220 <== NOT EXECUTED 40005170: d2 04 a0 08 ld [ %l2 + 8 ], %o1 <== NOT EXECUTED 40005174: 18 80 00 b2 bgu 4000543c <== NOT EXECUTED 40005178: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 4000517c: 32 80 00 18 bne,a 400051dc <== NOT EXECUTED 40005180: 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; 40005184: 10 80 00 23 b 40005210 <== NOT EXECUTED 40005188: d0 04 a0 08 ld [ %l2 + 8 ], %o0 <== 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) { 4000518c: 82 10 62 7f or %g1, 0x27f, %g1 <== NOT EXECUTED 40005190: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005194: 02 80 00 d0 be 400054d4 <== NOT EXECUTED 40005198: 01 00 00 00 nop <== NOT EXECUTED 4000519c: 38 80 00 07 bgu,a 400051b8 <== NOT EXECUTED 400051a0: 03 10 01 1d sethi %hi(0x40047400), %g1 <== NOT EXECUTED 400051a4: 80 a0 a0 05 cmp %g2, 5 <== NOT EXECUTED 400051a8: 32 80 00 0d bne,a 400051dc <== NOT EXECUTED 400051ac: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED case RTEMS_IO_TCDRAIN: drainOutput (tty); break; case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; 400051b0: 10 80 00 a6 b 40005448 <== NOT EXECUTED 400051b4: c2 04 00 00 ld [ %l0 ], %g1 <== 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) { 400051b8: 82 10 60 1a or %g1, 0x1a, %g1 <== NOT EXECUTED 400051bc: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400051c0: 02 80 00 c1 be 400054c4 <== NOT EXECUTED 400051c4: 03 20 01 1d sethi %hi(0x80047400), %g1 <== NOT EXECUTED 400051c8: 82 10 60 1b or %g1, 0x1b, %g1 ! 8004741b <== NOT EXECUTED 400051cc: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400051d0: 22 80 00 a6 be,a 40005468 <== NOT EXECUTED 400051d4: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED default: if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { 400051d8: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED 400051dc: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED 400051e0: 82 10 63 7c or %g1, 0x37c, %g1 ! 40019b7c <== NOT EXECUTED 400051e4: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 400051e8: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 400051ec: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 400051f0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400051f4: 02 80 00 c5 be 40005508 <== NOT EXECUTED 400051f8: b0 10 20 0a mov 0xa, %i0 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); 400051fc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005200: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005204: 92 10 00 12 mov %l2, %o1 <== 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) { sc = rtems_termios_linesw[tty->t_line].l_open(tty); 40005208: 10 80 00 c0 b 40005508 <== NOT EXECUTED 4000520c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED sc = RTEMS_INVALID_NUMBER; } break; case RTEMS_IO_GET_ATTRIBUTES: *(struct termios *)args->buffer = tty->termios; 40005210: 92 04 60 30 add %l1, 0x30, %o1 <== NOT EXECUTED 40005214: 40 00 26 5a call 4000eb7c <== NOT EXECUTED 40005218: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 4000521c: 30 80 00 bb b,a 40005508 <== NOT EXECUTED break; case RTEMS_IO_SET_ATTRIBUTES: tty->termios = *(struct termios *)args->buffer; 40005220: 90 04 60 30 add %l1, 0x30, %o0 <== NOT EXECUTED 40005224: 40 00 26 56 call 4000eb7c <== NOT EXECUTED 40005228: 94 10 20 24 mov 0x24, %o2 <== 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) && 4000522c: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005230: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40005234: 02 80 00 20 be 400052b4 <== NOT EXECUTED 40005238: 01 00 00 00 nop <== NOT EXECUTED 4000523c: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED 40005240: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 40005244: 12 80 00 1c bne 400052b4 <== NOT EXECUTED 40005248: 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); 4000524c: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005250: 82 08 7d ef and %g1, -529, %g1 <== NOT EXECUTED 40005254: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* has output been stopped due to received XOFF? */ if (tty->flow_ctrl & FL_OSTOP) { 40005258: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000525c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40005260: 02 80 00 15 be 400052b4 <== NOT EXECUTED 40005264: 01 00 00 00 nop <== NOT EXECUTED /* disable interrupts */ rtems_interrupt_disable(level); 40005268: 7f ff f3 12 call 40001eb0 <== NOT EXECUTED 4000526c: 01 00 00 00 nop <== NOT EXECUTED 40005270: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 40005274: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 40005278: 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; 4000527c: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 40005280: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 40005284: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005288: 02 80 00 09 be 400052ac <== NOT EXECUTED 4000528c: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 40005290: d2 04 60 84 ld [ %l1 + 0x84 ], %o1 <== NOT EXECUTED 40005294: c2 04 60 7c ld [ %l1 + 0x7c ], %g1 <== NOT EXECUTED 40005298: c4 04 60 a4 ld [ %l1 + 0xa4 ], %g2 <== NOT EXECUTED 4000529c: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 400052a0: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 400052a4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400052a8: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); } /* reenable interrupts */ rtems_interrupt_enable(level); 400052ac: 7f ff f3 05 call 40001ec0 <== NOT EXECUTED 400052b0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } } /* check for incoming XON/XOFF flow control switched off */ if (( tty->flow_ctrl & FL_MDXOF) && 400052b4: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400052b8: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 400052bc: 02 80 00 0c be 400052ec <== NOT EXECUTED 400052c0: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 400052c4: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 400052c8: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 400052cc: 12 80 00 08 bne 400052ec <== NOT EXECUTED 400052d0: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_iflag & IXOFF)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDXOF); 400052d4: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400052d8: 82 08 7b ff and %g1, -1025, %g1 <== NOT EXECUTED 400052dc: 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); 400052e0: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400052e4: 82 08 7f fd and %g1, -3, %g1 <== NOT EXECUTED 400052e8: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED } /* check for incoming RTS/CTS flow control switched off */ if (( tty->flow_ctrl & FL_MDRTS) && 400052ec: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400052f0: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 400052f4: 02 80 00 16 be 4000534c <== NOT EXECUTED 400052f8: c2 04 60 38 ld [ %l1 + 0x38 ], %g1 <== NOT EXECUTED 400052fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005300: 06 80 00 14 bl 40005350 <== NOT EXECUTED 40005304: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_cflag & CRTSCTS)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDRTS); 40005308: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000530c: 82 08 7e ff and %g1, -257, %g1 <== NOT EXECUTED 40005310: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* restart remote Tx, if it was stopped */ if ((tty->flow_ctrl & FL_IRTSOFF) && 40005314: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005318: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 4000531c: 02 80 00 08 be 4000533c <== NOT EXECUTED 40005320: 01 00 00 00 nop <== NOT EXECUTED 40005324: c2 04 60 b0 ld [ %l1 + 0xb0 ], %g1 <== NOT EXECUTED 40005328: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000532c: 02 80 00 04 be 4000533c <== NOT EXECUTED 40005330: 01 00 00 00 nop <== NOT EXECUTED (tty->device.startRemoteTx != NULL)) { tty->device.startRemoteTx(tty->minor); 40005334: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005338: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED } tty->flow_ctrl &= ~(FL_IRTSOFF); 4000533c: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005340: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 40005344: 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) { 40005348: c2 04 60 38 ld [ %l1 + 0x38 ], %g1 <== NOT EXECUTED 4000534c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005350: 36 80 00 06 bge,a 40005368 <== NOT EXECUTED 40005354: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED tty->flow_ctrl |= FL_MDRTS; 40005358: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000535c: 82 10 61 00 or %g1, 0x100, %g1 <== NOT EXECUTED 40005360: 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) { 40005364: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 40005368: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 4000536c: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 40005370: 22 80 00 06 be,a 40005388 <== NOT EXECUTED 40005374: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXOF; 40005378: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 4000537c: 82 10 64 00 or %g1, 0x400, %g1 <== NOT EXECUTED 40005380: 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) { 40005384: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED 40005388: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 4000538c: 22 80 00 06 be,a 400053a4 <== NOT EXECUTED 40005390: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXON; 40005394: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005398: 82 10 62 00 or %g1, 0x200, %g1 <== NOT EXECUTED 4000539c: 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) { 400053a0: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED 400053a4: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 400053a8: 32 80 00 19 bne,a 4000540c <== NOT EXECUTED 400053ac: c0 24 60 6c clr [ %l1 + 0x6c ] <== 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); 400053b0: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 400053b4: 40 00 02 40 call 40005cb4 <== NOT EXECUTED 400053b8: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED tty->vtimeTicks = tty->termios.c_cc[VTIME] * ticksPerSecond / 10; 400053bc: d2 07 bf f4 ld [ %fp + -12 ], %o1 <== NOT EXECUTED 400053c0: e0 0c 60 46 ldub [ %l1 + 0x46 ], %l0 <== NOT EXECUTED 400053c4: 40 00 40 08 call 400153e4 <.umul> <== NOT EXECUTED 400053c8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400053cc: 40 00 40 40 call 400154cc <.udiv> <== NOT EXECUTED 400053d0: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 400053d4: d0 24 60 54 st %o0, [ %l1 + 0x54 ] <== NOT EXECUTED if (tty->termios.c_cc[VTIME]) { 400053d8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 400053dc: 02 80 00 08 be 400053fc <== NOT EXECUTED 400053e0: c2 0c 60 47 ldub [ %l1 + 0x47 ], %g1 <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 400053e4: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; if (tty->termios.c_cc[VMIN]) 400053e8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400053ec: 12 80 00 09 bne 40005410 <== NOT EXECUTED 400053f0: d0 24 60 70 st %o0, [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; 400053f4: 10 80 00 0a b 4000541c <== NOT EXECUTED 400053f8: d0 24 60 74 st %o0, [ %l1 + 0x74 ] <== NOT EXECUTED } else { if (tty->termios.c_cc[VMIN]) { 400053fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005400: 02 80 00 06 be 40005418 <== NOT EXECUTED 40005404: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 40005408: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; 4000540c: c0 24 60 70 clr [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; 40005410: 10 80 00 03 b 4000541c <== NOT EXECUTED 40005414: c0 24 60 74 clr [ %l1 + 0x74 ] <== NOT EXECUTED } else { tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT; 40005418: c2 24 60 6c st %g1, [ %l1 + 0x6c ] <== NOT EXECUTED } } } if (tty->device.setAttributes) 4000541c: c2 04 60 a8 ld [ %l1 + 0xa8 ], %g1 <== NOT EXECUTED 40005420: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005424: 02 80 00 39 be 40005508 <== NOT EXECUTED 40005428: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.setAttributes)(tty->minor, &tty->termios); 4000542c: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 40005430: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005434: 92 04 60 30 add %l1, 0x30, %o1 <== NOT EXECUTED 40005438: 30 80 00 34 b,a 40005508 <== NOT EXECUTED break; case RTEMS_IO_TCDRAIN: drainOutput (tty); 4000543c: 7f ff fe 1c call 40004cac <== NOT EXECUTED 40005440: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005444: 30 80 00 31 b,a 40005508 <== NOT EXECUTED break; case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; 40005448: c2 24 60 d4 st %g1, [ %l1 + 0xd4 ] <== NOT EXECUTED 4000544c: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 40005450: 10 80 00 2e b 40005508 <== NOT EXECUTED 40005454: c2 24 60 d8 st %g1, [ %l1 + 0xd8 ] <== NOT EXECUTED break; case RTEMS_IO_RCVWAKEUP: tty->tty_rcv = *wakeup; 40005458: c2 24 60 dc st %g1, [ %l1 + 0xdc ] <== NOT EXECUTED 4000545c: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 40005460: 10 80 00 2a b 40005508 <== NOT EXECUTED 40005464: c2 24 60 e0 st %g1, [ %l1 + 0xe0 ] <== NOT EXECUTED #if 1 /* FIXME */ case TIOCSETD: /* * close old line discipline */ if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 40005468: 05 10 00 66 sethi %hi(0x40019800), %g2 <== NOT EXECUTED 4000546c: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40005470: a0 10 a3 7c or %g2, 0x37c, %l0 <== NOT EXECUTED 40005474: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 40005478: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 4000547c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005480: 22 80 00 06 be,a 40005498 <== NOT EXECUTED 40005484: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40005488: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000548c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005490: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } tty->t_line=*(int*)(args->buffer); 40005494: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED tty->t_sc = NULL; /* ensure that no more valid data */ 40005498: 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); 4000549c: c4 00 40 00 ld [ %g1 ], %g2 <== 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) { 400054a0: 83 28 a0 05 sll %g2, 5, %g1 <== NOT EXECUTED 400054a4: c2 04 00 01 ld [ %l0 + %g1 ], %g1 <== NOT EXECUTED 400054a8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400054ac: 02 80 00 17 be 40005508 <== NOT EXECUTED 400054b0: c4 24 60 cc st %g2, [ %l1 + 0xcc ] <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_open(tty); 400054b4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400054b8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400054bc: 10 80 00 13 b 40005508 <== NOT EXECUTED 400054c0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } break; case TIOCGETD: *(int*)(args->buffer)=tty->t_line; 400054c4: c4 04 a0 08 ld [ %l2 + 8 ], %g2 <== NOT EXECUTED 400054c8: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED 400054cc: 10 80 00 0f b 40005508 <== NOT EXECUTED 400054d0: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED break; #endif case FIONREAD: { int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; 400054d4: c4 04 60 60 ld [ %l1 + 0x60 ], %g2 <== NOT EXECUTED 400054d8: c2 04 60 5c ld [ %l1 + 0x5c ], %g1 <== NOT EXECUTED if ( rawnc < 0 ) 400054dc: 88 a0 80 01 subcc %g2, %g1, %g4 <== NOT EXECUTED 400054e0: 3c 80 00 05 bpos,a 400054f4 <== NOT EXECUTED 400054e4: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 <== NOT EXECUTED rawnc += tty->rawInBuf.Size; 400054e8: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 <== NOT EXECUTED 400054ec: 88 01 00 01 add %g4, %g1, %g4 <== NOT EXECUTED /* Half guess that this is the right operation */ *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 400054f0: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 <== NOT EXECUTED 400054f4: c4 04 60 24 ld [ %l1 + 0x24 ], %g2 <== NOT EXECUTED 400054f8: c6 04 a0 08 ld [ %l2 + 8 ], %g3 <== NOT EXECUTED 400054fc: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40005500: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 40005504: c2 20 c0 00 st %g1, [ %g3 ] <== NOT EXECUTED } break; } rtems_semaphore_release (tty->osem); 40005508: 40 00 05 6e call 40006ac0 <== NOT EXECUTED 4000550c: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED args->ioctl_return = sc; 40005510: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED return sc; } 40005514: 81 c7 e0 08 ret <== NOT EXECUTED 40005518: 81 e8 00 00 restore <== NOT EXECUTED 400056e0 : rtems_device_major_number major, rtems_device_minor_number minor, void *arg, const rtems_termios_callbacks *callbacks ) { 400056e0: 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, 400056e4: 03 10 00 67 sethi %hi(0x40019c00), %g1 400056e8: d0 00 61 4c ld [ %g1 + 0x14c ], %o0 ! 40019d4c 400056ec: 92 10 20 00 clr %o1 400056f0: 40 00 04 2d call 400067a4 400056f4: 94 10 20 00 clr %o2 RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 400056f8: a6 92 20 00 orcc %o0, 0, %l3 400056fc: 12 80 01 1c bne 40005b6c 40005700: 03 10 00 67 sethi %hi(0x40019c00), %g1 return sc; for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40005704: 10 80 00 0a b 4000572c 40005708: e0 00 61 54 ld [ %g1 + 0x154 ], %l0 ! 40019d54 if ((tty->major == major) && (tty->minor == minor)) 4000570c: 80 a0 40 18 cmp %g1, %i0 40005710: 32 80 00 07 bne,a 4000572c 40005714: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 40005718: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000571c: 80 a0 40 19 cmp %g1, %i1 40005720: 22 80 00 ea be,a 40005ac8 40005724: c2 04 20 08 ld [ %l0 + 8 ], %g1 */ 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) { 40005728: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 4000572c: 80 a4 20 00 cmp %l0, 0 40005730: 32 bf ff f7 bne,a 4000570c 40005734: c2 04 20 0c ld [ %l0 + 0xc ], %g1 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40005738: 90 10 20 01 mov 1, %o0 4000573c: 7f ff f6 fb call 40003328 40005740: 92 10 20 e8 mov 0xe8, %o1 if (tty == NULL) { 40005744: a2 92 20 00 orcc %o0, 0, %l1 40005748: 02 80 00 0f be 40005784 4000574c: 03 10 00 67 sethi %hi(0x40019c00), %g1 return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 40005750: 03 10 00 64 sethi %hi(0x40019000), %g1 40005754: c2 00 62 58 ld [ %g1 + 0x258 ], %g1 ! 40019258 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40005758: a0 10 00 11 mov %l1, %l0 return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 4000575c: c2 24 60 64 st %g1, [ %l1 + 0x64 ] tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size); 40005760: d0 04 60 64 ld [ %l1 + 0x64 ], %o0 40005764: 7f ff f6 5b call 400030d0 40005768: 01 00 00 00 nop if (tty->rawInBuf.theBuf == NULL) { 4000576c: 80 a2 20 00 cmp %o0, 0 40005770: 12 80 00 08 bne 40005790 40005774: d0 24 60 58 st %o0, [ %l1 + 0x58 ] free(tty); 40005778: 7f ff f6 2e call 40003030 <== NOT EXECUTED 4000577c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_semaphore_release (rtems_termios_ttyMutex); 40005780: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 40005784: d0 00 61 4c ld [ %g1 + 0x14c ], %o0 ! 40019d4c <== NOT EXECUTED 40005788: 10 80 00 f7 b 40005b64 <== NOT EXECUTED 4000578c: a6 10 20 1a mov 0x1a, %l3 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate raw output buffer */ tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE; 40005790: 03 10 00 64 sethi %hi(0x40019000), %g1 40005794: c2 00 62 5c ld [ %g1 + 0x25c ], %g1 ! 4001925c 40005798: c2 24 60 88 st %g1, [ %l1 + 0x88 ] tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size); 4000579c: d0 04 60 88 ld [ %l1 + 0x88 ], %o0 400057a0: 7f ff f6 4c call 400030d0 400057a4: 01 00 00 00 nop if (tty->rawOutBuf.theBuf == NULL) { 400057a8: 80 a2 20 00 cmp %o0, 0 400057ac: 12 80 00 05 bne 400057c0 400057b0: d0 24 60 7c st %o0, [ %l1 + 0x7c ] free((void *)(tty->rawInBuf.theBuf)); 400057b4: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED free(tty); rtems_semaphore_release (rtems_termios_ttyMutex); 400057b8: 10 80 00 0c b 400057e8 <== NOT EXECUTED 400057bc: a6 10 20 1a mov 0x1a, %l3 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate cooked buffer */ tty->cbuf = malloc (CBUFSIZE); 400057c0: 03 10 00 64 sethi %hi(0x40019000), %g1 400057c4: 7f ff f6 43 call 400030d0 400057c8: d0 00 62 54 ld [ %g1 + 0x254 ], %o0 ! 40019254 if (tty->cbuf == NULL) { 400057cc: 80 a2 20 00 cmp %o0, 0 400057d0: 12 80 00 0c bne 40005800 400057d4: d0 24 60 1c st %o0, [ %l1 + 0x1c ] free((void *)(tty->rawOutBuf.theBuf)); 400057d8: d0 04 60 7c ld [ %l1 + 0x7c ], %o0 <== NOT EXECUTED 400057dc: 7f ff f6 15 call 40003030 <== NOT EXECUTED 400057e0: a6 10 20 1a mov 0x1a, %l3 <== NOT EXECUTED free((void *)(tty->rawInBuf.theBuf)); 400057e4: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED 400057e8: 7f ff f6 12 call 40003030 <== NOT EXECUTED 400057ec: 01 00 00 00 nop <== NOT EXECUTED free(tty); 400057f0: 7f ff f6 10 call 40003030 <== NOT EXECUTED 400057f4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } } rtems_semaphore_release (rtems_termios_ttyMutex); 400057f8: 10 80 00 da b 40005b60 <== NOT EXECUTED 400057fc: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED tty->tty_rcvwakeup = 0; /* * link tty */ tty->forw = rtems_termios_ttyHead; 40005800: 07 10 00 67 sethi %hi(0x40019c00), %g3 40005804: c2 00 e1 54 ld [ %g3 + 0x154 ], %g1 ! 40019d54 return RTEMS_NO_MEMORY; } /* * Initialize wakeup callbacks */ tty->tty_snd.sw_pfn = NULL; 40005808: c0 24 60 d4 clr [ %l1 + 0xd4 ] tty->tty_snd.sw_arg = NULL; 4000580c: c0 24 60 d8 clr [ %l1 + 0xd8 ] tty->tty_rcv.sw_pfn = NULL; 40005810: c0 24 60 dc clr [ %l1 + 0xdc ] tty->tty_rcv.sw_arg = NULL; 40005814: c0 24 60 e0 clr [ %l1 + 0xe0 ] tty->tty_rcvwakeup = 0; 40005818: c0 24 60 e4 clr [ %l1 + 0xe4 ] /* * link tty */ tty->forw = rtems_termios_ttyHead; 4000581c: c2 24 40 00 st %g1, [ %l1 ] tty->back = NULL; if (rtems_termios_ttyHead != NULL) 40005820: 80 a0 60 00 cmp %g1, 0 40005824: 02 80 00 03 be 40005830 40005828: c0 24 60 04 clr [ %l1 + 4 ] rtems_termios_ttyHead->back = tty; 4000582c: e2 20 60 04 st %l1, [ %g1 + 4 ] <== NOT EXECUTED rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) 40005830: 05 10 00 67 sethi %hi(0x40019c00), %g2 40005834: c2 00 a1 50 ld [ %g2 + 0x150 ], %g1 ! 40019d50 40005838: 80 a0 60 00 cmp %g1, 0 4000583c: 12 80 00 03 bne 40005848 40005840: e0 20 e1 54 st %l0, [ %g3 + 0x154 ] rtems_termios_ttyTail = tty; 40005844: e0 20 a1 50 st %l0, [ %g2 + 0x150 ] tty->major = major; /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 40005848: 25 10 00 64 sethi %hi(0x40019000), %l2 4000584c: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 ! 40019260 40005850: 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; 40005854: f2 24 20 10 st %i1, [ %l0 + 0x10 ] tty->major = major; 40005858: f0 24 20 0c st %i0, [ %l0 + 0xc ] /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 4000585c: 90 12 21 00 or %o0, 0x100, %o0 40005860: 92 10 20 01 mov 1, %o1 40005864: 90 10 40 08 or %g1, %o0, %o0 40005868: 94 10 20 54 mov 0x54, %o2 4000586c: 96 10 20 00 clr %o3 40005870: 40 00 02 f3 call 4000643c 40005874: 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) 40005878: 80 a2 20 00 cmp %o0, 0 4000587c: 02 80 00 05 be 40005890 40005880: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 rtems_fatal_error_occurred (sc); 40005884: 40 00 06 c5 call 40007398 <== NOT EXECUTED 40005888: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 4000588c: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 <== NOT EXECUTED 40005890: 11 15 14 9b sethi %hi(0x54526c00), %o0 40005894: 92 10 20 01 mov 1, %o1 40005898: 90 12 23 00 or %o0, 0x300, %o0 4000589c: 94 10 20 54 mov 0x54, %o2 400058a0: 90 10 40 08 or %g1, %o0, %o0 400058a4: 96 10 20 00 clr %o3 400058a8: 40 00 02 e5 call 4000643c 400058ac: 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) 400058b0: 80 a2 20 00 cmp %o0, 0 400058b4: 02 80 00 05 be 400058c8 400058b8: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 rtems_fatal_error_occurred (sc); 400058bc: 40 00 06 b7 call 40007398 <== NOT EXECUTED 400058c0: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 400058c4: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 <== NOT EXECUTED 400058c8: 11 15 14 9e sethi %hi(0x54527800), %o0 400058cc: 92 10 20 00 clr %o1 400058d0: 90 10 40 08 or %g1, %o0, %o0 400058d4: 94 10 20 20 mov 0x20, %o2 400058d8: 96 10 20 00 clr %o3 400058dc: 40 00 02 d8 call 4000643c 400058e0: 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) 400058e4: 80 a2 20 00 cmp %o0, 0 400058e8: 22 80 00 05 be,a 400058fc 400058ec: c0 24 20 94 clr [ %l0 + 0x94 ] rtems_fatal_error_occurred (sc); 400058f0: 40 00 06 aa call 40007398 <== NOT EXECUTED 400058f4: 01 00 00 00 nop <== NOT EXECUTED tty->rawOutBufState = rob_idle; 400058f8: c0 24 20 94 clr [ %l0 + 0x94 ] <== NOT EXECUTED /* * Set callbacks */ tty->device = *callbacks; 400058fc: 92 10 00 1b mov %i3, %o1 40005900: 90 04 20 98 add %l0, 0x98, %o0 40005904: 40 00 24 9e call 4000eb7c 40005908: 94 10 20 20 mov 0x20, %o2 /* * Create I/O tasks */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 4000590c: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40005910: 80 a0 60 02 cmp %g1, 2 40005914: 32 80 00 1f bne,a 40005990 40005918: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 sc = rtems_task_create ( 4000591c: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 <== NOT EXECUTED 40005920: 11 15 1e 15 sethi %hi(0x54785400), %o0 <== NOT EXECUTED 40005924: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 40005928: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 4000592c: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 40005930: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 40005934: 98 10 20 00 clr %o4 <== NOT EXECUTED 40005938: 40 00 04 a8 call 40006bd8 <== NOT EXECUTED 4000593c: 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) 40005940: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005944: 02 80 00 05 be 40005958 <== NOT EXECUTED 40005948: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 4000594c: 40 00 06 93 call 40007398 <== NOT EXECUTED 40005950: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_create ( 40005954: c2 4c a2 60 ldsb [ %l2 + 0x260 ], %g1 <== NOT EXECUTED 40005958: 11 14 9e 15 sethi %hi(0x52785400), %o0 <== NOT EXECUTED 4000595c: 92 10 20 09 mov 9, %o1 <== NOT EXECUTED 40005960: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 40005964: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 40005968: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 4000596c: 98 10 20 00 clr %o4 <== NOT EXECUTED 40005970: 40 00 04 9a call 40006bd8 <== NOT EXECUTED 40005974: 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) 40005978: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000597c: 22 80 00 05 be,a 40005990 <== NOT EXECUTED 40005980: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005984: 40 00 06 85 call 40007398 <== NOT EXECUTED 40005988: 01 00 00 00 nop <== NOT EXECUTED } if ((tty->device.pollRead == NULL) || 4000598c: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 40005990: 80 a0 60 00 cmp %g1, 0 40005994: 02 80 00 06 be 400059ac 40005998: 03 10 00 64 sethi %hi(0x40019000), %g1 4000599c: c2 04 60 b4 ld [ %l1 + 0xb4 ], %g1 400059a0: 80 a0 60 02 cmp %g1, 2 400059a4: 12 80 00 10 bne 400059e4 400059a8: 03 10 00 64 sethi %hi(0x40019000), %g1 (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){ sc = rtems_semaphore_create ( 400059ac: c2 48 62 60 ldsb [ %g1 + 0x260 ], %g1 ! 40019260 <== NOT EXECUTED 400059b0: 11 15 14 9c sethi %hi(0x54527000), %o0 <== NOT EXECUTED 400059b4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400059b8: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED 400059bc: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 400059c0: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 400059c4: 96 10 20 00 clr %o3 <== NOT EXECUTED 400059c8: 40 00 02 9d call 4000643c <== NOT EXECUTED 400059cc: 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) 400059d0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400059d4: 02 80 00 04 be 400059e4 <== NOT EXECUTED 400059d8: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400059dc: 40 00 06 6f call 40007398 <== NOT EXECUTED 400059e0: 01 00 00 00 nop <== NOT EXECUTED 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; 400059e4: c0 24 60 b8 clr [ %l1 + 0xb8 ] /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 400059e8: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 400059ec: 09 10 00 64 sethi %hi(0x40019000), %g4 400059f0: c4 09 22 60 ldub [ %g4 + 0x260 ], %g2 ! 40019260 /* 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; 400059f4: 83 30 60 01 srl %g1, 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'; 400059f8: c0 2c 60 4c clrb [ %l1 + 0x4c ] /* 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; 400059fc: c2 24 60 bc st %g1, [ %l1 + 0xbc ] 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'; 40005a00: 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; 40005a04: c6 04 60 64 ld [ %l1 + 0x64 ], %g3 /* * Bump name characer */ if (c++ == 'z') 40005a08: 84 00 a0 01 inc %g2 } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 40005a0c: 03 00 00 09 sethi %hi(0x2400), %g1 tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 40005a10: c4 29 22 60 stb %g2, [ %g4 + 0x260 ] } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 40005a14: 82 10 61 02 or %g1, 0x102, %g1 40005a18: c2 24 60 30 st %g1, [ %l1 + 0x30 ] tty->termios.c_oflag = OPOST | ONLCR | XTABS; 40005a1c: 03 00 00 06 sethi %hi(0x1800), %g1 40005a20: 82 10 60 05 or %g1, 5, %g1 ! 1805 40005a24: c2 24 60 34 st %g1, [ %l1 + 0x34 ] tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 40005a28: 82 10 28 bd mov 0x8bd, %g1 40005a2c: c2 24 60 38 st %g1, [ %l1 + 0x38 ] tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; 40005a30: 03 00 00 20 sethi %hi(0x8000), %g1 40005a34: 82 10 62 3b or %g1, 0x23b, %g1 ! 823b 40005a38: c2 24 60 3c st %g1, [ %l1 + 0x3c ] tty->termios.c_cc[VINTR] = '\003'; 40005a3c: 82 10 20 03 mov 3, %g1 40005a40: c2 2c 60 41 stb %g1, [ %l1 + 0x41 ] tty->termios.c_cc[VQUIT] = '\034'; 40005a44: 82 10 20 1c mov 0x1c, %g1 40005a48: c2 2c 60 42 stb %g1, [ %l1 + 0x42 ] tty->termios.c_cc[VERASE] = '\177'; 40005a4c: 82 10 20 7f mov 0x7f, %g1 40005a50: c2 2c 60 43 stb %g1, [ %l1 + 0x43 ] tty->termios.c_cc[VKILL] = '\025'; 40005a54: 82 10 20 15 mov 0x15, %g1 40005a58: c2 2c 60 44 stb %g1, [ %l1 + 0x44 ] tty->termios.c_cc[VEOF] = '\004'; 40005a5c: 82 10 20 04 mov 4, %g1 40005a60: c2 2c 60 45 stb %g1, [ %l1 + 0x45 ] tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; 40005a64: 82 10 20 11 mov 0x11, %g1 40005a68: c2 2c 60 49 stb %g1, [ %l1 + 0x49 ] tty->termios.c_cc[VSTOP] = '\023'; 40005a6c: 82 10 20 13 mov 0x13, %g1 40005a70: c2 2c 60 4a stb %g1, [ %l1 + 0x4a ] tty->termios.c_cc[VSUSP] = '\032'; 40005a74: 82 10 20 1a mov 0x1a, %g1 40005a78: c2 2c 60 4b stb %g1, [ %l1 + 0x4b ] tty->termios.c_cc[VREPRINT] = '\022'; 40005a7c: 82 10 20 12 mov 0x12, %g1 40005a80: c2 2c 60 4d stb %g1, [ %l1 + 0x4d ] tty->termios.c_cc[VDISCARD] = '\017'; 40005a84: 82 10 20 0f mov 0xf, %g1 40005a88: c2 2c 60 4e stb %g1, [ %l1 + 0x4e ] tty->termios.c_cc[VWERASE] = '\027'; 40005a8c: 82 10 20 17 mov 0x17, %g1 40005a90: c2 2c 60 4f stb %g1, [ %l1 + 0x4f ] tty->termios.c_cc[VLNEXT] = '\026'; 40005a94: 82 10 20 16 mov 0x16, %g1 40005a98: c2 2c 60 50 stb %g1, [ %l1 + 0x50 ] 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; 40005a9c: 83 28 e0 01 sll %g3, 1, %g1 40005aa0: 82 00 40 03 add %g1, %g3, %g1 40005aa4: 83 30 60 02 srl %g1, 2, %g1 /* * Bump name characer */ if (c++ == 'z') 40005aa8: 85 28 a0 18 sll %g2, 0x18, %g2 40005aac: 85 38 a0 18 sra %g2, 0x18, %g2 40005ab0: 80 a0 a0 7b cmp %g2, 0x7b 40005ab4: 12 80 00 04 bne 40005ac4 40005ab8: c2 24 60 c0 st %g1, [ %l1 + 0xc0 ] c = 'a'; 40005abc: 82 10 20 61 mov 0x61, %g1 <== NOT EXECUTED 40005ac0: c2 29 22 60 stb %g1, [ %g4 + 0x260 ] <== NOT EXECUTED } args->iop->data1 = tty; if (!tty->refcount++) { 40005ac4: c2 04 20 08 ld [ %l0 + 8 ], %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 40005ac8: c4 06 80 00 ld [ %i2 ], %g2 if (!tty->refcount++) { 40005acc: 82 00 60 01 inc %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 40005ad0: e0 20 a0 28 st %l0, [ %g2 + 0x28 ] if (!tty->refcount++) { 40005ad4: 80 a0 60 01 cmp %g1, 1 40005ad8: 12 80 00 21 bne 40005b5c 40005adc: c2 24 20 08 st %g1, [ %l0 + 8 ] if (tty->device.firstOpen) 40005ae0: c2 04 20 98 ld [ %l0 + 0x98 ], %g1 40005ae4: 80 a0 60 00 cmp %g1, 0 40005ae8: 02 80 00 05 be 40005afc 40005aec: 90 10 00 18 mov %i0, %o0 (*tty->device.firstOpen)(major, minor, arg); 40005af0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40005af4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005af8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED /* * start I/O tasks, if needed */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40005afc: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40005b00: 80 a0 60 02 cmp %g1, 2 40005b04: 12 80 00 17 bne 40005b60 40005b08: 03 10 00 67 sethi %hi(0x40019c00), %g1 sc = rtems_task_start(tty->rxTaskId, 40005b0c: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED 40005b10: 13 10 00 16 sethi %hi(0x40005800), %o1 <== NOT EXECUTED 40005b14: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40005b18: 40 00 05 23 call 40006fa4 <== NOT EXECUTED 40005b1c: 92 12 63 74 or %o1, 0x374, %o1 <== NOT EXECUTED rtems_termios_rxdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 40005b20: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005b24: 22 80 00 05 be,a 40005b38 <== NOT EXECUTED 40005b28: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005b2c: 40 00 06 1b call 40007398 <== NOT EXECUTED 40005b30: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_start(tty->txTaskId, 40005b34: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 40005b38: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40005b3c: 13 10 00 16 sethi %hi(0x40005800), %o1 <== NOT EXECUTED 40005b40: 40 00 05 19 call 40006fa4 <== NOT EXECUTED 40005b44: 92 12 63 e4 or %o1, 0x3e4, %o1 ! 40005be4 <== NOT EXECUTED rtems_termios_txdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 40005b48: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005b4c: 02 80 00 05 be 40005b60 <== NOT EXECUTED 40005b50: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005b54: 40 00 06 11 call 40007398 <== NOT EXECUTED 40005b58: 01 00 00 00 nop <== NOT EXECUTED } } rtems_semaphore_release (rtems_termios_ttyMutex); 40005b5c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40005b60: d0 00 61 4c ld [ %g1 + 0x14c ], %o0 ! 40019d4c 40005b64: 40 00 03 d7 call 40006ac0 40005b68: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } 40005b6c: 81 c7 e0 08 ret 40005b70: 91 e8 00 13 restore %g0, %l3, %o0 40004468 : * Send characters to device-specific code */ void rtems_termios_puts ( const void *_buf, int len, struct rtems_termios_tty *tty) { 40004468: 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) { 4000446c: c2 06 a0 b4 ld [ %i2 + 0xb4 ], %g1 40004470: 80 a0 60 00 cmp %g1, 0 40004474: 12 80 00 08 bne 40004494 40004478: 92 10 00 18 mov %i0, %o1 (*tty->device.write)(tty->minor, (void *)buf, len); 4000447c: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 40004480: c2 06 a0 a4 ld [ %i2 + 0xa4 ], %g1 40004484: 9f c0 40 00 call %g1 40004488: 94 10 00 19 mov %i1, %o2 4000448c: 81 c7 e0 08 ret 40004490: 81 e8 00 00 restore return; } newHead = tty->rawOutBuf.Head; 40004494: e2 06 a0 80 ld [ %i2 + 0x80 ], %l1 <== NOT EXECUTED while (len) { 40004498: 10 80 00 3c b 40004588 <== NOT EXECUTED 4000449c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED * len -= ncopy * * To minimize latency, the memcpy should be done * with interrupts enabled. */ newHead = (newHead + 1) % tty->rawOutBuf.Size; 400044a0: d2 06 a0 88 ld [ %i2 + 0x88 ], %o1 <== NOT EXECUTED 400044a4: 40 00 44 b6 call 4001577c <.urem> <== NOT EXECUTED 400044a8: 90 04 60 01 add %l1, 1, %o0 <== NOT EXECUTED rtems_interrupt_disable (level); 400044ac: 7f ff f6 81 call 40001eb0 <== NOT EXECUTED 400044b0: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 400044b4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 400044b8: 30 80 00 10 b,a 400044f8 <== NOT EXECUTED while (newHead == tty->rawOutBuf.Tail) { tty->rawOutBufState = rob_wait; 400044bc: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 400044c0: 7f ff f6 80 call 40001ec0 <== NOT EXECUTED 400044c4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 400044c8: d0 06 a0 8c ld [ %i2 + 0x8c ], %o0 <== NOT EXECUTED 400044cc: 92 10 20 00 clr %o1 <== NOT EXECUTED 400044d0: 40 00 08 b5 call 400067a4 <== NOT EXECUTED 400044d4: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 400044d8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400044dc: 02 80 00 04 be 400044ec <== NOT EXECUTED 400044e0: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400044e4: 40 00 0b ad call 40007398 <== NOT EXECUTED 400044e8: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 400044ec: 7f ff f6 71 call 40001eb0 <== NOT EXECUTED 400044f0: 01 00 00 00 nop <== NOT EXECUTED 400044f4: 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) { 400044f8: c2 06 a0 84 ld [ %i2 + 0x84 ], %g1 <== NOT EXECUTED 400044fc: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 40004500: 02 bf ff ef be 400044bc <== NOT EXECUTED 40004504: 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++; 40004508: c6 06 a0 80 ld [ %i2 + 0x80 ], %g3 <== NOT EXECUTED 4000450c: c4 0e 00 00 ldub [ %i0 ], %g2 <== NOT EXECUTED 40004510: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 40004514: c4 28 40 03 stb %g2, [ %g1 + %g3 ] <== NOT EXECUTED tty->rawOutBuf.Head = newHead; if (tty->rawOutBufState == rob_idle) { 40004518: c2 06 a0 94 ld [ %i2 + 0x94 ], %g1 <== 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; 4000451c: e2 26 a0 80 st %l1, [ %i2 + 0x80 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_idle) { 40004520: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004524: 32 80 00 15 bne,a 40004578 <== NOT EXECUTED 40004528: b0 06 20 01 inc %i0 <== NOT EXECUTED /* check, whether XOFF has been received */ if (!(tty->flow_ctrl & FL_ORCVXOF)) { 4000452c: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 40004530: 80 88 60 10 btst 0x10, %g1 <== NOT EXECUTED 40004534: 12 80 00 0b bne 40004560 <== NOT EXECUTED 40004538: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.write)(tty->minor, 4000453c: d2 06 a0 84 ld [ %i2 + 0x84 ], %o1 <== NOT EXECUTED 40004540: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 40004544: c4 06 a0 a4 ld [ %i2 + 0xa4 ], %g2 <== NOT EXECUTED 40004548: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 <== NOT EXECUTED 4000454c: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 40004550: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004554: 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; 40004558: 10 80 00 06 b 40004570 <== NOT EXECUTED 4000455c: 82 10 20 01 mov 1, %g1 <== 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; 40004560: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 40004564: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED 40004568: c2 26 a0 b8 st %g1, [ %i2 + 0xb8 ] <== NOT EXECUTED } tty->rawOutBufState = rob_busy; 4000456c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40004570: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== 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++; 40004574: b0 06 20 01 inc %i0 <== NOT EXECUTED /* remember that output has been stopped due to flow ctrl*/ tty->flow_ctrl |= FL_OSTOP; } tty->rawOutBufState = rob_busy; } rtems_interrupt_enable (level); 40004578: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000457c: 7f ff f6 51 call 40001ec0 <== NOT EXECUTED 40004580: b2 06 7f ff add %i1, -1, %i1 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) { (*tty->device.write)(tty->minor, (void *)buf, len); return; } newHead = tty->rawOutBuf.Head; while (len) { 40004584: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40004588: 12 bf ff c6 bne 400044a0 <== NOT EXECUTED 4000458c: 01 00 00 00 nop <== NOT EXECUTED 40004590: 81 c7 e0 08 ret <== NOT EXECUTED 40004594: 81 e8 00 00 restore <== NOT EXECUTED 40004d28 : return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 40004d28: 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; 40004d2c: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED uint32_t count = args->count; 40004d30: e4 06 20 0c ld [ %i0 + 0xc ], %l2 <== 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; 40004d34: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 <== NOT EXECUTED uint32_t count = args->count; char *buffer = args->buffer; 40004d38: e6 06 20 08 ld [ %i0 + 8 ], %l3 <== NOT EXECUTED rtems_status_code sc; sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004d3c: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 40004d40: 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); 40004d44: 92 10 20 00 clr %o1 <== NOT EXECUTED 40004d48: 40 00 06 97 call 400067a4 <== NOT EXECUTED 40004d4c: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 40004d50: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40004d54: 12 80 00 10 bne 40004d94 <== NOT EXECUTED 40004d58: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED return sc; if (rtems_termios_linesw[tty->t_line].l_read != NULL) { 40004d5c: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 <== NOT EXECUTED 40004d60: 82 10 63 7c or %g1, 0x37c, %g1 <== NOT EXECUTED 40004d64: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 40004d68: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 40004d6c: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED 40004d70: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004d74: 02 80 00 0a be 40004d9c <== NOT EXECUTED 40004d78: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_read(tty,args); 40004d7c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004d80: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40004d84: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 40004d88: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED 40004d8c: 40 00 07 4d call 40006ac0 <== NOT EXECUTED 40004d90: c0 24 20 e4 clr [ %l0 + 0xe4 ] <== NOT EXECUTED 40004d94: 81 c7 e0 08 ret <== NOT EXECUTED 40004d98: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->cindex == tty->ccount) { 40004d9c: c4 04 20 24 ld [ %l0 + 0x24 ], %g2 <== NOT EXECUTED 40004da0: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40004da4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004da8: 12 80 00 cc bne 400050d8 <== NOT EXECUTED 40004dac: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED tty->cindex = tty->ccount = 0; tty->read_start_column = tty->column; 40004db0: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED if (tty->device.pollRead != NULL 40004db4: 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; 40004db8: 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; 40004dbc: c0 24 20 20 clr [ %l0 + 0x20 ] <== NOT EXECUTED tty->read_start_column = tty->column; if (tty->device.pollRead != NULL 40004dc0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004dc4: 02 80 00 5a be 40004f2c <== NOT EXECUTED 40004dc8: c0 24 20 24 clr [ %l0 + 0x24 ] <== NOT EXECUTED 40004dcc: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED 40004dd0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004dd4: 32 80 00 57 bne,a 40004f30 <== NOT EXECUTED 40004dd8: e2 04 20 74 ld [ %l0 + 0x74 ], %l1 <== NOT EXECUTED static rtems_status_code fillBufferPoll (struct rtems_termios_tty *tty) { int n; if (tty->termios.c_lflag & ICANON) { 40004ddc: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 40004de0: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40004de4: 22 80 00 13 be,a 40004e30 <== NOT EXECUTED 40004de8: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED for (;;) { n = (*tty->device.pollRead)(tty->minor); 40004dec: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 40004df0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004df4: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 40004df8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004dfc: 16 80 00 06 bge 40004e14 <== NOT EXECUTED 40004e00: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED rtems_task_wake_after (1); 40004e04: 40 00 08 a7 call 400070a0 <== NOT EXECUTED 40004e08: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED { int n; if (tty->termios.c_lflag & ICANON) { for (;;) { n = (*tty->device.pollRead)(tty->minor); 40004e0c: 10 bf ff f9 b 40004df0 <== NOT EXECUTED 40004e10: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED if (n < 0) { rtems_task_wake_after (1); } else { if (siproc (n, tty)) 40004e14: 7f ff ff 64 call 40004ba4 <== NOT EXECUTED 40004e18: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40004e1c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004e20: 22 bf ff f4 be,a 40004df0 <== NOT EXECUTED 40004e24: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 40004e28: 10 80 00 ac b 400050d8 <== NOT EXECUTED 40004e2c: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED } } } else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 40004e30: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004e34: 12 80 00 0a bne 40004e5c <== NOT EXECUTED 40004e38: aa 07 bf f4 add %fp, -12, %l5 <== NOT EXECUTED 40004e3c: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 40004e40: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004e44: 02 80 00 07 be 40004e60 <== NOT EXECUTED 40004e48: a2 07 bf f0 add %fp, -16, %l1 <== NOT EXECUTED rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 40004e4c: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 40004e50: 40 00 03 99 call 40005cb4 <== NOT EXECUTED 40004e54: 92 07 bf f4 add %fp, -12, %o1 <== 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); 40004e58: 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); 40004e5c: a2 07 bf f0 add %fp, -16, %l1 <== 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); 40004e60: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 40004e64: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004e68: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 40004e6c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004e70: 36 80 00 1d bge,a 40004ee4 <== NOT EXECUTED 40004e74: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED if (tty->termios.c_cc[VMIN]) { 40004e78: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED 40004e7c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004e80: 02 80 00 0a be 40004ea8 <== NOT EXECUTED 40004e84: c4 0c 20 46 ldub [ %l0 + 0x46 ], %g2 <== NOT EXECUTED if (tty->termios.c_cc[VTIME] && tty->ccount) { 40004e88: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004e8c: 02 80 00 12 be 40004ed4 <== NOT EXECUTED 40004e90: 01 00 00 00 nop <== NOT EXECUTED 40004e94: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40004e98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004e9c: 02 80 00 0e be 40004ed4 <== NOT EXECUTED 40004ea0: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 40004ea4: 30 80 00 04 b,a 40004eb4 <== NOT EXECUTED break; } } } else { if (!tty->termios.c_cc[VTIME]) 40004ea8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004eac: 02 80 00 8a be 400050d4 <== NOT EXECUTED 40004eb0: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED break; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); 40004eb4: 40 00 03 80 call 40005cb4 <== NOT EXECUTED 40004eb8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED if ((now - then) > tty->vtimeTicks) { 40004ebc: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 <== NOT EXECUTED 40004ec0: c4 1f bf f0 ldd [ %fp + -16 ], %g2 <== NOT EXECUTED 40004ec4: 84 20 80 03 sub %g2, %g3, %g2 <== NOT EXECUTED 40004ec8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004ecc: 18 80 00 83 bgu 400050d8 <== NOT EXECUTED 40004ed0: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED break; } } rtems_task_wake_after (1); 40004ed4: 40 00 08 73 call 400070a0 <== NOT EXECUTED 40004ed8: 90 10 20 01 mov 1, %o0 <== 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); 40004edc: 10 bf ff e2 b 40004e64 <== NOT EXECUTED 40004ee0: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED } } rtems_task_wake_after (1); } else { siproc (n, tty); 40004ee4: 7f ff ff 30 call 40004ba4 <== NOT EXECUTED 40004ee8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 40004eec: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 40004ef0: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40004ef4: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40004ef8: 16 80 00 77 bge 400050d4 <== NOT EXECUTED 40004efc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 40004f00: 22 bf ff d9 be,a 40004e64 <== NOT EXECUTED 40004f04: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 40004f08: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 40004f0c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004f10: 22 bf ff d5 be,a 40004e64 <== NOT EXECUTED 40004f14: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 40004f18: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 40004f1c: 40 00 03 66 call 40005cb4 <== NOT EXECUTED 40004f20: 90 10 20 02 mov 2, %o0 <== 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); 40004f24: 10 bf ff d0 b 40004e64 <== NOT EXECUTED 40004f28: c2 04 20 a0 ld [ %l0 + 0xa0 ], %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; 40004f2c: e2 04 20 74 ld [ %l0 + 0x74 ], %l1 <== NOT EXECUTED 40004f30: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 40004f34: 2f 10 00 64 sethi %hi(0x40019000), %l7 <== 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, 40004f38: 10 80 00 4c b 40005068 <== NOT EXECUTED 40004f3c: aa 04 20 49 add %l0, 0x49, %l5 <== 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; 40004f40: d0 04 20 5c ld [ %l0 + 0x5c ], %o0 <== NOT EXECUTED 40004f44: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 40004f48: 40 00 42 0d call 4001577c <.urem> <== NOT EXECUTED 40004f4c: 90 02 20 01 inc %o0 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 40004f50: 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; 40004f54: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 40004f58: e2 08 40 08 ldub [ %g1 + %o0 ], %l1 <== NOT EXECUTED tty->rawInBuf.Head = newHead; 40004f5c: d0 24 20 5c st %o0, [ %l0 + 0x5c ] <== NOT EXECUTED if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size) 40004f60: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40004f64: d0 04 20 64 ld [ %l0 + 0x64 ], %o0 <== NOT EXECUTED 40004f68: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 40004f6c: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 40004f70: 40 00 42 03 call 4001577c <.urem> <== NOT EXECUTED 40004f74: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40004f78: c2 04 20 bc ld [ %l0 + 0xbc ], %g1 <== NOT EXECUTED 40004f7c: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 40004f80: 3a 80 00 27 bcc,a 4000501c <== NOT EXECUTED 40004f84: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED % tty->rawInBuf.Size) < tty->lowwater) { tty->flow_ctrl &= ~FL_IREQXOF; 40004f88: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40004f8c: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 40004f90: 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)) 40004f94: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40004f98: 82 08 62 02 and %g1, 0x202, %g1 <== NOT EXECUTED 40004f9c: 80 a0 62 02 cmp %g1, 0x202 <== NOT EXECUTED 40004fa0: 12 80 00 11 bne 40004fe4 <== NOT EXECUTED 40004fa4: 01 00 00 00 nop <== NOT EXECUTED 40004fa8: c2 04 20 94 ld [ %l0 + 0x94 ], %g1 <== NOT EXECUTED 40004fac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004fb0: 22 80 00 07 be,a 40004fcc <== NOT EXECUTED 40004fb4: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 40004fb8: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40004fbc: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004fc0: 02 80 00 09 be 40004fe4 <== NOT EXECUTED 40004fc4: 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, 40004fc8: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 40004fcc: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED 40004fd0: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 40004fd4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004fd8: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 40004fdc: 10 80 00 10 b 4000501c <== NOT EXECUTED 40004fe0: c2 04 20 3c ld [ %l0 + 0x3c ], %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) { 40004fe4: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40004fe8: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 40004fec: 22 80 00 0c be,a 4000501c <== NOT EXECUTED 40004ff0: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_IRTSOFF; 40004ff4: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 40004ff8: 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; 40004ffc: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 40005000: c2 24 20 b8 st %g1, [ %l0 + 0xb8 ] <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 40005004: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005008: 22 80 00 05 be,a 4000501c <== NOT EXECUTED 4000500c: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->device.startRemoteTx(tty->minor); 40005010: 9f c0 80 00 call %g2 <== NOT EXECUTED 40005014: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 40005018: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 4000501c: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40005020: 02 80 00 09 be 40005044 <== NOT EXECUTED 40005024: 90 0c 60 ff and %l1, 0xff, %o0 <== NOT EXECUTED if (siproc (c, tty)) 40005028: 7f ff fe df call 40004ba4 <== NOT EXECUTED 4000502c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40005030: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005034: 32 80 00 0c bne,a 40005064 <== NOT EXECUTED 40005038: ac 10 20 00 clr %l6 <== NOT EXECUTED else { siproc (c, tty); if (tty->ccount >= tty->termios.c_cc[VMIN]) wait = 0; } timeout = tty->rawInBufSemaphoreTimeout; 4000503c: 10 80 00 0b b 40005068 <== NOT EXECUTED 40005040: e2 04 20 70 ld [ %l0 + 0x70 ], %l1 <== NOT EXECUTED if (tty->termios.c_lflag & ICANON) { if (siproc (c, tty)) wait = 0; } else { siproc (c, tty); 40005044: 7f ff fe d8 call 40004ba4 <== NOT EXECUTED 40005048: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 4000504c: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 40005050: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40005054: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40005058: 26 80 00 04 bl,a 40005068 <== NOT EXECUTED 4000505c: e2 04 20 70 ld [ %l0 + 0x70 ], %l1 <== NOT EXECUTED 40005060: ac 10 20 00 clr %l6 <== NOT EXECUTED wait = 0; } timeout = tty->rawInBufSemaphoreTimeout; 40005064: e2 04 20 70 ld [ %l0 + 0x70 ], %l1 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 40005068: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 <== NOT EXECUTED 4000506c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40005070: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005074: 02 80 00 07 be 40005090 <== NOT EXECUTED 40005078: c2 05 e2 54 ld [ %l7 + 0x254 ], %g1 <== NOT EXECUTED 4000507c: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 <== NOT EXECUTED 40005080: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40005084: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005088: 06 bf ff ae bl 40004f40 <== NOT EXECUTED 4000508c: 01 00 00 00 nop <== NOT EXECUTED } /* * Wait for characters */ if ( wait ) { 40005090: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 40005094: 02 80 00 11 be 400050d8 <== NOT EXECUTED 40005098: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawInBuf.Semaphore, 4000509c: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED 400050a0: d2 04 20 6c ld [ %l0 + 0x6c ], %o1 <== NOT EXECUTED 400050a4: 40 00 05 c0 call 400067a4 <== NOT EXECUTED 400050a8: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED tty->rawInBufSemaphoreOptions, timeout); if (sc != RTEMS_SUCCESSFUL) 400050ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400050b0: 02 bf ff ee be 40005068 <== NOT EXECUTED 400050b4: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 400050b8: 30 80 00 08 b,a 400050d8 <== NOT EXECUTED sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { *buffer++ = tty->cbuf[tty->cindex++]; 400050bc: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED count--; 400050c0: a4 04 bf ff add %l2, -1, %l2 <== NOT EXECUTED sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { *buffer++ = tty->cbuf[tty->cindex++]; 400050c4: c2 08 40 02 ldub [ %g1 + %g2 ], %g1 <== NOT EXECUTED 400050c8: c2 2c c0 00 stb %g1, [ %l3 ] <== NOT EXECUTED 400050cc: c6 24 20 24 st %g3, [ %l0 + 0x24 ] <== NOT EXECUTED 400050d0: a6 04 e0 01 inc %l3 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 400050d4: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 400050d8: 22 80 00 08 be,a 400050f8 <== NOT EXECUTED 400050dc: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED 400050e0: c4 04 20 24 ld [ %l0 + 0x24 ], %g2 <== NOT EXECUTED 400050e4: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 400050e8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400050ec: 06 bf ff f4 bl 400050bc <== NOT EXECUTED 400050f0: 86 00 a0 01 add %g2, 1, %g3 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 400050f4: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED tty->tty_rcvwakeup = 0; 400050f8: 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; 400050fc: 82 20 40 12 sub %g1, %l2, %g1 <== NOT EXECUTED 40005100: c2 25 20 14 st %g1, [ %l4 + 0x14 ] <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 40005104: 40 00 06 6f call 40006ac0 <== NOT EXECUTED 40005108: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return sc; } 4000510c: 81 c7 e0 08 ret <== NOT EXECUTED 40005110: 81 e8 00 00 restore <== NOT EXECUTED 40003ee0 : * 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) { 40003ee0: 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)) 40003ee4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40003ee8: 82 08 64 03 and %g1, 0x403, %g1 <== NOT EXECUTED 40003eec: 80 a0 64 01 cmp %g1, 0x401 <== NOT EXECUTED 40003ef0: 12 80 00 0f bne 40003f2c <== NOT EXECUTED 40003ef4: 92 06 20 4a add %i0, 0x4a, %o1 <== NOT EXECUTED == (FL_MDXOF | FL_IREQXOF)) { /* XOFF should be sent now... */ (*tty->device.write)(tty->minor, 40003ef8: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED 40003efc: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 40003f00: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003f04: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTOP]), 1); rtems_interrupt_disable(level); 40003f08: 7f ff f7 ea call 40001eb0 <== NOT EXECUTED 40003f0c: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 40003f10: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40003f14: 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--; 40003f18: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40003f1c: 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--; 40003f20: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40003f24: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 40003f28: 30 80 00 12 b,a 40003f70 <== NOT EXECUTED nToSend = 1; } else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF)) 40003f2c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40003f30: 82 08 60 03 and %g1, 3, %g1 <== NOT EXECUTED 40003f34: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40003f38: 12 80 00 12 bne 40003f80 <== NOT EXECUTED 40003f3c: 92 06 20 49 add %i0, 0x49, %o1 <== 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, 40003f40: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED 40003f44: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 40003f48: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003f4c: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTART]), 1); rtems_interrupt_disable(level); 40003f50: 7f ff f7 d8 call 40001eb0 <== NOT EXECUTED 40003f54: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 40003f58: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 40003f5c: 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--; 40003f60: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 40003f64: 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--; 40003f68: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 40003f6c: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 40003f70: 7f ff f7 d4 call 40001ec0 <== NOT EXECUTED 40003f74: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 40003f78: 81 c7 e0 08 ret <== NOT EXECUTED 40003f7c: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED rtems_interrupt_enable(level); nToSend = 1; } else { if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) { 40003f80: c4 06 20 80 ld [ %i0 + 0x80 ], %g2 <== NOT EXECUTED 40003f84: c2 06 20 84 ld [ %i0 + 0x84 ], %g1 <== NOT EXECUTED 40003f88: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40003f8c: 12 80 00 0a bne 40003fb4 <== NOT EXECUTED 40003f90: 01 00 00 00 nop <== NOT EXECUTED /* * buffer was empty */ if (tty->rawOutBufState == rob_wait) { 40003f94: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED 40003f98: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40003f9c: 12 80 00 49 bne 400040c0 <== NOT EXECUTED 40003fa0: a2 10 20 00 clr %l1 <== NOT EXECUTED /* * this should never happen... */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 40003fa4: 40 00 0a c7 call 40006ac0 <== NOT EXECUTED 40003fa8: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 40003fac: 81 c7 e0 08 ret <== NOT EXECUTED 40003fb0: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED rtems_semaphore_release (tty->rawOutBuf.Semaphore); } return 0; } rtems_interrupt_disable(level); 40003fb4: 7f ff f7 bf call 40001eb0 <== NOT EXECUTED 40003fb8: 01 00 00 00 nop <== NOT EXECUTED len = tty->t_dqlen; 40003fbc: e0 06 20 90 ld [ %i0 + 0x90 ], %l0 <== NOT EXECUTED tty->t_dqlen = 0; 40003fc0: c0 26 20 90 clr [ %i0 + 0x90 ] <== NOT EXECUTED rtems_interrupt_enable(level); 40003fc4: 7f ff f7 bf call 40001ec0 <== NOT EXECUTED 40003fc8: 01 00 00 00 nop <== NOT EXECUTED newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size; 40003fcc: d0 06 20 84 ld [ %i0 + 0x84 ], %o0 <== NOT EXECUTED 40003fd0: d2 06 20 88 ld [ %i0 + 0x88 ], %o1 <== NOT EXECUTED 40003fd4: 40 00 45 ea call 4001577c <.urem> <== NOT EXECUTED 40003fd8: 90 04 00 08 add %l0, %o0, %o0 <== NOT EXECUTED tty->rawOutBuf.Tail = newTail; if (tty->rawOutBufState == rob_wait) { 40003fdc: 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; 40003fe0: d0 26 20 84 st %o0, [ %i0 + 0x84 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_wait) { 40003fe4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40003fe8: 12 80 00 04 bne 40003ff8 <== NOT EXECUTED 40003fec: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * wake up any pending writer task */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 40003ff0: 40 00 0a b4 call 40006ac0 <== NOT EXECUTED 40003ff4: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED } if (newTail == tty->rawOutBuf.Head) { 40003ff8: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40003ffc: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004000: 12 80 00 0b bne 4000402c <== NOT EXECUTED 40004004: 01 00 00 00 nop <== NOT EXECUTED nToSend = 0; /* * check to see if snd wakeup callback was set */ if ( tty->tty_snd.sw_pfn != NULL) { 40004008: c2 06 20 d4 ld [ %i0 + 0xd4 ], %g1 <== NOT EXECUTED } if (newTail == tty->rawOutBuf.Head) { /* * Buffer has become empty */ tty->rawOutBufState = rob_idle; 4000400c: 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) { 40004010: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004014: 02 80 00 2a be 400040bc <== NOT EXECUTED 40004018: a2 10 20 00 clr %l1 <== NOT EXECUTED (*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg); 4000401c: d2 06 20 d8 ld [ %i0 + 0xd8 ], %o1 <== NOT EXECUTED 40004020: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004024: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED 40004028: 30 80 00 25 b,a 400040bc <== NOT EXECUTED } } /* check, whether output should stop due to received XOFF */ else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) 4000402c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004030: 82 08 62 10 and %g1, 0x210, %g1 <== NOT EXECUTED 40004034: 80 a0 62 10 cmp %g1, 0x210 <== NOT EXECUTED 40004038: 12 80 00 0c bne 40004068 <== NOT EXECUTED 4000403c: 01 00 00 00 nop <== NOT EXECUTED == (FL_MDXON | FL_ORCVXOF)) { /* Buffer not empty, but output stops due to XOFF */ /* set flag, that output has been stopped */ rtems_interrupt_disable(level); 40004040: 7f ff f7 9c call 40001eb0 <== NOT EXECUTED 40004044: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl |= FL_OSTOP; 40004048: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 4000404c: 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; 40004050: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 40004054: 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; 40004058: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ rtems_interrupt_enable(level); 4000405c: 7f ff f7 99 call 40001ec0 <== NOT EXECUTED 40004060: a2 10 20 00 clr %l1 <== NOT EXECUTED 40004064: 30 80 00 16 b,a 400040bc <== NOT EXECUTED } else { /* * Buffer not empty, start tranmitter */ if (newTail > tty->rawOutBuf.Head) 40004068: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 4000406c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004070: 08 80 00 05 bleu 40004084 <== NOT EXECUTED 40004074: 01 00 00 00 nop <== NOT EXECUTED nToSend = tty->rawOutBuf.Size - newTail; 40004078: c2 06 20 88 ld [ %i0 + 0x88 ], %g1 <== NOT EXECUTED else nToSend = tty->rawOutBuf.Head - newTail; 4000407c: 10 80 00 04 b 4000408c <== NOT EXECUTED 40004080: a2 20 40 10 sub %g1, %l0, %l1 <== NOT EXECUTED 40004084: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40004088: 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)) { 4000408c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004090: 80 88 66 00 btst 0x600, %g1 <== NOT EXECUTED 40004094: 32 80 00 02 bne,a 4000409c <== NOT EXECUTED 40004098: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend = 1; } tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, 4000409c: d2 06 20 7c ld [ %i0 + 0x7c ], %o1 <== NOT EXECUTED 400040a0: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 400040a4: 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*/ 400040a8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 400040ac: 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*/ 400040b0: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 400040b4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400040b8: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 400040bc: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED } return nToSend; } 400040c0: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 400040c4: 81 c7 e0 08 ret <== NOT EXECUTED 400040c8: 81 e8 00 00 restore <== NOT EXECUTED 40005b74 : /* * this task actually processes any receive events */ static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument) { 40005b74: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005b78: a2 07 bf f0 add %fp, -16, %l1 <== NOT EXECUTED if (c != EOF) { /* * pollRead did call enqueue on its own */ c_buf = c; rtems_termios_enqueue_raw_characters ( 40005b7c: a0 07 bf f7 add %fp, -9, %l0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005b80: 96 10 00 11 mov %l1, %o3 <== NOT EXECUTED 40005b84: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40005b88: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005b8c: 40 00 00 b3 call 40005e58 <== NOT EXECUTED 40005b90: 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) { 40005b94: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40005b98: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40005b9c: 22 80 00 07 be,a 40005bb8 <== NOT EXECUTED 40005ba0: c2 06 20 a0 ld [ %i0 + 0xa0 ], %g1 <== NOT EXECUTED tty->rxTaskId = 0; 40005ba4: c0 26 20 c4 clr [ %i0 + 0xc4 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 40005ba8: 40 00 04 6f call 40006d64 <== NOT EXECUTED 40005bac: 90 10 20 00 clr %o0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005bb0: 10 bf ff f5 b 40005b84 <== NOT EXECUTED 40005bb4: 96 10 00 11 mov %l1, %o3 <== NOT EXECUTED } else { /* * do something */ c = tty->device.pollRead(tty->minor); 40005bb8: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005bbc: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED if (c != EOF) { 40005bc0: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40005bc4: 02 bf ff ef be 40005b80 <== NOT EXECUTED 40005bc8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * pollRead did call enqueue on its own */ c_buf = c; 40005bcc: d0 2f bf f7 stb %o0, [ %fp + -9 ] <== NOT EXECUTED rtems_termios_enqueue_raw_characters ( 40005bd0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40005bd4: 7f ff f9 5e call 4000414c <== NOT EXECUTED 40005bd8: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40005bdc: 10 bf ff ea b 40005b84 <== NOT EXECUTED 40005be0: 96 10 00 11 mov %l1, %o3 <== NOT EXECUTED 40003ec8 : 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); 40003ec8: d0 02 20 c4 ld [ %o0 + 0xc4 ], %o0 <== NOT EXECUTED 40003ecc: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40003ed0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40003ed4: 40 00 08 65 call 40006068 <== NOT EXECUTED 40003ed8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40003edc: 01 00 00 00 nop 40005be4 : /* * this task actually processes any transmit events */ static rtems_task rtems_termios_txdaemon(rtems_task_argument argument) { 40005be4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED } else { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40005be8: 03 10 00 66 sethi %hi(0x40019800), %g1 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 40005bec: a0 07 bf f4 add %fp, -12, %l0 <== NOT EXECUTED } else { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40005bf0: a2 10 63 7c or %g1, 0x37c, %l1 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 40005bf4: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40005bf8: 94 10 20 00 clr %o2 <== NOT EXECUTED 40005bfc: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40005c00: 40 00 00 96 call 40005e58 <== NOT EXECUTED 40005c04: 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) { 40005c08: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40005c0c: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40005c10: 02 80 00 07 be 40005c2c <== NOT EXECUTED 40005c14: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED tty->txTaskId = 0; 40005c18: c0 26 20 c8 clr [ %i0 + 0xc8 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 40005c1c: 40 00 04 52 call 40006d64 <== NOT EXECUTED 40005c20: 90 10 20 00 clr %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 40005c24: 10 bf ff f5 b 40005bf8 <== NOT EXECUTED 40005c28: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED } else { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40005c2c: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 40005c30: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40005c34: 82 00 40 11 add %g1, %l1, %g1 <== NOT EXECUTED 40005c38: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 40005c3c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005c40: 02 80 00 04 be 40005c50 <== NOT EXECUTED 40005c44: 01 00 00 00 nop <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 40005c48: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005c4c: 01 00 00 00 nop <== NOT EXECUTED } /* * try to push further characters to device */ rtems_termios_refill_transmitter(tty); 40005c50: 7f ff f8 a4 call 40003ee0 <== NOT EXECUTED 40005c54: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 40005c58: 10 bf ff e8 b 40005bf8 <== NOT EXECUTED 40005c5c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40004bf0 : rtems_termios_puts (&c, 1, tty); } rtems_status_code rtems_termios_write (void *arg) { 40004bf0: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004bf4: c2 06 00 00 ld [ %i0 ], %g1 rtems_status_code sc; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004bf8: 92 10 20 00 clr %o1 rtems_status_code rtems_termios_write (void *arg) { rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40004bfc: e4 00 60 28 ld [ %g1 + 0x28 ], %l2 rtems_status_code sc; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40004c00: 94 10 20 00 clr %o2 40004c04: 40 00 06 e8 call 400067a4 40004c08: d0 04 a0 18 ld [ %l2 + 0x18 ], %o0 if (sc != RTEMS_SUCCESSFUL) 40004c0c: a6 92 20 00 orcc %o0, 0, %l3 40004c10: 12 80 00 25 bne 40004ca4 40004c14: 03 10 00 66 sethi %hi(0x40019800), %g1 return sc; if (rtems_termios_linesw[tty->t_line].l_write != NULL) { 40004c18: c4 04 a0 cc ld [ %l2 + 0xcc ], %g2 40004c1c: 82 10 63 7c or %g1, 0x37c, %g1 40004c20: 85 28 a0 05 sll %g2, 5, %g2 40004c24: 84 00 80 01 add %g2, %g1, %g2 40004c28: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 40004c2c: 80 a0 60 00 cmp %g1, 0 40004c30: 02 80 00 06 be 40004c48 40004c34: 92 10 00 18 mov %i0, %o1 sc = rtems_termios_linesw[tty->t_line].l_write(tty,args); 40004c38: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004c3c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40004c40: 10 80 00 17 b 40004c9c <== NOT EXECUTED 40004c44: a6 10 00 08 mov %o0, %l3 <== NOT EXECUTED rtems_semaphore_release (tty->osem); return sc; } if (tty->termios.c_oflag & OPOST) { 40004c48: c2 04 a0 34 ld [ %l2 + 0x34 ], %g1 40004c4c: d2 06 20 0c ld [ %i0 + 0xc ], %o1 40004c50: 80 88 60 01 btst 1, %g1 40004c54: 02 80 00 0e be 40004c8c 40004c58: d0 06 20 08 ld [ %i0 + 8 ], %o0 uint32_t count = args->count; 40004c5c: a2 10 00 09 mov %o1, %l1 char *buffer = args->buffer; 40004c60: 10 80 00 05 b 40004c74 40004c64: a0 10 00 08 mov %o0, %l0 while (count--) oproc (*buffer++, tty); 40004c68: 92 10 00 12 mov %l2, %o1 40004c6c: 7f ff fe 4b call 40004598 40004c70: 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--) 40004c74: a2 04 7f ff add %l1, -1, %l1 40004c78: 80 a4 7f ff cmp %l1, -1 40004c7c: 32 bf ff fb bne,a 40004c68 40004c80: 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; 40004c84: 10 80 00 05 b 40004c98 40004c88: c2 06 20 0c ld [ %i0 + 0xc ], %g1 while (count--) oproc (*buffer++, tty); args->bytes_moved = args->count; } else { rtems_termios_puts (args->buffer, args->count, tty); 40004c8c: 7f ff fd f7 call 40004468 <== NOT EXECUTED 40004c90: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED args->bytes_moved = args->count; 40004c94: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40004c98: c2 26 20 14 st %g1, [ %i0 + 0x14 ] } rtems_semaphore_release (tty->osem); 40004c9c: 40 00 07 89 call 40006ac0 40004ca0: d0 04 a0 18 ld [ %l2 + 0x18 ], %o0 return sc; } 40004ca4: 81 c7 e0 08 ret 40004ca8: 91 e8 00 13 restore %g0, %l3, %o0 4001308c : */ rtems_status_code rtems_timer_delete( Objects_Id id ) { 4001308c: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40013090: 21 10 00 cd sethi %hi(0x40033400), %l0 40013094: 92 10 00 18 mov %i0, %o1 40013098: 94 07 bf f4 add %fp, -12, %o2 4001309c: 40 00 09 ec call 4001584c <_Objects_Get> 400130a0: 90 14 21 fc or %l0, 0x1fc, %o0 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 400130a4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400130a8: 80 a0 60 00 cmp %g1, 0 400130ac: 02 80 00 08 be 400130cc 400130b0: b0 10 00 08 mov %o0, %i0 400130b4: 82 18 60 02 xor %g1, 2, %g1 400130b8: 80 a0 00 01 cmp %g0, %g1 400130bc: 82 60 20 00 subx %g0, 0, %g1 400130c0: b0 08 60 15 and %g1, 0x15, %i0 400130c4: 81 c7 e0 08 ret 400130c8: 91 ee 20 04 restore %i0, 4, %o0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400130cc: a0 14 21 fc or %l0, 0x1fc, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 400130d0: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400130d4: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 400130d8: 05 00 00 3f sethi %hi(0xfc00), %g2 400130dc: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 400130e0: 82 08 40 02 and %g1, %g2, %g1 400130e4: 80 a0 40 03 cmp %g1, %g3 400130e8: 38 80 00 06 bgu,a 40013100 400130ec: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 400130f0: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 400130f4: 83 28 60 02 sll %g1, 2, %g1 400130f8: 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; 400130fc: 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 ); 40013100: 40 00 15 19 call 40018564 <_Watchdog_Remove> 40013104: 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 ); 40013108: 90 10 00 10 mov %l0, %o0 4001310c: 40 00 09 7a call 400156f4 <_Objects_Free> 40013110: 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 ) 40013114: 03 10 00 cc sethi %hi(0x40033000), %g1 40013118: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40033290 <_Thread_Dispatch_disable_level> 4001311c: b0 10 20 00 clr %i0 40013120: 84 00 bf ff add %g2, -1, %g2 40013124: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 40013128: c2 00 62 90 ld [ %g1 + 0x290 ], %g1 4001312c: 80 a0 60 00 cmp %g1, 0 40013130: 12 80 00 04 bne 40013140 40013134: 01 00 00 00 nop _Thread_Dispatch(); 40013138: 40 00 0e b9 call 40016c1c <_Thread_Dispatch> 4001313c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013140: 81 c7 e0 08 ret 40013144: 81 e8 00 00 restore 4001317c : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 4001317c: 9d e3 bf 90 save %sp, -112, %sp 40013180: a4 10 00 18 mov %i0, %l2 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( ticks == 0 ) 40013184: 80 a6 60 00 cmp %i1, 0 40013188: 02 80 00 21 be 4001320c 4001318c: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( !routine ) 40013190: 80 a6 a0 00 cmp %i2, 0 40013194: 02 80 00 1e be 4001320c 40013198: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 4001319c: 11 10 00 cd sethi %hi(0x40033400), %o0 400131a0: 92 10 00 12 mov %l2, %o1 400131a4: 90 12 21 fc or %o0, 0x1fc, %o0 400131a8: 40 00 09 a9 call 4001584c <_Objects_Get> 400131ac: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 400131b0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400131b4: 80 a0 60 00 cmp %g1, 0 400131b8: 02 80 00 08 be 400131d8 400131bc: a0 10 00 08 mov %o0, %l0 400131c0: 82 18 60 02 xor %g1, 2, %g1 400131c4: 80 a0 00 01 cmp %g0, %g1 400131c8: 82 60 20 00 subx %g0, 0, %g1 400131cc: b0 08 60 15 and %g1, 0x15, %i0 400131d0: 81 c7 e0 08 ret 400131d4: 91 ee 20 04 restore %i0, 4, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 400131d8: a2 02 20 10 add %o0, 0x10, %l1 400131dc: 40 00 14 e2 call 40018564 <_Watchdog_Remove> 400131e0: 90 10 00 11 mov %l1, %o0 _ISR_Disable( level ); 400131e4: 7f ff dd ac call 4000a894 400131e8: 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 ) { 400131ec: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 400131f0: 80 a0 60 00 cmp %g1, 0 400131f4: 22 80 00 08 be,a 40013214 400131f8: f4 24 20 2c st %i2, [ %l0 + 0x2c ] _ISR_Enable( level ); 400131fc: 7f ff dd aa call 4000a8a4 <== NOT EXECUTED 40013200: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); 40013204: 7f ff ff d1 call 40013148 <_Thread_Enable_dispatch> <== NOT EXECUTED 40013208: 01 00 00 00 nop <== NOT EXECUTED 4001320c: 81 c7 e0 08 ret 40013210: 81 e8 00 00 restore 40013214: e4 24 20 30 st %l2, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 40013218: 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; 4001321c: c0 24 20 38 clr [ %l0 + 0x38 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40013220: c0 24 20 18 clr [ %l0 + 0x18 ] _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); _ISR_Enable( level ); 40013224: 7f ff dd a0 call 4000a8a4 40013228: b0 10 20 00 clr %i0 ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 4001322c: 92 10 00 11 mov %l1, %o1 40013230: 11 10 00 cc sethi %hi(0x40033000), %o0 40013234: 90 12 23 8c or %o0, 0x38c, %o0 ! 4003338c <_Watchdog_Ticks_chain> 40013238: 40 00 14 73 call 40018404 <_Watchdog_Insert> 4001323c: f2 24 20 1c st %i1, [ %l0 + 0x1c ] _Watchdog_Insert_ticks( &the_timer->Ticker, ticks ); _Thread_Enable_dispatch(); 40013240: 7f ff ff c2 call 40013148 <_Thread_Enable_dispatch> 40013244: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013248: 81 c7 e0 08 ret 4001324c: 81 e8 00 00 restore 40008ee4 : rtems_status_code rtems_timer_get_information( Objects_Id id, rtems_timer_information *the_info ) { 40008ee4: 9d e3 bf 90 save %sp, -112, %sp 40008ee8: 92 10 00 18 mov %i0, %o1 Timer_Control *the_timer; Objects_Locations location; if ( !the_info ) 40008eec: 80 a6 60 00 cmp %i1, 0 40008ef0: 02 80 00 22 be 40008f78 40008ef4: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40008ef8: 11 10 00 7d sethi %hi(0x4001f400), %o0 40008efc: 94 07 bf f4 add %fp, -12, %o2 40008f00: 40 00 07 3f call 4000abfc <_Objects_Get> 40008f04: 90 12 21 c8 or %o0, 0x1c8, %o0 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40008f08: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008f0c: 80 a0 60 00 cmp %g1, 0 40008f10: 22 80 00 08 be,a 40008f30 40008f14: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 40008f18: 82 18 60 02 xor %g1, 2, %g1 <== NOT EXECUTED 40008f1c: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40008f20: 82 60 20 00 subx %g0, 0, %g1 <== NOT EXECUTED 40008f24: b0 08 60 15 and %g1, 0x15, %i0 <== NOT EXECUTED 40008f28: 81 c7 e0 08 ret <== NOT EXECUTED 40008f2c: 91 ee 20 04 restore %i0, 4, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; 40008f30: c4 02 20 38 ld [ %o0 + 0x38 ], %g2 the_info->initial = the_timer->Ticker.initial; 40008f34: c2 26 60 04 st %g1, [ %i1 + 4 ] the_info->start_time = the_timer->Ticker.start_time; 40008f38: c2 02 20 24 ld [ %o0 + 0x24 ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; 40008f3c: c4 26 40 00 st %g2, [ %i1 ] the_info->initial = the_timer->Ticker.initial; the_info->start_time = the_timer->Ticker.start_time; 40008f40: c2 26 60 08 st %g1, [ %i1 + 8 ] the_info->stop_time = the_timer->Ticker.stop_time; 40008f44: c2 02 20 28 ld [ %o0 + 0x28 ], %g1 40008f48: 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 ) 40008f4c: 05 10 00 7d sethi %hi(0x4001f400), %g2 40008f50: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 4001f7b0 <_Thread_Dispatch_disable_level> 40008f54: b0 10 20 00 clr %i0 40008f58: 82 00 7f ff add %g1, -1, %g1 40008f5c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 40008f60: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 40008f64: 80 a0 60 00 cmp %g1, 0 40008f68: 12 80 00 04 bne 40008f78 40008f6c: 01 00 00 00 nop _Thread_Dispatch(); 40008f70: 40 00 0c 17 call 4000bfcc <_Thread_Dispatch> 40008f74: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008f78: 81 c7 e0 08 ret 40008f7c: 81 e8 00 00 restore 4001396c : rtems_status_code rtems_timer_initiate_server( uint32_t priority, uint32_t stack_size, rtems_attribute attribute_set ) { 4001396c: 9d e3 bf 90 save %sp, -112, %sp /* * Make sure the requested priority is valid. */ _priority = priority; if ( priority == RTEMS_TIMER_SERVER_DEFAULT_PRIORITY ) 40013970: 92 10 20 00 clr %o1 40013974: 80 a6 3f ff cmp %i0, -1 40013978: 02 80 00 07 be 40013994 4001397c: 94 10 00 19 mov %i1, %o2 _priority = 0; else if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) 40013980: 82 06 3f ff add %i0, -1, %g1 40013984: 80 a0 60 fe cmp %g1, 0xfe 40013988: 18 80 00 48 bgu 40013aa8 4001398c: a0 10 20 13 mov 0x13, %l0 40013990: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40013994: 05 10 00 cc sethi %hi(0x40033000), %g2 40013998: c2 00 a2 90 ld [ %g2 + 0x290 ], %g1 ! 40033290 <_Thread_Dispatch_disable_level> 4001399c: 82 00 60 01 inc %g1 400139a0: c2 20 a2 90 st %g1, [ %g2 + 0x290 ] * Just to make sure the test versus create/start operation are atomic. */ _Thread_Disable_dispatch(); if ( _Timer_Server ) { 400139a4: 03 10 00 cd sethi %hi(0x40033400), %g1 400139a8: c2 00 62 48 ld [ %g1 + 0x248 ], %g1 ! 40033648 <_Timer_Server> 400139ac: 80 a0 60 00 cmp %g1, 0 400139b0: 02 80 00 06 be 400139c8 400139b4: 19 00 00 20 sethi %hi(0x8000), %o4 _Thread_Enable_dispatch(); 400139b8: 7f ff ff a0 call 40013838 <_Thread_Enable_dispatch> <== NOT EXECUTED 400139bc: a0 10 20 0e mov 0xe, %l0 <== NOT EXECUTED _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; } 400139c0: 81 c7 e0 08 ret <== NOT EXECUTED 400139c4: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * 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( 400139c8: 11 15 12 53 sethi %hi(0x54494c00), %o0 400139cc: 98 16 80 0c or %i2, %o4, %o4 400139d0: 90 12 21 45 or %o0, 0x145, %o0 400139d4: 96 10 21 00 mov 0x100, %o3 400139d8: 7f ff fa 0e call 40012210 400139dc: 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) { 400139e0: a0 92 20 00 orcc %o0, 0, %l0 400139e4: 12 80 00 2f bne 40013aa0 400139e8: d0 07 bf f4 ld [ %fp + -12 ], %o0 _Thread_Enable_dispatch(); return status; } status = rtems_task_start( 400139ec: 13 10 00 4e sethi %hi(0x40013800), %o1 400139f0: 94 10 20 00 clr %o2 400139f4: 7f ff fc 62 call 40012b7c 400139f8: 92 12 60 6c or %o1, 0x6c, %o1 id, /* the id from create */ (rtems_task_entry) _Timer_Server_body, /* the timer server entry point */ 0 /* there is no argument */ ); if (status) { 400139fc: a0 92 20 00 orcc %o0, 0, %l0 40013a00: 12 80 00 28 bne 40013aa0 40013a04: 03 10 00 cc sethi %hi(0x40033000), %g1 * * 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( 40013a08: 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 ) 40013a0c: 9a 10 61 40 or %g1, 0x140, %o5 40013a10: c4 13 60 10 lduh [ %o5 + 0x10 ], %g2 40013a14: 03 00 00 3f sethi %hi(0xfc00), %g1 40013a18: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40013a1c: 82 09 00 01 and %g4, %g1, %g1 40013a20: 80 a0 40 02 cmp %g1, %g2 40013a24: 18 80 00 05 bgu 40013a38 40013a28: 86 10 20 00 clr %g3 return NULL; return information->local_table[ index ]; 40013a2c: c4 03 60 20 ld [ %o5 + 0x20 ], %g2 40013a30: 83 28 60 02 sll %g1, 2, %g1 40013a34: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40013a38: 03 10 00 cd sethi %hi(0x40033400), %g1 40013a3c: c6 20 62 48 st %g3, [ %g1 + 0x248 ] ! 40033648 <_Timer_Server> */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013a40: 03 10 00 cc sethi %hi(0x40033000), %g1 40013a44: 82 10 61 90 or %g1, 0x190, %g1 ! 40033190 <_Timer_Ticks_chain+0x4> */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40013a48: c2 20 7f fc st %g1, [ %g1 + -4 ] 40013a4c: 82 00 7f fc add %g1, -4, %g1 ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40013a50: c0 20 e0 6c clr [ %g3 + 0x6c ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40013a54: c0 20 e0 50 clr [ %g3 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; 40013a58: c8 20 e0 68 st %g4, [ %g3 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40013a5c: 05 10 00 5a sethi %hi(0x40016800), %g2 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40013a60: c2 20 60 08 st %g1, [ %g1 + 8 ] 40013a64: 84 10 a3 60 or %g2, 0x360, %g2 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40013a68: c0 20 60 04 clr [ %g1 + 4 ] 40013a6c: c4 20 e0 64 st %g2, [ %g3 + 0x64 ] */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40013a70: 03 10 00 cc sethi %hi(0x40033000), %g1 40013a74: 82 10 61 a4 or %g1, 0x1a4, %g1 ! 400331a4 <_Timer_Seconds_chain+0x4> */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40013a78: c2 20 7f fc st %g1, [ %g1 + -4 ] 40013a7c: 82 00 7f fc add %g1, -4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40013a80: c2 20 60 08 st %g1, [ %g1 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 40013a84: c0 20 60 04 clr [ %g1 + 4 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40013a88: 03 10 00 cc sethi %hi(0x40033000), %g1 40013a8c: 82 10 61 ac or %g1, 0x1ac, %g1 ! 400331ac <_Timer_Seconds_timer> the_watchdog->routine = routine; 40013a90: c4 20 60 1c st %g2, [ %g1 + 0x1c ] the_watchdog->id = id; 40013a94: c8 20 60 20 st %g4, [ %g1 + 0x20 ] the_watchdog->user_data = user_data; 40013a98: c0 20 60 24 clr [ %g1 + 0x24 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40013a9c: c0 20 60 08 clr [ %g1 + 8 ] */ _Watchdog_Initialize( &_Timer_Server->Timer, _Thread_Delay_ended, id, NULL ); _Watchdog_Initialize( &_Timer_Seconds_timer, _Thread_Delay_ended, id, NULL ); _Thread_Enable_dispatch(); 40013aa0: 7f ff ff 66 call 40013838 <_Thread_Enable_dispatch> 40013aa4: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } 40013aa8: b0 10 00 10 mov %l0, %i0 40013aac: 81 c7 e0 08 ret 40013ab0: 81 e8 00 00 restore 400134fc : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 400134fc: 9d e3 bf 90 save %sp, -112, %sp Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 40013500: 25 10 00 cd sethi %hi(0x40033400), %l2 40013504: c2 04 a2 48 ld [ %l2 + 0x248 ], %g1 ! 40033648 <_Timer_Server> Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 40013508: a6 10 00 18 mov %i0, %l3 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 4001350c: 80 a0 60 00 cmp %g1, 0 40013510: 02 80 00 24 be 400135a0 40013514: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; if ( !routine ) 40013518: 80 a6 a0 00 cmp %i2, 0 4001351c: 02 80 00 21 be 400135a0 40013520: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; if ( ticks == 0 ) 40013524: 80 a6 60 00 cmp %i1, 0 40013528: 02 80 00 1e be 400135a0 4001352c: b0 10 20 0a mov 0xa, %i0 40013530: 11 10 00 cd sethi %hi(0x40033400), %o0 40013534: 92 10 00 13 mov %l3, %o1 40013538: 90 12 21 fc or %o0, 0x1fc, %o0 4001353c: 40 00 08 c4 call 4001584c <_Objects_Get> 40013540: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013544: c2 07 bf f4 ld [ %fp + -12 ], %g1 40013548: 80 a0 60 00 cmp %g1, 0 4001354c: 02 80 00 08 be 4001356c 40013550: a0 10 00 08 mov %o0, %l0 40013554: 82 18 60 02 xor %g1, 2, %g1 40013558: 80 a0 00 01 cmp %g0, %g1 4001355c: 82 60 20 00 subx %g0, 0, %g1 40013560: b0 08 60 15 and %g1, 0x15, %i0 40013564: 81 c7 e0 08 ret 40013568: 91 ee 20 04 restore %i0, 4, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 4001356c: a2 02 20 10 add %o0, 0x10, %l1 40013570: 40 00 13 fd call 40018564 <_Watchdog_Remove> 40013574: 90 10 00 11 mov %l1, %o0 _ISR_Disable( level ); 40013578: 7f ff dc c7 call 4000a894 4001357c: 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 ) { 40013580: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 40013584: 80 a0 60 00 cmp %g1, 0 40013588: 02 80 00 08 be 400135a8 4001358c: 82 10 20 01 mov 1, %g1 _ISR_Enable( level ); 40013590: 7f ff dc c5 call 4000a8a4 <== NOT EXECUTED 40013594: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); 40013598: 7f ff ff cc call 400134c8 <_Thread_Enable_dispatch> <== NOT EXECUTED 4001359c: 01 00 00 00 nop <== NOT EXECUTED 400135a0: 81 c7 e0 08 ret 400135a4: 81 e8 00 00 restore * 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; 400135a8: f2 24 20 1c st %i1, [ %l0 + 0x1c ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 400135ac: f4 24 20 2c st %i2, [ %l0 + 0x2c ] the_watchdog->id = id; 400135b0: e6 24 20 30 st %l3, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 400135b4: f6 24 20 34 st %i3, [ %l0 + 0x34 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400135b8: 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; 400135bc: 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 ); 400135c0: 7f ff dc b9 call 4000a8a4 400135c4: 21 10 00 cc sethi %hi(0x40033000), %l0 _Timer_Server_stop_ticks_timer(); 400135c8: d0 04 a2 48 ld [ %l2 + 0x248 ], %o0 400135cc: 40 00 13 e6 call 40018564 <_Watchdog_Remove> 400135d0: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_process_ticks_chain(); 400135d4: 40 00 00 87 call 400137f0 <_Timer_Server_process_ticks_chain> 400135d8: 01 00 00 00 nop _Watchdog_Insert( &_Timer_Ticks_chain, &the_timer->Ticker ); 400135dc: 90 14 21 8c or %l0, 0x18c, %o0 400135e0: 40 00 13 89 call 40018404 <_Watchdog_Insert> 400135e4: 92 10 00 11 mov %l1, %o1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 400135e8: c4 04 21 8c ld [ %l0 + 0x18c ], %g2 400135ec: a0 14 21 8c or %l0, 0x18c, %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400135f0: a0 04 20 04 add %l0, 4, %l0 _Timer_Server_reset_ticks_timer(); 400135f4: 80 a0 80 10 cmp %g2, %l0 400135f8: 02 80 00 08 be 40013618 400135fc: c2 04 a2 48 ld [ %l2 + 0x248 ], %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013600: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013604: 11 10 00 cc sethi %hi(0x40033000), %o0 40013608: 92 00 60 48 add %g1, 0x48, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4001360c: c4 20 60 54 st %g2, [ %g1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013610: 40 00 13 7d call 40018404 <_Watchdog_Insert> 40013614: 90 12 23 8c or %o0, 0x38c, %o0 _Thread_Enable_dispatch(); 40013618: 7f ff ff ac call 400134c8 <_Thread_Enable_dispatch> 4001361c: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013620: 81 c7 e0 08 ret 40013624: 81 e8 00 00 restore 40006e30 : static int rtems_verror( uint32_t error_flag, const char *printf_format, va_list arglist ) { 40006e30: 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) 40006e34: 03 08 00 00 sethi %hi(0x20000000), %g1 <== NOT EXECUTED 40006e38: a8 8e 00 01 andcc %i0, %g1, %l4 <== NOT EXECUTED 40006e3c: 02 80 00 10 be 40006e7c <== NOT EXECUTED 40006e40: a6 10 00 18 mov %i0, %l3 <== NOT EXECUTED { if (rtems_panic_in_progress++) 40006e44: 07 10 00 a1 sethi %hi(0x40028400), %g3 <== NOT EXECUTED 40006e48: c2 00 e0 d4 ld [ %g3 + 0xd4 ], %g1 ! 400284d4 <== NOT EXECUTED 40006e4c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40006e50: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40006e54: 02 80 00 06 be 40006e6c <== NOT EXECUTED 40006e58: c2 20 e0 d4 st %g1, [ %g3 + 0xd4 ] <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006e5c: 05 10 00 a1 sethi %hi(0x40028400), %g2 <== NOT EXECUTED 40006e60: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 400286a0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40006e64: 82 00 60 01 inc %g1 <== NOT EXECUTED 40006e68: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); /* disable task switches */ /* don't aggravate things */ if (rtems_panic_in_progress > 2) 40006e6c: c2 00 e0 d4 ld [ %g3 + 0xd4 ], %g1 <== NOT EXECUTED 40006e70: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40006e74: 34 80 00 59 bg,a 40006fd8 <== NOT EXECUTED 40006e78: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40006e7c: 03 10 00 9d sethi %hi(0x40027400), %g1 <== NOT EXECUTED 40006e80: c2 00 61 d0 ld [ %g1 + 0x1d0 ], %g1 ! 400275d0 <_impure_ptr> <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40006e84: a4 10 20 00 clr %l2 <== NOT EXECUTED /* don't aggravate things */ if (rtems_panic_in_progress > 2) return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40006e88: 40 00 3f ac call 40016d38 <== NOT EXECUTED 40006e8c: d0 00 60 08 ld [ %g1 + 8 ], %o0 <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; 40006e90: 03 1c 00 00 sethi %hi(0x70000000), %g1 <== NOT EXECUTED 40006e94: a0 2c c0 01 andn %l3, %g1, %l0 <== NOT EXECUTED if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40006e98: 03 10 00 00 sethi %hi(0x40000000), %g1 <== NOT EXECUTED 40006e9c: 80 8c c0 01 btst %l3, %g1 <== NOT EXECUTED 40006ea0: 02 80 00 05 be 40006eb4 <== NOT EXECUTED 40006ea4: 23 10 00 9d sethi %hi(0x40027400), %l1 <== NOT EXECUTED local_errno = errno; 40006ea8: 40 00 3f 47 call 40016bc4 <__errno> <== NOT EXECUTED 40006eac: 01 00 00 00 nop <== NOT EXECUTED 40006eb0: e4 02 00 00 ld [ %o0 ], %l2 <== 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); 40006eb4: c2 04 61 d0 ld [ %l1 + 0x1d0 ], %g1 <== NOT EXECUTED 40006eb8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40006ebc: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40006ec0: 40 00 58 2e call 4001cf78 <== NOT EXECUTED 40006ec4: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED if (status) 40006ec8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40006ecc: 02 80 00 0c be 40006efc <== NOT EXECUTED 40006ed0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); 40006ed4: c2 04 61 d0 ld [ %l1 + 0x1d0 ], %g1 <== NOT EXECUTED 40006ed8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40006edc: 7f ff ff ce call 40006e14 <== NOT EXECUTED 40006ee0: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 40006ee4: 13 10 00 8e sethi %hi(0x40023800), %o1 <== NOT EXECUTED 40006ee8: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40006eec: 92 12 62 38 or %o1, 0x238, %o1 <== NOT EXECUTED 40006ef0: 40 00 41 53 call 4001743c <== NOT EXECUTED 40006ef4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40006ef8: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED if (local_errno) 40006efc: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40006f00: 22 80 00 1c be,a 40006f70 <== NOT EXECUTED 40006f04: 23 10 00 9d sethi %hi(0x40027400), %l1 <== NOT EXECUTED { if ((local_errno > 0) && *strerror(local_errno)) 40006f08: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40006f0c: 04 80 00 11 ble 40006f50 <== NOT EXECUTED 40006f10: 03 10 00 9d sethi %hi(0x40027400), %g1 <== NOT EXECUTED 40006f14: 40 00 4d 2e call 4001a3cc <== NOT EXECUTED 40006f18: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40006f1c: c2 4a 00 00 ldsb [ %o0 ], %g1 <== NOT EXECUTED 40006f20: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40006f24: 02 80 00 0b be 40006f50 <== NOT EXECUTED 40006f28: 03 10 00 9d sethi %hi(0x40027400), %g1 <== NOT EXECUTED chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); 40006f2c: c2 04 61 d0 ld [ %l1 + 0x1d0 ], %g1 <== NOT EXECUTED 40006f30: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40006f34: 40 00 4d 26 call 4001a3cc <== NOT EXECUTED 40006f38: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 40006f3c: 13 10 00 8e sethi %hi(0x40023800), %o1 <== NOT EXECUTED 40006f40: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40006f44: 92 12 62 48 or %o1, 0x248, %o1 <== NOT EXECUTED 40006f48: 10 80 00 07 b 40006f64 <== NOT EXECUTED 40006f4c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); 40006f50: c2 00 61 d0 ld [ %g1 + 0x1d0 ], %g1 <== NOT EXECUTED 40006f54: 13 10 00 8e sethi %hi(0x40023800), %o1 <== NOT EXECUTED 40006f58: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40006f5c: 92 12 62 58 or %o1, 0x258, %o1 <== NOT EXECUTED 40006f60: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED 40006f64: 40 00 41 36 call 4001743c <== NOT EXECUTED 40006f68: 23 10 00 9d sethi %hi(0x40027400), %l1 <== NOT EXECUTED 40006f6c: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED } chars_written += fprintf(stderr, "\n"); 40006f70: c2 04 61 d0 ld [ %l1 + 0x1d0 ], %g1 <== NOT EXECUTED 40006f74: 13 10 00 90 sethi %hi(0x40024000), %o1 <== NOT EXECUTED 40006f78: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40006f7c: 40 00 41 30 call 4001743c <== NOT EXECUTED 40006f80: 92 12 60 e0 or %o1, 0xe0, %o1 <== NOT EXECUTED (void) fflush(stderr); 40006f84: c2 04 61 d0 ld [ %l1 + 0x1d0 ], %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"); 40006f88: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED (void) fflush(stderr); 40006f8c: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40006f90: 40 00 3f 6a call 40016d38 <== NOT EXECUTED 40006f94: b0 04 00 18 add %l0, %i0, %i0 <== NOT EXECUTED if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT)) 40006f98: 03 0c 00 00 sethi %hi(0x30000000), %g1 <== NOT EXECUTED 40006f9c: 80 8c c0 01 btst %l3, %g1 <== NOT EXECUTED 40006fa0: 02 80 00 0e be 40006fd8 <== NOT EXECUTED 40006fa4: 80 a5 20 00 cmp %l4, 0 <== NOT EXECUTED { if (error_flag & RTEMS_ERROR_PANIC) 40006fa8: 02 80 00 07 be 40006fc4 <== NOT EXECUTED 40006fac: 90 10 20 00 clr %o0 <== NOT EXECUTED { rtems_error(0, "fatal error, exiting"); 40006fb0: 13 10 00 8e sethi %hi(0x40023800), %o1 <== NOT EXECUTED 40006fb4: 40 00 00 18 call 40007014 <== NOT EXECUTED 40006fb8: 92 12 62 70 or %o1, 0x270, %o1 ! 40023a70 <== NOT EXECUTED _exit(local_errno); 40006fbc: 40 00 02 43 call 400078c8 <_exit> <== NOT EXECUTED 40006fc0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED } else { rtems_error(0, "fatal error, aborting"); 40006fc4: 13 10 00 8e sethi %hi(0x40023800), %o1 <== NOT EXECUTED 40006fc8: 40 00 00 13 call 40007014 <== NOT EXECUTED 40006fcc: 92 12 62 88 or %o1, 0x288, %o1 ! 40023a88 <== NOT EXECUTED abort(); 40006fd0: 40 00 3e ef call 40016b8c <== NOT EXECUTED 40006fd4: 01 00 00 00 nop <== NOT EXECUTED } } return chars_written; } 40006fd8: 81 c7 e0 08 ret <== NOT EXECUTED 40006fdc: 81 e8 00 00 restore <== NOT EXECUTED 400176f8 : /* * Extract an integer value from the database */ static int scanInt(FILE *fp, int *val) { 400176f8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED 400176fc: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 <== NOT EXECUTED 40017700: a2 10 20 00 clr %l1 <== NOT EXECUTED 40017704: a6 10 63 ff or %g1, 0x3ff, %l3 <== NOT EXECUTED 40017708: a4 10 20 00 clr %l2 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 4001770c: 2b 10 00 e5 sethi %hi(0x40039400), %l5 <== NOT EXECUTED limit++; continue; } sign = 1; } if (!isdigit(c)) 40017710: 29 10 00 e5 sethi %hi(0x40039400), %l4 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40017714: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40017718: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001771c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017720: 16 80 00 07 bge 4001773c <== NOT EXECUTED 40017724: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40017728: d0 05 60 48 ld [ %l5 + 0x48 ], %o0 <== NOT EXECUTED 4001772c: 40 00 3a ef call 400262e8 <__srget_r> <== NOT EXECUTED 40017730: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40017734: 10 80 00 06 b 4001774c <== NOT EXECUTED 40017738: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4001773c: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40017740: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED 40017744: e0 08 40 00 ldub [ %g1 ], %l0 <== NOT EXECUTED 40017748: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED if (c == ':') 4001774c: 80 a4 20 3a cmp %l0, 0x3a <== NOT EXECUTED 40017750: 02 80 00 20 be 400177d0 <== NOT EXECUTED 40017754: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED break; if (sign == 0) { 40017758: 12 80 00 08 bne 40017778 <== NOT EXECUTED 4001775c: c2 05 20 40 ld [ %l4 + 0x40 ], %g1 <== NOT EXECUTED if (c == '-') { 40017760: 80 a4 20 2d cmp %l0, 0x2d <== NOT EXECUTED 40017764: 12 80 00 05 bne 40017778 <== NOT EXECUTED 40017768: a4 10 20 01 mov 1, %l2 <== NOT EXECUTED sign = -1; limit++; 4001776c: a6 04 e0 01 inc %l3 <== NOT EXECUTED 40017770: 10 bf ff e9 b 40017714 <== NOT EXECUTED 40017774: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED continue; } sign = 1; } if (!isdigit(c)) 40017778: c2 08 40 10 ldub [ %g1 + %l0 ], %g1 <== NOT EXECUTED 4001777c: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 40017780: 02 80 00 1c be 400177f0 <== NOT EXECUTED 40017784: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED return 0; d = c - '0'; if ((i > (limit / 10)) 40017788: 40 00 6a 19 call 40031fec <.udiv> <== NOT EXECUTED 4001778c: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 40017790: 80 a4 40 08 cmp %l1, %o0 <== NOT EXECUTED 40017794: 18 80 00 17 bgu 400177f0 <== NOT EXECUTED 40017798: 01 00 00 00 nop <== NOT EXECUTED 4001779c: 12 80 00 08 bne 400177bc <== NOT EXECUTED 400177a0: a0 04 3f d0 add %l0, -48, %l0 <== NOT EXECUTED 400177a4: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 400177a8: 40 00 6a bd call 4003229c <.urem> <== NOT EXECUTED 400177ac: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 400177b0: 80 a4 00 08 cmp %l0, %o0 <== NOT EXECUTED 400177b4: 18 80 00 0f bgu 400177f0 <== NOT EXECUTED 400177b8: 01 00 00 00 nop <== NOT EXECUTED || ((i == (limit / 10)) && (d > (limit % 10)))) return 0; i = i * 10 + d; 400177bc: 85 2c 60 03 sll %l1, 3, %g2 <== NOT EXECUTED 400177c0: 83 2c 60 01 sll %l1, 1, %g1 <== NOT EXECUTED 400177c4: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 400177c8: 10 bf ff d3 b 40017714 <== NOT EXECUTED 400177cc: a2 04 00 01 add %l0, %g1, %l1 <== NOT EXECUTED } if (sign == 0) 400177d0: 02 80 00 08 be 400177f0 <== NOT EXECUTED 400177d4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED return 0; *val = i * sign; 400177d8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 400177dc: 7f ff ae 07 call 40002ff8 <.umul> <== NOT EXECUTED 400177e0: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED 400177e4: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED 400177e8: 81 c7 e0 08 ret <== NOT EXECUTED 400177ec: 81 e8 00 00 restore <== NOT EXECUTED return 1; } 400177f0: 81 c7 e0 08 ret <== NOT EXECUTED 400177f4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 400177f8 : /* * Extract a string value from the database */ static int scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag) { 400177f8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int c; *name = *bufp; 400177fc: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40017800: c2 26 40 00 st %g1, [ %i1 ] <== NOT EXECUTED for (;;) { c = getc(fp); 40017804: 33 10 00 e5 sethi %hi(0x40039400), %i1 <== NOT EXECUTED 40017808: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 4001780c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40017810: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017814: 16 80 00 07 bge 40017830 <== NOT EXECUTED 40017818: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 4001781c: d0 06 60 48 ld [ %i1 + 0x48 ], %o0 <== NOT EXECUTED 40017820: 40 00 3a b2 call 400262e8 <__srget_r> <== NOT EXECUTED 40017824: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (c == ':') { 40017828: 10 80 00 07 b 40017844 <== NOT EXECUTED 4001782c: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED { int c; *name = *bufp; for (;;) { c = getc(fp); 40017830: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40017834: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED 40017838: d0 08 40 00 ldub [ %g1 ], %o0 <== NOT EXECUTED 4001783c: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED if (c == ':') { 40017840: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED 40017844: 12 80 00 07 bne 40017860 <== NOT EXECUTED 40017848: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED if (nlFlag) 4001784c: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40017850: 22 80 00 1a be,a 400178b8 <== NOT EXECUTED 40017854: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); } **bufp = '\0'; ++(*bufp); --(*nleft); return 1; 40017858: 81 c7 e0 08 ret <== NOT EXECUTED 4001785c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (c == ':') { if (nlFlag) return 0; break; } if (c == '\n') { 40017860: 12 80 00 07 bne 4001787c <== NOT EXECUTED 40017864: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED if (!nlFlag) 40017868: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 4001786c: 32 80 00 13 bne,a 400178b8 <== NOT EXECUTED 40017870: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); } **bufp = '\0'; ++(*bufp); --(*nleft); return 1; 40017874: 81 c7 e0 08 ret <== NOT EXECUTED 40017878: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (c == '\n') { if (!nlFlag) return 0; break; } if (c == EOF) 4001787c: 22 80 00 17 be,a 400178d8 <== NOT EXECUTED 40017880: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; if (*nleft < 2) 40017884: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED 40017888: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001788c: 28 80 00 13 bleu,a 400178d8 <== NOT EXECUTED 40017890: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; **bufp = c; 40017894: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40017898: d0 28 40 00 stb %o0, [ %g1 ] <== NOT EXECUTED ++(*bufp); 4001789c: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); 400178a0: c4 06 c0 00 ld [ %i3 ], %g2 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 400178a4: 82 00 60 01 inc %g1 <== NOT EXECUTED --(*nleft); 400178a8: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 400178ac: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED --(*nleft); 400178b0: 10 bf ff d6 b 40017808 <== NOT EXECUTED 400178b4: c4 26 c0 00 st %g2, [ %i3 ] <== NOT EXECUTED } **bufp = '\0'; 400178b8: c0 28 40 00 clrb [ %g1 ] <== NOT EXECUTED ++(*bufp); 400178bc: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); 400178c0: c4 06 c0 00 ld [ %i3 ], %g2 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 400178c4: 82 00 60 01 inc %g1 <== NOT EXECUTED --(*nleft); 400178c8: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 400178cc: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED --(*nleft); 400178d0: c4 26 c0 00 st %g2, [ %i3 ] <== NOT EXECUTED 400178d4: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return 1; } 400178d8: 81 c7 e0 08 ret <== NOT EXECUTED 400178dc: 81 e8 00 00 restore <== NOT EXECUTED 400178e0 : FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 400178e0: 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) 400178e4: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 400178e8: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 400178ec: 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) 400178f0: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 400178f4: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 400178f8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400178fc: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40017900: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017904: 7f ff ff bd call 400177f8 <== NOT EXECUTED 40017908: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001790c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017910: 02 80 00 42 be 40017a18 <== NOT EXECUTED 40017914: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017918: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 4001791c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017920: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017924: 7f ff ff b5 call 400177f8 <== NOT EXECUTED 40017928: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001792c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017930: 02 80 00 3a be 40017a18 <== NOT EXECUTED 40017934: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017938: 7f ff ff 70 call 400176f8 <== NOT EXECUTED 4001793c: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 40017940: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017944: 02 80 00 35 be 40017a18 <== NOT EXECUTED 40017948: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001794c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017950: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017954: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 40017958: 7f ff ff a8 call 400177f8 <== NOT EXECUTED 4001795c: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 40017960: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017964: 02 80 00 2d be 40017a18 <== NOT EXECUTED 40017968: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED grp->gr_gid = grgid; /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 4001796c: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== 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; 40017970: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40017974: 10 80 00 05 b 40017988 <== NOT EXECUTED 40017978: 86 10 20 01 mov 1, %g3 <== NOT EXECUTED if(*cp == ',') memcount++; 4001797c: 82 18 60 2c xor %g1, 0x2c, %g1 <== NOT EXECUTED 40017980: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40017984: 86 60 ff ff subx %g3, -1, %g3 <== NOT EXECUTED grp->gr_gid = grgid; /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40017988: c2 48 80 00 ldsb [ %g2 ], %g1 <== NOT EXECUTED 4001798c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40017990: 12 bf ff fb bne 4001797c <== NOT EXECUTED 40017994: 84 00 a0 01 inc %g2 <== NOT EXECUTED } /* * Hack to produce (hopefully) a suitably-aligned array of pointers */ if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 40017998: c4 07 a0 50 ld [ %fp + 0x50 ], %g2 <== NOT EXECUTED 4001799c: 83 28 e0 02 sll %g3, 2, %g1 <== NOT EXECUTED 400179a0: 82 00 60 13 add %g1, 0x13, %g1 <== NOT EXECUTED 400179a4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400179a8: 0a 80 00 1c bcs 40017a18 <== NOT EXECUTED 400179ac: c2 07 a0 4c ld [ %fp + 0x4c ], %g1 <== NOT EXECUTED grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15); /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 400179b0: 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); 400179b4: 82 00 60 0f add %g1, 0xf, %g1 <== NOT EXECUTED 400179b8: 82 08 7f f0 and %g1, -16, %g1 <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 400179bc: c4 20 40 00 st %g2, [ %g1 ] <== 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); 400179c0: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 400179c4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400179c8: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED 400179cc: 10 80 00 0a b 400179f4 <== NOT EXECUTED 400179d0: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { if(*cp == ',') { 400179d4: 32 80 00 08 bne,a 400179f4 <== NOT EXECUTED 400179d8: 86 00 e0 01 inc %g3 <== NOT EXECUTED *cp = '\0'; 400179dc: c0 28 ff ff clrb [ %g3 + -1 ] <== NOT EXECUTED grp->gr_mem[memcount++] = cp + 1; 400179e0: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 400179e4: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 400179e8: 88 01 20 01 inc %g4 <== NOT EXECUTED 400179ec: c6 20 80 01 st %g3, [ %g2 + %g1 ] <== NOT EXECUTED 400179f0: 86 00 e0 01 inc %g3 <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 400179f4: c2 48 ff ff ldsb [ %g3 + -1 ], %g1 <== NOT EXECUTED 400179f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400179fc: 32 bf ff f6 bne,a 400179d4 <== NOT EXECUTED 40017a00: 80 a0 60 2c cmp %g1, 0x2c <== NOT EXECUTED if(*cp == ',') { *cp = '\0'; grp->gr_mem[memcount++] = cp + 1; } } grp->gr_mem[memcount] = NULL; 40017a04: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 40017a08: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 40017a0c: c0 20 80 01 clr [ %g2 + %g1 ] <== NOT EXECUTED 40017a10: 81 c7 e0 08 ret <== NOT EXECUTED 40017a14: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED return 1; } 40017a18: 81 c7 e0 08 ret <== NOT EXECUTED 40017a1c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40017a68 : FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40017a68: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40017a6c: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40017a70: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40017a74: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40017a78: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 40017a7c: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 40017a80: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017a84: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40017a88: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017a8c: 7f ff ff 5b call 400177f8 <== NOT EXECUTED 40017a90: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017a94: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017a98: 02 80 00 39 be 40017b7c <== NOT EXECUTED 40017a9c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017aa0: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 40017aa4: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017aa8: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017aac: 7f ff ff 53 call 400177f8 <== NOT EXECUTED 40017ab0: 98 10 20 00 clr %o4 <== NOT EXECUTED 40017ab4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017ab8: 02 80 00 31 be 40017b7c <== NOT EXECUTED 40017abc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017ac0: 7f ff ff 0e call 400176f8 <== NOT EXECUTED 40017ac4: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 40017ac8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017acc: 02 80 00 2c be 40017b7c <== NOT EXECUTED 40017ad0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017ad4: 7f ff ff 09 call 400176f8 <== NOT EXECUTED 40017ad8: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 40017adc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017ae0: 02 80 00 27 be 40017b7c <== NOT EXECUTED 40017ae4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017ae8: 92 06 60 0c add %i1, 0xc, %o1 <== NOT EXECUTED 40017aec: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017af0: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017af4: 7f ff ff 41 call 400177f8 <== NOT EXECUTED 40017af8: 98 10 20 00 clr %o4 <== NOT EXECUTED 40017afc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017b00: 02 80 00 1f be 40017b7c <== NOT EXECUTED 40017b04: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017b08: 92 06 60 10 add %i1, 0x10, %o1 <== NOT EXECUTED 40017b0c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017b10: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017b14: 7f ff ff 39 call 400177f8 <== NOT EXECUTED 40017b18: 98 10 20 00 clr %o4 <== NOT EXECUTED 40017b1c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017b20: 02 80 00 17 be 40017b7c <== NOT EXECUTED 40017b24: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017b28: 92 06 60 14 add %i1, 0x14, %o1 <== NOT EXECUTED 40017b2c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017b30: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017b34: 7f ff ff 31 call 400177f8 <== NOT EXECUTED 40017b38: 98 10 20 00 clr %o4 <== NOT EXECUTED 40017b3c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017b40: 02 80 00 0f be 40017b7c <== NOT EXECUTED 40017b44: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40017b48: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40017b4c: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40017b50: 92 06 60 18 add %i1, 0x18, %o1 <== NOT EXECUTED 40017b54: 7f ff ff 29 call 400177f8 <== NOT EXECUTED 40017b58: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 40017b5c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017b60: 02 80 00 07 be 40017b7c <== NOT EXECUTED 40017b64: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== 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; 40017b68: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED pwd->pw_gid = pwgid; 40017b6c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40017b70: c2 36 60 0a sth %g1, [ %i1 + 0xa ] <== NOT EXECUTED 40017b74: 81 c7 e0 08 ret <== NOT EXECUTED 40017b78: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED return 1; } 40017b7c: 81 c7 e0 08 ret <== NOT EXECUTED 40017b80: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40017694 : int setgid( gid_t gid ) { _POSIX_types_Gid = gid; 40017694: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40017698: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 40038560 <== NOT EXECUTED 4001769c: d0 30 60 2a sth %o0, [ %g1 + 0x2a ] <== NOT EXECUTED return 0; } 400176a0: 81 c3 e0 08 retl <== NOT EXECUTED 400176a4: 90 10 20 00 clr %o0 <== NOT EXECUTED 40017ca8 : return NULL; return &grent; } void setgrent(void) { 40017ca8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 40017cac: 7f ff ff c8 call 40017bcc <== NOT EXECUTED 40017cb0: 21 10 00 e7 sethi %hi(0x40039c00), %l0 <== NOT EXECUTED if (group_fp != NULL) 40017cb4: d0 04 21 c4 ld [ %l0 + 0x1c4 ], %o0 ! 40039dc4 <== NOT EXECUTED 40017cb8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017cbc: 22 80 00 05 be,a 40017cd0 <== NOT EXECUTED 40017cc0: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED fclose(group_fp); 40017cc4: 40 00 2c 93 call 40022f10 <== NOT EXECUTED 40017cc8: 01 00 00 00 nop <== NOT EXECUTED group_fp = fopen("/etc/group", "r"); 40017ccc: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 40017cd0: 13 10 00 de sethi %hi(0x40037800), %o1 <== NOT EXECUTED 40017cd4: 90 12 22 10 or %o0, 0x210, %o0 <== NOT EXECUTED 40017cd8: 40 00 2e 8c call 40023708 <== NOT EXECUTED 40017cdc: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40017ce0: d0 24 21 c4 st %o0, [ %l0 + 0x1c4 ] <== NOT EXECUTED } 40017ce4: 81 c7 e0 08 ret <== NOT EXECUTED 40017ce8: 81 e8 00 00 restore <== NOT EXECUTED 40017e98 : return NULL; return &pwent; } void setpwent(void) { 40017e98: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 40017e9c: 7f ff ff 4c call 40017bcc <== NOT EXECUTED 40017ea0: 21 10 00 e7 sethi %hi(0x40039c00), %l0 <== NOT EXECUTED if (passwd_fp != NULL) 40017ea4: d0 04 20 dc ld [ %l0 + 0xdc ], %o0 ! 40039cdc <== NOT EXECUTED 40017ea8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017eac: 22 80 00 05 be,a 40017ec0 <== NOT EXECUTED 40017eb0: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED fclose(passwd_fp); 40017eb4: 40 00 2c 17 call 40022f10 <== NOT EXECUTED 40017eb8: 01 00 00 00 nop <== NOT EXECUTED passwd_fp = fopen("/etc/passwd", "r"); 40017ebc: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== NOT EXECUTED 40017ec0: 13 10 00 de sethi %hi(0x40037800), %o1 <== NOT EXECUTED 40017ec4: 90 12 21 98 or %o0, 0x198, %o0 <== NOT EXECUTED 40017ec8: 40 00 2e 10 call 40023708 <== NOT EXECUTED 40017ecc: 92 12 60 78 or %o1, 0x78, %o1 <== NOT EXECUTED 40017ed0: d0 24 20 dc st %o0, [ %l0 + 0xdc ] <== NOT EXECUTED } 40017ed4: 81 c7 e0 08 ret <== NOT EXECUTED 40017ed8: 81 e8 00 00 restore <== NOT EXECUTED 40018098 : int setuid( uid_t uid ) { _POSIX_types_Uid = uid; 40018098: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 4001809c: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 40038560 <== NOT EXECUTED 400180a0: d0 30 60 28 sth %o0, [ %g1 + 0x28 ] <== NOT EXECUTED return 0; } 400180a4: 81 c3 e0 08 retl <== NOT EXECUTED 400180a8: 90 10 20 00 clr %o0 <== NOT EXECUTED 40004ba4 : /* * Process input character, with semaphore. */ static int siproc (unsigned char c, struct rtems_termios_tty *tty) { 40004ba4: 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)) { 40004ba8: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40004bac: 80 88 6e 78 btst 0xe78, %g1 <== NOT EXECUTED 40004bb0: 12 80 00 04 bne 40004bc0 <== NOT EXECUTED 40004bb4: b0 0e 20 ff and %i0, 0xff, %i0 <== 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); 40004bb8: 7f ff ff 89 call 400049dc <== NOT EXECUTED 40004bbc: 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); 40004bc0: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED 40004bc4: 94 10 20 00 clr %o2 <== NOT EXECUTED 40004bc8: 40 00 06 f7 call 400067a4 <== NOT EXECUTED 40004bcc: 92 10 20 00 clr %o1 <== NOT EXECUTED i = iproc (c, tty); 40004bd0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40004bd4: 7f ff ff 82 call 400049dc <== NOT EXECUTED 40004bd8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40004bdc: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_semaphore_release (tty->osem); 40004be0: 40 00 07 b8 call 40006ac0 <== NOT EXECUTED 40004be4: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED } else { i = iproc (c, tty); } return i; } 40004be8: 81 c7 e0 08 ret <== NOT EXECUTED 40004bec: 81 e8 00 00 restore <== NOT EXECUTED 4000724c : int _STAT_NAME( const char *path, struct stat *buf ) { 4000724c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !buf ) 40007250: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40007254: 12 80 00 06 bne 4000726c <== NOT EXECUTED 40007258: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); 4000725c: 40 00 6e e6 call 40022df4 <__errno> <== NOT EXECUTED 40007260: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40007264: 10 80 00 1c b 400072d4 <== NOT EXECUTED 40007268: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED status = rtems_filesystem_evaluate_path( path, 0, &loc, _STAT_FOLLOW_LINKS ); 4000726c: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40007270: 92 10 20 00 clr %o1 <== NOT EXECUTED 40007274: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40007278: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 4000727c: 7f ff fa 21 call 40005b00 <== NOT EXECUTED 40007280: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 40007284: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40007288: 12 80 00 14 bne 400072d8 <== NOT EXECUTED 4000728c: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED return -1; if ( !loc.handlers->fstat_h ){ 40007290: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 40007294: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007298: 12 80 00 12 bne 400072e0 <== NOT EXECUTED 4000729c: 92 10 20 00 clr %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 400072a0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400072a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400072a8: 02 80 00 08 be 400072c8 <== NOT EXECUTED 400072ac: 01 00 00 00 nop <== NOT EXECUTED 400072b0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400072b4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400072b8: 02 80 00 04 be 400072c8 <== NOT EXECUTED 400072bc: 01 00 00 00 nop <== NOT EXECUTED 400072c0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400072c4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 400072c8: 40 00 6e cb call 40022df4 <__errno> <== NOT EXECUTED 400072cc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400072d0: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400072d4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400072d8: 81 c7 e0 08 ret <== NOT EXECUTED 400072dc: 81 e8 00 00 restore <== NOT EXECUTED /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( buf, 0, sizeof(struct stat) ); 400072e0: 94 10 20 50 mov 0x50, %o2 <== NOT EXECUTED 400072e4: 40 00 75 d9 call 40024a48 <== NOT EXECUTED 400072e8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED status = (*loc.handlers->fstat_h)( &loc, buf ); 400072ec: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED 400072f0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 400072f4: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 400072f8: 9f c0 40 00 call %g1 <== NOT EXECUTED 400072fc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40007300: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40007304: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007308: 02 bf ff f4 be 400072d8 <== NOT EXECUTED 4000730c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40007310: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40007314: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007318: 02 80 00 04 be 40007328 <== NOT EXECUTED 4000731c: 01 00 00 00 nop <== NOT EXECUTED 40007320: 9f c0 40 00 call %g1 <== NOT EXECUTED 40007324: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return status; } 40007328: 81 c7 e0 08 ret <== NOT EXECUTED 4000732c: 81 e8 00 00 restore <== NOT EXECUTED 40018640 : int tcdrain( int fd ) { return ioctl( fd, RTEMS_IO_TCDRAIN, 0 ); 40018640: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40018644: 94 10 20 00 clr %o2 <== NOT EXECUTED 40018648: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001864c: 40 00 22 37 call 40020f28 <== NOT EXECUTED 40018650: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40018654: 01 00 00 00 nop 40013080 : int tcgetattr( int fd, struct termios *tp ) { 40013080: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED return ioctl( fd, RTEMS_IO_GET_ATTRIBUTES, tp ); 40013084: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40013088: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001308c: 40 00 0d 4d call 400165c0 <== NOT EXECUTED 40013090: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40013094: 01 00 00 00 nop 40013098 : int tcsetattr( int fd, int opt, struct termios *tp ) { 40013098: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch (opt) { 4001309c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400130a0: 02 80 00 10 be 400130e0 <== NOT EXECUTED 400130a4: 80 a6 60 01 cmp %i1, 1 <== NOT EXECUTED 400130a8: 02 80 00 08 be 400130c8 <== NOT EXECUTED 400130ac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 400130b0: 40 00 0e c5 call 40016bc4 <__errno> <== NOT EXECUTED 400130b4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400130b8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400130bc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400130c0: 81 c7 e0 08 ret <== NOT EXECUTED 400130c4: 81 e8 00 00 restore <== NOT EXECUTED case TCSADRAIN: if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0) 400130c8: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 400130cc: 40 00 0d 3d call 400165c0 <== NOT EXECUTED 400130d0: 94 10 20 00 clr %o2 <== NOT EXECUTED 400130d4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400130d8: 26 80 00 04 bl,a 400130e8 <== NOT EXECUTED 400130dc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED return -1; /* * Fall through to.... */ case TCSANOW: return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp ); 400130e0: 40 00 0d 38 call 400165c0 <== NOT EXECUTED 400130e4: 93 e8 20 02 restore %g0, 2, %o1 <== NOT EXECUTED } } 400130e8: 81 c7 e0 08 ret <== NOT EXECUTED 400130ec: 81 e8 00 00 restore <== NOT EXECUTED 400187cc : */ char *ttyname( int fd ) { 400187cc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !ttyname_r( fd, ttyname_buf, sizeof(ttyname_buf) ) ) 400187d0: 21 10 00 e1 sethi %hi(0x40038400), %l0 <== NOT EXECUTED 400187d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400187d8: 94 10 24 06 mov 0x406, %o2 <== NOT EXECUTED 400187dc: 92 14 22 d0 or %l0, 0x2d0, %o1 <== NOT EXECUTED 400187e0: 7f ff ff ba call 400186c8 <== NOT EXECUTED 400187e4: b0 14 22 d0 or %l0, 0x2d0, %i0 <== NOT EXECUTED 400187e8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400187ec: 32 80 00 02 bne,a 400187f4 <== NOT EXECUTED 400187f0: b0 10 20 00 clr %i0 <== NOT EXECUTED return ttyname_buf; return NULL; } 400187f4: 81 c7 e0 08 ret <== NOT EXECUTED 400187f8: 81 e8 00 00 restore <== NOT EXECUTED 400186c8 : int ttyname_r( int fd, char *name, int namesize ) { 400186c8: 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) 400186cc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400186d0: 7f ff ff e2 call 40018658 <== NOT EXECUTED 400186d4: 92 07 bf d4 add %fp, -44, %o1 <== NOT EXECUTED 400186d8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400186dc: 06 80 00 14 bl 4001872c <== NOT EXECUTED 400186e0: 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)) 400186e4: 40 00 21 a6 call 40020d7c <== NOT EXECUTED 400186e8: 92 07 bf 80 add %fp, -128, %o1 <== NOT EXECUTED 400186ec: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400186f0: 12 80 00 0f bne 4001872c <== NOT EXECUTED 400186f4: c2 17 bf 8c lduh [ %fp + -116 ], %g1 <== NOT EXECUTED 400186f8: 05 00 00 3c sethi %hi(0xf000), %g2 <== NOT EXECUTED 400186fc: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 40018700: 05 00 00 08 sethi %hi(0x2000), %g2 <== NOT EXECUTED 40018704: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40018708: 12 80 00 09 bne 4001872c <== NOT EXECUTED 4001870c: 11 10 00 d5 sethi %hi(0x40035400), %o0 <== 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); 40018710: 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) 40018714: 90 12 22 50 or %o0, 0x250, %o0 <== NOT EXECUTED 40018718: 7f ff fe 90 call 40018158 <== NOT EXECUTED 4001871c: a2 07 bf 30 add %fp, -208, %l1 <== NOT EXECUTED 40018720: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40018724: 12 80 00 20 bne 400187a4 <== NOT EXECUTED 40018728: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EBADF); 4001872c: 40 00 29 b2 call 40022df4 <__errno> <== NOT EXECUTED 40018730: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 40018734: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 40018738: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001873c: 81 c7 e0 08 ret <== NOT EXECUTED 40018740: 81 e8 00 00 restore <== NOT EXECUTED for (rval = NULL; (dirp = readdir (dp)) != NULL ;) { if (dirp->d_ino != sb.st_ino) 40018744: c2 07 bf 88 ld [ %fp + -120 ], %g1 <== NOT EXECUTED 40018748: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001874c: 12 80 00 16 bne 400187a4 <== NOT EXECUTED 40018750: 92 02 20 0c add %o0, 0xc, %o1 <== NOT EXECUTED continue; strcpy (name + sizeof (_PATH_DEV) - 1, dirp->d_name); 40018754: 40 00 38 9f call 400269d0 <== NOT EXECUTED 40018758: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if (stat (name, &dsb) || sb.st_dev != dsb.st_dev || 4001875c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 40018760: 7f ff ba bb call 4000724c <== NOT EXECUTED 40018764: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 40018768: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001876c: 12 80 00 0e bne 400187a4 <== NOT EXECUTED 40018770: c4 07 bf 80 ld [ %fp + -128 ], %g2 <== NOT EXECUTED 40018774: c2 07 bf 30 ld [ %fp + -208 ], %g1 <== NOT EXECUTED 40018778: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001877c: 12 80 00 0a bne 400187a4 <== NOT EXECUTED 40018780: c4 07 bf 84 ld [ %fp + -124 ], %g2 <== NOT EXECUTED 40018784: c2 07 bf 34 ld [ %fp + -204 ], %g1 <== NOT EXECUTED 40018788: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001878c: 12 80 00 06 bne 400187a4 <== NOT EXECUTED 40018790: c4 07 bf 88 ld [ %fp + -120 ], %g2 <== NOT EXECUTED 40018794: c2 07 bf 38 ld [ %fp + -200 ], %g1 <== NOT EXECUTED 40018798: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001879c: 02 80 00 08 be 400187bc <== NOT EXECUTED 400187a0: 90 10 00 18 mov %i0, %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); for (rval = NULL; (dirp = readdir (dp)) != NULL ;) 400187a4: 7f ff ff 23 call 40018430 <== NOT EXECUTED 400187a8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400187ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400187b0: 32 bf ff e5 bne,a 40018744 <== NOT EXECUTED 400187b4: c4 02 00 00 ld [ %o0 ], %g2 <== NOT EXECUTED sb.st_ino != dsb.st_ino) continue; rval = name; break; } (void) closedir (dp); 400187b8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400187bc: 7f ff f9 d1 call 40016f00 <== NOT EXECUTED 400187c0: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 400187c4: 81 c7 e0 08 ret <== NOT EXECUTED 400187c8: 81 e8 00 00 restore <== NOT EXECUTED 400187fc : mode_t cmask ) { mode_t old_mask; old_mask = rtems_filesystem_umask; 400187fc: 03 10 00 e1 sethi %hi(0x40038400), %g1 <== NOT EXECUTED 40018800: c4 00 61 60 ld [ %g1 + 0x160 ], %g2 ! 40038560 <== NOT EXECUTED 40018804: c2 10 a0 24 lduh [ %g2 + 0x24 ], %g1 <== NOT EXECUTED rtems_filesystem_umask = cmask; 40018808: d0 30 a0 24 sth %o0, [ %g2 + 0x24 ] <== NOT EXECUTED 4001880c: 83 28 60 10 sll %g1, 0x10, %g1 <== NOT EXECUTED return old_mask; } 40018810: 81 c3 e0 08 retl <== NOT EXECUTED 40018814: 91 30 60 10 srl %g1, 0x10, %o0 <== NOT EXECUTED 40018818 : #include int unlink( const char *path ) { 40018818: 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 ); 4001881c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40018820: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018824: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40018828: 96 10 20 00 clr %o3 <== NOT EXECUTED 4001882c: 7f ff b4 b5 call 40005b00 <== NOT EXECUTED 40018830: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 40018834: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018838: 32 80 00 17 bne,a 40018894 <== NOT EXECUTED 4001883c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 40018840: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 40018844: 7f ff b4 82 call 40005a4c <== NOT EXECUTED 40018848: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0 && errno != ENOTSUP) { 4001884c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018850: 02 80 00 13 be 4001889c <== NOT EXECUTED 40018854: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40018858: 40 00 29 67 call 40022df4 <__errno> <== NOT EXECUTED 4001885c: 01 00 00 00 nop <== NOT EXECUTED 40018860: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40018864: 80 a0 60 86 cmp %g1, 0x86 <== NOT EXECUTED 40018868: 02 80 00 0d be 4001889c <== NOT EXECUTED 4001886c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40018870: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018874: 02 80 00 08 be 40018894 <== NOT EXECUTED 40018878: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001887c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018880: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018884: 02 80 00 04 be 40018894 <== NOT EXECUTED 40018888: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001888c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018890: 01 00 00 00 nop <== NOT EXECUTED 40018894: 81 c7 e0 08 ret <== NOT EXECUTED 40018898: 81 e8 00 00 restore <== NOT EXECUTED return -1; } if ( !loc.ops->node_type_h ) { 4001889c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 400188a0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400188a4: 12 80 00 07 bne 400188c0 <== NOT EXECUTED 400188a8: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 400188ac: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400188b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400188b4: 12 80 00 1d bne 40018928 <== NOT EXECUTED 400188b8: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 400188bc: 30 80 00 1d b,a 40018930 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { 400188c0: 9f c0 80 00 call %g2 <== NOT EXECUTED 400188c4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400188c8: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 400188cc: 12 80 00 0f bne 40018908 <== NOT EXECUTED 400188d0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 400188d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400188d8: 02 80 00 08 be 400188f8 <== NOT EXECUTED 400188dc: 01 00 00 00 nop <== NOT EXECUTED 400188e0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400188e4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400188e8: 02 80 00 04 be 400188f8 <== NOT EXECUTED 400188ec: 01 00 00 00 nop <== NOT EXECUTED 400188f0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400188f4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); 400188f8: 40 00 29 3f call 40022df4 <__errno> <== NOT EXECUTED 400188fc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40018900: 10 80 00 0f b 4001893c <== NOT EXECUTED 40018904: 82 10 20 15 mov 0x15, %g1 <== NOT EXECUTED } if ( !loc.ops->unlink_h ) { 40018908: c4 00 60 0c ld [ %g1 + 0xc ], %g2 <== NOT EXECUTED 4001890c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40018910: 12 80 00 0e bne 40018948 <== NOT EXECUTED 40018914: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40018918: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001891c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018920: 02 80 00 04 be 40018930 <== NOT EXECUTED 40018924: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018928: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001892c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40018930: 40 00 29 31 call 40022df4 <__errno> <== NOT EXECUTED 40018934: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 40018938: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4001893c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018940: 81 c7 e0 08 ret <== NOT EXECUTED 40018944: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.ops->unlink_h)( &loc ); 40018948: 9f c0 80 00 call %g2 <== NOT EXECUTED 4001894c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40018950: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40018954: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018958: 02 bf ff cf be 40018894 <== NOT EXECUTED 4001895c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40018960: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40018964: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018968: 02 80 00 06 be 40018980 <== NOT EXECUTED 4001896c: 01 00 00 00 nop <== NOT EXECUTED 40018970: 9f c0 40 00 call %g1 <== NOT EXECUTED 40018974: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40018978: 81 c7 e0 08 ret <== NOT EXECUTED 4001897c: 81 e8 00 00 restore <== NOT EXECUTED return result; } 40018980: 81 c7 e0 08 ret <== NOT EXECUTED 40018984: 81 e8 00 00 restore <== NOT EXECUTED 40003b78 : | Arguments: as in printf: fmt - format string, ... - unnamed arguments. | Returns: Nothing. +--------------------------------------------------------------------------*/ void vprintk(const char *fmt, va_list ap) { 40003b78: 9d e3 bf 80 save %sp, -128, %sp for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]); 40003b7c: 03 10 00 60 sethi %hi(0x40018000), %g1 printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), base, sign, width, lead); } else { BSP_output_char(*fmt); 40003b80: 2d 10 00 63 sethi %hi(0x40018c00), %l6 for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]); 40003b84: b4 10 62 d8 or %g1, 0x2d8, %i2 if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); 40003b88: ba 07 bf e4 add %fp, -28, %i5 num = n ; } toPrint[count++] = num; 40003b8c: b6 07 bf f8 add %fp, -8, %i3 for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ 40003b90: 10 80 00 9f b 40003e0c 40003b94: b8 07 bf e2 add %fp, -30, %i4 lflag = 0; base = 0; sign = 0; width = 0; lead = ' '; if (*fmt == '%') 40003b98: 12 80 00 9b bne 40003e04 40003b9c: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 { fmt++; 40003ba0: b0 06 20 01 inc %i0 if (*fmt == '0' ) { 40003ba4: c2 4e 00 00 ldsb [ %i0 ], %g1 40003ba8: 80 a0 60 30 cmp %g1, 0x30 40003bac: 12 80 00 04 bne 40003bbc 40003bb0: ae 10 20 20 mov 0x20, %l7 lead = '0'; fmt++; 40003bb4: b0 06 20 01 inc %i0 40003bb8: ae 10 20 30 mov 0x30, %l7 40003bbc: 10 80 00 08 b 40003bdc 40003bc0: a0 10 20 00 clr %l0 } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; width += (*fmt - '0'); 40003bc4: 85 38 60 18 sra %g1, 0x18, %g2 fmt++; 40003bc8: b0 06 20 01 inc %i0 if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; 40003bcc: 83 2c 20 01 sll %l0, 1, %g1 width += (*fmt - '0'); 40003bd0: 84 00 bf d0 add %g2, -48, %g2 if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; 40003bd4: 82 00 40 03 add %g1, %g3, %g1 width += (*fmt - '0'); 40003bd8: a0 00 80 01 add %g2, %g1, %l0 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40003bdc: d0 0e 00 00 ldub [ %i0 ], %o0 width *= 10; 40003be0: 87 2c 20 03 sll %l0, 3, %g3 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40003be4: 82 02 3f d0 add %o0, -48, %g1 40003be8: 82 08 60 ff and %g1, 0xff, %g1 40003bec: 80 a0 60 09 cmp %g1, 9 40003bf0: 08 bf ff f5 bleu 40003bc4 40003bf4: 83 2a 20 18 sll %o0, 0x18, %g1 width *= 10; width += (*fmt - '0'); fmt++; } if ((c = *fmt) == 'l') 40003bf8: 83 38 60 18 sra %g1, 0x18, %g1 40003bfc: 80 a0 60 6c cmp %g1, 0x6c 40003c00: 12 80 00 04 bne 40003c10 40003c04: aa 10 00 10 mov %l0, %l5 { lflag = 1; c = *++fmt; 40003c08: b0 06 20 01 inc %i0 40003c0c: d0 0e 00 00 ldub [ %i0 ], %o0 } switch (c) 40003c10: 83 2a 20 18 sll %o0, 0x18, %g1 40003c14: 83 38 60 18 sra %g1, 0x18, %g1 40003c18: 80 a0 60 64 cmp %g1, 0x64 40003c1c: 02 80 00 2c be 40003ccc 40003c20: a8 10 20 0a mov 0xa, %l4 40003c24: 14 80 00 16 bg 40003c7c 40003c28: 80 a0 60 70 cmp %g1, 0x70 40003c2c: 80 a0 60 4f cmp %g1, 0x4f <== NOT EXECUTED 40003c30: 02 80 00 3e be 40003d28 <== NOT EXECUTED 40003c34: a8 10 20 08 mov 8, %l4 <== NOT EXECUTED 40003c38: 14 80 00 09 bg 40003c5c <== NOT EXECUTED 40003c3c: 80 a0 60 58 cmp %g1, 0x58 <== NOT EXECUTED 40003c40: 80 a0 60 44 cmp %g1, 0x44 <== NOT EXECUTED 40003c44: 02 80 00 21 be 40003cc8 <== NOT EXECUTED 40003c48: 80 a0 60 49 cmp %g1, 0x49 <== NOT EXECUTED 40003c4c: 12 80 00 33 bne 40003d18 <== NOT EXECUTED 40003c50: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 <== NOT EXECUTED { case 'o': case 'O': base = 8; sign = 0; break; 40003c54: 10 80 00 1e b 40003ccc <== NOT EXECUTED 40003c58: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 40003c5c: 02 80 00 32 be 40003d24 <== NOT EXECUTED 40003c60: 80 a0 60 63 cmp %g1, 0x63 <== NOT EXECUTED 40003c64: 02 80 00 29 be 40003d08 <== NOT EXECUTED 40003c68: 80 a0 60 55 cmp %g1, 0x55 <== NOT EXECUTED 40003c6c: 12 80 00 2b bne 40003d18 <== NOT EXECUTED 40003c70: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 <== NOT EXECUTED { case 'o': case 'O': base = 8; sign = 0; break; case 'i': case 'I': case 'd': case 'D': base = 10; sign = 1; break; 40003c74: 10 80 00 2d b 40003d28 <== NOT EXECUTED 40003c78: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 40003c7c: 02 80 00 2a be 40003d24 40003c80: 80 a0 60 70 cmp %g1, 0x70 40003c84: 14 80 00 09 bg 40003ca8 40003c88: 80 a0 60 75 cmp %g1, 0x75 40003c8c: 80 a0 60 69 cmp %g1, 0x69 <== NOT EXECUTED 40003c90: 02 80 00 0e be 40003cc8 <== NOT EXECUTED 40003c94: 80 a0 60 6f cmp %g1, 0x6f <== NOT EXECUTED 40003c98: 12 80 00 20 bne 40003d18 <== NOT EXECUTED 40003c9c: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 <== NOT EXECUTED 40003ca0: 10 80 00 22 b 40003d28 <== NOT EXECUTED 40003ca4: a8 10 20 08 mov 8, %l4 <== NOT EXECUTED 40003ca8: 02 80 00 0b be 40003cd4 40003cac: 80 a0 60 78 cmp %g1, 0x78 40003cb0: 02 80 00 1d be 40003d24 40003cb4: 80 a0 60 73 cmp %g1, 0x73 40003cb8: 32 80 00 18 bne,a 40003d18 40003cbc: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 <== NOT EXECUTED 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++) 40003cc0: 10 80 00 07 b 40003cdc 40003cc4: e0 06 40 00 ld [ %i1 ], %l0 lflag = 1; c = *++fmt; } switch (c) { case 'o': case 'O': base = 8; sign = 0; break; 40003cc8: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED 40003ccc: 10 80 00 18 b 40003d2c 40003cd0: 84 10 20 01 mov 1, %g2 case 'i': case 'I': case 'd': case 'D': base = 10; sign = 1; break; 40003cd4: 10 80 00 15 b 40003d28 <== NOT EXECUTED 40003cd8: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED 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++) 40003cdc: 10 80 00 06 b 40003cf4 40003ce0: d0 4c 00 00 ldsb [ %l0 ], %o0 BSP_output_char(*str); 40003ce4: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 40003ce8: 9f c0 40 00 call %g1 40003cec: 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++) 40003cf0: d0 4c 00 00 ldsb [ %l0 ], %o0 40003cf4: 80 a2 20 00 cmp %o0, 0 40003cf8: 12 bf ff fb bne 40003ce4 40003cfc: a0 04 20 01 inc %l0 40003d00: 10 80 00 49 b 40003e24 40003d04: b2 06 60 04 add %i1, 4, %i1 BSP_output_char(*str); break; case 'c': BSP_output_char(va_arg(ap, int)); 40003d08: d0 4e 60 03 ldsb [ %i1 + 3 ], %o0 <== NOT EXECUTED 40003d0c: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 <== NOT EXECUTED 40003d10: 10 80 00 3d b 40003e04 <== NOT EXECUTED 40003d14: b2 06 60 04 add %i1, 4, %i1 <== NOT EXECUTED break; default: BSP_output_char(c); 40003d18: 91 2a 20 18 sll %o0, 0x18, %o0 <== NOT EXECUTED 40003d1c: 10 80 00 3a b 40003e04 <== NOT EXECUTED 40003d20: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED 40003d24: a8 10 20 10 mov 0x10, %l4 40003d28: 84 10 20 00 clr %g2 40003d2c: 82 06 60 04 add %i1, 4, %g1 break; } /* switch*/ if (base) printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), 40003d30: e2 06 40 00 ld [ %i1 ], %l1 { long unsigned int n; int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { 40003d34: 80 a0 a0 01 cmp %g2, 1 40003d38: 12 80 00 05 bne 40003d4c 40003d3c: b2 10 00 01 mov %g1, %i1 40003d40: 80 a4 60 00 cmp %l1, 0 40003d44: 06 80 00 04 bl 40003d54 40003d48: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 40003d4c: 10 80 00 08 b 40003d6c 40003d50: aa 10 00 10 mov %l0, %l5 BSP_output_char('-'); 40003d54: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003d58: 90 10 20 2d mov 0x2d, %o0 <== NOT EXECUTED num = -num; if (maxwidth) maxwidth--; 40003d5c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40003d60: 02 80 00 03 be 40003d6c <== NOT EXECUTED 40003d64: a2 20 00 11 neg %l1 <== NOT EXECUTED 40003d68: aa 04 3f ff add %l0, -1, %l5 <== NOT EXECUTED 40003d6c: 10 80 00 08 b 40003d8c 40003d70: a6 10 20 00 clr %l3 } count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); 40003d74: 40 00 45 9c call 400153e4 <.umul> 40003d78: 92 10 00 14 mov %l4, %o1 40003d7c: 90 24 40 08 sub %l1, %o0, %o0 40003d80: a2 10 00 10 mov %l0, %l1 40003d84: d0 2c c0 1d stb %o0, [ %l3 + %i5 ] 40003d88: a6 10 00 12 mov %l2, %l3 num = -num; if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { 40003d8c: 90 10 00 11 mov %l1, %o0 40003d90: 92 10 00 14 mov %l4, %o1 40003d94: 40 00 45 ce call 400154cc <.udiv> 40003d98: a4 04 e0 01 add %l3, 1, %l2 40003d9c: a0 92 20 00 orcc %o0, 0, %l0 40003da0: 32 bf ff f5 bne,a 40003d74 40003da4: 90 10 00 10 mov %l0, %o0 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 40003da8: 82 06 c0 13 add %i3, %l3, %g1 for (n=maxwidth ; n > count; n-- ) 40003dac: a0 10 00 15 mov %l5, %l0 count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 40003db0: e2 28 7f ec stb %l1, [ %g1 + -20 ] for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); 40003db4: 10 80 00 05 b 40003dc8 40003db8: a2 10 00 17 mov %l7, %l1 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) 40003dbc: a0 04 3f ff add %l0, -1, %l0 BSP_output_char(lead); 40003dc0: 9f c0 40 00 call %g1 40003dc4: 90 10 00 11 mov %l1, %o0 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) 40003dc8: 80 a4 00 12 cmp %l0, %l2 40003dcc: 18 bf ff fc bgu 40003dbc 40003dd0: c2 05 a2 44 ld [ %l6 + 0x244 ], %g1 40003dd4: 82 04 bf ff add %l2, -1, %g1 40003dd8: 10 80 00 05 b 40003dec 40003ddc: a0 07 40 01 add %i5, %g1, %l0 BSP_output_char(lead); for (n = 0; n < count; n++){ BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]); 40003de0: c4 05 a2 44 ld [ %l6 + 0x244 ], %g2 40003de4: 9f c0 80 00 call %g2 40003de8: d0 4e 80 01 ldsb [ %i2 + %g1 ], %o0 40003dec: a0 04 3f ff add %l0, -1, %l0 toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ 40003df0: 80 a4 00 1c cmp %l0, %i4 40003df4: 32 bf ff fb bne,a 40003de0 40003df8: c2 4c 20 01 ldsb [ %l0 + 1 ], %g1 vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 40003dfc: 10 80 00 04 b 40003e0c 40003e00: b0 06 20 01 inc %i0 printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), base, sign, width, lead); } else { BSP_output_char(*fmt); 40003e04: 9f c0 40 00 call %g1 40003e08: 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++) 40003e0c: d0 4e 00 00 ldsb [ %i0 ], %o0 40003e10: 80 a2 20 00 cmp %o0, 0 40003e14: 12 bf ff 61 bne 40003b98 40003e18: 80 a2 20 25 cmp %o0, 0x25 40003e1c: 81 c7 e0 08 ret 40003e20: 81 e8 00 00 restore 40003e24: 10 bf ff fa b 40003e0c 40003e28: b0 06 20 01 inc %i0 40017b04 : ssize_t write( int fd, const void *buffer, size_t count ) { 40017b04: 9d e3 bf 98 save %sp, -104, %sp ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40017b08: 03 10 00 63 sethi %hi(0x40018c00), %g1 40017b0c: c2 00 61 4c ld [ %g1 + 0x14c ], %g1 ! 40018d4c ssize_t write( int fd, const void *buffer, size_t count ) { 40017b10: 92 10 00 19 mov %i1, %o1 ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40017b14: 80 a6 00 01 cmp %i0, %g1 40017b18: 1a 80 00 0e bcc 40017b50 40017b1c: 94 10 00 1a mov %i2, %o2 iop = rtems_libio_iop( fd ); 40017b20: 03 10 00 67 sethi %hi(0x40019c00), %g1 40017b24: c6 00 60 d8 ld [ %g1 + 0xd8 ], %g3 ! 40019cd8 40017b28: 85 2e 20 02 sll %i0, 2, %g2 40017b2c: 83 2e 20 04 sll %i0, 4, %g1 40017b30: 82 20 40 02 sub %g1, %g2, %g1 40017b34: 82 00 40 18 add %g1, %i0, %g1 40017b38: 83 28 60 02 sll %g1, 2, %g1 40017b3c: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 40017b40: c2 06 20 0c ld [ %i0 + 0xc ], %g1 40017b44: 80 88 61 00 btst 0x100, %g1 40017b48: 12 80 00 06 bne 40017b60 40017b4c: 80 a6 60 00 cmp %i1, 0 40017b50: 7f ff da 36 call 4000e428 <__errno> <== NOT EXECUTED 40017b54: 01 00 00 00 nop <== NOT EXECUTED 40017b58: 10 80 00 14 b 40017ba8 <== NOT EXECUTED 40017b5c: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 40017b60: 02 80 00 07 be 40017b7c 40017b64: 80 a6 a0 00 cmp %i2, 0 rtems_libio_check_count( count ); 40017b68: 02 80 00 1b be 40017bd4 40017b6c: 90 10 20 00 clr %o0 rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 40017b70: 80 88 60 04 btst 4, %g1 40017b74: 32 80 00 06 bne,a 40017b8c 40017b78: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 40017b7c: 7f ff da 2b call 4000e428 <__errno> <== NOT EXECUTED 40017b80: 01 00 00 00 nop <== NOT EXECUTED 40017b84: 10 80 00 09 b 40017ba8 <== NOT EXECUTED 40017b88: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED /* * Now process the write() request. */ if ( !iop->handlers->write_h ) 40017b8c: c2 00 60 0c ld [ %g1 + 0xc ], %g1 40017b90: 80 a0 60 00 cmp %g1, 0 40017b94: 12 80 00 08 bne 40017bb4 40017b98: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); 40017b9c: 7f ff da 23 call 4000e428 <__errno> <== NOT EXECUTED 40017ba0: 01 00 00 00 nop <== NOT EXECUTED 40017ba4: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40017ba8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40017bac: 10 80 00 0a b 40017bd4 <== NOT EXECUTED 40017bb0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = (*iop->handlers->write_h)( iop, buffer, count ); 40017bb4: 9f c0 40 00 call %g1 40017bb8: 90 10 00 18 mov %i0, %o0 if ( rc > 0 ) 40017bbc: 80 a2 20 00 cmp %o0, 0 40017bc0: 04 80 00 05 ble 40017bd4 40017bc4: 01 00 00 00 nop iop->offset += rc; 40017bc8: c2 06 20 08 ld [ %i0 + 8 ], %g1 40017bcc: 82 00 40 08 add %g1, %o0, %g1 40017bd0: c2 26 20 08 st %g1, [ %i0 + 8 ] return rc; } 40017bd4: 81 c7 e0 08 ret 40017bd8: 91 e8 00 08 restore %g0, %o0, %o0