RTEMS-5
Annotated Report
Fri Aug 10 14:01:48 2018
400073a0 <_IO_Initialize_all_drivers>:
#include <rtems/ioimpl.h>
bool _IO_All_drivers_initialized;
void _IO_Initialize_all_drivers( void )
{
400073a0: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_major_number major;
_IO_All_drivers_initialized = true;
400073a4: 03 10 00 5c sethi %hi(0x40017000), %g1
400073a8: 84 10 20 01 mov 1, %g2
400073ac: c4 28 60 f4 stb %g2, [ %g1 + 0xf4 ]
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
400073b0: 03 10 00 4f sethi %hi(0x40013c00), %g1
400073b4: f8 00 61 6c ld [ %g1 + 0x16c ], %i4 ! 40013d6c <_IO_Number_of_drivers>
400073b8: 80 a7 20 00 cmp %i4, 0
400073bc: 02 80 00 0a be 400073e4 <_IO_Initialize_all_drivers+0x44>
<== NEVER TAKEN
400073c0: ba 10 20 00 clr %i5
(void) rtems_io_initialize( major, 0, NULL );
400073c4: 90 10 00 1d mov %i5, %o0
400073c8: 94 10 20 00 clr %o2
400073cc: 40 00 28 41 call 400114d0 <rtems_io_initialize>
400073d0: 92 10 20 00 clr %o1
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
400073d4: ba 07 60 01 inc %i5
400073d8: 80 a7 40 1c cmp %i5, %i4
400073dc: 12 bf ff fb bne 400073c8 <_IO_Initialize_all_drivers+0x28>
400073e0: 90 10 00 1d mov %i5, %o0
}
400073e4: 81 c7 e0 08 ret
400073e8: 81 e8 00 00 restore
400142e8 <_Objects_Information_table>:
400142e8: 00 00 00 00 40 01 6a 38 40 01 6a 0c 40 01 69 d8 ....@.j8@.j.@.i.
400142f8: 5f 41 6c 6c 6f 63 61 74 6f 72 00 00 00 00 00 00 _Allocator......
40014308: 28 66 6d 74 20 6e 75 6c 6c 29 0a 00 00 00 00 00 (fmt null)......
40014318: 28 6e 75 6c 6c 29 00 (null).
4000c65c <rtems_chain_append>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000c65c: 91 d0 20 09 ta 9
<== NOT EXECUTED
old_last = tail->previous;
4000c660: c4 02 20 08 ld [ %o0 + 8 ], %g2
<== NOT EXECUTED
return &the_chain->Tail.Node;
4000c664: 86 02 20 04 add %o0, 4, %g3
<== NOT EXECUTED
the_node->next = tail;
4000c668: c6 22 40 00 st %g3, [ %o1 ]
<== NOT EXECUTED
tail->previous = the_node;
4000c66c: d2 22 20 08 st %o1, [ %o0 + 8 ]
<== NOT EXECUTED
old_last->next = the_node;
4000c670: d2 20 80 00 st %o1, [ %g2 ]
<== NOT EXECUTED
the_node->previous = old_last;
4000c674: c4 22 60 04 st %g2, [ %o1 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000c678: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000c67c: 01 00 00 00 nop
rtems_interrupt_lock_context lock_context;
chain_acquire( &lock_context );
_Chain_Append_unprotected( chain, node );
chain_release( &lock_context );
}
4000c680: 81 c3 e0 08 retl
4000c684: 01 00 00 00 nop
4000c600 <rtems_chain_extract>:
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000c600: 91 d0 20 09 ta 9
<== NOT EXECUTED
next = the_node->next;
4000c604: c6 02 00 00 ld [ %o0 ], %g3
<== NOT EXECUTED
previous = the_node->previous;
4000c608: c4 02 20 04 ld [ %o0 + 4 ], %g2
<== NOT EXECUTED
next->previous = previous;
4000c60c: c4 20 e0 04 st %g2, [ %g3 + 4 ]
<== NOT EXECUTED
previous->next = next;
4000c610: c6 20 80 00 st %g3, [ %g2 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000c614: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000c618: 01 00 00 00 nop
rtems_interrupt_lock_context lock_context;
chain_acquire( &lock_context );
_Chain_Extract_unprotected( node );
chain_release( &lock_context );
}
4000c61c: 81 c3 e0 08 retl
4000c620: 01 00 00 00 nop
4000c624 <rtems_chain_get>:
rtems_chain_node *rtems_chain_get( rtems_chain_control *chain )
{
4000c624: 84 10 00 08 mov %o0, %g2
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
4000c628: 91 d0 20 09 ta 9
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4000c62c: d0 02 00 00 ld [ %o0 ], %o0
return &the_chain->Tail.Node;
4000c630: 86 00 a0 04 add %g2, 4, %g3
if ( !_Chain_Is_empty(the_chain))
4000c634: 80 a2 00 03 cmp %o0, %g3
4000c638: 22 80 00 05 be,a 4000c64c <rtems_chain_get+0x28>
<== NEVER TAKEN
4000c63c: 90 10 20 00 clr %o0
<== NOT EXECUTED
new_first = old_first->next;
4000c640: c6 02 00 00 ld [ %o0 ], %g3
<== NOT EXECUTED
head->next = new_first;
4000c644: c6 20 80 00 st %g3, [ %g2 ]
<== NOT EXECUTED
new_first->previous = head;
4000c648: c4 20 e0 04 st %g2, [ %g3 + 4 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
4000c64c: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
4000c650: 01 00 00 00 nop
chain_acquire( &lock_context );
node = _Chain_Get_unprotected( chain );
chain_release( &lock_context );
return node;
}
4000c654: 81 c3 e0 08 retl
4000c658: 01 00 00 00 nop
4000a4a4 <rtems_extension_create>:
rtems_status_code rtems_extension_create(
rtems_name name,
const rtems_extensions_table *extension_table,
rtems_id *id
)
{
4000a4a4: 9d e3 bf a0 save %sp, -96, %sp
Extension_Control *the_extension;
if ( !id )
4000a4a8: 80 a6 a0 00 cmp %i2, 0
4000a4ac: 02 80 00 1b be 4000a518 <rtems_extension_create+0x74>
<== NEVER TAKEN
4000a4b0: 80 a6 20 00 cmp %i0, 0
return RTEMS_INVALID_ADDRESS;
if ( !rtems_is_name_valid( name ) )
4000a4b4: 02 80 00 17 be 4000a510 <rtems_extension_create+0x6c>
<== NEVER TAKEN
4000a4b8: 82 10 20 03 mov 3, %g1
extern Objects_Information _Extension_Information;
RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void )
{
return (Extension_Control *) _Objects_Allocate( &_Extension_Information );
4000a4bc: 39 10 00 85 sethi %hi(0x40021400), %i4
4000a4c0: 40 00 08 56 call 4000c618 <_Objects_Allocate>
4000a4c4: 90 17 20 54 or %i4, 0x54, %o0 ! 40021454 <_Extension_Information>
return RTEMS_INVALID_NAME;
the_extension = _Extension_Allocate();
if ( !the_extension ) {
4000a4c8: ba 92 20 00 orcc %o0, 0, %i5
4000a4cc: 02 80 00 16 be 4000a524 <rtems_extension_create+0x80>
<== NEVER TAKEN
4000a4d0: 94 10 20 24 mov 0x24, %o2
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
4000a4d4: 92 10 00 19 mov %i1, %o1
4000a4d8: 40 00 24 48 call 400135f8 <memcpy>
4000a4dc: 90 07 60 24 add %i5, 0x24, %o0
_User_extensions_Add_set( extension );
4000a4e0: 40 00 18 07 call 400104fc <_User_extensions_Add_set>
4000a4e4: 90 07 60 10 add %i5, 0x10, %o0
information->local_table[ index ] = the_object;
4000a4e8: c2 17 60 0a lduh [ %i5 + 0xa ], %g1
the_object->name = name;
4000a4ec: f0 27 60 0c st %i0, [ %i5 + 0xc ]
information->local_table[ index ] = the_object;
4000a4f0: b8 17 20 54 or %i4, 0x54, %i4
4000a4f4: c6 07 20 1c ld [ %i4 + 0x1c ], %g3
4000a4f8: c4 07 60 08 ld [ %i5 + 8 ], %g2
4000a4fc: 83 28 60 02 sll %g1, 2, %g1
4000a500: fa 20 c0 01 st %i5, [ %g3 + %g1 ]
_RTEMS_Unlock_allocator();
4000a504: 40 00 00 68 call 4000a6a4 <_RTEMS_Unlock_allocator>
4000a508: c4 26 80 00 st %g2, [ %i2 ]
(Objects_Name) name
);
*id = the_extension->Object.id;
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
4000a50c: 82 10 20 00 clr %g1
}
4000a510: 81 c7 e0 08 ret
4000a514: 91 e8 00 01 restore %g0, %g1, %o0
return RTEMS_INVALID_ADDRESS;
4000a518: 82 10 20 09 mov 9, %g1
<== NOT EXECUTED
}
4000a51c: 81 c7 e0 08 ret
<== NOT EXECUTED
4000a520: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
4000a524: 40 00 00 60 call 4000a6a4 <_RTEMS_Unlock_allocator>
<== NOT EXECUTED
4000a528: 01 00 00 00 nop
<== NOT EXECUTED
return RTEMS_TOO_MANY;
4000a52c: 10 bf ff f9 b 4000a510 <rtems_extension_create+0x6c>
<== NOT EXECUTED
4000a530: 82 10 20 05 mov 5, %g1 ! 5 <_TLS_Alignment+0x4>
<== NOT EXECUTED
40007380 <rtems_fatal_error_occurred>:
#include <rtems/score/interr.h>
void rtems_fatal_error_occurred(
uint32_t the_error
)
{
40007380: 9d e3 bf a0 save %sp, -96, %sp
_Terminate( INTERNAL_ERROR_RTEMS_API, the_error );
40007384: 90 10 20 01 mov 1, %o0
40007388: 40 00 02 e8 call 40007f28 <_Terminate>
4000738c: 92 10 00 18 mov %i0, %o1
40007390: 01 00 00 00 nop
<== NOT EXECUTED
400066ec <rtems_fatal_source_text>:
const char *rtems_fatal_source_text( rtems_fatal_source source )
{
size_t i = source;
const char *text = "?";
if ( i < RTEMS_ARRAY_SIZE( fatal_source_text ) ) {
400066ec: 80 a2 20 0c cmp %o0, 0xc
<== NOT EXECUTED
400066f0: 18 80 00 06 bgu 40006708 <rtems_fatal_source_text+0x1c>
<== NOT EXECUTED
400066f4: 03 10 00 40 sethi %hi(0x40010000), %g1
<== NOT EXECUTED
text = fatal_source_text[ i ];
400066f8: 91 2a 20 02 sll %o0, 2, %o0
<== NOT EXECUTED
400066fc: 82 10 63 20 or %g1, 0x320, %g1
<== NOT EXECUTED
40006700: 81 c3 e0 08 retl
<== NOT EXECUTED
40006704: d0 00 40 08 ld [ %g1 + %o0 ], %o0
<== NOT EXECUTED
const char *text = "?";
40006708: 11 10 00 3f sethi %hi(0x4000fc00), %o0
<== NOT EXECUTED
}
return text;
}
4000670c: 81 c3 e0 08 retl
<== NOT EXECUTED
40006710: 90 12 22 50 or %o0, 0x250, %o0 ! 4000fe50 <rtems_filesystem_null_handlers+0x40>
<== NOT EXECUTED
40007394 <rtems_get_version_string>:
#include <rtems.h>
#include <rtems/system.h>
const char *rtems_get_version_string(void)
{
return _RTEMS_version;
40007394: 11 10 00 51 sethi %hi(0x40014400), %o0
<== NOT EXECUTED
}
40007398: 81 c3 e0 08 retl
<== NOT EXECUTED
4000739c: 90 12 23 98 or %o0, 0x398, %o0 ! 40014798 <_RTEMS_version>
<== NOT EXECUTED
40007334 <rtems_initialize_executive>:
RTEMS_SYSINIT_DEVICE_DRIVERS,
RTEMS_SYSINIT_ORDER_MIDDLE
);
void rtems_initialize_executive(void)
{
40007334: 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;
40007338: 3b 10 00 51 sethi %hi(0x40014400), %i5
const rtems_sysinit_item *item;
/* Invoke the registered system initialization handlers */
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
4000733c: 39 10 00 52 sethi %hi(0x40014800), %i4
RTEMS_OBFUSCATE_VARIABLE( addr );
40007340: ba 17 63 f0 or %i5, 0x3f0, %i5
40007344: b8 17 20 34 or %i4, 0x34, %i4
40007348: 80 a7 40 1c cmp %i5, %i4
4000734c: 02 80 00 09 be 40007370 <rtems_initialize_executive+0x3c>
<== NEVER TAKEN
40007350: 03 10 00 5c sethi %hi(0x40017000), %g1
( *item->handler )();
40007354: c2 07 40 00 ld [ %i5 ], %g1
40007358: 9f c0 40 00 call %g1
4000735c: ba 07 60 04 add %i5, 4, %i5
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
40007360: 80 a7 40 1c cmp %i5, %i4
40007364: 32 bf ff fd bne,a 40007358 <rtems_initialize_executive+0x24>
40007368: c2 07 40 00 ld [ %i5 ], %g1
_System_state_Current = state;
4000736c: 03 10 00 5c sethi %hi(0x40017000), %g1
40007370: 84 10 20 02 mov 2, %g2
_System_state_Set( SYSTEM_STATE_UP );
_SMP_Request_start_multitasking();
_Thread_Start_multitasking();
40007374: 40 00 13 6f call 4000c130 <_Thread_Start_multitasking>
40007378: c4 20 61 00 st %g2, [ %g1 + 0x100 ]
4000737c: 01 00 00 00 nop
<== NOT EXECUTED
40006720 <rtems_internal_error_text>:
const char *rtems_internal_error_text( rtems_fatal_code error )
{
size_t i = error;
const char *text = "?";
if ( i < RTEMS_ARRAY_SIZE( internal_error_text ) ) {
40006720: 80 a2 20 27 cmp %o0, 0x27
<== NOT EXECUTED
40006724: 18 80 00 06 bgu 4000673c <rtems_internal_error_text+0x1c>
<== NOT EXECUTED
40006728: 03 10 00 42 sethi %hi(0x40010800), %g1
<== NOT EXECUTED
text = internal_error_text[ i ];
4000672c: 91 2a 20 02 sll %o0, 2, %o0
<== NOT EXECUTED
40006730: 82 10 62 04 or %g1, 0x204, %g1
<== NOT EXECUTED
40006734: 81 c3 e0 08 retl
<== NOT EXECUTED
40006738: d0 00 40 08 ld [ %g1 + %o0 ], %o0
<== NOT EXECUTED
const char *text = "?";
4000673c: 11 10 00 3f sethi %hi(0x4000fc00), %o0
<== NOT EXECUTED
}
return text;
}
40006740: 81 c3 e0 08 retl
<== NOT EXECUTED
40006744: 90 12 22 50 or %o0, 0x250, %o0 ! 4000fe50 <rtems_filesystem_null_handlers+0x40>
<== NOT EXECUTED
40011410 <rtems_io_close>:
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
40011410: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
40011414: 03 10 00 4f sethi %hi(0x40013c00), %g1
40011418: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 ! 40013d6c <_IO_Number_of_drivers>
{
4001141c: 90 10 00 18 mov %i0, %o0
if ( major >= _IO_Number_of_drivers )
40011420: 80 a0 40 08 cmp %g1, %o0
40011424: 08 80 00 11 bleu 40011468 <rtems_io_close+0x58>
<== NEVER TAKEN
40011428: b0 10 20 0a mov 0xa, %i0
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].close_entry;
4001142c: 83 2a 20 01 sll %o0, 1, %g1
40011430: 82 00 40 08 add %g1, %o0, %g1
40011434: 85 28 60 03 sll %g1, 3, %g2
40011438: 03 10 00 57 sethi %hi(0x40015c00), %g1
4001143c: 82 10 61 00 or %g1, 0x100, %g1 ! 40015d00 <_IO_Driver_address_table>
40011440: 82 00 40 02 add %g1, %g2, %g1
40011444: c2 00 60 08 ld [ %g1 + 8 ], %g1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
40011448: 80 a0 60 00 cmp %g1, 0
4001144c: 02 80 00 06 be 40011464 <rtems_io_close+0x54>
40011450: 94 10 00 1a mov %i2, %o2
40011454: 9f c0 40 00 call %g1
40011458: 92 10 00 19 mov %i1, %o1
4001145c: 81 c7 e0 08 ret
40011460: 91 e8 00 08 restore %g0, %o0, %o0
40011464: b0 10 20 00 clr %i0
}
40011468: 81 c7 e0 08 ret
4001146c: 81 e8 00 00 restore
40011470 <rtems_io_control>:
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
40011470: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
40011474: 03 10 00 4f sethi %hi(0x40013c00), %g1
40011478: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 ! 40013d6c <_IO_Number_of_drivers>
{
4001147c: 90 10 00 18 mov %i0, %o0
if ( major >= _IO_Number_of_drivers )
40011480: 80 a0 40 08 cmp %g1, %o0
40011484: 08 80 00 11 bleu 400114c8 <rtems_io_control+0x58>
<== NEVER TAKEN
40011488: b0 10 20 0a mov 0xa, %i0
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].control_entry;
4001148c: 83 2a 20 01 sll %o0, 1, %g1
40011490: 82 00 40 08 add %g1, %o0, %g1
40011494: 85 28 60 03 sll %g1, 3, %g2
40011498: 03 10 00 57 sethi %hi(0x40015c00), %g1
4001149c: 82 10 61 00 or %g1, 0x100, %g1 ! 40015d00 <_IO_Driver_address_table>
400114a0: 82 00 40 02 add %g1, %g2, %g1
400114a4: c2 00 60 14 ld [ %g1 + 0x14 ], %g1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
400114a8: 80 a0 60 00 cmp %g1, 0
400114ac: 02 80 00 06 be 400114c4 <rtems_io_control+0x54>
<== NEVER TAKEN
400114b0: 94 10 00 1a mov %i2, %o2
400114b4: 9f c0 40 00 call %g1
400114b8: 92 10 00 19 mov %i1, %o1
400114bc: 81 c7 e0 08 ret
400114c0: 91 e8 00 08 restore %g0, %o0, %o0
400114c4: b0 10 20 00 clr %i0
<== NOT EXECUTED
}
400114c8: 81 c7 e0 08 ret
<== NOT EXECUTED
400114cc: 81 e8 00 00 restore
<== NOT EXECUTED
400114d0 <rtems_io_initialize>:
rtems_status_code rtems_io_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
400114d0: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
400114d4: 03 10 00 4f sethi %hi(0x40013c00), %g1
400114d8: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 ! 40013d6c <_IO_Number_of_drivers>
{
400114dc: 90 10 00 18 mov %i0, %o0
if ( major >= _IO_Number_of_drivers )
400114e0: 80 a0 40 08 cmp %g1, %o0
400114e4: 08 80 00 10 bleu 40011524 <rtems_io_initialize+0x54>
<== NEVER TAKEN
400114e8: b0 10 20 0a mov 0xa, %i0
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].initialization_entry;
400114ec: 83 2a 20 01 sll %o0, 1, %g1
400114f0: 07 10 00 57 sethi %hi(0x40015c00), %g3
400114f4: 82 00 40 08 add %g1, %o0, %g1
400114f8: 86 10 e1 00 or %g3, 0x100, %g3
400114fc: 83 28 60 03 sll %g1, 3, %g1
40011500: c2 00 c0 01 ld [ %g3 + %g1 ], %g1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
40011504: 80 a0 60 00 cmp %g1, 0
40011508: 02 80 00 06 be 40011520 <rtems_io_initialize+0x50>
4001150c: 94 10 00 1a mov %i2, %o2
40011510: 9f c0 40 00 call %g1
40011514: 92 10 00 19 mov %i1, %o1
40011518: 81 c7 e0 08 ret
4001151c: 91 e8 00 08 restore %g0, %o0, %o0
40011520: b0 10 20 00 clr %i0
}
40011524: 81 c7 e0 08 ret
40011528: 81 e8 00 00 restore
4001152c <rtems_io_open>:
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4001152c: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
40011530: 03 10 00 4f sethi %hi(0x40013c00), %g1
40011534: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 ! 40013d6c <_IO_Number_of_drivers>
{
40011538: 90 10 00 18 mov %i0, %o0
if ( major >= _IO_Number_of_drivers )
4001153c: 80 a0 40 08 cmp %g1, %o0
40011540: 08 80 00 11 bleu 40011584 <rtems_io_open+0x58>
<== NEVER TAKEN
40011544: b0 10 20 0a mov 0xa, %i0
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].open_entry;
40011548: 83 2a 20 01 sll %o0, 1, %g1
4001154c: 82 00 40 08 add %g1, %o0, %g1
40011550: 85 28 60 03 sll %g1, 3, %g2
40011554: 03 10 00 57 sethi %hi(0x40015c00), %g1
40011558: 82 10 61 00 or %g1, 0x100, %g1 ! 40015d00 <_IO_Driver_address_table>
4001155c: 82 00 40 02 add %g1, %g2, %g1
40011560: c2 00 60 04 ld [ %g1 + 4 ], %g1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
40011564: 80 a0 60 00 cmp %g1, 0
40011568: 02 80 00 06 be 40011580 <rtems_io_open+0x54>
4001156c: 94 10 00 1a mov %i2, %o2
40011570: 9f c0 40 00 call %g1
40011574: 92 10 00 19 mov %i1, %o1
40011578: 81 c7 e0 08 ret
4001157c: 91 e8 00 08 restore %g0, %o0, %o0
40011580: b0 10 20 00 clr %i0
}
40011584: 81 c7 e0 08 ret
40011588: 81 e8 00 00 restore
4001158c <rtems_io_read>:
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4001158c: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
40011590: 03 10 00 4f sethi %hi(0x40013c00), %g1
40011594: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 ! 40013d6c <_IO_Number_of_drivers>
{
40011598: 90 10 00 18 mov %i0, %o0
if ( major >= _IO_Number_of_drivers )
4001159c: 80 a0 40 08 cmp %g1, %o0
400115a0: 08 80 00 11 bleu 400115e4 <rtems_io_read+0x58>
<== NEVER TAKEN
400115a4: b0 10 20 0a mov 0xa, %i0
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].read_entry;
400115a8: 83 2a 20 01 sll %o0, 1, %g1
400115ac: 82 00 40 08 add %g1, %o0, %g1
400115b0: 85 28 60 03 sll %g1, 3, %g2
400115b4: 03 10 00 57 sethi %hi(0x40015c00), %g1
400115b8: 82 10 61 00 or %g1, 0x100, %g1 ! 40015d00 <_IO_Driver_address_table>
400115bc: 82 00 40 02 add %g1, %g2, %g1
400115c0: c2 00 60 0c ld [ %g1 + 0xc ], %g1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
400115c4: 80 a0 60 00 cmp %g1, 0
400115c8: 02 80 00 06 be 400115e0 <rtems_io_read+0x54>
<== NEVER TAKEN
400115cc: 94 10 00 1a mov %i2, %o2
400115d0: 9f c0 40 00 call %g1
400115d4: 92 10 00 19 mov %i1, %o1
400115d8: 81 c7 e0 08 ret
400115dc: 91 e8 00 08 restore %g0, %o0, %o0
400115e0: b0 10 20 00 clr %i0
<== NOT EXECUTED
}
400115e4: 81 c7 e0 08 ret
<== NOT EXECUTED
400115e8: 81 e8 00 00 restore
<== NOT EXECUTED
400073ec <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
)
{
400073ec: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_major_number major_limit = _IO_Number_of_drivers;
400073f0: 3b 10 00 4f sethi %hi(0x40013c00), %i5
ISR_lock_Context lock_context;
if ( rtems_interrupt_is_in_progress() )
400073f4: 40 00 06 0e call 40008c2c <_ISR_Is_in_progress>
400073f8: f8 07 61 6c ld [ %i5 + 0x16c ], %i4 ! 40013d6c <_IO_Number_of_drivers>
400073fc: 80 a2 20 00 cmp %o0, 0
40007400: 12 80 00 45 bne 40007514 <rtems_io_register_driver+0x128>
<== NEVER TAKEN
40007404: 80 a6 a0 00 cmp %i2, 0
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
40007408: 02 80 00 40 be 40007508 <rtems_io_register_driver+0x11c>
<== NEVER TAKEN
4000740c: 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 )
40007410: 02 80 00 3e be 40007508 <rtems_io_register_driver+0x11c>
<== NEVER TAKEN
40007414: f8 26 80 00 st %i4, [ %i2 ]
return table->initialization_entry == NULL && table->open_entry == NULL;
40007418: c2 06 40 00 ld [ %i1 ], %g1
4000741c: 80 a0 60 00 cmp %g1, 0
40007420: 22 80 00 37 be,a 400074fc <rtems_io_register_driver+0x110>
40007424: 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 )
40007428: 80 a7 00 18 cmp %i4, %i0
4000742c: 08 80 00 4a bleu 40007554 <rtems_io_register_driver+0x168>
<== NEVER TAKEN
40007430: 82 10 20 0a mov 0xa, %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
40007434: 91 d0 20 09 ta 9
<== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
_IO_Driver_registration_acquire( &lock_context );
if ( major == 0 ) {
40007438: 80 a6 20 00 cmp %i0, 0
4000743c: 12 80 00 39 bne 40007520 <rtems_io_register_driver+0x134>
<== NEVER TAKEN
40007440: 85 2e 20 01 sll %i0, 1, %g2
rtems_device_major_number n = _IO_Number_of_drivers;
40007444: fa 07 61 6c ld [ %i5 + 0x16c ], %i5
for ( m = 0; m < n; ++m ) {
40007448: 80 a7 60 00 cmp %i5, 0
4000744c: 02 80 00 4f be 40007588 <rtems_io_register_driver+0x19c>
<== NEVER TAKEN
40007450: 07 10 00 57 sethi %hi(0x40015c00), %g3
40007454: 86 10 e1 00 or %g3, 0x100, %g3 ! 40015d00 <_IO_Driver_address_table>
40007458: 10 80 00 05 b 4000746c <rtems_io_register_driver+0x80>
4000745c: 84 10 00 03 mov %g3, %g2
40007460: 80 a7 40 18 cmp %i5, %i0
40007464: 02 80 00 3e be 4000755c <rtems_io_register_driver+0x170>
<== NEVER TAKEN
40007468: 84 00 a0 18 add %g2, 0x18, %g2
return table->initialization_entry == NULL && table->open_entry == NULL;
4000746c: c8 00 80 00 ld [ %g2 ], %g4
40007470: 80 a1 20 00 cmp %g4, 0
40007474: 32 bf ff fb bne,a 40007460 <rtems_io_register_driver+0x74>
40007478: b0 06 20 01 inc %i0
4000747c: c8 00 a0 04 ld [ %g2 + 4 ], %g4
40007480: 80 a1 20 00 cmp %g4, 0
40007484: 32 bf ff f7 bne,a 40007460 <rtems_io_register_driver+0x74>
40007488: b0 06 20 01 inc %i0
if ( m != n )
4000748c: 80 a7 40 18 cmp %i5, %i0
40007490: 02 80 00 34 be 40007560 <rtems_io_register_driver+0x174>
<== NEVER TAKEN
40007494: f0 26 80 00 st %i0, [ %i2 ]
<== NOT EXECUTED
40007498: 84 5e 20 03 smul %i0, 3, %g2
<== NOT EXECUTED
}
*registered_major = major;
}
_IO_Driver_address_table [major] = *driver_table;
4000749c: c8 06 40 00 ld [ %i1 ], %g4
<== NOT EXECUTED
400074a0: 85 28 a0 03 sll %g2, 3, %g2
<== NOT EXECUTED
400074a4: c8 20 c0 02 st %g4, [ %g3 + %g2 ]
<== NOT EXECUTED
400074a8: 84 00 c0 02 add %g3, %g2, %g2
<== NOT EXECUTED
400074ac: c6 06 60 04 ld [ %i1 + 4 ], %g3
<== NOT EXECUTED
400074b0: c6 20 a0 04 st %g3, [ %g2 + 4 ]
<== NOT EXECUTED
400074b4: c6 06 60 08 ld [ %i1 + 8 ], %g3
<== NOT EXECUTED
400074b8: c6 20 a0 08 st %g3, [ %g2 + 8 ]
<== NOT EXECUTED
400074bc: c6 06 60 0c ld [ %i1 + 0xc ], %g3
<== NOT EXECUTED
400074c0: c6 20 a0 0c st %g3, [ %g2 + 0xc ]
<== NOT EXECUTED
400074c4: c6 06 60 10 ld [ %i1 + 0x10 ], %g3
<== NOT EXECUTED
400074c8: c6 20 a0 10 st %g3, [ %g2 + 0x10 ]
<== NOT EXECUTED
400074cc: c6 06 60 14 ld [ %i1 + 0x14 ], %g3
<== NOT EXECUTED
400074d0: c6 20 a0 14 st %g3, [ %g2 + 0x14 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400074d4: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400074d8: 01 00 00 00 nop
_IO_Driver_registration_release( &lock_context );
if ( _IO_All_drivers_initialized ) {
400074dc: 03 10 00 5c sethi %hi(0x40017000), %g1
400074e0: c4 08 60 f4 ldub [ %g1 + 0xf4 ], %g2 ! 400170f4 <_IO_All_drivers_initialized>
400074e4: 80 a0 a0 00 cmp %g2, 0
400074e8: 02 80 00 09 be 4000750c <rtems_io_register_driver+0x120>
<== NEVER TAKEN
400074ec: 82 10 20 00 clr %g1
/* Other drivers have already been initialized, we initialize
* the driver directly.
*/
return rtems_io_initialize( major, 0, NULL );
400074f0: b4 10 20 00 clr %i2
400074f4: 40 00 27 f7 call 400114d0 <rtems_io_initialize>
400074f8: 93 e8 20 00 restore %g0, 0, %o1
return table->initialization_entry == NULL && table->open_entry == NULL;
400074fc: 80 a0 60 00 cmp %g1, 0
40007500: 12 bf ff cb bne 4000742c <rtems_io_register_driver+0x40>
<== ALWAYS TAKEN
40007504: 80 a7 00 18 cmp %i4, %i0
return RTEMS_INVALID_ADDRESS;
40007508: 82 10 20 09 mov 9, %g1
<== NOT EXECUTED
/* The driver will be initialized together with all other drivers
* in a later stage by _IO_Initialize_all_drivers().
*/
return RTEMS_SUCCESSFUL;
}
}
4000750c: 81 c7 e0 08 ret
<== NOT EXECUTED
40007510: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
return RTEMS_CALLED_FROM_ISR;
40007514: 82 10 20 12 mov 0x12, %g1
<== NOT EXECUTED
}
40007518: 81 c7 e0 08 ret
<== NOT EXECUTED
4000751c: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
40007520: 07 10 00 57 sethi %hi(0x40015c00), %g3
<== NOT EXECUTED
40007524: 84 00 80 18 add %g2, %i0, %g2
<== NOT EXECUTED
40007528: 86 10 e1 00 or %g3, 0x100, %g3
<== NOT EXECUTED
4000752c: 89 28 a0 03 sll %g2, 3, %g4
<== NOT EXECUTED
return table->initialization_entry == NULL && table->open_entry == NULL;
40007530: fa 00 c0 04 ld [ %g3 + %g4 ], %i5
<== NOT EXECUTED
40007534: 80 a7 60 00 cmp %i5, 0
<== NOT EXECUTED
40007538: 02 80 00 0e be 40007570 <rtems_io_register_driver+0x184>
<== NOT EXECUTED
4000753c: 88 00 c0 04 add %g3, %g4, %g4
<== NOT EXECUTED
40007540: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007544: 01 00 00 00 nop
<== NOT EXECUTED
return RTEMS_RESOURCE_IN_USE;
40007548: 82 10 20 0c mov 0xc, %g1 ! c <_TLS_Alignment+0xb>
<== NOT EXECUTED
}
4000754c: 81 c7 e0 08 ret
<== NOT EXECUTED
40007550: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
40007554: 81 c7 e0 08 ret
<== NOT EXECUTED
40007558: 91 e8 00 01 restore %g0, %g1, %o0
<== NOT EXECUTED
*major = m;
4000755c: fa 26 80 00 st %i5, [ %i2 ]
<== NOT EXECUTED
40007560: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
40007564: 01 00 00 00 nop
<== NOT EXECUTED
return sc;
40007568: 10 bf ff e9 b 4000750c <rtems_io_register_driver+0x120>
<== NOT EXECUTED
4000756c: 82 10 20 05 mov 5, %g1 ! 5 <_TLS_Alignment+0x4>
<== NOT EXECUTED
return table->initialization_entry == NULL && table->open_entry == NULL;
40007570: c8 01 20 04 ld [ %g4 + 4 ], %g4
<== NOT EXECUTED
40007574: 80 a1 20 00 cmp %g4, 0
<== NOT EXECUTED
40007578: 12 bf ff f2 bne 40007540 <rtems_io_register_driver+0x154>
<== NOT EXECUTED
4000757c: 01 00 00 00 nop
<== NOT EXECUTED
*registered_major = major;
40007580: 10 bf ff c7 b 4000749c <rtems_io_register_driver+0xb0>
<== NOT EXECUTED
40007584: f0 26 80 00 st %i0, [ %i2 ]
<== NOT EXECUTED
*major = m;
40007588: 10 bf ff f6 b 40007560 <rtems_io_register_driver+0x174>
<== NOT EXECUTED
4000758c: c0 26 80 00 clr [ %i2 ]
<== NOT EXECUTED
40007590 <rtems_io_unregister_driver>:
#include <string.h>
rtems_status_code rtems_io_unregister_driver(
rtems_device_major_number major
)
{
40007590: 9d e3 bf a0 save %sp, -96, %sp
if ( rtems_interrupt_is_in_progress() )
40007594: 40 00 05 a6 call 40008c2c <_ISR_Is_in_progress>
40007598: 01 00 00 00 nop
4000759c: 80 a2 20 00 cmp %o0, 0
400075a0: 12 80 00 17 bne 400075fc <rtems_io_unregister_driver+0x6c>
<== NEVER TAKEN
400075a4: 82 10 20 12 mov 0x12, %g1
return RTEMS_CALLED_FROM_ISR;
if ( major < _IO_Number_of_drivers ) {
400075a8: 05 10 00 4f sethi %hi(0x40013c00), %g2
400075ac: c4 00 a1 6c ld [ %g2 + 0x16c ], %g2 ! 40013d6c <_IO_Number_of_drivers>
400075b0: 80 a0 80 18 cmp %g2, %i0
400075b4: 08 80 00 12 bleu 400075fc <rtems_io_unregister_driver+0x6c>
<== NEVER TAKEN
400075b8: 82 10 20 0d mov 0xd, %g1
<== NOT EXECUTED
__asm__ volatile ( "ta %1\n\t" : "=r" (psr) : "i" (SPARC_SWTRAP_IRQDIS));
400075bc: 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],
400075c0: 07 10 00 57 sethi %hi(0x40015c00), %g3
<== NOT EXECUTED
400075c4: 85 2e 20 01 sll %i0, 1, %g2
<== NOT EXECUTED
400075c8: 86 10 e1 00 or %g3, 0x100, %g3
<== NOT EXECUTED
400075cc: b0 00 80 18 add %g2, %i0, %i0
<== NOT EXECUTED
400075d0: b1 2e 20 03 sll %i0, 3, %i0
<== NOT EXECUTED
memset(
400075d4: c0 26 00 03 clr [ %i0 + %g3 ]
<== NOT EXECUTED
&_IO_Driver_address_table[major],
400075d8: b0 06 00 03 add %i0, %g3, %i0
<== NOT EXECUTED
memset(
400075dc: c0 26 20 04 clr [ %i0 + 4 ]
<== NOT EXECUTED
400075e0: c0 26 20 08 clr [ %i0 + 8 ]
<== NOT EXECUTED
400075e4: c0 26 20 0c clr [ %i0 + 0xc ]
<== NOT EXECUTED
400075e8: c0 26 20 10 clr [ %i0 + 0x10 ]
<== NOT EXECUTED
400075ec: c0 26 20 14 clr [ %i0 + 0x14 ]
<== NOT EXECUTED
__asm__ volatile ( "ta %0\nnop\n" :: "i" (SPARC_SWTRAP_IRQEN), "r" (_psr));
400075f0: 91 d0 20 0a ta 0xa
<== NOT EXECUTED
400075f4: 01 00 00 00 nop
0,
sizeof( rtems_driver_address_table )
);
_IO_Driver_registration_release( &lock_context );
return RTEMS_SUCCESSFUL;
400075f8: 82 10 20 00 clr %g1 ! 0 <PROM_START>
}
return RTEMS_UNSATISFIED;
}
400075fc: 81 c7 e0 08 ret
40007600: 91 e8 00 01 restore %g0, %g1, %o0
400115ec <rtems_io_write>:
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
400115ec: 9d e3 bf a0 save %sp, -96, %sp
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
400115f0: 03 10 00 4f sethi %hi(0x40013c00), %g1
400115f4: c2 00 61 6c ld [ %g1 + 0x16c ], %g1 ! 40013d6c <_IO_Number_of_drivers>
{
400115f8: 90 10 00 18 mov %i0, %o0
if ( major >= _IO_Number_of_drivers )
400115fc: 80 a0 40 08 cmp %g1, %o0
40011600: 08 80 00 11 bleu 40011644 <rtems_io_write+0x58>
<== NEVER TAKEN
40011604: b0 10 20 0a mov 0xa, %i0
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].write_entry;
40011608: 83 2a 20 01 sll %o0, 1, %g1
4001160c: 82 00 40 08 add %g1, %o0, %g1
40011610: 85 28 60 03 sll %g1, 3, %g2
40011614: 03 10 00 57 sethi %hi(0x40015c00), %g1
40011618: 82 10 61 00 or %g1, 0x100, %g1 ! 40015d00 <_IO_Driver_address_table>
4001161c: 82 00 40 02 add %g1, %g2, %g1
40011620: c2 00 60 10 ld [ %g1 + 0x10 ], %g1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
40011624: 80 a0 60 00 cmp %g1, 0
40011628: 02 80 00 06 be 40011640 <rtems_io_write+0x54>
<== NEVER TAKEN
4001162c: 94 10 00 1a mov %i2, %o2
40011630: 9f c0 40 00 call %g1
40011634: 92 10 00 19 mov %i1, %o1
40011638: 81 c7 e0 08 ret
4001163c: 91 e8 00 08 restore %g0, %o0, %o0
40011640: b0 10 20 00 clr %i0
<== NOT EXECUTED
}
40011644: 81 c7 e0 08 ret
<== NOT EXECUTED
40011648: 81 e8 00 00 restore
<== NOT EXECUTED
4001a3ac <rtems_panic>:
#include <rtems/bspIo.h>
#include <stdarg.h>
void rtems_panic( const char *fmt, ... )
{
4001a3ac: 9d e3 bf 98 save %sp, -104, %sp
<== NOT EXECUTED
va_list ap;
va_start( ap, fmt );
4001a3b0: 82 07 a0 48 add %fp, 0x48, %g1
<== NOT EXECUTED
4001a3b4: f2 27 a0 48 st %i1, [ %fp + 0x48 ]
<== NOT EXECUTED
vprintk( fmt, ap );
4001a3b8: 92 10 00 01 mov %g1, %o1
<== NOT EXECUTED
va_start( ap, fmt );
4001a3bc: f4 27 a0 4c st %i2, [ %fp + 0x4c ]
<== NOT EXECUTED
vprintk( fmt, ap );
4001a3c0: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
va_start( ap, fmt );
4001a3c4: f6 27 a0 50 st %i3, [ %fp + 0x50 ]
<== NOT EXECUTED
4001a3c8: f8 27 a0 54 st %i4, [ %fp + 0x54 ]
<== NOT EXECUTED
4001a3cc: fa 27 a0 58 st %i5, [ %fp + 0x58 ]
<== NOT EXECUTED
vprintk( fmt, ap );
4001a3d0: 7f ff d2 8a call 4000edf8 <vprintk>
<== NOT EXECUTED
4001a3d4: c2 27 bf fc st %g1, [ %fp + -4 ]
<== NOT EXECUTED
va_end( ap);
_Terminate( RTEMS_FATAL_SOURCE_PANIC, (Internal_errors_t) fmt );
4001a3d8: 92 10 00 18 mov %i0, %o1
<== NOT EXECUTED
4001a3dc: 40 00 02 30 call 4001ac9c <_Terminate>
<== NOT EXECUTED
4001a3e0: 90 10 20 0b mov 0xb, %o0
<== NOT EXECUTED
4001a3e4: 01 00 00 00 nop
<== NOT EXECUTED
40006d98 <rtems_rbheap_allocate>:
return big_enough;
}
void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size)
{
40006d98: 9d e3 bf a0 save %sp, -96, %sp
void *ptr = NULL;
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
uintptr_t alignment = control->alignment;
40006d9c: c2 06 20 1c ld [ %i0 + 0x1c ], %g1
uintptr_t excess = value % alignment;
40006da0: 81 80 20 00 wr %g0, %y
40006da4: 01 00 00 00 nop
40006da8: 01 00 00 00 nop
40006dac: 01 00 00 00 nop
40006db0: b6 76 40 01 udiv %i1, %g1, %i3
40006db4: b6 5e c0 01 smul %i3, %g1, %i3
if (excess > 0) {
40006db8: b6 a6 40 1b subcc %i1, %i3, %i3
40006dbc: 22 80 00 3c be,a 40006eac <rtems_rbheap_allocate+0x114>
40006dc0: b6 10 00 19 mov %i1, %i3
value += alignment - excess;
40006dc4: 82 00 40 19 add %g1, %i1, %g1
40006dc8: b6 20 40 1b sub %g1, %i3, %i3
40006dcc: 80 a6 c0 19 cmp %i3, %i1
40006dd0: 82 60 3f ff subx %g0, -1, %g1
uintptr_t aligned_size = align_up(alignment, size);
if (size > 0 && size <= aligned_size) {
40006dd4: 80 a6 60 00 cmp %i1, 0
40006dd8: 02 80 00 33 be 40006ea4 <rtems_rbheap_allocate+0x10c>
40006ddc: 80 88 60 ff btst 0xff, %g1
40006de0: 02 80 00 31 be 40006ea4 <rtems_rbheap_allocate+0x10c>
<== NEVER TAKEN
40006de4: 84 06 20 04 add %i0, 4, %g2
return _Chain_Immutable_head( the_chain )->next;
40006de8: fa 06 00 00 ld [ %i0 ], %i5
while (current != tail && big_enough == NULL) {
40006dec: 80 a7 40 02 cmp %i5, %g2
40006df0: 02 80 00 2d be 40006ea4 <rtems_rbheap_allocate+0x10c>
40006df4: 01 00 00 00 nop
if (free_chunk->size >= size) {
40006df8: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
40006dfc: 80 a6 c0 01 cmp %i3, %g1
40006e00: 38 80 00 26 bgu,a 40006e98 <rtems_rbheap_allocate+0x100>
40006e04: fa 07 40 00 ld [ %i5 ], %i5
rtems_rbheap_chunk *free_chunk = search_free_chunk(free_chain, aligned_size);
if (free_chunk != NULL) {
40006e08: 80 a7 60 00 cmp %i5, 0
40006e0c: 02 80 00 26 be 40006ea4 <rtems_rbheap_allocate+0x10c>
<== NEVER TAKEN
40006e10: 80 a0 40 1b cmp %g1, %i3
uintptr_t free_size = free_chunk->size;
if (free_size > aligned_size) {
40006e14: 08 80 00 28 bleu 40006eb4 <rtems_rbheap_allocate+0x11c>
40006e18: b8 10 00 01 mov %g1, %i4
return _Chain_Immutable_head( the_chain )->next;
40006e1c: f2 06 20 0c ld [ %i0 + 0xc ], %i1
return &the_chain->Tail.Node;
40006e20: 82 06 20 10 add %i0, 0x10, %g1
if ( !_Chain_Is_empty(the_chain))
40006e24: 80 a6 40 01 cmp %i1, %g1
40006e28: 12 80 00 2b bne 40006ed4 <rtems_rbheap_allocate+0x13c>
40006e2c: a0 06 20 0c add %i0, 0xc, %l0
(*control->extend_descriptors)(control);
40006e30: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
40006e34: 9f c0 40 00 call %g1
40006e38: 90 10 00 18 mov %i0, %o0
return _Chain_Immutable_head( the_chain )->next;
40006e3c: f4 06 20 0c ld [ %i0 + 0xc ], %i2
if ( !_Chain_Is_empty(the_chain))
40006e40: 80 a6 40 1a cmp %i1, %i2
40006e44: 02 80 00 18 be 40006ea4 <rtems_rbheap_allocate+0x10c>
40006e48: 01 00 00 00 nop
new_first = old_first->next;
40006e4c: c2 06 80 00 ld [ %i2 ], %g1
head->next = new_first;
40006e50: c2 26 20 0c st %g1, [ %i0 + 0xc ]
new_first->previous = head;
40006e54: e0 20 60 04 st %l0, [ %g1 + 4 ]
rtems_rbheap_chunk *new_chunk = get_chunk(control);
if (new_chunk != NULL) {
uintptr_t new_free_size = free_size - aligned_size;
40006e58: 82 27 00 1b sub %i4, %i3, %g1
free_chunk->size = new_free_size;
new_chunk->begin = free_chunk->begin + new_free_size;
40006e5c: c4 07 60 18 ld [ %i5 + 0x18 ], %g2
free_chunk->size = new_free_size;
40006e60: c2 27 60 1c st %g1, [ %i5 + 0x1c ]
new_chunk->begin = free_chunk->begin + new_free_size;
40006e64: 82 00 80 01 add %g2, %g1, %g1
new_chunk->size = aligned_size;
40006e68: f6 26 a0 1c st %i3, [ %i2 + 0x1c ]
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
40006e6c: 96 10 20 01 mov 1, %o3
new_chunk->begin = free_chunk->begin + new_free_size;
40006e70: c2 26 a0 18 st %g1, [ %i2 + 0x18 ]
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
40006e74: 92 06 a0 08 add %i2, 8, %o1
node->next = NULL;
40006e78: c0 26 80 00 clr [ %i2 ]
40006e7c: 90 06 20 18 add %i0, 0x18, %o0
40006e80: 15 10 00 1b sethi %hi(0x40006c00), %o2
40006e84: 40 00 00 98 call 400070e4 <rtems_rbtree_insert>
40006e88: 94 12 a0 34 or %o2, 0x34, %o2 ! 40006c34 <chunk_compare>
rtems_chain_set_off_chain(&new_chunk->chain_node);
insert_into_tree(chunk_tree, new_chunk);
ptr = (void *) new_chunk->begin;
40006e8c: f0 06 a0 18 ld [ %i2 + 0x18 ], %i0
}
}
}
return ptr;
}
40006e90: 81 c7 e0 08 ret
40006e94: 81 e8 00 00 restore
while (current != tail && big_enough == NULL) {
40006e98: 80 a0 80 1d cmp %g2, %i5
40006e9c: 32 bf ff d8 bne,a 40006dfc <rtems_rbheap_allocate+0x64>
<== NEVER TAKEN
40006ea0: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
<== NOT EXECUTED
void *ptr = NULL;
40006ea4: 81 c7 e0 08 ret
40006ea8: 91 e8 20 00 restore %g0, 0, %o0
if (excess > 0) {
40006eac: 10 bf ff ca b 40006dd4 <rtems_rbheap_allocate+0x3c>
40006eb0: 82 10 20 01 mov 1, %g1
next = the_node->next;
40006eb4: c4 07 40 00 ld [ %i5 ], %g2
previous = the_node->previous;
40006eb8: c2 07 60 04 ld [ %i5 + 4 ], %g1
next->previous = previous;
40006ebc: c2 20 a0 04 st %g1, [ %g2 + 4 ]
previous->next = next;
40006ec0: c4 20 40 00 st %g2, [ %g1 ]
node->next = NULL;
40006ec4: c0 27 40 00 clr [ %i5 ]
ptr = (void *) free_chunk->begin;
40006ec8: f0 07 60 18 ld [ %i5 + 0x18 ], %i0
return ptr;
40006ecc: 81 c7 e0 08 ret
40006ed0: 81 e8 00 00 restore
new_first = old_first->next;
40006ed4: c2 06 40 00 ld [ %i1 ], %g1
head->next = new_first;
40006ed8: c2 26 20 0c st %g1, [ %i0 + 0xc ]
new_first->previous = head;
40006edc: b4 10 00 19 mov %i1, %i2
40006ee0: 10 bf ff de b 40006e58 <rtems_rbheap_allocate+0xc0>
40006ee4: e0 20 60 04 st %l0, [ %g1 + 4 ]
40006c4c <rtems_rbheap_initialize>:
uintptr_t area_size,
uintptr_t alignment,
rtems_rbheap_extend_descriptors extend_descriptors,
void *handler_arg
)
{
40006c4c: 9d e3 bf a0 save %sp, -96, %sp
/*
* Ensure that the alignment is at least two, so that we can keep
* chunk_compare() that simple.
*/
alignment = alignment < 2 ? 2 : alignment;
40006c50: 80 a6 e0 02 cmp %i3, 2
40006c54: 1a 80 00 03 bcc 40006c60 <rtems_rbheap_initialize+0x14>
<== ALWAYS TAKEN
40006c58: b4 06 40 1a add %i1, %i2, %i2
40006c5c: b6 10 20 02 mov 2, %i3
<== NOT EXECUTED
uintptr_t excess = value % alignment;
40006c60: 81 80 20 00 wr %g0, %y
40006c64: 01 00 00 00 nop
40006c68: 01 00 00 00 nop
40006c6c: 01 00 00 00 nop
40006c70: 82 76 40 1b udiv %i1, %i3, %g1
40006c74: 82 58 40 1b smul %g1, %i3, %g1
if (excess > 0) {
40006c78: 82 a6 40 01 subcc %i1, %g1, %g1
40006c7c: 02 80 00 39 be 40006d60 <rtems_rbheap_initialize+0x114>
40006c80: 80 a6 40 1a cmp %i1, %i2
value += alignment - excess;
40006c84: a0 06 40 1b add %i1, %i3, %l0
40006c88: a0 24 00 01 sub %l0, %g1, %l0
40006c8c: 80 a4 00 19 cmp %l0, %i1
40006c90: 82 60 3f ff subx %g0, -1, %g1
aligned_begin = align_up(alignment, begin);
aligned_end = align_down(alignment, end);
if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) {
40006c94: 80 a6 40 1a cmp %i1, %i2
uintptr_t excess = value % alignment;
40006c98: 81 80 20 00 wr %g0, %y
40006c9c: 01 00 00 00 nop
40006ca0: 01 00 00 00 nop
40006ca4: 01 00 00 00 nop
40006ca8: 84 76 80 1b udiv %i2, %i3, %g2
if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) {
40006cac: 86 40 20 00 addx %g0, 0, %g3
40006cb0: 80 88 c0 01 btst %g3, %g1
40006cb4: 02 80 00 36 be 40006d8c <rtems_rbheap_initialize+0x140>
40006cb8: b4 58 80 1b smul %g2, %i3, %i2
40006cbc: 80 a4 00 1a cmp %l0, %i2
40006cc0: 1a 80 00 33 bcc 40006d8c <rtems_rbheap_initialize+0x140>
40006cc4: 82 06 20 04 add %i0, 4, %g1
return &the_chain->Tail.Node;
40006cc8: b2 06 20 10 add %i0, 0x10, %i1
head->next = tail;
40006ccc: c2 26 00 00 st %g1, [ %i0 ]
return &the_chain->Head.Node;
40006cd0: a2 06 20 0c add %i0, 0xc, %l1
head->previous = NULL;
40006cd4: c0 26 20 04 clr [ %i0 + 4 ]
(*control->extend_descriptors)(control);
40006cd8: 90 10 00 18 mov %i0, %o0
tail->previous = head;
40006cdc: f0 26 20 08 st %i0, [ %i0 + 8 ]
head->next = tail;
40006ce0: f2 26 20 0c st %i1, [ %i0 + 0xc ]
head->previous = NULL;
40006ce4: c0 26 20 10 clr [ %i0 + 0x10 ]
tail->previous = head;
40006ce8: e2 26 20 14 st %l1, [ %i0 + 0x14 ]
RB_INIT( the_rbtree );
40006cec: c0 26 20 18 clr [ %i0 + 0x18 ]
rtems_rbheap_chunk *first = NULL;
rtems_chain_initialize_empty(free_chain);
rtems_chain_initialize_empty(&control->spare_descriptor_chain);
rtems_rbtree_initialize_empty(chunk_tree);
control->alignment = alignment;
40006cf0: f6 26 20 1c st %i3, [ %i0 + 0x1c ]
control->handler_arg = handler_arg;
40006cf4: fa 26 20 24 st %i5, [ %i0 + 0x24 ]
(*control->extend_descriptors)(control);
40006cf8: 9f c7 00 00 call %i4
40006cfc: f8 26 20 20 st %i4, [ %i0 + 0x20 ]
return _Chain_Immutable_head( the_chain )->next;
40006d00: c4 06 20 0c ld [ %i0 + 0xc ], %g2
if ( !_Chain_Is_empty(the_chain))
40006d04: 80 a0 80 19 cmp %g2, %i1
40006d08: 02 80 00 14 be 40006d58 <rtems_rbheap_initialize+0x10c>
40006d0c: 82 10 20 1a mov 0x1a, %g1
new_first = old_first->next;
40006d10: c2 00 80 00 ld [ %g2 ], %g1
head->next = new_first;
40006d14: c2 26 20 0c st %g1, [ %i0 + 0xc ]
control->extend_descriptors = extend_descriptors;
first = get_chunk(control);
if (first != NULL) {
first->begin = aligned_begin;
first->size = aligned_end - aligned_begin;
40006d18: b4 26 80 10 sub %i2, %l0, %i2
new_first->previous = head;
40006d1c: e2 20 60 04 st %l1, [ %g1 + 4 ]
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
40006d20: 96 10 20 01 mov 1, %o3
first->begin = aligned_begin;
40006d24: e0 20 a0 18 st %l0, [ %g2 + 0x18 ]
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
40006d28: 15 10 00 1b sethi %hi(0x40006c00), %o2
first->size = aligned_end - aligned_begin;
40006d2c: f4 20 a0 1c st %i2, [ %g2 + 0x1c ]
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
40006d30: 94 12 a0 34 or %o2, 0x34, %o2
the_node->previous = after_node;
40006d34: f0 20 a0 04 st %i0, [ %g2 + 4 ]
40006d38: 92 00 a0 08 add %g2, 8, %o1
before_node = after_node->next;
40006d3c: c2 06 00 00 ld [ %i0 ], %g1
after_node->next = the_node;
40006d40: c4 26 00 00 st %g2, [ %i0 ]
40006d44: 90 06 20 18 add %i0, 0x18, %o0
the_node->next = before_node;
40006d48: c2 20 80 00 st %g1, [ %g2 ]
40006d4c: 40 00 00 e6 call 400070e4 <rtems_rbtree_insert>
40006d50: c4 20 60 04 st %g2, [ %g1 + 4 ]
rtems_status_code sc = RTEMS_SUCCESSFUL;
40006d54: 82 10 20 00 clr %g1
} else {
sc = RTEMS_INVALID_ADDRESS;
}
return sc;
}
40006d58: 81 c7 e0 08 ret
40006d5c: 91 e8 00 01 restore %g0, %g1, %o0
if (excess > 0) {
40006d60: 82 10 20 01 mov 1, %g1
uintptr_t excess = value % alignment;
40006d64: 81 80 20 00 wr %g0, %y
40006d68: 01 00 00 00 nop
40006d6c: 01 00 00 00 nop
40006d70: 01 00 00 00 nop
40006d74: 84 76 80 1b udiv %i2, %i3, %g2
if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) {
40006d78: 86 40 20 00 addx %g0, 0, %g3
if (excess > 0) {
40006d7c: a0 10 00 19 mov %i1, %l0
if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) {
40006d80: 80 88 c0 01 btst %g3, %g1
40006d84: 12 bf ff ce bne 40006cbc <rtems_rbheap_initialize+0x70>
40006d88: b4 58 80 1b smul %g2, %i3, %i2
sc = RTEMS_INVALID_ADDRESS;
40006d8c: 82 10 20 09 mov 9, %g1
}
40006d90: 81 c7 e0 08 ret
40006d94: 91 e8 00 01 restore %g0, %g1, %o0
40007084 <rtems_rbtree_find>:
const rtems_rbtree_control *the_rbtree,
const rtems_rbtree_node *the_node,
rtems_rbtree_compare compare,
bool is_unique
)
{
40007084: 9d e3 bf a0 save %sp, -96, %sp
return RB_ROOT( the_rbtree );
40007088: 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 ) {
4000708c: 80 a7 60 00 cmp %i5, 0
40007090: 02 80 00 0f be 400070cc <rtems_rbtree_find+0x48>
<== NEVER TAKEN
40007094: b0 10 20 00 clr %i0
rtems_rbtree_compare_result compare_result =
40007098: 92 10 00 1d mov %i5, %o1
4000709c: 9f c6 80 00 call %i2
400070a0: 90 10 00 19 mov %i1, %o0
( *compare )( the_node, iter_node );
if ( rtems_rbtree_is_equal( compare_result ) ) {
400070a4: 80 a2 20 00 cmp %o0, 0
400070a8: 12 80 00 0b bne 400070d4 <rtems_rbtree_find+0x50>
400070ac: 01 00 00 00 nop
found = iter_node;
if ( is_unique )
400070b0: 80 a6 e0 00 cmp %i3, 0
400070b4: 12 80 00 06 bne 400070cc <rtems_rbtree_find+0x48>
<== ALWAYS TAKEN
400070b8: b0 10 00 1d mov %i5, %i0
400070bc: fa 07 40 00 ld [ %i5 ], %i5
<== NOT EXECUTED
while ( iter_node != NULL ) {
400070c0: 80 a7 60 00 cmp %i5, 0
400070c4: 12 bf ff f6 bne 4000709c <rtems_rbtree_find+0x18>
400070c8: 92 10 00 1d mov %i5, %o1
400070cc: 81 c7 e0 08 ret
400070d0: 81 e8 00 00 restore
break;
}
if ( rtems_rbtree_is_greater( compare_result ) ) {
400070d4: 24 bf ff fb ble,a 400070c0 <rtems_rbtree_find+0x3c>
400070d8: fa 07 40 00 ld [ %i5 ], %i5
400070dc: 10 bf ff f9 b 400070c0 <rtems_rbtree_find+0x3c>
400070e0: fa 07 60 04 ld [ %i5 + 4 ], %i5
400070e4 <rtems_rbtree_insert>:
rtems_rbtree_control *the_rbtree,
rtems_rbtree_node *the_node,
rtems_rbtree_compare compare,
bool is_unique
)
{
400070e4: 9d e3 bf a0 save %sp, -96, %sp
return &RB_ROOT( the_rbtree );
400070e8: 82 10 00 18 mov %i0, %g1
rtems_rbtree_node **which = _RBTree_Root_reference( the_rbtree );
rtems_rbtree_node *parent = NULL;
while ( *which != NULL ) {
400070ec: fa 00 40 00 ld [ %g1 ], %i5
rtems_rbtree_node *parent = NULL;
400070f0: 84 10 20 00 clr %g2
rtems_rbtree_compare_result compare_result;
parent = *which;
compare_result = ( *compare )( the_node, parent );
400070f4: 92 10 00 1d mov %i5, %o1
while ( *which != NULL ) {
400070f8: 80 a7 60 00 cmp %i5, 0
400070fc: 02 80 00 12 be 40007144 <rtems_rbtree_insert+0x60>
40007100: 90 10 00 19 mov %i1, %o0
compare_result = ( *compare )( the_node, parent );
40007104: 9f c6 80 00 call %i2
40007108: 01 00 00 00 nop
if ( is_unique && rtems_rbtree_is_equal( compare_result ) ) {
4000710c: 80 a2 20 00 cmp %o0, 0
40007110: 12 80 00 04 bne 40007120 <rtems_rbtree_insert+0x3c>
<== ALWAYS TAKEN
40007114: 80 a6 e0 00 cmp %i3, 0
40007118: 12 80 00 14 bne 40007168 <rtems_rbtree_insert+0x84>
<== NOT EXECUTED
4000711c: 01 00 00 00 nop
<== NOT EXECUTED
return parent;
}
if ( rtems_rbtree_is_lesser( compare_result ) ) {
40007120: 80 a2 20 00 cmp %o0, 0
40007124: 06 80 00 13 bl 40007170 <rtems_rbtree_insert+0x8c>
40007128: 82 07 60 04 add %i5, 4, %g1
{
4000712c: 84 10 00 1d mov %i5, %g2
while ( *which != NULL ) {
40007130: fa 00 40 00 ld [ %g1 ], %i5
compare_result = ( *compare )( the_node, parent );
40007134: 92 10 00 1d mov %i5, %o1
while ( *which != NULL ) {
40007138: 80 a7 60 00 cmp %i5, 0
4000713c: 12 bf ff f2 bne 40007104 <rtems_rbtree_insert+0x20>
40007140: 90 10 00 19 mov %i1, %o0
RB_SET( child, parent, Node );
40007144: c4 26 60 08 st %g2, [ %i1 + 8 ]
40007148: 84 10 20 01 mov 1, %g2
4000714c: c0 26 60 04 clr [ %i1 + 4 ]
}
}
_RBTree_Initialize_node( the_node );
_RBTree_Add_child( the_node, parent, which );
_RBTree_Insert_color( the_rbtree, the_node );
40007150: 92 10 00 19 mov %i1, %o1
40007154: c0 26 40 00 clr [ %i1 ]
40007158: 90 10 00 18 mov %i0, %o0
4000715c: c4 26 60 0c st %g2, [ %i1 + 0xc ]
40007160: 40 00 0a 84 call 40009b70 <_RBTree_Insert_color>
40007164: f2 20 40 00 st %i1, [ %g1 ]
return NULL;
}
40007168: 81 c7 e0 08 ret
4000716c: 91 e8 00 1d restore %g0, %i5, %o0
return &RB_LEFT( the_node, Node );
40007170: 82 10 00 1d mov %i5, %g1
{
40007174: 10 bf ff ef b 40007130 <rtems_rbtree_insert+0x4c>
40007178: 84 10 00 1d mov %i5, %g2
400113fc <rtems_shutdown_executive>:
#include <rtems/init.h>
#include <rtems/score/interr.h>
void rtems_shutdown_executive( uint32_t result )
{
400113fc: 9d e3 bf a0 save %sp, -96, %sp
_Terminate( RTEMS_FATAL_SOURCE_EXIT, result );
40011400: 90 10 20 05 mov 5, %o0
40011404: 7f ff da c9 call 40007f28 <_Terminate>
40011408: 92 10 00 18 mov %i0, %o1
4001140c: 01 00 00 00 nop
<== NOT EXECUTED
4000ad98 <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
)
{
4000ad98: 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 ) {
4000ad9c: 80 a6 a0 01 cmp %i2, 1
4000ada0: 08 80 00 28 bleu 4000ae40 <rtems_timecounter_simple_install+0xa8>
<== NEVER TAKEN
4000ada4: b8 10 00 18 mov %i0, %i4
4000ada8: 82 10 20 1f mov 0x1f, %g1
break;
}
power_of_two *= 2;
4000adac: 10 80 00 05 b 4000adc0 <rtems_timecounter_simple_install+0x28>
4000adb0: 90 10 20 02 mov 2, %o0
for ( i = 0; i < 32; ++i ) {
4000adb4: 82 80 7f ff addcc %g1, -1, %g1
4000adb8: 02 80 00 1c be 4000ae28 <rtems_timecounter_simple_install+0x90>
<== NEVER TAKEN
4000adbc: 90 10 00 02 mov %g2, %o0
if ( power_of_two >= counter_ticks_per_clock_tick ) {
4000adc0: 80 a6 80 08 cmp %i2, %o0
4000adc4: 18 bf ff fc bgu 4000adb4 <rtems_timecounter_simple_install+0x1c>
4000adc8: 85 2a 20 01 sll %o0, 1, %g2
4000adcc: 21 20 00 00 sethi %hi(0x80000000), %l0
4000add0: ba 00 bf ff add %g2, -1, %i5
4000add4: 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;
4000add8: 94 10 20 00 clr %o2
4000addc: 96 10 00 1a mov %i2, %o3
4000ade0: 40 00 22 22 call 40013668 <__udivdi3>
4000ade4: 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 );
4000ade8: 82 5e 40 08 smul %i1, %o0, %g1
4000adec: 86 56 40 09 umul %i1, %o1, %g3
4000adf0: 85 40 00 00 rd %y, %g2
tc->scaler = scaler;
4000adf4: d0 27 20 30 st %o0, [ %i4 + 0x30 ]
tc->tc.tc_frequency = (uint32_t) ( ( frequency_in_hz * scaler ) >> 32 );
4000adf8: 84 00 40 02 add %g1, %g2, %g2
tc->scaler = scaler;
4000adfc: d2 27 20 34 st %o1, [ %i4 + 0x34 ]
tc->tc.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER;
4000ae00: 82 10 20 64 mov 0x64, %g1
tc->real_interval = counter_ticks_per_clock_tick;
4000ae04: f4 27 20 38 st %i2, [ %i4 + 0x38 ]
tc->binary_interval = ( mask + 1 ) / 2;
4000ae08: e0 27 20 3c st %l0, [ %i4 + 0x3c ]
tc->tc.tc_get_timecount = get_timecount;
4000ae0c: f6 27 00 00 st %i3, [ %i4 ]
tc->tc.tc_counter_mask = mask;
4000ae10: fa 27 20 08 st %i5, [ %i4 + 8 ]
tc->tc.tc_frequency = (uint32_t) ( ( frequency_in_hz * scaler ) >> 32 );
4000ae14: c4 27 20 14 st %g2, [ %i4 + 0x14 ]
4000ae18: c0 27 20 10 clr [ %i4 + 0x10 ]
tc->tc.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER;
4000ae1c: c2 27 20 1c st %g1, [ %i4 + 0x1c ]
_Timecounter_Install( &tc->tc );
4000ae20: 40 00 06 e9 call 4000c9c4 <_Timecounter_Install>
4000ae24: 91 e8 00 1c restore %g0, %i4, %o0
4000ae28: 85 28 a0 01 sll %g2, 1, %g2
<== NOT EXECUTED
4000ae2c: 21 1f ff ff sethi %hi(0x7ffffc00), %l0
<== NOT EXECUTED
4000ae30: ba 00 bf ff add %g2, -1, %i5
<== NOT EXECUTED
4000ae34: a0 14 23 ff or %l0, 0x3ff, %l0
<== NOT EXECUTED
4000ae38: 10 bf ff e8 b 4000add8 <rtems_timecounter_simple_install+0x40>
<== NOT EXECUTED
4000ae3c: a0 0a 00 10 and %o0, %l0, %l0
<== NOT EXECUTED
if ( power_of_two >= counter_ticks_per_clock_tick ) {
4000ae40: ba 10 20 01 mov 1, %i5
<== NOT EXECUTED
4000ae44: a0 10 20 01 mov 1, %l0
<== NOT EXECUTED
4000ae48: 10 bf ff e4 b 4000add8 <rtems_timecounter_simple_install+0x40>
<== NOT EXECUTED
4000ae4c: 90 10 20 01 mov 1, %o0
<== NOT EXECUTED