RTEMS-6
Annotated Report
sapi
Mon Mar 1 00:13:15 2021
0000000040027ad0 <_IO_Initialize_all_drivers>:
#include <rtems/ioimpl.h>
bool _IO_All_drivers_initialized;
void _IO_Initialize_all_drivers( void )
{
40027ad0: a9be7bfd stp x29, x30, [sp, #-32]!
rtems_device_major_number major;
_IO_All_drivers_initialized = true;
40027ad4: b00006e0 adrp x0, 40104000 <rtems_libio_iops+0x260>
{
40027ad8: 910003fd mov x29, sp
40027adc: a90153f3 stp x19, x20, [sp, #16]
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
40027ae0: d00000c1 adrp x1, 40041000 <__trunctfdf2+0x170>
40027ae4: f9454834 ldr x20, [x1, #2704]
_IO_All_drivers_initialized = true;
40027ae8: 52800021 mov w1, #0x1 // #1
40027aec: 39075001 strb w1, [x0, #468]
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
40027af0: b4000134 cbz x20, 40027b14 <_IO_Initialize_all_drivers+0x44> <== NEVER TAKEN
40027af4: 52800013 mov w19, #0x0 // #0
(void) rtems_io_initialize( major, 0, NULL );
40027af8: 2a1303e0 mov w0, w19
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
40027afc: 11000673 add w19, w19, #0x1
(void) rtems_io_initialize( major, 0, NULL );
40027b00: d2800002 mov x2, #0x0 // #0
40027b04: 52800001 mov w1, #0x0 // #0
40027b08: 94000006 bl 40027b20 <rtems_io_initialize>
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
40027b0c: eb33429f cmp x20, w19, uxtw
40027b10: 54ffff48 b.hi 40027af8 <_IO_Initialize_all_drivers+0x28> // b.pmore
}
40027b14: a94153f3 ldp x19, x20, [sp, #16]
40027b18: a8c27bfd ldp x29, x30, [sp], #32
40027b1c: d65f03c0 ret
00000000400252f0 <rtems_chain_get_with_wait>:
rtems_chain_control *chain,
rtems_event_set events,
rtems_interval timeout,
rtems_chain_node **node_ptr
)
{
400252f0: a9bb7bfd stp x29, x30, [sp, #-80]!
400252f4: 910003fd mov x29, sp
400252f8: a90153f3 stp x19, x20, [sp, #16]
400252fc: 2a0203f4 mov w20, w2
40025300: a9025bf5 stp x21, x22, [sp, #32]
40025304: aa0003f6 mov x22, x0
40025308: 2a0103f5 mov w21, w1
4002530c: f9001bf7 str x23, [sp, #48]
40025310: aa0303f7 mov x23, x3
40025314: d503201f nop
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_chain_node *node = NULL;
while (
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
40025318: aa1603e0 mov x0, x22
4002531c: 9400002d bl 400253d0 <rtems_chain_get>
) {
rtems_event_set out;
sc = rtems_event_receive(
40025320: 910133e3 add x3, sp, #0x4c
&& (node = rtems_chain_get( chain )) == NULL
40025324: aa0003f3 mov x19, x0
sc = rtems_event_receive(
40025328: 2a1403e2 mov w2, w20
4002532c: 2a1503e0 mov w0, w21
40025330: 52800001 mov w1, #0x0 // #0
&& (node = rtems_chain_get( chain )) == NULL
40025334: b5000133 cbnz x19, 40025358 <rtems_chain_get_with_wait+0x68>
sc = rtems_event_receive(
40025338: 97fffec2 bl 40024e40 <rtems_event_receive>
while (
4002533c: 34fffee0 cbz w0, 40025318 <rtems_chain_get_with_wait+0x28> <== NEVER TAKEN
}
*node_ptr = node;
return sc;
}
40025340: a9425bf5 ldp x21, x22, [sp, #32]
*node_ptr = node;
40025344: f90002f3 str x19, [x23]
}
40025348: a94153f3 ldp x19, x20, [sp, #16]
4002534c: f9401bf7 ldr x23, [sp, #48]
40025350: a8c57bfd ldp x29, x30, [sp], #80
40025354: d65f03c0 ret
40025358: a9425bf5 ldp x21, x22, [sp, #32]
*node_ptr = node;
4002535c: f90002f3 str x19, [x23]
40025360: 52800000 mov w0, #0x0 // #0
}
40025364: a94153f3 ldp x19, x20, [sp, #16]
40025368: f9401bf7 ldr x23, [sp, #48]
4002536c: a8c57bfd ldp x29, x30, [sp], #80
40025370: d65f03c0 ret
...
000000004002c790 <rtems_configuration_get_maximum_extensions>:
4002c790: 900006a0 adrp x0, 40100000 <Commands> <== NOT EXECUTED
4002c794: 9118c001 add x1, x0, #0x630 <== NOT EXECUTED
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
4002c798: 794c6000 ldrh w0, [x0, #1584] <== NOT EXECUTED
4002c79c: 79404421 ldrh w1, [x1, #34] <== NOT EXECUTED
4002c7a0: 7100003f cmp w1, #0x0 <== NOT EXECUTED
4002c7a4: 32010021 orr w1, w1, #0x80000000 <== NOT EXECUTED
4002c7a8: 1a810000 csel w0, w0, w1, eq // eq = none <== NOT EXECUTED
uint32_t rtems_configuration_get_maximum_extensions( void )
{
return get_config_max( &_Extension_Information );
}
4002c7ac: d65f03c0 ret <== NOT EXECUTED
0000000040028ea0 <rtems_initialize_executive>:
RTEMS_SYSINIT_IDLE_THREADS,
RTEMS_SYSINIT_ORDER_MIDDLE
);
void rtems_initialize_executive(void)
{
40028ea0: a9be7bfd stp x29, x30, [sp, #-32]!
40028ea4: 910003fd mov x29, sp
40028ea8: a90153f3 stp x19, x20, [sp, #16]
const rtems_sysinit_item *item;
/* Invoke the registered system initialization handlers */
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
40028eac: f00000b4 adrp x20, 4003f000 <_Linker_set__Sysinit__Console_simple_Initialize>
40028eb0: 91008294 add x20, x20, #0x20
RTEMS_INLINE_ROUTINE uintptr_t _Linker_set_Obfuscate( const void *ptr )
{
uintptr_t addr;
addr = (uintptr_t) ptr;
40028eb4: d00000b3 adrp x19, 4003e000 <hex2ascii_data+0x100>
40028eb8: 913ea273 add x19, x19, #0xfa8
40028ebc: eb14027f cmp x19, x20
40028ec0: 540000c0 b.eq 40028ed8 <rtems_initialize_executive+0x38> // b.none <== NEVER TAKEN
40028ec4: d503201f nop
( *item->handler )();
40028ec8: f8408660 ldr x0, [x19], #8
40028ecc: d63f0000 blr x0
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
40028ed0: eb14027f cmp x19, x20
40028ed4: 54ffffa1 b.ne 40028ec8 <rtems_initialize_executive+0x28> // b.any
40028ed8: b00006e0 adrp x0, 40105000 <Arr_2_Glob+0x1e68>
40028edc: 52800041 mov w1, #0x2 // #2
40028ee0: b90a0801 str w1, [x0, #2568]
_System_state_Set( SYSTEM_STATE_UP );
_SMP_Request_start_multitasking();
_Thread_Start_multitasking();
40028ee4: 940005c7 bl 4002a600 <_Thread_Start_multitasking>
...
00000000400263d0 <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
)
{
400263d0: a9bc7bfd stp x29, x30, [sp, #-64]!
400263d4: 910003fd mov x29, sp
400263d8: a90153f3 stp x19, x20, [sp, #16]
400263dc: 2a0003f3 mov w19, w0
400263e0: aa0103f4 mov x20, x1
400263e4: a9025bf5 stp x21, x22, [sp, #32]
400263e8: aa0203f5 mov x21, x2
400263ec: f9001bf7 str x23, [sp, #48]
rtems_device_major_number major_limit = _IO_Number_of_drivers;
400263f0: 900000b7 adrp x23, 4003a000 <__sfp_handle_exceptions+0x40>
400263f4: f9429af6 ldr x22, [x23, #1328]
ISR_lock_Context lock_context;
if ( rtems_interrupt_is_in_progress() )
400263f8: 940002b2 bl 40026ec0 <_ISR_Is_in_progress>
400263fc: 72001c1f tst w0, #0xff
40026400: 540002c1 b.ne 40026458 <rtems_io_register_driver+0x88> // b.any
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
40026404: b40003b5 cbz x21, 40026478 <rtems_io_register_driver+0xa8>
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
40026408: b90002b6 str w22, [x21]
if ( driver_table == NULL )
4002640c: b4000374 cbz x20, 40026478 <rtems_io_register_driver+0xa8>
return table->initialization_entry == NULL && table->open_entry == NULL;
40026410: f9400280 ldr x0, [x20]
40026414: b40002e0 cbz x0, 40026470 <rtems_io_register_driver+0xa0>
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
40026418: 6b1302df cmp w22, w19
4002641c: 540009c9 b.ls 40026554 <rtems_io_register_driver+0x184> // b.plast
__asm__ volatile (
40026420: d53b4223 mrs x3, daif
40026424: d50342df msr daifset, #0x2
return RTEMS_INVALID_NUMBER;
_IO_Driver_registration_acquire( &lock_context );
if ( major == 0 ) {
40026428: 34000773 cbz w19, 40026514 <rtems_io_register_driver+0x144>
_IO_Driver_registration_release( &lock_context );
return sc;
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
4002642c: 52800600 mov w0, #0x30 // #48
40026430: 900006e1 adrp x1, 40102000 <_Configuration_Scheduler_priority_dflt+0x15d0>
40026434: 91096021 add x1, x1, #0x258
40026438: 9ba07e60 umull x0, w19, w0
4002643c: 8b000022 add x2, x1, x0
return table->initialization_entry == NULL && table->open_entry == NULL;
40026440: f8606820 ldr x0, [x1, x0]
40026444: b4000260 cbz x0, 40026490 <rtems_io_register_driver+0xc0>
__asm__ volatile (
40026448: 92407c63 and x3, x3, #0xffffffff
4002644c: d51b4223 msr daif, x3
if ( !rtems_io_is_empty_table( table ) ) {
_IO_Driver_registration_release( &lock_context );
return RTEMS_RESOURCE_IN_USE;
40026450: 52800180 mov w0, #0xc // #12
40026454: 14000002 b 4002645c <rtems_io_register_driver+0x8c>
return RTEMS_CALLED_FROM_ISR;
40026458: 52800240 mov w0, #0x12 // #18
/* The driver will be initialized together with all other drivers
* in a later stage by _IO_Initialize_all_drivers().
*/
return RTEMS_SUCCESSFUL;
}
}
4002645c: a94153f3 ldp x19, x20, [sp, #16]
40026460: a9425bf5 ldp x21, x22, [sp, #32]
40026464: f9401bf7 ldr x23, [sp, #48]
40026468: a8c47bfd ldp x29, x30, [sp], #64
4002646c: d65f03c0 ret
return table->initialization_entry == NULL && table->open_entry == NULL;
40026470: f9400680 ldr x0, [x20, #8]
40026474: b5fffd20 cbnz x0, 40026418 <rtems_io_register_driver+0x48>
return RTEMS_INVALID_ADDRESS;
40026478: 52800120 mov w0, #0x9 // #9
}
4002647c: a94153f3 ldp x19, x20, [sp, #16]
40026480: a9425bf5 ldp x21, x22, [sp, #32]
40026484: f9401bf7 ldr x23, [sp, #48]
40026488: a8c47bfd ldp x29, x30, [sp], #64
4002648c: d65f03c0 ret
return table->initialization_entry == NULL && table->open_entry == NULL;
40026490: f9400440 ldr x0, [x2, #8]
40026494: b5fffda0 cbnz x0, 40026448 <rtems_io_register_driver+0x78>
_IO_Driver_address_table [major] = *driver_table;
40026498: 2a1303e2 mov w2, w19
4002649c: d2800600 mov x0, #0x30 // #48
*registered_major = major;
400264a0: b90002b3 str w19, [x21]
_IO_Driver_address_table [major] = *driver_table;
400264a4: f9400284 ldr x4, [x20]
400264a8: 9b007c42 mul x2, x2, x0
400264ac: 8b020020 add x0, x1, x2
400264b0: f8226824 str x4, [x1, x2]
400264b4: f9400681 ldr x1, [x20, #8]
400264b8: f9000401 str x1, [x0, #8]
400264bc: f9400a81 ldr x1, [x20, #16]
400264c0: f9000801 str x1, [x0, #16]
400264c4: f9400e81 ldr x1, [x20, #24]
400264c8: f9000c01 str x1, [x0, #24]
400264cc: f9401281 ldr x1, [x20, #32]
400264d0: f9001001 str x1, [x0, #32]
400264d4: f9401681 ldr x1, [x20, #40]
400264d8: f9001401 str x1, [x0, #40]
400264dc: 92407c63 and x3, x3, #0xffffffff
400264e0: d51b4223 msr daif, x3
if ( _IO_All_drivers_initialized ) {
400264e4: b00006e0 adrp x0, 40103000 <_Thread_Heads+0x8>
400264e8: 39617001 ldrb w1, [x0, #2140]
return RTEMS_SUCCESSFUL;
400264ec: 52800000 mov w0, #0x0 // #0
if ( _IO_All_drivers_initialized ) {
400264f0: 34fffb61 cbz w1, 4002645c <rtems_io_register_driver+0x8c> <== NEVER TAKEN
return rtems_io_initialize( major, 0, NULL );
400264f4: 2a1303e0 mov w0, w19
400264f8: d2800002 mov x2, #0x0 // #0
}
400264fc: a94153f3 ldp x19, x20, [sp, #16]
return rtems_io_initialize( major, 0, NULL );
40026500: 52800001 mov w1, #0x0 // #0
}
40026504: a9425bf5 ldp x21, x22, [sp, #32]
40026508: f9401bf7 ldr x23, [sp, #48]
4002650c: a8c47bfd ldp x29, x30, [sp], #64
return rtems_io_initialize( major, 0, NULL );
40026510: 17ffff9c b 40026380 <rtems_io_initialize>
rtems_device_major_number n = _IO_Number_of_drivers;
40026514: f9429ae5 ldr x5, [x23, #1328]
40026518: 2a0503e4 mov w4, w5
for ( m = 0; m < n; ++m ) {
4002651c: 34000325 cbz w5, 40026580 <rtems_io_register_driver+0x1b0> <== NEVER TAKEN
40026520: 900006e1 adrp x1, 40102000 <_Configuration_Scheduler_priority_dflt+0x15d0>
40026524: 91096021 add x1, x1, #0x258
40026528: aa0103e0 mov x0, x1
4002652c: 14000005 b 40026540 <rtems_io_register_driver+0x170>
40026530: 11000673 add w19, w19, #0x1
40026534: 9100c000 add x0, x0, #0x30
40026538: 6b13009f cmp w4, w19
4002653c: 54000180 b.eq 4002656c <rtems_io_register_driver+0x19c> // b.none
return table->initialization_entry == NULL && table->open_entry == NULL;
40026540: f9400002 ldr x2, [x0]
40026544: b5ffff62 cbnz x2, 40026530 <rtems_io_register_driver+0x160>
40026548: f9400402 ldr x2, [x0, #8]
4002654c: b5ffff22 cbnz x2, 40026530 <rtems_io_register_driver+0x160>
40026550: 17ffffd2 b 40026498 <rtems_io_register_driver+0xc8>
return RTEMS_INVALID_NUMBER;
40026554: 52800140 mov w0, #0xa // #10
}
40026558: a94153f3 ldp x19, x20, [sp, #16]
4002655c: a9425bf5 ldp x21, x22, [sp, #32]
40026560: f9401bf7 ldr x23, [sp, #48]
40026564: a8c47bfd ldp x29, x30, [sp], #64
40026568: d65f03c0 ret
*major = m;
4002656c: b90002a5 str w5, [x21]
40026570: 92407c63 and x3, x3, #0xffffffff
40026574: d51b4223 msr daif, x3
return RTEMS_TOO_MANY;
40026578: 528000a0 mov w0, #0x5 // #5
return sc;
4002657c: 17ffffb8 b 4002645c <rtems_io_register_driver+0x8c>
*major = m;
40026580: b90002bf str wzr, [x21] <== NOT EXECUTED
if ( m != n )
40026584: 17fffffb b 40026570 <rtems_io_register_driver+0x1a0> <== NOT EXECUTED
...
0000000040024770 <rtems_rbheap_allocate>:
return big_enough;
}
void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size)
{
40024770: a9bb7bfd stp x29, x30, [sp, #-80]!
40024774: 910003fd mov x29, 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;
40024778: f9401c02 ldr x2, [x0, #56]
{
4002477c: a9025bf5 stp x21, x22, [sp, #32]
uintptr_t excess = value % alignment;
40024780: 9ac20835 udiv x21, x1, x2
40024784: 9b0286b5 msub x21, x21, x2, x1
if (excess > 0) {
40024788: b40004b5 cbz x21, 4002481c <rtems_rbheap_allocate+0xac>
value += alignment - excess;
4002478c: 8b010042 add x2, x2, x1
40024790: cb150055 sub x21, x2, x21
uintptr_t aligned_size = align_up(alignment, size);
if (size > 0 && size <= aligned_size) {
40024794: eb15003f cmp x1, x21
40024798: 1a9f87e2 cset w2, ls // ls = plast
4002479c: f100003f cmp x1, #0x0
400247a0: 7a401844 ccmp w2, #0x0, #0x4, ne // ne = any
400247a4: 54000340 b.eq 4002480c <rtems_rbheap_allocate+0x9c> // b.none
return _Chain_Immutable_head( the_chain )->next;
400247a8: aa0003e1 mov x1, x0
400247ac: a90153f3 stp x19, x20, [sp, #16]
400247b0: f8408433 ldr x19, [x1], #8
while (current != tail && big_enough == NULL) {
400247b4: eb01027f cmp x19, x1
400247b8: 54000280 b.eq 40024808 <rtems_rbheap_allocate+0x98> // b.none
400247bc: d503201f nop
if (free_chunk->size >= size) {
400247c0: f9401e74 ldr x20, [x19, #56]
400247c4: eb1402bf cmp x21, x20
400247c8: 54000188 b.hi 400247f8 <rtems_rbheap_allocate+0x88> // b.pmore
rtems_rbheap_chunk *free_chunk = search_free_chunk(free_chain, aligned_size);
if (free_chunk != NULL) {
uintptr_t free_size = free_chunk->size;
if (free_size > aligned_size) {
400247cc: eb15029f cmp x20, x21
400247d0: 540002c8 b.hi 40024828 <rtems_rbheap_allocate+0xb8> // b.pmore
previous = the_node->previous;
400247d4: a9400662 ldp x2, x1, [x19]
ptr = (void *) new_chunk->begin;
}
} else {
rtems_chain_extract_unprotected(&free_chunk->chain_node);
rtems_chain_set_off_chain(&free_chunk->chain_node);
ptr = (void *) free_chunk->begin;
400247d8: f9401a60 ldr x0, [x19, #48]
next->previous = previous;
400247dc: f9000441 str x1, [x2, #8]
}
}
}
return ptr;
}
400247e0: a9425bf5 ldp x21, x22, [sp, #32]
previous->next = next;
400247e4: f9000022 str x2, [x1]
node->next = NULL;
400247e8: f900027f str xzr, [x19]
return ptr;
400247ec: a94153f3 ldp x19, x20, [sp, #16]
}
400247f0: a8c57bfd ldp x29, x30, [sp], #80
400247f4: d65f03c0 ret
return the_node->next;
400247f8: f9400273 ldr x19, [x19]
while (current != tail && big_enough == NULL) {
400247fc: eb13003f cmp x1, x19
40024800: 54fffe01 b.ne 400247c0 <rtems_rbheap_allocate+0x50> // b.any <== NEVER TAKEN
40024804: d503201f nop
40024808: a94153f3 ldp x19, x20, [sp, #16]
void *ptr = NULL;
4002480c: d2800000 mov x0, #0x0 // #0
}
40024810: a9425bf5 ldp x21, x22, [sp, #32]
40024814: a8c57bfd ldp x29, x30, [sp], #80
40024818: d65f03c0 ret
4002481c: aa0103f5 mov x21, x1
40024820: 52800022 mov w2, #0x1 // #1
40024824: 17ffffde b 4002479c <rtems_rbheap_allocate+0x2c>
return _Chain_Immutable_head( the_chain )->next;
40024828: f9400c16 ldr x22, [x0, #24]
return &the_chain->Tail.Node;
4002482c: a90363f7 stp x23, x24, [sp, #48]
40024830: 91008017 add x23, x0, #0x20
return _Chain_Immutable_head( the_chain )->next;
40024834: 91006018 add x24, x0, #0x18
if ( !_Chain_Is_empty(the_chain))
40024838: eb1702df cmp x22, x23
4002483c: 540002c0 b.eq 40024894 <rtems_rbheap_allocate+0x124> // b.none
new_first = old_first->next;
40024840: f94002c1 ldr x1, [x22]
head->next = new_first;
40024844: f9000c01 str x1, [x0, #24]
new_chunk->begin = free_chunk->begin + new_free_size;
40024848: f9401a62 ldr x2, [x19, #48]
uintptr_t new_free_size = free_size - aligned_size;
4002484c: cb150294 sub x20, x20, x21
new_first->previous = head;
40024850: f9000438 str x24, [x1, #8]
node->next = NULL;
40024854: aa1603e1 mov x1, x22
free_chunk->size = new_free_size;
40024858: f9001e74 str x20, [x19, #56]
new_chunk->begin = free_chunk->begin + new_free_size;
4002485c: 8b140054 add x20, x2, x20
new_chunk->size = aligned_size;
40024860: a90356d4 stp x20, x21, [x22, #48]
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
40024864: 52800023 mov w3, #0x1 // #1
40024868: 9100c000 add x0, x0, #0x30
4002486c: f801043f str xzr, [x1], #16
40024870: 90000002 adrp x2, 40024000 <IMFS_rename+0x10>
40024874: 91184042 add x2, x2, #0x610
40024878: 940000aa bl 40024b20 <rtems_rbtree_insert>
ptr = (void *) new_chunk->begin;
4002487c: a94153f3 ldp x19, x20, [sp, #16]
40024880: f9401ac0 ldr x0, [x22, #48]
}
40024884: a9425bf5 ldp x21, x22, [sp, #32]
40024888: a94363f7 ldp x23, x24, [sp, #48]
4002488c: a8c57bfd ldp x29, x30, [sp], #80
40024890: d65f03c0 ret
(*control->extend_descriptors)(control);
40024894: f9402001 ldr x1, [x0, #64]
40024898: f90027e0 str x0, [sp, #72]
4002489c: d63f0020 blr x1
return _Chain_Immutable_head( the_chain )->next;
400248a0: f94027e0 ldr x0, [sp, #72]
400248a4: f9400c16 ldr x22, [x0, #24]
if ( !_Chain_Is_empty(the_chain))
400248a8: eb1602ff cmp x23, x22
400248ac: 54fffca1 b.ne 40024840 <rtems_rbheap_allocate+0xd0> // b.any
void *ptr = NULL;
400248b0: d2800000 mov x0, #0x0 // #0
400248b4: a94153f3 ldp x19, x20, [sp, #16]
400248b8: a94363f7 ldp x23, x24, [sp, #48]
400248bc: 17ffffd5 b 40024810 <rtems_rbheap_allocate+0xa0>
0000000040024a90 <rtems_rbtree_find>:
const rtems_rbtree_control *the_rbtree,
const rtems_rbtree_node *the_node,
rtems_rbtree_compare compare,
bool is_unique
)
{
40024a90: a9bc7bfd stp x29, x30, [sp, #-64]!
40024a94: 910003fd mov x29, sp
40024a98: a90153f3 stp x19, x20, [sp, #16]
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Root(
const RBTree_Control *the_rbtree
)
{
return RB_ROOT( the_rbtree );
40024a9c: f9400013 ldr x19, [x0]
40024aa0: a9025bf5 stp x21, x22, [sp, #32]
rtems_rbtree_node *iter_node = rtems_rbtree_root( the_rbtree );
rtems_rbtree_node *found = NULL;
while ( iter_node != NULL ) {
40024aa4: b4000353 cbz x19, 40024b0c <rtems_rbtree_find+0x7c> <== NEVER TAKEN
40024aa8: aa0103f4 mov x20, x1
40024aac: aa0203f5 mov x21, x2
40024ab0: f9001bf7 str x23, [sp, #48]
40024ab4: 12001c77 and w23, w3, #0xff
rtems_rbtree_node *found = NULL;
40024ab8: d2800016 mov x22, #0x0 // #0
40024abc: d503201f nop
rtems_rbtree_compare_result compare_result =
( *compare )( the_node, iter_node );
40024ac0: aa1303e1 mov x1, x19
40024ac4: aa1403e0 mov x0, x20
40024ac8: d63f02a0 blr x21
if ( rtems_rbtree_is_equal( compare_result ) ) {
40024acc: f100001f cmp x0, #0x0
40024ad0: b5000160 cbnz x0, 40024afc <rtems_rbtree_find+0x6c>
40024ad4: aa1303f6 mov x22, x19
found = iter_node;
if ( is_unique )
40024ad8: 35000077 cbnz w23, 40024ae4 <rtems_rbtree_find+0x54>
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Left(
const RBTree_Node *the_node
)
{
return RB_LEFT( the_node, Node );
40024adc: f9400273 ldr x19, [x19]
while ( iter_node != NULL ) {
40024ae0: b5ffff13 cbnz x19, 40024ac0 <rtems_rbtree_find+0x30>
} else {
iter_node = rtems_rbtree_left( iter_node );
}
}
return found;
40024ae4: f9401bf7 ldr x23, [sp, #48]
}
40024ae8: aa1603e0 mov x0, x22
40024aec: a94153f3 ldp x19, x20, [sp, #16]
40024af0: a9425bf5 ldp x21, x22, [sp, #32]
40024af4: a8c47bfd ldp x29, x30, [sp], #64
40024af8: d65f03c0 ret
if ( rtems_rbtree_is_greater( compare_result ) ) {
40024afc: 54ffff0d b.le 40024adc <rtems_rbtree_find+0x4c>
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Right(
const RBTree_Node *the_node
)
{
return RB_RIGHT( the_node, Node );
40024b00: f9400673 ldr x19, [x19, #8]
while ( iter_node != NULL ) {
40024b04: b5fffdf3 cbnz x19, 40024ac0 <rtems_rbtree_find+0x30>
40024b08: 17fffff7 b 40024ae4 <rtems_rbtree_find+0x54>
rtems_rbtree_node *found = NULL;
40024b0c: d2800016 mov x22, #0x0 // #0 <== NOT EXECUTED
40024b10: 17fffff6 b 40024ae8 <rtems_rbtree_find+0x58> <== NOT EXECUTED
...
0000000040025760 <rtems_rbtree_initialize>:
40025760: f900001f str xzr, [x0]
rtems_rbtree_initialize_empty( the_rbtree );
count = number_nodes;
next = starting_address;
while ( count-- ) {
40025764: b4000363 cbz x3, 400257d0 <rtems_rbtree_initialize+0x70> <== NEVER TAKEN
{
40025768: a9bc7bfd stp x29, x30, [sp, #-64]!
4002576c: 910003fd mov x29, sp
40025770: a90153f3 stp x19, x20, [sp, #16]
40025774: aa0203f3 mov x19, x2
40025778: d1000474 sub x20, x3, #0x1
4002577c: a9025bf5 stp x21, x22, [sp, #32]
40025780: aa0003f5 mov x21, x0
40025784: aa0403f6 mov x22, x4
40025788: a90363f7 stp x23, x24, [sp, #48]
4002578c: aa0103f7 mov x23, x1
40025790: 12001cb8 and w24, w5, #0xff
40025794: d503201f nop
rtems_rbtree_insert( the_rbtree, next, compare, is_unique );
40025798: aa1303e1 mov x1, x19
while ( count-- ) {
4002579c: d1000694 sub x20, x20, #0x1
rtems_rbtree_insert( the_rbtree, next, compare, is_unique );
400257a0: 2a1803e3 mov w3, w24
400257a4: aa1703e2 mov x2, x23
400257a8: aa1503e0 mov x0, x21
400257ac: 94000031 bl 40025870 <rtems_rbtree_insert>
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
400257b0: 8b160273 add x19, x19, x22
while ( count-- ) {
400257b4: b100069f cmn x20, #0x1
400257b8: 54ffff01 b.ne 40025798 <rtems_rbtree_initialize+0x38> // b.any
next = (rtems_rbtree_node *) _Addresses_Add_offset( next, node_size );
}
}
400257bc: a94153f3 ldp x19, x20, [sp, #16]
400257c0: a9425bf5 ldp x21, x22, [sp, #32]
400257c4: a94363f7 ldp x23, x24, [sp, #48]
400257c8: a8c47bfd ldp x29, x30, [sp], #64
400257cc: d65f03c0 ret
400257d0: d65f03c0 ret <== NOT EXECUTED
...