4000c110 : { IMFS_jnode_t *node = loc->node_access; IMFS_fs_info_t *fs_info; fs_info = loc->mt_entry->fs_info; switch( node->type ) { 4000c110: 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; 4000c114: c4 02 20 0c ld [ %o0 + 0xc ], %g2 switch( node->type ) { 4000c118: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 4000c11c: 80 a0 60 06 cmp %g1, 6 4000c120: 18 80 00 0a bgu 4000c148 4000c124: c8 00 a0 2c ld [ %g2 + 0x2c ], %g4 4000c128: 83 28 60 02 sll %g1, 2, %g1 4000c12c: 05 10 00 30 sethi %hi(0x4000c000), %g2 4000c130: 84 10 a0 f4 or %g2, 0xf4, %g2 ! 4000c0f4 4000c134: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000c138: 81 c0 c0 00 jmp %g3 4000c13c: 01 00 00 00 nop case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; 4000c140: c2 01 20 08 ld [ %g4 + 8 ], %g1 4000c144: c2 22 20 04 st %g1, [ %o0 + 4 ] loc->handlers = fs_info->memfile_handlers; break; } return 0; } 4000c148: 81 c3 e0 08 retl 4000c14c: 90 10 20 00 clr %o0 break; case IMFS_LINEAR_FILE: loc->handlers = fs_info->memfile_handlers; break; case IMFS_MEMORY_FILE: loc->handlers = fs_info->memfile_handlers; 4000c150: c2 01 20 04 ld [ %g4 + 4 ], %g1 <== NOT EXECUTED 4000c154: c2 22 20 04 st %g1, [ %o0 + 4 ] <== NOT EXECUTED break; } return 0; } 4000c158: 81 c3 e0 08 retl <== NOT EXECUTED 4000c15c: 90 10 20 00 clr %o0 <== NOT EXECUTED case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; break; case IMFS_SYM_LINK: case IMFS_HARD_LINK: loc->handlers = &IMFS_link_handlers; 4000c160: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 4000c164: 82 10 62 28 or %g1, 0x228, %g1 ! 4001a228 <== NOT EXECUTED 4000c168: c2 22 20 04 st %g1, [ %o0 + 4 ] <== NOT EXECUTED loc->handlers = fs_info->memfile_handlers; break; } return 0; } 4000c16c: 81 c3 e0 08 retl <== NOT EXECUTED 4000c170: 90 10 20 00 clr %o0 <== NOT EXECUTED switch( node->type ) { case IMFS_DIRECTORY: loc->handlers = fs_info->directory_handlers; break; case IMFS_DEVICE: loc->handlers = &IMFS_device_handlers; 4000c174: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000c178: 82 10 61 f0 or %g1, 0x1f0, %g1 ! 4001a1f0 4000c17c: c2 22 20 04 st %g1, [ %o0 + 4 ] loc->handlers = fs_info->memfile_handlers; break; } return 0; } 4000c180: 81 c3 e0 08 retl 4000c184: 90 10 20 00 clr %o0 40018050 : int IMFS_chown( rtems_filesystem_location_info_t *pathloc, /* IN */ uid_t owner, /* IN */ gid_t group /* IN */ ) { 40018050: 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; 40018054: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED #endif jnode->st_uid = owner; jnode->st_gid = group; IMFS_update_ctime( jnode ); 40018058: 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; 4001805c: f2 34 20 38 sth %i1, [ %l0 + 0x38 ] <== NOT EXECUTED jnode->st_gid = group; 40018060: f4 34 20 3a sth %i2, [ %l0 + 0x3a ] <== NOT EXECUTED IMFS_update_ctime( jnode ); 40018064: 7f ff b8 53 call 400061b0 <== NOT EXECUTED 40018068: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001806c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40018070: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED return 0; } 40018074: 81 c7 e0 08 ret <== NOT EXECUTED 40018078: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000e954 : IMFS_jnode_types_t type, char *name, mode_t mode, IMFS_types_union *info ) { 4000e954: 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 ) 4000e958: a6 96 20 00 orcc %i0, 0, %l3 4000e95c: 02 80 00 03 be 4000e968 4000e960: a4 10 20 00 clr %l2 parent = parent_loc->node_access; 4000e964: e4 04 c0 00 ld [ %l3 ], %l2 /* * Allocate an IMFS jnode */ node = calloc( 1, sizeof( IMFS_jnode_t ) ); 4000e968: 90 10 20 01 mov 1, %o0 4000e96c: 92 10 20 5c mov 0x5c, %o1 4000e970: 7f ff d3 6c call 40003720 4000e974: b0 10 20 00 clr %i0 if ( !node ) 4000e978: a2 92 20 00 orcc %o0, 0, %l1 4000e97c: 02 80 00 22 be 4000ea04 4000e980: 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 ); 4000e984: 92 10 00 1a mov %i2, %o1 4000e988: 94 10 20 20 mov 0x20, %o2 /* * Fill in the basic information */ node->st_nlink = 1; 4000e98c: c2 34 60 30 sth %g1, [ %l1 + 0x30 ] node->type = type; 4000e990: f2 24 60 48 st %i1, [ %l1 + 0x48 ] strncpy( node->name, name, IMFS_NAME_MAX ); 4000e994: 40 00 07 92 call 400107dc 4000e998: 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; 4000e99c: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000e9a0: c4 00 62 60 ld [ %g1 + 0x260 ], %g2 ! 4001a260 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000e9a4: 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; 4000e9a8: c2 10 a0 24 lduh [ %g2 + 0x24 ], %g1 /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000e9ac: 92 10 20 00 clr %o1 /* * Fill in the mode and permission information for the jnode structure. */ node->st_mode = mode & ~rtems_filesystem_umask; 4000e9b0: 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; 4000e9b4: 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; 4000e9b8: c2 34 60 2e sth %g1, [ %l1 + 0x2e ] /* * Now set all the times. */ gettimeofday( &tv, 0 ); 4000e9bc: 7f ff f9 f7 call 4000d198 4000e9c0: c0 34 60 3a clrh [ %l1 + 0x3a ] node->stat_atime = (time_t) tv.tv_sec; 4000e9c4: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* * Allocate an IMFS jnode */ node = calloc( 1, sizeof( IMFS_jnode_t ) ); 4000e9c8: b0 10 00 11 mov %l1, %i0 gettimeofday( &tv, 0 ); node->stat_atime = (time_t) tv.tv_sec; node->stat_mtime = (time_t) tv.tv_sec; node->stat_ctime = (time_t) tv.tv_sec; 4000e9cc: c2 24 60 44 st %g1, [ %l1 + 0x44 ] * Now set all the times. */ gettimeofday( &tv, 0 ); node->stat_atime = (time_t) tv.tv_sec; 4000e9d0: c2 24 60 3c st %g1, [ %l1 + 0x3c ] /* * Set the type specific information */ switch (type) { 4000e9d4: 80 a6 60 06 cmp %i1, 6 4000e9d8: 08 80 00 0d bleu 4000ea0c 4000e9dc: c2 24 60 40 st %g1, [ %l1 + 0x40 ] node->info.file.doubly_indirect = 0; node->info.file.triply_indirect = 0; break; default: assert(0); 4000e9e0: 11 10 00 65 sethi %hi(0x40019400), %o0 <== NOT EXECUTED 4000e9e4: 15 10 00 63 sethi %hi(0x40018c00), %o2 <== NOT EXECUTED 4000e9e8: 90 12 20 d8 or %o0, 0xd8, %o0 <== NOT EXECUTED 4000e9ec: 94 12 a3 58 or %o2, 0x358, %o2 <== NOT EXECUTED 4000e9f0: 7f ff d1 b2 call 400030b8 <__assert> <== NOT EXECUTED 4000e9f4: 92 10 20 77 mov 0x77, %o1 <== NOT EXECUTED /* * If this node has a parent, then put it in that directory list. */ if ( parent ) { 4000e9f8: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 4000e9fc: 12 80 00 13 bne 4000ea48 <== NOT EXECUTED 4000ea00: 90 04 a0 4c add %l2, 0x4c, %o0 <== NOT EXECUTED node->st_ino = ++fs_info->ino_count; } return node; } 4000ea04: 81 c7 e0 08 ret 4000ea08: 81 e8 00 00 restore /* * Set the type specific information */ switch (type) { 4000ea0c: 83 2e 60 02 sll %i1, 2, %g1 4000ea10: 05 10 00 3a sethi %hi(0x4000e800), %g2 4000ea14: 84 10 a1 38 or %g2, 0x138, %g2 ! 4000e938 4000ea18: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000ea1c: 81 c0 c0 00 jmp %g3 4000ea20: 01 00 00 00 nop node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; break; case IMFS_LINEAR_FILE: node->info.linearfile.size = 0; 4000ea24: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.linearfile.direct = 0; 4000ea28: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED case IMFS_MEMORY_FILE: node->info.file.size = 0; 4000ea2c: c0 24 60 4c clr [ %l1 + 0x4c ] <== NOT EXECUTED node->info.file.indirect = 0; 4000ea30: c0 24 60 50 clr [ %l1 + 0x50 ] <== NOT EXECUTED node->info.file.doubly_indirect = 0; 4000ea34: c0 24 60 54 clr [ %l1 + 0x54 ] <== NOT EXECUTED node->info.file.triply_indirect = 0; 4000ea38: c0 24 60 58 clr [ %l1 + 0x58 ] <== NOT EXECUTED /* * If this node has a parent, then put it in that directory list. */ if ( parent ) { 4000ea3c: 80 a4 a0 00 cmp %l2, 0 4000ea40: 02 bf ff f1 be 4000ea04 4000ea44: 90 04 a0 4c add %l2, 0x4c, %o0 Chain_Append( &parent->info.directory.Entries, &node->Node ); 4000ea48: 7f ff e4 fe call 40007e40 <_Chain_Append> 4000ea4c: 92 10 00 11 mov %l1, %o1 node->Parent = parent; fs_info = parent_loc->mt_entry->fs_info; 4000ea50: 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; 4000ea54: e4 24 60 08 st %l2, [ %l1 + 8 ] fs_info = parent_loc->mt_entry->fs_info; 4000ea58: c6 00 60 2c ld [ %g1 + 0x2c ], %g3 node->st_ino = ++fs_info->ino_count; 4000ea5c: c4 00 c0 00 ld [ %g3 ], %g2 4000ea60: 84 00 a0 01 inc %g2 4000ea64: c4 20 c0 00 st %g2, [ %g3 ] 4000ea68: c4 24 60 34 st %g2, [ %l1 + 0x34 ] } return node; } 4000ea6c: 81 c7 e0 08 ret 4000ea70: 81 e8 00 00 restore case IMFS_HARD_LINK: node->info.hard_link.link_node = info->hard_link.link_node; break; case IMFS_SYM_LINK: sym_name = calloc( 1, strlen( info->sym_link.name ) + 1 ); 4000ea74: 40 00 06 f0 call 40010634 <== NOT EXECUTED 4000ea78: d0 07 00 00 ld [ %i4 ], %o0 <== NOT EXECUTED 4000ea7c: 92 02 20 01 add %o0, 1, %o1 <== NOT EXECUTED 4000ea80: 7f ff d3 28 call 40003720 <== NOT EXECUTED 4000ea84: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED strcpy( sym_name, info->sym_link.name ); 4000ea88: d2 07 00 00 ld [ %i4 ], %o1 <== NOT EXECUTED 4000ea8c: 40 00 06 ca call 400105b4 <== NOT EXECUTED 4000ea90: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED node->info.sym_link.name = sym_name; 4000ea94: 10 bf ff ea b 4000ea3c <== NOT EXECUTED 4000ea98: e0 24 60 4c st %l0, [ %l1 + 0x4c ] <== NOT EXECUTED case IMFS_DIRECTORY: Chain_Initialize_empty(&node->info.directory.Entries); break; case IMFS_HARD_LINK: node->info.hard_link.link_node = info->hard_link.link_node; 4000ea9c: c2 07 00 00 ld [ %i4 ], %g1 <== NOT EXECUTED 4000eaa0: 10 bf ff e7 b 4000ea3c <== NOT EXECUTED 4000eaa4: c2 24 60 4c st %g1, [ %l1 + 0x4c ] <== NOT EXECUTED node->info.sym_link.name = sym_name; break; case IMFS_DEVICE: node->info.device.major = info->device.major; node->info.device.minor = info->device.minor; 4000eaa8: 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; 4000eaac: c4 07 00 00 ld [ %i4 ], %g2 node->info.device.minor = info->device.minor; 4000eab0: 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; 4000eab4: 10 bf ff e2 b 4000ea3c 4000eab8: c4 24 60 4c st %g2, [ %l1 + 0x4c ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000eabc: 82 04 60 50 add %l1, 0x50, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000eac0: 84 04 60 4c add %l1, 0x4c, %g2 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4000eac4: 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); 4000eac8: c2 24 60 4c st %g1, [ %l1 + 0x4c ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000eacc: 10 bf ff dc b 4000ea3c 4000ead0: c4 24 60 54 st %g2, [ %l1 + 0x54 ] 4000c210 : int IMFS_eval_path( const char *pathname, /* IN */ int flags, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000c210: 9d e3 bf 70 save %sp, -144, %sp /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000c214: e4 06 80 00 ld [ %i2 ], %l2 4000c218: a8 10 20 00 clr %l4 4000c21c: aa 07 bf d3 add %fp, -45, %l5 4000c220: ac 07 bf f4 add %fp, -12, %l6 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000c224: 2f 10 00 68 sethi %hi(0x4001a000), %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 ); 4000c228: 90 06 00 14 add %i0, %l4, %o0 4000c22c: 92 10 00 15 mov %l5, %o1 4000c230: 40 00 01 f5 call 4000ca04 4000c234: 94 10 00 16 mov %l6, %o2 i += len; if ( !pathloc->node_access ) 4000c238: e0 06 80 00 ld [ %i2 ], %l0 * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { type = IMFS_get_token( &pathname[i], token, &len ); 4000c23c: a2 10 00 08 mov %o0, %l1 i += len; if ( !pathloc->node_access ) 4000c240: 80 a4 20 00 cmp %l0, 0 4000c244: 02 80 00 4d be 4000c378 4000c248: 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 ) 4000c24c: 80 a2 20 00 cmp %o0, 0 4000c250: 12 80 00 11 bne 4000c294 4000c254: a8 05 00 13 add %l4, %l3, %l4 * new fs root node and let let the mounted filesystem set the handlers. * * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { 4000c258: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000c25c: 80 a0 60 01 cmp %g1, 1 4000c260: 22 80 00 55 be,a 4000c3b4 4000c264: c4 04 20 58 ld [ %l0 + 0x58 ], %g2 return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); } else { result = IMFS_Set_handlers( pathloc ); } } else { result = IMFS_Set_handlers( pathloc ); 4000c268: 7f ff ff aa call 4000c110 4000c26c: 90 10 00 1a mov %i2, %o0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 4000c270: 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 ); 4000c274: a0 10 00 08 mov %o0, %l0 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) 4000c278: 7f ff ff c4 call 4000c188 4000c27c: 90 10 00 1a mov %i2, %o0 4000c280: 80 a2 20 00 cmp %o0, 0 4000c284: 02 80 00 47 be 4000c3a0 4000c288: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c28c: 81 c7 e0 08 ret 4000c290: 91 e8 00 10 restore %g0, %l0, %o0 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) 4000c294: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 4000c298: 80 a0 60 01 cmp %g1, 1 4000c29c: 02 80 00 3c be 4000c38c 4000c2a0: 90 10 00 1a mov %i2, %o0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000c2a4: 80 a4 60 03 cmp %l1, 3 <== NOT EXECUTED 4000c2a8: 02 80 00 21 be 4000c32c 4000c2ac: a4 10 00 10 mov %l0, %l2 4000c2b0: 80 a4 60 04 cmp %l1, 4 4000c2b4: 02 80 00 18 be 4000c314 4000c2b8: 80 a4 60 02 cmp %l1, 2 4000c2bc: 02 80 00 06 be 4000c2d4 4000c2c0: 80 a4 60 04 cmp %l1, 4 /* * Evaluate all tokens until we are done or an error occurs. */ while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) { 4000c2c4: 12 bf ff da bne 4000c22c 4000c2c8: 90 06 00 14 add %i0, %l4, %o0 * new fs root node and let let the mounted filesystem set the handlers. * * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { 4000c2cc: 10 bf ff e4 b 4000c25c <== NOT EXECUTED 4000c2d0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000c2d4: c2 05 e2 60 ld [ %l7 + 0x260 ], %g1 <== NOT EXECUTED 4000c2d8: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 <== NOT EXECUTED 4000c2dc: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 4000c2e0: 02 bf ff d3 be 4000c22c <== NOT EXECUTED 4000c2e4: 90 06 00 14 add %i0, %l4, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == 4000c2e8: c4 06 a0 0c ld [ %i2 + 0xc ], %g2 <== NOT EXECUTED 4000c2ec: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 4000c2f0: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 4000c2f4: 22 80 00 60 be,a 4000c474 <== NOT EXECUTED 4000c2f8: c8 00 a0 10 ld [ %g2 + 0x10 ], %g4 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); } } else { if ( !node->Parent ) 4000c2fc: e4 04 20 08 ld [ %l0 + 8 ], %l2 <== NOT EXECUTED 4000c300: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 4000c304: 02 80 00 49 be 4000c428 <== NOT EXECUTED 4000c308: 01 00 00 00 nop <== NOT EXECUTED /* * Set the node access to the point we have found. */ pathloc->node_access = node; 4000c30c: 10 bf ff c8 b 4000c22c <== NOT EXECUTED 4000c310: e4 26 80 00 st %l2, [ %i2 ] <== NOT EXECUTED case IMFS_NO_MORE_PATH: case IMFS_CURRENT_DIR: break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 4000c314: 40 00 0b ea call 4000f2bc <__errno> <== NOT EXECUTED 4000c318: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c31c: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED 4000c320: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c324: 81 c7 e0 08 ret <== NOT EXECUTED 4000c328: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED case IMFS_NAME: /* * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { 4000c32c: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 4000c330: 80 a0 60 03 cmp %g1, 3 4000c334: 02 80 00 34 be 4000c404 4000c338: 80 a0 60 04 cmp %g1, 4 node = pathloc->node_access; if ( !node ) rtems_set_errno_and_return_minus_one( ENOTDIR ); } else if ( node->type == IMFS_SYM_LINK ) { 4000c33c: 02 80 00 53 be 4000c488 4000c340: 90 10 00 1a mov %i2, %o0 /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 4000c344: 80 a0 60 01 cmp %g1, 1 4000c348: 12 80 00 3c bne 4000c438 4000c34c: 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 ) { 4000c350: c6 04 a0 58 ld [ %l2 + 0x58 ], %g3 4000c354: 80 a0 e0 00 cmp %g3, 0 4000c358: 32 80 00 3d bne,a 4000c44c 4000c35c: c8 00 e0 20 ld [ %g3 + 0x20 ], %g4 <== NOT EXECUTED /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); 4000c360: 90 10 00 12 mov %l2, %o0 4000c364: 40 00 01 76 call 4000c93c 4000c368: 92 10 00 15 mov %l5, %o1 if ( !node ) 4000c36c: a4 92 20 00 orcc %o0, 0, %l2 4000c370: 32 bf ff ae bne,a 4000c228 4000c374: e4 26 80 00 st %l2, [ %i2 ] rtems_set_errno_and_return_minus_one( ENOENT ); 4000c378: 40 00 0b d1 call 4000f2bc <__errno> 4000c37c: a0 10 3f ff mov -1, %l0 4000c380: 82 10 20 02 mov 2, %g1 4000c384: 10 bf ff c2 b 4000c28c 4000c388: c2 22 00 00 st %g1, [ %o0 ] /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) 4000c38c: 7f ff ff 7f call 4000c188 4000c390: 92 10 20 01 mov 1, %o1 4000c394: 80 a2 20 00 cmp %o0, 0 4000c398: 12 bf ff c4 bne 4000c2a8 4000c39c: 80 a4 60 03 cmp %l1, 3 /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); 4000c3a0: 40 00 0b c7 call 4000f2bc <__errno> <== NOT EXECUTED 4000c3a4: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c3a8: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000c3ac: 10 bf ff b8 b 4000c28c <== NOT EXECUTED 4000c3b0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { 4000c3b4: 80 a0 a0 00 cmp %g2, 0 4000c3b8: 02 bf ff ac be 4000c268 4000c3bc: 01 00 00 00 nop newloc = node->info.directory.mt_fs->mt_fs_root; 4000c3c0: c8 00 a0 20 ld [ %g2 + 0x20 ], %g4 <== NOT EXECUTED *pathloc = newloc; 4000c3c4: c6 00 a0 24 ld [ %g2 + 0x24 ], %g3 <== NOT EXECUTED * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c3c8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000c3cc: da 01 00 00 ld [ %g4 ], %o5 <== NOT EXECUTED * NOTE: The behavior of stat() on a mount point appears to be questionable. */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c3d0: c4 00 a0 18 ld [ %g2 + 0x18 ], %g2 <== NOT EXECUTED *pathloc = newloc; 4000c3d4: c6 26 a0 0c st %g3, [ %i2 + 0xc ] <== NOT EXECUTED 4000c3d8: c2 26 a0 04 st %g1, [ %i2 + 4 ] <== NOT EXECUTED 4000c3dc: c4 26 80 00 st %g2, [ %i2 ] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000c3e0: 90 25 00 13 sub %l4, %l3, %o0 <== NOT EXECUTED 4000c3e4: 90 02 00 18 add %o0, %i0, %o0 <== NOT EXECUTED */ if ( node->type == IMFS_DIRECTORY ) { if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c3e8: c8 26 a0 08 st %g4, [ %i2 + 8 ] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000c3ec: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000c3f0: 9f c3 40 00 call %o5 <== NOT EXECUTED 4000c3f4: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4000c3f8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c3fc: 81 c7 e0 08 ret <== NOT EXECUTED 4000c400: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * If we are at a link follow it. */ if ( node->type == IMFS_HARD_LINK ) { IMFS_evaluate_hard_link( pathloc, 0 ); 4000c404: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000c408: 7f ff ff 67 call 4000c1a4 <== NOT EXECUTED 4000c40c: 92 10 20 00 clr %o1 <== NOT EXECUTED node = pathloc->node_access; 4000c410: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED if ( !node ) 4000c414: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c418: 02 80 00 08 be 4000c438 <== NOT EXECUTED 4000c41c: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); node = pathloc->node_access; 4000c420: 10 bf ff c9 b 4000c344 <== NOT EXECUTED 4000c424: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 <== NOT EXECUTED return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); } } else { if ( !node->Parent ) rtems_set_errno_and_return_minus_one( ENOENT ); 4000c428: 40 00 0b a5 call 4000f2bc <__errno> <== NOT EXECUTED 4000c42c: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c430: 10 bf ff 97 b 4000c28c <== NOT EXECUTED 4000c434: e2 22 00 00 st %l1, [ %o0 ] <== NOT EXECUTED /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 4000c438: 40 00 0b a1 call 4000f2bc <__errno> <== NOT EXECUTED 4000c43c: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c440: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 4000c444: 10 bf ff 92 b 4000c28c <== NOT EXECUTED 4000c448: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c44c: c2 00 e0 24 ld [ %g3 + 0x24 ], %g1 <== NOT EXECUTED * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c450: c4 00 e0 1c ld [ %g3 + 0x1c ], %g2 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000c454: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c458: c6 00 e0 18 ld [ %g3 + 0x18 ], %g3 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000c45c: da 01 00 00 ld [ %g4 ], %o5 <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c460: c2 26 a0 0c st %g1, [ %i2 + 0xc ] <== NOT EXECUTED return (*pathloc->ops->evalpath_h)( &pathname[i-len], flags, pathloc ); 4000c464: 90 25 00 08 sub %l4, %o0, %o0 <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c468: c4 26 a0 04 st %g2, [ %i2 + 4 ] <== NOT EXECUTED 4000c46c: 10 bf ff de b 4000c3e4 <== NOT EXECUTED 4000c470: c6 26 80 00 st %g3, [ %i2 ] <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; /* Throw out the .. in this case */ } else { newloc = pathloc->mt_entry->mt_point_node; *pathloc = newloc; 4000c474: c6 00 a0 14 ld [ %g2 + 0x14 ], %g3 <== NOT EXECUTED */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; /* Throw out the .. in this case */ } else { newloc = pathloc->mt_entry->mt_point_node; 4000c478: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),flags,pathloc); 4000c47c: da 01 00 00 ld [ %g4 ], %o5 <== NOT EXECUTED */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; /* Throw out the .. in this case */ } else { newloc = pathloc->mt_entry->mt_point_node; 4000c480: 10 bf ff d5 b 4000c3d4 <== NOT EXECUTED 4000c484: c4 00 a0 08 ld [ %g2 + 8 ], %g2 <== NOT EXECUTED if ( !node ) rtems_set_errno_and_return_minus_one( ENOTDIR ); } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_sym_link( pathloc, 0 ); 4000c488: 40 00 00 09 call 4000c4ac <== NOT EXECUTED 4000c48c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000c490: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED node = pathloc->node_access; if ( result == -1 ) 4000c494: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000c498: 02 bf ff 7d be 4000c28c <== NOT EXECUTED 4000c49c: 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; 4000c4a0: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 <== NOT EXECUTED 4000c4a4: 10 bf ff a8 b 4000c344 <== NOT EXECUTED 4000c4a8: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 4000c660 : int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 4000c660: 9d e3 bf 70 save %sp, -144, %sp /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000c664: e2 06 40 00 ld [ %i1 ], %l1 int IMFS_evaluate_for_make( const char *path, /* IN */ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ const char **name /* OUT */ ) { 4000c668: a8 10 00 18 mov %i0, %l4 4000c66c: aa 07 bf d3 add %fp, -45, %l5 /* * This was filled in by the caller and is valid in the * mount table. */ node = pathloc->node_access; 4000c670: b0 10 20 00 clr %i0 4000c674: ac 07 bf f4 add %fp, -12, %l6 case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000c678: 2f 10 00 68 sethi %hi(0x4001a000), %l7 * Evaluate all tokens until we are done or an error occurs. */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); 4000c67c: 90 05 00 18 add %l4, %i0, %o0 4000c680: 92 10 00 15 mov %l5, %o1 4000c684: 40 00 00 e0 call 4000ca04 4000c688: 94 10 00 16 mov %l6, %o2 i += len; if ( !pathloc->node_access ) 4000c68c: 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 ); 4000c690: a0 10 00 08 mov %o0, %l0 i += len; if ( !pathloc->node_access ) 4000c694: 80 a4 a0 00 cmp %l2, 0 4000c698: 02 80 00 5f be 4000c814 4000c69c: e6 07 bf f4 ld [ %fp + -12 ], %l3 /* * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) 4000c6a0: 80 a2 20 00 cmp %o0, 0 4000c6a4: 02 80 00 10 be 4000c6e4 4000c6a8: 01 00 00 00 nop if ( node->type == IMFS_DIRECTORY ) 4000c6ac: c2 04 60 48 ld [ %l1 + 0x48 ], %g1 4000c6b0: 80 a0 60 01 cmp %g1, 1 4000c6b4: 02 80 00 43 be 4000c7c0 4000c6b8: 90 10 00 19 mov %i1, %o0 */ while( !done ) { type = IMFS_get_token( &path[i], token, &len ); i += len; 4000c6bc: b0 06 00 13 add %i0, %l3, %i0 <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000c6c0: 80 a4 20 02 cmp %l0, 2 4000c6c4: 02 80 00 2c be 4000c774 4000c6c8: a2 10 00 12 mov %l2, %l1 4000c6cc: 80 a4 20 02 cmp %l0, 2 4000c6d0: 18 80 00 0b bgu 4000c6fc 4000c6d4: 80 a4 20 03 cmp %l0, 3 4000c6d8: 80 a4 20 00 cmp %l0, 0 4000c6dc: 12 bf ff e9 bne 4000c680 4000c6e0: 90 05 00 18 add %l4, %i0, %o0 pathloc->node_access = node; break; case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); 4000c6e4: 40 00 0a f6 call 4000f2bc <__errno> <== NOT EXECUTED 4000c6e8: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c6ec: 82 10 20 11 mov 0x11, %g1 <== NOT EXECUTED 4000c6f0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c6f4: 81 c7 e0 08 ret 4000c6f8: 91 e8 00 10 restore %g0, %l0, %o0 if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) rtems_set_errno_and_return_minus_one( EACCES ); node = pathloc->node_access; switch( type ) { 4000c6fc: 02 80 00 0a be 4000c724 4000c700: 80 a4 20 04 cmp %l0, 4 4000c704: 12 bf ff df bne 4000c680 <== NOT EXECUTED 4000c708: 90 05 00 18 add %l4, %i0, %o0 <== NOT EXECUTED case IMFS_NO_MORE_PATH: rtems_set_errno_and_return_minus_one( EEXIST ); break; case IMFS_INVALID_TOKEN: rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); 4000c70c: 40 00 0a ec call 4000f2bc <__errno> <== NOT EXECUTED 4000c710: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c714: 82 10 20 5b mov 0x5b, %g1 <== NOT EXECUTED 4000c718: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c71c: 81 c7 e0 08 ret <== NOT EXECUTED 4000c720: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED pathloc->node_access = node; break; case IMFS_NAME: if ( node->type == IMFS_HARD_LINK ) { 4000c724: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 4000c728: 80 a0 60 03 cmp %g1, 3 4000c72c: 02 80 00 78 be 4000c90c 4000c730: 80 a0 60 04 cmp %g1, 4 result = IMFS_evaluate_link( pathloc, 0 ); if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { 4000c734: 02 80 00 77 be 4000c910 4000c738: 90 10 00 19 mov %i1, %o0 /* * Only a directory can be decended into. */ if ( node->type != IMFS_DIRECTORY ) 4000c73c: 80 a0 60 01 cmp %g1, 1 4000c740: 12 80 00 54 bne 4000c890 4000c744: 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 ) { 4000c748: c6 04 60 58 ld [ %l1 + 0x58 ], %g3 4000c74c: 80 a0 e0 00 cmp %g3, 0 4000c750: 12 80 00 55 bne 4000c8a4 4000c754: 90 10 00 11 mov %l1, %o0 /* * Otherwise find the token name in the present location. */ node = IMFS_find_match_in_dir( node, token ); 4000c758: 40 00 00 79 call 4000c93c 4000c75c: 92 10 00 15 mov %l5, %o1 /* * If there is no node we have found the name of the node we * wish to create. */ if ( ! node ) 4000c760: a2 92 20 00 orcc %o0, 0, %l1 4000c764: 02 80 00 21 be 4000c7e8 4000c768: c2 07 bf f4 ld [ %fp + -12 ], %g1 done = TRUE; else pathloc->node_access = node; 4000c76c: 10 bf ff c4 b 4000c67c 4000c770: e2 26 40 00 st %l1, [ %i1 ] case IMFS_UP_DIR: /* * Am I at the root of all filesystems? (chroot'ed?) */ if ( pathloc->node_access == rtems_filesystem_root.node_access ) 4000c774: c2 05 e2 60 ld [ %l7 + 0x260 ], %g1 <== NOT EXECUTED 4000c778: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 <== NOT EXECUTED 4000c77c: 80 a4 80 02 cmp %l2, %g2 <== NOT EXECUTED 4000c780: 02 bf ff c0 be 4000c680 <== NOT EXECUTED 4000c784: 90 05 00 18 add %l4, %i0, %o0 <== NOT EXECUTED /* * Am I at the root of this mounted filesystem? */ if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){ 4000c788: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 4000c78c: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 4000c790: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000c794: 22 80 00 55 be,a 4000c8e8 <== NOT EXECUTED 4000c798: c8 00 a0 10 ld [ %g2 + 0x10 ], %g4 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); } } else { if ( !node->Parent ) 4000c79c: e2 04 a0 08 ld [ %l2 + 8 ], %l1 <== NOT EXECUTED 4000c7a0: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4000c7a4: 32 bf ff b7 bne,a 4000c680 <== NOT EXECUTED 4000c7a8: e2 26 40 00 st %l1, [ %i1 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000c7ac: 40 00 0a c4 call 4000f2bc <__errno> <== NOT EXECUTED 4000c7b0: 01 00 00 00 nop <== NOT EXECUTED 4000c7b4: e0 22 00 00 st %l0, [ %o0 ] <== NOT EXECUTED 4000c7b8: 10 bf ff cf b 4000c6f4 <== NOT EXECUTED 4000c7bc: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED * I cannot move out of this directory without execute permission. */ if ( type != IMFS_NO_MORE_PATH ) if ( node->type == IMFS_DIRECTORY ) if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) ) 4000c7c0: 7f ff fe 72 call 4000c188 4000c7c4: 92 10 20 01 mov 1, %o1 4000c7c8: 80 a2 20 00 cmp %o0, 0 4000c7cc: 32 bf ff bd bne,a 4000c6c0 4000c7d0: b0 06 00 13 add %i0, %l3, %i0 /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) rtems_set_errno_and_return_minus_one( EACCES ); 4000c7d4: 40 00 0a ba call 4000f2bc <__errno> <== NOT EXECUTED 4000c7d8: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c7dc: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000c7e0: 10 bf ff c5 b 4000c6f4 <== NOT EXECUTED 4000c7e4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED case IMFS_CURRENT_DIR: break; } } *name = &path[ i - len ]; 4000c7e8: 82 26 00 01 sub %i0, %g1, %g1 4000c7ec: 82 00 40 14 add %g1, %l4, %g1 4000c7f0: 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++) { 4000c7f4: c2 4d 00 18 ldsb [ %l4 + %i0 ], %g1 4000c7f8: 80 a0 60 00 cmp %g1, 0 4000c7fc: 02 80 00 17 be 4000c858 4000c800: 80 a0 60 2f cmp %g1, 0x2f if ( !IMFS_is_separator( path[ i ] ) ) 4000c804: 02 80 00 09 be 4000c828 <== NOT EXECUTED 4000c808: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 4000c80c: 02 80 00 08 be 4000c82c <== NOT EXECUTED 4000c810: 82 05 00 18 add %l4, %i0, %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOENT ); 4000c814: 40 00 0a aa call 4000f2bc <__errno> <== NOT EXECUTED 4000c818: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c81c: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 4000c820: 10 bf ff b5 b 4000c6f4 <== NOT EXECUTED 4000c824: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c828: 82 05 00 18 add %l4, %i0, %g1 <== NOT EXECUTED /* * We have evaluated the path as far as we can. * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { 4000c82c: c4 48 60 01 ldsb [ %g1 + 1 ], %g2 <== NOT EXECUTED 4000c830: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000c834: 02 80 00 09 be 4000c858 <== NOT EXECUTED 4000c838: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !IMFS_is_separator( path[ i ] ) ) 4000c83c: 80 a0 a0 2f cmp %g2, 0x2f <== NOT EXECUTED 4000c840: 02 bf ff fb be 4000c82c <== NOT EXECUTED 4000c844: 80 a0 a0 5c cmp %g2, 0x5c <== NOT EXECUTED 4000c848: 12 bf ff f3 bne 4000c814 <== NOT EXECUTED 4000c84c: 01 00 00 00 nop <== NOT EXECUTED /* * We have evaluated the path as far as we can. * Verify there is not any invalid stuff at the end of the name. */ for( ; path[i] != '\0'; i++) { 4000c850: 10 bf ff f8 b 4000c830 <== NOT EXECUTED 4000c854: c4 48 60 01 ldsb [ %g1 + 1 ], %g2 <== NOT EXECUTED /* * Verify we can execute and write to this directory. */ result = IMFS_Set_handlers( pathloc ); 4000c858: 7f ff fe 2e call 4000c110 4000c85c: 90 10 00 19 mov %i1, %o0 /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) 4000c860: c2 06 40 00 ld [ %i1 ], %g1 4000c864: c4 00 60 48 ld [ %g1 + 0x48 ], %g2 4000c868: 80 a0 a0 01 cmp %g2, 1 4000c86c: 12 80 00 09 bne 4000c890 4000c870: a0 10 00 08 mov %o0, %l0 /* * We must have Write and execute permission on the returned node. */ if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) ) 4000c874: 90 10 00 19 mov %i1, %o0 4000c878: 7f ff fe 44 call 4000c188 4000c87c: 92 10 20 03 mov 3, %o1 4000c880: 80 a2 20 00 cmp %o0, 0 4000c884: 12 bf ff 9c bne 4000c6f4 4000c888: 01 00 00 00 nop 4000c88c: 30 bf ff d2 b,a 4000c7d4 <== NOT EXECUTED /* * The returned node must be a directory */ node = pathloc->node_access; if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 4000c890: 40 00 0a 8b call 4000f2bc <__errno> <== NOT EXECUTED 4000c894: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c898: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 4000c89c: 10 bf ff 96 b 4000c6f4 <== NOT EXECUTED 4000c8a0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c8a4: c8 00 e0 20 ld [ %g3 + 0x20 ], %g4 <== NOT EXECUTED *pathloc = newloc; 4000c8a8: c2 00 e0 24 ld [ %g3 + 0x24 ], %g1 <== NOT EXECUTED * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c8ac: c4 00 e0 1c ld [ %g3 + 0x1c ], %g2 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c8b0: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED * If we are at a node that is a mount point. Set loc to the * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; 4000c8b4: c6 00 e0 18 ld [ %g3 + 0x18 ], %g3 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c8b8: da 01 20 04 ld [ %g4 + 4 ], %o5 <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c8bc: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c8c0: 90 26 00 08 sub %i0, %o0, %o0 <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c8c4: c4 26 60 04 st %g2, [ %i1 + 4 ] <== NOT EXECUTED 4000c8c8: c6 26 40 00 st %g3, [ %i1 ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c8cc: 90 02 00 14 add %o0, %l4, %o0 <== NOT EXECUTED * new fs root node and let them finish evaluating the path. */ if ( node->info.directory.mt_fs != NULL ) { newloc = node->info.directory.mt_fs->mt_fs_root; *pathloc = newloc; 4000c8d0: c8 26 60 08 st %g4, [ %i1 + 8 ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c8d4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000c8d8: 9f c3 40 00 call %o5 <== NOT EXECUTED 4000c8dc: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4000c8e0: 10 bf ff 85 b 4000c6f4 <== NOT EXECUTED 4000c8e4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; *pathloc = newloc; 4000c8e8: c6 00 a0 14 ld [ %g2 + 0x14 ], %g3 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; 4000c8ec: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED *pathloc = newloc; return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c8f0: da 01 20 04 ld [ %g4 + 4 ], %o5 <== NOT EXECUTED if ( pathloc->node_access == rtems_filesystem_root.node_access ) { break; } else { newloc = pathloc->mt_entry->mt_point_node; 4000c8f4: c4 00 a0 08 ld [ %g2 + 8 ], %g2 <== NOT EXECUTED *pathloc = newloc; 4000c8f8: c6 26 60 0c st %g3, [ %i1 + 0xc ] <== NOT EXECUTED 4000c8fc: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED 4000c900: c4 26 40 00 st %g2, [ %i1 ] <== NOT EXECUTED return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name ); 4000c904: 10 bf ff f2 b 4000c8cc <== NOT EXECUTED 4000c908: 90 26 00 13 sub %i0, %l3, %o0 <== NOT EXECUTED if ( result == -1 ) return -1; } else if ( node->type == IMFS_SYM_LINK ) { result = IMFS_evaluate_link( pathloc, 0 ); 4000c90c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000c910: 7f ff ff 22 call 4000c598 <== NOT EXECUTED 4000c914: 92 10 20 00 clr %o1 <== NOT EXECUTED if ( result == -1 ) 4000c918: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000c91c: 02 bf ff 76 be 4000c6f4 <== NOT EXECUTED 4000c920: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return -1; } node = pathloc->node_access; 4000c924: d0 06 40 00 ld [ %i1 ], %o0 <== NOT EXECUTED if ( !node ) 4000c928: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c92c: 02 bf ff d9 be 4000c890 <== NOT EXECUTED 4000c930: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED if ( result == -1 ) return -1; } node = pathloc->node_access; 4000c934: 10 bf ff 82 b 4000c73c <== NOT EXECUTED 4000c938: c2 02 20 48 ld [ %o0 + 0x48 ], %g1 <== NOT EXECUTED 4000c1a4 : int IMFS_evaluate_hard_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000c1a4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 4000c1a8: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_HARD_LINK ) 4000c1ac: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000c1b0: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000c1b4: 22 80 00 05 be,a 4000c1c8 <== NOT EXECUTED 4000c1b8: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 4000c1bc: 7f ff ee 6f call 40007b78 <== NOT EXECUTED 4000c1c0: 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; 4000c1c4: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED IMFS_Set_handlers( node ); 4000c1c8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c1cc: 7f ff ff d1 call 4000c110 <== NOT EXECUTED 4000c1d0: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 4000c1d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c1d8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000c1dc: 7f ff ff eb call 4000c188 <== NOT EXECUTED 4000c1e0: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000c1e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c1e8: 02 80 00 04 be 4000c1f8 <== NOT EXECUTED 4000c1ec: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c1f0: 81 c7 e0 08 ret <== NOT EXECUTED 4000c1f4: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); 4000c1f8: 40 00 0c 31 call 4000f2bc <__errno> <== NOT EXECUTED 4000c1fc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000c200: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000c204: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return result; } 4000c208: 81 c7 e0 08 ret <== NOT EXECUTED 4000c20c: 81 e8 00 00 restore <== NOT EXECUTED 4000c598 : int IMFS_evaluate_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000c598: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED 4000c59c: 10 80 00 07 b 4000c5b8 <== NOT EXECUTED 4000c5a0: 23 10 00 68 sethi %hi(0x4001a000), %l1 <== NOT EXECUTED */ if ( jnode->type == IMFS_HARD_LINK ) result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) 4000c5a4: 02 80 00 23 be 4000c630 <== NOT EXECUTED 4000c5a8: 82 00 7f fd add %g1, -3, %g1 <== NOT EXECUTED result = IMFS_evaluate_sym_link( node, flags ); } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); 4000c5ac: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000c5b0: 18 80 00 1c bgu 4000c620 <== NOT EXECUTED 4000c5b4: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 4000c5b8: c4 04 62 60 ld [ %l1 + 0x260 ], %g2 <== NOT EXECUTED { IMFS_jnode_t *jnode; int result = 0; do { jnode = node->node_access; 4000c5bc: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Increment and check the link counter. */ rtems_filesystem_link_counts ++; 4000c5c0: c2 10 a0 26 lduh [ %g2 + 0x26 ], %g1 <== NOT EXECUTED 4000c5c4: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000c5c8: c2 30 a0 26 sth %g1, [ %g2 + 0x26 ] <== NOT EXECUTED if ( rtems_filesystem_link_counts > MAXSYMLINK ) { 4000c5cc: 83 28 60 10 sll %g1, 0x10, %g1 <== NOT EXECUTED 4000c5d0: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 4000c5d4: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4000c5d8: 18 80 00 1b bgu 4000c644 <== NOT EXECUTED 4000c5dc: 01 00 00 00 nop <== NOT EXECUTED /* * Follow the Link node. */ if ( jnode->type == IMFS_HARD_LINK ) 4000c5e0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000c5e4: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000c5e8: 12 bf ff ef bne 4000c5a4 <== NOT EXECUTED 4000c5ec: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED result = IMFS_evaluate_hard_link( node, flags ); 4000c5f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c5f4: 7f ff fe ec call 4000c1a4 <== NOT EXECUTED 4000c5f8: 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 ) ) ); 4000c5fc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c600: 12 80 00 09 bne 4000c624 <== NOT EXECUTED 4000c604: c2 04 62 60 ld [ %l1 + 0x260 ], %g1 <== NOT EXECUTED 4000c608: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000c60c: 82 00 7f fd add %g1, -3, %g1 <== NOT EXECUTED 4000c610: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000c614: 08 bf ff ea bleu 4000c5bc <== NOT EXECUTED 4000c618: c4 04 62 60 ld [ %l1 + 0x260 ], %g2 <== NOT EXECUTED 4000c61c: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Clear link counter. */ rtems_filesystem_link_counts = 0; 4000c620: c2 04 62 60 ld [ %l1 + 0x260 ], %g1 <== NOT EXECUTED 4000c624: c0 30 60 26 clrh [ %g1 + 0x26 ] <== NOT EXECUTED return result; } 4000c628: 81 c7 e0 08 ret <== NOT EXECUTED 4000c62c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( jnode->type == IMFS_HARD_LINK ) result = IMFS_evaluate_hard_link( node, flags ); else if (jnode->type == IMFS_SYM_LINK ) result = IMFS_evaluate_sym_link( node, flags ); 4000c630: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c634: 7f ff ff 9e call 4000c4ac <== NOT EXECUTED 4000c638: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) || ( jnode->type == IMFS_HARD_LINK ) ) ); 4000c63c: 10 bf ff f1 b 4000c600 <== NOT EXECUTED 4000c640: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED */ rtems_filesystem_link_counts ++; if ( rtems_filesystem_link_counts > MAXSYMLINK ) { rtems_filesystem_link_counts = 0; rtems_set_errno_and_return_minus_one( ELOOP ); 4000c644: 40 00 0b 1e call 4000f2bc <__errno> <== NOT EXECUTED 4000c648: c0 30 a0 26 clrh [ %g2 + 0x26 ] <== NOT EXECUTED 4000c64c: 82 10 20 5c mov 0x5c, %g1 <== NOT EXECUTED 4000c650: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000c654: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED */ rtems_filesystem_link_counts = 0; return result; } 4000c658: 81 c7 e0 08 ret <== NOT EXECUTED 4000c65c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000c4ac : int IMFS_evaluate_sym_link( rtems_filesystem_location_info_t *node, /* IN/OUT */ int flags /* IN */ ) { 4000c4ac: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *jnode = node->node_access; 4000c4b0: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Check for things that should never happen. */ if ( jnode->type != IMFS_SYM_LINK ) 4000c4b4: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000c4b8: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000c4bc: 22 80 00 05 be,a 4000c4d0 <== NOT EXECUTED 4000c4c0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (0xABCD0000); 4000c4c4: 7f ff ed ad call 40007b78 <== NOT EXECUTED 4000c4c8: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED if ( !jnode->Parent ) 4000c4cc: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000c4d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c4d4: 02 80 00 28 be 4000c574 <== NOT EXECUTED 4000c4d8: 01 00 00 00 nop <== NOT EXECUTED /* * Move the node_access to either the symbolic links parent or * root depending on the symbolic links path. */ node->node_access = jnode->Parent; 4000c4dc: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED rtems_filesystem_get_sym_start_loc( 4000c4e0: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 4000c4e4: c2 48 80 00 ldsb [ %g2 ], %g1 <== NOT EXECUTED 4000c4e8: 80 a0 60 2f cmp %g1, 0x2f <== NOT EXECUTED 4000c4ec: 02 80 00 15 be 4000c540 <== NOT EXECUTED 4000c4f0: 80 a0 60 5c cmp %g1, 0x5c <== NOT EXECUTED 4000c4f4: 02 80 00 13 be 4000c540 <== NOT EXECUTED 4000c4f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000c4fc: 02 80 00 11 be 4000c540 <== NOT EXECUTED 4000c500: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Use eval path to evaluate the path of the symbolic link. */ result = IMFS_eval_path( 4000c504: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 4000c508: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 4000c50c: 7f ff ff 41 call 4000c210 <== NOT EXECUTED 4000c510: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000c514: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED &jnode->info.sym_link.name[i], flags, node ); IMFS_Set_handlers( node ); 4000c518: 7f ff fe fe call 4000c110 <== NOT EXECUTED 4000c51c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) 4000c520: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000c524: 7f ff ff 19 call 4000c188 <== NOT EXECUTED 4000c528: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000c52c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000c530: 02 80 00 15 be 4000c584 <== NOT EXECUTED 4000c534: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EACCES ); return result; } 4000c538: 81 c7 e0 08 ret <== NOT EXECUTED 4000c53c: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * root depending on the symbolic links path. */ node->node_access = jnode->Parent; rtems_filesystem_get_sym_start_loc( 4000c540: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 4000c544: c6 00 62 60 ld [ %g1 + 0x260 ], %g3 ! 4001a260 <== NOT EXECUTED 4000c548: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 4000c54c: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 <== NOT EXECUTED 4000c550: c2 26 00 00 st %g1, [ %i0 ] <== NOT EXECUTED 4000c554: c4 00 e0 18 ld [ %g3 + 0x18 ], %g2 <== NOT EXECUTED 4000c558: c4 26 20 04 st %g2, [ %i0 + 4 ] <== NOT EXECUTED 4000c55c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 4000c560: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED 4000c564: c4 00 e0 20 ld [ %g3 + 0x20 ], %g2 <== NOT EXECUTED 4000c568: c4 26 20 0c st %g2, [ %i0 + 0xc ] <== NOT EXECUTED 4000c56c: 10 bf ff e6 b 4000c504 <== NOT EXECUTED 4000c570: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED if ( jnode->type != IMFS_SYM_LINK ) rtems_fatal_error_occurred (0xABCD0000); if ( !jnode->Parent ) rtems_fatal_error_occurred( 0xBAD00000 ); 4000c574: 7f ff ed 81 call 40007b78 <== NOT EXECUTED 4000c578: 11 2e b4 00 sethi %hi(0xbad00000), %o0 <== NOT EXECUTED 4000c57c: 10 bf ff d8 b 4000c4dc <== NOT EXECUTED 4000c580: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED /* * Verify we have the correct permissions for this node. */ if ( !IMFS_evaluate_permission( node, flags ) ) rtems_set_errno_and_return_minus_one( EACCES ); 4000c584: 40 00 0b 4e call 4000f2bc <__errno> <== NOT EXECUTED 4000c588: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000c58c: 82 10 20 0d mov 0xd, %g1 <== NOT EXECUTED 4000c590: 10 bf ff ea b 4000c538 <== NOT EXECUTED 4000c594: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000ead4 : int IMFS_fchmod( rtems_filesystem_location_info_t *loc, mode_t mode ) { 4000ead4: 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 ) ) ) 4000ead8: 83 2e 60 10 sll %i1, 0x10, %g1 <== NOT EXECUTED 4000eadc: 83 30 60 10 srl %g1, 0x10, %g1 <== NOT EXECUTED 4000eae0: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 4000eae4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000eae8: 12 80 00 0e bne 4000eb20 <== NOT EXECUTED 4000eaec: f0 06 00 00 ld [ %i0 ], %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EPERM ); jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO); 4000eaf0: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 <== NOT EXECUTED jnode->st_mode |= mode; IMFS_update_ctime( jnode ); 4000eaf4: 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; 4000eaf8: 82 08 7e 00 and %g1, -512, %g1 <== NOT EXECUTED 4000eafc: 82 16 40 01 or %i1, %g1, %g1 <== NOT EXECUTED IMFS_update_ctime( jnode ); 4000eb00: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000eb04: 7f ff f9 a5 call 4000d198 <== NOT EXECUTED 4000eb08: c2 36 20 2e sth %g1, [ %i0 + 0x2e ] <== NOT EXECUTED 4000eb0c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000eb10: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000eb14: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED return 0; } 4000eb18: 81 c7 e0 08 ret <== NOT EXECUTED 4000eb1c: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED /* * Change only the RWX permissions on the jnode to mode. */ if ( mode & (~ (S_IRWXU | S_IRWXG | S_IRWXO ) ) ) rtems_set_errno_and_return_minus_one( EPERM ); 4000eb20: 40 00 01 e7 call 4000f2bc <__errno> <== NOT EXECUTED 4000eb24: 01 00 00 00 nop <== NOT EXECUTED 4000eb28: 82 10 20 01 mov 1, %g1 ! 1 <== NOT EXECUTED 4000eb2c: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 4000eb30: 10 bf ff fa b 4000eb18 <== NOT EXECUTED 4000eb34: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400243c8 : int cmd, rtems_libio_t *iop ) { return 0; } 400243c8: 81 c3 e0 08 retl <== NOT EXECUTED 400243cc: 90 10 20 00 clr %o0 <== NOT EXECUTED 400243d0 : int IMFS_fdatasync( rtems_libio_t *iop ) { return 0; } 400243d0: 81 c3 e0 08 retl <== NOT EXECUTED 400243d4: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000c93c : IMFS_jnode_t *IMFS_find_match_in_dir( IMFS_jnode_t *directory, char *name ) { 4000c93c: 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 ); 4000c940: 80 a6 20 00 cmp %i0, 0 4000c944: 02 80 00 18 be 4000c9a4 4000c948: 11 10 00 64 sethi %hi(0x40019000), %o0 if ( !name ) 4000c94c: 80 a6 60 00 cmp %i1, 0 4000c950: 12 80 00 04 bne 4000c960 4000c954: 80 a6 20 00 cmp %i0, 0 if ( !strcmp( name, the_jnode->name ) ) return the_jnode; } return 0; } 4000c958: 81 c7 e0 08 ret 4000c95c: 91 e8 20 00 restore %g0, 0, %o0 assert( directory ); if ( !name ) return 0; assert( name ); if ( !directory ) 4000c960: 02 80 00 0f be 4000c99c 4000c964: 90 10 00 19 mov %i1, %o0 /* * Check for "." and ".." */ if ( !strcmp( name, dotname ) ) 4000c968: 13 10 00 68 sethi %hi(0x4001a000), %o1 4000c96c: 40 00 0e e2 call 400104f4 4000c970: 92 12 61 e0 or %o1, 0x1e0, %o1 ! 4001a1e0 4000c974: 80 a2 20 00 cmp %o0, 0 4000c978: 02 80 00 09 be 4000c99c 4000c97c: 90 10 00 19 mov %i1, %o0 return directory; if ( !strcmp( name, dotdotname ) ) 4000c980: 13 10 00 68 sethi %hi(0x4001a000), %o1 4000c984: 40 00 0e dc call 400104f4 4000c988: 92 12 61 e8 or %o1, 0x1e8, %o1 ! 4001a1e8 4000c98c: 80 a2 20 00 cmp %o0, 0 4000c990: 32 80 00 0c bne,a 4000c9c0 4000c994: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 return directory->Parent; 4000c998: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4000c99c: 81 c7 e0 08 ret <== NOT EXECUTED 4000c9a0: 81 e8 00 00 restore <== NOT EXECUTED /* * Check for fatal errors. A NULL directory show a problem in the * the IMFS code. */ assert( directory ); 4000c9a4: 15 10 00 64 sethi %hi(0x40019000), %o2 <== NOT EXECUTED 4000c9a8: 90 12 23 90 or %o0, 0x390, %o0 <== NOT EXECUTED 4000c9ac: 94 12 a3 e0 or %o2, 0x3e0, %o2 <== NOT EXECUTED 4000c9b0: 7f ff d9 c2 call 400030b8 <__assert> <== NOT EXECUTED 4000c9b4: 92 10 20 2a mov 0x2a, %o1 <== NOT EXECUTED if ( !name ) 4000c9b8: 10 bf ff e6 b 4000c950 <== NOT EXECUTED 4000c9bc: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000c9c0: b0 06 20 50 add %i0, 0x50, %i0 return directory->Parent; the_chain = &directory->info.directory.Entries; for ( the_node = the_chain->first; !_Chain_Is_tail( the_chain, the_node ); 4000c9c4: 80 a4 00 18 cmp %l0, %i0 4000c9c8: 12 80 00 07 bne 4000c9e4 4000c9cc: 92 04 20 0c add %l0, 0xc, %o1 4000c9d0: 81 c7 e0 08 ret 4000c9d4: 91 e8 20 00 restore %g0, 0, %o0 4000c9d8: 80 a6 00 10 cmp %i0, %l0 4000c9dc: 02 bf ff df be 4000c958 4000c9e0: 92 04 20 0c add %l0, 0xc, %o1 the_node = the_node->next ) { the_jnode = (IMFS_jnode_t *) the_node; if ( !strcmp( name, the_jnode->name ) ) 4000c9e4: 40 00 0e c4 call 400104f4 4000c9e8: 90 10 00 19 mov %i1, %o0 4000c9ec: 80 a2 20 00 cmp %o0, 0 4000c9f0: 32 bf ff fa bne,a 4000c9d8 4000c9f4: e0 04 00 00 ld [ %l0 ], %l0 4000c9f8: b0 10 00 10 mov %l0, %i0 4000c9fc: 81 c7 e0 08 ret 4000ca00: 81 e8 00 00 restore 40018a60 : int IMFS_freenodinfo( rtems_filesystem_location_info_t *pathloc /* IN */ ) { return 0; } 40018a60: 81 c3 e0 08 retl <== NOT EXECUTED 40018a64: 90 10 20 00 clr %o0 <== NOT EXECUTED 40018a68 : ((IMFS_jnode_t *)( Chain_Head( jnode_get_control( jnode ) )->next)) int IMFS_fsunmount( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { 40018a68: 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; 40018a6c: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 40018a70: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 <== NOT EXECUTED 40018a74: c6 06 20 24 ld [ %i0 + 0x24 ], %g3 <== NOT EXECUTED /* * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access; 40018a78: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 <== NOT EXECUTED loc = temp_mt_entry->mt_fs_root; 40018a7c: c2 27 bf ec st %g1, [ %fp + -20 ] <== NOT EXECUTED 40018a80: c4 3f bf f0 std %g2, [ %fp + -16 ] <== NOT EXECUTED /* * Set this to null to indicate that it is being unmounted. */ temp_mt_entry->mt_fs_root.node_access = NULL; 40018a84: c0 26 20 18 clr [ %i0 + 0x18 ] <== NOT EXECUTED * Traverse tree that starts at the mt_fs_root and deallocate memory * associated memory space */ jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access; loc = temp_mt_entry->mt_fs_root; 40018a88: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED 40018a8c: a2 07 bf e8 add %fp, -24, %l1 <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; 40018a90: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED */ temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; 40018a94: f0 04 20 08 ld [ %l0 + 8 ], %i0 <== NOT EXECUTED loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); 40018a98: 7f ff fd e7 call 40018234 <== NOT EXECUTED 40018a9c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { 40018aa0: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40018aa4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40018aa8: 12 80 00 1c bne 40018b18 <== NOT EXECUTED 40018aac: 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 ) ) { 40018ab0: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 40018ab4: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40018ab8: 02 80 00 18 be 40018b18 <== NOT EXECUTED 40018abc: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED result = IMFS_unlink( &loc ); if (result != 0) return -1; jnode = next; } if ( jnode != NULL ) { 40018ac0: 02 80 00 1e be 40018b38 <== NOT EXECUTED 40018ac4: 01 00 00 00 nop <== NOT EXECUTED if ( jnode->type == IMFS_DIRECTORY ) { 40018ac8: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40018acc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40018ad0: 32 bf ff f1 bne,a 40018a94 <== NOT EXECUTED 40018ad4: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED if ( jnode_has_children( jnode ) ) 40018ad8: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40018adc: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 40018ae0: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40018ae4: 22 bf ff ec be,a 40018a94 <== NOT EXECUTED 40018ae8: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 40018aec: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40018af0: 02 80 00 12 be 40018b38 <== NOT EXECUTED 40018af4: a0 10 00 02 mov %g2, %l0 <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; IMFS_Set_handlers( &loc ); 40018af8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED temp_mt_entry->mt_fs_root.node_access = NULL; do { next = jnode->Parent; loc.node_access = (void *)jnode; 40018afc: e0 27 bf e8 st %l0, [ %fp + -24 ] <== NOT EXECUTED IMFS_Set_handlers( &loc ); 40018b00: 7f ff fd cd call 40018234 <== NOT EXECUTED 40018b04: f0 04 20 08 ld [ %l0 + 8 ], %i0 <== NOT EXECUTED if ( jnode->type != IMFS_DIRECTORY ) { 40018b08: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40018b0c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40018b10: 02 bf ff e8 be 40018ab0 <== NOT EXECUTED 40018b14: 84 04 20 50 add %l0, 0x50, %g2 <== NOT EXECUTED result = IMFS_unlink( &loc ); if (result != 0) return -1; jnode = next; } else if ( jnode_has_no_children( jnode ) ) { result = IMFS_unlink( &loc ); 40018b18: 7f ff b4 3b call 40005c04 <== NOT EXECUTED 40018b1c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if (result != 0) 40018b20: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018b24: 12 80 00 07 bne 40018b40 <== NOT EXECUTED 40018b28: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return -1; jnode = next; } if ( jnode != NULL ) { 40018b2c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40018b30: 32 bf ff e7 bne,a 40018acc <== NOT EXECUTED 40018b34: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED } } } while (jnode != NULL); return 0; } 40018b38: 81 c7 e0 08 ret <== NOT EXECUTED 40018b3c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED jnode = next; } if ( jnode != NULL ) { if ( jnode->type == IMFS_DIRECTORY ) { if ( jnode_has_children( jnode ) ) jnode = jnode_get_first_child( jnode ); 40018b40: 81 c7 e0 08 ret <== NOT EXECUTED 40018b44: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED 4000ca04 : IMFS_token_types IMFS_get_token( const char *path, char *token, int *token_len ) { 4000ca04: 9d e3 bf 98 save %sp, -104, %sp register char c; /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; 4000ca08: c4 0e 00 00 ldub [ %i0 ], %g2 while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000ca0c: 87 28 a0 18 sll %g2, 0x18, %g3 4000ca10: 83 38 e0 18 sra %g3, 0x18, %g1 4000ca14: 80 a0 60 2f cmp %g1, 0x2f 4000ca18: 02 80 00 28 be 4000cab8 4000ca1c: 80 a0 60 5c cmp %g1, 0x5c 4000ca20: 02 80 00 26 be 4000cab8 4000ca24: 80 a0 60 00 cmp %g1, 0 4000ca28: 02 80 00 41 be 4000cb2c 4000ca2c: 86 10 20 00 clr %g3 token[i] = c; 4000ca30: c4 2e 40 00 stb %g2, [ %i1 ] return IMFS_INVALID_TOKEN; if ( !IMFS_is_valid_name_char(c) ) type = IMFS_INVALID_TOKEN; c = path [++i]; 4000ca34: 86 00 e0 01 inc %g3 /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000ca38: c2 48 c0 18 ldsb [ %g3 + %i0 ], %g1 4000ca3c: 80 a0 60 2f cmp %g1, 0x2f 4000ca40: 02 80 00 07 be 4000ca5c 4000ca44: c4 08 c0 18 ldub [ %g3 + %i0 ], %g2 4000ca48: 80 a0 60 5c cmp %g1, 0x5c 4000ca4c: 02 80 00 04 be 4000ca5c 4000ca50: 80 a0 60 00 cmp %g1, 0 4000ca54: 12 80 00 12 bne 4000ca9c 4000ca58: 80 a0 e0 20 cmp %g3, 0x20 i++; type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { 4000ca5c: 82 00 c0 19 add %g3, %i1, %g1 4000ca60: c4 48 7f ff ldsb [ %g1 + -1 ], %g2 4000ca64: 80 a0 a0 00 cmp %g2, 0 4000ca68: 32 80 00 1c bne,a 4000cad8 4000ca6c: c0 2e 40 03 clrb [ %i1 + %g3 ] /* * Set token_len to the number of characters copied. */ *token_len = i; 4000ca70: c6 26 80 00 st %g3, [ %i2 ] <== NOT EXECUTED * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) 4000ca74: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000ca78: 13 10 00 64 sethi %hi(0x40019000), %o1 <== NOT EXECUTED 4000ca7c: b0 10 20 02 mov 2, %i0 <== NOT EXECUTED 4000ca80: 40 00 0e 9d call 400104f4 <== NOT EXECUTED 4000ca84: 92 12 61 90 or %o1, 0x190, %o1 <== NOT EXECUTED 4000ca88: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000ca8c: 12 80 00 1c bne 4000cafc <== NOT EXECUTED 4000ca90: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED else if ( strcmp( token, "." ) == 0 ) type = IMFS_CURRENT_DIR; } return type; } 4000ca94: 81 c7 e0 08 ret <== NOT EXECUTED 4000ca98: 81 e8 00 00 restore <== NOT EXECUTED /* * Copy a name into token. (Remember NULL is a token.) */ c = path[i]; while ( (!IMFS_is_separator(c)) && (i <= IMFS_NAME_MAX) ) { 4000ca9c: 14 bf ff f1 bg 4000ca60 4000caa0: 82 00 c0 19 add %g3, %i1, %g1 token[i] = c; if ( i == IMFS_NAME_MAX ) 4000caa4: 80 a0 e0 20 cmp %g3, 0x20 4000caa8: 12 bf ff e3 bne 4000ca34 4000caac: c4 28 c0 19 stb %g2, [ %g3 + %i1 ] 4000cab0: 81 c7 e0 08 ret <== NOT EXECUTED 4000cab4: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED /* * Copy a seperator into token. */ if ( i == 0 ) { token[i] = c; 4000cab8: c4 2e 40 00 stb %g2, [ %i1 ] if ( token[i] != '\0' ) { 4000cabc: 80 a0 e0 00 cmp %g3, 0 4000cac0: 82 10 20 01 mov 1, %g1 4000cac4: 02 80 00 16 be 4000cb1c 4000cac8: b0 10 20 01 mov 1, %i0 /* * Set token_len to the number of characters copied. */ *token_len = i; 4000cacc: c2 26 80 00 st %g1, [ %i2 ] 4000cad0: 81 c7 e0 08 ret 4000cad4: 81 e8 00 00 restore 4000cad8: c6 26 80 00 st %g3, [ %i2 ] * If we copied something that was not a seperator see if * it was a special name. */ if ( type == IMFS_NAME ) { if ( strcmp( token, "..") == 0 ) 4000cadc: 90 10 00 19 mov %i1, %o0 4000cae0: 13 10 00 64 sethi %hi(0x40019000), %o1 4000cae4: b0 10 20 02 mov 2, %i0 4000cae8: 40 00 0e 83 call 400104f4 4000caec: 92 12 61 90 or %o1, 0x190, %o1 4000caf0: 80 a2 20 00 cmp %o0, 0 4000caf4: 02 bf ff e8 be 4000ca94 4000caf8: 90 10 00 19 mov %i1, %o0 type = IMFS_UP_DIR; else if ( strcmp( token, "." ) == 0 ) 4000cafc: 13 10 00 64 sethi %hi(0x40019000), %o1 4000cb00: 40 00 0e 7d call 400104f4 4000cb04: 92 12 63 f0 or %o1, 0x3f0, %o1 ! 400193f0 <_CPU_Trap_slot_template+0x70> 4000cb08: 80 a0 00 08 cmp %g0, %o0 4000cb0c: 82 60 20 00 subx %g0, 0, %g1 4000cb10: b0 08 60 02 and %g1, 2, %i0 4000cb14: 81 c7 e0 08 ret 4000cb18: 91 ee 20 01 restore %i0, 1, %o0 type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { token[i] = '\0'; 4000cb1c: 82 10 20 00 clr %g1 <== NOT EXECUTED /* * Set token_len to the number of characters copied. */ *token_len = i; 4000cb20: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED type = IMFS_CURRENT_DIR; } else { type = IMFS_NO_MORE_PATH; } } else if (token[ i-1 ] != '\0') { token[i] = '\0'; 4000cb24: 81 c7 e0 08 ret <== NOT EXECUTED 4000cb28: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Copy a seperator into token. */ if ( i == 0 ) { token[i] = c; 4000cb2c: c4 2e 40 00 stb %g2, [ %i1 ] 4000cb30: 82 10 20 00 clr %g1 4000cb34: 10 bf ff e6 b 4000cacc 4000cb38: b0 10 20 00 clr %i0 40005850 : int IMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 40005850: 13 10 00 ee sethi %hi(0x4003b800), %o1 <== NOT EXECUTED 40005854: 15 10 00 f0 sethi %hi(0x4003c000), %o2 <== NOT EXECUTED 40005858: 17 10 00 f0 sethi %hi(0x4003c000), %o3 <== NOT EXECUTED 4000585c: 92 12 62 c0 or %o1, 0x2c0, %o1 <== NOT EXECUTED 40005860: 94 12 a0 e8 or %o2, 0xe8, %o2 <== NOT EXECUTED 40005864: 96 12 e0 78 or %o3, 0x78, %o3 <== NOT EXECUTED 40005868: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4000586c: 40 00 00 03 call 40005878 <== NOT EXECUTED 40005870: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40005874: 01 00 00 00 nop 4000cb3c : 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 ) { 4000cb3c: 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, 4000cb40: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000cb44: 84 10 20 00 clr %g2 4000cb48: c6 00 60 40 ld [ %g1 + 0x40 ], %g3 4000cb4c: 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) { 4000cb50: 80 a0 40 03 cmp %g1, %g3 4000cb54: 02 80 00 06 be 4000cb6c 4000cb58: 84 00 a0 01 inc %g2 int bit_mask; /* * check, whether requested bytes per block is valid */ for (bit_mask = 16; !is_valid && (bit_mask <= 512); 4000cb5c: 80 a0 a0 06 cmp %g2, 6 4000cb60: 12 bf ff fc bne 4000cb50 4000cb64: 83 28 60 01 sll %g1, 1, %g1 4000cb68: 86 10 20 80 mov 0x80, %g3 <== NOT EXECUTED bit_mask <<= 1) { if (bit_mask == requested_bytes_per_block) { is_valid = TRUE; } } *dest_bytes_per_block = ((is_valid) 4000cb6c: 03 10 00 6a sethi %hi(0x4001a800), %g1 * Create the root node * * NOTE: UNIX root is 755 and owned by root/root (0/0). */ temp_mt_entry->mt_fs_root.node_access = IMFS_create_node( 4000cb70: 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) 4000cb74: c6 20 63 74 st %g3, [ %g1 + 0x374 ] * 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( 4000cb78: 92 10 20 01 mov 1, %o1 4000cb7c: 90 10 20 00 clr %o0 4000cb80: 15 10 00 64 sethi %hi(0x40019000), %o2 4000cb84: 17 00 00 10 sethi %hi(0x4000), %o3 4000cb88: 94 12 a1 30 or %o2, 0x130, %o2 4000cb8c: 40 00 07 72 call 4000e954 4000cb90: 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; 4000cb94: 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( 4000cb98: 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; 4000cb9c: f2 26 20 20 st %i1, [ %i0 + 0x20 ] "", ( S_IFDIR | 0755 ), NULL ); temp_mt_entry->mt_fs_root.handlers = directory_handlers; 4000cba0: 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; 4000cba4: 13 10 00 68 sethi %hi(0x4001a000), %o1 4000cba8: 90 06 20 30 add %i0, 0x30, %o0 4000cbac: 40 00 0b 99 call 4000fa10 4000cbb0: 92 12 63 90 or %o1, 0x390, %o1 /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); 4000cbb4: 90 10 20 01 mov 1, %o0 4000cbb8: 7f ff da da call 40003720 4000cbbc: 92 10 20 0c mov 0xc, %o1 if ( !fs_info ){ 4000cbc0: 80 a2 20 00 cmp %o0, 0 4000cbc4: 02 80 00 0a be 4000cbec 4000cbc8: 82 10 20 01 mov 1, %g1 fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; 4000cbcc: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 /* * Set st_ino for the root to 1. */ fs_info->ino_count = 1; 4000cbd0: 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; 4000cbd4: 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; 4000cbd8: f6 22 20 08 st %i3, [ %o0 + 8 ] jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; 4000cbdc: 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; 4000cbe0: 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; } 4000cbe4: 81 c7 e0 08 ret 4000cbe8: 91 e8 20 00 restore %g0, 0, %o0 /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); if ( !fs_info ){ free(temp_mt_entry->mt_fs_root.node_access); 4000cbec: d0 06 20 18 ld [ %i0 + 0x18 ], %o0 <== NOT EXECUTED 4000cbf0: 7f ff da 05 call 40003404 <== NOT EXECUTED 4000cbf4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); 4000cbf8: 40 00 09 b1 call 4000f2bc <__errno> <== NOT EXECUTED 4000cbfc: 01 00 00 00 nop <== NOT EXECUTED 4000cc00: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 4000cc04: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000cc08: 81 c7 e0 08 ret <== NOT EXECUTED 4000cc0c: 81 e8 00 00 restore <== NOT EXECUTED 4000594c : int IMFS_link( rtems_filesystem_location_info_t *to_loc, /* IN */ rtems_filesystem_location_info_t *parent_loc, /* IN */ const char *token /* IN */ ) { 4000594c: 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; 40005950: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40005954: c2 27 bf dc st %g1, [ %fp + -36 ] <== NOT EXECUTED if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) 40005958: c4 10 60 30 lduh [ %g1 + 0x30 ], %g2 <== NOT EXECUTED 4000595c: 80 a0 a0 07 cmp %g2, 7 <== NOT EXECUTED 40005960: 18 80 00 1b bgu 400059cc <== NOT EXECUTED 40005964: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED /* * Remove any separators at the end of the string. */ IMFS_get_token( token, new_name, &i ); 40005968: a0 07 bf bb add %fp, -69, %l0 <== NOT EXECUTED 4000596c: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40005970: 7f ff ff 6a call 40005718 <== NOT EXECUTED 40005974: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 40005978: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000597c: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40005980: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40005984: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 40005988: 98 07 bf dc add %fp, -36, %o4 <== NOT EXECUTED 4000598c: 40 00 49 c3 call 40018098 <== NOT EXECUTED 40005990: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 40005994: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005998: 02 80 00 13 be 400059e4 <== NOT EXECUTED 4000599c: c4 07 bf dc ld [ %fp + -36 ], %g2 <== NOT EXECUTED /* * Increment the link count of the node being pointed to. */ info.hard_link.link_node->st_nlink++; IMFS_update_ctime( info.hard_link.link_node ); 400059a0: 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++; 400059a4: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 400059a8: 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++; 400059ac: 82 00 60 01 inc %g1 <== NOT EXECUTED IMFS_update_ctime( info.hard_link.link_node ); 400059b0: 40 00 02 00 call 400061b0 <== NOT EXECUTED 400059b4: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED 400059b8: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 400059bc: c2 07 bf dc ld [ %fp + -36 ], %g1 <== NOT EXECUTED 400059c0: c4 20 60 44 st %g2, [ %g1 + 0x44 ] <== NOT EXECUTED return 0; } 400059c4: 81 c7 e0 08 ret <== NOT EXECUTED 400059c8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED * Verify this node can be linked to. */ info.hard_link.link_node = to_loc->node_access; if ( info.hard_link.link_node->st_nlink >= LINK_MAX ) rtems_set_errno_and_return_minus_one( EMLINK ); 400059cc: 40 00 83 f9 call 400269b0 <__errno> <== NOT EXECUTED 400059d0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400059d4: 82 10 20 1f mov 0x1f, %g1 <== NOT EXECUTED 400059d8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400059dc: 81 c7 e0 08 ret <== NOT EXECUTED 400059e0: 81 e8 00 00 restore <== NOT EXECUTED ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); 400059e4: 40 00 83 f3 call 400269b0 <__errno> <== NOT EXECUTED 400059e8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400059ec: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 400059f0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400059f4: 81 c7 e0 08 ret <== NOT EXECUTED 400059f8: 81 e8 00 00 restore <== NOT EXECUTED 4001cdd8 : MEMFILE_STATIC int IMFS_memfile_addblock( IMFS_jnode_t *the_jnode, unsigned int block ) { 4001cdd8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED block_p memory; block_p *block_entry_ptr; assert( the_jnode ); 4001cddc: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001cde0: 02 80 00 26 be 4001ce78 <== NOT EXECUTED 4001cde4: 92 10 21 69 mov 0x169, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001cde8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001cdec: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001cdf0: 02 80 00 0b be 4001ce1c <== NOT EXECUTED 4001cdf4: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001cdf8: 92 10 21 6d mov 0x16d, %o1 <== NOT EXECUTED 4001cdfc: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001ce00: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001ce04: 7f ff a4 21 call 40005e88 <__assert> <== NOT EXECUTED 4001ce08: 94 12 a2 78 or %o2, 0x278, %o2 ! 40039278 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001ce0c: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001ce10: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001ce14: 12 80 00 13 bne 4001ce60 <== NOT EXECUTED 4001ce18: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 ); 4001ce1c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001ce20: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001ce24: 7f ff fe 54 call 4001c774 <== NOT EXECUTED 4001ce28: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED if ( *block_entry_ptr ) 4001ce2c: 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 ); 4001ce30: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( *block_entry_ptr ) 4001ce34: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ce38: 12 80 00 0e bne 4001ce70 <== NOT EXECUTED 4001ce3c: 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(); 4001ce40: 7f ff fe 40 call 4001c740 <== NOT EXECUTED 4001ce44: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED if ( !memory ) 4001ce48: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ce4c: 02 80 00 14 be 4001ce9c <== NOT EXECUTED 4001ce50: 01 00 00 00 nop <== NOT EXECUTED return 1; *block_entry_ptr = memory; 4001ce54: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED return 0; } 4001ce58: 81 c7 e0 08 ret <== NOT EXECUTED 4001ce5c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001ce60: 40 00 26 d4 call 400269b0 <__errno> <== NOT EXECUTED 4001ce64: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001ce68: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001ce6c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001ce70: 81 c7 e0 08 ret <== NOT EXECUTED 4001ce74: 81 e8 00 00 restore <== NOT EXECUTED ) { block_p memory; block_p *block_entry_ptr; assert( the_jnode ); 4001ce78: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001ce7c: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001ce80: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001ce84: 7f ff a4 01 call 40005e88 <__assert> <== NOT EXECUTED 4001ce88: 94 12 a2 68 or %o2, 0x268, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001ce8c: 40 00 26 c9 call 400269b0 <__errno> <== NOT EXECUTED 4001ce90: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001ce94: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001ce98: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001ce9c: 81 c7 e0 08 ret <== NOT EXECUTED 4001cea0: 81 e8 00 00 restore <== NOT EXECUTED 4001cea4 : MEMFILE_STATIC int IMFS_memfile_extend( IMFS_jnode_t *the_jnode, off_t new_length ) { 4001cea4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001cea8: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001ceac: 02 80 00 56 be 4001d004 <== NOT EXECUTED 4001ceb0: 92 10 21 31 mov 0x131, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001ceb4: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001ceb8: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001cebc: 02 80 00 0b be 4001cee8 <== NOT EXECUTED 4001cec0: 92 10 21 35 mov 0x135, %o1 <== NOT EXECUTED 4001cec4: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001cec8: 90 12 22 18 or %o0, 0x218, %o0 ! 40039218 <_CPU_Trap_slot_template+0xf38> <== NOT EXECUTED 4001cecc: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001ced0: 7f ff a3 ee call 40005e88 <__assert> <== NOT EXECUTED 4001ced4: 94 12 a2 78 or %o2, 0x278, %o2 ! 40039278 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001ced8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001cedc: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001cee0: 12 80 00 3d bne 4001cfd4 <== NOT EXECUTED 4001cee4: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) 4001cee8: 03 10 00 f5 sethi %hi(0x4003d400), %g1 <== NOT EXECUTED 4001ceec: e2 00 62 dc ld [ %g1 + 0x2dc ], %l1 ! 4003d6dc <== NOT EXECUTED 4001cef0: a1 34 60 02 srl %l1, 2, %l0 <== NOT EXECUTED 4001cef4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001cef8: 7f ff 98 5b call 40003064 <.umul> <== NOT EXECUTED 4001cefc: 90 04 20 01 add %l0, 1, %o0 <== NOT EXECUTED 4001cf00: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001cf04: 7f ff 98 58 call 40003064 <.umul> <== NOT EXECUTED 4001cf08: 90 02 20 01 inc %o0 <== NOT EXECUTED 4001cf0c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001cf10: 7f ff 98 55 call 40003064 <.umul> <== NOT EXECUTED 4001cf14: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 4001cf18: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 4001cf1c: 1a 80 00 34 bcc 4001cfec <== NOT EXECUTED 4001cf20: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); if ( new_length <= the_jnode->info.file.size ) 4001cf24: e0 06 20 4c ld [ %i0 + 0x4c ], %l0 <== NOT EXECUTED 4001cf28: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 4001cf2c: 04 80 00 24 ble 4001cfbc <== NOT EXECUTED 4001cf30: 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; 4001cf34: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001cf38: 40 00 63 1e call 40035bb0 <.div> <== NOT EXECUTED 4001cf3c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001cf40: 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; 4001cf44: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001cf48: 40 00 63 1a call 40035bb0 <.div> <== NOT EXECUTED 4001cf4c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED /* * Now allocate each of those blocks. */ for ( block=old_blocks ; block<=new_blocks ; block++ ) { 4001cf50: 80 a4 80 08 cmp %l2, %o0 <== NOT EXECUTED 4001cf54: 0a 80 00 1c bcs 4001cfc4 <== NOT EXECUTED 4001cf58: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED 4001cf5c: 10 80 00 05 b 4001cf70 <== NOT EXECUTED 4001cf60: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 4001cf64: 80 a4 80 10 cmp %l2, %l0 <== NOT EXECUTED 4001cf68: 2a 80 00 18 bcs,a 4001cfc8 <== NOT EXECUTED 4001cf6c: f2 26 20 4c st %i1, [ %i0 + 0x4c ] <== NOT EXECUTED if ( IMFS_memfile_addblock( the_jnode, block ) ) { 4001cf70: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001cf74: 7f ff ff 99 call 4001cdd8 <== NOT EXECUTED 4001cf78: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001cf7c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001cf80: 22 bf ff f9 be,a 4001cf64 <== NOT EXECUTED 4001cf84: a0 04 20 01 inc %l0 <== NOT EXECUTED for ( ; block>=old_blocks ; block-- ) { 4001cf88: 10 80 00 06 b 4001cfa0 <== NOT EXECUTED 4001cf8c: 80 a4 40 10 cmp %l1, %l0 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); 4001cf90: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001cf94: 7f ff fe ac call 4001ca44 <== NOT EXECUTED 4001cf98: 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-- ) { 4001cf9c: 80 a4 40 10 cmp %l1, %l0 <== NOT EXECUTED 4001cfa0: 08 bf ff fc bleu 4001cf90 <== NOT EXECUTED 4001cfa4: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED IMFS_memfile_remove_block( the_jnode, block ); } rtems_set_errno_and_return_minus_one( ENOSPC ); 4001cfa8: 40 00 26 82 call 400269b0 <__errno> <== NOT EXECUTED 4001cfac: 01 00 00 00 nop <== NOT EXECUTED 4001cfb0: 82 10 20 1c mov 0x1c, %g1 ! 1c <== NOT EXECUTED 4001cfb4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001cfb8: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED * Set the new length of the file. */ the_jnode->info.file.size = new_length; return 0; } 4001cfbc: 81 c7 e0 08 ret <== NOT EXECUTED 4001cfc0: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED /* * Set the new length of the file. */ the_jnode->info.file.size = new_length; 4001cfc4: f2 26 20 4c st %i1, [ %i0 + 0x4c ] <== NOT EXECUTED 4001cfc8: 82 10 20 00 clr %g1 <== NOT EXECUTED return 0; } 4001cfcc: 81 c7 e0 08 ret <== NOT EXECUTED 4001cfd0: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001cfd4: 40 00 26 77 call 400269b0 <__errno> <== NOT EXECUTED 4001cfd8: 01 00 00 00 nop <== NOT EXECUTED 4001cfdc: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001cfe0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001cfe4: 10 bf ff f6 b 4001cfbc <== NOT EXECUTED 4001cfe8: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001cfec: 40 00 26 71 call 400269b0 <__errno> <== NOT EXECUTED 4001cff0: 01 00 00 00 nop <== NOT EXECUTED 4001cff4: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001cff8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001cffc: 10 bf ff f0 b 4001cfbc <== NOT EXECUTED 4001d000: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001d004: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d008: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d00c: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d010: 7f ff a3 9e call 40005e88 <__assert> <== NOT EXECUTED 4001d014: 94 12 a2 68 or %o2, 0x268, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001d018: 40 00 26 66 call 400269b0 <__errno> <== NOT EXECUTED 4001d01c: 01 00 00 00 nop <== NOT EXECUTED 4001d020: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001d024: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001d028: 10 bf ff e5 b 4001cfbc <== NOT EXECUTED 4001d02c: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED 4001c774 : #endif IMFS_jnode_t *the_jnode, unsigned int block, int malloc_it ) { 4001c774: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001c778: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001c77c: 02 80 00 76 be 4001c954 <== NOT EXECUTED 4001c780: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED if ( !the_jnode ) return NULL; assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001c784: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001c788: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001c78c: 12 80 00 2f bne 4001c848 <== NOT EXECUTED 4001c790: 92 10 23 8a mov 0x38a, %o1 <== NOT EXECUTED /* * Is the block number in the simple indirect portion? */ if ( my_block <= LAST_INDIRECT ) { 4001c794: 03 10 00 f5 sethi %hi(0x4003d400), %g1 <== NOT EXECUTED 4001c798: c4 00 62 dc ld [ %g1 + 0x2dc ], %g2 ! 4003d6dc <== NOT EXECUTED 4001c79c: a3 30 a0 02 srl %g2, 2, %l1 <== NOT EXECUTED 4001c7a0: 82 04 7f ff add %l1, -1, %g1 <== NOT EXECUTED 4001c7a4: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001c7a8: 08 80 00 20 bleu 4001c828 <== NOT EXECUTED 4001c7ac: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED /* * Is the block number in the doubly indirect portion? */ if ( my_block <= LAST_DOUBLY_INDIRECT ) { 4001c7b0: 90 04 60 01 add %l1, 1, %o0 <== NOT EXECUTED 4001c7b4: 7f ff 9a 2c call 40003064 <.umul> <== NOT EXECUTED 4001c7b8: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001c7bc: 82 02 3f ff add %o0, -1, %g1 <== NOT EXECUTED 4001c7c0: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4001c7c4: 18 80 00 31 bgu 4001c888 <== NOT EXECUTED 4001c7c8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED #if 0 fprintf(stdout, "(d %d) ", block ); fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; 4001c7cc: a0 26 40 11 sub %i1, %l1, %l0 <== NOT EXECUTED singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001c7d0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001c7d4: 40 00 65 a1 call 40035e58 <.urem> <== NOT EXECUTED 4001c7d8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001c7dc: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED fflush(stdout); #endif my_block -= FIRST_DOUBLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001c7e0: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001c7e4: 40 00 64 f1 call 40035ba8 <.udiv> <== NOT EXECUTED 4001c7e8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 4001c7ec: 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; 4001c7f0: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { 4001c7f4: 02 80 00 4e be 4001c92c <== NOT EXECUTED 4001c7f8: e0 06 20 54 ld [ %i0 + 0x54 ], %l0 <== NOT EXECUTED if ( !p ) { 4001c7fc: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001c800: 02 80 00 63 be 4001c98c <== NOT EXECUTED 4001c804: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) return 0; info->doubly_indirect = p; } p1 = (block_p *)p[ doubly ]; 4001c808: a3 2c 60 02 sll %l1, 2, %l1 <== NOT EXECUTED 4001c80c: c2 04 40 10 ld [ %l1 + %l0 ], %g1 <== NOT EXECUTED if ( !p1 ) { 4001c810: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001c814: 02 80 00 65 be 4001c9a8 <== NOT EXECUTED 4001c818: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) return 0; p[ doubly ] = (block_p) p1; } return (block_p *)&p1[ singly ]; 4001c81c: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED 4001c820: 81 c7 e0 08 ret <== NOT EXECUTED 4001c824: 91 e8 40 08 restore %g1, %o0, %o0 <== NOT EXECUTED fprintf(stdout, "(s %d) ", block ); fflush(stdout); #endif p = info->indirect; if ( malloc_it ) { 4001c828: 02 80 00 12 be 4001c870 <== NOT EXECUTED 4001c82c: d0 06 20 50 ld [ %i0 + 0x50 ], %o0 <== NOT EXECUTED if ( !p ) { 4001c830: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c834: 02 80 00 4f be 4001c970 <== NOT EXECUTED 4001c838: 01 00 00 00 nop <== NOT EXECUTED p = memfile_alloc_block(); if ( !p ) return 0; info->indirect = p; } return &info->indirect[ my_block ]; 4001c83c: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED 4001c840: 81 c7 e0 08 ret <== NOT EXECUTED 4001c844: 91 e8 40 08 restore %g1, %o0, %o0 <== NOT EXECUTED assert( the_jnode ); if ( !the_jnode ) return NULL; assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001c848: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001c84c: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001c850: 7f ff a5 8e call 40005e88 <__assert> <== NOT EXECUTED 4001c854: 94 12 a2 78 or %o2, 0x278, %o2 ! 40039278 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001c858: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001c85c: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001c860: 02 bf ff ce be 4001c798 <== NOT EXECUTED 4001c864: 03 10 00 f5 sethi %hi(0x4003d400), %g1 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001c868: 81 c7 e0 08 ret <== NOT EXECUTED 4001c86c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED } if ( !p ) return 0; return &info->indirect[ my_block ]; 4001c870: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED info->indirect = p; } return &info->indirect[ my_block ]; } if ( !p ) 4001c874: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c878: 02 bf ff fc be 4001c868 <== NOT EXECUTED 4001c87c: b0 02 00 01 add %o0, %g1, %i0 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001c880: 81 c7 e0 08 ret <== NOT EXECUTED 4001c884: 81 e8 00 00 restore <== NOT EXECUTED #endif /* * Is the block number in the triply indirect portion? */ if ( my_block <= LAST_TRIPLY_INDIRECT ) { 4001c888: 90 02 20 01 inc %o0 <== NOT EXECUTED 4001c88c: 7f ff 99 f6 call 40003064 <.umul> <== NOT EXECUTED 4001c890: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001c894: 90 02 3f ff add %o0, -1, %o0 <== NOT EXECUTED 4001c898: 80 a6 40 08 cmp %i1, %o0 <== NOT EXECUTED 4001c89c: 18 bf ff f3 bgu 4001c868 <== NOT EXECUTED 4001c8a0: a0 26 40 10 sub %i1, %l0, %l0 <== NOT EXECUTED my_block -= FIRST_TRIPLY_INDIRECT; singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS; 4001c8a4: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001c8a8: 40 00 65 6c call 40035e58 <.urem> <== NOT EXECUTED 4001c8ac: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001c8b0: 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; 4001c8b4: a6 10 00 08 mov %o0, %l3 <== NOT EXECUTED doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS; 4001c8b8: 40 00 64 bc call 40035ba8 <.udiv> <== NOT EXECUTED 4001c8bc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS; 4001c8c0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001c8c4: 40 00 64 b9 call 40035ba8 <.udiv> <== NOT EXECUTED 4001c8c8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 4001c8cc: 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; 4001c8d0: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED doubly %= IMFS_MEMFILE_BLOCK_SLOTS; 4001c8d4: 40 00 65 61 call 40035e58 <.urem> <== NOT EXECUTED 4001c8d8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 4001c8dc: 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; 4001c8e0: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { 4001c8e4: 02 80 00 38 be 4001c9c4 <== NOT EXECUTED 4001c8e8: e0 06 20 58 ld [ %i0 + 0x58 ], %l0 <== NOT EXECUTED if ( !p ) { 4001c8ec: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001c8f0: 02 80 00 40 be 4001c9f0 <== NOT EXECUTED 4001c8f4: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) return 0; info->triply_indirect = p; } p1 = (block_p *) p[ triply ]; 4001c8f8: a5 2c a0 02 sll %l2, 2, %l2 <== NOT EXECUTED 4001c8fc: c2 04 80 10 ld [ %l2 + %l0 ], %g1 <== NOT EXECUTED if ( !p1 ) { 4001c900: a2 90 60 00 orcc %g1, 0, %l1 <== NOT EXECUTED 4001c904: 02 80 00 49 be 4001ca28 <== NOT EXECUTED 4001c908: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) return 0; p[ triply ] = (block_p) p1; } p2 = (block_p *)p1[ doubly ]; 4001c90c: a1 2e 60 02 sll %i1, 2, %l0 <== NOT EXECUTED 4001c910: c2 04 00 11 ld [ %l0 + %l1 ], %g1 <== NOT EXECUTED if ( !p2 ) { 4001c914: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001c918: 02 80 00 3d be 4001ca0c <== NOT EXECUTED 4001c91c: 01 00 00 00 nop <== NOT EXECUTED p2 = memfile_alloc_block(); if ( !p2 ) return 0; p1[ doubly ] = (block_p) p2; } return (block_p *)&p2[ singly ]; 4001c920: 83 2c e0 02 sll %l3, 2, %g1 <== NOT EXECUTED 4001c924: 81 c7 e0 08 ret <== NOT EXECUTED 4001c928: 91 e8 40 08 restore %g1, %o0, %o0 <== NOT EXECUTED } return (block_p *)&p1[ singly ]; } if ( !p ) 4001c92c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001c930: 02 bf ff ce be 4001c868 <== NOT EXECUTED 4001c934: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED return 0; p = (block_p *)p[ doubly ]; 4001c938: c4 04 00 01 ld [ %l0 + %g1 ], %g2 <== NOT EXECUTED #if 0 fprintf(stdout, "(d %d %d %d %d %p %p) ", block, my_block, doubly, singly, p, &p[singly] ); fflush(stdout); #endif return (block_p *)&p[ singly ]; 4001c93c: 87 2c a0 02 sll %l2, 2, %g3 <== NOT EXECUTED if ( !p ) return 0; p = (block_p *)p[ doubly ]; if ( !p ) 4001c940: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001c944: 02 bf ff c9 be 4001c868 <== NOT EXECUTED 4001c948: b0 00 c0 02 add %g3, %g2, %i0 <== NOT EXECUTED /* * This means the requested block number is out of range. */ return 0; } 4001c94c: 81 c7 e0 08 ret <== NOT EXECUTED 4001c950: 81 e8 00 00 restore <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001c954: 92 10 23 86 mov 0x386, %o1 <== NOT EXECUTED 4001c958: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001c95c: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001c960: 7f ff a5 4a call 40005e88 <__assert> <== NOT EXECUTED 4001c964: 94 12 a2 68 or %o2, 0x268, %o2 ! 40039268 <_CPU_Trap_slot_template+0xf88> <== NOT EXECUTED 4001c968: 81 c7 e0 08 ret <== NOT EXECUTED 4001c96c: 81 e8 00 00 restore <== NOT EXECUTED p = info->indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); 4001c970: 7f ff ff 74 call 4001c740 <== NOT EXECUTED 4001c974: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001c978: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c97c: 02 bf ff bb be 4001c868 <== NOT EXECUTED 4001c980: 01 00 00 00 nop <== NOT EXECUTED return 0; info->indirect = p; 4001c984: 10 bf ff ae b 4001c83c <== NOT EXECUTED 4001c988: d0 26 20 50 st %o0, [ %i0 + 0x50 ] <== NOT EXECUTED p = info->doubly_indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); 4001c98c: 7f ff ff 6d call 4001c740 <== NOT EXECUTED 4001c990: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001c994: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c998: 02 bf ff b4 be 4001c868 <== NOT EXECUTED 4001c99c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->doubly_indirect = p; 4001c9a0: 10 bf ff 9a b 4001c808 <== NOT EXECUTED 4001c9a4: d0 26 20 54 st %o0, [ %i0 + 0x54 ] <== NOT EXECUTED } p1 = (block_p *)p[ doubly ]; if ( !p1 ) { p1 = memfile_alloc_block(); 4001c9a8: 7f ff ff 66 call 4001c740 <== NOT EXECUTED 4001c9ac: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 4001c9b0: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001c9b4: 02 bf ff ad be 4001c868 <== NOT EXECUTED 4001c9b8: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p[ doubly ] = (block_p) p1; 4001c9bc: 10 bf ff 98 b 4001c81c <== NOT EXECUTED 4001c9c0: c2 24 40 10 st %g1, [ %l1 + %l0 ] <== NOT EXECUTED p1[ doubly ] = (block_p) p2; } return (block_p *)&p2[ singly ]; } if ( !p ) 4001c9c4: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001c9c8: 02 bf ff a8 be 4001c868 <== NOT EXECUTED 4001c9cc: 83 2c a0 02 sll %l2, 2, %g1 <== NOT EXECUTED #if 0 fprintf(stdout, "(t %d %d %d %d %d) ", block, my_block, triply, doubly, singly ); fflush(stdout); #endif p1 = (block_p *) p[ triply ]; 4001c9d0: d0 04 00 01 ld [ %l0 + %g1 ], %o0 <== NOT EXECUTED if ( !p1 ) 4001c9d4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c9d8: 02 bf ff a4 be 4001c868 <== NOT EXECUTED 4001c9dc: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED p2 = (block_p *)p1[ doubly ]; if ( !p ) return 0; return (block_p *)&p2[ singly ]; 4001c9e0: c6 02 00 01 ld [ %o0 + %g1 ], %g3 <== NOT EXECUTED 4001c9e4: 85 2c e0 02 sll %l3, 2, %g2 <== NOT EXECUTED 4001c9e8: 81 c7 e0 08 ret <== NOT EXECUTED 4001c9ec: 91 e8 80 03 restore %g2, %g3, %o0 <== NOT EXECUTED p = info->triply_indirect; if ( malloc_it ) { if ( !p ) { p = memfile_alloc_block(); 4001c9f0: 7f ff ff 54 call 4001c740 <== NOT EXECUTED 4001c9f4: 01 00 00 00 nop <== NOT EXECUTED if ( !p ) 4001c9f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c9fc: 02 bf ff 9b be 4001c868 <== NOT EXECUTED 4001ca00: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return 0; info->triply_indirect = p; 4001ca04: 10 bf ff bd b 4001c8f8 <== NOT EXECUTED 4001ca08: d0 26 20 58 st %o0, [ %i0 + 0x58 ] <== NOT EXECUTED p[ triply ] = (block_p) p1; } p2 = (block_p *)p1[ doubly ]; if ( !p2 ) { p2 = memfile_alloc_block(); 4001ca0c: 7f ff ff 4d call 4001c740 <== NOT EXECUTED 4001ca10: 01 00 00 00 nop <== NOT EXECUTED if ( !p2 ) 4001ca14: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001ca18: 02 bf ff 94 be 4001c868 <== NOT EXECUTED 4001ca1c: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 0; p1[ doubly ] = (block_p) p2; 4001ca20: 10 bf ff c0 b 4001c920 <== NOT EXECUTED 4001ca24: c2 24 00 11 st %g1, [ %l0 + %l1 ] <== NOT EXECUTED info->triply_indirect = p; } p1 = (block_p *) p[ triply ]; if ( !p1 ) { p1 = memfile_alloc_block(); 4001ca28: 7f ff ff 46 call 4001c740 <== NOT EXECUTED 4001ca2c: 01 00 00 00 nop <== NOT EXECUTED if ( !p1 ) 4001ca30: 82 92 20 00 orcc %o0, 0, %g1 <== NOT EXECUTED 4001ca34: 02 bf ff 8d be 4001c868 <== NOT EXECUTED 4001ca38: a2 10 00 01 mov %g1, %l1 <== NOT EXECUTED return 0; p[ triply ] = (block_p) p1; 4001ca3c: 10 bf ff b4 b 4001c90c <== NOT EXECUTED 4001ca40: c2 24 80 10 st %g1, [ %l2 + %l0 ] <== NOT EXECUTED 4001d498 : IMFS_jnode_t *the_jnode, off_t start, unsigned char *destination, unsigned int length ) { 4001d498: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001d49c: a4 96 20 00 orcc %i0, 0, %l2 <== NOT EXECUTED 4001d4a0: 02 80 00 ac be 4001d750 <== NOT EXECUTED 4001d4a4: 92 10 22 4a mov 0x24a, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE || 4001d4a8: c4 04 a0 48 ld [ %l2 + 0x48 ], %g2 <== NOT EXECUTED 4001d4ac: 82 00 bf fb add %g2, -5, %g1 <== NOT EXECUTED 4001d4b0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001d4b4: 08 80 00 0c bleu 4001d4e4 <== NOT EXECUTED 4001d4b8: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d4bc: 92 10 22 4f mov 0x24f, %o1 <== NOT EXECUTED 4001d4c0: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d4c4: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d4c8: 7f ff a2 70 call 40005e88 <__assert> <== NOT EXECUTED 4001d4cc: 94 12 a2 c8 or %o2, 0x2c8, %o2 ! 400392c8 <_CPU_Trap_slot_template+0xfe8> <== NOT EXECUTED the_jnode->type == IMFS_LINEAR_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE && 4001d4d0: c4 04 a0 48 ld [ %l2 + 0x48 ], %g2 <== NOT EXECUTED 4001d4d4: 82 00 bf fb add %g2, -5, %g1 <== NOT EXECUTED 4001d4d8: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001d4dc: 18 80 00 82 bgu 4001d6e4 <== NOT EXECUTED 4001d4e0: 01 00 00 00 nop <== NOT EXECUTED /* * Error checks on arguments */ assert( dest ); 4001d4e4: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001d4e8: 02 80 00 a5 be 4001d77c <== NOT EXECUTED 4001d4ec: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED /* * If there is nothing to read, then quick exit. */ my_length = length; if ( !my_length ) 4001d4f0: 02 80 00 92 be 4001d738 <== NOT EXECUTED 4001d4f4: 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) { 4001d4f8: 02 80 00 4e be 4001d630 <== NOT EXECUTED 4001d4fc: 82 06 c0 19 add %i3, %i1, %g1 <== NOT EXECUTED * If the last byte we are supposed to read is past the end of this * in memory file, then shorten the length to read. */ last_byte = start + length; if ( last_byte > the_jnode->info.file.size ) 4001d500: c4 04 a0 4c ld [ %l2 + 0x4c ], %g2 <== NOT EXECUTED 4001d504: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4001d508: 18 80 00 31 bgu 4001d5cc <== NOT EXECUTED 4001d50c: a2 10 00 1b mov %i3, %l1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d510: 27 10 00 f5 sethi %hi(0x4003d400), %l3 <== NOT EXECUTED 4001d514: f6 04 e2 dc ld [ %l3 + 0x2dc ], %i3 ! 4003d6dc <== NOT EXECUTED 4001d518: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001d51c: 40 00 62 51 call 40035e60 <.rem> <== NOT EXECUTED 4001d520: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d524: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d528: a8 10 00 08 mov %o0, %l4 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d52c: 40 00 61 a1 call 40035bb0 <.div> <== NOT EXECUTED 4001d530: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 4001d534: 80 a5 20 00 cmp %l4, 0 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d538: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED if ( start_offset ) { 4001d53c: a0 10 00 1a mov %i2, %l0 <== NOT EXECUTED 4001d540: 12 80 00 4d bne 4001d674 <== NOT EXECUTED 4001d544: b0 10 20 00 clr %i0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d548: f4 04 e2 dc ld [ %l3 + 0x2dc ], %i2 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d54c: 80 a4 40 1a cmp %l1, %i2 <== NOT EXECUTED 4001d550: 1a 80 00 0e bcc 4001d588 <== NOT EXECUTED 4001d554: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED * Phase 3: possibly the first part of one block */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { 4001d558: 10 80 00 20 b 4001d5d8 <== NOT EXECUTED 4001d55c: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); 4001d560: d2 02 40 00 ld [ %o1 ], %o1 <== NOT EXECUTED 4001d564: 40 00 2b b8 call 40028444 <== NOT EXECUTED 4001d568: a2 24 40 1a sub %l1, %i2, %l1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d56c: c2 04 e2 dc ld [ %l3 + 0x2dc ], %g1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); 4001d570: a0 04 00 1a add %l0, %i2, %l0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d574: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); dest += to_copy; block++; 4001d578: b2 06 60 01 inc %i1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d57c: 18 80 00 16 bgu 4001d5d4 <== NOT EXECUTED 4001d580: b0 06 00 1a add %i0, %i2, %i0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d584: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001d588: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001d58c: 7f ff fc 7a call 4001c774 <== NOT EXECUTED 4001d590: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], to_copy ); 4001d594: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d598: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED assert( block_ptr ); 4001d59c: 80 a2 60 00 cmp %o1, 0 <== NOT EXECUTED 4001d5a0: 12 bf ff f0 bne 4001d560 <== NOT EXECUTED 4001d5a4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001d5a8: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d5ac: 92 10 22 a5 mov 0x2a5, %o1 <== NOT EXECUTED 4001d5b0: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d5b4: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d5b8: 7f ff a2 34 call 40005e88 <__assert> <== NOT EXECUTED 4001d5bc: 94 12 a2 b8 or %o2, 0x2b8, %o2 ! 400392b8 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED if ( !block_ptr ) return copied; 4001d5c0: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED } IMFS_update_atime( the_jnode ); return copied; } 4001d5c4: 81 c7 e0 08 ret <== NOT EXECUTED 4001d5c8: 91 e8 00 0a restore %g0, %o2, %o0 <== NOT EXECUTED * in memory file, then shorten the length to read. */ last_byte = start + length; if ( last_byte > the_jnode->info.file.size ) my_length = the_jnode->info.file.size - start; 4001d5cc: 10 bf ff d1 b 4001d510 <== NOT EXECUTED 4001d5d0: a2 20 80 19 sub %g2, %i1, %l1 <== NOT EXECUTED * Phase 3: possibly the first part of one block */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { 4001d5d4: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4001d5d8: 02 80 00 0f be 4001d614 <== NOT EXECUTED 4001d5dc: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d5e0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001d5e4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4001d5e8: 7f ff fc 63 call 4001c774 <== NOT EXECUTED 4001d5ec: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001d5f0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d5f4: 22 80 00 4a be,a 4001d71c <== NOT EXECUTED 4001d5f8: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); 4001d5fc: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED copied += my_length; 4001d600: b0 06 00 11 add %i0, %l1, %i0 <== NOT EXECUTED if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ 0 ], my_length ); 4001d604: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001d608: 40 00 2b 8f call 40028444 <== NOT EXECUTED 4001d60c: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED copied += my_length; } IMFS_update_atime( the_jnode ); 4001d610: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001d614: 7f ff a2 e7 call 400061b0 <== NOT EXECUTED 4001d618: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001d61c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return copied; 4001d620: 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 ); 4001d624: c2 24 a0 3c st %g1, [ %l2 + 0x3c ] <== NOT EXECUTED return copied; } 4001d628: 81 c7 e0 08 ret <== NOT EXECUTED 4001d62c: 91 e8 00 0a restore %g0, %o2, %o0 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) 4001d630: c2 04 a0 4c ld [ %l2 + 0x4c ], %g1 <== NOT EXECUTED 4001d634: b0 10 00 1b mov %i3, %i0 <== NOT EXECUTED 4001d638: 82 20 40 19 sub %g1, %i1, %g1 <== NOT EXECUTED 4001d63c: 80 a6 c0 01 cmp %i3, %g1 <== NOT EXECUTED 4001d640: 18 80 00 22 bgu 4001d6c8 <== NOT EXECUTED 4001d644: d2 04 a0 50 ld [ %l2 + 0x50 ], %o1 <== NOT EXECUTED my_length = the_jnode->info.linearfile.size - start; memcpy(dest, &file_ptr[start], my_length); 4001d648: 92 02 40 19 add %o1, %i1, %o1 <== NOT EXECUTED 4001d64c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4001d650: 40 00 2b 7d call 40028444 <== NOT EXECUTED 4001d654: 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 ); 4001d658: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001d65c: 7f ff a2 d5 call 400061b0 <== NOT EXECUTED 4001d660: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001d664: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return copied; 4001d668: 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 ); 4001d66c: 10 bf ff ef b 4001d628 <== NOT EXECUTED 4001d670: c2 24 a0 3c st %g1, [ %l2 + 0x3c ] <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d674: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4001d678: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001d67c: 7f ff fc 3e call 4001c774 <== NOT EXECUTED 4001d680: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001d684: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d688: 02 80 00 1d be 4001d6fc <== NOT EXECUTED 4001d68c: 92 26 c0 14 sub %i3, %l4, %o1 <== NOT EXECUTED */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; 4001d690: 80 a4 40 09 cmp %l1, %o1 <== NOT EXECUTED 4001d694: 08 80 00 03 bleu 4001d6a0 <== NOT EXECUTED 4001d698: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 4001d69c: 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 ); 4001d6a0: d2 02 00 00 ld [ %o0 ], %o1 <== NOT EXECUTED dest += to_copy; 4001d6a4: a0 06 80 0a add %i2, %o2, %l0 <== NOT EXECUTED to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); if ( !block_ptr ) return copied; memcpy( dest, &(*block_ptr)[ start_offset ], to_copy ); 4001d6a8: 92 05 00 09 add %l4, %o1, %o1 <== NOT EXECUTED dest += to_copy; block++; 4001d6ac: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001d6b0: a2 24 40 0a sub %l1, %o2, %l1 <== NOT EXECUTED 4001d6b4: 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 ); 4001d6b8: 40 00 2b 63 call 40028444 <== NOT EXECUTED 4001d6bc: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d6c0: 10 bf ff a3 b 4001d54c <== NOT EXECUTED 4001d6c4: f4 04 e2 dc ld [ %l3 + 0x2dc ], %i2 <== NOT EXECUTED unsigned char *file_ptr; file_ptr = (unsigned char *)the_jnode->info.linearfile.direct; if (my_length > (the_jnode->info.linearfile.size - start)) my_length = the_jnode->info.linearfile.size - start; 4001d6c8: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED memcpy(dest, &file_ptr[start], my_length); 4001d6cc: 92 02 40 19 add %o1, %i1, %o1 <== NOT EXECUTED 4001d6d0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4001d6d4: 40 00 2b 5c call 40028444 <== NOT EXECUTED 4001d6d8: 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 ); 4001d6dc: 10 bf ff e0 b 4001d65c <== NOT EXECUTED 4001d6e0: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED assert( the_jnode->type == IMFS_MEMORY_FILE || the_jnode->type == IMFS_LINEAR_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE && the_jnode->type != IMFS_LINEAR_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001d6e4: 40 00 24 b3 call 400269b0 <__errno> <== NOT EXECUTED 4001d6e8: 01 00 00 00 nop <== NOT EXECUTED 4001d6ec: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001d6f0: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001d6f4: 10 bf ff b4 b 4001d5c4 <== NOT EXECUTED 4001d6f8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001d6fc: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d700: 92 10 22 94 mov 0x294, %o1 <== NOT EXECUTED 4001d704: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d708: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d70c: 7f ff a1 df call 40005e88 <__assert> <== NOT EXECUTED 4001d710: 94 12 a2 b8 or %o2, 0x2b8, %o2 ! 400392b8 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED 4001d714: 10 bf ff ac b 4001d5c4 <== NOT EXECUTED 4001d718: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001d71c: 92 10 22 b7 mov 0x2b7, %o1 <== NOT EXECUTED 4001d720: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d724: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d728: 7f ff a1 d8 call 40005e88 <__assert> <== NOT EXECUTED 4001d72c: 94 12 a2 b8 or %o2, 0x2b8, %o2 ! 400392b8 <_CPU_Trap_slot_template+0xfd8> <== NOT EXECUTED if ( !block_ptr ) return copied; 4001d730: 10 bf ff a5 b 4001d5c4 <== NOT EXECUTED 4001d734: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED * If there is nothing to read, then quick exit. */ my_length = length; if ( !my_length ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001d738: 40 00 24 9e call 400269b0 <__errno> <== NOT EXECUTED 4001d73c: 01 00 00 00 nop <== NOT EXECUTED 4001d740: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001d744: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001d748: 10 bf ff 9f b 4001d5c4 <== NOT EXECUTED 4001d74c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001d750: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d754: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d758: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d75c: 7f ff a1 cb call 40005e88 <__assert> <== NOT EXECUTED 4001d760: 94 12 a2 68 or %o2, 0x268, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001d764: 40 00 24 93 call 400269b0 <__errno> <== NOT EXECUTED 4001d768: 01 00 00 00 nop <== NOT EXECUTED 4001d76c: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001d770: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001d774: 10 bf ff 94 b 4001d5c4 <== NOT EXECUTED 4001d778: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Error checks on arguments */ assert( dest ); 4001d77c: 92 10 22 58 mov 0x258, %o1 <== NOT EXECUTED 4001d780: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d784: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d788: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d78c: 7f ff a1 bf call 40005e88 <__assert> <== NOT EXECUTED 4001d790: 94 12 a3 18 or %o2, 0x318, %o2 <== NOT EXECUTED if ( !dest ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001d794: 40 00 24 87 call 400269b0 <__errno> <== NOT EXECUTED 4001d798: 01 00 00 00 nop <== NOT EXECUTED 4001d79c: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4001d7a0: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 4001d7a4: 10 bf ff 88 b 4001d5c4 <== NOT EXECUTED 4001d7a8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001caf0 : */ int IMFS_memfile_remove( IMFS_jnode_t *the_jnode ) { 4001caf0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001caf4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001caf8: 02 80 00 74 be 4001ccc8 <== NOT EXECUTED 4001cafc: 92 10 21 ec mov 0x1ec, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001cb00: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001cb04: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001cb08: 02 80 00 0b be 4001cb34 <== NOT EXECUTED 4001cb0c: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001cb10: 92 10 21 f0 mov 0x1f0, %o1 <== NOT EXECUTED 4001cb14: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001cb18: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001cb1c: 7f ff a4 db call 40005e88 <__assert> <== NOT EXECUTED 4001cb20: 94 12 a2 78 or %o2, 0x278, %o2 ! 40039278 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001cb24: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001cb28: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001cb2c: 12 80 00 5a bne 4001cc94 <== NOT EXECUTED 4001cb30: 01 00 00 00 nop <== NOT EXECUTED /* * Eventually this could be set smarter at each call to * memfile_free_blocks_in_table to greatly speed this up. */ to_free = IMFS_MEMFILE_BLOCK_SLOTS; 4001cb34: 25 10 00 f5 sethi %hi(0x4003d400), %l2 <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 4001cb38: 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; 4001cb3c: c4 04 a2 dc ld [ %l2 + 0x2dc ], %g2 <== NOT EXECUTED * + triply indirect */ info = &the_jnode->info.file; if ( info->indirect ) { 4001cb40: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001cb44: 02 80 00 05 be 4001cb58 <== NOT EXECUTED 4001cb48: a7 30 a0 02 srl %g2, 2, %l3 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); 4001cb4c: 90 06 20 50 add %i0, 0x50, %o0 <== NOT EXECUTED 4001cb50: 7f ff ff c9 call 4001ca74 <== NOT EXECUTED 4001cb54: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED } if ( info->doubly_indirect ) { 4001cb58: d0 06 20 54 ld [ %i0 + 0x54 ], %o0 <== NOT EXECUTED 4001cb5c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001cb60: 02 80 00 19 be 4001cbc4 <== NOT EXECUTED 4001cb64: c2 04 a2 dc ld [ %l2 + 0x2dc ], %g1 <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED 4001cb74: 84 10 20 00 clr %g2 <== NOT EXECUTED 4001cb78: 10 80 00 03 b 4001cb84 <== NOT EXECUTED 4001cb7c: a0 10 20 00 clr %l0 <== NOT EXECUTED 4001cb80: d0 06 20 54 ld [ %i0 + 0x54 ], %o0 <== NOT EXECUTED if ( info->doubly_indirect[i] ) { 4001cb84: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001cb88: c4 00 40 08 ld [ %g1 + %o0 ], %g2 <== NOT EXECUTED 4001cb8c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001cb90: 02 80 00 04 be 4001cba0 <== NOT EXECUTED 4001cb94: 90 00 40 08 add %g1, %o0, %o0 <== NOT EXECUTED memfile_free_blocks_in_table( 4001cb98: 7f ff ff b7 call 4001ca74 <== NOT EXECUTED 4001cb9c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->indirect, to_free ); } if ( info->doubly_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001cbb4: a0 10 00 02 mov %g2, %l0 <== NOT EXECUTED if ( info->doubly_indirect[i] ) { memfile_free_blocks_in_table( (block_p **)&info->doubly_indirect[i], to_free ); } } memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); 4001cbb8: 90 06 20 54 add %i0, 0x54, %o0 <== NOT EXECUTED 4001cbbc: 7f ff ff ae call 4001ca74 <== NOT EXECUTED 4001cbc0: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED } if ( info->triply_indirect ) { 4001cbc4: c4 06 20 58 ld [ %i0 + 0x58 ], %g2 <== NOT EXECUTED 4001cbc8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001cbcc: 02 80 00 37 be 4001cca8 <== NOT EXECUTED 4001cbd0: 82 10 20 00 clr %g1 <== NOT EXECUTED for ( i=0 ; i <== NOT EXECUTED 4001cbe4: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED p = (block_p *) info->triply_indirect[i]; 4001cbe8: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ 4001cbec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001cbf0: 02 80 00 31 be 4001ccb4 <== NOT EXECUTED 4001cbf4: a0 10 00 01 mov %g1, %l0 <== NOT EXECUTED } if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; 4001cbf8: a8 10 20 00 clr %l4 <== NOT EXECUTED 4001cbfc: aa 10 20 00 clr %l5 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ break; for ( j=0 ; j <== NOT EXECUTED 4001cc10: 90 05 40 02 add %l5, %g2, %o0 <== NOT EXECUTED 4001cc14: a2 10 20 00 clr %l1 <== NOT EXECUTED 4001cc18: 84 10 20 00 clr %g2 <== NOT EXECUTED if ( p[j] ) { 4001cc1c: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001cc20: c4 00 40 10 ld [ %g1 + %l0 ], %g2 <== NOT EXECUTED 4001cc24: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001cc28: 02 80 00 04 be 4001cc38 <== NOT EXECUTED 4001cc2c: 90 00 40 10 add %g1, %l0, %o0 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&p[j], to_free); 4001cc30: 7f ff ff 91 call 4001ca74 <== NOT EXECUTED 4001cc34: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED if ( info->triply_indirect ) { for ( i=0 ; itriply_indirect[i]; if ( !p ) /* ensure we have a valid pointer */ break; for ( j=0 ; j <== NOT EXECUTED 4001cc4c: a2 10 00 02 mov %g2, %l1 <== NOT EXECUTED 4001cc50: c4 06 20 58 ld [ %i0 + 0x58 ], %g2 <== NOT EXECUTED if ( p[j] ) { memfile_free_blocks_in_table( (block_p **)&p[j], to_free); } } memfile_free_blocks_in_table( 4001cc54: 90 05 40 02 add %l5, %g2, %o0 <== NOT EXECUTED 4001cc58: 7f ff ff 87 call 4001ca74 <== NOT EXECUTED 4001cc5c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED memfile_free_blocks_in_table( &info->doubly_indirect, to_free ); } if ( info->triply_indirect ) { for ( i=0 ; i <== NOT EXECUTED 4001cc74: ab 2d 20 02 sll %l4, 2, %l5 <== NOT EXECUTED p = (block_p *) info->triply_indirect[i]; 4001cc78: c4 06 20 58 ld [ %i0 + 0x58 ], %g2 <== NOT EXECUTED 4001cc7c: c2 00 80 15 ld [ %g2 + %l5 ], %g1 <== NOT EXECUTED if ( !p ) /* ensure we have a valid pointer */ 4001cc80: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001cc84: 02 80 00 0b be 4001ccb0 <== NOT EXECUTED 4001cc88: a0 10 00 01 mov %g1, %l0 <== NOT EXECUTED break; for ( j=0 ; j <== NOT EXECUTED 4001cc90: c2 04 a2 dc ld [ %l2 + 0x2dc ], %g1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001cc94: 40 00 27 47 call 400269b0 <__errno> <== NOT EXECUTED 4001cc98: 01 00 00 00 nop <== NOT EXECUTED 4001cc9c: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001cca0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001cca4: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED memfile_free_blocks_in_table( (block_p **)&info->triply_indirect, to_free ); } return 0; } 4001cca8: 81 c7 e0 08 ret <== NOT EXECUTED 4001ccac: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED } } memfile_free_blocks_in_table( (block_p **)&info->triply_indirect[i], to_free ); } memfile_free_blocks_in_table( 4001ccb0: 90 06 20 58 add %i0, 0x58, %o0 <== NOT EXECUTED 4001ccb4: 7f ff ff 70 call 4001ca74 <== NOT EXECUTED 4001ccb8: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4001ccbc: 82 10 20 00 clr %g1 <== NOT EXECUTED (block_p **)&info->triply_indirect, to_free ); } return 0; } 4001ccc0: 81 c7 e0 08 ret <== NOT EXECUTED 4001ccc4: 91 e8 00 01 restore %g0, %g1, %o0 <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001ccc8: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001cccc: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001ccd0: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001ccd4: 7f ff a4 6d call 40005e88 <__assert> <== NOT EXECUTED 4001ccd8: 94 12 a2 68 or %o2, 0x268, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001ccdc: 40 00 27 35 call 400269b0 <__errno> <== NOT EXECUTED 4001cce0: 01 00 00 00 nop <== NOT EXECUTED 4001cce4: 82 10 20 05 mov 5, %g1 ! 5 <== NOT EXECUTED 4001cce8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001ccec: 10 bf ff ef b 4001cca8 <== NOT EXECUTED 4001ccf0: 82 10 3f ff mov -1, %g1 <== NOT EXECUTED 4001ca44 : MEMFILE_STATIC int IMFS_memfile_remove_block( IMFS_jnode_t *the_jnode, unsigned int block ) { 4001ca44: 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 ); 4001ca48: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001ca4c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001ca50: 7f ff ff 49 call 4001c774 <== NOT EXECUTED 4001ca54: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ptr = *block_entry_ptr; 4001ca58: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED *block_entry_ptr = 0; memfile_free_block( ptr ); return 1; } 4001ca5c: 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; 4001ca60: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED memfile_free_block( ptr ); 4001ca64: 7f ff ff 2e call 4001c71c <== NOT EXECUTED 4001ca68: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED return 1; } 4001ca6c: 81 c7 e0 08 ret <== NOT EXECUTED 4001ca70: 81 e8 00 00 restore <== NOT EXECUTED 4001d0fc : IMFS_jnode_t *the_jnode, off_t start, const unsigned char *source, unsigned int length ) { 4001d0fc: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001d100: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001d104: 02 80 00 99 be 4001d368 <== NOT EXECUTED 4001d108: 92 10 22 e1 mov 0x2e1, %o1 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); 4001d10c: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001d110: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001d114: 02 80 00 0b be 4001d140 <== NOT EXECUTED 4001d118: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d11c: 92 10 22 e5 mov 0x2e5, %o1 <== NOT EXECUTED 4001d120: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d124: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d128: 7f ff a3 58 call 40005e88 <__assert> <== NOT EXECUTED 4001d12c: 94 12 a2 78 or %o2, 0x278, %o2 ! 40039278 <_CPU_Trap_slot_template+0xf98> <== NOT EXECUTED if ( the_jnode->type != IMFS_MEMORY_FILE ) 4001d130: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001d134: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 4001d138: 12 80 00 82 bne 4001d340 <== NOT EXECUTED 4001d13c: 01 00 00 00 nop <== NOT EXECUTED /* * Error check arguments */ assert( source ); 4001d140: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001d144: 02 80 00 93 be 4001d390 <== NOT EXECUTED 4001d148: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED /* * If there is nothing to write, then quick exit. */ my_length = length; if ( !my_length ) 4001d14c: 02 80 00 82 be 4001d354 <== NOT EXECUTED 4001d150: 92 06 c0 19 add %i3, %i1, %o1 <== NOT EXECUTED * If the last byte we are supposed to write is past the end of this * in memory file, then extend the length. */ last_byte = start + length; if ( last_byte > the_jnode->info.file.size ) { 4001d154: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED 4001d158: 80 a2 40 01 cmp %o1, %g1 <== NOT EXECUTED 4001d15c: 18 80 00 43 bgu 4001d268 <== NOT EXECUTED 4001d160: 25 10 00 f5 sethi %hi(0x4003d400), %l2 <== NOT EXECUTED /* * Phase 1: possibly the last part of one block */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d164: e0 04 a2 dc ld [ %l2 + 0x2dc ], %l0 ! 4003d6dc <== NOT EXECUTED 4001d168: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001d16c: 40 00 63 3d call 40035e60 <.rem> <== NOT EXECUTED 4001d170: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d174: 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; 4001d178: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d17c: 40 00 62 8d call 40035bb0 <.div> <== NOT EXECUTED 4001d180: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if ( start_offset ) { 4001d184: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 4001d188: 12 80 00 42 bne 4001d290 <== NOT EXECUTED 4001d18c: b2 10 00 08 mov %o0, %i1 <== NOT EXECUTED 4001d190: a0 10 00 1a mov %i2, %l0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d194: f4 04 a2 dc ld [ %l2 + 0x2dc ], %i2 <== NOT EXECUTED while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d198: 80 a6 c0 1a cmp %i3, %i2 <== NOT EXECUTED 4001d19c: 1a 80 00 0e bcc 4001d1d4 <== NOT EXECUTED 4001d1a0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { 4001d1a4: 10 80 00 1c b 4001d214 <== NOT EXECUTED 4001d1a8: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 4001d1ac: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED 4001d1b0: 40 00 2c a5 call 40028444 <== NOT EXECUTED 4001d1b4: b6 26 c0 1a sub %i3, %i2, %i3 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d1b8: c2 04 a2 dc ld [ %l2 + 0x2dc ], %g1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 4001d1bc: a0 04 00 1a add %l0, %i2, %l0 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d1c0: 80 a0 40 1b cmp %g1, %i3 <== NOT EXECUTED #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, to_copy ); src += to_copy; block++; 4001d1c4: b2 06 60 01 inc %i1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 4001d1c8: 18 80 00 12 bgu 4001d210 <== NOT EXECUTED 4001d1cc: a2 04 40 1a add %l1, %i2, %l1 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d1d0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001d1d4: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001d1d8: 7f ff fd 67 call 4001c774 <== NOT EXECUTED 4001d1dc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 4001d1e0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001d1e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d1e8: 12 bf ff f1 bne 4001d1ac <== NOT EXECUTED 4001d1ec: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 4001d1f0: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d1f4: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d1f8: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d1fc: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001d200: 7f ff a3 22 call 40005e88 <__assert> <== NOT EXECUTED 4001d204: 92 10 23 2e mov 0x32e, %o1 <== NOT EXECUTED } IMFS_atime_mtime_update( the_jnode ); return copied; } 4001d208: 81 c7 e0 08 ret <== NOT EXECUTED 4001d20c: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED */ assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { 4001d210: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 4001d214: 02 80 00 0e be 4001d24c <== NOT EXECUTED 4001d218: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d21c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001d220: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001d224: 7f ff fd 54 call 4001c774 <== NOT EXECUTED 4001d228: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001d22c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d230: 02 80 00 3d be 4001d324 <== NOT EXECUTED 4001d234: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, my_length ); 4001d238: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED my_length = 0; copied += to_copy; 4001d23c: a2 04 40 1b add %l1, %i3, %l1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ 0 ], src, my_length ); 4001d240: 40 00 2c 81 call 40028444 <== NOT EXECUTED 4001d244: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED my_length = 0; copied += to_copy; } IMFS_atime_mtime_update( the_jnode ); 4001d248: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001d24c: 7f ff a3 d9 call 400061b0 <== NOT EXECUTED 4001d250: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001d254: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001d258: c2 26 20 3c st %g1, [ %i0 + 0x3c ] <== NOT EXECUTED 4001d25c: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED return copied; } 4001d260: 81 c7 e0 08 ret <== NOT EXECUTED 4001d264: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED * in memory file, then extend the length. */ last_byte = start + length; if ( last_byte > the_jnode->info.file.size ) { status = IMFS_memfile_extend( the_jnode, last_byte ); 4001d268: 7f ff ff 0f call 4001cea4 <== NOT EXECUTED 4001d26c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status ) 4001d270: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d274: 02 bf ff bc be 4001d164 <== NOT EXECUTED 4001d278: 25 10 00 f5 sethi %hi(0x4003d400), %l2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); 4001d27c: 40 00 25 cd call 400269b0 <__errno> <== NOT EXECUTED 4001d280: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001d284: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED 4001d288: 10 bf ff e0 b 4001d208 <== NOT EXECUTED 4001d28c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); 4001d290: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001d294: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001d298: 7f ff fd 37 call 4001c774 <== NOT EXECUTED 4001d29c: 94 10 20 00 clr %o2 <== NOT EXECUTED assert( block_ptr ); 4001d2a0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d2a4: 22 80 00 19 be,a 4001d308 <== NOT EXECUTED 4001d2a8: 11 10 00 e4 sethi %hi(0x40039000), %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; 4001d2ac: 94 24 00 11 sub %l0, %l1, %o2 <== NOT EXECUTED 4001d2b0: 80 a2 80 1b cmp %o2, %i3 <== NOT EXECUTED 4001d2b4: 18 80 00 0b bgu 4001d2e0 <== NOT EXECUTED 4001d2b8: d0 02 00 00 ld [ %o0 ], %o0 <== NOT EXECUTED return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); src += to_copy; 4001d2bc: 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 ); 4001d2c0: 90 04 40 08 add %l1, %o0, %o0 <== NOT EXECUTED src += to_copy; block++; 4001d2c4: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001d2c8: b6 26 c0 0a sub %i3, %o2, %i3 <== NOT EXECUTED copied += to_copy; 4001d2cc: a2 10 00 0a mov %o2, %l1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 4001d2d0: 40 00 2c 5d call 40028444 <== NOT EXECUTED 4001d2d4: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d2d8: 10 bf ff b0 b 4001d198 <== NOT EXECUTED 4001d2dc: f4 04 a2 dc ld [ %l2 + 0x2dc ], %i2 <== NOT EXECUTED */ start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK; block = start / IMFS_MEMFILE_BYTES_PER_BLOCK; if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; 4001d2e0: 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 ); 4001d2e4: 90 04 40 08 add %l1, %o0, %o0 <== NOT EXECUTED src += to_copy; 4001d2e8: a0 06 80 0a add %i2, %o2, %l0 <== NOT EXECUTED block++; 4001d2ec: b2 06 60 01 inc %i1 <== NOT EXECUTED my_length -= to_copy; 4001d2f0: b6 26 c0 0a sub %i3, %o2, %i3 <== NOT EXECUTED copied += to_copy; 4001d2f4: a2 10 00 0a mov %o2, %l1 <== NOT EXECUTED if ( !block_ptr ) return copied; #if 0 fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src ); #endif memcpy( &(*block_ptr)[ start_offset ], src, to_copy ); 4001d2f8: 40 00 2c 53 call 40028444 <== NOT EXECUTED 4001d2fc: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED /* * Phase 2: all of zero of more blocks */ to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK; 4001d300: 10 bf ff a6 b 4001d198 <== NOT EXECUTED 4001d304: f4 04 a2 dc ld [ %l2 + 0x2dc ], %i2 <== NOT EXECUTED if ( start_offset ) { to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset; if ( to_copy > my_length ) to_copy = my_length; block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001d308: 92 10 23 1a mov 0x31a, %o1 <== NOT EXECUTED 4001d30c: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d310: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d314: a2 10 20 00 clr %l1 <== NOT EXECUTED 4001d318: 7f ff a2 dc call 40005e88 <__assert> <== NOT EXECUTED 4001d31c: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001d320: 30 bf ff ba b,a 4001d208 <== NOT EXECUTED assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK ); to_copy = my_length; if ( my_length ) { block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 ); assert( block_ptr ); 4001d324: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d328: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d32c: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d330: 94 12 a2 b8 or %o2, 0x2b8, %o2 <== NOT EXECUTED 4001d334: 7f ff a2 d5 call 40005e88 <__assert> <== NOT EXECUTED 4001d338: 92 10 23 44 mov 0x344, %o1 <== NOT EXECUTED 4001d33c: 30 bf ff b3 b,a 4001d208 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); assert( the_jnode->type == IMFS_MEMORY_FILE ); if ( the_jnode->type != IMFS_MEMORY_FILE ) rtems_set_errno_and_return_minus_one( EIO ); 4001d340: 40 00 25 9c call 400269b0 <__errno> <== NOT EXECUTED 4001d344: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001d348: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001d34c: 10 bf ff af b 4001d208 <== NOT EXECUTED 4001d350: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * If there is nothing to write, then quick exit. */ my_length = length; if ( !my_length ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001d354: 40 00 25 97 call 400269b0 <__errno> <== NOT EXECUTED 4001d358: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001d35c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001d360: 10 bf ff aa b 4001d208 <== NOT EXECUTED 4001d364: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Perform internal consistency checks */ assert( the_jnode ); 4001d368: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d36c: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d370: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d374: 7f ff a2 c5 call 40005e88 <__assert> <== NOT EXECUTED 4001d378: 94 12 a2 68 or %o2, 0x268, %o2 <== NOT EXECUTED if ( !the_jnode ) rtems_set_errno_and_return_minus_one( EIO ); 4001d37c: 40 00 25 8d call 400269b0 <__errno> <== NOT EXECUTED 4001d380: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001d384: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 4001d388: 10 bf ff a0 b 4001d208 <== NOT EXECUTED 4001d38c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * Error check arguments */ assert( source ); 4001d390: 92 10 22 ed mov 0x2ed, %o1 <== NOT EXECUTED 4001d394: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001d398: 15 10 00 e4 sethi %hi(0x40039000), %o2 <== NOT EXECUTED 4001d39c: 90 12 22 18 or %o0, 0x218, %o0 <== NOT EXECUTED 4001d3a0: 7f ff a2 ba call 40005e88 <__assert> <== NOT EXECUTED 4001d3a4: 94 12 a2 b0 or %o2, 0x2b0, %o2 <== NOT EXECUTED if ( !source ) rtems_set_errno_and_return_minus_one( EINVAL ); 4001d3a8: 40 00 25 82 call 400269b0 <__errno> <== NOT EXECUTED 4001d3ac: a2 10 3f ff mov -1, %l1 <== NOT EXECUTED 4001d3b0: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001d3b4: 10 bf ff 95 b 4001d208 <== NOT EXECUTED 4001d3b8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000cc10 : const char *token, /* IN */ mode_t mode, /* IN */ dev_t dev, /* IN */ rtems_filesystem_location_info_t *pathloc /* IN/OUT */ ) { 4000cc10: 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 ); 4000cc14: 90 10 00 18 mov %i0, %o0 4000cc18: 94 07 bf f4 add %fp, -12, %o2 4000cc1c: b0 07 bf c3 add %fp, -61, %i0 4000cc20: 7f ff ff 79 call 4000ca04 4000cc24: 92 10 00 18 mov %i0, %o1 /* * Figure out what type of IMFS node this is. */ if ( S_ISDIR(mode) ) 4000cc28: b3 2e 60 10 sll %i1, 0x10, %i1 4000cc2c: 03 00 00 3c sethi %hi(0xf000), %g1 4000cc30: 97 36 60 10 srl %i1, 0x10, %o3 4000cc34: 05 00 00 10 sethi %hi(0x4000), %g2 4000cc38: 86 0a c0 01 and %o3, %g1, %g3 4000cc3c: 80 a0 c0 02 cmp %g3, %g2 4000cc40: 02 80 00 1f be 4000ccbc 4000cc44: 90 10 00 1c mov %i4, %o0 type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) 4000cc48: 03 00 00 20 sethi %hi(0x8000), %g1 4000cc4c: 80 a0 c0 01 cmp %g3, %g1 4000cc50: 02 80 00 12 be 4000cc98 4000cc54: 92 10 20 05 mov 5, %o1 type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { 4000cc58: 03 00 00 18 sethi %hi(0x6000), %g1 4000cc5c: 80 a0 c0 01 cmp %g3, %g1 4000cc60: 02 80 00 0b be 4000cc8c 4000cc64: 03 00 00 08 sethi %hi(0x2000), %g1 4000cc68: 80 a0 c0 01 cmp %g3, %g1 4000cc6c: 22 80 00 09 be,a 4000cc90 4000cc70: f6 27 bf e8 st %i3, [ %fp + -24 ] type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); } else { rtems_set_errno_and_return_minus_one( EINVAL ); 4000cc74: 40 00 09 92 call 4000f2bc <__errno> <== NOT EXECUTED 4000cc78: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000cc7c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4000cc80: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000cc84: 81 c7 e0 08 ret <== NOT EXECUTED 4000cc88: 81 e8 00 00 restore <== NOT EXECUTED type = IMFS_DIRECTORY; else if ( S_ISREG(mode) ) type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); 4000cc8c: f6 27 bf e8 st %i3, [ %fp + -24 ] <== NOT EXECUTED 4000cc90: f4 27 bf e4 st %i2, [ %fp + -28 ] 4000cc94: 92 10 20 02 mov 2, %o1 /* * Allocate and fill in an IMFS jnode */ new_node = IMFS_create_node( 4000cc98: 94 10 00 18 mov %i0, %o2 4000cc9c: 98 07 bf e4 add %fp, -28, %o4 4000cca0: 40 00 07 2d call 4000e954 4000cca4: b0 10 20 00 clr %i0 new_name, mode, &info ); if ( !new_node ) 4000cca8: 80 a2 20 00 cmp %o0, 0 4000ccac: 02 80 00 06 be 4000ccc4 4000ccb0: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; } 4000ccb4: 81 c7 e0 08 ret 4000ccb8: 81 e8 00 00 restore type = IMFS_MEMORY_FILE; else if ( S_ISBLK(mode) || S_ISCHR(mode) ) { type = IMFS_DEVICE; rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor ); } else { rtems_set_errno_and_return_minus_one( EINVAL ); 4000ccbc: 10 bf ff f7 b 4000cc98 4000ccc0: 92 10 20 01 mov 1, %o1 mode, &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); 4000ccc4: 40 00 09 7e call 4000f2bc <__errno> <== NOT EXECUTED 4000ccc8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000cccc: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000ccd0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 4000ccd4: 81 c7 e0 08 ret <== NOT EXECUTED 4000ccd8: 81 e8 00 00 restore <== NOT EXECUTED 40005ac8 : #include int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40005ac8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 40005acc: 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 ) 40005ad0: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 40005ad4: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40005ad8: 12 80 00 05 bne 40005aec <== NOT EXECUTED 40005adc: 01 00 00 00 nop <== NOT EXECUTED /* * Set mt_fs pointer to point to the mount table entry for * the mounted file system. */ node->info.directory.mt_fs = mt_entry; 40005ae0: f0 20 a0 58 st %i0, [ %g2 + 0x58 ] <== NOT EXECUTED return 0; } 40005ae4: 81 c7 e0 08 ret <== NOT EXECUTED 40005ae8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 40005aec: 40 00 83 b1 call 400269b0 <__errno> <== NOT EXECUTED 40005af0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005af4: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40005af8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005afc: 81 c7 e0 08 ret <== NOT EXECUTED 40005b00: 81 e8 00 00 restore <== NOT EXECUTED 40005b10 : int IMFS_readlink( rtems_filesystem_location_info_t *loc, char *buf, /* OUT */ size_t bufsize ) { 40005b10: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; int i; node = loc->node_access; 40005b14: c6 06 00 00 ld [ %i0 ], %g3 <== NOT EXECUTED if ( node->type != IMFS_SYM_LINK ) 40005b18: c2 00 e0 48 ld [ %g3 + 0x48 ], %g1 <== NOT EXECUTED 40005b1c: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 40005b20: 12 80 00 19 bne 40005b84 <== NOT EXECUTED 40005b24: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) 40005b28: 02 80 00 15 be 40005b7c <== NOT EXECUTED 40005b2c: 88 10 20 00 clr %g4 <== NOT EXECUTED 40005b30: c2 00 e0 4c ld [ %g3 + 0x4c ], %g1 <== NOT EXECUTED int i; node = loc->node_access; if ( node->type != IMFS_SYM_LINK ) rtems_set_errno_and_return_minus_one( EINVAL ); 40005b34: b0 10 20 00 clr %i0 <== NOT EXECUTED for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) 40005b38: c4 48 40 00 ldsb [ %g1 ], %g2 <== NOT EXECUTED 40005b3c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005b40: 12 80 00 08 bne 40005b60 <== NOT EXECUTED 40005b44: c2 08 40 00 ldub [ %g1 ], %g1 <== NOT EXECUTED 40005b48: 30 80 00 13 b,a 40005b94 <== NOT EXECUTED 40005b4c: c2 00 e0 4c ld [ %g3 + 0x4c ], %g1 <== NOT EXECUTED 40005b50: c4 48 40 18 ldsb [ %g1 + %i0 ], %g2 <== NOT EXECUTED 40005b54: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005b58: 02 80 00 07 be 40005b74 <== NOT EXECUTED 40005b5c: c2 08 40 18 ldub [ %g1 + %i0 ], %g1 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; 40005b60: c2 2e 40 04 stb %g1, [ %i1 + %g4 ] <== NOT EXECUTED node = loc->node_access; if ( node->type != IMFS_SYM_LINK ) rtems_set_errno_and_return_minus_one( EINVAL ); for( i=0; ((iinfo.sym_link.name[i] != '\0')); i++ ) 40005b64: b0 06 20 01 inc %i0 <== NOT EXECUTED 40005b68: 80 a6 00 1a cmp %i0, %i2 <== NOT EXECUTED 40005b6c: 12 bf ff f8 bne 40005b4c <== NOT EXECUTED 40005b70: 88 10 00 18 mov %i0, %g4 <== NOT EXECUTED buf[i] = node->info.sym_link.name[i]; return i; } 40005b74: 81 c7 e0 08 ret <== NOT EXECUTED 40005b78: 81 e8 00 00 restore <== NOT EXECUTED 40005b7c: 81 c7 e0 08 ret <== NOT EXECUTED 40005b80: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED int i; node = loc->node_access; if ( node->type != IMFS_SYM_LINK ) rtems_set_errno_and_return_minus_one( EINVAL ); 40005b84: 40 00 83 8b call 400269b0 <__errno> <== NOT EXECUTED 40005b88: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005b8c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40005b90: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005b94: 81 c7 e0 08 ret <== NOT EXECUTED 40005b98: 81 e8 00 00 restore <== NOT EXECUTED 4000cce8 : */ int IMFS_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4000cce8: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 4000ccec: 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 ) { 4000ccf0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000ccf4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000ccf8: 22 80 00 06 be,a 4000cd10 <== NOT EXECUTED 4000ccfc: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4000cd00: 40 00 04 04 call 4000dd10 <_Chain_Extract> <== NOT EXECUTED 4000cd04: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 4000cd08: 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--; 4000cd0c: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4000cd10: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4000cd14: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4000cd18: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4000cd1c: 40 00 01 1f call 4000d198 <== NOT EXECUTED 4000cd20: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 4000cd24: 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) ) { 4000cd28: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000cd2c: 40 00 01 55 call 4000d280 <== NOT EXECUTED 4000cd30: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 4000cd34: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000cd38: 12 80 00 12 bne 4000cd80 <== NOT EXECUTED 4000cd3c: 01 00 00 00 nop <== NOT EXECUTED 4000cd40: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 4000cd44: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000cd48: 12 80 00 0e bne 4000cd80 <== NOT EXECUTED 4000cd4c: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED /* * Is rtems_filesystem_current this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 4000cd50: c6 00 62 60 ld [ %g1 + 0x260 ], %g3 ! 4001a260 <== NOT EXECUTED 4000cd54: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 4000cd58: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 4000cd5c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000cd60: 22 80 00 02 be,a 4000cd68 <== NOT EXECUTED 4000cd64: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ if ( the_jnode->type == IMFS_SYM_LINK ) { 4000cd68: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4000cd6c: 80 a0 60 04 cmp %g1, 4 <== NOT EXECUTED 4000cd70: 22 80 00 06 be,a 4000cd88 <== NOT EXECUTED 4000cd74: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED if ( the_jnode->info.sym_link.name ) free( the_jnode->info.sym_link.name ); } free( the_jnode ); 4000cd78: 7f ff d9 a3 call 40003404 <== NOT EXECUTED 4000cd7c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } return 0; } 4000cd80: 81 c7 e0 08 ret <== NOT EXECUTED 4000cd84: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Free memory associated with a memory file. */ if ( the_jnode->type == IMFS_SYM_LINK ) { if ( the_jnode->info.sym_link.name ) 4000cd88: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000cd8c: 02 bf ff fb be 4000cd78 <== NOT EXECUTED 4000cd90: 01 00 00 00 nop <== NOT EXECUTED free( the_jnode->info.sym_link.name ); 4000cd94: 7f ff d9 9c call 40003404 <== NOT EXECUTED 4000cd98: 01 00 00 00 nop <== NOT EXECUTED 4000cd9c: 30 bf ff f7 b,a 4000cd78 <== NOT EXECUTED 4000cda0 : int IMFS_stat( rtems_filesystem_location_info_t *loc, struct stat *buf ) { 4000cda0: 9d e3 bf 98 save %sp, -104, %sp IMFS_jnode_t *the_jnode; IMFS_device_t *io; the_jnode = loc->node_access; 4000cda4: f0 06 00 00 ld [ %i0 ], %i0 switch ( the_jnode->type ) { 4000cda8: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 4000cdac: 80 a0 60 04 cmp %g1, 4 4000cdb0: 22 80 00 11 be,a 4000cdf4 4000cdb4: c0 26 60 20 clr [ %i1 + 0x20 ] <== NOT EXECUTED 4000cdb8: 14 80 00 0b bg 4000cde4 4000cdbc: 80 a0 60 06 cmp %g1, 6 4000cdc0: 80 a0 60 02 cmp %g1, 2 4000cdc4: 22 80 00 1e be,a 4000ce3c 4000cdc8: c4 06 20 4c ld [ %i0 + 0x4c ], %g2 case IMFS_SYM_LINK: buf->st_size = 0; break; default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 4000cdcc: 40 00 09 3c call 4000f2bc <__errno> <== NOT EXECUTED 4000cdd0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000cdd4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000cdd8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000cddc: 81 c7 e0 08 ret <== NOT EXECUTED 4000cde0: 81 e8 00 00 restore <== NOT EXECUTED IMFS_device_t *io; the_jnode = loc->node_access; switch ( the_jnode->type ) { 4000cde4: 14 bf ff fa bg 4000cdcc <== NOT EXECUTED 4000cde8: 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; 4000cdec: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED 4000cdf0: c2 26 60 20 st %g1, [ %i1 + 0x20 ] <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); break; } buf->st_mode = the_jnode->st_mode; 4000cdf4: c2 16 20 2e lduh [ %i0 + 0x2e ], %g1 buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 4000cdf8: 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; 4000cdfc: c2 36 60 0c sth %g1, [ %i1 + 0xc ] buf->st_nlink = the_jnode->st_nlink; buf->st_ino = the_jnode->st_ino; 4000ce00: 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; 4000ce04: 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; 4000ce08: 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; 4000ce0c: 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; 4000ce10: 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; 4000ce14: 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; 4000ce18: 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; 4000ce1c: 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; 4000ce20: 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; 4000ce24: 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; 4000ce28: 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; 4000ce2c: 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; 4000ce30: c2 26 60 34 st %g1, [ %i1 + 0x34 ] return 0; } 4000ce34: 81 c7 e0 08 ret 4000ce38: 91 e8 20 00 restore %g0, 0, %o0 4000ce3c: 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 ); 4000ce40: 10 bf ff ed b 4000cdf4 4000ce44: c4 3e 40 00 std %g2, [ %i1 ] 40005b9c : int IMFS_symlink( rtems_filesystem_location_info_t *parent_loc, const char *link_name, const char *node_name ) { 40005b9c: 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 ); 40005ba0: a0 07 bf c3 add %fp, -61, %l0 <== NOT EXECUTED 40005ba4: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40005ba8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40005bac: 7f ff fe db call 40005718 <== NOT EXECUTED 40005bb0: 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 ) { 40005bb4: 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; 40005bb8: f2 27 bf e4 st %i1, [ %fp + -28 ] <== NOT EXECUTED /* * Create a new link node. */ new_node = IMFS_create_node( 40005bbc: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40005bc0: 92 10 20 04 mov 4, %o1 <== NOT EXECUTED 40005bc4: 17 00 00 28 sethi %hi(0xa000), %o3 <== NOT EXECUTED 40005bc8: 98 07 bf e4 add %fp, -28, %o4 <== NOT EXECUTED 40005bcc: 96 12 e1 ff or %o3, 0x1ff, %o3 <== NOT EXECUTED 40005bd0: 40 00 49 32 call 40018098 <== NOT EXECUTED 40005bd4: b0 10 20 00 clr %i0 <== NOT EXECUTED new_name, ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) 40005bd8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005bdc: 02 80 00 04 be 40005bec <== NOT EXECUTED 40005be0: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); return 0; } 40005be4: 81 c7 e0 08 ret <== NOT EXECUTED 40005be8: 81 e8 00 00 restore <== NOT EXECUTED ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), &info ); if ( !new_node ) rtems_set_errno_and_return_minus_one( ENOMEM ); 40005bec: 40 00 83 71 call 400269b0 <__errno> <== NOT EXECUTED 40005bf0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005bf4: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 40005bf8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; } 40005bfc: 81 c7 e0 08 ret <== NOT EXECUTED 40005c00: 81 e8 00 00 restore <== NOT EXECUTED 40005c04 : #include int IMFS_unlink( rtems_filesystem_location_info_t *loc /* IN */ ) { 40005c04: 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; 40005c08: 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 ) { 40005c0c: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 40005c10: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40005c14: 22 80 00 08 be,a 40005c34 <== NOT EXECUTED 40005c18: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED /* * Now actually free the node we were asked to free. */ result = (*loc->handlers->rmnod_h)( loc ); 40005c1c: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 40005c20: c2 00 a0 34 ld [ %g2 + 0x34 ], %g1 <== NOT EXECUTED 40005c24: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005c28: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED return result; } 40005c2c: 81 c7 e0 08 ret <== NOT EXECUTED 40005c30: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED * free the node. */ if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) 40005c34: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005c38: 02 80 00 21 be 40005cbc <== NOT EXECUTED 40005c3c: a2 07 bf e0 add %fp, -32, %l1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); the_link = *loc; 40005c40: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40005c44: c4 06 20 08 ld [ %i0 + 8 ], %g2 <== NOT EXECUTED 40005c48: c6 06 20 0c ld [ %i0 + 0xc ], %g3 <== NOT EXECUTED 40005c4c: e0 27 bf e0 st %l0, [ %fp + -32 ] <== NOT EXECUTED 40005c50: c4 3f bf e8 std %g2, [ %fp + -24 ] <== NOT EXECUTED 40005c54: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED the_link.node_access = node->info.hard_link.link_node; 40005c58: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 40005c5c: c2 27 bf e0 st %g1, [ %fp + -32 ] <== NOT EXECUTED IMFS_Set_handlers( &the_link ); 40005c60: 40 00 49 75 call 40018234 <== NOT EXECUTED 40005c64: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED /* * If removing the last hard link to a node, then we need * to remove the node that is a link and the node itself. */ if ( node->info.hard_link.link_node->st_nlink == 1) 40005c68: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40005c6c: c2 10 a0 30 lduh [ %g2 + 0x30 ], %g1 <== NOT EXECUTED 40005c70: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40005c74: 02 80 00 0a be 40005c9c <== NOT EXECUTED 40005c78: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED return -1; } else { node->info.hard_link.link_node->st_nlink --; IMFS_update_ctime( node->info.hard_link.link_node ); 40005c7c: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED if ( result != 0 ) return -1; } else { node->info.hard_link.link_node->st_nlink --; 40005c80: c2 30 a0 30 sth %g1, [ %g2 + 0x30 ] <== NOT EXECUTED IMFS_update_ctime( node->info.hard_link.link_node ); 40005c84: 40 00 01 4b call 400061b0 <== NOT EXECUTED 40005c88: 92 10 20 00 clr %o1 <== NOT EXECUTED 40005c8c: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 40005c90: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40005c94: 10 bf ff e2 b 40005c1c <== NOT EXECUTED 40005c98: c2 20 a0 44 st %g1, [ %g2 + 0x44 ] <== NOT EXECUTED * to remove the node that is a link and the node itself. */ if ( node->info.hard_link.link_node->st_nlink == 1) { result = (*the_link.handlers->rmnod_h)( &the_link ); 40005c9c: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED 40005ca0: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED 40005ca4: 9f c0 80 00 call %g2 <== NOT EXECUTED 40005ca8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( result != 0 ) 40005cac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005cb0: 02 bf ff db be 40005c1c <== NOT EXECUTED 40005cb4: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40005cb8: 30 bf ff dd b,a 40005c2c <== NOT EXECUTED */ if ( node->type == IMFS_HARD_LINK ) { if ( !node->info.hard_link.link_node ) rtems_set_errno_and_return_minus_one( EINVAL ); 40005cbc: 40 00 83 3d call 400269b0 <__errno> <== NOT EXECUTED 40005cc0: 01 00 00 00 nop <== NOT EXECUTED 40005cc4: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40005cc8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005ccc: 10 bf ff d8 b 40005c2c <== NOT EXECUTED 40005cd0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40005cd4 : #include int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40005cd4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *node; node = mt_entry->mt_point_node.node_access; 40005cd8: 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 ) 40005cdc: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 40005ce0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40005ce4: 12 80 00 09 bne 40005d08 <== NOT EXECUTED 40005ce8: 01 00 00 00 nop <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) 40005cec: c2 00 a0 58 ld [ %g2 + 0x58 ], %g1 <== NOT EXECUTED 40005cf0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005cf4: 02 80 00 0b be 40005d20 <== NOT EXECUTED 40005cf8: 01 00 00 00 nop <== NOT EXECUTED /* * Set the mt_fs pointer to indicate that there is no longer * a file system mounted to this point. */ node->info.directory.mt_fs = NULL; 40005cfc: c0 20 a0 58 clr [ %g2 + 0x58 ] <== NOT EXECUTED return 0; } 40005d00: 81 c7 e0 08 ret <== NOT EXECUTED 40005d04: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Is the node that we are mounting onto a directory node ? */ if ( node->type != IMFS_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 40005d08: 40 00 83 2a call 400269b0 <__errno> <== NOT EXECUTED 40005d0c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005d10: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 40005d14: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005d18: 81 c7 e0 08 ret <== NOT EXECUTED 40005d1c: 81 e8 00 00 restore <== NOT EXECUTED /* * Did the node indicate that there was a directory mounted here? */ if ( node->info.directory.mt_fs == NULL ) rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */ 40005d20: 40 00 83 24 call 400269b0 <__errno> <== NOT EXECUTED 40005d24: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40005d28: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40005d2c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40005d30: 81 c7 e0 08 ret <== NOT EXECUTED 40005d34: 81 e8 00 00 restore <== NOT EXECUTED 40005d38 : time_t modtime /* IN */ ) { IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 40005d38: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED the_jnode->stat_atime = actime; the_jnode->stat_mtime = modtime; return 0; } 40005d3c: 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; 40005d40: d4 20 60 40 st %o2, [ %g1 + 0x40 ] <== NOT EXECUTED return 0; } 40005d44: 81 c3 e0 08 retl <== NOT EXECUTED 40005d48: d2 20 60 3c st %o1, [ %g1 + 0x3c ] <== NOT EXECUTED 4000376c : void RTEMS_Malloc_Initialize( void *start, size_t length, size_t sbrk_amount ) { 4000376c: 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; 40003770: 03 10 00 6b sethi %hi(0x4001ac00), %g1 * get length worth of memory using sbrk. Make sure we * align the address that we get back. */ starting_address = start; RTEMS_Malloc_Sbrk_amount = sbrk_amount; 40003774: 05 10 00 6b sethi %hi(0x4001ac00), %g2 40003778: 82 10 60 34 or %g1, 0x34, %g1 4000377c: f4 20 a0 2c st %i2, [ %g2 + 0x2c ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40003780: c2 20 7f fc st %g1, [ %g1 + -4 ] 40003784: 82 00 7f fc add %g1, -4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40003788: c2 20 60 08 st %g1, [ %g1 + 8 ] if (!starting_address) { 4000378c: 80 a6 20 00 cmp %i0, 0 40003790: 02 80 00 19 be 400037f4 40003794: c0 20 60 04 clr [ %g1 + 4 ] * of the time under UNIX because zero'ing memory when it is first * given to a process eliminates the chance of a process seeing data * left over from another process. This would be a security violation. */ if ( rtems_cpu_configuration_get_do_zero_of_workspace() ) 40003798: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000379c: c4 00 61 b4 ld [ %g1 + 0x1b4 ], %g2 ! 4001adb4 <_CPU_Table+0x10> 400037a0: 80 a0 a0 00 cmp %g2, 0 400037a4: 32 80 00 0f bne,a 400037e0 400037a8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED void *starting_address, size_t size, uint32_t page_size ) { return _Heap_Initialize( the_heap, starting_address, size, page_size ); 400037ac: 92 10 00 18 mov %i0, %o1 400037b0: 94 10 00 19 mov %i1, %o2 400037b4: 11 10 00 6a sethi %hi(0x4001a800), %o0 400037b8: 96 10 20 08 mov 8, %o3 400037bc: 40 00 13 d7 call 40008718 <_Heap_Initialize> 400037c0: 90 12 23 d4 or %o0, 0x3d4, %o0 &RTEMS_Malloc_Heap, starting_address, length, CPU_HEAP_ALIGNMENT ); if ( !status ) 400037c4: 80 a2 20 00 cmp %o0, 0 400037c8: 02 80 00 04 be 400037d8 400037cc: 01 00 00 00 nop 400037d0: 81 c7 e0 08 ret 400037d4: 81 e8 00 00 restore rtems_fatal_error_occurred( status ); 400037d8: 40 00 10 e8 call 40007b78 <== NOT EXECUTED 400037dc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED * given to a process eliminates the chance of a process seeing data * left over from another process. This would be a security violation. */ if ( rtems_cpu_configuration_get_do_zero_of_workspace() ) memset( starting_address, 0, length ); 400037e0: 92 10 20 00 clr %o1 <== NOT EXECUTED 400037e4: 40 00 30 b8 call 4000fac4 <== NOT EXECUTED 400037e8: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 400037ec: 10 bf ff f1 b 400037b0 <== NOT EXECUTED 400037f0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED starting_address = start; RTEMS_Malloc_Sbrk_amount = sbrk_amount; if (!starting_address) { uaddress = (uintptr_t)sbrk(length); 400037f4: 7f ff f9 38 call 40001cd4 <== NOT EXECUTED 400037f8: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED if (uaddress == (uintptr_t) -1) { 400037fc: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40003800: 02 80 00 0b be 4000382c <== NOT EXECUTED 40003804: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_fatal_error_occurred( RTEMS_NO_MEMORY ); /* DOES NOT RETURN!!! */ } if (uaddress & (CPU_HEAP_ALIGNMENT-1)) { 40003808: 80 8a 20 07 btst 7, %o0 <== NOT EXECUTED 4000380c: 02 bf ff e4 be 4000379c <== NOT EXECUTED 40003810: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED old_address = uaddress; uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1); 40003814: 82 06 20 08 add %i0, 8, %g1 <== NOT EXECUTED 40003818: 82 08 7f f8 and %g1, -8, %g1 <== NOT EXECUTED /* * adjust the length by whatever we aligned by */ length -= uaddress - old_address; 4000381c: 84 20 40 18 sub %g1, %i0, %g2 <== NOT EXECUTED 40003820: b0 10 00 01 mov %g1, %i0 <== NOT EXECUTED 40003824: 10 bf ff dd b 40003798 <== NOT EXECUTED 40003828: b2 26 40 02 sub %i1, %g2, %i1 <== NOT EXECUTED if (!starting_address) { uaddress = (uintptr_t)sbrk(length); if (uaddress == (uintptr_t) -1) { rtems_fatal_error_occurred( RTEMS_NO_MEMORY ); 4000382c: 40 00 10 d3 call 40007b78 <== NOT EXECUTED 40003830: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED /* DOES NOT RETURN!!! */ } if (uaddress & (CPU_HEAP_ALIGNMENT-1)) { old_address = uaddress; uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1); 40003834: 10 bf ff f9 b 40003818 <== NOT EXECUTED 40003838: 82 06 20 08 add %i0, 8, %g1 <== NOT EXECUTED 400038d4 : static rtems_printk_plugin_t print_handler; void Stack_check_Dump_threads_usage( Thread_Control *the_thread ) { 400038d4: 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 ) 400038d8: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 400038dc: 02 80 00 2a be 40003984 <== NOT EXECUTED 400038e0: 2b 10 00 7a sethi %hi(0x4001e800), %l5 <== NOT EXECUTED return; if ( !print_handler ) 400038e4: e6 05 62 04 ld [ %l5 + 0x204 ], %l3 ! 4001ea04 <== NOT EXECUTED 400038e8: 80 a4 e0 00 cmp %l3, 0 <== NOT EXECUTED 400038ec: 02 80 00 26 be 40003984 <== NOT EXECUTED 400038f0: 80 a6 3f ff cmp %i0, -1 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { 400038f4: 02 80 00 33 be 400039c0 <== NOT EXECUTED 400038f8: a2 06 20 d0 add %i0, 0xd0, %l1 <== NOT EXECUTED else return; } else stack = &the_thread->Start.Initial_stack; low = Stack_check_usable_stack_start(stack); 400038fc: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 40003900: 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); 40003904: a0 00 60 10 add %g1, 0x10, %l0 <== NOT EXECUTED size = Stack_check_usable_stack_size(stack); 40003908: a4 00 bf f0 add %g2, -16, %l2 <== NOT EXECUTED high_water_mark = Stack_check_find_high_water_mark(low, size); 4000390c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40003910: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 40003914: 7f ff ff d7 call 40003870 <== NOT EXECUTED 40003918: a8 10 20 00 clr %l4 <== NOT EXECUTED if ( high_water_mark ) 4000391c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003920: 02 80 00 03 be 4000392c <== NOT EXECUTED 40003924: 82 04 00 12 add %l0, %l2, %g1 <== NOT EXECUTED used = Stack_check_Calculate_used( low, size, high_water_mark ); 40003928: a8 20 40 08 sub %g1, %o0, %l4 <== NOT EXECUTED else used = 0; if ( the_thread ) { 4000392c: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40003930: 02 80 00 17 be 4000398c <== NOT EXECUTED 40003934: 03 10 00 7a sethi %hi(0x4001e800), %g1 <== NOT EXECUTED rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003938: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED 4000393c: a0 07 bf f3 add %fp, -13, %l0 <== NOT EXECUTED 40003940: 92 10 20 05 mov 5, %o1 <== NOT EXECUTED 40003944: 40 00 11 3d call 40007e38 <== NOT EXECUTED 40003948: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED name[ 2 ] = 'T'; name[ 3 ] = 'R'; name[ 4 ] = '\0'; } (*print_handler)( 4000394c: 03 10 00 7a sethi %hi(0x4001e800), %g1 <== NOT EXECUTED 40003950: e6 05 62 04 ld [ %l5 + 0x204 ], %l3 <== NOT EXECUTED 40003954: d4 06 20 08 ld [ %i0 + 8 ], %o2 <== NOT EXECUTED 40003958: d0 00 62 00 ld [ %g1 + 0x200 ], %o0 <== NOT EXECUTED 4000395c: da 04 40 00 ld [ %l1 ], %o5 <== NOT EXECUTED 40003960: d8 04 60 04 ld [ %l1 + 4 ], %o4 <== NOT EXECUTED 40003964: 13 10 00 70 sethi %hi(0x4001c000), %o1 <== NOT EXECUTED 40003968: 9a 03 00 0d add %o4, %o5, %o5 <== NOT EXECUTED 4000396c: e4 23 a0 5c st %l2, [ %sp + 0x5c ] <== NOT EXECUTED 40003970: e8 23 a0 60 st %l4, [ %sp + 0x60 ] <== NOT EXECUTED 40003974: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40003978: 9a 03 7f ff add %o5, -1, %o5 <== NOT EXECUTED 4000397c: 9f c4 c0 00 call %l3 <== NOT EXECUTED 40003980: 92 12 61 a0 or %o1, 0x1a0, %o1 <== NOT EXECUTED 40003984: 81 c7 e0 08 ret <== NOT EXECUTED 40003988: 81 e8 00 00 restore <== NOT EXECUTED 4000398c: d0 00 62 00 ld [ %g1 + 0x200 ], %o0 <== NOT EXECUTED if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; name[ 1 ] = 'N'; 40003990: 84 10 20 4e mov 0x4e, %g2 <== NOT EXECUTED used = 0; if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; 40003994: 82 10 20 49 mov 0x49, %g1 <== NOT EXECUTED name[ 1 ] = 'N'; 40003998: c4 2f bf f4 stb %g2, [ %fp + -12 ] <== NOT EXECUTED used = 0; if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; 4000399c: c2 2f bf f3 stb %g1, [ %fp + -13 ] <== NOT EXECUTED name[ 1 ] = 'N'; name[ 2 ] = 'T'; name[ 3 ] = 'R'; 400039a0: 84 10 20 52 mov 0x52, %g2 <== NOT EXECUTED if ( the_thread ) { rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); } else { name[ 0 ] = 'I'; name[ 1 ] = 'N'; name[ 2 ] = 'T'; 400039a4: 82 10 20 54 mov 0x54, %g1 <== NOT EXECUTED name[ 3 ] = 'R'; name[ 4 ] = '\0'; 400039a8: 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'; 400039ac: c2 2f bf f5 stb %g1, [ %fp + -11 ] <== NOT EXECUTED name[ 3 ] = 'R'; 400039b0: c4 2f bf f6 stb %g2, [ %fp + -10 ] <== NOT EXECUTED name[ 4 ] = '\0'; } (*print_handler)( 400039b4: 94 10 3f ff mov -1, %o2 <== NOT EXECUTED 400039b8: 10 bf ff e9 b 4000395c <== NOT EXECUTED 400039bc: a0 07 bf f3 add %fp, -13, %l0 <== NOT EXECUTED /* * XXX HACK to get to interrupt stack */ if (the_thread == (Thread_Control *) -1) { if (Stack_check_Interrupt_stack.area) { 400039c0: 03 10 00 7a sethi %hi(0x4001e800), %g1 <== NOT EXECUTED 400039c4: 82 10 63 94 or %g1, 0x394, %g1 ! 4001eb94 <== NOT EXECUTED 400039c8: c4 00 60 04 ld [ %g1 + 4 ], %g2 <== NOT EXECUTED stack = &Stack_check_Interrupt_stack; the_thread = 0; } else return; 400039cc: 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) { 400039d0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400039d4: 12 bf ff ca bne 400038fc <== NOT EXECUTED 400039d8: b0 10 20 00 clr %i0 <== NOT EXECUTED 400039dc: 81 c7 e0 08 ret <== NOT EXECUTED 400039e0: 81 e8 00 00 restore <== NOT EXECUTED 40003870 : */ void *Stack_check_find_high_water_mark( const void *s, size_t n ) { 40003870: 82 10 00 08 mov %o0, %g1 <== NOT EXECUTED * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; for (ebase = base + length; base < ebase; base++) 40003874: 92 0a 7f fc and %o1, -4, %o1 <== NOT EXECUTED /* * start at lower memory and find first word that does not * match pattern */ base += PATTERN_SIZE_WORDS; 40003878: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED for (ebase = base + length; base < ebase; base++) 4000387c: 92 02 40 08 add %o1, %o0, %o1 <== NOT EXECUTED 40003880: 80 a2 00 09 cmp %o0, %o1 <== NOT EXECUTED 40003884: 3a 80 00 12 bcc,a 400038cc <== NOT EXECUTED 40003888: 90 10 20 00 clr %o0 <== NOT EXECUTED if (*base != U32_PATTERN) 4000388c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 40003890: 03 29 69 69 sethi %hi(0xa5a5a400), %g1 <== NOT EXECUTED 40003894: 82 10 61 a5 or %g1, 0x1a5, %g1 ! a5a5a5a5 <== NOT EXECUTED 40003898: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4000389c: 22 80 00 07 be,a 400038b8 <== NOT EXECUTED 400038a0: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 400038a4: 30 80 00 0a b,a 400038cc <== NOT EXECUTED 400038a8: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400038ac: 12 80 00 08 bne 400038cc <== NOT EXECUTED 400038b0: 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++) 400038b4: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED 400038b8: 80 a2 40 08 cmp %o1, %o0 <== NOT EXECUTED 400038bc: 38 bf ff fb bgu,a 400038a8 <== NOT EXECUTED 400038c0: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED if (*base != U32_PATTERN) return (void *) base; #endif return (void *)0; } 400038c4: 81 c3 e0 08 retl <== NOT EXECUTED 400038c8: 90 10 20 00 clr %o0 <== NOT EXECUTED 400038cc: 81 c3 e0 08 retl <== NOT EXECUTED 400038d0: 01 00 00 00 nop 40003a68 : */ void Stack_check_report_blown_task( Thread_Control *running, boolean pattern_ok ) { 40003a68: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *stack = &running->Start.Initial_stack; printk( 40003a6c: d4 1e 20 08 ldd [ %i0 + 8 ], %o2 <== NOT EXECUTED 40003a70: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40003a74: 11 10 00 70 sethi %hi(0x4001c000), %o0 <== NOT EXECUTED 40003a78: 40 00 06 47 call 40005394 <== NOT EXECUTED 40003a7c: 90 12 22 28 or %o0, 0x228, %o0 ! 4001c228 <== NOT EXECUTED rtems_configuration_get_user_multiprocessing_table()->node ); } #endif printk( 40003a80: d4 06 20 d4 ld [ %i0 + 0xd4 ], %o2 <== NOT EXECUTED 40003a84: c2 06 20 d0 ld [ %i0 + 0xd0 ], %g1 <== NOT EXECUTED 40003a88: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40003a8c: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 40003a90: 94 02 80 01 add %o2, %g1, %o2 <== NOT EXECUTED 40003a94: 11 10 00 70 sethi %hi(0x4001c000), %o0 <== NOT EXECUTED 40003a98: 94 02 bf ff add %o2, -1, %o2 <== NOT EXECUTED 40003a9c: 40 00 06 3e call 40005394 <== NOT EXECUTED 40003aa0: 90 12 22 68 or %o0, 0x268, %o0 <== NOT EXECUTED stack->area, stack->area + stack->size - 1, stack->size ); if ( !pattern_ok ) { 40003aa4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40003aa8: 12 80 00 07 bne 40003ac4 <== NOT EXECUTED 40003aac: 11 10 00 70 sethi %hi(0x4001c000), %o0 <== NOT EXECUTED printk( 40003ab0: d2 06 20 d4 ld [ %i0 + 0xd4 ], %o1 <== NOT EXECUTED 40003ab4: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 40003ab8: 90 12 22 98 or %o0, 0x298, %o0 <== NOT EXECUTED 40003abc: 40 00 06 36 call 40005394 <== NOT EXECUTED 40003ac0: 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 ); 40003ac4: 40 00 14 e5 call 40008e58 <== NOT EXECUTED 40003ac8: 91 e8 20 81 restore %g0, 0x81, %o0 <== NOT EXECUTED 40003acc: 01 00 00 00 nop 40007d34 <_API_extensions_Run_postdriver>: * * _API_extensions_Run_postdriver */ void _API_extensions_Run_postdriver( void ) { 40007d34: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40007d38: 03 10 00 6c sethi %hi(0x4001b000), %g1 40007d3c: e0 00 60 20 ld [ %g1 + 0x20 ], %l0 ! 4001b020 <_API_extensions_List> 40007d40: 82 10 60 20 or %g1, 0x20, %g1 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 40007d44: a2 00 60 04 add %g1, 4, %l1 !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40007d48: 80 a4 00 11 cmp %l0, %l1 40007d4c: 02 80 00 0c be 40007d7c <_API_extensions_Run_postdriver+0x48> 40007d50: 01 00 00 00 nop the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postdriver_hook ) 40007d54: c2 04 20 0c ld [ %l0 + 0xc ], %g1 40007d58: 80 a0 60 00 cmp %g1, 0 40007d5c: 22 80 00 05 be,a 40007d70 <_API_extensions_Run_postdriver+0x3c> 40007d60: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postdriver_hook)(); 40007d64: 9f c0 40 00 call %g1 40007d68: 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 ) { 40007d6c: 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 ) ; 40007d70: 80 a4 00 11 cmp %l0, %l1 40007d74: 32 bf ff f9 bne,a 40007d58 <_API_extensions_Run_postdriver+0x24> 40007d78: c2 04 20 0c ld [ %l0 + 0xc ], %g1 <== NOT EXECUTED 40007d7c: 81 c7 e0 08 ret 40007d80: 81 e8 00 00 restore 40007df0 <_API_extensions_Run_postswitch>: * * _API_extensions_Run_postswitch */ void _API_extensions_Run_postswitch( void ) { 40007df0: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40007df4: 03 10 00 6c sethi %hi(0x4001b000), %g1 40007df8: e0 00 60 20 ld [ %g1 + 0x20 ], %l0 ! 4001b020 <_API_extensions_List> 40007dfc: 82 10 60 20 or %g1, 0x20, %g1 40007e00: a2 00 60 04 add %g1, 4, %l1 !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40007e04: 80 a4 00 11 cmp %l0, %l1 40007e08: 02 80 00 0c be 40007e38 <_API_extensions_Run_postswitch+0x48> 40007e0c: 25 10 00 6b sethi %hi(0x4001ac00), %l2 the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->postswitch_hook ) 40007e10: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40007e14: 80 a0 60 00 cmp %g1, 0 40007e18: 22 80 00 05 be,a 40007e2c <_API_extensions_Run_postswitch+0x3c> 40007e1c: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED (*the_extension->postswitch_hook)( _Thread_Executing ); 40007e20: 9f c0 40 00 call %g1 40007e24: d0 04 a2 6c ld [ %l2 + 0x26c ], %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 ) { 40007e28: 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 ) ; 40007e2c: 80 a4 00 11 cmp %l0, %l1 40007e30: 32 bf ff f9 bne,a 40007e14 <_API_extensions_Run_postswitch+0x24> 40007e34: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 <== NOT EXECUTED 40007e38: 81 c7 e0 08 ret 40007e3c: 81 e8 00 00 restore 40007da0 <_API_extensions_Run_predriver>: * * _API_extensions_Run_predriver */ void _API_extensions_Run_predriver( void ) { 40007da0: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; API_extensions_Control *the_extension; for ( the_node = _API_extensions_List.first ; 40007da4: 03 10 00 6c sethi %hi(0x4001b000), %g1 40007da8: e0 00 60 20 ld [ %g1 + 0x20 ], %l0 ! 4001b020 <_API_extensions_List> 40007dac: 82 10 60 20 or %g1, 0x20, %g1 40007db0: a2 00 60 04 add %g1, 4, %l1 !_Chain_Is_tail( &_API_extensions_List, the_node ) ; 40007db4: 80 a4 00 11 cmp %l0, %l1 40007db8: 02 80 00 0c be 40007de8 <_API_extensions_Run_predriver+0x48> 40007dbc: 01 00 00 00 nop the_node = the_node->next ) { the_extension = (API_extensions_Control *) the_node; if ( the_extension->predriver_hook ) 40007dc0: c2 04 20 08 ld [ %l0 + 8 ], %g1 40007dc4: 80 a0 60 00 cmp %g1, 0 40007dc8: 22 80 00 05 be,a 40007ddc <_API_extensions_Run_predriver+0x3c> 40007dcc: e0 04 00 00 ld [ %l0 ], %l0 (*the_extension->predriver_hook)(); 40007dd0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40007dd4: 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 ) { 40007dd8: 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 ) ; 40007ddc: 80 a4 00 11 cmp %l0, %l1 40007de0: 32 bf ff f9 bne,a 40007dc4 <_API_extensions_Run_predriver+0x24> 40007de4: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40007de8: 81 c7 e0 08 ret 40007dec: 81 e8 00 00 restore 4001509c <_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 ) { 4001509c: 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 ) { 400150a0: 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 ) { 400150a4: 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 ) { 400150a8: 80 a0 40 1a cmp %g1, %i2 400150ac: 0a 80 00 17 bcs 40015108 <_CORE_message_queue_Broadcast+0x6c> 400150b0: 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 ) { 400150b4: c2 04 a0 48 ld [ %l2 + 0x48 ], %g1 400150b8: 80 a0 60 00 cmp %g1, 0 400150bc: 02 80 00 0a be 400150e4 <_CORE_message_queue_Broadcast+0x48> 400150c0: a2 10 20 00 clr %l1 *count = 0; 400150c4: c0 27 40 00 clr [ %i5 ] <== NOT EXECUTED 400150c8: 81 c7 e0 08 ret <== NOT EXECUTED 400150cc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 400150d0: d0 04 20 28 ld [ %l0 + 0x28 ], %o0 400150d4: 40 00 21 ab call 4001d780 400150d8: a2 04 60 01 inc %l1 buffer, waitp->return_argument, size ); *(uint32_t *)the_thread->Wait.return_argument_1 = size; 400150dc: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 400150e0: 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))) { 400150e4: 40 00 0b 94 call 40017f34 <_Thread_queue_Dequeue> 400150e8: 90 10 00 12 mov %l2, %o0 400150ec: 92 10 00 19 mov %i1, %o1 400150f0: a0 10 00 08 mov %o0, %l0 400150f4: 80 a2 20 00 cmp %o0, 0 400150f8: 12 bf ff f6 bne 400150d0 <_CORE_message_queue_Broadcast+0x34> 400150fc: 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; 40015100: e2 27 40 00 st %l1, [ %i5 ] 40015104: b0 10 20 00 clr %i0 return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL; } 40015108: 81 c7 e0 08 ret 4001510c: 81 e8 00 00 restore 400151d0 <_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 ) { 400151d0: 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; 400151d4: 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; 400151d8: 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; 400151dc: 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; 400151e0: c0 26 20 60 clr [ %i0 + 0x60 ] the_message_queue->notify_argument = the_argument; 400151e4: 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)) { 400151e8: 80 8e e0 03 btst 3, %i3 400151ec: 02 80 00 07 be 40015208 <_CORE_message_queue_Initialize+0x38> 400151f0: a0 10 00 1b mov %i3, %l0 allocated_message_size += sizeof(uint32_t); 400151f4: 82 06 e0 04 add %i3, 4, %g1 allocated_message_size &= ~(sizeof(uint32_t) - 1); 400151f8: a0 08 7f fc and %g1, -4, %l0 } if (allocated_message_size < maximum_message_size) 400151fc: 80 a6 c0 10 cmp %i3, %l0 40015200: 18 80 00 09 bgu 40015224 <_CORE_message_queue_Initialize+0x54> 40015204: 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 * 40015208: b6 04 20 14 add %l0, 0x14, %i3 4001520c: 92 10 00 1a mov %i2, %o1 40015210: 40 00 42 31 call 40025ad4 <.umul> 40015214: 90 10 00 1b mov %i3, %o0 (allocated_message_size + sizeof(CORE_message_queue_Buffer_control)); if (message_buffering_required < allocated_message_size) 40015218: 80 a2 00 10 cmp %o0, %l0 4001521c: 1a 80 00 04 bcc 4001522c <_CORE_message_queue_Initialize+0x5c> 40015220: 92 10 00 08 mov %o0, %o1 STATES_WAITING_FOR_MESSAGE, CORE_MESSAGE_QUEUE_STATUS_TIMEOUT ); return TRUE; } 40015224: 81 c7 e0 08 ret <== NOT EXECUTED 40015228: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4001522c: 11 10 00 d1 sethi %hi(0x40034400), %o0 40015230: 40 00 02 20 call 40015ab0 <_Heap_Allocate> 40015234: 90 12 23 ac or %o0, 0x3ac, %o0 ! 400347ac <_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) 40015238: 80 a2 20 00 cmp %o0, 0 4001523c: 02 bf ff fa be 40015224 <_CORE_message_queue_Initialize+0x54> 40015240: d0 26 20 5c st %o0, [ %i0 + 0x5c ] /* * Initialize the pool of inactive messages, pending messages, * and set of waiting threads. */ _Chain_Initialize ( 40015244: 92 10 00 08 mov %o0, %o1 40015248: 94 10 00 1a mov %i2, %o2 4001524c: 90 06 20 68 add %i0, 0x68, %o0 40015250: 7f ff ff 7b call 4001503c <_Chain_Initialize> 40015254: 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( 40015258: c2 06 40 00 ld [ %i1 ], %g1 4001525c: 84 06 20 50 add %i0, 0x50, %g2 40015260: 82 18 60 01 xor %g1, 1, %g1 40015264: 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); 40015268: 82 06 20 54 add %i0, 0x54, %g1 the_chain->permanent_null = NULL; 4001526c: c0 26 20 54 clr [ %i0 + 0x54 ] 40015270: 90 10 00 18 mov %i0, %o0 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40015274: c2 26 20 50 st %g1, [ %i0 + 0x50 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40015278: c4 26 20 58 st %g2, [ %i0 + 0x58 ] 4001527c: 92 60 3f ff subx %g0, -1, %o1 40015280: 94 10 20 80 mov 0x80, %o2 40015284: 96 10 20 06 mov 6, %o3 40015288: 40 00 0c a7 call 40018524 <_Thread_queue_Initialize> 4001528c: b0 10 20 01 mov 1, %i0 40015290: 81 c7 e0 08 ret 40015294: 81 e8 00 00 restore 4001a3e8 <_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 ) { 4001a3e8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; boolean notify = FALSE; the_message->priority = submit_type; switch ( submit_type ) { 4001a3ec: 03 20 00 00 sethi %hi(0x80000000), %g1 4001a3f0: 80 a6 80 01 cmp %i2, %g1 4001a3f4: 02 80 00 40 be 4001a4f4 <_CORE_message_queue_Insert_message+0x10c> 4001a3f8: f4 26 60 08 st %i2, [ %i1 + 8 ] 4001a3fc: 82 00 7c 00 add %g1, -1024, %g1 4001a400: 82 10 63 ff or %g1, 0x3ff, %g1 4001a404: 80 a6 80 01 cmp %i2, %g1 4001a408: 02 80 00 29 be 4001a4ac <_CORE_message_queue_Insert_message+0xc4> 4001a40c: 84 06 20 54 add %i0, 0x54, %g2 CORE_message_queue_Buffer_control *this_message; Chain_Node *the_node; Chain_Control *the_header; the_header = &the_message_queue->Pending_messages; the_node = the_header->first; 4001a410: e0 06 20 50 ld [ %i0 + 0x50 ], %l0 <== NOT EXECUTED while ( !_Chain_Is_tail( the_header, the_node ) ) { 4001a414: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 4001a418: 32 80 00 21 bne,a 4001a49c <_CORE_message_queue_Insert_message+0xb4> <== NOT EXECUTED 4001a41c: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED continue; } break; } _ISR_Disable( level ); 4001a420: 7f ff a0 f4 call 400027f0 <== NOT EXECUTED 4001a424: 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 ); 4001a428: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED } break; } _ISR_Disable( level ); if ( the_message_queue->number_of_pending_messages++ == 0 ) 4001a42c: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 <== NOT EXECUTED ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 4001a430: c6 00 40 00 ld [ %g1 ], %g3 <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 4001a434: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED before_node = after_node->next; after_node->next = the_node; 4001a438: f2 20 40 00 st %i1, [ %g1 ] <== NOT EXECUTED 4001a43c: 84 00 a0 01 inc %g2 <== NOT EXECUTED the_node->next = before_node; before_node->previous = the_node; 4001a440: f2 20 e0 04 st %i1, [ %g3 + 4 ] <== NOT EXECUTED 4001a444: 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; 4001a448: c6 26 40 00 st %g3, [ %i1 ] <== NOT EXECUTED 4001a44c: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4001a450: c4 26 20 48 st %g2, [ %i0 + 0x48 ] <== NOT EXECUTED 4001a454: a0 60 3f ff subx %g0, -1, %l0 <== NOT EXECUTED notify = TRUE; _Chain_Insert_unprotected( the_node->previous, &the_message->Node ); _ISR_Enable( level ); 4001a458: 7f ff a0 ea call 40002800 <== NOT EXECUTED 4001a45c: 01 00 00 00 nop <== NOT EXECUTED * According to POSIX, does this happen before or after the message * is actually enqueued. It is logical to think afterwards, because * the message is actually in the queue at this point. */ if ( notify && the_message_queue->notify_handler ) 4001a460: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4001a464: 02 80 00 08 be 4001a484 <_CORE_message_queue_Insert_message+0x9c> 4001a468: 01 00 00 00 nop 4001a46c: c2 06 20 60 ld [ %i0 + 0x60 ], %g1 4001a470: 80 a0 60 00 cmp %g1, 0 4001a474: 02 80 00 04 be 4001a484 <_CORE_message_queue_Insert_message+0x9c> 4001a478: 01 00 00 00 nop (*the_message_queue->notify_handler)( the_message_queue->notify_argument ); 4001a47c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001a480: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 4001a484: 81 c7 e0 08 ret 4001a488: 81 e8 00 00 restore Chain_Node *the_node; Chain_Control *the_header; the_header = &the_message_queue->Pending_messages; the_node = the_header->first; while ( !_Chain_Is_tail( the_header, the_node ) ) { 4001a48c: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 4001a490: 02 bf ff e4 be 4001a420 <_CORE_message_queue_Insert_message+0x38> <== NOT EXECUTED 4001a494: 01 00 00 00 nop <== NOT EXECUTED this_message = (CORE_message_queue_Buffer_control *) the_node; if ( this_message->priority <= the_message->priority ) { 4001a498: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4001a49c: 80 a6 80 01 cmp %i2, %g1 <== NOT EXECUTED 4001a4a0: 36 bf ff fb bge,a 4001a48c <_CORE_message_queue_Insert_message+0xa4> <== NOT EXECUTED 4001a4a4: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 4001a4a8: 30 bf ff de b,a 4001a420 <_CORE_message_queue_Insert_message+0x38> <== NOT EXECUTED the_message->priority = submit_type; switch ( submit_type ) { case CORE_MESSAGE_QUEUE_SEND_REQUEST: _ISR_Disable( level ); 4001a4ac: 7f ff a0 d1 call 400027f0 4001a4b0: 01 00 00 00 nop if ( the_message_queue->number_of_pending_messages++ == 0 ) 4001a4b4: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4001a4b8: 82 06 20 54 add %i0, 0x54, %g1 4001a4bc: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 4001a4c0: c6 06 20 58 ld [ %i0 + 0x58 ], %g3 the_chain->last = the_node; 4001a4c4: f2 26 20 58 st %i1, [ %i0 + 0x58 ] 4001a4c8: 84 00 a0 01 inc %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 4001a4cc: c6 26 60 04 st %g3, [ %i1 + 4 ] 4001a4d0: 82 18 a0 01 xor %g2, 1, %g1 Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 4001a4d4: f2 20 c0 00 st %i1, [ %g3 ] 4001a4d8: 80 a0 00 01 cmp %g0, %g1 4001a4dc: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 4001a4e0: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Append_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 4001a4e4: 7f ff a0 c7 call 40002800 4001a4e8: 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 ) 4001a4ec: 10 bf ff de b 4001a464 <_CORE_message_queue_Insert_message+0x7c> 4001a4f0: 80 a4 20 00 cmp %l0, 0 notify = TRUE; _CORE_message_queue_Append_unprotected(the_message_queue, the_message); _ISR_Enable( level ); break; case CORE_MESSAGE_QUEUE_URGENT_REQUEST: _ISR_Disable( level ); 4001a4f4: 7f ff a0 bf call 400027f0 4001a4f8: 01 00 00 00 nop ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 4001a4fc: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 if ( the_message_queue->number_of_pending_messages++ == 0 ) 4001a500: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head( Chain_Control *the_chain ) { return (Chain_Node *) the_chain; 4001a504: 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; 4001a508: f2 26 20 50 st %i1, [ %i0 + 0x50 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 4001a50c: c2 26 60 04 st %g1, [ %i1 + 4 ] 4001a510: 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; 4001a514: f2 20 e0 04 st %i1, [ %g3 + 4 ] 4001a518: 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; 4001a51c: c6 26 40 00 st %g3, [ %i1 ] 4001a520: 80 a0 00 01 cmp %g0, %g1 4001a524: c4 26 20 48 st %g2, [ %i0 + 0x48 ] 4001a528: a0 60 3f ff subx %g0, -1, %l0 notify = TRUE; _CORE_message_queue_Prepend_unprotected(the_message_queue, the_message); _ISR_Enable( level ); 4001a52c: 7f ff a0 b5 call 40002800 4001a530: 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 ) 4001a534: 10 bf ff cc b 4001a464 <_CORE_message_queue_Insert_message+0x7c> 4001a538: 80 a4 20 00 cmp %l0, 0 4001742c <_CORE_message_queue_Seize>: void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 4001742c: 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; 40017430: 25 10 00 b1 sethi %hi(0x4002c400), %l2 40017434: e2 04 a0 ec ld [ %l2 + 0xec ], %l1 ! 4002c4ec <_Thread_Executing> void *buffer, size_t *size, boolean wait, Watchdog_Interval timeout ) { 40017438: 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 ); 4001743c: 7f ff ac ed call 400027f0 40017440: c0 24 60 34 clr [ %l1 + 0x34 ] 40017444: 88 10 00 08 mov %o0, %g4 if ( the_message_queue->number_of_pending_messages != 0 ) { 40017448: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 4001744c: 80 a0 60 00 cmp %g1, 0 40017450: 02 80 00 23 be 400174dc <_CORE_message_queue_Seize+0xb0> 40017454: 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)); 40017458: c6 06 20 50 ld [ %i0 + 0x50 ], %g3 the_message_queue->number_of_pending_messages -= 1; 4001745c: 82 00 7f ff add %g1, -1, %g1 40017460: 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)) 40017464: 84 06 20 54 add %i0, 0x54, %g2 40017468: 80 a0 c0 02 cmp %g3, %g2 4001746c: 12 80 00 24 bne 400174fc <_CORE_message_queue_Seize+0xd0> 40017470: b2 10 20 00 clr %i1 the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); 40017474: 7f ff ac e3 call 40002800 40017478: 90 10 00 04 mov %g4, %o0 *size = the_message->Contents.size; 4001747c: d4 06 60 0c ld [ %i1 + 0xc ], %o2 _Thread_Executing->Wait.count = the_message->priority; 40017480: c4 04 a0 ec ld [ %l2 + 0xec ], %g2 the_message_queue->number_of_pending_messages -= 1; the_message = _CORE_message_queue_Get_pending_message( the_message_queue ); _ISR_Enable( level ); *size = the_message->Contents.size; 40017484: d4 26 c0 00 st %o2, [ %i3 ] _Thread_Executing->Wait.count = the_message->priority; 40017488: c2 06 60 08 ld [ %i1 + 8 ], %g1 4001748c: a2 06 60 10 add %i1, 0x10, %l1 40017490: c2 20 a0 24 st %g1, [ %g2 + 0x24 ] const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 40017494: 92 10 00 11 mov %l1, %o1 40017498: 40 00 13 00 call 4001c098 4001749c: 90 10 00 1a mov %i2, %o0 * * NOTE: If we note that the queue was not full before this receive, * then we can avoid this dequeue. */ the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); 400174a0: 7f ff e9 3e call 40011998 <_Thread_queue_Dequeue> 400174a4: 90 10 00 10 mov %l0, %o0 if ( !the_thread ) { 400174a8: 80 a2 20 00 cmp %o0, 0 400174ac: 02 80 00 24 be 4001753c <_CORE_message_queue_Seize+0x110> 400174b0: 01 00 00 00 nop * puts the messages in the message queue on behalf of the * waiting task. */ the_message->priority = the_thread->Wait.count; the_message->Contents.size = (uint32_t)the_thread->Wait.option; 400174b4: d4 02 20 30 ld [ %o0 + 0x30 ], %o2 <== NOT EXECUTED * There was a thread waiting to send a message. This code * puts the messages in the message queue on behalf of the * waiting task. */ the_message->priority = the_thread->Wait.count; 400174b8: c2 02 20 24 ld [ %o0 + 0x24 ], %g1 <== NOT EXECUTED 400174bc: d2 02 20 28 ld [ %o0 + 0x28 ], %o1 <== NOT EXECUTED the_message->Contents.size = (uint32_t)the_thread->Wait.option; 400174c0: 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; 400174c4: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED 400174c8: 40 00 12 f4 call 4001c098 <== NOT EXECUTED 400174cc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED the_thread->Wait.return_argument, the_message->Contents.buffer, the_message->Contents.size ); _CORE_message_queue_Insert_message( 400174d0: f4 06 60 08 ld [ %i1 + 8 ], %i2 <== NOT EXECUTED 400174d4: 40 00 0b c5 call 4001a3e8 <_CORE_message_queue_Insert_message> <== NOT EXECUTED 400174d8: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED the_message->priority ); return; } if ( !wait ) { 400174dc: 12 80 00 0e bne 40017514 <_CORE_message_queue_Seize+0xe8> 400174e0: 82 10 20 01 mov 1, %g1 _ISR_Enable( level ); 400174e4: 7f ff ac c7 call 40002800 400174e8: 01 00 00 00 nop executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT; 400174ec: 82 10 20 04 mov 4, %g1 ! 4 400174f0: 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 ); } 400174f4: 81 c7 e0 08 ret 400174f8: 81 e8 00 00 restore { Chain_Node *return_node; Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; 400174fc: c4 00 c0 00 ld [ %g3 ], %g2 the_chain->first = new_first; new_first->previous = _Chain_Head(the_chain); 40017500: 82 06 20 50 add %i0, 0x50, %g1 Chain_Node *return_node; Chain_Node *new_first; return_node = the_chain->first; new_first = return_node->next; the_chain->first = new_first; 40017504: c4 26 20 50 st %g2, [ %i0 + 0x50 ] new_first->previous = _Chain_Head(the_chain); 40017508: b2 10 00 03 mov %g3, %i1 4001750c: 10 bf ff da b 40017474 <_CORE_message_queue_Seize+0x48> 40017510: c2 20 a0 04 st %g1, [ %g2 + 4 ] _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); executing->Wait.queue = &the_message_queue->Wait_queue; executing->Wait.id = id; executing->Wait.return_argument = buffer; executing->Wait.return_argument_1 = (void *)size; 40017514: 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; 40017518: f0 24 60 44 st %i0, [ %l1 + 0x44 ] executing->Wait.id = id; 4001751c: f2 24 60 20 st %i1, [ %l1 + 0x20 ] executing->Wait.return_argument = buffer; 40017520: 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; 40017524: 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 ); 40017528: 7f ff ac b6 call 40002800 4001752c: 35 10 00 48 sethi %hi(0x40012000), %i2 _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 40017530: b2 10 00 1d mov %i5, %i1 40017534: 7f ff e9 87 call 40011b50 <_Thread_queue_Enqueue_with_handler> 40017538: 95 ee a0 90 restore %i2, 0x90, %o2 RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer ( CORE_message_queue_Control *the_message_queue, CORE_message_queue_Buffer_control *the_message ) { _Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node ); 4001753c: 7f ff de d6 call 4000f094 <_Chain_Append> 40017540: 91 ec 20 68 restore %l0, 0x68, %o0 40017544: 01 00 00 00 nop 40017548 <_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 ) { 40017548: 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 ) { 4001754c: 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 ) { 40017550: 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 ) { 40017554: 80 a0 40 1a cmp %g1, %i2 40017558: 0a 80 00 22 bcs 400175e0 <_CORE_message_queue_Submit+0x98> 4001755c: 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 ) { 40017560: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 40017564: 80 a0 a0 00 cmp %g2, 0 40017568: 02 80 00 22 be 400175f0 <_CORE_message_queue_Submit+0xa8> 4001756c: 01 00 00 00 nop /* * No one waiting on the message queue at this time, so attempt to * queue the message up for a future receive. */ if ( the_message_queue->number_of_pending_messages < 40017570: c2 04 60 44 ld [ %l1 + 0x44 ], %g1 40017574: 80 a0 40 02 cmp %g1, %g2 40017578: 18 80 00 2b bgu 40017624 <_CORE_message_queue_Submit+0xdc> 4001757c: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 * No message buffers were available so we may need to return an * overflow error or block the sender until the message is placed * on the queue. */ if ( !wait ) { 40017580: 80 a0 60 00 cmp %g1, 0 40017584: 02 80 00 17 be 400175e0 <_CORE_message_queue_Submit+0x98> 40017588: 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() ) { 4001758c: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED 40017590: c4 00 60 d4 ld [ %g1 + 0xd4 ], %g2 ! 4002c4d4 <_ISR_Nest_level> <== NOT EXECUTED 40017594: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40017598: 12 80 00 14 bne 400175e8 <_CORE_message_queue_Submit+0xa0> <== NOT EXECUTED 4001759c: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED */ { Thread_Control *executing = _Thread_Executing; _ISR_Disable( level ); 400175a0: 7f ff ac 94 call 400027f0 <== NOT EXECUTED 400175a4: e0 00 60 ec ld [ %g1 + 0xec ], %l0 ! 4002c4ec <_Thread_Executing> <== NOT EXECUTED 400175a8: 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; 400175ac: 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; 400175b0: f6 24 20 20 st %i3, [ %l0 + 0x20 ] <== NOT EXECUTED executing->Wait.return_argument = buffer; 400175b4: f2 24 20 28 st %i1, [ %l0 + 0x28 ] <== NOT EXECUTED executing->Wait.option = size; 400175b8: 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; 400175bc: e2 24 20 44 st %l1, [ %l0 + 0x44 ] <== NOT EXECUTED 400175c0: 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 ); 400175c4: 7f ff ac 8f call 40002800 <== NOT EXECUTED 400175c8: b0 10 20 07 mov 7, %i0 <== NOT EXECUTED _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); 400175cc: d2 07 a0 60 ld [ %fp + 0x60 ], %o1 <== NOT EXECUTED 400175d0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400175d4: 15 10 00 48 sethi %hi(0x40012000), %o2 <== NOT EXECUTED 400175d8: 7f ff e9 5e call 40011b50 <_Thread_queue_Enqueue_with_handler> <== NOT EXECUTED 400175dc: 94 12 a0 90 or %o2, 0x90, %o2 ! 40012090 <_Thread_queue_Timeout> <== NOT EXECUTED 400175e0: 81 c7 e0 08 ret 400175e4: 81 e8 00 00 restore } return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT; } 400175e8: 81 c7 e0 08 ret <== NOT EXECUTED 400175ec: 91 e8 20 03 restore %g0, 3, %o0 <== NOT EXECUTED /* * Is there a thread currently waiting on this message queue? */ if ( the_message_queue->number_of_pending_messages == 0 ) { the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); 400175f0: 7f ff e8 ea call 40011998 <_Thread_queue_Dequeue> 400175f4: 90 10 00 11 mov %l1, %o0 if ( the_thread ) { 400175f8: a0 92 20 00 orcc %o0, 0, %l0 400175fc: 02 80 00 1b be 40017668 <_CORE_message_queue_Submit+0x120> 40017600: 92 10 00 19 mov %i1, %o1 const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 40017604: d0 04 20 28 ld [ %l0 + 0x28 ], %o0 40017608: 40 00 12 a4 call 4001c098 4001760c: 94 10 00 1a mov %i2, %o2 _CORE_message_queue_Copy_buffer( buffer, the_thread->Wait.return_argument, size ); *(size_t *)the_thread->Wait.return_argument_1 = size; 40017610: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 the_thread->Wait.count = submit_type; 40017614: 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; 40017618: f4 20 40 00 st %i2, [ %g1 ] the_thread->Wait.count = submit_type; 4001761c: 81 c7 e0 08 ret 40017620: 91 e8 20 00 restore %g0, 0, %o0 RTEMS_INLINE_ROUTINE CORE_message_queue_Buffer_control * _CORE_message_queue_Allocate_message_buffer ( CORE_message_queue_Control *the_message_queue ) { return (CORE_message_queue_Buffer_control *) 40017624: 7f ff de a8 call 4000f0c4 <_Chain_Get> 40017628: 90 04 60 68 add %l1, 0x68, %o0 /* * NOTE: If the system is consistent, this error should never occur. */ if ( !the_message ) { 4001762c: a0 92 20 00 orcc %o0, 0, %l0 40017630: 02 bf ff ee be 400175e8 <_CORE_message_queue_Submit+0xa0> 40017634: 92 10 00 19 mov %i1, %o1 const void *source, void *destination, size_t size ) { memcpy(destination, source, size); 40017638: 94 10 00 1a mov %i2, %o2 4001763c: 40 00 12 97 call 4001c098 40017640: 90 04 20 10 add %l0, 0x10, %o0 size ); the_message->Contents.size = size; the_message->priority = submit_type; _CORE_message_queue_Insert_message( 40017644: 90 10 00 11 mov %l1, %o0 _CORE_message_queue_Copy_buffer( buffer, the_message->Contents.buffer, size ); the_message->Contents.size = size; 40017648: f4 24 20 0c st %i2, [ %l0 + 0xc ] the_message->priority = submit_type; 4001764c: fa 24 20 08 st %i5, [ %l0 + 8 ] _CORE_message_queue_Insert_message( 40017650: 92 10 00 10 mov %l0, %o1 40017654: 94 10 00 1d mov %i5, %o2 40017658: 40 00 0b 64 call 4001a3e8 <_CORE_message_queue_Insert_message> 4001765c: b0 10 20 00 clr %i0 40017660: 81 c7 e0 08 ret 40017664: 81 e8 00 00 restore * Is there a thread currently waiting on this message queue? */ if ( the_message_queue->number_of_pending_messages == 0 ) { the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue ); if ( the_thread ) { 40017668: 10 bf ff c2 b 40017570 <_CORE_message_queue_Submit+0x28> 4001766c: c4 04 60 48 ld [ %l1 + 0x48 ], %g2 40007ecc <_CORE_mutex_Initialize>: CORE_mutex_Status _CORE_mutex_Initialize( CORE_mutex_Control *the_mutex, CORE_mutex_Attributes *the_mutex_attributes, uint32_t initial_lock ) { 40007ecc: 9d e3 bf 98 save %sp, -104, %sp /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40007ed0: c2 06 40 00 ld [ %i1 ], %g1 CORE_mutex_Status _CORE_mutex_Initialize( CORE_mutex_Control *the_mutex, CORE_mutex_Attributes *the_mutex_attributes, uint32_t initial_lock ) { 40007ed4: 90 10 00 18 mov %i0, %o0 /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40007ed8: c2 26 20 40 st %g1, [ %i0 + 0x40 ] 40007edc: c4 06 60 04 ld [ %i1 + 4 ], %g2 the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { 40007ee0: 80 a6 a0 00 cmp %i2, 0 /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40007ee4: c4 26 20 44 st %g2, [ %i0 + 0x44 ] 40007ee8: c8 06 60 08 ld [ %i1 + 8 ], %g4 40007eec: c8 26 20 48 st %g4, [ %i0 + 0x48 ] 40007ef0: da 06 60 0c ld [ %i1 + 0xc ], %o5 the_mutex->lock = initial_lock; 40007ef4: f4 26 20 50 st %i2, [ %i0 + 0x50 ] /* Add this to the RTEMS environment later ????????? rtems_assert( initial_lock == CORE_MUTEX_LOCKED || initial_lock == CORE_MUTEX_UNLOCKED ); */ the_mutex->Attributes = *the_mutex_attributes; 40007ef8: da 26 20 4c st %o5, [ %i0 + 0x4c ] the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { 40007efc: 12 80 00 1c bne 40007f6c <_CORE_mutex_Initialize+0xa0> 40007f00: c0 26 20 58 clr [ %i0 + 0x58 ] the_mutex->nest_count = 1; the_mutex->holder = _Thread_Executing; 40007f04: 19 10 00 6b sethi %hi(0x4001ac00), %o4 40007f08: c6 03 22 6c ld [ %o4 + 0x26c ], %g3 ! 4001ae6c <_Thread_Executing> the_mutex->Attributes = *the_mutex_attributes; the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { the_mutex->nest_count = 1; 40007f0c: 82 10 20 01 mov 1, %g1 40007f10: c2 26 20 54 st %g1, [ %i0 + 0x54 ] the_mutex->holder = _Thread_Executing; the_mutex->holder_id = _Thread_Executing->Object.id; 40007f14: c4 00 e0 08 ld [ %g3 + 8 ], %g2 the_mutex->lock = initial_lock; the_mutex->blocked_count = 0; if ( initial_lock == CORE_MUTEX_LOCKED ) { the_mutex->nest_count = 1; the_mutex->holder = _Thread_Executing; 40007f18: c6 26 20 5c st %g3, [ %i0 + 0x5c ] the_mutex->holder_id = _Thread_Executing->Object.id; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40007f1c: 80 a1 20 02 cmp %g4, 2 40007f20: 12 80 00 1f bne 40007f9c <_CORE_mutex_Initialize+0xd0> 40007f24: c4 26 20 60 st %g2, [ %i0 + 0x60 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < 40007f28: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 40007f2c: 80 a0 40 0d cmp %g1, %o5 40007f30: 0a 80 00 0d bcs 40007f64 <_CORE_mutex_Initialize+0x98> 40007f34: b0 10 20 06 mov 6, %i0 the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; 40007f38: c4 03 22 6c ld [ %o4 + 0x26c ], %g2 the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40007f3c: 94 10 24 00 mov 0x400, %o2 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; 40007f40: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40007f44: 96 10 20 05 mov 5, %o3 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; 40007f48: 82 00 60 01 inc %g1 40007f4c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40007f50: c2 06 60 08 ld [ %i1 + 8 ], %g1 40007f54: b0 10 20 00 clr %i0 40007f58: 80 a0 00 01 cmp %g0, %g1 40007f5c: 40 00 0b 60 call 4000acdc <_Thread_queue_Initialize> 40007f60: 92 40 20 00 addx %g0, 0, %o1 STATES_WAITING_FOR_MUTEX, CORE_MUTEX_TIMEOUT ); return CORE_MUTEX_STATUS_SUCCESSFUL; } 40007f64: 81 c7 e0 08 ret 40007f68: 81 e8 00 00 restore the_mutex->nest_count = 0; the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40007f6c: c2 06 60 08 ld [ %i1 + 8 ], %g1 if ( _Thread_Executing->current_priority < the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; } else { the_mutex->nest_count = 0; 40007f70: c0 26 20 54 clr [ %i0 + 0x54 ] the_mutex->holder = NULL; the_mutex->holder_id = 0; } _Thread_queue_Initialize( 40007f74: 80 a0 00 01 cmp %g0, %g1 the_mutex->Attributes.priority_ceiling ) return CORE_MUTEX_STATUS_CEILING_VIOLATED; _Thread_Executing->resource_count++; } else { the_mutex->nest_count = 0; the_mutex->holder = NULL; 40007f78: c0 26 20 5c clr [ %i0 + 0x5c ] the_mutex->holder_id = 0; 40007f7c: c0 26 20 60 clr [ %i0 + 0x60 ] } _Thread_queue_Initialize( 40007f80: 92 40 20 00 addx %g0, 0, %o1 40007f84: 94 10 24 00 mov 0x400, %o2 40007f88: 96 10 20 05 mov 5, %o3 40007f8c: 40 00 0b 54 call 4000acdc <_Thread_queue_Initialize> 40007f90: b0 10 20 00 clr %i0 STATES_WAITING_FOR_MUTEX, CORE_MUTEX_TIMEOUT ); return CORE_MUTEX_STATUS_SUCCESSFUL; } 40007f94: 81 c7 e0 08 ret 40007f98: 81 e8 00 00 restore if ( initial_lock == CORE_MUTEX_LOCKED ) { the_mutex->nest_count = 1; the_mutex->holder = _Thread_Executing; the_mutex->holder_id = _Thread_Executing->Object.id; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40007f9c: 80 a1 20 03 cmp %g4, 3 40007fa0: 32 bf ff e7 bne,a 40007f3c <_CORE_mutex_Initialize+0x70> 40007fa4: c4 03 22 6c ld [ %o4 + 0x26c ], %g2 _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) if ( _Thread_Executing->current_priority < 40007fa8: 10 bf ff e1 b 40007f2c <_CORE_mutex_Initialize+0x60> <== NOT EXECUTED 40007fac: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 <== NOT EXECUTED 40007fb0 <_CORE_mutex_Seize_interrupt_blocking>: void _CORE_mutex_Seize_interrupt_blocking( CORE_mutex_Control *the_mutex, Watchdog_Interval timeout ) { 40007fb0: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 40007fb4: c4 06 20 48 ld [ %i0 + 0x48 ], %g2 Watchdog_Interval timeout ) { Thread_Control *executing; executing = _Thread_Executing; 40007fb8: 03 10 00 6b sethi %hi(0x4001ac00), %g1 if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { 40007fbc: 80 a0 a0 02 cmp %g2, 2 40007fc0: 12 80 00 08 bne 40007fe0 <_CORE_mutex_Seize_interrupt_blocking+0x30> 40007fc4: d2 00 62 6c ld [ %g1 + 0x26c ], %o1 if ( the_mutex->holder->current_priority > executing->current_priority ) { 40007fc8: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 40007fcc: d2 02 60 14 ld [ %o1 + 0x14 ], %o1 40007fd0: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40007fd4: 80 a0 40 09 cmp %g1, %o1 40007fd8: 18 80 00 16 bgu 40008030 <_CORE_mutex_Seize_interrupt_blocking+0x80> 40007fdc: 01 00 00 00 nop FALSE ); } } the_mutex->blocked_count++; 40007fe0: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40007fe4: 90 10 00 18 mov %i0, %o0 FALSE ); } } the_mutex->blocked_count++; 40007fe8: 82 00 60 01 inc %g1 _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40007fec: 92 10 00 19 mov %i1, %o1 FALSE ); } } the_mutex->blocked_count++; 40007ff0: c2 26 20 58 st %g1, [ %i0 + 0x58 ] _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout ); 40007ff4: 15 10 00 2b sethi %hi(0x4000ac00), %o2 40007ff8: 40 00 0a 2b call 4000a8a4 <_Thread_queue_Enqueue_with_handler> 40007ffc: 94 12 a1 e4 or %o2, 0x1e4, %o2 ! 4000ade4 <_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 ) 40008000: 05 10 00 6b sethi %hi(0x4001ac00), %g2 40008004: c2 00 a1 90 ld [ %g2 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 40008008: 82 00 7f ff add %g1, -1, %g1 4000800c: c2 20 a1 90 st %g1, [ %g2 + 0x190 ] 40008010: c6 00 a1 90 ld [ %g2 + 0x190 ], %g3 40008014: 80 a0 e0 00 cmp %g3, 0 40008018: 02 80 00 04 be 40008028 <_CORE_mutex_Seize_interrupt_blocking+0x78> 4000801c: 01 00 00 00 nop 40008020: 81 c7 e0 08 ret <== NOT EXECUTED 40008024: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40008028: 40 00 08 af call 4000a2e4 <_Thread_Dispatch> 4000802c: 81 e8 00 00 restore Thread_Control *executing; executing = _Thread_Executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { if ( the_mutex->holder->current_priority > executing->current_priority ) { _Thread_Change_priority( 40008030: 40 00 07 89 call 40009e54 <_Thread_Change_priority> 40008034: 94 10 20 00 clr %o2 FALSE ); } } the_mutex->blocked_count++; 40008038: 10 bf ff eb b 40007fe4 <_CORE_mutex_Seize_interrupt_blocking+0x34> 4000803c: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 40008040 <_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 ) { 40008040: 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 ) { 40008044: c2 06 20 44 ld [ %i0 + 0x44 ], %g1 CORE_mutex_Status _CORE_mutex_Surrender( CORE_mutex_Control *the_mutex, Objects_Id id, CORE_mutex_API_mp_support_callout api_mutex_mp_support ) { 40008048: a0 10 00 18 mov %i0, %l0 * allowed when the mutex in quetion is FIFO or simple Priority * discipline. But Priority Ceiling or Priority Inheritance mutexes * must be released by the thread which acquired them. */ if ( the_mutex->Attributes.only_owner_release ) { 4000804c: 80 a0 60 00 cmp %g1, 0 40008050: 02 80 00 07 be 4000806c <_CORE_mutex_Surrender+0x2c> 40008054: d0 06 20 5c ld [ %i0 + 0x5c ], %o0 if ( !_Thread_Is_executing( holder ) ) 40008058: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000805c: c4 00 62 6c ld [ %g1 + 0x26c ], %g2 ! 4001ae6c <_Thread_Executing> 40008060: 80 a2 00 02 cmp %o0, %g2 40008064: 12 80 00 49 bne 40008188 <_CORE_mutex_Surrender+0x148> 40008068: b0 10 20 03 mov 3, %i0 return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE; } /* XXX already unlocked -- not right status */ if ( !the_mutex->nest_count ) 4000806c: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 40008070: 80 a0 60 00 cmp %g1, 0 40008074: 22 80 00 45 be,a 40008188 <_CORE_mutex_Surrender+0x148> 40008078: b0 10 20 00 clr %i0 return CORE_MUTEX_STATUS_SUCCESSFUL; the_mutex->nest_count--; 4000807c: 82 00 7f ff add %g1, -1, %g1 if ( the_mutex->nest_count != 0 ) { 40008080: 80 a0 60 00 cmp %g1, 0 40008084: 02 80 00 09 be 400080a8 <_CORE_mutex_Surrender+0x68> 40008088: c2 24 20 54 st %g1, [ %l0 + 0x54 ] switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4000808c: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 40008090: 80 a0 60 00 cmp %g1, 0 40008094: 02 80 00 3d be 40008188 <_CORE_mutex_Surrender+0x148> 40008098: b0 10 20 00 clr %i0 4000809c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400080a0: 02 80 00 3a be 40008188 <_CORE_mutex_Surrender+0x148> <== NOT EXECUTED 400080a4: b0 10 20 02 mov 2, %i0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 400080a8: c4 04 20 48 ld [ %l0 + 0x48 ], %g2 /* * Formally release the mutex before possibly transferring it to a * blocked thread. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400080ac: 80 a0 a0 02 cmp %g2, 2 400080b0: 22 80 00 2a be,a 40008158 <_CORE_mutex_Surrender+0x118> 400080b4: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 400080b8: 80 a0 a0 03 cmp %g2, 3 400080bc: 22 80 00 27 be,a 40008158 <_CORE_mutex_Surrender+0x118> 400080c0: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) holder->resource_count--; the_mutex->holder = NULL; 400080c4: c0 24 20 5c clr [ %l0 + 0x5c ] /* * Whether or not someone is waiting for the mutex, an * inherited priority must be lowered if this is the last * mutex (i.e. resource) this task has. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400080c8: 80 a0 a0 02 cmp %g2, 2 400080cc: 02 80 00 17 be 40008128 <_CORE_mutex_Surrender+0xe8> 400080d0: c0 24 20 60 clr [ %l0 + 0x60 ] 400080d4: 80 a0 a0 03 cmp %g2, 3 400080d8: 22 80 00 15 be,a 4000812c <_CORE_mutex_Surrender+0xec> 400080dc: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED /* * Now we check if another thread was waiting for this mutex. If so, * transfer the mutex to that thread. */ if ( ( the_thread = _Thread_queue_Dequeue( &the_mutex->Wait_queue ) ) ) { 400080e0: 40 00 09 83 call 4000a6ec <_Thread_queue_Dequeue> 400080e4: 90 10 00 10 mov %l0, %o0 400080e8: 86 92 20 00 orcc %o0, 0, %g3 400080ec: 02 80 00 2e be 400081a4 <_CORE_mutex_Surrender+0x164> 400080f0: 82 10 20 01 mov 1, %g1 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 400080f4: c2 00 e0 08 ld [ %g3 + 8 ], %g1 the_mutex->nest_count = 1; switch ( the_mutex->Attributes.discipline ) { 400080f8: c4 04 20 48 ld [ %l0 + 0x48 ], %g2 } else #endif { the_mutex->holder = the_thread; the_mutex->holder_id = the_thread->Object.id; 400080fc: c2 24 20 60 st %g1, [ %l0 + 0x60 ] } else #endif { the_mutex->holder = the_thread; 40008100: c6 24 20 5c st %g3, [ %l0 + 0x5c ] the_mutex->holder_id = the_thread->Object.id; the_mutex->nest_count = 1; 40008104: 82 10 20 01 mov 1, %g1 switch ( the_mutex->Attributes.discipline ) { 40008108: 80 a0 a0 02 cmp %g2, 2 4000810c: 02 80 00 21 be 40008190 <_CORE_mutex_Surrender+0x150> 40008110: c2 24 20 54 st %g1, [ %l0 + 0x54 ] 40008114: 80 a0 a0 03 cmp %g2, 3 40008118: 22 80 00 13 be,a 40008164 <_CORE_mutex_Surrender+0x124> 4000811c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED } } else the_mutex->lock = CORE_MUTEX_UNLOCKED; return CORE_MUTEX_STATUS_SUCCESSFUL; } 40008120: 81 c7 e0 08 ret 40008124: 91 e8 20 00 restore %g0, 0, %o0 * inherited priority must be lowered if this is the last * mutex (i.e. resource) this task has. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { if ( holder->resource_count == 0 && 40008128: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 4000812c: 80 a0 60 00 cmp %g1, 0 40008130: 12 bf ff ec bne 400080e0 <_CORE_mutex_Surrender+0xa0> 40008134: 01 00 00 00 nop 40008138: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 4000813c: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 40008140: 80 a2 40 01 cmp %o1, %g1 40008144: 02 bf ff e7 be 400080e0 <_CORE_mutex_Surrender+0xa0> 40008148: 01 00 00 00 nop holder->real_priority != holder->current_priority ) { _Thread_Change_priority( holder, holder->real_priority, TRUE ); 4000814c: 40 00 07 42 call 40009e54 <_Thread_Change_priority> 40008150: 94 10 20 01 mov 1, %o2 ! 1 40008154: 30 bf ff e3 b,a 400080e0 <_CORE_mutex_Surrender+0xa0> * Formally release the mutex before possibly transferring it to a * blocked thread. */ if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) holder->resource_count--; 40008158: 82 00 7f ff add %g1, -1, %g1 4000815c: 10 bf ff da b 400080c4 <_CORE_mutex_Surrender+0x84> 40008160: c2 22 20 1c st %g1, [ %o0 + 0x1c ] case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_thread->resource_count++; break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: the_thread->resource_count++; if (the_mutex->Attributes.priority_ceiling < 40008164: 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++; 40008168: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000816c: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED if (the_mutex->Attributes.priority_ceiling < 40008170: d2 04 20 4c ld [ %l0 + 0x4c ], %o1 <== NOT EXECUTED 40008174: 80 a2 40 02 cmp %o1, %g2 <== NOT EXECUTED 40008178: 1a 80 00 04 bcc 40008188 <_CORE_mutex_Surrender+0x148> <== NOT EXECUTED 4000817c: b0 10 20 00 clr %i0 <== NOT EXECUTED the_thread->current_priority){ _Thread_Change_priority( 40008180: 40 00 07 35 call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 40008184: 94 10 20 00 clr %o2 <== NOT EXECUTED 40008188: 81 c7 e0 08 ret 4000818c: 81 e8 00 00 restore switch ( the_mutex->Attributes.discipline ) { case CORE_MUTEX_DISCIPLINES_FIFO: case CORE_MUTEX_DISCIPLINES_PRIORITY: break; case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_thread->resource_count++; 40008190: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 40008194: 82 00 60 01 inc %g1 40008198: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] 4000819c: 81 c7 e0 08 ret 400081a0: 91 e8 20 00 restore %g0, 0, %o0 } break; } } } else the_mutex->lock = CORE_MUTEX_UNLOCKED; 400081a4: c2 24 20 50 st %g1, [ %l0 + 0x50 ] 400081a8: 81 c7 e0 08 ret 400081ac: 91 e8 20 00 restore %g0, 0, %o0 4000dca4 <_Debug_Is_enabled>: */ boolean _Debug_Is_enabled( rtems_debug_control level ) { 4000dca4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000dca8: c4 00 62 70 ld [ %g1 + 0x270 ], %g2 ! 4001ae70 <_Debug_Level> <== NOT EXECUTED 4000dcac: 90 0a 00 02 and %o0, %g2, %o0 <== NOT EXECUTED return (_Debug_Level & level) ? TRUE : FALSE; } 4000dcb0: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000dcb4: 81 c3 e0 08 retl <== NOT EXECUTED 4000dcb8: 90 40 20 00 addx %g0, 0, %o0 <== NOT EXECUTED 40006670 <_Event_Seize>: rtems_event_set event_in, rtems_option option_set, rtems_interval ticks, rtems_event_set *event_out ) { 40006670: 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; 40006674: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006678: e0 00 62 6c ld [ %g1 + 0x26c ], %l0 ! 4001ae6c <_Thread_Executing> executing->Wait.return_code = RTEMS_SUCCESSFUL; 4000667c: c0 24 20 34 clr [ %l0 + 0x34 ] api = executing->API_Extensions[ THREAD_API_RTEMS ]; _ISR_Disable( level ); 40006680: 7f ff ee 53 call 40001fcc 40006684: e4 04 21 6c ld [ %l0 + 0x16c ], %l2 40006688: 84 10 00 08 mov %o0, %g2 pending_events = api->pending_events; 4000668c: c2 04 a0 40 ld [ %l2 + 0x40 ], %g1 seized_events = _Event_sets_Get( pending_events, event_in ); if ( !_Event_sets_Is_empty( seized_events ) && 40006690: a2 8e 00 01 andcc %i0, %g1, %l1 40006694: 02 80 00 0e be 400066cc <_Event_Seize+0x5c> 40006698: 80 8e 60 01 btst 1, %i1 4000669c: 80 a6 00 11 cmp %i0, %l1 400066a0: 02 80 00 04 be 400066b0 <_Event_Seize+0x40> 400066a4: 80 8e 60 02 btst 2, %i1 400066a8: 02 80 00 09 be 400066cc <_Event_Seize+0x5c> 400066ac: 80 8e 60 01 btst 1, %i1 (seized_events == event_in || _Options_Is_any( option_set )) ) { api->pending_events = 400066b0: 82 28 40 11 andn %g1, %l1, %g1 400066b4: c2 24 a0 40 st %g1, [ %l2 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); _ISR_Enable( level ); 400066b8: 7f ff ee 49 call 40001fdc 400066bc: 01 00 00 00 nop *event_out = seized_events; 400066c0: e2 26 c0 00 st %l1, [ %i3 ] 400066c4: 81 c7 e0 08 ret 400066c8: 81 e8 00 00 restore return; } if ( _Options_Is_no_wait( option_set ) ) { 400066cc: 12 80 00 1e bne 40006744 <_Event_Seize+0xd4> 400066d0: 82 10 20 01 mov 1, %g1 executing->Wait.return_code = RTEMS_UNSATISFIED; *event_out = seized_events; return; } _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 400066d4: 23 10 00 6c sethi %hi(0x4001b000), %l1 executing->Wait.option = (uint32_t ) option_set; 400066d8: f2 24 20 30 st %i1, [ %l0 + 0x30 ] executing->Wait.count = (uint32_t ) event_in; 400066dc: f0 24 20 24 st %i0, [ %l0 + 0x24 ] executing->Wait.return_argument = event_out; 400066e0: 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; 400066e4: c2 24 60 a4 st %g1, [ %l1 + 0xa4 ] executing->Wait.option = (uint32_t ) option_set; executing->Wait.count = (uint32_t ) event_in; executing->Wait.return_argument = event_out; _ISR_Enable( level ); 400066e8: 7f ff ee 3d call 40001fdc 400066ec: 90 10 00 02 mov %g2, %o0 if ( ticks ) { 400066f0: 80 a6 a0 00 cmp %i2, 0 400066f4: 32 80 00 24 bne,a 40006784 <_Event_Seize+0x114> 400066f8: c2 04 20 08 ld [ %l0 + 8 ], %g1 NULL ); _Watchdog_Insert_ticks( &executing->Timer, ticks ); } _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 400066fc: 90 10 00 10 mov %l0, %o0 40006700: 40 00 12 09 call 4000af24 <_Thread_Set_state> 40006704: 92 10 21 00 mov 0x100, %o1 _ISR_Disable( level ); 40006708: 7f ff ee 31 call 40001fcc 4000670c: 01 00 00 00 nop 40006710: b0 10 00 08 mov %o0, %i0 sync_state = _Event_Sync_state; 40006714: c4 04 60 a4 ld [ %l1 + 0xa4 ], %g2 _Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; 40006718: c0 24 60 a4 clr [ %l1 + 0xa4 ] switch ( sync_state ) { 4000671c: 80 a0 a0 02 cmp %g2, 2 40006720: 02 80 00 30 be 400067e0 <_Event_Seize+0x170> 40006724: 82 10 20 06 mov 6, %g1 40006728: 80 a0 a0 03 cmp %g2, 3 4000672c: 02 80 00 0d be 40006760 <_Event_Seize+0xf0> 40006730: 80 a0 a0 01 cmp %g2, 1 40006734: 02 80 00 31 be 400067f8 <_Event_Seize+0x188> 40006738: 01 00 00 00 nop 4000673c: 81 c7 e0 08 ret <== NOT EXECUTED 40006740: 81 e8 00 00 restore <== NOT EXECUTED *event_out = seized_events; return; } if ( _Options_Is_no_wait( option_set ) ) { _ISR_Enable( level ); 40006744: 7f ff ee 26 call 40001fdc 40006748: 90 10 00 02 mov %g2, %o0 executing->Wait.return_code = RTEMS_UNSATISFIED; 4000674c: 82 10 20 0d mov 0xd, %g1 40006750: c2 24 20 34 st %g1, [ %l0 + 0x34 ] *event_out = seized_events; 40006754: e2 26 c0 00 st %l1, [ %i3 ] 40006758: 81 c7 e0 08 ret 4000675c: 81 e8 00 00 restore _ISR_Enable( level ); _Thread_Unblock( executing ); return; case EVENT_SYNC_SATISFIED: if ( _Watchdog_Is_active( &executing->Timer ) ) { 40006760: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40006764: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40006768: 22 80 00 26 be,a 40006800 <_Event_Seize+0x190> <== NOT EXECUTED 4000676c: c4 24 20 50 st %g2, [ %l0 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &executing->Timer ); _ISR_Enable( level ); (void) _Watchdog_Remove( &executing->Timer ); } else _ISR_Enable( level ); 40006770: 7f ff ee 1b call 40001fdc <== NOT EXECUTED 40006774: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 40006778: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000677c: 40 00 0e 25 call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 40006780: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40006784: 92 04 20 48 add %l0, 0x48, %o1 void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; 40006788: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 4000678c: 03 10 00 1a sethi %hi(0x40006800), %g1 40006790: 82 10 62 34 or %g1, 0x234, %g1 ! 40006a34 <_Event_Timeout> Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40006794: f4 24 20 54 st %i2, [ %l0 + 0x54 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40006798: c2 24 20 64 st %g1, [ %l0 + 0x64 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 4000679c: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 400067a0: c0 24 20 6c clr [ %l0 + 0x6c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400067a4: 11 10 00 6b sethi %hi(0x4001ac00), %o0 400067a8: 40 00 13 f6 call 4000b780 <_Watchdog_Insert> 400067ac: 90 12 22 8c or %o0, 0x28c, %o0 ! 4001ae8c <_Watchdog_Ticks_chain> NULL ); _Watchdog_Insert_ticks( &executing->Timer, ticks ); } _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 400067b0: 90 10 00 10 mov %l0, %o0 400067b4: 40 00 11 dc call 4000af24 <_Thread_Set_state> 400067b8: 92 10 21 00 mov 0x100, %o1 _ISR_Disable( level ); 400067bc: 7f ff ee 04 call 40001fcc 400067c0: 01 00 00 00 nop 400067c4: b0 10 00 08 mov %o0, %i0 sync_state = _Event_Sync_state; 400067c8: c4 04 60 a4 ld [ %l1 + 0xa4 ], %g2 _Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; 400067cc: c0 24 60 a4 clr [ %l1 + 0xa4 ] switch ( sync_state ) { 400067d0: 80 a0 a0 02 cmp %g2, 2 400067d4: 12 bf ff d6 bne 4000672c <_Event_Seize+0xbc> 400067d8: 80 a0 a0 03 cmp %g2, 3 case EVENT_SYNC_NOTHING_HAPPENED: _ISR_Enable( level ); return; case EVENT_SYNC_TIMEOUT: executing->Wait.return_code = RTEMS_TIMEOUT; 400067dc: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 400067e0: c2 24 20 34 st %g1, [ %l0 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400067e4: 7f ff ed fe call 40001fdc <== NOT EXECUTED 400067e8: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 400067ec: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 400067f0: 40 00 0e 08 call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 400067f4: 91 e8 00 10 restore %g0, %l0, %o0 <== NOT EXECUTED * enter the synchronization states above. */ return; case EVENT_SYNC_NOTHING_HAPPENED: _ISR_Enable( level ); 400067f8: 7f ff ed f9 call 40001fdc 400067fc: 81 e8 00 00 restore return; case EVENT_SYNC_SATISFIED: if ( _Watchdog_Is_active( &executing->Timer ) ) { _Watchdog_Deactivate( &executing->Timer ); _ISR_Enable( level ); 40006800: 7f ff ed f7 call 40001fdc <== NOT EXECUTED 40006804: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED (void) _Watchdog_Remove( &executing->Timer ); 40006808: 40 00 14 48 call 4000b928 <_Watchdog_Remove> <== NOT EXECUTED 4000680c: 90 04 20 48 add %l0, 0x48, %o0 <== NOT EXECUTED 40006810: 10 bf ff db b 4000677c <_Event_Seize+0x10c> <== NOT EXECUTED 40006814: b2 16 63 f8 or %i1, 0x3f8, %i1 <== NOT EXECUTED 40006914 <_Event_Surrender>: */ void _Event_Surrender( Thread_Control *the_thread ) { 40006914: 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 ]; 40006918: e0 06 21 6c ld [ %i0 + 0x16c ], %l0 option_set = (rtems_option) the_thread->Wait.option; 4000691c: e4 06 20 30 ld [ %i0 + 0x30 ], %l2 _ISR_Disable( level ); 40006920: 7f ff ed ab call 40001fcc 40006924: b2 10 00 18 mov %i0, %i1 40006928: a2 10 00 08 mov %o0, %l1 pending_events = api->pending_events; 4000692c: c8 04 20 40 ld [ %l0 + 0x40 ], %g4 event_condition = (rtems_event_set) the_thread->Wait.count; 40006930: c6 06 20 24 ld [ %i0 + 0x24 ], %g3 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { 40006934: 9a 88 c0 04 andcc %g3, %g4, %o5 40006938: 02 80 00 20 be 400069b8 <_Event_Surrender+0xa4> 4000693c: 01 00 00 00 nop if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { 40006940: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 40006944: 80 88 61 00 btst 0x100, %g1 40006948: 02 80 00 08 be 40006968 <_Event_Surrender+0x54> 4000694c: 19 10 00 6c sethi %hi(0x4001b000), %o4 if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { 40006950: 80 a0 c0 0d cmp %g3, %o5 40006954: 02 80 00 1b be 400069c0 <_Event_Surrender+0xac> 40006958: 80 8c a0 02 btst 2, %l2 4000695c: 12 80 00 1a bne 400069c4 <_Event_Surrender+0xb0> 40006960: 82 29 00 0d andn %g4, %o5, %g1 } return; } } switch ( _Event_Sync_state ) { 40006964: 19 10 00 6c sethi %hi(0x4001b000), %o4 <== NOT EXECUTED 40006968: c2 03 20 a4 ld [ %o4 + 0xa4 ], %g1 ! 4001b0a4 <_Event_Sync_state> <== NOT EXECUTED 4000696c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40006970: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40006974: 18 80 00 11 bgu 400069b8 <_Event_Surrender+0xa4> <== NOT EXECUTED 40006978: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED case EVENT_SYNC_SATISFIED: break; case EVENT_SYNC_NOTHING_HAPPENED: case EVENT_SYNC_TIMEOUT: if ( !_Thread_Is_executing( the_thread ) ) 4000697c: c4 00 62 6c ld [ %g1 + 0x26c ], %g2 ! 4001ae6c <_Thread_Executing> <== NOT EXECUTED 40006980: 80 a6 40 02 cmp %i1, %g2 <== NOT EXECUTED 40006984: 12 80 00 0d bne 400069b8 <_Event_Surrender+0xa4> <== NOT EXECUTED 40006988: 80 a0 c0 0d cmp %g3, %o5 <== NOT EXECUTED break; if ( seized_events == event_condition || _Options_Is_any(option_set) ) { 4000698c: 02 80 00 04 be 4000699c <_Event_Surrender+0x88> <== NOT EXECUTED 40006990: 80 8c a0 02 btst 2, %l2 <== NOT EXECUTED 40006994: 02 80 00 09 be 400069b8 <_Event_Surrender+0xa4> <== NOT EXECUTED 40006998: 01 00 00 00 nop <== NOT EXECUTED api->pending_events = 4000699c: 82 29 00 0d andn %g4, %o5, %g1 <== NOT EXECUTED _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 400069a0: c4 06 60 28 ld [ %i1 + 0x28 ], %g2 <== NOT EXECUTED case EVENT_SYNC_TIMEOUT: if ( !_Thread_Is_executing( the_thread ) ) break; if ( seized_events == event_condition || _Options_Is_any(option_set) ) { api->pending_events = 400069a4: c2 24 20 40 st %g1, [ %l0 + 0x40 ] <== NOT EXECUTED _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; 400069a8: c0 26 60 24 clr [ %i1 + 0x24 ] <== NOT EXECUTED *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; _Event_Sync_state = EVENT_SYNC_SATISFIED; 400069ac: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED if ( seized_events == event_condition || _Options_Is_any(option_set) ) { api->pending_events = _Event_sets_Clear( pending_events,seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 400069b0: da 20 80 00 st %o5, [ %g2 ] <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_SATISFIED; 400069b4: c2 23 20 a4 st %g1, [ %o4 + 0xa4 ] <== NOT EXECUTED } break; } } _ISR_Enable( level ); 400069b8: 7f ff ed 89 call 40001fdc 400069bc: 91 e8 00 11 restore %g0, %l1, %o0 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { api->pending_events = 400069c0: 82 29 00 0d andn %g4, %o5, %g1 _Event_sets_Clear( pending_events, seized_events ); the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 400069c4: c4 06 60 28 ld [ %i1 + 0x28 ], %g2 seized_events = _Event_sets_Get( pending_events, event_condition ); if ( !_Event_sets_Is_empty( seized_events ) ) { if ( _States_Is_waiting_for_event( the_thread->current_state ) ) { if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { api->pending_events = 400069c8: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _Event_sets_Clear( pending_events, seized_events ); the_thread->Wait.count = 0; 400069cc: c0 26 60 24 clr [ %i1 + 0x24 ] *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 400069d0: da 20 80 00 st %o5, [ %g2 ] _ISR_Flash( level ); 400069d4: 7f ff ed 82 call 40001fdc 400069d8: 01 00 00 00 nop 400069dc: 7f ff ed 7c call 40001fcc 400069e0: 01 00 00 00 nop if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 400069e4: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 400069e8: 80 a0 60 02 cmp %g1, 2 400069ec: 02 80 00 08 be 40006a0c <_Event_Surrender+0xf8> 400069f0: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 400069f4: 90 10 00 11 mov %l1, %o0 400069f8: 7f ff ed 79 call 40001fdc 400069fc: 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 ); 40006a00: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 40006a04: 40 00 0d 83 call 4000a010 <_Thread_Clear_state> 40006a08: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 40006a0c: c2 26 60 50 st %g1, [ %i1 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 40006a10: 7f ff ed 73 call 40001fdc 40006a14: 90 10 00 11 mov %l1, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 40006a18: 40 00 13 c4 call 4000b928 <_Watchdog_Remove> 40006a1c: 90 06 60 48 add %i1, 0x48, %o0 40006a20: 33 04 00 ff sethi %hi(0x1003fc00), %i1 40006a24: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 40006a28: 40 00 0d 7a call 4000a010 <_Thread_Clear_state> 40006a2c: 81 e8 00 00 restore 40006a30: 01 00 00 00 nop 40006a34 <_Event_Timeout>: void _Event_Timeout( Objects_Id id, void *ignored ) { 40006a34: 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 ) ) { 40006a38: 92 96 20 00 orcc %i0, 0, %o1 40006a3c: 12 80 00 25 bne 40006ad0 <_Event_Timeout+0x9c> 40006a40: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006a44: 21 10 00 6b sethi %hi(0x4001ac00), %l0 <== NOT EXECUTED 40006a48: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40006a4c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40006a50: c2 24 21 90 st %g1, [ %l0 + 0x190 ] <== 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; 40006a54: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 40006a58: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001ae6c <_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; 40006a5c: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED * If it is not satisfied, then it is "nothing happened" and * this is the "timeout" transition. After a request is satisfied, * a timeout is not allowed to occur. */ _ISR_Disable( level ); 40006a60: 7f ff ed 5b call 40001fcc 40006a64: 01 00 00 00 nop 40006a68: 88 10 00 08 mov %o0, %g4 if ( the_thread->Wait.count ) { /* verify thread is waiting */ 40006a6c: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 40006a70: 80 a0 60 00 cmp %g1, 0 40006a74: 02 80 00 3a be 40006b5c <_Event_Timeout+0x128> 40006a78: 07 10 00 6c sethi %hi(0x4001b000), %g3 the_thread->Wait.count = 0; if ( _Event_Sync_state != EVENT_SYNC_SYNCHRONIZED && 40006a7c: c2 00 e0 a4 ld [ %g3 + 0xa4 ], %g1 ! 4001b0a4 <_Event_Sync_state> 40006a80: 80 a0 60 00 cmp %g1, 0 40006a84: 02 80 00 29 be 40006b28 <_Event_Timeout+0xf4> 40006a88: c0 26 20 24 clr [ %i0 + 0x24 ] 40006a8c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 40006a90: c4 00 62 6c ld [ %g1 + 0x26c ], %g2 ! 4001ae6c <_Thread_Executing> <== NOT EXECUTED 40006a94: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 40006a98: 12 80 00 25 bne 40006b2c <_Event_Timeout+0xf8> <== NOT EXECUTED 40006a9c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) { 40006aa0: c2 00 e0 a4 ld [ %g3 + 0xa4 ], %g1 <== NOT EXECUTED 40006aa4: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 40006aa8: 02 80 00 03 be 40006ab4 <_Event_Timeout+0x80> <== NOT EXECUTED 40006aac: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED _Event_Sync_state = EVENT_SYNC_TIMEOUT; 40006ab0: c2 20 e0 a4 st %g1, [ %g3 + 0xa4 ] <== NOT EXECUTED } _ISR_Enable( level ); 40006ab4: 7f ff ed 4a call 40001fdc <== NOT EXECUTED 40006ab8: 01 00 00 00 nop <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 40006abc: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 <== NOT EXECUTED 40006ac0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40006ac4: c2 24 21 90 st %g1, [ %l0 + 0x190 ] <== NOT EXECUTED 40006ac8: 81 c7 e0 08 ret <== NOT EXECUTED 40006acc: 81 e8 00 00 restore <== NOT EXECUTED 40006ad0: 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 ) { 40006ad4: 80 a0 a0 04 cmp %g2, 4 40006ad8: 18 bf ff fc bgu 40006ac8 <_Event_Timeout+0x94> 40006adc: 83 32 60 1b srl %o1, 0x1b, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40006ae0: 80 a0 60 01 cmp %g1, 1 40006ae4: 12 bf ff f9 bne 40006ac8 <_Event_Timeout+0x94> 40006ae8: 83 28 a0 02 sll %g2, 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40006aec: 05 10 00 6b sethi %hi(0x4001ac00), %g2 40006af0: 84 10 a0 f0 or %g2, 0xf0, %g2 ! 4001acf0 <_Objects_Information_table> 40006af4: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40006af8: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40006afc: 80 a2 20 00 cmp %o0, 0 40006b00: 02 80 00 15 be 40006b54 <_Event_Timeout+0x120> 40006b04: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40006b08: 40 00 08 cf call 40008e44 <_Objects_Get> 40006b0c: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; ISR_Level level; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40006b10: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006b14: 80 a0 60 00 cmp %g1, 0 40006b18: 12 bf ff ec bne 40006ac8 <_Event_Timeout+0x94> 40006b1c: b0 10 00 08 mov %o0, %i0 40006b20: 10 bf ff d0 b 40006a60 <_Event_Timeout+0x2c> 40006b24: 21 10 00 6b sethi %hi(0x4001ac00), %l0 if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) { _Event_Sync_state = EVENT_SYNC_TIMEOUT; } _ISR_Enable( level ); } else { the_thread->Wait.return_code = RTEMS_TIMEOUT; 40006b28: 82 10 20 06 mov 6, %g1 40006b2c: c2 26 20 34 st %g1, [ %i0 + 0x34 ] _ISR_Enable( level ); 40006b30: 7f ff ed 2b call 40001fdc 40006b34: 90 10 00 04 mov %g4, %o0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 40006b38: 13 04 00 ff sethi %hi(0x1003fc00), %o1 40006b3c: 90 10 00 18 mov %i0, %o0 40006b40: 40 00 0d 34 call 4000a010 <_Thread_Clear_state> 40006b44: 92 12 63 f8 or %o1, 0x3f8, %o1 */ RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void ) { RTEMS_COMPILER_MEMORY_BARRIER(); _Thread_Dispatch_disable_level -= 1; 40006b48: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 40006b4c: 82 00 7f ff add %g1, -1, %g1 40006b50: c2 24 21 90 st %g1, [ %l0 + 0x190 ] 40006b54: 81 c7 e0 08 ret 40006b58: 81 e8 00 00 restore _Thread_Unblock( the_thread ); } } else { _ISR_Enable( level ); 40006b5c: 7f ff ed 20 call 40001fdc <== NOT EXECUTED 40006b60: 01 00 00 00 nop <== NOT EXECUTED 40006b64: 30 bf ff f9 b,a 40006b48 <_Event_Timeout+0x114> <== NOT EXECUTED 40008384 <_Heap_Allocate>: void *_Heap_Allocate( Heap_Control *the_heap, size_t size ) { 40008384: 9d e3 bf 98 save %sp, -104, %sp Heap_Block *the_block; void *ptr = NULL; Heap_Statistics *const stats = &the_heap->stats; Heap_Block *const tail = _Heap_Tail(the_heap); the_size = 40008388: d2 06 20 10 ld [ %i0 + 0x10 ], %o1 4000838c: d4 06 20 14 ld [ %i0 + 0x14 ], %o2 40008390: 90 10 00 19 mov %i1, %o0 40008394: 40 00 00 cd call 400086c8 <_Heap_Calc_block_size> 40008398: a0 10 00 18 mov %i0, %l0 _Heap_Calc_block_size(size, the_heap->page_size, the_heap->min_block_size); if(the_size == 0) 4000839c: 80 a2 20 00 cmp %o0, 0 400083a0: 22 80 00 1a be,a 40008408 <_Heap_Allocate+0x84> 400083a4: b0 10 20 00 clr %i0 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First ( Heap_Control *the_heap ) { return _Heap_Head(the_heap)->next; 400083a8: f0 06 20 08 ld [ %i0 + 8 ], %i0 return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; 400083ac: 80 a4 00 18 cmp %l0, %i0 400083b0: 22 80 00 16 be,a 40008408 <_Heap_Allocate+0x84> 400083b4: b0 10 20 00 clr %i0 /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); /* Don't bother to mask out the HEAP_PREV_USED bit as it won't change the result of the comparison. */ if(the_block->size >= the_size) { 400083b8: c2 06 20 04 ld [ %i0 + 4 ], %g1 400083bc: 80 a2 00 01 cmp %o0, %g1 400083c0: 08 80 00 16 bleu 40008418 <_Heap_Allocate+0x94> 400083c4: b2 10 20 00 clr %i1 return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; the_block = the_block->next, ++search_count) 400083c8: 10 80 00 07 b 400083e4 <_Heap_Allocate+0x60> 400083cc: f0 06 20 08 ld [ %i0 + 8 ], %i0 /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); /* Don't bother to mask out the HEAP_PREV_USED bit as it won't change the result of the comparison. */ if(the_block->size >= the_size) { 400083d0: c2 06 20 04 ld [ %i0 + 4 ], %g1 400083d4: 80 a2 00 01 cmp %o0, %g1 400083d8: 08 80 00 11 bleu 4000841c <_Heap_Allocate+0x98> 400083dc: 94 10 00 08 mov %o0, %o2 return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; the_block = the_block->next, ++search_count) 400083e0: f0 06 20 08 ld [ %i0 + 8 ], %i0 if(the_size == 0) return NULL; /* Find large enough free block. */ for(the_block = _Heap_First(the_heap), search_count = 0; the_block != tail; 400083e4: 80 a4 00 18 cmp %l0, %i0 400083e8: 12 bf ff fa bne 400083d0 <_Heap_Allocate+0x4c> 400083ec: b2 06 60 01 inc %i1 400083f0: b0 10 20 00 clr %i0 _HAssert(_Heap_Is_aligned_ptr(ptr, the_heap->page_size)); break; } } if(stats->max_search < search_count) 400083f4: c2 04 20 44 ld [ %l0 + 0x44 ], %g1 400083f8: 80 a6 40 01 cmp %i1, %g1 400083fc: 08 80 00 05 bleu 40008410 <_Heap_Allocate+0x8c> 40008400: 01 00 00 00 nop stats->max_search = search_count; 40008404: f2 24 20 44 st %i1, [ %l0 + 0x44 ] 40008408: 81 c7 e0 08 ret 4000840c: 81 e8 00 00 restore return ptr; } 40008410: 81 c7 e0 08 ret 40008414: 81 e8 00 00 restore _HAssert(_Heap_Is_prev_used(the_block)); /* Don't bother to mask out the HEAP_PREV_USED bit as it won't change the result of the comparison. */ if(the_block->size >= the_size) { (void)_Heap_Block_allocate(the_heap, the_block, the_size ); 40008418: 94 10 00 08 mov %o0, %o2 4000841c: 92 10 00 18 mov %i0, %o1 40008420: 40 00 00 7e call 40008618 <_Heap_Block_allocate> 40008424: 90 10 00 10 mov %l0, %o0 ptr = _Heap_User_area(the_block); stats->allocs += 1; 40008428: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 stats->searches += search_count + 1; 4000842c: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 if(the_block->size >= the_size) { (void)_Heap_Block_allocate(the_heap, the_block, the_size ); ptr = _Heap_User_area(the_block); stats->allocs += 1; 40008430: 82 00 60 01 inc %g1 stats->searches += search_count + 1; 40008434: 84 00 a0 01 inc %g2 if(the_block->size >= the_size) { (void)_Heap_Block_allocate(the_heap, the_block, the_size ); ptr = _Heap_User_area(the_block); stats->allocs += 1; 40008438: c2 24 20 48 st %g1, [ %l0 + 0x48 ] stats->searches += search_count + 1; 4000843c: 84 00 80 19 add %g2, %i1, %g2 RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset ( void *base, uint32_t offset ) { return (void *)((char *)base + offset); 40008440: b0 06 20 08 add %i0, 8, %i0 40008444: 10 bf ff ec b 400083f4 <_Heap_Allocate+0x70> 40008448: c4 24 20 4c st %g2, [ %l0 + 0x4c ] 400086c8 <_Heap_Calc_block_size>: */ size_t _Heap_Calc_block_size( size_t size, uint32_t page_size, uint32_t min_size) { 400086c8: 9d e3 bf 98 save %sp, -104, %sp 400086cc: a0 10 00 19 mov %i1, %l0 uint32_t block_size = size + HEAP_BLOCK_USED_OVERHEAD; 400086d0: b2 06 20 04 add %i0, 4, %i1 uint32_t alignment ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; 400086d4: 92 10 00 10 mov %l0, %o1 400086d8: 40 00 37 ce call 40016610 <.urem> 400086dc: 90 10 00 19 mov %i1, %o0 *value = r ? v - r + a : v; 400086e0: 80 a2 20 00 cmp %o0, 0 400086e4: 02 80 00 04 be 400086f4 <_Heap_Calc_block_size+0x2c> 400086e8: 82 10 00 19 mov %i1, %g1 400086ec: 82 04 00 19 add %l0, %i1, %g1 400086f0: 82 20 40 08 sub %g1, %o0, %g1 400086f4: 80 a0 40 1a cmp %g1, %i2 400086f8: 2a 80 00 02 bcs,a 40008700 <_Heap_Calc_block_size+0x38> 400086fc: 82 10 00 1a mov %i2, %g1 <== NOT EXECUTED _Heap_Align_up(&block_size, page_size); if (block_size < min_size) block_size = min_size; /* 'block_size' becomes <= 'size' if and only if overflow occured. */ return (block_size > size) ? block_size : 0; 40008700: 80 a6 00 01 cmp %i0, %g1 40008704: 1a 80 00 03 bcc 40008710 <_Heap_Calc_block_size+0x48> 40008708: b0 10 20 00 clr %i0 4000870c: b0 10 00 01 mov %g1, %i0 } 40008710: 81 c7 e0 08 ret 40008714: 81 e8 00 00 restore 4001bd1c <_Heap_Get_free_information>: */ RTEMS_INLINE_ROUTINE Heap_Block *_Heap_First ( Heap_Control *the_heap ) { return _Heap_Head(the_heap)->next; 4001bd1c: 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; 4001bd20: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED info->largest = 0; 4001bd24: c0 22 60 04 clr [ %o1 + 4 ] <== NOT EXECUTED info->total = 0; 4001bd28: c0 22 60 08 clr [ %o1 + 8 ] <== NOT EXECUTED for(the_block = _Heap_First(the_heap); the_block != tail; 4001bd2c: 80 a2 00 0d cmp %o0, %o5 <== NOT EXECUTED 4001bd30: 02 80 00 12 be 4001bd78 <_Heap_Get_free_information+0x5c> <== NOT EXECUTED 4001bd34: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001bd38: 84 10 00 0c mov %o4, %g2 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE uint32_t _Heap_Block_size ( Heap_Block *the_block ) { return (the_block->size & ~HEAP_PREV_USED); 4001bd3c: c2 03 60 04 ld [ %o5 + 4 ], %g1 <== NOT EXECUTED /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); info->number++; info->total += the_size; if ( info->largest < the_size ) 4001bd40: c6 02 60 04 ld [ %o1 + 4 ], %g3 <== NOT EXECUTED 4001bd44: 88 08 7f fe and %g1, -2, %g4 <== NOT EXECUTED uint32_t const the_size = _Heap_Block_size(the_block); /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); info->number++; 4001bd48: 84 00 a0 01 inc %g2 <== NOT EXECUTED info->total += the_size; 4001bd4c: 82 03 00 04 add %o4, %g4, %g1 <== NOT EXECUTED uint32_t const the_size = _Heap_Block_size(the_block); /* As we always coalesce free blocks, prev block must have been used. */ _HAssert(_Heap_Is_prev_used(the_block)); info->number++; 4001bd50: c4 22 40 00 st %g2, [ %o1 ] <== NOT EXECUTED info->total += the_size; 4001bd54: c2 22 60 08 st %g1, [ %o1 + 8 ] <== NOT EXECUTED if ( info->largest < the_size ) 4001bd58: 80 a1 00 03 cmp %g4, %g3 <== NOT EXECUTED 4001bd5c: 08 80 00 03 bleu 4001bd68 <_Heap_Get_free_information+0x4c> <== NOT EXECUTED 4001bd60: 98 10 00 01 mov %g1, %o4 <== NOT EXECUTED info->largest = the_size; 4001bd64: c8 22 60 04 st %g4, [ %o1 + 4 ] <== NOT EXECUTED info->largest = 0; info->total = 0; for(the_block = _Heap_First(the_heap); the_block != tail; the_block = the_block->next) 4001bd68: 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; 4001bd6c: 80 a2 00 0d cmp %o0, %o5 <== NOT EXECUTED 4001bd70: 32 bf ff f4 bne,a 4001bd40 <_Heap_Get_free_information+0x24> <== NOT EXECUTED 4001bd74: c2 03 60 04 ld [ %o5 + 4 ], %g1 <== NOT EXECUTED 4001bd78: 81 c3 e0 08 retl <== NOT EXECUTED 4001bd7c: 01 00 00 00 nop 40008718 <_Heap_Initialize>: Heap_Control *the_heap, void *starting_address, size_t size, uint32_t page_size ) { 40008718: 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) 4000871c: 80 a6 e0 00 cmp %i3, 0 40008720: 12 80 00 43 bne 4000882c <_Heap_Initialize+0x114> 40008724: 84 8e e0 07 andcc %i3, 7, %g2 40008728: b6 10 20 08 mov 8, %i3 <== NOT EXECUTED 4000872c: a4 10 20 00 clr %l2 <== NOT EXECUTED /* Calculate aligned_start so that aligned_start + HEAP_BLOCK_USER_OFFSET (value of user pointer) is aligned on 'page_size' boundary. Make sure resulting 'aligned_start' is not below 'starting_address'. */ start = _H_p2u(starting_address); aligned_start = start + HEAP_BLOCK_USER_OFFSET; 40008730: a0 06 60 08 add %i1, 8, %l0 uint32_t alignment ) { _H_uptr_t v = *value; uint32_t a = alignment; _H_uptr_t r = v % a; 40008734: 92 10 00 1b mov %i3, %o1 40008738: 40 00 37 b6 call 40016610 <.urem> 4000873c: 90 10 00 10 mov %l0, %o0 *value = r ? v - r + a : v; 40008740: 80 a2 20 00 cmp %o0, 0 40008744: 02 80 00 05 be 40008758 <_Heap_Initialize+0x40> 40008748: a2 04 3f f8 add %l0, -8, %l1 4000874c: 82 06 c0 10 add %i3, %l0, %g1 40008750: a0 20 40 08 sub %g1, %o0, %l0 _Heap_Align_up_uptr ( &aligned_start, page_size ); aligned_start -= HEAP_BLOCK_USER_OFFSET; 40008754: a2 04 3f f8 add %l0, -8, %l1 ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; *value = r ? v - r + a : v; 40008758: 80 a4 a0 00 cmp %l2, 0 4000875c: 02 80 00 04 be 4000876c <_Heap_Initialize+0x54> 40008760: 82 10 20 10 mov 0x10, %g1 40008764: 82 06 e0 10 add %i3, 0x10, %g1 40008768: 82 20 40 12 sub %g1, %l2, %g1 4000876c: c2 26 20 14 st %g1, [ %i0 + 0x14 ] /* Calculate 'the_size' -- size of the first block so that there is enough space at the end for the permanent last block. It is equal to 'size' minus total overhead aligned down to the nearest multiple of 'page_size'. */ overhead = HEAP_OVERHEAD + (aligned_start - start); 40008770: 82 24 40 19 sub %l1, %i1, %g1 40008774: 82 00 60 08 add %g1, 8, %g1 if ( size < overhead ) 40008778: 80 a0 40 1a cmp %g1, %i2 4000877c: 18 80 00 2a bgu 40008824 <_Heap_Initialize+0x10c> 40008780: a0 26 80 01 sub %i2, %g1, %l0 uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 40008784: 92 10 00 1b mov %i3, %o1 40008788: 40 00 37 a2 call 40016610 <.urem> 4000878c: 90 10 00 10 mov %l0, %o0 return 0; /* Too small area for the heap */ the_size = size - overhead; _Heap_Align_down ( &the_size, page_size ); if ( the_size == 0 ) 40008790: a0 a4 00 08 subcc %l0, %o0, %l0 40008794: 02 80 00 24 be 40008824 <_Heap_Initialize+0x10c> 40008798: 09 10 00 6a sethi %hi(0x4001a800), %g4 return 0; /* Too small area for the heap */ the_heap->page_size = page_size; 4000879c: f6 26 20 10 st %i3, [ %i0 + 0x10 ] the_heap->begin = starting_address; the_heap->end = starting_address + size; the_block = (Heap_Block *) aligned_start; the_block->prev_size = page_size; 400087a0: f6 24 40 00 st %i3, [ %l1 ] the_block->size = the_size | HEAP_PREV_USED; 400087a4: 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++; 400087a8: c6 01 23 6c ld [ %g4 + 0x36c ], %g3 the_heap->end = starting_address + size; the_block = (Heap_Block *) aligned_start; the_block->prev_size = page_size; the_block->size = the_size | HEAP_PREV_USED; 400087ac: c2 24 60 04 st %g1, [ %l1 + 4 ] _HAssert(_Heap_Is_aligned(the_heap->min_block_size, page_size)); _HAssert(_Heap_Is_aligned_ptr(_Heap_User_area(the_block), page_size)); the_block = _Heap_Block_at( the_block, the_size ); the_heap->final = the_block; /* Permanent final block of the heap */ the_block->prev_size = the_size; /* Previous block is free */ 400087b0: e0 24 40 10 st %l0, [ %l1 + %l0 ] RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 400087b4: 9a 04 40 10 add %l1, %l0, %o5 the_block->size = page_size; 400087b8: f6 23 60 04 st %i3, [ %o5 + 4 ] the_block = (Heap_Block *) aligned_start; the_block->prev_size = page_size; the_block->size = the_size | HEAP_PREV_USED; the_block->next = _Heap_Tail( the_heap ); 400087bc: f0 24 60 08 st %i0, [ %l1 + 8 ] the_block->prev = _Heap_Head( the_heap ); 400087c0: f0 24 60 0c st %i0, [ %l1 + 0xc ] stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 400087c4: c6 26 20 28 st %g3, [ %i0 + 0x28 ] the_block = _Heap_Block_at( the_block, the_size ); the_heap->final = the_block; /* Permanent final block of the heap */ the_block->prev_size = the_size; /* Previous block is free */ the_block->size = page_size; stats->size = size; 400087c8: f4 26 20 2c st %i2, [ %i0 + 0x2c ] stats->free_size = the_size; 400087cc: e0 26 20 30 st %l0, [ %i0 + 0x30 ] stats->min_free_size = the_size; 400087d0: e0 26 20 34 st %l0, [ %i0 + 0x34 ] stats->free_blocks = 1; stats->max_free_blocks = 1; stats->used_blocks = 0; 400087d4: c0 26 20 40 clr [ %i0 + 0x40 ] stats->max_search = 0; 400087d8: c0 26 20 44 clr [ %i0 + 0x44 ] stats->allocs = 0; 400087dc: c0 26 20 48 clr [ %i0 + 0x48 ] stats->searches = 0; 400087e0: c0 26 20 4c clr [ %i0 + 0x4c ] stats->frees = 0; 400087e4: c0 26 20 50 clr [ %i0 + 0x50 ] stats->resizes = 0; 400087e8: c0 26 20 54 clr [ %i0 + 0x54 ] the_block->size = page_size; stats->size = size; stats->free_size = the_size; stats->min_free_size = the_size; stats->free_blocks = 1; 400087ec: 84 10 20 01 mov 1, %g2 stats->max_free_blocks = 1; 400087f0: c4 26 20 3c st %g2, [ %i0 + 0x3c ] the_block->size = page_size; stats->size = size; stats->free_size = the_size; stats->min_free_size = the_size; stats->free_blocks = 1; 400087f4: c4 26 20 38 st %g2, [ %i0 + 0x38 ] if ( the_size == 0 ) return 0; /* Too small area for the heap */ the_heap->page_size = page_size; the_heap->begin = starting_address; the_heap->end = starting_address + size; 400087f8: 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++; 400087fc: 86 00 e0 01 inc %g3 if ( the_size == 0 ) return 0; /* Too small area for the heap */ the_heap->page_size = page_size; the_heap->begin = starting_address; the_heap->end = starting_address + size; 40008800: 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; 40008804: 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; 40008808: e2 26 20 08 st %l1, [ %i0 + 8 ] _Heap_Tail(the_heap)->prev = the_block; 4000880c: e2 26 20 0c st %l1, [ %i0 + 0xc ] the_heap->start = the_block; 40008810: e2 26 20 20 st %l1, [ %i0 + 0x20 ] _HAssert(_Heap_Is_aligned(the_heap->page_size, CPU_ALIGNMENT)); _HAssert(_Heap_Is_aligned(the_heap->min_block_size, page_size)); _HAssert(_Heap_Is_aligned_ptr(_Heap_User_area(the_block), page_size)); the_block = _Heap_Block_at( the_block, the_size ); the_heap->final = the_block; /* Permanent final block of the heap */ 40008814: da 26 20 24 st %o5, [ %i0 + 0x24 ] stats->max_search = 0; stats->allocs = 0; stats->searches = 0; stats->frees = 0; stats->resizes = 0; stats->instance = instance++; 40008818: c6 21 23 6c st %g3, [ %g4 + 0x36c ] return ( the_size - HEAP_BLOCK_USED_OVERHEAD ); 4000881c: 81 c7 e0 08 ret 40008820: 91 ec 3f fc restore %l0, -4, %o0 } 40008824: 81 c7 e0 08 ret 40008828: 91 e8 20 00 restore %g0, 0, %o0 ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; *value = r ? v - r + a : v; 4000882c: 02 80 00 04 be 4000883c <_Heap_Initialize+0x124> 40008830: 90 10 20 10 mov 0x10, %o0 40008834: 82 06 e0 08 add %i3, 8, %g1 40008838: b6 20 40 02 sub %g1, %g2, %i3 4000883c: 40 00 37 75 call 40016610 <.urem> 40008840: 92 10 00 1b mov %i3, %o1 40008844: 10 bf ff bb b 40008730 <_Heap_Initialize+0x18> 40008848: a4 10 00 08 mov %o0, %l2 4000dec8 <_Heap_Resize_block>: void *starting_address, size_t size, uint32_t *old_mem_size, uint32_t *avail_mem_size ) { 4000dec8: 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; 4000decc: 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; 4000ded0: ee 06 20 14 ld [ %i0 + 0x14 ], %l7 <== NOT EXECUTED uint32_t const page_size = the_heap->page_size; *old_mem_size = 0; 4000ded4: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED *avail_mem_size = 0; 4000ded8: 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); 4000dedc: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000dee0: 40 00 21 cc call 40016610 <.urem> <== NOT EXECUTED 4000dee4: 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 ); 4000dee8: 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); 4000deec: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 4000def0: 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)) 4000def4: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 4000def8: 1a 80 00 05 bcc 4000df0c <_Heap_Resize_block+0x44> <== NOT EXECUTED 4000defc: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 <== NOT EXECUTED } } } ++stats->resizes; return HEAP_RESIZE_SUCCESSFUL; 4000df00: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED } 4000df04: 81 c7 e0 08 ret <== NOT EXECUTED 4000df08: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED *old_mem_size = 0; *avail_mem_size = 0; _Heap_Start_of_block(the_heap, starting_address, &the_block); _HAssert(_Heap_Is_block_in(the_heap, the_block)); if (!_Heap_Is_block_in(the_heap, the_block)) 4000df0c: 80 a4 80 02 cmp %l2, %g2 <== NOT EXECUTED 4000df10: 38 bf ff fd bgu,a 4000df04 <_Heap_Resize_block+0x3c> <== NOT EXECUTED 4000df14: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED return HEAP_RESIZE_FATAL_ERROR; prev_used_flag = the_block->size & HEAP_PREV_USED; 4000df18: 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); 4000df1c: a8 08 ff fe and %g3, -2, %l4 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000df20: a2 04 80 14 add %l2, %l4, %l1 <== NOT EXECUTED old_block_size = _Heap_Block_size(the_block); next_block = _Heap_Block_at(the_block, old_block_size); _HAssert(_Heap_Is_block_in(the_heap, next_block)); _HAssert(_Heap_Is_prev_used(next_block)); if ( !_Heap_Is_block_in(the_heap, next_block) || 4000df24: 80 a4 40 01 cmp %l1, %g1 <== NOT EXECUTED 4000df28: 2a bf ff f7 bcs,a 4000df04 <_Heap_Resize_block+0x3c> <== NOT EXECUTED 4000df2c: 84 10 20 02 mov 2, %g2 <== NOT EXECUTED 4000df30: 80 a4 40 02 cmp %l1, %g2 <== NOT EXECUTED 4000df34: 38 bf ff f4 bgu,a 4000df04 <_Heap_Resize_block+0x3c> <== NOT EXECUTED 4000df38: 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); 4000df3c: c2 04 60 04 ld [ %l1 + 4 ], %g1 <== NOT EXECUTED 4000df40: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000df44: 02 bf ff ef be 4000df00 <_Heap_Resize_block+0x38> <== NOT EXECUTED 4000df48: aa 08 7f fe and %g1, -2, %l5 <== NOT EXECUTED !_Heap_Is_prev_used(next_block)) return HEAP_RESIZE_FATAL_ERROR; next_block_size = _Heap_Block_size(next_block); next_next_block = _Heap_Block_at(next_block, next_block_size); next_is_used = (next_block == the_heap->final) || 4000df4c: 80 a0 80 11 cmp %g2, %l1 <== NOT EXECUTED 4000df50: ac 10 20 01 mov 1, %l6 <== NOT EXECUTED 4000df54: 02 80 00 04 be 4000df64 <_Heap_Resize_block+0x9c> <== NOT EXECUTED 4000df58: ba 04 40 15 add %l1, %l5, %i5 <== NOT EXECUTED 4000df5c: c2 07 60 04 ld [ %i5 + 4 ], %g1 <== NOT EXECUTED 4000df60: 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) 4000df64: 82 24 40 19 sub %l1, %i1, %g1 <== NOT EXECUTED 4000df68: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED + HEAP_BLOCK_HEADER_OFFSET; *old_mem_size = old_user_size; 4000df6c: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED if (size > old_user_size) { 4000df70: 80 a0 40 1a cmp %g1, %i2 <== NOT EXECUTED 4000df74: 1a 80 00 16 bcc 4000dfcc <_Heap_Resize_block+0x104> <== NOT EXECUTED 4000df78: 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 */ 4000df7c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 4000df80: 12 80 00 10 bne 4000dfc0 <_Heap_Resize_block+0xf8> <== NOT EXECUTED 4000df84: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED return HEAP_RESIZE_UNSATISFIED; else { uint32_t add_block_size = size - old_user_size; 4000df88: 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; 4000df8c: 40 00 21 a1 call 40016610 <.urem> <== NOT EXECUTED 4000df90: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *value = r ? v - r + a : v; 4000df94: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000df98: 02 80 00 05 be 4000dfac <_Heap_Resize_block+0xe4> <== NOT EXECUTED 4000df9c: 80 a4 00 17 cmp %l0, %l7 <== NOT EXECUTED 4000dfa0: 82 04 00 13 add %l0, %l3, %g1 <== NOT EXECUTED 4000dfa4: a0 20 40 08 sub %g1, %o0, %l0 <== NOT EXECUTED 4000dfa8: 80 a4 00 17 cmp %l0, %l7 <== NOT EXECUTED 4000dfac: 0a 80 00 1d bcs 4000e020 <_Heap_Resize_block+0x158> <== NOT EXECUTED 4000dfb0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Heap_Align_up(&add_block_size, page_size); if (add_block_size < min_block_size) add_block_size = min_block_size; if (add_block_size > next_block_size) 4000dfb4: 80 a5 40 08 cmp %l5, %o0 <== NOT EXECUTED 4000dfb8: 1a 80 00 1f bcc 4000e034 <_Heap_Resize_block+0x16c> <== NOT EXECUTED 4000dfbc: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED } } } ++stats->resizes; return HEAP_RESIZE_SUCCESSFUL; 4000dfc0: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED } 4000dfc4: 81 c7 e0 08 ret <== NOT EXECUTED 4000dfc8: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED --stats->used_blocks; } } else { /* Calculate how much memory we could free */ uint32_t free_block_size = old_user_size - size; 4000dfcc: a0 20 40 1a sub %g1, %i2, %l0 <== NOT EXECUTED uint32_t *value, uint32_t alignment ) { uint32_t v = *value; *value = v - (v % alignment); 4000dfd0: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4000dfd4: 40 00 21 8f call 40016610 <.urem> <== NOT EXECUTED 4000dfd8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED _Heap_Align_down(&free_block_size, page_size); if (free_block_size > 0) { 4000dfdc: a0 a4 00 08 subcc %l0, %o0, %l0 <== NOT EXECUTED 4000dfe0: 22 80 00 0b be,a 4000e00c <_Heap_Resize_block+0x144> <== NOT EXECUTED 4000dfe4: 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; 4000dfe8: 86 25 00 10 sub %l4, %l0, %g3 <== NOT EXECUTED if (new_block_size < min_block_size) { 4000dfec: 80 a5 c0 03 cmp %l7, %g3 <== NOT EXECUTED 4000dff0: 08 80 00 1c bleu 4000e060 <_Heap_Resize_block+0x198> <== NOT EXECUTED 4000dff4: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED uint32_t delta = min_block_size - new_block_size; 4000dff8: 82 25 c0 03 sub %l7, %g3, %g1 <== NOT EXECUTED _HAssert(free_block_size >= delta); free_block_size -= delta; if (free_block_size == 0) { 4000dffc: a0 a4 00 01 subcc %l0, %g1, %l0 <== NOT EXECUTED 4000e000: 32 80 00 17 bne,a 4000e05c <_Heap_Resize_block+0x194> <== NOT EXECUTED 4000e004: 86 00 c0 01 add %g3, %g1, %g3 <== NOT EXECUTED *avail_mem_size = free_block_size - HEAP_BLOCK_USED_OVERHEAD; } } } ++stats->resizes; 4000e008: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 <== NOT EXECUTED 4000e00c: 84 10 20 00 clr %g2 <== NOT EXECUTED 4000e010: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000e014: c2 26 20 54 st %g1, [ %i0 + 0x54 ] <== NOT EXECUTED return HEAP_RESIZE_SUCCESSFUL; } 4000e018: 81 c7 e0 08 ret <== NOT EXECUTED 4000e01c: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED ) { uint32_t v = *value; uint32_t a = alignment; uint32_t r = v % a; *value = r ? v - r + a : v; 4000e020: 90 10 00 17 mov %l7, %o0 <== NOT EXECUTED else { uint32_t add_block_size = size - old_user_size; _Heap_Align_up(&add_block_size, page_size); if (add_block_size < min_block_size) add_block_size = min_block_size; if (add_block_size > next_block_size) 4000e024: 80 a5 40 08 cmp %l5, %o0 <== NOT EXECUTED 4000e028: 0a bf ff e7 bcs 4000dfc4 <_Heap_Resize_block+0xfc> <== NOT EXECUTED 4000e02c: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED return HEAP_RESIZE_UNSATISFIED; /* Next block is too small or none. */ add_block_size = 4000e030: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 4000e034: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4000e038: 7f ff e9 78 call 40008618 <_Heap_Block_allocate> <== NOT EXECUTED 4000e03c: 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; 4000e040: 90 02 00 14 add %o0, %l4, %o0 <== NOT EXECUTED 4000e044: 90 12 00 1b or %o0, %i3, %o0 <== NOT EXECUTED 4000e048: d0 24 a0 04 st %o0, [ %l2 + 4 ] <== NOT EXECUTED --stats->used_blocks; 4000e04c: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED 4000e050: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000e054: 10 bf ff ed b 4000e008 <_Heap_Resize_block+0x140> <== NOT EXECUTED 4000e058: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED _HAssert(new_block_size >= min_block_size); _HAssert(new_block_size + free_block_size == old_block_size); _HAssert(_Heap_Is_aligned(new_block_size, page_size)); _HAssert(_Heap_Is_aligned(free_block_size, page_size)); if (!next_is_used) { 4000e05c: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 4000e060: 12 80 00 15 bne 4000e0b4 <_Heap_Resize_block+0x1ec> <== NOT EXECUTED 4000e064: 80 a4 00 17 cmp %l0, %l7 <== NOT EXECUTED Heap_Block *const new_next_block = _Heap_Block_at(the_block, new_block_size); uint32_t const new_next_block_size = next_block_size + free_block_size; _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; 4000e068: 82 10 c0 1b or %g3, %i3, %g1 <== NOT EXECUTED 4000e06c: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000e070: 86 04 80 03 add %l2, %g3, %g3 <== NOT EXECUTED if (!next_is_used) { /* Extend the next block to the low addresses by 'free_block_size' */ Heap_Block *const new_next_block = _Heap_Block_at(the_block, new_block_size); uint32_t const new_next_block_size = next_block_size + free_block_size; 4000e074: 88 04 00 15 add %l0, %l5, %g4 <== NOT EXECUTED Heap_Block *new_block ) { Heap_Block *block = old_block; Heap_Block *next = block->next; Heap_Block *prev = block->prev; 4000e078: d8 04 60 0c ld [ %l1 + 0xc ], %o4 <== NOT EXECUTED _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; new_next_block->size = new_next_block_size | HEAP_PREV_USED; next_next_block->prev_size = new_next_block_size; 4000e07c: c8 27 40 00 st %g4, [ %i5 ] <== NOT EXECUTED Heap_Block *old_block, Heap_Block *new_block ) { Heap_Block *block = old_block; Heap_Block *next = block->next; 4000e080: da 04 60 08 ld [ %l1 + 8 ], %o5 <== NOT EXECUTED _Heap_Block_at(the_block, new_block_size); uint32_t const new_next_block_size = next_block_size + free_block_size; _HAssert(_Heap_Is_block_in(the_heap, next_next_block)); the_block->size = new_block_size | prev_used_flag; new_next_block->size = new_next_block_size | HEAP_PREV_USED; 4000e084: 84 11 20 01 or %g4, 1, %g2 <== NOT EXECUTED 4000e088: c4 20 e0 04 st %g2, [ %g3 + 4 ] <== NOT EXECUTED next_next_block->prev_size = new_next_block_size; _Heap_Block_replace(next_block, new_next_block); the_heap->stats.free_size += free_block_size; 4000e08c: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Heap_Block *prev = block->prev; block = new_block; block->next = next; 4000e090: da 20 e0 08 st %o5, [ %g3 + 8 ] <== NOT EXECUTED 4000e094: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED block->prev = prev; 4000e098: d8 20 e0 0c st %o4, [ %g3 + 0xc ] <== NOT EXECUTED 4000e09c: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED *avail_mem_size = new_next_block_size - HEAP_BLOCK_USED_OVERHEAD; 4000e0a0: 88 01 3f fc add %g4, -4, %g4 <== NOT EXECUTED next->prev = prev->next = block; 4000e0a4: c6 23 60 0c st %g3, [ %o5 + 0xc ] <== NOT EXECUTED 4000e0a8: c6 23 20 08 st %g3, [ %o4 + 8 ] <== NOT EXECUTED 4000e0ac: 10 bf ff d7 b 4000e008 <_Heap_Resize_block+0x140> <== NOT EXECUTED 4000e0b0: c8 27 00 00 st %g4, [ %i4 ] <== NOT EXECUTED } else if (free_block_size >= min_block_size) { 4000e0b4: 2a bf ff d6 bcs,a 4000e00c <_Heap_Resize_block+0x144> <== NOT EXECUTED 4000e0b8: 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; 4000e0bc: 82 10 c0 1b or %g3, %i3, %g1 <== NOT EXECUTED next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; 4000e0c0: 84 14 20 01 or %l0, 1, %g2 <== NOT EXECUTED the_heap->stats.free_size += free_block_size; *avail_mem_size = new_next_block_size - HEAP_BLOCK_USED_OVERHEAD; } else if (free_block_size >= min_block_size) { /* Split the block into 2 used parts, then free the second one. */ the_block->size = new_block_size | prev_used_flag; 4000e0c4: c2 24 a0 04 st %g1, [ %l2 + 4 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at( void *base, uint32_t offset ) { return (Heap_Block *) _Addresses_Add_offset( base, offset ); 4000e0c8: 92 04 80 03 add %l2, %g3, %o1 <== NOT EXECUTED next_block = _Heap_Block_at(the_block, new_block_size); next_block->size = free_block_size | HEAP_PREV_USED; 4000e0cc: c4 22 60 04 st %g2, [ %o1 + 4 ] <== NOT EXECUTED ++stats->used_blocks; /* We have created used block */ 4000e0d0: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000e0d4: 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 */ 4000e0d8: 82 00 60 01 inc %g1 <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000e0dc: 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 */ 4000e0e0: c2 26 20 40 st %g1, [ %i0 + 0x40 ] <== NOT EXECUTED --stats->frees; /* Don't count next call in stats */ 4000e0e4: c4 26 20 50 st %g2, [ %i0 + 0x50 ] <== NOT EXECUTED _Heap_Free(the_heap, _Heap_User_area(next_block)); 4000e0e8: 92 02 60 08 add %o1, 8, %o1 <== NOT EXECUTED 4000e0ec: 7f ff e8 d8 call 4000844c <_Heap_Free> <== NOT EXECUTED 4000e0f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED *avail_mem_size = free_block_size - HEAP_BLOCK_USED_OVERHEAD; 4000e0f4: 82 04 3f fc add %l0, -4, %g1 <== NOT EXECUTED 4000e0f8: 10 bf ff c4 b 4000e008 <_Heap_Resize_block+0x140> <== NOT EXECUTED 4000e0fc: c2 27 00 00 st %g1, [ %i4 ] <== NOT EXECUTED 4000e100 <_Heap_Size_of_user_area>: boolean _Heap_Size_of_user_area( Heap_Control *the_heap, void *starting_address, size_t *size ) { 4000e100: 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( 4000e104: e0 06 20 20 ld [ %i0 + 0x20 ], %l0 <== NOT EXECUTED 4000e108: 80 a6 40 10 cmp %i1, %l0 <== NOT EXECUTED 4000e10c: 0a 80 00 05 bcs 4000e120 <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000e110: e2 06 20 24 ld [ %i0 + 0x24 ], %l1 <== NOT EXECUTED 4000e114: 80 a6 40 11 cmp %i1, %l1 <== NOT EXECUTED 4000e118: 28 80 00 04 bleu,a 4000e128 <_Heap_Size_of_user_area+0x28> <== NOT EXECUTED 4000e11c: d2 06 20 10 ld [ %i0 + 0x10 ], %o1 <== NOT EXECUTED *size = _Addresses_Subtract ( next_block, starting_address ) + HEAP_BLOCK_HEADER_OFFSET; return( TRUE ); } 4000e120: 81 c7 e0 08 ret <== NOT EXECUTED 4000e124: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* The address passed could be greater than the block address plus * HEAP_BLOCK_USER_OFFSET as _Heap_Allocate_aligned() may produce such user * pointers. To get rid of this offset we need to align the address down * to the nearest 'page_size' boundary. */ _Heap_Align_down_uptr ( &addr, the_heap->page_size ); *the_block = (Heap_Block *)(addr - HEAP_BLOCK_USER_OFFSET); 4000e128: 40 00 21 3a call 40016610 <.urem> <== NOT EXECUTED 4000e12c: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000e130: 90 26 40 08 sub %i1, %o0, %o0 <== NOT EXECUTED 4000e134: 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 ) ) 4000e138: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 4000e13c: 0a bf ff f9 bcs 4000e120 <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000e140: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 4000e144: 18 bf ff f7 bgu 4000e120 <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000e148: 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 ); 4000e14c: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4000e150: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 4000e154: 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 ( 4000e158: 80 a2 00 10 cmp %o0, %l0 <== NOT EXECUTED 4000e15c: 0a bf ff f1 bcs 4000e120 <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000e160: 80 a2 00 11 cmp %o0, %l1 <== NOT EXECUTED 4000e164: 18 bf ff ef bgu 4000e120 <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000e168: 01 00 00 00 nop <== NOT EXECUTED 4000e16c: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4000e170: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 4000e174: 02 bf ff eb be 4000e120 <_Heap_Size_of_user_area+0x20> <== NOT EXECUTED 4000e178: 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 ) 4000e17c: 82 00 60 04 add %g1, 4, %g1 <== NOT EXECUTED 4000e180: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 4000e184: 81 c7 e0 08 ret <== NOT EXECUTED 4000e188: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 40007be4 <_IO_Manager_initialization>: void _IO_Manager_initialization( rtems_driver_address_table *driver_table, uint32_t drivers_in_table, uint32_t number_of_drivers ) { 40007be4: 9d e3 bf 98 save %sp, -104, %sp /* * If the user claims there are less drivers than are actually in * the table, then let's just go with the table's count. */ if ( number_of_drivers <= drivers_in_table ) 40007be8: 80 a6 80 19 cmp %i2, %i1 40007bec: 08 80 00 27 bleu 40007c88 <_IO_Manager_initialization+0xa4> 40007bf0: 03 10 00 6c sethi %hi(0x4001b000), %g1 /* * The application requested extra slots in the driver table, so we * have to allocate a new driver table and copy theirs to it. */ _IO_Driver_address_table = (rtems_driver_address_table *) 40007bf4: 83 2e a0 03 sll %i2, 3, %g1 <== NOT EXECUTED 40007bf8: a1 2e a0 05 sll %i2, 5, %l0 <== NOT EXECUTED 40007bfc: a0 24 00 01 sub %l0, %g1, %l0 <== NOT EXECUTED 40007c00: 40 00 0f ab call 4000baac <_Workspace_Allocate_or_fatal_error> <== NOT EXECUTED 40007c04: 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; 40007c08: 03 10 00 6c sethi %hi(0x4001b000), %g1 <== NOT EXECUTED memset( 40007c0c: 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; 40007c10: f4 20 60 f4 st %i2, [ %g1 + 0xf4 ] <== 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 *) 40007c14: 21 10 00 6c sethi %hi(0x4001b000), %l0 <== NOT EXECUTED _Workspace_Allocate_or_fatal_error( sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); _IO_Number_of_drivers = number_of_drivers; memset( 40007c18: 92 10 20 00 clr %o1 <== NOT EXECUTED 40007c1c: 40 00 1f aa call 4000fac4 <== NOT EXECUTED 40007c20: d0 24 20 f8 st %o0, [ %l0 + 0xf8 ] <== NOT EXECUTED _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007c24: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40007c28: 02 80 00 16 be 40007c80 <_IO_Manager_initialization+0x9c> <== NOT EXECUTED 40007c2c: d4 04 20 f8 ld [ %l0 + 0xf8 ], %o2 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40007c30: 96 10 20 00 clr %o3 <== NOT EXECUTED 40007c34: 98 10 20 00 clr %o4 <== NOT EXECUTED 40007c38: c2 03 00 18 ld [ %o4 + %i0 ], %g1 <== NOT EXECUTED 40007c3c: 9a 03 00 18 add %o4, %i0, %o5 <== NOT EXECUTED 40007c40: c2 23 00 0a st %g1, [ %o4 + %o2 ] <== NOT EXECUTED 40007c44: c4 03 60 04 ld [ %o5 + 4 ], %g2 <== NOT EXECUTED 40007c48: 86 03 00 0a add %o4, %o2, %g3 <== NOT EXECUTED 40007c4c: c4 20 e0 04 st %g2, [ %g3 + 4 ] <== NOT EXECUTED 40007c50: c2 03 60 08 ld [ %o5 + 8 ], %g1 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007c54: 96 02 e0 01 inc %o3 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40007c58: c2 20 e0 08 st %g1, [ %g3 + 8 ] <== NOT EXECUTED 40007c5c: c4 03 60 0c ld [ %o5 + 0xc ], %g2 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007c60: 98 03 20 18 add %o4, 0x18, %o4 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40007c64: c4 20 e0 0c st %g2, [ %g3 + 0xc ] <== NOT EXECUTED 40007c68: c8 03 60 10 ld [ %o5 + 0x10 ], %g4 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007c6c: 80 a2 c0 19 cmp %o3, %i1 <== NOT EXECUTED _IO_Driver_address_table[index] = driver_table[index]; 40007c70: c8 20 e0 10 st %g4, [ %g3 + 0x10 ] <== NOT EXECUTED 40007c74: c2 03 60 14 ld [ %o5 + 0x14 ], %g1 <== NOT EXECUTED memset( _IO_Driver_address_table, 0, sizeof( rtems_driver_address_table ) * ( number_of_drivers ) ); for ( index = 0 ; index < drivers_in_table ; index++ ) 40007c78: 12 bf ff f0 bne 40007c38 <_IO_Manager_initialization+0x54> <== NOT EXECUTED 40007c7c: c2 20 e0 14 st %g1, [ %g3 + 0x14 ] <== NOT EXECUTED 40007c80: 81 c7 e0 08 ret <== NOT EXECUTED 40007c84: 81 e8 00 00 restore <== NOT EXECUTED * table, then we do not have to copy the driver table. They can't * register any dynamically. */ if ( number_of_drivers == drivers_in_table ) { _IO_Driver_address_table = driver_table; _IO_Number_of_drivers = number_of_drivers; 40007c88: 05 10 00 6c sethi %hi(0x4001b000), %g2 * If the maximum number of driver is the same as the number in the * table, then we do not have to copy the driver table. They can't * register any dynamically. */ if ( number_of_drivers == drivers_in_table ) { _IO_Driver_address_table = driver_table; 40007c8c: f0 20 60 f8 st %i0, [ %g1 + 0xf8 ] _IO_Number_of_drivers = number_of_drivers; 40007c90: f2 20 a0 f4 st %i1, [ %g2 + 0xf4 ] 40007c94: 81 c7 e0 08 ret 40007c98: 81 e8 00 00 restore 4000888c <_ISR_Handler_initialization>: * * Output parameters: NONE */ void _ISR_Handler_initialization( void ) { 4000888c: 9d e3 bf 98 save %sp, -104, %sp _ISR_Signals_to_thread_executing = FALSE; 40008890: 03 10 00 6b sethi %hi(0x4001ac00), %g1 _ISR_Nest_level = 0; 40008894: 05 10 00 6b sethi %hi(0x4001ac00), %g2 * Output parameters: NONE */ void _ISR_Handler_initialization( void ) { _ISR_Signals_to_thread_executing = FALSE; 40008898: c0 20 63 18 clr [ %g1 + 0x318 ] _ISR_Nest_level = 0; 4000889c: c0 20 a2 54 clr [ %g2 + 0x254 ] _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( 400088a0: 40 00 0c 83 call 4000baac <_Workspace_Allocate_or_fatal_error> 400088a4: 90 10 24 00 mov 0x400, %o0 _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 400088a8: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400088ac: a0 10 61 a4 or %g1, 0x1a4, %l0 ! 4001ada4 <_CPU_Table> 400088b0: 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( 400088b4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 _CPU_Initialize_vectors(); #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) if ( _CPU_Table.interrupt_stack_size < STACK_MINIMUM_SIZE ) 400088b8: 80 a0 af ff cmp %g2, 0xfff 400088bc: 18 80 00 07 bgu 400088d8 <_ISR_Handler_initialization+0x4c> 400088c0: d0 20 62 34 st %o0, [ %g1 + 0x234 ] _Internal_error_Occurred( 400088c4: 90 10 20 00 clr %o0 <== NOT EXECUTED 400088c8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 400088cc: 7f ff ff e0 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 400088d0: 94 10 20 05 mov 5, %o2 <== NOT EXECUTED 400088d4: c4 04 20 18 ld [ %l0 + 0x18 ], %g2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 400088d8: 40 00 0c 75 call 4000baac <_Workspace_Allocate_or_fatal_error> 400088dc: 90 10 00 02 mov %g2, %o0 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 400088e0: c6 04 20 18 ld [ %l0 + 0x18 ], %g3 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 400088e4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 400088e8: 86 02 00 03 add %o0, %g3, %g3 400088ec: 05 10 00 6b sethi %hi(0x4001ac00), %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL ); _CPU_Interrupt_stack_low = 400088f0: d0 20 61 a0 st %o0, [ %g1 + 0x1a0 ] _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); _CPU_Interrupt_stack_high = _Addresses_Add_offset( 400088f4: c6 20 a0 ec st %g3, [ %g2 + 0xec ] #if ( CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE ) _CPU_Install_interrupt_stack(); #endif } 400088f8: 81 c7 e0 08 ret 400088fc: 81 e8 00 00 restore 4000e19c <_Objects_Compare_name_string>: boolean _Objects_Compare_name_string( void *name_1, void *name_2, uint16_t length ) { 4000e19c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !strncmp( name_1, name_2, length ) ) 4000e1a0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000e1a4: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 4000e1a8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000e1ac: 40 00 09 42 call 400106b4 <== NOT EXECUTED 4000e1b0: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED return TRUE; return FALSE; } 4000e1b4: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000e1b8: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 4000e1bc: 81 c7 e0 08 ret <== NOT EXECUTED 4000e1c0: 81 e8 00 00 restore <== NOT EXECUTED 4001a53c <_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; 4001a53c: 95 32 a0 02 srl %o2, 2, %o2 <== NOT EXECUTED while ( tmp_length-- ) 4001a540: 80 a2 a0 00 cmp %o2, 0 <== NOT EXECUTED 4001a544: 02 80 00 09 be 4001a568 <_Objects_Copy_name_raw+0x2c> <== NOT EXECUTED 4001a548: 86 10 20 00 clr %g3 <== NOT EXECUTED 4001a54c: 84 10 20 00 clr %g2 <== NOT EXECUTED *destination_p++ = *source_p++; 4001a550: c2 00 80 08 ld [ %g2 + %o0 ], %g1 <== NOT EXECUTED 4001a554: 86 00 e0 01 inc %g3 <== NOT EXECUTED 4001a558: c2 20 80 09 st %g1, [ %g2 + %o1 ] <== NOT EXECUTED { uint32_t *source_p = (uint32_t *) source; uint32_t *destination_p = (uint32_t *) destination; size_t tmp_length = length / OBJECTS_NAME_ALIGNMENT; while ( tmp_length-- ) 4001a55c: 80 a0 c0 0a cmp %g3, %o2 <== NOT EXECUTED 4001a560: 12 bf ff fc bne 4001a550 <_Objects_Copy_name_raw+0x14> <== NOT EXECUTED 4001a564: 84 00 a0 04 add %g2, 4, %g2 <== NOT EXECUTED 4001a568: 81 c3 e0 08 retl <== NOT EXECUTED 4001a56c: 01 00 00 00 nop 400089b4 <_Objects_Extend_information>: */ void _Objects_Extend_information( Objects_Information *information ) { 400089b4: 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; 400089b8: 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 ) 400089bc: e4 16 20 10 lduh [ %i0 + 0x10 ], %l2 400089c0: 03 00 00 3f sethi %hi(0xfc00), %g1 400089c4: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 400089c8: a2 08 80 01 and %g2, %g1, %l1 400089cc: 80 a4 40 12 cmp %l1, %l2 400089d0: 08 80 00 8c bleu 40008c00 <_Objects_Extend_information+0x24c> 400089d4: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 400089d8: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 minimum_index = _Objects_Get_index( information->minimum_id ); index_base = minimum_index; block = 0; if ( information->maximum < minimum_index ) 400089dc: a8 10 00 11 mov %l1, %l4 400089e0: ac 10 20 00 clr %l6 400089e4: a6 10 20 01 mov 1, %l3 400089e8: 90 10 20 03 mov 3, %o0 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 400089ec: 80 a0 60 00 cmp %g1, 0 400089f0: 12 80 00 a4 bne 40008c80 <_Objects_Extend_information+0x2cc> 400089f4: ba 04 00 12 add %l0, %l2, %i5 if ( !object_blocks ) return; } else { object_blocks = (void**) 400089f8: 90 02 00 11 add %o0, %l1, %o0 400089fc: 90 02 00 1d add %o0, %i5, %o0 40008a00: 40 00 0c 2b call 4000baac <_Workspace_Allocate_or_fatal_error> 40008a04: 91 2a 20 02 sll %o0, 2, %o0 40008a08: ae 10 00 08 mov %o0, %l7 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 40008a0c: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 40008a10: 83 2c e0 02 sll %l3, 2, %g1 /* * Take the block count down. Saves all the (block_count - 1) * in the copies. */ block_count--; 40008a14: 86 04 ff ff add %l3, -1, %g3 if ( information->maximum > minimum_index ) { 40008a18: 80 a4 40 02 cmp %l1, %g2 /* * Break the block into the various sections. * */ inactive_per_block = (uint32_t *) _Addresses_Add_offset( 40008a1c: a6 05 c0 01 add %l7, %g1, %l3 object_blocks, block_count * sizeof(void*) ); name_table = (Objects_Name *) _Addresses_Add_offset( 40008a20: aa 00 40 13 add %g1, %l3, %l5 * in the copies. */ block_count--; if ( information->maximum > minimum_index ) { 40008a24: 0a 80 00 ac bcs 40008cd4 <_Objects_Extend_information+0x320> 40008a28: a4 00 40 15 add %g1, %l5, %l2 else { /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { 40008a2c: 80 a4 60 00 cmp %l1, 0 40008a30: 02 80 00 09 be 40008a54 <_Objects_Extend_information+0xa0> 40008a34: a1 28 e0 02 sll %g3, 2, %l0 information->inactive_per_block, block_count * sizeof(uint32_t ) ); memcpy( name_table, information->name_table, block_count * sizeof(Objects_Name *) ); memcpy( local_table, 40008a38: 84 10 20 00 clr %g2 /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { local_table[ index ] = NULL; 40008a3c: 83 28 a0 02 sll %g2, 2, %g1 else { /* * Deal with the special case of the 0 to minimum_index */ for ( index = 0; index < minimum_index; index++ ) { 40008a40: 84 00 a0 01 inc %g2 40008a44: 80 a0 80 11 cmp %g2, %l1 40008a48: 12 bf ff fd bne 40008a3c <_Objects_Extend_information+0x88> 40008a4c: c0 20 40 12 clr [ %g1 + %l2 ] 40008a50: a1 28 e0 02 sll %g3, 2, %l0 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 40008a54: c0 24 00 17 clr [ %l0 + %l7 ] inactive_per_block[block_count] = 0; 40008a58: c0 24 00 13 clr [ %l0 + %l3 ] name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); 40008a5c: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 40008a60: 86 05 00 01 add %l4, %g1, %g3 40008a64: 80 a0 c0 14 cmp %g3, %l4 40008a68: 08 80 00 0a bleu 40008a90 <_Objects_Extend_information+0xdc> 40008a6c: c0 25 40 10 clr [ %l5 + %l0 ] 40008a70: 83 2d 20 02 sll %l4, 2, %g1 40008a74: 84 04 80 01 add %l2, %g1, %g2 40008a78: 82 10 00 14 mov %l4, %g1 index++ ) { local_table[ index ] = NULL; 40008a7c: c0 20 80 00 clr [ %g2 ] inactive_per_block[block_count] = 0; name_table[block_count] = NULL; for ( index=index_base ; index < ( information->allocation_size + index_base ); index++ ) { 40008a80: 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 ); 40008a84: 80 a0 40 03 cmp %g1, %g3 40008a88: 12 bf ff fd bne 40008a7c <_Objects_Extend_information+0xc8> 40008a8c: 84 00 a0 04 add %g2, 4, %g2 index++ ) { local_table[ index ] = NULL; } _ISR_Disable( level ); 40008a90: 7f ff e5 4f call 40001fcc 40008a94: 01 00 00 00 nop information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; information->maximum_id = _Objects_Build_id( 40008a98: c4 06 00 00 ld [ %i0 ], %g2 40008a9c: c8 16 20 04 lduh [ %i0 + 4 ], %g4 40008aa0: 87 2f 60 10 sll %i5, 0x10, %g3 40008aa4: 89 29 20 1b sll %g4, 0x1b, %g4 40008aa8: 87 30 e0 10 srl %g3, 0x10, %g3 local_table[ index ] = NULL; } _ISR_Disable( level ); old_tables = information->object_blocks; 40008aac: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; information->maximum_id = _Objects_Build_id( 40008ab0: 03 00 00 40 sethi %hi(0x10000), %g1 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; 40008ab4: e6 26 20 38 st %l3, [ %i0 + 0x38 ] information->name_table = name_table; 40008ab8: ea 26 20 24 st %l5, [ %i0 + 0x24 ] information->local_table = local_table; 40008abc: e4 26 20 20 st %l2, [ %i0 + 0x20 ] information->maximum = maximum; information->maximum_id = _Objects_Build_id( 40008ac0: 85 28 a0 18 sll %g2, 0x18, %g2 information->object_blocks = object_blocks; information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; 40008ac4: fa 36 20 10 sth %i5, [ %i0 + 0x10 ] information->maximum_id = _Objects_Build_id( 40008ac8: 84 10 80 01 or %g2, %g1, %g2 _ISR_Disable( level ); old_tables = information->object_blocks; information->object_blocks = object_blocks; 40008acc: ee 26 20 3c st %l7, [ %i0 + 0x3c ] information->inactive_per_block = inactive_per_block; information->name_table = name_table; information->local_table = local_table; information->maximum = maximum; information->maximum_id = _Objects_Build_id( 40008ad0: 84 10 80 04 or %g2, %g4, %g2 40008ad4: 84 10 80 03 or %g2, %g3, %g2 40008ad8: c4 26 20 0c st %g2, [ %i0 + 0xc ] information->the_class, _Objects_Local_node, information->maximum ); _ISR_Enable( level ); 40008adc: 7f ff e5 40 call 40001fdc 40008ae0: 01 00 00 00 nop if ( old_tables ) 40008ae4: 80 a4 20 00 cmp %l0, 0 40008ae8: 02 80 00 05 be 40008afc <_Objects_Extend_information+0x148> 40008aec: 92 10 00 10 mov %l0, %o1 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 40008af0: 11 10 00 6b sethi %hi(0x4001ac00), %o0 40008af4: 7f ff fe 56 call 4000844c <_Heap_Free> 40008af8: 90 12 21 dc or %o0, 0x1dc, %o0 ! 4001addc <_Workspace_Area> /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { 40008afc: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 40008b00: 80 a0 60 00 cmp %g1, 0 40008b04: 02 80 00 6a be 40008cac <_Objects_Extend_information+0x2f8> 40008b08: c2 16 20 44 lduh [ %i0 + 0x44 ], %g1 RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 40008b0c: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 40008b10: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 information->object_blocks[ block ] = 40008b14: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 40008b18: 40 00 35 d8 call 40016278 <.umul> 40008b1c: 90 00 40 08 add %g1, %o0, %o0 40008b20: 92 10 00 08 mov %o0, %o1 40008b24: 11 10 00 6b sethi %hi(0x4001ac00), %o0 40008b28: 7f ff fe 17 call 40008384 <_Heap_Allocate> 40008b2c: 90 12 21 dc or %o0, 0x1dc, %o0 ! 4001addc <_Workspace_Area> _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 40008b30: e4 06 20 3c ld [ %i0 + 0x3c ], %l2 /* * Allocate the name table, and the objects */ if ( information->auto_extend ) { information->object_blocks[ block ] = 40008b34: a7 2d a0 02 sll %l6, 2, %l3 40008b38: d0 24 c0 10 st %o0, [ %l3 + %l0 ] _Workspace_Allocate( (information->allocation_size * information->name_length) + (information->allocation_size * information->size) ); if ( !information->object_blocks[ block ] ) 40008b3c: c2 04 c0 12 ld [ %l3 + %l2 ], %g1 40008b40: 80 a0 60 00 cmp %g1, 0 40008b44: 02 80 00 7b be 40008d30 <_Objects_Extend_information+0x37c> 40008b48: 01 00 00 00 nop 40008b4c: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 40008b50: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 40008b54: 40 00 35 c9 call 40016278 <.umul> 40008b58: a2 10 00 14 mov %l4, %l1 40008b5c: c2 04 80 13 ld [ %l2 + %l3 ], %g1 name_area = (Objects_Name *) _Addresses_Add_offset( information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 40008b60: c4 06 20 24 ld [ %i0 + 0x24 ], %g2 40008b64: a0 02 00 01 add %o0, %g1, %l0 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 40008b68: d4 06 20 18 ld [ %i0 + 0x18 ], %o2 name_area = (Objects_Name *) _Addresses_Add_offset( information->object_blocks[ block ], (information->allocation_size * information->size) ); information->name_table[ block ] = name_area; 40008b6c: e0 20 80 13 st %l0, [ %g2 + %l3 ] /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 40008b70: d6 06 20 1c ld [ %i0 + 0x1c ], %o3 40008b74: d2 04 80 13 ld [ %l2 + %l3 ], %o1 40008b78: a8 07 bf ec add %fp, -20, %l4 index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 40008b7c: 2b 00 00 40 sethi %hi(0x10000), %l5 /* * Initialize objects .. add to a local chain first. */ _Chain_Initialize( 40008b80: 90 10 00 14 mov %l4, %o0 40008b84: 40 00 14 6d call 4000dd38 <_Chain_Initialize> 40008b88: a4 06 20 28 add %i0, 0x28, %l2 40008b8c: 30 80 00 0f b,a 40008bc8 <_Objects_Extend_information+0x214> index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 40008b90: c4 16 20 04 lduh [ %i0 + 4 ], %g2 40008b94: c6 16 20 44 lduh [ %i0 + 0x44 ], %g3 40008b98: 83 28 60 18 sll %g1, 0x18, %g1 40008b9c: 85 28 a0 1b sll %g2, 0x1b, %g2 40008ba0: 82 10 40 15 or %g1, %l5, %g1 40008ba4: 82 10 40 02 or %g1, %g2, %g1 40008ba8: 82 10 40 11 or %g1, %l1, %g1 information->the_class, _Objects_Local_node, index ); the_object->name = (void *) name_area; 40008bac: e0 22 20 0c st %l0, [ %o0 + 0xc ] index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { the_object->id = _Objects_Build_id( 40008bb0: c2 22 20 08 st %g1, [ %o0 + 8 ] the_object->name = (void *) name_area; name_area = _Addresses_Add_offset( name_area, information->name_length ); _Chain_Append( &information->Inactive, &the_object->Node ); 40008bb4: 92 10 00 08 mov %o0, %o1 40008bb8: a0 04 00 03 add %l0, %g3, %l0 index++; 40008bbc: a2 04 60 01 inc %l1 the_object->name = (void *) name_area; name_area = _Addresses_Add_offset( name_area, information->name_length ); _Chain_Append( &information->Inactive, &the_object->Node ); 40008bc0: 7f ff fc a0 call 40007e40 <_Chain_Append> 40008bc4: 90 10 00 12 mov %l2, %o0 * Move from the local chain, initialise, then append to the inactive chain */ index = index_base; while ( (the_object = (Objects_Control *) _Chain_Get( &Inactive ) ) != NULL ) { 40008bc8: 7f ff fc aa call 40007e70 <_Chain_Get> 40008bcc: 90 10 00 14 mov %l4, %o0 40008bd0: 80 a2 20 00 cmp %o0, 0 40008bd4: 32 bf ff ef bne,a 40008b90 <_Objects_Extend_information+0x1dc> 40008bd8: c2 06 00 00 ld [ %i0 ], %g1 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 40008bdc: c6 06 20 38 ld [ %i0 + 0x38 ], %g3 40008be0: c4 06 20 18 ld [ %i0 + 0x18 ], %g2 information->inactive += information->allocation_size; 40008be4: c8 16 20 34 lduh [ %i0 + 0x34 ], %g4 _Chain_Append( &information->Inactive, &the_object->Node ); index++; } information->inactive_per_block[ block ] = information->allocation_size; 40008be8: c4 20 c0 13 st %g2, [ %g3 + %l3 ] information->inactive += information->allocation_size; 40008bec: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 40008bf0: 82 00 40 04 add %g1, %g4, %g1 40008bf4: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 40008bf8: 81 c7 e0 08 ret 40008bfc: 81 e8 00 00 restore block = 0; if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; 40008c00: 90 10 00 12 mov %l2, %o0 40008c04: 40 00 35 d7 call 40016360 <.udiv> 40008c08: 92 10 00 10 mov %l0, %o1 for ( ; block < block_count; block++ ) { 40008c0c: 80 a2 20 00 cmp %o0, 0 40008c10: 02 80 00 46 be 40008d28 <_Objects_Extend_information+0x374> 40008c14: a8 10 00 11 mov %l1, %l4 if ( information->object_blocks[ block ] == NULL ) 40008c18: c4 06 20 3c ld [ %i0 + 0x3c ], %g2 40008c1c: c2 00 80 00 ld [ %g2 ], %g1 40008c20: 80 a0 60 00 cmp %g1, 0 40008c24: 12 80 00 08 bne 40008c44 <_Objects_Extend_information+0x290> 40008c28: ac 10 20 00 clr %l6 /* * If the index_base is the maximum we need to grow the tables. */ if (index_base >= information->maximum ) { 40008c2c: 10 80 00 0c b 40008c5c <_Objects_Extend_information+0x2a8> <== NOT EXECUTED 40008c30: 80 a5 00 12 cmp %l4, %l2 <== NOT EXECUTED block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { if ( information->object_blocks[ block ] == NULL ) 40008c34: c2 00 40 02 ld [ %g1 + %g2 ], %g1 40008c38: 80 a0 60 00 cmp %g1, 0 40008c3c: 02 80 00 08 be 40008c5c <_Objects_Extend_information+0x2a8> 40008c40: 80 a5 00 12 cmp %l4, %l2 if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40008c44: ac 05 a0 01 inc %l6 if ( information->object_blocks[ block ] == NULL ) break; else index_base += information->allocation_size; 40008c48: a8 05 00 10 add %l4, %l0, %l4 if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40008c4c: 80 a5 80 08 cmp %l6, %o0 40008c50: 12 bf ff f9 bne 40008c34 <_Objects_Extend_information+0x280> 40008c54: 83 2d a0 02 sll %l6, 2, %g1 /* * If the index_base is the maximum we need to grow the tables. */ if (index_base >= information->maximum ) { 40008c58: 80 a5 00 12 cmp %l4, %l2 40008c5c: 2a bf ff a9 bcs,a 40008b00 <_Objects_Extend_information+0x14c> 40008c60: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 40008c64: a6 02 20 01 add %o0, 1, %l3 40008c68: 83 2c e0 01 sll %l3, 1, %g1 40008c6c: 90 00 40 13 add %g1, %l3, %o0 /* * Allocate the tables and break it up. */ if ( information->auto_extend ) { 40008c70: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 40008c74: 80 a0 60 00 cmp %g1, 0 40008c78: 02 bf ff 60 be 400089f8 <_Objects_Extend_information+0x44> 40008c7c: ba 04 00 12 add %l0, %l2, %i5 40008c80: 92 02 00 11 add %o0, %l1, %o1 40008c84: 11 10 00 6b sethi %hi(0x4001ac00), %o0 40008c88: 92 02 40 1d add %o1, %i5, %o1 40008c8c: 90 12 21 dc or %o0, 0x1dc, %o0 40008c90: 7f ff fd bd call 40008384 <_Heap_Allocate> 40008c94: 93 2a 60 02 sll %o1, 2, %o1 block_count * (sizeof(void *) + sizeof(uint32_t ) + sizeof(Objects_Name *)) + ((maximum + minimum_index) * sizeof(Objects_Control *)) ); if ( !object_blocks ) 40008c98: ae 92 20 00 orcc %o0, 0, %l7 40008c9c: 32 bf ff 5d bne,a 40008a10 <_Objects_Extend_information+0x5c> 40008ca0: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 40008ca4: 81 c7 e0 08 ret <== NOT EXECUTED 40008ca8: 81 e8 00 00 restore <== NOT EXECUTED if ( !information->object_blocks[ block ] ) return; } else { information->object_blocks[ block ] = 40008cac: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 40008cb0: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 40008cb4: 40 00 35 71 call 40016278 <.umul> 40008cb8: 90 00 40 08 add %g1, %o0, %o0 40008cbc: 40 00 0b 7c call 4000baac <_Workspace_Allocate_or_fatal_error> 40008cc0: e0 06 20 3c ld [ %i0 + 0x3c ], %l0 40008cc4: e4 06 20 3c ld [ %i0 + 0x3c ], %l2 40008cc8: a7 2d a0 02 sll %l6, 2, %l3 40008ccc: 10 bf ff a0 b 40008b4c <_Objects_Extend_information+0x198> 40008cd0: d0 24 c0 10 st %o0, [ %l3 + %l0 ] /* * Copy each section of the table over. This has to be performed as * separate parts as size of each block has changed. */ memcpy( object_blocks, 40008cd4: d2 06 20 3c ld [ %i0 + 0x3c ], %o1 40008cd8: a1 28 e0 02 sll %g3, 2, %l0 40008cdc: 90 10 00 17 mov %l7, %o0 40008ce0: 40 00 1b 4c call 4000fa10 40008ce4: 94 10 00 10 mov %l0, %o2 information->object_blocks, block_count * sizeof(void*) ); memcpy( inactive_per_block, 40008ce8: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 40008cec: 94 10 00 10 mov %l0, %o2 40008cf0: 40 00 1b 48 call 4000fa10 40008cf4: 90 10 00 13 mov %l3, %o0 information->inactive_per_block, block_count * sizeof(uint32_t ) ); memcpy( name_table, 40008cf8: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 40008cfc: 94 10 00 10 mov %l0, %o2 40008d00: 40 00 1b 44 call 4000fa10 40008d04: 90 10 00 15 mov %l5, %o0 information->name_table, block_count * sizeof(Objects_Name *) ); memcpy( local_table, 40008d08: d4 16 20 10 lduh [ %i0 + 0x10 ], %o2 40008d0c: d2 06 20 20 ld [ %i0 + 0x20 ], %o1 40008d10: 94 02 80 11 add %o2, %l1, %o2 40008d14: 90 10 00 12 mov %l2, %o0 40008d18: 40 00 1b 3e call 4000fa10 40008d1c: 95 2a a0 02 sll %o2, 2, %o2 /* * Initialise the new entries in the table. */ object_blocks[block_count] = NULL; 40008d20: 10 bf ff 4e b 40008a58 <_Objects_Extend_information+0xa4> 40008d24: c0 24 00 17 clr [ %l0 + %l7 ] if ( information->maximum < minimum_index ) block_count = 0; else { block_count = information->maximum / information->allocation_size; for ( ; block < block_count; block++ ) { 40008d28: 10 bf ff cc b 40008c58 <_Objects_Extend_information+0x2a4> <== NOT EXECUTED 40008d2c: ac 10 20 00 clr %l6 <== NOT EXECUTED 40008d30: 81 c7 e0 08 ret <== NOT EXECUTED 40008d34: 81 e8 00 00 restore <== NOT EXECUTED 40008dcc <_Objects_Get_isr_disable>: Objects_Information *information, Objects_Id id, Objects_Locations *location, ISR_Level *level_p ) { 40008dcc: 9d e3 bf 98 save %sp, -104, %sp Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 40008dd0: c2 06 20 08 ld [ %i0 + 8 ], %g1 _ISR_Disable( level ); 40008dd4: 7f ff e4 7e call 40001fcc 40008dd8: b2 26 40 01 sub %i1, %g1, %i1 { Objects_Control *the_object; uint32_t index; ISR_Level level; index = id - information->minimum_id + 1; 40008ddc: b2 06 60 01 inc %i1 _ISR_Disable( level ); if ( information->maximum >= index ) { 40008de0: c2 16 20 10 lduh [ %i0 + 0x10 ], %g1 40008de4: 80 a6 40 01 cmp %i1, %g1 40008de8: 18 80 00 0b bgu 40008e14 <_Objects_Get_isr_disable+0x48> 40008dec: 83 2e 60 02 sll %i1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 40008df0: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 40008df4: f0 00 80 01 ld [ %g2 + %g1 ], %i0 40008df8: 80 a6 20 00 cmp %i0, 0 40008dfc: 02 80 00 0c be 40008e2c <_Objects_Get_isr_disable+0x60> 40008e00: 01 00 00 00 nop *location = OBJECTS_LOCAL; *level_p = level; 40008e04: 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; 40008e08: c0 26 80 00 clr [ %i2 ] 40008e0c: 81 c7 e0 08 ret 40008e10: 81 e8 00 00 restore } _ISR_Enable( level ); *location = OBJECTS_ERROR; return NULL; } _ISR_Enable( level ); 40008e14: 7f ff e4 72 call 40001fdc 40008e18: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; 40008e1c: 82 10 20 02 mov 2, %g1 40008e20: c2 26 80 00 st %g1, [ %i2 ] _Objects_MP_Is_remote( information, id, location, &the_object ); return the_object; #else return NULL; #endif } 40008e24: 81 c7 e0 08 ret 40008e28: 81 e8 00 00 restore if ( (the_object = information->local_table[ index ]) != NULL ) { *location = OBJECTS_LOCAL; *level_p = level; return the_object; } _ISR_Enable( level ); 40008e2c: 7f ff e4 6c call 40001fdc <== NOT EXECUTED 40008e30: 01 00 00 00 nop <== NOT EXECUTED *location = OBJECTS_ERROR; 40008e34: 82 10 20 02 mov 2, %g1 ! 2 <== NOT EXECUTED 40008e38: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 40008e3c: 81 c7 e0 08 ret <== NOT EXECUTED 40008e40: 81 e8 00 00 restore <== NOT EXECUTED 4000a8e0 <_Objects_Get_name_as_string>: char *_Objects_Get_name_as_string( Objects_Id id, size_t length, char *name ) { 4000a8e0: 9d e3 bf 88 save %sp, -120, %sp 4000a8e4: 92 10 00 18 mov %i0, %o1 uint32_t i; char lname[5]; Objects_Control *the_object; Objects_Locations location; if ( length == 0 ) 4000a8e8: 80 a6 60 00 cmp %i1, 0 4000a8ec: 12 80 00 04 bne 4000a8fc <_Objects_Get_name_as_string+0x1c> 4000a8f0: b0 10 00 1a mov %i2, %i0 _Thread_Enable_dispatch(); return name; } return NULL; /* unreachable path */ } 4000a8f4: 81 c7 e0 08 ret <== NOT EXECUTED 4000a8f8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED Objects_Locations location; if ( length == 0 ) return NULL; if ( name == NULL ) 4000a8fc: 80 a6 a0 00 cmp %i2, 0 4000a900: 02 80 00 40 be 4000aa00 <_Objects_Get_name_as_string+0x120> 4000a904: 87 32 60 16 srl %o1, 0x16, %g3 if ( !_Objects_Is_class_valid( the_class ) ) return NULL; the_api = _Objects_Get_API( id ); return _Objects_Information_table[ the_api ][ the_class ]; 4000a908: 03 10 00 9c sethi %hi(0x40027000), %g1 4000a90c: 86 08 e0 1c and %g3, 0x1c, %g3 4000a910: 82 10 62 c0 or %g1, 0x2c0, %g1 4000a914: c8 00 40 03 ld [ %g1 + %g3 ], %g4 4000a918: 85 32 60 1b srl %o1, 0x1b, %g2 4000a91c: 85 28 a0 02 sll %g2, 2, %g2 4000a920: f4 01 00 02 ld [ %g4 + %g2 ], %i2 return NULL; information = _Objects_Get_information( id ); if ( !information ) 4000a924: 80 a6 a0 00 cmp %i2, 0 4000a928: 22 80 00 36 be,a 4000aa00 <_Objects_Get_name_as_string+0x120> 4000a92c: b0 10 20 00 clr %i0 <== NOT EXECUTED return NULL; the_object = _Objects_Get( information, id, &location ); 4000a930: 90 10 00 1a mov %i2, %o0 4000a934: 40 00 00 3f call 4000aa30 <_Objects_Get> 4000a938: 94 07 bf f4 add %fp, -12, %o2 switch ( location ) { 4000a93c: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000a940: 80 a0 60 00 cmp %g1, 0 4000a944: 32 80 00 2f bne,a 4000aa00 <_Objects_Get_name_as_string+0x120> 4000a948: b0 10 20 00 clr %i0 <== NOT EXECUTED case OBJECTS_ERROR: return NULL; case OBJECTS_LOCAL: if ( information->is_string ) { 4000a94c: c2 06 a0 40 ld [ %i2 + 0x40 ], %g1 4000a950: 80 a0 60 00 cmp %g1, 0 4000a954: 22 80 00 2d be,a 4000aa08 <_Objects_Get_name_as_string+0x128> 4000a958: c2 02 20 0c ld [ %o0 + 0xc ], %g1 s = the_object->name; 4000a95c: d0 02 20 0c ld [ %o0 + 0xc ], %o0 lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; s = lname; } for ( i=0, d=name ; i<(length-1) && *s ; i++, s++, d++ ) { 4000a960: 80 a6 60 01 cmp %i1, 1 4000a964: 02 80 00 1c be 4000a9d4 <_Objects_Get_name_as_string+0xf4> 4000a968: 9a 10 00 18 mov %i0, %o5 4000a96c: c8 0a 00 00 ldub [ %o0 ], %g4 4000a970: 85 29 20 18 sll %g4, 0x18, %g2 4000a974: 80 a0 a0 00 cmp %g2, 0 4000a978: 22 80 00 18 be,a 4000a9d8 <_Objects_Get_name_as_string+0xf8> 4000a97c: c0 2b 40 00 clrb [ %o5 ] <== NOT EXECUTED 4000a980: b2 06 7f ff add %i1, -1, %i1 4000a984: 98 10 20 00 clr %o4 4000a988: 10 80 00 07 b 4000a9a4 <_Objects_Get_name_as_string+0xc4> 4000a98c: 17 10 00 7b sethi %hi(0x4001ec00), %o3 4000a990: c8 0a 00 00 ldub [ %o0 ], %g4 4000a994: 85 29 20 18 sll %g4, 0x18, %g2 4000a998: 80 a0 a0 00 cmp %g2, 0 4000a99c: 22 80 00 0f be,a 4000a9d8 <_Objects_Get_name_as_string+0xf8> 4000a9a0: c0 2b 40 00 clrb [ %o5 ] <== NOT EXECUTED *d = (!isprint(*s)) ? '*' : *s; 4000a9a4: c2 02 e0 38 ld [ %o3 + 0x38 ], %g1 4000a9a8: 85 38 a0 18 sra %g2, 0x18, %g2 4000a9ac: c6 48 80 01 ldsb [ %g2 + %g1 ], %g3 4000a9b0: 80 88 e0 97 btst 0x97, %g3 4000a9b4: 12 80 00 03 bne 4000a9c0 <_Objects_Get_name_as_string+0xe0> 4000a9b8: 90 02 20 01 inc %o0 4000a9bc: 88 10 20 2a mov 0x2a, %g4 <== NOT EXECUTED 4000a9c0: c8 2b 40 00 stb %g4, [ %o5 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; s = lname; } for ( i=0, d=name ; i<(length-1) && *s ; i++, s++, d++ ) { 4000a9c4: 98 03 20 01 inc %o4 4000a9c8: 80 a3 00 19 cmp %o4, %i1 4000a9cc: 12 bf ff f1 bne 4000a990 <_Objects_Get_name_as_string+0xb0> 4000a9d0: 9a 03 60 01 inc %o5 *d = (!isprint(*s)) ? '*' : *s; } *d = '\0'; 4000a9d4: c0 2b 40 00 clrb [ %o5 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000a9d8: 03 10 00 9c sethi %hi(0x40027000), %g1 4000a9dc: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40027360 <_Thread_Dispatch_disable_level> 4000a9e0: 84 00 bf ff add %g2, -1, %g2 4000a9e4: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 4000a9e8: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 4000a9ec: 80 a0 e0 00 cmp %g3, 0 4000a9f0: 12 80 00 04 bne 4000aa00 <_Objects_Get_name_as_string+0x120> 4000a9f4: 01 00 00 00 nop _Thread_Dispatch(); 4000a9f8: 40 00 04 fa call 4000bde0 <_Thread_Dispatch> 4000a9fc: 01 00 00 00 nop 4000aa00: 81 c7 e0 08 ret 4000aa04: 81 e8 00 00 restore lname[ 0 ] = (u32_name >> 24) & 0xff; lname[ 1 ] = (u32_name >> 16) & 0xff; lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 4000aa08: c0 2f bf f3 clrb [ %fp + -13 ] if ( information->is_string ) { s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; 4000aa0c: 85 30 60 18 srl %g1, 0x18, %g2 lname[ 1 ] = (u32_name >> 16) & 0xff; 4000aa10: 87 30 60 10 srl %g1, 0x10, %g3 lname[ 2 ] = (u32_name >> 8) & 0xff; lname[ 3 ] = (u32_name >> 0) & 0xff; 4000aa14: c2 2f bf f2 stb %g1, [ %fp + -14 ] if ( information->is_string ) { s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; 4000aa18: c4 2f bf ef stb %g2, [ %fp + -17 ] lname[ 1 ] = (u32_name >> 16) & 0xff; lname[ 2 ] = (u32_name >> 8) & 0xff; 4000aa1c: 83 30 60 08 srl %g1, 8, %g1 s = the_object->name; } else { uint32_t u32_name = (uint32_t) the_object->name; lname[ 0 ] = (u32_name >> 24) & 0xff; lname[ 1 ] = (u32_name >> 16) & 0xff; 4000aa20: c6 2f bf f0 stb %g3, [ %fp + -16 ] lname[ 2 ] = (u32_name >> 8) & 0xff; 4000aa24: c2 2f bf f1 stb %g1, [ %fp + -15 ] lname[ 3 ] = (u32_name >> 0) & 0xff; lname[ 4 ] = '\0'; 4000aa28: 10 bf ff ce b 4000a960 <_Objects_Get_name_as_string+0x80> 4000aa2c: 90 07 bf ef add %fp, -17, %o0 4001a570 <_Objects_Get_next>: Objects_Information *information, Objects_Id id, Objects_Locations *location_p, Objects_Id *next_id_p ) { 4001a570: 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) 4001a574: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 4001a578: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff <== NOT EXECUTED 4001a57c: 80 8e 40 01 btst %i1, %g1 <== NOT EXECUTED 4001a580: 22 80 00 02 be,a 4001a588 <_Objects_Get_next+0x18> <== NOT EXECUTED 4001a584: 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) 4001a588: 03 00 00 3f sethi %hi(0xfc00), %g1 <== NOT EXECUTED 4001a58c: a0 10 63 ff or %g1, 0x3ff, %l0 ! ffff <== NOT EXECUTED 4001a590: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED 4001a594: 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); 4001a598: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4001a59c: 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) 4001a5a0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4001a5a4: 18 80 00 0b bgu 4001a5d0 <_Objects_Get_next+0x60> <== NOT EXECUTED 4001a5a8: 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); 4001a5ac: 7f ff d6 bb call 40010098 <_Objects_Get> <== NOT EXECUTED 4001a5b0: b2 06 60 01 inc %i1 <== NOT EXECUTED next_id++; } while (*location_p != OBJECTS_LOCAL); 4001a5b4: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 4001a5b8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a5bc: 32 bf ff f6 bne,a 4001a594 <_Objects_Get_next+0x24> <== NOT EXECUTED 4001a5c0: c4 16 20 10 lduh [ %i0 + 0x10 ], %g2 <== NOT EXECUTED *next_id_p = next_id; 4001a5c4: f2 26 c0 00 st %i1, [ %i3 ] <== NOT EXECUTED return object; final: *next_id_p = OBJECTS_ID_FINAL; return 0; } 4001a5c8: 81 c7 e0 08 ret <== NOT EXECUTED 4001a5cc: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED do { /* walked off end of list? */ if (_Objects_Get_index(next_id) > information->maximum) { *location_p = OBJECTS_ERROR; 4001a5d0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 4001a5d4: 84 10 3f ff mov -1, %g2 <== NOT EXECUTED 4001a5d8: 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; 4001a5dc: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED *next_id_p = next_id; return object; final: *next_id_p = OBJECTS_ID_FINAL; 4001a5e0: c4 26 c0 00 st %g2, [ %i3 ] <== NOT EXECUTED return 0; } 4001a5e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a5e8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001663c <_Objects_Get_no_protection>: ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 4001663c: c2 02 20 08 ld [ %o0 + 8 ], %g1 if ( information->maximum >= index ) { 40016640: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 ) { Objects_Control *the_object; uint32_t index; index = id - information->minimum_id + 1; 40016644: 92 22 40 01 sub %o1, %g1, %o1 40016648: 82 02 60 01 add %o1, 1, %g1 if ( information->maximum >= index ) { 4001664c: 80 a0 40 02 cmp %g1, %g2 40016650: 18 80 00 09 bgu 40016674 <_Objects_Get_no_protection+0x38> 40016654: 83 28 60 02 sll %g1, 2, %g1 if ( (the_object = information->local_table[ index ]) != NULL ) { 40016658: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4001665c: d0 00 80 01 ld [ %g2 + %g1 ], %o0 40016660: 80 a2 20 00 cmp %o0, 0 40016664: 02 80 00 08 be 40016684 <_Objects_Get_no_protection+0x48> 40016668: 82 10 20 02 mov 2, %g1 *location = OBJECTS_LOCAL; 4001666c: 81 c3 e0 08 retl 40016670: c0 22 80 00 clr [ %o2 ] return the_object; } *location = OBJECTS_ERROR; return NULL; } *location = OBJECTS_ERROR; 40016674: 82 10 20 02 mov 2, %g1 40016678: 90 10 20 00 clr %o0 /* * Not supported for multiprocessing */ return NULL; } 4001667c: 81 c3 e0 08 retl 40016680: c2 22 80 00 st %g1, [ %o2 ] if ( information->maximum >= index ) { if ( (the_object = information->local_table[ index ]) != NULL ) { *location = OBJECTS_LOCAL; return the_object; } *location = OBJECTS_ERROR; 40016684: 81 c3 e0 08 retl <== NOT EXECUTED 40016688: c2 22 80 00 st %g1, [ %o2 ] <== NOT EXECUTED 400090a8 <_Objects_Handler_initialization>: uint32_t node, uint32_t maximum_nodes, uint32_t maximum_global_objects ) { if ( node < 1 || node > maximum_nodes ) 400090a8: 80 a2 20 00 cmp %o0, 0 400090ac: 22 80 00 07 be,a 400090c8 <_Objects_Handler_initialization+0x20> 400090b0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400090b4: 80 a2 00 09 cmp %o0, %o1 400090b8: 18 80 00 04 bgu 400090c8 <_Objects_Handler_initialization+0x20> 400090bc: 90 10 20 00 clr %o0 400090c0: 81 c3 e0 08 retl 400090c4: 01 00 00 00 nop _Internal_error_Occurred( 400090c8: 92 10 20 01 mov 1, %o1 ! 1 <== NOT EXECUTED 400090cc: 94 10 20 08 mov 8, %o2 <== NOT EXECUTED 400090d0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 400090d4: 7f ff fd de call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 400090d8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400090dc: 01 00 00 00 nop 4000a3dc <_Objects_Id_to_name>: Objects_Name_or_id_lookup_errors _Objects_Id_to_name ( Objects_Id id, Objects_Name *name ) { 4000a3dc: 9d e3 bf 90 save %sp, -112, %sp 4000a3e0: 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 ) 4000a3e4: 80 a6 60 00 cmp %i1, 0 4000a3e8: 02 80 00 24 be 4000a478 <_Objects_Id_to_name+0x9c> 4000a3ec: 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); 4000a3f0: 83 32 60 18 srl %o1, 0x18, %g1 4000a3f4: 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 ) 4000a3f8: 80 a0 60 04 cmp %g1, 4 4000a3fc: 18 80 00 25 bgu 4000a490 <_Objects_Id_to_name+0xb4> 4000a400: 87 28 60 02 sll %g1, 2, %g3 return OBJECTS_INVALID_ID; the_class = _Objects_Get_class( id ); information = _Objects_Information_table[ the_api ][ the_class ]; 4000a404: 03 10 00 7c sethi %hi(0x4001f000), %g1 4000a408: 82 10 60 20 or %g1, 0x20, %g1 ! 4001f020 <_Objects_Information_table> 4000a40c: c8 00 40 03 ld [ %g1 + %g3 ], %g4 4000a410: 85 32 60 1b srl %o1, 0x1b, %g2 4000a414: 85 28 a0 02 sll %g2, 2, %g2 4000a418: d0 01 00 02 ld [ %g4 + %g2 ], %o0 if ( !information ) 4000a41c: 80 a2 20 00 cmp %o0, 0 4000a420: 02 80 00 1c be 4000a490 <_Objects_Id_to_name+0xb4> 4000a424: 01 00 00 00 nop return OBJECTS_INVALID_ID; if ( information->is_string ) 4000a428: c2 02 20 40 ld [ %o0 + 0x40 ], %g1 4000a42c: 80 a0 60 00 cmp %g1, 0 4000a430: 12 80 00 18 bne 4000a490 <_Objects_Id_to_name+0xb4> 4000a434: 01 00 00 00 nop return OBJECTS_INVALID_ID; the_object = _Objects_Get( information, id, &ignored_location ); 4000a438: 7f ff ff c2 call 4000a340 <_Objects_Get> 4000a43c: 94 07 bf f4 add %fp, -12, %o2 if ( !the_object ) 4000a440: 80 a2 20 00 cmp %o0, 0 4000a444: 02 80 00 13 be 4000a490 <_Objects_Id_to_name+0xb4> 4000a448: 01 00 00 00 nop return OBJECTS_INVALID_ID; *name = the_object->name; 4000a44c: c2 02 20 0c ld [ %o0 + 0xc ], %g1 4000a450: 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 ) 4000a454: 07 10 00 7c sethi %hi(0x4001f000), %g3 4000a458: c2 00 e0 c0 ld [ %g3 + 0xc0 ], %g1 ! 4001f0c0 <_Thread_Dispatch_disable_level> 4000a45c: b0 10 20 00 clr %i0 4000a460: 82 00 7f ff add %g1, -1, %g1 4000a464: c2 20 e0 c0 st %g1, [ %g3 + 0xc0 ] 4000a468: c4 00 e0 c0 ld [ %g3 + 0xc0 ], %g2 4000a46c: 80 a0 a0 00 cmp %g2, 0 4000a470: 02 80 00 04 be 4000a480 <_Objects_Id_to_name+0xa4> 4000a474: 01 00 00 00 nop _Thread_Enable_dispatch(); return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL; } 4000a478: 81 c7 e0 08 ret <== NOT EXECUTED 4000a47c: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 4000a480: 40 00 05 07 call 4000b89c <_Thread_Dispatch> 4000a484: 01 00 00 00 nop 4000a488: 81 c7 e0 08 ret 4000a48c: 81 e8 00 00 restore 4000a490: 81 c7 e0 08 ret <== NOT EXECUTED 4000a494: 91 e8 20 03 restore %g0, 3, %o0 <== NOT EXECUTED 40008ee0 <_Objects_Initialize_information>: , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 40008ee0: 9d e3 bf 98 save %sp, -104, %sp /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40008ee4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40008ee8: 85 2e 60 02 sll %i1, 2, %g2 40008eec: 82 10 60 f0 or %g1, 0xf0, %g1 40008ef0: c8 00 40 02 ld [ %g1 + %g2 ], %g4 , boolean supports_global, Objects_Thread_queue_Extract_callout extract #endif ) { 40008ef4: de 07 a0 5c ld [ %fp + 0x5c ], %o7 /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; 40008ef8: 83 36 e0 1f srl %i3, 0x1f, %g1 maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 40008efc: 05 20 00 00 sethi %hi(0x80000000), %g2 /* * Set the size of the object */ information->size = size; 40008f00: b9 2f 20 10 sll %i4, 0x10, %i4 40008f04: b9 37 20 10 srl %i4, 0x10, %i4 uint32_t index; #endif information->the_api = the_api; information->the_class = the_class; information->is_string = is_string; 40008f08: fa 26 20 40 st %i5, [ %i0 + 0x40 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f0c: 87 2e 60 18 sll %i1, 0x18, %g3 40008f10: bb 2e a0 1b sll %i2, 0x1b, %i5 /* * Set the size of the object */ information->size = size; 40008f14: f8 26 20 1c st %i4, [ %i0 + 0x1c ] #if defined(RTEMS_MULTIPROCESSING) uint32_t index; #endif information->the_api = the_api; information->the_class = the_class; 40008f18: f4 36 20 04 sth %i2, [ %i0 + 4 ] /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; maximum &= ~OBJECTS_UNLIMITED_OBJECTS; 40008f1c: b8 2e c0 02 andn %i3, %g2, %i4 /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40008f20: b5 2e a0 02 sll %i2, 2, %i2 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f24: 80 a0 00 1c cmp %g0, %i4 /* * Set the entry in the object information table. */ _Objects_Information_table[ the_api ][ the_class ] = information; 40008f28: f0 21 00 1a st %i0, [ %g4 + %i2 ] /* * Are we operating in unlimited, or auto-extend mode */ information->auto_extend = (maximum & OBJECTS_UNLIMITED_OBJECTS) ? TRUE : FALSE; 40008f2c: c2 26 20 14 st %g1, [ %i0 + 0x14 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f30: 88 40 20 00 addx %g0, 0, %g4 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40008f34: 03 10 00 6a sethi %hi(0x4001a800), %g1 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f38: 05 00 00 40 sethi %hi(0x10000), %g2 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40008f3c: 82 10 63 70 or %g1, 0x370, %g1 */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f40: 86 10 c0 02 or %g3, %g2, %g3 /* * Provide a null local table entry for the case of any empty table. */ information->local_table = &null_local_table; 40008f44: c2 26 20 20 st %g1, [ %i0 + 0x20 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f48: 86 10 c0 1d or %g3, %i5, %g3 uint32_t name_length; #if defined(RTEMS_MULTIPROCESSING) uint32_t index; #endif information->the_api = the_api; 40008f4c: f2 26 00 00 st %i1, [ %i0 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f50: 86 10 c0 04 or %g3, %g4, %g3 information->the_api = the_api; information->the_class = the_class; information->is_string = is_string; information->local_table = 0; information->name_table = 0; 40008f54: c0 26 20 24 clr [ %i0 + 0x24 ] information->inactive_per_block = 0; 40008f58: c0 26 20 38 clr [ %i0 + 0x38 ] information->object_blocks = 0; 40008f5c: c0 26 20 3c clr [ %i0 + 0x3c ] information->inactive = 0; 40008f60: c0 36 20 34 clrh [ %i0 + 0x34 ] /* * The allocation unit is the maximum value */ information->allocation_size = maximum; 40008f64: f8 26 20 18 st %i4, [ %i0 + 0x18 ] */ if ( maximum == 0 ) minimum_index = 0; else minimum_index = 1; information->minimum_id = 40008f68: c6 26 20 08 st %g3, [ %i0 + 8 ] * Calculate the maximum name length */ name_length = maximum_name_length; if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) ) 40008f6c: 80 8b e0 03 btst 3, %o7 40008f70: 02 80 00 04 be 40008f80 <_Objects_Initialize_information+0xa0> 40008f74: 82 10 00 0f mov %o7, %g1 name_length = (name_length + OBJECTS_NAME_ALIGNMENT) & 40008f78: 82 03 e0 04 add %o7, 4, %g1 <== NOT EXECUTED 40008f7c: 82 08 7f fc and %g1, -4, %g1 <== NOT EXECUTED ~(OBJECTS_NAME_ALIGNMENT-1); information->name_length = name_length; 40008f80: c2 36 20 44 sth %g1, [ %i0 + 0x44 ] Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 40008f84: 84 06 20 28 add %i0, 0x28, %g2 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 40008f88: 82 06 20 2c add %i0, 0x2c, %g1 the_chain->permanent_null = NULL; 40008f8c: 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); 40008f90: c2 26 20 28 st %g1, [ %i0 + 0x28 ] /* * Initialize objects .. if there are any */ if ( maximum ) { 40008f94: 80 a7 20 00 cmp %i4, 0 40008f98: 12 80 00 04 bne 40008fa8 <_Objects_Initialize_information+0xc8> 40008f9c: c4 26 20 30 st %g2, [ %i0 + 0x30 ] 40008fa0: 81 c7 e0 08 ret 40008fa4: 81 e8 00 00 restore /* * Reset the maximum value. It will be updated when the information is * extended. */ information->maximum = 0; 40008fa8: 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 ); 40008fac: 7f ff fe 82 call 400089b4 <_Objects_Extend_information> 40008fb0: 81 e8 00 00 restore 40008fb4: 01 00 00 00 nop 40008fb8 <_Objects_Name_to_id>: Objects_Information *information, Objects_Name name, uint32_t node, Objects_Id *id ) { 40008fb8: 9d e3 bf 98 save %sp, -104, %sp 40008fbc: 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 ) 40008fc0: 80 a6 e0 00 cmp %i3, 0 40008fc4: 02 80 00 2d be 40009078 <_Objects_Name_to_id+0xc0> 40008fc8: b0 10 20 02 mov 2, %i0 return OBJECTS_INVALID_ADDRESS; if ( name == 0 ) 40008fcc: 80 a6 60 00 cmp %i1, 0 40008fd0: 02 80 00 28 be 40009070 <_Objects_Name_to_id+0xb8> 40008fd4: 01 00 00 00 nop return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40008fd8: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 40008fdc: 86 90 60 00 orcc %g1, 0, %g3 40008fe0: 02 80 00 24 be 40009070 <_Objects_Name_to_id+0xb8> 40008fe4: 80 a6 a0 00 cmp %i2, 0 40008fe8: 12 80 00 26 bne 40009080 <_Objects_Name_to_id+0xc8> 40008fec: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 search_local_node = TRUE; if ( search_local_node ) { name_length = information->name_length; if ( information->is_string ) compare_them = _Objects_Compare_name_string; 40008ff0: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 40008ff4: 05 10 00 38 sethi %hi(0x4000e000), %g2 40008ff8: 80 a0 60 00 cmp %g1, 0 40008ffc: a4 10 a1 8c or %g2, 0x18c, %l2 40009000: 02 80 00 04 be 40009010 <_Objects_Name_to_id+0x58> 40009004: c8 14 60 44 lduh [ %l1 + 0x44 ], %g4 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40009008: 03 10 00 38 sethi %hi(0x4000e000), %g1 <== NOT EXECUTED 4000900c: a4 10 61 9c or %g1, 0x19c, %l2 ! 4000e19c <_Objects_Compare_name_string> <== NOT EXECUTED for ( index = 1; index <= information->maximum; index++ ) { the_object = information->local_table[ index ]; if ( !the_object || !the_object->name ) continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 40009010: 83 29 20 10 sll %g4, 0x10, %g1 if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40009014: 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 ) ) { 40009018: 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 ]; 4000901c: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 40009020: 83 2c 20 02 sll %l0, 2, %g1 40009024: f4 00 80 01 ld [ %g2 + %g1 ], %i2 if ( !the_object || !the_object->name ) 40009028: 80 a6 a0 00 cmp %i2, 0 4000902c: 02 80 00 0c be 4000905c <_Objects_Name_to_id+0xa4> 40009030: a0 04 20 01 inc %l0 40009034: d2 06 a0 0c ld [ %i2 + 0xc ], %o1 40009038: 80 a2 60 00 cmp %o1, 0 4000903c: 02 80 00 08 be 4000905c <_Objects_Name_to_id+0xa4> 40009040: 90 10 00 19 mov %i1, %o0 continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { 40009044: 9f c4 80 00 call %l2 40009048: 94 10 00 18 mov %i0, %o2 4000904c: 80 a2 20 00 cmp %o0, 0 40009050: 32 80 00 13 bne,a 4000909c <_Objects_Name_to_id+0xe4> 40009054: c2 06 a0 08 ld [ %i2 + 8 ], %g1 40009058: c6 14 60 10 lduh [ %l1 + 0x10 ], %g3 name_length = information->name_length; if ( information->is_string ) compare_them = _Objects_Compare_name_string; else compare_them = _Objects_Compare_name_raw; for ( index = 1; index <= information->maximum; index++ ) { 4000905c: 83 28 e0 10 sll %g3, 0x10, %g1 40009060: 83 30 60 10 srl %g1, 0x10, %g1 40009064: 80 a0 40 10 cmp %g1, %l0 40009068: 3a bf ff ee bcc,a 40009020 <_Objects_Name_to_id+0x68> 4000906c: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 40009070: 81 c7 e0 08 ret 40009074: 91 e8 20 01 restore %g0, 1, %o0 return ( _Objects_MP_Global_name_search( information, name, node, id ) ); #else return OBJECTS_INVALID_NAME; #endif } 40009078: 81 c7 e0 08 ret <== NOT EXECUTED 4000907c: 81 e8 00 00 restore <== NOT EXECUTED if ( name == 0 ) return OBJECTS_INVALID_NAME; search_local_node = FALSE; if ( information->maximum != 0 && 40009080: 82 10 63 ff or %g1, 0x3ff, %g1 40009084: 80 a6 80 01 cmp %i2, %g1 40009088: 02 bf ff da be 40008ff0 <_Objects_Name_to_id+0x38> 4000908c: 80 a6 a0 01 cmp %i2, 1 40009090: 22 bf ff d9 be,a 40008ff4 <_Objects_Name_to_id+0x3c> 40009094: c2 04 60 40 ld [ %l1 + 0x40 ], %g1 40009098: 30 bf ff f6 b,a 40009070 <_Objects_Name_to_id+0xb8> the_object = information->local_table[ index ]; if ( !the_object || !the_object->name ) continue; if ( (*compare_them)( name, the_object->name, name_length ) ) { *id = the_object->id; 4000909c: c2 26 c0 00 st %g1, [ %i3 ] 400090a0: 81 c7 e0 08 ret 400090a4: 91 e8 20 00 restore %g0, 0, %o0 400090e0 <_Objects_Shrink_information>: */ void _Objects_Shrink_information( Objects_Information *information ) { 400090e0: 9d e3 bf 98 save %sp, -104, %sp 400090e4: 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; 400090e8: e0 06 20 18 ld [ %i0 + 0x18 ], %l0 400090ec: d0 16 20 10 lduh [ %i0 + 0x10 ], %o0 400090f0: 03 00 00 3f sethi %hi(0xfc00), %g1 400090f4: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 400090f8: 92 10 00 10 mov %l0, %o1 400090fc: a2 08 80 01 and %g2, %g1, %l1 40009100: 40 00 34 98 call 40016360 <.udiv> 40009104: 90 22 00 11 sub %o0, %l1, %o0 for ( block = 0; block < block_count; block++ ) { 40009108: 80 a2 20 00 cmp %o0, 0 4000910c: 02 80 00 15 be 40009160 <_Objects_Shrink_information+0x80> 40009110: 86 10 20 00 clr %g3 if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40009114: c8 06 20 38 ld [ %i0 + 0x38 ], %g4 40009118: c2 01 00 00 ld [ %g4 ], %g1 4000911c: 84 10 20 04 mov 4, %g2 40009120: 80 a4 00 01 cmp %l0, %g1 40009124: a8 10 20 00 clr %l4 40009128: 12 80 00 0a bne 40009150 <_Objects_Shrink_information+0x70> 4000912c: a4 10 20 00 clr %l2 /* * XXX - Not to sure how to use a chain where you need to iterate and * and remove elements. */ the_object = (Objects_Control *) information->Inactive.first; 40009130: 10 80 00 10 b 40009170 <_Objects_Shrink_information+0x90> <== NOT EXECUTED 40009134: d0 06 20 28 ld [ %i0 + 0x28 ], %o0 <== NOT EXECUTED information->inactive -= information->allocation_size; return; } index_base += information->allocation_size; 40009138: a2 04 40 10 add %l1, %l0, %l1 index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; for ( block = 0; block < block_count; block++ ) { if ( information->inactive_per_block[ block ] == information->allocation_size ) { 4000913c: 80 a4 00 01 cmp %l0, %g1 information->inactive -= information->allocation_size; return; } index_base += information->allocation_size; 40009140: a4 10 00 02 mov %g2, %l2 index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; for ( block = 0; block < block_count; block++ ) { if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40009144: 02 80 00 09 be 40009168 <_Objects_Shrink_information+0x88> 40009148: 82 00 a0 04 add %g2, 4, %g1 information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; return; 4000914c: 84 10 00 01 mov %g1, %g2 */ index_base = _Objects_Get_index( information->minimum_id ); block_count = ( information->maximum - index_base ) / information->allocation_size; for ( block = 0; block < block_count; block++ ) { 40009150: 86 00 e0 01 inc %g3 40009154: 80 a0 c0 08 cmp %g3, %o0 40009158: 32 bf ff f8 bne,a 40009138 <_Objects_Shrink_information+0x58> 4000915c: c2 00 80 04 ld [ %g2 + %g4 ], %g1 40009160: 81 c7 e0 08 ret 40009164: 81 e8 00 00 restore if ( information->inactive_per_block[ block ] == information->allocation_size ) { 40009168: a8 10 00 02 mov %g2, %l4 /* * XXX - Not to sure how to use a chain where you need to iterate and * and remove elements. */ the_object = (Objects_Control *) information->Inactive.first; 4000916c: d0 06 20 28 ld [ %i0 + 0x28 ], %o0 40009170: 03 00 00 3f sethi %hi(0xfc00), %g1 40009174: e0 02 00 00 ld [ %o0 ], %l0 40009178: 10 80 00 10 b 400091b8 <_Objects_Shrink_information+0xd8> 4000917c: a6 10 63 ff or %g1, 0x3ff, %l3 */ do { index = _Objects_Get_index( the_object->id ); if ((index >= index_base) && 40009180: 82 04 40 01 add %l1, %g1, %g1 40009184: 80 a0 80 01 cmp %g2, %g1 40009188: 3a 80 00 12 bcc,a 400091d0 <_Objects_Shrink_information+0xf0> 4000918c: 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 ); 40009190: 40 00 12 e0 call 4000dd10 <_Chain_Extract> 40009194: 01 00 00 00 nop 40009198: 90 10 00 10 mov %l0, %o0 } else { the_object = (Objects_Control *) the_object->Node.next; } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 4000919c: 80 a2 20 00 cmp %o0, 0 400091a0: 22 80 00 10 be,a 400091e0 <_Objects_Shrink_information+0x100> 400091a4: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_last( const Chain_Node *the_node ) { return (the_node->next == NULL); 400091a8: e0 02 00 00 ld [ %o0 ], %l0 400091ac: 80 a4 20 00 cmp %l0, 0 400091b0: 22 80 00 0c be,a 400091e0 <_Objects_Shrink_information+0x100> 400091b4: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 400091b8: c2 02 20 08 ld [ %o0 + 8 ], %g1 400091bc: 84 08 40 13 and %g1, %l3, %g2 */ do { index = _Objects_Get_index( the_object->id ); if ((index >= index_base) && 400091c0: 80 a0 80 11 cmp %g2, %l1 400091c4: 3a bf ff ef bcc,a 40009180 <_Objects_Shrink_information+0xa0> 400091c8: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 the_object = NULL; _Chain_Extract( &extract_me->Node ); } else { the_object = (Objects_Control *) the_object->Node.next; 400091cc: 90 10 00 10 mov %l0, %o0 } } while ( the_object && !_Chain_Is_last( &the_object->Node ) ); 400091d0: 80 a2 20 00 cmp %o0, 0 400091d4: 32 bf ff f6 bne,a 400091ac <_Objects_Shrink_information+0xcc> 400091d8: e0 02 00 00 ld [ %o0 ], %l0 RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 400091dc: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 400091e0: 11 10 00 6b sethi %hi(0x4001ac00), %o0 400091e4: d2 00 40 14 ld [ %g1 + %l4 ], %o1 400091e8: 7f ff fc 99 call 4000844c <_Heap_Free> 400091ec: 90 12 21 dc or %o0, 0x1dc, %o0 */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 400091f0: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 /* * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; 400091f4: c8 06 20 24 ld [ %i0 + 0x24 ], %g4 information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; 400091f8: c0 24 80 02 clr [ %l2 + %g2 ] information->inactive -= information->allocation_size; 400091fc: c2 16 20 34 lduh [ %i0 + 0x34 ], %g1 * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; 40009200: c4 06 20 3c ld [ %i0 + 0x3c ], %g2 information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 40009204: c6 06 20 18 ld [ %i0 + 0x18 ], %g3 /* * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; 40009208: c0 25 00 04 clr [ %l4 + %g4 ] information->object_blocks[ block ] = NULL; information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 4000920c: 82 20 40 03 sub %g1, %g3, %g1 * Free the memory and reset the structures in the object' information */ _Workspace_Free( information->object_blocks[ block ] ); information->name_table[ block ] = NULL; information->object_blocks[ block ] = NULL; 40009210: c0 25 00 02 clr [ %l4 + %g2 ] information->inactive_per_block[ block ] = 0; information->inactive -= information->allocation_size; 40009214: c2 36 20 34 sth %g1, [ %i0 + 0x34 ] 40009218: 81 c7 e0 08 ret 4000921c: 81 e8 00 00 restore 40009220 <_Protected_heap_Allocate>: void *_Protected_heap_Allocate( Heap_Control *the_heap, size_t size ) { 40009220: 9d e3 bf 98 save %sp, -104, %sp void *p; _RTEMS_Lock_allocator(); 40009224: 7f ff e3 6a call 40001fcc 40009228: 01 00 00 00 nop 4000922c: a4 10 00 08 mov %o0, %l2 40009230: 23 10 00 6b sethi %hi(0x4001ac00), %l1 40009234: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 40009238: 80 a0 60 00 cmp %g1, 0 4000923c: 02 80 00 0b be 40009268 <_Protected_heap_Allocate+0x48> 40009240: 27 10 00 6b sethi %hi(0x4001ac00), %l3 40009244: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40009248: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> 4000924c: 80 a0 a0 01 cmp %g2, 1 40009250: 08 80 00 06 bleu 40009268 <_Protected_heap_Allocate+0x48> 40009254: 90 10 20 00 clr %o0 40009258: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000925c: 7f ff fd 7c call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40009260: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40009264: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40009268: 09 10 00 6b sethi %hi(0x4001ac00), %g4 4000926c: e0 04 e2 64 ld [ %l3 + 0x264 ], %l0 40009270: c4 01 22 6c ld [ %g4 + 0x26c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40009274: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40009278: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 4000927c: 80 a0 60 00 cmp %g1, 0 40009280: 22 80 00 27 be,a 4000931c <_Protected_heap_Allocate+0xfc> 40009284: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40009288: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000928c: 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; 40009290: 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; 40009294: 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; 40009298: 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; 4000929c: 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 ) || 400092a0: 80 a0 e0 02 cmp %g3, 2 400092a4: 12 80 00 2d bne 40009358 <_Protected_heap_Allocate+0x138> 400092a8: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400092ac: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400092b0: 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++; 400092b4: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400092b8: 02 80 00 46 be 400093d0 <_Protected_heap_Allocate+0x1b0> 400092bc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 400092c0: 7f ff e3 47 call 40001fdc 400092c4: 90 10 00 12 mov %l2, %o0 p = _Heap_Allocate( the_heap, size ); 400092c8: 90 10 00 18 mov %i0, %o0 400092cc: 7f ff fc 2e call 40008384 <_Heap_Allocate> 400092d0: 92 10 00 19 mov %i1, %o1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400092d4: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 400092d8: b0 10 00 08 mov %o0, %i0 400092dc: 82 00 60 01 inc %g1 400092e0: c2 24 61 90 st %g1, [ %l1 + 0x190 ] _RTEMS_Unlock_allocator(); 400092e4: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 400092e8: 94 10 20 00 clr %o2 400092ec: d2 02 20 08 ld [ %o0 + 8 ], %o1 400092f0: 7f ff fb 54 call 40008040 <_CORE_mutex_Surrender> 400092f4: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400092f8: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 400092fc: 82 00 7f ff add %g1, -1, %g1 40009300: c2 24 61 90 st %g1, [ %l1 + 0x190 ] 40009304: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 40009308: 80 a0 a0 00 cmp %g2, 0 4000930c: 02 80 00 2d be 400093c0 <_Protected_heap_Allocate+0x1a0> 40009310: 01 00 00 00 nop return p; } 40009314: 81 c7 e0 08 ret 40009318: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 4000931c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40009320: 12 80 00 16 bne 40009378 <_Protected_heap_Allocate+0x158> <== NOT EXECUTED 40009324: c6 04 e2 64 ld [ %l3 + 0x264 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40009328: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 4000932c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009330: 22 80 00 43 be,a 4000943c <_Protected_heap_Allocate+0x21c> <== NOT EXECUTED 40009334: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40009338: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000933c: 12 80 00 0f bne 40009378 <_Protected_heap_Allocate+0x158> <== NOT EXECUTED 40009340: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40009344: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40009348: 7f ff e3 25 call 40001fdc <== NOT EXECUTED 4000934c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { void *p; _RTEMS_Lock_allocator(); p = _Heap_Allocate( the_heap, size ); 40009350: 10 bf ff df b 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40009354: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40009358: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000935c: 12 bf ff d9 bne 400092c0 <_Protected_heap_Allocate+0xa0> <== NOT EXECUTED 40009360: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009364: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009368: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000936c: 02 80 00 19 be 400093d0 <_Protected_heap_Allocate+0x1b0> <== NOT EXECUTED 40009370: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40009374: 30 bf ff d3 b,a 400092c0 <_Protected_heap_Allocate+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009378: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED size_t size ) { void *p; _RTEMS_Lock_allocator(); 4000937c: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40009380: c8 01 22 6c ld [ %g4 + 0x26c ], %g4 <== NOT EXECUTED 40009384: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009388: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 4000938c: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009390: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 40009394: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40009398: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 4000939c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 400093a0: 7f ff e3 0f call 40001fdc <== NOT EXECUTED 400093a4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400093a8: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 400093ac: 92 10 20 00 clr %o1 <== NOT EXECUTED 400093b0: 7f ff fb 00 call 40007fb0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 400093b4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED p = _Heap_Allocate( the_heap, size ); 400093b8: 10 bf ff c5 b 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 400093bc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400093c0: 40 00 03 c9 call 4000a2e4 <_Thread_Dispatch> 400093c4: 01 00 00 00 nop 400093c8: 81 c7 e0 08 ret 400093cc: 81 e8 00 00 restore */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 400093d0: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400093d4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400093d8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400093dc: 02 80 00 28 be 4000947c <_Protected_heap_Allocate+0x25c> <== NOT EXECUTED 400093e0: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 400093e4: 1a 80 00 1c bcc 40009454 <_Protected_heap_Allocate+0x234> <== NOT EXECUTED 400093e8: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400093ec: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 400093f0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400093f4: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400093f8: 7f ff e2 f9 call 40001fdc <== NOT EXECUTED 400093fc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40009400: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40009404: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40009408: 40 00 02 93 call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 4000940c: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009410: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009414: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009418: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 4000941c: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009420: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009424: 32 bf ff aa bne,a 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40009428: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000942c: 40 00 03 ae call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40009430: 01 00 00 00 nop <== NOT EXECUTED 40009434: 10 bf ff a6 b 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40009438: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 4000943c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009440: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40009444: 7f ff e2 e6 call 40001fdc <== NOT EXECUTED 40009448: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000944c: 10 bf ff a0 b 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40009450: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40009454: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009458: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000945c: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40009460: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009464: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009468: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000946c: 7f ff e2 dc call 40001fdc <== NOT EXECUTED 40009470: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009474: 10 bf ff 96 b 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40009478: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4000947c: 7f ff e2 d8 call 40001fdc <== NOT EXECUTED 40009480: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009484: 10 bf ff 92 b 400092cc <_Protected_heap_Allocate+0xac> <== NOT EXECUTED 40009488: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000948c <_Protected_heap_Extend>: boolean _Protected_heap_Extend( Heap_Control *the_heap, void *starting_address, size_t size ) { 4000948c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 40009490: 7f ff e2 cf call 40001fcc <== NOT EXECUTED 40009494: 01 00 00 00 nop <== NOT EXECUTED 40009498: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 4000949c: 23 10 00 6b sethi %hi(0x4001ac00), %l1 <== NOT EXECUTED 400094a0: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 400094a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400094a8: 02 80 00 0b be 400094d4 <_Protected_heap_Extend+0x48> <== NOT EXECUTED 400094ac: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED 400094b0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 400094b4: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> <== NOT EXECUTED 400094b8: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 400094bc: 08 80 00 06 bleu 400094d4 <_Protected_heap_Extend+0x48> <== NOT EXECUTED 400094c0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400094c4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400094c8: 7f ff fc e1 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 400094cc: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400094d0: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400094d4: 09 10 00 6b sethi %hi(0x4001ac00), %g4 <== NOT EXECUTED 400094d8: e0 04 e2 64 ld [ %l3 + 0x264 ], %l0 <== NOT EXECUTED 400094dc: c4 01 22 6c ld [ %g4 + 0x26c ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400094e0: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400094e4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 400094e8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400094ec: 22 80 00 2d be,a 400095a0 <_Protected_heap_Extend+0x114> <== NOT EXECUTED 400094f0: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400094f4: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400094f8: 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; 400094fc: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40009500: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40009504: 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; 40009508: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000950c: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 40009510: 12 80 00 33 bne 400095dc <_Protected_heap_Extend+0x150> <== NOT EXECUTED 40009514: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009518: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000951c: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009520: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009524: 02 80 00 48 be 40009644 <_Protected_heap_Extend+0x1b8> <== NOT EXECUTED 40009528: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000952c: 7f ff e2 ac call 40001fdc <== NOT EXECUTED 40009530: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 40009534: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009538: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000953c: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40009540: 40 00 12 2f call 4000ddfc <_Heap_Extend> <== NOT EXECUTED 40009544: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009548: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 4000954c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40009550: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009554: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 40009558: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 4000955c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40009560: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40009564: 7f ff fa b7 call 40008040 <_CORE_mutex_Surrender> <== NOT EXECUTED 40009568: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000956c: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009570: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009574: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009578: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 4000957c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009580: 12 80 00 05 bne 40009594 <_Protected_heap_Extend+0x108> <== NOT EXECUTED 40009584: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED _Thread_Dispatch(); 40009588: 40 00 03 57 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 4000958c: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_EXTEND_SUCCESSFUL); } 40009590: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 40009594: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 40009598: 81 c7 e0 08 ret <== NOT EXECUTED 4000959c: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 400095a0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 400095a4: 12 80 00 16 bne 400095fc <_Protected_heap_Extend+0x170> <== NOT EXECUTED 400095a8: c6 04 e2 64 ld [ %l3 + 0x264 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400095ac: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 400095b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400095b4: 22 80 00 3f be,a 400096b0 <_Protected_heap_Extend+0x224> <== NOT EXECUTED 400095b8: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 400095bc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400095c0: 12 80 00 0f bne 400095fc <_Protected_heap_Extend+0x170> <== NOT EXECUTED 400095c4: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400095c8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400095cc: 7f ff e2 84 call 40001fdc <== NOT EXECUTED 400095d0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED { Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 400095d4: 10 bf ff d9 b 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 400095d8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400095dc: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400095e0: 12 bf ff d3 bne 4000952c <_Protected_heap_Extend+0xa0> <== NOT EXECUTED 400095e4: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400095e8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400095ec: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400095f0: 02 80 00 15 be 40009644 <_Protected_heap_Extend+0x1b8> <== NOT EXECUTED 400095f4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 400095f8: 30 bf ff cd b,a 4000952c <_Protected_heap_Extend+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400095fc: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED ) { Heap_Extend_status status; uint32_t amount_extended; _RTEMS_Lock_allocator(); 40009600: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40009604: c8 01 22 6c ld [ %g4 + 0x26c ], %g4 <== NOT EXECUTED 40009608: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000960c: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40009610: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009614: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40009618: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 4000961c: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40009620: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40009624: 7f ff e2 6e call 40001fdc <== NOT EXECUTED 40009628: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000962c: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 40009630: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009634: 7f ff fa 5f call 40007fb0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40009638: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Extend(the_heap, starting_address, size, &amount_extended); 4000963c: 10 bf ff bf b 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 40009640: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40009644: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40009648: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 4000964c: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40009650: 02 80 00 28 be 400096f0 <_Protected_heap_Extend+0x264> <== NOT EXECUTED 40009654: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40009658: 1a 80 00 1c bcc 400096c8 <_Protected_heap_Extend+0x23c> <== NOT EXECUTED 4000965c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 40009660: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009664: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009668: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 4000966c: 7f ff e2 5c call 40001fdc <== NOT EXECUTED 40009670: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40009674: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40009678: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 4000967c: 40 00 01 f6 call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 40009680: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009684: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009688: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000968c: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009690: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009694: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009698: 32 bf ff a8 bne,a 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 4000969c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 400096a0: 40 00 03 11 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 400096a4: 01 00 00 00 nop <== NOT EXECUTED 400096a8: 10 bf ff a4 b 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 400096ac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 400096b0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400096b4: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400096b8: 7f ff e2 49 call 40001fdc <== NOT EXECUTED 400096bc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400096c0: 10 bf ff 9e b 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 400096c4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400096c8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400096cc: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400096d0: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 400096d4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400096d8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400096dc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 400096e0: 7f ff e2 3f call 40001fdc <== NOT EXECUTED 400096e4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400096e8: 10 bf ff 94 b 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 400096ec: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 400096f0: 7f ff e2 3b call 40001fdc <== NOT EXECUTED 400096f4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 400096f8: 10 bf ff 90 b 40009538 <_Protected_heap_Extend+0xac> <== NOT EXECUTED 400096fc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009700 <_Protected_heap_Free>: boolean _Protected_heap_Free( Heap_Control *the_heap, void *start_address ) { 40009700: 9d e3 bf 98 save %sp, -104, %sp boolean status; _RTEMS_Lock_allocator(); 40009704: 7f ff e2 32 call 40001fcc 40009708: 01 00 00 00 nop 4000970c: a4 10 00 08 mov %o0, %l2 40009710: 23 10 00 6b sethi %hi(0x4001ac00), %l1 40009714: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 40009718: 80 a0 60 00 cmp %g1, 0 4000971c: 02 80 00 0b be 40009748 <_Protected_heap_Free+0x48> 40009720: 27 10 00 6b sethi %hi(0x4001ac00), %l3 40009724: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 40009728: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> <== NOT EXECUTED 4000972c: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40009730: 08 80 00 06 bleu 40009748 <_Protected_heap_Free+0x48> <== NOT EXECUTED 40009734: 90 10 20 00 clr %o0 <== NOT EXECUTED 40009738: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000973c: 7f ff fc 44 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40009740: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40009744: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40009748: 09 10 00 6b sethi %hi(0x4001ac00), %g4 4000974c: e0 04 e2 64 ld [ %l3 + 0x264 ], %l0 40009750: c4 01 22 6c ld [ %g4 + 0x26c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40009754: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40009758: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 4000975c: 80 a0 60 00 cmp %g1, 0 40009760: 22 80 00 27 be,a 400097fc <_Protected_heap_Free+0xfc> 40009764: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40009768: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000976c: 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; 40009770: 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; 40009774: 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; 40009778: 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; 4000977c: 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 ) || 40009780: 80 a0 e0 02 cmp %g3, 2 40009784: 12 80 00 2d bne 40009838 <_Protected_heap_Free+0x138> 40009788: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000978c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009790: 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++; 40009794: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009798: 02 80 00 46 be 400098b0 <_Protected_heap_Free+0x1b0> 4000979c: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 400097a0: 7f ff e2 0f call 40001fdc 400097a4: 90 10 00 12 mov %l2, %o0 status = _Heap_Free( the_heap, start_address ); 400097a8: 90 10 00 18 mov %i0, %o0 400097ac: 7f ff fb 28 call 4000844c <_Heap_Free> 400097b0: 92 10 00 19 mov %i1, %o1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400097b4: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 400097b8: b0 10 00 08 mov %o0, %i0 400097bc: 82 00 60 01 inc %g1 400097c0: c2 24 61 90 st %g1, [ %l1 + 0x190 ] _RTEMS_Unlock_allocator(); 400097c4: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 400097c8: 94 10 20 00 clr %o2 400097cc: d2 02 20 08 ld [ %o0 + 8 ], %o1 400097d0: 7f ff fa 1c call 40008040 <_CORE_mutex_Surrender> 400097d4: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400097d8: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 400097dc: 82 00 7f ff add %g1, -1, %g1 400097e0: c2 24 61 90 st %g1, [ %l1 + 0x190 ] 400097e4: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 400097e8: 80 a0 a0 00 cmp %g2, 0 400097ec: 02 80 00 2d be 400098a0 <_Protected_heap_Free+0x1a0> 400097f0: 01 00 00 00 nop return status; } 400097f4: 81 c7 e0 08 ret <== NOT EXECUTED 400097f8: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 400097fc: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40009800: 12 80 00 16 bne 40009858 <_Protected_heap_Free+0x158> <== NOT EXECUTED 40009804: c6 04 e2 64 ld [ %l3 + 0x264 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40009808: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 4000980c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009810: 22 80 00 43 be,a 4000991c <_Protected_heap_Free+0x21c> <== NOT EXECUTED 40009814: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40009818: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000981c: 12 80 00 0f bne 40009858 <_Protected_heap_Free+0x158> <== NOT EXECUTED 40009820: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40009824: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40009828: 7f ff e1 ed call 40001fdc <== NOT EXECUTED 4000982c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { boolean status; _RTEMS_Lock_allocator(); status = _Heap_Free( the_heap, start_address ); 40009830: 10 bf ff df b 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 40009834: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40009838: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000983c: 12 bf ff d9 bne 400097a0 <_Protected_heap_Free+0xa0> <== NOT EXECUTED 40009840: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009844: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009848: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000984c: 02 80 00 19 be 400098b0 <_Protected_heap_Free+0x1b0> <== NOT EXECUTED 40009850: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40009854: 30 bf ff d3 b,a 400097a0 <_Protected_heap_Free+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009858: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED void *start_address ) { boolean status; _RTEMS_Lock_allocator(); 4000985c: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40009860: c8 01 22 6c ld [ %g4 + 0x26c ], %g4 <== NOT EXECUTED 40009864: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009868: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 4000986c: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009870: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40009874: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40009878: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 4000987c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40009880: 7f ff e1 d7 call 40001fdc <== NOT EXECUTED 40009884: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009888: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 4000988c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009890: 7f ff f9 c8 call 40007fb0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40009894: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Free( the_heap, start_address ); 40009898: 10 bf ff c5 b 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 4000989c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400098a0: 40 00 02 91 call 4000a2e4 <_Thread_Dispatch> 400098a4: 01 00 00 00 nop 400098a8: 81 c7 e0 08 ret 400098ac: 81 e8 00 00 restore */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 400098b0: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400098b4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400098b8: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400098bc: 02 80 00 28 be 4000995c <_Protected_heap_Free+0x25c> <== NOT EXECUTED 400098c0: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 400098c4: 1a 80 00 1c bcc 40009934 <_Protected_heap_Free+0x234> <== NOT EXECUTED 400098c8: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400098cc: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 400098d0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400098d4: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400098d8: 7f ff e1 c1 call 40001fdc <== NOT EXECUTED 400098dc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 400098e0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 400098e4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 400098e8: 40 00 01 5b call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 400098ec: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400098f0: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 400098f4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400098f8: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 400098fc: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009900: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009904: 32 bf ff aa bne,a 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 40009908: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000990c: 40 00 02 76 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40009910: 01 00 00 00 nop <== NOT EXECUTED 40009914: 10 bf ff a6 b 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 40009918: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 4000991c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009920: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40009924: 7f ff e1 ae call 40001fdc <== NOT EXECUTED 40009928: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000992c: 10 bf ff a0 b 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 40009930: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40009934: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009938: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000993c: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40009940: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009944: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009948: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000994c: 7f ff e1 a4 call 40001fdc <== NOT EXECUTED 40009950: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009954: 10 bf ff 96 b 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 40009958: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4000995c: 7f ff e1 a0 call 40001fdc <== NOT EXECUTED 40009960: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009964: 10 bf ff 92 b 400097ac <_Protected_heap_Free+0xac> <== NOT EXECUTED 40009968: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000996c <_Protected_heap_Get_block_size>: boolean _Protected_heap_Get_block_size( Heap_Control *the_heap, void *starting_address, size_t *size ) { 4000996c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED boolean status; _RTEMS_Lock_allocator(); 40009970: 7f ff e1 97 call 40001fcc <== NOT EXECUTED 40009974: 01 00 00 00 nop <== NOT EXECUTED 40009978: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 4000997c: 23 10 00 6b sethi %hi(0x4001ac00), %l1 <== NOT EXECUTED 40009980: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009984: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009988: 02 80 00 0b be 400099b4 <_Protected_heap_Get_block_size+0x48> <== NOT EXECUTED 4000998c: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED 40009990: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 40009994: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> <== NOT EXECUTED 40009998: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 4000999c: 08 80 00 06 bleu 400099b4 <_Protected_heap_Get_block_size+0x48> <== NOT EXECUTED 400099a0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400099a4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400099a8: 7f ff fb a9 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 400099ac: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400099b0: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400099b4: 09 10 00 6b sethi %hi(0x4001ac00), %g4 <== NOT EXECUTED 400099b8: e0 04 e2 64 ld [ %l3 + 0x264 ], %l0 <== NOT EXECUTED 400099bc: c4 01 22 6c ld [ %g4 + 0x26c ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400099c0: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400099c4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 400099c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400099cc: 22 80 00 28 be,a 40009a6c <_Protected_heap_Get_block_size+0x100> <== NOT EXECUTED 400099d0: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 400099d4: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400099d8: 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; 400099dc: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 400099e0: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400099e4: 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; 400099e8: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400099ec: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 400099f0: 12 80 00 2e bne 40009aa8 <_Protected_heap_Get_block_size+0x13c> <== NOT EXECUTED 400099f4: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400099f8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400099fc: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009a00: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009a04: 02 80 00 47 be 40009b20 <_Protected_heap_Get_block_size+0x1b4> <== NOT EXECUTED 40009a08: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40009a0c: 7f ff e1 74 call 40001fdc <== NOT EXECUTED 40009a10: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 40009a14: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009a18: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40009a1c: 40 00 11 b9 call 4000e100 <_Heap_Size_of_user_area> <== NOT EXECUTED 40009a20: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009a24: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009a28: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40009a2c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009a30: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 40009a34: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 40009a38: 94 10 20 00 clr %o2 <== NOT EXECUTED 40009a3c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40009a40: 7f ff f9 80 call 40008040 <_CORE_mutex_Surrender> <== NOT EXECUTED 40009a44: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009a48: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009a4c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009a50: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009a54: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009a58: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009a5c: 02 80 00 2d be 40009b10 <_Protected_heap_Get_block_size+0x1a4> <== NOT EXECUTED 40009a60: 01 00 00 00 nop <== NOT EXECUTED return status; } 40009a64: 81 c7 e0 08 ret <== NOT EXECUTED 40009a68: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40009a6c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40009a70: 12 80 00 16 bne 40009ac8 <_Protected_heap_Get_block_size+0x15c> <== NOT EXECUTED 40009a74: c6 04 e2 64 ld [ %l3 + 0x264 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40009a78: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40009a7c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009a80: 22 80 00 43 be,a 40009b8c <_Protected_heap_Get_block_size+0x220> <== NOT EXECUTED 40009a84: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40009a88: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40009a8c: 12 80 00 0f bne 40009ac8 <_Protected_heap_Get_block_size+0x15c> <== NOT EXECUTED 40009a90: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40009a94: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40009a98: 7f ff e1 51 call 40001fdc <== NOT EXECUTED 40009a9c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { boolean status; _RTEMS_Lock_allocator(); status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 40009aa0: 10 bf ff de b 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009aa4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40009aa8: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40009aac: 12 bf ff d8 bne 40009a0c <_Protected_heap_Get_block_size+0xa0> <== NOT EXECUTED 40009ab0: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009ab4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009ab8: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009abc: 02 80 00 19 be 40009b20 <_Protected_heap_Get_block_size+0x1b4> <== NOT EXECUTED 40009ac0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40009ac4: 30 bf ff d2 b,a 40009a0c <_Protected_heap_Get_block_size+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009ac8: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED size_t *size ) { boolean status; _RTEMS_Lock_allocator(); 40009acc: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40009ad0: c8 01 22 6c ld [ %g4 + 0x26c ], %g4 <== NOT EXECUTED 40009ad4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009ad8: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40009adc: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009ae0: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40009ae4: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40009ae8: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40009aec: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40009af0: 7f ff e1 3b call 40001fdc <== NOT EXECUTED 40009af4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009af8: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 40009afc: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009b00: 7f ff f9 2c call 40007fb0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40009b04: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Size_of_user_area( the_heap, starting_address, size ); 40009b08: 10 bf ff c4 b 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009b0c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40009b10: 40 00 01 f5 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40009b14: 01 00 00 00 nop <== NOT EXECUTED 40009b18: 81 c7 e0 08 ret <== NOT EXECUTED 40009b1c: 81 e8 00 00 restore <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40009b20: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40009b24: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40009b28: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40009b2c: 02 80 00 28 be 40009bcc <_Protected_heap_Get_block_size+0x260> <== NOT EXECUTED 40009b30: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40009b34: 1a 80 00 1c bcc 40009ba4 <_Protected_heap_Get_block_size+0x238> <== NOT EXECUTED 40009b38: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009b3c: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009b40: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009b44: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40009b48: 7f ff e1 25 call 40001fdc <== NOT EXECUTED 40009b4c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40009b50: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40009b54: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40009b58: 40 00 00 bf call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 40009b5c: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009b60: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009b64: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009b68: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009b6c: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009b70: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009b74: 32 bf ff a9 bne,a 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009b78: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40009b7c: 40 00 01 da call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40009b80: 01 00 00 00 nop <== NOT EXECUTED 40009b84: 10 bf ff a5 b 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009b88: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40009b8c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009b90: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40009b94: 7f ff e1 12 call 40001fdc <== NOT EXECUTED 40009b98: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009b9c: 10 bf ff 9f b 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009ba0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40009ba4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009ba8: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40009bac: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40009bb0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009bb4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009bb8: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40009bbc: 7f ff e1 08 call 40001fdc <== NOT EXECUTED 40009bc0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009bc4: 10 bf ff 95 b 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009bc8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40009bcc: 7f ff e1 04 call 40001fdc <== NOT EXECUTED 40009bd0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009bd4: 10 bf ff 91 b 40009a18 <_Protected_heap_Get_block_size+0xac> <== NOT EXECUTED 40009bd8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000d3b8 <_Protected_heap_Get_free_information>: void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { 4000d3b8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _RTEMS_Lock_allocator(); 4000d3bc: 7f ff da b7 call 40003e98 <== NOT EXECUTED 4000d3c0: 01 00 00 00 nop <== NOT EXECUTED 4000d3c4: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 4000d3c8: 23 10 00 f8 sethi %hi(0x4003e000), %l1 <== NOT EXECUTED 4000d3cc: c2 04 63 20 ld [ %l1 + 0x320 ], %g1 ! 4003e320 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000d3d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d3d4: 02 80 00 0b be 4000d400 <_Protected_heap_Get_free_information+0x48> <== NOT EXECUTED 4000d3d8: 27 10 00 f8 sethi %hi(0x4003e000), %l3 <== NOT EXECUTED 4000d3dc: 03 10 00 f9 sethi %hi(0x4003e400), %g1 <== NOT EXECUTED 4000d3e0: c4 00 61 00 ld [ %g1 + 0x100 ], %g2 ! 4003e500 <_System_state_Current> <== NOT EXECUTED 4000d3e4: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 4000d3e8: 08 80 00 06 bleu 4000d400 <_Protected_heap_Get_free_information+0x48> <== NOT EXECUTED 4000d3ec: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000d3f0: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000d3f4: 7f ff fb 49 call 4000c118 <_Internal_error_Occurred> <== NOT EXECUTED 4000d3f8: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4000d3fc: 27 10 00 f8 sethi %hi(0x4003e000), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 4000d400: 09 10 00 f8 sethi %hi(0x4003e000), %g4 <== NOT EXECUTED 4000d404: e0 04 e3 f4 ld [ %l3 + 0x3f4 ], %l0 <== NOT EXECUTED 4000d408: c4 01 23 fc ld [ %g4 + 0x3fc ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4000d40c: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 4000d410: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 4000d414: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d418: 22 80 00 26 be,a 4000d4b0 <_Protected_heap_Get_free_information+0xf8> <== NOT EXECUTED 4000d41c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 4000d420: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000d424: 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; 4000d428: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 4000d42c: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 4000d430: 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; 4000d434: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000d438: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 4000d43c: 12 80 00 2c bne 4000d4ec <_Protected_heap_Get_free_information+0x134> <== NOT EXECUTED 4000d440: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000d444: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000d448: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000d44c: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000d450: 02 80 00 43 be 4000d55c <_Protected_heap_Get_free_information+0x1a4> <== NOT EXECUTED 4000d454: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000d458: 7f ff da 94 call 40003ea8 <== NOT EXECUTED 4000d45c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 4000d460: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000d464: 40 00 3a 2e call 4001bd1c <_Heap_Get_free_information> <== NOT EXECUTED 4000d468: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000d46c: c2 04 63 20 ld [ %l1 + 0x320 ], %g1 <== NOT EXECUTED 4000d470: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000d474: c2 24 63 20 st %g1, [ %l1 + 0x320 ] <== NOT EXECUTED _RTEMS_Unlock_allocator(); 4000d478: d0 04 e3 f4 ld [ %l3 + 0x3f4 ], %o0 <== NOT EXECUTED 4000d47c: 94 10 20 00 clr %o2 <== NOT EXECUTED 4000d480: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4000d484: 7f ff f9 22 call 4000b90c <_CORE_mutex_Surrender> <== NOT EXECUTED 4000d488: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000d48c: c2 04 63 20 ld [ %l1 + 0x320 ], %g1 <== NOT EXECUTED 4000d490: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000d494: c2 24 63 20 st %g1, [ %l1 + 0x320 ] <== NOT EXECUTED 4000d498: c4 04 63 20 ld [ %l1 + 0x320 ], %g2 <== NOT EXECUTED 4000d49c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000d4a0: 02 80 00 2d be 4000d554 <_Protected_heap_Get_free_information+0x19c> <== NOT EXECUTED 4000d4a4: 01 00 00 00 nop <== NOT EXECUTED 4000d4a8: 81 c7 e0 08 ret <== NOT EXECUTED 4000d4ac: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 4000d4b0: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000d4b4: 12 80 00 16 bne 4000d50c <_Protected_heap_Get_free_information+0x154> <== NOT EXECUTED 4000d4b8: c6 04 e3 f4 ld [ %l3 + 0x3f4 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4000d4bc: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 4000d4c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d4c4: 22 80 00 41 be,a 4000d5c8 <_Protected_heap_Get_free_information+0x210> <== NOT EXECUTED 4000d4c8: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 4000d4cc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4000d4d0: 12 80 00 0f bne 4000d50c <_Protected_heap_Get_free_information+0x154> <== NOT EXECUTED 4000d4d4: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 4000d4d8: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d4dc: 7f ff da 73 call 40003ea8 <== NOT EXECUTED 4000d4e0: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED Heap_Control *the_heap, Heap_Information *info ) { _RTEMS_Lock_allocator(); _Heap_Get_free_information( the_heap, info ); 4000d4e4: 10 bf ff e0 b 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d4e8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4000d4ec: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4000d4f0: 12 bf ff da bne 4000d458 <_Protected_heap_Get_free_information+0xa0> <== NOT EXECUTED 4000d4f4: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000d4f8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000d4fc: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4000d500: 02 80 00 17 be 4000d55c <_Protected_heap_Get_free_information+0x1a4> <== NOT EXECUTED 4000d504: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 4000d508: 30 bf ff d4 b,a 4000d458 <_Protected_heap_Get_free_information+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000d50c: c2 04 63 20 ld [ %l1 + 0x320 ], %g1 <== NOT EXECUTED void _Protected_heap_Get_free_information( Heap_Control *the_heap, Heap_Information *info ) { _RTEMS_Lock_allocator(); 4000d510: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 4000d514: c8 01 23 fc ld [ %g4 + 0x3fc ], %g4 <== NOT EXECUTED 4000d518: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000d51c: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 4000d520: c2 24 63 20 st %g1, [ %l1 + 0x320 ] <== NOT EXECUTED 4000d524: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 4000d528: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 4000d52c: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 4000d530: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 4000d534: 7f ff da 5d call 40003ea8 <== NOT EXECUTED 4000d538: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000d53c: d0 04 e3 f4 ld [ %l3 + 0x3f4 ], %o0 <== NOT EXECUTED 4000d540: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000d544: 7f ff f8 ce call 4000b87c <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 4000d548: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED _Heap_Get_free_information( the_heap, info ); 4000d54c: 10 bf ff c6 b 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d550: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000d554: 40 00 01 f3 call 4000dd20 <_Thread_Dispatch> <== NOT EXECUTED 4000d558: 81 e8 00 00 restore <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 4000d55c: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 4000d560: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 4000d564: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000d568: 02 80 00 28 be 4000d608 <_Protected_heap_Get_free_information+0x250> <== NOT EXECUTED 4000d56c: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 4000d570: 1a 80 00 1c bcc 4000d5e0 <_Protected_heap_Get_free_information+0x228> <== NOT EXECUTED 4000d574: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000d578: c2 04 63 20 ld [ %l1 + 0x320 ], %g1 <== NOT EXECUTED 4000d57c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000d580: c2 24 63 20 st %g1, [ %l1 + 0x320 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 4000d584: 7f ff da 49 call 40003ea8 <== NOT EXECUTED 4000d588: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 4000d58c: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 4000d590: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 4000d594: 40 00 00 bf call 4000d890 <_Thread_Change_priority> <== NOT EXECUTED 4000d598: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000d59c: c2 04 63 20 ld [ %l1 + 0x320 ], %g1 <== NOT EXECUTED 4000d5a0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000d5a4: c2 24 63 20 st %g1, [ %l1 + 0x320 ] <== NOT EXECUTED 4000d5a8: c4 04 63 20 ld [ %l1 + 0x320 ], %g2 <== NOT EXECUTED 4000d5ac: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000d5b0: 32 bf ff ad bne,a 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d5b4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000d5b8: 40 00 01 da call 4000dd20 <_Thread_Dispatch> <== NOT EXECUTED 4000d5bc: 01 00 00 00 nop <== NOT EXECUTED 4000d5c0: 10 bf ff a9 b 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d5c4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 4000d5c8: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000d5cc: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 4000d5d0: 7f ff da 36 call 40003ea8 <== NOT EXECUTED 4000d5d4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000d5d8: 10 bf ff a3 b 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d5dc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 4000d5e0: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 4000d5e4: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4000d5e8: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 4000d5ec: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000d5f0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000d5f4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4000d5f8: 7f ff da 2c call 40003ea8 <== NOT EXECUTED 4000d5fc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000d600: 10 bf ff 99 b 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d604: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4000d608: 7f ff da 28 call 40003ea8 <== NOT EXECUTED 4000d60c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 4000d610: 10 bf ff 95 b 4000d464 <_Protected_heap_Get_free_information+0xac> <== NOT EXECUTED 4000d614: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009bdc <_Protected_heap_Resize_block>: boolean _Protected_heap_Resize_block( Heap_Control *the_heap, void *starting_address, size_t size ) { 40009bdc: 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(); 40009be0: 7f ff e0 fb call 40001fcc <== NOT EXECUTED 40009be4: 01 00 00 00 nop <== NOT EXECUTED 40009be8: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 40009bec: 23 10 00 6b sethi %hi(0x4001ac00), %l1 <== NOT EXECUTED 40009bf0: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009bf4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009bf8: 02 80 00 0b be 40009c24 <_Protected_heap_Resize_block+0x48> <== NOT EXECUTED 40009bfc: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED 40009c00: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 40009c04: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> <== NOT EXECUTED 40009c08: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40009c0c: 08 80 00 06 bleu 40009c24 <_Protected_heap_Resize_block+0x48> <== NOT EXECUTED 40009c10: 90 10 20 00 clr %o0 <== NOT EXECUTED 40009c14: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009c18: 7f ff fb 0d call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40009c1c: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40009c20: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40009c24: 09 10 00 6b sethi %hi(0x4001ac00), %g4 <== NOT EXECUTED 40009c28: e0 04 e2 64 ld [ %l3 + 0x264 ], %l0 <== NOT EXECUTED 40009c2c: c4 01 22 6c ld [ %g4 + 0x26c ], %g2 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40009c30: c0 20 a0 34 clr [ %g2 + 0x34 ] <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40009c34: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 40009c38: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009c3c: 22 80 00 2e be,a 40009cf4 <_Protected_heap_Resize_block+0x118> <== NOT EXECUTED 40009c40: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40009c44: c0 24 20 60 clr [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40009c48: 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; 40009c4c: c6 04 20 58 ld [ %l0 + 0x58 ], %g3 <== NOT EXECUTED executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40009c50: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40009c54: 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; 40009c58: c4 24 20 6c st %g2, [ %l0 + 0x6c ] <== NOT EXECUTED the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40009c5c: 80 a0 e0 02 cmp %g3, 2 <== NOT EXECUTED 40009c60: 12 80 00 34 bne 40009d30 <_Protected_heap_Resize_block+0x154> <== NOT EXECUTED 40009c64: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009c68: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009c6c: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009c70: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009c74: 02 80 00 49 be 40009d98 <_Protected_heap_Resize_block+0x1bc> <== NOT EXECUTED 40009c78: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40009c7c: 7f ff e0 d8 call 40001fdc <== NOT EXECUTED 40009c80: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED status = _Heap_Resize_block( 40009c84: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009c88: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40009c8c: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40009c90: 96 07 bf f4 add %fp, -12, %o3 <== NOT EXECUTED 40009c94: 40 00 10 8d call 4000dec8 <_Heap_Resize_block> <== NOT EXECUTED 40009c98: 98 07 bf f0 add %fp, -16, %o4 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009c9c: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009ca0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40009ca4: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009ca8: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED the_heap, starting_address, size, &old_mem_size, &avail_mem_size ); _RTEMS_Unlock_allocator(); 40009cac: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 40009cb0: 94 10 20 00 clr %o2 <== NOT EXECUTED 40009cb4: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40009cb8: 7f ff f8 e2 call 40008040 <_CORE_mutex_Surrender> <== NOT EXECUTED 40009cbc: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009cc0: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009cc4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009cc8: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009ccc: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009cd0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009cd4: 12 80 00 05 bne 40009ce8 <_Protected_heap_Resize_block+0x10c> <== NOT EXECUTED 40009cd8: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED _Thread_Dispatch(); 40009cdc: 40 00 01 82 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40009ce0: 01 00 00 00 nop <== NOT EXECUTED return (status == HEAP_RESIZE_SUCCESSFUL); } 40009ce4: 80 a0 00 10 cmp %g0, %l0 <== NOT EXECUTED 40009ce8: b0 60 3f ff subx %g0, -1, %i0 <== NOT EXECUTED 40009cec: 81 c7 e0 08 ret <== NOT EXECUTED 40009cf0: 81 e8 00 00 restore <== NOT EXECUTED /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40009cf4: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40009cf8: 12 80 00 16 bne 40009d50 <_Protected_heap_Resize_block+0x174> <== NOT EXECUTED 40009cfc: c6 04 e2 64 ld [ %l3 + 0x264 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40009d00: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40009d04: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009d08: 22 80 00 3f be,a 40009e04 <_Protected_heap_Resize_block+0x228> <== NOT EXECUTED 40009d0c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40009d10: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40009d14: 12 80 00 0f bne 40009d50 <_Protected_heap_Resize_block+0x174> <== NOT EXECUTED 40009d18: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40009d1c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40009d20: 7f ff e0 af call 40001fdc <== NOT EXECUTED 40009d24: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); status = _Heap_Resize_block( 40009d28: 10 bf ff d8 b 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009d2c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40009d30: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40009d34: 12 bf ff d2 bne 40009c7c <_Protected_heap_Resize_block+0xa0> <== NOT EXECUTED 40009d38: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40009d3c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009d40: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40009d44: 02 80 00 15 be 40009d98 <_Protected_heap_Resize_block+0x1bc> <== NOT EXECUTED 40009d48: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40009d4c: 30 bf ff cc b,a 40009c7c <_Protected_heap_Resize_block+0xa0> <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009d50: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED { Heap_Resize_status status; uint32_t old_mem_size; uint32_t avail_mem_size; _RTEMS_Lock_allocator(); 40009d54: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40009d58: c8 01 22 6c ld [ %g4 + 0x26c ], %g4 <== NOT EXECUTED 40009d5c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009d60: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40009d64: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009d68: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40009d6c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40009d70: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40009d74: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40009d78: 7f ff e0 99 call 40001fdc <== NOT EXECUTED 40009d7c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009d80: d0 04 e2 64 ld [ %l3 + 0x264 ], %o0 <== NOT EXECUTED 40009d84: 92 10 20 00 clr %o1 <== NOT EXECUTED 40009d88: 7f ff f8 8a call 40007fb0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40009d8c: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED status = _Heap_Resize_block( 40009d90: 10 bf ff be b 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009d94: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40009d98: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40009d9c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40009da0: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40009da4: 02 80 00 28 be 40009e44 <_Protected_heap_Resize_block+0x268> <== NOT EXECUTED 40009da8: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40009dac: 1a 80 00 1c bcc 40009e1c <_Protected_heap_Resize_block+0x240> <== NOT EXECUTED 40009db0: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED 40009db4: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009db8: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009dbc: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40009dc0: 7f ff e0 87 call 40001fdc <== NOT EXECUTED 40009dc4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40009dc8: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40009dcc: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40009dd0: 40 00 00 21 call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 40009dd4: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009dd8: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40009ddc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009de0: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40009de4: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40009de8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40009dec: 32 bf ff a7 bne,a 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009df0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40009df4: 40 00 01 3c call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40009df8: 01 00 00 00 nop <== NOT EXECUTED 40009dfc: 10 bf ff a3 b 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009e00: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40009e04: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009e08: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40009e0c: 7f ff e0 74 call 40001fdc <== NOT EXECUTED 40009e10: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009e14: 10 bf ff 9d b 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009e18: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40009e1c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40009e20: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40009e24: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40009e28: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40009e2c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40009e30: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40009e34: 7f ff e0 6a call 40001fdc <== NOT EXECUTED 40009e38: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009e3c: 10 bf ff 93 b 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009e40: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40009e44: 7f ff e0 66 call 40001fdc <== NOT EXECUTED 40009e48: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40009e4c: 10 bf ff 8f b 40009c88 <_Protected_heap_Resize_block+0xac> <== NOT EXECUTED 40009e50: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000dbac <_RTEMS_tasks_Delete_extension>: User_extensions_routine _RTEMS_tasks_Delete_extension( Thread_Control *executing, Thread_Control *deleted ) { 4000dbac: 9d e3 bf 98 save %sp, -104, %sp /* * Free per task variable memory */ tvp = deleted->task_variables; 4000dbb0: e0 06 61 7c ld [ %i1 + 0x17c ], %l0 deleted->task_variables = NULL; 4000dbb4: c0 26 61 7c clr [ %i1 + 0x17c ] while (tvp) { 4000dbb8: 80 a4 20 00 cmp %l0, 0 4000dbbc: 02 80 00 25 be 4000dc50 <_RTEMS_tasks_Delete_extension+0xa4> 4000dbc0: 29 10 00 6b sethi %hi(0x4001ac00), %l4 4000dbc4: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED 4000dbc8: 10 80 00 12 b 4000dc10 <_RTEMS_tasks_Delete_extension+0x64> <== NOT EXECUTED 4000dbcc: a4 15 21 dc or %l4, 0x1dc, %l2 <== NOT EXECUTED next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { if (tvp->dtor) 4000dbd0: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 <== NOT EXECUTED 4000dbd4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000dbd8: 22 80 00 06 be,a 4000dbf0 <_RTEMS_tasks_Delete_extension+0x44> <== NOT EXECUTED 4000dbdc: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED (*tvp->dtor)(*tvp->ptr); 4000dbe0: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 4000dbe4: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000dbe8: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 4000dbec: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 4000dbf0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000dbf4: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4000dbf8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000dbfc: 7f ff ea 14 call 4000844c <_Heap_Free> <== NOT EXECUTED 4000dc00: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; while (tvp) { 4000dc04: a0 94 60 00 orcc %l1, 0, %l0 <== NOT EXECUTED 4000dc08: 22 80 00 13 be,a 4000dc54 <_RTEMS_tasks_Delete_extension+0xa8> <== NOT EXECUTED 4000dc0c: d2 06 61 6c ld [ %i1 + 0x16c ], %o1 <== NOT EXECUTED next = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(deleted)) { 4000dc10: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED 4000dc14: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 4000dc18: 02 bf ff ee be 4000dbd0 <_RTEMS_tasks_Delete_extension+0x24> <== NOT EXECUTED 4000dc1c: e2 04 00 00 ld [ %l0 ], %l1 <== NOT EXECUTED if (tvp->dtor) (*tvp->dtor)(*tvp->ptr); *tvp->ptr = tvp->gval; } else { if (tvp->dtor) 4000dc20: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 <== NOT EXECUTED 4000dc24: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000dc28: 02 bf ff f5 be 4000dbfc <_RTEMS_tasks_Delete_extension+0x50> <== NOT EXECUTED 4000dc2c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 4000dc30: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000dc34: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED 4000dc38: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4000dc3c: 7f ff ea 04 call 4000844c <_Heap_Free> <== NOT EXECUTED 4000dc40: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED * Free per task variable memory */ tvp = deleted->task_variables; deleted->task_variables = NULL; while (tvp) { 4000dc44: a0 94 60 00 orcc %l1, 0, %l0 <== NOT EXECUTED 4000dc48: 12 bf ff f3 bne 4000dc14 <_RTEMS_tasks_Delete_extension+0x68> <== NOT EXECUTED 4000dc4c: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED 4000dc50: d2 06 61 6c ld [ %i1 + 0x16c ], %o1 4000dc54: 7f ff e9 fe call 4000844c <_Heap_Free> 4000dc58: 90 15 21 dc or %l4, 0x1dc, %o0 /* * Free API specific memory */ (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] ); deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL; 4000dc5c: c0 26 61 6c clr [ %i1 + 0x16c ] } 4000dc60: 81 c7 e0 08 ret 4000dc64: 81 e8 00 00 restore 400076a0 <_RTEMS_tasks_Initialize_user_tasks_body>: * * Output parameters: NONE */ void _RTEMS_tasks_Initialize_user_tasks_body( void ) { 400076a0: 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; 400076a4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400076a8: c4 00 62 50 ld [ %g1 + 0x250 ], %g2 ! 4001ae50 <_Configuration_Table> 400076ac: c6 00 a0 2c ld [ %g2 + 0x2c ], %g3 /* * NOTE: This is slightly different from the Ada implementation. */ user_tasks = api_configuration->User_initialization_tasks_table; 400076b0: d0 00 e0 28 ld [ %g3 + 0x28 ], %o0 maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) 400076b4: 80 a2 20 00 cmp %o0, 0 400076b8: 02 80 00 2f be 40007774 <_RTEMS_tasks_Initialize_user_tasks_body+0xd4> 400076bc: e4 00 e0 24 ld [ %g3 + 0x24 ], %l2 400076c0: 80 a4 a0 00 cmp %l2, 0 400076c4: 02 80 00 2c be 40007774 <_RTEMS_tasks_Initialize_user_tasks_body+0xd4> 400076c8: a0 10 00 08 mov %o0, %l0 return; for ( index=0 ; index < maximum ; index++ ) { 400076cc: a2 10 20 00 clr %l1 400076d0: 10 80 00 0c b 40007700 <_RTEMS_tasks_Initialize_user_tasks_body+0x60> 400076d4: a6 07 bf f4 add %fp, -12, %l3 ); if ( !rtems_is_status_successful( return_value ) ) _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); return_value = rtems_task_start( 400076d8: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 400076dc: d0 07 bf f4 ld [ %fp + -12 ], %o0 400076e0: 40 00 00 27 call 4000777c 400076e4: a2 04 60 01 inc %l1 id, user_tasks[ index ].entry_point, user_tasks[ index ].argument ); if ( !rtems_is_status_successful( return_value ) ) 400076e8: 80 a2 20 00 cmp %o0, 0 400076ec: 12 80 00 1c bne 4000775c <_RTEMS_tasks_Initialize_user_tasks_body+0xbc> 400076f0: 94 10 00 08 mov %o0, %o2 maximum = api_configuration->number_of_initialization_tasks; if ( !user_tasks || maximum == 0 ) return; for ( index=0 ; index < maximum ; index++ ) { 400076f4: 80 a4 40 12 cmp %l1, %l2 400076f8: 02 80 00 1f be 40007774 <_RTEMS_tasks_Initialize_user_tasks_body+0xd4> 400076fc: a0 04 20 1c add %l0, 0x1c, %l0 return_value = rtems_task_create( 40007700: d6 04 20 14 ld [ %l0 + 0x14 ], %o3 40007704: d8 04 20 0c ld [ %l0 + 0xc ], %o4 40007708: d2 04 20 08 ld [ %l0 + 8 ], %o1 4000770c: d4 04 20 04 ld [ %l0 + 4 ], %o2 40007710: d0 04 00 00 ld [ %l0 ], %o0 40007714: 7f ff ff 1a call 4000737c 40007718: 9a 10 00 13 mov %l3, %o5 user_tasks[ index ].mode_set, user_tasks[ index ].attribute_set, &id ); if ( !rtems_is_status_successful( return_value ) ) 4000771c: 80 a2 20 00 cmp %o0, 0 40007720: 22 bf ff ee be,a 400076d8 <_RTEMS_tasks_Initialize_user_tasks_body+0x38> 40007724: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 40007728: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 4000772c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40007730: 40 00 04 47 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40007734: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED return_value = rtems_task_start( 40007738: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 4000773c: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 <== NOT EXECUTED 40007740: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED 40007744: 40 00 00 0e call 4000777c <== NOT EXECUTED 40007748: a2 04 60 01 inc %l1 <== NOT EXECUTED id, user_tasks[ index ].entry_point, user_tasks[ index ].argument ); if ( !rtems_is_status_successful( return_value ) ) 4000774c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40007750: 02 bf ff ea be 400076f8 <_RTEMS_tasks_Initialize_user_tasks_body+0x58> <== NOT EXECUTED 40007754: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); 40007758: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 4000775c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40007760: 40 00 04 3b call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40007764: 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++ ) { 40007768: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED 4000776c: 12 bf ff e5 bne 40007700 <_RTEMS_tasks_Initialize_user_tasks_body+0x60> <== NOT EXECUTED 40007770: a0 04 20 1c add %l0, 0x1c, %l0 <== NOT EXECUTED 40007774: 81 c7 e0 08 ret 40007778: 81 e8 00 00 restore 4000dabc <_RTEMS_tasks_Post_switch_extension>: */ void _RTEMS_tasks_Post_switch_extension( Thread_Control *executing ) { 4000dabc: 9d e3 bf 90 save %sp, -112, %sp * Signal Processing */ asr = &api->Signal; _ISR_Disable( level ); 4000dac0: 7f ff d1 43 call 40001fcc 4000dac4: f0 06 21 6c ld [ %i0 + 0x16c ], %i0 signal_set = asr->signals_posted; 4000dac8: e4 06 20 54 ld [ %i0 + 0x54 ], %l2 asr->signals_posted = 0; 4000dacc: c0 26 20 54 clr [ %i0 + 0x54 ] _ISR_Enable( level ); 4000dad0: 7f ff d1 43 call 40001fdc 4000dad4: 01 00 00 00 nop if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ 4000dad8: 80 a4 a0 00 cmp %l2, 0 4000dadc: 32 80 00 04 bne,a 4000daec <_RTEMS_tasks_Post_switch_extension+0x30> 4000dae0: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 4000dae4: 81 c7 e0 08 ret <== NOT EXECUTED 4000dae8: 81 e8 00 00 restore <== NOT EXECUTED return; asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000daec: d0 06 20 50 ld [ %i0 + 0x50 ], %o0 if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ return; asr->nest_level += 1; 4000daf0: 82 00 60 01 inc %g1 rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000daf4: a2 07 bf f4 add %fp, -12, %l1 if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ return; asr->nest_level += 1; 4000daf8: c2 26 20 5c st %g1, [ %i0 + 0x5c ] rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000dafc: 94 10 00 11 mov %l1, %o2 4000db00: 21 00 00 3f sethi %hi(0xfc00), %l0 4000db04: 40 00 04 5a call 4000ec6c 4000db08: 92 14 23 ff or %l0, 0x3ff, %o1 ! ffff (*asr->handler)( signal_set ); 4000db0c: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 4000db10: 9f c0 40 00 call %g1 4000db14: 90 10 00 12 mov %l2, %o0 asr->nest_level -= 1; 4000db18: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000db1c: d0 07 bf f4 ld [ %fp + -12 ], %o0 asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); (*asr->handler)( signal_set ); asr->nest_level -= 1; 4000db20: 82 00 7f ff add %g1, -1, %g1 rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000db24: 92 14 23 ff or %l0, 0x3ff, %o1 asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); (*asr->handler)( signal_set ); asr->nest_level -= 1; 4000db28: c2 26 20 5c st %g1, [ %i0 + 0x5c ] rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); 4000db2c: 40 00 04 50 call 4000ec6c 4000db30: 94 10 00 11 mov %l1, %o2 4000db34: 81 c7 e0 08 ret 4000db38: 81 e8 00 00 restore 40008360 <_Rate_monotonic_Timeout>: void _Rate_monotonic_Timeout( Objects_Id id, void *ignored ) { 40008360: 9d e3 bf 90 save %sp, -112, %sp 40008364: 11 10 00 7d sethi %hi(0x4001f400), %o0 40008368: 92 10 00 18 mov %i0, %o1 4000836c: 90 12 20 4c or %o0, 0x4c, %o0 40008370: 40 00 09 a7 call 4000aa0c <_Objects_Get> 40008374: 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 ) { 40008378: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000837c: 80 a0 60 00 cmp %g1, 0 40008380: 12 80 00 11 bne 400083c4 <_Rate_monotonic_Timeout+0x64> 40008384: b0 10 00 08 mov %o0, %i0 case OBJECTS_REMOTE: /* impossible */ case OBJECTS_ERROR: break; case OBJECTS_LOCAL: the_thread = the_period->owner; 40008388: d0 02 20 50 ld [ %o0 + 0x50 ], %o0 if ( _States_Is_waiting_for_period( the_thread->current_state ) && 4000838c: 03 00 00 10 sethi %hi(0x4000), %g1 40008390: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 40008394: 80 88 80 01 btst %g2, %g1 40008398: 32 80 00 0d bne,a 400083cc <_Rate_monotonic_Timeout+0x6c> 4000839c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 the_thread->Wait.id == the_period->Object.id ) { _Thread_Unblock( the_thread ); _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); } else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) { 400083a0: c2 06 20 38 ld [ %i0 + 0x38 ], %g1 400083a4: 80 a0 60 01 cmp %g1, 1 400083a8: 02 80 00 17 be 40008404 <_Rate_monotonic_Timeout+0xa4> 400083ac: 82 10 20 04 mov 4, %g1 the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING; _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); } else the_period->state = RATE_MONOTONIC_EXPIRED; 400083b0: 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; 400083b4: 05 10 00 7d sethi %hi(0x4001f400), %g2 400083b8: c2 00 a1 e0 ld [ %g2 + 0x1e0 ], %g1 ! 4001f5e0 <_Thread_Dispatch_disable_level> 400083bc: 82 00 7f ff add %g1, -1, %g1 400083c0: c2 20 a1 e0 st %g1, [ %g2 + 0x1e0 ] 400083c4: 81 c7 e0 08 ret 400083c8: 81 e8 00 00 restore case OBJECTS_ERROR: break; case OBJECTS_LOCAL: the_thread = the_period->owner; if ( _States_Is_waiting_for_period( the_thread->current_state ) && 400083cc: c2 06 20 08 ld [ %i0 + 8 ], %g1 400083d0: 80 a0 80 01 cmp %g2, %g1 400083d4: 32 bf ff f4 bne,a 400083a4 <_Rate_monotonic_Timeout+0x44> 400083d8: 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 ); 400083dc: 13 04 00 ff sethi %hi(0x1003fc00), %o1 400083e0: 40 00 0d fe call 4000bbd8 <_Thread_Clear_state> 400083e4: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400083e8: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400083ec: 92 06 20 10 add %i0, 0x10, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400083f0: c2 26 20 1c st %g1, [ %i0 + 0x1c ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400083f4: 11 10 00 7d sethi %hi(0x4001f400), %o0 400083f8: 40 00 14 33 call 4000d4c4 <_Watchdog_Insert> 400083fc: 90 12 22 dc or %o0, 0x2dc, %o0 ! 4001f6dc <_Watchdog_Ticks_chain> 40008400: 30 bf ff ed b,a 400083b4 <_Rate_monotonic_Timeout+0x54> Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40008404: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 <== NOT EXECUTED the_thread->Wait.id == the_period->Object.id ) { _Thread_Unblock( the_thread ); _Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length ); } else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) { the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING; 40008408: 84 10 20 03 mov 3, %g2 <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 4000840c: 92 06 20 10 add %i0, 0x10, %o1 <== NOT EXECUTED Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40008410: c2 26 20 1c st %g1, [ %i0 + 0x1c ] <== NOT EXECUTED 40008414: c4 26 20 38 st %g2, [ %i0 + 0x38 ] <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40008418: 11 10 00 7d sethi %hi(0x4001f400), %o0 <== NOT EXECUTED 4000841c: 40 00 14 2a call 4000d4c4 <_Watchdog_Insert> <== NOT EXECUTED 40008420: 90 12 22 dc or %o0, 0x2dc, %o0 ! 4001f6dc <_Watchdog_Ticks_chain> <== NOT EXECUTED 40008424: 30 bf ff e4 b,a 400083b4 <_Rate_monotonic_Timeout+0x54> <== NOT EXECUTED 4001b75c <_Region_Process_queue>: */ void _Region_Process_queue( Region_Control *the_region ) { 4001b75c: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001b760: 27 10 00 d1 sethi %hi(0x40034400), %l3 4001b764: c2 04 e3 60 ld [ %l3 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 4001b768: 82 00 60 01 inc %g1 4001b76c: c2 24 e3 60 st %g1, [ %l3 + 0x360 ] 4001b770: c2 04 e3 60 ld [ %l3 + 0x360 ], %g1 4001b774: 82 00 60 01 inc %g1 4001b778: c2 24 e3 60 st %g1, [ %l3 + 0x360 ] * NOTE: Be sure to disable dispatching before unlocking the mutex * since we do not want to open a window where a context * switch could occur. */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); 4001b77c: 03 10 00 d2 sethi %hi(0x40034800), %g1 4001b780: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 ! 40034834 <_RTEMS_Allocator_Mutex> 4001b784: 94 10 20 00 clr %o2 4001b788: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001b78c: 7f ff e7 b5 call 40015660 <_CORE_mutex_Surrender> 4001b790: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b794: c2 04 e3 60 ld [ %l3 + 0x360 ], %g1 4001b798: a2 06 20 10 add %i0, 0x10, %l1 4001b79c: 82 00 7f ff add %g1, -1, %g1 4001b7a0: c2 24 e3 60 st %g1, [ %l3 + 0x360 ] 4001b7a4: c4 04 e3 60 ld [ %l3 + 0x360 ], %g2 4001b7a8: 80 a0 a0 00 cmp %g2, 0 4001b7ac: 02 80 00 21 be 4001b830 <_Region_Process_queue+0xd4> 4001b7b0: 01 00 00 00 nop RTEMS_INLINE_ROUTINE void *_Region_Allocate_segment ( Region_Control *the_region, uint32_t size ) { return _Heap_Allocate( &the_region->Memory, size ); 4001b7b4: 10 80 00 10 b 4001b7f4 <_Region_Process_queue+0x98> 4001b7b8: a4 06 20 68 add %i0, 0x68, %l2 the_segment = (void **) _Region_Allocate_segment( the_region, the_thread->Wait.count ); if ( the_segment == NULL ) 4001b7bc: 7f ff e8 bd call 40015ab0 <_Heap_Allocate> 4001b7c0: d2 04 20 24 ld [ %l0 + 0x24 ], %o1 4001b7c4: 80 a2 20 00 cmp %o0, 0 4001b7c8: 02 80 00 11 be 4001b80c <_Region_Process_queue+0xb0> 4001b7cc: 01 00 00 00 nop break; *(void **)the_thread->Wait.return_argument = the_segment; the_region->number_of_used_blocks += 1; 4001b7d0: c2 06 20 64 ld [ %i0 + 0x64 ], %g1 ); if ( the_segment == NULL ) break; *(void **)the_thread->Wait.return_argument = the_segment; 4001b7d4: c4 04 20 28 ld [ %l0 + 0x28 ], %g2 the_region->number_of_used_blocks += 1; 4001b7d8: 82 00 60 01 inc %g1 ); if ( the_segment == NULL ) break; *(void **)the_thread->Wait.return_argument = the_segment; 4001b7dc: d0 20 80 00 st %o0, [ %g2 ] the_region->number_of_used_blocks += 1; 4001b7e0: c2 26 20 64 st %g1, [ %i0 + 0x64 ] _Thread_queue_Extract( &the_region->Wait_queue, the_thread ); 4001b7e4: 90 10 00 11 mov %l1, %o0 4001b7e8: 40 00 02 79 call 4001c1cc <_Thread_queue_Extract> 4001b7ec: 92 10 00 10 mov %l0, %o1 the_thread->Wait.return_code = RTEMS_SUCCESSFUL; 4001b7f0: c0 24 20 34 clr [ %l0 + 0x34 ] /* * NOTE: The following loop is O(n) where n is the number of * threads whose memory request is satisfied. */ for ( ; ; ) { the_thread = _Thread_queue_First( &the_region->Wait_queue ); 4001b7f4: 40 00 02 c0 call 4001c2f4 <_Thread_queue_First> 4001b7f8: 90 10 00 11 mov %l1, %o0 4001b7fc: a0 10 00 08 mov %o0, %l0 if ( the_thread == NULL ) 4001b800: 80 a4 20 00 cmp %l0, 0 4001b804: 12 bf ff ee bne 4001b7bc <_Region_Process_queue+0x60> 4001b808: 90 10 00 12 mov %l2, %o0 4001b80c: c2 04 e3 60 ld [ %l3 + 0x360 ], %g1 4001b810: 82 00 7f ff add %g1, -1, %g1 4001b814: c2 24 e3 60 st %g1, [ %l3 + 0x360 ] 4001b818: c4 04 e3 60 ld [ %l3 + 0x360 ], %g2 4001b81c: 80 a0 a0 00 cmp %g2, 0 4001b820: 02 80 00 07 be 4001b83c <_Region_Process_queue+0xe0> 4001b824: 01 00 00 00 nop 4001b828: 81 c7 e0 08 ret <== NOT EXECUTED 4001b82c: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 4001b830: 7f ff f0 bf call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 4001b834: a4 06 20 68 add %i0, 0x68, %l2 <== NOT EXECUTED 4001b838: 30 bf ff ef b,a 4001b7f4 <_Region_Process_queue+0x98> <== NOT EXECUTED 4001b83c: 7f ff f0 bc call 40017b2c <_Thread_Dispatch> 4001b840: 81 e8 00 00 restore 4001b844: 01 00 00 00 nop 40009c54 <_TOD_Set>: */ void _TOD_Set( const struct timespec *time ) { 40009c54: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009c58: 23 10 00 9c sethi %hi(0x40027000), %l1 40009c5c: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 ! 40027360 <_Thread_Dispatch_disable_level> 40009c60: 82 00 60 01 inc %g1 40009c64: c2 24 63 60 st %g1, [ %l1 + 0x360 ] _Thread_Disable_dispatch(); _TOD_Deactivate(); if ( time->tv_sec < _TOD_Seconds_since_epoch ) 40009c68: 21 10 00 9d sethi %hi(0x40027400), %l0 40009c6c: c2 06 00 00 ld [ %i0 ], %g1 40009c70: d4 04 20 18 ld [ %l0 + 0x18 ], %o2 40009c74: 80 a0 40 0a cmp %g1, %o2 40009c78: 36 80 00 18 bge,a 40009cd8 <_TOD_Set+0x84> 40009c7c: 94 20 40 0a sub %g1, %o2, %o2 Watchdog_Adjust_directions direction, Watchdog_Interval units ) { _Watchdog_Adjust( &_Watchdog_Seconds_chain, direction, units ); 40009c80: 11 10 00 9d sethi %hi(0x40027400), %o0 40009c84: 94 22 80 01 sub %o2, %g1, %o2 40009c88: 90 12 20 50 or %o0, 0x50, %o0 40009c8c: 40 00 0e ea call 4000d834 <_Watchdog_Adjust> 40009c90: 92 10 20 01 mov 1, %o1 else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 40009c94: c4 06 00 00 ld [ %i0 ], %g2 40009c98: 86 14 20 18 or %l0, 0x18, %g3 40009c9c: c4 24 20 18 st %g2, [ %l0 + 0x18 ] 40009ca0: c2 06 20 04 ld [ %i0 + 4 ], %g1 _TOD_Is_set = TRUE; 40009ca4: 84 10 20 01 mov 1, %g2 else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 40009ca8: c2 20 e0 04 st %g1, [ %g3 + 4 ] _TOD_Is_set = TRUE; 40009cac: 03 10 00 9c sethi %hi(0x40027000), %g1 40009cb0: c4 20 63 9c st %g2, [ %g1 + 0x39c ] ! 4002739c <_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 ) 40009cb4: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40009cb8: 82 00 7f ff add %g1, -1, %g1 40009cbc: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40009cc0: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40009cc4: 80 a0 a0 00 cmp %g2, 0 40009cc8: 02 80 00 0a be 40009cf0 <_TOD_Set+0x9c> 40009ccc: 01 00 00 00 nop 40009cd0: 81 c7 e0 08 ret 40009cd4: 81 e8 00 00 restore 40009cd8: 11 10 00 9d sethi %hi(0x40027400), %o0 40009cdc: 92 10 20 00 clr %o1 40009ce0: 40 00 0e d5 call 4000d834 <_Watchdog_Adjust> 40009ce4: 90 12 20 50 or %o0, 0x50, %o0 else _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - _TOD_Seconds_since_epoch ); /* POSIX format TOD (timespec) */ _TOD_Now = *time; 40009ce8: 10 bf ff ec b 40009c98 <_TOD_Set+0x44> 40009cec: c4 06 00 00 ld [ %i0 ], %g2 _Thread_Dispatch(); 40009cf0: 40 00 08 3c call 4000bde0 <_Thread_Dispatch> <== NOT EXECUTED 40009cf4: 81 e8 00 00 restore <== NOT EXECUTED 40009cf8: 01 00 00 00 nop 4000a194 <_Thread_Create_idle>: */ const char *_Thread_Idle_name = "IDLE"; void _Thread_Create_idle( void ) { 4000a194: 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 ); 4000a198: 39 10 00 6b sethi %hi(0x4001ac00), %i4 4000a19c: 7f ff f9 d9 call 40008900 <_Objects_Allocate> 4000a1a0: 90 17 23 20 or %i4, 0x320, %o0 ! 4001af20 <_Thread_Internal_information> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 4000a1a4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000a1a8: 96 10 61 a4 or %g1, 0x1a4, %o3 ! 4001ada4 <_CPU_Table> 4000a1ac: c4 02 e0 0c ld [ %o3 + 0xc ], %g2 * The entire workspace is zeroed during its initialization. Thus, all * fields not explicitly assigned were explicitly zeroed by * _Workspace_Initialization. */ _Thread_Idle = _Thread_Internal_allocate(); 4000a1b0: 37 10 00 6b sethi %hi(0x4001ac00), %i3 4000a1b4: d0 26 e3 78 st %o0, [ %i3 + 0x378 ] ! 4001af78 <_Thread_Idle> idle = (void *) _CPU_Thread_Idle_body; #else idle = (void *) _Thread_Idle_body; #endif if ( _CPU_Table.idle_task ) 4000a1b8: 03 10 00 29 sethi %hi(0x4000a400), %g1 4000a1bc: 92 10 00 08 mov %o0, %o1 4000a1c0: 80 a0 a0 00 cmp %g2, 0 4000a1c4: 02 80 00 03 be 4000a1d0 <_Thread_Create_idle+0x3c> 4000a1c8: b4 10 60 40 or %g1, 0x40, %i2 idle = _CPU_Table.idle_task; 4000a1cc: b4 10 00 02 mov %g2, %i2 <== NOT EXECUTED idle_task_stack_size = _CPU_Table.idle_task_stack_size; 4000a1d0: d6 02 e0 14 ld [ %o3 + 0x14 ], %o3 if ( idle_task_stack_size < STACK_MINIMUM_SIZE ) 4000a1d4: 80 a2 ef ff cmp %o3, 0xfff 4000a1d8: 28 80 00 02 bleu,a 4000a1e0 <_Thread_Create_idle+0x4c> 4000a1dc: 17 00 00 04 sethi %hi(0x1000), %o3 idle_task_stack_size = STACK_MINIMUM_SIZE; _Thread_Initialize( 4000a1e0: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000a1e4: c4 00 61 98 ld [ %g1 + 0x198 ], %g2 ! 4001a198 <_Thread_Idle_name> 4000a1e8: 82 10 20 01 mov 1, %g1 4000a1ec: c4 23 a0 6c st %g2, [ %sp + 0x6c ] 4000a1f0: 90 17 23 20 or %i4, 0x320, %o0 4000a1f4: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 4000a1f8: c0 23 a0 60 clr [ %sp + 0x60 ] 4000a1fc: c0 23 a0 64 clr [ %sp + 0x64 ] 4000a200: c0 23 a0 68 clr [ %sp + 0x68 ] 4000a204: 94 10 20 00 clr %o2 4000a208: 98 10 20 00 clr %o4 4000a20c: 40 00 00 8e call 4000a444 <_Thread_Initialize> 4000a210: 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 = 4000a214: c6 06 e3 78 ld [ %i3 + 0x378 ], %g3 4000a218: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000a21c: 05 10 00 6b sethi %hi(0x4001ac00), %g2 _Thread_Executing = _Thread_Idle; _Thread_Start( 4000a220: b0 10 00 03 mov %g3, %i0 /* * WARNING!!! This is necessary to "kick" start the system and * MUST be done before _Thread_Start is invoked. */ _Thread_Heir = 4000a224: c6 20 62 6c st %g3, [ %g1 + 0x26c ] 4000a228: c6 20 a2 44 st %g3, [ %g2 + 0x244 ] _Thread_Executing = _Thread_Idle; _Thread_Start( 4000a22c: b2 10 20 00 clr %i1 4000a230: b6 10 20 00 clr %i3 4000a234: 40 00 04 07 call 4000b250 <_Thread_Start> 4000a238: 99 e8 20 00 restore %g0, 0, %o4 4000a23c: 01 00 00 00 nop 4000a240 <_Thread_Delay_ended>: void _Thread_Delay_ended( Objects_Id id, void *ignored ) { 4000a240: 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 ) ) { 4000a244: 92 96 20 00 orcc %i0, 0, %o1 4000a248: 12 80 00 11 bne 4000a28c <_Thread_Delay_ended+0x4c> 4000a24c: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000a250: 31 10 00 6b sethi %hi(0x4001ac00), %i0 <== NOT EXECUTED 4000a254: c2 06 21 90 ld [ %i0 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000a258: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000a25c: c2 26 21 90 st %g1, [ %i0 + 0x190 ] <== 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; 4000a260: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000a264: d0 00 62 6c ld [ %g1 + 0x26c ], %o0 ! 4001ae6c <_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; 4000a268: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000a26c: 13 04 00 ff sethi %hi(0x1003fc00), %o1 <== NOT EXECUTED 4000a270: 7f ff ff 68 call 4000a010 <_Thread_Clear_state> 4000a274: 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; 4000a278: c2 06 21 90 ld [ %i0 + 0x190 ], %g1 4000a27c: 82 00 7f ff add %g1, -1, %g1 4000a280: c2 26 21 90 st %g1, [ %i0 + 0x190 ] 4000a284: 81 c7 e0 08 ret 4000a288: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000a28c: 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 ) { 4000a290: 80 a0 a0 04 cmp %g2, 4 4000a294: 18 bf ff fc bgu 4000a284 <_Thread_Delay_ended+0x44> 4000a298: 83 32 60 1b srl %o1, 0x1b, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000a29c: 80 a0 60 01 cmp %g1, 1 4000a2a0: 12 bf ff f9 bne 4000a284 <_Thread_Delay_ended+0x44> 4000a2a4: 83 28 a0 02 sll %g2, 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000a2a8: 05 10 00 6b sethi %hi(0x4001ac00), %g2 4000a2ac: 84 10 a0 f0 or %g2, 0xf0, %g2 ! 4001acf0 <_Objects_Information_table> 4000a2b0: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000a2b4: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 4000a2b8: 80 a2 20 00 cmp %o0, 0 4000a2bc: 02 bf ff f2 be 4000a284 <_Thread_Delay_ended+0x44> 4000a2c0: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000a2c4: 7f ff fa e0 call 40008e44 <_Objects_Get> 4000a2c8: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000a2cc: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000a2d0: 80 a0 60 00 cmp %g1, 0 4000a2d4: 12 bf ff ec bne 4000a284 <_Thread_Delay_ended+0x44> 4000a2d8: 31 10 00 6b sethi %hi(0x4001ac00), %i0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000a2dc: 10 bf ff e5 b 4000a270 <_Thread_Delay_ended+0x30> 4000a2e0: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000f020 <_Thread_Handler>: * * Output parameters: NONE */ void _Thread_Handler( void ) { 4000f020: 9d e3 bf 98 save %sp, -104, %sp #endif #if defined(__USE__MAIN__) extern void _main(void); #endif executing = _Thread_Executing; 4000f024: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000f028: f4 00 62 6c ld [ %g1 + 0x26c ], %i2 ! 4001ae6c <_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(); 4000f02c: 3f 10 00 3c sethi %hi(0x4000f000), %i7 4000f030: be 17 e0 20 or %i7, 0x20, %i7 ! 4000f020 <_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); 4000f034: d0 06 a0 c4 ld [ %i2 + 0xc4 ], %o0 4000f038: 7f ff cb e9 call 40001fdc 4000f03c: 91 2a 20 08 sll %o0, 8, %o0 #if defined(__USE_INIT_FINI__) || defined(__USE__MAIN__) doneCons = doneConstructors; 4000f040: 05 10 00 6a sethi %hi(0x4001a800), %g2 doneConstructors = 1; 4000f044: 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; 4000f048: f2 08 a3 b0 ldub [ %g2 + 0x3b0 ], %i1 * Take care that 'begin' extensions get to complete before * 'switch' extensions can run. This means must keep dispatch * disabled until all 'begin' extensions complete. */ _User_extensions_Thread_begin( executing ); 4000f04c: 90 10 00 1a mov %i2, %o0 4000f050: 7f ff f1 3e call 4000b548 <_User_extensions_Thread_begin> 4000f054: c2 28 a3 b0 stb %g1, [ %g2 + 0x3b0 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f058: 05 10 00 6b sethi %hi(0x4001ac00), %g2 4000f05c: c2 00 a1 90 ld [ %g2 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 4000f060: 82 00 7f ff add %g1, -1, %g1 4000f064: c2 20 a1 90 st %g1, [ %g2 + 0x190 ] 4000f068: c6 00 a1 90 ld [ %g2 + 0x190 ], %g3 4000f06c: 80 a0 e0 00 cmp %g3, 0 4000f070: 02 80 00 36 be 4000f148 <_Thread_Handler+0x128> 4000f074: 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) */ 4000f078: 83 2e 60 18 sll %i1, 0x18, %g1 <== NOT EXECUTED 4000f07c: 80 a0 60 00 cmp %g1, 0 4000f080: 02 80 00 22 be 4000f108 <_Thread_Handler+0xe8> 4000f084: 01 00 00 00 nop #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000f088: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 4000f08c: 80 a0 60 01 cmp %g1, 1 4000f090: 22 80 00 25 be,a 4000f124 <_Thread_Handler+0x104> 4000f094: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000f098: 80 a0 60 01 cmp %g1, 1 4000f09c: 1a 80 00 0c bcc 4000f0cc <_Thread_Handler+0xac> 4000f0a0: 80 a0 60 02 cmp %g1, 2 case THREAD_START_NUMERIC: executing->Wait.return_argument = 4000f0a4: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 4000f0a8: 9f c0 40 00 call %g1 4000f0ac: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 4000f0b0: d0 26 a0 28 st %o0, [ %i2 + 0x28 ] * was placed in return_argument. This assumed that if it returned * anything (which is not supporting in all APIs), then it would be * able to fit in a (void *). */ _User_extensions_Thread_exitted( executing ); 4000f0b4: 90 10 00 1a mov %i2, %o0 4000f0b8: 7f ff f1 4c call 4000b5e8 <_User_extensions_Thread_exitted> 4000f0bc: b0 10 20 00 clr %i0 _Internal_error_Occurred( 4000f0c0: b2 10 20 01 mov 1, %i1 4000f0c4: 7f ff e5 e2 call 4000884c <_Internal_error_Occurred> 4000f0c8: 95 e8 20 06 restore %g0, 6, %o2 #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000f0cc: 02 80 00 23 be 4000f158 <_Thread_Handler+0x138> <== NOT EXECUTED 4000f0d0: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000f0d4: 12 bf ff f9 bne 4000f0b8 <_Thread_Handler+0x98> <== NOT EXECUTED 4000f0d8: 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 = 4000f0dc: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000f0e0: d2 06 a0 b0 ld [ %i2 + 0xb0 ], %o1 <== NOT EXECUTED 4000f0e4: d0 06 a0 b4 ld [ %i2 + 0xb4 ], %o0 <== NOT EXECUTED 4000f0e8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000f0ec: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000f0f0: 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 ); 4000f0f4: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000f0f8: 7f ff f1 3c call 4000b5e8 <_User_extensions_Thread_exitted> <== NOT EXECUTED 4000f0fc: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED _Internal_error_Occurred( 4000f100: 7f ff e5 d3 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000f104: 95 e8 20 06 restore %g0, 6, %o2 <== NOT EXECUTED * _init could be a weak symbol and we SHOULD test it but it isn't * in any configuration I know of and it generates a warning on every * RTEMS target configuration. --joel (12 May 2007) */ if (!doneCons) /* && (volatile void *)_init) */ _init (); 4000f108: 40 00 2a bc call 40019bf8 <_init> 4000f10c: 01 00 00 00 nop #if defined(__USE__MAIN__) if (!doneCons && _main) __main (); #endif switch ( executing->Start.prototype ) { 4000f110: c2 06 a0 ac ld [ %i2 + 0xac ], %g1 4000f114: 80 a0 60 01 cmp %g1, 1 4000f118: 12 bf ff e1 bne 4000f09c <_Thread_Handler+0x7c> 4000f11c: 01 00 00 00 nop (*(Thread_Entry_numeric) executing->Start.entry_point)( executing->Start.numeric_argument ); break; case THREAD_START_POINTER: executing->Wait.return_argument = 4000f120: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000f124: d0 06 a0 b0 ld [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED 4000f128: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000f12c: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000f130: 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 ); 4000f134: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000f138: 7f ff f1 2c call 4000b5e8 <_User_extensions_Thread_exitted> <== NOT EXECUTED 4000f13c: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED _Internal_error_Occurred( 4000f140: 7f ff e5 c3 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000f144: 95 e8 20 06 restore %g0, 6, %o2 <== NOT EXECUTED _Thread_Dispatch(); 4000f148: 7f ff ec 67 call 4000a2e4 <_Thread_Dispatch> 4000f14c: 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) */ 4000f150: 10 bf ff cb b 4000f07c <_Thread_Handler+0x5c> 4000f154: 83 2e 60 18 sll %i1, 0x18, %g1 (*(Thread_Entry_pointer) executing->Start.entry_point)( executing->Start.pointer_argument ); break; case THREAD_START_BOTH_POINTER_FIRST: executing->Wait.return_argument = 4000f158: c2 06 a0 a8 ld [ %i2 + 0xa8 ], %g1 <== NOT EXECUTED 4000f15c: d0 1e a0 b0 ldd [ %i2 + 0xb0 ], %o0 <== NOT EXECUTED 4000f160: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000f164: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000f168: 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 ); 4000f16c: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED 4000f170: 7f ff f1 1e call 4000b5e8 <_User_extensions_Thread_exitted> <== NOT EXECUTED 4000f174: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED _Internal_error_Occurred( 4000f178: 7f ff e5 b5 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000f17c: 95 e8 20 06 restore %g0, 6, %o2 <== NOT EXECUTED 4000f180: 01 00 00 00 nop 4000a600 <_Thread_Handler_initialization>: void _Thread_Handler_initialization( uint32_t ticks_per_timeslice, uint32_t maximum_extensions, uint32_t maximum_proxies ) { 4000a600: 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 ) 4000a604: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000a608: 82 10 61 a4 or %g1, 0x1a4, %g1 ! 4001ada4 <_CPU_Table> 4000a60c: c4 00 60 20 ld [ %g1 + 0x20 ], %g2 4000a610: c6 00 60 24 ld [ %g1 + 0x24 ], %g3 4000a614: 80 a0 00 02 cmp %g0, %g2 4000a618: 88 60 3f ff subx %g0, -1, %g4 4000a61c: 80 a0 00 03 cmp %g0, %g3 4000a620: 82 60 3f ff subx %g0, -1, %g1 4000a624: 80 a1 00 01 cmp %g4, %g1 4000a628: 12 80 00 2c bne 4000a6d8 <_Thread_Handler_initialization+0xd8> 4000a62c: 90 10 20 00 clr %o0 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 4000a630: 03 10 00 6b sethi %hi(0x4001ac00), %g1 _Thread_Executing = NULL; 4000a634: 05 10 00 6b sethi %hi(0x4001ac00), %g2 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 4000a638: c0 20 62 7c clr [ %g1 + 0x27c ] _Thread_Executing = NULL; 4000a63c: c0 20 a2 6c clr [ %g2 + 0x26c ] _Thread_Heir = NULL; 4000a640: 03 10 00 6b sethi %hi(0x4001ac00), %g1 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; 4000a644: 05 10 00 6b sethi %hi(0x4001ac00), %g2 INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; _Thread_Executing = NULL; _Thread_Heir = NULL; 4000a648: c0 20 62 44 clr [ %g1 + 0x244 ] #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; 4000a64c: c0 20 a2 5c clr [ %g2 + 0x25c ] _Thread_Maximum_extensions = maximum_extensions; 4000a650: 03 10 00 6b sethi %hi(0x4001ac00), %g1 _Thread_Ticks_per_timeslice = ticks_per_timeslice; 4000a654: 05 10 00 6b sethi %hi(0x4001ac00), %g2 _Thread_Allocated_fp = NULL; #endif _Thread_Do_post_task_switch_extension = 0; _Thread_Maximum_extensions = maximum_extensions; 4000a658: f2 20 62 58 st %i1, [ %g1 + 0x258 ] _Thread_Ticks_per_timeslice = ticks_per_timeslice; 4000a65c: f0 20 a0 e8 st %i0, [ %g2 + 0xe8 ] _Thread_Ready_chain = (Chain_Control *) _Workspace_Allocate_or_fatal_error( 4000a660: 40 00 05 13 call 4000baac <_Workspace_Allocate_or_fatal_error> 4000a664: 90 10 2c 00 mov 0xc00, %o0 4000a668: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000a66c: 84 10 00 08 mov %o0, %g2 4000a670: d0 20 60 e4 st %o0, [ %g1 + 0xe4 ] 4000a674: 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); 4000a678: 82 00 a0 04 add %g2, 4, %g1 the_chain->permanent_null = NULL; 4000a67c: c0 20 a0 04 clr [ %g2 + 4 ] the_chain->last = _Chain_Head(the_chain); 4000a680: 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); 4000a684: c2 20 80 00 st %g1, [ %g2 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000a688: 84 00 a0 0c add %g2, 0xc, %g2 (PRIORITY_MAXIMUM + 1) * sizeof(Chain_Control) ); for ( index=0; index <= PRIORITY_MAXIMUM ; index++ ) 4000a68c: 80 a0 80 03 cmp %g2, %g3 4000a690: 12 bf ff fb bne 4000a67c <_Thread_Handler_initialization+0x7c> 4000a694: 82 00 a0 04 add %g2, 4, %g1 /* * Initialize this class of objects. */ _Objects_Initialize_information( 4000a698: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000a69c: c4 00 62 98 ld [ %g1 + 0x298 ], %g2 ! 4001ae98 <_System_state_Is_multiprocessing> 4000a6a0: 82 10 20 08 mov 8, %g1 4000a6a4: 80 a0 00 02 cmp %g0, %g2 4000a6a8: 96 10 20 02 mov 2, %o3 4000a6ac: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 4000a6b0: 96 42 ff ff addx %o3, -1, %o3 4000a6b4: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000a6b8: 92 10 20 01 mov 1, %o1 4000a6bc: 90 12 23 20 or %o0, 0x320, %o0 4000a6c0: 94 10 20 01 mov 1, %o2 4000a6c4: 98 10 21 80 mov 0x180, %o4 4000a6c8: 7f ff fa 06 call 40008ee0 <_Objects_Initialize_information> 4000a6cc: 9a 10 20 01 mov 1, %o5 FALSE, /* TRUE if this is a global object class */ NULL /* Proxy extraction support callout */ #endif ); } 4000a6d0: 81 c7 e0 08 ret 4000a6d4: 81 e8 00 00 restore * Do not allow mixture. */ if ( !( ( _CPU_Table.stack_allocate_hook == 0 ) == ( _CPU_Table.stack_free_hook == 0 ) ) ) _Internal_error_Occurred( 4000a6d8: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 4000a6dc: 7f ff f8 5c call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000a6e0: 94 10 20 0f mov 0xf, %o2 <== NOT EXECUTED INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_BAD_STACK_HOOK ); _Context_Switch_necessary = FALSE; 4000a6e4: 10 bf ff d4 b 4000a634 <_Thread_Handler_initialization+0x34> <== NOT EXECUTED 4000a6e8: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000a444 <_Thread_Initialize>: Thread_CPU_budget_algorithms budget_algorithm, Thread_CPU_budget_algorithm_callout budget_callout, uint32_t isr_level, Objects_Name name ) { 4000a444: 9d e3 bf 98 save %sp, -104, %sp /* * Initialize the Ada self pointer */ the_thread->rtems_ada_self = NULL; 4000a448: c0 26 60 80 clr [ %i1 + 0x80 ] /* * Allocate and Initialize the stack for this thread. */ if ( !stack_area ) { 4000a44c: 80 a6 a0 00 cmp %i2, 0 4000a450: 02 80 00 59 be 4000a5b4 <_Thread_Initialize+0x170> 4000a454: e2 07 a0 60 ld [ %fp + 0x60 ], %l1 stack = the_thread->Start.stack; the_thread->Start.core_allocated_stack = TRUE; } else { stack = stack_area; actual_stack_size = stack_size; the_thread->Start.core_allocated_stack = FALSE; 4000a458: c0 26 60 cc clr [ %i1 + 0xcc ] <== NOT EXECUTED 4000a45c: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED /* * Allocate the extensions area for this thread */ if ( _Thread_Maximum_extensions ) { 4000a460: 21 10 00 6b sethi %hi(0x4001ac00), %l0 4000a464: d2 04 22 58 ld [ %l0 + 0x258 ], %o1 ! 4001ae58 <_Thread_Maximum_extensions> Stack_Control *the_stack, void *starting_address, size_t size ) { the_stack->area = starting_address; 4000a468: f4 26 60 d4 st %i2, [ %i1 + 0xd4 ] the_stack->size = size; 4000a46c: d0 26 60 d0 st %o0, [ %i1 + 0xd0 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 4000a470: c0 26 60 50 clr [ %i1 + 0x50 ] the_watchdog->routine = routine; 4000a474: c0 26 60 64 clr [ %i1 + 0x64 ] the_watchdog->id = id; 4000a478: c0 26 60 68 clr [ %i1 + 0x68 ] the_watchdog->user_data = user_data; 4000a47c: c0 26 60 6c clr [ %i1 + 0x6c ] 4000a480: 80 a2 60 00 cmp %o1, 0 4000a484: 12 80 00 38 bne 4000a564 <_Thread_Initialize+0x120> 4000a488: c0 26 61 68 clr [ %i1 + 0x168 ] return FALSE; } } else extensions_area = NULL; the_thread->extensions = (void **) extensions_area; 4000a48c: c0 26 61 78 clr [ %i1 + 0x178 ] 4000a490: b6 10 20 00 clr %i3 /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 4000a494: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 the_thread->Start.budget_algorithm = budget_algorithm; 4000a498: e2 26 60 bc st %l1, [ %i1 + 0xbc ] /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 4000a49c: c2 26 60 b8 st %g1, [ %i1 + 0xb8 ] the_thread->Start.budget_algorithm = budget_algorithm; the_thread->Start.budget_callout = budget_callout; 4000a4a0: c2 07 a0 64 ld [ %fp + 0x64 ], %g1 switch ( budget_algorithm ) { 4000a4a4: 80 a4 60 02 cmp %l1, 2 4000a4a8: 12 80 00 05 bne 4000a4bc <_Thread_Initialize+0x78> 4000a4ac: 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; 4000a4b0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000a4b4: c4 00 60 e8 ld [ %g1 + 0xe8 ], %g2 ! 4001ace8 <_Thread_Ticks_per_timeslice> <== NOT EXECUTED 4000a4b8: c4 26 60 84 st %g2, [ %i1 + 0x84 ] <== NOT EXECUTED break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 4000a4bc: c2 07 a0 68 ld [ %fp + 0x68 ], %g1 the_thread->current_state = STATES_DORMANT; the_thread->Wait.queue = NULL; 4000a4c0: c0 26 60 44 clr [ %i1 + 0x44 ] break; case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: break; } the_thread->Start.isr_level = isr_level; 4000a4c4: c2 26 60 c4 st %g1, [ %i1 + 0xc4 ] the_thread->current_state = STATES_DORMANT; 4000a4c8: 82 10 20 01 mov 1, %g1 the_thread->Wait.queue = NULL; the_thread->resource_count = 0; 4000a4cc: c0 26 60 1c clr [ %i1 + 0x1c ] break; } the_thread->Start.isr_level = isr_level; the_thread->current_state = STATES_DORMANT; 4000a4d0: c2 26 60 10 st %g1, [ %i1 + 0x10 ] the_thread->Wait.queue = NULL; the_thread->resource_count = 0; the_thread->suspend_count = 0; 4000a4d4: c0 26 60 70 clr [ %i1 + 0x70 ] the_thread->real_priority = priority; 4000a4d8: fa 26 60 18 st %i5, [ %i1 + 0x18 ] the_thread->Start.initial_priority = priority; 4000a4dc: fa 26 60 c8 st %i5, [ %i1 + 0xc8 ] _Thread_Set_priority( the_thread, priority ); 4000a4e0: 92 10 00 1d mov %i5, %o1 4000a4e4: 40 00 02 76 call 4000aebc <_Thread_Set_priority> 4000a4e8: 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 ); 4000a4ec: c4 06 60 08 ld [ %i1 + 8 ], %g2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000a4f0: 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; 4000a4f4: c0 26 60 90 clr [ %i1 + 0x90 ] 4000a4f8: 03 00 00 3f sethi %hi(0xfc00), %g1 4000a4fc: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000a500: 82 08 80 01 and %g2, %g1, %g1 4000a504: 80 a0 40 03 cmp %g1, %g3 4000a508: 08 80 00 13 bleu 4000a554 <_Thread_Initialize+0x110> 4000a50c: c0 26 60 94 clr [ %i1 + 0x94 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 4000a510: c2 07 a0 6c ld [ %fp + 0x6c ], %g1 /* * Invoke create extensions */ if ( !_User_extensions_Thread_create( the_thread ) ) { 4000a514: 90 10 00 19 mov %i1, %o0 4000a518: c2 26 60 0c st %g1, [ %i1 + 0xc ] 4000a51c: 40 00 04 46 call 4000b634 <_User_extensions_Thread_create> 4000a520: b0 10 20 01 mov 1, %i0 4000a524: 80 a2 20 00 cmp %o0, 0 4000a528: 12 80 00 34 bne 4000a5f8 <_Thread_Initialize+0x1b4> 4000a52c: 80 a6 e0 00 cmp %i3, 0 if ( extensions_area ) 4000a530: 02 80 00 05 be 4000a544 <_Thread_Initialize+0x100> 4000a534: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000a538: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 4000a53c: 7f ff f7 c4 call 4000844c <_Heap_Free> <== NOT EXECUTED 4000a540: 90 12 21 dc or %o0, 0x1dc, %o0 <== NOT EXECUTED #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) (void) _Workspace_Free( fp_area ); #endif _Thread_Stack_Free( the_thread ); 4000a544: 40 00 03 22 call 4000b1cc <_Thread_Stack_Free> 4000a548: 90 10 00 19 mov %i1, %o0 4000a54c: 81 c7 e0 08 ret 4000a550: 91 e8 20 00 restore %g0, 0, %o0 uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) information->local_table[ index ] = the_object; 4000a554: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 4000a558: 83 28 60 02 sll %g1, 2, %g1 4000a55c: 10 bf ff ed b 4000a510 <_Thread_Initialize+0xcc> 4000a560: f2 20 80 01 st %i1, [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4000a564: 92 02 60 01 inc %o1 4000a568: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000a56c: 93 2a 60 02 sll %o1, 2, %o1 4000a570: 7f ff f7 85 call 40008384 <_Heap_Allocate> 4000a574: 90 12 21 dc or %o0, 0x1dc, %o0 if ( _Thread_Maximum_extensions ) { extensions_area = _Workspace_Allocate( (_Thread_Maximum_extensions + 1) * sizeof( void * ) ); if ( !extensions_area ) { 4000a578: b6 92 20 00 orcc %o0, 0, %i3 4000a57c: 02 80 00 1c be 4000a5ec <_Thread_Initialize+0x1a8> 4000a580: c2 04 22 58 ld [ %l0 + 0x258 ], %g1 * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 4000a584: 80 a0 7f ff cmp %g1, -1 4000a588: 02 bf ff c3 be 4000a494 <_Thread_Initialize+0x50> 4000a58c: f6 26 61 78 st %i3, [ %i1 + 0x178 ] 4000a590: 86 00 60 01 add %g1, 1, %g3 4000a594: 84 10 20 00 clr %g2 the_thread->extensions[i] = NULL; 4000a598: 83 28 a0 02 sll %g2, 2, %g1 * call. */ if ( the_thread->extensions ) { int i; for ( i = 0; i < (_Thread_Maximum_extensions + 1); i++ ) 4000a59c: 84 00 a0 01 inc %g2 4000a5a0: 80 a0 80 03 cmp %g2, %g3 4000a5a4: 12 bf ff fd bne 4000a598 <_Thread_Initialize+0x154> 4000a5a8: c0 26 c0 01 clr [ %i3 + %g1 ] /* * General initialization */ the_thread->Start.is_preemptible = is_preemptible; 4000a5ac: 10 bf ff bb b 4000a498 <_Thread_Initialize+0x54> 4000a5b0: c2 07 a0 5c ld [ %fp + 0x5c ], %g1 * Allocate and Initialize the stack for this thread. */ if ( !stack_area ) { if ( !_Stack_Is_enough( stack_size ) ) 4000a5b4: 80 a6 ef ff cmp %i3, 0xfff 4000a5b8: 08 80 00 03 bleu 4000a5c4 <_Thread_Initialize+0x180> 4000a5bc: 13 00 00 04 sethi %hi(0x1000), %o1 4000a5c0: 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 ); 4000a5c4: 40 00 02 e7 call 4000b160 <_Thread_Stack_Allocate> 4000a5c8: 90 10 00 19 mov %i1, %o0 if ( !actual_stack_size || actual_stack_size < stack_size ) 4000a5cc: 80 a2 20 00 cmp %o0, 0 4000a5d0: 02 bf ff df be 4000a54c <_Thread_Initialize+0x108> 4000a5d4: 80 a6 c0 08 cmp %i3, %o0 4000a5d8: 18 bf ff dd bgu 4000a54c <_Thread_Initialize+0x108> 4000a5dc: 82 10 20 01 mov 1, %g1 return FALSE; /* stack allocation failed */ stack = the_thread->Start.stack; 4000a5e0: f4 06 60 d8 ld [ %i1 + 0xd8 ], %i2 the_thread->Start.core_allocated_stack = TRUE; 4000a5e4: 10 bf ff 9f b 4000a460 <_Thread_Initialize+0x1c> 4000a5e8: c2 26 60 cc st %g1, [ %i1 + 0xcc ] #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( fp_area ) (void) _Workspace_Free( fp_area ); #endif _Thread_Stack_Free( the_thread ); 4000a5ec: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000a5f0: 40 00 02 f7 call 4000b1cc <_Thread_Stack_Free> <== NOT EXECUTED 4000a5f4: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000a5f8: 81 c7 e0 08 ret 4000a5fc: 81 e8 00 00 restore 4000f420 <_Thread_Reset>: void _Thread_Reset( Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { 4000f420: 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; 4000f424: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 the_thread->budget_algorithm = the_thread->Start.budget_algorithm; 4000f428: c4 06 20 bc ld [ %i0 + 0xbc ], %g2 the_thread->budget_callout = the_thread->Start.budget_callout; 4000f42c: 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; 4000f430: 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; 4000f434: c4 3e 20 88 std %g2, [ %i0 + 0x88 ] the_thread->Start.pointer_argument = pointer_argument; 4000f438: f2 26 20 b0 st %i1, [ %i0 + 0xb0 ] the_thread->Start.numeric_argument = numeric_argument; 4000f43c: f4 26 20 b4 st %i2, [ %i0 + 0xb4 ] Thread_Control *the_thread, void *pointer_argument, uint32_t numeric_argument ) { the_thread->resource_count = 0; 4000f440: c0 26 20 1c clr [ %i0 + 0x1c ] the_thread->suspend_count = 0; 4000f444: 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 ) ) { 4000f448: 7f ff f1 24 call 4000b8d8 <_Thread_queue_Extract_with_proxy> 4000f44c: 90 10 00 18 mov %i0, %o0 4000f450: 80 a2 20 00 cmp %o0, 0 4000f454: 32 80 00 07 bne,a 4000f470 <_Thread_Reset+0x50> 4000f458: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 if ( _Watchdog_Is_active( &the_thread->Timer ) ) 4000f45c: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000f460: 80 a0 60 02 cmp %g1, 2 4000f464: 02 80 00 0c be 4000f494 <_Thread_Reset+0x74> 4000f468: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); } if ( the_thread->current_priority != the_thread->Start.initial_priority ) { 4000f46c: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 4000f470: c2 06 20 14 ld [ %i0 + 0x14 ], %g1 4000f474: 80 a0 40 19 cmp %g1, %i1 4000f478: 02 80 00 05 be 4000f48c <_Thread_Reset+0x6c> 4000f47c: 01 00 00 00 nop the_thread->real_priority = the_thread->Start.initial_priority; 4000f480: f2 26 20 18 st %i1, [ %i0 + 0x18 ] _Thread_Set_priority( the_thread, the_thread->Start.initial_priority ); 4000f484: 7f ff f1 d6 call 4000bbdc <_Thread_Set_priority> 4000f488: 81 e8 00 00 restore 4000f48c: 81 c7 e0 08 ret 4000f490: 81 e8 00 00 restore the_thread->Start.numeric_argument = numeric_argument; if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) { if ( _Watchdog_Is_active( &the_thread->Timer ) ) (void) _Watchdog_Remove( &the_thread->Timer ); 4000f494: 7f ff f4 81 call 4000c698 <_Watchdog_Remove> <== NOT EXECUTED 4000f498: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED } if ( the_thread->current_priority != the_thread->Start.initial_priority ) { 4000f49c: 10 bf ff f5 b 4000f470 <_Thread_Reset+0x50> <== NOT EXECUTED 4000f4a0: f2 06 20 c8 ld [ %i0 + 0xc8 ], %i1 <== NOT EXECUTED 4000e628 <_Thread_Reset_timeslice>: * ready chain * select heir */ void _Thread_Reset_timeslice( void ) { 4000e628: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *executing; Chain_Control *ready; executing = _Thread_Executing; 4000e62c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000e630: e0 00 62 6c ld [ %g1 + 0x26c ], %l0 ! 4001ae6c <_Thread_Executing> ready = executing->ready; _ISR_Disable( level ); 4000e634: 7f ff ce 66 call 40001fcc 4000e638: e2 04 20 98 ld [ %l0 + 0x98 ], %l1 4000e63c: b0 10 00 08 mov %o0, %i0 if ( _Chain_Has_only_one_node( ready ) ) { 4000e640: c4 04 40 00 ld [ %l1 ], %g2 4000e644: c2 04 60 08 ld [ %l1 + 8 ], %g1 4000e648: 80 a0 80 01 cmp %g2, %g1 4000e64c: 32 80 00 04 bne,a 4000e65c <_Thread_Reset_timeslice+0x34> 4000e650: c6 04 00 00 ld [ %l0 ], %g3 _ISR_Enable( level ); 4000e654: 7f ff ce 62 call 40001fdc 4000e658: 81 e8 00 00 restore { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 4000e65c: c4 04 20 04 ld [ %l0 + 4 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000e660: 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; 4000e664: c6 20 80 00 st %g3, [ %g2 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000e668: c2 24 00 00 st %g1, [ %l0 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000e66c: 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; 4000e670: c2 04 60 08 ld [ %l1 + 8 ], %g1 the_chain->last = the_node; 4000e674: e0 24 60 08 st %l0, [ %l1 + 8 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000e678: 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; 4000e67c: e0 20 40 00 st %l0, [ %g1 ] return; } _Chain_Extract_unprotected( &executing->Object.Node ); _Chain_Append_unprotected( ready, &executing->Object.Node ); _ISR_Flash( level ); 4000e680: 7f ff ce 57 call 40001fdc 4000e684: 01 00 00 00 nop 4000e688: 7f ff ce 51 call 40001fcc 4000e68c: 01 00 00 00 nop if ( _Thread_Is_heir( executing ) ) 4000e690: 05 10 00 6b sethi %hi(0x4001ac00), %g2 4000e694: c2 00 a2 44 ld [ %g2 + 0x244 ], %g1 ! 4001ae44 <_Thread_Heir> 4000e698: 80 a4 00 01 cmp %l0, %g1 4000e69c: 32 80 00 05 bne,a 4000e6b0 <_Thread_Reset_timeslice+0x88> 4000e6a0: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED _Thread_Heir = (Thread_Control *) ready->first; 4000e6a4: c2 04 40 00 ld [ %l1 ], %g1 4000e6a8: c2 20 a2 44 st %g1, [ %g2 + 0x244 ] _Context_Switch_necessary = TRUE; 4000e6ac: 84 10 20 01 mov 1, %g2 4000e6b0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000e6b4: c4 20 62 7c st %g2, [ %g1 + 0x27c ] ! 4001ae7c <_Context_Switch_necessary> _ISR_Enable( level ); 4000e6b8: 7f ff ce 49 call 40001fdc 4000e6bc: 81 e8 00 00 restore 4000e6c0: 01 00 00 00 nop 4000ca10 <_Thread_Resume>: void _Thread_Resume( Thread_Control *the_thread, boolean force ) { 4000ca10: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; States_Control current_state; _ISR_Disable( level ); 4000ca14: 7f ff d8 b6 call 40002cec 4000ca18: 01 00 00 00 nop 4000ca1c: a0 10 00 08 mov %o0, %l0 if ( force == TRUE ) 4000ca20: 80 a6 60 01 cmp %i1, 1 4000ca24: 22 80 00 13 be,a 4000ca70 <_Thread_Resume+0x60> 4000ca28: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 the_thread->suspend_count = 0; else the_thread->suspend_count--; 4000ca2c: c2 06 20 70 ld [ %i0 + 0x70 ], %g1 <== NOT EXECUTED 4000ca30: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED if ( the_thread->suspend_count > 0 ) { 4000ca34: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000ca38: 12 80 00 0c bne 4000ca68 <_Thread_Resume+0x58> <== NOT EXECUTED 4000ca3c: c2 26 20 70 st %g1, [ %i0 + 0x70 ] <== NOT EXECUTED _ISR_Enable( level ); return; } current_state = the_thread->current_state; 4000ca40: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED if ( current_state & STATES_SUSPENDED ) { 4000ca44: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 4000ca48: 02 80 00 06 be 4000ca60 <_Thread_Resume+0x50> <== NOT EXECUTED 4000ca4c: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE States_Control _States_Clear ( States_Control states_to_clear, States_Control current_state ) { return (current_state & ~states_to_clear); 4000ca50: 82 08 7f fd and %g1, -3, %g1 <== NOT EXECUTED current_state = the_thread->current_state = _States_Clear(STATES_SUSPENDED, current_state); if ( _States_Is_ready( current_state ) ) { 4000ca54: 80 a0 60 00 cmp %g1, 0 4000ca58: 02 80 00 0b be 4000ca84 <_Thread_Resume+0x74> 4000ca5c: c2 26 20 10 st %g1, [ %i0 + 0x10 ] _Context_Switch_necessary = TRUE; } } } _ISR_Enable( level ); 4000ca60: 7f ff d8 a7 call 40002cfc 4000ca64: 91 e8 00 10 restore %g0, %l0, %o0 the_thread->suspend_count = 0; else the_thread->suspend_count--; if ( the_thread->suspend_count > 0 ) { _ISR_Enable( level ); 4000ca68: 7f ff d8 a5 call 40002cfc <== NOT EXECUTED 4000ca6c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED return; } current_state = the_thread->current_state; if ( current_state & STATES_SUSPENDED ) { 4000ca70: 80 88 60 02 btst 2, %g1 4000ca74: 02 bf ff fb be 4000ca60 <_Thread_Resume+0x50> 4000ca78: c0 26 20 70 clr [ %i0 + 0x70 ] 4000ca7c: 10 bf ff f6 b 4000ca54 <_Thread_Resume+0x44> 4000ca80: 82 08 7f fd and %g1, -3, %g1 RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map ( Priority_Information *the_priority_map ) { *the_priority_map->minor |= the_priority_map->ready_minor; 4000ca84: c8 06 20 9c ld [ %i0 + 0x9c ], %g4 4000ca88: c4 16 20 a2 lduh [ %i0 + 0xa2 ], %g2 4000ca8c: c2 11 00 00 lduh [ %g4 ], %g1 if ( _States_Is_ready( current_state ) ) { _Priority_Add_to_bit_map( &the_thread->Priority_map ); _Chain_Append_unprotected(the_thread->ready, &the_thread->Object.Node); 4000ca90: c6 06 20 98 ld [ %i0 + 0x98 ], %g3 4000ca94: 82 10 40 02 or %g1, %g2, %g1 _Priority_Major_bit_map |= the_priority_map->ready_major; 4000ca98: 1b 10 00 9d sethi %hi(0x40027400), %o5 RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map ( Priority_Information *the_priority_map ) { *the_priority_map->minor |= the_priority_map->ready_minor; 4000ca9c: c2 31 00 00 sth %g1, [ %g4 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000caa0: 82 00 e0 04 add %g3, 4, %g1 _Priority_Major_bit_map |= the_priority_map->ready_major; 4000caa4: d8 16 20 a0 lduh [ %i0 + 0xa0 ], %o4 4000caa8: c2 26 00 00 st %g1, [ %i0 ] 4000caac: c4 13 60 30 lduh [ %o5 + 0x30 ], %g2 old_last_node = the_chain->last; 4000cab0: c8 00 e0 08 ld [ %g3 + 8 ], %g4 the_chain->last = the_node; 4000cab4: f0 20 e0 08 st %i0, [ %g3 + 8 ] 4000cab8: 84 10 80 0c or %g2, %o4, %g2 old_last_node->next = the_node; the_node->previous = old_last_node; 4000cabc: c8 26 20 04 st %g4, [ %i0 + 4 ] 4000cac0: c4 33 60 30 sth %g2, [ %o5 + 0x30 ] 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; 4000cac4: f0 21 00 00 st %i0, [ %g4 ] _ISR_Flash( level ); 4000cac8: 7f ff d8 8d call 40002cfc 4000cacc: 90 10 00 10 mov %l0, %o0 4000cad0: 7f ff d8 87 call 40002cec 4000cad4: 01 00 00 00 nop if ( the_thread->current_priority < _Thread_Heir->current_priority ) { 4000cad8: 09 10 00 9d sethi %hi(0x40027400), %g4 4000cadc: c4 01 20 14 ld [ %g4 + 0x14 ], %g2 ! 40027414 <_Thread_Heir> 4000cae0: c6 06 20 14 ld [ %i0 + 0x14 ], %g3 4000cae4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 4000cae8: 80 a0 c0 01 cmp %g3, %g1 4000caec: 1a bf ff dd bcc 4000ca60 <_Thread_Resume+0x50> 4000caf0: 01 00 00 00 nop _Thread_Heir = the_thread; if ( _Thread_Executing->is_preemptible || 4000caf4: 03 10 00 9d sethi %hi(0x40027400), %g1 4000caf8: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 4002743c <_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; 4000cafc: f0 21 20 14 st %i0, [ %g4 + 0x14 ] if ( _Thread_Executing->is_preemptible || 4000cb00: c2 00 a0 7c ld [ %g2 + 0x7c ], %g1 4000cb04: 80 a0 60 00 cmp %g1, 0 4000cb08: 02 80 00 06 be 4000cb20 <_Thread_Resume+0x110> 4000cb0c: 80 a0 e0 00 cmp %g3, 0 the_thread->current_priority == 0 ) _Context_Switch_necessary = TRUE; 4000cb10: 84 10 20 01 mov 1, %g2 4000cb14: 03 10 00 9d sethi %hi(0x40027400), %g1 4000cb18: c4 20 60 4c st %g2, [ %g1 + 0x4c ] ! 4002744c <_Context_Switch_necessary> 4000cb1c: 30 bf ff d1 b,a 4000ca60 <_Thread_Resume+0x50> _ISR_Flash( level ); if ( the_thread->current_priority < _Thread_Heir->current_priority ) { _Thread_Heir = the_thread; if ( _Thread_Executing->is_preemptible || 4000cb20: 12 bf ff d0 bne 4000ca60 <_Thread_Resume+0x50> 4000cb24: 84 10 20 01 mov 1, %g2 the_thread->current_priority == 0 ) _Context_Switch_necessary = TRUE; 4000cb28: 10 bf ff fc b 4000cb18 <_Thread_Resume+0x108> <== NOT EXECUTED 4000cb2c: 03 10 00 9d sethi %hi(0x40027400), %g1 <== NOT EXECUTED 4000b160 <_Thread_Stack_Allocate>: size_t _Thread_Stack_Allocate( Thread_Control *the_thread, size_t stack_size ) { 4000b160: 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 ) ) 4000b164: 80 a6 6f ff cmp %i1, 0xfff 4000b168: 28 80 00 02 bleu,a 4000b170 <_Thread_Stack_Allocate+0x10> 4000b16c: 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 ) { 4000b170: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b174: c2 00 61 c4 ld [ %g1 + 0x1c4 ], %g1 ! 4001adc4 <_CPU_Table+0x20> 4000b178: 80 a0 60 00 cmp %g1, 0 4000b17c: 02 80 00 0a be 4000b1a4 <_Thread_Stack_Allocate+0x44> 4000b180: 92 06 60 10 add %i1, 0x10, %o1 stack_addr = (*_CPU_Table.stack_allocate_hook)( the_stack_size ); 4000b184: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000b188: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED } if ( !stack_addr ) the_stack_size = 0; the_thread->Start.stack = stack_addr; 4000b18c: d0 26 20 d8 st %o0, [ %i0 + 0xd8 ] <== NOT EXECUTED the_stack_size = _Stack_Adjust_size( the_stack_size ); stack_addr = _Workspace_Allocate( the_stack_size ); } if ( !stack_addr ) 4000b190: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4000b194: b0 60 20 00 subx %g0, 0, %i0 <== NOT EXECUTED the_stack_size = 0; the_thread->Start.stack = stack_addr; return the_stack_size; } 4000b198: b0 0e 40 18 and %i1, %i0, %i0 <== NOT EXECUTED 4000b19c: 81 c7 e0 08 ret <== NOT EXECUTED 4000b1a0: 81 e8 00 00 restore <== NOT EXECUTED 4000b1a4: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000b1a8: b2 10 00 09 mov %o1, %i1 4000b1ac: 7f ff f4 76 call 40008384 <_Heap_Allocate> 4000b1b0: 90 12 21 dc or %o0, 0x1dc, %o0 } if ( !stack_addr ) the_stack_size = 0; the_thread->Start.stack = stack_addr; 4000b1b4: d0 26 20 d8 st %o0, [ %i0 + 0xd8 ] the_stack_size = _Stack_Adjust_size( the_stack_size ); stack_addr = _Workspace_Allocate( the_stack_size ); } if ( !stack_addr ) 4000b1b8: 80 a0 00 08 cmp %g0, %o0 4000b1bc: b0 60 20 00 subx %g0, 0, %i0 the_stack_size = 0; the_thread->Start.stack = stack_addr; return the_stack_size; } 4000b1c0: b0 0e 40 18 and %i1, %i0, %i0 4000b1c4: 81 c7 e0 08 ret 4000b1c8: 81 e8 00 00 restore 4000b1cc <_Thread_Stack_Free>: */ void _Thread_Stack_Free( Thread_Control *the_thread ) { 4000b1cc: 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 ) 4000b1d0: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 4000b1d4: 80 a0 60 00 cmp %g1, 0 4000b1d8: 02 80 00 08 be 4000b1f8 <_Thread_Stack_Free+0x2c> 4000b1dc: 03 10 00 6b sethi %hi(0x4001ac00), %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 ) 4000b1e0: c2 00 61 c8 ld [ %g1 + 0x1c8 ], %g1 ! 4001adc8 <_CPU_Table+0x24> 4000b1e4: 80 a0 60 00 cmp %g1, 0 4000b1e8: 22 80 00 06 be,a 4000b200 <_Thread_Stack_Free+0x34> 4000b1ec: f2 06 20 d4 ld [ %i0 + 0xd4 ], %i1 (*_CPU_Table.stack_free_hook)( the_thread->Start.Initial_stack.area ); 4000b1f0: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000b1f4: d0 06 20 d4 ld [ %i0 + 0xd4 ], %o0 <== NOT EXECUTED 4000b1f8: 81 c7 e0 08 ret <== NOT EXECUTED 4000b1fc: 81 e8 00 00 restore <== NOT EXECUTED RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4000b200: 31 10 00 6b sethi %hi(0x4001ac00), %i0 4000b204: 7f ff f4 92 call 4000844c <_Heap_Free> 4000b208: 91 ee 21 dc restore %i0, 0x1dc, %o0 4000b20c: 01 00 00 00 nop 4000b298 <_Thread_Tickle_timeslice>: * * Output parameters: NONE */ void _Thread_Tickle_timeslice( void ) { 4000b298: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *executing; executing = _Thread_Executing; 4000b29c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b2a0: e0 00 62 6c ld [ %g1 + 0x26c ], %l0 ! 4001ae6c <_Thread_Executing> /* * If the thread is not preemptible or is not ready, then * just return. */ if ( !executing->is_preemptible ) 4000b2a4: c4 04 20 7c ld [ %l0 + 0x7c ], %g2 4000b2a8: 80 a0 a0 00 cmp %g2, 0 4000b2ac: 02 80 00 24 be 4000b33c <_Thread_Tickle_timeslice+0xa4> 4000b2b0: 01 00 00 00 nop return; if ( !_States_Is_ready( executing->current_state ) ) 4000b2b4: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000b2b8: 80 a0 60 00 cmp %g1, 0 4000b2bc: 12 80 00 20 bne 4000b33c <_Thread_Tickle_timeslice+0xa4> 4000b2c0: 01 00 00 00 nop /* * The cpu budget algorithm determines what happens next. */ switch ( executing->budget_algorithm ) { 4000b2c4: c2 04 20 88 ld [ %l0 + 0x88 ], %g1 4000b2c8: 80 a0 60 01 cmp %g1, 1 4000b2cc: 0a 80 00 09 bcs 4000b2f0 <_Thread_Tickle_timeslice+0x58> 4000b2d0: 80 a0 60 02 cmp %g1, 2 4000b2d4: 18 80 00 09 bgu 4000b2f8 <_Thread_Tickle_timeslice+0x60> 4000b2d8: 80 a0 60 03 cmp %g1, 3 case THREAD_CPU_BUDGET_ALGORITHM_NONE: break; case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE: case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE: if ( (int)(--executing->cpu_time_budget) <= 0 ) { 4000b2dc: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 4000b2e0: 82 00 7f ff add %g1, -1, %g1 4000b2e4: 80 a0 60 00 cmp %g1, 0 4000b2e8: 04 80 00 10 ble 4000b328 <_Thread_Tickle_timeslice+0x90> 4000b2ec: c2 24 20 84 st %g1, [ %l0 + 0x84 ] 4000b2f0: 81 c7 e0 08 ret 4000b2f4: 81 e8 00 00 restore /* * The cpu budget algorithm determines what happens next. */ switch ( executing->budget_algorithm ) { 4000b2f8: 12 80 00 11 bne 4000b33c <_Thread_Tickle_timeslice+0xa4> <== NOT EXECUTED 4000b2fc: 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 ) 4000b300: c2 04 20 84 ld [ %l0 + 0x84 ], %g1 <== NOT EXECUTED 4000b304: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000b308: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000b30c: 12 bf ff f9 bne 4000b2f0 <_Thread_Tickle_timeslice+0x58> <== NOT EXECUTED 4000b310: c2 24 20 84 st %g1, [ %l0 + 0x84 ] <== NOT EXECUTED (*executing->budget_callout)( executing ); 4000b314: c2 04 20 8c ld [ %l0 + 0x8c ], %g1 <== NOT EXECUTED 4000b318: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000b31c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000b320: 81 c7 e0 08 ret <== NOT EXECUTED 4000b324: 81 e8 00 00 restore <== NOT EXECUTED break; case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE: case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE: if ( (int)(--executing->cpu_time_budget) <= 0 ) { _Thread_Reset_timeslice(); 4000b328: 40 00 0c c0 call 4000e628 <_Thread_Reset_timeslice> 4000b32c: 01 00 00 00 nop executing->cpu_time_budget = _Thread_Ticks_per_timeslice; 4000b330: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b334: c4 00 60 e8 ld [ %g1 + 0xe8 ], %g2 ! 4001ace8 <_Thread_Ticks_per_timeslice> 4000b338: c4 24 20 84 st %g2, [ %l0 + 0x84 ] 4000b33c: 81 c7 e0 08 ret 4000b340: 81 e8 00 00 restore 4000b344 <_Thread_Yield_processor>: * ready chain * select heir */ void _Thread_Yield_processor( void ) { 4000b344: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *executing; Chain_Control *ready; executing = _Thread_Executing; 4000b348: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b34c: e0 00 62 6c ld [ %g1 + 0x26c ], %l0 ! 4001ae6c <_Thread_Executing> ready = executing->ready; _ISR_Disable( level ); 4000b350: 7f ff db 1f call 40001fcc 4000b354: e2 04 20 98 ld [ %l0 + 0x98 ], %l1 4000b358: b0 10 00 08 mov %o0, %i0 if ( !_Chain_Has_only_one_node( ready ) ) { 4000b35c: c4 04 40 00 ld [ %l1 ], %g2 4000b360: c2 04 60 08 ld [ %l1 + 8 ], %g1 4000b364: 80 a0 80 01 cmp %g2, %g1 4000b368: 12 80 00 0b bne 4000b394 <_Thread_Yield_processor+0x50> 4000b36c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 if ( _Thread_Is_heir( executing ) ) _Thread_Heir = (Thread_Control *) ready->first; _Context_Switch_necessary = TRUE; } else if ( !_Thread_Is_heir( executing ) ) 4000b370: c4 00 62 44 ld [ %g1 + 0x244 ], %g2 ! 4001ae44 <_Thread_Heir> 4000b374: 80 a4 00 02 cmp %l0, %g2 4000b378: 02 80 00 05 be 4000b38c <_Thread_Yield_processor+0x48> 4000b37c: 01 00 00 00 nop _Context_Switch_necessary = TRUE; 4000b380: 84 10 20 01 mov 1, %g2 ! 1 4000b384: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b388: c4 20 62 7c st %g2, [ %g1 + 0x27c ] ! 4001ae7c <_Context_Switch_necessary> _ISR_Enable( level ); 4000b38c: 7f ff db 14 call 40001fdc 4000b390: 81 e8 00 00 restore ) { Chain_Node *next; Chain_Node *previous; next = the_node->next; 4000b394: c6 04 00 00 ld [ %l0 ], %g3 previous = the_node->previous; 4000b398: c4 04 20 04 ld [ %l0 + 4 ], %g2 Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000b39c: 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; 4000b3a0: c6 20 80 00 st %g3, [ %g2 ] Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000b3a4: c2 24 00 00 st %g1, [ %l0 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000b3a8: 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; 4000b3ac: c2 04 60 08 ld [ %l1 + 8 ], %g1 the_chain->last = the_node; 4000b3b0: e0 24 60 08 st %l0, [ %l1 + 8 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000b3b4: 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; 4000b3b8: e0 20 40 00 st %l0, [ %g1 ] _ISR_Disable( level ); if ( !_Chain_Has_only_one_node( ready ) ) { _Chain_Extract_unprotected( &executing->Object.Node ); _Chain_Append_unprotected( ready, &executing->Object.Node ); _ISR_Flash( level ); 4000b3bc: 7f ff db 08 call 40001fdc 4000b3c0: 01 00 00 00 nop 4000b3c4: 7f ff db 02 call 40001fcc 4000b3c8: 01 00 00 00 nop if ( _Thread_Is_heir( executing ) ) 4000b3cc: 05 10 00 6b sethi %hi(0x4001ac00), %g2 4000b3d0: c2 00 a2 44 ld [ %g2 + 0x244 ], %g1 ! 4001ae44 <_Thread_Heir> 4000b3d4: 80 a4 00 01 cmp %l0, %g1 4000b3d8: 32 bf ff eb bne,a 4000b384 <_Thread_Yield_processor+0x40> 4000b3dc: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED _Thread_Heir = (Thread_Control *) ready->first; 4000b3e0: c2 04 40 00 ld [ %l1 ], %g1 4000b3e4: 10 bf ff e7 b 4000b380 <_Thread_Yield_processor+0x3c> 4000b3e8: c2 20 a2 44 st %g1, [ %g2 + 0x244 ] 4000a6ec <_Thread_queue_Dequeue>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4000a6ec: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4000a6f0: 80 a0 60 00 cmp %g1, 0 4000a6f4: 12 80 00 05 bne 4000a708 <_Thread_queue_Dequeue+0x1c> 4000a6f8: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_Dequeue_fifo( the_thread_queue ); 4000a6fc: 82 13 c0 00 mov %o7, %g1 4000a700: 40 00 0e c2 call 4000e208 <_Thread_queue_Dequeue_fifo> 4000a704: 9e 10 40 00 mov %g1, %o7 Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4000a708: 02 80 00 04 be 4000a718 <_Thread_queue_Dequeue+0x2c> 4000a70c: 01 00 00 00 nop the_thread = NULL; break; } return( the_thread ); } 4000a710: 81 c3 e0 08 retl <== NOT EXECUTED 4000a714: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED switch ( the_thread_queue->discipline ) { case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_Dequeue_fifo( the_thread_queue ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_Dequeue_priority( the_thread_queue ); 4000a718: 82 13 c0 00 mov %o7, %g1 4000a71c: 40 00 00 03 call 4000a728 <_Thread_queue_Dequeue_priority> 4000a720: 9e 10 40 00 mov %g1, %o7 4000a724: 01 00 00 00 nop 4000e208 <_Thread_queue_Dequeue_fifo>: */ Thread_Control *_Thread_queue_Dequeue_fifo( Thread_queue_Control *the_thread_queue ) { 4000e208: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_Control *the_thread; _ISR_Disable( level ); 4000e20c: 7f ff cf 70 call 40001fcc 4000e210: a0 10 00 18 mov %i0, %l0 4000e214: 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)); 4000e218: f0 06 00 00 ld [ %i0 ], %i0 if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) { 4000e21c: 82 04 20 04 add %l0, 4, %g1 4000e220: 80 a6 00 01 cmp %i0, %g1 4000e224: 22 80 00 1d be,a 4000e298 <_Thread_queue_Dequeue_fifo+0x90> 4000e228: 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; 4000e22c: c2 06 00 00 ld [ %i0 ], %g1 the_chain->first = new_first; 4000e230: 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 ) ) { 4000e234: c4 06 20 50 ld [ %i0 + 0x50 ], %g2 new_first->previous = _Chain_Head(the_chain); 4000e238: e0 20 60 04 st %l0, [ %g1 + 4 ] 4000e23c: 80 a0 a0 02 cmp %g2, 2 4000e240: 02 80 00 0a be 4000e268 <_Thread_queue_Dequeue_fifo+0x60> 4000e244: c0 26 20 44 clr [ %i0 + 0x44 ] _ISR_Enable( level ); 4000e248: 7f ff cf 65 call 40001fdc 4000e24c: 01 00 00 00 nop RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000e250: 90 10 00 18 mov %i0, %o0 4000e254: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000e258: 7f ff ef 6e call 4000a010 <_Thread_Clear_state> 4000e25c: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 4000e260: 81 c7 e0 08 ret 4000e264: 81 e8 00 00 restore RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 4000e268: 82 10 20 03 mov 3, %g1 4000e26c: c2 26 20 50 st %g1, [ %i0 + 0x50 ] _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000e270: 7f ff cf 5b call 40001fdc 4000e274: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 4000e278: 7f ff f5 ac call 4000b928 <_Watchdog_Remove> 4000e27c: 90 06 20 48 add %i0, 0x48, %o0 4000e280: 90 10 00 18 mov %i0, %o0 4000e284: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000e288: 7f ff ef 62 call 4000a010 <_Thread_Clear_state> 4000e28c: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 4000e290: 81 c7 e0 08 ret 4000e294: 81 e8 00 00 restore #endif return the_thread; } switch ( the_thread_queue->sync_state ) { 4000e298: 80 a0 60 02 cmp %g1, 2 4000e29c: 18 80 00 0c bgu 4000e2cc <_Thread_queue_Dequeue_fifo+0xc4> 4000e2a0: 80 a0 60 03 cmp %g1, 3 4000e2a4: 80 a0 60 01 cmp %g1, 1 4000e2a8: 0a 80 00 0b bcs 4000e2d4 <_Thread_queue_Dequeue_fifo+0xcc> 4000e2ac: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 4000e2b0: c2 24 20 30 st %g1, [ %l0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 4000e2b4: 7f ff cf 4a call 40001fdc <== NOT EXECUTED 4000e2b8: 01 00 00 00 nop <== NOT EXECUTED return _Thread_Executing; 4000e2bc: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000e2c0: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001ae6c <_Thread_Executing> <== NOT EXECUTED } return NULL; /* this is only to prevent warnings */ } 4000e2c4: 81 c7 e0 08 ret <== NOT EXECUTED 4000e2c8: 81 e8 00 00 restore <== NOT EXECUTED #endif return the_thread; } switch ( the_thread_queue->sync_state ) { 4000e2cc: 12 bf ff e5 bne 4000e260 <_Thread_queue_Dequeue_fifo+0x58> <== NOT EXECUTED 4000e2d0: b0 10 20 00 clr %i0 <== NOT EXECUTED case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 4000e2d4: b0 10 20 00 clr %i0 4000e2d8: 7f ff cf 41 call 40001fdc 4000e2dc: 90 10 00 02 mov %g2, %o0 4000e2e0: 81 c7 e0 08 ret 4000e2e4: 81 e8 00 00 restore 4000a728 <_Thread_queue_Dequeue_priority>: */ Thread_Control *_Thread_queue_Dequeue_priority( Thread_queue_Control *the_thread_queue ) { 4000a728: 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 ); 4000a72c: 7f ff de 28 call 40001fcc 4000a730: 01 00 00 00 nop 4000a734: 9a 10 00 08 mov %o0, %o5 4000a738: 86 10 20 00 clr %g3 4000a73c: 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)); 4000a740: 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 ] ) ) { 4000a744: 85 28 e0 02 sll %g3, 2, %g2 4000a748: 83 28 e0 04 sll %g3, 4, %g1 4000a74c: 82 20 40 02 sub %g1, %g2, %g1 4000a750: 82 06 00 01 add %i0, %g1, %g1 4000a754: 82 00 60 04 add %g1, 4, %g1 4000a758: 80 a2 00 01 cmp %o0, %g1 4000a75c: 12 80 00 50 bne 4000a89c <_Thread_queue_Dequeue_priority+0x174> 4000a760: 88 01 20 0c add %g4, 0xc, %g4 Chain_Node *previous_node; _ISR_Disable( level ); for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; index++ ) { 4000a764: 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 ; 4000a768: 80 a0 e0 04 cmp %g3, 4 4000a76c: 32 bf ff f6 bne,a 4000a744 <_Thread_queue_Dequeue_priority+0x1c> 4000a770: d0 01 00 18 ld [ %g4 + %i0 ], %o0 the_thread_queue->Queues.Priority[ index ].first; goto dequeue; } } switch ( the_thread_queue->sync_state ) { 4000a774: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4000a778: 80 a0 60 02 cmp %g1, 2 4000a77c: 08 80 00 23 bleu 4000a808 <_Thread_queue_Dequeue_priority+0xe0> 4000a780: 80 a0 60 01 cmp %g1, 1 4000a784: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000a788: 02 80 00 29 be 4000a82c <_Thread_queue_Dequeue_priority+0x104> <== NOT EXECUTED 4000a78c: b0 10 20 00 clr %i0 <== NOT EXECUTED return _Thread_Executing; } dequeue: the_thread->Wait.queue = NULL; new_first_node = the_thread->Wait.Block2n.first; 4000a790: 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 ) ) { 4000a794: 82 06 20 3c add %i0, 0x3c, %g1 _ISR_Enable( level ); return _Thread_Executing; } dequeue: the_thread->Wait.queue = NULL; 4000a798: 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 ) ) { 4000a79c: 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; 4000a7a0: c4 06 00 00 ld [ %i0 ], %g2 previous_node = the_thread->Object.Node.previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 4000a7a4: 02 80 00 27 be 4000a840 <_Thread_queue_Dequeue_priority+0x118> 4000a7a8: c2 06 20 04 ld [ %i0 + 4 ], %g1 last_node = the_thread->Wait.Block2n.last; 4000a7ac: d8 06 20 40 ld [ %i0 + 0x40 ], %o4 new_second_node = new_first_node->next; 4000a7b0: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 4000a7b4: 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; 4000a7b8: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 4000a7bc: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 4000a7c0: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 4000a7c4: c4 06 20 38 ld [ %i0 + 0x38 ], %g2 4000a7c8: c2 06 20 40 ld [ %i0 + 0x40 ], %g1 4000a7cc: 80 a0 80 01 cmp %g2, %g1 4000a7d0: 12 80 00 2d bne 4000a884 <_Thread_queue_Dequeue_priority+0x15c> 4000a7d4: 82 00 e0 38 add %g3, 0x38, %g1 } else { previous_node->next = next_node; next_node->previous = previous_node; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000a7d8: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000a7dc: 80 a0 60 02 cmp %g1, 2 4000a7e0: 02 80 00 1e be 4000a858 <_Thread_queue_Dequeue_priority+0x130> 4000a7e4: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 4000a7e8: 7f ff dd fd call 40001fdc 4000a7ec: 90 10 00 0d mov %o5, %o0 4000a7f0: 90 10 00 18 mov %i0, %o0 4000a7f4: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000a7f8: 7f ff fe 06 call 4000a010 <_Thread_Clear_state> 4000a7fc: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 4000a800: 81 c7 e0 08 ret 4000a804: 81 e8 00 00 restore the_thread_queue->Queues.Priority[ index ].first; goto dequeue; } } switch ( the_thread_queue->sync_state ) { 4000a808: 0a 80 00 09 bcs 4000a82c <_Thread_queue_Dequeue_priority+0x104> 4000a80c: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); return NULL; case THREAD_QUEUE_NOTHING_HAPPENED: case THREAD_QUEUE_TIMEOUT: the_thread_queue->sync_state = THREAD_QUEUE_SATISFIED; 4000a810: c2 26 20 30 st %g1, [ %i0 + 0x30 ] <== NOT EXECUTED _ISR_Enable( level ); 4000a814: 7f ff dd f2 call 40001fdc <== NOT EXECUTED 4000a818: 90 10 00 0d mov %o5, %o0 <== NOT EXECUTED return _Thread_Executing; 4000a81c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000a820: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001ae6c <_Thread_Executing> <== NOT EXECUTED 4000a824: 81 c7 e0 08 ret <== NOT EXECUTED 4000a828: 81 e8 00 00 restore <== NOT EXECUTED } switch ( the_thread_queue->sync_state ) { case THREAD_QUEUE_SYNCHRONIZED: case THREAD_QUEUE_SATISFIED: _ISR_Enable( level ); 4000a82c: b0 10 20 00 clr %i0 4000a830: 7f ff dd eb call 40001fdc 4000a834: 90 10 00 0d mov %o5, %o0 4000a838: 81 c7 e0 08 ret 4000a83c: 81 e8 00 00 restore last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); } } else { previous_node->next = next_node; next_node->previous = previous_node; 4000a840: 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; 4000a844: c4 20 40 00 st %g2, [ %g1 ] next_node->previous = previous_node; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000a848: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000a84c: 80 a0 60 02 cmp %g1, 2 4000a850: 12 bf ff e6 bne 4000a7e8 <_Thread_queue_Dequeue_priority+0xc0> 4000a854: 82 10 20 03 mov 3, %g1 RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 4000a858: c2 26 20 50 st %g1, [ %i0 + 0x50 ] _ISR_Enable( level ); _Thread_Unblock( the_thread ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000a85c: 7f ff dd e0 call 40001fdc 4000a860: 90 10 00 0d mov %o5, %o0 (void) _Watchdog_Remove( &the_thread->Timer ); 4000a864: 40 00 04 31 call 4000b928 <_Watchdog_Remove> 4000a868: 90 06 20 48 add %i0, 0x48, %o0 4000a86c: 90 10 00 18 mov %i0, %o0 4000a870: 13 04 00 ff sethi %hi(0x1003fc00), %o1 4000a874: 7f ff fd e7 call 4000a010 <_Thread_Clear_state> 4000a878: 92 12 63 f8 or %o1, 0x3f8, %o1 ! 1003fff8 #if defined(RTEMS_MULTIPROCESSING) if ( !_Objects_Is_local_id( the_thread->Object.id ) ) _Thread_MP_Free_proxy( the_thread ); #endif return( the_thread ); } 4000a87c: 81 c7 e0 08 ret 4000a880: 81 e8 00 00 restore new_first_node->next = next_node; new_first_node->previous = previous_node; if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { /* > two threads on 2-n */ new_second_node->previous = 4000a884: c2 21 20 04 st %g1, [ %g4 + 4 ] _Chain_Head( &new_first_thread->Wait.Block2n ); new_first_thread->Wait.Block2n.first = new_second_node; 4000a888: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] new_first_thread->Wait.Block2n.last = last_node; 4000a88c: d8 20 e0 40 st %o4, [ %g3 + 0x40 ] last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 4000a890: 82 00 e0 3c add %g3, 0x3c, %g1 4000a894: 10 bf ff d1 b 4000a7d8 <_Thread_queue_Dequeue_priority+0xb0> 4000a898: c2 23 00 00 st %g1, [ %o4 ] _ISR_Disable( level ); for( index=0 ; index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ; index++ ) { if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) ) { the_thread = (Thread_Control *) 4000a89c: 10 bf ff bd b 4000a790 <_Thread_queue_Dequeue_priority+0x68> 4000a8a0: b0 10 00 08 mov %o0, %i0 4000e2e8 <_Thread_queue_Enqueue_fifo>: void _Thread_queue_Enqueue_fifo ( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000e2e8: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Thread_queue_States sync_state; _ISR_Disable( level ); 4000e2ec: 7f ff cf 38 call 40001fcc 4000e2f0: 01 00 00 00 nop sync_state = the_thread_queue->sync_state; 4000e2f4: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; switch ( sync_state ) { 4000e2f8: 80 a0 a0 02 cmp %g2, 2 4000e2fc: 02 80 00 22 be 4000e384 <_Thread_queue_Enqueue_fifo+0x9c> 4000e300: c0 26 20 30 clr [ %i0 + 0x30 ] 4000e304: 80 a0 a0 03 cmp %g2, 3 4000e308: 02 80 00 11 be 4000e34c <_Thread_queue_Enqueue_fifo+0x64> 4000e30c: 80 a0 a0 01 cmp %g2, 1 4000e310: 02 80 00 07 be 4000e32c <_Thread_queue_Enqueue_fifo+0x44> 4000e314: 82 06 20 04 add %i0, 4, %g1 4000e318: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000e31c: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000e320: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000e324: 7f ff ef 3b call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000e328: 81 e8 00 00 restore <== NOT EXECUTED Chain_Node *the_node ) { Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); 4000e32c: c2 26 40 00 st %g1, [ %i1 ] old_last_node = the_chain->last; 4000e330: c4 06 20 08 ld [ %i0 + 8 ], %g2 the_chain->last = the_node; 4000e334: f2 26 20 08 st %i1, [ %i0 + 8 ] case THREAD_QUEUE_NOTHING_HAPPENED: _Chain_Append_unprotected( &the_thread_queue->Queues.Fifo, &the_thread->Object.Node ); the_thread->Wait.queue = the_thread_queue; 4000e338: f0 26 60 44 st %i0, [ %i1 + 0x44 ] old_last_node->next = the_node; the_node->previous = old_last_node; 4000e33c: c4 26 60 04 st %g2, [ %i1 + 4 ] Chain_Node *old_last_node; the_node->next = _Chain_Tail(the_chain); old_last_node = the_chain->last; the_chain->last = the_node; old_last_node->next = the_node; 4000e340: f2 20 80 00 st %i1, [ %g2 ] _ISR_Enable( level ); 4000e344: 7f ff cf 26 call 40001fdc 4000e348: 91 e8 00 08 restore %g0, %o0, %o0 the_thread->Wait.queue = NULL; _ISR_Enable( level ); break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 4000e34c: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== NOT EXECUTED 4000e350: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000e354: 12 80 00 16 bne 4000e3ac <_Thread_queue_Enqueue_fifo+0xc4> <== NOT EXECUTED 4000e358: 01 00 00 00 nop <== NOT EXECUTED 4000e35c: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 4000e360: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 4000e364: 7f ff cf 1e call 40001fdc <== NOT EXECUTED 4000e368: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000e36c: 7f ff f5 6f call 4000b928 <_Watchdog_Remove> <== NOT EXECUTED 4000e370: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 4000e374: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000e378: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000e37c: 7f ff ef 25 call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000e380: 81 e8 00 00 restore <== NOT EXECUTED the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); return; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000e384: c4 06 60 44 ld [ %i1 + 0x44 ], %g2 <== NOT EXECUTED the_thread->Wait.queue = NULL; 4000e388: 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; 4000e38c: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 <== NOT EXECUTED 4000e390: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 4000e394: 7f ff cf 12 call 40001fdc <== NOT EXECUTED 4000e398: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000e39c: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000e3a0: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000e3a4: 7f ff ef 1b call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000e3a8: 81 e8 00 00 restore <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; _ISR_Enable( level ); (void) _Watchdog_Remove( &the_thread->Timer ); } else _ISR_Enable( level ); 4000e3ac: 7f ff cf 0c call 40001fdc <== NOT EXECUTED 4000e3b0: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000e3b4: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000e3b8: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000e3bc: 7f ff ef 15 call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000e3c0: 81 e8 00 00 restore <== NOT EXECUTED 4000e3c4: 01 00 00 00 nop 4000a928 <_Thread_queue_Enqueue_priority>: void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000a928: 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; 4000a92c: 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); 4000a930: 82 06 60 3c add %i1, 0x3c, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000a934: 84 06 60 38 add %i1, 0x38, %g2 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000a938: c2 26 60 38 st %g1, [ %i1 + 0x38 ] the_chain->permanent_null = NULL; 4000a93c: c0 26 60 3c clr [ %i1 + 0x3c ] the_chain->last = _Chain_Head(the_chain); 4000a940: c4 26 60 40 st %g2, [ %i1 + 0x40 ] void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000a944: aa 10 00 18 mov %i0, %l5 priority = the_thread->current_priority; header_index = _Thread_queue_Header_number( priority ); header = &the_thread_queue->Queues.Priority[ header_index ]; block_state = the_thread_queue->state; if ( _Thread_queue_Is_reverse_search( priority ) ) 4000a948: 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); 4000a94c: 83 34 a0 06 srl %l2, 6, %g1 4000a950: 12 80 00 40 bne 4000aa50 <_Thread_queue_Enqueue_priority+0x128> 4000a954: e8 06 20 38 ld [ %i0 + 0x38 ], %l4 4000a958: 85 28 60 04 sll %g1, 4, %g2 4000a95c: 83 28 60 02 sll %g1, 2, %g1 goto restart_reverse_search; restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->first; 4000a960: ac 20 80 01 sub %g2, %g1, %l6 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000a964: 82 06 00 16 add %i0, %l6, %g1 4000a968: a6 00 60 04 add %g1, 4, %l3 if ( _Thread_queue_Is_reverse_search( priority ) ) goto restart_reverse_search; restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); 4000a96c: 7f ff dd 98 call 40001fcc 4000a970: 01 00 00 00 nop 4000a974: b0 10 00 08 mov %o0, %i0 search_thread = (Thread_Control *) header->first; 4000a978: e0 05 40 16 ld [ %l5 + %l6 ], %l0 while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) { 4000a97c: 80 a4 00 13 cmp %l0, %l3 4000a980: 02 80 00 24 be 4000aa10 <_Thread_queue_Enqueue_priority+0xe8> 4000a984: a2 10 3f ff mov -1, %l1 search_priority = search_thread->current_priority; 4000a988: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority <= search_priority ) 4000a98c: 80 a4 80 11 cmp %l2, %l1 4000a990: 28 80 00 21 bleu,a 4000aa14 <_Thread_queue_Enqueue_priority+0xec> 4000a994: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.next; 4000a998: e0 04 00 00 ld [ %l0 ], %l0 if ( _Chain_Is_tail( header, (Chain_Node *)search_thread ) ) 4000a99c: 80 a4 c0 10 cmp %l3, %l0 4000a9a0: 32 80 00 19 bne,a 4000aa04 <_Thread_queue_Enqueue_priority+0xdc> 4000a9a4: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 } search_thread = (Thread_Control *)search_thread->Object.Node.next; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000a9a8: 10 80 00 1b b 4000aa14 <_Thread_queue_Enqueue_priority+0xec> 4000a9ac: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; if ( priority <= search_priority ) break; #endif _ISR_Flash( level ); 4000a9b0: 7f ff dd 8b call 40001fdc 4000a9b4: 90 10 00 18 mov %i0, %o0 4000a9b8: 7f ff dd 85 call 40001fcc 4000a9bc: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 4000a9c0: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000a9c4: 80 8d 00 01 btst %l4, %g1 4000a9c8: 02 80 00 91 be 4000ac0c <_Thread_queue_Enqueue_priority+0x2e4> 4000a9cc: 01 00 00 00 nop _ISR_Enable( level ); goto restart_forward_search; } search_thread = 4000a9d0: e0 04 00 00 ld [ %l0 ], %l0 restart_forward_search: search_priority = PRIORITY_MINIMUM - 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->first; while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) { 4000a9d4: 80 a4 00 13 cmp %l0, %l3 4000a9d8: 22 80 00 0f be,a 4000aa14 <_Thread_queue_Enqueue_priority+0xec> 4000a9dc: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 search_priority = search_thread->current_priority; 4000a9e0: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority <= search_priority ) 4000a9e4: 80 a4 80 11 cmp %l2, %l1 4000a9e8: 28 80 00 0b bleu,a 4000aa14 <_Thread_queue_Enqueue_priority+0xec> 4000a9ec: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.next; 4000a9f0: e0 04 00 00 ld [ %l0 ], %l0 if ( _Chain_Is_tail( header, (Chain_Node *)search_thread ) ) 4000a9f4: 80 a4 00 13 cmp %l0, %l3 4000a9f8: 22 80 00 07 be,a 4000aa14 <_Thread_queue_Enqueue_priority+0xec> 4000a9fc: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; 4000aa00: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority <= search_priority ) 4000aa04: 80 a4 80 11 cmp %l2, %l1 4000aa08: 18 bf ff ea bgu 4000a9b0 <_Thread_queue_Enqueue_priority+0x88> 4000aa0c: 01 00 00 00 nop } search_thread = (Thread_Control *)search_thread->Object.Node.next; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000aa10: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 4000aa14: 80 a0 60 01 cmp %g1, 1 4000aa18: 02 80 00 63 be 4000aba4 <_Thread_queue_Enqueue_priority+0x27c> 4000aa1c: 80 a4 80 11 cmp %l2, %l1 return; synchronize: sync_state = the_thread_queue->sync_state; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; 4000aa20: c0 25 60 30 clr [ %l5 + 0x30 ] <== NOT EXECUTED switch ( sync_state ) { 4000aa24: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000aa28: 02 80 00 54 be 4000ab78 <_Thread_queue_Enqueue_priority+0x250> <== NOT EXECUTED 4000aa2c: 84 10 00 01 mov %g1, %g2 <== NOT EXECUTED 4000aa30: 80 a0 60 03 cmp %g1, 3 <== NOT EXECUTED 4000aa34: 22 80 00 43 be,a 4000ab40 <_Thread_queue_Enqueue_priority+0x218> <== NOT EXECUTED 4000aa38: c2 06 60 50 ld [ %i1 + 0x50 ], %g1 <== NOT EXECUTED 4000aa3c: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000aa40: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000aa44: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000aa48: 7f ff fd 72 call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000aa4c: 81 e8 00 00 restore <== NOT EXECUTED 4000aa50: 85 28 60 04 sll %g1, 4, %g2 4000aa54: 83 28 60 02 sll %g1, 2, %g1 restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->last; 4000aa58: 82 20 80 01 sub %g2, %g1, %g1 4000aa5c: a6 00 40 18 add %g1, %i0, %l3 return; restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); 4000aa60: 7f ff dd 5b call 40001fcc 4000aa64: 01 00 00 00 nop 4000aa68: b0 10 00 08 mov %o0, %i0 search_thread = (Thread_Control *) header->last; 4000aa6c: e0 04 e0 08 ld [ %l3 + 8 ], %l0 while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) { 4000aa70: 80 a4 00 13 cmp %l0, %l3 4000aa74: 02 80 00 24 be 4000ab04 <_Thread_queue_Enqueue_priority+0x1dc> 4000aa78: a2 10 21 00 mov 0x100, %l1 search_priority = search_thread->current_priority; 4000aa7c: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 if ( priority >= search_priority ) 4000aa80: 80 a4 80 11 cmp %l2, %l1 4000aa84: 3a 80 00 21 bcc,a 4000ab08 <_Thread_queue_Enqueue_priority+0x1e0> 4000aa88: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.previous; 4000aa8c: e0 04 20 04 ld [ %l0 + 4 ], %l0 if ( _Chain_Is_head( header, (Chain_Node *)search_thread ) ) 4000aa90: 80 a4 c0 10 cmp %l3, %l0 4000aa94: 32 80 00 19 bne,a 4000aaf8 <_Thread_queue_Enqueue_priority+0x1d0> 4000aa98: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 } search_thread = (Thread_Control *) search_thread->Object.Node.previous; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000aa9c: 10 80 00 1b b 4000ab08 <_Thread_queue_Enqueue_priority+0x1e0> 4000aaa0: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 break; search_priority = search_thread->current_priority; if ( priority >= search_priority ) break; #endif _ISR_Flash( level ); 4000aaa4: 7f ff dd 4e call 40001fdc 4000aaa8: 90 10 00 18 mov %i0, %o0 4000aaac: 7f ff dd 48 call 40001fcc 4000aab0: 01 00 00 00 nop if ( !_States_Are_set( search_thread->current_state, block_state) ) { 4000aab4: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000aab8: 80 8d 00 01 btst %l4, %g1 4000aabc: 02 80 00 57 be 4000ac18 <_Thread_queue_Enqueue_priority+0x2f0> 4000aac0: 01 00 00 00 nop _ISR_Enable( level ); goto restart_reverse_search; } search_thread = (Thread_Control *) 4000aac4: e0 04 20 04 ld [ %l0 + 4 ], %l0 restart_reverse_search: search_priority = PRIORITY_MAXIMUM + 1; _ISR_Disable( level ); search_thread = (Thread_Control *) header->last; while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) { 4000aac8: 80 a4 00 13 cmp %l0, %l3 4000aacc: 22 80 00 0f be,a 4000ab08 <_Thread_queue_Enqueue_priority+0x1e0> 4000aad0: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 search_priority = search_thread->current_priority; 4000aad4: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 <== NOT EXECUTED if ( priority >= search_priority ) 4000aad8: 80 a4 80 11 cmp %l2, %l1 <== NOT EXECUTED 4000aadc: 3a 80 00 0b bcc,a 4000ab08 <_Thread_queue_Enqueue_priority+0x1e0> <== NOT EXECUTED 4000aae0: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 <== NOT EXECUTED break; #if ( CPU_UNROLL_ENQUEUE_PRIORITY == TRUE ) search_thread = (Thread_Control *) search_thread->Object.Node.previous; 4000aae4: e0 04 20 04 ld [ %l0 + 4 ], %l0 <== NOT EXECUTED if ( _Chain_Is_head( header, (Chain_Node *)search_thread ) ) 4000aae8: 80 a4 00 13 cmp %l0, %l3 <== NOT EXECUTED 4000aaec: 22 80 00 07 be,a 4000ab08 <_Thread_queue_Enqueue_priority+0x1e0> <== NOT EXECUTED 4000aaf0: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 <== NOT EXECUTED break; search_priority = search_thread->current_priority; 4000aaf4: e2 04 20 14 ld [ %l0 + 0x14 ], %l1 <== NOT EXECUTED if ( priority >= search_priority ) 4000aaf8: 80 a4 80 11 cmp %l2, %l1 4000aafc: 0a bf ff ea bcs 4000aaa4 <_Thread_queue_Enqueue_priority+0x17c> 4000ab00: 01 00 00 00 nop } search_thread = (Thread_Control *) search_thread->Object.Node.previous; } if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) 4000ab04: c2 05 60 30 ld [ %l5 + 0x30 ], %g1 4000ab08: 80 a0 60 01 cmp %g1, 1 4000ab0c: 12 bf ff c6 bne 4000aa24 <_Thread_queue_Enqueue_priority+0xfc> 4000ab10: c0 25 60 30 clr [ %l5 + 0x30 ] goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 4000ab14: 80 a4 80 11 cmp %l2, %l1 4000ab18: 22 80 00 35 be,a 4000abec <_Thread_queue_Enqueue_priority+0x2c4> 4000ab1c: 82 04 20 3c add %l0, 0x3c, %g1 goto equal_priority; search_node = (Chain_Node *) search_thread; next_node = search_node->next; 4000ab20: c2 04 00 00 ld [ %l0 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = next_node; the_node->previous = search_node; 4000ab24: 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; 4000ab28: 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; 4000ab2c: ea 26 60 44 st %l5, [ %i1 + 0x44 ] next_node = search_node->next; the_node = (Chain_Node *) the_thread; the_node->next = next_node; the_node->previous = search_node; search_node->next = the_node; 4000ab30: f2 24 00 00 st %i1, [ %l0 ] next_node->previous = the_node; 4000ab34: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 4000ab38: 7f ff dd 29 call 40001fdc 4000ab3c: 81 e8 00 00 restore the_thread->Wait.queue = NULL; _ISR_Enable( level ); break; case THREAD_QUEUE_SATISFIED: if ( _Watchdog_Is_active( &the_thread->Timer ) ) { 4000ab40: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000ab44: 12 80 00 22 bne 4000abcc <_Thread_queue_Enqueue_priority+0x2a4> <== NOT EXECUTED 4000ab48: 01 00 00 00 nop <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_REMOVE_IT; 4000ab4c: c4 26 60 50 st %g2, [ %i1 + 0x50 ] <== NOT EXECUTED _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; 4000ab50: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED _ISR_Enable( level ); 4000ab54: 7f ff dd 22 call 40001fdc <== NOT EXECUTED 4000ab58: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000ab5c: 40 00 03 73 call 4000b928 <_Watchdog_Remove> <== NOT EXECUTED 4000ab60: 90 06 60 48 add %i1, 0x48, %o0 <== NOT EXECUTED 4000ab64: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000ab68: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000ab6c: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000ab70: 7f ff fd 28 call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000ab74: 81 e8 00 00 restore <== NOT EXECUTED * This should never happen. All of this was dealt with above. */ break; case THREAD_QUEUE_TIMEOUT: the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000ab78: c4 06 60 44 ld [ %i1 + 0x44 ], %g2 <== NOT EXECUTED the_thread->Wait.queue = NULL; 4000ab7c: 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; 4000ab80: c2 00 a0 3c ld [ %g2 + 0x3c ], %g1 <== NOT EXECUTED 4000ab84: c2 26 60 34 st %g1, [ %i1 + 0x34 ] <== NOT EXECUTED the_thread->Wait.queue = NULL; _ISR_Enable( level ); 4000ab88: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ab8c: 7f ff dd 14 call 40001fdc <== NOT EXECUTED 4000ab90: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000ab94: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000ab98: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000ab9c: 7f ff fd 1d call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000aba0: 81 e8 00 00 restore <== NOT EXECUTED if ( the_thread_queue->sync_state != THREAD_QUEUE_NOTHING_HAPPENED ) goto synchronize; the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; if ( priority == search_priority ) 4000aba4: 02 80 00 11 be 4000abe8 <_Thread_queue_Enqueue_priority+0x2c0> 4000aba8: c0 25 60 30 clr [ %l5 + 0x30 ] goto equal_priority; search_node = (Chain_Node *) search_thread; previous_node = search_node->previous; 4000abac: c2 04 20 04 ld [ %l0 + 4 ], %g1 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 4000abb0: e0 26 40 00 st %l0, [ %i1 ] the_node->previous = previous_node; 4000abb4: 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; 4000abb8: ea 26 60 44 st %l5, [ %i1 + 0x44 ] previous_node = search_node->previous; the_node = (Chain_Node *) the_thread; the_node->next = search_node; the_node->previous = previous_node; previous_node->next = the_node; 4000abbc: f2 20 40 00 st %i1, [ %g1 ] search_node->previous = the_node; 4000abc0: f2 24 20 04 st %i1, [ %l0 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 4000abc4: 7f ff dd 06 call 40001fdc 4000abc8: 81 e8 00 00 restore _Watchdog_Deactivate( &the_thread->Timer ); the_thread->Wait.queue = NULL; _ISR_Enable( level ); (void) _Watchdog_Remove( &the_thread->Timer ); } else _ISR_Enable( level ); 4000abcc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000abd0: 7f ff dd 03 call 40001fdc <== NOT EXECUTED 4000abd4: b0 10 00 19 mov %i1, %i0 <== NOT EXECUTED 4000abd8: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED 4000abdc: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 <== NOT EXECUTED 4000abe0: 7f ff fd 0c call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000abe4: 81 e8 00 00 restore <== NOT EXECUTED 4000abe8: 82 04 20 3c add %l0, 0x3c, %g1 _ISR_Enable( level ); return; equal_priority: /* add at end of priority group */ search_node = _Chain_Tail( &search_thread->Wait.Block2n ); previous_node = search_node->previous; 4000abec: c4 00 60 04 ld [ %g1 + 4 ], %g2 the_node = (Chain_Node *) the_thread; the_node->next = search_node; 4000abf0: c2 26 40 00 st %g1, [ %i1 ] the_node->previous = previous_node; 4000abf4: 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; 4000abf8: ea 26 60 44 st %l5, [ %i1 + 0x44 ] previous_node = search_node->previous; the_node = (Chain_Node *) the_thread; the_node->next = search_node; the_node->previous = previous_node; previous_node->next = the_node; 4000abfc: f2 20 80 00 st %i1, [ %g2 ] search_node->previous = the_node; 4000ac00: f2 20 60 04 st %i1, [ %g1 + 4 ] the_thread->Wait.queue = the_thread_queue; _ISR_Enable( level ); 4000ac04: 7f ff dc f6 call 40001fdc 4000ac08: 81 e8 00 00 restore if ( priority <= search_priority ) break; #endif _ISR_Flash( level ); if ( !_States_Are_set( search_thread->current_state, block_state) ) { _ISR_Enable( level ); 4000ac0c: 7f ff dc f4 call 40001fdc <== NOT EXECUTED 4000ac10: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ac14: 30 bf ff 56 b,a 4000a96c <_Thread_queue_Enqueue_priority+0x44> <== NOT EXECUTED if ( priority >= search_priority ) break; #endif _ISR_Flash( level ); if ( !_States_Are_set( search_thread->current_state, block_state) ) { _ISR_Enable( level ); 4000ac18: 7f ff dc f1 call 40001fdc <== NOT EXECUTED 4000ac1c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ac20: 30 bf ff 90 b,a 4000aa60 <_Thread_queue_Enqueue_priority+0x138> <== NOT EXECUTED 4000a8a4 <_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 ) { 4000a8a4: 9d e3 bf 98 save %sp, -104, %sp Thread_Control *the_thread; the_thread = _Thread_Executing; 4000a8a8: 03 10 00 6b sethi %hi(0x4001ac00), %g1 else #endif /* * Set the blocking state for this thread queue in the thread. */ _Thread_Set_state( the_thread, the_thread_queue->state ); 4000a8ac: d2 06 20 38 ld [ %i0 + 0x38 ], %o1 Thread_queue_Timeout_callout handler ) { Thread_Control *the_thread; the_thread = _Thread_Executing; 4000a8b0: e0 00 62 6c ld [ %g1 + 0x26c ], %l0 void _Thread_queue_Enqueue_with_handler( Thread_queue_Control *the_thread_queue, Watchdog_Interval timeout, Thread_queue_Timeout_callout handler ) { 4000a8b4: 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 ); 4000a8b8: 40 00 01 9b call 4000af24 <_Thread_Set_state> 4000a8bc: 90 10 00 10 mov %l0, %o0 /* * If the thread wants to timeout, then schedule its timer. */ if ( timeout ) { 4000a8c0: 80 a6 60 00 cmp %i1, 0 4000a8c4: 32 80 00 0e bne,a 4000a8fc <_Thread_queue_Enqueue_with_handler+0x58> 4000a8c8: c2 04 20 08 ld [ %l0 + 8 ], %g1 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 4000a8cc: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 4000a8d0: 80 a0 60 00 cmp %g1, 0 4000a8d4: 12 80 00 04 bne 4000a8e4 <_Thread_queue_Enqueue_with_handler+0x40> 4000a8d8: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Enqueue_fifo( the_thread_queue, the_thread ); 4000a8dc: 40 00 0e 83 call 4000e2e8 <_Thread_queue_Enqueue_fifo> 4000a8e0: 93 e8 00 10 restore %g0, %l0, %o1 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 4000a8e4: 02 80 00 04 be 4000a8f4 <_Thread_queue_Enqueue_with_handler+0x50> 4000a8e8: 01 00 00 00 nop 4000a8ec: 81 c7 e0 08 ret <== NOT EXECUTED 4000a8f0: 81 e8 00 00 restore <== NOT EXECUTED case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Enqueue_fifo( the_thread_queue, the_thread ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Enqueue_priority( the_thread_queue, the_thread ); 4000a8f4: 40 00 00 0d call 4000a928 <_Thread_queue_Enqueue_priority> 4000a8f8: 93 e8 00 10 restore %g0, %l0, %o1 Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 4000a8fc: f4 24 20 64 st %i2, [ %l0 + 0x64 ] the_watchdog->id = id; 4000a900: c2 24 20 68 st %g1, [ %l0 + 0x68 ] Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4000a904: f2 24 20 54 st %i1, [ %l0 + 0x54 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 4000a908: c0 24 20 50 clr [ %l0 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 4000a90c: c0 24 20 6c clr [ %l0 + 0x6c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 4000a910: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000a914: 92 04 20 48 add %l0, 0x48, %o1 4000a918: 40 00 03 9a call 4000b780 <_Watchdog_Insert> 4000a91c: 90 12 22 8c or %o0, 0x28c, %o0 } /* * Now enqueue the thread per the discipline for this thread queue. */ switch( the_thread_queue->discipline ) { 4000a920: 10 bf ff ec b 4000a8d0 <_Thread_queue_Enqueue_with_handler+0x2c> 4000a924: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 4000e3c8 <_Thread_queue_Extract>: void _Thread_queue_Extract( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { switch ( the_thread_queue->discipline ) { 4000e3c8: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4000e3cc: 80 a0 60 00 cmp %g1, 0 4000e3d0: 12 80 00 05 bne 4000e3e4 <_Thread_queue_Extract+0x1c> 4000e3d4: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Extract_fifo( the_thread_queue, the_thread ); 4000e3d8: 82 13 c0 00 mov %o7, %g1 4000e3dc: 40 00 03 6a call 4000f184 <_Thread_queue_Extract_fifo> 4000e3e0: 9e 10 40 00 mov %g1, %o7 void _Thread_queue_Extract( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { switch ( the_thread_queue->discipline ) { 4000e3e4: 02 80 00 04 be 4000e3f4 <_Thread_queue_Extract+0x2c> 4000e3e8: 94 10 20 00 clr %o2 4000e3ec: 81 c3 e0 08 retl <== NOT EXECUTED 4000e3f0: 01 00 00 00 nop <== NOT EXECUTED case THREAD_QUEUE_DISCIPLINE_FIFO: _Thread_queue_Extract_fifo( the_thread_queue, the_thread ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: _Thread_queue_Extract_priority( the_thread_queue, the_thread ); 4000e3f4: 82 13 c0 00 mov %o7, %g1 4000e3f8: 40 00 00 03 call 4000e404 <_Thread_queue_Extract_priority_helper> 4000e3fc: 9e 10 40 00 mov %g1, %o7 4000e400: 01 00 00 00 nop 4000f184 <_Thread_queue_Extract_fifo>: void _Thread_queue_Extract_fifo( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000f184: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; _ISR_Disable( level ); 4000f188: 7f ff cb 91 call 40001fcc 4000f18c: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000f190: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000f194: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000f198: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000f19c: 80 88 80 01 btst %g2, %g1 4000f1a0: 02 80 00 19 be 4000f204 <_Thread_queue_Extract_fifo+0x80> 4000f1a4: 01 00 00 00 nop ) { Chain_Node *next; Chain_Node *previous; next = the_node->next; 4000f1a8: c2 06 40 00 ld [ %i1 ], %g1 previous = the_node->previous; 4000f1ac: 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 ) ) { 4000f1b0: c6 06 60 50 ld [ %i1 + 0x50 ], %g3 next->previous = previous; previous->next = next; 4000f1b4: c2 20 80 00 st %g1, [ %g2 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000f1b8: c4 20 60 04 st %g2, [ %g1 + 4 ] 4000f1bc: 80 a0 e0 02 cmp %g3, 2 4000f1c0: 12 80 00 0c bne 4000f1f0 <_Thread_queue_Extract_fifo+0x6c> 4000f1c4: c0 26 60 44 clr [ %i1 + 0x44 ] 4000f1c8: 82 10 20 03 mov 3, %g1 4000f1cc: c2 26 60 50 st %g1, [ %i1 + 0x50 ] _ISR_Enable( level ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000f1d0: 7f ff cb 83 call 40001fdc 4000f1d4: 01 00 00 00 nop (void) _Watchdog_Remove( &the_thread->Timer ); 4000f1d8: 7f ff f1 d4 call 4000b928 <_Watchdog_Remove> 4000f1dc: 90 06 60 48 add %i1, 0x48, %o0 RTEMS_INLINE_ROUTINE void _Thread_Unblock ( Thread_Control *the_thread ) { _Thread_Clear_state( the_thread, STATES_BLOCKED ); 4000f1e0: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000f1e4: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000f1e8: 7f ff eb 8a call 4000a010 <_Thread_Clear_state> 4000f1ec: 81 e8 00 00 restore _Chain_Extract_unprotected( &the_thread->Object.Node ); the_thread->Wait.queue = NULL; if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { _ISR_Enable( level ); 4000f1f0: 7f ff cb 7b call 40001fdc 4000f1f4: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000f1f8: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000f1fc: 7f ff eb 85 call 4000a010 <_Thread_Clear_state> 4000f200: 81 e8 00 00 restore ISR_Level level; _ISR_Disable( level ); if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { _ISR_Enable( level ); 4000f204: 7f ff cb 76 call 40001fdc <== NOT EXECUTED 4000f208: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000f20c: 01 00 00 00 nop 4000e404 <_Thread_queue_Extract_priority_helper>: void _Thread_queue_Extract_priority_helper( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread, boolean requeuing ) { 4000e404: 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 ); 4000e408: 7f ff ce f1 call 40001fcc 4000e40c: b0 10 00 19 mov %i1, %i0 if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000e410: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000e414: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000e418: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000e41c: 80 88 80 01 btst %g2, %g1 4000e420: 02 80 00 29 be 4000e4c4 <_Thread_queue_Extract_priority_helper+0xc0> 4000e424: 82 06 60 3c add %i1, 0x3c, %g1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 4000e428: c6 06 60 38 ld [ %i1 + 0x38 ], %g3 /* * The thread was actually waiting on a thread queue so let's remove it. */ next_node = the_node->next; 4000e42c: c4 06 40 00 ld [ %i1 ], %g2 previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { 4000e430: 80 a0 c0 01 cmp %g3, %g1 4000e434: 12 80 00 10 bne 4000e474 <_Thread_queue_Extract_priority_helper+0x70> 4000e438: c2 06 60 04 ld [ %i1 + 4 ], %g1 new_first_thread->Wait.Block2n.last = last_node; last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); } } else { previous_node->next = next_node; next_node->previous = previous_node; 4000e43c: 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; 4000e440: c4 20 40 00 st %g2, [ %g1 ] /* * If we are not supposed to touch timers or the thread's state, return. */ if ( requeuing ) { 4000e444: 80 a6 a0 00 cmp %i2, 0 4000e448: 12 80 00 1d bne 4000e4bc <_Thread_queue_Extract_priority_helper+0xb8> 4000e44c: 01 00 00 00 nop _ISR_Enable( level ); return; } if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { 4000e450: c2 06 20 50 ld [ %i0 + 0x50 ], %g1 4000e454: 80 a0 60 02 cmp %g1, 2 4000e458: 02 80 00 1d be 4000e4cc <_Thread_queue_Extract_priority_helper+0xc8> 4000e45c: 82 10 20 03 mov 3, %g1 _ISR_Enable( level ); 4000e460: 7f ff ce df call 40001fdc 4000e464: 33 04 00 ff sethi %hi(0x1003fc00), %i1 4000e468: b2 16 63 f8 or %i1, 0x3f8, %i1 ! 1003fff8 4000e46c: 7f ff ee e9 call 4000a010 <_Thread_Clear_state> 4000e470: 81 e8 00 00 restore previous_node = the_node->previous; if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) { new_first_node = the_thread->Wait.Block2n.first; new_first_thread = (Thread_Control *) new_first_node; last_node = the_thread->Wait.Block2n.last; 4000e474: da 06 60 40 ld [ %i1 + 0x40 ], %o5 new_second_node = new_first_node->next; 4000e478: c8 00 c0 00 ld [ %g3 ], %g4 previous_node->next = new_first_node; next_node->previous = new_first_node; 4000e47c: 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; 4000e480: c6 20 40 00 st %g3, [ %g1 ] next_node->previous = new_first_node; new_first_node->next = next_node; 4000e484: c4 20 c0 00 st %g2, [ %g3 ] new_first_node->previous = previous_node; 4000e488: c2 20 e0 04 st %g1, [ %g3 + 4 ] if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) { 4000e48c: c4 06 60 38 ld [ %i1 + 0x38 ], %g2 4000e490: c2 06 60 40 ld [ %i1 + 0x40 ], %g1 4000e494: 80 a0 80 01 cmp %g2, %g1 4000e498: 02 bf ff ec be 4000e448 <_Thread_queue_Extract_priority_helper+0x44> 4000e49c: 80 a6 a0 00 cmp %i2, 0 /* > two threads on 2-n */ new_second_node->previous = 4000e4a0: 82 00 e0 38 add %g3, 0x38, %g1 <== NOT EXECUTED 4000e4a4: 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; 4000e4a8: c8 20 e0 38 st %g4, [ %g3 + 0x38 ] <== NOT EXECUTED new_first_thread->Wait.Block2n.last = last_node; 4000e4ac: da 20 e0 40 st %o5, [ %g3 + 0x40 ] <== NOT EXECUTED last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n ); 4000e4b0: 82 00 e0 3c add %g3, 0x3c, %g1 <== NOT EXECUTED /* * If we are not supposed to touch timers or the thread's state, return. */ if ( requeuing ) { 4000e4b4: 02 bf ff e7 be 4000e450 <_Thread_queue_Extract_priority_helper+0x4c> <== NOT EXECUTED 4000e4b8: c2 23 40 00 st %g1, [ %o5 ] <== NOT EXECUTED _ISR_Enable( level ); 4000e4bc: 7f ff ce c8 call 40001fdc 4000e4c0: 91 e8 00 08 restore %g0, %o0, %o0 Chain_Node *last_node; the_node = (Chain_Node *) the_thread; _ISR_Disable( level ); if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { _ISR_Enable( level ); 4000e4c4: 7f ff ce c6 call 40001fdc <== NOT EXECUTED 4000e4c8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000e4cc: c2 26 20 50 st %g1, [ %i0 + 0x50 ] <== NOT EXECUTED if ( !_Watchdog_Is_active( &the_thread->Timer ) ) { _ISR_Enable( level ); } else { _Watchdog_Deactivate( &the_thread->Timer ); _ISR_Enable( level ); 4000e4d0: 7f ff ce c3 call 40001fdc <== NOT EXECUTED 4000e4d4: 33 04 00 ff sethi %hi(0x1003fc00), %i1 <== NOT EXECUTED (void) _Watchdog_Remove( &the_thread->Timer ); 4000e4d8: 7f ff f5 14 call 4000b928 <_Watchdog_Remove> <== NOT EXECUTED 4000e4dc: 90 06 20 48 add %i0, 0x48, %o0 <== NOT EXECUTED 4000e4e0: b2 16 63 f8 or %i1, 0x3f8, %i1 <== NOT EXECUTED 4000e4e4: 7f ff ee cb call 4000a010 <_Thread_Clear_state> <== NOT EXECUTED 4000e4e8: 81 e8 00 00 restore <== NOT EXECUTED 4000e4ec: 01 00 00 00 nop 4000ac24 <_Thread_queue_Extract_with_proxy>: */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 4000ac24: 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; 4000ac28: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 */ boolean _Thread_queue_Extract_with_proxy( Thread_Control *the_thread ) { 4000ac2c: 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 ) ) { 4000ac30: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000ac34: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000ac38: 80 88 80 01 btst %g2, %g1 4000ac3c: 02 80 00 1e be 4000acb4 <_Thread_queue_Extract_with_proxy+0x90> 4000ac40: b0 10 20 00 clr %i0 if ( _States_Is_waiting_for_rpc_reply( state ) && 4000ac44: 03 00 00 08 sethi %hi(0x2000), %g1 4000ac48: 80 88 80 01 btst %g2, %g1 4000ac4c: 22 80 00 17 be,a 4000aca8 <_Thread_queue_Extract_with_proxy+0x84> 4000ac50: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 4000ac54: 03 00 00 e7 sethi %hi(0x39c00), %g1 <== NOT EXECUTED 4000ac58: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 39ee0 <== NOT EXECUTED 4000ac5c: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 4000ac60: 22 80 00 12 be,a 4000aca8 <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 4000ac64: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED _States_Is_locally_blocked( state ) ) { the_information = _Objects_Get_information( the_thread->Wait.id ); 4000ac68: c6 04 20 20 ld [ %l0 + 0x20 ], %g3 <== NOT EXECUTED proxy_extract_callout = 4000ac6c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000ac70: 85 30 e0 16 srl %g3, 0x16, %g2 <== NOT EXECUTED 4000ac74: 82 10 60 f0 or %g1, 0xf0, %g1 <== NOT EXECUTED 4000ac78: 84 08 a0 1c and %g2, 0x1c, %g2 <== NOT EXECUTED 4000ac7c: c8 00 40 02 ld [ %g1 + %g2 ], %g4 <== NOT EXECUTED 4000ac80: 87 30 e0 1b srl %g3, 0x1b, %g3 <== NOT EXECUTED 4000ac84: 87 28 e0 02 sll %g3, 2, %g3 <== NOT EXECUTED 4000ac88: c2 01 00 03 ld [ %g4 + %g3 ], %g1 <== NOT EXECUTED 4000ac8c: c2 00 60 48 ld [ %g1 + 0x48 ], %g1 <== NOT EXECUTED (Objects_Thread_queue_Extract_callout) the_information->extract; if ( proxy_extract_callout ) 4000ac90: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000ac94: 22 80 00 05 be,a 4000aca8 <_Thread_queue_Extract_with_proxy+0x84> <== NOT EXECUTED 4000ac98: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED (*proxy_extract_callout)( the_thread ); 4000ac9c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000aca0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 4000aca4: d0 04 20 44 ld [ %l0 + 0x44 ], %o0 <== NOT EXECUTED 4000aca8: 92 10 00 10 mov %l0, %o1 4000acac: 40 00 0d c7 call 4000e3c8 <_Thread_queue_Extract> 4000acb0: b0 10 20 01 mov 1, %i0 return TRUE; } return FALSE; } 4000acb4: 81 c7 e0 08 ret 4000acb8: 81 e8 00 00 restore 4001c2f4 <_Thread_queue_First>: Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4001c2f4: c2 02 20 34 ld [ %o0 + 0x34 ], %g1 4001c2f8: 80 a0 60 00 cmp %g1, 0 4001c2fc: 12 80 00 05 bne 4001c310 <_Thread_queue_First+0x1c> 4001c300: 80 a0 60 01 cmp %g1, 1 case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_First_fifo( the_thread_queue ); 4001c304: 82 13 c0 00 mov %o7, %g1 4001c308: 40 00 03 1b call 4001cf74 <_Thread_queue_First_fifo> 4001c30c: 9e 10 40 00 mov %g1, %o7 Thread_queue_Control *the_thread_queue ) { Thread_Control *the_thread; switch ( the_thread_queue->discipline ) { 4001c310: 02 80 00 04 be 4001c320 <_Thread_queue_First+0x2c> 4001c314: 01 00 00 00 nop the_thread = NULL; break; } return the_thread; } 4001c318: 81 c3 e0 08 retl <== NOT EXECUTED 4001c31c: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED switch ( the_thread_queue->discipline ) { case THREAD_QUEUE_DISCIPLINE_FIFO: the_thread = _Thread_queue_First_fifo( the_thread_queue ); break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: the_thread = _Thread_queue_First_priority( the_thread_queue ); 4001c320: 82 13 c0 00 mov %o7, %g1 4001c324: 40 00 00 03 call 4001c330 <_Thread_queue_First_priority> 4001c328: 9e 10 40 00 mov %g1, %o7 4001c32c: 01 00 00 00 nop 4000acdc <_Thread_queue_Initialize>: uint32_t timeout_status ) { uint32_t index; the_thread_queue->state = state; 4000acdc: d4 22 20 38 st %o2, [ %o0 + 0x38 ] the_thread_queue->discipline = the_discipline; the_thread_queue->timeout_status = timeout_status; 4000ace0: d6 22 20 3c st %o3, [ %o0 + 0x3c ] the_thread_queue->sync_state = THREAD_QUEUE_SYNCHRONIZED; 4000ace4: c0 22 20 30 clr [ %o0 + 0x30 ] switch ( the_discipline ) { 4000ace8: 80 a2 60 00 cmp %o1, 0 4000acec: 12 80 00 07 bne 4000ad08 <_Thread_queue_Initialize+0x2c> 4000acf0: d2 22 20 34 st %o1, [ %o0 + 0x34 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000acf4: 82 02 20 04 add %o0, 4, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000acf8: d0 22 20 08 st %o0, [ %o0 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4000acfc: c0 22 20 04 clr [ %o0 + 4 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000ad00: 81 c3 e0 08 retl 4000ad04: c2 22 00 00 st %g1, [ %o0 ] 4000ad08: 80 a2 60 01 cmp %o1, 1 4000ad0c: 02 80 00 04 be 4000ad1c <_Thread_queue_Initialize+0x40> 4000ad10: 82 02 20 04 add %o0, 4, %g1 4000ad14: 81 c3 e0 08 retl <== NOT EXECUTED 4000ad18: 01 00 00 00 nop <== NOT EXECUTED 4000ad1c: 84 02 20 10 add %o0, 0x10, %g2 4000ad20: c2 22 00 00 st %g1, [ %o0 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000ad24: 82 02 20 0c add %o0, 0xc, %g1 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000ad28: c4 22 20 0c st %g2, [ %o0 + 0xc ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000ad2c: c2 22 20 14 st %g1, [ %o0 + 0x14 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000ad30: 84 02 20 1c add %o0, 0x1c, %g2 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000ad34: 82 02 20 18 add %o0, 0x18, %g1 */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000ad38: c4 22 20 18 st %g2, [ %o0 + 0x18 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000ad3c: c2 22 20 20 st %g1, [ %o0 + 0x20 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000ad40: 84 02 20 28 add %o0, 0x28, %g2 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000ad44: 82 02 20 24 add %o0, 0x24, %g1 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4000ad48: c0 22 20 04 clr [ %o0 + 4 ] the_chain->last = _Chain_Head(the_chain); 4000ad4c: d0 22 20 08 st %o0, [ %o0 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 4000ad50: c0 22 20 10 clr [ %o0 + 0x10 ] 4000ad54: c0 22 20 1c clr [ %o0 + 0x1c ] 4000ad58: c0 22 20 28 clr [ %o0 + 0x28 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 4000ad5c: c4 22 20 24 st %g2, [ %o0 + 0x24 ] the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 4000ad60: 81 c3 e0 08 retl 4000ad64: c2 22 20 2c st %g1, [ %o0 + 0x2c ] 4000ad68 <_Thread_queue_Requeue>: void _Thread_queue_Requeue( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread ) { 4000ad68: 9d e3 bf 98 save %sp, -104, %sp /* just in case the thread really wasn't blocked here */ if ( !the_thread_queue ) { 4000ad6c: 80 a6 20 00 cmp %i0, 0 4000ad70: 02 80 00 06 be 4000ad88 <_Thread_queue_Requeue+0x20> 4000ad74: 01 00 00 00 nop return; } switch ( the_thread_queue->discipline ) { 4000ad78: e0 06 20 34 ld [ %i0 + 0x34 ], %l0 4000ad7c: 80 a4 20 01 cmp %l0, 1 4000ad80: 02 80 00 04 be 4000ad90 <_Thread_queue_Requeue+0x28> 4000ad84: 01 00 00 00 nop 4000ad88: 81 c7 e0 08 ret <== NOT EXECUTED 4000ad8c: 81 e8 00 00 restore <== NOT EXECUTED break; case THREAD_QUEUE_DISCIPLINE_PRIORITY: { Thread_queue_Control *tq = the_thread_queue; ISR_Level level; _ISR_Disable( level ); 4000ad90: 7f ff dc 8f call 40001fcc 4000ad94: 01 00 00 00 nop 4000ad98: a2 10 00 08 mov %o0, %l1 if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { 4000ad9c: c4 06 60 10 ld [ %i1 + 0x10 ], %g2 4000ada0: 03 00 00 ef sethi %hi(0x3bc00), %g1 4000ada4: 82 10 62 e0 or %g1, 0x2e0, %g1 ! 3bee0 4000ada8: 80 88 80 01 btst %g2, %g1 4000adac: 12 80 00 04 bne 4000adbc <_Thread_queue_Requeue+0x54> 4000adb0: 94 10 20 01 mov 1, %o2 _Thread_queue_Enter_critical_section( tq ); _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE ); _Thread_queue_Enqueue_priority( tq, the_thread ); } _ISR_Enable( level ); 4000adb4: 7f ff dc 8a call 40001fdc <== NOT EXECUTED 4000adb8: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED ISR_Level level; _ISR_Disable( level ); if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { _Thread_queue_Enter_critical_section( tq ); _Thread_queue_Extract_priority_helper( tq, the_thread, TRUE ); 4000adbc: 90 10 00 18 mov %i0, %o0 4000adc0: 92 10 00 19 mov %i1, %o1 4000adc4: 40 00 0d 90 call 4000e404 <_Thread_queue_Extract_priority_helper> 4000adc8: e0 26 20 30 st %l0, [ %i0 + 0x30 ] _Thread_queue_Enqueue_priority( tq, the_thread ); 4000adcc: 90 10 00 18 mov %i0, %o0 4000add0: 7f ff fe d6 call 4000a928 <_Thread_queue_Enqueue_priority> 4000add4: 92 10 00 19 mov %i1, %o1 } _ISR_Enable( level ); 4000add8: 7f ff dc 81 call 40001fdc 4000addc: 91 e8 00 11 restore %g0, %l1, %o0 4000ade0: 01 00 00 00 nop 4000ade4 <_Thread_queue_Timeout>: void _Thread_queue_Timeout( Objects_Id id, void *ignored ) { 4000ade4: 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 ) ) { 4000ade8: 92 96 20 00 orcc %i0, 0, %o1 4000adec: 12 80 00 1a bne 4000ae54 <_Thread_queue_Timeout+0x70> 4000adf0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000adf4: 31 10 00 6b sethi %hi(0x4001ac00), %i0 <== NOT EXECUTED 4000adf8: c2 06 21 90 ld [ %i0 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000adfc: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000ae00: c2 26 21 90 st %g1, [ %i0 + 0x190 ] <== 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; 4000ae04: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000ae08: d2 00 62 6c ld [ %g1 + 0x26c ], %o1 ! 4001ae6c <_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; 4000ae0c: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED */ static inline void _Thread_queue_Process_timeout( Thread_Control *the_thread ) { Thread_queue_Control *the_thread_queue = the_thread->Wait.queue; 4000ae10: d0 02 60 44 ld [ %o1 + 0x44 ], %o0 * If it is not satisfied, then it is "nothing happened" and * this is the "timeout" transition. After a request is satisfied, * a timeout is not allowed to occur. */ if ( the_thread_queue->sync_state != THREAD_QUEUE_SYNCHRONIZED && 4000ae14: c6 02 20 30 ld [ %o0 + 0x30 ], %g3 4000ae18: 80 a0 e0 00 cmp %g3, 0 4000ae1c: 02 80 00 06 be 4000ae34 <_Thread_queue_Timeout+0x50> 4000ae20: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000ae24: c4 00 62 6c ld [ %g1 + 0x26c ], %g2 ! 4001ae6c <_Thread_Executing> <== NOT EXECUTED 4000ae28: 80 a2 40 02 cmp %o1, %g2 <== NOT EXECUTED 4000ae2c: 02 80 00 20 be 4000aeac <_Thread_queue_Timeout+0xc8> <== NOT EXECUTED 4000ae30: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED _Thread_Is_executing( the_thread ) ) { if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED ) the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT; } else { the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status; 4000ae34: c2 02 20 3c ld [ %o0 + 0x3c ], %g1 _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); 4000ae38: 40 00 0d 64 call 4000e3c8 <_Thread_queue_Extract> 4000ae3c: 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; 4000ae40: c2 06 21 90 ld [ %i0 + 0x190 ], %g1 4000ae44: 82 00 7f ff add %g1, -1, %g1 4000ae48: c2 26 21 90 st %g1, [ %i0 + 0x190 ] 4000ae4c: 81 c7 e0 08 ret 4000ae50: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000ae54: 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 ) { 4000ae58: 80 a0 a0 04 cmp %g2, 4 4000ae5c: 18 bf ff fc bgu 4000ae4c <_Thread_queue_Timeout+0x68> 4000ae60: 83 32 60 1b srl %o1, 0x1b, %g1 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000ae64: 80 a0 60 01 cmp %g1, 1 4000ae68: 12 bf ff f9 bne 4000ae4c <_Thread_queue_Timeout+0x68> 4000ae6c: 83 28 a0 02 sll %g2, 2, %g1 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000ae70: 05 10 00 6b sethi %hi(0x4001ac00), %g2 4000ae74: 84 10 a0 f0 or %g2, 0xf0, %g2 ! 4001acf0 <_Objects_Information_table> 4000ae78: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000ae7c: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 4000ae80: 80 a2 20 00 cmp %o0, 0 4000ae84: 02 bf ff f2 be 4000ae4c <_Thread_queue_Timeout+0x68> 4000ae88: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000ae8c: 7f ff f7 ee call 40008e44 <_Objects_Get> 4000ae90: 94 07 bf f4 add %fp, -12, %o2 Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000ae94: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000ae98: 80 a0 60 00 cmp %g1, 0 4000ae9c: 12 bf ff ec bne 4000ae4c <_Thread_queue_Timeout+0x68> 4000aea0: 92 10 00 08 mov %o0, %o1 4000aea4: 10 bf ff db b 4000ae10 <_Thread_queue_Timeout+0x2c> 4000aea8: 31 10 00 6b sethi %hi(0x4001ac00), %i0 * a timeout is not allowed to occur. */ if ( the_thread_queue->sync_state != THREAD_QUEUE_SYNCHRONIZED && _Thread_Is_executing( the_thread ) ) { if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED ) 4000aeac: 02 bf ff e5 be 4000ae40 <_Thread_queue_Timeout+0x5c> <== NOT EXECUTED 4000aeb0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT; 4000aeb4: 10 bf ff e3 b 4000ae40 <_Thread_queue_Timeout+0x5c> <== NOT EXECUTED 4000aeb8: c2 22 20 30 st %g1, [ %o0 + 0x30 ] <== NOT EXECUTED 40014544 <_Timer_Server_body>: */ Thread _Timer_Server_body( uint32_t ignored ) { 40014544: 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; 40014548: 03 10 00 d2 sethi %hi(0x40034800), %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001454c: 21 10 00 d1 sethi %hi(0x40034400), %l0 40014550: c6 00 60 e4 ld [ %g1 + 0xe4 ], %g3 _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 40014554: 05 10 00 d2 sethi %hi(0x40034800), %g2 40014558: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 4001455c: c8 00 a0 18 ld [ %g2 + 0x18 ], %g4 /* * Initialize the "last time" markers to indicate the timer that * the server was initiated. */ _Timer_Server_ticks_last_time = _Watchdog_Ticks_since_boot; 40014560: 05 10 00 d1 sethi %hi(0x40034400), %g2 40014564: 82 00 60 01 inc %g1 40014568: c6 20 a2 6c st %g3, [ %g2 + 0x26c ] 4001456c: c2 24 23 60 st %g1, [ %l0 + 0x360 ] _Timer_Server_seconds_last_time = _TOD_Seconds_since_epoch; 40014570: 05 10 00 d1 sethi %hi(0x40034400), %g2 40014574: c8 20 a2 68 st %g4, [ %g2 + 0x268 ] ! 40034668 <_Timer_Server_seconds_last_time> RTEMS_COMPILER_MEMORY_BARRIER(); 40014578: 03 10 00 d1 sethi %hi(0x40034400), %g1 4001457c: 05 10 00 d2 sethi %hi(0x40034800), %g2 40014580: ba 10 62 60 or %g1, 0x260, %i5 40014584: 03 10 00 d1 sethi %hi(0x40034400), %g1 40014588: 39 10 00 d2 sethi %hi(0x40034800), %i4 /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 4001458c: b4 10 a0 5c or %g2, 0x5c, %i2 40014590: ae 10 62 74 or %g1, 0x274, %l7 40014594: 05 10 00 d1 sethi %hi(0x40034400), %g2 40014598: 03 10 00 d2 sethi %hi(0x40034800), %g1 4001459c: a6 10 a2 7c or %g2, 0x27c, %l3 400145a0: b6 10 60 50 or %g1, 0x50, %i3 400145a4: 2d 10 00 d1 sethi %hi(0x40034400), %l6 400145a8: 2b 10 00 d1 sethi %hi(0x40034400), %l5 400145ac: a4 10 00 1c mov %i4, %l2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400145b0: a2 10 00 10 mov %l0, %l1 400145b4: 10 80 00 18 b 40014614 <_Timer_Server_body+0xd0> 400145b8: a8 10 00 13 mov %l3, %l4 _Timer_Server_reset_ticks_timer(); _Timer_Server_reset_seconds_timer(); 400145bc: 80 a0 40 17 cmp %g1, %l7 400145c0: 32 80 00 27 bne,a 4001465c <_Timer_Server_body+0x118> 400145c4: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 400145c8: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 400145cc: 82 00 7f ff add %g1, -1, %g1 400145d0: c2 24 23 60 st %g1, [ %l0 + 0x360 ] 400145d4: c4 04 23 60 ld [ %l0 + 0x360 ], %g2 400145d8: 80 a0 a0 00 cmp %g2, 0 400145dc: 02 80 00 2b be 40014688 <_Timer_Server_body+0x144> 400145e0: 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(); 400145e4: d0 04 a3 18 ld [ %l2 + 0x318 ], %o0 <== NOT EXECUTED 400145e8: 40 00 14 19 call 4001964c <_Watchdog_Remove> 400145ec: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_stop_seconds_timer(); 400145f0: 40 00 14 17 call 4001964c <_Watchdog_Remove> 400145f4: 90 10 00 14 mov %l4, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400145f8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 400145fc: 82 00 60 01 inc %g1 40014600: c2 24 63 60 st %g1, [ %l1 + 0x360 ] * 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(); 40014604: 7f ff ff bf call 40014500 <_Timer_Server_process_ticks_chain> 40014608: 01 00 00 00 nop _Timer_Server_process_seconds_chain(); 4001460c: 7f ff ff a2 call 40014494 <_Timer_Server_process_seconds_chain> 40014610: 01 00 00 00 nop /* * Block until there is something to do. */ _Thread_Set_state( _Timer_Server, STATES_DELAYING ); 40014614: d0 07 23 18 ld [ %i4 + 0x318 ], %o0 40014618: 40 00 10 b8 call 400188f8 <_Thread_Set_state> 4001461c: 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)); 40014620: c2 05 a2 5c ld [ %l6 + 0x25c ], %g1 _Timer_Server_reset_ticks_timer(); 40014624: 80 a0 40 1d cmp %g1, %i5 40014628: 22 bf ff e5 be,a 400145bc <_Timer_Server_body+0x78> 4001462c: c2 05 62 70 ld [ %l5 + 0x270 ], %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40014630: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 40014634: d2 04 a3 18 ld [ %l2 + 0x318 ], %o1 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40014638: 90 10 00 1a mov %i2, %o0 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4001463c: c2 22 60 54 st %g1, [ %o1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40014640: 40 00 13 99 call 400194a4 <_Watchdog_Insert> 40014644: 92 02 60 48 add %o1, 0x48, %o1 40014648: c2 05 62 70 ld [ %l5 + 0x270 ], %g1 _Timer_Server_reset_seconds_timer(); 4001464c: 80 a0 40 17 cmp %g1, %l7 40014650: 02 bf ff de be 400145c8 <_Timer_Server_body+0x84> 40014654: 01 00 00 00 nop Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40014658: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 4001465c: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40014660: c2 24 e0 0c st %g1, [ %l3 + 0xc ] <== NOT EXECUTED _Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog ); 40014664: 40 00 13 90 call 400194a4 <_Watchdog_Insert> <== NOT EXECUTED 40014668: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001466c: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 <== NOT EXECUTED 40014670: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40014674: c2 24 23 60 st %g1, [ %l0 + 0x360 ] <== NOT EXECUTED 40014678: c4 04 23 60 ld [ %l0 + 0x360 ], %g2 <== NOT EXECUTED 4001467c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40014680: 32 bf ff da bne,a 400145e8 <_Timer_Server_body+0xa4> <== NOT EXECUTED 40014684: d0 04 a3 18 ld [ %l2 + 0x318 ], %o0 <== NOT EXECUTED _Thread_Dispatch(); 40014688: 40 00 0d 29 call 40017b2c <_Thread_Dispatch> 4001468c: 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(); 40014690: 10 bf ff d6 b 400145e8 <_Timer_Server_body+0xa4> 40014694: d0 04 a3 18 ld [ %l2 + 0x318 ], %o0 40014500 <_Timer_Server_process_ticks_chain>: void _Timer_Server_process_ticks_chain(void) { Watchdog_Interval snapshot; Watchdog_Interval ticks; snapshot = _Watchdog_Ticks_since_boot; 40014500: 03 10 00 d2 sethi %hi(0x40034800), %g1 if ( snapshot >= _Timer_Server_ticks_last_time ) 40014504: 07 10 00 d1 sethi %hi(0x40034400), %g3 void _Timer_Server_process_ticks_chain(void) { Watchdog_Interval snapshot; Watchdog_Interval ticks; snapshot = _Watchdog_Ticks_since_boot; 40014508: c4 00 60 e4 ld [ %g1 + 0xe4 ], %g2 if ( snapshot >= _Timer_Server_ticks_last_time ) 4001450c: c2 00 e2 6c ld [ %g3 + 0x26c ], %g1 40014510: 80 a0 80 01 cmp %g2, %g1 40014514: 1a 80 00 04 bcc 40014524 <_Timer_Server_process_ticks_chain+0x24> 40014518: 94 20 80 01 sub %g2, %g1, %o2 ticks = snapshot - _Timer_Server_ticks_last_time; else ticks = (0xFFFFFFFF - _Timer_Server_ticks_last_time) + snapshot; 4001451c: 82 38 00 01 xnor %g0, %g1, %g1 <== NOT EXECUTED 40014520: 94 00 40 02 add %g1, %g2, %o2 <== NOT EXECUTED _Timer_Server_ticks_last_time = snapshot; _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 40014524: 11 10 00 d1 sethi %hi(0x40034400), %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; 40014528: c4 20 e2 6c st %g2, [ %g3 + 0x26c ] _Watchdog_Adjust( &_Timer_Ticks_chain, WATCHDOG_FORWARD, ticks ); 4001452c: 90 12 22 5c or %o0, 0x25c, %o0 40014530: 92 10 20 00 clr %o1 40014534: 82 13 c0 00 mov %o7, %g1 40014538: 40 00 13 aa call 400193e0 <_Watchdog_Adjust> 4001453c: 9e 10 40 00 mov %g1, %o7 40014540: 01 00 00 00 nop 4000d27c <_Timespec_Divide>: const struct timespec *lhs, const struct timespec *rhs, uint32_t *ival_percentage, uint32_t *fval_percentage ) { 4000d27c: 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; 4000d280: 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; 4000d284: de 06 20 04 ld [ %i0 + 4 ], %o7 right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND; 4000d288: 96 10 00 01 mov %g1, %o3 4000d28c: 95 38 60 1f sra %g1, 0x1f, %o2 4000d290: 83 30 60 1d srl %g1, 0x1d, %g1 4000d294: 9b 2a e0 03 sll %o3, 3, %o5 4000d298: 99 2a a0 03 sll %o2, 3, %o4 4000d29c: 98 10 40 0c or %g1, %o4, %o4 4000d2a0: 83 33 60 1b srl %o5, 0x1b, %g1 4000d2a4: 85 2b 20 05 sll %o4, 5, %g2 4000d2a8: 87 2b 60 05 sll %o5, 5, %g3 4000d2ac: 84 10 40 02 or %g1, %g2, %g2 4000d2b0: 86 a0 c0 0d subcc %g3, %o5, %g3 4000d2b4: 83 30 e0 1a srl %g3, 0x1a, %g1 4000d2b8: 84 60 80 0c subx %g2, %o4, %g2 4000d2bc: 9b 28 e0 06 sll %g3, 6, %o5 4000d2c0: 99 28 a0 06 sll %g2, 6, %o4 4000d2c4: 9a a3 40 03 subcc %o5, %g3, %o5 4000d2c8: 98 10 40 0c or %g1, %o4, %o4 4000d2cc: 98 63 00 02 subx %o4, %g2, %o4 4000d2d0: 9a 83 40 0b addcc %o5, %o3, %o5 4000d2d4: 83 33 60 1e srl %o5, 0x1e, %g1 4000d2d8: 98 43 00 0a addx %o4, %o2, %o4 4000d2dc: 87 2b 60 02 sll %o5, 2, %g3 4000d2e0: 85 2b 20 02 sll %o4, 2, %g2 4000d2e4: 9a 83 40 03 addcc %o5, %g3, %o5 4000d2e8: 84 10 40 02 or %g1, %g2, %g2 4000d2ec: 83 33 60 1e srl %o5, 0x1e, %g1 4000d2f0: 98 43 00 02 addx %o4, %g2, %o4 4000d2f4: 87 2b 60 02 sll %o5, 2, %g3 4000d2f8: 85 2b 20 02 sll %o4, 2, %g2 4000d2fc: 9a 83 40 03 addcc %o5, %g3, %o5 4000d300: 84 10 40 02 or %g1, %g2, %g2 4000d304: 83 33 60 1e srl %o5, 0x1e, %g1 4000d308: 98 43 00 02 addx %o4, %g2, %o4 4000d30c: 85 2b 20 02 sll %o4, 2, %g2 4000d310: 84 10 40 02 or %g1, %g2, %g2 right += rhs->tv_nsec; 4000d314: 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; 4000d318: 87 2b 60 02 sll %o5, 2, %g3 4000d31c: 9a 83 40 03 addcc %o5, %g3, %o5 right += rhs->tv_nsec; 4000d320: 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; 4000d324: 98 43 00 02 addx %o4, %g2, %o4 4000d328: 89 33 60 17 srl %o5, 0x17, %g4 4000d32c: 85 2b 20 09 sll %o4, 9, %g2 4000d330: 87 2b 60 09 sll %o5, 9, %g3 4000d334: 84 11 00 02 or %g4, %g2, %g2 right += rhs->tv_nsec; 4000d338: 96 80 c0 01 addcc %g3, %g1, %o3 4000d33c: 94 40 80 0a addx %g2, %o2, %o2 if ( right == 0 ) { 4000d340: 80 92 80 0b orcc %o2, %o3, %g0 4000d344: 12 80 00 06 bne 4000d35c <_Timespec_Divide+0xe0> 4000d348: f0 06 00 00 ld [ %i0 ], %i0 *ival_percentage = 0; 4000d34c: c0 26 80 00 clr [ %i2 ] <== NOT EXECUTED *fval_percentage = 0; 4000d350: c0 26 c0 00 clr [ %i3 ] <== NOT EXECUTED 4000d354: 81 c7 e0 08 ret <== NOT EXECUTED 4000d358: 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; 4000d35c: 83 36 20 1d srl %i0, 0x1d, %g1 4000d360: 9b 2e 20 03 sll %i0, 3, %o5 4000d364: 91 3e 20 1f sra %i0, 0x1f, %o0 4000d368: 99 2a 20 03 sll %o0, 3, %o4 4000d36c: 98 10 40 0c or %g1, %o4, %o4 4000d370: 83 33 60 1b srl %o5, 0x1b, %g1 4000d374: 85 2b 20 05 sll %o4, 5, %g2 4000d378: 87 2b 60 05 sll %o5, 5, %g3 4000d37c: 84 10 40 02 or %g1, %g2, %g2 4000d380: 86 a0 c0 0d subcc %g3, %o5, %g3 4000d384: 83 30 e0 1a srl %g3, 0x1a, %g1 4000d388: 84 60 80 0c subx %g2, %o4, %g2 4000d38c: 9b 28 e0 06 sll %g3, 6, %o5 4000d390: 99 28 a0 06 sll %g2, 6, %o4 4000d394: 9a a3 40 03 subcc %o5, %g3, %o5 4000d398: 98 10 40 0c or %g1, %o4, %o4 4000d39c: 98 63 00 02 subx %o4, %g2, %o4 4000d3a0: 9a 83 40 18 addcc %o5, %i0, %o5 4000d3a4: 83 33 60 1e srl %o5, 0x1e, %g1 4000d3a8: 98 43 00 08 addx %o4, %o0, %o4 4000d3ac: 87 2b 60 02 sll %o5, 2, %g3 4000d3b0: 85 2b 20 02 sll %o4, 2, %g2 4000d3b4: 9a 83 40 03 addcc %o5, %g3, %o5 4000d3b8: 84 10 40 02 or %g1, %g2, %g2 4000d3bc: 83 33 60 1e srl %o5, 0x1e, %g1 4000d3c0: 98 43 00 02 addx %o4, %g2, %o4 4000d3c4: 87 2b 60 02 sll %o5, 2, %g3 4000d3c8: 85 2b 20 02 sll %o4, 2, %g2 4000d3cc: 9a 83 40 03 addcc %o5, %g3, %o5 4000d3d0: 84 10 40 02 or %g1, %g2, %g2 4000d3d4: 83 33 60 1e srl %o5, 0x1e, %g1 4000d3d8: 98 43 00 02 addx %o4, %g2, %o4 4000d3dc: 87 2b 60 02 sll %o5, 2, %g3 4000d3e0: 85 2b 20 02 sll %o4, 2, %g2 4000d3e4: 9a 83 40 03 addcc %o5, %g3, %o5 4000d3e8: 84 10 40 02 or %g1, %g2, %g2 4000d3ec: 83 33 60 17 srl %o5, 0x17, %g1 4000d3f0: 98 43 00 02 addx %o4, %g2, %o4 4000d3f4: 93 2b 60 09 sll %o5, 9, %o1 4000d3f8: 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; 4000d3fc: 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; 4000d400: 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; 4000d404: 83 32 60 1e srl %o1, 0x1e, %g1 4000d408: a1 3b e0 1f sra %o7, 0x1f, %l0 4000d40c: 87 2a 60 02 sll %o1, 2, %g3 4000d410: 90 42 00 10 addx %o0, %l0, %o0 4000d414: 85 2a 20 02 sll %o0, 2, %g2 4000d418: 84 10 40 02 or %g1, %g2, %g2 4000d41c: 83 30 e0 1b srl %g3, 0x1b, %g1 4000d420: 99 28 a0 05 sll %g2, 5, %o4 4000d424: 9b 28 e0 05 sll %g3, 5, %o5 4000d428: 98 10 40 0c or %g1, %o4, %o4 4000d42c: 9a a3 40 03 subcc %o5, %g3, %o5 4000d430: 98 63 00 02 subx %o4, %g2, %o4 4000d434: 9a 83 40 09 addcc %o5, %o1, %o5 4000d438: 83 33 60 1e srl %o5, 0x1e, %g1 4000d43c: 98 43 00 08 addx %o4, %o0, %o4 4000d440: 87 2b 60 02 sll %o5, 2, %g3 4000d444: 85 2b 20 02 sll %o4, 2, %g2 4000d448: 9a 83 40 03 addcc %o5, %g3, %o5 4000d44c: 84 10 40 02 or %g1, %g2, %g2 4000d450: 83 33 60 1e srl %o5, 0x1e, %g1 4000d454: 87 2b 60 02 sll %o5, 2, %g3 4000d458: 98 43 00 02 addx %o4, %g2, %o4 4000d45c: 9a 83 40 03 addcc %o5, %g3, %o5 4000d460: 85 2b 20 02 sll %o4, 2, %g2 4000d464: 84 10 40 02 or %g1, %g2, %g2 4000d468: 83 33 60 1b srl %o5, 0x1b, %g1 4000d46c: 98 43 00 02 addx %o4, %g2, %o4 4000d470: 93 2b 60 05 sll %o5, 5, %o1 4000d474: 91 2b 20 05 sll %o4, 5, %o0 4000d478: 40 00 33 56 call 4001a1d0 <__udivdi3> 4000d47c: 90 10 40 08 or %g1, %o0, %o0 *ival_percentage = answer / 1000; 4000d480: 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; 4000d484: a0 10 00 08 mov %o0, %l0 4000d488: a2 10 00 09 mov %o1, %l1 *ival_percentage = answer / 1000; 4000d48c: 96 10 23 e8 mov 0x3e8, %o3 4000d490: 40 00 33 50 call 4001a1d0 <__udivdi3> 4000d494: 90 10 00 10 mov %l0, %o0 *fval_percentage = answer % 1000; 4000d498: 90 10 00 10 mov %l0, %o0 * TODO: Rounding on the last digit of the fval. */ answer = (left * 100000) / right; *ival_percentage = answer / 1000; 4000d49c: d2 26 80 00 st %o1, [ %i2 ] *fval_percentage = answer % 1000; 4000d4a0: 94 10 20 00 clr %o2 4000d4a4: 92 10 00 11 mov %l1, %o1 4000d4a8: 40 00 34 29 call 4001a54c <__umoddi3> 4000d4ac: 96 10 23 e8 mov 0x3e8, %o3 4000d4b0: d2 26 c0 00 st %o1, [ %i3 ] 4000d4b4: 81 c7 e0 08 ret 4000d4b8: 81 e8 00 00 restore 40017f9c <_Timespec_From_ticks>: void _Timespec_From_ticks( uint32_t ticks, struct timespec *time ) { 40017f9c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 40017fa0: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED 40017fa4: d2 00 61 ec ld [ %g1 + 0x1ec ], %o1 ! 4002c5ec <_TOD_Microseconds_per_tick> <== NOT EXECUTED 40017fa8: 40 00 2f c0 call 40023ea8 <.umul> <== NOT EXECUTED 40017fac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 40017fb0: 21 00 03 d0 sethi %hi(0xf4000), %l0 <== NOT EXECUTED struct timespec *time ) { uint32_t usecs; usecs = ticks * _TOD_Microseconds_per_tick; 40017fb4: a2 10 00 08 mov %o0, %l1 <== NOT EXECUTED time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND; 40017fb8: 7f ff a6 0f call 400017f4 <.udiv> <== NOT EXECUTED 40017fbc: 92 14 22 40 or %l0, 0x240, %o1 <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 40017fc0: 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; 40017fc4: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) * 40017fc8: 40 00 2f f2 call 40023f90 <.urem> <== NOT EXECUTED 40017fcc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40017fd0: 85 2a 20 02 sll %o0, 2, %g2 <== NOT EXECUTED 40017fd4: 83 2a 20 07 sll %o0, 7, %g1 <== NOT EXECUTED 40017fd8: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40017fdc: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40017fe0: 83 28 60 03 sll %g1, 3, %g1 <== NOT EXECUTED 40017fe4: c2 26 60 04 st %g1, [ %i1 + 4 ] <== NOT EXECUTED TOD_NANOSECONDS_PER_MICROSECOND; } 40017fe8: 81 c7 e0 08 ret <== NOT EXECUTED 40017fec: 81 e8 00 00 restore <== NOT EXECUTED 40017ff0 <_Timespec_Is_valid>: boolean _Timespec_Is_valid( const struct timespec *time ) { if ( !time ) 40017ff0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40017ff4: 02 80 00 0e be 4001802c <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 40017ff8: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_sec < 0 ) 40017ffc: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40018000: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018004: 06 80 00 0a bl 4001802c <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 40018008: 01 00 00 00 nop <== NOT EXECUTED return FALSE; if ( time->tv_nsec < 0 ) 4001800c: d0 02 20 04 ld [ %o0 + 4 ], %o0 <== NOT EXECUTED 40018010: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018014: 06 80 00 06 bl 4001802c <_Timespec_Is_valid+0x3c> <== NOT EXECUTED 40018018: 03 0e e6 b2 sethi %hi(0x3b9ac800), %g1 <== NOT EXECUTED 4001801c: 82 10 61 ff or %g1, 0x1ff, %g1 ! 3b9ac9ff <== NOT EXECUTED 40018020: 80 a0 40 08 cmp %g1, %o0 <== NOT EXECUTED 40018024: 81 c3 e0 08 retl <== NOT EXECUTED 40018028: 90 60 3f ff subx %g0, -1, %o0 <== NOT EXECUTED if ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) return FALSE; return TRUE; } 4001802c: 81 c3 e0 08 retl <== NOT EXECUTED 40018030: 90 10 20 00 clr %o0 <== NOT EXECUTED 40018034 <_Timespec_To_ticks>: */ uint32_t _Timespec_To_ticks( const struct timespec *time ) { 40018034: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) 40018038: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED 4001803c: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40018040: 02 80 00 15 be 40018094 <_Timespec_To_ticks+0x60> <== NOT EXECUTED 40018044: e4 06 20 04 ld [ %i0 + 4 ], %l2 <== NOT EXECUTED return 0; ticks = time->tv_sec * TOD_TICKS_PER_SECOND; 40018048: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED 4001804c: e2 00 61 ec ld [ %g1 + 0x1ec ], %l1 ! 4002c5ec <_TOD_Microseconds_per_tick> <== NOT EXECUTED 40018050: 11 00 03 d0 sethi %hi(0xf4000), %o0 <== NOT EXECUTED 40018054: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 40018058: 7f ff a5 e7 call 400017f4 <.udiv> <== NOT EXECUTED 4001805c: 90 12 22 40 or %o0, 0x240, %o0 <== NOT EXECUTED 40018060: 40 00 2f 92 call 40023ea8 <.umul> <== NOT EXECUTED 40018064: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED ticks += (time->tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND) / 40018068: 92 10 23 e8 mov 0x3e8, %o1 <== NOT EXECUTED uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) return 0; ticks = time->tv_sec * TOD_TICKS_PER_SECOND; 4001806c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED ticks += (time->tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND) / 40018070: 7f ff a5 e1 call 400017f4 <.udiv> <== NOT EXECUTED 40018074: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40018078: 7f ff a5 df call 400017f4 <.udiv> <== NOT EXECUTED 4001807c: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED _TOD_Microseconds_per_tick; if (ticks) 40018080: b0 82 00 10 addcc %o0, %l0, %i0 <== NOT EXECUTED 40018084: 02 80 00 08 be 400180a4 <_Timespec_To_ticks+0x70> <== NOT EXECUTED 40018088: 01 00 00 00 nop <== NOT EXECUTED return ticks; return 1; } 4001808c: 81 c7 e0 08 ret <== NOT EXECUTED 40018090: 81 e8 00 00 restore <== NOT EXECUTED const struct timespec *time ) { uint32_t ticks; if ( (time->tv_sec == 0) && (time->tv_nsec == 0) ) 40018094: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40018098: 12 bf ff ec bne 40018048 <_Timespec_To_ticks+0x14> <== NOT EXECUTED 4001809c: b0 10 20 00 clr %i0 <== NOT EXECUTED 400180a0: 30 bf ff fb b,a 4001808c <_Timespec_To_ticks+0x58> <== NOT EXECUTED if (ticks) return ticks; return 1; } 400180a4: 81 c7 e0 08 ret <== NOT EXECUTED 400180a8: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 4000e6c4 <_User_extensions_Add_API_set>: */ void _User_extensions_Add_API_set ( User_extensions_Control *the_extension ) { 4000e6c4: 9d e3 bf 98 save %sp, -104, %sp _Chain_Append( &_User_extensions_List, &the_extension->Node ); 4000e6c8: 11 10 00 6c sethi %hi(0x4001b000), %o0 4000e6cc: 92 10 00 18 mov %i0, %o1 4000e6d0: 7f ff e5 dc call 40007e40 <_Chain_Append> 4000e6d4: 90 12 20 14 or %o0, 0x14, %o0 /* * If a switch handler is present, append it to the switch chain. */ if ( the_extension->Callouts.thread_switch != NULL ) { 4000e6d8: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 4000e6dc: 80 a0 60 00 cmp %g1, 0 4000e6e0: 02 80 00 06 be 4000e6f8 <_User_extensions_Add_API_set+0x34> 4000e6e4: b2 06 20 08 add %i0, 8, %i1 the_extension->Switch.thread_switch = the_extension->Callouts.thread_switch; 4000e6e8: c2 26 20 10 st %g1, [ %i0 + 0x10 ] _Chain_Append( 4000e6ec: 31 10 00 6b sethi %hi(0x4001ac00), %i0 4000e6f0: 7f ff e5 d4 call 40007e40 <_Chain_Append> 4000e6f4: 91 ee 21 94 restore %i0, 0x194, %o0 4000e6f8: 81 c7 e0 08 ret <== NOT EXECUTED 4000e6fc: 81 e8 00 00 restore <== NOT EXECUTED 4000b598 <_User_extensions_Fatal>: void _User_extensions_Fatal ( Internal_errors_Source the_source, boolean is_internal, uint32_t the_error ) { 4000b598: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; 4000b59c: 03 10 00 6c sethi %hi(0x4001b000), %g1 4000b5a0: 82 10 60 14 or %g1, 0x14, %g1 ! 4001b014 <_User_extensions_List> 4000b5a4: e0 00 60 08 ld [ %g1 + 8 ], %l0 !_Chain_Is_head( &_User_extensions_List, the_node ) ; 4000b5a8: 80 a4 00 01 cmp %l0, %g1 4000b5ac: 02 80 00 0d be 4000b5e0 <_User_extensions_Fatal+0x48> 4000b5b0: a2 10 00 01 mov %g1, %l1 the_node = the_node->previous ) { the_extension = (User_extensions_Control *) the_node; if ( the_extension->Callouts.fatal != NULL ) 4000b5b4: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 4000b5b8: 80 a0 60 00 cmp %g1, 0 4000b5bc: 02 80 00 05 be 4000b5d0 <_User_extensions_Fatal+0x38> 4000b5c0: 90 10 00 18 mov %i0, %o0 (*the_extension->Callouts.fatal)( the_source, is_internal, the_error ); 4000b5c4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000b5c8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000b5cc: 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 ) { 4000b5d0: 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 ) ; 4000b5d4: 80 a4 00 11 cmp %l0, %l1 4000b5d8: 32 bf ff f8 bne,a 4000b5b8 <_User_extensions_Fatal+0x20> 4000b5dc: c2 04 20 30 ld [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 4000b5e0: 81 c7 e0 08 ret 4000b5e4: 81 e8 00 00 restore 40012840 <_User_extensions_Remove_set>: */ void _User_extensions_Remove_set ( User_extensions_Control *the_extension ) { 40012840: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED _Chain_Extract( &the_extension->Node ); 40012844: 40 00 12 b2 call 4001730c <_Chain_Extract> <== NOT EXECUTED 40012848: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED /* * If a switch handler is present, remove it. */ if ( the_extension->Callouts.thread_switch != NULL ) 4001284c: c2 06 20 24 ld [ %i0 + 0x24 ], %g1 <== NOT EXECUTED 40012850: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40012854: 02 80 00 04 be 40012864 <_User_extensions_Remove_set+0x24> <== NOT EXECUTED 40012858: 01 00 00 00 nop <== NOT EXECUTED _Chain_Extract( &the_extension->Switch.Node ); 4001285c: 40 00 12 ac call 4001730c <_Chain_Extract> <== NOT EXECUTED 40012860: 91 ee 20 08 restore %i0, 8, %o0 <== NOT EXECUTED 40012864: 81 c7 e0 08 ret <== NOT EXECUTED 40012868: 81 e8 00 00 restore <== NOT EXECUTED 4000b5e8 <_User_extensions_Thread_exitted>: */ void _User_extensions_Thread_exitted ( Thread_Control *executing ) { 4000b5e8: 9d e3 bf 98 save %sp, -104, %sp Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; 4000b5ec: 03 10 00 6c sethi %hi(0x4001b000), %g1 4000b5f0: 82 10 60 14 or %g1, 0x14, %g1 ! 4001b014 <_User_extensions_List> 4000b5f4: e0 00 60 08 ld [ %g1 + 8 ], %l0 !_Chain_Is_head( &_User_extensions_List, the_node ) ; 4000b5f8: 80 a4 00 01 cmp %l0, %g1 4000b5fc: 02 80 00 0c be 4000b62c <_User_extensions_Thread_exitted+0x44> 4000b600: a2 10 00 01 mov %g1, %l1 the_node = the_node->previous ) { the_extension = (User_extensions_Control *) the_node; if ( the_extension->Callouts.thread_exitted != NULL ) 4000b604: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 4000b608: 80 a0 60 00 cmp %g1, 0 4000b60c: 02 80 00 04 be 4000b61c <_User_extensions_Thread_exitted+0x34> 4000b610: 90 10 00 18 mov %i0, %o0 (*the_extension->Callouts.thread_exitted)( executing ); 4000b614: 9f c0 40 00 call %g1 4000b618: 01 00 00 00 nop Chain_Node *the_node; User_extensions_Control *the_extension; for ( the_node = _User_extensions_List.last ; !_Chain_Is_head( &_User_extensions_List, the_node ) ; the_node = the_node->previous ) { 4000b61c: 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 ) ; 4000b620: 80 a4 00 11 cmp %l0, %l1 4000b624: 32 bf ff f9 bne,a 4000b608 <_User_extensions_Thread_exitted+0x20> 4000b628: c2 04 20 2c ld [ %l0 + 0x2c ], %g1 <== NOT EXECUTED 4000b62c: 81 c7 e0 08 ret 4000b630: 81 e8 00 00 restore 4000b780 <_Watchdog_Insert>: void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 4000b780: 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; 4000b784: 03 10 00 6b sethi %hi(0x4001ac00), %g1 void _Watchdog_Insert( Chain_Control *header, Watchdog_Control *the_watchdog ) { 4000b788: ac 10 00 18 mov %i0, %l6 Watchdog_Control *after; uint32_t insert_isr_nest_level; Watchdog_Interval delta_interval; insert_isr_nest_level = _ISR_Nest_level; 4000b78c: e6 00 62 54 ld [ %g1 + 0x254 ], %l3 _ISR_Disable( level ); 4000b790: 7f ff da 0f call 40001fcc 4000b794: 01 00 00 00 nop 4000b798: 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 ) { 4000b79c: c2 06 60 08 ld [ %i1 + 8 ], %g1 4000b7a0: 80 a0 60 00 cmp %g1, 0 4000b7a4: 12 80 00 49 bne 4000b8c8 <_Watchdog_Insert+0x148> 4000b7a8: 01 00 00 00 nop _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; 4000b7ac: 2b 10 00 6b sethi %hi(0x4001ac00), %l5 4000b7b0: c2 05 63 10 ld [ %l5 + 0x310 ], %g1 ! 4001af10 <_Watchdog_Sync_count> if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 4000b7b4: 84 10 20 01 mov 1, %g2 _Watchdog_Sync_count++; 4000b7b8: 82 00 60 01 inc %g1 4000b7bc: 29 10 00 6b sethi %hi(0x4001ac00), %l4 if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); return; } the_watchdog->state = WATCHDOG_BEING_INSERTED; 4000b7c0: c4 26 60 08 st %g2, [ %i1 + 8 ] _Watchdog_Sync_count++; 4000b7c4: c2 25 63 10 st %g1, [ %l5 + 0x310 ] if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 4000b7c8: ae 10 00 14 mov %l4, %l7 the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 4000b7cc: 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 ; 4000b7d0: e2 05 80 00 ld [ %l6 ], %l1 ; after = _Watchdog_Next( after ) ) { if ( delta_interval == 0 || !_Watchdog_Next( after ) ) 4000b7d4: 80 a4 a0 00 cmp %l2, 0 4000b7d8: 02 80 00 2b be 4000b884 <_Watchdog_Insert+0x104> 4000b7dc: 03 10 00 6b sethi %hi(0x4001ac00), %g1 RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_Next( Watchdog_Control *the_watchdog ) { return ( (Watchdog_Control *) the_watchdog->Node.next ); 4000b7e0: c2 04 40 00 ld [ %l1 ], %g1 4000b7e4: 80 a0 60 00 cmp %g1, 0 4000b7e8: 02 80 00 27 be 4000b884 <_Watchdog_Insert+0x104> 4000b7ec: 03 10 00 6b sethi %hi(0x4001ac00), %g1 break; if ( delta_interval < after->delta_interval ) { 4000b7f0: e0 04 60 10 ld [ %l1 + 0x10 ], %l0 4000b7f4: 80 a4 80 10 cmp %l2, %l0 4000b7f8: 1a 80 00 13 bcc 4000b844 <_Watchdog_Insert+0xc4> 4000b7fc: 01 00 00 00 nop after->delta_interval -= delta_interval; 4000b800: 10 80 00 1f b 4000b87c <_Watchdog_Insert+0xfc> 4000b804: a0 24 00 12 sub %l0, %l2, %l0 if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { 4000b808: c2 05 22 68 ld [ %l4 + 0x268 ], %g1 4000b80c: 80 a4 c0 01 cmp %l3, %g1 4000b810: 0a 80 00 30 bcs 4000b8d0 <_Watchdog_Insert+0x150> 4000b814: 01 00 00 00 nop */ for ( after = (Watchdog_Control *) ((volatile Chain_Control *)header)->first ; ; after = _Watchdog_Next( after ) ) { if ( delta_interval == 0 || !_Watchdog_Next( after ) ) 4000b818: a4 a4 80 10 subcc %l2, %l0, %l2 4000b81c: 02 80 00 19 be 4000b880 <_Watchdog_Insert+0x100> 4000b820: e2 04 40 00 ld [ %l1 ], %l1 4000b824: c2 04 40 00 ld [ %l1 ], %g1 4000b828: 80 a0 60 00 cmp %g1, 0 4000b82c: 02 80 00 16 be 4000b884 <_Watchdog_Insert+0x104> 4000b830: 03 10 00 6b sethi %hi(0x4001ac00), %g1 break; if ( delta_interval < after->delta_interval ) { 4000b834: e0 04 60 10 ld [ %l1 + 0x10 ], %l0 4000b838: 80 a4 00 12 cmp %l0, %l2 4000b83c: 38 80 00 10 bgu,a 4000b87c <_Watchdog_Insert+0xfc> 4000b840: a0 24 00 12 sub %l0, %l2, %l0 * used around this flash point allowed interrupts to execute * which violated the design assumptions. The critical section * mechanism used here WAS redesigned to address this. */ _ISR_Flash( level ); 4000b844: 7f ff d9 e6 call 40001fdc 4000b848: 90 10 00 18 mov %i0, %o0 4000b84c: 7f ff d9 e0 call 40001fcc 4000b850: 01 00 00 00 nop if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { 4000b854: c2 06 60 08 ld [ %i1 + 8 ], %g1 4000b858: 80 a0 60 01 cmp %g1, 1 4000b85c: 02 bf ff eb be 4000b808 <_Watchdog_Insert+0x88> 4000b860: 01 00 00 00 nop _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); the_watchdog->start_time = _Watchdog_Ticks_since_boot; exit_insert: _Watchdog_Sync_level = insert_isr_nest_level; 4000b864: e6 25 22 68 st %l3, [ %l4 + 0x268 ] <== NOT EXECUTED _Watchdog_Sync_count--; 4000b868: c2 05 63 10 ld [ %l5 + 0x310 ], %g1 <== NOT EXECUTED 4000b86c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000b870: c2 25 63 10 st %g1, [ %l5 + 0x310 ] <== NOT EXECUTED _ISR_Enable( level ); 4000b874: 7f ff d9 da call 40001fdc <== NOT EXECUTED 4000b878: 81 e8 00 00 restore <== NOT EXECUTED if ( delta_interval == 0 || !_Watchdog_Next( after ) ) break; if ( delta_interval < after->delta_interval ) { after->delta_interval -= delta_interval; 4000b87c: e0 24 60 10 st %l0, [ %l1 + 0x10 ] the_watchdog->delta_interval = delta_interval; _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); the_watchdog->start_time = _Watchdog_Ticks_since_boot; 4000b880: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b884: c6 00 63 14 ld [ %g1 + 0x314 ], %g3 ! 4001af14 <_Watchdog_Ticks_since_boot> _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); 4000b888: c4 04 60 04 ld [ %l1 + 4 ], %g2 the_watchdog->start_time = _Watchdog_Ticks_since_boot; 4000b88c: c6 26 60 14 st %g3, [ %i1 + 0x14 ] } } _Watchdog_Activate( the_watchdog ); the_watchdog->delta_interval = delta_interval; 4000b890: e4 26 60 10 st %l2, [ %i1 + 0x10 ] RTEMS_INLINE_ROUTINE void _Watchdog_Activate( Watchdog_Control *the_watchdog ) { the_watchdog->state = WATCHDOG_ACTIVE; 4000b894: 82 10 20 02 mov 2, %g1 ) { Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; 4000b898: c8 00 80 00 ld [ %g2 ], %g4 _Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node ); the_watchdog->start_time = _Watchdog_Ticks_since_boot; exit_insert: _Watchdog_Sync_level = insert_isr_nest_level; 4000b89c: e6 25 22 68 st %l3, [ %l4 + 0x268 ] 4000b8a0: c2 26 60 08 st %g1, [ %i1 + 8 ] _Watchdog_Sync_count--; 4000b8a4: c2 05 63 10 ld [ %l5 + 0x310 ], %g1 after_node->next = the_node; 4000b8a8: f2 20 80 00 st %i1, [ %g2 ] Chain_Node *the_node ) { Chain_Node *before_node; the_node->previous = after_node; 4000b8ac: c4 26 60 04 st %g2, [ %i1 + 4 ] 4000b8b0: 82 00 7f ff add %g1, -1, %g1 before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; before_node->previous = the_node; 4000b8b4: f2 21 20 04 st %i1, [ %g4 + 4 ] Chain_Node *before_node; the_node->previous = after_node; before_node = after_node->next; after_node->next = the_node; the_node->next = before_node; 4000b8b8: c8 26 40 00 st %g4, [ %i1 ] 4000b8bc: c2 25 63 10 st %g1, [ %l5 + 0x310 ] _ISR_Enable( level ); 4000b8c0: 7f ff d9 c7 call 40001fdc 4000b8c4: 81 e8 00 00 restore * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_watchdog->state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); 4000b8c8: 7f ff d9 c5 call 40001fdc <== NOT EXECUTED 4000b8cc: 81 e8 00 00 restore <== NOT EXECUTED if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) { goto exit_insert; } if ( _Watchdog_Sync_level > insert_isr_nest_level ) { _Watchdog_Sync_level = insert_isr_nest_level; 4000b8d0: e6 25 e2 68 st %l3, [ %l7 + 0x268 ] the_watchdog->state = WATCHDOG_BEING_INSERTED; _Watchdog_Sync_count++; restart: delta_interval = the_watchdog->initial; 4000b8d4: 10 bf ff bf b 4000b7d0 <_Watchdog_Insert+0x50> 4000b8d8: e4 06 60 0c ld [ %i1 + 0xc ], %l2 4000b928 <_Watchdog_Remove>: */ Watchdog_States _Watchdog_Remove( Watchdog_Control *the_watchdog ) { 4000b928: 9d e3 bf 98 save %sp, -104, %sp ISR_Level level; Watchdog_States previous_state; Watchdog_Control *next_watchdog; _ISR_Disable( level ); 4000b92c: 7f ff d9 a8 call 40001fcc 4000b930: a0 10 00 18 mov %i0, %l0 previous_state = the_watchdog->state; 4000b934: f0 06 20 08 ld [ %i0 + 8 ], %i0 switch ( previous_state ) { 4000b938: 80 a6 20 01 cmp %i0, 1 4000b93c: 02 80 00 2a be 4000b9e4 <_Watchdog_Remove+0xbc> 4000b940: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b944: 1a 80 00 09 bcc 4000b968 <_Watchdog_Remove+0x40> 4000b948: 80 a6 20 03 cmp %i0, 3 _Watchdog_Sync_level = _ISR_Nest_level; _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000b94c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b950: c4 00 63 14 ld [ %g1 + 0x314 ], %g2 ! 4001af14 <_Watchdog_Ticks_since_boot> 4000b954: c4 24 20 18 st %g2, [ %l0 + 0x18 ] _ISR_Enable( level ); 4000b958: 7f ff d9 a1 call 40001fdc 4000b95c: 01 00 00 00 nop return( previous_state ); } 4000b960: 81 c7 e0 08 ret 4000b964: 81 e8 00 00 restore Watchdog_States previous_state; Watchdog_Control *next_watchdog; _ISR_Disable( level ); previous_state = the_watchdog->state; switch ( previous_state ) { 4000b968: 18 bf ff fa bgu 4000b950 <_Watchdog_Remove+0x28> 4000b96c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_Next( Watchdog_Control *the_watchdog ) { return ( (Watchdog_Control *) the_watchdog->Node.next ); 4000b970: c8 04 00 00 ld [ %l0 ], %g4 break; case WATCHDOG_ACTIVE: case WATCHDOG_REMOVE_IT: the_watchdog->state = WATCHDOG_INACTIVE; 4000b974: c0 24 20 08 clr [ %l0 + 8 ] next_watchdog = _Watchdog_Next( the_watchdog ); if ( _Watchdog_Next(next_watchdog) ) 4000b978: c2 01 00 00 ld [ %g4 ], %g1 4000b97c: 80 a0 60 00 cmp %g1, 0 4000b980: 02 80 00 07 be 4000b99c <_Watchdog_Remove+0x74> 4000b984: 03 10 00 6b sethi %hi(0x4001ac00), %g1 next_watchdog->delta_interval += the_watchdog->delta_interval; 4000b988: c2 01 20 10 ld [ %g4 + 0x10 ], %g1 4000b98c: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 4000b990: 82 00 40 02 add %g1, %g2, %g1 4000b994: c2 21 20 10 st %g1, [ %g4 + 0x10 ] if ( _Watchdog_Sync_count ) 4000b998: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b99c: c4 00 63 10 ld [ %g1 + 0x310 ], %g2 ! 4001af10 <_Watchdog_Sync_count> 4000b9a0: 80 a0 a0 00 cmp %g2, 0 4000b9a4: 22 80 00 07 be,a 4000b9c0 <_Watchdog_Remove+0x98> 4000b9a8: c2 04 20 04 ld [ %l0 + 4 ], %g1 _Watchdog_Sync_level = _ISR_Nest_level; 4000b9ac: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 4000b9b0: c6 00 62 54 ld [ %g1 + 0x254 ], %g3 ! 4001ae54 <_ISR_Nest_level> <== NOT EXECUTED 4000b9b4: 05 10 00 6b sethi %hi(0x4001ac00), %g2 <== NOT EXECUTED 4000b9b8: c6 20 a2 68 st %g3, [ %g2 + 0x268 ] ! 4001ae68 <_Watchdog_Sync_level> <== NOT EXECUTED { Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; 4000b9bc: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED next->previous = previous; previous->next = next; 4000b9c0: c8 20 40 00 st %g4, [ %g1 ] Chain_Node *next; Chain_Node *previous; next = the_node->next; previous = the_node->previous; next->previous = previous; 4000b9c4: c2 21 20 04 st %g1, [ %g4 + 4 ] _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000b9c8: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000b9cc: c4 00 63 14 ld [ %g1 + 0x314 ], %g2 ! 4001af14 <_Watchdog_Ticks_since_boot> 4000b9d0: c4 24 20 18 st %g2, [ %l0 + 0x18 ] _ISR_Enable( level ); 4000b9d4: 7f ff d9 82 call 40001fdc 4000b9d8: 01 00 00 00 nop return( previous_state ); } 4000b9dc: 81 c7 e0 08 ret 4000b9e0: 81 e8 00 00 restore _Watchdog_Sync_level = _ISR_Nest_level; _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000b9e4: c4 00 63 14 ld [ %g1 + 0x314 ], %g2 <== NOT EXECUTED /* * It is not actually on the chain so just change the state and * the Insert operation we interrupted will be aborted. */ the_watchdog->state = WATCHDOG_INACTIVE; 4000b9e8: c0 24 20 08 clr [ %l0 + 8 ] <== NOT EXECUTED _Watchdog_Sync_level = _ISR_Nest_level; _Chain_Extract_unprotected( &the_watchdog->Node ); break; } the_watchdog->stop_time = _Watchdog_Ticks_since_boot; 4000b9ec: c4 24 20 18 st %g2, [ %l0 + 0x18 ] <== NOT EXECUTED _ISR_Enable( level ); 4000b9f0: 7f ff d9 7b call 40001fdc <== NOT EXECUTED 4000b9f4: 01 00 00 00 nop <== NOT EXECUTED return( previous_state ); } 4000b9f8: 81 c7 e0 08 ret <== NOT EXECUTED 4000b9fc: 81 e8 00 00 restore <== NOT EXECUTED 4000baac <_Workspace_Allocate_or_fatal_error>: */ void *_Workspace_Allocate_or_fatal_error( size_t size ) { 4000baac: 9d e3 bf 98 save %sp, -104, %sp RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4000bab0: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000bab4: 92 10 00 18 mov %i0, %o1 4000bab8: 7f ff f2 33 call 40008384 <_Heap_Allocate> 4000babc: 90 12 21 dc or %o0, 0x1dc, %o0 void *memory; memory = _Workspace_Allocate( size ); if ( memory == NULL ) 4000bac0: b0 92 20 00 orcc %o0, 0, %i0 4000bac4: 12 80 00 04 bne 4000bad4 <_Workspace_Allocate_or_fatal_error+0x28> 4000bac8: 92 10 20 01 mov 1, %o1 _Internal_error_Occurred( 4000bacc: 7f ff f3 60 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000bad0: 94 10 20 04 mov 4, %o2 <== NOT EXECUTED TRUE, INTERNAL_ERROR_WORKSPACE_ALLOCATION ); return memory; } 4000bad4: 81 c7 e0 08 ret 4000bad8: 81 e8 00 00 restore 4000badc <_Workspace_Handler_initialization>: void _Workspace_Handler_initialization( void *starting_address, size_t size ) { 4000badc: 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 ) ) 4000bae0: 80 a6 20 00 cmp %i0, 0 4000bae4: 02 80 00 1d be 4000bb58 <_Workspace_Handler_initialization+0x7c> 4000bae8: 80 8e 20 07 btst 7, %i0 4000baec: 12 80 00 1c bne 4000bb5c <_Workspace_Handler_initialization+0x80> 4000baf0: 90 10 20 00 clr %o0 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS ); if ( _CPU_Table.do_zero_of_workspace ) { 4000baf4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000baf8: c4 00 61 b4 ld [ %g1 + 0x1b4 ], %g2 ! 4001adb4 <_CPU_Table+0x10> 4000bafc: 80 a0 a0 00 cmp %g2, 0 4000bb00: 02 80 00 0c be 4000bb30 <_Workspace_Handler_initialization+0x54> 4000bb04: 92 10 00 18 mov %i0, %o1 for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; 4000bb08: 87 36 60 02 srl %i1, 2, %g3 <== NOT EXECUTED 4000bb0c: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4000bb10: 02 80 00 08 be 4000bb30 <_Workspace_Handler_initialization+0x54> <== NOT EXECUTED 4000bb14: 84 10 20 00 clr %g2 <== NOT EXECUTED index++ ) zero_out_array[ index ] = 0; 4000bb18: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED ); if ( _CPU_Table.do_zero_of_workspace ) { for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; index++ ) 4000bb1c: 84 00 a0 01 inc %g2 <== NOT EXECUTED INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS ); if ( _CPU_Table.do_zero_of_workspace ) { for( zero_out_array = (uint32_t *) starting_address, index = 0 ; index < size / sizeof( uint32_t ) ; 4000bb20: 80 a0 80 03 cmp %g2, %g3 <== NOT EXECUTED 4000bb24: 12 bf ff fd bne 4000bb18 <_Workspace_Handler_initialization+0x3c> <== NOT EXECUTED 4000bb28: c0 20 40 18 clr [ %g1 + %i0 ] <== NOT EXECUTED index++ ) zero_out_array[ index ] = 0; } memory_available = _Heap_Initialize( 4000bb2c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000bb30: 94 10 00 19 mov %i1, %o2 4000bb34: 11 10 00 6b sethi %hi(0x4001ac00), %o0 4000bb38: 96 10 20 08 mov 8, %o3 4000bb3c: 7f ff f2 f7 call 40008718 <_Heap_Initialize> 4000bb40: 90 12 21 dc or %o0, 0x1dc, %o0 starting_address, size, CPU_HEAP_ALIGNMENT ); if ( memory_available == 0 ) 4000bb44: 80 a2 20 00 cmp %o0, 0 4000bb48: 02 80 00 0a be 4000bb70 <_Workspace_Handler_initialization+0x94> 4000bb4c: b0 10 20 00 clr %i0 4000bb50: 81 c7 e0 08 ret 4000bb54: 81 e8 00 00 restore uint32_t *zero_out_array; uint32_t index; uint32_t memory_available; if ( !starting_address || !_Addresses_Is_aligned( starting_address ) ) _Internal_error_Occurred( 4000bb58: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000bb5c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 4000bb60: 7f ff f3 3b call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000bb64: 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 ) { 4000bb68: 10 bf ff e4 b 4000baf8 <_Workspace_Handler_initialization+0x1c> <== NOT EXECUTED 4000bb6c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED size, CPU_HEAP_ALIGNMENT ); if ( memory_available == 0 ) _Internal_error_Occurred( 4000bb70: b2 10 20 01 mov 1, %i1 <== NOT EXECUTED 4000bb74: 7f ff f3 36 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 4000bb78: 95 e8 20 03 restore %g0, 3, %o2 <== NOT EXECUTED 4000bb7c: 01 00 00 00 nop 400030b8 <__assert>: #include #include void __assert(const char *file, int line, const char *failedexpr) { 400030b8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED printk("assertion \"%s\" failed: file \"%s\", line %d\n", 400030bc: 11 10 00 64 sethi %hi(0x40019000), %o0 <== NOT EXECUTED 400030c0: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED 400030c4: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 400030c8: 96 10 00 19 mov %i1, %o3 <== NOT EXECUTED 400030cc: 90 12 21 60 or %o0, 0x160, %o0 <== NOT EXECUTED 400030d0: 40 00 04 b6 call 400043a8 <== NOT EXECUTED 400030d4: b0 10 20 00 clr %i0 <== NOT EXECUTED failedexpr, file, line); rtems_fatal_error_occurred(0); 400030d8: 40 00 12 a8 call 40007b78 <== NOT EXECUTED 400030dc: 81 e8 00 00 restore <== NOT EXECUTED 400030e0: 01 00 00 00 nop 400261c0 <__kill>: #endif int __kill( pid_t pid, int sig ) { return 0; } 400261c0: 81 c3 e0 08 retl <== NOT EXECUTED 400261c4: 90 10 20 00 clr %o0 <== NOT EXECUTED 40018884 <_exit>: #include #if !defined(RTEMS_UNIX) void _exit(int status) { 40018884: 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(); 40018888: 7f ff ff e4 call 40018818 4001888c: 01 00 00 00 nop rtems_shutdown_executive(status); 40018890: 40 00 00 4c call 400189c0 40018894: 90 10 00 18 mov %i0, %o0 40018898: 30 80 00 00 b,a 40018898 <_exit+0x14> <== NOT EXECUTED 4002471c <_fcntl_r>: int fd, int cmd, int arg ) { return fcntl( fd, cmd, arg ); 4002471c: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40024720: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40024724: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40024728: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4002472c: 7f ff ff 6f call 400244e8 <== NOT EXECUTED 40024730: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40024734: 01 00 00 00 nop 4002603c <_getpid_r>: pid_t _getpid_r( struct _reent *ptr ) { return getpid(); 4002603c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40026040: 7f ff ff fd call 40026034 <== NOT EXECUTED 40026044: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40026048: 01 00 00 00 nop 4000d1fc <_gettimeofday>: int _gettimeofday( struct timeval *tp, struct timezone *tzp ) { return gettimeofday( tp, tzp ); 4000d1fc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4000d200: 7f ff ff e6 call 4000d198 <== NOT EXECUTED 4000d204: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000d208: 01 00 00 00 nop 400261b8 <_kill_r>: #include int _kill_r( struct _reent *ptr, pid_t pid, int sig ) { return 0; } 400261b8: 81 c3 e0 08 retl <== NOT EXECUTED 400261bc: 90 10 20 00 clr %o0 <== NOT EXECUTED 400187fc <_lseek_r>: int fd, off_t offset, int whence ) { return lseek( fd, offset, whence ); 400187fc: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40018800: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40018804: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40018808: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001880c: 7f ff ff ba call 400186f4 <== NOT EXECUTED 40018810: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40018814: 01 00 00 00 nop 40003fe8 <_open_r>: const char *buf, int flags, int mode ) { return open( buf, flags, mode ); 40003fe8: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40003fec: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40003ff0: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40003ff4: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40003ff8: 7f ff ff 36 call 40003cd0 <== NOT EXECUTED 40003ffc: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40004000: 01 00 00 00 nop <== NOT EXECUTED 40018988 <_read_r>: int fd, void *buf, size_t nbytes ) { return read( fd, buf, nbytes ); 40018988: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4001898c: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40018990: 94 10 00 0b mov %o3, %o2 <== NOT EXECUTED 40018994: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40018998: 7f ff ff c1 call 4001889c <== NOT EXECUTED 4001899c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 400189a0: 01 00 00 00 nop 40003708 <_realloc_r>: struct _reent *ignored, void *ptr, size_t size ) { return realloc( ptr, size ); 40003708: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4000370c: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40003710: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40003714: 7f ff ff b6 call 400035ec <== NOT EXECUTED 40003718: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000371c: 01 00 00 00 nop 40007b0c <_stat_r>: struct _reent *ptr, const char *path, struct stat *buf ) { return _STAT_NAME( path, buf ); 40007b0c: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 40007b10: 92 10 00 0a mov %o2, %o1 <== NOT EXECUTED 40007b14: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40007b18: 7f ff ff b3 call 400079e4 <== NOT EXECUTED 40007b1c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40007b20: 01 00 00 00 nop 4001af64 <_unlink_r>: int _unlink_r( struct _reent *ptr, const char *path ) { return unlink( path ); 4001af64: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4001af68: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001af6c: 7f ff ff a5 call 4001ae00 <== NOT EXECUTED 4001af70: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001af74: 01 00 00 00 nop 40018fec : #include int chdir( const char *pathname ) { 40018fec: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Get the node where we wish to go. */ result = rtems_filesystem_evaluate_path( 40018ff0: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40018ff4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40018ff8: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40018ffc: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40019000: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40019004: 7f ff b4 0d call 40006038 <== NOT EXECUTED 40019008: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED pathname, RTEMS_LIBIO_PERMS_SEARCH, &loc, TRUE ); if ( result != 0 ) 4001900c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019010: 12 80 00 2f bne 400190cc <== NOT EXECUTED 40019014: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Verify you can change directory into this node. */ if ( !loc.ops->node_type_h ) { 40019018: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4001901c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019020: 22 80 00 2d be,a 400190d4 <== NOT EXECUTED 40019024: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 40019028: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001902c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019030: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 40019034: 12 80 00 19 bne 40019098 <== NOT EXECUTED 40019038: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTDIR ); } rtems_filesystem_freenode( &rtems_filesystem_current ); 4001903c: 21 10 00 f0 sethi %hi(0x4003c000), %l0 <== NOT EXECUTED 40019040: d0 04 21 20 ld [ %l0 + 0x120 ], %o0 ! 4003c120 <== NOT EXECUTED 40019044: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 40019048: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001904c: 22 80 00 09 be,a 40019070 <== NOT EXECUTED 40019050: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40019054: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019058: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001905c: 22 80 00 05 be,a 40019070 <== NOT EXECUTED 40019060: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40019064: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019068: 90 02 20 04 add %o0, 4, %o0 <== NOT EXECUTED rtems_filesystem_current = loc; 4001906c: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40019070: c6 04 21 20 ld [ %l0 + 0x120 ], %g3 <== NOT EXECUTED 40019074: c2 20 e0 04 st %g1, [ %g3 + 4 ] <== NOT EXECUTED 40019078: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 4001907c: c4 20 e0 08 st %g2, [ %g3 + 8 ] <== NOT EXECUTED 40019080: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019084: c2 20 e0 0c st %g1, [ %g3 + 0xc ] <== NOT EXECUTED 40019088: c4 07 bf f4 ld [ %fp + -12 ], %g2 <== NOT EXECUTED 4001908c: c4 20 e0 10 st %g2, [ %g3 + 0x10 ] <== NOT EXECUTED return 0; } 40019090: 81 c7 e0 08 ret <== NOT EXECUTED 40019094: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { rtems_filesystem_freenode( &loc ); 40019098: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001909c: 02 80 00 08 be 400190bc <== NOT EXECUTED 400190a0: 01 00 00 00 nop <== NOT EXECUTED 400190a4: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400190a8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400190ac: 02 80 00 04 be 400190bc <== NOT EXECUTED 400190b0: 01 00 00 00 nop <== NOT EXECUTED 400190b4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400190b8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 400190bc: 40 00 36 3d call 400269b0 <__errno> <== NOT EXECUTED 400190c0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400190c4: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 400190c8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400190cc: 81 c7 e0 08 ret <== NOT EXECUTED 400190d0: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify you can change directory into this node. */ if ( !loc.ops->node_type_h ) { rtems_filesystem_freenode( &loc ); 400190d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400190d8: 02 80 00 04 be 400190e8 <== NOT EXECUTED 400190dc: 01 00 00 00 nop <== NOT EXECUTED 400190e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400190e4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 400190e8: 40 00 36 32 call 400269b0 <__errno> <== NOT EXECUTED 400190ec: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400190f0: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400190f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400190f8: 81 c7 e0 08 ret <== NOT EXECUTED 400190fc: 81 e8 00 00 restore <== NOT EXECUTED 40019100 : int chmod( const char *path, mode_t mode ) { 40019100: 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 ); 40019104: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019108: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001910c: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40019110: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40019114: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40019118: 7f ff b3 c8 call 40006038 <== NOT EXECUTED 4001911c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 40019120: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019124: 12 80 00 16 bne 4001917c <== NOT EXECUTED 40019128: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED return -1; if ( !loc.handlers ){ 4001912c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019130: 22 80 00 25 be,a 400191c4 <== NOT EXECUTED 40019134: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EBADF ); } if ( !loc.handlers->fchmod_h ){ 40019138: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001913c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019140: 02 80 00 11 be 40019184 <== NOT EXECUTED 40019144: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.handlers->fchmod_h)( &loc, mode ); 40019148: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001914c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019150: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40019154: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019158: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001915c: 02 80 00 08 be 4001917c <== NOT EXECUTED 40019160: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40019164: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019168: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001916c: 02 80 00 23 be 400191f8 <== NOT EXECUTED 40019170: 01 00 00 00 nop <== NOT EXECUTED 40019174: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019178: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 4001917c: 81 c7 e0 08 ret <== NOT EXECUTED 40019180: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EBADF ); } if ( !loc.handlers->fchmod_h ){ rtems_filesystem_freenode( &loc ); 40019184: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019188: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001918c: 02 80 00 08 be 400191ac <== NOT EXECUTED 40019190: 01 00 00 00 nop <== NOT EXECUTED 40019194: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019198: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001919c: 02 80 00 04 be 400191ac <== NOT EXECUTED 400191a0: 01 00 00 00 nop <== NOT EXECUTED 400191a4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400191a8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 400191ac: 40 00 36 01 call 400269b0 <__errno> <== NOT EXECUTED 400191b0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400191b4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400191b8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400191bc: 81 c7 e0 08 ret <== NOT EXECUTED 400191c0: 81 e8 00 00 restore <== NOT EXECUTED status = rtems_filesystem_evaluate_path( path, 0, &loc, TRUE ); if ( status != 0 ) return -1; if ( !loc.handlers ){ rtems_filesystem_freenode( &loc ); 400191c4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400191c8: 02 80 00 08 be 400191e8 <== NOT EXECUTED 400191cc: 01 00 00 00 nop <== NOT EXECUTED 400191d0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400191d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400191d8: 02 80 00 04 be 400191e8 <== NOT EXECUTED 400191dc: 01 00 00 00 nop <== NOT EXECUTED 400191e0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400191e4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 400191e8: 40 00 35 f2 call 400269b0 <__errno> <== NOT EXECUTED 400191ec: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400191f0: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 400191f4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400191f8: 81 c7 e0 08 ret <== NOT EXECUTED 400191fc: 81 e8 00 00 restore <== NOT EXECUTED 40019200 : int chown( const char *path, uid_t owner, gid_t group ) { 40019200: 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 ) ) 40019204: 92 10 20 00 clr %o1 <== NOT EXECUTED 40019208: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001920c: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 40019210: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40019214: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40019218: 7f ff b3 88 call 40006038 <== NOT EXECUTED 4001921c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019220: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019224: 12 80 00 15 bne 40019278 <== NOT EXECUTED 40019228: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return -1; if ( !loc.ops->chown_h ) { 4001922c: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 <== NOT EXECUTED 40019230: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40019234: 02 80 00 13 be 40019280 <== NOT EXECUTED 40019238: 93 2e 60 10 sll %i1, 0x10, %o1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->chown_h)( &loc, owner, group ); 4001923c: 95 2e a0 10 sll %i2, 0x10, %o2 <== NOT EXECUTED 40019240: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 40019244: 95 32 a0 10 srl %o2, 0x10, %o2 <== NOT EXECUTED 40019248: 9f c0 80 00 call %g2 <== NOT EXECUTED 4001924c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40019250: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019254: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019258: 02 80 00 08 be 40019278 <== NOT EXECUTED 4001925c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40019260: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019264: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019268: 02 80 00 10 be 400192a8 <== NOT EXECUTED 4001926c: 01 00 00 00 nop <== NOT EXECUTED 40019270: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019274: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40019278: 81 c7 e0 08 ret <== NOT EXECUTED 4001927c: 81 e8 00 00 restore <== NOT EXECUTED if ( rtems_filesystem_evaluate_path( path, 0x00, &loc, TRUE ) ) return -1; if ( !loc.ops->chown_h ) { rtems_filesystem_freenode( &loc ); 40019280: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019284: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019288: 02 80 00 04 be 40019298 <== NOT EXECUTED 4001928c: 01 00 00 00 nop <== NOT EXECUTED 40019290: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019294: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40019298: 40 00 35 c6 call 400269b0 <__errno> <== NOT EXECUTED 4001929c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400192a0: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400192a4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400192a8: 81 c7 e0 08 ret <== NOT EXECUTED 400192ac: 81 e8 00 00 restore <== NOT EXECUTED 400192b0 : #include int chroot( const char *pathname ) { 400192b0: 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) { 400192b4: 23 10 00 f0 sethi %hi(0x4003c000), %l1 <== NOT EXECUTED 400192b8: e0 04 61 20 ld [ %l1 + 0x120 ], %l0 ! 4003c120 <== NOT EXECUTED 400192bc: 03 10 00 f9 sethi %hi(0x4003e400), %g1 <== NOT EXECUTED 400192c0: 82 10 62 24 or %g1, 0x224, %g1 ! 4003e624 <== NOT EXECUTED 400192c4: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 400192c8: 02 80 00 24 be 40019358 <== NOT EXECUTED 400192cc: 01 00 00 00 nop <== NOT EXECUTED rtems_libio_set_private_env(); /* try to set a new private env*/ if (rtems_current_user_env == &rtems_global_user_env) /* not ok */ rtems_set_errno_and_return_minus_one( ENOTSUP ); }; result = chdir(pathname); 400192d0: 7f ff ff 47 call 40018fec <== NOT EXECUTED 400192d4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if (result) { 400192d8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400192dc: 12 80 00 2b bne 40019388 <== NOT EXECUTED 400192e0: 11 10 00 e2 sethi %hi(0x40038800), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( errno ); }; /* clone the new root location */ if (rtems_filesystem_evaluate_path(".", 0, &loc, 0)) { 400192e4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400192e8: 90 12 23 20 or %o0, 0x320, %o0 <== NOT EXECUTED 400192ec: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED 400192f0: 7f ff b3 52 call 40006038 <== NOT EXECUTED 400192f4: 96 10 20 00 clr %o3 <== NOT EXECUTED 400192f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400192fc: 12 80 00 23 bne 40019388 <== NOT EXECUTED 40019300: d0 04 61 20 ld [ %l1 + 0x120 ], %o0 <== NOT EXECUTED /* our cwd has changed, though - but there is no easy way of return :-( */ rtems_set_errno_and_return_minus_one( errno ); } rtems_filesystem_freenode(&rtems_filesystem_root); 40019304: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 <== NOT EXECUTED 40019308: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001930c: 22 80 00 09 be,a 40019330 <== NOT EXECUTED 40019310: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40019314: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40019318: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001931c: 22 80 00 05 be,a 40019330 <== NOT EXECUTED 40019320: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40019324: 9f c0 40 00 call %g1 <== NOT EXECUTED 40019328: 90 02 20 14 add %o0, 0x14, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 4001932c: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED 40019330: c6 04 61 20 ld [ %l1 + 0x120 ], %g3 <== NOT EXECUTED 40019334: c2 20 e0 14 st %g1, [ %g3 + 0x14 ] <== NOT EXECUTED 40019338: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED 4001933c: c4 20 e0 18 st %g2, [ %g3 + 0x18 ] <== NOT EXECUTED 40019340: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40019344: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED 40019348: c4 07 bf f4 ld [ %fp + -12 ], %g2 <== NOT EXECUTED 4001934c: c4 20 e0 20 st %g2, [ %g3 + 0x20 ] <== NOT EXECUTED return 0; } 40019350: 81 c7 e0 08 ret <== NOT EXECUTED 40019354: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED int result; rtems_filesystem_location_info_t loc; /* an automatic call to new private env the first time */ if (rtems_current_user_env == &rtems_global_user_env) { rtems_libio_set_private_env(); /* try to set a new private env*/ 40019358: 40 00 05 59 call 4001a8bc <== NOT EXECUTED 4001935c: 01 00 00 00 nop <== NOT EXECUTED if (rtems_current_user_env == &rtems_global_user_env) /* not ok */ 40019360: c2 04 61 20 ld [ %l1 + 0x120 ], %g1 <== NOT EXECUTED 40019364: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 40019368: 12 bf ff da bne 400192d0 <== NOT EXECUTED 4001936c: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40019370: 40 00 35 90 call 400269b0 <__errno> <== NOT EXECUTED 40019374: b0 10 3f ff mov -1, %i0 ! ffffffff <== NOT EXECUTED 40019378: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4001937c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019380: 81 c7 e0 08 ret <== NOT EXECUTED 40019384: 81 e8 00 00 restore <== NOT EXECUTED rtems_set_errno_and_return_minus_one( errno ); }; /* clone the new root location */ if (rtems_filesystem_evaluate_path(".", 0, &loc, 0)) { /* our cwd has changed, though - but there is no easy way of return :-( */ rtems_set_errno_and_return_minus_one( errno ); 40019388: 40 00 35 8a call 400269b0 <__errno> <== NOT EXECUTED 4001938c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40019390: 40 00 35 88 call 400269b0 <__errno> <== NOT EXECUTED 40019394: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40019398: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 4001939c: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED 400193a0: 81 c7 e0 08 ret <== NOT EXECUTED 400193a4: 81 e8 00 00 restore <== NOT EXECUTED 4000cfb8 : #include int close( int fd ) { 4000cfb8: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_t *iop; rtems_status_code rc; rtems_libio_check_fd(fd); 4000cfbc: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000cfc0: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 40019c3c 4000cfc4: 80 a6 00 02 cmp %i0, %g2 4000cfc8: 1a 80 00 23 bcc 4000d054 4000cfcc: 03 10 00 6a sethi %hi(0x4001a800), %g1 iop = rtems_libio_iop(fd); 4000cfd0: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4001abc8 4000cfd4: 85 2e 20 02 sll %i0, 2, %g2 4000cfd8: 83 2e 20 04 sll %i0, 4, %g1 4000cfdc: 82 20 40 02 sub %g1, %g2, %g1 4000cfe0: 82 00 40 18 add %g1, %i0, %g1 4000cfe4: 83 28 60 02 sll %g1, 2, %g1 4000cfe8: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 4000cfec: c4 06 20 0c ld [ %i0 + 0xc ], %g2 4000cff0: 80 88 a1 00 btst 0x100, %g2 4000cff4: 02 80 00 18 be 4000d054 4000cff8: 01 00 00 00 nop rc = RTEMS_SUCCESSFUL; if ( iop->handlers->close_h ) 4000cffc: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 4000d000: c2 00 60 04 ld [ %g1 + 4 ], %g1 4000d004: 80 a0 60 00 cmp %g1, 0 4000d008: 02 80 00 05 be 4000d01c 4000d00c: a0 10 20 00 clr %l0 rc = (*iop->handlers->close_h)( iop ); 4000d010: 9f c0 40 00 call %g1 4000d014: 90 10 00 18 mov %i0, %o0 4000d018: a0 10 00 08 mov %o0, %l0 rtems_filesystem_freenode( &iop->pathinfo ); 4000d01c: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 4000d020: 80 a0 60 00 cmp %g1, 0 4000d024: 02 80 00 08 be 4000d044 4000d028: 01 00 00 00 nop 4000d02c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 4000d030: 80 a0 60 00 cmp %g1, 0 4000d034: 02 80 00 04 be 4000d044 4000d038: 01 00 00 00 nop 4000d03c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000d040: 90 06 20 10 add %i0, 0x10, %o0 <== NOT EXECUTED rtems_libio_free( iop ); 4000d044: 40 00 00 d1 call 4000d388 4000d048: 90 10 00 18 mov %i0, %o0 return rc; } 4000d04c: 81 c7 e0 08 ret 4000d050: 91 e8 00 10 restore %g0, %l0, %o0 rtems_libio_t *iop; rtems_status_code rc; rtems_libio_check_fd(fd); iop = rtems_libio_iop(fd); rtems_libio_check_is_open(iop); 4000d054: 40 00 08 9a call 4000f2bc <__errno> <== NOT EXECUTED 4000d058: a0 10 3f ff mov -1, %l0 <== NOT EXECUTED 4000d05c: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 4000d060: 10 bf ff fb b 4000d04c <== NOT EXECUTED 4000d064: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400193a8 : * close a directory. */ int closedir(dirp) register DIR *dirp; { 400193a8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int fd; if ( !dirp ) 400193ac: a0 96 20 00 orcc %i0, 0, %l0 <== NOT EXECUTED 400193b0: 02 80 00 0b be 400193dc <== NOT EXECUTED 400193b4: 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); 400193b8: 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; 400193bc: f0 04 00 00 ld [ %l0 ], %i0 <== NOT EXECUTED dirp->dd_fd = -1; dirp->dd_loc = 0; 400193c0: c0 24 20 04 clr [ %l0 + 4 ] <== NOT EXECUTED (void)free((void *)dirp->dd_buf); 400193c4: 7f ff b4 9b call 40006630 <== NOT EXECUTED 400193c8: c2 24 00 00 st %g1, [ %l0 ] <== NOT EXECUTED (void)free((void *)dirp); 400193cc: 7f ff b4 99 call 40006630 <== NOT EXECUTED 400193d0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return(close(fd)); 400193d4: 7f ff b2 b8 call 40005eb4 <== NOT EXECUTED 400193d8: 81 e8 00 00 restore <== NOT EXECUTED register DIR *dirp; { int fd; if ( !dirp ) rtems_set_errno_and_return_minus_one( EBADF ); 400193dc: 40 00 35 75 call 400269b0 <__errno> <== NOT EXECUTED 400193e0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400193e4: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 400193e8: 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)); } 400193ec: 81 c7 e0 08 ret <== NOT EXECUTED 400193f0: 81 e8 00 00 restore <== NOT EXECUTED 4000e89c : */ int device_close( rtems_libio_t *iop ) { 4000e89c: 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; 4000e8a0: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 args.iop = iop; 4000e8a4: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = 0; 4000e8a8: c0 27 bf f0 clr [ %fp + -16 ] args.mode = 0; 4000e8ac: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_close( 4000e8b0: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 4000e8b4: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 4000e8b8: 94 07 bf ec add %fp, -20, %o2 4000e8bc: 40 00 01 55 call 4000ee10 4000e8c0: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) { 4000e8c4: 80 a2 20 00 cmp %o0, 0 4000e8c8: 12 80 00 04 bne 4000e8d8 4000e8cc: 01 00 00 00 nop return rtems_deviceio_errno(status); } return 0; } 4000e8d0: 81 c7 e0 08 ret 4000e8d4: 81 e8 00 00 restore the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) { return rtems_deviceio_errno(status); 4000e8d8: 7f ff ff a1 call 4000e75c <== NOT EXECUTED 4000e8dc: 01 00 00 00 nop <== NOT EXECUTED } return 0; } 4000e8e0: 81 c7 e0 08 ret <== NOT EXECUTED 4000e8e4: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000e754 : rtems_libio_t *iop, off_t length ) { return 0; } 4000e754: 81 c3 e0 08 retl <== NOT EXECUTED 4000e758: 90 10 20 00 clr %o0 <== NOT EXECUTED 4000e790 : int device_ioctl( rtems_libio_t *iop, uint32_t command, void *buffer ) { 4000e790: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED args.iop = iop; args.command = command; args.buffer = buffer; the_jnode = iop->file_info; 4000e794: 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; 4000e798: f2 27 bf ec st %i1, [ %fp + -20 ] <== NOT EXECUTED args.buffer = buffer; 4000e79c: 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; 4000e7a0: 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( 4000e7a4: d2 00 60 50 ld [ %g1 + 0x50 ], %o1 <== NOT EXECUTED 4000e7a8: d0 00 60 4c ld [ %g1 + 0x4c ], %o0 <== NOT EXECUTED 4000e7ac: 40 00 01 af call 4000ee68 <== NOT EXECUTED 4000e7b0: 94 07 bf e8 add %fp, -24, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000e7b4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000e7b8: 12 80 00 05 bne 4000e7cc <== NOT EXECUTED 4000e7bc: 01 00 00 00 nop <== NOT EXECUTED return rtems_deviceio_errno(status); return args.ioctl_return; 4000e7c0: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED } 4000e7c4: 81 c7 e0 08 ret <== NOT EXECUTED 4000e7c8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000e7cc: 7f ff ff e4 call 4000e75c <== NOT EXECUTED 4000e7d0: 01 00 00 00 nop <== NOT EXECUTED return args.ioctl_return; } 4000e7d4: 81 c7 e0 08 ret <== NOT EXECUTED 4000e7d8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000e74c : off_t offset, int whence ) { return offset; } 4000e74c: 81 c3 e0 08 retl <== NOT EXECUTED 4000e750: 90 10 00 09 mov %o1, %o0 <== NOT EXECUTED 4000e8e8 : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4000e8e8: 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; 4000e8ec: 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; 4000e8f0: c4 06 20 2c ld [ %i0 + 0x2c ], %g2 args.iop = iop; 4000e8f4: f0 27 bf ec st %i0, [ %fp + -20 ] args.flags = iop->flags; 4000e8f8: c2 27 bf f0 st %g1, [ %fp + -16 ] args.mode = mode; 4000e8fc: f6 27 bf f4 st %i3, [ %fp + -12 ] status = rtems_io_open( 4000e900: d2 00 a0 50 ld [ %g2 + 0x50 ], %o1 4000e904: d0 00 a0 4c ld [ %g2 + 0x4c ], %o0 4000e908: 94 07 bf ec add %fp, -20, %o2 4000e90c: 40 00 01 6d call 4000eec0 4000e910: b0 10 20 00 clr %i0 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000e914: 80 a2 20 00 cmp %o0, 0 4000e918: 12 80 00 04 bne 4000e928 4000e91c: 01 00 00 00 nop return rtems_deviceio_errno(status); return 0; } 4000e920: 81 c7 e0 08 ret 4000e924: 81 e8 00 00 restore the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000e928: 7f ff ff 8d call 4000e75c <== NOT EXECUTED 4000e92c: 01 00 00 00 nop <== NOT EXECUTED return 0; } 4000e930: 81 c7 e0 08 ret <== NOT EXECUTED 4000e934: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000e83c : ssize_t device_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4000e83c: 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; 4000e840: 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; 4000e844: 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; 4000e848: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 <== NOT EXECUTED args.iop = iop; args.offset = iop->offset; args.buffer = buffer; 4000e84c: 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; 4000e850: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED args.buffer = buffer; args.count = count; 4000e854: f4 27 bf ec st %i2, [ %fp + -20 ] <== NOT EXECUTED args.flags = iop->flags; 4000e858: 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; 4000e85c: 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; 4000e860: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED status = rtems_io_read( 4000e864: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 <== NOT EXECUTED 4000e868: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 <== NOT EXECUTED 4000e86c: 40 00 01 ab call 4000ef18 <== NOT EXECUTED 4000e870: 94 07 bf e0 add %fp, -32, %o2 <== NOT EXECUTED the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000e874: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000e878: 12 80 00 05 bne 4000e88c <== NOT EXECUTED 4000e87c: 01 00 00 00 nop <== NOT EXECUTED return rtems_deviceio_errno(status); return (ssize_t) args.bytes_moved; 4000e880: d0 07 bf f4 ld [ %fp + -12 ], %o0 <== NOT EXECUTED } 4000e884: 81 c7 e0 08 ret <== NOT EXECUTED 4000e888: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000e88c: 7f ff ff b4 call 4000e75c <== NOT EXECUTED 4000e890: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 4000e894: 81 c7 e0 08 ret <== NOT EXECUTED 4000e898: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000e7dc : ssize_t device_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4000e7dc: 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; 4000e7e0: 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; 4000e7e4: 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; 4000e7e8: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 args.iop = iop; args.offset = iop->offset; args.buffer = (void *) buffer; 4000e7ec: 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; 4000e7f0: c2 27 bf e4 st %g1, [ %fp + -28 ] args.buffer = (void *) buffer; args.count = count; 4000e7f4: f4 27 bf ec st %i2, [ %fp + -20 ] args.flags = iop->flags; 4000e7f8: 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; 4000e7fc: 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; 4000e800: c0 27 bf f4 clr [ %fp + -12 ] status = rtems_io_write( 4000e804: d2 00 e0 50 ld [ %g3 + 0x50 ], %o1 4000e808: d0 00 e0 4c ld [ %g3 + 0x4c ], %o0 4000e80c: 40 00 01 d9 call 4000ef70 4000e810: 94 07 bf e0 add %fp, -32, %o2 the_jnode->info.device.major, the_jnode->info.device.minor, (void *) &args ); if ( status ) 4000e814: 80 a2 20 00 cmp %o0, 0 4000e818: 12 80 00 05 bne 4000e82c 4000e81c: 01 00 00 00 nop return rtems_deviceio_errno(status); return (ssize_t) args.bytes_moved; 4000e820: d0 07 bf f4 ld [ %fp + -12 ], %o0 } 4000e824: 81 c7 e0 08 ret 4000e828: 91 e8 00 08 restore %g0, %o0, %o0 the_jnode->info.device.minor, (void *) &args ); if ( status ) return rtems_deviceio_errno(status); 4000e82c: 7f ff ff cc call 4000e75c <== NOT EXECUTED 4000e830: 01 00 00 00 nop <== NOT EXECUTED return (ssize_t) args.bytes_moved; } 4000e834: 81 c7 e0 08 ret <== NOT EXECUTED 4000e838: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400052f4 : /* * Drain output queue */ static void drainOutput (struct rtems_termios_tty *tty) { 400052f4: 9d e3 bf 98 save %sp, -104, %sp rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) { 400052f8: c2 06 20 b4 ld [ %i0 + 0xb4 ], %g1 400052fc: 80 a0 60 00 cmp %g1, 0 40005300: 12 80 00 04 bne 40005310 40005304: 01 00 00 00 nop 40005308: 81 c7 e0 08 ret 4000530c: 81 e8 00 00 restore rtems_interrupt_disable (level); 40005310: 7f ff f3 2f call 40001fcc <== NOT EXECUTED 40005314: 01 00 00 00 nop <== NOT EXECUTED while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) { 40005318: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 4000531c: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40005320: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005324: 12 80 00 0a bne 4000534c <== NOT EXECUTED 40005328: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 4000532c: 30 80 00 1b b,a 40005398 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); 40005330: 7f ff f3 27 call 40001fcc <== NOT EXECUTED 40005334: 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) { 40005338: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 4000533c: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40005340: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005344: 02 80 00 15 be 40005398 <== NOT EXECUTED 40005348: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_wait; 4000534c: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 40005350: 7f ff f3 23 call 40001fdc <== NOT EXECUTED 40005354: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 40005358: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 4000535c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40005360: 40 00 06 eb call 40006f0c <== NOT EXECUTED 40005364: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 40005368: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000536c: 02 bf ff f1 be 40005330 <== NOT EXECUTED 40005370: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005374: 40 00 0a 01 call 40007b78 <== NOT EXECUTED 40005378: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 4000537c: 7f ff f3 14 call 40001fcc <== NOT EXECUTED 40005380: 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) { 40005384: c4 06 20 84 ld [ %i0 + 0x84 ], %g2 <== NOT EXECUTED 40005388: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 4000538c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005390: 12 bf ff ef bne 4000534c <== NOT EXECUTED 40005394: 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); 40005398: 7f ff f3 11 call 40001fdc <== NOT EXECUTED 4000539c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 400053a0: 01 00 00 00 nop 40004d04 : /* * Echo a typed character */ static void echo (unsigned char c, struct rtems_termios_tty *tty) { 40004d04: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) { 40004d08: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 40004d0c: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 40004d10: 02 80 00 18 be 40004d70 <== NOT EXECUTED 40004d14: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40004d18: c4 00 63 c0 ld [ %g1 + 0x3c0 ], %g2 ! 4001a3c0 <__ctype_ptr> <== NOT EXECUTED 40004d1c: 90 0e 20 ff and %i0, 0xff, %o0 <== NOT EXECUTED 40004d20: c2 0a 00 02 ldub [ %o0 + %g2 ], %g1 <== NOT EXECUTED 40004d24: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004d28: 02 80 00 13 be 40004d74 <== NOT EXECUTED 40004d2c: 80 a2 20 09 cmp %o0, 9 <== NOT EXECUTED 40004d30: 02 80 00 11 be 40004d74 <== NOT EXECUTED 40004d34: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED 40004d38: 02 80 00 0f be 40004d74 <== NOT EXECUTED 40004d3c: 82 1e 20 40 xor %i0, 0x40, %g1 <== NOT EXECUTED char echobuf[2]; echobuf[0] = '^'; 40004d40: 84 10 20 5e mov 0x5e, %g2 <== NOT EXECUTED echobuf[1] = c ^ 0x40; 40004d44: 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] = '^'; 40004d48: c4 2f bf f6 stb %g2, [ %fp + -10 ] <== NOT EXECUTED echobuf[1] = c ^ 0x40; rtems_termios_puts (echobuf, 2, tty); 40004d4c: 90 07 bf f6 add %fp, -10, %o0 <== NOT EXECUTED 40004d50: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40004d54: 7f ff ff 36 call 40004a2c <== NOT EXECUTED 40004d58: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED tty->column += 2; 40004d5c: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40004d60: 82 00 60 02 add %g1, 2, %g1 <== NOT EXECUTED 40004d64: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED 40004d68: 81 c7 e0 08 ret <== NOT EXECUTED 40004d6c: 81 e8 00 00 restore <== NOT EXECUTED 40004d70: 90 0e 20 ff and %i0, 0xff, %o0 <== NOT EXECUTED } else { oproc (c, tty); 40004d74: 7f ff ff 83 call 40004b80 <== NOT EXECUTED 40004d78: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40004d7c: 81 c7 e0 08 ret <== NOT EXECUTED 40004d80: 81 e8 00 00 restore <== NOT EXECUTED 40019bb4 : group_fp = fopen("/etc/group", "r"); } void endgrent(void) { if (group_fp != NULL) 40019bb4: 03 10 00 f6 sethi %hi(0x4003d800), %g1 <== NOT EXECUTED 40019bb8: d0 00 61 84 ld [ %g1 + 0x184 ], %o0 ! 4003d984 <== NOT EXECUTED 40019bbc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019bc0: 02 80 00 05 be 40019bd4 <== NOT EXECUTED 40019bc4: 01 00 00 00 nop <== NOT EXECUTED fclose(group_fp); 40019bc8: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40019bcc: 40 00 33 c0 call 40026acc <== NOT EXECUTED 40019bd0: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40019bd4: 81 c3 e0 08 retl <== NOT EXECUTED 40019bd8: 01 00 00 00 nop 40019bdc : passwd_fp = fopen("/etc/passwd", "r"); } void endpwent(void) { if (passwd_fp != NULL) 40019bdc: 03 10 00 f6 sethi %hi(0x4003d800), %g1 <== NOT EXECUTED 40019be0: d0 00 60 9c ld [ %g1 + 0x9c ], %o0 ! 4003d89c <== NOT EXECUTED 40019be4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019be8: 02 80 00 05 be 40019bfc <== NOT EXECUTED 40019bec: 01 00 00 00 nop <== NOT EXECUTED fclose(passwd_fp); 40019bf0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40019bf4: 40 00 33 b6 call 40026acc <== NOT EXECUTED 40019bf8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40019bfc: 81 c3 e0 08 retl <== NOT EXECUTED 40019c00: 01 00 00 00 nop 40004d84 : * 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) { 40004d84: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->ccount == 0) 40004d88: c4 06 20 20 ld [ %i0 + 0x20 ], %g2 <== NOT EXECUTED 40004d8c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004d90: 02 80 00 36 be 40004e68 <== NOT EXECUTED 40004d94: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED return; if (lineFlag) { 40004d98: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40004d9c: 12 80 00 35 bne 40004e70 <== NOT EXECUTED 40004da0: c6 06 20 3c ld [ %i0 + 0x3c ], %g3 <== NOT EXECUTED 40004da4: 27 10 00 64 sethi %hi(0x40019000), %l3 <== NOT EXECUTED 40004da8: 03 10 00 64 sethi %hi(0x40019000), %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { 40004dac: 25 10 00 68 sethi %hi(0x4001a000), %l2 <== NOT EXECUTED 40004db0: a2 10 62 08 or %g1, 0x208, %l1 <== NOT EXECUTED 40004db4: 10 80 00 0d b 40004de8 <== NOT EXECUTED 40004db8: a8 14 e2 10 or %l3, 0x210, %l4 <== NOT EXECUTED 40004dbc: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40004dc0: 12 80 00 6a bne 40004f68 <== NOT EXECUTED 40004dc4: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40004dc8: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40004dcc: 02 80 00 65 be 40004f60 <== NOT EXECUTED 40004dd0: 01 00 00 00 nop <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) echo ('\n', tty); return; } } while (tty->ccount) { 40004dd4: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 <== NOT EXECUTED 40004dd8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40004ddc: 02 80 00 61 be 40004f60 <== NOT EXECUTED 40004de0: 01 00 00 00 nop <== NOT EXECUTED 40004de4: c6 04 20 3c ld [ %l0 + 0x3c ], %g3 <== NOT EXECUTED unsigned char c = tty->cbuf[--tty->ccount]; 40004de8: da 04 20 1c ld [ %l0 + 0x1c ], %o5 <== NOT EXECUTED 40004dec: 88 00 bf ff add %g2, -1, %g4 <== NOT EXECUTED 40004df0: c8 24 20 20 st %g4, [ %l0 + 0x20 ] <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) { 40004df4: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40004df8: 02 bf ff f4 be 40004dc8 <== NOT EXECUTED 40004dfc: c4 0b 40 04 ldub [ %o5 + %g4 ], %g2 <== NOT EXECUTED if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) { 40004e00: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40004e04: 12 80 00 05 bne 40004e18 <== NOT EXECUTED 40004e08: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED 40004e0c: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 40004e10: 22 80 00 6a be,a 40004fb8 <== NOT EXECUTED 40004e14: f0 0c 20 43 ldub [ %l0 + 0x43 ], %i0 <== NOT EXECUTED echo (tty->termios.c_cc[VERASE], tty); } else if (c == '\t') { 40004e18: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40004e1c: 80 a0 60 09 cmp %g1, 9 <== NOT EXECUTED 40004e20: 02 80 00 24 be 40004eb0 <== NOT EXECUTED 40004e24: c2 04 a3 c0 ld [ %l2 + 0x3c0 ], %g1 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { 40004e28: b0 08 a0 ff and %g2, 0xff, %i0 <== NOT EXECUTED 40004e2c: c4 0e 00 01 ldub [ %i0 + %g1 ], %g2 <== NOT EXECUTED 40004e30: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 40004e34: 12 bf ff e2 bne 40004dbc <== NOT EXECUTED 40004e38: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED rtems_termios_puts ("\b \b", 3, tty); if (tty->column) tty->column--; } if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) { rtems_termios_puts ("\b \b", 3, tty); 40004e3c: 90 12 22 10 or %o0, 0x210, %o0 <== NOT EXECUTED 40004e40: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40004e44: 7f ff fe fa call 40004a2c <== NOT EXECUTED 40004e48: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 40004e4c: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40004e50: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004e54: 02 bf ff de be 40004dcc <== NOT EXECUTED 40004e58: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED tty->column--; 40004e5c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED } } } if (!lineFlag) 40004e60: 12 bf ff dd bne 40004dd4 <== NOT EXECUTED 40004e64: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED 40004e68: 81 c7 e0 08 ret <== NOT EXECUTED 40004e6c: 81 e8 00 00 restore <== NOT EXECUTED erase (struct rtems_termios_tty *tty, int lineFlag) { if (tty->ccount == 0) return; if (lineFlag) { if (!(tty->termios.c_lflag & ECHO)) { 40004e70: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40004e74: 22 bf ff fd be,a 40004e68 <== NOT EXECUTED 40004e78: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED tty->ccount = 0; return; } if (!(tty->termios.c_lflag & ECHOE)) { 40004e7c: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 40004e80: 12 bf ff ca bne 40004da8 <== NOT EXECUTED 40004e84: 27 10 00 64 sethi %hi(0x40019000), %l3 <== NOT EXECUTED tty->ccount = 0; echo (tty->termios.c_cc[VKILL], tty); 40004e88: 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; 40004e8c: c0 26 20 20 clr [ %i0 + 0x20 ] <== NOT EXECUTED echo (tty->termios.c_cc[VKILL], tty); 40004e90: 7f ff ff 9d call 40004d04 <== NOT EXECUTED 40004e94: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOK) 40004e98: c2 06 20 3c ld [ %i0 + 0x3c ], %g1 <== NOT EXECUTED 40004e9c: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004ea0: 02 bf ff f2 be 40004e68 <== NOT EXECUTED 40004ea4: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED echo ('\n', tty); 40004ea8: 7f ff ff 97 call 40004d04 <== NOT EXECUTED 40004eac: 91 e8 20 0a restore %g0, 0xa, %o0 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 40004eb0: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 40004eb4: 02 80 00 19 be 40004f18 <== NOT EXECUTED 40004eb8: f0 04 20 2c ld [ %l0 + 0x2c ], %i0 <== NOT EXECUTED c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40004ebc: d8 04 a3 c0 ld [ %l2 + 0x3c0 ], %o4 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOCTL) 40004ec0: 96 08 e2 00 and %g3, 0x200, %o3 <== NOT EXECUTED while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40004ec4: 10 80 00 07 b 40004ee0 <== NOT EXECUTED 40004ec8: 86 10 20 00 clr %g3 <== NOT EXECUTED if (tty->termios.c_lflag & ECHOCTL) 40004ecc: 32 80 00 02 bne,a 40004ed4 <== NOT EXECUTED 40004ed0: b0 06 20 02 add %i0, 2, %i0 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 40004ed4: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 40004ed8: 22 80 00 11 be,a 40004f1c <== NOT EXECUTED 40004edc: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED c = tty->cbuf[i++]; 40004ee0: c2 08 c0 0d ldub [ %g3 + %o5 ], %g1 <== NOT EXECUTED if (c == '\t') { col = (col | 7) + 1; } else if (iscntrl (c)) { 40004ee4: 84 08 60 ff and %g1, 0xff, %g2 <== NOT EXECUTED /* * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { 40004ee8: 83 28 60 18 sll %g1, 0x18, %g1 <== NOT EXECUTED 40004eec: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40004ef0: 80 a0 60 09 cmp %g1, 9 <== NOT EXECUTED 40004ef4: 02 80 00 18 be 40004f54 <== NOT EXECUTED 40004ef8: 86 00 e0 01 inc %g3 <== NOT EXECUTED col = (col | 7) + 1; } else if (iscntrl (c)) { 40004efc: c2 08 80 0c ldub [ %g2 + %o4 ], %g1 <== NOT EXECUTED 40004f00: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 40004f04: 12 bf ff f2 bne 40004ecc <== NOT EXECUTED 40004f08: 80 a2 e0 00 cmp %o3, 0 <== NOT EXECUTED int i = 0; /* * Find the character before the tab */ while (i != tty->ccount) { 40004f0c: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 40004f10: 12 bf ff f4 bne 40004ee0 <== NOT EXECUTED 40004f14: b0 06 20 01 inc %i0 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 40004f18: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40004f1c: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 40004f20: 16 bf ff ab bge 40004dcc <== NOT EXECUTED 40004f24: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_termios_puts ("\b", 1, tty); 40004f28: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40004f2c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40004f30: 7f ff fe bf call 40004a2c <== NOT EXECUTED 40004f34: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED tty->column--; 40004f38: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40004f3c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED } /* * Back up over the tab */ while (tty->column > col) { 40004f40: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 40004f44: 14 bf ff f9 bg 40004f28 <== NOT EXECUTED 40004f48: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40004f4c: 10 bf ff a0 b 40004dcc <== NOT EXECUTED 40004f50: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED * Find the character before the tab */ while (i != tty->ccount) { c = tty->cbuf[i++]; if (c == '\t') { col = (col | 7) + 1; 40004f54: 82 16 20 07 or %i0, 7, %g1 <== NOT EXECUTED 40004f58: 10 bf ff df b 40004ed4 <== NOT EXECUTED 40004f5c: b0 00 60 01 add %g1, 1, %i0 <== NOT EXECUTED 40004f60: 81 c7 e0 08 ret <== NOT EXECUTED 40004f64: 81 e8 00 00 restore <== NOT EXECUTED tty->column--; } } else { if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) { rtems_termios_puts ("\b \b", 3, tty); 40004f68: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 40004f6c: 7f ff fe b0 call 40004a2c <== NOT EXECUTED 40004f70: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if (tty->column) 40004f74: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED 40004f78: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004f7c: 02 80 00 04 be 40004f8c <== NOT EXECUTED 40004f80: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED tty->column--; 40004f84: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40004f88: c2 24 20 28 st %g1, [ %l0 + 0x28 ] <== NOT EXECUTED } if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) { 40004f8c: c2 04 a3 c0 ld [ %l2 + 0x3c0 ], %g1 <== NOT EXECUTED 40004f90: c4 0e 00 01 ldub [ %i0 + %g1 ], %g2 <== NOT EXECUTED 40004f94: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 40004f98: 22 bf ff aa be,a 40004e40 <== NOT EXECUTED 40004f9c: 90 12 22 10 or %o0, 0x210, %o0 <== NOT EXECUTED 40004fa0: c6 04 20 3c ld [ %l0 + 0x3c ], %g3 <== NOT EXECUTED 40004fa4: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40004fa8: 32 bf ff a6 bne,a 40004e40 <== NOT EXECUTED 40004fac: 90 12 22 10 or %o0, 0x210, %o0 <== NOT EXECUTED if (tty->column) tty->column--; } } } if (!lineFlag) 40004fb0: 10 bf ff 87 b 40004dcc <== NOT EXECUTED 40004fb4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED while (tty->ccount) { unsigned char c = tty->cbuf[--tty->ccount]; if (tty->termios.c_lflag & ECHO) { if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) { echo (tty->termios.c_cc[VERASE], tty); 40004fb8: 7f ff ff 53 call 40004d04 <== NOT EXECUTED 40004fbc: 93 e8 00 10 restore %g0, %l0, %o1 <== NOT EXECUTED 40004fc0: 01 00 00 00 nop 400244e8 : int fcntl( int fd, int cmd, ... ) { 400244e8: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 400244ec: 03 10 00 ee sethi %hi(0x4003b800), %g1 <== NOT EXECUTED 400244f0: d8 00 61 0c ld [ %g1 + 0x10c ], %o4 ! 4003b90c <== NOT EXECUTED ... ) { int ret; va_list ap; va_start( ap, cmd ); 400244f4: 88 07 a0 4c add %fp, 0x4c, %g4 <== NOT EXECUTED int fcntl( int fd, int cmd, ... ) { 400244f8: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 400244fc: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40024500: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40024504: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED int fd2; int flags; int mask; int ret = 0; rtems_libio_check_fd( fd ); 40024508: 80 a6 00 0c cmp %i0, %o4 <== NOT EXECUTED 4002450c: 1a 80 00 78 bcc 400246ec <== NOT EXECUTED 40024510: c8 27 bf f4 st %g4, [ %fp + -12 ] <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40024514: 3b 10 00 f8 sethi %hi(0x4003e000), %i5 <== NOT EXECUTED 40024518: da 07 61 44 ld [ %i5 + 0x144 ], %o5 ! 4003e144 <== NOT EXECUTED 4002451c: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 40024520: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40024524: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40024528: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4002452c: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 40024530: b0 00 40 0d add %g1, %o5, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40024534: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 40024538: 80 8a 21 00 btst 0x100, %o0 <== NOT EXECUTED 4002453c: 02 80 00 6c be 400246ec <== NOT EXECUTED 40024540: 80 a6 60 09 cmp %i1, 9 <== NOT EXECUTED /* * This switch should contain all the cases from POSIX. */ switch ( cmd ) { 40024544: 08 80 00 09 bleu 40024568 <== NOT EXECUTED 40024548: 83 2e 60 02 sll %i1, 2, %g1 <== NOT EXECUTED errno = ENOTSUP; ret = -1; break; default: errno = EINVAL; 4002454c: 40 00 09 19 call 400269b0 <__errno> <== NOT EXECUTED 40024550: 01 00 00 00 nop <== NOT EXECUTED 40024554: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40024558: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED { int ret; va_list ap; va_start( ap, cmd ); ret = vfcntl(fd,cmd,ap); va_end(ap); 4002455c: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED return ret; } 40024560: 81 c7 e0 08 ret <== NOT EXECUTED 40024564: 91 e8 00 1c restore %g0, %i4, %o0 <== NOT EXECUTED /* * This switch should contain all the cases from POSIX. */ switch ( cmd ) { 40024568: 05 10 00 91 sethi %hi(0x40024400), %g2 <== NOT EXECUTED 4002456c: 84 10 a0 c0 or %g2, 0xc0, %g2 ! 400244c0 <== NOT EXECUTED 40024570: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 40024574: 81 c0 c0 00 jmp %g3 <== NOT EXECUTED 40024578: 01 00 00 00 nop <== NOT EXECUTED errno = ENOTSUP; ret = -1; break; case F_GETOWN: /* for sockets. */ errno = ENOTSUP; 4002457c: 40 00 09 0d call 400269b0 <__errno> <== NOT EXECUTED 40024580: b8 10 3f ff mov -1, %i4 ! ffffffff <== NOT EXECUTED 40024584: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40024588: 10 bf ff f6 b 40024560 <== NOT EXECUTED 4002458c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED case F_GETFL: /* more flags (cloexec) */ ret = rtems_libio_to_fcntl_flags( iop->flags ); break; case F_SETFL: flags = rtems_libio_fcntl_flags( va_arg( ap, int ) ); 40024590: d0 01 00 00 ld [ %g4 ], %o0 <== NOT EXECUTED 40024594: 7f ff 88 0e call 400065cc <== NOT EXECUTED 40024598: 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); 4002459c: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 400245a0: 90 0a 22 01 and %o0, 0x201, %o0 <== NOT EXECUTED 400245a4: 82 08 7d fe and %g1, -514, %g1 <== NOT EXECUTED 400245a8: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED 400245ac: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED * If we got this far successfully, then we give the optional * filesystem specific handler a chance to process this. */ if (ret >= 0) { if (iop->handlers->fcntl_h) { 400245b0: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 400245b4: c2 00 60 30 ld [ %g1 + 0x30 ], %g1 <== NOT EXECUTED 400245b8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400245bc: 02 bf ff e9 be 40024560 <== NOT EXECUTED 400245c0: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED int err = (*iop->handlers->fcntl_h)( cmd, iop ); 400245c4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400245c8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (err) { 400245cc: ba 92 20 00 orcc %o0, 0, %i5 <== NOT EXECUTED 400245d0: 02 bf ff e4 be 40024560 <== NOT EXECUTED 400245d4: 01 00 00 00 nop <== NOT EXECUTED errno = err; 400245d8: 40 00 08 f6 call 400269b0 <__errno> <== NOT EXECUTED 400245dc: b8 10 3f ff mov -1, %i4 ! ffffffff <== NOT EXECUTED 400245e0: 10 bf ff e0 b 40024560 <== NOT EXECUTED 400245e4: fa 22 00 00 st %i5, [ %o0 ] <== NOT EXECUTED else iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; break; case F_GETFL: /* more flags (cloexec) */ ret = rtems_libio_to_fcntl_flags( iop->flags ); 400245e8: 7f ff 87 4b call 40006314 <== NOT EXECUTED 400245ec: 01 00 00 00 nop <== NOT EXECUTED 400245f0: b8 10 00 08 mov %o0, %i4 <== NOT EXECUTED /* * If we got this far successfully, then we give the optional * filesystem specific handler a chance to process this. */ if (ret >= 0) { 400245f4: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 400245f8: 36 bf ff ef bge,a 400245b4 <== NOT EXECUTED 400245fc: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40024600: 30 bf ff d8 b,a 40024560 <== 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 ) ) 40024604: c2 01 00 00 ld [ %g4 ], %g1 <== NOT EXECUTED 40024608: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4002460c: 22 80 00 2d be,a 400246c0 <== NOT EXECUTED 40024610: 90 0a 37 ff and %o0, -2049, %o0 <== NOT EXECUTED iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC; 40024614: 90 12 28 00 or %o0, 0x800, %o0 <== NOT EXECUTED 40024618: b8 10 20 00 clr %i4 <== NOT EXECUTED 4002461c: 10 bf ff e5 b 400245b0 <== NOT EXECUTED 40024620: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); break; case F_GETFD: /* get f_flags */ ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0); 40024624: 83 32 20 0b srl %o0, 0xb, %g1 <== NOT EXECUTED 40024628: 10 bf ff e2 b 400245b0 <== NOT EXECUTED 4002462c: b8 08 60 01 and %g1, 1, %i4 <== NOT EXECUTED * This switch should contain all the cases from POSIX. */ switch ( cmd ) { case F_DUPFD: /* dup */ fd2 = va_arg( ap, int ); 40024630: c6 01 00 00 ld [ %g4 ], %g3 <== NOT EXECUTED if ( fd2 ) 40024634: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40024638: 02 80 00 32 be 40024700 <== NOT EXECUTED 4002463c: 80 a3 00 03 cmp %o4, %g3 <== NOT EXECUTED diop = rtems_libio_iop( fd2 ); 40024640: 96 10 20 00 clr %o3 <== NOT EXECUTED 40024644: 18 80 00 22 bgu 400246cc <== NOT EXECUTED 40024648: 98 10 20 00 clr %o4 <== NOT EXECUTED } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 4002464c: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED break; } } diop->handlers = iop->handlers; diop->file_info = iop->file_info; 40024650: c6 06 20 2c ld [ %i0 + 0x2c ], %g3 <== NOT EXECUTED diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 40024654: c2 23 20 10 st %g1, [ %o4 + 0x10 ] <== NOT EXECUTED 40024658: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 <== NOT EXECUTED ret = (int) (diop - rtems_libio_iops); 4002465c: c8 07 61 44 ld [ %i5 + 0x144 ], %g4 <== NOT EXECUTED } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 40024660: c4 23 20 14 st %g2, [ %o4 + 0x14 ] <== NOT EXECUTED 40024664: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 40024668: da 06 20 30 ld [ %i0 + 0x30 ], %o5 <== NOT EXECUTED diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 4002466c: c2 23 20 18 st %g1, [ %o4 + 0x18 ] <== NOT EXECUTED 40024670: c4 06 20 1c ld [ %i0 + 0x1c ], %g2 <== NOT EXECUTED ret = (int) (diop - rtems_libio_iops); 40024674: 88 22 c0 04 sub %o3, %g4, %g4 <== NOT EXECUTED break; } } diop->handlers = iop->handlers; diop->file_info = iop->file_info; 40024678: c6 23 20 2c st %g3, [ %o4 + 0x2c ] <== NOT EXECUTED diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); 4002467c: 89 39 20 02 sra %g4, 2, %g4 <== NOT EXECUTED 40024680: 87 29 20 02 sll %g4, 2, %g3 <== NOT EXECUTED } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; 40024684: c4 23 20 1c st %g2, [ %o4 + 0x1c ] <== NOT EXECUTED ret = -1; break; } } diop->handlers = iop->handlers; 40024688: da 23 20 30 st %o5, [ %o4 + 0x30 ] <== NOT EXECUTED diop->file_info = iop->file_info; diop->flags = iop->flags; diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); 4002468c: 85 29 20 06 sll %g4, 6, %g2 <== NOT EXECUTED } } diop->handlers = iop->handlers; diop->file_info = iop->file_info; diop->flags = iop->flags; 40024690: d0 23 20 0c st %o0, [ %o4 + 0xc ] <== NOT EXECUTED diop->pathinfo = iop->pathinfo; ret = (int) (diop - rtems_libio_iops); 40024694: 84 20 80 03 sub %g2, %g3, %g2 <== NOT EXECUTED 40024698: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 4002469c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400246a0: 87 28 60 0c sll %g1, 0xc, %g3 <== NOT EXECUTED 400246a4: 82 00 40 03 add %g1, %g3, %g1 <== NOT EXECUTED 400246a8: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 400246ac: 83 28 60 04 sll %g1, 4, %g1 <== NOT EXECUTED 400246b0: 82 20 40 04 sub %g1, %g4, %g1 <== NOT EXECUTED 400246b4: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400246b8: 10 bf ff cf b 400245f4 <== NOT EXECUTED 400246bc: b8 21 00 01 sub %g4, %g1, %i4 <== NOT EXECUTED */ if ( va_arg( ap, int ) ) iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC; else iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; 400246c0: b8 10 20 00 clr %i4 <== NOT EXECUTED 400246c4: 10 bf ff bb b 400245b0 <== NOT EXECUTED 400246c8: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED switch ( cmd ) { case F_DUPFD: /* dup */ fd2 = va_arg( ap, int ); if ( fd2 ) diop = rtems_libio_iop( fd2 ); 400246cc: 85 28 e0 02 sll %g3, 2, %g2 <== NOT EXECUTED 400246d0: 83 28 e0 04 sll %g3, 4, %g1 <== NOT EXECUTED 400246d4: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400246d8: 82 00 40 03 add %g1, %g3, %g1 <== NOT EXECUTED 400246dc: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400246e0: 96 03 40 01 add %o5, %g1, %o3 <== NOT EXECUTED 400246e4: 10 bf ff da b 4002464c <== NOT EXECUTED 400246e8: 98 10 00 0b mov %o3, %o4 <== NOT EXECUTED int mask; int ret = 0; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 400246ec: 40 00 08 b1 call 400269b0 <__errno> <== NOT EXECUTED 400246f0: b8 10 3f ff mov -1, %i4 <== NOT EXECUTED 400246f4: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 400246f8: 10 bf ff 9a b 40024560 <== NOT EXECUTED 400246fc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fd2 = va_arg( ap, int ); if ( fd2 ) diop = rtems_libio_iop( fd2 ); else { /* allocate a file control block */ diop = rtems_libio_allocate(); 40024700: 7f ff 87 75 call 400064d4 <== NOT EXECUTED 40024704: 01 00 00 00 nop <== NOT EXECUTED if ( diop == 0 ) { 40024708: 98 92 20 00 orcc %o0, 0, %o4 <== NOT EXECUTED 4002470c: 02 bf ff 94 be 4002455c <== NOT EXECUTED 40024710: 96 10 00 0c mov %o4, %o3 <== NOT EXECUTED 40024714: 10 bf ff ce b 4002464c <== NOT EXECUTED 40024718: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 40003404 : } void free( void *ptr ) { 40003404: 9d e3 bf 98 save %sp, -104, %sp MSBUMP(free_calls, 1); if ( !ptr ) 40003408: 80 a6 20 00 cmp %i0, 0 4000340c: 02 80 00 19 be 40003470 40003410: 03 10 00 6b sethi %hi(0x4001ac00), %g1 /* * Do not attempt to free memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 40003414: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> 40003418: 80 a0 a0 03 cmp %g2, 3 4000341c: 12 80 00 0e bne 40003454 40003420: 03 10 00 6b sethi %hi(0x4001ac00), %g1 if ((_Thread_Dispatch_disable_level > 0) || (_ISR_Nest_level > 0)) { 40003424: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 40003428: 80 a0 a0 00 cmp %g2, 0 4000342c: 12 80 00 06 bne 40003444 40003430: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40003434: c4 00 62 54 ld [ %g1 + 0x254 ], %g2 ! 4001ae54 <_ISR_Nest_level> 40003438: 80 a0 a0 00 cmp %g2, 0 4000343c: 02 80 00 07 be 40003458 40003440: 37 10 00 6a sethi %hi(0x4001a800), %i3 Chain_Append(&RTEMS_Malloc_GC_list, (Chain_Node *)ptr); 40003444: b2 10 00 18 mov %i0, %i1 40003448: 31 10 00 6b sethi %hi(0x4001ac00), %i0 4000344c: 40 00 12 7d call 40007e40 <_Chain_Append> 40003450: 91 ee 20 30 restore %i0, 0x30, %o0 MSBUMP(lifetime_freed, size); } } #endif if ( !_Protected_heap_Free( &RTEMS_Malloc_Heap, ptr ) ) { 40003454: 37 10 00 6a sethi %hi(0x4001a800), %i3 <== NOT EXECUTED 40003458: 92 10 00 18 mov %i0, %o1 4000345c: 40 00 18 a9 call 40009700 <_Protected_heap_Free> 40003460: 90 16 e3 d4 or %i3, 0x3d4, %o0 40003464: 80 a2 20 00 cmp %o0, 0 40003468: 02 80 00 04 be 40003478 4000346c: 82 16 e3 d4 or %i3, 0x3d4, %g1 40003470: 81 c7 e0 08 ret 40003474: 81 e8 00 00 restore printk( "Program heap: free of bad pointer %p -- range %p - %p \n", 40003478: f6 00 60 1c ld [ %g1 + 0x1c ], %i3 <== NOT EXECUTED 4000347c: f4 00 60 18 ld [ %g1 + 0x18 ], %i2 <== NOT EXECUTED 40003480: b2 10 00 18 mov %i0, %i1 <== NOT EXECUTED 40003484: 31 10 00 64 sethi %hi(0x40019000), %i0 <== NOT EXECUTED 40003488: 40 00 03 c8 call 400043a8 <== NOT EXECUTED 4000348c: 91 ee 21 98 restore %i0, 0x198, %o0 <== NOT EXECUTED 40003490: 01 00 00 00 nop 4001a790 : * NOTE: this must be called with * thread dispatching disabled! */ static void free_user_env(void *venv) { 4001a790: 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 4001a794: 03 10 00 f9 sethi %hi(0x4003e400), %g1 <== NOT EXECUTED 4001a798: 82 10 62 24 or %g1, 0x224, %g1 ! 4003e624 <== NOT EXECUTED 4001a79c: 80 a6 00 01 cmp %i0, %g1 <== NOT EXECUTED 4001a7a0: 02 80 00 18 be 4001a800 <== NOT EXECUTED 4001a7a4: 01 00 00 00 nop <== NOT EXECUTED #ifdef HAVE_USERENV_REFCNT && --env->refcnt <= 0 #endif ) { rtems_filesystem_freenode( &env->current_directory); 4001a7a8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4001a7ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a7b0: 22 80 00 09 be,a 4001a7d4 <== NOT EXECUTED 4001a7b4: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 4001a7b8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001a7bc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a7c0: 22 80 00 05 be,a 4001a7d4 <== NOT EXECUTED 4001a7c4: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 4001a7c8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001a7cc: 90 06 20 04 add %i0, 4, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &env->root_directory); 4001a7d0: c2 06 20 1c ld [ %i0 + 0x1c ], %g1 <== NOT EXECUTED 4001a7d4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a7d8: 02 80 00 08 be 4001a7f8 <== NOT EXECUTED 4001a7dc: 01 00 00 00 nop <== NOT EXECUTED 4001a7e0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001a7e4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a7e8: 02 80 00 04 be 4001a7f8 <== NOT EXECUTED 4001a7ec: 01 00 00 00 nop <== NOT EXECUTED 4001a7f0: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001a7f4: 90 06 20 14 add %i0, 0x14, %o0 <== NOT EXECUTED free(env); 4001a7f8: 7f ff af 8e call 40006630 <== NOT EXECUTED 4001a7fc: 81 e8 00 00 restore <== NOT EXECUTED 4001a800: 81 c7 e0 08 ret <== NOT EXECUTED 4001a804: 81 e8 00 00 restore <== NOT EXECUTED 40018580 : int fstat( int fd, struct stat *sbuf ) { 40018580: 9d e3 bf 98 save %sp, -104, %sp /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) 40018584: 92 96 60 00 orcc %i1, 0, %o1 40018588: 02 80 00 3f be 40018684 4001858c: 03 10 00 67 sethi %hi(0x40019c00), %g1 /* * Now process the stat() request. */ iop = rtems_libio_iop( fd ); 40018590: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 40019c3c 40018594: 80 a6 00 02 cmp %i0, %g2 40018598: 1a 80 00 2f bcc 40018654 4001859c: 03 10 00 6a sethi %hi(0x4001a800), %g1 400185a0: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4001abc8 400185a4: 85 2e 20 02 sll %i0, 2, %g2 400185a8: 83 2e 20 04 sll %i0, 4, %g1 400185ac: 82 20 40 02 sub %g1, %g2, %g1 400185b0: 82 00 40 18 add %g1, %i0, %g1 400185b4: 83 28 60 02 sll %g1, 2, %g1 400185b8: 90 00 40 03 add %g1, %g3, %o0 rtems_libio_check_fd( fd ); rtems_libio_check_is_open(iop); 400185bc: c4 02 20 0c ld [ %o0 + 0xc ], %g2 400185c0: 80 88 a1 00 btst 0x100, %g2 400185c4: 02 80 00 24 be 40018654 400185c8: 01 00 00 00 nop if ( !iop->handlers ) 400185cc: c2 02 20 30 ld [ %o0 + 0x30 ], %g1 400185d0: 80 a0 60 00 cmp %g1, 0 400185d4: 02 80 00 20 be 40018654 400185d8: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( EBADF ); if ( !iop->handlers->fstat_h ) 400185dc: c2 00 60 18 ld [ %g1 + 0x18 ], %g1 400185e0: 80 a0 60 00 cmp %g1, 0 400185e4: 02 80 00 22 be 4001866c 400185e8: 01 00 00 00 nop /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( sbuf, 0, sizeof(struct stat) ); 400185ec: c0 22 40 00 clr [ %o1 ] 400185f0: c0 22 60 04 clr [ %o1 + 4 ] 400185f4: c0 22 60 08 clr [ %o1 + 8 ] 400185f8: c0 22 60 0c clr [ %o1 + 0xc ] 400185fc: c0 22 60 10 clr [ %o1 + 0x10 ] 40018600: c0 22 60 14 clr [ %o1 + 0x14 ] 40018604: c0 22 60 18 clr [ %o1 + 0x18 ] 40018608: c0 22 60 1c clr [ %o1 + 0x1c ] 4001860c: c0 22 60 20 clr [ %o1 + 0x20 ] 40018610: c0 22 60 24 clr [ %o1 + 0x24 ] 40018614: c0 22 60 28 clr [ %o1 + 0x28 ] 40018618: c0 22 60 2c clr [ %o1 + 0x2c ] 4001861c: c0 22 60 30 clr [ %o1 + 0x30 ] 40018620: c0 22 60 34 clr [ %o1 + 0x34 ] 40018624: c0 22 60 38 clr [ %o1 + 0x38 ] 40018628: c0 22 60 3c clr [ %o1 + 0x3c ] 4001862c: c0 22 60 40 clr [ %o1 + 0x40 ] 40018630: c0 22 60 44 clr [ %o1 + 0x44 ] 40018634: c0 22 60 48 clr [ %o1 + 0x48 ] 40018638: c0 22 60 4c clr [ %o1 + 0x4c ] return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf ); 4001863c: c2 02 20 30 ld [ %o0 + 0x30 ], %g1 40018640: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 40018644: 9f c0 80 00 call %g2 40018648: 90 02 20 10 add %o0, 0x10, %o0 } 4001864c: 81 c7 e0 08 ret 40018650: 91 e8 00 08 restore %g0, %o0, %o0 iop = rtems_libio_iop( fd ); rtems_libio_check_fd( fd ); rtems_libio_check_is_open(iop); if ( !iop->handlers ) rtems_set_errno_and_return_minus_one( EBADF ); 40018654: 7f ff db 1a call 4000f2bc <__errno> <== NOT EXECUTED 40018658: 01 00 00 00 nop <== NOT EXECUTED 4001865c: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 40018660: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018664: 10 bf ff fa b 4001864c <== NOT EXECUTED 40018668: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED if ( !iop->handlers->fstat_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 4001866c: 7f ff db 14 call 4000f2bc <__errno> <== NOT EXECUTED 40018670: 01 00 00 00 nop <== NOT EXECUTED 40018674: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40018678: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001867c: 10 bf ff f4 b 4001864c <== NOT EXECUTED 40018680: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) rtems_set_errno_and_return_minus_one( EFAULT ); 40018684: 7f ff db 0e call 4000f2bc <__errno> <== NOT EXECUTED 40018688: 01 00 00 00 nop <== NOT EXECUTED 4001868c: 82 10 20 0e mov 0xe, %g1 ! e <== NOT EXECUTED 40018690: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018694: 10 bf ff ee b 4001864c <== NOT EXECUTED 40018698: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 4000d07c : int ftruncate( int fd, off_t length ) { 4000d07c: 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 ); 4000d080: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000d084: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 40019c3c <== NOT EXECUTED 4000d088: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 4000d08c: 1a 80 00 2b bcc 4000d138 <== NOT EXECUTED 4000d090: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 4000d094: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4001abc8 <== NOT EXECUTED 4000d098: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 4000d09c: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 4000d0a0: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4000d0a4: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4000d0a8: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4000d0ac: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 4000d0b0: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED 4000d0b4: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED 4000d0b8: 02 80 00 20 be 4000d138 <== NOT EXECUTED 4000d0bc: 01 00 00 00 nop <== NOT EXECUTED /* * Make sure we are not working on a directory */ loc = iop->pathinfo; 4000d0c0: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED 4000d0c4: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED 4000d0c8: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 <== NOT EXECUTED 4000d0cc: c4 27 bf ec st %g2, [ %fp + -20 ] <== NOT EXECUTED 4000d0d0: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 <== NOT EXECUTED 4000d0d4: c2 27 bf f0 st %g1, [ %fp + -16 ] <== NOT EXECUTED 4000d0d8: c4 06 20 1c ld [ %i0 + 0x1c ], %g2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 4000d0dc: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 4000d0e0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d0e4: 02 80 00 1b be 4000d150 <== NOT EXECUTED 4000d0e8: c4 27 bf f4 st %g2, [ %fp + -12 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) 4000d0ec: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000d0f0: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 4000d0f4: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4000d0f8: 02 80 00 22 be 4000d180 <== NOT EXECUTED 4000d0fc: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 4000d100: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000d104: 80 88 60 04 btst 4, %g1 <== NOT EXECUTED 4000d108: 02 80 00 18 be 4000d168 <== NOT EXECUTED 4000d10c: 01 00 00 00 nop <== NOT EXECUTED if ( !iop->handlers->ftruncate_h ) 4000d110: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4000d114: c2 00 60 20 ld [ %g1 + 0x20 ], %g1 <== NOT EXECUTED 4000d118: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d11c: 02 80 00 0d be 4000d150 <== NOT EXECUTED 4000d120: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); return (*iop->handlers->ftruncate_h)( iop, length ); 4000d124: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000d128: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000d12c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } 4000d130: 81 c7 e0 08 ret <== NOT EXECUTED 4000d134: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED rtems_libio_t *iop; rtems_filesystem_location_info_t loc; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 4000d138: 40 00 08 61 call 4000f2bc <__errno> <== NOT EXECUTED 4000d13c: 01 00 00 00 nop <== NOT EXECUTED 4000d140: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 4000d144: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d148: 10 bf ff fa b 4000d130 <== NOT EXECUTED 4000d14c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); if ( !iop->handlers->ftruncate_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 4000d150: 40 00 08 5b call 4000f2bc <__errno> <== NOT EXECUTED 4000d154: 01 00 00 00 nop <== NOT EXECUTED 4000d158: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4000d15c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d160: 10 bf ff f4 b 4000d130 <== NOT EXECUTED 4000d164: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) rtems_set_errno_and_return_minus_one( EISDIR ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 4000d168: 40 00 08 55 call 4000f2bc <__errno> <== NOT EXECUTED 4000d16c: 01 00 00 00 nop <== NOT EXECUTED 4000d170: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4000d174: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d178: 10 bf ff ee b 4000d130 <== NOT EXECUTED 4000d17c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED loc = iop->pathinfo; if ( !loc.ops->node_type_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) rtems_set_errno_and_return_minus_one( EISDIR ); 4000d180: 40 00 08 4f call 4000f2bc <__errno> <== NOT EXECUTED 4000d184: 01 00 00 00 nop <== NOT EXECUTED 4000d188: 82 10 20 15 mov 0x15, %g1 ! 15 <== NOT EXECUTED 4000d18c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d190: 10 bf ff e8 b 4000d130 <== NOT EXECUTED 4000d194: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 4001974c : char * getcwd (pt, size) char *pt; size_t size; { 4001974c: 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) 40019750: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40019754: 02 80 00 fa be 40019b3c <== NOT EXECUTED 40019758: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED if (!size) { errno = EINVAL; return (char *) NULL; } ept = pt + size; 4001975c: b6 10 20 00 clr %i3 <== NOT EXECUTED */ if (pt) { ptsize = 0; if (!size) 40019760: 02 80 00 f1 be 40019b24 <== NOT EXECUTED 40019764: b2 06 00 19 add %i0, %i1, %i1 <== NOT EXECUTED return (char *) NULL; } ept = pt + ptsize; } bpt = ept - 1; *bpt = '\0'; 40019768: 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))) 4001976c: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 40019770: 7f ff b3 d9 call 400066d4 <== NOT EXECUTED 40019774: b8 06 7f ff add %i1, -1, %i4 <== NOT EXECUTED 40019778: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 4001977c: 02 80 00 0c be 400197ac <== NOT EXECUTED 40019780: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; up[1] = '\0'; 40019784: c0 2c 60 01 clrb [ %l1 + 1 ] <== NOT EXECUTED { goto err; } eup = up + MAXPATHLEN; bup = up; up[0] = '.'; 40019788: c2 2c 40 00 stb %g1, [ %l1 ] <== NOT EXECUTED up[1] = '\0'; /* Save root values, so know when to stop. */ if (stat ("/", &s)) 4001978c: ae 07 bf a8 add %fp, -88, %l7 <== NOT EXECUTED 40019790: 11 10 00 e1 sethi %hi(0x40038400), %o0 <== NOT EXECUTED 40019794: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 40019798: 7f ff b8 93 call 400079e4 <== NOT EXECUTED 4001979c: 90 12 22 98 or %o0, 0x298, %o0 <== NOT EXECUTED 400197a0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400197a4: 02 80 00 10 be 400197e4 <== NOT EXECUTED 400197a8: c4 1f bf a8 ldd [ %fp + -88 ], %g2 <== NOT EXECUTED /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); if (ptsize) 400197ac: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 400197b0: 12 80 00 06 bne 400197c8 <== NOT EXECUTED 400197b4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED free (pt); free (up); 400197b8: 7f ff b3 9e call 40006630 <== NOT EXECUTED 400197bc: b0 10 20 00 clr %i0 <== NOT EXECUTED 400197c0: 81 c7 e0 08 ret <== NOT EXECUTED 400197c4: 81 e8 00 00 restore <== NOT EXECUTED err: if(dir) (void) _closedir (dir); if (ptsize) free (pt); 400197c8: 7f ff b3 9a call 40006630 <== NOT EXECUTED 400197cc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 400197d0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400197d4: 7f ff b3 97 call 40006630 <== NOT EXECUTED 400197d8: b0 10 20 00 clr %i0 <== NOT EXECUTED 400197dc: 81 c7 e0 08 ret <== NOT EXECUTED 400197e0: 81 e8 00 00 restore <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 400197e4: 82 04 64 00 add %l1, 0x400, %g1 <== NOT EXECUTED up[1] = '\0'; /* Save root values, so know when to stop. */ if (stat ("/", &s)) goto err; root_dev = s.st_dev; 400197e8: c4 3f bf 98 std %g2, [ %fp + -104 ] <== NOT EXECUTED root_ino = s.st_ino; 400197ec: c6 07 bf b0 ld [ %fp + -80 ], %g3 <== NOT EXECUTED if (!(up = (char *) malloc (upsize = 1024 - 4))) { goto err; } eup = up + MAXPATHLEN; 400197f0: 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. */ 400197f4: 40 00 34 6f call 400269b0 <__errno> <== NOT EXECUTED 400197f8: c6 27 bf a0 st %g3, [ %fp + -96 ] <== NOT EXECUTED 400197fc: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 40019800: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED 40019804: a8 10 00 11 mov %l1, %l4 <== NOT EXECUTED 40019808: c4 27 bf 94 st %g2, [ %fp + -108 ] <== NOT EXECUTED 4001980c: b4 10 23 fc mov 0x3fc, %i2 <== NOT EXECUTED for (first = 1;; first = 0) { /* Stat the current level. */ if (_stat (up, &s)) 40019810: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40019814: 7f ff b8 74 call 400079e4 <== NOT EXECUTED 40019818: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 4001981c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019820: 12 bf ff e3 bne 400197ac <== NOT EXECUTED 40019824: e4 1f bf a8 ldd [ %fp + -88 ], %l2 <== NOT EXECUTED /* Save current node values. */ ino = s.st_ino; dev = s.st_dev; /* Check for reaching root. */ if (root_dev == dev && root_ino == ino) 40019828: c6 07 bf 98 ld [ %fp + -104 ], %g3 <== NOT EXECUTED 4001982c: 80 a0 c0 12 cmp %g3, %l2 <== NOT EXECUTED 40019830: 02 80 00 a9 be 40019ad4 <== NOT EXECUTED 40019834: fa 07 bf b0 ld [ %fp + -80 ], %i5 <== NOT EXECUTED * Build pointer to the parent directory, allocating memory * as necessary. Max length is 3 for "../", the largest * possible component name, plus a trailing NULL. */ if (bup + 3 + MAXNAMLEN + 1 >= eup) 40019838: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 4001983c: 82 05 24 04 add %l4, 0x404, %g1 <== NOT EXECUTED 40019840: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40019844: 08 80 00 5a bleu 400199ac <== NOT EXECUTED 40019848: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED goto err; } bup = up; eup = up + upsize; } *bup++ = '.'; 4001984c: 82 10 20 2e mov 0x2e, %g1 <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; 40019850: c0 2d 20 02 clrb [ %l4 + 2 ] <== NOT EXECUTED } bup = up; eup = up + upsize; } *bup++ = '.'; *bup++ = '.'; 40019854: c2 2d 20 01 stb %g1, [ %l4 + 1 ] <== NOT EXECUTED goto err; } bup = up; eup = up + upsize; } *bup++ = '.'; 40019858: c2 2d 00 00 stb %g1, [ %l4 ] <== NOT EXECUTED *bup++ = '.'; *bup = '\0'; /* Open and stat parent directory. */ if (!(dir = _opendir (up)) || _fstat (__dirfd (dir), &s)) 4001985c: 40 00 03 a8 call 4001a6fc <== NOT EXECUTED 40019860: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40019864: aa 92 20 00 orcc %o0, 0, %l5 <== NOT EXECUTED 40019868: 02 bf ff d2 be 400197b0 <== NOT EXECUTED 4001986c: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 40019870: d0 05 40 00 ld [ %l5 ], %o0 <== NOT EXECUTED 40019874: 40 00 2b b1 call 40024738 <== NOT EXECUTED 40019878: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 4001987c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019880: 12 80 00 39 bne 40019964 <== NOT EXECUTED 40019884: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED goto err; /* Add trailing slash for next directory. */ *bup++ = '/'; 40019888: c2 2d 20 02 stb %g1, [ %l4 + 2 ] <== NOT EXECUTED * the inode number in the directory is for the entry in the * parent directory, not the inode number of the mounted file. */ save_errno = 0; if (s.st_dev == dev) 4001988c: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED 40019890: 80 a0 40 12 cmp %g1, %l2 <== NOT EXECUTED 40019894: 02 80 00 4f be 400199d0 <== NOT EXECUTED 40019898: a8 05 20 03 add %l4, 3, %l4 <== NOT EXECUTED 4001989c: ac 10 20 00 clr %l6 <== NOT EXECUTED } } else for (;;) { if (!(dp = _readdir (dir))) 400198a0: 40 00 04 59 call 4001aa04 <== NOT EXECUTED 400198a4: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED 400198a8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400198ac: 02 80 00 28 be 4001994c <== NOT EXECUTED 400198b0: 01 00 00 00 nop <== NOT EXECUTED goto notfound; if (ISDOT (dp)) 400198b4: c2 4a 20 0c ldsb [ %o0 + 0xc ], %g1 <== NOT EXECUTED 400198b8: 80 a0 60 2e cmp %g1, 0x2e <== NOT EXECUTED 400198bc: 12 80 00 0d bne 400198f0 <== NOT EXECUTED 400198c0: a0 02 20 0c add %o0, 0xc, %l0 <== NOT EXECUTED 400198c4: c2 4a 20 0d ldsb [ %o0 + 0xd ], %g1 <== NOT EXECUTED 400198c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400198cc: 02 bf ff f5 be 400198a0 <== NOT EXECUTED 400198d0: 05 00 3f ff sethi %hi(0xfffc00), %g2 <== NOT EXECUTED 400198d4: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 400198d8: 07 00 0b 80 sethi %hi(0x2e0000), %g3 <== NOT EXECUTED 400198dc: 84 10 a3 00 or %g2, 0x300, %g2 <== NOT EXECUTED 400198e0: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 400198e4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400198e8: 02 bf ff ee be 400198a0 <== NOT EXECUTED 400198ec: 01 00 00 00 nop <== NOT EXECUTED continue; bcopy (dp->d_name, bup, strlen (dp->d_name) + 1); 400198f0: 40 00 49 18 call 4002bd50 <== NOT EXECUTED 400198f4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400198f8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400198fc: 94 02 20 01 add %o0, 1, %o2 <== NOT EXECUTED 40019900: 40 00 3a fe call 400284f8 <== NOT EXECUTED 40019904: 90 10 00 14 mov %l4, %o0 <== NOT EXECUTED /* Save the first error for later. */ if (stat (up, &s)) 40019908: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4001990c: 7f ff b8 36 call 400079e4 <== NOT EXECUTED 40019910: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 40019914: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019918: 02 80 00 17 be 40019974 <== NOT EXECUTED 4001991c: c2 07 bf a8 ld [ %fp + -88 ], %g1 <== NOT EXECUTED { if (!save_errno) 40019920: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 40019924: 02 80 00 1e be 4001999c <== NOT EXECUTED 40019928: 01 00 00 00 nop <== NOT EXECUTED save_errno = errno; errno = 0; 4001992c: 40 00 34 21 call 400269b0 <__errno> <== NOT EXECUTED 40019930: 01 00 00 00 nop <== NOT EXECUTED 40019934: c0 22 00 00 clr [ %o0 ] <== NOT EXECUTED } } else for (;;) { if (!(dp = _readdir (dir))) 40019938: 40 00 04 33 call 4001aa04 <== NOT EXECUTED 4001993c: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED 40019940: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019944: 32 bf ff dd bne,a 400198b8 <== NOT EXECUTED 40019948: c2 4a 20 0c ldsb [ %o0 + 0xc ], %g1 <== NOT EXECUTED * If readdir set errno, use it, not any saved error; otherwise, * didn't find the current directory in its parent directory, set * errno to ENOENT. */ if (!errno) 4001994c: 40 00 34 19 call 400269b0 <__errno> <== NOT EXECUTED 40019950: 01 00 00 00 nop <== NOT EXECUTED 40019954: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40019958: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001995c: 02 80 00 57 be 40019ab8 <== NOT EXECUTED 40019960: 01 00 00 00 nop <== NOT EXECUTED errno = save_errno ? save_errno : ENOENT; /* FALLTHROUGH */ err: if(dir) (void) _closedir (dir); 40019964: 7f ff fe 91 call 400193a8 <== NOT EXECUTED 40019968: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED if (ptsize) 4001996c: 10 bf ff 91 b 400197b0 <== NOT EXECUTED 40019970: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED if (!save_errno) save_errno = errno; errno = 0; continue; } if (s.st_dev == dev && s.st_ino == ino) 40019974: 80 a0 40 12 cmp %g1, %l2 <== NOT EXECUTED 40019978: 12 bf ff ca bne 400198a0 <== NOT EXECUTED 4001997c: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 40019980: 80 a0 40 13 cmp %g1, %l3 <== NOT EXECUTED 40019984: 12 bf ff c7 bne 400198a0 <== NOT EXECUTED 40019988: c2 07 bf b0 ld [ %fp + -80 ], %g1 <== NOT EXECUTED 4001998c: 80 a0 40 1d cmp %g1, %i5 <== NOT EXECUTED 40019990: 12 bf ff c4 bne 400198a0 <== NOT EXECUTED 40019994: 01 00 00 00 nop <== NOT EXECUTED 40019998: 30 80 00 1b b,a 40019a04 <== NOT EXECUTED /* Save the first error for later. */ if (stat (up, &s)) { if (!save_errno) save_errno = errno; 4001999c: 40 00 34 05 call 400269b0 <__errno> <== NOT EXECUTED 400199a0: 01 00 00 00 nop <== NOT EXECUTED 400199a4: 10 bf ff e2 b 4001992c <== NOT EXECUTED 400199a8: ec 02 00 00 ld [ %o0 ], %l6 <== NOT EXECUTED * possible component name, plus a trailing NULL. */ if (bup + 3 + MAXNAMLEN + 1 >= eup) { if (!(up = (char *) realloc (up, upsize *= 2))) 400199ac: b5 2e a0 01 sll %i2, 1, %i2 <== NOT EXECUTED 400199b0: 7f ff b3 9a call 40006818 <== NOT EXECUTED 400199b4: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 400199b8: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 400199bc: 02 bf ff 7c be 400197ac <== NOT EXECUTED 400199c0: 82 04 40 1a add %l1, %i2, %g1 <== NOT EXECUTED { goto err; } bup = up; eup = up + upsize; 400199c4: a8 10 00 11 mov %l1, %l4 <== NOT EXECUTED 400199c8: 10 bf ff a1 b 4001984c <== NOT EXECUTED 400199cc: c2 27 bf a4 st %g1, [ %fp + -92 ] <== NOT EXECUTED * the inode number in the directory is for the entry in the * parent directory, not the inode number of the mounted file. */ save_errno = 0; if (s.st_dev == dev) 400199d0: c2 07 bf ac ld [ %fp + -84 ], %g1 <== NOT EXECUTED 400199d4: 80 a0 40 13 cmp %g1, %l3 <== NOT EXECUTED 400199d8: 12 bf ff b2 bne 400198a0 <== NOT EXECUTED 400199dc: ac 10 20 00 clr %l6 <== NOT EXECUTED { for (;;) { if (!(dp = _readdir (dir))) 400199e0: 40 00 04 09 call 4001aa04 <== NOT EXECUTED 400199e4: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED 400199e8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400199ec: 02 bf ff d8 be 4001994c <== NOT EXECUTED 400199f0: ac 10 20 00 clr %l6 <== NOT EXECUTED goto notfound; if (dp->d_ino == ino) 400199f4: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 400199f8: 80 a0 40 1d cmp %g1, %i5 <== NOT EXECUTED 400199fc: 12 bf ff f9 bne 400199e0 <== NOT EXECUTED 40019a00: a0 02 20 0c add %o0, 0xc, %l0 <== NOT EXECUTED /* * Check for length of the current name, preceding slash, * leading slash. */ if (bpt - pt <= strlen (dp->d_name) + (first ? 1 : 2)) 40019a04: 40 00 48 d3 call 4002bd50 <== NOT EXECUTED 40019a08: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40019a0c: c2 07 bf 94 ld [ %fp + -108 ], %g1 <== NOT EXECUTED 40019a10: a4 27 00 18 sub %i4, %i0, %l2 <== NOT EXECUTED 40019a14: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40019a18: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED 40019a1c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40019a20: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40019a24: 80 a4 80 01 cmp %l2, %g1 <== NOT EXECUTED 40019a28: 18 80 00 13 bgu 40019a74 <== NOT EXECUTED 40019a2c: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED { size_t len, off; if (!ptsize) 40019a30: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 40019a34: 02 80 00 4a be 40019b5c <== NOT EXECUTED 40019a38: 01 00 00 00 nop <== NOT EXECUTED errno = ERANGE; goto err; } off = bpt - pt; len = ept - bpt; if (!(pt = (char *) realloc (pt, ptsize *= 2))) 40019a3c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019a40: b7 2e e0 01 sll %i3, 1, %i3 <== NOT EXECUTED 40019a44: 7f ff b3 75 call 40006818 <== NOT EXECUTED 40019a48: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 40019a4c: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40019a50: 02 bf ff c5 be 40019964 <== NOT EXECUTED 40019a54: 82 26 40 1c sub %i1, %i4, %g1 <== NOT EXECUTED { goto err; } bpt = pt + off; ept = pt + ptsize; (void) bcopy (bpt, ept - len, len); 40019a58: 92 06 00 12 add %i0, %l2, %o1 <== NOT EXECUTED if (!(pt = (char *) realloc (pt, ptsize *= 2))) { goto err; } bpt = pt + off; ept = pt + ptsize; 40019a5c: b2 06 00 1b add %i0, %i3, %i1 <== NOT EXECUTED (void) bcopy (bpt, ept - len, len); 40019a60: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 40019a64: b8 26 40 01 sub %i1, %g1, %i4 <== NOT EXECUTED 40019a68: 40 00 3a a4 call 400284f8 <== NOT EXECUTED 40019a6c: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED bpt = ept - len; } if (!first) 40019a70: c4 07 bf 94 ld [ %fp + -108 ], %g2 <== NOT EXECUTED 40019a74: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40019a78: 12 80 00 04 bne 40019a88 <== NOT EXECUTED 40019a7c: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED *--bpt = '/'; 40019a80: b8 07 3f ff add %i4, -1, %i4 <== NOT EXECUTED 40019a84: c2 2f 00 00 stb %g1, [ %i4 ] <== NOT EXECUTED bpt -= strlen (dp->d_name); 40019a88: 40 00 48 b2 call 4002bd50 <== NOT EXECUTED 40019a8c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); 40019a90: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 40019a94: 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); 40019a98: b8 27 00 08 sub %i4, %o0, %i4 <== NOT EXECUTED bcopy (dp->d_name, bpt, strlen (dp->d_name)); (void) _closedir (dir); dir = 0; /* Truncate any file name. */ *bup = '\0'; 40019a9c: 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)); 40019aa0: 40 00 3a 96 call 400284f8 <== NOT EXECUTED 40019aa4: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED (void) _closedir (dir); 40019aa8: 7f ff fe 40 call 400193a8 <== NOT EXECUTED 40019aac: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED dir = 0; /* Truncate any file name. */ *bup = '\0'; 40019ab0: 10 bf ff 58 b 40019810 <== NOT EXECUTED 40019ab4: c0 2d 00 00 clrb [ %l4 ] <== NOT EXECUTED * didn't find the current directory in its parent directory, set * errno to ENOENT. */ if (!errno) errno = save_errno ? save_errno : ENOENT; 40019ab8: 40 00 33 be call 400269b0 <__errno> <== NOT EXECUTED 40019abc: 01 00 00 00 nop <== NOT EXECUTED 40019ac0: 80 a5 a0 00 cmp %l6, 0 <== NOT EXECUTED 40019ac4: 22 80 00 16 be,a 40019b1c <== NOT EXECUTED 40019ac8: ac 10 20 02 mov 2, %l6 <== NOT EXECUTED 40019acc: 10 bf ff a6 b 40019964 <== NOT EXECUTED 40019ad0: ec 22 00 00 st %l6, [ %o0 ] <== NOT EXECUTED /* Save current node values. */ ino = s.st_ino; dev = s.st_dev; /* Check for reaching root. */ if (root_dev == dev && root_ino == ino) 40019ad4: c2 07 bf 9c ld [ %fp + -100 ], %g1 <== NOT EXECUTED 40019ad8: 80 a0 40 13 cmp %g1, %l3 <== NOT EXECUTED 40019adc: 12 bf ff 58 bne 4001983c <== NOT EXECUTED 40019ae0: c6 07 bf a4 ld [ %fp + -92 ], %g3 <== NOT EXECUTED 40019ae4: c4 07 bf a0 ld [ %fp + -96 ], %g2 <== NOT EXECUTED 40019ae8: 80 a0 80 1d cmp %g2, %i5 <== NOT EXECUTED 40019aec: 12 bf ff 55 bne 40019840 <== NOT EXECUTED 40019af0: 82 05 24 04 add %l4, 0x404, %g1 <== NOT EXECUTED { *--bpt = '/'; 40019af4: 82 10 20 2f mov 0x2f, %g1 <== NOT EXECUTED 40019af8: 92 07 3f ff add %i4, -1, %o1 <== NOT EXECUTED 40019afc: c2 2f 3f ff stb %g1, [ %i4 + -1 ] <== NOT EXECUTED /* * It's unclear that it's a requirement to copy the * path to the beginning of the buffer, but it's always * been that way and stuff would probably break. */ (void) bcopy (bpt, pt, ept - bpt); 40019b00: 94 26 40 09 sub %i1, %o1, %o2 <== NOT EXECUTED 40019b04: 40 00 3a 7d call 400284f8 <== NOT EXECUTED 40019b08: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free (up); 40019b0c: 7f ff b2 c9 call 40006630 <== NOT EXECUTED 40019b10: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40019b14: 81 c7 e0 08 ret <== NOT EXECUTED 40019b18: 81 e8 00 00 restore <== NOT EXECUTED * didn't find the current directory in its parent directory, set * errno to ENOENT. */ if (!errno) errno = save_errno ? save_errno : ENOENT; 40019b1c: 10 bf ff 92 b 40019964 <== NOT EXECUTED 40019b20: ec 22 00 00 st %l6, [ %o0 ] <== NOT EXECUTED if (pt) { ptsize = 0; if (!size) { errno = EINVAL; 40019b24: 40 00 33 a3 call 400269b0 <__errno> <== NOT EXECUTED 40019b28: b0 10 20 00 clr %i0 <== NOT EXECUTED 40019b2c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40019b30: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40019b34: 81 c7 e0 08 ret <== NOT EXECUTED 40019b38: 81 e8 00 00 restore <== NOT EXECUTED } ept = pt + size; } else { if (!(pt = (char *) malloc (ptsize = 1024 - 4))) 40019b3c: 7f ff b2 e6 call 400066d4 <== NOT EXECUTED 40019b40: 90 10 23 fc mov 0x3fc, %o0 <== NOT EXECUTED 40019b44: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019b48: 02 bf ff 1e be 400197c0 <== NOT EXECUTED 40019b4c: b6 10 23 fc mov 0x3fc, %i3 <== NOT EXECUTED 40019b50: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED { return (char *) NULL; } ept = pt + ptsize; 40019b54: 10 bf ff 05 b 40019768 <== NOT EXECUTED 40019b58: b2 02 23 fc add %o0, 0x3fc, %i1 <== NOT EXECUTED { size_t len, off; if (!ptsize) { errno = ERANGE; 40019b5c: 40 00 33 95 call 400269b0 <__errno> <== NOT EXECUTED 40019b60: 01 00 00 00 nop <== NOT EXECUTED 40019b64: 82 10 20 22 mov 0x22, %g1 ! 22 <== NOT EXECUTED 40019b68: 10 bf ff 7f b 40019964 <== NOT EXECUTED 40019b6c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4002486c : int getdents( int dd_fd, char *dd_buf, int dd_len ) { 4002486c: 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 ); 40024870: 03 10 00 ee sethi %hi(0x4003b800), %g1 <== NOT EXECUTED 40024874: c4 00 61 0c ld [ %g1 + 0x10c ], %g2 ! 4003b90c <== NOT EXECUTED int getdents( int dd_fd, char *dd_buf, int dd_len ) { 40024878: 88 10 00 18 mov %i0, %g4 <== NOT EXECUTED /* * Get the file control block structure associated with the file descriptor */ iop = rtems_libio_iop( dd_fd ); 4002487c: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 40024880: 1a 80 00 0a bcc 400248a8 <== NOT EXECUTED 40024884: b0 10 20 00 clr %i0 <== NOT EXECUTED 40024888: 03 10 00 f8 sethi %hi(0x4003e000), %g1 <== NOT EXECUTED 4002488c: c6 00 61 44 ld [ %g1 + 0x144 ], %g3 ! 4003e144 <== NOT EXECUTED 40024890: 85 29 20 02 sll %g4, 2, %g2 <== NOT EXECUTED 40024894: 83 29 20 04 sll %g4, 4, %g1 <== NOT EXECUTED 40024898: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4002489c: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 400248a0: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400248a4: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED /* * Make sure we are working on a directory */ loc = iop->pathinfo; 400248a8: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED 400248ac: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED 400248b0: c4 06 20 14 ld [ %i0 + 0x14 ], %g2 <== NOT EXECUTED 400248b4: c4 27 bf ec st %g2, [ %fp + -20 ] <== NOT EXECUTED 400248b8: c2 06 20 18 ld [ %i0 + 0x18 ], %g1 <== NOT EXECUTED 400248bc: c2 27 bf f0 st %g1, [ %fp + -16 ] <== NOT EXECUTED 400248c0: c4 06 20 1c ld [ %i0 + 0x1c ], %g2 <== NOT EXECUTED if ( !loc.ops->node_type_h ) 400248c4: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 400248c8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400248cc: 02 80 00 17 be 40024928 <== NOT EXECUTED 400248d0: c4 27 bf f4 st %g2, [ %fp + -12 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) 400248d4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400248d8: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED 400248dc: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 400248e0: 12 80 00 0c bne 40024910 <== NOT EXECUTED 400248e4: 01 00 00 00 nop <== NOT EXECUTED /* * Return the number of bytes that were actually transfered as a result * of the read attempt. */ if ( !iop->handlers->read_h ) 400248e8: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 400248ec: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 400248f0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400248f4: 02 80 00 0d be 40024928 <== NOT EXECUTED 400248f8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); return (*iop->handlers->read_h)( iop, dd_buf, dd_len ); 400248fc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40024900: 9f c0 40 00 call %g1 <== NOT EXECUTED 40024904: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED } 40024908: 81 c7 e0 08 ret <== NOT EXECUTED 4002490c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED loc = iop->pathinfo; if ( !loc.ops->node_type_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) rtems_set_errno_and_return_minus_one( ENOTDIR ); 40024910: 40 00 08 28 call 400269b0 <__errno> <== NOT EXECUTED 40024914: 01 00 00 00 nop <== NOT EXECUTED 40024918: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 4002491c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40024920: 10 bf ff fa b 40024908 <== NOT EXECUTED 40024924: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED * Return the number of bytes that were actually transfered as a result * of the read attempt. */ if ( !iop->handlers->read_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40024928: 40 00 08 22 call 400269b0 <__errno> <== NOT EXECUTED 4002492c: 01 00 00 00 nop <== NOT EXECUTED 40024930: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40024934: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40024938: 10 bf ff f4 b 40024908 <== NOT EXECUTED 4002493c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40019b70 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getegid( void ) { 40019b70: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 40019b74: c4 00 61 20 ld [ %g1 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED return _POSIX_types_Egid; } 40019b78: 81 c3 e0 08 retl <== NOT EXECUTED 40019b7c: d0 10 a0 2e lduh [ %g2 + 0x2e ], %o0 <== NOT EXECUTED 40019b80 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t geteuid( void ) { 40019b80: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 40019b84: c4 00 61 20 ld [ %g1 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED return _POSIX_types_Euid; } 40019b88: 81 c3 e0 08 retl <== NOT EXECUTED 40019b8c: d0 10 a0 2c lduh [ %g2 + 0x2c ], %o0 <== NOT EXECUTED 40019b90 : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ gid_t getgid( void ) { 40019b90: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 40019b94: c4 00 61 20 ld [ %g1 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED return _POSIX_types_Gid; } 40019b98: 81 c3 e0 08 retl <== NOT EXECUTED 40019b9c: d0 10 a0 2a lduh [ %g2 + 0x2a ], %o0 <== NOT EXECUTED 4001a268 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 4001a268: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 4001a26c: 7f ff ff b3 call 4001a138 <== NOT EXECUTED 4001a270: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/group", "r")) == NULL) { 4001a274: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001a278: 13 10 00 ed sethi %hi(0x4003b400), %o1 <== NOT EXECUTED 4001a27c: 90 12 21 d0 or %o0, 0x1d0, %o0 <== NOT EXECUTED 4001a280: 40 00 34 11 call 400272c4 <== NOT EXECUTED 4001a284: 92 12 60 38 or %o1, 0x38, %o1 <== NOT EXECUTED 4001a288: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 4001a28c: 12 80 00 0b bne 4001a2b8 <== NOT EXECUTED 4001a290: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 4001a294: 30 80 00 27 b,a 4001a330 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { match = (strcmp(grp->gr_name, name) == 0); 4001a298: 40 00 40 8d call 4002a4cc <== NOT EXECUTED 4001a29c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4001a2a0: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4001a2a4: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } else { match = (grp->gr_gid == gid); } if (match) { 4001a2a8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a2ac: 12 80 00 14 bne 4001a2fc <== NOT EXECUTED 4001a2b0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ((fp = fopen("/etc/group", "r")) == NULL) { errno = EINVAL; return -1; } for(;;) { if (!scangr(fp, grp, buffer, bufsize)) { 4001a2b4: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 4001a2b8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a2bc: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 4001a2c0: 7f ff fe d2 call 40019e08 <== NOT EXECUTED 4001a2c4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a2c8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a2cc: 02 80 00 11 be 4001a310 <== NOT EXECUTED 4001a2d0: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { 4001a2d4: 32 bf ff f1 bne,a 4001a298 <== NOT EXECUTED 4001a2d8: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED match = (strcmp(grp->gr_name, name) == 0); } else { match = (grp->gr_gid == gid); 4001a2dc: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED 4001a2e0: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 4001a2e4: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4001a2e8: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 4001a2ec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a2f0: 02 bf ff f2 be 4001a2b8 <== NOT EXECUTED 4001a2f4: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 4001a2f8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a2fc: 40 00 31 f4 call 40026acc <== NOT EXECUTED 4001a300: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = grp; 4001a304: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 4001a308: 81 c7 e0 08 ret <== NOT EXECUTED 4001a30c: 81 e8 00 00 restore <== NOT EXECUTED errno = EINVAL; return -1; } for(;;) { if (!scangr(fp, grp, buffer, bufsize)) { errno = EINVAL; 4001a310: 40 00 31 a8 call 400269b0 <__errno> <== NOT EXECUTED 4001a314: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001a318: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001a31c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 4001a320: 40 00 31 eb call 40026acc <== NOT EXECUTED 4001a324: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a328: 81 c7 e0 08 ret <== NOT EXECUTED 4001a32c: 81 e8 00 00 restore <== NOT EXECUTED int match; init_etc_passwd_group(); if ((fp = fopen("/etc/group", "r")) == NULL) { errno = EINVAL; 4001a330: 40 00 31 a0 call 400269b0 <__errno> <== NOT EXECUTED 4001a334: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001a338: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001a33c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a340: 81 c7 e0 08 ret <== NOT EXECUTED 4001a344: 81 e8 00 00 restore <== NOT EXECUTED 40019f84 : return NULL; return p; } struct group *getgrent() { 40019f84: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (group_fp == NULL) 40019f88: 03 10 00 f6 sethi %hi(0x4003d800), %g1 <== NOT EXECUTED 40019f8c: d0 00 61 84 ld [ %g1 + 0x184 ], %o0 ! 4003d984 <== NOT EXECUTED 40019f90: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019f94: 02 80 00 0d be 40019fc8 <== NOT EXECUTED 40019f98: 21 10 00 f6 sethi %hi(0x4003d800), %l0 <== NOT EXECUTED return NULL; if (!scangr(group_fp, &grent, grbuf, sizeof grbuf)) 40019f9c: 15 10 00 f6 sethi %hi(0x4003d800), %o2 <== NOT EXECUTED 40019fa0: 92 14 22 50 or %l0, 0x250, %o1 <== NOT EXECUTED 40019fa4: 94 12 a1 88 or %o2, 0x188, %o2 <== NOT EXECUTED 40019fa8: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 40019fac: 7f ff ff 97 call 40019e08 <== NOT EXECUTED 40019fb0: b0 14 22 50 or %l0, 0x250, %i0 <== NOT EXECUTED 40019fb4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019fb8: 02 80 00 04 be 40019fc8 <== NOT EXECUTED 40019fbc: 01 00 00 00 nop <== NOT EXECUTED return NULL; return &grent; } 40019fc0: 81 c7 e0 08 ret <== NOT EXECUTED 40019fc4: 81 e8 00 00 restore <== NOT EXECUTED 40019fc8: 81 c7 e0 08 ret <== NOT EXECUTED 40019fcc: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001a380 : } struct group *getgrgid( gid_t gid ) { 4001a380: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrgid_r(gid, &grent, grbuf, sizeof grbuf, &p)) 4001a384: 13 10 00 f6 sethi %hi(0x4003d800), %o1 <== NOT EXECUTED 4001a388: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 4001a38c: 92 12 62 50 or %o1, 0x250, %o1 <== NOT EXECUTED 4001a390: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 4001a394: 15 10 00 f6 sethi %hi(0x4003d800), %o2 <== NOT EXECUTED 4001a398: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 4001a39c: 94 12 a1 88 or %o2, 0x188, %o2 <== NOT EXECUTED 4001a3a0: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 4001a3a4: 7f ff ff e9 call 4001a348 <== NOT EXECUTED 4001a3a8: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a3ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a3b0: 22 80 00 02 be,a 4001a3b8 <== NOT EXECUTED 4001a3b4: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 4001a3b8: 81 c7 e0 08 ret <== NOT EXECUTED 4001a3bc: 81 e8 00 00 restore <== NOT EXECUTED 4001a348 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 4001a348: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 4001a34c: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 4001a350: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 4001a354: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 4001a358: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(NULL, gid, grp, buffer, bufsize, result); 4001a35c: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 4001a360: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 4001a364: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 4001a368: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 4001a36c: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a370: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001a374: 7f ff ff bd call 4001a268 <== NOT EXECUTED 4001a378: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001a37c: 01 00 00 00 nop 4001a3ec : } struct group *getgrnam( const char *name ) { 4001a3ec: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct group *p; if(getgrnam_r(name, &grent, grbuf, sizeof grbuf, &p)) 4001a3f0: 13 10 00 f6 sethi %hi(0x4003d800), %o1 <== NOT EXECUTED 4001a3f4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a3f8: 92 12 62 50 or %o1, 0x250, %o1 <== NOT EXECUTED 4001a3fc: 15 10 00 f6 sethi %hi(0x4003d800), %o2 <== NOT EXECUTED 4001a400: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 4001a404: 94 12 a1 88 or %o2, 0x188, %o2 <== NOT EXECUTED 4001a408: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 4001a40c: 7f ff ff ed call 4001a3c0 <== NOT EXECUTED 4001a410: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a414: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a418: 22 80 00 02 be,a 4001a420 <== NOT EXECUTED 4001a41c: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 4001a420: 81 c7 e0 08 ret <== NOT EXECUTED 4001a424: 81 e8 00 00 restore <== NOT EXECUTED 4001a3c0 : struct group *grp, char *buffer, size_t bufsize, struct group **result ) { 4001a3c0: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 4001a3c4: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 4001a3c8: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getgr_r(name, 0, grp, buffer, bufsize, result); 4001a3cc: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 4001a3d0: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 4001a3d4: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 4001a3d8: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001a3dc: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001a3e0: 7f ff ff a2 call 4001a268 <== NOT EXECUTED 4001a3e4: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001a3e8: 01 00 00 00 nop 40026034 : */ pid_t getpid( void ) { return _Objects_Local_node; } 40026034: 81 c3 e0 08 retl <== NOT EXECUTED 40026038: 90 10 20 01 mov 1, %o0 ! 1 <== NOT EXECUTED 4001a46c : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 4001a46c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; int match; init_etc_passwd_group(); 4001a470: 7f ff ff 32 call 4001a138 <== NOT EXECUTED 4001a474: 01 00 00 00 nop <== NOT EXECUTED if ((fp = fopen("/etc/passwd", "r")) == NULL) { 4001a478: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001a47c: 13 10 00 ed sethi %hi(0x4003b400), %o1 <== NOT EXECUTED 4001a480: 90 12 21 58 or %o0, 0x158, %o0 <== NOT EXECUTED 4001a484: 40 00 33 90 call 400272c4 <== NOT EXECUTED 4001a488: 92 12 60 38 or %o1, 0x38, %o1 <== NOT EXECUTED 4001a48c: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 4001a490: 12 80 00 0b bne 4001a4bc <== NOT EXECUTED 4001a494: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 4001a498: 30 80 00 27 b,a 4001a534 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { match = (strcmp(pwd->pw_name, name) == 0); 4001a49c: 40 00 40 0c call 4002a4cc <== NOT EXECUTED 4001a4a0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4001a4a4: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 4001a4a8: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } else { match = (pwd->pw_uid == uid); } if (match) { 4001a4ac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a4b0: 12 80 00 14 bne 4001a500 <== NOT EXECUTED 4001a4b4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if ((fp = fopen("/etc/passwd", "r")) == NULL) { errno = EINVAL; return -1; } for(;;) { if (!scanpw(fp, pwd, buffer, bufsize)) { 4001a4b8: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED 4001a4bc: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a4c0: 96 10 00 1c mov %i4, %o3 <== NOT EXECUTED 4001a4c4: 7f ff fe c3 call 40019fd0 <== NOT EXECUTED 4001a4c8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a4cc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a4d0: 02 80 00 11 be 4001a514 <== NOT EXECUTED 4001a4d4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED errno = EINVAL; fclose(fp); return -1; } if (name) { 4001a4d8: 32 bf ff f1 bne,a 4001a49c <== NOT EXECUTED 4001a4dc: d0 06 80 00 ld [ %i2 ], %o0 <== NOT EXECUTED match = (strcmp(pwd->pw_name, name) == 0); } else { match = (pwd->pw_uid == uid); 4001a4e0: c2 16 a0 08 lduh [ %i2 + 8 ], %g1 <== NOT EXECUTED 4001a4e4: 82 18 40 19 xor %g1, %i1, %g1 <== NOT EXECUTED 4001a4e8: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4001a4ec: 82 60 3f ff subx %g0, -1, %g1 <== NOT EXECUTED } if (match) { 4001a4f0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a4f4: 02 bf ff f2 be 4001a4bc <== NOT EXECUTED 4001a4f8: 92 10 00 1a mov %i2, %o1 <== NOT EXECUTED fclose(fp); 4001a4fc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a500: 40 00 31 73 call 40026acc <== NOT EXECUTED 4001a504: b0 10 20 00 clr %i0 <== NOT EXECUTED *result = pwd; 4001a508: f4 27 40 00 st %i2, [ %i5 ] <== NOT EXECUTED } } fclose(fp); errno = EINVAL; return -1; } 4001a50c: 81 c7 e0 08 ret <== NOT EXECUTED 4001a510: 81 e8 00 00 restore <== NOT EXECUTED errno = EINVAL; return -1; } for(;;) { if (!scanpw(fp, pwd, buffer, bufsize)) { errno = EINVAL; 4001a514: 40 00 31 27 call 400269b0 <__errno> <== NOT EXECUTED 4001a518: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001a51c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001a520: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED fclose(fp); 4001a524: 40 00 31 6a call 40026acc <== NOT EXECUTED 4001a528: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a52c: 81 c7 e0 08 ret <== NOT EXECUTED 4001a530: 81 e8 00 00 restore <== NOT EXECUTED int match; init_etc_passwd_group(); if ((fp = fopen("/etc/passwd", "r")) == NULL) { errno = EINVAL; 4001a534: 40 00 31 1f call 400269b0 <__errno> <== NOT EXECUTED 4001a538: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001a53c: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4001a540: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a544: 81 c7 e0 08 ret <== NOT EXECUTED 4001a548: 81 e8 00 00 restore <== NOT EXECUTED 4001a0ec : return NULL; return p; } struct passwd *getpwent() { 4001a0ec: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (passwd_fp == NULL) 4001a0f0: 03 10 00 f6 sethi %hi(0x4003d800), %g1 <== NOT EXECUTED 4001a0f4: d0 00 60 9c ld [ %g1 + 0x9c ], %o0 ! 4003d89c <== NOT EXECUTED 4001a0f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a0fc: 02 80 00 0d be 4001a130 <== NOT EXECUTED 4001a100: 21 10 00 f6 sethi %hi(0x4003d800), %l0 <== NOT EXECUTED return NULL; if (!scanpw(passwd_fp, &pwent, pwbuf, sizeof pwbuf)) 4001a104: 15 10 00 f6 sethi %hi(0x4003d800), %o2 <== NOT EXECUTED 4001a108: 92 14 21 68 or %l0, 0x168, %o1 <== NOT EXECUTED 4001a10c: 94 12 a0 a0 or %o2, 0xa0, %o2 <== NOT EXECUTED 4001a110: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 4001a114: 7f ff ff af call 40019fd0 <== NOT EXECUTED 4001a118: b0 14 21 68 or %l0, 0x168, %i0 <== NOT EXECUTED 4001a11c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a120: 02 80 00 04 be 4001a130 <== NOT EXECUTED 4001a124: 01 00 00 00 nop <== NOT EXECUTED return NULL; return &pwent; } 4001a128: 81 c7 e0 08 ret <== NOT EXECUTED 4001a12c: 81 e8 00 00 restore <== NOT EXECUTED 4001a130: 81 c7 e0 08 ret <== NOT EXECUTED 4001a134: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001a5f0 : } struct passwd *getpwnam( const char *name ) { 4001a5f0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwnam_r(name, &pwent, pwbuf, sizeof pwbuf, &p)) 4001a5f4: 13 10 00 f6 sethi %hi(0x4003d800), %o1 <== NOT EXECUTED 4001a5f8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a5fc: 92 12 61 68 or %o1, 0x168, %o1 <== NOT EXECUTED 4001a600: 15 10 00 f6 sethi %hi(0x4003d800), %o2 <== NOT EXECUTED 4001a604: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 4001a608: 94 12 a0 a0 or %o2, 0xa0, %o2 <== NOT EXECUTED 4001a60c: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 4001a610: 7f ff ff ed call 4001a5c4 <== NOT EXECUTED 4001a614: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a618: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a61c: 22 80 00 02 be,a 4001a624 <== NOT EXECUTED 4001a620: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 4001a624: 81 c7 e0 08 ret <== NOT EXECUTED 4001a628: 81 e8 00 00 restore <== NOT EXECUTED 4001a5c4 : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 4001a5c4: 82 10 00 0a mov %o2, %g1 <== NOT EXECUTED 4001a5c8: 84 10 00 0b mov %o3, %g2 <== NOT EXECUTED 4001a5cc: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(name, 0, pwd, buffer, bufsize, result); 4001a5d0: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED 4001a5d4: 96 10 00 01 mov %g1, %o3 <== NOT EXECUTED 4001a5d8: 98 10 00 02 mov %g2, %o4 <== NOT EXECUTED 4001a5dc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001a5e0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001a5e4: 7f ff ff a2 call 4001a46c <== NOT EXECUTED 4001a5e8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001a5ec: 01 00 00 00 nop 4001a584 : } struct passwd *getpwuid( uid_t uid ) { 4001a584: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED struct passwd *p; if(getpwuid_r(uid, &pwent, pwbuf, sizeof pwbuf, &p)) 4001a588: 13 10 00 f6 sethi %hi(0x4003d800), %o1 <== NOT EXECUTED 4001a58c: 91 2e 20 10 sll %i0, 0x10, %o0 <== NOT EXECUTED 4001a590: 92 12 61 68 or %o1, 0x168, %o1 <== NOT EXECUTED 4001a594: 91 32 20 10 srl %o0, 0x10, %o0 <== NOT EXECUTED 4001a598: 15 10 00 f6 sethi %hi(0x4003d800), %o2 <== NOT EXECUTED 4001a59c: 96 10 20 c8 mov 0xc8, %o3 <== NOT EXECUTED 4001a5a0: 94 12 a0 a0 or %o2, 0xa0, %o2 <== NOT EXECUTED 4001a5a4: 98 07 bf f4 add %fp, -12, %o4 <== NOT EXECUTED 4001a5a8: 7f ff ff e9 call 4001a54c <== NOT EXECUTED 4001a5ac: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a5b0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a5b4: 22 80 00 02 be,a 4001a5bc <== NOT EXECUTED 4001a5b8: f0 07 bf f4 ld [ %fp + -12 ], %i0 <== NOT EXECUTED return NULL; return p; } 4001a5bc: 81 c7 e0 08 ret <== NOT EXECUTED 4001a5c0: 81 e8 00 00 restore <== NOT EXECUTED 4001a54c : struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 4001a54c: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 4001a550: 84 10 00 0a mov %o2, %g2 <== NOT EXECUTED 4001a554: 86 10 00 0b mov %o3, %g3 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 4001a558: 93 2a 20 10 sll %o0, 0x10, %o1 <== NOT EXECUTED struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result ) { 4001a55c: 9a 10 00 0c mov %o4, %o5 <== NOT EXECUTED return getpw_r(NULL, uid, pwd, buffer, bufsize, result); 4001a560: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 4001a564: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED 4001a568: 96 10 00 02 mov %g2, %o3 <== NOT EXECUTED 4001a56c: 98 10 00 03 mov %g3, %o4 <== NOT EXECUTED 4001a570: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a574: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001a578: 7f ff ff bd call 4001a46c <== NOT EXECUTED 4001a57c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001a580: 01 00 00 00 nop 4000d198 : int gettimeofday( struct timeval *tp, void * __tz ) { 4000d198: 9d e3 bf 90 save %sp, -112, %sp /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) { 4000d19c: 80 a6 20 00 cmp %i0, 0 4000d1a0: 02 80 00 11 be 4000d1e4 4000d1a4: 01 00 00 00 nop ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 4000d1a8: 7f ff d3 89 call 40001fcc 4000d1ac: 01 00 00 00 nop 4000d1b0: a0 10 00 08 mov %o0, %l0 _TOD_Get( &now ); 4000d1b4: 7f ff ec 2a call 4000825c <_TOD_Get> 4000d1b8: 90 07 bf f0 add %fp, -16, %o0 _ISR_Enable(level); 4000d1bc: 7f ff d3 88 call 40001fdc 4000d1c0: 90 10 00 10 mov %l0, %o0 time->tv_sec = now.tv_sec; time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 4000d1c4: d0 07 bf f4 ld [ %fp + -12 ], %o0 _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 4000d1c8: c2 07 bf f0 ld [ %fp + -16 ], %g1 time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 4000d1cc: 92 10 23 e8 mov 0x3e8, %o1 4000d1d0: 40 00 24 64 call 40016360 <.udiv> 4000d1d4: c2 26 00 00 st %g1, [ %i0 ] 4000d1d8: 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; } 4000d1dc: 81 c7 e0 08 ret 4000d1e0: 91 e8 20 00 restore %g0, 0, %o0 void * __tz ) { /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) { errno = EFAULT; 4000d1e4: 40 00 08 36 call 4000f2bc <__errno> <== NOT EXECUTED 4000d1e8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000d1ec: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 4000d1f0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d1f4: 81 c7 e0 08 ret <== NOT EXECUTED 4000d1f8: 81 e8 00 00 restore <== NOT EXECUTED 4001a62c : * 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs, * P1003.1b-1993, p. 84 */ uid_t getuid( void ) { 4001a62c: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 4001a630: c4 00 61 20 ld [ %g1 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED return _POSIX_types_Uid; } 4001a634: 81 c3 e0 08 retl <== NOT EXECUTED 4001a638: d0 10 a0 28 lduh [ %g2 + 0x28 ], %o0 <== NOT EXECUTED 40024078 : * and associated memory. At present the imfs_dir_close simply * returns a successful completion status. */ return 0; } 40024078: 81 c3 e0 08 retl <== NOT EXECUTED 4002407c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40024080 : Chain_Node *the_node; Chain_Control *the_chain; IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) loc->node_access; 40024080: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED buf->st_dev = 0ll; 40024084: c0 22 40 00 clr [ %o1 ] <== NOT EXECUTED buf->st_ino = the_jnode->st_ino; 40024088: c4 00 60 34 ld [ %g1 + 0x34 ], %g2 <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 4002408c: 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; 40024090: c4 22 60 08 st %g2, [ %o1 + 8 ] <== NOT EXECUTED buf->st_mode = the_jnode->st_mode; 40024094: 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; 40024098: c0 22 60 3c clr [ %o1 + 0x3c ] <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) loc->node_access; buf->st_dev = 0ll; buf->st_ino = the_jnode->st_ino; buf->st_mode = the_jnode->st_mode; buf->st_nlink = the_jnode->st_nlink; 4002409c: 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; 400240a0: c0 22 60 40 clr [ %o1 + 0x40 ] <== NOT EXECUTED buf->st_atime = the_jnode->stat_atime; 400240a4: 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; 400240a8: 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; 400240ac: 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; 400240b0: 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; 400240b4: 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; 400240b8: 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; 400240bc: 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; 400240c0: 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; 400240c4: 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; 400240c8: 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; 400240cc: 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; 400240d0: 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; 400240d4: c0 22 60 18 clr [ %o1 + 0x18 ] <== NOT EXECUTED 400240d8: 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; 400240dc: 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 ; 400240e0: c4 00 60 4c ld [ %g1 + 0x4c ], %g2 <== NOT EXECUTED 400240e4: 82 00 60 50 add %g1, 0x50, %g1 <== NOT EXECUTED !_Chain_Is_tail( the_chain, the_node ) ; 400240e8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400240ec: 02 80 00 07 be 40024108 <== NOT EXECUTED 400240f0: 86 10 20 00 clr %g3 <== NOT EXECUTED the_node = the_node->next ) { 400240f4: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED the_chain = &the_jnode->info.directory.Entries; /* Run through the chain and count the number of directory entries */ /* that are subordinate to this directory node */ for ( the_node = the_chain->first ; !_Chain_Is_tail( the_chain, the_node ) ; 400240f8: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400240fc: 12 bf ff fe bne 400240f4 <== NOT EXECUTED 40024100: 86 00 e1 0c add %g3, 0x10c, %g3 <== NOT EXECUTED 40024104: c6 22 60 20 st %g3, [ %o1 + 0x20 ] <== NOT EXECUTED buf->st_size = buf->st_size + sizeof( struct dirent ); } return 0; } 40024108: 81 c3 e0 08 retl <== NOT EXECUTED 4002410c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40024110 : off_t imfs_dir_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 40024110: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch( whence ) { 40024114: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED 40024118: 28 80 00 09 bleu,a 4002413c <== NOT EXECUTED 4002411c: d0 06 20 08 ld [ %i0 + 8 ], %o0 <== NOT EXECUTED break; case SEEK_END: /* Movement past the end of the directory via lseek */ /* is not a permitted operation */ default: rtems_set_errno_and_return_minus_one( EINVAL ); 40024120: 40 00 0a 24 call 400269b0 <__errno> <== NOT EXECUTED 40024124: 01 00 00 00 nop <== NOT EXECUTED 40024128: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 4002412c: 86 10 3f ff mov -1, %g3 <== NOT EXECUTED 40024130: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED break; } return 0; } 40024134: 81 c7 e0 08 ret <== NOT EXECUTED 40024138: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED ) { switch( whence ) { case SEEK_SET: /* absolute move from the start of the file */ case SEEK_CUR: /* relative move */ iop->offset = (iop->offset/sizeof(struct dirent)) * 4002413c: 40 00 46 9b call 40035ba8 <.udiv> <== NOT EXECUTED 40024140: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 40024144: 86 10 20 00 clr %g3 <== NOT EXECUTED 40024148: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 4002414c: 85 2a 20 06 sll %o0, 6, %g2 <== NOT EXECUTED 40024150: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40024154: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 40024158: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4002415c: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); break; } return 0; } 40024160: 81 c7 e0 08 ret <== NOT EXECUTED 40024164: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED 4002404c : IMFS_jnode_t *the_jnode; /* Is the node a directory ? */ the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) 4002404c: c4 02 20 2c ld [ %o0 + 0x2c ], %g2 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 40024050: 86 10 00 08 mov %o0, %g3 <== NOT EXECUTED IMFS_jnode_t *the_jnode; /* Is the node a directory ? */ the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) 40024054: c2 00 a0 48 ld [ %g2 + 0x48 ], %g1 <== NOT EXECUTED 40024058: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4002405c: 02 80 00 04 be 4002406c <== NOT EXECUTED 40024060: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED return -1; /* It wasn't a directory --> return error */ iop->offset = 0; return 0; } 40024064: 81 c3 e0 08 retl <== NOT EXECUTED 40024068: 01 00 00 00 nop <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) iop->file_info; if ( the_jnode->type != IMFS_DIRECTORY ) return -1; /* It wasn't a directory --> return error */ iop->offset = 0; 4002406c: c0 20 e0 08 clr [ %g3 + 8 ] <== NOT EXECUTED return 0; } 40024070: 81 c3 e0 08 retl <== NOT EXECUTED 40024074: 90 10 20 00 clr %o0 <== NOT EXECUTED 40024168 : ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 40024168: 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; 4002416c: c2 06 20 2c ld [ %i0 + 0x2c ], %g1 <== NOT EXECUTED ssize_t imfs_dir_read( rtems_libio_t *iop, void *buffer, size_t count ) { 40024170: 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)); 40024174: 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; 40024178: a4 00 60 50 add %g1, 0x50, %l2 <== NOT EXECUTED struct dirent tmp_dirent; the_jnode = (IMFS_jnode_t *)iop->file_info; the_chain = &the_jnode->info.directory.Entries; if ( Chain_Is_empty( the_chain ) ) 4002417c: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED 40024180: 02 80 00 34 be 40024250 <== NOT EXECUTED 40024184: aa 10 20 00 clr %l5 <== NOT EXECUTED /* Move to the first of the desired directory entries */ the_node = the_chain->first; bytes_transferred = 0; first_entry = iop->offset; 40024188: e8 06 20 08 ld [ %i0 + 8 ], %l4 <== NOT EXECUTED /* protect against using sizes that are not exact multiples of the */ /* -dirent- size. These could result in unexpected results */ last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); 4002418c: 40 00 46 87 call 40035ba8 <.udiv> <== NOT EXECUTED 40024190: 92 10 21 0c mov 0x10c, %o1 <== NOT EXECUTED 40024194: 83 2a 20 02 sll %o0, 2, %g1 <== NOT EXECUTED 40024198: 85 2a 20 06 sll %o0, 6, %g2 <== NOT EXECUTED 4002419c: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 400241a0: 82 20 40 08 sub %g1, %o0, %g1 <== NOT EXECUTED 400241a4: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400241a8: a6 00 40 14 add %g1, %l4, %l3 <== NOT EXECUTED /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 400241ac: 80 a4 e0 00 cmp %l3, 0 <== NOT EXECUTED 400241b0: 04 80 00 2a ble 40024258 <== NOT EXECUTED 400241b4: 80 a4 80 11 cmp %l2, %l1 <== NOT EXECUTED current_entry = current_entry + sizeof(struct dirent) ){ if ( Chain_Is_tail( the_chain, the_node ) ){ 400241b8: 02 80 00 28 be 40024258 <== NOT EXECUTED 400241bc: 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 ); 400241c0: ae 07 be ec add %fp, -276, %l7 <== NOT EXECUTED 400241c4: 10 80 00 08 b 400241e4 <== NOT EXECUTED 400241c8: ac 07 be f8 add %fp, -264, %l6 <== NOT EXECUTED last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 400241cc: 80 a4 c0 1a cmp %l3, %i2 <== NOT EXECUTED 400241d0: 04 80 00 20 ble 40024250 <== NOT EXECUTED 400241d4: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED current_entry = current_entry + sizeof(struct dirent) ){ if ( Chain_Is_tail( the_chain, the_node ) ){ 400241d8: 80 a4 80 11 cmp %l2, %l1 <== NOT EXECUTED 400241dc: 02 80 00 1d be 40024250 <== NOT EXECUTED 400241e0: 01 00 00 00 nop <== NOT EXECUTED /* entry in the read */ return bytes_transferred; /* Indicate that there are no more */ /* entries to return */ } if( current_entry >= first_entry ) { 400241e4: 80 a5 00 1a cmp %l4, %i2 <== NOT EXECUTED 400241e8: 34 bf ff f9 bg,a 400241cc <== NOT EXECUTED 400241ec: b4 06 a1 0c add %i2, 0x10c, %i2 <== NOT EXECUTED /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; 400241f0: 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; 400241f4: c4 04 60 34 ld [ %l1 + 0x34 ], %g2 <== NOT EXECUTED } if( current_entry >= first_entry ) { /* Move the entry to the return buffer */ tmp_dirent.d_off = current_entry; tmp_dirent.d_reclen = sizeof( struct dirent ); 400241f8: 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 ); 400241fc: 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 ); 40024200: c2 37 be f4 sth %g1, [ %fp + -268 ] <== NOT EXECUTED the_jnode = (IMFS_jnode_t *) the_node; tmp_dirent.d_ino = the_jnode->st_ino; 40024204: c4 27 be ec st %g2, [ %fp + -276 ] <== NOT EXECUTED tmp_dirent.d_namlen = strlen( the_jnode->name ); 40024208: 40 00 1e d2 call 4002bd50 <== NOT EXECUTED 4002420c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 40024210: 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 ); 40024214: d0 37 be f6 sth %o0, [ %fp + -266 ] <== NOT EXECUTED strcpy( tmp_dirent.d_name, the_jnode->name ); 40024218: 40 00 18 dd call 4002a58c <== NOT EXECUTED 4002421c: 90 10 00 16 mov %l6, %o0 <== NOT EXECUTED memcpy( 40024220: 90 06 40 15 add %i1, %l5, %o0 <== NOT EXECUTED 40024224: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 40024228: 40 00 10 87 call 40028444 <== NOT EXECUTED 4002422c: 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); 40024230: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); } the_node = the_node->next; 40024234: b4 06 a1 0c add %i2, 0x10c, %i2 <== NOT EXECUTED memcpy( buffer + bytes_transferred, (void *)&tmp_dirent, sizeof( struct dirent ) ); iop->offset = iop->offset + sizeof(struct dirent); 40024238: 82 00 61 0c add %g1, 0x10c, %g1 <== NOT EXECUTED 4002423c: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED bytes_transferred = bytes_transferred + sizeof( struct dirent ); 40024240: aa 05 61 0c add %l5, 0x10c, %l5 <== NOT EXECUTED last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 40024244: 80 a4 c0 1a cmp %l3, %i2 <== NOT EXECUTED 40024248: 14 bf ff e4 bg 400241d8 <== NOT EXECUTED 4002424c: e2 04 40 00 ld [ %l1 ], %l1 <== NOT EXECUTED the_node = the_node->next; } /* Success */ return bytes_transferred; } 40024250: 81 c7 e0 08 ret <== NOT EXECUTED 40024254: 91 e8 00 15 restore %g0, %l5, %o0 <== NOT EXECUTED last_entry = first_entry + (count/sizeof(struct dirent)) * sizeof(struct dirent); /* The directory was not empty so try to move to the desired entry in chain*/ for ( current_entry = 0; current_entry < last_entry; 40024258: 10 bf ff fe b 40024250 <== NOT EXECUTED 4002425c: aa 10 20 00 clr %l5 <== NOT EXECUTED 40024260 : */ int imfs_dir_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 40024260: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 40024264: 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 ) ) 40024268: c4 04 20 4c ld [ %l0 + 0x4c ], %g2 <== NOT EXECUTED 4002426c: 82 04 20 50 add %l0, 0x50, %g1 <== NOT EXECUTED 40024270: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40024274: 12 80 00 36 bne 4002434c <== NOT EXECUTED 40024278: 01 00 00 00 nop <== NOT EXECUTED /* * You cannot remove the file system root node. */ if ( pathloc->mt_entry->mt_fs_root.node_access == pathloc->node_access ) 4002427c: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 40024280: c4 00 60 18 ld [ %g1 + 0x18 ], %g2 <== NOT EXECUTED 40024284: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 40024288: 02 80 00 2b be 40024334 <== NOT EXECUTED 4002428c: 01 00 00 00 nop <== NOT EXECUTED /* * You cannot remove a mountpoint. */ if ( the_jnode->info.directory.mt_fs != NULL ) 40024290: c2 04 20 58 ld [ %l0 + 0x58 ], %g1 <== NOT EXECUTED 40024294: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40024298: 12 80 00 27 bne 40024334 <== NOT EXECUTED 4002429c: 01 00 00 00 nop <== NOT EXECUTED /* * Take the node out of the parent's chain that contains this node */ if ( the_jnode->Parent != NULL ) { 400242a0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 400242a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400242a8: 22 80 00 06 be,a 400242c0 <== NOT EXECUTED 400242ac: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 400242b0: 7f ff de 2d call 4001bb64 <_Chain_Extract> <== NOT EXECUTED 400242b4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 400242b8: 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--; 400242bc: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 400242c0: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 400242c4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 400242c8: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 400242cc: 7f ff 87 b9 call 400061b0 <== NOT EXECUTED 400242d0: c2 34 20 30 sth %g1, [ %l0 + 0x30 ] <== NOT EXECUTED 400242d4: 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) ) { 400242d8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400242dc: 7f ff 88 25 call 40006370 <== NOT EXECUTED 400242e0: c2 24 20 44 st %g1, [ %l0 + 0x44 ] <== NOT EXECUTED 400242e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400242e8: 12 80 00 11 bne 4002432c <== NOT EXECUTED 400242ec: 01 00 00 00 nop <== NOT EXECUTED 400242f0: c2 14 20 30 lduh [ %l0 + 0x30 ], %g1 <== NOT EXECUTED 400242f4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400242f8: 12 80 00 0d bne 4002432c <== NOT EXECUTED 400242fc: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == pathloc->node_access ) 40024300: c6 00 61 20 ld [ %g1 + 0x120 ], %g3 ! 4003c120 <== NOT EXECUTED 40024304: c4 06 00 00 ld [ %i0 ], %g2 <== NOT EXECUTED 40024308: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 4002430c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40024310: 22 80 00 02 be,a 40024318 <== NOT EXECUTED 40024314: c0 20 e0 04 clr [ %g3 + 4 ] <== NOT EXECUTED /* * Free memory associated with a memory file. */ free( the_jnode ); 40024318: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4002431c: 7f ff 88 c5 call 40006630 <== NOT EXECUTED 40024320: b0 10 20 00 clr %i0 <== NOT EXECUTED 40024324: 81 c7 e0 08 ret <== NOT EXECUTED 40024328: 81 e8 00 00 restore <== NOT EXECUTED } return 0; } 4002432c: 81 c7 e0 08 ret <== NOT EXECUTED 40024330: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * You cannot remove a mountpoint. */ if ( the_jnode->info.directory.mt_fs != NULL ) rtems_set_errno_and_return_minus_one( EBUSY ); 40024334: 40 00 09 9f call 400269b0 <__errno> <== NOT EXECUTED 40024338: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4002433c: 82 10 20 10 mov 0x10, %g1 <== NOT EXECUTED 40024340: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40024344: 81 c7 e0 08 ret <== NOT EXECUTED 40024348: 81 e8 00 00 restore <== NOT EXECUTED /* * You cannot remove a node that still has children */ if ( ! Chain_Is_empty( &the_jnode->info.directory.Entries ) ) rtems_set_errno_and_return_minus_one( ENOTEMPTY ); 4002434c: 40 00 09 99 call 400269b0 <__errno> <== NOT EXECUTED 40024350: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40024354: 82 10 20 5a mov 0x5a, %g1 <== NOT EXECUTED 40024358: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4002435c: 81 c7 e0 08 ret <== NOT EXECUTED 40024360: 81 e8 00 00 restore <== NOT EXECUTED 4001a138 : /* * Initialize useable but dummy databases */ void init_etc_passwd_group(void) { 4001a138: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED FILE *fp; static char etc_passwd_initted = 0; if (etc_passwd_initted) 4001a13c: 05 10 00 f6 sethi %hi(0x4003d800), %g2 <== NOT EXECUTED 4001a140: c2 48 a0 98 ldsb [ %g2 + 0x98 ], %g1 ! 4003d898 <== NOT EXECUTED 4001a144: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a148: 02 80 00 04 be 4001a158 <== NOT EXECUTED 4001a14c: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 4001a150: 81 c7 e0 08 ret <== NOT EXECUTED 4001a154: 81 e8 00 00 restore <== NOT EXECUTED return; etc_passwd_initted = 1; mkdir("/etc", 0777); 4001a158: 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; 4001a15c: c2 28 a0 98 stb %g1, [ %g2 + 0x98 ] <== NOT EXECUTED mkdir("/etc", 0777); 4001a160: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001a164: 40 00 01 3b call 4001a650 <== NOT EXECUTED 4001a168: 90 12 21 50 or %o0, 0x150, %o0 ! 40039150 <_CPU_Trap_slot_template+0xe70> <== NOT EXECUTED /* * Initialize /etc/passwd */ if ((fp = fopen("/etc/passwd", "r")) != NULL) { 4001a16c: 31 10 00 e4 sethi %hi(0x40039000), %i0 <== NOT EXECUTED 4001a170: 21 10 00 ed sethi %hi(0x4003b400), %l0 <== NOT EXECUTED 4001a174: 90 16 21 58 or %i0, 0x158, %o0 <== NOT EXECUTED 4001a178: 40 00 34 53 call 400272c4 <== NOT EXECUTED 4001a17c: 92 14 20 38 or %l0, 0x38, %o1 <== NOT EXECUTED 4001a180: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a184: 22 80 00 0d be,a 4001a1b8 <== NOT EXECUTED 4001a188: 90 16 21 58 or %i0, 0x158, %o0 <== NOT EXECUTED } else if ((fp = fopen("/etc/passwd", "w")) != NULL) { fprintf(fp, "root:*:0:0:root::/:/bin/sh\n" "rtems:*:1:1:RTEMS Application::/:/bin/sh\n" "tty:!:2:2:tty owner::/:/bin/false\n" ); fclose(fp); 4001a18c: 40 00 32 50 call 40026acc <== NOT EXECUTED 4001a190: 01 00 00 00 nop <== NOT EXECUTED } /* * Initialize /etc/group */ if ((fp = fopen("/etc/group", "r")) != NULL) { 4001a194: 92 14 20 38 or %l0, 0x38, %o1 <== NOT EXECUTED 4001a198: 31 10 00 e4 sethi %hi(0x40039000), %i0 <== NOT EXECUTED 4001a19c: 40 00 34 4a call 400272c4 <== NOT EXECUTED 4001a1a0: 90 16 21 d0 or %i0, 0x1d0, %o0 ! 400391d0 <_CPU_Trap_slot_template+0xef0> <== NOT EXECUTED 4001a1a4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a1a8: 22 80 00 11 be,a 4001a1ec <== NOT EXECUTED 4001a1ac: 90 16 21 d0 or %i0, 0x1d0, %o0 <== NOT EXECUTED fclose(fp); 4001a1b0: 40 00 32 47 call 40026acc <== NOT EXECUTED 4001a1b4: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED * Initialize /etc/passwd */ if ((fp = fopen("/etc/passwd", "r")) != NULL) { fclose(fp); } else if ((fp = fopen("/etc/passwd", "w")) != NULL) { 4001a1b8: 13 10 00 e0 sethi %hi(0x40038000), %o1 <== NOT EXECUTED 4001a1bc: 40 00 34 42 call 400272c4 <== NOT EXECUTED 4001a1c0: 92 12 62 f0 or %o1, 0x2f0, %o1 ! 400382f0 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 4001a1c4: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4001a1c8: 02 bf ff f3 be 4001a194 <== NOT EXECUTED 4001a1cc: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED fprintf(fp, "root:*:0:0:root::/:/bin/sh\n" 4001a1d0: 94 10 20 66 mov 0x66, %o2 <== NOT EXECUTED 4001a1d4: 96 10 00 18 mov %i0, %o3 <== NOT EXECUTED 4001a1d8: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001a1dc: 40 00 37 80 call 40027fdc <== NOT EXECUTED 4001a1e0: 90 12 21 68 or %o0, 0x168, %o0 ! 40039168 <_CPU_Trap_slot_template+0xe88> <== NOT EXECUTED "rtems:*:1:1:RTEMS Application::/:/bin/sh\n" "tty:!:2:2:tty owner::/:/bin/false\n" ); fclose(fp); 4001a1e4: 10 bf ff ea b 4001a18c <== NOT EXECUTED 4001a1e8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED * Initialize /etc/group */ if ((fp = fopen("/etc/group", "r")) != NULL) { fclose(fp); } else if ((fp = fopen("/etc/group", "w")) != NULL) { 4001a1ec: 13 10 00 e0 sethi %hi(0x40038000), %o1 <== NOT EXECUTED 4001a1f0: 40 00 34 35 call 400272c4 <== NOT EXECUTED 4001a1f4: 92 12 62 f0 or %o1, 0x2f0, %o1 ! 400382f0 <_CPU_Trap_slot_template+0x10> <== NOT EXECUTED 4001a1f8: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4001a1fc: 02 bf ff d5 be 4001a150 <== NOT EXECUTED 4001a200: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED fprintf( fp, "root:x:0:root\n" 4001a204: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 4001a208: 94 10 20 2a mov 0x2a, %o2 <== NOT EXECUTED 4001a20c: 96 10 00 18 mov %i0, %o3 <== NOT EXECUTED 4001a210: 40 00 37 73 call 40027fdc <== NOT EXECUTED 4001a214: 90 12 21 e0 or %o0, 0x1e0, %o0 <== NOT EXECUTED "rtems:x:1:rtems\n" "tty:x:2:tty\n" ); fclose(fp); 4001a218: 40 00 32 2d call 40026acc <== NOT EXECUTED 4001a21c: 81 e8 00 00 restore <== NOT EXECUTED 4001a220: 01 00 00 00 nop 4001a174 : int ioctl( int fd, ioctl_command_t command, ... ) { 4001a174: 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 ); 4001a178: 03 10 00 a8 sethi %hi(0x4002a000), %g1 <== NOT EXECUTED 4001a17c: c4 00 60 9c ld [ %g1 + 0x9c ], %g2 ! 4002a09c <== NOT EXECUTED int ioctl( int fd, ioctl_command_t command, ... ) { 4001a180: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 4001a184: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 4001a188: fa 27 a0 58 st %i5, [ %fp + 0x58 ] <== NOT EXECUTED 4001a18c: 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 ); 4001a190: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 4001a194: 1a 80 00 1b bcc 4001a200 <== NOT EXECUTED 4001a198: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 4001a19c: 03 10 00 b0 sethi %hi(0x4002c000), %g1 <== NOT EXECUTED 4001a1a0: c6 00 62 48 ld [ %g1 + 0x248 ], %g3 ! 4002c248 <== NOT EXECUTED 4001a1a4: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 4001a1a8: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 4001a1ac: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4001a1b0: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 4001a1b4: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4001a1b8: 90 00 40 03 add %g1, %g3, %o0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 4001a1bc: c4 02 20 0c ld [ %o0 + 0xc ], %g2 <== NOT EXECUTED 4001a1c0: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED 4001a1c4: 02 80 00 0f be 4001a200 <== NOT EXECUTED 4001a1c8: 82 07 a0 50 add %fp, 0x50, %g1 <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 4001a1cc: 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 *); 4001a1d0: c2 27 bf f4 st %g1, [ %fp + -12 ] <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) 4001a1d4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001a1d8: 02 80 00 0a be 4001a200 <== NOT EXECUTED 4001a1dc: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); if ( !iop->handlers->ioctl_h ) 4001a1e0: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4001a1e4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001a1e8: 02 80 00 0c be 4001a218 <== NOT EXECUTED 4001a1ec: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); rc = (*iop->handlers->ioctl_h)( iop, command, buffer ); 4001a1f0: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001a1f4: 01 00 00 00 nop <== NOT EXECUTED return rc; } 4001a1f8: 81 c7 e0 08 ret <== NOT EXECUTED 4001a1fc: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED /* * Now process the ioctl(). */ if ( !iop->handlers ) rtems_set_errno_and_return_minus_one( EBADF ); 4001a200: 40 00 01 85 call 4001a814 <__errno> <== NOT EXECUTED 4001a204: 01 00 00 00 nop <== NOT EXECUTED 4001a208: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 4001a20c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a210: 10 bf ff fa b 4001a1f8 <== NOT EXECUTED 4001a214: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED if ( !iop->handlers->ioctl_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 4001a218: 40 00 01 7f call 4001a814 <__errno> <== NOT EXECUTED 4001a21c: 01 00 00 00 nop <== NOT EXECUTED 4001a220: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4001a224: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001a228: 10 bf ff f4 b 4001a1f8 <== NOT EXECUTED 4001a22c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 40004fc4 : /* * Process a single input character */ static int iproc (unsigned char c, struct rtems_termios_tty *tty) { 40004fc4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (tty->termios.c_iflag & ISTRIP) 40004fc8: c6 06 60 30 ld [ %i1 + 0x30 ], %g3 <== NOT EXECUTED 40004fcc: 80 88 e0 20 btst 0x20, %g3 <== NOT EXECUTED 40004fd0: 02 80 00 03 be 40004fdc <== NOT EXECUTED 40004fd4: a0 10 00 18 mov %i0, %l0 <== NOT EXECUTED c &= 0x7f; 40004fd8: a0 0e 20 7f and %i0, 0x7f, %l0 <== NOT EXECUTED if (tty->termios.c_iflag & IUCLC) 40004fdc: 80 88 e2 00 btst 0x200, %g3 <== NOT EXECUTED 40004fe0: 02 80 00 0b be 4000500c <== NOT EXECUTED 40004fe4: 82 0c 20 ff and %l0, 0xff, %g1 <== NOT EXECUTED c = tolower (c); 40004fe8: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40004fec: c4 00 63 c0 ld [ %g1 + 0x3c0 ], %g2 ! 4001a3c0 <__ctype_ptr> <== NOT EXECUTED 40004ff0: 90 0c 20 ff and %l0, 0xff, %o0 <== NOT EXECUTED 40004ff4: c2 08 80 08 ldub [ %g2 + %o0 ], %g1 <== NOT EXECUTED 40004ff8: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40004ffc: 32 80 00 02 bne,a 40005004 <== NOT EXECUTED 40005000: 90 02 20 20 add %o0, 0x20, %o0 <== NOT EXECUTED 40005004: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if (c == '\r') { 40005008: 82 0c 20 ff and %l0, 0xff, %g1 <== NOT EXECUTED 4000500c: 80 a0 60 0d cmp %g1, 0xd <== NOT EXECUTED 40005010: 02 80 00 32 be 400050d8 <== NOT EXECUTED 40005014: 80 a0 60 0a cmp %g1, 0xa <== NOT EXECUTED if (tty->termios.c_iflag & IGNCR) return 0; if (tty->termios.c_iflag & ICRNL) c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { 40005018: 02 80 00 35 be 400050ec <== NOT EXECUTED 4000501c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40005020: 02 80 00 1f be 4000509c <== NOT EXECUTED 40005024: 05 10 00 68 sethi %hi(0x4001a000), %g2 <== NOT EXECUTED 40005028: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED 4000502c: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 40005030: 22 80 00 1b be,a 4000509c <== NOT EXECUTED 40005034: 05 10 00 68 sethi %hi(0x4001a000), %g2 <== NOT EXECUTED if (c == tty->termios.c_cc[VERASE]) { 40005038: c2 0e 60 43 ldub [ %i1 + 0x43 ], %g1 <== NOT EXECUTED 4000503c: a2 0c 20 ff and %l0, 0xff, %l1 <== NOT EXECUTED 40005040: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40005044: 02 80 00 5a be 400051ac <== NOT EXECUTED 40005048: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED erase (tty, 0); return 0; } else if (c == tty->termios.c_cc[VKILL]) { 4000504c: c2 0e 60 44 ldub [ %i1 + 0x44 ], %g1 <== NOT EXECUTED 40005050: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40005054: 02 80 00 5b be 400051c0 <== NOT EXECUTED 40005058: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED erase (tty, 1); return 0; } else if (c == tty->termios.c_cc[VEOF]) { 4000505c: c2 0e 60 45 ldub [ %i1 + 0x45 ], %g1 <== NOT EXECUTED 40005060: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40005064: 02 80 00 55 be 400051b8 <== NOT EXECUTED 40005068: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return 1; } else if (c == '\n') { 4000506c: 80 a4 60 0a cmp %l1, 0xa <== NOT EXECUTED 40005070: 02 80 00 3e be 40005168 <== NOT EXECUTED 40005074: 80 88 a0 48 btst 0x48, %g2 <== NOT EXECUTED if (tty->termios.c_lflag & (ECHO | ECHONL)) echo (c, tty); tty->cbuf[tty->ccount++] = c; return 1; } else if ((c == tty->termios.c_cc[VEOL]) 40005078: c2 0e 60 4c ldub [ %i1 + 0x4c ], %g1 <== NOT EXECUTED 4000507c: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40005080: 02 80 00 27 be 4000511c <== NOT EXECUTED 40005084: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED 40005088: c2 0e 60 51 ldub [ %i1 + 0x51 ], %g1 <== NOT EXECUTED 4000508c: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40005090: 02 80 00 23 be 4000511c <== NOT EXECUTED 40005094: 80 88 a0 08 btst 8, %g2 <== NOT EXECUTED } /* * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { 40005098: 05 10 00 68 sethi %hi(0x4001a000), %g2 <== NOT EXECUTED 4000509c: c6 06 60 20 ld [ %i1 + 0x20 ], %g3 <== NOT EXECUTED 400050a0: c2 00 a1 44 ld [ %g2 + 0x144 ], %g1 <== NOT EXECUTED 400050a4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400050a8: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400050ac: 16 80 00 0e bge 400050e4 <== NOT EXECUTED 400050b0: 01 00 00 00 nop <== NOT EXECUTED if (tty->termios.c_lflag & ECHO) 400050b4: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 400050b8: 80 88 60 08 btst 8, %g1 <== NOT EXECUTED 400050bc: 12 80 00 21 bne 40005140 <== NOT EXECUTED 400050c0: 84 00 e0 01 add %g3, 1, %g2 <== NOT EXECUTED echo (c, tty); tty->cbuf[tty->ccount++] = c; 400050c4: c2 06 60 1c ld [ %i1 + 0x1c ], %g1 <== NOT EXECUTED 400050c8: e0 28 40 03 stb %l0, [ %g1 + %g3 ] <== NOT EXECUTED 400050cc: c4 26 60 20 st %g2, [ %i1 + 0x20 ] <== NOT EXECUTED 400050d0: 81 c7 e0 08 ret <== NOT EXECUTED 400050d4: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (tty->termios.c_iflag & ISTRIP) c &= 0x7f; if (tty->termios.c_iflag & IUCLC) c = tolower (c); if (c == '\r') { if (tty->termios.c_iflag & IGNCR) 400050d8: 80 88 e0 80 btst 0x80, %g3 <== NOT EXECUTED 400050dc: 02 80 00 0c be 4000510c <== NOT EXECUTED 400050e0: 80 88 e1 00 btst 0x100, %g3 <== NOT EXECUTED * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { if (tty->termios.c_lflag & ECHO) echo (c, tty); tty->cbuf[tty->ccount++] = c; 400050e4: 81 c7 e0 08 ret <== NOT EXECUTED 400050e8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (tty->termios.c_iflag & IGNCR) return 0; if (tty->termios.c_iflag & ICRNL) c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { 400050ec: 80 88 e0 40 btst 0x40, %g3 <== NOT EXECUTED 400050f0: 02 bf ff cf be 4000502c <== NOT EXECUTED 400050f4: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 400050f8: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 400050fc: 02 bf ff e7 be 40005098 <== NOT EXECUTED 40005100: a0 10 20 0d mov 0xd, %l0 <== NOT EXECUTED if (c == tty->termios.c_cc[VERASE]) { 40005104: 10 bf ff ce b 4000503c <== NOT EXECUTED 40005108: c2 0e 60 43 ldub [ %i1 + 0x43 ], %g1 <== NOT EXECUTED if (tty->termios.c_iflag & IUCLC) c = tolower (c); if (c == '\r') { if (tty->termios.c_iflag & IGNCR) return 0; if (tty->termios.c_iflag & ICRNL) 4000510c: 32 bf ff c7 bne,a 40005028 <== NOT EXECUTED 40005110: a0 10 20 0a mov 0xa, %l0 <== NOT EXECUTED c = '\n'; } else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { 40005114: 10 bf ff c6 b 4000502c <== NOT EXECUTED 40005118: c4 06 60 3c ld [ %i1 + 0x3c ], %g2 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; return 1; } else if ((c == tty->termios.c_cc[VEOL]) || (c == tty->termios.c_cc[VEOL2])) { if (tty->termios.c_lflag & ECHO) 4000511c: 12 80 00 1c bne 4000518c <== NOT EXECUTED 40005120: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED echo (c, tty); tty->cbuf[tty->ccount++] = c; 40005124: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40005128: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 4000512c: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 40005130: e0 28 80 01 stb %l0, [ %g2 + %g1 ] <== NOT EXECUTED 40005134: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 40005138: 81 c7 e0 08 ret <== NOT EXECUTED 4000513c: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED /* * FIXME: Should do IMAXBEL handling somehow */ if (tty->ccount < (CBUFSIZE-1)) { if (tty->termios.c_lflag & ECHO) echo (c, tty); 40005140: 90 0c 20 ff and %l0, 0xff, %o0 <== NOT EXECUTED 40005144: 7f ff fe f0 call 40004d04 <== NOT EXECUTED 40005148: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000514c: c6 06 60 20 ld [ %i1 + 0x20 ], %g3 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40005150: c2 06 60 1c ld [ %i1 + 0x1c ], %g1 <== NOT EXECUTED 40005154: 84 00 e0 01 add %g3, 1, %g2 <== NOT EXECUTED 40005158: e0 28 40 03 stb %l0, [ %g1 + %g3 ] <== NOT EXECUTED 4000515c: c4 26 60 20 st %g2, [ %i1 + 0x20 ] <== NOT EXECUTED 40005160: 81 c7 e0 08 ret <== NOT EXECUTED 40005164: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED } else if (c == tty->termios.c_cc[VEOF]) { return 1; } else if (c == '\n') { if (tty->termios.c_lflag & (ECHO | ECHONL)) 40005168: 12 80 00 0d bne 4000519c <== NOT EXECUTED 4000516c: 90 10 20 0a mov 0xa, %o0 <== NOT EXECUTED echo (c, tty); tty->cbuf[tty->ccount++] = c; 40005170: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED 40005174: c4 06 60 1c ld [ %i1 + 0x1c ], %g2 <== NOT EXECUTED 40005178: 86 00 60 01 add %g1, 1, %g3 <== NOT EXECUTED 4000517c: e2 28 80 01 stb %l1, [ %g2 + %g1 ] <== NOT EXECUTED 40005180: c6 26 60 20 st %g3, [ %i1 + 0x20 ] <== NOT EXECUTED 40005184: 81 c7 e0 08 ret <== NOT EXECUTED 40005188: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED return 1; } else if ((c == tty->termios.c_cc[VEOL]) || (c == tty->termios.c_cc[VEOL2])) { if (tty->termios.c_lflag & ECHO) echo (c, tty); 4000518c: 7f ff fe de call 40004d04 <== NOT EXECUTED 40005190: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 40005194: 10 bf ff e5 b 40005128 <== NOT EXECUTED 40005198: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED else if (c == tty->termios.c_cc[VEOF]) { return 1; } else if (c == '\n') { if (tty->termios.c_lflag & (ECHO | ECHONL)) echo (c, tty); 4000519c: 7f ff fe da call 40004d04 <== NOT EXECUTED 400051a0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED tty->cbuf[tty->ccount++] = c; 400051a4: 10 bf ff f4 b 40005174 <== NOT EXECUTED 400051a8: c2 06 60 20 ld [ %i1 + 0x20 ], %g1 <== NOT EXECUTED else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) { c = '\r'; } if ((c != '\0') && (tty->termios.c_lflag & ICANON)) { if (c == tty->termios.c_cc[VERASE]) { erase (tty, 0); 400051ac: 92 10 20 00 clr %o1 <== NOT EXECUTED 400051b0: 7f ff fe f5 call 40004d84 <== NOT EXECUTED 400051b4: b0 10 20 00 clr %i0 <== NOT EXECUTED 400051b8: 81 c7 e0 08 ret <== NOT EXECUTED 400051bc: 81 e8 00 00 restore <== NOT EXECUTED return 0; } else if (c == tty->termios.c_cc[VKILL]) { erase (tty, 1); 400051c0: 7f ff fe f1 call 40004d84 <== NOT EXECUTED 400051c4: b0 10 20 00 clr %i0 <== NOT EXECUTED 400051c8: 81 c7 e0 08 ret <== NOT EXECUTED 400051cc: 81 e8 00 00 restore <== NOT EXECUTED 400261b0 : #if !defined(RTEMS_POSIX_API) int kill( pid_t pid, int sig ) { return 0; } 400261b0: 81 c3 e0 08 retl <== NOT EXECUTED 400261b4: 90 10 20 00 clr %o0 ! 0 <== NOT EXECUTED 40018818 : extern void _wrapup_reent(struct _reent *); extern void _reclaim_reent(struct _reent *); void libc_wrapup(void) { 40018818: 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())) 4001881c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40018820: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> 40018824: 80 a0 a0 03 cmp %g2, 3 40018828: 12 80 00 15 bne 4001887c 4001882c: 21 10 00 68 sethi %hi(0x4001a000), %l0 /* * This was already done if the user called exit() directly . _wrapup_reent(0); */ if (_REENT != &libc_global_reent) { 40018830: c4 04 23 c8 ld [ %l0 + 0x3c8 ], %g2 ! 4001a3c8 <_impure_ptr> 40018834: 03 10 00 67 sethi %hi(0x40019c00), %g1 40018838: b0 10 61 40 or %g1, 0x140, %i0 ! 40019d40 4001883c: 80 a0 80 18 cmp %g2, %i0 40018840: 02 80 00 06 be 40018858 40018844: c2 04 23 c8 ld [ %l0 + 0x3c8 ], %g1 _wrapup_reent(&libc_global_reent); 40018848: 40 00 00 ab call 40018af4 <_wrapup_reent> 4001884c: 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; 40018850: f0 24 23 c8 st %i0, [ %l0 + 0x3c8 ] * * Should this be changed to do *all* file streams? * _fwalk (_REENT, fclose); */ fclose (stdin); 40018854: c2 04 23 c8 ld [ %l0 + 0x3c8 ], %g1 40018858: 7f ff da ef call 4000f414 4001885c: d0 00 60 04 ld [ %g1 + 4 ], %o0 fclose (stdout); 40018860: c2 04 23 c8 ld [ %l0 + 0x3c8 ], %g1 40018864: 7f ff da ec call 4000f414 40018868: d0 00 60 08 ld [ %g1 + 8 ], %o0 fclose (stderr); 4001886c: c2 04 23 c8 ld [ %l0 + 0x3c8 ], %g1 40018870: f0 00 60 0c ld [ %g1 + 0xc ], %i0 40018874: 7f ff da e8 call 4000f414 40018878: 81 e8 00 00 restore 4001887c: 81 c7 e0 08 ret <== NOT EXECUTED 40018880: 81 e8 00 00 restore <== NOT EXECUTED 400186f4 : off_t lseek( int fd, off_t offset, int whence ) { 400186f4: 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 ); 400186f8: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400186fc: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 40019c3c <== NOT EXECUTED off_t lseek( int fd, off_t offset, int whence ) { 40018700: 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 ); 40018704: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 40018708: 1a 80 00 31 bcc 400187cc <== NOT EXECUTED 4001870c: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 40018710: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED 40018714: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4001abc8 <== NOT EXECUTED 40018718: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 4001871c: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 40018720: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40018724: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 40018728: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4001872c: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 40018730: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED 40018734: 80 88 a1 00 btst 0x100, %g2 <== NOT EXECUTED 40018738: 02 80 00 25 be 400187cc <== NOT EXECUTED 4001873c: 01 00 00 00 nop <== NOT EXECUTED /* * Check as many errors as possible before touching iop->offset. */ if ( !iop->handlers->lseek_h ) 40018740: c4 06 20 30 ld [ %i0 + 0x30 ], %g2 <== NOT EXECUTED 40018744: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED 40018748: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001874c: 02 80 00 26 be 400187e4 <== NOT EXECUTED 40018750: 80 a6 a0 01 cmp %i2, 1 <== NOT EXECUTED /* * Now process the lseek(). */ old_offset = iop->offset; switch ( whence ) { 40018754: 02 80 00 14 be 400187a4 <== NOT EXECUTED 40018758: f4 06 20 08 ld [ %i0 + 8 ], %i2 <== NOT EXECUTED 4001875c: 80 a2 a0 02 cmp %o2, 2 <== NOT EXECUTED 40018760: 02 80 00 0d be 40018794 <== NOT EXECUTED 40018764: 80 a2 a0 00 cmp %o2, 0 <== NOT EXECUTED 40018768: 12 80 00 12 bne 400187b0 <== NOT EXECUTED 4001876c: 01 00 00 00 nop <== NOT EXECUTED case SEEK_SET: iop->offset = offset; 40018770: f2 26 20 08 st %i1, [ %i0 + 8 ] <== NOT EXECUTED /* * At this time, handlers assume iop->offset has the desired * new offset. */ status = (*iop->handlers->lseek_h)( iop, offset, whence ); 40018774: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED 40018778: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001877c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( status == (off_t) -1 ) 40018780: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 40018784: 22 80 00 02 be,a 4001878c <== NOT EXECUTED 40018788: f4 26 20 08 st %i2, [ %i0 + 8 ] <== NOT EXECUTED /* * So if the operation failed, we have to restore iop->offset. */ return status; } 4001878c: 81 c7 e0 08 ret <== NOT EXECUTED 40018790: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED case SEEK_CUR: iop->offset += offset; break; case SEEK_END: iop->offset = iop->size + offset; 40018794: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40018798: 82 06 40 01 add %i1, %g1, %g1 <== NOT EXECUTED 4001879c: 10 bf ff f6 b 40018774 <== NOT EXECUTED 400187a0: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED case SEEK_SET: iop->offset = offset; break; case SEEK_CUR: iop->offset += offset; 400187a4: 82 06 40 1a add %i1, %i2, %g1 <== NOT EXECUTED 400187a8: 10 bf ff f3 b 40018774 <== NOT EXECUTED 400187ac: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED case SEEK_END: iop->offset = iop->size + offset; break; default: rtems_set_errno_and_return_minus_one( EINVAL ); 400187b0: 7f ff da c3 call 4000f2bc <__errno> <== NOT EXECUTED 400187b4: 01 00 00 00 nop <== NOT EXECUTED 400187b8: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 400187bc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400187c0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * So if the operation failed, we have to restore iop->offset. */ return status; } 400187c4: 81 c7 e0 08 ret <== NOT EXECUTED 400187c8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED off_t old_offset; off_t status; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 400187cc: 7f ff da bc call 4000f2bc <__errno> <== NOT EXECUTED 400187d0: 01 00 00 00 nop <== NOT EXECUTED 400187d4: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 400187d8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400187dc: 10 bf ff ec b 4001878c <== NOT EXECUTED 400187e0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Check as many errors as possible before touching iop->offset. */ if ( !iop->handlers->lseek_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 400187e4: 7f ff da b6 call 4000f2bc <__errno> <== NOT EXECUTED 400187e8: 01 00 00 00 nop <== NOT EXECUTED 400187ec: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 400187f0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400187f4: 10 bf ff e6 b 4001878c <== NOT EXECUTED 400187f8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 400034a8 : #ifdef RTEMS_NEWLIB void *malloc( size_t size ) { 400034a8: 9d e3 bf 98 save %sp, -104, %sp uint32_t sbrk_amount; Chain_Node *to_be_freed; MSBUMP(malloc_calls, 1); if ( !size ) 400034ac: a2 96 20 00 orcc %i0, 0, %l1 400034b0: 02 80 00 1c be 40003520 400034b4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { 400034b8: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> 400034bc: 80 a0 a0 03 cmp %g2, 3 400034c0: 02 80 00 13 be 4000350c 400034c4: 11 10 00 6b sethi %hi(0x4001ac00), %o0 400034c8: 10 80 00 04 b 400034d8 400034cc: a0 12 20 30 or %o0, 0x30, %l0 ! 4001ac30 /* * 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); 400034d0: 7f ff ff cd call 40003404 400034d4: 01 00 00 00 nop } /* * If some free's have been deferred, then do them now. */ while ((to_be_freed = Chain_Get(&RTEMS_Malloc_GC_list)) != NULL) 400034d8: 40 00 12 66 call 40007e70 <_Chain_Get> 400034dc: 90 10 00 10 mov %l0, %o0 400034e0: 80 a2 20 00 cmp %o0, 0 400034e4: 12 bf ff fb bne 400034d0 400034e8: 92 10 00 11 mov %l1, %o1 */ #ifdef MALLOC_ARENA_CHECK size += sizeof(struct mallocNode) + SENTINELSIZE; #endif return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 400034ec: 21 10 00 6a sethi %hi(0x4001a800), %l0 400034f0: 40 00 17 4c call 40009220 <_Protected_heap_Allocate> 400034f4: 90 14 23 d4 or %l0, 0x3d4, %o0 ! 4001abd4 if ( !return_this ) { 400034f8: b0 92 20 00 orcc %o0, 0, %i0 400034fc: 02 80 00 11 be 40003540 40003500: 03 10 00 6b sethi %hi(0x4001ac00), %g1 mallocNodeHead.forw = mp; rtems_interrupt_enable(key); } #endif return return_this; } 40003504: 81 c7 e0 08 ret 40003508: 81 e8 00 00 restore /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) 4000350c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40003510: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 40003514: 80 a0 a0 00 cmp %g2, 0 40003518: 02 80 00 04 be 40003528 4000351c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 mallocNodeHead.forw = mp; rtems_interrupt_enable(key); } #endif return return_this; } 40003520: 81 c7 e0 08 ret <== NOT EXECUTED 40003524: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) return (void *) 0; if (_ISR_Nest_level > 0) 40003528: c4 00 62 54 ld [ %g1 + 0x254 ], %g2 4000352c: 80 a0 a0 00 cmp %g2, 0 40003530: 02 bf ff ea be 400034d8 40003534: a0 12 20 30 or %o0, 0x30, %l0 MSBUMP(space_available, the_size); return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); if ( !return_this ) { errno = ENOMEM; return (void *) 0; 40003538: 81 c7 e0 08 ret <== NOT EXECUTED 4000353c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED * Round to the "requested sbrk amount" so hopefully we won't have * to grow again for a while. This effectively does sbrk() calls * in "page" amounts. */ sbrk_amount = RTEMS_Malloc_Sbrk_amount; 40003540: e4 00 60 2c ld [ %g1 + 0x2c ], %l2 <== NOT EXECUTED if ( sbrk_amount == 0 ) 40003544: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40003548: 02 bf ff ef be 40003504 <== NOT EXECUTED 4000354c: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED return (void *) 0; the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount); 40003550: 40 00 4b 84 call 40016360 <.udiv> <== NOT EXECUTED 40003554: 90 04 40 12 add %l1, %l2, %o0 <== NOT EXECUTED 40003558: 40 00 4b 48 call 40016278 <.umul> <== NOT EXECUTED 4000355c: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED if ((starting_address = (void *)sbrk(the_size)) 40003560: 7f ff f9 dd call 40001cd4 <== NOT EXECUTED 40003564: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 40003568: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000356c: 02 bf ff e6 be 40003504 <== NOT EXECUTED 40003570: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED == (void*) -1) return (void *) 0; if ( !_Protected_heap_Extend( 40003574: 94 10 00 12 mov %l2, %o2 <== NOT EXECUTED 40003578: 40 00 17 c5 call 4000948c <_Protected_heap_Extend> <== NOT EXECUTED 4000357c: 90 14 23 d4 or %l0, 0x3d4, %o0 <== NOT EXECUTED 40003580: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003584: 02 80 00 0d be 400035b8 <== NOT EXECUTED 40003588: 90 14 23 d4 or %l0, 0x3d4, %o0 <== NOT EXECUTED return (void *) 0; } MSBUMP(space_available, the_size); return_this = _Protected_heap_Allocate( &RTEMS_Malloc_Heap, size ); 4000358c: 40 00 17 25 call 40009220 <_Protected_heap_Allocate> <== NOT EXECUTED 40003590: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED if ( !return_this ) { 40003594: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40003598: 12 80 00 0e bne 400035d0 <== NOT EXECUTED 4000359c: 01 00 00 00 nop <== NOT EXECUTED errno = ENOMEM; 400035a0: 40 00 2f 47 call 4000f2bc <__errno> <== NOT EXECUTED 400035a4: 01 00 00 00 nop <== NOT EXECUTED 400035a8: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 400035ac: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400035b0: 81 c7 e0 08 ret <== NOT EXECUTED 400035b4: 81 e8 00 00 restore <== NOT EXECUTED == (void*) -1) return (void *) 0; if ( !_Protected_heap_Extend( &RTEMS_Malloc_Heap, starting_address, the_size) ) { sbrk(-the_size); 400035b8: 7f ff f9 c7 call 40001cd4 <== NOT EXECUTED 400035bc: 90 20 00 12 neg %l2, %o0 <== NOT EXECUTED errno = ENOMEM; 400035c0: 40 00 2f 3f call 4000f2bc <__errno> <== NOT EXECUTED 400035c4: 01 00 00 00 nop <== NOT EXECUTED 400035c8: 82 10 20 0c mov 0xc, %g1 ! c <== NOT EXECUTED 400035cc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400035d0: 81 c7 e0 08 ret <== NOT EXECUTED 400035d4: 81 e8 00 00 restore <== NOT EXECUTED 40006600 : /* * Find amount of free heap remaining */ size_t malloc_free_space( void ) { 40006600: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED Heap_Information info; _Protected_heap_Get_free_information( &RTEMS_Malloc_Heap, &info ); 40006604: 11 10 00 f8 sethi %hi(0x4003e000), %o0 <== NOT EXECUTED 40006608: 92 07 bf ec add %fp, -20, %o1 <== NOT EXECUTED 4000660c: 40 00 1b 6b call 4000d3b8 <_Protected_heap_Get_free_information> <== NOT EXECUTED 40006610: 90 12 21 50 or %o0, 0x150, %o0 <== NOT EXECUTED return (size_t) info.largest; } 40006614: f0 07 bf f0 ld [ %fp + -16 ], %i0 <== NOT EXECUTED 40006618: 81 c7 e0 08 ret <== NOT EXECUTED 4000661c: 81 e8 00 00 restore <== NOT EXECUTED 4001c740 : */ int memfile_blocks_allocated = 0; void *memfile_alloc_block(void) { 4001c740: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED void *memory; memory = (void *)calloc(1, IMFS_MEMFILE_BYTES_PER_BLOCK); 4001c744: 03 10 00 f5 sethi %hi(0x4003d400), %g1 <== NOT EXECUTED 4001c748: d2 00 62 dc ld [ %g1 + 0x2dc ], %o1 ! 4003d6dc <== NOT EXECUTED 4001c74c: 7f ff a8 80 call 4000694c <== NOT EXECUTED 4001c750: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED if ( memory ) 4001c754: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001c758: 02 80 00 05 be 4001c76c <== NOT EXECUTED 4001c75c: 05 10 00 f6 sethi %hi(0x4003d800), %g2 <== NOT EXECUTED memfile_blocks_allocated++; 4001c760: c2 00 a2 60 ld [ %g2 + 0x260 ], %g1 ! 4003da60 <== NOT EXECUTED 4001c764: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001c768: c2 20 a2 60 st %g1, [ %g2 + 0x260 ] <== NOT EXECUTED return memory; } 4001c76c: 81 c7 e0 08 ret <== NOT EXECUTED 4001c770: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001ccf4 : return memfile_check_rmnod( the_jnode ); } int memfile_check_rmnod( IMFS_jnode_t *the_jnode ){ 4001ccf4: 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) ) { 4001ccf8: 7f ff a5 9e call 40006370 <== NOT EXECUTED 4001ccfc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001cd00: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001cd04: 12 80 00 13 bne 4001cd50 <== NOT EXECUTED 4001cd08: 01 00 00 00 nop <== NOT EXECUTED 4001cd0c: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 4001cd10: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001cd14: 12 80 00 0f bne 4001cd50 <== NOT EXECUTED 4001cd18: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED /* * Is the rtems_filesystem_current is this node? */ if ( rtems_filesystem_current.node_access == the_jnode ) 4001cd1c: c2 00 61 20 ld [ %g1 + 0x120 ], %g1 ! 4003c120 <== NOT EXECUTED 4001cd20: c4 00 60 04 ld [ %g1 + 4 ], %g2 <== NOT EXECUTED 4001cd24: 80 a0 80 18 cmp %g2, %i0 <== NOT EXECUTED 4001cd28: 22 80 00 02 be,a 4001cd30 <== NOT EXECUTED 4001cd2c: c0 20 60 04 clr [ %g1 + 4 ] <== NOT EXECUTED rtems_filesystem_current.node_access = NULL; /* * Free memory associated with a memory file. */ if (the_jnode->type != IMFS_LINEAR_FILE) 4001cd30: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 <== NOT EXECUTED 4001cd34: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001cd38: 02 80 00 04 be 4001cd48 <== NOT EXECUTED 4001cd3c: 01 00 00 00 nop <== NOT EXECUTED IMFS_memfile_remove( the_jnode ); 4001cd40: 7f ff ff 6c call 4001caf0 <== NOT EXECUTED 4001cd44: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED free( the_jnode ); 4001cd48: 7f ff a6 3a call 40006630 <== NOT EXECUTED 4001cd4c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 4001cd50: 81 c7 e0 08 ret <== NOT EXECUTED 4001cd54: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001cdac : */ int memfile_close( rtems_libio_t *iop ) { 4001cdac: 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) 4001cdb0: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4001cdb4: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 4001cdb8: 02 80 00 04 be 4001cdc8 <== NOT EXECUTED 4001cdbc: d0 06 20 2c ld [ %i0 + 0x2c ], %o0 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001cdc0: c2 02 20 4c ld [ %o0 + 0x4c ], %g1 <== NOT EXECUTED 4001cdc4: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED memfile_check_rmnod( the_jnode ); 4001cdc8: 7f ff ff cb call 4001ccf4 <== NOT EXECUTED 4001cdcc: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 4001cdd0: 81 c7 e0 08 ret <== NOT EXECUTED 4001cdd4: 81 e8 00 00 restore <== NOT EXECUTED 4001c71c : */ void memfile_free_block( void *memory ) { 4001c71c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED #if 0 fprintf(stdout, "(d %p) ", memory ); fflush(stdout); #endif free(memory); 4001c720: 7f ff a7 c4 call 40006630 <== NOT EXECUTED 4001c724: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED memfile_blocks_allocated--; 4001c728: 05 10 00 f6 sethi %hi(0x4003d800), %g2 <== NOT EXECUTED 4001c72c: c2 00 a2 60 ld [ %g2 + 0x260 ], %g1 ! 4003da60 <== NOT EXECUTED 4001c730: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001c734: c2 20 a2 60 st %g1, [ %g2 + 0x260 ] <== NOT EXECUTED } 4001c738: 81 c7 e0 08 ret <== NOT EXECUTED 4001c73c: 81 e8 00 00 restore <== NOT EXECUTED 4001ca74 : void memfile_free_blocks_in_table( block_p **block_table, int entries ) { 4001ca74: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED /* * Perform internal consistency checks */ assert( block_table ); 4001ca78: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001ca7c: 02 80 00 16 be 4001cad4 <== NOT EXECUTED 4001ca80: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED * Now go through all the slots in the table and free the memory. */ b = *block_table; for ( i=0 ; i <== NOT EXECUTED 4001ca88: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED 4001ca8c: a2 10 20 00 clr %l1 <== NOT EXECUTED 4001ca90: b4 10 20 00 clr %i2 <== NOT EXECUTED if ( b[i] ) { 4001ca94: d0 06 80 10 ld [ %i2 + %l0 ], %o0 <== NOT EXECUTED 4001ca98: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ca9c: 02 80 00 05 be 4001cab0 <== NOT EXECUTED 4001caa0: a2 04 60 01 inc %l1 <== NOT EXECUTED memfile_free_block( b[i] ); 4001caa4: 7f ff ff 1e call 4001c71c <== NOT EXECUTED 4001caa8: 01 00 00 00 nop <== NOT EXECUTED b[i] = 0; 4001caac: c0 26 80 10 clr [ %i2 + %l0 ] <== NOT EXECUTED * Now go through all the slots in the table and free the memory. */ b = *block_table; for ( i=0 ; i <== NOT EXECUTED 4001cab8: b4 06 a0 04 add %i2, 4, %i2 <== NOT EXECUTED 4001cabc: e0 06 00 00 ld [ %i0 ], %l0 <== NOT EXECUTED /* * Now that all the blocks in the block table are free, we can * free the block table itself. */ memfile_free_block( *block_table ); 4001cac0: 7f ff ff 17 call 4001c71c <== NOT EXECUTED 4001cac4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED *block_table = 0; 4001cac8: c0 26 00 00 clr [ %i0 ] <== NOT EXECUTED } 4001cacc: 81 c7 e0 08 ret <== NOT EXECUTED 4001cad0: 81 e8 00 00 restore <== NOT EXECUTED /* * Perform internal consistency checks */ assert( block_table ); 4001cad4: 31 10 00 e4 sethi %hi(0x40039000), %i0 <== NOT EXECUTED 4001cad8: 35 10 00 e4 sethi %hi(0x40039000), %i2 <== NOT EXECUTED 4001cadc: b0 16 22 18 or %i0, 0x218, %i0 <== NOT EXECUTED 4001cae0: b4 16 a2 a0 or %i2, 0x2a0, %i2 <== NOT EXECUTED 4001cae4: 7f ff a4 e9 call 40005e88 <__assert> <== NOT EXECUTED 4001cae8: 93 e8 21 b1 restore %g0, 0x1b1, %o1 <== NOT EXECUTED 4001caec: 01 00 00 00 nop 4001d030 : int memfile_ftruncate( rtems_libio_t *iop, off_t length ) { 4001d030: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4001d034: 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 ) 4001d038: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001d03c: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001d040: 16 80 00 06 bge 4001d058 <== NOT EXECUTED 4001d044: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED return IMFS_memfile_extend( the_jnode, length ); 4001d048: 7f ff ff 97 call 4001cea4 <== NOT EXECUTED 4001d04c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; IMFS_update_atime( the_jnode ); return 0; } 4001d050: 81 c7 e0 08 ret <== NOT EXECUTED 4001d054: 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; 4001d058: f2 24 20 4c st %i1, [ %l0 + 0x4c ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001d05c: f2 26 20 04 st %i1, [ %i0 + 4 ] <== NOT EXECUTED IMFS_update_atime( the_jnode ); 4001d060: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001d064: 7f ff a4 53 call 400061b0 <== NOT EXECUTED 4001d068: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001d06c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001d070: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001d074: c2 24 20 3c st %g1, [ %l0 + 0x3c ] <== NOT EXECUTED return 0; } 4001d078: 81 c7 e0 08 ret <== NOT EXECUTED 4001d07c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001c714 : IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; return 0; } 4001c714: 81 c3 e0 08 retl <== NOT EXECUTED 4001c718: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001d080 : off_t memfile_lseek( rtems_libio_t *iop, off_t offset, int whence ) { 4001d080: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; 4001d084: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED if (the_jnode->type == IMFS_LINEAR_FILE) { 4001d088: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4001d08c: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001d090: 02 80 00 0d be 4001d0c4 <== NOT EXECUTED 4001d094: a2 10 00 18 mov %i0, %l1 <== NOT EXECUTED if (iop->offset > the_jnode->info.linearfile.size) iop->offset = the_jnode->info.linearfile.size; } else { /* Must be a block file (IMFS_MEMORY_FILE). */ if (IMFS_memfile_extend( the_jnode, iop->offset )) 4001d098: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 4001d09c: 7f ff ff 82 call 4001cea4 <== NOT EXECUTED 4001d0a0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001d0a4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001d0a8: 12 80 00 0f bne 4001d0e4 <== NOT EXECUTED 4001d0ac: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOSPC ); iop->size = the_jnode->info.file.size; 4001d0b0: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001d0b4: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4001d0b8: c2 24 60 04 st %g1, [ %l1 + 4 ] <== NOT EXECUTED } return iop->offset; } 4001d0bc: 81 c7 e0 08 ret <== NOT EXECUTED 4001d0c0: 81 e8 00 00 restore <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = iop->file_info; if (the_jnode->type == IMFS_LINEAR_FILE) { if (iop->offset > the_jnode->info.linearfile.size) 4001d0c4: d0 04 20 4c ld [ %l0 + 0x4c ], %o0 <== NOT EXECUTED 4001d0c8: f0 06 20 08 ld [ %i0 + 8 ], %i0 <== NOT EXECUTED 4001d0cc: 80 a6 00 08 cmp %i0, %o0 <== NOT EXECUTED 4001d0d0: 04 80 00 09 ble 4001d0f4 <== NOT EXECUTED 4001d0d4: 01 00 00 00 nop <== NOT EXECUTED iop->offset = the_jnode->info.linearfile.size; 4001d0d8: d0 24 60 08 st %o0, [ %l1 + 8 ] <== NOT EXECUTED 4001d0dc: 81 c7 e0 08 ret <== NOT EXECUTED 4001d0e0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED } else { /* Must be a block file (IMFS_MEMORY_FILE). */ if (IMFS_memfile_extend( the_jnode, iop->offset )) rtems_set_errno_and_return_minus_one( ENOSPC ); 4001d0e4: 40 00 26 33 call 400269b0 <__errno> <== NOT EXECUTED 4001d0e8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001d0ec: 82 10 20 1c mov 0x1c, %g1 <== NOT EXECUTED 4001d0f0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001d0f4: 81 c7 e0 08 ret <== NOT EXECUTED 4001d0f8: 81 e8 00 00 restore <== NOT EXECUTED 4001d3ec : rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4001d3ec: 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)) 4001d3f0: c4 06 20 0c ld [ %i0 + 0xc ], %g2 <== NOT EXECUTED rtems_libio_t *iop, const char *pathname, uint32_t flag, uint32_t mode ) { 4001d3f4: 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)) 4001d3f8: 80 88 a2 04 btst 0x204, %g2 <== NOT EXECUTED 4001d3fc: 02 80 00 06 be 4001d414 <== NOT EXECUTED 4001d400: e0 06 20 2c ld [ %i0 + 0x2c ], %l0 <== NOT EXECUTED 4001d404: c2 04 20 48 ld [ %l0 + 0x48 ], %g1 <== NOT EXECUTED 4001d408: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4001d40c: 22 80 00 0b be,a 4001d438 <== NOT EXECUTED 4001d410: d6 04 20 4c ld [ %l0 + 0x4c ], %o3 <== NOT EXECUTED the_jnode->info.file.triply_indirect = 0; if ((count != 0) && (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1)) return -1; } if (iop->flags & LIBIO_FLAGS_APPEND) 4001d414: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED 4001d418: 02 80 00 04 be 4001d428 <== NOT EXECUTED 4001d41c: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001d420: c2 24 60 08 st %g1, [ %l1 + 8 ] <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001d424: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED 4001d428: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001d42c: c2 24 60 04 st %g1, [ %l1 + 4 ] <== NOT EXECUTED return 0; } 4001d430: 81 c7 e0 08 ret <== NOT EXECUTED 4001d434: 81 e8 00 00 restore <== NOT EXECUTED * Perform 'copy on write' for linear files */ if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND)) && (the_jnode->type == IMFS_LINEAR_FILE)) { uint32_t count = the_jnode->info.linearfile.size; const unsigned char *buffer = the_jnode->info.linearfile.direct; 4001d438: d4 04 20 50 ld [ %l0 + 0x50 ], %o2 <== NOT EXECUTED the_jnode->type = IMFS_MEMORY_FILE; 4001d43c: 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; 4001d440: 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; 4001d444: 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; 4001d448: 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; 4001d44c: 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) 4001d450: 80 a2 e0 00 cmp %o3, 0 <== NOT EXECUTED 4001d454: 12 80 00 08 bne 4001d474 <== NOT EXECUTED 4001d458: c2 24 20 48 st %g1, [ %l0 + 0x48 ] <== NOT EXECUTED 4001d45c: c4 04 60 0c ld [ %l1 + 0xc ], %g2 <== NOT EXECUTED && (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1)) return -1; } if (iop->flags & LIBIO_FLAGS_APPEND) 4001d460: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED 4001d464: 02 bf ff f1 be 4001d428 <== NOT EXECUTED 4001d468: c2 04 20 4c ld [ %l0 + 0x4c ], %g1 <== NOT EXECUTED iop->offset = the_jnode->info.file.size; 4001d46c: 10 bf ff ee b 4001d424 <== NOT EXECUTED 4001d470: c2 24 60 08 st %g1, [ %l1 + 8 ] <== NOT EXECUTED the_jnode->type = IMFS_MEMORY_FILE; the_jnode->info.file.size = 0; the_jnode->info.file.indirect = 0; the_jnode->info.file.doubly_indirect = 0; the_jnode->info.file.triply_indirect = 0; if ((count != 0) 4001d474: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001d478: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001d47c: 7f ff ff 20 call 4001d0fc <== NOT EXECUTED 4001d480: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001d484: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4001d488: 02 bf ff ea be 4001d430 <== NOT EXECUTED 4001d48c: 01 00 00 00 nop <== NOT EXECUTED 4001d490: 10 bf ff f4 b 4001d460 <== NOT EXECUTED 4001d494: c4 04 60 0c ld [ %l1 + 0xc ], %g2 <== NOT EXECUTED 4001d7ac : ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4001d7ac: 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 ); 4001d7b0: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 4001d7b4: d0 02 20 2c ld [ %o0 + 0x2c ], %o0 <== NOT EXECUTED ssize_t memfile_read( rtems_libio_t *iop, void *buffer, size_t count ) { 4001d7b8: 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 ); 4001d7bc: 94 10 00 01 mov %g1, %o2 <== NOT EXECUTED 4001d7c0: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001d7c4: 7f ff ff 35 call 4001d498 <== NOT EXECUTED 4001d7c8: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001d7cc: 01 00 00 00 nop <== NOT EXECUTED 4001cd58 : */ int memfile_rmnod( rtems_filesystem_location_info_t *pathloc /* IN */ ) { 4001cd58: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; the_jnode = (IMFS_jnode_t *) pathloc->node_access; 4001cd5c: 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 ) { 4001cd60: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 4001cd64: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001cd68: 22 80 00 06 be,a 4001cd80 <== NOT EXECUTED 4001cd6c: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED Chain_Extract( (Chain_Node *) the_jnode ); 4001cd70: 7f ff fb 7d call 4001bb64 <_Chain_Extract> <== NOT EXECUTED 4001cd74: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED the_jnode->Parent = NULL; 4001cd78: 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--; 4001cd7c: c2 16 20 30 lduh [ %i0 + 0x30 ], %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4001cd80: 92 10 20 00 clr %o1 <== NOT EXECUTED /* * Decrement the link counter and see if we can free the space. */ the_jnode->st_nlink--; 4001cd84: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED IMFS_update_ctime( the_jnode ); 4001cd88: 90 07 bf f0 add %fp, -16, %o0 <== NOT EXECUTED 4001cd8c: 7f ff a5 09 call 400061b0 <== NOT EXECUTED 4001cd90: c2 36 20 30 sth %g1, [ %i0 + 0x30 ] <== NOT EXECUTED 4001cd94: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return memfile_check_rmnod( the_jnode ); 4001cd98: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001cd9c: 7f ff ff d6 call 4001ccf4 <== NOT EXECUTED 4001cda0: c2 26 20 44 st %g1, [ %i0 + 0x44 ] <== NOT EXECUTED } 4001cda4: 81 c7 e0 08 ret <== NOT EXECUTED 4001cda8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4001d3bc : ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4001d3bc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED IMFS_jnode_t *the_jnode; ssize_t status; the_jnode = iop->file_info; 4001d3c0: e2 06 20 2c ld [ %i0 + 0x2c ], %l1 <== NOT EXECUTED status = IMFS_memfile_write( the_jnode, iop->offset, buffer, count ); 4001d3c4: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 4001d3c8: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 4001d3cc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001d3d0: 7f ff ff 4b call 4001d0fc <== NOT EXECUTED 4001d3d4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED iop->size = the_jnode->info.file.size; 4001d3d8: c2 04 60 4c ld [ %l1 + 0x4c ], %g1 <== NOT EXECUTED ssize_t memfile_write( rtems_libio_t *iop, const void *buffer, size_t count ) { 4001d3dc: 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; 4001d3e0: c2 24 20 04 st %g1, [ %l0 + 4 ] <== NOT EXECUTED return status; } 4001d3e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001d3e8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 4000c0d0 : int miniIMFS_initialize( rtems_filesystem_mount_table_entry_t *temp_mt_entry ) { return IMFS_initialize_support( 4000c0d0: 13 10 00 68 sethi %hi(0x4001a000), %o1 4000c0d4: 15 10 00 6a sethi %hi(0x4001a800), %o2 4000c0d8: 92 12 61 9c or %o1, 0x19c, %o1 4000c0dc: 94 12 a3 78 or %o2, 0x378, %o2 4000c0e0: 96 10 00 0a mov %o2, %o3 4000c0e4: 82 13 c0 00 mov %o7, %g1 4000c0e8: 40 00 02 95 call 4000cb3c 4000c0ec: 9e 10 40 00 mov %g1, %o7 4000c0f0: 01 00 00 00 nop <== NOT EXECUTED 4000383c : int mknod( const char *pathname, mode_t mode, dev_t dev ) { 4000383c: 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) ) ) 40003840: 03 00 00 3c sethi %hi(0xf000), %g1 40003844: b3 2e 60 10 sll %i1, 0x10, %i1 40003848: b3 36 60 10 srl %i1, 0x10, %i1 4000384c: 84 8e 40 01 andcc %i1, %g1, %g2 40003850: 02 80 00 4e be 40003988 40003854: 03 00 00 04 sethi %hi(0x1000), %g1 rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) 40003858: 80 a0 80 01 cmp %g2, %g1 4000385c: 02 80 00 18 be 400038bc 40003860: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 40003864: c2 4e 00 00 ldsb [ %i0 ], %g1 40003868: 80 a0 60 2f cmp %g1, 0x2f 4000386c: 02 80 00 1a be 400038d4 40003870: 80 a0 60 5c cmp %g1, 0x5c 40003874: 02 80 00 18 be 400038d4 <== NOT EXECUTED 40003878: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000387c: 02 80 00 17 be 400038d8 <== NOT EXECUTED 40003880: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 40003884: c6 00 62 60 ld [ %g1 + 0x260 ], %g3 ! 4001a260 <== NOT EXECUTED 40003888: 88 10 20 00 clr %g4 <== NOT EXECUTED 4000388c: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 40003890: c2 27 bf e4 st %g1, [ %fp + -28 ] <== NOT EXECUTED 40003894: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40003898: c4 27 bf e8 st %g2, [ %fp + -24 ] <== NOT EXECUTED 4000389c: c2 00 e0 0c ld [ %g3 + 0xc ], %g1 <== NOT EXECUTED 400038a0: c2 27 bf ec st %g1, [ %fp + -20 ] <== NOT EXECUTED if ( !temp_loc.ops->evalformake_h ) { 400038a4: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 400038a8: c4 00 e0 10 ld [ %g3 + 0x10 ], %g2 <== NOT EXECUTED if ( !temp_loc.ops->evalformake_h ) { 400038ac: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 400038b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400038b4: 12 80 00 17 bne 40003910 <== NOT EXECUTED 400038b8: c4 27 bf f0 st %g2, [ %fp + -16 ] <== NOT EXECUTED if ( result != 0 ) return -1; if ( !temp_loc.ops->mknod_h ) { rtems_filesystem_freenode( &temp_loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); 400038bc: 40 00 2e 80 call 4000f2bc <__errno> <== NOT EXECUTED 400038c0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400038c4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400038c8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400038cc: 81 c7 e0 08 ret <== NOT EXECUTED 400038d0: 81 e8 00 00 restore <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 400038d4: 03 10 00 68 sethi %hi(0x4001a000), %g1 400038d8: c6 00 62 60 ld [ %g1 + 0x260 ], %g3 ! 4001a260 400038dc: 88 10 20 01 mov 1, %g4 400038e0: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 400038e4: c2 27 bf e4 st %g1, [ %fp + -28 ] 400038e8: c4 00 e0 18 ld [ %g3 + 0x18 ], %g2 400038ec: c4 27 bf e8 st %g2, [ %fp + -24 ] 400038f0: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 400038f4: c2 27 bf ec st %g1, [ %fp + -20 ] if ( !temp_loc.ops->evalformake_h ) { 400038f8: c2 07 bf ec ld [ %fp + -20 ], %g1 rtems_set_errno_and_return_minus_one( EINVAL ); if ( S_ISFIFO(mode) ) rtems_set_errno_and_return_minus_one( ENOTSUP ); rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); 400038fc: c4 00 e0 20 ld [ %g3 + 0x20 ], %g2 if ( !temp_loc.ops->evalformake_h ) { 40003900: c2 00 60 04 ld [ %g1 + 4 ], %g1 40003904: 80 a0 60 00 cmp %g1, 0 40003908: 02 bf ff ed be 400038bc 4000390c: c4 27 bf f0 st %g2, [ %fp + -16 ] rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->evalformake_h)( 40003910: 90 06 00 04 add %i0, %g4, %o0 40003914: a0 07 bf e4 add %fp, -28, %l0 40003918: 94 07 bf f4 add %fp, -12, %o2 4000391c: 92 10 00 10 mov %l0, %o1 40003920: 9f c0 40 00 call %g1 40003924: b0 10 3f ff mov -1, %i0 &pathname[i], &temp_loc, &name_start ); if ( result != 0 ) 40003928: 80 a2 20 00 cmp %o0, 0 4000392c: 12 bf ff e8 bne 400038cc 40003930: c2 07 bf ec ld [ %fp + -20 ], %g1 return -1; if ( !temp_loc.ops->mknod_h ) { 40003934: c4 00 60 14 ld [ %g1 + 0x14 ], %g2 40003938: 80 a0 a0 00 cmp %g2, 0 4000393c: 02 80 00 19 be 400039a0 40003940: d0 07 bf f4 ld [ %fp + -12 ], %o0 rtems_filesystem_freenode( &temp_loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc ); 40003944: 92 10 00 19 mov %i1, %o1 40003948: 94 10 00 1a mov %i2, %o2 4000394c: 96 10 00 1b mov %i3, %o3 40003950: 9f c0 80 00 call %g2 40003954: 98 10 00 10 mov %l0, %o4 rtems_filesystem_freenode( &temp_loc ); 40003958: c2 07 bf ec ld [ %fp + -20 ], %g1 4000395c: 80 a0 60 00 cmp %g1, 0 40003960: 02 bf ff db be 400038cc 40003964: b0 10 00 08 mov %o0, %i0 40003968: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 4000396c: 80 a0 60 00 cmp %g1, 0 40003970: 02 80 00 0a be 40003998 40003974: 01 00 00 00 nop 40003978: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000397c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return result; } 40003980: 81 c7 e0 08 ret <== NOT EXECUTED 40003984: 81 e8 00 00 restore <== NOT EXECUTED int i; const char *name_start; int result; if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) ) rtems_set_errno_and_return_minus_one( EINVAL ); 40003988: 40 00 2e 4d call 4000f2bc <__errno> <== NOT EXECUTED 4000398c: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40003990: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 40003994: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40003998: 81 c7 e0 08 ret 4000399c: 81 e8 00 00 restore ); if ( result != 0 ) return -1; if ( !temp_loc.ops->mknod_h ) { rtems_filesystem_freenode( &temp_loc ); 400039a0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 400039a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400039a8: 02 bf ff c5 be 400038bc <== NOT EXECUTED 400039ac: 01 00 00 00 nop <== NOT EXECUTED 400039b0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400039b4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 400039b8: 30 bf ff c1 b,a 400038bc <== NOT EXECUTED 4000d558 : rtems_filesystem_operations_table *fs_ops, rtems_filesystem_options_t options, char *device, char *mount_point ) { 4000d558: 9d e3 bf 88 save %sp, -120, %sp /* * Is there a file system operations table? */ if ( fs_ops == NULL ) { 4000d55c: 80 a6 60 00 cmp %i1, 0 4000d560: 02 80 00 8c be 4000d790 4000d564: a4 10 00 18 mov %i0, %l2 /* * Are the file system options valid? */ if ( options != RTEMS_FILESYSTEM_READ_ONLY && 4000d568: 80 a6 a0 01 cmp %i2, 1 4000d56c: 18 80 00 89 bgu 4000d790 4000d570: 01 00 00 00 nop errno = EINVAL; return -1; } /* Do they support being mounted at all ? */ if ( !fs_ops->fsmount_me_h ) { 4000d574: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 4000d578: 80 a0 60 00 cmp %g1, 0 4000d57c: 02 80 00 4c be 4000d6ac 4000d580: 80 a6 e0 00 cmp %i3, 0 /* * Allocate a mount table entry */ size = sizeof(rtems_filesystem_mount_table_entry_t); if ( device ) 4000d584: 02 80 00 05 be 4000d598 4000d588: 90 10 20 64 mov 0x64, %o0 size += strlen( device ) + 1; 4000d58c: 40 00 0c 2a call 40010634 <== NOT EXECUTED 4000d590: 90 10 00 1b mov %i3, %o0 <== NOT EXECUTED 4000d594: 90 02 20 65 add %o0, 0x65, %o0 <== NOT EXECUTED temp_mt_entry = malloc( size ); 4000d598: 7f ff d7 c4 call 400034a8 4000d59c: 01 00 00 00 nop if ( !temp_mt_entry ) { 4000d5a0: a2 92 20 00 orcc %o0, 0, %l1 4000d5a4: 02 80 00 95 be 4000d7f8 4000d5a8: a0 10 00 11 mov %l1, %l0 errno = ENOMEM; return -1; } temp_mt_entry->mt_fs_root.mt_entry = temp_mt_entry; temp_mt_entry->options = options; 4000d5ac: f4 24 60 28 st %i2, [ %l1 + 0x28 ] if ( device ) { 4000d5b0: 80 a6 e0 00 cmp %i3, 0 4000d5b4: 02 80 00 47 be 4000d6d0 4000d5b8: e2 24 20 24 st %l1, [ %l0 + 0x24 ] temp_mt_entry->dev = 4000d5bc: 90 04 60 64 add %l1, 0x64, %o0 <== NOT EXECUTED (char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t ); strcpy( temp_mt_entry->dev, device ); 4000d5c0: 92 10 00 1b mov %i3, %o1 <== NOT EXECUTED 4000d5c4: 40 00 0b fc call 400105b4 <== NOT EXECUTED 4000d5c8: d0 24 60 60 st %o0, [ %l1 + 0x60 ] <== NOT EXECUTED /* * The mount_point should be a directory with read/write/execute * permissions in the existing tree. */ if ( mount_point ) { 4000d5cc: 80 a7 20 00 cmp %i4, 0 4000d5d0: 02 80 00 20 be 4000d650 4000d5d4: 90 10 00 1c mov %i4, %o0 if ( rtems_filesystem_evaluate_path( 4000d5d8: 92 10 20 07 mov 7, %o1 <== NOT EXECUTED 4000d5dc: b8 07 bf e8 add %fp, -24, %i4 <== NOT EXECUTED 4000d5e0: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 4000d5e4: 7f ff d6 f0 call 400031a4 <== NOT EXECUTED 4000d5e8: 94 10 00 1c mov %i4, %o2 <== NOT EXECUTED 4000d5ec: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000d5f0: 02 80 00 33 be 4000d6bc <== NOT EXECUTED 4000d5f4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED /* * Test for node_type_h */ if (!loc.ops->node_type_h) { 4000d5f8: c2 00 60 10 ld [ %g1 + 0x10 ], %g1 <== NOT EXECUTED 4000d5fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d600: 02 80 00 5a be 4000d768 <== NOT EXECUTED 4000d604: 01 00 00 00 nop <== NOT EXECUTED /* * Test to see if it is a directory */ if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { 4000d608: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000d60c: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 4000d610: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4000d614: 02 80 00 31 be 4000d6d8 <== NOT EXECUTED 4000d618: 03 10 00 6c sethi %hi(0x4001b000), %g1 <== NOT EXECUTED errno = ENOTDIR; 4000d61c: 40 00 07 28 call 4000f2bc <__errno> <== NOT EXECUTED 4000d620: 01 00 00 00 nop <== NOT EXECUTED 4000d624: 82 10 20 14 mov 0x14, %g1 ! 14 <== NOT EXECUTED 4000d628: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000d62c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000d630: 7f ff d7 75 call 40003404 <== NOT EXECUTED 4000d634: a0 10 00 1c mov %i4, %l0 <== NOT EXECUTED if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); 4000d638: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000d63c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d640: 32 80 00 5a bne,a 4000d7a8 <== NOT EXECUTED 4000d644: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4000d648: 81 c7 e0 08 ret <== NOT EXECUTED 4000d64c: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED * This is a mount of the base file system --> The * mt_point_node.node_access will be set to null to indicate that this * is the root of the entire file system. */ temp_mt_entry->mt_fs_root.node_access = NULL; 4000d650: c0 24 60 18 clr [ %l1 + 0x18 ] temp_mt_entry->mt_fs_root.handlers = NULL; 4000d654: c0 24 60 1c clr [ %l1 + 0x1c ] temp_mt_entry->mt_fs_root.ops = NULL; 4000d658: c0 24 60 20 clr [ %l1 + 0x20 ] temp_mt_entry->mt_point_node.node_access = NULL; 4000d65c: c0 24 60 08 clr [ %l1 + 8 ] temp_mt_entry->mt_point_node.handlers = NULL; 4000d660: c0 24 60 0c clr [ %l1 + 0xc ] temp_mt_entry->mt_point_node.ops = NULL; 4000d664: c0 24 60 10 clr [ %l1 + 0x10 ] temp_mt_entry->mt_point_node.mt_entry = NULL; 4000d668: c0 24 60 14 clr [ %l1 + 0x14 ] 4000d66c: a0 10 20 00 clr %l0 } if ( fs_ops->fsmount_me_h( temp_mt_entry ) ) { 4000d670: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 4000d674: 9f c0 40 00 call %g1 4000d678: 90 10 00 11 mov %l1, %o0 4000d67c: 80 a2 20 00 cmp %o0, 0 4000d680: 12 80 00 51 bne 4000d7c4 4000d684: 11 10 00 6c sethi %hi(0x4001b000), %o0 /* * Add the mount table entry to the mount table chain */ Chain_Append( &rtems_filesystem_mount_table_control, &temp_mt_entry->Node ); 4000d688: 92 10 00 11 mov %l1, %o1 4000d68c: 7f ff e9 ed call 40007e40 <_Chain_Append> 4000d690: 90 12 20 98 or %o0, 0x98, %o0 if ( mt_entry ) 4000d694: 80 a4 a0 00 cmp %l2, 0 4000d698: 02 80 00 03 be 4000d6a4 4000d69c: b0 10 20 00 clr %i0 *mt_entry = temp_mt_entry; 4000d6a0: e2 24 80 00 st %l1, [ %l2 ] 4000d6a4: 81 c7 e0 08 ret 4000d6a8: 81 e8 00 00 restore return -1; } /* Do they support being mounted at all ? */ if ( !fs_ops->fsmount_me_h ) { errno = ENOTSUP; 4000d6ac: 40 00 07 04 call 4000f2bc <__errno> <== NOT EXECUTED 4000d6b0: a0 10 20 00 clr %l0 <== NOT EXECUTED 4000d6b4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4000d6b8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000d6bc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000d6c0: 7f ff d7 51 call 40003404 <== NOT EXECUTED 4000d6c4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); return -1; } 4000d6c8: 81 c7 e0 08 ret <== NOT EXECUTED 4000d6cc: 81 e8 00 00 restore <== NOT EXECUTED if ( device ) { temp_mt_entry->dev = (char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t ); strcpy( temp_mt_entry->dev, device ); } else temp_mt_entry->dev = 0; 4000d6d0: 10 bf ff bf b 4000d5cc 4000d6d4: c0 24 60 60 clr [ %l1 + 0x60 ] /* * For each mount table entry */ for ( the_node = rtems_filesystem_mount_table_control.first; 4000d6d8: c4 00 60 98 ld [ %g1 + 0x98 ], %g2 <== NOT EXECUTED 4000d6dc: 82 10 60 98 or %g1, 0x98, %g1 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4000d6e0: 88 00 60 04 add %g1, 4, %g4 <== NOT EXECUTED !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node ); 4000d6e4: 80 a0 80 04 cmp %g2, %g4 <== NOT EXECUTED 4000d6e8: 02 80 00 0e be 4000d720 <== NOT EXECUTED 4000d6ec: c6 07 bf e8 ld [ %fp + -24 ], %g3 <== NOT EXECUTED the_node = the_node->next ) { the_mount_entry = (rtems_filesystem_mount_table_entry_t *) the_node; if ( the_mount_entry->mt_fs_root.node_access == loc->node_access ) 4000d6f0: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 4000d6f4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000d6f8: 32 80 00 07 bne,a 4000d714 <== NOT EXECUTED 4000d6fc: c4 00 80 00 ld [ %g2 ], %g2 <== NOT EXECUTED 4000d700: 30 80 00 1f b,a 4000d77c <== NOT EXECUTED 4000d704: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000d708: 02 80 00 1d be 4000d77c <== NOT EXECUTED 4000d70c: 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 ) { 4000d710: 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 ); 4000d714: 80 a0 80 04 cmp %g2, %g4 <== NOT EXECUTED 4000d718: 32 bf ff fb bne,a 4000d704 <== NOT EXECUTED 4000d71c: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED * traverse the tree. */ temp_mt_entry->mt_point_node.node_access = loc.node_access; temp_mt_entry->mt_point_node.handlers = loc.handlers; temp_mt_entry->mt_point_node.ops = loc.ops; 4000d720: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED * may have been allocated in loc should not be sent to freenode * until the system is unmounted. It may be needed to correctly * traverse the tree. */ temp_mt_entry->mt_point_node.node_access = loc.node_access; 4000d724: c6 24 60 08 st %g3, [ %l1 + 8 ] <== NOT EXECUTED temp_mt_entry->mt_point_node.handlers = loc.handlers; 4000d728: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED temp_mt_entry->mt_point_node.ops = loc.ops; temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry; 4000d72c: c6 07 bf f4 ld [ %fp + -12 ], %g3 <== NOT EXECUTED /* * This link to the parent is only done when we are dealing with system * below the base file system */ if ( !loc.ops->mount_h ){ 4000d730: c8 00 60 20 ld [ %g1 + 0x20 ], %g4 <== NOT EXECUTED * until the system is unmounted. It may be needed to correctly * traverse the tree. */ temp_mt_entry->mt_point_node.node_access = loc.node_access; temp_mt_entry->mt_point_node.handlers = loc.handlers; 4000d734: c4 24 60 0c st %g2, [ %l1 + 0xc ] <== NOT EXECUTED temp_mt_entry->mt_point_node.ops = loc.ops; temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry; 4000d738: c6 24 60 14 st %g3, [ %l1 + 0x14 ] <== NOT EXECUTED /* * This link to the parent is only done when we are dealing with system * below the base file system */ if ( !loc.ops->mount_h ){ 4000d73c: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 4000d740: 02 80 00 0a be 4000d768 <== NOT EXECUTED 4000d744: c2 24 60 10 st %g1, [ %l1 + 0x10 ] <== NOT EXECUTED errno = ENOTSUP; goto cleanup_and_bail; } if ( loc.ops->mount_h( temp_mt_entry ) ) { 4000d748: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000d74c: 9f c1 00 00 call %g4 <== NOT EXECUTED 4000d750: a0 10 00 1c mov %i4, %l0 <== NOT EXECUTED 4000d754: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000d758: 22 bf ff c7 be,a 4000d674 <== NOT EXECUTED 4000d75c: c2 06 60 24 ld [ %i1 + 0x24 ], %g1 <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000d760: 10 bf ff b4 b 4000d630 <== NOT EXECUTED 4000d764: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED * This link to the parent is only done when we are dealing with system * below the base file system */ if ( !loc.ops->mount_h ){ errno = ENOTSUP; 4000d768: 40 00 06 d5 call 4000f2bc <__errno> <== NOT EXECUTED 4000d76c: 01 00 00 00 nop <== NOT EXECUTED 4000d770: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4000d774: 10 bf ff ae b 4000d62c <== NOT EXECUTED 4000d778: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED /* * You can only mount one file system onto a single mount point. */ if ( Is_node_fs_root( &loc ) ){ errno = EBUSY; 4000d77c: 40 00 06 d0 call 4000f2bc <__errno> <== NOT EXECUTED 4000d780: 01 00 00 00 nop <== NOT EXECUTED 4000d784: 82 10 20 10 mov 0x10, %g1 ! 10 <== NOT EXECUTED 4000d788: 10 bf ff a9 b 4000d62c <== NOT EXECUTED 4000d78c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * Are the file system options valid? */ if ( options != RTEMS_FILESYSTEM_READ_ONLY && options != RTEMS_FILESYSTEM_READ_WRITE ) { errno = EINVAL; 4000d790: 40 00 06 cb call 4000f2bc <__errno> <== NOT EXECUTED 4000d794: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000d798: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 4000d79c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d7a0: 81 c7 e0 08 ret <== NOT EXECUTED 4000d7a4: 81 e8 00 00 restore <== NOT EXECUTED cleanup_and_bail: free( temp_mt_entry ); if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); 4000d7a8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d7ac: 02 bf ff a7 be 4000d648 <== NOT EXECUTED 4000d7b0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4000d7b4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000d7b8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000d7bc: 81 c7 e0 08 ret <== NOT EXECUTED 4000d7c0: 81 e8 00 00 restore <== NOT EXECUTED temp_mt_entry->mt_point_node.mt_entry = NULL; } if ( fs_ops->fsmount_me_h( temp_mt_entry ) ) { /* try to undo the mount operation */ if ( loc.ops->unmount_h ) { 4000d7c4: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4000d7c8: c2 00 60 28 ld [ %g1 + 0x28 ], %g1 <== NOT EXECUTED 4000d7cc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000d7d0: 02 80 00 04 be 4000d7e0 <== NOT EXECUTED 4000d7d4: 01 00 00 00 nop <== NOT EXECUTED loc.ops->unmount_h( temp_mt_entry ); 4000d7d8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000d7dc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED return 0; cleanup_and_bail: free( temp_mt_entry ); 4000d7e0: 7f ff d7 09 call 40003404 <== NOT EXECUTED 4000d7e4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( loc_to_free ) 4000d7e8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 4000d7ec: 32 bf ff 94 bne,a 4000d63c <== NOT EXECUTED 4000d7f0: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 4000d7f4: 30 bf ff 95 b,a 4000d648 <== NOT EXECUTED if ( device ) size += strlen( device ) + 1; temp_mt_entry = malloc( size ); if ( !temp_mt_entry ) { errno = ENOMEM; 4000d7f8: 40 00 06 b1 call 4000f2bc <__errno> <== NOT EXECUTED 4000d7fc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000d800: 82 10 20 0c mov 0xc, %g1 <== NOT EXECUTED 4000d804: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000d808: 81 c7 e0 08 ret <== NOT EXECUTED 4000d80c: 81 e8 00 00 restore <== NOT EXECUTED 40003a4c : */ int newlib_free_buffers( FILE *fp ) { 40003a4c: 9d e3 bf 98 save %sp, -104, %sp switch ( fileno(fp) ) { 40003a50: 40 00 2e eb call 4000f5fc 40003a54: 90 10 00 18 mov %i0, %o0 40003a58: 80 a2 20 02 cmp %o0, 2 40003a5c: 28 80 00 06 bleu,a 40003a74 40003a60: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 fp->_flags &= ~__SMBF; fp->_bf._base = fp->_p = (unsigned char *) NULL; } break; default: fclose(fp); 40003a64: 40 00 2e 6c call 4000f414 <== NOT EXECUTED 40003a68: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } return 0; } 40003a6c: 81 c7 e0 08 ret 40003a70: 91 e8 20 00 restore %g0, 0, %o0 { switch ( fileno(fp) ) { case 0: case 1: case 2: if (fp->_flags & __SMBF) { 40003a74: 80 88 60 80 btst 0x80, %g1 40003a78: 02 bf ff fd be 40003a6c 40003a7c: 01 00 00 00 nop free( fp->_bf._base ); 40003a80: 7f ff fe 61 call 40003404 40003a84: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 fp->_flags &= ~__SMBF; 40003a88: c2 16 20 0c lduh [ %i0 + 0xc ], %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 40003a8c: c0 26 20 10 clr [ %i0 + 0x10 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 40003a90: 82 08 7f 7f and %g1, -129, %g1 fp->_bf._base = fp->_p = (unsigned char *) NULL; 40003a94: c0 26 00 00 clr [ %i0 ] case 0: case 1: case 2: if (fp->_flags & __SMBF) { free( fp->_bf._base ); fp->_flags &= ~__SMBF; 40003a98: c2 36 20 0c sth %g1, [ %i0 + 0xc ] break; default: fclose(fp); } return 0; } 40003a9c: 81 c7 e0 08 ret 40003aa0: 91 e8 20 00 restore %g0, 0, %o0 40003ac8 : rtems_device_driver null_initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *pargp ) { 40003ac8: 9d e3 bf 98 save %sp, -104, %sp rtems_device_driver status; if ( !initialized ) { 40003acc: 05 10 00 79 sethi %hi(0x4001e400), %g2 40003ad0: c2 48 a2 64 ldsb [ %g2 + 0x264 ], %g1 ! 4001e664 40003ad4: 80 a0 60 00 cmp %g1, 0 40003ad8: 02 80 00 04 be 40003ae8 40003adc: 82 10 20 01 mov 1, %g1 NULL_major = major; } return RTEMS_SUCCESSFUL; } 40003ae0: 81 c7 e0 08 ret 40003ae4: 91 e8 20 00 restore %g0, 0, %o0 rtems_device_driver status; if ( !initialized ) { initialized = 1; status = rtems_io_register_name( 40003ae8: 11 10 00 6f sethi %hi(0x4001bc00), %o0 ) { rtems_device_driver status; if ( !initialized ) { initialized = 1; 40003aec: c2 28 a2 64 stb %g1, [ %g2 + 0x264 ] status = rtems_io_register_name( 40003af0: 90 12 23 90 or %o0, 0x390, %o0 40003af4: 92 10 00 18 mov %i0, %o1 40003af8: 40 00 00 50 call 40003c38 40003afc: 94 10 20 00 clr %o2 "/dev/null", major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) 40003b00: 80 a2 20 00 cmp %o0, 0 40003b04: 12 80 00 05 bne 40003b18 40003b08: 03 10 00 79 sethi %hi(0x4001e400), %g1 rtems_fatal_error_occurred(status); NULL_major = major; 40003b0c: f0 20 63 e4 st %i0, [ %g1 + 0x3e4 ] ! 4001e7e4 } return RTEMS_SUCCESSFUL; } 40003b10: 81 c7 e0 08 ret 40003b14: 91 e8 20 00 restore %g0, 0, %o0 major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred(status); 40003b18: 40 00 13 ae call 400089d0 <== NOT EXECUTED 40003b1c: 01 00 00 00 nop <== NOT EXECUTED NULL_major = major; 40003b20: 03 10 00 79 sethi %hi(0x4001e400), %g1 <== NOT EXECUTED 40003b24: 10 bf ff fb b 40003b10 <== NOT EXECUTED 40003b28: f0 20 63 e4 st %i0, [ %g1 + 0x3e4 ] ! 4001e7e4 <== NOT EXECUTED 40003aa4 : void *pargp ) { rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp; if ( rw_args ) 40003aa4: 80 a2 a0 00 cmp %o2, 0 40003aa8: 02 80 00 04 be 40003ab8 40003aac: 01 00 00 00 nop rw_args->bytes_moved = rw_args->count; 40003ab0: c2 02 a0 0c ld [ %o2 + 0xc ], %g1 <== NOT EXECUTED 40003ab4: c2 22 a0 14 st %g1, [ %o2 + 0x14 ] <== NOT EXECUTED return NULL_SUCCESSFUL; } 40003ab8: 81 c3 e0 08 retl 40003abc: 90 10 20 00 clr %o0 40003cd0 : int open( const char *pathname, int flags, ... ) { 40003cd0: 9d e3 bf 80 save %sp, -128, %sp 40003cd4: f6 27 a0 50 st %i3, [ %fp + 0x50 ] 40003cd8: f8 27 a0 54 st %i4, [ %fp + 0x54 ] 40003cdc: fa 27 a0 58 st %i5, [ %fp + 0x58 ] 40003ce0: f4 27 a0 4c st %i2, [ %fp + 0x4c ] /* * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; 40003ce4: 82 06 60 01 add %i1, 1, %g1 if ( ( status & _FREAD ) == _FREAD ) eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 40003ce8: 80 88 60 02 btst 2, %g1 * Set the Evaluation flags */ eval_flags = 0; status = flags + 1; if ( ( status & _FREAD ) == _FREAD ) 40003cec: 82 08 60 01 and %g1, 1, %g1 eval_flags |= RTEMS_LIBIO_PERMS_READ; if ( ( status & _FWRITE ) == _FWRITE ) 40003cf0: 02 80 00 03 be 40003cfc 40003cf4: a1 28 60 02 sll %g1, 2, %l0 eval_flags |= RTEMS_LIBIO_PERMS_WRITE; 40003cf8: a0 14 20 02 or %l0, 2, %l0 va_start(ap, flags); mode = va_arg( ap, int ); 40003cfc: 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 ) { 40003d00: 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(); 40003d04: 40 00 25 b8 call 4000d3e4 40003d08: c2 27 bf f4 st %g1, [ %fp + -12 ] if ( iop == 0 ) { 40003d0c: ba 92 20 00 orcc %o0, 0, %i5 40003d10: 02 80 00 62 be 40003e98 40003d14: 92 10 00 10 mov %l0, %o1 /* * See if the file exists. */ status = rtems_filesystem_evaluate_path( 40003d18: b6 07 bf e4 add %fp, -28, %i3 40003d1c: 90 10 00 18 mov %i0, %o0 40003d20: 94 10 00 1b mov %i3, %o2 40003d24: 7f ff fd 20 call 400031a4 40003d28: 96 10 20 01 mov 1, %o3 pathname, eval_flags, &loc, TRUE ); if ( status == -1 ) { 40003d2c: 80 a2 3f ff cmp %o0, -1 40003d30: 02 80 00 73 be 40003efc 40003d34: 82 0e 6a 00 and %i1, 0xa00, %g1 if ( status != 0 ) { /* The file did not exist */ rc = EACCES; goto done; } } else if ((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) { 40003d38: b8 10 20 11 mov 0x11, %i4 40003d3c: 80 a0 6a 00 cmp %g1, 0xa00 40003d40: 02 80 00 62 be 40003ec8 40003d44: a0 10 00 1b mov %i3, %l0 /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40003d48: c2 07 bf e8 ld [ %fp + -24 ], %g1 iop->file_info = loc.node_access; 40003d4c: c4 07 bf e4 ld [ %fp + -28 ], %g2 /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40003d50: c2 27 60 30 st %g1, [ %i5 + 0x30 ] iop->file_info = loc.node_access; 40003d54: c4 27 60 2c st %g2, [ %i5 + 0x2c ] iop->flags |= rtems_libio_fcntl_flags( flags ); 40003d58: e0 07 60 0c ld [ %i5 + 0xc ], %l0 40003d5c: 40 00 25 e0 call 4000d4dc 40003d60: 90 10 00 19 mov %i1, %o0 iop->pathinfo = loc; 40003d64: c2 07 bf e4 ld [ %fp + -28 ], %g1 if ( !iop->handlers->open_h ) { 40003d68: c4 07 60 30 ld [ %i5 + 0x30 ], %g2 */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); iop->pathinfo = loc; 40003d6c: c2 27 60 10 st %g1, [ %i5 + 0x10 ] 40003d70: c2 07 bf e8 ld [ %fp + -24 ], %g1 if ( !iop->handlers->open_h ) { 40003d74: c4 00 80 00 ld [ %g2 ], %g2 */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); iop->pathinfo = loc; 40003d78: c2 27 60 14 st %g1, [ %i5 + 0x14 ] 40003d7c: c2 07 bf ec ld [ %fp + -20 ], %g1 * returned by successful path evaluation. */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 40003d80: 90 12 00 10 or %o0, %l0, %o0 iop->pathinfo = loc; 40003d84: c2 27 60 18 st %g1, [ %i5 + 0x18 ] 40003d88: c2 07 bf f0 ld [ %fp + -16 ], %g1 * returned by successful path evaluation. */ iop->handlers = loc.handlers; iop->file_info = loc.node_access; iop->flags |= rtems_libio_fcntl_flags( flags ); 40003d8c: d0 27 60 0c st %o0, [ %i5 + 0xc ] iop->pathinfo = loc; if ( !iop->handlers->open_h ) { 40003d90: 80 a0 a0 00 cmp %g2, 0 40003d94: 02 80 00 54 be 40003ee4 40003d98: c2 27 60 1c st %g1, [ %i5 + 0x1c ] rc = ENOTSUP; goto done; } rc = (*iop->handlers->open_h)( iop, pathname, flags, mode ); 40003d9c: 92 10 00 18 mov %i0, %o1 40003da0: 96 10 00 1a mov %i2, %o3 40003da4: 90 10 00 1d mov %i5, %o0 40003da8: 9f c0 80 00 call %g2 40003dac: 94 10 00 19 mov %i1, %o2 if ( rc ) 40003db0: b8 92 20 00 orcc %o0, 0, %i4 40003db4: 12 80 00 29 bne 40003e58 40003db8: 80 8e 64 00 btst 0x400, %i1 /* * Optionally truncate the file. */ if ( (flags & O_TRUNC) == O_TRUNC ) { 40003dbc: 02 80 00 16 be 40003e14 40003dc0: 21 10 00 6a sethi %hi(0x4001a800), %l0 rc = ftruncate( iop - rtems_libio_iops, 0 ); 40003dc4: c4 04 23 c8 ld [ %l0 + 0x3c8 ], %g2 ! 4001abc8 <== NOT EXECUTED 40003dc8: 92 10 20 00 clr %o1 <== NOT EXECUTED 40003dcc: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 40003dd0: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 40003dd4: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 40003dd8: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40003ddc: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40003de0: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 40003de4: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40003de8: 87 2a 20 0c sll %o0, 0xc, %g3 <== NOT EXECUTED 40003dec: 90 02 00 03 add %o0, %g3, %o0 <== NOT EXECUTED 40003df0: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 40003df4: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 40003df8: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40003dfc: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 40003e00: 40 00 24 9f call 4000d07c <== NOT EXECUTED 40003e04: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED if ( rc ) { 40003e08: b8 92 20 00 orcc %o0, 0, %i4 <== NOT EXECUTED 40003e0c: 12 80 00 5a bne 40003f74 <== NOT EXECUTED 40003e10: 01 00 00 00 nop <== NOT EXECUTED if ( loc_to_free ) rtems_filesystem_freenode( loc_to_free ); rtems_set_errno_and_return_minus_one( rc ); } return iop - rtems_libio_iops; 40003e14: c6 04 23 c8 ld [ %l0 + 0x3c8 ], %g3 40003e18: 86 27 40 03 sub %i5, %g3, %g3 40003e1c: 87 38 e0 02 sra %g3, 2, %g3 40003e20: 89 28 e0 02 sll %g3, 2, %g4 40003e24: 85 28 e0 06 sll %g3, 6, %g2 40003e28: 84 20 80 04 sub %g2, %g4, %g2 40003e2c: 83 28 a0 06 sll %g2, 6, %g1 40003e30: 82 20 40 02 sub %g1, %g2, %g1 40003e34: 89 28 60 0c sll %g1, 0xc, %g4 40003e38: 82 00 40 04 add %g1, %g4, %g1 40003e3c: 82 00 40 03 add %g1, %g3, %g1 40003e40: 83 28 60 04 sll %g1, 4, %g1 40003e44: 82 20 40 03 sub %g1, %g3, %g1 40003e48: 83 28 60 02 sll %g1, 2, %g1 40003e4c: b0 20 c0 01 sub %g3, %g1, %i0 40003e50: 81 c7 e0 08 ret 40003e54: 81 e8 00 00 restore /* * Single exit and clean up path. */ done: va_end(ap); 40003e58: a0 10 00 1b mov %i3, %l0 <== NOT EXECUTED if ( rc ) { if ( iop ) rtems_libio_free( iop ); 40003e5c: 40 00 25 4b call 4000d388 <== NOT EXECUTED 40003e60: 90 10 00 1d mov %i5, %o0 <== NOT EXECUTED if ( loc_to_free ) 40003e64: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40003e68: 02 80 00 0c be 40003e98 40003e6c: 01 00 00 00 nop rtems_filesystem_freenode( loc_to_free ); 40003e70: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED 40003e74: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003e78: 02 80 00 08 be 40003e98 <== NOT EXECUTED 40003e7c: 01 00 00 00 nop <== NOT EXECUTED 40003e80: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40003e84: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003e88: 02 80 00 04 be 40003e98 <== NOT EXECUTED 40003e8c: 01 00 00 00 nop <== NOT EXECUTED 40003e90: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003e94: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( rc ); 40003e98: 40 00 2d 09 call 4000f2bc <__errno> 40003e9c: b0 10 3f ff mov -1, %i0 40003ea0: f8 22 00 00 st %i4, [ %o0 ] 40003ea4: 81 c7 e0 08 ret 40003ea8: 81 e8 00 00 restore } /* Create the node for the new regular file */ rc = mknod( pathname, S_IFREG | mode, 0LL ); if ( rc ) { rc = errno; 40003eac: 40 00 2d 04 call 4000f2bc <__errno> <== NOT EXECUTED 40003eb0: 01 00 00 00 nop <== NOT EXECUTED 40003eb4: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED */ done: va_end(ap); if ( rc ) { 40003eb8: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40003ebc: 02 bf ff d6 be 40003e14 <== NOT EXECUTED 40003ec0: 21 10 00 6a sethi %hi(0x4001a800), %l0 <== NOT EXECUTED 40003ec4: a0 10 20 00 clr %l0 <== NOT EXECUTED if ( iop ) 40003ec8: 80 a7 60 00 cmp %i5, 0 40003ecc: 22 bf ff e7 be,a 40003e68 40003ed0: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED rtems_libio_free( iop ); 40003ed4: 40 00 25 2d call 4000d388 40003ed8: 90 10 00 1d mov %i5, %o0 if ( loc_to_free ) 40003edc: 10 bf ff e3 b 40003e68 40003ee0: 80 a4 20 00 cmp %l0, 0 rtems_filesystem_freenode( loc_to_free ); rtems_set_errno_and_return_minus_one( rc ); } return iop - rtems_libio_iops; 40003ee4: a0 10 00 1b mov %i3, %l0 <== NOT EXECUTED done: va_end(ap); if ( rc ) { if ( iop ) 40003ee8: 80 a7 60 00 cmp %i5, 0 <== NOT EXECUTED 40003eec: 12 bf ff fa bne 40003ed4 <== NOT EXECUTED 40003ef0: b8 10 20 86 mov 0x86, %i4 <== NOT EXECUTED rtems_libio_free( iop ); if ( loc_to_free ) 40003ef4: 10 bf ff dd b 40003e68 <== NOT EXECUTED 40003ef8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED status = rtems_filesystem_evaluate_path( pathname, eval_flags, &loc, TRUE ); if ( status == -1 ) { if ( errno != ENOENT ) { 40003efc: 40 00 2c f0 call 4000f2bc <__errno> 40003f00: 01 00 00 00 nop 40003f04: c2 02 00 00 ld [ %o0 ], %g1 40003f08: 80 a0 60 02 cmp %g1, 2 40003f0c: 12 bf ff e8 bne 40003eac 40003f10: 80 8e 62 00 btst 0x200, %i1 rc = errno; goto done; } /* If the file does not exist and we are not trying to create it--> error */ if ( !(flags & O_CREAT) ) { 40003f14: b8 10 20 02 mov 2, %i4 40003f18: 02 bf ff ec be 40003ec8 40003f1c: a0 10 20 00 clr %l0 rc = ENOENT; goto done; } /* Create the node for the new regular file */ rc = mknod( pathname, S_IFREG | mode, 0LL ); 40003f20: 13 3f ff e0 sethi %hi(0xffff8000), %o1 <== NOT EXECUTED 40003f24: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003f28: 92 16 80 09 or %i2, %o1, %o1 <== NOT EXECUTED 40003f2c: 94 10 20 00 clr %o2 <== NOT EXECUTED 40003f30: 93 2a 60 10 sll %o1, 0x10, %o1 <== NOT EXECUTED 40003f34: 96 10 20 00 clr %o3 <== NOT EXECUTED 40003f38: 7f ff fe 41 call 4000383c <== NOT EXECUTED 40003f3c: 93 32 60 10 srl %o1, 0x10, %o1 <== NOT EXECUTED if ( rc ) { 40003f40: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003f44: 12 bf ff da bne 40003eac <== NOT EXECUTED 40003f48: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rc = errno; goto done; } /* Sanity check to see if the file name exists after the mknod() */ status = rtems_filesystem_evaluate_path( pathname, 0x0, &loc, TRUE ); 40003f4c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40003f50: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40003f54: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40003f58: 7f ff fc 93 call 400031a4 <== NOT EXECUTED 40003f5c: b8 10 20 0d mov 0xd, %i4 <== NOT EXECUTED if ( status != 0 ) { /* The file did not exist */ 40003f60: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003f64: 12 bf ff d9 bne 40003ec8 <== NOT EXECUTED 40003f68: a0 10 20 00 clr %l0 <== NOT EXECUTED /* * Fill in the file control block based on the loc structure * returned by successful path evaluation. */ iop->handlers = loc.handlers; 40003f6c: 10 bf ff 78 b 40003d4c <== NOT EXECUTED 40003f70: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED */ if ( (flags & O_TRUNC) == O_TRUNC ) { rc = ftruncate( iop - rtems_libio_iops, 0 ); if ( rc ) { if(errno) rc = errno; 40003f74: 40 00 2c d2 call 4000f2bc <__errno> <== NOT EXECUTED 40003f78: 01 00 00 00 nop <== NOT EXECUTED 40003f7c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 40003f80: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003f84: 12 80 00 15 bne 40003fd8 <== NOT EXECUTED 40003f88: 01 00 00 00 nop <== NOT EXECUTED close( iop - rtems_libio_iops ); 40003f8c: c4 04 23 c8 ld [ %l0 + 0x3c8 ], %g2 <== NOT EXECUTED 40003f90: 84 27 40 02 sub %i5, %g2, %g2 <== NOT EXECUTED 40003f94: 85 38 a0 02 sra %g2, 2, %g2 <== NOT EXECUTED 40003f98: 87 28 a0 02 sll %g2, 2, %g3 <== NOT EXECUTED 40003f9c: 83 28 a0 06 sll %g2, 6, %g1 <== NOT EXECUTED 40003fa0: 82 20 40 03 sub %g1, %g3, %g1 <== NOT EXECUTED 40003fa4: 91 28 60 06 sll %g1, 6, %o0 <== NOT EXECUTED 40003fa8: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40003fac: 87 2a 20 0c sll %o0, 0xc, %g3 <== NOT EXECUTED 40003fb0: ba 10 20 00 clr %i5 <== NOT EXECUTED 40003fb4: 90 02 00 03 add %o0, %g3, %o0 <== NOT EXECUTED 40003fb8: 90 02 00 02 add %o0, %g2, %o0 <== NOT EXECUTED 40003fbc: 91 2a 20 04 sll %o0, 4, %o0 <== NOT EXECUTED 40003fc0: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40003fc4: 91 2a 20 02 sll %o0, 2, %o0 <== NOT EXECUTED 40003fc8: 40 00 23 fc call 4000cfb8 <== NOT EXECUTED 40003fcc: 90 20 80 08 sub %g2, %o0, %o0 <== NOT EXECUTED */ done: va_end(ap); if ( rc ) { 40003fd0: 10 bf ff bb b 40003ebc <== NOT EXECUTED 40003fd4: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED */ if ( (flags & O_TRUNC) == O_TRUNC ) { rc = ftruncate( iop - rtems_libio_iops, 0 ); if ( rc ) { if(errno) rc = errno; 40003fd8: 40 00 2c b9 call 4000f2bc <__errno> <== NOT EXECUTED 40003fdc: 01 00 00 00 nop <== NOT EXECUTED 40003fe0: 10 bf ff eb b 40003f8c <== NOT EXECUTED 40003fe4: f8 02 00 00 ld [ %o0 ], %i4 <== NOT EXECUTED 40003c54 : /* * This is a replaceable stub */ void open_dev_console(void) { 40003c54: 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) { 40003c58: 31 10 00 63 sethi %hi(0x40018c00), %i0 40003c5c: 92 10 20 00 clr %o1 40003c60: 90 16 22 f8 or %i0, 0x2f8, %o0 40003c64: 40 00 00 1b call 40003cd0 40003c68: 94 10 20 00 clr %o2 40003c6c: 80 a2 3f ff cmp %o0, -1 40003c70: 02 80 00 0f be 40003cac 40003c74: 90 16 22 f8 or %i0, 0x2f8, %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) 40003c78: 92 10 20 01 mov 1, %o1 40003c7c: 40 00 00 15 call 40003cd0 40003c80: 94 10 20 00 clr %o2 40003c84: 80 a2 3f ff cmp %o0, -1 40003c88: 02 80 00 0e be 40003cc0 40003c8c: 11 14 d5 11 sethi %hi(0x53544400), %o0 rtems_fatal_error_occurred( error_code | '1' ); if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1) 40003c90: 90 16 22 f8 or %i0, 0x2f8, %o0 40003c94: 92 10 20 01 mov 1, %o1 40003c98: 40 00 00 0e call 40003cd0 40003c9c: 94 10 20 00 clr %o2 40003ca0: 80 a2 3f ff cmp %o0, -1 40003ca4: 02 80 00 04 be 40003cb4 40003ca8: 31 14 d5 11 sethi %hi(0x53544400), %i0 40003cac: 81 c7 e0 08 ret 40003cb0: 81 e8 00 00 restore rtems_fatal_error_occurred( error_code | '2' ); 40003cb4: b0 16 20 32 or %i0, 0x32, %i0 <== NOT EXECUTED 40003cb8: 40 00 0f b0 call 40007b78 <== NOT EXECUTED 40003cbc: 81 e8 00 00 restore <== NOT EXECUTED /* * But if we find /dev/console once, we better find it twice more * or something is REALLY wrong. */ if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1) rtems_fatal_error_occurred( error_code | '1' ); 40003cc0: 40 00 0f ae call 40007b78 <== NOT EXECUTED 40003cc4: 90 12 20 31 or %o0, 0x31, %o0 <== NOT EXECUTED if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1) 40003cc8: 10 bf ff f3 b 40003c94 <== NOT EXECUTED 40003ccc: 90 16 22 f8 or %i0, 0x2f8, %o0 <== NOT EXECUTED 4001a6fc : * open a directory. */ DIR * opendir(name) const char *name; { 4001a6fc: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register DIR *dirp; register int fd; if ((fd = open(name, 0)) == -1) 4001a700: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001a704: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a708: 7f ff b2 b3 call 400071d4 <== NOT EXECUTED 4001a70c: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a710: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4001a714: 02 80 00 18 be 4001a774 <== NOT EXECUTED 4001a718: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED return NULL; if (fcntl(fd, F_SETFD, 1) == -1 || 4001a71c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 4001a720: 40 00 27 72 call 400244e8 <== NOT EXECUTED 4001a724: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 4001a728: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4001a72c: 02 80 00 15 be 4001a780 <== NOT EXECUTED 4001a730: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a734: 7f ff af e8 call 400066d4 <== NOT EXECUTED 4001a738: 90 10 20 18 mov 0x18, %o0 <== NOT EXECUTED 4001a73c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a740: 22 80 00 10 be,a 4001a780 <== NOT EXECUTED 4001a744: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a748: 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); 4001a74c: 7f ff af e2 call 400066d4 <== NOT EXECUTED 4001a750: 90 10 22 00 mov 0x200, %o0 <== NOT EXECUTED dirp->dd_len = 512; 4001a754: 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); 4001a758: d0 26 20 0c st %o0, [ %i0 + 0xc ] <== NOT EXECUTED dirp->dd_len = 512; if (dirp->dd_buf == NULL) { 4001a75c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a760: 02 80 00 07 be 4001a77c <== NOT EXECUTED 4001a764: c2 26 20 10 st %g1, [ %i0 + 0x10 ] <== NOT EXECUTED close (fd); return NULL; } dirp->dd_fd = fd; 4001a768: e0 26 00 00 st %l0, [ %i0 ] <== NOT EXECUTED dirp->dd_loc = 0; 4001a76c: c0 26 20 04 clr [ %i0 + 4 ] <== NOT EXECUTED dirp->dd_seek = 0; 4001a770: c0 26 20 14 clr [ %i0 + 0x14 ] <== NOT EXECUTED /* * Set up seek point for rewinddir. */ return dirp; } 4001a774: 81 c7 e0 08 ret <== NOT EXECUTED 4001a778: 81 e8 00 00 restore <== NOT EXECUTED */ dirp->dd_buf = malloc (512); dirp->dd_len = 512; if (dirp->dd_buf == NULL) { close (fd); 4001a77c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001a780: 7f ff ad cd call 40005eb4 <== NOT EXECUTED 4001a784: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001a788: 81 c7 e0 08 ret <== NOT EXECUTED 4001a78c: 81 e8 00 00 restore <== NOT EXECUTED 40004b80 : /* * Handle output processing */ static void oproc (unsigned char c, struct rtems_termios_tty *tty) { 40004b80: 9d e3 bf 98 save %sp, -104, %sp int i; if (tty->termios.c_oflag & OPOST) { 40004b84: c6 06 60 34 ld [ %i1 + 0x34 ], %g3 40004b88: 80 88 e0 01 btst 1, %g3 40004b8c: 02 80 00 10 be 40004bcc 40004b90: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] switch (c) { 40004b94: b0 0e 20 ff and %i0, 0xff, %i0 40004b98: 80 a6 20 09 cmp %i0, 9 40004b9c: 22 80 00 28 be,a 40004c3c 40004ba0: c8 06 60 28 ld [ %i1 + 0x28 ], %g4 40004ba4: 18 80 00 10 bgu 40004be4 40004ba8: 80 a6 20 0a cmp %i0, 0xa 40004bac: 80 a6 20 08 cmp %i0, 8 <== NOT EXECUTED 40004bb0: 12 80 00 11 bne 40004bf4 <== NOT EXECUTED 40004bb4: 80 88 e0 02 btst 2, %g3 <== NOT EXECUTED } tty->column += i; break; case '\b': if (tty->column > 0) 40004bb8: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40004bbc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004bc0: 04 80 00 03 ble 40004bcc <== NOT EXECUTED 40004bc4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->column--; 40004bc8: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED if (!iscntrl(c)) tty->column++; break; } } rtems_termios_puts (&c, 1, tty); 40004bcc: 94 10 00 19 mov %i1, %o2 40004bd0: 90 07 a0 44 add %fp, 0x44, %o0 40004bd4: 7f ff ff 96 call 40004a2c 40004bd8: 92 10 20 01 mov 1, %o1 40004bdc: 81 c7 e0 08 ret 40004be0: 81 e8 00 00 restore oproc (unsigned char c, struct rtems_termios_tty *tty) { int i; if (tty->termios.c_oflag & OPOST) { switch (c) { 40004be4: 02 80 00 24 be 40004c74 40004be8: 80 a6 20 0d cmp %i0, 0xd 40004bec: 02 80 00 2f be 40004ca8 40004bf0: 80 88 e0 02 btst 2, %g3 if (tty->column > 0) tty->column--; break; default: if (tty->termios.c_oflag & OLCUC) 40004bf4: 02 80 00 08 be 40004c14 40004bf8: 07 10 00 68 sethi %hi(0x4001a000), %g3 c = toupper(c); 40004bfc: c4 00 e3 c0 ld [ %g3 + 0x3c0 ], %g2 ! 4001a3c0 <__ctype_ptr> <== NOT EXECUTED 40004c00: c2 08 80 18 ldub [ %g2 + %i0 ], %g1 <== NOT EXECUTED 40004c04: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40004c08: 32 80 00 02 bne,a 40004c10 <== NOT EXECUTED 40004c0c: b0 06 3f e0 add %i0, -32, %i0 <== NOT EXECUTED 40004c10: f0 2f a0 44 stb %i0, [ %fp + 0x44 ] <== NOT EXECUTED if (!iscntrl(c)) 40004c14: c2 00 e3 c0 ld [ %g3 + 0x3c0 ], %g1 40004c18: c4 0f a0 44 ldub [ %fp + 0x44 ], %g2 40004c1c: c6 08 80 01 ldub [ %g2 + %g1 ], %g3 40004c20: 80 88 e0 20 btst 0x20, %g3 40004c24: 12 bf ff eb bne 40004bd0 40004c28: 94 10 00 19 mov %i1, %o2 tty->column++; 40004c2c: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 40004c30: 82 00 60 01 inc %g1 40004c34: 10 bf ff e7 b 40004bd0 40004c38: c2 26 60 28 st %g1, [ %i1 + 0x28 ] tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40004c3c: 05 00 00 06 sethi %hi(0x1800), %g2 40004c40: 82 08 c0 02 and %g3, %g2, %g1 } tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); 40004c44: 86 09 20 07 and %g4, 7, %g3 if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40004c48: 80 a0 40 02 cmp %g1, %g2 } tty->column = 0; break; case '\t': i = 8 - (tty->column & 7); 40004c4c: 82 10 20 08 mov 8, %g1 if ((tty->termios.c_oflag & TABDLY) == XTABS) { 40004c50: 02 80 00 25 be 40004ce4 40004c54: 92 20 40 03 sub %g1, %g3, %o1 tty->column += i; rtems_termios_puts ( " ", i, tty); return; } tty->column += i; 40004c58: 82 02 40 04 add %o1, %g4, %g1 <== NOT EXECUTED if (!iscntrl(c)) tty->column++; break; } } rtems_termios_puts (&c, 1, tty); 40004c5c: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED if ((tty->termios.c_oflag & TABDLY) == XTABS) { tty->column += i; rtems_termios_puts ( " ", i, tty); return; } tty->column += i; 40004c60: c2 26 60 28 st %g1, [ %i1 + 0x28 ] <== NOT EXECUTED if (!iscntrl(c)) tty->column++; break; } } rtems_termios_puts (&c, 1, tty); 40004c64: 90 07 a0 44 add %fp, 0x44, %o0 <== NOT EXECUTED 40004c68: 7f ff ff 71 call 40004a2c <== NOT EXECUTED 40004c6c: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40004c70: 30 80 00 23 b,a 40004cfc <== NOT EXECUTED int i; if (tty->termios.c_oflag & OPOST) { switch (c) { case '\n': if (tty->termios.c_oflag & ONLRET) 40004c74: 80 88 e0 20 btst 0x20, %g3 40004c78: 32 80 00 02 bne,a 40004c80 40004c7c: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED tty->column = 0; if (tty->termios.c_oflag & ONLCR) { 40004c80: 80 88 e0 04 btst 4, %g3 40004c84: 02 bf ff d3 be 40004bd0 40004c88: 94 10 00 19 mov %i1, %o2 rtems_termios_puts ("\r", 1, tty); 40004c8c: 11 10 00 64 sethi %hi(0x40019000), %o0 40004c90: 92 10 20 01 mov 1, %o1 40004c94: 90 12 21 f0 or %o0, 0x1f0, %o0 40004c98: 7f ff ff 65 call 40004a2c 40004c9c: 94 10 00 19 mov %i1, %o2 tty->column = 0; 40004ca0: 10 bf ff cb b 40004bcc 40004ca4: c0 26 60 28 clr [ %i1 + 0x28 ] } break; case '\r': if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0)) 40004ca8: 80 88 e0 10 btst 0x10, %g3 <== NOT EXECUTED 40004cac: 02 80 00 06 be 40004cc4 <== NOT EXECUTED 40004cb0: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED 40004cb4: c2 06 60 28 ld [ %i1 + 0x28 ], %g1 <== NOT EXECUTED 40004cb8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004cbc: 02 bf ff c8 be 40004bdc <== NOT EXECUTED 40004cc0: 80 88 e0 08 btst 8, %g3 <== NOT EXECUTED return; if (tty->termios.c_oflag & OCRNL) { 40004cc4: 22 bf ff c2 be,a 40004bcc <== NOT EXECUTED 40004cc8: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED c = '\n'; 40004ccc: 82 10 20 0a mov 0xa, %g1 <== NOT EXECUTED if (tty->termios.c_oflag & ONLRET) 40004cd0: 80 88 e0 20 btst 0x20, %g3 <== NOT EXECUTED 40004cd4: 02 bf ff be be 40004bcc <== NOT EXECUTED 40004cd8: c2 2f a0 44 stb %g1, [ %fp + 0x44 ] <== NOT EXECUTED tty->column = 0; break; } tty->column = 0; 40004cdc: 10 bf ff bc b 40004bcc <== NOT EXECUTED 40004ce0: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { tty->column += i; 40004ce4: 82 02 40 04 add %o1, %g4, %g1 rtems_termios_puts ( " ", i, tty); 40004ce8: 94 10 00 19 mov %i1, %o2 break; case '\t': i = 8 - (tty->column & 7); if ((tty->termios.c_oflag & TABDLY) == XTABS) { tty->column += i; 40004cec: c2 26 60 28 st %g1, [ %i1 + 0x28 ] rtems_termios_puts ( " ", i, tty); 40004cf0: 11 10 00 64 sethi %hi(0x40019000), %o0 40004cf4: 7f ff ff 4e call 40004a2c 40004cf8: 90 12 21 f8 or %o0, 0x1f8, %o0 ! 400191f8 40004cfc: 81 c7 e0 08 ret 40004d00: 81 e8 00 00 restore 400043a8 : } } /* vprintk */ void printk(const char *fmt, ...) { 400043a8: 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 */ 400043ac: 92 07 a0 48 add %fp, 0x48, %o1 <== NOT EXECUTED } } /* vprintk */ void printk(const char *fmt, ...) { 400043b0: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 400043b4: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 400043b8: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 400043bc: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 400043c0: 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); 400043c4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400043c8: 7f ff ff 44 call 400040d8 <== NOT EXECUTED 400043cc: d2 27 bf f4 st %o1, [ %fp + -12 ] <== NOT EXECUTED va_end(ap); /* clean up when done */ } /* printk */ 400043d0: 81 c7 e0 08 ret <== NOT EXECUTED 400043d4: 81 e8 00 00 restore <== NOT EXECUTED 4001889c : ssize_t read( int fd, void *buffer, size_t count ) { 4001889c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 400188a0: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 400188a4: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 40019c3c <== NOT EXECUTED ssize_t read( int fd, void *buffer, size_t count ) { 400188a8: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 400188ac: 80 a6 00 02 cmp %i0, %g2 <== NOT EXECUTED 400188b0: 1a 80 00 24 bcc 40018940 <== NOT EXECUTED 400188b4: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED iop = rtems_libio_iop( fd ); 400188b8: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED 400188bc: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4001abc8 <== NOT EXECUTED 400188c0: 85 2e 20 02 sll %i0, 2, %g2 <== NOT EXECUTED 400188c4: 83 2e 20 04 sll %i0, 4, %g1 <== NOT EXECUTED 400188c8: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 400188cc: 82 00 40 18 add %g1, %i0, %g1 <== NOT EXECUTED 400188d0: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 400188d4: b0 00 40 03 add %g1, %g3, %i0 <== NOT EXECUTED rtems_libio_check_is_open(iop); 400188d8: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 400188dc: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 400188e0: 02 80 00 18 be 40018940 <== NOT EXECUTED 400188e4: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 400188e8: 02 80 00 1c be 40018958 <== NOT EXECUTED 400188ec: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED rtems_libio_check_count( count ); 400188f0: 02 80 00 12 be 40018938 <== NOT EXECUTED 400188f4: 90 10 20 00 clr %o0 <== NOT EXECUTED rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); 400188f8: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 400188fc: 02 80 00 17 be 40018958 <== NOT EXECUTED 40018900: 01 00 00 00 nop <== NOT EXECUTED /* * Now process the read(). */ if ( !iop->handlers->read_h ) 40018904: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 <== NOT EXECUTED 40018908: c2 00 60 08 ld [ %g1 + 8 ], %g1 <== NOT EXECUTED 4001890c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40018910: 02 80 00 18 be 40018970 <== NOT EXECUTED 40018914: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); rc = (*iop->handlers->read_h)( iop, buffer, count ); 40018918: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001891c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED if ( rc > 0 ) 40018920: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40018924: 04 80 00 05 ble 40018938 <== NOT EXECUTED 40018928: 01 00 00 00 nop <== NOT EXECUTED iop->offset += rc; 4001892c: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 40018930: 82 00 40 08 add %g1, %o0, %g1 <== NOT EXECUTED 40018934: c2 26 20 08 st %g1, [ %i0 + 8 ] <== NOT EXECUTED return rc; } 40018938: 81 c7 e0 08 ret <== NOT EXECUTED 4001893c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 40018940: 7f ff da 5f call 4000f2bc <__errno> <== NOT EXECUTED 40018944: 01 00 00 00 nop <== NOT EXECUTED 40018948: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 4001894c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018950: 10 bf ff fa b 40018938 <== NOT EXECUTED 40018954: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); rtems_libio_check_count( count ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); 40018958: 7f ff da 59 call 4000f2bc <__errno> <== NOT EXECUTED 4001895c: 01 00 00 00 nop <== NOT EXECUTED 40018960: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40018964: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018968: 10 bf ff f4 b 40018938 <== NOT EXECUTED 4001896c: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Now process the read(). */ if ( !iop->handlers->read_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40018970: 7f ff da 53 call 4000f2bc <__errno> <== NOT EXECUTED 40018974: 01 00 00 00 nop <== NOT EXECUTED 40018978: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 4001897c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018980: 10 bf ff ee b 40018938 <== NOT EXECUTED 40018984: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED 4001aa04 : /* * get next entry in a directory. */ struct dirent * readdir(dirp) register DIR *dirp; { 4001aa04: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED register struct dirent *dp; if ( !dirp ) 4001aa08: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 4001aa0c: 02 80 00 29 be 4001aab0 <== NOT EXECUTED 4001aa10: 88 10 20 00 clr %g4 <== NOT EXECUTED 4001aa14: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED return NULL; for (;;) { if (dirp->dd_loc == 0) { 4001aa18: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 4001aa1c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001aa20: 22 80 00 1b be,a 4001aa8c <== NOT EXECUTED 4001aa24: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED dirp->dd_len); if (dirp->dd_size <= 0) return NULL; } if (dirp->dd_loc >= dirp->dd_size) { 4001aa28: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED 4001aa2c: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4001aa30: 24 bf ff fa ble,a 4001aa18 <== NOT EXECUTED 4001aa34: c0 26 20 04 clr [ %i0 + 4 ] <== NOT EXECUTED dirp->dd_loc = 0; continue; } dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc); 4001aa38: 88 00 80 09 add %g2, %o1, %g4 <== NOT EXECUTED if ((intptr_t)dp & 03) /* bogus pointer check */ 4001aa3c: 80 89 20 03 btst 3, %g4 <== NOT EXECUTED 4001aa40: 32 80 00 1c bne,a 4001aab0 <== NOT EXECUTED 4001aa44: 88 10 20 00 clr %g4 <== NOT EXECUTED return NULL; if (dp->d_reclen <= 0 || 4001aa48: c6 11 20 08 lduh [ %g4 + 8 ], %g3 <== NOT EXECUTED 4001aa4c: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4001aa50: 02 80 00 17 be 4001aaac <== NOT EXECUTED 4001aa54: 9a 00 80 03 add %g2, %g3, %o5 <== NOT EXECUTED 4001aa58: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED 4001aa5c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001aa60: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 4001aa64: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 4001aa68: 34 80 00 12 bg,a 4001aab0 <== NOT EXECUTED 4001aa6c: 88 10 20 00 clr %g4 <== NOT EXECUTED dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) return NULL; dirp->dd_loc += dp->d_reclen; 4001aa70: da 26 20 04 st %o5, [ %i0 + 4 ] <== NOT EXECUTED if (dp->d_ino == 0) 4001aa74: c2 00 80 09 ld [ %g2 + %o1 ], %g1 <== NOT EXECUTED 4001aa78: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001aa7c: 22 bf ff e8 be,a 4001aa1c <== NOT EXECUTED 4001aa80: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED continue; return (dp); } } 4001aa84: 81 c7 e0 08 ret <== NOT EXECUTED 4001aa88: 91 e8 00 04 restore %g0, %g4, %o0 <== NOT EXECUTED if ( !dirp ) return NULL; for (;;) { if (dirp->dd_loc == 0) { dirp->dd_size = getdents (dirp->dd_fd, 4001aa8c: 40 00 27 78 call 4002486c <== NOT EXECUTED 4001aa90: d4 06 20 10 ld [ %i0 + 0x10 ], %o2 <== NOT EXECUTED dirp->dd_buf, dirp->dd_len); if (dirp->dd_size <= 0) 4001aa94: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001aa98: 04 80 00 05 ble 4001aaac <== NOT EXECUTED 4001aa9c: d0 26 20 08 st %o0, [ %i0 + 8 ] <== NOT EXECUTED 4001aaa0: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 4001aaa4: 10 bf ff e1 b 4001aa28 <== NOT EXECUTED 4001aaa8: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED return NULL; if (dp->d_reclen <= 0 || dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) return NULL; dirp->dd_loc += dp->d_reclen; if (dp->d_ino == 0) 4001aaac: 88 10 20 00 clr %g4 <== NOT EXECUTED continue; return (dp); } } 4001aab0: 81 c7 e0 08 ret <== NOT EXECUTED 4001aab4: 91 e8 00 04 restore %g0, %g4, %o0 <== NOT EXECUTED 400035ec : void *realloc( void *ptr, size_t size ) { 400035ec: 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())) { 400035f0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 400035f4: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> <== NOT EXECUTED 400035f8: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 400035fc: 02 80 00 10 be 4000363c <== NOT EXECUTED 40003600: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED } /* * Continue with realloc(). */ if ( !ptr ) 40003604: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED 40003608: 02 80 00 13 be 40003654 <== NOT EXECUTED 4000360c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED return malloc( size ); if ( !size ) { 40003610: 02 80 00 15 be 40003664 <== NOT EXECUTED 40003614: 21 10 00 6a sethi %hi(0x4001a800), %l0 <== NOT EXECUTED memcpy(np,ptr,size); free(ptr); return np; } #endif if ( _Protected_heap_Resize_block( &RTEMS_Malloc_Heap, ptr, size ) ) { 40003618: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000361c: 90 14 23 d4 or %l0, 0x3d4, %o0 <== NOT EXECUTED 40003620: 40 00 19 6f call 40009bdc <_Protected_heap_Resize_block> <== NOT EXECUTED 40003624: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED 40003628: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000362c: 02 80 00 13 be 40003678 <== NOT EXECUTED 40003630: 01 00 00 00 nop <== NOT EXECUTED memcpy( new_area, ptr, (size < old_size) ? size : old_size ); free( ptr ); return new_area; } 40003634: 81 c7 e0 08 ret <== NOT EXECUTED 40003638: 81 e8 00 00 restore <== NOT EXECUTED /* * Do not attempt to allocate memory if in a critical section or ISR. */ if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) 4000363c: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 <== NOT EXECUTED 40003640: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003644: 02 80 00 25 be 400036d8 <== NOT EXECUTED 40003648: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED memcpy( new_area, ptr, (size < old_size) ? size : old_size ); free( ptr ); return new_area; } 4000364c: 81 c7 e0 08 ret <== NOT EXECUTED 40003650: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Continue with realloc(). */ if ( !ptr ) return malloc( size ); 40003654: 7f ff ff 95 call 400034a8 <== NOT EXECUTED 40003658: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4000365c: 81 c7 e0 08 ret <== NOT EXECUTED 40003660: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( !size ) { free( ptr ); 40003664: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003668: 7f ff ff 67 call 40003404 <== NOT EXECUTED 4000366c: b0 10 20 00 clr %i0 <== NOT EXECUTED 40003670: 81 c7 e0 08 ret <== NOT EXECUTED 40003674: 81 e8 00 00 restore <== NOT EXECUTED #endif if ( _Protected_heap_Resize_block( &RTEMS_Malloc_Heap, ptr, size ) ) { return ptr; } new_area = malloc( size ); 40003678: 7f ff ff 8c call 400034a8 <== NOT EXECUTED 4000367c: 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 ) { 40003680: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 40003684: 02 bf ff f2 be 4000364c <== NOT EXECUTED 40003688: 90 14 23 d4 or %l0, 0x3d4, %o0 <== NOT EXECUTED return (void *) 0; } if ( !_Protected_heap_Get_block_size(&RTEMS_Malloc_Heap, ptr, &old_size) ) { 4000368c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40003690: 40 00 18 b7 call 4000996c <_Protected_heap_Get_block_size> <== NOT EXECUTED 40003694: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40003698: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000369c: 02 80 00 15 be 400036f0 <== NOT EXECUTED 400036a0: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED errno = EINVAL; return (void *) 0; } memcpy( new_area, ptr, (size < old_size) ? size : old_size ); 400036a4: 80 a6 40 01 cmp %i1, %g1 <== NOT EXECUTED 400036a8: 08 80 00 03 bleu 400036b4 <== NOT EXECUTED 400036ac: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 400036b0: 90 10 00 01 mov %g1, %o0 <== NOT EXECUTED 400036b4: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 400036b8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400036bc: 40 00 30 d5 call 4000fa10 <== NOT EXECUTED 400036c0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED free( ptr ); 400036c4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 400036c8: 7f ff ff 4f call 40003404 <== NOT EXECUTED 400036cc: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 400036d0: 81 c7 e0 08 ret <== NOT EXECUTED 400036d4: 81 e8 00 00 restore <== NOT EXECUTED if (_System_state_Is_up(_System_state_Get())) { if (_Thread_Dispatch_disable_level > 0) return (void *) 0; if (_ISR_Nest_level > 0) 400036d8: c4 00 62 54 ld [ %g1 + 0x254 ], %g2 <== NOT EXECUTED 400036dc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400036e0: 02 bf ff ca be 40003608 <== NOT EXECUTED 400036e4: 80 a6 20 00 cmp %i0, 0 <== NOT EXECUTED } memcpy( new_area, ptr, (size < old_size) ? size : old_size ); free( ptr ); return new_area; 400036e8: 81 c7 e0 08 ret <== NOT EXECUTED 400036ec: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if ( !new_area ) { return (void *) 0; } if ( !_Protected_heap_Get_block_size(&RTEMS_Malloc_Heap, ptr, &old_size) ) { errno = EINVAL; 400036f0: 40 00 2e f3 call 4000f2bc <__errno> <== NOT EXECUTED 400036f4: b0 10 20 00 clr %i0 <== NOT EXECUTED 400036f8: 82 10 20 16 mov 0x16, %g1 <== NOT EXECUTED 400036fc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40003700: 81 c7 e0 08 ret <== NOT EXECUTED 40003704: 81 e8 00 00 restore <== NOT EXECUTED 4001aab8 : #include int rmdir( const char *pathname ) { 4001aab8: 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 ); 4001aabc: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001aac0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001aac4: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 4001aac8: 96 10 20 00 clr %o3 <== NOT EXECUTED 4001aacc: 7f ff ad 5b call 40006038 <== NOT EXECUTED 4001aad0: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 4001aad4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001aad8: 02 80 00 04 be 4001aae8 <== NOT EXECUTED 4001aadc: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED result = (*loc.handlers->rmnod_h)( &loc ); rtems_filesystem_freenode( &loc ); return result; } 4001aae0: 81 c7 e0 08 ret <== NOT EXECUTED 4001aae4: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED result = rtems_filesystem_evaluate_path( pathname, 0, &loc, FALSE ); if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 4001aae8: 7f ff ad 24 call 40005f78 <== NOT EXECUTED 4001aaec: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0) { 4001aaf0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001aaf4: 12 80 00 2d bne 4001aba8 <== NOT EXECUTED 4001aaf8: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED /* * Verify you can remove this node as a directory. */ if ( !loc.ops->node_type_h ){ 4001aafc: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4001ab00: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ab04: 22 80 00 35 be,a 4001abd8 <== NOT EXECUTED 4001ab08: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ 4001ab0c: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001ab10: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001ab14: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4001ab18: 12 80 00 14 bne 4001ab68 <== NOT EXECUTED 4001ab1c: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ 4001ab20: c2 00 60 34 ld [ %g1 + 0x34 ], %g1 <== NOT EXECUTED 4001ab24: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ab28: 22 80 00 37 be,a 4001ac04 <== NOT EXECUTED 4001ab2c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.handlers->rmnod_h)( &loc ); 4001ab30: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001ab34: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 4001ab38: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001ab3c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ab40: 02 80 00 08 be 4001ab60 <== NOT EXECUTED 4001ab44: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4001ab48: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001ab4c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ab50: 02 80 00 2b be 4001abfc <== NOT EXECUTED 4001ab54: 01 00 00 00 nop <== NOT EXECUTED 4001ab58: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001ab5c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001ab60: 81 c7 e0 08 ret <== NOT EXECUTED 4001ab64: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ rtems_filesystem_freenode( &loc ); 4001ab68: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001ab6c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ab70: 02 80 00 08 be 4001ab90 <== NOT EXECUTED 4001ab74: 01 00 00 00 nop <== NOT EXECUTED 4001ab78: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001ab7c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ab80: 02 80 00 04 be 4001ab90 <== NOT EXECUTED 4001ab84: 01 00 00 00 nop <== NOT EXECUTED 4001ab88: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001ab8c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTDIR ); 4001ab90: 40 00 2f 88 call 400269b0 <__errno> <== NOT EXECUTED 4001ab94: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001ab98: 82 10 20 14 mov 0x14, %g1 <== NOT EXECUTED 4001ab9c: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001aba0: 81 c7 e0 08 ret <== NOT EXECUTED 4001aba4: 81 e8 00 00 restore <== NOT EXECUTED if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); if (result != 0) { rtems_filesystem_freenode( &loc ); 4001aba8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001abac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001abb0: 02 bf ff ec be 4001ab60 <== NOT EXECUTED 4001abb4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001abb8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001abbc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001abc0: 02 bf ff e8 be 4001ab60 <== NOT EXECUTED 4001abc4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001abc8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001abcc: 01 00 00 00 nop <== NOT EXECUTED 4001abd0: 81 c7 e0 08 ret <== NOT EXECUTED 4001abd4: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify you can remove this node as a directory. */ if ( !loc.ops->node_type_h ){ rtems_filesystem_freenode( &loc ); 4001abd8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001abdc: 02 80 00 04 be 4001abec <== NOT EXECUTED 4001abe0: 01 00 00 00 nop <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ rtems_filesystem_freenode( &loc ); 4001abe4: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001abe8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 4001abec: 40 00 2f 71 call 400269b0 <__errno> <== NOT EXECUTED 4001abf0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001abf4: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4001abf8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001abfc: 81 c7 e0 08 ret <== NOT EXECUTED 4001ac00: 81 e8 00 00 restore <== NOT EXECUTED /* * Use the filesystems rmnod to remove the node. */ if ( !loc.handlers->rmnod_h ){ rtems_filesystem_freenode( &loc ); 4001ac04: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ac08: 02 bf ff f9 be 4001abec <== NOT EXECUTED 4001ac0c: 01 00 00 00 nop <== NOT EXECUTED 4001ac10: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001ac14: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ac18: 12 bf ff f3 bne 4001abe4 <== NOT EXECUTED 4001ac1c: 01 00 00 00 nop <== NOT EXECUTED 4001ac20: 30 bf ff f3 b,a 4001abec <== NOT EXECUTED 4000eb38 : uint32_t rtems_assoc_local_by_remote_bitfield( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000eb38: 9d e3 bf 98 save %sp, -104, %sp 4000eb3c: a2 10 20 01 mov 1, %l1 4000eb40: a4 10 00 18 mov %i0, %l2 4000eb44: a0 10 20 00 clr %l0 4000eb48: 10 80 00 05 b 4000eb5c 4000eb4c: b0 10 20 00 clr %i0 uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000eb50: 80 a4 20 20 cmp %l0, 0x20 4000eb54: 02 80 00 0d be 4000eb88 4000eb58: a3 2c 60 01 sll %l1, 1, %l1 if (b & remote_value) 4000eb5c: 80 8c 40 19 btst %l1, %i1 4000eb60: 22 bf ff fc be,a 4000eb50 4000eb64: a0 04 20 01 inc %l0 local_value |= rtems_assoc_local_by_remote(ap, b); 4000eb68: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4000eb6c: 40 00 00 09 call 4000eb90 <== NOT EXECUTED 4000eb70: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED ) { uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000eb74: a0 04 20 01 inc %l0 <== NOT EXECUTED if (b & remote_value) local_value |= rtems_assoc_local_by_remote(ap, b); 4000eb78: b0 16 00 08 or %i0, %o0, %i0 <== NOT EXECUTED ) { uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4000eb7c: 80 a4 20 20 cmp %l0, 0x20 <== NOT EXECUTED 4000eb80: 12 bf ff f7 bne 4000eb5c <== NOT EXECUTED 4000eb84: a3 2c 60 01 sll %l1, 1, %l1 <== NOT EXECUTED if (b & remote_value) local_value |= rtems_assoc_local_by_remote(ap, b); } return local_value; } 4000eb88: 81 c7 e0 08 ret 4000eb8c: 81 e8 00 00 restore 4001a0b4 : sprintf(bad_buffer, "< %" PRId32 "[0x%" PRIx32 " ] >", bad_value, bad_value); #else static char bad_buffer[32] = ""; #endif return bad_buffer; } 4001a0b4: 11 10 00 ac sethi %hi(0x4002b000), %o0 <== NOT EXECUTED 4001a0b8: 81 c3 e0 08 retl <== NOT EXECUTED 4001a0bc: 90 12 23 18 or %o0, 0x318, %o0 ! 4002b318 <== NOT EXECUTED 40015ef8 : const char *rtems_assoc_name_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 40015ef8: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 40015efc: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40015f00: 40 00 00 0b call 40015f2c <== NOT EXECUTED 40015f04: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED if (nap) 40015f08: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40015f0c: 02 80 00 05 be 40015f20 <== NOT EXECUTED 40015f10: 01 00 00 00 nop <== NOT EXECUTED return nap->name; return rtems_assoc_name_bad(local_value); } 40015f14: f0 02 00 00 ld [ %o0 ], %i0 <== NOT EXECUTED 40015f18: 81 c7 e0 08 ret <== NOT EXECUTED 40015f1c: 81 e8 00 00 restore <== NOT EXECUTED nap = rtems_assoc_ptr_by_local(ap, local_value); if (nap) return nap->name; return rtems_assoc_name_bad(local_value); 40015f20: 40 00 10 65 call 4001a0b4 <== NOT EXECUTED 40015f24: 91 e8 00 19 restore %g0, %i1, %o0 <== NOT EXECUTED 40015f28: 01 00 00 00 nop 4000f210 : const rtems_assoc_t *rtems_assoc_ptr_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 4000f210: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000f214: d0 06 00 00 ld [ %i0 ], %o0 <== NOT EXECUTED 4000f218: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000f21c: 02 80 00 1e be 4000f294 <== NOT EXECUTED 4000f220: 13 10 00 65 sethi %hi(0x40019400), %o1 <== NOT EXECUTED 4000f224: 40 00 04 b4 call 400104f4 <== NOT EXECUTED 4000f228: 92 12 61 28 or %o1, 0x128, %o1 ! 40019528 <_CPU_Trap_slot_template+0x1a8> <== NOT EXECUTED 4000f22c: 84 10 00 18 mov %i0, %g2 <== NOT EXECUTED 4000f230: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000f234: 12 80 00 0f bne 4000f270 <== NOT EXECUTED 4000f238: 86 10 20 00 clr %g3 <== NOT EXECUTED default_ap = ap++; for ( ; ap->name; ap++) 4000f23c: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000f240: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000f244: 02 80 00 10 be 4000f284 <== NOT EXECUTED 4000f248: 84 06 20 0c add %i0, 0xc, %g2 <== NOT EXECUTED if (ap->local_value == local_value) 4000f24c: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4000f250: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000f254: 02 80 00 0b be 4000f280 <== NOT EXECUTED 4000f258: 86 10 00 18 mov %i0, %g3 <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000f25c: 84 00 a0 0c add %g2, 0xc, %g2 <== NOT EXECUTED 4000f260: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED 4000f264: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000f268: 02 80 00 09 be 4000f28c <== NOT EXECUTED 4000f26c: 01 00 00 00 nop <== NOT EXECUTED if (ap->local_value == local_value) 4000f270: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4000f274: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000f278: 32 bf ff fa bne,a 4000f260 <== NOT EXECUTED 4000f27c: 84 00 a0 0c add %g2, 0xc, %g2 <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000f280: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED if (ap->local_value == local_value) return ap; return default_ap; } 4000f284: 81 c7 e0 08 ret <== NOT EXECUTED 4000f288: 81 e8 00 00 restore <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000f28c: 81 c7 e0 08 ret <== NOT EXECUTED 4000f290: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED uint32_t local_value ) { const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000f294: 81 c7 e0 08 ret <== NOT EXECUTED 4000f298: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000ebb8 : const rtems_assoc_t *rtems_assoc_ptr_by_remote( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000ebb8: 9d e3 bf 98 save %sp, -104, %sp const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000ebbc: d0 06 00 00 ld [ %i0 ], %o0 4000ebc0: 80 a2 20 00 cmp %o0, 0 4000ebc4: 02 80 00 1e be 4000ec3c 4000ebc8: 13 10 00 65 sethi %hi(0x40019400), %o1 4000ebcc: 40 00 06 4a call 400104f4 4000ebd0: 92 12 61 28 or %o1, 0x128, %o1 ! 40019528 <_CPU_Trap_slot_template+0x1a8> 4000ebd4: 84 10 00 18 mov %i0, %g2 4000ebd8: 80 a2 20 00 cmp %o0, 0 4000ebdc: 12 80 00 0f bne 4000ec18 4000ebe0: 86 10 20 00 clr %g3 default_ap = ap++; for ( ; ap->name; ap++) 4000ebe4: c2 06 20 0c ld [ %i0 + 0xc ], %g1 <== NOT EXECUTED 4000ebe8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000ebec: 02 80 00 10 be 4000ec2c <== NOT EXECUTED 4000ebf0: 84 06 20 0c add %i0, 0xc, %g2 <== NOT EXECUTED if (ap->remote_value == remote_value) 4000ebf4: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED 4000ebf8: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4000ebfc: 02 80 00 0b be 4000ec28 <== NOT EXECUTED 4000ec00: 86 10 00 18 mov %i0, %g3 <== NOT EXECUTED const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000ec04: 84 00 a0 0c add %g2, 0xc, %g2 <== NOT EXECUTED 4000ec08: c2 00 80 00 ld [ %g2 ], %g1 4000ec0c: 80 a0 60 00 cmp %g1, 0 4000ec10: 02 80 00 09 be 4000ec34 4000ec14: 01 00 00 00 nop if (ap->remote_value == remote_value) 4000ec18: c2 00 a0 08 ld [ %g2 + 8 ], %g1 4000ec1c: 80 a0 40 19 cmp %g1, %i1 4000ec20: 32 bf ff fa bne,a 4000ec08 4000ec24: 84 00 a0 0c add %g2, 0xc, %g2 const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000ec28: b0 10 00 02 mov %g2, %i0 if (ap->remote_value == remote_value) return ap; return default_ap; } 4000ec2c: 81 c7 e0 08 ret 4000ec30: 81 e8 00 00 restore const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) default_ap = ap++; for ( ; ap->name; ap++) 4000ec34: 81 c7 e0 08 ret <== NOT EXECUTED 4000ec38: 91 e8 00 03 restore %g0, %g3, %o0 <== NOT EXECUTED uint32_t remote_value ) { const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000ec3c: 81 c7 e0 08 ret <== NOT EXECUTED 4000ec40: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4000ec44 : uint32_t rtems_assoc_remote_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 4000ec44: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED const rtems_assoc_t *nap; nap = rtems_assoc_ptr_by_local(ap, local_value); 4000ec48: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000ec4c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 4000ec50: 40 00 01 70 call 4000f210 <== NOT EXECUTED 4000ec54: b0 10 20 00 clr %i0 <== NOT EXECUTED if (nap) 4000ec58: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000ec5c: 32 80 00 02 bne,a 4000ec64 <== NOT EXECUTED 4000ec60: f0 02 20 08 ld [ %o0 + 8 ], %i0 <== NOT EXECUTED return nap->remote_value; return 0; } 4000ec64: 81 c7 e0 08 ret <== NOT EXECUTED 4000ec68: 81 e8 00 00 restore <== NOT EXECUTED 400073b4 : rtems_name name, rtems_attribute attribute_set, uint32_t maximum_waiters, rtems_id *id ) { 400073b4: 9d e3 bf 90 save %sp, -112, %sp Barrier_Control *the_barrier; CORE_barrier_Attributes the_attributes; if ( !rtems_is_name_valid( name ) ) 400073b8: a4 96 20 00 orcc %i0, 0, %l2 400073bc: 02 80 00 20 be 4000743c 400073c0: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 400073c4: 80 a6 e0 00 cmp %i3, 0 400073c8: 02 80 00 1d be 4000743c 400073cc: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; /* Initialize core barrier attributes */ if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { 400073d0: 80 8e 60 10 btst 0x10, %i1 400073d4: 02 80 00 39 be 400074b8 400073d8: 80 a6 a0 00 cmp %i2, 0 the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; if ( maximum_waiters == 0 ) 400073dc: 02 80 00 18 be 4000743c 400073e0: 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; 400073e4: c0 27 bf f0 clr [ %fp + -16 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400073e8: 21 10 00 7b sethi %hi(0x4001ec00), %l0 400073ec: c2 04 21 f0 ld [ %l0 + 0x1f0 ], %g1 ! 4001edf0 <_Thread_Dispatch_disable_level> if ( maximum_waiters == 0 ) return RTEMS_INVALID_NUMBER; } else the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE; the_attributes.maximum_count = maximum_waiters; 400073f0: f4 27 bf f4 st %i2, [ %fp + -12 ] 400073f4: 82 00 60 01 inc %g1 400073f8: c2 24 21 f0 st %g1, [ %l0 + 0x1f0 ] * 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 ); 400073fc: 23 10 00 7b sethi %hi(0x4001ec00), %l1 40007400: 40 00 0a 45 call 40009d14 <_Objects_Allocate> 40007404: 90 14 60 58 or %l1, 0x58, %o0 ! 4001ec58 <_Barrier_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_barrier = _Barrier_Allocate(); if ( !the_barrier ) { 40007408: b4 92 20 00 orcc %o0, 0, %i2 4000740c: 12 80 00 0e bne 40007444 40007410: 90 06 a0 14 add %i2, 0x14, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007414: c2 04 21 f0 ld [ %l0 + 0x1f0 ], %g1 40007418: b0 10 20 05 mov 5, %i0 4000741c: 82 00 7f ff add %g1, -1, %g1 40007420: c2 24 21 f0 st %g1, [ %l0 + 0x1f0 ] 40007424: c4 04 21 f0 ld [ %l0 + 0x1f0 ], %g2 40007428: 80 a0 a0 00 cmp %g2, 0 4000742c: 12 80 00 21 bne 400074b0 40007430: 01 00 00 00 nop _Thread_Dispatch(); 40007434: 40 00 10 b1 call 4000b6f8 <_Thread_Dispatch> 40007438: 01 00 00 00 nop 4000743c: 81 c7 e0 08 ret 40007440: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } the_barrier->attribute_set = attribute_set; 40007444: f2 26 a0 10 st %i1, [ %i2 + 0x10 ] _CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes ); 40007448: 40 00 07 67 call 400091e4 <_CORE_barrier_Initialize> 4000744c: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40007450: 90 14 60 58 or %l1, 0x58, %o0 Objects_Name name ) { uint32_t index; index = _Objects_Get_index( the_object->id ); 40007454: c6 06 a0 08 ld [ %i2 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40007458: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 4000745c: 03 00 00 3f sethi %hi(0xfc00), %g1 40007460: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40007464: 82 08 c0 01 and %g3, %g1, %g1 40007468: 80 a0 40 02 cmp %g1, %g2 4000746c: 38 80 00 06 bgu,a 40007484 40007470: e4 26 a0 0c st %l2, [ %i2 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40007474: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40007478: 83 28 60 02 sll %g1, 2, %g1 4000747c: 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; 40007480: e4 26 a0 0c st %l2, [ %i2 + 0xc ] &_Barrier_Information, &the_barrier->Object, (Objects_Name) name ); *id = the_barrier->Object.id; 40007484: c6 26 c0 00 st %g3, [ %i3 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007488: c2 04 21 f0 ld [ %l0 + 0x1f0 ], %g1 4000748c: b0 10 20 00 clr %i0 40007490: 82 00 7f ff add %g1, -1, %g1 40007494: c2 24 21 f0 st %g1, [ %l0 + 0x1f0 ] 40007498: c4 04 21 f0 ld [ %l0 + 0x1f0 ], %g2 4000749c: 80 a0 a0 00 cmp %g2, 0 400074a0: 12 80 00 04 bne 400074b0 400074a4: 01 00 00 00 nop _Thread_Dispatch(); 400074a8: 40 00 10 94 call 4000b6f8 <_Thread_Dispatch> 400074ac: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 400074b0: 81 c7 e0 08 ret 400074b4: 81 e8 00 00 restore if ( _Attributes_Is_barrier_automatic( attribute_set ) ) { the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE; if ( maximum_waiters == 0 ) return RTEMS_INVALID_NUMBER; } else the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE; 400074b8: 82 10 20 01 mov 1, %g1 400074bc: 10 bf ff cb b 400073e8 400074c0: c2 27 bf f0 st %g1, [ %fp + -16 ] 400074c4 : */ rtems_status_code rtems_barrier_delete( rtems_id id ) { 400074c4: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 400074c8: 21 10 00 7b sethi %hi(0x4001ec00), %l0 400074cc: 92 10 00 18 mov %i0, %o1 400074d0: 94 07 bf f4 add %fp, -12, %o2 400074d4: 40 00 0b 61 call 4000a258 <_Objects_Get> 400074d8: 90 14 20 58 or %l0, 0x58, %o0 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 400074dc: c2 07 bf f4 ld [ %fp + -12 ], %g1 400074e0: 80 a0 60 00 cmp %g1, 0 400074e4: 12 80 00 20 bne 40007564 400074e8: b0 10 00 08 mov %o0, %i0 case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _CORE_barrier_Flush( 400074ec: 90 02 20 14 add %o0, 0x14, %o0 400074f0: 92 10 20 00 clr %o1 400074f4: 40 00 12 f7 call 4000c0d0 <_Thread_queue_Flush> 400074f8: 94 10 20 02 mov 2, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 400074fc: 90 14 20 58 or %l0, 0x58, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40007500: c2 06 20 08 ld [ %i0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40007504: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40007508: 05 00 00 3f sethi %hi(0xfc00), %g2 4000750c: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40007510: 82 08 40 02 and %g1, %g2, %g1 40007514: 80 a0 40 03 cmp %g1, %g3 40007518: 38 80 00 06 bgu,a 40007530 4000751c: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40007520: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40007524: 83 28 60 02 sll %g1, 2, %g1 40007528: 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; 4000752c: c0 26 20 0c clr [ %i0 + 0xc ] */ RTEMS_INLINE_ROUTINE void _Barrier_Free ( Barrier_Control *the_barrier ) { _Objects_Free( &_Barrier_Information, &the_barrier->Object ); 40007530: 40 00 0b 07 call 4000a14c <_Objects_Free> 40007534: 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 ) 40007538: 03 10 00 7b sethi %hi(0x4001ec00), %g1 4000753c: c4 00 61 f0 ld [ %g1 + 0x1f0 ], %g2 ! 4001edf0 <_Thread_Dispatch_disable_level> 40007540: b0 10 20 00 clr %i0 40007544: 84 00 bf ff add %g2, -1, %g2 40007548: c4 20 61 f0 st %g2, [ %g1 + 0x1f0 ] 4000754c: c6 00 61 f0 ld [ %g1 + 0x1f0 ], %g3 40007550: 80 a0 e0 00 cmp %g3, 0 40007554: 02 80 00 09 be 40007578 40007558: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000755c: 81 c7 e0 08 ret 40007560: 81 e8 00 00 restore { Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40007564: 80 a0 60 02 cmp %g1, 2 40007568: 08 bf ff fd bleu 4000755c 4000756c: b0 10 20 04 mov 4, %i0 40007570: 81 c7 e0 08 ret <== NOT EXECUTED 40007574: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40007578: 40 00 10 60 call 4000b6f8 <_Thread_Dispatch> 4000757c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007580: 81 c7 e0 08 ret 40007584: 81 e8 00 00 restore 400075c0 : rtems_status_code rtems_barrier_release( rtems_id id, uint32_t *released ) { 400075c0: 9d e3 bf 90 save %sp, -112, %sp 400075c4: a0 10 00 18 mov %i0, %l0 Barrier_Control *the_barrier; Objects_Locations location; if ( !released ) 400075c8: 80 a6 60 00 cmp %i1, 0 400075cc: 02 80 00 1f be 40007648 400075d0: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get ( Objects_Id id, Objects_Locations *location ) { return (Barrier_Control *) 400075d4: 11 10 00 7b sethi %hi(0x4001ec00), %o0 400075d8: 92 10 00 10 mov %l0, %o1 400075dc: 90 12 20 58 or %o0, 0x58, %o0 400075e0: 40 00 0b 1e call 4000a258 <_Objects_Get> 400075e4: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 400075e8: c2 07 bf f4 ld [ %fp + -12 ], %g1 400075ec: 80 a0 60 00 cmp %g1, 0 400075f0: 02 80 00 07 be 4000760c 400075f4: 92 10 00 10 mov %l0, %o1 400075f8: 80 a0 60 02 cmp %g1, 2 400075fc: 08 80 00 13 bleu 40007648 40007600: b0 10 20 04 mov 4, %i0 40007604: 81 c7 e0 08 ret <== NOT EXECUTED 40007608: 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 ); 4000760c: 94 10 20 00 clr %o2 40007610: 40 00 07 01 call 40009214 <_CORE_barrier_Release> 40007614: 90 02 20 14 add %o0, 0x14, %o0 40007618: 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 ) 4000761c: 03 10 00 7b sethi %hi(0x4001ec00), %g1 40007620: c4 00 61 f0 ld [ %g1 + 0x1f0 ], %g2 ! 4001edf0 <_Thread_Dispatch_disable_level> 40007624: b0 10 20 00 clr %i0 40007628: 84 00 bf ff add %g2, -1, %g2 4000762c: c4 20 61 f0 st %g2, [ %g1 + 0x1f0 ] 40007630: c6 00 61 f0 ld [ %g1 + 0x1f0 ], %g3 40007634: 80 a0 e0 00 cmp %g3, 0 40007638: 12 80 00 04 bne 40007648 4000763c: 01 00 00 00 nop _Thread_Dispatch(); 40007640: 40 00 10 2e call 4000b6f8 <_Thread_Dispatch> 40007644: 01 00 00 00 nop return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007648: 81 c7 e0 08 ret 4000764c: 81 e8 00 00 restore 40007650 : rtems_status_code rtems_barrier_wait( rtems_id id, rtems_interval timeout ) { 40007650: 9d e3 bf 90 save %sp, -112, %sp 40007654: 11 10 00 7b sethi %hi(0x4001ec00), %o0 40007658: 92 10 00 18 mov %i0, %o1 4000765c: 90 12 20 58 or %o0, 0x58, %o0 40007660: 40 00 0a fe call 4000a258 <_Objects_Get> 40007664: 94 07 bf f4 add %fp, -12, %o2 Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 40007668: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000766c: 80 a0 60 00 cmp %g1, 0 40007670: 12 80 00 14 bne 400076c0 40007674: 96 10 00 19 mov %i1, %o3 case OBJECTS_REMOTE: case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _CORE_barrier_Wait( 40007678: 90 02 20 14 add %o0, 0x14, %o0 4000767c: 92 10 00 18 mov %i0, %o1 40007680: 94 10 20 01 mov 1, %o2 40007684: 40 00 06 ef call 40009240 <_CORE_barrier_Wait> 40007688: 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 ) 4000768c: 03 10 00 7b sethi %hi(0x4001ec00), %g1 40007690: c4 00 61 f0 ld [ %g1 + 0x1f0 ], %g2 ! 4001edf0 <_Thread_Dispatch_disable_level> 40007694: 84 00 bf ff add %g2, -1, %g2 40007698: c4 20 61 f0 st %g2, [ %g1 + 0x1f0 ] 4000769c: c6 00 61 f0 ld [ %g1 + 0x1f0 ], %g3 400076a0: 80 a0 e0 00 cmp %g3, 0 400076a4: 02 80 00 0d be 400076d8 400076a8: 03 10 00 7b sethi %hi(0x4001ec00), %g1 TRUE, timeout, NULL ); _Thread_Enable_dispatch(); return _Barrier_Translate_core_barrier_return_code( 400076ac: c4 00 62 cc ld [ %g1 + 0x2cc ], %g2 ! 4001eecc <_Thread_Executing> <== NOT EXECUTED 400076b0: 40 00 1d 9a call 4000ed18 <_Barrier_Translate_core_barrier_return_code> <== NOT EXECUTED 400076b4: d0 00 a0 34 ld [ %g2 + 0x34 ], %o0 <== NOT EXECUTED _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400076b8: 81 c7 e0 08 ret 400076bc: 91 e8 00 08 restore %g0, %o0, %o0 { Barrier_Control *the_barrier; Objects_Locations location; the_barrier = _Barrier_Get( id, &location ); switch ( location ) { 400076c0: 80 a0 60 02 cmp %g1, 2 400076c4: 08 bf ff fd bleu 400076b8 400076c8: 90 10 20 04 mov 4, %o0 400076cc: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400076d0: 81 c7 e0 08 ret <== NOT EXECUTED 400076d4: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 400076d8: 40 00 10 08 call 4000b6f8 <_Thread_Dispatch> 400076dc: 01 00 00 00 nop TRUE, timeout, NULL ); _Thread_Enable_dispatch(); return _Barrier_Translate_core_barrier_return_code( 400076e0: 03 10 00 7b sethi %hi(0x4001ec00), %g1 400076e4: c4 00 62 cc ld [ %g1 + 0x2cc ], %g2 ! 4001eecc <_Thread_Executing> 400076e8: 40 00 1d 8c call 4000ed18 <_Barrier_Translate_core_barrier_return_code> 400076ec: d0 00 a0 34 ld [ %g2 + 0x34 ], %o0 400076f0: 30 bf ff f2 b,a 400076b8 400063c8 : rtems_status_code rtems_clock_get( rtems_clock_get_options option, void *time_buffer ) { 400063c8: 9d e3 bf 60 save %sp, -160, %sp 400063cc: 82 10 00 18 mov %i0, %g1 if ( !time_buffer ) 400063d0: 80 a6 60 00 cmp %i1, 0 400063d4: 02 80 00 19 be 40006438 400063d8: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; switch ( option ) { 400063dc: 80 a0 60 04 cmp %g1, 4 400063e0: 18 80 00 16 bgu 40006438 400063e4: b0 10 20 19 mov 0x19, %i0 400063e8: 83 28 60 02 sll %g1, 2, %g1 400063ec: 05 10 00 18 sethi %hi(0x40006000), %g2 400063f0: 84 10 a3 b4 or %g2, 0x3b4, %g2 ! 400063b4 400063f4: c6 00 80 01 ld [ %g2 + %g1 ], %g3 400063f8: 81 c0 c0 00 jmp %g3 400063fc: 01 00 00 00 nop } case RTEMS_CLOCK_GET_TIME_VALUE: { struct timeval *time = (struct timeval *)time_buffer; if ( !_TOD_Is_set ) 40006400: 03 10 00 6b sethi %hi(0x4001ac00), %g1 <== NOT EXECUTED 40006404: c4 00 61 cc ld [ %g1 + 0x1cc ], %g2 ! 4001adcc <_TOD_Is_set> <== NOT EXECUTED 40006408: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000640c: 12 80 00 46 bne 40006524 <== NOT EXECUTED 40006410: 01 00 00 00 nop <== NOT EXECUTED } } return RTEMS_INTERNAL_ERROR; /* should never get here */ } 40006414: 81 c7 e0 08 ret 40006418: 91 e8 20 0b restore %g0, 0xb, %o0 } case RTEMS_CLOCK_GET_TICKS_PER_SECOND: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = TOD_MICROSECONDS_PER_SECOND / _TOD_Microseconds_per_tick; 4000641c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006420: d2 00 63 6c ld [ %g1 + 0x36c ], %o1 ! 4001af6c <_TOD_Microseconds_per_tick> 40006424: 11 00 03 d0 sethi %hi(0xf4000), %o0 40006428: b0 10 20 00 clr %i0 4000642c: 40 00 3f cd call 40016360 <.udiv> 40006430: 90 12 22 40 or %o0, 0x240, %o0 40006434: d0 26 40 00 st %o0, [ %i1 ] 40006438: 81 c7 e0 08 ret 4000643c: 81 e8 00 00 restore } case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT: { rtems_interval *interval = (rtems_interval *)time_buffer; *interval = _Watchdog_Ticks_since_boot; 40006440: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006444: c4 00 63 14 ld [ %g1 + 0x314 ], %g2 ! 4001af14 <_Watchdog_Ticks_since_boot> 40006448: c4 26 40 00 st %g2, [ %i1 ] 4000644c: 81 c7 e0 08 ret 40006450: 91 e8 20 00 restore %g0, 0, %o0 return RTEMS_SUCCESSFUL; } case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH: { rtems_interval *interval = (rtems_interval *)time_buffer; if ( !_TOD_Is_set ) 40006454: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006458: c4 00 61 cc ld [ %g1 + 0x1cc ], %g2 ! 4001adcc <_TOD_Is_set> 4000645c: 80 a0 a0 00 cmp %g2, 0 40006460: 02 bf ff ed be 40006414 40006464: 03 10 00 6b sethi %hi(0x4001ac00), %g1 return RTEMS_NOT_DEFINED; *interval = _TOD_Seconds_since_epoch; 40006468: c4 00 62 48 ld [ %g1 + 0x248 ], %g2 ! 4001ae48 <_TOD_Now> 4000646c: c4 26 40 00 st %g2, [ %i1 ] 40006470: 81 c7 e0 08 ret 40006474: 91 e8 20 00 restore %g0, 0, %o0 case RTEMS_CLOCK_GET_TOD: { struct tm time; struct timeval now; rtems_time_of_day *tmbuf = (rtems_time_of_day *)time_buffer; if ( !_TOD_Is_set ) 40006478: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000647c: c4 00 61 cc ld [ %g1 + 0x1cc ], %g2 ! 4001adcc <_TOD_Is_set> 40006480: 80 a0 a0 00 cmp %g2, 0 40006484: 02 bf ff e4 be 40006414 40006488: 01 00 00 00 nop ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 4000648c: 7f ff ee d0 call 40001fcc 40006490: 01 00 00 00 nop 40006494: a0 10 00 08 mov %o0, %l0 _TOD_Get( &now ); 40006498: 40 00 07 71 call 4000825c <_TOD_Get> 4000649c: 90 07 bf e8 add %fp, -24, %o0 _ISR_Enable(level); 400064a0: 7f ff ee cf call 40001fdc 400064a4: 90 10 00 10 mov %l0, %o0 time->tv_sec = now.tv_sec; 400064a8: c2 07 bf e8 ld [ %fp + -24 ], %g1 time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 400064ac: d0 07 bf ec ld [ %fp + -20 ], %o0 _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 400064b0: c2 27 bf f0 st %g1, [ %fp + -16 ] time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 400064b4: 40 00 3f ab call 40016360 <.udiv> 400064b8: 92 10 23 e8 mov 0x3e8, %o1 /* Obtain the current time */ _TOD_Get_timeval( &now ); /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); 400064bc: 92 07 bf c4 add %fp, -60, %o1 400064c0: d0 27 bf f4 st %o0, [ %fp + -12 ] 400064c4: 40 00 25 4e call 4000f9fc 400064c8: 90 07 bf f0 add %fp, -16, %o0 /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; tmbuf->month = time.tm_mon + 1; tmbuf->day = time.tm_mday; 400064cc: c4 07 bf d0 ld [ %fp + -48 ], %g2 tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 400064d0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400064d4: d2 00 63 6c ld [ %g1 + 0x36c ], %o1 ! 4001af6c <_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; 400064d8: c4 26 60 08 st %g2, [ %i1 + 8 ] tmbuf->hour = time.tm_hour; 400064dc: c2 07 bf cc ld [ %fp + -52 ], %g1 tmbuf->minute = time.tm_min; 400064e0: c4 07 bf c8 ld [ %fp + -56 ], %g2 /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; tmbuf->month = time.tm_mon + 1; tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; 400064e4: c2 26 60 0c st %g1, [ %i1 + 0xc ] tmbuf->minute = time.tm_min; 400064e8: c4 26 60 10 st %g2, [ %i1 + 0x10 ] /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; 400064ec: c2 07 bf d8 ld [ %fp + -40 ], %g1 tmbuf->month = time.tm_mon + 1; 400064f0: c4 07 bf d4 ld [ %fp + -44 ], %g2 tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; 400064f4: c6 07 bf c4 ld [ %fp + -60 ], %g3 tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 400064f8: d0 07 bf f4 ld [ %fp + -12 ], %o0 /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; 400064fc: 82 00 67 6c add %g1, 0x76c, %g1 tmbuf->month = time.tm_mon + 1; 40006500: 84 00 a0 01 inc %g2 tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; 40006504: c6 26 60 14 st %g3, [ %i1 + 0x14 ] /* Split it into a closer format */ gmtime_r( &now.tv_sec, &time ); /* Now adjust it to the RTEMS format */ tmbuf->year = time.tm_year + 1900; 40006508: c2 26 40 00 st %g1, [ %i1 ] tmbuf->month = time.tm_mon + 1; 4000650c: c4 26 60 04 st %g2, [ %i1 + 4 ] tmbuf->day = time.tm_mday; tmbuf->hour = time.tm_hour; tmbuf->minute = time.tm_min; tmbuf->second = time.tm_sec; tmbuf->ticks = now.tv_usec / _TOD_Microseconds_per_tick; 40006510: 40 00 3f 94 call 40016360 <.udiv> 40006514: b0 10 20 00 clr %i0 40006518: d0 26 60 18 st %o0, [ %i1 + 0x18 ] 4000651c: 81 c7 e0 08 ret 40006520: 81 e8 00 00 restore ) { ISR_Level level; struct timespec now; _ISR_Disable(level); 40006524: 7f ff ee aa call 40001fcc <== NOT EXECUTED 40006528: 01 00 00 00 nop <== NOT EXECUTED 4000652c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED _TOD_Get( &now ); 40006530: 40 00 07 4b call 4000825c <_TOD_Get> <== NOT EXECUTED 40006534: 90 07 bf e8 add %fp, -24, %o0 <== NOT EXECUTED _ISR_Enable(level); 40006538: 7f ff ee a9 call 40001fdc <== NOT EXECUTED 4000653c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED time->tv_sec = now.tv_sec; 40006540: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 40006544: d0 07 bf ec ld [ %fp + -20 ], %o0 <== NOT EXECUTED 40006548: 92 10 23 e8 mov 0x3e8, %o1 <== NOT EXECUTED _ISR_Disable(level); _TOD_Get( &now ); _ISR_Enable(level); time->tv_sec = now.tv_sec; 4000654c: c2 26 40 00 st %g1, [ %i1 ] <== NOT EXECUTED time->tv_usec = now.tv_nsec / TOD_NANOSECONDS_PER_MICROSECOND; 40006550: 40 00 3f 84 call 40016360 <.udiv> <== NOT EXECUTED 40006554: b0 10 20 00 clr %i0 <== NOT EXECUTED 40006558: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED 4000655c: 81 c7 e0 08 ret <== NOT EXECUTED 40006560: 81 e8 00 00 restore <== NOT EXECUTED 40006584 : * * NOTE: This routine only works for leap-years through 2099. */ rtems_status_code rtems_clock_tick( void ) { 40006584: 9d e3 bf 98 save %sp, -104, %sp _TOD_Tickle_ticks(); 40006588: 40 00 07 5d call 400082fc <_TOD_Tickle_ticks> 4000658c: 01 00 00 00 nop */ RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_ticks( void ) { _Watchdog_Tickle( &_Watchdog_Ticks_chain ); 40006590: 11 10 00 6b sethi %hi(0x4001ac00), %o0 40006594: 40 00 15 1b call 4000ba00 <_Watchdog_Tickle> 40006598: 90 12 22 8c or %o0, 0x28c, %o0 ! 4001ae8c <_Watchdog_Ticks_chain> _Watchdog_Tickle_ticks(); _Thread_Tickle_timeslice(); 4000659c: 40 00 13 3f call 4000b298 <_Thread_Tickle_timeslice> 400065a0: 01 00 00 00 nop * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_context_switch_necessary( void ) { return ( _Context_Switch_necessary ); 400065a4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400065a8: c4 00 62 7c ld [ %g1 + 0x27c ], %g2 ! 4001ae7c <_Context_Switch_necessary> if ( _Thread_Is_context_switch_necessary() && 400065ac: 80 a0 a0 00 cmp %g2, 0 400065b0: 02 80 00 06 be 400065c8 400065b4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 * otherwise. */ RTEMS_INLINE_ROUTINE boolean _Thread_Is_dispatching_enabled( void ) { return ( _Thread_Dispatch_disable_level == 0 ); 400065b8: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 400065bc: 80 a0 a0 00 cmp %g2, 0 400065c0: 02 80 00 04 be 400065d0 400065c4: 01 00 00 00 nop _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); return RTEMS_SUCCESSFUL; } 400065c8: 81 c7 e0 08 ret 400065cc: 91 e8 20 00 restore %g0, 0, %o0 _Thread_Tickle_timeslice(); if ( _Thread_Is_context_switch_necessary() && _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); 400065d0: 40 00 0f 45 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 400065d4: b0 10 20 00 clr %i0 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 400065d8: 81 c7 e0 08 ret <== NOT EXECUTED 400065dc: 81 e8 00 00 restore <== NOT EXECUTED 40003c9c : void rtems_cpu_usage_report_with_plugin( void *context, rtems_printk_plugin_t print ) { 40003c9c: 9d e3 bf 68 save %sp, -152, %sp struct timespec uptime, total, ran; #else uint32_t total_units = 0; #endif if ( !print ) 40003ca0: 80 a6 60 00 cmp %i1, 0 40003ca4: 02 80 00 61 be 40003e28 40003ca8: 01 00 00 00 nop * When not using nanosecond CPU usage resolution, we have to count * the number of "ticks" we gave credit for to give the user a rough * guideline as to what each number means proportionally. */ #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS _TOD_Get_uptime( &uptime ); 40003cac: 40 00 17 c2 call 40009bb4 <_TOD_Get_uptime> 40003cb0: 90 07 bf e0 add %fp, -32, %o0 _Timespec_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total ); 40003cb4: 92 07 bf e0 add %fp, -32, %o1 40003cb8: 94 07 bf d8 add %fp, -40, %o2 40003cbc: 11 10 00 9d sethi %hi(0x40027400), %o0 40003cc0: 40 00 25 ff call 4000d4bc <_Timespec_Subtract> 40003cc4: 90 12 22 74 or %o0, 0x274, %o0 ! 40027674 } } } #endif (*print)( context, "CPU Usage by thread\n" 40003cc8: 90 10 00 18 mov %i0, %o0 40003ccc: 13 10 00 72 sethi %hi(0x4001c800), %o1 40003cd0: 9f c6 40 00 call %i1 40003cd4: 92 12 63 10 or %o1, 0x310, %o1 ! 4001cb10 40003cd8: 03 10 00 9c sethi %hi(0x40027000), %g1 if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 40003cdc: 05 10 00 72 sethi %hi(0x4001c800), %g2 } } } #endif (*print)( context, "CPU Usage by thread\n" 40003ce0: aa 10 62 c4 or %g1, 0x2c4, %l5 the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003ce4: a8 07 bf eb add %fp, -21, %l4 /* * Print the information */ (*print)( context, 40003ce8: 03 10 00 72 sethi %hi(0x4001c800), %g1 if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 40003cec: b4 10 a3 50 or %g2, 0x350, %i2 /* * Print the information */ (*print)( context, 40003cf0: b6 10 63 68 or %g1, 0x368, %i3 /* * If this is the currently executing thread, account for time * since the last context switch. */ ran = the_thread->cpu_time_used; if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 40003cf4: 39 10 00 9d sethi %hi(0x40027400), %i4 _Timespec_Subtract( &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40003cf8: ba 07 bf f4 add %fp, -12, %i5 40003cfc: ae 07 bf f0 add %fp, -16, %l7 40003d00: ac 07 bf d0 add %fp, -48, %l6 ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 40003d04: c2 05 40 00 ld [ %l5 ], %g1 40003d08: 80 a0 60 00 cmp %g1, 0 40003d0c: 22 80 00 39 be,a 40003df0 40003d10: aa 05 60 04 add %l5, 4, %l5 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 40003d14: e6 00 60 04 ld [ %g1 + 4 ], %l3 if ( information ) { 40003d18: 80 a4 e0 00 cmp %l3, 0 40003d1c: 22 80 00 35 be,a 40003df0 40003d20: aa 05 60 04 add %l5, 4, %l5 <== NOT EXECUTED for ( i=1 ; i <= information->maximum ; i++ ) { 40003d24: c2 14 e0 10 lduh [ %l3 + 0x10 ], %g1 40003d28: 86 90 60 00 orcc %g1, 0, %g3 40003d2c: 22 80 00 31 be,a 40003df0 40003d30: aa 05 60 04 add %l5, 4, %l5 <== NOT EXECUTED 40003d34: a4 10 20 01 mov 1, %l2 the_thread = (Thread_Control *)information->local_table[ i ]; 40003d38: c4 04 e0 20 ld [ %l3 + 0x20 ], %g2 40003d3c: 83 2c a0 02 sll %l2, 2, %g1 40003d40: e0 00 80 01 ld [ %g2 + %g1 ], %l0 if ( !the_thread ) continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003d44: 94 10 00 14 mov %l4, %o2 40003d48: 92 10 20 05 mov 5, %o1 information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { the_thread = (Thread_Control *)information->local_table[ i ]; if ( !the_thread ) 40003d4c: 80 a4 20 00 cmp %l0, 0 40003d50: 02 80 00 22 be 40003dd8 40003d54: a4 04 a0 01 inc %l2 continue; rtems_object_get_name( the_thread->Object.id, sizeof(name), name ); 40003d58: d0 04 20 08 ld [ %l0 + 8 ], %o0 40003d5c: 40 00 10 bb call 40008048 40003d60: a2 10 00 16 mov %l6, %l1 (*print)( context, "0x%08" PRIx32 " %4s ", the_thread->Object.id, name ); 40003d64: d4 04 20 08 ld [ %l0 + 8 ], %o2 40003d68: 90 10 00 18 mov %i0, %o0 40003d6c: 92 10 00 1a mov %i2, %o1 40003d70: 9f c6 40 00 call %i1 40003d74: 96 10 00 14 mov %l4, %o3 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS /* * If this is the currently executing thread, account for time * since the last context switch. */ ran = the_thread->cpu_time_used; 40003d78: c4 1c 20 90 ldd [ %l0 + 0x90 ], %g2 if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 40003d7c: c8 07 20 3c ld [ %i4 + 0x3c ], %g4 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS /* * If this is the currently executing thread, account for time * since the last context switch. */ ran = the_thread->cpu_time_used; 40003d80: c4 3f bf d0 std %g2, [ %fp + -48 ] if ( _Thread_Executing->Object.id == the_thread->Object.id ) { 40003d84: da 01 20 08 ld [ %g4 + 8 ], %o5 40003d88: c2 04 20 08 ld [ %l0 + 8 ], %g1 40003d8c: 80 a3 40 01 cmp %o5, %g1 40003d90: 02 80 00 28 be 40003e30 40003d94: 92 07 bf e0 add %fp, -32, %o1 _Timespec_Subtract( &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40003d98: 94 10 00 1d mov %i5, %o2 40003d9c: 96 10 00 17 mov %l7, %o3 40003da0: 90 10 00 11 mov %l1, %o0 40003da4: 40 00 25 36 call 4000d27c <_Timespec_Divide> 40003da8: 92 07 bf d8 add %fp, -40, %o1 /* * Print the information */ (*print)( context, 40003dac: d0 07 bf d4 ld [ %fp + -44 ], %o0 40003db0: 40 00 57 b0 call 40019c70 <.udiv> 40003db4: 92 10 23 e8 mov 0x3e8, %o1 40003db8: d4 07 bf d0 ld [ %fp + -48 ], %o2 40003dbc: d8 07 bf f4 ld [ %fp + -12 ], %o4 40003dc0: da 07 bf f0 ld [ %fp + -16 ], %o5 40003dc4: 96 10 00 08 mov %o0, %o3 40003dc8: 92 10 00 1b mov %i3, %o1 40003dcc: 9f c6 40 00 call %i1 40003dd0: 90 10 00 18 mov %i0, %o0 40003dd4: c6 14 e0 10 lduh [ %l3 + 0x10 ], %g3 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) continue; information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { 40003dd8: 83 28 e0 10 sll %g3, 0x10, %g1 40003ddc: 83 30 60 10 srl %g1, 0x10, %g1 40003de0: 80 a0 40 12 cmp %g1, %l2 40003de4: 3a bf ff d6 bcc,a 40003d3c 40003de8: c4 04 e0 20 ld [ %l3 + 0x20 ], %g2 40003dec: aa 05 60 04 add %l5, 4, %l5 " ID NAME TICKS PERCENT\n" #endif ); for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 40003df0: 03 10 00 9c sethi %hi(0x40027000), %g1 40003df4: 82 10 62 d4 or %g1, 0x2d4, %g1 ! 400272d4 <_Objects_Information_table+0x14> 40003df8: 80 a5 40 01 cmp %l5, %g1 40003dfc: 32 bf ff c3 bne,a 40003d08 40003e00: c2 05 40 00 ld [ %l5 ], %g1 } } } #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS (*print)( context, "Time since last CPU Usage reset %" PRId32 40003e04: d0 07 bf dc ld [ %fp + -36 ], %o0 40003e08: 40 00 57 9a call 40019c70 <.udiv> 40003e0c: 92 10 23 e8 mov 0x3e8, %o1 40003e10: d4 07 bf d8 ld [ %fp + -40 ], %o2 40003e14: 96 10 00 08 mov %o0, %o3 40003e18: 13 10 00 72 sethi %hi(0x4001c800), %o1 40003e1c: 90 10 00 18 mov %i0, %o0 40003e20: 9f c6 40 00 call %i1 40003e24: 92 12 63 80 or %o1, 0x380, %o1 40003e28: 81 c7 e0 08 ret 40003e2c: 81 e8 00 00 restore * since the last context switch. */ ran = the_thread->cpu_time_used; if ( _Thread_Executing->Object.id == the_thread->Object.id ) { struct timespec used; _Timespec_Subtract( 40003e30: 94 07 bf c8 add %fp, -56, %o2 40003e34: 11 10 00 9d sethi %hi(0x40027400), %o0 40003e38: 40 00 25 a1 call 4000d4bc <_Timespec_Subtract> 40003e3c: 90 12 20 44 or %o0, 0x44, %o0 ! 40027444 <_Thread_Time_of_last_context_switch> &_Thread_Time_of_last_context_switch, &uptime, &used ); _Timespec_Add_to( &ran, &used ); 40003e40: 92 07 bf c8 add %fp, -56, %o1 40003e44: 40 00 24 f4 call 4000d214 <_Timespec_Add_to> 40003e48: 90 10 00 16 mov %l6, %o0 }; _Timespec_Divide( &ran, &total, &ival, &fval ); 40003e4c: 10 bf ff d4 b 40003d9c 40003e50: 94 10 00 1d mov %i5, %o2 4000e75c : { 0, 0, 0 }, }; static int rtems_deviceio_errno(rtems_status_code code) { 4000e75c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int rc; if ((rc = rtems_assoc_remote_by_local(errno_assoc, (uint32_t ) code))) 4000e760: 11 10 00 68 sethi %hi(0x4001a000), %o0 <== NOT EXECUTED 4000e764: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000e768: 40 00 01 37 call 4000ec44 <== NOT EXECUTED 4000e76c: 90 12 23 0c or %o0, 0x30c, %o0 <== NOT EXECUTED 4000e770: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4000e774: 02 80 00 05 be 4000e788 <== NOT EXECUTED 4000e778: 01 00 00 00 nop <== NOT EXECUTED { errno = rc; 4000e77c: 40 00 02 d0 call 4000f2bc <__errno> <== NOT EXECUTED 4000e780: 01 00 00 00 nop <== NOT EXECUTED 4000e784: f0 22 00 00 st %i0, [ %o0 ] <== NOT EXECUTED return -1; } return -1; } 4000e788: 81 c7 e0 08 ret <== NOT EXECUTED 4000e78c: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED 40009d50 : int rtems_error( int error_flag, const char *printf_format, ... ) { 40009d50: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED va_list arglist; int chars_written; va_start(arglist, printf_format); 40009d54: 94 07 a0 4c add %fp, 0x4c, %o2 <== NOT EXECUTED int rtems_error( int error_flag, const char *printf_format, ... ) { 40009d58: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40009d5c: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40009d60: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40009d64: 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); 40009d68: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40009d6c: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40009d70: 7f ff ff 7c call 40009b60 <== NOT EXECUTED 40009d74: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); return chars_written; } 40009d78: 81 c7 e0 08 ret <== NOT EXECUTED 40009d7c: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40006818 : rtems_status_code rtems_event_send( Objects_Id id, rtems_event_set event_in ) { 40006818: 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 ) ) { 4000681c: 92 96 20 00 orcc %i0, 0, %o1 40006820: 12 80 00 1c bne 40006890 40006824: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006828: 23 10 00 6b sethi %hi(0x4001ac00), %l1 4000682c: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 40006830: 82 00 60 01 inc %g1 40006834: c2 24 61 90 st %g1, [ %l1 + 0x190 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40006838: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000683c: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001ae6c <_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; 40006840: c0 27 bf f4 clr [ %fp + -12 ] rtems_event_set *the_event_set ) { ISR_Level level; _ISR_Disable( level ); 40006844: 7f ff ed e2 call 40001fcc 40006848: e0 06 21 6c ld [ %i0 + 0x16c ], %l0 *the_event_set |= the_new_events; 4000684c: c2 04 20 40 ld [ %l0 + 0x40 ], %g1 40006850: 82 10 40 19 or %g1, %i1, %g1 40006854: c2 24 20 40 st %g1, [ %l0 + 0x40 ] _ISR_Enable( level ); 40006858: 7f ff ed e1 call 40001fdc 4000685c: 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 ); 40006860: 40 00 00 2d call 40006914 <_Event_Surrender> 40006864: 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 ) 40006868: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 4000686c: b0 10 20 00 clr %i0 40006870: 82 00 7f ff add %g1, -1, %g1 40006874: c2 24 61 90 st %g1, [ %l1 + 0x190 ] 40006878: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 4000687c: 80 a0 a0 00 cmp %g2, 0 40006880: 02 80 00 0a be 400068a8 40006884: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006888: 81 c7 e0 08 ret 4000688c: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40006890: 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 ) { 40006894: 80 a0 a0 04 cmp %g2, 4 40006898: 08 80 00 08 bleu 400068b8 4000689c: 83 32 60 1b srl %o1, 0x1b, %g1 400068a0: 81 c7 e0 08 ret <== NOT EXECUTED 400068a4: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400068a8: 40 00 0e 8f call 4000a2e4 <_Thread_Dispatch> 400068ac: 01 00 00 00 nop 400068b0: 81 c7 e0 08 ret 400068b4: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400068b8: 80 a0 60 01 cmp %g1, 1 400068bc: 12 bf ff f3 bne 40006888 400068c0: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400068c4: 83 28 a0 02 sll %g2, 2, %g1 400068c8: 05 10 00 6b sethi %hi(0x4001ac00), %g2 400068cc: 84 10 a0 f0 or %g2, 0xf0, %g2 ! 4001acf0 <_Objects_Information_table> 400068d0: c6 00 80 01 ld [ %g2 + %g1 ], %g3 400068d4: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 400068d8: 80 a2 20 00 cmp %o0, 0 400068dc: 02 bf ff f5 be 400068b0 400068e0: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 400068e4: 40 00 09 58 call 40008e44 <_Objects_Get> 400068e8: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; the_thread = _Thread_Get( id, &location ); switch ( location ) { 400068ec: c2 07 bf f4 ld [ %fp + -12 ], %g1 400068f0: b0 10 00 08 mov %o0, %i0 400068f4: 80 a0 60 00 cmp %g1, 0 400068f8: 02 bf ff d3 be 40006844 400068fc: 23 10 00 6b sethi %hi(0x4001ac00), %l1 40006900: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40006904: 18 bf ff e1 bgu 40006888 <== NOT EXECUTED 40006908: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000690c: 81 c7 e0 08 ret <== NOT EXECUTED 40006910: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4000ec04 : rtems_status_code rtems_extension_create( rtems_name name, rtems_extensions_table *extension_table, Objects_Id *id ) { 4000ec04: 9d e3 bf 98 save %sp, -104, %sp Extension_Control *the_extension; if ( !rtems_is_name_valid( name ) ) 4000ec08: a6 96 20 00 orcc %i0, 0, %l3 4000ec0c: 02 80 00 16 be 4000ec64 4000ec10: b0 10 20 03 mov 3, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000ec14: 23 10 00 b1 sethi %hi(0x4002c400), %l1 4000ec18: c2 04 60 10 ld [ %l1 + 0x10 ], %g1 ! 4002c410 <_Thread_Dispatch_disable_level> 4000ec1c: 82 00 60 01 inc %g1 4000ec20: c2 24 60 10 st %g1, [ %l1 + 0x10 ] * the inactive chain of free extension control blocks. */ RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void ) { return (Extension_Control *) _Objects_Allocate( &_Extension_Information ); 4000ec24: 25 10 00 b1 sethi %hi(0x4002c400), %l2 4000ec28: 40 00 03 cb call 4000fb54 <_Objects_Allocate> 4000ec2c: 90 14 a2 ac or %l2, 0x2ac, %o0 ! 4002c6ac <_Extension_Information> _Thread_Disable_dispatch(); /* to prevent deletion */ the_extension = _Extension_Allocate(); if ( !the_extension ) { 4000ec30: a0 92 20 00 orcc %o0, 0, %l0 4000ec34: 12 80 00 0e bne 4000ec6c 4000ec38: 90 04 20 10 add %l0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000ec3c: c2 04 60 10 ld [ %l1 + 0x10 ], %g1 <== NOT EXECUTED 4000ec40: b0 10 20 05 mov 5, %i0 <== NOT EXECUTED 4000ec44: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000ec48: c2 24 60 10 st %g1, [ %l1 + 0x10 ] <== NOT EXECUTED 4000ec4c: c4 04 60 10 ld [ %l1 + 0x10 ], %g2 <== NOT EXECUTED 4000ec50: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000ec54: 12 80 00 20 bne 4000ecd4 <== NOT EXECUTED 4000ec58: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4000ec5c: 40 00 0a 37 call 40011538 <_Thread_Dispatch> <== NOT EXECUTED 4000ec60: 01 00 00 00 nop <== NOT EXECUTED 4000ec64: 81 c7 e0 08 ret <== NOT EXECUTED 4000ec68: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } _User_extensions_Add_set( &the_extension->Extension, extension_table ); 4000ec6c: 40 00 0e bb call 40012758 <_User_extensions_Add_set> 4000ec70: 92 10 00 19 mov %i1, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000ec74: 90 14 a2 ac or %l2, 0x2ac, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 4000ec78: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000ec7c: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 4000ec80: 03 00 00 3f sethi %hi(0xfc00), %g1 4000ec84: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 4000ec88: 82 08 c0 01 and %g3, %g1, %g1 4000ec8c: 80 a0 40 02 cmp %g1, %g2 4000ec90: 38 80 00 06 bgu,a 4000eca8 4000ec94: e6 24 20 0c st %l3, [ %l0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000ec98: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000ec9c: 83 28 60 02 sll %g1, 2, %g1 4000eca0: e0 20 80 01 st %l0, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 4000eca4: e6 24 20 0c st %l3, [ %l0 + 0xc ] &_Extension_Information, &the_extension->Object, (Objects_Name) name ); *id = the_extension->Object.id; 4000eca8: c6 26 80 00 st %g3, [ %i2 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000ecac: c2 04 60 10 ld [ %l1 + 0x10 ], %g1 4000ecb0: b0 10 20 00 clr %i0 4000ecb4: 82 00 7f ff add %g1, -1, %g1 4000ecb8: c2 24 60 10 st %g1, [ %l1 + 0x10 ] 4000ecbc: c4 04 60 10 ld [ %l1 + 0x10 ], %g2 4000ecc0: 80 a0 a0 00 cmp %g2, 0 4000ecc4: 12 80 00 04 bne 4000ecd4 4000ecc8: 01 00 00 00 nop _Thread_Dispatch(); 4000eccc: 40 00 0a 1b call 40011538 <_Thread_Dispatch> 4000ecd0: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 4000ecd4: 81 c7 e0 08 ret 4000ecd8: 81 e8 00 00 restore 4000ecdc : */ rtems_status_code rtems_extension_delete( Objects_Id id ) { 4000ecdc: 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 *) 4000ece0: 21 10 00 b1 sethi %hi(0x4002c400), %l0 <== NOT EXECUTED 4000ece4: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 4000ece8: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 4000ecec: 40 00 04 eb call 40010098 <_Objects_Get> <== NOT EXECUTED 4000ecf0: 90 14 22 ac or %l0, 0x2ac, %o0 <== NOT EXECUTED Extension_Control *the_extension; Objects_Locations location; the_extension = _Extension_Get( id, &location ); switch ( location ) { 4000ecf4: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4000ecf8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000ecfc: 12 80 00 1e bne 4000ed74 <== NOT EXECUTED 4000ed00: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED case OBJECTS_ERROR: case OBJECTS_REMOTE: /* should never return this */ return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _User_extensions_Remove_set( &the_extension->Extension ); 4000ed04: 40 00 0e cf call 40012840 <_User_extensions_Remove_set> <== NOT EXECUTED 4000ed08: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000ed0c: 90 14 22 ac or %l0, 0x2ac, %o0 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000ed10: c2 06 20 08 ld [ %i0 + 8 ], %g1 <== NOT EXECUTED Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000ed14: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 <== NOT EXECUTED 4000ed18: 05 00 00 3f sethi %hi(0xfc00), %g2 <== NOT EXECUTED 4000ed1c: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff <== NOT EXECUTED 4000ed20: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 4000ed24: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000ed28: 38 80 00 06 bgu,a 4000ed40 <== NOT EXECUTED 4000ed2c: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 4000ed30: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 <== NOT EXECUTED 4000ed34: 83 28 60 02 sll %g1, 2, %g1 <== NOT EXECUTED 4000ed38: 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; 4000ed3c: 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 ); 4000ed40: 40 00 04 93 call 4000ff8c <_Objects_Free> <== NOT EXECUTED 4000ed44: 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 ) 4000ed48: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED 4000ed4c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 ! 4002c410 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4000ed50: b0 10 20 00 clr %i0 <== NOT EXECUTED 4000ed54: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 4000ed58: c4 20 60 10 st %g2, [ %g1 + 0x10 ] <== NOT EXECUTED 4000ed5c: c6 00 60 10 ld [ %g1 + 0x10 ], %g3 <== NOT EXECUTED 4000ed60: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 4000ed64: 02 80 00 09 be 4000ed88 <== NOT EXECUTED 4000ed68: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000ed6c: 81 c7 e0 08 ret <== NOT EXECUTED 4000ed70: 81 e8 00 00 restore <== NOT EXECUTED { Extension_Control *the_extension; Objects_Locations location; the_extension = _Extension_Get( id, &location ); switch ( location ) { 4000ed74: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000ed78: 08 bf ff fd bleu 4000ed6c <== NOT EXECUTED 4000ed7c: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 4000ed80: 81 c7 e0 08 ret <== NOT EXECUTED 4000ed84: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000ed88: 40 00 09 ec call 40011538 <_Thread_Dispatch> <== NOT EXECUTED 4000ed8c: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000ed90: 81 c7 e0 08 ret <== NOT EXECUTED 4000ed94: 81 e8 00 00 restore <== NOT EXECUTED 40007b78 : */ void rtems_fatal_error_occurred( uint32_t the_error ) { 40007b78: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, FALSE, the_error ); 40007b7c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40007b80: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 40007b84: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40007b88: 40 00 03 31 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40007b8c: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40007b90: 01 00 00 00 nop 400030e4 : int rtems_filesystem_evaluate_parent( int flags, rtems_filesystem_location_info_t *pathloc ) { 400030e4: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED rtems_filesystem_location_info_t parent; int result; if ( !pathloc ) 400030e8: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400030ec: 02 80 00 28 be 4000318c <== NOT EXECUTED 400030f0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ if ( !pathloc->ops->evalpath_h ) 400030f4: c8 06 60 08 ld [ %i1 + 8 ], %g4 <== NOT EXECUTED 400030f8: da 01 00 00 ld [ %g4 ], %o5 <== NOT EXECUTED 400030fc: 80 a3 60 00 cmp %o5, 0 <== NOT EXECUTED 40003100: 02 80 00 1d be 40003174 <== NOT EXECUTED 40003104: 11 10 00 64 sethi %hi(0x40019000), %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); parent = *pathloc; 40003108: c6 06 60 0c ld [ %i1 + 0xc ], %g3 <== NOT EXECUTED 4000310c: c2 06 40 00 ld [ %i1 ], %g1 <== NOT EXECUTED 40003110: c4 06 60 04 ld [ %i1 + 4 ], %g2 <== NOT EXECUTED 40003114: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED 40003118: c4 27 bf ec st %g2, [ %fp + -20 ] <== NOT EXECUTED 4000311c: c8 27 bf f0 st %g4, [ %fp + -16 ] <== NOT EXECUTED 40003120: c6 27 bf f4 st %g3, [ %fp + -12 ] <== NOT EXECUTED result = (*pathloc->ops->evalpath_h)( "..", flags, &parent ); 40003124: b2 07 bf e8 add %fp, -24, %i1 <== NOT EXECUTED 40003128: 90 12 21 90 or %o0, 0x190, %o0 <== NOT EXECUTED 4000312c: 9f c3 40 00 call %o5 <== NOT EXECUTED 40003130: 94 10 00 19 mov %i1, %o2 <== NOT EXECUTED if (result != 0){ 40003134: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 40003138: 12 80 00 0d bne 4000316c <== NOT EXECUTED 4000313c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED return -1; } rtems_filesystem_freenode( &parent ); 40003140: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003144: 02 80 00 16 be 4000319c <== NOT EXECUTED 40003148: 01 00 00 00 nop <== NOT EXECUTED 4000314c: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40003150: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003154: 02 80 00 12 be 4000319c <== NOT EXECUTED 40003158: 01 00 00 00 nop <== NOT EXECUTED 4000315c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003160: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED return result; } 40003164: 81 c7 e0 08 ret <== NOT EXECUTED 40003168: 81 e8 00 00 restore <== NOT EXECUTED if ( !pathloc->ops->evalpath_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); parent = *pathloc; result = (*pathloc->ops->evalpath_h)( "..", flags, &parent ); if (result != 0){ 4000316c: 81 c7 e0 08 ret <== NOT EXECUTED 40003170: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED if ( !pathloc ) rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ if ( !pathloc->ops->evalpath_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40003174: 40 00 30 52 call 4000f2bc <__errno> <== NOT EXECUTED 40003178: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000317c: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40003180: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40003184: 81 c7 e0 08 ret <== NOT EXECUTED 40003188: 81 e8 00 00 restore <== NOT EXECUTED { rtems_filesystem_location_info_t parent; int result; if ( !pathloc ) rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 4000318c: 40 00 30 4c call 4000f2bc <__errno> <== NOT EXECUTED 40003190: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40003194: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 40003198: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4000319c: 81 c7 e0 08 ret <== NOT EXECUTED 400031a0: 81 e8 00 00 restore <== NOT EXECUTED 400031a4 : const char *pathname, int flags, rtems_filesystem_location_info_t *pathloc, int follow_link ) { 400031a4: 9d e3 bf 98 save %sp, -104, %sp /* * Verify Input parameters. */ if ( !pathname ) 400031a8: 80 a6 20 00 cmp %i0, 0 400031ac: 02 80 00 50 be 400032ec 400031b0: 80 a6 a0 00 cmp %i2, 0 rtems_set_errno_and_return_minus_one( EFAULT ); if ( !pathloc ) 400031b4: 02 80 00 54 be 40003304 400031b8: 01 00 00 00 nop /* * Evaluate the path using the optable evalpath. */ rtems_filesystem_get_start_loc( pathname, &i, pathloc ); 400031bc: c2 4e 00 00 ldsb [ %i0 ], %g1 400031c0: 80 a0 60 2f cmp %g1, 0x2f 400031c4: 02 80 00 11 be 40003208 400031c8: 80 a0 60 5c cmp %g1, 0x5c 400031cc: 02 80 00 0f be 40003208 <== NOT EXECUTED 400031d0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400031d4: 02 80 00 0e be 4000320c <== NOT EXECUTED 400031d8: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 400031dc: c6 00 62 60 ld [ %g1 + 0x260 ], %g3 ! 4001a260 <== NOT EXECUTED 400031e0: 88 10 20 00 clr %g4 <== NOT EXECUTED 400031e4: c2 00 e0 04 ld [ %g3 + 4 ], %g1 <== NOT EXECUTED 400031e8: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED 400031ec: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 400031f0: c4 26 a0 04 st %g2, [ %i2 + 4 ] <== NOT EXECUTED 400031f4: c2 00 e0 0c ld [ %g3 + 0xc ], %g1 <== NOT EXECUTED 400031f8: c2 26 a0 08 st %g1, [ %i2 + 8 ] <== NOT EXECUTED 400031fc: c4 00 e0 10 ld [ %g3 + 0x10 ], %g2 <== NOT EXECUTED 40003200: 10 80 00 0d b 40003234 <== NOT EXECUTED 40003204: c4 26 a0 0c st %g2, [ %i2 + 0xc ] <== NOT EXECUTED 40003208: 03 10 00 68 sethi %hi(0x4001a000), %g1 4000320c: c6 00 62 60 ld [ %g1 + 0x260 ], %g3 ! 4001a260 40003210: 88 10 20 01 mov 1, %g4 40003214: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 40003218: c2 26 80 00 st %g1, [ %i2 ] 4000321c: c4 00 e0 18 ld [ %g3 + 0x18 ], %g2 40003220: c4 26 a0 04 st %g2, [ %i2 + 4 ] 40003224: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 40003228: c2 26 a0 08 st %g1, [ %i2 + 8 ] 4000322c: c4 00 e0 20 ld [ %g3 + 0x20 ], %g2 40003230: c4 26 a0 0c st %g2, [ %i2 + 0xc ] if ( !pathloc->ops->evalpath_h ) 40003234: c2 06 a0 08 ld [ %i2 + 8 ], %g1 40003238: c2 00 40 00 ld [ %g1 ], %g1 4000323c: 80 a0 60 00 cmp %g1, 0 40003240: 02 80 00 25 be 400032d4 40003244: 90 06 00 04 add %i0, %g4, %o0 rtems_set_errno_and_return_minus_one( ENOTSUP ); result = (*pathloc->ops->evalpath_h)( &pathname[i], flags, pathloc ); 40003248: 92 10 00 19 mov %i1, %o1 4000324c: 9f c0 40 00 call %g1 40003250: 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 ) { 40003254: b0 92 20 00 orcc %o0, 0, %i0 40003258: 12 80 00 0f bne 40003294 4000325c: 80 a6 e0 00 cmp %i3, 0 40003260: 02 80 00 2d be 40003314 40003264: 01 00 00 00 nop if ( !pathloc->ops->node_type_h ){ 40003268: c4 06 a0 08 ld [ %i2 + 8 ], %g2 4000326c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 40003270: 80 a0 60 00 cmp %g1, 0 40003274: 22 80 00 13 be,a 400032c0 40003278: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( pathloc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } type = (*pathloc->ops->node_type_h)( pathloc ); 4000327c: 9f c0 40 00 call %g1 40003280: 90 10 00 1a mov %i2, %o0 if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || 40003284: 90 02 3f fd add %o0, -3, %o0 40003288: 80 a2 20 01 cmp %o0, 1 4000328c: 28 80 00 04 bleu,a 4000329c 40003290: c4 06 a0 08 ld [ %i2 + 8 ], %g2 <== NOT EXECUTED } } return result; } 40003294: 81 c7 e0 08 ret 40003298: 81 e8 00 00 restore type = (*pathloc->ops->node_type_h)( pathloc ); if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || ( type == RTEMS_FILESYSTEM_SYM_LINK ) ) { if ( !pathloc->ops->eval_link_h ){ 4000329c: c2 00 a0 34 ld [ %g2 + 0x34 ], %g1 <== NOT EXECUTED 400032a0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400032a4: 02 80 00 06 be 400032bc <== NOT EXECUTED 400032a8: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED * pathloc will be passed up (and eventually released). * Hence, the (valid) originial node that we submit to * eval_link_h() should be released by the handler. */ result = (*pathloc->ops->eval_link_h)( pathloc, flags ); 400032ac: 9f c0 40 00 call %g1 <== NOT EXECUTED 400032b0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED } } return result; } 400032b4: 81 c7 e0 08 ret <== NOT EXECUTED 400032b8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) || ( type == RTEMS_FILESYSTEM_SYM_LINK ) ) { if ( !pathloc->ops->eval_link_h ){ rtems_filesystem_freenode( pathloc ); 400032bc: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400032c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400032c4: 02 80 00 04 be 400032d4 <== NOT EXECUTED 400032c8: 01 00 00 00 nop <== NOT EXECUTED 400032cc: 9f c0 40 00 call %g1 <== NOT EXECUTED 400032d0: 90 10 00 1a mov %i2, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 400032d4: 40 00 2f fa call 4000f2bc <__errno> <== NOT EXECUTED 400032d8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400032dc: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 400032e0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400032e4: 81 c7 e0 08 ret <== NOT EXECUTED 400032e8: 81 e8 00 00 restore <== NOT EXECUTED /* * Verify Input parameters. */ if ( !pathname ) rtems_set_errno_and_return_minus_one( EFAULT ); 400032ec: 40 00 2f f4 call 4000f2bc <__errno> <== NOT EXECUTED 400032f0: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 400032f4: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 400032f8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 400032fc: 81 c7 e0 08 ret <== NOT EXECUTED 40003300: 81 e8 00 00 restore <== NOT EXECUTED if ( !pathloc ) rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */ 40003304: 40 00 2f ee call 4000f2bc <__errno> <== NOT EXECUTED 40003308: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4000330c: 82 10 20 05 mov 5, %g1 <== NOT EXECUTED 40003310: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40003314: 81 c7 e0 08 ret 40003318: 81 e8 00 00 restore 4000ce48 : * configuration is a single instantiation of the IMFS or miniIMFS with * a single "/dev" directory in it. */ void rtems_filesystem_initialize( void ) { 4000ce48: 9d e3 bf 80 save %sp, -128, %sp /* * Set the default umask to "022". */ rtems_filesystem_umask = 022; 4000ce4c: 25 10 00 68 sethi %hi(0x4001a000), %l2 4000ce50: c4 04 a2 60 ld [ %l2 + 0x260 ], %g2 ! 4001a260 4000ce54: 82 10 20 12 mov 0x12, %g1 init_fs_mount_table(); 4000ce58: 40 00 01 b8 call 4000d538 4000ce5c: c2 30 a0 24 sth %g1, [ %g2 + 0x24 ] /* * mount the first filesystem. */ if ( rtems_filesystem_mount_table_size == 0 ) 4000ce60: 03 10 00 67 sethi %hi(0x40019c00), %g1 4000ce64: c4 00 60 58 ld [ %g1 + 0x58 ], %g2 ! 40019c58 4000ce68: 80 a0 a0 00 cmp %g2, 0 4000ce6c: 02 80 00 40 be 4000cf6c 4000ce70: 03 10 00 67 sethi %hi(0x40019c00), %g1 rtems_fatal_error_occurred( 0xABCD0001 ); mt = &rtems_filesystem_mount_table[0]; 4000ce74: c4 00 60 54 ld [ %g1 + 0x54 ], %g2 ! 40019c54 status = mount( 4000ce78: 90 07 bf f4 add %fp, -12, %o0 4000ce7c: d8 00 a0 0c ld [ %g2 + 0xc ], %o4 4000ce80: d2 00 80 00 ld [ %g2 ], %o1 4000ce84: d4 00 a0 04 ld [ %g2 + 4 ], %o2 4000ce88: 40 00 01 b4 call 4000d558 4000ce8c: d6 00 a0 08 ld [ %g2 + 8 ], %o3 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) 4000ce90: 80 a2 3f ff cmp %o0, -1 4000ce94: 02 80 00 45 be 4000cfa8 4000ce98: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000ce9c: c8 07 bf f4 ld [ %fp + -12 ], %g4 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) rtems_fatal_error_occurred( 0xABCD0002 ); rtems_filesystem_link_counts = 0; 4000cea0: c2 04 a2 60 ld [ %l2 + 0x260 ], %g1 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000cea4: c4 01 20 18 ld [ %g4 + 0x18 ], %g2 &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) rtems_fatal_error_occurred( 0xABCD0002 ); rtems_filesystem_link_counts = 0; 4000cea8: c0 30 60 26 clrh [ %g1 + 0x26 ] * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000ceac: c4 20 60 14 st %g2, [ %g1 + 0x14 ] 4000ceb0: c6 01 20 1c ld [ %g4 + 0x1c ], %g3 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000ceb4: a0 07 bf e4 add %fp, -28, %l0 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000ceb8: c6 20 60 18 st %g3, [ %g1 + 0x18 ] 4000cebc: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000cec0: 23 10 00 64 sethi %hi(0x40019000), %l1 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000cec4: c4 20 60 1c st %g2, [ %g1 + 0x1c ] 4000cec8: c6 01 20 24 ld [ %g4 + 0x24 ], %g3 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000cecc: 92 10 20 00 clr %o1 * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000ced0: c6 20 60 20 st %g3, [ %g1 + 0x20 ] /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000ced4: 94 10 00 10 mov %l0, %o2 4000ced8: 96 10 20 00 clr %o3 4000cedc: 7f ff d8 b2 call 400031a4 4000cee0: 90 14 63 f8 or %l1, 0x3f8, %o0 rtems_filesystem_root = loc; 4000cee4: c4 04 a2 60 ld [ %l2 + 0x260 ], %g2 4000cee8: c2 07 bf e4 ld [ %fp + -28 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000ceec: 94 10 00 10 mov %l0, %o2 * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4000cef0: c2 20 a0 14 st %g1, [ %g2 + 0x14 ] 4000cef4: c2 07 bf e8 ld [ %fp + -24 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000cef8: 92 10 20 00 clr %o1 * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4000cefc: c2 20 a0 18 st %g1, [ %g2 + 0x18 ] 4000cf00: c2 07 bf ec ld [ %fp + -20 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000cf04: 96 10 20 00 clr %o3 * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4000cf08: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] 4000cf0c: c2 07 bf f0 ld [ %fp + -16 ], %g1 /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4000cf10: 90 14 63 f8 or %l1, 0x3f8, %o0 4000cf14: 7f ff d8 a4 call 400031a4 4000cf18: c2 20 a0 20 st %g1, [ %g2 + 0x20 ] rtems_filesystem_current = loc; 4000cf1c: c2 07 bf e4 ld [ %fp + -28 ], %g1 4000cf20: c6 04 a2 60 ld [ %l2 + 0x260 ], %g3 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000cf24: 11 10 00 65 sethi %hi(0x40019400), %o0 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_current = loc; 4000cf28: c2 20 e0 04 st %g1, [ %g3 + 4 ] 4000cf2c: c2 07 bf e8 ld [ %fp + -24 ], %g1 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000cf30: 90 12 20 00 mov %o0, %o0 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_current = loc; 4000cf34: c2 20 e0 08 st %g1, [ %g3 + 8 ] 4000cf38: c2 07 bf ec ld [ %fp + -20 ], %g1 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000cf3c: 92 10 21 ff mov 0x1ff, %o1 /* Clone the root pathloc */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; /* One more clone for the current node */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_current = loc; 4000cf40: c2 20 e0 0c st %g1, [ %g3 + 0xc ] 4000cf44: c4 07 bf f0 ld [ %fp + -16 ], %g2 * * NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually * created that way by the IMFS. */ status = mkdir( "/dev", 0777); 4000cf48: 40 00 01 72 call 4000d510 4000cf4c: c4 20 e0 10 st %g2, [ %g3 + 0x10 ] if ( status != 0 ) 4000cf50: 80 a2 20 00 cmp %o0, 0 4000cf54: 02 80 00 04 be 4000cf64 4000cf58: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 rtems_fatal_error_occurred( 0xABCD0003 ); 4000cf5c: 7f ff eb 07 call 40007b78 <== NOT EXECUTED 4000cf60: 90 12 20 03 or %o0, 3, %o0 ! abcd0003 <== NOT EXECUTED 4000cf64: 81 c7 e0 08 ret 4000cf68: 81 e8 00 00 restore /* * mount the first filesystem. */ if ( rtems_filesystem_mount_table_size == 0 ) rtems_fatal_error_occurred( 0xABCD0001 ); 4000cf6c: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 4000cf70: 7f ff eb 02 call 40007b78 <== NOT EXECUTED 4000cf74: 90 12 20 01 or %o0, 1, %o0 ! abcd0001 <== NOT EXECUTED mt = &rtems_filesystem_mount_table[0]; 4000cf78: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000cf7c: c4 00 60 54 ld [ %g1 + 0x54 ], %g2 ! 40019c54 <== NOT EXECUTED status = mount( 4000cf80: 90 07 bf f4 add %fp, -12, %o0 <== NOT EXECUTED 4000cf84: d8 00 a0 0c ld [ %g2 + 0xc ], %o4 <== NOT EXECUTED 4000cf88: d2 00 80 00 ld [ %g2 ], %o1 <== NOT EXECUTED 4000cf8c: d4 00 a0 04 ld [ %g2 + 4 ], %o2 <== NOT EXECUTED 4000cf90: 40 00 01 72 call 4000d558 <== NOT EXECUTED 4000cf94: d6 00 a0 08 ld [ %g2 + 8 ], %o3 <== NOT EXECUTED &entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point ); if ( status == -1 ) 4000cf98: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 4000cf9c: 32 bf ff c1 bne,a 4000cea0 <== NOT EXECUTED 4000cfa0: c8 07 bf f4 ld [ %fp + -12 ], %g4 <== NOT EXECUTED rtems_fatal_error_occurred( 0xABCD0002 ); 4000cfa4: 11 2a f3 40 sethi %hi(0xabcd0000), %o0 <== NOT EXECUTED 4000cfa8: 7f ff ea f4 call 40007b78 <== NOT EXECUTED 4000cfac: 90 12 20 02 or %o0, 2, %o0 ! abcd0002 <== NOT EXECUTED * set_private_env() - but then: that's * gonna hit performance. * * Till Straumann, 10/25/2002 */ rtems_filesystem_root = entry->mt_fs_root; 4000cfb0: 10 bf ff bc b 4000cea0 <== NOT EXECUTED 4000cfb4: c8 07 bf f4 ld [ %fp + -12 ], %g4 <== NOT EXECUTED 40007b94 : #include const char *rtems_get_version_string(void) { return _RTEMS_version; } 40007b94: 11 10 00 66 sethi %hi(0x40019800), %o0 <== NOT EXECUTED 40007b98: 81 c3 e0 08 retl <== NOT EXECUTED 40007b9c: 90 12 23 d0 or %o0, 0x3d0, %o0 ! 40019bd0 <_RTEMS_version> <== NOT EXECUTED 40007940 : rtems_interrupt_level rtems_initialize_executive_early( rtems_configuration_table *configuration_table, rtems_cpu_table *cpu_table ) { 40007940: 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 ); 40007944: 7f ff e9 a2 call 40001fcc 40007948: 01 00 00 00 nop 4000794c: a6 10 00 08 mov %o0, %l3 if ( configuration_table == NULL ) 40007950: 80 a6 20 00 cmp %i0, 0 40007954: 22 80 00 77 be,a 40007b30 40007958: 90 10 20 00 clr %o0 <== NOT EXECUTED /* * Grab our own copy of the user's CPU table. */ _CPU_Table = *cpu_table; 4000795c: 05 10 00 6b sethi %hi(0x4001ac00), %g2 RTEMS_INLINE_ROUTINE void _System_state_Handler_initialization ( boolean is_multiprocessing ) { _System_state_Current = SYSTEM_STATE_BEFORE_INITIALIZATION; _System_state_Is_multiprocessing = is_multiprocessing; 40007960: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40007964: a4 10 a1 a4 or %g2, 0x1a4, %l2 40007968: 94 10 20 28 mov 0x28, %o2 4000796c: 92 10 00 19 mov %i1, %o1 40007970: c0 20 62 98 clr [ %g1 + 0x298 ] RTEMS_INLINE_ROUTINE void _System_state_Handler_initialization ( boolean is_multiprocessing ) { _System_state_Current = SYSTEM_STATE_BEFORE_INITIALIZATION; 40007974: 29 10 00 6b sethi %hi(0x4001ac00), %l4 40007978: 90 10 00 12 mov %l2, %o0 4000797c: 40 00 20 25 call 4000fa10 40007980: c0 25 23 70 clr [ %l4 + 0x370 ] /* * Provided just for user convenience. */ _Configuration_Table = configuration_table; 40007984: 03 10 00 6b sethi %hi(0x4001ac00), %g1 INTERNAL_ERROR_CORE, TRUE, INTERNAL_ERROR_NO_CPU_TABLE ); _CPU_Initialize( cpu_table, _Thread_Dispatch ); 40007988: 90 10 00 19 mov %i1, %o0 4000798c: 13 10 00 28 sethi %hi(0x4000a000), %o1 40007990: 92 12 62 e4 or %o1, 0x2e4, %o1 ! 4000a2e4 <_Thread_Dispatch> 40007994: 40 00 11 80 call 4000bf94 <_CPU_Initialize> 40007998: f0 20 62 50 st %i0, [ %g1 + 0x250 ] /* * Do this as early as possible to insure no debugging output * is even attempted to be printed. */ _Debug_Manager_initialization(); 4000799c: 40 00 18 bd call 4000dc90 <_Debug_Manager_initialization> 400079a0: a2 10 20 01 mov 1, %l1 _API_extensions_Initialization(); 400079a4: 40 00 00 dd call 40007d18 <_API_extensions_Initialization> 400079a8: 01 00 00 00 nop _Thread_Dispatch_initialization(); _Workspace_Handler_initialization( 400079ac: d2 06 20 04 ld [ %i0 + 4 ], %o1 400079b0: 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; 400079b4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400079b8: e2 20 61 90 st %l1, [ %g1 + 0x190 ] ! 4001ad90 <_Thread_Dispatch_disable_level> 400079bc: 40 00 10 48 call 4000badc <_Workspace_Handler_initialization> 400079c0: 21 10 00 6b sethi %hi(0x4001ac00), %l0 (void *)configuration_table->work_space_start, configuration_table->work_space_size ); _User_extensions_Handler_initialization( 400079c4: d0 06 20 20 ld [ %i0 + 0x20 ], %o0 400079c8: 40 00 0e b9 call 4000b4ac <_User_extensions_Handler_initialization> 400079cc: d2 06 20 24 ld [ %i0 + 0x24 ], %o1 configuration_table->number_of_initial_extensions, configuration_table->User_extension_table ); _ISR_Handler_initialization(); 400079d0: 40 00 03 af call 4000888c <_ISR_Handler_initialization> 400079d4: 01 00 00 00 nop _Objects_Handler_initialization( 400079d8: 90 10 20 01 mov 1, %o0 ! 1 400079dc: 92 10 20 01 mov 1, %o1 400079e0: 40 00 05 b2 call 400090a8 <_Objects_Handler_initialization> 400079e4: 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; 400079e8: 05 10 00 6b sethi %hi(0x4001ac00), %g2 /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 400079ec: 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; 400079f0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400079f4: 82 10 61 d0 or %g1, 0x1d0, %g1 ! 4001add0 <_Internal_Objects> /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 400079f8: 92 10 20 01 mov 1, %o1 multiprocessing_table->node, multiprocessing_table->maximum_nodes, multiprocessing_table->maximum_global_objects ); _Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects; 400079fc: c2 20 a0 f4 st %g1, [ %g2 + 0xf4 ] /* * Initialize the internal allocator Mutex */ _API_Mutex_Initialization( 1 ); 40007a00: 94 10 20 02 mov 2, %o2 40007a04: 96 10 20 01 mov 1, %o3 40007a08: 98 10 20 74 mov 0x74, %o4 40007a0c: 9a 10 20 00 clr %o5 40007a10: 40 00 05 34 call 40008ee0 <_Objects_Initialize_information> 40007a14: 90 14 22 9c or %l0, 0x29c, %o0 _API_Mutex_Allocate( _RTEMS_Allocator_Mutex ); 40007a18: 82 10 20 02 mov 2, %g1 40007a1c: e2 27 bf e8 st %l1, [ %fp + -24 ] 40007a20: c2 27 bf f0 st %g1, [ %fp + -16 ] 40007a24: c0 27 bf ec clr [ %fp + -20 ] 40007a28: c0 27 bf f4 clr [ %fp + -12 ] 40007a2c: 40 00 03 b5 call 40008900 <_Objects_Allocate> 40007a30: 90 14 22 9c or %l0, 0x29c, %o0 40007a34: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40007a38: 84 10 00 08 mov %o0, %g2 40007a3c: 92 07 bf e8 add %fp, -24, %o1 40007a40: c4 20 62 64 st %g2, [ %g1 + 0x264 ] 40007a44: 90 02 20 10 add %o0, 0x10, %o0 40007a48: 40 00 01 21 call 40007ecc <_CORE_mutex_Initialize> 40007a4c: 94 10 20 01 mov 1, %o2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; 40007a50: 03 10 00 6b sethi %hi(0x4001ac00), %g1 for ( index=0 ; index <16 ; index++ ) _Priority_Bit_map[ index ] = 0; 40007a54: 05 10 00 6b sethi %hi(0x4001ac00), %g2 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; 40007a58: c0 30 62 60 clrh [ %g1 + 0x260 ] for ( index=0 ; index <16 ; index++ ) _Priority_Bit_map[ index ] = 0; 40007a5c: c0 30 a2 f0 clrh [ %g2 + 0x2f0 ] 40007a60: 82 10 20 02 mov 2, %g1 40007a64: 84 10 a2 f0 or %g2, 0x2f0, %g2 40007a68: c0 30 40 02 clrh [ %g1 + %g2 ] 40007a6c: 82 00 60 02 add %g1, 2, %g1 RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ) { size_t index; _Priority_Major_bit_map = 0; for ( index=0 ; index <16 ; index++ ) 40007a70: 80 a0 60 20 cmp %g1, 0x20 40007a74: 32 bf ff fe bne,a 40007a6c 40007a78: c0 30 40 02 clrh [ %g1 + %g2 ] _Priority_Handler_initialization(); _Watchdog_Handler_initialization(); 40007a7c: 40 00 0f 98 call 4000b8dc <_Watchdog_Handler_initialization> 40007a80: 01 00 00 00 nop _TOD_Handler_initialization( configuration_table->microseconds_per_tick ); 40007a84: 40 00 02 0f call 400082c0 <_TOD_Handler_initialization> 40007a88: d0 06 20 0c ld [ %i0 + 0xc ], %o0 _Thread_Handler_initialization( 40007a8c: d2 06 20 08 ld [ %i0 + 8 ], %o1 40007a90: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 40007a94: 40 00 0a db call 4000a600 <_Thread_Handler_initialization> 40007a98: 94 10 20 00 clr %o2 ); #endif /* MANAGERS */ _RTEMS_API_Initialize( configuration_table ); 40007a9c: 40 00 00 80 call 40007c9c <_RTEMS_API_Initialize> 40007aa0: 90 10 00 18 mov %i0, %o0 _Extension_Manager_initialization( configuration_table->maximum_extensions ); 40007aa4: 40 00 00 28 call 40007b44 <_Extension_Manager_initialization> 40007aa8: d0 06 20 08 ld [ %i0 + 8 ], %o0 _IO_Manager_initialization( 40007aac: d0 06 20 1c ld [ %i0 + 0x1c ], %o0 40007ab0: d4 06 20 14 ld [ %i0 + 0x14 ], %o2 40007ab4: 40 00 00 4c call 40007be4 <_IO_Manager_initialization> 40007ab8: d2 06 20 18 ld [ %i0 + 0x18 ], %o1 RTEMS_INLINE_ROUTINE void _System_state_Set ( System_state_Codes state ) { _System_state_Current = state; 40007abc: 82 10 20 01 mov 1, %g1 * * At this point all API extensions are in place. After the call to * _Thread_Create_idle() _Thread_Executing and _Thread_Heir will be set. */ _Thread_Create_idle(); 40007ac0: 40 00 09 b5 call 4000a194 <_Thread_Create_idle> 40007ac4: c2 25 23 70 st %g1, [ %l4 + 0x370 ] /* * Scheduling can properly occur now as long as we avoid dispatching. */ if ( cpu_table->pretasking_hook ) 40007ac8: d0 06 40 00 ld [ %i1 ], %o0 40007acc: 80 a2 20 00 cmp %o0, 0 40007ad0: 02 80 00 04 be 40007ae0 40007ad4: 01 00 00 00 nop (*cpu_table->pretasking_hook)(); 40007ad8: 9f c2 00 00 call %o0 40007adc: 01 00 00 00 nop /* * Run the API and BSPs predriver hook. */ _API_extensions_Run_predriver(); 40007ae0: 40 00 00 b0 call 40007da0 <_API_extensions_Run_predriver> 40007ae4: 01 00 00 00 nop if ( _CPU_Table.predriver_hook ) 40007ae8: c2 04 a0 04 ld [ %l2 + 4 ], %g1 40007aec: 80 a0 60 00 cmp %g1, 0 40007af0: 02 80 00 04 be 40007b00 40007af4: 01 00 00 00 nop (*_CPU_Table.predriver_hook)(); 40007af8: 9f c0 40 00 call %g1 40007afc: 01 00 00 00 nop * Initialize all the device drivers and initialize the MPCI layer. * * NOTE: The MPCI may be build upon a device driver. */ _IO_Initialize_all_drivers(); 40007b00: 40 00 00 28 call 40007ba0 <_IO_Initialize_all_drivers> 40007b04: 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(); 40007b08: 40 00 00 8b call 40007d34 <_API_extensions_Run_postdriver> 40007b0c: 01 00 00 00 nop if ( _CPU_Table.postdriver_hook ) 40007b10: c4 04 a0 08 ld [ %l2 + 8 ], %g2 40007b14: 80 a0 a0 00 cmp %g2, 0 40007b18: 02 80 00 04 be 40007b28 40007b1c: 01 00 00 00 nop (*_CPU_Table.postdriver_hook)(); 40007b20: 9f c0 80 00 call %g2 40007b24: 01 00 00 00 nop return bsp_level; } 40007b28: 81 c7 e0 08 ret 40007b2c: 91 e8 00 13 restore %g0, %l3, %o0 */ _ISR_Disable( bsp_level ); if ( configuration_table == NULL ) _Internal_error_Occurred( 40007b30: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40007b34: 40 00 03 46 call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40007b38: 94 10 20 00 clr %o2 <== NOT EXECUTED /* * Grab our own copy of the user's CPU table. */ _CPU_Table = *cpu_table; 40007b3c: 10 bf ff 89 b 40007960 <== NOT EXECUTED 40007b40: 05 10 00 6b sethi %hi(0x4001ac00), %g2 <== NOT EXECUTED 40002f7c : rtems_status_code rtems_io_lookup_name( const char *name, rtems_driver_name_t *device_info ) { 40002f7c: 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 ); 40002f80: 92 10 20 00 clr %o1 <== NOT EXECUTED 40002f84: a2 07 bf e8 add %fp, -24, %l1 <== NOT EXECUTED 40002f88: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40002f8c: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 40002f90: 40 00 00 85 call 400031a4 <== NOT EXECUTED 40002f94: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 40002f98: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED IMFS_jnode_t *the_jnode; rtems_filesystem_location_info_t loc; int result; rtems_filesystem_node_types_t node_type; result = rtems_filesystem_evaluate_path( name, 0x00, &loc, TRUE ); 40002f9c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED the_jnode = loc.node_access; if ( !loc.ops->node_type_h ) { 40002fa0: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 40002fa4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40002fa8: 12 80 00 0e bne 40002fe0 <== NOT EXECUTED 40002fac: e4 07 bf e8 ld [ %fp + -24 ], %l2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40002fb0: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40002fb4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40002fb8: 02 80 00 04 be 40002fc8 <== NOT EXECUTED 40002fbc: 01 00 00 00 nop <== NOT EXECUTED 40002fc0: 9f c0 40 00 call %g1 <== NOT EXECUTED 40002fc4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40002fc8: 40 00 30 bd call 4000f2bc <__errno> <== NOT EXECUTED 40002fcc: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40002fd0: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40002fd4: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40002fd8: 81 c7 e0 08 ret <== NOT EXECUTED 40002fdc: 81 e8 00 00 restore <== NOT EXECUTED } node_type = (*loc.ops->node_type_h)( &loc ); 40002fe0: 9f c0 80 00 call %g2 <== NOT EXECUTED 40002fe4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { 40002fe8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40002fec: 12 80 00 18 bne 4000304c <== NOT EXECUTED 40002ff0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40002ff4: 80 a2 20 02 cmp %o0, 2 <== NOT EXECUTED 40002ff8: 12 80 00 16 bne 40003050 <== NOT EXECUTED 40002ffc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); return RTEMS_UNSATISFIED; } device_info->device_name = (char *) name; 40003000: f0 26 40 00 st %i0, [ %i1 ] <== NOT EXECUTED device_info->device_name_length = strlen( name ); 40003004: 40 00 35 8c call 40010634 <== NOT EXECUTED 40003008: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4000300c: d0 26 60 04 st %o0, [ %i1 + 4 ] <== NOT EXECUTED device_info->major = the_jnode->info.device.major; 40003010: c2 04 a0 4c ld [ %l2 + 0x4c ], %g1 <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; rtems_filesystem_freenode( &loc ); 40003014: c6 07 bf f0 ld [ %fp + -16 ], %g3 <== NOT EXECUTED return RTEMS_UNSATISFIED; } device_info->device_name = (char *) name; device_info->device_name_length = strlen( name ); device_info->major = the_jnode->info.device.major; 40003018: c2 26 60 08 st %g1, [ %i1 + 8 ] <== NOT EXECUTED device_info->minor = the_jnode->info.device.minor; 4000301c: c4 04 a0 50 ld [ %l2 + 0x50 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40003020: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40003024: 02 80 00 17 be 40003080 <== NOT EXECUTED 40003028: c4 26 60 0c st %g2, [ %i1 + 0xc ] <== NOT EXECUTED 4000302c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 40003030: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003034: 02 80 00 13 be 40003080 <== NOT EXECUTED 40003038: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000303c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40003040: b0 10 20 00 clr %i0 <== NOT EXECUTED 40003044: 81 c7 e0 08 ret <== NOT EXECUTED 40003048: 81 e8 00 00 restore <== NOT EXECUTED } node_type = (*loc.ops->node_type_h)( &loc ); if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { rtems_filesystem_freenode( &loc ); 4000304c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003050: 02 80 00 0a be 40003078 <== NOT EXECUTED 40003054: 01 00 00 00 nop <== NOT EXECUTED 40003058: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4000305c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40003060: 02 80 00 06 be 40003078 <== NOT EXECUTED 40003064: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40003068: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000306c: b0 10 20 0d mov 0xd, %i0 <== NOT EXECUTED 40003070: 81 c7 e0 08 ret <== NOT EXECUTED 40003074: 81 e8 00 00 restore <== NOT EXECUTED device_info->device_name = (char *) name; device_info->device_name_length = strlen( name ); device_info->major = the_jnode->info.device.major; device_info->minor = the_jnode->info.device.minor; rtems_filesystem_freenode( &loc ); 40003078: 81 c7 e0 08 ret <== NOT EXECUTED 4000307c: 91 e8 20 0d restore %g0, 0xd, %o0 <== NOT EXECUTED #endif return RTEMS_SUCCESSFUL; } 40003080: 81 c7 e0 08 ret <== NOT EXECUTED 40003084: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40008ca8 : rtems_status_code rtems_io_register_driver( rtems_device_major_number major, rtems_driver_address_table *driver_table, rtems_device_major_number *registered_major ) { 40008ca8: 9d e3 bf 98 save %sp, -104, %sp /* * Validate the pointer data and contents passed in */ if ( !driver_table ) 40008cac: 80 a6 60 00 cmp %i1, 0 40008cb0: 02 80 00 3e be 40008da8 40008cb4: 90 10 00 18 mov %i0, %o0 return RTEMS_INVALID_ADDRESS; if ( !registered_major ) 40008cb8: 80 a6 a0 00 cmp %i2, 0 40008cbc: 02 80 00 3b be 40008da8 40008cc0: 01 00 00 00 nop return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) 40008cc4: c2 06 40 00 ld [ %i1 ], %g1 40008cc8: 80 a0 60 00 cmp %g1, 0 40008ccc: 22 80 00 34 be,a 40008d9c 40008cd0: c2 06 60 04 ld [ %i1 + 4 ], %g1 return RTEMS_INVALID_ADDRESS; *registered_major = 0; 40008cd4: c0 26 80 00 clr [ %i2 ] /* * The requested major number is higher than what is configured. */ if ( major >= _IO_Number_of_drivers ) 40008cd8: 03 10 00 7b sethi %hi(0x4001ec00), %g1 40008cdc: c6 00 60 5c ld [ %g1 + 0x5c ], %g3 ! 4001ec5c <_IO_Number_of_drivers> 40008ce0: 80 a0 c0 08 cmp %g3, %o0 40008ce4: 08 80 00 43 bleu 40008df0 40008ce8: b0 10 20 0a mov 0xa, %i0 /* * Test for initialise/open being present to indicate the driver slot is * in use. */ if ( major == 0 ) { 40008cec: 80 a2 20 00 cmp %o0, 0 40008cf0: 12 80 00 1f bne 40008d6c 40008cf4: 03 10 00 7b sethi %hi(0x4001ec00), %g1 boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 40008cf8: 90 80 ff ff addcc %g3, -1, %o0 40008cfc: 02 80 00 26 be 40008d94 40008d00: c8 00 60 60 ld [ %g1 + 0x60 ], %g4 if ( !_IO_Driver_address_table[major].initialization_entry && 40008d04: 85 28 e0 05 sll %g3, 5, %g2 40008d08: 83 28 e0 03 sll %g3, 3, %g1 40008d0c: 84 20 80 01 sub %g2, %g1, %g2 40008d10: 84 00 bf e8 add %g2, -24, %g2 40008d14: 10 80 00 04 b 40008d24 40008d18: 84 00 80 04 add %g2, %g4, %g2 * in use. */ if ( major == 0 ) { boolean found = FALSE; for ( major = _IO_Number_of_drivers - 1 ; major ; major-- ) { 40008d1c: 02 80 00 1e be 40008d94 40008d20: 84 00 bf e8 add %g2, -24, %g2 if ( !_IO_Driver_address_table[major].initialization_entry && 40008d24: c2 00 80 00 ld [ %g2 ], %g1 40008d28: 80 a0 60 00 cmp %g1, 0 40008d2c: 32 bf ff fc bne,a 40008d1c 40008d30: 90 82 3f ff addcc %o0, -1, %o0 40008d34: c2 00 a0 04 ld [ %g2 + 4 ], %g1 40008d38: 80 a0 60 00 cmp %g1, 0 40008d3c: 32 bf ff f8 bne,a 40008d1c 40008d40: 90 82 3f ff addcc %o0, -1, %o0 <== NOT EXECUTED if ( !found ) return RTEMS_TOO_MANY; } if ( _IO_Driver_address_table[major].initialization_entry || 40008d44: 85 2a 20 03 sll %o0, 3, %g2 40008d48: 83 2a 20 05 sll %o0, 5, %g1 40008d4c: 82 20 40 02 sub %g1, %g2, %g1 40008d50: 88 01 00 01 add %g4, %g1, %g4 40008d54: c2 01 20 04 ld [ %g4 + 4 ], %g1 40008d58: 80 a0 60 00 cmp %g1, 0 40008d5c: 22 80 00 15 be,a 40008db0 40008d60: c2 06 40 00 ld [ %i1 ], %g1 _IO_Driver_address_table[major] = *driver_table; *registered_major = major; rtems_io_initialize( major, 0, NULL ); return RTEMS_SUCCESSFUL; 40008d64: 81 c7 e0 08 ret <== NOT EXECUTED 40008d68: 91 e8 20 0c restore %g0, 0xc, %o0 <== NOT EXECUTED if ( !found ) return RTEMS_TOO_MANY; } if ( _IO_Driver_address_table[major].initialization_entry || 40008d6c: c8 00 60 60 ld [ %g1 + 0x60 ], %g4 40008d70: 85 2a 20 03 sll %o0, 3, %g2 40008d74: 83 2a 20 05 sll %o0, 5, %g1 40008d78: 82 20 40 02 sub %g1, %g2, %g1 40008d7c: c6 00 40 04 ld [ %g1 + %g4 ], %g3 40008d80: 80 a0 e0 00 cmp %g3, 0 40008d84: 02 bf ff f4 be 40008d54 40008d88: 88 00 40 04 add %g1, %g4, %g4 _IO_Driver_address_table[major] = *driver_table; *registered_major = major; rtems_io_initialize( major, 0, NULL ); return RTEMS_SUCCESSFUL; 40008d8c: 81 c7 e0 08 ret 40008d90: 91 e8 20 0c restore %g0, 0xc, %o0 40008d94: 81 c7 e0 08 ret 40008d98: 91 e8 20 05 restore %g0, 5, %o0 return RTEMS_INVALID_ADDRESS; if ( !registered_major ) return RTEMS_INVALID_ADDRESS; if ( !driver_table->initialization_entry && !driver_table->open_entry ) 40008d9c: 80 a0 60 00 cmp %g1, 0 40008da0: 32 bf ff ce bne,a 40008cd8 40008da4: c0 26 80 00 clr [ %i2 ] <== NOT EXECUTED _IO_Driver_address_table[major] = *driver_table; *registered_major = major; rtems_io_initialize( major, 0, NULL ); return RTEMS_SUCCESSFUL; 40008da8: 81 c7 e0 08 ret 40008dac: 91 e8 20 09 restore %g0, 9, %o0 _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; *registered_major = major; 40008db0: d0 26 80 00 st %o0, [ %i2 ] if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40008db4: c2 21 00 00 st %g1, [ %g4 ] 40008db8: c4 06 60 04 ld [ %i1 + 4 ], %g2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40008dbc: 92 10 20 00 clr %o1 if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40008dc0: c4 21 20 04 st %g2, [ %g4 + 4 ] 40008dc4: c2 06 60 08 ld [ %i1 + 8 ], %g1 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40008dc8: 94 10 20 00 clr %o2 if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40008dcc: c2 21 20 08 st %g1, [ %g4 + 8 ] 40008dd0: c4 06 60 0c ld [ %i1 + 0xc ], %g2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40008dd4: b0 10 20 00 clr %i0 if ( _IO_Driver_address_table[major].initialization_entry || _IO_Driver_address_table[major].open_entry ) return RTEMS_RESOURCE_IN_USE; _IO_Driver_address_table[major] = *driver_table; 40008dd8: c4 21 20 0c st %g2, [ %g4 + 0xc ] 40008ddc: c2 06 60 10 ld [ %i1 + 0x10 ], %g1 40008de0: c2 21 20 10 st %g1, [ %g4 + 0x10 ] 40008de4: c4 06 60 14 ld [ %i1 + 0x14 ], %g2 *registered_major = major; rtems_io_initialize( major, 0, NULL ); 40008de8: 7f ff ff 30 call 40008aa8 40008dec: c4 21 20 14 st %g2, [ %g4 + 0x14 ] 40008df0: 81 c7 e0 08 ret 40008df4: 81 e8 00 00 restore 4000a300 : #include #include void rtems_iterate_over_all_threads(rtems_per_thread_routine routine) { 4000a300: 9d e3 bf 98 save %sp, -104, %sp uint32_t i; uint32_t api_index; Thread_Control *the_thread; Objects_Information *information; if ( !routine ) 4000a304: 80 a6 20 00 cmp %i0, 0 4000a308: 02 80 00 23 be 4000a394 4000a30c: 03 10 00 9c sethi %hi(0x40027000), %g1 return; 4000a310: a4 10 62 c4 or %g1, 0x2c4, %l2 ! 400272c4 <_Objects_Information_table+0x4> 4000a314: a6 04 a0 10 add %l2, 0x10, %l3 for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) 4000a318: c2 04 80 00 ld [ %l2 ], %g1 4000a31c: 80 a0 60 00 cmp %g1, 0 4000a320: 22 80 00 1a be,a 4000a388 4000a324: a4 04 a0 04 add %l2, 4, %l2 continue; information = _Objects_Information_table[ api_index ][ 1 ]; 4000a328: e2 00 60 04 ld [ %g1 + 4 ], %l1 if ( information ) { 4000a32c: 80 a4 60 00 cmp %l1, 0 4000a330: 22 80 00 16 be,a 4000a388 4000a334: a4 04 a0 04 add %l2, 4, %l2 <== NOT EXECUTED for ( i=1 ; i <= information->maximum ; i++ ) { 4000a338: c2 14 60 10 lduh [ %l1 + 0x10 ], %g1 4000a33c: 86 90 60 00 orcc %g1, 0, %g3 4000a340: 22 80 00 12 be,a 4000a388 4000a344: a4 04 a0 04 add %l2, 4, %l2 <== NOT EXECUTED 4000a348: a0 10 20 01 mov 1, %l0 the_thread = (Thread_Control *)information->local_table[ i ]; 4000a34c: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 4000a350: 83 2c 20 02 sll %l0, 2, %g1 4000a354: d0 00 80 01 ld [ %g2 + %g1 ], %o0 if ( !the_thread ) 4000a358: 80 a2 20 00 cmp %o0, 0 4000a35c: 02 80 00 05 be 4000a370 4000a360: a0 04 20 01 inc %l0 continue; (*routine)(the_thread); 4000a364: 9f c6 00 00 call %i0 4000a368: 01 00 00 00 nop 4000a36c: c6 14 60 10 lduh [ %l1 + 0x10 ], %g3 api_index++ ) { if ( !_Objects_Information_table[ api_index ] ) continue; information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { 4000a370: 83 28 e0 10 sll %g3, 0x10, %g1 4000a374: 83 30 60 10 srl %g1, 0x10, %g1 4000a378: 80 a0 40 10 cmp %g1, %l0 4000a37c: 3a bf ff f5 bcc,a 4000a350 4000a380: c4 04 60 20 ld [ %l1 + 0x20 ], %g2 4000a384: a4 04 a0 04 add %l2, 4, %l2 if ( !routine ) return; for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; 4000a388: 80 a4 80 13 cmp %l2, %l3 4000a38c: 32 bf ff e4 bne,a 4000a31c 4000a390: c2 04 80 00 ld [ %l2 ], %g1 4000a394: 81 c7 e0 08 ret 4000a398: 81 e8 00 00 restore 4000d3e4 : * 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 ) { 4000d3e4: 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 ); 4000d3e8: 23 10 00 6a sethi %hi(0x4001a800), %l1 4000d3ec: d0 04 63 d0 ld [ %l1 + 0x3d0 ], %o0 ! 4001abd0 4000d3f0: 92 10 20 00 clr %o1 4000d3f4: 7f ff e6 c6 call 40006f0c 4000d3f8: 94 10 20 00 clr %o2 if (rtems_libio_iop_freelist) { 4000d3fc: 21 10 00 6a sethi %hi(0x4001a800), %l0 4000d400: c4 04 23 cc ld [ %l0 + 0x3cc ], %g2 ! 4001abcc 4000d404: 80 a0 a0 00 cmp %g2, 0 4000d408: 12 80 00 07 bne 4000d424 4000d40c: 03 10 00 6a sethi %hi(0x4001a800), %g1 } failed: iop = 0; done: 4000d410: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_semaphore_release( rtems_libio_semaphore ); 4000d414: 7f ff e7 8d call 40007248 4000d418: d0 04 63 d0 ld [ %l1 + 0x3d0 ], %o0 return iop; } 4000d41c: 81 c7 e0 08 ret 4000d420: 81 e8 00 00 restore rtems_id sema; rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); if (rtems_libio_iop_freelist) { rc = rtems_semaphore_create( 4000d424: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 4000d428: 92 10 20 01 mov 1, %o1 4000d42c: 86 20 80 03 sub %g2, %g3, %g3 4000d430: 87 38 e0 02 sra %g3, 2, %g3 4000d434: 83 28 e0 02 sll %g3, 2, %g1 4000d438: 85 28 e0 06 sll %g3, 6, %g2 4000d43c: 84 20 80 01 sub %g2, %g1, %g2 4000d440: 83 28 a0 06 sll %g2, 6, %g1 4000d444: 82 20 40 02 sub %g1, %g2, %g1 4000d448: 85 28 60 0c sll %g1, 0xc, %g2 4000d44c: 82 00 40 02 add %g1, %g2, %g1 4000d450: 82 00 40 03 add %g1, %g3, %g1 4000d454: 83 28 60 04 sll %g1, 4, %g1 4000d458: 82 20 40 03 sub %g1, %g3, %g1 4000d45c: 83 28 60 02 sll %g1, 2, %g1 4000d460: 86 20 c0 01 sub %g3, %g1, %g3 4000d464: 94 10 20 54 mov 0x54, %o2 4000d468: 96 10 20 00 clr %o3 4000d46c: 11 13 10 92 sethi %hi(0x4c424800), %o0 4000d470: 98 07 bf f4 add %fp, -12, %o4 4000d474: 90 12 21 00 or %o0, 0x100, %o0 4000d478: 7f ff e5 ce call 40006bb0 4000d47c: 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) 4000d480: 80 a2 20 00 cmp %o0, 0 4000d484: 32 bf ff e4 bne,a 4000d414 4000d488: b0 10 20 00 clr %i0 <== NOT EXECUTED goto failed; iop = rtems_libio_iop_freelist; 4000d48c: f0 04 23 cc ld [ %l0 + 0x3cc ], %i0 next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; 4000d490: c4 07 bf f4 ld [ %fp + -12 ], %g2 &sema ); if (rc != RTEMS_SUCCESSFUL) goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; 4000d494: c2 06 20 28 ld [ %i0 + 0x28 ], %g1 (void) memset( iop, 0, sizeof(rtems_libio_t) ); 4000d498: c0 26 20 20 clr [ %i0 + 0x20 ] 4000d49c: c0 26 00 00 clr [ %i0 ] 4000d4a0: c0 26 20 04 clr [ %i0 + 4 ] 4000d4a4: c0 26 20 08 clr [ %i0 + 8 ] 4000d4a8: c0 26 20 10 clr [ %i0 + 0x10 ] 4000d4ac: c0 26 20 14 clr [ %i0 + 0x14 ] 4000d4b0: c0 26 20 18 clr [ %i0 + 0x18 ] 4000d4b4: c0 26 20 1c clr [ %i0 + 0x1c ] 4000d4b8: c0 26 20 24 clr [ %i0 + 0x24 ] 4000d4bc: c0 26 20 28 clr [ %i0 + 0x28 ] 4000d4c0: c0 26 20 2c clr [ %i0 + 0x2c ] 4000d4c4: c0 26 20 30 clr [ %i0 + 0x30 ] iop->flags = LIBIO_FLAGS_OPEN; iop->sem = sema; rtems_libio_iop_freelist = next; 4000d4c8: c2 24 23 cc st %g1, [ %l0 + 0x3cc ] 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; 4000d4cc: c4 26 20 20 st %g2, [ %i0 + 0x20 ] if (rc != RTEMS_SUCCESSFUL) goto failed; iop = rtems_libio_iop_freelist; next = iop->data1; (void) memset( iop, 0, sizeof(rtems_libio_t) ); iop->flags = LIBIO_FLAGS_OPEN; 4000d4d0: 82 10 21 00 mov 0x100, %g1 4000d4d4: 10 bf ff d0 b 4000d414 4000d4d8: c2 26 20 0c st %g1, [ %i0 + 0xc ] 4000331c : * * Called by BSP startup code to initialize the libio subsystem. */ void rtems_libio_init( void ) { 4000331c: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code rc; int i; rtems_libio_t *iop; if (rtems_libio_number_iops > 0) 40003320: 21 10 00 67 sethi %hi(0x40019c00), %l0 40003324: d0 04 20 3c ld [ %l0 + 0x3c ], %o0 ! 40019c3c 40003328: 80 a2 20 00 cmp %o0, 0 4000332c: 12 80 00 13 bne 40003378 40003330: 92 10 20 34 mov 0x34, %o1 /* * Create the binary semaphore used to provide mutual exclusion * on the IOP Table. */ rc = rtems_semaphore_create( 40003334: 11 13 10 92 sethi %hi(0x4c424800), %o0 40003338: 92 10 20 01 mov 1, %o1 4000333c: 90 12 21 4f or %o0, 0x14f, %o0 40003340: 94 10 20 54 mov 0x54, %o2 40003344: 96 10 20 00 clr %o3 40003348: 19 10 00 6a sethi %hi(0x4001a800), %o4 4000334c: 40 00 0e 19 call 40006bb0 40003350: 98 13 23 d0 or %o4, 0x3d0, %o4 ! 4001abd0 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_libio_semaphore ); if ( rc != RTEMS_SUCCESSFUL ) 40003354: 80 a2 20 00 cmp %o0, 0 40003358: 12 80 00 04 bne 40003368 4000335c: 01 00 00 00 nop /* * Initialize the base file system infrastructure. */ rtems_filesystem_initialize(); 40003360: 40 00 26 ba call 4000ce48 40003364: 81 e8 00 00 restore RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &rtems_libio_semaphore ); if ( rc != RTEMS_SUCCESSFUL ) rtems_fatal_error_occurred( rc ); 40003368: 40 00 12 04 call 40007b78 <== NOT EXECUTED 4000336c: 01 00 00 00 nop <== NOT EXECUTED /* * Initialize the base file system infrastructure. */ rtems_filesystem_initialize(); 40003370: 40 00 26 b6 call 4000ce48 <== NOT EXECUTED 40003374: 81 e8 00 00 restore <== NOT EXECUTED int i; rtems_libio_t *iop; if (rtems_libio_number_iops > 0) { rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, 40003378: 40 00 00 ea call 40003720 4000337c: 23 10 00 6a sethi %hi(0x4001a800), %l1 sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) 40003380: 80 a2 20 00 cmp %o0, 0 40003384: 02 80 00 18 be 400033e4 40003388: d0 24 63 c8 st %o0, [ %l1 + 0x3c8 ] rtems_fatal_error_occurred(RTEMS_NO_MEMORY); iop = rtems_libio_iop_freelist = rtems_libio_iops; 4000338c: c8 04 63 c8 ld [ %l1 + 0x3c8 ], %g4 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40003390: c6 04 20 3c ld [ %l0 + 0x3c ], %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; 40003394: 03 10 00 6a sethi %hi(0x4001a800), %g1 for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) 40003398: 80 a0 e0 01 cmp %g3, 1 4000339c: 02 80 00 10 be 400033dc 400033a0: c8 20 63 cc st %g4, [ %g1 + 0x3cc ] 400033a4: 82 10 00 04 mov %g4, %g1 400033a8: 84 10 20 01 mov 1, %g2 iop->data1 = iop + 1; 400033ac: 82 00 60 34 add %g1, 0x34, %g1 400033b0: 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++) 400033b4: 80 a0 80 03 cmp %g2, %g3 400033b8: 12 bf ff fd bne 400033ac 400033bc: c2 20 7f f4 st %g1, [ %g1 + -12 ] 400033c0: 85 28 e0 02 sll %g3, 2, %g2 400033c4: 83 28 e0 04 sll %g3, 4, %g1 400033c8: 82 20 40 02 sub %g1, %g2, %g1 400033cc: 82 00 40 03 add %g1, %g3, %g1 400033d0: 83 28 60 02 sll %g1, 2, %g1 400033d4: 82 01 00 01 add %g4, %g1, %g1 400033d8: 88 00 7f cc add %g1, -52, %g4 iop->data1 = iop + 1; iop->data1 = NULL; 400033dc: 10 bf ff d6 b 40003334 400033e0: c0 21 20 28 clr [ %g4 + 0x28 ] if (rtems_libio_number_iops > 0) { rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, sizeof(rtems_libio_t)); if (rtems_libio_iops == NULL) rtems_fatal_error_occurred(RTEMS_NO_MEMORY); 400033e4: 40 00 11 e5 call 40007b78 <== NOT EXECUTED 400033e8: 90 10 20 1a mov 0x1a, %o0 <== NOT EXECUTED iop = rtems_libio_iop_freelist = rtems_libio_iops; 400033ec: 10 bf ff e9 b 40003390 <== NOT EXECUTED 400033f0: c8 04 63 c8 ld [ %l1 + 0x3c8 ], %g4 <== NOT EXECUTED 4000d280 : */ int rtems_libio_is_file_open( void *node_access ) { 4000d280: 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 ); 4000d284: 21 10 00 6a sethi %hi(0x4001a800), %l0 <== NOT EXECUTED 4000d288: d0 04 23 d0 ld [ %l0 + 0x3d0 ], %o0 ! 4001abd0 <== NOT EXECUTED 4000d28c: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000d290: 7f ff e7 1f call 40006f0c <== NOT EXECUTED 4000d294: 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++){ 4000d298: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000d29c: c8 00 60 3c ld [ %g1 + 0x3c ], %g4 ! 40019c3c <== NOT EXECUTED 4000d2a0: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED 4000d2a4: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 4000d2a8: 02 80 00 0e be 4000d2e0 <== NOT EXECUTED 4000d2ac: c4 00 63 c8 ld [ %g1 + 0x3c8 ], %g2 <== NOT EXECUTED 4000d2b0: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 4000d2b4: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4000d2b8: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000d2bc: 02 80 00 06 be 4000d2d4 <== NOT EXECUTED 4000d2c0: 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 ) { 4000d2c4: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4000d2c8: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4000d2cc: 02 80 00 0a be 4000d2f4 <== NOT EXECUTED 4000d2d0: d0 04 23 d0 ld [ %l0 + 0x3d0 ], %o0 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000d2d4: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 4000d2d8: 12 bf ff f7 bne 4000d2b4 <== NOT EXECUTED 4000d2dc: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000d2e0: d0 04 23 d0 ld [ %l0 + 0x3d0 ], %o0 <== NOT EXECUTED 4000d2e4: 7f ff e7 d9 call 40007248 <== NOT EXECUTED 4000d2e8: b0 10 20 00 clr %i0 <== NOT EXECUTED return result; } 4000d2ec: 81 c7 e0 08 ret <== NOT EXECUTED 4000d2f0: 81 e8 00 00 restore <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000d2f4: 7f ff e7 d5 call 40007248 <== NOT EXECUTED 4000d2f8: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return result; } 4000d2fc: 81 c7 e0 08 ret <== NOT EXECUTED 4000d300: 81 e8 00 00 restore <== NOT EXECUTED 4000d304 : */ int rtems_libio_is_open_files_in_fs( rtems_filesystem_mount_table_entry_t * fs_mt_entry ) { 4000d304: 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 ); 4000d308: 21 10 00 6a sethi %hi(0x4001a800), %l0 <== NOT EXECUTED 4000d30c: d0 04 23 d0 ld [ %l0 + 0x3d0 ], %o0 ! 4001abd0 <== NOT EXECUTED 4000d310: 92 10 20 00 clr %o1 <== NOT EXECUTED 4000d314: 7f ff e6 fe call 40006f0c <== NOT EXECUTED 4000d318: 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++){ 4000d31c: 03 10 00 67 sethi %hi(0x40019c00), %g1 <== NOT EXECUTED 4000d320: c8 00 60 3c ld [ %g1 + 0x3c ], %g4 ! 40019c3c <== NOT EXECUTED 4000d324: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED 4000d328: 80 a1 20 00 cmp %g4, 0 <== NOT EXECUTED 4000d32c: 02 80 00 0e be 4000d364 <== NOT EXECUTED 4000d330: c4 00 63 c8 ld [ %g1 + 0x3c8 ], %g2 <== NOT EXECUTED 4000d334: 86 10 20 00 clr %g3 <== NOT EXECUTED if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) { 4000d338: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4000d33c: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 4000d340: 02 80 00 06 be 4000d358 <== NOT EXECUTED 4000d344: 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 ) { 4000d348: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 4000d34c: 80 a0 40 18 cmp %g1, %i0 <== NOT EXECUTED 4000d350: 02 80 00 0a be 4000d378 <== NOT EXECUTED 4000d354: d0 04 23 d0 ld [ %l0 + 0x3d0 ], %o0 <== NOT EXECUTED /* * Look for any active file descriptor entry. */ for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){ 4000d358: 80 a0 c0 04 cmp %g3, %g4 <== NOT EXECUTED 4000d35c: 12 bf ff f7 bne 4000d338 <== NOT EXECUTED 4000d360: 84 00 a0 34 add %g2, 0x34, %g2 <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000d364: d0 04 23 d0 ld [ %l0 + 0x3d0 ], %o0 <== NOT EXECUTED 4000d368: 7f ff e7 b8 call 40007248 <== NOT EXECUTED 4000d36c: b0 10 20 00 clr %i0 <== NOT EXECUTED return result; } 4000d370: 81 c7 e0 08 ret <== NOT EXECUTED 4000d374: 81 e8 00 00 restore <== NOT EXECUTED break; } } } rtems_semaphore_release( rtems_libio_semaphore ); 4000d378: 7f ff e7 b4 call 40007248 <== NOT EXECUTED 4000d37c: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return result; } 4000d380: 81 c7 e0 08 ret <== NOT EXECUTED 4000d384: 81 e8 00 00 restore <== NOT EXECUTED 4001a8bc : rtems_filesystem_freenode( &env->root_directory); free(env); } } rtems_status_code rtems_libio_set_private_env(void) { 4001a8bc: 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); 4001a8c0: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a8c4: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001a8c8: 40 00 02 1e call 4001b140 <== NOT EXECUTED 4001a8cc: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 4001a8d0: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4001a8d4: 12 80 00 44 bne 4001a9e4 <== NOT EXECUTED 4001a8d8: 25 10 00 f0 sethi %hi(0x4003c000), %l2 <== NOT EXECUTED /* Only for the first time a malloc is necesary */ if (rtems_current_user_env==&rtems_global_user_env) { 4001a8dc: c4 04 a1 20 ld [ %l2 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED 4001a8e0: 03 10 00 f9 sethi %hi(0x4003e400), %g1 <== NOT EXECUTED 4001a8e4: a6 10 62 24 or %g1, 0x224, %l3 ! 4003e624 <== NOT EXECUTED 4001a8e8: 80 a0 80 13 cmp %g2, %l3 <== NOT EXECUTED 4001a8ec: 12 80 00 0f bne 4001a928 <== NOT EXECUTED 4001a8f0: a2 14 a1 20 or %l2, 0x120, %l1 <== NOT EXECUTED rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t)); 4001a8f4: 7f ff af 78 call 400066d4 <== NOT EXECUTED 4001a8f8: 90 10 20 40 mov 0x40, %o0 <== NOT EXECUTED if (!tmp) 4001a8fc: a0 92 20 00 orcc %o0, 0, %l0 <== NOT EXECUTED 4001a900: 02 80 00 3b be 4001a9ec <== NOT EXECUTED 4001a904: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED #ifdef HAVE_USERENV_REFCNT tmp->refcnt = 1; #endif sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,(void(*)(void *))free_user_env); 4001a908: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a90c: 15 10 00 69 sethi %hi(0x4001a400), %o2 <== NOT EXECUTED 4001a910: 40 00 03 31 call 4001b5d4 <== NOT EXECUTED 4001a914: 94 12 a3 90 or %o2, 0x390, %o2 ! 4001a790 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 4001a918: a2 92 20 00 orcc %o0, 0, %l1 <== NOT EXECUTED 4001a91c: 32 80 00 36 bne,a 4001a9f4 <== NOT EXECUTED 4001a920: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED * not initialized yet */ free(tmp); return sc; } rtems_current_user_env = tmp; 4001a924: e0 24 a1 20 st %l0, [ %l2 + 0x120 ] <== NOT EXECUTED }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ 4001a928: d0 04 a1 20 ld [ %l2 + 0x120 ], %o0 <== NOT EXECUTED 4001a92c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 4001a930: 40 00 36 c5 call 40028444 <== NOT EXECUTED 4001a934: 94 10 20 40 mov 0x40, %o2 <== NOT EXECUTED rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a938: 03 10 00 f8 sethi %hi(0x4003e000), %g1 <== NOT EXECUTED 4001a93c: c8 00 61 b8 ld [ %g1 + 0x1b8 ], %g4 ! 4003e1b8 <== 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*/ 4001a940: c4 04 a1 20 ld [ %l2 + 0x120 ], %g2 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a944: c2 01 20 18 ld [ %g4 + 0x18 ], %g1 <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a948: a2 07 bf e4 add %fp, -28, %l1 <== NOT EXECUTED *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a94c: c2 20 a0 14 st %g1, [ %g2 + 0x14 ] <== NOT EXECUTED } rtems_current_user_env = tmp; }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ 4001a950: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a954: c6 01 20 1c ld [ %g4 + 0x1c ], %g3 <== NOT EXECUTED } rtems_current_user_env = tmp; }; *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ 4001a958: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a95c: c6 20 a0 18 st %g3, [ %g2 + 0x18 ] <== NOT EXECUTED 4001a960: c2 01 20 20 ld [ %g4 + 0x20 ], %g1 <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a964: 21 10 00 e1 sethi %hi(0x40038400), %l0 <== NOT EXECUTED *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a968: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 4001a96c: c6 01 20 24 ld [ %g4 + 0x24 ], %g3 <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a970: 92 10 20 00 clr %o1 <== NOT EXECUTED *rtems_current_user_env = rtems_global_user_env; /* get the global values*/ rtems_current_user_env->task_id=task_id; /* mark the local values*/ /* get a clean root */ rtems_filesystem_root = THE_ROOT_FS_LOC; 4001a974: c6 20 a0 20 st %g3, [ %g2 + 0x20 ] <== NOT EXECUTED * code we must _not_ free the original locs because * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a978: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 4001a97c: 96 10 20 00 clr %o3 <== NOT EXECUTED 4001a980: 7f ff ad ae call 40006038 <== NOT EXECUTED 4001a984: 90 14 22 98 or %l0, 0x298, %o0 <== NOT EXECUTED rtems_filesystem_root = loc; 4001a988: c4 04 a1 20 ld [ %l2 + 0x120 ], %g2 <== NOT EXECUTED 4001a98c: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a990: 90 14 22 98 or %l0, 0x298, %o0 <== NOT EXECUTED * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4001a994: c2 20 a0 14 st %g1, [ %g2 + 0x14 ] <== NOT EXECUTED 4001a998: c2 07 bf e8 ld [ %fp + -24 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a99c: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4001a9a0: c2 20 a0 18 st %g1, [ %g2 + 0x18 ] <== NOT EXECUTED 4001a9a4: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a9a8: 92 10 20 00 clr %o1 <== NOT EXECUTED * what we are trying to do here is forking off * clones. */ rtems_filesystem_evaluate_path("/", 0, &loc, 0); rtems_filesystem_root = loc; 4001a9ac: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 4001a9b0: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED rtems_filesystem_evaluate_path("/", 0, &loc, 0); 4001a9b4: 96 10 20 00 clr %o3 <== NOT EXECUTED 4001a9b8: 7f ff ad a0 call 40006038 <== NOT EXECUTED 4001a9bc: c2 20 a0 20 st %g1, [ %g2 + 0x20 ] <== NOT EXECUTED rtems_filesystem_current = loc; 4001a9c0: c2 07 bf e4 ld [ %fp + -28 ], %g1 <== NOT EXECUTED 4001a9c4: c6 04 a1 20 ld [ %l2 + 0x120 ], %g3 <== NOT EXECUTED 4001a9c8: c2 20 e0 04 st %g1, [ %g3 + 4 ] <== NOT EXECUTED 4001a9cc: c4 07 bf e8 ld [ %fp + -24 ], %g2 <== NOT EXECUTED 4001a9d0: c4 20 e0 08 st %g2, [ %g3 + 8 ] <== NOT EXECUTED 4001a9d4: c2 07 bf ec ld [ %fp + -20 ], %g1 <== NOT EXECUTED 4001a9d8: c2 20 e0 0c st %g1, [ %g3 + 0xc ] <== NOT EXECUTED 4001a9dc: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED 4001a9e0: c4 20 e0 10 st %g2, [ %g3 + 0x10 ] <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 4001a9e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a9e8: 81 e8 00 00 restore <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; /* Only for the first time a malloc is necesary */ if (rtems_current_user_env==&rtems_global_user_env) { rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t)); if (!tmp) 4001a9ec: 81 c7 e0 08 ret <== NOT EXECUTED 4001a9f0: 91 e8 20 1a restore %g0, 0x1a, %o0 <== NOT EXECUTED sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,(void(*)(void *))free_user_env); if (sc != RTEMS_SUCCESSFUL) { /* don't use free_user_env because the pathlocs are * not initialized yet */ free(tmp); 4001a9f4: 7f ff af 0f call 40006630 <== NOT EXECUTED 4001a9f8: b0 10 00 11 mov %l1, %i0 <== NOT EXECUTED 4001a9fc: 81 c7 e0 08 ret <== NOT EXECUTED 4001aa00: 81 e8 00 00 restore <== NOT EXECUTED 4001a808 : * 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) { 4001a808: 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); 4001a80c: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a810: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001a814: 40 00 02 4b call 4001b140 <== NOT EXECUTED 4001a818: 94 07 bf f0 add %fp, -16, %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 4001a81c: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 4001a820: 12 80 00 13 bne 4001a86c <== NOT EXECUTED 4001a824: 25 10 00 f0 sethi %hi(0x4003c000), %l2 <== NOT EXECUTED if (rtems_current_user_env->task_id==current_task_id) { 4001a828: e2 04 a1 20 ld [ %l2 + 0x120 ], %l1 ! 4003c120 <== NOT EXECUTED 4001a82c: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001a830: c4 04 40 00 ld [ %l1 ], %g2 <== NOT EXECUTED 4001a834: 86 14 a1 20 or %l2, 0x120, %g3 <== NOT EXECUTED 4001a838: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001a83c: 02 80 00 0e be 4001a874 <== NOT EXECUTED 4001a840: a0 10 00 03 mov %g3, %l0 <== NOT EXECUTED free_user_env(tmp); }; /* AT THIS POINT, rtems_current_user_env is DANGLING */ sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env, 4001a844: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a848: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 4001a84c: 40 00 04 35 call 4001b920 <== NOT EXECUTED 4001a850: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED (void*)&shared_user_env ); if (sc != RTEMS_SUCCESSFUL) 4001a854: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 4001a858: 02 80 00 10 be 4001a898 <== NOT EXECUTED 4001a85c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED return RTEMS_SUCCESSFUL; bailout: /* fallback to the global env */ rtems_current_user_env = &rtems_global_user_env; 4001a860: 03 10 00 f9 sethi %hi(0x4003e400), %g1 <== NOT EXECUTED 4001a864: 82 10 62 24 or %g1, 0x224, %g1 ! 4003e624 <== NOT EXECUTED 4001a868: c2 24 a1 20 st %g1, [ %l2 + 0x120 ] <== NOT EXECUTED return sc; } 4001a86c: 81 c7 e0 08 ret <== NOT EXECUTED 4001a870: 91 e8 00 02 restore %g0, %g2, %o0 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; if (rtems_current_user_env->task_id==current_task_id) { /* kill the current user env & task_var*/ rtems_user_env_t *tmp = rtems_current_user_env; sc = rtems_task_variable_delete(RTEMS_SELF,(void*)&rtems_current_user_env); 4001a874: 40 00 03 b7 call 4001b750 <== NOT EXECUTED 4001a878: 92 10 00 03 mov %g3, %o1 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) return sc; 4001a87c: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 4001a880: 12 bf ff fb bne 4001a86c <== NOT EXECUTED 4001a884: 01 00 00 00 nop <== NOT EXECUTED free_user_env(tmp); 4001a888: 7f ff ff c2 call 4001a790 <== NOT EXECUTED 4001a88c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED }; /* AT THIS POINT, rtems_current_user_env is DANGLING */ sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env, 4001a890: 10 bf ff ee b 4001a848 <== NOT EXECUTED 4001a894: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED (void*)&shared_user_env ); if (sc != RTEMS_SUCCESSFUL) goto bailout; sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env); 4001a898: 15 10 00 69 sethi %hi(0x4001a400), %o2 <== NOT EXECUTED 4001a89c: 40 00 03 4e call 4001b5d4 <== NOT EXECUTED 4001a8a0: 94 12 a3 90 or %o2, 0x390, %o2 ! 4001a790 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 4001a8a4: 84 92 20 00 orcc %o0, 0, %g2 <== NOT EXECUTED 4001a8a8: 12 bf ff ef bne 4001a864 <== NOT EXECUTED 4001a8ac: 03 10 00 f9 sethi %hi(0x4003e400), %g1 <== NOT EXECUTED goto bailout; /* the current_user_env is the same pointer that remote env */ rtems_current_user_env = shared_user_env; 4001a8b0: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001a8b4: 10 bf ff ee b 4001a86c <== NOT EXECUTED 4001a8b8: c2 24 a1 20 st %g1, [ %l2 + 0x120 ] <== NOT EXECUTED 4000d224 : */ uint32_t rtems_libio_to_fcntl_flags( uint32_t flags ) { 4000d224: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED uint32_t fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { 4000d228: 82 08 a0 06 and %g2, 6, %g1 <== NOT EXECUTED 4000d22c: 80 a0 60 06 cmp %g1, 6 <== NOT EXECUTED 4000d230: 02 80 00 05 be 4000d244 <== NOT EXECUTED 4000d234: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED fcntl_flags |= O_RDWR; } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 4000d238: 80 88 a0 02 btst 2, %g2 <== NOT EXECUTED 4000d23c: 02 80 00 0e be 4000d274 <== NOT EXECUTED 4000d240: 90 10 20 00 clr %o0 <== NOT EXECUTED fcntl_flags |= O_RDONLY; } else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) { fcntl_flags |= O_WRONLY; } if ( (flags & LIBIO_FLAGS_NO_DELAY) == LIBIO_FLAGS_NO_DELAY ) { 4000d244: 80 88 a0 01 btst 1, %g2 <== NOT EXECUTED 4000d248: 02 80 00 04 be 4000d258 <== NOT EXECUTED 4000d24c: 80 88 a2 00 btst 0x200, %g2 <== NOT EXECUTED fcntl_flags |= O_NONBLOCK; 4000d250: 03 00 00 10 sethi %hi(0x4000), %g1 <== NOT EXECUTED 4000d254: 90 12 00 01 or %o0, %g1, %o0 <== NOT EXECUTED } if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) { 4000d258: 32 80 00 02 bne,a 4000d260 <== NOT EXECUTED 4000d25c: 90 12 20 08 or %o0, 8, %o0 <== NOT EXECUTED fcntl_flags |= O_APPEND; } if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) { 4000d260: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED 4000d264: 32 80 00 02 bne,a 4000d26c <== NOT EXECUTED 4000d268: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED fcntl_flags |= O_CREAT; } return fcntl_flags; } 4000d26c: 81 c3 e0 08 retl <== NOT EXECUTED 4000d270: 01 00 00 00 nop <== NOT EXECUTED { uint32_t fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { fcntl_flags |= O_RDWR; } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 4000d274: 83 30 a0 02 srl %g2, 2, %g1 <== NOT EXECUTED 4000d278: 10 bf ff f3 b 4000d244 <== NOT EXECUTED 4000d27c: 90 08 60 01 and %g1, 1, %o0 <== NOT EXECUTED 400100f4 : Objects_Id id, void *buffer, size_t size, uint32_t *count ) { 400100f4: 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 ) 400100f8: 80 a6 60 00 cmp %i1, 0 400100fc: 02 80 00 28 be 4001019c 40010100: 80 a6 e0 00 cmp %i3, 0 return RTEMS_INVALID_ADDRESS; if ( !count ) 40010104: 02 80 00 26 be 4001019c 40010108: 92 10 00 18 mov %i0, %o1 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 4001010c: 11 10 00 d2 sethi %hi(0x40034800), %o0 40010110: 90 12 22 80 or %o0, 0x280, %o0 ! 40034a80 <_Message_queue_Information> 40010114: 40 00 19 5e call 4001668c <_Objects_Get> 40010118: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 4001011c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010120: 80 a0 60 00 cmp %g1, 0 40010124: 02 80 00 08 be 40010144 40010128: 9a 10 00 1b mov %i3, %o5 4001012c: 80 a0 60 02 cmp %g1, 2 40010130: 08 80 00 03 bleu 4001013c 40010134: 90 10 20 04 mov 4, %o0 40010138: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Message_queue_Translate_core_message_queue_return_code( core_status ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001013c: 81 c7 e0 08 ret 40010140: 91 e8 00 08 restore %g0, %o0, %o0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: core_status = _CORE_message_queue_Broadcast( 40010144: 92 10 00 19 mov %i1, %o1 40010148: 94 10 00 1a mov %i2, %o2 4001014c: 96 10 00 18 mov %i0, %o3 40010150: 98 10 20 00 clr %o4 40010154: 40 00 13 d2 call 4001509c <_CORE_message_queue_Broadcast> 40010158: 90 02 20 14 add %o0, 0x14, %o0 4001015c: 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 ) 40010160: 03 10 00 d1 sethi %hi(0x40034400), %g1 40010164: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40010168: 84 00 bf ff add %g2, -1, %g2 4001016c: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 40010170: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40010174: 80 a0 e0 00 cmp %g3, 0 40010178: 02 80 00 06 be 40010190 4001017c: 01 00 00 00 nop #endif count ); _Thread_Enable_dispatch(); return 40010180: 40 00 01 35 call 40010654 <_Message_queue_Translate_core_message_queue_return_code> 40010184: 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 */ } 40010188: 81 c7 e0 08 ret 4001018c: 91 e8 00 08 restore %g0, %o0, %o0 _Thread_Dispatch(); 40010190: 40 00 1e 67 call 40017b2c <_Thread_Dispatch> 40010194: 01 00 00 00 nop 40010198: 30 bf ff fa b,a 40010180 #endif count ); _Thread_Enable_dispatch(); return 4001019c: 10 bf ff e8 b 4001013c <== NOT EXECUTED 400101a0: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED 400101a4 : uint32_t count, uint32_t max_message_size, rtems_attribute attribute_set, Objects_Id *id ) { 400101a4: 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 ) ) 400101a8: a4 96 20 00 orcc %i0, 0, %l2 400101ac: 02 80 00 1f be 40010228 400101b0: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 400101b4: 80 a7 20 00 cmp %i4, 0 400101b8: 02 80 00 1c be 40010228 400101bc: 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 ) 400101c0: 80 a6 60 00 cmp %i1, 0 400101c4: 02 80 00 19 be 40010228 400101c8: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( max_message_size == 0 ) 400101cc: 80 a6 a0 00 cmp %i2, 0 400101d0: 02 80 00 16 be 40010228 400101d4: b0 10 20 08 mov 8, %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400101d8: 23 10 00 d1 sethi %hi(0x40034400), %l1 400101dc: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 400101e0: 82 00 60 01 inc %g1 400101e4: c2 24 63 60 st %g1, [ %l1 + 0x360 ] #endif #endif _Thread_Disable_dispatch(); /* protects object pointer */ the_message_queue = _Message_queue_Allocate( count, max_message_size ); 400101e8: 90 10 00 19 mov %i1, %o0 400101ec: 40 00 2d 2f call 4001b6a8 <_Message_queue_Allocate> 400101f0: 92 10 00 1a mov %i2, %o1 if ( !the_message_queue ) { 400101f4: a0 92 20 00 orcc %o0, 0, %l0 400101f8: 12 80 00 0e bne 40010230 400101fc: 80 8e e0 04 btst 4, %i3 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010200: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40010204: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 40010208: 82 00 7f ff add %g1, -1, %g1 4001020c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40010210: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40010214: 80 a0 a0 00 cmp %g2, 0 40010218: 12 80 00 33 bne 400102e4 4001021c: 01 00 00 00 nop 40010220: 40 00 1e 43 call 40017b2c <_Thread_Dispatch> 40010224: 01 00 00 00 nop 40010228: 81 c7 e0 08 ret 4001022c: 81 e8 00 00 restore } #endif the_message_queue->attribute_set = attribute_set; if (_Attributes_Is_priority( attribute_set ) ) 40010230: 12 80 00 11 bne 40010274 40010234: f6 24 20 10 st %i3, [ %l0 + 0x10 ] the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY; else the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO; 40010238: c0 27 bf f4 clr [ %fp + -12 ] if ( ! _CORE_message_queue_Initialize( 4001023c: 94 10 00 19 mov %i1, %o2 40010240: 96 10 00 1a mov %i2, %o3 40010244: 90 04 20 14 add %l0, 0x14, %o0 40010248: 40 00 13 e2 call 400151d0 <_CORE_message_queue_Initialize> 4001024c: 92 07 bf f4 add %fp, -12, %o1 40010250: 80 a2 20 00 cmp %o0, 0 40010254: 12 80 00 0b bne 40010280 40010258: 92 10 00 10 mov %l0, %o1 RTEMS_INLINE_ROUTINE void _Message_queue_Free ( Message_queue_Control *the_message_queue ) { _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 4001025c: 11 10 00 d2 sethi %hi(0x40034800), %o0 <== NOT EXECUTED 40010260: 40 00 18 b4 call 40016530 <_Objects_Free> <== NOT EXECUTED 40010264: 90 12 22 80 or %o0, 0x280, %o0 ! 40034a80 <_Message_queue_Information> <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010268: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 4001026c: 10 bf ff e7 b 40010208 <== NOT EXECUTED 40010270: b0 10 20 0d mov 0xd, %i0 <== NOT EXECUTED #endif the_message_queue->attribute_set = attribute_set; if (_Attributes_Is_priority( attribute_set ) ) the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY; 40010274: 82 10 20 01 mov 1, %g1 40010278: 10 bf ff f1 b 4001023c 4001027c: c2 27 bf f4 st %g1, [ %fp + -12 ] Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010280: 03 10 00 d2 sethi %hi(0x40034800), %g1 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40010284: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010288: 88 10 62 80 or %g1, 0x280, %g4 4001028c: c4 11 20 10 lduh [ %g4 + 0x10 ], %g2 40010290: 03 00 00 3f sethi %hi(0xfc00), %g1 40010294: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40010298: 82 08 c0 01 and %g3, %g1, %g1 4001029c: 80 a0 40 02 cmp %g1, %g2 400102a0: 38 80 00 06 bgu,a 400102b8 400102a4: e4 24 20 0c st %l2, [ %l0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 400102a8: c4 01 20 20 ld [ %g4 + 0x20 ], %g2 400102ac: 83 28 60 02 sll %g1, 2, %g1 400102b0: e0 20 80 01 st %l0, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 400102b4: e4 24 20 0c st %l2, [ %l0 + 0xc ] &_Message_queue_Information, &the_message_queue->Object, (Objects_Name) name ); *id = the_message_queue->Object.id; 400102b8: c6 27 00 00 st %g3, [ %i4 ] 400102bc: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 400102c0: b0 10 20 00 clr %i0 400102c4: 82 00 7f ff add %g1, -1, %g1 400102c8: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 400102cc: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 400102d0: 80 a0 a0 00 cmp %g2, 0 400102d4: 12 80 00 04 bne 400102e4 400102d8: 01 00 00 00 nop _Thread_Dispatch(); 400102dc: 40 00 1e 14 call 40017b2c <_Thread_Dispatch> 400102e0: 01 00 00 00 nop ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 400102e4: 81 c7 e0 08 ret 400102e8: 81 e8 00 00 restore 40016c34 : */ rtems_status_code rtems_message_queue_delete( Objects_Id id ) { 40016c34: 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 *) 40016c38: 21 10 00 b1 sethi %hi(0x4002c400), %l0 40016c3c: 92 10 00 18 mov %i0, %o1 40016c40: 94 07 bf f4 add %fp, -12, %o2 40016c44: 7f ff e5 15 call 40010098 <_Objects_Get> 40016c48: 90 14 23 ac or %l0, 0x3ac, %o0 register Message_queue_Control *the_message_queue; Objects_Locations location; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40016c4c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40016c50: 80 a0 60 00 cmp %g1, 0 40016c54: 12 80 00 20 bne 40016cd4 40016c58: b0 10 00 08 mov %o0, %i0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40016c5c: a0 14 23 ac or %l0, 0x3ac, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40016c60: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40016c64: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40016c68: 05 00 00 3f sethi %hi(0xfc00), %g2 40016c6c: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40016c70: 82 08 40 02 and %g1, %g2, %g1 40016c74: 80 a0 40 03 cmp %g1, %g3 40016c78: 18 80 00 05 bgu 40016c8c 40016c7c: 94 10 20 05 mov 5, %o2 information->local_table[ index ] = the_object; 40016c80: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 40016c84: 83 28 60 02 sll %g1, 2, %g1 40016c88: c0 20 80 01 clr [ %g2 + %g1 ] case OBJECTS_LOCAL: _Objects_Close( &_Message_queue_Information, &the_message_queue->Object ); _CORE_message_queue_Close( 40016c8c: 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; 40016c90: c0 26 20 0c clr [ %i0 + 0xc ] 40016c94: 40 00 01 c0 call 40017394 <_CORE_message_queue_Close> 40016c98: 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 ); 40016c9c: 90 10 00 10 mov %l0, %o0 40016ca0: 7f ff e4 bb call 4000ff8c <_Objects_Free> 40016ca4: 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 ) 40016ca8: 03 10 00 b1 sethi %hi(0x4002c400), %g1 40016cac: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 ! 4002c410 <_Thread_Dispatch_disable_level> 40016cb0: b0 10 20 00 clr %i0 40016cb4: 84 00 bf ff add %g2, -1, %g2 40016cb8: c4 20 60 10 st %g2, [ %g1 + 0x10 ] 40016cbc: c6 00 60 10 ld [ %g1 + 0x10 ], %g3 40016cc0: 80 a0 e0 00 cmp %g3, 0 40016cc4: 02 80 00 09 be 40016ce8 40016cc8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40016ccc: 81 c7 e0 08 ret 40016cd0: 81 e8 00 00 restore { register Message_queue_Control *the_message_queue; Objects_Locations location; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40016cd4: 80 a0 60 02 cmp %g1, 2 40016cd8: 08 bf ff fd bleu 40016ccc 40016cdc: b0 10 20 04 mov 4, %i0 40016ce0: 81 c7 e0 08 ret <== NOT EXECUTED 40016ce4: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40016ce8: 7f ff ea 14 call 40011538 <_Thread_Dispatch> 40016cec: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40016cf0: 81 c7 e0 08 ret 40016cf4: 81 e8 00 00 restore 400103b0 : rtems_status_code rtems_message_queue_flush( Objects_Id id, uint32_t *count ) { 400103b0: 9d e3 bf 90 save %sp, -112, %sp 400103b4: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 400103b8: 80 a6 60 00 cmp %i1, 0 400103bc: 02 80 00 1c be 4001042c 400103c0: 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 *) 400103c4: 11 10 00 d2 sethi %hi(0x40034800), %o0 400103c8: 94 07 bf f4 add %fp, -12, %o2 400103cc: 40 00 18 b0 call 4001668c <_Objects_Get> 400103d0: 90 12 22 80 or %o0, 0x280, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 400103d4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400103d8: 80 a0 60 00 cmp %g1, 0 400103dc: 02 80 00 06 be 400103f4 400103e0: 80 a0 60 02 cmp %g1, 2 400103e4: 08 80 00 12 bleu 4001042c 400103e8: b0 10 20 04 mov 4, %i0 400103ec: 81 c7 e0 08 ret <== NOT EXECUTED 400103f0: 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 ); 400103f4: 40 00 13 57 call 40015150 <_CORE_message_queue_Flush> 400103f8: 90 02 20 14 add %o0, 0x14, %o0 400103fc: 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 ) 40010400: 03 10 00 d1 sethi %hi(0x40034400), %g1 40010404: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40010408: b0 10 20 00 clr %i0 4001040c: 84 00 bf ff add %g2, -1, %g2 40010410: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 40010414: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40010418: 80 a0 e0 00 cmp %g3, 0 4001041c: 12 80 00 04 bne 4001042c 40010420: 01 00 00 00 nop _Thread_Dispatch(); 40010424: 40 00 1d c2 call 40017b2c <_Thread_Dispatch> 40010428: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001042c: 81 c7 e0 08 ret 40010430: 81 e8 00 00 restore 40010434 : rtems_status_code rtems_message_queue_get_number_pending( Objects_Id id, uint32_t *count ) { 40010434: 9d e3 bf 90 save %sp, -112, %sp 40010438: 92 10 00 18 mov %i0, %o1 register Message_queue_Control *the_message_queue; Objects_Locations location; if ( !count ) 4001043c: 80 a6 60 00 cmp %i1, 0 40010440: 02 80 00 1b be 400104ac 40010444: b0 10 20 09 mov 9, %i0 40010448: 11 10 00 d2 sethi %hi(0x40034800), %o0 4001044c: 94 07 bf f4 add %fp, -12, %o2 40010450: 40 00 18 8f call 4001668c <_Objects_Get> 40010454: 90 12 22 80 or %o0, 0x280, %o0 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40010458: c2 07 bf f4 ld [ %fp + -12 ], %g1 4001045c: 80 a0 60 00 cmp %g1, 0 40010460: 22 80 00 07 be,a 4001047c 40010464: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 40010468: 80 a0 60 02 cmp %g1, 2 4001046c: 08 80 00 10 bleu 400104ac 40010470: b0 10 20 04 mov 4, %i0 40010474: 81 c7 e0 08 ret <== NOT EXECUTED 40010478: 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; 4001047c: 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 ) 40010480: 07 10 00 d1 sethi %hi(0x40034400), %g3 40010484: c2 00 e3 60 ld [ %g3 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 40010488: b0 10 20 00 clr %i0 4001048c: 82 00 7f ff add %g1, -1, %g1 40010490: c2 20 e3 60 st %g1, [ %g3 + 0x360 ] 40010494: c4 00 e3 60 ld [ %g3 + 0x360 ], %g2 40010498: 80 a0 a0 00 cmp %g2, 0 4001049c: 12 80 00 04 bne 400104ac 400104a0: 01 00 00 00 nop _Thread_Dispatch(); 400104a4: 40 00 1d a2 call 40017b2c <_Thread_Dispatch> 400104a8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400104ac: 81 c7 e0 08 ret 400104b0: 81 e8 00 00 restore 40016d2c : void *buffer, size_t *size, uint32_t option_set, rtems_interval timeout ) { 40016d2c: 9d e3 bf 90 save %sp, -112, %sp register Message_queue_Control *the_message_queue; Objects_Locations location; boolean wait; if ( !buffer ) 40016d30: 80 a6 60 00 cmp %i1, 0 40016d34: 02 80 00 2b be 40016de0 40016d38: 92 10 00 18 mov %i0, %o1 return RTEMS_INVALID_ADDRESS; if ( !size ) 40016d3c: 80 a6 a0 00 cmp %i2, 0 40016d40: 02 80 00 28 be 40016de0 40016d44: 94 07 bf f4 add %fp, -12, %o2 RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get ( Objects_Id id, Objects_Locations *location ) { return (Message_queue_Control *) 40016d48: 11 10 00 b1 sethi %hi(0x4002c400), %o0 40016d4c: 7f ff e4 d3 call 40010098 <_Objects_Get> 40016d50: 90 12 23 ac or %o0, 0x3ac, %o0 ! 4002c7ac <_Message_queue_Information> return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { 40016d54: c2 07 bf f4 ld [ %fp + -12 ], %g1 40016d58: 80 a0 60 00 cmp %g1, 0 40016d5c: 22 80 00 08 be,a 40016d7c 40016d60: d2 02 20 08 ld [ %o0 + 8 ], %o1 40016d64: 80 a0 60 02 cmp %g1, 2 40016d68: 08 80 00 03 bleu 40016d74 40016d6c: 90 10 20 04 mov 4, %o0 40016d70: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40016d74: 81 c7 e0 08 ret 40016d78: 91 e8 00 08 restore %g0, %o0, %o0 40016d7c: 98 0e e0 01 and %i3, 1, %o4 if ( _Options_Is_no_wait( option_set ) ) wait = FALSE; else wait = TRUE; _CORE_message_queue_Seize( 40016d80: 94 10 00 19 mov %i1, %o2 40016d84: 96 10 00 1a mov %i2, %o3 40016d88: 98 1b 20 01 xor %o4, 1, %o4 40016d8c: 9a 10 00 1c mov %i4, %o5 40016d90: 40 00 01 a7 call 4001742c <_CORE_message_queue_Seize> 40016d94: 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 ) 40016d98: 05 10 00 b1 sethi %hi(0x4002c400), %g2 40016d9c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 ! 4002c410 <_Thread_Dispatch_disable_level> 40016da0: 82 00 7f ff add %g1, -1, %g1 40016da4: c2 20 a0 10 st %g1, [ %g2 + 0x10 ] 40016da8: c6 00 a0 10 ld [ %g2 + 0x10 ], %g3 40016dac: 80 a0 e0 00 cmp %g3, 0 40016db0: 02 80 00 08 be 40016dd0 40016db4: 01 00 00 00 nop size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 40016db8: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED 40016dbc: c4 00 60 ec ld [ %g1 + 0xec ], %g2 ! 4002c4ec <_Thread_Executing> 40016dc0: 40 00 00 36 call 40016e98 <_Message_queue_Translate_core_message_queue_return_code> 40016dc4: d0 00 a0 34 ld [ %g2 + 0x34 ], %o0 ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40016dc8: 81 c7 e0 08 ret 40016dcc: 91 e8 00 08 restore %g0, %o0, %o0 _Thread_Dispatch(); 40016dd0: 7f ff e9 da call 40011538 <_Thread_Dispatch> 40016dd4: 01 00 00 00 nop size, wait, timeout ); _Thread_Enable_dispatch(); return _Message_queue_Translate_core_message_queue_return_code( 40016dd8: 10 bf ff f9 b 40016dbc 40016ddc: 03 10 00 b1 sethi %hi(0x4002c400), %g1 40016de0: 10 bf ff e5 b 40016d74 <== NOT EXECUTED 40016de4: 90 10 20 09 mov 9, %o0 <== NOT EXECUTED 40016de8 : rtems_status_code rtems_message_queue_send( Objects_Id id, void *buffer, size_t size ) { 40016de8: 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 ) 40016dec: 80 a6 60 00 cmp %i1, 0 40016df0: 02 80 00 20 be 40016e70 40016df4: 90 10 20 09 mov 9, %o0 40016df8: 11 10 00 b1 sethi %hi(0x4002c400), %o0 40016dfc: 92 10 00 18 mov %i0, %o1 40016e00: 90 12 23 ac or %o0, 0x3ac, %o0 40016e04: 7f ff e4 a5 call 40010098 <_Objects_Get> 40016e08: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40016e0c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40016e10: 80 a0 60 00 cmp %g1, 0 40016e14: 12 80 00 19 bne 40016e78 40016e18: 80 a0 60 02 cmp %g1, 2 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, boolean wait, Watchdog_Interval timeout ) { return _CORE_message_queue_Submit( 40016e1c: 94 10 00 1a mov %i2, %o2 40016e20: c0 23 a0 5c clr [ %sp + 0x5c ] 40016e24: c0 23 a0 60 clr [ %sp + 0x60 ] 40016e28: 92 10 00 19 mov %i1, %o1 40016e2c: 96 10 00 18 mov %i0, %o3 40016e30: 98 10 20 00 clr %o4 40016e34: 90 02 20 14 add %o0, 0x14, %o0 40016e38: 1b 1f ff ff sethi %hi(0x7ffffc00), %o5 40016e3c: 40 00 01 c3 call 40017548 <_CORE_message_queue_Submit> 40016e40: 9a 13 63 ff or %o5, 0x3ff, %o5 ! 7fffffff 40016e44: 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 ) 40016e48: 05 10 00 b1 sethi %hi(0x4002c400), %g2 40016e4c: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 ! 4002c410 <_Thread_Dispatch_disable_level> 40016e50: 82 00 7f ff add %g1, -1, %g1 40016e54: c2 20 a0 10 st %g1, [ %g2 + 0x10 ] 40016e58: c6 00 a0 10 ld [ %g2 + 0x10 ], %g3 40016e5c: 80 a0 e0 00 cmp %g3, 0 40016e60: 02 80 00 0b be 40016e8c 40016e64: 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); 40016e68: 40 00 00 0c call 40016e98 <_Message_queue_Translate_core_message_queue_return_code> 40016e6c: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40016e70: 81 c7 e0 08 ret 40016e74: 91 e8 00 08 restore %g0, %o0, %o0 if ( !buffer ) return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40016e78: 08 bf ff fe bleu 40016e70 40016e7c: 90 10 20 04 mov 4, %o0 40016e80: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Message_queue_Translate_core_message_queue_return_code(status); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40016e84: 81 c7 e0 08 ret <== NOT EXECUTED 40016e88: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40016e8c: 7f ff e9 ab call 40011538 <_Thread_Dispatch> 40016e90: 01 00 00 00 nop 40016e94: 30 bf ff f5 b,a 40016e68 400099f4 : rtems_status_code rtems_message_queue_urgent( Objects_Id id, void *buffer, size_t size ) { 400099f4: 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 ) 400099f8: 80 a6 60 00 cmp %i1, 0 400099fc: 02 80 00 1f be 40009a78 40009a00: 90 10 20 09 mov 9, %o0 40009a04: 11 10 00 8a sethi %hi(0x40022800), %o0 40009a08: 92 10 00 18 mov %i0, %o1 40009a0c: 90 12 21 a8 or %o0, 0x1a8, %o0 40009a10: 40 00 0a 21 call 4000c294 <_Objects_Get> 40009a14: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40009a18: c2 07 bf f4 ld [ %fp + -12 ], %g1 40009a1c: 80 a0 60 00 cmp %g1, 0 40009a20: 12 80 00 18 bne 40009a80 40009a24: 80 a0 60 02 cmp %g1, 2 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, boolean wait, Watchdog_Interval timeout ) { return _CORE_message_queue_Submit( 40009a28: 94 10 00 1a mov %i2, %o2 40009a2c: c0 23 a0 5c clr [ %sp + 0x5c ] 40009a30: c0 23 a0 60 clr [ %sp + 0x60 ] 40009a34: 92 10 00 19 mov %i1, %o1 40009a38: 96 10 00 18 mov %i0, %o3 40009a3c: 98 10 20 00 clr %o4 40009a40: 1b 20 00 00 sethi %hi(0x80000000), %o5 40009a44: 40 00 05 e8 call 4000b1e4 <_CORE_message_queue_Submit> 40009a48: 90 02 20 14 add %o0, 0x14, %o0 40009a4c: 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 ) 40009a50: 03 10 00 89 sethi %hi(0x40022400), %g1 40009a54: c4 00 62 90 ld [ %g1 + 0x290 ], %g2 ! 40022690 <_Thread_Dispatch_disable_level> 40009a58: 84 00 bf ff add %g2, -1, %g2 40009a5c: c4 20 62 90 st %g2, [ %g1 + 0x290 ] 40009a60: c6 00 62 90 ld [ %g1 + 0x290 ], %g3 40009a64: 80 a0 e0 00 cmp %g3, 0 40009a68: 02 80 00 0b be 40009a94 40009a6c: 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); 40009a70: 7f ff ff d7 call 400099cc <_Message_queue_Translate_core_message_queue_return_code> 40009a74: 90 10 00 1a mov %i2, %o0 } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40009a78: 81 c7 e0 08 ret 40009a7c: 91 e8 00 08 restore %g0, %o0, %o0 if ( !buffer ) return RTEMS_INVALID_ADDRESS; the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) 40009a80: 08 bf ff fe bleu 40009a78 <== NOT EXECUTED 40009a84: 90 10 20 04 mov 4, %o0 <== NOT EXECUTED 40009a88: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Message_queue_Translate_core_message_queue_return_code(status); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40009a8c: 81 c7 e0 08 ret <== NOT EXECUTED 40009a90: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40009a94: 40 00 0f 28 call 4000d734 <_Thread_Dispatch> 40009a98: 01 00 00 00 nop 40009a9c: 30 bf ff f5 b,a 40009a70 40009d1c : void rtems_panic( const char *printf_format, ... ) { 40009d1c: 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); 40009d20: 11 08 00 00 sethi %hi(0x20000000), %o0 <== NOT EXECUTED ... ) { va_list arglist; va_start(arglist, printf_format); 40009d24: 94 07 a0 48 add %fp, 0x48, %o2 <== NOT EXECUTED void rtems_panic( const char *printf_format, ... ) { 40009d28: f2 27 a0 48 st %i1, [ %fp + 0x48 ] <== NOT EXECUTED 40009d2c: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40009d30: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED 40009d34: f8 27 a0 54 st %i4, [ %fp + 0x54 ] <== NOT EXECUTED 40009d38: 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); 40009d3c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40009d40: 7f ff ff 88 call 40009b60 <== NOT EXECUTED 40009d44: d4 27 bf f4 st %o2, [ %fp + -12 ] <== NOT EXECUTED va_end(arglist); } 40009d48: 81 c7 e0 08 ret <== NOT EXECUTED 40009d4c: 81 e8 00 00 restore <== NOT EXECUTED 4001067c : uint32_t length, uint32_t buffer_size, rtems_attribute attribute_set, Objects_Id *id ) { 4001067c: 9d e3 bf 98 save %sp, -104, %sp register Partition_Control *the_partition; if ( !rtems_is_name_valid( name ) ) 40010680: a8 96 20 00 orcc %i0, 0, %l4 40010684: 02 80 00 29 be 40010728 40010688: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 4001068c: 80 a6 60 00 cmp %i1, 0 40010690: 02 80 00 11 be 400106d4 40010694: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 40010698: 02 80 00 0f be 400106d4 4001069c: 80 a6 a0 00 cmp %i2, 0 return RTEMS_INVALID_ADDRESS; if ( length == 0 || buffer_size == 0 || length < buffer_size || 400106a0: 12 80 00 04 bne 400106b0 400106a4: 80 a6 e0 00 cmp %i3, 0 ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 400106a8: 81 c7 e0 08 ret 400106ac: 91 e8 20 08 restore %g0, 8, %o0 return RTEMS_INVALID_ADDRESS; if ( !id ) return RTEMS_INVALID_ADDRESS; if ( length == 0 || buffer_size == 0 || length < buffer_size || 400106b0: 02 80 00 1e be 40010728 400106b4: b0 10 20 08 mov 8, %i0 400106b8: 80 a6 80 1b cmp %i2, %i3 400106bc: 0a 80 00 1b bcs 40010728 400106c0: 80 8e e0 07 btst 7, %i3 400106c4: 12 80 00 19 bne 40010728 400106c8: 80 8e 60 07 btst 7, %i1 !_Partition_Is_buffer_size_aligned( buffer_size ) ) return RTEMS_INVALID_SIZE; if ( !_Addresses_Is_aligned( starting_address ) ) 400106cc: 02 80 00 04 be 400106dc 400106d0: 25 10 00 d1 sethi %hi(0x40034400), %l2 400106d4: 81 c7 e0 08 ret 400106d8: 91 e8 20 09 restore %g0, 9, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400106dc: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400106e0: 82 00 60 01 inc %g1 400106e4: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] * the inactive chain of free partition control blocks. */ RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void ) { return (Partition_Control *) _Objects_Allocate( &_Partition_Information ); 400106e8: 27 10 00 d1 sethi %hi(0x40034400), %l3 400106ec: 40 00 16 83 call 400160f8 <_Objects_Allocate> 400106f0: 90 14 e0 e0 or %l3, 0xe0, %o0 ! 400344e0 <_Partition_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_partition = _Partition_Allocate(); if ( !the_partition ) { 400106f4: a2 92 20 00 orcc %o0, 0, %l1 400106f8: 12 80 00 0e bne 40010730 400106fc: 92 10 00 1b mov %i3, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010700: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 40010704: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 40010708: 82 00 7f ff add %g1, -1, %g1 4001070c: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] 40010710: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 40010714: 80 a0 a0 00 cmp %g2, 0 40010718: 12 80 00 04 bne 40010728 4001071c: 01 00 00 00 nop 40010720: 40 00 1d 03 call 40017b2c <_Thread_Dispatch> 40010724: 01 00 00 00 nop 40010728: 81 c7 e0 08 ret 4001072c: 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; 40010730: f8 24 60 1c st %i4, [ %l1 + 0x1c ] _Thread_Enable_dispatch(); return RTEMS_TOO_MANY; } #endif the_partition->starting_address = starting_address; 40010734: f2 24 60 10 st %i1, [ %l1 + 0x10 ] the_partition->length = length; 40010738: f4 24 60 14 st %i2, [ %l1 + 0x14 ] the_partition->buffer_size = buffer_size; 4001073c: f6 24 60 18 st %i3, [ %l1 + 0x18 ] the_partition->attribute_set = attribute_set; the_partition->number_of_used_blocks = 0; 40010740: c0 24 60 20 clr [ %l1 + 0x20 ] _Chain_Initialize( &the_partition->Memory, starting_address, 40010744: 40 00 55 1e call 40025bbc <.udiv> 40010748: 90 10 00 1a mov %i2, %o0 4001074c: a0 04 60 24 add %l1, 0x24, %l0 40010750: 94 10 00 08 mov %o0, %o2 40010754: 92 10 00 19 mov %i1, %o1 40010758: 90 10 00 10 mov %l0, %o0 4001075c: 40 00 12 38 call 4001503c <_Chain_Initialize> 40010760: 96 10 00 1b mov %i3, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010764: 90 14 e0 e0 or %l3, 0xe0, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40010768: c6 04 60 08 ld [ %l1 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4001076c: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 40010770: 03 00 00 3f sethi %hi(0xfc00), %g1 40010774: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40010778: 82 08 c0 01 and %g3, %g1, %g1 4001077c: 80 a0 40 02 cmp %g1, %g2 40010780: 38 80 00 06 bgu,a 40010798 40010784: e8 24 60 0c st %l4, [ %l1 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40010788: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4001078c: 83 28 60 02 sll %g1, 2, %g1 40010790: e2 20 80 01 st %l1, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 40010794: e8 24 60 0c st %l4, [ %l1 + 0xc ] &_Partition_Information, &the_partition->Object, (Objects_Name) name ); *id = the_partition->Object.id; 40010798: c6 27 40 00 st %g3, [ %i5 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001079c: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400107a0: 10 bf ff da b 40010708 400107a4: b0 10 20 00 clr %i0 400107a8 : */ rtems_status_code rtems_partition_delete( Objects_Id id ) { 400107a8: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 400107ac: 92 10 00 18 mov %i0, %o1 400107b0: 94 07 bf f4 add %fp, -12, %o2 400107b4: 31 10 00 d1 sethi %hi(0x40034400), %i0 400107b8: 40 00 17 b5 call 4001668c <_Objects_Get> 400107bc: 90 16 20 e0 or %i0, 0xe0, %o0 ! 400344e0 <_Partition_Information> register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 400107c0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400107c4: 80 a0 60 00 cmp %g1, 0 400107c8: 12 80 00 13 bne 40010814 400107cc: 92 10 00 08 mov %o0, %o1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( the_partition->number_of_used_blocks == 0 ) { 400107d0: c2 02 20 20 ld [ %o0 + 0x20 ], %g1 400107d4: 80 a0 60 00 cmp %g1, 0 400107d8: 02 80 00 14 be 40010828 400107dc: 90 16 20 e0 or %i0, 0xe0, %o0 400107e0: 03 10 00 d1 sethi %hi(0x40034400), %g1 400107e4: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 400107e8: b0 10 20 0c mov 0xc, %i0 400107ec: 84 00 bf ff add %g2, -1, %g2 400107f0: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 400107f4: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 400107f8: 80 a0 e0 00 cmp %g3, 0 400107fc: 12 80 00 22 bne 40010884 40010800: 01 00 00 00 nop _Thread_Dispatch(); 40010804: 40 00 1c ca call 40017b2c <_Thread_Dispatch> 40010808: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001080c: 81 c7 e0 08 ret 40010810: 81 e8 00 00 restore { register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 40010814: 80 a0 60 02 cmp %g1, 2 40010818: 08 bf ff fd bleu 4001080c 4001081c: b0 10 20 04 mov 4, %i0 40010820: 81 c7 e0 08 ret <== NOT EXECUTED 40010824: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40010828: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4001082c: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40010830: 05 00 00 3f sethi %hi(0xfc00), %g2 40010834: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40010838: 82 08 40 02 and %g1, %g2, %g1 4001083c: 80 a0 40 03 cmp %g1, %g3 40010840: 18 80 00 04 bgu 40010850 40010844: 83 28 60 02 sll %g1, 2, %g1 information->local_table[ index ] = the_object; 40010848: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4001084c: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Partition_Free ( Partition_Control *the_partition ) { _Objects_Free( &_Partition_Information, &the_partition->Object ); 40010850: 40 00 17 38 call 40016530 <_Objects_Free> 40010854: c0 22 60 0c clr [ %o1 + 0xc ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010858: 03 10 00 d1 sethi %hi(0x40034400), %g1 4001085c: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40010860: b0 10 20 00 clr %i0 40010864: 84 00 bf ff add %g2, -1, %g2 40010868: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 4001086c: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40010870: 80 a0 e0 00 cmp %g3, 0 40010874: 12 80 00 04 bne 40010884 40010878: 01 00 00 00 nop _Thread_Dispatch(); 4001087c: 40 00 1c ac call 40017b2c <_Thread_Dispatch> 40010880: 01 00 00 00 nop 40010884: 81 c7 e0 08 ret 40010888: 81 e8 00 00 restore 4001088c : rtems_status_code rtems_partition_get_buffer( Objects_Id id, void **buffer ) { 4001088c: 9d e3 bf 90 save %sp, -112, %sp 40010890: 92 10 00 18 mov %i0, %o1 register Partition_Control *the_partition; Objects_Locations location; void *the_buffer; if ( !buffer ) 40010894: 80 a6 60 00 cmp %i1, 0 40010898: 02 80 00 1a be 40010900 4001089c: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 400108a0: 11 10 00 d1 sethi %hi(0x40034400), %o0 400108a4: 94 07 bf f4 add %fp, -12, %o2 400108a8: 40 00 17 79 call 4001668c <_Objects_Get> 400108ac: 90 12 20 e0 or %o0, 0xe0, %o0 return RTEMS_INVALID_ADDRESS; the_partition = _Partition_Get( id, &location ); switch ( location ) { 400108b0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400108b4: 80 a0 60 00 cmp %g1, 0 400108b8: 12 80 00 14 bne 40010908 400108bc: b0 10 00 08 mov %o0, %i0 RTEMS_INLINE_ROUTINE void *_Partition_Allocate_buffer ( Partition_Control *the_partition ) { return _Chain_Get( &the_partition->Memory ); 400108c0: 40 00 11 cc call 40014ff0 <_Chain_Get> 400108c4: 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 ) { 400108c8: a0 92 20 00 orcc %o0, 0, %l0 400108cc: 32 80 00 14 bne,a 4001091c 400108d0: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400108d4: 03 10 00 d1 sethi %hi(0x40034400), %g1 400108d8: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 400108dc: b0 10 20 0d mov 0xd, %i0 400108e0: 84 00 bf ff add %g2, -1, %g2 400108e4: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 400108e8: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 400108ec: 80 a0 e0 00 cmp %g3, 0 400108f0: 12 80 00 04 bne 40010900 400108f4: 01 00 00 00 nop _Thread_Dispatch(); 400108f8: 40 00 1c 8d call 40017b2c <_Thread_Dispatch> 400108fc: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_UNSATISFIED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40010900: 81 c7 e0 08 ret 40010904: 81 e8 00 00 restore if ( !buffer ) return RTEMS_INVALID_ADDRESS; the_partition = _Partition_Get( id, &location ); switch ( location ) { 40010908: 80 a0 60 02 cmp %g1, 2 4001090c: 08 bf ff fd bleu 40010900 40010910: b0 10 20 04 mov 4, %i0 40010914: 81 c7 e0 08 ret <== NOT EXECUTED 40010918: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_buffer = _Partition_Allocate_buffer( the_partition ); if ( the_buffer ) { the_partition->number_of_used_blocks += 1; 4001091c: 82 00 60 01 inc %g1 40010920: c2 26 20 20 st %g1, [ %i0 + 0x20 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010924: 05 10 00 d1 sethi %hi(0x40034400), %g2 40010928: c2 00 a3 60 ld [ %g2 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 4001092c: 82 00 7f ff add %g1, -1, %g1 40010930: c2 20 a3 60 st %g1, [ %g2 + 0x360 ] 40010934: c6 00 a3 60 ld [ %g2 + 0x360 ], %g3 40010938: 80 a0 e0 00 cmp %g3, 0 4001093c: 02 80 00 05 be 40010950 40010940: 01 00 00 00 nop _Thread_Enable_dispatch(); *buffer = the_buffer; 40010944: e0 26 40 00 st %l0, [ %i1 ] <== NOT EXECUTED 40010948: 81 c7 e0 08 ret 4001094c: 91 e8 20 00 restore %g0, 0, %o0 _Thread_Dispatch(); 40010950: 40 00 1c 77 call 40017b2c <_Thread_Dispatch> 40010954: 01 00 00 00 nop 40010958: 10 bf ff fc b 40010948 4001095c: e0 26 40 00 st %l0, [ %i1 ] 40010994 : rtems_status_code rtems_partition_return_buffer( Objects_Id id, void *buffer ) { 40010994: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get ( Objects_Id id, Objects_Locations *location ) { return (Partition_Control *) 40010998: 11 10 00 d1 sethi %hi(0x40034400), %o0 4001099c: 92 10 00 18 mov %i0, %o1 400109a0: 90 12 20 e0 or %o0, 0xe0, %o0 400109a4: 40 00 17 3a call 4001668c <_Objects_Get> 400109a8: 94 07 bf f4 add %fp, -12, %o2 register Partition_Control *the_partition; Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { 400109ac: c2 07 bf f4 ld [ %fp + -12 ], %g1 400109b0: 80 a0 60 00 cmp %g1, 0 400109b4: 12 80 00 12 bne 400109fc 400109b8: b0 10 00 08 mov %o0, %i0 ) { void *starting; void *ending; starting = the_partition->starting_address; 400109bc: c4 02 20 10 ld [ %o0 + 0x10 ], %g2 ending = _Addresses_Add_offset( starting, the_partition->length ); return ( 400109c0: 80 a0 80 19 cmp %g2, %i1 400109c4: 28 80 00 13 bleu,a 40010a10 400109c8: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400109cc: 03 10 00 d1 sethi %hi(0x40034400), %g1 400109d0: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 400109d4: 84 00 bf ff add %g2, -1, %g2 400109d8: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 400109dc: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 400109e0: 80 a0 e0 00 cmp %g3, 0 400109e4: 12 80 00 27 bne 40010a80 400109e8: 01 00 00 00 nop _Thread_Dispatch(); 400109ec: 40 00 1c 50 call 40017b2c <_Thread_Dispatch> 400109f0: b0 10 20 09 mov 9, %i0 ! 9 400109f4: 81 c7 e0 08 ret 400109f8: 81 e8 00 00 restore 400109fc: 80 a0 60 02 cmp %g1, 2 40010a00: 08 bf ff fd bleu 400109f4 40010a04: b0 10 20 04 mov 4, %i0 40010a08: 81 c7 e0 08 ret <== NOT EXECUTED 40010a0c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED 40010a10: 82 00 80 01 add %g2, %g1, %g1 40010a14: 80 a0 40 19 cmp %g1, %i1 40010a18: 0a bf ff ed bcs 400109cc 40010a1c: 01 00 00 00 nop 40010a20: d2 02 20 18 ld [ %o0 + 0x18 ], %o1 40010a24: 40 00 55 12 call 40025e6c <.urem> 40010a28: 90 26 40 02 sub %i1, %g2, %o0 40010a2c: 80 a2 20 00 cmp %o0, 0 40010a30: 12 bf ff e7 bne 400109cc 40010a34: 92 10 00 19 mov %i1, %o1 RTEMS_INLINE_ROUTINE void _Partition_Free_buffer ( Partition_Control *the_partition, Chain_Node *the_buffer ) { _Chain_Append( &the_partition->Memory, the_buffer ); 40010a38: 40 00 11 62 call 40014fc0 <_Chain_Append> 40010a3c: 90 06 20 24 add %i0, 0x24, %o0 return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) { _Partition_Free_buffer( the_partition, buffer ); the_partition->number_of_used_blocks -= 1; 40010a40: c2 06 20 20 ld [ %i0 + 0x20 ], %g1 40010a44: 82 00 7f ff add %g1, -1, %g1 40010a48: c2 26 20 20 st %g1, [ %i0 + 0x20 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40010a4c: 07 10 00 d1 sethi %hi(0x40034400), %g3 40010a50: c2 00 e3 60 ld [ %g3 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 40010a54: b0 10 20 00 clr %i0 40010a58: 82 00 7f ff add %g1, -1, %g1 40010a5c: c2 20 e3 60 st %g1, [ %g3 + 0x360 ] 40010a60: c4 00 e3 60 ld [ %g3 + 0x360 ], %g2 40010a64: 80 a0 a0 00 cmp %g2, 0 40010a68: 12 80 00 04 bne 40010a78 40010a6c: 01 00 00 00 nop _Thread_Dispatch(); 40010a70: 40 00 1c 2f call 40017b2c <_Thread_Dispatch> 40010a74: 01 00 00 00 nop 40010a78: 81 c7 e0 08 ret 40010a7c: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40010a80: 81 c7 e0 08 ret <== NOT EXECUTED 40010a84: 91 e8 20 09 restore %g0, 9, %o0 <== NOT EXECUTED 4000f900 : */ rtems_status_code rtems_port_delete( Objects_Id id ) { 4000f900: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Dual_ported_memory_Control *_Dual_ported_memory_Get ( Objects_Id id, Objects_Locations *location ) { return (Dual_ported_memory_Control *) 4000f904: 92 10 00 18 mov %i0, %o1 4000f908: 94 07 bf f4 add %fp, -12, %o2 4000f90c: 31 10 00 d1 sethi %hi(0x40034400), %i0 4000f910: 40 00 1b 5f call 4001668c <_Objects_Get> 4000f914: 90 16 20 94 or %i0, 0x94, %o0 ! 40034494 <_Dual_ported_memory_Information> register Dual_ported_memory_Control *the_port; Objects_Locations location; the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { 4000f918: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f91c: 80 a0 60 00 cmp %g1, 0 4000f920: 12 80 00 1a bne 4000f988 4000f924: 92 10 00 08 mov %o0, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f928: 90 16 20 94 or %i0, 0x94, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4000f92c: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4000f930: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 4000f934: 05 00 00 3f sethi %hi(0xfc00), %g2 4000f938: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4000f93c: 82 08 40 02 and %g1, %g2, %g1 4000f940: 80 a0 40 03 cmp %g1, %g3 4000f944: 18 80 00 04 bgu 4000f954 4000f948: 83 28 60 02 sll %g1, 2, %g1 information->local_table[ index ] = the_object; 4000f94c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 4000f950: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Dual_ported_memory_Free ( Dual_ported_memory_Control *the_port ) { _Objects_Free( &_Dual_ported_memory_Information, &the_port->Object ); 4000f954: 40 00 1a f7 call 40016530 <_Objects_Free> 4000f958: c0 22 60 0c clr [ %o1 + 0xc ] 4000f95c: 03 10 00 d1 sethi %hi(0x40034400), %g1 4000f960: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 4000f964: b0 10 20 00 clr %i0 4000f968: 84 00 bf ff add %g2, -1, %g2 4000f96c: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 4000f970: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 4000f974: 80 a0 e0 00 cmp %g3, 0 4000f978: 02 80 00 0a be 4000f9a0 4000f97c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f980: 81 c7 e0 08 ret <== NOT EXECUTED 4000f984: 81 e8 00 00 restore <== NOT EXECUTED { register Dual_ported_memory_Control *the_port; Objects_Locations location; the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { 4000f988: 82 18 60 02 xor %g1, 2, %g1 4000f98c: 80 a0 00 01 cmp %g0, %g1 4000f990: 84 60 20 00 subx %g0, 0, %g2 4000f994: b0 08 a0 15 and %g2, 0x15, %i0 4000f998: 81 c7 e0 08 ret 4000f99c: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 4000f9a0: 40 00 20 63 call 40017b2c <_Thread_Dispatch> 4000f9a4: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f9a8: 81 c7 e0 08 ret 4000f9ac: 81 e8 00 00 restore 40010c9c : */ rtems_status_code rtems_rate_monotonic_delete( Objects_Id id ) { 40010c9c: 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 *) 40010ca0: 21 10 00 d1 sethi %hi(0x40034400), %l0 40010ca4: 92 10 00 18 mov %i0, %o1 40010ca8: 94 07 bf f4 add %fp, -12, %o2 40010cac: 40 00 16 78 call 4001668c <_Objects_Get> 40010cb0: 90 14 21 2c or %l0, 0x12c, %o0 Rate_monotonic_Control *the_period; Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 40010cb4: c2 07 bf f4 ld [ %fp + -12 ], %g1 40010cb8: 80 a0 60 00 cmp %g1, 0 40010cbc: 12 80 00 20 bne 40010d3c 40010cc0: b0 10 00 08 mov %o0, %i0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010cc4: a0 14 21 2c or %l0, 0x12c, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40010cc8: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40010ccc: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40010cd0: 05 00 00 3f sethi %hi(0xfc00), %g2 40010cd4: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40010cd8: 82 08 40 02 and %g1, %g2, %g1 40010cdc: 80 a0 40 03 cmp %g1, %g3 40010ce0: 38 80 00 06 bgu,a 40010cf8 40010ce4: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40010ce8: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 40010cec: 83 28 60 02 sll %g1, 2, %g1 40010cf0: 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; 40010cf4: 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 ); 40010cf8: 40 00 22 55 call 4001964c <_Watchdog_Remove> 40010cfc: 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 ); 40010d00: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_INACTIVE; 40010d04: c0 26 20 38 clr [ %i0 + 0x38 ] 40010d08: 40 00 16 0a call 40016530 <_Objects_Free> 40010d0c: 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 ) 40010d10: 03 10 00 d1 sethi %hi(0x40034400), %g1 40010d14: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40010d18: b0 10 20 00 clr %i0 40010d1c: 84 00 bf ff add %g2, -1, %g2 40010d20: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 40010d24: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40010d28: 80 a0 e0 00 cmp %g3, 0 40010d2c: 02 80 00 0a be 40010d54 40010d30: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40010d34: 81 c7 e0 08 ret <== NOT EXECUTED 40010d38: 81 e8 00 00 restore <== NOT EXECUTED { Rate_monotonic_Control *the_period; Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 40010d3c: 82 18 60 02 xor %g1, 2, %g1 40010d40: 80 a0 00 01 cmp %g0, %g1 40010d44: 84 60 20 00 subx %g0, 0, %g2 40010d48: b0 08 a0 15 and %g2, 0x15, %i0 40010d4c: 81 c7 e0 08 ret 40010d50: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 40010d54: 40 00 1b 76 call 40017b2c <_Thread_Dispatch> 40010d58: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40010d5c: 81 c7 e0 08 ret 40010d60: 81 e8 00 00 restore 4000f72c : rtems_status_code rtems_rate_monotonic_get_statistics( Objects_Id id, rtems_rate_monotonic_period_statistics *statistics ) { 4000f72c: 9d e3 bf 90 save %sp, -112, %sp 4000f730: 92 10 00 18 mov %i0, %o1 Objects_Locations location; Rate_monotonic_Control *the_period; if ( !statistics ) 4000f734: 80 a6 60 00 cmp %i1, 0 4000f738: 02 80 00 17 be 4000f794 4000f73c: b0 10 20 09 mov 9, %i0 4000f740: 11 10 00 7d sethi %hi(0x4001f400), %o0 4000f744: 94 07 bf f4 add %fp, -12, %o2 4000f748: 7f ff ec b1 call 4000aa0c <_Objects_Get> 4000f74c: 90 12 20 4c or %o0, 0x4c, %o0 return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000f750: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f754: 80 a0 60 00 cmp %g1, 0 4000f758: 12 80 00 11 bne 4000f79c 4000f75c: 92 10 00 08 mov %o0, %o1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: *statistics = the_period->Statistics; 4000f760: 90 10 00 19 mov %i1, %o0 4000f764: 92 02 60 54 add %o1, 0x54, %o1 4000f768: 40 00 08 00 call 40011768 4000f76c: 94 10 20 38 mov 0x38, %o2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f770: 03 10 00 7d sethi %hi(0x4001f400), %g1 4000f774: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 4001f5e0 <_Thread_Dispatch_disable_level> 4000f778: b0 10 20 00 clr %i0 4000f77c: 84 00 bf ff add %g2, -1, %g2 4000f780: c4 20 61 e0 st %g2, [ %g1 + 0x1e0 ] 4000f784: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 4000f788: 80 a0 e0 00 cmp %g3, 0 4000f78c: 02 80 00 0a be 4000f7b4 4000f790: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f794: 81 c7 e0 08 ret <== NOT EXECUTED 4000f798: 81 e8 00 00 restore <== NOT EXECUTED if ( !statistics ) return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000f79c: 82 18 60 02 xor %g1, 2, %g1 4000f7a0: 80 a0 00 01 cmp %g0, %g1 4000f7a4: 84 60 20 00 subx %g0, 0, %g2 4000f7a8: b0 08 a0 15 and %g2, 0x15, %i0 4000f7ac: 81 c7 e0 08 ret 4000f7b0: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 4000f7b4: 7f ff f1 be call 4000beac <_Thread_Dispatch> 4000f7b8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f7bc: 81 c7 e0 08 ret 4000f7c0: 81 e8 00 00 restore 4000f7c4 : rtems_status_code rtems_rate_monotonic_get_status( Objects_Id id, rtems_rate_monotonic_period_status *status ) { 4000f7c4: 9d e3 bf 88 save %sp, -120, %sp 4000f7c8: 92 10 00 18 mov %i0, %o1 Objects_Locations location; Rate_monotonic_Control *the_period; if ( !status ) 4000f7cc: 80 a6 60 00 cmp %i1, 0 4000f7d0: 02 80 00 21 be 4000f854 4000f7d4: b0 10 20 09 mov 9, %i0 4000f7d8: 11 10 00 7d sethi %hi(0x4001f400), %o0 4000f7dc: 94 07 bf f4 add %fp, -12, %o2 4000f7e0: 7f ff ec 8b call 4000aa0c <_Objects_Get> 4000f7e4: 90 12 20 4c or %o0, 0x4c, %o0 return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000f7e8: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000f7ec: 80 a0 60 00 cmp %g1, 0 4000f7f0: 12 80 00 1b bne 4000f85c 4000f7f4: b0 10 00 08 mov %o0, %i0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: status->owner = ((the_period->owner) ? the_period->owner->Object.id : 0); 4000f7f8: c2 02 20 50 ld [ %o0 + 0x50 ], %g1 4000f7fc: 80 a0 60 00 cmp %g1, 0 4000f800: 02 80 00 03 be 4000f80c 4000f804: 84 10 20 00 clr %g2 4000f808: c4 00 60 08 ld [ %g1 + 8 ], %g2 status->state = the_period->state; 4000f80c: 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); 4000f810: c4 26 40 00 st %g2, [ %i1 ] status->state = the_period->state; if ( status->state == RATE_MONOTONIC_INACTIVE ) { 4000f814: 80 a0 60 00 cmp %g1, 0 4000f818: 12 80 00 1b bne 4000f884 4000f81c: 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; 4000f820: 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; 4000f824: c0 26 60 08 clr [ %i1 + 8 ] <== NOT EXECUTED status->since_last_period.tv_nsec = 0; 4000f828: 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; 4000f82c: c0 26 60 10 clr [ %i1 + 0x10 ] <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000f830: 03 10 00 7d sethi %hi(0x4001f400), %g1 4000f834: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 4001f5e0 <_Thread_Dispatch_disable_level> 4000f838: b0 10 20 00 clr %i0 4000f83c: 84 00 bf ff add %g2, -1, %g2 4000f840: c4 20 61 e0 st %g2, [ %g1 + 0x1e0 ] 4000f844: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 4000f848: 80 a0 e0 00 cmp %g3, 0 4000f84c: 02 80 00 0a be 4000f874 4000f850: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f854: 81 c7 e0 08 ret <== NOT EXECUTED 4000f858: 81 e8 00 00 restore <== NOT EXECUTED if ( !status ) return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 4000f85c: 82 18 60 02 xor %g1, 2, %g1 <== NOT EXECUTED 4000f860: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 4000f864: 84 60 20 00 subx %g0, 0, %g2 <== NOT EXECUTED 4000f868: b0 08 a0 15 and %g2, 0x15, %i0 <== NOT EXECUTED 4000f86c: 81 c7 e0 08 ret <== NOT EXECUTED 4000f870: 91 ee 20 04 restore %i0, 4, %o0 <== NOT EXECUTED _Thread_Dispatch(); 4000f874: 7f ff f1 8e call 4000beac <_Thread_Dispatch> 4000f878: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000f87c: 81 c7 e0 08 ret 4000f880: 81 e8 00 00 restore * This lets them share one single invocation of _TOD_Get_uptime(). */ #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) || \ defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) struct timespec uptime; _TOD_Get_uptime( &uptime ); 4000f884: a0 07 bf ec add %fp, -20, %l0 4000f888: 7f ff e9 13 call 40009cd4 <_TOD_Get_uptime> 4000f88c: 90 10 00 10 mov %l0, %o0 #endif #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS _Timespec_Subtract( 4000f890: 90 06 20 44 add %i0, 0x44, %o0 4000f894: 92 10 00 10 mov %l0, %o1 4000f898: 7f ff f6 40 call 4000d198 <_Timespec_Subtract> 4000f89c: 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( 4000f8a0: 92 10 00 10 mov %l0, %o1 4000f8a4: 94 06 60 10 add %i1, 0x10, %o2 4000f8a8: 11 10 00 7d sethi %hi(0x4001f400), %o0 4000f8ac: 7f ff f6 3b call 4000d198 <_Timespec_Subtract> 4000f8b0: 90 12 22 c4 or %o0, 0x2c4, %o0 ! 4001f6c4 <_Thread_Time_of_last_context_switch> 4000f8b4: 30 bf ff df b,a 4000f830 40007d38 : rtems_status_code rtems_rate_monotonic_period( Objects_Id id, rtems_interval length ) { 40007d38: 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 *) 40007d3c: 11 10 00 7d sethi %hi(0x4001f400), %o0 40007d40: 92 10 00 18 mov %i0, %o1 40007d44: 90 12 20 4c or %o0, 0x4c, %o0 40007d48: 40 00 0b 31 call 4000aa0c <_Objects_Get> 40007d4c: 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 ) { 40007d50: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007d54: 80 a0 60 00 cmp %g1, 0 40007d58: 12 80 00 15 bne 40007dac 40007d5c: a2 10 00 08 mov %o0, %l1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Thread_Is_executing( the_period->owner ) ) { 40007d60: 25 10 00 7d sethi %hi(0x4001f400), %l2 40007d64: c4 02 20 50 ld [ %o0 + 0x50 ], %g2 40007d68: c2 04 a2 bc ld [ %l2 + 0x2bc ], %g1 40007d6c: 80 a0 80 01 cmp %g2, %g1 40007d70: 02 80 00 14 be 40007dc0 40007d74: 80 a6 60 00 cmp %i1, 0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007d78: 03 10 00 7d sethi %hi(0x4001f400), %g1 40007d7c: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 4001f5e0 <_Thread_Dispatch_disable_level> 40007d80: b0 10 20 17 mov 0x17, %i0 _Thread_Dispatch(); 40007d84: 84 00 bf ff add %g2, -1, %g2 40007d88: c4 20 61 e0 st %g2, [ %g1 + 0x1e0 ] 40007d8c: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 40007d90: 80 a0 e0 00 cmp %g3, 0 40007d94: 12 80 00 66 bne 40007f2c 40007d98: 01 00 00 00 nop 40007d9c: 40 00 10 44 call 4000beac <_Thread_Dispatch> 40007da0: 01 00 00 00 nop 40007da4: 81 c7 e0 08 ret 40007da8: 81 e8 00 00 restore rtems_status_code return_value; rtems_rate_monotonic_period_states local_state; ISR_Level level; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { 40007dac: 80 a0 60 02 cmp %g1, 2 40007db0: 02 bf ff fd be 40007da4 40007db4: b0 10 20 04 mov 4, %i0 break; } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007db8: 81 c7 e0 08 ret <== NOT EXECUTED 40007dbc: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED if ( !_Thread_Is_executing( the_period->owner ) ) { _Thread_Enable_dispatch(); return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { 40007dc0: 22 80 00 73 be,a 40007f8c 40007dc4: d0 02 20 38 ld [ %o0 + 0x38 ], %o0 } _Thread_Enable_dispatch(); return( return_value ); } _ISR_Disable( level ); 40007dc8: 7f ff eb 73 call 40002b94 40007dcc: 01 00 00 00 nop 40007dd0: a0 10 00 08 mov %o0, %l0 switch ( the_period->state ) { 40007dd4: e6 04 60 38 ld [ %l1 + 0x38 ], %l3 40007dd8: 80 a4 e0 02 cmp %l3, 2 40007ddc: 02 80 00 34 be 40007eac 40007de0: 80 a4 e0 04 cmp %l3, 4 40007de4: 02 80 00 54 be 40007f34 40007de8: 80 a4 e0 00 cmp %l3, 0 40007dec: 32 bf ff ee bne,a 40007da4 40007df0: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED /* * No need to update statistics -- there are not a period active */ _ISR_Enable( level ); 40007df4: 7f ff eb 6c call 40002ba4 40007df8: 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 ); 40007dfc: 40 00 07 b6 call 40009cd4 <_TOD_Get_uptime> 40007e00: 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; 40007e04: c2 07 bf ec ld [ %fp + -20 ], %g1 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007e08: c6 04 a2 bc ld [ %l2 + 0x2bc ], %g3 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS /* * Since the statistics didn't update the starting time, * we do it here. */ the_period->time_at_period = uptime; 40007e0c: c2 24 60 44 st %g1, [ %l1 + 0x44 ] 40007e10: 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( 40007e14: 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; 40007e18: c2 24 60 48 st %g1, [ %l1 + 0x48 ] #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007e1c: c4 00 e0 90 ld [ %g3 + 0x90 ], %g2 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40007e20: a0 07 bf e4 add %fp, -28, %l0 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007e24: c4 24 60 3c st %g2, [ %l1 + 0x3c ] 40007e28: c2 00 e0 94 ld [ %g3 + 0x94 ], %g1 _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40007e2c: 94 10 00 10 mov %l0, %o2 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS { struct timespec ran; the_period->owner_executed_at_period = 40007e30: c2 24 60 40 st %g1, [ %l1 + 0x40 ] _Thread_Executing->cpu_time_used; /* How much time time since last context switch */ _Timespec_Subtract( 40007e34: 11 10 00 7d sethi %hi(0x4001f400), %o0 40007e38: 40 00 14 d8 call 4000d198 <_Timespec_Subtract> 40007e3c: 90 12 22 c4 or %o0, 0x2c4, %o0 ! 4001f6c4 <_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 ); 40007e40: 92 10 00 10 mov %l0, %o1 40007e44: 40 00 14 72 call 4000d00c <_Timespec_Add_to> 40007e48: 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; 40007e4c: 84 10 20 02 mov 2, %g2 Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40007e50: 03 10 00 20 sethi %hi(0x40008000), %g1 40007e54: 82 10 63 60 or %g1, 0x360, %g1 ! 40008360 <_Rate_monotonic_Timeout> the_watchdog->id = id; 40007e58: f0 24 60 30 st %i0, [ %l1 + 0x30 ] Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40007e5c: f2 24 60 1c st %i1, [ %l1 + 0x1c ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40007e60: c0 24 60 18 clr [ %l1 + 0x18 ] the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40007e64: c0 24 60 34 clr [ %l1 + 0x34 ] _Rate_monotonic_Timeout, id, NULL ); the_period->next_length = length; 40007e68: f2 24 60 4c st %i1, [ %l1 + 0x4c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007e6c: 92 04 60 10 add %l1, 0x10, %o1 #else the_period->owner_ticks_executed_at_period = _Thread_Executing->ticks_executed; #endif the_period->state = RATE_MONOTONIC_ACTIVE; 40007e70: c4 24 60 38 st %g2, [ %l1 + 0x38 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40007e74: c2 24 60 2c st %g1, [ %l1 + 0x2c ] ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007e78: 11 10 00 7d sethi %hi(0x4001f400), %o0 40007e7c: 40 00 15 92 call 4000d4c4 <_Watchdog_Insert> 40007e80: 90 12 22 dc or %o0, 0x2dc, %o0 ! 4001f6dc <_Watchdog_Ticks_chain> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007e84: 05 10 00 7d sethi %hi(0x4001f400), %g2 40007e88: c2 00 a1 e0 ld [ %g2 + 0x1e0 ], %g1 ! 4001f5e0 <_Thread_Dispatch_disable_level> 40007e8c: 82 00 7f ff add %g1, -1, %g1 40007e90: c2 20 a1 e0 st %g1, [ %g2 + 0x1e0 ] 40007e94: c6 00 a1 e0 ld [ %g2 + 0x1e0 ], %g3 40007e98: 80 a0 e0 00 cmp %g3, 0 40007e9c: 02 80 00 22 be 40007f24 40007ea0: 01 00 00 00 nop _Thread_Dispatch(); 40007ea4: 81 c7 e0 08 ret <== NOT EXECUTED 40007ea8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED case RATE_MONOTONIC_ACTIVE: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 40007eac: 7f ff ff 43 call 40007bb8 <_Rate_monotonic_Update_statistics> 40007eb0: 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; 40007eb4: 82 10 20 01 mov 1, %g1 the_period->next_length = length; 40007eb8: 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; 40007ebc: c2 24 60 38 st %g1, [ %l1 + 0x38 ] the_period->next_length = length; _ISR_Enable( level ); 40007ec0: 7f ff eb 39 call 40002ba4 40007ec4: 90 10 00 10 mov %l0, %o0 _Thread_Executing->Wait.id = the_period->Object.id; 40007ec8: c2 04 a2 bc ld [ %l2 + 0x2bc ], %g1 40007ecc: c4 04 60 08 ld [ %l1 + 8 ], %g2 _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 40007ed0: 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; 40007ed4: c4 20 60 20 st %g2, [ %g1 + 0x20 ] _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 40007ed8: 40 00 13 1b call 4000cb44 <_Thread_Set_state> 40007edc: 13 00 00 10 sethi %hi(0x4000), %o1 /* * Did the watchdog timer expire while we were actually blocking * on it? */ _ISR_Disable( level ); 40007ee0: 7f ff eb 2d call 40002b94 40007ee4: 01 00 00 00 nop local_state = the_period->state; 40007ee8: e0 04 60 38 ld [ %l1 + 0x38 ], %l0 the_period->state = RATE_MONOTONIC_ACTIVE; 40007eec: e6 24 60 38 st %l3, [ %l1 + 0x38 ] _ISR_Enable( level ); 40007ef0: 7f ff eb 2d call 40002ba4 40007ef4: 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 ) 40007ef8: 80 a4 20 03 cmp %l0, 3 40007efc: 02 80 00 32 be 40007fc4 40007f00: d0 04 a2 bc ld [ %l2 + 0x2bc ], %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007f04: 03 10 00 7d sethi %hi(0x4001f400), %g1 40007f08: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 4001f5e0 <_Thread_Dispatch_disable_level> 40007f0c: 84 00 bf ff add %g2, -1, %g2 40007f10: c4 20 61 e0 st %g2, [ %g1 + 0x1e0 ] 40007f14: c6 00 61 e0 ld [ %g1 + 0x1e0 ], %g3 40007f18: 80 a0 e0 00 cmp %g3, 0 40007f1c: 12 bf ff e2 bne 40007ea4 40007f20: 01 00 00 00 nop _Thread_Dispatch(); 40007f24: 40 00 0f e2 call 4000beac <_Thread_Dispatch> 40007f28: b0 10 20 00 clr %i0 ! 0 40007f2c: 81 c7 e0 08 ret 40007f30: 81 e8 00 00 restore case RATE_MONOTONIC_EXPIRED: /* * Update statistics from the concluding period */ _Rate_monotonic_Update_statistics( the_period ); 40007f34: 7f ff ff 21 call 40007bb8 <_Rate_monotonic_Update_statistics> 40007f38: 90 10 00 11 mov %l1, %o0 _ISR_Enable( level ); 40007f3c: 7f ff eb 1a call 40002ba4 40007f40: 90 10 00 10 mov %l0, %o0 the_period->state = RATE_MONOTONIC_ACTIVE; 40007f44: 82 10 20 02 mov 2, %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40007f48: f2 24 60 1c st %i1, [ %l1 + 0x1c ] the_period->next_length = length; 40007f4c: f2 24 60 4c st %i1, [ %l1 + 0x4c ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40007f50: 92 04 60 10 add %l1, 0x10, %o1 */ _Rate_monotonic_Update_statistics( the_period ); _ISR_Enable( level ); the_period->state = RATE_MONOTONIC_ACTIVE; 40007f54: c2 24 60 38 st %g1, [ %l1 + 0x38 ] 40007f58: 11 10 00 7d sethi %hi(0x4001f400), %o0 40007f5c: 40 00 15 5a call 4000d4c4 <_Watchdog_Insert> 40007f60: 90 12 22 dc or %o0, 0x2dc, %o0 ! 4001f6dc <_Watchdog_Ticks_chain> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007f64: 07 10 00 7d sethi %hi(0x4001f400), %g3 40007f68: c2 00 e1 e0 ld [ %g3 + 0x1e0 ], %g1 ! 4001f5e0 <_Thread_Dispatch_disable_level> 40007f6c: b0 10 20 06 mov 6, %i0 40007f70: 82 00 7f ff add %g1, -1, %g1 40007f74: c2 20 e1 e0 st %g1, [ %g3 + 0x1e0 ] 40007f78: c4 00 e1 e0 ld [ %g3 + 0x1e0 ], %g2 40007f7c: 80 a0 a0 00 cmp %g2, 0 40007f80: 02 bf ff 87 be 40007d9c 40007f84: 01 00 00 00 nop 40007f88: 30 bf ff e9 b,a 40007f2c <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { switch ( the_period->state ) { 40007f8c: 80 a2 20 02 cmp %o0, 2 40007f90: 02 80 00 09 be 40007fb4 40007f94: b0 10 20 00 clr %i0 40007f98: 80 a2 20 04 cmp %o0, 4 40007f9c: 02 80 00 06 be 40007fb4 40007fa0: b0 10 20 06 mov 6, %i0 40007fa4: 80 a2 20 00 cmp %o0, 0 40007fa8: 02 80 00 03 be 40007fb4 40007fac: b0 10 20 0b mov 0xb, %i0 40007fb0: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40007fb4: 03 10 00 7d sethi %hi(0x4001f400), %g1 40007fb8: c4 00 61 e0 ld [ %g1 + 0x1e0 ], %g2 ! 4001f5e0 <_Thread_Dispatch_disable_level> 40007fbc: 10 bf ff 73 b 40007d88 40007fc0: 84 00 bf ff add %g2, -1, %g2 * If it did, then we want to unblock ourself and continue as * if nothing happen. The period was reset in the timeout routine. */ if ( local_state == RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING ) _Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD ); 40007fc4: 40 00 0f 05 call 4000bbd8 <_Thread_Clear_state> <== NOT EXECUTED 40007fc8: 13 00 00 10 sethi %hi(0x4000), %o1 <== NOT EXECUTED 40007fcc: 30 bf ff ce b,a 40007f04 <== NOT EXECUTED 40007fd0 : */ void rtems_rate_monotonic_report_statistics_with_plugin( void *context, rtems_printk_plugin_t print ) { 40007fd0: 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 ) 40007fd4: 80 a6 60 00 cmp %i1, 0 40007fd8: 02 80 00 4e be 40008110 40007fdc: 90 10 00 18 mov %i0, %o0 return; (*print)( context, "Period information by period\n" ); 40007fe0: 13 10 00 73 sethi %hi(0x4001cc00), %o1 40007fe4: 9f c6 40 00 call %i1 40007fe8: 92 12 62 28 or %o1, 0x228, %o1 ! 4001ce28 #if defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) (*print)( context, "--- CPU times are in seconds ---\n" ); 40007fec: 90 10 00 18 mov %i0, %o0 40007ff0: 13 10 00 73 sethi %hi(0x4001cc00), %o1 40007ff4: 9f c6 40 00 call %i1 40007ff8: 92 12 62 48 or %o1, 0x248, %o1 ! 4001ce48 #endif #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) (*print)( context, "--- Wall times are in seconds ---\n" ); 40007ffc: 90 10 00 18 mov %i0, %o0 40008000: 13 10 00 73 sethi %hi(0x4001cc00), %o1 40008004: 9f c6 40 00 call %i1 40008008: 92 12 62 70 or %o1, 0x270, %o1 ! 4001ce70 Be sure to test the various cases. (*print)( context,"\ 1234567890123456789012345678901234567890123456789012345678901234567890123456789\ \n"); */ (*print)( context, " ID OWNER COUNT MISSED " 4000800c: 90 10 00 18 mov %i0, %o0 40008010: 13 10 00 73 sethi %hi(0x4001cc00), %o1 40008014: 9f c6 40 00 call %i1 40008018: 92 12 62 98 or %o1, 0x298, %o1 ! 4001ce98 #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS " " #endif " WALL TIME\n" ); (*print)( context, " " 4000801c: 90 10 00 18 mov %i0, %o0 40008020: 13 10 00 73 sethi %hi(0x4001cc00), %o1 40008024: 9f c6 40 00 call %i1 40008028: 92 12 62 e8 or %o1, 0x2e8, %o1 ! 4001cee8 /* * 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 ; 4000802c: 03 10 00 7d sethi %hi(0x4001f400), %g1 40008030: a6 10 60 4c or %g1, 0x4c, %l3 ! 4001f44c <_Rate_monotonic_Information> 40008034: e4 04 e0 08 ld [ %l3 + 8 ], %l2 id <= _Rate_monotonic_Information.maximum_id ; 40008038: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 4000803c: 80 a4 80 01 cmp %l2, %g1 40008040: 18 80 00 34 bgu 40008110 40008044: 03 10 00 73 sethi %hi(0x4001cc00), %g1 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { (*print)( context, "\n" ); 40008048: 05 10 00 73 sethi %hi(0x4001cc00), %g2 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 4000804c: b6 10 63 38 or %g1, 0x338, %i3 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { (*print)( context, "\n" ); 40008050: b8 10 a2 68 or %g2, 0x268, %i4 40008054: a8 07 bf 98 add %fp, -104, %l4 status = rtems_rate_monotonic_get_statistics( id, &the_stats ); if ( status != RTEMS_SUCCESSFUL ) continue; /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); 40008058: aa 07 bf d0 add %fp, -48, %l5 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 4000805c: ba 07 bf b0 add %fp, -80, %i5 40008060: ac 07 bf e8 add %fp, -24, %l6 * print Wall time part of statistics */ { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS struct timespec wall_average; _Timespec_Divide_by_integer( 40008064: b4 07 bf c8 add %fp, -56, %i2 40008068: 10 80 00 06 b 40008080 4000806c: ae 07 bf f3 add %fp, -13, %l7 * Cycle through all possible ids and try to report on each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; id++ ) { 40008070: 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 ; 40008074: 80 a0 40 12 cmp %g1, %l2 40008078: 0a 80 00 26 bcs 40008110 4000807c: 01 00 00 00 nop id++ ) { status = rtems_rate_monotonic_get_statistics( id, &the_stats ); 40008080: 90 10 00 12 mov %l2, %o0 40008084: 40 00 1d aa call 4000f72c 40008088: 92 10 00 14 mov %l4, %o1 if ( status != RTEMS_SUCCESSFUL ) 4000808c: 80 a2 20 00 cmp %o0, 0 40008090: 32 bf ff f8 bne,a 40008070 40008094: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 continue; /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); 40008098: 92 10 00 15 mov %l5, %o1 4000809c: 40 00 1d ca call 4000f7c4 400080a0: 90 10 00 12 mov %l2, %o0 if ( status != RTEMS_SUCCESSFUL ) 400080a4: 80 a2 20 00 cmp %o0, 0 400080a8: 32 bf ff f2 bne,a 40008070 400080ac: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 <== NOT EXECUTED continue; name[ 0 ] = '\0'; if ( the_status.owner ) { 400080b0: d0 07 bf d0 ld [ %fp + -48 ], %o0 /* If the above passed, so should this but check it anyway */ status = rtems_rate_monotonic_get_status( id, &the_status ); if ( status != RTEMS_SUCCESSFUL ) continue; name[ 0 ] = '\0'; 400080b4: c0 2f bf f3 clrb [ %fp + -13 ] if ( the_status.owner ) { 400080b8: 80 a2 20 00 cmp %o0, 0 400080bc: 12 80 00 4b bne 400081e8 400080c0: a0 10 00 17 mov %l7, %l0 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 400080c4: d8 1f bf 98 ldd [ %fp + -104 ], %o4 <== NOT EXECUTED 400080c8: 94 10 00 12 mov %l2, %o2 400080cc: 92 10 00 1b mov %i3, %o1 400080d0: 96 10 00 10 mov %l0, %o3 400080d4: 9f c6 40 00 call %i1 400080d8: 90 10 00 18 mov %i0, %o0 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 400080dc: c2 07 bf 98 ld [ %fp + -104 ], %g1 */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 400080e0: 94 10 00 16 mov %l6, %o2 400080e4: 90 10 00 1d mov %i5, %o0 /* * If the count is zero, don't print statistics */ if (the_stats.count == 0) { 400080e8: 80 a0 60 00 cmp %g1, 0 400080ec: 12 80 00 0b bne 40008118 400080f0: 92 10 00 1c mov %i4, %o1 (*print)( context, "\n" ); 400080f4: 9f c6 40 00 call %i1 400080f8: 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 ; 400080fc: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 id++ ) { 40008100: 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 ; 40008104: 80 a0 40 12 cmp %g1, %l2 40008108: 1a bf ff df bcc 40008084 4000810c: 90 10 00 12 mov %l2, %o0 40008110: 81 c7 e0 08 ret 40008114: 81 e8 00 00 restore */ { #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS struct timespec cpu_average; _Timespec_Divide_by_integer( 40008118: 40 00 13 d7 call 4000d074 <_Timespec_Divide_by_integer> 4000811c: 92 10 00 01 mov %g1, %o1 &the_stats.total_cpu_time, the_stats.count, &cpu_average ); (*print)( context, 40008120: d0 07 bf a4 ld [ %fp + -92 ], %o0 40008124: 40 00 46 a2 call 40019bac <.div> 40008128: 92 10 23 e8 mov 0x3e8, %o1 4000812c: a2 10 00 08 mov %o0, %l1 40008130: d0 07 bf ac ld [ %fp + -84 ], %o0 40008134: 40 00 46 9e call 40019bac <.div> 40008138: 92 10 23 e8 mov 0x3e8, %o1 4000813c: c2 07 bf e8 ld [ %fp + -24 ], %g1 40008140: a0 10 00 08 mov %o0, %l0 40008144: d0 07 bf ec ld [ %fp + -20 ], %o0 40008148: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 4000814c: 40 00 46 98 call 40019bac <.div> 40008150: 92 10 23 e8 mov 0x3e8, %o1 40008154: d8 07 bf a8 ld [ %fp + -88 ], %o4 40008158: d4 07 bf a0 ld [ %fp + -96 ], %o2 4000815c: 96 10 00 11 mov %l1, %o3 40008160: 9a 10 00 10 mov %l0, %o5 40008164: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 40008168: 13 10 00 73 sethi %hi(0x4001cc00), %o1 4000816c: 90 10 00 18 mov %i0, %o0 40008170: 9f c6 40 00 call %i1 40008174: 92 12 63 50 or %o1, 0x350, %o1 * print Wall time part of statistics */ { #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS struct timespec wall_average; _Timespec_Divide_by_integer( 40008178: d2 07 bf 98 ld [ %fp + -104 ], %o1 4000817c: 94 10 00 16 mov %l6, %o2 40008180: 40 00 13 bd call 4000d074 <_Timespec_Divide_by_integer> 40008184: 90 10 00 1a mov %i2, %o0 &the_stats.total_wall_time, the_stats.count, &wall_average ); (*print)( context, 40008188: d0 07 bf bc ld [ %fp + -68 ], %o0 4000818c: 40 00 46 88 call 40019bac <.div> 40008190: 92 10 23 e8 mov 0x3e8, %o1 40008194: a2 10 00 08 mov %o0, %l1 40008198: d0 07 bf c4 ld [ %fp + -60 ], %o0 4000819c: 40 00 46 84 call 40019bac <.div> 400081a0: 92 10 23 e8 mov 0x3e8, %o1 400081a4: c2 07 bf e8 ld [ %fp + -24 ], %g1 400081a8: a0 10 00 08 mov %o0, %l0 400081ac: d0 07 bf ec ld [ %fp + -20 ], %o0 400081b0: c2 23 a0 5c st %g1, [ %sp + 0x5c ] 400081b4: 40 00 46 7e call 40019bac <.div> 400081b8: 92 10 23 e8 mov 0x3e8, %o1 400081bc: d4 07 bf b8 ld [ %fp + -72 ], %o2 400081c0: d8 07 bf c0 ld [ %fp + -64 ], %o4 400081c4: d0 23 a0 60 st %o0, [ %sp + 0x60 ] 400081c8: 96 10 00 11 mov %l1, %o3 400081cc: 9a 10 00 10 mov %l0, %o5 400081d0: 90 10 00 18 mov %i0, %o0 400081d4: 13 10 00 73 sethi %hi(0x4001cc00), %o1 400081d8: 9f c6 40 00 call %i1 400081dc: 92 12 63 70 or %o1, 0x370, %o1 ! 4001cf70 /* * 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 ; 400081e0: 10 bf ff a4 b 40008070 400081e4: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 continue; name[ 0 ] = '\0'; if ( the_status.owner ) { rtems_object_get_name( the_status.owner, sizeof(name), name ); 400081e8: 92 10 20 05 mov 5, %o1 400081ec: 40 00 00 8f call 40008428 400081f0: 94 10 00 17 mov %l7, %o2 /* * Print part of report line that is not dependent on granularity */ (*print)( context, 400081f4: 10 bf ff b5 b 400080c8 400081f8: d8 1f bf 98 ldd [ %fp + -104 ], %o4 40008218 : /* * rtems_rate_monotonic_reset_all_statistics */ void rtems_rate_monotonic_reset_all_statistics( void ) { 40008218: 9d e3 bf 98 save %sp, -104, %sp rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000821c: 25 10 00 7d sethi %hi(0x4001f400), %l2 40008220: c2 04 a1 e0 ld [ %l2 + 0x1e0 ], %g1 ! 4001f5e0 <_Thread_Dispatch_disable_level> 40008224: 82 00 60 01 inc %g1 40008228: c2 24 a1 e0 st %g1, [ %l2 + 0x1e0 ] /* * 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 ; 4000822c: 03 10 00 7d sethi %hi(0x4001f400), %g1 40008230: a2 10 60 4c or %g1, 0x4c, %l1 ! 4001f44c <_Rate_monotonic_Information> 40008234: e0 04 60 08 ld [ %l1 + 8 ], %l0 id <= _Rate_monotonic_Information.maximum_id ; 40008238: c2 04 60 0c ld [ %l1 + 0xc ], %g1 4000823c: 80 a4 00 01 cmp %l0, %g1 40008240: 18 80 00 09 bgu 40008264 40008244: 01 00 00 00 nop id++ ) { status = rtems_rate_monotonic_reset_statistics( id ); 40008248: 40 00 00 13 call 40008294 4000824c: 90 10 00 10 mov %l0, %o0 /* * Cycle through all possible ids and try to reset each one. If it * is a period that is inactive, we just get an error back. No big deal. */ for ( id=_Rate_monotonic_Information.minimum_id ; id <= _Rate_monotonic_Information.maximum_id ; 40008250: c2 04 60 0c ld [ %l1 + 0xc ], %g1 id++ ) { 40008254: 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 ; 40008258: 80 a0 40 10 cmp %g1, %l0 4000825c: 1a bf ff fb bcc 40008248 40008260: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008264: c2 04 a1 e0 ld [ %l2 + 0x1e0 ], %g1 40008268: 82 00 7f ff add %g1, -1, %g1 4000826c: c2 24 a1 e0 st %g1, [ %l2 + 0x1e0 ] 40008270: c4 04 a1 e0 ld [ %l2 + 0x1e0 ], %g2 40008274: 80 a0 a0 00 cmp %g2, 0 40008278: 02 80 00 04 be 40008288 4000827c: 01 00 00 00 nop 40008280: 81 c7 e0 08 ret <== NOT EXECUTED 40008284: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40008288: 40 00 0f 09 call 4000beac <_Thread_Dispatch> 4000828c: 81 e8 00 00 restore 40008290: 01 00 00 00 nop 4001127c : uint32_t length, uint32_t page_size, rtems_attribute attribute_set, Objects_Id *id ) { 4001127c: 9d e3 bf 98 save %sp, -104, %sp Region_Control *the_region; if ( !rtems_is_name_valid( name ) ) 40011280: a8 96 20 00 orcc %i0, 0, %l4 40011284: 02 80 00 58 be 400113e4 40011288: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !starting_address ) 4001128c: 80 a6 60 00 cmp %i1, 0 40011290: 02 80 00 06 be 400112a8 40011294: 80 a7 60 00 cmp %i5, 0 return RTEMS_INVALID_ADDRESS; if ( !id ) 40011298: 02 80 00 04 be 400112a8 4001129c: 80 8e 60 07 btst 7, %i1 return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( starting_address ) ) 400112a0: 02 80 00 04 be 400112b0 400112a4: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 400112a8: 81 c7 e0 08 ret 400112ac: 91 e8 20 09 restore %g0, 9, %o0 return RTEMS_INVALID_ADDRESS; _RTEMS_Lock_allocator(); /* to prevent deletion */ 400112b0: 7f ff e6 8f call 4000acec 400112b4: 01 00 00 00 nop 400112b8: a2 10 00 08 mov %o0, %l1 400112bc: 25 10 00 d1 sethi %hi(0x40034400), %l2 400112c0: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 400112c4: 80 a0 60 00 cmp %g1, 0 400112c8: 02 80 00 0b be 400112f4 400112cc: 03 10 00 d2 sethi %hi(0x40034800), %g1 400112d0: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 400112d4: c4 00 61 40 ld [ %g1 + 0x140 ], %g2 ! 40034940 <_System_state_Current> <== NOT EXECUTED 400112d8: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 400112dc: 08 80 00 05 bleu 400112f0 <== NOT EXECUTED 400112e0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400112e4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400112e8: 40 00 13 57 call 40016044 <_Internal_error_Occurred> <== NOT EXECUTED 400112ec: 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; 400112f0: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 400112f4: 27 10 00 d2 sethi %hi(0x40034800), %l3 400112f8: c6 00 60 3c ld [ %g1 + 0x3c ], %g3 400112fc: e0 04 e0 34 ld [ %l3 + 0x34 ], %l0 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40011300: c0 20 e0 34 clr [ %g3 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40011304: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40011308: 80 a0 60 00 cmp %g1, 0 4001130c: 22 80 00 12 be,a 40011354 40011310: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40011314: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40011318: c2 00 e0 08 ld [ %g3 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 4001131c: c4 04 20 58 ld [ %l0 + 0x58 ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40011320: 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; 40011324: 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; 40011328: c6 24 20 6c st %g3, [ %l0 + 0x6c ] the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 4001132c: 80 a0 a0 02 cmp %g2, 2 40011330: 12 80 00 2f bne 400113ec 40011334: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40011338: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 4001133c: 82 00 60 01 inc %g1 40011340: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 40011344: 7f ff e6 6e call 4000acfc 40011348: 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 ); 4001134c: 10 80 00 0f b 40011388 40011350: 23 10 00 d1 sethi %hi(0x40034400), %l1 /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40011354: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40011358: 32 80 00 48 bne,a 40011478 <== NOT EXECUTED 4001135c: c4 04 20 08 ld [ %l0 + 8 ], %g2 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40011360: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40011364: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40011368: 12 80 00 41 bne 4001146c <== NOT EXECUTED 4001136c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40011370: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40011374: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011378: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 4001137c: 7f ff e6 60 call 4000acfc <== NOT EXECUTED 40011380: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40011384: 23 10 00 d1 sethi %hi(0x40034400), %l1 <== NOT EXECUTED 40011388: 40 00 13 5c call 400160f8 <_Objects_Allocate> 4001138c: 90 14 61 78 or %l1, 0x178, %o0 ! 40034578 <_Region_Information> the_region = _Region_Allocate(); if ( !the_region ) { 40011390: a0 92 20 00 orcc %o0, 0, %l0 40011394: 32 80 00 4e bne,a 400114cc 40011398: 90 04 20 68 add %l0, 0x68, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001139c: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400113a0: 82 00 60 01 inc %g1 400113a4: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] _RTEMS_Unlock_allocator(); 400113a8: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 400113ac: 94 10 20 00 clr %o2 400113b0: d2 02 20 08 ld [ %o0 + 8 ], %o1 400113b4: 40 00 10 ab call 40015660 <_CORE_mutex_Surrender> 400113b8: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400113bc: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400113c0: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 400113c4: 82 00 7f ff add %g1, -1, %g1 400113c8: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] 400113cc: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 400113d0: 80 a0 a0 00 cmp %g2, 0 400113d4: 12 80 00 04 bne 400113e4 400113d8: 01 00 00 00 nop 400113dc: 40 00 19 d4 call 40017b2c <_Thread_Dispatch> 400113e0: 01 00 00 00 nop 400113e4: 81 c7 e0 08 ret 400113e8: 81 e8 00 00 restore if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400113ec: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 400113f0: 12 bf ff d5 bne 40011344 <== NOT EXECUTED 400113f4: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400113f8: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; 400113fc: c4 00 e0 14 ld [ %g3 + 0x14 ], %g2 <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40011400: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011404: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40011408: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 <== NOT EXECUTED current = executing->current_priority; if ( current == ceiling ) { 4001140c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40011410: 02 80 00 4e be 40011548 <== NOT EXECUTED 40011414: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40011418: 1a 80 00 42 bcc 40011520 <== NOT EXECUTED 4001141c: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011420: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 40011424: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011428: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 4001142c: 7f ff e6 34 call 4000acfc <== NOT EXECUTED 40011430: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 40011434: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40011438: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 4001143c: 40 00 18 98 call 4001769c <_Thread_Change_priority> <== NOT EXECUTED 40011440: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011444: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 40011448: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001144c: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED 40011450: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 <== NOT EXECUTED 40011454: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40011458: 12 bf ff cc bne 40011388 <== NOT EXECUTED 4001145c: 23 10 00 d1 sethi %hi(0x40034400), %l1 <== NOT EXECUTED _Thread_Dispatch(); 40011460: 40 00 19 b3 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 40011464: 01 00 00 00 nop <== NOT EXECUTED 40011468: 30 bf ff c8 b,a 40011388 <== NOT EXECUTED * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4001146c: 02 80 00 13 be 400114b8 <== NOT EXECUTED 40011470: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !_Addresses_Is_aligned( starting_address ) ) return RTEMS_INVALID_ADDRESS; _RTEMS_Lock_allocator(); /* to prevent deletion */ 40011474: c4 04 20 08 ld [ %l0 + 8 ], %g2 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011478: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 4001147c: c4 20 e0 20 st %g2, [ %g3 + 0x20 ] <== NOT EXECUTED 40011480: 82 00 60 01 inc %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 40011484: 84 10 20 01 mov 1, %g2 <== NOT EXECUTED 40011488: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED 4001148c: c4 24 20 40 st %g2, [ %l0 + 0x40 ] <== NOT EXECUTED 40011490: 82 04 20 10 add %l0, 0x10, %g1 <== NOT EXECUTED 40011494: c2 20 e0 44 st %g1, [ %g3 + 0x44 ] <== NOT EXECUTED 40011498: 7f ff e6 19 call 4000acfc <== NOT EXECUTED 4001149c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400114a0: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 400114a4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400114a8: 40 00 10 4a call 400155d0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 400114ac: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 400114b0: 10 bf ff b6 b 40011388 <== NOT EXECUTED 400114b4: 23 10 00 d1 sethi %hi(0x40034400), %l1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 400114b8: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400114bc: 7f ff e6 10 call 4000acfc <== NOT EXECUTED 400114c0: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400114c4: 10 bf ff b1 b 40011388 <== NOT EXECUTED 400114c8: 23 10 00 d1 sethi %hi(0x40034400), %l1 <== NOT EXECUTED if ( !the_region ) { _RTEMS_Unlock_allocator(); return RTEMS_TOO_MANY; } the_region->maximum_segment_size = 400114cc: 92 10 00 19 mov %i1, %o1 400114d0: 94 10 00 1a mov %i2, %o2 400114d4: 40 00 12 8f call 40015f10 <_Heap_Initialize> 400114d8: 96 10 00 1b mov %i3, %o3 _Heap_Initialize(&the_region->Memory, starting_address, length, page_size); if ( !the_region->maximum_segment_size ) { 400114dc: 80 a2 20 00 cmp %o0, 0 400114e0: 12 80 00 1e bne 40011558 400114e4: 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 ); 400114e8: 90 14 61 78 or %l1, 0x178, %o0 400114ec: 40 00 14 11 call 40016530 <_Objects_Free> 400114f0: 92 10 00 10 mov %l0, %o1 400114f4: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400114f8: 82 00 60 01 inc %g1 400114fc: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 40011500: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 40011504: 94 10 20 00 clr %o2 40011508: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001150c: 40 00 10 55 call 40015660 <_CORE_mutex_Surrender> 40011510: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011514: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 40011518: 10 bf ff ab b 400113c4 4001151c: b0 10 20 08 mov 8, %i0 ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40011520: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40011524: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40011528: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 4001152c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 40011530: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011534: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40011538: 7f ff e5 f1 call 4000acfc <== NOT EXECUTED 4001153c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED * the inactive chain of free region control blocks. */ RTEMS_INLINE_ROUTINE Region_Control *_Region_Allocate( void ) { return (Region_Control *) _Objects_Allocate( &_Region_Information ); 40011540: 10 bf ff 92 b 40011388 <== NOT EXECUTED 40011544: 23 10 00 d1 sethi %hi(0x40034400), %l1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40011548: 7f ff e5 ed call 4000acfc <== NOT EXECUTED 4001154c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40011550: 10 bf ff 8e b 40011388 <== NOT EXECUTED 40011554: 23 10 00 d1 sethi %hi(0x40034400), %l1 <== NOT EXECUTED the_region->length = length; the_region->page_size = page_size; the_region->attribute_set = attribute_set; the_region->number_of_used_blocks = 0; _Thread_queue_Initialize( 40011558: 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; 4001155c: f2 24 20 50 st %i1, [ %l0 + 0x50 ] the_region->length = length; 40011560: f4 24 20 54 st %i2, [ %l0 + 0x54 ] the_region->page_size = page_size; 40011564: f6 24 20 58 st %i3, [ %l0 + 0x58 ] the_region->attribute_set = attribute_set; 40011568: f8 24 20 60 st %i4, [ %l0 + 0x60 ] the_region->number_of_used_blocks = 0; 4001156c: c0 24 20 64 clr [ %l0 + 0x64 ] _Thread_queue_Initialize( 40011570: 93 37 20 02 srl %i4, 2, %o1 40011574: 94 10 20 40 mov 0x40, %o2 40011578: 92 0a 60 01 and %o1, 1, %o1 4001157c: 40 00 1b ea call 40018524 <_Thread_queue_Initialize> 40011580: 96 10 20 06 mov 6, %o3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40011584: 90 14 61 78 or %l1, 0x178, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40011588: c6 04 20 08 ld [ %l0 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 4001158c: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 40011590: 03 00 00 3f sethi %hi(0xfc00), %g1 40011594: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40011598: 82 08 c0 01 and %g3, %g1, %g1 4001159c: 80 a0 40 02 cmp %g1, %g2 400115a0: 38 80 00 06 bgu,a 400115b8 400115a4: c6 27 40 00 st %g3, [ %i5 ] <== NOT EXECUTED information->local_table[ index ] = the_object; 400115a8: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 400115ac: 83 28 60 02 sll %g1, 2, %g1 400115b0: e0 20 80 01 st %l0, [ %g2 + %g1 ] &_Region_Information, &the_region->Object, (Objects_Name) name ); *id = the_region->Object.id; 400115b4: c6 27 40 00 st %g3, [ %i5 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400115b8: c2 04 a3 60 ld [ %l2 + 0x360 ], %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; 400115bc: e8 24 20 0c st %l4, [ %l0 + 0xc ] 400115c0: 82 00 60 01 inc %g1 400115c4: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] _RTEMS_Unlock_allocator(); 400115c8: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 400115cc: 94 10 20 00 clr %o2 400115d0: d2 02 20 08 ld [ %o0 + 8 ], %o1 400115d4: 40 00 10 23 call 40015660 <_CORE_mutex_Surrender> 400115d8: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400115dc: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400115e0: 10 bf ff 79 b 400113c4 400115e4: b0 10 20 00 clr %i0 400115e8 : */ rtems_status_code rtems_region_delete( Objects_Id id ) { 400115e8: 9d e3 bf 90 save %sp, -112, %sp register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); 400115ec: 7f ff e5 c0 call 4000acec 400115f0: 01 00 00 00 nop 400115f4: a2 10 00 08 mov %o0, %l1 400115f8: 25 10 00 d1 sethi %hi(0x40034400), %l2 400115fc: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 40011600: 80 a0 60 00 cmp %g1, 0 40011604: 02 80 00 0b be 40011630 40011608: 27 10 00 d2 sethi %hi(0x40034800), %l3 4001160c: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 40011610: c4 00 61 40 ld [ %g1 + 0x140 ], %g2 ! 40034940 <_System_state_Current> <== NOT EXECUTED 40011614: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40011618: 08 80 00 06 bleu 40011630 <== NOT EXECUTED 4001161c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40011620: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011624: 40 00 12 88 call 40016044 <_Internal_error_Occurred> <== NOT EXECUTED 40011628: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 4001162c: 27 10 00 d2 sethi %hi(0x40034800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40011630: 09 10 00 d2 sethi %hi(0x40034800), %g4 40011634: e0 04 e0 34 ld [ %l3 + 0x34 ], %l0 40011638: c4 01 20 3c ld [ %g4 + 0x3c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 4001163c: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40011640: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40011644: 80 a0 60 00 cmp %g1, 0 40011648: 22 80 00 36 be,a 40011720 4001164c: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40011650: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40011654: 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; 40011658: 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; 4001165c: 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; 40011660: 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; 40011664: 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 ) || 40011668: 80 a0 e0 02 cmp %g3, 2 4001166c: 12 80 00 56 bne 400117c4 40011670: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40011674: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011678: 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++; 4001167c: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011680: 02 80 00 7c be 40011870 40011684: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 40011688: 7f ff e5 9d call 4000acfc 4001168c: 90 10 00 11 mov %l1, %o0 RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40011690: 92 10 00 18 mov %i0, %o1 40011694: 21 10 00 d1 sethi %hi(0x40034400), %l0 40011698: 94 07 bf f4 add %fp, -12, %o2 4001169c: 40 00 13 e8 call 4001663c <_Objects_Get_no_protection> 400116a0: 90 14 21 78 or %l0, 0x178, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 400116a4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400116a8: 80 a0 60 01 cmp %g1, 1 400116ac: 02 80 00 33 be 40011778 400116b0: 92 10 00 08 mov %o0, %o1 400116b4: 80 a0 60 01 cmp %g1, 1 400116b8: 1a 80 00 5f bcc 40011834 400116bc: 80 a0 60 02 cmp %g1, 2 _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 5 ); if ( the_region->number_of_used_blocks == 0 ) { 400116c0: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 400116c4: 80 a0 60 00 cmp %g1, 0 400116c8: 22 80 00 99 be,a 4001192c 400116cc: 90 14 21 78 or %l0, 0x178, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400116d0: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400116d4: 82 00 60 01 inc %g1 400116d8: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _RTEMS_Unlock_allocator(); return RTEMS_SUCCESSFUL; } _RTEMS_Unlock_allocator(); 400116dc: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 400116e0: 94 10 20 00 clr %o2 400116e4: d2 02 20 08 ld [ %o0 + 8 ], %o1 400116e8: 40 00 0f de call 40015660 <_CORE_mutex_Surrender> 400116ec: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400116f0: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400116f4: b0 10 20 0c mov 0xc, %i0 400116f8: 82 00 7f ff add %g1, -1, %g1 400116fc: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] 40011700: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 40011704: 80 a0 a0 00 cmp %g2, 0 40011708: 12 80 00 49 bne 4001182c 4001170c: 01 00 00 00 nop _Thread_Dispatch(); 40011710: 40 00 19 07 call 40017b2c <_Thread_Dispatch> 40011714: 01 00 00 00 nop 40011718: 81 c7 e0 08 ret 4001171c: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40011720: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40011724: 12 80 00 30 bne 400117e4 <== NOT EXECUTED 40011728: c6 04 e0 34 ld [ %l3 + 0x34 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 4001172c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40011730: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40011734: 22 80 00 6a be,a 400118dc <== NOT EXECUTED 40011738: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 4001173c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011740: 12 80 00 29 bne 400117e4 <== NOT EXECUTED 40011744: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40011748: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4001174c: 7f ff e5 6c call 4000acfc <== NOT EXECUTED 40011750: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40011754: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40011758: 21 10 00 d1 sethi %hi(0x40034400), %l0 <== NOT EXECUTED 4001175c: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40011760: 40 00 13 b7 call 4001663c <_Objects_Get_no_protection> <== NOT EXECUTED 40011764: 90 14 21 78 or %l0, 0x178, %o0 <== NOT EXECUTED register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); switch ( location ) { 40011768: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001176c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011770: 12 bf ff d2 bne 400116b8 <== NOT EXECUTED 40011774: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011778: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 4001177c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011780: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40011784: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 40011788: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001178c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40011790: 40 00 0f b4 call 40015660 <_CORE_mutex_Surrender> <== NOT EXECUTED 40011794: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011798: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 4001179c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400117a0: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED 400117a4: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 <== NOT EXECUTED 400117a8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400117ac: 12 80 00 24 bne 4001183c <== NOT EXECUTED 400117b0: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 400117b4: 40 00 18 de call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 400117b8: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 400117bc: 81 c7 e0 08 ret <== NOT EXECUTED 400117c0: 81 e8 00 00 restore <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400117c4: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 400117c8: 12 bf ff b0 bne 40011688 <== NOT EXECUTED 400117cc: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400117d0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 400117d4: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400117d8: 02 80 00 26 be 40011870 <== NOT EXECUTED 400117dc: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 400117e0: 30 bf ff aa b,a 40011688 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400117e4: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED ) { register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); 400117e8: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 400117ec: c8 01 20 3c ld [ %g4 + 0x3c ], %g4 <== NOT EXECUTED 400117f0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400117f4: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 400117f8: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED 400117fc: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40011800: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40011804: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40011808: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 4001180c: 7f ff e5 3c call 4000acfc <== NOT EXECUTED 40011810: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40011814: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 40011818: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001181c: 40 00 0f 6d call 400155d0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40011820: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40011824: 10 bf ff 9c b 40011694 <== NOT EXECUTED 40011828: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED _RTEMS_Unlock_allocator(); return RTEMS_RESOURCE_IN_USE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001182c: 81 c7 e0 08 ret <== NOT EXECUTED 40011830: 81 e8 00 00 restore <== NOT EXECUTED register Region_Control *the_region; Objects_Locations location; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); switch ( location ) { 40011834: 02 80 00 04 be 40011844 40011838: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001183c: 81 c7 e0 08 ret <== NOT EXECUTED 40011840: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011844: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 40011848: 82 00 60 01 inc %g1 4001184c: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40011850: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 40011854: 94 10 20 00 clr %o2 40011858: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001185c: 40 00 0f 81 call 40015660 <_CORE_mutex_Surrender> 40011860: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011864: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 40011868: 10 bf ff a4 b 400116f8 4001186c: b0 10 20 04 mov 4, %i0 */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40011870: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40011874: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40011878: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4001187c: 02 80 00 28 be 4001191c <== NOT EXECUTED 40011880: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40011884: 1a 80 00 1c bcc 400118f4 <== NOT EXECUTED 40011888: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001188c: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 40011890: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011894: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40011898: 7f ff e5 19 call 4000acfc <== NOT EXECUTED 4001189c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED _Thread_Change_priority( 400118a0: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 400118a4: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 400118a8: 40 00 17 7d call 4001769c <_Thread_Change_priority> <== NOT EXECUTED 400118ac: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400118b0: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 <== NOT EXECUTED 400118b4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400118b8: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] <== NOT EXECUTED 400118bc: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 <== NOT EXECUTED 400118c0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400118c4: 32 bf ff 74 bne,a 40011694 <== NOT EXECUTED 400118c8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED _Thread_Dispatch(); 400118cc: 40 00 18 98 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 400118d0: 01 00 00 00 nop <== NOT EXECUTED 400118d4: 10 bf ff 70 b 40011694 <== NOT EXECUTED 400118d8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 400118dc: 82 00 60 01 inc %g1 <== NOT EXECUTED 400118e0: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 400118e4: 7f ff e5 06 call 4000acfc <== NOT EXECUTED 400118e8: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 400118ec: 10 bf ff 6a b 40011694 <== NOT EXECUTED 400118f0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 400118f4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 400118f8: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 400118fc: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40011900: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40011904: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011908: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4001190c: 7f ff e4 fc call 4000acfc <== NOT EXECUTED 40011910: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40011914: 10 bf ff 60 b 40011694 <== NOT EXECUTED 40011918: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4001191c: 7f ff e4 f8 call 4000acfc <== NOT EXECUTED 40011920: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40011924: 10 bf ff 5c b 40011694 <== NOT EXECUTED 40011928: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 4001192c: c2 02 60 08 ld [ %o1 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40011930: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40011934: 05 00 00 3f sethi %hi(0xfc00), %g2 40011938: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 4001193c: 82 08 40 02 and %g1, %g2, %g1 40011940: 80 a0 40 03 cmp %g1, %g3 40011944: 18 80 00 05 bgu 40011958 40011948: 01 00 00 00 nop information->local_table[ index ] = the_object; 4001194c: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40011950: 83 28 60 02 sll %g1, 2, %g1 40011954: c0 20 80 01 clr [ %g2 + %g1 ] RTEMS_INLINE_ROUTINE void _Region_Free ( Region_Control *the_region ) { _Objects_Free( &_Region_Information, &the_region->Object ); 40011958: 40 00 12 f6 call 40016530 <_Objects_Free> 4001195c: c0 22 60 0c clr [ %o1 + 0xc ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011960: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 40011964: 82 00 60 01 inc %g1 40011968: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 5 ); if ( the_region->number_of_used_blocks == 0 ) { _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _RTEMS_Unlock_allocator(); 4001196c: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 40011970: 94 10 20 00 clr %o2 40011974: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011978: 40 00 0f 3a call 40015660 <_CORE_mutex_Surrender> 4001197c: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011980: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 40011984: 10 bf ff 5d b 400116f8 40011988: b0 10 20 00 clr %i0 4001198c : rtems_status_code rtems_region_extend( Objects_Id id, void *starting_address, uint32_t length ) { 4001198c: 9d e3 bf 90 save %sp, -112, %sp 40011990: a8 10 00 18 mov %i0, %l4 Objects_Locations location; uint32_t amount_extended; Heap_Extend_status heap_status; rtems_status_code status; if ( !starting_address ) 40011994: 80 a6 60 00 cmp %i1, 0 40011998: 02 80 00 59 be 40011afc 4001199c: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ 400119a0: 7f ff e4 d3 call 4000acec 400119a4: 01 00 00 00 nop 400119a8: a4 10 00 08 mov %o0, %l2 400119ac: 23 10 00 d1 sethi %hi(0x40034400), %l1 400119b0: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 400119b4: 80 a0 60 00 cmp %g1, 0 400119b8: 02 80 00 0b be 400119e4 400119bc: 27 10 00 d2 sethi %hi(0x40034800), %l3 400119c0: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 400119c4: c4 00 61 40 ld [ %g1 + 0x140 ], %g2 ! 40034940 <_System_state_Current> <== NOT EXECUTED 400119c8: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 400119cc: 08 80 00 06 bleu 400119e4 <== NOT EXECUTED 400119d0: 90 10 20 00 clr %o0 <== NOT EXECUTED 400119d4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400119d8: 40 00 11 9b call 40016044 <_Internal_error_Occurred> <== NOT EXECUTED 400119dc: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 400119e0: 27 10 00 d2 sethi %hi(0x40034800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 400119e4: 09 10 00 d2 sethi %hi(0x40034800), %g4 400119e8: e0 04 e0 34 ld [ %l3 + 0x34 ], %l0 400119ec: c4 01 20 3c ld [ %g4 + 0x3c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 400119f0: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 400119f4: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 400119f8: 80 a0 60 00 cmp %g1, 0 400119fc: 22 80 00 42 be,a 40011b04 40011a00: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40011a04: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40011a08: 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; 40011a0c: 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; 40011a10: 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; 40011a14: 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; 40011a18: 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 ) || 40011a1c: 80 a0 e0 02 cmp %g3, 2 40011a20: 02 80 00 61 be 40011ba4 40011a24: c8 24 20 64 st %g4, [ %l0 + 0x64 ] 40011a28: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40011a2c: 22 80 00 60 be,a 40011bac <== NOT EXECUTED 40011a30: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 40011a34: 7f ff e4 b2 call 4000acfc 40011a38: 90 10 00 12 mov %l2, %o0 RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 40011a3c: 92 10 00 14 mov %l4, %o1 40011a40: 11 10 00 d1 sethi %hi(0x40034400), %o0 40011a44: 94 07 bf f4 add %fp, -12, %o2 40011a48: 40 00 12 fd call 4001663c <_Objects_Get_no_protection> 40011a4c: 90 12 21 78 or %o0, 0x178, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 40011a50: c2 07 bf f4 ld [ %fp + -12 ], %g1 40011a54: 80 a0 60 01 cmp %g1, 1 40011a58: 02 80 00 40 be 40011b58 40011a5c: a0 10 00 08 mov %o0, %l0 40011a60: 80 a0 60 01 cmp %g1, 1 40011a64: 1a 80 00 70 bcc 40011c24 40011a68: 80 a0 60 02 cmp %g1, 2 _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ID; case OBJECTS_LOCAL: heap_status = _Heap_Extend( 40011a6c: 92 10 00 19 mov %i1, %o1 40011a70: 94 10 00 1a mov %i2, %o2 40011a74: 90 02 20 68 add %o0, 0x68, %o0 40011a78: 96 07 bf f0 add %fp, -16, %o3 40011a7c: 40 00 10 3f call 40015b78 <_Heap_Extend> 40011a80: b0 10 20 09 mov 9, %i0 starting_address, length, &amount_extended ); switch ( heap_status ) { 40011a84: 80 a2 20 01 cmp %o0, 1 40011a88: 02 80 00 0c be 40011ab8 40011a8c: 01 00 00 00 nop 40011a90: 1a 80 00 8e bcc 40011cc8 40011a94: 82 1a 20 02 xor %o0, 2, %g1 case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 40011a98: c6 07 bf f0 ld [ %fp + -16 ], %g3 40011a9c: c4 04 20 54 ld [ %l0 + 0x54 ], %g2 the_region->maximum_segment_size += amount_extended; 40011aa0: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 40011aa4: 84 00 80 03 add %g2, %g3, %g2 the_region->maximum_segment_size += amount_extended; 40011aa8: 82 00 40 03 add %g1, %g3, %g1 &amount_extended ); switch ( heap_status ) { case HEAP_EXTEND_SUCCESSFUL: the_region->length += amount_extended; 40011aac: c4 24 20 54 st %g2, [ %l0 + 0x54 ] the_region->maximum_segment_size += amount_extended; 40011ab0: c2 24 20 5c st %g1, [ %l0 + 0x5c ] 40011ab4: b0 10 20 00 clr %i0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011ab8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011abc: 82 00 60 01 inc %g1 40011ac0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] break; case HEAP_EXTEND_NOT_IMPLEMENTED: status = RTEMS_NOT_IMPLEMENTED; break; } _RTEMS_Unlock_allocator(); 40011ac4: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 40011ac8: 94 10 20 00 clr %o2 40011acc: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011ad0: 40 00 0e e4 call 40015660 <_CORE_mutex_Surrender> 40011ad4: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011ad8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011adc: 82 00 7f ff add %g1, -1, %g1 40011ae0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40011ae4: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40011ae8: 80 a0 a0 00 cmp %g2, 0 40011aec: 12 80 00 2c bne 40011b9c 40011af0: 01 00 00 00 nop _Thread_Dispatch(); 40011af4: 40 00 18 0e call 40017b2c <_Thread_Dispatch> 40011af8: 01 00 00 00 nop 40011afc: 81 c7 e0 08 ret 40011b00: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40011b04: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40011b08: 12 80 00 4d bne 40011c3c <== NOT EXECUTED 40011b0c: c6 04 e0 34 ld [ %l3 + 0x34 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40011b10: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40011b14: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40011b18: 12 80 00 47 bne 40011c34 <== NOT EXECUTED 40011b1c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40011b20: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40011b24: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011b28: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40011b2c: 7f ff e4 74 call 4000acfc <== NOT EXECUTED 40011b30: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011b34: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED 40011b38: 11 10 00 d1 sethi %hi(0x40034400), %o0 <== NOT EXECUTED 40011b3c: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 40011b40: 40 00 12 bf call 4001663c <_Objects_Get_no_protection> <== NOT EXECUTED 40011b44: 90 12 21 78 or %o0, 0x178, %o0 <== NOT EXECUTED status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ the_region = _Region_Get( id, &location ); switch ( location ) { 40011b48: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40011b4c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011b50: 12 bf ff c5 bne 40011a64 <== NOT EXECUTED 40011b54: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011b58: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011b5c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011b60: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40011b64: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 40011b68: 94 10 20 00 clr %o2 <== NOT EXECUTED 40011b6c: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40011b70: 40 00 0e bc call 40015660 <_CORE_mutex_Surrender> <== NOT EXECUTED 40011b74: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011b78: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011b7c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011b80: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40011b84: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 <== NOT EXECUTED 40011b88: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40011b8c: 12 80 00 28 bne 40011c2c <== NOT EXECUTED 40011b90: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40011b94: 40 00 17 e6 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 40011b98: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 40011b9c: 81 c7 e0 08 ret <== NOT EXECUTED 40011ba0: 81 e8 00 00 restore <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40011ba4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011ba8: 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++; 40011bac: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011bb0: 12 bf ff a1 bne 40011a34 40011bb4: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40011bb8: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40011bbc: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40011bc0: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40011bc4: 02 80 00 50 be 40011d04 <== NOT EXECUTED 40011bc8: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40011bcc: 1a 80 00 44 bcc 40011cdc <== NOT EXECUTED 40011bd0: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011bd4: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011bd8: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011bdc: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40011be0: 7f ff e4 47 call 4000acfc <== NOT EXECUTED 40011be4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40011be8: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40011bec: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40011bf0: 40 00 16 ab call 4001769c <_Thread_Change_priority> <== NOT EXECUTED 40011bf4: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011bf8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011bfc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011c00: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40011c04: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 <== NOT EXECUTED 40011c08: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40011c0c: 32 bf ff 8d bne,a 40011a40 <== NOT EXECUTED 40011c10: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED _Thread_Dispatch(); 40011c14: 40 00 17 c6 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 40011c18: 01 00 00 00 nop <== NOT EXECUTED 40011c1c: 10 bf ff 89 b 40011a40 <== NOT EXECUTED 40011c20: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ the_region = _Region_Get( id, &location ); switch ( location ) { 40011c24: 02 80 00 18 be 40011c84 40011c28: 01 00 00 00 nop 40011c2c: 81 c7 e0 08 ret <== NOT EXECUTED 40011c30: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40011c34: 02 80 00 1f be 40011cb0 <== NOT EXECUTED 40011c38: c6 04 e0 34 ld [ %l3 + 0x34 ], %g3 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011c3c: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED if ( !starting_address ) return RTEMS_INVALID_ADDRESS; status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ 40011c40: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40011c44: c8 01 20 3c ld [ %g4 + 0x3c ], %g4 <== NOT EXECUTED 40011c48: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011c4c: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40011c50: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40011c54: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40011c58: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40011c5c: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40011c60: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40011c64: 7f ff e4 26 call 4000acfc <== NOT EXECUTED 40011c68: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011c6c: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 40011c70: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011c74: 40 00 0e 57 call 400155d0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40011c78: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40011c7c: 10 bf ff 71 b 40011a40 <== NOT EXECUTED 40011c80: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED 40011c84: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011c88: 82 00 60 01 inc %g1 40011c8c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40011c90: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 40011c94: 94 10 20 00 clr %o2 40011c98: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011c9c: 40 00 0e 71 call 40015660 <_CORE_mutex_Surrender> 40011ca0: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011ca4: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011ca8: 10 bf ff 8d b 40011adc 40011cac: b0 10 20 04 mov 4, %i0 case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40011cb0: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 40011cb4: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40011cb8: 7f ff e4 11 call 4000acfc <== NOT EXECUTED 40011cbc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011cc0: 10 bf ff 60 b 40011a40 <== NOT EXECUTED 40011cc4: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED starting_address, length, &amount_extended ); switch ( heap_status ) { 40011cc8: 80 a0 00 01 cmp %g0, %g1 40011ccc: 84 60 20 00 subx %g0, 0, %g2 40011cd0: b0 08 bf e8 and %g2, -24, %i0 40011cd4: 10 bf ff 79 b 40011ab8 40011cd8: b0 06 20 18 add %i0, 0x18, %i0 ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40011cdc: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40011ce0: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40011ce4: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40011ce8: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40011cec: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011cf0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40011cf4: 7f ff e4 02 call 4000acfc <== NOT EXECUTED 40011cf8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011cfc: 10 bf ff 51 b 40011a40 <== NOT EXECUTED 40011d00: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40011d04: 7f ff e3 fe call 4000acfc <== NOT EXECUTED 40011d08: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011d0c: 10 bf ff 4d b 40011a40 <== NOT EXECUTED 40011d10: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED 40011d14 : uint32_t size, rtems_option option_set, rtems_interval timeout, void **segment ) { 40011d14: 9d e3 bf 90 save %sp, -112, %sp 40011d18: aa 10 00 18 mov %i0, %l5 register Region_Control *the_region; Objects_Locations location; Thread_Control *executing; void *the_segment; if ( !segment ) 40011d1c: 80 a7 20 00 cmp %i4, 0 40011d20: 02 80 00 4e be 40011e58 40011d24: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; *segment = NULL; if ( size == 0 ) 40011d28: 80 a6 60 00 cmp %i1, 0 40011d2c: 02 80 00 c8 be 4001204c 40011d30: c0 27 00 00 clr [ %i4 ] return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 40011d34: 7f ff e3 ee call 4000acec 40011d38: 01 00 00 00 nop 40011d3c: a4 10 00 08 mov %o0, %l2 40011d40: 23 10 00 d1 sethi %hi(0x40034400), %l1 40011d44: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 40011d48: 80 a0 60 00 cmp %g1, 0 40011d4c: 02 80 00 0b be 40011d78 40011d50: 29 10 00 d2 sethi %hi(0x40034800), %l4 40011d54: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 40011d58: c4 00 61 40 ld [ %g1 + 0x140 ], %g2 ! 40034940 <_System_state_Current> <== NOT EXECUTED 40011d5c: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40011d60: 08 80 00 06 bleu 40011d78 <== NOT EXECUTED 40011d64: 90 10 20 00 clr %o0 <== NOT EXECUTED 40011d68: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011d6c: 40 00 10 b6 call 40016044 <_Internal_error_Occurred> <== NOT EXECUTED 40011d70: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40011d74: 29 10 00 d2 sethi %hi(0x40034800), %l4 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40011d78: 27 10 00 d2 sethi %hi(0x40034800), %l3 40011d7c: e0 05 20 34 ld [ %l4 + 0x34 ], %l0 40011d80: c4 04 e0 3c ld [ %l3 + 0x3c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40011d84: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40011d88: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40011d8c: 80 a0 60 00 cmp %g1, 0 40011d90: 22 80 00 34 be,a 40011e60 40011d94: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 40011d98: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 40011d9c: 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; 40011da0: 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; 40011da4: 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; 40011da8: 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; 40011dac: 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 ) || 40011db0: 80 a0 e0 02 cmp %g3, 2 40011db4: 02 80 00 54 be 40011f04 40011db8: c8 24 20 64 st %g4, [ %l0 + 0x64 ] 40011dbc: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 40011dc0: 22 80 00 53 be,a 40011f0c <== NOT EXECUTED 40011dc4: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 40011dc8: 7f ff e3 cd call 4000acfc 40011dcc: 90 10 00 12 mov %l2, %o0 executing = _Thread_Executing; 40011dd0: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 40011dd4: 11 10 00 d1 sethi %hi(0x40034400), %o0 40011dd8: 92 10 00 15 mov %l5, %o1 40011ddc: 90 12 21 78 or %o0, 0x178, %o0 40011de0: 40 00 12 17 call 4001663c <_Objects_Get_no_protection> 40011de4: 94 07 bf f4 add %fp, -12, %o2 the_region = _Region_Get( id, &location ); switch ( location ) { 40011de8: c2 07 bf f4 ld [ %fp + -12 ], %g1 40011dec: 80 a0 60 01 cmp %g1, 1 40011df0: 02 80 00 32 be 40011eb8 40011df4: a0 10 00 08 mov %o0, %l0 40011df8: 80 a0 60 01 cmp %g1, 1 40011dfc: 1a 80 00 62 bcc 40011f84 40011e00: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( size > the_region->maximum_segment_size ) { 40011e04: c2 02 20 5c ld [ %o0 + 0x5c ], %g1 40011e08: 80 a6 40 01 cmp %i1, %g1 40011e0c: 28 80 00 a0 bleu,a 4001208c 40011e10: 90 02 20 68 add %o0, 0x68, %o0 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011e14: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011e18: 82 00 60 01 inc %g1 40011e1c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] _RTEMS_Unlock_allocator(); 40011e20: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 40011e24: 94 10 20 00 clr %o2 40011e28: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011e2c: 40 00 0e 0d call 40015660 <_CORE_mutex_Surrender> 40011e30: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011e34: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011e38: 82 00 7f ff add %g1, -1, %g1 40011e3c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40011e40: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40011e44: 80 a0 a0 00 cmp %g2, 0 40011e48: 12 80 00 81 bne 4001204c 40011e4c: 01 00 00 00 nop _Thread_Dispatch(); 40011e50: 40 00 17 37 call 40017b2c <_Thread_Dispatch> 40011e54: b0 10 20 08 mov 8, %i0 ! 8 40011e58: 81 c7 e0 08 ret 40011e5c: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40011e60: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40011e64: 12 80 00 4e bne 40011f9c <== NOT EXECUTED 40011e68: c6 05 20 34 ld [ %l4 + 0x34 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40011e6c: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40011e70: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40011e74: 12 80 00 48 bne 40011f94 <== NOT EXECUTED 40011e78: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40011e7c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40011e80: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011e84: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40011e88: 7f ff e3 9d call 4000acfc <== NOT EXECUTED 40011e8c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011e90: 11 10 00 d1 sethi %hi(0x40034400), %o0 <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40011e94: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED 40011e98: 90 12 21 78 or %o0, 0x178, %o0 <== NOT EXECUTED 40011e9c: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 40011ea0: 40 00 11 e7 call 4001663c <_Objects_Get_no_protection> <== NOT EXECUTED 40011ea4: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED the_region = _Region_Get( id, &location ); switch ( location ) { 40011ea8: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40011eac: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40011eb0: 12 bf ff d3 bne 40011dfc <== NOT EXECUTED 40011eb4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011eb8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011ebc: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011ec0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 40011ec4: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 <== NOT EXECUTED 40011ec8: 94 10 20 00 clr %o2 <== NOT EXECUTED 40011ecc: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 40011ed0: 40 00 0d e4 call 40015660 <_CORE_mutex_Surrender> <== NOT EXECUTED 40011ed4: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011ed8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011edc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011ee0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40011ee4: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 <== NOT EXECUTED 40011ee8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40011eec: 12 80 00 28 bne 40011f8c <== NOT EXECUTED 40011ef0: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40011ef4: 40 00 17 0e call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 40011ef8: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 40011efc: 81 c7 e0 08 ret <== NOT EXECUTED 40011f00: 81 e8 00 00 restore <== NOT EXECUTED the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40011f04: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011f08: 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++; 40011f0c: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40011f10: 12 bf ff ae bne 40011dc8 40011f14: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40011f18: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 40011f1c: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40011f20: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 40011f24: 02 80 00 56 be 4001207c <== NOT EXECUTED 40011f28: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 40011f2c: 1a 80 00 4a bcc 40012054 <== NOT EXECUTED 40011f30: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011f34: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011f38: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011f3c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40011f40: 7f ff e3 6f call 4000acfc <== NOT EXECUTED 40011f44: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 40011f48: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 40011f4c: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 40011f50: 40 00 15 d3 call 4001769c <_Thread_Change_priority> <== NOT EXECUTED 40011f54: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40011f58: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40011f5c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40011f60: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40011f64: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 <== NOT EXECUTED 40011f68: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40011f6c: 32 bf ff 9a bne,a 40011dd4 <== NOT EXECUTED 40011f70: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED _Thread_Dispatch(); 40011f74: 40 00 16 ee call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 40011f78: 01 00 00 00 nop <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40011f7c: 10 bf ff 96 b 40011dd4 <== NOT EXECUTED 40011f80: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED the_region = _Region_Get( id, &location ); switch ( location ) { 40011f84: 02 80 00 18 be 40011fe4 40011f88: 01 00 00 00 nop _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); _Thread_Enable_dispatch(); return (rtems_status_code) executing->Wait.return_code; 40011f8c: 81 c7 e0 08 ret <== NOT EXECUTED 40011f90: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40011f94: 02 80 00 28 be 40012034 <== NOT EXECUTED 40011f98: c6 05 20 34 ld [ %l4 + 0x34 ], %g3 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40011f9c: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED *segment = NULL; if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); 40011fa0: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40011fa4: c8 04 e0 3c ld [ %l3 + 0x3c ], %g4 <== NOT EXECUTED 40011fa8: 82 00 60 01 inc %g1 <== NOT EXECUTED 40011fac: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 40011fb0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40011fb4: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40011fb8: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40011fbc: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 40011fc0: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40011fc4: 7f ff e3 4e call 4000acfc <== NOT EXECUTED 40011fc8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40011fcc: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 <== NOT EXECUTED 40011fd0: 92 10 20 00 clr %o1 <== NOT EXECUTED 40011fd4: 40 00 0d 7f call 400155d0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40011fd8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED executing = _Thread_Executing; 40011fdc: 10 bf ff 7e b 40011dd4 <== NOT EXECUTED 40011fe0: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED 40011fe4: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40011fe8: 82 00 60 01 inc %g1 40011fec: c2 24 63 60 st %g1, [ %l1 + 0x360 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 40011ff0: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 40011ff4: 94 10 20 00 clr %o2 40011ff8: d2 02 20 08 ld [ %o0 + 8 ], %o1 40011ffc: 40 00 0d 99 call 40015660 <_CORE_mutex_Surrender> 40012000: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012004: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012008: b0 10 20 04 mov 4, %i0 _Thread_Dispatch(); 4001200c: 82 00 7f ff add %g1, -1, %g1 40012010: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40012014: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40012018: 80 a0 a0 00 cmp %g2, 0 4001201c: 12 80 00 6d bne 400121d0 40012020: 01 00 00 00 nop 40012024: 40 00 16 c2 call 40017b2c <_Thread_Dispatch> 40012028: 01 00 00 00 nop 4001202c: 81 c7 e0 08 ret 40012030: 81 e8 00 00 restore case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 40012034: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 40012038: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 4001203c: 7f ff e3 30 call 4000acfc <== NOT EXECUTED 40012040: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40012044: 10 bf ff 64 b 40011dd4 <== NOT EXECUTED 40012048: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); _Thread_Enable_dispatch(); return (rtems_status_code) executing->Wait.return_code; 4001204c: 81 c7 e0 08 ret <== NOT EXECUTED 40012050: 91 e8 20 08 restore %g0, 8, %o0 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40012054: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40012058: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 4001205c: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 40012060: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40012064: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40012068: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 4001206c: 7f ff e3 24 call 4000acfc <== NOT EXECUTED 40012070: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if ( size == 0 ) return RTEMS_INVALID_SIZE; _RTEMS_Lock_allocator(); executing = _Thread_Executing; 40012074: 10 bf ff 58 b 40011dd4 <== NOT EXECUTED 40012078: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 4001207c: 7f ff e3 20 call 4000acfc <== NOT EXECUTED 40012080: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40012084: 10 bf ff 54 b 40011dd4 <== NOT EXECUTED 40012088: f0 04 e0 3c ld [ %l3 + 0x3c ], %i0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Region_Allocate_segment ( Region_Control *the_region, uint32_t size ) { return _Heap_Allocate( &the_region->Memory, size ); 4001208c: 40 00 0e 89 call 40015ab0 <_Heap_Allocate> 40012090: 92 10 00 19 mov %i1, %o1 the_segment = _Region_Allocate_segment( the_region, size ); _Region_Debug_Walk( the_region, 2 ); if ( the_segment ) { 40012094: a4 92 20 00 orcc %o0, 0, %l2 40012098: 02 80 00 17 be 400120f4 4001209c: 80 8e a0 01 btst 1, %i2 the_region->number_of_used_blocks += 1; 400120a0: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400120a4: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 400120a8: 82 00 60 01 inc %g1 400120ac: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 400120b0: 84 00 a0 01 inc %g2 400120b4: c4 24 63 60 st %g2, [ %l1 + 0x360 ] _RTEMS_Unlock_allocator(); 400120b8: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 400120bc: 94 10 20 00 clr %o2 400120c0: d2 02 20 08 ld [ %o0 + 8 ], %o1 400120c4: 40 00 0d 67 call 40015660 <_CORE_mutex_Surrender> 400120c8: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400120cc: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 400120d0: 82 00 7f ff add %g1, -1, %g1 400120d4: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 400120d8: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 400120dc: 80 a0 a0 00 cmp %g2, 0 400120e0: 02 80 00 12 be 40012128 400120e4: 01 00 00 00 nop *segment = the_segment; 400120e8: e4 27 00 00 st %l2, [ %i4 ] <== NOT EXECUTED 400120ec: 81 c7 e0 08 ret 400120f0: 91 e8 20 00 restore %g0, 0, %o0 return RTEMS_SUCCESSFUL; } if ( _Options_Is_no_wait( option_set ) ) { 400120f4: 02 80 00 11 be 40012138 400120f8: 01 00 00 00 nop rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400120fc: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012100: 82 00 60 01 inc %g1 40012104: c2 24 63 60 st %g1, [ %l1 + 0x360 ] _RTEMS_Unlock_allocator(); 40012108: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 4001210c: 94 10 20 00 clr %o2 40012110: d2 02 20 08 ld [ %o0 + 8 ], %o1 40012114: 40 00 0d 53 call 40015660 <_CORE_mutex_Surrender> 40012118: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001211c: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012120: 10 bf ff bb b 4001200c 40012124: b0 10 20 0d mov 0xd, %i0 _Thread_Dispatch(); 40012128: 40 00 16 81 call 40017b2c <_Thread_Dispatch> 4001212c: 01 00 00 00 nop _Region_Debug_Walk( the_region, 2 ); if ( the_segment ) { the_region->number_of_used_blocks += 1; _RTEMS_Unlock_allocator(); *segment = the_segment; 40012130: 10 bf ff ef b 400120ec 40012134: e4 27 00 00 st %l2, [ %i4 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40012138: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 4001213c: 25 10 00 d1 sethi %hi(0x40034400), %l2 40012140: 82 00 60 01 inc %g1 40012144: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40012148: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 4001214c: 82 00 60 01 inc %g1 40012150: c2 24 63 60 st %g1, [ %l1 + 0x360 ] * 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(); 40012154: d0 05 20 34 ld [ %l4 + 0x34 ], %o0 40012158: 94 10 20 00 clr %o2 4001215c: d2 02 20 08 ld [ %o0 + 8 ], %o1 40012160: 40 00 0d 40 call 40015660 <_CORE_mutex_Surrender> 40012164: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012168: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 4001216c: 82 00 7f ff add %g1, -1, %g1 40012170: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40012174: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40012178: 80 a0 a0 00 cmp %g2, 0 4001217c: 02 80 00 17 be 400121d8 40012180: 01 00 00 00 nop 40012184: 82 10 20 01 mov 1, %g1 ! 1 executing->Wait.queue = &the_region->Wait_queue; 40012188: 90 04 20 10 add %l0, 0x10, %o0 executing->Wait.id = id; 4001218c: ea 26 20 20 st %l5, [ %i0 + 0x20 ] executing->Wait.count = size; 40012190: f2 26 20 24 st %i1, [ %i0 + 0x24 ] executing->Wait.return_argument = segment; 40012194: 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 ); 40012198: 92 10 00 1b mov %i3, %o1 * because this thread is going to block. */ _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); executing->Wait.queue = &the_region->Wait_queue; 4001219c: d0 26 20 44 st %o0, [ %i0 + 0x44 ] 400121a0: c2 24 20 40 st %g1, [ %l0 + 0x40 ] executing->Wait.count = size; executing->Wait.return_argument = segment; _Thread_queue_Enter_critical_section( &the_region->Wait_queue ); _Thread_queue_Enqueue( &the_region->Wait_queue, timeout ); 400121a4: 15 10 00 61 sethi %hi(0x40018400), %o2 400121a8: 40 00 17 d1 call 400180ec <_Thread_queue_Enqueue_with_handler> 400121ac: 94 12 a2 2c or %o2, 0x22c, %o2 ! 4001862c <_Thread_queue_Timeout> 400121b0: c2 04 a3 60 ld [ %l2 + 0x360 ], %g1 400121b4: 82 00 7f ff add %g1, -1, %g1 400121b8: c2 24 a3 60 st %g1, [ %l2 + 0x360 ] 400121bc: c4 04 a3 60 ld [ %l2 + 0x360 ], %g2 400121c0: 80 a0 a0 00 cmp %g2, 0 400121c4: 02 80 00 09 be 400121e8 400121c8: 01 00 00 00 nop _Thread_Enable_dispatch(); return (rtems_status_code) executing->Wait.return_code; 400121cc: f0 06 20 34 ld [ %i0 + 0x34 ], %i0 <== NOT EXECUTED 400121d0: 81 c7 e0 08 ret <== NOT EXECUTED 400121d4: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 400121d8: 40 00 16 55 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 400121dc: 01 00 00 00 nop <== NOT EXECUTED 400121e0: 10 bf ff ea b 40012188 <== NOT EXECUTED 400121e4: 82 10 20 01 mov 1, %g1 ! 1 <== NOT EXECUTED 400121e8: 40 00 16 51 call 40017b2c <_Thread_Dispatch> 400121ec: 01 00 00 00 nop 400121f0: f0 06 20 34 ld [ %i0 + 0x34 ], %i0 400121f4: 81 c7 e0 08 ret 400121f8: 81 e8 00 00 restore 40012234 : rtems_status_code rtems_region_return_segment( Objects_Id id, void *segment ) { 40012234: 9d e3 bf 90 save %sp, -112, %sp #ifdef RTEMS_REGION_FREE_SHRED_PATTERN uint32_t size; #endif int status; _RTEMS_Lock_allocator(); 40012238: 7f ff e2 ad call 4000acec 4001223c: 01 00 00 00 nop 40012240: a4 10 00 08 mov %o0, %l2 40012244: 23 10 00 d1 sethi %hi(0x40034400), %l1 40012248: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 4001224c: 80 a0 60 00 cmp %g1, 0 40012250: 02 80 00 0b be 4001227c 40012254: 27 10 00 d2 sethi %hi(0x40034800), %l3 40012258: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 4001225c: c4 00 61 40 ld [ %g1 + 0x140 ], %g2 ! 40034940 <_System_state_Current> <== NOT EXECUTED 40012260: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED 40012264: 08 80 00 06 bleu 4001227c <== NOT EXECUTED 40012268: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001226c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40012270: 40 00 0f 75 call 40016044 <_Internal_error_Occurred> <== NOT EXECUTED 40012274: 94 10 20 12 mov 0x12, %o2 <== NOT EXECUTED 40012278: 27 10 00 d2 sethi %hi(0x40034800), %l3 <== NOT EXECUTED Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 4001227c: 09 10 00 d2 sethi %hi(0x40034800), %g4 40012280: e0 04 e0 34 ld [ %l3 + 0x34 ], %l0 40012284: c4 01 20 3c ld [ %g4 + 0x3c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40012288: c0 20 a0 34 clr [ %g2 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 4001228c: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 40012290: 80 a0 60 00 cmp %g1, 0 40012294: 22 80 00 38 be,a 40012374 40012298: c2 04 20 6c ld [ %l0 + 0x6c ], %g1 <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_LOCKED; 4001229c: c0 24 20 60 clr [ %l0 + 0x60 ] the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; 400122a0: 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; 400122a4: 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; 400122a8: 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; 400122ac: 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; 400122b0: 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 ) || 400122b4: 80 a0 e0 02 cmp %g3, 2 400122b8: 12 80 00 58 bne 40012418 400122bc: c8 24 20 64 st %g4, [ %l0 + 0x64 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 400122c0: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400122c4: 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++; 400122c8: 82 00 60 01 inc %g1 if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 400122cc: 02 80 00 7c be 400124bc 400122d0: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] _ISR_Enable( level ); 400122d4: 7f ff e2 8a call 4000acfc 400122d8: 90 10 00 12 mov %l2, %o0 RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 400122dc: 92 10 00 18 mov %i0, %o1 400122e0: 11 10 00 d1 sethi %hi(0x40034400), %o0 400122e4: 94 07 bf f4 add %fp, -12, %o2 400122e8: 40 00 10 d5 call 4001663c <_Objects_Get_no_protection> 400122ec: 90 12 21 78 or %o0, 0x178, %o0 the_region = _Region_Get( id, &location ); switch ( location ) { 400122f0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400122f4: 80 a0 60 01 cmp %g1, 1 400122f8: 02 80 00 35 be 400123cc 400122fc: a0 10 00 08 mov %o0, %l0 40012300: 80 a0 60 01 cmp %g1, 1 40012304: 1a 80 00 5f bcc 40012480 40012308: 80 a0 60 02 cmp %g1, 2 RTEMS_INLINE_ROUTINE boolean _Region_Free_segment ( Region_Control *the_region, void *the_segment ) { return _Heap_Free( &the_region->Memory, the_segment ); 4001230c: 92 10 00 19 mov %i1, %o1 40012310: 40 00 0e 4d call 40015c44 <_Heap_Free> 40012314: 90 02 20 68 add %o0, 0x68, %o0 status = _Region_Free_segment( the_region, segment ); _Region_Debug_Walk( the_region, 4 ); if ( !status ) { 40012318: 80 a2 20 00 cmp %o0, 0 4001231c: 32 80 00 97 bne,a 40012578 40012320: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40012324: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012328: 82 00 60 01 inc %g1 4001232c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] _RTEMS_Unlock_allocator(); 40012330: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 40012334: 94 10 20 00 clr %o2 40012338: d2 02 20 08 ld [ %o0 + 8 ], %o1 4001233c: 40 00 0c c9 call 40015660 <_CORE_mutex_Surrender> 40012340: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012344: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012348: b0 10 20 09 mov 9, %i0 4001234c: 82 00 7f ff add %g1, -1, %g1 40012350: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40012354: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40012358: 80 a0 a0 00 cmp %g2, 0 4001235c: 12 80 00 8c bne 4001258c 40012360: 01 00 00 00 nop _Thread_Dispatch(); 40012364: 40 00 15 f2 call 40017b2c <_Thread_Dispatch> 40012368: 01 00 00 00 nop 4001236c: 81 c7 e0 08 ret 40012370: 81 e8 00 00 restore /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 40012374: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40012378: 12 80 00 30 bne 40012438 <== NOT EXECUTED 4001237c: c6 04 e0 34 ld [ %l3 + 0x34 ], %g3 <== NOT EXECUTED switch ( the_mutex->Attributes.lock_nesting_behavior ) { 40012380: c2 04 20 50 ld [ %l0 + 0x50 ], %g1 <== NOT EXECUTED 40012384: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40012388: 22 80 00 68 be,a 40012528 <== NOT EXECUTED 4001238c: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 <== NOT EXECUTED 40012390: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40012394: 12 80 00 29 bne 40012438 <== NOT EXECUTED 40012398: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; _ISR_Enable( level ); return 0; case CORE_MUTEX_NESTING_IS_ERROR: executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED; 4001239c: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 400123a0: 7f ff e2 57 call 4000acfc <== NOT EXECUTED 400123a4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED RTEMS_INLINE_ROUTINE Region_Control *_Region_Get ( Objects_Id id, Objects_Locations *location ) { return (Region_Control *) 400123a8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 400123ac: 11 10 00 d1 sethi %hi(0x40034400), %o0 <== NOT EXECUTED 400123b0: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED 400123b4: 40 00 10 a2 call 4001663c <_Objects_Get_no_protection> <== NOT EXECUTED 400123b8: 90 12 21 78 or %o0, 0x178, %o0 <== NOT EXECUTED #endif int status; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); switch ( location ) { 400123bc: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 400123c0: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 400123c4: 12 bf ff d0 bne 40012304 <== NOT EXECUTED 400123c8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400123cc: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 400123d0: 82 00 60 01 inc %g1 <== NOT EXECUTED 400123d4: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); 400123d8: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 400123dc: 94 10 20 00 clr %o2 <== NOT EXECUTED 400123e0: d2 02 20 08 ld [ %o0 + 8 ], %o1 <== NOT EXECUTED 400123e4: 40 00 0c 9f call 40015660 <_CORE_mutex_Surrender> <== NOT EXECUTED 400123e8: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400123ec: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 400123f0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400123f4: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 400123f8: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 <== NOT EXECUTED 400123fc: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40012400: 12 80 00 22 bne 40012488 <== NOT EXECUTED 40012404: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 40012408: 40 00 15 c9 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 4001240c: b0 10 20 19 mov 0x19, %i0 ! 19 <== NOT EXECUTED 40012410: 81 c7 e0 08 ret <== NOT EXECUTED 40012414: 81 e8 00 00 restore <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40012418: 80 a0 e0 03 cmp %g3, 3 <== NOT EXECUTED 4001241c: 12 bf ff ae bne 400122d4 <== NOT EXECUTED 40012420: 01 00 00 00 nop <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 40012424: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40012428: 82 00 60 01 inc %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 4001242c: 02 80 00 24 be 400124bc <== NOT EXECUTED 40012430: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED 40012434: 30 bf ff a8 b,a 400122d4 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40012438: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED #ifdef RTEMS_REGION_FREE_SHRED_PATTERN uint32_t size; #endif int status; _RTEMS_Lock_allocator(); 4001243c: c4 00 e0 08 ld [ %g3 + 8 ], %g2 <== NOT EXECUTED 40012440: c8 01 20 3c ld [ %g4 + 0x3c ], %g4 <== NOT EXECUTED 40012444: 82 00 60 01 inc %g1 <== NOT EXECUTED 40012448: c4 21 20 20 st %g2, [ %g4 + 0x20 ] <== NOT EXECUTED 4001244c: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40012450: 84 00 e0 10 add %g3, 0x10, %g2 <== NOT EXECUTED 40012454: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40012458: c4 21 20 44 st %g2, [ %g4 + 0x44 ] <== NOT EXECUTED 4001245c: c2 20 e0 40 st %g1, [ %g3 + 0x40 ] <== NOT EXECUTED 40012460: 7f ff e2 27 call 4000acfc <== NOT EXECUTED 40012464: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40012468: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 <== NOT EXECUTED 4001246c: 92 10 20 00 clr %o1 <== NOT EXECUTED 40012470: 40 00 0c 58 call 400155d0 <_CORE_mutex_Seize_interrupt_blocking> <== NOT EXECUTED 40012474: 90 02 20 10 add %o0, 0x10, %o0 <== NOT EXECUTED 40012478: 10 bf ff 9a b 400122e0 <== NOT EXECUTED 4001247c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED the_region = _Region_Get( id, &location ); switch ( location ) { 40012480: 02 80 00 04 be 40012490 40012484: 01 00 00 00 nop the_region->number_of_used_blocks -= 1; _Region_Process_queue(the_region); /* unlocks allocator internally */ return RTEMS_SUCCESSFUL; 40012488: 81 c7 e0 08 ret <== NOT EXECUTED 4001248c: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED 40012490: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012494: 82 00 60 01 inc %g1 40012498: c2 24 63 60 st %g1, [ %l1 + 0x360 ] case OBJECTS_REMOTE: /* this error cannot be returned */ _RTEMS_Unlock_allocator(); return RTEMS_INTERNAL_ERROR; case OBJECTS_ERROR: _RTEMS_Unlock_allocator(); 4001249c: d0 04 e0 34 ld [ %l3 + 0x34 ], %o0 400124a0: 94 10 20 00 clr %o2 400124a4: d2 02 20 08 ld [ %o0 + 8 ], %o1 400124a8: 40 00 0c 6e call 40015660 <_CORE_mutex_Surrender> 400124ac: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400124b0: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 400124b4: 10 bf ff a6 b 4001234c 400124b8: b0 10 20 04 mov 4, %i0 */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 400124bc: c6 04 20 5c ld [ %l0 + 0x5c ], %g3 <== NOT EXECUTED current = executing->current_priority; 400124c0: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 400124c4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 400124c8: 02 80 00 28 be 40012568 <== NOT EXECUTED 400124cc: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 400124d0: 1a 80 00 1c bcc 40012540 <== NOT EXECUTED 400124d4: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400124d8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 400124dc: 82 00 60 01 inc %g1 <== NOT EXECUTED 400124e0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 400124e4: 7f ff e2 06 call 4000acfc <== NOT EXECUTED 400124e8: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED _Thread_Change_priority( 400124ec: d2 04 20 5c ld [ %l0 + 0x5c ], %o1 <== NOT EXECUTED 400124f0: d0 04 20 6c ld [ %l0 + 0x6c ], %o0 <== NOT EXECUTED 400124f4: 40 00 14 6a call 4001769c <_Thread_Change_priority> <== NOT EXECUTED 400124f8: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400124fc: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 <== NOT EXECUTED 40012500: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40012504: c2 24 63 60 st %g1, [ %l1 + 0x360 ] <== NOT EXECUTED 40012508: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 <== NOT EXECUTED 4001250c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40012510: 32 bf ff 74 bne,a 400122e0 <== NOT EXECUTED 40012514: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED _Thread_Dispatch(); 40012518: 40 00 15 85 call 40017b2c <_Thread_Dispatch> <== NOT EXECUTED 4001251c: 01 00 00 00 nop <== NOT EXECUTED 40012520: 10 bf ff 70 b 400122e0 <== NOT EXECUTED 40012524: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 40012528: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001252c: c2 24 20 64 st %g1, [ %l0 + 0x64 ] <== NOT EXECUTED _ISR_Enable( level ); 40012530: 7f ff e1 f3 call 4000acfc <== NOT EXECUTED 40012534: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40012538: 10 bf ff 6a b 400122e0 <== NOT EXECUTED 4001253c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40012540: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40012544: c8 24 20 60 st %g4, [ %l0 + 0x60 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40012548: c0 24 20 64 clr [ %l0 + 0x64 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 4001254c: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED 40012550: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40012554: c2 20 a0 1c st %g1, [ %g2 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40012558: 7f ff e1 e9 call 4000acfc <== NOT EXECUTED 4001255c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40012560: 10 bf ff 60 b 400122e0 <== NOT EXECUTED 40012564: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40012568: 7f ff e1 e5 call 4000acfc <== NOT EXECUTED 4001256c: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED 40012570: 10 bf ff 5c b 400122e0 <== NOT EXECUTED 40012574: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; _Region_Process_queue(the_region); /* unlocks allocator internally */ 40012578: 90 10 00 10 mov %l0, %o0 if ( !status ) { _RTEMS_Unlock_allocator(); return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; 4001257c: 82 00 7f ff add %g1, -1, %g1 _Region_Process_queue(the_region); /* unlocks allocator internally */ 40012580: b0 10 20 00 clr %i0 40012584: 40 00 24 76 call 4001b75c <_Region_Process_queue> 40012588: c2 24 20 64 st %g1, [ %l0 + 0x64 ] 4001258c: 81 c7 e0 08 ret 40012590: 81 e8 00 00 restore 40006bb0 : uint32_t count, rtems_attribute attribute_set, rtems_task_priority priority_ceiling, rtems_id *id ) { 40006bb0: 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 ) ) 40006bb4: aa 96 20 00 orcc %i0, 0, %l5 40006bb8: 02 80 00 12 be 40006c00 40006bbc: b0 10 20 03 mov 3, %i0 return RTEMS_INVALID_NAME; if ( !id ) 40006bc0: 80 a7 20 00 cmp %i4, 0 40006bc4: 02 80 00 0f be 40006c00 40006bc8: b0 10 20 09 mov 9, %i0 return RTEMS_NOT_DEFINED; } else #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || 40006bcc: a4 8e a0 40 andcc %i2, 0x40, %l2 40006bd0: 12 80 00 0e bne 40006c08 40006bd4: a0 0e a0 30 and %i2, 0x30, %l0 40006bd8: 80 8e a0 80 btst 0x80, %i2 40006bdc: 12 80 00 0c bne 40006c0c 40006be0: 80 a4 20 10 cmp %l0, 0x10 RTEMS_INLINE_ROUTINE boolean _Attributes_Is_counting_semaphore( rtems_attribute attribute_set ) { return ((attribute_set & RTEMS_SEMAPHORE_CLASS) == RTEMS_COUNTING_SEMAPHORE); 40006be4: 80 a0 00 10 cmp %g0, %l0 40006be8: a2 60 3f ff subx %g0, -1, %l1 if ( _Attributes_Is_inherit_priority( attribute_set ) && _Attributes_Is_priority_ceiling( attribute_set ) ) return RTEMS_NOT_DEFINED; if ( !_Attributes_Is_counting_semaphore( attribute_set ) && ( count > 1 ) ) 40006bec: 80 a4 60 00 cmp %l1, 0 40006bf0: 12 80 00 17 bne 40006c4c 40006bf4: 80 a6 60 01 cmp %i1, 1 40006bf8: 08 80 00 15 bleu 40006c4c 40006bfc: b0 10 20 0a mov 0xa, %i0 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 40006c00: 81 c7 e0 08 ret 40006c04: 81 e8 00 00 restore #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || _Attributes_Is_priority_ceiling( attribute_set ) ) { if ( ! ( (_Attributes_Is_binary_semaphore( attribute_set ) || 40006c08: 80 a4 20 10 cmp %l0, 0x10 40006c0c: 12 80 00 0b bne 40006c38 40006c10: 80 a4 20 20 cmp %l0, 0x20 40006c14: 80 8e a0 04 btst 4, %i2 40006c18: 02 80 00 06 be 40006c30 40006c1c: 80 a4 a0 00 cmp %l2, 0 _Attributes_Is_priority( attribute_set ) ) ) return RTEMS_NOT_DEFINED; } if ( _Attributes_Is_inherit_priority( attribute_set ) && 40006c20: 02 bf ff f1 be 40006be4 40006c24: 80 8e a0 80 btst 0x80, %i2 40006c28: 02 bf ff f0 be 40006be8 40006c2c: 80 a0 00 10 cmp %g0, %l0 0 /* Not used */ ); #endif _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 40006c30: 81 c7 e0 08 ret 40006c34: 91 e8 20 0b restore %g0, 0xb, %o0 #endif if ( _Attributes_Is_inherit_priority( attribute_set ) || _Attributes_Is_priority_ceiling( attribute_set ) ) { if ( ! ( (_Attributes_Is_binary_semaphore( attribute_set ) || 40006c38: 12 bf ff fe bne 40006c30 40006c3c: 80 8e a0 04 btst 4, %i2 40006c40: 12 bf ff f8 bne 40006c20 40006c44: 80 a4 a0 00 cmp %l2, 0 40006c48: 30 bf ff fa b,a 40006c30 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40006c4c: 29 10 00 6b sethi %hi(0x4001ac00), %l4 40006c50: c2 05 21 90 ld [ %l4 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 40006c54: 82 00 60 01 inc %g1 40006c58: c2 25 21 90 st %g1, [ %l4 + 0x190 ] * the inactive chain of free semaphore control blocks. */ RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Allocate( void ) { return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information ); 40006c5c: 31 10 00 6b sethi %hi(0x4001ac00), %i0 40006c60: 40 00 07 28 call 40008900 <_Objects_Allocate> 40006c64: 90 16 20 48 or %i0, 0x48, %o0 ! 4001ac48 <_Semaphore_Information> _Thread_Disable_dispatch(); /* prevents deletion */ the_semaphore = _Semaphore_Allocate(); if ( !the_semaphore ) { 40006c68: a6 92 20 00 orcc %o0, 0, %l3 40006c6c: 12 80 00 0e bne 40006ca4 40006c70: 80 a4 60 00 cmp %l1, 0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006c74: c2 05 21 90 ld [ %l4 + 0x190 ], %g1 40006c78: b0 10 20 05 mov 5, %i0 _Thread_Dispatch(); 40006c7c: 82 00 7f ff add %g1, -1, %g1 40006c80: c2 25 21 90 st %g1, [ %l4 + 0x190 ] 40006c84: c4 05 21 90 ld [ %l4 + 0x190 ], %g2 40006c88: 80 a0 a0 00 cmp %g2, 0 40006c8c: 12 80 00 04 bne 40006c9c 40006c90: 01 00 00 00 nop 40006c94: 40 00 0d 94 call 4000a2e4 <_Thread_Dispatch> 40006c98: 01 00 00 00 nop 40006c9c: 81 c7 e0 08 ret 40006ca0: 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 ) ) { 40006ca4: 12 80 00 1e bne 40006d1c 40006ca8: f4 24 e0 10 st %i2, [ %l3 + 0x10 ] CORE_mutex_Status mutex_status; if ( _Attributes_Is_inherit_priority( attribute_set ) ) 40006cac: 80 a4 a0 00 cmp %l2, 0 40006cb0: 02 80 00 39 be 40006d94 40006cb4: 80 8e a0 80 btst 0x80, %i2 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40006cb8: 82 10 20 02 mov 2, %g1 40006cbc: c2 27 bf e8 st %g1, [ %fp + -24 ] the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; else the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_FIFO; if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { 40006cc0: 80 a4 20 10 cmp %l0, 0x10 40006cc4: 12 80 00 39 bne 40006da8 40006cc8: 82 10 20 02 mov 2, %g1 the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { 40006ccc: c2 07 bf e8 ld [ %fp + -24 ], %g1 40006cd0: 80 a0 60 01 cmp %g1, 1 40006cd4: 18 80 00 3d bgu 40006dc8 40006cd8: c0 27 bf e0 clr [ %fp + -32 ] case CORE_MUTEX_DISCIPLINES_FIFO: case CORE_MUTEX_DISCIPLINES_PRIORITY: the_mutex_attributes.only_owner_release = FALSE; 40006cdc: c0 27 bf e4 clr [ %fp + -28 ] the_mutex_attributes.only_owner_release = FALSE; } the_mutex_attributes.priority_ceiling = priority_ceiling; mutex_status = _CORE_mutex_Initialize( 40006ce0: 82 1e 60 01 xor %i1, 1, %g1 40006ce4: 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; 40006ce8: f6 27 bf ec st %i3, [ %fp + -20 ] mutex_status = _CORE_mutex_Initialize( 40006cec: 94 60 3f ff subx %g0, -1, %o2 40006cf0: 90 04 e0 14 add %l3, 0x14, %o0 40006cf4: 40 00 04 76 call 40007ecc <_CORE_mutex_Initialize> 40006cf8: 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 ) { 40006cfc: 80 a2 20 06 cmp %o0, 6 40006d00: 12 80 00 14 bne 40006d50 40006d04: 90 16 20 48 or %i0, 0x48, %o0 RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 40006d08: 40 00 08 0c call 40008d38 <_Objects_Free> <== NOT EXECUTED 40006d0c: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40006d10: c2 05 21 90 ld [ %l4 + 0x190 ], %g1 <== NOT EXECUTED 40006d14: 10 bf ff da b 40006c7c <== NOT EXECUTED 40006d18: b0 10 20 13 mov 0x13, %i0 <== NOT EXECUTED _Semaphore_Free( the_semaphore ); _Thread_Enable_dispatch(); return RTEMS_INVALID_PRIORITY; } } else { if ( _Attributes_Is_priority( attribute_set ) ) 40006d1c: 80 8e a0 04 btst 4, %i2 40006d20: 22 80 00 04 be,a 40006d30 40006d24: c0 27 bf f4 clr [ %fp + -12 ] the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY; 40006d28: 82 10 20 01 mov 1, %g1 40006d2c: c2 27 bf f4 st %g1, [ %fp + -12 ] /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 40006d30: 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; 40006d34: c0 27 bf e0 clr [ %fp + -32 ] the_mutex_attributes.priority_ceiling = PRIORITY_MINIMUM; 40006d38: c0 27 bf ec clr [ %fp + -20 ] _CORE_semaphore_Initialize( 40006d3c: 94 10 00 19 mov %i1, %o2 /* * This effectively disables limit checking. */ the_semaphore_attributes.maximum_count = 0xFFFFFFFF; 40006d40: 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( 40006d44: 90 04 e0 14 add %l3, 0x14, %o0 40006d48: 40 00 05 1e call 400081c0 <_CORE_semaphore_Initialize> 40006d4c: 92 07 bf f0 add %fp, -16, %o1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006d50: 90 16 20 48 or %i0, 0x48, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, the_object ); 40006d54: c6 04 e0 08 ld [ %l3 + 8 ], %g3 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006d58: c4 12 20 10 lduh [ %o0 + 0x10 ], %g2 40006d5c: 03 00 00 3f sethi %hi(0xfc00), %g1 40006d60: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40006d64: 82 08 c0 01 and %g3, %g1, %g1 40006d68: 80 a0 40 02 cmp %g1, %g2 40006d6c: 38 80 00 06 bgu,a 40006d84 40006d70: ea 24 e0 0c st %l5, [ %l3 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40006d74: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40006d78: 83 28 60 02 sll %g1, 2, %g1 40006d7c: e6 20 80 01 st %l3, [ %g2 + %g1 ] if ( information->is_string ) /* _Objects_Copy_name_string( name, the_object->name ); */ the_object->name = name; else /* _Objects_Copy_name_raw( name, the_object->name, information->name_length ); */ the_object->name = name; 40006d80: ea 24 e0 0c st %l5, [ %l3 + 0xc ] &_Semaphore_Information, &the_semaphore->Object, (Objects_Name) name ); *id = the_semaphore->Object.id; 40006d84: c6 27 00 00 st %g3, [ %i4 ] 40006d88: c2 05 21 90 ld [ %l4 + 0x190 ], %g1 40006d8c: 10 bf ff bc b 40006c7c 40006d90: b0 10 20 00 clr %i0 if ( !_Attributes_Is_counting_semaphore( attribute_set ) ) { CORE_mutex_Status mutex_status; if ( _Attributes_Is_inherit_priority( attribute_set ) ) the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) 40006d94: 02 80 00 08 be 40006db4 40006d98: 80 8e a0 04 btst 4, %i2 the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; 40006d9c: 82 10 20 03 mov 3, %g1 <== NOT EXECUTED 40006da0: 10 bf ff c8 b 40006cc0 <== NOT EXECUTED 40006da4: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED the_mutex_attributes.only_owner_release = TRUE; break; } } else { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS; the_mutex_attributes.only_owner_release = FALSE; 40006da8: 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; 40006dac: 10 bf ff cd b 40006ce0 40006db0: c2 27 bf e0 st %g1, [ %fp + -32 ] if ( _Attributes_Is_inherit_priority( attribute_set ) ) the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; else if ( _Attributes_Is_priority( attribute_set ) ) 40006db4: 22 bf ff c3 be,a 40006cc0 40006db8: c0 27 bf e8 clr [ %fp + -24 ] the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; 40006dbc: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40006dc0: 10 bf ff c0 b 40006cc0 <== NOT EXECUTED 40006dc4: c2 27 bf e8 st %g1, [ %fp + -24 ] <== NOT EXECUTED if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { the_mutex_attributes.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES; switch ( the_mutex_attributes.discipline ) { 40006dc8: 80 a0 60 03 cmp %g1, 3 40006dcc: 18 bf ff c6 bgu 40006ce4 40006dd0: 82 1e 60 01 xor %i1, 1, %g1 case CORE_MUTEX_DISCIPLINES_PRIORITY: the_mutex_attributes.only_owner_release = FALSE; break; case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING: case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT: the_mutex_attributes.only_owner_release = TRUE; 40006dd4: 82 10 20 01 mov 1, %g1 40006dd8: 10 bf ff c2 b 40006ce0 40006ddc: c2 27 bf e4 st %g1, [ %fp + -28 ] 40006de0 : #endif rtems_status_code rtems_semaphore_delete( rtems_id id ) { 40006de0: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 40006de4: 21 10 00 6b sethi %hi(0x4001ac00), %l0 40006de8: 92 10 00 18 mov %i0, %o1 40006dec: 94 07 bf f4 add %fp, -12, %o2 40006df0: 40 00 08 15 call 40008e44 <_Objects_Get> 40006df4: 90 14 20 48 or %l0, 0x48, %o0 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40006df8: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006dfc: 80 a0 60 00 cmp %g1, 0 40006e00: 12 80 00 19 bne 40006e64 40006e04: b0 10 00 08 mov %o0, %i0 40006e08: 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) ) { 40006e0c: 84 88 60 30 andcc %g1, 0x30, %g2 40006e10: 22 80 00 1a be,a 40006e78 40006e14: 90 02 20 14 add %o0, 0x14, %o0 if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) && 40006e18: c2 02 20 64 ld [ %o0 + 0x64 ], %g1 40006e1c: 80 a0 60 00 cmp %g1, 0 40006e20: 12 80 00 35 bne 40006ef4 40006e24: 80 a0 a0 20 cmp %g2, 0x20 40006e28: 02 80 00 34 be 40006ef8 40006e2c: 90 06 20 14 add %i0, 0x14, %o0 40006e30: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006e34: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 40006e38: b0 10 20 0c mov 0xc, %i0 40006e3c: 84 00 bf ff add %g2, -1, %g2 40006e40: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 40006e44: c6 00 61 90 ld [ %g1 + 0x190 ], %g3 40006e48: 80 a0 e0 00 cmp %g3, 0 40006e4c: 12 80 00 28 bne 40006eec 40006e50: 01 00 00 00 nop _Thread_Dispatch(); 40006e54: 40 00 0d 24 call 4000a2e4 <_Thread_Dispatch> 40006e58: 01 00 00 00 nop 40006e5c: 81 c7 e0 08 ret 40006e60: 81 e8 00 00 restore { register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40006e64: 80 a0 60 02 cmp %g1, 2 40006e68: 08 bf ff fd bleu 40006e5c 40006e6c: b0 10 20 04 mov 4, %i0 40006e70: 81 c7 e0 08 ret <== NOT EXECUTED 40006e74: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED &the_semaphore->Core_control.mutex, SEMAPHORE_MP_OBJECT_WAS_DELETED, CORE_MUTEX_WAS_DELETED ); } else { _CORE_semaphore_Flush( 40006e78: 92 10 20 00 clr %o1 40006e7c: 40 00 04 cd call 400081b0 <_CORE_semaphore_Flush> 40006e80: 94 10 20 02 mov 2, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006e84: 90 14 20 48 or %l0, 0x48, %o0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40006e88: c2 06 20 08 ld [ %i0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006e8c: c6 12 20 10 lduh [ %o0 + 0x10 ], %g3 40006e90: 05 00 00 3f sethi %hi(0xfc00), %g2 40006e94: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40006e98: 82 08 40 02 and %g1, %g2, %g1 40006e9c: 80 a0 40 03 cmp %g1, %g3 40006ea0: 38 80 00 06 bgu,a 40006eb8 40006ea4: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40006ea8: c4 02 20 20 ld [ %o0 + 0x20 ], %g2 40006eac: 83 28 60 02 sll %g1, 2, %g1 40006eb0: 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; 40006eb4: c0 26 20 0c clr [ %i0 + 0xc ] RTEMS_INLINE_ROUTINE void _Semaphore_Free ( Semaphore_Control *the_semaphore ) { _Objects_Free( &_Semaphore_Information, &the_semaphore->Object ); 40006eb8: 40 00 07 a0 call 40008d38 <_Objects_Free> 40006ebc: 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 ) 40006ec0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006ec4: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 40006ec8: b0 10 20 00 clr %i0 40006ecc: 84 00 bf ff add %g2, -1, %g2 40006ed0: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 40006ed4: c6 00 61 90 ld [ %g1 + 0x190 ], %g3 40006ed8: 80 a0 e0 00 cmp %g3, 0 40006edc: 12 80 00 04 bne 40006eec 40006ee0: 01 00 00 00 nop _Thread_Dispatch(); 40006ee4: 40 00 0d 00 call 4000a2e4 <_Thread_Dispatch> 40006ee8: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006eec: 81 c7 e0 08 ret 40006ef0: 81 e8 00 00 restore !_Attributes_Is_simple_binary_semaphore( the_semaphore->attribute_set ) ) { _Thread_Enable_dispatch(); return RTEMS_RESOURCE_IN_USE; } _CORE_mutex_Flush( 40006ef4: 90 06 20 14 add %i0, 0x14, %o0 40006ef8: 92 10 20 00 clr %o1 40006efc: 40 00 03 f0 call 40007ebc <_CORE_mutex_Flush> 40006f00: 94 10 20 04 mov 4, %o2 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40006f04: 10 bf ff e1 b 40006e88 40006f08: 90 14 20 48 or %l0, 0x48, %o0 400073ac : #endif rtems_status_code rtems_semaphore_flush( rtems_id id ) { 400073ac: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 400073b0: 11 10 00 71 sethi %hi(0x4001c400), %o0 400073b4: 92 10 00 18 mov %i0, %o1 400073b8: 90 12 23 50 or %o0, 0x350, %o0 400073bc: 40 00 08 75 call 40009590 <_Objects_Get> 400073c0: 94 07 bf f4 add %fp, -12, %o2 register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 400073c4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400073c8: 80 a0 60 00 cmp %g1, 0 400073cc: 12 80 00 16 bne 40007424 400073d0: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 400073d4: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 400073d8: 80 88 60 30 btst 0x30, %g1 400073dc: 12 80 00 16 bne 40007434 400073e0: 90 02 20 14 add %o0, 0x14, %o0 &the_semaphore->Core_control.mutex, SEND_OBJECT_WAS_DELETED, CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT ); } else { _CORE_semaphore_Flush( 400073e4: 92 10 20 00 clr %o1 <== NOT EXECUTED 400073e8: 40 00 05 45 call 400088fc <_CORE_semaphore_Flush> <== NOT EXECUTED 400073ec: 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 ) 400073f0: 03 10 00 72 sethi %hi(0x4001c800), %g1 400073f4: c4 00 60 a0 ld [ %g1 + 0xa0 ], %g2 ! 4001c8a0 <_Thread_Dispatch_disable_level> 400073f8: b0 10 20 00 clr %i0 400073fc: 84 00 bf ff add %g2, -1, %g2 40007400: c4 20 60 a0 st %g2, [ %g1 + 0xa0 ] 40007404: c6 00 60 a0 ld [ %g1 + 0xa0 ], %g3 40007408: 80 a0 e0 00 cmp %g3, 0 4000740c: 12 80 00 04 bne 4000741c 40007410: 01 00 00 00 nop _Thread_Dispatch(); 40007414: 40 00 0d 4b call 4000a940 <_Thread_Dispatch> 40007418: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000741c: 81 c7 e0 08 ret 40007420: 81 e8 00 00 restore { register Semaphore_Control *the_semaphore; Objects_Locations location; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 40007424: 08 bf ff fe bleu 4000741c <== NOT EXECUTED 40007428: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED 4000742c: 81 c7 e0 08 ret <== NOT EXECUTED 40007430: 91 e8 20 19 restore %g0, 0x19, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Flush( 40007434: 92 10 20 00 clr %o1 40007438: 40 00 04 74 call 40008608 <_CORE_mutex_Flush> 4000743c: 94 10 20 01 mov 1, %o2 40007440: 30 bf ff ec b,a 400073f0 40006f0c : rtems_status_code rtems_semaphore_obtain( rtems_id id, uint32_t option_set, rtems_interval timeout ) { 40006f0c: 9d e3 bf 90 save %sp, -112, %sp Objects_Id id, Objects_Locations *location, ISR_Level *level ) { return (Semaphore_Control *) 40006f10: 11 10 00 6b sethi %hi(0x4001ac00), %o0 40006f14: 92 10 00 18 mov %i0, %o1 40006f18: 90 12 20 48 or %o0, 0x48, %o0 40006f1c: 94 07 bf f4 add %fp, -12, %o2 40006f20: 40 00 07 ab call 40008dcc <_Objects_Get_isr_disable> 40006f24: 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 ) { 40006f28: c2 07 bf f4 ld [ %fp + -12 ], %g1 40006f2c: 80 a0 60 00 cmp %g1, 0 40006f30: 12 80 00 19 bne 40006f94 40006f34: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 40006f38: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40006f3c: 80 88 60 30 btst 0x30, %g1 40006f40: 12 80 00 1b bne 40006fac 40006f44: 23 10 00 6b sethi %hi(0x4001ac00), %l1 Thread_Control *executing; ISR_Level level = *level_p; /* disabled when you get here */ executing = _Thread_Executing; 40006f48: 27 10 00 6b sethi %hi(0x4001ac00), %l3 40006f4c: e4 04 e2 6c ld [ %l3 + 0x26c ], %l2 ! 4001ae6c <_Thread_Executing> Watchdog_Interval timeout, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 40006f50: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL; 40006f54: c0 24 a0 34 clr [ %l2 + 0x34 ] if ( the_semaphore->count != 0 ) { 40006f58: c2 04 20 5c ld [ %l0 + 0x5c ], %g1 40006f5c: 80 a0 60 00 cmp %g1, 0 40006f60: 12 80 00 8f bne 4000719c 40006f64: 80 8e 60 01 btst 1, %i1 the_semaphore->count -= 1; _ISR_Enable( level ); return; } if ( !wait ) { 40006f68: 02 80 00 73 be 40007134 40006f6c: 01 00 00 00 nop _ISR_Enable( level ); 40006f70: 7f ff ec 1b call 40001fdc 40006f74: 01 00 00 00 nop executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT; 40006f78: 82 10 20 01 mov 1, %g1 ! 1 40006f7c: c2 24 a0 34 st %g1, [ %l2 + 0x34 ] id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, &level ); return _Semaphore_Translate_core_semaphore_return_code( 40006f80: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 40006f84: 40 00 00 f4 call 40007354 <_Semaphore_Translate_core_semaphore_return_code> 40006f88: d0 00 60 34 ld [ %g1 + 0x34 ], %o0 _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006f8c: 81 c7 e0 08 ret 40006f90: 91 e8 00 08 restore %g0, %o0, %o0 register Semaphore_Control *the_semaphore; Objects_Locations location; ISR_Level level; the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level ); switch ( location ) { 40006f94: 80 a0 60 02 cmp %g1, 2 40006f98: 08 bf ff fd bleu 40006f8c 40006f9c: 90 10 20 04 mov 4, %o0 40006fa0: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED return _Semaphore_Translate_core_semaphore_return_code( _Thread_Executing->Wait.return_code ); } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40006fa4: 81 c7 e0 08 ret <== NOT EXECUTED 40006fa8: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 40006fac: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 40006fb0: 80 a0 60 00 cmp %g1, 0 40006fb4: 02 80 00 0e be 40006fec 40006fb8: 27 10 00 6b sethi %hi(0x4001ac00), %l3 40006fbc: 80 8e 60 01 btst 1, %i1 40006fc0: 12 80 00 0c bne 40006ff0 40006fc4: c6 04 e2 6c ld [ %l3 + 0x26c ], %g3 40006fc8: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40006fcc: c4 00 63 70 ld [ %g1 + 0x370 ], %g2 ! 4001af70 <_System_state_Current> 40006fd0: 80 a0 a0 01 cmp %g2, 1 40006fd4: 08 80 00 07 bleu 40006ff0 40006fd8: 90 10 20 00 clr %o0 40006fdc: 92 10 20 00 clr %o1 <== NOT EXECUTED 40006fe0: 40 00 06 1b call 4000884c <_Internal_error_Occurred> <== NOT EXECUTED 40006fe4: 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; 40006fe8: 27 10 00 6b sethi %hi(0x4001ac00), %l3 <== NOT EXECUTED 40006fec: c6 04 e2 6c ld [ %l3 + 0x26c ], %g3 ! 4001ae6c <_Thread_Executing> CORE_mutex_Control *the_mutex, ISR_Level *level_p ) { Thread_Control *executing; ISR_Level level = *level_p; 40006ff0: d0 07 bf f0 ld [ %fp + -16 ], %o0 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; 40006ff4: c0 20 e0 34 clr [ %g3 + 0x34 ] if ( !_CORE_mutex_Is_locked( the_mutex ) ) { 40006ff8: c2 04 20 64 ld [ %l0 + 0x64 ], %g1 40006ffc: 80 a0 60 00 cmp %g1, 0 40007000: 22 80 00 37 be,a 400070dc 40007004: c2 04 20 70 ld [ %l0 + 0x70 ], %g1 the_mutex->lock = CORE_MUTEX_LOCKED; 40007008: c0 24 20 64 clr [ %l0 + 0x64 ] the_mutex->holder = executing; 4000700c: c6 24 20 70 st %g3, [ %l0 + 0x70 ] the_mutex->holder_id = executing->Object.id; 40007010: c2 00 e0 08 ld [ %g3 + 8 ], %g1 */ RTEMS_INLINE_ROUTINE boolean _CORE_mutex_Is_inherit_priority( CORE_mutex_Attributes *the_attribute ) { return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; 40007014: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; 40007018: 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; 4000701c: c2 24 20 74 st %g1, [ %l0 + 0x74 ] the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 40007020: 80 a0 a0 02 cmp %g2, 2 40007024: 12 80 00 24 bne 400070b4 40007028: c8 24 20 68 st %g4, [ %l0 + 0x68 ] _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; 4000702c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 40007030: 82 00 60 01 inc %g1 40007034: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { 40007038: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 4000703c: 80 a0 a0 03 cmp %g2, 3 40007040: 12 80 00 20 bne 400070c0 40007044: 01 00 00 00 nop */ { Priority_Control ceiling; Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; 40007048: c4 04 20 60 ld [ %l0 + 0x60 ], %g2 <== NOT EXECUTED current = executing->current_priority; 4000704c: c2 00 e0 14 ld [ %g3 + 0x14 ], %g1 <== NOT EXECUTED if ( current == ceiling ) { 40007050: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40007054: 02 80 00 79 be 40007238 <== NOT EXECUTED 40007058: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED _ISR_Enable( level ); return 0; } if ( current > ceiling ) { 4000705c: 1a 80 00 6d bcc 40007210 <== NOT EXECUTED 40007060: 82 10 20 06 mov 6, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007064: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 40007068: 82 00 60 01 inc %g1 <== NOT EXECUTED 4000706c: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED _Thread_Disable_dispatch(); _ISR_Enable( level ); 40007070: 7f ff eb db call 40001fdc <== NOT EXECUTED 40007074: 01 00 00 00 nop <== NOT EXECUTED _Thread_Change_priority( 40007078: d2 04 20 60 ld [ %l0 + 0x60 ], %o1 <== NOT EXECUTED 4000707c: d0 04 20 70 ld [ %l0 + 0x70 ], %o0 <== NOT EXECUTED 40007080: 40 00 0b 75 call 40009e54 <_Thread_Change_priority> <== NOT EXECUTED 40007084: 94 10 20 00 clr %o2 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007088: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 <== NOT EXECUTED 4000708c: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40007090: c2 24 61 90 st %g1, [ %l1 + 0x190 ] <== NOT EXECUTED 40007094: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 <== NOT EXECUTED 40007098: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000709c: 32 80 00 0c bne,a 400070cc <== NOT EXECUTED 400070a0: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED _Thread_Dispatch(); 400070a4: 40 00 0c 90 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 400070a8: 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( 400070ac: 10 80 00 08 b 400070cc <== NOT EXECUTED 400070b0: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED if ( !_CORE_mutex_Is_locked( the_mutex ) ) { the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->holder_id = executing->Object.id; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 400070b4: 80 a0 a0 03 cmp %g2, 3 <== NOT EXECUTED 400070b8: 22 bf ff de be,a 40007030 <== NOT EXECUTED 400070bc: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) executing->resource_count++; if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) { _ISR_Enable( level ); 400070c0: 7f ff eb c7 call 40001fdc 400070c4: 01 00 00 00 nop 400070c8: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 400070cc: 40 00 00 98 call 4000732c <_Semaphore_Translate_core_mutex_return_code> 400070d0: 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 */ } 400070d4: 81 c7 e0 08 ret 400070d8: 91 e8 00 08 restore %g0, %o0, %o0 /* * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { 400070dc: 80 a0 40 03 cmp %g1, %g3 400070e0: 12 80 00 0d bne 40007114 400070e4: 80 8e 60 01 btst 1, %i1 switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400070e8: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 400070ec: 80 a0 60 00 cmp %g1, 0 400070f0: 12 80 00 40 bne 400071f0 400070f4: 80 a0 60 01 cmp %g1, 1 case CORE_MUTEX_NESTING_ACQUIRES: the_mutex->nest_count++; 400070f8: c2 04 20 68 ld [ %l0 + 0x68 ], %g1 400070fc: 82 00 60 01 inc %g1 40007100: c2 24 20 68 st %g1, [ %l0 + 0x68 ] _ISR_Enable( level ); 40007104: 7f ff eb b6 call 40001fdc 40007108: 01 00 00 00 nop id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, level ); return _Semaphore_Translate_core_mutex_return_code( 4000710c: 10 bf ff f0 b 400070cc 40007110: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 40007114: 02 80 00 28 be 400071b4 40007118: c6 04 e2 6c ld [ %l3 + 0x26c ], %g3 4000711c: 7f ff eb b0 call 40001fdc 40007120: d0 07 bf f0 ld [ %fp + -16 ], %o0 40007124: c4 04 e2 6c ld [ %l3 + 0x26c ], %g2 40007128: 82 10 20 01 mov 1, %g1 4000712c: 10 bf ff e7 b 400070c8 40007130: c2 20 a0 34 st %g1, [ %g2 + 0x34 ] rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007134: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 40007138: 82 00 60 01 inc %g1 4000713c: c2 24 61 90 st %g1, [ %l1 + 0x190 ] RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section ( Thread_queue_Control *the_thread_queue ) { the_thread_queue->sync_state = THREAD_QUEUE_NOTHING_HAPPENED; 40007140: 82 10 20 01 mov 1, %g1 40007144: 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; 40007148: f0 24 a0 20 st %i0, [ %l2 + 0x20 ] return; } _Thread_Disable_dispatch(); _Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue ); executing->Wait.queue = &the_semaphore->Wait_queue; 4000714c: a0 04 20 14 add %l0, 0x14, %l0 40007150: e0 24 a0 44 st %l0, [ %l2 + 0x44 ] executing->Wait.id = id; _ISR_Enable( level ); 40007154: 7f ff eb a2 call 40001fdc 40007158: 01 00 00 00 nop _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout ); 4000715c: 90 10 00 10 mov %l0, %o0 40007160: 92 10 00 1a mov %i2, %o1 40007164: 15 10 00 2b sethi %hi(0x4000ac00), %o2 40007168: 40 00 0d cf call 4000a8a4 <_Thread_queue_Enqueue_with_handler> 4000716c: 94 12 a1 e4 or %o2, 0x1e4, %o2 ! 4000ade4 <_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 ) 40007170: c2 04 61 90 ld [ %l1 + 0x190 ], %g1 40007174: 82 00 7f ff add %g1, -1, %g1 40007178: c2 24 61 90 st %g1, [ %l1 + 0x190 ] 4000717c: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 40007180: 80 a0 a0 00 cmp %g2, 0 40007184: 32 bf ff 80 bne,a 40006f84 40007188: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED _Thread_Dispatch(); 4000718c: 40 00 0c 56 call 4000a2e4 <_Thread_Dispatch> 40007190: 01 00 00 00 nop id, ((_Options_Is_no_wait( option_set )) ? FALSE : TRUE), timeout, &level ); return _Semaphore_Translate_core_semaphore_return_code( 40007194: 10 bf ff 7c b 40006f84 40007198: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 /* disabled when you get here */ executing = _Thread_Executing; executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL; if ( the_semaphore->count != 0 ) { the_semaphore->count -= 1; 4000719c: 82 00 7f ff add %g1, -1, %g1 400071a0: c2 24 20 5c st %g1, [ %l0 + 0x5c ] _ISR_Enable( level ); 400071a4: 7f ff eb 8e call 40001fdc 400071a8: 01 00 00 00 nop 400071ac: 10 bf ff 76 b 40006f84 400071b0: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400071b4: c4 04 61 90 ld [ %l1 + 0x190 ], %g2 400071b8: 82 10 20 01 mov 1, %g1 400071bc: c2 24 20 44 st %g1, [ %l0 + 0x44 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { _CORE_mutex_Seize( 400071c0: f0 20 e0 20 st %i0, [ %g3 + 0x20 ] 400071c4: 84 00 a0 01 inc %g2 400071c8: a0 04 20 14 add %l0, 0x14, %l0 400071cc: c4 24 61 90 st %g2, [ %l1 + 0x190 ] 400071d0: e0 20 e0 44 st %l0, [ %g3 + 0x44 ] 400071d4: 7f ff eb 82 call 40001fdc 400071d8: d0 07 bf f0 ld [ %fp + -16 ], %o0 400071dc: 90 10 00 10 mov %l0, %o0 400071e0: 40 00 03 74 call 40007fb0 <_CORE_mutex_Seize_interrupt_blocking> 400071e4: 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( 400071e8: 10 bf ff b9 b 400070cc 400071ec: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 * At this point, we know the mutex was not available. If this thread * is the thread that has locked the mutex, let's see if we are allowed * to nest access. */ if ( _Thread_Is_executing( the_mutex->holder ) ) { switch ( the_mutex->Attributes.lock_nesting_behavior ) { 400071f0: 12 bf ff c9 bne 40007114 400071f4: 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; 400071f8: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 400071fc: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED _ISR_Enable( level ); 40007200: 7f ff eb 77 call 40001fdc <== NOT EXECUTED 40007204: 01 00 00 00 nop <== NOT EXECUTED 40007208: 10 bf ff b1 b 400070cc <== NOT EXECUTED 4000720c: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED ); _Thread_Enable_dispatch(); return 0; } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; 40007210: c2 20 e0 34 st %g1, [ %g3 + 0x34 ] <== NOT EXECUTED the_mutex->lock = CORE_MUTEX_UNLOCKED; 40007214: c8 24 20 64 st %g4, [ %l0 + 0x64 ] <== NOT EXECUTED the_mutex->nest_count = 0; /* undo locking above */ 40007218: c0 24 20 68 clr [ %l0 + 0x68 ] <== NOT EXECUTED executing->resource_count--; /* undo locking above */ 4000721c: c2 00 e0 1c ld [ %g3 + 0x1c ], %g1 <== NOT EXECUTED 40007220: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40007224: c2 20 e0 1c st %g1, [ %g3 + 0x1c ] <== NOT EXECUTED _ISR_Enable( level ); 40007228: 7f ff eb 6d call 40001fdc <== NOT EXECUTED 4000722c: 01 00 00 00 nop <== NOT EXECUTED 40007230: 10 bf ff a7 b 400070cc <== NOT EXECUTED 40007234: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED Priority_Control current; ceiling = the_mutex->Attributes.priority_ceiling; current = executing->current_priority; if ( current == ceiling ) { _ISR_Enable( level ); 40007238: 7f ff eb 69 call 40001fdc <== NOT EXECUTED 4000723c: 01 00 00 00 nop <== NOT EXECUTED 40007240: 10 bf ff a3 b 400070cc <== NOT EXECUTED 40007244: c2 04 e2 6c ld [ %l3 + 0x26c ], %g1 <== NOT EXECUTED 40007248 : #endif rtems_status_code rtems_semaphore_release( rtems_id id ) { 40007248: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get ( Objects_Id id, Objects_Locations *location ) { return (Semaphore_Control *) 4000724c: 11 10 00 6b sethi %hi(0x4001ac00), %o0 40007250: 92 10 00 18 mov %i0, %o1 40007254: 90 12 20 48 or %o0, 0x48, %o0 40007258: 40 00 06 fb call 40008e44 <_Objects_Get> 4000725c: 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 ) { 40007260: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007264: 80 a0 60 00 cmp %g1, 0 40007268: 12 80 00 16 bne 400072c0 4000726c: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) { 40007270: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40007274: 80 88 60 30 btst 0x30, %g1 40007278: 02 80 00 17 be 400072d4 4000727c: 92 10 00 18 mov %i0, %o1 mutex_status = _CORE_mutex_Surrender( 40007280: 94 10 20 00 clr %o2 40007284: 40 00 03 6f call 40008040 <_CORE_mutex_Surrender> 40007288: 90 02 20 14 add %o0, 0x14, %o0 4000728c: b0 10 00 08 mov %o0, %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007290: 03 10 00 6b sethi %hi(0x4001ac00), %g1 40007294: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 40007298: 84 00 bf ff add %g2, -1, %g2 4000729c: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 400072a0: c6 00 61 90 ld [ %g1 + 0x190 ], %g3 400072a4: 80 a0 e0 00 cmp %g3, 0 400072a8: 02 80 00 1e be 40007320 400072ac: 01 00 00 00 nop &the_semaphore->Core_control.mutex, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return _Semaphore_Translate_core_mutex_return_code( mutex_status ); 400072b0: 40 00 00 1f call 4000732c <_Semaphore_Translate_core_mutex_return_code> 400072b4: 90 10 00 18 mov %i0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400072b8: 81 c7 e0 08 ret 400072bc: 91 e8 00 08 restore %g0, %o0, %o0 Objects_Locations location; CORE_mutex_Status mutex_status; CORE_semaphore_Status semaphore_status; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { 400072c0: 08 bf ff fe bleu 400072b8 400072c4: 90 10 20 04 mov 4, %o0 400072c8: 90 10 20 19 mov 0x19, %o0 <== NOT EXECUTED _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400072cc: 81 c7 e0 08 ret <== NOT EXECUTED 400072d0: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return _Semaphore_Translate_core_mutex_return_code( mutex_status ); } else { semaphore_status = _CORE_semaphore_Surrender( 400072d4: 94 10 20 00 clr %o2 400072d8: 40 00 03 c9 call 400081fc <_CORE_semaphore_Surrender> 400072dc: 90 02 20 14 add %o0, 0x14, %o0 400072e0: b0 10 00 08 mov %o0, %i0 400072e4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400072e8: c4 00 61 90 ld [ %g1 + 0x190 ], %g2 ! 4001ad90 <_Thread_Dispatch_disable_level> 400072ec: 84 00 bf ff add %g2, -1, %g2 400072f0: c4 20 61 90 st %g2, [ %g1 + 0x190 ] 400072f4: c6 00 61 90 ld [ %g1 + 0x190 ], %g3 400072f8: 80 a0 e0 00 cmp %g3, 0 400072fc: 02 80 00 06 be 40007314 40007300: 01 00 00 00 nop &the_semaphore->Core_control.semaphore, id, MUTEX_MP_SUPPORT ); _Thread_Enable_dispatch(); return 40007304: 40 00 00 14 call 40007354 <_Semaphore_Translate_core_semaphore_return_code> 40007308: 90 10 00 18 mov %i0, %o0 _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); } } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000730c: 81 c7 e0 08 ret 40007310: 91 e8 00 08 restore %g0, %o0, %o0 _Thread_Dispatch(); 40007314: 40 00 0b f4 call 4000a2e4 <_Thread_Dispatch> 40007318: 01 00 00 00 nop 4000731c: 30 bf ff fa b,a 40007304 40007320: 40 00 0b f1 call 4000a2e4 <_Thread_Dispatch> 40007324: 01 00 00 00 nop 40007328: 30 bf ff e2 b,a 400072b0 400189c0 : */ void rtems_shutdown_executive( uint32_t result ) { 400189c0: 9d e3 bf 98 save %sp, -104, %sp if ( _System_state_Current != SYSTEM_STATE_SHUTDOWN ) { 400189c4: 33 10 00 6b sethi %hi(0x4001ac00), %i1 400189c8: c2 06 63 70 ld [ %i1 + 0x370 ], %g1 ! 4001af70 <_System_state_Current> 400189cc: 80 a0 60 04 cmp %g1, 4 400189d0: 02 80 00 0c be 40018a00 400189d4: 11 10 00 67 sethi %hi(0x40019c00), %o0 #if defined(__USE_INIT_FINI__) extern void _fini( void ); atexit( _fini ); 400189d8: 7f ff da 31 call 4000f29c 400189dc: 90 12 20 14 or %o0, 0x14, %o0 ! 40019c14 <_fini> * routine which initialized the system. */ RTEMS_INLINE_ROUTINE void _Thread_Stop_multitasking( void ) { _Context_Switch( &_Thread_Executing->Registers, &_Thread_BSP_context ); 400189e0: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400189e4: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001ae6c <_Thread_Executing> 400189e8: 84 10 20 04 mov 4, %g2 400189ec: b0 06 20 e0 add %i0, 0xe0, %i0 400189f0: c4 26 63 70 st %g2, [ %i1 + 0x370 ] 400189f4: 33 10 00 6b sethi %hi(0x4001ac00), %i1 400189f8: 7f ff cc 62 call 4000bb80 <_CPU_Context_switch> 400189fc: 93 ee 61 08 restore %i1, 0x108, %o1 40018a00: 81 c7 e0 08 ret <== NOT EXECUTED 40018a04: 81 e8 00 00 restore <== NOT EXECUTED 40012d94 : rtems_status_code rtems_signal_send( Objects_Id id, rtems_signal_set signal_set ) { 40012d94: 9d e3 bf 90 save %sp, -112, %sp 40012d98: 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 ) 40012d9c: 80 a6 60 00 cmp %i1, 0 40012da0: 02 80 00 1b be 40012e0c 40012da4: 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 ) ) { 40012da8: 80 a2 60 00 cmp %o1, 0 40012dac: 12 80 00 1a bne 40012e14 40012db0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40012db4: 23 10 00 d1 sethi %hi(0x40034400), %l1 40012db8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 40012dbc: 82 00 60 01 inc %g1 40012dc0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40012dc4: 03 10 00 d2 sethi %hi(0x40034800), %g1 40012dc8: e0 00 60 3c ld [ %g1 + 0x3c ], %l0 ! 4003483c <_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; 40012dcc: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; 40012dd0: f0 04 21 6c ld [ %l0 + 0x16c ], %i0 asr = &api->Signal; if ( ! _ASR_Is_null_handler( asr->handler ) ) { 40012dd4: c2 06 20 4c ld [ %i0 + 0x4c ], %g1 40012dd8: 80 a0 60 00 cmp %g1, 0 40012ddc: 32 80 00 2c bne,a 40012e8c 40012de0: c2 06 20 48 ld [ %i0 + 0x48 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012de4: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012de8: b0 10 20 0b mov 0xb, %i0 40012dec: 82 00 7f ff add %g1, -1, %g1 40012df0: c2 24 63 60 st %g1, [ %l1 + 0x360 ] 40012df4: c4 04 63 60 ld [ %l1 + 0x360 ], %g2 40012df8: 80 a0 a0 00 cmp %g2, 0 40012dfc: 12 80 00 0b bne 40012e28 40012e00: 01 00 00 00 nop _Thread_Dispatch(); 40012e04: 40 00 13 4a call 40017b2c <_Thread_Dispatch> 40012e08: 01 00 00 00 nop 40012e0c: 81 c7 e0 08 ret 40012e10: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40012e14: 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 ) { 40012e18: 80 a0 a0 04 cmp %g2, 4 40012e1c: 08 80 00 05 bleu 40012e30 40012e20: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40012e24: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_NOT_DEFINED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40012e28: 81 c7 e0 08 ret 40012e2c: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40012e30: 80 a0 60 01 cmp %g1, 1 40012e34: 12 bf ff f6 bne 40012e0c 40012e38: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40012e3c: 83 28 a0 02 sll %g2, 2, %g1 40012e40: 05 10 00 d1 sethi %hi(0x40034400), %g2 40012e44: 84 10 a2 c0 or %g2, 0x2c0, %g2 ! 400346c0 <_Objects_Information_table> 40012e48: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40012e4c: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40012e50: 80 a2 20 00 cmp %o0, 0 40012e54: 02 bf ff f5 be 40012e28 40012e58: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40012e5c: 40 00 0e 0c call 4001668c <_Objects_Get> 40012e60: 94 07 bf f4 add %fp, -12, %o2 if ( !signal_set ) return RTEMS_INVALID_NUMBER; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40012e64: c2 07 bf f4 ld [ %fp + -12 ], %g1 40012e68: a0 10 00 08 mov %o0, %l0 40012e6c: 80 a0 60 00 cmp %g1, 0 40012e70: 02 bf ff d8 be 40012dd0 40012e74: 23 10 00 d1 sethi %hi(0x40034400), %l1 40012e78: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40012e7c: 18 bf ff e4 bgu 40012e0c <== NOT EXECUTED 40012e80: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40012e84: 81 c7 e0 08 ret <== NOT EXECUTED 40012e88: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; if ( ! _ASR_Is_null_handler( asr->handler ) ) { if ( asr->is_enabled ) { 40012e8c: 80 a0 60 00 cmp %g1, 0 40012e90: 02 80 00 19 be 40012ef4 40012e94: 01 00 00 00 nop rtems_signal_set *signal_set ) { ISR_Level _level; _ISR_Disable( _level ); 40012e98: 7f ff df 95 call 4000acec 40012e9c: 01 00 00 00 nop *signal_set |= signals; 40012ea0: c2 06 20 54 ld [ %i0 + 0x54 ], %g1 40012ea4: 82 10 40 19 or %g1, %i1, %g1 40012ea8: c2 26 20 54 st %g1, [ %i0 + 0x54 ] _ISR_Enable( _level ); 40012eac: 7f ff df 94 call 4000acfc 40012eb0: 01 00 00 00 nop _ASR_Post_signals( signal_set, &asr->signals_posted ); the_thread->do_post_task_switch_extension = TRUE; if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 40012eb4: 03 10 00 d2 sethi %hi(0x40034800), %g1 40012eb8: c4 00 60 24 ld [ %g1 + 0x24 ], %g2 ! 40034824 <_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; 40012ebc: 86 10 20 01 mov 1, %g3 if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 40012ec0: 80 a0 a0 00 cmp %g2, 0 40012ec4: 02 80 00 09 be 40012ee8 40012ec8: c6 24 20 78 st %g3, [ %l0 + 0x78 ] 40012ecc: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 40012ed0: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 4003483c <_Thread_Executing> <== NOT EXECUTED 40012ed4: 80 a4 00 02 cmp %l0, %g2 <== NOT EXECUTED 40012ed8: 12 80 00 04 bne 40012ee8 <== NOT EXECUTED 40012edc: 01 00 00 00 nop <== NOT EXECUTED _ISR_Signals_to_thread_executing = TRUE; 40012ee0: 03 10 00 d2 sethi %hi(0x40034800), %g1 <== NOT EXECUTED 40012ee4: c6 20 60 e8 st %g3, [ %g1 + 0xe8 ] ! 400348e8 <_ISR_Signals_to_thread_executing> <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40012ee8: c2 04 63 60 ld [ %l1 + 0x360 ], %g1 40012eec: 10 bf ff c0 b 40012dec 40012ef0: b0 10 20 00 clr %i0 rtems_signal_set *signal_set ) { ISR_Level _level; _ISR_Disable( _level ); 40012ef4: 7f ff df 7e call 4000acec 40012ef8: 01 00 00 00 nop *signal_set |= signals; 40012efc: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 40012f00: 82 10 40 19 or %g1, %i1, %g1 40012f04: c2 26 20 58 st %g1, [ %i0 + 0x58 ] _ISR_Enable( _level ); 40012f08: 7f ff df 7d call 4000acfc 40012f0c: 01 00 00 00 nop 40012f10: 30 bf ff f6 b,a 40012ee8 40003ad0 : /* * Check if blown */ boolean rtems_stack_checker_is_blown( void ) { 40003ad0: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack; 40003ad4: 21 10 00 7b sethi %hi(0x4001ec00), %l0 <== NOT EXECUTED 40003ad8: c2 04 22 4c ld [ %l0 + 0x24c ], %g1 ! 4001ee4c <_Thread_Executing> <== NOT EXECUTED ) { void *sp = __builtin_frame_address(0); #if defined(__GNUC__) if ( sp < the_stack->area ) { 40003adc: d0 00 60 d4 ld [ %g1 + 0xd4 ], %o0 <== NOT EXECUTED 40003ae0: 80 a7 80 08 cmp %fp, %o0 <== NOT EXECUTED 40003ae4: 0a 80 00 07 bcs 40003b00 <== NOT EXECUTED 40003ae8: b0 10 20 00 clr %i0 <== NOT EXECUTED 40003aec: c2 00 60 d0 ld [ %g1 + 0xd0 ], %g1 <== NOT EXECUTED 40003af0: 82 02 00 01 add %o0, %g1, %g1 <== NOT EXECUTED 40003af4: 80 a0 40 1e cmp %g1, %fp <== NOT EXECUTED 40003af8: 84 60 3f ff subx %g0, -1, %g2 <== NOT EXECUTED 40003afc: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED /* * The stack checker must be initialized before the pattern is there * to check. */ if ( Stack_check_Initialized ) { 40003b00: 03 10 00 7a sethi %hi(0x4001e800), %g1 <== NOT EXECUTED 40003b04: c4 00 61 fc ld [ %g1 + 0x1fc ], %g2 ! 4001e9fc <== NOT EXECUTED 40003b08: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40003b0c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40003b10: 12 80 00 0d bne 40003b44 <== NOT EXECUTED 40003b14: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED } /* * The Stack Pointer and the Pattern Area are OK so return FALSE. */ if ( sp_ok && pattern_ok ) 40003b18: 80 8e 20 ff btst 0xff, %i0 <== NOT EXECUTED 40003b1c: 22 80 00 06 be,a 40003b34 <== NOT EXECUTED 40003b20: d0 04 22 4c ld [ %l0 + 0x24c ], %o0 <== NOT EXECUTED 40003b24: 80 88 60 ff btst 0xff, %g1 <== NOT EXECUTED 40003b28: 12 80 00 05 bne 40003b3c <== NOT EXECUTED 40003b2c: 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 ); 40003b30: d0 04 22 4c ld [ %l0 + 0x24c ], %o0 <== NOT EXECUTED 40003b34: 7f ff ff cd call 40003a68 <== NOT EXECUTED 40003b38: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED return TRUE; } 40003b3c: 81 c7 e0 08 ret <== NOT EXECUTED 40003b40: 81 e8 00 00 restore <== NOT EXECUTED /* * The stack checker must be initialized before the pattern is there * to check. */ if ( Stack_check_Initialized ) { pattern_ok = (!memcmp( 40003b44: 90 02 20 08 add %o0, 8, %o0 <== NOT EXECUTED 40003b48: 13 10 00 7a sethi %hi(0x4001e800), %o1 <== NOT EXECUTED 40003b4c: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40003b50: 40 00 35 6c call 40011100 <== NOT EXECUTED 40003b54: 92 12 63 84 or %o1, 0x384, %o1 <== NOT EXECUTED 40003b58: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40003b5c: 92 60 3f ff subx %g0, -1, %o1 <== NOT EXECUTED 40003b60: 10 bf ff ee b 40003b18 <== NOT EXECUTED 40003b64: 82 10 00 09 mov %o1, %g1 <== NOT EXECUTED 40003a4c : } void rtems_stack_checker_report_usage( void ) { rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin ); 40003a4c: 13 10 00 14 sethi %hi(0x40005000), %o1 <== NOT EXECUTED 40003a50: 90 10 20 00 clr %o0 <== NOT EXECUTED 40003a54: 92 12 63 c4 or %o1, 0x3c4, %o1 <== NOT EXECUTED 40003a58: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40003a5c: 7f ff ff e2 call 400039e4 <== NOT EXECUTED 40003a60: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40003a64: 01 00 00 00 nop 400039e4 : void rtems_stack_checker_report_usage_with_plugin( void *context, rtems_printk_plugin_t print ) { 400039e4: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if (Stack_check_Initialized == 0) 400039e8: 03 10 00 7a sethi %hi(0x4001e800), %g1 <== NOT EXECUTED 400039ec: c4 00 61 fc ld [ %g1 + 0x1fc ], %g2 ! 4001e9fc <== NOT EXECUTED 400039f0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400039f4: 02 80 00 14 be 40003a44 <== NOT EXECUTED 400039f8: 23 10 00 7a sethi %hi(0x4001e800), %l1 <== NOT EXECUTED return; print_context = context; print_handler = print; 400039fc: 21 10 00 7a sethi %hi(0x4001e800), %l0 <== NOT EXECUTED ) { if (Stack_check_Initialized == 0) return; print_context = context; 40003a00: f0 24 62 00 st %i0, [ %l1 + 0x200 ] <== NOT EXECUTED print_handler = print; 40003a04: f2 24 22 04 st %i1, [ %l0 + 0x204 ] <== NOT EXECUTED (*print)( context, "Stack usage by thread\n"); 40003a08: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003a0c: 13 10 00 70 sethi %hi(0x4001c000), %o1 <== NOT EXECUTED 40003a10: 9f c6 40 00 call %i1 <== NOT EXECUTED 40003a14: 92 12 61 d0 or %o1, 0x1d0, %o1 ! 4001c1d0 <== NOT EXECUTED (*print)( context, 40003a18: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40003a1c: 13 10 00 70 sethi %hi(0x4001c000), %o1 <== NOT EXECUTED 40003a20: 9f c6 40 00 call %i1 <== NOT EXECUTED 40003a24: 92 12 61 e8 or %o1, 0x1e8, %o1 ! 4001c1e8 <== 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 ); 40003a28: 11 10 00 0e sethi %hi(0x40003800), %o0 <== NOT EXECUTED 40003a2c: 40 00 18 97 call 40009c88 <== NOT EXECUTED 40003a30: 90 12 20 d4 or %o0, 0xd4, %o0 ! 400038d4 <== NOT EXECUTED /* dump interrupt stack info if any */ Stack_check_Dump_threads_usage((Thread_Control *) -1); 40003a34: 7f ff ff a8 call 400038d4 <== NOT EXECUTED 40003a38: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED print_context = NULL; 40003a3c: c0 24 62 00 clr [ %l1 + 0x200 ] <== NOT EXECUTED print_handler = NULL; 40003a40: c0 24 22 04 clr [ %l0 + 0x204 ] <== NOT EXECUTED 40003a44: 81 c7 e0 08 ret <== NOT EXECUTED 40003a48: 81 e8 00 00 restore <== NOT EXECUTED 40003c38 : */ void rtems_stack_checker_switch_extension( Thread_Control *running, Thread_Control *heir ) { 40003c38: 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; 40003c3c: c4 06 20 d4 ld [ %i0 + 0xd4 ], %g2 ) { void *sp = __builtin_frame_address(0); #if defined(__GNUC__) if ( sp < the_stack->area ) { 40003c40: 80 a7 80 02 cmp %fp, %g2 40003c44: 0a 80 00 07 bcs 40003c60 40003c48: 90 00 a0 08 add %g2, 8, %o0 return FALSE; } if ( sp > (the_stack->area + the_stack->size) ) { 40003c4c: c2 06 20 d0 ld [ %i0 + 0xd0 ], %g1 40003c50: 82 00 80 01 add %g2, %g1, %g1 40003c54: 80 a7 80 01 cmp %fp, %g1 40003c58: 28 80 00 0a bleu,a 40003c80 40003c5c: 13 10 00 7a sethi %hi(0x4001e800), %o1 /* * Check for an out of bounds stack pointer or an overwrite */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); pattern_ok = (!memcmp( pattern, 40003c60: 13 10 00 7a sethi %hi(0x4001e800), %o1 <== NOT EXECUTED 40003c64: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40003c68: 40 00 35 26 call 40011100 <== NOT EXECUTED 40003c6c: 92 12 63 84 or %o1, 0x384, %o1 <== NOT EXECUTED 40003c70: 80 a0 00 08 cmp %g0, %o0 <== NOT EXECUTED 40003c74: b2 60 3f ff subx %g0, -1, %i1 <== NOT EXECUTED (void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES)); if ( !sp_ok || !pattern_ok ) { Stack_check_report_blown_task( running, pattern_ok ); 40003c78: 7f ff ff 7c call 40003a68 <== NOT EXECUTED 40003c7c: 81 e8 00 00 restore <== NOT EXECUTED /* * Check for an out of bounds stack pointer or an overwrite */ sp_ok = Stack_check_Frame_pointer_in_range( the_stack ); pattern_ok = (!memcmp( pattern, 40003c80: 94 10 20 10 mov 0x10, %o2 40003c84: 40 00 35 1f call 40011100 40003c88: 92 12 63 84 or %o1, 0x384, %o1 40003c8c: 80 a2 20 00 cmp %o0, 0 40003c90: 02 80 00 04 be 40003ca0 40003c94: 01 00 00 00 nop (void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES)); if ( !sp_ok || !pattern_ok ) { Stack_check_report_blown_task( running, pattern_ok ); 40003c98: 7f ff ff 74 call 40003a68 <== NOT EXECUTED 40003c9c: 93 e8 20 00 restore %g0, 0, %o1 <== NOT EXECUTED 40003ca0: 81 c7 e0 08 ret 40003ca4: 81 e8 00 00 restore 40009b44 : const char * rtems_status_text( rtems_status_code status ) { 40009b44: 92 10 00 08 mov %o0, %o1 <== NOT EXECUTED return rtems_assoc_name_by_local(rtems_status_assoc, status); 40009b48: 11 10 00 a8 sethi %hi(0x4002a000), %o0 <== NOT EXECUTED 40009b4c: 90 12 23 54 or %o0, 0x354, %o0 ! 4002a354 <== NOT EXECUTED 40009b50: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40009b54: 40 00 30 e9 call 40015ef8 <== NOT EXECUTED 40009b58: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40009b5c: 01 00 00 00 nop 400074e8 : */ rtems_status_code rtems_task_delete( Objects_Id id ) { 400074e8: 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 ) ) { 400074ec: 92 96 20 00 orcc %i0, 0, %o1 400074f0: 12 80 00 20 bne 40007570 400074f4: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400074f8: 21 10 00 6b sethi %hi(0x4001ac00), %l0 400074fc: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 40007500: 82 00 60 01 inc %g1 40007504: c2 24 21 90 st %g1, [ %l0 + 0x190 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40007508: 03 10 00 6b sethi %hi(0x4001ac00), %g1 4000750c: f0 00 62 6c ld [ %g1 + 0x26c ], %i0 ! 4001ae6c <_Thread_Executing> 40007510: 07 10 00 6b sethi %hi(0x4001ac00), %g3 Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; 40007514: c0 27 bf f4 clr [ %fp + -12 ] 40007518: a2 10 e0 f0 or %g3, 0xf0, %l1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_information = _Objects_Get_information( the_thread->Object.id ); 4000751c: c2 06 20 08 ld [ %i0 + 8 ], %g1 40007520: 85 30 60 16 srl %g1, 0x16, %g2 40007524: 84 08 a0 1c and %g2, 0x1c, %g2 40007528: c6 04 40 02 ld [ %l1 + %g2 ], %g3 4000752c: 83 30 60 1b srl %g1, 0x1b, %g1 40007530: 83 28 60 02 sll %g1, 2, %g1 40007534: d0 00 c0 01 ld [ %g3 + %g1 ], %o0 if ( !the_information ) { 40007538: 80 a2 20 00 cmp %o0, 0 4000753c: 12 80 00 13 bne 40007588 40007540: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007544: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 <== NOT EXECUTED 40007548: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4000754c: c2 24 21 90 st %g1, [ %l0 + 0x190 ] <== NOT EXECUTED 40007550: c4 04 21 90 ld [ %l0 + 0x190 ], %g2 <== NOT EXECUTED 40007554: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40007558: 12 80 00 04 bne 40007568 <== NOT EXECUTED 4000755c: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Dispatch(); 40007560: 40 00 0b 61 call 4000a2e4 <_Thread_Dispatch> <== NOT EXECUTED 40007564: 01 00 00 00 nop <== NOT EXECUTED 40007568: 81 c7 e0 08 ret 4000756c: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40007570: 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 ) { 40007574: 80 a0 a0 04 cmp %g2, 4 40007578: 08 80 00 1b bleu 400075e4 4000757c: 83 32 60 1b srl %o1, 0x1b, %g1 _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007580: 81 c7 e0 08 ret <== NOT EXECUTED 40007584: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INVALID_ID; /* This should never happen if _Thread_Get() works right */ } _Thread_Close( the_information, the_thread ); 40007588: 40 00 0a d9 call 4000a0ec <_Thread_Close> 4000758c: 92 10 00 18 mov %i0, %o1 40007590: c4 06 20 08 ld [ %i0 + 8 ], %g2 40007594: 92 10 00 18 mov %i0, %o1 if ( !_Objects_Is_class_valid( the_class ) ) return NULL; the_api = _Objects_Get_API( id ); return _Objects_Information_table[ the_api ][ the_class ]; 40007598: 83 30 a0 16 srl %g2, 0x16, %g1 4000759c: 82 08 60 1c and %g1, 0x1c, %g1 400075a0: c6 04 40 01 ld [ %l1 + %g1 ], %g3 400075a4: 85 30 a0 1b srl %g2, 0x1b, %g2 400075a8: 85 28 a0 02 sll %g2, 2, %g2 400075ac: 40 00 05 e3 call 40008d38 <_Objects_Free> 400075b0: d0 00 c0 02 ld [ %g3 + %g2 ], %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400075b4: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 400075b8: b0 10 20 00 clr %i0 400075bc: 82 00 7f ff add %g1, -1, %g1 400075c0: c2 24 21 90 st %g1, [ %l0 + 0x190 ] 400075c4: c4 04 21 90 ld [ %l0 + 0x190 ], %g2 400075c8: 80 a0 a0 00 cmp %g2, 0 400075cc: 12 80 00 04 bne 400075dc 400075d0: 01 00 00 00 nop _Thread_Dispatch(); 400075d4: 40 00 0b 44 call 4000a2e4 <_Thread_Dispatch> 400075d8: 01 00 00 00 nop 400075dc: 81 c7 e0 08 ret 400075e0: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 400075e4: 80 a0 60 01 cmp %g1, 1 400075e8: 12 bf ff e0 bne 40007568 400075ec: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 400075f0: 85 28 a0 02 sll %g2, 2, %g2 400075f4: 07 10 00 6b sethi %hi(0x4001ac00), %g3 400075f8: a2 10 e0 f0 or %g3, 0xf0, %l1 ! 4001acf0 <_Objects_Information_table> 400075fc: c2 04 40 02 ld [ %l1 + %g2 ], %g1 40007600: d0 00 60 04 ld [ %g1 + 4 ], %o0 if ( !information ) { 40007604: 80 a2 20 00 cmp %o0, 0 40007608: 02 bf ff f5 be 400075dc 4000760c: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007610: 40 00 06 0d call 40008e44 <_Objects_Get> 40007614: 94 07 bf f4 add %fp, -12, %o2 register Thread_Control *the_thread; Objects_Locations location; Objects_Information *the_information; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007618: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000761c: b0 10 00 08 mov %o0, %i0 40007620: 80 a0 60 00 cmp %g1, 0 40007624: 02 bf ff be be 4000751c 40007628: 21 10 00 6b sethi %hi(0x4001ac00), %l0 4000762c: 80 a0 60 02 cmp %g1, 2 40007630: 18 bf ff ce bgu 40007568 40007634: b0 10 20 19 mov 0x19, %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007638: 81 c7 e0 08 ret 4000763c: 91 e8 20 04 restore %g0, 4, %o0 40008df4 : rtems_status_code rtems_task_get_note( Objects_Id id, uint32_t notepad, uint32_t *note ) { 40008df4: 9d e3 bf 90 save %sp, -112, %sp 40008df8: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; RTEMS_API_Control *api; if ( !note ) 40008dfc: 80 a6 a0 00 cmp %i2, 0 40008e00: 02 80 00 3b be 40008eec 40008e04: 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 ) 40008e08: 80 a6 60 0f cmp %i1, 0xf 40008e0c: 18 80 00 38 bgu 40008eec 40008e10: 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 ) || 40008e14: 80 a2 60 00 cmp %o1, 0 40008e18: 12 80 00 09 bne 40008e3c 40008e1c: 07 10 00 80 sethi %hi(0x40020000), %g3 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; *note = api->Notepads[ notepad ]; 40008e20: c2 00 e0 7c ld [ %g3 + 0x7c ], %g1 ! 4002007c <_Thread_Executing> 40008e24: 87 2e 60 02 sll %i1, 2, %g3 40008e28: c4 00 61 6c ld [ %g1 + 0x16c ], %g2 40008e2c: c2 00 80 03 ld [ %g2 + %g3 ], %g1 40008e30: c2 26 80 00 st %g1, [ %i2 ] 40008e34: 81 c7 e0 08 ret 40008e38: 91 e8 20 00 restore %g0, 0, %o0 /* * Optimize the most likely case to avoid the Thread_Dispatch. */ if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 40008e3c: c2 00 e0 7c ld [ %g3 + 0x7c ], %g1 40008e40: c4 00 60 08 ld [ %g1 + 8 ], %g2 40008e44: 80 a2 40 02 cmp %o1, %g2 40008e48: 22 bf ff f8 be,a 40008e28 40008e4c: 87 2e 60 02 sll %i1, 2, %g3 <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40008e50: 83 32 60 18 srl %o1, 0x18, %g1 40008e54: 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 ) { 40008e58: 80 a0 a0 04 cmp %g2, 4 40008e5c: 08 80 00 04 bleu 40008e6c 40008e60: 83 32 60 1b srl %o1, 0x1b, %g1 _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008e64: 81 c7 e0 08 ret <== NOT EXECUTED 40008e68: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40008e6c: 80 a0 60 01 cmp %g1, 1 40008e70: 12 80 00 1f bne 40008eec 40008e74: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40008e78: 83 28 a0 02 sll %g2, 2, %g1 40008e7c: 05 10 00 7f sethi %hi(0x4001fc00), %g2 40008e80: 84 10 a3 00 or %g2, 0x300, %g2 ! 4001ff00 <_Objects_Information_table> 40008e84: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40008e88: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40008e8c: 80 a2 20 00 cmp %o0, 0 40008e90: 02 80 00 17 be 40008eec 40008e94: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40008e98: 40 00 07 53 call 4000abe4 <_Objects_Get> 40008e9c: 94 07 bf f4 add %fp, -12, %o2 *note = api->Notepads[ notepad ]; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40008ea0: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008ea4: 80 a0 60 00 cmp %g1, 0 40008ea8: 12 80 00 13 bne 40008ef4 40008eac: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; *note = api->Notepads[ notepad ]; 40008eb0: c6 02 21 6c ld [ %o0 + 0x16c ], %g3 40008eb4: 83 2e 60 02 sll %i1, 2, %g1 40008eb8: c4 00 c0 01 ld [ %g3 + %g1 ], %g2 40008ebc: c4 26 80 00 st %g2, [ %i2 ] #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008ec0: 07 10 00 7f sethi %hi(0x4001fc00), %g3 40008ec4: c2 00 e3 a0 ld [ %g3 + 0x3a0 ], %g1 ! 4001ffa0 <_Thread_Dispatch_disable_level> 40008ec8: b0 10 20 00 clr %i0 40008ecc: 82 00 7f ff add %g1, -1, %g1 40008ed0: c2 20 e3 a0 st %g1, [ %g3 + 0x3a0 ] 40008ed4: c4 00 e3 a0 ld [ %g3 + 0x3a0 ], %g2 40008ed8: 80 a0 a0 00 cmp %g2, 0 40008edc: 12 80 00 04 bne 40008eec 40008ee0: 01 00 00 00 nop _Thread_Dispatch(); 40008ee4: 40 00 0c 2c call 4000bf94 <_Thread_Dispatch> 40008ee8: 01 00 00 00 nop 40008eec: 81 c7 e0 08 ret 40008ef0: 81 e8 00 00 restore *note = api->Notepads[ notepad ]; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40008ef4: 18 bf ff fe bgu 40008eec <== NOT EXECUTED 40008ef8: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 40008efc: 81 c7 e0 08 ret <== NOT EXECUTED 40008f00: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 40007cd0 : */ rtems_status_code rtems_task_is_suspended( Objects_Id id ) { 40007cd0: 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 ) ) { 40007cd4: 92 96 20 00 orcc %i0, 0, %o1 40007cd8: 12 80 00 19 bne 40007d3c 40007cdc: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40007ce0: 05 10 00 77 sethi %hi(0x4001dc00), %g2 <== NOT EXECUTED 40007ce4: c2 00 a2 30 ld [ %g2 + 0x230 ], %g1 ! 4001de30 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40007ce8: 82 00 60 01 inc %g1 <== NOT EXECUTED 40007cec: c2 20 a2 30 st %g1, [ %g2 + 0x230 ] <== 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; 40007cf0: 03 10 00 77 sethi %hi(0x4001dc00), %g1 <== NOT EXECUTED 40007cf4: d0 00 63 0c ld [ %g1 + 0x30c ], %o0 ! 4001df0c <_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; 40007cf8: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { 40007cfc: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40007d00: 80 88 60 02 btst 2, %g1 40007d04: 02 80 00 15 be 40007d58 40007d08: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007d0c: c2 00 a2 30 ld [ %g2 + 0x230 ], %g1 40007d10: b0 10 20 0f mov 0xf, %i0 40007d14: 82 00 7f ff add %g1, -1, %g1 40007d18: c2 20 a2 30 st %g1, [ %g2 + 0x230 ] 40007d1c: c4 00 a2 30 ld [ %g2 + 0x230 ], %g2 40007d20: 80 a0 a0 00 cmp %g2, 0 40007d24: 12 80 00 0b bne 40007d50 40007d28: 01 00 00 00 nop _Thread_Dispatch(); 40007d2c: 40 00 0b 4e call 4000aa64 <_Thread_Dispatch> 40007d30: 01 00 00 00 nop 40007d34: 81 c7 e0 08 ret 40007d38: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40007d3c: 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 ) { 40007d40: 80 a0 a0 04 cmp %g2, 4 40007d44: 08 80 00 08 bleu 40007d64 40007d48: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007d4c: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40007d50: 81 c7 e0 08 ret <== NOT EXECUTED 40007d54: 81 e8 00 00 restore <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40007d58: c2 00 a2 30 ld [ %g2 + 0x230 ], %g1 40007d5c: 10 bf ff ee b 40007d14 40007d60: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007d64: 80 a0 60 01 cmp %g1, 1 40007d68: 12 bf ff f3 bne 40007d34 40007d6c: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007d70: 83 28 a0 02 sll %g2, 2, %g1 40007d74: 05 10 00 77 sethi %hi(0x4001dc00), %g2 40007d78: 84 10 a1 90 or %g2, 0x190, %g2 ! 4001dd90 <_Objects_Information_table> 40007d7c: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40007d80: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40007d84: 80 a2 20 00 cmp %o0, 0 40007d88: 02 bf ff f2 be 40007d50 40007d8c: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007d90: 40 00 06 49 call 400096b4 <_Objects_Get> 40007d94: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007d98: c2 07 bf f4 ld [ %fp + -12 ], %g1 40007d9c: 80 a0 60 00 cmp %g1, 0 40007da0: 02 bf ff d7 be 40007cfc 40007da4: 05 10 00 77 sethi %hi(0x4001dc00), %g2 40007da8: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40007dac: 18 bf ff e2 bgu 40007d34 <== NOT EXECUTED 40007db0: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007db4: 81 c7 e0 08 ret <== NOT EXECUTED 40007db8: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 400082ac : rtems_status_code rtems_task_restart( Objects_Id id, uint32_t argument ) { 400082ac: 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 ) ) { 400082b0: 92 96 20 00 orcc %i0, 0, %o1 400082b4: 12 80 00 1b bne 40008320 400082b8: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400082bc: 21 10 00 78 sethi %hi(0x4001e000), %l0 400082c0: c2 04 22 e0 ld [ %l0 + 0x2e0 ], %g1 ! 4001e2e0 <_Thread_Dispatch_disable_level> 400082c4: 82 00 60 01 inc %g1 400082c8: c2 24 22 e0 st %g1, [ %l0 + 0x2e0 ] 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; 400082cc: 03 10 00 78 sethi %hi(0x4001e000), %g1 400082d0: d0 00 63 bc ld [ %g1 + 0x3bc ], %o0 ! 4001e3bc <_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; 400082d4: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Restart( the_thread, NULL, argument ) ) { 400082d8: 94 10 00 19 mov %i1, %o2 400082dc: 40 00 0e 25 call 4000bb70 <_Thread_Restart> 400082e0: 92 10 20 00 clr %o1 400082e4: 80 a2 20 00 cmp %o0, 0 400082e8: 12 80 00 15 bne 4000833c 400082ec: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400082f0: c2 04 22 e0 ld [ %l0 + 0x2e0 ], %g1 400082f4: b0 10 20 0e mov 0xe, %i0 400082f8: 82 00 7f ff add %g1, -1, %g1 400082fc: c2 24 22 e0 st %g1, [ %l0 + 0x2e0 ] 40008300: c4 04 22 e0 ld [ %l0 + 0x2e0 ], %g2 40008304: 80 a0 a0 00 cmp %g2, 0 40008308: 12 80 00 0b bne 40008334 4000830c: 01 00 00 00 nop _Thread_Dispatch(); 40008310: 40 00 0b 22 call 4000af98 <_Thread_Dispatch> 40008314: 01 00 00 00 nop 40008318: 81 c7 e0 08 ret 4000831c: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40008320: 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 ) { 40008324: 80 a0 a0 04 cmp %g2, 4 40008328: 08 80 00 08 bleu 40008348 4000832c: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40008330: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008334: 81 c7 e0 08 ret <== NOT EXECUTED 40008338: 81 e8 00 00 restore <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000833c: c2 04 22 e0 ld [ %l0 + 0x2e0 ], %g1 40008340: 10 bf ff ee b 400082f8 40008344: b0 10 20 00 clr %i0 *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40008348: 80 a0 60 01 cmp %g1, 1 4000834c: 12 bf ff f3 bne 40008318 40008350: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40008354: 83 28 a0 02 sll %g2, 2, %g1 40008358: 05 10 00 78 sethi %hi(0x4001e000), %g2 4000835c: 84 10 a2 40 or %g2, 0x240, %g2 ! 4001e240 <_Objects_Information_table> 40008360: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40008364: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40008368: 80 a2 20 00 cmp %o0, 0 4000836c: 02 bf ff f2 be 40008334 40008370: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40008374: 40 00 06 1d call 40009be8 <_Objects_Get> 40008378: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000837c: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008380: 80 a0 60 00 cmp %g1, 0 40008384: 02 bf ff d5 be 400082d8 40008388: 21 10 00 78 sethi %hi(0x4001e000), %l0 4000838c: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40008390: 18 bf ff e2 bgu 40008318 <== NOT EXECUTED 40008394: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40008398: 81 c7 e0 08 ret <== NOT EXECUTED 4000839c: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 40008d68 : */ rtems_status_code rtems_task_resume( Objects_Id id ) { 40008d68: 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 ) ) { 40008d6c: 92 96 20 00 orcc %i0, 0, %o1 40008d70: 12 80 00 19 bne 40008dd4 40008d74: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008d78: 21 10 00 9c sethi %hi(0x40027000), %l0 40008d7c: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 ! 40027360 <_Thread_Dispatch_disable_level> 40008d80: 82 00 60 01 inc %g1 40008d84: c2 24 23 60 st %g1, [ %l0 + 0x360 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40008d88: 03 10 00 9d sethi %hi(0x40027400), %g1 40008d8c: d0 00 60 3c ld [ %g1 + 0x3c ], %o0 ! 4002743c <_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; 40008d90: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _States_Is_suspended( the_thread->current_state ) ) { 40008d94: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40008d98: 80 88 60 02 btst 2, %g1 40008d9c: 12 80 00 2b bne 40008e48 40008da0: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008da4: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 40008da8: b0 10 20 0e mov 0xe, %i0 40008dac: 82 00 7f ff add %g1, -1, %g1 40008db0: c2 24 23 60 st %g1, [ %l0 + 0x360 ] 40008db4: c4 04 23 60 ld [ %l0 + 0x360 ], %g2 40008db8: 80 a0 a0 00 cmp %g2, 0 40008dbc: 12 80 00 0b bne 40008de8 40008dc0: 01 00 00 00 nop _Thread_Dispatch(); 40008dc4: 40 00 0c 07 call 4000bde0 <_Thread_Dispatch> 40008dc8: 01 00 00 00 nop 40008dcc: 81 c7 e0 08 ret 40008dd0: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40008dd4: 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 ) { 40008dd8: 80 a0 a0 04 cmp %g2, 4 40008ddc: 08 80 00 05 bleu 40008df0 40008de0: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40008de4: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008de8: 81 c7 e0 08 ret 40008dec: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40008df0: 80 a0 60 01 cmp %g1, 1 40008df4: 12 bf ff f6 bne 40008dcc 40008df8: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40008dfc: 83 28 a0 02 sll %g2, 2, %g1 40008e00: 05 10 00 9c sethi %hi(0x40027000), %g2 40008e04: 84 10 a2 c0 or %g2, 0x2c0, %g2 ! 400272c0 <_Objects_Information_table> 40008e08: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40008e0c: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40008e10: 80 a2 20 00 cmp %o0, 0 40008e14: 02 bf ff f5 be 40008de8 40008e18: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40008e1c: 40 00 07 05 call 4000aa30 <_Objects_Get> 40008e20: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40008e24: c2 07 bf f4 ld [ %fp + -12 ], %g1 40008e28: 80 a0 60 00 cmp %g1, 0 40008e2c: 02 bf ff da be 40008d94 40008e30: 21 10 00 9c sethi %hi(0x40027000), %l0 40008e34: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40008e38: 18 bf ff e5 bgu 40008dcc <== NOT EXECUTED 40008e3c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40008e40: 81 c7 e0 08 ret <== NOT EXECUTED 40008e44: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _States_Is_suspended( the_thread->current_state ) ) { _Thread_Resume( the_thread, TRUE ); 40008e48: 40 00 0e f2 call 4000ca10 <_Thread_Resume> 40008e4c: 92 10 20 01 mov 1, %o1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008e50: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 40008e54: 10 bf ff d6 b 40008dac 40008e58: b0 10 20 00 clr %i0 400090d4 : rtems_status_code rtems_task_set_note( Objects_Id id, uint32_t notepad, uint32_t note ) { 400090d4: 9d e3 bf 90 save %sp, -112, %sp 400090d8: 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 ) 400090dc: 80 a6 60 0f cmp %i1, 0xf 400090e0: 18 80 00 36 bgu 400091b8 400090e4: 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 ) || 400090e8: 80 a2 60 00 cmp %o1, 0 400090ec: 12 80 00 08 bne 4000910c 400090f0: 07 10 00 80 sethi %hi(0x40020000), %g3 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; api->Notepads[ notepad ] = note; 400090f4: c2 00 e0 7c ld [ %g3 + 0x7c ], %g1 ! 4002007c <_Thread_Executing> <== NOT EXECUTED 400090f8: c4 00 61 6c ld [ %g1 + 0x16c ], %g2 <== NOT EXECUTED 400090fc: 87 2e 60 02 sll %i1, 2, %g3 <== NOT EXECUTED 40009100: f4 20 80 03 st %i2, [ %g2 + %g3 ] <== NOT EXECUTED 40009104: 81 c7 e0 08 ret <== NOT EXECUTED 40009108: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED /* * Optimize the most likely case to avoid the Thread_Dispatch. */ if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 4000910c: c2 00 e0 7c ld [ %g3 + 0x7c ], %g1 40009110: c4 00 60 08 ld [ %g1 + 8 ], %g2 40009114: 80 a2 40 02 cmp %o1, %g2 40009118: 22 bf ff f9 be,a 400090fc 4000911c: c4 00 61 6c ld [ %g1 + 0x16c ], %g2 <== NOT EXECUTED 40009120: 83 32 60 18 srl %o1, 0x18, %g1 40009124: 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 ) { 40009128: 80 a0 a0 04 cmp %g2, 4 4000912c: 08 80 00 04 bleu 4000913c 40009130: 83 32 60 1b srl %o1, 0x1b, %g1 _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40009134: 81 c7 e0 08 ret <== NOT EXECUTED 40009138: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000913c: 80 a0 60 01 cmp %g1, 1 40009140: 12 80 00 1e bne 400091b8 40009144: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40009148: 83 28 a0 02 sll %g2, 2, %g1 4000914c: 05 10 00 7f sethi %hi(0x4001fc00), %g2 40009150: 84 10 a3 00 or %g2, 0x300, %g2 ! 4001ff00 <_Objects_Information_table> 40009154: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40009158: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 4000915c: 80 a2 20 00 cmp %o0, 0 40009160: 02 80 00 16 be 400091b8 40009164: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40009168: 40 00 06 9f call 4000abe4 <_Objects_Get> 4000916c: 94 07 bf f4 add %fp, -12, %o2 api->Notepads[ notepad ] = note; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 40009170: c2 07 bf f4 ld [ %fp + -12 ], %g1 40009174: 80 a0 60 00 cmp %g1, 0 40009178: 12 80 00 12 bne 400091c0 4000917c: 80 a0 60 02 cmp %g1, 2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; api->Notepads[ notepad ] = note; 40009180: c4 02 21 6c ld [ %o0 + 0x16c ], %g2 40009184: 83 2e 60 02 sll %i1, 2, %g1 40009188: 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 ) 4000918c: 07 10 00 7f sethi %hi(0x4001fc00), %g3 40009190: c2 00 e3 a0 ld [ %g3 + 0x3a0 ], %g1 ! 4001ffa0 <_Thread_Dispatch_disable_level> 40009194: b0 10 20 00 clr %i0 40009198: 82 00 7f ff add %g1, -1, %g1 4000919c: c2 20 e3 a0 st %g1, [ %g3 + 0x3a0 ] 400091a0: c4 00 e3 a0 ld [ %g3 + 0x3a0 ], %g2 400091a4: 80 a0 a0 00 cmp %g2, 0 400091a8: 12 80 00 04 bne 400091b8 400091ac: 01 00 00 00 nop _Thread_Dispatch(); 400091b0: 40 00 0b 79 call 4000bf94 <_Thread_Dispatch> 400091b4: 01 00 00 00 nop 400091b8: 81 c7 e0 08 ret 400091bc: 81 e8 00 00 restore api->Notepads[ notepad ] = note; return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { 400091c0: 18 bf ff fe bgu 400091b8 <== NOT EXECUTED 400091c4: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 400091c8: 81 c7 e0 08 ret <== NOT EXECUTED 400091cc: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4000e6bc : rtems_status_code rtems_task_set_priority( Objects_Id id, rtems_task_priority new_priority, rtems_task_priority *old_priority ) { 4000e6bc: 9d e3 bf 90 save %sp, -112, %sp register Thread_Control *the_thread; Objects_Locations location; if ( new_priority != RTEMS_CURRENT_PRIORITY && 4000e6c0: 80 a6 60 00 cmp %i1, 0 4000e6c4: 02 80 00 06 be 4000e6dc 4000e6c8: 92 10 00 18 mov %i0, %o1 4000e6cc: 82 06 7f ff add %i1, -1, %g1 4000e6d0: 80 a0 60 fe cmp %g1, 0xfe 4000e6d4: 18 80 00 26 bgu 4000e76c 4000e6d8: b0 10 20 13 mov 0x13, %i0 !_RTEMS_tasks_Priority_is_valid( new_priority ) ) return RTEMS_INVALID_PRIORITY; if ( !old_priority ) 4000e6dc: 80 a6 a0 00 cmp %i2, 0 4000e6e0: 02 80 00 23 be 4000e76c 4000e6e4: 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 ) ) { 4000e6e8: 80 a2 60 00 cmp %o1, 0 4000e6ec: 12 80 00 22 bne 4000e774 4000e6f0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000e6f4: 21 10 00 b1 sethi %hi(0x4002c400), %l0 4000e6f8: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 ! 4002c410 <_Thread_Dispatch_disable_level> 4000e6fc: 82 00 60 01 inc %g1 4000e700: c2 24 20 10 st %g1, [ %l0 + 0x10 ] 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; 4000e704: 03 10 00 b1 sethi %hi(0x4002c400), %g1 4000e708: d0 00 60 ec ld [ %g1 + 0xec ], %o0 ! 4002c4ec <_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; 4000e70c: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: /* XXX convert from core priority */ *old_priority = the_thread->current_priority; 4000e710: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 if ( new_priority != RTEMS_CURRENT_PRIORITY ) { 4000e714: 80 a6 60 00 cmp %i1, 0 4000e718: 02 80 00 0d be 4000e74c 4000e71c: c2 26 80 00 st %g1, [ %i2 ] the_thread->real_priority = new_priority; if ( the_thread->resource_count == 0 || 4000e720: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 4000e724: 80 a0 60 00 cmp %g1, 0 4000e728: 02 80 00 06 be 4000e740 4000e72c: f2 22 20 18 st %i1, [ %o0 + 0x18 ] 4000e730: c2 02 20 14 ld [ %o0 + 0x14 ], %g1 4000e734: 80 a6 40 01 cmp %i1, %g1 4000e738: 1a 80 00 05 bcc 4000e74c 4000e73c: 01 00 00 00 nop the_thread->current_priority > new_priority ) _Thread_Change_priority( the_thread, new_priority, FALSE ); 4000e740: 92 10 00 19 mov %i1, %o1 4000e744: 40 00 0a 59 call 400110a8 <_Thread_Change_priority> 4000e748: 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 ) 4000e74c: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 4000e750: b0 10 20 00 clr %i0 4000e754: 82 00 7f ff add %g1, -1, %g1 4000e758: c2 24 20 10 st %g1, [ %l0 + 0x10 ] 4000e75c: c4 04 20 10 ld [ %l0 + 0x10 ], %g2 4000e760: 80 a0 a0 00 cmp %g2, 0 4000e764: 02 80 00 0a be 4000e78c 4000e768: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000e76c: 81 c7 e0 08 ret 4000e770: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 4000e774: 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 ) { 4000e778: 80 a0 a0 04 cmp %g2, 4 4000e77c: 08 80 00 08 bleu 4000e79c 4000e780: 83 32 60 1b srl %o1, 0x1b, %g1 4000e784: 81 c7 e0 08 ret <== NOT EXECUTED 4000e788: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000e78c: 40 00 0b 6b call 40011538 <_Thread_Dispatch> 4000e790: 01 00 00 00 nop 4000e794: 81 c7 e0 08 ret 4000e798: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4000e79c: 80 a0 60 01 cmp %g1, 1 4000e7a0: 12 bf ff f3 bne 4000e76c 4000e7a4: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4000e7a8: 83 28 a0 02 sll %g2, 2, %g1 4000e7ac: 05 10 00 b0 sethi %hi(0x4002c000), %g2 4000e7b0: 84 10 a3 70 or %g2, 0x370, %g2 ! 4002c370 <_Objects_Information_table> 4000e7b4: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000e7b8: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 4000e7bc: 80 a2 20 00 cmp %o0, 0 4000e7c0: 02 bf ff f5 be 4000e794 4000e7c4: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000e7c8: 40 00 06 34 call 40010098 <_Objects_Get> 4000e7cc: 94 07 bf f4 add %fp, -12, %o2 if ( !old_priority ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 4000e7d0: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000e7d4: 80 a0 60 00 cmp %g1, 0 4000e7d8: 02 bf ff ce be 4000e710 4000e7dc: 21 10 00 b1 sethi %hi(0x4002c400), %l0 4000e7e0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000e7e4: 18 bf ff e2 bgu 4000e76c <== NOT EXECUTED 4000e7e8: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4000e7ec: 81 c7 e0 08 ret <== NOT EXECUTED 4000e7f0: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4000777c : rtems_status_code rtems_task_start( rtems_id id, rtems_task_entry entry_point, rtems_task_argument argument ) { 4000777c: 9d e3 bf 90 save %sp, -112, %sp 40007780: 92 10 00 18 mov %i0, %o1 register Thread_Control *the_thread; Objects_Locations location; if ( entry_point == NULL ) 40007784: 80 a6 60 00 cmp %i1, 0 40007788: 02 80 00 1e be 40007800 4000778c: 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 ) ) { 40007790: 80 a2 60 00 cmp %o1, 0 40007794: 12 80 00 1d bne 40007808 40007798: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4000779c: 21 10 00 6b sethi %hi(0x4001ac00), %l0 400077a0: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 ! 4001ad90 <_Thread_Dispatch_disable_level> 400077a4: 82 00 60 01 inc %g1 400077a8: c2 24 21 90 st %g1, [ %l0 + 0x190 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 400077ac: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400077b0: d0 00 62 6c ld [ %g1 + 0x26c ], %o0 ! 4001ae6c <_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; 400077b4: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( _Thread_Start( 400077b8: 94 10 00 19 mov %i1, %o2 400077bc: 98 10 00 1a mov %i2, %o4 400077c0: 92 10 20 00 clr %o1 400077c4: 40 00 0e a3 call 4000b250 <_Thread_Start> 400077c8: 96 10 20 00 clr %o3 400077cc: 80 a2 20 00 cmp %o0, 0 400077d0: 12 80 00 2b bne 4000787c 400077d4: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400077d8: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 400077dc: b0 10 20 0e mov 0xe, %i0 400077e0: 82 00 7f ff add %g1, -1, %g1 400077e4: c2 24 21 90 st %g1, [ %l0 + 0x190 ] 400077e8: c4 04 21 90 ld [ %l0 + 0x190 ], %g2 400077ec: 80 a0 a0 00 cmp %g2, 0 400077f0: 12 80 00 0b bne 4000781c 400077f4: 01 00 00 00 nop _Thread_Dispatch(); 400077f8: 40 00 0a bb call 4000a2e4 <_Thread_Dispatch> 400077fc: 01 00 00 00 nop 40007800: 81 c7 e0 08 ret 40007804: 81 e8 00 00 restore */ RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API( Objects_Id id ) { return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS); 40007808: 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 ) { 4000780c: 80 a0 a0 04 cmp %g2, 4 40007810: 08 80 00 05 bleu 40007824 40007814: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007818: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INCORRECT_STATE; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4000781c: 81 c7 e0 08 ret 40007820: 81 e8 00 00 restore *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40007824: 80 a0 60 01 cmp %g1, 1 40007828: 12 bf ff f6 bne 40007800 4000782c: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40007830: 83 28 a0 02 sll %g2, 2, %g1 40007834: 05 10 00 6b sethi %hi(0x4001ac00), %g2 40007838: 84 10 a0 f0 or %g2, 0xf0, %g2 ! 4001acf0 <_Objects_Information_table> 4000783c: c6 00 80 01 ld [ %g2 + %g1 ], %g3 40007840: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40007844: 80 a2 20 00 cmp %o0, 0 40007848: 02 bf ff f5 be 4000781c 4000784c: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 40007850: 40 00 05 7d call 40008e44 <_Objects_Get> 40007854: 94 07 bf f4 add %fp, -12, %o2 if ( entry_point == NULL ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40007858: c2 07 bf f4 ld [ %fp + -12 ], %g1 4000785c: 80 a0 60 00 cmp %g1, 0 40007860: 02 bf ff d6 be 400077b8 40007864: 21 10 00 6b sethi %hi(0x4001ac00), %l0 40007868: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4000786c: 18 bf ff e5 bgu 40007800 <== NOT EXECUTED 40007870: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40007874: 81 c7 e0 08 ret <== NOT EXECUTED 40007878: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4000787c: c2 04 21 90 ld [ %l0 + 0x190 ], %g1 40007880: 10 bf ff d8 b 400077e0 40007884: b0 10 20 00 clr %i0 40008f68 : */ rtems_status_code rtems_task_suspend( Objects_Id id ) { 40008f68: 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 ) ) { 40008f6c: 92 96 20 00 orcc %i0, 0, %o1 40008f70: 12 80 00 19 bne 40008fd4 40008f74: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40008f78: 21 10 00 9c sethi %hi(0x40027000), %l0 40008f7c: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 ! 40027360 <_Thread_Dispatch_disable_level> 40008f80: 82 00 60 01 inc %g1 40008f84: c2 24 23 60 st %g1, [ %l0 + 0x360 ] Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { _Thread_Disable_dispatch(); *location = OBJECTS_LOCAL; tp = _Thread_Executing; 40008f88: 03 10 00 9d sethi %hi(0x40027400), %g1 40008f8c: d0 00 60 3c ld [ %g1 + 0x3c ], %o0 ! 4002743c <_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; 40008f90: c0 27 bf f4 clr [ %fp + -12 ] case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { 40008f94: c2 02 20 10 ld [ %o0 + 0x10 ], %g1 40008f98: 80 88 60 02 btst 2, %g1 40008f9c: 02 80 00 2b be 40009048 40008fa0: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40008fa4: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 40008fa8: b0 10 20 0f mov 0xf, %i0 40008fac: 82 00 7f ff add %g1, -1, %g1 40008fb0: c2 24 23 60 st %g1, [ %l0 + 0x360 ] 40008fb4: c4 04 23 60 ld [ %l0 + 0x360 ], %g2 40008fb8: 80 a0 a0 00 cmp %g2, 0 40008fbc: 12 80 00 0b bne 40008fe8 40008fc0: 01 00 00 00 nop _Thread_Dispatch(); 40008fc4: 40 00 0b 87 call 4000bde0 <_Thread_Dispatch> 40008fc8: 01 00 00 00 nop 40008fcc: 81 c7 e0 08 ret 40008fd0: 81 e8 00 00 restore 40008fd4: 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 ) { 40008fd8: 80 a0 a0 04 cmp %g2, 4 40008fdc: 08 80 00 05 bleu 40008ff0 40008fe0: 83 32 60 1b srl %o1, 0x1b, %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40008fe4: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_ALREADY_SUSPENDED; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40008fe8: 81 c7 e0 08 ret <== NOT EXECUTED 40008fec: 81 e8 00 00 restore <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 40008ff0: 80 a0 60 01 cmp %g1, 1 40008ff4: 12 bf ff f6 bne 40008fcc 40008ff8: b0 10 20 04 mov 4, %i0 *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 40008ffc: 83 28 a0 02 sll %g2, 2, %g1 40009000: 05 10 00 9c sethi %hi(0x40027000), %g2 40009004: 84 10 a2 c0 or %g2, 0x2c0, %g2 ! 400272c0 <_Objects_Information_table> 40009008: c6 00 80 01 ld [ %g2 + %g1 ], %g3 4000900c: d0 00 e0 04 ld [ %g3 + 4 ], %o0 if ( !information ) { 40009010: 80 a2 20 00 cmp %o0, 0 40009014: 02 bf ff f5 be 40008fe8 40009018: 01 00 00 00 nop *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4000901c: 40 00 06 85 call 4000aa30 <_Objects_Get> 40009020: 94 07 bf f4 add %fp, -12, %o2 { register Thread_Control *the_thread; Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { 40009024: c2 07 bf f4 ld [ %fp + -12 ], %g1 40009028: 80 a0 60 00 cmp %g1, 0 4000902c: 02 bf ff da be 40008f94 40009030: 21 10 00 9c sethi %hi(0x40027000), %l0 40009034: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40009038: 18 bf ff e5 bgu 40008fcc <== NOT EXECUTED 4000903c: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 40009040: 81 c7 e0 08 ret <== NOT EXECUTED 40009044: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { _Thread_Suspend( the_thread ); 40009048: 40 00 0f b1 call 4000cf0c <_Thread_Suspend> 4000904c: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40009050: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 40009054: 10 bf ff d6 b 40008fac 40009058: b0 10 20 00 clr %i0 4001b5d4 : rtems_status_code rtems_task_variable_add( rtems_id tid, void **ptr, void (*dtor)(void *) ) { 4001b5d4: 9d e3 bf 90 save %sp, -112, %sp 4001b5d8: 92 10 00 18 mov %i0, %o1 Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *new; if ( !ptr ) 4001b5dc: 80 a6 60 00 cmp %i1, 0 4001b5e0: 02 80 00 22 be 4001b668 4001b5e4: 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 ) ) { 4001b5e8: 80 a2 60 00 cmp %o1, 0 4001b5ec: 12 80 00 21 bne 4001b670 4001b5f0: 83 32 60 18 srl %o1, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001b5f4: 21 10 00 f8 sethi %hi(0x4003e000), %l0 4001b5f8: c2 04 23 20 ld [ %l0 + 0x320 ], %g1 ! 4003e320 <_Thread_Dispatch_disable_level> 4001b5fc: 82 00 60 01 inc %g1 4001b600: c2 24 23 20 st %g1, [ %l0 + 0x320 ] 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; 4001b604: 03 10 00 f8 sethi %hi(0x4003e000), %g1 4001b608: f0 00 63 fc ld [ %g1 + 0x3fc ], %i0 ! 4003e3fc <_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; 4001b60c: c0 27 bf f4 clr [ %fp + -12 ] /* * Figure out if the variable is already in this task's list. */ tvp = the_thread->task_variables; 4001b610: c4 06 21 7c ld [ %i0 + 0x17c ], %g2 while (tvp) { 4001b614: 80 a0 a0 00 cmp %g2, 0 4001b618: 32 80 00 08 bne,a 4001b638 4001b61c: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED RTEMS_INLINE_ROUTINE void *_Workspace_Allocate( size_t size ) { return _Heap_Allocate( &_Workspace_Area, size ); 4001b620: 10 80 00 1a b 4001b688 4001b624: 11 10 00 f8 sethi %hi(0x4003e000), %o0 4001b628: 84 90 60 00 orcc %g1, 0, %g2 <== NOT EXECUTED 4001b62c: 02 80 00 17 be 4001b688 <== NOT EXECUTED 4001b630: 11 10 00 f8 sethi %hi(0x4003e000), %o0 <== NOT EXECUTED if (tvp->ptr == ptr) { 4001b634: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED 4001b638: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001b63c: 32 bf ff fb bne,a 4001b628 <== NOT EXECUTED 4001b640: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED tvp->dtor = dtor; 4001b644: f4 20 a0 10 st %i2, [ %g2 + 0x10 ] <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b648: c2 04 23 20 ld [ %l0 + 0x320 ], %g1 _Thread_Dispatch(); 4001b64c: b0 10 20 00 clr %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b650: 82 00 7f ff add %g1, -1, %g1 4001b654: c2 24 23 20 st %g1, [ %l0 + 0x320 ] 4001b658: c4 04 23 20 ld [ %l0 + 0x320 ], %g2 4001b65c: 80 a0 a0 00 cmp %g2, 0 4001b660: 02 80 00 1c be 4001b6d0 4001b664: 01 00 00 00 nop the_thread->task_variables = new; _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001b668: 81 c7 e0 08 ret <== NOT EXECUTED 4001b66c: 81 e8 00 00 restore <== NOT EXECUTED 4001b670: 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 ) { 4001b674: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001b678: 08 80 00 21 bleu 4001b6fc <== NOT EXECUTED 4001b67c: 83 32 60 1b srl %o1, 0x1b, %g1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001b680: 81 c7 e0 08 ret <== NOT EXECUTED 4001b684: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 4001b688: 92 10 20 14 mov 0x14, %o1 4001b68c: 7f ff c1 71 call 4000bc50 <_Heap_Allocate> 4001b690: 90 12 23 6c or %o0, 0x36c, %o0 * Now allocate memory for this task variable. */ new = (rtems_task_variable_t *) _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { 4001b694: 80 a2 20 00 cmp %o0, 0 4001b698: 32 80 00 12 bne,a 4001b6e0 4001b69c: c4 06 21 7c ld [ %i0 + 0x17c ], %g2 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b6a0: c2 04 23 20 ld [ %l0 + 0x320 ], %g1 <== NOT EXECUTED 4001b6a4: b0 10 20 1a mov 0x1a, %i0 <== NOT EXECUTED 4001b6a8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001b6ac: c2 24 23 20 st %g1, [ %l0 + 0x320 ] <== NOT EXECUTED 4001b6b0: c4 04 23 20 ld [ %l0 + 0x320 ], %g2 <== NOT EXECUTED 4001b6b4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001b6b8: 12 80 00 08 bne 4001b6d8 <== NOT EXECUTED 4001b6bc: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4001b6c0: 7f ff c9 98 call 4000dd20 <_Thread_Dispatch> <== NOT EXECUTED 4001b6c4: 01 00 00 00 nop <== NOT EXECUTED 4001b6c8: 81 c7 e0 08 ret <== NOT EXECUTED 4001b6cc: 81 e8 00 00 restore <== NOT EXECUTED 4001b6d0: 7f ff c9 94 call 4000dd20 <_Thread_Dispatch> 4001b6d4: b0 10 20 00 clr %i0 4001b6d8: 81 c7 e0 08 ret 4001b6dc: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_NO_MEMORY; } new->gval = *ptr; 4001b6e0: 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; 4001b6e4: d0 26 21 7c st %o0, [ %i0 + 0x17c ] _Workspace_Allocate(sizeof(rtems_task_variable_t)); if (new == NULL) { _Thread_Enable_dispatch(); return RTEMS_NO_MEMORY; } new->gval = *ptr; 4001b6e8: c2 22 20 08 st %g1, [ %o0 + 8 ] new->ptr = ptr; 4001b6ec: f2 22 20 04 st %i1, [ %o0 + 4 ] new->dtor = dtor; 4001b6f0: f4 22 20 10 st %i2, [ %o0 + 0x10 ] new->next = (struct rtems_task_variable_tt *)the_thread->task_variables; 4001b6f4: 10 bf ff d5 b 4001b648 4001b6f8: c4 22 00 00 st %g2, [ %o0 ] *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4001b6fc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001b700: 12 bf ff e0 bne 4001b680 <== NOT EXECUTED 4001b704: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4001b708: 05 10 00 f8 sethi %hi(0x4003e000), %g2 <== NOT EXECUTED 4001b70c: 84 10 a2 80 or %g2, 0x280, %g2 ! 4003e280 <_Objects_Information_table> <== NOT EXECUTED 4001b710: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 4001b714: d0 00 e0 04 ld [ %g3 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 4001b718: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b71c: 02 bf ff d9 be 4001b680 <== NOT EXECUTED 4001b720: 01 00 00 00 nop <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001b724: 7f ff c3 fb call 4000c710 <_Objects_Get> <== NOT EXECUTED 4001b728: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if ( !ptr ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 4001b72c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001b730: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4001b734: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001b738: 02 bf ff b6 be 4001b610 <== NOT EXECUTED 4001b73c: 21 10 00 f8 sethi %hi(0x4003e000), %l0 <== NOT EXECUTED 4001b740: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4001b744: 18 bf ff c9 bgu 4001b668 <== NOT EXECUTED 4001b748: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED 4001b74c: 30 bf ff cd b,a 4001b680 <== NOT EXECUTED 4001b750 : rtems_status_code rtems_task_variable_delete( rtems_id tid, void **ptr ) { 4001b750: 9d e3 bf 90 save %sp, -112, %sp Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp, *prev; if ( !ptr ) 4001b754: 80 a6 60 00 cmp %i1, 0 4001b758: 02 80 00 50 be 4001b898 4001b75c: 92 10 00 18 mov %i0, %o1 uint32_t the_api; uint32_t the_class; Objects_Information *information; Thread_Control *tp = (Thread_Control *) 0; if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) { 4001b760: 80 a6 20 00 cmp %i0, 0 4001b764: 12 80 00 26 bne 4001b7fc 4001b768: 83 36 20 18 srl %i0, 0x18, %g1 rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001b76c: 21 10 00 f8 sethi %hi(0x4003e000), %l0 4001b770: c2 04 23 20 ld [ %l0 + 0x320 ], %g1 ! 4003e320 <_Thread_Dispatch_disable_level> 4001b774: 82 00 60 01 inc %g1 4001b778: c2 24 23 20 st %g1, [ %l0 + 0x320 ] 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; 4001b77c: 03 10 00 f8 sethi %hi(0x4003e000), %g1 4001b780: d0 00 63 fc ld [ %g1 + 0x3fc ], %o0 ! 4003e3fc <_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; 4001b784: c0 27 bf f4 clr [ %fp + -12 ] default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; 4001b788: c6 02 21 7c ld [ %o0 + 0x17c ], %g3 while (tvp) { 4001b78c: 80 a0 e0 00 cmp %g3, 0 4001b790: 02 80 00 10 be 4001b7d0 4001b794: 01 00 00 00 nop if (tvp->ptr == ptr) { 4001b798: c2 00 e0 04 ld [ %g3 + 4 ], %g1 4001b79c: 80 a0 40 19 cmp %g1, %i1 4001b7a0: 32 80 00 09 bne,a 4001b7c4 4001b7a4: c4 00 c0 00 ld [ %g3 ], %g2 <== NOT EXECUTED if (prev) prev->next = tvp->next; else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; 4001b7a8: 10 80 00 5b b 4001b914 4001b7ac: c2 00 c0 00 ld [ %g3 ], %g1 return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { if (tvp->ptr == ptr) { 4001b7b0: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001b7b4: 02 80 00 18 be 4001b814 <== NOT EXECUTED 4001b7b8: b0 10 00 02 mov %g2, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001b7bc: 86 10 00 02 mov %g2, %g3 <== NOT EXECUTED _Workspace_Free(tvp); _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } prev = tvp; tvp = (rtems_task_variable_t *)tvp->next; 4001b7c0: c4 00 c0 00 ld [ %g3 ], %g2 <== NOT EXECUTED default: return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { 4001b7c4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001b7c8: 32 bf ff fa bne,a 4001b7b0 <== NOT EXECUTED 4001b7cc: c2 00 a0 04 ld [ %g2 + 4 ], %g1 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b7d0: c2 04 23 20 ld [ %l0 + 0x320 ], %g1 <== NOT EXECUTED 4001b7d4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001b7d8: c2 24 23 20 st %g1, [ %l0 + 0x320 ] <== NOT EXECUTED 4001b7dc: c4 04 23 20 ld [ %l0 + 0x320 ], %g2 <== NOT EXECUTED 4001b7e0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001b7e4: 12 80 00 2d bne 4001b898 <== NOT EXECUTED 4001b7e8: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4001b7ec: 7f ff c9 4d call 4000dd20 <_Thread_Dispatch> <== NOT EXECUTED 4001b7f0: b0 10 20 09 mov 9, %i0 ! 9 <== NOT EXECUTED 4001b7f4: 81 c7 e0 08 ret <== NOT EXECUTED 4001b7f8: 81 e8 00 00 restore <== NOT EXECUTED 4001b7fc: 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 ) { 4001b800: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001b804: 08 80 00 2e bleu 4001b8bc <== NOT EXECUTED 4001b808: 83 36 20 1b srl %i0, 0x1b, %g1 <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001b80c: 81 c7 e0 08 ret <== NOT EXECUTED 4001b810: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED case OBJECTS_LOCAL: tvp = the_thread->task_variables; while (tvp) { if (tvp->ptr == ptr) { if (prev) prev->next = tvp->next; 4001b814: c2 00 80 00 ld [ %g2 ], %g1 <== NOT EXECUTED 4001b818: c2 20 c0 00 st %g1, [ %g3 ] <== NOT EXECUTED else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; if (_Thread_Is_executing(the_thread)) { 4001b81c: 03 10 00 f8 sethi %hi(0x4003e000), %g1 4001b820: c4 00 63 fc ld [ %g1 + 0x3fc ], %g2 ! 4003e3fc <_Thread_Executing> 4001b824: 80 a2 00 02 cmp %o0, %g2 4001b828: 32 80 00 1e bne,a 4001b8a0 4001b82c: c2 06 20 10 ld [ %i0 + 0x10 ], %g1 <== NOT EXECUTED if (tvp->dtor) 4001b830: c4 06 20 10 ld [ %i0 + 0x10 ], %g2 4001b834: 80 a0 a0 00 cmp %g2, 0 4001b838: 22 80 00 06 be,a 4001b850 4001b83c: c4 06 20 04 ld [ %i0 + 4 ], %g2 (*tvp->dtor)(*tvp->ptr); 4001b840: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 4001b844: 9f c0 80 00 call %g2 <== NOT EXECUTED 4001b848: d0 00 40 00 ld [ %g1 ], %o0 <== NOT EXECUTED *tvp->ptr = tvp->gval; 4001b84c: c4 06 20 04 ld [ %i0 + 4 ], %g2 <== NOT EXECUTED 4001b850: c2 06 20 08 ld [ %i0 + 8 ], %g1 4001b854: c2 20 80 00 st %g1, [ %g2 ] RTEMS_INLINE_ROUTINE boolean _Workspace_Free( void *block ) { return _Heap_Free( &_Workspace_Area, block ); 4001b858: 92 10 00 18 mov %i0, %o1 4001b85c: 11 10 00 f8 sethi %hi(0x4003e000), %o0 4001b860: 7f ff c1 2e call 4000bd18 <_Heap_Free> 4001b864: 90 12 23 6c or %o0, 0x36c, %o0 ! 4003e36c <_Workspace_Area> #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b868: c2 04 23 20 ld [ %l0 + 0x320 ], %g1 4001b86c: b0 10 20 00 clr %i0 4001b870: 82 00 7f ff add %g1, -1, %g1 4001b874: c2 24 23 20 st %g1, [ %l0 + 0x320 ] 4001b878: c4 04 23 20 ld [ %l0 + 0x320 ], %g2 4001b87c: 80 a0 a0 00 cmp %g2, 0 4001b880: 12 80 00 04 bne 4001b890 4001b884: 01 00 00 00 nop _Thread_Dispatch(); 4001b888: 7f ff c9 26 call 4000dd20 <_Thread_Dispatch> 4001b88c: 01 00 00 00 nop 4001b890: 81 c7 e0 08 ret 4001b894: 81 e8 00 00 restore 4001b898: 81 c7 e0 08 ret <== NOT EXECUTED 4001b89c: 91 e8 20 09 restore %g0, 9, %o0 <== NOT EXECUTED } else { if (tvp->dtor) 4001b8a0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001b8a4: 22 bf ff ee be,a 4001b85c <== NOT EXECUTED 4001b8a8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED (*tvp->dtor)(tvp->tval); 4001b8ac: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001b8b0: d0 06 20 0c ld [ %i0 + 0xc ], %o0 <== NOT EXECUTED 4001b8b4: 10 bf ff ea b 4001b85c <== NOT EXECUTED 4001b8b8: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4001b8bc: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001b8c0: 32 bf ff cd bne,a 4001b7f4 <== NOT EXECUTED 4001b8c4: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4001b8c8: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001b8cc: 05 10 00 f8 sethi %hi(0x4003e000), %g2 <== NOT EXECUTED 4001b8d0: 84 10 a2 80 or %g2, 0x280, %g2 ! 4003e280 <_Objects_Information_table> <== NOT EXECUTED 4001b8d4: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 4001b8d8: d0 00 e0 04 ld [ %g3 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 4001b8dc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b8e0: 22 bf ff c5 be,a 4001b7f4 <== NOT EXECUTED 4001b8e4: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001b8e8: 7f ff c3 8a call 4000c710 <_Objects_Get> <== NOT EXECUTED 4001b8ec: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; prev = NULL; the_thread = _Thread_Get (tid, &location); switch (location) { 4001b8f0: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001b8f4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001b8f8: 02 bf ff a4 be 4001b788 <== NOT EXECUTED 4001b8fc: 21 10 00 f8 sethi %hi(0x4003e000), %l0 <== NOT EXECUTED 4001b900: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4001b904: 18 bf ff bc bgu 4001b7f4 <== NOT EXECUTED 4001b908: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001b90c: 81 c7 e0 08 ret <== NOT EXECUTED 4001b910: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED while (tvp) { if (tvp->ptr == ptr) { if (prev) prev->next = tvp->next; else the_thread->task_variables = (rtems_task_variable_t *)tvp->next; 4001b914: b0 10 00 03 mov %g3, %i0 4001b918: 10 bf ff c1 b 4001b81c 4001b91c: c2 22 21 7c st %g1, [ %o0 + 0x17c ] 4001b920 : rtems_status_code rtems_task_variable_get( rtems_id tid, void **ptr, void **result ) { 4001b920: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED Thread_Control *the_thread; Objects_Locations location; rtems_task_variable_t *tvp; if ( !ptr ) 4001b924: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 4001b928: 02 80 00 3b be 4001ba14 <== NOT EXECUTED 4001b92c: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED return RTEMS_INVALID_ADDRESS; if ( !result ) 4001b930: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED 4001b934: 02 80 00 38 be 4001ba14 <== NOT EXECUTED 4001b938: 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 ) ) { 4001b93c: 12 80 00 21 bne 4001b9c0 <== NOT EXECUTED 4001b940: 83 36 20 18 srl %i0, 0x18, %g1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 4001b944: 05 10 00 f8 sethi %hi(0x4003e000), %g2 <== NOT EXECUTED 4001b948: c2 00 a3 20 ld [ %g2 + 0x320 ], %g1 ! 4003e320 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 4001b94c: 82 00 60 01 inc %g1 <== NOT EXECUTED 4001b950: c2 20 a3 20 st %g1, [ %g2 + 0x320 ] <== 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; 4001b954: 03 10 00 f8 sethi %hi(0x4003e000), %g1 <== NOT EXECUTED 4001b958: d0 00 63 fc ld [ %g1 + 0x3fc ], %o0 ! 4003e3fc <_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; 4001b95c: c0 27 bf f4 clr [ %fp + -12 ] <== NOT EXECUTED /* * Figure out if the variable is in this task's list. */ tvp = the_thread->task_variables; 4001b960: d0 02 21 7c ld [ %o0 + 0x17c ], %o0 <== NOT EXECUTED while (tvp) { 4001b964: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001b968: 32 80 00 07 bne,a 4001b984 <== NOT EXECUTED 4001b96c: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4001b970: 30 80 00 1a b,a 4001b9d8 <== NOT EXECUTED 4001b974: 90 90 60 00 orcc %g1, 0, %o0 <== NOT EXECUTED 4001b978: 02 80 00 18 be 4001b9d8 <== NOT EXECUTED 4001b97c: 01 00 00 00 nop <== NOT EXECUTED if (tvp->ptr == ptr) { 4001b980: c2 02 20 04 ld [ %o0 + 4 ], %g1 <== NOT EXECUTED 4001b984: 80 a0 40 19 cmp %g1, %i1 <== NOT EXECUTED 4001b988: 32 bf ff fb bne,a 4001b974 <== NOT EXECUTED 4001b98c: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED /* * Should this return the current (i.e not the * saved) value if `tid' is the current task? */ *result = tvp->tval; 4001b990: c2 02 20 0c ld [ %o0 + 0xc ], %g1 <== NOT EXECUTED 4001b994: c2 26 80 00 st %g1, [ %i2 ] <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b998: c2 00 a3 20 ld [ %g2 + 0x320 ], %g1 <== NOT EXECUTED 4001b99c: b0 10 20 00 clr %i0 <== NOT EXECUTED 4001b9a0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001b9a4: c2 20 a3 20 st %g1, [ %g2 + 0x320 ] <== NOT EXECUTED 4001b9a8: c4 00 a3 20 ld [ %g2 + 0x320 ], %g2 <== NOT EXECUTED 4001b9ac: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001b9b0: 02 80 00 15 be 4001ba04 <== NOT EXECUTED 4001b9b4: 01 00 00 00 nop <== NOT EXECUTED } _Thread_Enable_dispatch(); return RTEMS_INVALID_ADDRESS; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 4001b9b8: 81 c7 e0 08 ret <== NOT EXECUTED 4001b9bc: 81 e8 00 00 restore <== NOT EXECUTED 4001b9c0: 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 ) { 4001b9c4: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 4001b9c8: 08 80 00 15 bleu 4001ba1c <== NOT EXECUTED 4001b9cc: 83 36 20 1b srl %i0, 0x1b, %g1 <== NOT EXECUTED 4001b9d0: 81 c7 e0 08 ret <== NOT EXECUTED 4001b9d4: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001b9d8: c2 00 a3 20 ld [ %g2 + 0x320 ], %g1 <== NOT EXECUTED 4001b9dc: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 4001b9e0: c2 20 a3 20 st %g1, [ %g2 + 0x320 ] <== NOT EXECUTED 4001b9e4: c4 00 a3 20 ld [ %g2 + 0x320 ], %g2 <== NOT EXECUTED 4001b9e8: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4001b9ec: 12 80 00 0a bne 4001ba14 <== NOT EXECUTED 4001b9f0: 01 00 00 00 nop <== NOT EXECUTED _Thread_Dispatch(); 4001b9f4: 7f ff c8 cb call 4000dd20 <_Thread_Dispatch> <== NOT EXECUTED 4001b9f8: b0 10 20 09 mov 9, %i0 ! 9 <== NOT EXECUTED 4001b9fc: 81 c7 e0 08 ret <== NOT EXECUTED 4001ba00: 81 e8 00 00 restore <== NOT EXECUTED 4001ba04: 7f ff c8 c7 call 4000dd20 <_Thread_Dispatch> <== NOT EXECUTED 4001ba08: 01 00 00 00 nop <== NOT EXECUTED 4001ba0c: 81 c7 e0 08 ret <== NOT EXECUTED 4001ba10: 81 e8 00 00 restore <== NOT EXECUTED 4001ba14: 81 c7 e0 08 ret <== NOT EXECUTED 4001ba18: 91 e8 20 09 restore %g0, 9, %o0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } the_class = _Objects_Get_class( id ); if ( the_class != 1 ) { /* threads are always first class :) */ 4001ba1c: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 4001ba20: 32 bf ff e6 bne,a 4001b9b8 <== NOT EXECUTED 4001ba24: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } information = _Objects_Information_table[ the_api ][ the_class ]; 4001ba28: 83 28 a0 02 sll %g2, 2, %g1 <== NOT EXECUTED 4001ba2c: 05 10 00 f8 sethi %hi(0x4003e000), %g2 <== NOT EXECUTED 4001ba30: 84 10 a2 80 or %g2, 0x280, %g2 ! 4003e280 <_Objects_Information_table> <== NOT EXECUTED 4001ba34: c6 00 80 01 ld [ %g2 + %g1 ], %g3 <== NOT EXECUTED 4001ba38: d0 00 e0 04 ld [ %g3 + 4 ], %o0 <== NOT EXECUTED if ( !information ) { 4001ba3c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ba40: 22 bf ff de be,a 4001b9b8 <== NOT EXECUTED 4001ba44: b0 10 20 04 mov 4, %i0 <== NOT EXECUTED *location = OBJECTS_ERROR; goto done; } tp = (Thread_Control *) _Objects_Get( information, id, location ); 4001ba48: 7f ff c3 32 call 4000c710 <_Objects_Get> <== NOT EXECUTED 4001ba4c: 94 07 bf f4 add %fp, -12, %o2 <== NOT EXECUTED if ( !result ) return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get (tid, &location); switch (location) { 4001ba50: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 4001ba54: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ba58: 02 bf ff c2 be 4001b960 <== NOT EXECUTED 4001ba5c: 05 10 00 f8 sethi %hi(0x4003e000), %g2 <== NOT EXECUTED 4001ba60: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 4001ba64: 18 bf ff d5 bgu 4001b9b8 <== NOT EXECUTED 4001ba68: b0 10 20 19 mov 0x19, %i0 <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) _Thread_Dispatch(); 4001ba6c: 81 c7 e0 08 ret <== NOT EXECUTED 4001ba70: 91 e8 20 04 restore %g0, 4, %o0 <== NOT EXECUTED 40004428 : int cbufsize, int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; 40004428: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED rtems_termios_raw_input_size = raw_input; 4000442c: 05 10 00 68 sethi %hi(0x4001a000), %g2 <== NOT EXECUTED int cbufsize, int raw_input, int raw_output ) { rtems_termios_cbufsize = cbufsize; 40004430: d0 20 61 44 st %o0, [ %g1 + 0x144 ] <== NOT EXECUTED rtems_termios_raw_input_size = raw_input; 40004434: d2 20 a1 48 st %o1, [ %g2 + 0x148 ] <== NOT EXECUTED rtems_termios_raw_output_size = raw_output; 40004438: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } 4000443c: 90 10 20 00 clr %o0 <== NOT EXECUTED 40004440: 81 c3 e0 08 retl <== NOT EXECUTED 40004444: d4 20 61 4c st %o2, [ %g1 + 0x14c ] <== NOT EXECUTED 40005bdc : } } rtems_status_code rtems_termios_close (void *arg) { 40005bdc: 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); 40005be0: 23 10 00 6b sethi %hi(0x4001ac00), %l1 rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40005be4: c2 06 00 00 ld [ %i0 ], %g1 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40005be8: d0 04 60 3c ld [ %l1 + 0x3c ], %o0 rtems_status_code rtems_termios_close (void *arg) { rtems_libio_open_close_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40005bec: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 40005bf0: 92 10 20 00 clr %o1 40005bf4: 40 00 04 c6 call 40006f0c 40005bf8: 94 10 20 00 clr %o2 if (sc != RTEMS_SUCCESSFUL) 40005bfc: 80 a2 20 00 cmp %o0, 0 40005c00: 12 80 00 47 bne 40005d1c 40005c04: 01 00 00 00 nop rtems_fatal_error_occurred (sc); if (--tty->refcount == 0) { 40005c08: c2 04 20 08 ld [ %l0 + 8 ], %g1 40005c0c: 82 00 7f ff add %g1, -1, %g1 40005c10: 80 a0 60 00 cmp %g1, 0 40005c14: 12 80 00 3a bne 40005cfc 40005c18: c2 24 20 08 st %g1, [ %l0 + 8 ] if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 40005c1c: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 40005c20: 03 10 00 6a sethi %hi(0x4001a800), %g1 40005c24: 82 10 62 6c or %g1, 0x26c, %g1 ! 4001aa6c 40005c28: 85 28 a0 05 sll %g2, 5, %g2 40005c2c: 84 00 80 01 add %g2, %g1, %g2 40005c30: c2 00 a0 04 ld [ %g2 + 4 ], %g1 40005c34: 80 a0 60 00 cmp %g1, 0 40005c38: 02 80 00 49 be 40005d5c 40005c3c: 01 00 00 00 nop /* * call discipline-specific close */ sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40005c40: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005c44: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED * default: just flush output buffer */ drainOutput (tty); } if (tty->device.outputUsesInterrupts 40005c48: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED 40005c4c: 80 a0 60 02 cmp %g1, 2 40005c50: 22 80 00 47 be,a 40005d6c 40005c54: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } if (tty->device.lastClose) 40005c58: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 40005c5c: 80 a0 60 00 cmp %g1, 0 40005c60: 22 80 00 07 be,a 40005c7c 40005c64: c4 04 00 00 ld [ %l0 ], %g2 (*tty->device.lastClose)(tty->major, tty->minor, arg); 40005c68: d0 04 20 0c ld [ %l0 + 0xc ], %o0 <== NOT EXECUTED 40005c6c: d2 04 20 10 ld [ %l0 + 0x10 ], %o1 <== NOT EXECUTED 40005c70: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005c74: 94 10 00 18 mov %i0, %o2 <== NOT EXECUTED if (tty->forw == NULL) { 40005c78: c4 04 00 00 ld [ %l0 ], %g2 <== NOT EXECUTED 40005c7c: 80 a0 a0 00 cmp %g2, 0 40005c80: 22 80 00 30 be,a 40005d40 40005c84: c6 04 20 04 ld [ %l0 + 4 ], %g3 if ( rtems_termios_ttyTail != NULL ) { rtems_termios_ttyTail->forw = NULL; } } else { tty->forw->back = tty->back; 40005c88: c2 04 20 04 ld [ %l0 + 4 ], %g1 <== NOT EXECUTED 40005c8c: c2 20 a0 04 st %g1, [ %g2 + 4 ] <== NOT EXECUTED } if (tty->back == NULL) { 40005c90: c2 04 20 04 ld [ %l0 + 4 ], %g1 40005c94: 80 a0 60 00 cmp %g1, 0 40005c98: 22 80 00 25 be,a 40005d2c 40005c9c: 03 10 00 6b sethi %hi(0x4001ac00), %g1 if ( rtems_termios_ttyHead != NULL ) { rtems_termios_ttyHead->back = NULL; } } else { tty->back->forw = tty->forw; 40005ca0: c4 20 40 00 st %g2, [ %g1 ] <== NOT EXECUTED } rtems_semaphore_delete (tty->isem); 40005ca4: 40 00 04 4f call 40006de0 40005ca8: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 rtems_semaphore_delete (tty->osem); 40005cac: 40 00 04 4d call 40006de0 40005cb0: d0 04 20 18 ld [ %l0 + 0x18 ], %o0 rtems_semaphore_delete (tty->rawOutBuf.Semaphore); 40005cb4: 40 00 04 4b call 40006de0 40005cb8: d0 04 20 8c ld [ %l0 + 0x8c ], %o0 if ((tty->device.pollRead == NULL) || 40005cbc: c2 04 20 a0 ld [ %l0 + 0xa0 ], %g1 40005cc0: 80 a0 60 00 cmp %g1, 0 40005cc4: 02 80 00 13 be 40005d10 40005cc8: 01 00 00 00 nop 40005ccc: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40005cd0: 80 a0 60 02 cmp %g1, 2 40005cd4: 02 80 00 0f be 40005d10 40005cd8: 01 00 00 00 nop (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)) rtems_semaphore_delete (tty->rawInBuf.Semaphore); free (tty->rawInBuf.theBuf); 40005cdc: 7f ff f5 ca call 40003404 40005ce0: d0 04 20 58 ld [ %l0 + 0x58 ], %o0 free (tty->rawOutBuf.theBuf); 40005ce4: 7f ff f5 c8 call 40003404 40005ce8: d0 04 20 7c ld [ %l0 + 0x7c ], %o0 free (tty->cbuf); 40005cec: 7f ff f5 c6 call 40003404 40005cf0: d0 04 20 1c ld [ %l0 + 0x1c ], %o0 free (tty); 40005cf4: 7f ff f5 c4 call 40003404 40005cf8: 90 10 00 10 mov %l0, %o0 } rtems_semaphore_release (rtems_termios_ttyMutex); 40005cfc: d0 04 60 3c ld [ %l1 + 0x3c ], %o0 40005d00: 40 00 05 52 call 40007248 40005d04: b0 10 20 00 clr %i0 return RTEMS_SUCCESSFUL; } 40005d08: 81 c7 e0 08 ret 40005d0c: 81 e8 00 00 restore rtems_semaphore_delete (tty->isem); rtems_semaphore_delete (tty->osem); rtems_semaphore_delete (tty->rawOutBuf.Semaphore); if ((tty->device.pollRead == NULL) || (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)) rtems_semaphore_delete (tty->rawInBuf.Semaphore); 40005d10: 40 00 04 34 call 40006de0 <== NOT EXECUTED 40005d14: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED 40005d18: 30 bf ff f1 b,a 40005cdc <== NOT EXECUTED struct rtems_termios_tty *tty = args->iop->data1; rtems_status_code sc; sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 40005d1c: 40 00 07 97 call 40007b78 <== NOT EXECUTED 40005d20: 01 00 00 00 nop <== NOT EXECUTED if (--tty->refcount == 0) { 40005d24: 10 bf ff ba b 40005c0c <== NOT EXECUTED 40005d28: c2 04 20 08 ld [ %l0 + 8 ], %g1 <== NOT EXECUTED else { tty->forw->back = tty->back; } if (tty->back == NULL) { rtems_termios_ttyHead = tty->forw; if ( rtems_termios_ttyHead != NULL ) { 40005d2c: 80 a0 a0 00 cmp %g2, 0 40005d30: 02 bf ff dd be 40005ca4 40005d34: c4 20 60 44 st %g2, [ %g1 + 0x44 ] rtems_termios_ttyHead->back = NULL; 40005d38: 10 bf ff db b 40005ca4 <== NOT EXECUTED 40005d3c: c0 20 a0 04 clr [ %g2 + 4 ] <== NOT EXECUTED rtems_fatal_error_occurred (sc); } if (tty->device.lastClose) (*tty->device.lastClose)(tty->major, tty->minor, arg); if (tty->forw == NULL) { rtems_termios_ttyTail = tty->back; 40005d40: 03 10 00 6b sethi %hi(0x4001ac00), %g1 if ( rtems_termios_ttyTail != NULL ) { 40005d44: 80 a0 e0 00 cmp %g3, 0 40005d48: 02 bf ff d2 be 40005c90 40005d4c: c6 20 60 40 st %g3, [ %g1 + 0x40 ] rtems_termios_ttyTail->forw = NULL; 40005d50: c0 20 c0 00 clr [ %g3 ] <== NOT EXECUTED 40005d54: 10 bf ff cf b 40005c90 <== NOT EXECUTED 40005d58: c4 04 00 00 ld [ %l0 ], %g2 <== NOT EXECUTED } else { /* * default: just flush output buffer */ drainOutput (tty); 40005d5c: 7f ff fd 66 call 400052f4 40005d60: 90 10 00 10 mov %l0, %o0 } if (tty->device.outputUsesInterrupts 40005d64: 10 bf ff ba b 40005c4c 40005d68: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 == TERMIOS_TASK_DRIVEN) { /* * send "terminate" to I/O tasks */ sc = rtems_event_send( 40005d6c: 40 00 02 ab call 40006818 <== NOT EXECUTED 40005d70: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 40005d74: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005d78: 12 80 00 0c bne 40005da8 <== NOT EXECUTED 40005d7c: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); sc = rtems_event_send( 40005d80: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 40005d84: 40 00 02 a5 call 40006818 <== NOT EXECUTED 40005d88: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) 40005d8c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005d90: 22 bf ff b3 be,a 40005c5c <== NOT EXECUTED 40005d94: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005d98: 40 00 07 78 call 40007b78 <== NOT EXECUTED 40005d9c: 01 00 00 00 nop <== NOT EXECUTED } if (tty->device.lastClose) 40005da0: 10 bf ff af b 40005c5c <== NOT EXECUTED 40005da4: c2 04 20 9c ld [ %l0 + 0x9c ], %g1 <== NOT EXECUTED */ sc = rtems_event_send( tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 40005da8: 40 00 07 74 call 40007b78 <== NOT EXECUTED 40005dac: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_event_send( 40005db0: 10 bf ff f5 b 40005d84 <== NOT EXECUTED 40005db4: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 4000465c : * for each transmitted character. * It returns number of characters left to transmit */ int rtems_termios_dequeue_characters (void *ttyp, int len) { 4000465c: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 40004660: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40004664: c4 06 20 b4 ld [ %i0 + 0xb4 ], %g2 <== NOT EXECUTED rtems_status_code sc; /* * sum up character count already sent */ tty->t_dqlen += len; 40004668: 82 00 40 19 add %g1, %i1, %g1 <== NOT EXECUTED 4000466c: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40004670: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 40004674: 02 80 00 10 be 400046b4 <== NOT EXECUTED 40004678: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED TERMIOS_TX_START_EVENT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); return 0; /* nothing to output in IRQ... */ } else if (tty->t_line == PPPDISC ) { 4000467c: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 40004680: 80 a0 60 05 cmp %g1, 5 <== NOT EXECUTED 40004684: 02 80 00 04 be 40004694 <== NOT EXECUTED 40004688: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); } return 0; /* nothing to output in IRQ... */ } else { return rtems_termios_refill_transmitter(tty); 4000468c: 7f ff ff 75 call 40004460 <== NOT EXECUTED 40004690: 81 e8 00 00 restore <== NOT EXECUTED } else if (tty->t_line == PPPDISC ) { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40004694: c2 00 63 20 ld [ %g1 + 0x320 ], %g1 <== NOT EXECUTED 40004698: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000469c: 02 80 00 04 be 400046ac <== NOT EXECUTED 400046a0: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 400046a4: 9f c0 40 00 call %g1 <== NOT EXECUTED 400046a8: 01 00 00 00 nop <== NOT EXECUTED return 0; /* nothing to output in IRQ... */ } else { return rtems_termios_refill_transmitter(tty); } } 400046ac: 81 c7 e0 08 ret <== NOT EXECUTED 400046b0: 81 e8 00 00 restore <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { /* * send wake up to transmitter task */ sc = rtems_event_send(tty->txTaskId, 400046b4: d0 06 20 c8 ld [ %i0 + 0xc8 ], %o0 <== NOT EXECUTED 400046b8: 40 00 08 58 call 40006818 <== NOT EXECUTED 400046bc: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED TERMIOS_TX_START_EVENT); if (sc != RTEMS_SUCCESSFUL) 400046c0: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400046c4: 02 bf ff fa be 400046ac <== NOT EXECUTED 400046c8: b0 10 20 00 clr %i0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400046cc: 40 00 0d 2b call 40007b78 <== NOT EXECUTED 400046d0: 01 00 00 00 nop <== NOT EXECUTED 400046d4: 30 bf ff f6 b,a 400046ac <== NOT EXECUTED 400046d8 : * 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) { 400046d8: 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) { 400046dc: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 400046e0: 05 10 00 6a sethi %hi(0x4001a800), %g2 <== NOT EXECUTED 400046e4: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 400046e8: a0 10 a2 6c or %g2, 0x26c, %l0 <== NOT EXECUTED 400046ec: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 400046f0: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 400046f4: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400046f8: 02 80 00 24 be 40004788 <== NOT EXECUTED 400046fc: 80 a6 a0 00 cmp %i2, 0 <== NOT EXECUTED while (len--) { 40004700: 22 80 00 11 be,a 40004744 <== NOT EXECUTED 40004704: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED 40004708: b4 06 80 19 add %i2, %i1, %i2 <== NOT EXECUTED c = *buf++; rtems_termios_linesw[tty->t_line].l_rint(c,tty); 4000470c: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { while (len--) { c = *buf++; 40004710: d0 0e 40 00 ldub [ %i1 ], %o0 <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_rint(c,tty); 40004714: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40004718: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 4000471c: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 <== NOT EXECUTED 40004720: 91 2a 20 18 sll %o0, 0x18, %o0 <== NOT EXECUTED 40004724: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40004728: 9f c0 80 00 call %g2 <== NOT EXECUTED 4000472c: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { while (len--) { c = *buf++; 40004730: b2 06 60 01 inc %i1 <== NOT EXECUTED int dropped = 0; boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { while (len--) { 40004734: 80 a6 40 1a cmp %i1, %i2 <== NOT EXECUTED 40004738: 32 bf ff f6 bne,a 40004710 <== NOT EXECUTED 4000473c: 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 )) { 40004740: c2 06 20 e4 ld [ %i0 + 0xe4 ], %g1 <== NOT EXECUTED 40004744: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004748: 12 80 00 0e bne 40004780 <== NOT EXECUTED 4000474c: a8 10 20 00 clr %l4 <== NOT EXECUTED 40004750: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 40004754: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004758: 02 80 00 0a be 40004780 <== NOT EXECUTED 4000475c: 01 00 00 00 nop <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40004760: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 40004764: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004768: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 4000476c: a8 10 20 00 clr %l4 <== NOT EXECUTED 40004770: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40004774: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; } 40004778: 81 c7 e0 08 ret <== NOT EXECUTED 4000477c: 91 e8 00 14 restore %g0, %l4, %o0 <== NOT EXECUTED 40004780: 81 c7 e0 08 ret <== NOT EXECUTED 40004784: 91 e8 00 14 restore %g0, %l4, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40004788: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED char c; int dropped = 0; boolean flow_rcv = FALSE; /* TRUE, if flow control char received */ rtems_interrupt_level level; if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 4000478c: a8 10 20 00 clr %l4 <== NOT EXECUTED 40004790: a6 10 20 00 clr %l3 <== NOT EXECUTED /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40004794: aa 06 20 30 add %i0, 0x30, %l5 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40004798: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 4000479c: 02 80 00 1c be 4000480c <== NOT EXECUTED 400047a0: ac 06 20 4a add %i0, 0x4a, %l6 <== NOT EXECUTED c = *buf++; /* FIXME: implement IXANY: any character restarts output */ /* if incoming XON/XOFF controls outgoing stream: */ if (tty->flow_ctrl & FL_MDXON) { 400047a4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400047a8: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 400047ac: 02 80 00 0b be 400047d8 <== NOT EXECUTED 400047b0: e2 0e 40 00 ldub [ %i1 ], %l1 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { 400047b4: c4 0e 20 4a ldub [ %i0 + 0x4a ], %g2 <== NOT EXECUTED 400047b8: 83 2c 60 18 sll %l1, 0x18, %g1 <== NOT EXECUTED 400047bc: 87 38 60 18 sra %g1, 0x18, %g3 <== NOT EXECUTED 400047c0: 80 a0 c0 02 cmp %g3, %g2 <== NOT EXECUTED 400047c4: 02 80 00 63 be 40004950 <== NOT EXECUTED 400047c8: c2 0e 20 49 ldub [ %i0 + 0x49 ], %g1 <== NOT EXECUTED /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; } flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { 400047cc: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 400047d0: 02 80 00 68 be 40004970 <== NOT EXECUTED 400047d4: 01 00 00 00 nop <== NOT EXECUTED /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; flow_rcv = TRUE; } } if (flow_rcv) { 400047d8: 80 a4 e0 00 cmp %l3, 0 <== NOT EXECUTED 400047dc: 02 80 00 23 be 40004868 <== NOT EXECUTED 400047e0: 01 00 00 00 nop <== NOT EXECUTED /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 400047e4: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400047e8: 82 08 60 30 and %g1, 0x30, %g1 <== NOT EXECUTED 400047ec: 80 a0 60 20 cmp %g1, 0x20 <== NOT EXECUTED 400047f0: 02 80 00 0f be 4000482c <== NOT EXECUTED 400047f4: 01 00 00 00 nop <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 400047f8: b2 06 60 01 inc %i1 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 400047fc: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED 40004800: 80 a6 bf ff cmp %i2, -1 <== NOT EXECUTED 40004804: 12 bf ff e8 bne 400047a4 <== NOT EXECUTED 40004808: 01 00 00 00 nop <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 4000480c: c2 06 20 78 ld [ %i0 + 0x78 ], %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 40004810: d0 06 20 68 ld [ %i0 + 0x68 ], %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } } } } tty->rawInBufDropped += dropped; 40004814: 82 00 40 14 add %g1, %l4, %g1 <== NOT EXECUTED 40004818: c2 26 20 78 st %g1, [ %i0 + 0x78 ] <== NOT EXECUTED rtems_semaphore_release (tty->rawInBuf.Semaphore); 4000481c: 40 00 0a 8b call 40007248 <== NOT EXECUTED 40004820: b0 10 00 14 mov %l4, %i0 <== NOT EXECUTED return dropped; } 40004824: 81 c7 e0 08 ret <== NOT EXECUTED 40004828: 81 e8 00 00 restore <== NOT EXECUTED } if (flow_rcv) { /* restart output according to FL_ORCVXOF flag */ if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { /* disable interrupts */ rtems_interrupt_disable(level); 4000482c: 7f ff f5 e8 call 40001fcc <== NOT EXECUTED 40004830: 01 00 00 00 nop <== NOT EXECUTED 40004834: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 40004838: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 4000483c: 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; 40004840: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 40004844: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 40004848: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000484c: 12 80 00 55 bne 400049a0 <== NOT EXECUTED 40004850: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); } /* reenable interrupts */ rtems_interrupt_enable(level); 40004854: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40004858: 7f ff f5 e1 call 40001fdc <== NOT EXECUTED 4000485c: b2 06 60 01 inc %i1 <== NOT EXECUTED tty->tty_rcvwakeup = 1; } return 0; } while (len--) { 40004860: 10 bf ff e8 b 40004800 <== NOT EXECUTED 40004864: b4 06 bf ff add %i2, -1, %i2 <== NOT EXECUTED /* reenable interrupts */ rtems_interrupt_enable(level); } } else { newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size; 40004868: d0 06 20 60 ld [ %i0 + 0x60 ], %o0 <== NOT EXECUTED 4000486c: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 40004870: 40 00 47 68 call 40016610 <.urem> <== NOT EXECUTED 40004874: 90 02 20 01 inc %o0 <== NOT EXECUTED /* if chars_in_buffer > highwater */ rtems_interrupt_disable(level); 40004878: 7f ff f5 d5 call 40001fcc <== NOT EXECUTED 4000487c: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED 40004880: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size) 40004884: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 40004888: d0 06 20 64 ld [ %i0 + 0x64 ], %o0 <== NOT EXECUTED 4000488c: d2 06 20 64 ld [ %i0 + 0x64 ], %o1 <== NOT EXECUTED 40004890: 90 22 00 01 sub %o0, %g1, %o0 <== NOT EXECUTED 40004894: 40 00 47 5f call 40016610 <.urem> <== NOT EXECUTED 40004898: 90 02 00 10 add %o0, %l0, %o0 <== NOT EXECUTED 4000489c: c2 06 20 c0 ld [ %i0 + 0xc0 ], %g1 <== NOT EXECUTED 400048a0: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 400048a4: 08 80 00 13 bleu 400048f0 <== NOT EXECUTED 400048a8: 01 00 00 00 nop <== NOT EXECUTED 400048ac: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400048b0: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 400048b4: 12 80 00 0f bne 400048f0 <== NOT EXECUTED 400048b8: 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; 400048bc: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400048c0: 82 10 60 01 or %g1, 1, %g1 <== NOT EXECUTED 400048c4: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 400048c8: c4 06 20 b8 ld [ %i0 + 0xb8 ], %g2 <== NOT EXECUTED 400048cc: 84 08 a4 02 and %g2, 0x402, %g2 <== NOT EXECUTED 400048d0: 80 a0 a4 00 cmp %g2, 0x400 <== NOT EXECUTED 400048d4: 02 80 00 45 be 400049e8 <== NOT EXECUTED 400048d8: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) 400048dc: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400048e0: 82 08 61 04 and %g1, 0x104, %g1 <== NOT EXECUTED 400048e4: 80 a0 61 00 cmp %g1, 0x100 <== NOT EXECUTED 400048e8: 02 80 00 36 be 400049c0 <== NOT EXECUTED 400048ec: 01 00 00 00 nop <== NOT EXECUTED tty->device.stopRemoteTx(tty->minor); } } } /* reenable interrupts */ rtems_interrupt_enable(level); 400048f0: 7f ff f5 bb call 40001fdc <== NOT EXECUTED 400048f4: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { 400048f8: c2 06 20 5c ld [ %i0 + 0x5c ], %g1 <== NOT EXECUTED 400048fc: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 40004900: 22 80 00 21 be,a 40004984 <== NOT EXECUTED 40004904: a8 05 20 01 inc %l4 <== NOT EXECUTED dropped++; } else { tty->rawInBuf.theBuf[newTail] = c; 40004908: c2 06 20 58 ld [ %i0 + 0x58 ], %g1 <== NOT EXECUTED 4000490c: e2 28 40 10 stb %l1, [ %g1 + %l0 ] <== NOT EXECUTED tty->rawInBuf.Tail = newTail; /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { 40004910: c4 06 20 e4 ld [ %i0 + 0xe4 ], %g2 <== NOT EXECUTED if (newTail == tty->rawInBuf.Head) { dropped++; } else { tty->rawInBuf.theBuf[newTail] = c; tty->rawInBuf.Tail = newTail; 40004914: 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 )) { 40004918: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 4000491c: 32 bf ff b8 bne,a 400047fc <== NOT EXECUTED 40004920: b2 06 60 01 inc %i1 <== NOT EXECUTED 40004924: c2 06 20 dc ld [ %i0 + 0xdc ], %g1 <== NOT EXECUTED 40004928: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000492c: 22 bf ff b4 be,a 400047fc <== NOT EXECUTED 40004930: b2 06 60 01 inc %i1 <== NOT EXECUTED (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40004934: d2 06 20 e0 ld [ %i0 + 0xe0 ], %o1 <== NOT EXECUTED 40004938: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000493c: 90 10 00 15 mov %l5, %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 1; 40004940: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 40004944: b2 06 60 01 inc %i1 <== NOT EXECUTED /* * check to see if rcv wakeup callback was set */ if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) { (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); tty->tty_rcvwakeup = 1; 40004948: 10 bf ff ad b 400047fc <== NOT EXECUTED 4000494c: c2 26 20 e4 st %g1, [ %i0 + 0xe4 ] <== NOT EXECUTED /* FIXME: implement IXANY: any character restarts output */ /* if incoming XON/XOFF controls outgoing stream: */ if (tty->flow_ctrl & FL_MDXON) { /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { if (c == tty->termios.c_cc[VSTART]) { 40004950: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40004954: 02 80 00 0e be 4000498c <== NOT EXECUTED 40004958: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; } else { /* VSTOP received (other code than VSTART) */ /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; 4000495c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 40004960: a6 10 20 01 mov 1, %l3 <== NOT EXECUTED tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; } else { /* VSTOP received (other code than VSTART) */ /* stop output */ tty->flow_ctrl |= FL_ORCVXOF; 40004964: 82 10 60 10 or %g1, 0x10, %g1 <== NOT EXECUTED 40004968: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED 4000496c: 30 bf ff 9e b,a 400047e4 <== NOT EXECUTED flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { /* VSTART received */ /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; 40004970: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 40004974: a6 10 20 01 mov 1, %l3 <== NOT EXECUTED flow_rcv = TRUE; } else if (c == tty->termios.c_cc[VSTART]) { /* VSTART received */ /* restart output */ tty->flow_ctrl &= ~FL_ORCVXOF; 40004978: 82 08 7f ef and %g1, -17, %g1 <== NOT EXECUTED 4000497c: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED 40004980: 30 bf ff 99 b,a 400047e4 <== NOT EXECUTED } return 0; } while (len--) { c = *buf++; 40004984: 10 bf ff 9e b 400047fc <== NOT EXECUTED 40004988: b2 06 60 01 inc %i1 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { if (c == tty->termios.c_cc[VSTART]) { /* received VSTOP and VSTART==VSTOP? */ /* then toggle "stop output" status */ tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 4000498c: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED } } } tty->rawInBufDropped += dropped; rtems_semaphore_release (tty->rawInBuf.Semaphore); return dropped; 40004990: a6 10 20 01 mov 1, %l3 <== NOT EXECUTED /* if received char is V_STOP and V_START (both are equal value) */ if (c == tty->termios.c_cc[VSTOP]) { if (c == tty->termios.c_cc[VSTART]) { /* received VSTOP and VSTART==VSTOP? */ /* then toggle "stop output" status */ tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 40004994: 82 18 60 10 xor %g1, 0x10, %g1 <== NOT EXECUTED 40004998: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED 4000499c: 30 bf ff 92 b,a 400047e4 <== NOT EXECUTED rtems_interrupt_disable(level); tty->flow_ctrl &= ~FL_OSTOP; /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 400049a0: d2 06 20 84 ld [ %i0 + 0x84 ], %o1 <== NOT EXECUTED 400049a4: c2 06 20 7c ld [ %i0 + 0x7c ], %g1 <== NOT EXECUTED 400049a8: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 400049ac: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 400049b0: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 400049b4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400049b8: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 400049bc: 30 bf ff a6 b,a 40004854 <== NOT EXECUTED 1); } } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS ) ) { tty->flow_ctrl |= FL_IRTSOFF; 400049c0: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 400049c4: 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; 400049c8: 82 10 60 04 or %g1, 4, %g1 <== NOT EXECUTED 400049cc: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED /* deactivate RTS line */ if (tty->device.stopRemoteTx != NULL) { 400049d0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400049d4: 02 bf ff c7 be 400048f0 <== NOT EXECUTED 400049d8: 01 00 00 00 nop <== NOT EXECUTED tty->device.stopRemoteTx(tty->minor); 400049dc: 9f c0 80 00 call %g2 <== NOT EXECUTED 400049e0: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 400049e4: 30 bf ff c3 b,a 400048f0 <== NOT EXECUTED !(tty->flow_ctrl & FL_IREQXOF)) { /* incoming data stream should be stopped */ tty->flow_ctrl |= FL_IREQXOF; if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || 400049e8: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400049ec: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 400049f0: 12 80 00 06 bne 40004a08 <== NOT EXECUTED 400049f4: 01 00 00 00 nop <== NOT EXECUTED 400049f8: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED 400049fc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40004a00: 12 bf ff bc bne 400048f0 <== NOT EXECUTED 40004a04: 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; 40004a08: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004a0c: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 40004a10: 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; 40004a14: 82 10 60 02 or %g1, 2, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004a18: 92 10 00 16 mov %l6, %o1 <== NOT EXECUTED == (FL_MDXOF ) ){ if ((tty->flow_ctrl & FL_OSTOP) || (tty->rawOutBufState == rob_idle)) { /* if tx is stopped due to XOFF or out of data */ /* call write function here */ tty->flow_ctrl |= FL_ISNTXOF; 40004a1c: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004a20: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004a24: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40004a28: 30 bf ff b2 b,a 400048f0 <== NOT EXECUTED 400043d8 : struct rtems_termios_tty *rtems_termios_ttyTail; rtems_id rtems_termios_ttyMutex; void rtems_termios_initialize (void) { 400043d8: 9d e3 bf 98 save %sp, -104, %sp rtems_status_code sc; /* * Create the mutex semaphore for the tty list */ if (!rtems_termios_ttyMutex) { 400043dc: 03 10 00 6b sethi %hi(0x4001ac00), %g1 400043e0: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 4001ac3c 400043e4: 80 a0 a0 00 cmp %g2, 0 400043e8: 02 80 00 04 be 400043f8 400043ec: 98 10 60 3c or %g1, 0x3c, %o4 400043f0: 81 c7 e0 08 ret 400043f4: 81 e8 00 00 restore sc = rtems_semaphore_create ( 400043f8: 11 15 14 9b sethi %hi(0x54526c00), %o0 400043fc: 92 10 20 01 mov 1, %o1 40004400: 90 12 21 69 or %o0, 0x169, %o0 40004404: 94 10 20 54 mov 0x54, %o2 40004408: 40 00 09 ea call 40006bb0 4000440c: 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) 40004410: 80 a2 20 00 cmp %o0, 0 40004414: 02 bf ff f7 be 400043f0 40004418: 01 00 00 00 nop rtems_fatal_error_occurred (sc); 4000441c: 40 00 0d d7 call 40007b78 <== NOT EXECUTED 40004420: 91 e8 00 08 restore %g0, %o0, %o0 <== NOT EXECUTED 40004424: 01 00 00 00 nop 400057c0 : } } rtems_status_code rtems_termios_ioctl (void *arg) { 400057c0: 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; 400057c4: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; rtems_status_code sc; args->ioctl_return = 0; 400057c8: 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; 400057cc: e2 00 60 28 ld [ %g1 + 0x28 ], %l1 <== NOT EXECUTED struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; 400057d0: 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); 400057d4: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED } } rtems_status_code rtems_termios_ioctl (void *arg) { 400057d8: 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); 400057dc: 92 10 20 00 clr %o1 <== NOT EXECUTED 400057e0: 40 00 05 cb call 40006f0c <== NOT EXECUTED 400057e4: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) { 400057e8: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 400057ec: 22 80 00 05 be,a 40005800 <== NOT EXECUTED 400057f0: c4 04 a0 04 ld [ %l2 + 4 ], %g2 <== NOT EXECUTED args->ioctl_return = sc; 400057f4: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED 400057f8: 81 c7 e0 08 ret <== NOT EXECUTED 400057fc: 81 e8 00 00 restore <== NOT EXECUTED return sc; } switch (args->command) { 40005800: 80 a0 a0 04 cmp %g2, 4 <== NOT EXECUTED 40005804: 22 80 00 27 be,a 400058a0 <== NOT EXECUTED 40005808: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED 4000580c: 18 80 00 0e bgu 40005844 <== NOT EXECUTED 40005810: 03 10 01 19 sethi %hi(0x40046400), %g1 <== NOT EXECUTED 40005814: 80 a0 a0 02 cmp %g2, 2 <== NOT EXECUTED 40005818: 22 80 00 61 be,a 4000599c <== NOT EXECUTED 4000581c: d2 04 a0 08 ld [ %l2 + 8 ], %o1 <== NOT EXECUTED 40005820: 08 80 00 4c bleu 40005950 <== NOT EXECUTED 40005824: 80 a0 a0 01 cmp %g2, 1 <== NOT EXECUTED if (tty->device.setAttributes) (*tty->device.setAttributes)(tty->minor, &tty->termios); break; case RTEMS_IO_TCDRAIN: drainOutput (tty); 40005828: 7f ff fe b3 call 400052f4 <== NOT EXECUTED 4000582c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED /* Half guess that this is the right operation */ *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; } break; } rtems_semaphore_release (tty->osem); 40005830: 40 00 06 86 call 40007248 <== NOT EXECUTED 40005834: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED args->ioctl_return = sc; 40005838: f0 24 a0 0c st %i0, [ %l2 + 0xc ] <== NOT EXECUTED return sc; } 4000583c: 81 c7 e0 08 ret <== NOT EXECUTED 40005840: 81 e8 00 00 restore <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) { args->ioctl_return = sc; return sc; } switch (args->command) { 40005844: 82 10 62 7f or %g1, 0x27f, %g1 <== NOT EXECUTED 40005848: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4000584c: 02 80 00 48 be 4000596c <== NOT EXECUTED 40005850: 01 00 00 00 nop <== NOT EXECUTED 40005854: 18 80 00 1b bgu 400058c0 <== NOT EXECUTED 40005858: 03 10 01 1d sethi %hi(0x40047400), %g1 <== NOT EXECUTED 4000585c: 80 a0 a0 05 cmp %g2, 5 <== NOT EXECUTED 40005860: 22 80 00 14 be,a 400058b0 <== NOT EXECUTED 40005864: c2 04 00 00 ld [ %l0 ], %g1 <== NOT EXECUTED default: if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { 40005868: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED 4000586c: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED 40005870: 82 10 62 6c or %g1, 0x26c, %g1 ! 4001aa6c <== NOT EXECUTED 40005874: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 40005878: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 4000587c: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 40005880: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005884: 02 bf ff eb be 40005830 <== NOT EXECUTED 40005888: b0 10 20 0a mov 0xa, %i0 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); 4000588c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005890: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005894: 92 10 00 12 mov %l2, %o1 <== NOT EXECUTED 40005898: 10 bf ff e6 b 40005830 <== NOT EXECUTED 4000589c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; break; case RTEMS_IO_RCVWAKEUP: tty->tty_rcv = *wakeup; 400058a0: c2 24 60 dc st %g1, [ %l1 + 0xdc ] <== NOT EXECUTED 400058a4: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 400058a8: 10 bf ff e2 b 40005830 <== NOT EXECUTED 400058ac: c4 24 60 e0 st %g2, [ %l1 + 0xe0 ] <== NOT EXECUTED case RTEMS_IO_TCDRAIN: drainOutput (tty); break; case RTEMS_IO_SNDWAKEUP: tty->tty_snd = *wakeup; 400058b0: c2 24 60 d4 st %g1, [ %l1 + 0xd4 ] <== NOT EXECUTED 400058b4: c4 04 20 04 ld [ %l0 + 4 ], %g2 <== NOT EXECUTED 400058b8: 10 bf ff de b 40005830 <== NOT EXECUTED 400058bc: c4 24 60 d8 st %g2, [ %l1 + 0xd8 ] <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) { args->ioctl_return = sc; return sc; } switch (args->command) { 400058c0: 82 10 60 1a or %g1, 0x1a, %g1 <== NOT EXECUTED 400058c4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400058c8: 02 80 00 1e be 40005940 <== NOT EXECUTED 400058cc: 03 20 01 1d sethi %hi(0x80047400), %g1 <== NOT EXECUTED 400058d0: 82 10 60 1b or %g1, 0x1b, %g1 ! 8004741b <== NOT EXECUTED 400058d4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400058d8: 32 bf ff e5 bne,a 4000586c <== NOT EXECUTED 400058dc: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 <== NOT EXECUTED #if 1 /* FIXME */ case TIOCSETD: /* * close old line discipline */ if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 400058e0: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED 400058e4: 05 10 00 6a sethi %hi(0x4001a800), %g2 <== NOT EXECUTED 400058e8: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 400058ec: a0 10 a2 6c or %g2, 0x26c, %l0 <== NOT EXECUTED 400058f0: 82 00 40 10 add %g1, %l0, %g1 <== NOT EXECUTED 400058f4: c2 00 60 04 ld [ %g1 + 4 ], %g1 <== NOT EXECUTED 400058f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400058fc: 22 80 00 06 be,a 40005914 <== NOT EXECUTED 40005900: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40005904: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005908: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 4000590c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } tty->t_line=*(int*)(args->buffer); 40005910: c2 04 a0 08 ld [ %l2 + 8 ], %g1 <== NOT EXECUTED tty->t_sc = NULL; /* ensure that no more valid data */ 40005914: 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); 40005918: c6 00 40 00 ld [ %g1 ], %g3 <== NOT EXECUTED tty->t_sc = NULL; /* ensure that no more valid data */ /* * open new line discipline */ if (rtems_termios_linesw[tty->t_line].l_open != NULL) { 4000591c: 85 28 e0 05 sll %g3, 5, %g2 <== NOT EXECUTED 40005920: c4 04 00 02 ld [ %l0 + %g2 ], %g2 <== NOT EXECUTED 40005924: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005928: 02 bf ff c2 be 40005830 <== NOT EXECUTED 4000592c: c6 24 60 cc st %g3, [ %l1 + 0xcc ] <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_open(tty); 40005930: 9f c0 80 00 call %g2 <== NOT EXECUTED 40005934: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005938: 10 bf ff be b 40005830 <== NOT EXECUTED 4000593c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED } break; case TIOCGETD: *(int*)(args->buffer)=tty->t_line; 40005940: c4 04 a0 08 ld [ %l2 + 8 ], %g2 <== NOT EXECUTED 40005944: c2 04 60 cc ld [ %l1 + 0xcc ], %g1 <== NOT EXECUTED 40005948: 10 bf ff ba b 40005830 <== NOT EXECUTED 4000594c: c2 20 80 00 st %g1, [ %g2 ] <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) { args->ioctl_return = sc; return sc; } switch (args->command) { 40005950: 32 bf ff c7 bne,a 4000586c <== NOT EXECUTED 40005954: 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; 40005958: d0 04 a0 08 ld [ %l2 + 8 ], %o0 <== NOT EXECUTED 4000595c: 92 04 60 30 add %l1, 0x30, %o1 <== NOT EXECUTED 40005960: 40 00 28 2c call 4000fa10 <== NOT EXECUTED 40005964: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 40005968: 30 bf ff b2 b,a 40005830 <== NOT EXECUTED *(int*)(args->buffer)=tty->t_line; break; #endif case FIONREAD: { int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; 4000596c: c4 04 60 60 ld [ %l1 + 0x60 ], %g2 <== NOT EXECUTED 40005970: c2 04 60 5c ld [ %l1 + 0x5c ], %g1 <== NOT EXECUTED if ( rawnc < 0 ) 40005974: 88 a0 80 01 subcc %g2, %g1, %g4 <== NOT EXECUTED 40005978: 0c 80 00 82 bneg 40005b80 <== NOT EXECUTED 4000597c: 01 00 00 00 nop <== NOT EXECUTED rawnc += tty->rawInBuf.Size; /* Half guess that this is the right operation */ *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 40005980: c2 04 60 20 ld [ %l1 + 0x20 ], %g1 <== NOT EXECUTED 40005984: c4 04 60 24 ld [ %l1 + 0x24 ], %g2 <== NOT EXECUTED 40005988: c6 04 a0 08 ld [ %l2 + 8 ], %g3 <== NOT EXECUTED 4000598c: 82 20 40 02 sub %g1, %g2, %g1 <== NOT EXECUTED 40005990: 82 00 40 04 add %g1, %g4, %g1 <== NOT EXECUTED 40005994: 10 bf ff a7 b 40005830 <== NOT EXECUTED 40005998: c2 20 c0 00 st %g1, [ %g3 ] <== NOT EXECUTED case RTEMS_IO_GET_ATTRIBUTES: *(struct termios *)args->buffer = tty->termios; break; case RTEMS_IO_SET_ATTRIBUTES: tty->termios = *(struct termios *)args->buffer; 4000599c: a6 04 60 30 add %l1, 0x30, %l3 <== NOT EXECUTED 400059a0: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 400059a4: 40 00 28 1b call 4000fa10 <== NOT EXECUTED 400059a8: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED /* * check for flow control options to be switched off */ /* check for outgoing XON/XOFF flow control switched off */ if (( tty->flow_ctrl & FL_MDXON) && 400059ac: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400059b0: 80 88 62 00 btst 0x200, %g1 <== NOT EXECUTED 400059b4: 02 80 00 19 be 40005a18 <== NOT EXECUTED 400059b8: 01 00 00 00 nop <== NOT EXECUTED 400059bc: c2 04 60 30 ld [ %l1 + 0x30 ], %g1 <== NOT EXECUTED 400059c0: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 400059c4: 12 80 00 15 bne 40005a18 <== NOT EXECUTED 400059c8: 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); 400059cc: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 400059d0: 82 08 7d ef and %g1, -529, %g1 <== NOT EXECUTED 400059d4: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* has output been stopped due to received XOFF? */ if (tty->flow_ctrl & FL_OSTOP) { 400059d8: c4 04 60 b8 ld [ %l1 + 0xb8 ], %g2 <== NOT EXECUTED 400059dc: 80 88 a0 20 btst 0x20, %g2 <== NOT EXECUTED 400059e0: 02 80 00 0e be 40005a18 <== NOT EXECUTED 400059e4: 01 00 00 00 nop <== NOT EXECUTED /* disable interrupts */ rtems_interrupt_disable(level); 400059e8: 7f ff f1 79 call 40001fcc <== NOT EXECUTED 400059ec: 01 00 00 00 nop <== NOT EXECUTED 400059f0: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 400059f4: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 400059f8: 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; 400059fc: 82 08 7f df and %g1, -33, %g1 <== NOT EXECUTED 40005a00: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { 40005a04: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005a08: 12 80 00 6d bne 40005bbc <== NOT EXECUTED 40005a0c: 01 00 00 00 nop <== NOT EXECUTED /* if chars available, call write function... */ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); } /* reenable interrupts */ rtems_interrupt_enable(level); 40005a10: 7f ff f1 73 call 40001fdc <== NOT EXECUTED 40005a14: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED } } /* check for incoming XON/XOFF flow control switched off */ if (( tty->flow_ctrl & FL_MDXOF) && 40005a18: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005a1c: 80 88 64 00 btst 0x400, %g1 <== NOT EXECUTED 40005a20: 02 80 00 0c be 40005a50 <== NOT EXECUTED 40005a24: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 40005a28: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 40005a2c: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 40005a30: 12 80 00 08 bne 40005a50 <== NOT EXECUTED 40005a34: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_iflag & IXOFF)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDXOF); 40005a38: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005a3c: 82 08 7b ff and %g1, -1025, %g1 <== NOT EXECUTED 40005a40: 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); 40005a44: c4 04 60 b8 ld [ %l1 + 0xb8 ], %g2 <== NOT EXECUTED 40005a48: 84 08 bf fd and %g2, -3, %g2 <== NOT EXECUTED 40005a4c: c4 24 60 b8 st %g2, [ %l1 + 0xb8 ] <== NOT EXECUTED } /* check for incoming RTS/CTS flow control switched off */ if (( tty->flow_ctrl & FL_MDRTS) && 40005a50: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005a54: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 40005a58: 12 80 00 22 bne 40005ae0 <== NOT EXECUTED 40005a5c: c6 04 60 38 ld [ %l1 + 0x38 ], %g3 <== NOT EXECUTED /* * check for flow control options to be switched on */ /* check for incoming RTS/CTS flow control switched on */ if (tty->termios.c_cflag & CRTSCTS) { 40005a60: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40005a64: 06 80 00 4a bl 40005b8c <== NOT EXECUTED 40005a68: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl |= FL_MDRTS; } /* check for incoming XON/XOF flow control switched on */ if (tty->termios.c_iflag & IXOFF) { 40005a6c: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED 40005a70: 03 00 00 04 sethi %hi(0x1000), %g1 <== NOT EXECUTED 40005a74: 80 88 80 01 btst %g2, %g1 <== NOT EXECUTED 40005a78: 02 80 00 06 be 40005a90 <== NOT EXECUTED 40005a7c: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXOF; 40005a80: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005a84: 82 10 64 00 or %g1, 0x400, %g1 <== NOT EXECUTED 40005a88: 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) { 40005a8c: 80 88 a4 00 btst 0x400, %g2 <== NOT EXECUTED 40005a90: 22 80 00 06 be,a 40005aa8 <== NOT EXECUTED 40005a94: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_MDXON; 40005a98: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005a9c: 82 10 62 00 or %g1, 0x200, %g1 <== NOT EXECUTED 40005aa0: 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) { 40005aa4: c2 04 60 3c ld [ %l1 + 0x3c ], %g1 <== NOT EXECUTED 40005aa8: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 40005aac: 02 80 00 23 be 40005b38 <== NOT EXECUTED 40005ab0: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; } else { if (tty->termios.c_cc[VMIN]) { tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 40005ab4: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; 40005ab8: c0 24 60 70 clr [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; 40005abc: c0 24 60 74 clr [ %l1 + 0x74 ] <== NOT EXECUTED else { tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT; } } } if (tty->device.setAttributes) 40005ac0: c2 04 60 a8 ld [ %l1 + 0xa8 ], %g1 <== NOT EXECUTED 40005ac4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005ac8: 02 bf ff 5a be 40005830 <== NOT EXECUTED 40005acc: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.setAttributes)(tty->minor, &tty->termios); 40005ad0: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 40005ad4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005ad8: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED 40005adc: 30 bf ff 55 b,a 40005830 <== NOT EXECUTED /* FIXME: what happens, if we had sent XOFF but not yet XON? */ tty->flow_ctrl &= ~(FL_ISNTXOF); } /* check for incoming RTS/CTS flow control switched off */ if (( tty->flow_ctrl & FL_MDRTS) && 40005ae0: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40005ae4: 06 80 00 2a bl 40005b8c <== NOT EXECUTED 40005ae8: 01 00 00 00 nop <== NOT EXECUTED !(tty->termios.c_cflag & CRTSCTS)) { /* clear related flags in flow_ctrl */ tty->flow_ctrl &= ~(FL_MDRTS); 40005aec: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005af0: 82 08 7e ff and %g1, -257, %g1 <== NOT EXECUTED 40005af4: c2 24 60 b8 st %g1, [ %l1 + 0xb8 ] <== NOT EXECUTED /* restart remote Tx, if it was stopped */ if ((tty->flow_ctrl & FL_IRTSOFF) && 40005af8: c4 04 60 b8 ld [ %l1 + 0xb8 ], %g2 <== NOT EXECUTED 40005afc: 80 88 a0 04 btst 4, %g2 <== NOT EXECUTED 40005b00: 02 80 00 09 be 40005b24 <== NOT EXECUTED 40005b04: 01 00 00 00 nop <== NOT EXECUTED 40005b08: c2 04 60 b0 ld [ %l1 + 0xb0 ], %g1 <== NOT EXECUTED 40005b0c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005b10: 02 80 00 05 be 40005b24 <== NOT EXECUTED 40005b14: 01 00 00 00 nop <== NOT EXECUTED (tty->device.startRemoteTx != NULL)) { tty->device.startRemoteTx(tty->minor); 40005b18: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005b1c: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 40005b20: c6 04 60 38 ld [ %l1 + 0x38 ], %g3 <== NOT EXECUTED } tty->flow_ctrl &= ~(FL_IRTSOFF); 40005b24: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005b28: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 40005b2c: 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) { 40005b30: 10 bf ff cd b 40005a64 <== NOT EXECUTED 40005b34: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; } else { rtems_interval ticksPerSecond; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond); 40005b38: 40 00 02 24 call 400063c8 <== NOT EXECUTED 40005b3c: 90 10 20 03 mov 3, %o0 <== NOT EXECUTED tty->vtimeTicks = tty->termios.c_cc[VTIME] * ticksPerSecond / 10; 40005b40: d2 07 bf f4 ld [ %fp + -12 ], %o1 <== NOT EXECUTED 40005b44: e0 0c 60 46 ldub [ %l1 + 0x46 ], %l0 <== NOT EXECUTED 40005b48: 40 00 41 cc call 40016278 <.umul> <== NOT EXECUTED 40005b4c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40005b50: 40 00 42 04 call 40016360 <.udiv> <== NOT EXECUTED 40005b54: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED if (tty->termios.c_cc[VTIME]) { 40005b58: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40005b5c: 02 80 00 11 be 40005ba0 <== NOT EXECUTED 40005b60: d0 24 60 54 st %o0, [ %l1 + 0x54 ] <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; if (tty->termios.c_cc[VMIN]) 40005b64: c2 0c 60 47 ldub [ %l1 + 0x47 ], %g1 <== NOT EXECUTED else { rtems_interval ticksPerSecond; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond); tty->vtimeTicks = tty->termios.c_cc[VTIME] * ticksPerSecond / 10; if (tty->termios.c_cc[VTIME]) { tty->rawInBufSemaphoreOptions = RTEMS_WAIT; 40005b68: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; if (tty->termios.c_cc[VMIN]) 40005b6c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005b70: 12 bf ff d3 bne 40005abc <== NOT EXECUTED 40005b74: d0 24 60 70 st %o0, [ %l1 + 0x70 ] <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; 40005b78: 10 bf ff d2 b 40005ac0 <== NOT EXECUTED 40005b7c: d0 24 60 74 st %o0, [ %l1 + 0x74 ] <== NOT EXECUTED #endif case FIONREAD: { int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; if ( rawnc < 0 ) rawnc += tty->rawInBuf.Size; 40005b80: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 <== NOT EXECUTED 40005b84: 10 bf ff 7f b 40005980 <== NOT EXECUTED 40005b88: 88 01 00 01 add %g4, %g1, %g4 <== NOT EXECUTED /* * check for flow control options to be switched on */ /* check for incoming RTS/CTS flow control switched on */ if (tty->termios.c_cflag & CRTSCTS) { tty->flow_ctrl |= FL_MDRTS; 40005b8c: c2 04 60 b8 ld [ %l1 + 0xb8 ], %g1 <== NOT EXECUTED 40005b90: 82 10 61 00 or %g1, 0x100, %g1 <== NOT EXECUTED 40005b94: 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) { 40005b98: 10 bf ff b6 b 40005a70 <== NOT EXECUTED 40005b9c: c4 04 60 30 ld [ %l1 + 0x30 ], %g2 <== NOT EXECUTED tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; else tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; } else { if (tty->termios.c_cc[VMIN]) { 40005ba0: c2 0c 60 47 ldub [ %l1 + 0x47 ], %g1 <== NOT EXECUTED 40005ba4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005ba8: 32 bf ff c4 bne,a 40005ab8 <== NOT EXECUTED 40005bac: c0 24 60 6c clr [ %l1 + 0x6c ] <== NOT EXECUTED tty->rawInBufSemaphoreOptions = RTEMS_WAIT; tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT; tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT; } else { tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT; 40005bb0: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40005bb4: 10 bf ff c3 b 40005ac0 <== NOT EXECUTED 40005bb8: c2 24 60 6c st %g1, [ %l1 + 0x6c ] <== NOT EXECUTED rtems_interrupt_disable(level); tty->flow_ctrl &= ~FL_OSTOP; /* check for chars in output buffer (or rob_state?) */ if (tty->rawOutBufState != rob_idle) { /* if chars available, call write function... */ (*tty->device.write)(tty->minor, 40005bbc: d2 04 60 84 ld [ %l1 + 0x84 ], %o1 <== NOT EXECUTED 40005bc0: c2 04 60 7c ld [ %l1 + 0x7c ], %g1 <== NOT EXECUTED 40005bc4: c4 04 60 a4 ld [ %l1 + 0xa4 ], %g2 <== NOT EXECUTED 40005bc8: d0 04 60 10 ld [ %l1 + 0x10 ], %o0 <== NOT EXECUTED 40005bcc: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 40005bd0: 9f c0 80 00 call %g2 <== NOT EXECUTED 40005bd4: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 40005bd8: 30 bf ff 8e b,a 40005a10 <== NOT EXECUTED 40005db8 : rtems_device_major_number major, rtems_device_minor_number minor, void *arg, const rtems_termios_callbacks *callbacks ) { 40005db8: 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, 40005dbc: 29 10 00 6b sethi %hi(0x4001ac00), %l4 40005dc0: d0 05 20 3c ld [ %l4 + 0x3c ], %o0 ! 4001ac3c 40005dc4: 92 10 20 00 clr %o1 40005dc8: 40 00 04 51 call 40006f0c 40005dcc: 94 10 20 00 clr %o2 RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 40005dd0: a4 92 20 00 orcc %o0, 0, %l2 40005dd4: 32 80 00 1e bne,a 40005e4c 40005dd8: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED return sc; for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40005ddc: 27 10 00 6b sethi %hi(0x4001ac00), %l3 40005de0: e0 04 e0 44 ld [ %l3 + 0x44 ], %l0 ! 4001ac44 40005de4: 80 a4 20 00 cmp %l0, 0 40005de8: 32 80 00 08 bne,a 40005e08 40005dec: c2 04 20 0c ld [ %l0 + 0xc ], %g1 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40005df0: 10 80 00 19 b 40005e54 40005df4: 90 10 20 01 mov 1, %o0 */ sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) return sc; for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40005df8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED 40005dfc: 02 80 00 16 be 40005e54 <== NOT EXECUTED 40005e00: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED if ((tty->major == major) && (tty->minor == minor)) 40005e04: c2 04 20 0c ld [ %l0 + 0xc ], %g1 <== NOT EXECUTED 40005e08: 80 a0 40 18 cmp %g1, %i0 40005e0c: 32 bf ff fb bne,a 40005df8 40005e10: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED 40005e14: c2 04 20 10 ld [ %l0 + 0x10 ], %g1 40005e18: 80 a0 40 19 cmp %g1, %i1 40005e1c: 32 bf ff f7 bne,a 40005df8 40005e20: e0 04 00 00 ld [ %l0 ], %l0 <== NOT EXECUTED if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; if (!tty->refcount++) { 40005e24: c2 04 20 08 ld [ %l0 + 8 ], %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 40005e28: c4 06 80 00 ld [ %i2 ], %g2 if (!tty->refcount++) { 40005e2c: 82 00 60 01 inc %g1 */ if (c++ == 'z') c = 'a'; } args->iop->data1 = tty; 40005e30: e0 20 a0 28 st %l0, [ %g2 + 0x28 ] if (!tty->refcount++) { 40005e34: 80 a0 60 01 cmp %g1, 1 40005e38: 02 80 00 1e be 40005eb0 40005e3c: c2 24 20 08 st %g1, [ %l0 + 8 ] (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } } rtems_semaphore_release (rtems_termios_ttyMutex); 40005e40: 40 00 05 02 call 40007248 40005e44: d0 05 20 3c ld [ %l4 + 0x3c ], %o0 return RTEMS_SUCCESSFUL; } 40005e48: b0 10 00 12 mov %l2, %i0 40005e4c: 81 c7 e0 08 ret 40005e50: 81 e8 00 00 restore static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40005e54: 7f ff f6 33 call 40003720 40005e58: 92 10 20 e8 mov 0xe8, %o1 if (tty == NULL) { 40005e5c: a2 92 20 00 orcc %o0, 0, %l1 40005e60: 12 80 00 06 bne 40005e78 40005e64: d0 05 20 3c ld [ %l4 + 0x3c ], %o0 */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size); if (tty->rawInBuf.theBuf == NULL) { free(tty); rtems_semaphore_release (rtems_termios_ttyMutex); 40005e68: 40 00 04 f8 call 40007248 <== NOT EXECUTED 40005e6c: a4 10 20 1a mov 0x1a, %l2 <== NOT EXECUTED rtems_fatal_error_occurred (sc); } } rtems_semaphore_release (rtems_termios_ttyMutex); return RTEMS_SUCCESSFUL; } 40005e70: 81 c7 e0 08 ret <== NOT EXECUTED 40005e74: 91 e8 00 12 restore %g0, %l2, %o0 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 40005e78: 03 10 00 68 sethi %hi(0x4001a000), %g1 40005e7c: c4 00 61 48 ld [ %g1 + 0x148 ], %g2 ! 4001a148 static char c = 'a'; /* * Create a new device */ tty = calloc (1, sizeof (struct rtems_termios_tty)); 40005e80: a0 10 00 11 mov %l1, %l0 return RTEMS_NO_MEMORY; } /* * allocate raw input buffer */ tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE; 40005e84: c4 24 60 64 st %g2, [ %l1 + 0x64 ] tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size); 40005e88: d0 04 60 64 ld [ %l1 + 0x64 ], %o0 40005e8c: 7f ff f5 87 call 400034a8 40005e90: 01 00 00 00 nop if (tty->rawInBuf.theBuf == NULL) { 40005e94: 80 a2 20 00 cmp %o0, 0 40005e98: 12 80 00 25 bne 40005f2c 40005e9c: d0 24 60 58 st %o0, [ %l1 + 0x58 ] free(tty); 40005ea0: 7f ff f5 59 call 40003404 <== NOT EXECUTED 40005ea4: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_semaphore_release (rtems_termios_ttyMutex); 40005ea8: 10 bf ff f0 b 40005e68 <== NOT EXECUTED 40005eac: d0 05 20 3c ld [ %l4 + 0x3c ], %o0 <== NOT EXECUTED c = 'a'; } args->iop->data1 = tty; if (!tty->refcount++) { if (tty->device.firstOpen) 40005eb0: c2 04 20 98 ld [ %l0 + 0x98 ], %g1 40005eb4: 80 a0 60 00 cmp %g1, 0 40005eb8: 02 80 00 05 be 40005ecc 40005ebc: 90 10 00 18 mov %i0, %o0 (*tty->device.firstOpen)(major, minor, arg); 40005ec0: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40005ec4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40005ec8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED /* * start I/O tasks, if needed */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40005ecc: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40005ed0: 80 a0 60 02 cmp %g1, 2 40005ed4: 12 bf ff db bne 40005e40 40005ed8: 13 10 00 18 sethi %hi(0x40006000), %o1 sc = rtems_task_start(tty->rxTaskId, 40005edc: d0 04 20 c4 ld [ %l0 + 0xc4 ], %o0 <== NOT EXECUTED 40005ee0: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40005ee4: 40 00 06 26 call 4000777c <== NOT EXECUTED 40005ee8: 92 12 62 8c or %o1, 0x28c, %o1 <== NOT EXECUTED rtems_termios_rxdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 40005eec: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005ef0: 22 80 00 05 be,a 40005f04 <== NOT EXECUTED 40005ef4: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005ef8: 40 00 07 20 call 40007b78 <== NOT EXECUTED 40005efc: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_start(tty->txTaskId, 40005f00: d0 04 20 c8 ld [ %l0 + 0xc8 ], %o0 <== NOT EXECUTED 40005f04: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40005f08: 13 10 00 18 sethi %hi(0x40006000), %o1 <== NOT EXECUTED 40005f0c: 40 00 06 1c call 4000777c <== NOT EXECUTED 40005f10: 92 12 63 1c or %o1, 0x31c, %o1 ! 4000631c <== NOT EXECUTED rtems_termios_txdaemon, (rtems_task_argument)tty); if (sc != RTEMS_SUCCESSFUL) 40005f14: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005f18: 02 bf ff ca be 40005e40 <== NOT EXECUTED 40005f1c: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40005f20: 40 00 07 16 call 40007b78 <== NOT EXECUTED 40005f24: 01 00 00 00 nop <== NOT EXECUTED 40005f28: 30 bf ff c6 b,a 40005e40 <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate raw output buffer */ tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE; 40005f2c: 03 10 00 68 sethi %hi(0x4001a000), %g1 40005f30: c4 00 61 4c ld [ %g1 + 0x14c ], %g2 ! 4001a14c 40005f34: c4 24 60 88 st %g2, [ %l1 + 0x88 ] tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size); 40005f38: d0 04 60 88 ld [ %l1 + 0x88 ], %o0 40005f3c: 7f ff f5 5b call 400034a8 40005f40: 01 00 00 00 nop if (tty->rawOutBuf.theBuf == NULL) { 40005f44: 80 a2 20 00 cmp %o0, 0 40005f48: 12 80 00 0b bne 40005f74 40005f4c: d0 24 60 7c st %o0, [ %l1 + 0x7c ] free((void *)(tty->rawInBuf.theBuf)); 40005f50: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED free(tty); rtems_semaphore_release (rtems_termios_ttyMutex); 40005f54: a4 10 20 1a mov 0x1a, %l2 <== NOT EXECUTED * allocate cooked buffer */ tty->cbuf = malloc (CBUFSIZE); if (tty->cbuf == NULL) { free((void *)(tty->rawOutBuf.theBuf)); free((void *)(tty->rawInBuf.theBuf)); 40005f58: 7f ff f5 2b call 40003404 <== NOT EXECUTED 40005f5c: b0 10 00 12 mov %l2, %i0 <== NOT EXECUTED free(tty); 40005f60: 7f ff f5 29 call 40003404 <== NOT EXECUTED 40005f64: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_semaphore_release (rtems_termios_ttyMutex); 40005f68: 40 00 04 b8 call 40007248 <== NOT EXECUTED 40005f6c: d0 05 20 3c ld [ %l4 + 0x3c ], %o0 <== NOT EXECUTED 40005f70: 30 bf ff b7 b,a 40005e4c <== NOT EXECUTED return RTEMS_NO_MEMORY; } /* * allocate cooked buffer */ tty->cbuf = malloc (CBUFSIZE); 40005f74: 03 10 00 68 sethi %hi(0x4001a000), %g1 40005f78: 7f ff f5 4c call 400034a8 40005f7c: d0 00 61 44 ld [ %g1 + 0x144 ], %o0 ! 4001a144 if (tty->cbuf == NULL) { 40005f80: 80 a2 20 00 cmp %o0, 0 40005f84: 12 80 00 07 bne 40005fa0 40005f88: d0 24 60 1c st %o0, [ %l1 + 0x1c ] free((void *)(tty->rawOutBuf.theBuf)); 40005f8c: d0 04 60 7c ld [ %l1 + 0x7c ], %o0 <== NOT EXECUTED 40005f90: 7f ff f5 1d call 40003404 <== NOT EXECUTED 40005f94: a4 10 20 1a mov 0x1a, %l2 <== NOT EXECUTED free((void *)(tty->rawInBuf.theBuf)); 40005f98: 10 bf ff f0 b 40005f58 <== NOT EXECUTED 40005f9c: d0 04 60 58 ld [ %l1 + 0x58 ], %o0 <== NOT EXECUTED tty->tty_rcvwakeup = 0; /* * link tty */ tty->forw = rtems_termios_ttyHead; 40005fa0: c2 04 e0 44 ld [ %l3 + 0x44 ], %g1 return RTEMS_NO_MEMORY; } /* * Initialize wakeup callbacks */ tty->tty_snd.sw_pfn = NULL; 40005fa4: c0 24 60 d4 clr [ %l1 + 0xd4 ] tty->tty_snd.sw_arg = NULL; 40005fa8: c0 24 60 d8 clr [ %l1 + 0xd8 ] tty->tty_rcv.sw_pfn = NULL; 40005fac: c0 24 60 dc clr [ %l1 + 0xdc ] tty->tty_rcv.sw_arg = NULL; 40005fb0: c0 24 60 e0 clr [ %l1 + 0xe0 ] tty->tty_rcvwakeup = 0; 40005fb4: c0 24 60 e4 clr [ %l1 + 0xe4 ] /* * link tty */ tty->forw = rtems_termios_ttyHead; 40005fb8: c2 24 40 00 st %g1, [ %l1 ] tty->back = NULL; if (rtems_termios_ttyHead != NULL) 40005fbc: 80 a0 60 00 cmp %g1, 0 40005fc0: 02 80 00 03 be 40005fcc 40005fc4: c0 24 60 04 clr [ %l1 + 4 ] rtems_termios_ttyHead->back = tty; 40005fc8: e2 20 60 04 st %l1, [ %g1 + 4 ] <== NOT EXECUTED rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) 40005fcc: 07 10 00 6b sethi %hi(0x4001ac00), %g3 40005fd0: c4 00 e0 40 ld [ %g3 + 0x40 ], %g2 ! 4001ac40 */ tty->forw = rtems_termios_ttyHead; tty->back = NULL; if (rtems_termios_ttyHead != NULL) rtems_termios_ttyHead->back = tty; rtems_termios_ttyHead = tty; 40005fd4: 03 10 00 6b sethi %hi(0x4001ac00), %g1 if (rtems_termios_ttyTail == NULL) 40005fd8: 80 a0 a0 00 cmp %g2, 0 40005fdc: 02 80 00 72 be 400061a4 40005fe0: e0 20 60 44 st %l0, [ %g1 + 0x44 ] tty->major = major; /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 40005fe4: 27 10 00 68 sethi %hi(0x4001a000), %l3 40005fe8: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 ! 4001a150 40005fec: 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; 40005ff0: f2 24 20 10 st %i1, [ %l0 + 0x10 ] tty->major = major; 40005ff4: f0 24 20 0c st %i0, [ %l0 + 0xc ] /* * Set up mutex semaphores */ sc = rtems_semaphore_create ( 40005ff8: 90 12 21 00 or %o0, 0x100, %o0 40005ffc: 92 10 20 01 mov 1, %o1 40006000: 90 10 40 08 or %g1, %o0, %o0 40006004: 94 10 20 54 mov 0x54, %o2 40006008: 96 10 20 00 clr %o3 4000600c: 40 00 02 e9 call 40006bb0 40006010: 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) 40006014: 80 a2 20 00 cmp %o0, 0 40006018: 12 80 00 99 bne 4000627c 4000601c: 01 00 00 00 nop rtems_fatal_error_occurred (sc); sc = rtems_semaphore_create ( 40006020: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 40006024: 11 15 14 9b sethi %hi(0x54526c00), %o0 40006028: 92 10 20 01 mov 1, %o1 4000602c: 90 12 23 00 or %o0, 0x300, %o0 40006030: 94 10 20 54 mov 0x54, %o2 40006034: 90 10 40 08 or %g1, %o0, %o0 40006038: 96 10 20 00 clr %o3 4000603c: 40 00 02 dd call 40006bb0 40006040: 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) 40006044: 80 a2 20 00 cmp %o0, 0 40006048: 12 80 00 89 bne 4000626c 4000604c: 01 00 00 00 nop rtems_fatal_error_occurred (sc); sc = rtems_semaphore_create ( 40006050: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 40006054: 11 15 14 9e sethi %hi(0x54527800), %o0 40006058: 92 10 20 00 clr %o1 4000605c: 90 10 40 08 or %g1, %o0, %o0 40006060: 94 10 20 20 mov 0x20, %o2 40006064: 96 10 20 00 clr %o3 40006068: 40 00 02 d2 call 40006bb0 4000606c: 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) 40006070: 80 a2 20 00 cmp %o0, 0 40006074: 12 80 00 7a bne 4000625c 40006078: 01 00 00 00 nop rtems_fatal_error_occurred (sc); tty->rawOutBufState = rob_idle; 4000607c: c0 24 20 94 clr [ %l0 + 0x94 ] /* * Set callbacks */ tty->device = *callbacks; 40006080: 92 10 00 1b mov %i3, %o1 40006084: 90 04 20 98 add %l0, 0x98, %o0 40006088: 40 00 26 62 call 4000fa10 4000608c: 94 10 20 20 mov 0x20, %o2 /* * Create I/O tasks */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { 40006090: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 40006094: 80 a0 60 02 cmp %g1, 2 40006098: 02 80 00 54 be 400061e8 4000609c: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 &tty->rxTaskId); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); } if ((tty->device.pollRead == NULL) || 400060a0: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 400060a4: 80 a0 60 00 cmp %g1, 0 400060a8: 02 80 00 41 be 400061ac 400060ac: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 400060b0: c2 04 60 b4 ld [ %l1 + 0xb4 ], %g1 400060b4: 80 a0 60 02 cmp %g1, 2 400060b8: 02 80 00 3d be 400061ac 400060bc: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 400060c0: c8 0c e1 50 ldub [ %l3 + 0x150 ], %g4 tty->termios.c_cc[VDISCARD] = '\017'; tty->termios.c_cc[VWERASE] = '\027'; tty->termios.c_cc[VLNEXT] = '\026'; /* start with no flow control, clear flow control flags */ tty->flow_ctrl = 0; 400060c4: c0 24 60 b8 clr [ %l1 + 0xb8 ] /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 400060c8: c2 04 60 64 ld [ %l1 + 0x64 ], %g1 tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 400060cc: 88 01 20 01 inc %g4 tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 400060d0: da 04 60 64 ld [ %l1 + 0x64 ], %o5 /* start with no flow control, clear flow control flags */ tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; 400060d4: 83 30 60 01 srl %g1, 1, %g1 tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 400060d8: c8 2c e1 50 stb %g4, [ %l3 + 0x150 ] /* 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; 400060dc: c2 24 60 bc st %g1, [ %l1 + 0xbc ] } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 400060e0: 03 00 00 09 sethi %hi(0x2400), %g1 400060e4: 82 10 61 02 or %g1, 0x102, %g1 ! 2502 tty->termios.c_oflag = OPOST | ONLCR | XTABS; 400060e8: 05 00 00 06 sethi %hi(0x1800), %g2 } /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; 400060ec: c2 24 60 30 st %g1, [ %l1 + 0x30 ] tty->termios.c_oflag = OPOST | ONLCR | XTABS; 400060f0: 84 10 a0 05 or %g2, 5, %g2 tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; 400060f4: 03 00 00 20 sethi %hi(0x8000), %g1 400060f8: 82 10 62 3b or %g1, 0x23b, %g1 ! 823b /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; 400060fc: c4 24 60 34 st %g2, [ %l1 + 0x34 ] tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; 40006100: c2 24 60 3c st %g1, [ %l1 + 0x3c ] tty->termios.c_cc[VINTR] = '\003'; 40006104: 84 10 20 03 mov 3, %g2 tty->termios.c_cc[VQUIT] = '\034'; 40006108: 82 10 20 1c mov 0x1c, %g1 tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; tty->termios.c_cc[VINTR] = '\003'; 4000610c: c4 2c 60 41 stb %g2, [ %l1 + 0x41 ] tty->termios.c_cc[VQUIT] = '\034'; 40006110: c2 2c 60 42 stb %g1, [ %l1 + 0x42 ] tty->termios.c_cc[VERASE] = '\177'; 40006114: 84 10 20 7f mov 0x7f, %g2 tty->termios.c_cc[VKILL] = '\025'; 40006118: 82 10 20 15 mov 0x15, %g1 tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL; tty->termios.c_cc[VINTR] = '\003'; tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; 4000611c: c4 2c 60 43 stb %g2, [ %l1 + 0x43 ] tty->termios.c_cc[VKILL] = '\025'; 40006120: c2 2c 60 44 stb %g1, [ %l1 + 0x44 ] tty->termios.c_cc[VEOF] = '\004'; 40006124: 84 10 20 04 mov 4, %g2 tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; 40006128: 82 10 20 11 mov 0x11, %g1 tty->termios.c_cc[VINTR] = '\003'; tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; 4000612c: c4 2c 60 45 stb %g2, [ %l1 + 0x45 ] tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; 40006130: c2 2c 60 49 stb %g1, [ %l1 + 0x49 ] tty->termios.c_cc[VSTOP] = '\023'; 40006134: 84 10 20 13 mov 0x13, %g2 tty->termios.c_cc[VSUSP] = '\032'; 40006138: 82 10 20 1a mov 0x1a, %g1 /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 4000613c: 86 10 28 bd mov 0x8bd, %g3 tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; tty->termios.c_cc[VSTOP] = '\023'; 40006140: c4 2c 60 4a stb %g2, [ %l1 + 0x4a ] tty->termios.c_cc[VSUSP] = '\032'; 40006144: c2 2c 60 4b stb %g1, [ %l1 + 0x4b ] tty->termios.c_cc[VREPRINT] = '\022'; 40006148: 84 10 20 12 mov 0x12, %g2 tty->termios.c_cc[VDISCARD] = '\017'; 4000614c: 82 10 20 0f mov 0xf, %g1 /* * Set default parameters */ tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL; tty->termios.c_oflag = OPOST | ONLCR | XTABS; tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 40006150: c6 24 60 38 st %g3, [ %l1 + 0x38 ] tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; tty->termios.c_cc[VSTART] = '\021'; tty->termios.c_cc[VSTOP] = '\023'; tty->termios.c_cc[VSUSP] = '\032'; tty->termios.c_cc[VREPRINT] = '\022'; 40006154: c4 2c 60 4d stb %g2, [ %l1 + 0x4d ] tty->termios.c_cc[VDISCARD] = '\017'; 40006158: c2 2c 60 4e stb %g1, [ %l1 + 0x4e ] tty->termios.c_cc[VWERASE] = '\027'; 4000615c: 84 10 20 17 mov 0x17, %g2 tty->termios.c_cc[VLNEXT] = '\026'; 40006160: 86 10 20 16 mov 0x16, %g3 tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 40006164: 83 2b 60 01 sll %o5, 1, %g1 tty->termios.c_cc[VINTR] = '\003'; tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; tty->termios.c_cc[VEOL] = '\000'; 40006168: c0 2c 60 4c clrb [ %l1 + 0x4c ] tty->flow_ctrl = 0; /* * set low/highwater mark for XON/XOFF support */ tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; 4000616c: 82 00 40 0d add %g1, %o5, %g1 tty->termios.c_cc[VQUIT] = '\034'; tty->termios.c_cc[VERASE] = '\177'; tty->termios.c_cc[VKILL] = '\025'; tty->termios.c_cc[VEOF] = '\004'; tty->termios.c_cc[VEOL] = '\000'; tty->termios.c_cc[VEOL2] = '\000'; 40006170: 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; 40006174: 83 30 60 02 srl %g1, 2, %g1 tty->termios.c_cc[VSTART] = '\021'; tty->termios.c_cc[VSTOP] = '\023'; tty->termios.c_cc[VSUSP] = '\032'; tty->termios.c_cc[VREPRINT] = '\022'; tty->termios.c_cc[VDISCARD] = '\017'; tty->termios.c_cc[VWERASE] = '\027'; 40006178: c4 2c 60 4f stb %g2, [ %l1 + 0x4f ] tty->termios.c_cc[VLNEXT] = '\026'; 4000617c: c6 2c 60 50 stb %g3, [ %l1 + 0x50 ] tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 40006180: 89 29 20 18 sll %g4, 0x18, %g4 40006184: 89 39 20 18 sra %g4, 0x18, %g4 40006188: 80 a1 20 7b cmp %g4, 0x7b 4000618c: 12 bf ff 26 bne 40005e24 40006190: c2 24 60 c0 st %g1, [ %l1 + 0xc0 ] c = 'a'; 40006194: 84 10 20 61 mov 0x61, %g2 <== NOT EXECUTED 40006198: 03 10 00 68 sethi %hi(0x4001a000), %g1 <== NOT EXECUTED 4000619c: 10 bf ff 22 b 40005e24 <== NOT EXECUTED 400061a0: c4 28 61 50 stb %g2, [ %g1 + 0x150 ] ! 4001a150 <== NOT EXECUTED tty->back = NULL; if (rtems_termios_ttyHead != NULL) rtems_termios_ttyHead->back = tty; rtems_termios_ttyHead = tty; if (rtems_termios_ttyTail == NULL) rtems_termios_ttyTail = tty; 400061a4: 10 bf ff 90 b 40005fe4 400061a8: e0 20 e0 40 st %l0, [ %g3 + 0x40 ] rtems_fatal_error_occurred (sc); } if ((tty->device.pollRead == NULL) || (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){ sc = rtems_semaphore_create ( 400061ac: 11 15 14 9c sethi %hi(0x54527000), %o0 <== NOT EXECUTED 400061b0: 92 10 20 00 clr %o1 <== NOT EXECUTED 400061b4: 90 12 22 00 or %o0, 0x200, %o0 <== NOT EXECUTED 400061b8: 94 10 20 24 mov 0x24, %o2 <== NOT EXECUTED 400061bc: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 400061c0: 96 10 20 00 clr %o3 <== NOT EXECUTED 400061c4: 40 00 02 7b call 40006bb0 <== NOT EXECUTED 400061c8: 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) 400061cc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400061d0: 22 bf ff bd be,a 400060c4 <== NOT EXECUTED 400061d4: c8 0c e1 50 ldub [ %l3 + 0x150 ], %g4 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 400061d8: 40 00 06 68 call 40007b78 <== NOT EXECUTED 400061dc: 01 00 00 00 nop <== NOT EXECUTED tty->lowwater = tty->rawInBuf.Size * 1/2; tty->highwater = tty->rawInBuf.Size * 3/4; /* * Bump name characer */ if (c++ == 'z') 400061e0: 10 bf ff b9 b 400060c4 <== NOT EXECUTED 400061e4: c8 0c e1 50 ldub [ %l3 + 0x150 ], %g4 <== NOT EXECUTED /* * Create I/O tasks */ if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) { sc = rtems_task_create ( 400061e8: 11 15 1e 15 sethi %hi(0x54785400), %o0 <== NOT EXECUTED 400061ec: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 400061f0: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 400061f4: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 400061f8: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 400061fc: 98 10 20 00 clr %o4 <== NOT EXECUTED 40006200: 40 00 04 5f call 4000737c <== NOT EXECUTED 40006204: 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) 40006208: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4000620c: 02 80 00 05 be 40006220 <== NOT EXECUTED 40006210: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40006214: 40 00 06 59 call 40007b78 <== NOT EXECUTED 40006218: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_task_create ( 4000621c: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 <== NOT EXECUTED 40006220: 11 14 9e 15 sethi %hi(0x52785400), %o0 <== NOT EXECUTED 40006224: 92 10 20 09 mov 9, %o1 <== NOT EXECUTED 40006228: 90 10 40 08 or %g1, %o0, %o0 <== NOT EXECUTED 4000622c: 94 10 24 00 mov 0x400, %o2 <== NOT EXECUTED 40006230: 96 10 25 00 mov 0x500, %o3 <== NOT EXECUTED 40006234: 98 10 20 00 clr %o4 <== NOT EXECUTED 40006238: 40 00 04 51 call 4000737c <== NOT EXECUTED 4000623c: 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) 40006240: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40006244: 22 bf ff 98 be,a 400060a4 <== NOT EXECUTED 40006248: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED rtems_fatal_error_occurred (sc); 4000624c: 40 00 06 4b call 40007b78 <== NOT EXECUTED 40006250: 01 00 00 00 nop <== NOT EXECUTED } if ((tty->device.pollRead == NULL) || 40006254: 10 bf ff 94 b 400060a4 <== NOT EXECUTED 40006258: c2 04 60 a0 ld [ %l1 + 0xa0 ], %g1 <== NOT EXECUTED 0, RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO, RTEMS_NO_PRIORITY, &tty->rawOutBuf.Semaphore); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 4000625c: 40 00 06 47 call 40007b78 <== NOT EXECUTED 40006260: 01 00 00 00 nop <== NOT EXECUTED tty->rawOutBufState = rob_idle; 40006264: 10 bf ff 87 b 40006080 <== NOT EXECUTED 40006268: c0 24 20 94 clr [ %l0 + 0x94 ] <== NOT EXECUTED 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->osem); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 4000626c: 40 00 06 43 call 40007b78 <== NOT EXECUTED 40006270: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 40006274: 10 bf ff 78 b 40006054 <== NOT EXECUTED 40006278: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 <== NOT EXECUTED 1, RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, RTEMS_NO_PRIORITY, &tty->isem); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); 4000627c: 40 00 06 3f call 40007b78 <== NOT EXECUTED 40006280: 01 00 00 00 nop <== NOT EXECUTED sc = rtems_semaphore_create ( 40006284: 10 bf ff 68 b 40006024 <== NOT EXECUTED 40006288: c2 4c e1 50 ldsb [ %l3 + 0x150 ], %g1 <== NOT EXECUTED 40004a2c : * Send characters to device-specific code */ void rtems_termios_puts ( const void *_buf, int len, struct rtems_termios_tty *tty) { 40004a2c: 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) { 40004a30: c2 06 a0 b4 ld [ %i2 + 0xb4 ], %g1 40004a34: 80 a0 60 00 cmp %g1, 0 40004a38: 22 80 00 4c be,a 40004b68 40004a3c: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 (*tty->device.write)(tty->minor, (void *)buf, len); return; } newHead = tty->rawOutBuf.Head; 40004a40: e4 06 a0 80 ld [ %i2 + 0x80 ], %l2 <== NOT EXECUTED while (len) { 40004a44: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 40004a48: 02 80 00 4c be 40004b78 <== NOT EXECUTED 40004a4c: 01 00 00 00 nop <== NOT EXECUTED * len -= ncopy * * To minimize latency, the memcpy should be done * with interrupts enabled. */ newHead = (newHead + 1) % tty->rawOutBuf.Size; 40004a50: d2 06 a0 88 ld [ %i2 + 0x88 ], %o1 <== NOT EXECUTED 40004a54: 40 00 46 ef call 40016610 <.urem> <== NOT EXECUTED 40004a58: 90 04 a0 01 add %l2, 1, %o0 <== NOT EXECUTED rtems_interrupt_disable (level); 40004a5c: 7f ff f5 5c call 40001fcc <== NOT EXECUTED 40004a60: a4 10 00 08 mov %o0, %l2 <== NOT EXECUTED 40004a64: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED while (newHead == tty->rawOutBuf.Tail) { 40004a68: e2 06 a0 84 ld [ %i2 + 0x84 ], %l1 <== NOT EXECUTED 40004a6c: 80 a4 40 12 cmp %l1, %l2 <== NOT EXECUTED 40004a70: 02 80 00 0a be 40004a98 <== NOT EXECUTED 40004a74: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED 40004a78: 30 80 00 1b b,a 40004ae4 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); 40004a7c: 7f ff f5 54 call 40001fcc <== NOT EXECUTED 40004a80: 01 00 00 00 nop <== NOT EXECUTED 40004a84: 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) { 40004a88: c2 06 a0 84 ld [ %i2 + 0x84 ], %g1 <== NOT EXECUTED 40004a8c: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40004a90: 12 80 00 15 bne 40004ae4 <== NOT EXECUTED 40004a94: 82 10 20 02 mov 2, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_wait; 40004a98: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== NOT EXECUTED rtems_interrupt_enable (level); 40004a9c: 7f ff f5 50 call 40001fdc <== NOT EXECUTED 40004aa0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore, 40004aa4: d0 06 a0 8c ld [ %i2 + 0x8c ], %o0 <== NOT EXECUTED 40004aa8: 92 10 20 00 clr %o1 <== NOT EXECUTED 40004aac: 40 00 09 18 call 40006f0c <== NOT EXECUTED 40004ab0: 94 10 20 00 clr %o2 <== NOT EXECUTED RTEMS_WAIT, RTEMS_NO_TIMEOUT); if (sc != RTEMS_SUCCESSFUL) 40004ab4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40004ab8: 02 bf ff f1 be 40004a7c <== NOT EXECUTED 40004abc: 01 00 00 00 nop <== NOT EXECUTED rtems_fatal_error_occurred (sc); 40004ac0: 40 00 0c 2e call 40007b78 <== NOT EXECUTED 40004ac4: 01 00 00 00 nop <== NOT EXECUTED rtems_interrupt_disable (level); 40004ac8: 7f ff f5 41 call 40001fcc <== NOT EXECUTED 40004acc: 01 00 00 00 nop <== NOT EXECUTED 40004ad0: 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) { 40004ad4: c2 06 a0 84 ld [ %i2 + 0x84 ], %g1 <== NOT EXECUTED 40004ad8: 80 a0 40 11 cmp %g1, %l1 <== NOT EXECUTED 40004adc: 02 bf ff ef be 40004a98 <== NOT EXECUTED 40004ae0: 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++; 40004ae4: c8 06 a0 80 ld [ %i2 + 0x80 ], %g4 <== NOT EXECUTED 40004ae8: c4 0e 00 00 ldub [ %i0 ], %g2 <== NOT EXECUTED 40004aec: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 40004af0: c4 28 40 04 stb %g2, [ %g1 + %g4 ] <== NOT EXECUTED tty->rawOutBuf.Head = newHead; if (tty->rawOutBufState == rob_idle) { 40004af4: c6 06 a0 94 ld [ %i2 + 0x94 ], %g3 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (sc); rtems_interrupt_disable (level); } tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++; tty->rawOutBuf.Head = newHead; 40004af8: e4 26 a0 80 st %l2, [ %i2 + 0x80 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_idle) { 40004afc: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40004b00: 12 80 00 0b bne 40004b2c <== NOT EXECUTED 40004b04: 01 00 00 00 nop <== NOT EXECUTED /* check, whether XOFF has been received */ if (!(tty->flow_ctrl & FL_ORCVXOF)) { 40004b08: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 40004b0c: 80 88 60 10 btst 0x10, %g1 <== NOT EXECUTED 40004b10: 02 80 00 0d be 40004b44 <== NOT EXECUTED 40004b14: 01 00 00 00 nop <== NOT EXECUTED (*tty->device.write)(tty->minor, (char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); } else { /* remember that output has been stopped due to flow ctrl*/ tty->flow_ctrl |= FL_OSTOP; 40004b18: c2 06 a0 b8 ld [ %i2 + 0xb8 ], %g1 <== NOT EXECUTED 40004b1c: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED 40004b20: c2 26 a0 b8 st %g1, [ %i2 + 0xb8 ] <== NOT EXECUTED } tty->rawOutBufState = rob_busy; 40004b24: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED 40004b28: c2 26 a0 94 st %g1, [ %i2 + 0x94 ] <== NOT EXECUTED } rtems_interrupt_enable (level); 40004b2c: 7f ff f5 2c call 40001fdc <== NOT EXECUTED 40004b30: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) { (*tty->device.write)(tty->minor, (void *)buf, len); return; } newHead = tty->rawOutBuf.Head; while (len) { 40004b34: b2 86 7f ff addcc %i1, -1, %i1 <== NOT EXECUTED 40004b38: 02 80 00 10 be 40004b78 <== NOT EXECUTED 40004b3c: b0 06 20 01 inc %i0 <== NOT EXECUTED 40004b40: 30 bf ff c4 b,a 40004a50 <== NOT EXECUTED tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++; tty->rawOutBuf.Head = newHead; if (tty->rawOutBufState == rob_idle) { /* check, whether XOFF has been received */ if (!(tty->flow_ctrl & FL_ORCVXOF)) { (*tty->device.write)(tty->minor, 40004b44: d2 06 a0 84 ld [ %i2 + 0x84 ], %o1 <== NOT EXECUTED 40004b48: c2 06 a0 7c ld [ %i2 + 0x7c ], %g1 <== NOT EXECUTED 40004b4c: c4 06 a0 a4 ld [ %i2 + 0xa4 ], %g2 <== NOT EXECUTED 40004b50: d0 06 a0 10 ld [ %i2 + 0x10 ], %o0 <== NOT EXECUTED 40004b54: 92 02 40 01 add %o1, %g1, %o1 <== NOT EXECUTED 40004b58: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004b5c: 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; 40004b60: 10 bf ff f2 b 40004b28 <== NOT EXECUTED 40004b64: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED unsigned int newHead; rtems_interrupt_level level; rtems_status_code sc; if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) { (*tty->device.write)(tty->minor, (void *)buf, len); 40004b68: c2 06 a0 a4 ld [ %i2 + 0xa4 ], %g1 40004b6c: 92 10 00 18 mov %i0, %o1 40004b70: 9f c0 40 00 call %g1 40004b74: 94 10 00 19 mov %i1, %o2 40004b78: 81 c7 e0 08 ret 40004b7c: 81 e8 00 00 restore 400053a4 : return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 400053a4: 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; 400053a8: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED uint32_t count = args->count; 400053ac: e2 06 20 0c ld [ %i0 + 0xc ], %l1 <== NOT EXECUTED rtems_status_code rtems_termios_read (void *arg) { rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 400053b0: e0 00 60 28 ld [ %g1 + 0x28 ], %l0 <== NOT EXECUTED uint32_t count = args->count; char *buffer = args->buffer; 400053b4: e4 06 20 08 ld [ %i0 + 8 ], %l2 <== NOT EXECUTED rtems_status_code sc; sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 400053b8: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return RTEMS_SUCCESSFUL; } rtems_status_code rtems_termios_read (void *arg) { 400053bc: 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); 400053c0: 92 10 20 00 clr %o1 <== NOT EXECUTED 400053c4: 40 00 06 d2 call 40006f0c <== NOT EXECUTED 400053c8: 94 10 20 00 clr %o2 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 400053cc: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 400053d0: 12 80 00 10 bne 40005410 <== NOT EXECUTED 400053d4: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED return sc; if (rtems_termios_linesw[tty->t_line].l_read != NULL) { 400053d8: c4 04 20 cc ld [ %l0 + 0xcc ], %g2 <== NOT EXECUTED 400053dc: 82 10 62 6c or %g1, 0x26c, %g1 <== NOT EXECUTED 400053e0: 85 28 a0 05 sll %g2, 5, %g2 <== NOT EXECUTED 400053e4: 84 00 80 01 add %g2, %g1, %g2 <== NOT EXECUTED 400053e8: c2 00 a0 08 ld [ %g2 + 8 ], %g1 <== NOT EXECUTED 400053ec: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400053f0: 02 80 00 0a be 40005418 <== NOT EXECUTED 400053f4: 92 10 00 14 mov %l4, %o1 <== NOT EXECUTED sc = rtems_termios_linesw[tty->t_line].l_read(tty,args); 400053f8: 9f c0 40 00 call %g1 <== NOT EXECUTED 400053fc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40005400: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 40005404: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED 40005408: 40 00 07 90 call 40007248 <== NOT EXECUTED 4000540c: c0 24 20 e4 clr [ %l0 + 0xe4 ] <== NOT EXECUTED 40005410: 81 c7 e0 08 ret <== NOT EXECUTED 40005414: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->cindex == tty->ccount) { 40005418: c4 04 20 24 ld [ %l0 + 0x24 ], %g2 <== NOT EXECUTED 4000541c: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40005420: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005424: 22 80 00 20 be,a 400054a4 <== NOT EXECUTED 40005428: c2 04 20 28 ld [ %l0 + 0x28 ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 4000542c: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40005430: 22 80 00 16 be,a 40005488 <== NOT EXECUTED 40005434: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED 40005438: c6 04 20 24 ld [ %l0 + 0x24 ], %g3 <== NOT EXECUTED 4000543c: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40005440: 80 a0 c0 01 cmp %g3, %g1 <== NOT EXECUTED 40005444: 26 80 00 09 bl,a 40005468 <== NOT EXECUTED 40005448: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 4000544c: 10 80 00 0f b 40005488 <== NOT EXECUTED 40005450: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 40005454: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40005458: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4000545c: 24 80 00 0b ble,a 40005488 <== NOT EXECUTED 40005460: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; 40005464: c2 04 20 1c ld [ %l0 + 0x1c ], %g1 <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 40005468: a2 84 7f ff addcc %l1, -1, %l1 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; 4000546c: c4 08 40 03 ldub [ %g1 + %g3 ], %g2 <== NOT EXECUTED 40005470: 86 00 e0 01 inc %g3 <== NOT EXECUTED 40005474: c4 2c 80 00 stb %g2, [ %l2 ] <== NOT EXECUTED 40005478: c6 24 20 24 st %g3, [ %l0 + 0x24 ] <== NOT EXECUTED else sc = fillBufferQueue (tty); if (sc != RTEMS_SUCCESSFUL) tty->cindex = tty->ccount = 0; } while (count && (tty->cindex < tty->ccount)) { 4000547c: 12 bf ff f6 bne 40005454 <== NOT EXECUTED 40005480: a4 04 a0 01 inc %l2 <== NOT EXECUTED *buffer++ = tty->cbuf[tty->cindex++]; count--; } args->bytes_moved = args->count - count; 40005484: c2 05 20 0c ld [ %l4 + 0xc ], %g1 <== NOT EXECUTED tty->tty_rcvwakeup = 0; 40005488: 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; 4000548c: 82 20 40 11 sub %g1, %l1, %g1 <== NOT EXECUTED 40005490: c2 25 20 14 st %g1, [ %l4 + 0x14 ] <== NOT EXECUTED tty->tty_rcvwakeup = 0; rtems_semaphore_release (tty->isem); 40005494: 40 00 07 6d call 40007248 <== NOT EXECUTED 40005498: d0 04 20 14 ld [ %l0 + 0x14 ], %o0 <== NOT EXECUTED return sc; } 4000549c: 81 c7 e0 08 ret <== NOT EXECUTED 400054a0: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->cindex == tty->ccount) { tty->cindex = tty->ccount = 0; tty->read_start_column = tty->column; if (tty->device.pollRead != NULL 400054a4: 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; 400054a8: 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; 400054ac: c0 24 20 20 clr [ %l0 + 0x20 ] <== NOT EXECUTED tty->read_start_column = tty->column; if (tty->device.pollRead != NULL 400054b0: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 400054b4: 02 80 00 06 be 400054cc <== NOT EXECUTED 400054b8: c0 24 20 24 clr [ %l0 + 0x24 ] <== NOT EXECUTED 400054bc: c2 04 20 b4 ld [ %l0 + 0xb4 ], %g1 <== NOT EXECUTED 400054c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400054c4: 22 80 00 51 be,a 40005608 <== NOT EXECUTED 400054c8: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED * Fill the input buffer from the raw input queue */ static rtems_status_code fillBufferQueue (struct rtems_termios_tty *tty) { rtems_interval timeout = tty->rawInBufSemaphoreFirstTimeout; 400054cc: e6 04 20 74 ld [ %l0 + 0x74 ], %l3 <== NOT EXECUTED 400054d0: aa 10 20 01 mov 1, %l5 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 400054d4: 2d 10 00 68 sethi %hi(0x4001a000), %l6 <== NOT EXECUTED if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF)) == (FL_MDXON | FL_ISNTXOF)) && ((tty->rawOutBufState == rob_idle) || (tty->flow_ctrl & FL_OSTOP))) { /* XON should be sent now... */ (*tty->device.write)(tty->minor, 400054d8: ae 04 20 49 add %l0, 0x49, %l7 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 400054dc: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 <== NOT EXECUTED 400054e0: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 400054e4: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400054e8: 02 80 00 3e be 400055e0 <== NOT EXECUTED 400054ec: 80 a5 60 00 cmp %l5, 0 <== NOT EXECUTED 400054f0: c2 05 a1 44 ld [ %l6 + 0x144 ], %g1 <== NOT EXECUTED 400054f4: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 <== NOT EXECUTED 400054f8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400054fc: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40005500: 16 80 00 38 bge 400055e0 <== NOT EXECUTED 40005504: 80 a5 60 00 cmp %l5, 0 <== NOT EXECUTED (tty->ccount < (CBUFSIZE-1))) { unsigned char c; unsigned int newHead; newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size; 40005508: d0 04 20 5c ld [ %l0 + 0x5c ], %o0 <== NOT EXECUTED 4000550c: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 40005510: 40 00 44 40 call 40016610 <.urem> <== NOT EXECUTED 40005514: 90 02 20 01 inc %o0 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 40005518: 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; 4000551c: 84 10 00 08 mov %o0, %g2 <== NOT EXECUTED c = tty->rawInBuf.theBuf[newHead]; 40005520: e6 08 40 08 ldub [ %g1 + %o0 ], %l3 <== NOT EXECUTED tty->rawInBuf.Head = newHead; 40005524: d0 24 20 5c st %o0, [ %l0 + 0x5c ] <== NOT EXECUTED if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size) 40005528: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 4000552c: d0 04 20 64 ld [ %l0 + 0x64 ], %o0 <== NOT EXECUTED 40005530: d2 04 20 64 ld [ %l0 + 0x64 ], %o1 <== NOT EXECUTED 40005534: 90 02 00 01 add %o0, %g1, %o0 <== NOT EXECUTED 40005538: 40 00 44 36 call 40016610 <.urem> <== NOT EXECUTED 4000553c: 90 22 00 02 sub %o0, %g2, %o0 <== NOT EXECUTED 40005540: c2 04 20 bc ld [ %l0 + 0xbc ], %g1 <== NOT EXECUTED 40005544: 80 a2 00 01 cmp %o0, %g1 <== NOT EXECUTED 40005548: 3a 80 00 18 bcc,a 400055a8 <== NOT EXECUTED 4000554c: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED % tty->rawInBuf.Size) < tty->lowwater) { tty->flow_ctrl &= ~FL_IREQXOF; 40005550: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40005554: 82 08 7f fe and %g1, -2, %g1 <== NOT EXECUTED 40005558: 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)) 4000555c: c4 04 20 b8 ld [ %l0 + 0xb8 ], %g2 <== NOT EXECUTED 40005560: 84 08 a2 02 and %g2, 0x202, %g2 <== NOT EXECUTED 40005564: 80 a0 a2 02 cmp %g2, 0x202 <== NOT EXECUTED 40005568: 22 80 00 88 be,a 40005788 <== NOT EXECUTED 4000556c: c2 04 20 94 ld [ %l0 + 0x94 ], %g1 <== NOT EXECUTED /* XON should be sent now... */ (*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1); } else if (tty->flow_ctrl & FL_MDRTS) { 40005570: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40005574: 80 88 61 00 btst 0x100, %g1 <== NOT EXECUTED 40005578: 22 80 00 0c be,a 400055a8 <== NOT EXECUTED 4000557c: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_IRTSOFF; 40005580: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 40005584: 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; 40005588: 82 08 7f fb and %g1, -5, %g1 <== NOT EXECUTED 4000558c: c2 24 20 b8 st %g1, [ %l0 + 0xb8 ] <== NOT EXECUTED /* activate RTS line */ if (tty->device.startRemoteTx != NULL) { 40005590: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED 40005594: 22 80 00 05 be,a 400055a8 <== NOT EXECUTED 40005598: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED tty->device.startRemoteTx(tty->minor); 4000559c: 9f c0 80 00 call %g2 <== NOT EXECUTED 400055a0: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 400055a4: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 400055a8: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 400055ac: 02 80 00 63 be 40005738 <== NOT EXECUTED 400055b0: 90 0c e0 ff and %l3, 0xff, %o0 <== NOT EXECUTED if (siproc (c, tty)) 400055b4: 7f ff ff 07 call 400051d0 <== NOT EXECUTED 400055b8: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400055bc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400055c0: 32 80 00 02 bne,a 400055c8 <== NOT EXECUTED 400055c4: aa 10 20 00 clr %l5 <== NOT EXECUTED while ( wait ) { /* * Process characters read from raw queue */ while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) && 400055c8: c4 04 20 5c ld [ %l0 + 0x5c ], %g2 <== NOT EXECUTED 400055cc: c2 04 20 60 ld [ %l0 + 0x60 ], %g1 <== NOT EXECUTED 400055d0: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 400055d4: 12 bf ff c7 bne 400054f0 <== NOT EXECUTED 400055d8: e6 04 20 70 ld [ %l0 + 0x70 ], %l3 <== NOT EXECUTED } /* * Wait for characters */ if ( wait ) { 400055dc: 80 a5 60 00 cmp %l5, 0 <== NOT EXECUTED 400055e0: 02 bf ff 94 be 40005430 <== NOT EXECUTED 400055e4: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED sc = rtems_semaphore_obtain (tty->rawInBuf.Semaphore, 400055e8: d0 04 20 68 ld [ %l0 + 0x68 ], %o0 <== NOT EXECUTED 400055ec: d2 04 20 6c ld [ %l0 + 0x6c ], %o1 <== NOT EXECUTED 400055f0: 40 00 06 47 call 40006f0c <== NOT EXECUTED 400055f4: 94 10 00 13 mov %l3, %o2 <== NOT EXECUTED tty->rawInBufSemaphoreOptions, timeout); if (sc != RTEMS_SUCCESSFUL) 400055f8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400055fc: 02 bf ff b8 be 400054dc <== NOT EXECUTED 40005600: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40005604: 30 bf ff 8b b,a 40005430 <== NOT EXECUTED static rtems_status_code fillBufferPoll (struct rtems_termios_tty *tty) { int n; if (tty->termios.c_lflag & ICANON) { 40005608: 80 88 60 02 btst 2, %g1 <== NOT EXECUTED 4000560c: 12 80 00 3a bne 400056f4 <== NOT EXECUTED 40005610: 01 00 00 00 nop <== NOT EXECUTED } } } else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 40005614: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED 40005618: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000561c: 12 80 00 07 bne 40005638 <== NOT EXECUTED 40005620: aa 07 bf f4 add %fp, -12, %l5 <== NOT EXECUTED 40005624: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 40005628: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000562c: 12 80 00 3f bne 40005728 <== NOT EXECUTED 40005630: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED else { siproc (n, tty); if (tty->ccount >= tty->termios.c_cc[VMIN]) break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 40005634: 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); 40005638: a6 07 bf f0 add %fp, -16, %l3 <== NOT EXECUTED else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); for (;;) { n = (*tty->device.pollRead)(tty->minor); 4000563c: 9f c0 80 00 call %g2 <== NOT EXECUTED 40005640: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 40005644: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005648: 26 80 00 17 bl,a 400056a4 <== NOT EXECUTED 4000564c: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED } } rtems_task_wake_after (1); } else { siproc (n, tty); 40005650: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED 40005654: 7f ff fe df call 400051d0 <== NOT EXECUTED 40005658: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 4000565c: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 40005660: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40005664: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 40005668: 16 bf ff 71 bge 4000542c <== NOT EXECUTED 4000566c: 80 a0 a0 00 cmp %g2, 0 <== NOT EXECUTED break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) 40005670: 22 80 00 07 be,a 4000568c <== NOT EXECUTED 40005674: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED 40005678: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED 4000567c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40005680: 12 80 00 26 bne 40005718 <== NOT EXECUTED 40005684: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED 40005688: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); for (;;) { n = (*tty->device.pollRead)(tty->minor); 4000568c: 9f c0 80 00 call %g2 <== NOT EXECUTED 40005690: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 40005694: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005698: 36 bf ff ef bge,a 40005654 <== NOT EXECUTED 4000569c: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED if (tty->termios.c_cc[VMIN]) { 400056a0: c2 0c 20 47 ldub [ %l0 + 0x47 ], %g1 <== NOT EXECUTED 400056a4: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400056a8: 02 80 00 2c be 40005758 <== NOT EXECUTED 400056ac: c2 0c 20 46 ldub [ %l0 + 0x46 ], %g1 <== NOT EXECUTED if (tty->termios.c_cc[VTIME] && tty->ccount) { 400056b0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400056b4: 02 80 00 06 be 400056cc <== NOT EXECUTED 400056b8: 01 00 00 00 nop <== NOT EXECUTED 400056bc: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 400056c0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400056c4: 12 80 00 28 bne 40005764 <== NOT EXECUTED 400056c8: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); if ((now - then) > tty->vtimeTicks) { break; } } rtems_task_wake_after (1); 400056cc: 40 00 08 6f call 40007888 <== NOT EXECUTED 400056d0: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 400056d4: 10 bf ff da b 4000563c <== NOT EXECUTED 400056d8: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED n = (*tty->device.pollRead)(tty->minor); if (n < 0) { rtems_task_wake_after (1); } else { if (siproc (n, tty)) 400056dc: 7f ff fe bd call 400051d0 <== NOT EXECUTED 400056e0: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED 400056e4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400056e8: 12 bf ff 52 bne 40005430 <== NOT EXECUTED 400056ec: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 400056f0: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED { int n; if (tty->termios.c_lflag & ICANON) { for (;;) { n = (*tty->device.pollRead)(tty->minor); 400056f4: 9f c0 80 00 call %g2 <== NOT EXECUTED 400056f8: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED if (n < 0) { 400056fc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40005700: 16 bf ff f7 bge 400056dc <== NOT EXECUTED 40005704: 90 0a 20 ff and %o0, 0xff, %o0 <== NOT EXECUTED rtems_task_wake_after (1); 40005708: 40 00 08 60 call 40007888 <== NOT EXECUTED 4000570c: 90 10 20 01 mov 1, %o0 <== NOT EXECUTED 40005710: 10 bf ff f9 b 400056f4 <== NOT EXECUTED 40005714: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED else { siproc (n, tty); if (tty->ccount >= tty->termios.c_cc[VMIN]) break; if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 40005718: 40 00 03 2c call 400063c8 <== NOT EXECUTED 4000571c: 92 10 00 15 mov %l5, %o1 <== NOT EXECUTED 40005720: 10 bf ff db b 4000568c <== NOT EXECUTED 40005724: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED } } else { rtems_interval then, now; if (!tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME]) rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then); 40005728: 40 00 03 28 call 400063c8 <== NOT EXECUTED 4000572c: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 40005730: 10 bf ff c1 b 40005634 <== NOT EXECUTED 40005734: c4 04 20 a0 ld [ %l0 + 0xa0 ], %g2 <== NOT EXECUTED if (tty->termios.c_lflag & ICANON) { if (siproc (c, tty)) wait = 0; } else { siproc (c, tty); 40005738: 7f ff fe a6 call 400051d0 <== NOT EXECUTED 4000573c: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (tty->ccount >= tty->termios.c_cc[VMIN]) 40005740: c4 0c 20 47 ldub [ %l0 + 0x47 ], %g2 <== NOT EXECUTED 40005744: c2 04 20 20 ld [ %l0 + 0x20 ], %g1 <== NOT EXECUTED 40005748: 80 a0 40 02 cmp %g1, %g2 <== NOT EXECUTED 4000574c: 36 bf ff 9f bge,a 400055c8 <== NOT EXECUTED 40005750: aa 10 20 00 clr %l5 <== NOT EXECUTED 40005754: 30 bf ff 9d b,a 400055c8 <== NOT EXECUTED break; } } } else { if (!tty->termios.c_cc[VTIME]) 40005758: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000575c: 02 bf ff 34 be 4000542c <== NOT EXECUTED 40005760: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED break; rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); 40005764: 40 00 03 19 call 400063c8 <== NOT EXECUTED 40005768: 92 10 00 13 mov %l3, %o1 <== NOT EXECUTED if ((now - then) > tty->vtimeTicks) { 4000576c: c2 04 20 54 ld [ %l0 + 0x54 ], %g1 <== NOT EXECUTED 40005770: c4 1f bf f0 ldd [ %fp + -16 ], %g2 <== NOT EXECUTED 40005774: 84 20 80 03 sub %g2, %g3, %g2 <== NOT EXECUTED 40005778: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4000577c: 08 bf ff d4 bleu 400056cc <== NOT EXECUTED 40005780: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40005784: 30 bf ff 2b b,a 40005430 <== NOT EXECUTED if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size) % tty->rawInBuf.Size) < tty->lowwater) { tty->flow_ctrl &= ~FL_IREQXOF; /* if tx stopped and XON should be sent... */ if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF)) 40005788: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4000578c: 22 80 00 07 be,a 400057a8 <== NOT EXECUTED 40005790: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 40005794: c2 04 20 b8 ld [ %l0 + 0xb8 ], %g1 <== NOT EXECUTED 40005798: 80 88 60 20 btst 0x20, %g1 <== NOT EXECUTED 4000579c: 02 bf ff 75 be 40005570 <== NOT EXECUTED 400057a0: 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, 400057a4: c2 04 20 a4 ld [ %l0 + 0xa4 ], %g1 <== NOT EXECUTED 400057a8: d0 04 20 10 ld [ %l0 + 0x10 ], %o0 <== NOT EXECUTED 400057ac: 92 10 00 17 mov %l7, %o1 <== NOT EXECUTED 400057b0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400057b4: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED } } } /* continue processing new character */ if (tty->termios.c_lflag & ICANON) { 400057b8: 10 bf ff 7c b 400055a8 <== NOT EXECUTED 400057bc: c2 04 20 3c ld [ %l0 + 0x3c ], %g1 <== NOT EXECUTED 40004460 : * 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) { 40004460: 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)) 40004464: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 40004468: 82 08 64 03 and %g1, 0x403, %g1 <== NOT EXECUTED 4000446c: 80 a0 64 01 cmp %g1, 0x401 <== NOT EXECUTED 40004470: 22 80 00 41 be,a 40004574 <== NOT EXECUTED 40004474: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; rtems_interrupt_enable(level); nToSend = 1; } else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF)) 40004478: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000447c: 82 08 60 03 and %g1, 3, %g1 <== NOT EXECUTED 40004480: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40004484: 22 80 00 4c be,a 400045b4 <== NOT EXECUTED 40004488: c2 06 20 a4 ld [ %i0 + 0xa4 ], %g1 <== NOT EXECUTED rtems_interrupt_enable(level); nToSend = 1; } else { if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) { 4000448c: c4 06 20 80 ld [ %i0 + 0x80 ], %g2 <== NOT EXECUTED 40004490: c2 06 20 84 ld [ %i0 + 0x84 ], %g1 <== NOT EXECUTED 40004494: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 40004498: 22 80 00 2f be,a 40004554 <== NOT EXECUTED 4000449c: c2 06 20 94 ld [ %i0 + 0x94 ], %g1 <== NOT EXECUTED rtems_semaphore_release (tty->rawOutBuf.Semaphore); } return 0; } rtems_interrupt_disable(level); 400044a0: 7f ff f6 cb call 40001fcc <== NOT EXECUTED 400044a4: 01 00 00 00 nop <== NOT EXECUTED len = tty->t_dqlen; 400044a8: e0 06 20 90 ld [ %i0 + 0x90 ], %l0 <== NOT EXECUTED tty->t_dqlen = 0; 400044ac: c0 26 20 90 clr [ %i0 + 0x90 ] <== NOT EXECUTED rtems_interrupt_enable(level); 400044b0: 7f ff f6 cb call 40001fdc <== NOT EXECUTED 400044b4: 01 00 00 00 nop <== NOT EXECUTED newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size; 400044b8: d0 06 20 84 ld [ %i0 + 0x84 ], %o0 <== NOT EXECUTED 400044bc: d2 06 20 88 ld [ %i0 + 0x88 ], %o1 <== NOT EXECUTED 400044c0: 40 00 48 54 call 40016610 <.urem> <== NOT EXECUTED 400044c4: 90 04 00 08 add %l0, %o0, %o0 <== NOT EXECUTED tty->rawOutBuf.Tail = newTail; if (tty->rawOutBufState == rob_wait) { 400044c8: 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; 400044cc: d0 26 20 84 st %o0, [ %i0 + 0x84 ] <== NOT EXECUTED if (tty->rawOutBufState == rob_wait) { 400044d0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 400044d4: 02 80 00 54 be 40004624 <== NOT EXECUTED 400044d8: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED /* * wake up any pending writer task */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); } if (newTail == tty->rawOutBuf.Head) { 400044dc: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 400044e0: 80 a0 40 10 cmp %g1, %l0 <== NOT EXECUTED 400044e4: 22 80 00 44 be,a 400045f4 <== NOT EXECUTED 400044e8: c2 06 20 d4 ld [ %i0 + 0xd4 ], %g1 <== NOT EXECUTED if ( tty->tty_snd.sw_pfn != NULL) { (*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg); } } /* check, whether output should stop due to received XOFF */ else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) 400044ec: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 400044f0: 82 08 62 10 and %g1, 0x210, %g1 <== NOT EXECUTED 400044f4: 80 a0 62 10 cmp %g1, 0x210 <== NOT EXECUTED 400044f8: 02 80 00 4e be 40004630 <== NOT EXECUTED 400044fc: 01 00 00 00 nop <== NOT EXECUTED } else { /* * Buffer not empty, start tranmitter */ if (newTail > tty->rawOutBuf.Head) 40004500: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40004504: 80 a4 00 01 cmp %l0, %g1 <== NOT EXECUTED 40004508: 18 80 00 18 bgu 40004568 <== NOT EXECUTED 4000450c: 01 00 00 00 nop <== NOT EXECUTED nToSend = tty->rawOutBuf.Size - newTail; else nToSend = tty->rawOutBuf.Head - newTail; 40004510: c2 06 20 80 ld [ %i0 + 0x80 ], %g1 <== NOT EXECUTED 40004514: 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)) { 40004518: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED 4000451c: 80 88 66 00 btst 0x600, %g1 <== NOT EXECUTED 40004520: 32 80 00 02 bne,a 40004528 <== NOT EXECUTED 40004524: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend = 1; } tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, 40004528: d2 06 20 7c ld [ %i0 + 0x7c ], %o1 <== NOT EXECUTED 4000452c: c4 06 20 a4 ld [ %i0 + 0xa4 ], %g2 <== NOT EXECUTED 40004530: 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*/ 40004534: 82 10 20 01 mov 1, %g1 <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004538: 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*/ 4000453c: c2 26 20 94 st %g1, [ %i0 + 0x94 ] <== NOT EXECUTED (*tty->device.write)(tty->minor, 40004540: 9f c0 80 00 call %g2 <== NOT EXECUTED 40004544: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 40004548: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED } return nToSend; } 4000454c: 81 c7 e0 08 ret <== NOT EXECUTED 40004550: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED else { if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) { /* * buffer was empty */ if (tty->rawOutBufState == rob_wait) { 40004554: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40004558: 02 80 00 30 be 40004618 <== NOT EXECUTED 4000455c: a2 10 20 00 clr %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 40004560: 81 c7 e0 08 ret <== NOT EXECUTED 40004564: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED else { /* * Buffer not empty, start tranmitter */ if (newTail > tty->rawOutBuf.Head) nToSend = tty->rawOutBuf.Size - newTail; 40004568: c2 06 20 88 ld [ %i0 + 0x88 ], %g1 <== NOT EXECUTED 4000456c: 10 bf ff eb b 40004518 <== NOT EXECUTED 40004570: a2 20 40 10 sub %g1, %l0, %l1 <== NOT EXECUTED /* check for XOF/XON to send */ if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF)) == (FL_MDXOF | FL_IREQXOF)) { /* XOFF should be sent now... */ (*tty->device.write)(tty->minor, 40004574: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 40004578: 92 06 20 4a add %i0, 0x4a, %o1 <== NOT EXECUTED 4000457c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004580: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTOP]), 1); rtems_interrupt_disable(level); 40004584: 7f ff f6 92 call 40001fcc <== NOT EXECUTED 40004588: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 4000458c: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40004590: 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--; 40004594: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40004598: 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--; 4000459c: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 400045a0: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 400045a4: 7f ff f6 8e call 40001fdc <== NOT EXECUTED 400045a8: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 400045ac: 81 c7 e0 08 ret <== NOT EXECUTED 400045b0: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED * FIXME: this .write call will generate another * dequeue callback. This will advance the "Tail" in the data * buffer, although the corresponding data is not yet out! * Therefore the dequeue "length" should be reduced by 1 */ (*tty->device.write)(tty->minor, 400045b4: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED 400045b8: 92 06 20 49 add %i0, 0x49, %o1 <== NOT EXECUTED 400045bc: 9f c0 40 00 call %g1 <== NOT EXECUTED 400045c0: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED (void *)&(tty->termios.c_cc[VSTART]), 1); rtems_interrupt_disable(level); 400045c4: 7f ff f6 82 call 40001fcc <== NOT EXECUTED 400045c8: 01 00 00 00 nop <== NOT EXECUTED tty->t_dqlen--; 400045cc: c2 06 20 90 ld [ %i0 + 0x90 ], %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 400045d0: 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--; 400045d4: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 400045d8: 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--; 400045dc: c2 26 20 90 st %g1, [ %i0 + 0x90 ] <== NOT EXECUTED tty->flow_ctrl &= ~FL_ISNTXOF; 400045e0: c4 26 20 b8 st %g2, [ %i0 + 0xb8 ] <== NOT EXECUTED rtems_interrupt_enable(level); 400045e4: 7f ff f6 7e call 40001fdc <== NOT EXECUTED 400045e8: a2 10 20 01 mov 1, %l1 <== NOT EXECUTED nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ } return nToSend; } 400045ec: 81 c7 e0 08 ret <== NOT EXECUTED 400045f0: 91 e8 00 11 restore %g0, %l1, %o0 <== NOT EXECUTED } if (newTail == tty->rawOutBuf.Head) { /* * Buffer has become empty */ tty->rawOutBufState = rob_idle; 400045f4: 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) { 400045f8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 400045fc: 02 bf ff d3 be 40004548 <== NOT EXECUTED 40004600: a2 10 20 00 clr %l1 <== NOT EXECUTED (*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg); 40004604: d2 06 20 d8 ld [ %i0 + 0xd8 ], %o1 <== NOT EXECUTED 40004608: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000460c: 90 06 20 30 add %i0, 0x30, %o0 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 40004610: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED 40004614: 30 bf ff ce b,a 4000454c <== NOT EXECUTED */ if (tty->rawOutBufState == rob_wait) { /* * this should never happen... */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 40004618: 40 00 0b 0c call 40007248 <== NOT EXECUTED 4000461c: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 40004620: 30 bf ff d0 b,a 40004560 <== NOT EXECUTED tty->rawOutBuf.Tail = newTail; if (tty->rawOutBufState == rob_wait) { /* * wake up any pending writer task */ rtems_semaphore_release (tty->rawOutBuf.Semaphore); 40004624: 40 00 0b 09 call 40007248 <== NOT EXECUTED 40004628: d0 06 20 8c ld [ %i0 + 0x8c ], %o0 <== NOT EXECUTED 4000462c: 30 bf ff ac b,a 400044dc <== NOT EXECUTED /* check, whether output should stop due to received XOFF */ else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF)) == (FL_MDXON | FL_ORCVXOF)) { /* Buffer not empty, but output stops due to XOFF */ /* set flag, that output has been stopped */ rtems_interrupt_disable(level); 40004630: 7f ff f6 67 call 40001fcc <== NOT EXECUTED 40004634: 01 00 00 00 nop <== NOT EXECUTED tty->flow_ctrl |= FL_OSTOP; 40004638: c2 06 20 b8 ld [ %i0 + 0xb8 ], %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 4000463c: 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; 40004640: 82 10 60 20 or %g1, 0x20, %g1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ 40004644: 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; 40004648: c2 26 20 b8 st %g1, [ %i0 + 0xb8 ] <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ rtems_interrupt_enable(level); 4000464c: 7f ff f6 64 call 40001fdc <== NOT EXECUTED 40004650: a2 10 20 00 clr %l1 <== NOT EXECUTED tty->rawOutBufState = rob_busy; /*apm*/ (*tty->device.write)(tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend); } tty->rawOutBuf.Tail = newTail; /*apm*/ 40004654: e0 26 20 84 st %l0, [ %i0 + 0x84 ] <== NOT EXECUTED 40004658: 30 bf ff bd b,a 4000454c <== NOT EXECUTED 4000628c : /* * this task actually processes any receive events */ static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument) { 4000628c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED 40006290: a0 07 bf f0 add %fp, -16, %l0 <== NOT EXECUTED 40006294: a2 07 bf f7 add %fp, -9, %l1 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40006298: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 4000629c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 400062a0: 94 10 20 00 clr %o2 <== NOT EXECUTED 400062a4: 40 00 00 cf call 400065e0 <== NOT EXECUTED 400062a8: 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) { 400062ac: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400062b0: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 400062b4: 32 80 00 16 bne,a 4000630c <== NOT EXECUTED 400062b8: c0 26 20 c4 clr [ %i0 + 0xc4 ] <== NOT EXECUTED } else { /* * do something */ c = tty->device.pollRead(tty->minor); 400062bc: c2 06 20 a0 ld [ %i0 + 0xa0 ], %g1 <== NOT EXECUTED 400062c0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400062c4: d0 06 20 10 ld [ %i0 + 0x10 ], %o0 <== NOT EXECUTED if (c != EOF) { 400062c8: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED 400062cc: 02 bf ff f3 be 40006298 <== NOT EXECUTED 400062d0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED /* * pollRead did call enqueue on its own */ c_buf = c; 400062d4: d0 2f bf f7 stb %o0, [ %fp + -9 ] <== NOT EXECUTED rtems_termios_enqueue_raw_characters ( 400062d8: 94 10 20 01 mov 1, %o2 <== NOT EXECUTED 400062dc: 7f ff f8 ff call 400046d8 <== NOT EXECUTED 400062e0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 400062e4: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 400062e8: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 400062ec: 94 10 20 00 clr %o2 <== NOT EXECUTED 400062f0: 40 00 00 bc call 400065e0 <== NOT EXECUTED 400062f4: 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) { 400062f8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 400062fc: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40006300: 22 bf ff f0 be,a 400062c0 <== NOT EXECUTED 40006304: c2 06 20 a0 ld [ %i0 + 0xa0 ], %g1 <== NOT EXECUTED tty->rxTaskId = 0; 40006308: c0 26 20 c4 clr [ %i0 + 0xc4 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 4000630c: 40 00 04 77 call 400074e8 <== NOT EXECUTED 40006310: 90 10 20 00 clr %o0 <== NOT EXECUTED char c_buf; while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_RX_PROC_EVENT | 40006314: 10 bf ff e2 b 4000629c <== NOT EXECUTED 40006318: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40004448 : 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); 40004448: d0 02 20 c4 ld [ %o0 + 0xc4 ], %o0 <== NOT EXECUTED 4000444c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40004450: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 40004454: 40 00 08 f1 call 40006818 <== NOT EXECUTED 40004458: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4000445c: 01 00 00 00 nop 4000631c : /* * this task actually processes any transmit events */ static rtems_task rtems_termios_txdaemon(rtems_task_argument argument) { 4000631c: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED 40006320: 03 10 00 6a sethi %hi(0x4001a800), %g1 <== NOT EXECUTED 40006324: a0 07 bf f4 add %fp, -12, %l0 <== NOT EXECUTED 40006328: a2 10 62 6c or %g1, 0x26c, %l1 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 4000632c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40006330: 94 10 20 00 clr %o2 <== NOT EXECUTED 40006334: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40006338: 40 00 00 aa call 400065e0 <== NOT EXECUTED 4000633c: 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) { 40006340: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40006344: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40006348: 12 80 00 16 bne 400063a0 <== NOT EXECUTED 4000634c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED } else { /* * call any line discipline start function */ if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40006350: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 40006354: 83 28 60 05 sll %g1, 5, %g1 <== NOT EXECUTED 40006358: 82 00 40 11 add %g1, %l1, %g1 <== NOT EXECUTED 4000635c: c2 00 60 14 ld [ %g1 + 0x14 ], %g1 <== NOT EXECUTED 40006360: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40006364: 02 80 00 04 be 40006374 <== NOT EXECUTED 40006368: 01 00 00 00 nop <== NOT EXECUTED rtems_termios_linesw[tty->t_line].l_start(tty); 4000636c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40006370: 01 00 00 00 nop <== NOT EXECUTED } /* * try to push further characters to device */ rtems_termios_refill_transmitter(tty); 40006374: 7f ff f8 3b call 40004460 <== NOT EXECUTED 40006378: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 4000637c: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 40006380: 94 10 20 00 clr %o2 <== NOT EXECUTED 40006384: 96 10 00 10 mov %l0, %o3 <== NOT EXECUTED 40006388: 40 00 00 96 call 400065e0 <== NOT EXECUTED 4000638c: 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) { 40006390: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED 40006394: 80 88 60 01 btst 1, %g1 <== NOT EXECUTED 40006398: 02 bf ff ee be 40006350 <== NOT EXECUTED 4000639c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED tty->txTaskId = 0; 400063a0: c0 26 20 c8 clr [ %i0 + 0xc8 ] <== NOT EXECUTED rtems_task_delete(RTEMS_SELF); 400063a4: 40 00 04 51 call 400074e8 <== NOT EXECUTED 400063a8: 90 10 20 00 clr %o0 <== NOT EXECUTED while (1) { /* * wait for rtems event */ rtems_event_receive((TERMIOS_TX_START_EVENT | 400063ac: 10 bf ff e1 b 40006330 <== NOT EXECUTED 400063b0: 92 10 20 02 mov 2, %o1 <== NOT EXECUTED 4000521c : rtems_termios_puts (&c, 1, tty); } rtems_status_code rtems_termios_write (void *arg) { 4000521c: 9d e3 bf 98 save %sp, -104, %sp rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40005220: c2 06 00 00 ld [ %i0 ], %g1 rtems_termios_puts (&c, 1, tty); } rtems_status_code rtems_termios_write (void *arg) { 40005224: a6 10 00 18 mov %i0, %l3 rtems_libio_rw_args_t *args = arg; struct rtems_termios_tty *tty = args->iop->data1; 40005228: e2 00 60 28 ld [ %g1 + 0x28 ], %l1 rtems_status_code sc; sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); 4000522c: 92 10 20 00 clr %o1 40005230: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 40005234: 40 00 07 36 call 40006f0c 40005238: 94 10 20 00 clr %o2 if (sc != RTEMS_SUCCESSFUL) 4000523c: b0 92 20 00 orcc %o0, 0, %i0 40005240: 12 80 00 0f bne 4000527c 40005244: 03 10 00 6a sethi %hi(0x4001a800), %g1 return sc; if (rtems_termios_linesw[tty->t_line].l_write != NULL) { 40005248: c4 04 60 cc ld [ %l1 + 0xcc ], %g2 4000524c: 82 10 62 6c or %g1, 0x26c, %g1 40005250: 85 28 a0 05 sll %g2, 5, %g2 40005254: 84 00 80 01 add %g2, %g1, %g2 40005258: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 4000525c: 80 a0 60 00 cmp %g1, 0 40005260: 02 80 00 09 be 40005284 40005264: 92 10 00 13 mov %l3, %o1 sc = rtems_termios_linesw[tty->t_line].l_write(tty,args); 40005268: 9f c0 40 00 call %g1 <== NOT EXECUTED 4000526c: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40005270: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_semaphore_release (tty->osem); 40005274: 40 00 07 f5 call 40007248 <== NOT EXECUTED 40005278: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 <== NOT EXECUTED 4000527c: 81 c7 e0 08 ret <== NOT EXECUTED 40005280: 81 e8 00 00 restore <== NOT EXECUTED return sc; } if (tty->termios.c_oflag & OPOST) { 40005284: c2 04 60 34 ld [ %l1 + 0x34 ], %g1 40005288: 80 88 60 01 btst 1, %g1 4000528c: 32 80 00 0c bne,a 400052bc 40005290: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 while (count--) oproc (*buffer++, tty); args->bytes_moved = args->count; } else { rtems_termios_puts (args->buffer, args->count, tty); 40005294: d0 04 e0 08 ld [ %l3 + 8 ], %o0 <== NOT EXECUTED 40005298: d2 04 e0 0c ld [ %l3 + 0xc ], %o1 <== NOT EXECUTED 4000529c: 7f ff fd e4 call 40004a2c <== NOT EXECUTED 400052a0: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED args->bytes_moved = args->count; 400052a4: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 <== NOT EXECUTED 400052a8: c2 24 e0 14 st %g1, [ %l3 + 0x14 ] } rtems_semaphore_release (tty->osem); 400052ac: 40 00 07 e7 call 40007248 400052b0: d0 04 60 18 ld [ %l1 + 0x18 ], %o0 return sc; } 400052b4: 81 c7 e0 08 ret 400052b8: 81 e8 00 00 restore return sc; } if (tty->termios.c_oflag & OPOST) { uint32_t count = args->count; char *buffer = args->buffer; while (count--) 400052bc: 80 a0 60 00 cmp %g1, 0 400052c0: 02 bf ff fa be 400052a8 400052c4: c4 04 e0 08 ld [ %l3 + 8 ], %g2 400052c8: a0 10 00 02 mov %g2, %l0 400052cc: a4 00 80 01 add %g2, %g1, %l2 oproc (*buffer++, tty); 400052d0: d0 0c 00 00 ldub [ %l0 ], %o0 400052d4: 7f ff fe 2b call 40004b80 400052d8: 92 10 00 11 mov %l1, %o1 400052dc: 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--) 400052e0: 80 a4 00 12 cmp %l0, %l2 400052e4: 32 bf ff fc bne,a 400052d4 400052e8: 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; 400052ec: 10 bf ff ef b 400052a8 400052f0: c2 04 e0 0c ld [ %l3 + 0xc ], %g1 40013bcc : */ rtems_status_code rtems_timer_cancel( Objects_Id id ) { 40013bcc: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40013bd0: 11 10 00 d2 sethi %hi(0x40034800), %o0 40013bd4: 92 10 00 18 mov %i0, %o1 40013bd8: 90 12 22 cc or %o0, 0x2cc, %o0 40013bdc: 40 00 0a ac call 4001668c <_Objects_Get> 40013be0: 94 07 bf f4 add %fp, -12, %o2 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013be4: c2 07 bf f4 ld [ %fp + -12 ], %g1 40013be8: 80 a0 60 00 cmp %g1, 0 40013bec: 12 80 00 11 bne 40013c30 40013bf0: 82 18 60 02 xor %g1, 2, %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) 40013bf4: c2 02 20 38 ld [ %o0 + 0x38 ], %g1 40013bf8: 80 a0 60 04 cmp %g1, 4 40013bfc: 12 80 00 16 bne 40013c54 40013c00: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40013c04: 03 10 00 d1 sethi %hi(0x40034400), %g1 <== NOT EXECUTED 40013c08: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40013c0c: b0 10 20 00 clr %i0 <== NOT EXECUTED 40013c10: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 40013c14: c4 20 63 60 st %g2, [ %g1 + 0x360 ] <== NOT EXECUTED 40013c18: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 <== NOT EXECUTED 40013c1c: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40013c20: 02 80 00 09 be 40013c44 <== NOT EXECUTED 40013c24: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013c28: 81 c7 e0 08 ret <== NOT EXECUTED 40013c2c: 81 e8 00 00 restore <== NOT EXECUTED { Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013c30: 80 a0 00 01 cmp %g0, %g1 40013c34: 84 60 20 00 subx %g0, 0, %g2 40013c38: b0 08 a0 15 and %g2, 0x15, %i0 40013c3c: 81 c7 e0 08 ret 40013c40: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 40013c44: 40 00 0f ba call 40017b2c <_Thread_Dispatch> 40013c48: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013c4c: 81 c7 e0 08 ret 40013c50: 81 e8 00 00 restore case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) (void) _Watchdog_Remove( &the_timer->Ticker ); 40013c54: 40 00 16 7e call 4001964c <_Watchdog_Remove> 40013c58: 90 02 20 10 add %o0, 0x10, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40013c5c: 03 10 00 d1 sethi %hi(0x40034400), %g1 40013c60: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40013c64: b0 10 20 00 clr %i0 40013c68: 84 00 bf ff add %g2, -1, %g2 40013c6c: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 40013c70: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40013c74: 80 a0 e0 00 cmp %g3, 0 40013c78: 12 bf ff f5 bne 40013c4c 40013c7c: 01 00 00 00 nop 40013c80: 30 bf ff f1 b,a 40013c44 40013d70 : */ rtems_status_code rtems_timer_delete( Objects_Id id ) { 40013d70: 9d e3 bf 90 save %sp, -112, %sp RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40013d74: 21 10 00 d2 sethi %hi(0x40034800), %l0 40013d78: 92 10 00 18 mov %i0, %o1 40013d7c: 94 07 bf f4 add %fp, -12, %o2 40013d80: 40 00 0a 43 call 4001668c <_Objects_Get> 40013d84: 90 14 22 cc or %l0, 0x2cc, %o0 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013d88: c2 07 bf f4 ld [ %fp + -12 ], %g1 40013d8c: 80 a0 60 00 cmp %g1, 0 40013d90: 12 80 00 1f bne 40013e0c 40013d94: b0 10 00 08 mov %o0, %i0 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40013d98: a0 14 22 cc or %l0, 0x2cc, %l0 ) { uint32_t index; index = _Objects_Get_index( the_object->id ); _Objects_Set_local_object( information, index, NULL ); 40013d9c: c2 02 20 08 ld [ %o0 + 8 ], %g1 Objects_Information *information, uint16_t index, Objects_Control *the_object ) { if ( index <= information->maximum ) 40013da0: c6 14 20 10 lduh [ %l0 + 0x10 ], %g3 40013da4: 05 00 00 3f sethi %hi(0xfc00), %g2 40013da8: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff 40013dac: 82 08 40 02 and %g1, %g2, %g1 40013db0: 80 a0 40 03 cmp %g1, %g3 40013db4: 38 80 00 06 bgu,a 40013dcc 40013db8: c0 26 20 0c clr [ %i0 + 0xc ] <== NOT EXECUTED information->local_table[ index ] = the_object; 40013dbc: c4 04 20 20 ld [ %l0 + 0x20 ], %g2 40013dc0: 83 28 60 02 sll %g1, 2, %g1 40013dc4: 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; 40013dc8: 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 ); 40013dcc: 40 00 16 20 call 4001964c <_Watchdog_Remove> 40013dd0: 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 ); 40013dd4: 90 10 00 10 mov %l0, %o0 40013dd8: 40 00 09 d6 call 40016530 <_Objects_Free> 40013ddc: 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 ) 40013de0: 03 10 00 d1 sethi %hi(0x40034400), %g1 40013de4: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40013de8: b0 10 20 00 clr %i0 40013dec: 84 00 bf ff add %g2, -1, %g2 40013df0: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 40013df4: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40013df8: 80 a0 e0 00 cmp %g3, 0 40013dfc: 02 80 00 0a be 40013e24 40013e00: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013e04: 81 c7 e0 08 ret <== NOT EXECUTED 40013e08: 81 e8 00 00 restore <== NOT EXECUTED { Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013e0c: 82 18 60 02 xor %g1, 2, %g1 40013e10: 80 a0 00 01 cmp %g0, %g1 40013e14: 84 60 20 00 subx %g0, 0, %g2 40013e18: b0 08 a0 15 and %g2, 0x15, %i0 40013e1c: 81 c7 e0 08 ret 40013e20: 91 ee 20 04 restore %i0, 4, %o0 _Thread_Dispatch(); 40013e24: 40 00 0f 42 call 40017b2c <_Thread_Dispatch> 40013e28: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013e2c: 81 c7 e0 08 ret 40013e30: 81 e8 00 00 restore 40013e34 : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 40013e34: 9d e3 bf 90 save %sp, -112, %sp 40013e38: a4 10 00 18 mov %i0, %l2 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( ticks == 0 ) 40013e3c: 80 a6 60 00 cmp %i1, 0 40013e40: 02 80 00 3e be 40013f38 40013e44: b0 10 20 0a mov 0xa, %i0 return RTEMS_INVALID_NUMBER; if ( !routine ) 40013e48: 80 a6 a0 00 cmp %i2, 0 40013e4c: 02 80 00 3b be 40013f38 40013e50: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40013e54: 11 10 00 d2 sethi %hi(0x40034800), %o0 40013e58: 92 10 00 12 mov %l2, %o1 40013e5c: 90 12 22 cc or %o0, 0x2cc, %o0 40013e60: 40 00 0a 0b call 4001668c <_Objects_Get> 40013e64: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013e68: c2 07 bf f4 ld [ %fp + -12 ], %g1 40013e6c: 80 a0 60 00 cmp %g1, 0 40013e70: 12 80 00 17 bne 40013ecc 40013e74: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 40013e78: a2 02 20 10 add %o0, 0x10, %l1 40013e7c: 40 00 15 f4 call 4001964c <_Watchdog_Remove> 40013e80: 90 10 00 11 mov %l1, %o0 _ISR_Disable( level ); 40013e84: 7f ff db 9a call 4000acec 40013e88: 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 ) { 40013e8c: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 40013e90: 80 a0 60 00 cmp %g1, 0 40013e94: 22 80 00 14 be,a 40013ee4 40013e98: f4 24 20 2c st %i2, [ %l0 + 0x2c ] _ISR_Enable( level ); 40013e9c: 7f ff db 98 call 4000acfc <== NOT EXECUTED 40013ea0: 01 00 00 00 nop <== NOT EXECUTED #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40013ea4: 03 10 00 d1 sethi %hi(0x40034400), %g1 <== NOT EXECUTED 40013ea8: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40013eac: 84 00 bf ff add %g2, -1, %g2 <== NOT EXECUTED 40013eb0: c4 20 63 60 st %g2, [ %g1 + 0x360 ] <== NOT EXECUTED 40013eb4: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 <== NOT EXECUTED 40013eb8: 80 a0 e0 00 cmp %g3, 0 <== NOT EXECUTED 40013ebc: 02 80 00 1d be 40013f30 <== NOT EXECUTED 40013ec0: 01 00 00 00 nop <== NOT EXECUTED _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40013ec4: 81 c7 e0 08 ret <== NOT EXECUTED 40013ec8: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if ( !routine ) return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40013ecc: 82 18 60 02 xor %g1, 2, %g1 40013ed0: 80 a0 00 01 cmp %g0, %g1 40013ed4: 84 60 20 00 subx %g0, 0, %g2 40013ed8: b0 08 a0 15 and %g2, 0x15, %i0 40013edc: 81 c7 e0 08 ret 40013ee0: 91 ee 20 04 restore %i0, 4, %o0 void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; 40013ee4: e4 24 20 30 st %l2, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 40013ee8: 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; 40013eec: c0 24 20 38 clr [ %l0 + 0x38 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40013ef0: c0 24 20 18 clr [ %l0 + 0x18 ] _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); _ISR_Enable( level ); 40013ef4: 7f ff db 82 call 4000acfc 40013ef8: 01 00 00 00 nop ) { the_watchdog->initial = units; _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013efc: 92 10 00 11 mov %l1, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40013f00: f2 24 20 1c st %i1, [ %l0 + 0x1c ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40013f04: 11 10 00 d2 sethi %hi(0x40034800), %o0 40013f08: 40 00 15 67 call 400194a4 <_Watchdog_Insert> 40013f0c: 90 12 20 5c or %o0, 0x5c, %o0 ! 4003485c <_Watchdog_Ticks_chain> 40013f10: 05 10 00 d1 sethi %hi(0x40034400), %g2 40013f14: c2 00 a3 60 ld [ %g2 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 40013f18: 82 00 7f ff add %g1, -1, %g1 40013f1c: c2 20 a3 60 st %g1, [ %g2 + 0x360 ] 40013f20: c6 00 a3 60 ld [ %g2 + 0x360 ], %g3 40013f24: 80 a0 e0 00 cmp %g3, 0 40013f28: 32 80 00 04 bne,a 40013f38 40013f2c: b0 10 20 00 clr %i0 <== NOT EXECUTED _Thread_Dispatch(); 40013f30: 40 00 0e ff call 40017b2c <_Thread_Dispatch> 40013f34: b0 10 20 00 clr %i0 40013f38: 81 c7 e0 08 ret 40013f3c: 81 e8 00 00 restore 4000977c : rtems_status_code rtems_timer_get_information( Objects_Id id, rtems_timer_information *the_info ) { 4000977c: 9d e3 bf 90 save %sp, -112, %sp 40009780: 92 10 00 18 mov %i0, %o1 Timer_Control *the_timer; Objects_Locations location; if ( !the_info ) 40009784: 80 a6 60 00 cmp %i1, 0 40009788: 02 80 00 1b be 400097f4 4000978c: b0 10 20 09 mov 9, %i0 RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get ( Objects_Id id, Objects_Locations *location ) { return (Timer_Control *) 40009790: 11 10 00 81 sethi %hi(0x40020400), %o0 40009794: 94 07 bf f4 add %fp, -12, %o2 40009798: 40 00 07 90 call 4000b5d8 <_Objects_Get> 4000979c: 90 12 22 28 or %o0, 0x228, %o0 return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 400097a0: c2 07 bf f4 ld [ %fp + -12 ], %g1 400097a4: 80 a0 60 00 cmp %g1, 0 400097a8: 12 80 00 15 bne 400097fc 400097ac: 82 18 60 02 xor %g1, 2, %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; the_info->initial = the_timer->Ticker.initial; 400097b0: c2 02 20 1c ld [ %o0 + 0x1c ], %g1 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; 400097b4: c6 02 20 38 ld [ %o0 + 0x38 ], %g3 the_info->initial = the_timer->Ticker.initial; 400097b8: c2 26 60 04 st %g1, [ %i1 + 4 ] the_info->start_time = the_timer->Ticker.start_time; 400097bc: c4 02 20 24 ld [ %o0 + 0x24 ], %g2 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: the_info->the_class = the_timer->the_class; 400097c0: c6 26 40 00 st %g3, [ %i1 ] the_info->initial = the_timer->Ticker.initial; the_info->start_time = the_timer->Ticker.start_time; 400097c4: c4 26 60 08 st %g2, [ %i1 + 8 ] the_info->stop_time = the_timer->Ticker.stop_time; 400097c8: c2 02 20 28 ld [ %o0 + 0x28 ], %g1 400097cc: 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 ) 400097d0: 07 10 00 82 sethi %hi(0x40020800), %g3 400097d4: c2 00 e0 10 ld [ %g3 + 0x10 ], %g1 ! 40020810 <_Thread_Dispatch_disable_level> 400097d8: b0 10 20 00 clr %i0 400097dc: 82 00 7f ff add %g1, -1, %g1 400097e0: c2 20 e0 10 st %g1, [ %g3 + 0x10 ] 400097e4: c4 00 e0 10 ld [ %g3 + 0x10 ], %g2 400097e8: 80 a0 a0 00 cmp %g2, 0 400097ec: 02 80 00 09 be 40009810 400097f0: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400097f4: 81 c7 e0 08 ret <== NOT EXECUTED 400097f8: 81 e8 00 00 restore <== NOT EXECUTED if ( !the_info ) return RTEMS_INVALID_ADDRESS; the_timer = _Timer_Get( id, &location ); switch ( location ) { 400097fc: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40009800: 84 60 20 00 subx %g0, 0, %g2 <== NOT EXECUTED 40009804: b0 08 a0 15 and %g2, 0x15, %i0 <== NOT EXECUTED 40009808: 81 c7 e0 08 ret <== NOT EXECUTED 4000980c: 91 ee 20 04 restore %i0, 4, %o0 <== NOT EXECUTED _Thread_Dispatch(); 40009810: 40 00 0c 9a call 4000ca78 <_Thread_Dispatch> 40009814: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40009818: 81 c7 e0 08 ret 4000981c: 81 e8 00 00 restore 40014698 : rtems_status_code rtems_timer_initiate_server( uint32_t priority, uint32_t stack_size, rtems_attribute attribute_set ) { 40014698: 9d e3 bf 90 save %sp, -112, %sp /* * Make sure the requested priority is valid. */ _priority = priority; if ( priority == RTEMS_TIMER_SERVER_DEFAULT_PRIORITY ) 4001469c: 92 10 20 00 clr %o1 400146a0: 80 a6 3f ff cmp %i0, -1 400146a4: 02 80 00 07 be 400146c0 400146a8: 94 10 00 19 mov %i1, %o2 _priority = 0; else if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) 400146ac: 82 06 3f ff add %i0, -1, %g1 400146b0: 80 a0 60 fe cmp %g1, 0xfe 400146b4: 18 80 00 16 bgu 4001470c 400146b8: a2 10 20 13 mov 0x13, %l1 400146bc: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 400146c0: 21 10 00 d1 sethi %hi(0x40034400), %l0 400146c4: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 ! 40034760 <_Thread_Dispatch_disable_level> 400146c8: 82 00 60 01 inc %g1 400146cc: c2 24 23 60 st %g1, [ %l0 + 0x360 ] * Just to make sure the test versus create/start operation are atomic. */ _Thread_Disable_dispatch(); if ( _Timer_Server ) { 400146d0: 33 10 00 d2 sethi %hi(0x40034800), %i1 400146d4: c2 06 63 18 ld [ %i1 + 0x318 ], %g1 ! 40034b18 <_Timer_Server> 400146d8: 80 a0 60 00 cmp %g1, 0 400146dc: 02 80 00 0e be 40014714 400146e0: 19 00 00 20 sethi %hi(0x8000), %o4 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400146e4: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 <== NOT EXECUTED 400146e8: a2 10 20 0e mov 0xe, %l1 <== NOT EXECUTED _Thread_Dispatch(); 400146ec: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 400146f0: c2 24 23 60 st %g1, [ %l0 + 0x360 ] 400146f4: c4 04 23 60 ld [ %l0 + 0x360 ], %g2 400146f8: 80 a0 a0 00 cmp %g2, 0 400146fc: 12 80 00 04 bne 4001470c 40014700: 01 00 00 00 nop 40014704: 40 00 0d 0a call 40017b2c <_Thread_Dispatch> 40014708: 01 00 00 00 nop _Watchdog_Initialize( &_Timer_Server->Timer, _Thread_Delay_ended, id, NULL ); _Watchdog_Initialize( &_Timer_Seconds_timer, _Thread_Delay_ended, id, NULL ); _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } 4001470c: 81 c7 e0 08 ret 40014710: 91 e8 00 11 restore %g0, %l1, %o0 * Server should run at the same priority as the priority Ada task. * Otherwise, the priority ceiling for the mutex used to protect the * GNAT run-time is violated. */ status = rtems_task_create( 40014714: 11 15 12 53 sethi %hi(0x54494c00), %o0 40014718: 98 16 80 0c or %i2, %o4, %o4 4001471c: 90 12 21 45 or %o0, 0x145, %o0 40014720: 96 10 21 00 mov 0x100, %o3 40014724: 7f ff f9 fc call 40012f14 40014728: 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) { 4001472c: a2 92 20 00 orcc %o0, 0, %l1 40014730: 02 80 00 05 be 40014744 40014734: d0 07 bf f4 ld [ %fp + -12 ], %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 40014738: c2 04 23 60 ld [ %l0 + 0x360 ], %g1 4001473c: 10 bf ff ed b 400146f0 40014740: 82 00 7f ff add %g1, -1, %g1 _Thread_Enable_dispatch(); return status; } status = rtems_task_start( 40014744: 13 10 00 51 sethi %hi(0x40014400), %o1 40014748: 94 10 20 00 clr %o2 4001474c: 7f ff fc 3d call 40013840 40014750: 92 12 61 44 or %o1, 0x144, %o1 id, /* the id from create */ (rtems_task_entry) _Timer_Server_body, /* the timer server entry point */ 0 /* there is no argument */ ); if (status) { 40014754: a2 92 20 00 orcc %o0, 0, %l1 40014758: 12 bf ff f8 bne 40014738 4001475c: 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 ) 40014760: 03 10 00 d1 sethi %hi(0x40034400), %g1 40014764: 9a 10 62 10 or %g1, 0x210, %o5 ! 40034610 <_RTEMS_tasks_Information> 40014768: c4 13 60 10 lduh [ %o5 + 0x10 ], %g2 4001476c: 03 00 00 3f sethi %hi(0xfc00), %g1 40014770: 82 10 63 ff or %g1, 0x3ff, %g1 ! ffff 40014774: 86 09 00 01 and %g4, %g1, %g3 40014778: 80 a0 c0 02 cmp %g3, %g2 4001477c: 18 80 00 05 bgu 40014790 40014780: 82 10 20 00 clr %g1 40014784: c4 03 60 20 ld [ %o5 + 0x20 ], %g2 40014788: 83 28 e0 02 sll %g3, 2, %g1 4001478c: c2 00 80 01 ld [ %g2 + %g1 ], %g1 ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; the_watchdog->id = id; the_watchdog->user_data = user_data; 40014790: c0 20 60 6c clr [ %g1 + 0x6c ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40014794: c0 20 60 50 clr [ %g1 + 0x50 ] the_watchdog->routine = routine; the_watchdog->id = id; 40014798: c8 20 60 68 st %g4, [ %g1 + 0x68 ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 4001479c: 07 10 00 5e sethi %hi(0x40017800), %g3 * * NOTE: Setting the pointer to the Timer Server TCB to a value other than * NULL indicates that task-based timer support is initialized. */ _Timer_Server = (Thread_Control *)_Objects_Get_local_object( 400147a0: c2 26 63 18 st %g1, [ %i1 + 0x318 ] 400147a4: 86 10 e2 88 or %g3, 0x288, %g3 400147a8: c6 20 60 64 st %g3, [ %g1 + 0x64 ] */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400147ac: 03 10 00 d1 sethi %hi(0x40034400), %g1 400147b0: 82 10 62 60 or %g1, 0x260, %g1 ! 40034660 <_Timer_Ticks_chain+0x4> */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400147b4: c2 20 7f fc st %g1, [ %g1 + -4 ] 400147b8: 82 00 7f fc add %g1, -4, %g1 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400147bc: 05 10 00 d1 sethi %hi(0x40034400), %g2 Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 400147c0: c2 20 60 08 st %g1, [ %g1 + 8 ] */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400147c4: 84 10 a2 74 or %g2, 0x274, %g2 RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 400147c8: c0 20 60 04 clr [ %g1 + 4 ] */ RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); 400147cc: c4 20 bf fc st %g2, [ %g2 + -4 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400147d0: 03 10 00 d1 sethi %hi(0x40034400), %g1 400147d4: 84 00 bf fc add %g2, -4, %g2 400147d8: 82 10 62 7c or %g1, 0x27c, %g1 the_chain->permanent_null = NULL; the_chain->last = _Chain_Head(the_chain); 400147dc: c4 20 a0 08 st %g2, [ %g2 + 8 ] RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty( Chain_Control *the_chain ) { the_chain->first = _Chain_Tail(the_chain); the_chain->permanent_null = NULL; 400147e0: c0 20 a0 04 clr [ %g2 + 4 ] the_watchdog->routine = routine; 400147e4: c6 20 60 1c st %g3, [ %g1 + 0x1c ] the_watchdog->id = id; 400147e8: c8 20 60 20 st %g4, [ %g1 + 0x20 ] the_watchdog->user_data = user_data; 400147ec: c0 20 60 24 clr [ %g1 + 0x24 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 400147f0: 10 bf ff d2 b 40014738 400147f4: c0 20 60 08 clr [ %g1 + 8 ] 4001408c : */ rtems_status_code rtems_timer_reset( Objects_Id id ) { 4001408c: 9d e3 bf 90 save %sp, -112, %sp 40014090: 11 10 00 d2 sethi %hi(0x40034800), %o0 40014094: 92 10 00 18 mov %i0, %o1 40014098: 90 12 22 cc or %o0, 0x2cc, %o0 4001409c: 40 00 09 7c call 4001668c <_Objects_Get> 400140a0: 94 07 bf f4 add %fp, -12, %o2 Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 400140a4: c2 07 bf f4 ld [ %fp + -12 ], %g1 400140a8: 80 a0 60 00 cmp %g1, 0 400140ac: 12 80 00 18 bne 4001410c 400140b0: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: switch ( the_timer->the_class ) { 400140b4: c2 02 20 38 ld [ %o0 + 0x38 ], %g1 400140b8: 80 a0 60 01 cmp %g1, 1 400140bc: 22 80 00 2f be,a 40014178 400140c0: 31 10 00 d2 sethi %hi(0x40034800), %i0 400140c4: 2a 80 00 18 bcs,a 40014124 400140c8: a0 02 20 10 add %o0, 0x10, %l0 400140cc: 80 a0 60 04 cmp %g1, 4 400140d0: 18 80 00 1b bgu 4001413c 400140d4: 01 00 00 00 nop #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400140d8: 03 10 00 d1 sethi %hi(0x40034400), %g1 400140dc: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 400140e0: b0 10 20 0b mov 0xb, %i0 400140e4: 84 00 bf ff add %g2, -1, %g2 400140e8: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 400140ec: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 400140f0: 80 a0 e0 00 cmp %g3, 0 400140f4: 12 80 00 1f bne 40014170 400140f8: 01 00 00 00 nop _Thread_Dispatch(); 400140fc: 40 00 0e 8c call 40017b2c <_Thread_Dispatch> 40014100: 01 00 00 00 nop 40014104: 81 c7 e0 08 ret 40014108: 81 e8 00 00 restore { Timer_Control *the_timer; Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { 4001410c: 82 18 60 02 xor %g1, 2, %g1 40014110: 80 a0 00 01 cmp %g0, %g1 40014114: 84 60 20 00 subx %g0, 0, %g2 40014118: b0 08 a0 15 and %g2, 0x15, %i0 4001411c: 81 c7 e0 08 ret 40014120: 91 ee 20 04 restore %i0, 4, %o0 return RTEMS_INVALID_ID; case OBJECTS_LOCAL: switch ( the_timer->the_class ) { case TIMER_INTERVAL: _Watchdog_Remove( &the_timer->Ticker ); 40014124: 40 00 15 4a call 4001964c <_Watchdog_Remove> 40014128: 90 10 00 10 mov %l0, %o0 _Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker ); 4001412c: 11 10 00 d2 sethi %hi(0x40034800), %o0 40014130: 92 10 00 10 mov %l0, %o1 40014134: 40 00 14 dc call 400194a4 <_Watchdog_Insert> 40014138: 90 12 20 5c or %o0, 0x5c, %o0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 4001413c: 03 10 00 d1 sethi %hi(0x40034400), %g1 40014140: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> 40014144: b0 10 20 00 clr %i0 40014148: 84 00 bf ff add %g2, -1, %g2 4001414c: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 40014150: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 40014154: 80 a0 e0 00 cmp %g3, 0 40014158: 02 80 00 04 be 40014168 4001415c: 01 00 00 00 nop _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 40014160: 81 c7 e0 08 ret <== NOT EXECUTED 40014164: 81 e8 00 00 restore <== NOT EXECUTED _Thread_Dispatch(); 40014168: 40 00 0e 71 call 40017b2c <_Thread_Dispatch> 4001416c: 01 00 00 00 nop 40014170: 81 c7 e0 08 ret 40014174: 81 e8 00 00 restore case TIMER_INTERVAL: _Watchdog_Remove( &the_timer->Ticker ); _Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker ); break; case TIMER_INTERVAL_ON_TASK: _Timer_Server_stop_ticks_timer(); 40014178: d0 06 23 18 ld [ %i0 + 0x318 ], %o0 _Watchdog_Remove( &the_timer->Ticker ); 4001417c: a2 04 20 10 add %l0, 0x10, %l1 case TIMER_INTERVAL: _Watchdog_Remove( &the_timer->Ticker ); _Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker ); break; case TIMER_INTERVAL_ON_TASK: _Timer_Server_stop_ticks_timer(); 40014180: 40 00 15 33 call 4001964c <_Watchdog_Remove> 40014184: 90 02 20 48 add %o0, 0x48, %o0 _Watchdog_Remove( &the_timer->Ticker ); 40014188: 40 00 15 31 call 4001964c <_Watchdog_Remove> 4001418c: 90 10 00 11 mov %l1, %o0 _Timer_Server_process_ticks_chain(); 40014190: 40 00 00 dc call 40014500 <_Timer_Server_process_ticks_chain> 40014194: 21 10 00 d1 sethi %hi(0x40034400), %l0 _Watchdog_Insert( &_Timer_Ticks_chain, &the_timer->Ticker ); 40014198: 92 10 00 11 mov %l1, %o1 4001419c: 40 00 14 c2 call 400194a4 <_Watchdog_Insert> 400141a0: 90 14 22 5c or %l0, 0x25c, %o0 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 400141a4: c4 04 22 5c ld [ %l0 + 0x25c ], %g2 400141a8: a0 14 22 5c or %l0, 0x25c, %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 400141ac: a0 04 20 04 add %l0, 4, %l0 _Timer_Server_reset_ticks_timer(); 400141b0: 80 a0 80 10 cmp %g2, %l0 400141b4: 02 bf ff e2 be 4001413c 400141b8: c2 06 23 18 ld [ %i0 + 0x318 ], %g1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400141bc: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400141c0: 92 00 60 48 add %g1, 0x48, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 400141c4: c4 20 60 54 st %g2, [ %g1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 400141c8: 11 10 00 d2 sethi %hi(0x40034800), %o0 400141cc: 40 00 14 b6 call 400194a4 <_Watchdog_Insert> 400141d0: 90 12 20 5c or %o0, 0x5c, %o0 ! 4003485c <_Watchdog_Ticks_chain> 400141d4: 30 bf ff da b,a 4001413c 400141d8 : Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 400141d8: 9d e3 bf 90 save %sp, -112, %sp Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 400141dc: 23 10 00 d2 sethi %hi(0x40034800), %l1 400141e0: c2 04 63 18 ld [ %l1 + 0x318 ], %g1 ! 40034b18 <_Timer_Server> Objects_Id id, rtems_interval ticks, rtems_timer_service_routine_entry routine, void *user_data ) { 400141e4: a6 10 00 18 mov %i0, %l3 Timer_Control *the_timer; Objects_Locations location; ISR_Level level; if ( !_Timer_Server ) 400141e8: 80 a0 60 00 cmp %g1, 0 400141ec: 02 80 00 3b be 400142d8 400141f0: b0 10 20 0e mov 0xe, %i0 return RTEMS_INCORRECT_STATE; if ( !routine ) 400141f4: 80 a6 a0 00 cmp %i2, 0 400141f8: 02 80 00 38 be 400142d8 400141fc: b0 10 20 09 mov 9, %i0 return RTEMS_INVALID_ADDRESS; if ( ticks == 0 ) 40014200: 80 a6 60 00 cmp %i1, 0 40014204: 02 80 00 35 be 400142d8 40014208: b0 10 20 0a mov 0xa, %i0 4001420c: 11 10 00 d2 sethi %hi(0x40034800), %o0 40014210: 92 10 00 13 mov %l3, %o1 40014214: 90 12 22 cc or %o0, 0x2cc, %o0 40014218: 40 00 09 1d call 4001668c <_Objects_Get> 4001421c: 94 07 bf f4 add %fp, -12, %o2 return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { 40014220: c2 07 bf f4 ld [ %fp + -12 ], %g1 40014224: 80 a0 60 00 cmp %g1, 0 40014228: 12 80 00 30 bne 400142e8 4001422c: a0 10 00 08 mov %o0, %l0 case OBJECTS_ERROR: return RTEMS_INVALID_ID; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); 40014230: a4 02 20 10 add %o0, 0x10, %l2 40014234: 40 00 15 06 call 4001964c <_Watchdog_Remove> 40014238: 90 10 00 12 mov %l2, %o0 _ISR_Disable( level ); 4001423c: 7f ff da ac call 4000acec 40014240: 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 ) { 40014244: c2 04 20 18 ld [ %l0 + 0x18 ], %g1 40014248: 80 a0 60 00 cmp %g1, 0 4001424c: 12 80 00 2d bne 40014300 40014250: 82 10 20 01 mov 1, %g1 * so we can atomically initialize it as in use. */ the_timer->the_class = TIMER_INTERVAL_ON_TASK; _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data ); the_timer->Ticker.initial = ticks; 40014254: f2 24 20 1c st %i1, [ %l0 + 0x1c ] Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; the_watchdog->routine = routine; 40014258: f4 24 20 2c st %i2, [ %l0 + 0x2c ] the_watchdog->id = id; 4001425c: e6 24 20 30 st %l3, [ %l0 + 0x30 ] the_watchdog->user_data = user_data; 40014260: f6 24 20 34 st %i3, [ %l0 + 0x34 ] Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ) { the_watchdog->state = WATCHDOG_INACTIVE; 40014264: 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; 40014268: 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 ); 4001426c: 7f ff da a4 call 4000acfc 40014270: 21 10 00 d1 sethi %hi(0x40034400), %l0 _Timer_Server_stop_ticks_timer(); 40014274: d0 04 63 18 ld [ %l1 + 0x318 ], %o0 40014278: 40 00 14 f5 call 4001964c <_Watchdog_Remove> 4001427c: 90 02 20 48 add %o0, 0x48, %o0 _Timer_Server_process_ticks_chain(); 40014280: 40 00 00 a0 call 40014500 <_Timer_Server_process_ticks_chain> 40014284: 01 00 00 00 nop _Watchdog_Insert( &_Timer_Ticks_chain, &the_timer->Ticker ); 40014288: 90 14 22 5c or %l0, 0x25c, %o0 4001428c: 40 00 14 86 call 400194a4 <_Watchdog_Insert> 40014290: 92 10 00 12 mov %l2, %o1 */ RTEMS_INLINE_ROUTINE boolean _Chain_Is_empty( Chain_Control *the_chain ) { return (the_chain->first == _Chain_Tail(the_chain)); 40014294: c4 04 22 5c ld [ %l0 + 0x25c ], %g2 40014298: a0 14 22 5c or %l0, 0x25c, %l0 */ RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail( Chain_Control *the_chain ) { return (Chain_Node *) &the_chain->permanent_null; 4001429c: a0 04 20 04 add %l0, 4, %l0 _Timer_Server_reset_ticks_timer(); 400142a0: 80 a0 80 10 cmp %g2, %l0 400142a4: 12 80 00 1a bne 4001430c 400142a8: c2 04 63 18 ld [ %l1 + 0x318 ], %g1 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400142ac: 03 10 00 d1 sethi %hi(0x40034400), %g1 400142b0: c4 00 63 60 ld [ %g1 + 0x360 ], %g2 ! 40034760 <_Thread_Dispatch_disable_level> _Thread_Dispatch(); 400142b4: b0 10 20 00 clr %i0 #if ( CPU_INLINE_ENABLE_DISPATCH == TRUE ) RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch() { RTEMS_COMPILER_MEMORY_BARRIER(); if ( (--_Thread_Dispatch_disable_level) == 0 ) 400142b8: 84 00 bf ff add %g2, -1, %g2 400142bc: c4 20 63 60 st %g2, [ %g1 + 0x360 ] 400142c0: c6 00 63 60 ld [ %g1 + 0x360 ], %g3 400142c4: 80 a0 e0 00 cmp %g3, 0 400142c8: 12 80 00 06 bne 400142e0 400142cc: 01 00 00 00 nop _Thread_Dispatch(); 400142d0: 40 00 0e 17 call 40017b2c <_Thread_Dispatch> 400142d4: b0 10 20 00 clr %i0 ! 0 400142d8: 81 c7 e0 08 ret 400142dc: 81 e8 00 00 restore _Thread_Enable_dispatch(); return RTEMS_SUCCESSFUL; } return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } 400142e0: 81 c7 e0 08 ret <== NOT EXECUTED 400142e4: 81 e8 00 00 restore <== NOT EXECUTED if ( ticks == 0 ) return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { 400142e8: 82 18 60 02 xor %g1, 2, %g1 400142ec: 80 a0 00 01 cmp %g0, %g1 400142f0: 84 60 20 00 subx %g0, 0, %g2 400142f4: b0 08 a0 15 and %g2, 0x15, %i0 400142f8: 81 c7 e0 08 ret 400142fc: 91 ee 20 04 restore %i0, 4, %o0 * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) { _ISR_Enable( level ); 40014300: 7f ff da 7f call 4000acfc <== NOT EXECUTED 40014304: 01 00 00 00 nop <== NOT EXECUTED 40014308: 30 bf ff e9 b,a 400142ac <== NOT EXECUTED Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 4001430c: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2 _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40014310: 92 00 60 48 add %g1, 0x48, %o1 Watchdog_Control *the_watchdog, Watchdog_Interval units ) { the_watchdog->initial = units; 40014314: c4 20 60 54 st %g2, [ %g1 + 0x54 ] _Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog ); 40014318: 11 10 00 d2 sethi %hi(0x40034800), %o0 4001431c: 40 00 14 62 call 400194a4 <_Watchdog_Insert> 40014320: 90 12 20 5c or %o0, 0x5c, %o0 ! 4003485c <_Watchdog_Ticks_chain> 40014324: 30 bf ff e2 b,a 400142ac 40009b60 : static int rtems_verror( uint32_t error_flag, const char *printf_format, va_list arglist ) { 40009b60: 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) 40009b64: 03 08 00 00 sethi %hi(0x20000000), %g1 <== NOT EXECUTED 40009b68: a8 8e 00 01 andcc %i0, %g1, %l4 <== NOT EXECUTED 40009b6c: 02 80 00 10 be 40009bac <== NOT EXECUTED 40009b70: a6 10 00 18 mov %i0, %l3 <== NOT EXECUTED { if (rtems_panic_in_progress++) 40009b74: 07 10 00 b0 sethi %hi(0x4002c000), %g3 <== NOT EXECUTED 40009b78: c2 00 e2 44 ld [ %g3 + 0x244 ], %g1 ! 4002c244 <== NOT EXECUTED 40009b7c: 82 00 60 01 inc %g1 <== NOT EXECUTED 40009b80: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40009b84: 02 80 00 0a be 40009bac <== NOT EXECUTED 40009b88: c2 20 e2 44 st %g1, [ %g3 + 0x244 ] <== NOT EXECUTED rtems_fatal_error_occurred( 99 ); } } #endif _Thread_Dispatch_disable_level += 1; 40009b8c: 03 10 00 b1 sethi %hi(0x4002c400), %g1 <== NOT EXECUTED 40009b90: c4 00 60 10 ld [ %g1 + 0x10 ], %g2 ! 4002c410 <_Thread_Dispatch_disable_level> <== NOT EXECUTED 40009b94: 84 00 a0 01 inc %g2 <== NOT EXECUTED 40009b98: c4 20 60 10 st %g2, [ %g1 + 0x10 ] <== NOT EXECUTED _Thread_Disable_dispatch(); /* disable task switches */ /* don't aggravate things */ if (rtems_panic_in_progress > 2) 40009b9c: c2 00 e2 44 ld [ %g3 + 0x244 ], %g1 <== NOT EXECUTED 40009ba0: 80 a0 60 02 cmp %g1, 2 <== NOT EXECUTED 40009ba4: 14 80 00 3c bg 40009c94 <== NOT EXECUTED 40009ba8: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40009bac: 25 10 00 ac sethi %hi(0x4002b000), %l2 <== NOT EXECUTED 40009bb0: c2 04 a3 40 ld [ %l2 + 0x340 ], %g1 ! 4002b340 <_impure_ptr> <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40009bb4: a2 10 20 00 clr %l1 <== NOT EXECUTED /* don't aggravate things */ if (rtems_panic_in_progress > 2) return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40009bb8: 40 00 43 74 call 4001a988 <== NOT EXECUTED 40009bbc: d0 00 60 08 ld [ %g1 + 8 ], %o0 <== NOT EXECUTED status = error_flag & ~RTEMS_ERROR_MASK; 40009bc0: 03 1c 00 00 sethi %hi(0x70000000), %g1 <== NOT EXECUTED if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40009bc4: 05 10 00 00 sethi %hi(0x40000000), %g2 <== NOT EXECUTED 40009bc8: 80 8c c0 02 btst %l3, %g2 <== NOT EXECUTED 40009bcc: 12 80 00 3f bne 40009cc8 <== NOT EXECUTED 40009bd0: a0 2c c0 01 andn %l3, %g1, %l0 <== NOT EXECUTED #if defined(RTEMS_MULTIPROCESSING) if (_System_state_Is_multiprocessing) fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node); #endif chars_written += vfprintf(stderr, printf_format, arglist); 40009bd4: c2 04 a3 40 ld [ %l2 + 0x340 ], %g1 <== NOT EXECUTED 40009bd8: 94 10 00 1a mov %i2, %o2 <== NOT EXECUTED 40009bdc: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40009be0: 40 00 5c 29 call 40020c84 <== NOT EXECUTED 40009be4: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED if (status) 40009be8: 80 a4 20 00 cmp %l0, 0 <== NOT EXECUTED #if defined(RTEMS_MULTIPROCESSING) if (_System_state_Is_multiprocessing) fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node); #endif chars_written += vfprintf(stderr, printf_format, arglist); 40009bec: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED if (status) 40009bf0: 12 80 00 2b bne 40009c9c <== NOT EXECUTED 40009bf4: 35 10 00 ac sethi %hi(0x4002b000), %i2 <== NOT EXECUTED chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); if (local_errno) 40009bf8: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40009bfc: 02 80 00 12 be 40009c44 <== NOT EXECUTED 40009c00: c2 04 a3 40 ld [ %l2 + 0x340 ], %g1 <== NOT EXECUTED { if ((local_errno > 0) && *strerror(local_errno)) 40009c04: 80 a4 60 00 cmp %l1, 0 <== NOT EXECUTED 40009c08: 04 80 00 09 ble 40009c2c <== NOT EXECUTED 40009c0c: 13 10 00 9d sethi %hi(0x40027400), %o1 <== NOT EXECUTED 40009c10: 40 00 51 32 call 4001e0d8 <== NOT EXECUTED 40009c14: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40009c18: c2 4a 00 00 ldsb [ %o0 ], %g1 <== NOT EXECUTED 40009c1c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40009c20: 12 80 00 2e bne 40009cd8 <== NOT EXECUTED 40009c24: c2 04 a3 40 ld [ %l2 + 0x340 ], %g1 <== NOT EXECUTED chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); 40009c28: 13 10 00 9d sethi %hi(0x40027400), %o1 <== NOT EXECUTED 40009c2c: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40009c30: 92 12 63 d8 or %o1, 0x3d8, %o1 <== NOT EXECUTED 40009c34: 40 00 45 16 call 4001b08c <== NOT EXECUTED 40009c38: 94 10 00 11 mov %l1, %o2 <== NOT EXECUTED 40009c3c: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED } chars_written += fprintf(stderr, "\n"); 40009c40: c2 04 a3 40 ld [ %l2 + 0x340 ], %g1 <== NOT EXECUTED 40009c44: 13 10 00 9f sethi %hi(0x40027c00), %o1 <== NOT EXECUTED 40009c48: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40009c4c: 40 00 45 10 call 4001b08c <== NOT EXECUTED 40009c50: 92 12 62 50 or %o1, 0x250, %o1 <== NOT EXECUTED (void) fflush(stderr); 40009c54: c2 04 a3 40 ld [ %l2 + 0x340 ], %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"); 40009c58: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED (void) fflush(stderr); 40009c5c: d0 00 60 0c ld [ %g1 + 0xc ], %o0 <== NOT EXECUTED 40009c60: 40 00 43 4a call 4001a988 <== NOT EXECUTED 40009c64: b0 04 00 18 add %l0, %i0, %i0 <== NOT EXECUTED if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT)) 40009c68: 03 0c 00 00 sethi %hi(0x30000000), %g1 <== NOT EXECUTED 40009c6c: 80 8c c0 01 btst %l3, %g1 <== NOT EXECUTED 40009c70: 02 80 00 09 be 40009c94 <== NOT EXECUTED 40009c74: 80 a5 20 00 cmp %l4, 0 <== NOT EXECUTED { if (error_flag & RTEMS_ERROR_PANIC) 40009c78: 02 80 00 23 be 40009d04 <== NOT EXECUTED 40009c7c: 90 10 20 00 clr %o0 <== NOT EXECUTED { rtems_error(0, "fatal error, exiting"); 40009c80: 13 10 00 9d sethi %hi(0x40027400), %o1 <== NOT EXECUTED 40009c84: 40 00 00 33 call 40009d50 <== NOT EXECUTED 40009c88: 92 12 63 f0 or %o1, 0x3f0, %o1 ! 400277f0 <== NOT EXECUTED _exit(local_errno); 40009c8c: 40 00 02 8e call 4000a6c4 <_exit> <== NOT EXECUTED 40009c90: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED rtems_error(0, "fatal error, aborting"); abort(); } } return chars_written; } 40009c94: 81 c7 e0 08 ret <== NOT EXECUTED 40009c98: 81 e8 00 00 restore <== NOT EXECUTED #endif chars_written += vfprintf(stderr, printf_format, arglist); if (status) chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); 40009c9c: c2 06 a3 40 ld [ %i2 + 0x340 ], %g1 <== NOT EXECUTED 40009ca0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40009ca4: 7f ff ff a8 call 40009b44 <== NOT EXECUTED 40009ca8: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 40009cac: 13 10 00 9d sethi %hi(0x40027400), %o1 <== NOT EXECUTED 40009cb0: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40009cb4: 92 12 63 b8 or %o1, 0x3b8, %o1 <== NOT EXECUTED 40009cb8: 40 00 44 f5 call 4001b08c <== NOT EXECUTED 40009cbc: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40009cc0: 10 bf ff ce b 40009bf8 <== NOT EXECUTED 40009cc4: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED (void) fflush(stdout); /* in case stdout/stderr same */ status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ local_errno = errno; 40009cc8: 40 00 42 d3 call 4001a814 <__errno> <== NOT EXECUTED 40009ccc: 01 00 00 00 nop <== NOT EXECUTED 40009cd0: 10 bf ff c1 b 40009bd4 <== NOT EXECUTED 40009cd4: e2 02 00 00 ld [ %o0 ], %l1 <== NOT EXECUTED chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status)); if (local_errno) { if ((local_errno > 0) && *strerror(local_errno)) chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); 40009cd8: c2 06 a3 40 ld [ %i2 + 0x340 ], %g1 <== NOT EXECUTED 40009cdc: 90 10 00 11 mov %l1, %o0 <== NOT EXECUTED 40009ce0: 40 00 50 fe call 4001e0d8 <== NOT EXECUTED 40009ce4: e0 00 60 0c ld [ %g1 + 0xc ], %l0 <== NOT EXECUTED 40009ce8: 13 10 00 9d sethi %hi(0x40027400), %o1 <== NOT EXECUTED 40009cec: 94 10 00 08 mov %o0, %o2 <== NOT EXECUTED 40009cf0: 92 12 63 c8 or %o1, 0x3c8, %o1 <== NOT EXECUTED 40009cf4: 40 00 44 e6 call 4001b08c <== NOT EXECUTED 40009cf8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 40009cfc: 10 bf ff d1 b 40009c40 <== NOT EXECUTED 40009d00: b0 06 00 08 add %i0, %o0, %i0 <== NOT EXECUTED rtems_error(0, "fatal error, exiting"); _exit(local_errno); } else { rtems_error(0, "fatal error, aborting"); 40009d04: 13 10 00 9e sethi %hi(0x40027800), %o1 <== NOT EXECUTED 40009d08: 40 00 00 12 call 40009d50 <== NOT EXECUTED 40009d0c: 92 12 60 08 or %o1, 8, %o1 ! 40027808 <== NOT EXECUTED abort(); 40009d10: 40 00 42 b3 call 4001a7dc <== NOT EXECUTED 40009d14: 01 00 00 00 nop 40009d18: 01 00 00 00 nop 40019c04 : /* * Extract an integer value from the database */ static int scanInt(FILE *fp, int *val) { 40019c04: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED 40019c08: 03 1f ff ff sethi %hi(0x7ffffc00), %g1 <== NOT EXECUTED 40019c0c: a2 10 20 00 clr %l1 <== NOT EXECUTED 40019c10: a6 10 63 ff or %g1, 0x3ff, %l3 <== NOT EXECUTED 40019c14: a4 10 20 00 clr %l2 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40019c18: 2b 10 00 f4 sethi %hi(0x4003d000), %l5 <== NOT EXECUTED limit++; continue; } sign = 1; } if (!isdigit(c)) 40019c1c: 29 10 00 f4 sethi %hi(0x4003d000), %l4 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40019c20: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40019c24: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40019c28: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019c2c: 06 80 00 23 bl 40019cb8 <== NOT EXECUTED 40019c30: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40019c34: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40019c38: e0 08 40 00 ldub [ %g1 ], %l0 <== NOT EXECUTED 40019c3c: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED if (c == ':') 40019c40: 80 a4 20 3a cmp %l0, 0x3a <== NOT EXECUTED 40019c44: 02 80 00 24 be 40019cd4 <== NOT EXECUTED 40019c48: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED break; if (sign == 0) { 40019c4c: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40019c50: 12 80 00 06 bne 40019c68 <== NOT EXECUTED 40019c54: c2 05 20 00 ld [ %l4 ], %g1 <== NOT EXECUTED if (c == '-') { 40019c58: 80 a4 20 2d cmp %l0, 0x2d <== NOT EXECUTED 40019c5c: 02 80 00 2f be 40019d18 <== NOT EXECUTED 40019c60: a4 10 20 01 mov 1, %l2 <== NOT EXECUTED limit++; continue; } sign = 1; } if (!isdigit(c)) 40019c64: c2 05 20 00 ld [ %l4 ], %g1 <== NOT EXECUTED 40019c68: c4 08 40 10 ldub [ %g1 + %l0 ], %g2 <== NOT EXECUTED 40019c6c: 80 88 a0 04 btst 4, %g2 <== NOT EXECUTED 40019c70: 02 80 00 28 be 40019d10 <== NOT EXECUTED 40019c74: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED return 0; d = c - '0'; if ((i > (limit / 10)) 40019c78: 40 00 6f cc call 40035ba8 <.udiv> <== NOT EXECUTED 40019c7c: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 40019c80: 80 a4 40 08 cmp %l1, %o0 <== NOT EXECUTED 40019c84: 18 80 00 23 bgu 40019d10 <== NOT EXECUTED 40019c88: 01 00 00 00 nop <== NOT EXECUTED 40019c8c: 02 80 00 1b be 40019cf8 <== NOT EXECUTED 40019c90: a0 04 3f d0 add %l0, -48, %l0 <== NOT EXECUTED || ((i == (limit / 10)) && (d > (limit % 10)))) return 0; i = i * 10 + d; 40019c94: 85 2c 60 03 sll %l1, 3, %g2 <== NOT EXECUTED 40019c98: 83 2c 60 01 sll %l1, 1, %g1 <== NOT EXECUTED 40019c9c: 82 00 40 02 add %g1, %g2, %g1 <== NOT EXECUTED 40019ca0: a2 04 00 01 add %l0, %g1, %l1 <== NOT EXECUTED unsigned int limit = INT_MAX; int sign = 0; int d; for (;;) { c = getc(fp); 40019ca4: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40019ca8: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40019cac: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019cb0: 16 bf ff e1 bge 40019c34 <== NOT EXECUTED 40019cb4: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40019cb8: d0 05 60 08 ld [ %l5 + 8 ], %o0 <== NOT EXECUTED 40019cbc: 40 00 40 7a call 40029ea4 <__srget_r> <== NOT EXECUTED 40019cc0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40019cc4: a0 10 00 08 mov %o0, %l0 <== NOT EXECUTED if (c == ':') 40019cc8: 80 a4 20 3a cmp %l0, 0x3a <== NOT EXECUTED 40019ccc: 12 bf ff e1 bne 40019c50 <== NOT EXECUTED 40019cd0: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED if ((i > (limit / 10)) || ((i == (limit / 10)) && (d > (limit % 10)))) return 0; i = i * 10 + d; } if (sign == 0) 40019cd4: 80 a4 a0 00 cmp %l2, 0 <== NOT EXECUTED 40019cd8: 02 80 00 0e be 40019d10 <== NOT EXECUTED 40019cdc: 90 10 00 12 mov %l2, %o0 <== NOT EXECUTED return 0; *val = i * sign; 40019ce0: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 40019ce4: 7f ff a4 e0 call 40003064 <.umul> <== NOT EXECUTED 40019ce8: b0 10 20 01 mov 1, %i0 <== NOT EXECUTED 40019cec: d0 26 40 00 st %o0, [ %i1 ] <== NOT EXECUTED 40019cf0: 81 c7 e0 08 ret <== NOT EXECUTED 40019cf4: 81 e8 00 00 restore <== NOT EXECUTED sign = 1; } if (!isdigit(c)) return 0; d = c - '0'; if ((i > (limit / 10)) 40019cf8: 90 10 00 13 mov %l3, %o0 <== NOT EXECUTED 40019cfc: 40 00 70 57 call 40035e58 <.urem> <== NOT EXECUTED 40019d00: 92 10 20 0a mov 0xa, %o1 <== NOT EXECUTED 40019d04: 80 a4 00 08 cmp %l0, %o0 <== NOT EXECUTED 40019d08: 08 bf ff e4 bleu 40019c98 <== NOT EXECUTED 40019d0c: 85 2c 60 03 sll %l1, 3, %g2 <== NOT EXECUTED } if (sign == 0) return 0; *val = i * sign; return 1; } 40019d10: 81 c7 e0 08 ret <== NOT EXECUTED 40019d14: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED if (c == ':') break; if (sign == 0) { if (c == '-') { sign = -1; limit++; 40019d18: a6 04 e0 01 inc %l3 <== NOT EXECUTED 40019d1c: 10 bf ff c1 b 40019c20 <== NOT EXECUTED 40019d20: a4 10 3f ff mov -1, %l2 <== NOT EXECUTED 40019d24 : /* * Extract a string value from the database */ static int scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag) { 40019d24: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED int c; *name = *bufp; 40019d28: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40019d2c: c2 26 40 00 st %g1, [ %i1 ] <== NOT EXECUTED for (;;) { c = getc(fp); 40019d30: 10 80 00 19 b 40019d94 <== NOT EXECUTED 40019d34: 33 10 00 f4 sethi %hi(0x4003d000), %i1 <== NOT EXECUTED 40019d38: c2 06 00 00 ld [ %i0 ], %g1 <== NOT EXECUTED 40019d3c: d0 08 40 00 ldub [ %g1 ], %o0 <== NOT EXECUTED 40019d40: 84 00 60 01 add %g1, 1, %g2 <== NOT EXECUTED if (c == ':') { 40019d44: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED 40019d48: 02 80 00 1e be 40019dc0 <== NOT EXECUTED 40019d4c: c4 26 00 00 st %g2, [ %i0 ] <== NOT EXECUTED if (nlFlag) return 0; break; } if (c == '\n') { 40019d50: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED 40019d54: 02 80 00 28 be 40019df4 <== NOT EXECUTED 40019d58: 80 a2 3f ff cmp %o0, -1 <== NOT EXECUTED if (!nlFlag) return 0; break; } if (c == EOF) 40019d5c: 02 80 00 29 be 40019e00 <== NOT EXECUTED 40019d60: 01 00 00 00 nop <== NOT EXECUTED return 0; if (*nleft < 2) 40019d64: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED 40019d68: 80 a0 60 01 cmp %g1, 1 <== NOT EXECUTED 40019d6c: 08 80 00 25 bleu 40019e00 <== NOT EXECUTED 40019d70: 01 00 00 00 nop <== NOT EXECUTED return 0; **bufp = c; 40019d74: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40019d78: d0 28 40 00 stb %o0, [ %g1 ] <== NOT EXECUTED ++(*bufp); 40019d7c: c4 06 80 00 ld [ %i2 ], %g2 <== NOT EXECUTED --(*nleft); 40019d80: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 40019d84: 84 00 a0 01 inc %g2 <== NOT EXECUTED --(*nleft); 40019d88: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED if (c == EOF) return 0; if (*nleft < 2) return 0; **bufp = c; ++(*bufp); 40019d8c: c4 26 80 00 st %g2, [ %i2 ] <== NOT EXECUTED --(*nleft); 40019d90: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED { int c; *name = *bufp; for (;;) { c = getc(fp); 40019d94: c2 06 20 04 ld [ %i0 + 4 ], %g1 <== NOT EXECUTED 40019d98: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED 40019d9c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019da0: 16 bf ff e6 bge 40019d38 <== NOT EXECUTED 40019da4: c2 26 20 04 st %g1, [ %i0 + 4 ] <== NOT EXECUTED 40019da8: d0 06 60 08 ld [ %i1 + 8 ], %o0 <== NOT EXECUTED 40019dac: 40 00 40 3e call 40029ea4 <__srget_r> <== NOT EXECUTED 40019db0: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED if (c == ':') { 40019db4: 80 a2 20 3a cmp %o0, 0x3a <== NOT EXECUTED 40019db8: 12 bf ff e7 bne 40019d54 <== NOT EXECUTED 40019dbc: 80 a2 20 0a cmp %o0, 0xa <== NOT EXECUTED if (nlFlag) 40019dc0: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40019dc4: 12 80 00 0f bne 40019e00 <== NOT EXECUTED 40019dc8: 01 00 00 00 nop <== NOT EXECUTED return 0; **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; 40019dcc: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED 40019dd0: c0 28 40 00 clrb [ %g1 ] <== NOT EXECUTED ++(*bufp); 40019dd4: c4 06 80 00 ld [ %i2 ], %g2 <== NOT EXECUTED --(*nleft); 40019dd8: c2 06 c0 00 ld [ %i3 ], %g1 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 40019ddc: 84 00 a0 01 inc %g2 <== NOT EXECUTED --(*nleft); 40019de0: 82 00 7f ff add %g1, -1, %g1 <== NOT EXECUTED **bufp = c; ++(*bufp); --(*nleft); } **bufp = '\0'; ++(*bufp); 40019de4: c4 26 80 00 st %g2, [ %i2 ] <== NOT EXECUTED --(*nleft); 40019de8: c2 26 c0 00 st %g1, [ %i3 ] <== NOT EXECUTED 40019dec: 81 c7 e0 08 ret <== NOT EXECUTED 40019df0: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED if (nlFlag) return 0; break; } if (c == '\n') { if (!nlFlag) 40019df4: 80 a7 20 00 cmp %i4, 0 <== NOT EXECUTED 40019df8: 32 bf ff f6 bne,a 40019dd0 <== NOT EXECUTED 40019dfc: c2 06 80 00 ld [ %i2 ], %g1 <== NOT EXECUTED } **bufp = '\0'; ++(*bufp); --(*nleft); return 1; } 40019e00: 81 c7 e0 08 ret <== NOT EXECUTED 40019e04: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 40019e08 : FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 40019e08: 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) 40019e0c: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 40019e10: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40019e14: 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) 40019e18: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 40019e1c: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 40019e20: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019e24: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40019e28: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40019e2c: 7f ff ff be call 40019d24 <== NOT EXECUTED 40019e30: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40019e34: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019e38: 12 80 00 04 bne 40019e48 <== NOT EXECUTED 40019e3c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED grp->gr_mem[memcount++] = cp + 1; } } grp->gr_mem[memcount] = NULL; return 1; } 40019e40: 81 c7 e0 08 ret <== NOT EXECUTED 40019e44: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED { int grgid; char *grmem, *cp; int memcount; if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40019e48: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 40019e4c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40019e50: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40019e54: 7f ff ff b4 call 40019d24 <== NOT EXECUTED 40019e58: 98 10 20 00 clr %o4 <== NOT EXECUTED 40019e5c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019e60: 02 bf ff f8 be 40019e40 <== NOT EXECUTED 40019e64: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019e68: 7f ff ff 67 call 40019c04 <== NOT EXECUTED 40019e6c: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 40019e70: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019e74: 02 bf ff f3 be 40019e40 <== NOT EXECUTED 40019e78: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019e7c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40019e80: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40019e84: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 40019e88: 7f ff ff a7 call 40019d24 <== NOT EXECUTED 40019e8c: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 40019e90: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40019e94: 02 bf ff eb be 40019e40 <== NOT EXECUTED 40019e98: da 07 bf f0 ld [ %fp + -16 ], %o5 <== NOT EXECUTED || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) || !scanInt(fp, &grgid) || !scanString(fp, &grmem, &buffer, &bufsize, 1)) return 0; grp->gr_gid = grgid; 40019e9c: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019ea0: 86 10 00 0d mov %o5, %g3 <== NOT EXECUTED if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) || !scanInt(fp, &grgid) || !scanString(fp, &grmem, &buffer, &bufsize, 1)) return 0; grp->gr_gid = grgid; 40019ea4: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019ea8: c4 0b 40 00 ldub [ %o5 ], %g2 <== NOT EXECUTED 40019eac: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED 40019eb0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019eb4: 02 80 00 0f be 40019ef0 <== NOT EXECUTED 40019eb8: 88 10 20 17 mov 0x17, %g4 <== NOT EXECUTED 40019ebc: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED 40019ec0: 86 00 e0 01 inc %g3 <== NOT EXECUTED 40019ec4: c4 08 c0 00 ldub [ %g3 ], %g2 <== NOT EXECUTED if(*cp == ',') 40019ec8: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED memcount++; 40019ecc: 82 18 60 2c xor %g1, 0x2c, %g1 <== NOT EXECUTED 40019ed0: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED grp->gr_gid = grgid; /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019ed4: 83 28 a0 18 sll %g2, 0x18, %g1 <== NOT EXECUTED if(*cp == ',') memcount++; 40019ed8: 88 61 3f ff subx %g4, -1, %g4 <== NOT EXECUTED grp->gr_gid = grgid; /* * Determine number of members */ for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019edc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019ee0: 32 bf ff f9 bne,a 40019ec4 <== NOT EXECUTED 40019ee4: 86 00 e0 01 inc %g3 <== NOT EXECUTED 40019ee8: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 40019eec: 88 00 60 13 add %g1, 0x13, %g4 <== NOT EXECUTED } /* * Hack to produce (hopefully) a suitably-aligned array of pointers */ if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 40019ef0: c2 07 a0 50 ld [ %fp + 0x50 ], %g1 <== NOT EXECUTED 40019ef4: 80 a0 40 04 cmp %g1, %g4 <== NOT EXECUTED 40019ef8: 0a bf ff d2 bcs 40019e40 <== NOT EXECUTED 40019efc: c2 07 a0 4c ld [ %fp + 0x4c ], %g1 <== NOT EXECUTED return 0; grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15); 40019f00: 82 00 60 0f add %g1, 0xf, %g1 <== NOT EXECUTED 40019f04: 82 08 7f f0 and %g1, -16, %g1 <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; 40019f08: da 20 40 00 st %o5, [ %g1 ] <== NOT EXECUTED for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019f0c: 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); 40019f10: c2 26 60 0c st %g1, [ %i1 + 0xc ] <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019f14: c2 08 80 00 ldub [ %g2 ], %g1 <== NOT EXECUTED 40019f18: 83 28 60 18 sll %g1, 0x18, %g1 <== NOT EXECUTED 40019f1c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019f20: 02 80 00 15 be 40019f74 <== NOT EXECUTED 40019f24: 86 10 20 04 mov 4, %g3 <== NOT EXECUTED 40019f28: 86 00 a0 01 add %g2, 1, %g3 <== NOT EXECUTED 40019f2c: 10 80 00 07 b 40019f48 <== NOT EXECUTED 40019f30: 88 10 20 01 mov 1, %g4 <== NOT EXECUTED 40019f34: c2 08 c0 00 ldub [ %g3 ], %g1 <== NOT EXECUTED 40019f38: 83 28 60 18 sll %g1, 0x18, %g1 <== NOT EXECUTED 40019f3c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40019f40: 02 80 00 0c be 40019f70 <== NOT EXECUTED 40019f44: 86 00 e0 01 inc %g3 <== NOT EXECUTED if(*cp == ',') { 40019f48: 83 38 60 18 sra %g1, 0x18, %g1 <== NOT EXECUTED 40019f4c: 80 a0 60 2c cmp %g1, 0x2c <== NOT EXECUTED 40019f50: 32 bf ff fa bne,a 40019f38 <== NOT EXECUTED 40019f54: c2 08 c0 00 ldub [ %g3 ], %g1 <== NOT EXECUTED *cp = '\0'; 40019f58: c0 28 ff ff clrb [ %g3 + -1 ] <== NOT EXECUTED grp->gr_mem[memcount++] = cp + 1; 40019f5c: c4 06 60 0c ld [ %i1 + 0xc ], %g2 <== NOT EXECUTED 40019f60: 83 29 20 02 sll %g4, 2, %g1 <== NOT EXECUTED 40019f64: 88 01 20 01 inc %g4 <== NOT EXECUTED 40019f68: 10 bf ff f3 b 40019f34 <== NOT EXECUTED 40019f6c: c6 20 80 01 st %g3, [ %g2 + %g1 ] <== NOT EXECUTED /* * Fill in pointer array */ grp->gr_mem[0] = grmem; for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40019f70: 87 29 20 02 sll %g4, 2, %g3 <== NOT EXECUTED if(*cp == ',') { *cp = '\0'; grp->gr_mem[memcount++] = cp + 1; } } grp->gr_mem[memcount] = NULL; 40019f74: c2 06 60 0c ld [ %i1 + 0xc ], %g1 <== NOT EXECUTED 40019f78: c0 20 40 03 clr [ %g1 + %g3 ] <== NOT EXECUTED 40019f7c: 81 c7 e0 08 ret <== NOT EXECUTED 40019f80: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 40019fd0 : FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40019fd0: 9d e3 bf 90 save %sp, -112, %sp <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40019fd4: 98 10 20 00 clr %o4 <== NOT EXECUTED FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40019fd8: f4 27 a0 4c st %i2, [ %fp + 0x4c ] <== NOT EXECUTED 40019fdc: f6 27 a0 50 st %i3, [ %fp + 0x50 ] <== NOT EXECUTED int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40019fe0: b4 07 a0 50 add %fp, 0x50, %i2 <== NOT EXECUTED 40019fe4: b6 07 a0 4c add %fp, 0x4c, %i3 <== NOT EXECUTED 40019fe8: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 40019fec: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40019ff0: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 40019ff4: 7f ff ff 4c call 40019d24 <== NOT EXECUTED 40019ff8: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 40019ffc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a000: 12 80 00 04 bne 4001a010 <== NOT EXECUTED 4001a004: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; pwd->pw_uid = pwuid; pwd->pw_gid = pwgid; return 1; } 4001a008: 81 c7 e0 08 ret <== NOT EXECUTED 4001a00c: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED size_t bufsize ) { int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 4001a010: 92 06 60 04 add %i1, 4, %o1 <== NOT EXECUTED 4001a014: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a018: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001a01c: 7f ff ff 42 call 40019d24 <== NOT EXECUTED 4001a020: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001a024: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a028: 02 bf ff f8 be 4001a008 <== NOT EXECUTED 4001a02c: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a030: 7f ff fe f5 call 40019c04 <== NOT EXECUTED 4001a034: 92 07 bf f4 add %fp, -12, %o1 <== NOT EXECUTED 4001a038: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a03c: 02 bf ff f3 be 4001a008 <== NOT EXECUTED 4001a040: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a044: 7f ff fe f0 call 40019c04 <== NOT EXECUTED 4001a048: 92 07 bf f0 add %fp, -16, %o1 <== NOT EXECUTED 4001a04c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a050: 02 bf ff ee be 4001a008 <== NOT EXECUTED 4001a054: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a058: 92 06 60 0c add %i1, 0xc, %o1 <== NOT EXECUTED 4001a05c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a060: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001a064: 7f ff ff 30 call 40019d24 <== NOT EXECUTED 4001a068: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001a06c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a070: 02 bf ff e6 be 4001a008 <== NOT EXECUTED 4001a074: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a078: 92 06 60 10 add %i1, 0x10, %o1 <== NOT EXECUTED 4001a07c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a080: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001a084: 7f ff ff 28 call 40019d24 <== NOT EXECUTED 4001a088: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001a08c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a090: 02 bf ff de be 4001a008 <== NOT EXECUTED 4001a094: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a098: 92 06 60 14 add %i1, 0x14, %o1 <== NOT EXECUTED 4001a09c: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a0a0: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001a0a4: 7f ff ff 20 call 40019d24 <== NOT EXECUTED 4001a0a8: 98 10 20 00 clr %o4 <== NOT EXECUTED 4001a0ac: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a0b0: 02 bf ff d6 be 4001a008 <== NOT EXECUTED 4001a0b4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001a0b8: 94 10 00 1b mov %i3, %o2 <== NOT EXECUTED 4001a0bc: 96 10 00 1a mov %i2, %o3 <== NOT EXECUTED 4001a0c0: 92 06 60 18 add %i1, 0x18, %o1 <== NOT EXECUTED 4001a0c4: 7f ff ff 18 call 40019d24 <== NOT EXECUTED 4001a0c8: 98 10 20 01 mov 1, %o4 <== NOT EXECUTED 4001a0cc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a0d0: 02 bf ff ce be 4001a008 <== NOT EXECUTED 4001a0d4: c2 07 bf f4 ld [ %fp + -12 ], %g1 <== NOT EXECUTED || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; pwd->pw_uid = pwuid; pwd->pw_gid = pwgid; 4001a0d8: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED || !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; pwd->pw_uid = pwuid; 4001a0dc: c2 36 60 08 sth %g1, [ %i1 + 8 ] <== NOT EXECUTED pwd->pw_gid = pwgid; 4001a0e0: c4 36 60 0a sth %g2, [ %i1 + 0xa ] <== NOT EXECUTED 4001a0e4: 81 c7 e0 08 ret <== NOT EXECUTED 4001a0e8: 91 e8 20 01 restore %g0, 1, %o0 <== NOT EXECUTED 40019ba0 : int setgid( gid_t gid ) { _POSIX_types_Gid = gid; 40019ba0: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 40019ba4: c4 00 61 20 ld [ %g1 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED 40019ba8: d0 30 a0 2a sth %o0, [ %g2 + 0x2a ] <== NOT EXECUTED return 0; } 40019bac: 81 c3 e0 08 retl <== NOT EXECUTED 40019bb0: 90 10 20 00 clr %o0 <== NOT EXECUTED 4001a224 : return NULL; return &grent; } void setgrent(void) { 4001a224: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 4001a228: 7f ff ff c4 call 4001a138 <== NOT EXECUTED 4001a22c: 21 10 00 f6 sethi %hi(0x4003d800), %l0 <== NOT EXECUTED if (group_fp != NULL) 4001a230: d0 04 21 84 ld [ %l0 + 0x184 ], %o0 ! 4003d984 <== NOT EXECUTED 4001a234: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a238: 22 80 00 05 be,a 4001a24c <== NOT EXECUTED 4001a23c: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED fclose(group_fp); 4001a240: 40 00 32 23 call 40026acc <== NOT EXECUTED 4001a244: 01 00 00 00 nop <== NOT EXECUTED group_fp = fopen("/etc/group", "r"); 4001a248: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001a24c: 13 10 00 ed sethi %hi(0x4003b400), %o1 <== NOT EXECUTED 4001a250: 90 12 21 d0 or %o0, 0x1d0, %o0 <== NOT EXECUTED 4001a254: 40 00 34 1c call 400272c4 <== NOT EXECUTED 4001a258: 92 12 60 38 or %o1, 0x38, %o1 <== NOT EXECUTED 4001a25c: d0 24 21 84 st %o0, [ %l0 + 0x184 ] <== NOT EXECUTED } 4001a260: 81 c7 e0 08 ret <== NOT EXECUTED 4001a264: 81 e8 00 00 restore <== NOT EXECUTED 4001a428 : return NULL; return &pwent; } void setpwent(void) { 4001a428: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED init_etc_passwd_group(); 4001a42c: 7f ff ff 43 call 4001a138 <== NOT EXECUTED 4001a430: 21 10 00 f6 sethi %hi(0x4003d800), %l0 <== NOT EXECUTED if (passwd_fp != NULL) 4001a434: d0 04 20 9c ld [ %l0 + 0x9c ], %o0 ! 4003d89c <== NOT EXECUTED 4001a438: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001a43c: 22 80 00 05 be,a 4001a450 <== NOT EXECUTED 4001a440: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED fclose(passwd_fp); 4001a444: 40 00 31 a2 call 40026acc <== NOT EXECUTED 4001a448: 01 00 00 00 nop <== NOT EXECUTED passwd_fp = fopen("/etc/passwd", "r"); 4001a44c: 11 10 00 e4 sethi %hi(0x40039000), %o0 <== NOT EXECUTED 4001a450: 13 10 00 ed sethi %hi(0x4003b400), %o1 <== NOT EXECUTED 4001a454: 90 12 21 58 or %o0, 0x158, %o0 <== NOT EXECUTED 4001a458: 40 00 33 9b call 400272c4 <== NOT EXECUTED 4001a45c: 92 12 60 38 or %o1, 0x38, %o1 <== NOT EXECUTED 4001a460: d0 24 20 9c st %o0, [ %l0 + 0x9c ] <== NOT EXECUTED } 4001a464: 81 c7 e0 08 ret <== NOT EXECUTED 4001a468: 81 e8 00 00 restore <== NOT EXECUTED 4001a63c : int setuid( uid_t uid ) { _POSIX_types_Uid = uid; 4001a63c: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 4001a640: c4 00 61 20 ld [ %g1 + 0x120 ], %g2 ! 4003c120 <== NOT EXECUTED 4001a644: d0 30 a0 28 sth %o0, [ %g2 + 0x28 ] <== NOT EXECUTED return 0; } 4001a648: 81 c3 e0 08 retl <== NOT EXECUTED 4001a64c: 90 10 20 00 clr %o0 <== NOT EXECUTED 400051d0 : /* * Process input character, with semaphore. */ static int siproc (unsigned char c, struct rtems_termios_tty *tty) { 400051d0: 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)) { 400051d4: c2 06 60 3c ld [ %i1 + 0x3c ], %g1 <== NOT EXECUTED 400051d8: 80 88 6e 78 btst 0xe78, %g1 <== NOT EXECUTED 400051dc: 32 80 00 05 bne,a 400051f0 <== NOT EXECUTED 400051e0: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); i = iproc (c, tty); rtems_semaphore_release (tty->osem); } else { i = iproc (c, tty); 400051e4: b0 0e 20 ff and %i0, 0xff, %i0 <== NOT EXECUTED 400051e8: 7f ff ff 77 call 40004fc4 <== NOT EXECUTED 400051ec: 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); 400051f0: 94 10 20 00 clr %o2 <== NOT EXECUTED 400051f4: 40 00 07 46 call 40006f0c <== NOT EXECUTED 400051f8: 92 10 20 00 clr %o1 <== NOT EXECUTED i = iproc (c, tty); 400051fc: 90 0e 20 ff and %i0, 0xff, %o0 <== NOT EXECUTED 40005200: 7f ff ff 71 call 40004fc4 <== NOT EXECUTED 40005204: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED 40005208: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED rtems_semaphore_release (tty->osem); 4000520c: 40 00 08 0f call 40007248 <== NOT EXECUTED 40005210: d0 06 60 18 ld [ %i1 + 0x18 ], %o0 <== NOT EXECUTED } else { i = iproc (c, tty); } return i; } 40005214: 81 c7 e0 08 ret <== NOT EXECUTED 40005218: 81 e8 00 00 restore <== NOT EXECUTED 400079e4 : int _STAT_NAME( const char *path, struct stat *buf ) { 400079e4: 9d e3 bf 88 save %sp, -120, %sp <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !buf ) 400079e8: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400079ec: 02 80 00 32 be 40007ab4 <== NOT EXECUTED 400079f0: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); status = rtems_filesystem_evaluate_path( path, 0, &loc, _STAT_FOLLOW_LINKS ); 400079f4: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 400079f8: 92 10 20 00 clr %o1 <== NOT EXECUTED 400079fc: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED 40007a00: 96 10 20 01 mov 1, %o3 <== NOT EXECUTED 40007a04: 7f ff f9 8d call 40006038 <== NOT EXECUTED 40007a08: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED if ( status != 0 ) 40007a0c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40007a10: 12 80 00 27 bne 40007aac <== NOT EXECUTED 40007a14: c4 07 bf ec ld [ %fp + -20 ], %g2 <== NOT EXECUTED return -1; if ( !loc.handlers->fstat_h ){ 40007a18: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 40007a1c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007a20: 02 80 00 2b be 40007acc <== NOT EXECUTED 40007a24: 92 10 00 19 mov %i1, %o1 <== NOT EXECUTED /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( buf, 0, sizeof(struct stat) ); 40007a28: c0 26 40 00 clr [ %i1 ] <== NOT EXECUTED 40007a2c: c0 26 60 04 clr [ %i1 + 4 ] <== NOT EXECUTED 40007a30: c0 26 60 08 clr [ %i1 + 8 ] <== NOT EXECUTED 40007a34: c0 26 60 0c clr [ %i1 + 0xc ] <== NOT EXECUTED 40007a38: c0 26 60 10 clr [ %i1 + 0x10 ] <== NOT EXECUTED 40007a3c: c0 26 60 14 clr [ %i1 + 0x14 ] <== NOT EXECUTED 40007a40: c0 26 60 18 clr [ %i1 + 0x18 ] <== NOT EXECUTED 40007a44: c0 26 60 1c clr [ %i1 + 0x1c ] <== NOT EXECUTED 40007a48: c0 26 60 20 clr [ %i1 + 0x20 ] <== NOT EXECUTED 40007a4c: c0 26 60 24 clr [ %i1 + 0x24 ] <== NOT EXECUTED 40007a50: c0 26 60 28 clr [ %i1 + 0x28 ] <== NOT EXECUTED 40007a54: c0 26 60 2c clr [ %i1 + 0x2c ] <== NOT EXECUTED 40007a58: c0 26 60 30 clr [ %i1 + 0x30 ] <== NOT EXECUTED 40007a5c: c0 26 60 34 clr [ %i1 + 0x34 ] <== NOT EXECUTED 40007a60: c0 26 60 38 clr [ %i1 + 0x38 ] <== NOT EXECUTED 40007a64: c0 26 60 3c clr [ %i1 + 0x3c ] <== NOT EXECUTED 40007a68: c0 26 60 40 clr [ %i1 + 0x40 ] <== NOT EXECUTED 40007a6c: c0 26 60 44 clr [ %i1 + 0x44 ] <== NOT EXECUTED 40007a70: c0 26 60 48 clr [ %i1 + 0x48 ] <== NOT EXECUTED 40007a74: c0 26 60 4c clr [ %i1 + 0x4c ] <== NOT EXECUTED status = (*loc.handlers->fstat_h)( &loc, buf ); 40007a78: c2 00 a0 18 ld [ %g2 + 0x18 ], %g1 <== NOT EXECUTED 40007a7c: 9f c0 40 00 call %g1 <== NOT EXECUTED 40007a80: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 40007a84: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40007a88: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007a8c: 02 80 00 08 be 40007aac <== NOT EXECUTED 40007a90: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 40007a94: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40007a98: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007a9c: 02 80 00 1a be 40007b04 <== NOT EXECUTED 40007aa0: 01 00 00 00 nop <== NOT EXECUTED 40007aa4: 9f c0 40 00 call %g1 <== NOT EXECUTED 40007aa8: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED return status; } 40007aac: 81 c7 e0 08 ret <== NOT EXECUTED 40007ab0: 81 e8 00 00 restore <== NOT EXECUTED /* * Check to see if we were passed a valid pointer. */ if ( !buf ) rtems_set_errno_and_return_minus_one( EFAULT ); 40007ab4: 40 00 7b bf call 400269b0 <__errno> <== NOT EXECUTED 40007ab8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40007abc: 82 10 20 0e mov 0xe, %g1 <== NOT EXECUTED 40007ac0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40007ac4: 81 c7 e0 08 ret <== NOT EXECUTED 40007ac8: 81 e8 00 00 restore <== NOT EXECUTED status = rtems_filesystem_evaluate_path( path, 0, &loc, _STAT_FOLLOW_LINKS ); if ( status != 0 ) return -1; if ( !loc.handlers->fstat_h ){ rtems_filesystem_freenode( &loc ); 40007acc: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 40007ad0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007ad4: 02 80 00 08 be 40007af4 <== NOT EXECUTED 40007ad8: 01 00 00 00 nop <== NOT EXECUTED 40007adc: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 40007ae0: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 40007ae4: 02 80 00 04 be 40007af4 <== NOT EXECUTED 40007ae8: 01 00 00 00 nop <== NOT EXECUTED 40007aec: 9f c0 40 00 call %g1 <== NOT EXECUTED 40007af0: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 40007af4: 40 00 7b af call 400269b0 <__errno> <== NOT EXECUTED 40007af8: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 40007afc: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 40007b00: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40007b04: 81 c7 e0 08 ret <== NOT EXECUTED 40007b08: 81 e8 00 00 restore <== NOT EXECUTED 4001ac24 : int tcdrain( int fd ) { return ioctl( fd, RTEMS_IO_TCDRAIN, 0 ); 4001ac24: 92 10 20 03 mov 3, %o1 ! 3 <== NOT EXECUTED 4001ac28: 94 10 20 00 clr %o2 <== NOT EXECUTED 4001ac2c: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001ac30: 40 00 27 44 call 40024940 <== NOT EXECUTED 4001ac34: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 4001ac38: 01 00 00 00 nop 40016980 : int tcgetattr( int fd, struct termios *tp ) { 40016980: 94 10 00 09 mov %o1, %o2 <== NOT EXECUTED return ioctl( fd, RTEMS_IO_GET_ATTRIBUTES, tp ); 40016984: 92 10 20 01 mov 1, %o1 <== NOT EXECUTED 40016988: 82 13 c0 00 mov %o7, %g1 <== NOT EXECUTED 4001698c: 40 00 0d fa call 4001a174 <== NOT EXECUTED 40016990: 9e 10 40 00 mov %g1, %o7 <== NOT EXECUTED 40016994: 01 00 00 00 nop 40016998 : int tcsetattr( int fd, int opt, struct termios *tp ) { 40016998: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED switch (opt) { 4001699c: 80 a6 60 00 cmp %i1, 0 <== NOT EXECUTED 400169a0: 02 80 00 10 be 400169e0 <== NOT EXECUTED 400169a4: 80 a6 60 01 cmp %i1, 1 <== NOT EXECUTED 400169a8: 02 80 00 08 be 400169c8 <== NOT EXECUTED 400169ac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED default: rtems_set_errno_and_return_minus_one( ENOTSUP ); 400169b0: 40 00 0f 99 call 4001a814 <__errno> <== NOT EXECUTED 400169b4: 01 00 00 00 nop <== NOT EXECUTED 400169b8: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 400169bc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED * Fall through to.... */ case TCSANOW: return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp ); } } 400169c0: 81 c7 e0 08 ret <== NOT EXECUTED 400169c4: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED switch (opt) { default: rtems_set_errno_and_return_minus_one( ENOTSUP ); case TCSADRAIN: if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0) 400169c8: 92 10 20 03 mov 3, %o1 <== NOT EXECUTED 400169cc: 40 00 0d ea call 4001a174 <== NOT EXECUTED 400169d0: 94 10 20 00 clr %o2 <== NOT EXECUTED 400169d4: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 400169d8: 06 bf ff fa bl 400169c0 <== NOT EXECUTED 400169dc: 01 00 00 00 nop <== NOT EXECUTED return -1; /* * Fall through to.... */ case TCSANOW: return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp ); 400169e0: 40 00 0d e5 call 4001a174 <== NOT EXECUTED 400169e4: 93 e8 20 02 restore %g0, 2, %o1 <== NOT EXECUTED 400169e8: 01 00 00 00 nop 4001adac : */ char *ttyname( int fd ) { 4001adac: 9d e3 bf 98 save %sp, -104, %sp <== NOT EXECUTED if ( !ttyname_r( fd, ttyname_buf, sizeof(ttyname_buf) ) ) 4001adb0: 21 10 00 f0 sethi %hi(0x4003c000), %l0 <== NOT EXECUTED 4001adb4: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001adb8: 94 10 24 06 mov 0x406, %o2 <== NOT EXECUTED 4001adbc: 92 14 22 90 or %l0, 0x290, %o1 <== NOT EXECUTED 4001adc0: 7f ff ff ba call 4001aca8 <== NOT EXECUTED 4001adc4: b0 14 22 90 or %l0, 0x290, %i0 <== NOT EXECUTED 4001adc8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001adcc: 12 80 00 04 bne 4001addc <== NOT EXECUTED 4001add0: 01 00 00 00 nop <== NOT EXECUTED return ttyname_buf; return NULL; } 4001add4: 81 c7 e0 08 ret <== NOT EXECUTED 4001add8: 81 e8 00 00 restore <== NOT EXECUTED 4001addc: 81 c7 e0 08 ret <== NOT EXECUTED 4001ade0: 91 e8 20 00 restore %g0, 0, %o0 <== NOT EXECUTED 4001aca8 : int ttyname_r( int fd, char *name, int namesize ) { 4001aca8: 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) 4001acac: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001acb0: 7f ff ff e3 call 4001ac3c <== NOT EXECUTED 4001acb4: 92 07 bf d4 add %fp, -44, %o1 <== NOT EXECUTED 4001acb8: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001acbc: 06 80 00 0d bl 4001acf0 <== NOT EXECUTED 4001acc0: 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)) 4001acc4: 40 00 26 9d call 40024738 <== NOT EXECUTED 4001acc8: 92 07 bf 80 add %fp, -128, %o1 <== NOT EXECUTED 4001accc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001acd0: 12 80 00 08 bne 4001acf0 <== NOT EXECUTED 4001acd4: c2 17 bf 8c lduh [ %fp + -116 ], %g1 <== NOT EXECUTED 4001acd8: 05 00 00 3c sethi %hi(0xf000), %g2 <== NOT EXECUTED 4001acdc: 07 00 00 08 sethi %hi(0x2000), %g3 <== NOT EXECUTED 4001ace0: 82 08 40 02 and %g1, %g2, %g1 <== NOT EXECUTED 4001ace4: 80 a0 40 03 cmp %g1, %g3 <== NOT EXECUTED 4001ace8: 02 80 00 08 be 4001ad08 <== NOT EXECUTED 4001acec: 11 10 00 e4 sethi %hi(0x40039000), %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); 4001acf0: 40 00 2f 30 call 400269b0 <__errno> <== NOT EXECUTED 4001acf4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001acf8: 82 10 20 09 mov 9, %g1 <== NOT EXECUTED 4001acfc: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001ad00: 81 c7 e0 08 ret <== NOT EXECUTED 4001ad04: 81 e8 00 00 restore <== NOT EXECUTED for (rval = NULL; (dirp = readdir (dp)) != NULL ;) { if (dirp->d_ino != sb.st_ino) continue; strcpy (name + sizeof (_PATH_DEV) - 1, dirp->d_name); 4001ad08: 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) 4001ad0c: 90 12 22 10 or %o0, 0x210, %o0 <== NOT EXECUTED 4001ad10: 7f ff fe 7b call 4001a6fc <== NOT EXECUTED 4001ad14: a2 07 bf 30 add %fp, -208, %l1 <== NOT EXECUTED 4001ad18: b0 92 20 00 orcc %o0, 0, %i0 <== NOT EXECUTED 4001ad1c: 02 bf ff f5 be 4001acf0 <== NOT EXECUTED 4001ad20: 01 00 00 00 nop <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EBADF); for (rval = NULL; (dirp = readdir (dp)) != NULL ;) 4001ad24: 7f ff ff 38 call 4001aa04 <== NOT EXECUTED 4001ad28: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001ad2c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ad30: 02 80 00 1a be 4001ad98 <== NOT EXECUTED 4001ad34: c2 07 bf 88 ld [ %fp + -120 ], %g1 <== NOT EXECUTED { if (dirp->d_ino != sb.st_ino) 4001ad38: c4 02 00 00 ld [ %o0 ], %g2 <== NOT EXECUTED 4001ad3c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001ad40: 12 bf ff f9 bne 4001ad24 <== NOT EXECUTED 4001ad44: 92 02 20 0c add %o0, 0xc, %o1 <== NOT EXECUTED continue; strcpy (name + sizeof (_PATH_DEV) - 1, dirp->d_name); 4001ad48: 40 00 3e 11 call 4002a58c <== NOT EXECUTED 4001ad4c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED if (stat (name, &dsb) || sb.st_dev != dsb.st_dev || 4001ad50: 90 10 00 19 mov %i1, %o0 <== NOT EXECUTED 4001ad54: 7f ff b3 24 call 400079e4 <== NOT EXECUTED 4001ad58: 92 10 00 11 mov %l1, %o1 <== NOT EXECUTED 4001ad5c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ad60: 12 bf ff f1 bne 4001ad24 <== NOT EXECUTED 4001ad64: c4 07 bf 80 ld [ %fp + -128 ], %g2 <== NOT EXECUTED 4001ad68: c2 07 bf 30 ld [ %fp + -208 ], %g1 <== NOT EXECUTED 4001ad6c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001ad70: 12 bf ff ed bne 4001ad24 <== NOT EXECUTED 4001ad74: c4 07 bf 84 ld [ %fp + -124 ], %g2 <== NOT EXECUTED 4001ad78: c2 07 bf 34 ld [ %fp + -204 ], %g1 <== NOT EXECUTED 4001ad7c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001ad80: 12 bf ff e9 bne 4001ad24 <== NOT EXECUTED 4001ad84: c4 07 bf 88 ld [ %fp + -120 ], %g2 <== NOT EXECUTED 4001ad88: c2 07 bf 38 ld [ %fp + -200 ], %g1 <== NOT EXECUTED 4001ad8c: 80 a0 80 01 cmp %g2, %g1 <== NOT EXECUTED 4001ad90: 12 bf ff e5 bne 4001ad24 <== NOT EXECUTED 4001ad94: 01 00 00 00 nop <== NOT EXECUTED sb.st_ino != dsb.st_ino) continue; rval = name; break; } (void) closedir (dp); 4001ad98: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001ad9c: 7f ff f9 83 call 400193a8 <== NOT EXECUTED 4001ada0: b0 10 20 00 clr %i0 <== NOT EXECUTED return 0; } 4001ada4: 81 c7 e0 08 ret <== NOT EXECUTED 4001ada8: 81 e8 00 00 restore <== NOT EXECUTED 4001ade4 : mode_t cmask ) { mode_t old_mask; old_mask = rtems_filesystem_umask; 4001ade4: 03 10 00 f0 sethi %hi(0x4003c000), %g1 <== NOT EXECUTED 4001ade8: c6 00 61 20 ld [ %g1 + 0x120 ], %g3 ! 4003c120 <== NOT EXECUTED 4001adec: c4 10 e0 24 lduh [ %g3 + 0x24 ], %g2 <== NOT EXECUTED rtems_filesystem_umask = cmask; 4001adf0: d0 30 e0 24 sth %o0, [ %g3 + 0x24 ] <== NOT EXECUTED 4001adf4: 85 28 a0 10 sll %g2, 0x10, %g2 <== NOT EXECUTED return old_mask; } 4001adf8: 81 c3 e0 08 retl <== NOT EXECUTED 4001adfc: 91 30 a0 10 srl %g2, 0x10, %o0 <== NOT EXECUTED 4001ae00 : #include int unlink( const char *path ) { 4001ae00: 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 ); 4001ae04: 92 10 20 00 clr %o1 <== NOT EXECUTED 4001ae08: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED 4001ae0c: a0 07 bf e8 add %fp, -24, %l0 <== NOT EXECUTED 4001ae10: 96 10 20 00 clr %o3 <== NOT EXECUTED 4001ae14: 7f ff ac 89 call 40006038 <== NOT EXECUTED 4001ae18: 94 10 00 10 mov %l0, %o2 <== NOT EXECUTED if ( result != 0 ) 4001ae1c: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ae20: 02 80 00 04 be 4001ae30 <== NOT EXECUTED 4001ae24: 90 10 20 02 mov 2, %o0 <== NOT EXECUTED result = (*loc.ops->unlink_h)( &loc ); rtems_filesystem_freenode( &loc ); return result; } 4001ae28: 81 c7 e0 08 ret <== NOT EXECUTED 4001ae2c: 91 e8 3f ff restore %g0, -1, %o0 <== NOT EXECUTED result = rtems_filesystem_evaluate_path( path, 0, &loc, FALSE ); if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); 4001ae30: 7f ff ac 52 call 40005f78 <== NOT EXECUTED 4001ae34: 92 10 00 10 mov %l0, %o1 <== NOT EXECUTED if (result != 0 && errno != ENOTSUP) { 4001ae38: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 4001ae3c: 12 80 00 1d bne 4001aeb0 <== NOT EXECUTED 4001ae40: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); return -1; } if ( !loc.ops->node_type_h ) { 4001ae44: c2 00 a0 10 ld [ %g2 + 0x10 ], %g1 <== NOT EXECUTED 4001ae48: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ae4c: 22 80 00 2b be,a 4001aef8 <== NOT EXECUTED 4001ae50: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { 4001ae54: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001ae58: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001ae5c: 80 a2 20 01 cmp %o0, 1 <== NOT EXECUTED 4001ae60: 02 80 00 31 be 4001af24 <== NOT EXECUTED 4001ae64: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EISDIR ); } if ( !loc.ops->unlink_h ) { 4001ae68: c2 00 a0 0c ld [ %g2 + 0xc ], %g1 <== NOT EXECUTED 4001ae6c: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ae70: 22 80 00 22 be,a 4001aef8 <== NOT EXECUTED 4001ae74: c2 00 a0 1c ld [ %g2 + 0x1c ], %g1 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->unlink_h)( &loc ); 4001ae78: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001ae7c: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 4001ae80: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001ae84: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ae88: 02 80 00 08 be 4001aea8 <== NOT EXECUTED 4001ae8c: b0 10 00 08 mov %o0, %i0 <== NOT EXECUTED 4001ae90: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001ae94: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001ae98: 02 80 00 31 be 4001af5c <== NOT EXECUTED 4001ae9c: 01 00 00 00 nop <== NOT EXECUTED 4001aea0: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001aea4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001aea8: 81 c7 e0 08 ret <== NOT EXECUTED 4001aeac: 81 e8 00 00 restore <== NOT EXECUTED result = rtems_filesystem_evaluate_path( path, 0, &loc, FALSE ); if ( result != 0 ) return -1; result = rtems_filesystem_evaluate_parent(RTEMS_LIBIO_PERMS_WRITE, &loc ); if (result != 0 && errno != ENOTSUP) { 4001aeb0: 40 00 2e c0 call 400269b0 <__errno> <== NOT EXECUTED 4001aeb4: 01 00 00 00 nop <== NOT EXECUTED 4001aeb8: c2 02 00 00 ld [ %o0 ], %g1 <== NOT EXECUTED 4001aebc: 80 a0 60 86 cmp %g1, 0x86 <== NOT EXECUTED 4001aec0: 02 bf ff e1 be 4001ae44 <== NOT EXECUTED 4001aec4: c4 07 bf f0 ld [ %fp + -16 ], %g2 <== NOT EXECUTED rtems_filesystem_freenode( &loc ); 4001aec8: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001aecc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001aed0: 02 bf ff f6 be 4001aea8 <== NOT EXECUTED 4001aed4: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001aed8: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001aedc: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001aee0: 02 bf ff f2 be 4001aea8 <== NOT EXECUTED 4001aee4: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED 4001aee8: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001aeec: 01 00 00 00 nop <== NOT EXECUTED 4001aef0: 81 c7 e0 08 ret <== NOT EXECUTED 4001aef4: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( EISDIR ); } if ( !loc.ops->unlink_h ) { rtems_filesystem_freenode( &loc ); 4001aef8: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001aefc: 02 80 00 04 be 4001af0c <== NOT EXECUTED 4001af00: 01 00 00 00 nop <== NOT EXECUTED 4001af04: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001af08: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOTSUP ); 4001af0c: 40 00 2e a9 call 400269b0 <__errno> <== NOT EXECUTED 4001af10: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001af14: 82 10 20 86 mov 0x86, %g1 <== NOT EXECUTED 4001af18: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001af1c: 81 c7 e0 08 ret <== NOT EXECUTED 4001af20: 81 e8 00 00 restore <== NOT EXECUTED rtems_filesystem_freenode( &loc ); rtems_set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { rtems_filesystem_freenode( &loc ); 4001af24: c2 07 bf f0 ld [ %fp + -16 ], %g1 <== NOT EXECUTED 4001af28: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001af2c: 02 80 00 08 be 4001af4c <== NOT EXECUTED 4001af30: 01 00 00 00 nop <== NOT EXECUTED 4001af34: c2 00 60 1c ld [ %g1 + 0x1c ], %g1 <== NOT EXECUTED 4001af38: 80 a0 60 00 cmp %g1, 0 <== NOT EXECUTED 4001af3c: 02 80 00 04 be 4001af4c <== NOT EXECUTED 4001af40: 01 00 00 00 nop <== NOT EXECUTED 4001af44: 9f c0 40 00 call %g1 <== NOT EXECUTED 4001af48: 90 10 00 10 mov %l0, %o0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EISDIR ); 4001af4c: 40 00 2e 99 call 400269b0 <__errno> <== NOT EXECUTED 4001af50: b0 10 3f ff mov -1, %i0 <== NOT EXECUTED 4001af54: 82 10 20 15 mov 0x15, %g1 <== NOT EXECUTED 4001af58: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 4001af5c: 81 c7 e0 08 ret <== NOT EXECUTED 4001af60: 81 e8 00 00 restore <== NOT EXECUTED 400040d8 : | Arguments: as in printf: fmt - format string, ... - unnamed arguments. | Returns: Nothing. +--------------------------------------------------------------------------*/ void vprintk(const char *fmt, va_list ap) { 400040d8: 9d e3 bf 80 save %sp, -128, %sp char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 400040dc: d0 0e 00 00 ldub [ %i0 ], %o0 400040e0: 91 2a 20 18 sll %o0, 0x18, %o0 400040e4: 80 a2 20 00 cmp %o0, 0 400040e8: 02 80 00 3a be 400041d0 400040ec: 03 10 00 10 sethi %hi(0x40004000), %g1 400040f0: 05 10 00 64 sethi %hi(0x40019000), %g2 if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 400040f4: b4 10 60 04 or %g1, 4, %i2 400040f8: b8 10 a1 d8 or %g2, 0x1d8, %i4 break; case 'c': BSP_output_char(va_arg(ap, int)); break; default: BSP_output_char(c); 400040fc: 3b 10 00 67 sethi %hi(0x40019c00), %i5 40004100: ac 07 bf e4 add %fp, -28, %l6 lflag = 0; base = 0; sign = 0; width = 0; lead = ' '; if (*fmt == '%') 40004104: 91 3a 20 18 sra %o0, 0x18, %o0 40004108: 80 a2 20 25 cmp %o0, 0x25 4000410c: 12 80 00 33 bne 400041d8 40004110: c2 07 61 34 ld [ %i5 + 0x134 ], %g1 { fmt++; 40004114: b0 06 20 01 inc %i0 if (*fmt == '0' ) { 40004118: d0 0e 00 00 ldub [ %i0 ], %o0 4000411c: 87 2a 20 18 sll %o0, 0x18, %g3 40004120: 83 38 e0 18 sra %g3, 0x18, %g1 40004124: 80 a0 60 30 cmp %g1, 0x30 40004128: 02 80 00 97 be 40004384 4000412c: b6 10 20 20 mov 0x20, %i3 lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40004130: 82 02 3f d0 add %o0, -48, %g1 40004134: 82 08 60 ff and %g1, 0xff, %g1 40004138: 80 a0 60 09 cmp %g1, 9 4000413c: 08 80 00 05 bleu 40004150 40004140: aa 10 20 00 clr %l5 width *= 10; width += (*fmt - '0'); fmt++; } if ((c = *fmt) == 'l') 40004144: 10 80 00 11 b 40004188 40004148: 83 38 e0 18 sra %g3, 0x18, %g1 4000414c: 87 2a 20 18 sll %o0, 0x18, %g3 <== NOT EXECUTED fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { width *= 10; width += (*fmt - '0'); fmt++; 40004150: b0 06 20 01 inc %i0 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40004154: d0 0e 00 00 ldub [ %i0 ], %o0 width *= 10; width += (*fmt - '0'); 40004158: 85 2d 60 03 sll %l5, 3, %g2 4000415c: 83 2d 60 01 sll %l5, 1, %g1 40004160: 87 38 e0 18 sra %g3, 0x18, %g3 40004164: 82 00 40 02 add %g1, %g2, %g1 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40004168: 84 02 3f d0 add %o0, -48, %g2 width *= 10; width += (*fmt - '0'); 4000416c: 82 00 40 03 add %g1, %g3, %g1 fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; } while (*fmt >= '0' && *fmt <= '9' ) { 40004170: 84 08 a0 ff and %g2, 0xff, %g2 40004174: 80 a0 a0 09 cmp %g2, 9 40004178: 08 bf ff f5 bleu 4000414c 4000417c: aa 00 7f d0 add %g1, -48, %l5 40004180: 87 2a 20 18 sll %o0, 0x18, %g3 width *= 10; width += (*fmt - '0'); fmt++; } if ((c = *fmt) == 'l') 40004184: 83 38 e0 18 sra %g3, 0x18, %g1 40004188: 80 a0 60 6c cmp %g1, 0x6c 4000418c: 22 80 00 83 be,a 40004398 40004190: b0 06 20 01 inc %i0 { lflag = 1; c = *++fmt; } switch (c) 40004194: 82 02 3f bc add %o0, -68, %g1 40004198: 82 08 60 ff and %g1, 0xff, %g1 4000419c: 80 a0 60 34 cmp %g1, 0x34 400041a0: 08 80 00 12 bleu 400041e8 400041a4: 83 28 60 02 sll %g1, 2, %g1 break; case 'c': BSP_output_char(va_arg(ap, int)); break; default: BSP_output_char(c); 400041a8: c2 07 61 34 ld [ %i5 + 0x134 ], %g1 <== NOT EXECUTED 400041ac: 91 2a 20 18 sll %o0, 0x18, %o0 <== NOT EXECUTED 400041b0: 9f c0 40 00 call %g1 <== NOT EXECUTED 400041b4: 91 3a 20 18 sra %o0, 0x18, %o0 <== NOT EXECUTED vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 400041b8: b0 06 20 01 inc %i0 <== NOT EXECUTED 400041bc: d0 0e 00 00 ldub [ %i0 ], %o0 400041c0: 91 2a 20 18 sll %o0, 0x18, %o0 400041c4: 80 a2 20 00 cmp %o0, 0 400041c8: 12 bf ff d0 bne 40004108 400041cc: 91 3a 20 18 sra %o0, 0x18, %o0 400041d0: 81 c7 e0 08 ret 400041d4: 81 e8 00 00 restore printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), base, sign, width, lead); } else { BSP_output_char(*fmt); 400041d8: 9f c0 40 00 call %g1 400041dc: 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++) 400041e0: 10 bf ff f8 b 400041c0 400041e4: d0 0e 00 00 ldub [ %i0 ], %o0 if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 400041e8: c4 06 80 01 ld [ %i2 + %g1 ], %g2 400041ec: 81 c0 80 00 jmp %g2 400041f0: 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++) 400041f4: e0 06 40 00 ld [ %i1 ], %l0 400041f8: d0 0c 00 00 ldub [ %l0 ], %o0 400041fc: 91 2a 20 18 sll %o0, 0x18, %o0 40004200: 80 a2 20 00 cmp %o0, 0 40004204: 02 bf ff ed be 400041b8 40004208: b2 06 60 04 add %i1, 4, %i1 BSP_output_char(*str); 4000420c: c2 07 61 34 ld [ %i5 + 0x134 ], %g1 40004210: 9f c0 40 00 call %g1 40004214: 91 3a 20 18 sra %o0, 0x18, %o0 case 'd': case 'D': base = 10; sign = 1; break; case 'u': case 'U': base = 10; sign = 0; break; case 'x': case 'X': base = 16; sign = 0; break; case 'p': base = 16; sign = 0; break; case 's': for (str = va_arg(ap, char *); *str; str++) 40004218: a0 04 20 01 inc %l0 4000421c: d0 0c 00 00 ldub [ %l0 ], %o0 40004220: 91 2a 20 18 sll %o0, 0x18, %o0 40004224: 80 a2 20 00 cmp %o0, 0 40004228: 12 bf ff fa bne 40004210 4000422c: c2 07 61 34 ld [ %i5 + 0x134 ], %g1 vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 40004230: 10 bf ff e3 b 400041bc 40004234: b0 06 20 01 inc %i0 break; case 'c': BSP_output_char(va_arg(ap, int)); break; default: BSP_output_char(c); 40004238: 82 10 20 00 clr %g1 4000423c: a4 10 20 10 mov 0x10, %l2 break; } /* switch*/ if (base) printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), 40004240: e2 06 40 00 ld [ %i1 ], %l1 { long unsigned int n; int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { 40004244: 80 88 60 ff btst 0xff, %g1 BSP_output_char(c); break; } /* switch*/ if (base) printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int), 40004248: b2 06 60 04 add %i1, 4, %i1 { long unsigned int n; int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { 4000424c: 02 80 00 0d be 40004280 40004250: a6 10 00 1d mov %i5, %l3 40004254: 80 a4 60 00 cmp %l1, 0 40004258: 16 80 00 0b bge 40004284 4000425c: 90 10 00 11 mov %l1, %o0 BSP_output_char('-'); 40004260: c2 07 61 34 ld [ %i5 + 0x134 ], %g1 <== NOT EXECUTED 40004264: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004268: 90 10 20 2d mov 0x2d, %o0 <== NOT EXECUTED num = -num; if (maxwidth) maxwidth--; 4000426c: 82 1d 60 00 xor %l5, 0, %g1 <== NOT EXECUTED int count; char toPrint[20]; if ( (sign == 1) && ((long)num < 0) ) { BSP_output_char('-'); num = -num; 40004270: a2 20 00 11 neg %l1 <== NOT EXECUTED if (maxwidth) maxwidth--; 40004274: 80 a0 00 01 cmp %g0, %g1 <== NOT EXECUTED 40004278: 84 40 20 00 addx %g0, 0, %g2 <== NOT EXECUTED 4000427c: aa 25 40 02 sub %l5, %g2, %l5 <== NOT EXECUTED } count = 0; while ((n = num / base) > 0) { 40004280: 90 10 00 11 mov %l1, %o0 40004284: 92 10 00 12 mov %l2, %o1 40004288: 40 00 48 36 call 40016360 <.udiv> 4000428c: a8 10 20 00 clr %l4 40004290: a0 92 20 00 orcc %o0, 0, %l0 40004294: 12 80 00 05 bne 400042a8 40004298: ae 10 00 16 mov %l6, %l7 4000429c: 10 80 00 41 b 400043a0 400042a0: a4 10 20 01 mov 1, %l2 400042a4: a0 10 00 08 mov %o0, %l0 toPrint[count++] = (num - (n*base)); 400042a8: 92 10 00 12 mov %l2, %o1 400042ac: 40 00 47 f3 call 40016278 <.umul> 400042b0: 90 10 00 10 mov %l0, %o0 400042b4: 90 24 40 08 sub %l1, %o0, %o0 num = -num; if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { 400042b8: 92 10 00 12 mov %l2, %o1 toPrint[count++] = (num - (n*base)); 400042bc: d0 2d 00 16 stb %o0, [ %l4 + %l6 ] num = -num; if (maxwidth) maxwidth--; } count = 0; while ((n = num / base) > 0) { 400042c0: 90 10 00 10 mov %l0, %o0 400042c4: 40 00 48 27 call 40016360 <.udiv> 400042c8: a8 05 20 01 inc %l4 400042cc: 80 a2 20 00 cmp %o0, 0 400042d0: 12 bf ff f5 bne 400042a4 400042d4: a2 10 00 10 mov %l0, %l1 400042d8: a4 05 20 01 add %l4, 1, %l2 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 400042dc: 84 07 bf f8 add %fp, -8, %g2 400042e0: 82 00 80 14 add %g2, %l4, %g1 400042e4: e2 28 7f ec stb %l1, [ %g1 + -20 ] for (n=maxwidth ; n > count; n-- ) 400042e8: 80 a5 40 12 cmp %l5, %l2 400042ec: 08 80 00 0a bleu 40004314 400042f0: a0 10 00 15 mov %l5, %l0 400042f4: a2 10 00 1b mov %i3, %l1 BSP_output_char(lead); 400042f8: c2 04 e1 34 ld [ %l3 + 0x134 ], %g1 400042fc: 9f c0 40 00 call %g1 40004300: 90 10 00 11 mov %l1, %o0 toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) 40004304: a0 04 3f ff add %l0, -1, %l0 40004308: 80 a4 00 12 cmp %l0, %l2 4000430c: 18 bf ff fc bgu 400042fc 40004310: c2 04 e1 34 ld [ %l3 + 0x134 ], %g1 40004314: 82 04 bf ff add %l2, -1, %g1 40004318: a2 10 20 00 clr %l1 4000431c: a0 05 c0 01 add %l7, %g1, %l0 BSP_output_char(lead); for (n = 0; n < count; n++){ BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]); 40004320: c2 4c 00 00 ldsb [ %l0 ], %g1 40004324: c4 04 e1 34 ld [ %l3 + 0x134 ], %g2 40004328: d0 4f 00 01 ldsb [ %i4 + %g1 ], %o0 4000432c: 9f c0 80 00 call %g2 40004330: a2 04 60 01 inc %l1 toPrint[count++] = num; for (n=maxwidth ; n > count; n-- ) BSP_output_char(lead); for (n = 0; n < count; n++){ 40004334: 80 a4 40 12 cmp %l1, %l2 40004338: 0a bf ff fa bcs 40004320 4000433c: a0 04 3f ff add %l0, -1, %l0 vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 40004340: 10 bf ff 9f b 400041bc 40004344: b0 06 20 01 inc %i0 case 's': for (str = va_arg(ap, char *); *str; str++) BSP_output_char(*str); break; case 'c': BSP_output_char(va_arg(ap, int)); 40004348: d0 4e 60 03 ldsb [ %i1 + 3 ], %o0 <== NOT EXECUTED 4000434c: c2 07 61 34 ld [ %i5 + 0x134 ], %g1 <== NOT EXECUTED 40004350: 9f c0 40 00 call %g1 <== NOT EXECUTED 40004354: b2 06 60 04 add %i1, 4, %i1 <== NOT EXECUTED vprintk(const char *fmt, va_list ap) { char c, *str; int lflag, base, sign, width, lead; for (; *fmt != '\0'; fmt++) 40004358: 10 bf ff 99 b 400041bc <== NOT EXECUTED 4000435c: b0 06 20 01 inc %i0 <== NOT EXECUTED } switch (c) { case 'o': case 'O': base = 8; sign = 0; break; case 'i': case 'I': case 'd': case 'D': base = 10; sign = 1; break; 40004360: 82 10 20 00 clr %g1 <== NOT EXECUTED 40004364: 10 bf ff b7 b 40004240 <== NOT EXECUTED 40004368: a4 10 20 0a mov 0xa, %l2 <== NOT EXECUTED if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; } switch (c) 4000436c: 82 10 20 00 clr %g1 <== NOT EXECUTED 40004370: 10 bf ff b4 b 40004240 <== NOT EXECUTED 40004374: a4 10 20 08 mov 8, %l2 <== NOT EXECUTED { case 'o': case 'O': base = 8; sign = 0; break; 40004378: 82 10 20 01 mov 1, %g1 4000437c: 10 bf ff b1 b 40004240 40004380: a4 10 20 0a mov 0xa, %l2 if (*fmt == '%') { fmt++; if (*fmt == '0' ) { lead = '0'; fmt++; 40004384: b0 06 20 01 inc %i0 40004388: d0 0e 00 00 ldub [ %i0 ], %o0 4000438c: b6 10 20 30 mov 0x30, %i3 40004390: 10 bf ff 68 b 40004130 40004394: 87 2a 20 18 sll %o0, 0x18, %g3 } if ((c = *fmt) == 'l') { lflag = 1; c = *++fmt; 40004398: 10 bf ff 7f b 40004194 4000439c: d0 0e 00 00 ldub [ %i0 ], %o0 count = 0; while ((n = num / base) > 0) { toPrint[count++] = (num - (n*base)); num = n ; } toPrint[count++] = num; 400043a0: 10 bf ff d0 b 400042e0 400043a4: 84 07 bf f8 add %fp, -8, %g2 40018a08 : ssize_t write( int fd, const void *buffer, size_t count ) { 40018a08: 9d e3 bf 98 save %sp, -104, %sp ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40018a0c: 03 10 00 67 sethi %hi(0x40019c00), %g1 40018a10: c4 00 60 3c ld [ %g1 + 0x3c ], %g2 ! 40019c3c ssize_t write( int fd, const void *buffer, size_t count ) { 40018a14: 92 10 00 19 mov %i1, %o1 ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); 40018a18: 80 a6 00 02 cmp %i0, %g2 40018a1c: 1a 80 00 24 bcc 40018aac 40018a20: 94 10 00 1a mov %i2, %o2 iop = rtems_libio_iop( fd ); 40018a24: 03 10 00 6a sethi %hi(0x4001a800), %g1 40018a28: c6 00 63 c8 ld [ %g1 + 0x3c8 ], %g3 ! 4001abc8 40018a2c: 85 2e 20 02 sll %i0, 2, %g2 40018a30: 83 2e 20 04 sll %i0, 4, %g1 40018a34: 82 20 40 02 sub %g1, %g2, %g1 40018a38: 82 00 40 18 add %g1, %i0, %g1 40018a3c: 83 28 60 02 sll %g1, 2, %g1 40018a40: b0 00 40 03 add %g1, %g3, %i0 rtems_libio_check_is_open(iop); 40018a44: c2 06 20 0c ld [ %i0 + 0xc ], %g1 40018a48: 80 88 61 00 btst 0x100, %g1 40018a4c: 02 80 00 18 be 40018aac 40018a50: 80 a6 60 00 cmp %i1, 0 rtems_libio_check_buffer( buffer ); 40018a54: 02 80 00 1c be 40018ac4 40018a58: 80 a6 a0 00 cmp %i2, 0 rtems_libio_check_count( count ); 40018a5c: 02 80 00 12 be 40018aa4 40018a60: 90 10 20 00 clr %o0 rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 40018a64: 80 88 60 04 btst 4, %g1 40018a68: 02 80 00 17 be 40018ac4 40018a6c: 01 00 00 00 nop /* * Now process the write() request. */ if ( !iop->handlers->write_h ) 40018a70: c2 06 20 30 ld [ %i0 + 0x30 ], %g1 40018a74: c2 00 60 0c ld [ %g1 + 0xc ], %g1 40018a78: 80 a0 60 00 cmp %g1, 0 40018a7c: 02 80 00 18 be 40018adc 40018a80: 01 00 00 00 nop rtems_set_errno_and_return_minus_one( ENOTSUP ); rc = (*iop->handlers->write_h)( iop, buffer, count ); 40018a84: 9f c0 40 00 call %g1 40018a88: 90 10 00 18 mov %i0, %o0 if ( rc > 0 ) 40018a8c: 80 a2 20 00 cmp %o0, 0 40018a90: 04 80 00 05 ble 40018aa4 40018a94: 01 00 00 00 nop iop->offset += rc; 40018a98: c2 06 20 08 ld [ %i0 + 8 ], %g1 40018a9c: 82 00 40 08 add %g1, %o0, %g1 40018aa0: c2 26 20 08 st %g1, [ %i0 + 8 ] return rc; } 40018aa4: 81 c7 e0 08 ret 40018aa8: 91 e8 00 08 restore %g0, %o0, %o0 ssize_t rc; rtems_libio_t *iop; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); 40018aac: 7f ff da 04 call 4000f2bc <__errno> <== NOT EXECUTED 40018ab0: 01 00 00 00 nop <== NOT EXECUTED 40018ab4: 82 10 20 09 mov 9, %g1 ! 9 <== NOT EXECUTED 40018ab8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018abc: 10 bf ff fa b 40018aa4 <== NOT EXECUTED 40018ac0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); rtems_libio_check_count( count ); rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE ); 40018ac4: 7f ff d9 fe call 4000f2bc <__errno> <== NOT EXECUTED 40018ac8: 01 00 00 00 nop <== NOT EXECUTED 40018acc: 82 10 20 16 mov 0x16, %g1 ! 16 <== NOT EXECUTED 40018ad0: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018ad4: 10 bf ff f4 b 40018aa4 <== NOT EXECUTED 40018ad8: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED /* * Now process the write() request. */ if ( !iop->handlers->write_h ) rtems_set_errno_and_return_minus_one( ENOTSUP ); 40018adc: 7f ff d9 f8 call 4000f2bc <__errno> <== NOT EXECUTED 40018ae0: 01 00 00 00 nop <== NOT EXECUTED 40018ae4: 82 10 20 86 mov 0x86, %g1 ! 86 <== NOT EXECUTED 40018ae8: c2 22 00 00 st %g1, [ %o0 ] <== NOT EXECUTED 40018aec: 10 bf ff ee b 40018aa4 <== NOT EXECUTED 40018af0: 90 10 3f ff mov -1, %o0 <== NOT EXECUTED