=============================================================================== 4000709c <_IO_Initialize_all_drivers>: #include bool _IO_All_drivers_initialized; void _IO_Initialize_all_drivers( void ) { 4000709c: ff010113 addi sp,sp,-16 400070a0: 00912223 sw s1,4(sp) rtems_device_major_number major; _IO_All_drivers_initialized = true; for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 400070a4: 8681a483 lw s1,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> _IO_All_drivers_initialized = true; 400070a8: 00100713 li a4,1 { 400070ac: 00112623 sw ra,12(sp) 400070b0: 00812423 sw s0,8(sp) _IO_All_drivers_initialized = true; 400070b4: 92e18423 sb a4,-1752(gp) # 40020d68 <_IO_All_drivers_initialized> for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 400070b8: 02048063 beqz s1,400070d8 <_IO_Initialize_all_drivers+0x3c> 400070bc: 00000413 li s0,0 (void) rtems_io_initialize( major, 0, NULL ); 400070c0: 00040513 mv a0,s0 400070c4: 00000613 li a2,0 for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 400070c8: 00140413 addi s0,s0,1 (void) rtems_io_initialize( major, 0, NULL ); 400070cc: 00000593 li a1,0 400070d0: 01c000ef jal ra,400070ec for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 400070d4: fe9416e3 bne s0,s1,400070c0 <_IO_Initialize_all_drivers+0x24> } 400070d8: 00c12083 lw ra,12(sp) 400070dc: 00812403 lw s0,8(sp) 400070e0: 00412483 lw s1,4(sp) 400070e4: 01010113 addi sp,sp,16 400070e8: 00008067 ret =============================================================================== 4000483c : rtems_chain_control *chain, rtems_event_set events, rtems_interval timeout, rtems_chain_node **node_ptr ) { 4000483c: fd010113 addi sp,sp,-48 40004840: 02912223 sw s1,36(sp) 40004844: 03212023 sw s2,32(sp) 40004848: 01312e23 sw s3,28(sp) 4000484c: 01412c23 sw s4,24(sp) 40004850: 02112623 sw ra,44(sp) 40004854: 02812423 sw s0,40(sp) 40004858: 00050993 mv s3,a0 4000485c: 00058913 mv s2,a1 40004860: 00060493 mv s1,a2 40004864: 00068a13 mv s4,a3 rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_chain_node *node = NULL; while ( sc == RTEMS_SUCCESSFUL && (node = rtems_chain_get( chain )) == NULL 40004868: 00098513 mv a0,s3 4000486c: 0a0000ef jal ra,4000490c 40004870: 00050413 mv s0,a0 ) { rtems_event_set out; sc = rtems_event_receive( 40004874: 00c10693 addi a3,sp,12 40004878: 00048613 mv a2,s1 4000487c: 00000593 li a1,0 40004880: 00090513 mv a0,s2 && (node = rtems_chain_get( chain )) == NULL 40004884: 02041863 bnez s0,400048b4 sc = rtems_event_receive( 40004888: aadff0ef jal ra,40004334 while ( 4000488c: fc050ee3 beqz a0,40004868 <== NEVER TAKEN timeout, &out ); } *node_ptr = node; 40004890: 008a2023 sw s0,0(s4) return sc; } 40004894: 02c12083 lw ra,44(sp) 40004898: 02812403 lw s0,40(sp) 4000489c: 02412483 lw s1,36(sp) 400048a0: 02012903 lw s2,32(sp) 400048a4: 01c12983 lw s3,28(sp) 400048a8: 01812a03 lw s4,24(sp) 400048ac: 03010113 addi sp,sp,48 400048b0: 00008067 ret 400048b4: 00000513 li a0,0 400048b8: fd9ff06f j 40004890 =============================================================================== 40004d04 : return information->objects_per_block != 0; 40004d04: 400147b7 lui a5,0x40014 40004d08: 0c878793 addi a5,a5,200 # 400140c8 <_Barrier_Information> 40004d0c: 0127d503 lhu a0,18(a5) #include #include static uint32_t get_config_max( const Objects_Information *info ) { if ( _Objects_Is_auto_extend( info ) ) { 40004d10: 00051663 bnez a0,40004d1c <== NEVER TAKEN */ RTEMS_INLINE_ROUTINE Objects_Maximum _Objects_Get_index( Objects_Id id ) { return 40004d14: 0007d503 lhu a0,0(a5) } uint32_t rtems_configuration_get_maximum_barriers( void ) { return get_config_max( &_Barrier_Information ); } 40004d18: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004d1c: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004d20: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004d24: 00008067 ret <== NOT EXECUTED =============================================================================== 4000c624 : 4000c624: 400277b7 lui a5,0x40027 <== NOT EXECUTED 4000c628: 41078793 addi a5,a5,1040 # 40027410 <_Extension_Information> <== NOT EXECUTED 4000c62c: 0127d503 lhu a0,18(a5) <== NOT EXECUTED if ( _Objects_Is_auto_extend( info ) ) { 4000c630: 00051663 bnez a0,4000c63c <== NOT EXECUTED 4000c634: 0007d503 lhu a0,0(a5) <== NOT EXECUTED uint32_t rtems_configuration_get_maximum_extensions( void ) { return get_config_max( &_Extension_Information ); } 4000c638: 00008067 ret <== NOT EXECUTED return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 4000c63c: 800007b7 lui a5,0x80000 <== NOT EXECUTED 4000c640: 00f56533 or a0,a0,a5 <== NOT EXECUTED 4000c644: 00008067 ret <== NOT EXECUTED =============================================================================== 40004d28 : 40004d28: 400147b7 lui a5,0x40014 40004d2c: 12878793 addi a5,a5,296 # 40014128 <_Message_queue_Information> 40004d30: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004d34: 00051663 bnez a0,40004d40 <== NEVER TAKEN 40004d38: 0007d503 lhu a0,0(a5) } uint32_t rtems_configuration_get_maximum_message_queues( void ) { return get_config_max( &_Message_queue_Information ); } 40004d3c: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004d40: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004d44: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004d48: 00008067 ret <== NOT EXECUTED =============================================================================== 40004d4c : 40004d4c: 400147b7 lui a5,0x40014 40004d50: 15878793 addi a5,a5,344 # 40014158 <_Partition_Information> 40004d54: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004d58: 00051663 bnez a0,40004d64 <== NEVER TAKEN 40004d5c: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_partitions( void ) { return get_config_max( &_Partition_Information ); } 40004d60: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004d64: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004d68: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004d6c: 00008067 ret <== NOT EXECUTED =============================================================================== 40004d70 : 40004d70: 400147b7 lui a5,0x40014 40004d74: 18878793 addi a5,a5,392 # 40014188 <_Rate_monotonic_Information> 40004d78: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004d7c: 00051663 bnez a0,40004d88 <== NEVER TAKEN 40004d80: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_periods( void ) { return get_config_max( &_Rate_monotonic_Information ); } 40004d84: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004d88: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004d8c: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004d90: 00008067 ret <== NOT EXECUTED =============================================================================== 40004d94 : 40004d94: 400147b7 lui a5,0x40014 40004d98: 0f878793 addi a5,a5,248 # 400140f8 <_Dual_ported_memory_Information> 40004d9c: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004da0: 00051663 bnez a0,40004dac <== NEVER TAKEN 40004da4: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_ports( void ) { return get_config_max( &_Dual_ported_memory_Information ); } 40004da8: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004dac: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004db0: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004db4: 00008067 ret <== NOT EXECUTED =============================================================================== 40004db8 : 40004db8: 400147b7 lui a5,0x40014 40004dbc: 1b878793 addi a5,a5,440 # 400141b8 <_Region_Information> 40004dc0: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004dc4: 00051663 bnez a0,40004dd0 <== NEVER TAKEN 40004dc8: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_regions( void ) { return get_config_max( &_Region_Information ); } 40004dcc: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004dd0: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004dd4: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004dd8: 00008067 ret <== NOT EXECUTED =============================================================================== 40004ddc : 40004ddc: 400147b7 lui a5,0x40014 40004de0: 21878793 addi a5,a5,536 # 40014218 <_Semaphore_Information> 40004de4: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004de8: 00051663 bnez a0,40004df4 <== NEVER TAKEN 40004dec: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_semaphores( void ) { return get_config_max( &_Semaphore_Information ); } 40004df0: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004df4: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004df8: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004dfc: 00008067 ret <== NOT EXECUTED =============================================================================== 40004e24 : 40004e24: 400147b7 lui a5,0x40014 40004e28: e2478793 addi a5,a5,-476 # 40013e24 <_RTEMS_tasks_Information> 40004e2c: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004e30: 00051663 bnez a0,40004e3c <== NEVER TAKEN 40004e34: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_tasks( void ) { return get_config_max( &_RTEMS_tasks_Information.Objects ); } 40004e38: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004e3c: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004e40: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004e44: 00008067 ret <== NOT EXECUTED =============================================================================== 40004e00 : 40004e00: 400147b7 lui a5,0x40014 40004e04: 1e878793 addi a5,a5,488 # 400141e8 <_Timer_Information> 40004e08: 0127d503 lhu a0,18(a5) if ( _Objects_Is_auto_extend( info ) ) { 40004e0c: 00051663 bnez a0,40004e18 <== NEVER TAKEN 40004e10: 0007d503 lhu a0,0(a5) uint32_t rtems_configuration_get_maximum_timers( void ) { return get_config_max( &_Timer_Information ); } 40004e14: 00008067 ret return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 40004e18: 800007b7 lui a5,0x80000 <== NOT EXECUTED 40004e1c: 00f56533 or a0,a0,a5 <== NOT EXECUTED 40004e20: 00008067 ret <== NOT EXECUTED =============================================================================== 4000fad8 : RTEMS_SYSINIT_IDLE_THREADS, RTEMS_SYSINIT_ORDER_MIDDLE ); void rtems_initialize_executive(void) { 4000fad8: ff010113 addi sp,sp,-16 4000fadc: 00912223 sw s1,4(sp) const rtems_sysinit_item *item; /* Invoke the registered system initialization handlers */ RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) { 4000fae0: 400204b7 lui s1,0x40020 { 4000fae4: 00812423 sw s0,8(sp) 4000fae8: 00112623 sw ra,12(sp) RTEMS_INLINE_ROUTINE uintptr_t _Linker_set_Obfuscate( const void *ptr ) { uintptr_t addr; addr = (uintptr_t) ptr; 4000faec: 40020437 lui s0,0x40020 RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) { 4000faf0: 5f448493 addi s1,s1,1524 # 400205f4 <_Copyright_Notice> RTEMS_OBFUSCATE_VARIABLE( addr ); 4000faf4: 5b440413 addi s0,s0,1460 # 400205b4 <_Linker_set__Sysinit__Workspace_Initialize> 4000faf8: 00848a63 beq s1,s0,4000fb0c ( *item->handler )(); 4000fafc: 00042783 lw a5,0(s0) RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) { 4000fb00: 00440413 addi s0,s0,4 ( *item->handler )(); 4000fb04: 000780e7 jalr a5 RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) { 4000fb08: fe941ae3 bne s0,s1,4000fafc 4000fb0c: 00200713 li a4,2 4000fb10: 92e1aa23 sw a4,-1740(gp) # 40020d74 <_System_state_Current> _System_state_Set( SYSTEM_STATE_UP ); _SMP_Request_start_multitasking(); _Thread_Start_multitasking(); 4000fb14: 111010ef jal ra,40011424 <_Thread_Start_multitasking> =============================================================================== 400119d4 : void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) 400119d4: 8681a703 lw a4,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> 400119d8: 02e57863 bgeu a0,a4,40011a08 return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].close_entry; 400119dc: 00151713 slli a4,a0,0x1 400119e0: 00a70733 add a4,a4,a0 400119e4: 400207b7 lui a5,0x40020 400119e8: 00371713 slli a4,a4,0x3 400119ec: 63078793 addi a5,a5,1584 # 40020630 <_IO_Driver_address_table> 400119f0: 00e787b3 add a5,a5,a4 400119f4: 0087a783 lw a5,8(a5) return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 400119f8: 00078463 beqz a5,40011a00 400119fc: 00078067 jr a5 40011a00: 00000513 li a0,0 } 40011a04: 00008067 ret return RTEMS_INVALID_NUMBER; 40011a08: 00a00513 li a0,10 40011a0c: 00008067 ret =============================================================================== 40011a10 : void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) 40011a10: 8681a703 lw a4,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> 40011a14: 02e57863 bgeu a0,a4,40011a44 return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].control_entry; 40011a18: 00151713 slli a4,a0,0x1 40011a1c: 00a70733 add a4,a4,a0 40011a20: 400207b7 lui a5,0x40020 40011a24: 00371713 slli a4,a4,0x3 40011a28: 63078793 addi a5,a5,1584 # 40020630 <_IO_Driver_address_table> 40011a2c: 00e787b3 add a5,a5,a4 40011a30: 0147a783 lw a5,20(a5) return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 40011a34: 00078463 beqz a5,40011a3c 40011a38: 00078067 jr a5 40011a3c: 00000513 li a0,0 } 40011a40: 00008067 ret return RTEMS_INVALID_NUMBER; 40011a44: 00a00513 li a0,10 40011a48: 00008067 ret =============================================================================== 400070ec : void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) 400070ec: 8681a703 lw a4,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> 400070f0: 02e57863 bgeu a0,a4,40007120 return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].initialization_entry; 400070f4: 00151713 slli a4,a0,0x1 400070f8: 00a70733 add a4,a4,a0 400070fc: 400207b7 lui a5,0x40020 40007100: 00371713 slli a4,a4,0x3 40007104: 63078793 addi a5,a5,1584 # 40020630 <_IO_Driver_address_table> 40007108: 00e787b3 add a5,a5,a4 4000710c: 0007a783 lw a5,0(a5) return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 40007110: 00078463 beqz a5,40007118 40007114: 00078067 jr a5 40007118: 00000513 li a0,0 } 4000711c: 00008067 ret return RTEMS_INVALID_NUMBER; 40007120: 00a00513 li a0,10 40007124: 00008067 ret =============================================================================== 40011a4c : void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) 40011a4c: 8681a703 lw a4,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> 40011a50: 02e57863 bgeu a0,a4,40011a80 return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].open_entry; 40011a54: 00151713 slli a4,a0,0x1 40011a58: 00a70733 add a4,a4,a0 40011a5c: 400207b7 lui a5,0x40020 40011a60: 00371713 slli a4,a4,0x3 40011a64: 63078793 addi a5,a5,1584 # 40020630 <_IO_Driver_address_table> 40011a68: 00e787b3 add a5,a5,a4 40011a6c: 0047a783 lw a5,4(a5) return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 40011a70: 00078463 beqz a5,40011a78 40011a74: 00078067 jr a5 40011a78: 00000513 li a0,0 } 40011a7c: 00008067 ret return RTEMS_INVALID_NUMBER; 40011a80: 00a00513 li a0,10 40011a84: 00008067 ret =============================================================================== 40011a88 : void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) 40011a88: 8681a703 lw a4,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> 40011a8c: 02e57863 bgeu a0,a4,40011abc return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].read_entry; 40011a90: 00151713 slli a4,a0,0x1 40011a94: 00a70733 add a4,a4,a0 40011a98: 400207b7 lui a5,0x40020 40011a9c: 00371713 slli a4,a4,0x3 40011aa0: 63078793 addi a5,a5,1584 # 40020630 <_IO_Driver_address_table> 40011aa4: 00e787b3 add a5,a5,a4 40011aa8: 00c7a783 lw a5,12(a5) return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 40011aac: 00078463 beqz a5,40011ab4 40011ab0: 00078067 jr a5 40011ab4: 00000513 li a0,0 } 40011ab8: 00008067 ret return RTEMS_INVALID_NUMBER; 40011abc: 00a00513 li a0,10 40011ac0: 00008067 ret =============================================================================== 40005de0 : 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 ) { 40005de0: fe010113 addi sp,sp,-32 40005de4: 01412423 sw s4,8(sp) rtems_device_major_number major_limit = _IO_Number_of_drivers; 40005de8: 40015a37 lui s4,0x40015 { 40005dec: 00812c23 sw s0,24(sp) 40005df0: 00912a23 sw s1,20(sp) 40005df4: 01212823 sw s2,16(sp) 40005df8: 01312623 sw s3,12(sp) 40005dfc: 00112e23 sw ra,28(sp) rtems_device_major_number major_limit = _IO_Number_of_drivers; 40005e00: 690a2983 lw s3,1680(s4) # 40015690 <_IO_Number_of_drivers> { 40005e04: 00050413 mv s0,a0 40005e08: 00058493 mv s1,a1 40005e0c: 00060913 mv s2,a2 ISR_lock_Context lock_context; if ( rtems_interrupt_is_in_progress() ) 40005e10: 2cd000ef jal ra,400068dc <_ISR_Is_in_progress> 40005e14: 04051863 bnez a0,40005e64 return RTEMS_CALLED_FROM_ISR; if ( registered_major == NULL ) 40005e18: 06090c63 beqz s2,40005e90 return RTEMS_INVALID_ADDRESS; /* Set it to an invalid value */ *registered_major = major_limit; 40005e1c: 01392023 sw s3,0(s2) if ( driver_table == NULL ) 40005e20: 06048863 beqz s1,40005e90 return table->initialization_entry == NULL && table->open_entry == NULL; 40005e24: 0004a783 lw a5,0(s1) 40005e28: 06078063 beqz a5,40005e88 return RTEMS_INVALID_ADDRESS; if ( rtems_io_is_empty_table( driver_table ) ) return RTEMS_INVALID_ADDRESS; if ( major >= major_limit ) 40005e2c: 15347463 bgeu s0,s3,40005f74 __asm__ volatile ( 40005e30: 300475f3 csrrci a1,mstatus,8 return mstatus & RISCV_MSTATUS_MIE; 40005e34: 0085f593 andi a1,a1,8 return RTEMS_INVALID_NUMBER; _IO_Driver_registration_acquire( &lock_context ); if ( major == 0 ) { 40005e38: 10040063 beqz s0,40005f38 _IO_Driver_registration_release( &lock_context ); return sc; } major = *registered_major; } else { rtems_driver_address_table *const table = _IO_Driver_address_table + major; 40005e3c: 00141693 slli a3,s0,0x1 40005e40: 00868633 add a2,a3,s0 40005e44: 00361613 slli a2,a2,0x3 40005e48: 5cc18713 addi a4,gp,1484 # 4001645c <_IO_Driver_address_table> 40005e4c: 00c707b3 add a5,a4,a2 return table->initialization_entry == NULL && table->open_entry == NULL; 40005e50: 0007a603 lw a2,0(a5) 40005e54: 06060063 beqz a2,40005eb4 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40005e58: 3005a073 csrs mstatus,a1 if ( !rtems_io_is_empty_table( table ) ) { _IO_Driver_registration_release( &lock_context ); return RTEMS_RESOURCE_IN_USE; 40005e5c: 00c00513 li a0,12 40005e60: 0080006f j 40005e68 return RTEMS_CALLED_FROM_ISR; 40005e64: 01200513 li a0,18 /* The driver will be initialized together with all other drivers * in a later stage by _IO_Initialize_all_drivers(). */ return RTEMS_SUCCESSFUL; } } 40005e68: 01c12083 lw ra,28(sp) 40005e6c: 01812403 lw s0,24(sp) 40005e70: 01412483 lw s1,20(sp) 40005e74: 01012903 lw s2,16(sp) 40005e78: 00c12983 lw s3,12(sp) 40005e7c: 00812a03 lw s4,8(sp) 40005e80: 02010113 addi sp,sp,32 40005e84: 00008067 ret return table->initialization_entry == NULL && table->open_entry == NULL; 40005e88: 0044a783 lw a5,4(s1) 40005e8c: fa0790e3 bnez a5,40005e2c } 40005e90: 01c12083 lw ra,28(sp) 40005e94: 01812403 lw s0,24(sp) 40005e98: 01412483 lw s1,20(sp) 40005e9c: 01012903 lw s2,16(sp) 40005ea0: 00c12983 lw s3,12(sp) 40005ea4: 00812a03 lw s4,8(sp) return RTEMS_INVALID_ADDRESS; 40005ea8: 00900513 li a0,9 } 40005eac: 02010113 addi sp,sp,32 40005eb0: 00008067 ret return table->initialization_entry == NULL && table->open_entry == NULL; 40005eb4: 0047a783 lw a5,4(a5) 40005eb8: fa0790e3 bnez a5,40005e58 *registered_major = major; 40005ebc: 00892023 sw s0,0(s2) _IO_Driver_address_table [major] = *driver_table; 40005ec0: 0004ae03 lw t3,0(s1) 40005ec4: 0044a303 lw t1,4(s1) 40005ec8: 0084a883 lw a7,8(s1) 40005ecc: 00c4a803 lw a6,12(s1) 40005ed0: 0104a503 lw a0,16(s1) 40005ed4: 0144a603 lw a2,20(s1) 40005ed8: 008687b3 add a5,a3,s0 40005edc: 00379793 slli a5,a5,0x3 40005ee0: 00f707b3 add a5,a4,a5 40005ee4: 01c7a023 sw t3,0(a5) 40005ee8: 0067a223 sw t1,4(a5) 40005eec: 0117a423 sw a7,8(a5) 40005ef0: 0107a623 sw a6,12(a5) 40005ef4: 00a7a823 sw a0,16(a5) 40005ef8: 00c7aa23 sw a2,20(a5) 40005efc: 3005a073 csrs mstatus,a1 if ( _IO_All_drivers_initialized ) { 40005f00: 8bc1c783 lbu a5,-1860(gp) # 4001574c <_IO_All_drivers_initialized> return RTEMS_SUCCESSFUL; 40005f04: 00000513 li a0,0 if ( _IO_All_drivers_initialized ) { 40005f08: f60780e3 beqz a5,40005e68 return rtems_io_initialize( major, 0, NULL ); 40005f0c: 00040513 mv a0,s0 } 40005f10: 01812403 lw s0,24(sp) 40005f14: 01c12083 lw ra,28(sp) 40005f18: 01412483 lw s1,20(sp) 40005f1c: 01012903 lw s2,16(sp) 40005f20: 00c12983 lw s3,12(sp) 40005f24: 00812a03 lw s4,8(sp) return rtems_io_initialize( major, 0, NULL ); 40005f28: 00000613 li a2,0 40005f2c: 00000593 li a1,0 } 40005f30: 02010113 addi sp,sp,32 return rtems_io_initialize( major, 0, NULL ); 40005f34: e71ff06f j 40005da4 rtems_device_major_number n = _IO_Number_of_drivers; 40005f38: 690a2603 lw a2,1680(s4) for ( m = 0; m < n; ++m ) { 40005f3c: 06060663 beqz a2,40005fa8 40005f40: 5cc18713 addi a4,gp,1484 # 4001645c <_IO_Driver_address_table> 40005f44: 5cc18793 addi a5,gp,1484 # 4001645c <_IO_Driver_address_table> 40005f48: 0100006f j 40005f58 40005f4c: 00140413 addi s0,s0,1 40005f50: 01878793 addi a5,a5,24 40005f54: 04860263 beq a2,s0,40005f98 return table->initialization_entry == NULL && table->open_entry == NULL; 40005f58: 0007a683 lw a3,0(a5) 40005f5c: fe0698e3 bnez a3,40005f4c 40005f60: 0047a683 lw a3,4(a5) 40005f64: fe0694e3 bnez a3,40005f4c *major = m; 40005f68: 00892023 sw s0,0(s2) if ( m != n ) 40005f6c: 00141693 slli a3,s0,0x1 40005f70: f51ff06f j 40005ec0 } 40005f74: 01c12083 lw ra,28(sp) 40005f78: 01812403 lw s0,24(sp) 40005f7c: 01412483 lw s1,20(sp) 40005f80: 01012903 lw s2,16(sp) 40005f84: 00c12983 lw s3,12(sp) 40005f88: 00812a03 lw s4,8(sp) return RTEMS_INVALID_NUMBER; 40005f8c: 00a00513 li a0,10 } 40005f90: 02010113 addi sp,sp,32 40005f94: 00008067 ret *major = m; 40005f98: 00c92023 sw a2,0(s2) 40005f9c: 3005a073 csrs mstatus,a1 return RTEMS_TOO_MANY; 40005fa0: 00500513 li a0,5 return sc; 40005fa4: ec5ff06f j 40005e68 *major = m; 40005fa8: 00092023 sw zero,0(s2) if ( m != n ) 40005fac: ff1ff06f j 40005f9c =============================================================================== 40005fb0 : #include rtems_status_code rtems_io_unregister_driver( rtems_device_major_number major ) { 40005fb0: ff010113 addi sp,sp,-16 40005fb4: 00812423 sw s0,8(sp) 40005fb8: 00112623 sw ra,12(sp) 40005fbc: 00050413 mv s0,a0 if ( rtems_interrupt_is_in_progress() ) 40005fc0: 11d000ef jal ra,400068dc <_ISR_Is_in_progress> 40005fc4: 06051863 bnez a0,40006034 return RTEMS_CALLED_FROM_ISR; if ( major < _IO_Number_of_drivers ) { 40005fc8: 400157b7 lui a5,0x40015 40005fcc: 6907a783 lw a5,1680(a5) # 40015690 <_IO_Number_of_drivers> _IO_Driver_registration_release( &lock_context ); return RTEMS_SUCCESSFUL; } return RTEMS_UNSATISFIED; 40005fd0: 00d00513 li a0,13 if ( major < _IO_Number_of_drivers ) { 40005fd4: 00f46a63 bltu s0,a5,40005fe8 } 40005fd8: 00c12083 lw ra,12(sp) 40005fdc: 00812403 lw s0,8(sp) 40005fe0: 01010113 addi sp,sp,16 40005fe4: 00008067 ret __asm__ volatile ( 40005fe8: 300477f3 csrrci a5,mstatus,8 &_IO_Driver_address_table[major], 40005fec: 00141513 slli a0,s0,0x1 40005ff0: 00850433 add s0,a0,s0 40005ff4: 5cc18713 addi a4,gp,1484 # 4001645c <_IO_Driver_address_table> 40005ff8: 00341413 slli s0,s0,0x3 40005ffc: 00e40433 add s0,s0,a4 memset( 40006000: 00042023 sw zero,0(s0) 40006004: 00042223 sw zero,4(s0) 40006008: 00042423 sw zero,8(s0) 4000600c: 00042623 sw zero,12(s0) 40006010: 00042823 sw zero,16(s0) 40006014: 00042a23 sw zero,20(s0) return mstatus & RISCV_MSTATUS_MIE; 40006018: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4000601c: 3007a073 csrs mstatus,a5 } 40006020: 00c12083 lw ra,12(sp) 40006024: 00812403 lw s0,8(sp) return RTEMS_SUCCESSFUL; 40006028: 00000513 li a0,0 } 4000602c: 01010113 addi sp,sp,16 40006030: 00008067 ret 40006034: 00c12083 lw ra,12(sp) 40006038: 00812403 lw s0,8(sp) return RTEMS_CALLED_FROM_ISR; 4000603c: 01200513 li a0,18 } 40006040: 01010113 addi sp,sp,16 40006044: 00008067 ret =============================================================================== 40011ac4 : void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) 40011ac4: 8681a703 lw a4,-1944(gp) # 40020ca8 <_IO_Number_of_drivers> 40011ac8: 02e57863 bgeu a0,a4,40011af8 return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].write_entry; 40011acc: 00151713 slli a4,a0,0x1 40011ad0: 00a70733 add a4,a4,a0 40011ad4: 400207b7 lui a5,0x40020 40011ad8: 00371713 slli a4,a4,0x3 40011adc: 63078793 addi a5,a5,1584 # 40020630 <_IO_Driver_address_table> 40011ae0: 00e787b3 add a5,a5,a4 40011ae4: 0107a783 lw a5,16(a5) return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 40011ae8: 00078463 beqz a5,40011af0 40011aec: 00078067 jr a5 40011af0: 00000513 li a0,0 } 40011af4: 00008067 ret return RTEMS_INVALID_NUMBER; 40011af8: 00a00513 li a0,10 40011afc: 00008067 ret =============================================================================== 40003f0c : void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size) { 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; 40003f0c: 01c52783 lw a5,28(a0) uintptr_t excess = value % alignment; 40003f10: 02f5f733 remu a4,a1,a5 if (excess > 0) { 40003f14: 00070e63 beqz a4,40003f30 uintptr_t aligned_size = align_up(alignment, size); if (size > 0 && size <= aligned_size) { 40003f18: 00058863 beqz a1,40003f28 <== NEVER TAKEN value += alignment - excess; 40003f1c: 00b787b3 add a5,a5,a1 40003f20: 40e787b3 sub a5,a5,a4 if (size > 0 && size <= aligned_size) { 40003f24: 0cb7fa63 bgeu a5,a1,40003ff8 void *ptr = NULL; 40003f28: 00000513 li a0,0 } } } return ptr; } 40003f2c: 00008067 ret if (size > 0 && size <= aligned_size) { 40003f30: fe058ce3 beqz a1,40003f28 { 40003f34: fd010113 addi sp,sp,-48 40003f38: 02812423 sw s0,40(sp) return _Chain_Immutable_head( the_chain )->next; 40003f3c: 00052403 lw s0,0(a0) 40003f40: 02112623 sw ra,44(sp) 40003f44: 02912223 sw s1,36(sp) 40003f48: 03212023 sw s2,32(sp) 40003f4c: 01312e23 sw s3,28(sp) 40003f50: 01412c23 sw s4,24(sp) return &the_chain->Tail.Node; 40003f54: 00450713 addi a4,a0,4 while (current != tail && big_enough == NULL) { 40003f58: 06e40e63 beq s0,a4,40003fd4 if (free_chunk->size >= size) { 40003f5c: 01c42483 lw s1,28(s0) return the_node->next; 40003f60: 00042783 lw a5,0(s0) 40003f64: 00b4fc63 bgeu s1,a1,40003f7c while (current != tail && big_enough == NULL) { 40003f68: 06f70663 beq a4,a5,40003fd4 40003f6c: 00078413 mv s0,a5 <== NOT EXECUTED if (free_chunk->size >= size) { 40003f70: 01c42483 lw s1,28(s0) <== NOT EXECUTED 40003f74: 00042783 lw a5,0(s0) <== NOT EXECUTED 40003f78: feb4e8e3 bltu s1,a1,40003f68 <== NOT EXECUTED if (free_size > aligned_size) { 40003f7c: 0895e263 bltu a1,s1,40004000 previous = the_node->previous; 40003f80: 00442703 lw a4,4(s0) ptr = (void *) free_chunk->begin; 40003f84: 01842503 lw a0,24(s0) } 40003f88: 02c12083 lw ra,44(sp) next->previous = previous; 40003f8c: 00e7a223 sw a4,4(a5) previous->next = next; 40003f90: 00f72023 sw a5,0(a4) node->next = NULL; 40003f94: 00042023 sw zero,0(s0) 40003f98: 02812403 lw s0,40(sp) 40003f9c: 02412483 lw s1,36(sp) 40003fa0: 02012903 lw s2,32(sp) 40003fa4: 01c12983 lw s3,28(sp) 40003fa8: 01812a03 lw s4,24(sp) 40003fac: 03010113 addi sp,sp,48 40003fb0: 00008067 ret (*control->extend_descriptors)(control); 40003fb4: 02052783 lw a5,32(a0) 40003fb8: 00b12623 sw a1,12(sp) 40003fbc: 00a12423 sw a0,8(sp) 40003fc0: 000780e7 jalr a5 return _Chain_Immutable_head( the_chain )->next; 40003fc4: 00812503 lw a0,8(sp) if ( !_Chain_Is_empty(the_chain)) 40003fc8: 00c12583 lw a1,12(sp) return _Chain_Immutable_head( the_chain )->next; 40003fcc: 00c52903 lw s2,12(a0) if ( !_Chain_Is_empty(the_chain)) 40003fd0: 05299063 bne s3,s2,40004010 } 40003fd4: 02c12083 lw ra,44(sp) 40003fd8: 02812403 lw s0,40(sp) 40003fdc: 02412483 lw s1,36(sp) 40003fe0: 02012903 lw s2,32(sp) 40003fe4: 01c12983 lw s3,28(sp) 40003fe8: 01812a03 lw s4,24(sp) void *ptr = NULL; 40003fec: 00000513 li a0,0 } 40003ff0: 03010113 addi sp,sp,48 40003ff4: 00008067 ret 40003ff8: 00078593 mv a1,a5 40003ffc: f39ff06f j 40003f34 return _Chain_Immutable_head( the_chain )->next; 40004000: 00c52903 lw s2,12(a0) return &the_chain->Tail.Node; 40004004: 01050993 addi s3,a0,16 40004008: 00c50a13 addi s4,a0,12 if ( !_Chain_Is_empty(the_chain)) 4000400c: fb3904e3 beq s2,s3,40003fb4 new_first = old_first->next; 40004010: 00092783 lw a5,0(s2) uintptr_t new_free_size = free_size - aligned_size; 40004014: 40b484b3 sub s1,s1,a1 rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 40004018: 40004637 lui a2,0x40004 head->next = new_first; 4000401c: 00f52623 sw a5,12(a0) new_first->previous = head; 40004020: 0147a223 sw s4,4(a5) new_chunk->begin = free_chunk->begin + new_free_size; 40004024: 01842783 lw a5,24(s0) free_chunk->size = new_free_size; 40004028: 00942e23 sw s1,28(s0) new_chunk->size = aligned_size; 4000402c: 00b92e23 sw a1,28(s2) new_chunk->begin = free_chunk->begin + new_free_size; 40004030: 009784b3 add s1,a5,s1 40004034: 00992c23 sw s1,24(s2) node->next = NULL; 40004038: 00092023 sw zero,0(s2) rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 4000403c: 00890593 addi a1,s2,8 40004040: 00100693 li a3,1 40004044: d9860613 addi a2,a2,-616 # 40003d98 40004048: 01850513 addi a0,a0,24 4000404c: 2b0000ef jal ra,400042fc } 40004050: 02c12083 lw ra,44(sp) 40004054: 02812403 lw s0,40(sp) ptr = (void *) new_chunk->begin; 40004058: 01892503 lw a0,24(s2) } 4000405c: 02412483 lw s1,36(sp) 40004060: 02012903 lw s2,32(sp) 40004064: 01c12983 lw s3,28(sp) 40004068: 01812a03 lw s4,24(sp) 4000406c: 03010113 addi sp,sp,48 40004070: 00008067 ret =============================================================================== 40003db0 : uintptr_t area_size, uintptr_t alignment, rtems_rbheap_extend_descriptors extend_descriptors, void *handler_arg ) { 40003db0: fe010113 addi sp,sp,-32 40003db4: 00812c23 sw s0,24(sp) 40003db8: 01212823 sw s2,16(sp) 40003dbc: 00112e23 sw ra,28(sp) 40003dc0: 00912a23 sw s1,20(sp) 40003dc4: 01312623 sw s3,12(sp) 40003dc8: 01412423 sw s4,8(sp) /* * Ensure that the alignment is at least two, so that we can keep * chunk_compare() that simple. */ alignment = alignment < 2 ? 2 : alignment; 40003dcc: 00200813 li a6,2 { 40003dd0: 00050413 mv s0,a0 uintptr_t begin = (uintptr_t) area_begin; 40003dd4: 00058913 mv s2,a1 uintptr_t end = begin + area_size; 40003dd8: 00c58633 add a2,a1,a2 alignment = alignment < 2 ? 2 : alignment; 40003ddc: 0106f463 bgeu a3,a6,40003de4 40003de0: 00200693 li a3,2 <== NOT EXECUTED uintptr_t excess = value % alignment; 40003de4: 02d5f833 remu a6,a1,a3 if (excess > 0) { 40003de8: 02080c63 beqz a6,40003e20 insert_into_tree(chunk_tree, first); } else { sc = RTEMS_NO_MEMORY; } } else { sc = RTEMS_INVALID_ADDRESS; 40003dec: 00900513 li a0,9 if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) { 40003df0: 00c5f863 bgeu a1,a2,40003e00 value += alignment - excess; 40003df4: 00d58933 add s2,a1,a3 40003df8: 41090933 sub s2,s2,a6 if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) { 40003dfc: 02b97463 bgeu s2,a1,40003e24 } return sc; } 40003e00: 01c12083 lw ra,28(sp) 40003e04: 01812403 lw s0,24(sp) 40003e08: 01412483 lw s1,20(sp) 40003e0c: 01012903 lw s2,16(sp) 40003e10: 00c12983 lw s3,12(sp) 40003e14: 00812a03 lw s4,8(sp) 40003e18: 02010113 addi sp,sp,32 40003e1c: 00008067 ret if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) { 40003e20: 0cc5f063 bgeu a1,a2,40003ee0 uintptr_t excess = value % alignment; 40003e24: 02d674b3 remu s1,a2,a3 sc = RTEMS_INVALID_ADDRESS; 40003e28: 00900513 li a0,9 return value - excess; 40003e2c: 409604b3 sub s1,a2,s1 if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) { 40003e30: fc9978e3 bgeu s2,s1,40003e00 return &the_chain->Tail.Node; 40003e34: 00440613 addi a2,s0,4 return &the_chain->Head.Node; 40003e38: 00c40a13 addi s4,s0,12 return &the_chain->Tail.Node; 40003e3c: 01040993 addi s3,s0,16 (*control->extend_descriptors)(control); 40003e40: 00040513 mv a0,s0 head->next = tail; 40003e44: 00c42023 sw a2,0(s0) head->previous = NULL; 40003e48: 00042223 sw zero,4(s0) tail->previous = head; 40003e4c: 00842423 sw s0,8(s0) head->next = tail; 40003e50: 01342623 sw s3,12(s0) head->previous = NULL; 40003e54: 00042823 sw zero,16(s0) tail->previous = head; 40003e58: 01442a23 sw s4,20(s0) */ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty( RBTree_Control *the_rbtree ) { RB_INIT( the_rbtree ); 40003e5c: 00042c23 sw zero,24(s0) control->alignment = alignment; 40003e60: 00d42e23 sw a3,28(s0) control->handler_arg = handler_arg; 40003e64: 02f42223 sw a5,36(s0) control->extend_descriptors = extend_descriptors; 40003e68: 02e42023 sw a4,32(s0) (*control->extend_descriptors)(control); 40003e6c: 000700e7 jalr a4 return _Chain_Immutable_head( the_chain )->next; 40003e70: 00c42583 lw a1,12(s0) rtems_rbtree_control *chunk_tree = &control->chunk_tree; 40003e74: 01840513 addi a0,s0,24 if ( !_Chain_Is_empty(the_chain)) 40003e78: 08b98663 beq s3,a1,40003f04 new_first = old_first->next; 40003e7c: 0005a703 lw a4,0(a1) before_node = after_node->next; 40003e80: 00042783 lw a5,0(s0) first->size = aligned_end - aligned_begin; 40003e84: 41248633 sub a2,s1,s2 head->next = new_first; 40003e88: 00e42623 sw a4,12(s0) new_first->previous = head; 40003e8c: 01472223 sw s4,4(a4) first->begin = aligned_begin; 40003e90: 0125ac23 sw s2,24(a1) first->size = aligned_end - aligned_begin; 40003e94: 00c5ae23 sw a2,28(a1) the_node->previous = after_node; 40003e98: 0085a223 sw s0,4(a1) after_node->next = the_node; 40003e9c: 00b42023 sw a1,0(s0) the_node->next = before_node; 40003ea0: 00f5a023 sw a5,0(a1) rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 40003ea4: 40004637 lui a2,0x40004 before_node->previous = the_node; 40003ea8: 00b7a223 sw a1,4(a5) 40003eac: 00100693 li a3,1 40003eb0: d9860613 addi a2,a2,-616 # 40003d98 40003eb4: 00858593 addi a1,a1,8 40003eb8: 444000ef jal ra,400042fc } 40003ebc: 01c12083 lw ra,28(sp) 40003ec0: 01812403 lw s0,24(sp) 40003ec4: 01412483 lw s1,20(sp) 40003ec8: 01012903 lw s2,16(sp) 40003ecc: 00c12983 lw s3,12(sp) 40003ed0: 00812a03 lw s4,8(sp) rtems_status_code sc = RTEMS_SUCCESSFUL; 40003ed4: 00000513 li a0,0 } 40003ed8: 02010113 addi sp,sp,32 40003edc: 00008067 ret 40003ee0: 01c12083 lw ra,28(sp) 40003ee4: 01812403 lw s0,24(sp) 40003ee8: 01412483 lw s1,20(sp) 40003eec: 01012903 lw s2,16(sp) 40003ef0: 00c12983 lw s3,12(sp) 40003ef4: 00812a03 lw s4,8(sp) sc = RTEMS_INVALID_ADDRESS; 40003ef8: 00900513 li a0,9 } 40003efc: 02010113 addi sp,sp,32 40003f00: 00008067 ret sc = RTEMS_NO_MEMORY; 40003f04: 01a00513 li a0,26 return sc; 40003f08: ef9ff06f j 40003e00 =============================================================================== 4000426c : const rtems_rbtree_control *the_rbtree, const rtems_rbtree_node *the_node, rtems_rbtree_compare compare, bool is_unique ) { 4000426c: fe010113 addi sp,sp,-32 40004270: 00812c23 sw s0,24(sp) return RB_ROOT( the_rbtree ); 40004274: 00052403 lw s0,0(a0) 40004278: 00112e23 sw ra,28(sp) 4000427c: 00912a23 sw s1,20(sp) 40004280: 01212823 sw s2,16(sp) 40004284: 01312623 sw s3,12(sp) 40004288: 01412423 sw s4,8(sp) rtems_rbtree_node *iter_node = rtems_rbtree_root( the_rbtree ); rtems_rbtree_node *found = NULL; while ( iter_node != NULL ) { 4000428c: 06040463 beqz s0,400042f4 <== NEVER TAKEN 40004290: 00058493 mv s1,a1 40004294: 00060913 mv s2,a2 40004298: 00068993 mv s3,a3 rtems_rbtree_node *found = NULL; 4000429c: 00000a13 li s4,0 rtems_rbtree_compare_result compare_result = ( *compare )( the_node, iter_node ); 400042a0: 00040593 mv a1,s0 400042a4: 00048513 mv a0,s1 400042a8: 000900e7 jalr s2 if ( rtems_rbtree_is_equal( compare_result ) ) { 400042ac: 02051c63 bnez a0,400042e4 400042b0: 00040a13 mv s4,s0 found = iter_node; if ( is_unique ) 400042b4: 00099663 bnez s3,400042c0 return RB_LEFT( the_node, Node ); 400042b8: 00042403 lw s0,0(s0) while ( iter_node != NULL ) { 400042bc: fe0412e3 bnez s0,400042a0 iter_node = rtems_rbtree_left( iter_node ); } } return found; } 400042c0: 01c12083 lw ra,28(sp) 400042c4: 01812403 lw s0,24(sp) 400042c8: 01412483 lw s1,20(sp) 400042cc: 01012903 lw s2,16(sp) 400042d0: 00c12983 lw s3,12(sp) 400042d4: 000a0513 mv a0,s4 400042d8: 00812a03 lw s4,8(sp) 400042dc: 02010113 addi sp,sp,32 400042e0: 00008067 ret if ( rtems_rbtree_is_greater( compare_result ) ) { 400042e4: fca05ae3 blez a0,400042b8 return RB_RIGHT( the_node, Node ); 400042e8: 00442403 lw s0,4(s0) while ( iter_node != NULL ) { 400042ec: fa041ae3 bnez s0,400042a0 400042f0: fd1ff06f j 400042c0 rtems_rbtree_node *found = NULL; 400042f4: 00000a13 li s4,0 <== NOT EXECUTED 400042f8: fc9ff06f j 400042c0 <== NOT EXECUTED =============================================================================== 40004f08 : 40004f08: 00052023 sw zero,0(a0) rtems_rbtree_initialize_empty( the_rbtree ); count = number_nodes; next = starting_address; while ( count-- ) { 40004f0c: 08068663 beqz a3,40004f98 <== NEVER TAKEN { 40004f10: fe010113 addi sp,sp,-32 40004f14: 00812c23 sw s0,24(sp) 40004f18: 00912a23 sw s1,20(sp) 40004f1c: 01212823 sw s2,16(sp) 40004f20: 01312623 sw s3,12(sp) 40004f24: 01412423 sw s4,8(sp) 40004f28: 01512223 sw s5,4(sp) 40004f2c: 01612023 sw s6,0(sp) 40004f30: 00112e23 sw ra,28(sp) 40004f34: 00050913 mv s2,a0 40004f38: 00058993 mv s3,a1 40004f3c: 00060413 mv s0,a2 40004f40: 00070a13 mv s4,a4 40004f44: 00078a93 mv s5,a5 40004f48: fff68493 addi s1,a3,-1 # 3fff while ( count-- ) { 40004f4c: fff00b13 li s6,-1 rtems_rbtree_insert( the_rbtree, next, compare, is_unique ); 40004f50: 00040593 mv a1,s0 40004f54: 000a8693 mv a3,s5 40004f58: 00098613 mv a2,s3 40004f5c: 00090513 mv a0,s2 while ( count-- ) { 40004f60: fff48493 addi s1,s1,-1 rtems_rbtree_insert( the_rbtree, next, compare, is_unique ); 40004f64: 0c8000ef jal ra,4000502c RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset ( const void *base, uintptr_t offset ) { return (void *)((uintptr_t)base + offset); 40004f68: 01440433 add s0,s0,s4 while ( count-- ) { 40004f6c: ff6492e3 bne s1,s6,40004f50 next = (rtems_rbtree_node *) _Addresses_Add_offset( next, node_size ); } } 40004f70: 01c12083 lw ra,28(sp) 40004f74: 01812403 lw s0,24(sp) 40004f78: 01412483 lw s1,20(sp) 40004f7c: 01012903 lw s2,16(sp) 40004f80: 00c12983 lw s3,12(sp) 40004f84: 00812a03 lw s4,8(sp) 40004f88: 00412a83 lw s5,4(sp) 40004f8c: 00012b03 lw s6,0(sp) 40004f90: 02010113 addi sp,sp,32 40004f94: 00008067 ret 40004f98: 00008067 ret <== NOT EXECUTED