RTEMS-5
Annotated Report
Fri Aug 10 12:56:31 2018
4000639c <pthread_getspecific>:
ISR_Level level;
_ISR_Local_disable( level );
#endif
executing = _Thread_Executing;
4000639c: c6 01 a0 20 ld [ %g6 + 0x20 ], %g3
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400063a0: 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 );
400063a4: 86 00 e1 60 add %g3, 0x160, %g3
RBTree_Node *parent;
link = _RBTree_Root_const_reference( the_rbtree );
parent = NULL;
while ( *link != NULL ) {
400063a8: c4 00 c0 00 ld [ %g3 ], %g2
400063ac: 80 a0 a0 00 cmp %g2, 0
400063b0: 02 80 00 0d be 400063e4 <pthread_getspecific+0x48>
<== ALWAYS TAKEN
400063b4: 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;
400063b8: c8 00 e0 18 ld [ %g3 + 0x18 ], %g4
<== NOT EXECUTED
parent = *link;
if ( ( *equal )( key, parent ) ) {
400063bc: 80 a2 00 04 cmp %o0, %g4
<== NOT EXECUTED
400063c0: 22 80 00 0e be,a 400063f8 <pthread_getspecific+0x5c>
<== NOT EXECUTED
400063c4: d0 00 e0 20 ld [ %g3 + 0x20 ], %o0
<== NOT EXECUTED
return ( *map )( parent );
} else if ( ( *less )( key, parent ) ) {
400063c8: 1a bf ff f8 bcc 400063a8 <pthread_getspecific+0xc>
<== NOT EXECUTED
400063cc: 86 00 a0 04 add %g2, 4, %g3
<== NOT EXECUTED
return &RB_LEFT( the_node, Node );
400063d0: 86 10 00 02 mov %g2, %g3
<== NOT EXECUTED
while ( *link != NULL ) {
400063d4: c4 00 c0 00 ld [ %g3 ], %g2
<== NOT EXECUTED
400063d8: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
400063dc: 12 bf ff f7 bne 400063b8 <pthread_getspecific+0x1c>
<== NOT EXECUTED
400063e0: 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;
400063e4: 90 10 20 00 clr %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400063e8: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400063ec: 01 00 00 00 nop
}
_POSIX_Keys_Key_value_release( executing, &lock_context );
return value;
}
400063f0: 81 c3 e0 08 retl
400063f4: 01 00 00 00 nop
400063f8: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400063fc: 01 00 00 00 nop
<== NOT EXECUTED
40006400: 81 c3 e0 08 retl
<== NOT EXECUTED
40006404: 01 00 00 00 nop
<== NOT EXECUTED
4000632c <pthread_key_create>:
*/
int pthread_key_create(
pthread_key_t *key,
void (*destructor)( void * )
)
{
4000632c: 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 );
40006330: 3b 10 00 4f sethi %hi(0x40013c00), %i5
40006334: 40 00 0b ab call 400091e0 <_Objects_Allocate>
40006338: 90 17 61 64 or %i5, 0x164, %o0 ! 40013d64 <_POSIX_Keys_Information>
POSIX_Keys_Control *the_key;
the_key = _POSIX_Keys_Allocate();
if ( !the_key ) {
4000633c: 80 a2 20 00 cmp %o0, 0
40006340: 02 80 00 13 be 4000638c <pthread_key_create+0x60>
<== NEVER TAKEN
40006344: 86 02 20 14 add %o0, 0x14, %g3
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
40006348: c2 12 20 0a lduh [ %o0 + 0xa ], %g1
tail->previous = head;
4000634c: c6 22 20 1c st %g3, [ %o0 + 0x1c ]
return &the_chain->Tail.Node;
40006350: 84 02 20 18 add %o0, 0x18, %g2
_Objects_Allocator_unlock();
return EAGAIN;
}
the_key->destructor = destructor;
40006354: f2 22 20 10 st %i1, [ %o0 + 0x10 ]
40006358: ba 17 61 64 or %i5, 0x164, %i5
head->next = tail;
4000635c: c4 22 20 14 st %g2, [ %o0 + 0x14 ]
40006360: 83 28 60 02 sll %g1, 2, %g1
head->previous = NULL;
40006364: 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;
40006368: c0 22 20 0c clr [ %o0 + 0xc ]
information->local_table[ index ] = the_object;
4000636c: c6 07 60 1c ld [ %i5 + 0x1c ], %g3
40006370: c4 02 20 08 ld [ %o0 + 8 ], %g2
40006374: 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;
40006378: 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();
4000637c: 40 00 05 39 call 40007860 <_RTEMS_Unlock_allocator>
40006380: b0 10 20 00 clr %i0
_Objects_Allocator_unlock();
return 0;
}
40006384: 81 c7 e0 08 ret
40006388: 81 e8 00 00 restore
4000638c: 40 00 05 35 call 40007860 <_RTEMS_Unlock_allocator>
<== NOT EXECUTED
40006390: b0 10 20 0b mov 0xb, %i0
<== NOT EXECUTED
return EAGAIN;
40006394: 81 c7 e0 08 ret
<== NOT EXECUTED
40006398: 81 e8 00 00 restore
<== NOT EXECUTED