=============================================================================== 4000639c : 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 <== 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 <== 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 <== 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 <== 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 : */ 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 <== 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