RTEMS-5
Annotated Report
Fri Aug 10 12:46:31 2018
40006b5c <pthread_getspecific>:
ISR_Level level;
_ISR_Local_disable( level );
#endif
executing = _Thread_Executing;
40006b5c: c6 01 a0 20 ld [ %g6 + 0x20 ], %g3
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
40006b60: 91 d0 20 09 ta 9
<== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE RBTree_Node * const *_RBTree_Root_const_reference(
const RBTree_Control *the_rbtree
)
{
return &RB_ROOT( the_rbtree );
40006b64: 86 00 e1 60 add %g3, 0x160, %g3
RBTree_Node *parent;
link = _RBTree_Root_const_reference( the_rbtree );
parent = NULL;
while ( *link != NULL ) {
40006b68: c4 00 c0 00 ld [ %g3 ], %g2
40006b6c: 80 a0 a0 00 cmp %g2, 0
40006b70: 02 80 00 0d be 40006ba4 <pthread_getspecific+0x48>
<== ALWAYS TAKEN
40006b74: 86 00 bf f8 add %g2, -8, %g3
const POSIX_Keys_Key_value_pair *the_right;
the_left = left;
the_right = POSIX_KEYS_RBTREE_NODE_TO_KEY_VALUE_PAIR( right );
return *the_left == the_right->key;
40006b78: c8 00 e0 18 ld [ %g3 + 0x18 ], %g4
<== NOT EXECUTED
parent = *link;
if ( ( *equal )( key, parent ) ) {
40006b7c: 80 a2 00 04 cmp %o0, %g4
<== NOT EXECUTED
40006b80: 22 80 00 0e be,a 40006bb8 <pthread_getspecific+0x5c>
<== NOT EXECUTED
40006b84: d0 00 e0 20 ld [ %g3 + 0x20 ], %o0
<== NOT EXECUTED
return ( *map )( parent );
} else if ( ( *less )( key, parent ) ) {
40006b88: 1a bf ff f8 bcc 40006b68 <pthread_getspecific+0xc>
<== NOT EXECUTED
40006b8c: 86 00 a0 04 add %g2, 4, %g3
<== NOT EXECUTED
return &RB_LEFT( the_node, Node );
40006b90: 86 10 00 02 mov %g2, %g3
<== NOT EXECUTED
while ( *link != NULL ) {
40006b94: c4 00 c0 00 ld [ %g3 ], %g2
<== NOT EXECUTED
40006b98: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
40006b9c: 12 bf ff f7 bne 40006b78 <pthread_getspecific+0x1c>
<== NOT EXECUTED
40006ba0: 86 00 bf f8 add %g2, -8, %g3
<== NOT EXECUTED
key_value_pair = _POSIX_Keys_Key_value_find( key, executing );
if ( key_value_pair != NULL ) {
value = key_value_pair->value;
} else {
value = NULL;
40006ba4: 90 10 20 00 clr %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
40006ba8: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40006bac: 01 00 00 00 nop
}
_POSIX_Keys_Key_value_release( executing, &lock_context );
return value;
}
40006bb0: 81 c3 e0 08 retl
40006bb4: 01 00 00 00 nop
40006bb8: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40006bbc: 01 00 00 00 nop
<== NOT EXECUTED
40006bc0: 81 c3 e0 08 retl
<== NOT EXECUTED
40006bc4: 01 00 00 00 nop
<== NOT EXECUTED
40006aec <pthread_key_create>:
*/
int pthread_key_create(
pthread_key_t *key,
void (*destructor)( void * )
)
{
40006aec: 9d e3 bf a0 save %sp, -96, %sp
* the inactive chain of free keys control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Allocate( void )
{
return (POSIX_Keys_Control *) _Objects_Allocate( &_POSIX_Keys_Information );
40006af0: 3b 10 00 7d sethi %hi(0x4001f400), %i5
40006af4: 40 00 08 d6 call 40008e4c <_Objects_Allocate>
40006af8: 90 17 60 e4 or %i5, 0xe4, %o0 ! 4001f4e4 <_POSIX_Keys_Information>
POSIX_Keys_Control *the_key;
the_key = _POSIX_Keys_Allocate();
if ( !the_key ) {
40006afc: 80 a2 20 00 cmp %o0, 0
40006b00: 02 80 00 13 be 40006b4c <pthread_key_create+0x60>
<== NEVER TAKEN
40006b04: 86 02 20 14 add %o0, 0x14, %g3
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
40006b08: c2 12 20 0a lduh [ %o0 + 0xa ], %g1
tail->previous = head;
40006b0c: c6 22 20 1c st %g3, [ %o0 + 0x1c ]
return &the_chain->Tail.Node;
40006b10: 84 02 20 18 add %o0, 0x18, %g2
_Objects_Allocator_unlock();
return EAGAIN;
}
the_key->destructor = destructor;
40006b14: f2 22 20 10 st %i1, [ %o0 + 0x10 ]
40006b18: ba 17 60 e4 or %i5, 0xe4, %i5
head->next = tail;
40006b1c: c4 22 20 14 st %g2, [ %o0 + 0x14 ]
40006b20: 83 28 60 02 sll %g1, 2, %g1
head->previous = NULL;
40006b24: c0 22 20 18 clr [ %o0 + 0x18 ]
Objects_Control *the_object,
uint32_t name
)
{
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
40006b28: c0 22 20 0c clr [ %o0 + 0xc ]
information->local_table[ index ] = the_object;
40006b2c: c6 07 60 1c ld [ %i5 + 0x1c ], %g3
40006b30: c4 02 20 08 ld [ %o0 + 8 ], %g2
40006b34: d0 20 c0 01 st %o0, [ %g3 + %g1 ]
_Chain_Initialize_empty( &the_key->Key_value_pairs );
_Objects_Open_u32( &_POSIX_Keys_Information, &the_key->Object, 0 );
*key = the_key->Object.id;
40006b38: c4 26 00 00 st %g2, [ %i0 ]
* previous thread life protection state and thus may not return if the
* executing thread was restarted or deleted in the mean-time.
*/
RTEMS_INLINE_ROUTINE void _Objects_Allocator_unlock( void )
{
_RTEMS_Unlock_allocator();
40006b3c: 40 00 01 4d call 40007070 <_RTEMS_Unlock_allocator>
40006b40: b0 10 20 00 clr %i0
_Objects_Allocator_unlock();
return 0;
}
40006b44: 81 c7 e0 08 ret
40006b48: 81 e8 00 00 restore
40006b4c: 40 00 01 49 call 40007070 <_RTEMS_Unlock_allocator>
<== NOT EXECUTED
40006b50: b0 10 20 0b mov 0xb, %i0
<== NOT EXECUTED
return EAGAIN;
40006b54: 81 c7 e0 08 ret
<== NOT EXECUTED
40006b58: 81 e8 00 00 restore
<== NOT EXECUTED
40006d08 <pthread_once>:
int pthread_once(
pthread_once_t *once_control,
void (*init_routine)(void)
)
{
if ( !once_control || !init_routine )
40006d08: 80 a2 20 00 cmp %o0, 0
40006d0c: 02 80 00 07 be 40006d28 <pthread_once+0x20>
<== NEVER TAKEN
40006d10: 80 a2 60 00 cmp %o1, 0
40006d14: 02 80 00 05 be 40006d28 <pthread_once+0x20>
<== NEVER TAKEN
40006d18: 01 00 00 00 nop
return EINVAL;
return _Once( &once_control->_flags, init_routine );
40006d1c: 82 13 c0 00 mov %o7, %g1
40006d20: 40 00 09 58 call 40009280 <_Once>
40006d24: 9e 10 40 00 mov %g1, %o7
}
40006d28: 81 c3 e0 08 retl
<== NOT EXECUTED
40006d2c: 90 10 20 16 mov 0x16, %o0
<== NOT EXECUTED