0200a97c : { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { 200a97c: 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; 200a980: c4 02 20 0c ld [ %o0 + 0xc ], %g2 switch( node->type ) { 200a984: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 200a988: 82 00 7f ff add %g1, -1, %g1 200a98c: 80 a0 60 05 cmp %g1, 5 200a990: 18 80 00 12 bgu 200a9d8 200a994: c6 00 a0 2c ld [ %g2 + 0x2c ], %g3 200a998: 83 28 60 02 sll %g1, 2, %g1 200a99c: 05 00 80 2a sethi %hi(0x200a800), %g2 200a9a0: 84 10 a1 64 or %g2, 0x164, %g2 ! 200a964 200a9a4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 200a9a8: 81 c0 40 00 jmp %g1 200a9ac: 01 00 00 00 nop case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; 200a9b0: 10 80 00 09 b 200a9d4 200a9b4: c2 00 e0 08 ld [ %g3 + 8 ], %g1 break; case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; 200a9b8: 03 00 80 5c sethi %hi(0x2017000), %g1 200a9bc: 10 80 00 06 b 200a9d4 200a9c0: 82 10 60 78 or %g1, 0x78, %g1 ! 2017078 break; case IMFS_SYM_LINK: case IMFS_HARD_LINK: loc->handlers = &IMFS_link_handlers; 200a9c4: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 200a9c8: 10 80 00 03 b 200a9d4 <== NOT EXECUTED 200a9cc: 82 10 60 b0 or %g1, 0xb0, %g1 ! 20170b0 <== NOT EXECUTED break; case IMFS_LINEAR_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; 200a9d0: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 200a9d4: c2 22 20 04 st %g1, [ %o0 + 4 ] break; } return 0; } 200a9d8: 81 c3 e0 08 retl 200a9dc: 90 10 20 00 clr %o0 02014040 : int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { 2014040: 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; 2014044: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); 2014048: 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; 201404c: f2 34 20 38 sth %i1, [ %l0 + 0x38 ] <== NOT EXECUTED jnode->st_gid = group; 2014050: f4 34 20 3a sth %i2, [ %l0 + 0x3a ] <== NOT EXECUTED IMFS_update_ctime( jnode ); 2014054: 7f ff bf 5a call 2003dbc <== NOT EXECUTED 2014058: 92 10 20 00 clr %o1 <== NOT EXECUTED 201405c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2014060: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED return 0; } 2014064: 81 c7 e0 08 ret <== NOT EXECUTED 2014068: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 0200cfc4 : IMFS_jnode_types_t type, char *name, mode_t mode, IMFS_types_union *info ) { 200cfc4: 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 ) 200cfc8: a6 96 20 00 orcc %i0, 0, %l3 200cfcc: 02 80 00 03 be 200cfd8 200cfd0: a4 10 20 00 clr %l2 parent = parent_loc->node_access; 200cfd4: e4 04 c0 00 ld [ %l3 ], %l2 /* * Allocate an IMFS jnode */ node = calloc( 1, sizeof( IMFS_jnode_t ) ); 200cfd8: 90 10 20 01 mov 1, %o0 200cfdc: 92 10 20 5c mov 0x5c, %o1 200cfe0: 7f ff d5 3e call 20024d8 200cfe4: b0 10 20 00 clr %i0 if ( !node ) 200cfe8: a2 92 20 00 orcc %o0, 0, %l1 200cfec: 02 80 00 51 be 200d130 200cff0: 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 ); 200cff4: 92 10 00 1a mov %i2, %o1 /* * Fill in the basic information */ node->st_nlink = 1; node->type = type; 200cff8: f2 24 60 48 st %i1, [ %l1 + 0x48 ] strncpy( node->name, name, IMFS_NAME_MAX ); 200cffc: 94 10 20 20 mov 0x20, %o2 /* * Fill in the basic information */ node->st_nlink = 1; 200d000: c2 34 60 30 sth %g1, [ %l1 + 0x30 ] node->type = type; strncpy( node->name, name, IMFS_NAME_MAX ); 200d004: 40 00 07 5a call 200ed6c 200d008: 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; 200d00c: 03 00 80 5c sethi %hi(0x2017000), %g1 200d010: c2 00 60 e8 ld [ %g1 + 0xe8 ], %g1 ! 20170e8 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 200d014: 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; 200d018: c2 10 60 24 lduh [ %g1 + 0x24 ], %g1 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 200d01c: 92 10 20 00 clr %o1 /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 200d020: 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; 200d024: 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; 200d028: c2 34 60 2e sth %g1, [ %l1 + 0x2e ] /* * Now set all the times. */ gettimeofday( &tv, 0 ); 200d02c: 7f ff fa 34 call 200b8fc 200d030: c0 34 60 3a clrh [ %l1 + 0x3a ] node->stat_atime = (time_t) tv.tv_sec; 200d034: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* * Set the type specific information */ switch (type) { 200d038: 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; 200d03c: c2 24 60 44 st %g1, [ %l1 + 0x44 ] * Now set all the times. */ gettimeofday( &tv, 0 ); node->stat_atime = (time_t) tv.tv_sec; 200d040: c2 24 60 3c st %g1, [ %l1 + 0x3c ] node->stat_mtime = (time_t) tv.tv_sec; 200d044: c2 24 60 40 st %g1, [ %l1 + 0x40 ] /* * Set the type specific information */ switch (type) { 200d048: 80 a6 60 05 cmp %i1, 5 200d04c: 18 80 00 27 bgu 200d0e8 200d050: b0 10 00 11 mov %l1, %i0 200d054: 83 2e 60 02 sll %i1, 2, %g1 200d058: 05 00 80 33 sethi %hi(0x200cc00), %g2 200d05c: 84 10 a3 ac or %g2, 0x3ac, %g2 ! 200cfac 200d060: c2 00 80 01 ld [ %g2 + %g1 ], %g1 200d064: 81 c0 40 00 jmp %g1 200d068: 01 00 00 00 nop */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 200d06c: 82 04 60 50 add %l1, 0x50, %g1 the_chain->permanent_null = NULL; 200d070: 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); 200d074: c2 24 60 4c st %g1, [ %l1 + 0x4c ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 200d078: 82 04 60 4c add %l1, 0x4c, %g1 200d07c: 10 80 00 21 b 200d100 200d080: 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; 200d084: c2 07 00 00 ld [ %i4 ], %g1 <== NOT EXECUTED 200d088: 10 80 00 1e b 200d100 <== NOT EXECUTED 200d08c: 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 ); 200d090: 40 00 06 cd call 200ebc4 <== NOT EXECUTED 200d094: d0 07 00 00 ld [ %i4 ], %o0 <== NOT EXECUTED 200d098: 92 02 20 01 add %o0, 1, %o1 <== NOT EXECUTED 200d09c: 7f ff d5 0f call 20024d8 <== NOT EXECUTED 200d0a0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED strcpy( sym_name, info->sym_link.name ); 200d0a4: d2 07 00 00 ld [ %i4 ], %o1 <== NOT EXECUTED 200d0a8: 40 00 06 a7 call 200eb44 <== NOT EXECUTED 200d0ac: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED node->info.sym_link.name = sym_name; 200d0b0: 10 80 00 14 b 200d100 <== NOT EXECUTED 200d0b4: 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; 200d0b8: 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; 200d0bc: c4 07 00 00 ld [ %i4 ], %g2 node->info.device.minor = info->device.minor; 200d0c0: 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; 200d0c4: 10 80 00 0f b 200d100 200d0c8: 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; 200d0cc: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.linearfile.direct = 0; 200d0d0: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED case IMFS_MEMORY_FILE: node->info.file.size = 0; 200d0d4: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.file.indirect = 0; 200d0d8: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED node->info.file.doubly_indirect = 0; 200d0dc: c0 24 60 54 clr [ %l1 + 0x54 ] <== NOT EXECUTED node->info.file.triply_indirect = 0; 200d0e0: 10 80 00 08 b 200d100 <== NOT EXECUTED 200d0e4: c0 24 60 58 clr [ %l1 + 0x58 ] <== NOT EXECUTED break; default: assert(0); 200d0e8: 11 00 80 58 sethi %hi(0x2016000), %o0 <== NOT EXECUTED 200d0ec: 15 00 80 58 sethi %hi(0x2016000), %o2 <== NOT EXECUTED 200d0f0: 90 12 23 80 or %o0, 0x380, %o0 <== NOT EXECUTED 200d0f4: 94 12 a3 d0 or %o2, 0x3d0, %o2 <== NOT EXECUTED 200d0f8: 7f ff d3 7c call 2001ee8 <__assert> <== NOT EXECUTED 200d0fc: 92 10 20 77 mov 0x77, %o1 <== NOT EXECUTED /* * If this node has a parent, then put it in that directory list. */ if ( parent ) { 200d100: 80 a4 a0 00 cmp %l2, 0 200d104: 02 80 00 0b be 200d130 200d108: 90 04 a0 4c add %l2, 0x4c, %o0 Chain_Append( &parent->info.directory.Entries, &node->Node ); 200d10c: 7f ff e5 a8 call 20067ac <_Chain_Append> 200d110: 92 10 00 11 mov %l1, %o1 node->Parent = parent; fs_info = parent_loc->mt_entry->fs_info; 200d114: 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; 200d118: e4 24 60 08 st %l2, [ %l1 + 8 ] fs_info = parent_loc->mt_entry->fs_info; 200d11c: c4 00 60 2c ld [ %g1 + 0x2c ], %g2 node->st_ino = ++fs_info->ino_count; 200d120: c2 00 80 00 ld [ %g2 ], %g1 200d124: 82 00 60 01 inc %g1 200d128: c2 20 80 00 st %g1, [ %g2 ] 200d12c: c2 24 60 34 st %g1, [ %l1 + 0x34 ] } return node; } 200d130: 81 c7 e0 08 ret 200d134: 81 e8 00 00 restore 0200aa60 : int IMFS_eval_path( const char *pathname, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 200aa60: 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; 200aa64: 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 */ ) { 200aa68: 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; 200aa6c: a8 10 20 00 clr %l4 200aa70: 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 ); 200aa74: ac 07 bf c3 add %fp, -61, %l6 200aa78: 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 ) 200aa7c: 10 80 00 74 b 200ac4c 200aa80: 2f 00 80 5c sethi %hi(0x2017000), %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 ); 200aa84: 92 10 00 16 mov %l6, %o1 200aa88: 40 00 01 eb call 200b234 200aa8c: 94 10 00 1d mov %i5, %o2 i += len; if ( !pathloc->node_access ) 200aa90: 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 ); 200aa94: a4 10 00 08 mov %o0, %l2 i += len; if ( !pathloc->node_access ) 200aa98: 80 a4 60 00 cmp %l1, 0 200aa9c: 02 80 00 64 be 200ac2c 200aaa0: 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 ) 200aaa4: 80 a2 20 00 cmp %o0, 0 200aaa8: 22 80 00 12 be,a 200aaf0 200aaac: a0 10 00 11 mov %l1, %l0 if ( node->type == IMFS_DIRECTORY ) 200aab0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 200aab4: 80 a0 60 01 cmp %g1, 1 200aab8: 32 80 00 0e bne,a 200aaf0 200aabc: a0 10 00 11 mov %l1, %l0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) 200aac0: 90 10 00 1a mov %i2, %o0 200aac4: 7f ff ff c7 call 200a9e0 200aac8: 92 10 20 01 mov 1, %o1 200aacc: 80 a2 20 00 cmp %o0, 0 200aad0: 12 80 00 08 bne 200aaf0 200aad4: a0 10 00 11 mov %l1, %l0 rtems_set_errno_and_return_minus_one( EACCES ); 200aad8: 40 00 0b 5d call 200d84c <__errno> <== NOT EXECUTED 200aadc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200aae0: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 200aae4: c2 22 00 00 st %g1, [ %o0 ] 200aae8: 81 c7 e0 08 ret 200aaec: 81 e8 00 00 restore node = pathloc->node_access; switch( type ) { 200aaf0: 80 a4 a0 03 cmp %l2, 3 200aaf4: 02 80 00 26 be 200ab8c 200aaf8: a8 05 00 13 add %l4, %l3, %l4 200aafc: 80 a4 a0 04 cmp %l2, 4 200ab00: 02 80 00 4f be 200ac3c 200ab04: 80 a4 a0 02 cmp %l2, 2 200ab08: 12 80 00 52 bne 200ac50 200ab0c: 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 ) 200ab10: c2 05 e0 e8 ld [ %l7 + 0xe8 ], %g1 <== NOT EXECUTED 200ab14: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 200ab18: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 200ab1c: 02 bf ff da be 200aa84 <== NOT EXECUTED 200ab20: 90 05 40 14 add %l5, %l4, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == 200ab24: d2 06 a0 0c ld [ %i2 + 0xc ], %o1 <== NOT EXECUTED 200ab28: c2 02 60 18 ld [ %o1 + 0x18 ], %g1 <== NOT EXECUTED 200ab2c: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 200ab30: 32 80 00 0f bne,a 200ab6c <== NOT EXECUTED 200ab34: 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; 200ab38: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 200ab3c: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 200ab40: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 200ab44: 40 00 0d 17 call 200dfa0 <== NOT EXECUTED 200ab48: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 200ab4c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 200ab50: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 200ab54: 40 00 0d 13 call 200dfa0 <== NOT EXECUTED 200ab58: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); 200ab5c: c2 06 a0 08 ld [ %i2 + 8 ], %g1 <== NOT EXECUTED 200ab60: 90 25 00 13 sub %l4, %l3, %o0 <== NOT EXECUTED 200ab64: 10 80 00 54 b 200acb4 <== NOT EXECUTED 200ab68: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED } } else { if ( !node->Parent ) 200ab6c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 200ab70: 32 80 00 3a bne,a 200ac58 <== NOT EXECUTED 200ab74: e0 26 80 00 st %l0, [ %i2 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 200ab78: 40 00 0b 35 call 200d84c <__errno> <== NOT EXECUTED 200ab7c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200ab80: e4 22 00 00 st %l2, [ %o0 ] <== NOT EXECUTED 200ab84: 81 c7 e0 08 ret <== NOT EXECUTED 200ab88: 81 e8 00 00 restore <== NOT EXECUTED case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { 200ab8c: c2 04 60 48 ld [ %l1 + 0x48 ], %g1 200ab90: 80 a0 60 03 cmp %g1, 3 200ab94: 12 80 00 0a bne 200abbc 200ab98: 80 a0 60 04 cmp %g1, 4 IMFS_evaluate_hard_link( pathloc, 0 ); 200ab9c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 200aba0: 7f ff ff 97 call 200a9fc <== NOT EXECUTED 200aba4: 92 10 20 00 clr %o1 <== NOT EXECUTED node = pathloc->node_access; 200aba8: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED if ( !node ) 200abac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200abb0: 32 80 00 0d bne,a 200abe4 <== NOT EXECUTED 200abb4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 200abb8: 30 80 00 0f b,a 200abf4 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); } else if ( node->type == IMFS_SYM_LINK ) { 200abbc: 32 80 00 0b bne,a 200abe8 200abc0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 result = IMFS_evaluate_sym_link( pathloc, 0 ); 200abc4: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 200abc8: 40 00 00 50 call 200ad08 <== NOT EXECUTED 200abcc: 92 10 20 00 clr %o1 <== NOT EXECUTED 200abd0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED node = pathloc->node_access; if ( result == -1 ) 200abd4: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 200abd8: 02 bf ff c4 be 200aae8 <== NOT EXECUTED 200abdc: 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; 200abe0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 200abe4: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200abe8: 80 a0 60 01 cmp %g1, 1 200abec: 22 80 00 06 be,a 200ac04 200abf0: d2 04 20 58 ld [ %l0 + 0x58 ], %o1 rtems_set_errno_and_return_minus_one( ENOTDIR ); 200abf4: 40 00 0b 16 call 200d84c <__errno> <== NOT EXECUTED 200abf8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200abfc: 10 bf ff ba b 200aae4 <== NOT EXECUTED 200ac00: 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 ) { 200ac04: 80 a2 60 00 cmp %o1, 0 200ac08: 02 80 00 04 be 200ac18 200ac0c: 90 10 00 10 mov %l0, %o0 newloc = node->info.directory.mt_fs->mt_fs_root; 200ac10: 10 80 00 1d b 200ac84 <== NOT EXECUTED 200ac14: 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 ); 200ac18: 40 00 01 59 call 200b17c 200ac1c: 92 10 00 16 mov %l6, %o1 if ( !node ) 200ac20: a0 92 20 00 orcc %o0, 0, %l0 200ac24: 32 80 00 0d bne,a 200ac58 200ac28: e0 26 80 00 st %l0, [ %i2 ] rtems_set_errno_and_return_minus_one( ENOENT ); 200ac2c: 40 00 0b 08 call 200d84c <__errno> 200ac30: b0 10 3f ff mov -1, %i0 200ac34: 10 bf ff ac b 200aae4 200ac38: 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 ); 200ac3c: 40 00 0b 04 call 200d84c <__errno> <== NOT EXECUTED 200ac40: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200ac44: 10 bf ff a8 b 200aae4 <== NOT EXECUTED 200ac48: 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) ) { 200ac4c: 80 a4 a0 00 cmp %l2, 0 200ac50: 22 80 00 06 be,a 200ac68 200ac54: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 200ac58: 80 a4 a0 04 cmp %l2, 4 200ac5c: 12 bf ff 8a bne 200aa84 200ac60: 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 ) { 200ac64: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200ac68: 80 a0 60 01 cmp %g1, 1 200ac6c: 12 80 00 18 bne 200accc 200ac70: 01 00 00 00 nop if ( node->info.directory.mt_fs != NULL ) { 200ac74: d0 04 20 58 ld [ %l0 + 0x58 ], %o0 200ac78: 80 a2 20 00 cmp %o0, 0 200ac7c: 02 80 00 14 be 200accc 200ac80: 92 02 20 18 add %o0, 0x18, %o1 newloc = node->info.directory.mt_fs->mt_fs_root; 200ac84: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 200ac88: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 200ac8c: 40 00 0c c5 call 200dfa0 <== NOT EXECUTED 200ac90: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 200ac94: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 200ac98: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 200ac9c: 40 00 0c c1 call 200dfa0 <== NOT EXECUTED 200aca0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 200aca4: c2 06 a0 08 ld [ %i2 + 8 ], %g1 <== NOT EXECUTED 200aca8: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED 200acac: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED 200acb0: 90 25 00 08 sub %l4, %o0, %o0 <== NOT EXECUTED 200acb4: 90 05 40 08 add %l5, %o0, %o0 <== NOT EXECUTED 200acb8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200acbc: 9f c0 40 00 call %g1 <== NOT EXECUTED 200acc0: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 200acc4: 81 c7 e0 08 ret <== NOT EXECUTED 200acc8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); 200accc: 7f ff ff 2c call 200a97c 200acd0: 90 10 00 1a mov %i2, %o0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 200acd4: 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 ); 200acd8: b0 10 00 08 mov %o0, %i0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 200acdc: 7f ff ff 41 call 200a9e0 200ace0: 90 10 00 1a mov %i2, %o0 200ace4: 80 a2 20 00 cmp %o0, 0 200ace8: 12 80 00 06 bne 200ad00 200acec: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EACCES ); 200acf0: 40 00 0a d7 call 200d84c <__errno> <== NOT EXECUTED 200acf4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 200acf8: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 200acfc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 200ad00: 81 c7 e0 08 ret 200ad04: 81 e8 00 00 restore 0200ae8c : int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 200ae8c: 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; 200ae90: 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 */ ) { 200ae94: 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; 200ae98: 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 ); 200ae9c: ac 07 bf c3 add %fp, -61, %l6 200aea0: 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 ) 200aea4: 2f 00 80 5c sethi %hi(0x2017000), %l7 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); 200aea8: 90 05 40 13 add %l5, %l3, %o0 200aeac: 92 10 00 16 mov %l6, %o1 200aeb0: 40 00 00 e1 call 200b234 200aeb4: 94 10 00 1d mov %i5, %o2 i += len; if ( !pathloc->node_access ) 200aeb8: 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 ); 200aebc: a2 10 00 08 mov %o0, %l1 i += len; if ( !pathloc->node_access ) 200aec0: 80 a4 a0 00 cmp %l2, 0 200aec4: 02 80 00 8d be 200b0f8 200aec8: e8 07 bf f4 ld [ %fp + -12 ], %l4 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) 200aecc: 80 a2 20 00 cmp %o0, 0 200aed0: 22 80 00 10 be,a 200af10 200aed4: a6 04 c0 14 add %l3, %l4, %l3 <== NOT EXECUTED if ( node->type == IMFS_DIRECTORY ) 200aed8: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 200aedc: 80 a0 60 01 cmp %g1, 1 200aee0: 32 80 00 0c bne,a 200af10 200aee4: a6 04 c0 14 add %l3, %l4, %l3 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) 200aee8: 90 10 00 19 mov %i1, %o0 200aeec: 7f ff fe bd call 200a9e0 200aef0: 92 10 20 01 mov 1, %o1 200aef4: 80 a2 20 00 cmp %o0, 0 200aef8: 32 80 00 06 bne,a 200af10 200aefc: a6 04 c0 14 add %l3, %l4, %l3 rtems_set_errno_and_return_minus_one( EACCES ); 200af00: 40 00 0a 53 call 200d84c <__errno> <== NOT EXECUTED 200af04: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200af08: 10 80 00 8e b 200b140 <== NOT EXECUTED 200af0c: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED node = pathloc->node_access; switch( type ) { 200af10: 80 a4 60 02 cmp %l1, 2 200af14: 02 80 00 0f be 200af50 200af18: a0 10 00 12 mov %l2, %l0 200af1c: 80 a4 60 02 cmp %l1, 2 200af20: 18 80 00 07 bgu 200af3c 200af24: 80 a4 60 03 cmp %l1, 3 200af28: 80 a4 60 00 cmp %l1, 0 200af2c: 02 80 00 61 be 200b0b0 200af30: 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 ); 200af34: 10 bf ff de b 200aeac 200af38: 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 ) { 200af3c: 02 80 00 24 be 200afcc 200af40: 80 a4 60 04 cmp %l1, 4 200af44: 32 bf ff da bne,a 200aeac <== NOT EXECUTED 200af48: 90 05 40 13 add %l5, %l3, %o0 <== NOT EXECUTED 200af4c: 30 80 00 5d b,a 200b0c0 <== 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 ) 200af50: c2 05 e0 e8 ld [ %l7 + 0xe8 ], %g1 <== NOT EXECUTED 200af54: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 200af58: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 200af5c: 02 bf ff d4 be 200aeac <== NOT EXECUTED 200af60: 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){ 200af64: d2 06 60 0c ld [ %i1 + 0xc ], %o1 <== NOT EXECUTED 200af68: c2 02 60 18 ld [ %o1 + 0x18 ], %g1 <== NOT EXECUTED 200af6c: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 200af70: 32 80 00 0f bne,a 200afac <== NOT EXECUTED 200af74: 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; 200af78: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 200af7c: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 200af80: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 200af84: 40 00 0c 07 call 200dfa0 <== NOT EXECUTED 200af88: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 200af8c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200af90: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 200af94: 40 00 0c 03 call 200dfa0 <== NOT EXECUTED 200af98: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 200af9c: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED 200afa0: 90 24 c0 14 sub %l3, %l4, %o0 <== NOT EXECUTED 200afa4: 10 80 00 36 b 200b07c <== NOT EXECUTED 200afa8: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED } } else { if ( !node->Parent ) 200afac: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 200afb0: 32 bf ff be bne,a 200aea8 <== NOT EXECUTED 200afb4: e0 26 40 00 st %l0, [ %i1 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 200afb8: 40 00 0a 25 call 200d84c <__errno> <== NOT EXECUTED 200afbc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200afc0: e2 22 00 00 st %l1, [ %o0 ] <== NOT EXECUTED 200afc4: 81 c7 e0 08 ret <== NOT EXECUTED 200afc8: 81 e8 00 00 restore <== NOT EXECUTED pathloc->node_access = node; break; case IMFS_NAME: if ( node->type == IMFS_HARD_LINK ) { 200afcc: d0 04 a0 48 ld [ %l2 + 0x48 ], %o0 200afd0: 80 a2 20 03 cmp %o0, 3 200afd4: 12 80 00 0a bne 200affc 200afd8: 80 a2 20 04 cmp %o0, 4 result = IMFS_evaluate_link( pathloc, 0 ); 200afdc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200afe0: 7f ff ff 7e call 200add8 <== NOT EXECUTED 200afe4: 92 10 20 00 clr %o1 <== NOT EXECUTED if ( result == -1 ) 200afe8: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 200afec: 12 80 00 0c bne 200b01c <== NOT EXECUTED 200aff0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 200aff4: 81 c7 e0 08 ret <== NOT EXECUTED 200aff8: 81 e8 00 00 restore <== NOT EXECUTED return -1; } else if ( node->type == IMFS_SYM_LINK ) { 200affc: 32 80 00 09 bne,a 200b020 200b000: d0 06 40 00 ld [ %i1 ], %o0 result = IMFS_evaluate_link( pathloc, 0 ); 200b004: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200b008: 7f ff ff 74 call 200add8 <== NOT EXECUTED 200b00c: 92 10 20 00 clr %o1 <== NOT EXECUTED if ( result == -1 ) 200b010: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 200b014: 02 bf ff ec be 200afc4 <== NOT EXECUTED 200b018: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED return -1; } node = pathloc->node_access; 200b01c: d0 06 40 00 ld [ %i1 ], %o0 <== NOT EXECUTED if ( !node ) 200b020: 80 a2 20 00 cmp %o0, 0 200b024: 02 80 00 44 be 200b134 200b028: 01 00 00 00 nop /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 200b02c: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 200b030: 80 a0 60 01 cmp %g1, 1 200b034: 12 80 00 40 bne 200b134 200b038: 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 ) { 200b03c: d2 02 20 58 ld [ %o0 + 0x58 ], %o1 200b040: 80 a2 60 00 cmp %o1, 0 200b044: 02 80 00 14 be 200b094 200b048: 92 02 60 18 add %o1, 0x18, %o1 newloc = node->info.directory.mt_fs->mt_fs_root; 200b04c: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 200b050: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 200b054: 40 00 0b d3 call 200dfa0 <== NOT EXECUTED 200b058: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *pathloc = newloc; 200b05c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200b060: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 200b064: 40 00 0b cf call 200dfa0 <== NOT EXECUTED 200b068: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 200b06c: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED 200b070: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED 200b074: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 200b078: 90 24 c0 08 sub %l3, %o0, %o0 <== NOT EXECUTED 200b07c: 90 05 40 08 add %l5, %o0, %o0 <== NOT EXECUTED 200b080: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200b084: 9f c0 40 00 call %g1 <== NOT EXECUTED 200b088: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 200b08c: 81 c7 e0 08 ret <== NOT EXECUTED 200b090: 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 ); 200b094: 40 00 00 3a call 200b17c 200b098: 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 ) 200b09c: a0 92 20 00 orcc %o0, 0, %l0 200b0a0: 02 80 00 0c be 200b0d0 200b0a4: c2 07 bf f4 ld [ %fp + -12 ], %g1 done = TRUE; else pathloc->node_access = node; 200b0a8: 10 bf ff 80 b 200aea8 200b0ac: e0 26 40 00 st %l0, [ %i1 ] break; case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); 200b0b0: 40 00 09 e7 call 200d84c <__errno> <== NOT EXECUTED 200b0b4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b0b8: 10 80 00 22 b 200b140 <== NOT EXECUTED 200b0bc: 82 10 20 11 mov 0x11, %g1 <== NOT EXECUTED break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 200b0c0: 40 00 09 e3 call 200d84c <__errno> <== NOT EXECUTED 200b0c4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b0c8: 10 80 00 1e b 200b140 <== NOT EXECUTED 200b0cc: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; 200b0d0: 84 05 40 13 add %l5, %l3, %g2 200b0d4: 82 24 c0 01 sub %l3, %g1, %g1 200b0d8: 82 05 40 01 add %l5, %g1, %g1 200b0dc: 10 80 00 0b b 200b108 200b0e0: 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 ] ) ) 200b0e4: 80 a0 60 2f cmp %g1, 0x2f <== NOT EXECUTED 200b0e8: 02 80 00 08 be 200b108 <== NOT EXECUTED 200b0ec: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 200b0f0: 22 80 00 07 be,a 200b10c <== NOT EXECUTED 200b0f4: c2 48 80 00 ldsb [ %g2 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 200b0f8: 40 00 09 d5 call 200d84c <__errno> <== NOT EXECUTED 200b0fc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b100: 10 80 00 10 b 200b140 <== NOT EXECUTED 200b104: 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++) { 200b108: c2 48 80 00 ldsb [ %g2 ], %g1 200b10c: 80 a0 60 00 cmp %g1, 0 200b110: 12 bf ff f5 bne 200b0e4 200b114: 84 00 a0 01 inc %g2 /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); 200b118: 7f ff fe 19 call 200a97c 200b11c: 90 10 00 19 mov %i1, %o0 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) 200b120: c2 06 40 00 ld [ %i1 ], %g1 200b124: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 200b128: 80 a0 60 01 cmp %g1, 1 200b12c: 02 80 00 08 be 200b14c 200b130: b0 10 00 08 mov %o0, %i0 rtems_set_errno_and_return_minus_one( ENOTDIR ); 200b134: 40 00 09 c6 call 200d84c <__errno> <== NOT EXECUTED 200b138: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b13c: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 200b140: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b144: 81 c7 e0 08 ret <== NOT EXECUTED 200b148: 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 ) ) 200b14c: 90 10 00 19 mov %i1, %o0 200b150: 7f ff fe 24 call 200a9e0 200b154: 92 10 20 03 mov 3, %o1 200b158: 80 a2 20 00 cmp %o0, 0 200b15c: 12 80 00 06 bne 200b174 200b160: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EACCES ); 200b164: 40 00 09 ba call 200d84c <__errno> <== NOT EXECUTED 200b168: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 200b16c: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 200b170: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 200b174: 81 c7 e0 08 ret 200b178: 81 e8 00 00 restore 0200a9fc : int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 200a9fc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 200aa00: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_HARD_LINK ) 200aa04: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200aa08: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 200aa0c: 22 80 00 05 be,a 200aa20 <== NOT EXECUTED 200aa10: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 200aa14: 7f ff ee cc call 2006544 <== NOT EXECUTED 200aa18: 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; 200aa1c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED IMFS_Set_handlers( node ); 200aa20: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200aa24: 7f ff ff d6 call 200a97c <== NOT EXECUTED 200aa28: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 200aa2c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200aa30: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200aa34: 7f ff ff eb call 200a9e0 <== NOT EXECUTED 200aa38: b0 10 20 00 clr %i0 <== NOT EXECUTED 200aa3c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200aa40: 12 80 00 06 bne 200aa58 <== NOT EXECUTED 200aa44: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); 200aa48: 40 00 0b 81 call 200d84c <__errno> <== NOT EXECUTED 200aa4c: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 200aa50: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 200aa54: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 200aa58: 81 c7 e0 08 ret <== NOT EXECUTED 200aa5c: 81 e8 00 00 restore <== NOT EXECUTED 0200add8 : int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 200add8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 200addc: 23 00 80 5c sethi %hi(0x2017000), %l1 <== NOT EXECUTED 200ade0: c4 04 60 e8 ld [ %l1 + 0xe8 ], %g2 ! 20170e8 <== NOT EXECUTED { IMFS_jnode_t *jnode; int result = 0; do { jnode = node->node_access; 200ade4: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 200ade8: c2 10 a0 26 lduh [ %g2 + 0x26 ], %g1 <== NOT EXECUTED 200adec: 82 00 60 01 inc %g1 <== NOT EXECUTED 200adf0: c2 30 a0 26 sth %g1, [ %g2 + 0x26 ] <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { 200adf4: 83 28 60 10 sll %g1, 0x10, %g1 <== NOT EXECUTED 200adf8: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 200adfc: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 200ae00: 08 80 00 08 bleu 200ae20 <== NOT EXECUTED 200ae04: 90 10 20 00 clr %o0 <== NOT EXECUTED rtems_filesystem_link_counts = 0; rtems_set_errno_and_return_minus_one( ELOOP ); 200ae08: 40 00 0a 91 call 200d84c <__errno> <== NOT EXECUTED 200ae0c: c0 30 a0 26 clrh [ %g2 + 0x26 ] <== NOT EXECUTED 200ae10: 82 10 20 5c mov 0x5c, %g1 <== NOT EXECUTED 200ae14: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200ae18: 10 80 00 1b b 200ae84 <== NOT EXECUTED 200ae1c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Follow the Link node. */ if ( jnode->type == IMFS_HARD_LINK ) 200ae20: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200ae24: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 200ae28: 32 80 00 07 bne,a 200ae44 <== NOT EXECUTED 200ae2c: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); 200ae30: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200ae34: 7f ff fe f2 call 200a9fc <== NOT EXECUTED 200ae38: 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 ) ) ); 200ae3c: 10 80 00 08 b 200ae5c <== NOT EXECUTED 200ae40: 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 ) 200ae44: 32 80 00 09 bne,a 200ae68 <== NOT EXECUTED 200ae48: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED result = IMFS_evaluate_sym_link( node, flags ); 200ae4c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200ae50: 7f ff ff ae call 200ad08 <== NOT EXECUTED 200ae54: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); 200ae58: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200ae5c: 12 80 00 08 bne 200ae7c <== NOT EXECUTED 200ae60: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 200ae64: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200ae68: 82 00 7f fd add %g1, -3, %g1 <== NOT EXECUTED 200ae6c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200ae70: 08 bf ff dd bleu 200ade4 <== NOT EXECUTED 200ae74: c4 04 60 e8 ld [ %l1 + 0xe8 ], %g2 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; 200ae78: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 200ae7c: c2 00 60 e8 ld [ %g1 + 0xe8 ], %g1 ! 20170e8 <== NOT EXECUTED 200ae80: c0 30 60 26 clrh [ %g1 + 0x26 ] <== NOT EXECUTED return result; } 200ae84: 81 c7 e0 08 ret <== NOT EXECUTED 200ae88: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 0200ad08 : int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 200ad08: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 200ad0c: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_SYM_LINK ) 200ad10: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200ad14: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 200ad18: 02 80 00 04 be 200ad28 <== NOT EXECUTED 200ad1c: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 200ad20: 7f ff ee 09 call 2006544 <== NOT EXECUTED 200ad24: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED if ( !jnode->Parent ) 200ad28: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 200ad2c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200ad30: 32 80 00 06 bne,a 200ad48 <== NOT EXECUTED 200ad34: c2 24 40 00 st %g1, [ %l1 ] <== NOT EXECUTED rtems_fatal_error_occurred( 0xBAD00000 ); 200ad38: 7f ff ee 03 call 2006544 <== NOT EXECUTED 200ad3c: 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; 200ad40: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 200ad44: c2 24 40 00 st %g1, [ %l1 ] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( 200ad48: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 200ad4c: c2 48 40 00 ldsb [ %g1 ], %g1 <== NOT EXECUTED 200ad50: 80 a0 60 2f cmp %g1, 0x2f <== NOT EXECUTED 200ad54: 02 80 00 06 be 200ad6c <== NOT EXECUTED 200ad58: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 200ad5c: 02 80 00 04 be 200ad6c <== NOT EXECUTED 200ad60: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200ad64: 12 80 00 09 bne 200ad88 <== NOT EXECUTED 200ad68: 82 10 20 00 clr %g1 <== NOT EXECUTED 200ad6c: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 200ad70: d2 00 60 e8 ld [ %g1 + 0xe8 ], %o1 ! 20170e8 <== NOT EXECUTED 200ad74: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200ad78: 92 02 60 14 add %o1, 0x14, %o1 <== NOT EXECUTED 200ad7c: 40 00 0c 89 call 200dfa0 <== NOT EXECUTED 200ad80: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 200ad84: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED /* * Use eval path to evaluate the path of the symbolic link. */ result = IMFS_eval_path( 200ad88: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 200ad8c: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 200ad90: 90 00 40 08 add %g1, %o0, %o0 <== NOT EXECUTED 200ad94: 7f ff ff 33 call 200aa60 <== NOT EXECUTED 200ad98: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200ad9c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED &jnode->info.sym_link.name[i], flags, node ); IMFS_Set_handlers( node ); 200ada0: 7f ff fe f7 call 200a97c <== NOT EXECUTED 200ada4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 200ada8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200adac: 7f ff ff 0d call 200a9e0 <== NOT EXECUTED 200adb0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200adb4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200adb8: 12 80 00 06 bne 200add0 <== NOT EXECUTED 200adbc: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); 200adc0: 40 00 0a a3 call 200d84c <__errno> <== NOT EXECUTED 200adc4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 200adc8: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 200adcc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 200add0: 81 c7 e0 08 ret <== NOT EXECUTED 200add4: 81 e8 00 00 restore <== NOT EXECUTED 0200d138 : int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { 200d138: 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 ) ) ) 200d13c: 83 2e 60 10 sll %i1, 0x10, %g1 <== NOT EXECUTED 200d140: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 200d144: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 200d148: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200d14c: 02 80 00 08 be 200d16c <== NOT EXECUTED 200d150: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EPERM ); 200d154: 40 00 01 be call 200d84c <__errno> <== NOT EXECUTED 200d158: 01 00 00 00 nop <== NOT EXECUTED 200d15c: 82 10 20 01 mov 1, %g1 ! 1 <== NOT EXECUTED 200d160: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 200d164: 10 80 00 0c b 200d194 <== NOT EXECUTED 200d168: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO); 200d16c: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 <== NOT EXECUTED jnode->st_mode |= mode; IMFS_update_ctime( jnode ); 200d170: 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; 200d174: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 200d178: 82 16 40 01 or %i1, %g1, %g1 <== NOT EXECUTED IMFS_update_ctime( jnode ); 200d17c: 92 10 20 00 clr %o1 <== NOT EXECUTED 200d180: 7f ff f9 df call 200b8fc <== NOT EXECUTED 200d184: c2 36 20 2e sth %g1, [ %i0 + 0x2e ] <== NOT EXECUTED 200d188: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 200d18c: 84 10 20 00 clr %g2 <== NOT EXECUTED 200d190: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED return 0; } 200d194: 81 c7 e0 08 ret <== NOT EXECUTED 200d198: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED 0201ee00 : int cmd, rtems_libio_t *iop ) { return 0; } 201ee00: 81 c3 e0 08 retl <== NOT EXECUTED 201ee04: 90 10 20 00 clr %o0 <== NOT EXECUTED 0201ee08 : int IMFS_fdatasync( rtems_libio_t *iop ) { return 0; } 201ee08: 81 c3 e0 08 retl <== NOT EXECUTED 201ee0c: 90 10 20 00 clr %o0 <== NOT EXECUTED 0200b17c : IMFS_jnode_t *IMFS_find_match_in_dir( IMFS_jnode_t *directory, char *name ) { 200b17c: 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 ); 200b180: 80 a6 20 00 cmp %i0, 0 200b184: 12 80 00 09 bne 200b1a8 200b188: 80 a6 60 00 cmp %i1, 0 200b18c: 11 00 80 58 sethi %hi(0x2016000), %o0 <== NOT EXECUTED 200b190: 15 00 80 58 sethi %hi(0x2016000), %o2 <== NOT EXECUTED 200b194: 90 12 22 38 or %o0, 0x238, %o0 <== NOT EXECUTED 200b198: 94 12 a2 88 or %o2, 0x288, %o2 <== NOT EXECUTED 200b19c: 7f ff db 53 call 2001ee8 <__assert> <== NOT EXECUTED 200b1a0: 92 10 20 2a mov 0x2a, %o1 <== NOT EXECUTED if ( !name ) 200b1a4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 200b1a8: 22 80 00 12 be,a 200b1f0 200b1ac: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; assert( name ); if ( !directory ) 200b1b0: 80 a6 20 00 cmp %i0, 0 200b1b4: 02 80 00 0f be 200b1f0 200b1b8: 90 10 00 19 mov %i1, %o0 /* * Check for "." and ".." */ if ( !strcmp( name, dotname ) ) 200b1bc: 13 00 80 5c sethi %hi(0x2017000), %o1 200b1c0: 40 00 0e 31 call 200ea84 200b1c4: 92 12 60 68 or %o1, 0x68, %o1 ! 2017068 200b1c8: 80 a2 20 00 cmp %o0, 0 200b1cc: 02 80 00 09 be 200b1f0 200b1d0: 90 10 00 19 mov %i1, %o0 return directory; if ( !strcmp( name, dotdotname ) ) 200b1d4: 13 00 80 5c sethi %hi(0x2017000), %o1 200b1d8: 40 00 0e 2b call 200ea84 200b1dc: 92 12 60 70 or %o1, 0x70, %o1 ! 2017070 200b1e0: 80 a2 20 00 cmp %o0, 0 200b1e4: 32 80 00 05 bne,a 200b1f8 200b1e8: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 return directory->Parent; 200b1ec: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 200b1f0: 81 c7 e0 08 ret <== NOT EXECUTED 200b1f4: 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 ); 200b1f8: 10 80 00 09 b 200b21c 200b1fc: 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 ) ) 200b200: 40 00 0e 21 call 200ea84 200b204: 90 10 00 19 mov %i1, %o0 200b208: 80 a2 20 00 cmp %o0, 0 200b20c: 32 80 00 04 bne,a 200b21c 200b210: e0 04 00 00 ld [ %l0 ], %l0 200b214: 81 c7 e0 08 ret 200b218: 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 ); 200b21c: 80 a4 00 18 cmp %l0, %i0 200b220: 12 bf ff f8 bne 200b200 200b224: 92 04 20 0c add %l0, 0xc, %o1 200b228: b0 10 20 00 clr %i0 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } 200b22c: 81 c7 e0 08 ret 200b230: 81 e8 00 00 restore 02014a10 : int IMFS_freenodinfo( rtems_filesystem_location_info_t *pathloc /* IN */ ) { return 0; } 2014a10: 81 c3 e0 08 retl <== NOT EXECUTED 2014a14: 90 10 20 00 clr %o0 <== NOT EXECUTED 02014a18 : ((IMFS_jnode_t *)( Chain_Head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { 2014a18: 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; 2014a1c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2014a20: 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; 2014a24: 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 ); 2014a28: 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; 2014a2c: 40 00 38 8b call 2022c58 <== NOT EXECUTED 2014a30: 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; 2014a34: c0 26 20 18 clr [ %i0 + 0x18 ] <== NOT EXECUTED do { next = jnode->Parent; loc.node_access = (void *)jnode; 2014a38: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED */ temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; 2014a3c: f0 04 20 08 ld [ %l0 + 8 ], %i0 <== NOT EXECUTED loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); 2014a40: 7f ff fd f4 call 2014210 <== NOT EXECUTED 2014a44: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { 2014a48: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 2014a4c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2014a50: 12 80 00 06 bne 2014a68 <== NOT EXECUTED 2014a54: 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 ) ) { 2014a58: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 2014a5c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2014a60: 12 80 00 08 bne 2014a80 <== NOT EXECUTED 2014a64: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED result = IMFS_unlink( &loc ); 2014a68: 7f ff bb 7e call 2003860 <== NOT EXECUTED 2014a6c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if (result != 0) 2014a70: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2014a74: 12 80 00 13 bne 2014ac0 <== NOT EXECUTED 2014a78: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return -1; jnode = next; } if ( jnode != NULL ) { 2014a7c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2014a80: 02 80 00 12 be 2014ac8 <== NOT EXECUTED 2014a84: 01 00 00 00 nop <== NOT EXECUTED if ( jnode->type == IMFS_DIRECTORY ) { 2014a88: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 2014a8c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2014a90: 32 bf ff eb bne,a 2014a3c <== NOT EXECUTED 2014a94: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED if ( jnode_has_children( jnode ) ) 2014a98: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 2014a9c: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 2014aa0: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2014aa4: 22 bf ff e6 be,a 2014a3c <== NOT EXECUTED 2014aa8: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 2014aac: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2014ab0: 02 80 00 06 be 2014ac8 <== NOT EXECUTED 2014ab4: 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; 2014ab8: 10 bf ff e1 b 2014a3c <== NOT EXECUTED 2014abc: 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 ); 2014ac0: 81 c7 e0 08 ret <== NOT EXECUTED 2014ac4: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED } } } while (jnode != NULL); return 0; } 2014ac8: 81 c7 e0 08 ret <== NOT EXECUTED 2014acc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 0200b234 : IMFS_token_types IMFS_get_token( const char *path, char *token, int *token_len ) { 200b234: 9d e3 bf 98 save %sp, -104, %sp register char c; /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; 200b238: c4 0e 00 00 ldub [ %i0 ], %g2 200b23c: 10 80 00 07 b 200b258 200b240: 86 10 20 00 clr %g3 while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { token[i] = c; if ( i == IMFS_NAME_MAX ) 200b244: 12 80 00 04 bne 200b254 200b248: 86 00 e0 01 inc %g3 200b24c: 81 c7 e0 08 ret <== NOT EXECUTED 200b250: 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]; 200b254: 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) ) { 200b258: 83 28 a0 18 sll %g2, 0x18, %g1 200b25c: 83 38 60 18 sra %g1, 0x18, %g1 200b260: 80 a0 60 2f cmp %g1, 0x2f 200b264: 02 80 00 09 be 200b288 200b268: 80 a0 60 5c cmp %g1, 0x5c 200b26c: 02 80 00 07 be 200b288 200b270: 80 a0 60 00 cmp %g1, 0 200b274: 02 80 00 06 be 200b28c 200b278: 80 a0 e0 00 cmp %g3, 0 200b27c: 80 a0 e0 20 cmp %g3, 0x20 200b280: 24 bf ff f1 ble,a 200b244 200b284: c4 28 c0 19 stb %g2, [ %g3 + %i1 ] /* * Copy a seperator into token. */ if ( i == 0 ) { 200b288: 80 a0 e0 00 cmp %g3, 0 200b28c: 12 80 00 0a bne 200b2b4 200b290: 82 00 c0 19 add %g3, %i1, %g1 token[i] = c; 200b294: c4 2e 40 00 stb %g2, [ %i1 ] if ( token[i] != '\0' ) { 200b298: 83 28 a0 18 sll %g2, 0x18, %g1 200b29c: 80 a0 60 00 cmp %g1, 0 200b2a0: 02 80 00 0a be 200b2c8 200b2a4: b0 10 20 00 clr %i0 200b2a8: 86 10 20 01 mov 1, %g3 200b2ac: 10 80 00 07 b 200b2c8 200b2b0: b0 10 20 01 mov 1, %i0 i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { 200b2b4: c2 48 7f ff ldsb [ %g1 + -1 ], %g1 200b2b8: 80 a0 60 00 cmp %g1, 0 200b2bc: 02 80 00 03 be 200b2c8 200b2c0: b0 10 20 03 mov 3, %i0 token[i] = '\0'; 200b2c4: 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 ) { 200b2c8: 80 a6 20 03 cmp %i0, 3 200b2cc: 12 80 00 11 bne 200b310 200b2d0: c6 26 80 00 st %g3, [ %i2 ] if ( strcmp( token, "..") == 0 ) 200b2d4: 90 10 00 19 mov %i1, %o0 200b2d8: 13 00 80 58 sethi %hi(0x2016000), %o1 200b2dc: 40 00 0d ea call 200ea84 200b2e0: 92 12 60 28 or %o1, 0x28, %o1 ! 2016028 200b2e4: 80 a2 20 00 cmp %o0, 0 200b2e8: 12 80 00 04 bne 200b2f8 200b2ec: 90 10 00 19 mov %i1, %o0 200b2f0: 81 c7 e0 08 ret <== NOT EXECUTED 200b2f4: 91 e8 20 02 restore %g0, 2, %o0 <== NOT EXECUTED type = IMFS_UP_DIR; else if ( strcmp( token, "." ) == 0 ) 200b2f8: 13 00 80 58 sethi %hi(0x2016000), %o1 200b2fc: 40 00 0d e2 call 200ea84 200b300: 92 12 62 98 or %o1, 0x298, %o1 ! 2016298 <_CPU_Trap_slot_template+0x70> 200b304: 80 a2 20 00 cmp %o0, 0 200b308: 22 80 00 02 be,a 200b310 200b30c: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED type = IMFS_CURRENT_DIR; } return type; } 200b310: 81 c7 e0 08 ret 200b314: 81 e8 00 00 restore 020034ec : int IMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 20034ec: 13 00 80 d6 sethi %hi(0x2035800), %o1 <== NOT EXECUTED 20034f0: 15 00 80 d8 sethi %hi(0x2036000), %o2 <== NOT EXECUTED 20034f4: 17 00 80 d8 sethi %hi(0x2036000), %o3 <== NOT EXECUTED 20034f8: 92 12 63 3c or %o1, 0x33c, %o1 <== NOT EXECUTED 20034fc: 94 12 a1 68 or %o2, 0x168, %o2 <== NOT EXECUTED 2003500: 96 12 e0 f8 or %o3, 0xf8, %o3 <== NOT EXECUTED 2003504: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2003508: 40 00 00 03 call 2003514 <== NOT EXECUTED 200350c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2003510: 01 00 00 00 nop 0200b318 : 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 ) { 200b318: 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, 200b31c: 03 00 80 5a sethi %hi(0x2016800), %g1 200b320: c4 00 62 d0 ld [ %g1 + 0x2d0 ], %g2 ! 2016ad0 200b324: 86 10 20 00 clr %g3 200b328: 10 80 00 05 b 200b33c 200b32c: 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) { 200b330: 22 80 00 02 be,a 200b338 200b334: 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) { 200b338: 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); 200b33c: 80 a0 e0 00 cmp %g3, 0 200b340: 32 80 00 07 bne,a 200b35c 200b344: 03 00 80 5e sethi %hi(0x2017800), %g1 200b348: 80 a0 62 00 cmp %g1, 0x200 200b34c: 04 bf ff f9 ble 200b330 200b350: 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) 200b354: 84 10 20 80 mov 0x80, %g2 <== NOT EXECUTED 200b358: 03 00 80 5e sethi %hi(0x2017800), %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( 200b35c: 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) 200b360: c4 20 60 0c st %g2, [ %g1 + 0xc ] * 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( 200b364: 92 10 20 01 mov 1, %o1 200b368: 90 10 20 00 clr %o0 200b36c: 15 00 80 57 sethi %hi(0x2015c00), %o2 200b370: 17 00 00 10 sethi %hi(0x4000), %o3 200b374: 94 12 a3 a8 or %o2, 0x3a8, %o2 200b378: 40 00 07 13 call 200cfc4 200b37c: 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; 200b380: 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( 200b384: 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; 200b388: f2 26 20 20 st %i1, [ %i0 + 0x20 ] "", ( S_IFDIR | 0755 ), NULL ); temp_mt_entry->mt_fs_root.handlers = directory_handlers; 200b38c: 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; 200b390: 13 00 80 5c sethi %hi(0x2017000), %o1 200b394: 90 06 20 30 add %i0, 0x30, %o0 200b398: 40 00 0b 02 call 200dfa0 200b39c: 92 12 62 18 or %o1, 0x218, %o1 /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); 200b3a0: 90 10 20 01 mov 1, %o0 200b3a4: 7f ff dc 4d call 20024d8 200b3a8: 92 10 20 0c mov 0xc, %o1 if ( !fs_info ){ 200b3ac: 80 a2 20 00 cmp %o0, 0 200b3b0: 12 80 00 0a bne 200b3d8 200b3b4: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 free(temp_mt_entry->mt_fs_root.node_access); 200b3b8: 7f ff db 8a call 20021e0 <== NOT EXECUTED 200b3bc: 90 10 00 02 mov %g2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); 200b3c0: 40 00 09 23 call 200d84c <__errno> <== NOT EXECUTED 200b3c4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b3c8: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 200b3cc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b3d0: 81 c7 e0 08 ret <== NOT EXECUTED 200b3d4: 81 e8 00 00 restore <== NOT EXECUTED /* * Set st_ino for the root to 1. */ fs_info->ino_count = 1; 200b3d8: 82 10 20 01 mov 1, %g1 200b3dc: 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; 200b3e0: 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; 200b3e4: f6 22 20 08 st %i3, [ %o0 + 8 ] jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; 200b3e8: 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; 200b3ec: 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; } 200b3f0: 81 c7 e0 08 ret 200b3f4: 91 e8 20 00 restore %g0, 0, %o0 020035f4 : int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { 20035f4: 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; 20035f8: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 20035fc: c2 27 bf dc st %g1, [ %fp + -36 ] <== NOT EXECUTED if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) 2003600: c2 10 60 30 lduh [ %g1 + 0x30 ], %g1 <== NOT EXECUTED 2003604: 80 a0 60 07 cmp %g1, 7 <== NOT EXECUTED 2003608: 08 80 00 06 bleu 2003620 <== NOT EXECUTED 200360c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EMLINK ); 2003610: 40 00 76 ed call 20211c4 <__errno> <== NOT EXECUTED 2003614: 01 00 00 00 nop <== NOT EXECUTED 2003618: 10 80 00 13 b 2003664 <== NOT EXECUTED 200361c: 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 ); 2003620: a0 07 bf bb add %fp, -69, %l0 <== NOT EXECUTED 2003624: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 2003628: 7f ff ff 78 call 2003408 <== NOT EXECUTED 200362c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 2003630: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2003634: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2003638: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 200363c: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 2003640: 98 07 bf dc add %fp, -36, %o4 <== NOT EXECUTED 2003644: 40 00 42 90 call 2014084 <== NOT EXECUTED 2003648: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 200364c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2003650: 12 80 00 08 bne 2003670 <== NOT EXECUTED 2003654: c4 07 bf dc ld [ %fp + -36 ], %g2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 2003658: 40 00 76 db call 20211c4 <__errno> <== NOT EXECUTED 200365c: 01 00 00 00 nop <== NOT EXECUTED 2003660: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 2003664: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2003668: 81 c7 e0 08 ret <== NOT EXECUTED 200366c: 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 ); 2003670: 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++; 2003674: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 2003678: 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++; 200367c: 82 00 60 01 inc %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 2003680: 40 00 01 cf call 2003dbc <== NOT EXECUTED 2003684: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED 2003688: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 200368c: c2 07 bf dc ld [ %fp + -36 ], %g1 <== NOT EXECUTED 2003690: c4 20 60 44 st %g2, [ %g1 + 0x44 ] <== NOT EXECUTED return 0; } 2003694: 81 c7 e0 08 ret <== NOT EXECUTED 2003698: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 020189fc : MEMFILE_STATIC int IMFS_memfile_addblock( IMFS_jnode_t *the_jnode, unsigned int block ) { 20189fc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED block_p memory; block_p *block_entry_ptr; assert( the_jnode ); 2018a00: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 2018a04: 32 80 00 09 bne,a 2018a28 <== NOT EXECUTED 2018a08: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018a0c: 92 10 21 69 mov 0x169, %o1 <== NOT EXECUTED 2018a10: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018a14: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018a18: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018a1c: 7f ff ac 2d call 2003ad0 <__assert> <== NOT EXECUTED 2018a20: 94 12 a1 f0 or %o2, 0x1f0, %o2 <== NOT EXECUTED 2018a24: 30 80 00 0d b,a 2018a58 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 2018a28: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018a2c: 02 80 00 07 be 2018a48 <== NOT EXECUTED 2018a30: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018a34: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018a38: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018a3c: 94 12 a2 00 or %o2, 0x200, %o2 <== NOT EXECUTED 2018a40: 7f ff ac 24 call 2003ad0 <__assert> <== NOT EXECUTED 2018a44: 92 10 21 6d mov 0x16d, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 2018a48: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018a4c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018a50: 02 80 00 08 be 2018a70 <== NOT EXECUTED 2018a54: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 2018a58: 40 00 21 db call 20211c4 <__errno> <== NOT EXECUTED 2018a5c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2018a60: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 2018a64: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2018a68: 81 c7 e0 08 ret <== NOT EXECUTED 2018a6c: 81 e8 00 00 restore <== NOT EXECUTED block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); 2018a70: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2018a74: 7f ff fe 68 call 2018414 <== NOT EXECUTED 2018a78: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED if ( *block_entry_ptr ) 2018a7c: 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 ); 2018a80: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( *block_entry_ptr ) 2018a84: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2018a88: 12 bf ff f8 bne 2018a68 <== NOT EXECUTED 2018a8c: 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(); 2018a90: 7f ff fe 54 call 20183e0 <== NOT EXECUTED 2018a94: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED if ( !memory ) 2018a98: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018a9c: 02 80 00 04 be 2018aac <== NOT EXECUTED 2018aa0: 01 00 00 00 nop <== NOT EXECUTED return 1; *block_entry_ptr = memory; 2018aa4: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED 2018aa8: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 2018aac: 81 c7 e0 08 ret <== NOT EXECUTED 2018ab0: 81 e8 00 00 restore <== NOT EXECUTED 02018ab4 : MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { 2018ab4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 2018ab8: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 2018abc: 32 80 00 09 bne,a 2018ae0 <== NOT EXECUTED 2018ac0: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018ac4: 92 10 21 31 mov 0x131, %o1 <== NOT EXECUTED 2018ac8: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018acc: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018ad0: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018ad4: 7f ff ab ff call 2003ad0 <__assert> <== NOT EXECUTED 2018ad8: 94 12 a1 f0 or %o2, 0x1f0, %o2 <== NOT EXECUTED 2018adc: 30 80 00 0d b,a 2018b10 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 2018ae0: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018ae4: 02 80 00 07 be 2018b00 <== NOT EXECUTED 2018ae8: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018aec: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018af0: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018af4: 94 12 a2 00 or %o2, 0x200, %o2 <== NOT EXECUTED 2018af8: 7f ff ab f6 call 2003ad0 <__assert> <== NOT EXECUTED 2018afc: 92 10 21 35 mov 0x135, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 2018b00: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018b04: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018b08: 22 80 00 06 be,a 2018b20 <== NOT EXECUTED 2018b0c: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 2018b10: 40 00 21 ad call 20211c4 <__errno> <== NOT EXECUTED 2018b14: 01 00 00 00 nop <== NOT EXECUTED 2018b18: 10 80 00 31 b 2018bdc <== NOT EXECUTED 2018b1c: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) 2018b20: e2 00 61 74 ld [ %g1 + 0x174 ], %l1 <== NOT EXECUTED 2018b24: a1 34 60 02 srl %l1, 2, %l0 <== NOT EXECUTED 2018b28: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2018b2c: 40 00 5d 89 call 2030150 <.umul> <== NOT EXECUTED 2018b30: 90 04 20 01 add %l0, 1, %o0 <== NOT EXECUTED 2018b34: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2018b38: 40 00 5d 86 call 2030150 <.umul> <== NOT EXECUTED 2018b3c: 90 02 20 01 inc %o0 <== NOT EXECUTED 2018b40: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 2018b44: 40 00 5d 83 call 2030150 <.umul> <== NOT EXECUTED 2018b48: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 2018b4c: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 2018b50: 2a 80 00 06 bcs,a 2018b68 <== NOT EXECUTED 2018b54: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 2018b58: 40 00 21 9b call 20211c4 <__errno> <== NOT EXECUTED 2018b5c: 01 00 00 00 nop <== NOT EXECUTED 2018b60: 10 80 00 1f b 2018bdc <== NOT EXECUTED 2018b64: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED if ( new_length <= the_jnode->info.file.size ) 2018b68: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 2018b6c: 04 80 00 24 ble 2018bfc <== NOT EXECUTED 2018b70: 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; 2018b74: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 2018b78: 40 00 5d b2 call 2030240 <.div> <== NOT EXECUTED 2018b7c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 2018b80: 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; 2018b84: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 2018b88: 40 00 5d ae call 2030240 <.div> <== NOT EXECUTED 2018b8c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2018b90: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 2018b94: 10 80 00 15 b 2018be8 <== NOT EXECUTED 2018b98: 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 ) ) { 2018b9c: 7f ff ff 98 call 20189fc <== NOT EXECUTED 2018ba0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2018ba4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018ba8: 22 80 00 10 be,a 2018be8 <== NOT EXECUTED 2018bac: a0 04 20 01 inc %l0 <== NOT EXECUTED for ( ; block>=old_blocks ; block-- ) { 2018bb0: 10 80 00 06 b 2018bc8 <== NOT EXECUTED 2018bb4: 80 a4 00 11 cmp %l0, %l1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); 2018bb8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2018bbc: 7f ff fe c6 call 20186d4 <== NOT EXECUTED 2018bc0: 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-- ) { 2018bc4: 80 a4 00 11 cmp %l0, %l1 <== NOT EXECUTED 2018bc8: 1a bf ff fc bcc 2018bb8 <== NOT EXECUTED 2018bcc: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); } rtems_set_errno_and_return_minus_one( ENOSPC ); 2018bd0: 40 00 21 7d call 20211c4 <__errno> <== NOT EXECUTED 2018bd4: 01 00 00 00 nop <== NOT EXECUTED 2018bd8: 82 10 20 1c mov 0x1c, %g1 ! 1c <== NOT EXECUTED 2018bdc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2018be0: 10 80 00 07 b 2018bfc <== NOT EXECUTED 2018be4: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { 2018be8: 80 a4 00 12 cmp %l0, %l2 <== NOT EXECUTED 2018bec: 08 bf ff ec bleu 2018b9c <== NOT EXECUTED 2018bf0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; 2018bf4: f2 26 20 4c st %i1, [ %i0 + 0x4c ] <== NOT EXECUTED 2018bf8: 82 10 20 00 clr %g1 <== NOT EXECUTED return 0; } 2018bfc: 81 c7 e0 08 ret <== NOT EXECUTED 2018c00: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED 02018414 : #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { 2018414: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 2018418: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 201841c: 32 80 00 0a bne,a 2018444 <== NOT EXECUTED 2018420: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018424: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018428: 92 10 23 86 mov 0x386, %o1 <== NOT EXECUTED 201842c: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018430: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018434: 7f ff ad a7 call 2003ad0 <__assert> <== NOT EXECUTED 2018438: 94 12 a1 f0 or %o2, 0x1f0, %o2 ! 20331f0 <_CPU_Trap_slot_template+0xf88> <== NOT EXECUTED 201843c: 81 c7 e0 08 ret <== NOT EXECUTED 2018440: 81 e8 00 00 restore <== NOT EXECUTED if ( !the_jnode ) return NULL; assert( the_jnode->type == IMFS_MEMORY_FILE ); 2018444: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018448: 02 80 00 07 be 2018464 <== NOT EXECUTED 201844c: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018450: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018454: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018458: 94 12 a2 00 or %o2, 0x200, %o2 <== NOT EXECUTED 201845c: 7f ff ad 9d call 2003ad0 <__assert> <== NOT EXECUTED 2018460: 92 10 23 8a mov 0x38a, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 2018464: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018468: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 201846c: 32 bf ff f4 bne,a 201843c <== NOT EXECUTED 2018470: b0 10 20 00 clr %i0 <== NOT EXECUTED /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { 2018474: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 2018478: c2 00 61 74 ld [ %g1 + 0x174 ], %g1 ! 2037574 <== NOT EXECUTED 201847c: a3 30 60 02 srl %g1, 2, %l1 <== NOT EXECUTED 2018480: 82 04 7f ff add %l1, -1, %g1 <== NOT EXECUTED 2018484: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 2018488: 18 80 00 15 bgu 20184dc <== NOT EXECUTED 201848c: 90 04 60 01 add %l1, 1, %o0 <== NOT EXECUTED fprintf(stdout, "(s %d) ", block ); fflush(stdout); #endif p = info->indirect; if ( malloc_it ) { 2018490: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 2018494: 02 80 00 0e be 20184cc <== NOT EXECUTED 2018498: e0 06 20 50 ld [ %i0 + 0x50 ], %l0 <== NOT EXECUTED if ( !p ) { 201849c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 20184a0: 32 80 00 09 bne,a 20184c4 <== NOT EXECUTED 20184a4: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 <== NOT EXECUTED p = memfile_alloc_block(); 20184a8: 7f ff ff ce call 20183e0 <== NOT EXECUTED 20184ac: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 20184b0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20184b4: 22 bf ff e2 be,a 201843c <== NOT EXECUTED 20184b8: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; info->indirect = p; 20184bc: d0 26 20 50 st %o0, [ %i0 + 0x50 ] <== NOT EXECUTED } return &info->indirect[ my_block ]; 20184c0: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 <== NOT EXECUTED 20184c4: 10 80 00 7f b 20186c0 <== NOT EXECUTED 20184c8: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED } if ( !p ) return 0; return &info->indirect[ my_block ]; 20184cc: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED info->indirect = p; } return &info->indirect[ my_block ]; } if ( !p ) 20184d0: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED return 0; return &info->indirect[ my_block ]; 20184d4: 10 80 00 32 b 201859c <== NOT EXECUTED 20184d8: 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 ) { 20184dc: 40 00 5f 1d call 2030150 <.umul> <== NOT EXECUTED 20184e0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 20184e4: 82 02 3f ff add %o0, -1, %g1 <== NOT EXECUTED 20184e8: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 20184ec: 18 80 00 30 bgu 20185ac <== NOT EXECUTED 20184f0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED #if 0 fprintf(stdout, "(d %d) ", block ); fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; 20184f4: a0 26 40 11 sub %i1, %l1, %l0 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 20184f8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 20184fc: 40 00 5f fb call 20304e8 <.urem> <== NOT EXECUTED 2018500: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 2018504: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 2018508: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 201850c: 40 00 5f 4b call 2030238 <.udiv> <== NOT EXECUTED 2018510: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 2018514: 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; 2018518: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 201851c: 02 80 00 18 be 201857c <== NOT EXECUTED 2018520: e0 06 20 54 ld [ %i0 + 0x54 ], %l0 <== NOT EXECUTED if ( !p ) { 2018524: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2018528: 32 80 00 09 bne,a 201854c <== NOT EXECUTED 201852c: a3 2c 60 02 sll %l1, 2, %l1 <== NOT EXECUTED p = memfile_alloc_block(); 2018530: 7f ff ff ac call 20183e0 <== NOT EXECUTED 2018534: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 2018538: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201853c: 02 80 00 63 be 20186c8 <== NOT EXECUTED 2018540: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->doubly_indirect = p; 2018544: d0 26 20 54 st %o0, [ %i0 + 0x54 ] <== NOT EXECUTED } p1 = (block_p *)p[ doubly ]; 2018548: a3 2c 60 02 sll %l1, 2, %l1 <== NOT EXECUTED 201854c: c2 04 00 11 ld [ %l0 + %l1 ], %g1 <== NOT EXECUTED if ( !p1 ) { 2018550: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 2018554: 12 80 00 4f bne 2018690 <== NOT EXECUTED 2018558: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED p1 = memfile_alloc_block(); 201855c: 7f ff ff a1 call 20183e0 <== NOT EXECUTED 2018560: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 2018564: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 2018568: 02 80 00 58 be 20186c8 <== NOT EXECUTED 201856c: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p[ doubly ] = (block_p) p1; 2018570: c2 24 00 11 st %g1, [ %l0 + %l1 ] <== NOT EXECUTED } return (block_p *)&p1[ singly ]; 2018574: 10 80 00 47 b 2018690 <== NOT EXECUTED 2018578: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED } if ( !p ) 201857c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2018580: 02 bf ff af be 201843c <== NOT EXECUTED 2018584: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; p = (block_p *)p[ doubly ]; 2018588: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 201858c: 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 ]; 2018590: 85 2c a0 02 sll %l2, 2, %g2 <== NOT EXECUTED if ( !p ) return 0; p = (block_p *)p[ doubly ]; if ( !p ) 2018594: 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 ]; 2018598: b0 00 40 02 add %g1, %g2, %i0 <== NOT EXECUTED if ( !p ) return 0; p = (block_p *)p[ doubly ]; if ( !p ) 201859c: 12 80 00 4c bne 20186cc <== NOT EXECUTED 20185a0: 01 00 00 00 nop <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p ) return 0; return (block_p *)&p2[ singly ]; 20185a4: 81 c7 e0 08 ret <== NOT EXECUTED 20185a8: 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 ) { 20185ac: 90 02 20 01 inc %o0 <== NOT EXECUTED 20185b0: 40 00 5e e8 call 2030150 <.umul> <== NOT EXECUTED 20185b4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 20185b8: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 20185bc: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 20185c0: 18 80 00 42 bgu 20186c8 <== NOT EXECUTED 20185c4: a0 26 40 10 sub %i1, %l0, %l0 <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 20185c8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 20185cc: 40 00 5f c7 call 20304e8 <.urem> <== NOT EXECUTED 20185d0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 20185d4: 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; 20185d8: a6 10 00 08 mov %o0, %l3 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 20185dc: 40 00 5f 17 call 2030238 <.udiv> <== NOT EXECUTED 20185e0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; 20185e4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 20185e8: 40 00 5f 14 call 2030238 <.udiv> <== NOT EXECUTED 20185ec: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 20185f0: 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; 20185f4: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 20185f8: 40 00 5f bc call 20304e8 <.urem> <== NOT EXECUTED 20185fc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 2018600: 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; 2018604: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 2018608: 02 80 00 24 be 2018698 <== NOT EXECUTED 201860c: e0 06 20 58 ld [ %i0 + 0x58 ], %l0 <== NOT EXECUTED if ( !p ) { 2018610: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2018614: 12 80 00 09 bne 2018638 <== NOT EXECUTED 2018618: b5 2e 60 02 sll %i1, 2, %i2 <== NOT EXECUTED p = memfile_alloc_block(); 201861c: 7f ff ff 71 call 20183e0 <== NOT EXECUTED 2018620: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 2018624: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018628: 02 80 00 28 be 20186c8 <== NOT EXECUTED 201862c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->triply_indirect = p; 2018630: d0 26 20 58 st %o0, [ %i0 + 0x58 ] <== NOT EXECUTED } p1 = (block_p *) p[ triply ]; 2018634: b5 2e 60 02 sll %i1, 2, %i2 <== NOT EXECUTED 2018638: c2 04 00 1a ld [ %l0 + %i2 ], %g1 <== NOT EXECUTED if ( !p1 ) { 201863c: a2 90 60 00 orcc %g1, 0, %l1 <== NOT EXECUTED 2018640: 32 80 00 09 bne,a 2018664 <== NOT EXECUTED 2018644: a1 2c a0 02 sll %l2, 2, %l0 <== NOT EXECUTED p1 = memfile_alloc_block(); 2018648: 7f ff ff 66 call 20183e0 <== NOT EXECUTED 201864c: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 2018650: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 2018654: 02 80 00 1d be 20186c8 <== NOT EXECUTED 2018658: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED return 0; p[ triply ] = (block_p) p1; 201865c: c2 24 00 1a st %g1, [ %l0 + %i2 ] <== NOT EXECUTED } p2 = (block_p *)p1[ doubly ]; 2018660: a1 2c a0 02 sll %l2, 2, %l0 <== NOT EXECUTED 2018664: c2 04 40 10 ld [ %l1 + %l0 ], %g1 <== NOT EXECUTED if ( !p2 ) { 2018668: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 201866c: 12 80 00 09 bne 2018690 <== NOT EXECUTED 2018670: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED p2 = memfile_alloc_block(); 2018674: 7f ff ff 5b call 20183e0 <== NOT EXECUTED 2018678: 01 00 00 00 nop <== NOT EXECUTED if ( !p2 ) 201867c: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 2018680: 02 80 00 12 be 20186c8 <== NOT EXECUTED 2018684: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p1[ doubly ] = (block_p) p2; 2018688: c2 24 40 10 st %g1, [ %l1 + %l0 ] <== NOT EXECUTED } return (block_p *)&p2[ singly ]; 201868c: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED 2018690: 81 c7 e0 08 ret <== NOT EXECUTED 2018694: 91 ea 00 01 restore %o0, %g1, %o0 <== NOT EXECUTED } if ( !p ) 2018698: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 201869c: 02 bf ff 68 be 201843c <== NOT EXECUTED 20186a0: 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 ]; 20186a4: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED 20186a8: d0 04 00 01 ld [ %l0 + %g1 ], %o0 <== NOT EXECUTED if ( !p1 ) 20186ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20186b0: 02 bf ff 63 be 201843c <== NOT EXECUTED 20186b4: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p ) return 0; return (block_p *)&p2[ singly ]; 20186b8: c4 02 00 01 ld [ %o0 + %g1 ], %g2 <== NOT EXECUTED 20186bc: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED 20186c0: 81 c7 e0 08 ret <== NOT EXECUTED 20186c4: 91 e8 40 02 restore %g1, %g2, %o0 <== NOT EXECUTED 20186c8: b0 10 20 00 clr %i0 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 20186cc: 81 c7 e0 08 ret <== NOT EXECUTED 20186d0: 81 e8 00 00 restore <== NOT EXECUTED 02018ff4 : IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { 2018ff4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 2018ff8: a8 96 20 00 orcc %i0, 0, %l4 <== NOT EXECUTED 2018ffc: 32 80 00 09 bne,a 2019020 <== NOT EXECUTED 2019000: c2 05 20 48 ld [ %l4 + 0x48 ], %g1 <== NOT EXECUTED 2019004: 92 10 22 4a mov 0x24a, %o1 <== NOT EXECUTED 2019008: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 201900c: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2019010: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2019014: 7f ff aa af call 2003ad0 <__assert> <== NOT EXECUTED 2019018: 94 12 a1 f0 or %o2, 0x1f0, %o2 <== NOT EXECUTED 201901c: 30 80 00 0f b,a 2019058 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE || 2019020: 82 00 7f fb add %g1, -5, %g1 <== NOT EXECUTED 2019024: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2019028: 08 80 00 07 bleu 2019044 <== NOT EXECUTED 201902c: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2019030: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2019034: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2019038: 94 12 a2 50 or %o2, 0x250, %o2 <== NOT EXECUTED 201903c: 7f ff aa a5 call 2003ad0 <__assert> <== NOT EXECUTED 2019040: 92 10 22 4f mov 0x24f, %o1 <== NOT EXECUTED the_jnode->type == IMFS_LINEAR_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE && 2019044: c4 05 20 48 ld [ %l4 + 0x48 ], %g2 <== NOT EXECUTED 2019048: 82 00 bf fb add %g2, -5, %g1 <== NOT EXECUTED 201904c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2019050: 08 80 00 06 bleu 2019068 <== NOT EXECUTED 2019054: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED the_jnode->type != IMFS_LINEAR_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 2019058: 40 00 20 5b call 20211c4 <__errno> <== NOT EXECUTED 201905c: 01 00 00 00 nop <== NOT EXECUTED 2019060: 10 80 00 0d b 2019094 <== NOT EXECUTED 2019064: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED /* * Error checks on arguments */ assert( dest ); 2019068: 12 80 00 0e bne 20190a0 <== NOT EXECUTED 201906c: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 2019070: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2019074: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2019078: 92 10 22 58 mov 0x258, %o1 <== NOT EXECUTED 201907c: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2019080: 7f ff aa 94 call 2003ad0 <__assert> <== NOT EXECUTED 2019084: 94 12 a2 a0 or %o2, 0x2a0, %o2 <== NOT EXECUTED if ( !dest ) rtems_set_errno_and_return_minus_one( EINVAL ); 2019088: 40 00 20 4f call 20211c4 <__errno> <== NOT EXECUTED 201908c: 01 00 00 00 nop <== NOT EXECUTED 2019090: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 2019094: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2019098: 10 80 00 74 b 2019268 <== NOT EXECUTED 201909c: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED /* * If there is nothing to read, then quick exit. */ my_length = length; if ( !my_length ) 20190a0: 02 bf ff fa be 2019088 <== NOT EXECUTED 20190a4: 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) { 20190a8: 32 80 00 0d bne,a 20190dc <== NOT EXECUTED 20190ac: 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)) 20190b0: c2 05 20 4c ld [ %l4 + 0x4c ], %g1 <== NOT EXECUTED 20190b4: b0 10 00 1b mov %i3, %i0 <== NOT EXECUTED 20190b8: 82 20 40 19 sub %g1, %i1, %g1 <== NOT EXECUTED 20190bc: 80 a6 c0 01 cmp %i3, %g1 <== NOT EXECUTED 20190c0: 08 80 00 03 bleu 20190cc <== NOT EXECUTED 20190c4: d2 05 20 50 ld [ %l4 + 0x50 ], %o1 <== NOT EXECUTED my_length = the_jnode->info.linearfile.size - start; 20190c8: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED memcpy(dest, &file_ptr[start], my_length); 20190cc: 92 02 40 19 add %o1, %i1, %o1 <== NOT EXECUTED 20190d0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 20190d4: 10 80 00 5d b 2019248 <== NOT EXECUTED 20190d8: 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 ) 20190dc: 82 06 c0 19 add %i3, %i1, %g1 <== NOT EXECUTED 20190e0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 20190e4: 08 80 00 03 bleu 20190f0 <== NOT EXECUTED 20190e8: a0 10 00 1b mov %i3, %l0 <== NOT EXECUTED my_length = the_jnode->info.file.size - start; 20190ec: 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; 20190f0: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 20190f4: e2 00 61 74 ld [ %g1 + 0x174 ], %l1 ! 2037574 <== NOT EXECUTED 20190f8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 20190fc: 40 00 5c fd call 20304f0 <.rem> <== NOT EXECUTED 2019100: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 2019104: 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; 2019108: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 201910c: 40 00 5c 4d call 2030240 <.div> <== NOT EXECUTED 2019110: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 2019114: 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; 2019118: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( start_offset ) { 201911c: a6 10 00 1a mov %i2, %l3 <== NOT EXECUTED 2019120: 02 80 00 1d be 2019194 <== NOT EXECUTED 2019124: 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 ); 2019128: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED 201912c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2019130: 7f ff fc b9 call 2018414 <== NOT EXECUTED 2019134: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 2019138: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201913c: 12 80 00 0a bne 2019164 <== NOT EXECUTED 2019140: 92 24 40 12 sub %l1, %l2, %o1 <== NOT EXECUTED 2019144: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2019148: 92 10 22 94 mov 0x294, %o1 <== NOT EXECUTED 201914c: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2019150: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2019154: 7f ff aa 5f call 2003ad0 <__assert> <== NOT EXECUTED 2019158: 94 12 a2 40 or %o2, 0x240, %o2 ! 2033240 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED 201915c: 10 80 00 43 b 2019268 <== NOT EXECUTED 2019160: 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; 2019164: 80 a4 00 09 cmp %l0, %o1 <== NOT EXECUTED 2019168: 08 80 00 03 bleu 2019174 <== NOT EXECUTED 201916c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2019170: 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 ); 2019174: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED dest += to_copy; 2019178: 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 ); 201917c: 92 04 80 09 add %l2, %o1, %o1 <== NOT EXECUTED dest += to_copy; block++; 2019180: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 2019184: a0 24 00 0a sub %l0, %o2, %l0 <== NOT EXECUTED 2019188: 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 ); 201918c: 40 00 26 b3 call 2022c58 <== NOT EXECUTED 2019190: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 2019194: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 2019198: f4 00 61 74 ld [ %g1 + 0x174 ], %i2 ! 2037574 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 201919c: 10 80 00 12 b 20191e4 <== NOT EXECUTED 20191a0: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 20191a4: 7f ff fc 9c call 2018414 <== NOT EXECUTED 20191a8: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 20191ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20191b0: 32 80 00 06 bne,a 20191c8 <== NOT EXECUTED 20191b4: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED 20191b8: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 20191bc: 92 10 22 a5 mov 0x2a5, %o1 <== NOT EXECUTED 20191c0: 10 80 00 1a b 2019228 <== NOT EXECUTED 20191c4: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); dest += to_copy; block++; 20191c8: 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 ); 20191cc: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED dest += to_copy; block++; my_length -= to_copy; 20191d0: a0 24 00 1a sub %l0, %i2, %l0 <== NOT EXECUTED copied += to_copy; 20191d4: 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 ); 20191d8: a6 04 c0 1a add %l3, %i2, %l3 <== NOT EXECUTED 20191dc: 40 00 26 9f call 2022c58 <== NOT EXECUTED 20191e0: 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 ) { 20191e4: c2 04 61 74 ld [ %l1 + 0x174 ], %g1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 20191e8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 20191ec: 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 ) { 20191f0: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 20191f4: 1a bf ff ec bcc 20191a4 <== NOT EXECUTED 20191f8: 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 ) { 20191fc: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2019200: 22 80 00 15 be,a 2019254 <== NOT EXECUTED 2019204: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 2019208: 7f ff fc 83 call 2018414 <== NOT EXECUTED 201920c: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 2019210: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2019214: 32 80 00 0a bne,a 201923c <== NOT EXECUTED 2019218: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED 201921c: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2019220: 92 10 22 b7 mov 0x2b7, %o1 <== NOT EXECUTED 2019224: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2019228: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 201922c: 7f ff aa 29 call 2003ad0 <__assert> <== NOT EXECUTED 2019230: 94 12 a2 40 or %o2, 0x240, %o2 ! 2033240 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED if ( !block_ptr ) return copied; 2019234: 10 80 00 0d b 2019268 <== NOT EXECUTED 2019238: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED memcpy( dest, &(*block_ptr)[ 0 ], my_length ); copied += my_length; 201923c: 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 ); 2019240: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 2019244: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2019248: 40 00 26 84 call 2022c58 <== NOT EXECUTED 201924c: 01 00 00 00 nop <== NOT EXECUTED copied += my_length; } IMFS_update_atime( the_jnode ); 2019250: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 2019254: 7f ff aa da call 2003dbc <== NOT EXECUTED 2019258: 92 10 20 00 clr %o1 <== NOT EXECUTED 201925c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return copied; 2019260: 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 ); 2019264: c2 25 20 3c st %g1, [ %l4 + 0x3c ] <== NOT EXECUTED return copied; } 2019268: 81 c7 e0 08 ret <== NOT EXECUTED 201926c: 91 e8 00 0a restore %g0, %o2, %o0 <== NOT EXECUTED 02018774 : */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { 2018774: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 2018778: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 201877c: 32 80 00 09 bne,a 20187a0 <== NOT EXECUTED 2018780: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018784: 92 10 21 ec mov 0x1ec, %o1 <== NOT EXECUTED 2018788: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 201878c: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018790: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018794: 7f ff ac cf call 2003ad0 <__assert> <== NOT EXECUTED 2018798: 94 12 a1 f0 or %o2, 0x1f0, %o2 <== NOT EXECUTED 201879c: 30 80 00 0d b,a 20187d0 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 20187a0: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 20187a4: 02 80 00 07 be 20187c0 <== NOT EXECUTED 20187a8: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 20187ac: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 20187b0: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 20187b4: 94 12 a2 00 or %o2, 0x200, %o2 <== NOT EXECUTED 20187b8: 7f ff ac c6 call 2003ad0 <__assert> <== NOT EXECUTED 20187bc: 92 10 21 f0 mov 0x1f0, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 20187c0: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 20187c4: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 20187c8: 22 80 00 08 be,a 20187e8 <== NOT EXECUTED 20187cc: 21 00 80 dd sethi %hi(0x2037400), %l0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 20187d0: 40 00 22 7d call 20211c4 <__errno> <== NOT EXECUTED 20187d4: 01 00 00 00 nop <== NOT EXECUTED 20187d8: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 20187dc: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 20187e0: 10 80 00 4b b 201890c <== NOT EXECUTED 20187e4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 20187e8: 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; 20187ec: c4 04 21 74 ld [ %l0 + 0x174 ], %g2 <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 20187f0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20187f4: 02 80 00 05 be 2018808 <== NOT EXECUTED 20187f8: a5 30 a0 02 srl %g2, 2, %l2 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); 20187fc: 90 06 20 50 add %i0, 0x50, %o0 <== NOT EXECUTED 2018800: 7f ff ff c1 call 2018704 <== NOT EXECUTED 2018804: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED } if ( info->doubly_indirect ) { 2018808: 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 ) { 2018810: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2018814: 12 80 00 0c bne 2018844 <== NOT EXECUTED 2018818: a0 10 20 00 clr %l0 <== NOT EXECUTED } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { 201881c: 10 80 00 13 b 2018868 <== NOT EXECUTED 2018820: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED } if ( info->doubly_indirect ) { for ( i=0 ; idoubly_indirect[i] ) { 2018824: 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] ) { 201882c: c4 02 00 01 ld [ %o0 + %g1 ], %g2 <== NOT EXECUTED 2018830: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2018834: 02 80 00 04 be 2018844 <== NOT EXECUTED 2018838: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED memfile_free_blocks_in_table( 201883c: 7f ff ff b2 call 2018704 <== NOT EXECUTED 2018840: 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 2018854: 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 ); 2018858: 90 06 20 54 add %i0, 0x54, %o0 <== NOT EXECUTED 201885c: 7f ff ff aa call 2018704 <== NOT EXECUTED 2018860: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED } if ( info->triply_indirect ) { 2018864: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED 2018868: 84 10 20 00 clr %g2 <== NOT EXECUTED 201886c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2018870: a6 10 20 00 clr %l3 <== NOT EXECUTED 2018874: 12 80 00 1d bne 20188e8 <== NOT EXECUTED 2018878: 2b 00 80 dd sethi %hi(0x2037400), %l5 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&info->triply_indirect, to_free ); } return 0; } 201887c: 81 c7 e0 08 ret <== NOT EXECUTED 2018880: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { 2018884: a9 2c e0 02 sll %l3, 2, %l4 <== NOT EXECUTED for ( i=0 ; itriply_indirect[i]; 2018888: d0 00 40 14 ld [ %g1 + %l4 ], %o0 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ 201888c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018890: 22 80 00 1c be,a 2018900 <== NOT EXECUTED 2018894: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED break; 2018898: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 201889c: 10 80 00 09 b 20188c0 <== NOT EXECUTED 20188a0: a2 10 20 00 clr %l1 <== NOT EXECUTED for ( j=0 ; j <== NOT EXECUTED 20188b0: a2 04 60 01 inc %l1 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&p[j], to_free); 20188b4: 7f ff ff 94 call 2018704 <== NOT EXECUTED 20188b8: 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 20188d0: 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( 20188d4: 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 20188e4: 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 20188f8: 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( 20188fc: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED 2018900: 7f ff ff 81 call 2018704 <== NOT EXECUTED 2018904: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 2018908: 84 10 20 00 clr %g2 <== NOT EXECUTED (block_p **)&info->triply_indirect, to_free ); } return 0; } 201890c: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED 2018910: 81 c7 e0 08 ret <== NOT EXECUTED 2018914: 81 e8 00 00 restore <== NOT EXECUTED 020186d4 : MEMFILE_STATIC int IMFS_memfile_remove_block( IMFS_jnode_t *the_jnode, unsigned int block ) { 20186d4: 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 ); 20186d8: 94 10 20 00 clr %o2 <== NOT EXECUTED 20186dc: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 20186e0: 7f ff ff 4d call 2018414 <== NOT EXECUTED 20186e4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ptr = *block_entry_ptr; 20186e8: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED *block_entry_ptr = 0; memfile_free_block( ptr ); return 1; } 20186ec: 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; 20186f0: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED memfile_free_block( ptr ); 20186f4: 7f ff ff 32 call 20183bc <== NOT EXECUTED 20186f8: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 1; } 20186fc: 81 c7 e0 08 ret <== NOT EXECUTED 2018700: 81 e8 00 00 restore <== NOT EXECUTED 02018cc8 : IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { 2018cc8: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 2018ccc: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 2018cd0: 32 80 00 09 bne,a 2018cf4 <== NOT EXECUTED 2018cd4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018cd8: 92 10 22 e1 mov 0x2e1, %o1 <== NOT EXECUTED 2018cdc: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018ce0: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018ce4: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018ce8: 7f ff ab 7a call 2003ad0 <__assert> <== NOT EXECUTED 2018cec: 94 12 a1 f0 or %o2, 0x1f0, %o2 <== NOT EXECUTED 2018cf0: 30 80 00 0d b,a 2018d24 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 2018cf4: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018cf8: 02 80 00 07 be 2018d14 <== NOT EXECUTED 2018cfc: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018d00: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018d04: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018d08: 94 12 a2 00 or %o2, 0x200, %o2 <== NOT EXECUTED 2018d0c: 7f ff ab 71 call 2003ad0 <__assert> <== NOT EXECUTED 2018d10: 92 10 22 e5 mov 0x2e5, %o1 <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 2018d14: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018d18: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 2018d1c: 02 80 00 06 be 2018d34 <== NOT EXECUTED 2018d20: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 2018d24: 40 00 21 28 call 20211c4 <__errno> <== NOT EXECUTED 2018d28: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 2018d2c: 10 80 00 0d b 2018d60 <== NOT EXECUTED 2018d30: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED /* * Error check arguments */ assert( source ); 2018d34: 12 80 00 0d bne 2018d68 <== NOT EXECUTED 2018d38: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 2018d3c: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018d40: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018d44: 92 10 22 ed mov 0x2ed, %o1 <== NOT EXECUTED 2018d48: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018d4c: 7f ff ab 61 call 2003ad0 <__assert> <== NOT EXECUTED 2018d50: 94 12 a2 38 or %o2, 0x238, %o2 <== NOT EXECUTED if ( !source ) rtems_set_errno_and_return_minus_one( EINVAL ); 2018d54: 40 00 21 1c call 20211c4 <__errno> <== NOT EXECUTED 2018d58: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 2018d5c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 2018d60: 10 80 00 71 b 2018f24 <== NOT EXECUTED 2018d64: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * If there is nothing to write, then quick exit. */ my_length = length; if ( !my_length ) 2018d68: 02 bf ff fb be 2018d54 <== NOT EXECUTED 2018d6c: 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 ) { 2018d70: 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; 2018d74: 92 06 c0 19 add %i3, %i1, %o1 <== NOT EXECUTED if ( last_byte > the_jnode->info.file.size ) { 2018d78: 80 a2 40 01 cmp %o1, %g1 <== NOT EXECUTED 2018d7c: 08 80 00 0b bleu 2018da8 <== NOT EXECUTED 2018d80: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED status = IMFS_memfile_extend( the_jnode, last_byte ); 2018d84: 7f ff ff 4c call 2018ab4 <== NOT EXECUTED 2018d88: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status ) 2018d8c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018d90: 22 80 00 06 be,a 2018da8 <== NOT EXECUTED 2018d94: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); 2018d98: 40 00 21 0b call 20211c4 <__errno> <== NOT EXECUTED 2018d9c: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 2018da0: 10 bf ff f0 b 2018d60 <== NOT EXECUTED 2018da4: 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; 2018da8: e0 00 61 74 ld [ %g1 + 0x174 ], %l0 <== NOT EXECUTED 2018dac: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2018db0: 40 00 5d d0 call 20304f0 <.rem> <== NOT EXECUTED 2018db4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 2018db8: 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; 2018dbc: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 2018dc0: 40 00 5d 20 call 2030240 <.div> <== NOT EXECUTED 2018dc4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 2018dc8: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 2018dcc: 12 80 00 05 bne 2018de0 <== NOT EXECUTED 2018dd0: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED 2018dd4: a0 10 00 1a mov %i2, %l0 <== NOT EXECUTED 2018dd8: 10 80 00 1d b 2018e4c <== NOT EXECUTED 2018ddc: 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 ); 2018de0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2018de4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2018de8: 7f ff fd 8b call 2018414 <== NOT EXECUTED 2018dec: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 2018df0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018df4: 32 80 00 0b bne,a 2018e20 <== NOT EXECUTED 2018df8: 94 24 00 11 sub %l0, %l1, %o2 <== NOT EXECUTED 2018dfc: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018e00: 92 10 23 1a mov 0x31a, %o1 <== NOT EXECUTED 2018e04: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018e08: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018e0c: a4 10 20 00 clr %l2 <== NOT EXECUTED 2018e10: 7f ff ab 30 call 2003ad0 <__assert> <== NOT EXECUTED 2018e14: 94 12 a2 40 or %o2, 0x240, %o2 <== NOT EXECUTED } IMFS_atime_mtime_update( the_jnode ); return copied; } 2018e18: 81 c7 e0 08 ret <== NOT EXECUTED 2018e1c: 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; 2018e20: 80 a2 80 1b cmp %o2, %i3 <== NOT EXECUTED 2018e24: 38 80 00 02 bgu,a 2018e2c <== NOT EXECUTED 2018e28: 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 ); 2018e2c: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED src += to_copy; 2018e30: 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 ); 2018e34: 90 04 40 08 add %l1, %o0, %o0 <== NOT EXECUTED src += to_copy; block++; 2018e38: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 2018e3c: b6 26 c0 0a sub %i3, %o2, %i3 <== NOT EXECUTED copied += to_copy; 2018e40: 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 ); 2018e44: 40 00 27 85 call 2022c58 <== NOT EXECUTED 2018e48: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 2018e4c: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 2018e50: f4 00 61 74 ld [ %g1 + 0x174 ], %i2 ! 2037574 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 2018e54: 10 80 00 14 b 2018ea4 <== NOT EXECUTED 2018e58: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 2018e5c: 7f ff fd 6e call 2018414 <== NOT EXECUTED 2018e60: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 2018e64: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018e68: 32 80 00 08 bne,a 2018e88 <== NOT EXECUTED 2018e6c: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 2018e70: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018e74: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018e78: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018e7c: 94 12 a2 40 or %o2, 0x240, %o2 <== NOT EXECUTED 2018e80: 10 80 00 1c b 2018ef0 <== NOT EXECUTED 2018e84: 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 ); 2018e88: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED src += to_copy; block++; 2018e8c: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 2018e90: b6 26 c0 1a sub %i3, %i2, %i3 <== NOT EXECUTED 2018e94: 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 ); 2018e98: a0 04 00 1a add %l0, %i2, %l0 <== NOT EXECUTED 2018e9c: 40 00 27 6f call 2022c58 <== NOT EXECUTED 2018ea0: 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 ) { 2018ea4: c2 04 61 74 ld [ %l1 + 0x174 ], %g1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 2018ea8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2018eac: 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 ) { 2018eb0: 80 a6 c0 01 cmp %i3, %g1 <== NOT EXECUTED 2018eb4: 1a bf ff ea bcc 2018e5c <== NOT EXECUTED 2018eb8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { 2018ebc: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 2018ec0: 22 80 00 14 be,a 2018f10 <== NOT EXECUTED 2018ec4: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 2018ec8: 7f ff fd 53 call 2018414 <== NOT EXECUTED 2018ecc: 01 00 00 00 nop <== NOT EXECUTED assert( block_ptr ); 2018ed0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018ed4: 32 80 00 0a bne,a 2018efc <== NOT EXECUTED 2018ed8: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 2018edc: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2018ee0: 15 00 80 cc sethi %hi(0x2033000), %o2 <== NOT EXECUTED 2018ee4: 90 12 21 a0 or %o0, 0x1a0, %o0 <== NOT EXECUTED 2018ee8: 94 12 a2 40 or %o2, 0x240, %o2 <== NOT EXECUTED 2018eec: 92 10 23 44 mov 0x344, %o1 <== NOT EXECUTED 2018ef0: 7f ff aa f8 call 2003ad0 <__assert> <== NOT EXECUTED 2018ef4: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED 2018ef8: 30 80 00 0c b,a 2018f28 <== 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; 2018efc: 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 ); 2018f00: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2018f04: 40 00 27 55 call 2022c58 <== NOT EXECUTED 2018f08: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED my_length = 0; copied += to_copy; } IMFS_atime_mtime_update( the_jnode ); 2018f0c: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 2018f10: 7f ff ab ab call 2003dbc <== NOT EXECUTED 2018f14: 92 10 20 00 clr %o1 <== NOT EXECUTED 2018f18: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2018f1c: c2 26 20 3c st %g1, [ %i0 + 0x3c ] <== NOT EXECUTED 2018f20: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED return copied; } 2018f24: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED 2018f28: 81 c7 e0 08 ret <== NOT EXECUTED 2018f2c: 81 e8 00 00 restore <== NOT EXECUTED 0200b3f8 : const char *token, /* IN */ mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 200b3f8: 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 ); 200b3fc: 90 10 00 18 mov %i0, %o0 200b400: 92 07 bf c3 add %fp, -61, %o1 200b404: 7f ff ff 8c call 200b234 200b408: 94 07 bf f4 add %fp, -12, %o2 /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) 200b40c: 03 00 00 3c sethi %hi(0xf000), %g1 200b410: b3 2e 60 10 sll %i1, 0x10, %i1 200b414: 97 36 60 10 srl %i1, 0x10, %o3 200b418: 84 0a c0 01 and %o3, %g1, %g2 200b41c: 03 00 00 10 sethi %hi(0x4000), %g1 200b420: 80 a0 80 01 cmp %g2, %g1 200b424: 02 80 00 17 be 200b480 200b428: 90 10 00 1c mov %i4, %o0 type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) 200b42c: 03 00 00 20 sethi %hi(0x8000), %g1 200b430: 80 a0 80 01 cmp %g2, %g1 200b434: 02 80 00 14 be 200b484 200b438: 92 10 20 05 mov 5, %o1 type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { 200b43c: 03 00 00 18 sethi %hi(0x6000), %g1 200b440: 80 a0 80 01 cmp %g2, %g1 200b444: 02 80 00 05 be 200b458 200b448: 03 00 00 08 sethi %hi(0x2000), %g1 200b44c: 80 a0 80 01 cmp %g2, %g1 200b450: 12 80 00 06 bne 200b468 200b454: 01 00 00 00 nop type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); 200b458: f6 27 bf e8 st %i3, [ %fp + -24 ] 200b45c: f4 27 bf e4 st %i2, [ %fp + -28 ] 200b460: 10 80 00 09 b 200b484 200b464: 92 10 20 02 mov 2, %o1 } else { rtems_set_errno_and_return_minus_one( EINVAL ); 200b468: 40 00 08 f9 call 200d84c <__errno> <== NOT EXECUTED 200b46c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b470: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 200b474: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b478: 81 c7 e0 08 ret <== NOT EXECUTED 200b47c: 81 e8 00 00 restore <== NOT EXECUTED 200b480: 92 10 20 01 mov 1, %o1 /* * Allocate and fill in an IMFS jnode */ new_node = IMFS_create_node( 200b484: 94 07 bf c3 add %fp, -61, %o2 200b488: 98 07 bf e4 add %fp, -28, %o4 200b48c: 40 00 06 ce call 200cfc4 200b490: b0 10 20 00 clr %i0 new_name, mode, &info ); if ( !new_node ) 200b494: 80 a2 20 00 cmp %o0, 0 200b498: 12 80 00 06 bne 200b4b0 200b49c: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOMEM ); 200b4a0: 40 00 08 eb call 200d84c <__errno> <== NOT EXECUTED 200b4a4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 200b4a8: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 200b4ac: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 200b4b0: 81 c7 e0 08 ret 200b4b4: 81 e8 00 00 restore 0200375c : #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 200375c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 2003760: 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 ) 2003764: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 2003768: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200376c: 22 80 00 08 be,a 200378c <== NOT EXECUTED 2003770: f0 20 a0 58 st %i0, [ %g2 + 0x58 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 2003774: 40 00 76 94 call 20211c4 <__errno> <== NOT EXECUTED 2003778: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200377c: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 2003780: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2003784: 81 c7 e0 08 ret <== NOT EXECUTED 2003788: 81 e8 00 00 restore <== NOT EXECUTED * the mounted file system. */ node->info.directory.mt_fs = mt_entry; return 0; } 200378c: 81 c7 e0 08 ret <== NOT EXECUTED 2003790: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 020037a0 : int IMFS_readlink( rtems_filesystem_location_info_t *loc, char *buf, /* OUT */ size_t bufsize ) { 20037a0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; int i; node = loc->node_access; 20037a4: c6 06 00 00 ld [ %i0 ], %g3 <== NOT EXECUTED if ( node->type != IMFS_SYM_LINK ) 20037a8: c2 00 e0 48 ld [ %g3 + 0x48 ], %g1 <== NOT EXECUTED 20037ac: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 20037b0: 02 80 00 0a be 20037d8 <== NOT EXECUTED 20037b4: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 20037b8: 40 00 76 83 call 20211c4 <__errno> <== NOT EXECUTED 20037bc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20037c0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 20037c4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 20037c8: 81 c7 e0 08 ret <== NOT EXECUTED 20037cc: 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]; 20037d0: 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++ ) 20037d4: b0 06 20 01 inc %i0 <== NOT EXECUTED 20037d8: 80 a6 00 1a cmp %i0, %i2 <== NOT EXECUTED 20037dc: 02 80 00 07 be 20037f8 <== NOT EXECUTED 20037e0: 01 00 00 00 nop <== NOT EXECUTED 20037e4: c2 00 e0 4c ld [ %g3 + 0x4c ], %g1 <== NOT EXECUTED 20037e8: c4 48 40 18 ldsb [ %g1 + %i0 ], %g2 <== NOT EXECUTED 20037ec: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 20037f0: 12 bf ff f8 bne 20037d0 <== NOT EXECUTED 20037f4: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; return i; } 20037f8: 81 c7 e0 08 ret <== NOT EXECUTED 20037fc: 81 e8 00 00 restore <== NOT EXECUTED 0200b4c4 : */ int IMFS_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 200b4c4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 200b4c8: 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 ) { 200b4cc: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 200b4d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200b4d4: 22 80 00 06 be,a 200b4ec <== NOT EXECUTED 200b4d8: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 200b4dc: 40 00 03 c1 call 200c3e0 <_Chain_Extract> <== NOT EXECUTED 200b4e0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 200b4e4: 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--; 200b4e8: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 200b4ec: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 200b4f0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 200b4f4: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 200b4f8: 40 00 01 01 call 200b8fc <== NOT EXECUTED 200b4fc: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 200b500: 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) ) { 200b504: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200b508: 40 00 01 36 call 200b9e0 <== NOT EXECUTED 200b50c: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 200b510: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200b514: 12 80 00 18 bne 200b574 <== NOT EXECUTED 200b518: 01 00 00 00 nop <== NOT EXECUTED 200b51c: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 200b520: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200b524: 12 80 00 14 bne 200b574 <== NOT EXECUTED 200b528: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED /* * Is rtems_filesystem_current this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 200b52c: c6 00 60 e8 ld [ %g1 + 0xe8 ], %g3 ! 20170e8 <== NOT EXECUTED 200b530: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 200b534: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 200b538: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 200b53c: 22 80 00 02 be,a 200b544 <== NOT EXECUTED 200b540: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ if ( the_jnode->type == IMFS_SYM_LINK ) { 200b544: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200b548: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 200b54c: 12 80 00 08 bne 200b56c <== NOT EXECUTED 200b550: 01 00 00 00 nop <== NOT EXECUTED if ( the_jnode->info.sym_link.name ) 200b554: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 200b558: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200b55c: 02 80 00 04 be 200b56c <== NOT EXECUTED 200b560: 01 00 00 00 nop <== NOT EXECUTED free( the_jnode->info.sym_link.name ); 200b564: 7f ff db 1f call 20021e0 <== NOT EXECUTED 200b568: 01 00 00 00 nop <== NOT EXECUTED } free( the_jnode ); 200b56c: 7f ff db 1d call 20021e0 <== NOT EXECUTED 200b570: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } return 0; } 200b574: 81 c7 e0 08 ret <== NOT EXECUTED 200b578: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 0200b57c : int IMFS_stat( rtems_filesystem_location_info_t *loc, struct stat *buf ) { 200b57c: 9d e3 bf 98 save %sp, -104, %sp IMFS_jnode_t *the_jnode; IMFS_device_t *io; the_jnode = loc->node_access; 200b580: f0 06 00 00 ld [ %i0 ], %i0 switch ( the_jnode->type ) { 200b584: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 200b588: 80 a0 60 04 cmp %g1, 4 200b58c: 22 80 00 18 be,a 200b5ec 200b590: c0 26 60 20 clr [ %i1 + 0x20 ] <== NOT EXECUTED 200b594: 14 80 00 07 bg 200b5b0 200b598: 80 a0 60 06 cmp %g1, 6 200b59c: 80 a0 60 02 cmp %g1, 2 200b5a0: 12 80 00 0d bne 200b5d4 200b5a4: 01 00 00 00 nop rtems_device_minor_number _minor ) { union __rtems_dev_t temp; temp.__overlay.major = _major; 200b5a8: 10 80 00 06 b 200b5c0 200b5ac: c4 06 20 4c ld [ %i0 + 0x4c ], %g2 200b5b0: 14 80 00 09 bg 200b5d4 <== NOT EXECUTED 200b5b4: 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; 200b5b8: 10 80 00 05 b 200b5cc <== NOT EXECUTED 200b5bc: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED temp.__overlay.minor = _minor; 200b5c0: 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 ); 200b5c4: 10 80 00 0a b 200b5ec 200b5c8: c4 3e 40 00 std %g2, [ %i1 ] break; case IMFS_LINEAR_FILE: case IMFS_MEMORY_FILE: buf->st_size = the_jnode->info.file.size; 200b5cc: 10 80 00 08 b 200b5ec <== NOT EXECUTED 200b5d0: 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 ); 200b5d4: 40 00 08 9e call 200d84c <__errno> <== NOT EXECUTED 200b5d8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 200b5dc: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 200b5e0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b5e4: 81 c7 e0 08 ret <== NOT EXECUTED 200b5e8: 81 e8 00 00 restore <== NOT EXECUTED break; } buf->st_mode = the_jnode->st_mode; 200b5ec: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 200b5f0: 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; 200b5f4: c2 36 60 0c sth %g1, [ %i1 + 0xc ] buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 200b5f8: 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; 200b5fc: 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; 200b600: 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; 200b604: 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; 200b608: 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; 200b60c: 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; 200b610: 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; 200b614: 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; 200b618: 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; 200b61c: 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; 200b620: 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; 200b624: 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; 200b628: c2 26 60 34 st %g1, [ %i1 + 0x34 ] return 0; } 200b62c: 81 c7 e0 08 ret 200b630: 91 e8 20 00 restore %g0, 0, %o0 02003800 : int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { 2003800: 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 ); 2003804: a0 07 bf c3 add %fp, -61, %l0 <== NOT EXECUTED 2003808: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 200380c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2003810: 7f ff fe fe call 2003408 <== NOT EXECUTED 2003814: 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 ) { 2003818: 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; 200381c: f2 27 bf e4 st %i1, [ %fp + -28 ] <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 2003820: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2003824: 92 10 20 04 mov 4, %o1 <== NOT EXECUTED 2003828: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 200382c: 98 07 bf e4 add %fp, -28, %o4 <== NOT EXECUTED 2003830: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED 2003834: 40 00 42 14 call 2014084 <== NOT EXECUTED 2003838: b0 10 20 00 clr %i0 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 200383c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2003840: 12 80 00 06 bne 2003858 <== NOT EXECUTED 2003844: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 2003848: 40 00 76 5f call 20211c4 <__errno> <== NOT EXECUTED 200384c: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 2003850: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 2003854: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 2003858: 81 c7 e0 08 ret <== NOT EXECUTED 200385c: 81 e8 00 00 restore <== NOT EXECUTED 02003860 : #include int IMFS_unlink( rtems_filesystem_location_info_t *loc /* IN */ ) { 2003860: 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; 2003864: 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 ) { 2003868: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 200386c: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 2003870: 32 80 00 2a bne,a 2003918 <== NOT EXECUTED 2003874: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED if ( !node->info.hard_link.link_node ) 2003878: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 200387c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003880: 12 80 00 08 bne 20038a0 <== NOT EXECUTED 2003884: a2 07 bf e0 add %fp, -32, %l1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 2003888: 40 00 76 4f call 20211c4 <__errno> <== NOT EXECUTED 200388c: 01 00 00 00 nop <== NOT EXECUTED 2003890: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 2003894: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2003898: 10 80 00 23 b 2003924 <== NOT EXECUTED 200389c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED the_link = *loc; 20038a0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 20038a4: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 20038a8: 40 00 7c ec call 2022c58 <== NOT EXECUTED 20038ac: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; 20038b0: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED IMFS_Set_handlers( &the_link ); 20038b4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20038b8: 40 00 42 56 call 2014210 <== NOT EXECUTED 20038bc: 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) 20038c0: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 20038c4: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED 20038c8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20038cc: 12 80 00 0b bne 20038f8 <== NOT EXECUTED 20038d0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED { result = (*the_link.handlers->rmnod_h)( &the_link ); 20038d4: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED 20038d8: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 20038dc: 9f c0 40 00 call %g1 <== NOT EXECUTED 20038e0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( result != 0 ) 20038e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20038e8: 12 80 00 0f bne 2003924 <== NOT EXECUTED 20038ec: 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 ); 20038f0: 10 80 00 0a b 2003918 <== NOT EXECUTED 20038f4: 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 ); 20038f8: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED if ( result != 0 ) return -1; } else { node->info.hard_link.link_node->st_nlink --; 20038fc: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED IMFS_update_ctime( node->info.hard_link.link_node ); 2003900: 40 00 01 2f call 2003dbc <== NOT EXECUTED 2003904: 92 10 20 00 clr %o1 <== NOT EXECUTED 2003908: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 200390c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2003910: 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 ); 2003914: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 2003918: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 200391c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2003920: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return result; } 2003924: 81 c7 e0 08 ret <== NOT EXECUTED 2003928: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 0200392c : #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 200392c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 2003930: 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 ) 2003934: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 2003938: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200393c: 22 80 00 06 be,a 2003954 <== NOT EXECUTED 2003940: c2 00 a0 58 ld [ %g2 + 0x58 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 2003944: 40 00 76 20 call 20211c4 <__errno> <== NOT EXECUTED 2003948: 01 00 00 00 nop <== NOT EXECUTED 200394c: 10 80 00 08 b 200396c <== NOT EXECUTED 2003950: 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 ) 2003954: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003958: 32 80 00 08 bne,a 2003978 <== NOT EXECUTED 200395c: c0 20 a0 58 clr [ %g2 + 0x58 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */ 2003960: 40 00 76 19 call 20211c4 <__errno> <== NOT EXECUTED 2003964: 01 00 00 00 nop <== NOT EXECUTED 2003968: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 200396c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2003970: 81 c7 e0 08 ret <== NOT EXECUTED 2003974: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED */ node->info.directory.mt_fs = NULL; return 0; } 2003978: 81 c7 e0 08 ret <== NOT EXECUTED 200397c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 02003980 : time_t modtime /* IN */ ) { IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 2003980: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; return 0; } 2003984: 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; 2003988: d4 20 60 40 st %o2, [ %g1 + 0x40 ] <== NOT EXECUTED return 0; } 200398c: 81 c3 e0 08 retl <== NOT EXECUTED 2003990: d2 20 60 3c st %o1, [ %g1 + 0x3c ] <== NOT EXECUTED 02002524 : void RTEMS_Malloc_Initialize( void *start, size_t length, size_t sbrk_amount ) { 2002524: 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; 2002528: 03 00 80 5e sethi %hi(0x2017800), %g1 200252c: 82 10 62 4c or %g1, 0x24c, %g1 ! 2017a4c */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 2002530: c2 20 7f fc st %g1, [ %g1 + -4 ] 2002534: 82 00 7f fc add %g1, -4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2002538: 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; 200253c: 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; 2002540: 03 00 80 5e sethi %hi(0x2017800), %g1 if (!starting_address) { 2002544: 80 a6 20 00 cmp %i0, 0 2002548: 12 80 00 11 bne 200258c 200254c: f4 20 62 44 st %i2, [ %g1 + 0x244 ] uaddress = (uintptr_t)sbrk(length); 2002550: 40 00 4b 99 call 20153b4 <== NOT EXECUTED 2002554: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if (uaddress == (uintptr_t) -1) { 2002558: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 200255c: 12 80 00 04 bne 200256c <== NOT EXECUTED 2002560: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_fatal_error_occurred( RTEMS_NO_MEMORY ); 2002564: 40 00 0f f8 call 2006544 <== NOT EXECUTED 2002568: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED /* DOES NOT RETURN!!! */ } if (uaddress & (CPU_HEAP_ALIGNMENT-1)) { 200256c: 80 8e 20 07 btst 7, %i0 <== NOT EXECUTED 2002570: 02 80 00 08 be 2002590 <== NOT EXECUTED 2002574: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED old_address = uaddress; uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1); 2002578: 82 06 20 08 add %i0, 8, %g1 <== NOT EXECUTED 200257c: 82 08 7f f8 and %g1, -8, %g1 <== NOT EXECUTED /* * adjust the length by whatever we aligned by */ length -= uaddress - old_address; 2002580: 84 20 40 18 sub %g1, %i0, %g2 <== NOT EXECUTED 2002584: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED 2002588: 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() ) 200258c: 03 00 80 5e sethi %hi(0x2017800), %g1 2002590: c2 00 63 d4 ld [ %g1 + 0x3d4 ], %g1 ! 2017bd4 <_CPU_Table+0x10> 2002594: 80 a0 60 00 cmp %g1, 0 2002598: 02 80 00 07 be 20025b4 200259c: 92 10 00 18 mov %i0, %o1 memset( starting_address, 0, length ); 20025a0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20025a4: 92 10 20 00 clr %o1 <== NOT EXECUTED 20025a8: 40 00 2e ab call 200e054 <== NOT EXECUTED 20025ac: 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 ); 20025b0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 20025b4: 94 10 00 19 mov %i1, %o2 20025b8: 11 00 80 5e sethi %hi(0x2017800), %o0 20025bc: 96 10 20 08 mov 8, %o3 20025c0: 40 00 12 99 call 2007024 <_Heap_Initialize> 20025c4: 90 12 21 ec or %o0, 0x1ec, %o0 &RTEMS_Malloc_Heap, starting_address, length, CPU_HEAP_ALIGNMENT ); if ( !status ) 20025c8: 80 a2 20 00 cmp %o0, 0 20025cc: 12 80 00 04 bne 20025dc 20025d0: 01 00 00 00 nop rtems_fatal_error_occurred( status ); 20025d4: 40 00 0f dc call 2006544 <== NOT EXECUTED 20025d8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 20025dc: 81 c7 e0 08 ret 20025e0: 81 e8 00 00 restore 020026b4 : static rtems_printk_plugin_t print_handler; void Stack_check_Dump_threads_usage( Thread_Control *the_thread ) { 20026b4: 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 ) 20026b8: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 20026bc: 02 80 00 3e be 20027b4 <== NOT EXECUTED 20026c0: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED return; if ( !print_handler ) 20026c4: c2 00 61 bc ld [ %g1 + 0x1bc ], %g1 ! 201b5bc <== NOT EXECUTED 20026c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20026cc: 02 80 00 3a be 20027b4 <== NOT EXECUTED 20026d0: 80 a6 3f ff cmp %i0, -1 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { 20026d4: 12 80 00 09 bne 20026f8 <== NOT EXECUTED 20026d8: a2 06 20 d0 add %i0, 0xd0, %l1 <== NOT EXECUTED if (Stack_check_Interrupt_stack.area) { 20026dc: 03 00 80 6e sethi %hi(0x201b800), %g1 <== NOT EXECUTED 20026e0: 82 10 60 cc or %g1, 0xcc, %g1 ! 201b8cc <== NOT EXECUTED 20026e4: c4 00 60 04 ld [ %g1 + 4 ], %g2 <== NOT EXECUTED stack = &Stack_check_Interrupt_stack; the_thread = 0; } else return; 20026e8: 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) { 20026ec: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 20026f0: 02 80 00 31 be 20027b4 <== NOT EXECUTED 20026f4: b0 10 20 00 clr %i0 <== NOT EXECUTED else return; } else stack = &the_thread->Start.Initial_stack; low = Stack_check_usable_stack_start(stack); 20026f8: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 20026fc: 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); 2002700: a0 00 60 10 add %g1, 0x10, %l0 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 2002704: a4 00 bf f0 add %g2, -16, %l2 <== NOT EXECUTED high_water_mark = Stack_check_find_high_water_mark(low, size); 2002708: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200270c: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 2002710: 7f ff ff d9 call 2002674 <== NOT EXECUTED 2002714: a6 10 20 00 clr %l3 <== NOT EXECUTED if ( high_water_mark ) 2002718: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200271c: 02 80 00 03 be 2002728 <== NOT EXECUTED 2002720: 82 04 00 12 add %l0, %l2, %g1 <== NOT EXECUTED used = Stack_check_Calculate_used( low, size, high_water_mark ); 2002724: a6 20 40 08 sub %g1, %o0, %l3 <== NOT EXECUTED else used = 0; if ( the_thread ) { 2002728: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 200272c: 02 80 00 07 be 2002748 <== NOT EXECUTED 2002730: 92 10 20 05 mov 5, %o1 <== NOT EXECUTED rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 2002734: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED 2002738: 40 00 10 21 call 20067bc <== NOT EXECUTED 200273c: 94 07 bf f3 add %fp, -13, %o2 <== NOT EXECUTED name[ 2 ] = 'T'; name[ 3 ] = 'R'; name[ 4 ] = '\0'; } (*print_handler)( 2002740: 10 80 00 0c b 2002770 <== NOT EXECUTED 2002744: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED used = 0; if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; 2002748: 82 10 20 49 mov 0x49, %g1 <== NOT EXECUTED 200274c: c2 2f bf f3 stb %g1, [ %fp + -13 ] <== NOT EXECUTED name[ 1 ] = 'N'; 2002750: 82 10 20 4e mov 0x4e, %g1 <== NOT EXECUTED 2002754: c2 2f bf f4 stb %g1, [ %fp + -12 ] <== NOT EXECUTED name[ 2 ] = 'T'; 2002758: 82 10 20 54 mov 0x54, %g1 <== NOT EXECUTED name[ 3 ] = 'R'; name[ 4 ] = '\0'; 200275c: 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'; 2002760: c2 2f bf f5 stb %g1, [ %fp + -11 ] <== NOT EXECUTED name[ 3 ] = 'R'; 2002764: 82 10 20 52 mov 0x52, %g1 <== NOT EXECUTED 2002768: c2 2f bf f6 stb %g1, [ %fp + -10 ] <== NOT EXECUTED name[ 4 ] = '\0'; } (*print_handler)( 200276c: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED 2002770: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 2002774: c4 00 61 bc ld [ %g1 + 0x1bc ], %g2 <== NOT EXECUTED 2002778: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 200277c: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED 2002780: 02 80 00 03 be 200278c <== NOT EXECUTED 2002784: d0 00 61 b8 ld [ %g1 + 0x1b8 ], %o0 ! 201b5b8 <== NOT EXECUTED 2002788: d4 06 20 08 ld [ %i0 + 8 ], %o2 <== NOT EXECUTED 200278c: da 04 40 00 ld [ %l1 ], %o5 <== NOT EXECUTED 2002790: d8 04 60 04 ld [ %l1 + 4 ], %o4 <== NOT EXECUTED 2002794: 13 00 80 63 sethi %hi(0x2018c00), %o1 <== NOT EXECUTED 2002798: 9a 03 00 0d add %o4, %o5, %o5 <== NOT EXECUTED 200279c: e4 23 a0 5c st %l2, [ %sp + 0x5c ] <== NOT EXECUTED 20027a0: e6 23 a0 60 st %l3, [ %sp + 0x60 ] <== NOT EXECUTED 20027a4: 9a 03 7f ff add %o5, -1, %o5 <== NOT EXECUTED 20027a8: 92 12 63 48 or %o1, 0x348, %o1 <== NOT EXECUTED 20027ac: 9f c0 80 00 call %g2 <== NOT EXECUTED 20027b0: 96 07 bf f3 add %fp, -13, %o3 <== NOT EXECUTED 20027b4: 81 c7 e0 08 ret <== NOT EXECUTED 20027b8: 81 e8 00 00 restore <== NOT EXECUTED 02002674 : /* * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; 2002674: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED for (ebase = base + length; base < ebase; base++) 2002678: 92 0a 7f fc and %o1, -4, %o1 <== NOT EXECUTED if (*base != U32_PATTERN) 200267c: 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++) 2002680: 84 02 00 09 add %o0, %o1, %g2 <== NOT EXECUTED if (*base != U32_PATTERN) 2002684: 10 80 00 06 b 200269c <== NOT EXECUTED 2002688: 86 10 61 a5 or %g1, 0x1a5, %g3 <== NOT EXECUTED 200268c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2002690: 12 80 00 07 bne 20026ac <== NOT EXECUTED 2002694: 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++) 2002698: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 200269c: 80 a2 00 02 cmp %o0, %g2 <== NOT EXECUTED 20026a0: 2a bf ff fb bcs,a 200268c <== NOT EXECUTED 20026a4: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 20026a8: 90 10 20 00 clr %o0 <== NOT EXECUTED if (*base != U32_PATTERN) return (void *) base; #endif return (void *)0; } 20026ac: 81 c3 e0 08 retl <== NOT EXECUTED 20026b0: 01 00 00 00 nop 02002870 : */ void Stack_check_report_blown_task( Thread_Control *running, boolean pattern_ok ) { 2002870: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *stack = &running->Start.Initial_stack; printk( 2002874: d4 1e 20 08 ldd [ %i0 + 8 ], %o2 <== NOT EXECUTED 2002878: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 200287c: 11 00 80 63 sethi %hi(0x2018c00), %o0 <== NOT EXECUTED 2002880: 40 00 05 b9 call 2003f64 <== NOT EXECUTED 2002884: 90 12 23 d0 or %o0, 0x3d0, %o0 ! 2018fd0 <== NOT EXECUTED rtems_configuration_get_user_multiprocessing_table()->node ); } #endif printk( 2002888: d4 06 20 d4 ld [ %i0 + 0xd4 ], %o2 <== NOT EXECUTED 200288c: c2 06 20 d0 ld [ %i0 + 0xd0 ], %g1 <== NOT EXECUTED 2002890: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 2002894: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 2002898: 94 02 80 01 add %o2, %g1, %o2 <== NOT EXECUTED 200289c: 11 00 80 64 sethi %hi(0x2019000), %o0 <== NOT EXECUTED 20028a0: 94 02 bf ff add %o2, -1, %o2 <== NOT EXECUTED 20028a4: 40 00 05 b0 call 2003f64 <== NOT EXECUTED 20028a8: 90 12 20 10 or %o0, 0x10, %o0 <== NOT EXECUTED stack->area, stack->area + stack->size - 1, stack->size ); if ( !pattern_ok ) { 20028ac: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 20028b0: 12 80 00 07 bne 20028cc <== NOT EXECUTED 20028b4: 11 00 80 64 sethi %hi(0x2019000), %o0 <== NOT EXECUTED printk( 20028b8: d2 06 20 d4 ld [ %i0 + 0xd4 ], %o1 <== NOT EXECUTED 20028bc: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 20028c0: 90 12 20 40 or %o0, 0x40, %o0 <== NOT EXECUTED 20028c4: 40 00 05 a8 call 2003f64 <== NOT EXECUTED 20028c8: 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 ); 20028cc: 40 00 13 b5 call 20077a0 <== NOT EXECUTED 20028d0: 91 e8 20 81 restore %g0, 0x81, %o0 <== NOT EXECUTED 20028d4: 01 00 00 00 nop 020066c0 <_API_extensions_Run_postdriver>: * * _API_extensions_Run_postdriver */ void _API_extensions_Run_postdriver( void ) { 20066c0: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 20066c4: 03 00 80 5f sethi %hi(0x2017c00), %g1 20066c8: e0 00 62 40 ld [ %g1 + 0x240 ], %l0 ! 2017e40 <_API_extensions_List> */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 20066cc: 03 00 80 5f sethi %hi(0x2017c00), %g1 20066d0: 10 80 00 08 b 20066f0 <_API_extensions_Run_postdriver+0x30> 20066d4: a2 10 62 44 or %g1, 0x244, %l1 ! 2017e44 <_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 ) 20066d8: 80 a0 60 00 cmp %g1, 0 20066dc: 22 80 00 05 be,a 20066f0 <_API_extensions_Run_postdriver+0x30> 20066e0: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postdriver_hook)(); 20066e4: 9f c0 40 00 call %g1 20066e8: 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 ) { 20066ec: 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 ) ; 20066f0: 80 a4 00 11 cmp %l0, %l1 20066f4: 32 bf ff f9 bne,a 20066d8 <_API_extensions_Run_postdriver+0x18> 20066f8: c2 04 20 0c ld [ %l0 + 0xc ], %g1 the_extension = (API_extensions_Control *) the_node; if ( the_extension->postdriver_hook ) (*the_extension->postdriver_hook)(); } } 20066fc: 81 c7 e0 08 ret 2006700: 81 e8 00 00 restore 02006764 <_API_extensions_Run_postswitch>: * * _API_extensions_Run_postswitch */ void _API_extensions_Run_postswitch( void ) { 2006764: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 2006768: 03 00 80 5f sethi %hi(0x2017c00), %g1 200676c: e0 00 62 40 ld [ %g1 + 0x240 ], %l0 ! 2017e40 <_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 ); 2006770: 23 00 80 5f sethi %hi(0x2017c00), %l1 2006774: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006778: 10 80 00 08 b 2006798 <_API_extensions_Run_postswitch+0x34> 200677c: a4 10 62 44 or %g1, 0x244, %l2 ! 2017e44 <_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 ) 2006780: 80 a0 60 00 cmp %g1, 0 2006784: 22 80 00 05 be,a 2006798 <_API_extensions_Run_postswitch+0x34> 2006788: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postswitch_hook)( _Thread_Executing ); 200678c: 9f c0 40 00 call %g1 2006790: d0 04 60 90 ld [ %l1 + 0x90 ], %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 ) { 2006794: 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 ) ; 2006798: 80 a4 00 12 cmp %l0, %l2 200679c: 32 bf ff f9 bne,a 2006780 <_API_extensions_Run_postswitch+0x1c> 20067a0: 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 ); } } 20067a4: 81 c7 e0 08 ret 20067a8: 81 e8 00 00 restore 02006720 <_API_extensions_Run_predriver>: * * _API_extensions_Run_predriver */ void _API_extensions_Run_predriver( void ) { 2006720: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 2006724: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006728: e0 00 62 40 ld [ %g1 + 0x240 ], %l0 ! 2017e40 <_API_extensions_List> 200672c: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006730: 10 80 00 08 b 2006750 <_API_extensions_Run_predriver+0x30> 2006734: a2 10 62 44 or %g1, 0x244, %l1 ! 2017e44 <_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 ) 2006738: 80 a0 60 00 cmp %g1, 0 200673c: 22 80 00 05 be,a 2006750 <_API_extensions_Run_predriver+0x30> 2006740: e0 04 00 00 ld [ %l0 ], %l0 (*the_extension->predriver_hook)(); 2006744: 9f c0 40 00 call %g1 <== NOT EXECUTED 2006748: 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 ) { 200674c: 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 ) ; 2006750: 80 a4 00 11 cmp %l0, %l1 2006754: 32 bf ff f9 bne,a 2006738 <_API_extensions_Run_predriver+0x18> 2006758: c2 04 20 08 ld [ %l0 + 8 ], %g1 the_extension = (API_extensions_Control *) the_node; if ( the_extension->predriver_hook ) (*the_extension->predriver_hook)(); } } 200675c: 81 c7 e0 08 ret 2006760: 81 e8 00 00 restore 0201346c <_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 ) { 201346c: 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 ) { 2013470: 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 ) { 2013474: 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 ) { 2013478: 80 a6 80 01 cmp %i2, %g1 201347c: 18 80 00 17 bgu 20134d8 <_CORE_message_queue_Broadcast+0x6c> 2013480: 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 ) { 2013484: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 2013488: 80 a0 60 00 cmp %g1, 0 201348c: 02 80 00 0a be 20134b4 <_CORE_message_queue_Broadcast+0x48> 2013490: a2 10 20 00 clr %l1 *count = 0; 2013494: c0 27 40 00 clr [ %i5 ] <== NOT EXECUTED 2013498: 81 c7 e0 08 ret <== NOT EXECUTED 201349c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 20134a0: d0 04 20 28 ld [ %l0 + 0x28 ], %o0 20134a4: 40 00 20 ad call 201b758 20134a8: a2 04 60 01 inc %l1 buffer, waitp->return_argument, size ); *(uint32_t *)the_thread->Wait.return_argument_1 = size; 20134ac: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 20134b0: 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))) { 20134b4: 40 00 0b 7f call 20162b0 <_Thread_queue_Dequeue> 20134b8: 90 10 00 12 mov %l2, %o0 20134bc: 92 10 00 19 mov %i1, %o1 20134c0: a0 10 00 08 mov %o0, %l0 20134c4: 80 a2 20 00 cmp %o0, 0 20134c8: 12 bf ff f6 bne 20134a0 <_CORE_message_queue_Broadcast+0x34> 20134cc: 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; 20134d0: e2 27 40 00 st %l1, [ %i5 ] 20134d4: b0 10 20 00 clr %i0 return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL; } 20134d8: 81 c7 e0 08 ret 20134dc: 81 e8 00 00 restore 0201359c <_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 ) { 201359c: 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; 20135a0: 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; 20135a4: 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; 20135a8: 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; 20135ac: c0 26 20 60 clr [ %i0 + 0x60 ] the_message_queue->notify_argument = the_argument; 20135b0: 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)) { 20135b4: 80 8e e0 03 btst 3, %i3 20135b8: 02 80 00 07 be 20135d4 <_CORE_message_queue_Initialize+0x38> 20135bc: a0 10 00 1b mov %i3, %l0 allocated_message_size += sizeof(uint32_t); 20135c0: 82 06 e0 04 add %i3, 4, %g1 allocated_message_size &= ~(sizeof(uint32_t) - 1); 20135c4: a0 08 7f fc and %g1, -4, %l0 } if (allocated_message_size < maximum_message_size) 20135c8: 80 a4 00 1b cmp %l0, %i3 20135cc: 0a 80 00 24 bcs 201365c <_CORE_message_queue_Initialize+0xc0> 20135d0: 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 * 20135d4: b6 04 20 14 add %l0, 0x14, %i3 20135d8: 92 10 00 1a mov %i2, %o1 20135dc: 40 00 40 a8 call 202387c <.umul> 20135e0: 90 10 00 1b mov %i3, %o0 (allocated_message_size + sizeof(CORE_message_queue_Buffer_control)); if (message_buffering_required < allocated_message_size) 20135e4: 80 a2 00 10 cmp %o0, %l0 20135e8: 0a 80 00 1d bcs 201365c <_CORE_message_queue_Initialize+0xc0> 20135ec: 92 10 00 08 mov %o0, %o1 RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 20135f0: 11 00 80 c3 sethi %hi(0x2030c00), %o0 20135f4: 40 00 02 20 call 2013e74 <_Heap_Allocate> 20135f8: 90 12 23 fc or %o0, 0x3fc, %o0 ! 2030ffc <_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) 20135fc: 80 a2 20 00 cmp %o0, 0 2013600: 02 80 00 17 be 201365c <_CORE_message_queue_Initialize+0xc0> 2013604: d0 26 20 5c st %o0, [ %i0 + 0x5c ] /* * Initialize the pool of inactive messages, pending messages, * and set of waiting threads. */ _Chain_Initialize ( 2013608: 92 10 00 08 mov %o0, %o1 201360c: 94 10 00 1a mov %i2, %o2 2013610: 90 06 20 68 add %i0, 0x68, %o0 2013614: 7f ff ff 88 call 2013434 <_Chain_Initialize> 2013618: 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( 201361c: 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; 2013620: c0 26 20 54 clr [ %i0 + 0x54 ] 2013624: 82 18 60 01 xor %g1, 1, %g1 2013628: 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); 201362c: 82 06 20 54 add %i0, 0x54, %g1 2013630: c2 26 20 50 st %g1, [ %i0 + 0x50 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2013634: 82 06 20 50 add %i0, 0x50, %g1 2013638: 90 10 00 18 mov %i0, %o0 201363c: c2 26 20 58 st %g1, [ %i0 + 0x58 ] 2013640: 92 60 3f ff subx %g0, -1, %o1 2013644: 94 10 20 80 mov 0x80, %o2 2013648: 96 10 20 06 mov 6, %o3 201364c: 40 00 0c 6e call 2016804 <_Thread_queue_Initialize> 2013650: b0 10 20 01 mov 1, %i0 2013654: 81 c7 e0 08 ret 2013658: 81 e8 00 00 restore STATES_WAITING_FOR_MESSAGE, CORE_MESSAGE_QUEUE_STATUS_TIMEOUT ); return TRUE; } 201365c: 81 c7 e0 08 ret <== NOT EXECUTED 2013660: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 02015c1c <_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 ) { 2015c1c: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; boolean notify = FALSE; the_message->priority = submit_type; switch ( submit_type ) { 2015c20: 03 20 00 00 sethi %hi(0x80000000), %g1 2015c24: 80 a6 80 01 cmp %i2, %g1 2015c28: 02 80 00 16 be 2015c80 <_CORE_message_queue_Insert_message+0x64> 2015c2c: f4 26 60 08 st %i2, [ %i1 + 8 ] 2015c30: 82 00 7c 00 add %g1, -1024, %g1 2015c34: 82 10 63 ff or %g1, 0x3ff, %g1 2015c38: 80 a6 80 01 cmp %i2, %g1 2015c3c: 32 80 00 20 bne,a 2015cbc <_CORE_message_queue_Insert_message+0xa0> 2015c40: e0 06 20 50 ld [ %i0 + 0x50 ], %l0 <== NOT EXECUTED case CORE_MESSAGE_QUEUE_SEND_REQUEST: _ISR_Disable( level ); 2015c44: 7f ff b2 29 call 20024e8 2015c48: 01 00 00 00 nop Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 2015c4c: 82 06 20 54 add %i0, 0x54, %g1 if ( the_message_queue->number_of_pending_messages++ == 0 ) 2015c50: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 2015c54: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 2015c58: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 the_chain->last = the_node; 2015c5c: f2 26 20 58 st %i1, [ %i0 + 0x58 ] 2015c60: 84 00 a0 01 inc %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 2015c64: 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; 2015c68: f2 20 40 00 st %i1, [ %g1 ] 2015c6c: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 2015c70: 82 18 a0 01 xor %g2, 1, %g1 2015c74: 80 a0 00 01 cmp %g0, %g1 2015c78: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Append_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 2015c7c: 30 80 00 27 b,a 2015d18 <_CORE_message_queue_Insert_message+0xfc> break; case CORE_MESSAGE_QUEUE_URGENT_REQUEST: _ISR_Disable( level ); 2015c80: 7f ff b2 1a call 20024e8 2015c84: 01 00 00 00 nop ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 2015c88: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 if ( the_message_queue->number_of_pending_messages++ == 0 ) 2015c8c: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 2015c90: 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; 2015c94: f2 26 20 50 st %i1, [ %i0 + 0x50 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 2015c98: c2 26 60 04 st %g1, [ %i1 + 4 ] 2015c9c: 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; 2015ca0: f2 20 e0 04 st %i1, [ %g3 + 4 ] 2015ca4: 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; 2015ca8: c6 26 40 00 st %g3, [ %i1 ] 2015cac: 80 a0 00 01 cmp %g0, %g1 2015cb0: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 2015cb4: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Prepend_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 2015cb8: 30 80 00 18 b,a 2015d18 <_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 ) ) { 2015cbc: 10 80 00 06 b 2015cd4 <_CORE_message_queue_Insert_message+0xb8> <== NOT EXECUTED 2015cc0: 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 ) { 2015cc4: 80 a0 40 1a cmp %g1, %i2 <== NOT EXECUTED 2015cc8: 14 80 00 06 bg 2015ce0 <_CORE_message_queue_Insert_message+0xc4> <== NOT EXECUTED 2015ccc: 01 00 00 00 nop <== NOT EXECUTED the_node = the_node->next; 2015cd0: 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 ) ) { 2015cd4: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 2015cd8: 32 bf ff fb bne,a 2015cc4 <_CORE_message_queue_Insert_message+0xa8> <== NOT EXECUTED 2015cdc: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED continue; } break; } _ISR_Disable( level ); 2015ce0: 7f ff b2 02 call 20024e8 <== NOT EXECUTED 2015ce4: 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 ); 2015ce8: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED } break; } _ISR_Disable( level ); if ( the_message_queue->number_of_pending_messages++ == 0 ) 2015cec: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 <== NOT EXECUTED ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 2015cf0: c6 00 40 00 ld [ %g1 ], %g3 <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 2015cf4: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED before_node = after_node->next; after_node->next = the_node; 2015cf8: f2 20 40 00 st %i1, [ %g1 ] <== NOT EXECUTED 2015cfc: 84 00 a0 01 inc %g2 <== NOT EXECUTED the_node->next = before_node; before_node->previous = the_node; 2015d00: f2 20 e0 04 st %i1, [ %g3 + 4 ] <== NOT EXECUTED 2015d04: 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; 2015d08: c6 26 40 00 st %g3, [ %i1 ] <== NOT EXECUTED 2015d0c: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 2015d10: c4 26 20 48 st %g2, [ %i0 + 0x48 ] <== NOT EXECUTED 2015d14: a0 60 3f ff subx %g0, -1, %l0 <== NOT EXECUTED notify = TRUE; _Chain_Insert_unprotected( the_node->previous, &the_message->Node ); _ISR_Enable( level ); 2015d18: 7f ff b1 f8 call 20024f8 2015d1c: 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 ) 2015d20: 80 a4 20 00 cmp %l0, 0 2015d24: 02 80 00 08 be 2015d44 <_CORE_message_queue_Insert_message+0x128> 2015d28: 01 00 00 00 nop 2015d2c: c2 06 20 60 ld [ %i0 + 0x60 ], %g1 2015d30: 80 a0 60 00 cmp %g1, 0 2015d34: 02 80 00 04 be 2015d44 <_CORE_message_queue_Insert_message+0x128> 2015d38: 01 00 00 00 nop (*the_message_queue->notify_handler)( the_message_queue->notify_argument ); 2015d3c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2015d40: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 2015d44: 81 c7 e0 08 ret 2015d48: 81 e8 00 00 restore 02012e88 <_CORE_message_queue_Seize>: void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 2012e88: 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; 2012e8c: 03 00 80 99 sethi %hi(0x2026400), %g1 2012e90: e2 00 61 60 ld [ %g1 + 0x160 ], %l1 ! 2026560 <_Thread_Executing> void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 2012e94: 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 ); 2012e98: 7f ff bd 94 call 20024e8 2012e9c: c0 24 60 34 clr [ %l1 + 0x34 ] 2012ea0: 86 10 00 08 mov %o0, %g3 if ( the_message_queue->number_of_pending_messages != 0 ) { 2012ea4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 2012ea8: 80 a0 60 00 cmp %g1, 0 2012eac: 02 80 00 2a be 2012f54 <_CORE_message_queue_Seize+0xcc> 2012eb0: 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)); 2012eb4: f2 06 20 50 ld [ %i0 + 0x50 ], %i1 the_message_queue->number_of_pending_messages -= 1; 2012eb8: 82 00 7f ff add %g1, -1, %g1 2012ebc: 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)) 2012ec0: 82 06 20 54 add %i0, 0x54, %g1 2012ec4: 80 a6 40 01 cmp %i1, %g1 2012ec8: 32 80 00 04 bne,a 2012ed8 <_CORE_message_queue_Seize+0x50> 2012ecc: c2 06 40 00 ld [ %i1 ], %g1 2012ed0: 10 80 00 05 b 2012ee4 <_CORE_message_queue_Seize+0x5c> <== NOT EXECUTED 2012ed4: 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); 2012ed8: 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; 2012edc: c2 26 20 50 st %g1, [ %i0 + 0x50 ] new_first->previous = _Chain_Head(the_chain); 2012ee0: c4 20 60 04 st %g2, [ %g1 + 4 ] the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); 2012ee4: 7f ff bd 85 call 20024f8 2012ee8: 90 10 00 03 mov %g3, %o0 *size = the_message->Contents.size; 2012eec: d4 06 60 0c ld [ %i1 + 0xc ], %o2 _Thread_Executing->Wait.count = the_message->priority; 2012ef0: 03 00 80 99 sethi %hi(0x2026400), %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; 2012ef4: d4 26 c0 00 st %o2, [ %i3 ] _Thread_Executing->Wait.count = the_message->priority; 2012ef8: c4 00 61 60 ld [ %g1 + 0x160 ], %g2 2012efc: c2 06 60 08 ld [ %i1 + 8 ], %g1 _CORE_message_queue_Copy_buffer(the_message->Contents.buffer,buffer,*size); 2012f00: 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; 2012f04: c2 20 a0 24 st %g1, [ %g2 + 0x24 ] _CORE_message_queue_Copy_buffer(the_message->Contents.buffer,buffer,*size); 2012f08: a2 06 60 10 add %i1, 0x10, %l1 2012f0c: 7f ff ff d8 call 2012e6c <_CORE_message_queue_Copy_buffer> 2012f10: 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 ); 2012f14: 7f ff ea 59 call 200d878 <_Thread_queue_Dequeue> 2012f18: 90 10 00 10 mov %l0, %o0 if ( !the_thread ) { 2012f1c: 82 92 20 00 orcc %o0, 0, %g1 2012f20: 32 80 00 04 bne,a 2012f30 <_CORE_message_queue_Seize+0xa8> 2012f24: 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 ); 2012f28: 7f ff e0 37 call 200b004 <_Chain_Append> 2012f2c: 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( 2012f30: 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; 2012f34: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 <== NOT EXECUTED the_message->Contents.size = (uint32_t)the_thread->Wait.option; 2012f38: 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; 2012f3c: 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( 2012f40: 7f ff ff cb call 2012e6c <_CORE_message_queue_Copy_buffer> <== NOT EXECUTED 2012f44: 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( 2012f48: f4 06 60 08 ld [ %i1 + 8 ], %i2 <== NOT EXECUTED 2012f4c: 40 00 0b 34 call 2015c1c <_CORE_message_queue_Insert_message> <== NOT EXECUTED 2012f50: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED the_message->priority ); return; } if ( !wait ) { 2012f54: 12 80 00 08 bne 2012f74 <_CORE_message_queue_Seize+0xec> 2012f58: 82 10 20 01 mov 1, %g1 _ISR_Enable( level ); 2012f5c: 7f ff bd 67 call 20024f8 2012f60: 01 00 00 00 nop executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT; 2012f64: 82 10 20 04 mov 4, %g1 ! 4 2012f68: 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 ); } 2012f6c: 81 c7 e0 08 ret 2012f70: 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; 2012f74: 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; 2012f78: f0 24 60 44 st %i0, [ %l1 + 0x44 ] executing->Wait.id = id; 2012f7c: f2 24 60 20 st %i1, [ %l1 + 0x20 ] executing->Wait.return_argument = buffer; 2012f80: 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; 2012f84: 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 ); 2012f88: 7f ff bd 5c call 20024f8 2012f8c: 35 00 80 37 sethi %hi(0x200dc00), %i2 _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 2012f90: b2 10 00 1d mov %i5, %i1 2012f94: 7f ff ea a7 call 200da30 <_Thread_queue_Enqueue_with_handler> 2012f98: 95 ee a2 c8 restore %i2, 0x2c8, %o2 2012f9c: 01 00 00 00 nop 02012fbc <_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 ) { 2012fbc: 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 ) { 2012fc0: 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 ) { 2012fc4: 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 ) { 2012fc8: 80 a6 80 01 cmp %i2, %g1 2012fcc: 18 80 00 3f bgu 20130c8 <_CORE_message_queue_Submit+0x10c> 2012fd0: 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 ) { 2012fd4: c2 04 60 48 ld [ %l1 + 0x48 ], %g1 2012fd8: 80 a0 60 00 cmp %g1, 0 2012fdc: 32 80 00 0f bne,a 2013018 <_CORE_message_queue_Submit+0x5c> 2012fe0: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); 2012fe4: 7f ff ea 25 call 200d878 <_Thread_queue_Dequeue> 2012fe8: 90 10 00 11 mov %l1, %o0 if ( the_thread ) { 2012fec: a0 92 20 00 orcc %o0, 0, %l0 2012ff0: 02 80 00 09 be 2013014 <_CORE_message_queue_Submit+0x58> 2012ff4: 90 10 00 19 mov %i1, %o0 _CORE_message_queue_Copy_buffer( 2012ff8: d2 04 20 28 ld [ %l0 + 0x28 ], %o1 2012ffc: 7f ff ff e9 call 2012fa0 <_CORE_message_queue_Copy_buffer> 2013000: 94 10 00 1a mov %i2, %o2 buffer, the_thread->Wait.return_argument, size ); *(size_t *)the_thread->Wait.return_argument_1 = size; 2013004: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 the_thread->Wait.count = submit_type; 2013008: 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; 201300c: 10 80 00 15 b 2013060 <_CORE_message_queue_Submit+0xa4> 2013010: 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 < 2013014: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 2013018: c2 04 60 44 ld [ %l1 + 0x44 ], %g1 201301c: 80 a0 80 01 cmp %g2, %g1 2013020: 1a 80 00 12 bcc 2013068 <_CORE_message_queue_Submit+0xac> 2013024: 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 *) 2013028: 7f ff e0 03 call 200b034 <_Chain_Get> 201302c: 90 04 60 68 add %l1, 0x68, %o0 /* * NOTE: If the system is consistent, this error should never occur. */ if ( !the_message ) { 2013030: a0 92 20 00 orcc %o0, 0, %l0 2013034: 02 80 00 27 be 20130d0 <_CORE_message_queue_Submit+0x114> 2013038: 90 10 00 19 mov %i1, %o0 return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED; } _CORE_message_queue_Copy_buffer( 201303c: 92 04 20 10 add %l0, 0x10, %o1 2013040: 7f ff ff d8 call 2012fa0 <_CORE_message_queue_Copy_buffer> 2013044: 94 10 00 1a mov %i2, %o2 size ); the_message->Contents.size = size; the_message->priority = submit_type; _CORE_message_queue_Insert_message( 2013048: 90 10 00 11 mov %l1, %o0 _CORE_message_queue_Copy_buffer( buffer, the_message->Contents.buffer, size ); the_message->Contents.size = size; 201304c: f4 24 20 0c st %i2, [ %l0 + 0xc ] the_message->priority = submit_type; 2013050: fa 24 20 08 st %i5, [ %l0 + 8 ] _CORE_message_queue_Insert_message( 2013054: 92 10 00 10 mov %l0, %o1 2013058: 40 00 0a f1 call 2015c1c <_CORE_message_queue_Insert_message> 201305c: 94 10 00 1d mov %i5, %o2 2013060: 81 c7 e0 08 ret 2013064: 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 ) { 2013068: 80 a0 60 00 cmp %g1, 0 201306c: 02 80 00 17 be 20130c8 <_CORE_message_queue_Submit+0x10c> 2013070: 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() ) { 2013074: 03 00 80 99 sethi %hi(0x2026400), %g1 <== NOT EXECUTED 2013078: c2 00 61 48 ld [ %g1 + 0x148 ], %g1 ! 2026548 <_ISR_Nest_level> <== NOT EXECUTED 201307c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2013080: 12 80 00 14 bne 20130d0 <_CORE_message_queue_Submit+0x114> <== NOT EXECUTED 2013084: 03 00 80 99 sethi %hi(0x2026400), %g1 <== NOT EXECUTED */ { Thread_Control *executing = _Thread_Executing; _ISR_Disable( level ); 2013088: 7f ff bd 18 call 20024e8 <== NOT EXECUTED 201308c: e0 00 61 60 ld [ %g1 + 0x160 ], %l0 ! 2026560 <_Thread_Executing> <== NOT EXECUTED 2013090: 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; 2013094: 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; 2013098: f6 24 20 20 st %i3, [ %l0 + 0x20 ] <== NOT EXECUTED executing->Wait.return_argument = buffer; 201309c: f2 24 20 28 st %i1, [ %l0 + 0x28 ] <== NOT EXECUTED executing->Wait.option = size; 20130a0: 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; 20130a4: e2 24 20 44 st %l1, [ %l0 + 0x44 ] <== NOT EXECUTED 20130a8: 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 ); 20130ac: 7f ff bd 13 call 20024f8 <== NOT EXECUTED 20130b0: b0 10 20 07 mov 7, %i0 <== NOT EXECUTED _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 20130b4: d2 07 a0 60 ld [ %fp + 0x60 ], %o1 <== NOT EXECUTED 20130b8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20130bc: 15 00 80 37 sethi %hi(0x200dc00), %o2 <== NOT EXECUTED 20130c0: 7f ff ea 5c call 200da30 <_Thread_queue_Enqueue_with_handler> <== NOT EXECUTED 20130c4: 94 12 a2 c8 or %o2, 0x2c8, %o2 ! 200dec8 <_Thread_queue_Timeout> <== NOT EXECUTED 20130c8: 81 c7 e0 08 ret 20130cc: 81 e8 00 00 restore } return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT; 20130d0: b0 10 20 03 mov 3, %i0 <== NOT EXECUTED } 20130d4: 81 c7 e0 08 ret <== NOT EXECUTED 20130d8: 81 e8 00 00 restore <== NOT EXECUTED 020068e4 <_CORE_mutex_Seize_interrupt_blocking>: void _CORE_mutex_Seize_interrupt_blocking( CORE_mutex_Control *the_mutex, Watchdog_Interval timeout ) { 20068e4: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 20068e8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 20068ec: 80 a0 60 02 cmp %g1, 2 Watchdog_Interval timeout ) { Thread_Control *executing; executing = _Thread_Executing; 20068f0: 03 00 80 5f sethi %hi(0x2017c00), %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 20068f4: 12 80 00 0a bne 200691c <_CORE_mutex_Seize_interrupt_blocking+0x38> 20068f8: d2 00 60 90 ld [ %g1 + 0x90 ], %o1 ! 2017c90 <_Thread_Executing> if ( the_mutex->holder->current_priority > executing->current_priority ) { 20068fc: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 2006900: d2 02 60 14 ld [ %o1 + 0x14 ], %o1 2006904: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 2006908: 80 a0 40 09 cmp %g1, %o1 200690c: 28 80 00 05 bleu,a 2006920 <_CORE_mutex_Seize_interrupt_blocking+0x3c> 2006910: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 _Thread_Change_priority( 2006914: 40 00 07 47 call 2008630 <_Thread_Change_priority> 2006918: 94 10 20 00 clr %o2 FALSE ); } } the_mutex->blocked_count++; 200691c: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 2006920: 90 10 00 18 mov %i0, %o0 FALSE ); } } the_mutex->blocked_count++; 2006924: 82 00 60 01 inc %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 2006928: 92 10 00 19 mov %i1, %o1 FALSE ); } } the_mutex->blocked_count++; 200692c: c2 26 20 58 st %g1, [ %i0 + 0x58 ] _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 2006930: 15 00 80 25 sethi %hi(0x2009400), %o2 2006934: 40 00 0a 13 call 2009180 <_Thread_queue_Enqueue_with_handler> 2006938: 94 12 a2 18 or %o2, 0x218, %o2 ! 2009618 <_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 ) 200693c: 05 00 80 5e sethi %hi(0x2017800), %g2 2006940: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2006944: 82 00 7f ff add %g1, -1, %g1 2006948: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 200694c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2006950: 80 a0 60 00 cmp %g1, 0 2006954: 12 80 00 04 bne 2006964 <_CORE_mutex_Seize_interrupt_blocking+0x80> 2006958: 01 00 00 00 nop _Thread_Dispatch(); 200695c: 40 00 08 72 call 2008b24 <_Thread_Dispatch> 2006960: 81 e8 00 00 restore 2006964: 81 c7 e0 08 ret <== NOT EXECUTED 2006968: 81 e8 00 00 restore <== NOT EXECUTED 0200696c <_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 ) { 200696c: 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 ) { 2006970: c2 06 20 44 ld [ %i0 + 0x44 ], %g1 2006974: 80 a0 60 00 cmp %g1, 0 2006978: 02 80 00 07 be 2006994 <_CORE_mutex_Surrender+0x28> 200697c: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 if ( !_Thread_Is_executing( holder ) ) 2006980: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006984: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2017c90 <_Thread_Executing> 2006988: 80 a2 00 01 cmp %o0, %g1 200698c: 12 80 00 51 bne 2006ad0 <_CORE_mutex_Surrender+0x164> 2006990: 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 ) 2006994: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 2006998: 80 a0 60 00 cmp %g1, 0 200699c: 02 80 00 4c be 2006acc <_CORE_mutex_Surrender+0x160> 20069a0: 82 00 7f ff add %g1, -1, %g1 return CORE_MUTEX_STATUS_SUCCESSFUL; the_mutex->nest_count--; if ( the_mutex->nest_count != 0 ) { 20069a4: 80 a0 60 00 cmp %g1, 0 20069a8: 02 80 00 09 be 20069cc <_CORE_mutex_Surrender+0x60> 20069ac: c2 26 20 54 st %g1, [ %i0 + 0x54 ] switch ( the_mutex->Attributes.lock_nesting_behavior ) { 20069b0: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 20069b4: 80 a0 60 00 cmp %g1, 0 20069b8: 02 80 00 46 be 2006ad0 <_CORE_mutex_Surrender+0x164> 20069bc: 84 10 20 00 clr %g2 20069c0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20069c4: 02 80 00 43 be 2006ad0 <_CORE_mutex_Surrender+0x164> <== NOT EXECUTED 20069c8: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 20069cc: 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 ) || 20069d0: 80 a0 60 02 cmp %g1, 2 20069d4: 22 80 00 06 be,a 20069ec <_CORE_mutex_Surrender+0x80> 20069d8: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 20069dc: 80 a0 60 03 cmp %g1, 3 20069e0: 32 80 00 07 bne,a 20069fc <_CORE_mutex_Surrender+0x90> 20069e4: c0 26 20 5c clr [ %i0 + 0x5c ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) holder->resource_count--; 20069e8: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED 20069ec: 82 00 7f ff add %g1, -1, %g1 20069f0: c2 22 20 1c st %g1, [ %o0 + 0x1c ] 20069f4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 the_mutex->holder = NULL; 20069f8: 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 ) || 20069fc: 80 a0 60 02 cmp %g1, 2 2006a00: 02 80 00 05 be 2006a14 <_CORE_mutex_Surrender+0xa8> 2006a04: c0 26 20 60 clr [ %i0 + 0x60 ] 2006a08: 80 a0 60 03 cmp %g1, 3 2006a0c: 12 80 00 0d bne 2006a40 <_CORE_mutex_Surrender+0xd4> 2006a10: 01 00 00 00 nop _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { if ( holder->resource_count == 0 && 2006a14: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 2006a18: 80 a0 60 00 cmp %g1, 0 2006a1c: 12 80 00 09 bne 2006a40 <_CORE_mutex_Surrender+0xd4> 2006a20: 01 00 00 00 nop 2006a24: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 2006a28: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 2006a2c: 80 a2 40 01 cmp %o1, %g1 2006a30: 02 80 00 04 be 2006a40 <_CORE_mutex_Surrender+0xd4> 2006a34: 01 00 00 00 nop holder->real_priority != holder->current_priority ) { _Thread_Change_priority( holder, holder->real_priority, TRUE ); 2006a38: 40 00 06 fe call 2008630 <_Thread_Change_priority> 2006a3c: 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 ) ) ) { 2006a40: 40 00 09 62 call 2008fc8 <_Thread_queue_Dequeue> 2006a44: 90 10 00 18 mov %i0, %o0 2006a48: 86 92 20 00 orcc %o0, 0, %g3 2006a4c: 02 80 00 1f be 2006ac8 <_CORE_mutex_Surrender+0x15c> 2006a50: 82 10 20 01 mov 1, %g1 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 2006a54: c2 00 e0 08 ld [ %g3 + 8 ], %g1 the_mutex->nest_count = 1; switch ( the_mutex->Attributes.discipline ) { 2006a58: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 2006a5c: c2 26 20 60 st %g1, [ %i0 + 0x60 ] } else #endif { the_mutex->holder = the_thread; 2006a60: c6 26 20 5c st %g3, [ %i0 + 0x5c ] the_mutex->holder_id = the_thread->Object.id; the_mutex->nest_count = 1; 2006a64: 82 10 20 01 mov 1, %g1 switch ( the_mutex->Attributes.discipline ) { 2006a68: 80 a0 a0 02 cmp %g2, 2 2006a6c: 02 80 00 07 be 2006a88 <_CORE_mutex_Surrender+0x11c> 2006a70: c2 26 20 54 st %g1, [ %i0 + 0x54 ] 2006a74: 80 a0 a0 03 cmp %g2, 3 2006a78: 12 80 00 16 bne 2006ad0 <_CORE_mutex_Surrender+0x164> 2006a7c: 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++; 2006a80: 10 80 00 07 b 2006a9c <_CORE_mutex_Surrender+0x130> <== NOT EXECUTED 2006a84: 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++; 2006a88: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 2006a8c: 84 10 20 00 clr %g2 2006a90: 82 00 60 01 inc %g1 2006a94: 10 80 00 0f b 2006ad0 <_CORE_mutex_Surrender+0x164> 2006a98: 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 < 2006a9c: 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++; 2006aa0: 82 00 60 01 inc %g1 <== NOT EXECUTED 2006aa4: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED if (the_mutex->Attributes.priority_ceiling < 2006aa8: d2 06 20 4c ld [ %i0 + 0x4c ], %o1 <== NOT EXECUTED 2006aac: 80 a2 40 02 cmp %o1, %g2 <== NOT EXECUTED 2006ab0: 3a 80 00 08 bcc,a 2006ad0 <_CORE_mutex_Surrender+0x164> <== NOT EXECUTED 2006ab4: 84 10 20 00 clr %g2 <== NOT EXECUTED the_thread->current_priority){ _Thread_Change_priority( 2006ab8: 40 00 06 de call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 2006abc: 94 10 20 00 clr %o2 <== NOT EXECUTED } break; } } } else the_mutex->lock = CORE_MUTEX_UNLOCKED; 2006ac0: 10 80 00 04 b 2006ad0 <_CORE_mutex_Surrender+0x164> <== NOT EXECUTED 2006ac4: 84 10 20 00 clr %g2 <== NOT EXECUTED 2006ac8: c2 26 20 50 st %g1, [ %i0 + 0x50 ] 2006acc: 84 10 20 00 clr %g2 return CORE_MUTEX_STATUS_SUCCESSFUL; } 2006ad0: 81 c7 e0 08 ret 2006ad4: 91 e8 00 02 restore %g0, %g2, %o0 0200c368 <_Debug_Is_enabled>: */ boolean _Debug_Is_enabled( rtems_debug_control level ) { 200c368: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200c36c: c2 00 60 94 ld [ %g1 + 0x94 ], %g1 ! 2017c94 <_Debug_Level> <== NOT EXECUTED 200c370: 90 0a 00 01 and %o0, %g1, %o0 <== NOT EXECUTED return (_Debug_Level & level) ? TRUE : FALSE; } 200c374: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 200c378: 81 c3 e0 08 retl <== NOT EXECUTED 200c37c: 90 40 20 00 addx %g0, 0, %o0 <== NOT EXECUTED 020050b0 <_Event_Seize>: rtems_event_set event_in, rtems_option option_set, rtems_interval ticks, rtems_event_set *event_out ) { 20050b0: 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; 20050b4: 03 00 80 5f sethi %hi(0x2017c00), %g1 20050b8: e0 00 60 90 ld [ %g1 + 0x90 ], %l0 ! 2017c90 <_Thread_Executing> executing->Wait.return_code = RTEMS_SUCCESSFUL; 20050bc: c0 24 20 34 clr [ %l0 + 0x34 ] api = executing->API_Extensions[ THREAD_API_RTEMS ]; _ISR_Disable( level ); 20050c0: 7f ff f3 20 call 2001d40 20050c4: e4 04 21 70 ld [ %l0 + 0x170 ], %l2 20050c8: 84 10 00 08 mov %o0, %g2 pending_events = api->pending_events; 20050cc: c2 04 a0 40 ld [ %l2 + 0x40 ], %g1 seized_events = _Event_sets_Get( pending_events, event_in ); if ( !_Event_sets_Is_empty( seized_events ) && 20050d0: a2 8e 00 01 andcc %i0, %g1, %l1 20050d4: 02 80 00 0e be 200510c <_Event_Seize+0x5c> 20050d8: 80 8e 60 01 btst 1, %i1 20050dc: 80 a4 40 18 cmp %l1, %i0 20050e0: 02 80 00 04 be 20050f0 <_Event_Seize+0x40> 20050e4: 80 8e 60 02 btst 2, %i1 20050e8: 02 80 00 09 be 200510c <_Event_Seize+0x5c> 20050ec: 80 8e 60 01 btst 1, %i1 (seized_events == event_in || _Options_Is_any( option_set )) ) { api->pending_events = 20050f0: 82 28 40 11 andn %g1, %l1, %g1 20050f4: c2 24 a0 40 st %g1, [ %l2 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); _ISR_Enable( level ); 20050f8: 7f ff f3 16 call 2001d50 20050fc: 01 00 00 00 nop 2005100: e2 26 c0 00 st %l1, [ %i3 ] 2005104: 81 c7 e0 08 ret 2005108: 81 e8 00 00 restore *event_out = seized_events; return; } if ( _Options_Is_no_wait( option_set ) ) { 200510c: 22 80 00 09 be,a 2005130 <_Event_Seize+0x80> 2005110: 23 00 80 5f sethi %hi(0x2017c00), %l1 _ISR_Enable( level ); 2005114: 7f ff f3 0f call 2001d50 2005118: 90 10 00 02 mov %g2, %o0 executing->Wait.return_code = RTEMS_UNSATISFIED; 200511c: 82 10 20 0d mov 0xd, %g1 2005120: c2 24 20 34 st %g1, [ %l0 + 0x34 ] *event_out = seized_events; 2005124: e2 26 c0 00 st %l1, [ %i3 ] 2005128: 81 c7 e0 08 ret 200512c: 81 e8 00 00 restore return; } _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 2005130: 82 10 20 01 mov 1, %g1 executing->Wait.option = (uint32_t ) option_set; 2005134: f2 24 20 30 st %i1, [ %l0 + 0x30 ] executing->Wait.count = (uint32_t ) event_in; 2005138: f0 24 20 24 st %i0, [ %l0 + 0x24 ] executing->Wait.return_argument = event_out; 200513c: 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; 2005140: c2 24 62 c4 st %g1, [ %l1 + 0x2c4 ] executing->Wait.option = (uint32_t ) option_set; executing->Wait.count = (uint32_t ) event_in; executing->Wait.return_argument = event_out; _ISR_Enable( level ); 2005144: 7f ff f3 03 call 2001d50 2005148: 90 10 00 02 mov %g2, %o0 if ( ticks ) { 200514c: 80 a6 a0 00 cmp %i2, 0 2005150: 02 80 00 0f be 200518c <_Event_Seize+0xdc> 2005154: 90 10 00 10 mov %l0, %o0 _Watchdog_Initialize( 2005158: c2 04 20 08 ld [ %l0 + 8 ], %g1 ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 200515c: 11 00 80 5f sethi %hi(0x2017c00), %o0 void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; 2005160: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 2005164: 03 00 80 15 sethi %hi(0x2005400), %g1 2005168: 82 10 60 38 or %g1, 0x38, %g1 ! 2005438 <_Event_Timeout> Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 200516c: f4 24 20 54 st %i2, [ %l0 + 0x54 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2005170: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 2005174: c0 24 20 6c clr [ %l0 + 0x6c ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 2005178: c2 24 20 64 st %g1, [ %l0 + 0x64 ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 200517c: 90 12 20 b0 or %o0, 0xb0, %o0 2005180: 40 00 13 7a call 2009f68 <_Watchdog_Insert> 2005184: 92 04 20 48 add %l0, 0x48, %o1 NULL ); _Watchdog_Insert_ticks( &executing->Timer, ticks ); } _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 2005188: 90 10 00 10 mov %l0, %o0 200518c: 40 00 11 7b call 2009778 <_Thread_Set_state> 2005190: 92 10 21 00 mov 0x100, %o1 _ISR_Disable( level ); 2005194: 7f ff f2 eb call 2001d40 2005198: 01 00 00 00 nop 200519c: b0 10 00 08 mov %o0, %i0 sync_state = _Event_Sync_state; 20051a0: c4 04 62 c4 ld [ %l1 + 0x2c4 ], %g2 _Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; 20051a4: c0 24 62 c4 clr [ %l1 + 0x2c4 ] switch ( sync_state ) { 20051a8: 80 a0 a0 02 cmp %g2, 2 20051ac: 02 80 00 08 be 20051cc <_Event_Seize+0x11c> 20051b0: 80 a0 a0 03 cmp %g2, 3 20051b4: 02 80 00 09 be 20051d8 <_Event_Seize+0x128> 20051b8: 80 a0 a0 01 cmp %g2, 1 20051bc: 12 80 00 15 bne 2005210 <_Event_Seize+0x160> 20051c0: 01 00 00 00 nop * enter the synchronization states above. */ return; case EVENT_SYNC_NOTHING_HAPPENED: _ISR_Enable( level ); 20051c4: 7f ff f2 e3 call 2001d50 20051c8: 81 e8 00 00 restore return; case EVENT_SYNC_TIMEOUT: executing->Wait.return_code = RTEMS_TIMEOUT; 20051cc: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 20051d0: c2 24 20 34 st %g1, [ %l0 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 20051d4: 30 80 00 0b b,a 2005200 <_Event_Seize+0x150> <== NOT EXECUTED _Thread_Unblock( executing ); return; case EVENT_SYNC_SATISFIED: if ( _Watchdog_Is_active( &executing->Timer ) ) { 20051d8: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 20051dc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 20051e0: 12 80 00 08 bne 2005200 <_Event_Seize+0x150> <== NOT EXECUTED 20051e4: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 20051e8: c4 24 20 50 st %g2, [ %l0 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &executing->Timer ); _ISR_Enable( level ); 20051ec: 7f ff f2 d9 call 2001d50 <== NOT EXECUTED 20051f0: b0 10 00 10 mov %l0, %i0 <== NOT EXECUTED (void) _Watchdog_Remove( &executing->Timer ); 20051f4: 40 00 13 b5 call 200a0c8 <_Watchdog_Remove> <== NOT EXECUTED 20051f8: 90 04 20 48 add %l0, 0x48, %o0 <== NOT EXECUTED 20051fc: 30 80 00 03 b,a 2005208 <_Event_Seize+0x158> <== NOT EXECUTED } else _ISR_Enable( level ); 2005200: 7f ff f2 d4 call 2001d50 <== NOT EXECUTED 2005204: b0 10 00 10 mov %l0, %i0 <== NOT EXECUTED _Thread_Unblock( executing ); 2005208: 7f ff ff a4 call 2005098 <_Thread_Unblock> <== NOT EXECUTED 200520c: 81 e8 00 00 restore <== NOT EXECUTED 2005210: 81 c7 e0 08 ret <== NOT EXECUTED 2005214: 81 e8 00 00 restore <== NOT EXECUTED 02005330 <_Event_Surrender>: */ void _Event_Surrender( Thread_Control *the_thread ) { 2005330: 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 ]; 2005334: e2 06 21 70 ld [ %i0 + 0x170 ], %l1 option_set = (rtems_option) the_thread->Wait.option; 2005338: e6 06 20 30 ld [ %i0 + 0x30 ], %l3 _ISR_Disable( level ); 200533c: 7f ff f2 81 call 2001d40 2005340: a0 10 00 18 mov %i0, %l0 2005344: a4 10 00 08 mov %o0, %l2 pending_events = api->pending_events; 2005348: c8 04 60 40 ld [ %l1 + 0x40 ], %g4 event_condition = (rtems_event_set) the_thread->Wait.count; 200534c: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { 2005350: 86 88 80 04 andcc %g2, %g4, %g3 2005354: 02 80 00 36 be 200542c <_Event_Surrender+0xfc> 2005358: 01 00 00 00 nop if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { 200535c: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 2005360: 80 88 61 00 btst 0x100, %g1 2005364: 02 80 00 1e be 20053dc <_Event_Surrender+0xac> 2005368: 1b 00 80 5f sethi %hi(0x2017c00), %o5 if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { 200536c: 80 a0 c0 02 cmp %g3, %g2 2005370: 02 80 00 04 be 2005380 <_Event_Surrender+0x50> 2005374: 80 8c e0 02 btst 2, %l3 2005378: 02 80 00 19 be 20053dc <_Event_Surrender+0xac> 200537c: 01 00 00 00 nop api->pending_events = 2005380: 82 29 00 03 andn %g4, %g3, %g1 2005384: 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; 2005388: 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; 200538c: c0 24 20 24 clr [ %l0 + 0x24 ] *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 2005390: c6 20 40 00 st %g3, [ %g1 ] _ISR_Flash( level ); 2005394: 7f ff f2 6f call 2001d50 2005398: 01 00 00 00 nop 200539c: 7f ff f2 69 call 2001d40 20053a0: 01 00 00 00 nop if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 20053a4: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 20053a8: 80 a0 60 02 cmp %g1, 2 20053ac: 02 80 00 05 be 20053c0 <_Event_Surrender+0x90> 20053b0: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 20053b4: 7f ff f2 67 call 2001d50 20053b8: 90 10 00 12 mov %l2, %o0 20053bc: 30 80 00 06 b,a 20053d4 <_Event_Surrender+0xa4> 20053c0: c2 24 20 50 st %g1, [ %l0 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 20053c4: 7f ff f2 63 call 2001d50 20053c8: 90 10 00 12 mov %l2, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 20053cc: 40 00 13 3f call 200a0c8 <_Watchdog_Remove> 20053d0: 90 04 20 48 add %l0, 0x48, %o0 _Thread_Unblock( the_thread ); 20053d4: 7f ff ff d1 call 2005318 <_Thread_Unblock> 20053d8: 81 e8 00 00 restore } return; } } switch ( _Event_Sync_state ) { 20053dc: c2 03 62 c4 ld [ %o5 + 0x2c4 ], %g1 <== NOT EXECUTED 20053e0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 20053e4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20053e8: 18 80 00 11 bgu 200542c <_Event_Surrender+0xfc> <== NOT EXECUTED 20053ec: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED case EVENT_SYNC_SATISFIED: break; case EVENT_SYNC_NOTHING_HAPPENED: case EVENT_SYNC_TIMEOUT: if ( !_Thread_Is_executing( the_thread ) ) 20053f0: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED 20053f4: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 20053f8: 12 80 00 0d bne 200542c <_Event_Surrender+0xfc> <== NOT EXECUTED 20053fc: 80 a0 c0 02 cmp %g3, %g2 <== NOT EXECUTED break; if ( seized_events == event_condition || _Options_Is_any(option_set) ) { 2005400: 02 80 00 04 be 2005410 <_Event_Surrender+0xe0> <== NOT EXECUTED 2005404: 80 8c e0 02 btst 2, %l3 <== NOT EXECUTED 2005408: 02 80 00 09 be 200542c <_Event_Surrender+0xfc> <== NOT EXECUTED 200540c: 01 00 00 00 nop <== NOT EXECUTED api->pending_events = 2005410: 82 29 00 03 andn %g4, %g3, %g1 <== NOT EXECUTED 2005414: 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; 2005418: 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; 200541c: c0 24 20 24 clr [ %l0 + 0x24 ] <== NOT EXECUTED *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 2005420: c6 20 40 00 st %g3, [ %g1 ] <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_SATISFIED; 2005424: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 2005428: c2 23 62 c4 st %g1, [ %o5 + 0x2c4 ] <== NOT EXECUTED } break; } } _ISR_Enable( level ); 200542c: 7f ff f2 49 call 2001d50 2005430: 91 e8 00 12 restore %g0, %l2, %o0 2005434: 01 00 00 00 nop 02005438 <_Event_Timeout>: void _Event_Timeout( Objects_Id id, void *ignored ) { 2005438: 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 ) ) { 200543c: 92 96 20 00 orcc %i0, 0, %o1 2005440: 12 80 00 0a bne 2005468 <_Event_Timeout+0x30> 2005444: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2005448: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200544c: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2005450: 84 00 a0 01 inc %g2 <== NOT EXECUTED 2005454: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 2005458: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200545c: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2017c90 <_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; 2005460: 10 80 00 18 b 20054c0 <_Event_Timeout+0x88> <== NOT EXECUTED 2005464: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED 2005468: 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 ) { 200546c: 80 a0 a0 04 cmp %g2, 4 2005470: 18 80 00 0e bgu 20054a8 <_Event_Timeout+0x70> 2005474: 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 :) */ 2005478: 83 32 60 1b srl %o1, 0x1b, %g1 200547c: 80 a0 60 01 cmp %g1, 1 2005480: 12 80 00 0a bne 20054a8 <_Event_Timeout+0x70> 2005484: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2005488: 83 28 a0 02 sll %g2, 2, %g1 200548c: 05 00 80 5e sethi %hi(0x2017800), %g2 2005490: 84 10 a3 10 or %g2, 0x310, %g2 ! 2017b10 <_Objects_Information_table> 2005494: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2005498: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 200549c: 80 a2 20 00 cmp %o0, 0 20054a0: 12 80 00 05 bne 20054b4 <_Event_Timeout+0x7c> 20054a4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 20054a8: b0 10 20 00 clr %i0 <== NOT EXECUTED 20054ac: 10 80 00 05 b 20054c0 <_Event_Timeout+0x88> <== NOT EXECUTED 20054b0: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 20054b4: 40 00 08 97 call 2007710 <_Objects_Get> 20054b8: 94 07 bf f4 add %fp, -12, %o2 20054bc: 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 ) { 20054c0: c2 07 bf f4 ld [ %fp + -12 ], %g1 20054c4: 80 a0 60 00 cmp %g1, 0 20054c8: 12 80 00 27 bne 2005564 <_Event_Timeout+0x12c> 20054cc: 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 ); 20054d0: 7f ff f2 1c call 2001d40 20054d4: 01 00 00 00 nop 20054d8: 86 10 00 08 mov %o0, %g3 if ( the_thread->Wait.count ) { /* verify thread is waiting */ 20054dc: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 20054e0: 80 a0 60 00 cmp %g1, 0 20054e4: 02 80 00 1a be 200554c <_Event_Timeout+0x114> 20054e8: 05 00 80 5f sethi %hi(0x2017c00), %g2 the_thread->Wait.count = 0; if ( _Event_Sync_state != EVENT_SYNC_SYNCHRONIZED && 20054ec: c2 00 a2 c4 ld [ %g2 + 0x2c4 ], %g1 ! 2017ec4 <_Event_Sync_state> 20054f0: 80 a0 60 00 cmp %g1, 0 20054f4: 02 80 00 0d be 2005528 <_Event_Timeout+0xf0> 20054f8: c0 26 20 24 clr [ %i0 + 0x24 ] 20054fc: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2005500: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED 2005504: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 2005508: 12 80 00 09 bne 200552c <_Event_Timeout+0xf4> <== NOT EXECUTED 200550c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) { 2005510: c2 00 a2 c4 ld [ %g2 + 0x2c4 ], %g1 <== NOT EXECUTED 2005514: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 2005518: 02 80 00 03 be 2005524 <_Event_Timeout+0xec> <== NOT EXECUTED 200551c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_TIMEOUT; 2005520: c2 20 a2 c4 st %g1, [ %g2 + 0x2c4 ] <== NOT EXECUTED } _ISR_Enable( level ); 2005524: 30 80 00 0a b,a 200554c <_Event_Timeout+0x114> <== NOT EXECUTED } else { the_thread->Wait.return_code = RTEMS_TIMEOUT; 2005528: 82 10 20 06 mov 6, %g1 200552c: c2 26 20 34 st %g1, [ %i0 + 0x34 ] _ISR_Enable( level ); 2005530: 7f ff f2 08 call 2001d50 2005534: 90 10 00 03 mov %g3, %o0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 2005538: 90 10 00 18 mov %i0, %o0 200553c: 13 04 00 ff sethi %hi(0x1003fc00), %o1 2005540: 40 00 0c ae call 20087f8 <_Thread_Clear_state> 2005544: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 2005548: 30 80 00 03 b,a 2005554 <_Event_Timeout+0x11c> _Thread_Unblock( the_thread ); } } else { _ISR_Enable( level ); 200554c: 7f ff f2 01 call 2001d50 <== NOT EXECUTED 2005550: 01 00 00 00 nop <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 2005554: 05 00 80 5e sethi %hi(0x2017800), %g2 2005558: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 200555c: 82 00 7f ff add %g1, -1, %g1 2005560: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 2005564: 81 c7 e0 08 ret 2005568: 81 e8 00 00 restore 02006f34 <_Heap_Calc_block_size>: */ size_t _Heap_Calc_block_size( size_t size, uint32_t page_size, uint32_t min_size) { 2006f34: 9d e3 bf 90 save %sp, -112, %sp uint32_t block_size = size + HEAP_BLOCK_USED_OVERHEAD; 2006f38: 82 06 20 04 add %i0, 4, %g1 _Heap_Align_up(&block_size, page_size); 2006f3c: 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; 2006f40: c2 27 bf f4 st %g1, [ %fp + -12 ] _Heap_Align_up(&block_size, page_size); 2006f44: 7f ff ff f0 call 2006f04 <_Heap_Align_up> 2006f48: 90 07 bf f4 add %fp, -12, %o0 if (block_size < min_size) block_size = min_size; 2006f4c: c2 07 bf f4 ld [ %fp + -12 ], %g1 2006f50: 80 a0 40 1a cmp %g1, %i2 2006f54: 1a 80 00 04 bcc 2006f64 <_Heap_Calc_block_size+0x30> 2006f58: a0 10 00 18 mov %i0, %l0 2006f5c: 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; 2006f60: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 2006f64: 80 a0 40 10 cmp %g1, %l0 2006f68: 08 80 00 03 bleu 2006f74 <_Heap_Calc_block_size+0x40> 2006f6c: b0 10 20 00 clr %i0 2006f70: b0 10 00 01 mov %g1, %i0 } 2006f74: 81 c7 e0 08 ret 2006f78: 81 e8 00 00 restore 020179e0 <_Heap_Get_free_information>: */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First ( Heap_Control *the_heap ) { return _Heap_Head(the_heap)->next; 20179e0: 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; 20179e4: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED info->largest = 0; 20179e8: c0 22 60 04 clr [ %o1 + 4 ] <== NOT EXECUTED info->total = 0; 20179ec: 10 80 00 0e b 2017a24 <_Heap_Get_free_information+0x44> <== NOT EXECUTED 20179f0: 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++; 20179f4: c2 02 40 00 ld [ %o1 ], %g1 <== NOT EXECUTED info->total += the_size; 20179f8: c4 02 60 08 ld [ %o1 + 8 ], %g2 <== NOT EXECUTED if ( info->largest < the_size ) 20179fc: 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); 2017a00: 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++; 2017a04: 82 00 60 01 inc %g1 <== NOT EXECUTED info->total += the_size; 2017a08: 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++; 2017a0c: c2 22 40 00 st %g1, [ %o1 ] <== NOT EXECUTED info->total += the_size; if ( info->largest < the_size ) 2017a10: 80 a1 00 03 cmp %g4, %g3 <== NOT EXECUTED 2017a14: 1a 80 00 03 bcc 2017a20 <_Heap_Get_free_information+0x40> <== NOT EXECUTED 2017a18: c4 22 60 08 st %g2, [ %o1 + 8 ] <== NOT EXECUTED info->largest = the_size; 2017a1c: 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) 2017a20: 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; 2017a24: 80 a3 40 08 cmp %o5, %o0 <== NOT EXECUTED 2017a28: 32 bf ff f3 bne,a 20179f4 <_Heap_Get_free_information+0x14> <== NOT EXECUTED 2017a2c: 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; } } 2017a30: 81 c3 e0 08 retl <== NOT EXECUTED 2017a34: 01 00 00 00 nop 02007024 <_Heap_Initialize>: Heap_Control *the_heap, void *starting_address, size_t size, uint32_t page_size ) { 2007024: 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) 2007028: 80 a6 e0 00 cmp %i3, 0 200702c: 12 80 00 05 bne 2007040 <_Heap_Initialize+0x1c> 2007030: f6 27 a0 50 st %i3, [ %fp + 0x50 ] page_size = CPU_ALIGNMENT; 2007034: 82 10 20 08 mov 8, %g1 <== NOT EXECUTED 2007038: 10 80 00 05 b 200704c <_Heap_Initialize+0x28> <== NOT EXECUTED 200703c: c2 27 a0 50 st %g1, [ %fp + 0x50 ] <== NOT EXECUTED else _Heap_Align_up( &page_size, CPU_ALIGNMENT ); 2007040: 90 07 a0 50 add %fp, 0x50, %o0 2007044: 7f ff ff b0 call 2006f04 <_Heap_Align_up> 2007048: 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 ); 200704c: 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; 2007050: 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; 2007054: 92 10 00 10 mov %l0, %o1 2007058: 40 00 36 46 call 2014970 <.urem> 200705c: 90 10 00 12 mov %l2, %o0 *value = r ? v - r + a : v; 2007060: 80 a2 20 00 cmp %o0, 0 2007064: 02 80 00 05 be 2007078 <_Heap_Initialize+0x54> 2007068: 82 10 20 10 mov 0x10, %g1 200706c: 82 04 80 10 add %l2, %l0, %g1 2007070: 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; 2007074: 82 10 20 10 mov 0x10, %g1 _Heap_Align_up ( &the_heap->min_block_size, page_size ); 2007078: 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; 200707c: c2 26 20 14 st %g1, [ %i0 + 0x14 ] _Heap_Align_up ( &the_heap->min_block_size, page_size ); 2007080: 7f ff ff a1 call 2006f04 <_Heap_Align_up> 2007084: 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; 2007088: 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); 200708c: 82 26 c0 19 sub %i3, %i1, %g1 2007090: 82 00 60 08 add %g1, 8, %g1 if ( size < overhead ) 2007094: 80 a6 80 01 cmp %i2, %g1 2007098: 0a 80 00 2b bcs 2007144 <_Heap_Initialize+0x120> 200709c: e2 07 a0 50 ld [ %fp + 0x50 ], %l1 return 0; /* Too small area for the heap */ the_size = size - overhead; 20070a0: a0 26 80 01 sub %i2, %g1, %l0 uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 20070a4: 92 10 00 11 mov %l1, %o1 20070a8: 40 00 36 32 call 2014970 <.urem> 20070ac: 90 10 00 10 mov %l0, %o0 _Heap_Align_down ( &the_size, page_size ); if ( the_size == 0 ) 20070b0: a0 a4 00 08 subcc %l0, %o0, %l0 20070b4: 02 80 00 24 be 2007144 <_Heap_Initialize+0x120> 20070b8: 07 00 80 5e sethi %hi(0x2017800), %g3 return 0; /* Too small area for the heap */ the_heap->page_size = page_size; 20070bc: 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; 20070c0: e2 24 bf f8 st %l1, [ %l2 + -8 ] the_block->size = the_size | HEAP_PREV_USED; 20070c4: 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++; 20070c8: c4 00 e0 04 ld [ %g3 + 4 ], %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; 20070cc: 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 */ 20070d0: 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 ); 20070d4: 88 06 c0 10 add %i3, %l0, %g4 the_block->size = page_size; 20070d8: 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 ); 20070dc: f0 26 e0 08 st %i0, [ %i3 + 8 ] the_block->prev = _Heap_Head( the_heap ); 20070e0: 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++; 20070e4: 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; 20070e8: 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; 20070ec: 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; 20070f0: 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; 20070f4: 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; 20070f8: e0 26 20 30 st %l0, [ %i0 + 0x30 ] stats->min_free_size = the_size; 20070fc: e0 26 20 34 st %l0, [ %i0 + 0x34 ] stats->free_blocks = 1; stats->max_free_blocks = 1; stats->used_blocks = 0; 2007100: c0 26 20 40 clr [ %i0 + 0x40 ] stats->max_search = 0; 2007104: c0 26 20 44 clr [ %i0 + 0x44 ] stats->allocs = 0; 2007108: c0 26 20 48 clr [ %i0 + 0x48 ] stats->searches = 0; 200710c: c0 26 20 4c clr [ %i0 + 0x4c ] stats->frees = 0; 2007110: c0 26 20 50 clr [ %i0 + 0x50 ] stats->resizes = 0; 2007114: 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; 2007118: 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++; 200711c: 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; 2007120: 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; 2007124: 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; 2007128: f6 26 20 08 st %i3, [ %i0 + 8 ] _Heap_Tail(the_heap)->prev = the_block; 200712c: f6 26 20 0c st %i3, [ %i0 + 0xc ] the_heap->start = the_block; 2007130: 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 */ 2007134: 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++; 2007138: c4 20 e0 04 st %g2, [ %g3 + 4 ] return ( the_size - HEAP_BLOCK_USED_OVERHEAD ); 200713c: 81 c7 e0 08 ret 2007140: 91 ec 3f fc restore %l0, -4, %o0 } 2007144: 81 c7 e0 08 ret 2007148: 91 e8 20 00 restore %g0, 0, %o0 0200c568 <_Heap_Resize_block>: void *starting_address, size_t size, uint32_t *old_mem_size, uint32_t *avail_mem_size ) { 200c568: 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; 200c56c: 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; 200c570: ea 06 20 14 ld [ %i0 + 0x14 ], %l5 <== NOT EXECUTED uint32_t const page_size = the_heap->page_size; *old_mem_size = 0; 200c574: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED *avail_mem_size = 0; 200c578: 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); 200c57c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200c580: 40 00 20 fc call 2014970 <.urem> <== NOT EXECUTED 200c584: 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 ); 200c588: 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); 200c58c: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 200c590: 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)) 200c594: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 200c598: 0a 80 00 78 bcs 200c778 <_Heap_Resize_block+0x210> <== NOT EXECUTED 200c59c: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 <== NOT EXECUTED 200c5a0: 80 a4 80 02 cmp %l2, %g2 <== NOT EXECUTED 200c5a4: 38 80 00 78 bgu,a 200c784 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 200c5a8: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED return HEAP_RESIZE_FATAL_ERROR; prev_used_flag = the_block->size & HEAP_PREV_USED; 200c5ac: 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); 200c5b0: 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 ); 200c5b4: 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) || 200c5b8: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 200c5bc: 2a 80 00 72 bcs,a 200c784 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 200c5c0: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 200c5c4: 80 a4 40 02 cmp %l1, %g2 <== NOT EXECUTED 200c5c8: 38 80 00 6f bgu,a 200c784 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 200c5cc: 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); 200c5d0: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED 200c5d4: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 200c5d8: 02 80 00 68 be 200c778 <_Heap_Resize_block+0x210> <== NOT EXECUTED 200c5dc: 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) || 200c5e0: 80 a4 40 02 cmp %l1, %g2 <== NOT EXECUTED 200c5e4: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED 200c5e8: 02 80 00 04 be 200c5f8 <_Heap_Resize_block+0x90> <== NOT EXECUTED 200c5ec: ba 04 40 14 add %l1, %l4, %i5 <== NOT EXECUTED 200c5f0: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 200c5f4: 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) 200c5f8: 82 24 40 19 sub %l1, %i1, %g1 <== NOT EXECUTED 200c5fc: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED + HEAP_BLOCK_HEADER_OFFSET; *old_mem_size = old_user_size; 200c600: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED if (size > old_user_size) { 200c604: 80 a6 80 01 cmp %i2, %g1 <== NOT EXECUTED 200c608: 08 80 00 1f bleu 200c684 <_Heap_Resize_block+0x11c> <== NOT EXECUTED 200c60c: 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 */ 200c610: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 200c614: 12 80 00 5b bne 200c780 <_Heap_Resize_block+0x218> <== NOT EXECUTED 200c618: 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; 200c61c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 200c620: 40 00 20 d4 call 2014970 <.urem> <== NOT EXECUTED 200c624: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *value = r ? v - r + a : v; 200c628: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200c62c: 02 80 00 05 be 200c640 <_Heap_Resize_block+0xd8> <== NOT EXECUTED 200c630: 80 a4 00 15 cmp %l0, %l5 <== NOT EXECUTED 200c634: 82 04 00 13 add %l0, %l3, %g1 <== NOT EXECUTED 200c638: a0 20 40 08 sub %g1, %o0, %l0 <== NOT EXECUTED 200c63c: 80 a4 00 15 cmp %l0, %l5 <== NOT EXECUTED 200c640: 1a 80 00 03 bcc 200c64c <_Heap_Resize_block+0xe4> <== NOT EXECUTED 200c644: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200c648: 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) 200c64c: 80 a2 00 14 cmp %o0, %l4 <== NOT EXECUTED 200c650: 38 80 00 4d bgu,a 200c784 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 200c654: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED return HEAP_RESIZE_UNSATISFIED; /* Next block is too small or none. */ add_block_size = 200c658: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 200c65c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 200c660: 7f ff ea 47 call 2006f7c <_Heap_Block_allocate> <== NOT EXECUTED 200c664: 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; 200c668: 90 02 00 17 add %o0, %l7, %o0 <== NOT EXECUTED 200c66c: 90 12 00 1b or %o0, %i3, %o0 <== NOT EXECUTED 200c670: d0 24 a0 04 st %o0, [ %l2 + 4 ] <== NOT EXECUTED --stats->used_blocks; 200c674: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED 200c678: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 200c67c: 10 80 00 3a b 200c764 <_Heap_Resize_block+0x1fc> <== NOT EXECUTED 200c680: 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; 200c684: a0 20 40 1a sub %g1, %i2, %l0 <== NOT EXECUTED uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 200c688: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 200c68c: 40 00 20 b9 call 2014970 <.urem> <== NOT EXECUTED 200c690: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Heap_Align_down(&free_block_size, page_size); if (free_block_size > 0) { 200c694: a0 a4 00 08 subcc %l0, %o0, %l0 <== NOT EXECUTED 200c698: 22 80 00 34 be,a 200c768 <_Heap_Resize_block+0x200> <== NOT EXECUTED 200c69c: 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; 200c6a0: 84 25 c0 10 sub %l7, %l0, %g2 <== NOT EXECUTED if (new_block_size < min_block_size) { 200c6a4: 80 a0 80 15 cmp %g2, %l5 <== NOT EXECUTED 200c6a8: 1a 80 00 08 bcc 200c6c8 <_Heap_Resize_block+0x160> <== NOT EXECUTED 200c6ac: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED uint32_t delta = min_block_size - new_block_size; 200c6b0: 82 25 40 02 sub %l5, %g2, %g1 <== NOT EXECUTED _HAssert(free_block_size >= delta); free_block_size -= delta; if (free_block_size == 0) { 200c6b4: a0 a4 00 01 subcc %l0, %g1, %l0 <== NOT EXECUTED 200c6b8: 22 80 00 2c be,a 200c768 <_Heap_Resize_block+0x200> <== NOT EXECUTED 200c6bc: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED ++stats->resizes; return HEAP_RESIZE_SUCCESSFUL; } new_block_size += delta; 200c6c0: 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) { 200c6c4: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 200c6c8: 12 80 00 15 bne 200c71c <_Heap_Resize_block+0x1b4> <== NOT EXECUTED 200c6cc: 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; 200c6d0: 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; 200c6d4: 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; 200c6d8: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED new_next_block->size = new_next_block_size | HEAP_PREV_USED; 200c6dc: 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 ); 200c6e0: 84 04 80 02 add %l2, %g2, %g2 <== NOT EXECUTED next_next_block->prev_size = new_next_block_size; 200c6e4: 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; 200c6e8: 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; 200c6ec: 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; 200c6f0: 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; 200c6f4: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Heap_Block *prev = block->prev; block = new_block; block->next = next; 200c6f8: c8 20 a0 08 st %g4, [ %g2 + 8 ] <== NOT EXECUTED 200c6fc: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED block->prev = prev; 200c700: da 20 a0 0c st %o5, [ %g2 + 0xc ] <== NOT EXECUTED 200c704: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED *avail_mem_size = new_next_block_size - HEAP_BLOCK_USED_OVERHEAD; 200c708: 86 00 ff fc add %g3, -4, %g3 <== NOT EXECUTED next->prev = prev->next = block; 200c70c: c4 21 20 0c st %g2, [ %g4 + 0xc ] <== NOT EXECUTED 200c710: c4 23 60 08 st %g2, [ %o5 + 8 ] <== NOT EXECUTED 200c714: 10 80 00 14 b 200c764 <_Heap_Resize_block+0x1fc> <== NOT EXECUTED 200c718: c6 27 00 00 st %g3, [ %i4 ] <== NOT EXECUTED } else if (free_block_size >= min_block_size) { 200c71c: 2a 80 00 13 bcs,a 200c768 <_Heap_Resize_block+0x200> <== NOT EXECUTED 200c720: 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; 200c724: 82 10 80 1b or %g2, %i3, %g1 <== NOT EXECUTED 200c728: 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; 200c72c: 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 ); 200c730: 92 04 80 02 add %l2, %g2, %o1 <== NOT EXECUTED 200c734: c2 22 60 04 st %g1, [ %o1 + 4 ] <== NOT EXECUTED ++stats->used_blocks; /* We have created used block */ 200c738: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 200c73c: 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 */ 200c740: 82 00 60 01 inc %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 200c744: 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 */ 200c748: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 200c74c: c4 26 20 50 st %g2, [ %i0 + 0x50 ] <== NOT EXECUTED _Heap_Free(the_heap, _Heap_User_area(next_block)); 200c750: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 200c754: 7f ff e9 7a call 2006d3c <_Heap_Free> <== NOT EXECUTED 200c758: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED *avail_mem_size = free_block_size - HEAP_BLOCK_USED_OVERHEAD; 200c75c: 82 04 3f fc add %l0, -4, %g1 <== NOT EXECUTED 200c760: c2 27 00 00 st %g1, [ %i4 ] <== NOT EXECUTED } } } ++stats->resizes; 200c764: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED 200c768: 84 10 20 00 clr %g2 <== NOT EXECUTED 200c76c: 82 00 60 01 inc %g1 <== NOT EXECUTED 200c770: 10 80 00 05 b 200c784 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 200c774: c2 26 20 54 st %g1, [ %i0 + 0x54 ] <== NOT EXECUTED return HEAP_RESIZE_SUCCESSFUL; 200c778: 10 80 00 03 b 200c784 <_Heap_Resize_block+0x21c> <== NOT EXECUTED 200c77c: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 200c780: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED } 200c784: 81 c7 e0 08 ret <== NOT EXECUTED 200c788: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED 0200c78c <_Heap_Size_of_user_area>: boolean _Heap_Size_of_user_area( Heap_Control *the_heap, void *starting_address, size_t *size ) { 200c78c: 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( 200c790: e2 06 20 20 ld [ %i0 + 0x20 ], %l1 <== NOT EXECUTED 200c794: 80 a6 40 11 cmp %i1, %l1 <== NOT EXECUTED 200c798: 0a 80 00 1f bcs 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c79c: e0 06 20 24 ld [ %i0 + 0x24 ], %l0 <== NOT EXECUTED 200c7a0: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 200c7a4: 18 80 00 1c bgu 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c7a8: 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); 200c7ac: d2 06 20 10 ld [ %i0 + 0x10 ], %o1 <== NOT EXECUTED 200c7b0: 40 00 20 70 call 2014970 <.urem> <== NOT EXECUTED 200c7b4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200c7b8: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 200c7bc: 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 ) ) 200c7c0: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 200c7c4: 0a 80 00 14 bcs 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c7c8: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 200c7cc: 18 80 00 12 bgu 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c7d0: 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 ); 200c7d4: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 200c7d8: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 200c7dc: 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 ( 200c7e0: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 200c7e4: 0a 80 00 0c bcs 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c7e8: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 200c7ec: 18 80 00 0a bgu 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c7f0: 01 00 00 00 nop <== NOT EXECUTED 200c7f4: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 200c7f8: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 200c7fc: 02 80 00 06 be 200c814 <_Heap_Size_of_user_area+0x88> <== NOT EXECUTED 200c800: 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 ) 200c804: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED 200c808: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 200c80c: 81 c7 e0 08 ret <== NOT EXECUTED 200c810: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED + HEAP_BLOCK_HEADER_OFFSET; return( TRUE ); } 200c814: 81 c7 e0 08 ret <== NOT EXECUTED 200c818: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 020065a4 <_IO_Manager_initialization>: void _IO_Manager_initialization( rtems_driver_address_table *driver_table, uint32_t drivers_in_table, uint32_t number_of_drivers ) { 20065a4: 9d e3 bf 98 save %sp, -104, %sp 20065a8: 23 00 80 5f sethi %hi(0x2017c00), %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 ) 20065ac: 80 a6 80 19 cmp %i2, %i1 20065b0: 18 80 00 06 bgu 20065c8 <_IO_Manager_initialization+0x24> 20065b4: 25 00 80 5f sethi %hi(0x2017c00), %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; 20065b8: f0 24 63 18 st %i0, [ %l1 + 0x318 ] _IO_Number_of_drivers = number_of_drivers; 20065bc: f2 24 a3 14 st %i1, [ %l2 + 0x314 ] 20065c0: 81 c7 e0 08 ret 20065c4: 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 *) 20065c8: 83 2e a0 03 sll %i2, 3, %g1 <== NOT EXECUTED 20065cc: a1 2e a0 05 sll %i2, 5, %l0 <== NOT EXECUTED 20065d0: a0 24 00 01 sub %l0, %g1, %l0 <== NOT EXECUTED 20065d4: 40 00 0f 10 call 200a214 <_Workspace_Allocate_or_fatal_error> <== NOT EXECUTED 20065d8: 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( 20065dc: 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; 20065e0: f4 24 a3 14 st %i2, [ %l2 + 0x314 ] <== 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 *) 20065e4: d0 24 63 18 st %o0, [ %l1 + 0x318 ] <== NOT EXECUTED _Workspace_Allocate_or_fatal_error( sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); _IO_Number_of_drivers = number_of_drivers; memset( 20065e8: 40 00 1e 9b call 200e054 <== NOT EXECUTED 20065ec: 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]; 20065f0: e2 04 63 18 ld [ %l1 + 0x318 ], %l1 <== NOT EXECUTED 20065f4: b4 10 20 00 clr %i2 <== NOT EXECUTED 20065f8: 10 80 00 07 b 2006614 <_IO_Manager_initialization+0x70> <== NOT EXECUTED 20065fc: a0 10 20 00 clr %l0 <== NOT EXECUTED 2006600: 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++ ) 2006604: b4 06 a0 01 inc %i2 <== NOT EXECUTED 2006608: a0 04 20 18 add %l0, 0x18, %l0 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 200660c: 40 00 1e 65 call 200dfa0 <== NOT EXECUTED 2006610: 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++ ) 2006614: 80 a6 80 19 cmp %i2, %i1 <== NOT EXECUTED 2006618: 12 bf ff fa bne 2006600 <_IO_Manager_initialization+0x5c> <== NOT EXECUTED 200661c: 90 04 00 11 add %l0, %l1, %o0 <== NOT EXECUTED 2006620: 81 c7 e0 08 ret <== NOT EXECUTED 2006624: 81 e8 00 00 restore <== NOT EXECUTED 0200718c <_ISR_Handler_initialization>: * * Output parameters: NONE */ void _ISR_Handler_initialization( void ) { 200718c: 9d e3 bf 98 save %sp, -104, %sp _ISR_Signals_to_thread_executing = FALSE; 2007190: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007194: c0 20 61 38 clr [ %g1 + 0x138 ] ! 2017d38 <_ISR_Signals_to_thread_executing> _ISR_Nest_level = 0; 2007198: 03 00 80 5f sethi %hi(0x2017c00), %g1 _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 200719c: 90 10 24 00 mov 0x400, %o0 void _ISR_Handler_initialization( void ) { _ISR_Signals_to_thread_executing = FALSE; _ISR_Nest_level = 0; 20071a0: c0 20 60 78 clr [ %g1 + 0x78 ] _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 20071a4: 40 00 0c 1c call 200a214 <_Workspace_Allocate_or_fatal_error> 20071a8: 01 00 00 00 nop _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 20071ac: 03 00 80 5e sethi %hi(0x2017800), %g1 20071b0: a0 10 63 c4 or %g1, 0x3c4, %l0 ! 2017bc4 <_CPU_Table> 20071b4: 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( 20071b8: 03 00 80 5f sethi %hi(0x2017c00), %g1 _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 20071bc: 80 a0 af ff cmp %g2, 0xfff 20071c0: 18 80 00 06 bgu 20071d8 <_ISR_Handler_initialization+0x4c> 20071c4: d0 20 60 54 st %o0, [ %g1 + 0x54 ] _Internal_error_Occurred( 20071c8: 90 10 20 00 clr %o0 <== NOT EXECUTED 20071cc: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 20071d0: 7f ff ff df call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 20071d4: 94 10 20 05 mov 5, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 20071d8: 40 00 0c 0f call 200a214 <_Workspace_Allocate_or_fatal_error> 20071dc: 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( 20071e0: c4 04 20 18 ld [ %l0 + 0x18 ], %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 20071e4: 03 00 80 5e sethi %hi(0x2017800), %g1 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 20071e8: 84 02 00 02 add %o0, %g2, %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 20071ec: d0 20 63 c0 st %o0, [ %g1 + 0x3c0 ] _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 20071f0: 03 00 80 5e sethi %hi(0x2017800), %g1 20071f4: c4 20 63 0c st %g2, [ %g1 + 0x30c ] ! 2017b0c <_CPU_Interrupt_stack_high> #if ( CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE ) _CPU_Install_interrupt_stack(); #endif } 20071f8: 81 c7 e0 08 ret 20071fc: 81 e8 00 00 restore 0200c82c <_Objects_Compare_name_string>: boolean _Objects_Compare_name_string( void *name_1, void *name_2, uint16_t length ) { 200c82c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !strncmp( name_1, name_2, length ) ) 200c830: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200c834: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 200c838: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200c83c: 40 00 09 02 call 200ec44 <== NOT EXECUTED 200c840: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED return TRUE; return FALSE; } 200c844: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 200c848: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 200c84c: 81 c7 e0 08 ret <== NOT EXECUTED 200c850: 81 e8 00 00 restore <== NOT EXECUTED 02015d4c <_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; 2015d4c: 10 80 00 05 b 2015d60 <_Objects_Copy_name_raw+0x14> <== NOT EXECUTED 2015d50: 95 32 a0 02 srl %o2, 2, %o2 <== NOT EXECUTED while ( tmp_length-- ) *destination_p++ = *source_p++; 2015d54: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 2015d58: c2 22 40 00 st %g1, [ %o1 ] <== NOT EXECUTED 2015d5c: 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-- ) 2015d60: 94 02 bf ff add %o2, -1, %o2 <== NOT EXECUTED 2015d64: 80 a2 bf ff cmp %o2, -1 <== NOT EXECUTED 2015d68: 32 bf ff fb bne,a 2015d54 <_Objects_Copy_name_raw+0x8> <== NOT EXECUTED 2015d6c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED *destination_p++ = *source_p++; } 2015d70: 81 c3 e0 08 retl <== NOT EXECUTED 2015d74: 01 00 00 00 nop 020072dc <_Objects_Extend_information>: */ void _Objects_Extend_information( Objects_Information *information ) { 20072dc: 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; 20072e0: 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 ) 20072e4: e0 16 20 10 lduh [ %i0 + 0x10 ], %l0 20072e8: 03 00 00 3f sethi %hi(0xfc00), %g1 20072ec: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 20072f0: a2 08 80 01 and %g2, %g1, %l1 20072f4: 80 a4 00 11 cmp %l0, %l1 20072f8: 3a 80 00 06 bcc,a 2007310 <_Objects_Extend_information+0x34> 20072fc: e4 06 20 18 ld [ %i0 + 0x18 ], %l2 2007300: ac 10 00 11 mov %l1, %l6 2007304: 90 10 20 00 clr %o0 2007308: 10 80 00 12 b 2007350 <_Objects_Extend_information+0x74> 200730c: b8 10 20 00 clr %i4 block_count = 0; else { block_count = information->maximum / information->allocation_size; 2007310: 90 10 00 10 mov %l0, %o0 2007314: 92 10 00 12 mov %l2, %o1 2007318: 40 00 34 ea call 20146c0 <.udiv> 200731c: ac 10 00 11 mov %l1, %l6 2007320: 10 80 00 09 b 2007344 <_Objects_Extend_information+0x68> 2007324: b8 10 20 00 clr %i4 for ( ; block < block_count; block++ ) { if ( information->object_blocks[ block ] == NULL ) 2007328: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 200732c: c2 00 40 02 ld [ %g1 + %g2 ], %g1 2007330: 80 a0 60 00 cmp %g1, 0 2007334: 02 80 00 08 be 2007354 <_Objects_Extend_information+0x78> 2007338: 80 a5 80 10 cmp %l6, %l0 break; else index_base += information->allocation_size; 200733c: 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++ ) { 2007340: b8 07 20 01 inc %i4 2007344: 80 a7 00 08 cmp %i4, %o0 2007348: 12 bf ff f8 bne 2007328 <_Objects_Extend_information+0x4c> 200734c: 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 ) { 2007350: 80 a5 80 10 cmp %l6, %l0 2007354: 2a 80 00 63 bcs,a 20074e0 <_Objects_Extend_information+0x204> 2007358: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 * Up the block count and maximum */ block_count++; maximum = information->maximum + information->allocation_size; 200735c: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 2007360: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 * Up the block count and maximum */ block_count++; maximum = information->maximum + information->allocation_size; 2007364: ae 04 00 01 add %l0, %g1, %l7 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 2007368: 80 a0 a0 00 cmp %g2, 0 /* * Up the block count and maximum */ block_count++; 200736c: a0 02 20 01 add %o0, 1, %l0 2007370: 82 05 c0 11 add %l7, %l1, %g1 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 2007374: 02 80 00 0b be 20073a0 <_Objects_Extend_information+0xc4> 2007378: 91 2c 20 01 sll %l0, 1, %o0 object_blocks = (void**) 200737c: 90 02 00 10 add %o0, %l0, %o0 2007380: 90 00 40 08 add %g1, %o0, %o0 2007384: 7f ff ff cf call 20072c0 <_Workspace_Allocate> 2007388: 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 ) 200738c: a4 92 20 00 orcc %o0, 0, %l2 2007390: 32 80 00 0a bne,a 20073b8 <_Objects_Extend_information+0xdc> 2007394: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 2007398: 81 c7 e0 08 ret <== NOT EXECUTED 200739c: 81 e8 00 00 restore <== NOT EXECUTED return; } else { object_blocks = (void**) 20073a0: 90 02 00 10 add %o0, %l0, %o0 20073a4: 90 00 40 08 add %g1, %o0, %o0 20073a8: 40 00 0b 9b call 200a214 <_Workspace_Allocate_or_fatal_error> 20073ac: 91 2a 20 02 sll %o0, 2, %o0 20073b0: a4 10 00 08 mov %o0, %l2 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 20073b4: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 /* * Take the block count down. Saves all the (block_count - 1) * in the copies. */ block_count--; 20073b8: ba 04 3f ff add %l0, -1, %i5 if ( information->maximum > minimum_index ) { 20073bc: 80 a0 40 11 cmp %g1, %l1 20073c0: 84 10 20 00 clr %g2 20073c4: 83 2c 20 02 sll %l0, 2, %g1 /* * Break the block into the various sections. * */ inactive_per_block = (uint32_t *) _Addresses_Add_offset( 20073c8: a8 04 80 01 add %l2, %g1, %l4 object_blocks, block_count * sizeof(void*) ); name_table = (Objects_Name *) _Addresses_Add_offset( 20073cc: aa 05 00 01 add %l4, %g1, %l5 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 20073d0: 08 80 00 19 bleu 2007434 <_Objects_Extend_information+0x158> 20073d4: 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, 20073d8: d2 06 20 3c ld [ %i0 + 0x3c ], %o1 20073dc: a1 2f 60 02 sll %i5, 2, %l0 20073e0: 90 10 00 12 mov %l2, %o0 20073e4: 40 00 1a ef call 200dfa0 20073e8: 94 10 00 10 mov %l0, %o2 information->object_blocks, block_count * sizeof(void*) ); memcpy( inactive_per_block, 20073ec: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 20073f0: 94 10 00 10 mov %l0, %o2 20073f4: 40 00 1a eb call 200dfa0 20073f8: 90 10 00 14 mov %l4, %o0 information->inactive_per_block, block_count * sizeof(uint32_t ) ); memcpy( name_table, 20073fc: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 2007400: 94 10 00 10 mov %l0, %o2 2007404: 40 00 1a e7 call 200dfa0 2007408: 90 10 00 15 mov %l5, %o0 information->name_table, block_count * sizeof(Objects_Name *) ); memcpy( local_table, 200740c: d4 16 20 10 lduh [ %i0 + 0x10 ], %o2 2007410: d2 06 20 20 ld [ %i0 + 0x20 ], %o1 2007414: 94 02 80 11 add %o2, %l1, %o2 2007418: 90 10 00 13 mov %l3, %o0 200741c: 40 00 1a e1 call 200dfa0 2007420: 95 2a a0 02 sll %o2, 2, %o2 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 2007424: 10 80 00 08 b 2007444 <_Objects_Extend_information+0x168> 2007428: 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++ ) { 200742c: 84 00 a0 01 inc %g2 local_table[ index ] = NULL; 2007430: 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++ ) { 2007434: 80 a0 80 11 cmp %g2, %l1 2007438: 32 bf ff fd bne,a 200742c <_Objects_Extend_information+0x150> 200743c: 83 28 a0 02 sll %g2, 2, %g1 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 2007440: 83 2f 60 02 sll %i5, 2, %g1 inactive_per_block[block_count] = 0; 2007444: c0 25 00 01 clr [ %l4 + %g1 ] /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 2007448: 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 ); 200744c: 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; 2007450: c0 25 40 01 clr [ %l5 + %g1 ] for ( index=index_base ; index < ( information->allocation_size + index_base ); 2007454: 83 2d a0 02 sll %l6, 2, %g1 2007458: 86 05 80 02 add %l6, %g2, %g3 200745c: 84 04 c0 01 add %l3, %g1, %g2 2007460: 10 80 00 04 b 2007470 <_Objects_Extend_information+0x194> 2007464: 82 10 00 16 mov %l6, %g1 index++ ) { local_table[ index ] = NULL; 2007468: 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++ ) { 200746c: 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 ); 2007470: 80 a0 40 03 cmp %g1, %g3 2007474: 0a bf ff fd bcs 2007468 <_Objects_Extend_information+0x18c> 2007478: 84 00 a0 04 add %g2, 4, %g2 index++ ) { local_table[ index ] = NULL; } _ISR_Disable( level ); 200747c: 7f ff ea 31 call 2001d40 2007480: 01 00 00 00 nop 2007484: 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( 2007488: d0 06 00 00 ld [ %i0 ], %o0 200748c: 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; 2007490: e8 26 20 38 st %l4, [ %i0 + 0x38 ] information->name_table = name_table; 2007494: ea 26 20 24 st %l5, [ %i0 + 0x24 ] information->local_table = local_table; 2007498: e6 26 20 20 st %l3, [ %i0 + 0x20 ] information->maximum = maximum; 200749c: ee 36 20 10 sth %l7, [ %i0 + 0x10 ] information->maximum_id = _Objects_Build_id( 20074a0: 97 2d e0 10 sll %l7, 0x10, %o3 local_table[ index ] = NULL; } _ISR_Disable( level ); old_tables = information->object_blocks; 20074a4: 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( 20074a8: 97 32 e0 10 srl %o3, 0x10, %o3 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; 20074ac: 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( 20074b0: 7f ff ff 7d call 20072a4 <_Objects_Build_id> 20074b4: 94 10 20 01 mov 1, %o2 20074b8: d0 26 20 0c st %o0, [ %i0 + 0xc ] information->the_class, _Objects_Local_node, information->maximum ); _ISR_Enable( level ); 20074bc: 7f ff ea 25 call 2001d50 20074c0: 90 10 00 10 mov %l0, %o0 if ( old_tables ) 20074c4: 80 a4 60 00 cmp %l1, 0 20074c8: 02 80 00 05 be 20074dc <_Objects_Extend_information+0x200> 20074cc: 11 00 80 5e sethi %hi(0x2017800), %o0 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 20074d0: 92 10 00 11 mov %l1, %o1 20074d4: 7f ff fe 1a call 2006d3c <_Heap_Free> 20074d8: 90 12 23 fc or %o0, 0x3fc, %o0 /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { 20074dc: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 20074e0: e2 06 20 3c ld [ %i0 + 0x3c ], %l1 20074e4: 80 a0 60 00 cmp %g1, 0 20074e8: a1 2f 20 02 sll %i4, 2, %l0 20074ec: d0 16 20 44 lduh [ %i0 + 0x44 ], %o0 20074f0: 02 80 00 11 be 2007534 <_Objects_Extend_information+0x258> 20074f4: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 information->object_blocks[ block ] = 20074f8: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 20074fc: 91 2a 20 10 sll %o0, 0x10, %o0 2007500: 91 32 20 10 srl %o0, 0x10, %o0 2007504: 40 00 34 35 call 20145d8 <.umul> 2007508: 90 02 00 01 add %o0, %g1, %o0 200750c: 7f ff ff 6d call 20072c0 <_Workspace_Allocate> 2007510: 01 00 00 00 nop _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 2007514: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { information->object_blocks[ block ] = 2007518: 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 ] ) 200751c: c2 00 40 10 ld [ %g1 + %l0 ], %g1 2007520: 80 a0 60 00 cmp %g1, 0 2007524: 32 80 00 0d bne,a 2007558 <_Objects_Extend_information+0x27c> 2007528: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 200752c: 81 c7 e0 08 ret <== NOT EXECUTED 2007530: 81 e8 00 00 restore <== NOT EXECUTED return; } else { information->object_blocks[ block ] = 2007534: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 2007538: 91 2a 20 10 sll %o0, 0x10, %o0 200753c: 91 32 20 10 srl %o0, 0x10, %o0 2007540: 40 00 34 26 call 20145d8 <.umul> 2007544: 90 02 00 01 add %o0, %g1, %o0 2007548: 40 00 0b 33 call 200a214 <_Workspace_Allocate_or_fatal_error> 200754c: 01 00 00 00 nop 2007550: d0 24 00 11 st %o0, [ %l0 + %l1 ] 2007554: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 2007558: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 200755c: 40 00 34 1f call 20145d8 <.umul> 2007560: 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( 2007564: a7 2f 20 02 sll %i4, 2, %l3 information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 2007568: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 200756c: c2 04 00 13 ld [ %l0 + %l3 ], %g1 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 2007570: d4 06 20 18 ld [ %i0 + 0x18 ], %o2 2007574: a2 02 00 01 add %o0, %g1, %l1 2007578: 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; 200757c: e2 20 80 13 st %l1, [ %g2 + %l3 ] /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 2007580: d2 04 00 13 ld [ %l0 + %l3 ], %o1 2007584: 90 07 bf ec add %fp, -20, %o0 2007588: 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 ) { 200758c: aa 10 00 08 mov %o0, %l5 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 2007590: 40 00 13 9e call 200c408 <_Chain_Initialize> 2007594: a8 06 20 28 add %i0, 0x28, %l4 2007598: 30 80 00 0c b,a 20075c8 <_Objects_Extend_information+0x2ec> index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 200759c: d2 16 20 04 lduh [ %i0 + 4 ], %o1 20075a0: d0 06 00 00 ld [ %i0 ], %o0 20075a4: 7f ff ff 40 call 20072a4 <_Objects_Build_id> 20075a8: a4 04 a0 01 inc %l2 20075ac: c2 16 20 44 lduh [ %i0 + 0x44 ], %g1 20075b0: d0 24 20 08 st %o0, [ %l0 + 8 ] information->the_class, _Objects_Local_node, index ); the_object->name = (void *) name_area; 20075b4: 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 ); 20075b8: 92 10 00 10 mov %l0, %o1 20075bc: a2 04 40 01 add %l1, %g1, %l1 20075c0: 7f ff fc 7b call 20067ac <_Chain_Append> 20075c4: 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 ) { 20075c8: 7f ff fc 85 call 20067dc <_Chain_Get> 20075cc: 90 10 00 15 mov %l5, %o0 the_object->id = _Objects_Build_id( 20075d0: 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 ) { 20075d4: a0 10 00 08 mov %o0, %l0 20075d8: 80 a2 20 00 cmp %o0, 0 20075dc: 12 bf ff f0 bne 200759c <_Objects_Extend_information+0x2c0> 20075e0: 94 10 20 01 mov 1, %o2 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 20075e4: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 20075e8: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 information->inactive += information->allocation_size; 20075ec: c6 16 20 34 lduh [ %i0 + 0x34 ], %g3 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 20075f0: c2 20 80 13 st %g1, [ %g2 + %l3 ] information->inactive += information->allocation_size; 20075f4: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 20075f8: 82 00 40 03 add %g1, %g3, %g1 20075fc: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 2007600: 81 c7 e0 08 ret 2007604: 81 e8 00 00 restore 02007698 <_Objects_Get_isr_disable>: Objects_Information *information, Objects_Id id, Objects_Locations *location, ISR_Level *level_p ) { 2007698: 9d e3 bf 98 save %sp, -104, %sp Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 200769c: c2 06 20 08 ld [ %i0 + 8 ], %g1 _ISR_Disable( level ); 20076a0: 7f ff e9 a8 call 2001d40 20076a4: b2 26 40 01 sub %i1, %g1, %i1 { Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 20076a8: b2 06 60 01 inc %i1 _ISR_Disable( level ); if ( information->maximum >= index ) { 20076ac: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 20076b0: 80 a0 40 19 cmp %g1, %i1 20076b4: 0a 80 00 11 bcs 20076f8 <_Objects_Get_isr_disable+0x60> 20076b8: 83 2e 60 02 sll %i1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 20076bc: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 20076c0: f0 00 80 01 ld [ %g2 + %g1 ], %i0 20076c4: 80 a6 20 00 cmp %i0, 0 20076c8: 02 80 00 06 be 20076e0 <_Objects_Get_isr_disable+0x48> 20076cc: 01 00 00 00 nop *location = OBJECTS_LOCAL; *level_p = level; 20076d0: 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; 20076d4: c0 26 80 00 clr [ %i2 ] 20076d8: 81 c7 e0 08 ret 20076dc: 81 e8 00 00 restore *level_p = level; return the_object; } _ISR_Enable( level ); 20076e0: 7f ff e9 9c call 2001d50 <== NOT EXECUTED 20076e4: 01 00 00 00 nop <== NOT EXECUTED *location = OBJECTS_ERROR; 20076e8: 82 10 20 02 mov 2, %g1 ! 2 <== NOT EXECUTED 20076ec: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 20076f0: 81 c7 e0 08 ret <== NOT EXECUTED 20076f4: 81 e8 00 00 restore <== NOT EXECUTED return NULL; } _ISR_Enable( level ); 20076f8: 7f ff e9 96 call 2001d50 20076fc: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; 2007700: 82 10 20 02 mov 2, %g1 2007704: c2 26 80 00 st %g1, [ %i2 ] _Objects_MP_Is_remote( information, id, location, &the_object ); return the_object; #else return NULL; #endif } 2007708: 81 c7 e0 08 ret 200770c: 81 e8 00 00 restore 02009164 <_Objects_Get_name_as_string>: char *_Objects_Get_name_as_string( Objects_Id id, size_t length, char *name ) { 2009164: 9d e3 bf 88 save %sp, -120, %sp 2009168: 92 10 00 18 mov %i0, %o1 uint32_t i; char lname[5]; Objects_Control *the_object; Objects_Locations location; if ( length == 0 ) 200916c: 80 a6 60 00 cmp %i1, 0 2009170: 02 80 00 43 be 200927c <_Objects_Get_name_as_string+0x118> 2009174: b0 10 00 1a mov %i2, %i0 return NULL; if ( name == NULL ) 2009178: 80 a6 a0 00 cmp %i2, 0 200917c: 02 80 00 3e be 2009274 <_Objects_Get_name_as_string+0x110> 2009180: 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 ]; 2009184: 03 00 80 90 sethi %hi(0x2024000), %g1 2009188: 84 08 a0 1c and %g2, 0x1c, %g2 200918c: 82 10 60 40 or %g1, 0x40, %g1 2009190: c4 00 40 02 ld [ %g1 + %g2 ], %g2 2009194: 83 32 60 1b srl %o1, 0x1b, %g1 2009198: 83 28 60 02 sll %g1, 2, %g1 200919c: e0 00 80 01 ld [ %g2 + %g1 ], %l0 return NULL; information = _Objects_Get_information( id ); if ( !information ) 20091a0: 80 a4 20 00 cmp %l0, 0 20091a4: 22 80 00 34 be,a 2009274 <_Objects_Get_name_as_string+0x110> 20091a8: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; the_object = _Objects_Get( information, id, &location ); 20091ac: 90 10 00 10 mov %l0, %o0 20091b0: 40 00 00 36 call 2009288 <_Objects_Get> 20091b4: 94 07 bf f4 add %fp, -12, %o2 switch ( location ) { 20091b8: c2 07 bf f4 ld [ %fp + -12 ], %g1 20091bc: 80 a0 60 00 cmp %g1, 0 20091c0: 32 80 00 2d bne,a 2009274 <_Objects_Get_name_as_string+0x110> 20091c4: b0 10 20 00 clr %i0 <== NOT EXECUTED case OBJECTS_ERROR: return NULL; case OBJECTS_LOCAL: if ( information->is_string ) { 20091c8: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 20091cc: 80 a0 60 00 cmp %g1, 0 20091d0: 12 80 00 0b bne 20091fc <_Objects_Get_name_as_string+0x98> 20091d4: 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; 20091d8: 83 32 20 18 srl %o0, 0x18, %g1 20091dc: c2 2f bf ef stb %g1, [ %fp + -17 ] lname[ 1 ] = (u32_name >> 16) & 0xff; 20091e0: 83 32 20 10 srl %o0, 0x10, %g1 lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; 20091e4: 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; 20091e8: c2 2f bf f0 stb %g1, [ %fp + -16 ] lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 20091ec: 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; 20091f0: 83 32 20 08 srl %o0, 8, %g1 lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 20091f4: 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; 20091f8: c2 2f bf f1 stb %g1, [ %fp + -15 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 20091fc: 84 10 00 18 mov %i0, %g2 2009200: 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; 2009204: 10 80 00 09 b 2009228 <_Objects_Get_name_as_string+0xc4> 2009208: 19 00 80 6e sethi %hi(0x201b800), %o4 200920c: c2 03 22 10 ld [ %o4 + 0x210 ], %g1 ! 201ba10 <__ctype_ptr> 2009210: c2 48 40 03 ldsb [ %g1 + %g3 ], %g1 2009214: 80 88 60 97 btst 0x97, %g1 2009218: 22 80 00 02 be,a 2009220 <_Objects_Get_name_as_string+0xbc> 200921c: 9a 10 20 2a mov 0x2a, %o5 <== NOT EXECUTED 2009220: 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++ ) { 2009224: 84 00 a0 01 inc %g2 2009228: 80 a1 00 19 cmp %g4, %i1 200922c: 02 80 00 07 be 2009248 <_Objects_Get_name_as_string+0xe4> 2009230: 82 02 00 04 add %o0, %g4, %g1 2009234: c6 48 7f ff ldsb [ %g1 + -1 ], %g3 2009238: 88 01 20 01 inc %g4 200923c: 80 a0 e0 00 cmp %g3, 0 2009240: 12 bf ff f3 bne 200920c <_Objects_Get_name_as_string+0xa8> 2009244: da 08 7f ff ldub [ %g1 + -1 ], %o5 *d = (!isprint(*s)) ? '*' : *s; } *d = '\0'; 2009248: 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 ) 200924c: 03 00 80 90 sethi %hi(0x2024000), %g1 2009250: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 20240e0 <_Thread_Dispatch_disable_level> 2009254: 84 00 bf ff add %g2, -1, %g2 2009258: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] 200925c: c2 00 60 e0 ld [ %g1 + 0xe0 ], %g1 2009260: 80 a0 60 00 cmp %g1, 0 2009264: 12 80 00 07 bne 2009280 <_Objects_Get_name_as_string+0x11c> 2009268: 01 00 00 00 nop _Thread_Dispatch(); 200926c: 40 00 04 cd call 200a5a0 <_Thread_Dispatch> 2009270: 01 00 00 00 nop 2009274: 81 c7 e0 08 ret 2009278: 81 e8 00 00 restore 200927c: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return name; } return NULL; /* unreachable path */ } 2009280: 81 c7 e0 08 ret <== NOT EXECUTED 2009284: 81 e8 00 00 restore <== NOT EXECUTED 02015d78 <_Objects_Get_next>: Objects_Information *information, Objects_Id id, Objects_Locations *location_p, Objects_Id *next_id_p ) { 2015d78: 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) 2015d7c: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 2015d80: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff <== NOT EXECUTED 2015d84: 80 8e 40 01 btst %i1, %g1 <== NOT EXECUTED 2015d88: 22 80 00 02 be,a 2015d90 <_Objects_Get_next+0x18> <== NOT EXECUTED 2015d8c: 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) 2015d90: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 2015d94: a0 10 63 ff or %g1, 0x3ff, %l0 ! ffff <== NOT EXECUTED 2015d98: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED 2015d9c: 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); 2015da0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2015da4: 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) 2015da8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2015dac: 18 80 00 0a bgu 2015dd4 <_Objects_Get_next+0x5c> <== NOT EXECUTED 2015db0: 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); 2015db4: 7f ff d8 6d call 200bf68 <_Objects_Get> <== NOT EXECUTED 2015db8: b2 06 60 01 inc %i1 <== NOT EXECUTED next_id++; } while (*location_p != OBJECTS_LOCAL); 2015dbc: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 2015dc0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015dc4: 32 bf ff f6 bne,a 2015d9c <_Objects_Get_next+0x24> <== NOT EXECUTED 2015dc8: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED *next_id_p = next_id; 2015dcc: 10 80 00 07 b 2015de8 <_Objects_Get_next+0x70> <== NOT EXECUTED 2015dd0: 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; 2015dd4: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 2015dd8: 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; 2015ddc: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 2015de0: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED 2015de4: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED return 0; } 2015de8: 81 c7 e0 08 ret <== NOT EXECUTED 2015dec: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 020149a8 <_Objects_Get_no_protection>: ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 20149a8: c2 02 20 08 ld [ %o0 + 8 ], %g1 if ( information->maximum >= index ) { 20149ac: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 20149b0: 92 22 40 01 sub %o1, %g1, %o1 20149b4: 82 02 60 01 add %o1, 1, %g1 if ( information->maximum >= index ) { 20149b8: 80 a0 80 01 cmp %g2, %g1 20149bc: 0a 80 00 0b bcs 20149e8 <_Objects_Get_no_protection+0x40> 20149c0: 83 28 60 02 sll %g1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 20149c4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 20149c8: d0 00 80 01 ld [ %g2 + %g1 ], %o0 20149cc: 80 a2 20 00 cmp %o0, 0 20149d0: 02 80 00 04 be 20149e0 <_Objects_Get_no_protection+0x38> 20149d4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_LOCAL; 20149d8: 81 c3 e0 08 retl 20149dc: c0 22 80 00 clr [ %o2 ] return the_object; } *location = OBJECTS_ERROR; 20149e0: 81 c3 e0 08 retl <== NOT EXECUTED 20149e4: c2 22 80 00 st %g1, [ %o2 ] <== NOT EXECUTED return NULL; } *location = OBJECTS_ERROR; 20149e8: 82 10 20 02 mov 2, %g1 20149ec: 90 10 20 00 clr %o0 /* * Not supported for multiprocessing */ return NULL; } 20149f0: 81 c3 e0 08 retl 20149f4: c2 22 80 00 st %g1, [ %o2 ] 02007974 <_Objects_Handler_initialization>: uint32_t node, uint32_t maximum_nodes, uint32_t maximum_global_objects ) { if ( node < 1 || node > maximum_nodes ) 2007974: 80 a2 20 00 cmp %o0, 0 2007978: 22 80 00 05 be,a 200798c <_Objects_Handler_initialization+0x18> 200797c: 90 10 20 00 clr %o0 <== NOT EXECUTED 2007980: 80 a2 00 09 cmp %o0, %o1 2007984: 08 80 00 07 bleu 20079a0 <_Objects_Handler_initialization+0x2c> 2007988: 90 10 20 00 clr %o0 _Internal_error_Occurred( 200798c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 2007990: 94 10 20 08 mov 8, %o2 <== NOT EXECUTED 2007994: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2007998: 7f ff fd ed call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 200799c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 20079a0: 81 c3 e0 08 retl 20079a4: 01 00 00 00 nop 02008db8 <_Objects_Id_to_name>: Objects_Name_or_id_lookup_errors _Objects_Id_to_name ( Objects_Id id, Objects_Name *name ) { 2008db8: 9d e3 bf 90 save %sp, -112, %sp 2008dbc: 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 ) 2008dc0: 80 a6 60 00 cmp %i1, 0 2008dc4: 02 80 00 26 be 2008e5c <_Objects_Id_to_name+0xa4> 2008dc8: 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); 2008dcc: 83 32 60 18 srl %o1, 0x18, %g1 2008dd0: 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 ) 2008dd4: 80 a0 60 04 cmp %g1, 4 2008dd8: 18 80 00 23 bgu 2008e64 <_Objects_Id_to_name+0xac> 2008ddc: 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 ]; 2008de0: 03 00 80 6f sethi %hi(0x201bc00), %g1 2008de4: 82 10 63 40 or %g1, 0x340, %g1 ! 201bf40 <_Objects_Information_table> 2008de8: c4 00 40 02 ld [ %g1 + %g2 ], %g2 2008dec: 83 32 60 1b srl %o1, 0x1b, %g1 2008df0: 83 28 60 02 sll %g1, 2, %g1 2008df4: d0 00 80 01 ld [ %g2 + %g1 ], %o0 if ( !information ) 2008df8: 80 a2 20 00 cmp %o0, 0 2008dfc: 02 80 00 18 be 2008e5c <_Objects_Id_to_name+0xa4> 2008e00: b0 10 20 03 mov 3, %i0 return OBJECTS_INVALID_ID; if ( information->is_string ) 2008e04: c2 02 20 40 ld [ %o0 + 0x40 ], %g1 2008e08: 80 a0 60 00 cmp %g1, 0 2008e0c: 12 80 00 17 bne 2008e68 <_Objects_Id_to_name+0xb0> 2008e10: 01 00 00 00 nop return OBJECTS_INVALID_ID; the_object = _Objects_Get( information, id, &ignored_location ); 2008e14: 7f ff ff c4 call 2008d24 <_Objects_Get> 2008e18: 94 07 bf f4 add %fp, -12, %o2 if ( !the_object ) 2008e1c: 80 a2 20 00 cmp %o0, 0 2008e20: 02 80 00 0f be 2008e5c <_Objects_Id_to_name+0xa4> 2008e24: b0 10 20 03 mov 3, %i0 return OBJECTS_INVALID_ID; *name = the_object->name; 2008e28: c2 02 20 0c ld [ %o0 + 0xc ], %g1 2008e2c: 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 ) 2008e30: 05 00 80 6f sethi %hi(0x201bc00), %g2 2008e34: c2 00 a3 e0 ld [ %g2 + 0x3e0 ], %g1 ! 201bfe0 <_Thread_Dispatch_disable_level> 2008e38: b0 10 20 00 clr %i0 2008e3c: 82 00 7f ff add %g1, -1, %g1 2008e40: c2 20 a3 e0 st %g1, [ %g2 + 0x3e0 ] 2008e44: c2 00 a3 e0 ld [ %g2 + 0x3e0 ], %g1 2008e48: 80 a0 60 00 cmp %g1, 0 2008e4c: 12 80 00 07 bne 2008e68 <_Objects_Id_to_name+0xb0> 2008e50: 01 00 00 00 nop _Thread_Dispatch(); 2008e54: 40 00 04 e7 call 200a1f0 <_Thread_Dispatch> 2008e58: 01 00 00 00 nop 2008e5c: 81 c7 e0 08 ret 2008e60: 81 e8 00 00 restore 2008e64: b0 10 20 03 mov 3, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL; } 2008e68: 81 c7 e0 08 ret <== NOT EXECUTED 2008e6c: 81 e8 00 00 restore <== NOT EXECUTED 020077a4 <_Objects_Initialize_information>: , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 20077a4: 9d e3 bf 98 save %sp, -104, %sp /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 20077a8: 03 00 80 5e sethi %hi(0x2017800), %g1 20077ac: 85 2e 60 02 sll %i1, 2, %g2 20077b0: 82 10 63 10 or %g1, 0x310, %g1 20077b4: c2 00 40 02 ld [ %g1 + %g2 ], %g1 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 20077b8: 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; 20077bc: f4 36 20 04 sth %i2, [ %i0 + 4 ] /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 20077c0: b5 2e a0 02 sll %i2, 2, %i2 20077c4: 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; 20077c8: 83 36 e0 1f srl %i3, 0x1f, %g1 20077cc: c2 26 20 14 st %g1, [ %i0 + 0x14 ] maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 20077d0: 03 20 00 00 sethi %hi(0x80000000), %g1 , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 20077d4: 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; 20077d8: 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; 20077dc: 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; 20077e0: 03 00 80 5e sethi %hi(0x2017800), %g1 20077e4: 82 10 60 08 or %g1, 8, %g1 ! 2017808 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 20077e8: 80 a0 00 1d cmp %g0, %i5 /* * Set the size of the object */ information->size = size; 20077ec: b9 2f 20 10 sll %i4, 0x10, %i4 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 20077f0: 86 40 20 00 addx %g0, 0, %g3 20077f4: 85 2e 60 18 sll %i1, 0x18, %g2 /* * Set the size of the object */ information->size = size; 20077f8: 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; 20077fc: c2 26 20 20 st %g1, [ %i0 + 0x20 ] /* * Set the size of the object */ information->size = size; 2007800: f8 26 20 1c st %i4, [ %i0 + 0x1c ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 2007804: 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; 2007808: f2 26 00 00 st %i1, [ %i0 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 200780c: 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; 2007810: c0 26 20 24 clr [ %i0 + 0x24 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 2007814: 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; 2007818: c0 26 20 38 clr [ %i0 + 0x38 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 200781c: 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; 2007820: c0 26 20 3c clr [ %i0 + 0x3c ] information->inactive = 0; 2007824: c0 36 20 34 clrh [ %i0 + 0x34 ] /* * The allocation unit is the maximum value */ information->allocation_size = maximum; 2007828: fa 26 20 18 st %i5, [ %i0 + 0x18 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 200782c: 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) ) 2007830: 80 8b e0 03 btst 3, %o7 2007834: 02 80 00 04 be 2007844 <_Objects_Initialize_information+0xa0> 2007838: 82 10 00 0f mov %o7, %g1 name_length = (name_length + OBJECTS_NAME_ALIGNMENT) & 200783c: 82 03 e0 04 add %o7, 4, %g1 <== NOT EXECUTED 2007840: 82 08 7f fc and %g1, -4, %g1 <== NOT EXECUTED ~(OBJECTS_NAME_ALIGNMENT-1); information->name_length = name_length; 2007844: 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); 2007848: 82 06 20 2c add %i0, 0x2c, %g1 the_chain->permanent_null = NULL; 200784c: 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); 2007850: c2 26 20 28 st %g1, [ %i0 + 0x28 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2007854: 82 06 20 28 add %i0, 0x28, %g1 /* * Initialize objects .. if there are any */ if ( maximum ) { 2007858: 80 a7 60 00 cmp %i5, 0 200785c: 02 80 00 05 be 2007870 <_Objects_Initialize_information+0xcc> 2007860: c2 26 20 30 st %g1, [ %i0 + 0x30 ] /* * Reset the maximum value. It will be updated when the information is * extended. */ information->maximum = 0; 2007864: 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 ); 2007868: 7f ff fe 9d call 20072dc <_Objects_Extend_information> 200786c: 81 e8 00 00 restore 2007870: 81 c7 e0 08 ret 2007874: 81 e8 00 00 restore 02007878 <_Objects_Name_to_id>: Objects_Information *information, Objects_Name name, uint32_t node, Objects_Id *id ) { 2007878: 9d e3 bf 98 save %sp, -104, %sp 200787c: 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 ) 2007880: 80 a6 e0 00 cmp %i3, 0 2007884: 02 80 00 3a be 200796c <_Objects_Name_to_id+0xf4> 2007888: b0 10 20 02 mov 2, %i0 return OBJECTS_INVALID_ADDRESS; if ( name == 0 ) 200788c: 80 a6 60 00 cmp %i1, 0 2007890: 02 80 00 2d be 2007944 <_Objects_Name_to_id+0xcc> 2007894: 01 00 00 00 nop return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 2007898: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 200789c: 80 a0 60 00 cmp %g1, 0 20078a0: 02 80 00 29 be 2007944 <_Objects_Name_to_id+0xcc> 20078a4: 80 a6 a0 00 cmp %i2, 0 20078a8: 22 80 00 2a be,a 2007950 <_Objects_Name_to_id+0xd8> 20078ac: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 20078b0: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 20078b4: 82 10 63 ff or %g1, 0x3ff, %g1 ! 7fffffff 20078b8: 80 a6 80 01 cmp %i2, %g1 20078bc: 02 80 00 24 be 200794c <_Objects_Name_to_id+0xd4> 20078c0: 80 a6 a0 01 cmp %i2, 1 20078c4: 22 80 00 23 be,a 2007950 <_Objects_Name_to_id+0xd8> 20078c8: 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++ ) { 20078cc: 81 c7 e0 08 ret 20078d0: 91 e8 20 01 restore %g0, 1, %o0 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 20078d4: a4 10 60 2c or %g1, 0x2c, %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 ) ) { 20078d8: 83 28 a0 10 sll %g2, 0x10, %g1 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 20078dc: 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 ) ) { 20078e0: 10 80 00 15 b 2007934 <_Objects_Name_to_id+0xbc> 20078e4: 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 ]; 20078e8: 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++ ) { 20078ec: a0 04 20 01 inc %l0 the_object = information->local_table[ index ]; 20078f0: f4 00 40 02 ld [ %g1 + %g2 ], %i2 if ( !the_object || !the_object->name ) 20078f4: 80 a6 a0 00 cmp %i2, 0 20078f8: 02 80 00 0f be 2007934 <_Objects_Name_to_id+0xbc> 20078fc: 90 10 00 19 mov %i1, %o0 2007900: d2 06 a0 0c ld [ %i2 + 0xc ], %o1 2007904: 80 a2 60 00 cmp %o1, 0 2007908: 02 80 00 0b be 2007934 <_Objects_Name_to_id+0xbc> 200790c: 94 10 00 18 mov %i0, %o2 continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 2007910: 9f c4 80 00 call %l2 2007914: 01 00 00 00 nop 2007918: 80 a2 20 00 cmp %o0, 0 200791c: 22 80 00 07 be,a 2007938 <_Objects_Name_to_id+0xc0> 2007920: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 *id = the_object->id; 2007924: c2 06 a0 08 ld [ %i2 + 8 ], %g1 2007928: c2 26 c0 00 st %g1, [ %i3 ] 200792c: 81 c7 e0 08 ret 2007930: 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++ ) { 2007934: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 2007938: 80 a4 00 01 cmp %l0, %g1 200793c: 08 bf ff eb bleu 20078e8 <_Objects_Name_to_id+0x70> 2007940: 85 2c 20 02 sll %l0, 2, %g2 2007944: 81 c7 e0 08 ret 2007948: 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; 200794c: 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; 2007950: c4 14 60 44 lduh [ %l1 + 0x44 ], %g2 if ( information->is_string ) compare_them = _Objects_Compare_name_string; 2007954: 80 a0 60 00 cmp %g1, 0 2007958: 03 00 80 32 sethi %hi(0x200c800), %g1 200795c: 02 bf ff df be 20078d8 <_Objects_Name_to_id+0x60> 2007960: a4 10 60 1c or %g1, 0x1c, %l2 ! 200c81c <_Objects_Compare_name_raw> if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 2007964: 10 bf ff dc b 20078d4 <_Objects_Name_to_id+0x5c> <== NOT EXECUTED 2007968: 03 00 80 32 sethi %hi(0x200c800), %g1 <== NOT EXECUTED return ( _Objects_MP_Global_name_search( information, name, node, id ) ); #else return OBJECTS_INVALID_NAME; #endif } 200796c: 81 c7 e0 08 ret <== NOT EXECUTED 2007970: 81 e8 00 00 restore <== NOT EXECUTED 020079a8 <_Objects_Shrink_information>: */ void _Objects_Shrink_information( Objects_Information *information ) { 20079a8: 9d e3 bf 98 save %sp, -104, %sp 20079ac: 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; 20079b0: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 20079b4: d0 16 20 10 lduh [ %i0 + 0x10 ], %o0 20079b8: 03 00 00 3f sethi %hi(0xfc00), %g1 20079bc: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 20079c0: 92 10 00 10 mov %l0, %o1 20079c4: a2 08 80 01 and %g2, %g1, %l1 20079c8: 40 00 33 3e call 20146c0 <.udiv> 20079cc: 90 22 00 11 sub %o0, %l1, %o0 20079d0: 86 10 20 00 clr %g3 20079d4: 10 80 00 33 b 2007aa0 <_Objects_Shrink_information+0xf8> 20079d8: a4 10 20 00 clr %l2 for ( block = 0; block < block_count; block++ ) { 20079dc: 86 00 e0 01 inc %g3 if ( information->inactive_per_block[ block ] == information->allocation_size ) { 20079e0: c2 00 40 12 ld [ %g1 + %l2 ], %g1 20079e4: 80 a0 40 10 cmp %g1, %l0 20079e8: 12 80 00 2c bne 2007a98 <_Objects_Shrink_information+0xf0> 20079ec: 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; 20079f0: e0 06 20 28 ld [ %i0 + 0x28 ], %l0 20079f4: 03 00 00 3f sethi %hi(0xfc00), %g1 20079f8: a6 10 63 ff or %g1, 0x3ff, %l3 ! ffff 20079fc: c2 04 20 08 ld [ %l0 + 8 ], %g1 2007a00: 84 08 40 13 and %g1, %l3, %g2 */ do { index = _Objects_Get_index( the_object->id ); if ((index >= index_base) && 2007a04: 80 a0 80 11 cmp %g2, %l1 2007a08: 2a 80 00 0c bcs,a 2007a38 <_Objects_Shrink_information+0x90> 2007a0c: e0 04 00 00 ld [ %l0 ], %l0 2007a10: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 2007a14: 82 04 40 01 add %l1, %g1, %g1 2007a18: 80 a0 80 01 cmp %g2, %g1 2007a1c: 1a 80 00 06 bcc 2007a34 <_Objects_Shrink_information+0x8c> 2007a20: 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 ); 2007a24: 40 00 12 6f call 200c3e0 <_Chain_Extract> 2007a28: 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 ) ); 2007a2c: 10 80 00 04 b 2007a3c <_Objects_Shrink_information+0x94> 2007a30: 80 a4 20 00 cmp %l0, 0 the_object = NULL; _Chain_Extract( &extract_me->Node ); } else { the_object = (Objects_Control *) the_object->Node.next; 2007a34: e0 04 00 00 ld [ %l0 ], %l0 } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 2007a38: 80 a4 20 00 cmp %l0, 0 2007a3c: 22 80 00 07 be,a 2007a58 <_Objects_Shrink_information+0xb0> 2007a40: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 2007a44: c2 04 00 00 ld [ %l0 ], %g1 2007a48: 80 a0 60 00 cmp %g1, 0 2007a4c: 32 bf ff ed bne,a 2007a00 <_Objects_Shrink_information+0x58> 2007a50: c2 04 20 08 ld [ %l0 + 8 ], %g1 2007a54: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 2007a58: 11 00 80 5e sethi %hi(0x2017800), %o0 2007a5c: d2 00 40 12 ld [ %g1 + %l2 ], %o1 2007a60: 7f ff fc b7 call 2006d3c <_Heap_Free> 2007a64: 90 12 23 fc or %o0, 0x3fc, %o0 */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 2007a68: 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; 2007a6c: c6 06 20 24 ld [ %i0 + 0x24 ], %g3 information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 2007a70: 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; 2007a74: c8 06 20 3c ld [ %i0 + 0x3c ], %g4 information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 2007a78: c2 16 20 34 lduh [ %i0 + 0x34 ], %g1 2007a7c: 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; 2007a80: c0 20 c0 12 clr [ %g3 + %l2 ] information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 2007a84: 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; 2007a88: c0 21 00 12 clr [ %g4 + %l2 ] information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 2007a8c: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 2007a90: 81 c7 e0 08 ret 2007a94: 81 e8 00 00 restore return; } index_base += information->allocation_size; 2007a98: 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++ ) { 2007a9c: a4 10 00 02 mov %g2, %l2 2007aa0: 80 a0 c0 08 cmp %g3, %o0 2007aa4: 32 bf ff ce bne,a 20079dc <_Objects_Shrink_information+0x34> 2007aa8: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 2007aac: 81 c7 e0 08 ret 2007ab0: 81 e8 00 00 restore 02007ae8 <_Protected_heap_Allocate>: void *_Protected_heap_Allocate( Heap_Control *the_heap, size_t size ) { 2007ae8: 9d e3 bf 98 save %sp, -104, %sp void *p; _RTEMS_Lock_allocator(); 2007aec: 7f ff e8 95 call 2001d40 2007af0: 01 00 00 00 nop 2007af4: a2 10 00 08 mov %o0, %l1 2007af8: 03 00 80 5e sethi %hi(0x2017800), %g1 2007afc: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2007b00: 80 a0 60 00 cmp %g1, 0 2007b04: 02 80 00 0b be 2007b30 <_Protected_heap_Allocate+0x48> 2007b08: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007b0c: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007b10: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> 2007b14: 80 a0 60 01 cmp %g1, 1 2007b18: 08 80 00 05 bleu 2007b2c <_Protected_heap_Allocate+0x44> 2007b1c: 90 10 20 00 clr %o0 2007b20: 92 10 20 00 clr %o1 <== NOT EXECUTED 2007b24: 7f ff fd 8a call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2007b28: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2007b2c: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007b30: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2017c88 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2007b34: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007b38: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2007b3c: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 2007b40: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 2007b44: 80 a0 60 00 cmp %g1, 0 2007b48: 22 80 00 33 be,a 2007c14 <_Protected_heap_Allocate+0x12c> 2007b4c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 2007b50: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2007b54: 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; 2007b58: 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; 2007b5c: 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; 2007b60: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2007b64: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2007b68: 80 a0 e0 02 cmp %g3, 2 2007b6c: 02 80 00 05 be 2007b80 <_Protected_heap_Allocate+0x98> 2007b70: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 2007b74: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2007b78: 32 80 00 06 bne,a 2007b90 <_Protected_heap_Allocate+0xa8> <== NOT EXECUTED 2007b7c: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 2007b80: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 2007b84: 82 00 60 01 inc %g1 2007b88: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 2007b8c: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 2007b90: 80 a0 60 03 cmp %g1, 3 2007b94: 22 80 00 03 be,a 2007ba0 <_Protected_heap_Allocate+0xb8> 2007b98: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 2007b9c: 30 80 00 2c b,a 2007c4c <_Protected_heap_Allocate+0x164> { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 2007ba0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 2007ba4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2007ba8: 12 80 00 03 bne 2007bb4 <_Protected_heap_Allocate+0xcc> <== NOT EXECUTED 2007bac: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 2007bb0: 30 80 00 27 b,a 2007c4c <_Protected_heap_Allocate+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 2007bb4: 08 80 00 10 bleu 2007bf4 <_Protected_heap_Allocate+0x10c> <== NOT EXECUTED 2007bb8: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2007bbc: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2007bc0: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2007bc4: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007bc8: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 2007bcc: 7f ff e8 61 call 2001d50 <== NOT EXECUTED 2007bd0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 2007bd4: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 2007bd8: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 2007bdc: 40 00 02 95 call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 2007be0: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 2007be4: 7f ff ff b4 call 2007ab4 <_Thread_Enable_dispatch> <== NOT EXECUTED 2007be8: 01 00 00 00 nop <== NOT EXECUTED p = _Heap_Allocate( the_heap, size ); 2007bec: 10 80 00 32 b 2007cb4 <_Protected_heap_Allocate+0x1cc> <== NOT EXECUTED 2007bf0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 2007bf4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 2007bf8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2007bfc: 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; 2007c00: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 2007c04: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2007c08: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2007c0c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 2007c10: 30 80 00 0f b,a 2007c4c <_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 ) ) { 2007c14: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2007c18: 32 80 00 13 bne,a 2007c64 <_Protected_heap_Allocate+0x17c> <== NOT EXECUTED 2007c1c: 21 00 80 5f sethi %hi(0x2017c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 2007c20: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2017c50 <_Workspace_Area+0x54> <== NOT EXECUTED 2007c24: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2007c28: 22 80 00 07 be,a 2007c44 <_Protected_heap_Allocate+0x15c> <== NOT EXECUTED 2007c2c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 2007c30: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2007c34: 32 80 00 0c bne,a 2007c64 <_Protected_heap_Allocate+0x17c> <== NOT EXECUTED 2007c38: 21 00 80 5f sethi %hi(0x2017c00), %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; 2007c3c: 10 80 00 08 b 2007c5c <_Protected_heap_Allocate+0x174> <== NOT EXECUTED 2007c40: 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++; 2007c44: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007c48: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 2007c4c: 7f ff e8 41 call 2001d50 2007c50: 90 10 00 11 mov %l1, %o0 2007c54: 10 80 00 18 b 2007cb4 <_Protected_heap_Allocate+0x1cc> 2007c58: 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; 2007c5c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 2007c60: 30 bf ff fb b,a 2007c4c <_Protected_heap_Allocate+0x164> <== NOT EXECUTED size_t size ) { void *p; _RTEMS_Lock_allocator(); 2007c64: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 2007c68: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007c6c: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 2007c70: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 2007c74: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2007c78: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2007c7c: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 2007c80: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007c84: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2007c88: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 2007c8c: 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; 2007c90: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 2007c94: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 2007c98: 7f ff e8 2e call 2001d50 <== NOT EXECUTED 2007c9c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2007ca0: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 2007ca4: 92 10 20 00 clr %o1 <== NOT EXECUTED 2007ca8: 7f ff fb 0f call 20068e4 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 2007cac: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED p = _Heap_Allocate( the_heap, size ); 2007cb0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2007cb4: 7f ff fb fb call 2006ca0 <_Heap_Allocate> 2007cb8: 92 10 00 19 mov %i1, %o1 2007cbc: 05 00 80 5e sethi %hi(0x2017800), %g2 2007cc0: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2007cc4: b0 10 00 08 mov %o0, %i0 2007cc8: 82 00 60 01 inc %g1 2007ccc: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 2007cd0: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007cd4: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2017c88 <_RTEMS_Allocator_Mutex> 2007cd8: 94 10 20 00 clr %o2 2007cdc: d2 02 20 08 ld [ %o0 + 8 ], %o1 2007ce0: 7f ff fb 23 call 200696c <_CORE_mutex_Surrender> 2007ce4: 90 02 20 10 add %o0, 0x10, %o0 2007ce8: 7f ff ff 73 call 2007ab4 <_Thread_Enable_dispatch> 2007cec: 01 00 00 00 nop return p; } 2007cf0: 81 c7 e0 08 ret 2007cf4: 81 e8 00 00 restore 02007d2c <_Protected_heap_Extend>: boolean _Protected_heap_Extend( Heap_Control *the_heap, void *starting_address, size_t size ) { 2007d2c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 2007d30: 7f ff e8 04 call 2001d40 <== NOT EXECUTED 2007d34: 01 00 00 00 nop <== NOT EXECUTED 2007d38: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 2007d3c: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 2007d40: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2007d44: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2007d48: 02 80 00 0b be 2007d74 <_Protected_heap_Extend+0x48> <== NOT EXECUTED 2007d4c: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007d50: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007d54: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> <== NOT EXECUTED 2007d58: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2007d5c: 08 80 00 05 bleu 2007d70 <_Protected_heap_Extend+0x44> <== NOT EXECUTED 2007d60: 90 10 20 00 clr %o0 <== NOT EXECUTED 2007d64: 92 10 20 00 clr %o1 <== NOT EXECUTED 2007d68: 7f ff fc f9 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2007d6c: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2007d70: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007d74: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2017c88 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2007d78: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007d7c: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2007d80: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 2007d84: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 2007d88: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2007d8c: 22 80 00 33 be,a 2007e58 <_Protected_heap_Extend+0x12c> <== NOT EXECUTED 2007d90: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 2007d94: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2007d98: 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; 2007d9c: 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; 2007da0: 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; 2007da4: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2007da8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2007dac: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 2007db0: 02 80 00 05 be 2007dc4 <_Protected_heap_Extend+0x98> <== NOT EXECUTED 2007db4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 2007db8: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2007dbc: 32 80 00 06 bne,a 2007dd4 <_Protected_heap_Extend+0xa8> <== NOT EXECUTED 2007dc0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 2007dc4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2007dc8: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007dcc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 2007dd0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 2007dd4: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 2007dd8: 22 80 00 03 be,a 2007de4 <_Protected_heap_Extend+0xb8> <== NOT EXECUTED 2007ddc: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 2007de0: 30 80 00 2c b,a 2007e90 <_Protected_heap_Extend+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 2007de4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 2007de8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2007dec: 12 80 00 03 bne 2007df8 <_Protected_heap_Extend+0xcc> <== NOT EXECUTED 2007df0: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 2007df4: 30 80 00 27 b,a 2007e90 <_Protected_heap_Extend+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 2007df8: 08 80 00 10 bleu 2007e38 <_Protected_heap_Extend+0x10c> <== NOT EXECUTED 2007dfc: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2007e00: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2007e04: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2007e08: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007e0c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 2007e10: 7f ff e7 d0 call 2001d50 <== NOT EXECUTED 2007e14: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 2007e18: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 2007e1c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 2007e20: 40 00 02 04 call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 2007e24: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 2007e28: 7f ff ff b4 call 2007cf8 <_Thread_Enable_dispatch> <== NOT EXECUTED 2007e2c: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 2007e30: 10 80 00 32 b 2007ef8 <_Protected_heap_Extend+0x1cc> <== NOT EXECUTED 2007e34: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 2007e38: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 2007e3c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2007e40: 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; 2007e44: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 2007e48: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2007e4c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2007e50: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 2007e54: 30 80 00 0f b,a 2007e90 <_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 ) ) { 2007e58: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2007e5c: 32 80 00 13 bne,a 2007ea8 <_Protected_heap_Extend+0x17c> <== NOT EXECUTED 2007e60: 21 00 80 5f sethi %hi(0x2017c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 2007e64: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2017c50 <_Workspace_Area+0x54> <== NOT EXECUTED 2007e68: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2007e6c: 22 80 00 07 be,a 2007e88 <_Protected_heap_Extend+0x15c> <== NOT EXECUTED 2007e70: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 2007e74: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2007e78: 12 80 00 0c bne 2007ea8 <_Protected_heap_Extend+0x17c> <== NOT EXECUTED 2007e7c: 21 00 80 5f sethi %hi(0x2017c00), %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; 2007e80: 10 80 00 08 b 2007ea0 <_Protected_heap_Extend+0x174> <== NOT EXECUTED 2007e84: 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++; 2007e88: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007e8c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 2007e90: 7f ff e7 b0 call 2001d50 <== NOT EXECUTED 2007e94: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2007e98: 10 80 00 18 b 2007ef8 <_Protected_heap_Extend+0x1cc> <== NOT EXECUTED 2007e9c: 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; 2007ea0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 2007ea4: 30 bf ff fb b,a 2007e90 <_Protected_heap_Extend+0x164> <== NOT EXECUTED ) { Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 2007ea8: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 2007eac: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007eb0: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 2007eb4: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 2007eb8: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2007ebc: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2007ec0: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 2007ec4: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007ec8: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2007ecc: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 2007ed0: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 2007ed4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 2007ed8: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 2007edc: 7f ff e7 9d call 2001d50 <== NOT EXECUTED 2007ee0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2007ee4: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 2007ee8: 92 10 20 00 clr %o1 <== NOT EXECUTED 2007eec: 7f ff fa 7e call 20068e4 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 2007ef0: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 2007ef4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2007ef8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2007efc: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 2007f00: 40 00 11 69 call 200c4a4 <_Heap_Extend> <== NOT EXECUTED 2007f04: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED 2007f08: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2007f0c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2007f10: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 2007f14: 82 00 60 01 inc %g1 <== NOT EXECUTED 2007f18: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 2007f1c: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007f20: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2017c88 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 2007f24: 94 10 20 00 clr %o2 <== NOT EXECUTED 2007f28: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 2007f2c: 7f ff fa 90 call 200696c <_CORE_mutex_Surrender> <== NOT EXECUTED 2007f30: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 2007f34: 7f ff ff 71 call 2007cf8 <_Thread_Enable_dispatch> <== NOT EXECUTED 2007f38: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_EXTEND_SUCCESSFUL); } 2007f3c: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 2007f40: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 2007f44: 81 c7 e0 08 ret <== NOT EXECUTED 2007f48: 81 e8 00 00 restore <== NOT EXECUTED 02007f80 <_Protected_heap_Free>: boolean _Protected_heap_Free( Heap_Control *the_heap, void *start_address ) { 2007f80: 9d e3 bf 98 save %sp, -104, %sp boolean status; _RTEMS_Lock_allocator(); 2007f84: 7f ff e7 6f call 2001d40 2007f88: 01 00 00 00 nop 2007f8c: a2 10 00 08 mov %o0, %l1 2007f90: 03 00 80 5e sethi %hi(0x2017800), %g1 2007f94: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2007f98: 80 a0 60 00 cmp %g1, 0 2007f9c: 02 80 00 0b be 2007fc8 <_Protected_heap_Free+0x48> 2007fa0: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007fa4: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007fa8: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> <== NOT EXECUTED 2007fac: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2007fb0: 08 80 00 05 bleu 2007fc4 <_Protected_heap_Free+0x44> <== NOT EXECUTED 2007fb4: 90 10 20 00 clr %o0 <== NOT EXECUTED 2007fb8: 92 10 20 00 clr %o1 <== NOT EXECUTED 2007fbc: 7f ff fc 64 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2007fc0: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2007fc4: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2007fc8: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2017c88 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2007fcc: 03 00 80 5f sethi %hi(0x2017c00), %g1 2007fd0: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2007fd4: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 2007fd8: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 2007fdc: 80 a0 60 00 cmp %g1, 0 2007fe0: 22 80 00 33 be,a 20080ac <_Protected_heap_Free+0x12c> 2007fe4: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 2007fe8: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2007fec: 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; 2007ff0: 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; 2007ff4: 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; 2007ff8: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2007ffc: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2008000: 80 a0 e0 02 cmp %g3, 2 2008004: 02 80 00 05 be 2008018 <_Protected_heap_Free+0x98> 2008008: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 200800c: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2008010: 32 80 00 06 bne,a 2008028 <_Protected_heap_Free+0xa8> <== NOT EXECUTED 2008014: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 2008018: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 200801c: 82 00 60 01 inc %g1 2008020: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 2008024: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 2008028: 80 a0 60 03 cmp %g1, 3 200802c: 22 80 00 03 be,a 2008038 <_Protected_heap_Free+0xb8> 2008030: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 2008034: 30 80 00 2c b,a 20080e4 <_Protected_heap_Free+0x164> { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 2008038: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 200803c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2008040: 12 80 00 03 bne 200804c <_Protected_heap_Free+0xcc> <== NOT EXECUTED 2008044: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 2008048: 30 80 00 27 b,a 20080e4 <_Protected_heap_Free+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 200804c: 08 80 00 10 bleu 200808c <_Protected_heap_Free+0x10c> <== NOT EXECUTED 2008050: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2008054: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2008058: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200805c: 82 00 60 01 inc %g1 <== NOT EXECUTED 2008060: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 2008064: 7f ff e7 3b call 2001d50 <== NOT EXECUTED 2008068: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 200806c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 2008070: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 2008074: 40 00 01 6f call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 2008078: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 200807c: 7f ff ff b4 call 2007f4c <_Thread_Enable_dispatch> <== NOT EXECUTED 2008080: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Free( the_heap, start_address ); 2008084: 10 80 00 32 b 200814c <_Protected_heap_Free+0x1cc> <== NOT EXECUTED 2008088: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 200808c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 2008090: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2008094: 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; 2008098: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 200809c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 20080a0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 20080a4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 20080a8: 30 80 00 0f b,a 20080e4 <_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 ) ) { 20080ac: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 20080b0: 32 80 00 13 bne,a 20080fc <_Protected_heap_Free+0x17c> <== NOT EXECUTED 20080b4: 21 00 80 5f sethi %hi(0x2017c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 20080b8: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2017c50 <_Workspace_Area+0x54> <== NOT EXECUTED 20080bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20080c0: 22 80 00 07 be,a 20080dc <_Protected_heap_Free+0x15c> <== NOT EXECUTED 20080c4: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 20080c8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20080cc: 32 80 00 0c bne,a 20080fc <_Protected_heap_Free+0x17c> <== NOT EXECUTED 20080d0: 21 00 80 5f sethi %hi(0x2017c00), %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; 20080d4: 10 80 00 08 b 20080f4 <_Protected_heap_Free+0x174> <== NOT EXECUTED 20080d8: 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++; 20080dc: 82 00 60 01 inc %g1 <== NOT EXECUTED 20080e0: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 20080e4: 7f ff e7 1b call 2001d50 20080e8: 90 10 00 11 mov %l1, %o0 20080ec: 10 80 00 18 b 200814c <_Protected_heap_Free+0x1cc> 20080f0: 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; 20080f4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 20080f8: 30 bf ff fb b,a 20080e4 <_Protected_heap_Free+0x164> <== NOT EXECUTED void *start_address ) { boolean status; _RTEMS_Lock_allocator(); 20080fc: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 2008100: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008104: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 2008108: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 200810c: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2008110: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2008114: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 2008118: 82 00 60 01 inc %g1 <== NOT EXECUTED 200811c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2008120: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 2008124: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 2008128: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 200812c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 2008130: 7f ff e7 08 call 2001d50 <== NOT EXECUTED 2008134: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2008138: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 200813c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2008140: 7f ff f9 e9 call 20068e4 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 2008144: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Free( the_heap, start_address ); 2008148: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200814c: 7f ff fa fc call 2006d3c <_Heap_Free> 2008150: 92 10 00 19 mov %i1, %o1 2008154: 05 00 80 5e sethi %hi(0x2017800), %g2 2008158: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 200815c: b0 10 00 08 mov %o0, %i0 2008160: 82 00 60 01 inc %g1 2008164: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 2008168: 03 00 80 5f sethi %hi(0x2017c00), %g1 200816c: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2017c88 <_RTEMS_Allocator_Mutex> 2008170: 94 10 20 00 clr %o2 2008174: d2 02 20 08 ld [ %o0 + 8 ], %o1 2008178: 7f ff f9 fd call 200696c <_CORE_mutex_Surrender> 200817c: 90 02 20 10 add %o0, 0x10, %o0 2008180: 7f ff ff 73 call 2007f4c <_Thread_Enable_dispatch> 2008184: 01 00 00 00 nop return status; } 2008188: 81 c7 e0 08 ret 200818c: 81 e8 00 00 restore 020081c4 <_Protected_heap_Get_block_size>: boolean _Protected_heap_Get_block_size( Heap_Control *the_heap, void *starting_address, size_t *size ) { 20081c4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED boolean status; _RTEMS_Lock_allocator(); 20081c8: 7f ff e6 de call 2001d40 <== NOT EXECUTED 20081cc: 01 00 00 00 nop <== NOT EXECUTED 20081d0: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 20081d4: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 20081d8: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20081dc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20081e0: 02 80 00 0b be 200820c <_Protected_heap_Get_block_size+0x48> <== NOT EXECUTED 20081e4: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 20081e8: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 20081ec: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> <== NOT EXECUTED 20081f0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20081f4: 08 80 00 05 bleu 2008208 <_Protected_heap_Get_block_size+0x44> <== NOT EXECUTED 20081f8: 90 10 20 00 clr %o0 <== NOT EXECUTED 20081fc: 92 10 20 00 clr %o1 <== NOT EXECUTED 2008200: 7f ff fb d3 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2008204: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2008208: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200820c: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2017c88 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2008210: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008214: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2008218: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 200821c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 2008220: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2008224: 22 80 00 33 be,a 20082f0 <_Protected_heap_Get_block_size+0x12c> <== NOT EXECUTED 2008228: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 200822c: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2008230: 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; 2008234: 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; 2008238: 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; 200823c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2008240: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2008244: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 2008248: 02 80 00 05 be 200825c <_Protected_heap_Get_block_size+0x98> <== NOT EXECUTED 200824c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 2008250: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2008254: 32 80 00 06 bne,a 200826c <_Protected_heap_Get_block_size+0xa8> <== NOT EXECUTED 2008258: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 200825c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2008260: 82 00 60 01 inc %g1 <== NOT EXECUTED 2008264: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 2008268: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 200826c: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 2008270: 22 80 00 03 be,a 200827c <_Protected_heap_Get_block_size+0xb8> <== NOT EXECUTED 2008274: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 2008278: 30 80 00 2c b,a 2008328 <_Protected_heap_Get_block_size+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 200827c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 2008280: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2008284: 12 80 00 03 bne 2008290 <_Protected_heap_Get_block_size+0xcc> <== NOT EXECUTED 2008288: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 200828c: 30 80 00 27 b,a 2008328 <_Protected_heap_Get_block_size+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 2008290: 08 80 00 10 bleu 20082d0 <_Protected_heap_Get_block_size+0x10c> <== NOT EXECUTED 2008294: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2008298: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 200829c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20082a0: 82 00 60 01 inc %g1 <== NOT EXECUTED 20082a4: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 20082a8: 7f ff e6 aa call 2001d50 <== NOT EXECUTED 20082ac: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 20082b0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 20082b4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 20082b8: 40 00 00 de call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 20082bc: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 20082c0: 7f ff ff b4 call 2008190 <_Thread_Enable_dispatch> <== NOT EXECUTED 20082c4: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 20082c8: 10 80 00 32 b 2008390 <_Protected_heap_Get_block_size+0x1cc> <== NOT EXECUTED 20082cc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 20082d0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 20082d4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 20082d8: 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; 20082dc: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 20082e0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 20082e4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 20082e8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 20082ec: 30 80 00 0f b,a 2008328 <_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 ) ) { 20082f0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 20082f4: 32 80 00 13 bne,a 2008340 <_Protected_heap_Get_block_size+0x17c> <== NOT EXECUTED 20082f8: 21 00 80 5f sethi %hi(0x2017c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 20082fc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2017c50 <_Workspace_Area+0x54> <== NOT EXECUTED 2008300: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2008304: 22 80 00 07 be,a 2008320 <_Protected_heap_Get_block_size+0x15c> <== NOT EXECUTED 2008308: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 200830c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2008310: 32 80 00 0c bne,a 2008340 <_Protected_heap_Get_block_size+0x17c> <== NOT EXECUTED 2008314: 21 00 80 5f sethi %hi(0x2017c00), %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; 2008318: 10 80 00 08 b 2008338 <_Protected_heap_Get_block_size+0x174> <== NOT EXECUTED 200831c: 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++; 2008320: 82 00 60 01 inc %g1 <== NOT EXECUTED 2008324: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 2008328: 7f ff e6 8a call 2001d50 <== NOT EXECUTED 200832c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2008330: 10 80 00 18 b 2008390 <_Protected_heap_Get_block_size+0x1cc> <== NOT EXECUTED 2008334: 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; 2008338: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 200833c: 30 bf ff fb b,a 2008328 <_Protected_heap_Get_block_size+0x164> <== NOT EXECUTED size_t *size ) { boolean status; _RTEMS_Lock_allocator(); 2008340: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 2008344: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008348: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 200834c: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 2008350: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2008354: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2008358: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 200835c: 82 00 60 01 inc %g1 <== NOT EXECUTED 2008360: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2008364: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 2008368: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 200836c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 2008370: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 2008374: 7f ff e6 77 call 2001d50 <== NOT EXECUTED 2008378: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200837c: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 2008380: 92 10 20 00 clr %o1 <== NOT EXECUTED 2008384: 7f ff f9 58 call 20068e4 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 2008388: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 200838c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2008390: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2008394: 40 00 10 fe call 200c78c <_Heap_Size_of_user_area> <== NOT EXECUTED 2008398: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 200839c: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 20083a0: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20083a4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 20083a8: 82 00 60 01 inc %g1 <== NOT EXECUTED 20083ac: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 20083b0: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 20083b4: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2017c88 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 20083b8: 94 10 20 00 clr %o2 <== NOT EXECUTED 20083bc: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 20083c0: 7f ff f9 6b call 200696c <_CORE_mutex_Surrender> <== NOT EXECUTED 20083c4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 20083c8: 7f ff ff 72 call 2008190 <_Thread_Enable_dispatch> <== NOT EXECUTED 20083cc: 01 00 00 00 nop <== NOT EXECUTED return status; } 20083d0: 81 c7 e0 08 ret <== NOT EXECUTED 20083d4: 81 e8 00 00 restore <== NOT EXECUTED 0200a954 <_Protected_heap_Get_free_information>: void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { 200a954: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _RTEMS_Lock_allocator(); 200a958: 7f ff e0 84 call 2002b68 <== NOT EXECUTED 200a95c: 01 00 00 00 nop <== NOT EXECUTED 200a960: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 200a964: 03 00 80 e0 sethi %hi(0x2038000), %g1 <== NOT EXECUTED 200a968: c2 00 63 30 ld [ %g1 + 0x330 ], %g1 ! 2038330 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200a96c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200a970: 02 80 00 0b be 200a99c <_Protected_heap_Get_free_information+0x48> <== NOT EXECUTED 200a974: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 200a978: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 200a97c: c2 00 61 10 ld [ %g1 + 0x110 ], %g1 ! 2038510 <_System_state_Current> <== NOT EXECUTED 200a980: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200a984: 08 80 00 05 bleu 200a998 <_Protected_heap_Get_free_information+0x44> <== NOT EXECUTED 200a988: 90 10 20 00 clr %o0 <== NOT EXECUTED 200a98c: 92 10 20 00 clr %o1 <== NOT EXECUTED 200a990: 7f ff fb 80 call 2009790 <_Internal_error_Occurred> <== NOT EXECUTED 200a994: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 200a998: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 200a99c: e0 00 60 08 ld [ %g1 + 8 ], %l0 ! 2038408 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 200a9a0: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 200a9a4: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 ! 2038410 <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 200a9a8: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 200a9ac: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 200a9b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200a9b4: 22 80 00 33 be,a 200aa80 <_Protected_heap_Get_free_information+0x12c> <== NOT EXECUTED 200a9b8: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 200a9bc: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 200a9c0: 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; 200a9c4: 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; 200a9c8: 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; 200a9cc: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 200a9d0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 200a9d4: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 200a9d8: 02 80 00 05 be 200a9ec <_Protected_heap_Get_free_information+0x98> <== NOT EXECUTED 200a9dc: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 200a9e0: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 200a9e4: 32 80 00 06 bne,a 200a9fc <_Protected_heap_Get_free_information+0xa8> <== NOT EXECUTED 200a9e8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 200a9ec: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 200a9f0: 82 00 60 01 inc %g1 <== NOT EXECUTED 200a9f4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 200a9f8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 200a9fc: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 200aa00: 22 80 00 03 be,a 200aa0c <_Protected_heap_Get_free_information+0xb8> <== NOT EXECUTED 200aa04: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 200aa08: 30 80 00 2c b,a 200aab8 <_Protected_heap_Get_free_information+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 200aa0c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 200aa10: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 200aa14: 12 80 00 03 bne 200aa20 <_Protected_heap_Get_free_information+0xcc> <== NOT EXECUTED 200aa18: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 200aa1c: 30 80 00 27 b,a 200aab8 <_Protected_heap_Get_free_information+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 200aa20: 08 80 00 10 bleu 200aa60 <_Protected_heap_Get_free_information+0x10c> <== NOT EXECUTED 200aa24: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200aa28: 05 00 80 e0 sethi %hi(0x2038000), %g2 <== NOT EXECUTED 200aa2c: c2 00 a3 30 ld [ %g2 + 0x330 ], %g1 ! 2038330 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200aa30: 82 00 60 01 inc %g1 <== NOT EXECUTED 200aa34: c2 20 a3 30 st %g1, [ %g2 + 0x330 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 200aa38: 7f ff e0 50 call 2002b78 <== NOT EXECUTED 200aa3c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 200aa40: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 200aa44: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 200aa48: 40 00 00 db call 200adb4 <_Thread_Change_priority> <== NOT EXECUTED 200aa4c: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 200aa50: 7f ff ff b4 call 200a920 <_Thread_Enable_dispatch> <== NOT EXECUTED 200aa54: 01 00 00 00 nop <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 200aa58: 10 80 00 32 b 200ab20 <_Protected_heap_Get_free_information+0x1cc> <== NOT EXECUTED 200aa5c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 200aa60: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 200aa64: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 200aa68: 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; 200aa6c: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 200aa70: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 200aa74: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 200aa78: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 200aa7c: 30 80 00 0f b,a 200aab8 <_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 ) ) { 200aa80: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 200aa84: 32 80 00 13 bne,a 200aad0 <_Protected_heap_Get_free_information+0x17c> <== NOT EXECUTED 200aa88: 21 00 80 e1 sethi %hi(0x2038400), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 200aa8c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2038450 <_API_Mutex_Information+0x10> <== NOT EXECUTED 200aa90: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200aa94: 22 80 00 07 be,a 200aab0 <_Protected_heap_Get_free_information+0x15c> <== NOT EXECUTED 200aa98: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 200aa9c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200aaa0: 32 80 00 0c bne,a 200aad0 <_Protected_heap_Get_free_information+0x17c> <== NOT EXECUTED 200aaa4: 21 00 80 e1 sethi %hi(0x2038400), %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; 200aaa8: 10 80 00 08 b 200aac8 <_Protected_heap_Get_free_information+0x174> <== NOT EXECUTED 200aaac: 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++; 200aab0: 82 00 60 01 inc %g1 <== NOT EXECUTED 200aab4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 200aab8: 7f ff e0 30 call 2002b78 <== NOT EXECUTED 200aabc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200aac0: 10 80 00 18 b 200ab20 <_Protected_heap_Get_free_information+0x1cc> <== NOT EXECUTED 200aac4: 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; 200aac8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 200aacc: 30 bf ff fb b,a 200aab8 <_Protected_heap_Get_free_information+0x164> <== NOT EXECUTED void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { _RTEMS_Lock_allocator(); 200aad0: c6 04 20 08 ld [ %l0 + 8 ], %g3 <== NOT EXECUTED 200aad4: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 200aad8: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 200aadc: c8 00 60 10 ld [ %g1 + 0x10 ], %g4 <== NOT EXECUTED 200aae0: 05 00 80 e0 sethi %hi(0x2038000), %g2 <== NOT EXECUTED 200aae4: c2 00 a3 30 ld [ %g2 + 0x330 ], %g1 ! 2038330 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200aae8: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 200aaec: 82 00 60 01 inc %g1 <== NOT EXECUTED 200aaf0: c2 20 a3 30 st %g1, [ %g2 + 0x330 ] <== NOT EXECUTED 200aaf4: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 200aaf8: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 200aafc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 200ab00: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 200ab04: 7f ff e0 1d call 2002b78 <== NOT EXECUTED 200ab08: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200ab0c: d0 04 20 08 ld [ %l0 + 8 ], %o0 <== NOT EXECUTED 200ab10: 92 10 20 00 clr %o1 <== NOT EXECUTED 200ab14: 7f ff f9 05 call 2008f28 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 200ab18: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 200ab1c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200ab20: 40 00 33 b0 call 20179e0 <_Heap_Get_free_information> <== NOT EXECUTED 200ab24: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200ab28: 05 00 80 e0 sethi %hi(0x2038000), %g2 <== NOT EXECUTED 200ab2c: c2 00 a3 30 ld [ %g2 + 0x330 ], %g1 ! 2038330 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200ab30: 82 00 60 01 inc %g1 <== NOT EXECUTED 200ab34: c2 20 a3 30 st %g1, [ %g2 + 0x330 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 200ab38: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 200ab3c: d0 00 60 08 ld [ %g1 + 8 ], %o0 ! 2038408 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 200ab40: 94 10 20 00 clr %o2 <== NOT EXECUTED 200ab44: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 200ab48: 7f ff f9 1a call 2008fb0 <_CORE_mutex_Surrender> <== NOT EXECUTED 200ab4c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 200ab50: 7f ff ff 74 call 200a920 <_Thread_Enable_dispatch> <== NOT EXECUTED 200ab54: 81 e8 00 00 restore <== NOT EXECUTED 200ab58: 01 00 00 00 nop 0200840c <_Protected_heap_Resize_block>: boolean _Protected_heap_Resize_block( Heap_Control *the_heap, void *starting_address, size_t size ) { 200840c: 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(); 2008410: 7f ff e6 4c call 2001d40 <== NOT EXECUTED 2008414: 01 00 00 00 nop <== NOT EXECUTED 2008418: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 200841c: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 2008420: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2008424: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2008428: 02 80 00 0b be 2008454 <_Protected_heap_Resize_block+0x48> <== NOT EXECUTED 200842c: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008430: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008434: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> <== NOT EXECUTED 2008438: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200843c: 08 80 00 05 bleu 2008450 <_Protected_heap_Resize_block+0x44> <== NOT EXECUTED 2008440: 90 10 20 00 clr %o0 <== NOT EXECUTED 2008444: 92 10 20 00 clr %o1 <== NOT EXECUTED 2008448: 7f ff fb 41 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 200844c: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2008450: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008454: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2017c88 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2008458: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200845c: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2008460: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 2008464: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 2008468: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200846c: 22 80 00 33 be,a 2008538 <_Protected_heap_Resize_block+0x12c> <== NOT EXECUTED 2008470: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 2008474: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2008478: 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; 200847c: 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; 2008480: 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; 2008484: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2008488: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 200848c: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 2008490: 02 80 00 05 be 20084a4 <_Protected_heap_Resize_block+0x98> <== NOT EXECUTED 2008494: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED 2008498: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 200849c: 32 80 00 06 bne,a 20084b4 <_Protected_heap_Resize_block+0xa8> <== NOT EXECUTED 20084a0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 20084a4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 20084a8: 82 00 60 01 inc %g1 <== NOT EXECUTED 20084ac: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 20084b0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 20084b4: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 20084b8: 22 80 00 03 be,a 20084c4 <_Protected_heap_Resize_block+0xb8> <== NOT EXECUTED 20084bc: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 20084c0: 30 80 00 2c b,a 2008570 <_Protected_heap_Resize_block+0x164> <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 20084c4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 20084c8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 20084cc: 12 80 00 03 bne 20084d8 <_Protected_heap_Resize_block+0xcc> <== NOT EXECUTED 20084d0: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 20084d4: 30 80 00 27 b,a 2008570 <_Protected_heap_Resize_block+0x164> <== NOT EXECUTED return 0; } if ( current > ceiling ) { 20084d8: 08 80 00 10 bleu 2008518 <_Protected_heap_Resize_block+0x10c> <== NOT EXECUTED 20084dc: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 20084e0: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 20084e4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20084e8: 82 00 60 01 inc %g1 <== NOT EXECUTED 20084ec: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 20084f0: 7f ff e6 18 call 2001d50 <== NOT EXECUTED 20084f4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 20084f8: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 20084fc: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 2008500: 40 00 00 4c call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 2008504: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 2008508: 7f ff ff b4 call 20083d8 <_Thread_Enable_dispatch> <== NOT EXECUTED 200850c: 01 00 00 00 nop <== NOT EXECUTED status = _Heap_Resize_block( 2008510: 10 80 00 32 b 20085d8 <_Protected_heap_Resize_block+0x1cc> <== NOT EXECUTED 2008514: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 2008518: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 200851c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2008520: 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; 2008524: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 2008528: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 200852c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2008530: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 2008534: 30 80 00 0f b,a 2008570 <_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 ) ) { 2008538: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 200853c: 32 80 00 13 bne,a 2008588 <_Protected_heap_Resize_block+0x17c> <== NOT EXECUTED 2008540: 21 00 80 5f sethi %hi(0x2017c00), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 2008544: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2017c50 <_Workspace_Area+0x54> <== NOT EXECUTED 2008548: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200854c: 22 80 00 07 be,a 2008568 <_Protected_heap_Resize_block+0x15c> <== NOT EXECUTED 2008550: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 2008554: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2008558: 12 80 00 0c bne 2008588 <_Protected_heap_Resize_block+0x17c> <== NOT EXECUTED 200855c: 21 00 80 5f sethi %hi(0x2017c00), %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; 2008560: 10 80 00 08 b 2008580 <_Protected_heap_Resize_block+0x174> <== NOT EXECUTED 2008564: 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++; 2008568: 82 00 60 01 inc %g1 <== NOT EXECUTED 200856c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 2008570: 7f ff e5 f8 call 2001d50 <== NOT EXECUTED 2008574: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2008578: 10 80 00 18 b 20085d8 <_Protected_heap_Resize_block+0x1cc> <== NOT EXECUTED 200857c: 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; 2008580: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 2008584: 30 bf ff fb b,a 2008570 <_Protected_heap_Resize_block+0x164> <== NOT EXECUTED { Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); 2008588: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 200858c: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008590: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 2008594: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 2008598: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 200859c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20085a0: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 20085a4: 82 00 60 01 inc %g1 <== NOT EXECUTED 20085a8: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 20085ac: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 20085b0: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 20085b4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 20085b8: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 20085bc: 7f ff e5 e5 call 2001d50 <== NOT EXECUTED 20085c0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20085c4: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 20085c8: 92 10 20 00 clr %o1 <== NOT EXECUTED 20085cc: 7f ff f8 c6 call 20068e4 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 20085d0: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Resize_block( 20085d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20085d8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 20085dc: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 20085e0: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED 20085e4: 40 00 0f e1 call 200c568 <_Heap_Resize_block> <== NOT EXECUTED 20085e8: 98 07 bf f0 add %fp, -16, %o4 <== NOT EXECUTED 20085ec: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 20085f0: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20085f4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 20085f8: 82 00 60 01 inc %g1 <== NOT EXECUTED 20085fc: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED the_heap, starting_address, size, &old_mem_size, &avail_mem_size ); _RTEMS_Unlock_allocator(); 2008600: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008604: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2017c88 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 2008608: 94 10 20 00 clr %o2 <== NOT EXECUTED 200860c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 2008610: 7f ff f8 d7 call 200696c <_CORE_mutex_Surrender> <== NOT EXECUTED 2008614: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 2008618: 7f ff ff 70 call 20083d8 <_Thread_Enable_dispatch> <== NOT EXECUTED 200861c: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_RESIZE_SUCCESSFUL); } 2008620: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 2008624: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 2008628: 81 c7 e0 08 ret <== NOT EXECUTED 200862c: 81 e8 00 00 restore <== NOT EXECUTED 0200c248 <_RTEMS_tasks_Delete_extension>: User_extensions_routine _RTEMS_tasks_Delete_extension( Thread_Control *executing, Thread_Control *deleted ) { 200c248: 9d e3 bf 98 save %sp, -104, %sp /* * Free per task variable memory */ tvp = deleted->task_variables; 200c24c: e0 06 61 80 ld [ %i1 + 0x180 ], %l0 deleted->task_variables = NULL; while (tvp) { next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { 200c250: 25 00 80 5f sethi %hi(0x2017c00), %l2 /* * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; 200c254: 10 80 00 18 b 200c2b4 <_RTEMS_tasks_Delete_extension+0x6c> 200c258: c0 26 61 80 clr [ %i1 + 0x180 ] 200c25c: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 <== NOT EXECUTED while (tvp) { next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { 200c260: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 200c264: 12 80 00 0c bne 200c294 <_RTEMS_tasks_Delete_extension+0x4c> <== NOT EXECUTED 200c268: e2 04 00 00 ld [ %l0 ], %l1 <== NOT EXECUTED if (tvp->dtor) 200c26c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 200c270: 22 80 00 06 be,a 200c288 <_RTEMS_tasks_Delete_extension+0x40> <== NOT EXECUTED 200c274: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED (*tvp->dtor)(*tvp->ptr); 200c278: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 200c27c: 9f c0 80 00 call %g2 <== NOT EXECUTED 200c280: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 200c284: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 200c288: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 200c28c: 10 80 00 07 b 200c2a8 <_RTEMS_tasks_Delete_extension+0x60> <== NOT EXECUTED 200c290: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED } else { if (tvp->dtor) 200c294: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 200c298: 02 80 00 05 be 200c2ac <_RTEMS_tasks_Delete_extension+0x64> <== NOT EXECUTED 200c29c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 200c2a0: 9f c0 80 00 call %g2 <== NOT EXECUTED 200c2a4: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED } _Workspace_Free( tvp ); 200c2a8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200c2ac: 7f ff ff e0 call 200c22c <_Workspace_Free> <== NOT EXECUTED 200c2b0: a0 10 00 11 mov %l1, %l0 <== NOT EXECUTED * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; while (tvp) { 200c2b4: 80 a4 20 00 cmp %l0, 0 200c2b8: 12 bf ff e9 bne 200c25c <_RTEMS_tasks_Delete_extension+0x14> 200c2bc: c2 04 a0 90 ld [ %l2 + 0x90 ], %g1 /* * Free API specific memory */ (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] ); 200c2c0: 7f ff ff db call 200c22c <_Workspace_Free> 200c2c4: d0 06 61 70 ld [ %i1 + 0x170 ], %o0 deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL; 200c2c8: c0 26 61 70 clr [ %i1 + 0x170 ] } 200c2cc: 81 c7 e0 08 ret 200c2d0: 81 e8 00 00 restore 02006068 <_RTEMS_tasks_Initialize_user_tasks_body>: * * Output parameters: NONE */ void _RTEMS_tasks_Initialize_user_tasks_body( void ) { 2006068: 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; 200606c: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006070: c2 00 60 74 ld [ %g1 + 0x74 ], %g1 ! 2017c74 <_Configuration_Table> 2006074: 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; 2006078: d0 00 60 28 ld [ %g1 + 0x28 ], %o0 maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) 200607c: 80 a2 20 00 cmp %o0, 0 2006080: 02 80 00 25 be 2006114 <_RTEMS_tasks_Initialize_user_tasks_body+0xac> 2006084: e4 00 60 24 ld [ %g1 + 0x24 ], %l2 2006088: 80 a4 a0 00 cmp %l2, 0 200608c: 02 80 00 22 be 2006114 <_RTEMS_tasks_Initialize_user_tasks_body+0xac> 2006090: a0 10 00 08 mov %o0, %l0 return; 2006094: a2 10 20 00 clr %l1 for ( index=0 ; index < maximum ; index++ ) { return_value = rtems_task_create( 2006098: 10 80 00 1c b 2006108 <_RTEMS_tasks_Initialize_user_tasks_body+0xa0> 200609c: a6 07 bf f4 add %fp, -12, %l3 20060a0: d6 04 20 14 ld [ %l0 + 0x14 ], %o3 20060a4: d8 04 20 0c ld [ %l0 + 0xc ], %o4 20060a8: d2 04 20 08 ld [ %l0 + 8 ], %o1 20060ac: d4 04 20 04 ld [ %l0 + 4 ], %o2 20060b0: d0 04 00 00 ld [ %l0 ], %o0 20060b4: 7f ff ff 35 call 2005d88 20060b8: a2 04 60 01 inc %l1 user_tasks[ index ].mode_set, user_tasks[ index ].attribute_set, &id ); if ( !rtems_is_status_successful( return_value ) ) 20060bc: 80 a2 20 00 cmp %o0, 0 20060c0: 22 80 00 07 be,a 20060dc <_RTEMS_tasks_Initialize_user_tasks_body+0x74> 20060c4: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 20060c8: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 20060cc: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 20060d0: 40 00 04 1f call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 20060d4: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED return_value = rtems_task_start( 20060d8: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 20060dc: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 20060e0: d0 07 bf f4 ld [ %fp + -12 ], %o0 20060e4: 40 00 00 1b call 2006150 20060e8: 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 ) ) 20060ec: 80 a2 20 00 cmp %o0, 0 20060f0: 02 80 00 07 be 200610c <_RTEMS_tasks_Initialize_user_tasks_body+0xa4> 20060f4: 80 a4 40 12 cmp %l1, %l2 _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 20060f8: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 20060fc: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 2006100: 40 00 04 13 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2006104: 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++ ) { 2006108: 80 a4 40 12 cmp %l1, %l2 200610c: 12 bf ff e5 bne 20060a0 <_RTEMS_tasks_Initialize_user_tasks_body+0x38> 2006110: 9a 10 00 13 mov %l3, %o5 2006114: 81 c7 e0 08 ret 2006118: 81 e8 00 00 restore 02006c7c <_Rate_monotonic_Timeout>: void _Rate_monotonic_Timeout( Objects_Id id, void *ignored ) { 2006c7c: 9d e3 bf 90 save %sp, -112, %sp 2006c80: 11 00 80 70 sethi %hi(0x201c000), %o0 2006c84: 92 10 00 18 mov %i0, %o1 2006c88: 90 12 21 04 or %o0, 0x104, %o0 2006c8c: 40 00 09 37 call 2009168 <_Objects_Get> 2006c90: 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 ) { 2006c94: c2 07 bf f4 ld [ %fp + -12 ], %g1 2006c98: 80 a0 60 00 cmp %g1, 0 2006c9c: 12 80 00 20 bne 2006d1c <_Rate_monotonic_Timeout+0xa0> 2006ca0: b0 10 00 08 mov %o0, %i0 case OBJECTS_REMOTE: /* impossible */ case OBJECTS_ERROR: break; case OBJECTS_LOCAL: the_thread = the_period->owner; 2006ca4: d0 02 20 50 ld [ %o0 + 0x50 ], %o0 if ( _States_Is_waiting_for_period( the_thread->current_state ) && 2006ca8: 03 00 00 10 sethi %hi(0x4000), %g1 2006cac: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 2006cb0: 80 88 80 01 btst %g2, %g1 2006cb4: 22 80 00 0c be,a 2006ce4 <_Rate_monotonic_Timeout+0x68> 2006cb8: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 2006cbc: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 2006cc0: c2 06 20 08 ld [ %i0 + 8 ], %g1 2006cc4: 80 a0 80 01 cmp %g2, %g1 2006cc8: 32 80 00 07 bne,a 2006ce4 <_Rate_monotonic_Timeout+0x68> 2006ccc: 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 ); 2006cd0: 13 04 00 ff sethi %hi(0x1003fc00), %o1 2006cd4: 40 00 0d 5f call 200a250 <_Thread_Clear_state> 2006cd8: 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 ); 2006cdc: 10 80 00 08 b 2006cfc <_Rate_monotonic_Timeout+0x80> 2006ce0: d2 06 20 4c ld [ %i0 + 0x4c ], %o1 } else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) { 2006ce4: 80 a0 60 01 cmp %g1, 1 2006ce8: 12 80 00 08 bne 2006d08 <_Rate_monotonic_Timeout+0x8c> 2006cec: 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 ); 2006cf0: 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; 2006cf4: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 2006cf8: c2 26 20 38 st %g1, [ %i0 + 0x38 ] <== NOT EXECUTED _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); 2006cfc: 7f ff ff d8 call 2006c5c <_Watchdog_Insert_ticks> 2006d00: 90 06 20 10 add %i0, 0x10, %o0 2006d04: 30 80 00 02 b,a 2006d0c <_Rate_monotonic_Timeout+0x90> } else the_period->state = RATE_MONOTONIC_EXPIRED; 2006d08: 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; 2006d0c: 05 00 80 70 sethi %hi(0x201c000), %g2 2006d10: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 201c2a0 <_Thread_Dispatch_disable_level> 2006d14: 82 00 7f ff add %g1, -1, %g1 2006d18: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] 2006d1c: 81 c7 e0 08 ret 2006d20: 81 e8 00 00 restore 02008550 <_TOD_Set>: */ void _TOD_Set( const struct timespec *time ) { 2008550: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2008554: 03 00 80 90 sethi %hi(0x2024000), %g1 2008558: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 20240e0 <_Thread_Dispatch_disable_level> 200855c: 84 00 a0 01 inc %g2 2008560: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] _Thread_Disable_dispatch(); _TOD_Deactivate(); if ( time->tv_sec < _TOD_Seconds_since_epoch ) 2008564: 03 00 80 90 sethi %hi(0x2024000), %g1 2008568: d2 06 00 00 ld [ %i0 ], %o1 200856c: c2 00 61 9c ld [ %g1 + 0x19c ], %g1 2008570: 80 a2 40 01 cmp %o1, %g1 2008574: 36 80 00 05 bge,a 2008588 <_TOD_Set+0x38> 2008578: 92 22 40 01 sub %o1, %g1, %o1 _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, 200857c: 92 20 40 09 sub %g1, %o1, %o1 2008580: 10 80 00 03 b 200858c <_TOD_Set+0x3c> 2008584: 90 10 20 01 mov 1, %o0 _TOD_Seconds_since_epoch - time->tv_sec ); else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, 2008588: 90 10 20 00 clr %o0 200858c: 7f ff ff e9 call 2008530 <_Watchdog_Adjust_seconds> 2008590: 01 00 00 00 nop time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 2008594: c4 06 00 00 ld [ %i0 ], %g2 2008598: 03 00 80 90 sethi %hi(0x2024000), %g1 200859c: c4 20 61 9c st %g2, [ %g1 + 0x19c ] ! 202419c <_TOD_Now> 20085a0: c4 06 20 04 ld [ %i0 + 4 ], %g2 20085a4: 82 10 61 9c or %g1, 0x19c, %g1 20085a8: c4 20 60 04 st %g2, [ %g1 + 4 ] _TOD_Is_set = TRUE; 20085ac: 84 10 20 01 mov 1, %g2 20085b0: 03 00 80 90 sethi %hi(0x2024000), %g1 20085b4: c4 20 61 1c st %g2, [ %g1 + 0x11c ] ! 202411c <_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 ) 20085b8: 05 00 80 90 sethi %hi(0x2024000), %g2 20085bc: c2 00 a0 e0 ld [ %g2 + 0xe0 ], %g1 ! 20240e0 <_Thread_Dispatch_disable_level> 20085c0: 82 00 7f ff add %g1, -1, %g1 20085c4: c2 20 a0 e0 st %g1, [ %g2 + 0xe0 ] 20085c8: c2 00 a0 e0 ld [ %g2 + 0xe0 ], %g1 20085cc: 80 a0 60 00 cmp %g1, 0 20085d0: 12 80 00 04 bne 20085e0 <_TOD_Set+0x90> 20085d4: 01 00 00 00 nop _Thread_Dispatch(); 20085d8: 40 00 07 f2 call 200a5a0 <_Thread_Dispatch> <== NOT EXECUTED 20085dc: 81 e8 00 00 restore <== NOT EXECUTED 20085e0: 81 c7 e0 08 ret 20085e4: 81 e8 00 00 restore 020089b4 <_Thread_Create_idle>: */ const char *_Thread_Idle_name = "IDLE"; void _Thread_Create_idle( void ) { 20089b4: 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 ); 20089b8: 11 00 80 5f sethi %hi(0x2017c00), %o0 20089bc: 7f ff fa 11 call 2007200 <_Objects_Allocate> 20089c0: 90 12 21 40 or %o0, 0x140, %o0 ! 2017d40 <_Thread_Internal_information> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 20089c4: 03 00 80 5e sethi %hi(0x2017800), %g1 20089c8: c4 00 63 d0 ld [ %g1 + 0x3d0 ], %g2 ! 2017bd0 <_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(); 20089cc: 03 00 80 5f sethi %hi(0x2017c00), %g1 20089d0: d0 20 61 98 st %o0, [ %g1 + 0x198 ] ! 2017d98 <_Thread_Idle> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 20089d4: 80 a0 a0 00 cmp %g2, 0 20089d8: 03 00 80 23 sethi %hi(0x2008c00), %g1 20089dc: 02 80 00 03 be 20089e8 <_Thread_Create_idle+0x34> 20089e0: b4 10 60 9c or %g1, 0x9c, %i2 ! 2008c9c <_Thread_Idle_body> idle = _CPU_Table.idle_task; 20089e4: b4 10 00 02 mov %g2, %i2 <== NOT EXECUTED idle_task_stack_size = _CPU_Table.idle_task_stack_size; 20089e8: 03 00 80 5e sethi %hi(0x2017800), %g1 20089ec: d6 00 63 d8 ld [ %g1 + 0x3d8 ], %o3 ! 2017bd8 <_CPU_Table+0x14> if ( idle_task_stack_size < STACK_MINIMUM_SIZE ) 20089f0: 80 a2 ef ff cmp %o3, 0xfff 20089f4: 28 80 00 02 bleu,a 20089fc <_Thread_Create_idle+0x48> 20089f8: 17 00 00 04 sethi %hi(0x1000), %o3 idle_task_stack_size = STACK_MINIMUM_SIZE; _Thread_Initialize( 20089fc: 03 00 80 5c sethi %hi(0x2017000), %g1 2008a00: c2 00 60 20 ld [ %g1 + 0x20 ], %g1 ! 2017020 <_Thread_Idle_name> 2008a04: 92 10 00 08 mov %o0, %o1 2008a08: c2 23 a0 6c st %g1, [ %sp + 0x6c ] 2008a0c: 82 10 20 01 mov 1, %g1 2008a10: c0 23 a0 60 clr [ %sp + 0x60 ] 2008a14: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 2008a18: c0 23 a0 64 clr [ %sp + 0x64 ] 2008a1c: c0 23 a0 68 clr [ %sp + 0x68 ] 2008a20: 11 00 80 5f sethi %hi(0x2017c00), %o0 2008a24: 94 10 20 00 clr %o2 2008a28: 90 12 21 40 or %o0, 0x140, %o0 2008a2c: 98 10 20 00 clr %o4 2008a30: 40 00 00 aa call 2008cd8 <_Thread_Initialize> 2008a34: 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 = 2008a38: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008a3c: c4 00 61 98 ld [ %g1 + 0x198 ], %g2 ! 2017d98 <_Thread_Idle> 2008a40: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008a44: c4 20 60 90 st %g2, [ %g1 + 0x90 ] ! 2017c90 <_Thread_Executing> 2008a48: 03 00 80 5f sethi %hi(0x2017c00), %g1 _Thread_Executing = _Thread_Idle; _Thread_Start( 2008a4c: 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 = 2008a50: c4 20 60 68 st %g2, [ %g1 + 0x68 ] _Thread_Executing = _Thread_Idle; _Thread_Start( 2008a54: b2 10 20 00 clr %i1 2008a58: b6 10 20 00 clr %i3 2008a5c: 40 00 04 0c call 2009a8c <_Thread_Start> 2008a60: 99 e8 20 00 restore %g0, 0, %o4 2008a64: 01 00 00 00 nop 02008a68 <_Thread_Delay_ended>: void _Thread_Delay_ended( Objects_Id id, void *ignored ) { 2008a68: 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 ) ) { 2008a6c: 92 96 20 00 orcc %i0, 0, %o1 2008a70: 12 80 00 0a bne 2008a98 <_Thread_Delay_ended+0x30> 2008a74: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2008a78: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 2008a7c: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2008a80: 84 00 a0 01 inc %g2 <== NOT EXECUTED 2008a84: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 2008a88: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008a8c: d0 00 60 90 ld [ %g1 + 0x90 ], %o0 ! 2017c90 <_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; 2008a90: 10 80 00 19 b 2008af4 <_Thread_Delay_ended+0x8c> <== NOT EXECUTED 2008a94: 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); 2008a98: 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 ) { 2008a9c: 80 a0 a0 04 cmp %g2, 4 2008aa0: 18 80 00 06 bgu 2008ab8 <_Thread_Delay_ended+0x50> 2008aa4: 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 :) */ 2008aa8: 83 32 60 1b srl %o1, 0x1b, %g1 2008aac: 80 a0 60 01 cmp %g1, 1 2008ab0: 02 80 00 05 be 2008ac4 <_Thread_Delay_ended+0x5c> 2008ab4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2008ab8: 90 10 20 00 clr %o0 <== NOT EXECUTED 2008abc: 10 80 00 0e b 2008af4 <_Thread_Delay_ended+0x8c> <== NOT EXECUTED 2008ac0: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2008ac4: 83 28 a0 02 sll %g2, 2, %g1 2008ac8: 05 00 80 5e sethi %hi(0x2017800), %g2 2008acc: 84 10 a3 10 or %g2, 0x310, %g2 ! 2017b10 <_Objects_Information_table> 2008ad0: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2008ad4: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 2008ad8: 80 a2 20 00 cmp %o0, 0 2008adc: 12 80 00 04 bne 2008aec <_Thread_Delay_ended+0x84> 2008ae0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2008ae4: 10 80 00 04 b 2008af4 <_Thread_Delay_ended+0x8c> <== NOT EXECUTED 2008ae8: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2008aec: 7f ff fb 09 call 2007710 <_Objects_Get> 2008af0: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 2008af4: c2 07 bf f4 ld [ %fp + -12 ], %g1 2008af8: 80 a0 60 00 cmp %g1, 0 2008afc: 12 80 00 08 bne 2008b1c <_Thread_Delay_ended+0xb4> 2008b00: 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 ); 2008b04: 7f ff ff 3d call 20087f8 <_Thread_Clear_state> 2008b08: 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; 2008b0c: 05 00 80 5e sethi %hi(0x2017800), %g2 2008b10: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2008b14: 82 00 7f ff add %g1, -1, %g1 2008b18: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 2008b1c: 81 c7 e0 08 ret 2008b20: 81 e8 00 00 restore 0200d5b8 <_Thread_Evaluate_mode>: boolean _Thread_Evaluate_mode( void ) { Thread_Control *executing; executing = _Thread_Executing; 200d5b8: 03 00 80 5f sethi %hi(0x2017c00), %g1 200d5bc: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> if ( !_States_Is_ready( executing->current_state ) || 200d5c0: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 200d5c4: 80 a0 60 00 cmp %g1, 0 200d5c8: 32 80 00 0b bne,a 200d5f4 <_Thread_Evaluate_mode+0x3c> 200d5cc: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 200d5d0: 03 00 80 5f sethi %hi(0x2017c00), %g1 200d5d4: c2 00 60 68 ld [ %g1 + 0x68 ], %g1 ! 2017c68 <_Thread_Heir> 200d5d8: 80 a0 80 01 cmp %g2, %g1 200d5dc: 02 80 00 0b be 200d608 <_Thread_Evaluate_mode+0x50> 200d5e0: 01 00 00 00 nop 200d5e4: c2 00 a0 7c ld [ %g2 + 0x7c ], %g1 200d5e8: 80 a0 60 00 cmp %g1, 0 200d5ec: 02 80 00 07 be 200d608 <_Thread_Evaluate_mode+0x50> 200d5f0: 84 10 20 01 mov 1, %g2 ( !_Thread_Is_heir( executing ) && executing->is_preemptible ) ) { _Context_Switch_necessary = TRUE; 200d5f4: 03 00 80 5f sethi %hi(0x2017c00), %g1 200d5f8: 90 10 20 01 mov 1, %o0 200d5fc: c4 20 60 a0 st %g2, [ %g1 + 0xa0 ] 200d600: 81 c3 e0 08 retl 200d604: 01 00 00 00 nop return TRUE; } return FALSE; } 200d608: 81 c3 e0 08 retl 200d60c: 90 10 20 00 clr %o0 ! 0 0200d610 <_Thread_Handler>: * * Output parameters: NONE */ void _Thread_Handler( void ) { 200d610: 9d e3 bf 98 save %sp, -104, %sp #endif #if defined(__USE__MAIN__) extern void _main(void); #endif executing = _Thread_Executing; 200d614: 03 00 80 5f sethi %hi(0x2017c00), %g1 200d618: f4 00 60 90 ld [ %g1 + 0x90 ], %i2 ! 2017c90 <_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(); 200d61c: 3f 00 80 35 sethi %hi(0x200d400), %i7 200d620: be 17 e2 10 or %i7, 0x210, %i7 ! 200d610 <_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); 200d624: d0 06 a0 c4 ld [ %i2 + 0xc4 ], %o0 200d628: 7f ff d1 ca call 2001d50 200d62c: 91 2a 20 08 sll %o0, 8, %o0 #if defined(__USE_INIT_FINI__) || defined(__USE__MAIN__) doneCons = doneConstructors; doneConstructors = 1; 200d630: 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; 200d634: 05 00 80 5e sethi %hi(0x2017800), %g2 200d638: f0 08 a0 48 ldub [ %g2 + 0x48 ], %i0 ! 2017848 doneConstructors = 1; 200d63c: c2 28 a0 48 stb %g1, [ %g2 + 0x48 ] #endif #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) #if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE ) if ( (executing->fp_context != NULL) && !_Thread_Is_allocated_fp( executing ) ) { 200d640: c2 06 a1 68 ld [ %i2 + 0x168 ], %g1 200d644: 80 a0 60 00 cmp %g1, 0 200d648: 02 80 00 0b be 200d674 <_Thread_Handler+0x64> 200d64c: 33 00 80 5f sethi %hi(0x2017c00), %i1 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) RTEMS_INLINE_ROUTINE boolean _Thread_Is_allocated_fp ( const Thread_Control *the_thread ) { return ( the_thread == _Thread_Allocated_fp ); 200d650: d0 06 60 60 ld [ %i1 + 0x60 ], %o0 ! 2017c60 <_Thread_Allocated_fp> 200d654: 80 a6 80 08 cmp %i2, %o0 200d658: 02 80 00 07 be 200d674 <_Thread_Handler+0x64> 200d65c: 80 a2 20 00 cmp %o0, 0 if ( _Thread_Allocated_fp != NULL ) 200d660: 22 80 00 05 be,a 200d674 <_Thread_Handler+0x64> 200d664: f4 26 60 60 st %i2, [ %i1 + 0x60 ] _Context_Save_fp( &_Thread_Allocated_fp->fp_context ); 200d668: 7f ff f3 1c call 200a2d8 <_CPU_Context_save_fp> 200d66c: 90 02 21 68 add %o0, 0x168, %o0 _Thread_Allocated_fp = executing; 200d670: f4 26 60 60 st %i2, [ %i1 + 0x60 ] * 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 ); 200d674: 7f ff f1 be call 2009d6c <_User_extensions_Thread_begin> 200d678: 90 10 00 1a mov %i2, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 200d67c: 03 00 80 5e sethi %hi(0x2017800), %g1 200d680: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> 200d684: 84 00 bf ff add %g2, -1, %g2 200d688: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 200d68c: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 200d690: 80 a0 60 00 cmp %g1, 0 200d694: 12 80 00 05 bne 200d6a8 <_Thread_Handler+0x98> 200d698: 83 2e 20 18 sll %i0, 0x18, %g1 _Thread_Dispatch(); 200d69c: 7f ff ed 22 call 2008b24 <_Thread_Dispatch> 200d6a0: 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) */ 200d6a4: 83 2e 20 18 sll %i0, 0x18, %g1 200d6a8: 80 a0 60 00 cmp %g1, 0 200d6ac: 32 80 00 05 bne,a 200d6c0 <_Thread_Handler+0xb0> 200d6b0: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 _init (); 200d6b4: 40 00 24 f5 call 2016a88 <_init> 200d6b8: 01 00 00 00 nop #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 200d6bc: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 200d6c0: 80 a0 60 01 cmp %g1, 1 200d6c4: 22 80 00 0d be,a 200d6f8 <_Thread_Handler+0xe8> 200d6c8: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 200d6cc: 2a 80 00 09 bcs,a 200d6f0 <_Thread_Handler+0xe0> 200d6d0: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 200d6d4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 200d6d8: 02 80 00 0d be 200d70c <_Thread_Handler+0xfc> <== NOT EXECUTED 200d6dc: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 200d6e0: 12 80 00 14 bne 200d730 <_Thread_Handler+0x120> <== NOT EXECUTED 200d6e4: 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 = 200d6e8: 10 80 00 0c b 200d718 <_Thread_Handler+0x108> <== NOT EXECUTED 200d6ec: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED __main (); #endif switch ( executing->Start.prototype ) { case THREAD_START_NUMERIC: executing->Wait.return_argument = 200d6f0: 10 80 00 03 b 200d6fc <_Thread_Handler+0xec> 200d6f4: 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 = 200d6f8: d0 06 a0 b0 ld [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED 200d6fc: 9f c0 40 00 call %g1 200d700: 01 00 00 00 nop executing->Start.pointer_argument, executing->Start.numeric_argument ); break; case THREAD_START_BOTH_NUMERIC_FIRST: executing->Wait.return_argument = 200d704: 10 80 00 0a b 200d72c <_Thread_Handler+0x11c> 200d708: 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 = 200d70c: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 200d710: 10 80 00 04 b 200d720 <_Thread_Handler+0x110> <== NOT EXECUTED 200d714: 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 = 200d718: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 <== NOT EXECUTED 200d71c: d2 06 a0 b0 ld [ %i2 + 0xb0 ], %o1 <== NOT EXECUTED 200d720: 9f c0 40 00 call %g1 <== NOT EXECUTED 200d724: 01 00 00 00 nop <== NOT EXECUTED 200d728: 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 ); 200d72c: 90 10 00 1a mov %i2, %o0 200d730: 7f ff f1 b2 call 2009df8 <_User_extensions_Thread_exitted> 200d734: b0 10 20 00 clr %i0 _Internal_error_Occurred( 200d738: b2 10 20 01 mov 1, %i1 200d73c: 7f ff e6 84 call 200714c <_Internal_error_Occurred> 200d740: 95 e8 20 06 restore %g0, 6, %o2 200d744: 01 00 00 00 nop 02008ed8 <_Thread_Handler_initialization>: void _Thread_Handler_initialization( uint32_t ticks_per_timeslice, uint32_t maximum_extensions, uint32_t maximum_proxies ) { 2008ed8: 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 ) 2008edc: 03 00 80 5e sethi %hi(0x2017800), %g1 2008ee0: 82 10 63 c4 or %g1, 0x3c4, %g1 ! 2017bc4 <_CPU_Table> 2008ee4: c4 00 60 20 ld [ %g1 + 0x20 ], %g2 2008ee8: c2 00 60 24 ld [ %g1 + 0x24 ], %g1 2008eec: 80 a0 00 02 cmp %g0, %g2 2008ef0: 84 60 3f ff subx %g0, -1, %g2 2008ef4: 80 a0 00 01 cmp %g0, %g1 2008ef8: 82 60 3f ff subx %g0, -1, %g1 2008efc: 80 a0 80 01 cmp %g2, %g1 2008f00: 02 80 00 07 be 2008f1c <_Thread_Handler_initialization+0x44> 2008f04: 03 00 80 5f sethi %hi(0x2017c00), %g1 == ( _CPU_Table.stack_free_hook == 0 ) ) ) _Internal_error_Occurred( 2008f08: 90 10 20 00 clr %o0 <== NOT EXECUTED 2008f0c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 2008f10: 7f ff f8 8f call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2008f14: 94 10 20 0f mov 0xf, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 2008f18: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2008f1c: c0 20 60 a0 clr [ %g1 + 0xa0 ] ! 2017ca0 <_Context_Switch_necessary> _Thread_Executing = NULL; 2008f20: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008f24: c0 20 60 90 clr [ %g1 + 0x90 ] ! 2017c90 <_Thread_Executing> _Thread_Heir = NULL; 2008f28: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008f2c: c0 20 60 68 clr [ %g1 + 0x68 ] ! 2017c68 <_Thread_Heir> #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) _Thread_Allocated_fp = NULL; 2008f30: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008f34: c0 20 60 60 clr [ %g1 + 0x60 ] ! 2017c60 <_Thread_Allocated_fp> #endif _Thread_Do_post_task_switch_extension = 0; 2008f38: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008f3c: c0 20 60 80 clr [ %g1 + 0x80 ] ! 2017c80 <_Thread_Do_post_task_switch_extension> _Thread_Maximum_extensions = maximum_extensions; 2008f40: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008f44: f2 20 60 7c st %i1, [ %g1 + 0x7c ] ! 2017c7c <_Thread_Maximum_extensions> _Thread_Ticks_per_timeslice = ticks_per_timeslice; 2008f48: 03 00 80 5e sethi %hi(0x2017800), %g1 _Thread_Ready_chain = (Chain_Control *) _Workspace_Allocate_or_fatal_error( 2008f4c: 90 10 2c 00 mov 0xc00, %o0 2008f50: 40 00 04 b1 call 200a214 <_Workspace_Allocate_or_fatal_error> 2008f54: f0 20 63 08 st %i0, [ %g1 + 0x308 ] 2008f58: 03 00 80 5e sethi %hi(0x2017800), %g1 2008f5c: 84 10 00 08 mov %o0, %g2 2008f60: d0 20 63 04 st %o0, [ %g1 + 0x304 ] (PRIORITY_MAXIMUM + 1) * sizeof(Chain_Control) ); for ( index=0; index <= PRIORITY_MAXIMUM ; index++ ) 2008f64: 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); 2008f68: 82 00 a0 04 add %g2, 4, %g1 the_chain->permanent_null = NULL; 2008f6c: c0 20 a0 04 clr [ %g2 + 4 ] the_chain->last = _Chain_Head(the_chain); 2008f70: 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); 2008f74: c2 20 80 00 st %g1, [ %g2 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2008f78: 84 00 a0 0c add %g2, 0xc, %g2 2008f7c: 80 a0 80 03 cmp %g2, %g3 2008f80: 12 bf ff fb bne 2008f6c <_Thread_Handler_initialization+0x94> 2008f84: 82 00 a0 04 add %g2, 4, %g1 /* * Initialize this class of objects. */ _Objects_Initialize_information( 2008f88: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008f8c: c2 00 60 bc ld [ %g1 + 0xbc ], %g1 ! 2017cbc <_System_state_Is_multiprocessing> 2008f90: 96 10 20 02 mov 2, %o3 2008f94: 80 a0 00 01 cmp %g0, %g1 2008f98: 82 10 20 08 mov 8, %g1 2008f9c: 96 42 ff ff addx %o3, -1, %o3 2008fa0: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 2008fa4: 11 00 80 5f sethi %hi(0x2017c00), %o0 2008fa8: 92 10 20 01 mov 1, %o1 2008fac: 90 12 21 40 or %o0, 0x140, %o0 2008fb0: 94 10 20 01 mov 1, %o2 2008fb4: 98 10 21 88 mov 0x188, %o4 2008fb8: 7f ff f9 fb call 20077a4 <_Objects_Initialize_information> 2008fbc: 9a 10 20 01 mov 1, %o5 FALSE, /* TRUE if this is a global object class */ NULL /* Proxy extraction support callout */ #endif ); } 2008fc0: 81 c7 e0 08 ret 2008fc4: 81 e8 00 00 restore 02008cd8 <_Thread_Initialize>: Thread_CPU_budget_algorithms budget_algorithm, Thread_CPU_budget_algorithm_callout budget_callout, uint32_t isr_level, Objects_Name name ) { 2008cd8: 9d e3 bf 98 save %sp, -104, %sp /* * Initialize the Ada self pointer */ the_thread->rtems_ada_self = NULL; 2008cdc: c0 26 60 80 clr [ %i1 + 0x80 ] /* * Allocate and Initialize the stack for this thread. */ if ( !stack_area ) { 2008ce0: 80 a6 a0 00 cmp %i2, 0 2008ce4: 12 80 00 10 bne 2008d24 <_Thread_Initialize+0x4c> 2008ce8: e0 07 a0 60 ld [ %fp + 0x60 ], %l0 if ( !_Stack_Is_enough( stack_size ) ) 2008cec: 80 a6 ef ff cmp %i3, 0xfff 2008cf0: 08 80 00 03 bleu 2008cfc <_Thread_Initialize+0x24> 2008cf4: 13 00 00 04 sethi %hi(0x1000), %o1 2008cf8: 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 ); 2008cfc: 40 00 03 26 call 2009994 <_Thread_Stack_Allocate> 2008d00: 90 10 00 19 mov %i1, %o0 if ( !actual_stack_size || actual_stack_size < stack_size ) 2008d04: 80 a2 20 00 cmp %o0, 0 2008d08: 02 80 00 2c be 2008db8 <_Thread_Initialize+0xe0> 2008d0c: 80 a2 00 1b cmp %o0, %i3 2008d10: 0a 80 00 2a bcs 2008db8 <_Thread_Initialize+0xe0> 2008d14: 82 10 20 01 mov 1, %g1 return FALSE; /* stack allocation failed */ stack = the_thread->Start.stack; 2008d18: f4 06 60 dc ld [ %i1 + 0xdc ], %i2 the_thread->Start.core_allocated_stack = TRUE; 2008d1c: 10 80 00 04 b 2008d2c <_Thread_Initialize+0x54> 2008d20: c2 26 60 cc st %g1, [ %i1 + 0xcc ] } else { stack = stack_area; actual_stack_size = stack_size; the_thread->Start.core_allocated_stack = FALSE; 2008d24: c0 26 60 cc clr [ %i1 + 0xcc ] <== NOT EXECUTED 2008d28: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED Stack_Control *the_stack, void *starting_address, size_t size ) { the_stack->area = starting_address; 2008d2c: f4 26 60 d4 st %i2, [ %i1 + 0xd4 ] the_stack->size = size; 2008d30: d0 26 60 d0 st %o0, [ %i1 + 0xd0 ] /* * Allocate the floating point area for this thread */ #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( is_fp ) { 2008d34: 80 a7 20 00 cmp %i4, 0 2008d38: 02 80 00 07 be 2008d54 <_Thread_Initialize+0x7c> 2008d3c: b8 10 20 00 clr %i4 fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE ); 2008d40: 7f ff ff d8 call 2008ca0 <_Workspace_Allocate> 2008d44: 90 10 20 88 mov 0x88, %o0 if ( !fp_area ) { 2008d48: b8 92 20 00 orcc %o0, 0, %i4 2008d4c: 02 80 00 19 be 2008db0 <_Thread_Initialize+0xd8> 2008d50: 01 00 00 00 nop /* * Allocate the extensions area for this thread */ if ( _Thread_Maximum_extensions ) { 2008d54: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008d58: d0 00 60 7c ld [ %g1 + 0x7c ], %o0 ! 2017c7c <_Thread_Maximum_extensions> fp_area = _Context_Fp_start( fp_area, 0 ); } else fp_area = NULL; the_thread->fp_context = fp_area; 2008d5c: f8 26 61 68 st %i4, [ %i1 + 0x168 ] the_thread->Start.fp_context = fp_area; 2008d60: f8 26 60 d8 st %i4, [ %i1 + 0xd8 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2008d64: c0 26 60 50 clr [ %i1 + 0x50 ] the_watchdog->routine = routine; 2008d68: c0 26 60 64 clr [ %i1 + 0x64 ] the_watchdog->id = id; 2008d6c: c0 26 60 68 clr [ %i1 + 0x68 ] the_watchdog->user_data = user_data; 2008d70: c0 26 60 6c clr [ %i1 + 0x6c ] /* * Clear the libc reent hook. */ the_thread->libc_reent = NULL; 2008d74: c0 26 61 6c clr [ %i1 + 0x16c ] /* * Allocate the extensions area for this thread */ if ( _Thread_Maximum_extensions ) { 2008d78: 80 a2 20 00 cmp %o0, 0 2008d7c: 02 80 00 11 be 2008dc0 <_Thread_Initialize+0xe8> 2008d80: b6 10 20 00 clr %i3 extensions_area = _Workspace_Allocate( 2008d84: 90 02 20 01 inc %o0 2008d88: 7f ff ff c6 call 2008ca0 <_Workspace_Allocate> 2008d8c: 91 2a 20 02 sll %o0, 2, %o0 (_Thread_Maximum_extensions + 1) * sizeof( void * ) ); if ( !extensions_area ) { 2008d90: b6 92 20 00 orcc %o0, 0, %i3 2008d94: 12 80 00 0c bne 2008dc4 <_Thread_Initialize+0xec> 2008d98: 80 a6 e0 00 cmp %i3, 0 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) 2008d9c: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 2008da0: 02 80 00 04 be 2008db0 <_Thread_Initialize+0xd8> <== NOT EXECUTED 2008da4: 01 00 00 00 nop <== NOT EXECUTED (void) _Workspace_Free( fp_area ); 2008da8: 7f ff ff c5 call 2008cbc <_Workspace_Free> <== NOT EXECUTED 2008dac: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED #endif _Thread_Stack_Free( the_thread ); 2008db0: 40 00 03 10 call 20099f0 <_Thread_Stack_Free> <== NOT EXECUTED 2008db4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2008db8: 81 c7 e0 08 ret 2008dbc: 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 ) { 2008dc0: 80 a6 e0 00 cmp %i3, 0 2008dc4: 02 80 00 0d be 2008df8 <_Thread_Initialize+0x120> 2008dc8: f6 26 61 7c st %i3, [ %i1 + 0x17c ] int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 2008dcc: 03 00 80 5f sethi %hi(0x2017c00), %g1 2008dd0: c2 00 60 7c ld [ %g1 + 0x7c ], %g1 ! 2017c7c <_Thread_Maximum_extensions> 2008dd4: 86 10 20 00 clr %g3 2008dd8: 10 80 00 05 b 2008dec <_Thread_Initialize+0x114> 2008ddc: 88 00 60 01 add %g1, 1, %g4 the_thread->extensions[i] = NULL; 2008de0: 83 28 e0 02 sll %g3, 2, %g1 * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 2008de4: 86 00 e0 01 inc %g3 the_thread->extensions[i] = NULL; 2008de8: c0 20 80 01 clr [ %g2 + %g1 ] * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 2008dec: 80 a0 c0 04 cmp %g3, %g4 2008df0: 32 bf ff fc bne,a 2008de0 <_Thread_Initialize+0x108> 2008df4: c4 06 61 7c ld [ %i1 + 0x17c ], %g2 /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 2008df8: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 the_thread->Start.budget_algorithm = budget_algorithm; 2008dfc: e0 26 60 bc st %l0, [ %i1 + 0xbc ] /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 2008e00: c2 26 60 b8 st %g1, [ %i1 + 0xb8 ] the_thread->Start.budget_algorithm = budget_algorithm; the_thread->Start.budget_callout = budget_callout; 2008e04: c2 07 a0 64 ld [ %fp + 0x64 ], %g1 switch ( budget_algorithm ) { 2008e08: 80 a4 20 02 cmp %l0, 2 2008e0c: 12 80 00 05 bne 2008e20 <_Thread_Initialize+0x148> 2008e10: 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; 2008e14: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 2008e18: c2 00 63 08 ld [ %g1 + 0x308 ], %g1 ! 2017b08 <_Thread_Ticks_per_timeslice> <== NOT EXECUTED 2008e1c: 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; 2008e20: c2 07 a0 68 ld [ %fp + 0x68 ], %g1 the_thread->current_state = STATES_DORMANT; the_thread->Wait.queue = NULL; 2008e24: c0 26 60 44 clr [ %i1 + 0x44 ] break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 2008e28: c2 26 60 c4 st %g1, [ %i1 + 0xc4 ] the_thread->current_state = STATES_DORMANT; 2008e2c: 82 10 20 01 mov 1, %g1 the_thread->Wait.queue = NULL; the_thread->resource_count = 0; 2008e30: c0 26 60 1c clr [ %i1 + 0x1c ] break; } the_thread->Start.isr_level = isr_level; the_thread->current_state = STATES_DORMANT; 2008e34: c2 26 60 10 st %g1, [ %i1 + 0x10 ] the_thread->Wait.queue = NULL; the_thread->resource_count = 0; the_thread->suspend_count = 0; 2008e38: c0 26 60 70 clr [ %i1 + 0x70 ] the_thread->real_priority = priority; 2008e3c: fa 26 60 18 st %i5, [ %i1 + 0x18 ] the_thread->Start.initial_priority = priority; 2008e40: fa 26 60 c8 st %i5, [ %i1 + 0xc8 ] _Thread_Set_priority( the_thread, priority ); 2008e44: 92 10 00 1d mov %i5, %o1 2008e48: 40 00 02 32 call 2009710 <_Thread_Set_priority> 2008e4c: 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 ); 2008e50: c4 06 60 08 ld [ %i1 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2008e54: 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; 2008e58: c0 26 60 90 clr [ %i1 + 0x90 ] 2008e5c: 03 00 00 3f sethi %hi(0xfc00), %g1 2008e60: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 2008e64: 82 08 80 01 and %g2, %g1, %g1 2008e68: 80 a0 40 03 cmp %g1, %g3 2008e6c: 18 80 00 05 bgu 2008e80 <_Thread_Initialize+0x1a8> 2008e70: c0 26 60 94 clr [ %i1 + 0x94 ] information->local_table[ index ] = the_object; 2008e74: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 2008e78: 83 28 60 02 sll %g1, 2, %g1 2008e7c: 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; 2008e80: c2 07 a0 6c ld [ %fp + 0x6c ], %g1 /* * Invoke create extensions */ if ( !_User_extensions_Thread_create( the_thread ) ) { 2008e84: 90 10 00 19 mov %i1, %o0 2008e88: c2 26 60 0c st %g1, [ %i1 + 0xc ] 2008e8c: 40 00 03 ec call 2009e3c <_User_extensions_Thread_create> 2008e90: b0 10 20 01 mov 1, %i0 2008e94: 80 a2 20 00 cmp %o0, 0 2008e98: 12 80 00 0e bne 2008ed0 <_Thread_Initialize+0x1f8> 2008e9c: 80 a6 e0 00 cmp %i3, 0 if ( extensions_area ) 2008ea0: 02 80 00 05 be 2008eb4 <_Thread_Initialize+0x1dc> 2008ea4: 80 a7 20 00 cmp %i4, 0 (void) _Workspace_Free( extensions_area ); 2008ea8: 7f ff ff 85 call 2008cbc <_Workspace_Free> <== NOT EXECUTED 2008eac: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) 2008eb0: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 2008eb4: 02 80 00 05 be 2008ec8 <_Thread_Initialize+0x1f0> 2008eb8: 90 10 00 19 mov %i1, %o0 (void) _Workspace_Free( fp_area ); 2008ebc: 7f ff ff 80 call 2008cbc <_Workspace_Free> <== NOT EXECUTED 2008ec0: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED #endif _Thread_Stack_Free( the_thread ); 2008ec4: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2008ec8: 40 00 02 ca call 20099f0 <_Thread_Stack_Free> 2008ecc: b0 10 20 00 clr %i0 return FALSE; } return TRUE; } 2008ed0: 81 c7 e0 08 ret 2008ed4: 81 e8 00 00 restore 0200db18 <_Thread_Reset>: void _Thread_Reset( Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { 200db18: 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; 200db1c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 the_thread->budget_algorithm = the_thread->Start.budget_algorithm; 200db20: c4 06 20 bc ld [ %i0 + 0xbc ], %g2 the_thread->budget_callout = the_thread->Start.budget_callout; 200db24: 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; 200db28: 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; 200db2c: c4 3e 20 88 std %g2, [ %i0 + 0x88 ] the_thread->Start.pointer_argument = pointer_argument; 200db30: f2 26 20 b0 st %i1, [ %i0 + 0xb0 ] the_thread->Start.numeric_argument = numeric_argument; 200db34: f4 26 20 b4 st %i2, [ %i0 + 0xb4 ] Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { the_thread->resource_count = 0; 200db38: c0 26 20 1c clr [ %i0 + 0x1c ] the_thread->suspend_count = 0; 200db3c: 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 ) ) { 200db40: 7f ff f1 9b call 200a1ac <_Thread_queue_Extract_with_proxy> 200db44: 90 10 00 18 mov %i0, %o0 200db48: 80 a2 20 00 cmp %o0, 0 200db4c: 32 80 00 09 bne,a 200db70 <_Thread_Reset+0x58> 200db50: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 if ( _Watchdog_Is_active( &the_thread->Timer ) ) 200db54: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 200db58: 80 a0 60 02 cmp %g1, 2 200db5c: 32 80 00 05 bne,a 200db70 <_Thread_Reset+0x58> 200db60: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 (void) _Watchdog_Remove( &the_thread->Timer ); 200db64: 7f ff f4 e0 call 200aee4 <_Watchdog_Remove> <== NOT EXECUTED 200db68: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED } if ( the_thread->current_priority != the_thread->Start.initial_priority ) { 200db6c: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 <== NOT EXECUTED 200db70: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 200db74: 80 a0 40 19 cmp %g1, %i1 200db78: 02 80 00 05 be 200db8c <_Thread_Reset+0x74> 200db7c: 01 00 00 00 nop the_thread->real_priority = the_thread->Start.initial_priority; 200db80: f2 26 20 18 st %i1, [ %i0 + 0x18 ] _Thread_Set_priority( the_thread, the_thread->Start.initial_priority ); 200db84: 7f ff f2 58 call 200a4e4 <_Thread_Set_priority> 200db88: 81 e8 00 00 restore 200db8c: 81 c7 e0 08 ret 200db90: 81 e8 00 00 restore 0200cca8 <_Thread_Reset_timeslice>: * ready chain * select heir */ void _Thread_Reset_timeslice( void ) { 200cca8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *executing; Chain_Control *ready; executing = _Thread_Executing; 200ccac: 03 00 80 5f sethi %hi(0x2017c00), %g1 200ccb0: e0 00 60 90 ld [ %g1 + 0x90 ], %l0 ! 2017c90 <_Thread_Executing> ready = executing->ready; _ISR_Disable( level ); 200ccb4: 7f ff d4 23 call 2001d40 200ccb8: e2 04 20 98 ld [ %l0 + 0x98 ], %l1 200ccbc: b0 10 00 08 mov %o0, %i0 if ( _Chain_Has_only_one_node( ready ) ) { 200ccc0: c4 04 40 00 ld [ %l1 ], %g2 200ccc4: c2 04 60 08 ld [ %l1 + 8 ], %g1 200ccc8: 80 a0 80 01 cmp %g2, %g1 200cccc: 32 80 00 03 bne,a 200ccd8 <_Thread_Reset_timeslice+0x30> 200ccd0: c6 04 00 00 ld [ %l0 ], %g3 _ISR_Enable( level ); 200ccd4: 30 80 00 18 b,a 200cd34 <_Thread_Reset_timeslice+0x8c> { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 200ccd8: c4 04 20 04 ld [ %l0 + 4 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 200ccdc: 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; 200cce0: c6 20 80 00 st %g3, [ %g2 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 200cce4: c2 24 00 00 st %g1, [ %l0 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 200cce8: 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; 200ccec: c2 04 60 08 ld [ %l1 + 8 ], %g1 the_chain->last = the_node; 200ccf0: e0 24 60 08 st %l0, [ %l1 + 8 ] old_last_node->next = the_node; the_node->previous = old_last_node; 200ccf4: 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; 200ccf8: e0 20 40 00 st %l0, [ %g1 ] return; } _Chain_Extract_unprotected( &executing->Object.Node ); _Chain_Append_unprotected( ready, &executing->Object.Node ); _ISR_Flash( level ); 200ccfc: 7f ff d4 15 call 2001d50 200cd00: 01 00 00 00 nop 200cd04: 7f ff d4 0f call 2001d40 200cd08: 01 00 00 00 nop if ( _Thread_Is_heir( executing ) ) 200cd0c: 05 00 80 5f sethi %hi(0x2017c00), %g2 200cd10: c2 00 a0 68 ld [ %g2 + 0x68 ], %g1 ! 2017c68 <_Thread_Heir> 200cd14: 80 a4 00 01 cmp %l0, %g1 200cd18: 32 80 00 05 bne,a 200cd2c <_Thread_Reset_timeslice+0x84> 200cd1c: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED _Thread_Heir = (Thread_Control *) ready->first; 200cd20: c2 04 40 00 ld [ %l1 ], %g1 200cd24: c2 20 a0 68 st %g1, [ %g2 + 0x68 ] _Context_Switch_necessary = TRUE; 200cd28: 84 10 20 01 mov 1, %g2 200cd2c: 03 00 80 5f sethi %hi(0x2017c00), %g1 200cd30: c4 20 60 a0 st %g2, [ %g1 + 0xa0 ] ! 2017ca0 <_Context_Switch_necessary> _ISR_Enable( level ); 200cd34: 7f ff d4 07 call 2001d50 200cd38: 81 e8 00 00 restore 200cd3c: 01 00 00 00 nop 0200b1e4 <_Thread_Resume>: void _Thread_Resume( Thread_Control *the_thread, boolean force ) { 200b1e4: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; States_Control current_state; _ISR_Disable( level ); 200b1e8: 7f ff de 1f call 2002a64 200b1ec: 01 00 00 00 nop 200b1f0: a0 10 00 08 mov %o0, %l0 if ( force == TRUE ) 200b1f4: 80 a6 60 01 cmp %i1, 1 200b1f8: 32 80 00 04 bne,a 200b208 <_Thread_Resume+0x24> 200b1fc: c2 06 20 70 ld [ %i0 + 0x70 ], %g1 <== NOT EXECUTED the_thread->suspend_count = 0; 200b200: 10 80 00 04 b 200b210 <_Thread_Resume+0x2c> 200b204: c0 26 20 70 clr [ %i0 + 0x70 ] else the_thread->suspend_count--; 200b208: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 200b20c: c2 26 20 70 st %g1, [ %i0 + 0x70 ] <== NOT EXECUTED if ( the_thread->suspend_count > 0 ) { 200b210: c2 06 20 70 ld [ %i0 + 0x70 ], %g1 200b214: 80 a0 60 00 cmp %g1, 0 200b218: 22 80 00 03 be,a 200b224 <_Thread_Resume+0x40> 200b21c: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 _ISR_Enable( level ); 200b220: 30 80 00 2e b,a 200b2d8 <_Thread_Resume+0xf4> <== NOT EXECUTED return; } current_state = the_thread->current_state; if ( current_state & STATES_SUSPENDED ) { 200b224: 80 88 60 02 btst 2, %g1 200b228: 02 80 00 2c be 200b2d8 <_Thread_Resume+0xf4> 200b22c: 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 ) ) { 200b230: 80 a0 60 00 cmp %g1, 0 200b234: 12 80 00 29 bne 200b2d8 <_Thread_Resume+0xf4> 200b238: 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; 200b23c: c8 06 20 9c ld [ %i0 + 0x9c ], %g4 200b240: c4 16 20 a2 lduh [ %i0 + 0xa2 ], %g2 200b244: 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); 200b248: c6 06 20 98 ld [ %i0 + 0x98 ], %g3 200b24c: 82 10 40 02 or %g1, %g2, %g1 200b250: c2 31 00 00 sth %g1, [ %g4 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 200b254: 82 00 e0 04 add %g3, 4, %g1 _Priority_Major_bit_map |= the_priority_map->ready_major; 200b258: 09 00 80 90 sethi %hi(0x2024000), %g4 200b25c: c2 26 00 00 st %g1, [ %i0 ] 200b260: da 16 20 a0 lduh [ %i0 + 0xa0 ], %o5 old_last_node = the_chain->last; 200b264: c2 00 e0 08 ld [ %g3 + 8 ], %g1 200b268: c4 11 21 b4 lduh [ %g4 + 0x1b4 ], %g2 the_chain->last = the_node; 200b26c: f0 20 e0 08 st %i0, [ %g3 + 8 ] 200b270: 84 10 80 0d or %g2, %o5, %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 200b274: c2 26 20 04 st %g1, [ %i0 + 4 ] 200b278: c4 31 21 b4 sth %g2, [ %g4 + 0x1b4 ] 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; 200b27c: f0 20 40 00 st %i0, [ %g1 ] _ISR_Flash( level ); 200b280: 7f ff dd fd call 2002a74 200b284: 90 10 00 10 mov %l0, %o0 200b288: 7f ff dd f7 call 2002a64 200b28c: 01 00 00 00 nop if ( the_thread->current_priority < _Thread_Heir->current_priority ) { 200b290: 07 00 80 90 sethi %hi(0x2024000), %g3 200b294: c2 00 e1 98 ld [ %g3 + 0x198 ], %g1 ! 2024198 <_Thread_Heir> 200b298: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 200b29c: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 200b2a0: 80 a0 80 01 cmp %g2, %g1 200b2a4: 1a 80 00 0d bcc 200b2d8 <_Thread_Resume+0xf4> 200b2a8: 03 00 80 90 sethi %hi(0x2024000), %g1 _Thread_Heir = the_thread; if ( _Thread_Executing->is_preemptible || 200b2ac: c2 00 61 c0 ld [ %g1 + 0x1c0 ], %g1 ! 20241c0 <_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; 200b2b0: f0 20 e1 98 st %i0, [ %g3 + 0x198 ] if ( _Thread_Executing->is_preemptible || 200b2b4: c2 00 60 7c ld [ %g1 + 0x7c ], %g1 200b2b8: 80 a0 60 00 cmp %g1, 0 200b2bc: 32 80 00 05 bne,a 200b2d0 <_Thread_Resume+0xec> 200b2c0: 84 10 20 01 mov 1, %g2 200b2c4: 80 a0 a0 00 cmp %g2, 0 200b2c8: 12 80 00 04 bne 200b2d8 <_Thread_Resume+0xf4> 200b2cc: 84 10 20 01 mov 1, %g2 the_thread->current_priority == 0 ) _Context_Switch_necessary = TRUE; 200b2d0: 03 00 80 90 sethi %hi(0x2024000), %g1 200b2d4: c4 20 61 d0 st %g2, [ %g1 + 0x1d0 ] ! 20241d0 <_Context_Switch_necessary> } } } _ISR_Enable( level ); 200b2d8: 7f ff dd e7 call 2002a74 200b2dc: 91 e8 00 10 restore %g0, %l0, %o0 200b2e0: 01 00 00 00 nop 02009994 <_Thread_Stack_Allocate>: size_t _Thread_Stack_Allocate( Thread_Control *the_thread, size_t stack_size ) { 2009994: 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 ) ) 2009998: 80 a6 6f ff cmp %i1, 0xfff 200999c: 28 80 00 02 bleu,a 20099a4 <_Thread_Stack_Allocate+0x10> 20099a0: 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 ) { 20099a4: 03 00 80 5e sethi %hi(0x2017800), %g1 20099a8: c2 00 63 e4 ld [ %g1 + 0x3e4 ], %g1 ! 2017be4 <_CPU_Table+0x20> 20099ac: 80 a0 60 00 cmp %g1, 0 20099b0: 02 80 00 06 be 20099c8 <_Thread_Stack_Allocate+0x34> 20099b4: 92 06 60 10 add %i1, 0x10, %o1 stack_addr = (*_CPU_Table.stack_allocate_hook)( the_stack_size ); 20099b8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20099bc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED } if ( !stack_addr ) the_stack_size = 0; the_thread->Start.stack = stack_addr; 20099c0: 10 80 00 07 b 20099dc <_Thread_Stack_Allocate+0x48> <== NOT EXECUTED 20099c4: d0 26 20 dc st %o0, [ %i0 + 0xdc ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 20099c8: 11 00 80 5e sethi %hi(0x2017800), %o0 20099cc: b2 10 00 09 mov %o1, %i1 20099d0: 7f ff f4 b4 call 2006ca0 <_Heap_Allocate> 20099d4: 90 12 23 fc or %o0, 0x3fc, %o0 20099d8: d0 26 20 dc st %o0, [ %i0 + 0xdc ] the_stack_size = _Stack_Adjust_size( the_stack_size ); stack_addr = _Workspace_Allocate( the_stack_size ); } if ( !stack_addr ) 20099dc: 80 a0 00 08 cmp %g0, %o0 20099e0: b0 60 20 00 subx %g0, 0, %i0 the_stack_size = 0; the_thread->Start.stack = stack_addr; return the_stack_size; } 20099e4: b0 0e 40 18 and %i1, %i0, %i0 20099e8: 81 c7 e0 08 ret 20099ec: 81 e8 00 00 restore 020099f0 <_Thread_Stack_Free>: */ void _Thread_Stack_Free( Thread_Control *the_thread ) { 20099f0: 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 ) 20099f4: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 20099f8: 80 a0 60 00 cmp %g1, 0 20099fc: 02 80 00 08 be 2009a1c <_Thread_Stack_Free+0x2c> 2009a00: 03 00 80 5e sethi %hi(0x2017800), %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 ) 2009a04: c2 00 63 e8 ld [ %g1 + 0x3e8 ], %g1 ! 2017be8 <_CPU_Table+0x24> 2009a08: 80 a0 60 00 cmp %g1, 0 2009a0c: 02 80 00 06 be 2009a24 <_Thread_Stack_Free+0x34> 2009a10: d0 06 20 d4 ld [ %i0 + 0xd4 ], %o0 (*_CPU_Table.stack_free_hook)( the_thread->Start.Initial_stack.area ); 2009a14: 9f c0 40 00 call %g1 <== NOT EXECUTED 2009a18: 01 00 00 00 nop <== NOT EXECUTED 2009a1c: 81 c7 e0 08 ret <== NOT EXECUTED 2009a20: 81 e8 00 00 restore <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 2009a24: 31 00 80 5e sethi %hi(0x2017800), %i0 2009a28: b2 10 00 08 mov %o0, %i1 2009a2c: 7f ff f4 c4 call 2006d3c <_Heap_Free> 2009a30: 91 ee 23 fc restore %i0, 0x3fc, %o0 2009a34: 01 00 00 00 nop 02009ad4 <_Thread_Tickle_timeslice>: * * Output parameters: NONE */ void _Thread_Tickle_timeslice( void ) { 2009ad4: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; 2009ad8: 03 00 80 5f sethi %hi(0x2017c00), %g1 2009adc: e0 00 60 90 ld [ %g1 + 0x90 ], %l0 ! 2017c90 <_Thread_Executing> /* * If the thread is not preemptible or is not ready, then * just return. */ if ( !executing->is_preemptible ) 2009ae0: c2 04 20 7c ld [ %l0 + 0x7c ], %g1 2009ae4: 80 a0 60 00 cmp %g1, 0 2009ae8: 02 80 00 23 be 2009b74 <_Thread_Tickle_timeslice+0xa0> 2009aec: 01 00 00 00 nop return; if ( !_States_Is_ready( executing->current_state ) ) 2009af0: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 2009af4: 80 a0 60 00 cmp %g1, 0 2009af8: 12 80 00 1f bne 2009b74 <_Thread_Tickle_timeslice+0xa0> 2009afc: 01 00 00 00 nop /* * The cpu budget algorithm determines what happens next. */ switch ( executing->budget_algorithm ) { 2009b00: c2 04 20 88 ld [ %l0 + 0x88 ], %g1 2009b04: 80 a0 60 01 cmp %g1, 1 2009b08: 0a 80 00 12 bcs 2009b50 <_Thread_Tickle_timeslice+0x7c> 2009b0c: 80 a0 60 02 cmp %g1, 2 2009b10: 28 80 00 07 bleu,a 2009b2c <_Thread_Tickle_timeslice+0x58> 2009b14: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 2009b18: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 2009b1c: 12 80 00 16 bne 2009b74 <_Thread_Tickle_timeslice+0xa0> <== NOT EXECUTED 2009b20: 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 ) 2009b24: 10 80 00 0d b 2009b58 <_Thread_Tickle_timeslice+0x84> <== NOT EXECUTED 2009b28: 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 ) { 2009b2c: 82 00 7f ff add %g1, -1, %g1 2009b30: 80 a0 60 00 cmp %g1, 0 2009b34: 14 80 00 07 bg 2009b50 <_Thread_Tickle_timeslice+0x7c> 2009b38: c2 24 20 84 st %g1, [ %l0 + 0x84 ] _Thread_Reset_timeslice(); 2009b3c: 40 00 0c 5b call 200cca8 <_Thread_Reset_timeslice> 2009b40: 01 00 00 00 nop executing->cpu_time_budget = _Thread_Ticks_per_timeslice; 2009b44: 03 00 80 5e sethi %hi(0x2017800), %g1 2009b48: c2 00 63 08 ld [ %g1 + 0x308 ], %g1 ! 2017b08 <_Thread_Ticks_per_timeslice> 2009b4c: c2 24 20 84 st %g1, [ %l0 + 0x84 ] 2009b50: 81 c7 e0 08 ret 2009b54: 81 e8 00 00 restore } break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: if ( --executing->cpu_time_budget == 0 ) 2009b58: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2009b5c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2009b60: 12 bf ff fc bne 2009b50 <_Thread_Tickle_timeslice+0x7c> <== NOT EXECUTED 2009b64: c2 24 20 84 st %g1, [ %l0 + 0x84 ] <== NOT EXECUTED (*executing->budget_callout)( executing ); 2009b68: c2 04 20 8c ld [ %l0 + 0x8c ], %g1 <== NOT EXECUTED 2009b6c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2009b70: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2009b74: 81 c7 e0 08 ret 2009b78: 81 e8 00 00 restore 02008fc8 <_Thread_queue_Dequeue>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 2008fc8: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 2008fcc: 80 a0 60 00 cmp %g1, 0 2008fd0: 02 80 00 05 be 2008fe4 <_Thread_queue_Dequeue+0x1c> 2008fd4: 80 a0 60 01 cmp %g1, 1 2008fd8: 12 80 00 09 bne 2008ffc <_Thread_queue_Dequeue+0x34> 2008fdc: 01 00 00 00 nop 2008fe0: 30 80 00 04 b,a 2008ff0 <_Thread_queue_Dequeue+0x28> case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_Dequeue_fifo( the_thread_queue ); 2008fe4: 82 13 c0 00 mov %o7, %g1 2008fe8: 40 00 0e 3a call 200c8d0 <_Thread_queue_Dequeue_fifo> 2008fec: 9e 10 40 00 mov %g1, %o7 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_Dequeue_priority( the_thread_queue ); 2008ff0: 82 13 c0 00 mov %o7, %g1 2008ff4: 40 00 00 0a call 200901c <_Thread_queue_Dequeue_priority> 2008ff8: 9e 10 40 00 mov %g1, %o7 the_thread = NULL; break; } return( the_thread ); } 2008ffc: 81 c3 e0 08 retl <== NOT EXECUTED 2009000: 90 10 20 00 clr %o0 <== NOT EXECUTED 0200c8d0 <_Thread_queue_Dequeue_fifo>: */ Thread_Control *_Thread_queue_Dequeue_fifo( Thread_queue_Control *the_thread_queue ) { 200c8d0: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *the_thread; _ISR_Disable( level ); 200c8d4: 7f ff d5 1b call 2001d40 200c8d8: a0 10 00 18 mov %i0, %l0 200c8dc: 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)); 200c8e0: f0 06 00 00 ld [ %i0 ], %i0 if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) { 200c8e4: 82 04 20 04 add %l0, 4, %g1 200c8e8: 80 a6 00 01 cmp %i0, %g1 200c8ec: 22 80 00 16 be,a 200c944 <_Thread_queue_Dequeue_fifo+0x74> 200c8f0: 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; 200c8f4: c2 06 00 00 ld [ %i0 ], %g1 the_chain->first = new_first; 200c8f8: 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 ) ) { 200c8fc: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 new_first->previous = _Chain_Head(the_chain); 200c900: e0 20 60 04 st %l0, [ %g1 + 4 ] 200c904: 80 a0 a0 02 cmp %g2, 2 200c908: 02 80 00 05 be 200c91c <_Thread_queue_Dequeue_fifo+0x4c> 200c90c: c0 26 20 44 clr [ %i0 + 0x44 ] _ISR_Enable( level ); 200c910: 7f ff d5 10 call 2001d50 200c914: 01 00 00 00 nop 200c918: 30 80 00 07 b,a 200c934 <_Thread_queue_Dequeue_fifo+0x64> RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 200c91c: 82 10 20 03 mov 3, %g1 ! 3 200c920: c2 26 20 50 st %g1, [ %i0 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 200c924: 7f ff d5 0b call 2001d50 200c928: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 200c92c: 7f ff f5 e7 call 200a0c8 <_Watchdog_Remove> 200c930: 90 06 20 48 add %i0, 0x48, %o0 _Thread_Unblock( the_thread ); 200c934: 7f ff ff e1 call 200c8b8 <_Thread_Unblock> 200c938: 90 10 00 18 mov %i0, %o0 200c93c: 81 c7 e0 08 ret 200c940: 81 e8 00 00 restore #endif return the_thread; } switch ( the_thread_queue->sync_state ) { 200c944: 80 a0 60 02 cmp %g1, 2 200c948: 18 80 00 06 bgu 200c960 <_Thread_queue_Dequeue_fifo+0x90> 200c94c: 80 a0 60 03 cmp %g1, 3 200c950: 80 a0 60 01 cmp %g1, 1 200c954: 1a 80 00 0a bcc 200c97c <_Thread_queue_Dequeue_fifo+0xac> 200c958: 82 10 20 03 mov 3, %g1 200c95c: 30 80 00 03 b,a 200c968 <_Thread_queue_Dequeue_fifo+0x98> 200c960: 12 bf ff f7 bne 200c93c <_Thread_queue_Dequeue_fifo+0x6c> <== NOT EXECUTED 200c964: b0 10 20 00 clr %i0 <== NOT EXECUTED case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 200c968: b0 10 20 00 clr %i0 200c96c: 7f ff d4 f9 call 2001d50 200c970: 90 10 00 02 mov %g2, %o0 200c974: 81 c7 e0 08 ret 200c978: 81 e8 00 00 restore return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 200c97c: c2 24 20 30 st %g1, [ %l0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 200c980: 7f ff d4 f4 call 2001d50 <== NOT EXECUTED 200c984: 01 00 00 00 nop <== NOT EXECUTED return _Thread_Executing; 200c988: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200c98c: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED } return NULL; /* this is only to prevent warnings */ } 200c990: 81 c7 e0 08 ret <== NOT EXECUTED 200c994: 81 e8 00 00 restore <== NOT EXECUTED 0200901c <_Thread_queue_Dequeue_priority>: */ Thread_Control *_Thread_queue_Dequeue_priority( Thread_queue_Control *the_thread_queue ) { 200901c: 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 ); 2009020: 7f ff e3 48 call 2001d40 2009024: 01 00 00 00 nop 2009028: 98 10 00 08 mov %o0, %o4 200902c: 86 10 20 00 clr %g3 2009030: 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)); 2009034: 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 ] ) ) { 2009038: 85 28 e0 02 sll %g3, 2, %g2 200903c: 83 28 e0 04 sll %g3, 4, %g1 2009040: 82 20 40 02 sub %g1, %g2, %g1 2009044: 82 06 00 01 add %i0, %g1, %g1 2009048: 82 00 60 04 add %g1, 4, %g1 200904c: 80 a2 00 01 cmp %o0, %g1 2009050: 02 80 00 04 be 2009060 <_Thread_queue_Dequeue_priority+0x44> 2009054: 88 01 20 0c add %g4, 0xc, %g4 the_thread = (Thread_Control *) 2009058: 10 80 00 1c b 20090c8 <_Thread_queue_Dequeue_priority+0xac> 200905c: 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++ ) { 2009060: 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 ; 2009064: 80 a0 e0 04 cmp %g3, 4 2009068: 32 bf ff f4 bne,a 2009038 <_Thread_queue_Dequeue_priority+0x1c> 200906c: d0 01 00 18 ld [ %g4 + %i0 ], %o0 the_thread_queue->Queues.Priority[ index ].first; goto dequeue; } } switch ( the_thread_queue->sync_state ) { 2009070: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 2009074: 80 a0 60 02 cmp %g1, 2 2009078: 18 80 00 06 bgu 2009090 <_Thread_queue_Dequeue_priority+0x74> 200907c: 80 a0 60 03 cmp %g1, 3 2009080: 80 a0 60 01 cmp %g1, 1 2009084: 1a 80 00 0a bcc 20090ac <_Thread_queue_Dequeue_priority+0x90> 2009088: 82 10 20 03 mov 3, %g1 200908c: 30 80 00 03 b,a 2009098 <_Thread_queue_Dequeue_priority+0x7c> 2009090: 12 80 00 0e bne 20090c8 <_Thread_queue_Dequeue_priority+0xac> <== NOT EXECUTED 2009094: b0 10 20 00 clr %i0 <== NOT EXECUTED case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 2009098: b0 10 20 00 clr %i0 200909c: 7f ff e3 2d call 2001d50 20090a0: 90 10 00 0c mov %o4, %o0 20090a4: 81 c7 e0 08 ret 20090a8: 81 e8 00 00 restore return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 20090ac: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 20090b0: 7f ff e3 28 call 2001d50 <== NOT EXECUTED 20090b4: 90 10 00 0c mov %o4, %o0 <== NOT EXECUTED return _Thread_Executing; 20090b8: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 20090bc: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED 20090c0: 81 c7 e0 08 ret <== NOT EXECUTED 20090c4: 81 e8 00 00 restore <== NOT EXECUTED } dequeue: the_thread->Wait.queue = NULL; new_first_node = the_thread->Wait.Block2n.first; 20090c8: 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 ) ) { 20090cc: 82 06 20 3c add %i0, 0x3c, %g1 _ISR_Enable( level ); return _Thread_Executing; } dequeue: the_thread->Wait.queue = NULL; 20090d0: 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 ) ) { 20090d4: 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; 20090d8: c4 06 00 00 ld [ %i0 ], %g2 previous_node = the_thread->Object.Node.previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 20090dc: 02 80 00 14 be 200912c <_Thread_queue_Dequeue_priority+0x110> 20090e0: c2 06 20 04 ld [ %i0 + 4 ], %g1 last_node = the_thread->Wait.Block2n.last; 20090e4: da 06 20 40 ld [ %i0 + 0x40 ], %o5 new_second_node = new_first_node->next; 20090e8: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 20090ec: 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; 20090f0: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 20090f4: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 20090f8: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 20090fc: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 2009100: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 2009104: 80 a0 80 01 cmp %g2, %g1 2009108: 22 80 00 0c be,a 2009138 <_Thread_queue_Dequeue_priority+0x11c> 200910c: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 /* > two threads on 2-n */ new_second_node->previous = 2009110: 82 00 e0 38 add %g3, 0x38, %g1 2009114: c2 21 20 04 st %g1, [ %g4 + 4 ] _Chain_Head( &new_first_thread->Wait.Block2n ); new_first_thread->Wait.Block2n.first = new_second_node; 2009118: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] new_first_thread->Wait.Block2n.last = last_node; 200911c: da 20 e0 40 st %o5, [ %g3 + 0x40 ] last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 2009120: 82 00 e0 3c add %g3, 0x3c, %g1 2009124: 10 80 00 04 b 2009134 <_Thread_queue_Dequeue_priority+0x118> 2009128: c2 23 40 00 st %g1, [ %o5 ] } } else { previous_node->next = next_node; next_node->previous = previous_node; 200912c: 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; 2009130: c4 20 40 00 st %g2, [ %g1 ] next_node->previous = previous_node; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 2009134: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 2009138: 80 a0 60 02 cmp %g1, 2 200913c: 02 80 00 08 be 200915c <_Thread_queue_Dequeue_priority+0x140> 2009140: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 2009144: 7f ff e3 03 call 2001d50 2009148: 90 10 00 0c mov %o4, %o0 _Thread_Unblock( the_thread ); 200914c: 7f ff ff ae call 2009004 <_Thread_Unblock> 2009150: 90 10 00 18 mov %i0, %o0 2009154: 81 c7 e0 08 ret 2009158: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 200915c: c2 26 20 50 st %g1, [ %i0 + 0x50 ] } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 2009160: 7f ff e2 fc call 2001d50 2009164: 90 10 00 0c mov %o4, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 2009168: 40 00 03 d8 call 200a0c8 <_Watchdog_Remove> 200916c: 90 06 20 48 add %i0, 0x48, %o0 _Thread_Unblock( the_thread ); 2009170: 7f ff ff a5 call 2009004 <_Thread_Unblock> 2009174: 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 ); } 2009178: 81 c7 e0 08 ret 200917c: 81 e8 00 00 restore 0200c998 <_Thread_queue_Enqueue_fifo>: void _Thread_queue_Enqueue_fifo ( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 200c998: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_queue_States sync_state; _ISR_Disable( level ); 200c99c: 7f ff d4 e9 call 2001d40 200c9a0: a0 10 00 18 mov %i0, %l0 void _Thread_queue_Enqueue_fifo ( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 200c9a4: 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; 200c9a8: c4 04 20 30 ld [ %l0 + 0x30 ], %g2 the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; switch ( sync_state ) { 200c9ac: 80 a0 a0 02 cmp %g2, 2 200c9b0: 02 80 00 10 be 200c9f0 <_Thread_queue_Enqueue_fifo+0x58> 200c9b4: c0 24 20 30 clr [ %l0 + 0x30 ] 200c9b8: 80 a0 a0 03 cmp %g2, 3 200c9bc: 02 80 00 12 be 200ca04 <_Thread_queue_Enqueue_fifo+0x6c> 200c9c0: 80 a0 a0 01 cmp %g2, 1 200c9c4: 32 80 00 1e bne,a 200ca3c <_Thread_queue_Enqueue_fifo+0xa4> 200c9c8: 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); 200c9cc: 82 04 20 04 add %l0, 4, %g1 200c9d0: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 200c9d4: c2 04 20 08 ld [ %l0 + 8 ], %g1 the_chain->last = the_node; 200c9d8: 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; 200c9dc: e0 26 60 44 st %l0, [ %i1 + 0x44 ] old_last_node->next = the_node; the_node->previous = old_last_node; 200c9e0: 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; 200c9e4: f2 20 40 00 st %i1, [ %g1 ] _ISR_Enable( level ); 200c9e8: 7f ff d4 da call 2001d50 200c9ec: 91 e8 00 08 restore %g0, %o0, %o0 return; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 200c9f0: c2 06 60 44 ld [ %i1 + 0x44 ], %g1 <== NOT EXECUTED the_thread->Wait.queue = NULL; 200c9f4: 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; 200c9f8: c2 00 60 3c ld [ %g1 + 0x3c ], %g1 <== NOT EXECUTED 200c9fc: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 200ca00: 30 80 00 0d b,a 200ca34 <_Thread_queue_Enqueue_fifo+0x9c> <== NOT EXECUTED break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 200ca04: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== NOT EXECUTED 200ca08: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 200ca0c: 12 80 00 0a bne 200ca34 <_Thread_queue_Enqueue_fifo+0x9c> <== NOT EXECUTED 200ca10: 01 00 00 00 nop <== NOT EXECUTED 200ca14: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 200ca18: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 200ca1c: 7f ff d4 cd call 2001d50 <== NOT EXECUTED 200ca20: 01 00 00 00 nop <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 200ca24: 7f ff f5 a9 call 200a0c8 <_Watchdog_Remove> <== NOT EXECUTED 200ca28: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 200ca2c: 10 80 00 04 b 200ca3c <_Thread_queue_Enqueue_fifo+0xa4> <== NOT EXECUTED 200ca30: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED } else _ISR_Enable( level ); 200ca34: 7f ff d4 c7 call 2001d50 <== NOT EXECUTED 200ca38: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 200ca3c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 200ca40: 7f ff ef 6e call 20087f8 <_Thread_Clear_state> <== NOT EXECUTED 200ca44: 81 e8 00 00 restore <== NOT EXECUTED 200ca48: 01 00 00 00 nop 02009204 <_Thread_queue_Enqueue_priority>: void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 2009204: 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; 2009208: 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); 200920c: 82 06 60 3c add %i1, 0x3c, %g1 the_chain->permanent_null = NULL; 2009210: 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); 2009214: c2 26 60 38 st %g1, [ %i1 + 0x38 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2009218: 82 06 60 38 add %i1, 0x38, %g1 200921c: 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 ) ) 2009220: 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); 2009224: 85 34 a0 06 srl %l2, 6, %g2 2009228: 12 80 00 34 bne 20092f8 <_Thread_queue_Enqueue_priority+0xf4> 200922c: 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; 2009230: 83 28 a0 04 sll %g2, 4, %g1 2009234: 85 28 a0 02 sll %g2, 2, %g2 2009238: 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; 200923c: 82 06 00 15 add %i0, %l5, %g1 2009240: 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 ); 2009244: 7f ff e2 bf call 2001d40 2009248: 01 00 00 00 nop 200924c: a2 10 00 08 mov %o0, %l1 search_thread = (Thread_Control *) header->first; 2009250: e0 06 00 15 ld [ %i0 + %l5 ], %l0 2009254: 10 80 00 18 b 20092b4 <_Thread_queue_Enqueue_priority+0xb0> 2009258: 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 ) 200925c: 80 a4 80 13 cmp %l2, %l3 2009260: 28 80 00 19 bleu,a 20092c4 <_Thread_queue_Enqueue_priority+0xc0> 2009264: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.next; 2009268: e0 04 00 00 ld [ %l0 ], %l0 if ( _Chain_Is_tail( header, (Chain_Node *)search_thread ) ) 200926c: 80 a4 00 14 cmp %l0, %l4 2009270: 22 80 00 15 be,a 20092c4 <_Thread_queue_Enqueue_priority+0xc0> 2009274: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; 2009278: e6 04 20 14 ld [ %l0 + 0x14 ], %l3 if ( priority <= search_priority ) 200927c: 80 a4 80 13 cmp %l2, %l3 2009280: 28 80 00 11 bleu,a 20092c4 <_Thread_queue_Enqueue_priority+0xc0> 2009284: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; #endif _ISR_Flash( level ); 2009288: 7f ff e2 b2 call 2001d50 200928c: 90 10 00 11 mov %l1, %o0 2009290: 7f ff e2 ac call 2001d40 2009294: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 2009298: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 200929c: 80 8d 80 01 btst %l6, %g1 20092a0: 32 80 00 05 bne,a 20092b4 <_Thread_queue_Enqueue_priority+0xb0> 20092a4: e0 04 00 00 ld [ %l0 ], %l0 _ISR_Enable( level ); 20092a8: 7f ff e2 aa call 2001d50 <== NOT EXECUTED 20092ac: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20092b0: 30 bf ff e5 b,a 2009244 <_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 ) ) { 20092b4: 80 a4 00 14 cmp %l0, %l4 20092b8: 32 bf ff e9 bne,a 200925c <_Thread_queue_Enqueue_priority+0x58> 20092bc: 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 ) 20092c0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 20092c4: 80 a0 60 01 cmp %g1, 1 20092c8: 32 80 00 47 bne,a 20093e4 <_Thread_queue_Enqueue_priority+0x1e0> 20092cc: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 <== NOT EXECUTED goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 20092d0: 80 a4 80 13 cmp %l2, %l3 20092d4: 02 80 00 3c be 20093c4 <_Thread_queue_Enqueue_priority+0x1c0> 20092d8: c0 26 20 30 clr [ %i0 + 0x30 ] goto equal_priority; search_node = (Chain_Node *) search_thread; previous_node = search_node->previous; 20092dc: c2 04 20 04 ld [ %l0 + 4 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 20092e0: e0 26 40 00 st %l0, [ %i1 ] the_node->previous = previous_node; 20092e4: 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; 20092e8: 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; 20092ec: f2 20 40 00 st %i1, [ %g1 ] search_node->previous = the_node; 20092f0: f2 24 20 04 st %i1, [ %l0 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 20092f4: 30 80 00 32 b,a 20093bc <_Thread_queue_Enqueue_priority+0x1b8> restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->last; 20092f8: 83 28 a0 04 sll %g2, 4, %g1 20092fc: 85 28 a0 02 sll %g2, 2, %g2 2009300: 82 20 40 02 sub %g1, %g2, %g1 2009304: a6 00 40 18 add %g1, %i0, %l3 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 2009308: aa 10 00 13 mov %l3, %l5 return; restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); 200930c: 7f ff e2 8d call 2001d40 2009310: 01 00 00 00 nop 2009314: a2 10 00 08 mov %o0, %l1 search_thread = (Thread_Control *) header->last; 2009318: e0 05 60 08 ld [ %l5 + 8 ], %l0 200931c: 10 80 00 18 b 200937c <_Thread_queue_Enqueue_priority+0x178> 2009320: 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 ) 2009324: 80 a4 80 14 cmp %l2, %l4 2009328: 3a 80 00 19 bcc,a 200938c <_Thread_queue_Enqueue_priority+0x188> 200932c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.previous; 2009330: e0 04 20 04 ld [ %l0 + 4 ], %l0 if ( _Chain_Is_head( header, (Chain_Node *)search_thread ) ) 2009334: 80 a4 00 13 cmp %l0, %l3 2009338: 22 80 00 15 be,a 200938c <_Thread_queue_Enqueue_priority+0x188> 200933c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; 2009340: e8 04 20 14 ld [ %l0 + 0x14 ], %l4 if ( priority >= search_priority ) 2009344: 80 a4 80 14 cmp %l2, %l4 2009348: 3a 80 00 11 bcc,a 200938c <_Thread_queue_Enqueue_priority+0x188> 200934c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED break; #endif _ISR_Flash( level ); 2009350: 7f ff e2 80 call 2001d50 2009354: 90 10 00 11 mov %l1, %o0 2009358: 7f ff e2 7a call 2001d40 200935c: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 2009360: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 2009364: 80 8d 80 01 btst %l6, %g1 2009368: 32 80 00 05 bne,a 200937c <_Thread_queue_Enqueue_priority+0x178> 200936c: e0 04 20 04 ld [ %l0 + 4 ], %l0 _ISR_Enable( level ); 2009370: 7f ff e2 78 call 2001d50 <== NOT EXECUTED 2009374: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2009378: 30 bf ff e5 b,a 200930c <_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 ) ) { 200937c: 80 a4 00 13 cmp %l0, %l3 2009380: 32 bf ff e9 bne,a 2009324 <_Thread_queue_Enqueue_priority+0x120> 2009384: 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 ) 2009388: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 200938c: 80 a0 60 01 cmp %g1, 1 2009390: 32 80 00 15 bne,a 20093e4 <_Thread_queue_Enqueue_priority+0x1e0> 2009394: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 <== NOT EXECUTED goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 2009398: 80 a4 80 14 cmp %l2, %l4 200939c: 02 80 00 0a be 20093c4 <_Thread_queue_Enqueue_priority+0x1c0> 20093a0: c0 26 20 30 clr [ %i0 + 0x30 ] goto equal_priority; search_node = (Chain_Node *) search_thread; next_node = search_node->next; 20093a4: c2 04 00 00 ld [ %l0 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = next_node; the_node->previous = search_node; 20093a8: 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; 20093ac: 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; 20093b0: 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; 20093b4: f2 24 00 00 st %i1, [ %l0 ] next_node->previous = the_node; 20093b8: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 20093bc: 7f ff e2 65 call 2001d50 20093c0: 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; 20093c4: 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; 20093c8: c4 00 60 04 ld [ %g1 + 4 ], %g2 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 20093cc: c2 26 40 00 st %g1, [ %i1 ] the_node->previous = previous_node; 20093d0: 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; 20093d4: 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; 20093d8: f2 20 80 00 st %i1, [ %g2 ] search_node->previous = the_node; 20093dc: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 20093e0: 30 bf ff f7 b,a 20093bc <_Thread_queue_Enqueue_priority+0x1b8> synchronize: sync_state = the_thread_queue->sync_state; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; switch ( sync_state ) { 20093e4: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 20093e8: 02 80 00 07 be 2009404 <_Thread_queue_Enqueue_priority+0x200> <== NOT EXECUTED 20093ec: c0 26 20 30 clr [ %i0 + 0x30 ] <== NOT EXECUTED 20093f0: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 20093f4: 12 80 00 17 bne 2009450 <_Thread_queue_Enqueue_priority+0x24c> <== NOT EXECUTED 20093f8: 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 ) ) { 20093fc: 10 80 00 07 b 2009418 <_Thread_queue_Enqueue_priority+0x214> <== NOT EXECUTED 2009400: 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; 2009404: c2 06 60 44 ld [ %i1 + 0x44 ], %g1 <== NOT EXECUTED the_thread->Wait.queue = NULL; 2009408: 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; 200940c: c2 00 60 3c ld [ %g1 + 0x3c ], %g1 <== NOT EXECUTED 2009410: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 2009414: 30 80 00 0c b,a 2009444 <_Thread_queue_Enqueue_priority+0x240> <== NOT EXECUTED break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 2009418: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 200941c: 12 80 00 0a bne 2009444 <_Thread_queue_Enqueue_priority+0x240> <== NOT EXECUTED 2009420: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 2009424: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 2009428: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 200942c: 7f ff e2 49 call 2001d50 <== NOT EXECUTED 2009430: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 2009434: 40 00 03 25 call 200a0c8 <_Watchdog_Remove> <== NOT EXECUTED 2009438: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 200943c: 10 80 00 05 b 2009450 <_Thread_queue_Enqueue_priority+0x24c> <== NOT EXECUTED 2009440: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED } else _ISR_Enable( level ); 2009444: 7f ff e2 43 call 2001d50 <== NOT EXECUTED 2009448: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200944c: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 2009450: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 2009454: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 2009458: 7f ff fc e8 call 20087f8 <_Thread_Clear_state> <== NOT EXECUTED 200945c: 81 e8 00 00 restore <== NOT EXECUTED 2009460: 01 00 00 00 nop 02009180 <_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 ) { 2009180: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *the_thread; the_thread = _Thread_Executing; 2009184: 03 00 80 5f sethi %hi(0x2017c00), %g1 else #endif /* * Set the blocking state for this thread queue in the thread. */ _Thread_Set_state( the_thread, the_thread_queue->state ); 2009188: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 Thread_queue_Timeout_callout handler ) { Thread_Control *the_thread; the_thread = _Thread_Executing; 200918c: e0 00 60 90 ld [ %g1 + 0x90 ], %l0 void _Thread_queue_Enqueue_with_handler( Thread_queue_Control *the_thread_queue, Watchdog_Interval timeout, Thread_queue_Timeout_callout handler ) { 2009190: 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 ); 2009194: 40 00 01 79 call 2009778 <_Thread_Set_state> 2009198: 90 10 00 10 mov %l0, %o0 /* * If the thread wants to timeout, then schedule its timer. */ if ( timeout ) { 200919c: 80 a6 60 00 cmp %i1, 0 20091a0: 22 80 00 0d be,a 20091d4 <_Thread_queue_Enqueue_with_handler+0x54> 20091a4: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 _Watchdog_Initialize( 20091a8: c2 04 20 08 ld [ %l0 + 8 ], %g1 ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 20091ac: 11 00 80 5f sethi %hi(0x2017c00), %o0 Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 20091b0: f4 24 20 64 st %i2, [ %l0 + 0x64 ] the_watchdog->id = id; 20091b4: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 20091b8: f2 24 20 54 st %i1, [ %l0 + 0x54 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 20091bc: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 20091c0: c0 24 20 6c clr [ %l0 + 0x6c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 20091c4: 90 12 20 b0 or %o0, 0xb0, %o0 20091c8: 40 00 03 68 call 2009f68 <_Watchdog_Insert> 20091cc: 92 04 20 48 add %l0, 0x48, %o1 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 20091d0: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 20091d4: 80 a0 60 00 cmp %g1, 0 20091d8: 02 80 00 05 be 20091ec <_Thread_queue_Enqueue_with_handler+0x6c> 20091dc: 80 a0 60 01 cmp %g1, 1 20091e0: 12 80 00 07 bne 20091fc <_Thread_queue_Enqueue_with_handler+0x7c> 20091e4: 01 00 00 00 nop 20091e8: 30 80 00 03 b,a 20091f4 <_Thread_queue_Enqueue_with_handler+0x74> case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Enqueue_fifo( the_thread_queue, the_thread ); 20091ec: 40 00 0d eb call 200c998 <_Thread_queue_Enqueue_fifo> 20091f0: 93 e8 00 10 restore %g0, %l0, %o1 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Enqueue_priority( the_thread_queue, the_thread ); 20091f4: 40 00 00 04 call 2009204 <_Thread_queue_Enqueue_priority> 20091f8: 93 e8 00 10 restore %g0, %l0, %o1 20091fc: 81 c7 e0 08 ret <== NOT EXECUTED 2009200: 81 e8 00 00 restore <== NOT EXECUTED 0200ca4c <_Thread_queue_Extract>: void _Thread_queue_Extract( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { switch ( the_thread_queue->discipline ) { 200ca4c: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 200ca50: 80 a0 60 00 cmp %g1, 0 200ca54: 02 80 00 05 be 200ca68 <_Thread_queue_Extract+0x1c> 200ca58: 80 a0 60 01 cmp %g1, 1 200ca5c: 12 80 00 09 bne 200ca80 <_Thread_queue_Extract+0x34> 200ca60: 94 10 20 00 clr %o2 200ca64: 30 80 00 04 b,a 200ca74 <_Thread_queue_Extract+0x28> case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Extract_fifo( the_thread_queue, the_thread ); 200ca68: 82 13 c0 00 mov %o7, %g1 200ca6c: 40 00 03 37 call 200d748 <_Thread_queue_Extract_fifo> 200ca70: 9e 10 40 00 mov %g1, %o7 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Extract_priority( the_thread_queue, the_thread ); 200ca74: 82 13 c0 00 mov %o7, %g1 200ca78: 40 00 00 04 call 200ca88 <_Thread_queue_Extract_priority_helper> 200ca7c: 9e 10 40 00 mov %g1, %o7 200ca80: 81 c3 e0 08 retl <== NOT EXECUTED 200ca84: 01 00 00 00 nop 0200d748 <_Thread_queue_Extract_fifo>: void _Thread_queue_Extract_fifo( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 200d748: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; _ISR_Disable( level ); 200d74c: 7f ff d1 7d call 2001d40 200d750: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 200d754: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 200d758: 03 00 00 ef sethi %hi(0x3bc00), %g1 200d75c: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 200d760: 80 88 80 01 btst %g2, %g1 200d764: 32 80 00 04 bne,a 200d774 <_Thread_queue_Extract_fifo+0x2c> 200d768: c2 06 40 00 ld [ %i1 ], %g1 _ISR_Enable( level ); 200d76c: 7f ff d1 79 call 2001d50 <== NOT EXECUTED 200d770: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 200d774: 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 ) ) { 200d778: c6 06 60 50 ld [ %i1 + 0x50 ], %g3 next->previous = previous; previous->next = next; 200d77c: c2 20 80 00 st %g1, [ %g2 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 200d780: c4 20 60 04 st %g2, [ %g1 + 4 ] 200d784: 80 a0 e0 02 cmp %g3, 2 200d788: 02 80 00 06 be 200d7a0 <_Thread_queue_Extract_fifo+0x58> 200d78c: c0 26 60 44 clr [ %i1 + 0x44 ] _ISR_Enable( level ); 200d790: 7f ff d1 70 call 2001d50 200d794: 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 ); 200d798: 10 80 00 0a b 200d7c0 <_Thread_queue_Extract_fifo+0x78> 200d79c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 200d7a0: 82 10 20 03 mov 3, %g1 200d7a4: c2 26 60 50 st %g1, [ %i1 + 0x50 ] } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 200d7a8: 7f ff d1 6a call 2001d50 200d7ac: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 200d7b0: 7f ff f2 46 call 200a0c8 <_Watchdog_Remove> 200d7b4: 90 06 60 48 add %i1, 0x48, %o0 200d7b8: 33 04 00 ff sethi %hi(0x1003fc00), %i1 200d7bc: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 200d7c0: 7f ff ec 0e call 20087f8 <_Thread_Clear_state> 200d7c4: 81 e8 00 00 restore 200d7c8: 01 00 00 00 nop 0200ca88 <_Thread_queue_Extract_priority_helper>: void _Thread_queue_Extract_priority_helper( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread, boolean requeuing ) { 200ca88: 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 ); 200ca8c: 7f ff d4 ad call 2001d40 200ca90: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 200ca94: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 200ca98: 03 00 00 ef sethi %hi(0x3bc00), %g1 200ca9c: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 200caa0: 80 88 80 01 btst %g2, %g1 200caa4: 32 80 00 03 bne,a 200cab0 <_Thread_queue_Extract_priority_helper+0x28> 200caa8: c6 06 60 38 ld [ %i1 + 0x38 ], %g3 _ISR_Enable( level ); 200caac: 30 80 00 1d b,a 200cb20 <_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 ) ) { 200cab0: 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; 200cab4: c4 06 40 00 ld [ %i1 ], %g2 previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 200cab8: 80 a0 c0 01 cmp %g3, %g1 200cabc: 02 80 00 14 be 200cb0c <_Thread_queue_Extract_priority_helper+0x84> 200cac0: 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; 200cac4: da 06 60 40 ld [ %i1 + 0x40 ], %o5 new_second_node = new_first_node->next; 200cac8: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 200cacc: 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; 200cad0: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 200cad4: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 200cad8: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 200cadc: c4 06 60 38 ld [ %i1 + 0x38 ], %g2 200cae0: c2 06 60 40 ld [ %i1 + 0x40 ], %g1 200cae4: 80 a0 80 01 cmp %g2, %g1 200cae8: 02 80 00 0c be 200cb18 <_Thread_queue_Extract_priority_helper+0x90> 200caec: 80 a6 a0 00 cmp %i2, 0 /* > two threads on 2-n */ new_second_node->previous = 200caf0: 82 00 e0 38 add %g3, 0x38, %g1 <== NOT EXECUTED 200caf4: 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; 200caf8: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] <== NOT EXECUTED new_first_thread->Wait.Block2n.last = last_node; 200cafc: da 20 e0 40 st %o5, [ %g3 + 0x40 ] <== NOT EXECUTED last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 200cb00: 82 00 e0 3c add %g3, 0x3c, %g1 <== NOT EXECUTED 200cb04: 10 80 00 05 b 200cb18 <_Thread_queue_Extract_priority_helper+0x90> <== NOT EXECUTED 200cb08: c2 23 40 00 st %g1, [ %o5 ] <== NOT EXECUTED } } else { previous_node->next = next_node; next_node->previous = previous_node; 200cb0c: 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; 200cb10: c4 20 40 00 st %g2, [ %g1 ] /* * If we are not supposed to touch timers or the thread's state, return. */ if ( requeuing ) { 200cb14: 80 a6 a0 00 cmp %i2, 0 200cb18: 22 80 00 04 be,a 200cb28 <_Thread_queue_Extract_priority_helper+0xa0> 200cb1c: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 _ISR_Enable( level ); 200cb20: 7f ff d4 8c call 2001d50 200cb24: 91 e8 00 08 restore %g0, %o0, %o0 return; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 200cb28: 80 a0 60 02 cmp %g1, 2 200cb2c: 02 80 00 06 be 200cb44 <_Thread_queue_Extract_priority_helper+0xbc> 200cb30: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 200cb34: 7f ff d4 87 call 2001d50 200cb38: 33 04 00 ff sethi %hi(0x1003fc00), %i1 200cb3c: 10 80 00 08 b 200cb5c <_Thread_queue_Extract_priority_helper+0xd4> 200cb40: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 200cb44: c2 26 20 50 st %g1, [ %i0 + 0x50 ] <== NOT EXECUTED } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 200cb48: 7f ff d4 82 call 2001d50 <== NOT EXECUTED 200cb4c: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 200cb50: 7f ff f5 5e call 200a0c8 <_Watchdog_Remove> <== NOT EXECUTED 200cb54: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED 200cb58: b2 16 63 f8 or %i1, 0x3f8, %i1 <== NOT EXECUTED 200cb5c: 7f ff ef 27 call 20087f8 <_Thread_Clear_state> 200cb60: 81 e8 00 00 restore 200cb64: 01 00 00 00 nop 02009464 <_Thread_queue_Extract_with_proxy>: */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 2009464: 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; 2009468: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 200946c: 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 ) ) { 2009470: 03 00 00 ef sethi %hi(0x3bc00), %g1 2009474: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 2009478: 80 88 80 01 btst %g2, %g1 200947c: 02 80 00 1e be 20094f4 <_Thread_queue_Extract_with_proxy+0x90> 2009480: b0 10 20 00 clr %i0 if ( _States_Is_waiting_for_rpc_reply( state ) && 2009484: 03 00 00 08 sethi %hi(0x2000), %g1 2009488: 80 88 80 01 btst %g2, %g1 200948c: 22 80 00 17 be,a 20094e8 <_Thread_queue_Extract_with_proxy+0x84> 2009490: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 2009494: 03 00 00 e7 sethi %hi(0x39c00), %g1 <== NOT EXECUTED 2009498: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 39ee0 <== NOT EXECUTED 200949c: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 20094a0: 22 80 00 12 be,a 20094e8 <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 20094a4: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED _States_Is_locally_blocked( state ) ) { the_information = _Objects_Get_information( the_thread->Wait.id ); 20094a8: c6 04 20 20 ld [ %l0 + 0x20 ], %g3 <== NOT EXECUTED proxy_extract_callout = 20094ac: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 20094b0: 85 30 e0 16 srl %g3, 0x16, %g2 <== NOT EXECUTED 20094b4: 82 10 63 10 or %g1, 0x310, %g1 <== NOT EXECUTED 20094b8: 84 08 a0 1c and %g2, 0x1c, %g2 <== NOT EXECUTED 20094bc: c2 00 40 02 ld [ %g1 + %g2 ], %g1 <== NOT EXECUTED 20094c0: 87 30 e0 1b srl %g3, 0x1b, %g3 <== NOT EXECUTED 20094c4: 87 28 e0 02 sll %g3, 2, %g3 <== NOT EXECUTED 20094c8: c2 00 40 03 ld [ %g1 + %g3 ], %g1 <== NOT EXECUTED 20094cc: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 <== NOT EXECUTED (Objects_Thread_queue_Extract_callout) the_information->extract; if ( proxy_extract_callout ) 20094d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20094d4: 22 80 00 05 be,a 20094e8 <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 20094d8: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED (*proxy_extract_callout)( the_thread ); 20094dc: 9f c0 40 00 call %g1 <== NOT EXECUTED 20094e0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 20094e4: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED 20094e8: 92 10 00 10 mov %l0, %o1 20094ec: 40 00 0d 58 call 200ca4c <_Thread_queue_Extract> 20094f0: b0 10 20 01 mov 1, %i0 return TRUE; } return FALSE; } 20094f4: 81 c7 e0 08 ret 20094f8: 81 e8 00 00 restore 0201a390 <_Thread_queue_First>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 201a390: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 201a394: 80 a0 60 00 cmp %g1, 0 201a398: 02 80 00 05 be 201a3ac <_Thread_queue_First+0x1c> 201a39c: 80 a0 60 01 cmp %g1, 1 201a3a0: 12 80 00 09 bne 201a3c4 <_Thread_queue_First+0x34> 201a3a4: 01 00 00 00 nop 201a3a8: 30 80 00 04 b,a 201a3b8 <_Thread_queue_First+0x28> case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_First_fifo( the_thread_queue ); 201a3ac: 82 13 c0 00 mov %o7, %g1 201a3b0: 40 00 02 e7 call 201af4c <_Thread_queue_First_fifo> 201a3b4: 9e 10 40 00 mov %g1, %o7 break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_First_priority( the_thread_queue ); 201a3b8: 82 13 c0 00 mov %o7, %g1 201a3bc: 40 00 00 04 call 201a3cc <_Thread_queue_First_priority> 201a3c0: 9e 10 40 00 mov %g1, %o7 the_thread = NULL; break; } return the_thread; } 201a3c4: 81 c3 e0 08 retl <== NOT EXECUTED 201a3c8: 90 10 20 00 clr %o0 <== NOT EXECUTED 020095a8 <_Thread_queue_Requeue>: void _Thread_queue_Requeue( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 20095a8: 9d e3 bf 98 save %sp, -104, %sp /* just in case the thread really wasn't blocked here */ if ( !the_thread_queue ) { 20095ac: 80 a6 20 00 cmp %i0, 0 20095b0: 02 80 00 18 be 2009610 <_Thread_queue_Requeue+0x68> 20095b4: 01 00 00 00 nop return; } switch ( the_thread_queue->discipline ) { 20095b8: e0 06 20 34 ld [ %i0 + 0x34 ], %l0 20095bc: 80 a4 20 01 cmp %l0, 1 20095c0: 12 80 00 14 bne 2009610 <_Thread_queue_Requeue+0x68> 20095c4: 01 00 00 00 nop break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: { Thread_queue_Control *tq = the_thread_queue; ISR_Level level; _ISR_Disable( level ); 20095c8: 7f ff e1 de call 2001d40 20095cc: 01 00 00 00 nop 20095d0: a2 10 00 08 mov %o0, %l1 if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 20095d4: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 20095d8: 03 00 00 ef sethi %hi(0x3bc00), %g1 20095dc: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 20095e0: 80 88 80 01 btst %g2, %g1 20095e4: 02 80 00 09 be 2009608 <_Thread_queue_Requeue+0x60> 20095e8: 90 10 00 18 mov %i0, %o0 _Thread_queue_Enter_critical_section( tq ); _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE ); 20095ec: 92 10 00 19 mov %i1, %o1 20095f0: 94 10 20 01 mov 1, %o2 20095f4: 40 00 0d 25 call 200ca88 <_Thread_queue_Extract_priority_helper> 20095f8: e0 26 20 30 st %l0, [ %i0 + 0x30 ] _Thread_queue_Enqueue_priority( tq, the_thread ); 20095fc: 90 10 00 18 mov %i0, %o0 2009600: 7f ff ff 01 call 2009204 <_Thread_queue_Enqueue_priority> 2009604: 92 10 00 19 mov %i1, %o1 } _ISR_Enable( level ); 2009608: 7f ff e1 d2 call 2001d50 200960c: 91 e8 00 11 restore %g0, %l1, %o0 2009610: 81 c7 e0 08 ret <== NOT EXECUTED 2009614: 81 e8 00 00 restore <== NOT EXECUTED 02009618 <_Thread_queue_Timeout>: void _Thread_queue_Timeout( Objects_Id id, void *ignored ) { 2009618: 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 ) ) { 200961c: 92 96 20 00 orcc %i0, 0, %o1 2009620: 12 80 00 0a bne 2009648 <_Thread_queue_Timeout+0x30> 2009624: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2009628: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200962c: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2009630: 84 00 a0 01 inc %g2 <== NOT EXECUTED 2009634: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] <== NOT EXECUTED Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 2009638: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200963c: d2 00 60 90 ld [ %g1 + 0x90 ], %o1 ! 2017c90 <_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; 2009640: 10 80 00 18 b 20096a0 <_Thread_queue_Timeout+0x88> <== NOT EXECUTED 2009644: 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); 2009648: 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 ) { 200964c: 80 a0 a0 04 cmp %g2, 4 2009650: 18 80 00 0e bgu 2009688 <_Thread_queue_Timeout+0x70> 2009654: 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 :) */ 2009658: 83 32 60 1b srl %o1, 0x1b, %g1 200965c: 80 a0 60 01 cmp %g1, 1 2009660: 12 80 00 0a bne 2009688 <_Thread_queue_Timeout+0x70> 2009664: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2009668: 83 28 a0 02 sll %g2, 2, %g1 200966c: 05 00 80 5e sethi %hi(0x2017800), %g2 2009670: 84 10 a3 10 or %g2, 0x310, %g2 ! 2017b10 <_Objects_Information_table> 2009674: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2009678: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 200967c: 80 a2 20 00 cmp %o0, 0 2009680: 12 80 00 05 bne 2009694 <_Thread_queue_Timeout+0x7c> 2009684: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2009688: 92 10 20 00 clr %o1 <== NOT EXECUTED 200968c: 10 80 00 05 b 20096a0 <_Thread_queue_Timeout+0x88> <== NOT EXECUTED 2009690: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2009694: 7f ff f8 1f call 2007710 <_Objects_Get> 2009698: 94 07 bf f4 add %fp, -12, %o2 200969c: 92 10 00 08 mov %o0, %o1 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 20096a0: c2 07 bf f4 ld [ %fp + -12 ], %g1 20096a4: 80 a0 60 00 cmp %g1, 0 20096a8: 12 80 00 18 bne 2009708 <_Thread_queue_Timeout+0xf0> 20096ac: 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; 20096b0: 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 && 20096b4: c6 00 a0 30 ld [ %g2 + 0x30 ], %g3 20096b8: 80 a0 e0 00 cmp %g3, 0 20096bc: 02 80 00 0b be 20096e8 <_Thread_queue_Timeout+0xd0> 20096c0: 03 00 80 5f sethi %hi(0x2017c00), %g1 20096c4: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2017c90 <_Thread_Executing> <== NOT EXECUTED 20096c8: 80 a2 40 01 cmp %o1, %g1 <== NOT EXECUTED 20096cc: 32 80 00 08 bne,a 20096ec <_Thread_queue_Timeout+0xd4> <== NOT EXECUTED 20096d0: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED ) 20096d4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 20096d8: 02 80 00 08 be 20096f8 <_Thread_queue_Timeout+0xe0> <== NOT EXECUTED 20096dc: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT; 20096e0: 10 80 00 06 b 20096f8 <_Thread_queue_Timeout+0xe0> <== NOT EXECUTED 20096e4: c2 20 a0 30 st %g1, [ %g2 + 0x30 ] <== NOT EXECUTED } else { the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 20096e8: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 20096ec: d0 02 60 44 ld [ %o1 + 0x44 ], %o0 20096f0: 40 00 0c d7 call 200ca4c <_Thread_queue_Extract> 20096f4: 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; 20096f8: 05 00 80 5e sethi %hi(0x2017800), %g2 20096fc: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2009700: 82 00 7f ff add %g1, -1, %g1 2009704: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 2009708: 81 c7 e0 08 ret 200970c: 81 e8 00 00 restore 02012a18 <_Timer_Server_body>: */ Thread _Timer_Server_body( uint32_t ignored ) { 2012a18: 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; 2012a1c: 03 00 80 c4 sethi %hi(0x2031000), %g1 2012a20: c8 00 61 34 ld [ %g1 + 0x134 ], %g4 ! 2031134 <_Watchdog_Ticks_since_boot> _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 2012a24: 03 00 80 c4 sethi %hi(0x2031000), %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2012a28: 07 00 80 c3 sethi %hi(0x2030c00), %g3 2012a2c: da 00 60 6c ld [ %g1 + 0x6c ], %o5 2012a30: c2 00 e3 b0 ld [ %g3 + 0x3b0 ], %g1 /* * Initialize the "last time" markers to indicate the timer that * the server was initiated. */ _Timer_Server_ticks_last_time = _Watchdog_Ticks_since_boot; 2012a34: 05 00 80 c3 sethi %hi(0x2030c00), %g2 2012a38: 82 00 60 01 inc %g1 2012a3c: c8 20 a2 bc st %g4, [ %g2 + 0x2bc ] 2012a40: c2 20 e3 b0 st %g1, [ %g3 + 0x3b0 ] _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 2012a44: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2012a48: da 20 62 b8 st %o5, [ %g1 + 0x2b8 ] ! 2030eb8 <_Timer_Server_seconds_last_time> ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 2012a4c: 03 00 80 c4 sethi %hi(0x2031000), %g1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 2012a50: 27 00 80 c3 sethi %hi(0x2030c00), %l3 2012a54: ba 10 60 b0 or %g1, 0xb0, %i5 2012a58: 82 14 e2 ac or %l3, 0x2ac, %g1 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 2012a5c: ae 00 60 04 add %g1, 4, %l7 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 2012a60: 03 00 80 c3 sethi %hi(0x2030c00), %g1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 2012a64: 25 00 80 c3 sethi %hi(0x2030c00), %l2 2012a68: a2 10 62 cc or %g1, 0x2cc, %l1 2012a6c: 82 14 a2 c0 or %l2, 0x2c0, %g1 2012a70: 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; 2012a74: ac 00 60 04 add %g1, 4, %l6 /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 2012a78: 21 00 80 c4 sethi %hi(0x2031000), %l0 _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 2012a7c: 03 00 80 c4 sethi %hi(0x2031000), %g1 2012a80: aa 10 60 a4 or %g1, 0xa4, %l5 ! 20310a4 <_Watchdog_Seconds_chain> 2012a84: d0 04 23 68 ld [ %l0 + 0x368 ], %o0 2012a88: 40 00 10 59 call 2016bec <_Thread_Set_state> 2012a8c: 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)); 2012a90: c2 04 e2 ac ld [ %l3 + 0x2ac ], %g1 _Timer_Server_reset_ticks_timer(); 2012a94: 80 a0 40 17 cmp %g1, %l7 2012a98: 22 80 00 09 be,a 2012abc <_Timer_Server_body+0xa4> 2012a9c: c2 04 a2 c0 ld [ %l2 + 0x2c0 ], %g1 2012aa0: d2 04 23 68 ld [ %l0 + 0x368 ], %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 2012aa4: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 2012aa8: 90 10 00 1d mov %i5, %o0 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 2012aac: c2 22 60 54 st %g1, [ %o1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 2012ab0: 40 00 13 0d call 20176e4 <_Watchdog_Insert> 2012ab4: 92 02 60 48 add %o1, 0x48, %o1 2012ab8: c2 04 a2 c0 ld [ %l2 + 0x2c0 ], %g1 _Timer_Server_reset_seconds_timer(); 2012abc: 80 a0 40 16 cmp %g1, %l6 2012ac0: 02 80 00 06 be 2012ad8 <_Timer_Server_body+0xc0> 2012ac4: 92 10 00 11 mov %l1, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 2012ac8: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 2012acc: c2 24 60 0c st %g1, [ %l1 + 0xc ] <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 2012ad0: 40 00 13 05 call 20176e4 <_Watchdog_Insert> <== NOT EXECUTED 2012ad4: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED _Thread_Enable_dispatch(); 2012ad8: 7f ff ff c3 call 20129e4 <_Thread_Enable_dispatch> 2012adc: 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(); 2012ae0: d0 04 23 68 ld [ %l0 + 0x368 ], %o0 2012ae4: 40 00 13 58 call 2017844 <_Watchdog_Remove> 2012ae8: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_stop_seconds_timer(); 2012aec: 40 00 13 56 call 2017844 <_Watchdog_Remove> 2012af0: 90 10 00 11 mov %l1, %o0 2012af4: c2 05 23 b0 ld [ %l4 + 0x3b0 ], %g1 2012af8: 82 00 60 01 inc %g1 2012afc: c2 25 23 b0 st %g1, [ %l4 + 0x3b0 ] * 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(); 2012b00: 7f ff ff a7 call 201299c <_Timer_Server_process_ticks_chain> 2012b04: 01 00 00 00 nop _Timer_Server_process_seconds_chain(); 2012b08: 7f ff ff 8d call 201293c <_Timer_Server_process_seconds_chain> 2012b0c: 01 00 00 00 nop /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 2012b10: 10 bf ff de b 2012a88 <_Timer_Server_body+0x70> 2012b14: d0 04 23 68 ld [ %l0 + 0x368 ], %o0 0201299c <_Timer_Server_process_ticks_chain>: void _Timer_Server_process_ticks_chain(void) { Watchdog_Interval snapshot; Watchdog_Interval ticks; snapshot = _Watchdog_Ticks_since_boot; 201299c: 03 00 80 c4 sethi %hi(0x2031000), %g1 20129a0: c4 00 61 34 ld [ %g1 + 0x134 ], %g2 ! 2031134 <_Watchdog_Ticks_since_boot> if ( snapshot >= _Timer_Server_ticks_last_time ) 20129a4: 03 00 80 c3 sethi %hi(0x2030c00), %g1 20129a8: c2 00 62 bc ld [ %g1 + 0x2bc ], %g1 ! 2030ebc <_Timer_Server_ticks_last_time> 20129ac: 80 a0 80 01 cmp %g2, %g1 20129b0: 1a 80 00 04 bcc 20129c0 <_Timer_Server_process_ticks_chain+0x24> 20129b4: 94 20 80 01 sub %g2, %g1, %o2 ticks = snapshot - _Timer_Server_ticks_last_time; else ticks = (0xFFFFFFFF - _Timer_Server_ticks_last_time) + snapshot; 20129b8: 82 38 00 01 xnor %g0, %g1, %g1 <== NOT EXECUTED 20129bc: 94 00 40 02 add %g1, %g2, %o2 <== NOT EXECUTED _Timer_Server_ticks_last_time = snapshot; 20129c0: 03 00 80 c3 sethi %hi(0x2030c00), %g1 _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 20129c4: 11 00 80 c3 sethi %hi(0x2030c00), %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; 20129c8: c4 20 62 bc st %g2, [ %g1 + 0x2bc ] _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 20129cc: 90 12 22 ac or %o0, 0x2ac, %o0 20129d0: 92 10 20 00 clr %o1 20129d4: 82 13 c0 00 mov %o7, %g1 20129d8: 40 00 13 1b call 2017644 <_Watchdog_Adjust> 20129dc: 9e 10 40 00 mov %g1, %o7 20129e0: 01 00 00 00 nop 0200b9ec <_Timespec_Divide>: const struct timespec *lhs, const struct timespec *rhs, uint32_t *ival_percentage, uint32_t *fval_percentage ) { 200b9ec: 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; 200b9f0: 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; 200b9f4: de 06 20 04 ld [ %i0 + 4 ], %o7 right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 200b9f8: 96 10 00 01 mov %g1, %o3 200b9fc: 95 38 60 1f sra %g1, 0x1f, %o2 200ba00: 83 30 60 1d srl %g1, 0x1d, %g1 200ba04: 9b 2a e0 03 sll %o3, 3, %o5 200ba08: 99 2a a0 03 sll %o2, 3, %o4 200ba0c: 98 10 40 0c or %g1, %o4, %o4 200ba10: 83 33 60 1b srl %o5, 0x1b, %g1 200ba14: 85 2b 20 05 sll %o4, 5, %g2 200ba18: 87 2b 60 05 sll %o5, 5, %g3 200ba1c: 84 10 40 02 or %g1, %g2, %g2 200ba20: 86 a0 c0 0d subcc %g3, %o5, %g3 200ba24: 83 30 e0 1a srl %g3, 0x1a, %g1 200ba28: 84 60 80 0c subx %g2, %o4, %g2 200ba2c: 9b 28 e0 06 sll %g3, 6, %o5 200ba30: 99 28 a0 06 sll %g2, 6, %o4 200ba34: 9a a3 40 03 subcc %o5, %g3, %o5 200ba38: 98 10 40 0c or %g1, %o4, %o4 200ba3c: 98 63 00 02 subx %o4, %g2, %o4 200ba40: 9a 83 40 0b addcc %o5, %o3, %o5 200ba44: 83 33 60 1e srl %o5, 0x1e, %g1 200ba48: 98 43 00 0a addx %o4, %o2, %o4 200ba4c: 87 2b 60 02 sll %o5, 2, %g3 200ba50: 85 2b 20 02 sll %o4, 2, %g2 200ba54: 9a 83 40 03 addcc %o5, %g3, %o5 200ba58: 84 10 40 02 or %g1, %g2, %g2 200ba5c: 83 33 60 1e srl %o5, 0x1e, %g1 200ba60: 98 43 00 02 addx %o4, %g2, %o4 200ba64: 87 2b 60 02 sll %o5, 2, %g3 200ba68: 85 2b 20 02 sll %o4, 2, %g2 200ba6c: 9a 83 40 03 addcc %o5, %g3, %o5 200ba70: 84 10 40 02 or %g1, %g2, %g2 200ba74: 83 33 60 1e srl %o5, 0x1e, %g1 200ba78: 98 43 00 02 addx %o4, %g2, %o4 200ba7c: 85 2b 20 02 sll %o4, 2, %g2 200ba80: 84 10 40 02 or %g1, %g2, %g2 right += rhs->tv_nsec; 200ba84: 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; 200ba88: 87 2b 60 02 sll %o5, 2, %g3 200ba8c: 9a 83 40 03 addcc %o5, %g3, %o5 right += rhs->tv_nsec; 200ba90: 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; 200ba94: 98 43 00 02 addx %o4, %g2, %o4 200ba98: 89 33 60 17 srl %o5, 0x17, %g4 200ba9c: 85 2b 20 09 sll %o4, 9, %g2 200baa0: 87 2b 60 09 sll %o5, 9, %g3 200baa4: 84 11 00 02 or %g4, %g2, %g2 right += rhs->tv_nsec; 200baa8: 96 80 c0 01 addcc %g3, %g1, %o3 200baac: 94 40 80 0a addx %g2, %o2, %o2 if ( right == 0 ) { 200bab0: 80 92 80 0b orcc %o2, %o3, %g0 200bab4: 12 80 00 06 bne 200bacc <_Timespec_Divide+0xe0> 200bab8: f0 06 00 00 ld [ %i0 ], %i0 *ival_percentage = 0; 200babc: c0 26 80 00 clr [ %i2 ] <== NOT EXECUTED *fval_percentage = 0; 200bac0: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED 200bac4: 81 c7 e0 08 ret <== NOT EXECUTED 200bac8: 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; 200bacc: 83 36 20 1d srl %i0, 0x1d, %g1 200bad0: 9b 2e 20 03 sll %i0, 3, %o5 200bad4: 91 3e 20 1f sra %i0, 0x1f, %o0 200bad8: 99 2a 20 03 sll %o0, 3, %o4 200badc: 98 10 40 0c or %g1, %o4, %o4 200bae0: 83 33 60 1b srl %o5, 0x1b, %g1 200bae4: 85 2b 20 05 sll %o4, 5, %g2 200bae8: 87 2b 60 05 sll %o5, 5, %g3 200baec: 84 10 40 02 or %g1, %g2, %g2 200baf0: 86 a0 c0 0d subcc %g3, %o5, %g3 200baf4: 83 30 e0 1a srl %g3, 0x1a, %g1 200baf8: 84 60 80 0c subx %g2, %o4, %g2 200bafc: 9b 28 e0 06 sll %g3, 6, %o5 200bb00: 99 28 a0 06 sll %g2, 6, %o4 200bb04: 9a a3 40 03 subcc %o5, %g3, %o5 200bb08: 98 10 40 0c or %g1, %o4, %o4 200bb0c: 98 63 00 02 subx %o4, %g2, %o4 200bb10: 9a 83 40 18 addcc %o5, %i0, %o5 200bb14: 83 33 60 1e srl %o5, 0x1e, %g1 200bb18: 98 43 00 08 addx %o4, %o0, %o4 200bb1c: 87 2b 60 02 sll %o5, 2, %g3 200bb20: 85 2b 20 02 sll %o4, 2, %g2 200bb24: 9a 83 40 03 addcc %o5, %g3, %o5 200bb28: 84 10 40 02 or %g1, %g2, %g2 200bb2c: 83 33 60 1e srl %o5, 0x1e, %g1 200bb30: 98 43 00 02 addx %o4, %g2, %o4 200bb34: 87 2b 60 02 sll %o5, 2, %g3 200bb38: 85 2b 20 02 sll %o4, 2, %g2 200bb3c: 9a 83 40 03 addcc %o5, %g3, %o5 200bb40: 84 10 40 02 or %g1, %g2, %g2 200bb44: 83 33 60 1e srl %o5, 0x1e, %g1 200bb48: 98 43 00 02 addx %o4, %g2, %o4 200bb4c: 87 2b 60 02 sll %o5, 2, %g3 200bb50: 85 2b 20 02 sll %o4, 2, %g2 200bb54: 9a 83 40 03 addcc %o5, %g3, %o5 200bb58: 84 10 40 02 or %g1, %g2, %g2 200bb5c: 83 33 60 17 srl %o5, 0x17, %g1 200bb60: 98 43 00 02 addx %o4, %g2, %o4 200bb64: 93 2b 60 09 sll %o5, 9, %o1 200bb68: 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; 200bb6c: 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; 200bb70: 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; 200bb74: 83 32 60 1e srl %o1, 0x1e, %g1 200bb78: a1 3b e0 1f sra %o7, 0x1f, %l0 200bb7c: 87 2a 60 02 sll %o1, 2, %g3 200bb80: 90 42 00 10 addx %o0, %l0, %o0 200bb84: 85 2a 20 02 sll %o0, 2, %g2 200bb88: 84 10 40 02 or %g1, %g2, %g2 200bb8c: 83 30 e0 1b srl %g3, 0x1b, %g1 200bb90: 99 28 a0 05 sll %g2, 5, %o4 200bb94: 9b 28 e0 05 sll %g3, 5, %o5 200bb98: 98 10 40 0c or %g1, %o4, %o4 200bb9c: 9a a3 40 03 subcc %o5, %g3, %o5 200bba0: 98 63 00 02 subx %o4, %g2, %o4 200bba4: 9a 83 40 09 addcc %o5, %o1, %o5 200bba8: 83 33 60 1e srl %o5, 0x1e, %g1 200bbac: 98 43 00 08 addx %o4, %o0, %o4 200bbb0: 87 2b 60 02 sll %o5, 2, %g3 200bbb4: 85 2b 20 02 sll %o4, 2, %g2 200bbb8: 9a 83 40 03 addcc %o5, %g3, %o5 200bbbc: 84 10 40 02 or %g1, %g2, %g2 200bbc0: 83 33 60 1e srl %o5, 0x1e, %g1 200bbc4: 87 2b 60 02 sll %o5, 2, %g3 200bbc8: 98 43 00 02 addx %o4, %g2, %o4 200bbcc: 9a 83 40 03 addcc %o5, %g3, %o5 200bbd0: 85 2b 20 02 sll %o4, 2, %g2 200bbd4: 84 10 40 02 or %g1, %g2, %g2 200bbd8: 83 33 60 1b srl %o5, 0x1b, %g1 200bbdc: 98 43 00 02 addx %o4, %g2, %o4 200bbe0: 93 2b 60 05 sll %o5, 5, %o1 200bbe4: 91 2b 20 05 sll %o4, 5, %o0 200bbe8: 40 00 32 26 call 2018480 <__udivdi3> 200bbec: 90 10 40 08 or %g1, %o0, %o0 *ival_percentage = answer / 1000; 200bbf0: 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; 200bbf4: a0 10 00 08 mov %o0, %l0 200bbf8: a2 10 00 09 mov %o1, %l1 *ival_percentage = answer / 1000; 200bbfc: 96 10 23 e8 mov 0x3e8, %o3 200bc00: 40 00 32 20 call 2018480 <__udivdi3> 200bc04: 90 10 00 10 mov %l0, %o0 *fval_percentage = answer % 1000; 200bc08: 90 10 00 10 mov %l0, %o0 * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; *ival_percentage = answer / 1000; 200bc0c: d2 26 80 00 st %o1, [ %i2 ] *fval_percentage = answer % 1000; 200bc10: 94 10 20 00 clr %o2 200bc14: 92 10 00 11 mov %l1, %o1 200bc18: 40 00 32 f9 call 20187fc <__umoddi3> 200bc1c: 96 10 23 e8 mov 0x3e8, %o3 200bc20: d2 26 c0 00 st %o1, [ %i3 ] 200bc24: 81 c7 e0 08 ret 200bc28: 81 e8 00 00 restore 020139dc <_Timespec_From_ticks>: void _Timespec_From_ticks( uint32_t ticks, struct timespec *time ) { 20139dc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 20139e0: 03 00 80 99 sethi %hi(0x2026400), %g1 <== NOT EXECUTED 20139e4: d2 00 62 5c ld [ %g1 + 0x25c ], %o1 ! 202665c <_TOD_Microseconds_per_tick> <== NOT EXECUTED 20139e8: 40 00 2e 69 call 201f38c <.umul> <== NOT EXECUTED 20139ec: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 20139f0: 21 00 03 d0 sethi %hi(0xf4000), %l0 <== NOT EXECUTED struct timespec *time ) { uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 20139f4: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 20139f8: 7f ff b7 60 call 2001778 <.udiv> <== NOT EXECUTED 20139fc: 92 14 22 40 or %l0, 0x240, %o1 <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 2013a00: 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; 2013a04: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 2013a08: 40 00 2e 9b call 201f474 <.urem> <== NOT EXECUTED 2013a0c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2013a10: 85 2a 20 02 sll %o0, 2, %g2 <== NOT EXECUTED 2013a14: 83 2a 20 07 sll %o0, 7, %g1 <== NOT EXECUTED 2013a18: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 2013a1c: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 2013a20: 83 28 60 03 sll %g1, 3, %g1 <== NOT EXECUTED 2013a24: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED TOD_NANOSECONDS_PER_MICROSECOND; } 2013a28: 81 c7 e0 08 ret <== NOT EXECUTED 2013a2c: 81 e8 00 00 restore <== NOT EXECUTED 02013a30 <_Timespec_Is_valid>: boolean _Timespec_Is_valid( const struct timespec *time ) { if ( !time ) 2013a30: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2013a34: 02 80 00 0e be 2013a6c <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 2013a38: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_sec < 0 ) 2013a3c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 2013a40: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2013a44: 06 80 00 0a bl 2013a6c <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 2013a48: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_nsec < 0 ) 2013a4c: d0 02 20 04 ld [ %o0 + 4 ], %o0 <== NOT EXECUTED 2013a50: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2013a54: 06 80 00 06 bl 2013a6c <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 2013a58: 03 0e e6 b2 sethi %hi(0x3b9ac800), %g1 <== NOT EXECUTED 2013a5c: 82 10 61 ff or %g1, 0x1ff, %g1 ! 3b9ac9ff <== NOT EXECUTED 2013a60: 80 a0 40 08 cmp %g1, %o0 <== NOT EXECUTED 2013a64: 81 c3 e0 08 retl <== NOT EXECUTED 2013a68: 90 60 3f ff subx %g0, -1, %o0 <== NOT EXECUTED if ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) return FALSE; return TRUE; } 2013a6c: 81 c3 e0 08 retl <== NOT EXECUTED 2013a70: 90 10 20 00 clr %o0 <== NOT EXECUTED 02013a74 <_Timespec_To_ticks>: */ uint32_t _Timespec_To_ticks( const struct timespec *time ) { 2013a74: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) 2013a78: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED 2013a7c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2013a80: 12 80 00 06 bne 2013a98 <_Timespec_To_ticks+0x24> <== NOT EXECUTED 2013a84: a4 10 00 18 mov %i0, %l2 <== NOT EXECUTED 2013a88: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 2013a8c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2013a90: 02 80 00 13 be 2013adc <_Timespec_To_ticks+0x68> <== NOT EXECUTED 2013a94: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; ticks = time->tv_sec * TOD_TICKS_PER_SECOND; 2013a98: 03 00 80 99 sethi %hi(0x2026400), %g1 <== NOT EXECUTED 2013a9c: e2 00 62 5c ld [ %g1 + 0x25c ], %l1 ! 202665c <_TOD_Microseconds_per_tick> <== NOT EXECUTED 2013aa0: 11 00 03 d0 sethi %hi(0xf4000), %o0 <== NOT EXECUTED 2013aa4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 2013aa8: 7f ff b7 34 call 2001778 <.udiv> <== NOT EXECUTED 2013aac: 90 12 22 40 or %o0, 0x240, %o0 <== NOT EXECUTED 2013ab0: 40 00 2e 37 call 201f38c <.umul> <== NOT EXECUTED 2013ab4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2013ab8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED ticks += (time->tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND) / 2013abc: d0 04 a0 04 ld [ %l2 + 4 ], %o0 <== NOT EXECUTED 2013ac0: 7f ff b7 2e call 2001778 <.udiv> <== NOT EXECUTED 2013ac4: 92 10 23 e8 mov 0x3e8, %o1 <== NOT EXECUTED 2013ac8: 7f ff b7 2c call 2001778 <.udiv> <== NOT EXECUTED 2013acc: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED _TOD_Microseconds_per_tick; if (ticks) 2013ad0: b0 82 00 10 addcc %o0, %l0, %i0 <== NOT EXECUTED 2013ad4: 22 80 00 02 be,a 2013adc <_Timespec_To_ticks+0x68> <== NOT EXECUTED 2013ad8: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return ticks; return 1; } 2013adc: 81 c7 e0 08 ret <== NOT EXECUTED 2013ae0: 81 e8 00 00 restore <== NOT EXECUTED 0200cd40 <_User_extensions_Add_API_set>: */ void _User_extensions_Add_API_set ( User_extensions_Control *the_extension ) { 200cd40: 9d e3 bf 98 save %sp, -104, %sp _Chain_Append( &_User_extensions_List, &the_extension->Node ); 200cd44: 11 00 80 5f sethi %hi(0x2017c00), %o0 200cd48: 92 10 00 18 mov %i0, %o1 200cd4c: 7f ff e6 98 call 20067ac <_Chain_Append> 200cd50: 90 12 22 34 or %o0, 0x234, %o0 /* * If a switch handler is present, append it to the switch chain. */ if ( the_extension->Callouts.thread_switch != NULL ) { 200cd54: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 200cd58: 80 a0 60 00 cmp %g1, 0 200cd5c: 02 80 00 06 be 200cd74 <_User_extensions_Add_API_set+0x34> 200cd60: b2 06 20 08 add %i0, 8, %i1 the_extension->Switch.thread_switch = the_extension->Callouts.thread_switch; 200cd64: c2 26 20 10 st %g1, [ %i0 + 0x10 ] _Chain_Append( 200cd68: 31 00 80 5e sethi %hi(0x2017800), %i0 200cd6c: 7f ff e6 90 call 20067ac <_Chain_Append> 200cd70: 91 ee 23 b4 restore %i0, 0x3b4, %o0 200cd74: 81 c7 e0 08 ret <== NOT EXECUTED 200cd78: 81 e8 00 00 restore <== NOT EXECUTED 02009db0 <_User_extensions_Fatal>: void _User_extensions_Fatal ( Internal_errors_Source the_source, boolean is_internal, uint32_t the_error ) { 2009db0: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; 2009db4: 03 00 80 5f sethi %hi(0x2017c00), %g1 2009db8: 82 10 62 34 or %g1, 0x234, %g1 ! 2017e34 <_User_extensions_List> 2009dbc: e0 00 60 08 ld [ %g1 + 8 ], %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 2009dc0: 10 80 00 09 b 2009de4 <_User_extensions_Fatal+0x34> 2009dc4: 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 ) 2009dc8: 80 a0 60 00 cmp %g1, 0 2009dcc: 02 80 00 05 be 2009de0 <_User_extensions_Fatal+0x30> 2009dd0: 90 10 00 18 mov %i0, %o0 (*the_extension->Callouts.fatal)( the_source, is_internal, the_error ); 2009dd4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2009dd8: 9f c0 40 00 call %g1 <== NOT EXECUTED 2009ddc: 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 ) { 2009de0: 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 ) ; 2009de4: 80 a4 00 11 cmp %l0, %l1 2009de8: 32 bf ff f8 bne,a 2009dc8 <_User_extensions_Fatal+0x18> 2009dec: 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 ); } } 2009df0: 81 c7 e0 08 ret 2009df4: 81 e8 00 00 restore 0200e668 <_User_extensions_Remove_set>: */ void _User_extensions_Remove_set ( User_extensions_Control *the_extension ) { 200e668: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _Chain_Extract( &the_extension->Node ); 200e66c: 40 00 11 c2 call 2012d74 <_Chain_Extract> <== NOT EXECUTED 200e670: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * If a switch handler is present, remove it. */ if ( the_extension->Callouts.thread_switch != NULL ) 200e674: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 <== NOT EXECUTED 200e678: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200e67c: 02 80 00 04 be 200e68c <_User_extensions_Remove_set+0x24> <== NOT EXECUTED 200e680: 01 00 00 00 nop <== NOT EXECUTED _Chain_Extract( &the_extension->Switch.Node ); 200e684: 40 00 11 bc call 2012d74 <_Chain_Extract> <== NOT EXECUTED 200e688: 91 ee 20 08 restore %i0, 8, %o0 <== NOT EXECUTED 200e68c: 81 c7 e0 08 ret <== NOT EXECUTED 200e690: 81 e8 00 00 restore <== NOT EXECUTED 02009f68 <_Watchdog_Insert>: void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 2009f68: 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; 2009f6c: 03 00 80 5f sethi %hi(0x2017c00), %g1 void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 2009f70: 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; 2009f74: e6 00 60 78 ld [ %g1 + 0x78 ], %l3 _ISR_Disable( level ); 2009f78: 7f ff df 72 call 2001d40 2009f7c: 01 00 00 00 nop 2009f80: 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 ) { 2009f84: c2 06 60 08 ld [ %i1 + 8 ], %g1 2009f88: 80 a0 60 00 cmp %g1, 0 2009f8c: 02 80 00 03 be 2009f98 <_Watchdog_Insert+0x30> 2009f90: 03 00 80 5f sethi %hi(0x2017c00), %g1 _ISR_Enable( level ); 2009f94: 30 80 00 37 b,a 200a070 <_Watchdog_Insert+0x108> <== NOT EXECUTED return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; 2009f98: c4 00 61 30 ld [ %g1 + 0x130 ], %g2 ! 2017d30 <_Watchdog_Sync_count> if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 2009f9c: 86 10 20 01 mov 1, %g3 _Watchdog_Sync_count++; 2009fa0: 84 00 a0 01 inc %g2 if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 2009fa4: c6 26 60 08 st %g3, [ %i1 + 8 ] _Watchdog_Sync_count++; 2009fa8: c4 20 61 30 st %g2, [ %g1 + 0x130 ] if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 2009fac: 29 00 80 5f sethi %hi(0x2017c00), %l4 the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 2009fb0: 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 ; 2009fb4: e2 05 40 00 ld [ %l5 ], %l1 ; after = _Watchdog_Next( after ) ) { if ( delta_interval == 0 || !_Watchdog_Next( after ) ) 2009fb8: 80 a4 a0 00 cmp %l2, 0 2009fbc: 22 80 00 1c be,a 200a02c <_Watchdog_Insert+0xc4> 2009fc0: 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 ); 2009fc4: c2 04 40 00 ld [ %l1 ], %g1 2009fc8: 80 a0 60 00 cmp %g1, 0 2009fcc: 22 80 00 18 be,a 200a02c <_Watchdog_Insert+0xc4> 2009fd0: c4 04 60 04 ld [ %l1 + 4 ], %g2 break; if ( delta_interval < after->delta_interval ) { 2009fd4: e0 04 60 10 ld [ %l1 + 0x10 ], %l0 2009fd8: 80 a4 80 10 cmp %l2, %l0 2009fdc: 1a 80 00 04 bcc 2009fec <_Watchdog_Insert+0x84> 2009fe0: 82 24 00 12 sub %l0, %l2, %g1 after->delta_interval -= delta_interval; 2009fe4: 10 80 00 11 b 200a028 <_Watchdog_Insert+0xc0> 2009fe8: 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 ); 2009fec: 7f ff df 59 call 2001d50 2009ff0: 90 10 00 18 mov %i0, %o0 2009ff4: 7f ff df 53 call 2001d40 2009ff8: 01 00 00 00 nop if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { 2009ffc: c2 06 60 08 ld [ %i1 + 8 ], %g1 200a000: 80 a0 60 01 cmp %g1, 1 200a004: 12 80 00 15 bne 200a058 <_Watchdog_Insert+0xf0> 200a008: a4 24 80 10 sub %l2, %l0, %l2 goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 200a00c: c2 05 20 8c ld [ %l4 + 0x8c ], %g1 200a010: 80 a0 40 13 cmp %g1, %l3 200a014: 28 bf ff e9 bleu,a 2009fb8 <_Watchdog_Insert+0x50> 200a018: e2 04 40 00 ld [ %l1 ], %l1 _Watchdog_Sync_level = insert_isr_nest_level; 200a01c: e6 25 20 8c st %l3, [ %l4 + 0x8c ] the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 200a020: 10 bf ff e5 b 2009fb4 <_Watchdog_Insert+0x4c> 200a024: 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 ); 200a028: c4 04 60 04 ld [ %l1 + 4 ], %g2 the_watchdog->start_time = _Watchdog_Ticks_since_boot; 200a02c: 03 00 80 5f sethi %hi(0x2017c00), %g1 ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 200a030: c6 00 80 00 ld [ %g2 ], %g3 200a034: c2 00 61 34 ld [ %g1 + 0x134 ], %g1 after_node->next = the_node; 200a038: f2 20 80 00 st %i1, [ %g2 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 200a03c: c4 26 60 04 st %g2, [ %i1 + 4 ] 200a040: c2 26 60 14 st %g1, [ %i1 + 0x14 ] } } _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; 200a044: e4 26 60 10 st %l2, [ %i1 + 0x10 ] RTEMS_INLINE_ROUTINE void _Watchdog_Activate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_ACTIVE; 200a048: 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; 200a04c: 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; 200a050: c6 26 40 00 st %g3, [ %i1 ] 200a054: 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; 200a058: 03 00 80 5f sethi %hi(0x2017c00), %g1 _Watchdog_Sync_count--; 200a05c: 05 00 80 5f sethi %hi(0x2017c00), %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; 200a060: e6 20 60 8c st %l3, [ %g1 + 0x8c ] _Watchdog_Sync_count--; 200a064: c2 00 a1 30 ld [ %g2 + 0x130 ], %g1 200a068: 82 00 7f ff add %g1, -1, %g1 200a06c: c2 20 a1 30 st %g1, [ %g2 + 0x130 ] _ISR_Enable( level ); 200a070: 7f ff df 38 call 2001d50 200a074: 81 e8 00 00 restore 200a078: 01 00 00 00 nop 0200a0c8 <_Watchdog_Remove>: */ Watchdog_States _Watchdog_Remove( Watchdog_Control *the_watchdog ) { 200a0c8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Watchdog_States previous_state; Watchdog_Control *next_watchdog; _ISR_Disable( level ); 200a0cc: 7f ff df 1d call 2001d40 200a0d0: 01 00 00 00 nop previous_state = the_watchdog->state; 200a0d4: e0 06 20 08 ld [ %i0 + 8 ], %l0 switch ( previous_state ) { 200a0d8: 80 a4 20 01 cmp %l0, 1 200a0dc: 22 80 00 1e be,a 200a154 <_Watchdog_Remove+0x8c> 200a0e0: c0 26 20 08 clr [ %i0 + 8 ] <== NOT EXECUTED 200a0e4: 0a 80 00 1d bcs 200a158 <_Watchdog_Remove+0x90> 200a0e8: 03 00 80 5f sethi %hi(0x2017c00), %g1 200a0ec: 80 a4 20 03 cmp %l0, 3 200a0f0: 18 80 00 1a bgu 200a158 <_Watchdog_Remove+0x90> 200a0f4: 01 00 00 00 nop 200a0f8: c6 06 00 00 ld [ %i0 ], %g3 break; case WATCHDOG_ACTIVE: case WATCHDOG_REMOVE_IT: the_watchdog->state = WATCHDOG_INACTIVE; 200a0fc: c0 26 20 08 clr [ %i0 + 8 ] next_watchdog = _Watchdog_Next( the_watchdog ); if ( _Watchdog_Next(next_watchdog) ) 200a100: c2 00 c0 00 ld [ %g3 ], %g1 200a104: 80 a0 60 00 cmp %g1, 0 200a108: 02 80 00 07 be 200a124 <_Watchdog_Remove+0x5c> 200a10c: 03 00 80 5f sethi %hi(0x2017c00), %g1 next_watchdog->delta_interval += the_watchdog->delta_interval; 200a110: c2 00 e0 10 ld [ %g3 + 0x10 ], %g1 200a114: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 200a118: 82 00 40 02 add %g1, %g2, %g1 200a11c: c2 20 e0 10 st %g1, [ %g3 + 0x10 ] if ( _Watchdog_Sync_count ) 200a120: 03 00 80 5f sethi %hi(0x2017c00), %g1 200a124: c2 00 61 30 ld [ %g1 + 0x130 ], %g1 ! 2017d30 <_Watchdog_Sync_count> 200a128: 80 a0 60 00 cmp %g1, 0 200a12c: 22 80 00 07 be,a 200a148 <_Watchdog_Remove+0x80> 200a130: c4 06 00 00 ld [ %i0 ], %g2 _Watchdog_Sync_level = _ISR_Nest_level; 200a134: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200a138: c4 00 60 78 ld [ %g1 + 0x78 ], %g2 ! 2017c78 <_ISR_Nest_level> <== NOT EXECUTED 200a13c: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200a140: c4 20 60 8c st %g2, [ %g1 + 0x8c ] ! 2017c8c <_Watchdog_Sync_level> <== NOT EXECUTED ) { Chain_Node *next; Chain_Node *previous; next = the_node->next; 200a144: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED previous = the_node->previous; 200a148: c2 06 20 04 ld [ %i0 + 4 ], %g1 next->previous = previous; previous->next = next; 200a14c: c4 20 40 00 st %g2, [ %g1 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 200a150: c2 20 a0 04 st %g1, [ %g2 + 4 ] _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 200a154: 03 00 80 5f sethi %hi(0x2017c00), %g1 200a158: c2 00 61 34 ld [ %g1 + 0x134 ], %g1 ! 2017d34 <_Watchdog_Ticks_since_boot> 200a15c: c2 26 20 18 st %g1, [ %i0 + 0x18 ] _ISR_Enable( level ); 200a160: 7f ff de fc call 2001d50 200a164: b0 10 00 10 mov %l0, %i0 return( previous_state ); } 200a168: 81 c7 e0 08 ret 200a16c: 81 e8 00 00 restore 0200a214 <_Workspace_Allocate_or_fatal_error>: */ void *_Workspace_Allocate_or_fatal_error( size_t size ) { 200a214: 9d e3 bf 98 save %sp, -104, %sp RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 200a218: 11 00 80 5e sethi %hi(0x2017800), %o0 200a21c: 92 10 00 18 mov %i0, %o1 200a220: 7f ff f2 a0 call 2006ca0 <_Heap_Allocate> 200a224: 90 12 23 fc or %o0, 0x3fc, %o0 void *memory; memory = _Workspace_Allocate( size ); if ( memory == NULL ) 200a228: b0 92 20 00 orcc %o0, 0, %i0 200a22c: 12 80 00 04 bne 200a23c <_Workspace_Allocate_or_fatal_error+0x28> 200a230: 92 10 20 01 mov 1, %o1 _Internal_error_Occurred( 200a234: 7f ff f3 c6 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 200a238: 94 10 20 04 mov 4, %o2 <== NOT EXECUTED TRUE, INTERNAL_ERROR_WORKSPACE_ALLOCATION ); return memory; } 200a23c: 81 c7 e0 08 ret 200a240: 81 e8 00 00 restore 0200a244 <_Workspace_Handler_initialization>: void _Workspace_Handler_initialization( void *starting_address, size_t size ) { 200a244: 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 ) ) 200a248: 80 a6 20 00 cmp %i0, 0 200a24c: 02 80 00 04 be 200a25c <_Workspace_Handler_initialization+0x18> 200a250: 80 8e 20 07 btst 7, %i0 200a254: 02 80 00 07 be 200a270 <_Workspace_Handler_initialization+0x2c> 200a258: 03 00 80 5e sethi %hi(0x2017800), %g1 _Internal_error_Occurred( 200a25c: 90 10 20 00 clr %o0 <== NOT EXECUTED 200a260: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 200a264: 7f ff f3 ba call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 200a268: 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 ) { 200a26c: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200a270: c2 00 63 d4 ld [ %g1 + 0x3d4 ], %g1 ! 2017bd4 <_CPU_Table+0x10> 200a274: 84 10 20 00 clr %g2 200a278: 80 a0 60 00 cmp %g1, 0 200a27c: 12 80 00 06 bne 200a294 <_Workspace_Handler_initialization+0x50> 200a280: 87 36 60 02 srl %i1, 2, %g3 index < size / sizeof( uint32_t ) ; index++ ) zero_out_array[ index ] = 0; } memory_available = _Heap_Initialize( 200a284: 10 80 00 08 b 200a2a4 <_Workspace_Handler_initialization+0x60> 200a288: 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++ ) 200a28c: 84 00 a0 01 inc %g2 <== NOT EXECUTED zero_out_array[ index ] = 0; 200a290: 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 ) ; 200a294: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 200a298: 0a bf ff fd bcs 200a28c <_Workspace_Handler_initialization+0x48> <== NOT EXECUTED 200a29c: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED index++ ) zero_out_array[ index ] = 0; } memory_available = _Heap_Initialize( 200a2a0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 200a2a4: 94 10 00 19 mov %i1, %o2 200a2a8: 11 00 80 5e sethi %hi(0x2017800), %o0 200a2ac: 96 10 20 08 mov 8, %o3 200a2b0: 7f ff f3 5d call 2007024 <_Heap_Initialize> 200a2b4: 90 12 23 fc or %o0, 0x3fc, %o0 starting_address, size, CPU_HEAP_ALIGNMENT ); if ( memory_available == 0 ) 200a2b8: 80 a2 20 00 cmp %o0, 0 200a2bc: 12 80 00 05 bne 200a2d0 <_Workspace_Handler_initialization+0x8c> 200a2c0: b0 10 20 00 clr %i0 _Internal_error_Occurred( 200a2c4: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED 200a2c8: 7f ff f3 a1 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 200a2cc: 95 e8 20 03 restore %g0, 3, %o2 <== NOT EXECUTED 200a2d0: 81 c7 e0 08 ret 200a2d4: 81 e8 00 00 restore 02001ee8 <__assert>: #include #include void __assert(const char *file, int line, const char *failedexpr) { 2001ee8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED printk("assertion \"%s\" failed: file \"%s\", line %d\n", 2001eec: 11 00 80 57 sethi %hi(0x2015c00), %o0 <== NOT EXECUTED 2001ef0: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 2001ef4: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 2001ef8: 96 10 00 19 mov %i1, %o3 <== NOT EXECUTED 2001efc: 90 12 23 f8 or %o0, 0x3f8, %o0 <== NOT EXECUTED 2001f00: 40 00 04 37 call 2002fdc <== NOT EXECUTED 2001f04: b0 10 20 00 clr %i0 <== NOT EXECUTED failedexpr, file, line); rtems_fatal_error_occurred(0); 2001f08: 40 00 11 8f call 2006544 <== NOT EXECUTED 2001f0c: 81 e8 00 00 restore <== NOT EXECUTED 2001f10: 01 00 00 00 nop 02020200 <__kill>: #endif int __kill( pid_t pid, int sig ) { return 0; } 2020200: 81 c3 e0 08 retl <== NOT EXECUTED 2020204: 90 10 20 00 clr %o0 <== NOT EXECUTED 02015678 <_exit>: #include #if !defined(RTEMS_UNIX) void _exit(int status) { 2015678: 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(); 201567c: 7f ff ff e4 call 201560c 2015680: 01 00 00 00 nop rtems_shutdown_executive(status); 2015684: 40 00 00 47 call 20157a0 2015688: 90 10 00 18 mov %i0, %o0 201568c: 30 80 00 00 b,a 201568c <_exit+0x14> <== NOT EXECUTED 0201f0fc <_fcntl_r>: int fd, int cmd, int arg ) { return fcntl( fd, cmd, arg ); 201f0fc: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 201f100: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 201f104: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 201f108: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 201f10c: 7f ff ff 78 call 201eeec <== NOT EXECUTED 201f110: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 201f114: 01 00 00 00 nop 02020098 <_getpid_r>: pid_t _getpid_r( struct _reent *ptr ) { return getpid(); } 2020098: 81 c3 e0 08 retl <== NOT EXECUTED 202009c: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 0200b960 <_gettimeofday>: int _gettimeofday( struct timeval *tp, struct timezone *tzp ) { return gettimeofday( tp, tzp ); 200b960: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 200b964: 7f ff ff e6 call 200b8fc <== NOT EXECUTED 200b968: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 200b96c: 01 00 00 00 nop 020201f8 <_kill_r>: #include int _kill_r( struct _reent *ptr, pid_t pid, int sig ) { return 0; } 20201f8: 81 c3 e0 08 retl <== NOT EXECUTED 20201fc: 90 10 20 00 clr %o0 <== NOT EXECUTED 020155f0 <_lseek_r>: int fd, off_t offset, int whence ) { return lseek( fd, offset, whence ); 20155f0: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 20155f4: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 20155f8: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 20155fc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2015600: 7f ff ff bf call 20154fc <== NOT EXECUTED 2015604: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2015608: 01 00 00 00 nop 02002d0c <_open_r>: const char *buf, int flags, int mode ) { return open( buf, flags, mode ); 2002d0c: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 2002d10: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 2002d14: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 2002d18: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2002d1c: 7f ff ff 3e call 2002a14 <== NOT EXECUTED 2002d20: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2002d24: 01 00 00 00 nop 02015768 <_read_r>: int fd, void *buf, size_t nbytes ) { return read( fd, buf, nbytes ); 2015768: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 201576c: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 2015770: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 2015774: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2015778: 7f ff ff c6 call 2015690 <== NOT EXECUTED 201577c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2015780: 01 00 00 00 nop 020024c0 <_realloc_r>: struct _reent *ignored, void *ptr, size_t size ) { return realloc( ptr, size ); 20024c0: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 20024c4: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 20024c8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 20024cc: 7f ff ff b8 call 20023ac <== NOT EXECUTED 20024d0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 20024d4: 01 00 00 00 nop 020054a8 <_stat_r>: struct _reent *ptr, const char *path, struct stat *buf ) { return _STAT_NAME( path, buf ); 20054a8: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 20054ac: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 20054b0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 20054b4: 7f ff ff c4 call 20053c4 <== NOT EXECUTED 20054b8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 20054bc: 01 00 00 00 nop 02016d04 <_unlink_r>: int _unlink_r( struct _reent *ptr, const char *path ) { return unlink( path ); 2016d04: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 2016d08: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2016d0c: 7f ff ff a2 call 2016b94 <== NOT EXECUTED 2016d10: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2016d14: 01 00 00 00 nop 02014ed8 : #include int chdir( const char *pathname ) { 2014ed8: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the node where we wish to go. */ result = rtems_filesystem_evaluate_path( 2014edc: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 2014ee0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2014ee4: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 2014ee8: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 2014eec: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2014ef0: 7f ff bb 62 call 2003c78 <== NOT EXECUTED 2014ef4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED pathname, RTEMS_LIBIO_PERMS_SEARCH, &loc, TRUE ); if ( result != 0 ) 2014ef8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2014efc: 12 80 00 37 bne 2014fd8 <== NOT EXECUTED 2014f00: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Verify you can change directory into this node. */ if ( !loc.ops->node_type_h ) { 2014f04: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 2014f08: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2014f0c: 12 80 00 0c bne 2014f3c <== NOT EXECUTED 2014f10: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2014f14: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2014f18: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2014f1c: 02 80 00 04 be 2014f2c <== NOT EXECUTED 2014f20: 01 00 00 00 nop <== NOT EXECUTED 2014f24: 9f c0 40 00 call %g1 <== NOT EXECUTED 2014f28: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2014f2c: 40 00 30 a6 call 20211c4 <__errno> <== NOT EXECUTED 2014f30: 01 00 00 00 nop <== NOT EXECUTED 2014f34: 10 80 00 14 b 2014f84 <== NOT EXECUTED 2014f38: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 2014f3c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2014f40: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2014f44: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 2014f48: 02 80 00 12 be 2014f90 <== NOT EXECUTED 2014f4c: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2014f50: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2014f54: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2014f58: 02 80 00 08 be 2014f78 <== NOT EXECUTED 2014f5c: 01 00 00 00 nop <== NOT EXECUTED 2014f60: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2014f64: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2014f68: 02 80 00 04 be 2014f78 <== NOT EXECUTED 2014f6c: 01 00 00 00 nop <== NOT EXECUTED 2014f70: 9f c0 40 00 call %g1 <== NOT EXECUTED 2014f74: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 2014f78: 40 00 30 93 call 20211c4 <__errno> <== NOT EXECUTED 2014f7c: 01 00 00 00 nop <== NOT EXECUTED 2014f80: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 2014f84: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2014f88: 81 c7 e0 08 ret <== NOT EXECUTED 2014f8c: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED } rtems_filesystem_freenode( &rtems_filesystem_current ); 2014f90: d0 00 61 a0 ld [ %g1 + 0x1a0 ], %o0 <== NOT EXECUTED 2014f94: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 2014f98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2014f9c: 22 80 00 09 be,a 2014fc0 <== NOT EXECUTED 2014fa0: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2014fa4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 ! 203601c <_Semaphore_Translate_core_semaphore_return_code_+0xc> <== NOT EXECUTED 2014fa8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2014fac: 22 80 00 05 be,a 2014fc0 <== NOT EXECUTED 2014fb0: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2014fb4: 9f c0 40 00 call %g1 <== NOT EXECUTED 2014fb8: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED rtems_filesystem_current = loc; 2014fbc: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2014fc0: d0 00 61 a0 ld [ %g1 + 0x1a0 ], %o0 ! 20361a0 <== NOT EXECUTED 2014fc4: 92 07 bf e8 add %fp, -24, %o1 <== NOT EXECUTED 2014fc8: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 2014fcc: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2014fd0: 40 00 37 22 call 2022c58 <== NOT EXECUTED 2014fd4: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 2014fd8: 81 c7 e0 08 ret <== NOT EXECUTED 2014fdc: 81 e8 00 00 restore <== NOT EXECUTED 02014fe0 : int chmod( const char *path, mode_t mode ) { 2014fe0: 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 ); 2014fe4: 92 10 20 00 clr %o1 <== NOT EXECUTED 2014fe8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2014fec: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 2014ff0: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 2014ff4: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2014ff8: 7f ff bb 20 call 2003c78 <== NOT EXECUTED 2014ffc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 2015000: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015004: 12 80 00 24 bne 2015094 <== NOT EXECUTED 2015008: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED return -1; if ( !loc.handlers ){ 201500c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015010: 32 80 00 10 bne,a 2015050 <== NOT EXECUTED 2015014: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2015018: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 201501c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015020: 02 80 00 08 be 2015040 <== NOT EXECUTED 2015024: 01 00 00 00 nop <== NOT EXECUTED 2015028: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 201502c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015030: 02 80 00 04 be 2015040 <== NOT EXECUTED 2015034: 01 00 00 00 nop <== NOT EXECUTED 2015038: 9f c0 40 00 call %g1 <== NOT EXECUTED 201503c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 2015040: 40 00 30 61 call 20211c4 <__errno> <== NOT EXECUTED 2015044: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2015048: 10 80 00 12 b 2015090 <== NOT EXECUTED 201504c: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED } if ( !loc.handlers->fchmod_h ){ 2015050: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015054: 12 80 00 12 bne 201509c <== NOT EXECUTED 2015058: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 201505c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2015060: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015064: 02 80 00 08 be 2015084 <== NOT EXECUTED 2015068: 01 00 00 00 nop <== NOT EXECUTED 201506c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2015070: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015074: 02 80 00 04 be 2015084 <== NOT EXECUTED 2015078: 01 00 00 00 nop <== NOT EXECUTED 201507c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2015080: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2015084: 40 00 30 50 call 20211c4 <__errno> <== NOT EXECUTED 2015088: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 201508c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2015090: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2015094: 81 c7 e0 08 ret <== NOT EXECUTED 2015098: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.handlers->fchmod_h)( &loc, mode ); 201509c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20150a0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20150a4: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 20150a8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 20150ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20150b0: 02 bf ff f9 be 2015094 <== NOT EXECUTED 20150b4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 20150b8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 20150bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20150c0: 02 80 00 04 be 20150d0 <== NOT EXECUTED 20150c4: 01 00 00 00 nop <== NOT EXECUTED 20150c8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20150cc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 20150d0: 81 c7 e0 08 ret <== NOT EXECUTED 20150d4: 81 e8 00 00 restore <== NOT EXECUTED 020150d8 : int chown( const char *path, uid_t owner, gid_t group ) { 20150d8: 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 ) ) 20150dc: 92 10 20 00 clr %o1 <== NOT EXECUTED 20150e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20150e4: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 20150e8: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 20150ec: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 20150f0: 7f ff ba e2 call 2003c78 <== NOT EXECUTED 20150f4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20150f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20150fc: 12 80 00 10 bne 201513c <== NOT EXECUTED 2015100: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return -1; if ( !loc.ops->chown_h ) { 2015104: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 <== NOT EXECUTED 2015108: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 201510c: 12 80 00 0e bne 2015144 <== NOT EXECUTED 2015110: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2015114: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2015118: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201511c: 02 80 00 04 be 201512c <== NOT EXECUTED 2015120: 01 00 00 00 nop <== NOT EXECUTED 2015124: 9f c0 40 00 call %g1 <== NOT EXECUTED 2015128: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 201512c: 40 00 30 26 call 20211c4 <__errno> <== NOT EXECUTED 2015130: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2015134: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2015138: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 201513c: 81 c7 e0 08 ret <== NOT EXECUTED 2015140: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.ops->chown_h)( &loc, owner, group ); 2015144: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 2015148: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 201514c: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED 2015150: 9f c0 80 00 call %g2 <== NOT EXECUTED 2015154: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2015158: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 201515c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015160: 02 bf ff f7 be 201513c <== NOT EXECUTED 2015164: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 2015168: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 201516c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015170: 02 80 00 04 be 2015180 <== NOT EXECUTED 2015174: 01 00 00 00 nop <== NOT EXECUTED 2015178: 9f c0 40 00 call %g1 <== NOT EXECUTED 201517c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 2015180: 81 c7 e0 08 ret <== NOT EXECUTED 2015184: 81 e8 00 00 restore <== NOT EXECUTED 02015188 : #include int chroot( const char *pathname ) { 2015188: 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) { 201518c: 23 00 80 d8 sethi %hi(0x2036000), %l1 <== NOT EXECUTED 2015190: e0 04 61 a0 ld [ %l1 + 0x1a0 ], %l0 ! 20361a0 <== NOT EXECUTED 2015194: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 2015198: 82 10 62 34 or %g1, 0x234, %g1 ! 2038634 <== NOT EXECUTED 201519c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 20151a0: 12 80 00 0e bne 20151d8 <== NOT EXECUTED 20151a4: 01 00 00 00 nop <== NOT EXECUTED rtems_libio_set_private_env(); /* try to set a new private env*/ 20151a8: 40 00 05 39 call 201668c <== NOT EXECUTED 20151ac: 01 00 00 00 nop <== NOT EXECUTED if (rtems_current_user_env == &rtems_global_user_env) /* not ok */ 20151b0: c2 04 61 a0 ld [ %l1 + 0x1a0 ], %g1 <== NOT EXECUTED 20151b4: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 20151b8: 12 80 00 08 bne 20151d8 <== NOT EXECUTED 20151bc: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 20151c0: 40 00 30 01 call 20211c4 <__errno> <== NOT EXECUTED 20151c4: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 20151c8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 20151cc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 20151d0: 81 c7 e0 08 ret <== NOT EXECUTED 20151d4: 81 e8 00 00 restore <== NOT EXECUTED }; result = chdir(pathname); 20151d8: 7f ff ff 40 call 2014ed8 <== NOT EXECUTED 20151dc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if (result) { 20151e0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20151e4: 12 80 00 0a bne 201520c <== NOT EXECUTED 20151e8: 11 00 80 ca sethi %hi(0x2032800), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( errno ); }; /* clone the new root location */ if (rtems_filesystem_evaluate_path(".", 0, &loc, 0)) { 20151ec: 92 10 20 00 clr %o1 <== NOT EXECUTED 20151f0: 90 12 22 a0 or %o0, 0x2a0, %o0 <== NOT EXECUTED 20151f4: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED 20151f8: 7f ff ba a0 call 2003c78 <== NOT EXECUTED 20151fc: 96 10 20 00 clr %o3 <== NOT EXECUTED 2015200: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015204: 02 80 00 0a be 201522c <== NOT EXECUTED 2015208: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED /* our cwd has changed, though - but there is no easy way of return :-( */ rtems_set_errno_and_return_minus_one( errno ); 201520c: 40 00 2f ee call 20211c4 <__errno> <== NOT EXECUTED 2015210: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2015214: 40 00 2f ec call 20211c4 <__errno> <== NOT EXECUTED 2015218: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 201521c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 2015220: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED 2015224: 81 c7 e0 08 ret <== NOT EXECUTED 2015228: 81 e8 00 00 restore <== NOT EXECUTED } rtems_filesystem_freenode(&rtems_filesystem_root); 201522c: d0 00 61 a0 ld [ %g1 + 0x1a0 ], %o0 <== NOT EXECUTED 2015230: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED 2015234: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015238: 22 80 00 09 be,a 201525c <== NOT EXECUTED 201523c: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2015240: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 ! 203601c <_Semaphore_Translate_core_semaphore_return_code_+0xc> <== NOT EXECUTED 2015244: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015248: 22 80 00 05 be,a 201525c <== NOT EXECUTED 201524c: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2015250: 9f c0 40 00 call %g1 <== NOT EXECUTED 2015254: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 2015258: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 201525c: d0 00 61 a0 ld [ %g1 + 0x1a0 ], %o0 ! 20361a0 <== NOT EXECUTED 2015260: 92 07 bf e8 add %fp, -24, %o1 <== NOT EXECUTED 2015264: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2015268: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED 201526c: 40 00 36 7b call 2022c58 <== NOT EXECUTED 2015270: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 2015274: 81 c7 e0 08 ret <== NOT EXECUTED 2015278: 81 e8 00 00 restore <== NOT EXECUTED 0200b744 : #include int close( int fd ) { 200b744: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_t *iop; rtems_status_code rc; rtems_libio_check_fd(fd); 200b748: 03 00 80 5a sethi %hi(0x2016800), %g1 200b74c: c2 00 62 cc ld [ %g1 + 0x2cc ], %g1 ! 2016acc 200b750: 80 a6 00 01 cmp %i0, %g1 200b754: 1a 80 00 0d bcc 200b788 200b758: 03 00 80 5e sethi %hi(0x2017800), %g1 iop = rtems_libio_iop(fd); 200b75c: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 200b760: 85 2e 20 02 sll %i0, 2, %g2 200b764: 83 2e 20 04 sll %i0, 4, %g1 200b768: 82 20 40 02 sub %g1, %g2, %g1 200b76c: 82 00 40 18 add %g1, %i0, %g1 200b770: 83 28 60 02 sll %g1, 2, %g1 200b774: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 200b778: c2 06 20 0c ld [ %i0 + 0xc ], %g1 200b77c: 80 88 61 00 btst 0x100, %g1 200b780: 32 80 00 08 bne,a 200b7a0 200b784: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 200b788: 40 00 08 31 call 200d84c <__errno> <== NOT EXECUTED 200b78c: 01 00 00 00 nop <== NOT EXECUTED 200b790: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 200b794: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b798: 10 80 00 16 b 200b7f0 <== NOT EXECUTED 200b79c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = RTEMS_SUCCESSFUL; if ( iop->handlers->close_h ) 200b7a0: c2 00 60 04 ld [ %g1 + 4 ], %g1 200b7a4: 80 a0 60 00 cmp %g1, 0 200b7a8: 02 80 00 05 be 200b7bc 200b7ac: a0 10 20 00 clr %l0 rc = (*iop->handlers->close_h)( iop ); 200b7b0: 9f c0 40 00 call %g1 200b7b4: 90 10 00 18 mov %i0, %o0 200b7b8: a0 10 00 08 mov %o0, %l0 rtems_filesystem_freenode( &iop->pathinfo ); 200b7bc: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 200b7c0: 80 a0 60 00 cmp %g1, 0 200b7c4: 02 80 00 08 be 200b7e4 200b7c8: 01 00 00 00 nop 200b7cc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 200b7d0: 80 a0 60 00 cmp %g1, 0 200b7d4: 02 80 00 04 be 200b7e4 200b7d8: 01 00 00 00 nop 200b7dc: 9f c0 40 00 call %g1 <== NOT EXECUTED 200b7e0: 90 06 20 10 add %i0, 0x10, %o0 <== NOT EXECUTED rtems_libio_free( iop ); 200b7e4: 40 00 00 bd call 200bad8 200b7e8: 90 10 00 18 mov %i0, %o0 return rc; 200b7ec: 90 10 00 10 mov %l0, %o0 } 200b7f0: 81 c7 e0 08 ret 200b7f4: 91 e8 00 08 restore %g0, %o0, %o0 0201527c : * close a directory. */ int closedir(dirp) register DIR *dirp; { 201527c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int fd; if ( !dirp ) 2015280: a0 96 20 00 orcc %i0, 0, %l0 <== NOT EXECUTED 2015284: 02 80 00 0b be 20152b0 <== NOT EXECUTED 2015288: 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); 201528c: 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; 2015290: f0 04 00 00 ld [ %l0 ], %i0 <== NOT EXECUTED dirp->dd_fd = -1; dirp->dd_loc = 0; 2015294: c0 24 20 04 clr [ %l0 + 4 ] <== NOT EXECUTED (void)free((void *)dirp->dd_buf); 2015298: 7f ff bb d7 call 20041f4 <== NOT EXECUTED 201529c: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED (void)free((void *)dirp); 20152a0: 7f ff bb d5 call 20041f4 <== NOT EXECUTED 20152a4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return(close(fd)); 20152a8: 7f ff ba 15 call 2003afc <== NOT EXECUTED 20152ac: 81 e8 00 00 restore <== NOT EXECUTED register DIR *dirp; { int fd; if ( !dirp ) rtems_set_errno_and_return_minus_one( EBADF ); 20152b0: 40 00 2f c5 call 20211c4 <__errno> <== NOT EXECUTED 20152b4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20152b8: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 20152bc: 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)); } 20152c0: 81 c7 e0 08 ret <== NOT EXECUTED 20152c4: 81 e8 00 00 restore <== NOT EXECUTED 0200cf18 : */ int device_close( rtems_libio_t *iop ) { 200cf18: 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; 200cf1c: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 args.iop = iop; 200cf20: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = 0; 200cf24: c0 27 bf f0 clr [ %fp + -16 ] args.mode = 0; 200cf28: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_close( 200cf2c: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 200cf30: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 200cf34: 94 07 bf ec add %fp, -20, %o2 200cf38: 40 00 01 32 call 200d400 200cf3c: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) { 200cf40: 80 a2 20 00 cmp %o0, 0 200cf44: 02 80 00 05 be 200cf58 200cf48: 01 00 00 00 nop return rtems_deviceio_errno(status); 200cf4c: 7f ff ff a3 call 200cdd8 <== NOT EXECUTED 200cf50: 01 00 00 00 nop <== NOT EXECUTED 200cf54: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } return 0; } 200cf58: 81 c7 e0 08 ret 200cf5c: 81 e8 00 00 restore 0200cdd0 : rtems_libio_t *iop, off_t length ) { return 0; } 200cdd0: 81 c3 e0 08 retl <== NOT EXECUTED 200cdd4: 90 10 20 00 clr %o0 <== NOT EXECUTED 0200ce0c : int device_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { 200ce0c: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED args.iop = iop; args.command = command; args.buffer = buffer; the_jnode = iop->file_info; 200ce10: 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; 200ce14: f2 27 bf ec st %i1, [ %fp + -20 ] <== NOT EXECUTED args.buffer = buffer; 200ce18: 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; 200ce1c: 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( 200ce20: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 <== NOT EXECUTED 200ce24: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 <== NOT EXECUTED 200ce28: 40 00 01 8c call 200d458 <== NOT EXECUTED 200ce2c: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 200ce30: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200ce34: 22 80 00 06 be,a 200ce4c <== NOT EXECUTED 200ce38: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED return rtems_deviceio_errno(status); 200ce3c: 7f ff ff e7 call 200cdd8 <== NOT EXECUTED 200ce40: 01 00 00 00 nop <== NOT EXECUTED return args.ioctl_return; } 200ce44: 81 c7 e0 08 ret <== NOT EXECUTED 200ce48: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 200ce4c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 200ce50: 81 c7 e0 08 ret <== NOT EXECUTED 200ce54: 81 e8 00 00 restore <== NOT EXECUTED 0200cdc8 : off_t offset, int whence ) { return offset; } 200cdc8: 81 c3 e0 08 retl <== NOT EXECUTED 200cdcc: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 0200cf60 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 200cf60: 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; 200cf64: 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; 200cf68: c4 06 20 2c ld [ %i0 + 0x2c ], %g2 args.iop = iop; 200cf6c: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = iop->flags; 200cf70: c2 27 bf f0 st %g1, [ %fp + -16 ] args.mode = mode; 200cf74: f6 27 bf f4 st %i3, [ %fp + -12 ] status = rtems_io_open( 200cf78: d2 00 a0 50 ld [ %g2 + 0x50 ], %o1 200cf7c: d0 00 a0 4c ld [ %g2 + 0x4c ], %o0 200cf80: 94 07 bf ec add %fp, -20, %o2 200cf84: 40 00 01 4b call 200d4b0 200cf88: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 200cf8c: 80 a2 20 00 cmp %o0, 0 200cf90: 02 80 00 05 be 200cfa4 200cf94: 01 00 00 00 nop return rtems_deviceio_errno(status); 200cf98: 7f ff ff 90 call 200cdd8 <== NOT EXECUTED 200cf9c: 01 00 00 00 nop <== NOT EXECUTED 200cfa0: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED return 0; } 200cfa4: 81 c7 e0 08 ret 200cfa8: 81 e8 00 00 restore 0200ceb8 : ssize_t device_read( rtems_libio_t *iop, void *buffer, size_t count ) { 200ceb8: 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; 200cebc: 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; 200cec0: 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; 200cec4: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 <== NOT EXECUTED args.iop = iop; args.offset = iop->offset; args.buffer = buffer; 200cec8: 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; 200cecc: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED args.buffer = buffer; args.count = count; 200ced0: f4 27 bf ec st %i2, [ %fp + -20 ] <== NOT EXECUTED args.flags = iop->flags; 200ced4: 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; 200ced8: 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; 200cedc: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED status = rtems_io_read( 200cee0: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 <== NOT EXECUTED 200cee4: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 <== NOT EXECUTED 200cee8: 40 00 01 88 call 200d508 <== NOT EXECUTED 200ceec: 94 07 bf e0 add %fp, -32, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 200cef0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200cef4: 22 80 00 06 be,a 200cf0c <== NOT EXECUTED 200cef8: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED return rtems_deviceio_errno(status); 200cefc: 7f ff ff b7 call 200cdd8 <== NOT EXECUTED 200cf00: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 200cf04: 81 c7 e0 08 ret <== NOT EXECUTED 200cf08: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 200cf0c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 200cf10: 81 c7 e0 08 ret <== NOT EXECUTED 200cf14: 81 e8 00 00 restore <== NOT EXECUTED 0200ce58 : ssize_t device_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 200ce58: 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; 200ce5c: 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; 200ce60: 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; 200ce64: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 args.iop = iop; args.offset = iop->offset; args.buffer = (void *) buffer; 200ce68: 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; 200ce6c: c2 27 bf e4 st %g1, [ %fp + -28 ] args.buffer = (void *) buffer; args.count = count; 200ce70: f4 27 bf ec st %i2, [ %fp + -20 ] args.flags = iop->flags; 200ce74: 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; 200ce78: 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; 200ce7c: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_write( 200ce80: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 200ce84: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 200ce88: 40 00 01 b6 call 200d560 200ce8c: 94 07 bf e0 add %fp, -32, %o2 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 200ce90: 80 a2 20 00 cmp %o0, 0 200ce94: 22 80 00 06 be,a 200ceac 200ce98: d0 07 bf f4 ld [ %fp + -12 ], %o0 return rtems_deviceio_errno(status); 200ce9c: 7f ff ff cf call 200cdd8 <== NOT EXECUTED 200cea0: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 200cea4: 81 c7 e0 08 ret <== NOT EXECUTED 200cea8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 200ceac: b0 10 00 08 mov %o0, %i0 200ceb0: 81 c7 e0 08 ret 200ceb4: 81 e8 00 00 restore 02003e5c : /* * Drain output queue */ static void drainOutput (struct rtems_termios_tty *tty) { 2003e5c: 9d e3 bf 98 save %sp, -104, %sp rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) { 2003e60: c2 06 20 b4 ld [ %i0 + 0xb4 ], %g1 2003e64: 80 a0 60 00 cmp %g1, 0 2003e68: 02 80 00 1a be 2003ed0 2003e6c: 01 00 00 00 nop rtems_interrupt_disable (level); 2003e70: 7f ff f7 b4 call 2001d40 <== NOT EXECUTED 2003e74: 01 00 00 00 nop <== NOT EXECUTED 2003e78: 30 80 00 0f b,a 2003eb4 <== NOT EXECUTED while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) { tty->rawOutBufState = rob_wait; 2003e7c: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 2003e80: 7f ff f7 b4 call 2001d50 <== NOT EXECUTED 2003e84: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 2003e88: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 2003e8c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2003e90: 40 00 06 b1 call 2005954 <== NOT EXECUTED 2003e94: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 2003e98: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2003e9c: 02 80 00 04 be 2003eac <== NOT EXECUTED 2003ea0: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2003ea4: 40 00 09 a8 call 2006544 <== NOT EXECUTED 2003ea8: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 2003eac: 7f ff f7 a5 call 2001d40 <== NOT EXECUTED 2003eb0: 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) { 2003eb4: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 2003eb8: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 2003ebc: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2003ec0: 12 bf ff ef bne 2003e7c <== NOT EXECUTED 2003ec4: 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); 2003ec8: 7f ff f7 a2 call 2001d50 <== NOT EXECUTED 2003ecc: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 2003ed0: 81 c7 e0 08 ret 2003ed4: 81 e8 00 00 restore 020038d0 : /* * Echo a typed character */ static void echo (unsigned char c, struct rtems_termios_tty *tty) { 20038d0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) { 20038d4: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 20038d8: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 20038dc: 02 80 00 1a be 2003944 <== NOT EXECUTED 20038e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20038e4: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 20038e8: c2 00 62 48 ld [ %g1 + 0x248 ], %g1 ! 2017248 <__ctype_ptr> <== NOT EXECUTED 20038ec: 84 0e 20 ff and %i0, 0xff, %g2 <== NOT EXECUTED 20038f0: c2 08 40 02 ldub [ %g1 + %g2 ], %g1 <== NOT EXECUTED 20038f4: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 20038f8: 22 80 00 14 be,a 2003948 <== NOT EXECUTED 20038fc: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED 2003900: 80 a0 a0 09 cmp %g2, 9 <== NOT EXECUTED 2003904: 02 80 00 10 be 2003944 <== NOT EXECUTED 2003908: 80 a0 a0 0a cmp %g2, 0xa <== NOT EXECUTED 200390c: 02 80 00 0e be 2003944 <== NOT EXECUTED 2003910: 82 1e 20 40 xor %i0, 0x40, %g1 <== NOT EXECUTED char echobuf[2]; echobuf[0] = '^'; echobuf[1] = c ^ 0x40; 2003914: 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] = '^'; 2003918: 82 10 20 5e mov 0x5e, %g1 <== NOT EXECUTED echobuf[1] = c ^ 0x40; rtems_termios_puts (echobuf, 2, tty); 200391c: 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] = '^'; 2003920: c2 2f bf f6 stb %g1, [ %fp + -10 ] <== NOT EXECUTED echobuf[1] = c ^ 0x40; rtems_termios_puts (echobuf, 2, tty); 2003924: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 2003928: 7f ff ff 3c call 2003618 <== NOT EXECUTED 200392c: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED tty->column += 2; 2003930: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 2003934: 82 00 60 02 add %g1, 2, %g1 <== NOT EXECUTED 2003938: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED 200393c: 81 c7 e0 08 ret <== NOT EXECUTED 2003940: 81 e8 00 00 restore <== NOT EXECUTED } else { oproc (c, tty); 2003944: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED 2003948: 7f ff ff 80 call 2003748 <== NOT EXECUTED 200394c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2003950: 81 c7 e0 08 ret <== NOT EXECUTED 2003954: 81 e8 00 00 restore <== NOT EXECUTED 02015a24 : group_fp = fopen("/etc/group", "r"); } void endgrent(void) { if (group_fp != NULL) 2015a24: 03 00 80 de sethi %hi(0x2037800), %g1 <== NOT EXECUTED 2015a28: d0 00 60 1c ld [ %g1 + 0x1c ], %o0 ! 203781c <== NOT EXECUTED 2015a2c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015a30: 02 80 00 05 be 2015a44 <== NOT EXECUTED 2015a34: 01 00 00 00 nop <== NOT EXECUTED fclose(group_fp); 2015a38: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2015a3c: 40 00 2e 29 call 20212e0 <== NOT EXECUTED 2015a40: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2015a44: 81 c3 e0 08 retl <== NOT EXECUTED 2015a48: 01 00 00 00 nop 02015a4c : passwd_fp = fopen("/etc/passwd", "r"); } void endpwent(void) { if (passwd_fp != NULL) 2015a4c: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 2015a50: d0 00 63 34 ld [ %g1 + 0x334 ], %o0 ! 2037734 <== NOT EXECUTED 2015a54: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015a58: 02 80 00 05 be 2015a6c <== NOT EXECUTED 2015a5c: 01 00 00 00 nop <== NOT EXECUTED fclose(passwd_fp); 2015a60: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2015a64: 40 00 2e 1f call 20212e0 <== NOT EXECUTED 2015a68: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2015a6c: 81 c3 e0 08 retl <== NOT EXECUTED 2015a70: 01 00 00 00 nop 02003958 : * 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) { 2003958: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->ccount == 0) 200395c: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 <== NOT EXECUTED 2003960: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003964: 02 80 00 0a be 200398c <== NOT EXECUTED 2003968: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return; if (lineFlag) { 200396c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 2003970: 02 80 00 7d be 2003b64 <== NOT EXECUTED 2003974: 03 00 80 58 sethi %hi(0x2016000), %g1 <== NOT EXECUTED if (!(tty->termios.c_lflag & ECHO)) { 2003978: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 200397c: 80 88 60 08 btst 8, %g1 <== NOT EXECUTED 2003980: 32 80 00 05 bne,a 2003994 <== NOT EXECUTED 2003984: 80 88 60 10 btst 0x10, %g1 <== NOT EXECUTED tty->ccount = 0; 2003988: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED 200398c: 81 c7 e0 08 ret <== NOT EXECUTED 2003990: 81 e8 00 00 restore <== NOT EXECUTED return; } if (!(tty->termios.c_lflag & ECHOE)) { 2003994: 12 80 00 74 bne 2003b64 <== NOT EXECUTED 2003998: 03 00 80 58 sethi %hi(0x2016000), %g1 <== NOT EXECUTED tty->ccount = 0; echo (tty->termios.c_cc[VKILL], tty); 200399c: 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; 20039a0: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED echo (tty->termios.c_cc[VKILL], tty); 20039a4: 7f ff ff cb call 20038d0 <== NOT EXECUTED 20039a8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) 20039ac: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED echo ('\n', tty); 20039b0: 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) 20039b4: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 20039b8: 12 80 00 11 bne 20039fc <== NOT EXECUTED 20039bc: b0 10 20 0a mov 0xa, %i0 <== NOT EXECUTED 20039c0: 30 80 00 71 b,a 2003b84 <== NOT EXECUTED } } while (tty->ccount) { unsigned char c = tty->cbuf[--tty->ccount]; if (tty->termios.c_lflag & ECHO) { 20039c4: c6 04 20 3c ld [ %l0 + 0x3c ], %g3 <== NOT EXECUTED echo ('\n', tty); return; } } while (tty->ccount) { unsigned char c = tty->cbuf[--tty->ccount]; 20039c8: 82 01 3f ff add %g4, -1, %g1 <== NOT EXECUTED 20039cc: c2 24 20 20 st %g1, [ %l0 + 0x20 ] <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) { 20039d0: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 20039d4: 02 80 00 5f be 2003b50 <== NOT EXECUTED 20039d8: c4 08 80 01 ldub [ %g2 + %g1 ], %g2 <== NOT EXECUTED if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) { 20039dc: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 20039e0: 12 80 00 09 bne 2003a04 <== NOT EXECUTED 20039e4: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED 20039e8: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 20039ec: 12 80 00 07 bne 2003a08 <== NOT EXECUTED 20039f0: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED echo (tty->termios.c_cc[VERASE], tty); 20039f4: f0 0c 20 43 ldub [ %l0 + 0x43 ], %i0 <== NOT EXECUTED 20039f8: b2 10 00 10 mov %l0, %i1 <== NOT EXECUTED 20039fc: 7f ff ff b5 call 20038d0 <== NOT EXECUTED 2003a00: 81 e8 00 00 restore <== NOT EXECUTED } else if (c == '\t') { 2003a04: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 2003a08: 80 a0 60 09 cmp %g1, 9 <== NOT EXECUTED 2003a0c: 32 80 00 2c bne,a 2003abc <== NOT EXECUTED 2003a10: c2 04 62 48 ld [ %l1 + 0x248 ], %g1 <== NOT EXECUTED int col = tty->read_start_column; 2003a14: 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)) { 2003a18: d8 04 62 48 ld [ %l1 + 0x248 ], %o4 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 2003a1c: 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) 2003a20: 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)) { 2003a24: 10 80 00 14 b 2003a74 <== NOT EXECUTED 2003a28: 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') { 2003a2c: c4 48 40 03 ldsb [ %g1 + %g3 ], %g2 <== NOT EXECUTED 2003a30: c2 08 40 03 ldub [ %g1 + %g3 ], %g1 <== NOT EXECUTED 2003a34: 80 a0 a0 09 cmp %g2, 9 <== NOT EXECUTED 2003a38: 12 80 00 05 bne 2003a4c <== NOT EXECUTED 2003a3c: 82 08 60 ff and %g1, 0xff, %g1 <== NOT EXECUTED col = (col | 7) + 1; 2003a40: 82 16 20 07 or %i0, 7, %g1 <== NOT EXECUTED 2003a44: 10 80 00 0b b 2003a70 <== NOT EXECUTED 2003a48: b0 00 60 01 add %g1, 1, %i0 <== NOT EXECUTED } else if (iscntrl (c)) { 2003a4c: c2 0b 00 01 ldub [ %o4 + %g1 ], %g1 <== NOT EXECUTED 2003a50: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 2003a54: 22 80 00 07 be,a 2003a70 <== NOT EXECUTED 2003a58: b0 06 20 01 inc %i0 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOCTL) 2003a5c: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 2003a60: 32 80 00 04 bne,a 2003a70 <== NOT EXECUTED 2003a64: b0 06 20 02 add %i0, 2, %i0 <== NOT EXECUTED /* * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; 2003a68: 10 80 00 03 b 2003a74 <== NOT EXECUTED 2003a6c: 86 00 e0 01 inc %g3 <== NOT EXECUTED 2003a70: 86 00 e0 01 inc %g3 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 2003a74: 80 a0 c0 0d cmp %g3, %o5 <== NOT EXECUTED 2003a78: 32 bf ff ed bne,a 2003a2c <== NOT EXECUTED 2003a7c: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 2003a80: 10 80 00 08 b 2003aa0 <== NOT EXECUTED 2003a84: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); 2003a88: 7f ff fe e4 call 2003618 <== NOT EXECUTED 2003a8c: 01 00 00 00 nop <== NOT EXECUTED tty->column--; 2003a90: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 2003a94: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2003a98: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 2003a9c: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); 2003aa0: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 2003aa4: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 2003aa8: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 2003aac: 14 bf ff f7 bg 2003a88 <== NOT EXECUTED 2003ab0: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 2003ab4: 10 80 00 28 b 2003b54 <== NOT EXECUTED 2003ab8: 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)) { 2003abc: b0 08 a0 ff and %g2, 0xff, %i0 <== NOT EXECUTED 2003ac0: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED 2003ac4: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 2003ac8: 02 80 00 10 be 2003b08 <== NOT EXECUTED 2003acc: c2 04 62 48 ld [ %l1 + 0x248 ], %g1 <== NOT EXECUTED 2003ad0: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 2003ad4: 22 80 00 0e be,a 2003b0c <== NOT EXECUTED 2003ad8: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b \b", 3, tty); 2003adc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2003ae0: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 2003ae4: 7f ff fe cd call 2003618 <== NOT EXECUTED 2003ae8: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 2003aec: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 2003af0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003af4: 22 80 00 05 be,a 2003b08 <== NOT EXECUTED 2003af8: c2 04 62 48 ld [ %l1 + 0x248 ], %g1 <== NOT EXECUTED tty->column--; 2003afc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2003b00: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) { 2003b04: c2 04 62 48 ld [ %l1 + 0x248 ], %g1 <== NOT EXECUTED 2003b08: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED 2003b0c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 2003b10: 02 80 00 07 be 2003b2c <== NOT EXECUTED 2003b14: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2003b18: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 2003b1c: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 2003b20: 02 80 00 0d be 2003b54 <== NOT EXECUTED 2003b24: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_termios_puts ("\b \b", 3, tty); 2003b28: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2003b2c: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 2003b30: 7f ff fe ba call 2003618 <== NOT EXECUTED 2003b34: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 2003b38: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 2003b3c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003b40: 02 80 00 05 be 2003b54 <== NOT EXECUTED 2003b44: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED tty->column--; 2003b48: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2003b4c: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } } } if (!lineFlag) 2003b50: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 2003b54: 02 80 00 0c be 2003b84 <== NOT EXECUTED 2003b58: 01 00 00 00 nop <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) echo ('\n', tty); return; } } while (tty->ccount) { 2003b5c: 10 80 00 07 b 2003b78 <== NOT EXECUTED 2003b60: c8 04 20 20 ld [ %l0 + 0x20 ], %g4 <== NOT EXECUTED 2003b64: 23 00 80 5c sethi %hi(0x2017000), %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); 2003b68: a4 10 60 a8 or %g1, 0xa8, %l2 <== NOT EXECUTED /* * Back up over the tab */ while (tty->column > col) { rtems_termios_puts ("\b", 1, tty); 2003b6c: 03 00 80 58 sethi %hi(0x2016000), %g1 <== NOT EXECUTED 2003b70: a6 10 60 a0 or %g1, 0xa0, %l3 ! 20160a0 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) echo ('\n', tty); return; } } while (tty->ccount) { 2003b74: c8 04 20 20 ld [ %l0 + 0x20 ], %g4 <== NOT EXECUTED 2003b78: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 2003b7c: 32 bf ff 92 bne,a 20039c4 <== NOT EXECUTED 2003b80: c4 04 20 1c ld [ %l0 + 0x1c ], %g2 <== NOT EXECUTED 2003b84: 81 c7 e0 08 ret <== NOT EXECUTED 2003b88: 81 e8 00 00 restore <== NOT EXECUTED 0201eeec : int fcntl( int fd, int cmd, ... ) { 201eeec: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 201eef0: 03 00 80 d6 sethi %hi(0x2035800), %g1 <== NOT EXECUTED 201eef4: da 00 61 8c ld [ %g1 + 0x18c ], %o5 ! 203598c <== NOT EXECUTED ... ) { int ret; va_list ap; va_start( ap, cmd ); 201eef8: 86 07 a0 4c add %fp, 0x4c, %g3 <== NOT EXECUTED int fcntl( int fd, int cmd, ... ) { 201eefc: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 201ef00: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 201ef04: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 201ef08: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 201ef0c: 80 a6 00 0d cmp %i0, %o5 <== NOT EXECUTED 201ef10: 1a 80 00 0e bcc 201ef48 <== NOT EXECUTED 201ef14: c6 27 bf f4 st %g3, [ %fp + -12 ] <== NOT EXECUTED iop = rtems_libio_iop( fd ); 201ef18: 03 00 80 e0 sethi %hi(0x2038000), %g1 <== NOT EXECUTED 201ef1c: c8 00 61 5c ld [ %g1 + 0x15c ], %g4 ! 203815c <== NOT EXECUTED 201ef20: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 201ef24: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 201ef28: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 201ef2c: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 201ef30: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 201ef34: b0 01 00 01 add %g4, %g1, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 201ef38: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 201ef3c: 80 8a 21 00 btst 0x100, %o0 <== NOT EXECUTED 201ef40: 12 80 00 07 bne 201ef5c <== NOT EXECUTED 201ef44: 80 a6 60 09 cmp %i1, 9 <== NOT EXECUTED 201ef48: 40 00 08 9f call 20211c4 <__errno> <== NOT EXECUTED 201ef4c: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED 201ef50: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 201ef54: 10 80 00 68 b 201f0f4 <== NOT EXECUTED 201ef58: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * This switch should contain all the cases from POSIX. */ switch ( cmd ) { 201ef5c: 18 80 00 50 bgu 201f09c <== NOT EXECUTED 201ef60: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED 201ef64: 05 00 80 7b sethi %hi(0x201ec00), %g2 <== NOT EXECUTED 201ef68: 84 10 a2 c4 or %g2, 0x2c4, %g2 ! 201eec4 <== NOT EXECUTED 201ef6c: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 201ef70: 81 c0 40 00 jmp %g1 <== NOT EXECUTED 201ef74: 01 00 00 00 nop <== NOT EXECUTED case F_DUPFD: /* dup */ fd2 = va_arg( ap, int ); 201ef78: d0 00 c0 00 ld [ %g3 ], %o0 <== NOT EXECUTED if ( fd2 ) 201ef7c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201ef80: 02 80 00 0b be 201efac <== NOT EXECUTED 201ef84: 80 a2 00 0d cmp %o0, %o5 <== NOT EXECUTED diop = rtems_libio_iop( fd2 ); 201ef88: 1a 80 00 0e bcc 201efc0 <== NOT EXECUTED 201ef8c: ba 10 20 00 clr %i5 <== NOT EXECUTED 201ef90: 85 2a 20 02 sll %o0, 2, %g2 <== NOT EXECUTED 201ef94: 83 2a 20 04 sll %o0, 4, %g1 <== NOT EXECUTED 201ef98: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 201ef9c: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 201efa0: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 201efa4: 10 80 00 07 b 201efc0 <== NOT EXECUTED 201efa8: ba 01 00 01 add %g4, %g1, %i5 <== NOT EXECUTED else { /* allocate a file control block */ diop = rtems_libio_allocate(); 201efac: 7f ff 94 43 call 20040b8 <== NOT EXECUTED 201efb0: 01 00 00 00 nop <== NOT EXECUTED if ( diop == 0 ) { 201efb4: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 201efb8: 22 80 00 4f be,a 201f0f4 <== NOT EXECUTED 201efbc: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 201efc0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED diop->file_info = iop->file_info; 201efc4: c4 06 20 2c ld [ %i0 + 0x2c ], %g2 <== NOT EXECUTED diop->flags = iop->flags; 201efc8: c6 06 20 0c ld [ %i0 + 0xc ], %g3 <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 201efcc: c2 27 60 30 st %g1, [ %i5 + 0x30 ] <== NOT EXECUTED diop->file_info = iop->file_info; 201efd0: c4 27 60 2c st %g2, [ %i5 + 0x2c ] <== NOT EXECUTED diop->flags = iop->flags; 201efd4: c6 27 60 0c st %g3, [ %i5 + 0xc ] <== NOT EXECUTED diop->pathinfo = iop->pathinfo; 201efd8: 90 07 60 10 add %i5, 0x10, %o0 <== NOT EXECUTED 201efdc: 92 06 20 10 add %i0, 0x10, %o1 <== NOT EXECUTED 201efe0: 40 00 0f 1e call 2022c58 <== NOT EXECUTED 201efe4: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED ret = (int) (diop - rtems_libio_iops); 201efe8: 03 00 80 e0 sethi %hi(0x2038000), %g1 <== NOT EXECUTED 201efec: c6 00 61 5c ld [ %g1 + 0x15c ], %g3 ! 203815c <== NOT EXECUTED 201eff0: 86 27 40 03 sub %i5, %g3, %g3 <== NOT EXECUTED 201eff4: 87 38 e0 02 sra %g3, 2, %g3 <== NOT EXECUTED 201eff8: 83 28 e0 02 sll %g3, 2, %g1 <== NOT EXECUTED 201effc: 85 28 e0 06 sll %g3, 6, %g2 <== NOT EXECUTED 201f000: 84 20 80 01 sub %g2, %g1, %g2 <== NOT EXECUTED 201f004: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 201f008: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 201f00c: 85 28 60 0c sll %g1, 0xc, %g2 <== NOT EXECUTED 201f010: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 201f014: 82 00 40 03 add %g1, %g3, %g1 <== NOT EXECUTED 201f018: 83 28 60 04 sll %g1, 4, %g1 <== NOT EXECUTED 201f01c: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 201f020: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 201f024: 10 80 00 23 b 201f0b0 <== NOT EXECUTED 201f028: 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); 201f02c: 83 32 20 0b srl %o0, 0xb, %g1 <== NOT EXECUTED 201f030: 10 80 00 23 b 201f0bc <== NOT EXECUTED 201f034: 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 ) ) 201f038: c2 00 c0 00 ld [ %g3 ], %g1 <== NOT EXECUTED 201f03c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201f040: 22 80 00 03 be,a 201f04c <== NOT EXECUTED 201f044: 82 0a 37 ff and %o0, -2049, %g1 <== NOT EXECUTED 201f048: 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; 201f04c: c2 26 20 0c st %g1, [ %i0 + 0xc ] <== NOT EXECUTED 201f050: 10 80 00 1b b 201f0bc <== NOT EXECUTED 201f054: b8 10 20 00 clr %i4 <== NOT EXECUTED break; case F_GETFL: /* more flags (cloexec) */ ret = rtems_libio_to_fcntl_flags( iop->flags ); 201f058: 7f ff 93 ad call 2003f0c <== NOT EXECUTED 201f05c: 01 00 00 00 nop <== NOT EXECUTED 201f060: 10 80 00 14 b 201f0b0 <== NOT EXECUTED 201f064: b8 10 00 08 mov %o0, %i4 <== NOT EXECUTED break; case F_SETFL: flags = rtems_libio_fcntl_flags( va_arg( ap, int ) ); 201f068: d0 00 c0 00 ld [ %g3 ], %o0 <== NOT EXECUTED 201f06c: 7f ff 94 49 call 2004190 <== NOT EXECUTED 201f070: 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); 201f074: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 201f078: 90 0a 22 01 and %o0, 0x201, %o0 <== NOT EXECUTED 201f07c: 82 08 7d fe and %g1, -514, %g1 <== NOT EXECUTED 201f080: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED 201f084: 10 80 00 0e b 201f0bc <== NOT EXECUTED 201f088: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED errno = ENOTSUP; ret = -1; break; case F_GETOWN: /* for sockets. */ errno = ENOTSUP; 201f08c: 40 00 08 4e call 20211c4 <__errno> <== NOT EXECUTED 201f090: 01 00 00 00 nop <== NOT EXECUTED 201f094: 10 80 00 05 b 201f0a8 <== NOT EXECUTED 201f098: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED ret = -1; break; default: errno = EINVAL; 201f09c: 40 00 08 4a call 20211c4 <__errno> <== NOT EXECUTED 201f0a0: 01 00 00 00 nop <== NOT EXECUTED 201f0a4: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 201f0a8: 10 80 00 12 b 201f0f0 <== NOT EXECUTED 201f0ac: 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) { 201f0b0: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 201f0b4: 06 80 00 10 bl 201f0f4 <== NOT EXECUTED 201f0b8: 01 00 00 00 nop <== NOT EXECUTED if (iop->handlers->fcntl_h) { 201f0bc: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 201f0c0: c2 00 60 30 ld [ %g1 + 0x30 ], %g1 <== NOT EXECUTED 201f0c4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201f0c8: 02 80 00 0b be 201f0f4 <== NOT EXECUTED 201f0cc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED int err = (*iop->handlers->fcntl_h)( cmd, iop ); 201f0d0: 9f c0 40 00 call %g1 <== NOT EXECUTED 201f0d4: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (err) { 201f0d8: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 201f0dc: 02 80 00 06 be 201f0f4 <== NOT EXECUTED 201f0e0: 01 00 00 00 nop <== NOT EXECUTED errno = err; 201f0e4: 40 00 08 38 call 20211c4 <__errno> <== NOT EXECUTED 201f0e8: 01 00 00 00 nop <== NOT EXECUTED 201f0ec: 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); 201f0f0: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED return ret; } 201f0f4: 81 c7 e0 08 ret <== NOT EXECUTED 201f0f8: 91 e8 00 1c restore %g0, %i4, %o0 <== NOT EXECUTED 020021e0 : } void free( void *ptr ) { 20021e0: 9d e3 bf 98 save %sp, -104, %sp MSBUMP(free_calls, 1); if ( !ptr ) 20021e4: 80 a6 20 00 cmp %i0, 0 20021e8: 02 80 00 1f be 2002264 20021ec: 03 00 80 5f sethi %hi(0x2017c00), %g1 /* * Do not attempt to free memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 20021f0: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> 20021f4: 80 a0 60 03 cmp %g1, 3 20021f8: 12 80 00 0e bne 2002230 20021fc: 03 00 80 5e sethi %hi(0x2017800), %g1 if ((_Thread_Dispatch_disable_level > 0) || (_ISR_Nest_level > 0)) { 2002200: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2002204: 80 a0 60 00 cmp %g1, 0 2002208: 12 80 00 06 bne 2002220 200220c: 03 00 80 5f sethi %hi(0x2017c00), %g1 2002210: c2 00 60 78 ld [ %g1 + 0x78 ], %g1 ! 2017c78 <_ISR_Nest_level> 2002214: 80 a0 60 00 cmp %g1, 0 2002218: 02 80 00 07 be 2002234 200221c: 37 00 80 5e sethi %hi(0x2017800), %i3 Chain_Append(&RTEMS_Malloc_GC_list, (Chain_Node *)ptr); 2002220: b2 10 00 18 mov %i0, %i1 2002224: 31 00 80 5e sethi %hi(0x2017800), %i0 2002228: 40 00 11 61 call 20067ac <_Chain_Append> 200222c: 91 ee 22 48 restore %i0, 0x248, %o0 MSBUMP(lifetime_freed, size); } } #endif if ( !_Protected_heap_Free( &RTEMS_Malloc_Heap, ptr ) ) { 2002230: 37 00 80 5e sethi %hi(0x2017800), %i3 <== NOT EXECUTED 2002234: 92 10 00 18 mov %i0, %o1 2002238: 40 00 17 52 call 2007f80 <_Protected_heap_Free> 200223c: 90 16 e1 ec or %i3, 0x1ec, %o0 2002240: 80 a2 20 00 cmp %o0, 0 2002244: 12 80 00 08 bne 2002264 2002248: 82 16 e1 ec or %i3, 0x1ec, %g1 printk( "Program heap: free of bad pointer %p -- range %p - %p \n", 200224c: f6 00 60 1c ld [ %g1 + 0x1c ], %i3 <== NOT EXECUTED 2002250: f4 00 60 18 ld [ %g1 + 0x18 ], %i2 <== NOT EXECUTED 2002254: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED 2002258: 31 00 80 58 sethi %hi(0x2016000), %i0 <== NOT EXECUTED 200225c: 40 00 03 60 call 2002fdc <== NOT EXECUTED 2002260: 91 ee 20 30 restore %i0, 0x30, %o0 <== NOT EXECUTED 2002264: 81 c7 e0 08 ret 2002268: 81 e8 00 00 restore 02016568 : * NOTE: this must be called with * thread dispatching disabled! */ static void free_user_env(void *venv) { 2016568: 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 201656c: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 2016570: 82 10 62 34 or %g1, 0x234, %g1 ! 2038634 <== NOT EXECUTED 2016574: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 2016578: 02 80 00 18 be 20165d8 <== NOT EXECUTED 201657c: 01 00 00 00 nop <== NOT EXECUTED #ifdef HAVE_USERENV_REFCNT && --env->refcnt <= 0 #endif ) { rtems_filesystem_freenode( &env->current_directory); 2016580: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 2016584: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016588: 22 80 00 09 be,a 20165ac <== NOT EXECUTED 201658c: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 2016590: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016594: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016598: 22 80 00 05 be,a 20165ac <== NOT EXECUTED 201659c: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 20165a0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20165a4: 90 06 20 04 add %i0, 4, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &env->root_directory); 20165a8: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 20165ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20165b0: 02 80 00 08 be 20165d0 <== NOT EXECUTED 20165b4: 01 00 00 00 nop <== NOT EXECUTED 20165b8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 20165bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20165c0: 02 80 00 04 be 20165d0 <== NOT EXECUTED 20165c4: 01 00 00 00 nop <== NOT EXECUTED 20165c8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20165cc: 90 06 20 14 add %i0, 0x14, %o0 <== NOT EXECUTED free(env); 20165d0: 7f ff b7 09 call 20041f4 <== NOT EXECUTED 20165d4: 81 e8 00 00 restore <== NOT EXECUTED 20165d8: 81 c7 e0 08 ret <== NOT EXECUTED 20165dc: 81 e8 00 00 restore <== NOT EXECUTED 020153d0 : int fstat( int fd, struct stat *sbuf ) { 20153d0: 9d e3 bf 98 save %sp, -104, %sp /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) 20153d4: 80 a6 60 00 cmp %i1, 0 20153d8: 32 80 00 06 bne,a 20153f0 20153dc: 03 00 80 5a sethi %hi(0x2016800), %g1 rtems_set_errno_and_return_minus_one( EFAULT ); 20153e0: 7f ff e1 1b call 200d84c <__errno> <== NOT EXECUTED 20153e4: 01 00 00 00 nop <== NOT EXECUTED 20153e8: 10 80 00 2a b 2015490 <== NOT EXECUTED 20153ec: 82 10 20 0e mov 0xe, %g1 ! e <== NOT EXECUTED /* * Now process the stat() request. */ iop = rtems_libio_iop( fd ); 20153f0: c2 00 62 cc ld [ %g1 + 0x2cc ], %g1 20153f4: 80 a6 00 01 cmp %i0, %g1 20153f8: 1a 80 00 23 bcc 2015484 20153fc: 03 00 80 5e sethi %hi(0x2017800), %g1 2015400: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 2015404: 85 2e 20 02 sll %i0, 2, %g2 2015408: 83 2e 20 04 sll %i0, 4, %g1 201540c: 82 20 40 02 sub %g1, %g2, %g1 2015410: 82 00 40 18 add %g1, %i0, %g1 2015414: 83 28 60 02 sll %g1, 2, %g1 2015418: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_fd( fd ); rtems_libio_check_is_open(iop); 201541c: c2 06 20 0c ld [ %i0 + 0xc ], %g1 2015420: 80 88 61 00 btst 0x100, %g1 2015424: 02 80 00 18 be 2015484 2015428: 01 00 00 00 nop if ( !iop->handlers ) 201542c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 2015430: 80 a0 60 00 cmp %g1, 0 2015434: 02 80 00 14 be 2015484 2015438: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EBADF ); if ( !iop->handlers->fstat_h ) 201543c: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 2015440: 80 a0 60 00 cmp %g1, 0 2015444: 12 80 00 06 bne 201545c 2015448: 92 10 20 00 clr %o1 rtems_set_errno_and_return_minus_one( ENOTSUP ); 201544c: 7f ff e1 00 call 200d84c <__errno> <== NOT EXECUTED 2015450: 01 00 00 00 nop <== NOT EXECUTED 2015454: 10 80 00 0f b 2015490 <== NOT EXECUTED 2015458: 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) ); 201545c: 94 10 20 50 mov 0x50, %o2 2015460: 7f ff e2 fd call 200e054 2015464: 90 10 00 19 mov %i1, %o0 return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf ); 2015468: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 201546c: 90 06 20 10 add %i0, 0x10, %o0 2015470: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 2015474: 9f c0 40 00 call %g1 2015478: 92 10 00 19 mov %i1, %o1 } 201547c: 81 c7 e0 08 ret 2015480: 91 e8 00 08 restore %g0, %o0, %o0 /* * Now process the stat() request. */ iop = rtems_libio_iop( fd ); rtems_libio_check_fd( fd ); 2015484: 7f ff e0 f2 call 200d84c <__errno> <== NOT EXECUTED 2015488: 01 00 00 00 nop <== NOT EXECUTED 201548c: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 2015490: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2015494: 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 ); } 2015498: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 201549c: 81 c7 e0 08 ret <== NOT EXECUTED 20154a0: 81 e8 00 00 restore <== NOT EXECUTED 0200b80c : int ftruncate( int fd, off_t length ) { 200b80c: 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 ); 200b810: 03 00 80 5a sethi %hi(0x2016800), %g1 <== NOT EXECUTED 200b814: c2 00 62 cc ld [ %g1 + 0x2cc ], %g1 ! 2016acc <== NOT EXECUTED 200b818: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 200b81c: 1a 80 00 0d bcc 200b850 <== NOT EXECUTED 200b820: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 200b824: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200b828: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 <== NOT EXECUTED 200b82c: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 200b830: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 200b834: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 200b838: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 200b83c: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 200b840: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 200b844: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 200b848: 12 80 00 06 bne 200b860 <== NOT EXECUTED 200b84c: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 200b850: 40 00 07 ff call 200d84c <__errno> <== NOT EXECUTED 200b854: 01 00 00 00 nop <== NOT EXECUTED 200b858: 10 80 00 22 b 200b8e0 <== NOT EXECUTED 200b85c: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED /* * Make sure we are not working on a directory */ loc = iop->pathinfo; 200b860: 92 06 20 10 add %i0, 0x10, %o1 <== NOT EXECUTED 200b864: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200b868: 40 00 09 ce call 200dfa0 <== NOT EXECUTED 200b86c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 200b870: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 200b874: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 200b878: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200b87c: 02 80 00 16 be 200b8d4 <== NOT EXECUTED 200b880: 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 ) 200b884: 9f c0 40 00 call %g1 <== NOT EXECUTED 200b888: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200b88c: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 200b890: 32 80 00 06 bne,a 200b8a8 <== NOT EXECUTED 200b894: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); 200b898: 40 00 07 ed call 200d84c <__errno> <== NOT EXECUTED 200b89c: 01 00 00 00 nop <== NOT EXECUTED 200b8a0: 10 80 00 10 b 200b8e0 <== NOT EXECUTED 200b8a4: 82 10 20 15 mov 0x15, %g1 ! 15 <== NOT EXECUTED rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 200b8a8: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 200b8ac: 32 80 00 06 bne,a 200b8c4 <== NOT EXECUTED 200b8b0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 200b8b4: 40 00 07 e6 call 200d84c <__errno> <== NOT EXECUTED 200b8b8: 01 00 00 00 nop <== NOT EXECUTED 200b8bc: 10 80 00 09 b 200b8e0 <== NOT EXECUTED 200b8c0: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED if ( !iop->handlers->ftruncate_h ) 200b8c4: c2 00 60 20 ld [ %g1 + 0x20 ], %g1 <== NOT EXECUTED 200b8c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200b8cc: 32 80 00 08 bne,a 200b8ec <== NOT EXECUTED 200b8d0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 200b8d4: 40 00 07 de call 200d84c <__errno> <== NOT EXECUTED 200b8d8: 01 00 00 00 nop <== NOT EXECUTED 200b8dc: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 200b8e0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b8e4: 10 80 00 04 b 200b8f4 <== NOT EXECUTED 200b8e8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED return (*iop->handlers->ftruncate_h)( iop, length ); 200b8ec: 9f c0 40 00 call %g1 <== NOT EXECUTED 200b8f0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } 200b8f4: 81 c7 e0 08 ret <== NOT EXECUTED 200b8f8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 020155e8 : char * getcwd (pt, size) char *pt; size_t size; { 20155e8: 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) 20155ec: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 20155f0: 02 80 00 0b be 201561c <== NOT EXECUTED 20155f4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED if (!size) { errno = EINVAL; return (char *) NULL; } ept = pt + size; 20155f8: b6 10 20 00 clr %i3 <== NOT EXECUTED */ if (pt) { ptsize = 0; if (!size) 20155fc: 12 80 00 0f bne 2015638 <== NOT EXECUTED 2015600: b2 06 00 19 add %i0, %i1, %i1 <== NOT EXECUTED { errno = EINVAL; 2015604: 40 00 2e f0 call 20211c4 <__errno> <== NOT EXECUTED 2015608: b0 10 20 00 clr %i0 <== NOT EXECUTED 201560c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 2015610: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2015614: 81 c7 e0 08 ret <== NOT EXECUTED 2015618: 81 e8 00 00 restore <== NOT EXECUTED } ept = pt + size; } else { if (!(pt = (char *) malloc (ptsize = 1024 - 4))) 201561c: 7f ff bb 1e call 2004294 <== NOT EXECUTED 2015620: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 2015624: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015628: 02 bf ff fb be 2015614 <== NOT EXECUTED 201562c: b6 10 23 fc mov 0x3fc, %i3 <== NOT EXECUTED 2015630: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED { return (char *) NULL; } ept = pt + ptsize; 2015634: b2 02 23 fc add %o0, 0x3fc, %i1 <== NOT EXECUTED } bpt = ept - 1; *bpt = '\0'; 2015638: 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))) 201563c: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 2015640: 7f ff bb 15 call 2004294 <== NOT EXECUTED 2015644: ac 06 7f ff add %i1, -1, %l6 <== NOT EXECUTED 2015648: a4 92 20 00 orcc %o0, 0, %l2 <== NOT EXECUTED 201564c: 02 80 00 d7 be 20159a8 <== NOT EXECUTED 2015650: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; up[1] = '\0'; 2015654: c0 2c a0 01 clrb [ %l2 + 1 ] <== NOT EXECUTED { goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; 2015658: c2 2c 80 00 stb %g1, [ %l2 ] <== NOT EXECUTED up[1] = '\0'; /* Save root values, so know when to stop. */ if (stat ("/", &s)) 201565c: a0 07 bf a8 add %fp, -88, %l0 <== NOT EXECUTED 2015660: 11 00 80 c9 sethi %hi(0x2032400), %o0 <== NOT EXECUTED 2015664: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2015668: 7f ff bf 57 call 20053c4 <== NOT EXECUTED 201566c: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 2015670: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015674: 12 80 00 ce bne 20159ac <== NOT EXECUTED 2015678: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED goto err; root_dev = s.st_dev; 201567c: c4 1f bf a8 ldd [ %fp + -88 ], %g2 <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 2015680: 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; 2015684: c4 3f bf 98 std %g2, [ %fp + -104 ] <== NOT EXECUTED root_ino = s.st_ino; 2015688: c6 07 bf b0 ld [ %fp + -80 ], %g3 <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 201568c: 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. */ 2015690: 40 00 2e cd call 20211c4 <__errno> <== NOT EXECUTED 2015694: c6 27 bf a0 st %g3, [ %fp + -96 ] <== NOT EXECUTED 2015698: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 201569c: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED 20156a0: a6 10 00 12 mov %l2, %l3 <== NOT EXECUTED 20156a4: c4 27 bf 94 st %g2, [ %fp + -108 ] <== NOT EXECUTED 20156a8: b4 10 23 fc mov 0x3fc, %i2 <== NOT EXECUTED for (first = 1;; first = 0) { /* Stat the current level. */ if (_stat (up, &s)) 20156ac: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 20156b0: 7f ff bf 45 call 20053c4 <== NOT EXECUTED 20156b4: 92 07 bf a8 add %fp, -88, %o1 <== NOT EXECUTED 20156b8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20156bc: 12 80 00 bb bne 20159a8 <== NOT EXECUTED 20156c0: 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) 20156c4: c6 07 bf 98 ld [ %fp + -104 ], %g3 <== NOT EXECUTED 20156c8: 80 a0 c0 14 cmp %g3, %l4 <== NOT EXECUTED 20156cc: 12 80 00 14 bne 201571c <== NOT EXECUTED 20156d0: f8 07 bf b0 ld [ %fp + -80 ], %i4 <== NOT EXECUTED 20156d4: c2 07 bf 9c ld [ %fp + -100 ], %g1 <== NOT EXECUTED 20156d8: 80 a0 40 15 cmp %g1, %l5 <== NOT EXECUTED 20156dc: 12 80 00 11 bne 2015720 <== NOT EXECUTED 20156e0: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 20156e4: c4 07 bf a0 ld [ %fp + -96 ], %g2 <== NOT EXECUTED 20156e8: 80 a0 80 1c cmp %g2, %i4 <== NOT EXECUTED 20156ec: 12 80 00 0e bne 2015724 <== NOT EXECUTED 20156f0: 82 04 e4 04 add %l3, 0x404, %g1 <== NOT EXECUTED { *--bpt = '/'; 20156f4: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED 20156f8: 92 05 bf ff add %l6, -1, %o1 <== NOT EXECUTED 20156fc: 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); 2015700: 94 26 40 09 sub %i1, %o1, %o2 <== NOT EXECUTED 2015704: 40 00 35 82 call 2022d0c <== NOT EXECUTED 2015708: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 201570c: 7f ff ba ba call 20041f4 <== NOT EXECUTED 2015710: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2015714: 81 c7 e0 08 ret <== NOT EXECUTED 2015718: 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) 201571c: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 2015720: 82 04 e4 04 add %l3, 0x404, %g1 <== NOT EXECUTED 2015724: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2015728: 0a 80 00 0c bcs 2015758 <== NOT EXECUTED 201572c: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED { if (!(up = (char *) realloc (up, upsize *= 2))) 2015730: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2015734: b5 2e a0 01 sll %i2, 1, %i2 <== NOT EXECUTED 2015738: 7f ff bb 22 call 20043c0 <== NOT EXECUTED 201573c: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 2015740: a4 92 20 00 orcc %o0, 0, %l2 <== NOT EXECUTED 2015744: 02 80 00 99 be 20159a8 <== NOT EXECUTED 2015748: 82 04 80 1a add %l2, %i2, %g1 <== NOT EXECUTED { goto err; } bup = up; eup = up + upsize; 201574c: a6 10 00 12 mov %l2, %l3 <== NOT EXECUTED 2015750: c2 27 bf a4 st %g1, [ %fp + -92 ] <== NOT EXECUTED } *bup++ = '.'; 2015754: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; 2015758: c0 2c e0 02 clrb [ %l3 + 2 ] <== NOT EXECUTED } bup = up; eup = up + upsize; } *bup++ = '.'; *bup++ = '.'; 201575c: c2 2c e0 01 stb %g1, [ %l3 + 1 ] <== NOT EXECUTED goto err; } bup = up; eup = up + upsize; } *bup++ = '.'; 2015760: 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)) 2015764: 40 00 03 5c call 20164d4 <== NOT EXECUTED 2015768: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 201576c: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 2015770: 02 80 00 8f be 20159ac <== NOT EXECUTED 2015774: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 2015778: d0 07 40 00 ld [ %i5 ], %o0 <== NOT EXECUTED 201577c: 40 00 26 67 call 201f118 <== NOT EXECUTED 2015780: 92 07 bf a8 add %fp, -88, %o1 <== NOT EXECUTED 2015784: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015788: 12 80 00 92 bne 20159d0 <== NOT EXECUTED 201578c: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED goto err; /* Add trailing slash for next directory. */ *bup++ = '/'; 2015790: 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) 2015794: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED 2015798: 80 a0 40 14 cmp %g1, %l4 <== NOT EXECUTED 201579c: 12 80 00 06 bne 20157b4 <== NOT EXECUTED 20157a0: a6 04 e0 03 add %l3, 3, %l3 <== NOT EXECUTED 20157a4: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 20157a8: 80 a0 40 15 cmp %g1, %l5 <== NOT EXECUTED 20157ac: 02 80 00 04 be 20157bc <== NOT EXECUTED 20157b0: 01 00 00 00 nop <== NOT EXECUTED 20157b4: 10 80 00 0c b 20157e4 <== NOT EXECUTED 20157b8: ae 10 20 00 clr %l7 ! 0 <== NOT EXECUTED { for (;;) { if (!(dp = _readdir (dir))) 20157bc: 40 00 03 fc call 20167ac <== NOT EXECUTED 20157c0: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED 20157c4: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 20157c8: 02 80 00 6b be 2015974 <== NOT EXECUTED 20157cc: ae 10 20 00 clr %l7 <== NOT EXECUTED goto notfound; if (dp->d_ino == ino) 20157d0: c2 04 40 00 ld [ %l1 ], %g1 <== NOT EXECUTED 20157d4: 80 a0 40 1c cmp %g1, %i4 <== NOT EXECUTED 20157d8: 02 80 00 36 be 20158b0 <== NOT EXECUTED 20157dc: a0 04 60 0c add %l1, 0xc, %l0 <== NOT EXECUTED 20157e0: 30 bf ff f7 b,a 20157bc <== NOT EXECUTED } } else for (;;) { if (!(dp = _readdir (dir))) 20157e4: 40 00 03 f2 call 20167ac <== NOT EXECUTED 20157e8: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED 20157ec: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 20157f0: 02 80 00 61 be 2015974 <== NOT EXECUTED 20157f4: 01 00 00 00 nop <== NOT EXECUTED goto notfound; if (ISDOT (dp)) 20157f8: c2 4c 60 0c ldsb [ %l1 + 0xc ], %g1 <== NOT EXECUTED 20157fc: 80 a0 60 2e cmp %g1, 0x2e <== NOT EXECUTED 2015800: 12 80 00 0d bne 2015834 <== NOT EXECUTED 2015804: a0 04 60 0c add %l1, 0xc, %l0 <== NOT EXECUTED 2015808: c2 4c 60 0d ldsb [ %l1 + 0xd ], %g1 <== NOT EXECUTED 201580c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015810: 02 bf ff f5 be 20157e4 <== NOT EXECUTED 2015814: 05 00 3f ff sethi %hi(0xfffc00), %g2 <== NOT EXECUTED 2015818: c2 04 60 0c ld [ %l1 + 0xc ], %g1 <== NOT EXECUTED 201581c: 07 00 0b 80 sethi %hi(0x2e0000), %g3 <== NOT EXECUTED 2015820: 84 10 a3 00 or %g2, 0x300, %g2 <== NOT EXECUTED 2015824: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 2015828: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 201582c: 02 bf ff ee be 20157e4 <== NOT EXECUTED 2015830: 01 00 00 00 nop <== NOT EXECUTED continue; bcopy (dp->d_name, bup, strlen (dp->d_name) + 1); 2015834: 40 00 43 4c call 2026564 <== NOT EXECUTED 2015838: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 201583c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2015840: 94 02 20 01 add %o0, 1, %o2 <== NOT EXECUTED 2015844: 40 00 35 32 call 2022d0c <== NOT EXECUTED 2015848: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED /* Save the first error for later. */ if (stat (up, &s)) 201584c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2015850: 7f ff be dd call 20053c4 <== NOT EXECUTED 2015854: 92 07 bf a8 add %fp, -88, %o1 <== NOT EXECUTED 2015858: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201585c: 02 80 00 0c be 201588c <== NOT EXECUTED 2015860: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED { if (!save_errno) 2015864: 80 a5 e0 00 cmp %l7, 0 <== NOT EXECUTED 2015868: 12 80 00 05 bne 201587c <== NOT EXECUTED 201586c: 01 00 00 00 nop <== NOT EXECUTED save_errno = errno; 2015870: 40 00 2e 55 call 20211c4 <__errno> <== NOT EXECUTED 2015874: 01 00 00 00 nop <== NOT EXECUTED 2015878: ee 02 00 00 ld [ %o0 ], %l7 <== NOT EXECUTED errno = 0; 201587c: 40 00 2e 52 call 20211c4 <__errno> <== NOT EXECUTED 2015880: 01 00 00 00 nop <== NOT EXECUTED 2015884: 10 bf ff d8 b 20157e4 <== NOT EXECUTED 2015888: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED continue; } if (s.st_dev == dev && s.st_ino == ino) 201588c: 80 a0 40 14 cmp %g1, %l4 <== NOT EXECUTED 2015890: 12 bf ff d5 bne 20157e4 <== NOT EXECUTED 2015894: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 2015898: 80 a0 40 15 cmp %g1, %l5 <== NOT EXECUTED 201589c: 12 bf ff d2 bne 20157e4 <== NOT EXECUTED 20158a0: c2 07 bf b0 ld [ %fp + -80 ], %g1 <== NOT EXECUTED 20158a4: 80 a0 40 1c cmp %g1, %i4 <== NOT EXECUTED 20158a8: 12 bf ff cf bne 20157e4 <== NOT EXECUTED 20158ac: 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)) 20158b0: 40 00 43 2d call 2026564 <== NOT EXECUTED 20158b4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20158b8: c2 07 bf 94 ld [ %fp + -108 ], %g1 <== NOT EXECUTED 20158bc: a2 25 80 18 sub %l6, %i0, %l1 <== NOT EXECUTED 20158c0: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 20158c4: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED 20158c8: 82 00 60 01 inc %g1 <== NOT EXECUTED 20158cc: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 20158d0: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 20158d4: 18 80 00 17 bgu 2015930 <== NOT EXECUTED 20158d8: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED { size_t len, off; if (!ptsize) 20158dc: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 20158e0: 32 80 00 07 bne,a 20158fc <== NOT EXECUTED 20158e4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED { errno = ERANGE; 20158e8: 40 00 2e 37 call 20211c4 <__errno> <== NOT EXECUTED 20158ec: 01 00 00 00 nop <== NOT EXECUTED 20158f0: 82 10 20 22 mov 0x22, %g1 ! 22 <== NOT EXECUTED 20158f4: 10 80 00 37 b 20159d0 <== NOT EXECUTED 20158f8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED goto err; } off = bpt - pt; len = ept - bpt; if (!(pt = (char *) realloc (pt, ptsize *= 2))) 20158fc: b7 2e e0 01 sll %i3, 1, %i3 <== NOT EXECUTED 2015900: 7f ff ba b0 call 20043c0 <== NOT EXECUTED 2015904: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 2015908: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 201590c: 02 80 00 31 be 20159d0 <== NOT EXECUTED 2015910: 82 26 40 16 sub %i1, %l6, %g1 <== NOT EXECUTED { goto err; } bpt = pt + off; ept = pt + ptsize; (void) bcopy (bpt, ept - len, len); 2015914: 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; 2015918: b2 06 00 1b add %i0, %i3, %i1 <== NOT EXECUTED (void) bcopy (bpt, ept - len, len); 201591c: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 2015920: ac 26 40 01 sub %i1, %g1, %l6 <== NOT EXECUTED 2015924: 40 00 34 fa call 2022d0c <== NOT EXECUTED 2015928: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED bpt = ept - len; } if (!first) 201592c: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED 2015930: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2015934: 12 80 00 04 bne 2015944 <== NOT EXECUTED 2015938: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED *--bpt = '/'; 201593c: ac 05 bf ff add %l6, -1, %l6 <== NOT EXECUTED 2015940: c2 2d 80 00 stb %g1, [ %l6 ] <== NOT EXECUTED bpt -= strlen (dp->d_name); 2015944: 40 00 43 08 call 2026564 <== NOT EXECUTED 2015948: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); 201594c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2015950: 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); 2015954: 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'; 2015958: 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)); 201595c: 40 00 34 ec call 2022d0c <== NOT EXECUTED 2015960: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED (void) _closedir (dir); 2015964: 7f ff fe 46 call 201527c <== NOT EXECUTED 2015968: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED dir = 0; /* Truncate any file name. */ *bup = '\0'; 201596c: 10 bf ff 50 b 20156ac <== NOT EXECUTED 2015970: 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) 2015974: 40 00 2e 14 call 20211c4 <__errno> <== NOT EXECUTED 2015978: 01 00 00 00 nop <== NOT EXECUTED 201597c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 2015980: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015984: 12 80 00 13 bne 20159d0 <== NOT EXECUTED 2015988: 01 00 00 00 nop <== NOT EXECUTED errno = save_errno ? save_errno : ENOENT; 201598c: 40 00 2e 0e call 20211c4 <__errno> <== NOT EXECUTED 2015990: 01 00 00 00 nop <== NOT EXECUTED 2015994: 80 a5 e0 00 cmp %l7, 0 <== NOT EXECUTED 2015998: 22 80 00 02 be,a 20159a0 <== NOT EXECUTED 201599c: ae 10 20 02 mov 2, %l7 <== NOT EXECUTED 20159a0: 10 80 00 0c b 20159d0 <== NOT EXECUTED 20159a4: ee 22 00 00 st %l7, [ %o0 ] <== NOT EXECUTED /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); if (ptsize) 20159a8: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 20159ac: 02 80 00 05 be 20159c0 <== NOT EXECUTED 20159b0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED free (pt); 20159b4: 7f ff ba 10 call 20041f4 <== NOT EXECUTED 20159b8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 20159bc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 20159c0: 7f ff ba 0d call 20041f4 <== NOT EXECUTED 20159c4: b0 10 20 00 clr %i0 <== NOT EXECUTED 20159c8: 81 c7 e0 08 ret <== NOT EXECUTED 20159cc: 81 e8 00 00 restore <== NOT EXECUTED errno = save_errno ? save_errno : ENOENT; /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); 20159d0: 7f ff fe 2b call 201527c <== NOT EXECUTED 20159d4: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED if (ptsize) 20159d8: 10 bf ff f5 b 20159ac <== NOT EXECUTED 20159dc: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 0201f204 : int getdents( int dd_fd, char *dd_buf, int dd_len ) { 201f204: 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 ); 201f208: 03 00 80 d6 sethi %hi(0x2035800), %g1 <== NOT EXECUTED 201f20c: c2 00 61 8c ld [ %g1 + 0x18c ], %g1 ! 203598c <== NOT EXECUTED 201f210: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 201f214: 1a 80 00 0a bcc 201f23c <== NOT EXECUTED 201f218: a0 10 20 00 clr %l0 <== NOT EXECUTED 201f21c: 03 00 80 e0 sethi %hi(0x2038000), %g1 <== NOT EXECUTED 201f220: c6 00 61 5c ld [ %g1 + 0x15c ], %g3 ! 203815c <== NOT EXECUTED 201f224: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 201f228: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 201f22c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 201f230: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 201f234: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 201f238: a0 00 40 03 add %g1, %g3, %l0 <== NOT EXECUTED /* * Make sure we are working on a directory */ loc = iop->pathinfo; 201f23c: b0 07 bf e8 add %fp, -24, %i0 <== NOT EXECUTED 201f240: 92 04 20 10 add %l0, 0x10, %o1 <== NOT EXECUTED 201f244: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 201f248: 40 00 0e 84 call 2022c58 <== NOT EXECUTED 201f24c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 201f250: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 201f254: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 201f258: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201f25c: 02 80 00 11 be 201f2a0 <== NOT EXECUTED 201f260: 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 ) 201f264: 9f c0 40 00 call %g1 <== NOT EXECUTED 201f268: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 201f26c: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 201f270: 22 80 00 08 be,a 201f290 <== NOT EXECUTED 201f274: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 201f278: 40 00 07 d3 call 20211c4 <__errno> <== NOT EXECUTED 201f27c: 01 00 00 00 nop <== NOT EXECUTED 201f280: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 201f284: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 201f288: 10 80 00 0d b 201f2bc <== NOT EXECUTED 201f28c: 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 ) 201f290: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 201f294: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201f298: 32 80 00 06 bne,a 201f2b0 <== NOT EXECUTED 201f29c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 201f2a0: 40 00 07 c9 call 20211c4 <__errno> <== NOT EXECUTED 201f2a4: 01 00 00 00 nop <== NOT EXECUTED 201f2a8: 10 bf ff f7 b 201f284 <== NOT EXECUTED 201f2ac: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED return (*iop->handlers->read_h)( iop, dd_buf, dd_len ); 201f2b0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 201f2b4: 9f c0 40 00 call %g1 <== NOT EXECUTED 201f2b8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED } 201f2bc: 81 c7 e0 08 ret <== NOT EXECUTED 201f2c0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 020159e0 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getegid( void ) { 20159e0: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 20159e4: c2 00 61 a0 ld [ %g1 + 0x1a0 ], %g1 ! 20361a0 <== NOT EXECUTED return _POSIX_types_Egid; } 20159e8: 81 c3 e0 08 retl <== NOT EXECUTED 20159ec: d0 10 60 2e lduh [ %g1 + 0x2e ], %o0 <== NOT EXECUTED 020159f0 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t geteuid( void ) { 20159f0: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 20159f4: c2 00 61 a0 ld [ %g1 + 0x1a0 ], %g1 ! 20361a0 <== NOT EXECUTED return _POSIX_types_Euid; } 20159f8: 81 c3 e0 08 retl <== NOT EXECUTED 20159fc: d0 10 60 2c lduh [ %g1 + 0x2c ], %o0 <== NOT EXECUTED 02015a00 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getgid( void ) { 2015a00: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2015a04: c2 00 61 a0 ld [ %g1 + 0x1a0 ], %g1 ! 20361a0 <== NOT EXECUTED return _POSIX_types_Gid; } 2015a08: 81 c3 e0 08 retl <== NOT EXECUTED 2015a0c: d0 10 60 2a lduh [ %g1 + 0x2a ], %o0 <== NOT EXECUTED 02016068 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 2016068: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 201606c: 7f ff ff b7 call 2015f48 <== NOT EXECUTED 2016070: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/group", "r")) == NULL) { 2016074: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2016078: 13 00 80 d4 sethi %hi(0x2035000), %o1 <== NOT EXECUTED 201607c: 90 12 21 58 or %o0, 0x158, %o0 <== NOT EXECUTED 2016080: 40 00 2e 96 call 2021ad8 <== NOT EXECUTED 2016084: 92 12 63 c0 or %o1, 0x3c0, %o1 <== NOT EXECUTED 2016088: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 201608c: 12 80 00 08 bne 20160ac <== NOT EXECUTED 2016090: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED errno = EINVAL; 2016094: 40 00 2c 4c call 20211c4 <__errno> <== NOT EXECUTED 2016098: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 201609c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 20160a0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 20160a4: 81 c7 e0 08 ret <== NOT EXECUTED 20160a8: 81 e8 00 00 restore <== NOT EXECUTED return -1; } for(;;) { if (!scangr(fp, grp, buffer, bufsize)) { 20160ac: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 20160b0: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 20160b4: 7f ff fe ea call 2015c5c <== NOT EXECUTED 20160b8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20160bc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20160c0: 12 80 00 0a bne 20160e8 <== NOT EXECUTED 20160c4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; 20160c8: 40 00 2c 3f call 20211c4 <__errno> <== NOT EXECUTED 20160cc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20160d0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 20160d4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 20160d8: 40 00 2c 82 call 20212e0 <== NOT EXECUTED 20160dc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20160e0: 81 c7 e0 08 ret <== NOT EXECUTED 20160e4: 81 e8 00 00 restore <== NOT EXECUTED return -1; } if (name) { 20160e8: 22 80 00 07 be,a 2016104 <== NOT EXECUTED 20160ec: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED match = (strcmp(grp->gr_name, name) == 0); 20160f0: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED 20160f4: 40 00 3a fb call 2024ce0 <== NOT EXECUTED 20160f8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 20160fc: 10 80 00 04 b 201610c <== NOT EXECUTED 2016100: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED } else { match = (grp->gr_gid == gid); 2016104: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 2016108: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 201610c: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 2016110: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016114: 02 bf ff e6 be 20160ac <== NOT EXECUTED 2016118: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 201611c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016120: 40 00 2c 70 call 20212e0 <== NOT EXECUTED 2016124: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = grp; 2016128: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 201612c: 81 c7 e0 08 ret <== NOT EXECUTED 2016130: 81 e8 00 00 restore <== NOT EXECUTED 02015d9c : return NULL; return p; } struct group *getgrent() { 2015d9c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (group_fp == NULL) 2015da0: 03 00 80 de sethi %hi(0x2037800), %g1 <== NOT EXECUTED 2015da4: d0 00 60 1c ld [ %g1 + 0x1c ], %o0 ! 203781c <== NOT EXECUTED 2015da8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015dac: 02 80 00 0b be 2015dd8 <== NOT EXECUTED 2015db0: 15 00 80 de sethi %hi(0x2037800), %o2 <== NOT EXECUTED return NULL; if (!scangr(group_fp, &grent, grbuf, sizeof grbuf)) 2015db4: 21 00 80 de sethi %hi(0x2037800), %l0 <== NOT EXECUTED 2015db8: 92 14 20 e8 or %l0, 0xe8, %o1 ! 20378e8 <== NOT EXECUTED 2015dbc: 94 12 a0 20 or %o2, 0x20, %o2 <== NOT EXECUTED 2015dc0: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 2015dc4: 7f ff ff a6 call 2015c5c <== NOT EXECUTED 2015dc8: b0 14 20 e8 or %l0, 0xe8, %i0 <== NOT EXECUTED 2015dcc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015dd0: 12 80 00 03 bne 2015ddc <== NOT EXECUTED 2015dd4: 01 00 00 00 nop <== NOT EXECUTED 2015dd8: b0 10 20 00 clr %i0 ! 0 <== NOT EXECUTED return NULL; return &grent; } 2015ddc: 81 c7 e0 08 ret <== NOT EXECUTED 2015de0: 81 e8 00 00 restore <== NOT EXECUTED 0201616c : } struct group *getgrgid( gid_t gid ) { 201616c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrgid_r(gid, &grent, grbuf, sizeof grbuf, &p)) 2016170: 13 00 80 de sethi %hi(0x2037800), %o1 <== NOT EXECUTED 2016174: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 2016178: 92 12 60 e8 or %o1, 0xe8, %o1 <== NOT EXECUTED 201617c: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 2016180: 15 00 80 de sethi %hi(0x2037800), %o2 <== NOT EXECUTED 2016184: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 2016188: 94 12 a0 20 or %o2, 0x20, %o2 <== NOT EXECUTED 201618c: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 2016190: 7f ff ff e9 call 2016134 <== NOT EXECUTED 2016194: b0 10 20 00 clr %i0 <== NOT EXECUTED 2016198: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201619c: 22 80 00 02 be,a 20161a4 <== NOT EXECUTED 20161a0: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 20161a4: 81 c7 e0 08 ret <== NOT EXECUTED 20161a8: 81 e8 00 00 restore <== NOT EXECUTED 02016134 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 2016134: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 2016138: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 201613c: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 2016140: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 2016144: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 2016148: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 201614c: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 2016150: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 2016154: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 2016158: 90 10 20 00 clr %o0 <== NOT EXECUTED 201615c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2016160: 7f ff ff c2 call 2016068 <== NOT EXECUTED 2016164: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2016168: 01 00 00 00 nop 020161d8 : } struct group *getgrnam( const char *name ) { 20161d8: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrnam_r(name, &grent, grbuf, sizeof grbuf, &p)) 20161dc: 13 00 80 de sethi %hi(0x2037800), %o1 <== NOT EXECUTED 20161e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20161e4: 92 12 60 e8 or %o1, 0xe8, %o1 <== NOT EXECUTED 20161e8: 15 00 80 de sethi %hi(0x2037800), %o2 <== NOT EXECUTED 20161ec: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 20161f0: 94 12 a0 20 or %o2, 0x20, %o2 <== NOT EXECUTED 20161f4: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 20161f8: 7f ff ff ed call 20161ac <== NOT EXECUTED 20161fc: b0 10 20 00 clr %i0 <== NOT EXECUTED 2016200: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016204: 22 80 00 02 be,a 201620c <== NOT EXECUTED 2016208: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 201620c: 81 c7 e0 08 ret <== NOT EXECUTED 2016210: 81 e8 00 00 restore <== NOT EXECUTED 020161ac : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 20161ac: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 20161b0: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 20161b4: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(name, 0, grp, buffer, bufsize, result); 20161b8: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 20161bc: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 20161c0: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 20161c4: 92 10 20 00 clr %o1 <== NOT EXECUTED 20161c8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 20161cc: 7f ff ff a7 call 2016068 <== NOT EXECUTED 20161d0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 20161d4: 01 00 00 00 nop 02020090 : */ pid_t getpid( void ) { return _Objects_Local_node; } 2020090: 81 c3 e0 08 retl <== NOT EXECUTED 2020094: 90 10 20 01 mov 1, %o0 ! 1 <== NOT EXECUTED 02016258 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 2016258: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 201625c: 7f ff ff 3b call 2015f48 <== NOT EXECUTED 2016260: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/passwd", "r")) == NULL) { 2016264: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2016268: 13 00 80 d4 sethi %hi(0x2035000), %o1 <== NOT EXECUTED 201626c: 90 12 20 e0 or %o0, 0xe0, %o0 <== NOT EXECUTED 2016270: 40 00 2e 1a call 2021ad8 <== NOT EXECUTED 2016274: 92 12 63 c0 or %o1, 0x3c0, %o1 <== NOT EXECUTED 2016278: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 201627c: 12 80 00 08 bne 201629c <== NOT EXECUTED 2016280: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED errno = EINVAL; 2016284: 40 00 2b d0 call 20211c4 <__errno> <== NOT EXECUTED 2016288: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 201628c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 2016290: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2016294: 81 c7 e0 08 ret <== NOT EXECUTED 2016298: 81 e8 00 00 restore <== NOT EXECUTED return -1; } for(;;) { if (!scanpw(fp, pwd, buffer, bufsize)) { 201629c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 20162a0: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 20162a4: 7f ff fe d0 call 2015de4 <== NOT EXECUTED 20162a8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20162ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20162b0: 12 80 00 0a bne 20162d8 <== NOT EXECUTED 20162b4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; 20162b8: 40 00 2b c3 call 20211c4 <__errno> <== NOT EXECUTED 20162bc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20162c0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 20162c4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 20162c8: 40 00 2c 06 call 20212e0 <== NOT EXECUTED 20162cc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20162d0: 81 c7 e0 08 ret <== NOT EXECUTED 20162d4: 81 e8 00 00 restore <== NOT EXECUTED return -1; } if (name) { 20162d8: 22 80 00 07 be,a 20162f4 <== NOT EXECUTED 20162dc: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED match = (strcmp(pwd->pw_name, name) == 0); 20162e0: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED 20162e4: 40 00 3a 7f call 2024ce0 <== NOT EXECUTED 20162e8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 20162ec: 10 80 00 04 b 20162fc <== NOT EXECUTED 20162f0: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED } else { match = (pwd->pw_uid == uid); 20162f4: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 20162f8: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 20162fc: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 2016300: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016304: 02 bf ff e6 be 201629c <== NOT EXECUTED 2016308: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 201630c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016310: 40 00 2b f4 call 20212e0 <== NOT EXECUTED 2016314: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = pwd; 2016318: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 201631c: 81 c7 e0 08 ret <== NOT EXECUTED 2016320: 81 e8 00 00 restore <== NOT EXECUTED 02015f00 : return NULL; return p; } struct passwd *getpwent() { 2015f00: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (passwd_fp == NULL) 2015f04: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 2015f08: d0 00 63 34 ld [ %g1 + 0x334 ], %o0 ! 2037734 <== NOT EXECUTED 2015f0c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015f10: 02 80 00 0b be 2015f3c <== NOT EXECUTED 2015f14: 15 00 80 dd sethi %hi(0x2037400), %o2 <== NOT EXECUTED return NULL; if (!scanpw(passwd_fp, &pwent, pwbuf, sizeof pwbuf)) 2015f18: 21 00 80 de sethi %hi(0x2037800), %l0 <== NOT EXECUTED 2015f1c: 92 14 20 00 mov %l0, %o1 ! 2037800 <== NOT EXECUTED 2015f20: 94 12 a3 38 or %o2, 0x338, %o2 <== NOT EXECUTED 2015f24: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 2015f28: 7f ff ff af call 2015de4 <== NOT EXECUTED 2015f2c: b0 14 20 00 mov %l0, %i0 <== NOT EXECUTED 2015f30: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015f34: 12 80 00 03 bne 2015f40 <== NOT EXECUTED 2015f38: 01 00 00 00 nop <== NOT EXECUTED 2015f3c: b0 10 20 00 clr %i0 ! 0 <== NOT EXECUTED return NULL; return &pwent; } 2015f40: 81 c7 e0 08 ret <== NOT EXECUTED 2015f44: 81 e8 00 00 restore <== NOT EXECUTED 020163c8 : } struct passwd *getpwnam( const char *name ) { 20163c8: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwnam_r(name, &pwent, pwbuf, sizeof pwbuf, &p)) 20163cc: 13 00 80 de sethi %hi(0x2037800), %o1 <== NOT EXECUTED 20163d0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20163d4: 92 12 60 00 mov %o1, %o1 <== NOT EXECUTED 20163d8: 15 00 80 dd sethi %hi(0x2037400), %o2 <== NOT EXECUTED 20163dc: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 20163e0: 94 12 a3 38 or %o2, 0x338, %o2 <== NOT EXECUTED 20163e4: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 20163e8: 7f ff ff ed call 201639c <== NOT EXECUTED 20163ec: b0 10 20 00 clr %i0 <== NOT EXECUTED 20163f0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20163f4: 22 80 00 02 be,a 20163fc <== NOT EXECUTED 20163f8: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 20163fc: 81 c7 e0 08 ret <== NOT EXECUTED 2016400: 81 e8 00 00 restore <== NOT EXECUTED 0201639c : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 201639c: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 20163a0: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 20163a4: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(name, 0, pwd, buffer, bufsize, result); 20163a8: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 20163ac: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 20163b0: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 20163b4: 92 10 20 00 clr %o1 <== NOT EXECUTED 20163b8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 20163bc: 7f ff ff a7 call 2016258 <== NOT EXECUTED 20163c0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 20163c4: 01 00 00 00 nop 0201635c : } struct passwd *getpwuid( uid_t uid ) { 201635c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwuid_r(uid, &pwent, pwbuf, sizeof pwbuf, &p)) 2016360: 13 00 80 de sethi %hi(0x2037800), %o1 <== NOT EXECUTED 2016364: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 2016368: 92 12 60 00 mov %o1, %o1 <== NOT EXECUTED 201636c: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 2016370: 15 00 80 dd sethi %hi(0x2037400), %o2 <== NOT EXECUTED 2016374: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 2016378: 94 12 a3 38 or %o2, 0x338, %o2 <== NOT EXECUTED 201637c: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 2016380: 7f ff ff e9 call 2016324 <== NOT EXECUTED 2016384: b0 10 20 00 clr %i0 <== NOT EXECUTED 2016388: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201638c: 22 80 00 02 be,a 2016394 <== NOT EXECUTED 2016390: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 2016394: 81 c7 e0 08 ret <== NOT EXECUTED 2016398: 81 e8 00 00 restore <== NOT EXECUTED 02016324 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 2016324: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 2016328: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 201632c: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 2016330: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 2016334: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 2016338: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 201633c: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 2016340: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 2016344: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 2016348: 90 10 20 00 clr %o0 <== NOT EXECUTED 201634c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2016350: 7f ff ff c2 call 2016258 <== NOT EXECUTED 2016354: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2016358: 01 00 00 00 nop 0200b8fc : int gettimeofday( struct timeval *tp, void * __tz ) { 200b8fc: 9d e3 bf 90 save %sp, -112, %sp /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) { 200b900: 80 a6 20 00 cmp %i0, 0 200b904: 12 80 00 08 bne 200b924 200b908: 01 00 00 00 nop errno = EFAULT; 200b90c: 40 00 07 d0 call 200d84c <__errno> <== NOT EXECUTED 200b910: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 200b914: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 200b918: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 200b91c: 81 c7 e0 08 ret <== NOT EXECUTED 200b920: 81 e8 00 00 restore <== NOT EXECUTED ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 200b924: 7f ff d9 07 call 2001d40 200b928: 01 00 00 00 nop 200b92c: a0 10 00 08 mov %o0, %l0 _TOD_Get( &now ); 200b930: 7f ff ec 92 call 2006b78 <_TOD_Get> 200b934: 90 07 bf f0 add %fp, -16, %o0 _ISR_Enable(level); 200b938: 7f ff d9 06 call 2001d50 200b93c: 90 10 00 10 mov %l0, %o0 time->tv_sec = now.tv_sec; time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 200b940: d0 07 bf f4 ld [ %fp + -12 ], %o0 _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 200b944: c2 07 bf f0 ld [ %fp + -16 ], %g1 time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 200b948: 92 10 23 e8 mov 0x3e8, %o1 200b94c: 40 00 23 5d call 20146c0 <.udiv> 200b950: c2 26 00 00 st %g1, [ %i0 ] 200b954: 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; } 200b958: 81 c7 e0 08 ret 200b95c: 91 e8 20 00 restore %g0, 0, %o0 02016404 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t getuid( void ) { 2016404: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2016408: c2 00 61 a0 ld [ %g1 + 0x1a0 ], %g1 ! 20361a0 <== NOT EXECUTED return _POSIX_types_Uid; } 201640c: 81 c3 e0 08 retl <== NOT EXECUTED 2016410: d0 10 60 28 lduh [ %g1 + 0x28 ], %o0 <== NOT EXECUTED 0201eaec : * and associated memory. At present the imfs_dir_close simply * returns a successful completion status. */ return 0; } 201eaec: 81 c3 e0 08 retl <== NOT EXECUTED 201eaf0: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED 0201eaf4 : Chain_Node *the_node; Chain_Control *the_chain; IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) loc->node_access; 201eaf4: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED buf->st_dev = 0ll; 201eaf8: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; 201eafc: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 201eb00: 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; 201eb04: c4 22 60 08 st %g2, [ %o1 + 8 ] <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 201eb08: 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; 201eb0c: c0 22 60 3c clr [ %o1 + 0x3c ] <== NOT EXECUTED buf->st_blocks = 0; 201eb10: 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; 201eb14: 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; 201eb18: 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; 201eb1c: 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; 201eb20: 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; 201eb24: 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; 201eb28: 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; 201eb2c: 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; 201eb30: 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; 201eb34: 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; 201eb38: 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; 201eb3c: 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; 201eb40: 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; 201eb44: 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; 201eb48: c0 22 60 18 clr [ %o1 + 0x18 ] <== NOT EXECUTED 201eb4c: 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; 201eb50: 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 ; 201eb54: c4 00 60 4c ld [ %g1 + 0x4c ], %g2 <== NOT EXECUTED !_Chain_Is_tail( the_chain, the_node ) ; 201eb58: 10 80 00 05 b 201eb6c <== NOT EXECUTED 201eb5c: 86 00 60 50 add %g1, 0x50, %g3 <== NOT EXECUTED the_node = the_node->next ) { 201eb60: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED buf->st_size = buf->st_size + sizeof( struct dirent ); 201eb64: 82 00 61 0c add %g1, 0x10c, %g1 <== NOT EXECUTED 201eb68: 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 ) ; 201eb6c: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 201eb70: 32 bf ff fc bne,a 201eb60 <== NOT EXECUTED 201eb74: c2 02 60 20 ld [ %o1 + 0x20 ], %g1 <== NOT EXECUTED buf->st_size = buf->st_size + sizeof( struct dirent ); } return 0; } 201eb78: 81 c3 e0 08 retl <== NOT EXECUTED 201eb7c: 90 10 20 00 clr %o0 <== NOT EXECUTED 0201eb80 : off_t imfs_dir_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 201eb80: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch( whence ) { 201eb84: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED 201eb88: 18 80 00 0e bgu 201ebc0 <== NOT EXECUTED 201eb8c: 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)) * 201eb90: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED 201eb94: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 201eb98: 40 00 45 a8 call 2030238 <.udiv> <== NOT EXECUTED 201eb9c: b0 10 20 00 clr %i0 <== NOT EXECUTED 201eba0: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 201eba4: 85 2a 20 06 sll %o0, 6, %g2 <== NOT EXECUTED 201eba8: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 201ebac: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 201ebb0: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 201ebb4: c2 26 a0 08 st %g1, [ %i2 + 8 ] <== NOT EXECUTED 201ebb8: 81 c7 e0 08 ret <== NOT EXECUTED 201ebbc: 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 ); 201ebc0: 40 00 09 81 call 20211c4 <__errno> <== NOT EXECUTED 201ebc4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 201ebc8: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 201ebcc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED break; } return 0; } 201ebd0: 81 c7 e0 08 ret <== NOT EXECUTED 201ebd4: 81 e8 00 00 restore <== NOT EXECUTED 0201eac4 : IMFS_jnode_t *the_jnode; /* Is the node a directory ? */ the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) 201eac4: c2 02 20 2c ld [ %o0 + 0x2c ], %g1 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 201eac8: 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 ) 201eacc: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 <== NOT EXECUTED 201ead0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 201ead4: 12 80 00 04 bne 201eae4 <== NOT EXECUTED 201ead8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED return -1; /* It wasn't a directory --> return error */ iop->offset = 0; 201eadc: c0 20 a0 08 clr [ %g2 + 8 ] <== NOT EXECUTED 201eae0: 90 10 20 00 clr %o0 <== NOT EXECUTED return 0; } 201eae4: 81 c3 e0 08 retl <== NOT EXECUTED 201eae8: 01 00 00 00 nop 0201ebd8 : ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 201ebd8: 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; 201ebdc: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 <== NOT EXECUTED ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 201ebe0: 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)); 201ebe4: 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; 201ebe8: 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 ) ) 201ebec: 80 a4 40 14 cmp %l1, %l4 <== NOT EXECUTED 201ebf0: 02 80 00 2c be 201eca0 <== NOT EXECUTED 201ebf4: 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; 201ebf8: 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); 201ebfc: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 201ec00: 40 00 45 8e call 2030238 <.udiv> <== NOT EXECUTED 201ec04: 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 ); 201ec08: 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); 201ec0c: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 201ec10: 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 ); 201ec14: 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); 201ec18: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 201ec1c: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 201ec20: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 201ec24: 10 80 00 1c b 201ec94 <== NOT EXECUTED 201ec28: 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 ) ){ 201ec2c: 02 80 00 1d be 201eca0 <== NOT EXECUTED 201ec30: 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 ) { 201ec34: 26 80 00 17 bl,a 201ec90 <== NOT EXECUTED 201ec38: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; 201ec3c: 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; 201ec40: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 <== NOT EXECUTED tmp_dirent.d_namlen = strlen( the_jnode->name ); 201ec44: 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; 201ec48: 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 ); 201ec4c: 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 ); 201ec50: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 201ec54: 40 00 1e 44 call 2026564 <== NOT EXECUTED 201ec58: c2 37 be f4 sth %g1, [ %fp + -268 ] <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 201ec5c: 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 ); 201ec60: d0 37 be f6 sth %o0, [ %fp + -266 ] <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 201ec64: 40 00 18 4f call 2024da0 <== NOT EXECUTED 201ec68: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED memcpy( 201ec6c: 90 06 40 12 add %i1, %l2, %o0 <== NOT EXECUTED 201ec70: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 201ec74: 40 00 0f f9 call 2022c58 <== NOT EXECUTED 201ec78: 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); 201ec7c: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); 201ec80: 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); 201ec84: 82 00 61 0c add %g1, 0x10c, %g1 <== NOT EXECUTED 201ec88: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); } the_node = the_node->next; 201ec8c: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED 201ec90: 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; 201ec94: 80 a6 80 15 cmp %i2, %l5 <== NOT EXECUTED 201ec98: 06 bf ff e5 bl 201ec2c <== NOT EXECUTED 201ec9c: 80 a4 40 14 cmp %l1, %l4 <== NOT EXECUTED the_node = the_node->next; } /* Success */ return bytes_transferred; } 201eca0: 81 c7 e0 08 ret <== NOT EXECUTED 201eca4: 91 e8 00 12 restore %g0, %l2, %o0 <== NOT EXECUTED 0201eca8 : */ int imfs_dir_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 201eca8: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 201ecac: 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 ) ) 201ecb0: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 201ecb4: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 201ecb8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 201ecbc: 22 80 00 06 be,a 201ecd4 <== NOT EXECUTED 201ecc0: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTEMPTY ); 201ecc4: 40 00 09 40 call 20211c4 <__errno> <== NOT EXECUTED 201ecc8: 01 00 00 00 nop <== NOT EXECUTED 201eccc: 10 80 00 0d b 201ed00 <== NOT EXECUTED 201ecd0: 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 ) 201ecd4: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 201ecd8: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 201ecdc: 02 80 00 06 be 201ecf4 <== NOT EXECUTED 201ece0: 01 00 00 00 nop <== NOT EXECUTED /* * You cannot remove a mountpoint. */ if ( the_jnode->info.directory.mt_fs != NULL ) 201ece4: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 201ece8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201ecec: 22 80 00 08 be,a 201ed0c <== NOT EXECUTED 201ecf0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBUSY ); 201ecf4: 40 00 09 34 call 20211c4 <__errno> <== NOT EXECUTED 201ecf8: 01 00 00 00 nop <== NOT EXECUTED 201ecfc: 82 10 20 10 mov 0x10, %g1 ! 10 <== NOT EXECUTED 201ed00: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 201ed04: 81 c7 e0 08 ret <== NOT EXECUTED 201ed08: 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 ) { 201ed0c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201ed10: 22 80 00 06 be,a 201ed28 <== NOT EXECUTED 201ed14: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 201ed18: 7f ff e2 d0 call 2017858 <_Chain_Extract> <== NOT EXECUTED 201ed1c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 201ed20: 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--; 201ed24: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 201ed28: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 201ed2c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 201ed30: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 201ed34: 7f ff 94 22 call 2003dbc <== NOT EXECUTED 201ed38: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 201ed3c: 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) ) { 201ed40: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 201ed44: 7f ff 94 88 call 2003f64 <== NOT EXECUTED 201ed48: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 201ed4c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201ed50: 12 80 00 11 bne 201ed94 <== NOT EXECUTED 201ed54: 01 00 00 00 nop <== NOT EXECUTED 201ed58: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 201ed5c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201ed60: 12 80 00 0d bne 201ed94 <== NOT EXECUTED 201ed64: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 201ed68: c6 00 61 a0 ld [ %g1 + 0x1a0 ], %g3 ! 20361a0 <== NOT EXECUTED 201ed6c: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 201ed70: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 201ed74: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 201ed78: 22 80 00 02 be,a 201ed80 <== NOT EXECUTED 201ed7c: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ free( the_jnode ); 201ed80: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 201ed84: 7f ff 95 1c call 20041f4 <== NOT EXECUTED 201ed88: b0 10 20 00 clr %i0 <== NOT EXECUTED 201ed8c: 81 c7 e0 08 ret <== NOT EXECUTED 201ed90: 81 e8 00 00 restore <== NOT EXECUTED } return 0; } 201ed94: 81 c7 e0 08 ret <== NOT EXECUTED 201ed98: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 02015f48 : /* * Initialize useable but dummy databases */ void init_etc_passwd_group(void) { 2015f48: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; static char etc_passwd_initted = 0; if (etc_passwd_initted) 2015f4c: 05 00 80 dd sethi %hi(0x2037400), %g2 <== NOT EXECUTED 2015f50: c2 48 a3 30 ldsb [ %g2 + 0x330 ], %g1 ! 2037730 <== NOT EXECUTED 2015f54: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015f58: 12 80 00 31 bne 201601c <== NOT EXECUTED 2015f5c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED return; etc_passwd_initted = 1; mkdir("/etc", 0777); 2015f60: 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; 2015f64: c2 28 a3 30 stb %g1, [ %g2 + 0x330 ] <== NOT EXECUTED mkdir("/etc", 0777); 2015f68: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 2015f6c: 40 00 01 2f call 2016428 <== NOT EXECUTED 2015f70: 90 12 20 d8 or %o0, 0xd8, %o0 ! 20330d8 <_CPU_Trap_slot_template+0xe70> <== NOT EXECUTED /* * Initialize /etc/passwd */ if ((fp = fopen("/etc/passwd", "r")) != NULL) { 2015f74: 31 00 80 cc sethi %hi(0x2033000), %i0 <== NOT EXECUTED 2015f78: 13 00 80 d4 sethi %hi(0x2035000), %o1 <== NOT EXECUTED 2015f7c: 90 16 20 e0 or %i0, 0xe0, %o0 <== NOT EXECUTED 2015f80: 40 00 2e d6 call 2021ad8 <== NOT EXECUTED 2015f84: 92 12 63 c0 or %o1, 0x3c0, %o1 <== NOT EXECUTED 2015f88: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015f8c: 12 80 00 0d bne 2015fc0 <== NOT EXECUTED 2015f90: 01 00 00 00 nop <== NOT EXECUTED fclose(fp); } else if ((fp = fopen("/etc/passwd", "w")) != NULL) { 2015f94: 90 16 20 e0 or %i0, 0xe0, %o0 <== NOT EXECUTED 2015f98: 13 00 80 c8 sethi %hi(0x2032000), %o1 <== NOT EXECUTED 2015f9c: 40 00 2e cf call 2021ad8 <== NOT EXECUTED 2015fa0: 92 12 62 78 or %o1, 0x278, %o1 ! 2032278 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 2015fa4: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 2015fa8: 02 80 00 08 be 2015fc8 <== NOT EXECUTED 2015fac: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED fprintf(fp, "root:*:0:0:root::/:/bin/sh\n" 2015fb0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2015fb4: 40 00 2f 1e call 2021c2c <== NOT EXECUTED 2015fb8: 90 12 20 f0 or %o0, 0xf0, %o0 <== NOT EXECUTED "rtems:*:1:1:RTEMS Application::/:/bin/sh\n" "tty:!:2:2:tty owner::/:/bin/false\n" ); fclose(fp); 2015fbc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015fc0: 40 00 2c c8 call 20212e0 <== NOT EXECUTED 2015fc4: 01 00 00 00 nop <== NOT EXECUTED } /* * Initialize /etc/group */ if ((fp = fopen("/etc/group", "r")) != NULL) { 2015fc8: 31 00 80 cc sethi %hi(0x2033000), %i0 <== NOT EXECUTED 2015fcc: 13 00 80 d4 sethi %hi(0x2035000), %o1 <== NOT EXECUTED 2015fd0: 90 16 21 58 or %i0, 0x158, %o0 <== NOT EXECUTED 2015fd4: 40 00 2e c1 call 2021ad8 <== NOT EXECUTED 2015fd8: 92 12 63 c0 or %o1, 0x3c0, %o1 <== NOT EXECUTED 2015fdc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015fe0: 22 80 00 04 be,a 2015ff0 <== NOT EXECUTED 2015fe4: 90 16 21 58 or %i0, 0x158, %o0 <== NOT EXECUTED fclose(fp); 2015fe8: 10 80 00 0b b 2016014 <== NOT EXECUTED 2015fec: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } else if ((fp = fopen("/etc/group", "w")) != NULL) { 2015ff0: 13 00 80 c8 sethi %hi(0x2032000), %o1 <== NOT EXECUTED 2015ff4: 40 00 2e b9 call 2021ad8 <== NOT EXECUTED 2015ff8: 92 12 62 78 or %o1, 0x278, %o1 ! 2032278 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 2015ffc: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 2016000: 02 80 00 07 be 201601c <== NOT EXECUTED 2016004: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED fprintf( fp, "root:x:0:root\n" 2016008: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 201600c: 40 00 2f 08 call 2021c2c <== NOT EXECUTED 2016010: 90 12 21 68 or %o0, 0x168, %o0 <== NOT EXECUTED "rtems:x:1:rtems\n" "tty:x:2:tty\n" ); fclose(fp); 2016014: 40 00 2c b3 call 20212e0 <== NOT EXECUTED 2016018: 81 e8 00 00 restore <== NOT EXECUTED 201601c: 81 c7 e0 08 ret <== NOT EXECUTED 2016020: 81 e8 00 00 restore <== NOT EXECUTED 020159ac : int ioctl( int fd, ioctl_command_t command, ... ) { 20159ac: 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 ); 20159b0: 03 00 80 90 sethi %hi(0x2024000), %g1 <== NOT EXECUTED 20159b4: c2 00 61 7c ld [ %g1 + 0x17c ], %g1 ! 202417c <== NOT EXECUTED int ioctl( int fd, ioctl_command_t command, ... ) { 20159b8: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 20159bc: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 20159c0: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED 20159c4: 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 ); 20159c8: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 20159cc: 1a 80 00 14 bcc 2015a1c <== NOT EXECUTED 20159d0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 20159d4: 03 00 80 98 sethi %hi(0x2026000), %g1 <== NOT EXECUTED 20159d8: c6 00 62 b0 ld [ %g1 + 0x2b0 ], %g3 ! 20262b0 <== NOT EXECUTED 20159dc: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 20159e0: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 20159e4: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 20159e8: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 20159ec: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 20159f0: 90 00 40 03 add %g1, %g3, %o0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 20159f4: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 20159f8: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 20159fc: 02 80 00 08 be 2015a1c <== NOT EXECUTED 2015a00: 01 00 00 00 nop <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 2015a04: 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 *); 2015a08: 82 07 a0 50 add %fp, 0x50, %g1 <== NOT EXECUTED 2015a0c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 2015a10: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2015a14: 12 80 00 06 bne 2015a2c <== NOT EXECUTED 2015a18: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 2015a1c: 40 00 01 72 call 2015fe4 <__errno> <== NOT EXECUTED 2015a20: 01 00 00 00 nop <== NOT EXECUTED 2015a24: 10 80 00 09 b 2015a48 <== NOT EXECUTED 2015a28: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED if ( !iop->handlers->ioctl_h ) 2015a2c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 2015a30: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015a34: 12 80 00 08 bne 2015a54 <== NOT EXECUTED 2015a38: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2015a3c: 40 00 01 6a call 2015fe4 <__errno> <== NOT EXECUTED 2015a40: 01 00 00 00 nop <== NOT EXECUTED 2015a44: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 2015a48: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2015a4c: 10 80 00 04 b 2015a5c <== NOT EXECUTED 2015a50: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = (*iop->handlers->ioctl_h)( iop, command, buffer ); 2015a54: 9f c0 40 00 call %g1 <== NOT EXECUTED 2015a58: 01 00 00 00 nop <== NOT EXECUTED return rc; } 2015a5c: 81 c7 e0 08 ret <== NOT EXECUTED 2015a60: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 02003b8c : /* * Process a single input character */ static int iproc (unsigned char c, struct rtems_termios_tty *tty) { 2003b8c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->termios.c_iflag & ISTRIP) 2003b90: c4 06 60 30 ld [ %i1 + 0x30 ], %g2 <== NOT EXECUTED 2003b94: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 2003b98: 02 80 00 03 be 2003ba4 <== NOT EXECUTED 2003b9c: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED c &= 0x7f; 2003ba0: a2 0e 20 7f and %i0, 0x7f, %l1 <== NOT EXECUTED if (tty->termios.c_iflag & IUCLC) 2003ba4: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED 2003ba8: 02 80 00 0b be 2003bd4 <== NOT EXECUTED 2003bac: 82 0c 60 ff and %l1, 0xff, %g1 <== NOT EXECUTED c = tolower (c); 2003bb0: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 2003bb4: c2 00 62 48 ld [ %g1 + 0x248 ], %g1 ! 2017248 <__ctype_ptr> <== NOT EXECUTED 2003bb8: 90 0c 60 ff and %l1, 0xff, %o0 <== NOT EXECUTED 2003bbc: c2 08 40 08 ldub [ %g1 + %o0 ], %g1 <== NOT EXECUTED 2003bc0: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 2003bc4: 32 80 00 02 bne,a 2003bcc <== NOT EXECUTED 2003bc8: 90 02 20 20 add %o0, 0x20, %o0 <== NOT EXECUTED 2003bcc: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED if (c == '\r') { 2003bd0: 82 0c 60 ff and %l1, 0xff, %g1 <== NOT EXECUTED 2003bd4: 80 a0 60 0d cmp %g1, 0xd <== NOT EXECUTED 2003bd8: 12 80 00 09 bne 2003bfc <== NOT EXECUTED 2003bdc: 80 a0 60 0a cmp %g1, 0xa <== NOT EXECUTED if (tty->termios.c_iflag & IGNCR) 2003be0: 80 88 a0 80 btst 0x80, %g2 <== NOT EXECUTED 2003be4: 12 80 00 59 bne 2003d48 <== NOT EXECUTED 2003be8: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED return 0; if (tty->termios.c_iflag & ICRNL) 2003bec: 32 80 00 0d bne,a 2003c20 <== NOT EXECUTED 2003bf0: 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)) { 2003bf4: 10 80 00 0c b 2003c24 <== NOT EXECUTED 2003bf8: 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)) { 2003bfc: 12 80 00 07 bne 2003c18 <== NOT EXECUTED 2003c00: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003c04: 80 88 a0 40 btst 0x40, %g2 <== NOT EXECUTED 2003c08: 32 80 00 06 bne,a 2003c20 <== NOT EXECUTED 2003c0c: a2 10 20 0d mov 0xd, %l1 <== NOT EXECUTED c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 2003c10: 10 80 00 05 b 2003c24 <== NOT EXECUTED 2003c14: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED 2003c18: 02 80 00 3a be 2003d00 <== NOT EXECUTED 2003c1c: 03 00 80 5b sethi %hi(0x2016c00), %g1 <== NOT EXECUTED 2003c20: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED 2003c24: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 2003c28: 02 80 00 36 be 2003d00 <== NOT EXECUTED 2003c2c: 03 00 80 5b sethi %hi(0x2016c00), %g1 <== NOT EXECUTED if (c == tty->termios.c_cc[VERASE]) { 2003c30: c2 0e 60 43 ldub [ %i1 + 0x43 ], %g1 <== NOT EXECUTED 2003c34: a0 0c 60 ff and %l1, 0xff, %l0 <== NOT EXECUTED erase (tty, 0); 2003c38: 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]) { 2003c3c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003c40: 02 80 00 08 be 2003c60 <== NOT EXECUTED 2003c44: 92 10 20 00 clr %o1 <== NOT EXECUTED erase (tty, 0); return 0; } else if (c == tty->termios.c_cc[VKILL]) { 2003c48: c2 0e 60 44 ldub [ %i1 + 0x44 ], %g1 <== NOT EXECUTED 2003c4c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003c50: 32 80 00 07 bne,a 2003c6c <== NOT EXECUTED 2003c54: c2 0e 60 45 ldub [ %i1 + 0x45 ], %g1 <== NOT EXECUTED erase (tty, 1); 2003c58: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2003c5c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 2003c60: 7f ff ff 3e call 2003958 <== NOT EXECUTED 2003c64: b0 10 20 00 clr %i0 <== NOT EXECUTED 2003c68: 30 80 00 39 b,a 2003d4c <== NOT EXECUTED return 0; } else if (c == tty->termios.c_cc[VEOF]) { 2003c6c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003c70: 02 80 00 37 be 2003d4c <== NOT EXECUTED 2003c74: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return 1; } else if (c == '\n') { 2003c78: 80 a4 20 0a cmp %l0, 0xa <== NOT EXECUTED 2003c7c: 32 80 00 0d bne,a 2003cb0 <== NOT EXECUTED 2003c80: c2 0e 60 4c ldub [ %i1 + 0x4c ], %g1 <== NOT EXECUTED if (tty->termios.c_lflag & (ECHO | ECHONL)) 2003c84: 80 88 a0 48 btst 0x48, %g2 <== NOT EXECUTED 2003c88: 22 80 00 06 be,a 2003ca0 <== NOT EXECUTED 2003c8c: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED echo (c, tty); 2003c90: 90 10 20 0a mov 0xa, %o0 <== NOT EXECUTED 2003c94: 7f ff ff 0f call 20038d0 <== NOT EXECUTED 2003c98: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 2003c9c: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 2003ca0: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 2003ca4: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 2003ca8: 10 80 00 13 b 2003cf4 <== NOT EXECUTED 2003cac: e0 28 80 01 stb %l0, [ %g2 + %g1 ] <== NOT EXECUTED return 1; } else if ((c == tty->termios.c_cc[VEOL]) 2003cb0: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003cb4: 02 80 00 07 be 2003cd0 <== NOT EXECUTED 2003cb8: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED 2003cbc: c2 0e 60 51 ldub [ %i1 + 0x51 ], %g1 <== NOT EXECUTED 2003cc0: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003cc4: 12 80 00 0f bne 2003d00 <== NOT EXECUTED 2003cc8: 03 00 80 5b sethi %hi(0x2016c00), %g1 <== NOT EXECUTED || (c == tty->termios.c_cc[VEOL2])) { if (tty->termios.c_lflag & ECHO) 2003ccc: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED 2003cd0: 22 80 00 06 be,a 2003ce8 <== NOT EXECUTED 2003cd4: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED echo (c, tty); 2003cd8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2003cdc: 7f ff fe fd call 20038d0 <== NOT EXECUTED 2003ce0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 2003ce4: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 2003ce8: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 2003cec: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 2003cf0: e2 28 80 01 stb %l1, [ %g2 + %g1 ] <== NOT EXECUTED 2003cf4: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 2003cf8: 81 c7 e0 08 ret <== NOT EXECUTED 2003cfc: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED } /* * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { 2003d00: c4 06 60 20 ld [ %i1 + 0x20 ], %g2 <== NOT EXECUTED 2003d04: c2 00 63 cc ld [ %g1 + 0x3cc ], %g1 <== NOT EXECUTED 2003d08: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2003d0c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2003d10: 16 80 00 0f bge 2003d4c <== NOT EXECUTED 2003d14: b0 10 20 00 clr %i0 <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) 2003d18: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 2003d1c: 80 88 60 08 btst 8, %g1 <== NOT EXECUTED 2003d20: 22 80 00 06 be,a 2003d38 <== NOT EXECUTED 2003d24: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED echo (c, tty); 2003d28: 90 0c 60 ff and %l1, 0xff, %o0 <== NOT EXECUTED 2003d2c: 7f ff fe e9 call 20038d0 <== NOT EXECUTED 2003d30: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 2003d34: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 2003d38: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 2003d3c: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 2003d40: e2 28 80 01 stb %l1, [ %g2 + %g1 ] <== NOT EXECUTED 2003d44: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 2003d48: b0 10 20 00 clr %i0 <== NOT EXECUTED } return 0; } 2003d4c: 81 c7 e0 08 ret <== NOT EXECUTED 2003d50: 81 e8 00 00 restore <== NOT EXECUTED 020201f0 : #if !defined(RTEMS_POSIX_API) int kill( pid_t pid, int sig ) { return 0; } 20201f0: 81 c3 e0 08 retl <== NOT EXECUTED 20201f4: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED 0201560c : extern void _wrapup_reent(struct _reent *); extern void _reclaim_reent(struct _reent *); void libc_wrapup(void) { 201560c: 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())) 2015610: 03 00 80 5f sethi %hi(0x2017c00), %g1 2015614: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> 2015618: 80 a0 60 03 cmp %g1, 3 201561c: 12 80 00 15 bne 2015670 2015620: 21 00 80 5c sethi %hi(0x2017000), %l0 /* * This was already done if the user called exit() directly . _wrapup_reent(0); */ if (_REENT != &libc_global_reent) { 2015624: c4 04 22 50 ld [ %l0 + 0x250 ], %g2 ! 2017250 <_impure_ptr> 2015628: 03 00 80 5a sethi %hi(0x2016800), %g1 201562c: b0 10 63 c8 or %g1, 0x3c8, %i0 ! 2016bc8 2015630: 80 a0 80 18 cmp %g2, %i0 2015634: 02 80 00 06 be 201564c 2015638: c2 04 22 50 ld [ %l0 + 0x250 ], %g1 _wrapup_reent(&libc_global_reent); 201563c: 40 00 00 a1 call 20158c0 <_wrapup_reent> 2015640: 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; 2015644: f0 24 22 50 st %i0, [ %l0 + 0x250 ] * * Should this be changed to do *all* file streams? * _fwalk (_REENT, fclose); */ fclose (stdin); 2015648: c2 04 22 50 ld [ %l0 + 0x250 ], %g1 201564c: 7f ff e0 d6 call 200d9a4 2015650: d0 00 60 04 ld [ %g1 + 4 ], %o0 fclose (stdout); 2015654: c2 04 22 50 ld [ %l0 + 0x250 ], %g1 2015658: 7f ff e0 d3 call 200d9a4 201565c: d0 00 60 08 ld [ %g1 + 8 ], %o0 fclose (stderr); 2015660: c2 04 22 50 ld [ %l0 + 0x250 ], %g1 2015664: f0 00 60 0c ld [ %g1 + 0xc ], %i0 2015668: 7f ff e0 cf call 200d9a4 201566c: 81 e8 00 00 restore 2015670: 81 c7 e0 08 ret <== NOT EXECUTED 2015674: 81 e8 00 00 restore <== NOT EXECUTED 020154fc : off_t lseek( int fd, off_t offset, int whence ) { 20154fc: 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 ); 2015500: 03 00 80 5a sethi %hi(0x2016800), %g1 <== NOT EXECUTED 2015504: c2 00 62 cc ld [ %g1 + 0x2cc ], %g1 ! 2016acc <== NOT EXECUTED off_t lseek( int fd, off_t offset, int whence ) { 2015508: 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 ); 201550c: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 2015510: 1a 80 00 0e bcc 2015548 <== NOT EXECUTED 2015514: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 2015518: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 201551c: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 <== NOT EXECUTED 2015520: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 2015524: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 2015528: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 201552c: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 2015530: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 2015534: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 2015538: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 201553c: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 2015540: 32 80 00 06 bne,a 2015558 <== NOT EXECUTED 2015544: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 2015548: 7f ff e0 c1 call 200d84c <__errno> <== NOT EXECUTED 201554c: 01 00 00 00 nop <== NOT EXECUTED 2015550: 10 80 00 1c b 20155c0 <== NOT EXECUTED 2015554: 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 ) 2015558: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 201555c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015560: 12 80 00 06 bne 2015578 <== NOT EXECUTED 2015564: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2015568: 7f ff e0 b9 call 200d84c <__errno> <== NOT EXECUTED 201556c: 01 00 00 00 nop <== NOT EXECUTED 2015570: 10 80 00 14 b 20155c0 <== NOT EXECUTED 2015574: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED /* * Now process the lseek(). */ old_offset = iop->offset; switch ( whence ) { 2015578: 02 80 00 09 be 201559c <== NOT EXECUTED 201557c: f4 06 20 08 ld [ %i0 + 8 ], %i2 <== NOT EXECUTED 2015580: 80 a2 a0 02 cmp %o2, 2 <== NOT EXECUTED 2015584: 02 80 00 08 be 20155a4 <== NOT EXECUTED 2015588: 80 a2 a0 00 cmp %o2, 0 <== NOT EXECUTED 201558c: 12 80 00 0a bne 20155b4 <== NOT EXECUTED 2015590: 01 00 00 00 nop <== NOT EXECUTED case SEEK_SET: iop->offset = offset; 2015594: 10 80 00 0e b 20155cc <== NOT EXECUTED 2015598: f2 26 20 08 st %i1, [ %i0 + 8 ] <== NOT EXECUTED break; case SEEK_CUR: iop->offset += offset; 201559c: 10 80 00 04 b 20155ac <== NOT EXECUTED 20155a0: 82 06 40 1a add %i1, %i2, %g1 <== NOT EXECUTED break; case SEEK_END: iop->offset = iop->size + offset; 20155a4: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 20155a8: 82 06 40 01 add %i1, %g1, %g1 <== NOT EXECUTED 20155ac: 10 80 00 08 b 20155cc <== NOT EXECUTED 20155b0: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED break; default: rtems_set_errno_and_return_minus_one( EINVAL ); 20155b4: 7f ff e0 a6 call 200d84c <__errno> <== NOT EXECUTED 20155b8: 01 00 00 00 nop <== NOT EXECUTED 20155bc: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 20155c0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 20155c4: 10 80 00 09 b 20155e8 <== NOT EXECUTED 20155c8: 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 ); 20155cc: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 20155d0: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 20155d4: 9f c0 40 00 call %g1 <== NOT EXECUTED 20155d8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status == (off_t) -1 ) 20155dc: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 20155e0: 22 80 00 02 be,a 20155e8 <== NOT EXECUTED 20155e4: f4 26 20 08 st %i2, [ %i0 + 8 ] <== NOT EXECUTED /* * So if the operation failed, we have to restore iop->offset. */ return status; } 20155e8: 81 c7 e0 08 ret <== NOT EXECUTED 20155ec: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 02002280 : #ifdef RTEMS_NEWLIB void *malloc( size_t size ) { 2002280: 9d e3 bf 98 save %sp, -104, %sp uint32_t sbrk_amount; Chain_Node *to_be_freed; MSBUMP(malloc_calls, 1); if ( !size ) 2002284: a4 96 20 00 orcc %i0, 0, %l2 2002288: 02 80 00 41 be 200238c 200228c: 03 00 80 5f sethi %hi(0x2017c00), %g1 /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 2002290: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> 2002294: 80 a0 60 03 cmp %g1, 3 2002298: 12 80 00 10 bne 20022d8 200229c: 03 00 80 5e sethi %hi(0x2017800), %g1 if (_Thread_Dispatch_disable_level > 0) 20022a0: 03 00 80 5e sethi %hi(0x2017800), %g1 20022a4: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 20022a8: 80 a0 60 00 cmp %g1, 0 20022ac: 12 80 00 36 bne 2002384 20022b0: b0 10 20 00 clr %i0 return (void *) 0; if (_ISR_Nest_level > 0) 20022b4: 03 00 80 5f sethi %hi(0x2017c00), %g1 20022b8: c2 00 60 78 ld [ %g1 + 0x78 ], %g1 ! 2017c78 <_ISR_Nest_level> 20022bc: 80 a0 60 00 cmp %g1, 0 20022c0: 02 80 00 06 be 20022d8 20022c4: 03 00 80 5e sethi %hi(0x2017800), %g1 20022c8: 30 80 00 32 b,a 2002390 <== 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); 20022cc: 7f ff ff c5 call 20021e0 20022d0: 01 00 00 00 nop 20022d4: 30 80 00 02 b,a 20022dc } /* * If some free's have been deferred, then do them now. */ while ((to_be_freed = Chain_Get(&RTEMS_Malloc_GC_list)) != NULL) 20022d8: a0 10 62 48 or %g1, 0x248, %l0 20022dc: 40 00 11 40 call 20067dc <_Chain_Get> 20022e0: 90 10 00 10 mov %l0, %o0 20022e4: 80 a2 20 00 cmp %o0, 0 20022e8: 12 bf ff f9 bne 20022cc 20022ec: 23 00 80 5e sethi %hi(0x2017800), %l1 */ #ifdef MALLOC_ARENA_CHECK size += sizeof(struct mallocNode) + SENTINELSIZE; #endif return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 20022f0: 92 10 00 12 mov %l2, %o1 20022f4: 40 00 15 fd call 2007ae8 <_Protected_heap_Allocate> 20022f8: 90 14 61 ec or %l1, 0x1ec, %o0 if ( !return_this ) { 20022fc: b0 92 20 00 orcc %o0, 0, %i0 2002300: 12 80 00 21 bne 2002384 2002304: 03 00 80 5e sethi %hi(0x2017800), %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; 2002308: e0 00 62 44 ld [ %g1 + 0x244 ], %l0 ! 2017a44 <== NOT EXECUTED if ( sbrk_amount == 0 ) 200230c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2002310: 02 80 00 1d be 2002384 <== NOT EXECUTED 2002314: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED return (void *) 0; the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount); 2002318: 40 00 48 ea call 20146c0 <.udiv> <== NOT EXECUTED 200231c: 90 04 80 10 add %l2, %l0, %o0 <== NOT EXECUTED 2002320: 40 00 48 ae call 20145d8 <.umul> <== NOT EXECUTED 2002324: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if ((starting_address = (void *)sbrk(the_size)) 2002328: 40 00 4c 23 call 20153b4 <== NOT EXECUTED 200232c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 2002330: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 2002334: 02 80 00 14 be 2002384 <== NOT EXECUTED 2002338: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED == (void*) -1) return (void *) 0; if ( !_Protected_heap_Extend( 200233c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2002340: 40 00 16 7b call 2007d2c <_Protected_heap_Extend> <== NOT EXECUTED 2002344: 90 14 61 ec or %l1, 0x1ec, %o0 <== NOT EXECUTED 2002348: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200234c: 12 80 00 05 bne 2002360 <== NOT EXECUTED 2002350: 90 14 61 ec or %l1, 0x1ec, %o0 <== NOT EXECUTED &RTEMS_Malloc_Heap, starting_address, the_size) ) { sbrk(-the_size); 2002354: 40 00 4c 18 call 20153b4 <== NOT EXECUTED 2002358: 90 20 00 10 neg %l0, %o0 <== NOT EXECUTED 200235c: 30 80 00 06 b,a 2002374 <== NOT EXECUTED return (void *) 0; } MSBUMP(space_available, the_size); return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 2002360: 40 00 15 e2 call 2007ae8 <_Protected_heap_Allocate> <== NOT EXECUTED 2002364: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED if ( !return_this ) { 2002368: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 200236c: 12 80 00 09 bne 2002390 <== NOT EXECUTED 2002370: 01 00 00 00 nop <== NOT EXECUTED errno = ENOMEM; 2002374: 40 00 2d 36 call 200d84c <__errno> <== NOT EXECUTED 2002378: 01 00 00 00 nop <== NOT EXECUTED 200237c: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 2002380: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2002384: 81 c7 e0 08 ret 2002388: 81 e8 00 00 restore return (void *) 0; 200238c: b0 10 20 00 clr %i0 <== NOT EXECUTED mallocNodeHead.forw = mp; rtems_interrupt_enable(key); } #endif return return_this; } 2002390: 81 c7 e0 08 ret <== NOT EXECUTED 2002394: 81 e8 00 00 restore <== NOT EXECUTED 020041c4 : /* * Find amount of free heap remaining */ size_t malloc_free_space( void ) { 20041c4: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED Heap_Information info; _Protected_heap_Get_free_information( &RTEMS_Malloc_Heap, &info ); 20041c8: 11 00 80 e0 sethi %hi(0x2038000), %o0 <== NOT EXECUTED 20041cc: 92 07 bf ec add %fp, -20, %o1 <== NOT EXECUTED 20041d0: 40 00 19 e1 call 200a954 <_Protected_heap_Get_free_information> <== NOT EXECUTED 20041d4: 90 12 21 68 or %o0, 0x168, %o0 <== NOT EXECUTED return (size_t) info.largest; } 20041d8: f0 07 bf f0 ld [ %fp + -16 ], %i0 <== NOT EXECUTED 20041dc: 81 c7 e0 08 ret <== NOT EXECUTED 20041e0: 81 e8 00 00 restore <== NOT EXECUTED 020183e0 : */ int memfile_blocks_allocated = 0; void *memfile_alloc_block(void) { 20183e0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED void *memory; memory = (void *)calloc(1, IMFS_MEMFILE_BYTES_PER_BLOCK); 20183e4: 03 00 80 dd sethi %hi(0x2037400), %g1 <== NOT EXECUTED 20183e8: d2 00 61 74 ld [ %g1 + 0x174 ], %o1 ! 2037574 <== NOT EXECUTED 20183ec: 7f ff b0 40 call 20044ec <== NOT EXECUTED 20183f0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED if ( memory ) 20183f4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20183f8: 02 80 00 05 be 201840c <== NOT EXECUTED 20183fc: 05 00 80 de sethi %hi(0x2037800), %g2 <== NOT EXECUTED memfile_blocks_allocated++; 2018400: c2 00 a0 f8 ld [ %g2 + 0xf8 ], %g1 ! 20378f8 <== NOT EXECUTED 2018404: 82 00 60 01 inc %g1 <== NOT EXECUTED 2018408: c2 20 a0 f8 st %g1, [ %g2 + 0xf8 ] <== NOT EXECUTED return memory; } 201840c: 81 c7 e0 08 ret <== NOT EXECUTED 2018410: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 02018918 : return memfile_check_rmnod( the_jnode ); } int memfile_check_rmnod( IMFS_jnode_t *the_jnode ){ 2018918: 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) ) { 201891c: 7f ff ad 92 call 2003f64 <== NOT EXECUTED 2018920: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2018924: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018928: 12 80 00 13 bne 2018974 <== NOT EXECUTED 201892c: 01 00 00 00 nop <== NOT EXECUTED 2018930: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 2018934: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2018938: 12 80 00 0f bne 2018974 <== NOT EXECUTED 201893c: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == the_jnode ) 2018940: c4 00 61 a0 ld [ %g1 + 0x1a0 ], %g2 ! 20361a0 <== NOT EXECUTED 2018944: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 2018948: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 201894c: 22 80 00 02 be,a 2018954 <== NOT EXECUTED 2018950: 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) 2018954: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 2018958: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 201895c: 02 80 00 04 be 201896c <== NOT EXECUTED 2018960: 01 00 00 00 nop <== NOT EXECUTED IMFS_memfile_remove( the_jnode ); 2018964: 7f ff ff 84 call 2018774 <== NOT EXECUTED 2018968: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free( the_jnode ); 201896c: 7f ff ae 22 call 20041f4 <== NOT EXECUTED 2018970: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 2018974: 81 c7 e0 08 ret <== NOT EXECUTED 2018978: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 020189d0 : */ int memfile_close( rtems_libio_t *iop ) { 20189d0: 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) 20189d4: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 20189d8: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 20189dc: 02 80 00 04 be 20189ec <== NOT EXECUTED 20189e0: d0 06 20 2c ld [ %i0 + 0x2c ], %o0 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 20189e4: c2 02 20 4c ld [ %o0 + 0x4c ], %g1 <== NOT EXECUTED 20189e8: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED memfile_check_rmnod( the_jnode ); 20189ec: 7f ff ff cb call 2018918 <== NOT EXECUTED 20189f0: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 20189f4: 81 c7 e0 08 ret <== NOT EXECUTED 20189f8: 81 e8 00 00 restore <== NOT EXECUTED 020183bc : */ void memfile_free_block( void *memory ) { 20183bc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED #if 0 fprintf(stdout, "(d %p) ", memory ); fflush(stdout); #endif free(memory); 20183c0: 7f ff af 8d call 20041f4 <== NOT EXECUTED 20183c4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED memfile_blocks_allocated--; 20183c8: 05 00 80 de sethi %hi(0x2037800), %g2 <== NOT EXECUTED 20183cc: c2 00 a0 f8 ld [ %g2 + 0xf8 ], %g1 ! 20378f8 <== NOT EXECUTED 20183d0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 20183d4: c2 20 a0 f8 st %g1, [ %g2 + 0xf8 ] <== NOT EXECUTED } 20183d8: 81 c7 e0 08 ret <== NOT EXECUTED 20183dc: 81 e8 00 00 restore <== NOT EXECUTED 02018704 : void memfile_free_blocks_in_table( block_p **block_table, int entries ) { 2018704: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( block_table ); 2018708: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 201870c: 32 80 00 08 bne,a 201872c <== NOT EXECUTED 2018710: e2 06 00 00 ld [ %i0 ], %l1 <== NOT EXECUTED 2018714: 31 00 80 cc sethi %hi(0x2033000), %i0 <== NOT EXECUTED 2018718: 35 00 80 cc sethi %hi(0x2033000), %i2 <== NOT EXECUTED 201871c: b0 16 21 a0 or %i0, 0x1a0, %i0 <== NOT EXECUTED 2018720: b4 16 a2 28 or %i2, 0x228, %i2 <== NOT EXECUTED 2018724: 7f ff ac eb call 2003ad0 <__assert> <== NOT EXECUTED 2018728: 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; 201872c: a0 10 20 00 clr %l0 <== NOT EXECUTED 2018730: 10 80 00 09 b 2018754 <== NOT EXECUTED 2018734: b4 10 20 00 clr %i2 <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED 2018740: a0 04 20 01 inc %l0 <== NOT EXECUTED memfile_free_block( b[i] ); 2018744: 7f ff ff 1e call 20183bc <== NOT EXECUTED 2018748: 01 00 00 00 nop <== NOT EXECUTED b[i] = 0; 201874c: 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 201875c: 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 ); 2018760: 7f ff ff 17 call 20183bc <== NOT EXECUTED 2018764: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED *block_table = 0; 2018768: c0 26 00 00 clr [ %i0 ] <== NOT EXECUTED } 201876c: 81 c7 e0 08 ret <== NOT EXECUTED 2018770: 81 e8 00 00 restore <== NOT EXECUTED 02018c04 : int memfile_ftruncate( rtems_libio_t *iop, off_t length ) { 2018c04: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 2018c08: 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 ) 2018c0c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 2018c10: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 2018c14: 04 80 00 06 ble 2018c2c <== NOT EXECUTED 2018c18: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED return IMFS_memfile_extend( the_jnode, length ); 2018c1c: 7f ff ff a6 call 2018ab4 <== NOT EXECUTED 2018c20: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; IMFS_update_atime( the_jnode ); return 0; } 2018c24: 81 c7 e0 08 ret <== NOT EXECUTED 2018c28: 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; 2018c2c: f2 24 20 4c st %i1, [ %l0 + 0x4c ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 2018c30: f2 26 20 04 st %i1, [ %i0 + 4 ] <== NOT EXECUTED IMFS_update_atime( the_jnode ); 2018c34: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 2018c38: 7f ff ac 61 call 2003dbc <== NOT EXECUTED 2018c3c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2018c40: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2018c44: 90 10 20 00 clr %o0 <== NOT EXECUTED 2018c48: c2 24 20 3c st %g1, [ %l0 + 0x3c ] <== NOT EXECUTED return 0; } 2018c4c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 2018c50: 81 c7 e0 08 ret <== NOT EXECUTED 2018c54: 81 e8 00 00 restore <== NOT EXECUTED 020183b4 : IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; return 0; } 20183b4: 81 c3 e0 08 retl <== NOT EXECUTED 20183b8: 90 10 20 00 clr %o0 <== NOT EXECUTED 02018c58 : off_t memfile_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 2018c58: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 2018c5c: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { 2018c60: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 2018c64: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 2018c68: 12 80 00 09 bne 2018c8c <== NOT EXECUTED 2018c6c: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED if (iop->offset > the_jnode->info.linearfile.size) 2018c70: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 2018c74: 80 a2 40 08 cmp %o1, %o0 <== NOT EXECUTED 2018c78: 34 80 00 11 bg,a 2018cbc <== NOT EXECUTED 2018c7c: d0 26 20 08 st %o0, [ %i0 + 8 ] <== NOT EXECUTED 2018c80: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 2018c84: 81 c7 e0 08 ret <== NOT EXECUTED 2018c88: 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 )) 2018c8c: 7f ff ff 8a call 2018ab4 <== NOT EXECUTED 2018c90: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2018c94: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2018c98: 22 80 00 08 be,a 2018cb8 <== NOT EXECUTED 2018c9c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); 2018ca0: 40 00 21 49 call 20211c4 <__errno> <== NOT EXECUTED 2018ca4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2018ca8: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED 2018cac: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2018cb0: 81 c7 e0 08 ret <== NOT EXECUTED 2018cb4: 81 e8 00 00 restore <== NOT EXECUTED iop->size = the_jnode->info.file.size; 2018cb8: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED } return iop->offset; 2018cbc: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED } 2018cc0: 81 c7 e0 08 ret <== NOT EXECUTED 2018cc4: 81 e8 00 00 restore <== NOT EXECUTED 02018f60 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 2018f60: 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)) 2018f64: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 2018f68: 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)) 2018f6c: 80 88 62 04 btst 0x204, %g1 <== NOT EXECUTED 2018f70: 02 80 00 17 be 2018fcc <== NOT EXECUTED 2018f74: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED 2018f78: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 2018f7c: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 2018f80: 32 80 00 14 bne,a 2018fd0 <== NOT EXECUTED 2018f84: c2 04 60 0c ld [ %l1 + 0xc ], %g1 <== NOT EXECUTED && (the_jnode->type == IMFS_LINEAR_FILE)) { uint32_t count = the_jnode->info.linearfile.size; 2018f88: d6 04 20 4c ld [ %l0 + 0x4c ], %o3 <== NOT EXECUTED const unsigned char *buffer = the_jnode->info.linearfile.direct; 2018f8c: d4 04 20 50 ld [ %l0 + 0x50 ], %o2 <== NOT EXECUTED the_jnode->type = IMFS_MEMORY_FILE; 2018f90: 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; 2018f94: 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; 2018f98: 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; 2018f9c: 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; 2018fa0: 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) 2018fa4: 80 a2 e0 00 cmp %o3, 0 <== NOT EXECUTED 2018fa8: 02 80 00 09 be 2018fcc <== NOT EXECUTED 2018fac: c2 24 20 48 st %g1, [ %l0 + 0x48 ] <== NOT EXECUTED 2018fb0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2018fb4: 92 10 20 00 clr %o1 <== NOT EXECUTED 2018fb8: 7f ff ff 44 call 2018cc8 <== NOT EXECUTED 2018fbc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2018fc0: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 2018fc4: 02 80 00 0a be 2018fec <== NOT EXECUTED 2018fc8: 01 00 00 00 nop <== NOT EXECUTED && (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1)) return -1; } if (iop->flags & LIBIO_FLAGS_APPEND) 2018fcc: c2 04 60 0c ld [ %l1 + 0xc ], %g1 <== NOT EXECUTED 2018fd0: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 2018fd4: 02 80 00 04 be 2018fe4 <== NOT EXECUTED 2018fd8: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 2018fdc: c2 24 60 08 st %g1, [ %l1 + 8 ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 2018fe0: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 2018fe4: b0 10 20 00 clr %i0 <== NOT EXECUTED 2018fe8: c2 24 60 04 st %g1, [ %l1 + 4 ] <== NOT EXECUTED return 0; } 2018fec: 81 c7 e0 08 ret <== NOT EXECUTED 2018ff0: 81 e8 00 00 restore <== NOT EXECUTED 02019270 : ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 2019270: 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 ); 2019274: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 2019278: d0 02 20 2c ld [ %o0 + 0x2c ], %o0 <== NOT EXECUTED ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 201927c: 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 ); 2019280: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 2019284: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2019288: 7f ff ff 5b call 2018ff4 <== NOT EXECUTED 201928c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2019290: 01 00 00 00 nop <== NOT EXECUTED 0201897c : */ int memfile_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 201897c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 2018980: 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 ) { 2018984: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 2018988: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201898c: 22 80 00 06 be,a 20189a4 <== NOT EXECUTED 2018990: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 2018994: 7f ff fb b1 call 2017858 <_Chain_Extract> <== NOT EXECUTED 2018998: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 201899c: 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--; 20189a0: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 20189a4: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 20189a8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 20189ac: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 20189b0: 7f ff ad 03 call 2003dbc <== NOT EXECUTED 20189b4: c2 36 20 30 sth %g1, [ %i0 + 0x30 ] <== NOT EXECUTED 20189b8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return memfile_check_rmnod( the_jnode ); 20189bc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20189c0: 7f ff ff d6 call 2018918 <== NOT EXECUTED 20189c4: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED } 20189c8: 81 c7 e0 08 ret <== NOT EXECUTED 20189cc: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 02018f30 : ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 2018f30: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; ssize_t status; the_jnode = iop->file_info; 2018f34: e2 06 20 2c ld [ %i0 + 0x2c ], %l1 <== NOT EXECUTED status = IMFS_memfile_write( the_jnode, iop->offset, buffer, count ); 2018f38: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 2018f3c: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 2018f40: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2018f44: 7f ff ff 61 call 2018cc8 <== NOT EXECUTED 2018f48: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; 2018f4c: c2 04 60 4c ld [ %l1 + 0x4c ], %g1 <== NOT EXECUTED ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 2018f50: 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; 2018f54: c2 24 20 04 st %g1, [ %l0 + 4 ] <== NOT EXECUTED return status; } 2018f58: 81 c7 e0 08 ret <== NOT EXECUTED 2018f5c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 0200a940 : int miniIMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 200a940: 13 00 80 5c sethi %hi(0x2017000), %o1 200a944: 15 00 80 5e sethi %hi(0x2017800), %o2 200a948: 92 12 60 24 or %o1, 0x24, %o1 200a94c: 94 12 a0 10 or %o2, 0x10, %o2 200a950: 96 10 00 0a mov %o2, %o3 200a954: 82 13 c0 00 mov %o7, %g1 200a958: 40 00 02 70 call 200b318 200a95c: 9e 10 40 00 mov %g1, %o7 200a960: 01 00 00 00 nop <== NOT EXECUTED 020025e4 : int mknod( const char *pathname, mode_t mode, dev_t dev ) { 20025e4: 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) ) ) 20025e8: 03 00 00 3c sethi %hi(0xf000), %g1 20025ec: b3 2e 60 10 sll %i1, 0x10, %i1 20025f0: b3 36 60 10 srl %i1, 0x10, %i1 20025f4: 84 8e 40 01 andcc %i1, %g1, %g2 20025f8: 32 80 00 06 bne,a 2002610 20025fc: 03 00 00 04 sethi %hi(0x1000), %g1 rtems_set_errno_and_return_minus_one( EINVAL ); 2002600: 40 00 2c 93 call 200d84c <__errno> <== NOT EXECUTED 2002604: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2002608: 10 80 00 35 b 20026dc <== NOT EXECUTED 200260c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED if ( S_ISFIFO(mode) ) 2002610: 80 a0 80 01 cmp %g2, %g1 2002614: 02 80 00 2f be 20026d0 2002618: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 200261c: c2 4e 00 00 ldsb [ %i0 ], %g1 2002620: 80 a0 60 2f cmp %g1, 0x2f 2002624: 02 80 00 06 be 200263c 2002628: 80 a0 60 5c cmp %g1, 0x5c 200262c: 02 80 00 04 be 200263c <== NOT EXECUTED 2002630: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2002634: 12 80 00 0a bne 200265c <== NOT EXECUTED 2002638: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 200263c: 03 00 80 5c sethi %hi(0x2017000), %g1 2002640: d2 00 60 e8 ld [ %g1 + 0xe8 ], %o1 ! 20170e8 2002644: 90 07 bf e4 add %fp, -28, %o0 2002648: 92 02 60 14 add %o1, 0x14, %o1 200264c: 40 00 2e 55 call 200dfa0 2002650: 94 10 20 10 mov 0x10, %o2 2002654: 10 80 00 08 b 2002674 2002658: 84 10 20 01 mov 1, %g2 200265c: d2 00 60 e8 ld [ %g1 + 0xe8 ], %o1 <== NOT EXECUTED 2002660: 90 07 bf e4 add %fp, -28, %o0 <== NOT EXECUTED 2002664: 92 02 60 04 add %o1, 4, %o1 <== NOT EXECUTED 2002668: 40 00 2e 4e call 200dfa0 <== NOT EXECUTED 200266c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2002670: 84 10 20 00 clr %g2 <== NOT EXECUTED if ( !temp_loc.ops->evalformake_h ) { 2002674: c2 07 bf ec ld [ %fp + -20 ], %g1 2002678: c2 00 60 04 ld [ %g1 + 4 ], %g1 200267c: 80 a0 60 00 cmp %g1, 0 2002680: 02 80 00 14 be 20026d0 2002684: 90 06 00 02 add %i0, %g2, %o0 rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->evalformake_h)( 2002688: a0 07 bf e4 add %fp, -28, %l0 200268c: 94 07 bf f4 add %fp, -12, %o2 2002690: 92 10 00 10 mov %l0, %o1 2002694: 9f c0 40 00 call %g1 2002698: b0 10 3f ff mov -1, %i0 &pathname[i], &temp_loc, &name_start ); if ( result != 0 ) 200269c: 80 a2 20 00 cmp %o0, 0 20026a0: 12 80 00 10 bne 20026e0 20026a4: c2 07 bf ec ld [ %fp + -20 ], %g1 return -1; if ( !temp_loc.ops->mknod_h ) { 20026a8: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 20026ac: 80 a0 a0 00 cmp %g2, 0 20026b0: 12 80 00 0e bne 20026e8 20026b4: d0 07 bf f4 ld [ %fp + -12 ], %o0 rtems_filesystem_freenode( &temp_loc ); 20026b8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 20026bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20026c0: 02 80 00 04 be 20026d0 <== NOT EXECUTED 20026c4: 01 00 00 00 nop <== NOT EXECUTED 20026c8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20026cc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 20026d0: 40 00 2c 5f call 200d84c <__errno> <== NOT EXECUTED 20026d4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20026d8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 20026dc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 20026e0: 81 c7 e0 08 ret <== NOT EXECUTED 20026e4: 81 e8 00 00 restore <== NOT EXECUTED } result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc ); 20026e8: 92 10 00 19 mov %i1, %o1 20026ec: 94 10 00 1a mov %i2, %o2 20026f0: 96 10 00 1b mov %i3, %o3 20026f4: 9f c0 80 00 call %g2 20026f8: 98 10 00 10 mov %l0, %o4 rtems_filesystem_freenode( &temp_loc ); 20026fc: c2 07 bf ec ld [ %fp + -20 ], %g1 2002700: 80 a0 60 00 cmp %g1, 0 2002704: 02 bf ff f7 be 20026e0 2002708: b0 10 00 08 mov %o0, %i0 200270c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 2002710: 80 a0 60 00 cmp %g1, 0 2002714: 02 80 00 04 be 2002724 2002718: 01 00 00 00 nop 200271c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2002720: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 2002724: 81 c7 e0 08 ret 2002728: 81 e8 00 00 restore 0200bc88 : rtems_filesystem_operations_table *fs_ops, rtems_filesystem_options_t options, char *device, char *mount_point ) { 200bc88: 9d e3 bf 88 save %sp, -120, %sp /* * Is there a file system operations table? */ if ( fs_ops == NULL ) { 200bc8c: 80 a6 60 00 cmp %i1, 0 200bc90: 02 80 00 05 be 200bca4 200bc94: a2 10 00 18 mov %i0, %l1 /* * Are the file system options valid? */ if ( options != RTEMS_FILESYSTEM_READ_ONLY && 200bc98: 80 a6 a0 01 cmp %i2, 1 200bc9c: 28 80 00 06 bleu,a 200bcb4 200bca0: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 options != RTEMS_FILESYSTEM_READ_WRITE ) { errno = EINVAL; 200bca4: 40 00 06 ea call 200d84c <__errno> <== NOT EXECUTED 200bca8: 01 00 00 00 nop <== NOT EXECUTED 200bcac: 10 80 00 17 b 200bd08 <== NOT EXECUTED 200bcb0: 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 ) { 200bcb4: 80 a0 60 00 cmp %g1, 0 200bcb8: 12 80 00 07 bne 200bcd4 200bcbc: 80 a6 e0 00 cmp %i3, 0 errno = ENOTSUP; 200bcc0: 40 00 06 e3 call 200d84c <__errno> <== NOT EXECUTED 200bcc4: b4 10 20 00 clr %i2 <== NOT EXECUTED 200bcc8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 200bccc: 10 80 00 77 b 200bea8 <== NOT EXECUTED 200bcd0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Allocate a mount table entry */ size = sizeof(rtems_filesystem_mount_table_entry_t); if ( device ) 200bcd4: 02 80 00 05 be 200bce8 200bcd8: 90 10 20 64 mov 0x64, %o0 size += strlen( device ) + 1; 200bcdc: 40 00 0b ba call 200ebc4 <== NOT EXECUTED 200bce0: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED 200bce4: 90 02 20 65 add %o0, 0x65, %o0 <== NOT EXECUTED temp_mt_entry = malloc( size ); 200bce8: 7f ff d9 66 call 2002280 200bcec: 01 00 00 00 nop if ( !temp_mt_entry ) { 200bcf0: a0 92 20 00 orcc %o0, 0, %l0 200bcf4: 32 80 00 07 bne,a 200bd10 200bcf8: f4 24 20 28 st %i2, [ %l0 + 0x28 ] errno = ENOMEM; 200bcfc: 40 00 06 d4 call 200d84c <__errno> <== NOT EXECUTED 200bd00: 01 00 00 00 nop <== NOT EXECUTED 200bd04: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 200bd08: 10 80 00 78 b 200bee8 <== NOT EXECUTED 200bd0c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return -1; } temp_mt_entry->mt_fs_root.mt_entry = temp_mt_entry; 200bd10: e0 24 20 24 st %l0, [ %l0 + 0x24 ] temp_mt_entry->options = options; if ( device ) { 200bd14: 80 a6 e0 00 cmp %i3, 0 200bd18: 02 80 00 08 be 200bd38 200bd1c: b4 10 00 10 mov %l0, %i2 temp_mt_entry->dev = 200bd20: 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 ); 200bd24: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 200bd28: 40 00 0b 87 call 200eb44 <== NOT EXECUTED 200bd2c: 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 ) { 200bd30: 10 80 00 04 b 200bd40 <== NOT EXECUTED 200bd34: 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; 200bd38: 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 ) { 200bd3c: 80 a7 20 00 cmp %i4, 0 200bd40: 02 80 00 3b be 200be2c 200bd44: 90 10 00 1c mov %i4, %o0 if ( rtems_filesystem_evaluate_path( 200bd48: 92 10 20 07 mov 7, %o1 <== NOT EXECUTED 200bd4c: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 200bd50: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 200bd54: 7f ff d8 9d call 2001fc8 <== NOT EXECUTED 200bd58: 94 10 00 1c mov %i4, %o2 <== NOT EXECUTED 200bd5c: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 200bd60: 02 80 00 52 be 200bea8 <== NOT EXECUTED 200bd64: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED /* * Test for node_type_h */ if (!loc.ops->node_type_h) { 200bd68: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 200bd6c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200bd70: 12 80 00 06 bne 200bd88 <== NOT EXECUTED 200bd74: 01 00 00 00 nop <== NOT EXECUTED errno = ENOTSUP; 200bd78: 40 00 06 b5 call 200d84c <__errno> <== NOT EXECUTED 200bd7c: 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; 200bd80: 10 80 00 0a b 200bda8 <== NOT EXECUTED 200bd84: 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 ) { 200bd88: 9f c0 40 00 call %g1 <== NOT EXECUTED 200bd8c: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 200bd90: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 200bd94: 02 80 00 07 be 200bdb0 <== NOT EXECUTED 200bd98: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED errno = ENOTDIR; 200bd9c: 40 00 06 ac call 200d84c <__errno> <== NOT EXECUTED 200bda0: 01 00 00 00 nop <== NOT EXECUTED 200bda4: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 200bda8: 10 80 00 41 b 200beac <== NOT EXECUTED 200bdac: 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 ) 200bdb0: c8 07 bf e8 ld [ %fp + -24 ], %g4 <== NOT EXECUTED /* * For each mount table entry */ for ( the_node = rtems_filesystem_mount_table_control.first; 200bdb4: c4 00 62 b8 ld [ %g1 + 0x2b8 ], %g2 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 200bdb8: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 200bdbc: 10 80 00 06 b 200bdd4 <== NOT EXECUTED 200bdc0: 86 10 62 bc or %g1, 0x2bc, %g3 ! 2017ebc <== 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 ) 200bdc4: 80 a0 40 04 cmp %g1, %g4 <== NOT EXECUTED 200bdc8: 02 80 00 08 be 200bde8 <== NOT EXECUTED 200bdcc: 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 ) { 200bdd0: 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 ); 200bdd4: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 200bdd8: 32 bf ff fb bne,a 200bdc4 <== NOT EXECUTED 200bddc: 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; 200bde0: 10 80 00 44 b 200bef0 <== NOT EXECUTED 200bde4: 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; 200bde8: 40 00 06 99 call 200d84c <__errno> <== NOT EXECUTED 200bdec: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 200bdf0: 10 bf ff ee b 200bda8 <== NOT EXECUTED 200bdf4: 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; 200bdf8: 40 00 06 95 call 200d84c <__errno> <== NOT EXECUTED 200bdfc: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 200be00: 10 bf ff ea b 200bda8 <== NOT EXECUTED 200be04: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED goto cleanup_and_bail; } if ( loc.ops->mount_h( temp_mt_entry ) ) { 200be08: 9f c0 c0 00 call %g3 <== NOT EXECUTED 200be0c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200be10: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200be14: 02 80 00 04 be 200be24 <== NOT EXECUTED 200be18: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 200be1c: 10 80 00 24 b 200beac <== NOT EXECUTED 200be20: b8 10 00 08 mov %o0, %i4 <== NOT EXECUTED 200be24: 10 80 00 0a b 200be4c <== NOT EXECUTED 200be28: 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; 200be2c: c0 24 20 18 clr [ %l0 + 0x18 ] temp_mt_entry->mt_fs_root.handlers = NULL; 200be30: c0 24 20 1c clr [ %l0 + 0x1c ] temp_mt_entry->mt_fs_root.ops = NULL; 200be34: c0 24 20 20 clr [ %l0 + 0x20 ] temp_mt_entry->mt_point_node.node_access = NULL; 200be38: c0 24 20 08 clr [ %l0 + 8 ] temp_mt_entry->mt_point_node.handlers = NULL; 200be3c: c0 24 20 0c clr [ %l0 + 0xc ] temp_mt_entry->mt_point_node.ops = NULL; 200be40: c0 24 20 10 clr [ %l0 + 0x10 ] temp_mt_entry->mt_point_node.mt_entry = NULL; 200be44: c0 24 20 14 clr [ %l0 + 0x14 ] 200be48: b8 10 20 00 clr %i4 } if ( fs_ops->fsmount_me_h( temp_mt_entry ) ) { 200be4c: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 200be50: 9f c0 40 00 call %g1 200be54: 90 10 00 10 mov %l0, %o0 200be58: 80 a2 20 00 cmp %o0, 0 200be5c: 02 80 00 09 be 200be80 200be60: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* try to undo the mount operation */ if ( loc.ops->unmount_h ) { 200be64: c2 00 60 28 ld [ %g1 + 0x28 ], %g1 <== NOT EXECUTED 200be68: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200be6c: 02 80 00 10 be 200beac <== NOT EXECUTED 200be70: 01 00 00 00 nop <== NOT EXECUTED loc.ops->unmount_h( temp_mt_entry ); 200be74: 9f c0 40 00 call %g1 <== NOT EXECUTED 200be78: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200be7c: 30 80 00 0c b,a 200beac <== NOT EXECUTED /* * Add the mount table entry to the mount table chain */ Chain_Append( &rtems_filesystem_mount_table_control, &temp_mt_entry->Node ); 200be80: 11 00 80 5f sethi %hi(0x2017c00), %o0 200be84: 92 10 00 10 mov %l0, %o1 200be88: 7f ff ea 49 call 20067ac <_Chain_Append> 200be8c: 90 12 22 b8 or %o0, 0x2b8, %o0 if ( mt_entry ) 200be90: 80 a4 60 00 cmp %l1, 0 200be94: 02 80 00 03 be 200bea0 200be98: b0 10 20 00 clr %i0 *mt_entry = temp_mt_entry; 200be9c: e0 24 40 00 st %l0, [ %l1 ] 200bea0: 81 c7 e0 08 ret 200bea4: 81 e8 00 00 restore 200bea8: b8 10 20 00 clr %i4 <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 200beac: 7f ff d8 cd call 20021e0 <== NOT EXECUTED 200beb0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED if ( loc_to_free ) 200beb4: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 200beb8: 02 80 00 0c be 200bee8 <== NOT EXECUTED 200bebc: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( loc_to_free ); 200bec0: c2 07 20 08 ld [ %i4 + 8 ], %g1 <== NOT EXECUTED 200bec4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200bec8: 02 80 00 08 be 200bee8 <== NOT EXECUTED 200becc: 01 00 00 00 nop <== NOT EXECUTED 200bed0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 200bed4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200bed8: 02 80 00 04 be 200bee8 <== NOT EXECUTED 200bedc: 01 00 00 00 nop <== NOT EXECUTED 200bee0: 9f c0 40 00 call %g1 <== NOT EXECUTED 200bee4: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 200bee8: 81 c7 e0 08 ret <== NOT EXECUTED 200beec: 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; 200bef0: 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; 200bef4: 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; 200bef8: 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 ){ 200befc: 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; 200bf00: 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; 200bf04: 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 ){ 200bf08: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 200bf0c: 12 bf ff bf bne 200be08 <== NOT EXECUTED 200bf10: c2 24 20 10 st %g1, [ %l0 + 0x10 ] <== NOT EXECUTED 200bf14: 30 bf ff b9 b,a 200bdf8 <== NOT EXECUTED 020027b8 : */ int newlib_free_buffers( FILE *fp ) { 20027b8: 9d e3 bf 98 save %sp, -104, %sp switch ( fileno(fp) ) { 20027bc: 40 00 2c f4 call 200db8c 20027c0: 90 10 00 18 mov %i0, %o0 20027c4: 80 a2 20 02 cmp %o0, 2 20027c8: 18 80 00 0e bgu 2002800 20027cc: 01 00 00 00 nop case 0: case 1: case 2: if (fp->_flags & __SMBF) { 20027d0: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 20027d4: 80 88 60 80 btst 0x80, %g1 20027d8: 02 80 00 0c be 2002808 20027dc: 01 00 00 00 nop free( fp->_bf._base ); 20027e0: 7f ff fe 80 call 20021e0 20027e4: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 fp->_flags &= ~__SMBF; 20027e8: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 20027ec: c0 26 20 10 clr [ %i0 + 0x10 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 20027f0: 82 08 7f 7f and %g1, -129, %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 20027f4: c0 26 00 00 clr [ %i0 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 20027f8: 10 80 00 04 b 2002808 20027fc: c2 36 20 0c sth %g1, [ %i0 + 0xc ] fp->_bf._base = fp->_p = (unsigned char *) NULL; } break; default: fclose(fp); 2002800: 40 00 2c 69 call 200d9a4 <== NOT EXECUTED 2002804: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 2002808: 81 c7 e0 08 ret 200280c: 91 e8 20 00 restore %g0, 0, %o0 020028e0 : rtems_device_driver null_initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *pargp ) { 20028e0: 9d e3 bf 98 save %sp, -104, %sp rtems_device_driver status; if ( !initialized ) { 20028e4: 05 00 80 6c sethi %hi(0x201b000), %g2 20028e8: c2 48 a2 6c ldsb [ %g2 + 0x26c ], %g1 ! 201b26c 20028ec: 80 a0 60 00 cmp %g1, 0 20028f0: 12 80 00 0f bne 200292c 20028f4: 82 10 20 01 mov 1, %g1 initialized = 1; status = rtems_io_register_name( 20028f8: 11 00 80 63 sethi %hi(0x2018c00), %o0 ) { rtems_device_driver status; if ( !initialized ) { initialized = 1; 20028fc: c2 28 a2 6c stb %g1, [ %g2 + 0x26c ] status = rtems_io_register_name( 2002900: 90 12 21 98 or %o0, 0x198, %o0 2002904: 92 10 00 18 mov %i0, %o1 2002908: 40 00 00 4e call 2002a40 200290c: 94 10 20 00 clr %o2 "/dev/null", major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) 2002910: 80 a2 20 00 cmp %o0, 0 2002914: 02 80 00 05 be 2002928 2002918: 03 00 80 6d sethi %hi(0x201b400), %g1 rtems_fatal_error_occurred(status); 200291c: 40 00 12 93 call 2007368 <== NOT EXECUTED 2002920: 01 00 00 00 nop <== NOT EXECUTED NULL_major = major; 2002924: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED 2002928: f0 20 61 6c st %i0, [ %g1 + 0x16c ] ! 201b56c } return RTEMS_SUCCESSFUL; } 200292c: 81 c7 e0 08 ret 2002930: 91 e8 20 00 restore %g0, 0, %o0 020028bc : void *pargp ) { rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp; if ( rw_args ) 20028bc: 80 a2 a0 00 cmp %o2, 0 20028c0: 02 80 00 04 be 20028d0 20028c4: 01 00 00 00 nop rw_args->bytes_moved = rw_args->count; 20028c8: c2 02 a0 0c ld [ %o2 + 0xc ], %g1 <== NOT EXECUTED 20028cc: c2 22 a0 14 st %g1, [ %o2 + 0x14 ] <== NOT EXECUTED return NULL_SUCCESSFUL; } 20028d0: 81 c3 e0 08 retl 20028d4: 90 10 20 00 clr %o0 02002a14 : int open( const char *pathname, int flags, ... ) { 2002a14: 9d e3 bf 80 save %sp, -128, %sp 2002a18: f6 27 a0 50 st %i3, [ %fp + 0x50 ] 2002a1c: f8 27 a0 54 st %i4, [ %fp + 0x54 ] 2002a20: fa 27 a0 58 st %i5, [ %fp + 0x58 ] 2002a24: f4 27 a0 4c st %i2, [ %fp + 0x4c ] /* * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; 2002a28: 82 06 60 01 add %i1, 1, %g1 if ( ( status & _FREAD ) == _FREAD ) eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 2002a2c: 80 88 60 02 btst 2, %g1 * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; if ( ( status & _FREAD ) == _FREAD ) 2002a30: 82 08 60 01 and %g1, 1, %g1 eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 2002a34: 02 80 00 03 be 2002a40 2002a38: a1 28 60 02 sll %g1, 2, %l0 eval_flags |= RTEMS_LIBIO_PERMS_WRITE; 2002a3c: a0 14 20 02 or %l0, 2, %l0 va_start(ap, flags); mode = va_arg( ap, int ); 2002a40: 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 ) { 2002a44: 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(); 2002a48: 40 00 24 3b call 200bb34 2002a4c: c2 27 bf f4 st %g1, [ %fp + -12 ] if ( iop == 0 ) { 2002a50: ba 92 20 00 orcc %o0, 0, %i5 2002a54: 02 80 00 98 be 2002cb4 2002a58: 92 10 00 10 mov %l0, %o1 /* * See if the file exists. */ status = rtems_filesystem_evaluate_path( 2002a5c: 90 10 00 18 mov %i0, %o0 2002a60: a0 07 bf e4 add %fp, -28, %l0 2002a64: 96 10 20 01 mov 1, %o3 2002a68: 7f ff fd 58 call 2001fc8 2002a6c: 94 10 00 10 mov %l0, %o2 pathname, eval_flags, &loc, TRUE ); if ( status == -1 ) { 2002a70: 80 a2 3f ff cmp %o0, -1 2002a74: 12 80 00 28 bne 2002b14 2002a78: 82 0e 6a 00 and %i1, 0xa00, %g1 if ( errno != ENOENT ) { 2002a7c: 40 00 2b 74 call 200d84c <__errno> 2002a80: 01 00 00 00 nop 2002a84: c2 02 00 00 ld [ %o0 ], %g1 2002a88: 80 a0 60 02 cmp %g1, 2 2002a8c: 02 80 00 06 be 2002aa4 2002a90: 80 8e 62 00 btst 0x200, %i1 rc = errno; 2002a94: 40 00 2b 6e call 200d84c <__errno> <== NOT EXECUTED 2002a98: b6 10 20 00 clr %i3 <== NOT EXECUTED 2002a9c: 10 80 00 71 b 2002c60 <== NOT EXECUTED 2002aa0: 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) ) { 2002aa4: b8 10 20 02 mov 2, %i4 2002aa8: 02 80 00 71 be 2002c6c 2002aac: 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 ); 2002ab0: 13 3f ff e0 sethi %hi(0xffff8000), %o1 <== NOT EXECUTED 2002ab4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2002ab8: 92 16 80 09 or %i2, %o1, %o1 <== NOT EXECUTED 2002abc: 94 10 20 00 clr %o2 <== NOT EXECUTED 2002ac0: 93 2a 60 10 sll %o1, 0x10, %o1 <== NOT EXECUTED 2002ac4: 96 10 20 00 clr %o3 <== NOT EXECUTED 2002ac8: 7f ff fe c7 call 20025e4 <== NOT EXECUTED 2002acc: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED if ( rc ) { 2002ad0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2002ad4: 02 80 00 06 be 2002aec <== NOT EXECUTED 2002ad8: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED rc = errno; 2002adc: 40 00 2b 5c call 200d84c <__errno> <== NOT EXECUTED 2002ae0: 01 00 00 00 nop <== NOT EXECUTED 2002ae4: 10 80 00 5f b 2002c60 <== NOT EXECUTED 2002ae8: 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 ); 2002aec: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2002af0: 92 10 20 00 clr %o1 <== NOT EXECUTED 2002af4: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 2002af8: 7f ff fd 34 call 2001fc8 <== NOT EXECUTED 2002afc: b8 10 20 0d mov 0xd, %i4 <== NOT EXECUTED if ( status != 0 ) { /* The file did not exist */ 2002b00: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2002b04: 12 80 00 5a bne 2002c6c <== NOT EXECUTED 2002b08: 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; 2002b0c: 10 80 00 07 b 2002b28 <== NOT EXECUTED 2002b10: 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)) { 2002b14: b6 10 00 10 mov %l0, %i3 2002b18: 80 a0 6a 00 cmp %g1, 0xa00 2002b1c: 02 80 00 54 be 2002c6c 2002b20: 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; 2002b24: c2 07 bf e8 ld [ %fp + -24 ], %g1 iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 2002b28: 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; 2002b2c: c2 27 60 30 st %g1, [ %i5 + 0x30 ] iop->file_info = loc.node_access; 2002b30: c2 07 bf e4 ld [ %fp + -28 ], %g1 iop->flags |= rtems_libio_fcntl_flags( flags ); 2002b34: 90 10 00 19 mov %i1, %o0 2002b38: 40 00 24 35 call 200bc0c 2002b3c: c2 27 60 2c st %g1, [ %i5 + 0x2c ] 2002b40: 90 12 00 10 or %o0, %l0, %o0 iop->pathinfo = loc; 2002b44: 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 ); 2002b48: d0 27 60 0c st %o0, [ %i5 + 0xc ] iop->pathinfo = loc; 2002b4c: a0 07 bf e4 add %fp, -28, %l0 2002b50: 90 07 60 10 add %i5, 0x10, %o0 2002b54: 40 00 2d 13 call 200dfa0 2002b58: 92 10 00 10 mov %l0, %o1 if ( !iop->handlers->open_h ) { 2002b5c: c2 07 60 30 ld [ %i5 + 0x30 ], %g1 2002b60: b8 10 20 86 mov 0x86, %i4 2002b64: c2 00 40 00 ld [ %g1 ], %g1 2002b68: 80 a0 60 00 cmp %g1, 0 2002b6c: 02 80 00 40 be 2002c6c 2002b70: b6 10 00 10 mov %l0, %i3 rc = ENOTSUP; goto done; } rc = (*iop->handlers->open_h)( iop, pathname, flags, mode ); 2002b74: 92 10 00 18 mov %i0, %o1 2002b78: 96 10 00 1a mov %i2, %o3 2002b7c: 90 10 00 1d mov %i5, %o0 2002b80: 9f c0 40 00 call %g1 2002b84: 94 10 00 19 mov %i1, %o2 if ( rc ) 2002b88: b8 92 20 00 orcc %o0, 0, %i4 2002b8c: 12 80 00 36 bne 2002c64 2002b90: 80 a7 20 00 cmp %i4, 0 /* * Optionally truncate the file. */ if ( (flags & O_TRUNC) == O_TRUNC ) { 2002b94: 80 8e 64 00 btst 0x400, %i1 2002b98: 02 80 00 4c be 2002cc8 2002b9c: 03 00 80 5e sethi %hi(0x2017800), %g1 rc = ftruncate( iop - rtems_libio_iops, 0 ); 2002ba0: 21 00 80 5e sethi %hi(0x2017800), %l0 <== NOT EXECUTED 2002ba4: c4 04 21 e0 ld [ %l0 + 0x1e0 ], %g2 ! 20179e0 <== NOT EXECUTED 2002ba8: 92 10 20 00 clr %o1 <== NOT EXECUTED 2002bac: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 2002bb0: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 2002bb4: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 2002bb8: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 2002bbc: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 2002bc0: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 2002bc4: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 2002bc8: 83 2a 20 0c sll %o0, 0xc, %g1 <== NOT EXECUTED 2002bcc: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 2002bd0: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 2002bd4: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 2002bd8: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 2002bdc: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 2002be0: 40 00 23 0b call 200b80c <== NOT EXECUTED 2002be4: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED if ( rc ) { 2002be8: b8 92 20 00 orcc %o0, 0, %i4 <== NOT EXECUTED 2002bec: 02 80 00 37 be 2002cc8 <== NOT EXECUTED 2002bf0: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED if(errno) rc = errno; 2002bf4: 40 00 2b 16 call 200d84c <__errno> <== NOT EXECUTED 2002bf8: 01 00 00 00 nop <== NOT EXECUTED 2002bfc: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 2002c00: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2002c04: 02 80 00 06 be 2002c1c <== NOT EXECUTED 2002c08: c4 04 21 e0 ld [ %l0 + 0x1e0 ], %g2 <== NOT EXECUTED 2002c0c: 40 00 2b 10 call 200d84c <__errno> <== NOT EXECUTED 2002c10: 01 00 00 00 nop <== NOT EXECUTED 2002c14: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED close( iop - rtems_libio_iops ); 2002c18: c4 04 21 e0 ld [ %l0 + 0x1e0 ], %g2 <== NOT EXECUTED 2002c1c: b6 10 20 00 clr %i3 <== NOT EXECUTED 2002c20: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 2002c24: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 2002c28: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 2002c2c: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 2002c30: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 2002c34: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 2002c38: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 2002c3c: 83 2a 20 0c sll %o0, 0xc, %g1 <== NOT EXECUTED 2002c40: ba 10 20 00 clr %i5 <== NOT EXECUTED 2002c44: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 2002c48: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 2002c4c: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 2002c50: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 2002c54: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 2002c58: 40 00 22 bb call 200b744 <== NOT EXECUTED 2002c5c: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED */ done: va_end(ap); if ( rc ) { 2002c60: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 2002c64: 02 80 00 19 be 2002cc8 <== NOT EXECUTED 2002c68: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED if ( iop ) 2002c6c: 80 a7 60 00 cmp %i5, 0 2002c70: 02 80 00 05 be 2002c84 2002c74: 80 a6 e0 00 cmp %i3, 0 rtems_libio_free( iop ); 2002c78: 40 00 23 98 call 200bad8 2002c7c: 90 10 00 1d mov %i5, %o0 if ( loc_to_free ) 2002c80: 80 a6 e0 00 cmp %i3, 0 2002c84: 02 80 00 0c be 2002cb4 2002c88: 01 00 00 00 nop rtems_filesystem_freenode( loc_to_free ); 2002c8c: c2 06 e0 08 ld [ %i3 + 8 ], %g1 <== NOT EXECUTED 2002c90: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2002c94: 02 80 00 08 be 2002cb4 <== NOT EXECUTED 2002c98: 01 00 00 00 nop <== NOT EXECUTED 2002c9c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2002ca0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2002ca4: 02 80 00 04 be 2002cb4 <== NOT EXECUTED 2002ca8: 01 00 00 00 nop <== NOT EXECUTED 2002cac: 9f c0 40 00 call %g1 <== NOT EXECUTED 2002cb0: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( rc ); 2002cb4: 40 00 2a e6 call 200d84c <__errno> 2002cb8: b0 10 3f ff mov -1, %i0 2002cbc: f8 22 00 00 st %i4, [ %o0 ] 2002cc0: 81 c7 e0 08 ret 2002cc4: 81 e8 00 00 restore } return iop - rtems_libio_iops; 2002cc8: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 2002ccc: 86 27 40 03 sub %i5, %g3, %g3 2002cd0: 87 38 e0 02 sra %g3, 2, %g3 2002cd4: 83 28 e0 02 sll %g3, 2, %g1 2002cd8: 85 28 e0 06 sll %g3, 6, %g2 2002cdc: 84 20 80 01 sub %g2, %g1, %g2 2002ce0: 83 28 a0 06 sll %g2, 6, %g1 2002ce4: 82 20 40 02 sub %g1, %g2, %g1 2002ce8: 85 28 60 0c sll %g1, 0xc, %g2 2002cec: 82 00 40 02 add %g1, %g2, %g1 2002cf0: 82 00 40 03 add %g1, %g3, %g1 2002cf4: 83 28 60 04 sll %g1, 4, %g1 2002cf8: 82 20 40 03 sub %g1, %g3, %g1 2002cfc: 83 28 60 02 sll %g1, 2, %g1 2002d00: b0 20 c0 01 sub %g3, %g1, %i0 } 2002d04: 81 c7 e0 08 ret 2002d08: 81 e8 00 00 restore 0200299c : /* * This is a replaceable stub */ void open_dev_console(void) { 200299c: 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) { 20029a0: 31 00 80 57 sethi %hi(0x2015c00), %i0 20029a4: 92 10 20 00 clr %o1 20029a8: 90 16 20 c0 or %i0, 0xc0, %o0 20029ac: 40 00 00 1a call 2002a14 20029b0: 94 10 20 00 clr %o2 20029b4: 80 a2 3f ff cmp %o0, -1 20029b8: 02 80 00 15 be 2002a0c 20029bc: 90 16 20 c0 or %i0, 0xc0, %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) 20029c0: 92 10 20 01 mov 1, %o1 20029c4: 40 00 00 14 call 2002a14 20029c8: 94 10 20 00 clr %o2 20029cc: 80 a2 3f ff cmp %o0, -1 20029d0: 32 80 00 06 bne,a 20029e8 20029d4: 90 16 20 c0 or %i0, 0xc0, %o0 rtems_fatal_error_occurred( error_code | '1' ); 20029d8: 11 14 d5 11 sethi %hi(0x53544400), %o0 <== NOT EXECUTED 20029dc: 40 00 0e da call 2006544 <== NOT EXECUTED 20029e0: 90 12 20 31 or %o0, 0x31, %o0 ! 53544431 <== NOT EXECUTED if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1) 20029e4: 90 16 20 c0 or %i0, 0xc0, %o0 <== NOT EXECUTED 20029e8: 92 10 20 01 mov 1, %o1 20029ec: 40 00 00 0a call 2002a14 20029f0: 94 10 20 00 clr %o2 20029f4: 80 a2 3f ff cmp %o0, -1 20029f8: 12 80 00 05 bne 2002a0c 20029fc: 31 14 d5 11 sethi %hi(0x53544400), %i0 rtems_fatal_error_occurred( error_code | '2' ); 2002a00: b0 16 20 32 or %i0, 0x32, %i0 ! 53544432 <== NOT EXECUTED 2002a04: 40 00 0e d0 call 2006544 <== NOT EXECUTED 2002a08: 81 e8 00 00 restore <== NOT EXECUTED 2002a0c: 81 c7 e0 08 ret 2002a10: 81 e8 00 00 restore 020164d4 : * open a directory. */ DIR * opendir(name) const char *name; { 20164d4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register DIR *dirp; register int fd; if ((fd = open(name, 0)) == -1) 20164d8: 92 10 20 00 clr %o1 <== NOT EXECUTED 20164dc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20164e0: 7f ff b9 fe call 2004cd8 <== NOT EXECUTED 20164e4: b0 10 20 00 clr %i0 <== NOT EXECUTED 20164e8: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 20164ec: 02 80 00 18 be 201654c <== NOT EXECUTED 20164f0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return NULL; if (fcntl(fd, F_SETFD, 1) == -1 || 20164f4: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 20164f8: 40 00 22 7d call 201eeec <== NOT EXECUTED 20164fc: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 2016500: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 2016504: 02 80 00 10 be 2016544 <== NOT EXECUTED 2016508: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 201650c: 7f ff b7 62 call 2004294 <== NOT EXECUTED 2016510: 90 10 20 18 mov 0x18, %o0 <== NOT EXECUTED 2016514: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016518: 22 80 00 0b be,a 2016544 <== NOT EXECUTED 201651c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016520: 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); 2016524: 7f ff b7 5c call 2004294 <== NOT EXECUTED 2016528: 90 10 22 00 mov 0x200, %o0 <== NOT EXECUTED dirp->dd_len = 512; 201652c: 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); 2016530: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED dirp->dd_len = 512; if (dirp->dd_buf == NULL) { 2016534: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016538: 12 80 00 07 bne 2016554 <== NOT EXECUTED 201653c: c2 26 20 10 st %g1, [ %i0 + 0x10 ] <== NOT EXECUTED close (fd); 2016540: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016544: 7f ff b5 6e call 2003afc <== NOT EXECUTED 2016548: b0 10 20 00 clr %i0 <== NOT EXECUTED 201654c: 81 c7 e0 08 ret <== NOT EXECUTED 2016550: 81 e8 00 00 restore <== NOT EXECUTED return NULL; } dirp->dd_fd = fd; 2016554: e0 26 00 00 st %l0, [ %i0 ] <== NOT EXECUTED dirp->dd_loc = 0; 2016558: c0 26 20 04 clr [ %i0 + 4 ] <== NOT EXECUTED dirp->dd_seek = 0; 201655c: c0 26 20 14 clr [ %i0 + 0x14 ] <== NOT EXECUTED /* * Set up seek point for rewinddir. */ return dirp; } 2016560: 81 c7 e0 08 ret <== NOT EXECUTED 2016564: 81 e8 00 00 restore <== NOT EXECUTED 02003748 : /* * Handle output processing */ static void oproc (unsigned char c, struct rtems_termios_tty *tty) { 2003748: 9d e3 bf 98 save %sp, -104, %sp int i; if (tty->termios.c_oflag & OPOST) { 200374c: c8 06 60 34 ld [ %i1 + 0x34 ], %g4 2003750: 80 89 20 01 btst 1, %g4 2003754: 02 80 00 59 be 20038b8 2003758: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] switch (c) { 200375c: 82 0e 20 ff and %i0, 0xff, %g1 2003760: 80 a0 60 09 cmp %g1, 9 2003764: 22 80 00 2b be,a 2003810 2003768: c6 06 60 28 ld [ %i1 + 0x28 ], %g3 200376c: 18 80 00 07 bgu 2003788 2003770: 80 a0 60 0a cmp %g1, 0xa 2003774: 80 a0 60 08 cmp %g1, 8 <== NOT EXECUTED 2003778: 12 80 00 3c bne 2003868 <== NOT EXECUTED 200377c: 80 89 20 02 btst 2, %g4 <== NOT EXECUTED } tty->column += i; break; case '\b': if (tty->column > 0) 2003780: 10 80 00 35 b 2003854 <== NOT EXECUTED 2003784: 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) { 2003788: 02 80 00 06 be 20037a0 200378c: 80 a0 60 0d cmp %g1, 0xd 2003790: 32 80 00 36 bne,a 2003868 2003794: 80 89 20 02 btst 2, %g4 tty->column = 0; } break; case '\r': if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0)) 2003798: 10 80 00 10 b 20037d8 <== NOT EXECUTED 200379c: 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) 20037a0: 80 89 20 20 btst 0x20, %g4 20037a4: 32 80 00 02 bne,a 20037ac 20037a8: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED tty->column = 0; if (tty->termios.c_oflag & ONLCR) { 20037ac: c2 06 60 34 ld [ %i1 + 0x34 ], %g1 20037b0: 80 88 60 04 btst 4, %g1 20037b4: 02 80 00 42 be 20038bc 20037b8: 94 10 00 19 mov %i1, %o2 rtems_termios_puts ("\r", 1, tty); 20037bc: 11 00 80 58 sethi %hi(0x2016000), %o0 20037c0: 92 10 20 01 mov 1, %o1 20037c4: 90 12 20 88 or %o0, 0x88, %o0 20037c8: 7f ff ff 94 call 2003618 20037cc: 94 10 00 19 mov %i1, %o2 c = '\n'; if (tty->termios.c_oflag & ONLRET) tty->column = 0; break; } tty->column = 0; 20037d0: 10 80 00 3a b 20038b8 20037d4: c0 26 60 28 clr [ %i1 + 0x28 ] tty->column = 0; } break; case '\r': if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0)) 20037d8: 02 80 00 06 be 20037f0 <== NOT EXECUTED 20037dc: 80 89 20 08 btst 8, %g4 <== NOT EXECUTED 20037e0: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 20037e4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20037e8: 02 80 00 17 be 2003844 <== NOT EXECUTED 20037ec: 80 89 20 08 btst 8, %g4 <== NOT EXECUTED return; if (tty->termios.c_oflag & OCRNL) { 20037f0: 22 80 00 32 be,a 20038b8 <== NOT EXECUTED 20037f4: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED c = '\n'; 20037f8: 82 10 20 0a mov 0xa, %g1 <== NOT EXECUTED if (tty->termios.c_oflag & ONLRET) 20037fc: 80 89 20 20 btst 0x20, %g4 <== NOT EXECUTED 2003800: 02 80 00 2e be 20038b8 <== NOT EXECUTED 2003804: c2 2f a0 44 stb %g1, [ %fp + 0x44 ] <== NOT EXECUTED tty->column = 0; break; } tty->column = 0; 2003808: 10 80 00 2c b 20038b8 <== NOT EXECUTED 200380c: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { 2003810: 05 00 00 06 sethi %hi(0x1800), %g2 2003814: 82 09 00 02 and %g4, %g2, %g1 2003818: 80 a0 40 02 cmp %g1, %g2 } tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); 200381c: 84 08 e0 07 and %g3, 7, %g2 2003820: 82 10 20 08 mov 8, %g1 2003824: 92 20 40 02 sub %g1, %g2, %o1 if ((tty->termios.c_oflag & TABDLY) == XTABS) { 2003828: 12 80 00 09 bne 200384c 200382c: 84 02 40 03 add %o1, %g3, %g2 tty->column += i; 2003830: c4 26 60 28 st %g2, [ %i1 + 0x28 ] rtems_termios_puts ( " ", i, tty); 2003834: 94 10 00 19 mov %i1, %o2 2003838: 11 00 80 58 sethi %hi(0x2016000), %o0 200383c: 7f ff ff 77 call 2003618 2003840: 90 12 20 90 or %o0, 0x90, %o0 ! 2016090 2003844: 81 c7 e0 08 ret 2003848: 81 e8 00 00 restore return; } tty->column += i; 200384c: 10 80 00 1b b 20038b8 <== NOT EXECUTED 2003850: c4 26 60 28 st %g2, [ %i1 + 0x28 ] <== NOT EXECUTED break; case '\b': if (tty->column > 0) 2003854: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003858: 04 80 00 18 ble 20038b8 <== NOT EXECUTED 200385c: 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++; 2003860: 10 80 00 16 b 20038b8 <== NOT EXECUTED 2003864: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED if (tty->column > 0) tty->column--; break; default: if (tty->termios.c_oflag & OLCUC) 2003868: 02 80 00 0b be 2003894 200386c: c4 0f a0 44 ldub [ %fp + 0x44 ], %g2 c = toupper(c); 2003870: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 2003874: c2 00 62 48 ld [ %g1 + 0x248 ], %g1 ! 2017248 <__ctype_ptr> <== NOT EXECUTED oproc (unsigned char c, struct rtems_termios_tty *tty) { int i; if (tty->termios.c_oflag & OPOST) { switch (c) { 2003878: b0 0e 20 ff and %i0, 0xff, %i0 <== NOT EXECUTED tty->column--; break; default: if (tty->termios.c_oflag & OLCUC) c = toupper(c); 200387c: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED 2003880: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 2003884: 32 80 00 02 bne,a 200388c <== NOT EXECUTED 2003888: b0 06 3f e0 add %i0, -32, %i0 <== NOT EXECUTED 200388c: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] <== NOT EXECUTED if (!iscntrl(c)) 2003890: c4 0f a0 44 ldub [ %fp + 0x44 ], %g2 <== NOT EXECUTED 2003894: 03 00 80 5c sethi %hi(0x2017000), %g1 2003898: c2 00 62 48 ld [ %g1 + 0x248 ], %g1 ! 2017248 <__ctype_ptr> 200389c: c2 08 40 02 ldub [ %g1 + %g2 ], %g1 20038a0: 80 88 60 20 btst 0x20, %g1 20038a4: 12 80 00 06 bne 20038bc 20038a8: 94 10 00 19 mov %i1, %o2 tty->column++; 20038ac: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 20038b0: 82 00 60 01 inc %g1 20038b4: c2 26 60 28 st %g1, [ %i1 + 0x28 ] break; } } rtems_termios_puts (&c, 1, tty); 20038b8: 94 10 00 19 mov %i1, %o2 20038bc: 90 07 a0 44 add %fp, 0x44, %o0 20038c0: 7f ff ff 56 call 2003618 20038c4: 92 10 20 01 mov 1, %o1 20038c8: 81 c7 e0 08 ret 20038cc: 81 e8 00 00 restore 02002fdc : } } /* vprintk */ void printk(const char *fmt, ...) { 2002fdc: 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 */ 2002fe0: 92 07 a0 48 add %fp, 0x48, %o1 <== NOT EXECUTED } } /* vprintk */ void printk(const char *fmt, ...) { 2002fe4: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 2002fe8: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 2002fec: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 2002ff0: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 2002ff4: 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); 2002ff8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2002ffc: 7f ff ff 4b call 2002d28 <== NOT EXECUTED 2003000: d2 27 bf f4 st %o1, [ %fp + -12 ] <== NOT EXECUTED va_end(ap); /* clean up when done */ } /* printk */ 2003004: 81 c7 e0 08 ret <== NOT EXECUTED 2003008: 81 e8 00 00 restore <== NOT EXECUTED 02015690 : ssize_t read( int fd, void *buffer, size_t count ) { 2015690: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 2015694: 03 00 80 5a sethi %hi(0x2016800), %g1 <== NOT EXECUTED 2015698: c2 00 62 cc ld [ %g1 + 0x2cc ], %g1 ! 2016acc <== NOT EXECUTED ssize_t read( int fd, void *buffer, size_t count ) { 201569c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 20156a0: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 20156a4: 1a 80 00 0e bcc 20156dc <== NOT EXECUTED 20156a8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 20156ac: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 20156b0: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 <== NOT EXECUTED 20156b4: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 20156b8: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 20156bc: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 20156c0: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 20156c4: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 20156c8: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 20156cc: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 20156d0: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 20156d4: 12 80 00 06 bne 20156ec <== NOT EXECUTED 20156d8: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 20156dc: 7f ff e0 5c call 200d84c <__errno> <== NOT EXECUTED 20156e0: 01 00 00 00 nop <== NOT EXECUTED 20156e4: 10 80 00 14 b 2015734 <== NOT EXECUTED 20156e8: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 20156ec: 02 80 00 07 be 2015708 <== NOT EXECUTED 20156f0: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_libio_check_count( count ); 20156f4: 02 80 00 1b be 2015760 <== NOT EXECUTED 20156f8: 90 10 20 00 clr %o0 <== NOT EXECUTED rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); 20156fc: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 2015700: 32 80 00 06 bne,a 2015718 <== NOT EXECUTED 2015704: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 2015708: 7f ff e0 51 call 200d84c <__errno> <== NOT EXECUTED 201570c: 01 00 00 00 nop <== NOT EXECUTED 2015710: 10 80 00 09 b 2015734 <== NOT EXECUTED 2015714: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED /* * Now process the read(). */ if ( !iop->handlers->read_h ) 2015718: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 201571c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015720: 12 80 00 08 bne 2015740 <== NOT EXECUTED 2015724: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2015728: 7f ff e0 49 call 200d84c <__errno> <== NOT EXECUTED 201572c: 01 00 00 00 nop <== NOT EXECUTED 2015730: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 2015734: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2015738: 10 80 00 0a b 2015760 <== NOT EXECUTED 201573c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = (*iop->handlers->read_h)( iop, buffer, count ); 2015740: 9f c0 40 00 call %g1 <== NOT EXECUTED 2015744: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( rc > 0 ) 2015748: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201574c: 04 80 00 05 ble 2015760 <== NOT EXECUTED 2015750: 01 00 00 00 nop <== NOT EXECUTED iop->offset += rc; 2015754: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 2015758: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 201575c: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED return rc; } 2015760: 81 c7 e0 08 ret <== NOT EXECUTED 2015764: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 020167ac : /* * get next entry in a directory. */ struct dirent * readdir(dirp) register DIR *dirp; { 20167ac: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register struct dirent *dp; if ( !dirp ) 20167b0: a0 96 20 00 orcc %i0, 0, %l0 <== NOT EXECUTED 20167b4: 02 80 00 2a be 201685c <== NOT EXECUTED 20167b8: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; for (;;) { if (dirp->dd_loc == 0) { 20167bc: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 20167c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20167c4: 32 80 00 0a bne,a 20167ec <== NOT EXECUTED 20167c8: c6 04 20 04 ld [ %l0 + 4 ], %g3 <== NOT EXECUTED dirp->dd_size = getdents (dirp->dd_fd, 20167cc: d0 04 00 00 ld [ %l0 ], %o0 <== NOT EXECUTED 20167d0: d2 04 20 0c ld [ %l0 + 0xc ], %o1 <== NOT EXECUTED 20167d4: 40 00 22 8c call 201f204 <== NOT EXECUTED 20167d8: d4 04 20 10 ld [ %l0 + 0x10 ], %o2 <== NOT EXECUTED dirp->dd_buf, dirp->dd_len); if (dirp->dd_size <= 0) 20167dc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20167e0: 04 80 00 1e ble 2016858 <== NOT EXECUTED 20167e4: d0 24 20 08 st %o0, [ %l0 + 8 ] <== NOT EXECUTED return NULL; } if (dirp->dd_loc >= dirp->dd_size) { 20167e8: c6 04 20 04 ld [ %l0 + 4 ], %g3 <== NOT EXECUTED 20167ec: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 20167f0: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 20167f4: 26 80 00 04 bl,a 2016804 <== NOT EXECUTED 20167f8: da 04 20 0c ld [ %l0 + 0xc ], %o5 <== NOT EXECUTED dirp->dd_loc = 0; 20167fc: 10 bf ff f0 b 20167bc <== NOT EXECUTED 2016800: c0 24 20 04 clr [ %l0 + 4 ] <== NOT EXECUTED continue; } dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc); 2016804: b0 00 c0 0d add %g3, %o5, %i0 <== NOT EXECUTED if ((intptr_t)dp & 03) /* bogus pointer check */ 2016808: 80 8e 20 03 btst 3, %i0 <== NOT EXECUTED 201680c: 32 80 00 14 bne,a 201685c <== NOT EXECUTED 2016810: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; if (dp->d_reclen <= 0 || 2016814: c4 16 20 08 lduh [ %i0 + 8 ], %g2 <== NOT EXECUTED 2016818: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 201681c: 02 80 00 0f be 2016858 <== NOT EXECUTED 2016820: 88 00 80 03 add %g2, %g3, %g4 <== NOT EXECUTED 2016824: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 <== NOT EXECUTED 2016828: 82 00 60 01 inc %g1 <== NOT EXECUTED 201682c: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 2016830: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2016834: 34 80 00 0a bg,a 201685c <== NOT EXECUTED 2016838: 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; 201683c: c8 24 20 04 st %g4, [ %l0 + 4 ] <== NOT EXECUTED if (dp->d_ino == 0) 2016840: c2 00 c0 0d ld [ %g3 + %o5 ], %g1 <== NOT EXECUTED 2016844: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016848: 12 80 00 05 bne 201685c <== NOT EXECUTED 201684c: 01 00 00 00 nop <== NOT EXECUTED if ( !dirp ) return NULL; for (;;) { if (dirp->dd_loc == 0) { 2016850: 10 bf ff dc b 20167c0 <== NOT EXECUTED 2016854: 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) 2016858: b0 10 20 00 clr %i0 <== NOT EXECUTED continue; return (dp); } } 201685c: 81 c7 e0 08 ret <== NOT EXECUTED 2016860: 81 e8 00 00 restore <== NOT EXECUTED 020023ac : void *realloc( void *ptr, size_t size ) { 20023ac: 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())) { 20023b0: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 20023b4: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> <== NOT EXECUTED 20023b8: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 20023bc: 12 80 00 0c bne 20023ec <== NOT EXECUTED 20023c0: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED if (_Thread_Dispatch_disable_level > 0) 20023c4: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 20023c8: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20023cc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20023d0: 32 80 00 12 bne,a 2002418 <== NOT EXECUTED 20023d4: b0 10 20 00 clr %i0 <== NOT EXECUTED return (void *) 0; if (_ISR_Nest_level > 0) 20023d8: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 20023dc: c2 00 60 78 ld [ %g1 + 0x78 ], %g1 ! 2017c78 <_ISR_Nest_level> <== NOT EXECUTED 20023e0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20023e4: 12 80 00 34 bne 20024b4 <== NOT EXECUTED 20023e8: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED } /* * Continue with realloc(). */ if ( !ptr ) 20023ec: 12 80 00 06 bne 2002404 <== NOT EXECUTED 20023f0: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED return malloc( size ); 20023f4: 7f ff ff a3 call 2002280 <== NOT EXECUTED 20023f8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 20023fc: 81 c7 e0 08 ret <== NOT EXECUTED 2002400: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( !size ) { 2002404: 12 80 00 07 bne 2002420 <== NOT EXECUTED 2002408: 23 00 80 5e sethi %hi(0x2017800), %l1 <== NOT EXECUTED free( ptr ); 200240c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2002410: 7f ff ff 74 call 20021e0 <== NOT EXECUTED 2002414: b0 10 20 00 clr %i0 <== NOT EXECUTED 2002418: 81 c7 e0 08 ret <== NOT EXECUTED 200241c: 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 ) ) { 2002420: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2002424: 90 14 61 ec or %l1, 0x1ec, %o0 <== NOT EXECUTED 2002428: 40 00 17 f9 call 200840c <_Protected_heap_Resize_block> <== NOT EXECUTED 200242c: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 2002430: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2002434: 12 80 00 21 bne 20024b8 <== NOT EXECUTED 2002438: 01 00 00 00 nop <== NOT EXECUTED return ptr; } new_area = malloc( size ); 200243c: 7f ff ff 91 call 2002280 <== NOT EXECUTED 2002440: 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 ) { 2002444: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 2002448: 02 80 00 1b be 20024b4 <== NOT EXECUTED 200244c: 90 14 61 ec or %l1, 0x1ec, %o0 <== NOT EXECUTED return (void *) 0; } if ( !_Protected_heap_Get_block_size(&RTEMS_Malloc_Heap, ptr, &old_size) ) { 2002450: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2002454: 40 00 17 5c call 20081c4 <_Protected_heap_Get_block_size> <== NOT EXECUTED 2002458: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 200245c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2002460: 12 80 00 08 bne 2002480 <== NOT EXECUTED 2002464: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED errno = EINVAL; 2002468: 40 00 2c f9 call 200d84c <__errno> <== NOT EXECUTED 200246c: b0 10 20 00 clr %i0 <== NOT EXECUTED 2002470: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 2002474: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2002478: 81 c7 e0 08 ret <== NOT EXECUTED 200247c: 81 e8 00 00 restore <== NOT EXECUTED return (void *) 0; } memcpy( new_area, ptr, (size < old_size) ? size : old_size ); 2002480: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 2002484: 08 80 00 03 bleu 2002490 <== NOT EXECUTED 2002488: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 200248c: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED 2002490: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 2002494: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2002498: 40 00 2e c2 call 200dfa0 <== NOT EXECUTED 200249c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED free( ptr ); 20024a0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20024a4: 7f ff ff 4f call 20021e0 <== NOT EXECUTED 20024a8: b0 10 00 10 mov %l0, %i0 <== NOT EXECUTED 20024ac: 81 c7 e0 08 ret <== NOT EXECUTED 20024b0: 81 e8 00 00 restore <== NOT EXECUTED return new_area; 20024b4: b0 10 20 00 clr %i0 <== NOT EXECUTED } 20024b8: 81 c7 e0 08 ret <== NOT EXECUTED 20024bc: 81 e8 00 00 restore <== NOT EXECUTED 02016864 : #include int rmdir( const char *pathname ) { 2016864: 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 ); 2016868: 92 10 20 00 clr %o1 <== NOT EXECUTED 201686c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016870: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 2016874: 96 10 20 00 clr %o3 <== NOT EXECUTED 2016878: 7f ff b5 00 call 2003c78 <== NOT EXECUTED 201687c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 2016880: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016884: 32 80 00 11 bne,a 20168c8 <== NOT EXECUTED 2016888: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 201688c: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 2016890: 7f ff b4 cd call 2003bc4 <== NOT EXECUTED 2016894: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0) { 2016898: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201689c: 02 80 00 0d be 20168d0 <== NOT EXECUTED 20168a0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 20168a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20168a8: 02 80 00 08 be 20168c8 <== NOT EXECUTED 20168ac: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20168b0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 20168b4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20168b8: 02 80 00 04 be 20168c8 <== NOT EXECUTED 20168bc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20168c0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20168c4: 01 00 00 00 nop <== NOT EXECUTED 20168c8: 81 c7 e0 08 ret <== NOT EXECUTED 20168cc: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify you can remove this node as a directory. */ if ( !loc.ops->node_type_h ){ 20168d0: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 20168d4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 20168d8: 22 80 00 1e be,a 2016950 <== NOT EXECUTED 20168dc: 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 ){ 20168e0: 9f c0 80 00 call %g2 <== NOT EXECUTED 20168e4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20168e8: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 20168ec: 02 80 00 10 be 201692c <== NOT EXECUTED 20168f0: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 20168f4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 20168f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20168fc: 02 80 00 08 be 201691c <== NOT EXECUTED 2016900: 01 00 00 00 nop <== NOT EXECUTED 2016904: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016908: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201690c: 02 80 00 04 be 201691c <== NOT EXECUTED 2016910: 01 00 00 00 nop <== NOT EXECUTED 2016914: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016918: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 201691c: 40 00 2a 2a call 20211c4 <__errno> <== NOT EXECUTED 2016920: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2016924: 10 80 00 13 b 2016970 <== NOT EXECUTED 2016928: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ 201692c: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 2016930: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016934: 12 80 00 12 bne 201697c <== NOT EXECUTED 2016938: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 201693c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2016940: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016944: 02 80 00 08 be 2016964 <== NOT EXECUTED 2016948: 01 00 00 00 nop <== NOT EXECUTED 201694c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016950: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016954: 02 80 00 04 be 2016964 <== NOT EXECUTED 2016958: 01 00 00 00 nop <== NOT EXECUTED 201695c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016960: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2016964: 40 00 2a 18 call 20211c4 <__errno> <== NOT EXECUTED 2016968: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 201696c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2016970: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2016974: 81 c7 e0 08 ret <== NOT EXECUTED 2016978: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.handlers->rmnod_h)( &loc ); 201697c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016980: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2016984: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2016988: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201698c: 02 bf ff cf be 20168c8 <== NOT EXECUTED 2016990: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 2016994: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016998: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 201699c: 02 80 00 06 be 20169b4 <== NOT EXECUTED 20169a0: 01 00 00 00 nop <== NOT EXECUTED 20169a4: 9f c0 40 00 call %g1 <== NOT EXECUTED 20169a8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20169ac: 81 c7 e0 08 ret <== NOT EXECUTED 20169b0: 81 e8 00 00 restore <== NOT EXECUTED return result; } 20169b4: 81 c7 e0 08 ret <== NOT EXECUTED 20169b8: 81 e8 00 00 restore <== NOT EXECUTED 0200d19c : uint32_t rtems_assoc_local_by_remote_bitfield( const rtems_assoc_t *ap, uint32_t remote_value ) { 200d19c: 9d e3 bf 98 save %sp, -104, %sp 200d1a0: a0 10 20 01 mov 1, %l0 200d1a4: a4 10 00 18 mov %i0, %l2 200d1a8: a2 10 20 00 clr %l1 200d1ac: b0 10 20 00 clr %i0 uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { if (b & remote_value) 200d1b0: 80 8c 00 19 btst %l0, %i1 200d1b4: 22 80 00 07 be,a 200d1d0 200d1b8: a2 04 60 01 inc %l1 local_value |= rtems_assoc_local_by_remote(ap, b); 200d1bc: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 200d1c0: 40 00 00 09 call 200d1e4 <== NOT EXECUTED 200d1c4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 200d1c8: b0 16 00 08 or %i0, %o0, %i0 <== NOT EXECUTED ) { uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 200d1cc: a2 04 60 01 inc %l1 <== NOT EXECUTED 200d1d0: 80 a4 60 20 cmp %l1, 0x20 200d1d4: 12 bf ff f7 bne 200d1b0 200d1d8: a1 2c 20 01 sll %l0, 1, %l0 if (b & remote_value) local_value |= rtems_assoc_local_by_remote(ap, b); } return local_value; } 200d1dc: 81 c7 e0 08 ret 200d1e0: 81 e8 00 00 restore 02015918 : sprintf(bad_buffer, "< %" PRId32 "[0x%" PRIx32 " ] >", bad_value, bad_value); #else static char bad_buffer[32] = ""; #endif return bad_buffer; } 2015918: 11 00 80 94 sethi %hi(0x2025000), %o0 <== NOT EXECUTED 201591c: 81 c3 e0 08 retl <== NOT EXECUTED 2015920: 90 12 23 f0 or %o0, 0x3f0, %o0 ! 20253f0 <== NOT EXECUTED 02011adc : const char *rtems_assoc_name_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 2011adc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 2011ae0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2011ae4: 40 00 00 09 call 2011b08 <== NOT EXECUTED 2011ae8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED if (nap) 2011aec: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2011af0: 32 80 00 04 bne,a 2011b00 <== NOT EXECUTED 2011af4: f0 02 00 00 ld [ %o0 ], %i0 <== NOT EXECUTED return nap->name; return rtems_assoc_name_bad(local_value); 2011af8: 40 00 0f 88 call 2015918 <== NOT EXECUTED 2011afc: 91 e8 00 19 restore %g0, %i1, %o0 <== NOT EXECUTED } 2011b00: 81 c7 e0 08 ret <== NOT EXECUTED 2011b04: 81 e8 00 00 restore <== NOT EXECUTED 0200d7cc : const rtems_assoc_t *rtems_assoc_ptr_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 200d7cc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 200d7d0: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED 200d7d4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200d7d8: 02 80 00 0e be 200d810 <== NOT EXECUTED 200d7dc: 84 10 20 00 clr %g2 <== NOT EXECUTED 200d7e0: 13 00 80 58 sethi %hi(0x2016000), %o1 <== NOT EXECUTED 200d7e4: 40 00 04 a8 call 200ea84 <== NOT EXECUTED 200d7e8: 92 12 63 d8 or %o1, 0x3d8, %o1 ! 20163d8 <_CPU_Trap_slot_template+0x1b0> <== NOT EXECUTED 200d7ec: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200d7f0: 02 80 00 07 be 200d80c <== NOT EXECUTED 200d7f4: 84 10 00 18 mov %i0, %g2 <== NOT EXECUTED default_ap = ap++; 200d7f8: 10 80 00 06 b 200d810 <== NOT EXECUTED 200d7fc: 84 10 20 00 clr %g2 <== NOT EXECUTED for ( ; ap->name; ap++) if (ap->local_value == local_value) 200d800: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 200d804: 02 80 00 08 be 200d824 <== NOT EXECUTED 200d808: 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++) 200d80c: b0 06 20 0c add %i0, 0xc, %i0 <== NOT EXECUTED 200d810: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 200d814: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200d818: 32 bf ff fa bne,a 200d800 <== NOT EXECUTED 200d81c: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 200d820: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED if (ap->local_value == local_value) return ap; return default_ap; } 200d824: 81 c7 e0 08 ret <== NOT EXECUTED 200d828: 81 e8 00 00 restore <== NOT EXECUTED 0200d20c : const rtems_assoc_t *rtems_assoc_ptr_by_remote( const rtems_assoc_t *ap, uint32_t remote_value ) { 200d20c: 9d e3 bf 98 save %sp, -104, %sp const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 200d210: d0 06 00 00 ld [ %i0 ], %o0 200d214: 80 a2 20 00 cmp %o0, 0 200d218: 02 80 00 0e be 200d250 200d21c: 84 10 20 00 clr %g2 200d220: 13 00 80 58 sethi %hi(0x2016000), %o1 200d224: 40 00 06 18 call 200ea84 200d228: 92 12 63 d8 or %o1, 0x3d8, %o1 ! 20163d8 <_CPU_Trap_slot_template+0x1b0> 200d22c: 80 a2 20 00 cmp %o0, 0 200d230: 02 80 00 07 be 200d24c 200d234: 84 10 00 18 mov %i0, %g2 default_ap = ap++; 200d238: 10 80 00 06 b 200d250 200d23c: 84 10 20 00 clr %g2 for ( ; ap->name; ap++) if (ap->remote_value == remote_value) 200d240: 80 a0 40 19 cmp %g1, %i1 200d244: 02 80 00 08 be 200d264 200d248: 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++) 200d24c: b0 06 20 0c add %i0, 0xc, %i0 200d250: c2 06 00 00 ld [ %i0 ], %g1 200d254: 80 a0 60 00 cmp %g1, 0 200d258: 32 bf ff fa bne,a 200d240 200d25c: c2 06 20 08 ld [ %i0 + 8 ], %g1 200d260: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED if (ap->remote_value == remote_value) return ap; return default_ap; } 200d264: 81 c7 e0 08 ret 200d268: 81 e8 00 00 restore 0200d26c : uint32_t rtems_assoc_remote_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 200d26c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 200d270: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 200d274: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200d278: 40 00 01 55 call 200d7cc <== NOT EXECUTED 200d27c: b0 10 20 00 clr %i0 <== NOT EXECUTED if (nap) 200d280: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200d284: 32 80 00 02 bne,a 200d28c <== NOT EXECUTED 200d288: f0 02 20 08 ld [ %o0 + 8 ], %i0 <== NOT EXECUTED return nap->remote_value; return 0; } 200d28c: 81 c7 e0 08 ret <== NOT EXECUTED 200d290: 81 e8 00 00 restore <== NOT EXECUTED 02005d3c : rtems_name name, rtems_attribute attribute_set, uint32_t maximum_waiters, rtems_id *id ) { 2005d3c: 9d e3 bf 90 save %sp, -112, %sp Barrier_Control *the_barrier; CORE_barrier_Attributes the_attributes; if ( !rtems_is_name_valid( name ) ) 2005d40: a2 96 20 00 orcc %i0, 0, %l1 2005d44: 02 80 00 1b be 2005db0 2005d48: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 2005d4c: 80 a6 e0 00 cmp %i3, 0 2005d50: 02 80 00 18 be 2005db0 2005d54: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; /* Initialize core barrier attributes */ if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { 2005d58: 80 8e 60 10 btst 0x10, %i1 2005d5c: 02 80 00 06 be 2005d74 2005d60: 80 a6 a0 00 cmp %i2, 0 the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; if ( maximum_waiters == 0 ) 2005d64: 02 80 00 13 be 2005db0 2005d68: 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; 2005d6c: 10 80 00 04 b 2005d7c 2005d70: c0 27 bf f0 clr [ %fp + -16 ] if ( maximum_waiters == 0 ) return RTEMS_INVALID_NUMBER; } else the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE; 2005d74: 82 10 20 01 mov 1, %g1 2005d78: c2 27 bf f0 st %g1, [ %fp + -16 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2005d7c: 05 00 80 6e sethi %hi(0x201b800), %g2 2005d80: c2 00 a2 e0 ld [ %g2 + 0x2e0 ], %g1 ! 201bae0 <_Thread_Dispatch_disable_level> the_attributes.maximum_count = maximum_waiters; 2005d84: f4 27 bf f4 st %i2, [ %fp + -12 ] 2005d88: 82 00 60 01 inc %g1 2005d8c: c2 20 a2 e0 st %g1, [ %g2 + 0x2e0 ] * 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 ); 2005d90: 21 00 80 6e sethi %hi(0x201b800), %l0 2005d94: 40 00 09 d4 call 20084e4 <_Objects_Allocate> 2005d98: 90 14 21 40 or %l0, 0x140, %o0 ! 201b940 <_Barrier_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_barrier = _Barrier_Allocate(); if ( !the_barrier ) { 2005d9c: b4 92 20 00 orcc %o0, 0, %i2 2005da0: 12 80 00 06 bne 2005db8 2005da4: 90 06 a0 14 add %i2, 0x14, %o0 _Thread_Enable_dispatch(); 2005da8: 7f ff ff d8 call 2005d08 <_Thread_Enable_dispatch> 2005dac: b0 10 20 05 mov 5, %i0 2005db0: 81 c7 e0 08 ret 2005db4: 81 e8 00 00 restore return RTEMS_TOO_MANY; } the_barrier->attribute_set = attribute_set; 2005db8: f2 26 a0 10 st %i1, [ %i2 + 0x10 ] _CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes ); 2005dbc: 40 00 07 16 call 2007a14 <_CORE_barrier_Initialize> 2005dc0: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2005dc4: 90 14 21 40 or %l0, 0x140, %o0 Objects_Name name ) { uint32_t index; index = _Objects_Get_index( the_object->id ); 2005dc8: c6 06 a0 08 ld [ %i2 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2005dcc: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 2005dd0: 03 00 00 3f sethi %hi(0xfc00), %g1 2005dd4: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 2005dd8: 82 08 c0 01 and %g3, %g1, %g1 2005ddc: 80 a0 40 02 cmp %g1, %g2 2005de0: 38 80 00 06 bgu,a 2005df8 2005de4: e2 26 a0 0c st %l1, [ %i2 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 2005de8: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 2005dec: 83 28 60 02 sll %g1, 2, %g1 2005df0: 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; 2005df4: e2 26 a0 0c st %l1, [ %i2 + 0xc ] &_Barrier_Information, &the_barrier->Object, (Objects_Name) name ); *id = the_barrier->Object.id; 2005df8: c6 26 c0 00 st %g3, [ %i3 ] _Thread_Enable_dispatch(); 2005dfc: 7f ff ff c3 call 2005d08 <_Thread_Enable_dispatch> 2005e00: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 2005e04: 81 c7 e0 08 ret 2005e08: 81 e8 00 00 restore 02005e0c : */ rtems_status_code rtems_barrier_delete( rtems_id id ) { 2005e0c: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 2005e10: 21 00 80 6e sethi %hi(0x201b800), %l0 2005e14: 92 10 00 18 mov %i0, %o1 2005e18: 94 07 bf f4 add %fp, -12, %o2 2005e1c: 40 00 0a f6 call 20089f4 <_Objects_Get> 2005e20: 90 14 21 40 or %l0, 0x140, %o0 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 2005e24: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005e28: 80 a0 60 00 cmp %g1, 0 2005e2c: 02 80 00 07 be 2005e48 2005e30: b0 10 00 08 mov %o0, %i0 2005e34: 80 a0 60 02 cmp %g1, 2 2005e38: 08 80 00 22 bleu 2005ec0 2005e3c: b0 10 20 04 mov 4, %i0 2005e40: 81 c7 e0 08 ret <== NOT EXECUTED 2005e44: 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( 2005e48: 90 02 20 14 add %o0, 0x14, %o0 2005e4c: 92 10 20 00 clr %o1 2005e50: 40 00 12 64 call 200a7e0 <_Thread_queue_Flush> 2005e54: 94 10 20 02 mov 2, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2005e58: 90 14 21 40 or %l0, 0x140, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 2005e5c: c2 06 20 08 ld [ %i0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2005e60: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 2005e64: 05 00 00 3f sethi %hi(0xfc00), %g2 2005e68: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 2005e6c: 82 08 40 02 and %g1, %g2, %g1 2005e70: 80 a0 40 03 cmp %g1, %g3 2005e74: 38 80 00 06 bgu,a 2005e8c 2005e78: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 2005e7c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 2005e80: 83 28 60 02 sll %g1, 2, %g1 2005e84: 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; 2005e88: c0 26 20 0c clr [ %i0 + 0xc ] */ RTEMS_INLINE_ROUTINE void _Barrier_Free ( Barrier_Control *the_barrier ) { _Objects_Free( &_Barrier_Information, &the_barrier->Object ); 2005e8c: 40 00 0a 98 call 20088ec <_Objects_Free> 2005e90: 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 ) 2005e94: 03 00 80 6e sethi %hi(0x201b800), %g1 2005e98: c4 00 62 e0 ld [ %g1 + 0x2e0 ], %g2 ! 201bae0 <_Thread_Dispatch_disable_level> 2005e9c: b0 10 20 00 clr %i0 2005ea0: 84 00 bf ff add %g2, -1, %g2 2005ea4: c4 20 62 e0 st %g2, [ %g1 + 0x2e0 ] 2005ea8: c2 00 62 e0 ld [ %g1 + 0x2e0 ], %g1 2005eac: 80 a0 60 00 cmp %g1, 0 2005eb0: 12 80 00 04 bne 2005ec0 2005eb4: 01 00 00 00 nop _Thread_Dispatch(); 2005eb8: 40 00 0f d4 call 2009e08 <_Thread_Dispatch> 2005ebc: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005ec0: 81 c7 e0 08 ret 2005ec4: 81 e8 00 00 restore 02005f00 : rtems_status_code rtems_barrier_release( rtems_id id, uint32_t *released ) { 2005f00: 9d e3 bf 90 save %sp, -112, %sp 2005f04: a0 10 00 18 mov %i0, %l0 Barrier_Control *the_barrier; Objects_Locations location; if ( !released ) 2005f08: 80 a6 60 00 cmp %i1, 0 2005f0c: 02 80 00 1f be 2005f88 2005f10: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 2005f14: 11 00 80 6e sethi %hi(0x201b800), %o0 2005f18: 92 10 00 10 mov %l0, %o1 2005f1c: 90 12 21 40 or %o0, 0x140, %o0 2005f20: 40 00 0a b5 call 20089f4 <_Objects_Get> 2005f24: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 2005f28: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005f2c: 80 a0 60 00 cmp %g1, 0 2005f30: 02 80 00 07 be 2005f4c 2005f34: 92 10 00 10 mov %l0, %o1 2005f38: 80 a0 60 02 cmp %g1, 2 2005f3c: 08 80 00 13 bleu 2005f88 2005f40: b0 10 20 04 mov 4, %i0 2005f44: 81 c7 e0 08 ret <== NOT EXECUTED 2005f48: 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 ); 2005f4c: 94 10 20 00 clr %o2 2005f50: 40 00 06 bd call 2007a44 <_CORE_barrier_Release> 2005f54: 90 02 20 14 add %o0, 0x14, %o0 2005f58: 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 ) 2005f5c: 03 00 80 6e sethi %hi(0x201b800), %g1 2005f60: c4 00 62 e0 ld [ %g1 + 0x2e0 ], %g2 ! 201bae0 <_Thread_Dispatch_disable_level> 2005f64: b0 10 20 00 clr %i0 2005f68: 84 00 bf ff add %g2, -1, %g2 2005f6c: c4 20 62 e0 st %g2, [ %g1 + 0x2e0 ] 2005f70: c2 00 62 e0 ld [ %g1 + 0x2e0 ], %g1 2005f74: 80 a0 60 00 cmp %g1, 0 2005f78: 12 80 00 04 bne 2005f88 2005f7c: 01 00 00 00 nop _Thread_Dispatch(); 2005f80: 40 00 0f a2 call 2009e08 <_Thread_Dispatch> 2005f84: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005f88: 81 c7 e0 08 ret 2005f8c: 81 e8 00 00 restore 02005f90 : rtems_status_code rtems_barrier_wait( rtems_id id, rtems_interval timeout ) { 2005f90: 9d e3 bf 90 save %sp, -112, %sp 2005f94: 11 00 80 6e sethi %hi(0x201b800), %o0 2005f98: 92 10 00 18 mov %i0, %o1 2005f9c: 90 12 21 40 or %o0, 0x140, %o0 2005fa0: 40 00 0a 95 call 20089f4 <_Objects_Get> 2005fa4: 94 07 bf f4 add %fp, -12, %o2 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 2005fa8: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005fac: 80 a0 60 00 cmp %g1, 0 2005fb0: 02 80 00 07 be 2005fcc 2005fb4: 96 10 00 19 mov %i1, %o3 2005fb8: 80 a0 60 02 cmp %g1, 2 2005fbc: 08 80 00 17 bleu 2006018 2005fc0: 90 10 20 04 mov 4, %o0 2005fc4: 10 80 00 15 b 2006018 <== NOT EXECUTED 2005fc8: 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( 2005fcc: 90 02 20 14 add %o0, 0x14, %o0 2005fd0: 92 10 00 18 mov %i0, %o1 2005fd4: 94 10 20 01 mov 1, %o2 2005fd8: 40 00 06 a6 call 2007a70 <_CORE_barrier_Wait> 2005fdc: 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 ) 2005fe0: 03 00 80 6e sethi %hi(0x201b800), %g1 2005fe4: c4 00 62 e0 ld [ %g1 + 0x2e0 ], %g2 ! 201bae0 <_Thread_Dispatch_disable_level> 2005fe8: 84 00 bf ff add %g2, -1, %g2 2005fec: c4 20 62 e0 st %g2, [ %g1 + 0x2e0 ] 2005ff0: c2 00 62 e0 ld [ %g1 + 0x2e0 ], %g1 2005ff4: 80 a0 60 00 cmp %g1, 0 2005ff8: 12 80 00 05 bne 200600c 2005ffc: 03 00 80 6e sethi %hi(0x201b800), %g1 _Thread_Dispatch(); 2006000: 40 00 0f 82 call 2009e08 <_Thread_Dispatch> 2006004: 01 00 00 00 nop TRUE, timeout, NULL ); _Thread_Enable_dispatch(); return _Barrier_Translate_core_barrier_return_code( 2006008: 03 00 80 6e sethi %hi(0x201b800), %g1 200600c: c2 00 63 c0 ld [ %g1 + 0x3c0 ], %g1 ! 201bbc0 <_Thread_Executing> 2006010: 40 00 1c ab call 200d2bc <_Barrier_Translate_core_barrier_return_code> 2006014: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2006018: 81 c7 e0 08 ret 200601c: 91 e8 00 08 restore %g0, %o0, %o0 02004e64 : rtems_status_code rtems_clock_get( rtems_clock_get_options option, void *time_buffer ) { 2004e64: 9d e3 bf 68 save %sp, -152, %sp 2004e68: 82 10 00 18 mov %i0, %g1 if ( !time_buffer ) 2004e6c: 80 a6 60 00 cmp %i1, 0 2004e70: 02 80 00 47 be 2004f8c 2004e74: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; switch ( option ) { 2004e78: 80 a0 60 04 cmp %g1, 4 2004e7c: 18 80 00 44 bgu 2004f8c 2004e80: b0 10 20 19 mov 0x19, %i0 2004e84: 83 28 60 02 sll %g1, 2, %g1 2004e88: 05 00 80 13 sethi %hi(0x2004c00), %g2 2004e8c: 84 10 a2 10 or %g2, 0x210, %g2 ! 2004e10 2004e90: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2004e94: 81 c0 40 00 jmp %g1 2004e98: 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 ) 2004e9c: 03 00 80 5e sethi %hi(0x2017800), %g1 2004ea0: c2 00 63 ec ld [ %g1 + 0x3ec ], %g1 ! 2017bec <_TOD_Is_set> 2004ea4: 80 a0 60 00 cmp %g1, 0 2004ea8: 22 80 00 39 be,a 2004f8c 2004eac: b0 10 20 0b mov 0xb, %i0 return RTEMS_NOT_DEFINED; /* Obtain the current time */ _TOD_Get_timeval( &now ); 2004eb0: a0 07 bf f0 add %fp, -16, %l0 2004eb4: 7f ff ff dc call 2004e24 <_TOD_Get_timeval> 2004eb8: 90 10 00 10 mov %l0, %o0 /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); 2004ebc: 92 07 bf cc add %fp, -52, %o1 2004ec0: 40 00 24 33 call 200df8c 2004ec4: 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; 2004ec8: 03 00 80 5f sethi %hi(0x2017c00), %g1 2004ecc: d2 00 61 8c ld [ %g1 + 0x18c ], %o1 ! 2017d8c <_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; 2004ed0: 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; 2004ed4: 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; 2004ed8: c2 26 60 08 st %g1, [ %i1 + 8 ] tmbuf->hour = time.tm_hour; 2004edc: c2 07 bf d4 ld [ %fp + -44 ], %g1 2004ee0: c2 26 60 0c st %g1, [ %i1 + 0xc ] tmbuf->minute = time.tm_min; 2004ee4: c2 07 bf d0 ld [ %fp + -48 ], %g1 2004ee8: c2 26 60 10 st %g1, [ %i1 + 0x10 ] tmbuf->second = time.tm_sec; 2004eec: c2 07 bf cc ld [ %fp + -52 ], %g1 2004ef0: 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; 2004ef4: c2 07 bf e0 ld [ %fp + -32 ], %g1 2004ef8: 82 00 67 6c add %g1, 0x76c, %g1 2004efc: c2 26 40 00 st %g1, [ %i1 ] tmbuf->month = time.tm_mon + 1; 2004f00: c2 07 bf dc ld [ %fp + -36 ], %g1 2004f04: 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; 2004f08: 40 00 3d ee call 20146c0 <.udiv> 2004f0c: c2 26 60 04 st %g1, [ %i1 + 4 ] 2004f10: 10 80 00 1c b 2004f80 2004f14: 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 ) 2004f18: 03 00 80 5e sethi %hi(0x2017800), %g1 2004f1c: c2 00 63 ec ld [ %g1 + 0x3ec ], %g1 ! 2017bec <_TOD_Is_set> 2004f20: 80 a0 60 00 cmp %g1, 0 2004f24: 02 80 00 19 be 2004f88 2004f28: 03 00 80 5f sethi %hi(0x2017c00), %g1 return RTEMS_NOT_DEFINED; *interval = _TOD_Seconds_since_epoch; 2004f2c: 10 80 00 04 b 2004f3c 2004f30: c2 00 60 6c ld [ %g1 + 0x6c ], %g1 ! 2017c6c <_TOD_Now> } case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = _Watchdog_Ticks_since_boot; 2004f34: 03 00 80 5f sethi %hi(0x2017c00), %g1 2004f38: c2 00 61 34 ld [ %g1 + 0x134 ], %g1 ! 2017d34 <_Watchdog_Ticks_since_boot> 2004f3c: c2 26 40 00 st %g1, [ %i1 ] 2004f40: 81 c7 e0 08 ret 2004f44: 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; 2004f48: 03 00 80 5f sethi %hi(0x2017c00), %g1 2004f4c: d2 00 61 8c ld [ %g1 + 0x18c ], %o1 ! 2017d8c <_TOD_Microseconds_per_tick> 2004f50: 11 00 03 d0 sethi %hi(0xf4000), %o0 2004f54: 40 00 3d db call 20146c0 <.udiv> 2004f58: 90 12 22 40 or %o0, 0x240, %o0 ! f4240 2004f5c: 10 80 00 09 b 2004f80 2004f60: d0 26 40 00 st %o0, [ %i1 ] } case RTEMS_CLOCK_GET_TIME_VALUE: { struct timeval *time = (struct timeval *)time_buffer; if ( !_TOD_Is_set ) 2004f64: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 2004f68: c2 00 63 ec ld [ %g1 + 0x3ec ], %g1 ! 2017bec <_TOD_Is_set> <== NOT EXECUTED 2004f6c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2004f70: 22 80 00 07 be,a 2004f8c <== NOT EXECUTED 2004f74: b0 10 20 0b mov 0xb, %i0 <== NOT EXECUTED return RTEMS_NOT_DEFINED; _TOD_Get_timeval( time ); 2004f78: 7f ff ff ab call 2004e24 <_TOD_Get_timeval> <== NOT EXECUTED 2004f7c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2004f80: 81 c7 e0 08 ret 2004f84: 91 e8 20 00 restore %g0, 0, %o0 return RTEMS_SUCCESSFUL; 2004f88: b0 10 20 0b mov 0xb, %i0 <== NOT EXECUTED } } return RTEMS_INTERNAL_ERROR; /* should never get here */ } 2004f8c: 81 c7 e0 08 ret 2004f90: 81 e8 00 00 restore 02004fb4 : * * NOTE: This routine only works for leap-years through 2099. */ rtems_status_code rtems_clock_tick( void ) { 2004fb4: 9d e3 bf 98 save %sp, -104, %sp _TOD_Tickle_ticks(); 2004fb8: 40 00 07 18 call 2006c18 <_TOD_Tickle_ticks> 2004fbc: 01 00 00 00 nop */ RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_ticks( void ) { _Watchdog_Tickle( &_Watchdog_Ticks_chain ); 2004fc0: 11 00 80 5f sethi %hi(0x2017c00), %o0 2004fc4: 40 00 14 6b call 200a170 <_Watchdog_Tickle> 2004fc8: 90 12 20 b0 or %o0, 0xb0, %o0 ! 2017cb0 <_Watchdog_Ticks_chain> _Watchdog_Tickle_ticks(); _Thread_Tickle_timeslice(); 2004fcc: 40 00 12 c2 call 2009ad4 <_Thread_Tickle_timeslice> 2004fd0: 01 00 00 00 nop * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_context_switch_necessary( void ) { return ( _Context_Switch_necessary ); 2004fd4: 03 00 80 5f sethi %hi(0x2017c00), %g1 2004fd8: c2 00 60 a0 ld [ %g1 + 0xa0 ], %g1 ! 2017ca0 <_Context_Switch_necessary> if ( _Thread_Is_context_switch_necessary() && 2004fdc: 80 a0 60 00 cmp %g1, 0 2004fe0: 02 80 00 08 be 2005000 2004fe4: 03 00 80 5e sethi %hi(0x2017800), %g1 * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_dispatching_enabled( void ) { return ( _Thread_Dispatch_disable_level == 0 ); 2004fe8: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 2004fec: 80 a0 60 00 cmp %g1, 0 2004ff0: 12 80 00 04 bne 2005000 2004ff4: 01 00 00 00 nop _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); 2004ff8: 40 00 0e cb call 2008b24 <_Thread_Dispatch> <== NOT EXECUTED 2004ffc: 01 00 00 00 nop <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 2005000: 81 c7 e0 08 ret 2005004: 91 e8 20 00 restore %g0, 0, %o0 02002ad0 : void rtems_cpu_usage_report_with_plugin( void *context, rtems_printk_plugin_t print ) { 2002ad0: 9d e3 bf 68 save %sp, -152, %sp struct timespec uptime, total, ran; #else uint32_t total_units = 0; #endif if ( !print ) 2002ad4: 80 a6 60 00 cmp %i1, 0 2002ad8: 02 80 00 62 be 2002c60 2002adc: 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 ); 2002ae0: 40 00 16 6c call 2008490 <_TOD_Get_uptime> 2002ae4: 90 10 00 10 mov %l0, %o0 _Timespec_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total ); 2002ae8: 92 10 00 10 mov %l0, %o1 2002aec: a2 07 bf d8 add %fp, -40, %l1 2002af0: 11 00 80 90 sethi %hi(0x2024000), %o0 2002af4: 94 10 00 11 mov %l1, %o2 2002af8: 40 00 24 4d call 200bc2c <_Timespec_Subtract> 2002afc: 90 12 23 f4 or %o0, 0x3f4, %o0 } } } #endif (*print)( context, "CPU Usage by thread\n" 2002b00: 90 10 00 18 mov %i0, %o0 2002b04: 13 00 80 66 sethi %hi(0x2019800), %o1 2002b08: 9f c6 40 00 call %i1 2002b0c: 92 12 60 f8 or %o1, 0xf8, %o1 ! 20198f8 2002b10: 03 00 80 90 sethi %hi(0x2024000), %g1 the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 2002b14: ac 07 bf eb add %fp, -21, %l6 } } } #endif (*print)( context, "CPU Usage by thread\n" 2002b18: a6 10 60 44 or %g1, 0x44, %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 ) { 2002b1c: 37 00 80 90 sethi %hi(0x2024000), %i3 struct timespec used; _Timespec_Subtract( 2002b20: 03 00 80 90 sethi %hi(0x2024000), %g1 &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 2002b24: 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( 2002b28: b4 10 61 c8 or %g1, 0x1c8, %i2 &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 2002b2c: b8 07 bf f4 add %fp, -12, %i4 2002b30: 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( 2002b34: a8 07 bf c8 add %fp, -56, %l4 " ID NAME TICKS PERCENT\n" #endif ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 2002b38: ae 04 e0 10 add %l3, 0x10, %l7 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 2002b3c: c2 04 c0 00 ld [ %l3 ], %g1 2002b40: 80 a0 60 00 cmp %g1, 0 2002b44: 22 80 00 3b be,a 2002c30 2002b48: a6 04 e0 04 add %l3, 4, %l3 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 2002b4c: e2 00 60 04 ld [ %g1 + 4 ], %l1 if ( information ) { 2002b50: 80 a4 60 00 cmp %l1, 0 2002b54: 12 80 00 30 bne 2002c14 2002b58: a4 10 20 01 mov 1, %l2 for ( i=1 ; i <= information->maximum ; i++ ) { 2002b5c: 10 80 00 35 b 2002c30 <== NOT EXECUTED 2002b60: a6 04 e0 04 add %l3, 4, %l3 <== NOT EXECUTED the_thread = (Thread_Control *)information->local_table[ i ]; 2002b64: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 2002b68: e0 00 40 02 ld [ %g1 + %g2 ], %l0 if ( !the_thread ) 2002b6c: 80 a4 20 00 cmp %l0, 0 2002b70: 02 80 00 29 be 2002c14 2002b74: a4 04 a0 01 inc %l2 continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 2002b78: 40 00 0f a4 call 2006a08 2002b7c: d0 04 20 08 ld [ %l0 + 8 ], %o0 (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 2002b80: d4 04 20 08 ld [ %l0 + 8 ], %o2 2002b84: 90 10 00 18 mov %i0, %o0 2002b88: 13 00 80 66 sethi %hi(0x2019800), %o1 2002b8c: 96 10 00 16 mov %l6, %o3 2002b90: 9f c6 40 00 call %i1 2002b94: 92 12 61 38 or %o1, 0x138, %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; 2002b98: c4 1c 20 90 ldd [ %l0 + 0x90 ], %g2 if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 2002b9c: c2 06 e1 c0 ld [ %i3 + 0x1c0 ], %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; 2002ba0: c4 3f bf d0 std %g2, [ %fp + -48 ] if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 2002ba4: c4 00 60 08 ld [ %g1 + 8 ], %g2 2002ba8: c2 04 20 08 ld [ %l0 + 8 ], %g1 2002bac: 80 a0 80 01 cmp %g2, %g1 2002bb0: 12 80 00 0a bne 2002bd8 2002bb4: 94 10 00 1c mov %i4, %o2 struct timespec used; _Timespec_Subtract( 2002bb8: 90 10 00 1a mov %i2, %o0 2002bbc: 92 07 bf e0 add %fp, -32, %o1 2002bc0: 40 00 24 1b call 200bc2c <_Timespec_Subtract> 2002bc4: 94 10 00 14 mov %l4, %o2 &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); 2002bc8: 90 10 00 15 mov %l5, %o0 2002bcc: 40 00 23 70 call 200b98c <_Timespec_Add_to> 2002bd0: 92 10 00 14 mov %l4, %o1 }; _Timespec_Divide( &ran, &total, &ival, &fval ); 2002bd4: 94 10 00 1c mov %i4, %o2 2002bd8: 96 10 00 1d mov %i5, %o3 2002bdc: 90 10 00 15 mov %l5, %o0 2002be0: 40 00 23 83 call 200b9ec <_Timespec_Divide> 2002be4: 92 07 bf d8 add %fp, -40, %o1 /* * Print the information */ (*print)( context, 2002be8: d0 07 bf d4 ld [ %fp + -44 ], %o0 2002bec: 40 00 54 cd call 2017f20 <.udiv> 2002bf0: 92 10 23 e8 mov 0x3e8, %o1 2002bf4: d4 07 bf d0 ld [ %fp + -48 ], %o2 2002bf8: d8 07 bf f4 ld [ %fp + -12 ], %o4 2002bfc: da 07 bf f0 ld [ %fp + -16 ], %o5 2002c00: 96 10 00 08 mov %o0, %o3 2002c04: 13 00 80 66 sethi %hi(0x2019800), %o1 2002c08: 90 10 00 18 mov %i0, %o0 2002c0c: 9f c6 40 00 call %i1 2002c10: 92 12 61 50 or %o1, 0x150, %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++ ) { 2002c14: 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 ); 2002c18: 94 10 00 16 mov %l6, %o2 2002c1c: 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++ ) { 2002c20: 80 a4 80 01 cmp %l2, %g1 2002c24: 08 bf ff d0 bleu 2002b64 2002c28: 85 2c a0 02 sll %l2, 2, %g2 2002c2c: a6 04 e0 04 add %l3, 4, %l3 " ID NAME TICKS PERCENT\n" #endif ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 2002c30: 80 a4 c0 17 cmp %l3, %l7 2002c34: 32 bf ff c3 bne,a 2002b40 2002c38: c2 04 c0 00 ld [ %l3 ], %g1 } } } #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS (*print)( context, "Time since last CPU Usage reset %" PRId32 2002c3c: d0 07 bf dc ld [ %fp + -36 ], %o0 2002c40: 40 00 54 b8 call 2017f20 <.udiv> 2002c44: 92 10 23 e8 mov 0x3e8, %o1 2002c48: d4 07 bf d8 ld [ %fp + -40 ], %o2 2002c4c: 96 10 00 08 mov %o0, %o3 2002c50: 13 00 80 66 sethi %hi(0x2019800), %o1 2002c54: 90 10 00 18 mov %i0, %o0 2002c58: 9f c6 40 00 call %i1 2002c5c: 92 12 61 68 or %o1, 0x168, %o1 2002c60: 81 c7 e0 08 ret 2002c64: 81 e8 00 00 restore 0200cdd8 : { 0, 0, 0 }, }; static int rtems_deviceio_errno(rtems_status_code code) { 200cdd8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int rc; if ((rc = rtems_assoc_remote_by_local(errno_assoc, (uint32_t ) code))) 200cddc: 11 00 80 5c sethi %hi(0x2017000), %o0 <== NOT EXECUTED 200cde0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 200cde4: 40 00 01 22 call 200d26c <== NOT EXECUTED 200cde8: 90 12 21 94 or %o0, 0x194, %o0 <== NOT EXECUTED 200cdec: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 200cdf0: 02 80 00 05 be 200ce04 <== NOT EXECUTED 200cdf4: 01 00 00 00 nop <== NOT EXECUTED { errno = rc; 200cdf8: 40 00 02 95 call 200d84c <__errno> <== NOT EXECUTED 200cdfc: 01 00 00 00 nop <== NOT EXECUTED 200ce00: f0 22 00 00 st %i0, [ %o0 ] <== NOT EXECUTED return -1; } return -1; } 200ce04: 81 c7 e0 08 ret <== NOT EXECUTED 200ce08: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED 020061c0 : int rtems_error( int error_flag, const char *printf_format, ... ) { 20061c0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list arglist; int chars_written; va_start(arglist, printf_format); 20061c4: 94 07 a0 4c add %fp, 0x4c, %o2 <== NOT EXECUTED int rtems_error( int error_flag, const char *printf_format, ... ) { 20061c8: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 20061cc: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 20061d0: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 20061d4: 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); 20061d8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20061dc: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 20061e0: 7f ff ff 7f call 2005fdc <== NOT EXECUTED 20061e4: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); return chars_written; } 20061e8: 81 c7 e0 08 ret <== NOT EXECUTED 20061ec: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 02005218 : rtems_status_code rtems_event_send( Objects_Id id, rtems_event_set event_in ) { 2005218: 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 ) ) { 200521c: 92 96 20 00 orcc %i0, 0, %o1 2005220: 12 80 00 0a bne 2005248 2005224: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2005228: 03 00 80 5e sethi %hi(0x2017800), %g1 200522c: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> 2005230: 84 00 a0 01 inc %g2 2005234: 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; 2005238: 03 00 80 5f sethi %hi(0x2017c00), %g1 200523c: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2017c90 <_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; 2005240: 10 80 00 18 b 20052a0 2005244: 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); 2005248: 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 ) { 200524c: 80 a0 a0 04 cmp %g2, 4 2005250: 18 80 00 0e bgu 2005288 2005254: 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 :) */ 2005258: 83 32 60 1b srl %o1, 0x1b, %g1 200525c: 80 a0 60 01 cmp %g1, 1 2005260: 12 80 00 0a bne 2005288 2005264: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2005268: 83 28 a0 02 sll %g2, 2, %g1 200526c: 05 00 80 5e sethi %hi(0x2017800), %g2 2005270: 84 10 a3 10 or %g2, 0x310, %g2 ! 2017b10 <_Objects_Information_table> 2005274: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2005278: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 200527c: 80 a2 20 00 cmp %o0, 0 2005280: 12 80 00 05 bne 2005294 2005284: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2005288: b0 10 20 00 clr %i0 200528c: 10 80 00 05 b 20052a0 2005290: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2005294: 40 00 09 1f call 2007710 <_Objects_Get> 2005298: 94 07 bf f4 add %fp, -12, %o2 200529c: 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 ) { 20052a0: c2 07 bf f4 ld [ %fp + -12 ], %g1 20052a4: 80 a0 60 00 cmp %g1, 0 20052a8: 02 80 00 06 be 20052c0 20052ac: 80 a0 60 02 cmp %g1, 2 20052b0: 08 80 00 18 bleu 2005310 20052b4: b0 10 20 04 mov 4, %i0 20052b8: 81 c7 e0 08 ret <== NOT EXECUTED 20052bc: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED rtems_event_set *the_event_set ) { ISR_Level level; _ISR_Disable( level ); 20052c0: 7f ff f2 a0 call 2001d40 20052c4: e0 06 21 70 ld [ %i0 + 0x170 ], %l0 *the_event_set |= the_new_events; 20052c8: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 20052cc: 82 10 40 19 or %g1, %i1, %g1 20052d0: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _ISR_Enable( level ); 20052d4: 7f ff f2 9f call 2001d50 20052d8: 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 ); 20052dc: 40 00 00 15 call 2005330 <_Event_Surrender> 20052e0: 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 ) 20052e4: 05 00 80 5e sethi %hi(0x2017800), %g2 20052e8: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 20052ec: b0 10 20 00 clr %i0 20052f0: 82 00 7f ff add %g1, -1, %g1 20052f4: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 20052f8: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 20052fc: 80 a0 60 00 cmp %g1, 0 2005300: 12 80 00 04 bne 2005310 2005304: 01 00 00 00 nop _Thread_Dispatch(); 2005308: 40 00 0e 07 call 2008b24 <_Thread_Dispatch> 200530c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005310: 81 c7 e0 08 ret 2005314: 81 e8 00 00 restore 0200ac18 : rtems_status_code rtems_extension_create( rtems_name name, rtems_extensions_table *extension_table, Objects_Id *id ) { 200ac18: 9d e3 bf 98 save %sp, -104, %sp Extension_Control *the_extension; if ( !rtems_is_name_valid( name ) ) 200ac1c: a4 96 20 00 orcc %i0, 0, %l2 200ac20: 02 80 00 0e be 200ac58 200ac24: b0 10 20 03 mov 3, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200ac28: 05 00 80 99 sethi %hi(0x2026400), %g2 200ac2c: c2 00 a0 80 ld [ %g2 + 0x80 ], %g1 ! 2026480 <_Thread_Dispatch_disable_level> 200ac30: 82 00 60 01 inc %g1 200ac34: c2 20 a0 80 st %g1, [ %g2 + 0x80 ] * the inactive chain of free extension control blocks. */ RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void ) { return (Extension_Control *) _Objects_Allocate( &_Extension_Information ); 200ac38: 23 00 80 99 sethi %hi(0x2026400), %l1 200ac3c: 40 00 03 87 call 200ba58 <_Objects_Allocate> 200ac40: 90 14 63 1c or %l1, 0x31c, %o0 ! 202671c <_Extension_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_extension = _Extension_Allocate(); if ( !the_extension ) { 200ac44: a0 92 20 00 orcc %o0, 0, %l0 200ac48: 12 80 00 06 bne 200ac60 200ac4c: 90 04 20 10 add %l0, 0x10, %o0 _Thread_Enable_dispatch(); 200ac50: 7f ff ff e5 call 200abe4 <_Thread_Enable_dispatch> <== NOT EXECUTED 200ac54: b0 10 20 05 mov 5, %i0 <== NOT EXECUTED 200ac58: 81 c7 e0 08 ret <== NOT EXECUTED 200ac5c: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_TOO_MANY; } _User_extensions_Add_set( &the_extension->Extension, extension_table ); 200ac60: 40 00 0e 48 call 200e580 <_User_extensions_Add_set> 200ac64: 92 10 00 19 mov %i1, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200ac68: 90 14 63 1c or %l1, 0x31c, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 200ac6c: c2 04 20 08 ld [ %l0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200ac70: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 200ac74: 05 00 00 3f sethi %hi(0xfc00), %g2 200ac78: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 200ac7c: 82 08 40 02 and %g1, %g2, %g1 200ac80: 80 a0 40 03 cmp %g1, %g3 200ac84: 38 80 00 06 bgu,a 200ac9c 200ac88: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 200ac8c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 200ac90: 83 28 60 02 sll %g1, 2, %g1 200ac94: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Extension_Information, &the_extension->Object, (Objects_Name) name ); *id = the_extension->Object.id; 200ac98: 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; 200ac9c: e4 24 20 0c st %l2, [ %l0 + 0xc ] 200aca0: c2 26 80 00 st %g1, [ %i2 ] _Thread_Enable_dispatch(); 200aca4: 7f ff ff d0 call 200abe4 <_Thread_Enable_dispatch> 200aca8: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 200acac: 81 c7 e0 08 ret 200acb0: 81 e8 00 00 restore 0200acb4 : */ rtems_status_code rtems_extension_delete( Objects_Id id ) { 200acb4: 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 *) 200acb8: 21 00 80 99 sethi %hi(0x2026400), %l0 <== NOT EXECUTED 200acbc: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 200acc0: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 200acc4: 40 00 04 a9 call 200bf68 <_Objects_Get> <== NOT EXECUTED 200acc8: 90 14 23 1c or %l0, 0x31c, %o0 <== NOT EXECUTED Extension_Control *the_extension; Objects_Locations location; the_extension = _Extension_Get( id, &location ); switch ( location ) { 200accc: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 200acd0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200acd4: 02 80 00 07 be 200acf0 <== NOT EXECUTED 200acd8: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 200acdc: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 200ace0: 08 80 00 20 bleu 200ad60 <== NOT EXECUTED 200ace4: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 200ace8: 81 c7 e0 08 ret <== NOT EXECUTED 200acec: 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 ); 200acf0: 40 00 0e 5e call 200e668 <_User_extensions_Remove_set> <== NOT EXECUTED 200acf4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200acf8: 90 14 23 1c or %l0, 0x31c, %o0 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 200acfc: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200ad00: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 <== NOT EXECUTED 200ad04: 05 00 00 3f sethi %hi(0xfc00), %g2 <== NOT EXECUTED 200ad08: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff <== NOT EXECUTED 200ad0c: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 200ad10: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 200ad14: 38 80 00 06 bgu,a 200ad2c <== NOT EXECUTED 200ad18: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 200ad1c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 <== NOT EXECUTED 200ad20: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 200ad24: 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; 200ad28: 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 ); 200ad2c: 40 00 04 4d call 200be60 <_Objects_Free> <== NOT EXECUTED 200ad30: 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 ) 200ad34: 03 00 80 99 sethi %hi(0x2026400), %g1 <== NOT EXECUTED 200ad38: c4 00 60 80 ld [ %g1 + 0x80 ], %g2 ! 2026480 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200ad3c: b0 10 20 00 clr %i0 <== NOT EXECUTED 200ad40: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 200ad44: c4 20 60 80 st %g2, [ %g1 + 0x80 ] <== NOT EXECUTED 200ad48: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 <== NOT EXECUTED 200ad4c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200ad50: 12 80 00 04 bne 200ad60 <== NOT EXECUTED 200ad54: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 200ad58: 40 00 09 89 call 200d37c <_Thread_Dispatch> <== NOT EXECUTED 200ad5c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200ad60: 81 c7 e0 08 ret <== NOT EXECUTED 200ad64: 81 e8 00 00 restore <== NOT EXECUTED 02006544 : */ void rtems_fatal_error_occurred( uint32_t the_error ) { 2006544: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, FALSE, the_error ); 2006548: 92 10 20 00 clr %o1 <== NOT EXECUTED 200654c: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 2006550: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2006554: 40 00 02 fe call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2006558: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 200655c: 01 00 00 00 nop 02001f14 : int rtems_filesystem_evaluate_parent( int flags, rtems_filesystem_location_info_t *pathloc ) { 2001f14: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED rtems_filesystem_location_info_t parent; int result; if ( !pathloc ) 2001f18: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 2001f1c: 32 80 00 06 bne,a 2001f34 <== NOT EXECUTED 2001f20: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 2001f24: 40 00 2e 4a call 200d84c <__errno> <== NOT EXECUTED 2001f28: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2001f2c: 10 80 00 09 b 2001f50 <== NOT EXECUTED 2001f30: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED if ( !pathloc->ops->evalpath_h ) 2001f34: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED 2001f38: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001f3c: 12 80 00 08 bne 2001f5c <== NOT EXECUTED 2001f40: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2001f44: 40 00 2e 42 call 200d84c <__errno> <== NOT EXECUTED 2001f48: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2001f4c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2001f50: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2001f54: 81 c7 e0 08 ret <== NOT EXECUTED 2001f58: 81 e8 00 00 restore <== NOT EXECUTED parent = *pathloc; 2001f5c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2001f60: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2001f64: 40 00 30 0f call 200dfa0 <== NOT EXECUTED 2001f68: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED result = (*pathloc->ops->evalpath_h)( "..", flags, &parent ); 2001f6c: c2 06 60 08 ld [ %i1 + 8 ], %g1 <== NOT EXECUTED 2001f70: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2001f74: c2 00 40 00 ld [ %g1 ], %g1 <== NOT EXECUTED 2001f78: 11 00 80 58 sethi %hi(0x2016000), %o0 <== NOT EXECUTED 2001f7c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2001f80: 9f c0 40 00 call %g1 <== NOT EXECUTED 2001f84: 90 12 20 28 or %o0, 0x28, %o0 <== NOT EXECUTED if (result != 0){ 2001f88: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 2001f8c: 02 80 00 04 be 2001f9c <== NOT EXECUTED 2001f90: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2001f94: 81 c7 e0 08 ret <== NOT EXECUTED 2001f98: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED return -1; } rtems_filesystem_freenode( &parent ); 2001f9c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001fa0: 02 80 00 08 be 2001fc0 <== NOT EXECUTED 2001fa4: 01 00 00 00 nop <== NOT EXECUTED 2001fa8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2001fac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001fb0: 02 80 00 04 be 2001fc0 <== NOT EXECUTED 2001fb4: 01 00 00 00 nop <== NOT EXECUTED 2001fb8: 9f c0 40 00 call %g1 <== NOT EXECUTED 2001fbc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 2001fc0: 81 c7 e0 08 ret <== NOT EXECUTED 2001fc4: 81 e8 00 00 restore <== NOT EXECUTED 02001fc8 : const char *pathname, int flags, rtems_filesystem_location_info_t *pathloc, int follow_link ) { 2001fc8: 9d e3 bf 98 save %sp, -104, %sp /* * Verify Input parameters. */ if ( !pathname ) 2001fcc: 80 a6 20 00 cmp %i0, 0 2001fd0: 12 80 00 06 bne 2001fe8 2001fd4: 80 a6 a0 00 cmp %i2, 0 rtems_set_errno_and_return_minus_one( EFAULT ); 2001fd8: 40 00 2e 1d call 200d84c <__errno> <== NOT EXECUTED 2001fdc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2001fe0: 10 80 00 43 b 20020ec <== NOT EXECUTED 2001fe4: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED if ( !pathloc ) 2001fe8: 32 80 00 06 bne,a 2002000 2001fec: c2 4e 00 00 ldsb [ %i0 ], %g1 rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 2001ff0: 40 00 2e 17 call 200d84c <__errno> <== NOT EXECUTED 2001ff4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2001ff8: 10 80 00 3d b 20020ec <== NOT EXECUTED 2001ffc: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED /* * Evaluate the path using the optable evalpath. */ rtems_filesystem_get_start_loc( pathname, &i, pathloc ); 2002000: 80 a0 60 2f cmp %g1, 0x2f 2002004: 02 80 00 06 be 200201c 2002008: 80 a0 60 5c cmp %g1, 0x5c 200200c: 02 80 00 04 be 200201c <== NOT EXECUTED 2002010: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2002014: 12 80 00 0a bne 200203c <== NOT EXECUTED 2002018: 03 00 80 5c sethi %hi(0x2017000), %g1 <== NOT EXECUTED 200201c: 03 00 80 5c sethi %hi(0x2017000), %g1 2002020: d2 00 60 e8 ld [ %g1 + 0xe8 ], %o1 ! 20170e8 2002024: 90 10 00 1a mov %i2, %o0 2002028: 92 02 60 14 add %o1, 0x14, %o1 200202c: 40 00 2f dd call 200dfa0 2002030: 94 10 20 10 mov 0x10, %o2 2002034: 10 80 00 08 b 2002054 2002038: 84 10 20 01 mov 1, %g2 200203c: d2 00 60 e8 ld [ %g1 + 0xe8 ], %o1 <== NOT EXECUTED 2002040: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 2002044: 92 02 60 04 add %o1, 4, %o1 <== NOT EXECUTED 2002048: 40 00 2f d6 call 200dfa0 <== NOT EXECUTED 200204c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2002050: 84 10 20 00 clr %g2 <== NOT EXECUTED if ( !pathloc->ops->evalpath_h ) 2002054: c2 06 a0 08 ld [ %i2 + 8 ], %g1 2002058: c2 00 40 00 ld [ %g1 ], %g1 200205c: 80 a0 60 00 cmp %g1, 0 2002060: 02 80 00 20 be 20020e0 2002064: 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 ); 2002068: 92 10 00 19 mov %i1, %o1 200206c: 9f c0 40 00 call %g1 2002070: 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 ) { 2002074: b0 92 20 00 orcc %o0, 0, %i0 2002078: 12 80 00 1e bne 20020f0 200207c: 80 a6 e0 00 cmp %i3, 0 2002080: 02 80 00 21 be 2002104 2002084: 01 00 00 00 nop if ( !pathloc->ops->node_type_h ){ 2002088: c2 06 a0 08 ld [ %i2 + 8 ], %g1 200208c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 2002090: 80 a0 a0 00 cmp %g2, 0 2002094: 22 80 00 0e be,a 20020cc 2002098: 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 ); 200209c: 9f c0 80 00 call %g2 20020a0: 90 10 00 1a mov %i2, %o0 if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || 20020a4: 90 02 3f fd add %o0, -3, %o0 20020a8: 80 a2 20 01 cmp %o0, 1 20020ac: 18 80 00 16 bgu 2002104 20020b0: 01 00 00 00 nop ( type == RTEMS_FILESYSTEM_SYM_LINK ) ) { if ( !pathloc->ops->eval_link_h ){ 20020b4: c2 06 a0 08 ld [ %i2 + 8 ], %g1 <== NOT EXECUTED 20020b8: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED 20020bc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 20020c0: 12 80 00 0e bne 20020f8 <== NOT EXECUTED 20020c4: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_filesystem_freenode( pathloc ); 20020c8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 20020cc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20020d0: 02 80 00 04 be 20020e0 <== NOT EXECUTED 20020d4: 01 00 00 00 nop <== NOT EXECUTED 20020d8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20020dc: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 20020e0: 40 00 2d db call 200d84c <__errno> <== NOT EXECUTED 20020e4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20020e8: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 20020ec: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 20020f0: 81 c7 e0 08 ret 20020f4: 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 ); 20020f8: 9f c0 80 00 call %g2 <== NOT EXECUTED 20020fc: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2002100: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } } return result; } 2002104: 81 c7 e0 08 ret 2002108: 81 e8 00 00 restore 0200b634 : * configuration is a single instantiation of the IMFS or miniIMFS with * a single "/dev" directory in it. */ void rtems_filesystem_initialize( void ) { 200b634: 9d e3 bf 80 save %sp, -128, %sp /* * Set the default umask to "022". */ rtems_filesystem_umask = 022; 200b638: 25 00 80 5c sethi %hi(0x2017000), %l2 200b63c: c4 04 a0 e8 ld [ %l2 + 0xe8 ], %g2 ! 20170e8 200b640: 82 10 20 12 mov 0x12, %g1 init_fs_mount_table(); 200b644: 40 00 01 89 call 200bc68 200b648: c2 30 a0 24 sth %g1, [ %g2 + 0x24 ] /* * mount the first filesystem. */ if ( rtems_filesystem_mount_table_size == 0 ) 200b64c: 03 00 80 5a sethi %hi(0x2016800), %g1 200b650: c2 00 62 e8 ld [ %g1 + 0x2e8 ], %g1 ! 2016ae8 200b654: 80 a0 60 00 cmp %g1, 0 200b658: 12 80 00 06 bne 200b670 200b65c: 03 00 80 5a sethi %hi(0x2016800), %g1 rtems_fatal_error_occurred( 0xABCD0001 ); 200b660: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 200b664: 7f ff eb b8 call 2006544 <== NOT EXECUTED 200b668: 90 12 20 01 or %o0, 1, %o0 ! abcd0001 <== NOT EXECUTED mt = &rtems_filesystem_mount_table[0]; 200b66c: 03 00 80 5a sethi %hi(0x2016800), %g1 <== NOT EXECUTED 200b670: c2 00 62 e4 ld [ %g1 + 0x2e4 ], %g1 ! 2016ae4 status = mount( 200b674: 90 07 bf f4 add %fp, -12, %o0 200b678: d8 00 60 0c ld [ %g1 + 0xc ], %o4 200b67c: d2 00 40 00 ld [ %g1 ], %o1 200b680: d4 00 60 04 ld [ %g1 + 4 ], %o2 200b684: 40 00 01 81 call 200bc88 200b688: d6 00 60 08 ld [ %g1 + 8 ], %o3 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) 200b68c: 80 a2 3f ff cmp %o0, -1 200b690: 32 80 00 06 bne,a 200b6a8 200b694: d0 04 a0 e8 ld [ %l2 + 0xe8 ], %o0 rtems_fatal_error_occurred( 0xABCD0002 ); 200b698: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 200b69c: 7f ff eb aa call 2006544 <== NOT EXECUTED 200b6a0: 90 12 20 02 or %o0, 2, %o0 ! abcd0002 <== NOT EXECUTED rtems_filesystem_link_counts = 0; 200b6a4: d0 04 a0 e8 ld [ %l2 + 0xe8 ], %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; 200b6a8: 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; 200b6ac: 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; 200b6b0: 92 02 60 18 add %o1, 0x18, %o1 200b6b4: 94 10 20 10 mov 0x10, %o2 200b6b8: 40 00 0a 3a call 200dfa0 200b6bc: 90 02 20 14 add %o0, 0x14, %o0 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 200b6c0: a0 07 bf e4 add %fp, -28, %l0 200b6c4: 96 10 20 00 clr %o3 200b6c8: 23 00 80 58 sethi %hi(0x2016000), %l1 200b6cc: 92 10 20 00 clr %o1 200b6d0: 94 10 00 10 mov %l0, %o2 200b6d4: 7f ff da 3d call 2001fc8 200b6d8: 90 14 62 a0 or %l1, 0x2a0, %o0 rtems_filesystem_root = loc; 200b6dc: d0 04 a0 e8 ld [ %l2 + 0xe8 ], %o0 200b6e0: 92 10 00 10 mov %l0, %o1 200b6e4: 94 10 20 10 mov 0x10, %o2 200b6e8: 40 00 0a 2e call 200dfa0 200b6ec: 90 02 20 14 add %o0, 0x14, %o0 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 200b6f0: 96 10 20 00 clr %o3 200b6f4: 92 10 20 00 clr %o1 200b6f8: 94 10 00 10 mov %l0, %o2 200b6fc: 7f ff da 33 call 2001fc8 200b700: 90 14 62 a0 or %l1, 0x2a0, %o0 rtems_filesystem_current = loc; 200b704: d0 04 a0 e8 ld [ %l2 + 0xe8 ], %o0 200b708: 92 10 00 10 mov %l0, %o1 200b70c: 94 10 20 10 mov 0x10, %o2 200b710: 40 00 0a 24 call 200dfa0 200b714: 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); 200b718: 92 10 21 ff mov 0x1ff, %o1 200b71c: 11 00 80 58 sethi %hi(0x2016000), %o0 200b720: 40 00 01 48 call 200bc40 200b724: 90 12 22 a8 or %o0, 0x2a8, %o0 ! 20162a8 <_CPU_Trap_slot_template+0x80> if ( status != 0 ) 200b728: 80 a2 20 00 cmp %o0, 0 200b72c: 02 80 00 04 be 200b73c 200b730: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 rtems_fatal_error_occurred( 0xABCD0003 ); 200b734: 7f ff eb 84 call 2006544 <== NOT EXECUTED 200b738: 90 12 20 03 or %o0, 3, %o0 ! abcd0003 <== NOT EXECUTED 200b73c: 81 c7 e0 08 ret 200b740: 81 e8 00 00 restore 02006560 : #include const char *rtems_get_version_string(void) { return _RTEMS_version; } 2006560: 11 00 80 5a sethi %hi(0x2016800), %o0 <== NOT EXECUTED 2006564: 81 c3 e0 08 retl <== NOT EXECUTED 2006568: 90 12 22 68 or %o0, 0x268, %o0 ! 2016a68 <_RTEMS_version> <== NOT EXECUTED 02006308 : rtems_interrupt_level rtems_initialize_executive_early( rtems_configuration_table *configuration_table, rtems_cpu_table *cpu_table ) { 2006308: 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 ); 200630c: 7f ff ee 8d call 2001d40 2006310: 01 00 00 00 nop 2006314: a4 10 00 08 mov %o0, %l2 if ( configuration_table == NULL ) 2006318: 80 a6 20 00 cmp %i0, 0 200631c: 12 80 00 07 bne 2006338 2006320: 03 00 80 5f sethi %hi(0x2017c00), %g1 _Internal_error_Occurred( 2006324: 90 10 20 00 clr %o0 <== NOT EXECUTED 2006328: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 200632c: 40 00 03 88 call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 2006330: 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; 2006334: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED 2006338: c0 20 61 90 clr [ %g1 + 0x190 ] ! 2017d90 <_System_state_Current> _System_state_Is_multiprocessing = is_multiprocessing; 200633c: 03 00 80 5f sethi %hi(0x2017c00), %g1 /* * Grab our own copy of the user's CPU table. */ _CPU_Table = *cpu_table; 2006340: 94 10 20 28 mov 0x28, %o2 2006344: 92 10 00 19 mov %i1, %o1 2006348: c0 20 60 bc clr [ %g1 + 0xbc ] 200634c: 11 00 80 5e sethi %hi(0x2017800), %o0 2006350: 40 00 1f 14 call 200dfa0 2006354: 90 12 23 c4 or %o0, 0x3c4, %o0 ! 2017bc4 <_CPU_Table> /* * Provided just for user convenience. */ _Configuration_Table = configuration_table; 2006358: 03 00 80 5f sethi %hi(0x2017c00), %g1 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_NO_CPU_TABLE ); _CPU_Initialize( cpu_table, _Thread_Dispatch ); 200635c: 90 10 00 19 mov %i1, %o0 2006360: 13 00 80 22 sethi %hi(0x2008800), %o1 2006364: 92 12 63 24 or %o1, 0x324, %o1 ! 2008b24 <_Thread_Dispatch> 2006368: 40 00 11 6c call 200a918 <_CPU_Initialize> 200636c: f0 20 60 74 st %i0, [ %g1 + 0x74 ] /* * Do this as early as possible to insure no debugging output * is even attempted to be printed. */ _Debug_Manager_initialization(); 2006370: 40 00 18 04 call 200c380 <_Debug_Manager_initialization> 2006374: 01 00 00 00 nop _API_extensions_Initialization(); 2006378: 40 00 00 cb call 20066a4 <_API_extensions_Initialization> 200637c: 01 00 00 00 nop _Thread_Dispatch_initialization(); _Workspace_Handler_initialization( 2006380: d2 06 20 04 ld [ %i0 + 4 ], %o1 2006384: 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; 2006388: 84 10 20 01 mov 1, %g2 200638c: 03 00 80 5e sethi %hi(0x2017800), %g1 2006390: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] ! 2017bb0 <_Thread_Dispatch_disable_level> 2006394: 40 00 0f ac call 200a244 <_Workspace_Handler_initialization> 2006398: 23 00 80 5f sethi %hi(0x2017c00), %l1 (void *)configuration_table->work_space_start, configuration_table->work_space_size ); _User_extensions_Handler_initialization( 200639c: d0 06 20 20 ld [ %i0 + 0x20 ], %o0 20063a0: 40 00 0e 4c call 2009cd0 <_User_extensions_Handler_initialization> 20063a4: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 configuration_table->number_of_initial_extensions, configuration_table->User_extension_table ); _ISR_Handler_initialization(); 20063a8: 40 00 03 79 call 200718c <_ISR_Handler_initialization> 20063ac: a0 07 bf e8 add %fp, -24, %l0 _Objects_Handler_initialization( 20063b0: 90 10 20 01 mov 1, %o0 20063b4: 92 10 20 01 mov 1, %o1 20063b8: 40 00 05 6f call 2007974 <_Objects_Handler_initialization> 20063bc: 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; 20063c0: 05 00 80 5e sethi %hi(0x2017800), %g2 /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 20063c4: 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; 20063c8: 03 00 80 5e sethi %hi(0x2017800), %g1 20063cc: 82 10 63 f0 or %g1, 0x3f0, %g1 ! 2017bf0 <_Internal_Objects> /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 20063d0: 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; 20063d4: c2 20 a3 14 st %g1, [ %g2 + 0x314 ] /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 20063d8: 98 10 20 74 mov 0x74, %o4 20063dc: 9a 10 20 00 clr %o5 20063e0: 90 14 60 c0 or %l1, 0xc0, %o0 20063e4: 92 10 20 01 mov 1, %o1 20063e8: 40 00 04 ef call 20077a4 <_Objects_Initialize_information> 20063ec: 94 10 20 02 mov 2, %o2 _API_Mutex_Allocate( _RTEMS_Allocator_Mutex ); 20063f0: 94 10 20 10 mov 0x10, %o2 20063f4: 13 00 80 58 sethi %hi(0x2016000), %o1 20063f8: 90 10 00 10 mov %l0, %o0 20063fc: 40 00 1e e9 call 200dfa0 2006400: 92 12 62 10 or %o1, 0x210, %o1 2006404: 40 00 03 7f call 2007200 <_Objects_Allocate> 2006408: 90 14 60 c0 or %l1, 0xc0, %o0 200640c: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006410: 84 10 00 08 mov %o0, %g2 2006414: 92 10 00 10 mov %l0, %o1 2006418: c4 20 60 88 st %g2, [ %g1 + 0x88 ] 200641c: 90 02 20 10 add %o0, 0x10, %o0 2006420: 40 00 01 03 call 200682c <_CORE_mutex_Initialize> 2006424: 94 10 20 01 mov 1, %o2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; 2006428: 03 00 80 5f sethi %hi(0x2017c00), %g1 200642c: 84 10 20 00 clr %g2 2006430: c0 30 60 84 clrh [ %g1 + 0x84 ] for ( index=0 ; index <16 ; index++ ) _Priority_Bit_map[ index ] = 0; 2006434: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006438: 82 10 61 10 or %g1, 0x110, %g1 ! 2017d10 <_Priority_Bit_map> 200643c: c0 30 80 01 clrh [ %g2 + %g1 ] 2006440: 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++ ) 2006444: 80 a0 a0 20 cmp %g2, 0x20 2006448: 32 bf ff fe bne,a 2006440 200644c: c0 30 80 01 clrh [ %g2 + %g1 ] _Priority_Handler_initialization(); _Watchdog_Handler_initialization(); 2006450: 40 00 0f 0b call 200a07c <_Watchdog_Handler_initialization> 2006454: 01 00 00 00 nop _TOD_Handler_initialization( configuration_table->microseconds_per_tick ); 2006458: 40 00 01 e1 call 2006bdc <_TOD_Handler_initialization> 200645c: d0 06 20 0c ld [ %i0 + 0xc ], %o0 _Thread_Handler_initialization( 2006460: d2 06 20 08 ld [ %i0 + 8 ], %o1 2006464: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 2006468: 40 00 0a 9c call 2008ed8 <_Thread_Handler_initialization> 200646c: 94 10 20 00 clr %o2 ); #endif /* MANAGERS */ _RTEMS_API_Initialize( configuration_table ); 2006470: 40 00 00 6e call 2006628 <_RTEMS_API_Initialize> 2006474: 90 10 00 18 mov %i0, %o0 _Extension_Manager_initialization( configuration_table->maximum_extensions ); 2006478: 40 00 00 26 call 2006510 <_Extension_Manager_initialization> 200647c: d0 06 20 08 ld [ %i0 + 8 ], %o0 _IO_Manager_initialization( 2006480: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 2006484: d4 06 20 14 ld [ %i0 + 0x14 ], %o2 2006488: 40 00 00 47 call 20065a4 <_IO_Manager_initialization> 200648c: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 RTEMS_INLINE_ROUTINE void _System_state_Set ( System_state_Codes state ) { _System_state_Current = state; 2006490: 84 10 20 01 mov 1, %g2 2006494: 03 00 80 5f sethi %hi(0x2017c00), %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(); 2006498: 40 00 09 47 call 20089b4 <_Thread_Create_idle> 200649c: c4 20 61 90 st %g2, [ %g1 + 0x190 ] ! 2017d90 <_System_state_Current> /* * Scheduling can properly occur now as long as we avoid dispatching. */ if ( cpu_table->pretasking_hook ) 20064a0: d0 06 40 00 ld [ %i1 ], %o0 20064a4: 80 a2 20 00 cmp %o0, 0 20064a8: 02 80 00 04 be 20064b8 20064ac: 01 00 00 00 nop (*cpu_table->pretasking_hook)(); 20064b0: 9f c2 00 00 call %o0 20064b4: 01 00 00 00 nop /* * Run the API and BSPs predriver hook. */ _API_extensions_Run_predriver(); 20064b8: 40 00 00 9a call 2006720 <_API_extensions_Run_predriver> 20064bc: 01 00 00 00 nop if ( _CPU_Table.predriver_hook ) 20064c0: 03 00 80 5e sethi %hi(0x2017800), %g1 20064c4: a0 10 63 c4 or %g1, 0x3c4, %l0 ! 2017bc4 <_CPU_Table> 20064c8: c2 04 20 04 ld [ %l0 + 4 ], %g1 20064cc: 80 a0 60 00 cmp %g1, 0 20064d0: 02 80 00 04 be 20064e0 20064d4: 01 00 00 00 nop (*_CPU_Table.predriver_hook)(); 20064d8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20064dc: 01 00 00 00 nop <== NOT EXECUTED * Initialize all the device drivers and initialize the MPCI layer. * * NOTE: The MPCI may be build upon a device driver. */ _IO_Initialize_all_drivers(); 20064e0: 40 00 00 23 call 200656c <_IO_Initialize_all_drivers> 20064e4: 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(); 20064e8: 40 00 00 76 call 20066c0 <_API_extensions_Run_postdriver> 20064ec: 01 00 00 00 nop if ( _CPU_Table.postdriver_hook ) 20064f0: c2 04 20 08 ld [ %l0 + 8 ], %g1 20064f4: 80 a0 60 00 cmp %g1, 0 20064f8: 02 80 00 04 be 2006508 20064fc: 01 00 00 00 nop (*_CPU_Table.postdriver_hook)(); 2006500: 9f c0 40 00 call %g1 2006504: 01 00 00 00 nop return bsp_level; } 2006508: 81 c7 e0 08 ret 200650c: 91 e8 00 12 restore %g0, %l2, %o0 02001dac : rtems_status_code rtems_io_lookup_name( const char *name, rtems_driver_name_t *device_info ) { 2001dac: 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 ); 2001db0: 92 10 20 00 clr %o1 <== NOT EXECUTED 2001db4: a4 07 bf e8 add %fp, -24, %l2 <== NOT EXECUTED 2001db8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2001dbc: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED 2001dc0: 40 00 00 82 call 2001fc8 <== NOT EXECUTED 2001dc4: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 2001dc8: 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 ); 2001dcc: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 2001dd0: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 2001dd4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001dd8: 12 80 00 0e bne 2001e10 <== NOT EXECUTED 2001ddc: e2 07 bf e8 ld [ %fp + -24 ], %l1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2001de0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2001de4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001de8: 02 80 00 04 be 2001df8 <== NOT EXECUTED 2001dec: 01 00 00 00 nop <== NOT EXECUTED 2001df0: 9f c0 40 00 call %g1 <== NOT EXECUTED 2001df4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2001df8: 40 00 2e 95 call 200d84c <__errno> <== NOT EXECUTED 2001dfc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2001e00: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2001e04: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2001e08: 81 c7 e0 08 ret <== NOT EXECUTED 2001e0c: 81 e8 00 00 restore <== NOT EXECUTED } node_type = (*loc.ops->node_type_h)( &loc ); 2001e10: 9f c0 40 00 call %g1 <== NOT EXECUTED 2001e14: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { 2001e18: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2001e1c: 12 80 00 05 bne 2001e30 <== NOT EXECUTED 2001e20: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2001e24: 80 a2 20 02 cmp %o0, 2 <== NOT EXECUTED 2001e28: 22 80 00 0d be,a 2001e5c <== NOT EXECUTED 2001e2c: f0 26 40 00 st %i0, [ %i1 ] <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2001e30: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001e34: 02 80 00 1c be 2001ea4 <== NOT EXECUTED 2001e38: 01 00 00 00 nop <== NOT EXECUTED 2001e3c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2001e40: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001e44: 02 80 00 18 be 2001ea4 <== NOT EXECUTED 2001e48: 01 00 00 00 nop <== NOT EXECUTED 2001e4c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2001e50: 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 ); 2001e54: 81 c7 e0 08 ret <== NOT EXECUTED 2001e58: 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 ); 2001e5c: 40 00 33 5a call 200ebc4 <== NOT EXECUTED 2001e60: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2001e64: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED device_info->major = the_jnode->info.device.major; 2001e68: c2 04 60 4c ld [ %l1 + 0x4c ], %g1 <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; rtems_filesystem_freenode( &loc ); 2001e6c: 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; 2001e70: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; 2001e74: c2 04 60 50 ld [ %l1 + 0x50 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2001e78: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2001e7c: 02 80 00 0c be 2001eac <== NOT EXECUTED 2001e80: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED 2001e84: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2001e88: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2001e8c: 02 80 00 08 be 2001eac <== NOT EXECUTED 2001e90: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2001e94: 9f c0 40 00 call %g1 <== NOT EXECUTED 2001e98: b0 10 20 00 clr %i0 <== NOT EXECUTED 2001e9c: 81 c7 e0 08 ret <== NOT EXECUTED 2001ea0: 81 e8 00 00 restore <== NOT EXECUTED 2001ea4: 81 c7 e0 08 ret <== NOT EXECUTED 2001ea8: 91 e8 20 0d restore %g0, 0xd, %o0 <== NOT EXECUTED 2001eac: b0 10 20 00 clr %i0 <== NOT EXECUTED #endif return RTEMS_SUCCESSFUL; } 2001eb0: 81 c7 e0 08 ret <== NOT EXECUTED 2001eb4: 81 e8 00 00 restore <== NOT EXECUTED 02007600 : rtems_status_code rtems_io_register_driver( rtems_device_major_number major, rtems_driver_address_table *driver_table, rtems_device_major_number *registered_major ) { 2007600: 9d e3 bf 98 save %sp, -104, %sp /* * Validate the pointer data and contents passed in */ if ( !driver_table ) 2007604: 92 96 60 00 orcc %i1, 0, %o1 2007608: 02 80 00 40 be 2007708 200760c: 80 a6 a0 00 cmp %i2, 0 return RTEMS_INVALID_ADDRESS; if ( !registered_major ) 2007610: 02 80 00 41 be 2007714 2007614: 82 10 20 09 mov 9, %g1 return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) 2007618: c2 02 40 00 ld [ %o1 ], %g1 200761c: 80 a0 60 00 cmp %g1, 0 2007620: 12 80 00 07 bne 200763c 2007624: 03 00 80 6e sethi %hi(0x201b800), %g1 2007628: c2 02 60 04 ld [ %o1 + 4 ], %g1 200762c: 80 a0 60 00 cmp %g1, 0 2007630: 22 80 00 39 be,a 2007714 2007634: 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 ) 2007638: 03 00 80 6e sethi %hi(0x201b800), %g1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) return RTEMS_INVALID_ADDRESS; *registered_major = 0; 200763c: c0 26 80 00 clr [ %i2 ] /* * The requested major number is higher than what is configured. */ if ( major >= _IO_Number_of_drivers ) 2007640: c8 00 61 dc ld [ %g1 + 0x1dc ], %g4 2007644: 80 a6 00 04 cmp %i0, %g4 2007648: 1a 80 00 33 bcc 2007714 200764c: 82 10 20 0a mov 0xa, %g1 /* * Test for initialise/open being present to indicate the driver slot is * in use. */ if ( major == 0 ) { 2007650: 80 a6 20 00 cmp %i0, 0 2007654: 12 80 00 18 bne 20076b4 2007658: 03 00 80 6e sethi %hi(0x201b800), %g1 boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 200765c: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 201b9e0 <_IO_Driver_address_table> 2007660: 85 29 20 03 sll %g4, 3, %g2 2007664: 83 29 20 05 sll %g4, 5, %g1 2007668: b0 01 3f ff add %g4, -1, %i0 200766c: 82 20 40 02 sub %g1, %g2, %g1 2007670: 82 00 7f e8 add %g1, -24, %g1 2007674: 10 80 00 0b b 20076a0 2007678: 84 00 40 03 add %g1, %g3, %g2 if ( !_IO_Driver_address_table[major].initialization_entry && 200767c: 80 a0 60 00 cmp %g1, 0 2007680: 32 80 00 07 bne,a 200769c 2007684: b0 06 3f ff add %i0, -1, %i0 2007688: c2 00 a0 04 ld [ %g2 + 4 ], %g1 200768c: 80 a0 60 00 cmp %g1, 0 2007690: 02 80 00 09 be 20076b4 2007694: 03 00 80 6e sethi %hi(0x201b800), %g1 * in use. */ if ( major == 0 ) { boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 2007698: b0 06 3f ff add %i0, -1, %i0 <== NOT EXECUTED 200769c: 84 00 bf e8 add %g2, -24, %g2 20076a0: 80 a6 20 00 cmp %i0, 0 20076a4: 32 bf ff f6 bne,a 200767c 20076a8: c2 00 80 00 ld [ %g2 ], %g1 20076ac: 10 80 00 1a b 2007714 20076b0: 82 10 20 05 mov 5, %g1 if ( !found ) return RTEMS_TOO_MANY; } if ( _IO_Driver_address_table[major].initialization_entry || 20076b4: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 20076b8: 85 2e 20 03 sll %i0, 3, %g2 20076bc: 83 2e 20 05 sll %i0, 5, %g1 20076c0: 82 20 40 02 sub %g1, %g2, %g1 20076c4: c4 00 40 03 ld [ %g1 + %g3 ], %g2 20076c8: 80 a0 a0 00 cmp %g2, 0 20076cc: 12 80 00 11 bne 2007710 20076d0: 90 00 40 03 add %g1, %g3, %o0 20076d4: c2 02 20 04 ld [ %o0 + 4 ], %g1 20076d8: 80 a0 60 00 cmp %g1, 0 20076dc: 32 80 00 0e bne,a 2007714 20076e0: 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; 20076e4: 40 00 1d f0 call 200eea4 20076e8: 94 10 20 18 mov 0x18, %o2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 20076ec: 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; 20076f0: f0 26 80 00 st %i0, [ %i2 ] rtems_io_initialize( major, 0, NULL ); 20076f4: 92 10 20 00 clr %o1 20076f8: 7f ff ff 52 call 2007440 20076fc: 94 10 20 00 clr %o2 2007700: 10 80 00 05 b 2007714 2007704: 82 10 20 00 clr %g1 return RTEMS_SUCCESSFUL; 2007708: 10 80 00 03 b 2007714 200770c: 82 10 20 09 mov 9, %g1 2007710: 82 10 20 0c mov 0xc, %g1 } 2007714: 81 c7 e0 08 ret 2007718: 91 e8 00 01 restore %g0, %g1, %o0 02008bd0 : #include #include void rtems_iterate_over_all_threads(rtems_per_thread_routine routine) { 2008bd0: 9d e3 bf 98 save %sp, -104, %sp uint32_t i; uint32_t api_index; Thread_Control *the_thread; Objects_Information *information; if ( !routine ) 2008bd4: 80 a6 20 00 cmp %i0, 0 2008bd8: 02 80 00 1d be 2008c4c 2008bdc: 03 00 80 90 sethi %hi(0x2024000), %g1 return; 2008be0: a4 10 60 44 or %g1, 0x44, %l2 ! 2024044 <_Objects_Information_table+0x4> for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 2008be4: a6 04 a0 10 add %l2, 0x10, %l3 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 2008be8: c2 04 80 00 ld [ %l2 ], %g1 2008bec: 80 a0 60 00 cmp %g1, 0 2008bf0: 22 80 00 14 be,a 2008c40 2008bf4: a4 04 a0 04 add %l2, 4, %l2 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 2008bf8: e0 00 60 04 ld [ %g1 + 4 ], %l0 if ( information ) { 2008bfc: 80 a4 20 00 cmp %l0, 0 2008c00: 12 80 00 0b bne 2008c2c 2008c04: a2 10 20 01 mov 1, %l1 for ( i=1 ; i <= information->maximum ; i++ ) { 2008c08: 10 80 00 0e b 2008c40 <== NOT EXECUTED 2008c0c: a4 04 a0 04 add %l2, 4, %l2 <== NOT EXECUTED the_thread = (Thread_Control *)information->local_table[ i ]; 2008c10: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 2008c14: d0 00 40 08 ld [ %g1 + %o0 ], %o0 if ( !the_thread ) 2008c18: 80 a2 20 00 cmp %o0, 0 2008c1c: 02 80 00 04 be 2008c2c 2008c20: a2 04 60 01 inc %l1 continue; (*routine)(the_thread); 2008c24: 9f c6 00 00 call %i0 2008c28: 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++ ) { 2008c2c: c2 14 20 10 lduh [ %l0 + 0x10 ], %g1 2008c30: 80 a4 40 01 cmp %l1, %g1 2008c34: 08 bf ff f7 bleu 2008c10 2008c38: 91 2c 60 02 sll %l1, 2, %o0 2008c3c: a4 04 a0 04 add %l2, 4, %l2 if ( !routine ) return; for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 2008c40: 80 a4 80 13 cmp %l2, %l3 2008c44: 32 bf ff ea bne,a 2008bec 2008c48: c2 04 80 00 ld [ %l2 ], %g1 2008c4c: 81 c7 e0 08 ret 2008c50: 81 e8 00 00 restore 0200bb34 : * 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 ) { 200bb34: 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 ); 200bb38: 03 00 80 5e sethi %hi(0x2017800), %g1 200bb3c: d0 00 61 e8 ld [ %g1 + 0x1e8 ], %o0 ! 20179e8 200bb40: 92 10 20 00 clr %o1 200bb44: 7f ff e7 84 call 2005954 200bb48: 94 10 20 00 clr %o2 if (rtems_libio_iop_freelist) { 200bb4c: 23 00 80 5e sethi %hi(0x2017800), %l1 200bb50: c4 04 61 e4 ld [ %l1 + 0x1e4 ], %g2 ! 20179e4 200bb54: 80 a0 a0 00 cmp %g2, 0 200bb58: 02 80 00 28 be 200bbf8 200bb5c: b0 10 20 00 clr %i0 rc = rtems_semaphore_create( 200bb60: 03 00 80 5e sethi %hi(0x2017800), %g1 200bb64: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 200bb68: 92 10 20 01 mov 1, %o1 200bb6c: 86 20 80 03 sub %g2, %g3, %g3 200bb70: 87 38 e0 02 sra %g3, 2, %g3 200bb74: 83 28 e0 02 sll %g3, 2, %g1 200bb78: 85 28 e0 06 sll %g3, 6, %g2 200bb7c: 84 20 80 01 sub %g2, %g1, %g2 200bb80: 83 28 a0 06 sll %g2, 6, %g1 200bb84: 82 20 40 02 sub %g1, %g2, %g1 200bb88: 85 28 60 0c sll %g1, 0xc, %g2 200bb8c: 82 00 40 02 add %g1, %g2, %g1 200bb90: 82 00 40 03 add %g1, %g3, %g1 200bb94: 83 28 60 04 sll %g1, 4, %g1 200bb98: 82 20 40 03 sub %g1, %g3, %g1 200bb9c: 83 28 60 02 sll %g1, 2, %g1 200bba0: 86 20 c0 01 sub %g3, %g1, %g3 200bba4: 94 10 20 54 mov 0x54, %o2 200bba8: 96 10 20 00 clr %o3 200bbac: 11 13 10 92 sethi %hi(0x4c424800), %o0 200bbb0: 98 07 bf f4 add %fp, -12, %o4 200bbb4: 90 12 21 00 or %o0, 0x100, %o0 200bbb8: 7f ff e6 8d call 20055ec 200bbbc: 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) 200bbc0: 80 a2 20 00 cmp %o0, 0 200bbc4: 32 80 00 0d bne,a 200bbf8 200bbc8: b0 10 20 00 clr %i0 <== NOT EXECUTED goto failed; iop = rtems_libio_iop_freelist; 200bbcc: f0 04 61 e4 ld [ %l1 + 0x1e4 ], %i0 next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); 200bbd0: 92 10 20 00 clr %o1 &sema ); if (rc != RTEMS_SUCCESSFUL) goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; 200bbd4: e0 06 20 28 ld [ %i0 + 0x28 ], %l0 (void) memset( iop, 0, sizeof(rtems_libio_t) ); 200bbd8: 90 10 00 18 mov %i0, %o0 200bbdc: 40 00 09 1e call 200e054 200bbe0: 94 10 20 34 mov 0x34, %o2 iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; 200bbe4: c2 07 bf f4 ld [ %fp + -12 ], %g1 rtems_libio_iop_freelist = next; 200bbe8: e0 24 61 e4 st %l0, [ %l1 + 0x1e4 ] 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; 200bbec: 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; 200bbf0: 82 10 21 00 mov 0x100, %g1 200bbf4: c2 26 20 0c st %g1, [ %i0 + 0xc ] failed: iop = 0; done: rtems_semaphore_release( rtems_libio_semaphore ); 200bbf8: 03 00 80 5e sethi %hi(0x2017800), %g1 200bbfc: 7f ff e8 1d call 2005c70 200bc00: d0 00 61 e8 ld [ %g1 + 0x1e8 ], %o0 ! 20179e8 return iop; } 200bc04: 81 c7 e0 08 ret 200bc08: 81 e8 00 00 restore 0200210c : * * Called by BSP startup code to initialize the libio subsystem. */ void rtems_libio_init( void ) { 200210c: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code rc; int i; rtems_libio_t *iop; if (rtems_libio_number_iops > 0) 2002110: 23 00 80 5a sethi %hi(0x2016800), %l1 2002114: d0 04 62 cc ld [ %l1 + 0x2cc ], %o0 ! 2016acc 2002118: 80 a2 20 00 cmp %o0, 0 200211c: 22 80 00 1e be,a 2002194 2002120: 11 13 10 92 sethi %hi(0x4c424800), %o0 <== NOT EXECUTED { rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, 2002124: 92 10 20 34 mov 0x34, %o1 2002128: 40 00 00 ec call 20024d8 200212c: 21 00 80 5e sethi %hi(0x2017800), %l0 sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) 2002130: 80 a2 20 00 cmp %o0, 0 2002134: 12 80 00 04 bne 2002144 2002138: d0 24 21 e0 st %o0, [ %l0 + 0x1e0 ] rtems_fatal_error_occurred(RTEMS_NO_MEMORY); 200213c: 40 00 11 02 call 2006544 <== NOT EXECUTED 2002140: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED iop = rtems_libio_iop_freelist = rtems_libio_iops; 2002144: c8 04 21 e0 ld [ %l0 + 0x1e0 ], %g4 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 2002148: c6 04 62 cc ld [ %l1 + 0x2cc ], %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; 200214c: 03 00 80 5e sethi %hi(0x2017800), %g1 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 2002150: 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; 2002154: c8 20 61 e4 st %g4, [ %g1 + 0x1e4 ] for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 2002158: 10 80 00 03 b 2002164 200215c: 82 10 00 04 mov %g4, %g1 iop->data1 = iop + 1; 2002160: c2 20 7f f4 st %g1, [ %g1 + -12 ] 2002164: 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++) 2002168: 80 a0 80 03 cmp %g2, %g3 200216c: 12 bf ff fd bne 2002160 2002170: 82 00 60 34 add %g1, 0x34, %g1 iop->data1 = iop + 1; iop->data1 = NULL; 2002174: 85 28 e0 02 sll %g3, 2, %g2 2002178: 83 28 e0 04 sll %g3, 4, %g1 200217c: 82 20 40 02 sub %g1, %g2, %g1 2002180: 82 00 40 03 add %g1, %g3, %g1 2002184: 83 28 60 02 sll %g1, 2, %g1 2002188: 82 00 40 04 add %g1, %g4, %g1 200218c: c0 20 7f f4 clr [ %g1 + -12 ] /* * Create the binary semaphore used to provide mutual exclusion * on the IOP Table. */ rc = rtems_semaphore_create( 2002190: 11 13 10 92 sethi %hi(0x4c424800), %o0 2002194: 92 10 20 01 mov 1, %o1 2002198: 90 12 21 4f or %o0, 0x14f, %o0 200219c: 94 10 20 54 mov 0x54, %o2 20021a0: 96 10 20 00 clr %o3 20021a4: 19 00 80 5e sethi %hi(0x2017800), %o4 20021a8: 40 00 0d 11 call 20055ec 20021ac: 98 13 21 e8 or %o4, 0x1e8, %o4 ! 20179e8 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_libio_semaphore ); if ( rc != RTEMS_SUCCESSFUL ) 20021b0: 80 a2 20 00 cmp %o0, 0 20021b4: 02 80 00 04 be 20021c4 20021b8: 01 00 00 00 nop rtems_fatal_error_occurred( rc ); 20021bc: 40 00 10 e2 call 2006544 <== NOT EXECUTED 20021c0: 01 00 00 00 nop <== NOT EXECUTED /* * Initialize the base file system infrastructure. */ rtems_filesystem_initialize(); 20021c4: 40 00 25 1c call 200b634 20021c8: 81 e8 00 00 restore 20021cc: 01 00 00 00 nop 0200b9e0 : */ int rtems_libio_is_file_open( void *node_access ) { 200b9e0: 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 ); 200b9e4: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200b9e8: d0 00 61 e8 ld [ %g1 + 0x1e8 ], %o0 ! 20179e8 <== NOT EXECUTED 200b9ec: 92 10 20 00 clr %o1 <== NOT EXECUTED 200b9f0: 7f ff e7 d9 call 2005954 <== NOT EXECUTED 200b9f4: 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++){ 200b9f8: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200b9fc: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 20179e0 <== NOT EXECUTED 200ba00: 03 00 80 5a sethi %hi(0x2016800), %g1 <== NOT EXECUTED 200ba04: c8 00 62 cc ld [ %g1 + 0x2cc ], %g4 ! 2016acc <== NOT EXECUTED 200ba08: 10 80 00 0c b 200ba38 <== NOT EXECUTED 200ba0c: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 200ba10: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 200ba14: 02 80 00 08 be 200ba34 <== NOT EXECUTED 200ba18: 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 ) { 200ba1c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 200ba20: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 200ba24: 12 80 00 05 bne 200ba38 <== NOT EXECUTED 200ba28: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 200ba2c: 10 80 00 07 b 200ba48 <== NOT EXECUTED 200ba30: 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++){ 200ba34: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 200ba38: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 200ba3c: 32 bf ff f5 bne,a 200ba10 <== NOT EXECUTED 200ba40: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 200ba44: b0 10 20 00 clr %i0 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 200ba48: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200ba4c: 7f ff e8 89 call 2005c70 <== NOT EXECUTED 200ba50: d0 00 61 e8 ld [ %g1 + 0x1e8 ], %o0 ! 20179e8 <== NOT EXECUTED return result; } 200ba54: 81 c7 e0 08 ret <== NOT EXECUTED 200ba58: 81 e8 00 00 restore <== NOT EXECUTED 0200ba5c : */ int rtems_libio_is_open_files_in_fs( rtems_filesystem_mount_table_entry_t * fs_mt_entry ) { 200ba5c: 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 ); 200ba60: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200ba64: d0 00 61 e8 ld [ %g1 + 0x1e8 ], %o0 ! 20179e8 <== NOT EXECUTED 200ba68: 92 10 20 00 clr %o1 <== NOT EXECUTED 200ba6c: 7f ff e7 ba call 2005954 <== NOT EXECUTED 200ba70: 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++){ 200ba74: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200ba78: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 20179e0 <== NOT EXECUTED 200ba7c: 03 00 80 5a sethi %hi(0x2016800), %g1 <== NOT EXECUTED 200ba80: c8 00 62 cc ld [ %g1 + 0x2cc ], %g4 ! 2016acc <== NOT EXECUTED 200ba84: 10 80 00 0c b 200bab4 <== NOT EXECUTED 200ba88: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 200ba8c: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 200ba90: 02 80 00 08 be 200bab0 <== NOT EXECUTED 200ba94: 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 ) { 200ba98: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 200ba9c: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 200baa0: 12 80 00 05 bne 200bab4 <== NOT EXECUTED 200baa4: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 200baa8: 10 80 00 07 b 200bac4 <== NOT EXECUTED 200baac: 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++){ 200bab0: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED 200bab4: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 200bab8: 32 bf ff f5 bne,a 200ba8c <== NOT EXECUTED 200babc: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 200bac0: b0 10 20 00 clr %i0 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 200bac4: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 200bac8: 7f ff e8 6a call 2005c70 <== NOT EXECUTED 200bacc: d0 00 61 e8 ld [ %g1 + 0x1e8 ], %o0 ! 20179e8 <== NOT EXECUTED return result; } 200bad0: 81 c7 e0 08 ret <== NOT EXECUTED 200bad4: 81 e8 00 00 restore <== NOT EXECUTED 0201668c : rtems_filesystem_freenode( &env->root_directory); free(env); } } rtems_status_code rtems_libio_set_private_env(void) { 201668c: 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); 2016690: 90 10 20 00 clr %o0 <== NOT EXECUTED 2016694: 92 10 20 00 clr %o1 <== NOT EXECUTED 2016698: 40 00 02 12 call 2016ee0 <== NOT EXECUTED 201669c: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 20166a0: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 20166a4: 12 80 00 19 bne 2016708 <== NOT EXECUTED 20166a8: 25 00 80 d8 sethi %hi(0x2036000), %l2 <== NOT EXECUTED /* Only for the first time a malloc is necesary */ if (rtems_current_user_env==&rtems_global_user_env) { 20166ac: c4 04 a1 a0 ld [ %l2 + 0x1a0 ], %g2 ! 20361a0 <== NOT EXECUTED 20166b0: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 20166b4: 82 10 62 34 or %g1, 0x234, %g1 ! 2038634 <== NOT EXECUTED 20166b8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 20166bc: 12 80 00 15 bne 2016710 <== NOT EXECUTED 20166c0: a2 14 a1 a0 or %l2, 0x1a0, %l1 <== NOT EXECUTED rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t)); 20166c4: 7f ff b6 f4 call 2004294 <== NOT EXECUTED 20166c8: 90 10 20 40 mov 0x40, %o0 <== NOT EXECUTED if (!tmp) 20166cc: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 20166d0: 12 80 00 04 bne 20166e0 <== NOT EXECUTED 20166d4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 20166d8: 81 c7 e0 08 ret <== NOT EXECUTED 20166dc: 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); 20166e0: 90 10 20 00 clr %o0 <== NOT EXECUTED 20166e4: 15 00 80 59 sethi %hi(0x2016400), %o2 <== NOT EXECUTED 20166e8: 40 00 03 16 call 2017340 <== NOT EXECUTED 20166ec: 94 12 a1 68 or %o2, 0x168, %o2 ! 2016568 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 20166f0: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 20166f4: 22 80 00 07 be,a 2016710 <== NOT EXECUTED 20166f8: e0 24 a1 a0 st %l0, [ %l2 + 0x1a0 ] <== NOT EXECUTED /* don't use free_user_env because the pathlocs are * not initialized yet */ free(tmp); 20166fc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016700: 7f ff b6 bd call 20041f4 <== NOT EXECUTED 2016704: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 2016708: 81 c7 e0 08 ret <== NOT EXECUTED 201670c: 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*/ 2016710: 23 00 80 d8 sethi %hi(0x2036000), %l1 <== NOT EXECUTED 2016714: d0 04 61 a0 ld [ %l1 + 0x1a0 ], %o0 ! 20361a0 <== NOT EXECUTED 2016718: 94 10 20 40 mov 0x40, %o2 <== NOT EXECUTED 201671c: 13 00 80 e1 sethi %hi(0x2038400), %o1 <== NOT EXECUTED 2016720: 40 00 31 4e call 2022c58 <== NOT EXECUTED 2016724: 92 12 62 34 or %o1, 0x234, %o1 ! 2038634 <== 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; 2016728: 03 00 80 e0 sethi %hi(0x2038000), %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*/ 201672c: d0 04 61 a0 ld [ %l1 + 0x1a0 ], %o0 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 2016730: d2 00 61 d0 ld [ %g1 + 0x1d0 ], %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*/ 2016734: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 2016738: 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*/ 201673c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 2016740: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2016744: 40 00 31 45 call 2022c58 <== NOT EXECUTED 2016748: 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); 201674c: a0 07 bf e4 add %fp, -28, %l0 <== NOT EXECUTED 2016750: 96 10 20 00 clr %o3 <== NOT EXECUTED 2016754: 25 00 80 c9 sethi %hi(0x2032400), %l2 <== NOT EXECUTED 2016758: 92 10 20 00 clr %o1 <== NOT EXECUTED 201675c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2016760: 7f ff b5 46 call 2003c78 <== NOT EXECUTED 2016764: 90 14 a2 18 or %l2, 0x218, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 2016768: d0 04 61 a0 ld [ %l1 + 0x1a0 ], %o0 <== NOT EXECUTED 201676c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2016770: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 2016774: 40 00 31 39 call 2022c58 <== NOT EXECUTED 2016778: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 201677c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2016780: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2016784: 90 14 a2 18 or %l2, 0x218, %o0 <== NOT EXECUTED 2016788: 7f ff b5 3c call 2003c78 <== NOT EXECUTED 201678c: 96 10 20 00 clr %o3 <== NOT EXECUTED rtems_filesystem_current = loc; 2016790: d0 04 61 a0 ld [ %l1 + 0x1a0 ], %o0 <== NOT EXECUTED 2016794: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2016798: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 201679c: 40 00 31 2f call 2022c58 <== NOT EXECUTED 20167a0: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 20167a4: 81 c7 e0 08 ret <== NOT EXECUTED 20167a8: 81 e8 00 00 restore <== NOT EXECUTED 020165e0 : * 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) { 20165e0: 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); 20165e4: 90 10 20 00 clr %o0 <== NOT EXECUTED 20165e8: 92 10 20 00 clr %o1 <== NOT EXECUTED 20165ec: 40 00 02 3d call 2016ee0 <== NOT EXECUTED 20165f0: 94 07 bf f0 add %fp, -16, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 20165f4: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 20165f8: 12 80 00 23 bne 2016684 <== NOT EXECUTED 20165fc: 25 00 80 d8 sethi %hi(0x2036000), %l2 <== NOT EXECUTED if (rtems_current_user_env->task_id==current_task_id) { 2016600: e0 04 a1 a0 ld [ %l2 + 0x1a0 ], %l0 ! 20361a0 <== NOT EXECUTED 2016604: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2016608: c4 04 00 00 ld [ %l0 ], %g2 <== NOT EXECUTED 201660c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2016610: 12 80 00 09 bne 2016634 <== NOT EXECUTED 2016614: a2 14 a1 a0 or %l2, 0x1a0, %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); 2016618: 40 00 03 a6 call 20174b0 <== NOT EXECUTED 201661c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 2016620: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 2016624: 12 80 00 18 bne 2016684 <== NOT EXECUTED 2016628: 01 00 00 00 nop <== NOT EXECUTED free_user_env(tmp); 201662c: 7f ff ff cf call 2016568 <== NOT EXECUTED 2016630: 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, 2016634: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016638: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 201663c: 40 00 04 09 call 2017660 <== NOT EXECUTED 2016640: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED (void*)&shared_user_env ); if (sc != RTEMS_SUCCESSFUL) 2016644: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 2016648: 12 80 00 0c bne 2016678 <== NOT EXECUTED 201664c: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED goto bailout; sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env); 2016650: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 2016654: 15 00 80 59 sethi %hi(0x2016400), %o2 <== NOT EXECUTED 2016658: 40 00 03 3a call 2017340 <== NOT EXECUTED 201665c: 94 12 a1 68 or %o2, 0x168, %o2 ! 2016568 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 2016660: 86 92 20 00 orcc %o0, 0, %g3 <== NOT EXECUTED 2016664: 12 80 00 05 bne 2016678 <== NOT EXECUTED 2016668: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED goto bailout; /* the current_user_env is the same pointer that remote env */ rtems_current_user_env = shared_user_env; 201666c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 2016670: 10 80 00 05 b 2016684 <== NOT EXECUTED 2016674: c2 24 a1 a0 st %g1, [ %l2 + 0x1a0 ] <== NOT EXECUTED return RTEMS_SUCCESSFUL; bailout: /* fallback to the global env */ rtems_current_user_env = &rtems_global_user_env; 2016678: 05 00 80 d8 sethi %hi(0x2036000), %g2 <== NOT EXECUTED 201667c: 82 10 62 34 or %g1, 0x234, %g1 <== NOT EXECUTED 2016680: c2 20 a1 a0 st %g1, [ %g2 + 0x1a0 ] <== NOT EXECUTED return sc; } 2016684: 81 c7 e0 08 ret <== NOT EXECUTED 2016688: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED 0200b988 : */ uint32_t rtems_libio_to_fcntl_flags( uint32_t flags ) { 200b988: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED uint32_t fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { 200b98c: 82 08 a0 06 and %g2, 6, %g1 <== NOT EXECUTED 200b990: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 200b994: 02 80 00 07 be 200b9b0 <== NOT EXECUTED 200b998: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED fcntl_flags |= O_RDWR; } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 200b99c: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 200b9a0: 12 80 00 04 bne 200b9b0 <== NOT EXECUTED 200b9a4: 90 10 20 00 clr %o0 <== NOT EXECUTED 200b9a8: 83 30 a0 02 srl %g2, 2, %g1 <== NOT EXECUTED 200b9ac: 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 ) { 200b9b0: 80 88 a0 01 btst 1, %g2 <== NOT EXECUTED 200b9b4: 02 80 00 04 be 200b9c4 <== NOT EXECUTED 200b9b8: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED fcntl_flags |= O_NONBLOCK; 200b9bc: 03 00 00 10 sethi %hi(0x4000), %g1 <== NOT EXECUTED 200b9c0: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED } if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) { 200b9c4: 32 80 00 02 bne,a 200b9cc <== NOT EXECUTED 200b9c8: 90 12 20 08 or %o0, 8, %o0 <== NOT EXECUTED fcntl_flags |= O_APPEND; } if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) { 200b9cc: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED 200b9d0: 32 80 00 02 bne,a 200b9d8 <== NOT EXECUTED 200b9d4: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED fcntl_flags |= O_CREAT; } return fcntl_flags; } 200b9d8: 81 c3 e0 08 retl <== NOT EXECUTED 200b9dc: 01 00 00 00 nop 0200e7b8 : Objects_Id id, void *buffer, size_t size, uint32_t *count ) { 200e7b8: 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 ) 200e7bc: 80 a6 60 00 cmp %i1, 0 200e7c0: 02 80 00 26 be 200e858 200e7c4: 80 a6 e0 00 cmp %i3, 0 return RTEMS_INVALID_ADDRESS; if ( !count ) 200e7c8: 02 80 00 24 be 200e858 200e7cc: 11 00 80 c4 sethi %hi(0x2031000), %o0 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 200e7d0: 92 10 00 18 mov %i0, %o1 200e7d4: 90 12 22 d0 or %o0, 0x2d0, %o0 200e7d8: 40 00 18 88 call 20149f8 <_Objects_Get> 200e7dc: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 200e7e0: c2 07 bf f4 ld [ %fp + -12 ], %g1 200e7e4: 80 a0 60 00 cmp %g1, 0 200e7e8: 02 80 00 07 be 200e804 200e7ec: 9a 10 00 1b mov %i3, %o5 200e7f0: 80 a0 60 02 cmp %g1, 2 200e7f4: 08 80 00 1a bleu 200e85c 200e7f8: 90 10 20 04 mov 4, %o0 200e7fc: 10 80 00 18 b 200e85c <== NOT EXECUTED 200e800: 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( 200e804: 92 10 00 19 mov %i1, %o1 200e808: 94 10 00 1a mov %i2, %o2 200e80c: 96 10 00 18 mov %i0, %o3 200e810: 98 10 20 00 clr %o4 200e814: 40 00 13 16 call 201346c <_CORE_message_queue_Broadcast> 200e818: 90 02 20 14 add %o0, 0x14, %o0 200e81c: 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 ) 200e820: 03 00 80 c3 sethi %hi(0x2030c00), %g1 200e824: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2030fb0 <_Thread_Dispatch_disable_level> 200e828: 84 00 bf ff add %g2, -1, %g2 200e82c: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 200e830: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 200e834: 80 a0 60 00 cmp %g1, 0 200e838: 12 80 00 04 bne 200e848 200e83c: 01 00 00 00 nop _Thread_Dispatch(); 200e840: 40 00 1d 73 call 2015e0c <_Thread_Dispatch> 200e844: 01 00 00 00 nop #endif count ); _Thread_Enable_dispatch(); return 200e848: 40 00 01 2e call 200ed00 <_Message_queue_Translate_core_message_queue_return_code> 200e84c: 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 */ } 200e850: 81 c7 e0 08 ret 200e854: 91 e8 00 08 restore %g0, %o0, %o0 #endif count ); _Thread_Enable_dispatch(); return 200e858: 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 */ } 200e85c: b0 10 00 08 mov %o0, %i0 200e860: 81 c7 e0 08 ret 200e864: 81 e8 00 00 restore 0200e89c : uint32_t count, uint32_t max_message_size, rtems_attribute attribute_set, Objects_Id *id ) { 200e89c: 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 ) ) 200e8a0: a2 96 20 00 orcc %i0, 0, %l1 200e8a4: 02 80 00 17 be 200e900 200e8a8: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 200e8ac: 80 a7 20 00 cmp %i4, 0 200e8b0: 02 80 00 14 be 200e900 200e8b4: 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 ) 200e8b8: 80 a6 60 00 cmp %i1, 0 200e8bc: 02 80 00 11 be 200e900 200e8c0: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( max_message_size == 0 ) 200e8c4: 80 a6 a0 00 cmp %i2, 0 200e8c8: 02 80 00 0e be 200e900 200e8cc: b0 10 20 08 mov 8, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200e8d0: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200e8d4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200e8d8: 82 00 60 01 inc %g1 200e8dc: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] #endif #endif _Thread_Disable_dispatch(); /* protects object pointer */ the_message_queue = _Message_queue_Allocate( count, max_message_size ); 200e8e0: 90 10 00 19 mov %i1, %o0 200e8e4: 40 00 2b bc call 20197d4 <_Message_queue_Allocate> 200e8e8: 92 10 00 1a mov %i2, %o1 if ( !the_message_queue ) { 200e8ec: a0 92 20 00 orcc %o0, 0, %l0 200e8f0: 12 80 00 06 bne 200e908 200e8f4: 80 8e e0 04 btst 4, %i3 _Thread_Enable_dispatch(); 200e8f8: 7f ff ff dc call 200e868 <_Thread_Enable_dispatch> 200e8fc: b0 10 20 05 mov 5, %i0 200e900: 81 c7 e0 08 ret 200e904: 81 e8 00 00 restore } #endif the_message_queue->attribute_set = attribute_set; if (_Attributes_Is_priority( attribute_set ) ) 200e908: 02 80 00 05 be 200e91c 200e90c: f6 24 20 10 st %i3, [ %l0 + 0x10 ] the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY; 200e910: 82 10 20 01 mov 1, %g1 200e914: 10 80 00 03 b 200e920 200e918: c2 27 bf f4 st %g1, [ %fp + -12 ] else the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO; 200e91c: c0 27 bf f4 clr [ %fp + -12 ] if ( ! _CORE_message_queue_Initialize( 200e920: 94 10 00 19 mov %i1, %o2 200e924: 96 10 00 1a mov %i2, %o3 200e928: 90 04 20 14 add %l0, 0x14, %o0 200e92c: 40 00 13 1c call 201359c <_CORE_message_queue_Initialize> 200e930: 92 07 bf f4 add %fp, -12, %o1 200e934: 80 a2 20 00 cmp %o0, 0 200e938: 12 80 00 0a bne 200e960 200e93c: 11 00 80 c4 sethi %hi(0x2031000), %o0 RTEMS_INLINE_ROUTINE void _Message_queue_Free ( Message_queue_Control *the_message_queue ) { _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 200e940: 90 12 22 d0 or %o0, 0x2d0, %o0 ! 20312d0 <_Message_queue_Information> <== NOT EXECUTED 200e944: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 200e948: 40 00 17 d6 call 20148a0 <_Objects_Free> <== NOT EXECUTED 200e94c: 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(); 200e950: 7f ff ff c6 call 200e868 <_Thread_Enable_dispatch> <== NOT EXECUTED 200e954: 01 00 00 00 nop <== NOT EXECUTED 200e958: 81 c7 e0 08 ret <== NOT EXECUTED 200e95c: 81 e8 00 00 restore <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200e960: 90 12 22 d0 or %o0, 0x2d0, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 200e964: c2 04 20 08 ld [ %l0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200e968: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 200e96c: 05 00 00 3f sethi %hi(0xfc00), %g2 200e970: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 200e974: 82 08 40 02 and %g1, %g2, %g1 200e978: 80 a0 40 03 cmp %g1, %g3 200e97c: 38 80 00 06 bgu,a 200e994 200e980: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 200e984: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 200e988: 83 28 60 02 sll %g1, 2, %g1 200e98c: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Message_queue_Information, &the_message_queue->Object, (Objects_Name) name ); *id = the_message_queue->Object.id; 200e990: 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; 200e994: e2 24 20 0c st %l1, [ %l0 + 0xc ] 200e998: c2 27 00 00 st %g1, [ %i4 ] name, 0 ); #endif _Thread_Enable_dispatch(); 200e99c: 7f ff ff b3 call 200e868 <_Thread_Enable_dispatch> 200e9a0: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 200e9a4: 81 c7 e0 08 ret 200e9a8: 81 e8 00 00 restore 020126e8 : */ rtems_status_code rtems_message_queue_delete( Objects_Id id ) { 20126e8: 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 *) 20126ec: 21 00 80 9a sethi %hi(0x2026800), %l0 20126f0: 92 10 00 18 mov %i0, %o1 20126f4: 94 07 bf f4 add %fp, -12, %o2 20126f8: 7f ff e6 1c call 200bf68 <_Objects_Get> 20126fc: 90 14 20 1c or %l0, 0x1c, %o0 register Message_queue_Control *the_message_queue; Objects_Locations location; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 2012700: c2 07 bf f4 ld [ %fp + -12 ], %g1 2012704: 80 a0 60 00 cmp %g1, 0 2012708: 02 80 00 07 be 2012724 201270c: b0 10 00 08 mov %o0, %i0 2012710: 80 a0 60 02 cmp %g1, 2 2012714: 08 80 00 22 bleu 201279c 2012718: b0 10 20 04 mov 4, %i0 201271c: 81 c7 e0 08 ret <== NOT EXECUTED 2012720: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2012724: a0 14 20 1c or %l0, 0x1c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 2012728: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 201272c: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 2012730: 05 00 00 3f sethi %hi(0xfc00), %g2 2012734: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 2012738: 82 08 40 02 and %g1, %g2, %g1 201273c: 80 a0 40 03 cmp %g1, %g3 2012740: 18 80 00 05 bgu 2012754 2012744: 94 10 20 05 mov 5, %o2 information->local_table[ index ] = the_object; 2012748: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 201274c: 83 28 60 02 sll %g1, 2, %g1 2012750: c0 20 80 01 clr [ %g2 + %g1 ] case OBJECTS_LOCAL: _Objects_Close( &_Message_queue_Information, &the_message_queue->Object ); _CORE_message_queue_Close( 2012754: 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; 2012758: c0 26 20 0c clr [ %i0 + 0xc ] 201275c: 40 00 01 9e call 2012dd4 <_CORE_message_queue_Close> 2012760: 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 ); 2012764: 90 10 00 10 mov %l0, %o0 2012768: 7f ff e5 be call 200be60 <_Objects_Free> 201276c: 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 ) 2012770: 03 00 80 99 sethi %hi(0x2026400), %g1 2012774: c4 00 60 80 ld [ %g1 + 0x80 ], %g2 ! 2026480 <_Thread_Dispatch_disable_level> 2012778: b0 10 20 00 clr %i0 201277c: 84 00 bf ff add %g2, -1, %g2 2012780: c4 20 60 80 st %g2, [ %g1 + 0x80 ] 2012784: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 2012788: 80 a0 60 00 cmp %g1, 0 201278c: 12 80 00 04 bne 201279c 2012790: 01 00 00 00 nop _Thread_Dispatch(); 2012794: 7f ff ea fa call 200d37c <_Thread_Dispatch> 2012798: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 201279c: 81 c7 e0 08 ret 20127a0: 81 e8 00 00 restore 0200ea68 : rtems_status_code rtems_message_queue_flush( Objects_Id id, uint32_t *count ) { 200ea68: 9d e3 bf 90 save %sp, -112, %sp 200ea6c: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 200ea70: 80 a6 60 00 cmp %i1, 0 200ea74: 02 80 00 1c be 200eae4 200ea78: 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 *) 200ea7c: 11 00 80 c4 sethi %hi(0x2031000), %o0 200ea80: 94 07 bf f4 add %fp, -12, %o2 200ea84: 40 00 17 dd call 20149f8 <_Objects_Get> 200ea88: 90 12 22 d0 or %o0, 0x2d0, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 200ea8c: c2 07 bf f4 ld [ %fp + -12 ], %g1 200ea90: 80 a0 60 00 cmp %g1, 0 200ea94: 02 80 00 06 be 200eaac 200ea98: 80 a0 60 02 cmp %g1, 2 200ea9c: 08 80 00 12 bleu 200eae4 200eaa0: b0 10 20 04 mov 4, %i0 200eaa4: 81 c7 e0 08 ret <== NOT EXECUTED 200eaa8: 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 ); 200eaac: 40 00 12 9d call 2013520 <_CORE_message_queue_Flush> 200eab0: 90 02 20 14 add %o0, 0x14, %o0 200eab4: 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 ) 200eab8: 03 00 80 c3 sethi %hi(0x2030c00), %g1 200eabc: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2030fb0 <_Thread_Dispatch_disable_level> 200eac0: b0 10 20 00 clr %i0 200eac4: 84 00 bf ff add %g2, -1, %g2 200eac8: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 200eacc: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 200ead0: 80 a0 60 00 cmp %g1, 0 200ead4: 12 80 00 04 bne 200eae4 200ead8: 01 00 00 00 nop _Thread_Dispatch(); 200eadc: 40 00 1c cc call 2015e0c <_Thread_Dispatch> 200eae0: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200eae4: 81 c7 e0 08 ret 200eae8: 81 e8 00 00 restore 0200eaec : rtems_status_code rtems_message_queue_get_number_pending( Objects_Id id, uint32_t *count ) { 200eaec: 9d e3 bf 90 save %sp, -112, %sp 200eaf0: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 200eaf4: 80 a6 60 00 cmp %i1, 0 200eaf8: 02 80 00 1b be 200eb64 200eafc: b0 10 20 09 mov 9, %i0 200eb00: 11 00 80 c4 sethi %hi(0x2031000), %o0 200eb04: 94 07 bf f4 add %fp, -12, %o2 200eb08: 40 00 17 bc call 20149f8 <_Objects_Get> 200eb0c: 90 12 22 d0 or %o0, 0x2d0, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 200eb10: c2 07 bf f4 ld [ %fp + -12 ], %g1 200eb14: 80 a0 60 00 cmp %g1, 0 200eb18: 22 80 00 07 be,a 200eb34 200eb1c: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 200eb20: 80 a0 60 02 cmp %g1, 2 200eb24: 08 80 00 10 bleu 200eb64 200eb28: b0 10 20 04 mov 4, %i0 200eb2c: 81 c7 e0 08 ret <== NOT EXECUTED 200eb30: 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; 200eb34: 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 ) 200eb38: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200eb3c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200eb40: b0 10 20 00 clr %i0 200eb44: 82 00 7f ff add %g1, -1, %g1 200eb48: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 200eb4c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 200eb50: 80 a0 60 00 cmp %g1, 0 200eb54: 12 80 00 04 bne 200eb64 200eb58: 01 00 00 00 nop _Thread_Dispatch(); 200eb5c: 40 00 1c ac call 2015e0c <_Thread_Dispatch> 200eb60: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200eb64: 81 c7 e0 08 ret 200eb68: 81 e8 00 00 restore 020127d8 : void *buffer, size_t *size, uint32_t option_set, rtems_interval timeout ) { 20127d8: 9d e3 bf 90 save %sp, -112, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; boolean wait; if ( !buffer ) 20127dc: 80 a6 60 00 cmp %i1, 0 20127e0: 02 80 00 28 be 2012880 20127e4: 92 10 00 18 mov %i0, %o1 return RTEMS_INVALID_ADDRESS; if ( !size ) 20127e8: 80 a6 a0 00 cmp %i2, 0 20127ec: 02 80 00 25 be 2012880 20127f0: 11 00 80 9a sethi %hi(0x2026800), %o0 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 20127f4: 94 07 bf f4 add %fp, -12, %o2 20127f8: 7f ff e5 dc call 200bf68 <_Objects_Get> 20127fc: 90 12 20 1c or %o0, 0x1c, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 2012800: c2 07 bf f4 ld [ %fp + -12 ], %g1 2012804: 80 a0 60 00 cmp %g1, 0 2012808: 22 80 00 07 be,a 2012824 201280c: d2 02 20 08 ld [ %o0 + 8 ], %o1 2012810: 80 a0 60 02 cmp %g1, 2 2012814: 08 80 00 1c bleu 2012884 2012818: 90 10 20 04 mov 4, %o0 201281c: 10 80 00 1a b 2012884 <== NOT EXECUTED 2012820: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED 2012824: 98 0e e0 01 and %i3, 1, %o4 if ( _Options_Is_no_wait( option_set ) ) wait = FALSE; else wait = TRUE; _CORE_message_queue_Seize( 2012828: 94 10 00 19 mov %i1, %o2 201282c: 96 10 00 1a mov %i2, %o3 2012830: 98 1b 20 01 xor %o4, 1, %o4 2012834: 9a 10 00 1c mov %i4, %o5 2012838: 40 00 01 94 call 2012e88 <_CORE_message_queue_Seize> 201283c: 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 ) 2012840: 05 00 80 99 sethi %hi(0x2026400), %g2 2012844: c2 00 a0 80 ld [ %g2 + 0x80 ], %g1 ! 2026480 <_Thread_Dispatch_disable_level> 2012848: 82 00 7f ff add %g1, -1, %g1 201284c: c2 20 a0 80 st %g1, [ %g2 + 0x80 ] 2012850: c2 00 a0 80 ld [ %g2 + 0x80 ], %g1 2012854: 80 a0 60 00 cmp %g1, 0 2012858: 12 80 00 05 bne 201286c 201285c: 03 00 80 99 sethi %hi(0x2026400), %g1 _Thread_Dispatch(); 2012860: 7f ff ea c7 call 200d37c <_Thread_Dispatch> 2012864: 01 00 00 00 nop size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 2012868: 03 00 80 99 sethi %hi(0x2026400), %g1 201286c: c2 00 61 60 ld [ %g1 + 0x160 ], %g1 ! 2026560 <_Thread_Executing> 2012870: 40 00 00 32 call 2012938 <_Message_queue_Translate_core_message_queue_return_code> 2012874: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2012878: 81 c7 e0 08 ret 201287c: 91 e8 00 08 restore %g0, %o0, %o0 size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 2012880: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2012884: b0 10 00 08 mov %o0, %i0 2012888: 81 c7 e0 08 ret 201288c: 81 e8 00 00 restore 02012890 : rtems_status_code rtems_message_queue_send( Objects_Id id, void *buffer, size_t size ) { 2012890: 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 ) 2012894: 80 a6 60 00 cmp %i1, 0 2012898: 02 80 00 26 be 2012930 201289c: 90 10 20 09 mov 9, %o0 20128a0: 11 00 80 9a sethi %hi(0x2026800), %o0 20128a4: 92 10 00 18 mov %i0, %o1 20128a8: 90 12 20 1c or %o0, 0x1c, %o0 20128ac: 7f ff e5 af call 200bf68 <_Objects_Get> 20128b0: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 20128b4: c2 07 bf f4 ld [ %fp + -12 ], %g1 20128b8: 80 a0 60 00 cmp %g1, 0 20128bc: 22 80 00 07 be,a 20128d8 20128c0: 94 10 00 1a mov %i2, %o2 20128c4: 80 a0 60 02 cmp %g1, 2 20128c8: 08 80 00 1a bleu 2012930 20128cc: 90 10 20 04 mov 4, %o0 20128d0: 10 80 00 18 b 2012930 <== NOT EXECUTED 20128d4: 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( 20128d8: c0 23 a0 5c clr [ %sp + 0x5c ] 20128dc: c0 23 a0 60 clr [ %sp + 0x60 ] 20128e0: 92 10 00 19 mov %i1, %o1 20128e4: 96 10 00 18 mov %i0, %o3 20128e8: 98 10 20 00 clr %o4 20128ec: 90 02 20 14 add %o0, 0x14, %o0 20128f0: 1b 1f ff ff sethi %hi(0x7ffffc00), %o5 20128f4: 40 00 01 b2 call 2012fbc <_CORE_message_queue_Submit> 20128f8: 9a 13 63 ff or %o5, 0x3ff, %o5 ! 7fffffff 20128fc: 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 ) 2012900: 05 00 80 99 sethi %hi(0x2026400), %g2 2012904: c2 00 a0 80 ld [ %g2 + 0x80 ], %g1 ! 2026480 <_Thread_Dispatch_disable_level> 2012908: 82 00 7f ff add %g1, -1, %g1 201290c: c2 20 a0 80 st %g1, [ %g2 + 0x80 ] 2012910: c2 00 a0 80 ld [ %g2 + 0x80 ], %g1 2012914: 80 a0 60 00 cmp %g1, 0 2012918: 12 80 00 04 bne 2012928 201291c: 01 00 00 00 nop _Thread_Dispatch(); 2012920: 7f ff ea 97 call 200d37c <_Thread_Dispatch> 2012924: 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); 2012928: 40 00 00 04 call 2012938 <_Message_queue_Translate_core_message_queue_return_code> 201292c: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2012930: 81 c7 e0 08 ret 2012934: 91 e8 00 08 restore %g0, %o0, %o0 02008300 : rtems_status_code rtems_message_queue_urgent( Objects_Id id, void *buffer, size_t size ) { 2008300: 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 ) 2008304: 80 a6 60 00 cmp %i1, 0 2008308: 02 80 00 25 be 200839c 200830c: 90 10 20 09 mov 9, %o0 2008310: 11 00 80 7d sethi %hi(0x201f400), %o0 2008314: 92 10 00 18 mov %i0, %o1 2008318: 90 12 22 b8 or %o0, 0x2b8, %o0 200831c: 40 00 09 dd call 200aa90 <_Objects_Get> 2008320: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 2008324: c2 07 bf f4 ld [ %fp + -12 ], %g1 2008328: 80 a0 60 00 cmp %g1, 0 200832c: 22 80 00 07 be,a 2008348 2008330: 94 10 00 1a mov %i2, %o2 2008334: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 2008338: 08 80 00 19 bleu 200839c <== NOT EXECUTED 200833c: 90 10 20 04 mov 4, %o0 <== NOT EXECUTED 2008340: 10 80 00 17 b 200839c <== NOT EXECUTED 2008344: 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( 2008348: c0 23 a0 5c clr [ %sp + 0x5c ] 200834c: c0 23 a0 60 clr [ %sp + 0x60 ] 2008350: 92 10 00 19 mov %i1, %o1 2008354: 96 10 00 18 mov %i0, %o3 2008358: 98 10 20 00 clr %o4 200835c: 1b 20 00 00 sethi %hi(0x80000000), %o5 2008360: 40 00 05 c7 call 2009a7c <_CORE_message_queue_Submit> 2008364: 90 02 20 14 add %o0, 0x14, %o0 2008368: 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 ) 200836c: 03 00 80 7c sethi %hi(0x201f000), %g1 2008370: c4 00 63 a0 ld [ %g1 + 0x3a0 ], %g2 ! 201f3a0 <_Thread_Dispatch_disable_level> 2008374: 84 00 bf ff add %g2, -1, %g2 2008378: c4 20 63 a0 st %g2, [ %g1 + 0x3a0 ] 200837c: c2 00 63 a0 ld [ %g1 + 0x3a0 ], %g1 2008380: 80 a0 60 00 cmp %g1, 0 2008384: 12 80 00 04 bne 2008394 2008388: 01 00 00 00 nop _Thread_Dispatch(); 200838c: 40 00 0e c6 call 200bea4 <_Thread_Dispatch> 2008390: 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); 2008394: 7f ff ff d1 call 20082d8 <_Message_queue_Translate_core_message_queue_return_code> 2008398: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200839c: 81 c7 e0 08 ret 20083a0: 91 e8 00 08 restore %g0, %o0, %o0 0200618c : void rtems_panic( const char *printf_format, ... ) { 200618c: 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); 2006190: 11 08 00 00 sethi %hi(0x20000000), %o0 <== NOT EXECUTED ... ) { va_list arglist; va_start(arglist, printf_format); 2006194: 94 07 a0 48 add %fp, 0x48, %o2 <== NOT EXECUTED void rtems_panic( const char *printf_format, ... ) { 2006198: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 200619c: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 20061a0: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 20061a4: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 20061a8: 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); 20061ac: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 20061b0: 7f ff ff 8b call 2005fdc <== NOT EXECUTED 20061b4: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); } 20061b8: 81 c7 e0 08 ret <== NOT EXECUTED 20061bc: 81 e8 00 00 restore <== NOT EXECUTED 0200ed5c : uint32_t length, uint32_t buffer_size, rtems_attribute attribute_set, Objects_Id *id ) { 200ed5c: 9d e3 bf 98 save %sp, -104, %sp register Partition_Control *the_partition; if ( !rtems_is_name_valid( name ) ) 200ed60: a6 96 20 00 orcc %i0, 0, %l3 200ed64: 02 80 00 1e be 200eddc 200ed68: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 200ed6c: 80 a6 60 00 cmp %i1, 0 200ed70: 02 80 00 3d be 200ee64 200ed74: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 200ed78: 02 80 00 3b be 200ee64 200ed7c: 80 a6 a0 00 cmp %i2, 0 return RTEMS_INVALID_ADDRESS; if ( length == 0 || buffer_size == 0 || length < buffer_size || 200ed80: 22 80 00 17 be,a 200eddc 200ed84: b0 10 20 08 mov 8, %i0 200ed88: 80 a6 e0 00 cmp %i3, 0 200ed8c: 22 80 00 14 be,a 200eddc 200ed90: b0 10 20 08 mov 8, %i0 200ed94: 80 a6 80 1b cmp %i2, %i3 200ed98: 0a 80 00 35 bcs 200ee6c 200ed9c: 80 8e e0 07 btst 7, %i3 200eda0: 12 80 00 33 bne 200ee6c 200eda4: 80 8e 60 07 btst 7, %i1 !_Partition_Is_buffer_size_aligned( buffer_size ) ) return RTEMS_INVALID_SIZE; if ( !_Addresses_Is_aligned( starting_address ) ) 200eda8: 12 80 00 2f bne 200ee64 200edac: 05 00 80 c3 sethi %hi(0x2030c00), %g2 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200edb0: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200edb4: 82 00 60 01 inc %g1 200edb8: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] * the inactive chain of free partition control blocks. */ RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void ) { return (Partition_Control *) _Objects_Allocate( &_Partition_Information ); 200edbc: 25 00 80 c3 sethi %hi(0x2030c00), %l2 200edc0: 40 00 15 b6 call 2014498 <_Objects_Allocate> 200edc4: 90 14 a1 30 or %l2, 0x130, %o0 ! 2030d30 <_Partition_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_partition = _Partition_Allocate(); if ( !the_partition ) { 200edc8: a2 92 20 00 orcc %o0, 0, %l1 200edcc: 12 80 00 06 bne 200ede4 200edd0: 92 10 00 1b mov %i3, %o1 _Thread_Enable_dispatch(); 200edd4: 7f ff ff d5 call 200ed28 <_Thread_Enable_dispatch> 200edd8: b0 10 20 05 mov 5, %i0 200eddc: 81 c7 e0 08 ret 200ede0: 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; 200ede4: f8 24 60 1c st %i4, [ %l1 + 0x1c ] _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } #endif the_partition->starting_address = starting_address; 200ede8: f2 24 60 10 st %i1, [ %l1 + 0x10 ] the_partition->length = length; 200edec: f4 24 60 14 st %i2, [ %l1 + 0x14 ] the_partition->buffer_size = buffer_size; 200edf0: f6 24 60 18 st %i3, [ %l1 + 0x18 ] the_partition->attribute_set = attribute_set; the_partition->number_of_used_blocks = 0; 200edf4: c0 24 60 20 clr [ %l1 + 0x20 ] _Chain_Initialize( &the_partition->Memory, starting_address, 200edf8: 40 00 52 db call 2023964 <.udiv> 200edfc: 90 10 00 1a mov %i2, %o0 200ee00: a0 04 60 24 add %l1, 0x24, %l0 200ee04: 94 10 00 08 mov %o0, %o2 200ee08: 92 10 00 19 mov %i1, %o1 200ee0c: 90 10 00 10 mov %l0, %o0 200ee10: 40 00 11 89 call 2013434 <_Chain_Initialize> 200ee14: 96 10 00 1b mov %i3, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200ee18: 90 14 a1 30 or %l2, 0x130, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 200ee1c: c4 04 60 08 ld [ %l1 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200ee20: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 200ee24: 03 00 00 3f sethi %hi(0xfc00), %g1 200ee28: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 200ee2c: 82 08 80 01 and %g2, %g1, %g1 200ee30: 80 a0 40 03 cmp %g1, %g3 200ee34: 38 80 00 06 bgu,a 200ee4c 200ee38: c2 04 60 08 ld [ %l1 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 200ee3c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 200ee40: 83 28 60 02 sll %g1, 2, %g1 200ee44: e2 20 80 01 st %l1, [ %g2 + %g1 ] &_Partition_Information, &the_partition->Object, (Objects_Name) name ); *id = the_partition->Object.id; 200ee48: 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; 200ee4c: e6 24 60 0c st %l3, [ %l1 + 0xc ] 200ee50: c2 27 40 00 st %g1, [ %i5 ] name, 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); 200ee54: 7f ff ff b5 call 200ed28 <_Thread_Enable_dispatch> 200ee58: b0 10 20 00 clr %i0 200ee5c: 81 c7 e0 08 ret 200ee60: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 200ee64: 81 c7 e0 08 ret 200ee68: 91 e8 20 09 restore %g0, 9, %o0 200ee6c: b0 10 20 08 mov 8, %i0 } 200ee70: 81 c7 e0 08 ret 200ee74: 81 e8 00 00 restore 0200eeac : */ rtems_status_code rtems_partition_delete( Objects_Id id ) { 200eeac: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 200eeb0: 92 10 00 18 mov %i0, %o1 200eeb4: 94 07 bf f4 add %fp, -12, %o2 200eeb8: 31 00 80 c3 sethi %hi(0x2030c00), %i0 200eebc: 40 00 16 cf call 20149f8 <_Objects_Get> 200eec0: 90 16 21 30 or %i0, 0x130, %o0 ! 2030d30 <_Partition_Information> register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 200eec4: c2 07 bf f4 ld [ %fp + -12 ], %g1 200eec8: 80 a0 60 00 cmp %g1, 0 200eecc: 02 80 00 07 be 200eee8 200eed0: 88 10 00 08 mov %o0, %g4 200eed4: 80 a0 60 02 cmp %g1, 2 200eed8: 08 80 00 18 bleu 200ef38 200eedc: b0 10 20 04 mov 4, %i0 200eee0: 81 c7 e0 08 ret <== NOT EXECUTED 200eee4: 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 ) { 200eee8: c2 02 20 20 ld [ %o0 + 0x20 ], %g1 200eeec: 80 a0 60 00 cmp %g1, 0 200eef0: 12 80 00 14 bne 200ef40 200eef4: 90 16 21 30 or %i0, 0x130, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 200eef8: c2 01 20 08 ld [ %g4 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200eefc: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 200ef00: 05 00 00 3f sethi %hi(0xfc00), %g2 200ef04: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 200ef08: 82 08 40 02 and %g1, %g2, %g1 200ef0c: 80 a0 40 03 cmp %g1, %g3 200ef10: 18 80 00 05 bgu 200ef24 200ef14: 92 10 00 04 mov %g4, %o1 information->local_table[ index ] = the_object; 200ef18: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 200ef1c: 83 28 60 02 sll %g1, 2, %g1 200ef20: 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; 200ef24: c0 21 20 0c clr [ %g4 + 0xc ] RTEMS_INLINE_ROUTINE void _Partition_Free ( Partition_Control *the_partition ) { _Objects_Free( &_Partition_Information, &the_partition->Object ); 200ef28: 40 00 16 5e call 20148a0 <_Objects_Free> 200ef2c: b0 10 20 00 clr %i0 0 /* Not used */ ); } #endif _Thread_Enable_dispatch(); 200ef30: 7f ff ff d2 call 200ee78 <_Thread_Enable_dispatch> 200ef34: 01 00 00 00 nop 200ef38: 81 c7 e0 08 ret 200ef3c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 200ef40: 7f ff ff ce call 200ee78 <_Thread_Enable_dispatch> 200ef44: b0 10 20 0c mov 0xc, %i0 return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200ef48: 81 c7 e0 08 ret 200ef4c: 81 e8 00 00 restore 0200ef84 : rtems_status_code rtems_partition_get_buffer( Objects_Id id, void **buffer ) { 200ef84: 9d e3 bf 90 save %sp, -112, %sp 200ef88: 92 10 00 18 mov %i0, %o1 register Partition_Control *the_partition; Objects_Locations location; void *the_buffer; if ( !buffer ) 200ef8c: 80 a6 60 00 cmp %i1, 0 200ef90: 02 80 00 1a be 200eff8 200ef94: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 200ef98: 11 00 80 c3 sethi %hi(0x2030c00), %o0 200ef9c: 94 07 bf f4 add %fp, -12, %o2 200efa0: 40 00 16 96 call 20149f8 <_Objects_Get> 200efa4: 90 12 21 30 or %o0, 0x130, %o0 return RTEMS_INVALID_ADDRESS; the_partition = _Partition_Get( id, &location ); switch ( location ) { 200efa8: c2 07 bf f4 ld [ %fp + -12 ], %g1 200efac: 80 a0 60 00 cmp %g1, 0 200efb0: 02 80 00 07 be 200efcc 200efb4: b0 10 00 08 mov %o0, %i0 200efb8: 80 a0 60 02 cmp %g1, 2 200efbc: 08 80 00 0f bleu 200eff8 200efc0: b0 10 20 04 mov 4, %i0 200efc4: 81 c7 e0 08 ret <== NOT EXECUTED 200efc8: 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 ); 200efcc: 40 00 11 0a call 20133f4 <_Chain_Get> 200efd0: 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 ) { 200efd4: a0 92 20 00 orcc %o0, 0, %l0 200efd8: 02 80 00 0a be 200f000 200efdc: 01 00 00 00 nop the_partition->number_of_used_blocks += 1; 200efe0: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 200efe4: 82 00 60 01 inc %g1 200efe8: c2 26 20 20 st %g1, [ %i0 + 0x20 ] _Thread_Enable_dispatch(); 200efec: 7f ff ff d9 call 200ef50 <_Thread_Enable_dispatch> 200eff0: b0 10 20 00 clr %i0 *buffer = the_buffer; 200eff4: e0 26 40 00 st %l0, [ %i1 ] 200eff8: 81 c7 e0 08 ret 200effc: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 200f000: 7f ff ff d4 call 200ef50 <_Thread_Enable_dispatch> 200f004: b0 10 20 0d mov 0xd, %i0 return RTEMS_UNSATISFIED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200f008: 81 c7 e0 08 ret 200f00c: 81 e8 00 00 restore 0200f078 : rtems_status_code rtems_partition_return_buffer( Objects_Id id, void *buffer ) { 200f078: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 200f07c: 11 00 80 c3 sethi %hi(0x2030c00), %o0 200f080: 92 10 00 18 mov %i0, %o1 200f084: 90 12 21 30 or %o0, 0x130, %o0 200f088: 40 00 16 5c call 20149f8 <_Objects_Get> 200f08c: 94 07 bf f4 add %fp, -12, %o2 register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 200f090: c2 07 bf f4 ld [ %fp + -12 ], %g1 200f094: 80 a0 60 00 cmp %g1, 0 200f098: 02 80 00 07 be 200f0b4 200f09c: b0 10 00 08 mov %o0, %i0 200f0a0: 80 a0 60 02 cmp %g1, 2 200f0a4: 08 80 00 1a bleu 200f10c 200f0a8: b0 10 20 04 mov 4, %i0 200f0ac: 81 c7 e0 08 ret <== NOT EXECUTED 200f0b0: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED ) { void *starting; void *ending; starting = the_partition->starting_address; 200f0b4: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 ending = _Addresses_Add_offset( starting, the_partition->length ); return ( 200f0b8: 80 a6 40 02 cmp %i1, %g2 200f0bc: 0a 80 00 16 bcs 200f114 200f0c0: 01 00 00 00 nop 200f0c4: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 200f0c8: 82 00 80 01 add %g2, %g1, %g1 200f0cc: 80 a6 40 01 cmp %i1, %g1 200f0d0: 18 80 00 11 bgu 200f114 200f0d4: 01 00 00 00 nop 200f0d8: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 200f0dc: 40 00 52 ce call 2023c14 <.urem> 200f0e0: 90 26 40 02 sub %i1, %g2, %o0 200f0e4: 80 a2 20 00 cmp %o0, 0 200f0e8: 12 80 00 0b bne 200f114 200f0ec: 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 ); 200f0f0: 40 00 10 b5 call 20133c4 <_Chain_Append> 200f0f4: 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; 200f0f8: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 200f0fc: 82 00 7f ff add %g1, -1, %g1 200f100: c2 26 20 20 st %g1, [ %i0 + 0x20 ] _Thread_Enable_dispatch(); 200f104: 7f ff ff d0 call 200f044 <_Thread_Enable_dispatch> 200f108: b0 10 20 00 clr %i0 200f10c: 81 c7 e0 08 ret 200f110: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 200f114: 7f ff ff cc call 200f044 <_Thread_Enable_dispatch> 200f118: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200f11c: 81 c7 e0 08 ret 200f120: 81 e8 00 00 restore 0200df20 : void *internal_start, void *external_start, uint32_t length, Objects_Id *id ) { 200df20: 9d e3 bf 98 save %sp, -104, %sp register Dual_ported_memory_Control *the_port; if ( !rtems_is_name_valid( name) ) 200df24: a2 96 20 00 orcc %i0, 0, %l1 200df28: 02 80 00 15 be 200df7c 200df2c: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 200df30: 80 a7 20 00 cmp %i4, 0 200df34: 02 80 00 29 be 200dfd8 200df38: 80 8e 60 07 btst 7, %i1 return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( internal_start ) || 200df3c: 12 80 00 27 bne 200dfd8 200df40: 80 8e a0 07 btst 7, %i2 200df44: 32 80 00 0e bne,a 200df7c 200df48: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200df4c: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200df50: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200df54: 82 00 60 01 inc %g1 200df58: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] */ RTEMS_INLINE_ROUTINE Dual_ported_memory_Control *_Dual_ported_memory_Allocate ( void ) { return (Dual_ported_memory_Control *) 200df5c: 21 00 80 c3 sethi %hi(0x2030c00), %l0 200df60: 40 00 19 4e call 2014498 <_Objects_Allocate> 200df64: 90 14 20 e4 or %l0, 0xe4, %o0 ! 2030ce4 <_Dual_ported_memory_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_port = _Dual_ported_memory_Allocate(); if ( !the_port ) { 200df68: 80 a2 20 00 cmp %o0, 0 200df6c: 12 80 00 06 bne 200df84 200df70: 88 14 20 e4 or %l0, 0xe4, %g4 _Thread_Enable_dispatch(); 200df74: 7f ff ff de call 200deec <_Thread_Enable_dispatch> 200df78: b0 10 20 05 mov 5, %i0 200df7c: 81 c7 e0 08 ret 200df80: 81 e8 00 00 restore ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 200df84: c4 02 20 08 ld [ %o0 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200df88: 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; 200df8c: 82 06 ff ff add %i3, -1, %g1 if ( !the_port ) { _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } the_port->internal_base = internal_start; 200df90: f2 22 20 10 st %i1, [ %o0 + 0x10 ] the_port->external_base = external_start; the_port->length = length - 1; 200df94: c2 22 20 18 st %g1, [ %o0 + 0x18 ] 200df98: 03 00 00 3f sethi %hi(0xfc00), %g1 200df9c: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 200dfa0: 82 08 80 01 and %g2, %g1, %g1 200dfa4: 80 a0 40 03 cmp %g1, %g3 200dfa8: 18 80 00 05 bgu 200dfbc 200dfac: f4 22 20 14 st %i2, [ %o0 + 0x14 ] information->local_table[ index ] = the_object; 200dfb0: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 200dfb4: 83 28 60 02 sll %g1, 2, %g1 200dfb8: d0 20 80 01 st %o0, [ %g2 + %g1 ] &_Dual_ported_memory_Information, &the_port->Object, (Objects_Name) name ); *id = the_port->Object.id; 200dfbc: 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; 200dfc0: e2 22 20 0c st %l1, [ %o0 + 0xc ] 200dfc4: c2 27 00 00 st %g1, [ %i4 ] _Thread_Enable_dispatch(); 200dfc8: 7f ff ff c9 call 200deec <_Thread_Enable_dispatch> 200dfcc: b0 10 20 00 clr %i0 200dfd0: 81 c7 e0 08 ret 200dfd4: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 200dfd8: b0 10 20 09 mov 9, %i0 } 200dfdc: 81 c7 e0 08 ret 200dfe0: 81 e8 00 00 restore 02006428 : rtems_status_code rtems_rate_monotonic_create( rtems_name name, Objects_Id *id ) { 2006428: 9d e3 bf 98 save %sp, -104, %sp Rate_monotonic_Control *the_period; if ( !rtems_is_name_valid( name ) ) 200642c: a4 96 20 00 orcc %i0, 0, %l2 2006430: 02 80 00 11 be 2006474 2006434: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 2006438: 80 a6 60 00 cmp %i1, 0 200643c: 02 80 00 0e be 2006474 2006440: b0 10 20 09 mov 9, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2006444: 05 00 80 70 sethi %hi(0x201c000), %g2 2006448: c2 00 a2 a0 ld [ %g2 + 0x2a0 ], %g1 ! 201c2a0 <_Thread_Dispatch_disable_level> 200644c: 82 00 60 01 inc %g1 2006450: c2 20 a2 a0 st %g1, [ %g2 + 0x2a0 ] * the inactive chain of free period control blocks. */ RTEMS_INLINE_ROUTINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void ) { return (Rate_monotonic_Control *) 2006454: 23 00 80 70 sethi %hi(0x201c000), %l1 2006458: 40 00 09 b7 call 2008b34 <_Objects_Allocate> 200645c: 90 14 61 04 or %l1, 0x104, %o0 ! 201c104 <_Rate_monotonic_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_period = _Rate_monotonic_Allocate(); if ( !the_period ) { 2006460: a0 92 20 00 orcc %o0, 0, %l0 2006464: 12 80 00 06 bne 200647c 2006468: 03 00 80 70 sethi %hi(0x201c000), %g1 _Thread_Enable_dispatch(); 200646c: 7f ff ff e2 call 20063f4 <_Thread_Enable_dispatch> 2006470: b0 10 20 05 mov 5, %i0 2006474: 81 c7 e0 08 ret 2006478: 81 e8 00 00 restore return RTEMS_TOO_MANY; } the_period->owner = _Thread_Executing; 200647c: c2 00 63 80 ld [ %g1 + 0x380 ], %g1 the_period->state = RATE_MONOTONIC_INACTIVE; 2006480: c0 24 20 38 clr [ %l0 + 0x38 ] if ( !the_period ) { _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } the_period->owner = _Thread_Executing; 2006484: c2 24 20 50 st %g1, [ %l0 + 0x50 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2006488: c0 24 20 18 clr [ %l0 + 0x18 ] the_watchdog->routine = routine; 200648c: c0 24 20 2c clr [ %l0 + 0x2c ] the_watchdog->id = id; 2006490: c0 24 20 30 clr [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 2006494: 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 ); 2006498: 90 04 20 54 add %l0, 0x54, %o0 200649c: 92 10 20 00 clr %o1 20064a0: 40 00 25 ef call 200fc5c 20064a4: 94 10 20 38 mov 0x38, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 20064a8: 90 14 61 04 or %l1, 0x104, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 20064ac: c4 04 20 08 ld [ %l0 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 20064b0: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 20064b4: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 20064b8: 82 10 63 ff or %g1, 0x3ff, %g1 ! 7fffffff 20064bc: c2 24 20 78 st %g1, [ %l0 + 0x78 ] 20064c0: c2 24 20 5c st %g1, [ %l0 + 0x5c ] 20064c4: c2 24 20 60 st %g1, [ %l0 + 0x60 ] 20064c8: c2 24 20 74 st %g1, [ %l0 + 0x74 ] 20064cc: 03 00 00 3f sethi %hi(0xfc00), %g1 20064d0: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 20064d4: 82 08 80 01 and %g2, %g1, %g1 20064d8: 80 a0 40 03 cmp %g1, %g3 20064dc: 38 80 00 06 bgu,a 20064f4 20064e0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 20064e4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 20064e8: 83 28 60 02 sll %g1, 2, %g1 20064ec: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Rate_monotonic_Information, &the_period->Object, (Objects_Name) name ); *id = the_period->Object.id; 20064f0: 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; 20064f4: e4 24 20 0c st %l2, [ %l0 + 0xc ] 20064f8: c2 26 40 00 st %g1, [ %i1 ] _Thread_Enable_dispatch(); 20064fc: 7f ff ff be call 20063f4 <_Thread_Enable_dispatch> 2006500: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 2006504: 81 c7 e0 08 ret 2006508: 81 e8 00 00 restore 0200f2f4 : */ rtems_status_code rtems_rate_monotonic_delete( Objects_Id id ) { 200f2f4: 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 *) 200f2f8: 21 00 80 c3 sethi %hi(0x2030c00), %l0 200f2fc: 92 10 00 18 mov %i0, %o1 200f300: 94 07 bf f4 add %fp, -12, %o2 200f304: 40 00 15 bd call 20149f8 <_Objects_Get> 200f308: 90 14 21 7c or %l0, 0x17c, %o0 Rate_monotonic_Control *the_period; Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 200f30c: c2 07 bf f4 ld [ %fp + -12 ], %g1 200f310: 80 a0 60 00 cmp %g1, 0 200f314: 02 80 00 08 be 200f334 200f318: b0 10 00 08 mov %o0, %i0 200f31c: 82 18 60 02 xor %g1, 2, %g1 200f320: 80 a0 00 01 cmp %g0, %g1 200f324: 82 60 20 00 subx %g0, 0, %g1 200f328: b0 08 60 15 and %g1, 0x15, %i0 200f32c: 81 c7 e0 08 ret 200f330: 91 ee 20 04 restore %i0, 4, %o0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200f334: a0 14 21 7c or %l0, 0x17c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 200f338: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200f33c: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 200f340: 05 00 00 3f sethi %hi(0xfc00), %g2 200f344: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 200f348: 82 08 40 02 and %g1, %g2, %g1 200f34c: 80 a0 40 03 cmp %g1, %g3 200f350: 38 80 00 06 bgu,a 200f368 200f354: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 200f358: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 200f35c: 83 28 60 02 sll %g1, 2, %g1 200f360: 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; 200f364: 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 ); 200f368: 40 00 21 37 call 2017844 <_Watchdog_Remove> 200f36c: 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 ); 200f370: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_INACTIVE; 200f374: c0 26 20 38 clr [ %i0 + 0x38 ] 200f378: 40 00 15 4a call 20148a0 <_Objects_Free> 200f37c: 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 ) 200f380: 03 00 80 c3 sethi %hi(0x2030c00), %g1 200f384: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2030fb0 <_Thread_Dispatch_disable_level> 200f388: b0 10 20 00 clr %i0 200f38c: 84 00 bf ff add %g2, -1, %g2 200f390: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 200f394: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 200f398: 80 a0 60 00 cmp %g1, 0 200f39c: 12 80 00 04 bne 200f3ac 200f3a0: 01 00 00 00 nop _Thread_Dispatch(); 200f3a4: 40 00 1a 9a call 2015e0c <_Thread_Dispatch> 200f3a8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200f3ac: 81 c7 e0 08 ret 200f3b0: 81 e8 00 00 restore 0200dd20 : rtems_status_code rtems_rate_monotonic_get_status( Objects_Id id, rtems_rate_monotonic_period_status *status ) { 200dd20: 9d e3 bf 88 save %sp, -120, %sp 200dd24: 92 10 00 18 mov %i0, %o1 Objects_Locations location; Rate_monotonic_Control *the_period; if ( !status ) 200dd28: 80 a6 60 00 cmp %i1, 0 200dd2c: 02 80 00 36 be 200de04 200dd30: b0 10 20 09 mov 9, %i0 200dd34: 11 00 80 70 sethi %hi(0x201c000), %o0 200dd38: 94 07 bf f4 add %fp, -12, %o2 200dd3c: 7f ff ed 0b call 2009168 <_Objects_Get> 200dd40: 90 12 21 04 or %o0, 0x104, %o0 return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 200dd44: c2 07 bf f4 ld [ %fp + -12 ], %g1 200dd48: 80 a0 60 00 cmp %g1, 0 200dd4c: 02 80 00 08 be 200dd6c 200dd50: b0 10 00 08 mov %o0, %i0 200dd54: 82 18 60 02 xor %g1, 2, %g1 <== NOT EXECUTED 200dd58: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 200dd5c: 82 60 20 00 subx %g0, 0, %g1 <== NOT EXECUTED 200dd60: b0 08 60 15 and %g1, 0x15, %i0 <== NOT EXECUTED 200dd64: 81 c7 e0 08 ret <== NOT EXECUTED 200dd68: 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); 200dd6c: c2 02 20 50 ld [ %o0 + 0x50 ], %g1 200dd70: 80 a0 60 00 cmp %g1, 0 200dd74: 02 80 00 03 be 200dd80 200dd78: 84 10 20 00 clr %g2 200dd7c: c4 00 60 08 ld [ %g1 + 8 ], %g2 status->state = the_period->state; 200dd80: 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); 200dd84: c4 26 40 00 st %g2, [ %i1 ] status->state = the_period->state; if ( status->state == RATE_MONOTONIC_INACTIVE ) { 200dd88: 80 a0 60 00 cmp %g1, 0 200dd8c: 12 80 00 07 bne 200dda8 200dd90: 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; 200dd94: 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; 200dd98: c0 26 60 08 clr [ %i1 + 8 ] <== NOT EXECUTED status->since_last_period.tv_nsec = 0; 200dd9c: 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; 200dda0: 10 80 00 0e b 200ddd8 <== NOT EXECUTED 200dda4: 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 ); 200dda8: a0 07 bf ec add %fp, -20, %l0 200ddac: 7f ff e9 c0 call 20084ac <_TOD_Get_uptime> 200ddb0: 90 10 00 10 mov %l0, %o0 #endif #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS _Timespec_Subtract( 200ddb4: 90 06 20 44 add %i0, 0x44, %o0 200ddb8: 92 10 00 10 mov %l0, %o1 200ddbc: 7f ff f6 a6 call 200b854 <_Timespec_Subtract> 200ddc0: 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( 200ddc4: 11 00 80 70 sethi %hi(0x201c000), %o0 200ddc8: 92 10 00 10 mov %l0, %o1 200ddcc: 94 06 60 10 add %i1, 0x10, %o2 200ddd0: 7f ff f6 a1 call 200b854 <_Timespec_Subtract> 200ddd4: 90 12 23 88 or %o0, 0x388, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 200ddd8: 03 00 80 70 sethi %hi(0x201c000), %g1 200dddc: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 201c2a0 <_Thread_Dispatch_disable_level> 200dde0: b0 10 20 00 clr %i0 200dde4: 84 00 bf ff add %g2, -1, %g2 200dde8: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 200ddec: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 200ddf0: 80 a0 60 00 cmp %g1, 0 200ddf4: 12 80 00 04 bne 200de04 200ddf8: 01 00 00 00 nop _Thread_Dispatch(); 200ddfc: 7f ff f1 e0 call 200a57c <_Thread_Dispatch> 200de00: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200de04: 81 c7 e0 08 ret 200de08: 81 e8 00 00 restore 02006714 : rtems_status_code rtems_rate_monotonic_period( Objects_Id id, rtems_interval length ) { 2006714: 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 *) 2006718: 11 00 80 70 sethi %hi(0x201c000), %o0 200671c: 92 10 00 18 mov %i0, %o1 2006720: 90 12 21 04 or %o0, 0x104, %o0 2006724: 40 00 0a 91 call 2009168 <_Objects_Get> 2006728: 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 ) { 200672c: c2 07 bf f4 ld [ %fp + -12 ], %g1 2006730: 80 a0 60 00 cmp %g1, 0 2006734: 02 80 00 07 be 2006750 2006738: a2 10 00 08 mov %o0, %l1 200673c: 80 a0 60 02 cmp %g1, 2 2006740: 02 80 00 0c be 2006770 2006744: 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; 2006748: 81 c7 e0 08 ret <== NOT EXECUTED 200674c: 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 ) ) { 2006750: 27 00 80 70 sethi %hi(0x201c000), %l3 2006754: c4 02 20 50 ld [ %o0 + 0x50 ], %g2 2006758: c2 04 e3 80 ld [ %l3 + 0x380 ], %g1 200675c: 80 a0 80 01 cmp %g2, %g1 2006760: 02 80 00 06 be 2006778 2006764: 80 a6 60 00 cmp %i1, 0 _Thread_Enable_dispatch(); 2006768: 7f ff ff 7f call 2006564 <_Thread_Enable_dispatch> 200676c: b0 10 20 17 mov 0x17, %i0 2006770: 81 c7 e0 08 ret 2006774: 81 e8 00 00 restore return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { 2006778: 12 80 00 11 bne 20067bc 200677c: 01 00 00 00 nop switch ( the_period->state ) { 2006780: d0 02 20 38 ld [ %o0 + 0x38 ], %o0 2006784: 80 a2 20 02 cmp %o0, 2 2006788: 02 80 00 09 be 20067ac 200678c: b0 10 20 00 clr %i0 2006790: 80 a2 20 04 cmp %o0, 4 2006794: 02 80 00 06 be 20067ac 2006798: b0 10 20 06 mov 6, %i0 200679c: 80 a2 20 00 cmp %o0, 0 20067a0: 02 80 00 03 be 20067ac 20067a4: b0 10 20 0b mov 0xb, %i0 20067a8: 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(); 20067ac: 7f ff ff 6e call 2006564 <_Thread_Enable_dispatch> 20067b0: 01 00 00 00 nop 20067b4: 81 c7 e0 08 ret 20067b8: 81 e8 00 00 restore return( return_value ); } _ISR_Disable( level ); 20067bc: 7f ff f0 43 call 20028c8 20067c0: 01 00 00 00 nop 20067c4: a0 10 00 08 mov %o0, %l0 switch ( the_period->state ) { 20067c8: e4 04 60 38 ld [ %l1 + 0x38 ], %l2 20067cc: 80 a4 a0 02 cmp %l2, 2 20067d0: 02 80 00 29 be 2006874 20067d4: 80 a4 a0 04 cmp %l2, 4 20067d8: 02 80 00 43 be 20068e4 20067dc: 80 a4 a0 00 cmp %l2, 0 20067e0: 32 bf ff e4 bne,a 2006770 20067e4: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED /* * No need to update statistics -- there are not a period active */ _ISR_Enable( level ); 20067e8: 7f ff f0 3c call 20028d8 20067ec: 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 ); 20067f0: 40 00 07 2f call 20084ac <_TOD_Get_uptime> 20067f4: 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; 20067f8: c2 07 bf ec ld [ %fp + -20 ], %g1 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 20067fc: c4 04 e3 80 ld [ %l3 + 0x380 ], %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; 2006800: c2 24 60 44 st %g1, [ %l1 + 0x44 ] 2006804: 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( 2006808: 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; 200680c: c2 24 60 48 st %g1, [ %l1 + 0x48 ] #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 2006810: c2 00 a0 90 ld [ %g2 + 0x90 ], %g1 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 2006814: a0 07 bf e4 add %fp, -28, %l0 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 2006818: c2 24 60 3c st %g1, [ %l1 + 0x3c ] 200681c: c2 00 a0 94 ld [ %g2 + 0x94 ], %g1 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 2006820: 94 10 00 10 mov %l0, %o2 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 2006824: c2 24 60 40 st %g1, [ %l1 + 0x40 ] _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 2006828: 11 00 80 70 sethi %hi(0x201c000), %o0 200682c: 40 00 14 0a call 200b854 <_Timespec_Subtract> 2006830: 90 12 23 88 or %o0, 0x388, %o0 ! 201c388 <_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 ); 2006834: 92 10 00 10 mov %l0, %o1 2006838: 40 00 13 a6 call 200b6d0 <_Timespec_Add_to> 200683c: 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; 2006840: 82 10 20 02 mov 2, %g1 2006844: c2 24 60 38 st %g1, [ %l1 + 0x38 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 2006848: 03 00 80 1b sethi %hi(0x2006c00), %g1 200684c: 82 10 60 7c or %g1, 0x7c, %g1 ! 2006c7c <_Rate_monotonic_Timeout> NULL ); the_period->next_length = length; _Watchdog_Insert_ticks( &the_period->Timer, length ); 2006850: 90 04 60 10 add %l1, 0x10, %o0 2006854: 92 10 00 19 mov %i1, %o1 the_watchdog->id = id; 2006858: f0 24 60 30 st %i0, [ %l1 + 0x30 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 200685c: c0 24 60 18 clr [ %l1 + 0x18 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 2006860: c0 24 60 34 clr [ %l1 + 0x34 ] _Rate_monotonic_Timeout, id, NULL ); the_period->next_length = length; 2006864: f2 24 60 4c st %i1, [ %l1 + 0x4c ] _Watchdog_Insert_ticks( &the_period->Timer, length ); 2006868: 7f ff ff 37 call 2006544 <_Watchdog_Insert_ticks> 200686c: c2 24 60 2c st %g1, [ %l1 + 0x2c ] 2006870: 30 80 00 19 b,a 20068d4 case RATE_MONOTONIC_ACTIVE: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 2006874: 7f ff ff 49 call 2006598 <_Rate_monotonic_Update_statistics> 2006878: 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; 200687c: 82 10 20 01 mov 1, %g1 the_period->next_length = length; 2006880: 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; 2006884: c2 24 60 38 st %g1, [ %l1 + 0x38 ] the_period->next_length = length; _ISR_Enable( level ); 2006888: 7f ff f0 14 call 20028d8 200688c: 90 10 00 10 mov %l0, %o0 _Thread_Executing->Wait.id = the_period->Object.id; 2006890: c2 04 e3 80 ld [ %l3 + 0x380 ], %g1 2006894: c4 04 60 08 ld [ %l1 + 8 ], %g2 _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 2006898: 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; 200689c: c4 20 60 20 st %g2, [ %g1 + 0x20 ] _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 20068a0: 40 00 12 62 call 200b228 <_Thread_Set_state> 20068a4: 13 00 00 10 sethi %hi(0x4000), %o1 /* * Did the watchdog timer expire while we were actually blocking * on it? */ _ISR_Disable( level ); 20068a8: 7f ff f0 08 call 20028c8 20068ac: 01 00 00 00 nop local_state = the_period->state; 20068b0: e0 04 60 38 ld [ %l1 + 0x38 ], %l0 the_period->state = RATE_MONOTONIC_ACTIVE; 20068b4: e4 24 60 38 st %l2, [ %l1 + 0x38 ] _ISR_Enable( level ); 20068b8: 7f ff f0 08 call 20028d8 20068bc: 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 ) 20068c0: 80 a4 20 03 cmp %l0, 3 20068c4: 12 80 00 04 bne 20068d4 20068c8: d0 04 e3 80 ld [ %l3 + 0x380 ], %o0 _Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 20068cc: 40 00 0e 61 call 200a250 <_Thread_Clear_state> <== NOT EXECUTED 20068d0: 13 00 00 10 sethi %hi(0x4000), %o1 <== NOT EXECUTED _Thread_Enable_dispatch(); 20068d4: 7f ff ff 24 call 2006564 <_Thread_Enable_dispatch> 20068d8: b0 10 20 00 clr %i0 20068dc: 81 c7 e0 08 ret 20068e0: 81 e8 00 00 restore case RATE_MONOTONIC_EXPIRED: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 20068e4: 7f ff ff 2d call 2006598 <_Rate_monotonic_Update_statistics> 20068e8: 90 10 00 11 mov %l1, %o0 _ISR_Enable( level ); 20068ec: 7f ff ef fb call 20028d8 20068f0: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_ACTIVE; 20068f4: 82 10 20 02 mov 2, %g1 the_period->next_length = length; _Watchdog_Insert_ticks( &the_period->Timer, length ); 20068f8: 90 04 60 10 add %l1, 0x10, %o0 20068fc: 92 10 00 19 mov %i1, %o1 */ _Rate_monotonic_Update_statistics( the_period ); _ISR_Enable( level ); the_period->state = RATE_MONOTONIC_ACTIVE; 2006900: c2 24 60 38 st %g1, [ %l1 + 0x38 ] the_period->next_length = length; 2006904: f2 24 60 4c st %i1, [ %l1 + 0x4c ] _Watchdog_Insert_ticks( &the_period->Timer, length ); 2006908: 7f ff ff 0f call 2006544 <_Watchdog_Insert_ticks> 200690c: b0 10 20 06 mov 6, %i0 _Thread_Enable_dispatch(); 2006910: 7f ff ff 15 call 2006564 <_Thread_Enable_dispatch> 2006914: 01 00 00 00 nop 2006918: 81 c7 e0 08 ret 200691c: 81 e8 00 00 restore break; } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2006920: 81 c7 e0 08 ret <== NOT EXECUTED 2006924: 81 e8 00 00 restore <== NOT EXECUTED 02006928 : */ void rtems_rate_monotonic_report_statistics_with_plugin( void *context, rtems_printk_plugin_t print ) { 2006928: 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 ) 200692c: 80 a6 60 00 cmp %i1, 0 2006930: 02 80 00 7f be 2006b2c 2006934: 90 10 00 18 mov %i0, %o0 return; (*print)( context, "Period information by period\n" ); 2006938: 13 00 80 66 sethi %hi(0x2019800), %o1 200693c: 9f c6 40 00 call %i1 2006940: 92 12 63 60 or %o1, 0x360, %o1 ! 2019b60 #if defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) (*print)( context, "--- CPU times are in seconds ---\n" ); 2006944: 90 10 00 18 mov %i0, %o0 2006948: 13 00 80 66 sethi %hi(0x2019800), %o1 200694c: 9f c6 40 00 call %i1 2006950: 92 12 63 80 or %o1, 0x380, %o1 ! 2019b80 #endif #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) (*print)( context, "--- Wall times are in seconds ---\n" ); 2006954: 90 10 00 18 mov %i0, %o0 2006958: 13 00 80 66 sethi %hi(0x2019800), %o1 200695c: 9f c6 40 00 call %i1 2006960: 92 12 63 a8 or %o1, 0x3a8, %o1 ! 2019ba8 Be sure to test the various cases. (*print)( context,"\ 1234567890123456789012345678901234567890123456789012345678901234567890123456789\ \n"); */ (*print)( context, " ID OWNER COUNT MISSED " 2006964: 90 10 00 18 mov %i0, %o0 2006968: 13 00 80 66 sethi %hi(0x2019800), %o1 200696c: 9f c6 40 00 call %i1 2006970: 92 12 63 d0 or %o1, 0x3d0, %o1 ! 2019bd0 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS " " #endif " WALL TIME\n" ); (*print)( context, " " 2006974: 90 10 00 18 mov %i0, %o0 2006978: 13 00 80 67 sethi %hi(0x2019c00), %o1 200697c: 9f c6 40 00 call %i1 2006980: 92 12 60 20 or %o1, 0x20, %o1 ! 2019c20 /* * 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 ; 2006984: 03 00 80 70 sethi %hi(0x201c000), %g1 2006988: 82 10 61 04 or %g1, 0x104, %g1 ! 201c104 <_Rate_monotonic_Information> 200698c: e4 00 60 08 ld [ %g1 + 8 ], %l2 _Timespec_Divide_by_integer( &the_stats.total_cpu_time, the_stats.count, &cpu_average ); (*print)( context, 2006990: 03 00 80 67 sethi %hi(0x2019c00), %g1 2006994: b4 10 60 88 or %g1, 0x88, %i2 ! 2019c88 _Timespec_Divide_by_integer( &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 2006998: 03 00 80 67 sethi %hi(0x2019c00), %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 ); 200699c: ba 07 bf 98 add %fp, -104, %i5 _Timespec_Divide_by_integer( &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 20069a0: b6 10 60 a8 or %g1, 0xa8, %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 ); 20069a4: 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" ); 20069a8: 03 00 80 66 sethi %hi(0x2019800), %g1 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 20069ac: 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" ); 20069b0: b8 10 63 a0 or %g1, 0x3a0, %i4 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 20069b4: ac 07 bf b0 add %fp, -80, %l6 20069b8: 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( 20069bc: 10 80 00 56 b 2006b14 20069c0: 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 ); 20069c4: 40 00 1c b3 call 200dc90 20069c8: 92 10 00 1d mov %i5, %o1 if ( status != RTEMS_SUCCESSFUL ) 20069cc: 80 a2 20 00 cmp %o0, 0 20069d0: 32 80 00 51 bne,a 2006b14 20069d4: 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 ); 20069d8: 92 10 00 17 mov %l7, %o1 20069dc: 40 00 1c d1 call 200dd20 20069e0: 90 10 00 12 mov %l2, %o0 if ( status != RTEMS_SUCCESSFUL ) 20069e4: 80 a2 20 00 cmp %o0, 0 20069e8: 32 80 00 4b bne,a 2006b14 20069ec: a4 04 a0 01 inc %l2 <== NOT EXECUTED continue; name[ 0 ] = '\0'; if ( the_status.owner ) { 20069f0: d0 07 bf d0 ld [ %fp + -48 ], %o0 20069f4: 80 a2 20 00 cmp %o0, 0 20069f8: 02 80 00 05 be 2006a0c 20069fc: c0 2f bf f3 clrb [ %fp + -13 ] rtems_object_get_name( the_status.owner, sizeof(name), name ); 2006a00: 94 10 00 14 mov %l4, %o2 2006a04: 40 00 00 c8 call 2006d24 2006a08: 92 10 20 05 mov 5, %o1 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 2006a0c: d8 1f bf 98 ldd [ %fp + -104 ], %o4 2006a10: 94 10 00 12 mov %l2, %o2 2006a14: 96 10 00 14 mov %l4, %o3 2006a18: 13 00 80 67 sethi %hi(0x2019c00), %o1 2006a1c: 90 10 00 18 mov %i0, %o0 2006a20: 9f c6 40 00 call %i1 2006a24: 92 12 60 70 or %o1, 0x70, %o1 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 2006a28: c2 07 bf 98 ld [ %fp + -104 ], %g1 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 2006a2c: 94 10 00 13 mov %l3, %o2 2006a30: 90 10 00 16 mov %l6, %o0 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 2006a34: 80 a0 60 00 cmp %g1, 0 2006a38: 12 80 00 06 bne 2006a50 2006a3c: 92 10 00 1c mov %i4, %o1 (*print)( context, "\n" ); 2006a40: 9f c6 40 00 call %i1 2006a44: 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++ ) { 2006a48: 10 80 00 33 b 2006b14 2006a4c: a4 04 a0 01 inc %l2 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 2006a50: 40 00 13 38 call 200b730 <_Timespec_Divide_by_integer> 2006a54: 92 10 00 01 mov %g1, %o1 &the_stats.total_cpu_time, the_stats.count, &cpu_average ); (*print)( context, 2006a58: d0 07 bf a4 ld [ %fp + -92 ], %o0 2006a5c: 40 00 44 d8 call 2017dbc <.div> 2006a60: 92 10 23 e8 mov 0x3e8, %o1 2006a64: a2 10 00 08 mov %o0, %l1 2006a68: d0 07 bf ac ld [ %fp + -84 ], %o0 2006a6c: 40 00 44 d4 call 2017dbc <.div> 2006a70: 92 10 23 e8 mov 0x3e8, %o1 2006a74: c2 07 bf e8 ld [ %fp + -24 ], %g1 2006a78: a0 10 00 08 mov %o0, %l0 2006a7c: d0 07 bf ec ld [ %fp + -20 ], %o0 2006a80: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 2006a84: 40 00 44 ce call 2017dbc <.div> 2006a88: 92 10 23 e8 mov 0x3e8, %o1 2006a8c: d8 07 bf a8 ld [ %fp + -88 ], %o4 2006a90: d4 07 bf a0 ld [ %fp + -96 ], %o2 2006a94: 96 10 00 11 mov %l1, %o3 2006a98: 9a 10 00 10 mov %l0, %o5 2006a9c: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 2006aa0: 92 10 00 1a mov %i2, %o1 2006aa4: 9f c6 40 00 call %i1 2006aa8: 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( 2006aac: d2 07 bf 98 ld [ %fp + -104 ], %o1 2006ab0: 94 10 00 13 mov %l3, %o2 2006ab4: 40 00 13 1f call 200b730 <_Timespec_Divide_by_integer> 2006ab8: 90 10 00 15 mov %l5, %o0 &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 2006abc: d0 07 bf bc ld [ %fp + -68 ], %o0 2006ac0: 40 00 44 bf call 2017dbc <.div> 2006ac4: 92 10 23 e8 mov 0x3e8, %o1 2006ac8: a2 10 00 08 mov %o0, %l1 2006acc: d0 07 bf c4 ld [ %fp + -60 ], %o0 2006ad0: 40 00 44 bb call 2017dbc <.div> 2006ad4: 92 10 23 e8 mov 0x3e8, %o1 2006ad8: c2 07 bf e8 ld [ %fp + -24 ], %g1 2006adc: a0 10 00 08 mov %o0, %l0 2006ae0: d0 07 bf ec ld [ %fp + -20 ], %o0 2006ae4: 92 10 23 e8 mov 0x3e8, %o1 2006ae8: 40 00 44 b5 call 2017dbc <.div> 2006aec: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 2006af0: d4 07 bf b8 ld [ %fp + -72 ], %o2 2006af4: d8 07 bf c0 ld [ %fp + -64 ], %o4 2006af8: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 2006afc: 96 10 00 11 mov %l1, %o3 2006b00: 9a 10 00 10 mov %l0, %o5 2006b04: 90 10 00 18 mov %i0, %o0 2006b08: 9f c6 40 00 call %i1 2006b0c: 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++ ) { 2006b10: 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 ; 2006b14: 05 00 80 70 sethi %hi(0x201c000), %g2 2006b18: 84 10 a1 04 or %g2, 0x104, %g2 ! 201c104 <_Rate_monotonic_Information> 2006b1c: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 2006b20: 80 a4 80 01 cmp %l2, %g1 2006b24: 08 bf ff a8 bleu 20069c4 2006b28: 90 10 00 12 mov %l2, %o0 2006b2c: 81 c7 e0 08 ret 2006b30: 81 e8 00 00 restore 02006b50 : /* * rtems_rate_monotonic_reset_all_statistics */ void rtems_rate_monotonic_reset_all_statistics( void ) { 2006b50: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2006b54: 03 00 80 70 sethi %hi(0x201c000), %g1 2006b58: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 201c2a0 <_Thread_Dispatch_disable_level> 2006b5c: 84 00 a0 01 inc %g2 2006b60: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] /* * 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 ; 2006b64: 03 00 80 70 sethi %hi(0x201c000), %g1 2006b68: 82 10 61 04 or %g1, 0x104, %g1 ! 201c104 <_Rate_monotonic_Information> 2006b6c: e0 00 60 08 ld [ %g1 + 8 ], %l0 id <= _Rate_monotonic_Information.maximum_id ; 2006b70: 10 80 00 04 b 2006b80 2006b74: a2 10 00 01 mov %g1, %l1 id++ ) { status = rtems_rate_monotonic_reset_statistics( id ); 2006b78: 40 00 00 12 call 2006bc0 2006b7c: 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 ; 2006b80: c2 04 60 0c ld [ %l1 + 0xc ], %g1 2006b84: 80 a4 00 01 cmp %l0, %g1 2006b88: 08 bf ff fc bleu 2006b78 2006b8c: 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 ) 2006b90: 03 00 80 70 sethi %hi(0x201c000), %g1 2006b94: c4 00 62 a0 ld [ %g1 + 0x2a0 ], %g2 ! 201c2a0 <_Thread_Dispatch_disable_level> 2006b98: 84 00 bf ff add %g2, -1, %g2 2006b9c: c4 20 62 a0 st %g2, [ %g1 + 0x2a0 ] 2006ba0: c2 00 62 a0 ld [ %g1 + 0x2a0 ], %g1 2006ba4: 80 a0 60 00 cmp %g1, 0 2006ba8: 12 80 00 04 bne 2006bb8 2006bac: 01 00 00 00 nop _Thread_Dispatch(); 2006bb0: 40 00 0e 73 call 200a57c <_Thread_Dispatch> 2006bb4: 81 e8 00 00 restore 2006bb8: 81 c7 e0 08 ret <== NOT EXECUTED 2006bbc: 81 e8 00 00 restore <== NOT EXECUTED 0200f8cc : uint32_t length, uint32_t page_size, rtems_attribute attribute_set, Objects_Id *id ) { 200f8cc: 9d e3 bf 98 save %sp, -104, %sp Region_Control *the_region; if ( !rtems_is_name_valid( name ) ) 200f8d0: a4 96 20 00 orcc %i0, 0, %l2 200f8d4: 02 80 00 87 be 200faf0 200f8d8: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 200f8dc: 80 a6 60 00 cmp %i1, 0 200f8e0: 02 80 00 c7 be 200fbfc 200f8e4: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 200f8e8: 02 80 00 c5 be 200fbfc 200f8ec: 80 8e 60 07 btst 7, %i1 return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( starting_address ) ) 200f8f0: 32 80 00 80 bne,a 200faf0 200f8f4: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; _RTEMS_Lock_allocator(); /* to prevent deletion */ 200f8f8: 7f ff eb 8b call 200a724 200f8fc: 01 00 00 00 nop 200f900: a2 10 00 08 mov %o0, %l1 200f904: 03 00 80 c3 sethi %hi(0x2030c00), %g1 200f908: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200f90c: 80 a0 60 00 cmp %g1, 0 200f910: 02 80 00 0b be 200f93c 200f914: 03 00 80 c4 sethi %hi(0x2031000), %g1 200f918: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200f91c: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2031190 <_System_state_Current> <== NOT EXECUTED 200f920: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200f924: 08 80 00 05 bleu 200f938 <== NOT EXECUTED 200f928: 90 10 20 00 clr %o0 <== NOT EXECUTED 200f92c: 92 10 20 00 clr %o1 <== NOT EXECUTED 200f930: 40 00 12 ad call 20143e4 <_Internal_error_Occurred> <== NOT EXECUTED 200f934: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 200f938: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200f93c: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2031088 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 200f940: 03 00 80 c4 sethi %hi(0x2031000), %g1 200f944: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2031090 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 200f948: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 200f94c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 200f950: 80 a0 60 00 cmp %g1, 0 200f954: 22 80 00 30 be,a 200fa14 200f958: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 200f95c: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 200f960: 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; 200f964: 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; 200f968: 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; 200f96c: 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; 200f970: 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 ) || 200f974: 80 a0 e0 02 cmp %g3, 2 200f978: 02 80 00 05 be 200f98c 200f97c: c8 24 20 64 st %g4, [ %l0 + 0x64 ] 200f980: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 200f984: 12 80 00 07 bne 200f9a0 <== NOT EXECUTED 200f988: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 200f98c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 200f990: 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++; 200f994: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 200f998: 02 80 00 03 be 200f9a4 200f99c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 200f9a0: 30 80 00 2b b,a 200fa4c */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 200f9a4: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 200f9a8: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 200f9ac: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 200f9b0: 12 80 00 03 bne 200f9bc <== NOT EXECUTED 200f9b4: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 200f9b8: 30 80 00 25 b,a 200fa4c <== NOT EXECUTED return 0; } if ( current > ceiling ) { 200f9bc: 08 80 00 0f bleu 200f9f8 <== NOT EXECUTED 200f9c0: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200f9c4: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 200f9c8: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200f9cc: 82 00 60 01 inc %g1 <== NOT EXECUTED 200f9d0: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 200f9d4: 7f ff eb 58 call 200a734 <== NOT EXECUTED 200f9d8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 200f9dc: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 200f9e0: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 200f9e4: 40 00 17 cd call 2015918 <_Thread_Change_priority> <== NOT EXECUTED 200f9e8: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 200f9ec: 7f ff ff ab call 200f898 <_Thread_Enable_dispatch> <== NOT EXECUTED 200f9f0: 23 00 80 c3 sethi %hi(0x2030c00), %l1 <== NOT EXECUTED 200f9f4: 30 80 00 2f b,a 200fab0 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 200f9f8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 200f9fc: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 200fa00: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 200fa04: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 200fa08: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 200fa0c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 200fa10: 30 80 00 0f b,a 200fa4c <== 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 ) ) { 200fa14: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 200fa18: 12 80 00 13 bne 200fa64 <== NOT EXECUTED 200fa1c: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 200fa20: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 200fa24: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200fa28: 22 80 00 07 be,a 200fa44 <== NOT EXECUTED 200fa2c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 200fa30: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200fa34: 32 80 00 0c bne,a 200fa64 <== NOT EXECUTED 200fa38: 03 00 80 c4 sethi %hi(0x2031000), %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; 200fa3c: 10 80 00 08 b 200fa5c <== NOT EXECUTED 200fa40: 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++; 200fa44: 82 00 60 01 inc %g1 <== NOT EXECUTED 200fa48: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 200fa4c: 7f ff eb 3a call 200a734 200fa50: 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 ); 200fa54: 10 80 00 17 b 200fab0 200fa58: 23 00 80 c3 sethi %hi(0x2030c00), %l1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 200fa5c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 200fa60: 30 bf ff fb b,a 200fa4c <== NOT EXECUTED 200fa64: c6 04 20 08 ld [ %l0 + 8 ], %g3 <== NOT EXECUTED 200fa68: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 200fa6c: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 200fa70: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200fa74: c6 21 20 20 st %g3, [ %g4 + 0x20 ] <== NOT EXECUTED 200fa78: 82 00 60 01 inc %g1 <== NOT EXECUTED 200fa7c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== 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; 200fa80: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 200fa84: c2 24 20 40 st %g1, [ %l0 + 0x40 ] <== NOT EXECUTED 200fa88: 82 04 20 10 add %l0, 0x10, %g1 <== NOT EXECUTED 200fa8c: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 200fa90: 7f ff eb 29 call 200a734 <== NOT EXECUTED 200fa94: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200fa98: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200fa9c: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 200faa0: 92 10 20 00 clr %o1 <== NOT EXECUTED 200faa4: 40 00 0f be call 201399c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 200faa8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 200faac: 23 00 80 c3 sethi %hi(0x2030c00), %l1 <== NOT EXECUTED 200fab0: 40 00 12 7a call 2014498 <_Objects_Allocate> 200fab4: 90 14 61 c8 or %l1, 0x1c8, %o0 ! 2030dc8 <_Region_Information> the_region = _Region_Allocate(); if ( !the_region ) { 200fab8: a0 92 20 00 orcc %o0, 0, %l0 200fabc: 12 80 00 0f bne 200faf8 200fac0: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200fac4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200fac8: 82 00 60 01 inc %g1 200facc: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 200fad0: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fad4: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 200fad8: 94 10 20 00 clr %o2 200fadc: d2 02 20 08 ld [ %o0 + 8 ], %o1 200fae0: 40 00 0f d1 call 2013a24 <_CORE_mutex_Surrender> 200fae4: 90 02 20 10 add %o0, 0x10, %o0 200fae8: 7f ff ff 6c call 200f898 <_Thread_Enable_dispatch> 200faec: b0 10 20 05 mov 5, %i0 200faf0: 81 c7 e0 08 ret 200faf4: 81 e8 00 00 restore return RTEMS_TOO_MANY; } the_region->maximum_segment_size = 200faf8: 90 04 20 68 add %l0, 0x68, %o0 200fafc: 92 10 00 19 mov %i1, %o1 200fb00: 94 10 00 1a mov %i2, %o2 200fb04: 40 00 11 ee call 20142bc <_Heap_Initialize> 200fb08: 96 10 00 1b mov %i3, %o3 _Heap_Initialize(&the_region->Memory, starting_address, length, page_size); if ( !the_region->maximum_segment_size ) { 200fb0c: 80 a2 20 00 cmp %o0, 0 200fb10: 12 80 00 13 bne 200fb5c 200fb14: 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 ); 200fb18: 90 14 61 c8 or %l1, 0x1c8, %o0 200fb1c: 40 00 13 61 call 20148a0 <_Objects_Free> 200fb20: 92 10 00 10 mov %l0, %o1 200fb24: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200fb28: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200fb2c: 82 00 60 01 inc %g1 200fb30: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 200fb34: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fb38: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 200fb3c: 94 10 20 00 clr %o2 200fb40: d2 02 20 08 ld [ %o0 + 8 ], %o1 200fb44: 40 00 0f b8 call 2013a24 <_CORE_mutex_Surrender> 200fb48: 90 02 20 10 add %o0, 0x10, %o0 200fb4c: 7f ff ff 53 call 200f898 <_Thread_Enable_dispatch> 200fb50: b0 10 20 08 mov 8, %i0 200fb54: 81 c7 e0 08 ret 200fb58: 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( 200fb5c: 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; 200fb60: f2 24 20 50 st %i1, [ %l0 + 0x50 ] the_region->length = length; 200fb64: f4 24 20 54 st %i2, [ %l0 + 0x54 ] the_region->page_size = page_size; 200fb68: f6 24 20 58 st %i3, [ %l0 + 0x58 ] the_region->attribute_set = attribute_set; 200fb6c: f8 24 20 60 st %i4, [ %l0 + 0x60 ] the_region->number_of_used_blocks = 0; 200fb70: c0 24 20 64 clr [ %l0 + 0x64 ] _Thread_queue_Initialize( 200fb74: 93 37 20 02 srl %i4, 2, %o1 200fb78: 94 10 20 40 mov 0x40, %o2 200fb7c: 92 0a 60 01 and %o1, 1, %o1 200fb80: 40 00 1b 21 call 2016804 <_Thread_queue_Initialize> 200fb84: 96 10 20 06 mov 6, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200fb88: 90 14 61 c8 or %l1, 0x1c8, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 200fb8c: c4 04 20 08 ld [ %l0 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200fb90: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 200fb94: 03 00 00 3f sethi %hi(0xfc00), %g1 200fb98: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 200fb9c: 82 08 80 01 and %g2, %g1, %g1 200fba0: 80 a0 40 03 cmp %g1, %g3 200fba4: 38 80 00 06 bgu,a 200fbbc 200fba8: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 200fbac: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 200fbb0: 83 28 60 02 sll %g1, 2, %g1 200fbb4: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Region_Information, &the_region->Object, (Objects_Name) name ); *id = the_region->Object.id; 200fbb8: c2 04 20 08 ld [ %l0 + 8 ], %g1 200fbbc: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200fbc0: c2 27 40 00 st %g1, [ %i5 ] 200fbc4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %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; 200fbc8: e4 24 20 0c st %l2, [ %l0 + 0xc ] 200fbcc: 82 00 60 01 inc %g1 200fbd0: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 200fbd4: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fbd8: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 200fbdc: 94 10 20 00 clr %o2 200fbe0: d2 02 20 08 ld [ %o0 + 8 ], %o1 200fbe4: 40 00 0f 90 call 2013a24 <_CORE_mutex_Surrender> 200fbe8: 90 02 20 10 add %o0, 0x10, %o0 200fbec: 7f ff ff 2b call 200f898 <_Thread_Enable_dispatch> 200fbf0: b0 10 20 00 clr %i0 200fbf4: 81 c7 e0 08 ret 200fbf8: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 200fbfc: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED } 200fc00: 81 c7 e0 08 ret <== NOT EXECUTED 200fc04: 81 e8 00 00 restore <== NOT EXECUTED 0200fc3c : */ rtems_status_code rtems_region_delete( Objects_Id id ) { 200fc3c: 9d e3 bf 90 save %sp, -112, %sp register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); 200fc40: 7f ff ea b9 call 200a724 200fc44: 01 00 00 00 nop 200fc48: a2 10 00 08 mov %o0, %l1 200fc4c: 03 00 80 c3 sethi %hi(0x2030c00), %g1 200fc50: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200fc54: 80 a0 60 00 cmp %g1, 0 200fc58: 02 80 00 0b be 200fc84 200fc5c: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fc60: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200fc64: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2031190 <_System_state_Current> <== NOT EXECUTED 200fc68: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200fc6c: 08 80 00 05 bleu 200fc80 <== NOT EXECUTED 200fc70: 90 10 20 00 clr %o0 <== NOT EXECUTED 200fc74: 92 10 20 00 clr %o1 <== NOT EXECUTED 200fc78: 40 00 11 db call 20143e4 <_Internal_error_Occurred> <== NOT EXECUTED 200fc7c: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 200fc80: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200fc84: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2031088 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 200fc88: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fc8c: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2031090 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 200fc90: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 200fc94: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 200fc98: 80 a0 60 00 cmp %g1, 0 200fc9c: 22 80 00 33 be,a 200fd68 200fca0: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 200fca4: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 200fca8: 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; 200fcac: 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; 200fcb0: 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; 200fcb4: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 200fcb8: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 200fcbc: 80 a0 e0 02 cmp %g3, 2 200fcc0: 02 80 00 05 be 200fcd4 200fcc4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 200fcc8: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 200fccc: 32 80 00 06 bne,a 200fce4 <== NOT EXECUTED 200fcd0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 200fcd4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 200fcd8: 82 00 60 01 inc %g1 200fcdc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 200fce0: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 200fce4: 80 a0 60 03 cmp %g1, 3 200fce8: 22 80 00 03 be,a 200fcf4 200fcec: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 200fcf0: 30 80 00 2c b,a 200fda0 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 200fcf4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 200fcf8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 200fcfc: 12 80 00 03 bne 200fd08 <== NOT EXECUTED 200fd00: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 200fd04: 30 80 00 27 b,a 200fda0 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 200fd08: 08 80 00 10 bleu 200fd48 <== NOT EXECUTED 200fd0c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200fd10: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 200fd14: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200fd18: 82 00 60 01 inc %g1 <== NOT EXECUTED 200fd1c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 200fd20: 7f ff ea 85 call 200a734 <== NOT EXECUTED 200fd24: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 200fd28: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 200fd2c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 200fd30: 40 00 16 fa call 2015918 <_Thread_Change_priority> <== NOT EXECUTED 200fd34: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 200fd38: 7f ff ff b4 call 200fc08 <_Thread_Enable_dispatch> <== NOT EXECUTED 200fd3c: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 200fd40: 10 80 00 32 b 200fe08 <== NOT EXECUTED 200fd44: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 200fd48: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 200fd4c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 200fd50: 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; 200fd54: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 200fd58: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 200fd5c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 200fd60: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 200fd64: 30 80 00 0f b,a 200fda0 <== 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 ) ) { 200fd68: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 200fd6c: 32 80 00 13 bne,a 200fdb8 <== NOT EXECUTED 200fd70: 21 00 80 c4 sethi %hi(0x2031000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 200fd74: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2031050 <_Workspace_Area+0x54> <== NOT EXECUTED 200fd78: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200fd7c: 22 80 00 07 be,a 200fd98 <== NOT EXECUTED 200fd80: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 200fd84: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200fd88: 12 80 00 0c bne 200fdb8 <== NOT EXECUTED 200fd8c: 21 00 80 c4 sethi %hi(0x2031000), %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; 200fd90: 10 80 00 08 b 200fdb0 <== NOT EXECUTED 200fd94: 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++; 200fd98: 82 00 60 01 inc %g1 <== NOT EXECUTED 200fd9c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 200fda0: 7f ff ea 65 call 200a734 200fda4: 90 10 00 11 mov %l1, %o0 200fda8: 10 80 00 18 b 200fe08 200fdac: 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; 200fdb0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 200fdb4: 30 bf ff fb b,a 200fda0 <== NOT EXECUTED 200fdb8: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 200fdbc: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200fdc0: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 200fdc4: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 200fdc8: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 200fdcc: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200fdd0: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 200fdd4: 82 00 60 01 inc %g1 <== NOT EXECUTED 200fdd8: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 200fddc: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 200fde0: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 200fde4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 200fde8: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 200fdec: 7f ff ea 52 call 200a734 <== NOT EXECUTED 200fdf0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200fdf4: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 200fdf8: 92 10 20 00 clr %o1 <== NOT EXECUTED 200fdfc: 40 00 0e e8 call 201399c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 200fe00: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 200fe04: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 200fe08: 21 00 80 c3 sethi %hi(0x2030c00), %l0 200fe0c: 94 07 bf f4 add %fp, -12, %o2 200fe10: 40 00 12 e6 call 20149a8 <_Objects_Get_no_protection> 200fe14: 90 14 21 c8 or %l0, 0x1c8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 200fe18: c2 07 bf f4 ld [ %fp + -12 ], %g1 200fe1c: 80 a0 60 01 cmp %g1, 1 200fe20: 02 80 00 0a be 200fe48 200fe24: 92 10 00 08 mov %o0, %o1 200fe28: 80 a0 60 01 cmp %g1, 1 200fe2c: 2a 80 00 22 bcs,a 200feb4 200fe30: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 200fe34: 80 a0 60 02 cmp %g1, 2 200fe38: 12 80 00 10 bne 200fe78 200fe3c: b0 10 20 19 mov 0x19, %i0 200fe40: 10 80 00 10 b 200fe80 200fe44: 05 00 80 c3 sethi %hi(0x2030c00), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 200fe48: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 200fe4c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 200fe50: 82 00 60 01 inc %g1 <== NOT EXECUTED 200fe54: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 200fe58: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200fe5c: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 200fe60: 94 10 20 00 clr %o2 <== NOT EXECUTED 200fe64: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 200fe68: 40 00 0e ef call 2013a24 <_CORE_mutex_Surrender> <== NOT EXECUTED 200fe6c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 200fe70: 7f ff ff 66 call 200fc08 <_Thread_Enable_dispatch> <== NOT EXECUTED 200fe74: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 200fe78: 81 c7 e0 08 ret <== NOT EXECUTED 200fe7c: 81 e8 00 00 restore <== NOT EXECUTED 200fe80: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 200fe84: 82 00 60 01 inc %g1 200fe88: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 200fe8c: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fe90: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 200fe94: 94 10 20 00 clr %o2 200fe98: d2 02 20 08 ld [ %o0 + 8 ], %o1 200fe9c: 40 00 0e e2 call 2013a24 <_CORE_mutex_Surrender> 200fea0: 90 02 20 10 add %o0, 0x10, %o0 200fea4: 7f ff ff 59 call 200fc08 <_Thread_Enable_dispatch> 200fea8: b0 10 20 04 mov 4, %i0 200feac: 81 c7 e0 08 ret 200feb0: 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 ) { 200feb4: 80 a0 60 00 cmp %g1, 0 200feb8: 12 80 00 1d bne 200ff2c 200febc: 05 00 80 c3 sethi %hi(0x2030c00), %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200fec0: 90 14 21 c8 or %l0, 0x1c8, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 200fec4: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 200fec8: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 200fecc: 05 00 00 3f sethi %hi(0xfc00), %g2 200fed0: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 200fed4: 82 08 40 02 and %g1, %g2, %g1 200fed8: 80 a0 40 03 cmp %g1, %g3 200fedc: 18 80 00 04 bgu 200feec 200fee0: 83 28 60 02 sll %g1, 2, %g1 information->local_table[ index ] = the_object; 200fee4: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 200fee8: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Region_Free ( Region_Control *the_region ) { _Objects_Free( &_Region_Information, &the_region->Object ); 200feec: 40 00 12 6d call 20148a0 <_Objects_Free> 200fef0: c0 22 60 0c clr [ %o1 + 0xc ] 200fef4: 05 00 80 c3 sethi %hi(0x2030c00), %g2 200fef8: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200fefc: 82 00 60 01 inc %g1 200ff00: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 200ff04: 03 00 80 c4 sethi %hi(0x2031000), %g1 200ff08: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 200ff0c: 94 10 20 00 clr %o2 200ff10: d2 02 20 08 ld [ %o0 + 8 ], %o1 200ff14: 40 00 0e c4 call 2013a24 <_CORE_mutex_Surrender> 200ff18: 90 02 20 10 add %o0, 0x10, %o0 200ff1c: 7f ff ff 3b call 200fc08 <_Thread_Enable_dispatch> 200ff20: b0 10 20 00 clr %i0 200ff24: 81 c7 e0 08 ret 200ff28: 81 e8 00 00 restore 200ff2c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 200ff30: 82 00 60 01 inc %g1 200ff34: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] return RTEMS_SUCCESSFUL; } _RTEMS_Unlock_allocator(); 200ff38: 03 00 80 c4 sethi %hi(0x2031000), %g1 200ff3c: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 200ff40: 94 10 20 00 clr %o2 200ff44: d2 02 20 08 ld [ %o0 + 8 ], %o1 200ff48: 40 00 0e b7 call 2013a24 <_CORE_mutex_Surrender> 200ff4c: 90 02 20 10 add %o0, 0x10, %o0 200ff50: 7f ff ff 2e call 200fc08 <_Thread_Enable_dispatch> 200ff54: b0 10 20 0c mov 0xc, %i0 return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200ff58: 81 c7 e0 08 ret 200ff5c: 81 e8 00 00 restore 0200ff94 : rtems_status_code rtems_region_extend( Objects_Id id, void *starting_address, uint32_t length ) { 200ff94: 9d e3 bf 90 save %sp, -112, %sp 200ff98: 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 ) 200ff9c: 80 a6 60 00 cmp %i1, 0 200ffa0: 02 80 00 90 be 20101e0 200ffa4: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ 200ffa8: 7f ff e9 df call 200a724 200ffac: 01 00 00 00 nop 200ffb0: a2 10 00 08 mov %o0, %l1 200ffb4: 03 00 80 c3 sethi %hi(0x2030c00), %g1 200ffb8: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 200ffbc: 80 a0 60 00 cmp %g1, 0 200ffc0: 02 80 00 0b be 200ffec 200ffc4: 03 00 80 c4 sethi %hi(0x2031000), %g1 200ffc8: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200ffcc: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2031190 <_System_state_Current> <== NOT EXECUTED 200ffd0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 200ffd4: 08 80 00 05 bleu 200ffe8 <== NOT EXECUTED 200ffd8: 90 10 20 00 clr %o0 <== NOT EXECUTED 200ffdc: 92 10 20 00 clr %o1 <== NOT EXECUTED 200ffe0: 40 00 11 01 call 20143e4 <_Internal_error_Occurred> <== NOT EXECUTED 200ffe4: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 200ffe8: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 200ffec: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2031088 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 200fff0: 03 00 80 c4 sethi %hi(0x2031000), %g1 200fff4: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2031090 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 200fff8: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 200fffc: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 2010000: 80 a0 60 00 cmp %g1, 0 2010004: 22 80 00 33 be,a 20100d0 2010008: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 201000c: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2010010: 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; 2010014: 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; 2010018: 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; 201001c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2010020: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2010024: 80 a0 e0 02 cmp %g3, 2 2010028: 02 80 00 05 be 201003c 201002c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 2010030: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2010034: 32 80 00 06 bne,a 201004c <== NOT EXECUTED 2010038: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 201003c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 2010040: 82 00 60 01 inc %g1 2010044: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 2010048: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 201004c: 80 a0 60 03 cmp %g1, 3 2010050: 22 80 00 03 be,a 201005c 2010054: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 2010058: 30 80 00 2c b,a 2010108 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 201005c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 2010060: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2010064: 12 80 00 03 bne 2010070 <== NOT EXECUTED 2010068: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 201006c: 30 80 00 27 b,a 2010108 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 2010070: 08 80 00 10 bleu 20100b0 <== NOT EXECUTED 2010074: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2010078: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 201007c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2010080: 82 00 60 01 inc %g1 <== NOT EXECUTED 2010084: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 2010088: 7f ff e9 ab call 200a734 <== NOT EXECUTED 201008c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 2010090: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 2010094: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 2010098: 40 00 16 20 call 2015918 <_Thread_Change_priority> <== NOT EXECUTED 201009c: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 20100a0: 7f ff ff b0 call 200ff60 <_Thread_Enable_dispatch> <== NOT EXECUTED 20100a4: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 20100a8: 10 80 00 32 b 2010170 <== NOT EXECUTED 20100ac: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 20100b0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 20100b4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 20100b8: 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; 20100bc: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 20100c0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 20100c4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 20100c8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 20100cc: 30 80 00 0f b,a 2010108 <== 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 ) ) { 20100d0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 20100d4: 32 80 00 13 bne,a 2010120 <== NOT EXECUTED 20100d8: 21 00 80 c4 sethi %hi(0x2031000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 20100dc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2031050 <_Workspace_Area+0x54> <== NOT EXECUTED 20100e0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20100e4: 22 80 00 07 be,a 2010100 <== NOT EXECUTED 20100e8: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 20100ec: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20100f0: 12 80 00 0c bne 2010120 <== NOT EXECUTED 20100f4: 21 00 80 c4 sethi %hi(0x2031000), %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; 20100f8: 10 80 00 08 b 2010118 <== NOT EXECUTED 20100fc: 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++; 2010100: 82 00 60 01 inc %g1 <== NOT EXECUTED 2010104: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 2010108: 7f ff e9 8b call 200a734 201010c: 90 10 00 11 mov %l1, %o0 2010110: 10 80 00 18 b 2010170 2010114: 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; 2010118: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 201011c: 30 bf ff fb b,a 2010108 <== NOT EXECUTED 2010120: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 2010124: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 2010128: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 201012c: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 2010130: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 2010134: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2010138: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 201013c: 82 00 60 01 inc %g1 <== NOT EXECUTED 2010140: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2010144: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 2010148: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 201014c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 2010150: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 2010154: 7f ff e9 78 call 200a734 <== NOT EXECUTED 2010158: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 201015c: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 2010160: 92 10 20 00 clr %o1 <== NOT EXECUTED 2010164: 40 00 0e 0e call 201399c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 2010168: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 201016c: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 2010170: 11 00 80 c3 sethi %hi(0x2030c00), %o0 2010174: 94 07 bf f4 add %fp, -12, %o2 2010178: 40 00 12 0c call 20149a8 <_Objects_Get_no_protection> 201017c: 90 12 21 c8 or %o0, 0x1c8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 2010180: c2 07 bf f4 ld [ %fp + -12 ], %g1 2010184: 80 a0 60 01 cmp %g1, 1 2010188: 02 80 00 0a be 20101b0 201018c: a0 10 00 08 mov %o0, %l0 2010190: 80 a0 60 01 cmp %g1, 1 2010194: 0a 80 00 22 bcs 201021c 2010198: 92 10 00 19 mov %i1, %o1 201019c: 80 a0 60 02 cmp %g1, 2 20101a0: 12 80 00 10 bne 20101e0 20101a4: b0 10 20 19 mov 0x19, %i0 20101a8: 10 80 00 10 b 20101e8 20101ac: 05 00 80 c3 sethi %hi(0x2030c00), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 20101b0: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 20101b4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20101b8: 82 00 60 01 inc %g1 <== NOT EXECUTED 20101bc: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 20101c0: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 20101c4: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 20101c8: 94 10 20 00 clr %o2 <== NOT EXECUTED 20101cc: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 20101d0: 40 00 0e 15 call 2013a24 <_CORE_mutex_Surrender> <== NOT EXECUTED 20101d4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 20101d8: 7f ff ff 62 call 200ff60 <_Thread_Enable_dispatch> <== NOT EXECUTED 20101dc: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 20101e0: 81 c7 e0 08 ret <== NOT EXECUTED 20101e4: 81 e8 00 00 restore <== NOT EXECUTED 20101e8: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 20101ec: 82 00 60 01 inc %g1 20101f0: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 20101f4: 03 00 80 c4 sethi %hi(0x2031000), %g1 20101f8: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 20101fc: 94 10 20 00 clr %o2 2010200: d2 02 20 08 ld [ %o0 + 8 ], %o1 2010204: 40 00 0e 08 call 2013a24 <_CORE_mutex_Surrender> 2010208: 90 02 20 10 add %o0, 0x10, %o0 201020c: 7f ff ff 55 call 200ff60 <_Thread_Enable_dispatch> 2010210: b0 10 20 04 mov 4, %i0 2010214: 81 c7 e0 08 ret 2010218: 81 e8 00 00 restore return RTEMS_INVALID_ID; case OBJECTS_LOCAL: heap_status = _Heap_Extend( 201021c: 94 10 00 1a mov %i2, %o2 2010220: 90 02 20 68 add %o0, 0x68, %o0 2010224: 96 07 bf f0 add %fp, -16, %o3 2010228: 40 00 0f 3a call 2013f10 <_Heap_Extend> 201022c: b0 10 20 09 mov 9, %i0 starting_address, length, &amount_extended ); switch ( heap_status ) { 2010230: 80 a2 20 01 cmp %o0, 1 2010234: 02 80 00 12 be 201027c 2010238: 05 00 80 c3 sethi %hi(0x2030c00), %g2 201023c: 0a 80 00 08 bcs 201025c 2010240: c6 07 bf f0 ld [ %fp + -16 ], %g3 2010244: 82 1a 20 02 xor %o0, 2, %g1 2010248: 80 a0 00 01 cmp %g0, %g1 201024c: 82 60 20 00 subx %g0, 0, %g1 2010250: b0 08 7f e8 and %g1, -24, %i0 2010254: 10 80 00 0a b 201027c 2010258: b0 06 20 18 add %i0, 0x18, %i0 case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 201025c: c4 04 20 54 ld [ %l0 + 0x54 ], %g2 the_region->maximum_segment_size += amount_extended; 2010260: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 2010264: 84 00 80 03 add %g2, %g3, %g2 the_region->maximum_segment_size += amount_extended; 2010268: 82 00 40 03 add %g1, %g3, %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 201026c: c4 24 20 54 st %g2, [ %l0 + 0x54 ] the_region->maximum_segment_size += amount_extended; 2010270: c2 24 20 5c st %g1, [ %l0 + 0x5c ] 2010274: b0 10 20 00 clr %i0 2010278: 05 00 80 c3 sethi %hi(0x2030c00), %g2 201027c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 2010280: 82 00 60 01 inc %g1 2010284: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] break; case HEAP_EXTEND_NOT_IMPLEMENTED: status = RTEMS_NOT_IMPLEMENTED; break; } _RTEMS_Unlock_allocator(); 2010288: 03 00 80 c4 sethi %hi(0x2031000), %g1 201028c: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 2010290: 94 10 20 00 clr %o2 2010294: d2 02 20 08 ld [ %o0 + 8 ], %o1 2010298: 40 00 0d e3 call 2013a24 <_CORE_mutex_Surrender> 201029c: 90 02 20 10 add %o0, 0x10, %o0 20102a0: 7f ff ff 30 call 200ff60 <_Thread_Enable_dispatch> 20102a4: 01 00 00 00 nop return( status ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 20102a8: 81 c7 e0 08 ret 20102ac: 81 e8 00 00 restore 020102e4 : uint32_t size, rtems_option option_set, rtems_interval timeout, void **segment ) { 20102e4: 9d e3 bf 90 save %sp, -112, %sp 20102e8: a4 10 00 18 mov %i0, %l2 register Region_Control *the_region; Objects_Locations location; Thread_Control *executing; void *the_segment; if ( !segment ) 20102ec: 80 a7 20 00 cmp %i4, 0 20102f0: 02 80 00 96 be 2010548 20102f4: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; *segment = NULL; 20102f8: c0 27 00 00 clr [ %i4 ] if ( size == 0 ) 20102fc: 80 a6 60 00 cmp %i1, 0 2010300: 02 80 00 92 be 2010548 2010304: b0 10 20 08 mov 8, %i0 return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 2010308: 7f ff e9 07 call 200a724 201030c: 01 00 00 00 nop 2010310: a2 10 00 08 mov %o0, %l1 2010314: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2010318: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 201031c: 80 a0 60 00 cmp %g1, 0 2010320: 02 80 00 0b be 201034c 2010324: 03 00 80 c4 sethi %hi(0x2031000), %g1 2010328: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 201032c: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2031190 <_System_state_Current> <== NOT EXECUTED 2010330: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2010334: 08 80 00 05 bleu 2010348 <== NOT EXECUTED 2010338: 90 10 20 00 clr %o0 <== NOT EXECUTED 201033c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2010340: 40 00 10 29 call 20143e4 <_Internal_error_Occurred> <== NOT EXECUTED 2010344: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2010348: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 201034c: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2031088 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2010350: 03 00 80 c4 sethi %hi(0x2031000), %g1 2010354: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2031090 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2010358: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 201035c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 2010360: 80 a0 60 00 cmp %g1, 0 2010364: 22 80 00 33 be,a 2010430 2010368: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 201036c: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 2010370: 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; 2010374: 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; 2010378: 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; 201037c: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 2010380: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2010384: 80 a0 e0 02 cmp %g3, 2 2010388: 02 80 00 05 be 201039c 201038c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 2010390: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2010394: 32 80 00 06 bne,a 20103ac <== NOT EXECUTED 2010398: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 201039c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 20103a0: 82 00 60 01 inc %g1 20103a4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 20103a8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 20103ac: 80 a0 60 03 cmp %g1, 3 20103b0: 22 80 00 03 be,a 20103bc 20103b4: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 20103b8: 30 80 00 2c b,a 2010468 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 20103bc: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 20103c0: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 20103c4: 12 80 00 03 bne 20103d0 <== NOT EXECUTED 20103c8: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 20103cc: 30 80 00 27 b,a 2010468 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 20103d0: 28 80 00 10 bleu,a 2010410 <== NOT EXECUTED 20103d4: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 20103d8: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 20103dc: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20103e0: 82 00 60 01 inc %g1 <== NOT EXECUTED 20103e4: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 20103e8: 7f ff e8 d3 call 200a734 <== NOT EXECUTED 20103ec: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 20103f0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 20103f4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 20103f8: 40 00 15 48 call 2015918 <_Thread_Change_priority> <== NOT EXECUTED 20103fc: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 2010400: 7f ff ff ac call 20102b0 <_Thread_Enable_dispatch> <== NOT EXECUTED 2010404: 01 00 00 00 nop <== NOT EXECUTED executing = _Thread_Executing; 2010408: 10 80 00 32 b 20104d0 <== NOT EXECUTED 201040c: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 2010410: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 2010414: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2010418: 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; 201041c: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 2010420: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2010424: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2010428: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 201042c: 30 80 00 0f b,a 2010468 <== 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 ) ) { 2010430: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2010434: 32 80 00 13 bne,a 2010480 <== NOT EXECUTED 2010438: 21 00 80 c4 sethi %hi(0x2031000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 201043c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2031050 <_Workspace_Area+0x54> <== NOT EXECUTED 2010440: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2010444: 22 80 00 07 be,a 2010460 <== NOT EXECUTED 2010448: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 201044c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2010450: 12 80 00 0c bne 2010480 <== NOT EXECUTED 2010454: 21 00 80 c4 sethi %hi(0x2031000), %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; 2010458: 10 80 00 08 b 2010478 <== NOT EXECUTED 201045c: 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++; 2010460: 82 00 60 01 inc %g1 <== NOT EXECUTED 2010464: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 2010468: 7f ff e8 b3 call 200a734 201046c: 90 10 00 11 mov %l1, %o0 2010470: 10 80 00 18 b 20104d0 2010474: 03 00 80 c4 sethi %hi(0x2031000), %g1 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 2010478: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 201047c: 30 bf ff fb b,a 2010468 <== NOT EXECUTED *segment = NULL; if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 2010480: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 2010484: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 2010488: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 201048c: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 2010490: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 2010494: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2010498: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 201049c: 82 00 60 01 inc %g1 <== NOT EXECUTED 20104a0: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 20104a4: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 20104a8: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 20104ac: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 20104b0: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 20104b4: 7f ff e8 a0 call 200a734 <== NOT EXECUTED 20104b8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20104bc: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 20104c0: 92 10 20 00 clr %o1 <== NOT EXECUTED 20104c4: 40 00 0d 36 call 201399c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 20104c8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED executing = _Thread_Executing; 20104cc: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 20104d0: 11 00 80 c3 sethi %hi(0x2030c00), %o0 20104d4: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 20104d8: 90 12 21 c8 or %o0, 0x1c8, %o0 20104dc: 92 10 00 12 mov %l2, %o1 20104e0: 40 00 11 32 call 20149a8 <_Objects_Get_no_protection> 20104e4: 94 07 bf f4 add %fp, -12, %o2 the_region = _Region_Get( id, &location ); switch ( location ) { 20104e8: c2 07 bf f4 ld [ %fp + -12 ], %g1 20104ec: 80 a0 60 01 cmp %g1, 1 20104f0: 02 80 00 0a be 2010518 20104f4: a0 10 00 08 mov %o0, %l0 20104f8: 80 a0 60 01 cmp %g1, 1 20104fc: 2a 80 00 22 bcs,a 2010584 2010500: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 2010504: 80 a0 60 02 cmp %g1, 2 2010508: 12 80 00 10 bne 2010548 201050c: b0 10 20 19 mov 0x19, %i0 2010510: 10 80 00 10 b 2010550 2010514: 05 00 80 c3 sethi %hi(0x2030c00), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 2010518: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 201051c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2010520: 82 00 60 01 inc %g1 <== NOT EXECUTED 2010524: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2010528: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 201052c: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 2010530: 94 10 20 00 clr %o2 <== NOT EXECUTED 2010534: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 2010538: 40 00 0d 3b call 2013a24 <_CORE_mutex_Surrender> <== NOT EXECUTED 201053c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 2010540: 7f ff ff 5c call 20102b0 <_Thread_Enable_dispatch> <== NOT EXECUTED 2010544: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 2010548: 81 c7 e0 08 ret <== NOT EXECUTED 201054c: 81 e8 00 00 restore <== NOT EXECUTED 2010550: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2010554: 82 00 60 01 inc %g1 2010558: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 201055c: 03 00 80 c4 sethi %hi(0x2031000), %g1 2010560: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 2010564: 94 10 20 00 clr %o2 2010568: d2 02 20 08 ld [ %o0 + 8 ], %o1 201056c: 40 00 0d 2e call 2013a24 <_CORE_mutex_Surrender> 2010570: 90 02 20 10 add %o0, 0x10, %o0 2010574: 7f ff ff 4f call 20102b0 <_Thread_Enable_dispatch> 2010578: b0 10 20 04 mov 4, %i0 201057c: 81 c7 e0 08 ret 2010580: 81 e8 00 00 restore return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( size > the_region->maximum_segment_size ) { 2010584: 80 a6 40 01 cmp %i1, %g1 2010588: 08 80 00 0f bleu 20105c4 201058c: 05 00 80 c3 sethi %hi(0x2030c00), %g2 2010590: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 2010594: 82 00 60 01 inc %g1 2010598: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 201059c: 03 00 80 c4 sethi %hi(0x2031000), %g1 20105a0: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 20105a4: 94 10 20 00 clr %o2 20105a8: d2 02 20 08 ld [ %o0 + 8 ], %o1 20105ac: 40 00 0d 1e call 2013a24 <_CORE_mutex_Surrender> 20105b0: 90 02 20 10 add %o0, 0x10, %o0 20105b4: 7f ff ff 3f call 20102b0 <_Thread_Enable_dispatch> 20105b8: b0 10 20 08 mov 8, %i0 20105bc: 81 c7 e0 08 ret 20105c0: 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 ); 20105c4: 90 02 20 68 add %o0, 0x68, %o0 20105c8: 40 00 0e 2b call 2013e74 <_Heap_Allocate> 20105cc: 92 10 00 19 mov %i1, %o1 the_segment = _Region_Allocate_segment( the_region, size ); _Region_Debug_Walk( the_region, 2 ); if ( the_segment ) { 20105d0: a2 92 20 00 orcc %o0, 0, %l1 20105d4: 02 80 00 13 be 2010620 20105d8: 07 00 80 c3 sethi %hi(0x2030c00), %g3 the_region->number_of_used_blocks += 1; 20105dc: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 20105e0: c4 00 e3 b0 ld [ %g3 + 0x3b0 ], %g2 20105e4: 82 00 60 01 inc %g1 20105e8: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 20105ec: 84 00 a0 01 inc %g2 20105f0: c4 20 e3 b0 st %g2, [ %g3 + 0x3b0 ] _RTEMS_Unlock_allocator(); 20105f4: 03 00 80 c4 sethi %hi(0x2031000), %g1 20105f8: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 20105fc: 94 10 20 00 clr %o2 2010600: d2 02 20 08 ld [ %o0 + 8 ], %o1 2010604: 40 00 0d 08 call 2013a24 <_CORE_mutex_Surrender> 2010608: 90 02 20 10 add %o0, 0x10, %o0 201060c: 7f ff ff 29 call 20102b0 <_Thread_Enable_dispatch> 2010610: b0 10 20 00 clr %i0 *segment = the_segment; 2010614: e2 27 00 00 st %l1, [ %i4 ] 2010618: 81 c7 e0 08 ret 201061c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } if ( _Options_Is_no_wait( option_set ) ) { 2010620: 80 8e a0 01 btst 1, %i2 2010624: 05 00 80 c3 sethi %hi(0x2030c00), %g2 2010628: 02 80 00 0e be 2010660 201062c: 07 00 80 c4 sethi %hi(0x2031000), %g3 2010630: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2010634: 82 00 60 01 inc %g1 2010638: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 201063c: d0 00 e0 88 ld [ %g3 + 0x88 ], %o0 2010640: 94 10 20 00 clr %o2 2010644: d2 02 20 08 ld [ %o0 + 8 ], %o1 2010648: 40 00 0c f7 call 2013a24 <_CORE_mutex_Surrender> 201064c: 90 02 20 10 add %o0, 0x10, %o0 2010650: 7f ff ff 18 call 20102b0 <_Thread_Enable_dispatch> 2010654: b0 10 20 0d mov 0xd, %i0 2010658: 81 c7 e0 08 ret 201065c: 81 e8 00 00 restore 2010660: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2010664: 82 00 60 01 inc %g1 2010668: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 201066c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2010670: 82 00 60 01 inc %g1 2010674: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] * 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(); 2010678: d0 00 e0 88 ld [ %g3 + 0x88 ], %o0 201067c: 94 10 20 00 clr %o2 2010680: d2 02 20 08 ld [ %o0 + 8 ], %o1 2010684: 40 00 0c e8 call 2013a24 <_CORE_mutex_Surrender> 2010688: 90 02 20 10 add %o0, 0x10, %o0 201068c: 7f ff ff 09 call 20102b0 <_Thread_Enable_dispatch> 2010690: 01 00 00 00 nop executing->Wait.queue = &the_region->Wait_queue; 2010694: 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 ); 2010698: 92 10 00 1b mov %i3, %o1 201069c: 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; 20106a0: 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 ); 20106a4: 15 00 80 5a sethi %hi(0x2016800), %o2 20106a8: 82 10 20 01 mov 1, %g1 20106ac: 94 12 a1 00 or %o2, 0x100, %o2 */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); executing->Wait.queue = &the_region->Wait_queue; executing->Wait.id = id; 20106b0: e4 26 20 20 st %l2, [ %i0 + 0x20 ] executing->Wait.count = size; 20106b4: f2 26 20 24 st %i1, [ %i0 + 0x24 ] executing->Wait.return_argument = segment; 20106b8: 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 ); 20106bc: 40 00 17 6b call 2016468 <_Thread_queue_Enqueue_with_handler> 20106c0: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _Thread_Enable_dispatch(); 20106c4: 7f ff fe fb call 20102b0 <_Thread_Enable_dispatch> 20106c8: 01 00 00 00 nop return (rtems_status_code) executing->Wait.return_code; 20106cc: f0 06 20 34 ld [ %i0 + 0x34 ], %i0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 20106d0: 81 c7 e0 08 ret 20106d4: 81 e8 00 00 restore 02010744 : rtems_status_code rtems_region_return_segment( Objects_Id id, void *segment ) { 2010744: 9d e3 bf 90 save %sp, -112, %sp #ifdef RTEMS_REGION_FREE_SHRED_PATTERN uint32_t size; #endif int status; _RTEMS_Lock_allocator(); 2010748: 7f ff e7 f7 call 200a724 201074c: 01 00 00 00 nop 2010750: a2 10 00 08 mov %o0, %l1 2010754: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2010758: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 201075c: 80 a0 60 00 cmp %g1, 0 2010760: 02 80 00 0b be 201078c 2010764: 03 00 80 c4 sethi %hi(0x2031000), %g1 2010768: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 201076c: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2031190 <_System_state_Current> <== NOT EXECUTED 2010770: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2010774: 08 80 00 05 bleu 2010788 <== NOT EXECUTED 2010778: 90 10 20 00 clr %o0 <== NOT EXECUTED 201077c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2010780: 40 00 0f 19 call 20143e4 <_Internal_error_Occurred> <== NOT EXECUTED 2010784: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 2010788: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 201078c: e0 00 60 88 ld [ %g1 + 0x88 ], %l0 ! 2031088 <_RTEMS_Allocator_Mutex> Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2010790: 03 00 80 c4 sethi %hi(0x2031000), %g1 2010794: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2031090 <_Thread_Executing> executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 2010798: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 201079c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 20107a0: 80 a0 60 00 cmp %g1, 0 20107a4: 22 80 00 33 be,a 2010870 20107a8: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 20107ac: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 20107b0: 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; 20107b4: 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; 20107b8: 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; 20107bc: c4 24 20 6c st %g2, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 20107c0: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 20107c4: 80 a0 e0 02 cmp %g3, 2 20107c8: 02 80 00 05 be 20107dc 20107cc: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 20107d0: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 20107d4: 32 80 00 06 bne,a 20107ec <== NOT EXECUTED 20107d8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 20107dc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 20107e0: 82 00 60 01 inc %g1 20107e4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 20107e8: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 20107ec: 80 a0 60 03 cmp %g1, 3 20107f0: 22 80 00 03 be,a 20107fc 20107f4: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 20107f8: 30 80 00 2c b,a 20108a8 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 20107fc: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 2010800: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2010804: 12 80 00 03 bne 2010810 <== NOT EXECUTED 2010808: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 201080c: 30 80 00 27 b,a 20108a8 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 2010810: 08 80 00 10 bleu 2010850 <== NOT EXECUTED 2010814: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2010818: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 201081c: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2010820: 82 00 60 01 inc %g1 <== NOT EXECUTED 2010824: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 2010828: 7f ff e7 c3 call 200a734 <== NOT EXECUTED 201082c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 2010830: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 2010834: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 2010838: 40 00 14 38 call 2015918 <_Thread_Change_priority> <== NOT EXECUTED 201083c: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 2010840: 7f ff ff b4 call 2010710 <_Thread_Enable_dispatch> <== NOT EXECUTED 2010844: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 2010848: 10 80 00 32 b 2010910 <== NOT EXECUTED 201084c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 2010850: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 2010854: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2010858: 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; 201085c: c2 24 20 60 st %g1, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 2010860: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2010864: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2010868: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 201086c: 30 80 00 0f b,a 20108a8 <== 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 ) ) { 2010870: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2010874: 32 80 00 13 bne,a 20108c0 <== NOT EXECUTED 2010878: 21 00 80 c4 sethi %hi(0x2031000), %l0 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 201087c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 ! 2031050 <_Workspace_Area+0x54> <== NOT EXECUTED 2010880: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2010884: 22 80 00 07 be,a 20108a0 <== NOT EXECUTED 2010888: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 201088c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2010890: 12 80 00 0c bne 20108c0 <== NOT EXECUTED 2010894: 21 00 80 c4 sethi %hi(0x2031000), %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; 2010898: 10 80 00 08 b 20108b8 <== NOT EXECUTED 201089c: 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++; 20108a0: 82 00 60 01 inc %g1 <== NOT EXECUTED 20108a4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 20108a8: 7f ff e7 a3 call 200a734 20108ac: 90 10 00 11 mov %l1, %o0 20108b0: 10 80 00 18 b 2010910 20108b4: 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; 20108b8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 20108bc: 30 bf ff fb b,a 20108a8 <== NOT EXECUTED 20108c0: c6 04 20 88 ld [ %l0 + 0x88 ], %g3 <== NOT EXECUTED 20108c4: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 20108c8: da 00 e0 08 ld [ %g3 + 8 ], %o5 <== NOT EXECUTED 20108cc: c8 00 60 90 ld [ %g1 + 0x90 ], %g4 <== NOT EXECUTED 20108d0: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 20108d4: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20108d8: da 21 20 20 st %o5, [ %g4 + 0x20 ] <== NOT EXECUTED 20108dc: 82 00 60 01 inc %g1 <== NOT EXECUTED 20108e0: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 20108e4: 82 00 e0 10 add %g3, 0x10, %g1 <== NOT EXECUTED 20108e8: c2 21 20 44 st %g1, [ %g4 + 0x44 ] <== NOT EXECUTED 20108ec: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 20108f0: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 20108f4: 7f ff e7 90 call 200a734 <== NOT EXECUTED 20108f8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20108fc: d0 04 20 88 ld [ %l0 + 0x88 ], %o0 <== NOT EXECUTED 2010900: 92 10 20 00 clr %o1 <== NOT EXECUTED 2010904: 40 00 0c 26 call 201399c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 2010908: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 201090c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2010910: 11 00 80 c3 sethi %hi(0x2030c00), %o0 2010914: 94 07 bf f4 add %fp, -12, %o2 2010918: 40 00 10 24 call 20149a8 <_Objects_Get_no_protection> 201091c: 90 12 21 c8 or %o0, 0x1c8, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 2010920: c2 07 bf f4 ld [ %fp + -12 ], %g1 2010924: 80 a0 60 01 cmp %g1, 1 2010928: 02 80 00 0a be 2010950 201092c: a0 10 00 08 mov %o0, %l0 2010930: 80 a0 60 01 cmp %g1, 1 2010934: 0a 80 00 22 bcs 20109bc 2010938: 92 10 00 19 mov %i1, %o1 201093c: 80 a0 60 02 cmp %g1, 2 2010940: 12 80 00 10 bne 2010980 2010944: b0 10 20 19 mov 0x19, %i0 2010948: 10 80 00 10 b 2010988 201094c: 05 00 80 c3 sethi %hi(0x2030c00), %g2 case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 2010950: 05 00 80 c3 sethi %hi(0x2030c00), %g2 <== NOT EXECUTED 2010954: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2010958: 82 00 60 01 inc %g1 <== NOT EXECUTED 201095c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED 2010960: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 2010964: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> <== NOT EXECUTED 2010968: 94 10 20 00 clr %o2 <== NOT EXECUTED 201096c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 2010970: 40 00 0c 2d call 2013a24 <_CORE_mutex_Surrender> <== NOT EXECUTED 2010974: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 2010978: 7f ff ff 66 call 2010710 <_Thread_Enable_dispatch> <== NOT EXECUTED 201097c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 2010980: 81 c7 e0 08 ret <== NOT EXECUTED 2010984: 81 e8 00 00 restore <== NOT EXECUTED 2010988: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 201098c: 82 00 60 01 inc %g1 2010990: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 2010994: 03 00 80 c4 sethi %hi(0x2031000), %g1 2010998: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 201099c: 94 10 20 00 clr %o2 20109a0: d2 02 20 08 ld [ %o0 + 8 ], %o1 20109a4: 40 00 0c 20 call 2013a24 <_CORE_mutex_Surrender> 20109a8: 90 02 20 10 add %o0, 0x10, %o0 20109ac: 7f ff ff 59 call 2010710 <_Thread_Enable_dispatch> 20109b0: b0 10 20 04 mov 4, %i0 20109b4: 81 c7 e0 08 ret 20109b8: 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 ); 20109bc: 40 00 0d 86 call 2013fd4 <_Heap_Free> 20109c0: 90 02 20 68 add %o0, 0x68, %o0 status = _Region_Free_segment( the_region, segment ); _Region_Debug_Walk( the_region, 4 ); if ( !status ) { 20109c4: 80 a2 20 00 cmp %o0, 0 20109c8: 12 80 00 0f bne 2010a04 20109cc: 05 00 80 c3 sethi %hi(0x2030c00), %g2 20109d0: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 20109d4: 82 00 60 01 inc %g1 20109d8: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] _RTEMS_Unlock_allocator(); 20109dc: 03 00 80 c4 sethi %hi(0x2031000), %g1 20109e0: d0 00 60 88 ld [ %g1 + 0x88 ], %o0 ! 2031088 <_RTEMS_Allocator_Mutex> 20109e4: 94 10 20 00 clr %o2 20109e8: d2 02 20 08 ld [ %o0 + 8 ], %o1 20109ec: 40 00 0c 0e call 2013a24 <_CORE_mutex_Surrender> 20109f0: 90 02 20 10 add %o0, 0x10, %o0 20109f4: 7f ff ff 47 call 2010710 <_Thread_Enable_dispatch> 20109f8: b0 10 20 09 mov 9, %i0 20109fc: 81 c7 e0 08 ret 2010a00: 81 e8 00 00 restore return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; 2010a04: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 _Region_Process_queue(the_region); /* unlocks allocator internally */ 2010a08: 90 10 00 10 mov %l0, %o0 if ( !status ) { _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; 2010a0c: 82 00 7f ff add %g1, -1, %g1 _Region_Process_queue(the_region); /* unlocks allocator internally */ 2010a10: b0 10 20 00 clr %i0 2010a14: 40 00 23 aa call 20198bc <_Region_Process_queue> 2010a18: c2 24 20 64 st %g1, [ %l0 + 0x64 ] return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2010a1c: 81 c7 e0 08 ret 2010a20: 81 e8 00 00 restore 020055ec : uint32_t count, rtems_attribute attribute_set, rtems_task_priority priority_ceiling, rtems_id *id ) { 20055ec: 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 ) ) 20055f0: a8 96 20 00 orcc %i0, 0, %l4 20055f4: 02 80 00 2c be 20056a4 20055f8: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 20055fc: 80 a7 20 00 cmp %i4, 0 2005600: 02 80 00 29 be 20056a4 2005604: b0 10 20 09 mov 9, %i0 return RTEMS_NOT_DEFINED; } else #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || 2005608: a4 8e a0 40 andcc %i2, 0x40, %l2 200560c: 12 80 00 06 bne 2005624 2005610: 82 0e a0 30 and %i2, 0x30, %g1 2005614: 80 8e a0 80 btst 0x80, %i2 2005618: 02 80 00 10 be 2005658 200561c: 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); 2005620: 82 0e a0 30 and %i2, 0x30, %g1 _Attributes_Is_priority_ceiling( attribute_set ) ) { if ( ! ( (_Attributes_Is_binary_semaphore( attribute_set ) || 2005624: 80 a0 60 10 cmp %g1, 0x10 2005628: 02 80 00 05 be 200563c 200562c: 80 8e a0 04 btst 4, %i2 2005630: 80 a0 60 20 cmp %g1, 0x20 2005634: 12 80 00 71 bne 20057f8 2005638: 80 8e a0 04 btst 4, %i2 200563c: 02 80 00 6f be 20057f8 2005640: 80 a4 a0 00 cmp %l2, 0 _Attributes_Is_priority( attribute_set ) ) ) return RTEMS_NOT_DEFINED; } if ( _Attributes_Is_inherit_priority( attribute_set ) && 2005644: 02 80 00 04 be 2005654 2005648: 80 8e a0 80 btst 0x80, %i2 200564c: 32 80 00 16 bne,a 20056a4 2005650: 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); 2005654: a6 0e a0 30 and %i2, 0x30, %l3 2005658: 80 a0 00 13 cmp %g0, %l3 200565c: 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 ) ) 2005660: 80 a4 60 00 cmp %l1, 0 2005664: 12 80 00 04 bne 2005674 2005668: 80 a6 60 01 cmp %i1, 1 200566c: 18 80 00 0e bgu 20056a4 2005670: b0 10 20 0a mov 0xa, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2005674: 03 00 80 5e sethi %hi(0x2017800), %g1 2005678: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> 200567c: 84 00 a0 01 inc %g2 2005680: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] * the inactive chain of free semaphore control blocks. */ RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Allocate( void ) { return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information ); 2005684: 11 00 80 5e sethi %hi(0x2017800), %o0 2005688: 40 00 06 de call 2007200 <_Objects_Allocate> 200568c: 90 12 22 60 or %o0, 0x260, %o0 ! 2017a60 <_Semaphore_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_semaphore = _Semaphore_Allocate(); if ( !the_semaphore ) { 2005690: a0 92 20 00 orcc %o0, 0, %l0 2005694: 12 80 00 06 bne 20056ac 2005698: 80 a4 60 00 cmp %l1, 0 _Thread_Enable_dispatch(); 200569c: 7f ff ff c7 call 20055b8 <_Thread_Enable_dispatch> 20056a0: b0 10 20 05 mov 5, %i0 20056a4: 81 c7 e0 08 ret 20056a8: 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 ) ) { 20056ac: 12 80 00 32 bne 2005774 20056b0: f4 24 20 10 st %i2, [ %l0 + 0x10 ] CORE_mutex_Status mutex_status; if ( _Attributes_Is_inherit_priority( attribute_set ) ) 20056b4: 80 a4 a0 00 cmp %l2, 0 20056b8: 12 80 00 06 bne 20056d0 20056bc: 82 10 20 02 mov 2, %g1 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) 20056c0: 80 8e a0 80 btst 0x80, %i2 20056c4: 02 80 00 05 be 20056d8 20056c8: 80 8e a0 04 btst 4, %i2 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; 20056cc: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 20056d0: 10 80 00 05 b 20056e4 20056d4: c2 27 bf e8 st %g1, [ %fp + -24 ] else if ( _Attributes_Is_priority( attribute_set ) ) 20056d8: 12 bf ff fe bne 20056d0 20056dc: 82 10 20 01 mov 1, %g1 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; else the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_FIFO; 20056e0: c0 27 bf e8 clr [ %fp + -24 ] if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { 20056e4: 80 a4 e0 10 cmp %l3, 0x10 20056e8: 12 80 00 0f bne 2005724 20056ec: 82 10 20 02 mov 2, %g1 the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { 20056f0: c2 07 bf e8 ld [ %fp + -24 ], %g1 20056f4: 80 a0 60 01 cmp %g1, 1 20056f8: 08 80 00 07 bleu 2005714 20056fc: c0 27 bf e0 clr [ %fp + -32 ] 2005700: 80 a0 60 03 cmp %g1, 3 2005704: 38 80 00 0b bgu,a 2005730 2005708: 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; 200570c: 10 80 00 04 b 200571c 2005710: 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; 2005714: 10 80 00 06 b 200572c 2005718: 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; 200571c: 10 80 00 04 b 200572c 2005720: 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; 2005724: 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; 2005728: 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( 200572c: 82 1e 60 01 xor %i1, 1, %g1 2005730: 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; 2005734: f6 27 bf ec st %i3, [ %fp + -20 ] mutex_status = _CORE_mutex_Initialize( 2005738: 94 60 3f ff subx %g0, -1, %o2 200573c: 90 04 20 14 add %l0, 0x14, %o0 2005740: 40 00 04 3b call 200682c <_CORE_mutex_Initialize> 2005744: 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 ) { 2005748: 80 a2 20 06 cmp %o0, 6 200574c: 12 80 00 17 bne 20057a8 2005750: 92 10 00 10 mov %l0, %o1 RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 2005754: 11 00 80 5e sethi %hi(0x2017800), %o0 <== NOT EXECUTED 2005758: 90 12 22 60 or %o0, 0x260, %o0 ! 2017a60 <_Semaphore_Information> <== NOT EXECUTED 200575c: 40 00 07 ab call 2007608 <_Objects_Free> <== NOT EXECUTED 2005760: b0 10 20 13 mov 0x13, %i0 <== NOT EXECUTED _Semaphore_Free( the_semaphore ); _Thread_Enable_dispatch(); 2005764: 7f ff ff 95 call 20055b8 <_Thread_Enable_dispatch> <== NOT EXECUTED 2005768: 01 00 00 00 nop <== NOT EXECUTED 200576c: 81 c7 e0 08 ret <== NOT EXECUTED 2005770: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_INVALID_PRIORITY; } } else { if ( _Attributes_Is_priority( attribute_set ) ) 2005774: 80 8e a0 04 btst 4, %i2 2005778: 22 80 00 04 be,a 2005788 200577c: c0 27 bf f4 clr [ %fp + -12 ] the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY; 2005780: 82 10 20 01 mov 1, %g1 2005784: c2 27 bf f4 st %g1, [ %fp + -12 ] /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 2005788: 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; 200578c: c0 27 bf e0 clr [ %fp + -32 ] the_mutex_attributes.priority_ceiling = PRIORITY_MINIMUM; 2005790: c0 27 bf ec clr [ %fp + -20 ] _CORE_semaphore_Initialize( 2005794: 94 10 00 19 mov %i1, %o2 /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 2005798: 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( 200579c: 90 04 20 14 add %l0, 0x14, %o0 20057a0: 40 00 04 d2 call 2006ae8 <_CORE_semaphore_Initialize> 20057a4: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 20057a8: 03 00 80 5e sethi %hi(0x2017800), %g1 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 20057ac: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 20057b0: 88 10 62 60 or %g1, 0x260, %g4 20057b4: c4 11 20 10 lduh [ %g4 + 0x10 ], %g2 20057b8: 03 00 00 3f sethi %hi(0xfc00), %g1 20057bc: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 20057c0: 82 08 c0 01 and %g3, %g1, %g1 20057c4: 80 a0 40 02 cmp %g1, %g2 20057c8: 38 80 00 06 bgu,a 20057e0 20057cc: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED information->local_table[ index ] = the_object; 20057d0: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 20057d4: 83 28 60 02 sll %g1, 2, %g1 20057d8: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Semaphore_Information, &the_semaphore->Object, (Objects_Name) name ); *id = the_semaphore->Object.id; 20057dc: 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; 20057e0: e8 24 20 0c st %l4, [ %l0 + 0xc ] 20057e4: c2 27 00 00 st %g1, [ %i4 ] the_semaphore->Object.id, name, 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); 20057e8: 7f ff ff 74 call 20055b8 <_Thread_Enable_dispatch> 20057ec: b0 10 20 00 clr %i0 20057f0: 81 c7 e0 08 ret 20057f4: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; 20057f8: b0 10 20 0b mov 0xb, %i0 } 20057fc: 81 c7 e0 08 ret 2005800: 81 e8 00 00 restore 02005838 : #endif rtems_status_code rtems_semaphore_delete( rtems_id id ) { 2005838: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 200583c: 11 00 80 5e sethi %hi(0x2017800), %o0 2005840: 92 10 00 18 mov %i0, %o1 2005844: 90 12 22 60 or %o0, 0x260, %o0 2005848: 40 00 07 b2 call 2007710 <_Objects_Get> 200584c: 94 07 bf f4 add %fp, -12, %o2 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 2005850: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005854: 80 a0 60 00 cmp %g1, 0 2005858: 02 80 00 07 be 2005874 200585c: b0 10 00 08 mov %o0, %i0 2005860: 80 a0 60 02 cmp %g1, 2 2005864: 08 80 00 10 bleu 20058a4 2005868: b0 10 20 04 mov 4, %i0 200586c: 81 c7 e0 08 ret <== NOT EXECUTED 2005870: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED 2005874: 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) ) { 2005878: 84 88 60 30 andcc %g1, 0x30, %g2 200587c: 22 80 00 12 be,a 20058c4 2005880: 90 02 20 14 add %o0, 0x14, %o0 if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) && 2005884: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 2005888: 80 a0 60 00 cmp %g1, 0 200588c: 12 80 00 08 bne 20058ac 2005890: 80 a0 a0 20 cmp %g2, 0x20 2005894: 02 80 00 07 be 20058b0 2005898: 90 06 20 14 add %i0, 0x14, %o0 !_Attributes_Is_simple_binary_semaphore( the_semaphore->attribute_set ) ) { _Thread_Enable_dispatch(); 200589c: 7f ff ff da call 2005804 <_Thread_Enable_dispatch> 20058a0: b0 10 20 0c mov 0xc, %i0 20058a4: 81 c7 e0 08 ret 20058a8: 81 e8 00 00 restore return RTEMS_RESOURCE_IN_USE; } _CORE_mutex_Flush( 20058ac: 90 06 20 14 add %i0, 0x14, %o0 20058b0: 92 10 20 00 clr %o1 20058b4: 40 00 03 da call 200681c <_CORE_mutex_Flush> 20058b8: 94 10 20 04 mov 4, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 20058bc: 10 80 00 06 b 20058d4 20058c0: 03 00 80 5e sethi %hi(0x2017800), %g1 &the_semaphore->Core_control.mutex, SEMAPHORE_MP_OBJECT_WAS_DELETED, CORE_MUTEX_WAS_DELETED ); } else { _CORE_semaphore_Flush( 20058c4: 92 10 20 00 clr %o1 20058c8: 40 00 04 84 call 2006ad8 <_CORE_semaphore_Flush> 20058cc: 94 10 20 02 mov 2, %o2 20058d0: 03 00 80 5e sethi %hi(0x2017800), %g1 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 20058d4: c6 06 20 08 ld [ %i0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 20058d8: 90 10 62 60 or %g1, 0x260, %o0 20058dc: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 20058e0: 03 00 00 3f sethi %hi(0xfc00), %g1 20058e4: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 20058e8: 82 08 c0 01 and %g3, %g1, %g1 20058ec: 80 a0 40 02 cmp %g1, %g2 20058f0: 18 80 00 05 bgu 2005904 20058f4: 92 10 00 18 mov %i0, %o1 information->local_table[ index ] = the_object; 20058f8: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 20058fc: 83 28 60 02 sll %g1, 2, %g1 2005900: 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; 2005904: c0 26 20 0c clr [ %i0 + 0xc ] RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 2005908: 40 00 07 40 call 2007608 <_Objects_Free> 200590c: b0 10 20 00 clr %i0 0, /* Not used */ 0 /* Not used */ ); } #endif _Thread_Enable_dispatch(); 2005910: 7f ff ff bd call 2005804 <_Thread_Enable_dispatch> 2005914: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005918: 81 c7 e0 08 ret 200591c: 81 e8 00 00 restore 02005d7c : #endif rtems_status_code rtems_semaphore_flush( rtems_id id ) { 2005d7c: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 2005d80: 11 00 80 65 sethi %hi(0x2019400), %o0 2005d84: 92 10 00 18 mov %i0, %o1 2005d88: 90 12 21 28 or %o0, 0x128, %o0 2005d8c: 40 00 08 2f call 2007e48 <_Objects_Get> 2005d90: 94 07 bf f4 add %fp, -12, %o2 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 2005d94: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005d98: 80 a0 60 00 cmp %g1, 0 2005d9c: 22 80 00 07 be,a 2005db8 2005da0: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 2005da4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 2005da8: 08 80 00 19 bleu 2005e0c <== NOT EXECUTED 2005dac: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 2005db0: 81 c7 e0 08 ret <== NOT EXECUTED 2005db4: 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) ) { 2005db8: 80 88 60 30 btst 0x30, %g1 2005dbc: 02 80 00 06 be 2005dd4 2005dc0: 90 02 20 14 add %o0, 0x14, %o0 _CORE_mutex_Flush( 2005dc4: 92 10 20 00 clr %o1 2005dc8: 40 00 04 63 call 2006f54 <_CORE_mutex_Flush> 2005dcc: 94 10 20 01 mov 1, %o2 2005dd0: 30 80 00 04 b,a 2005de0 &the_semaphore->Core_control.mutex, SEND_OBJECT_WAS_DELETED, CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT ); } else { _CORE_semaphore_Flush( 2005dd4: 92 10 20 00 clr %o1 <== NOT EXECUTED 2005dd8: 40 00 05 0e call 2007210 <_CORE_semaphore_Flush> <== NOT EXECUTED 2005ddc: 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 ) 2005de0: 03 00 80 65 sethi %hi(0x2019400), %g1 2005de4: c4 00 62 70 ld [ %g1 + 0x270 ], %g2 ! 2019670 <_Thread_Dispatch_disable_level> 2005de8: b0 10 20 00 clr %i0 2005dec: 84 00 bf ff add %g2, -1, %g2 2005df0: c4 20 62 70 st %g2, [ %g1 + 0x270 ] 2005df4: c2 00 62 70 ld [ %g1 + 0x270 ], %g1 2005df8: 80 a0 60 00 cmp %g1, 0 2005dfc: 12 80 00 04 bne 2005e0c 2005e00: 01 00 00 00 nop _Thread_Dispatch(); 2005e04: 40 00 0c d7 call 2009160 <_Thread_Dispatch> 2005e08: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005e0c: 81 c7 e0 08 ret 2005e10: 81 e8 00 00 restore 02005954 : rtems_status_code rtems_semaphore_obtain( rtems_id id, uint32_t option_set, rtems_interval timeout ) { 2005954: 9d e3 bf 90 save %sp, -112, %sp Objects_Id id, Objects_Locations *location, ISR_Level *level ) { return (Semaphore_Control *) 2005958: 11 00 80 5e sethi %hi(0x2017800), %o0 200595c: 92 10 00 18 mov %i0, %o1 2005960: 90 12 22 60 or %o0, 0x260, %o0 2005964: 94 07 bf f4 add %fp, -12, %o2 2005968: 40 00 07 4c call 2007698 <_Objects_Get_isr_disable> 200596c: 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 ) { 2005970: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005974: 80 a0 60 00 cmp %g1, 0 2005978: 02 80 00 07 be 2005994 200597c: a0 10 00 08 mov %o0, %l0 2005980: 80 a0 60 02 cmp %g1, 2 2005984: 08 80 00 ab bleu 2005c30 2005988: 90 10 20 04 mov 4, %o0 200598c: 10 80 00 a9 b 2005c30 <== NOT EXECUTED 2005990: 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) ) { 2005994: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 2005998: 80 88 60 30 btst 0x30, %g1 200599c: 02 80 00 7c be 2005b8c 20059a0: 03 00 80 5f sethi %hi(0x2017c00), %g1 _CORE_mutex_Seize( 20059a4: 03 00 80 5e sethi %hi(0x2017800), %g1 20059a8: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> 20059ac: 80 a0 60 00 cmp %g1, 0 20059b0: 02 80 00 0e be 20059e8 20059b4: 03 00 80 5f sethi %hi(0x2017c00), %g1 20059b8: 80 8e 60 01 btst 1, %i1 20059bc: 12 80 00 0c bne 20059ec 20059c0: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 20059c4: 03 00 80 5f sethi %hi(0x2017c00), %g1 20059c8: c2 00 61 90 ld [ %g1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> 20059cc: 80 a0 60 01 cmp %g1, 1 20059d0: 08 80 00 05 bleu 20059e4 20059d4: 90 10 20 00 clr %o0 20059d8: 92 10 20 00 clr %o1 <== NOT EXECUTED 20059dc: 40 00 05 dc call 200714c <_Internal_error_Occurred> <== NOT EXECUTED 20059e0: 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; 20059e4: 03 00 80 5f sethi %hi(0x2017c00), %g1 20059e8: c4 00 60 90 ld [ %g1 + 0x90 ], %g2 ! 2017c90 <_Thread_Executing> CORE_mutex_Control *the_mutex, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 20059ec: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 20059f0: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 20059f4: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 20059f8: 80 a0 60 00 cmp %g1, 0 20059fc: 22 80 00 33 be,a 2005ac8 2005a00: c2 04 20 70 ld [ %l0 + 0x70 ], %g1 the_mutex->lock = CORE_MUTEX_LOCKED; 2005a04: c0 24 20 64 clr [ %l0 + 0x64 ] the_mutex->holder = executing; 2005a08: c4 24 20 70 st %g2, [ %l0 + 0x70 ] the_mutex->holder_id = executing->Object.id; 2005a0c: 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; 2005a10: 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; 2005a14: c2 24 20 74 st %g1, [ %l0 + 0x74 ] the_mutex->nest_count = 1; 2005a18: 82 10 20 01 mov 1, %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 2005a1c: 80 a0 e0 02 cmp %g3, 2 2005a20: 02 80 00 05 be 2005a34 2005a24: c2 24 20 68 st %g1, [ %l0 + 0x68 ] 2005a28: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 2005a2c: 32 80 00 06 bne,a 2005a44 <== NOT EXECUTED 2005a30: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 2005a34: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 2005a38: 82 00 60 01 inc %g1 2005a3c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 2005a40: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 2005a44: 80 a0 60 03 cmp %g1, 3 2005a48: 22 80 00 03 be,a 2005a54 2005a4c: c6 04 20 60 ld [ %l0 + 0x60 ], %g3 <== NOT EXECUTED _ISR_Enable( level ); 2005a50: 30 80 00 2e b,a 2005b08 { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 2005a54: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 2005a58: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 2005a5c: 12 80 00 03 bne 2005a68 <== NOT EXECUTED 2005a60: 01 00 00 00 nop <== NOT EXECUTED _ISR_Enable( level ); 2005a64: 30 80 00 29 b,a 2005b08 <== NOT EXECUTED return 0; } if ( current > ceiling ) { 2005a68: 28 80 00 10 bleu,a 2005aa8 <== NOT EXECUTED 2005a6c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2005a70: 05 00 80 5e sethi %hi(0x2017800), %g2 <== NOT EXECUTED 2005a74: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2017bb0 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2005a78: 82 00 60 01 inc %g1 <== NOT EXECUTED 2005a7c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 2005a80: 7f ff f0 b4 call 2001d50 <== NOT EXECUTED 2005a84: 01 00 00 00 nop <== NOT EXECUTED _Thread_Change_priority( 2005a88: d2 04 20 60 ld [ %l0 + 0x60 ], %o1 <== NOT EXECUTED 2005a8c: d0 04 20 70 ld [ %l0 + 0x70 ], %o0 <== NOT EXECUTED 2005a90: 40 00 0a e8 call 2008630 <_Thread_Change_priority> <== NOT EXECUTED 2005a94: 94 10 20 00 clr %o2 <== NOT EXECUTED the_mutex->holder, the_mutex->Attributes.priority_ceiling, FALSE ); _Thread_Enable_dispatch(); 2005a98: 7f ff ff a2 call 2005920 <_Thread_Enable_dispatch> <== NOT EXECUTED 2005a9c: 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( 2005aa0: 10 80 00 36 b 2005b78 <== NOT EXECUTED 2005aa4: 03 00 80 5f sethi %hi(0x2017c00), %g1 <== NOT EXECUTED return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 2005aa8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 2005aac: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 2005ab0: 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; 2005ab4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ 2005ab8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 2005abc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2005ac0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 2005ac4: 30 80 00 11 b,a 2005b08 <== 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 ) ) { 2005ac8: 80 a0 40 02 cmp %g1, %g2 2005acc: 12 80 00 13 bne 2005b18 2005ad0: 80 8e 60 01 btst 1, %i1 switch ( the_mutex->Attributes.lock_nesting_behavior ) { 2005ad4: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 2005ad8: 80 a0 60 00 cmp %g1, 0 2005adc: 22 80 00 07 be,a 2005af8 2005ae0: c2 04 20 68 ld [ %l0 + 0x68 ], %g1 2005ae4: 80 a0 60 01 cmp %g1, 1 2005ae8: 12 80 00 0c bne 2005b18 2005aec: 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; 2005af0: 10 80 00 05 b 2005b04 <== NOT EXECUTED 2005af4: 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++; 2005af8: 82 00 60 01 inc %g1 2005afc: c2 24 20 68 st %g1, [ %l0 + 0x68 ] _ISR_Enable( level ); 2005b00: 30 80 00 02 b,a 2005b08 return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 2005b04: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 2005b08: 7f ff f0 92 call 2001d50 2005b0c: 01 00 00 00 nop 2005b10: 10 80 00 1a b 2005b78 2005b14: 03 00 80 5f sethi %hi(0x2017c00), %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 2005b18: 02 80 00 08 be 2005b38 2005b1c: 23 00 80 5f sethi %hi(0x2017c00), %l1 2005b20: 7f ff f0 8c call 2001d50 2005b24: d0 07 bf f0 ld [ %fp + -16 ], %o0 2005b28: c4 04 60 90 ld [ %l1 + 0x90 ], %g2 2005b2c: 82 10 20 01 mov 1, %g1 2005b30: 10 80 00 11 b 2005b74 2005b34: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] 2005b38: c6 04 60 90 ld [ %l1 + 0x90 ], %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; 2005b3c: 82 10 20 01 mov 1, %g1 2005b40: 05 00 80 5e sethi %hi(0x2017800), %g2 2005b44: c2 24 20 44 st %g1, [ %l0 + 0x44 ] 2005b48: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2005b4c: f0 20 e0 20 st %i0, [ %g3 + 0x20 ] 2005b50: 82 00 60 01 inc %g1 2005b54: a0 04 20 14 add %l0, 0x14, %l0 2005b58: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 2005b5c: e0 20 e0 44 st %l0, [ %g3 + 0x44 ] 2005b60: 7f ff f0 7c call 2001d50 2005b64: d0 07 bf f0 ld [ %fp + -16 ], %o0 2005b68: 90 10 00 10 mov %l0, %o0 2005b6c: 40 00 03 5e call 20068e4 <_CORE_mutex_Seize_interrupt_blocking> 2005b70: 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( 2005b74: 03 00 80 5f sethi %hi(0x2017c00), %g1 2005b78: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2017c90 <_Thread_Executing> 2005b7c: 40 00 00 62 call 2005d04 <_Semaphore_Translate_core_mutex_return_code> 2005b80: 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 */ } 2005b84: 81 c7 e0 08 ret 2005b88: 91 e8 00 08 restore %g0, %o0, %o0 Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 2005b8c: e2 00 60 90 ld [ %g1 + 0x90 ], %l1 Watchdog_Interval timeout, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 2005b90: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL; 2005b94: c0 24 60 34 clr [ %l1 + 0x34 ] if ( the_semaphore->count != 0 ) { 2005b98: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 2005b9c: 80 a0 60 00 cmp %g1, 0 2005ba0: 02 80 00 08 be 2005bc0 2005ba4: 80 8e 60 01 btst 1, %i1 the_semaphore->count -= 1; 2005ba8: 82 00 7f ff add %g1, -1, %g1 2005bac: c2 24 20 5c st %g1, [ %l0 + 0x5c ] _ISR_Enable( level ); 2005bb0: 7f ff f0 68 call 2001d50 2005bb4: 01 00 00 00 nop id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, &level ); return _Semaphore_Translate_core_semaphore_return_code( 2005bb8: 10 80 00 1b b 2005c24 2005bbc: 03 00 80 5f sethi %hi(0x2017c00), %g1 return; } if ( !wait ) { 2005bc0: 02 80 00 07 be 2005bdc 2005bc4: 05 00 80 5e sethi %hi(0x2017800), %g2 _ISR_Enable( level ); 2005bc8: 7f ff f0 62 call 2001d50 2005bcc: 01 00 00 00 nop executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT; 2005bd0: 82 10 20 01 mov 1, %g1 ! 1 2005bd4: 10 80 00 13 b 2005c20 2005bd8: c2 24 60 34 st %g1, [ %l1 + 0x34 ] 2005bdc: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 2005be0: 82 00 60 01 inc %g1 2005be4: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] 2005be8: 82 10 20 01 mov 1, %g1 2005bec: 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; 2005bf0: 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; 2005bf4: a0 04 20 14 add %l0, 0x14, %l0 2005bf8: e0 24 60 44 st %l0, [ %l1 + 0x44 ] executing->Wait.id = id; _ISR_Enable( level ); 2005bfc: 7f ff f0 55 call 2001d50 2005c00: 01 00 00 00 nop _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout ); 2005c04: 90 10 00 10 mov %l0, %o0 2005c08: 92 10 00 1a mov %i2, %o1 2005c0c: 15 00 80 25 sethi %hi(0x2009400), %o2 2005c10: 40 00 0d 5c call 2009180 <_Thread_queue_Enqueue_with_handler> 2005c14: 94 12 a2 18 or %o2, 0x218, %o2 ! 2009618 <_Thread_queue_Timeout> _Thread_Enable_dispatch(); 2005c18: 7f ff ff 42 call 2005920 <_Thread_Enable_dispatch> 2005c1c: 01 00 00 00 nop 2005c20: 03 00 80 5f sethi %hi(0x2017c00), %g1 2005c24: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2017c90 <_Thread_Executing> 2005c28: 40 00 00 41 call 2005d2c <_Semaphore_Translate_core_semaphore_return_code> 2005c2c: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005c30: b0 10 00 08 mov %o0, %i0 2005c34: 81 c7 e0 08 ret 2005c38: 81 e8 00 00 restore 02005c70 : #endif rtems_status_code rtems_semaphore_release( rtems_id id ) { 2005c70: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 2005c74: 11 00 80 5e sethi %hi(0x2017800), %o0 2005c78: 92 10 00 18 mov %i0, %o1 2005c7c: 90 12 22 60 or %o0, 0x260, %o0 2005c80: 40 00 06 a4 call 2007710 <_Objects_Get> 2005c84: 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 ) { 2005c88: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005c8c: 80 a0 60 00 cmp %g1, 0 2005c90: 22 80 00 07 be,a 2005cac 2005c94: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 2005c98: 80 a0 60 02 cmp %g1, 2 2005c9c: 08 80 00 17 bleu 2005cf8 2005ca0: 90 10 20 04 mov 4, %o0 2005ca4: 10 80 00 15 b 2005cf8 <== NOT EXECUTED 2005ca8: 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) ) { 2005cac: 80 88 60 30 btst 0x30, %g1 2005cb0: 02 80 00 0b be 2005cdc 2005cb4: 90 02 20 14 add %o0, 0x14, %o0 mutex_status = _CORE_mutex_Surrender( 2005cb8: 92 10 00 18 mov %i0, %o1 2005cbc: 40 00 03 2c call 200696c <_CORE_mutex_Surrender> 2005cc0: 94 10 20 00 clr %o2 &the_semaphore->Core_control.mutex, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); 2005cc4: 7f ff ff de call 2005c3c <_Thread_Enable_dispatch> 2005cc8: a0 10 00 08 mov %o0, %l0 return _Semaphore_Translate_core_mutex_return_code( mutex_status ); 2005ccc: 40 00 00 0e call 2005d04 <_Semaphore_Translate_core_mutex_return_code> 2005cd0: 90 10 00 10 mov %l0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005cd4: 81 c7 e0 08 ret 2005cd8: 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( 2005cdc: 92 10 00 18 mov %i0, %o1 2005ce0: 40 00 03 91 call 2006b24 <_CORE_semaphore_Surrender> 2005ce4: 94 10 20 00 clr %o2 &the_semaphore->Core_control.semaphore, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); 2005ce8: 7f ff ff d5 call 2005c3c <_Thread_Enable_dispatch> 2005cec: a0 10 00 08 mov %o0, %l0 return 2005cf0: 40 00 00 0f call 2005d2c <_Semaphore_Translate_core_semaphore_return_code> 2005cf4: 90 10 00 10 mov %l0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2005cf8: b0 10 00 08 mov %o0, %i0 2005cfc: 81 c7 e0 08 ret 2005d00: 81 e8 00 00 restore 020157a0 : */ void rtems_shutdown_executive( uint32_t result ) { 20157a0: 9d e3 bf 98 save %sp, -104, %sp if ( _System_state_Current != SYSTEM_STATE_SHUTDOWN ) { 20157a4: 33 00 80 5f sethi %hi(0x2017c00), %i1 20157a8: c2 06 61 90 ld [ %i1 + 0x190 ], %g1 ! 2017d90 <_System_state_Current> 20157ac: 80 a0 60 04 cmp %g1, 4 20157b0: 02 80 00 0c be 20157e0 20157b4: 11 00 80 5a sethi %hi(0x2016800), %o0 #if defined(__USE_INIT_FINI__) extern void _fini( void ); atexit( _fini ); 20157b8: 7f ff e0 1d call 200d82c 20157bc: 90 12 22 a4 or %o0, 0x2a4, %o0 ! 2016aa4 <_fini> * routine which initialized the system. */ RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) { _Context_Switch( &_Thread_Executing->Registers, &_Thread_BSP_context ); 20157c0: 03 00 80 5f sethi %hi(0x2017c00), %g1 20157c4: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2017c90 <_Thread_Executing> 20157c8: 82 10 20 04 mov 4, %g1 20157cc: b0 06 20 e0 add %i0, 0xe0, %i0 20157d0: c2 26 61 90 st %g1, [ %i1 + 0x190 ] 20157d4: 33 00 80 5e sethi %hi(0x2017800), %i1 20157d8: 7f ff d2 fa call 200a3c0 <_CPU_Context_switch> 20157dc: 93 ee 63 28 restore %i1, 0x328, %o1 20157e0: 81 c7 e0 08 ret <== NOT EXECUTED 20157e4: 81 e8 00 00 restore <== NOT EXECUTED 0201124c : rtems_status_code rtems_signal_send( Objects_Id id, rtems_signal_set signal_set ) { 201124c: 9d e3 bf 90 save %sp, -112, %sp 2011250: 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 ) 2011254: 80 a6 60 00 cmp %i1, 0 2011258: 02 80 00 47 be 2011374 201125c: 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 ) ) { 2011260: 80 a2 60 00 cmp %o1, 0 2011264: 12 80 00 0a bne 201128c 2011268: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 201126c: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2011270: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2030fb0 <_Thread_Dispatch_disable_level> 2011274: 84 00 a0 01 inc %g2 2011278: 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; 201127c: 03 00 80 c4 sethi %hi(0x2031000), %g1 2011280: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2031090 <_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; 2011284: 10 80 00 18 b 20112e4 2011288: 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); 201128c: 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 ) { 2011290: 80 a0 a0 04 cmp %g2, 4 2011294: 18 80 00 0e bgu 20112cc 2011298: 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 :) */ 201129c: 83 32 60 1b srl %o1, 0x1b, %g1 20112a0: 80 a0 60 01 cmp %g1, 1 20112a4: 12 80 00 0a bne 20112cc 20112a8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 20112ac: 83 28 a0 02 sll %g2, 2, %g1 20112b0: 05 00 80 c3 sethi %hi(0x2030c00), %g2 20112b4: 84 10 a3 10 or %g2, 0x310, %g2 ! 2030f10 <_Objects_Information_table> 20112b8: c2 00 80 01 ld [ %g2 + %g1 ], %g1 20112bc: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 20112c0: 80 a2 20 00 cmp %o0, 0 20112c4: 12 80 00 05 bne 20112d8 20112c8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 20112cc: b0 10 20 00 clr %i0 20112d0: 10 80 00 05 b 20112e4 20112d4: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 20112d8: 40 00 0d c8 call 20149f8 <_Objects_Get> 20112dc: 94 07 bf f4 add %fp, -12, %o2 20112e0: b0 10 00 08 mov %o0, %i0 return RTEMS_INVALID_NUMBER; the_thread = _Thread_Get( id, &location ); switch ( location ) { 20112e4: c2 07 bf f4 ld [ %fp + -12 ], %g1 20112e8: 80 a0 60 00 cmp %g1, 0 20112ec: 22 80 00 07 be,a 2011308 20112f0: d2 06 21 70 ld [ %i0 + 0x170 ], %o1 20112f4: 80 a0 60 02 cmp %g1, 2 20112f8: 08 80 00 1f bleu 2011374 20112fc: b0 10 20 04 mov 4, %i0 2011300: 81 c7 e0 08 ret <== NOT EXECUTED 2011304: 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 ) ) { 2011308: c2 02 60 4c ld [ %o1 + 0x4c ], %g1 201130c: 80 a0 60 00 cmp %g1, 0 2011310: 02 80 00 1b be 201137c 2011314: 01 00 00 00 nop if ( asr->is_enabled ) { 2011318: c2 02 60 48 ld [ %o1 + 0x48 ], %g1 201131c: 80 a0 60 00 cmp %g1, 0 2011320: 02 80 00 11 be 2011364 2011324: 90 10 00 19 mov %i1, %o0 _ASR_Post_signals( signal_set, &asr->signals_posted ); 2011328: 7f ff ff b3 call 20111f4 <_ASR_Post_signals> 201132c: 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 ) ) 2011330: 03 00 80 c4 sethi %hi(0x2031000), %g1 2011334: c2 00 60 78 ld [ %g1 + 0x78 ], %g1 ! 2031078 <_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; 2011338: 84 10 20 01 mov 1, %g2 if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 201133c: 80 a0 60 00 cmp %g1, 0 2011340: 02 80 00 0b be 201136c 2011344: c4 26 20 78 st %g2, [ %i0 + 0x78 ] 2011348: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED 201134c: c2 00 60 90 ld [ %g1 + 0x90 ], %g1 ! 2031090 <_Thread_Executing> <== NOT EXECUTED 2011350: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 2011354: 12 80 00 06 bne 201136c <== NOT EXECUTED 2011358: 03 00 80 c4 sethi %hi(0x2031000), %g1 <== NOT EXECUTED _ISR_Signals_to_thread_executing = TRUE; 201135c: 10 80 00 04 b 201136c <== NOT EXECUTED 2011360: c4 20 61 38 st %g2, [ %g1 + 0x138 ] ! 2031138 <_ISR_Signals_to_thread_executing> <== NOT EXECUTED } else { _ASR_Post_signals( signal_set, &asr->signals_pending ); 2011364: 7f ff ff a4 call 20111f4 <_ASR_Post_signals> 2011368: 92 02 60 58 add %o1, 0x58, %o1 } _Thread_Enable_dispatch(); 201136c: 7f ff ff ab call 2011218 <_Thread_Enable_dispatch> 2011370: b0 10 20 00 clr %i0 2011374: 81 c7 e0 08 ret 2011378: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 201137c: 7f ff ff a7 call 2011218 <_Thread_Enable_dispatch> 2011380: b0 10 20 0b mov 0xb, %i0 return RTEMS_NOT_DEFINED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2011384: 81 c7 e0 08 ret 2011388: 81 e8 00 00 restore 020028d8 : /* * Check if blown */ boolean rtems_stack_checker_is_blown( void ) { 20028d8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack; 20028dc: 03 00 80 6e sethi %hi(0x201b800), %g1 <== NOT EXECUTED 20028e0: f0 00 63 80 ld [ %g1 + 0x380 ], %i0 ! 201bb80 <_Thread_Executing> <== NOT EXECUTED /* * Check for an out of bounds stack pointer */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); 20028e4: 7f ff ff d7 call 2002840 <== NOT EXECUTED 20028e8: 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 ) { 20028ec: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED 20028f0: c2 00 61 b4 ld [ %g1 + 0x1b4 ], %g1 ! 201b5b4 <== NOT EXECUTED /* * Check for an out of bounds stack pointer */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); 20028f4: 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 ) { 20028f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20028fc: 02 80 00 0a be 2002924 <== NOT EXECUTED 2002900: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED pattern_ok = (!memcmp( 2002904: d0 06 20 d4 ld [ %i0 + 0xd4 ], %o0 <== NOT EXECUTED 2002908: 13 00 80 6e sethi %hi(0x201b800), %o1 <== NOT EXECUTED 200290c: 90 02 20 08 add %o0, 8, %o0 <== NOT EXECUTED 2002910: 92 12 60 bc or %o1, 0xbc, %o1 <== NOT EXECUTED 2002914: 40 00 33 26 call 200f5ac <== NOT EXECUTED 2002918: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 200291c: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 2002920: 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 ) 2002924: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2002928: 02 80 00 06 be 2002940 <== NOT EXECUTED 200292c: 03 00 80 6e sethi %hi(0x201b800), %g1 <== NOT EXECUTED 2002930: 80 a2 60 00 cmp %o1, 0 <== NOT EXECUTED 2002934: 12 80 00 06 bne 200294c <== NOT EXECUTED 2002938: 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 ); 200293c: 03 00 80 6e sethi %hi(0x201b800), %g1 <== NOT EXECUTED 2002940: d0 00 63 80 ld [ %g1 + 0x380 ], %o0 ! 201bb80 <_Thread_Executing> <== NOT EXECUTED 2002944: 7f ff ff cb call 2002870 <== NOT EXECUTED 2002948: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return TRUE; } 200294c: 81 c7 e0 08 ret <== NOT EXECUTED 2002950: 81 e8 00 00 restore <== NOT EXECUTED 02002824 : } void rtems_stack_checker_report_usage( void ) { rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin ); 2002824: 13 00 80 0f sethi %hi(0x2003c00), %o1 <== NOT EXECUTED 2002828: 90 10 20 00 clr %o0 <== NOT EXECUTED 200282c: 92 12 63 94 or %o1, 0x394, %o1 <== NOT EXECUTED 2002830: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2002834: 7f ff ff e2 call 20027bc <== NOT EXECUTED 2002838: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 200283c: 01 00 00 00 nop 020027bc : void rtems_stack_checker_report_usage_with_plugin( void *context, rtems_printk_plugin_t print ) { 20027bc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (Stack_check_Initialized == 0) 20027c0: 03 00 80 6d sethi %hi(0x201b400), %g1 <== NOT EXECUTED 20027c4: c2 00 61 b4 ld [ %g1 + 0x1b4 ], %g1 ! 201b5b4 <== NOT EXECUTED 20027c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20027cc: 02 80 00 14 be 200281c <== NOT EXECUTED 20027d0: 23 00 80 6d sethi %hi(0x201b400), %l1 <== NOT EXECUTED return; print_context = context; print_handler = print; 20027d4: 21 00 80 6d sethi %hi(0x201b400), %l0 <== NOT EXECUTED ) { if (Stack_check_Initialized == 0) return; print_context = context; 20027d8: f0 24 61 b8 st %i0, [ %l1 + 0x1b8 ] <== NOT EXECUTED print_handler = print; 20027dc: f2 24 21 bc st %i1, [ %l0 + 0x1bc ] <== NOT EXECUTED (*print)( context, "Stack usage by thread\n"); 20027e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20027e4: 13 00 80 63 sethi %hi(0x2018c00), %o1 <== NOT EXECUTED 20027e8: 9f c6 40 00 call %i1 <== NOT EXECUTED 20027ec: 92 12 63 78 or %o1, 0x378, %o1 ! 2018f78 <== NOT EXECUTED (*print)( context, 20027f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 20027f4: 13 00 80 63 sethi %hi(0x2018c00), %o1 <== NOT EXECUTED 20027f8: 9f c6 40 00 call %i1 <== NOT EXECUTED 20027fc: 92 12 63 90 or %o1, 0x390, %o1 ! 2018f90 <== 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 ); 2002800: 11 00 80 09 sethi %hi(0x2002400), %o0 <== NOT EXECUTED 2002804: 40 00 17 44 call 2008514 <== NOT EXECUTED 2002808: 90 12 22 b4 or %o0, 0x2b4, %o0 ! 20026b4 <== NOT EXECUTED /* dump interrupt stack info if any */ Stack_check_Dump_threads_usage((Thread_Control *) -1); 200280c: 7f ff ff aa call 20026b4 <== NOT EXECUTED 2002810: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED print_context = NULL; 2002814: c0 24 61 b8 clr [ %l1 + 0x1b8 ] <== NOT EXECUTED print_handler = NULL; 2002818: c0 24 21 bc clr [ %l0 + 0x1bc ] <== NOT EXECUTED 200281c: 81 c7 e0 08 ret <== NOT EXECUTED 2002820: 81 e8 00 00 restore <== NOT EXECUTED 02002954 : */ void rtems_stack_checker_switch_extension( Thread_Control *running, Thread_Control *heir ) { 2002954: 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; 2002958: 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 ); 200295c: 7f ff ff b9 call 2002840 2002960: 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; 2002964: 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 ); 2002968: a2 10 00 08 mov %o0, %l1 pattern_ok = (!memcmp( pattern, 200296c: 13 00 80 6e sethi %hi(0x201b800), %o1 2002970: 90 10 00 10 mov %l0, %o0 2002974: 92 12 60 bc or %o1, 0xbc, %o1 2002978: 40 00 33 0d call 200f5ac 200297c: 94 10 20 10 mov 0x10, %o2 2002980: 80 a0 00 08 cmp %g0, %o0 2002984: b2 60 3f ff subx %g0, -1, %i1 (void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES)); if ( !sp_ok || !pattern_ok ) { 2002988: 80 a4 60 00 cmp %l1, 0 200298c: 02 80 00 04 be 200299c 2002990: 80 a6 60 00 cmp %i1, 0 2002994: 12 80 00 04 bne 20029a4 2002998: 01 00 00 00 nop Stack_check_report_blown_task( running, pattern_ok ); 200299c: 7f ff ff b5 call 2002870 <== NOT EXECUTED 20029a0: 81 e8 00 00 restore <== NOT EXECUTED 20029a4: 81 c7 e0 08 ret 20029a8: 81 e8 00 00 restore 02005fc0 : const char * rtems_status_text( rtems_status_code status ) { 2005fc0: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED return rtems_assoc_name_by_local(rtems_status_assoc, status); 2005fc4: 11 00 80 91 sethi %hi(0x2024400), %o0 <== NOT EXECUTED 2005fc8: 90 12 20 30 or %o0, 0x30, %o0 ! 2024430 <== NOT EXECUTED 2005fcc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2005fd0: 40 00 2e c3 call 2011adc <== NOT EXECUTED 2005fd4: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2005fd8: 01 00 00 00 nop 02005f10 : */ rtems_status_code rtems_task_delete( Objects_Id id ) { 2005f10: 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 ) ) { 2005f14: 92 96 20 00 orcc %i0, 0, %o1 2005f18: 12 80 00 0a bne 2005f40 2005f1c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2005f20: 03 00 80 5e sethi %hi(0x2017800), %g1 2005f24: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> 2005f28: 84 00 a0 01 inc %g2 2005f2c: 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; 2005f30: 03 00 80 5f sethi %hi(0x2017c00), %g1 2005f34: f0 00 60 90 ld [ %g1 + 0x90 ], %i0 ! 2017c90 <_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; 2005f38: 10 80 00 18 b 2005f98 2005f3c: 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); 2005f40: 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 ) { 2005f44: 80 a0 a0 04 cmp %g2, 4 2005f48: 18 80 00 0e bgu 2005f80 2005f4c: 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 :) */ 2005f50: 83 32 60 1b srl %o1, 0x1b, %g1 2005f54: 80 a0 60 01 cmp %g1, 1 2005f58: 12 80 00 0a bne 2005f80 2005f5c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2005f60: 83 28 a0 02 sll %g2, 2, %g1 2005f64: 05 00 80 5e sethi %hi(0x2017800), %g2 2005f68: 84 10 a3 10 or %g2, 0x310, %g2 ! 2017b10 <_Objects_Information_table> 2005f6c: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2005f70: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 2005f74: 80 a2 20 00 cmp %o0, 0 2005f78: 12 80 00 05 bne 2005f8c 2005f7c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2005f80: b0 10 20 00 clr %i0 2005f84: 10 80 00 05 b 2005f98 2005f88: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2005f8c: 40 00 05 e1 call 2007710 <_Objects_Get> 2005f90: 94 07 bf f4 add %fp, -12, %o2 2005f94: 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 ) { 2005f98: c2 07 bf f4 ld [ %fp + -12 ], %g1 2005f9c: 80 a0 60 00 cmp %g1, 0 2005fa0: 02 80 00 06 be 2005fb8 2005fa4: 80 a0 60 02 cmp %g1, 2 2005fa8: 08 80 00 0b bleu 2005fd4 2005fac: b0 10 20 04 mov 4, %i0 2005fb0: 81 c7 e0 08 ret <== NOT EXECUTED 2005fb4: 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 ); 2005fb8: 7f ff ff c0 call 2005eb8 <_Objects_Get_information> 2005fbc: d0 06 20 08 ld [ %i0 + 8 ], %o0 if ( !the_information ) { 2005fc0: 80 a2 20 00 cmp %o0, 0 2005fc4: 12 80 00 06 bne 2005fdc 2005fc8: 01 00 00 00 nop _Thread_Enable_dispatch(); 2005fcc: 7f ff ff c4 call 2005edc <_Thread_Enable_dispatch> <== NOT EXECUTED 2005fd0: b0 10 20 04 mov 4, %i0 ! 4 <== NOT EXECUTED 2005fd4: 81 c7 e0 08 ret 2005fd8: 81 e8 00 00 restore return RTEMS_INVALID_ID; /* This should never happen if _Thread_Get() works right */ } _Thread_Close( the_information, the_thread ); 2005fdc: 40 00 0a 43 call 20088e8 <_Thread_Close> 2005fe0: 92 10 00 18 mov %i0, %o1 2005fe4: 7f ff ff b5 call 2005eb8 <_Objects_Get_information> 2005fe8: d0 06 20 08 ld [ %i0 + 8 ], %o0 2005fec: 92 10 00 18 mov %i0, %o1 2005ff0: 40 00 05 86 call 2007608 <_Objects_Free> 2005ff4: b0 10 20 00 clr %i0 0 /* Not used */ ); } #endif _Thread_Enable_dispatch(); 2005ff8: 7f ff ff b9 call 2005edc <_Thread_Enable_dispatch> 2005ffc: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2006000: 81 c7 e0 08 ret 2006004: 81 e8 00 00 restore 0200781c : rtems_status_code rtems_task_get_note( Objects_Id id, uint32_t notepad, uint32_t *note ) { 200781c: 9d e3 bf 90 save %sp, -112, %sp 2007820: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; if ( !note ) 2007824: 80 a6 a0 00 cmp %i2, 0 2007828: 02 80 00 43 be 2007934 200782c: 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 ) 2007830: 80 a6 60 0f cmp %i1, 0xf 2007834: 18 80 00 40 bgu 2007934 2007838: 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 ) || 200783c: 80 a2 60 00 cmp %o1, 0 2007840: 02 80 00 08 be 2007860 2007844: 03 00 80 73 sethi %hi(0x201cc00), %g1 2007848: c2 00 63 40 ld [ %g1 + 0x340 ], %g1 ! 201cf40 <_Thread_Executing> 200784c: c2 00 60 08 ld [ %g1 + 8 ], %g1 2007850: 80 a2 40 01 cmp %o1, %g1 2007854: 12 80 00 0a bne 200787c 2007858: 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 ]; 200785c: 03 00 80 73 sethi %hi(0x201cc00), %g1 <== NOT EXECUTED 2007860: c2 00 63 40 ld [ %g1 + 0x340 ], %g1 ! 201cf40 <_Thread_Executing> 2007864: 85 2e 60 02 sll %i1, 2, %g2 2007868: c2 00 61 70 ld [ %g1 + 0x170 ], %g1 200786c: c2 00 40 02 ld [ %g1 + %g2 ], %g1 2007870: c2 26 80 00 st %g1, [ %i2 ] 2007874: 81 c7 e0 08 ret 2007878: 91 e8 20 00 restore %g0, 0, %o0 200787c: 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 ) { 2007880: 80 a0 a0 04 cmp %g2, 4 2007884: 18 80 00 06 bgu 200789c 2007888: 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 :) */ 200788c: 83 32 60 1b srl %o1, 0x1b, %g1 2007890: 80 a0 60 01 cmp %g1, 1 2007894: 02 80 00 05 be 20078a8 2007898: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 200789c: 90 10 20 00 clr %o0 20078a0: 10 80 00 0e b 20078d8 20078a4: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 20078a8: 83 28 a0 02 sll %g2, 2, %g1 20078ac: 05 00 80 73 sethi %hi(0x201cc00), %g2 20078b0: 84 10 a1 c0 or %g2, 0x1c0, %g2 ! 201cdc0 <_Objects_Information_table> 20078b4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 20078b8: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 20078bc: 80 a2 20 00 cmp %o0, 0 20078c0: 12 80 00 04 bne 20078d0 20078c4: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 20078c8: 10 80 00 04 b 20078d8 <== NOT EXECUTED 20078cc: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 20078d0: 40 00 07 2b call 200957c <_Objects_Get> 20078d4: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 20078d8: c2 07 bf f4 ld [ %fp + -12 ], %g1 20078dc: 80 a0 60 00 cmp %g1, 0 20078e0: 22 80 00 07 be,a 20078fc 20078e4: c4 02 21 70 ld [ %o0 + 0x170 ], %g2 20078e8: 80 a0 60 02 cmp %g1, 2 20078ec: 08 80 00 12 bleu 2007934 20078f0: b0 10 20 04 mov 4, %i0 20078f4: 81 c7 e0 08 ret <== NOT EXECUTED 20078f8: 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 ]; 20078fc: 83 2e 60 02 sll %i1, 2, %g1 2007900: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2007904: 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 ) 2007908: 05 00 80 73 sethi %hi(0x201cc00), %g2 200790c: c2 00 a2 60 ld [ %g2 + 0x260 ], %g1 ! 201ce60 <_Thread_Dispatch_disable_level> 2007910: b0 10 20 00 clr %i0 2007914: 82 00 7f ff add %g1, -1, %g1 2007918: c2 20 a2 60 st %g1, [ %g2 + 0x260 ] 200791c: c2 00 a2 60 ld [ %g2 + 0x260 ], %g1 2007920: 80 a0 60 00 cmp %g1, 0 2007924: 12 80 00 04 bne 2007934 2007928: 01 00 00 00 nop _Thread_Dispatch(); 200792c: 40 00 0b da call 200a894 <_Thread_Dispatch> 2007930: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2007934: 81 c7 e0 08 ret 2007938: 81 e8 00 00 restore 0200669c : */ rtems_status_code rtems_task_is_suspended( Objects_Id id ) { 200669c: 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 ) ) { 20066a0: 92 96 20 00 orcc %i0, 0, %o1 20066a4: 12 80 00 0a bne 20066cc 20066a8: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 20066ac: 03 00 80 6b sethi %hi(0x201ac00), %g1 <== NOT EXECUTED 20066b0: c4 00 60 60 ld [ %g1 + 0x60 ], %g2 ! 201ac60 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 20066b4: 84 00 a0 01 inc %g2 <== NOT EXECUTED 20066b8: c4 20 60 60 st %g2, [ %g1 + 0x60 ] <== 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; 20066bc: 03 00 80 6b sethi %hi(0x201ac00), %g1 <== NOT EXECUTED 20066c0: d0 00 61 40 ld [ %g1 + 0x140 ], %o0 ! 201ad40 <_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; 20066c4: 10 80 00 19 b 2006728 <== NOT EXECUTED 20066c8: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED 20066cc: 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 ) { 20066d0: 80 a0 a0 04 cmp %g2, 4 20066d4: 18 80 00 06 bgu 20066ec 20066d8: 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 :) */ 20066dc: 83 32 60 1b srl %o1, 0x1b, %g1 20066e0: 80 a0 60 01 cmp %g1, 1 20066e4: 02 80 00 05 be 20066f8 20066e8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 20066ec: 90 10 20 00 clr %o0 <== NOT EXECUTED 20066f0: 10 80 00 0e b 2006728 <== NOT EXECUTED 20066f4: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 20066f8: 83 28 a0 02 sll %g2, 2, %g1 20066fc: 05 00 80 6a sethi %hi(0x201a800), %g2 2006700: 84 10 a3 c0 or %g2, 0x3c0, %g2 ! 201abc0 <_Objects_Information_table> 2006704: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2006708: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 200670c: 80 a2 20 00 cmp %o0, 0 2006710: 12 80 00 04 bne 2006720 2006714: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2006718: 10 80 00 04 b 2006728 <== NOT EXECUTED 200671c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2006720: 40 00 06 31 call 2007fe4 <_Objects_Get> 2006724: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 2006728: c2 07 bf f4 ld [ %fp + -12 ], %g1 200672c: 80 a0 60 00 cmp %g1, 0 2006730: 22 80 00 07 be,a 200674c 2006734: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 2006738: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 200673c: 08 80 00 09 bleu 2006760 <== NOT EXECUTED 2006740: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 2006744: 81 c7 e0 08 ret <== NOT EXECUTED 2006748: 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 ) ) { 200674c: 80 88 60 02 btst 2, %g1 2006750: 12 80 00 06 bne 2006768 2006754: 01 00 00 00 nop _Thread_Enable_dispatch(); 2006758: 7f ff ff c4 call 2006668 <_Thread_Enable_dispatch> 200675c: b0 10 20 00 clr %i0 ! 0 2006760: 81 c7 e0 08 ret 2006764: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 2006768: 7f ff ff c0 call 2006668 <_Thread_Enable_dispatch> 200676c: b0 10 20 0f mov 0xf, %i0 return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2006770: 81 c7 e0 08 ret 2006774: 81 e8 00 00 restore 02006cf0 : rtems_status_code rtems_task_restart( Objects_Id id, uint32_t argument ) { 2006cf0: 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 ) ) { 2006cf4: 92 96 20 00 orcc %i0, 0, %o1 2006cf8: 12 80 00 0a bne 2006d20 2006cfc: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2006d00: 03 00 80 6c sethi %hi(0x201b000), %g1 2006d04: c4 00 61 a0 ld [ %g1 + 0x1a0 ], %g2 ! 201b1a0 <_Thread_Dispatch_disable_level> 2006d08: 84 00 a0 01 inc %g2 2006d0c: c4 20 61 a0 st %g2, [ %g1 + 0x1a0 ] 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; 2006d10: 03 00 80 6c sethi %hi(0x201b000), %g1 2006d14: d0 00 62 80 ld [ %g1 + 0x280 ], %o0 ! 201b280 <_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; 2006d18: 10 80 00 19 b 2006d7c 2006d1c: c0 27 bf f4 clr [ %fp + -12 ] 2006d20: 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 ) { 2006d24: 80 a0 a0 04 cmp %g2, 4 2006d28: 18 80 00 06 bgu 2006d40 2006d2c: 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 :) */ 2006d30: 83 32 60 1b srl %o1, 0x1b, %g1 2006d34: 80 a0 60 01 cmp %g1, 1 2006d38: 02 80 00 05 be 2006d4c 2006d3c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2006d40: 90 10 20 00 clr %o0 2006d44: 10 80 00 0e b 2006d7c 2006d48: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2006d4c: 83 28 a0 02 sll %g2, 2, %g1 2006d50: 05 00 80 6c sethi %hi(0x201b000), %g2 2006d54: 84 10 a1 00 or %g2, 0x100, %g2 ! 201b100 <_Objects_Information_table> 2006d58: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2006d5c: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 2006d60: 80 a2 20 00 cmp %o0, 0 2006d64: 12 80 00 04 bne 2006d74 2006d68: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2006d6c: 10 80 00 04 b 2006d7c <== NOT EXECUTED 2006d70: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2006d74: 40 00 05 f8 call 2008554 <_Objects_Get> 2006d78: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 2006d7c: c2 07 bf f4 ld [ %fp + -12 ], %g1 2006d80: 80 a0 60 00 cmp %g1, 0 2006d84: 22 80 00 07 be,a 2006da0 2006d88: 94 10 00 19 mov %i1, %o2 2006d8c: 80 a0 60 02 cmp %g1, 2 2006d90: 08 80 00 0b bleu 2006dbc 2006d94: b0 10 20 04 mov 4, %i0 2006d98: 81 c7 e0 08 ret <== NOT EXECUTED 2006d9c: 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 ) ) { 2006da0: 40 00 0d ae call 200a458 <_Thread_Restart> 2006da4: 92 10 20 00 clr %o1 2006da8: 80 a2 20 00 cmp %o0, 0 2006dac: 02 80 00 06 be 2006dc4 2006db0: 01 00 00 00 nop _Thread_Enable_dispatch(); 2006db4: 7f ff ff c2 call 2006cbc <_Thread_Enable_dispatch> 2006db8: b0 10 20 00 clr %i0 ! 0 2006dbc: 81 c7 e0 08 ret 2006dc0: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 2006dc4: 7f ff ff be call 2006cbc <_Thread_Enable_dispatch> 2006dc8: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2006dcc: 81 c7 e0 08 ret 2006dd0: 81 e8 00 00 restore 020076bc : */ rtems_status_code rtems_task_resume( Objects_Id id ) { 20076bc: 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 ) ) { 20076c0: 92 96 20 00 orcc %i0, 0, %o1 20076c4: 12 80 00 0a bne 20076ec 20076c8: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 20076cc: 03 00 80 90 sethi %hi(0x2024000), %g1 20076d0: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 20240e0 <_Thread_Dispatch_disable_level> 20076d4: 84 00 a0 01 inc %g2 20076d8: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 20076dc: 03 00 80 90 sethi %hi(0x2024000), %g1 20076e0: d0 00 61 c0 ld [ %g1 + 0x1c0 ], %o0 ! 20241c0 <_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; 20076e4: 10 80 00 19 b 2007748 20076e8: c0 27 bf f4 clr [ %fp + -12 ] 20076ec: 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 ) { 20076f0: 80 a0 a0 04 cmp %g2, 4 20076f4: 18 80 00 06 bgu 200770c 20076f8: 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 :) */ 20076fc: 83 32 60 1b srl %o1, 0x1b, %g1 2007700: 80 a0 60 01 cmp %g1, 1 2007704: 02 80 00 05 be 2007718 2007708: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 200770c: 90 10 20 00 clr %o0 2007710: 10 80 00 0e b 2007748 2007714: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2007718: 83 28 a0 02 sll %g2, 2, %g1 200771c: 05 00 80 90 sethi %hi(0x2024000), %g2 2007720: 84 10 a0 40 or %g2, 0x40, %g2 ! 2024040 <_Objects_Information_table> 2007724: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2007728: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 200772c: 80 a2 20 00 cmp %o0, 0 2007730: 12 80 00 04 bne 2007740 2007734: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2007738: 10 80 00 04 b 2007748 <== NOT EXECUTED 200773c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2007740: 40 00 06 d2 call 2009288 <_Objects_Get> 2007744: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 2007748: c2 07 bf f4 ld [ %fp + -12 ], %g1 200774c: 80 a0 60 00 cmp %g1, 0 2007750: 22 80 00 07 be,a 200776c 2007754: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 2007758: 80 a0 60 02 cmp %g1, 2 200775c: 08 80 00 0b bleu 2007788 2007760: b0 10 20 04 mov 4, %i0 2007764: 81 c7 e0 08 ret <== NOT EXECUTED 2007768: 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 ) ) { 200776c: 80 88 60 02 btst 2, %g1 2007770: 02 80 00 08 be 2007790 2007774: 92 10 20 01 mov 1, %o1 _Thread_Resume( the_thread, TRUE ); 2007778: 40 00 0e 9b call 200b1e4 <_Thread_Resume> 200777c: b0 10 20 00 clr %i0 _Thread_Enable_dispatch(); 2007780: 7f ff ff c2 call 2007688 <_Thread_Enable_dispatch> 2007784: 01 00 00 00 nop 2007788: 81 c7 e0 08 ret 200778c: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 2007790: 7f ff ff be call 2007688 <_Thread_Enable_dispatch> 2007794: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2007798: 81 c7 e0 08 ret 200779c: 81 e8 00 00 restore 02007b08 : rtems_status_code rtems_task_set_note( Objects_Id id, uint32_t notepad, uint32_t note ) { 2007b08: 9d e3 bf 90 save %sp, -112, %sp 2007b0c: 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 ) 2007b10: 80 a6 60 0f cmp %i1, 0xf 2007b14: 18 80 00 3e bgu 2007c0c 2007b18: 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 ) || 2007b1c: 80 a2 60 00 cmp %o1, 0 2007b20: 02 80 00 08 be 2007b40 2007b24: 03 00 80 73 sethi %hi(0x201cc00), %g1 2007b28: c2 00 63 40 ld [ %g1 + 0x340 ], %g1 ! 201cf40 <_Thread_Executing> 2007b2c: c2 00 60 08 ld [ %g1 + 8 ], %g1 2007b30: 80 a2 40 01 cmp %o1, %g1 2007b34: 12 80 00 09 bne 2007b58 2007b38: 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; 2007b3c: 03 00 80 73 sethi %hi(0x201cc00), %g1 <== NOT EXECUTED 2007b40: c2 00 63 40 ld [ %g1 + 0x340 ], %g1 ! 201cf40 <_Thread_Executing> <== NOT EXECUTED 2007b44: 85 2e 60 02 sll %i1, 2, %g2 <== NOT EXECUTED 2007b48: c2 00 61 70 ld [ %g1 + 0x170 ], %g1 <== NOT EXECUTED 2007b4c: f4 20 40 02 st %i2, [ %g1 + %g2 ] <== NOT EXECUTED 2007b50: 81 c7 e0 08 ret <== NOT EXECUTED 2007b54: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 2007b58: 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 ) { 2007b5c: 80 a0 a0 04 cmp %g2, 4 2007b60: 18 80 00 06 bgu 2007b78 2007b64: 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 :) */ 2007b68: 83 32 60 1b srl %o1, 0x1b, %g1 2007b6c: 80 a0 60 01 cmp %g1, 1 2007b70: 02 80 00 05 be 2007b84 2007b74: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2007b78: 90 10 20 00 clr %o0 2007b7c: 10 80 00 0e b 2007bb4 2007b80: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2007b84: 83 28 a0 02 sll %g2, 2, %g1 2007b88: 05 00 80 73 sethi %hi(0x201cc00), %g2 2007b8c: 84 10 a1 c0 or %g2, 0x1c0, %g2 ! 201cdc0 <_Objects_Information_table> 2007b90: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2007b94: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 2007b98: 80 a2 20 00 cmp %o0, 0 2007b9c: 12 80 00 04 bne 2007bac 2007ba0: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2007ba4: 10 80 00 04 b 2007bb4 <== NOT EXECUTED 2007ba8: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2007bac: 40 00 06 74 call 200957c <_Objects_Get> 2007bb0: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 2007bb4: c2 07 bf f4 ld [ %fp + -12 ], %g1 2007bb8: 80 a0 60 00 cmp %g1, 0 2007bbc: 22 80 00 07 be,a 2007bd8 2007bc0: c4 02 21 70 ld [ %o0 + 0x170 ], %g2 2007bc4: 80 a0 60 02 cmp %g1, 2 2007bc8: 08 80 00 11 bleu 2007c0c 2007bcc: b0 10 20 04 mov 4, %i0 2007bd0: 81 c7 e0 08 ret <== NOT EXECUTED 2007bd4: 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; 2007bd8: 83 2e 60 02 sll %i1, 2, %g1 2007bdc: 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 ) 2007be0: 05 00 80 73 sethi %hi(0x201cc00), %g2 2007be4: c2 00 a2 60 ld [ %g2 + 0x260 ], %g1 ! 201ce60 <_Thread_Dispatch_disable_level> 2007be8: b0 10 20 00 clr %i0 2007bec: 82 00 7f ff add %g1, -1, %g1 2007bf0: c2 20 a2 60 st %g1, [ %g2 + 0x260 ] 2007bf4: c2 00 a2 60 ld [ %g2 + 0x260 ], %g1 2007bf8: 80 a0 60 00 cmp %g1, 0 2007bfc: 12 80 00 04 bne 2007c0c 2007c00: 01 00 00 00 nop _Thread_Dispatch(); 2007c04: 40 00 0b 24 call 200a894 <_Thread_Dispatch> 2007c08: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2007c0c: 81 c7 e0 08 ret 2007c10: 81 e8 00 00 restore 0200a664 : rtems_status_code rtems_task_set_priority( Objects_Id id, rtems_task_priority new_priority, rtems_task_priority *old_priority ) { 200a664: 9d e3 bf 90 save %sp, -112, %sp register Thread_Control *the_thread; Objects_Locations location; if ( new_priority != RTEMS_CURRENT_PRIORITY && 200a668: 80 a6 60 00 cmp %i1, 0 200a66c: 02 80 00 06 be 200a684 200a670: 92 10 00 18 mov %i0, %o1 200a674: 82 06 7f ff add %i1, -1, %g1 200a678: 80 a0 60 fe cmp %g1, 0xfe 200a67c: 18 80 00 49 bgu 200a7a0 200a680: b0 10 20 13 mov 0x13, %i0 !_RTEMS_tasks_Priority_is_valid( new_priority ) ) return RTEMS_INVALID_PRIORITY; if ( !old_priority ) 200a684: 80 a6 a0 00 cmp %i2, 0 200a688: 02 80 00 46 be 200a7a0 200a68c: 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 ) ) { 200a690: 80 a2 60 00 cmp %o1, 0 200a694: 12 80 00 0a bne 200a6bc 200a698: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 200a69c: 03 00 80 99 sethi %hi(0x2026400), %g1 200a6a0: c4 00 60 80 ld [ %g1 + 0x80 ], %g2 ! 2026480 <_Thread_Dispatch_disable_level> 200a6a4: 84 00 a0 01 inc %g2 200a6a8: c4 20 60 80 st %g2, [ %g1 + 0x80 ] 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; 200a6ac: 03 00 80 99 sethi %hi(0x2026400), %g1 200a6b0: d0 00 61 60 ld [ %g1 + 0x160 ], %o0 ! 2026560 <_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; 200a6b4: 10 80 00 19 b 200a718 200a6b8: c0 27 bf f4 clr [ %fp + -12 ] 200a6bc: 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 ) { 200a6c0: 80 a0 a0 04 cmp %g2, 4 200a6c4: 18 80 00 06 bgu 200a6dc 200a6c8: 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 :) */ 200a6cc: 83 32 60 1b srl %o1, 0x1b, %g1 200a6d0: 80 a0 60 01 cmp %g1, 1 200a6d4: 02 80 00 05 be 200a6e8 200a6d8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 200a6dc: 90 10 20 00 clr %o0 200a6e0: 10 80 00 0e b 200a718 200a6e4: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 200a6e8: 83 28 a0 02 sll %g2, 2, %g1 200a6ec: 05 00 80 98 sethi %hi(0x2026000), %g2 200a6f0: 84 10 a3 e0 or %g2, 0x3e0, %g2 ! 20263e0 <_Objects_Information_table> 200a6f4: c2 00 80 01 ld [ %g2 + %g1 ], %g1 200a6f8: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 200a6fc: 80 a2 20 00 cmp %o0, 0 200a700: 12 80 00 04 bne 200a710 200a704: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 200a708: 10 80 00 04 b 200a718 <== NOT EXECUTED 200a70c: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 200a710: 40 00 06 16 call 200bf68 <_Objects_Get> 200a714: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 200a718: c2 07 bf f4 ld [ %fp + -12 ], %g1 200a71c: 80 a0 60 00 cmp %g1, 0 200a720: 22 80 00 07 be,a 200a73c 200a724: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 200a728: 80 a0 60 02 cmp %g1, 2 200a72c: 08 80 00 1d bleu 200a7a0 200a730: b0 10 20 04 mov 4, %i0 200a734: 81 c7 e0 08 ret <== NOT EXECUTED 200a738: 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 ) { 200a73c: 80 a6 60 00 cmp %i1, 0 200a740: 02 80 00 0d be 200a774 200a744: c2 26 80 00 st %g1, [ %i2 ] the_thread->real_priority = new_priority; if ( the_thread->resource_count == 0 || 200a748: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 200a74c: 80 a0 60 00 cmp %g1, 0 200a750: 02 80 00 06 be 200a768 200a754: f2 22 20 18 st %i1, [ %o0 + 0x18 ] 200a758: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 200a75c: 80 a0 40 19 cmp %g1, %i1 200a760: 08 80 00 05 bleu 200a774 200a764: 01 00 00 00 nop the_thread->current_priority > new_priority ) _Thread_Change_priority( the_thread, new_priority, FALSE ); 200a768: 92 10 00 19 mov %i1, %o1 200a76c: 40 00 09 c7 call 200ce88 <_Thread_Change_priority> 200a770: 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 ) 200a774: 03 00 80 99 sethi %hi(0x2026400), %g1 200a778: c4 00 60 80 ld [ %g1 + 0x80 ], %g2 ! 2026480 <_Thread_Dispatch_disable_level> 200a77c: b0 10 20 00 clr %i0 200a780: 84 00 bf ff add %g2, -1, %g2 200a784: c4 20 60 80 st %g2, [ %g1 + 0x80 ] 200a788: c2 00 60 80 ld [ %g1 + 0x80 ], %g1 200a78c: 80 a0 60 00 cmp %g1, 0 200a790: 12 80 00 04 bne 200a7a0 200a794: 01 00 00 00 nop _Thread_Dispatch(); 200a798: 40 00 0a f9 call 200d37c <_Thread_Dispatch> 200a79c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 200a7a0: 81 c7 e0 08 ret 200a7a4: 81 e8 00 00 restore 02006150 : rtems_status_code rtems_task_start( rtems_id id, rtems_task_entry entry_point, rtems_task_argument argument ) { 2006150: 9d e3 bf 90 save %sp, -112, %sp 2006154: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; if ( entry_point == NULL ) 2006158: 80 a6 60 00 cmp %i1, 0 200615c: 02 80 00 36 be 2006234 2006160: 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 ) ) { 2006164: 80 a2 60 00 cmp %o1, 0 2006168: 12 80 00 0a bne 2006190 200616c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2006170: 03 00 80 5e sethi %hi(0x2017800), %g1 2006174: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2017bb0 <_Thread_Dispatch_disable_level> 2006178: 84 00 a0 01 inc %g2 200617c: 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; 2006180: 03 00 80 5f sethi %hi(0x2017c00), %g1 2006184: d0 00 60 90 ld [ %g1 + 0x90 ], %o0 ! 2017c90 <_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; 2006188: 10 80 00 19 b 20061ec 200618c: c0 27 bf f4 clr [ %fp + -12 ] 2006190: 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 ) { 2006194: 80 a0 a0 04 cmp %g2, 4 2006198: 18 80 00 06 bgu 20061b0 200619c: 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 :) */ 20061a0: 83 32 60 1b srl %o1, 0x1b, %g1 20061a4: 80 a0 60 01 cmp %g1, 1 20061a8: 02 80 00 05 be 20061bc 20061ac: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 20061b0: 90 10 20 00 clr %o0 20061b4: 10 80 00 0e b 20061ec 20061b8: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 20061bc: 83 28 a0 02 sll %g2, 2, %g1 20061c0: 05 00 80 5e sethi %hi(0x2017800), %g2 20061c4: 84 10 a3 10 or %g2, 0x310, %g2 ! 2017b10 <_Objects_Information_table> 20061c8: c2 00 80 01 ld [ %g2 + %g1 ], %g1 20061cc: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 20061d0: 80 a2 20 00 cmp %o0, 0 20061d4: 12 80 00 04 bne 20061e4 20061d8: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 20061dc: 10 80 00 04 b 20061ec <== NOT EXECUTED 20061e0: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 20061e4: 40 00 05 4b call 2007710 <_Objects_Get> 20061e8: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 20061ec: c2 07 bf f4 ld [ %fp + -12 ], %g1 20061f0: 80 a0 60 00 cmp %g1, 0 20061f4: 22 80 00 07 be,a 2006210 20061f8: 94 10 00 19 mov %i1, %o2 20061fc: 80 a0 60 02 cmp %g1, 2 2006200: 08 80 00 0d bleu 2006234 2006204: b0 10 20 04 mov 4, %i0 2006208: 81 c7 e0 08 ret <== NOT EXECUTED 200620c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Start( 2006210: 98 10 00 1a mov %i2, %o4 2006214: 92 10 20 00 clr %o1 2006218: 40 00 0e 1d call 2009a8c <_Thread_Start> 200621c: 96 10 20 00 clr %o3 2006220: 80 a2 20 00 cmp %o0, 0 2006224: 02 80 00 06 be 200623c 2006228: 01 00 00 00 nop the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) { _Thread_Enable_dispatch(); 200622c: 7f ff ff bc call 200611c <_Thread_Enable_dispatch> 2006230: b0 10 20 00 clr %i0 ! 0 2006234: 81 c7 e0 08 ret 2006238: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 200623c: 7f ff ff b8 call 200611c <_Thread_Enable_dispatch> 2006240: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2006244: 81 c7 e0 08 ret 2006248: 81 e8 00 00 restore 02007904 : */ rtems_status_code rtems_task_suspend( Objects_Id id ) { 2007904: 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 ) ) { 2007908: 92 96 20 00 orcc %i0, 0, %o1 200790c: 12 80 00 0a bne 2007934 2007910: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2007914: 03 00 80 90 sethi %hi(0x2024000), %g1 2007918: c4 00 60 e0 ld [ %g1 + 0xe0 ], %g2 ! 20240e0 <_Thread_Dispatch_disable_level> 200791c: 84 00 a0 01 inc %g2 2007920: c4 20 60 e0 st %g2, [ %g1 + 0xe0 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 2007924: 03 00 80 90 sethi %hi(0x2024000), %g1 2007928: d0 00 61 c0 ld [ %g1 + 0x1c0 ], %o0 ! 20241c0 <_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; 200792c: 10 80 00 19 b 2007990 2007930: c0 27 bf f4 clr [ %fp + -12 ] 2007934: 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 ) { 2007938: 80 a0 a0 04 cmp %g2, 4 200793c: 18 80 00 06 bgu 2007954 2007940: 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 :) */ 2007944: 83 32 60 1b srl %o1, 0x1b, %g1 2007948: 80 a0 60 01 cmp %g1, 1 200794c: 02 80 00 05 be 2007960 2007950: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2007954: 90 10 20 00 clr %o0 2007958: 10 80 00 0e b 2007990 200795c: c2 27 bf f4 st %g1, [ %fp + -12 ] goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 2007960: 83 28 a0 02 sll %g2, 2, %g1 2007964: 05 00 80 90 sethi %hi(0x2024000), %g2 2007968: 84 10 a0 40 or %g2, 0x40, %g2 ! 2024040 <_Objects_Information_table> 200796c: c2 00 80 01 ld [ %g2 + %g1 ], %g1 2007970: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 2007974: 80 a2 20 00 cmp %o0, 0 2007978: 12 80 00 04 bne 2007988 200797c: 82 10 20 02 mov 2, %g1 *location = OBJECTS_ERROR; 2007980: 10 80 00 04 b 2007990 <== NOT EXECUTED 2007984: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2007988: 40 00 06 40 call 2009288 <_Objects_Get> 200798c: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 2007990: c2 07 bf f4 ld [ %fp + -12 ], %g1 2007994: 80 a0 60 00 cmp %g1, 0 2007998: 22 80 00 07 be,a 20079b4 200799c: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 20079a0: 80 a0 60 02 cmp %g1, 2 20079a4: 08 80 00 0b bleu 20079d0 20079a8: b0 10 20 04 mov 4, %i0 20079ac: 81 c7 e0 08 ret <== NOT EXECUTED 20079b0: 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 ) ) { 20079b4: 80 88 60 02 btst 2, %g1 20079b8: 12 80 00 08 bne 20079d8 20079bc: 01 00 00 00 nop _Thread_Suspend( the_thread ); 20079c0: 40 00 0f 3a call 200b6a8 <_Thread_Suspend> 20079c4: b0 10 20 00 clr %i0 ! 0 _Thread_Enable_dispatch(); 20079c8: 7f ff ff c2 call 20078d0 <_Thread_Enable_dispatch> 20079cc: 01 00 00 00 nop 20079d0: 81 c7 e0 08 ret 20079d4: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); 20079d8: 7f ff ff be call 20078d0 <_Thread_Enable_dispatch> 20079dc: b0 10 20 0f mov 0xf, %i0 return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 20079e0: 81 c7 e0 08 ret 20079e4: 81 e8 00 00 restore 02017340 : rtems_status_code rtems_task_variable_add( rtems_id tid, void **ptr, void (*dtor)(void *) ) { 2017340: 9d e3 bf 90 save %sp, -112, %sp 2017344: 92 10 00 18 mov %i0, %o1 Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *new; if ( !ptr ) 2017348: 80 a6 60 00 cmp %i1, 0 201734c: 02 80 00 32 be 2017414 2017350: 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 ) ) { 2017354: 80 a2 60 00 cmp %o1, 0 2017358: 12 80 00 0a bne 2017380 201735c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2017360: 03 00 80 e0 sethi %hi(0x2038000), %g1 2017364: c4 00 63 30 ld [ %g1 + 0x330 ], %g2 ! 2038330 <_Thread_Dispatch_disable_level> 2017368: 84 00 a0 01 inc %g2 201736c: c4 20 63 30 st %g2, [ %g1 + 0x330 ] 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; 2017370: 03 00 80 e1 sethi %hi(0x2038400), %g1 2017374: f0 00 60 10 ld [ %g1 + 0x10 ], %i0 ! 2038410 <_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; 2017378: 10 80 00 18 b 20173d8 201737c: c0 27 bf f4 clr [ %fp + -12 ] 2017380: 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 ) { 2017384: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 2017388: 18 80 00 0e bgu 20173c0 <== NOT EXECUTED 201738c: 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 :) */ 2017390: 83 32 60 1b srl %o1, 0x1b, %g1 <== NOT EXECUTED 2017394: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2017398: 12 80 00 0a bne 20173c0 <== NOT EXECUTED 201739c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 20173a0: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 20173a4: 05 00 80 e0 sethi %hi(0x2038000), %g2 <== NOT EXECUTED 20173a8: 84 10 a2 90 or %g2, 0x290, %g2 ! 2038290 <_Objects_Information_table> <== NOT EXECUTED 20173ac: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 20173b0: d0 00 60 04 ld [ %g1 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 20173b4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20173b8: 12 80 00 05 bne 20173cc <== NOT EXECUTED 20173bc: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 20173c0: b0 10 20 00 clr %i0 <== NOT EXECUTED 20173c4: 10 80 00 05 b 20173d8 <== NOT EXECUTED 20173c8: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 20173cc: 7f ff ca 62 call 2009d54 <_Objects_Get> <== NOT EXECUTED 20173d0: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 20173d4: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 20173d8: c2 07 bf f4 ld [ %fp + -12 ], %g1 20173dc: 80 a0 60 00 cmp %g1, 0 20173e0: 22 80 00 0f be,a 201741c 20173e4: c4 06 21 80 ld [ %i0 + 0x180 ], %g2 20173e8: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 20173ec: 08 80 00 0a bleu 2017414 <== NOT EXECUTED 20173f0: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 20173f4: 81 c7 e0 08 ret <== NOT EXECUTED 20173f8: 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) { 20173fc: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 2017400: 32 80 00 07 bne,a 201741c <== NOT EXECUTED 2017404: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED tvp->dtor = dtor; 2017408: f4 20 a0 10 st %i2, [ %g2 + 0x10 ] <== NOT EXECUTED _Thread_Enable_dispatch(); 201740c: 7f ff ff c0 call 201730c <_Thread_Enable_dispatch> <== NOT EXECUTED 2017410: b0 10 20 00 clr %i0 <== NOT EXECUTED 2017414: 81 c7 e0 08 ret <== NOT EXECUTED 2017418: 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) { 201741c: 80 a0 a0 00 cmp %g2, 0 2017420: 32 bf ff f7 bne,a 20173fc 2017424: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 2017428: 11 00 80 e0 sethi %hi(0x2038000), %o0 201742c: 92 10 20 14 mov 0x14, %o1 2017430: 7f ff c7 ad call 20092e4 <_Heap_Allocate> 2017434: 90 12 23 7c or %o0, 0x37c, %o0 * Now allocate memory for this task variable. */ new = (rtems_task_variable_t *) _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { 2017438: 80 a2 20 00 cmp %o0, 0 201743c: 32 80 00 06 bne,a 2017454 2017440: c4 06 21 80 ld [ %i0 + 0x180 ], %g2 _Thread_Enable_dispatch(); 2017444: 7f ff ff b2 call 201730c <_Thread_Enable_dispatch> <== NOT EXECUTED 2017448: b0 10 20 1a mov 0x1a, %i0 <== NOT EXECUTED 201744c: 81 c7 e0 08 ret <== NOT EXECUTED 2017450: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_NO_MEMORY; } new->gval = *ptr; 2017454: 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; 2017458: d0 26 21 80 st %o0, [ %i0 + 0x180 ] _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { _Thread_Enable_dispatch(); return RTEMS_NO_MEMORY; } new->gval = *ptr; 201745c: c2 22 20 08 st %g1, [ %o0 + 8 ] new->ptr = ptr; 2017460: f2 22 20 04 st %i1, [ %o0 + 4 ] new->dtor = dtor; 2017464: f4 22 20 10 st %i2, [ %o0 + 0x10 ] new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; 2017468: c4 22 00 00 st %g2, [ %o0 ] the_thread->task_variables = new; _Thread_Enable_dispatch(); 201746c: 7f ff ff a8 call 201730c <_Thread_Enable_dispatch> 2017470: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2017474: 81 c7 e0 08 ret 2017478: 81 e8 00 00 restore 020174b0 : rtems_status_code rtems_task_variable_delete( rtems_id tid, void **ptr ) { 20174b0: 9d e3 bf 90 save %sp, -112, %sp 20174b4: 92 10 00 18 mov %i0, %o1 Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *prev; if ( !ptr ) 20174b8: 80 a6 60 00 cmp %i1, 0 20174bc: 02 80 00 52 be 2017604 20174c0: 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 ) ) { 20174c4: 80 a2 60 00 cmp %o1, 0 20174c8: 12 80 00 0a bne 20174f0 20174cc: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 20174d0: 03 00 80 e0 sethi %hi(0x2038000), %g1 20174d4: c4 00 63 30 ld [ %g1 + 0x330 ], %g2 ! 2038330 <_Thread_Dispatch_disable_level> 20174d8: 84 00 a0 01 inc %g2 20174dc: c4 20 63 30 st %g2, [ %g1 + 0x330 ] 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; 20174e0: 03 00 80 e1 sethi %hi(0x2038400), %g1 20174e4: d0 00 60 10 ld [ %g1 + 0x10 ], %o0 ! 2038410 <_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; 20174e8: 10 80 00 19 b 201754c 20174ec: c0 27 bf f4 clr [ %fp + -12 ] 20174f0: 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 ) { 20174f4: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 20174f8: 18 80 00 06 bgu 2017510 <== NOT EXECUTED 20174fc: 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 :) */ 2017500: 83 32 60 1b srl %o1, 0x1b, %g1 <== NOT EXECUTED 2017504: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2017508: 02 80 00 05 be 201751c <== NOT EXECUTED 201750c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 2017510: 90 10 20 00 clr %o0 <== NOT EXECUTED 2017514: 10 80 00 0e b 201754c <== NOT EXECUTED 2017518: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 201751c: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 2017520: 05 00 80 e0 sethi %hi(0x2038000), %g2 <== NOT EXECUTED 2017524: 84 10 a2 90 or %g2, 0x290, %g2 ! 2038290 <_Objects_Information_table> <== NOT EXECUTED 2017528: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 201752c: d0 00 60 04 ld [ %g1 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 2017530: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2017534: 12 80 00 04 bne 2017544 <== NOT EXECUTED 2017538: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 201753c: 10 80 00 04 b 201754c <== NOT EXECUTED 2017540: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 2017544: 7f ff ca 04 call 2009d54 <_Objects_Get> <== NOT EXECUTED 2017548: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; prev = NULL; the_thread = _Thread_Get (tid, &location); switch (location) { 201754c: c2 07 bf f4 ld [ %fp + -12 ], %g1 2017550: 80 a0 60 00 cmp %g1, 0 2017554: 22 80 00 07 be,a 2017570 2017558: f0 02 21 80 ld [ %o0 + 0x180 ], %i0 201755c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 2017560: 08 80 00 29 bleu 2017604 <== NOT EXECUTED 2017564: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 2017568: 81 c7 e0 08 ret <== NOT EXECUTED 201756c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; 2017570: 10 80 00 28 b 2017610 2017574: 84 10 20 00 clr %g2 while (tvp) { if (tvp->ptr == ptr) { 2017578: 80 a0 40 19 cmp %g1, %i1 201757c: 32 80 00 24 bne,a 201760c 2017580: 84 10 00 18 mov %i0, %g2 <== NOT EXECUTED if (prev) 2017584: 80 a0 a0 00 cmp %g2, 0 2017588: 02 80 00 04 be 2017598 201758c: c2 06 00 00 ld [ %i0 ], %g1 prev->next = tvp->next; 2017590: 10 80 00 03 b 201759c <== NOT EXECUTED 2017594: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; 2017598: c2 22 21 80 st %g1, [ %o0 + 0x180 ] if (_Thread_Is_executing(the_thread)) { 201759c: 03 00 80 e1 sethi %hi(0x2038400), %g1 20175a0: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 ! 2038410 <_Thread_Executing> 20175a4: 80 a2 00 01 cmp %o0, %g1 20175a8: 12 80 00 0c bne 20175d8 20175ac: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 if (tvp->dtor) 20175b0: 80 a0 a0 00 cmp %g2, 0 20175b4: 22 80 00 06 be,a 20175cc 20175b8: c4 06 20 04 ld [ %i0 + 4 ], %g2 (*tvp->dtor)(*tvp->ptr); 20175bc: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 20175c0: 9f c0 80 00 call %g2 <== NOT EXECUTED 20175c4: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 20175c8: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 20175cc: c2 06 20 08 ld [ %i0 + 8 ], %g1 20175d0: 10 80 00 07 b 20175ec 20175d4: c2 20 80 00 st %g1, [ %g2 ] } else { if (tvp->dtor) 20175d8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 20175dc: 02 80 00 05 be 20175f0 <== NOT EXECUTED 20175e0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 20175e4: 9f c0 80 00 call %g2 <== NOT EXECUTED 20175e8: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 20175ec: 92 10 00 18 mov %i0, %o1 20175f0: 11 00 80 e0 sethi %hi(0x2038000), %o0 20175f4: 7f ff c7 63 call 2009380 <_Heap_Free> 20175f8: 90 12 23 7c or %o0, 0x37c, %o0 ! 203837c <_Workspace_Area> } _Workspace_Free(tvp); _Thread_Enable_dispatch(); 20175fc: 7f ff ff a0 call 201747c <_Thread_Enable_dispatch> 2017600: b0 10 20 00 clr %i0 2017604: 81 c7 e0 08 ret 2017608: 81 e8 00 00 restore return RTEMS_SUCCESSFUL; } prev = tvp; tvp = (rtems_task_variable_t *)tvp->next; 201760c: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { 2017610: 80 a6 20 00 cmp %i0, 0 2017614: 32 bf ff d9 bne,a 2017578 2017618: c2 06 20 04 ld [ %i0 + 4 ], %g1 return RTEMS_SUCCESSFUL; } prev = tvp; tvp = (rtems_task_variable_t *)tvp->next; } _Thread_Enable_dispatch(); 201761c: 7f ff ff 98 call 201747c <_Thread_Enable_dispatch> <== NOT EXECUTED 2017620: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2017624: 81 c7 e0 08 ret <== NOT EXECUTED 2017628: 81 e8 00 00 restore <== NOT EXECUTED 02017660 : rtems_status_code rtems_task_variable_get( rtems_id tid, void **ptr, void **result ) { 2017660: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp; if ( !ptr ) 2017664: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 2017668: 02 80 00 3f be 2017764 <== NOT EXECUTED 201766c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !result ) 2017670: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 2017674: 02 80 00 3c be 2017764 <== NOT EXECUTED 2017678: 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 ) ) { 201767c: 12 80 00 0a bne 20176a4 <== NOT EXECUTED 2017680: 83 36 20 18 srl %i0, 0x18, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2017684: 03 00 80 e0 sethi %hi(0x2038000), %g1 <== NOT EXECUTED 2017688: c4 00 63 30 ld [ %g1 + 0x330 ], %g2 ! 2038330 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 201768c: 84 00 a0 01 inc %g2 <== NOT EXECUTED 2017690: c4 20 63 30 st %g2, [ %g1 + 0x330 ] <== 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; 2017694: 03 00 80 e1 sethi %hi(0x2038400), %g1 <== NOT EXECUTED 2017698: d0 00 60 10 ld [ %g1 + 0x10 ], %o0 ! 2038410 <_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; 201769c: 10 80 00 19 b 2017700 <== NOT EXECUTED 20176a0: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED 20176a4: 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 ) { 20176a8: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 20176ac: 18 80 00 06 bgu 20176c4 <== NOT EXECUTED 20176b0: 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 :) */ 20176b4: 83 36 20 1b srl %i0, 0x1b, %g1 <== NOT EXECUTED 20176b8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 20176bc: 02 80 00 05 be 20176d0 <== NOT EXECUTED 20176c0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 20176c4: 90 10 20 00 clr %o0 <== NOT EXECUTED 20176c8: 10 80 00 0e b 2017700 <== NOT EXECUTED 20176cc: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 20176d0: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 20176d4: 05 00 80 e0 sethi %hi(0x2038000), %g2 <== NOT EXECUTED 20176d8: 84 10 a2 90 or %g2, 0x290, %g2 ! 2038290 <_Objects_Information_table> <== NOT EXECUTED 20176dc: c2 00 80 01 ld [ %g2 + %g1 ], %g1 <== NOT EXECUTED 20176e0: d0 00 60 04 ld [ %g1 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 20176e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20176e8: 12 80 00 04 bne 20176f8 <== NOT EXECUTED 20176ec: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; 20176f0: 10 80 00 04 b 2017700 <== NOT EXECUTED 20176f4: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 20176f8: 7f ff c9 97 call 2009d54 <_Objects_Get> <== NOT EXECUTED 20176fc: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 2017700: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 2017704: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2017708: 22 80 00 10 be,a 2017748 <== NOT EXECUTED 201770c: d0 02 21 80 ld [ %o0 + 0x180 ], %o0 <== NOT EXECUTED 2017710: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 2017714: 08 80 00 0b bleu 2017740 <== NOT EXECUTED 2017718: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 201771c: 81 c7 e0 08 ret <== NOT EXECUTED 2017720: 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) { 2017724: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 2017728: 32 80 00 08 bne,a 2017748 <== NOT EXECUTED 201772c: 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; 2017730: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED _Thread_Enable_dispatch(); 2017734: b0 10 20 00 clr %i0 <== NOT EXECUTED 2017738: 7f ff ff bd call 201762c <_Thread_Enable_dispatch> <== NOT EXECUTED 201773c: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 2017740: 81 c7 e0 08 ret <== NOT EXECUTED 2017744: 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) { 2017748: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 201774c: 32 bf ff f6 bne,a 2017724 <== NOT EXECUTED 2017750: 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(); 2017754: 7f ff ff b6 call 201762c <_Thread_Enable_dispatch> <== NOT EXECUTED 2017758: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED 201775c: 81 c7 e0 08 ret <== NOT EXECUTED 2017760: 81 e8 00 00 restore <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; 2017764: b0 10 20 09 mov 9, %i0 <== NOT EXECUTED } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2017768: 81 c7 e0 08 ret <== NOT EXECUTED 201776c: 81 e8 00 00 restore <== NOT EXECUTED 02003058 : int cbufsize, int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; 2003058: 03 00 80 5b sethi %hi(0x2016c00), %g1 <== NOT EXECUTED 200305c: d0 20 63 cc st %o0, [ %g1 + 0x3cc ] ! 2016fcc <== NOT EXECUTED rtems_termios_raw_input_size = raw_input; 2003060: 03 00 80 5b sethi %hi(0x2016c00), %g1 <== NOT EXECUTED rtems_termios_raw_output_size = raw_output; return RTEMS_SUCCESSFUL; } 2003064: 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; 2003068: d2 20 63 d0 st %o1, [ %g1 + 0x3d0 ] <== NOT EXECUTED rtems_termios_raw_output_size = raw_output; 200306c: 03 00 80 5b sethi %hi(0x2016c00), %g1 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 2003070: 81 c3 e0 08 retl <== NOT EXECUTED 2003074: d4 20 63 d4 st %o2, [ %g1 + 0x3d4 ] ! 2016fd4 <== NOT EXECUTED 020046cc : } } rtems_status_code rtems_termios_close (void *arg) { 20046cc: 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); 20046d0: 03 00 80 5e sethi %hi(0x2017800), %g1 20046d4: d0 00 62 54 ld [ %g1 + 0x254 ], %o0 ! 2017a54 rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 20046d8: c2 06 00 00 ld [ %i0 ], %g1 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 20046dc: 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; 20046e0: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 20046e4: 40 00 04 9c call 2005954 20046e8: 94 10 20 00 clr %o2 if (sc != RTEMS_SUCCESSFUL) 20046ec: 80 a2 20 00 cmp %o0, 0 20046f0: 22 80 00 05 be,a 2004704 20046f4: c2 04 20 08 ld [ %l0 + 8 ], %g1 rtems_fatal_error_occurred (sc); 20046f8: 40 00 07 93 call 2006544 <== NOT EXECUTED 20046fc: 01 00 00 00 nop <== NOT EXECUTED if (--tty->refcount == 0) { 2004700: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 2004704: 82 00 7f ff add %g1, -1, %g1 2004708: 80 a0 60 00 cmp %g1, 0 200470c: 12 80 00 5b bne 2004878 2004710: c2 24 20 08 st %g1, [ %l0 + 8 ] if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 2004714: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 2004718: 03 00 80 5d sethi %hi(0x2017400), %g1 200471c: 82 10 63 04 or %g1, 0x304, %g1 ! 2017704 2004720: 85 28 a0 05 sll %g2, 5, %g2 2004724: 84 00 80 01 add %g2, %g1, %g2 2004728: c2 00 a0 04 ld [ %g2 + 4 ], %g1 200472c: 80 a0 60 00 cmp %g1, 0 2004730: 02 80 00 06 be 2004748 2004734: 01 00 00 00 nop /* * call discipline-specific close */ sc = rtems_termios_linesw[tty->t_line].l_close(tty); 2004738: 9f c0 40 00 call %g1 <== NOT EXECUTED 200473c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED * default: just flush output buffer */ drainOutput (tty); } if (tty->device.outputUsesInterrupts 2004740: 10 80 00 05 b 2004754 <== NOT EXECUTED 2004744: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED } else { /* * default: just flush output buffer */ drainOutput (tty); 2004748: 7f ff fd c5 call 2003e5c 200474c: 90 10 00 10 mov %l0, %o0 } if (tty->device.outputUsesInterrupts 2004750: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 2004754: 80 a0 60 02 cmp %g1, 2 2004758: 32 80 00 13 bne,a 20047a4 200475c: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 == TERMIOS_TASK_DRIVEN) { /* * send "terminate" to I/O tasks */ sc = rtems_event_send( 2004760: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED 2004764: 40 00 02 ad call 2005218 <== NOT EXECUTED 2004768: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 200476c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004770: 22 80 00 05 be,a 2004784 <== NOT EXECUTED 2004774: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004778: 40 00 07 73 call 2006544 <== NOT EXECUTED 200477c: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_event_send( 2004780: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 2004784: 40 00 02 a5 call 2005218 <== NOT EXECUTED 2004788: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 200478c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004790: 22 80 00 05 be,a 20047a4 <== NOT EXECUTED 2004794: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004798: 40 00 07 6b call 2006544 <== NOT EXECUTED 200479c: 01 00 00 00 nop <== NOT EXECUTED } if (tty->device.lastClose) 20047a0: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED 20047a4: 80 a0 60 00 cmp %g1, 0 20047a8: 22 80 00 07 be,a 20047c4 20047ac: c2 04 00 00 ld [ %l0 ], %g1 (*tty->device.lastClose)(tty->major, tty->minor, arg); 20047b0: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED 20047b4: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 20047b8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20047bc: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED if (tty->forw == NULL) { 20047c0: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED 20047c4: 80 a0 60 00 cmp %g1, 0 20047c8: 12 80 00 08 bne 20047e8 20047cc: c4 04 20 04 ld [ %l0 + 4 ], %g2 rtems_termios_ttyTail = tty->back; 20047d0: 03 00 80 5e sethi %hi(0x2017800), %g1 if ( rtems_termios_ttyTail != NULL ) { 20047d4: 80 a0 a0 00 cmp %g2, 0 20047d8: 02 80 00 05 be 20047ec 20047dc: c4 20 62 58 st %g2, [ %g1 + 0x258 ] rtems_termios_ttyTail->forw = NULL; 20047e0: 10 80 00 03 b 20047ec <== NOT EXECUTED 20047e4: c0 20 80 00 clr [ %g2 ] <== NOT EXECUTED } } else { tty->forw->back = tty->back; 20047e8: c4 20 60 04 st %g2, [ %g1 + 4 ] <== NOT EXECUTED } if (tty->back == NULL) { 20047ec: c2 04 20 04 ld [ %l0 + 4 ], %g1 20047f0: 80 a0 60 00 cmp %g1, 0 20047f4: 12 80 00 08 bne 2004814 20047f8: c4 04 00 00 ld [ %l0 ], %g2 rtems_termios_ttyHead = tty->forw; 20047fc: 03 00 80 5e sethi %hi(0x2017800), %g1 if ( rtems_termios_ttyHead != NULL ) { 2004800: 80 a0 a0 00 cmp %g2, 0 2004804: 02 80 00 05 be 2004818 2004808: c4 20 62 5c st %g2, [ %g1 + 0x25c ] rtems_termios_ttyHead->back = NULL; 200480c: 10 80 00 03 b 2004818 <== NOT EXECUTED 2004810: c0 20 a0 04 clr [ %g2 + 4 ] <== NOT EXECUTED } } else { tty->back->forw = tty->forw; 2004814: c4 20 40 00 st %g2, [ %g1 ] <== NOT EXECUTED } rtems_semaphore_delete (tty->isem); 2004818: 40 00 04 08 call 2005838 200481c: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 rtems_semaphore_delete (tty->osem); 2004820: 40 00 04 06 call 2005838 2004824: d0 04 20 18 ld [ %l0 + 0x18 ], %o0 rtems_semaphore_delete (tty->rawOutBuf.Semaphore); 2004828: 40 00 04 04 call 2005838 200482c: d0 04 20 8c ld [ %l0 + 0x8c ], %o0 if ((tty->device.pollRead == NULL) || 2004830: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 2004834: 80 a0 60 00 cmp %g1, 0 2004838: 02 80 00 06 be 2004850 200483c: 01 00 00 00 nop 2004840: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 2004844: 80 a0 60 02 cmp %g1, 2 2004848: 12 80 00 04 bne 2004858 200484c: 01 00 00 00 nop (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)) rtems_semaphore_delete (tty->rawInBuf.Semaphore); 2004850: 40 00 03 fa call 2005838 <== NOT EXECUTED 2004854: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED free (tty->rawInBuf.theBuf); 2004858: 7f ff f6 62 call 20021e0 200485c: d0 04 20 58 ld [ %l0 + 0x58 ], %o0 free (tty->rawOutBuf.theBuf); 2004860: 7f ff f6 60 call 20021e0 2004864: d0 04 20 7c ld [ %l0 + 0x7c ], %o0 free (tty->cbuf); 2004868: 7f ff f6 5e call 20021e0 200486c: d0 04 20 1c ld [ %l0 + 0x1c ], %o0 free (tty); 2004870: 7f ff f6 5c call 20021e0 2004874: 90 10 00 10 mov %l0, %o0 } rtems_semaphore_release (rtems_termios_ttyMutex); 2004878: 03 00 80 5e sethi %hi(0x2017800), %g1 200487c: d0 00 62 54 ld [ %g1 + 0x254 ], %o0 ! 2017a54 2004880: 40 00 04 fc call 2005c70 2004884: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 2004888: 81 c7 e0 08 ret 200488c: 81 e8 00 00 restore 0200327c : * for each transmitted character. * It returns number of characters left to transmit */ int rtems_termios_dequeue_characters (void *ttyp, int len) { 200327c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 2003280: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 2003284: c4 06 20 b4 ld [ %i0 + 0xb4 ], %g2 <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 2003288: 82 00 40 19 add %g1, %i1, %g1 <== NOT EXECUTED 200328c: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 2003290: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 2003294: 12 80 00 0b bne 20032c0 <== NOT EXECUTED 2003298: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * send wake up to transmitter task */ sc = rtems_event_send(tty->txTaskId, 200329c: d0 06 20 c8 ld [ %i0 + 0xc8 ], %o0 <== NOT EXECUTED 20032a0: 40 00 07 de call 2005218 <== NOT EXECUTED 20032a4: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED TERMIOS_TX_START_EVENT); if (sc != RTEMS_SUCCESSFUL) 20032a8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20032ac: 02 80 00 12 be 20032f4 <== NOT EXECUTED 20032b0: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 20032b4: 40 00 0c a4 call 2006544 <== NOT EXECUTED 20032b8: 01 00 00 00 nop <== NOT EXECUTED 20032bc: 30 80 00 0e b,a 20032f4 <== NOT EXECUTED return 0; /* nothing to output in IRQ... */ } else if (tty->t_line == PPPDISC ) { 20032c0: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 20032c4: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 20032c8: 12 80 00 09 bne 20032ec <== NOT EXECUTED 20032cc: 03 00 80 5d sethi %hi(0x2017400), %g1 <== NOT EXECUTED /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 20032d0: c2 00 63 b8 ld [ %g1 + 0x3b8 ], %g1 ! 20177b8 <== NOT EXECUTED 20032d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20032d8: 02 80 00 07 be 20032f4 <== NOT EXECUTED 20032dc: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 20032e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20032e4: 01 00 00 00 nop <== NOT EXECUTED 20032e8: 30 80 00 03 b,a 20032f4 <== NOT EXECUTED } return 0; /* nothing to output in IRQ... */ } else { return rtems_termios_refill_transmitter(tty); 20032ec: 7f ff ff 69 call 2003090 <== NOT EXECUTED 20032f0: 81 e8 00 00 restore <== NOT EXECUTED } } 20032f4: 81 c7 e0 08 ret <== NOT EXECUTED 20032f8: 81 e8 00 00 restore <== NOT EXECUTED 020032fc : * 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) { 20032fc: 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) { 2003300: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 2003304: 05 00 80 5d sethi %hi(0x2017400), %g2 <== NOT EXECUTED 2003308: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 200330c: 84 10 a3 04 or %g2, 0x304, %g2 <== NOT EXECUTED 2003310: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 2003314: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 2003318: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200331c: 12 80 00 10 bne 200335c <== NOT EXECUTED 2003320: a0 10 00 02 mov %g2, %l0 <== NOT EXECUTED 2003324: a6 10 20 00 clr %l3 <== NOT EXECUTED 2003328: 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); 200332c: 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, 2003330: 10 80 00 ac b 20035e0 <== NOT EXECUTED 2003334: 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++; 2003338: d0 0e 40 00 ldub [ %i1 ], %o0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_rint(c,tty); 200333c: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 2003340: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 2003344: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 2003348: 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++; 200334c: b2 06 60 01 inc %i1 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_rint(c,tty); 2003350: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED 2003354: 9f c0 40 00 call %g1 <== NOT EXECUTED 2003358: 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--) { 200335c: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED 2003360: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 2003364: 32 bf ff f5 bne,a 2003338 <== NOT EXECUTED 2003368: 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 )) { 200336c: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED 2003370: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003374: 12 80 00 a6 bne 200360c <== NOT EXECUTED 2003378: a6 10 20 00 clr %l3 <== NOT EXECUTED 200337c: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 2003380: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003384: 22 80 00 a3 be,a 2003610 <== NOT EXECUTED 2003388: b0 10 00 13 mov %l3, %i0 <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 200338c: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 2003390: 9f c0 40 00 call %g1 <== NOT EXECUTED 2003394: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 2003398: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 200339c: a6 10 20 00 clr %l3 <== NOT EXECUTED 20033a0: 10 80 00 9b b 200360c <== NOT EXECUTED 20033a4: 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) { 20033a8: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20033ac: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 20033b0: 02 80 00 1b be 200341c <== NOT EXECUTED 20033b4: 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]) { 20033b8: c4 0e 20 4a ldub [ %i0 + 0x4a ], %g2 <== NOT EXECUTED 20033bc: 83 2c a0 18 sll %l2, 0x18, %g1 <== NOT EXECUTED 20033c0: 87 38 60 18 sra %g1, 0x18, %g3 <== NOT EXECUTED 20033c4: 80 a0 c0 02 cmp %g3, %g2 <== NOT EXECUTED 20033c8: 12 80 00 0e bne 2003400 <== NOT EXECUTED 20033cc: c2 0e 20 49 ldub [ %i0 + 0x49 ], %g1 <== NOT EXECUTED if (c == tty->termios.c_cc[VSTART]) { 20033d0: 82 08 60 ff and %g1, 0xff, %g1 <== NOT EXECUTED 20033d4: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 20033d8: 12 80 00 05 bne 20033ec <== NOT EXECUTED 20033dc: 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; 20033e0: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20033e4: 10 80 00 04 b 20033f4 <== NOT EXECUTED 20033e8: 82 18 60 10 xor %g1, 0x10, %g1 <== NOT EXECUTED } else { /* VSTOP received (other code than VSTART) */ /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; 20033ec: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20033f0: 82 10 60 10 or %g1, 0x10, %g1 <== NOT EXECUTED 20033f4: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 20033f8: 10 80 00 0c b 2003428 <== NOT EXECUTED 20033fc: 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]) { 2003400: 82 08 60 ff and %g1, 0xff, %g1 <== NOT EXECUTED 2003404: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 2003408: 12 80 00 06 bne 2003420 <== NOT EXECUTED 200340c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED /* VSTART received */ /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; 2003410: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 2003414: 10 bf ff f8 b 20033f4 <== NOT EXECUTED 2003418: 82 08 7f ef and %g1, -17, %g1 <== NOT EXECUTED flow_rcv = TRUE; } } if (flow_rcv) { 200341c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 2003420: 02 80 00 1c be 2003490 <== NOT EXECUTED 2003424: 01 00 00 00 nop <== NOT EXECUTED /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 2003428: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 200342c: 82 08 60 30 and %g1, 0x30, %g1 <== NOT EXECUTED 2003430: 80 a0 60 20 cmp %g1, 0x20 <== NOT EXECUTED 2003434: 32 80 00 6b bne,a 20035e0 <== NOT EXECUTED 2003438: b2 06 60 01 inc %i1 <== NOT EXECUTED /* disable interrupts */ rtems_interrupt_disable(level); 200343c: 7f ff fa 41 call 2001d40 <== NOT EXECUTED 2003440: 01 00 00 00 nop <== NOT EXECUTED 2003444: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 2003448: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 200344c: 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; 2003450: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 2003454: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 2003458: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 200345c: 02 80 00 09 be 2003480 <== NOT EXECUTED 2003460: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 2003464: d2 06 20 84 ld [ %i0 + 0x84 ], %o1 <== NOT EXECUTED 2003468: c2 06 20 7c ld [ %i0 + 0x7c ], %g1 <== NOT EXECUTED 200346c: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 2003470: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 2003474: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 2003478: 9f c0 80 00 call %g2 <== NOT EXECUTED 200347c: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); } /* reenable interrupts */ rtems_interrupt_enable(level); 2003480: 7f ff fa 34 call 2001d50 <== NOT EXECUTED 2003484: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 2003488: 10 80 00 56 b 20035e0 <== NOT EXECUTED 200348c: b2 06 60 01 inc %i1 <== NOT EXECUTED /* reenable interrupts */ rtems_interrupt_enable(level); } } else { newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size; 2003490: d0 06 20 60 ld [ %i0 + 0x60 ], %o0 <== NOT EXECUTED 2003494: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 2003498: 40 00 45 36 call 2014970 <.urem> <== NOT EXECUTED 200349c: 90 02 20 01 inc %o0 <== NOT EXECUTED /* if chars_in_buffer > highwater */ rtems_interrupt_disable(level); 20034a0: 7f ff fa 28 call 2001d40 <== NOT EXECUTED 20034a4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 20034a8: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size) 20034ac: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 20034b0: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 20034b4: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 20034b8: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 20034bc: 40 00 45 2d call 2014970 <.urem> <== NOT EXECUTED 20034c0: 90 02 00 10 add %o0, %l0, %o0 <== NOT EXECUTED 20034c4: c2 06 20 c0 ld [ %i0 + 0xc0 ], %g1 <== NOT EXECUTED 20034c8: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 20034cc: 08 80 00 2d bleu 2003580 <== NOT EXECUTED 20034d0: 01 00 00 00 nop <== NOT EXECUTED 20034d4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20034d8: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 20034dc: 12 80 00 29 bne 2003580 <== NOT EXECUTED 20034e0: 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; 20034e4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20034e8: 82 10 60 01 or %g1, 1, %g1 <== NOT EXECUTED 20034ec: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 20034f0: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20034f4: 82 08 64 02 and %g1, 0x402, %g1 <== NOT EXECUTED 20034f8: 80 a0 64 00 cmp %g1, 0x400 <== NOT EXECUTED 20034fc: 12 80 00 13 bne 2003548 <== NOT EXECUTED 2003500: 01 00 00 00 nop <== NOT EXECUTED == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || 2003504: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 2003508: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 200350c: 12 80 00 06 bne 2003524 <== NOT EXECUTED 2003510: 01 00 00 00 nop <== NOT EXECUTED 2003514: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED 2003518: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200351c: 12 80 00 19 bne 2003580 <== NOT EXECUTED 2003520: 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; 2003524: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 2003528: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 200352c: 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; 2003530: 82 10 60 02 or %g1, 2, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 2003534: 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; 2003538: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 200353c: 9f c0 80 00 call %g2 <== NOT EXECUTED 2003540: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 2003544: 30 80 00 0f b,a 2003580 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTOP]), 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) 2003548: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 200354c: 82 08 61 04 and %g1, 0x104, %g1 <== NOT EXECUTED 2003550: 80 a0 61 00 cmp %g1, 0x100 <== NOT EXECUTED 2003554: 12 80 00 0b bne 2003580 <== NOT EXECUTED 2003558: 01 00 00 00 nop <== NOT EXECUTED == (FL_MDRTS ) ) { tty->flow_ctrl |= FL_IRTSOFF; 200355c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 2003560: 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; 2003564: 82 10 60 04 or %g1, 4, %g1 <== NOT EXECUTED 2003568: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 200356c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2003570: 02 80 00 04 be 2003580 <== NOT EXECUTED 2003574: 01 00 00 00 nop <== NOT EXECUTED tty->device.stopRemoteTx(tty->minor); 2003578: 9f c0 80 00 call %g2 <== NOT EXECUTED 200357c: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED } } } /* reenable interrupts */ rtems_interrupt_enable(level); 2003580: 7f ff f9 f4 call 2001d50 <== NOT EXECUTED 2003584: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { 2003588: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 200358c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003590: 32 80 00 04 bne,a 20035a0 <== NOT EXECUTED 2003594: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED dropped++; 2003598: 10 80 00 11 b 20035dc <== NOT EXECUTED 200359c: a6 04 e0 01 inc %l3 <== NOT EXECUTED } else { tty->rawInBuf.theBuf[newTail] = c; 20035a0: 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 )) { 20035a4: 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; 20035a8: 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 )) { 20035ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20035b0: 32 80 00 0c bne,a 20035e0 <== NOT EXECUTED 20035b4: b2 06 60 01 inc %i1 <== NOT EXECUTED 20035b8: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 20035bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20035c0: 22 80 00 08 be,a 20035e0 <== NOT EXECUTED 20035c4: b2 06 60 01 inc %i1 <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 20035c8: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 20035cc: 9f c0 40 00 call %g1 <== NOT EXECUTED 20035d0: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 20035d4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 20035d8: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 20035dc: b2 06 60 01 inc %i1 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 20035e0: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED 20035e4: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 20035e8: 12 bf ff 70 bne 20033a8 <== NOT EXECUTED 20035ec: 01 00 00 00 nop <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 20035f0: c2 06 20 78 ld [ %i0 + 0x78 ], %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 20035f4: d0 06 20 68 ld [ %i0 + 0x68 ], %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 20035f8: 82 00 40 13 add %g1, %l3, %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 20035fc: 40 00 09 9d call 2005c70 <== NOT EXECUTED 2003600: c2 26 20 78 st %g1, [ %i0 + 0x78 ] <== NOT EXECUTED return dropped; } 2003604: 81 c7 e0 08 ret <== NOT EXECUTED 2003608: 91 e8 00 13 restore %g0, %l3, %o0 <== NOT EXECUTED 200360c: b0 10 00 13 mov %l3, %i0 <== NOT EXECUTED 2003610: 81 c7 e0 08 ret <== NOT EXECUTED 2003614: 81 e8 00 00 restore <== NOT EXECUTED 0200300c : struct rtems_termios_tty *rtems_termios_ttyTail; rtems_id rtems_termios_ttyMutex; void rtems_termios_initialize (void) { 200300c: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code sc; /* * Create the mutex semaphore for the tty list */ if (!rtems_termios_ttyMutex) { 2003010: 03 00 80 5e sethi %hi(0x2017800), %g1 2003014: c4 00 62 54 ld [ %g1 + 0x254 ], %g2 ! 2017a54 2003018: 80 a0 a0 00 cmp %g2, 0 200301c: 12 80 00 0d bne 2003050 2003020: 98 10 62 54 or %g1, 0x254, %o4 sc = rtems_semaphore_create ( 2003024: 11 15 14 9b sethi %hi(0x54526c00), %o0 2003028: 92 10 20 01 mov 1, %o1 200302c: 90 12 21 69 or %o0, 0x169, %o0 2003030: 94 10 20 54 mov 0x54, %o2 2003034: 40 00 09 6e call 20055ec 2003038: 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) 200303c: 80 a2 20 00 cmp %o0, 0 2003040: 02 80 00 04 be 2003050 2003044: 01 00 00 00 nop rtems_fatal_error_occurred (sc); 2003048: 40 00 0d 3f call 2006544 <== NOT EXECUTED 200304c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 2003050: 81 c7 e0 08 ret 2003054: 81 e8 00 00 restore 020042c4 : } } rtems_status_code rtems_termios_ioctl (void *arg) { 20042c4: 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; 20042c8: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; rtems_status_code sc; args->ioctl_return = 0; 20042cc: 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; 20042d0: e2 00 60 28 ld [ %g1 + 0x28 ], %l1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; 20042d4: 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); 20042d8: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED } } rtems_status_code rtems_termios_ioctl (void *arg) { 20042dc: 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); 20042e0: 92 10 20 00 clr %o1 <== NOT EXECUTED 20042e4: 40 00 05 9c call 2005954 <== NOT EXECUTED 20042e8: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 20042ec: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 20042f0: 22 80 00 05 be,a 2004304 <== NOT EXECUTED 20042f4: c4 04 a0 04 ld [ %l2 + 4 ], %g2 <== NOT EXECUTED args->ioctl_return = sc; 20042f8: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED 20042fc: 81 c7 e0 08 ret <== NOT EXECUTED 2004300: 81 e8 00 00 restore <== NOT EXECUTED return sc; } switch (args->command) { 2004304: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 2004308: 22 80 00 c0 be,a 2004608 <== NOT EXECUTED 200430c: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED 2004310: 18 80 00 0b bgu 200433c <== NOT EXECUTED 2004314: 03 10 01 19 sethi %hi(0x40046400), %g1 <== NOT EXECUTED 2004318: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 200431c: 22 80 00 2d be,a 20043d0 <== NOT EXECUTED 2004320: d2 04 a0 08 ld [ %l2 + 8 ], %o1 <== NOT EXECUTED 2004324: 18 80 00 b2 bgu 20045ec <== NOT EXECUTED 2004328: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 200432c: 32 80 00 18 bne,a 200438c <== NOT EXECUTED 2004330: 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; 2004334: 10 80 00 23 b 20043c0 <== NOT EXECUTED 2004338: 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) { 200433c: 82 10 62 7f or %g1, 0x27f, %g1 <== NOT EXECUTED 2004340: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2004344: 02 80 00 d0 be 2004684 <== NOT EXECUTED 2004348: 01 00 00 00 nop <== NOT EXECUTED 200434c: 38 80 00 07 bgu,a 2004368 <== NOT EXECUTED 2004350: 03 10 01 1d sethi %hi(0x40047400), %g1 <== NOT EXECUTED 2004354: 80 a0 a0 05 cmp %g2, 5 <== NOT EXECUTED 2004358: 32 80 00 0d bne,a 200438c <== NOT EXECUTED 200435c: 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; 2004360: 10 80 00 a6 b 20045f8 <== NOT EXECUTED 2004364: 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) { 2004368: 82 10 60 1a or %g1, 0x1a, %g1 <== NOT EXECUTED 200436c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2004370: 02 80 00 c1 be 2004674 <== NOT EXECUTED 2004374: 03 20 01 1d sethi %hi(0x80047400), %g1 <== NOT EXECUTED 2004378: 82 10 60 1b or %g1, 0x1b, %g1 ! 8004741b <== NOT EXECUTED 200437c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2004380: 22 80 00 a6 be,a 2004618 <== NOT EXECUTED 2004384: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED default: if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { 2004388: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED 200438c: 03 00 80 5d sethi %hi(0x2017400), %g1 <== NOT EXECUTED 2004390: 82 10 63 04 or %g1, 0x304, %g1 ! 2017704 <== NOT EXECUTED 2004394: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 2004398: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 200439c: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 20043a0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20043a4: 02 80 00 c5 be 20046b8 <== NOT EXECUTED 20043a8: b0 10 20 0a mov 0xa, %i0 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); 20043ac: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20043b0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20043b4: 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); 20043b8: 10 80 00 c0 b 20046b8 <== NOT EXECUTED 20043bc: 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; 20043c0: 92 04 60 30 add %l1, 0x30, %o1 <== NOT EXECUTED 20043c4: 40 00 26 f7 call 200dfa0 <== NOT EXECUTED 20043c8: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 20043cc: 30 80 00 bb b,a 20046b8 <== NOT EXECUTED break; case RTEMS_IO_SET_ATTRIBUTES: tty->termios = *(struct termios *)args->buffer; 20043d0: 90 04 60 30 add %l1, 0x30, %o0 <== NOT EXECUTED 20043d4: 40 00 26 f3 call 200dfa0 <== NOT EXECUTED 20043d8: 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) && 20043dc: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 20043e0: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 20043e4: 02 80 00 20 be 2004464 <== NOT EXECUTED 20043e8: 01 00 00 00 nop <== NOT EXECUTED 20043ec: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED 20043f0: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 20043f4: 12 80 00 1c bne 2004464 <== NOT EXECUTED 20043f8: 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); 20043fc: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 2004400: 82 08 7d ef and %g1, -529, %g1 <== NOT EXECUTED 2004404: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* has output been stopped due to received XOFF? */ if (tty->flow_ctrl & FL_OSTOP) { 2004408: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 200440c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 2004410: 02 80 00 15 be 2004464 <== NOT EXECUTED 2004414: 01 00 00 00 nop <== NOT EXECUTED /* disable interrupts */ rtems_interrupt_disable(level); 2004418: 7f ff f6 4a call 2001d40 <== NOT EXECUTED 200441c: 01 00 00 00 nop <== NOT EXECUTED 2004420: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 2004424: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 2004428: 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; 200442c: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 2004430: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 2004434: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2004438: 02 80 00 09 be 200445c <== NOT EXECUTED 200443c: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 2004440: d2 04 60 84 ld [ %l1 + 0x84 ], %o1 <== NOT EXECUTED 2004444: c2 04 60 7c ld [ %l1 + 0x7c ], %g1 <== NOT EXECUTED 2004448: c4 04 60 a4 ld [ %l1 + 0xa4 ], %g2 <== NOT EXECUTED 200444c: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 2004450: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 2004454: 9f c0 80 00 call %g2 <== NOT EXECUTED 2004458: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); } /* reenable interrupts */ rtems_interrupt_enable(level); 200445c: 7f ff f6 3d call 2001d50 <== NOT EXECUTED 2004460: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } } /* check for incoming XON/XOFF flow control switched off */ if (( tty->flow_ctrl & FL_MDXOF) && 2004464: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 2004468: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 200446c: 02 80 00 0c be 200449c <== NOT EXECUTED 2004470: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 2004474: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 2004478: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 200447c: 12 80 00 08 bne 200449c <== NOT EXECUTED 2004480: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_iflag & IXOFF)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDXOF); 2004484: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 2004488: 82 08 7b ff and %g1, -1025, %g1 <== NOT EXECUTED 200448c: 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); 2004490: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 2004494: 82 08 7f fd and %g1, -3, %g1 <== NOT EXECUTED 2004498: 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) && 200449c: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 20044a0: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 20044a4: 02 80 00 16 be 20044fc <== NOT EXECUTED 20044a8: c2 04 60 38 ld [ %l1 + 0x38 ], %g1 <== NOT EXECUTED 20044ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20044b0: 06 80 00 14 bl 2004500 <== NOT EXECUTED 20044b4: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_cflag & CRTSCTS)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDRTS); 20044b8: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 20044bc: 82 08 7e ff and %g1, -257, %g1 <== NOT EXECUTED 20044c0: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* restart remote Tx, if it was stopped */ if ((tty->flow_ctrl & FL_IRTSOFF) && 20044c4: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 20044c8: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 20044cc: 02 80 00 08 be 20044ec <== NOT EXECUTED 20044d0: 01 00 00 00 nop <== NOT EXECUTED 20044d4: c2 04 60 b0 ld [ %l1 + 0xb0 ], %g1 <== NOT EXECUTED 20044d8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20044dc: 02 80 00 04 be 20044ec <== NOT EXECUTED 20044e0: 01 00 00 00 nop <== NOT EXECUTED (tty->device.startRemoteTx != NULL)) { tty->device.startRemoteTx(tty->minor); 20044e4: 9f c0 40 00 call %g1 <== NOT EXECUTED 20044e8: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED } tty->flow_ctrl &= ~(FL_IRTSOFF); 20044ec: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 20044f0: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 20044f4: 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) { 20044f8: c2 04 60 38 ld [ %l1 + 0x38 ], %g1 <== NOT EXECUTED 20044fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2004500: 36 80 00 06 bge,a 2004518 <== NOT EXECUTED 2004504: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED tty->flow_ctrl |= FL_MDRTS; 2004508: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 200450c: 82 10 61 00 or %g1, 0x100, %g1 <== NOT EXECUTED 2004510: 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) { 2004514: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 2004518: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 200451c: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 2004520: 22 80 00 06 be,a 2004538 <== NOT EXECUTED 2004524: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXOF; 2004528: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 200452c: 82 10 64 00 or %g1, 0x400, %g1 <== NOT EXECUTED 2004530: 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) { 2004534: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED 2004538: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 200453c: 22 80 00 06 be,a 2004554 <== NOT EXECUTED 2004540: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXON; 2004544: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 2004548: 82 10 62 00 or %g1, 0x200, %g1 <== NOT EXECUTED 200454c: 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) { 2004550: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED 2004554: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 2004558: 32 80 00 19 bne,a 20045bc <== NOT EXECUTED 200455c: 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); 2004560: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 2004564: 40 00 02 40 call 2004e64 <== NOT EXECUTED 2004568: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED tty->vtimeTicks = tty->termios.c_cc[VTIME] * ticksPerSecond / 10; 200456c: d2 07 bf f4 ld [ %fp + -12 ], %o1 <== NOT EXECUTED 2004570: e0 0c 60 46 ldub [ %l1 + 0x46 ], %l0 <== NOT EXECUTED 2004574: 40 00 40 19 call 20145d8 <.umul> <== NOT EXECUTED 2004578: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200457c: 40 00 40 51 call 20146c0 <.udiv> <== NOT EXECUTED 2004580: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 2004584: d0 24 60 54 st %o0, [ %l1 + 0x54 ] <== NOT EXECUTED if (tty->termios.c_cc[VTIME]) { 2004588: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 200458c: 02 80 00 08 be 20045ac <== NOT EXECUTED 2004590: c2 0c 60 47 ldub [ %l1 + 0x47 ], %g1 <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 2004594: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; if (tty->termios.c_cc[VMIN]) 2004598: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200459c: 12 80 00 09 bne 20045c0 <== NOT EXECUTED 20045a0: d0 24 60 70 st %o0, [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; 20045a4: 10 80 00 0a b 20045cc <== NOT EXECUTED 20045a8: d0 24 60 74 st %o0, [ %l1 + 0x74 ] <== NOT EXECUTED } else { if (tty->termios.c_cc[VMIN]) { 20045ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20045b0: 02 80 00 06 be 20045c8 <== NOT EXECUTED 20045b4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 20045b8: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; 20045bc: c0 24 60 70 clr [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; 20045c0: 10 80 00 03 b 20045cc <== NOT EXECUTED 20045c4: c0 24 60 74 clr [ %l1 + 0x74 ] <== NOT EXECUTED } else { tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT; 20045c8: c2 24 60 6c st %g1, [ %l1 + 0x6c ] <== NOT EXECUTED } } } if (tty->device.setAttributes) 20045cc: c2 04 60 a8 ld [ %l1 + 0xa8 ], %g1 <== NOT EXECUTED 20045d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20045d4: 02 80 00 39 be 20046b8 <== NOT EXECUTED 20045d8: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.setAttributes)(tty->minor, &tty->termios); 20045dc: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 20045e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20045e4: 92 04 60 30 add %l1, 0x30, %o1 <== NOT EXECUTED 20045e8: 30 80 00 34 b,a 20046b8 <== NOT EXECUTED break; case RTEMS_IO_TCDRAIN: drainOutput (tty); 20045ec: 7f ff fe 1c call 2003e5c <== NOT EXECUTED 20045f0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 20045f4: 30 80 00 31 b,a 20046b8 <== NOT EXECUTED break; case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; 20045f8: c2 24 60 d4 st %g1, [ %l1 + 0xd4 ] <== NOT EXECUTED 20045fc: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 2004600: 10 80 00 2e b 20046b8 <== NOT EXECUTED 2004604: c2 24 60 d8 st %g1, [ %l1 + 0xd8 ] <== NOT EXECUTED break; case RTEMS_IO_RCVWAKEUP: tty->tty_rcv = *wakeup; 2004608: c2 24 60 dc st %g1, [ %l1 + 0xdc ] <== NOT EXECUTED 200460c: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 2004610: 10 80 00 2a b 20046b8 <== NOT EXECUTED 2004614: 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) { 2004618: 05 00 80 5d sethi %hi(0x2017400), %g2 <== NOT EXECUTED 200461c: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 2004620: a0 10 a3 04 or %g2, 0x304, %l0 <== NOT EXECUTED 2004624: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 2004628: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 200462c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2004630: 22 80 00 06 be,a 2004648 <== NOT EXECUTED 2004634: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_close(tty); 2004638: 9f c0 40 00 call %g1 <== NOT EXECUTED 200463c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 2004640: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } tty->t_line=*(int*)(args->buffer); 2004644: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED tty->t_sc = NULL; /* ensure that no more valid data */ 2004648: 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); 200464c: 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) { 2004650: 83 28 a0 05 sll %g2, 5, %g1 <== NOT EXECUTED 2004654: c2 04 00 01 ld [ %l0 + %g1 ], %g1 <== NOT EXECUTED 2004658: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200465c: 02 80 00 17 be 20046b8 <== NOT EXECUTED 2004660: c4 24 60 cc st %g2, [ %l1 + 0xcc ] <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_open(tty); 2004664: 9f c0 40 00 call %g1 <== NOT EXECUTED 2004668: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 200466c: 10 80 00 13 b 20046b8 <== NOT EXECUTED 2004670: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } break; case TIOCGETD: *(int*)(args->buffer)=tty->t_line; 2004674: c4 04 a0 08 ld [ %l2 + 8 ], %g2 <== NOT EXECUTED 2004678: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED 200467c: 10 80 00 0f b 20046b8 <== NOT EXECUTED 2004680: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED break; #endif case FIONREAD: { int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; 2004684: c4 04 60 60 ld [ %l1 + 0x60 ], %g2 <== NOT EXECUTED 2004688: c2 04 60 5c ld [ %l1 + 0x5c ], %g1 <== NOT EXECUTED if ( rawnc < 0 ) 200468c: 88 a0 80 01 subcc %g2, %g1, %g4 <== NOT EXECUTED 2004690: 3c 80 00 05 bpos,a 20046a4 <== NOT EXECUTED 2004694: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 <== NOT EXECUTED rawnc += tty->rawInBuf.Size; 2004698: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 <== NOT EXECUTED 200469c: 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; 20046a0: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 <== NOT EXECUTED 20046a4: c4 04 60 24 ld [ %l1 + 0x24 ], %g2 <== NOT EXECUTED 20046a8: c6 04 a0 08 ld [ %l2 + 8 ], %g3 <== NOT EXECUTED 20046ac: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 20046b0: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 20046b4: c2 20 c0 00 st %g1, [ %g3 ] <== NOT EXECUTED } break; } rtems_semaphore_release (tty->osem); 20046b8: 40 00 05 6e call 2005c70 <== NOT EXECUTED 20046bc: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED args->ioctl_return = sc; 20046c0: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED return sc; } 20046c4: 81 c7 e0 08 ret <== NOT EXECUTED 20046c8: 81 e8 00 00 restore <== NOT EXECUTED 02004890 : rtems_device_major_number major, rtems_device_minor_number minor, void *arg, const rtems_termios_callbacks *callbacks ) { 2004890: 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, 2004894: 03 00 80 5e sethi %hi(0x2017800), %g1 2004898: d0 00 62 54 ld [ %g1 + 0x254 ], %o0 ! 2017a54 200489c: 92 10 20 00 clr %o1 20048a0: 40 00 04 2d call 2005954 20048a4: 94 10 20 00 clr %o2 RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 20048a8: a6 92 20 00 orcc %o0, 0, %l3 20048ac: 12 80 01 1c bne 2004d1c 20048b0: 03 00 80 5e sethi %hi(0x2017800), %g1 return sc; for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 20048b4: 10 80 00 0a b 20048dc 20048b8: e0 00 62 5c ld [ %g1 + 0x25c ], %l0 ! 2017a5c if ((tty->major == major) && (tty->minor == minor)) 20048bc: 80 a0 40 18 cmp %g1, %i0 20048c0: 32 80 00 07 bne,a 20048dc 20048c4: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 20048c8: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 20048cc: 80 a0 40 19 cmp %g1, %i1 20048d0: 22 80 00 ea be,a 2004c78 20048d4: 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) { 20048d8: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 20048dc: 80 a4 20 00 cmp %l0, 0 20048e0: 32 bf ff f7 bne,a 20048bc 20048e4: c2 04 20 0c ld [ %l0 + 0xc ], %g1 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 20048e8: 90 10 20 01 mov 1, %o0 20048ec: 7f ff f6 fb call 20024d8 20048f0: 92 10 20 e8 mov 0xe8, %o1 if (tty == NULL) { 20048f4: a2 92 20 00 orcc %o0, 0, %l1 20048f8: 02 80 00 0f be 2004934 20048fc: 03 00 80 5e sethi %hi(0x2017800), %g1 return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 2004900: 03 00 80 5b sethi %hi(0x2016c00), %g1 2004904: c2 00 63 d0 ld [ %g1 + 0x3d0 ], %g1 ! 2016fd0 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 2004908: a0 10 00 11 mov %l1, %l0 return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 200490c: c2 24 60 64 st %g1, [ %l1 + 0x64 ] tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size); 2004910: d0 04 60 64 ld [ %l1 + 0x64 ], %o0 2004914: 7f ff f6 5b call 2002280 2004918: 01 00 00 00 nop if (tty->rawInBuf.theBuf == NULL) { 200491c: 80 a2 20 00 cmp %o0, 0 2004920: 12 80 00 08 bne 2004940 2004924: d0 24 60 58 st %o0, [ %l1 + 0x58 ] free(tty); 2004928: 7f ff f6 2e call 20021e0 <== NOT EXECUTED 200492c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_semaphore_release (rtems_termios_ttyMutex); 2004930: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED 2004934: d0 00 62 54 ld [ %g1 + 0x254 ], %o0 ! 2017a54 <== NOT EXECUTED 2004938: 10 80 00 f7 b 2004d14 <== NOT EXECUTED 200493c: a6 10 20 1a mov 0x1a, %l3 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate raw output buffer */ tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE; 2004940: 03 00 80 5b sethi %hi(0x2016c00), %g1 2004944: c2 00 63 d4 ld [ %g1 + 0x3d4 ], %g1 ! 2016fd4 2004948: c2 24 60 88 st %g1, [ %l1 + 0x88 ] tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size); 200494c: d0 04 60 88 ld [ %l1 + 0x88 ], %o0 2004950: 7f ff f6 4c call 2002280 2004954: 01 00 00 00 nop if (tty->rawOutBuf.theBuf == NULL) { 2004958: 80 a2 20 00 cmp %o0, 0 200495c: 12 80 00 05 bne 2004970 2004960: d0 24 60 7c st %o0, [ %l1 + 0x7c ] free((void *)(tty->rawInBuf.theBuf)); 2004964: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED free(tty); rtems_semaphore_release (rtems_termios_ttyMutex); 2004968: 10 80 00 0c b 2004998 <== NOT EXECUTED 200496c: a6 10 20 1a mov 0x1a, %l3 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate cooked buffer */ tty->cbuf = malloc (CBUFSIZE); 2004970: 03 00 80 5b sethi %hi(0x2016c00), %g1 2004974: 7f ff f6 43 call 2002280 2004978: d0 00 63 cc ld [ %g1 + 0x3cc ], %o0 ! 2016fcc if (tty->cbuf == NULL) { 200497c: 80 a2 20 00 cmp %o0, 0 2004980: 12 80 00 0c bne 20049b0 2004984: d0 24 60 1c st %o0, [ %l1 + 0x1c ] free((void *)(tty->rawOutBuf.theBuf)); 2004988: d0 04 60 7c ld [ %l1 + 0x7c ], %o0 <== NOT EXECUTED 200498c: 7f ff f6 15 call 20021e0 <== NOT EXECUTED 2004990: a6 10 20 1a mov 0x1a, %l3 <== NOT EXECUTED free((void *)(tty->rawInBuf.theBuf)); 2004994: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED 2004998: 7f ff f6 12 call 20021e0 <== NOT EXECUTED 200499c: 01 00 00 00 nop <== NOT EXECUTED free(tty); 20049a0: 7f ff f6 10 call 20021e0 <== NOT EXECUTED 20049a4: 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); 20049a8: 10 80 00 da b 2004d10 <== NOT EXECUTED 20049ac: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED tty->tty_rcvwakeup = 0; /* * link tty */ tty->forw = rtems_termios_ttyHead; 20049b0: 07 00 80 5e sethi %hi(0x2017800), %g3 20049b4: c2 00 e2 5c ld [ %g3 + 0x25c ], %g1 ! 2017a5c return RTEMS_NO_MEMORY; } /* * Initialize wakeup callbacks */ tty->tty_snd.sw_pfn = NULL; 20049b8: c0 24 60 d4 clr [ %l1 + 0xd4 ] tty->tty_snd.sw_arg = NULL; 20049bc: c0 24 60 d8 clr [ %l1 + 0xd8 ] tty->tty_rcv.sw_pfn = NULL; 20049c0: c0 24 60 dc clr [ %l1 + 0xdc ] tty->tty_rcv.sw_arg = NULL; 20049c4: c0 24 60 e0 clr [ %l1 + 0xe0 ] tty->tty_rcvwakeup = 0; 20049c8: c0 24 60 e4 clr [ %l1 + 0xe4 ] /* * link tty */ tty->forw = rtems_termios_ttyHead; 20049cc: c2 24 40 00 st %g1, [ %l1 ] tty->back = NULL; if (rtems_termios_ttyHead != NULL) 20049d0: 80 a0 60 00 cmp %g1, 0 20049d4: 02 80 00 03 be 20049e0 20049d8: c0 24 60 04 clr [ %l1 + 4 ] rtems_termios_ttyHead->back = tty; 20049dc: e2 20 60 04 st %l1, [ %g1 + 4 ] <== NOT EXECUTED rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) 20049e0: 05 00 80 5e sethi %hi(0x2017800), %g2 20049e4: c2 00 a2 58 ld [ %g2 + 0x258 ], %g1 ! 2017a58 20049e8: 80 a0 60 00 cmp %g1, 0 20049ec: 12 80 00 03 bne 20049f8 20049f0: e0 20 e2 5c st %l0, [ %g3 + 0x25c ] rtems_termios_ttyTail = tty; 20049f4: e0 20 a2 58 st %l0, [ %g2 + 0x258 ] tty->major = major; /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 20049f8: 25 00 80 5b sethi %hi(0x2016c00), %l2 20049fc: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 ! 2016fd8 2004a00: 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; 2004a04: f2 24 20 10 st %i1, [ %l0 + 0x10 ] tty->major = major; 2004a08: f0 24 20 0c st %i0, [ %l0 + 0xc ] /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 2004a0c: 90 12 21 00 or %o0, 0x100, %o0 2004a10: 92 10 20 01 mov 1, %o1 2004a14: 90 10 40 08 or %g1, %o0, %o0 2004a18: 94 10 20 54 mov 0x54, %o2 2004a1c: 96 10 20 00 clr %o3 2004a20: 40 00 02 f3 call 20055ec 2004a24: 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) 2004a28: 80 a2 20 00 cmp %o0, 0 2004a2c: 02 80 00 05 be 2004a40 2004a30: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 rtems_fatal_error_occurred (sc); 2004a34: 40 00 06 c4 call 2006544 <== NOT EXECUTED 2004a38: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 2004a3c: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 <== NOT EXECUTED 2004a40: 11 15 14 9b sethi %hi(0x54526c00), %o0 2004a44: 92 10 20 01 mov 1, %o1 2004a48: 90 12 23 00 or %o0, 0x300, %o0 2004a4c: 94 10 20 54 mov 0x54, %o2 2004a50: 90 10 40 08 or %g1, %o0, %o0 2004a54: 96 10 20 00 clr %o3 2004a58: 40 00 02 e5 call 20055ec 2004a5c: 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) 2004a60: 80 a2 20 00 cmp %o0, 0 2004a64: 02 80 00 05 be 2004a78 2004a68: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 rtems_fatal_error_occurred (sc); 2004a6c: 40 00 06 b6 call 2006544 <== NOT EXECUTED 2004a70: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 2004a74: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 <== NOT EXECUTED 2004a78: 11 15 14 9e sethi %hi(0x54527800), %o0 2004a7c: 92 10 20 00 clr %o1 2004a80: 90 10 40 08 or %g1, %o0, %o0 2004a84: 94 10 20 20 mov 0x20, %o2 2004a88: 96 10 20 00 clr %o3 2004a8c: 40 00 02 d8 call 20055ec 2004a90: 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) 2004a94: 80 a2 20 00 cmp %o0, 0 2004a98: 22 80 00 05 be,a 2004aac 2004a9c: c0 24 20 94 clr [ %l0 + 0x94 ] rtems_fatal_error_occurred (sc); 2004aa0: 40 00 06 a9 call 2006544 <== NOT EXECUTED 2004aa4: 01 00 00 00 nop <== NOT EXECUTED tty->rawOutBufState = rob_idle; 2004aa8: c0 24 20 94 clr [ %l0 + 0x94 ] <== NOT EXECUTED /* * Set callbacks */ tty->device = *callbacks; 2004aac: 92 10 00 1b mov %i3, %o1 2004ab0: 90 04 20 98 add %l0, 0x98, %o0 2004ab4: 40 00 25 3b call 200dfa0 2004ab8: 94 10 20 20 mov 0x20, %o2 /* * Create I/O tasks */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 2004abc: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 2004ac0: 80 a0 60 02 cmp %g1, 2 2004ac4: 32 80 00 1f bne,a 2004b40 2004ac8: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 sc = rtems_task_create ( 2004acc: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 <== NOT EXECUTED 2004ad0: 11 15 1e 15 sethi %hi(0x54785400), %o0 <== NOT EXECUTED 2004ad4: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 2004ad8: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 2004adc: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 2004ae0: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 2004ae4: 98 10 20 00 clr %o4 <== NOT EXECUTED 2004ae8: 40 00 04 a8 call 2005d88 <== NOT EXECUTED 2004aec: 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) 2004af0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004af4: 02 80 00 05 be 2004b08 <== NOT EXECUTED 2004af8: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004afc: 40 00 06 92 call 2006544 <== NOT EXECUTED 2004b00: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_create ( 2004b04: c2 4c a3 d8 ldsb [ %l2 + 0x3d8 ], %g1 <== NOT EXECUTED 2004b08: 11 14 9e 15 sethi %hi(0x52785400), %o0 <== NOT EXECUTED 2004b0c: 92 10 20 09 mov 9, %o1 <== NOT EXECUTED 2004b10: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 2004b14: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 2004b18: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 2004b1c: 98 10 20 00 clr %o4 <== NOT EXECUTED 2004b20: 40 00 04 9a call 2005d88 <== NOT EXECUTED 2004b24: 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) 2004b28: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004b2c: 22 80 00 05 be,a 2004b40 <== NOT EXECUTED 2004b30: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004b34: 40 00 06 84 call 2006544 <== NOT EXECUTED 2004b38: 01 00 00 00 nop <== NOT EXECUTED } if ((tty->device.pollRead == NULL) || 2004b3c: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 2004b40: 80 a0 60 00 cmp %g1, 0 2004b44: 02 80 00 06 be 2004b5c 2004b48: 03 00 80 5b sethi %hi(0x2016c00), %g1 2004b4c: c2 04 60 b4 ld [ %l1 + 0xb4 ], %g1 2004b50: 80 a0 60 02 cmp %g1, 2 2004b54: 12 80 00 10 bne 2004b94 2004b58: 03 00 80 5b sethi %hi(0x2016c00), %g1 (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){ sc = rtems_semaphore_create ( 2004b5c: c2 48 63 d8 ldsb [ %g1 + 0x3d8 ], %g1 ! 2016fd8 <== NOT EXECUTED 2004b60: 11 15 14 9c sethi %hi(0x54527000), %o0 <== NOT EXECUTED 2004b64: 92 10 20 00 clr %o1 <== NOT EXECUTED 2004b68: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED 2004b6c: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 2004b70: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 2004b74: 96 10 20 00 clr %o3 <== NOT EXECUTED 2004b78: 40 00 02 9d call 20055ec <== NOT EXECUTED 2004b7c: 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) 2004b80: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004b84: 02 80 00 04 be 2004b94 <== NOT EXECUTED 2004b88: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004b8c: 40 00 06 6e call 2006544 <== NOT EXECUTED 2004b90: 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; 2004b94: c0 24 60 b8 clr [ %l1 + 0xb8 ] /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 2004b98: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 2004b9c: 09 00 80 5b sethi %hi(0x2016c00), %g4 2004ba0: c4 09 23 d8 ldub [ %g4 + 0x3d8 ], %g2 ! 2016fd8 /* 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; 2004ba4: 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'; 2004ba8: 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; 2004bac: 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'; 2004bb0: 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; 2004bb4: c6 04 60 64 ld [ %l1 + 0x64 ], %g3 /* * Bump name characer */ if (c++ == 'z') 2004bb8: 84 00 a0 01 inc %g2 } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 2004bbc: 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') 2004bc0: c4 29 23 d8 stb %g2, [ %g4 + 0x3d8 ] } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 2004bc4: 82 10 61 02 or %g1, 0x102, %g1 2004bc8: c2 24 60 30 st %g1, [ %l1 + 0x30 ] tty->termios.c_oflag = OPOST | ONLCR | XTABS; 2004bcc: 03 00 00 06 sethi %hi(0x1800), %g1 2004bd0: 82 10 60 05 or %g1, 5, %g1 ! 1805 2004bd4: c2 24 60 34 st %g1, [ %l1 + 0x34 ] tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 2004bd8: 82 10 28 bd mov 0x8bd, %g1 2004bdc: c2 24 60 38 st %g1, [ %l1 + 0x38 ] tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; 2004be0: 03 00 00 20 sethi %hi(0x8000), %g1 2004be4: 82 10 62 3b or %g1, 0x23b, %g1 ! 823b 2004be8: c2 24 60 3c st %g1, [ %l1 + 0x3c ] tty->termios.c_cc[VINTR] = '\003'; 2004bec: 82 10 20 03 mov 3, %g1 2004bf0: c2 2c 60 41 stb %g1, [ %l1 + 0x41 ] tty->termios.c_cc[VQUIT] = '\034'; 2004bf4: 82 10 20 1c mov 0x1c, %g1 2004bf8: c2 2c 60 42 stb %g1, [ %l1 + 0x42 ] tty->termios.c_cc[VERASE] = '\177'; 2004bfc: 82 10 20 7f mov 0x7f, %g1 2004c00: c2 2c 60 43 stb %g1, [ %l1 + 0x43 ] tty->termios.c_cc[VKILL] = '\025'; 2004c04: 82 10 20 15 mov 0x15, %g1 2004c08: c2 2c 60 44 stb %g1, [ %l1 + 0x44 ] tty->termios.c_cc[VEOF] = '\004'; 2004c0c: 82 10 20 04 mov 4, %g1 2004c10: 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'; 2004c14: 82 10 20 11 mov 0x11, %g1 2004c18: c2 2c 60 49 stb %g1, [ %l1 + 0x49 ] tty->termios.c_cc[VSTOP] = '\023'; 2004c1c: 82 10 20 13 mov 0x13, %g1 2004c20: c2 2c 60 4a stb %g1, [ %l1 + 0x4a ] tty->termios.c_cc[VSUSP] = '\032'; 2004c24: 82 10 20 1a mov 0x1a, %g1 2004c28: c2 2c 60 4b stb %g1, [ %l1 + 0x4b ] tty->termios.c_cc[VREPRINT] = '\022'; 2004c2c: 82 10 20 12 mov 0x12, %g1 2004c30: c2 2c 60 4d stb %g1, [ %l1 + 0x4d ] tty->termios.c_cc[VDISCARD] = '\017'; 2004c34: 82 10 20 0f mov 0xf, %g1 2004c38: c2 2c 60 4e stb %g1, [ %l1 + 0x4e ] tty->termios.c_cc[VWERASE] = '\027'; 2004c3c: 82 10 20 17 mov 0x17, %g1 2004c40: c2 2c 60 4f stb %g1, [ %l1 + 0x4f ] tty->termios.c_cc[VLNEXT] = '\026'; 2004c44: 82 10 20 16 mov 0x16, %g1 2004c48: 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; 2004c4c: 83 28 e0 01 sll %g3, 1, %g1 2004c50: 82 00 40 03 add %g1, %g3, %g1 2004c54: 83 30 60 02 srl %g1, 2, %g1 /* * Bump name characer */ if (c++ == 'z') 2004c58: 85 28 a0 18 sll %g2, 0x18, %g2 2004c5c: 85 38 a0 18 sra %g2, 0x18, %g2 2004c60: 80 a0 a0 7b cmp %g2, 0x7b 2004c64: 12 80 00 04 bne 2004c74 2004c68: c2 24 60 c0 st %g1, [ %l1 + 0xc0 ] c = 'a'; 2004c6c: 82 10 20 61 mov 0x61, %g1 <== NOT EXECUTED 2004c70: c2 29 23 d8 stb %g1, [ %g4 + 0x3d8 ] <== NOT EXECUTED } args->iop->data1 = tty; if (!tty->refcount++) { 2004c74: c2 04 20 08 ld [ %l0 + 8 ], %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 2004c78: c4 06 80 00 ld [ %i2 ], %g2 if (!tty->refcount++) { 2004c7c: 82 00 60 01 inc %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 2004c80: e0 20 a0 28 st %l0, [ %g2 + 0x28 ] if (!tty->refcount++) { 2004c84: 80 a0 60 01 cmp %g1, 1 2004c88: 12 80 00 21 bne 2004d0c 2004c8c: c2 24 20 08 st %g1, [ %l0 + 8 ] if (tty->device.firstOpen) 2004c90: c2 04 20 98 ld [ %l0 + 0x98 ], %g1 2004c94: 80 a0 60 00 cmp %g1, 0 2004c98: 02 80 00 05 be 2004cac 2004c9c: 90 10 00 18 mov %i0, %o0 (*tty->device.firstOpen)(major, minor, arg); 2004ca0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2004ca4: 9f c0 40 00 call %g1 <== NOT EXECUTED 2004ca8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED /* * start I/O tasks, if needed */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 2004cac: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 2004cb0: 80 a0 60 02 cmp %g1, 2 2004cb4: 12 80 00 17 bne 2004d10 2004cb8: 03 00 80 5e sethi %hi(0x2017800), %g1 sc = rtems_task_start(tty->rxTaskId, 2004cbc: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED 2004cc0: 13 00 80 13 sethi %hi(0x2004c00), %o1 <== NOT EXECUTED 2004cc4: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2004cc8: 40 00 05 22 call 2006150 <== NOT EXECUTED 2004ccc: 92 12 61 24 or %o1, 0x124, %o1 <== NOT EXECUTED rtems_termios_rxdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 2004cd0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004cd4: 22 80 00 05 be,a 2004ce8 <== NOT EXECUTED 2004cd8: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004cdc: 40 00 06 1a call 2006544 <== NOT EXECUTED 2004ce0: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_start(tty->txTaskId, 2004ce4: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 2004ce8: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 2004cec: 13 00 80 13 sethi %hi(0x2004c00), %o1 <== NOT EXECUTED 2004cf0: 40 00 05 18 call 2006150 <== NOT EXECUTED 2004cf4: 92 12 61 94 or %o1, 0x194, %o1 ! 2004d94 <== NOT EXECUTED rtems_termios_txdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 2004cf8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004cfc: 02 80 00 05 be 2004d10 <== NOT EXECUTED 2004d00: 03 00 80 5e sethi %hi(0x2017800), %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2004d04: 40 00 06 10 call 2006544 <== NOT EXECUTED 2004d08: 01 00 00 00 nop <== NOT EXECUTED } } rtems_semaphore_release (rtems_termios_ttyMutex); 2004d0c: 03 00 80 5e sethi %hi(0x2017800), %g1 2004d10: d0 00 62 54 ld [ %g1 + 0x254 ], %o0 ! 2017a54 2004d14: 40 00 03 d7 call 2005c70 2004d18: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } 2004d1c: 81 c7 e0 08 ret 2004d20: 91 e8 00 13 restore %g0, %l3, %o0 02003618 : * Send characters to device-specific code */ void rtems_termios_puts ( const void *_buf, int len, struct rtems_termios_tty *tty) { 2003618: 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) { 200361c: c2 06 a0 b4 ld [ %i2 + 0xb4 ], %g1 2003620: 80 a0 60 00 cmp %g1, 0 2003624: 12 80 00 08 bne 2003644 2003628: 92 10 00 18 mov %i0, %o1 (*tty->device.write)(tty->minor, (void *)buf, len); 200362c: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 2003630: c2 06 a0 a4 ld [ %i2 + 0xa4 ], %g1 2003634: 9f c0 40 00 call %g1 2003638: 94 10 00 19 mov %i1, %o2 200363c: 81 c7 e0 08 ret 2003640: 81 e8 00 00 restore return; } newHead = tty->rawOutBuf.Head; 2003644: e2 06 a0 80 ld [ %i2 + 0x80 ], %l1 <== NOT EXECUTED while (len) { 2003648: 10 80 00 3c b 2003738 <== NOT EXECUTED 200364c: 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; 2003650: d2 06 a0 88 ld [ %i2 + 0x88 ], %o1 <== NOT EXECUTED 2003654: 40 00 44 c7 call 2014970 <.urem> <== NOT EXECUTED 2003658: 90 04 60 01 add %l1, 1, %o0 <== NOT EXECUTED rtems_interrupt_disable (level); 200365c: 7f ff f9 b9 call 2001d40 <== NOT EXECUTED 2003660: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 2003664: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 2003668: 30 80 00 10 b,a 20036a8 <== NOT EXECUTED while (newHead == tty->rawOutBuf.Tail) { tty->rawOutBufState = rob_wait; 200366c: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 2003670: 7f ff f9 b8 call 2001d50 <== NOT EXECUTED 2003674: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 2003678: d0 06 a0 8c ld [ %i2 + 0x8c ], %o0 <== NOT EXECUTED 200367c: 92 10 20 00 clr %o1 <== NOT EXECUTED 2003680: 40 00 08 b5 call 2005954 <== NOT EXECUTED 2003684: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 2003688: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 200368c: 02 80 00 04 be 200369c <== NOT EXECUTED 2003690: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 2003694: 40 00 0b ac call 2006544 <== NOT EXECUTED 2003698: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 200369c: 7f ff f9 a9 call 2001d40 <== NOT EXECUTED 20036a0: 01 00 00 00 nop <== NOT EXECUTED 20036a4: 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) { 20036a8: c2 06 a0 84 ld [ %i2 + 0x84 ], %g1 <== NOT EXECUTED 20036ac: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 20036b0: 02 bf ff ef be 200366c <== NOT EXECUTED 20036b4: 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++; 20036b8: c6 06 a0 80 ld [ %i2 + 0x80 ], %g3 <== NOT EXECUTED 20036bc: c4 0e 00 00 ldub [ %i0 ], %g2 <== NOT EXECUTED 20036c0: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 20036c4: c4 28 40 03 stb %g2, [ %g1 + %g3 ] <== NOT EXECUTED tty->rawOutBuf.Head = newHead; if (tty->rawOutBufState == rob_idle) { 20036c8: 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; 20036cc: e2 26 a0 80 st %l1, [ %i2 + 0x80 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_idle) { 20036d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20036d4: 32 80 00 15 bne,a 2003728 <== NOT EXECUTED 20036d8: b0 06 20 01 inc %i0 <== NOT EXECUTED /* check, whether XOFF has been received */ if (!(tty->flow_ctrl & FL_ORCVXOF)) { 20036dc: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 20036e0: 80 88 60 10 btst 0x10, %g1 <== NOT EXECUTED 20036e4: 12 80 00 0b bne 2003710 <== NOT EXECUTED 20036e8: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.write)(tty->minor, 20036ec: d2 06 a0 84 ld [ %i2 + 0x84 ], %o1 <== NOT EXECUTED 20036f0: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 20036f4: c4 06 a0 a4 ld [ %i2 + 0xa4 ], %g2 <== NOT EXECUTED 20036f8: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 <== NOT EXECUTED 20036fc: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 2003700: 9f c0 80 00 call %g2 <== NOT EXECUTED 2003704: 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; 2003708: 10 80 00 06 b 2003720 <== NOT EXECUTED 200370c: 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; 2003710: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 2003714: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED 2003718: c2 26 a0 b8 st %g1, [ %i2 + 0xb8 ] <== NOT EXECUTED } tty->rawOutBufState = rob_busy; 200371c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 2003720: 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++; 2003724: 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); 2003728: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 200372c: 7f ff f9 89 call 2001d50 <== NOT EXECUTED 2003730: 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) { 2003734: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 2003738: 12 bf ff c6 bne 2003650 <== NOT EXECUTED 200373c: 01 00 00 00 nop <== NOT EXECUTED 2003740: 81 c7 e0 08 ret <== NOT EXECUTED 2003744: 81 e8 00 00 restore <== NOT EXECUTED 02003ed8 : return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 2003ed8: 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; 2003edc: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED uint32_t count = args->count; 2003ee0: 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; 2003ee4: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 <== NOT EXECUTED uint32_t count = args->count; char *buffer = args->buffer; 2003ee8: 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); 2003eec: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 2003ef0: 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); 2003ef4: 92 10 20 00 clr %o1 <== NOT EXECUTED 2003ef8: 40 00 06 97 call 2005954 <== NOT EXECUTED 2003efc: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 2003f00: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 2003f04: 12 80 00 10 bne 2003f44 <== NOT EXECUTED 2003f08: 03 00 80 5d sethi %hi(0x2017400), %g1 <== NOT EXECUTED return sc; if (rtems_termios_linesw[tty->t_line].l_read != NULL) { 2003f0c: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 <== NOT EXECUTED 2003f10: 82 10 63 04 or %g1, 0x304, %g1 <== NOT EXECUTED 2003f14: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 2003f18: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 2003f1c: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED 2003f20: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003f24: 02 80 00 0a be 2003f4c <== NOT EXECUTED 2003f28: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_read(tty,args); 2003f2c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2003f30: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2003f34: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 2003f38: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED 2003f3c: 40 00 07 4d call 2005c70 <== NOT EXECUTED 2003f40: c0 24 20 e4 clr [ %l0 + 0xe4 ] <== NOT EXECUTED 2003f44: 81 c7 e0 08 ret <== NOT EXECUTED 2003f48: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->cindex == tty->ccount) { 2003f4c: c4 04 20 24 ld [ %l0 + 0x24 ], %g2 <== NOT EXECUTED 2003f50: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 2003f54: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2003f58: 12 80 00 cc bne 2004288 <== NOT EXECUTED 2003f5c: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED tty->cindex = tty->ccount = 0; tty->read_start_column = tty->column; 2003f60: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED if (tty->device.pollRead != NULL 2003f64: 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; 2003f68: 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; 2003f6c: c0 24 20 20 clr [ %l0 + 0x20 ] <== NOT EXECUTED tty->read_start_column = tty->column; if (tty->device.pollRead != NULL 2003f70: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2003f74: 02 80 00 5a be 20040dc <== NOT EXECUTED 2003f78: c0 24 20 24 clr [ %l0 + 0x24 ] <== NOT EXECUTED 2003f7c: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED 2003f80: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003f84: 32 80 00 57 bne,a 20040e0 <== NOT EXECUTED 2003f88: 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) { 2003f8c: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 2003f90: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 2003f94: 22 80 00 13 be,a 2003fe0 <== NOT EXECUTED 2003f98: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED for (;;) { n = (*tty->device.pollRead)(tty->minor); 2003f9c: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 2003fa0: 9f c0 40 00 call %g1 <== NOT EXECUTED 2003fa4: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 2003fa8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2003fac: 16 80 00 06 bge 2003fc4 <== NOT EXECUTED 2003fb0: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED rtems_task_wake_after (1); 2003fb4: 40 00 08 a6 call 200624c <== NOT EXECUTED 2003fb8: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED { int n; if (tty->termios.c_lflag & ICANON) { for (;;) { n = (*tty->device.pollRead)(tty->minor); 2003fbc: 10 bf ff f9 b 2003fa0 <== NOT EXECUTED 2003fc0: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED if (n < 0) { rtems_task_wake_after (1); } else { if (siproc (n, tty)) 2003fc4: 7f ff ff 64 call 2003d54 <== NOT EXECUTED 2003fc8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 2003fcc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2003fd0: 22 bf ff f4 be,a 2003fa0 <== NOT EXECUTED 2003fd4: 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)) { 2003fd8: 10 80 00 ac b 2004288 <== NOT EXECUTED 2003fdc: 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]) 2003fe0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003fe4: 12 80 00 0a bne 200400c <== NOT EXECUTED 2003fe8: aa 07 bf f4 add %fp, -12, %l5 <== NOT EXECUTED 2003fec: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 2003ff0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2003ff4: 02 80 00 07 be 2004010 <== NOT EXECUTED 2003ff8: a2 07 bf f0 add %fp, -16, %l1 <== NOT EXECUTED rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 2003ffc: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 2004000: 40 00 03 99 call 2004e64 <== NOT EXECUTED 2004004: 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); 2004008: 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); 200400c: 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); 2004010: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 2004014: 9f c0 40 00 call %g1 <== NOT EXECUTED 2004018: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 200401c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004020: 36 80 00 1d bge,a 2004094 <== NOT EXECUTED 2004024: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED if (tty->termios.c_cc[VMIN]) { 2004028: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED 200402c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2004030: 02 80 00 0a be 2004058 <== NOT EXECUTED 2004034: c4 0c 20 46 ldub [ %l0 + 0x46 ], %g2 <== NOT EXECUTED if (tty->termios.c_cc[VTIME] && tty->ccount) { 2004038: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 200403c: 02 80 00 12 be 2004084 <== NOT EXECUTED 2004040: 01 00 00 00 nop <== NOT EXECUTED 2004044: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 2004048: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 200404c: 02 80 00 0e be 2004084 <== NOT EXECUTED 2004050: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 2004054: 30 80 00 04 b,a 2004064 <== NOT EXECUTED break; } } } else { if (!tty->termios.c_cc[VTIME]) 2004058: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 200405c: 02 80 00 8a be 2004284 <== NOT EXECUTED 2004060: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED break; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); 2004064: 40 00 03 80 call 2004e64 <== NOT EXECUTED 2004068: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED if ((now - then) > tty->vtimeTicks) { 200406c: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 <== NOT EXECUTED 2004070: c4 1f bf f0 ldd [ %fp + -16 ], %g2 <== NOT EXECUTED 2004074: 84 20 80 03 sub %g2, %g3, %g2 <== NOT EXECUTED 2004078: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 200407c: 18 80 00 83 bgu 2004288 <== NOT EXECUTED 2004080: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED break; } } rtems_task_wake_after (1); 2004084: 40 00 08 72 call 200624c <== NOT EXECUTED 2004088: 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); 200408c: 10 bf ff e2 b 2004014 <== NOT EXECUTED 2004090: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED } } rtems_task_wake_after (1); } else { siproc (n, tty); 2004094: 7f ff ff 30 call 2003d54 <== NOT EXECUTED 2004098: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 200409c: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 20040a0: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 20040a4: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 20040a8: 16 80 00 77 bge 2004284 <== NOT EXECUTED 20040ac: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 20040b0: 22 bf ff d9 be,a 2004014 <== NOT EXECUTED 20040b4: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED 20040b8: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 20040bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20040c0: 22 bf ff d5 be,a 2004014 <== NOT EXECUTED 20040c4: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 <== NOT EXECUTED rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 20040c8: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 20040cc: 40 00 03 66 call 2004e64 <== NOT EXECUTED 20040d0: 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); 20040d4: 10 bf ff d0 b 2004014 <== NOT EXECUTED 20040d8: 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; 20040dc: e2 04 20 74 ld [ %l0 + 0x74 ], %l1 <== NOT EXECUTED 20040e0: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 20040e4: 2f 00 80 5b sethi %hi(0x2016c00), %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, 20040e8: 10 80 00 4c b 2004218 <== NOT EXECUTED 20040ec: 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; 20040f0: d0 04 20 5c ld [ %l0 + 0x5c ], %o0 <== NOT EXECUTED 20040f4: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 20040f8: 40 00 42 1e call 2014970 <.urem> <== NOT EXECUTED 20040fc: 90 02 20 01 inc %o0 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 2004100: 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; 2004104: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 2004108: e2 08 40 08 ldub [ %g1 + %o0 ], %l1 <== NOT EXECUTED tty->rawInBuf.Head = newHead; 200410c: d0 24 20 5c st %o0, [ %l0 + 0x5c ] <== NOT EXECUTED if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size) 2004110: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 2004114: d0 04 20 64 ld [ %l0 + 0x64 ], %o0 <== NOT EXECUTED 2004118: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 200411c: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 2004120: 40 00 42 14 call 2014970 <.urem> <== NOT EXECUTED 2004124: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 2004128: c2 04 20 bc ld [ %l0 + 0xbc ], %g1 <== NOT EXECUTED 200412c: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 2004130: 3a 80 00 27 bcc,a 20041cc <== NOT EXECUTED 2004134: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED % tty->rawInBuf.Size) < tty->lowwater) { tty->flow_ctrl &= ~FL_IREQXOF; 2004138: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 200413c: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 2004140: 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)) 2004144: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 2004148: 82 08 62 02 and %g1, 0x202, %g1 <== NOT EXECUTED 200414c: 80 a0 62 02 cmp %g1, 0x202 <== NOT EXECUTED 2004150: 12 80 00 11 bne 2004194 <== NOT EXECUTED 2004154: 01 00 00 00 nop <== NOT EXECUTED 2004158: c2 04 20 94 ld [ %l0 + 0x94 ], %g1 <== NOT EXECUTED 200415c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2004160: 22 80 00 07 be,a 200417c <== NOT EXECUTED 2004164: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 2004168: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 200416c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 2004170: 02 80 00 09 be 2004194 <== NOT EXECUTED 2004174: 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, 2004178: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 200417c: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED 2004180: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 2004184: 9f c0 40 00 call %g1 <== NOT EXECUTED 2004188: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 200418c: 10 80 00 10 b 20041cc <== NOT EXECUTED 2004190: 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) { 2004194: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 2004198: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 200419c: 22 80 00 0c be,a 20041cc <== NOT EXECUTED 20041a0: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_IRTSOFF; 20041a4: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 20041a8: 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; 20041ac: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 20041b0: c2 24 20 b8 st %g1, [ %l0 + 0xb8 ] <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 20041b4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 20041b8: 22 80 00 05 be,a 20041cc <== NOT EXECUTED 20041bc: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->device.startRemoteTx(tty->minor); 20041c0: 9f c0 80 00 call %g2 <== NOT EXECUTED 20041c4: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 20041c8: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 20041cc: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 20041d0: 02 80 00 09 be 20041f4 <== NOT EXECUTED 20041d4: 90 0c 60 ff and %l1, 0xff, %o0 <== NOT EXECUTED if (siproc (c, tty)) 20041d8: 7f ff fe df call 2003d54 <== NOT EXECUTED 20041dc: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 20041e0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20041e4: 32 80 00 0c bne,a 2004214 <== NOT EXECUTED 20041e8: 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; 20041ec: 10 80 00 0b b 2004218 <== NOT EXECUTED 20041f0: 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); 20041f4: 7f ff fe d8 call 2003d54 <== NOT EXECUTED 20041f8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 20041fc: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 2004200: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 2004204: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2004208: 26 80 00 04 bl,a 2004218 <== NOT EXECUTED 200420c: e2 04 20 70 ld [ %l0 + 0x70 ], %l1 <== NOT EXECUTED 2004210: ac 10 20 00 clr %l6 <== NOT EXECUTED wait = 0; } timeout = tty->rawInBufSemaphoreTimeout; 2004214: 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) && 2004218: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 <== NOT EXECUTED 200421c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 2004220: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2004224: 02 80 00 07 be 2004240 <== NOT EXECUTED 2004228: c2 05 e3 cc ld [ %l7 + 0x3cc ], %g1 <== NOT EXECUTED 200422c: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 <== NOT EXECUTED 2004230: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2004234: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2004238: 06 bf ff ae bl 20040f0 <== NOT EXECUTED 200423c: 01 00 00 00 nop <== NOT EXECUTED } /* * Wait for characters */ if ( wait ) { 2004240: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 2004244: 02 80 00 11 be 2004288 <== NOT EXECUTED 2004248: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawInBuf.Semaphore, 200424c: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED 2004250: d2 04 20 6c ld [ %l0 + 0x6c ], %o1 <== NOT EXECUTED 2004254: 40 00 05 c0 call 2005954 <== NOT EXECUTED 2004258: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED tty->rawInBufSemaphoreOptions, timeout); if (sc != RTEMS_SUCCESSFUL) 200425c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2004260: 02 bf ff ee be 2004218 <== NOT EXECUTED 2004264: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 2004268: 30 80 00 08 b,a 2004288 <== 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++]; 200426c: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED count--; 2004270: 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++]; 2004274: c2 08 40 02 ldub [ %g1 + %g2 ], %g1 <== NOT EXECUTED 2004278: c2 2c c0 00 stb %g1, [ %l3 ] <== NOT EXECUTED 200427c: c6 24 20 24 st %g3, [ %l0 + 0x24 ] <== NOT EXECUTED 2004280: 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)) { 2004284: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 2004288: 22 80 00 08 be,a 20042a8 <== NOT EXECUTED 200428c: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED 2004290: c4 04 20 24 ld [ %l0 + 0x24 ], %g2 <== NOT EXECUTED 2004294: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 2004298: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 200429c: 06 bf ff f4 bl 200426c <== NOT EXECUTED 20042a0: 86 00 a0 01 add %g2, 1, %g3 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 20042a4: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED tty->tty_rcvwakeup = 0; 20042a8: 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; 20042ac: 82 20 40 12 sub %g1, %l2, %g1 <== NOT EXECUTED 20042b0: c2 25 20 14 st %g1, [ %l4 + 0x14 ] <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 20042b4: 40 00 06 6f call 2005c70 <== NOT EXECUTED 20042b8: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return sc; } 20042bc: 81 c7 e0 08 ret <== NOT EXECUTED 20042c0: 81 e8 00 00 restore <== NOT EXECUTED 02003090 : * 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) { 2003090: 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)) 2003094: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 2003098: 82 08 64 03 and %g1, 0x403, %g1 <== NOT EXECUTED 200309c: 80 a0 64 01 cmp %g1, 0x401 <== NOT EXECUTED 20030a0: 12 80 00 0f bne 20030dc <== NOT EXECUTED 20030a4: 92 06 20 4a add %i0, 0x4a, %o1 <== NOT EXECUTED == (FL_MDXOF | FL_IREQXOF)) { /* XOFF should be sent now... */ (*tty->device.write)(tty->minor, 20030a8: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED 20030ac: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 20030b0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20030b4: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTOP]), 1); rtems_interrupt_disable(level); 20030b8: 7f ff fb 22 call 2001d40 <== NOT EXECUTED 20030bc: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 20030c0: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 20030c4: 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--; 20030c8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 20030cc: 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--; 20030d0: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 20030d4: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 20030d8: 30 80 00 12 b,a 2003120 <== NOT EXECUTED nToSend = 1; } else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF)) 20030dc: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20030e0: 82 08 60 03 and %g1, 3, %g1 <== NOT EXECUTED 20030e4: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 20030e8: 12 80 00 12 bne 2003130 <== NOT EXECUTED 20030ec: 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, 20030f0: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED 20030f4: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 20030f8: 9f c0 40 00 call %g1 <== NOT EXECUTED 20030fc: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTART]), 1); rtems_interrupt_disable(level); 2003100: 7f ff fb 10 call 2001d40 <== NOT EXECUTED 2003104: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 2003108: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 200310c: 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--; 2003110: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 2003114: 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--; 2003118: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 200311c: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 2003120: 7f ff fb 0c call 2001d50 <== NOT EXECUTED 2003124: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 2003128: 81 c7 e0 08 ret <== NOT EXECUTED 200312c: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED rtems_interrupt_enable(level); nToSend = 1; } else { if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) { 2003130: c4 06 20 80 ld [ %i0 + 0x80 ], %g2 <== NOT EXECUTED 2003134: c2 06 20 84 ld [ %i0 + 0x84 ], %g1 <== NOT EXECUTED 2003138: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 200313c: 12 80 00 0a bne 2003164 <== NOT EXECUTED 2003140: 01 00 00 00 nop <== NOT EXECUTED /* * buffer was empty */ if (tty->rawOutBufState == rob_wait) { 2003144: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED 2003148: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 200314c: 12 80 00 49 bne 2003270 <== NOT EXECUTED 2003150: a2 10 20 00 clr %l1 <== NOT EXECUTED /* * this should never happen... */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 2003154: 40 00 0a c7 call 2005c70 <== NOT EXECUTED 2003158: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 200315c: 81 c7 e0 08 ret <== NOT EXECUTED 2003160: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED rtems_semaphore_release (tty->rawOutBuf.Semaphore); } return 0; } rtems_interrupt_disable(level); 2003164: 7f ff fa f7 call 2001d40 <== NOT EXECUTED 2003168: 01 00 00 00 nop <== NOT EXECUTED len = tty->t_dqlen; 200316c: e0 06 20 90 ld [ %i0 + 0x90 ], %l0 <== NOT EXECUTED tty->t_dqlen = 0; 2003170: c0 26 20 90 clr [ %i0 + 0x90 ] <== NOT EXECUTED rtems_interrupt_enable(level); 2003174: 7f ff fa f7 call 2001d50 <== NOT EXECUTED 2003178: 01 00 00 00 nop <== NOT EXECUTED newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size; 200317c: d0 06 20 84 ld [ %i0 + 0x84 ], %o0 <== NOT EXECUTED 2003180: d2 06 20 88 ld [ %i0 + 0x88 ], %o1 <== NOT EXECUTED 2003184: 40 00 45 fb call 2014970 <.urem> <== NOT EXECUTED 2003188: 90 04 00 08 add %l0, %o0, %o0 <== NOT EXECUTED tty->rawOutBuf.Tail = newTail; if (tty->rawOutBufState == rob_wait) { 200318c: 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; 2003190: d0 26 20 84 st %o0, [ %i0 + 0x84 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_wait) { 2003194: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 2003198: 12 80 00 04 bne 20031a8 <== NOT EXECUTED 200319c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * wake up any pending writer task */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 20031a0: 40 00 0a b4 call 2005c70 <== NOT EXECUTED 20031a4: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED } if (newTail == tty->rawOutBuf.Head) { 20031a8: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 20031ac: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 20031b0: 12 80 00 0b bne 20031dc <== NOT EXECUTED 20031b4: 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) { 20031b8: c2 06 20 d4 ld [ %i0 + 0xd4 ], %g1 <== NOT EXECUTED } if (newTail == tty->rawOutBuf.Head) { /* * Buffer has become empty */ tty->rawOutBufState = rob_idle; 20031bc: 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) { 20031c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20031c4: 02 80 00 2a be 200326c <== NOT EXECUTED 20031c8: a2 10 20 00 clr %l1 <== NOT EXECUTED (*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg); 20031cc: d2 06 20 d8 ld [ %i0 + 0xd8 ], %o1 <== NOT EXECUTED 20031d0: 9f c0 40 00 call %g1 <== NOT EXECUTED 20031d4: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED 20031d8: 30 80 00 25 b,a 200326c <== NOT EXECUTED } } /* check, whether output should stop due to received XOFF */ else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) 20031dc: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 20031e0: 82 08 62 10 and %g1, 0x210, %g1 <== NOT EXECUTED 20031e4: 80 a0 62 10 cmp %g1, 0x210 <== NOT EXECUTED 20031e8: 12 80 00 0c bne 2003218 <== NOT EXECUTED 20031ec: 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); 20031f0: 7f ff fa d4 call 2001d40 <== NOT EXECUTED 20031f4: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl |= FL_OSTOP; 20031f8: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 20031fc: 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; 2003200: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 2003204: 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; 2003208: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ rtems_interrupt_enable(level); 200320c: 7f ff fa d1 call 2001d50 <== NOT EXECUTED 2003210: a2 10 20 00 clr %l1 <== NOT EXECUTED 2003214: 30 80 00 16 b,a 200326c <== NOT EXECUTED } else { /* * Buffer not empty, start tranmitter */ if (newTail > tty->rawOutBuf.Head) 2003218: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 200321c: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 2003220: 08 80 00 05 bleu 2003234 <== NOT EXECUTED 2003224: 01 00 00 00 nop <== NOT EXECUTED nToSend = tty->rawOutBuf.Size - newTail; 2003228: c2 06 20 88 ld [ %i0 + 0x88 ], %g1 <== NOT EXECUTED else nToSend = tty->rawOutBuf.Head - newTail; 200322c: 10 80 00 04 b 200323c <== NOT EXECUTED 2003230: a2 20 40 10 sub %g1, %l0, %l1 <== NOT EXECUTED 2003234: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 2003238: 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)) { 200323c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 2003240: 80 88 66 00 btst 0x600, %g1 <== NOT EXECUTED 2003244: 32 80 00 02 bne,a 200324c <== NOT EXECUTED 2003248: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend = 1; } tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, 200324c: d2 06 20 7c ld [ %i0 + 0x7c ], %o1 <== NOT EXECUTED 2003250: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 2003254: 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*/ 2003258: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 200325c: 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*/ 2003260: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 2003264: 9f c0 80 00 call %g2 <== NOT EXECUTED 2003268: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 200326c: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED } return nToSend; } 2003270: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 2003274: 81 c7 e0 08 ret <== NOT EXECUTED 2003278: 81 e8 00 00 restore <== NOT EXECUTED 02004d24 : /* * this task actually processes any receive events */ static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument) { 2004d24: 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 | 2004d28: 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 ( 2004d2c: 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 | 2004d30: 96 10 00 11 mov %l1, %o3 <== NOT EXECUTED 2004d34: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 2004d38: 94 10 20 00 clr %o2 <== NOT EXECUTED 2004d3c: 40 00 00 b3 call 2005008 <== NOT EXECUTED 2004d40: 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) { 2004d44: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2004d48: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 2004d4c: 22 80 00 07 be,a 2004d68 <== NOT EXECUTED 2004d50: c2 06 20 a0 ld [ %i0 + 0xa0 ], %g1 <== NOT EXECUTED tty->rxTaskId = 0; 2004d54: c0 26 20 c4 clr [ %i0 + 0xc4 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 2004d58: 40 00 04 6e call 2005f10 <== NOT EXECUTED 2004d5c: 90 10 20 00 clr %o0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 2004d60: 10 bf ff f5 b 2004d34 <== NOT EXECUTED 2004d64: 96 10 00 11 mov %l1, %o3 <== NOT EXECUTED } else { /* * do something */ c = tty->device.pollRead(tty->minor); 2004d68: 9f c0 40 00 call %g1 <== NOT EXECUTED 2004d6c: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED if (c != EOF) { 2004d70: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 2004d74: 02 bf ff ef be 2004d30 <== NOT EXECUTED 2004d78: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * pollRead did call enqueue on its own */ c_buf = c; 2004d7c: d0 2f bf f7 stb %o0, [ %fp + -9 ] <== NOT EXECUTED rtems_termios_enqueue_raw_characters ( 2004d80: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2004d84: 7f ff f9 5e call 20032fc <== NOT EXECUTED 2004d88: 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 | 2004d8c: 10 bf ff ea b 2004d34 <== NOT EXECUTED 2004d90: 96 10 00 11 mov %l1, %o3 <== NOT EXECUTED 02003078 : 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); 2003078: d0 02 20 c4 ld [ %o0 + 0xc4 ], %o0 <== NOT EXECUTED 200307c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 2003080: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2003084: 40 00 08 65 call 2005218 <== NOT EXECUTED 2003088: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 200308c: 01 00 00 00 nop 02004d94 : /* * this task actually processes any transmit events */ static rtems_task rtems_termios_txdaemon(rtems_task_argument argument) { 2004d94: 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) { 2004d98: 03 00 80 5d sethi %hi(0x2017400), %g1 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 2004d9c: 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) { 2004da0: a2 10 63 04 or %g1, 0x304, %l1 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 2004da4: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 2004da8: 94 10 20 00 clr %o2 <== NOT EXECUTED 2004dac: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 2004db0: 40 00 00 96 call 2005008 <== NOT EXECUTED 2004db4: 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) { 2004db8: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 2004dbc: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 2004dc0: 02 80 00 07 be 2004ddc <== NOT EXECUTED 2004dc4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED tty->txTaskId = 0; 2004dc8: c0 26 20 c8 clr [ %i0 + 0xc8 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 2004dcc: 40 00 04 51 call 2005f10 <== NOT EXECUTED 2004dd0: 90 10 20 00 clr %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 2004dd4: 10 bf ff f5 b 2004da8 <== NOT EXECUTED 2004dd8: 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) { 2004ddc: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 2004de0: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 2004de4: 82 00 40 11 add %g1, %l1, %g1 <== NOT EXECUTED 2004de8: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 2004dec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2004df0: 02 80 00 04 be 2004e00 <== NOT EXECUTED 2004df4: 01 00 00 00 nop <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 2004df8: 9f c0 40 00 call %g1 <== NOT EXECUTED 2004dfc: 01 00 00 00 nop <== NOT EXECUTED } /* * try to push further characters to device */ rtems_termios_refill_transmitter(tty); 2004e00: 7f ff f8 a4 call 2003090 <== NOT EXECUTED 2004e04: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 2004e08: 10 bf ff e8 b 2004da8 <== NOT EXECUTED 2004e0c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 02003da0 : rtems_termios_puts (&c, 1, tty); } rtems_status_code rtems_termios_write (void *arg) { 2003da0: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 2003da4: c2 06 00 00 ld [ %i0 ], %g1 rtems_status_code sc; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 2003da8: 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; 2003dac: e4 00 60 28 ld [ %g1 + 0x28 ], %l2 rtems_status_code sc; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 2003db0: 94 10 20 00 clr %o2 2003db4: 40 00 06 e8 call 2005954 2003db8: d0 04 a0 18 ld [ %l2 + 0x18 ], %o0 if (sc != RTEMS_SUCCESSFUL) 2003dbc: a6 92 20 00 orcc %o0, 0, %l3 2003dc0: 12 80 00 25 bne 2003e54 2003dc4: 03 00 80 5d sethi %hi(0x2017400), %g1 return sc; if (rtems_termios_linesw[tty->t_line].l_write != NULL) { 2003dc8: c4 04 a0 cc ld [ %l2 + 0xcc ], %g2 2003dcc: 82 10 63 04 or %g1, 0x304, %g1 2003dd0: 85 28 a0 05 sll %g2, 5, %g2 2003dd4: 84 00 80 01 add %g2, %g1, %g2 2003dd8: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 2003ddc: 80 a0 60 00 cmp %g1, 0 2003de0: 02 80 00 06 be 2003df8 2003de4: 92 10 00 18 mov %i0, %o1 sc = rtems_termios_linesw[tty->t_line].l_write(tty,args); 2003de8: 9f c0 40 00 call %g1 <== NOT EXECUTED 2003dec: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 2003df0: 10 80 00 17 b 2003e4c <== NOT EXECUTED 2003df4: a6 10 00 08 mov %o0, %l3 <== NOT EXECUTED rtems_semaphore_release (tty->osem); return sc; } if (tty->termios.c_oflag & OPOST) { 2003df8: c2 04 a0 34 ld [ %l2 + 0x34 ], %g1 2003dfc: d2 06 20 0c ld [ %i0 + 0xc ], %o1 2003e00: 80 88 60 01 btst 1, %g1 2003e04: 02 80 00 0e be 2003e3c 2003e08: d0 06 20 08 ld [ %i0 + 8 ], %o0 uint32_t count = args->count; 2003e0c: a2 10 00 09 mov %o1, %l1 char *buffer = args->buffer; 2003e10: 10 80 00 05 b 2003e24 2003e14: a0 10 00 08 mov %o0, %l0 while (count--) oproc (*buffer++, tty); 2003e18: 92 10 00 12 mov %l2, %o1 2003e1c: 7f ff fe 4b call 2003748 2003e20: 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--) 2003e24: a2 04 7f ff add %l1, -1, %l1 2003e28: 80 a4 7f ff cmp %l1, -1 2003e2c: 32 bf ff fb bne,a 2003e18 2003e30: 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; 2003e34: 10 80 00 05 b 2003e48 2003e38: 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); 2003e3c: 7f ff fd f7 call 2003618 <== NOT EXECUTED 2003e40: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED args->bytes_moved = args->count; 2003e44: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 2003e48: c2 26 20 14 st %g1, [ %i0 + 0x14 ] } rtems_semaphore_release (tty->osem); 2003e4c: 40 00 07 89 call 2005c70 2003e50: d0 04 a0 18 ld [ %l2 + 0x18 ], %o0 return sc; } 2003e54: 81 c7 e0 08 ret 2003e58: 91 e8 00 13 restore %g0, %l3, %o0 02012238 : */ rtems_status_code rtems_timer_delete( Objects_Id id ) { 2012238: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 201223c: 21 00 80 c4 sethi %hi(0x2031000), %l0 2012240: 92 10 00 18 mov %i0, %o1 2012244: 94 07 bf f4 add %fp, -12, %o2 2012248: 40 00 09 ec call 20149f8 <_Objects_Get> 201224c: 90 14 23 1c or %l0, 0x31c, %o0 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 2012250: c2 07 bf f4 ld [ %fp + -12 ], %g1 2012254: 80 a0 60 00 cmp %g1, 0 2012258: 02 80 00 08 be 2012278 201225c: b0 10 00 08 mov %o0, %i0 2012260: 82 18 60 02 xor %g1, 2, %g1 2012264: 80 a0 00 01 cmp %g0, %g1 2012268: 82 60 20 00 subx %g0, 0, %g1 201226c: b0 08 60 15 and %g1, 0x15, %i0 2012270: 81 c7 e0 08 ret 2012274: 91 ee 20 04 restore %i0, 4, %o0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2012278: a0 14 23 1c or %l0, 0x31c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 201227c: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 2012280: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 2012284: 05 00 00 3f sethi %hi(0xfc00), %g2 2012288: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 201228c: 82 08 40 02 and %g1, %g2, %g1 2012290: 80 a0 40 03 cmp %g1, %g3 2012294: 38 80 00 06 bgu,a 20122ac 2012298: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 201229c: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 20122a0: 83 28 60 02 sll %g1, 2, %g1 20122a4: 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; 20122a8: 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 ); 20122ac: 40 00 15 66 call 2017844 <_Watchdog_Remove> 20122b0: 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 ); 20122b4: 90 10 00 10 mov %l0, %o0 20122b8: 40 00 09 7a call 20148a0 <_Objects_Free> 20122bc: 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 ) 20122c0: 03 00 80 c3 sethi %hi(0x2030c00), %g1 20122c4: c4 00 63 b0 ld [ %g1 + 0x3b0 ], %g2 ! 2030fb0 <_Thread_Dispatch_disable_level> 20122c8: b0 10 20 00 clr %i0 20122cc: 84 00 bf ff add %g2, -1, %g2 20122d0: c4 20 63 b0 st %g2, [ %g1 + 0x3b0 ] 20122d4: c2 00 63 b0 ld [ %g1 + 0x3b0 ], %g1 20122d8: 80 a0 60 00 cmp %g1, 0 20122dc: 12 80 00 04 bne 20122ec 20122e0: 01 00 00 00 nop _Thread_Dispatch(); 20122e4: 40 00 0e ca call 2015e0c <_Thread_Dispatch> 20122e8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 20122ec: 81 c7 e0 08 ret 20122f0: 81 e8 00 00 restore 02012328 : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 2012328: 9d e3 bf 90 save %sp, -112, %sp 201232c: a4 10 00 18 mov %i0, %l2 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( ticks == 0 ) 2012330: 80 a6 60 00 cmp %i1, 0 2012334: 02 80 00 21 be 20123b8 2012338: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( !routine ) 201233c: 80 a6 a0 00 cmp %i2, 0 2012340: 02 80 00 1e be 20123b8 2012344: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 2012348: 11 00 80 c4 sethi %hi(0x2031000), %o0 201234c: 92 10 00 12 mov %l2, %o1 2012350: 90 12 23 1c or %o0, 0x31c, %o0 2012354: 40 00 09 a9 call 20149f8 <_Objects_Get> 2012358: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 201235c: c2 07 bf f4 ld [ %fp + -12 ], %g1 2012360: 80 a0 60 00 cmp %g1, 0 2012364: 02 80 00 08 be 2012384 2012368: a0 10 00 08 mov %o0, %l0 201236c: 82 18 60 02 xor %g1, 2, %g1 2012370: 80 a0 00 01 cmp %g0, %g1 2012374: 82 60 20 00 subx %g0, 0, %g1 2012378: b0 08 60 15 and %g1, 0x15, %i0 201237c: 81 c7 e0 08 ret 2012380: 91 ee 20 04 restore %i0, 4, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 2012384: a2 02 20 10 add %o0, 0x10, %l1 2012388: 40 00 15 2f call 2017844 <_Watchdog_Remove> 201238c: 90 10 00 11 mov %l1, %o0 _ISR_Disable( level ); 2012390: 7f ff e0 e5 call 200a724 2012394: 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 ) { 2012398: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 201239c: 80 a0 60 00 cmp %g1, 0 20123a0: 22 80 00 08 be,a 20123c0 20123a4: f4 24 20 2c st %i2, [ %l0 + 0x2c ] _ISR_Enable( level ); 20123a8: 7f ff e0 e3 call 200a734 <== NOT EXECUTED 20123ac: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); 20123b0: 7f ff ff d1 call 20122f4 <_Thread_Enable_dispatch> <== NOT EXECUTED 20123b4: 01 00 00 00 nop <== NOT EXECUTED 20123b8: 81 c7 e0 08 ret 20123bc: 81 e8 00 00 restore 20123c0: e4 24 20 30 st %l2, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 20123c4: 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; 20123c8: c0 24 20 38 clr [ %l0 + 0x38 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 20123cc: c0 24 20 18 clr [ %l0 + 0x18 ] _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); _ISR_Enable( level ); 20123d0: 7f ff e0 d9 call 200a734 20123d4: b0 10 20 00 clr %i0 ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 20123d8: 92 10 00 11 mov %l1, %o1 20123dc: 11 00 80 c4 sethi %hi(0x2031000), %o0 20123e0: 90 12 20 b0 or %o0, 0xb0, %o0 ! 20310b0 <_Watchdog_Ticks_chain> 20123e4: 40 00 14 c0 call 20176e4 <_Watchdog_Insert> 20123e8: f2 24 20 1c st %i1, [ %l0 + 0x1c ] _Watchdog_Insert_ticks( &the_timer->Ticker, ticks ); _Thread_Enable_dispatch(); 20123ec: 7f ff ff c2 call 20122f4 <_Thread_Enable_dispatch> 20123f0: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 20123f4: 81 c7 e0 08 ret 20123f8: 81 e8 00 00 restore 02008090 : rtems_status_code rtems_timer_get_information( Objects_Id id, rtems_timer_information *the_info ) { 2008090: 9d e3 bf 90 save %sp, -112, %sp 2008094: 92 10 00 18 mov %i0, %o1 Timer_Control *the_timer; Objects_Locations location; if ( !the_info ) 2008098: 80 a6 60 00 cmp %i1, 0 200809c: 02 80 00 22 be 2008124 20080a0: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 20080a4: 11 00 80 74 sethi %hi(0x201d000), %o0 20080a8: 94 07 bf f4 add %fp, -12, %o2 20080ac: 40 00 07 3f call 2009da8 <_Objects_Get> 20080b0: 90 12 22 e0 or %o0, 0x2e0, %o0 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 20080b4: c2 07 bf f4 ld [ %fp + -12 ], %g1 20080b8: 80 a0 60 00 cmp %g1, 0 20080bc: 22 80 00 08 be,a 20080dc 20080c0: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 20080c4: 82 18 60 02 xor %g1, 2, %g1 <== NOT EXECUTED 20080c8: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 20080cc: 82 60 20 00 subx %g0, 0, %g1 <== NOT EXECUTED 20080d0: b0 08 60 15 and %g1, 0x15, %i0 <== NOT EXECUTED 20080d4: 81 c7 e0 08 ret <== NOT EXECUTED 20080d8: 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; 20080dc: c4 02 20 38 ld [ %o0 + 0x38 ], %g2 the_info->initial = the_timer->Ticker.initial; 20080e0: c2 26 60 04 st %g1, [ %i1 + 4 ] the_info->start_time = the_timer->Ticker.start_time; 20080e4: 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; 20080e8: c4 26 40 00 st %g2, [ %i1 ] the_info->initial = the_timer->Ticker.initial; the_info->start_time = the_timer->Ticker.start_time; 20080ec: c2 26 60 08 st %g1, [ %i1 + 8 ] the_info->stop_time = the_timer->Ticker.stop_time; 20080f0: c2 02 20 28 ld [ %o0 + 0x28 ], %g1 20080f4: 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 ) 20080f8: 05 00 80 75 sethi %hi(0x201d400), %g2 20080fc: c2 00 a0 c0 ld [ %g2 + 0xc0 ], %g1 ! 201d4c0 <_Thread_Dispatch_disable_level> 2008100: b0 10 20 00 clr %i0 2008104: 82 00 7f ff add %g1, -1, %g1 2008108: c2 20 a0 c0 st %g1, [ %g2 + 0xc0 ] 200810c: c2 00 a0 c0 ld [ %g2 + 0xc0 ], %g1 2008110: 80 a0 60 00 cmp %g1, 0 2008114: 12 80 00 04 bne 2008124 2008118: 01 00 00 00 nop _Thread_Dispatch(); 200811c: 40 00 0c 28 call 200b1bc <_Thread_Dispatch> 2008120: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 2008124: 81 c7 e0 08 ret 2008128: 81 e8 00 00 restore 02012b18 : rtems_status_code rtems_timer_initiate_server( uint32_t priority, uint32_t stack_size, rtems_attribute attribute_set ) { 2012b18: 9d e3 bf 90 save %sp, -112, %sp /* * Make sure the requested priority is valid. */ _priority = priority; if ( priority == RTEMS_TIMER_SERVER_DEFAULT_PRIORITY ) 2012b1c: 92 10 20 00 clr %o1 2012b20: 80 a6 3f ff cmp %i0, -1 2012b24: 02 80 00 07 be 2012b40 2012b28: 94 10 00 19 mov %i1, %o2 _priority = 0; else if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) 2012b2c: 82 06 3f ff add %i0, -1, %g1 2012b30: 80 a0 60 fe cmp %g1, 0xfe 2012b34: 18 80 00 48 bgu 2012c54 2012b38: a0 10 20 13 mov 0x13, %l0 2012b3c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2012b40: 05 00 80 c3 sethi %hi(0x2030c00), %g2 2012b44: c2 00 a3 b0 ld [ %g2 + 0x3b0 ], %g1 ! 2030fb0 <_Thread_Dispatch_disable_level> 2012b48: 82 00 60 01 inc %g1 2012b4c: c2 20 a3 b0 st %g1, [ %g2 + 0x3b0 ] * Just to make sure the test versus create/start operation are atomic. */ _Thread_Disable_dispatch(); if ( _Timer_Server ) { 2012b50: 03 00 80 c4 sethi %hi(0x2031000), %g1 2012b54: c2 00 63 68 ld [ %g1 + 0x368 ], %g1 ! 2031368 <_Timer_Server> 2012b58: 80 a0 60 00 cmp %g1, 0 2012b5c: 02 80 00 06 be 2012b74 2012b60: 19 00 00 20 sethi %hi(0x8000), %o4 _Thread_Enable_dispatch(); 2012b64: 7f ff ff a0 call 20129e4 <_Thread_Enable_dispatch> <== NOT EXECUTED 2012b68: 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; } 2012b6c: 81 c7 e0 08 ret <== NOT EXECUTED 2012b70: 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( 2012b74: 11 15 12 53 sethi %hi(0x54494c00), %o0 2012b78: 98 16 80 0c or %i2, %o4, %o4 2012b7c: 90 12 21 45 or %o0, 0x145, %o0 2012b80: 96 10 21 00 mov 0x100, %o3 2012b84: 7f ff fa 0f call 20113c0 2012b88: 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) { 2012b8c: a0 92 20 00 orcc %o0, 0, %l0 2012b90: 12 80 00 2f bne 2012c4c 2012b94: d0 07 bf f4 ld [ %fp + -12 ], %o0 _Thread_Enable_dispatch(); return status; } status = rtems_task_start( 2012b98: 13 00 80 4a sethi %hi(0x2012800), %o1 2012b9c: 94 10 20 00 clr %o2 2012ba0: 7f ff fc 62 call 2011d28 2012ba4: 92 12 62 18 or %o1, 0x218, %o1 id, /* the id from create */ (rtems_task_entry) _Timer_Server_body, /* the timer server entry point */ 0 /* there is no argument */ ); if (status) { 2012ba8: a0 92 20 00 orcc %o0, 0, %l0 2012bac: 12 80 00 28 bne 2012c4c 2012bb0: 03 00 80 c3 sethi %hi(0x2030c00), %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( 2012bb4: 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 ) 2012bb8: 9a 10 62 60 or %g1, 0x260, %o5 2012bbc: c4 13 60 10 lduh [ %o5 + 0x10 ], %g2 2012bc0: 03 00 00 3f sethi %hi(0xfc00), %g1 2012bc4: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 2012bc8: 82 09 00 01 and %g4, %g1, %g1 2012bcc: 80 a0 40 02 cmp %g1, %g2 2012bd0: 18 80 00 05 bgu 2012be4 2012bd4: 86 10 20 00 clr %g3 return NULL; return information->local_table[ index ]; 2012bd8: c4 03 60 20 ld [ %o5 + 0x20 ], %g2 2012bdc: 83 28 60 02 sll %g1, 2, %g1 2012be0: c6 00 80 01 ld [ %g2 + %g1 ], %g3 2012be4: 03 00 80 c4 sethi %hi(0x2031000), %g1 2012be8: c6 20 63 68 st %g3, [ %g1 + 0x368 ] ! 2031368 <_Timer_Server> */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 2012bec: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2012bf0: 82 10 62 b0 or %g1, 0x2b0, %g1 ! 2030eb0 <_Timer_Ticks_chain+0x4> */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 2012bf4: c2 20 7f fc st %g1, [ %g1 + -4 ] 2012bf8: 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; 2012bfc: c0 20 e0 6c clr [ %g3 + 0x6c ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2012c00: c0 20 e0 50 clr [ %g3 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; 2012c04: c8 20 e0 68 st %g4, [ %g3 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 2012c08: 05 00 80 57 sethi %hi(0x2015c00), %g2 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2012c0c: c2 20 60 08 st %g1, [ %g1 + 8 ] 2012c10: 84 10 a1 50 or %g2, 0x150, %g2 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 2012c14: c0 20 60 04 clr [ %g1 + 4 ] 2012c18: 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; 2012c1c: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2012c20: 82 10 62 c4 or %g1, 0x2c4, %g1 ! 2030ec4 <_Timer_Seconds_chain+0x4> */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 2012c24: c2 20 7f fc st %g1, [ %g1 + -4 ] 2012c28: 82 00 7f fc add %g1, -4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 2012c2c: 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; 2012c30: c0 20 60 04 clr [ %g1 + 4 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2012c34: 03 00 80 c3 sethi %hi(0x2030c00), %g1 2012c38: 82 10 62 cc or %g1, 0x2cc, %g1 ! 2030ecc <_Timer_Seconds_timer> the_watchdog->routine = routine; 2012c3c: c4 20 60 1c st %g2, [ %g1 + 0x1c ] the_watchdog->id = id; 2012c40: c8 20 60 20 st %g4, [ %g1 + 0x20 ] the_watchdog->user_data = user_data; 2012c44: c0 20 60 24 clr [ %g1 + 0x24 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2012c48: 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(); 2012c4c: 7f ff ff 66 call 20129e4 <_Thread_Enable_dispatch> 2012c50: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } 2012c54: b0 10 00 10 mov %l0, %i0 2012c58: 81 c7 e0 08 ret 2012c5c: 81 e8 00 00 restore 020126a8 : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 20126a8: 9d e3 bf 90 save %sp, -112, %sp Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 20126ac: 25 00 80 c4 sethi %hi(0x2031000), %l2 20126b0: c2 04 a3 68 ld [ %l2 + 0x368 ], %g1 ! 2031368 <_Timer_Server> Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 20126b4: a6 10 00 18 mov %i0, %l3 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 20126b8: 80 a0 60 00 cmp %g1, 0 20126bc: 02 80 00 24 be 201274c 20126c0: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; if ( !routine ) 20126c4: 80 a6 a0 00 cmp %i2, 0 20126c8: 02 80 00 21 be 201274c 20126cc: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; if ( ticks == 0 ) 20126d0: 80 a6 60 00 cmp %i1, 0 20126d4: 02 80 00 1e be 201274c 20126d8: b0 10 20 0a mov 0xa, %i0 20126dc: 11 00 80 c4 sethi %hi(0x2031000), %o0 20126e0: 92 10 00 13 mov %l3, %o1 20126e4: 90 12 23 1c or %o0, 0x31c, %o0 20126e8: 40 00 08 c4 call 20149f8 <_Objects_Get> 20126ec: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { 20126f0: c2 07 bf f4 ld [ %fp + -12 ], %g1 20126f4: 80 a0 60 00 cmp %g1, 0 20126f8: 02 80 00 08 be 2012718 20126fc: a0 10 00 08 mov %o0, %l0 2012700: 82 18 60 02 xor %g1, 2, %g1 2012704: 80 a0 00 01 cmp %g0, %g1 2012708: 82 60 20 00 subx %g0, 0, %g1 201270c: b0 08 60 15 and %g1, 0x15, %i0 2012710: 81 c7 e0 08 ret 2012714: 91 ee 20 04 restore %i0, 4, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 2012718: a2 02 20 10 add %o0, 0x10, %l1 201271c: 40 00 14 4a call 2017844 <_Watchdog_Remove> 2012720: 90 10 00 11 mov %l1, %o0 _ISR_Disable( level ); 2012724: 7f ff e0 00 call 200a724 2012728: 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 ) { 201272c: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 2012730: 80 a0 60 00 cmp %g1, 0 2012734: 02 80 00 08 be 2012754 2012738: 82 10 20 01 mov 1, %g1 _ISR_Enable( level ); 201273c: 7f ff df fe call 200a734 <== NOT EXECUTED 2012740: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); 2012744: 7f ff ff cc call 2012674 <_Thread_Enable_dispatch> <== NOT EXECUTED 2012748: 01 00 00 00 nop <== NOT EXECUTED 201274c: 81 c7 e0 08 ret 2012750: 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; 2012754: f2 24 20 1c st %i1, [ %l0 + 0x1c ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 2012758: f4 24 20 2c st %i2, [ %l0 + 0x2c ] the_watchdog->id = id; 201275c: e6 24 20 30 st %l3, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 2012760: f6 24 20 34 st %i3, [ %l0 + 0x34 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 2012764: 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; 2012768: 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 ); 201276c: 7f ff df f2 call 200a734 2012770: 21 00 80 c3 sethi %hi(0x2030c00), %l0 _Timer_Server_stop_ticks_timer(); 2012774: d0 04 a3 68 ld [ %l2 + 0x368 ], %o0 2012778: 40 00 14 33 call 2017844 <_Watchdog_Remove> 201277c: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_process_ticks_chain(); 2012780: 40 00 00 87 call 201299c <_Timer_Server_process_ticks_chain> 2012784: 01 00 00 00 nop _Watchdog_Insert( &_Timer_Ticks_chain, &the_timer->Ticker ); 2012788: 90 14 22 ac or %l0, 0x2ac, %o0 201278c: 40 00 13 d6 call 20176e4 <_Watchdog_Insert> 2012790: 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)); 2012794: c4 04 22 ac ld [ %l0 + 0x2ac ], %g2 2012798: a0 14 22 ac or %l0, 0x2ac, %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 201279c: a0 04 20 04 add %l0, 4, %l0 _Timer_Server_reset_ticks_timer(); 20127a0: 80 a0 80 10 cmp %g2, %l0 20127a4: 02 80 00 08 be 20127c4 20127a8: c2 04 a3 68 ld [ %l2 + 0x368 ], %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 20127ac: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 20127b0: 11 00 80 c4 sethi %hi(0x2031000), %o0 20127b4: 92 00 60 48 add %g1, 0x48, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 20127b8: c4 20 60 54 st %g2, [ %g1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 20127bc: 40 00 13 ca call 20176e4 <_Watchdog_Insert> 20127c0: 90 12 20 b0 or %o0, 0xb0, %o0 _Thread_Enable_dispatch(); 20127c4: 7f ff ff ac call 2012674 <_Thread_Enable_dispatch> 20127c8: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 20127cc: 81 c7 e0 08 ret 20127d0: 81 e8 00 00 restore 02005fdc : static int rtems_verror( uint32_t error_flag, const char *printf_format, va_list arglist ) { 2005fdc: 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) 2005fe0: 03 08 00 00 sethi %hi(0x20000000), %g1 <== NOT EXECUTED 2005fe4: a8 8e 00 01 andcc %i0, %g1, %l4 <== NOT EXECUTED 2005fe8: 02 80 00 10 be 2006028 <== NOT EXECUTED 2005fec: a6 10 00 18 mov %i0, %l3 <== NOT EXECUTED { if (rtems_panic_in_progress++) 2005ff0: 07 00 80 98 sethi %hi(0x2026000), %g3 <== NOT EXECUTED 2005ff4: c2 00 e2 ac ld [ %g3 + 0x2ac ], %g1 ! 20262ac <== NOT EXECUTED 2005ff8: 82 00 60 01 inc %g1 <== NOT EXECUTED 2005ffc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2006000: 02 80 00 06 be 2006018 <== NOT EXECUTED 2006004: c2 20 e2 ac st %g1, [ %g3 + 0x2ac ] <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 2006008: 05 00 80 99 sethi %hi(0x2026400), %g2 <== NOT EXECUTED 200600c: c2 00 a0 80 ld [ %g2 + 0x80 ], %g1 ! 2026480 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 2006010: 82 00 60 01 inc %g1 <== NOT EXECUTED 2006014: c2 20 a0 80 st %g1, [ %g2 + 0x80 ] <== NOT EXECUTED _Thread_Disable_dispatch(); /* disable task switches */ /* don't aggravate things */ if (rtems_panic_in_progress > 2) 2006018: c2 00 e2 ac ld [ %g3 + 0x2ac ], %g1 <== NOT EXECUTED 200601c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 2006020: 34 80 00 59 bg,a 2006184 <== NOT EXECUTED 2006024: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 2006028: 03 00 80 95 sethi %hi(0x2025400), %g1 <== NOT EXECUTED 200602c: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 ! 2025418 <_impure_ptr> <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 2006030: 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 */ 2006034: 40 00 40 49 call 2016158 <== NOT EXECUTED 2006038: d0 00 60 08 ld [ %g1 + 8 ], %o0 <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; 200603c: 03 1c 00 00 sethi %hi(0x70000000), %g1 <== NOT EXECUTED 2006040: a0 2c c0 01 andn %l3, %g1, %l0 <== NOT EXECUTED if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 2006044: 03 10 00 00 sethi %hi(0x40000000), %g1 <== NOT EXECUTED 2006048: 80 8c c0 01 btst %l3, %g1 <== NOT EXECUTED 200604c: 02 80 00 05 be 2006060 <== NOT EXECUTED 2006050: 23 00 80 95 sethi %hi(0x2025400), %l1 <== NOT EXECUTED local_errno = errno; 2006054: 40 00 3f e4 call 2015fe4 <__errno> <== NOT EXECUTED 2006058: 01 00 00 00 nop <== NOT EXECUTED 200605c: 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); 2006060: c2 04 60 18 ld [ %l1 + 0x18 ], %g1 <== NOT EXECUTED 2006064: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2006068: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 200606c: 40 00 58 c3 call 201c378 <== NOT EXECUTED 2006070: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED if (status) 2006074: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 2006078: 02 80 00 0c be 20060a8 <== NOT EXECUTED 200607c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); 2006080: c2 04 60 18 ld [ %l1 + 0x18 ], %g1 <== NOT EXECUTED 2006084: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2006088: 7f ff ff ce call 2005fc0 <== NOT EXECUTED 200608c: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 2006090: 13 00 80 86 sethi %hi(0x2021800), %o1 <== NOT EXECUTED 2006094: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 2006098: 92 12 60 a0 or %o1, 0xa0, %o1 <== NOT EXECUTED 200609c: 40 00 41 f0 call 201685c <== NOT EXECUTED 20060a0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 20060a4: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED if (local_errno) 20060a8: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 20060ac: 22 80 00 1c be,a 200611c <== NOT EXECUTED 20060b0: 23 00 80 95 sethi %hi(0x2025400), %l1 <== NOT EXECUTED { if ((local_errno > 0) && *strerror(local_errno)) 20060b4: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 20060b8: 04 80 00 11 ble 20060fc <== NOT EXECUTED 20060bc: 03 00 80 95 sethi %hi(0x2025400), %g1 <== NOT EXECUTED 20060c0: 40 00 4d cb call 20197ec <== NOT EXECUTED 20060c4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 20060c8: c2 4a 00 00 ldsb [ %o0 ], %g1 <== NOT EXECUTED 20060cc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 20060d0: 02 80 00 0b be 20060fc <== NOT EXECUTED 20060d4: 03 00 80 95 sethi %hi(0x2025400), %g1 <== NOT EXECUTED chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); 20060d8: c2 04 60 18 ld [ %l1 + 0x18 ], %g1 <== NOT EXECUTED 20060dc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 20060e0: 40 00 4d c3 call 20197ec <== NOT EXECUTED 20060e4: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 20060e8: 13 00 80 86 sethi %hi(0x2021800), %o1 <== NOT EXECUTED 20060ec: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 20060f0: 92 12 60 b0 or %o1, 0xb0, %o1 <== NOT EXECUTED 20060f4: 10 80 00 07 b 2006110 <== NOT EXECUTED 20060f8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); 20060fc: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 2006100: 13 00 80 86 sethi %hi(0x2021800), %o1 <== NOT EXECUTED 2006104: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 2006108: 92 12 60 c0 or %o1, 0xc0, %o1 <== NOT EXECUTED 200610c: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED 2006110: 40 00 41 d3 call 201685c <== NOT EXECUTED 2006114: 23 00 80 95 sethi %hi(0x2025400), %l1 <== NOT EXECUTED 2006118: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED } chars_written += fprintf(stderr, "\n"); 200611c: c2 04 60 18 ld [ %l1 + 0x18 ], %g1 <== NOT EXECUTED 2006120: 13 00 80 87 sethi %hi(0x2021c00), %o1 <== NOT EXECUTED 2006124: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 2006128: 40 00 41 cd call 201685c <== NOT EXECUTED 200612c: 92 12 63 48 or %o1, 0x348, %o1 <== NOT EXECUTED (void) fflush(stderr); 2006130: c2 04 60 18 ld [ %l1 + 0x18 ], %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"); 2006134: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED (void) fflush(stderr); 2006138: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 200613c: 40 00 40 07 call 2016158 <== NOT EXECUTED 2006140: b0 04 00 18 add %l0, %i0, %i0 <== NOT EXECUTED if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT)) 2006144: 03 0c 00 00 sethi %hi(0x30000000), %g1 <== NOT EXECUTED 2006148: 80 8c c0 01 btst %l3, %g1 <== NOT EXECUTED 200614c: 02 80 00 0e be 2006184 <== NOT EXECUTED 2006150: 80 a5 20 00 cmp %l4, 0 <== NOT EXECUTED { if (error_flag & RTEMS_ERROR_PANIC) 2006154: 02 80 00 07 be 2006170 <== NOT EXECUTED 2006158: 90 10 20 00 clr %o0 <== NOT EXECUTED { rtems_error(0, "fatal error, exiting"); 200615c: 13 00 80 86 sethi %hi(0x2021800), %o1 <== NOT EXECUTED 2006160: 40 00 00 18 call 20061c0 <== NOT EXECUTED 2006164: 92 12 60 d8 or %o1, 0xd8, %o1 ! 20218d8 <== NOT EXECUTED _exit(local_errno); 2006168: 40 00 02 43 call 2006a74 <_exit> <== NOT EXECUTED 200616c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED } else { rtems_error(0, "fatal error, aborting"); 2006170: 13 00 80 86 sethi %hi(0x2021800), %o1 <== NOT EXECUTED 2006174: 40 00 00 13 call 20061c0 <== NOT EXECUTED 2006178: 92 12 60 f0 or %o1, 0xf0, %o1 ! 20218f0 <== NOT EXECUTED abort(); 200617c: 40 00 3f 8c call 2015fac <== NOT EXECUTED 2006180: 01 00 00 00 nop <== NOT EXECUTED } } return chars_written; } 2006184: 81 c7 e0 08 ret <== NOT EXECUTED 2006188: 81 e8 00 00 restore <== NOT EXECUTED 02015a74 : /* * Extract an integer value from the database */ static int scanInt(FILE *fp, int *val) { 2015a74: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED 2015a78: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 <== NOT EXECUTED 2015a7c: a2 10 20 00 clr %l1 <== NOT EXECUTED 2015a80: a6 10 63 ff or %g1, 0x3ff, %l3 <== NOT EXECUTED 2015a84: a4 10 20 00 clr %l2 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 2015a88: 2b 00 80 dc sethi %hi(0x2037000), %l5 <== NOT EXECUTED limit++; continue; } sign = 1; } if (!isdigit(c)) 2015a8c: 29 00 80 dc sethi %hi(0x2037000), %l4 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 2015a90: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 2015a94: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2015a98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015a9c: 16 80 00 07 bge 2015ab8 <== NOT EXECUTED 2015aa0: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 2015aa4: d0 05 60 88 ld [ %l5 + 0x88 ], %o0 <== NOT EXECUTED 2015aa8: 40 00 3b 04 call 20246b8 <__srget_r> <== NOT EXECUTED 2015aac: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 2015ab0: 10 80 00 06 b 2015ac8 <== NOT EXECUTED 2015ab4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 2015ab8: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 2015abc: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED 2015ac0: e0 08 40 00 ldub [ %g1 ], %l0 <== NOT EXECUTED 2015ac4: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED if (c == ':') 2015ac8: 80 a4 20 3a cmp %l0, 0x3a <== NOT EXECUTED 2015acc: 02 80 00 20 be 2015b4c <== NOT EXECUTED 2015ad0: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED break; if (sign == 0) { 2015ad4: 12 80 00 08 bne 2015af4 <== NOT EXECUTED 2015ad8: c2 05 20 80 ld [ %l4 + 0x80 ], %g1 <== NOT EXECUTED if (c == '-') { 2015adc: 80 a4 20 2d cmp %l0, 0x2d <== NOT EXECUTED 2015ae0: 12 80 00 05 bne 2015af4 <== NOT EXECUTED 2015ae4: a4 10 20 01 mov 1, %l2 <== NOT EXECUTED sign = -1; limit++; 2015ae8: a6 04 e0 01 inc %l3 <== NOT EXECUTED 2015aec: 10 bf ff e9 b 2015a90 <== NOT EXECUTED 2015af0: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED continue; } sign = 1; } if (!isdigit(c)) 2015af4: c2 08 40 10 ldub [ %g1 + %l0 ], %g1 <== NOT EXECUTED 2015af8: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 2015afc: 02 80 00 1c be 2015b6c <== NOT EXECUTED 2015b00: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED return 0; d = c - '0'; if ((i > (limit / 10)) 2015b04: 40 00 69 cd call 2030238 <.udiv> <== NOT EXECUTED 2015b08: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 2015b0c: 80 a4 40 08 cmp %l1, %o0 <== NOT EXECUTED 2015b10: 18 80 00 17 bgu 2015b6c <== NOT EXECUTED 2015b14: 01 00 00 00 nop <== NOT EXECUTED 2015b18: 12 80 00 08 bne 2015b38 <== NOT EXECUTED 2015b1c: a0 04 3f d0 add %l0, -48, %l0 <== NOT EXECUTED 2015b20: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 2015b24: 40 00 6a 71 call 20304e8 <.urem> <== NOT EXECUTED 2015b28: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 2015b2c: 80 a4 00 08 cmp %l0, %o0 <== NOT EXECUTED 2015b30: 18 80 00 0f bgu 2015b6c <== NOT EXECUTED 2015b34: 01 00 00 00 nop <== NOT EXECUTED || ((i == (limit / 10)) && (d > (limit % 10)))) return 0; i = i * 10 + d; 2015b38: 85 2c 60 03 sll %l1, 3, %g2 <== NOT EXECUTED 2015b3c: 83 2c 60 01 sll %l1, 1, %g1 <== NOT EXECUTED 2015b40: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 2015b44: 10 bf ff d3 b 2015a90 <== NOT EXECUTED 2015b48: a2 04 00 01 add %l0, %g1, %l1 <== NOT EXECUTED } if (sign == 0) 2015b4c: 02 80 00 08 be 2015b6c <== NOT EXECUTED 2015b50: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED return 0; *val = i * sign; 2015b54: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 2015b58: 40 00 69 7e call 2030150 <.umul> <== NOT EXECUTED 2015b5c: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED 2015b60: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED 2015b64: 81 c7 e0 08 ret <== NOT EXECUTED 2015b68: 81 e8 00 00 restore <== NOT EXECUTED return 1; } 2015b6c: 81 c7 e0 08 ret <== NOT EXECUTED 2015b70: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 02015b74 : /* * Extract a string value from the database */ static int scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag) { 2015b74: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int c; *name = *bufp; 2015b78: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 2015b7c: c2 26 40 00 st %g1, [ %i1 ] <== NOT EXECUTED for (;;) { c = getc(fp); 2015b80: 33 00 80 dc sethi %hi(0x2037000), %i1 <== NOT EXECUTED 2015b84: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 2015b88: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 2015b8c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015b90: 16 80 00 07 bge 2015bac <== NOT EXECUTED 2015b94: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 2015b98: d0 06 60 88 ld [ %i1 + 0x88 ], %o0 <== NOT EXECUTED 2015b9c: 40 00 3a c7 call 20246b8 <__srget_r> <== NOT EXECUTED 2015ba0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (c == ':') { 2015ba4: 10 80 00 07 b 2015bc0 <== NOT EXECUTED 2015ba8: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED { int c; *name = *bufp; for (;;) { c = getc(fp); 2015bac: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 2015bb0: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED 2015bb4: d0 08 40 00 ldub [ %g1 ], %o0 <== NOT EXECUTED 2015bb8: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED if (c == ':') { 2015bbc: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED 2015bc0: 12 80 00 07 bne 2015bdc <== NOT EXECUTED 2015bc4: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED if (nlFlag) 2015bc8: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 2015bcc: 22 80 00 1a be,a 2015c34 <== NOT EXECUTED 2015bd0: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); } **bufp = '\0'; ++(*bufp); --(*nleft); return 1; 2015bd4: 81 c7 e0 08 ret <== NOT EXECUTED 2015bd8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (c == ':') { if (nlFlag) return 0; break; } if (c == '\n') { 2015bdc: 12 80 00 07 bne 2015bf8 <== NOT EXECUTED 2015be0: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED if (!nlFlag) 2015be4: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 2015be8: 32 80 00 13 bne,a 2015c34 <== NOT EXECUTED 2015bec: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); } **bufp = '\0'; ++(*bufp); --(*nleft); return 1; 2015bf0: 81 c7 e0 08 ret <== NOT EXECUTED 2015bf4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (c == '\n') { if (!nlFlag) return 0; break; } if (c == EOF) 2015bf8: 22 80 00 17 be,a 2015c54 <== NOT EXECUTED 2015bfc: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; if (*nleft < 2) 2015c00: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED 2015c04: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 2015c08: 28 80 00 13 bleu,a 2015c54 <== NOT EXECUTED 2015c0c: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; **bufp = c; 2015c10: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 2015c14: d0 28 40 00 stb %o0, [ %g1 ] <== NOT EXECUTED ++(*bufp); 2015c18: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); 2015c1c: c4 06 c0 00 ld [ %i3 ], %g2 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 2015c20: 82 00 60 01 inc %g1 <== NOT EXECUTED --(*nleft); 2015c24: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 2015c28: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED --(*nleft); 2015c2c: 10 bf ff d6 b 2015b84 <== NOT EXECUTED 2015c30: c4 26 c0 00 st %g2, [ %i3 ] <== NOT EXECUTED } **bufp = '\0'; 2015c34: c0 28 40 00 clrb [ %g1 ] <== NOT EXECUTED ++(*bufp); 2015c38: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED --(*nleft); 2015c3c: c4 06 c0 00 ld [ %i3 ], %g2 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 2015c40: 82 00 60 01 inc %g1 <== NOT EXECUTED --(*nleft); 2015c44: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 2015c48: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED --(*nleft); 2015c4c: c4 26 c0 00 st %g2, [ %i3 ] <== NOT EXECUTED 2015c50: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return 1; } 2015c54: 81 c7 e0 08 ret <== NOT EXECUTED 2015c58: 81 e8 00 00 restore <== NOT EXECUTED 02015c5c : FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 2015c5c: 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) 2015c60: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 2015c64: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 2015c68: 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) 2015c6c: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 2015c70: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 2015c74: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015c78: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2015c7c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015c80: 7f ff ff bd call 2015b74 <== NOT EXECUTED 2015c84: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015c88: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015c8c: 02 80 00 42 be 2015d94 <== NOT EXECUTED 2015c90: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015c94: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 2015c98: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015c9c: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015ca0: 7f ff ff b5 call 2015b74 <== NOT EXECUTED 2015ca4: 98 10 20 00 clr %o4 <== NOT EXECUTED 2015ca8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015cac: 02 80 00 3a be 2015d94 <== NOT EXECUTED 2015cb0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015cb4: 7f ff ff 70 call 2015a74 <== NOT EXECUTED 2015cb8: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 2015cbc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015cc0: 02 80 00 35 be 2015d94 <== NOT EXECUTED 2015cc4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015cc8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015ccc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015cd0: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 2015cd4: 7f ff ff a8 call 2015b74 <== NOT EXECUTED 2015cd8: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 2015cdc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015ce0: 02 80 00 2d be 2015d94 <== NOT EXECUTED 2015ce4: 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++) { 2015ce8: 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; 2015cec: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 2015cf0: 10 80 00 05 b 2015d04 <== NOT EXECUTED 2015cf4: 86 10 20 01 mov 1, %g3 <== NOT EXECUTED if(*cp == ',') memcount++; 2015cf8: 82 18 60 2c xor %g1, 0x2c, %g1 <== NOT EXECUTED 2015cfc: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 2015d00: 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++) { 2015d04: c2 48 80 00 ldsb [ %g2 ], %g1 <== NOT EXECUTED 2015d08: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015d0c: 12 bf ff fb bne 2015cf8 <== NOT EXECUTED 2015d10: 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)) 2015d14: c4 07 a0 50 ld [ %fp + 0x50 ], %g2 <== NOT EXECUTED 2015d18: 83 28 e0 02 sll %g3, 2, %g1 <== NOT EXECUTED 2015d1c: 82 00 60 13 add %g1, 0x13, %g1 <== NOT EXECUTED 2015d20: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2015d24: 0a 80 00 1c bcs 2015d94 <== NOT EXECUTED 2015d28: 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; 2015d2c: 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); 2015d30: 82 00 60 0f add %g1, 0xf, %g1 <== NOT EXECUTED 2015d34: 82 08 7f f0 and %g1, -16, %g1 <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 2015d38: 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); 2015d3c: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 2015d40: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2015d44: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED 2015d48: 10 80 00 0a b 2015d70 <== NOT EXECUTED 2015d4c: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { if(*cp == ',') { 2015d50: 32 80 00 08 bne,a 2015d70 <== NOT EXECUTED 2015d54: 86 00 e0 01 inc %g3 <== NOT EXECUTED *cp = '\0'; 2015d58: c0 28 ff ff clrb [ %g3 + -1 ] <== NOT EXECUTED grp->gr_mem[memcount++] = cp + 1; 2015d5c: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 2015d60: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 2015d64: 88 01 20 01 inc %g4 <== NOT EXECUTED 2015d68: c6 20 80 01 st %g3, [ %g2 + %g1 ] <== NOT EXECUTED 2015d6c: 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++) { 2015d70: c2 48 ff ff ldsb [ %g3 + -1 ], %g1 <== NOT EXECUTED 2015d74: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2015d78: 32 bf ff f6 bne,a 2015d50 <== NOT EXECUTED 2015d7c: 80 a0 60 2c cmp %g1, 0x2c <== NOT EXECUTED if(*cp == ',') { *cp = '\0'; grp->gr_mem[memcount++] = cp + 1; } } grp->gr_mem[memcount] = NULL; 2015d80: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 2015d84: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 2015d88: c0 20 80 01 clr [ %g2 + %g1 ] <== NOT EXECUTED 2015d8c: 81 c7 e0 08 ret <== NOT EXECUTED 2015d90: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED return 1; } 2015d94: 81 c7 e0 08 ret <== NOT EXECUTED 2015d98: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 02015de4 : FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 2015de4: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 2015de8: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 2015dec: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 2015df0: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 2015df4: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 2015df8: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 2015dfc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015e00: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2015e04: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015e08: 7f ff ff 5b call 2015b74 <== NOT EXECUTED 2015e0c: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015e10: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015e14: 02 80 00 39 be 2015ef8 <== NOT EXECUTED 2015e18: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015e1c: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 2015e20: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015e24: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015e28: 7f ff ff 53 call 2015b74 <== NOT EXECUTED 2015e2c: 98 10 20 00 clr %o4 <== NOT EXECUTED 2015e30: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015e34: 02 80 00 31 be 2015ef8 <== NOT EXECUTED 2015e38: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015e3c: 7f ff ff 0e call 2015a74 <== NOT EXECUTED 2015e40: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 2015e44: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015e48: 02 80 00 2c be 2015ef8 <== NOT EXECUTED 2015e4c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015e50: 7f ff ff 09 call 2015a74 <== NOT EXECUTED 2015e54: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 2015e58: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015e5c: 02 80 00 27 be 2015ef8 <== NOT EXECUTED 2015e60: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015e64: 92 06 60 0c add %i1, 0xc, %o1 <== NOT EXECUTED 2015e68: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015e6c: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015e70: 7f ff ff 41 call 2015b74 <== NOT EXECUTED 2015e74: 98 10 20 00 clr %o4 <== NOT EXECUTED 2015e78: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015e7c: 02 80 00 1f be 2015ef8 <== NOT EXECUTED 2015e80: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015e84: 92 06 60 10 add %i1, 0x10, %o1 <== NOT EXECUTED 2015e88: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015e8c: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015e90: 7f ff ff 39 call 2015b74 <== NOT EXECUTED 2015e94: 98 10 20 00 clr %o4 <== NOT EXECUTED 2015e98: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015e9c: 02 80 00 17 be 2015ef8 <== NOT EXECUTED 2015ea0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015ea4: 92 06 60 14 add %i1, 0x14, %o1 <== NOT EXECUTED 2015ea8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015eac: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015eb0: 7f ff ff 31 call 2015b74 <== NOT EXECUTED 2015eb4: 98 10 20 00 clr %o4 <== NOT EXECUTED 2015eb8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015ebc: 02 80 00 0f be 2015ef8 <== NOT EXECUTED 2015ec0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2015ec4: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 2015ec8: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 2015ecc: 92 06 60 18 add %i1, 0x18, %o1 <== NOT EXECUTED 2015ed0: 7f ff ff 29 call 2015b74 <== NOT EXECUTED 2015ed4: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 2015ed8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2015edc: 02 80 00 07 be 2015ef8 <== NOT EXECUTED 2015ee0: 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; 2015ee4: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED pwd->pw_gid = pwgid; 2015ee8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2015eec: c2 36 60 0a sth %g1, [ %i1 + 0xa ] <== NOT EXECUTED 2015ef0: 81 c7 e0 08 ret <== NOT EXECUTED 2015ef4: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED return 1; } 2015ef8: 81 c7 e0 08 ret <== NOT EXECUTED 2015efc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 02015a10 : int setgid( gid_t gid ) { _POSIX_types_Gid = gid; 2015a10: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2015a14: c2 00 61 a0 ld [ %g1 + 0x1a0 ], %g1 ! 20361a0 <== NOT EXECUTED 2015a18: d0 30 60 2a sth %o0, [ %g1 + 0x2a ] <== NOT EXECUTED return 0; } 2015a1c: 81 c3 e0 08 retl <== NOT EXECUTED 2015a20: 90 10 20 00 clr %o0 <== NOT EXECUTED 02016024 : return NULL; return &grent; } void setgrent(void) { 2016024: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 2016028: 7f ff ff c8 call 2015f48 <== NOT EXECUTED 201602c: 21 00 80 de sethi %hi(0x2037800), %l0 <== NOT EXECUTED if (group_fp != NULL) 2016030: d0 04 20 1c ld [ %l0 + 0x1c ], %o0 ! 203781c <== NOT EXECUTED 2016034: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016038: 22 80 00 05 be,a 201604c <== NOT EXECUTED 201603c: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED fclose(group_fp); 2016040: 40 00 2c a8 call 20212e0 <== NOT EXECUTED 2016044: 01 00 00 00 nop <== NOT EXECUTED group_fp = fopen("/etc/group", "r"); 2016048: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 201604c: 13 00 80 d4 sethi %hi(0x2035000), %o1 <== NOT EXECUTED 2016050: 90 12 21 58 or %o0, 0x158, %o0 <== NOT EXECUTED 2016054: 40 00 2e a1 call 2021ad8 <== NOT EXECUTED 2016058: 92 12 63 c0 or %o1, 0x3c0, %o1 <== NOT EXECUTED 201605c: d0 24 20 1c st %o0, [ %l0 + 0x1c ] <== NOT EXECUTED } 2016060: 81 c7 e0 08 ret <== NOT EXECUTED 2016064: 81 e8 00 00 restore <== NOT EXECUTED 02016214 : return NULL; return &pwent; } void setpwent(void) { 2016214: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 2016218: 7f ff ff 4c call 2015f48 <== NOT EXECUTED 201621c: 21 00 80 dd sethi %hi(0x2037400), %l0 <== NOT EXECUTED if (passwd_fp != NULL) 2016220: d0 04 23 34 ld [ %l0 + 0x334 ], %o0 ! 2037734 <== NOT EXECUTED 2016224: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016228: 22 80 00 05 be,a 201623c <== NOT EXECUTED 201622c: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED fclose(passwd_fp); 2016230: 40 00 2c 2c call 20212e0 <== NOT EXECUTED 2016234: 01 00 00 00 nop <== NOT EXECUTED passwd_fp = fopen("/etc/passwd", "r"); 2016238: 11 00 80 cc sethi %hi(0x2033000), %o0 <== NOT EXECUTED 201623c: 13 00 80 d4 sethi %hi(0x2035000), %o1 <== NOT EXECUTED 2016240: 90 12 20 e0 or %o0, 0xe0, %o0 <== NOT EXECUTED 2016244: 40 00 2e 25 call 2021ad8 <== NOT EXECUTED 2016248: 92 12 63 c0 or %o1, 0x3c0, %o1 <== NOT EXECUTED 201624c: d0 24 23 34 st %o0, [ %l0 + 0x334 ] <== NOT EXECUTED } 2016250: 81 c7 e0 08 ret <== NOT EXECUTED 2016254: 81 e8 00 00 restore <== NOT EXECUTED 02016414 : int setuid( uid_t uid ) { _POSIX_types_Uid = uid; 2016414: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2016418: c2 00 61 a0 ld [ %g1 + 0x1a0 ], %g1 ! 20361a0 <== NOT EXECUTED 201641c: d0 30 60 28 sth %o0, [ %g1 + 0x28 ] <== NOT EXECUTED return 0; } 2016420: 81 c3 e0 08 retl <== NOT EXECUTED 2016424: 90 10 20 00 clr %o0 <== NOT EXECUTED 02003d54 : /* * Process input character, with semaphore. */ static int siproc (unsigned char c, struct rtems_termios_tty *tty) { 2003d54: 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)) { 2003d58: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 2003d5c: 80 88 6e 78 btst 0xe78, %g1 <== NOT EXECUTED 2003d60: 12 80 00 04 bne 2003d70 <== NOT EXECUTED 2003d64: 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); 2003d68: 7f ff ff 89 call 2003b8c <== NOT EXECUTED 2003d6c: 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); 2003d70: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED 2003d74: 94 10 20 00 clr %o2 <== NOT EXECUTED 2003d78: 40 00 06 f7 call 2005954 <== NOT EXECUTED 2003d7c: 92 10 20 00 clr %o1 <== NOT EXECUTED i = iproc (c, tty); 2003d80: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2003d84: 7f ff ff 82 call 2003b8c <== NOT EXECUTED 2003d88: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 2003d8c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_semaphore_release (tty->osem); 2003d90: 40 00 07 b8 call 2005c70 <== NOT EXECUTED 2003d94: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED } else { i = iproc (c, tty); } return i; } 2003d98: 81 c7 e0 08 ret <== NOT EXECUTED 2003d9c: 81 e8 00 00 restore <== NOT EXECUTED 020053c4 : int _STAT_NAME( const char *path, struct stat *buf ) { 20053c4: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !buf ) 20053c8: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 20053cc: 12 80 00 06 bne 20053e4 <== NOT EXECUTED 20053d0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); 20053d4: 40 00 6f 7c call 20211c4 <__errno> <== NOT EXECUTED 20053d8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 20053dc: 10 80 00 1c b 200544c <== NOT EXECUTED 20053e0: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED status = rtems_filesystem_evaluate_path( path, 0, &loc, _STAT_FOLLOW_LINKS ); 20053e4: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 20053e8: 92 10 20 00 clr %o1 <== NOT EXECUTED 20053ec: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 20053f0: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 20053f4: 7f ff fa 21 call 2003c78 <== NOT EXECUTED 20053f8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 20053fc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2005400: 12 80 00 14 bne 2005450 <== NOT EXECUTED 2005404: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED return -1; if ( !loc.handlers->fstat_h ){ 2005408: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 200540c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2005410: 12 80 00 12 bne 2005458 <== NOT EXECUTED 2005414: 92 10 20 00 clr %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2005418: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 200541c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2005420: 02 80 00 08 be 2005440 <== NOT EXECUTED 2005424: 01 00 00 00 nop <== NOT EXECUTED 2005428: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 200542c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2005430: 02 80 00 04 be 2005440 <== NOT EXECUTED 2005434: 01 00 00 00 nop <== NOT EXECUTED 2005438: 9f c0 40 00 call %g1 <== NOT EXECUTED 200543c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2005440: 40 00 6f 61 call 20211c4 <__errno> <== NOT EXECUTED 2005444: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2005448: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 200544c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2005450: 81 c7 e0 08 ret <== NOT EXECUTED 2005454: 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) ); 2005458: 94 10 20 50 mov 0x50, %o2 <== NOT EXECUTED 200545c: 40 00 76 6f call 2022e18 <== NOT EXECUTED 2005460: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED status = (*loc.handlers->fstat_h)( &loc, buf ); 2005464: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED 2005468: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 200546c: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 <== NOT EXECUTED 2005470: 9f c0 40 00 call %g1 <== NOT EXECUTED 2005474: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2005478: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 200547c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2005480: 02 bf ff f4 be 2005450 <== NOT EXECUTED 2005484: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 2005488: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 200548c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2005490: 02 80 00 04 be 20054a0 <== NOT EXECUTED 2005494: 01 00 00 00 nop <== NOT EXECUTED 2005498: 9f c0 40 00 call %g1 <== NOT EXECUTED 200549c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return status; } 20054a0: 81 c7 e0 08 ret <== NOT EXECUTED 20054a4: 81 e8 00 00 restore <== NOT EXECUTED 020169bc : int tcdrain( int fd ) { return ioctl( fd, RTEMS_IO_TCDRAIN, 0 ); 20169bc: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 20169c0: 94 10 20 00 clr %o2 <== NOT EXECUTED 20169c4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 20169c8: 40 00 22 3f call 201f2c4 <== NOT EXECUTED 20169cc: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 20169d0: 01 00 00 00 nop 0201244c : int tcgetattr( int fd, struct termios *tp ) { 201244c: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED return ioctl( fd, RTEMS_IO_GET_ATTRIBUTES, tp ); 2012450: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 2012454: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 2012458: 40 00 0d 55 call 20159ac <== NOT EXECUTED 201245c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 2012460: 01 00 00 00 nop 02012464 : int tcsetattr( int fd, int opt, struct termios *tp ) { 2012464: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch (opt) { 2012468: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 201246c: 02 80 00 10 be 20124ac <== NOT EXECUTED 2012470: 80 a6 60 01 cmp %i1, 1 <== NOT EXECUTED 2012474: 02 80 00 08 be 2012494 <== NOT EXECUTED 2012478: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 201247c: 40 00 0e da call 2015fe4 <__errno> <== NOT EXECUTED 2012480: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2012484: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2012488: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 201248c: 81 c7 e0 08 ret <== NOT EXECUTED 2012490: 81 e8 00 00 restore <== NOT EXECUTED case TCSADRAIN: if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0) 2012494: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 2012498: 40 00 0d 45 call 20159ac <== NOT EXECUTED 201249c: 94 10 20 00 clr %o2 <== NOT EXECUTED 20124a0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 20124a4: 26 80 00 04 bl,a 20124b4 <== NOT EXECUTED 20124a8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED return -1; /* * Fall through to.... */ case TCSANOW: return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp ); 20124ac: 40 00 0d 40 call 20159ac <== NOT EXECUTED 20124b0: 93 e8 20 02 restore %g0, 2, %o1 <== NOT EXECUTED } } 20124b4: 81 c7 e0 08 ret <== NOT EXECUTED 20124b8: 81 e8 00 00 restore <== NOT EXECUTED 02016b48 : */ char *ttyname( int fd ) { 2016b48: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !ttyname_r( fd, ttyname_buf, sizeof(ttyname_buf) ) ) 2016b4c: 21 00 80 d8 sethi %hi(0x2036000), %l0 <== NOT EXECUTED 2016b50: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016b54: 94 10 24 06 mov 0x406, %o2 <== NOT EXECUTED 2016b58: 92 14 23 10 or %l0, 0x310, %o1 <== NOT EXECUTED 2016b5c: 7f ff ff ba call 2016a44 <== NOT EXECUTED 2016b60: b0 14 23 10 or %l0, 0x310, %i0 <== NOT EXECUTED 2016b64: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016b68: 32 80 00 02 bne,a 2016b70 <== NOT EXECUTED 2016b6c: b0 10 20 00 clr %i0 <== NOT EXECUTED return ttyname_buf; return NULL; } 2016b70: 81 c7 e0 08 ret <== NOT EXECUTED 2016b74: 81 e8 00 00 restore <== NOT EXECUTED 02016a44 : int ttyname_r( int fd, char *name, int namesize ) { 2016a44: 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) 2016a48: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016a4c: 7f ff ff e2 call 20169d4 <== NOT EXECUTED 2016a50: 92 07 bf d4 add %fp, -44, %o1 <== NOT EXECUTED 2016a54: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016a58: 06 80 00 14 bl 2016aa8 <== NOT EXECUTED 2016a5c: 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)) 2016a60: 40 00 21 ae call 201f118 <== NOT EXECUTED 2016a64: 92 07 bf 80 add %fp, -128, %o1 <== NOT EXECUTED 2016a68: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016a6c: 12 80 00 0f bne 2016aa8 <== NOT EXECUTED 2016a70: c2 17 bf 8c lduh [ %fp + -116 ], %g1 <== NOT EXECUTED 2016a74: 05 00 00 3c sethi %hi(0xf000), %g2 <== NOT EXECUTED 2016a78: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 2016a7c: 05 00 00 08 sethi %hi(0x2000), %g2 <== NOT EXECUTED 2016a80: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 2016a84: 12 80 00 09 bne 2016aa8 <== NOT EXECUTED 2016a88: 11 00 80 cc sethi %hi(0x2033000), %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); 2016a8c: 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) 2016a90: 90 12 21 98 or %o0, 0x198, %o0 <== NOT EXECUTED 2016a94: 7f ff fe 90 call 20164d4 <== NOT EXECUTED 2016a98: a2 07 bf 30 add %fp, -208, %l1 <== NOT EXECUTED 2016a9c: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 2016aa0: 12 80 00 20 bne 2016b20 <== NOT EXECUTED 2016aa4: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EBADF); 2016aa8: 40 00 29 c7 call 20211c4 <__errno> <== NOT EXECUTED 2016aac: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 2016ab0: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 2016ab4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2016ab8: 81 c7 e0 08 ret <== NOT EXECUTED 2016abc: 81 e8 00 00 restore <== NOT EXECUTED for (rval = NULL; (dirp = readdir (dp)) != NULL ;) { if (dirp->d_ino != sb.st_ino) 2016ac0: c2 07 bf 88 ld [ %fp + -120 ], %g1 <== NOT EXECUTED 2016ac4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2016ac8: 12 80 00 16 bne 2016b20 <== NOT EXECUTED 2016acc: 92 02 20 0c add %o0, 0xc, %o1 <== NOT EXECUTED continue; strcpy (name + sizeof (_PATH_DEV) - 1, dirp->d_name); 2016ad0: 40 00 38 b4 call 2024da0 <== NOT EXECUTED 2016ad4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if (stat (name, &dsb) || sb.st_dev != dsb.st_dev || 2016ad8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 2016adc: 7f ff ba 3a call 20053c4 <== NOT EXECUTED 2016ae0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 2016ae4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016ae8: 12 80 00 0e bne 2016b20 <== NOT EXECUTED 2016aec: c4 07 bf 80 ld [ %fp + -128 ], %g2 <== NOT EXECUTED 2016af0: c2 07 bf 30 ld [ %fp + -208 ], %g1 <== NOT EXECUTED 2016af4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2016af8: 12 80 00 0a bne 2016b20 <== NOT EXECUTED 2016afc: c4 07 bf 84 ld [ %fp + -124 ], %g2 <== NOT EXECUTED 2016b00: c2 07 bf 34 ld [ %fp + -204 ], %g1 <== NOT EXECUTED 2016b04: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2016b08: 12 80 00 06 bne 2016b20 <== NOT EXECUTED 2016b0c: c4 07 bf 88 ld [ %fp + -120 ], %g2 <== NOT EXECUTED 2016b10: c2 07 bf 38 ld [ %fp + -200 ], %g1 <== NOT EXECUTED 2016b14: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 2016b18: 02 80 00 08 be 2016b38 <== NOT EXECUTED 2016b1c: 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 ;) 2016b20: 7f ff ff 23 call 20167ac <== NOT EXECUTED 2016b24: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016b28: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016b2c: 32 bf ff e5 bne,a 2016ac0 <== NOT EXECUTED 2016b30: c4 02 00 00 ld [ %o0 ], %g2 <== NOT EXECUTED sb.st_ino != dsb.st_ino) continue; rval = name; break; } (void) closedir (dp); 2016b34: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016b38: 7f ff f9 d1 call 201527c <== NOT EXECUTED 2016b3c: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 2016b40: 81 c7 e0 08 ret <== NOT EXECUTED 2016b44: 81 e8 00 00 restore <== NOT EXECUTED 02016b78 : mode_t cmask ) { mode_t old_mask; old_mask = rtems_filesystem_umask; 2016b78: 03 00 80 d8 sethi %hi(0x2036000), %g1 <== NOT EXECUTED 2016b7c: c4 00 61 a0 ld [ %g1 + 0x1a0 ], %g2 ! 20361a0 <== NOT EXECUTED 2016b80: c2 10 a0 24 lduh [ %g2 + 0x24 ], %g1 <== NOT EXECUTED rtems_filesystem_umask = cmask; 2016b84: d0 30 a0 24 sth %o0, [ %g2 + 0x24 ] <== NOT EXECUTED 2016b88: 83 28 60 10 sll %g1, 0x10, %g1 <== NOT EXECUTED return old_mask; } 2016b8c: 81 c3 e0 08 retl <== NOT EXECUTED 2016b90: 91 30 60 10 srl %g1, 0x10, %o0 <== NOT EXECUTED 02016b94 : #include int unlink( const char *path ) { 2016b94: 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 ); 2016b98: 92 10 20 00 clr %o1 <== NOT EXECUTED 2016b9c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 2016ba0: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 2016ba4: 96 10 20 00 clr %o3 <== NOT EXECUTED 2016ba8: 7f ff b4 34 call 2003c78 <== NOT EXECUTED 2016bac: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 2016bb0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016bb4: 32 80 00 17 bne,a 2016c10 <== NOT EXECUTED 2016bb8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 2016bbc: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 2016bc0: 7f ff b4 01 call 2003bc4 <== NOT EXECUTED 2016bc4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0 && errno != ENOTSUP) { 2016bc8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 2016bcc: 02 80 00 13 be 2016c18 <== NOT EXECUTED 2016bd0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2016bd4: 40 00 29 7c call 20211c4 <__errno> <== NOT EXECUTED 2016bd8: 01 00 00 00 nop <== NOT EXECUTED 2016bdc: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 2016be0: 80 a0 60 86 cmp %g1, 0x86 <== NOT EXECUTED 2016be4: 02 80 00 0d be 2016c18 <== NOT EXECUTED 2016be8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2016bec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016bf0: 02 80 00 08 be 2016c10 <== NOT EXECUTED 2016bf4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2016bf8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016bfc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016c00: 02 80 00 04 be 2016c10 <== NOT EXECUTED 2016c04: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016c08: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016c0c: 01 00 00 00 nop <== NOT EXECUTED 2016c10: 81 c7 e0 08 ret <== NOT EXECUTED 2016c14: 81 e8 00 00 restore <== NOT EXECUTED return -1; } if ( !loc.ops->node_type_h ) { 2016c18: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 2016c1c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2016c20: 12 80 00 07 bne 2016c3c <== NOT EXECUTED 2016c24: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2016c28: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016c2c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016c30: 12 80 00 1d bne 2016ca4 <== NOT EXECUTED 2016c34: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 2016c38: 30 80 00 1d b,a 2016cac <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { 2016c3c: 9f c0 80 00 call %g2 <== NOT EXECUTED 2016c40: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016c44: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 2016c48: 12 80 00 0f bne 2016c84 <== NOT EXECUTED 2016c4c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2016c50: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016c54: 02 80 00 08 be 2016c74 <== NOT EXECUTED 2016c58: 01 00 00 00 nop <== NOT EXECUTED 2016c5c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016c60: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016c64: 02 80 00 04 be 2016c74 <== NOT EXECUTED 2016c68: 01 00 00 00 nop <== NOT EXECUTED 2016c6c: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016c70: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); 2016c74: 40 00 29 54 call 20211c4 <__errno> <== NOT EXECUTED 2016c78: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 2016c7c: 10 80 00 0f b 2016cb8 <== NOT EXECUTED 2016c80: 82 10 20 15 mov 0x15, %g1 <== NOT EXECUTED } if ( !loc.ops->unlink_h ) { 2016c84: c4 00 60 0c ld [ %g1 + 0xc ], %g2 <== NOT EXECUTED 2016c88: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 2016c8c: 12 80 00 0e bne 2016cc4 <== NOT EXECUTED 2016c90: 01 00 00 00 nop <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2016c94: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016c98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016c9c: 02 80 00 04 be 2016cac <== NOT EXECUTED 2016ca0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016ca4: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016ca8: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 2016cac: 40 00 29 46 call 20211c4 <__errno> <== NOT EXECUTED 2016cb0: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 2016cb4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 2016cb8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2016cbc: 81 c7 e0 08 ret <== NOT EXECUTED 2016cc0: 81 e8 00 00 restore <== NOT EXECUTED } result = (*loc.ops->unlink_h)( &loc ); 2016cc4: 9f c0 80 00 call %g2 <== NOT EXECUTED 2016cc8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 2016ccc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 2016cd0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016cd4: 02 bf ff cf be 2016c10 <== NOT EXECUTED 2016cd8: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 2016cdc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 2016ce0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 2016ce4: 02 80 00 06 be 2016cfc <== NOT EXECUTED 2016ce8: 01 00 00 00 nop <== NOT EXECUTED 2016cec: 9f c0 40 00 call %g1 <== NOT EXECUTED 2016cf0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 2016cf4: 81 c7 e0 08 ret <== NOT EXECUTED 2016cf8: 81 e8 00 00 restore <== NOT EXECUTED return result; } 2016cfc: 81 c7 e0 08 ret <== NOT EXECUTED 2016d00: 81 e8 00 00 restore <== NOT EXECUTED 02002d28 : | Arguments: as in printf: fmt - format string, ... - unnamed arguments. | Returns: Nothing. +--------------------------------------------------------------------------*/ void vprintk(const char *fmt, va_list ap) { 2002d28: 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)])]); 2002d2c: 03 00 80 58 sethi %hi(0x2016000), %g1 printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), base, sign, width, lead); } else { BSP_output_char(*fmt); 2002d30: 2d 00 80 5a sethi %hi(0x2016800), %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)])]); 2002d34: b4 10 60 70 or %g1, 0x70, %i2 if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); 2002d38: ba 07 bf e4 add %fp, -28, %i5 num = n ; } toPrint[count++] = num; 2002d3c: b6 07 bf f8 add %fp, -8, %i3 for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ 2002d40: 10 80 00 9f b 2002fbc 2002d44: b8 07 bf e2 add %fp, -30, %i4 lflag = 0; base = 0; sign = 0; width = 0; lead = ' '; if (*fmt == '%') 2002d48: 12 80 00 9b bne 2002fb4 2002d4c: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 { fmt++; 2002d50: b0 06 20 01 inc %i0 if (*fmt == '0' ) { 2002d54: c2 4e 00 00 ldsb [ %i0 ], %g1 2002d58: 80 a0 60 30 cmp %g1, 0x30 2002d5c: 12 80 00 04 bne 2002d6c 2002d60: ae 10 20 20 mov 0x20, %l7 lead = '0'; fmt++; 2002d64: b0 06 20 01 inc %i0 2002d68: ae 10 20 30 mov 0x30, %l7 2002d6c: 10 80 00 08 b 2002d8c 2002d70: a0 10 20 00 clr %l0 } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; width += (*fmt - '0'); 2002d74: 85 38 60 18 sra %g1, 0x18, %g2 fmt++; 2002d78: b0 06 20 01 inc %i0 if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; 2002d7c: 83 2c 20 01 sll %l0, 1, %g1 width += (*fmt - '0'); 2002d80: 84 00 bf d0 add %g2, -48, %g2 if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; 2002d84: 82 00 40 03 add %g1, %g3, %g1 width += (*fmt - '0'); 2002d88: a0 00 80 01 add %g2, %g1, %l0 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 2002d8c: d0 0e 00 00 ldub [ %i0 ], %o0 width *= 10; 2002d90: 87 2c 20 03 sll %l0, 3, %g3 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 2002d94: 82 02 3f d0 add %o0, -48, %g1 2002d98: 82 08 60 ff and %g1, 0xff, %g1 2002d9c: 80 a0 60 09 cmp %g1, 9 2002da0: 08 bf ff f5 bleu 2002d74 2002da4: 83 2a 20 18 sll %o0, 0x18, %g1 width *= 10; width += (*fmt - '0'); fmt++; } if ((c = *fmt) == 'l') 2002da8: 83 38 60 18 sra %g1, 0x18, %g1 2002dac: 80 a0 60 6c cmp %g1, 0x6c 2002db0: 12 80 00 04 bne 2002dc0 2002db4: aa 10 00 10 mov %l0, %l5 { lflag = 1; c = *++fmt; 2002db8: b0 06 20 01 inc %i0 2002dbc: d0 0e 00 00 ldub [ %i0 ], %o0 } switch (c) 2002dc0: 83 2a 20 18 sll %o0, 0x18, %g1 2002dc4: 83 38 60 18 sra %g1, 0x18, %g1 2002dc8: 80 a0 60 64 cmp %g1, 0x64 2002dcc: 02 80 00 2c be 2002e7c 2002dd0: a8 10 20 0a mov 0xa, %l4 2002dd4: 14 80 00 16 bg 2002e2c 2002dd8: 80 a0 60 70 cmp %g1, 0x70 2002ddc: 80 a0 60 4f cmp %g1, 0x4f <== NOT EXECUTED 2002de0: 02 80 00 3e be 2002ed8 <== NOT EXECUTED 2002de4: a8 10 20 08 mov 8, %l4 <== NOT EXECUTED 2002de8: 14 80 00 09 bg 2002e0c <== NOT EXECUTED 2002dec: 80 a0 60 58 cmp %g1, 0x58 <== NOT EXECUTED 2002df0: 80 a0 60 44 cmp %g1, 0x44 <== NOT EXECUTED 2002df4: 02 80 00 21 be 2002e78 <== NOT EXECUTED 2002df8: 80 a0 60 49 cmp %g1, 0x49 <== NOT EXECUTED 2002dfc: 12 80 00 33 bne 2002ec8 <== NOT EXECUTED 2002e00: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 <== NOT EXECUTED { case 'o': case 'O': base = 8; sign = 0; break; 2002e04: 10 80 00 1e b 2002e7c <== NOT EXECUTED 2002e08: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 2002e0c: 02 80 00 32 be 2002ed4 <== NOT EXECUTED 2002e10: 80 a0 60 63 cmp %g1, 0x63 <== NOT EXECUTED 2002e14: 02 80 00 29 be 2002eb8 <== NOT EXECUTED 2002e18: 80 a0 60 55 cmp %g1, 0x55 <== NOT EXECUTED 2002e1c: 12 80 00 2b bne 2002ec8 <== NOT EXECUTED 2002e20: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %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; 2002e24: 10 80 00 2d b 2002ed8 <== NOT EXECUTED 2002e28: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 2002e2c: 02 80 00 2a be 2002ed4 2002e30: 80 a0 60 70 cmp %g1, 0x70 2002e34: 14 80 00 09 bg 2002e58 2002e38: 80 a0 60 75 cmp %g1, 0x75 2002e3c: 80 a0 60 69 cmp %g1, 0x69 <== NOT EXECUTED 2002e40: 02 80 00 0e be 2002e78 <== NOT EXECUTED 2002e44: 80 a0 60 6f cmp %g1, 0x6f <== NOT EXECUTED 2002e48: 12 80 00 20 bne 2002ec8 <== NOT EXECUTED 2002e4c: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 <== NOT EXECUTED 2002e50: 10 80 00 22 b 2002ed8 <== NOT EXECUTED 2002e54: a8 10 20 08 mov 8, %l4 <== NOT EXECUTED 2002e58: 02 80 00 0b be 2002e84 2002e5c: 80 a0 60 78 cmp %g1, 0x78 2002e60: 02 80 00 1d be 2002ed4 2002e64: 80 a0 60 73 cmp %g1, 0x73 2002e68: 32 80 00 18 bne,a 2002ec8 2002e6c: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %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++) 2002e70: 10 80 00 07 b 2002e8c 2002e74: e0 06 40 00 ld [ %i1 ], %l0 lflag = 1; c = *++fmt; } switch (c) { case 'o': case 'O': base = 8; sign = 0; break; 2002e78: a8 10 20 0a mov 0xa, %l4 <== NOT EXECUTED 2002e7c: 10 80 00 18 b 2002edc 2002e80: 84 10 20 01 mov 1, %g2 case 'i': case 'I': case 'd': case 'D': base = 10; sign = 1; break; 2002e84: 10 80 00 15 b 2002ed8 <== NOT EXECUTED 2002e88: 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++) 2002e8c: 10 80 00 06 b 2002ea4 2002e90: d0 4c 00 00 ldsb [ %l0 ], %o0 BSP_output_char(*str); 2002e94: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 2002e98: 9f c0 40 00 call %g1 2002e9c: 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++) 2002ea0: d0 4c 00 00 ldsb [ %l0 ], %o0 2002ea4: 80 a2 20 00 cmp %o0, 0 2002ea8: 12 bf ff fb bne 2002e94 2002eac: a0 04 20 01 inc %l0 2002eb0: 10 80 00 49 b 2002fd4 2002eb4: b2 06 60 04 add %i1, 4, %i1 BSP_output_char(*str); break; case 'c': BSP_output_char(va_arg(ap, int)); 2002eb8: d0 4e 60 03 ldsb [ %i1 + 3 ], %o0 <== NOT EXECUTED 2002ebc: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 <== NOT EXECUTED 2002ec0: 10 80 00 3d b 2002fb4 <== NOT EXECUTED 2002ec4: b2 06 60 04 add %i1, 4, %i1 <== NOT EXECUTED break; default: BSP_output_char(c); 2002ec8: 91 2a 20 18 sll %o0, 0x18, %o0 <== NOT EXECUTED 2002ecc: 10 80 00 3a b 2002fb4 <== NOT EXECUTED 2002ed0: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED 2002ed4: a8 10 20 10 mov 0x10, %l4 2002ed8: 84 10 20 00 clr %g2 2002edc: 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), 2002ee0: e2 06 40 00 ld [ %i1 ], %l1 { long unsigned int n; int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { 2002ee4: 80 a0 a0 01 cmp %g2, 1 2002ee8: 12 80 00 05 bne 2002efc 2002eec: b2 10 00 01 mov %g1, %i1 2002ef0: 80 a4 60 00 cmp %l1, 0 2002ef4: 06 80 00 04 bl 2002f04 2002ef8: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 2002efc: 10 80 00 08 b 2002f1c 2002f00: aa 10 00 10 mov %l0, %l5 BSP_output_char('-'); 2002f04: 9f c0 40 00 call %g1 2002f08: 90 10 20 2d mov 0x2d, %o0 num = -num; if (maxwidth) maxwidth--; 2002f0c: 80 a4 20 00 cmp %l0, 0 2002f10: 02 80 00 03 be 2002f1c 2002f14: a2 20 00 11 neg %l1 2002f18: aa 04 3f ff add %l0, -1, %l5 2002f1c: 10 80 00 08 b 2002f3c 2002f20: a6 10 20 00 clr %l3 } count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); 2002f24: 40 00 45 ad call 20145d8 <.umul> 2002f28: 92 10 00 14 mov %l4, %o1 2002f2c: 90 24 40 08 sub %l1, %o0, %o0 2002f30: a2 10 00 10 mov %l0, %l1 2002f34: d0 2c c0 1d stb %o0, [ %l3 + %i5 ] 2002f38: a6 10 00 12 mov %l2, %l3 num = -num; if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { 2002f3c: 90 10 00 11 mov %l1, %o0 2002f40: 92 10 00 14 mov %l4, %o1 2002f44: 40 00 45 df call 20146c0 <.udiv> 2002f48: a4 04 e0 01 add %l3, 1, %l2 2002f4c: a0 92 20 00 orcc %o0, 0, %l0 2002f50: 32 bf ff f5 bne,a 2002f24 2002f54: 90 10 00 10 mov %l0, %o0 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 2002f58: 82 06 c0 13 add %i3, %l3, %g1 for (n=maxwidth ; n > count; n-- ) 2002f5c: a0 10 00 15 mov %l5, %l0 count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 2002f60: e2 28 7f ec stb %l1, [ %g1 + -20 ] for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); 2002f64: 10 80 00 05 b 2002f78 2002f68: a2 10 00 17 mov %l7, %l1 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) 2002f6c: a0 04 3f ff add %l0, -1, %l0 BSP_output_char(lead); 2002f70: 9f c0 40 00 call %g1 2002f74: 90 10 00 11 mov %l1, %o0 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) 2002f78: 80 a4 00 12 cmp %l0, %l2 2002f7c: 18 bf ff fc bgu 2002f6c 2002f80: c2 05 a3 c4 ld [ %l6 + 0x3c4 ], %g1 2002f84: 82 04 bf ff add %l2, -1, %g1 2002f88: 10 80 00 05 b 2002f9c 2002f8c: 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)])]); 2002f90: c4 05 a3 c4 ld [ %l6 + 0x3c4 ], %g2 2002f94: 9f c0 80 00 call %g2 2002f98: d0 4e 80 01 ldsb [ %i2 + %g1 ], %o0 2002f9c: 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++){ 2002fa0: 80 a4 00 1c cmp %l0, %i4 2002fa4: 32 bf ff fb bne,a 2002f90 2002fa8: 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++) 2002fac: 10 80 00 04 b 2002fbc 2002fb0: 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); 2002fb4: 9f c0 40 00 call %g1 2002fb8: 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++) 2002fbc: d0 4e 00 00 ldsb [ %i0 ], %o0 2002fc0: 80 a2 20 00 cmp %o0, 0 2002fc4: 12 bf ff 61 bne 2002d48 2002fc8: 80 a2 20 25 cmp %o0, 0x25 2002fcc: 81 c7 e0 08 ret 2002fd0: 81 e8 00 00 restore 2002fd4: 10 bf ff fa b 2002fbc 2002fd8: b0 06 20 01 inc %i0 020157e8 : ssize_t write( int fd, const void *buffer, size_t count ) { 20157e8: 9d e3 bf 98 save %sp, -104, %sp ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 20157ec: 03 00 80 5a sethi %hi(0x2016800), %g1 20157f0: c2 00 62 cc ld [ %g1 + 0x2cc ], %g1 ! 2016acc ssize_t write( int fd, const void *buffer, size_t count ) { 20157f4: 92 10 00 19 mov %i1, %o1 ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 20157f8: 80 a6 00 01 cmp %i0, %g1 20157fc: 1a 80 00 0e bcc 2015834 2015800: 94 10 00 1a mov %i2, %o2 iop = rtems_libio_iop( fd ); 2015804: 03 00 80 5e sethi %hi(0x2017800), %g1 2015808: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 ! 20179e0 201580c: 85 2e 20 02 sll %i0, 2, %g2 2015810: 83 2e 20 04 sll %i0, 4, %g1 2015814: 82 20 40 02 sub %g1, %g2, %g1 2015818: 82 00 40 18 add %g1, %i0, %g1 201581c: 83 28 60 02 sll %g1, 2, %g1 2015820: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 2015824: c2 06 20 0c ld [ %i0 + 0xc ], %g1 2015828: 80 88 61 00 btst 0x100, %g1 201582c: 12 80 00 06 bne 2015844 2015830: 80 a6 60 00 cmp %i1, 0 2015834: 7f ff e0 06 call 200d84c <__errno> <== NOT EXECUTED 2015838: 01 00 00 00 nop <== NOT EXECUTED 201583c: 10 80 00 14 b 201588c <== NOT EXECUTED 2015840: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 2015844: 02 80 00 07 be 2015860 2015848: 80 a6 a0 00 cmp %i2, 0 rtems_libio_check_count( count ); 201584c: 02 80 00 1b be 20158b8 2015850: 90 10 20 00 clr %o0 rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 2015854: 80 88 60 04 btst 4, %g1 2015858: 32 80 00 06 bne,a 2015870 201585c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 2015860: 7f ff df fb call 200d84c <__errno> <== NOT EXECUTED 2015864: 01 00 00 00 nop <== NOT EXECUTED 2015868: 10 80 00 09 b 201588c <== NOT EXECUTED 201586c: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED /* * Now process the write() request. */ if ( !iop->handlers->write_h ) 2015870: c2 00 60 0c ld [ %g1 + 0xc ], %g1 2015874: 80 a0 60 00 cmp %g1, 0 2015878: 12 80 00 08 bne 2015898 201587c: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); 2015880: 7f ff df f3 call 200d84c <__errno> <== NOT EXECUTED 2015884: 01 00 00 00 nop <== NOT EXECUTED 2015888: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 201588c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 2015890: 10 80 00 0a b 20158b8 <== NOT EXECUTED 2015894: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rc = (*iop->handlers->write_h)( iop, buffer, count ); 2015898: 9f c0 40 00 call %g1 201589c: 90 10 00 18 mov %i0, %o0 if ( rc > 0 ) 20158a0: 80 a2 20 00 cmp %o0, 0 20158a4: 04 80 00 05 ble 20158b8 20158a8: 01 00 00 00 nop iop->offset += rc; 20158ac: c2 06 20 08 ld [ %i0 + 8 ], %g1 20158b0: 82 00 40 08 add %g1, %o0, %g1 20158b4: c2 26 20 08 st %g1, [ %i0 + 8 ] return rc; } 20158b8: 81 c7 e0 08 ret 20158bc: 91 e8 00 08 restore %g0, %o0, %o0