RTEMS-5
Annotated Report
Fri Aug 10 14:26:05 2018
400185c0 <_POSIX_Keys_Key_value_allocate>:
uint32_t max = Configuration.maximum_key_value_pairs;
400185c0: 03 10 00 bb sethi %hi(0x4002ec00), %g1
<== NOT EXECUTED
400185c4: c2 00 63 dc ld [ %g1 + 0x3dc ], %g1 ! 4002efdc <Configuration+0x10>
<== NOT EXECUTED
_Objects_Maximum_per_allocation( max ) : 0;
400185c8: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
400185cc: 16 80 00 05 bge 400185e0 <_POSIX_Keys_Key_value_allocate+0x20>
<== NOT EXECUTED
400185d0: 94 10 20 00 clr %o2
<== NOT EXECUTED
400185d4: 15 00 00 3f sethi %hi(0xfc00), %o2
<== NOT EXECUTED
400185d8: 94 12 a3 ff or %o2, 0x3ff, %o2 ! ffff <_Configuration_Interrupt_stack_size+0xefff>
<== NOT EXECUTED
400185dc: 94 08 40 0a and %g1, %o2, %o2
<== NOT EXECUTED
return (POSIX_Keys_Key_value_pair *) _Freechain_Get(
400185e0: 13 10 00 79 sethi %hi(0x4001e400), %o1
<== NOT EXECUTED
400185e4: 11 10 00 d2 sethi %hi(0x40034800), %o0
<== NOT EXECUTED
400185e8: 96 10 20 24 mov 0x24, %o3
<== NOT EXECUTED
400185ec: 92 12 62 04 or %o1, 0x204, %o1
<== NOT EXECUTED
400185f0: 90 12 21 fc or %o0, 0x1fc, %o0
<== NOT EXECUTED
400185f4: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
400185f8: 40 00 01 c9 call 40018d1c <_Freechain_Get>
<== NOT EXECUTED
400185fc: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
4001a1a0 <_POSIX_Threads_Sporadic_timer>:
{
4001a1a0: 9d e3 bf 78 save %sp, -136, %sp
<== NOT EXECUTED
4001a1a4: c0 27 bf f0 clr [ %fp + -16 ]
<== NOT EXECUTED
api = RTEMS_CONTAINER_OF( watchdog, POSIX_API_Control, Sporadic.Timer );
4001a1a8: ba 06 3f f8 add %i0, -8, %i5
<== NOT EXECUTED
the_thread = api->Sporadic.thread;
4001a1ac: f8 06 3f f8 ld [ %i0 + -8 ], %i4
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4001a1b0: 91 d0 20 09 ta 9
<== NOT EXECUTED
_ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
4001a1b4: c2 27 bf dc st %g1, [ %fp + -36 ]
<== NOT EXECUTED
if ( _Priority_Node_is_active( &api->Sporadic.Low_priority ) ) {
4001a1b8: c2 07 60 34 ld [ %i5 + 0x34 ], %g1
<== NOT EXECUTED
4001a1bc: 80 a0 7f ff cmp %g1, -1
<== NOT EXECUTED
4001a1c0: 02 80 00 0b be 4001a1ec <_POSIX_Threads_Sporadic_timer+0x4c>
<== NOT EXECUTED
4001a1c4: 92 07 20 20 add %i4, 0x20, %o1
<== NOT EXECUTED
_Thread_Priority_add(
4001a1c8: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
4001a1cc: 7f ff e4 37 call 400132a8 <_Thread_Priority_add>
<== NOT EXECUTED
4001a1d0: 94 07 bf dc add %fp, -36, %o2
<== NOT EXECUTED
_Thread_Priority_remove(
4001a1d4: 94 07 bf dc add %fp, -36, %o2
<== NOT EXECUTED
4001a1d8: 92 06 20 20 add %i0, 0x20, %o1
<== NOT EXECUTED
4001a1dc: 7f ff e4 38 call 400132bc <_Thread_Priority_remove>
<== NOT EXECUTED
4001a1e0: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
4001a1e4: 82 10 3f ff mov -1, %g1
<== NOT EXECUTED
4001a1e8: c2 27 60 34 st %g1, [ %i5 + 0x34 ]
<== NOT EXECUTED
_Watchdog_Per_CPU_remove_ticks( &api->Sporadic.Timer );
4001a1ec: b6 07 60 08 add %i5, 8, %i3
<== NOT EXECUTED
4001a1f0: 11 10 00 d5 sethi %hi(0x40035400), %o0
<== NOT EXECUTED
4001a1f4: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
4001a1f8: 7f ff ee ff call 40015df4 <_Watchdog_Remove>
<== NOT EXECUTED
4001a1fc: 90 12 20 78 or %o0, 0x78, %o0
<== NOT EXECUTED
Thread_Control *the_thread,
POSIX_API_Control *api
)
{
the_thread->cpu_time_budget =
_Timespec_To_ticks( &api->Sporadic.sched_ss_init_budget );
4001a200: 40 00 02 18 call 4001aa60 <_Timespec_To_ticks>
<== NOT EXECUTED
4001a204: 90 07 60 50 add %i5, 0x50, %o0
<== NOT EXECUTED
the_thread->cpu_time_budget =
4001a208: d0 27 20 8c st %o0, [ %i4 + 0x8c ]
<== NOT EXECUTED
_Watchdog_Per_CPU_insert_ticks(
4001a20c: b8 10 00 06 mov %g6, %i4
<== NOT EXECUTED
4001a210: 40 00 02 14 call 4001aa60 <_Timespec_To_ticks>
<== NOT EXECUTED
4001a214: 90 07 60 40 add %i5, 0x40, %o0
<== NOT EXECUTED
expire = ticks + cpu->Watchdog.ticks;
4001a218: d4 1f 20 30 ldd [ %i4 + 0x30 ], %o2
<== NOT EXECUTED
_Watchdog_Insert(header, the_watchdog, expire);
4001a21c: 86 82 c0 08 addcc %o3, %o0, %g3
<== NOT EXECUTED
4001a220: 84 42 a0 00 addx %o2, 0, %g2
<== NOT EXECUTED
4001a224: 96 10 00 03 mov %g3, %o3
<== NOT EXECUTED
4001a228: 94 10 00 02 mov %g2, %o2
<== NOT EXECUTED
4001a22c: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
4001a230: 7f ff ee c9 call 40015d54 <_Watchdog_Insert>
<== NOT EXECUTED
4001a234: 90 07 20 38 add %i4, 0x38, %o0
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
4001a238: c2 07 bf dc ld [ %fp + -36 ], %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4001a23c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4001a240: 01 00 00 00 nop
<== NOT EXECUTED
_Thread_Priority_update( &queue_context );
4001a244: 7f ff e4 2a call 400132ec <_Thread_Priority_update>
<== NOT EXECUTED
4001a248: 90 07 bf dc add %fp, -36, %o0
<== NOT EXECUTED
}
4001a24c: 81 c7 e0 08 ret
<== NOT EXECUTED
4001a250: 81 e8 00 00 restore
<== NOT EXECUTED
4002c9ec <_POSIX_signals_Abnormal_termination_handler>:
sigset_t _POSIX_signals_Pending;
void _POSIX_signals_Abnormal_termination_handler(
int signo RTEMS_UNUSED )
{
4002c9ec: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
exit( 1 );
4002c9f0: 40 00 01 c7 call 4002d10c <exit>
<== NOT EXECUTED
4002c9f4: 90 10 20 01 mov 1, %o0
<== NOT EXECUTED
4002c9f8: 01 00 00 00 nop
<== NOT EXECUTED
4002d0a4 <_POSIX_signals_Clear_process_signals>:
_Assert( _ISR_Get_level() != 0 );
clear_signal = true;
mask = signo_to_mask( signo );
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
4002d0a4: 83 2a 20 01 sll %o0, 1, %g1
<== NOT EXECUTED
4002d0a8: 05 10 00 d5 sethi %hi(0x40035400), %g2
<== NOT EXECUTED
4002d0ac: 82 00 40 08 add %g1, %o0, %g1
<== NOT EXECUTED
4002d0b0: 84 10 a3 e8 or %g2, 0x3e8, %g2
<== NOT EXECUTED
4002d0b4: 83 28 60 02 sll %g1, 2, %g1
<== NOT EXECUTED
4002d0b8: c4 00 80 01 ld [ %g2 + %g1 ], %g2
<== NOT EXECUTED
4002d0bc: 90 02 3f ff add %o0, -1, %o0
<== NOT EXECUTED
4002d0c0: 80 a0 a0 02 cmp %g2, 2
<== NOT EXECUTED
4002d0c4: 84 10 20 01 mov 1, %g2
<== NOT EXECUTED
4002d0c8: 02 80 00 07 be 4002d0e4 <_POSIX_signals_Clear_process_signals+0x40>
<== NOT EXECUTED
4002d0cc: 91 28 80 08 sll %g2, %o0, %o0
<== NOT EXECUTED
if ( !_Chain_Is_empty( &_POSIX_signals_Siginfo[ signo ] ) )
clear_signal = false;
}
if ( clear_signal ) {
_POSIX_signals_Pending &= ~mask;
4002d0d0: 03 10 00 d6 sethi %hi(0x40035800), %g1
<== NOT EXECUTED
4002d0d4: c4 00 61 74 ld [ %g1 + 0x174 ], %g2 ! 40035974 <_POSIX_signals_Pending>
<== NOT EXECUTED
4002d0d8: 90 28 80 08 andn %g2, %o0, %o0
<== NOT EXECUTED
}
}
4002d0dc: 81 c3 e0 08 retl
<== NOT EXECUTED
4002d0e0: d0 20 61 74 st %o0, [ %g1 + 0x174 ]
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4002d0e4: 05 10 00 d6 sethi %hi(0x40035800), %g2
<== NOT EXECUTED
4002d0e8: 84 10 a1 78 or %g2, 0x178, %g2 ! 40035978 <_POSIX_signals_Siginfo>
<== NOT EXECUTED
if ( !_Chain_Is_empty( &_POSIX_signals_Siginfo[ signo ] ) )
4002d0ec: c6 00 80 01 ld [ %g2 + %g1 ], %g3
<== NOT EXECUTED
return &the_chain->Tail.Node;
4002d0f0: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
4002d0f4: 82 00 40 02 add %g1, %g2, %g1
<== NOT EXECUTED
4002d0f8: 80 a0 c0 01 cmp %g3, %g1
<== NOT EXECUTED
4002d0fc: 02 bf ff f6 be 4002d0d4 <_POSIX_signals_Clear_process_signals+0x30>
<== NOT EXECUTED
4002d100: 03 10 00 d6 sethi %hi(0x40035800), %g1
<== NOT EXECUTED
}
4002d104: 81 c3 e0 08 retl
<== NOT EXECUTED
4002d108: 01 00 00 00 nop
<== NOT EXECUTED
4002cf50 <_POSIX_signals_Clear_signals>:
siginfo_t *info,
bool is_global,
bool check_blocked,
bool do_signals_acquire_release
)
{
4002cf50: 9d e3 bf 98 save %sp, -104, %sp
<== NOT EXECUTED
4002cf54: 84 10 20 01 mov 1, %g2
<== NOT EXECUTED
4002cf58: 86 06 7f ff add %i1, -1, %g3
<== NOT EXECUTED
*/
if ( check_blocked )
signals_unblocked = api->signals_unblocked;
else
signals_unblocked = SIGNAL_ALL_MASK;
4002cf5c: 88 10 3f ff mov -1, %g4
<== NOT EXECUTED
if ( check_blocked )
4002cf60: 80 a7 20 00 cmp %i4, 0
<== NOT EXECUTED
4002cf64: 02 80 00 03 be 4002cf70 <_POSIX_signals_Clear_signals+0x20>
<== NOT EXECUTED
4002cf68: 85 28 80 03 sll %g2, %g3, %g2
<== NOT EXECUTED
signals_unblocked = api->signals_unblocked;
4002cf6c: c8 06 20 68 ld [ %i0 + 0x68 ], %g4
<== NOT EXECUTED
/* XXX is this right for siginfo type signals? */
/* XXX are we sure they can be cleared the same way? */
if ( do_signals_acquire_release ) {
4002cf70: 80 a7 60 00 cmp %i5, 0
<== NOT EXECUTED
4002cf74: 02 80 00 04 be 4002cf84 <_POSIX_signals_Clear_signals+0x34>
<== NOT EXECUTED
4002cf78: 80 a6 e0 00 cmp %i3, 0
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002cf7c: 91 d0 20 09 ta 9
<== NOT EXECUTED
_Thread_queue_Context_initialize( &queue_context );
_POSIX_signals_Acquire( &queue_context );
}
if ( is_global ) {
4002cf80: 80 a6 e0 00 cmp %i3, 0
<== NOT EXECUTED
4002cf84: 22 80 00 10 be,a 4002cfc4 <_POSIX_signals_Clear_signals+0x74>
<== NOT EXECUTED
4002cf88: f8 06 20 6c ld [ %i0 + 0x6c ], %i4
<== NOT EXECUTED
if ( mask & (_POSIX_signals_Pending & signals_unblocked) ) {
4002cf8c: 07 10 00 d6 sethi %hi(0x40035800), %g3
<== NOT EXECUTED
4002cf90: c6 00 e1 74 ld [ %g3 + 0x174 ], %g3 ! 40035974 <_POSIX_signals_Pending>
<== NOT EXECUTED
4002cf94: 84 08 80 03 and %g2, %g3, %g2
<== NOT EXECUTED
4002cf98: 80 88 80 04 btst %g2, %g4
<== NOT EXECUTED
4002cf9c: 12 80 00 12 bne 4002cfe4 <_POSIX_signals_Clear_signals+0x94>
<== NOT EXECUTED
4002cfa0: 86 10 20 00 clr %g3
<== NOT EXECUTED
api->signals_pending &= ~mask;
do_callout = true;
}
}
if ( do_signals_acquire_release ) {
4002cfa4: 80 a7 60 00 cmp %i5, 0
<== NOT EXECUTED
4002cfa8: 22 80 00 05 be,a 4002cfbc <_POSIX_signals_Clear_signals+0x6c>
<== NOT EXECUTED
4002cfac: b0 08 e0 01 and %g3, 1, %i0
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002cfb0: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002cfb4: 01 00 00 00 nop
<== NOT EXECUTED
_POSIX_signals_Release( &queue_context );
}
return do_callout;
}
4002cfb8: b0 08 e0 01 and %g3, 1, %i0
<== NOT EXECUTED
4002cfbc: 81 c7 e0 08 ret
<== NOT EXECUTED
4002cfc0: 81 e8 00 00 restore
<== NOT EXECUTED
if ( mask & (api->signals_pending & signals_unblocked) ) {
4002cfc4: b6 0f 00 02 and %i4, %g2, %i3
<== NOT EXECUTED
4002cfc8: 80 8e c0 04 btst %i3, %g4
<== NOT EXECUTED
4002cfcc: 02 bf ff f6 be 4002cfa4 <_POSIX_signals_Clear_signals+0x54>
<== NOT EXECUTED
4002cfd0: 86 10 20 00 clr %g3
<== NOT EXECUTED
api->signals_pending &= ~mask;
4002cfd4: 84 2f 00 02 andn %i4, %g2, %g2
<== NOT EXECUTED
do_callout = true;
4002cfd8: 86 10 20 01 mov 1, %g3
<== NOT EXECUTED
api->signals_pending &= ~mask;
4002cfdc: 10 bf ff f2 b 4002cfa4 <_POSIX_signals_Clear_signals+0x54>
<== NOT EXECUTED
4002cfe0: c4 26 20 6c st %g2, [ %i0 + 0x6c ]
<== NOT EXECUTED
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
4002cfe4: 85 2e 60 01 sll %i1, 1, %g2
<== NOT EXECUTED
4002cfe8: 07 10 00 d5 sethi %hi(0x40035400), %g3
<== NOT EXECUTED
4002cfec: 84 00 80 19 add %g2, %i1, %g2
<== NOT EXECUTED
4002cff0: 86 10 e3 e8 or %g3, 0x3e8, %g3
<== NOT EXECUTED
4002cff4: 85 28 a0 02 sll %g2, 2, %g2
<== NOT EXECUTED
4002cff8: c6 00 c0 02 ld [ %g3 + %g2 ], %g3
<== NOT EXECUTED
4002cffc: 80 a0 e0 02 cmp %g3, 2
<== NOT EXECUTED
4002d000: 22 80 00 08 be,a 4002d020 <_POSIX_signals_Clear_signals+0xd0>
<== NOT EXECUTED
4002d004: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
4002d008: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
_POSIX_signals_Clear_process_signals( signo );
4002d00c: 40 00 00 26 call 4002d0a4 <_POSIX_signals_Clear_process_signals>
<== NOT EXECUTED
4002d010: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
do_callout = true;
4002d014: 86 10 20 01 mov 1, %g3
<== NOT EXECUTED
4002d018: 10 bf ff e3 b 4002cfa4 <_POSIX_signals_Clear_signals+0x54>
<== NOT EXECUTED
4002d01c: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
_Chain_Get_unprotected( &_POSIX_signals_Siginfo[ signo ] );
4002d020: 07 10 00 d6 sethi %hi(0x40035800), %g3
<== NOT EXECUTED
4002d024: 86 10 e1 78 or %g3, 0x178, %g3 ! 40035978 <_POSIX_signals_Siginfo>
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4002d028: f8 00 80 03 ld [ %g2 + %g3 ], %i4
<== NOT EXECUTED
return &the_chain->Tail.Node;
4002d02c: 88 00 a0 04 add %g2, 4, %g4
<== NOT EXECUTED
4002d030: 88 01 00 03 add %g4, %g3, %g4
<== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
4002d034: 80 a7 00 04 cmp %i4, %g4
<== NOT EXECUTED
4002d038: 02 80 00 17 be 4002d094 <_POSIX_signals_Clear_signals+0x144>
<== NOT EXECUTED
4002d03c: b6 00 80 03 add %g2, %g3, %i3
<== NOT EXECUTED
new_first = old_first->next;
4002d040: c8 07 00 00 ld [ %i4 ], %g4
<== NOT EXECUTED
head->next = new_first;
4002d044: c8 20 80 03 st %g4, [ %g2 + %g3 ]
<== NOT EXECUTED
_POSIX_signals_Clear_process_signals( signo );
4002d048: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
4002d04c: 40 00 00 16 call 4002d0a4 <_POSIX_signals_Clear_process_signals>
<== NOT EXECUTED
4002d050: f6 21 20 04 st %i3, [ %g4 + 4 ]
<== NOT EXECUTED
*info = psiginfo->Info;
4002d054: c4 07 20 08 ld [ %i4 + 8 ], %g2
<== NOT EXECUTED
4002d058: c4 26 80 00 st %g2, [ %i2 ]
<== NOT EXECUTED
4002d05c: c4 07 20 0c ld [ %i4 + 0xc ], %g2
<== NOT EXECUTED
4002d060: c4 26 a0 04 st %g2, [ %i2 + 4 ]
<== NOT EXECUTED
old_last = tail->previous;
4002d064: 05 10 00 d6 sethi %hi(0x40035800), %g2
<== NOT EXECUTED
4002d068: c6 07 20 10 ld [ %i4 + 0x10 ], %g3
<== NOT EXECUTED
4002d06c: c6 26 a0 08 st %g3, [ %i2 + 8 ]
<== NOT EXECUTED
4002d070: 84 10 a1 68 or %g2, 0x168, %g2
<== NOT EXECUTED
4002d074: c6 00 a0 08 ld [ %g2 + 8 ], %g3
<== NOT EXECUTED
the_node->next = tail;
4002d078: 88 00 a0 04 add %g2, 4, %g4
<== NOT EXECUTED
4002d07c: c8 27 00 00 st %g4, [ %i4 ]
<== NOT EXECUTED
tail->previous = the_node;
4002d080: f8 20 a0 08 st %i4, [ %g2 + 8 ]
<== NOT EXECUTED
old_last->next = the_node;
4002d084: f8 20 c0 00 st %i4, [ %g3 ]
<== NOT EXECUTED
the_node->previous = old_last;
4002d088: c6 27 20 04 st %g3, [ %i4 + 4 ]
<== NOT EXECUTED
4002d08c: 10 bf ff df b 4002d008 <_POSIX_signals_Clear_signals+0xb8>
<== NOT EXECUTED
4002d090: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
_POSIX_signals_Clear_process_signals( signo );
4002d094: 40 00 00 04 call 4002d0a4 <_POSIX_signals_Clear_process_signals>
<== NOT EXECUTED
4002d098: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
4002d09c: 10 bf ff db b 4002d008 <_POSIX_signals_Clear_signals+0xb8>
<== NOT EXECUTED
4002d0a0: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
400317b0 <_POSIX_signals_Default_vectors>:
400317b0: 00 00 00 00 ff ff ff ff 00 00 00 01 00 00 00 00 ................
400317c0: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
400317d0: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
400317e0: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
400317f0: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
40031800: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
40031810: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
40031820: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
40031830: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
40031840: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
40031850: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
40031860: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
40031870: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
40031880: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
40031890: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
400318a0: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
400318b0: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
400318c0: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
400318d0: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
400318e0: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
400318f0: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
40031900: 00 00 00 00 ff ff ff ff 40 02 c9 ec 00 00 00 00 ........@.......
40031910: ff ff ff ff 40 02 c9 ec 00 00 00 00 ff ff ff ff ....@...........
40031920: 40 02 c9 ec 00 00 00 00 ff ff ff ff 40 02 c9 ec @...........@...
4002c5bc <_POSIX_signals_Send>:
int _POSIX_signals_Send(
pid_t pid,
int sig,
const union sigval *value
)
{
4002c5bc: 9d e3 bf 88 save %sp, -120, %sp
<== NOT EXECUTED
Per_CPU_Control *cpu_self;
/*
* Only supported for the "calling process" (i.e. this node).
*/
if ( pid != getpid() )
4002c5c0: 7f ff fe ba call 4002c0a8 <getpid>
<== NOT EXECUTED
4002c5c4: 01 00 00 00 nop
<== NOT EXECUTED
4002c5c8: 80 a2 00 18 cmp %o0, %i0
<== NOT EXECUTED
4002c5cc: 12 80 00 e7 bne 4002c968 <_POSIX_signals_Send+0x3ac>
<== NOT EXECUTED
4002c5d0: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ESRCH );
/*
* Validate the signal passed.
*/
if ( !sig )
4002c5d4: 02 80 00 df be 4002c950 <_POSIX_signals_Send+0x394>
<== NOT EXECUTED
4002c5d8: b8 06 7f ff add %i1, -1, %i4
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
4002c5dc: 80 a7 20 1f cmp %i4, 0x1f
<== NOT EXECUTED
4002c5e0: 18 80 00 dc bgu 4002c950 <_POSIX_signals_Send+0x394>
<== NOT EXECUTED
4002c5e4: bb 2e 60 01 sll %i1, 1, %i5
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
/*
* If the signal is being ignored, then we are out of here.
*/
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN )
4002c5e8: 37 10 00 d5 sethi %hi(0x40035400), %i3
<== NOT EXECUTED
4002c5ec: ba 07 40 19 add %i5, %i1, %i5
<== NOT EXECUTED
4002c5f0: b6 16 e3 e8 or %i3, 0x3e8, %i3
<== NOT EXECUTED
4002c5f4: 83 2f 60 02 sll %i5, 2, %g1
<== NOT EXECUTED
4002c5f8: 82 06 c0 01 add %i3, %g1, %g1
<== NOT EXECUTED
4002c5fc: c2 00 60 08 ld [ %g1 + 8 ], %g1
<== NOT EXECUTED
4002c600: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
4002c604: 02 80 00 56 be 4002c75c <_POSIX_signals_Send+0x1a0>
<== NOT EXECUTED
4002c608: b0 10 20 00 clr %i0
<== NOT EXECUTED
/*
* P1003.1c/Draft 10, p. 33 says that certain signals should always
* be directed to the executing thread such as those caused by hardware
* faults.
*/
if ( (sig == SIGFPE) || (sig == SIGILL) || (sig == SIGSEGV ) )
4002c60c: 82 06 7f fc add %i1, -4, %g1
<== NOT EXECUTED
4002c610: 80 88 7f fb btst -5, %g1
<== NOT EXECUTED
4002c614: 02 80 00 46 be 4002c72c <_POSIX_signals_Send+0x170>
<== NOT EXECUTED
4002c618: 80 a6 60 0b cmp %i1, 0xb
<== NOT EXECUTED
4002c61c: 02 80 00 44 be 4002c72c <_POSIX_signals_Send+0x170>
<== NOT EXECUTED
4002c620: 82 10 20 01 mov 1, %g1
<== NOT EXECUTED
/*
* Build up a siginfo structure
*/
siginfo = &siginfo_struct;
siginfo->si_signo = sig;
4002c624: f2 27 bf f4 st %i1, [ %fp + -12 ]
<== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
4002c628: b9 28 40 1c sll %g1, %i4, %i4
<== NOT EXECUTED
siginfo->si_code = SI_USER;
if ( !value ) {
4002c62c: 80 a6 a0 00 cmp %i2, 0
<== NOT EXECUTED
4002c630: 02 80 00 99 be 4002c894 <_POSIX_signals_Send+0x2d8>
<== NOT EXECUTED
4002c634: c2 27 bf f8 st %g1, [ %fp + -8 ]
<== NOT EXECUTED
siginfo->si_value.sival_int = 0;
} else {
siginfo->si_value = *value;
4002c638: c2 06 80 00 ld [ %i2 ], %g1
<== NOT EXECUTED
4002c63c: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
4002c640: b4 10 00 06 mov %g6, %i2
<== NOT EXECUTED
disable_level = cpu_self->thread_dispatch_disable_level;
4002c644: c2 01 a0 18 ld [ %g6 + 0x18 ], %g1
<== NOT EXECUTED
return cpu->executing;
4002c648: d0 01 a0 20 ld [ %g6 + 0x20 ], %o0
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level + 1;
4002c64c: 82 00 60 01 inc %g1
<== NOT EXECUTED
* get it an execute it as soon as the dispatcher executes.
*/
the_thread = _Per_CPU_Get_executing( cpu_self );
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
if ( _POSIX_signals_Is_interested( api, mask ) ) {
4002c650: c4 02 21 5c ld [ %o0 + 0x15c ], %g2
<== NOT EXECUTED
4002c654: c2 21 a0 18 st %g1, [ %g6 + 0x18 ]
<== NOT EXECUTED
4002c658: c2 00 a0 68 ld [ %g2 + 0x68 ], %g1
<== NOT EXECUTED
4002c65c: 80 8f 00 01 btst %i4, %g1
<== NOT EXECUTED
4002c660: 12 80 00 1a bne 4002c6c8 <_POSIX_signals_Send+0x10c>
<== NOT EXECUTED
4002c664: 03 10 00 cc sethi %hi(0x40033000), %g1
<== NOT EXECUTED
* There is no requirement on the order of threads pending on a sigwait().
*/
/* XXX violation of visibility -- need to define thread queue support */
heads = _POSIX_signals_Wait_queue.Queue.heads;
4002c668: c4 00 62 48 ld [ %g1 + 0x248 ], %g2 ! 40033248 <_POSIX_signals_Wait_queue>
<== NOT EXECUTED
if ( heads != NULL ) {
4002c66c: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002c670: 02 80 00 3d be 4002c764 <_POSIX_signals_Send+0x1a8>
<== NOT EXECUTED
4002c674: 17 10 00 bb sethi %hi(0x4002ec00), %o3
<== NOT EXECUTED
4002c678: c2 00 80 00 ld [ %g2 ], %g1
<== NOT EXECUTED
return &the_chain->Tail.Node;
4002c67c: 84 00 a0 04 add %g2, 4, %g2
<== NOT EXECUTED
Chain_Control *the_chain = &heads->Heads.Fifo;
for ( the_node = _Chain_First( the_chain );
4002c680: 80 a0 40 02 cmp %g1, %g2
<== NOT EXECUTED
4002c684: 32 80 00 0d bne,a 4002c6b8 <_POSIX_signals_Send+0xfc>
<== NOT EXECUTED
4002c688: d0 00 7f f8 ld [ %g1 + -8 ], %o0
<== NOT EXECUTED
4002c68c: 10 80 00 37 b 4002c768 <_POSIX_signals_Send+0x1ac>
<== NOT EXECUTED
4002c690: 9e 10 3f ff mov -1, %o7
<== NOT EXECUTED
/*
* Is this thread is blocked waiting for another signal but has
* not blocked this one?
*/
if (api->signals_unblocked & mask)
4002c694: c6 01 20 68 ld [ %g4 + 0x68 ], %g3
<== NOT EXECUTED
4002c698: 80 8f 00 03 btst %i4, %g3
<== NOT EXECUTED
4002c69c: 12 80 00 0c bne 4002c6cc <_POSIX_signals_Send+0x110>
<== NOT EXECUTED
4002c6a0: 94 07 bf f4 add %fp, -12, %o2
<== NOT EXECUTED
the_node = the_node->next ) {
4002c6a4: c2 00 40 00 ld [ %g1 ], %g1
<== NOT EXECUTED
for ( the_node = _Chain_First( the_chain );
4002c6a8: 80 a0 40 02 cmp %g1, %g2
<== NOT EXECUTED
4002c6ac: 02 80 00 2e be 4002c764 <_POSIX_signals_Send+0x1a8>
<== NOT EXECUTED
4002c6b0: 17 10 00 bb sethi %hi(0x4002ec00), %o3
<== NOT EXECUTED
4002c6b4: d0 00 7f f8 ld [ %g1 + -8 ], %o0
<== NOT EXECUTED
if (the_thread->Wait.option & mask)
4002c6b8: c6 02 20 48 ld [ %o0 + 0x48 ], %g3
<== NOT EXECUTED
4002c6bc: 80 8f 00 03 btst %i4, %g3
<== NOT EXECUTED
4002c6c0: 02 bf ff f5 be 4002c694 <_POSIX_signals_Send+0xd8>
<== NOT EXECUTED
4002c6c4: c8 02 21 5c ld [ %o0 + 0x15c ], %g4
<== NOT EXECUTED
/*
* Returns true if the signal was synchronously given to a thread
* blocked waiting for the signal.
*/
if ( _POSIX_signals_Unblock_thread( the_thread, sig, siginfo ) ) {
4002c6c8: 94 07 bf f4 add %fp, -12, %o2
<== NOT EXECUTED
4002c6cc: 40 00 01 60 call 4002cc4c <_POSIX_signals_Unblock_thread>
<== NOT EXECUTED
4002c6d0: 92 10 00 19 mov %i1, %o1
<== NOT EXECUTED
4002c6d4: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4002c6d8: 12 80 00 1b bne 4002c744 <_POSIX_signals_Send+0x188>
<== NOT EXECUTED
4002c6dc: 01 00 00 00 nop
<== NOT EXECUTED
/*
* We may have woken up a thread but we definitely need to post the
* signal to the process wide information set.
*/
_POSIX_signals_Set_process_signals( mask );
4002c6e0: 40 00 00 f0 call 4002caa0 <_POSIX_signals_Set_process_signals>
<== NOT EXECUTED
4002c6e4: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002c6e8: 91 d0 20 09 ta 9
<== NOT EXECUTED
return psr;
4002c6ec: 86 10 00 01 mov %g1, %g3
<== NOT EXECUTED
_Thread_queue_Context_initialize( &queue_context );
_POSIX_signals_Acquire( &queue_context );
if ( _POSIX_signals_Vectors[ sig ].sa_flags == SA_SIGINFO ) {
4002c6f0: bb 2f 60 02 sll %i5, 2, %i5
<== NOT EXECUTED
4002c6f4: c4 06 c0 1d ld [ %i3 + %i5 ], %g2
<== NOT EXECUTED
4002c6f8: 80 a0 a0 02 cmp %g2, 2
<== NOT EXECUTED
4002c6fc: 02 80 00 6c be 4002c8ac <_POSIX_signals_Send+0x2f0>
<== NOT EXECUTED
4002c700: 09 10 00 d6 sethi %hi(0x40035800), %g4
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
4002c704: 82 10 00 03 mov %g3, %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002c708: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002c70c: 01 00 00 00 nop
<== NOT EXECUTED
uint32_t disable_level = cpu_self->thread_dispatch_disable_level;
4002c710: c2 06 a0 18 ld [ %i2 + 0x18 ], %g1
<== NOT EXECUTED
if ( disable_level == 1 ) {
4002c714: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
4002c718: 02 80 00 7f be 4002c914 <_POSIX_signals_Send+0x358>
<== NOT EXECUTED
4002c71c: 82 00 7f ff add %g1, -1, %g1
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level - 1;
4002c720: c2 26 a0 18 st %g1, [ %i2 + 0x18 ]
<== NOT EXECUTED
_POSIX_signals_Release( &queue_context );
DEBUG_STEP("\n");
_Thread_Dispatch_enable( cpu_self );
return 0;
}
4002c724: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c728: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
return pthread_kill( pthread_self(), sig );
4002c72c: 40 00 01 f9 call 4002cf10 <pthread_self>
<== NOT EXECUTED
4002c730: 01 00 00 00 nop
<== NOT EXECUTED
4002c734: 40 00 01 b5 call 4002ce08 <pthread_kill>
<== NOT EXECUTED
4002c738: 92 10 00 19 mov %i1, %o1
<== NOT EXECUTED
4002c73c: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c740: 91 e8 00 08 restore %g0, %o0, %o0
<== NOT EXECUTED
uint32_t disable_level = cpu_self->thread_dispatch_disable_level;
4002c744: c2 06 a0 18 ld [ %i2 + 0x18 ], %g1
<== NOT EXECUTED
if ( disable_level == 1 ) {
4002c748: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
4002c74c: 02 80 00 72 be 4002c914 <_POSIX_signals_Send+0x358>
<== NOT EXECUTED
4002c750: 82 00 7f ff add %g1, -1, %g1
<== NOT EXECUTED
return 0;
4002c754: b0 10 20 00 clr %i0
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level - 1;
4002c758: c2 26 a0 18 st %g1, [ %i2 + 0x18 ]
<== NOT EXECUTED
4002c75c: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c760: 81 e8 00 00 restore
<== NOT EXECUTED
for ( the_node = _Chain_First( the_chain );
4002c764: 9e 10 3f ff mov -1, %o7
<== NOT EXECUTED
4002c768: 94 10 3f ff mov -1, %o2
<== NOT EXECUTED
4002c76c: 90 10 20 00 clr %o0
<== NOT EXECUTED
4002c770: 98 10 20 02 mov 2, %o4
<== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _States_Is_interruptible_by_signal (
States_Control the_states
)
{
return (the_states & STATES_INTERRUPTIBLE_BY_SIGNAL);
4002c774: 13 04 00 00 sethi %hi(0x10000000), %o1
<== NOT EXECUTED
4002c778: 96 12 e2 f0 or %o3, 0x2f0, %o3
<== NOT EXECUTED
if ( !_Objects_Information_table[ the_api ] )
4002c77c: 83 2b 20 02 sll %o4, 2, %g1
<== NOT EXECUTED
4002c780: c2 02 c0 01 ld [ %o3 + %g1 ], %g1
<== NOT EXECUTED
4002c784: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
4002c788: 02 80 00 39 be 4002c86c <_POSIX_signals_Send+0x2b0>
<== NOT EXECUTED
4002c78c: 80 a3 20 03 cmp %o4, 3
<== NOT EXECUTED
the_info = _Objects_Information_table[ the_api ][ 1 ];
4002c790: c2 00 60 04 ld [ %g1 + 4 ], %g1
<== NOT EXECUTED
if ( !the_info )
4002c794: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
4002c798: 02 80 00 35 be 4002c86c <_POSIX_signals_Send+0x2b0>
<== NOT EXECUTED
4002c79c: 80 a3 20 03 cmp %o4, 3
<== NOT EXECUTED
maximum = the_info->maximum;
4002c7a0: f0 10 60 10 lduh [ %g1 + 0x10 ], %i0
<== NOT EXECUTED
for ( index = 1 ; index <= maximum ; index++ ) {
4002c7a4: 80 a6 20 00 cmp %i0, 0
<== NOT EXECUTED
4002c7a8: 02 80 00 30 be 4002c868 <_POSIX_signals_Send+0x2ac>
<== NOT EXECUTED
4002c7ac: c2 00 60 1c ld [ %g1 + 0x1c ], %g1
<== NOT EXECUTED
4002c7b0: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
4002c7b4: b1 2e 20 02 sll %i0, 2, %i0
<== NOT EXECUTED
4002c7b8: b0 06 00 01 add %i0, %g1, %i0
<== NOT EXECUTED
the_thread = (Thread_Control *) object_table[ index ];
4002c7bc: c4 00 40 00 ld [ %g1 ], %g2
<== NOT EXECUTED
if ( !the_thread )
4002c7c0: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002c7c4: 22 80 00 26 be,a 4002c85c <_POSIX_signals_Send+0x2a0>
<== NOT EXECUTED
4002c7c8: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
4002c7cc: c6 00 a0 38 ld [ %g2 + 0x38 ], %g3
<== NOT EXECUTED
4002c7d0: c8 00 e0 18 ld [ %g3 + 0x18 ], %g4
<== NOT EXECUTED
if ( _Thread_Get_priority( the_thread ) > interested_priority )
4002c7d4: 80 a1 00 0f cmp %g4, %o7
<== NOT EXECUTED
4002c7d8: 18 80 00 20 bgu 4002c858 <_POSIX_signals_Send+0x29c>
<== NOT EXECUTED
4002c7dc: c6 00 e0 1c ld [ %g3 + 0x1c ], %g3
<== NOT EXECUTED
4002c7e0: 02 80 00 29 be 4002c884 <_POSIX_signals_Send+0x2c8>
<== NOT EXECUTED
4002c7e4: 80 a0 c0 0a cmp %g3, %o2
<== NOT EXECUTED
if ( !_POSIX_signals_Is_interested( api, mask ) )
4002c7e8: da 00 a1 5c ld [ %g2 + 0x15c ], %o5
<== NOT EXECUTED
4002c7ec: da 03 60 68 ld [ %o5 + 0x68 ], %o5
<== NOT EXECUTED
4002c7f0: 80 8f 00 0d btst %i4, %o5
<== NOT EXECUTED
4002c7f4: 02 80 00 19 be 4002c858 <_POSIX_signals_Send+0x29c>
<== NOT EXECUTED
4002c7f8: 80 a3 c0 04 cmp %o7, %g4
<== NOT EXECUTED
if ( _Thread_Get_priority( the_thread ) < interested_priority ) {
4002c7fc: 38 80 00 15 bgu,a 4002c850 <_POSIX_signals_Send+0x294>
<== NOT EXECUTED
4002c800: 9e 10 00 04 mov %g4, %o7
<== NOT EXECUTED
4002c804: 02 80 00 26 be 4002c89c <_POSIX_signals_Send+0x2e0>
<== NOT EXECUTED
4002c808: 80 a2 80 03 cmp %o2, %g3
<== NOT EXECUTED
if ( interested && !_States_Is_ready( interested->current_state ) ) {
4002c80c: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4002c810: 22 80 00 13 be,a 4002c85c <_POSIX_signals_Send+0x2a0>
<== NOT EXECUTED
4002c814: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
4002c818: da 02 20 1c ld [ %o0 + 0x1c ], %o5
<== NOT EXECUTED
4002c81c: 80 a3 60 00 cmp %o5, 0
<== NOT EXECUTED
4002c820: 22 80 00 0f be,a 4002c85c <_POSIX_signals_Send+0x2a0>
<== NOT EXECUTED
4002c824: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
if ( _States_Is_ready( the_thread->current_state ) ) {
4002c828: e0 00 a0 1c ld [ %g2 + 0x1c ], %l0
<== NOT EXECUTED
4002c82c: 80 a4 20 00 cmp %l0, 0
<== NOT EXECUTED
4002c830: 02 80 00 07 be 4002c84c <_POSIX_signals_Send+0x290>
<== NOT EXECUTED
4002c834: 80 8b 40 09 btst %o5, %o1
<== NOT EXECUTED
if ( !_States_Is_interruptible_by_signal(interested->current_state) ) {
4002c838: 32 80 00 09 bne,a 4002c85c <_POSIX_signals_Send+0x2a0>
<== NOT EXECUTED
4002c83c: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
if ( _States_Is_interruptible_by_signal(the_thread->current_state) ) {
4002c840: 80 8c 00 09 btst %l0, %o1
<== NOT EXECUTED
4002c844: 22 80 00 06 be,a 4002c85c <_POSIX_signals_Send+0x2a0>
<== NOT EXECUTED
4002c848: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
4002c84c: 9e 10 00 04 mov %g4, %o7
<== NOT EXECUTED
4002c850: 94 10 00 03 mov %g3, %o2
<== NOT EXECUTED
4002c854: 90 10 00 02 mov %g2, %o0
<== NOT EXECUTED
4002c858: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
for ( index = 1 ; index <= maximum ; index++ ) {
4002c85c: 80 a6 00 01 cmp %i0, %g1
<== NOT EXECUTED
4002c860: 32 bf ff d8 bne,a 4002c7c0 <_POSIX_signals_Send+0x204>
<== NOT EXECUTED
4002c864: c4 00 40 00 ld [ %g1 ], %g2
<== NOT EXECUTED
for (the_api = OBJECTS_CLASSIC_API; the_api <= OBJECTS_APIS_LAST; the_api++) {
4002c868: 80 a3 20 03 cmp %o4, 3
<== NOT EXECUTED
4002c86c: 12 bf ff c4 bne 4002c77c <_POSIX_signals_Send+0x1c0>
<== NOT EXECUTED
4002c870: 98 10 20 03 mov 3, %o4
<== NOT EXECUTED
if ( interested ) {
4002c874: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4002c878: 12 bf ff 95 bne 4002c6cc <_POSIX_signals_Send+0x110>
<== NOT EXECUTED
4002c87c: 94 07 bf f4 add %fp, -12, %o2
<== NOT EXECUTED
4002c880: 30 bf ff 98 b,a 4002c6e0 <_POSIX_signals_Send+0x124>
<== NOT EXECUTED
if ( _Thread_Get_priority( the_thread ) > interested_priority )
4002c884: 28 bf ff da bleu,a 4002c7ec <_POSIX_signals_Send+0x230>
<== NOT EXECUTED
4002c888: da 00 a1 5c ld [ %g2 + 0x15c ], %o5
<== NOT EXECUTED
4002c88c: 10 bf ff f4 b 4002c85c <_POSIX_signals_Send+0x2a0>
<== NOT EXECUTED
4002c890: 82 00 60 04 add %g1, 4, %g1
<== NOT EXECUTED
4002c894: 10 bf ff 6b b 4002c640 <_POSIX_signals_Send+0x84>
<== NOT EXECUTED
4002c898: c0 27 bf fc clr [ %fp + -4 ]
<== NOT EXECUTED
if ( _Thread_Get_priority( the_thread ) < interested_priority ) {
4002c89c: 08 bf ff dd bleu 4002c810 <_POSIX_signals_Send+0x254>
<== NOT EXECUTED
4002c8a0: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4002c8a4: 10 bf ff eb b 4002c850 <_POSIX_signals_Send+0x294>
<== NOT EXECUTED
4002c8a8: 9e 10 00 04 mov %g4, %o7
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4002c8ac: c4 01 21 68 ld [ %g4 + 0x168 ], %g2
<== NOT EXECUTED
4002c8b0: b8 11 21 68 or %g4, 0x168, %i4
<== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
4002c8b4: b6 07 20 04 add %i4, 4, %i3
<== NOT EXECUTED
4002c8b8: 80 a0 80 1b cmp %g2, %i3
<== NOT EXECUTED
4002c8bc: 02 80 00 31 be 4002c980 <_POSIX_signals_Send+0x3c4>
<== NOT EXECUTED
4002c8c0: 01 00 00 00 nop
<== NOT EXECUTED
new_first = old_first->next;
4002c8c4: c2 00 80 00 ld [ %g2 ], %g1
<== NOT EXECUTED
new_first->previous = head;
4002c8c8: f8 20 60 04 st %i4, [ %g1 + 4 ]
<== NOT EXECUTED
psiginfo->Info = *siginfo;
4002c8cc: f6 07 bf fc ld [ %fp + -4 ], %i3
<== NOT EXECUTED
4002c8d0: f2 07 bf f8 ld [ %fp + -8 ], %i1
<== NOT EXECUTED
head->next = new_first;
4002c8d4: c2 21 21 68 st %g1, [ %g4 + 0x168 ]
<== NOT EXECUTED
_Chain_Append_unprotected(
4002c8d8: 03 10 00 d6 sethi %hi(0x40035800), %g1
<== NOT EXECUTED
psiginfo->Info = *siginfo;
4002c8dc: c8 07 bf f4 ld [ %fp + -12 ], %g4
<== NOT EXECUTED
4002c8e0: c8 20 a0 08 st %g4, [ %g2 + 8 ]
<== NOT EXECUTED
_Chain_Append_unprotected(
4002c8e4: 82 10 61 78 or %g1, 0x178, %g1
<== NOT EXECUTED
psiginfo->Info = *siginfo;
4002c8e8: f2 20 a0 0c st %i1, [ %g2 + 0xc ]
<== NOT EXECUTED
_Chain_Append_unprotected(
4002c8ec: b8 07 40 01 add %i5, %g1, %i4
<== NOT EXECUTED
return &the_chain->Tail.Node;
4002c8f0: ba 07 60 04 add %i5, 4, %i5
<== NOT EXECUTED
old_last = tail->previous;
4002c8f4: c8 07 20 08 ld [ %i4 + 8 ], %g4
<== NOT EXECUTED
return &the_chain->Tail.Node;
4002c8f8: ba 07 40 01 add %i5, %g1, %i5
<== NOT EXECUTED
psiginfo->Info = *siginfo;
4002c8fc: f6 20 a0 10 st %i3, [ %g2 + 0x10 ]
<== NOT EXECUTED
the_node->next = tail;
4002c900: fa 20 80 00 st %i5, [ %g2 ]
<== NOT EXECUTED
tail->previous = the_node;
4002c904: c4 27 20 08 st %g2, [ %i4 + 8 ]
<== NOT EXECUTED
old_last->next = the_node;
4002c908: c4 21 00 00 st %g2, [ %g4 ]
<== NOT EXECUTED
the_node->previous = old_last;
4002c90c: 10 bf ff 7e b 4002c704 <_POSIX_signals_Send+0x148>
<== NOT EXECUTED
4002c910: c8 20 a0 04 st %g4, [ %g2 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002c914: 91 d0 20 09 ta 9
<== NOT EXECUTED
if (
4002c918: c4 0e a0 1c ldub [ %i2 + 0x1c ], %g2
<== NOT EXECUTED
4002c91c: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002c920: 12 80 00 07 bne 4002c93c <_POSIX_signals_Send+0x380>
<== NOT EXECUTED
4002c924: 92 10 00 01 mov %g1, %o1
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = 0;
4002c928: c0 26 a0 18 clr [ %i2 + 0x18 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002c92c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002c930: 01 00 00 00 nop
<== NOT EXECUTED
return 0;
4002c934: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c938: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
_Thread_Do_dispatch( cpu_self, level );
4002c93c: c2 27 bf ec st %g1, [ %fp + -20 ]
<== NOT EXECUTED
4002c940: 7f ff 9a f2 call 40013508 <_Thread_Do_dispatch>
<== NOT EXECUTED
4002c944: 90 10 00 1a mov %i2, %o0
<== NOT EXECUTED
4002c948: 10 bf ff f9 b 4002c92c <_POSIX_signals_Send+0x370>
<== NOT EXECUTED
4002c94c: c2 07 bf ec ld [ %fp + -20 ], %g1
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
4002c950: 7f ff bc ec call 4001bd00 <__errno>
<== NOT EXECUTED
4002c954: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4002c958: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4002c95c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4002c960: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c964: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ESRCH );
4002c968: 7f ff bc e6 call 4001bd00 <__errno>
<== NOT EXECUTED
4002c96c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4002c970: 82 10 20 03 mov 3, %g1
<== NOT EXECUTED
4002c974: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4002c978: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c97c: 81 e8 00 00 restore
<== NOT EXECUTED
4002c980: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002c984: 01 00 00 00 nop
<== NOT EXECUTED
uint32_t disable_level = cpu_self->thread_dispatch_disable_level;
4002c988: c2 06 a0 18 ld [ %i2 + 0x18 ], %g1
<== NOT EXECUTED
if ( disable_level == 1 ) {
4002c98c: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
4002c990: 02 80 00 09 be 4002c9b4 <_POSIX_signals_Send+0x3f8>
<== NOT EXECUTED
4002c994: 82 00 7f ff add %g1, -1, %g1
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level - 1;
4002c998: c2 26 a0 18 st %g1, [ %i2 + 0x18 ]
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EAGAIN );
4002c99c: 7f ff bc d9 call 4001bd00 <__errno>
<== NOT EXECUTED
4002c9a0: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4002c9a4: 82 10 20 0b mov 0xb, %g1
<== NOT EXECUTED
4002c9a8: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4002c9ac: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c9b0: 81 e8 00 00 restore
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002c9b4: 91 d0 20 09 ta 9
<== NOT EXECUTED
if (
4002c9b8: c4 0e a0 1c ldub [ %i2 + 0x1c ], %g2
<== NOT EXECUTED
4002c9bc: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002c9c0: 12 80 00 06 bne 4002c9d8 <_POSIX_signals_Send+0x41c>
<== NOT EXECUTED
4002c9c4: 92 10 00 01 mov %g1, %o1
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = 0;
4002c9c8: c0 26 a0 18 clr [ %i2 + 0x18 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002c9cc: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002c9d0: 01 00 00 00 nop
<== NOT EXECUTED
4002c9d4: 30 bf ff f2 b,a 4002c99c <_POSIX_signals_Send+0x3e0>
<== NOT EXECUTED
_Thread_Do_dispatch( cpu_self, level );
4002c9d8: c2 27 bf ec st %g1, [ %fp + -20 ]
<== NOT EXECUTED
4002c9dc: 7f ff 9a cb call 40013508 <_Thread_Do_dispatch>
<== NOT EXECUTED
4002c9e0: 90 10 00 1a mov %i2, %o0
<== NOT EXECUTED
4002c9e4: 10 bf ff fa b 4002c9cc <_POSIX_signals_Send+0x410>
<== NOT EXECUTED
4002c9e8: c2 07 bf ec ld [ %fp + -20 ], %g1
<== NOT EXECUTED
4002caa0 <_POSIX_signals_Set_process_signals>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002caa0: 91 d0 20 09 ta 9
<== NOT EXECUTED
{
Thread_queue_Context queue_context;
_Thread_queue_Context_initialize( &queue_context );
_POSIX_signals_Acquire( &queue_context );
_POSIX_signals_Pending |= mask;
4002caa4: 07 10 00 d6 sethi %hi(0x40035800), %g3
<== NOT EXECUTED
4002caa8: c4 00 e1 74 ld [ %g3 + 0x174 ], %g2 ! 40035974 <_POSIX_signals_Pending>
<== NOT EXECUTED
4002caac: 90 10 80 08 or %g2, %o0, %o0
<== NOT EXECUTED
4002cab0: d0 20 e1 74 st %o0, [ %g3 + 0x174 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002cab4: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002cab8: 01 00 00 00 nop
<== NOT EXECUTED
_POSIX_signals_Release( &queue_context );
}
4002cabc: 81 c3 e0 08 retl
<== NOT EXECUTED
4002cac0: 01 00 00 00 nop
<== NOT EXECUTED
4002cc4c <_POSIX_signals_Unblock_thread>:
bool _POSIX_signals_Unblock_thread(
Thread_Control *the_thread,
int signo,
siginfo_t *info
)
{
4002cc4c: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
POSIX_API_Control *api;
sigset_t mask;
siginfo_t *the_info = NULL;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
4002cc50: fa 06 21 5c ld [ %i0 + 0x15c ], %i5
<== NOT EXECUTED
/*
* Is the thread is specifically waiting for a signal?
*/
if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
4002cc54: c6 06 20 1c ld [ %i0 + 0x1c ], %g3
<== NOT EXECUTED
4002cc58: 05 04 00 01 sethi %hi(0x10000400), %g2
<== NOT EXECUTED
4002cc5c: 88 10 20 01 mov 1, %g4
<== NOT EXECUTED
4002cc60: 82 06 7f ff add %i1, -1, %g1
<== NOT EXECUTED
4002cc64: b8 08 c0 02 and %g3, %g2, %i4
<== NOT EXECUTED
4002cc68: 83 29 00 01 sll %g4, %g1, %g1
<== NOT EXECUTED
4002cc6c: 80 a7 00 02 cmp %i4, %g2
<== NOT EXECUTED
4002cc70: 02 80 00 19 be 4002ccd4 <_POSIX_signals_Unblock_thread+0x88>
<== NOT EXECUTED
4002cc74: b6 07 60 70 add %i5, 0x70, %i3
<== NOT EXECUTED
}
/*
* Thread is not waiting due to a sigwait.
*/
if ( api->signals_unblocked & mask ) {
4002cc78: c4 07 60 68 ld [ %i5 + 0x68 ], %g2
<== NOT EXECUTED
4002cc7c: 80 88 40 02 btst %g1, %g2
<== NOT EXECUTED
4002cc80: 02 80 00 05 be 4002cc94 <_POSIX_signals_Unblock_thread+0x48>
<== NOT EXECUTED
4002cc84: 03 04 00 00 sethi %hi(0x10000000), %g1
<== NOT EXECUTED
* it is not blocked, THEN
* we need to dispatch at the end of this ISR.
* + Any other combination, do nothing.
*/
if ( _States_Is_interruptible_by_signal( the_thread->current_state ) ) {
4002cc88: 80 88 c0 01 btst %g3, %g1
<== NOT EXECUTED
4002cc8c: 12 80 00 4b bne 4002cdb8 <_POSIX_signals_Unblock_thread+0x16c>
<== NOT EXECUTED
4002cc90: 82 10 24 0d mov 0x40d, %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002cc94: 91 d0 20 09 ta 9
<== NOT EXECUTED
action->handler = handler;
4002cc98: 05 10 00 b2 sethi %hi(0x4002c800), %g2
<== NOT EXECUTED
4002cc9c: 84 10 a3 60 or %g2, 0x360, %g2 ! 4002cb60 <_POSIX_signals_Action_handler>
<== NOT EXECUTED
4002cca0: c4 27 60 78 st %g2, [ %i5 + 0x78 ]
<== NOT EXECUTED
cpu_self->dispatch_necessary = true;
4002cca4: 86 10 20 01 mov 1, %g3
<== NOT EXECUTED
4002cca8: c6 29 a0 1c stb %g3, [ %g6 + 0x1c ]
<== NOT EXECUTED
if ( _Chain_Is_node_off_chain( the_node ) ) {
4002ccac: c4 07 60 70 ld [ %i5 + 0x70 ], %g2
<== NOT EXECUTED
4002ccb0: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002ccb4: 22 80 00 1a be,a 4002cd1c <_POSIX_signals_Unblock_thread+0xd0>
<== NOT EXECUTED
4002ccb8: c4 06 20 e8 ld [ %i0 + 0xe8 ], %g2
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002ccbc: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002ccc0: 01 00 00 00 nop
<== NOT EXECUTED
the_thread->Wait.return_code = STATUS_INTERRUPTED;
_Thread_queue_Extract_with_proxy( the_thread );
}
}
return _POSIX_signals_Unblock_thread_done( the_thread, api, false );
4002ccc4: b0 10 20 00 clr %i0 ! 0 <PROM_START>
<== NOT EXECUTED
}
4002ccc8: b0 0e 20 01 and %i0, 1, %i0
<== NOT EXECUTED
4002cccc: 81 c7 e0 08 ret
<== NOT EXECUTED
4002ccd0: 81 e8 00 00 restore
<== NOT EXECUTED
if ( (the_thread->Wait.option & mask) || (api->signals_unblocked & mask) ) {
4002ccd4: c4 06 20 48 ld [ %i0 + 0x48 ], %g2
<== NOT EXECUTED
4002ccd8: 80 88 40 02 btst %g1, %g2
<== NOT EXECUTED
4002ccdc: 32 80 00 16 bne,a 4002cd34 <_POSIX_signals_Unblock_thread+0xe8>
<== NOT EXECUTED
4002cce0: 82 10 24 0d mov 0x40d, %g1
<== NOT EXECUTED
4002cce4: c4 07 60 68 ld [ %i5 + 0x68 ], %g2
<== NOT EXECUTED
4002cce8: 80 88 40 02 btst %g1, %g2
<== NOT EXECUTED
4002ccec: 12 80 00 12 bne 4002cd34 <_POSIX_signals_Unblock_thread+0xe8>
<== NOT EXECUTED
4002ccf0: 82 10 24 0d mov 0x40d, %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002ccf4: 91 d0 20 09 ta 9
<== NOT EXECUTED
4002ccf8: 05 10 00 b2 sethi %hi(0x4002c800), %g2
<== NOT EXECUTED
4002ccfc: 84 10 a3 60 or %g2, 0x360, %g2 ! 4002cb60 <_POSIX_signals_Action_handler>
<== NOT EXECUTED
4002cd00: c4 27 60 78 st %g2, [ %i5 + 0x78 ]
<== NOT EXECUTED
4002cd04: c8 29 a0 1c stb %g4, [ %g6 + 0x1c ]
<== NOT EXECUTED
4002cd08: c4 07 60 70 ld [ %i5 + 0x70 ], %g2
<== NOT EXECUTED
4002cd0c: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002cd10: 12 bf ff eb bne 4002ccbc <_POSIX_signals_Unblock_thread+0x70>
<== NOT EXECUTED
4002cd14: 01 00 00 00 nop
<== NOT EXECUTED
old_last = tail->previous;
4002cd18: c4 06 20 e8 ld [ %i0 + 0xe8 ], %g2
<== NOT EXECUTED
return &the_chain->Tail.Node;
4002cd1c: 86 06 20 e4 add %i0, 0xe4, %g3
<== NOT EXECUTED
the_node->next = tail;
4002cd20: c6 27 60 70 st %g3, [ %i5 + 0x70 ]
<== NOT EXECUTED
tail->previous = the_node;
4002cd24: f6 26 20 e8 st %i3, [ %i0 + 0xe8 ]
<== NOT EXECUTED
old_last->next = the_node;
4002cd28: f6 20 80 00 st %i3, [ %g2 ]
<== NOT EXECUTED
the_node->previous = old_last;
4002cd2c: 10 bf ff e4 b 4002ccbc <_POSIX_signals_Unblock_thread+0x70>
<== NOT EXECUTED
4002cd30: c4 27 60 74 st %g2, [ %i5 + 0x74 ]
<== NOT EXECUTED
the_thread->Wait.return_code = STATUS_INTERRUPTED;
4002cd34: c2 26 20 4c st %g1, [ %i0 + 0x4c ]
<== NOT EXECUTED
if ( !info ) {
4002cd38: 80 a6 a0 00 cmp %i2, 0
<== NOT EXECUTED
4002cd3c: 02 80 00 2e be 4002cdf4 <_POSIX_signals_Unblock_thread+0x1a8>
<== NOT EXECUTED
4002cd40: c2 06 20 40 ld [ %i0 + 0x40 ], %g1
<== NOT EXECUTED
*the_info = *info;
4002cd44: c4 06 80 00 ld [ %i2 ], %g2
<== NOT EXECUTED
4002cd48: c4 20 40 00 st %g2, [ %g1 ]
<== NOT EXECUTED
4002cd4c: c4 06 a0 04 ld [ %i2 + 4 ], %g2
<== NOT EXECUTED
4002cd50: c4 20 60 04 st %g2, [ %g1 + 4 ]
<== NOT EXECUTED
4002cd54: c4 06 a0 08 ld [ %i2 + 8 ], %g2
<== NOT EXECUTED
4002cd58: c4 20 60 08 st %g2, [ %g1 + 8 ]
<== NOT EXECUTED
_Thread_queue_Extract_with_proxy( the_thread );
4002cd5c: 7f ff b7 3e call 4001aa54 <_Thread_queue_Extract_with_proxy>
<== NOT EXECUTED
4002cd60: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
4002cd64: 91 d0 20 09 ta 9
<== NOT EXECUTED
4002cd68: 05 10 00 b2 sethi %hi(0x4002c800), %g2
<== NOT EXECUTED
4002cd6c: 84 10 a3 60 or %g2, 0x360, %g2 ! 4002cb60 <_POSIX_signals_Action_handler>
<== NOT EXECUTED
4002cd70: c4 27 60 78 st %g2, [ %i5 + 0x78 ]
<== NOT EXECUTED
4002cd74: 86 10 20 01 mov 1, %g3
<== NOT EXECUTED
4002cd78: c6 29 a0 1c stb %g3, [ %g6 + 0x1c ]
<== NOT EXECUTED
if ( _Chain_Is_node_off_chain( the_node ) ) {
4002cd7c: c4 07 60 70 ld [ %i5 + 0x70 ], %g2
<== NOT EXECUTED
4002cd80: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002cd84: 12 80 00 07 bne 4002cda0 <_POSIX_signals_Unblock_thread+0x154>
<== NOT EXECUTED
4002cd88: 86 06 20 e4 add %i0, 0xe4, %g3
<== NOT EXECUTED
old_last = tail->previous;
4002cd8c: c4 06 20 e8 ld [ %i0 + 0xe8 ], %g2
<== NOT EXECUTED
the_node->next = tail;
4002cd90: c6 27 60 70 st %g3, [ %i5 + 0x70 ]
<== NOT EXECUTED
tail->previous = the_node;
4002cd94: f6 26 20 e8 st %i3, [ %i0 + 0xe8 ]
<== NOT EXECUTED
old_last->next = the_node;
4002cd98: f6 20 80 00 st %i3, [ %g2 ]
<== NOT EXECUTED
the_node->previous = old_last;
4002cd9c: c4 27 60 74 st %g2, [ %i5 + 0x74 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002cda0: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002cda4: 01 00 00 00 nop
<== NOT EXECUTED
return _POSIX_signals_Unblock_thread_done( the_thread, api, true );
4002cda8: b0 10 20 01 mov 1, %i0 ! 1 <_TLS_Alignment>
<== NOT EXECUTED
}
4002cdac: b0 0e 20 01 and %i0, 1, %i0
<== NOT EXECUTED
4002cdb0: 81 c7 e0 08 ret
<== NOT EXECUTED
4002cdb4: 81 e8 00 00 restore
<== NOT EXECUTED
the_thread->Wait.return_code = STATUS_INTERRUPTED;
4002cdb8: c2 26 20 4c st %g1, [ %i0 + 0x4c ]
<== NOT EXECUTED
_Thread_queue_Extract_with_proxy( the_thread );
4002cdbc: 7f ff b7 26 call 4001aa54 <_Thread_queue_Extract_with_proxy>
<== NOT EXECUTED
4002cdc0: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002cdc4: 91 d0 20 09 ta 9
<== NOT EXECUTED
4002cdc8: 05 10 00 b2 sethi %hi(0x4002c800), %g2
<== NOT EXECUTED
4002cdcc: 84 10 a3 60 or %g2, 0x360, %g2 ! 4002cb60 <_POSIX_signals_Action_handler>
<== NOT EXECUTED
4002cdd0: c4 27 60 78 st %g2, [ %i5 + 0x78 ]
<== NOT EXECUTED
4002cdd4: 86 10 20 01 mov 1, %g3
<== NOT EXECUTED
4002cdd8: c6 29 a0 1c stb %g3, [ %g6 + 0x1c ]
<== NOT EXECUTED
if ( _Chain_Is_node_off_chain( the_node ) ) {
4002cddc: c4 07 60 70 ld [ %i5 + 0x70 ], %g2
<== NOT EXECUTED
4002cde0: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002cde4: 12 bf ff b6 bne 4002ccbc <_POSIX_signals_Unblock_thread+0x70>
<== NOT EXECUTED
4002cde8: 01 00 00 00 nop
<== NOT EXECUTED
old_last = tail->previous;
4002cdec: 10 bf ff cc b 4002cd1c <_POSIX_signals_Unblock_thread+0xd0>
<== NOT EXECUTED
4002cdf0: c4 06 20 e8 ld [ %i0 + 0xe8 ], %g2
<== NOT EXECUTED
the_info->si_code = SI_USER;
4002cdf4: 84 10 20 01 mov 1, %g2
<== NOT EXECUTED
the_info->si_signo = signo;
4002cdf8: f2 20 40 00 st %i1, [ %g1 ]
<== NOT EXECUTED
the_info->si_code = SI_USER;
4002cdfc: c4 20 60 04 st %g2, [ %g1 + 4 ]
<== NOT EXECUTED
4002ce00: 10 bf ff d7 b 4002cd5c <_POSIX_signals_Unblock_thread+0x110>
<== NOT EXECUTED
4002ce04: c0 20 60 08 clr [ %g1 + 8 ]
<== NOT EXECUTED
4002c1e8 <_kill_r>:
int _kill_r(
struct _reent *ptr,
pid_t pid,
int sig
)
{
4002c1e8: 82 10 00 0a mov %o2, %g1
<== NOT EXECUTED
return _POSIX_signals_Send( pid, sig, NULL );
4002c1ec: 90 10 00 09 mov %o1, %o0
<== NOT EXECUTED
4002c1f0: 94 10 20 00 clr %o2
<== NOT EXECUTED
4002c1f4: 92 10 00 01 mov %g1, %o1
<== NOT EXECUTED
4002c1f8: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
4002c1fc: 40 00 00 f0 call 4002c5bc <_POSIX_signals_Send>
<== NOT EXECUTED
4002c200: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
40006298 <clock_gettime>:
int clock_gettime(
clockid_t clock_id,
struct timespec *tp
)
{
40006298: 9d e3 bf a0 save %sp, -96, %sp
if ( !tp )
4000629c: 80 a6 60 00 cmp %i1, 0
400062a0: 02 80 00 1f be 4000631c <clock_gettime+0x84>
<== NEVER TAKEN
400062a4: 80 a6 20 01 cmp %i0, 1
rtems_set_errno_and_return_minus_one( EINVAL );
if ( clock_id == CLOCK_REALTIME ) {
400062a8: 02 80 00 18 be 40006308 <clock_gettime+0x70>
<== ALWAYS TAKEN
400062ac: 82 06 3f fe add %i0, -2, %g1
return 0;
}
#endif
#ifdef _POSIX_CPUTIME
if ( clock_id == CLOCK_PROCESS_CPUTIME_ID ) {
400062b0: 80 88 7f fd btst -3, %g1
<== NOT EXECUTED
400062b4: 02 80 00 0a be 400062dc <clock_gettime+0x44>
<== NOT EXECUTED
400062b8: 80 a6 20 03 cmp %i0, 3
<== NOT EXECUTED
return 0;
}
#endif
#ifdef _POSIX_THREAD_CPUTIME
if ( clock_id == CLOCK_THREAD_CPUTIME_ID )
400062bc: 02 80 00 0d be 400062f0 <clock_gettime+0x58>
<== NOT EXECUTED
400062c0: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
#endif
rtems_set_errno_and_return_minus_one( EINVAL );
400062c4: 40 00 22 92 call 4000ed0c <__errno>
<== NOT EXECUTED
400062c8: b0 10 3f ff mov -1, %i0 ! ffffffff <RAM_END+0xbfbfffff>
<== NOT EXECUTED
400062cc: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
400062d0: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
return 0;
}
400062d4: 81 c7 e0 08 ret
<== NOT EXECUTED
400062d8: 81 e8 00 00 restore
<== NOT EXECUTED
_Timecounter_Nanouptime( tp );
400062dc: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
400062e0: 40 00 08 b7 call 400085bc <_Timecounter_Nanouptime>
<== NOT EXECUTED
400062e4: b0 10 20 00 clr %i0
<== NOT EXECUTED
return 0;
400062e8: 81 c7 e0 08 ret
<== NOT EXECUTED
400062ec: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
400062f0: 40 00 22 87 call 4000ed0c <__errno>
<== NOT EXECUTED
400062f4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400062f8: 82 10 20 58 mov 0x58, %g1
<== NOT EXECUTED
400062fc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40006300: 81 c7 e0 08 ret
<== NOT EXECUTED
40006304: 81 e8 00 00 restore
<== NOT EXECUTED
_Timecounter_Nanotime( tod );
40006308: 90 10 00 19 mov %i1, %o0
4000630c: 40 00 08 e7 call 400086a8 <_Timecounter_Nanotime>
40006310: b0 10 20 00 clr %i0
return 0;
40006314: 81 c7 e0 08 ret
40006318: 81 e8 00 00 restore
rtems_set_errno_and_return_minus_one( EINVAL );
4000631c: 40 00 22 7c call 4000ed0c <__errno>
<== NOT EXECUTED
40006320: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40006324: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40006328: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4000632c: 81 c7 e0 08 ret
<== NOT EXECUTED
40006330: 81 e8 00 00 restore
<== NOT EXECUTED
40043848 <clock_settime>:
int clock_settime(
clockid_t clock_id,
const struct timespec *tp
)
{
40043848: 9d e3 bf 98 save %sp, -104, %sp
<== NOT EXECUTED
if ( !tp )
4004384c: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
40043850: 02 80 00 2b be 400438fc <clock_settime+0xb4>
<== NOT EXECUTED
40043854: 80 a6 20 01 cmp %i0, 1
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( clock_id == CLOCK_REALTIME ) {
40043858: 02 80 00 12 be 400438a0 <clock_settime+0x58>
<== NOT EXECUTED
4004385c: 80 a6 20 02 cmp %i0, 2
<== NOT EXECUTED
_TOD_Acquire( &lock_context );
_TOD_Set( tp, &lock_context );
_TOD_Unlock();
}
#ifdef _POSIX_CPUTIME
else if ( clock_id == CLOCK_PROCESS_CPUTIME_ID )
40043860: 02 80 00 0a be 40043888 <clock_settime+0x40>
<== NOT EXECUTED
40043864: 80 a6 20 03 cmp %i0, 3
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
#endif
#ifdef _POSIX_THREAD_CPUTIME
else if ( clock_id == CLOCK_THREAD_CPUTIME_ID )
40043868: 02 80 00 08 be 40043888 <clock_settime+0x40>
<== NOT EXECUTED
4004386c: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
#endif
else
rtems_set_errno_and_return_minus_one( EINVAL );
40043870: 40 00 64 29 call 4005c914 <__errno>
<== NOT EXECUTED
40043874: b0 10 3f ff mov -1, %i0 ! ffffffff <RAM_END+0xbfbfffff>
<== NOT EXECUTED
40043878: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4004387c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
return 0;
}
40043880: 81 c7 e0 08 ret
<== NOT EXECUTED
40043884: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
40043888: 40 00 64 23 call 4005c914 <__errno>
<== NOT EXECUTED
4004388c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40043890: 82 10 20 58 mov 0x58, %g1
<== NOT EXECUTED
40043894: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40043898: 81 c7 e0 08 ret
<== NOT EXECUTED
4004389c: 81 e8 00 00 restore
<== NOT EXECUTED
if ( tp->tv_sec < TOD_SECONDS_1970_THROUGH_1988 )
400438a0: c2 06 40 00 ld [ %i1 ], %g1
<== NOT EXECUTED
400438a4: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
400438a8: 04 80 00 0e ble 400438e0 <clock_settime+0x98>
<== NOT EXECUTED
400438ac: 01 00 00 00 nop
<== NOT EXECUTED
_TOD_Lock();
400438b0: 40 00 03 d3 call 400447fc <_TOD_Lock>
<== NOT EXECUTED
400438b4: 01 00 00 00 nop
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400438b8: 91 d0 20 09 ta 9
<== NOT EXECUTED
_Timecounter_Acquire( lock_context );
400438bc: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
_TOD_Set( tp, &lock_context );
400438c0: 92 07 bf fc add %fp, -4, %o1
<== NOT EXECUTED
400438c4: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
400438c8: 40 00 03 d7 call 40044824 <_TOD_Set>
<== NOT EXECUTED
400438cc: b0 10 20 00 clr %i0
<== NOT EXECUTED
_TOD_Unlock();
400438d0: 40 00 03 d0 call 40044810 <_TOD_Unlock>
<== NOT EXECUTED
400438d4: 01 00 00 00 nop
<== NOT EXECUTED
return 0;
400438d8: 81 c7 e0 08 ret
<== NOT EXECUTED
400438dc: 81 e8 00 00 restore
<== NOT EXECUTED
if ( tp->tv_sec < TOD_SECONDS_1970_THROUGH_1988 )
400438e0: 12 80 00 07 bne 400438fc <clock_settime+0xb4>
<== NOT EXECUTED
400438e4: 03 08 76 b9 sethi %hi(0x21dae400), %g1
<== NOT EXECUTED
400438e8: c4 06 60 04 ld [ %i1 + 4 ], %g2
<== NOT EXECUTED
400438ec: 82 10 60 ff or %g1, 0xff, %g1
<== NOT EXECUTED
400438f0: 80 a0 80 01 cmp %g2, %g1
<== NOT EXECUTED
400438f4: 18 bf ff ef bgu 400438b0 <clock_settime+0x68>
<== NOT EXECUTED
400438f8: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
400438fc: 40 00 64 06 call 4005c914 <__errno>
<== NOT EXECUTED
40043900: b0 10 3f ff mov -1, %i0 ! ffffffff <RAM_END+0xbfbfffff>
<== NOT EXECUTED
40043904: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40043908: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4004390c: 81 c7 e0 08 ret
<== NOT EXECUTED
40043910: 81 e8 00 00 restore
<== NOT EXECUTED
4002c3bc <nanosleep>:
{
4002c3bc: 9d e3 bf a0 save %sp, -96, %sp
4002c3c0: 92 10 20 00 clr %o1
4002c3c4: 94 10 00 18 mov %i0, %o2
4002c3c8: 96 10 00 19 mov %i1, %o3
4002c3cc: 7f ff ff 8e call 4002c204 <clock_nanosleep.part.6>
4002c3d0: 90 10 20 01 mov 1, %o0
if ( eno != 0 ) {
4002c3d4: b0 92 20 00 orcc %o0, 0, %i0
4002c3d8: 12 80 00 04 bne 4002c3e8 <nanosleep+0x2c>
<== NEVER TAKEN
4002c3dc: 01 00 00 00 nop
}
4002c3e0: 81 c7 e0 08 ret
4002c3e4: 81 e8 00 00 restore
rtems_set_errno_and_return_minus_one( eno );
4002c3e8: 7f ff be 46 call 4001bd00 <__errno>
<== NOT EXECUTED
4002c3ec: 01 00 00 00 nop
<== NOT EXECUTED
4002c3f0: f0 22 00 00 st %i0, [ %o0 ]
<== NOT EXECUTED
}
4002c3f4: 81 c7 e0 08 ret
<== NOT EXECUTED
4002c3f8: 91 e8 3f ff restore %g0, -1, %o0
<== NOT EXECUTED
4001bbe4 <pthread_exit>:
#include <pthread.h>
#include <rtems/score/threadimpl.h>
void pthread_exit( void *value_ptr )
{
4001bbe4: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
disable_level = cpu_self->thread_dispatch_disable_level;
4001bbe8: c2 01 a0 18 ld [ %g6 + 0x18 ], %g1
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level + 1;
4001bbec: 82 00 60 01 inc %g1
<== NOT EXECUTED
4001bbf0: c2 21 a0 18 st %g1, [ %g6 + 0x18 ]
<== NOT EXECUTED
return _Thread_Dispatch_disable_with_CPU( _Per_CPU_Get(), lock_context );
4001bbf4: ba 10 00 06 mov %g6, %i5
<== NOT EXECUTED
Per_CPU_Control *cpu_self;
cpu_self = _Thread_Dispatch_disable();
executing = _Per_CPU_Get_executing( cpu_self );
_Thread_Exit( executing, THREAD_LIFE_TERMINATING, value_ptr );
4001bbf8: d0 01 a0 20 ld [ %g6 + 0x20 ], %o0
<== NOT EXECUTED
4001bbfc: 94 10 00 18 mov %i0, %o2
<== NOT EXECUTED
4001bc00: 7f ff e6 2a call 400154a8 <_Thread_Exit>
<== NOT EXECUTED
4001bc04: 92 10 20 04 mov 4, %o1
<== NOT EXECUTED
_Thread_Dispatch_direct( cpu_self );
4001bc08: 7f ff de 88 call 40013628 <_Thread_Dispatch_direct>
<== NOT EXECUTED
4001bc0c: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
4001bc10: 01 00 00 00 nop
<== NOT EXECUTED
400062a4 <pthread_getspecific>:
ISR_Level level;
_ISR_Local_disable( level );
#endif
executing = _Thread_Executing;
400062a4: c6 01 a0 20 ld [ %g6 + 0x20 ], %g3
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400062a8: 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 );
400062ac: 86 00 e1 60 add %g3, 0x160, %g3
RBTree_Node *parent;
link = _RBTree_Root_const_reference( the_rbtree );
parent = NULL;
while ( *link != NULL ) {
400062b0: c4 00 c0 00 ld [ %g3 ], %g2
400062b4: 80 a0 a0 00 cmp %g2, 0
400062b8: 02 80 00 0d be 400062ec <pthread_getspecific+0x48>
<== ALWAYS TAKEN
400062bc: 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;
400062c0: c8 00 e0 18 ld [ %g3 + 0x18 ], %g4
<== NOT EXECUTED
parent = *link;
if ( ( *equal )( key, parent ) ) {
400062c4: 80 a2 00 04 cmp %o0, %g4
<== NOT EXECUTED
400062c8: 22 80 00 0e be,a 40006300 <pthread_getspecific+0x5c>
<== NOT EXECUTED
400062cc: d0 00 e0 20 ld [ %g3 + 0x20 ], %o0
<== NOT EXECUTED
return ( *map )( parent );
} else if ( ( *less )( key, parent ) ) {
400062d0: 1a bf ff f8 bcc 400062b0 <pthread_getspecific+0xc>
<== NOT EXECUTED
400062d4: 86 00 a0 04 add %g2, 4, %g3
<== NOT EXECUTED
return &RB_LEFT( the_node, Node );
400062d8: 86 10 00 02 mov %g2, %g3
<== NOT EXECUTED
while ( *link != NULL ) {
400062dc: c4 00 c0 00 ld [ %g3 ], %g2
<== NOT EXECUTED
400062e0: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
400062e4: 12 bf ff f7 bne 400062c0 <pthread_getspecific+0x1c>
<== NOT EXECUTED
400062e8: 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;
400062ec: 90 10 20 00 clr %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400062f0: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400062f4: 01 00 00 00 nop
}
_POSIX_Keys_Key_value_release( executing, &lock_context );
return value;
}
400062f8: 81 c3 e0 08 retl
400062fc: 01 00 00 00 nop
40006300: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40006304: 01 00 00 00 nop
<== NOT EXECUTED
40006308: 81 c3 e0 08 retl
<== NOT EXECUTED
4000630c: 01 00 00 00 nop
<== NOT EXECUTED
40018354 <pthread_key_delete>:
* 17.1.3 Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167
*/
int pthread_key_delete(
pthread_key_t key
)
{
40018354: 9d e3 bf 98 save %sp, -104, %sp
<== NOT EXECUTED
_RTEMS_Lock_allocator();
40018358: 40 00 02 2e call 40018c10 <_RTEMS_Lock_allocator>
<== NOT EXECUTED
4001835c: 33 10 00 d2 sethi %hi(0x40034800), %i1
<== NOT EXECUTED
_Objects_Free( &_POSIX_Keys_Information, &the_key->Object );
}
RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Get( pthread_key_t key )
{
return (POSIX_Keys_Control *)
40018360: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
the_key = _POSIX_Keys_Get( key );
if ( the_key != NULL ) {
_POSIX_Keys_Destroy( the_key );
eno = 0;
} else {
eno = EINVAL;
40018364: b0 10 20 16 mov 0x16, %i0
<== NOT EXECUTED
40018368: 40 00 0b 1c call 4001afd8 <_Objects_Get_no_protection>
<== NOT EXECUTED
4001836c: 92 16 61 c0 or %i1, 0x1c0, %o1
<== NOT EXECUTED
if ( the_key != NULL ) {
40018370: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40018374: 02 80 00 24 be 40018404 <pthread_key_delete+0xb0>
<== NOT EXECUTED
40018378: b8 10 00 08 mov %o0, %i4
<== NOT EXECUTED
_Objects_Close( &_POSIX_Keys_Information, &the_key->Object );
4001837c: 92 10 00 08 mov %o0, %o1
<== NOT EXECUTED
40018380: 40 00 0a 1e call 4001abf8 <_Objects_Close>
<== NOT EXECUTED
40018384: 90 16 61 c0 or %i1, 0x1c0, %o0
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
40018388: fa 07 20 14 ld [ %i4 + 0x14 ], %i5
<== NOT EXECUTED
return &the_chain->Tail.Node;
4001838c: b4 07 20 18 add %i4, 0x18, %i2
<== NOT EXECUTED
while ( !_Chain_Is_empty( &the_key->Key_value_pairs ) ) {
40018390: 80 a6 80 1d cmp %i2, %i5
<== NOT EXECUTED
40018394: 02 80 00 19 be 400183f8 <pthread_key_delete+0xa4>
<== NOT EXECUTED
40018398: 92 10 00 1c mov %i4, %o1
<== NOT EXECUTED
4001839c: 37 10 00 d2 sethi %hi(0x40034800), %i3
<== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Keys_Key_value_free(
POSIX_Keys_Key_value_pair *key_value_pair
)
{
_Chain_Extract_unprotected( &key_value_pair->Key_node );
_Freechain_Put( &_POSIX_Keys_Keypool, key_value_pair );
400183a0: b6 16 e1 fc or %i3, 0x1fc, %i3 ! 400349fc <_POSIX_Keys_Keypool>
<== NOT EXECUTED
the_thread = key_value_pair->thread;
400183a4: d0 07 60 1c ld [ %i5 + 0x1c ], %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400183a8: 91 d0 20 09 ta 9
<== NOT EXECUTED
return psr;
400183ac: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
_RBTree_Extract(
400183b0: 92 07 60 08 add %i5, 8, %o1
<== NOT EXECUTED
400183b4: 40 00 0b ba call 4001b29c <_RBTree_Extract>
<== NOT EXECUTED
400183b8: 90 02 21 60 add %o0, 0x160, %o0
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
400183bc: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400183c0: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400183c4: 01 00 00 00 nop
<== NOT EXECUTED
next = the_node->next;
400183c8: c4 07 40 00 ld [ %i5 ], %g2
<== NOT EXECUTED
previous = the_node->previous;
400183cc: c2 07 60 04 ld [ %i5 + 4 ], %g1
<== NOT EXECUTED
next->previous = previous;
400183d0: c2 20 a0 04 st %g1, [ %g2 + 4 ]
<== NOT EXECUTED
400183d4: 92 10 00 1d mov %i5, %o1
<== NOT EXECUTED
previous->next = next;
400183d8: c4 20 40 00 st %g2, [ %g1 ]
<== NOT EXECUTED
400183dc: 40 00 02 6e call 40018d94 <_Freechain_Put>
<== NOT EXECUTED
400183e0: 90 10 00 1b mov %i3, %o0
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
400183e4: fa 07 20 14 ld [ %i4 + 0x14 ], %i5
<== NOT EXECUTED
while ( !_Chain_Is_empty( &the_key->Key_value_pairs ) ) {
400183e8: 80 a7 40 1a cmp %i5, %i2
<== NOT EXECUTED
400183ec: 32 bf ff ef bne,a 400183a8 <pthread_key_delete+0x54>
<== NOT EXECUTED
400183f0: d0 07 60 1c ld [ %i5 + 0x1c ], %o0
<== NOT EXECUTED
_Objects_Free( &_POSIX_Keys_Information, &the_key->Object );
400183f4: 92 10 00 1c mov %i4, %o1
<== NOT EXECUTED
400183f8: 90 16 61 c0 or %i1, 0x1c0, %o0
<== NOT EXECUTED
400183fc: 40 00 0a cb call 4001af28 <_Objects_Free>
<== NOT EXECUTED
40018400: b0 10 20 00 clr %i0
<== NOT EXECUTED
_RTEMS_Unlock_allocator();
40018404: 40 00 02 08 call 40018c24 <_RTEMS_Unlock_allocator>
<== NOT EXECUTED
40018408: 01 00 00 00 nop
<== NOT EXECUTED
}
_Objects_Allocator_unlock();
return eno;
}
4001840c: 81 c7 e0 08 ret
<== NOT EXECUTED
40018410: 81 e8 00 00 restore
<== NOT EXECUTED
4002ce08 <pthread_kill>:
#include <rtems/posix/threadsup.h>
#include <rtems/posix/psignalimpl.h>
#include <rtems/score/threadimpl.h>
int pthread_kill( pthread_t thread, int sig )
{
4002ce08: 9d e3 bf 90 save %sp, -112, %sp
<== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
4002ce0c: ba 06 7f ff add %i1, -1, %i5
<== NOT EXECUTED
Thread_Control *the_thread;
ISR_lock_Context lock_context;
POSIX_API_Control *api;
Per_CPU_Control *cpu_self;
if ( !is_valid_signo( sig ) ) {
4002ce10: 80 a7 60 1f cmp %i5, 0x1f
<== NOT EXECUTED
4002ce14: 18 80 00 28 bgu 4002ceb4 <pthread_kill+0xac>
<== NOT EXECUTED
4002ce18: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
return EINVAL;
}
the_thread = _Thread_Get( thread, &lock_context );
4002ce1c: 92 07 bf fc add %fp, -4, %o1
<== NOT EXECUTED
4002ce20: 7f ff 9a 19 call 40013684 <_Thread_Get>
<== NOT EXECUTED
4002ce24: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
if ( the_thread == NULL ) {
4002ce28: 86 92 20 00 orcc %o0, 0, %g3
<== NOT EXECUTED
4002ce2c: 02 80 00 22 be 4002ceb4 <pthread_kill+0xac>
<== NOT EXECUTED
4002ce30: 82 10 20 03 mov 3, %g1
<== NOT EXECUTED
return ESRCH;
}
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN ) {
4002ce34: 83 2e 60 01 sll %i1, 1, %g1
<== NOT EXECUTED
4002ce38: 82 00 40 19 add %g1, %i1, %g1
<== NOT EXECUTED
4002ce3c: 85 28 60 02 sll %g1, 2, %g2
<== NOT EXECUTED
4002ce40: 03 10 00 d5 sethi %hi(0x40035400), %g1
<== NOT EXECUTED
4002ce44: 82 10 63 e8 or %g1, 0x3e8, %g1 ! 400357e8 <_POSIX_signals_Vectors>
<== NOT EXECUTED
4002ce48: 82 00 40 02 add %g1, %g2, %g1
<== NOT EXECUTED
4002ce4c: c2 00 60 08 ld [ %g1 + 8 ], %g1
<== NOT EXECUTED
4002ce50: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
4002ce54: 02 80 00 24 be 4002cee4 <pthread_kill+0xdc>
<== NOT EXECUTED
4002ce58: 01 00 00 00 nop
<== NOT EXECUTED
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
4002ce5c: c8 00 e1 5c ld [ %g3 + 0x15c ], %g4
<== NOT EXECUTED
return 0;
}
/* XXX critical section */
api->signals_pending |= signo_to_mask( sig );
4002ce60: c4 01 20 6c ld [ %g4 + 0x6c ], %g2
<== NOT EXECUTED
disable_level = cpu_self->thread_dispatch_disable_level;
4002ce64: c2 01 a0 18 ld [ %g6 + 0x18 ], %g1
<== NOT EXECUTED
return 1u << (sig - 1);
4002ce68: 86 10 20 01 mov 1, %g3
<== NOT EXECUTED
4002ce6c: bb 28 c0 1d sll %g3, %i5, %i5
<== NOT EXECUTED
4002ce70: ba 10 80 1d or %g2, %i5, %i5
<== NOT EXECUTED
4002ce74: fa 21 20 6c st %i5, [ %g4 + 0x6c ]
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level + 1;
4002ce78: 82 00 60 01 inc %g1
<== NOT EXECUTED
return _Thread_Dispatch_disable_with_CPU( _Per_CPU_Get(), lock_context );
4002ce7c: b8 10 00 06 mov %g6, %i4
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level + 1;
4002ce80: c2 21 a0 18 st %g1, [ %g6 + 0x18 ]
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
4002ce84: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002ce88: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002ce8c: 01 00 00 00 nop
<== NOT EXECUTED
cpu_self = _Thread_Dispatch_disable_critical( &lock_context );
_ISR_lock_ISR_enable( &lock_context );
(void) _POSIX_signals_Unblock_thread( the_thread, sig, NULL );
4002ce90: 94 10 20 00 clr %o2 ! 0 <PROM_START>
<== NOT EXECUTED
4002ce94: 7f ff ff 6e call 4002cc4c <_POSIX_signals_Unblock_thread>
<== NOT EXECUTED
4002ce98: 92 10 00 19 mov %i1, %o1
<== NOT EXECUTED
uint32_t disable_level = cpu_self->thread_dispatch_disable_level;
4002ce9c: c2 07 20 18 ld [ %i4 + 0x18 ], %g1
<== NOT EXECUTED
if ( disable_level == 1 ) {
4002cea0: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
4002cea4: 02 80 00 06 be 4002cebc <pthread_kill+0xb4>
<== NOT EXECUTED
4002cea8: 84 00 7f ff add %g1, -1, %g2
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = disable_level - 1;
4002ceac: c4 27 20 18 st %g2, [ %i4 + 0x18 ]
<== NOT EXECUTED
_Thread_Dispatch_enable( cpu_self );
return 0;
4002ceb0: 82 10 20 00 clr %g1
<== NOT EXECUTED
}
4002ceb4: 81 c7 e0 08 ret
<== NOT EXECUTED
4002ceb8: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4002cebc: 91 d0 20 09 ta 9
<== NOT EXECUTED
if (
4002cec0: c4 0f 20 1c ldub [ %i4 + 0x1c ], %g2
<== NOT EXECUTED
4002cec4: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4002cec8: 12 80 00 0d bne 4002cefc <pthread_kill+0xf4>
<== NOT EXECUTED
4002cecc: 92 10 00 01 mov %g1, %o1
<== NOT EXECUTED
cpu_self->thread_dispatch_disable_level = 0;
4002ced0: c0 27 20 18 clr [ %i4 + 0x18 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002ced4: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002ced8: 01 00 00 00 nop
<== NOT EXECUTED
return 0;
4002cedc: 10 bf ff f6 b 4002ceb4 <pthread_kill+0xac>
<== NOT EXECUTED
4002cee0: 82 10 20 00 clr %g1 ! 0 <PROM_START>
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
4002cee4: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4002cee8: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4002ceec: 01 00 00 00 nop
<== NOT EXECUTED
return 0;
4002cef0: 82 10 20 00 clr %g1 ! 0 <PROM_START>
<== NOT EXECUTED
}
4002cef4: 81 c7 e0 08 ret
<== NOT EXECUTED
4002cef8: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
_Thread_Do_dispatch( cpu_self, level );
4002cefc: c2 27 bf f4 st %g1, [ %fp + -12 ]
<== NOT EXECUTED
4002cf00: 7f ff 99 82 call 40013508 <_Thread_Do_dispatch>
<== NOT EXECUTED
4002cf04: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
4002cf08: 10 bf ff f3 b 4002ced4 <pthread_kill+0xcc>
<== NOT EXECUTED
4002cf0c: c2 07 bf f4 ld [ %fp + -12 ], %g1
<== NOT EXECUTED
4000dab8 <pthread_once>:
int pthread_once(
pthread_once_t *once_control,
void (*init_routine)(void)
)
{
if ( !once_control || !init_routine )
4000dab8: 80 a2 20 00 cmp %o0, 0
4000dabc: 02 80 00 07 be 4000dad8 <pthread_once+0x20>
<== NEVER TAKEN
4000dac0: 80 a2 60 00 cmp %o1, 0
4000dac4: 02 80 00 05 be 4000dad8 <pthread_once+0x20>
<== NEVER TAKEN
4000dac8: 01 00 00 00 nop
return EINVAL;
return _Once( &once_control->_flags, init_routine );
4000dacc: 82 13 c0 00 mov %o7, %g1
4000dad0: 40 00 10 bc call 40011dc0 <_Once>
4000dad4: 9e 10 40 00 mov %g1, %o7
}
4000dad8: 81 c3 e0 08 retl
<== NOT EXECUTED
4000dadc: 90 10 20 16 mov 0x16, %o0
<== NOT EXECUTED
4002cf10 <pthread_self>:
#include <rtems/score/percpu.h>
#include <rtems/score/thread.h>
pthread_t pthread_self( void )
{
return _Thread_Get_executing()->Object.id;
4002cf10: c2 01 a0 20 ld [ %g6 + 0x20 ], %g1
<== NOT EXECUTED
}
4002cf14: 81 c3 e0 08 retl
<== NOT EXECUTED
4002cf18: d0 00 60 08 ld [ %g1 + 8 ], %o0
<== NOT EXECUTED
40018600 <pthread_setspecific>:
int pthread_setspecific(
pthread_key_t key,
const void *value
)
{
40018600: 9d e3 bf 98 save %sp, -104, %sp
<== NOT EXECUTED
40018604: ba 10 00 18 mov %i0, %i5
<== NOT EXECUTED
Thread_Control *executing;
int eno;
executing = _Thread_Get_executing();
if ( value != NULL ) {
40018608: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
4001860c: 02 80 00 52 be 40018754 <pthread_setspecific+0x154>
<== NOT EXECUTED
40018610: f8 01 a0 20 ld [ %g6 + 0x20 ], %i4
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
40018614: 91 d0 20 09 ta 9
<== NOT EXECUTED
return &RB_ROOT( the_rbtree );
40018618: b6 07 21 60 add %i4, 0x160, %i3
<== NOT EXECUTED
link = _RBTree_Root_const_reference( the_rbtree );
4001861c: 86 10 00 1b mov %i3, %g3
<== NOT EXECUTED
while ( *link != NULL ) {
40018620: c4 00 c0 00 ld [ %g3 ], %g2
<== NOT EXECUTED
40018624: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
40018628: 02 80 00 0d be 4001865c <pthread_setspecific+0x5c>
<== NOT EXECUTED
4001862c: 86 00 bf f8 add %g2, -8, %g3
<== NOT EXECUTED
return *the_left == the_right->key;
40018630: c8 00 e0 18 ld [ %g3 + 0x18 ], %g4
<== NOT EXECUTED
if ( ( *equal )( key, parent ) ) {
40018634: 80 a7 40 04 cmp %i5, %g4
<== NOT EXECUTED
40018638: 22 80 00 31 be,a 400186fc <pthread_setspecific+0xfc>
<== NOT EXECUTED
4001863c: f2 20 e0 20 st %i1, [ %g3 + 0x20 ]
<== NOT EXECUTED
} else if ( ( *less )( key, parent ) ) {
40018640: 1a bf ff f8 bcc 40018620 <pthread_setspecific+0x20>
<== NOT EXECUTED
40018644: 86 00 a0 04 add %g2, 4, %g3
<== NOT EXECUTED
return &RB_LEFT( the_node, Node );
40018648: 86 10 00 02 mov %g2, %g3
<== NOT EXECUTED
while ( *link != NULL ) {
4001864c: c4 00 c0 00 ld [ %g3 ], %g2
<== NOT EXECUTED
40018650: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
40018654: 12 bf ff f7 bne 40018630 <pthread_setspecific+0x30>
<== NOT EXECUTED
40018658: 86 00 bf f8 add %g2, -8, %g3
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4001865c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40018660: 01 00 00 00 nop
<== NOT EXECUTED
_RTEMS_Lock_allocator();
40018664: 40 00 01 6b call 40018c10 <_RTEMS_Lock_allocator>
<== NOT EXECUTED
40018668: b0 10 20 16 mov 0x16, %i0 ! 16 <_TLS_Alignment+0x15>
<== NOT EXECUTED
return (POSIX_Keys_Control *)
4001866c: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
40018670: 13 10 00 d2 sethi %hi(0x40034800), %o1
<== NOT EXECUTED
40018674: 40 00 0a 59 call 4001afd8 <_Objects_Get_no_protection>
<== NOT EXECUTED
40018678: 92 12 61 c0 or %o1, 0x1c0, %o1 ! 400349c0 <_POSIX_Keys_Information>
<== NOT EXECUTED
if ( the_key != NULL ) {
4001867c: b4 92 20 00 orcc %o0, 0, %i2
<== NOT EXECUTED
40018680: 02 80 00 31 be 40018744 <pthread_setspecific+0x144>
<== NOT EXECUTED
40018684: 01 00 00 00 nop
<== NOT EXECUTED
key_value_pair = _POSIX_Keys_Key_value_allocate();
40018688: 7f ff ff ce call 400185c0 <_POSIX_Keys_Key_value_allocate>
<== NOT EXECUTED
4001868c: b0 10 20 0c mov 0xc, %i0 ! c <_TLS_Alignment+0xb>
<== NOT EXECUTED
if ( key_value_pair != NULL ) {
40018690: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40018694: 02 80 00 2c be 40018744 <pthread_setspecific+0x144>
<== NOT EXECUTED
40018698: 88 10 00 08 mov %o0, %g4
<== NOT EXECUTED
old_last = tail->previous;
4001869c: c2 06 a0 1c ld [ %i2 + 0x1c ], %g1
<== NOT EXECUTED
return &the_chain->Tail.Node;
400186a0: 84 06 a0 18 add %i2, 0x18, %g2
<== NOT EXECUTED
key_value_pair->key = key;
400186a4: fa 22 20 18 st %i5, [ %o0 + 0x18 ]
<== NOT EXECUTED
_RBTree_Initialize_node( &key_value_pair->Lookup_node );
400186a8: b0 02 20 08 add %o0, 8, %i0
<== NOT EXECUTED
key_value_pair->thread = executing;
400186ac: f8 22 20 1c st %i4, [ %o0 + 0x1c ]
<== NOT EXECUTED
key_value_pair->value = RTEMS_DECONST( void *, value );
400186b0: f2 22 20 20 st %i1, [ %o0 + 0x20 ]
<== NOT EXECUTED
the_node->next = tail;
400186b4: c4 22 00 00 st %g2, [ %o0 ]
<== NOT EXECUTED
tail->previous = the_node;
400186b8: d0 26 a0 1c st %o0, [ %i2 + 0x1c ]
<== NOT EXECUTED
old_last->next = the_node;
400186bc: d0 20 40 00 st %o0, [ %g1 ]
<== NOT EXECUTED
the_node->previous = old_last;
400186c0: c2 22 20 04 st %g1, [ %o0 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400186c4: 91 d0 20 09 ta 9
<== NOT EXECUTED
parent = NULL;
400186c8: b8 10 20 00 clr %i4
<== NOT EXECUTED
link = _RBTree_Root_reference( the_rbtree );
400186cc: 86 10 00 1b mov %i3, %g3
<== NOT EXECUTED
while ( *link != NULL ) {
400186d0: c4 00 c0 00 ld [ %g3 ], %g2
<== NOT EXECUTED
400186d4: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
400186d8: 22 80 00 41 be,a 400187dc <pthread_setspecific+0x1dc>
<== NOT EXECUTED
400186dc: f8 21 20 10 st %i4, [ %g4 + 0x10 ]
<== NOT EXECUTED
if ( ( *less )( key, parent ) ) {
400186e0: f8 00 a0 10 ld [ %g2 + 0x10 ], %i4
<== NOT EXECUTED
400186e4: 80 a7 40 1c cmp %i5, %i4
<== NOT EXECUTED
400186e8: 1a 80 00 03 bcc 400186f4 <pthread_setspecific+0xf4>
<== NOT EXECUTED
400186ec: 86 00 a0 04 add %g2, 4, %g3
<== NOT EXECUTED
return &RB_LEFT( the_node, Node );
400186f0: 86 10 00 02 mov %g2, %g3
<== NOT EXECUTED
link = _RBTree_Root_const_reference( the_rbtree );
400186f4: 10 bf ff f7 b 400186d0 <pthread_setspecific+0xd0>
<== NOT EXECUTED
400186f8: b8 10 00 02 mov %g2, %i4
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400186fc: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40018700: 01 00 00 00 nop
<== NOT EXECUTED
} else {
eno = _POSIX_Keys_Delete_value( key, executing );
}
return eno;
}
40018704: 81 c7 e0 08 ret
<== NOT EXECUTED
40018708: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
_RBTree_Extract(
4001870c: 40 00 0a e4 call 4001b29c <_RBTree_Extract>
<== NOT EXECUTED
40018710: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
40018714: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
40018718: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4001871c: 01 00 00 00 nop
<== NOT EXECUTED
next = the_node->next;
40018720: c4 07 00 00 ld [ %i4 ], %g2
<== NOT EXECUTED
previous = the_node->previous;
40018724: c2 07 20 04 ld [ %i4 + 4 ], %g1
<== NOT EXECUTED
next->previous = previous;
40018728: c2 20 a0 04 st %g1, [ %g2 + 4 ]
<== NOT EXECUTED
_Freechain_Put( &_POSIX_Keys_Keypool, key_value_pair );
4001872c: 11 10 00 d2 sethi %hi(0x40034800), %o0
<== NOT EXECUTED
previous->next = next;
40018730: c4 20 40 00 st %g2, [ %g1 ]
<== NOT EXECUTED
40018734: 92 10 00 1c mov %i4, %o1
<== NOT EXECUTED
eno = 0;
40018738: b0 10 20 00 clr %i0
<== NOT EXECUTED
4001873c: 40 00 01 96 call 40018d94 <_Freechain_Put>
<== NOT EXECUTED
40018740: 90 12 21 fc or %o0, 0x1fc, %o0
<== NOT EXECUTED
_RTEMS_Unlock_allocator();
40018744: 40 00 01 38 call 40018c24 <_RTEMS_Unlock_allocator>
<== NOT EXECUTED
40018748: 01 00 00 00 nop
<== NOT EXECUTED
return eno;
4001874c: 81 c7 e0 08 ret
<== NOT EXECUTED
40018750: 81 e8 00 00 restore
<== NOT EXECUTED
_RTEMS_Lock_allocator();
40018754: 40 00 01 2f call 40018c10 <_RTEMS_Lock_allocator>
<== NOT EXECUTED
40018758: 01 00 00 00 nop
<== NOT EXECUTED
return (POSIX_Keys_Control *)
4001875c: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
40018760: 13 10 00 d2 sethi %hi(0x40034800), %o1
<== NOT EXECUTED
eno = EINVAL;
40018764: b0 10 20 16 mov 0x16, %i0
<== NOT EXECUTED
40018768: 40 00 0a 1c call 4001afd8 <_Objects_Get_no_protection>
<== NOT EXECUTED
4001876c: 92 12 61 c0 or %o1, 0x1c0, %o1
<== NOT EXECUTED
if ( the_key != NULL ) {
40018770: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40018774: 02 bf ff f4 be 40018744 <pthread_setspecific+0x144>
<== NOT EXECUTED
40018778: 01 00 00 00 nop
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4001877c: 91 d0 20 09 ta 9
<== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Keys_Key_value_pair *_POSIX_Keys_Key_value_find(
pthread_key_t key,
const Thread_Control *the_thread
)
{
return _RBTree_Find_inline(
40018780: 90 07 21 60 add %i4, 0x160, %o0
<== NOT EXECUTED
40018784: 84 10 00 08 mov %o0, %g2
<== NOT EXECUTED
while ( *link != NULL ) {
40018788: d2 00 80 00 ld [ %g2 ], %o1
<== NOT EXECUTED
4001878c: 80 a2 60 00 cmp %o1, 0
<== NOT EXECUTED
40018790: 02 80 00 0d be 400187c4 <pthread_setspecific+0x1c4>
<== NOT EXECUTED
40018794: b8 02 7f f8 add %o1, -8, %i4
<== NOT EXECUTED
return *the_left == the_right->key;
40018798: c4 07 20 18 ld [ %i4 + 0x18 ], %g2
<== NOT EXECUTED
if ( ( *equal )( key, parent ) ) {
4001879c: 80 a7 40 02 cmp %i5, %g2
<== NOT EXECUTED
400187a0: 02 bf ff db be 4001870c <pthread_setspecific+0x10c>
<== NOT EXECUTED
400187a4: 01 00 00 00 nop
<== NOT EXECUTED
} else if ( ( *less )( key, parent ) ) {
400187a8: 1a bf ff f8 bcc 40018788 <pthread_setspecific+0x188>
<== NOT EXECUTED
400187ac: 84 02 60 04 add %o1, 4, %g2
<== NOT EXECUTED
return &RB_LEFT( the_node, Node );
400187b0: 84 10 00 09 mov %o1, %g2
<== NOT EXECUTED
while ( *link != NULL ) {
400187b4: d2 00 80 00 ld [ %g2 ], %o1
<== NOT EXECUTED
400187b8: 80 a2 60 00 cmp %o1, 0
<== NOT EXECUTED
400187bc: 12 bf ff f7 bne 40018798 <pthread_setspecific+0x198>
<== NOT EXECUTED
400187c0: b8 02 7f f8 add %o1, -8, %i4
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400187c4: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400187c8: 01 00 00 00 nop
<== NOT EXECUTED
_RTEMS_Unlock_allocator();
400187cc: 40 00 01 16 call 40018c24 <_RTEMS_Unlock_allocator>
<== NOT EXECUTED
400187d0: b0 10 20 00 clr %i0 ! 0 <PROM_START>
<== NOT EXECUTED
return eno;
400187d4: 81 c7 e0 08 ret
<== NOT EXECUTED
400187d8: 81 e8 00 00 restore
<== NOT EXECUTED
RB_SET( child, parent, Node );
400187dc: 84 10 20 01 mov 1, %g2
<== NOT EXECUTED
400187e0: c0 21 20 0c clr [ %g4 + 0xc ]
<== NOT EXECUTED
_RBTree_Insert_color( the_rbtree, the_node );
400187e4: 92 10 00 18 mov %i0, %o1
<== NOT EXECUTED
RB_SET( child, parent, Node );
400187e8: c0 21 20 08 clr [ %g4 + 8 ]
<== NOT EXECUTED
_RBTree_Insert_color( the_rbtree, the_node );
400187ec: 90 10 00 1b mov %i3, %o0
<== NOT EXECUTED
RB_SET( child, parent, Node );
400187f0: c4 21 20 14 st %g2, [ %g4 + 0x14 ]
<== NOT EXECUTED
*link = child;
400187f4: f0 20 c0 00 st %i0, [ %g3 ]
<== NOT EXECUTED
_RBTree_Insert_color( the_rbtree, the_node );
400187f8: 40 00 0c 0b call 4001b824 <_RBTree_Insert_color>
<== NOT EXECUTED
400187fc: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
register uint32_t _psr __asm__("g1") = psr; /* input to trap handler */
40018800: c2 07 bf fc ld [ %fp + -4 ], %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
40018804: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40018808: 01 00 00 00 nop
<== NOT EXECUTED
eno = 0;
4001880c: 10 bf ff ce b 40018744 <pthread_setspecific+0x144>
<== NOT EXECUTED
40018810: b0 10 20 00 clr %i0 ! 0 <PROM_START>
<== NOT EXECUTED
400589a8 <pthread_sigmask>:
int pthread_sigmask(
int how,
const sigset_t *__restrict set,
sigset_t *__restrict oset
)
{
400589a8: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
POSIX_API_Control *api;
if ( !set && !oset )
400589ac: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
400589b0: 12 80 00 04 bne 400589c0 <pthread_sigmask+0x18>
<== NOT EXECUTED
400589b4: 80 a6 a0 00 cmp %i2, 0
<== NOT EXECUTED
400589b8: 02 80 00 12 be 40058a00 <pthread_sigmask+0x58>
<== NOT EXECUTED
400589bc: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
api = _Thread_Get_executing()->API_Extensions[ THREAD_API_POSIX ];
400589c0: c2 01 a0 20 ld [ %g6 + 0x20 ], %g1
<== NOT EXECUTED
if ( oset )
400589c4: 80 a6 a0 00 cmp %i2, 0
<== NOT EXECUTED
400589c8: 02 80 00 05 be 400589dc <pthread_sigmask+0x34>
<== NOT EXECUTED
400589cc: c2 00 61 5c ld [ %g1 + 0x15c ], %g1
<== NOT EXECUTED
*oset = ~api->signals_unblocked;
400589d0: c4 00 60 68 ld [ %g1 + 0x68 ], %g2
<== NOT EXECUTED
400589d4: 84 38 00 02 xnor %g0, %g2, %g2
<== NOT EXECUTED
400589d8: c4 26 80 00 st %g2, [ %i2 ]
<== NOT EXECUTED
if ( !set )
400589dc: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
400589e0: 02 80 00 1b be 40058a4c <pthread_sigmask+0xa4>
<== NOT EXECUTED
400589e4: 80 a6 20 01 cmp %i0, 1
<== NOT EXECUTED
return 0;
switch ( how ) {
400589e8: 02 80 00 1e be 40058a60 <pthread_sigmask+0xb8>
<== NOT EXECUTED
400589ec: 80 a6 20 02 cmp %i0, 2
<== NOT EXECUTED
400589f0: 02 80 00 0a be 40058a18 <pthread_sigmask+0x70>
<== NOT EXECUTED
400589f4: 80 a6 20 00 cmp %i0, 0
<== NOT EXECUTED
400589f8: 22 80 00 17 be,a 40058a54 <pthread_sigmask+0xac>
<== NOT EXECUTED
400589fc: c4 06 40 00 ld [ %i1 ], %g2
<== NOT EXECUTED
break;
case SIG_SETMASK:
api->signals_unblocked = ~*set;
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
40058a00: 40 00 0f c5 call 4005c914 <__errno>
<== NOT EXECUTED
40058a04: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40058a08: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40058a0c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40058a10: 81 c7 e0 08 ret
<== NOT EXECUTED
40058a14: 81 e8 00 00 restore
<== NOT EXECUTED
api->signals_unblocked |= *set;
40058a18: c4 00 60 68 ld [ %g1 + 0x68 ], %g2
<== NOT EXECUTED
40058a1c: c6 06 40 00 ld [ %i1 ], %g3
<== NOT EXECUTED
40058a20: 84 10 80 03 or %g2, %g3, %g2
<== NOT EXECUTED
40058a24: c4 20 60 68 st %g2, [ %g1 + 0x68 ]
<== NOT EXECUTED
/* XXX are there critical section problems here? */
/* XXX evaluate the new set */
if ( api->signals_unblocked &
(api->signals_pending | _POSIX_signals_Pending) ) {
40058a28: 07 10 02 45 sethi %hi(0x40091400), %g3
<== NOT EXECUTED
40058a2c: c2 00 60 6c ld [ %g1 + 0x6c ], %g1
<== NOT EXECUTED
40058a30: c6 00 e2 b4 ld [ %g3 + 0x2b4 ], %g3
<== NOT EXECUTED
40058a34: 82 10 40 03 or %g1, %g3, %g1
<== NOT EXECUTED
if ( api->signals_unblocked &
40058a38: 80 88 40 02 btst %g1, %g2
<== NOT EXECUTED
40058a3c: 02 80 00 04 be 40058a4c <pthread_sigmask+0xa4>
<== NOT EXECUTED
40058a40: 01 00 00 00 nop
<== NOT EXECUTED
_Thread_Dispatch();
40058a44: 7f ff 14 67 call 4001dbe0 <_Thread_Dispatch>
<== NOT EXECUTED
40058a48: 01 00 00 00 nop
<== NOT EXECUTED
}
return 0;
}
40058a4c: 81 c7 e0 08 ret
<== NOT EXECUTED
40058a50: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
api->signals_unblocked = ~*set;
40058a54: 84 38 00 02 xnor %g0, %g2, %g2
<== NOT EXECUTED
break;
40058a58: 10 bf ff f4 b 40058a28 <pthread_sigmask+0x80>
<== NOT EXECUTED
40058a5c: c4 20 60 68 st %g2, [ %g1 + 0x68 ]
<== NOT EXECUTED
api->signals_unblocked &= ~*set;
40058a60: c6 00 60 68 ld [ %g1 + 0x68 ], %g3
<== NOT EXECUTED
40058a64: c4 06 40 00 ld [ %i1 ], %g2
<== NOT EXECUTED
40058a68: 84 28 c0 02 andn %g3, %g2, %g2
<== NOT EXECUTED
break;
40058a6c: 10 bf ff ef b 40058a28 <pthread_sigmask+0x80>
<== NOT EXECUTED
40058a70: c4 20 60 68 st %g2, [ %g1 + 0x68 ]
<== NOT EXECUTED
40043b0c <sigaddset>:
int sigaddset(
sigset_t *set,
int signo
)
{
40043b0c: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
if ( !set )
40043b10: 80 a6 20 00 cmp %i0, 0
<== NOT EXECUTED
40043b14: 02 80 00 0d be 40043b48 <sigaddset+0x3c>
<== NOT EXECUTED
40043b18: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !signo )
40043b1c: 02 80 00 0b be 40043b48 <sigaddset+0x3c>
<== NOT EXECUTED
40043b20: b2 06 7f ff add %i1, -1, %i1
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(signo) )
40043b24: 80 a6 60 1f cmp %i1, 0x1f
<== NOT EXECUTED
40043b28: 18 80 00 08 bgu 40043b48 <sigaddset+0x3c>
<== NOT EXECUTED
40043b2c: 84 10 20 01 mov 1, %g2
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
*set |= signo_to_mask(signo);
40043b30: c2 06 00 00 ld [ %i0 ], %g1
<== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
40043b34: b3 28 80 19 sll %g2, %i1, %i1
<== NOT EXECUTED
40043b38: b2 10 40 19 or %g1, %i1, %i1
<== NOT EXECUTED
40043b3c: f2 26 00 00 st %i1, [ %i0 ]
<== NOT EXECUTED
return 0;
}
40043b40: 81 c7 e0 08 ret
<== NOT EXECUTED
40043b44: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
40043b48: 40 00 63 73 call 4005c914 <__errno>
<== NOT EXECUTED
40043b4c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40043b50: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40043b54: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40043b58: 81 c7 e0 08 ret
<== NOT EXECUTED
40043b5c: 81 e8 00 00 restore
<== NOT EXECUTED
4002cf1c <sigemptyset>:
#include <rtems/seterr.h>
int sigemptyset(
sigset_t *set
)
{
4002cf1c: 9d e3 bf a0 save %sp, -96, %sp
if ( !set )
4002cf20: 80 a6 20 00 cmp %i0, 0
4002cf24: 02 80 00 05 be 4002cf38 <sigemptyset+0x1c>
<== NEVER TAKEN
4002cf28: 01 00 00 00 nop
rtems_set_errno_and_return_minus_one( EINVAL );
*set = 0;
4002cf2c: c0 26 00 00 clr [ %i0 ]
return 0;
}
4002cf30: 81 c7 e0 08 ret
4002cf34: 91 e8 20 00 restore %g0, 0, %o0
rtems_set_errno_and_return_minus_one( EINVAL );
4002cf38: 7f ff bb 72 call 4001bd00 <__errno>
<== NOT EXECUTED
4002cf3c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4002cf40: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4002cf44: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4002cf48: 81 c7 e0 08 ret
<== NOT EXECUTED
4002cf4c: 81 e8 00 00 restore
<== NOT EXECUTED
40043b94 <sigprocmask>:
/*
* P1003.1c/Draft 10, p. 38 maps sigprocmask to pthread_sigmask.
*/
#if defined(RTEMS_POSIX_API)
return pthread_sigmask( how, set, oset );
40043b94: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
40043b98: 40 00 53 84 call 400589a8 <pthread_sigmask>
<== NOT EXECUTED
40043b9c: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED