RTEMS-5
Annotated Report
Fri Aug 10 16:28:55 2018
40012878 <_Copyright_Notice>:
40012878: 43 4f 50 59 52 49 47 48 54 20 28 63 29 20 31 39 COPYRIGHT (c) 19
40012888: 38 39 2d 32 30 30 38 2e 0a 4f 6e 2d 4c 69 6e 65 89-2008..On-Line
40012898: 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 52 65 Applications Re
400128a8: 73 65 61 72 63 68 20 43 6f 72 70 6f 72 61 74 69 search Corporati
400128b8: 6f 6e 20 28 4f 41 52 29 2e 0a 00 00 00 00 00 00 on (OAR)........
400128c8: 5f 41 6c 6c 6f 63 61 74 6f 72 00 00 00 00 00 00 _Allocator......
400128d8: 28 66 6d 74 20 6e 75 6c 6c 29 0a 00 00 00 00 00 (fmt null)......
400128e8: 28 6e 75 6c 6c 29 00 (null).
400073a4 <_IO_Initialize_all_drivers>:
#include <rtems/ioimpl.h>
bool _IO_All_drivers_initialized;
void _IO_Initialize_all_drivers( void )
{
400073a4: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_major_number major;
_IO_All_drivers_initialized = true;
400073a8: 03 10 00 52 sethi %hi(0x40014800), %g1
400073ac: 84 10 20 01 mov 1, %g2
400073b0: c4 28 60 60 stb %g2, [ %g1 + 0x60 ]
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
400073b4: 03 10 00 43 sethi %hi(0x40010c00), %g1
400073b8: f8 00 61 14 ld [ %g1 + 0x114 ], %i4 ! 40010d14 <_IO_Number_of_drivers>
400073bc: 80 a7 20 00 cmp %i4, 0
400073c0: 02 80 00 0a be 400073e8 <_IO_Initialize_all_drivers+0x44>
<== NEVER TAKEN
400073c4: ba 10 20 00 clr %i5
(void) rtems_io_initialize( major, 0, NULL );
400073c8: 90 10 00 1d mov %i5, %o0
400073cc: 94 10 20 00 clr %o2
400073d0: 40 00 1d 18 call 4000e830 <rtems_io_initialize>
400073d4: 92 10 20 00 clr %o1
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
400073d8: ba 07 60 01 inc %i5
400073dc: 80 a7 40 1c cmp %i5, %i4
400073e0: 12 bf ff fb bne 400073cc <_IO_Initialize_all_drivers+0x28>
400073e4: 90 10 00 1d mov %i5, %o0
}
400073e8: 81 c7 e0 08 ret
400073ec: 81 e8 00 00 restore
400116dc <_Objects_Information_table>:
400116dc: 00 00 00 00 40 01 42 84 40 01 42 58 40 01 42 24 ....@.B.@.BX@.B$
400116ec: 00 00 00 00 5f 41 6c 6c 6f 63 61 74 6f 72 00 00 ...._Allocator..
400116fc: 00 00 00 00 5f 54 4f 44 00 00 00 00 28 66 6d 74 ...._TOD....(fmt
4001170c: 20 6e 75 6c 6c 29 0a 00 00 00 00 00 28 6e 75 6c null)......(nul
4001171c: 6c 29 00 l).
40007694 <rtems_chain_append>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
40007694: 91 d0 20 09 ta 9
<== NOT EXECUTED
old_last = tail->previous;
40007698: c4 02 20 08 ld [ %o0 + 8 ], %g2
<== NOT EXECUTED
return &the_chain->Tail.Node;
4000769c: 86 02 20 04 add %o0, 4, %g3
<== NOT EXECUTED
the_node->next = tail;
400076a0: c6 22 40 00 st %g3, [ %o1 ]
<== NOT EXECUTED
tail->previous = the_node;
400076a4: d2 22 20 08 st %o1, [ %o0 + 8 ]
<== NOT EXECUTED
old_last->next = the_node;
400076a8: d2 20 80 00 st %o1, [ %g2 ]
<== NOT EXECUTED
the_node->previous = old_last;
400076ac: c4 22 60 04 st %g2, [ %o1 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400076b0: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400076b4: 01 00 00 00 nop
rtems_interrupt_lock_context lock_context;
chain_acquire( &lock_context );
_Chain_Append_unprotected( chain, node );
chain_release( &lock_context );
}
400076b8: 81 c3 e0 08 retl
400076bc: 01 00 00 00 nop
400076e8 <rtems_chain_append_with_empty_check>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400076e8: 91 d0 20 09 ta 9
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
400076ec: c8 02 00 00 ld [ %o0 ], %g4
<== NOT EXECUTED
old_last = tail->previous;
400076f0: c6 02 20 08 ld [ %o0 + 8 ], %g3
<== NOT EXECUTED
return &the_chain->Tail.Node;
400076f4: 84 02 20 04 add %o0, 4, %g2
<== NOT EXECUTED
the_node->next = tail;
400076f8: c4 22 40 00 st %g2, [ %o1 ]
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
400076fc: 84 18 80 04 xor %g2, %g4, %g2
<== NOT EXECUTED
tail->previous = the_node;
40007700: d2 22 20 08 st %o1, [ %o0 + 8 ]
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
40007704: 80 a0 00 02 cmp %g0, %g2
<== NOT EXECUTED
old_last->next = the_node;
40007708: d2 20 c0 00 st %o1, [ %g3 ]
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
4000770c: 90 60 3f ff subx %g0, -1, %o0
<== NOT EXECUTED
the_node->previous = old_last;
40007710: c6 22 60 04 st %g3, [ %o1 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
40007714: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007718: 01 00 00 00 nop
chain_acquire( &lock_context );
was_empty = _Chain_Append_with_empty_check_unprotected( chain, node );
chain_release( &lock_context );
return was_empty;
}
4000771c: 81 c3 e0 08 retl
40007720: 01 00 00 00 nop
40007634 <rtems_chain_get>:
_Chain_Extract_unprotected( node );
chain_release( &lock_context );
}
rtems_chain_node *rtems_chain_get( rtems_chain_control *chain )
{
40007634: 84 10 00 08 mov %o0, %g2
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
40007638: 91 d0 20 09 ta 9
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4000763c: d0 02 00 00 ld [ %o0 ], %o0
return &the_chain->Tail.Node;
40007640: 86 00 a0 04 add %g2, 4, %g3
if ( !_Chain_Is_empty(the_chain))
40007644: 80 a2 00 03 cmp %o0, %g3
40007648: 22 80 00 05 be,a 4000765c <rtems_chain_get+0x28>
4000764c: 90 10 20 00 clr %o0
new_first = old_first->next;
40007650: c6 02 00 00 ld [ %o0 ], %g3
<== NOT EXECUTED
head->next = new_first;
40007654: c6 20 80 00 st %g3, [ %g2 ]
<== NOT EXECUTED
new_first->previous = head;
40007658: c4 20 e0 04 st %g2, [ %g3 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000765c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007660: 01 00 00 00 nop
chain_acquire( &lock_context );
node = _Chain_Get_unprotected( chain );
chain_release( &lock_context );
return node;
}
40007664: 81 c3 e0 08 retl
40007668: 01 00 00 00 nop
4000775c <rtems_chain_get_with_empty_check>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000775c: 91 d0 20 09 ta 9
<== NOT EXECUTED
Chain_Node *old_first = head->next;
40007760: c6 02 00 00 ld [ %o0 ], %g3
return &the_chain->Tail.Node;
40007764: 84 02 20 04 add %o0, 4, %g2
if ( old_first != tail ) {
40007768: 80 a0 80 03 cmp %g2, %g3
4000776c: 22 80 00 0d be,a 400077a0 <rtems_chain_get_with_empty_check+0x44>
40007770: c0 22 40 00 clr [ %o1 ]
Chain_Node *new_first = old_first->next;
40007774: c8 00 c0 00 ld [ %g3 ], %g4
<== NOT EXECUTED
head->next = new_first;
40007778: c8 22 00 00 st %g4, [ %o0 ]
<== NOT EXECUTED
is_empty_now = new_first == tail;
4000777c: 84 18 80 04 xor %g2, %g4, %g2
<== NOT EXECUTED
new_first->previous = head;
40007780: d0 21 20 04 st %o0, [ %g4 + 4 ]
<== NOT EXECUTED
is_empty_now = new_first == tail;
40007784: 80 a0 00 02 cmp %g0, %g2
<== NOT EXECUTED
*the_node = old_first;
40007788: c6 22 40 00 st %g3, [ %o1 ]
<== NOT EXECUTED
is_empty_now = new_first == tail;
4000778c: 90 60 3f ff subx %g0, -1, %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
40007790: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007794: 01 00 00 00 nop
chain_acquire( &lock_context );
is_empty_now = _Chain_Get_with_empty_check_unprotected( chain, node );
chain_release( &lock_context );
return is_empty_now;
}
40007798: 81 c3 e0 08 retl
4000779c: 90 0a 20 01 and %o0, 1, %o0
bool is_empty_now = true;
400077a0: 90 10 20 01 mov 1, %o0
<== NOT EXECUTED
400077a4: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400077a8: 01 00 00 00 nop
400077ac: 81 c3 e0 08 retl
400077b0: 90 0a 20 01 and %o0, 1, %o0
400075ac <rtems_chain_get_with_wait>:
rtems_chain_control *chain,
rtems_event_set events,
rtems_interval timeout,
rtems_chain_node **node_ptr
)
{
400075ac: 9d e3 bf 98 save %sp, -104, %sp
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_chain_node *node = NULL;
while (
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
400075b0: 40 00 00 21 call 40007634 <rtems_chain_get>
400075b4: 90 10 00 18 mov %i0, %o0
) {
rtems_event_set out;
sc = rtems_event_receive(
400075b8: 96 07 bf fc add %fp, -4, %o3
&& (node = rtems_chain_get( chain )) == NULL
400075bc: ba 10 00 08 mov %o0, %i5
sc = rtems_event_receive(
400075c0: 94 10 00 1a mov %i2, %o2
400075c4: 92 10 20 00 clr %o1
&& (node = rtems_chain_get( chain )) == NULL
400075c8: 80 a7 60 00 cmp %i5, 0
400075cc: 12 80 00 0a bne 400075f4 <rtems_chain_get_with_wait+0x48>
400075d0: 90 10 00 19 mov %i1, %o0
sc = rtems_event_receive(
400075d4: 7f ff fe f7 call 400071b0 <rtems_event_receive>
400075d8: 01 00 00 00 nop
while (
400075dc: 80 a2 20 00 cmp %o0, 0
400075e0: 02 bf ff f4 be 400075b0 <rtems_chain_get_with_wait+0x4>
<== NEVER TAKEN
400075e4: 01 00 00 00 nop
timeout,
&out
);
}
*node_ptr = node;
400075e8: fa 26 c0 00 st %i5, [ %i3 ]
return sc;
}
400075ec: 81 c7 e0 08 ret
400075f0: 91 e8 00 08 restore %g0, %o0, %o0
400075f4: 90 10 20 00 clr %o0
*node_ptr = node;
400075f8: fa 26 c0 00 st %i5, [ %i3 ]
}
400075fc: 81 c7 e0 08 ret
40007600: 91 e8 00 08 restore %g0, %o0, %o0
4000766c <rtems_chain_insert>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000766c: 91 d0 20 09 ta 9
<== NOT EXECUTED
the_node->previous = after_node;
40007670: d0 22 60 04 st %o0, [ %o1 + 4 ]
<== NOT EXECUTED
before_node = after_node->next;
40007674: c4 02 00 00 ld [ %o0 ], %g2
<== NOT EXECUTED
after_node->next = the_node;
40007678: d2 22 00 00 st %o1, [ %o0 ]
<== NOT EXECUTED
the_node->next = before_node;
4000767c: c4 22 40 00 st %g2, [ %o1 ]
<== NOT EXECUTED
before_node->previous = the_node;
40007680: d2 20 a0 04 st %o1, [ %g2 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
40007684: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007688: 01 00 00 00 nop
rtems_interrupt_lock_context lock_context;
chain_acquire( &lock_context );
_Chain_Insert_unprotected( after_node, node );
chain_release( &lock_context );
}
4000768c: 81 c3 e0 08 retl
40007690: 01 00 00 00 nop
400076c0 <rtems_chain_prepend>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400076c0: 91 d0 20 09 ta 9
<== NOT EXECUTED
the_node->previous = after_node;
400076c4: d0 22 60 04 st %o0, [ %o1 + 4 ]
<== NOT EXECUTED
before_node = after_node->next;
400076c8: c4 02 00 00 ld [ %o0 ], %g2
<== NOT EXECUTED
after_node->next = the_node;
400076cc: d2 22 00 00 st %o1, [ %o0 ]
<== NOT EXECUTED
the_node->next = before_node;
400076d0: c4 22 40 00 st %g2, [ %o1 ]
<== NOT EXECUTED
before_node->previous = the_node;
400076d4: d2 20 a0 04 st %o1, [ %g2 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400076d8: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400076dc: 01 00 00 00 nop
rtems_interrupt_lock_context lock_context;
chain_acquire( &lock_context );
_Chain_Prepend_unprotected( chain, node );
chain_release( &lock_context );
}
400076e0: 81 c3 e0 08 retl
400076e4: 01 00 00 00 nop
40007724 <rtems_chain_prepend_with_empty_check>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
40007724: 91 d0 20 09 ta 9
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
40007728: c4 02 00 00 ld [ %o0 ], %g2
<== NOT EXECUTED
the_node->previous = after_node;
4000772c: d0 22 60 04 st %o0, [ %o1 + 4 ]
<== NOT EXECUTED
return &the_chain->Tail.Node;
40007730: 86 02 20 04 add %o0, 4, %g3
<== NOT EXECUTED
after_node->next = the_node;
40007734: d2 22 00 00 st %o1, [ %o0 ]
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
40007738: 86 18 80 03 xor %g2, %g3, %g3
<== NOT EXECUTED
the_node->next = before_node;
4000773c: c4 22 40 00 st %g2, [ %o1 ]
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
40007740: 80 a0 00 03 cmp %g0, %g3
<== NOT EXECUTED
before_node->previous = the_node;
40007744: d2 20 a0 04 st %o1, [ %g2 + 4 ]
<== NOT EXECUTED
== _Chain_Immutable_tail( the_chain );
40007748: 90 60 3f ff subx %g0, -1, %o0
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000774c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007750: 01 00 00 00 nop
chain_acquire( &lock_context );
was_empty = _Chain_Prepend_with_empty_check_unprotected( chain, node );
chain_release( &lock_context );
return was_empty;
}
40007754: 81 c3 e0 08 retl
40007758: 01 00 00 00 nop
40007384 <rtems_fatal_error_occurred>:
#include <rtems/score/interr.h>
void rtems_fatal_error_occurred(
uint32_t the_error
)
{
40007384: 9d e3 bf a0 save %sp, -96, %sp
_Terminate( INTERNAL_ERROR_RTEMS_API, the_error );
40007388: 90 10 20 01 mov 1, %o0
4000738c: 40 00 02 86 call 40007da4 <_Terminate>
40007390: 92 10 00 18 mov %i0, %o1
40007394: 01 00 00 00 nop
<== NOT EXECUTED
40007338 <rtems_initialize_executive>:
RTEMS_SYSINIT_DEVICE_DRIVERS,
RTEMS_SYSINIT_ORDER_MIDDLE
);
void rtems_initialize_executive(void)
{
40007338: 9d e3 bf a0 save %sp, -96, %sp
RTEMS_INLINE_ROUTINE uintptr_t _Linker_set_Obfuscate( const void *ptr )
{
uintptr_t addr;
addr = (uintptr_t) ptr;
4000733c: 3b 10 00 47 sethi %hi(0x40011c00), %i5
const rtems_sysinit_item *item;
/* Invoke the registered system initialization handlers */
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
40007340: 39 10 00 47 sethi %hi(0x40011c00), %i4
RTEMS_OBFUSCATE_VARIABLE( addr );
40007344: ba 17 62 a0 or %i5, 0x2a0, %i5
40007348: b8 17 22 e4 or %i4, 0x2e4, %i4
4000734c: 80 a7 40 1c cmp %i5, %i4
40007350: 02 80 00 09 be 40007374 <rtems_initialize_executive+0x3c>
<== NEVER TAKEN
40007354: 03 10 00 52 sethi %hi(0x40014800), %g1
( *item->handler )();
40007358: c2 07 40 00 ld [ %i5 ], %g1
4000735c: 9f c0 40 00 call %g1
40007360: ba 07 60 04 add %i5, 4, %i5
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
40007364: 80 a7 40 1c cmp %i5, %i4
40007368: 32 bf ff fd bne,a 4000735c <rtems_initialize_executive+0x24>
4000736c: c2 07 40 00 ld [ %i5 ], %g1
_System_state_Current = state;
40007370: 03 10 00 52 sethi %hi(0x40014800), %g1
40007374: 84 10 20 02 mov 2, %g2
_System_state_Set( SYSTEM_STATE_UP );
_SMP_Request_start_multitasking();
_Thread_Start_multitasking();
40007378: 40 00 15 24 call 4000c808 <_Thread_Start_multitasking>
4000737c: c4 20 60 6c st %g2, [ %g1 + 0x6c ]
40007380: 01 00 00 00 nop
<== NOT EXECUTED
4000a918 <rtems_io_register_driver>:
rtems_status_code rtems_io_register_driver(
rtems_device_major_number major,
const rtems_driver_address_table *driver_table,
rtems_device_major_number *registered_major
)
{
4000a918: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_major_number major_limit = _IO_Number_of_drivers;
4000a91c: 3b 10 00 52 sethi %hi(0x40014800), %i5
ISR_lock_Context lock_context;
if ( rtems_interrupt_is_in_progress() )
4000a920: 40 00 06 15 call 4000c174 <_ISR_Is_in_progress>
4000a924: f8 07 60 64 ld [ %i5 + 0x64 ], %i4 ! 40014864 <_IO_Number_of_drivers>
4000a928: 80 a2 20 00 cmp %o0, 0
4000a92c: 12 80 00 45 bne 4000aa40 <rtems_io_register_driver+0x128>
4000a930: 80 a6 a0 00 cmp %i2, 0
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
4000a934: 02 80 00 40 be 4000aa34 <rtems_io_register_driver+0x11c>
4000a938: 80 a6 60 00 cmp %i1, 0
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
if ( driver_table == NULL )
4000a93c: 02 80 00 3e be 4000aa34 <rtems_io_register_driver+0x11c>
4000a940: f8 26 80 00 st %i4, [ %i2 ]
return table->initialization_entry == NULL && table->open_entry == NULL;
4000a944: c2 06 40 00 ld [ %i1 ], %g1
4000a948: 80 a0 60 00 cmp %g1, 0
4000a94c: 22 80 00 37 be,a 4000aa28 <rtems_io_register_driver+0x110>
4000a950: c2 06 60 04 ld [ %i1 + 4 ], %g1
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
4000a954: 80 a7 00 18 cmp %i4, %i0
4000a958: 08 80 00 4a bleu 4000aa80 <rtems_io_register_driver+0x168>
4000a95c: 82 10 20 0a mov 0xa, %g1
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000a960: 91 d0 20 09 ta 9
<== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
_IO_Driver_registration_acquire( &lock_context );
if ( major == 0 ) {
4000a964: 80 a6 20 00 cmp %i0, 0
4000a968: 12 80 00 39 bne 4000aa4c <rtems_io_register_driver+0x134>
4000a96c: 85 2e 20 01 sll %i0, 1, %g2
rtems_device_major_number n = _IO_Number_of_drivers;
4000a970: fa 07 60 64 ld [ %i5 + 0x64 ], %i5
for ( m = 0; m < n; ++m ) {
4000a974: 80 a7 60 00 cmp %i5, 0
4000a978: 02 80 00 4f be 4000aab4 <rtems_io_register_driver+0x19c>
<== NEVER TAKEN
4000a97c: 07 10 00 5a sethi %hi(0x40016800), %g3
4000a980: 86 10 e3 30 or %g3, 0x330, %g3 ! 40016b30 <_IO_Driver_address_table>
4000a984: 10 80 00 05 b 4000a998 <rtems_io_register_driver+0x80>
4000a988: 84 10 00 03 mov %g3, %g2
4000a98c: 80 a7 40 18 cmp %i5, %i0
4000a990: 02 80 00 3e be 4000aa88 <rtems_io_register_driver+0x170>
4000a994: 84 00 a0 18 add %g2, 0x18, %g2
return table->initialization_entry == NULL && table->open_entry == NULL;
4000a998: c8 00 80 00 ld [ %g2 ], %g4
4000a99c: 80 a1 20 00 cmp %g4, 0
4000a9a0: 32 bf ff fb bne,a 4000a98c <rtems_io_register_driver+0x74>
4000a9a4: b0 06 20 01 inc %i0
4000a9a8: c8 00 a0 04 ld [ %g2 + 4 ], %g4
4000a9ac: 80 a1 20 00 cmp %g4, 0
4000a9b0: 32 bf ff f7 bne,a 4000a98c <rtems_io_register_driver+0x74>
4000a9b4: b0 06 20 01 inc %i0
if ( m != n )
4000a9b8: 80 a7 40 18 cmp %i5, %i0
4000a9bc: 02 80 00 34 be 4000aa8c <rtems_io_register_driver+0x174>
<== NEVER TAKEN
4000a9c0: f0 26 80 00 st %i0, [ %i2 ]
<== NOT EXECUTED
4000a9c4: 84 5e 20 03 smul %i0, 3, %g2
<== NOT EXECUTED
}
*registered_major = major;
}
_IO_Driver_address_table [major] = *driver_table;
4000a9c8: c8 06 40 00 ld [ %i1 ], %g4
<== NOT EXECUTED
4000a9cc: 85 28 a0 03 sll %g2, 3, %g2
<== NOT EXECUTED
4000a9d0: c8 20 c0 02 st %g4, [ %g3 + %g2 ]
<== NOT EXECUTED
4000a9d4: 84 00 c0 02 add %g3, %g2, %g2
<== NOT EXECUTED
4000a9d8: c6 06 60 04 ld [ %i1 + 4 ], %g3
<== NOT EXECUTED
4000a9dc: c6 20 a0 04 st %g3, [ %g2 + 4 ]
<== NOT EXECUTED
4000a9e0: c6 06 60 08 ld [ %i1 + 8 ], %g3
<== NOT EXECUTED
4000a9e4: c6 20 a0 08 st %g3, [ %g2 + 8 ]
<== NOT EXECUTED
4000a9e8: c6 06 60 0c ld [ %i1 + 0xc ], %g3
<== NOT EXECUTED
4000a9ec: c6 20 a0 0c st %g3, [ %g2 + 0xc ]
<== NOT EXECUTED
4000a9f0: c6 06 60 10 ld [ %i1 + 0x10 ], %g3
<== NOT EXECUTED
4000a9f4: c6 20 a0 10 st %g3, [ %g2 + 0x10 ]
<== NOT EXECUTED
4000a9f8: c6 06 60 14 ld [ %i1 + 0x14 ], %g3
<== NOT EXECUTED
4000a9fc: c6 20 a0 14 st %g3, [ %g2 + 0x14 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000aa00: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000aa04: 01 00 00 00 nop
_IO_Driver_registration_release( &lock_context );
if ( _IO_All_drivers_initialized ) {
4000aa08: 03 10 00 61 sethi %hi(0x40018400), %g1
4000aa0c: c4 08 63 8c ldub [ %g1 + 0x38c ], %g2 ! 4001878c <_IO_All_drivers_initialized>
4000aa10: 80 a0 a0 00 cmp %g2, 0
4000aa14: 02 80 00 09 be 4000aa38 <rtems_io_register_driver+0x120>
<== NEVER TAKEN
4000aa18: 82 10 20 00 clr %g1
/* Other drivers have already been initialized, we initialize
* the driver directly.
*/
return rtems_io_initialize( major, 0, NULL );
4000aa1c: b4 10 20 00 clr %i2
4000aa20: 7f ff ff 64 call 4000a7b0 <rtems_io_initialize>
4000aa24: 93 e8 20 00 restore %g0, 0, %o1
return table->initialization_entry == NULL && table->open_entry == NULL;
4000aa28: 80 a0 60 00 cmp %g1, 0
4000aa2c: 12 bf ff cb bne 4000a958 <rtems_io_register_driver+0x40>
4000aa30: 80 a7 00 18 cmp %i4, %i0
return RTEMS_INVALID_ADDRESS;
4000aa34: 82 10 20 09 mov 9, %g1
/* The driver will be initialized together with all other drivers
* in a later stage by _IO_Initialize_all_drivers().
*/
return RTEMS_SUCCESSFUL;
}
}
4000aa38: 81 c7 e0 08 ret
4000aa3c: 91 e8 00 01 restore %g0, %g1, %o0
return RTEMS_CALLED_FROM_ISR;
4000aa40: 82 10 20 12 mov 0x12, %g1
}
4000aa44: 81 c7 e0 08 ret
4000aa48: 91 e8 00 01 restore %g0, %g1, %o0
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
4000aa4c: 07 10 00 5a sethi %hi(0x40016800), %g3
4000aa50: 84 00 80 18 add %g2, %i0, %g2
4000aa54: 86 10 e3 30 or %g3, 0x330, %g3
4000aa58: 89 28 a0 03 sll %g2, 3, %g4
return table->initialization_entry == NULL && table->open_entry == NULL;
4000aa5c: fa 00 c0 04 ld [ %g3 + %g4 ], %i5
4000aa60: 80 a7 60 00 cmp %i5, 0
4000aa64: 02 80 00 0e be 4000aa9c <rtems_io_register_driver+0x184>
4000aa68: 88 00 c0 04 add %g3, %g4, %g4
4000aa6c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000aa70: 01 00 00 00 nop
return RTEMS_RESOURCE_IN_USE;
4000aa74: 82 10 20 0c mov 0xc, %g1 ! c <_TLS_Alignment+0xb>
}
4000aa78: 81 c7 e0 08 ret
4000aa7c: 91 e8 00 01 restore %g0, %g1, %o0
4000aa80: 81 c7 e0 08 ret
4000aa84: 91 e8 00 01 restore %g0, %g1, %o0
*major = m;
4000aa88: fa 26 80 00 st %i5, [ %i2 ]
<== NOT EXECUTED
4000aa8c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000aa90: 01 00 00 00 nop
return sc;
4000aa94: 10 bf ff e9 b 4000aa38 <rtems_io_register_driver+0x120>
4000aa98: 82 10 20 05 mov 5, %g1 ! 5 <_TLS_Alignment+0x4>
return table->initialization_entry == NULL && table->open_entry == NULL;
4000aa9c: c8 01 20 04 ld [ %g4 + 4 ], %g4
4000aaa0: 80 a1 20 00 cmp %g4, 0
4000aaa4: 12 bf ff f2 bne 4000aa6c <rtems_io_register_driver+0x154>
4000aaa8: 01 00 00 00 nop
*registered_major = major;
4000aaac: 10 bf ff c7 b 4000a9c8 <rtems_io_register_driver+0xb0>
4000aab0: f0 26 80 00 st %i0, [ %i2 ]
*major = m;
4000aab4: 10 bf ff f6 b 4000aa8c <rtems_io_register_driver+0x174>
<== NOT EXECUTED
4000aab8: c0 26 80 00 clr [ %i2 ]
<== NOT EXECUTED
4000aabc <rtems_io_unregister_driver>:
#include <string.h>
rtems_status_code rtems_io_unregister_driver(
rtems_device_major_number major
)
{
4000aabc: 9d e3 bf a0 save %sp, -96, %sp
if ( rtems_interrupt_is_in_progress() )
4000aac0: 40 00 05 ad call 4000c174 <_ISR_Is_in_progress>
4000aac4: 01 00 00 00 nop
4000aac8: 80 a2 20 00 cmp %o0, 0
4000aacc: 12 80 00 17 bne 4000ab28 <rtems_io_unregister_driver+0x6c>
4000aad0: 82 10 20 12 mov 0x12, %g1
return RTEMS_CALLED_FROM_ISR;
if ( major < _IO_Number_of_drivers ) {
4000aad4: 05 10 00 52 sethi %hi(0x40014800), %g2
4000aad8: c4 00 a0 64 ld [ %g2 + 0x64 ], %g2 ! 40014864 <_IO_Number_of_drivers>
4000aadc: 80 a0 80 18 cmp %g2, %i0
4000aae0: 08 80 00 12 bleu 4000ab28 <rtems_io_unregister_driver+0x6c>
4000aae4: 82 10 20 0d mov 0xd, %g1
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000aae8: 91 d0 20 09 ta 9
<== NOT EXECUTED
ISR_lock_Context lock_context;
_IO_Driver_registration_acquire( &lock_context );
memset(
&_IO_Driver_address_table[major],
4000aaec: 07 10 00 5a sethi %hi(0x40016800), %g3
<== NOT EXECUTED
4000aaf0: 85 2e 20 01 sll %i0, 1, %g2
<== NOT EXECUTED
4000aaf4: 86 10 e3 30 or %g3, 0x330, %g3
<== NOT EXECUTED
4000aaf8: b0 00 80 18 add %g2, %i0, %i0
<== NOT EXECUTED
4000aafc: b1 2e 20 03 sll %i0, 3, %i0
<== NOT EXECUTED
memset(
4000ab00: c0 26 00 03 clr [ %i0 + %g3 ]
<== NOT EXECUTED
&_IO_Driver_address_table[major],
4000ab04: b0 06 00 03 add %i0, %g3, %i0
<== NOT EXECUTED
memset(
4000ab08: c0 26 20 04 clr [ %i0 + 4 ]
<== NOT EXECUTED
4000ab0c: c0 26 20 08 clr [ %i0 + 8 ]
<== NOT EXECUTED
4000ab10: c0 26 20 0c clr [ %i0 + 0xc ]
<== NOT EXECUTED
4000ab14: c0 26 20 10 clr [ %i0 + 0x10 ]
<== NOT EXECUTED
4000ab18: c0 26 20 14 clr [ %i0 + 0x14 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000ab1c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000ab20: 01 00 00 00 nop
0,
sizeof( rtems_driver_address_table )
);
_IO_Driver_registration_release( &lock_context );
return RTEMS_SUCCESSFUL;
4000ab24: 82 10 20 00 clr %g1 ! 0 <PROM_START>
}
return RTEMS_UNSATISFIED;
}
4000ab28: 81 c7 e0 08 ret
4000ab2c: 91 e8 00 01 restore %g0, %g1, %o0
40006440 <rtems_panic>:
#include <rtems/bspIo.h>
#include <stdarg.h>
void rtems_panic( const char *fmt, ... )
{
40006440: 9d e3 bf 98 save %sp, -104, %sp
va_list ap;
va_start( ap, fmt );
40006444: 82 07 a0 48 add %fp, 0x48, %g1
40006448: f2 27 a0 48 st %i1, [ %fp + 0x48 ]
vprintk( fmt, ap );
4000644c: 92 10 00 01 mov %g1, %o1
va_start( ap, fmt );
40006450: f4 27 a0 4c st %i2, [ %fp + 0x4c ]
vprintk( fmt, ap );
40006454: 90 10 00 18 mov %i0, %o0
va_start( ap, fmt );
40006458: f6 27 a0 50 st %i3, [ %fp + 0x50 ]
4000645c: f8 27 a0 54 st %i4, [ %fp + 0x54 ]
40006460: fa 27 a0 58 st %i5, [ %fp + 0x58 ]
vprintk( fmt, ap );
40006464: 7f ff fe cb call 40005f90 <vprintk>
40006468: c2 27 bf fc st %g1, [ %fp + -4 ]
va_end( ap);
_Terminate( RTEMS_FATAL_SOURCE_PANIC, (Internal_errors_t) fmt );
4000646c: 92 10 00 18 mov %i0, %o1
40006470: 40 00 02 30 call 40006d30 <_Terminate>
40006474: 90 10 20 0b mov 0xb, %o0
40006478: 01 00 00 00 nop
<== NOT EXECUTED
40007a44 <rtems_rbtree_find>:
const rtems_rbtree_control *the_rbtree,
const rtems_rbtree_node *the_node,
rtems_rbtree_compare compare,
bool is_unique
)
{
40007a44: 9d e3 bf a0 save %sp, -96, %sp
40007a48: fa 06 00 00 ld [ %i0 ], %i5
rtems_rbtree_node *iter_node = rtems_rbtree_root( the_rbtree );
rtems_rbtree_node *found = NULL;
while ( iter_node != NULL ) {
40007a4c: 80 a7 60 00 cmp %i5, 0
40007a50: 02 80 00 0f be 40007a8c <rtems_rbtree_find+0x48>
<== NEVER TAKEN
40007a54: b0 10 20 00 clr %i0
rtems_rbtree_compare_result compare_result =
40007a58: 92 10 00 1d mov %i5, %o1
40007a5c: 9f c6 80 00 call %i2
40007a60: 90 10 00 19 mov %i1, %o0
( *compare )( the_node, iter_node );
if ( rtems_rbtree_is_equal( compare_result ) ) {
40007a64: 80 a2 20 00 cmp %o0, 0
40007a68: 12 80 00 0b bne 40007a94 <rtems_rbtree_find+0x50>
40007a6c: 01 00 00 00 nop
found = iter_node;
if ( is_unique )
40007a70: 80 a6 e0 00 cmp %i3, 0
40007a74: 12 80 00 06 bne 40007a8c <rtems_rbtree_find+0x48>
40007a78: b0 10 00 1d mov %i5, %i0
40007a7c: fa 07 40 00 ld [ %i5 ], %i5
while ( iter_node != NULL ) {
40007a80: 80 a7 60 00 cmp %i5, 0
40007a84: 12 bf ff f6 bne 40007a5c <rtems_rbtree_find+0x18>
40007a88: 92 10 00 1d mov %i5, %o1
40007a8c: 81 c7 e0 08 ret
40007a90: 81 e8 00 00 restore
break;
}
if ( rtems_rbtree_is_greater( compare_result ) ) {
40007a94: 24 bf ff fb ble,a 40007a80 <rtems_rbtree_find+0x3c>
40007a98: fa 07 40 00 ld [ %i5 ], %i5
40007a9c: 10 bf ff f9 b 40007a80 <rtems_rbtree_find+0x3c>
40007aa0: fa 07 60 04 ld [ %i5 + 4 ], %i5
40007b3c <rtems_rbtree_initialize>:
void *starting_address,
size_t number_nodes,
size_t node_size,
bool is_unique
)
{
40007b3c: 9d e3 bf a0 save %sp, -96, %sp
RB_INIT( the_rbtree );
40007b40: c0 26 00 00 clr [ %i0 ]
rtems_rbtree_initialize_empty( the_rbtree );
count = number_nodes;
next = starting_address;
while ( count-- ) {
40007b44: 80 a6 e0 00 cmp %i3, 0
40007b48: 02 80 00 0b be 40007b74 <rtems_rbtree_initialize+0x38>
<== NEVER TAKEN
40007b4c: a0 06 ff ff add %i3, -1, %l0
rtems_rbtree_insert( the_rbtree, next, compare, is_unique );
40007b50: 92 10 00 1a mov %i2, %o1
40007b54: 96 10 00 1d mov %i5, %o3
40007b58: 94 10 00 19 mov %i1, %o2
40007b5c: 7f ff ff d2 call 40007aa4 <rtems_rbtree_insert>
40007b60: 90 10 00 18 mov %i0, %o0
while ( count-- ) {
40007b64: a0 04 3f ff add %l0, -1, %l0
40007b68: 80 a4 3f ff cmp %l0, -1
40007b6c: 12 bf ff f9 bne 40007b50 <rtems_rbtree_initialize+0x14>
40007b70: b4 06 80 1c add %i2, %i4, %i2
next = (rtems_rbtree_node *) _Addresses_Add_offset( next, node_size );
}
}
40007b74: 81 c7 e0 08 ret
40007b78: 81 e8 00 00 restore
4000e75c <rtems_shutdown_executive>:
#include <rtems/init.h>
#include <rtems/score/interr.h>
void rtems_shutdown_executive( uint32_t result )
{
4000e75c: 9d e3 bf a0 save %sp, -96, %sp
_Terminate( RTEMS_FATAL_SOURCE_EXIT, result );
4000e760: 90 10 20 05 mov 5, %o0
4000e764: 7f ff e5 90 call 40007da4 <_Terminate>
4000e768: 92 10 00 18 mov %i0, %o1
4000e76c: 01 00 00 00 nop
<== NOT EXECUTED
400073f0 <rtems_timecounter_simple_install>:
rtems_timecounter_simple *tc,
uint32_t frequency_in_hz,
uint32_t counter_ticks_per_clock_tick,
timecounter_get_t *get_timecount
)
{
400073f0: 9d e3 bf a0 save %sp, -96, %sp
uint32_t mask;
uint64_t scaler;
int i;
for ( i = 0; i < 32; ++i ) {
if ( power_of_two >= counter_ticks_per_clock_tick ) {
400073f4: 80 a6 a0 01 cmp %i2, 1
400073f8: 08 80 00 28 bleu 40007498 <rtems_timecounter_simple_install+0xa8>
<== NEVER TAKEN
400073fc: b8 10 00 18 mov %i0, %i4
40007400: 82 10 20 1f mov 0x1f, %g1
break;
}
power_of_two *= 2;
40007404: 10 80 00 05 b 40007418 <rtems_timecounter_simple_install+0x28>
40007408: 90 10 20 02 mov 2, %o0
for ( i = 0; i < 32; ++i ) {
4000740c: 82 80 7f ff addcc %g1, -1, %g1
40007410: 02 80 00 1c be 40007480 <rtems_timecounter_simple_install+0x90>
<== NEVER TAKEN
40007414: 90 10 00 02 mov %g2, %o0
if ( power_of_two >= counter_ticks_per_clock_tick ) {
40007418: 80 a6 80 08 cmp %i2, %o0
4000741c: 18 bf ff fc bgu 4000740c <rtems_timecounter_simple_install+0x1c>
40007420: 85 2a 20 01 sll %o0, 1, %g2
40007424: 21 20 00 00 sethi %hi(0x80000000), %l0
40007428: ba 00 bf ff add %g2, -1, %i5
4000742c: a0 2a 00 10 andn %o0, %l0, %l0
}
mask = ( 2 * power_of_two ) - 1;
scaler = ( (uint64_t) power_of_two << 32 ) / counter_ticks_per_clock_tick;
40007430: 94 10 20 00 clr %o2
40007434: 96 10 00 1a mov %i2, %o3
40007438: 40 00 23 c6 call 40010350 <__udivdi3>
4000743c: 92 10 20 00 clr %o1
tc->scaler = scaler;
tc->real_interval = counter_ticks_per_clock_tick;
tc->binary_interval = ( mask + 1 ) / 2;
tc->tc.tc_get_timecount = get_timecount;
tc->tc.tc_counter_mask = mask;
tc->tc.tc_frequency = (uint32_t) ( ( frequency_in_hz * scaler ) >> 32 );
40007440: 82 5e 40 08 smul %i1, %o0, %g1
40007444: 86 56 40 09 umul %i1, %o1, %g3
40007448: 85 40 00 00 rd %y, %g2
tc->scaler = scaler;
4000744c: d0 27 20 30 st %o0, [ %i4 + 0x30 ]
tc->tc.tc_frequency = (uint32_t) ( ( frequency_in_hz * scaler ) >> 32 );
40007450: 84 00 40 02 add %g1, %g2, %g2
tc->scaler = scaler;
40007454: d2 27 20 34 st %o1, [ %i4 + 0x34 ]
tc->tc.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER;
40007458: 82 10 20 64 mov 0x64, %g1
tc->real_interval = counter_ticks_per_clock_tick;
4000745c: f4 27 20 38 st %i2, [ %i4 + 0x38 ]
tc->binary_interval = ( mask + 1 ) / 2;
40007460: e0 27 20 3c st %l0, [ %i4 + 0x3c ]
tc->tc.tc_get_timecount = get_timecount;
40007464: f6 27 00 00 st %i3, [ %i4 ]
tc->tc.tc_counter_mask = mask;
40007468: fa 27 20 08 st %i5, [ %i4 + 8 ]
tc->tc.tc_frequency = (uint32_t) ( ( frequency_in_hz * scaler ) >> 32 );
4000746c: c4 27 20 14 st %g2, [ %i4 + 0x14 ]
40007470: c0 27 20 10 clr [ %i4 + 0x10 ]
tc->tc.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER;
40007474: c2 27 20 1c st %g1, [ %i4 + 0x1c ]
_Timecounter_Install( &tc->tc );
40007478: 40 00 07 1e call 400090f0 <_Timecounter_Install>
4000747c: 91 e8 00 1c restore %g0, %i4, %o0
40007480: 85 28 a0 01 sll %g2, 1, %g2
<== NOT EXECUTED
40007484: 21 1f ff ff sethi %hi(0x7ffffc00), %l0
<== NOT EXECUTED
40007488: ba 00 bf ff add %g2, -1, %i5
<== NOT EXECUTED
4000748c: a0 14 23 ff or %l0, 0x3ff, %l0
<== NOT EXECUTED
40007490: 10 bf ff e8 b 40007430 <rtems_timecounter_simple_install+0x40>
<== NOT EXECUTED
40007494: a0 0a 00 10 and %o0, %l0, %l0
<== NOT EXECUTED
if ( power_of_two >= counter_ticks_per_clock_tick ) {
40007498: ba 10 20 01 mov 1, %i5
<== NOT EXECUTED
4000749c: a0 10 20 01 mov 1, %l0
<== NOT EXECUTED
400074a0: 10 bf ff e4 b 40007430 <rtems_timecounter_simple_install+0x40>
<== NOT EXECUTED
400074a4: 90 10 20 01 mov 1, %o0
<== NOT EXECUTED