=============================================================================== 40006b5c : 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 <== 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 <== 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 <== 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 <== 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 : */ 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 <== 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 : 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 <== NEVER TAKEN 40006d10: 80 a2 60 00 cmp %o1, 0 40006d14: 02 80 00 05 be 40006d28 <== 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