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