RTEMS-6
Annotated Report
sapi
Sun Feb 28 23:39:57 2021
00107544 <rtems_chain_get_with_wait>:
rtems_chain_control *chain,
rtems_event_set events,
rtems_interval timeout,
rtems_chain_node **node_ptr
)
{
107544: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
107548: 4607 mov r7, r0
10754a: b082 sub sp, #8
10754c: 460e mov r6, r1
10754e: 4615 mov r5, r2
107550: 4698 mov r8, r3
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_chain_node *node = NULL;
while (
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
107552: 4638 mov r0, r7
107554: f000 f824 bl 1075a0 <rtems_chain_get>
107558: 4604 mov r4, r0
) {
rtems_event_set out;
sc = rtems_event_receive(
10755a: ab01 add r3, sp, #4
10755c: 462a mov r2, r5
10755e: 4630 mov r0, r6
107560: 4621 mov r1, r4
&& (node = rtems_chain_get( chain )) == NULL
107562: b944 cbnz r4, 107576 <rtems_chain_get_with_wait+0x32>
sc = rtems_event_receive(
107564: f7ff fe88 bl 107278 <rtems_event_receive>
while (
107568: 2800 cmp r0, #0
10756a: d0f2 beq.n 107552 <rtems_chain_get_with_wait+0xe> <== ALWAYS TAKEN
timeout,
&out
);
}
*node_ptr = node;
10756c: f8c8 4000 str.w r4, [r8]
return sc;
}
107570: b002 add sp, #8
107572: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
107576: 2000 movs r0, #0
*node_ptr = node;
107578: f8c8 4000 str.w r4, [r8]
}
10757c: b002 add sp, #8
10757e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
107582: bf00 nop
00107760 <rtems_configuration_get_maximum_barriers>:
return information->objects_per_block != 0;
107760: f240 3310 movw r3, #784 ; 0x310
107764: f2c0 0320 movt r3, #32
107768: 8a58 ldrh r0, [r3, #18]
#include <rtems/rtems/timerimpl.h>
#include <rtems/score/objectimpl.h>
static uint32_t get_config_max( const Objects_Information *info )
{
if ( _Objects_Is_auto_extend( info ) ) {
10776a: b908 cbnz r0, 107770 <rtems_configuration_get_maximum_barriers+0x10>
*/
RTEMS_INLINE_ROUTINE Objects_Maximum _Objects_Get_index(
Objects_Id id
)
{
return
10776c: 8818 ldrh r0, [r3, #0]
}
uint32_t rtems_configuration_get_maximum_barriers( void )
{
return get_config_max( &_Barrier_Information );
}
10776e: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
107770: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
107774: 4770 bx lr <== NOT EXECUTED
107776: bf00 nop
001103bc <rtems_configuration_get_maximum_extensions>:
1103bc: f240 43b8 movw r3, #1208 ; 0x4b8 <== NOT EXECUTED
1103c0: f2c0 0320 movt r3, #32 <== NOT EXECUTED
1103c4: 8a58 ldrh r0, [r3, #18] <== NOT EXECUTED
if ( _Objects_Is_auto_extend( info ) ) {
1103c6: b908 cbnz r0, 1103cc <rtems_configuration_get_maximum_extensions+0x10><== NOT EXECUTED
1103c8: 8818 ldrh r0, [r3, #0] <== NOT EXECUTED
uint32_t rtems_configuration_get_maximum_extensions( void )
{
return get_config_max( &_Extension_Information );
}
1103ca: 4770 bx lr <== NOT EXECUTED
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
1103cc: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
1103d0: 4770 bx lr <== NOT EXECUTED
1103d2: bf00 nop
00107778 <rtems_configuration_get_maximum_message_queues>:
107778: f240 3370 movw r3, #880 ; 0x370
10777c: f2c0 0320 movt r3, #32
107780: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
107782: b908 cbnz r0, 107788 <rtems_configuration_get_maximum_message_queues+0x10>
107784: 8818 ldrh r0, [r3, #0]
}
uint32_t rtems_configuration_get_maximum_message_queues( void )
{
return get_config_max( &_Message_queue_Information );
}
107786: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
107788: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
10778c: 4770 bx lr <== NOT EXECUTED
10778e: bf00 nop
00107790 <rtems_configuration_get_maximum_partitions>:
107790: f240 33a0 movw r3, #928 ; 0x3a0
107794: f2c0 0320 movt r3, #32
107798: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
10779a: b908 cbnz r0, 1077a0 <rtems_configuration_get_maximum_partitions+0x10>
10779c: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_partitions( void )
{
return get_config_max( &_Partition_Information );
}
10779e: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
1077a0: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
1077a4: 4770 bx lr <== NOT EXECUTED
1077a6: bf00 nop
001077a8 <rtems_configuration_get_maximum_periods>:
1077a8: f240 33d0 movw r3, #976 ; 0x3d0
1077ac: f2c0 0320 movt r3, #32
1077b0: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
1077b2: b908 cbnz r0, 1077b8 <rtems_configuration_get_maximum_periods+0x10>
1077b4: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_periods( void )
{
return get_config_max( &_Rate_monotonic_Information );
}
1077b6: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
1077b8: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
1077bc: 4770 bx lr <== NOT EXECUTED
1077be: bf00 nop
001077c0 <rtems_configuration_get_maximum_ports>:
1077c0: f240 3340 movw r3, #832 ; 0x340
1077c4: f2c0 0320 movt r3, #32
1077c8: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
1077ca: b908 cbnz r0, 1077d0 <rtems_configuration_get_maximum_ports+0x10>
1077cc: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_ports( void )
{
return get_config_max( &_Dual_ported_memory_Information );
}
1077ce: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
1077d0: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
1077d4: 4770 bx lr <== NOT EXECUTED
1077d6: bf00 nop
001077d8 <rtems_configuration_get_maximum_regions>:
1077d8: f240 4300 movw r3, #1024 ; 0x400
1077dc: f2c0 0320 movt r3, #32
1077e0: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
1077e2: b908 cbnz r0, 1077e8 <rtems_configuration_get_maximum_regions+0x10>
1077e4: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_regions( void )
{
return get_config_max( &_Region_Information );
}
1077e6: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
1077e8: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
1077ec: 4770 bx lr <== NOT EXECUTED
1077ee: bf00 nop
001077f0 <rtems_configuration_get_maximum_semaphores>:
1077f0: f240 4360 movw r3, #1120 ; 0x460
1077f4: f2c0 0320 movt r3, #32
1077f8: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
1077fa: b908 cbnz r0, 107800 <rtems_configuration_get_maximum_semaphores+0x10>
1077fc: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_semaphores( void )
{
return get_config_max( &_Semaphore_Information );
}
1077fe: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
107800: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
107804: 4770 bx lr <== NOT EXECUTED
107806: bf00 nop
00107820 <rtems_configuration_get_maximum_tasks>:
107820: f240 0354 movw r3, #84 ; 0x54
107824: f2c0 0320 movt r3, #32
107828: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
10782a: b908 cbnz r0, 107830 <rtems_configuration_get_maximum_tasks+0x10>
10782c: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_tasks( void )
{
return get_config_max( &_RTEMS_tasks_Information.Objects );
}
10782e: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
107830: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
107834: 4770 bx lr <== NOT EXECUTED
107836: bf00 nop
00107808 <rtems_configuration_get_maximum_timers>:
107808: f240 4330 movw r3, #1072 ; 0x430
10780c: f2c0 0320 movt r3, #32
107810: 8a58 ldrh r0, [r3, #18]
if ( _Objects_Is_auto_extend( info ) ) {
107812: b908 cbnz r0, 107818 <rtems_configuration_get_maximum_timers+0x10>
107814: 8818 ldrh r0, [r3, #0]
uint32_t rtems_configuration_get_maximum_timers( void )
{
return get_config_max( &_Timer_Information );
}
107816: 4770 bx lr
return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS;
107818: f040 4000 orr.w r0, r0, #2147483648 ; 0x80000000 <== NOT EXECUTED
10781c: 4770 bx lr <== NOT EXECUTED
10781e: bf00 nop
0010ece0 <rtems_counter_initialize_converter>:
{
return (rtems_counter_ticks) (((uint64_t) sbt * from_sbt_scaler) >> 31);
}
void rtems_counter_initialize_converter( uint32_t frequency )
{
10ece0: b5f8 push {r3, r4, r5, r6, r7, lr}
uint64_t ns_per_s = UINT64_C(1000000000);
uint64_t bin_per_s = UINT64_C(1) << 32;
to_ns_scaler = ((ns_per_s << 32) + frequency - 1) / frequency;
10ece2: f64c 15ff movw r5, #51711 ; 0xc9ff
{
10ece6: 4604 mov r4, r0
to_ns_scaler = ((ns_per_s << 32) + frequency - 1) / frequency;
10ece8: 2600 movs r6, #0
10ecea: 3801 subs r0, #1
10ecec: f6c3 359a movt r5, #15258 ; 0x3b9a
10ecf0: f642 3778 movw r7, #11128 ; 0x2b78
10ecf4: f145 0100 adc.w r1, r5, #0
10ecf8: 4622 mov r2, r4
10ecfa: f2c0 0720 movt r7, #32
10ecfe: 4633 mov r3, r6
10ed00: f7fe fc48 bl 10d594 <__aeabi_uldivmod>
10ed04: e9c7 0100 strd r0, r1, [r7]
from_ns_scaler = ((UINT64_C(1) << 32) * frequency + ns_per_s - 1) / ns_per_s;
10ed08: f642 3768 movw r7, #11112 ; 0x2b68
10ed0c: a314 add r3, pc, #80 ; (adr r3, 10ed60 <rtems_counter_initialize_converter+0x80>)
10ed0e: e9d3 2300 ldrd r2, r3, [r3]
10ed12: 4628 mov r0, r5
10ed14: f2c0 0720 movt r7, #32
to_sbt_scaler = ((bin_per_s << 31) + frequency - 1) / frequency;
10ed18: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff
from_ns_scaler = ((UINT64_C(1) << 32) * frequency + ns_per_s - 1) / ns_per_s;
10ed1c: 4621 mov r1, r4
10ed1e: f7fe fc39 bl 10d594 <__aeabi_uldivmod>
10ed22: e9c7 0100 strd r0, r1, [r7]
to_sbt_scaler = ((bin_per_s << 31) + frequency - 1) / frequency;
10ed26: 1960 adds r0, r4, r5
10ed28: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000
10ed2c: 4622 mov r2, r4
10ed2e: 4633 mov r3, r6
10ed30: f141 0100 adc.w r1, r1, #0
10ed34: f7fe fc2e bl 10d594 <__aeabi_uldivmod>
from_sbt_scaler = ((UINT64_C(1) << 31) * frequency + bin_per_s - 1) / bin_per_s;
10ed38: f04f 4300 mov.w r3, #2147483648 ; 0x80000000
10ed3c: 4632 mov r2, r6
10ed3e: fbe4 5203 umlal r5, r2, r4, r3
to_sbt_scaler = ((bin_per_s << 31) + frequency - 1) / frequency;
10ed42: f642 3780 movw r7, #11136 ; 0x2b80
from_sbt_scaler = ((UINT64_C(1) << 31) * frequency + bin_per_s - 1) / bin_per_s;
10ed46: f642 3370 movw r3, #11120 ; 0x2b70
to_sbt_scaler = ((bin_per_s << 31) + frequency - 1) / frequency;
10ed4a: f2c0 0720 movt r7, #32
from_sbt_scaler = ((UINT64_C(1) << 31) * frequency + bin_per_s - 1) / bin_per_s;
10ed4e: f2c0 0320 movt r3, #32
to_sbt_scaler = ((bin_per_s << 31) + frequency - 1) / frequency;
10ed52: e9c7 0100 strd r0, r1, [r7]
from_sbt_scaler = ((UINT64_C(1) << 31) * frequency + bin_per_s - 1) / bin_per_s;
10ed56: e9c3 2600 strd r2, r6, [r3]
}
10ed5a: bdf8 pop {r3, r4, r5, r6, r7, pc}
10ed5c: f3af 8000 nop.w <== NOT EXECUTED
10ed60: 3b9aca00 .word 0x3b9aca00 <== NOT EXECUTED
10ed64: 00000000 .word 0x00000000 <== NOT EXECUTED
0010e3dc <rtems_initialize_executive>:
void rtems_initialize_executive(void)
{
const rtems_sysinit_item *item;
/* Invoke the registered system initialization handlers */
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
10e3dc: f249 25cc movw r5, #37580 ; 0x92cc
RTEMS_INLINE_ROUTINE uintptr_t _Linker_set_Obfuscate( const void *ptr )
{
uintptr_t addr;
addr = (uintptr_t) ptr;
10e3e0: f249 2490 movw r4, #37520 ; 0x9290
10e3e4: f2c0 0511 movt r5, #17
10e3e8: f2c0 0411 movt r4, #17
10e3ec: 42ac cmp r4, r5
{
10e3ee: b508 push {r3, lr}
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
10e3f0: d004 beq.n 10e3fc <rtems_initialize_executive+0x20> <== ALWAYS TAKEN
( *item->handler )();
10e3f2: f854 3b04 ldr.w r3, [r4], #4
10e3f6: 4798 blx r3
RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) {
10e3f8: 42ac cmp r4, r5
10e3fa: d1fa bne.n 10e3f2 <rtems_initialize_executive+0x16>
10e3fc: f242 7350 movw r3, #10064 ; 0x2750
10e400: 2202 movs r2, #2
10e402: f2c0 0320 movt r3, #32
10e406: 601a str r2, [r3, #0]
_System_state_Set( SYSTEM_STATE_UP );
_SMP_Request_start_multitasking();
_Thread_Start_multitasking();
10e408: f000 ffc8 bl 10f39c <_Thread_Start_multitasking>
00107e08 <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
)
{
107e08: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
rtems_device_major_number major_limit = _IO_Number_of_drivers;
107e0c: f240 4818 movw r8, #1048 ; 0x418
107e10: f2c0 0811 movt r8, #17
{
107e14: 4604 mov r4, r0
107e16: 460d mov r5, r1
107e18: 4616 mov r6, r2
rtems_device_major_number major_limit = _IO_Number_of_drivers;
107e1a: f8d8 7000 ldr.w r7, [r8]
ISR_lock_Context lock_context;
if ( rtems_interrupt_is_in_progress() )
107e1e: f000 fbad bl 10857c <_ISR_Is_in_progress>
107e22: b9e0 cbnz r0, 107e5e <rtems_io_register_driver+0x56>
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
107e24: b30e cbz r6, 107e6a <rtems_io_register_driver+0x62>
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
107e26: 6037 str r7, [r6, #0]
if ( driver_table == NULL )
107e28: b1fd cbz r5, 107e6a <rtems_io_register_driver+0x62>
return table->initialization_entry == NULL && table->open_entry == NULL;
107e2a: 682b ldr r3, [r5, #0]
107e2c: b1d3 cbz r3, 107e64 <rtems_io_register_driver+0x5c>
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
107e2e: 42a7 cmp r7, r4
107e30: d951 bls.n 107ed6 <rtems_io_register_driver+0xce>
__asm__ volatile (
107e32: f3ef 8700 mrs r7, CPSR
107e36: f047 0380 orr.w r3, r7, #128 ; 0x80
107e3a: f383 8900 msr CPSR_fc, r3
return RTEMS_INVALID_NUMBER;
_IO_Driver_registration_acquire( &lock_context );
if ( major == 0 ) {
107e3e: 2c00 cmp r4, #0
107e40: d033 beq.n 107eaa <rtems_io_register_driver+0xa2>
_IO_Driver_registration_release( &lock_context );
return sc;
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
107e42: 0063 lsls r3, r4, #1
107e44: f241 119c movw r1, #4508 ; 0x119c
107e48: f2c0 0120 movt r1, #32
107e4c: 191a adds r2, r3, r4
107e4e: 00d2 lsls r2, r2, #3
return table->initialization_entry == NULL && table->open_entry == NULL;
107e50: 5888 ldr r0, [r1, r2]
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
107e52: 440a add r2, r1
return table->initialization_entry == NULL && table->open_entry == NULL;
107e54: b160 cbz r0, 107e70 <rtems_io_register_driver+0x68>
__asm__ volatile (
107e56: f387 8900 msr CPSR_fc, r7
if ( !rtems_io_is_empty_table( table ) ) {
_IO_Driver_registration_release( &lock_context );
return RTEMS_RESOURCE_IN_USE;
107e5a: 200c movs r0, #12
107e5c: e000 b.n 107e60 <rtems_io_register_driver+0x58>
return RTEMS_CALLED_FROM_ISR;
107e5e: 2012 movs r0, #18
/* The driver will be initialized together with all other drivers
* in a later stage by _IO_Initialize_all_drivers().
*/
return RTEMS_SUCCESSFUL;
}
}
107e60: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
return table->initialization_entry == NULL && table->open_entry == NULL;
107e64: 686b ldr r3, [r5, #4]
107e66: 2b00 cmp r3, #0
107e68: d1e1 bne.n 107e2e <rtems_io_register_driver+0x26>
return RTEMS_INVALID_ADDRESS;
107e6a: 2009 movs r0, #9
}
107e6c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
return table->initialization_entry == NULL && table->open_entry == NULL;
107e70: 6852 ldr r2, [r2, #4]
107e72: 2a00 cmp r2, #0
107e74: d1ef bne.n 107e56 <rtems_io_register_driver+0x4e>
*registered_major = major;
107e76: 6034 str r4, [r6, #0]
_IO_Driver_address_table [major] = *driver_table;
107e78: 4423 add r3, r4
107e7a: eb01 06c3 add.w r6, r1, r3, lsl #3
107e7e: cd0f ldmia r5!, {r0, r1, r2, r3}
107e80: c60f stmia r6!, {r0, r1, r2, r3}
107e82: e895 0003 ldmia.w r5, {r0, r1}
107e86: e886 0003 stmia.w r6, {r0, r1}
107e8a: f387 8900 msr CPSR_fc, r7
if ( _IO_All_drivers_initialized ) {
107e8e: f641 73c0 movw r3, #8128 ; 0x1fc0
107e92: f2c0 0320 movt r3, #32
107e96: 7818 ldrb r0, [r3, #0]
107e98: 2800 cmp r0, #0
107e9a: d0e1 beq.n 107e60 <rtems_io_register_driver+0x58> <== ALWAYS TAKEN
return rtems_io_initialize( major, 0, NULL );
107e9c: 2200 movs r2, #0
107e9e: 4620 mov r0, r4
107ea0: 4611 mov r1, r2
}
107ea2: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
return rtems_io_initialize( major, 0, NULL );
107ea6: f7ff bf91 b.w 107dcc <rtems_io_initialize>
rtems_device_major_number n = _IO_Number_of_drivers;
107eaa: f8d8 0000 ldr.w r0, [r8]
for ( m = 0; m < n; ++m ) {
107eae: b1d0 cbz r0, 107ee6 <rtems_io_register_driver+0xde>
107eb0: f241 119c movw r1, #4508 ; 0x119c
107eb4: f2c0 0120 movt r1, #32
107eb8: 460b mov r3, r1
107eba: e003 b.n 107ec4 <rtems_io_register_driver+0xbc>
107ebc: 3401 adds r4, #1
107ebe: 3318 adds r3, #24
107ec0: 42a0 cmp r0, r4
107ec2: d00b beq.n 107edc <rtems_io_register_driver+0xd4>
return table->initialization_entry == NULL && table->open_entry == NULL;
107ec4: 681a ldr r2, [r3, #0]
107ec6: 2a00 cmp r2, #0
107ec8: d1f8 bne.n 107ebc <rtems_io_register_driver+0xb4>
107eca: 685a ldr r2, [r3, #4]
107ecc: 2a00 cmp r2, #0
107ece: d1f5 bne.n 107ebc <rtems_io_register_driver+0xb4>
*major = m;
107ed0: 0063 lsls r3, r4, #1
107ed2: 6034 str r4, [r6, #0]
if ( m != n )
107ed4: e7d0 b.n 107e78 <rtems_io_register_driver+0x70>
return RTEMS_INVALID_NUMBER;
107ed6: 200a movs r0, #10
}
107ed8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
*major = m;
107edc: 6030 str r0, [r6, #0]
107ede: f387 8900 msr CPSR_fc, r7
return RTEMS_TOO_MANY;
107ee2: 2005 movs r0, #5
return sc;
107ee4: e7bc b.n 107e60 <rtems_io_register_driver+0x58>
*major = m;
107ee6: 6034 str r4, [r6, #0] <== NOT EXECUTED
if ( m != n )
107ee8: e7f9 b.n 107ede <rtems_io_register_driver+0xd6> <== NOT EXECUTED
107eea: bf00 nop
00106c48 <rtems_rbheap_allocate>:
return big_enough;
}
void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size)
{
106c48: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
106c4c: 4607 mov r7, r0
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;
106c4e: 69c6 ldr r6, [r0, #28]
{
106c50: 460c mov r4, r1
uintptr_t excess = value % alignment;
106c52: 4608 mov r0, r1
106c54: 4631 mov r1, r6
106c56: f005 fa95 bl 10c184 <__aeabi_uidivmod>
if (excess > 0) {
106c5a: b321 cbz r1, 106ca6 <rtems_rbheap_allocate+0x5e>
value += alignment - excess;
106c5c: 4426 add r6, r4
106c5e: 1a76 subs r6, r6, r1
uintptr_t aligned_size = align_up(alignment, size);
if (size > 0 && size <= aligned_size) {
106c60: 42b4 cmp r4, r6
106c62: bf8c ite hi
106c64: 2300 movhi r3, #0
106c66: 2301 movls r3, #1
106c68: 2c00 cmp r4, #0
106c6a: bf0c ite eq
106c6c: 2300 moveq r3, #0
106c6e: f003 0301 andne.w r3, r3, #1
106c72: b1ab cbz r3, 106ca0 <rtems_rbheap_allocate+0x58>
return _Chain_Immutable_head( the_chain )->next;
106c74: 463b mov r3, r7
106c76: f853 4b04 ldr.w r4, [r3], #4
while (current != tail && big_enough == NULL) {
106c7a: 429c cmp r4, r3
106c7c: d010 beq.n 106ca0 <rtems_rbheap_allocate+0x58>
if (free_chunk->size >= size) {
106c7e: 69e5 ldr r5, [r4, #28]
106c80: 42ae cmp r6, r5
106c82: d80a bhi.n 106c9a <rtems_rbheap_allocate+0x52>
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) {
106c84: 42b5 cmp r5, r6
106c86: d811 bhi.n 106cac <rtems_rbheap_allocate+0x64>
previous = the_node->previous;
106c88: e9d4 2300 ldrd r2, r3, [r4]
node->next = NULL;
106c8c: 2100 movs r1, #0
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;
106c8e: 69a0 ldr r0, [r4, #24]
next->previous = previous;
106c90: 6053 str r3, [r2, #4]
previous->next = next;
106c92: 601a str r2, [r3, #0]
node->next = NULL;
106c94: 6021 str r1, [r4, #0]
}
}
}
return ptr;
}
106c96: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
return the_node->next;
106c9a: 6824 ldr r4, [r4, #0]
while (current != tail && big_enough == NULL) {
106c9c: 42a3 cmp r3, r4
106c9e: d1ee bne.n 106c7e <rtems_rbheap_allocate+0x36> <== ALWAYS TAKEN
void *ptr = NULL;
106ca0: 2000 movs r0, #0
}
106ca2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
106ca6: 4626 mov r6, r4
106ca8: 2301 movs r3, #1
106caa: e7dd b.n 106c68 <rtems_rbheap_allocate+0x20>
return _Chain_Immutable_head( the_chain )->next;
106cac: 46b9 mov r9, r7
return &the_chain->Tail.Node;
106cae: f107 0a10 add.w sl, r7, #16
return _Chain_Immutable_head( the_chain )->next;
106cb2: f859 8f0c ldr.w r8, [r9, #12]!
if ( !_Chain_Is_empty(the_chain))
106cb6: 45d0 cmp r8, sl
106cb8: d01d beq.n 106cf6 <rtems_rbheap_allocate+0xae>
new_first = old_first->next;
106cba: f8d8 3000 ldr.w r3, [r8]
uintptr_t new_free_size = free_size - aligned_size;
106cbe: 1bad subs r5, r5, r6
node->next = NULL;
106cc0: 4641 mov r1, r8
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
106cc2: f646 3275 movw r2, #27509 ; 0x6b75
106cc6: f107 0018 add.w r0, r7, #24
106cca: f2c0 0210 movt r2, #16
head->next = new_first;
106cce: 60fb str r3, [r7, #12]
new_first->previous = head;
106cd0: f8c3 9004 str.w r9, [r3, #4]
new_chunk->begin = free_chunk->begin + new_free_size;
106cd4: 69a3 ldr r3, [r4, #24]
free_chunk->size = new_free_size;
106cd6: 61e5 str r5, [r4, #28]
new_chunk->size = aligned_size;
106cd8: f8c8 601c str.w r6, [r8, #28]
new_chunk->begin = free_chunk->begin + new_free_size;
106cdc: 441d add r5, r3
node->next = NULL;
106cde: 2300 movs r3, #0
106ce0: f8c8 5018 str.w r5, [r8, #24]
106ce4: f841 3b08 str.w r3, [r1], #8
rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true);
106ce8: 2301 movs r3, #1
106cea: f000 f8a9 bl 106e40 <rtems_rbtree_insert>
ptr = (void *) new_chunk->begin;
106cee: f8d8 0018 ldr.w r0, [r8, #24]
}
106cf2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
(*control->extend_descriptors)(control);
106cf6: 6a3b ldr r3, [r7, #32]
106cf8: 4638 mov r0, r7
106cfa: 4798 blx r3
return _Chain_Immutable_head( the_chain )->next;
106cfc: f8d7 800c ldr.w r8, [r7, #12]
if ( !_Chain_Is_empty(the_chain))
106d00: 45c2 cmp sl, r8
106d02: d1da bne.n 106cba <rtems_rbheap_allocate+0x72>
106d04: e7cc b.n 106ca0 <rtems_rbheap_allocate+0x58>
106d06: bf00 nop
00106e04 <rtems_rbtree_find>:
const rtems_rbtree_control *the_rbtree,
const rtems_rbtree_node *the_node,
rtems_rbtree_compare compare,
bool is_unique
)
{
106e04: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
return RB_ROOT( the_rbtree );
106e08: 6804 ldr r4, [r0, #0]
rtems_rbtree_node *iter_node = rtems_rbtree_root( the_rbtree );
rtems_rbtree_node *found = NULL;
while ( iter_node != NULL ) {
106e0a: b1b4 cbz r4, 106e3a <rtems_rbtree_find+0x36>
106e0c: 460d mov r5, r1
106e0e: 4616 mov r6, r2
106e10: 461f mov r7, r3
rtems_rbtree_node *found = NULL;
106e12: f04f 0800 mov.w r8, #0
rtems_rbtree_compare_result compare_result =
( *compare )( the_node, iter_node );
106e16: 4621 mov r1, r4
106e18: 4628 mov r0, r5
106e1a: 47b0 blx r6
if ( rtems_rbtree_is_equal( compare_result ) ) {
106e1c: 2800 cmp r0, #0
106e1e: d107 bne.n 106e30 <rtems_rbtree_find+0x2c>
106e20: 46a0 mov r8, r4
found = iter_node;
if ( is_unique )
106e22: b917 cbnz r7, 106e2a <rtems_rbtree_find+0x26>
return RB_LEFT( the_node, Node );
106e24: 6824 ldr r4, [r4, #0]
while ( iter_node != NULL ) {
106e26: 2c00 cmp r4, #0
106e28: d1f5 bne.n 106e16 <rtems_rbtree_find+0x12>
iter_node = rtems_rbtree_left( iter_node );
}
}
return found;
}
106e2a: 4640 mov r0, r8
106e2c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
if ( rtems_rbtree_is_greater( compare_result ) ) {
106e30: ddf8 ble.n 106e24 <rtems_rbtree_find+0x20>
return RB_RIGHT( the_node, Node );
106e32: 6864 ldr r4, [r4, #4]
while ( iter_node != NULL ) {
106e34: 2c00 cmp r4, #0
106e36: d1ee bne.n 106e16 <rtems_rbtree_find+0x12>
106e38: e7f7 b.n 106e2a <rtems_rbtree_find+0x26>
rtems_rbtree_node *found = NULL;
106e3a: 46a0 mov r8, r4 <== NOT EXECUTED
106e3c: e7f5 b.n 106e2a <rtems_rbtree_find+0x26> <== NOT EXECUTED
106e3e: bf00 nop