=============================================================================== 001080e0 <_IO_Initialize_all_drivers>: #include bool _IO_All_drivers_initialized; void _IO_Initialize_all_drivers( void ) { 1080e0: 55 push %ebp rtems_device_major_number major; _IO_All_drivers_initialized = true; 1080e1: b1 01 mov $0x1,%cl { 1080e3: 89 e5 mov %esp,%ebp 1080e5: 56 push %esi 1080e6: 53 push %ebx 1080e7: 83 ec 10 sub $0x10,%esp _IO_All_drivers_initialized = true; 1080ea: 88 0d 18 48 13 00 mov %cl,0x134818 for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 1080f0: 8b 35 70 a9 12 00 mov 0x12a970,%esi 1080f6: 85 f6 test %esi,%esi 1080f8: 74 1f je 108119 <_IO_Initialize_all_drivers+0x39> <== NEVER TAKEN 1080fa: 31 db xor %ebx,%ebx 1080fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi (void) rtems_io_initialize( major, 0, NULL ); 108100: 89 1c 24 mov %ebx,(%esp) 108103: 31 c0 xor %eax,%eax 108105: 31 d2 xor %edx,%edx 108107: 89 44 24 08 mov %eax,0x8(%esp) for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 10810b: 43 inc %ebx (void) rtems_io_initialize( major, 0, NULL ); 10810c: 89 54 24 04 mov %edx,0x4(%esp) 108110: e8 0b 00 00 00 call 108120 for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 108115: 39 f3 cmp %esi,%ebx 108117: 75 e7 jne 108100 <_IO_Initialize_all_drivers+0x20> } 108119: 83 c4 10 add $0x10,%esp 10811c: 5b pop %ebx 10811d: 5e pop %esi 10811e: 5d pop %ebp 10811f: c3 ret =============================================================================== 00105340 : rtems_chain_control *chain, rtems_event_set events, rtems_interval timeout, rtems_chain_node **node_ptr ) { 105340: 55 push %ebp 105341: 89 e5 mov %esp,%ebp 105343: 57 push %edi 105344: 56 push %esi 105345: 53 push %ebx while ( sc == RTEMS_SUCCESSFUL && (node = rtems_chain_get( chain )) == NULL ) { rtems_event_set out; sc = rtems_event_receive( 105346: 8d 75 e4 lea -0x1c(%ebp),%esi { 105349: 83 ec 2c sub $0x2c,%esp 10534c: 8b 5d 08 mov 0x8(%ebp),%ebx 10534f: 90 nop && (node = rtems_chain_get( chain )) == NULL 105350: 89 1c 24 mov %ebx,(%esp) 105353: e8 a8 00 00 00 call 105400 105358: 85 c0 test %eax,%eax 10535a: 89 c7 mov %eax,%edi 10535c: 75 32 jne 105390 sc = rtems_event_receive( 10535e: 89 74 24 0c mov %esi,0xc(%esp) <== NOT EXECUTED 105362: 8b 45 10 mov 0x10(%ebp),%eax <== NOT EXECUTED 105365: 89 44 24 08 mov %eax,0x8(%esp) <== NOT EXECUTED 105369: 31 c0 xor %eax,%eax <== NOT EXECUTED 10536b: 89 44 24 04 mov %eax,0x4(%esp) <== NOT EXECUTED 10536f: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED 105372: 89 04 24 mov %eax,(%esp) <== NOT EXECUTED 105375: e8 d6 fa ff ff call 104e50 <== NOT EXECUTED while ( 10537a: 85 c0 test %eax,%eax 10537c: 74 d2 je 105350 <== NEVER TAKEN timeout, &out ); } *node_ptr = node; 10537e: 8b 4d 14 mov 0x14(%ebp),%ecx 105381: 89 39 mov %edi,(%ecx) return sc; } 105383: 83 c4 2c add $0x2c,%esp 105386: 5b pop %ebx 105387: 5e pop %esi 105388: 5f pop %edi 105389: 5d pop %ebp 10538a: c3 ret 10538b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 10538f: 90 nop *node_ptr = node; 105390: 8b 4d 14 mov 0x14(%ebp),%ecx 105393: 31 c0 xor %eax,%eax 105395: 89 39 mov %edi,(%ecx) } 105397: 83 c4 2c add $0x2c,%esp 10539a: 5b pop %ebx 10539b: 5e pop %esi 10539c: 5f pop %edi 10539d: 5d pop %ebp 10539e: c3 ret 10539f: 90 nop =============================================================================== 00105770 : return information->objects_per_block != 0; 105770: 0f b7 05 d2 74 12 00 movzwl 0x1274d2,%eax #include #include static uint32_t get_config_max( const Objects_Information *info ) { if ( _Objects_Is_auto_extend( info ) ) { 105777: 85 c0 test %eax,%eax 105779: 75 15 jne 105790 <== NEVER TAKEN */ RTEMS_INLINE_ROUTINE Objects_Maximum _Objects_Get_index( Objects_Id id ) { return 10577b: 0f b7 05 c0 74 12 00 movzwl 0x1274c0,%eax } uint32_t rtems_configuration_get_maximum_barriers( void ) { return get_config_max( &_Barrier_Information ); } 105782: c3 ret 105783: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10578a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 105790: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 105795: c3 ret <== NOT EXECUTED 105796: 90 nop 105797: 90 nop 105798: 90 nop 105799: 90 nop 10579a: 90 nop 10579b: 90 nop 10579c: 90 nop 10579d: 90 nop 10579e: 90 nop 10579f: 90 nop =============================================================================== 00114690 : 114690: 0f b7 05 32 1d 1a 00 movzwl 0x1a1d32,%eax <== NOT EXECUTED if ( _Objects_Is_auto_extend( info ) ) { 114697: 85 c0 test %eax,%eax <== NOT EXECUTED 114699: 75 15 jne 1146b0 <== NOT EXECUTED 11469b: 0f b7 05 20 1d 1a 00 movzwl 0x1a1d20,%eax <== NOT EXECUTED uint32_t rtems_configuration_get_maximum_extensions( void ) { return get_config_max( &_Extension_Information ); } 1146a2: c3 ret <== NOT EXECUTED 1146a3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi <== NOT EXECUTED 1146aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi <== NOT EXECUTED return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 1146b0: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 1146b5: c3 ret <== NOT EXECUTED 1146b6: 90 nop 1146b7: 90 nop 1146b8: 90 nop 1146b9: 90 nop 1146ba: 90 nop 1146bb: 90 nop 1146bc: 90 nop 1146bd: 90 nop 1146be: 90 nop 1146bf: 90 nop =============================================================================== 001057a0 : 1057a0: 0f b7 05 52 75 12 00 movzwl 0x127552,%eax if ( _Objects_Is_auto_extend( info ) ) { 1057a7: 85 c0 test %eax,%eax 1057a9: 75 15 jne 1057c0 <== NEVER TAKEN 1057ab: 0f b7 05 40 75 12 00 movzwl 0x127540,%eax } uint32_t rtems_configuration_get_maximum_message_queues( void ) { return get_config_max( &_Message_queue_Information ); } 1057b2: c3 ret 1057b3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 1057ba: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 1057c0: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 1057c5: c3 ret <== NOT EXECUTED 1057c6: 90 nop 1057c7: 90 nop 1057c8: 90 nop 1057c9: 90 nop 1057ca: 90 nop 1057cb: 90 nop 1057cc: 90 nop 1057cd: 90 nop 1057ce: 90 nop 1057cf: 90 nop =============================================================================== 001057d0 : 1057d0: 0f b7 05 92 75 12 00 movzwl 0x127592,%eax if ( _Objects_Is_auto_extend( info ) ) { 1057d7: 85 c0 test %eax,%eax 1057d9: 75 15 jne 1057f0 <== NEVER TAKEN 1057db: 0f b7 05 80 75 12 00 movzwl 0x127580,%eax uint32_t rtems_configuration_get_maximum_partitions( void ) { return get_config_max( &_Partition_Information ); } 1057e2: c3 ret 1057e3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 1057ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 1057f0: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 1057f5: c3 ret <== NOT EXECUTED 1057f6: 90 nop 1057f7: 90 nop 1057f8: 90 nop 1057f9: 90 nop 1057fa: 90 nop 1057fb: 90 nop 1057fc: 90 nop 1057fd: 90 nop 1057fe: 90 nop 1057ff: 90 nop =============================================================================== 00105800 : 105800: 0f b7 05 d2 75 12 00 movzwl 0x1275d2,%eax if ( _Objects_Is_auto_extend( info ) ) { 105807: 85 c0 test %eax,%eax 105809: 75 15 jne 105820 <== NEVER TAKEN 10580b: 0f b7 05 c0 75 12 00 movzwl 0x1275c0,%eax uint32_t rtems_configuration_get_maximum_periods( void ) { return get_config_max( &_Rate_monotonic_Information ); } 105812: c3 ret 105813: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10581a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 105820: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 105825: c3 ret <== NOT EXECUTED 105826: 90 nop 105827: 90 nop 105828: 90 nop 105829: 90 nop 10582a: 90 nop 10582b: 90 nop 10582c: 90 nop 10582d: 90 nop 10582e: 90 nop 10582f: 90 nop =============================================================================== 00105830 : 105830: 0f b7 05 12 75 12 00 movzwl 0x127512,%eax if ( _Objects_Is_auto_extend( info ) ) { 105837: 85 c0 test %eax,%eax 105839: 75 15 jne 105850 <== NEVER TAKEN 10583b: 0f b7 05 00 75 12 00 movzwl 0x127500,%eax uint32_t rtems_configuration_get_maximum_ports( void ) { return get_config_max( &_Dual_ported_memory_Information ); } 105842: c3 ret 105843: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10584a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 105850: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 105855: c3 ret <== NOT EXECUTED 105856: 90 nop 105857: 90 nop 105858: 90 nop 105859: 90 nop 10585a: 90 nop 10585b: 90 nop 10585c: 90 nop 10585d: 90 nop 10585e: 90 nop 10585f: 90 nop =============================================================================== 00105860 : 105860: 0f b7 05 12 76 12 00 movzwl 0x127612,%eax if ( _Objects_Is_auto_extend( info ) ) { 105867: 85 c0 test %eax,%eax 105869: 75 15 jne 105880 <== NEVER TAKEN 10586b: 0f b7 05 00 76 12 00 movzwl 0x127600,%eax uint32_t rtems_configuration_get_maximum_regions( void ) { return get_config_max( &_Region_Information ); } 105872: c3 ret 105873: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10587a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 105880: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 105885: c3 ret <== NOT EXECUTED 105886: 90 nop 105887: 90 nop 105888: 90 nop 105889: 90 nop 10588a: 90 nop 10588b: 90 nop 10588c: 90 nop 10588d: 90 nop 10588e: 90 nop 10588f: 90 nop =============================================================================== 00105890 : 105890: 0f b7 05 92 76 12 00 movzwl 0x127692,%eax if ( _Objects_Is_auto_extend( info ) ) { 105897: 85 c0 test %eax,%eax 105899: 75 15 jne 1058b0 <== NEVER TAKEN 10589b: 0f b7 05 80 76 12 00 movzwl 0x127680,%eax uint32_t rtems_configuration_get_maximum_semaphores( void ) { return get_config_max( &_Semaphore_Information ); } 1058a2: c3 ret 1058a3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 1058aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 1058b0: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 1058b5: c3 ret <== NOT EXECUTED 1058b6: 90 nop 1058b7: 90 nop 1058b8: 90 nop 1058b9: 90 nop 1058ba: 90 nop 1058bb: 90 nop 1058bc: 90 nop 1058bd: 90 nop 1058be: 90 nop 1058bf: 90 nop =============================================================================== 001058f0 : 1058f0: 0f b7 05 92 71 12 00 movzwl 0x127192,%eax if ( _Objects_Is_auto_extend( info ) ) { 1058f7: 85 c0 test %eax,%eax 1058f9: 75 15 jne 105910 <== NEVER TAKEN 1058fb: 0f b7 05 80 71 12 00 movzwl 0x127180,%eax uint32_t rtems_configuration_get_maximum_tasks( void ) { return get_config_max( &_RTEMS_tasks_Information.Objects ); } 105902: c3 ret 105903: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10590a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 105910: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 105915: c3 ret <== NOT EXECUTED 105916: 90 nop 105917: 90 nop 105918: 90 nop 105919: 90 nop 10591a: 90 nop 10591b: 90 nop 10591c: 90 nop 10591d: 90 nop 10591e: 90 nop 10591f: 90 nop =============================================================================== 001058c0 : 1058c0: 0f b7 05 52 76 12 00 movzwl 0x127652,%eax if ( _Objects_Is_auto_extend( info ) ) { 1058c7: 85 c0 test %eax,%eax 1058c9: 75 15 jne 1058e0 <== NEVER TAKEN 1058cb: 0f b7 05 40 76 12 00 movzwl 0x127640,%eax uint32_t rtems_configuration_get_maximum_timers( void ) { return get_config_max( &_Timer_Information ); } 1058d2: c3 ret 1058d3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 1058da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return info->objects_per_block | RTEMS_UNLIMITED_OBJECTS; 1058e0: 0d 00 00 00 80 or $0x80000000,%eax <== NOT EXECUTED 1058e5: c3 ret <== NOT EXECUTED 1058e6: 90 nop 1058e7: 90 nop 1058e8: 90 nop 1058e9: 90 nop 1058ea: 90 nop 1058eb: 90 nop 1058ec: 90 nop 1058ed: 90 nop 1058ee: 90 nop 1058ef: 90 nop =============================================================================== 0010a550 : RTEMS_SYSINIT_IDLE_THREADS, RTEMS_SYSINIT_ORDER_MIDDLE ); void rtems_initialize_executive(void) { 10a550: 55 push %ebp 10a551: 89 e5 mov %esp,%ebp 10a553: 53 push %ebx RTEMS_INLINE_ROUTINE uintptr_t _Linker_set_Obfuscate( const void *ptr ) { uintptr_t addr; addr = (uintptr_t) ptr; RTEMS_OBFUSCATE_VARIABLE( addr ); 10a554: bb e0 46 12 00 mov $0x1246e0,%ebx 10a559: 83 ec 04 sub $0x4,%esp const rtems_sysinit_item *item; /* Invoke the registered system initialization handlers */ RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) { 10a55c: 81 fb 18 47 12 00 cmp $0x124718,%ebx 10a562: 74 19 je 10a57d <== NEVER TAKEN 10a564: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10a56b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 10a56f: 90 nop ( *item->handler )(); 10a570: ff 13 call *(%ebx) RTEMS_LINKER_SET_FOREACH( _Sysinit, item ) { 10a572: 83 c3 04 add $0x4,%ebx 10a575: 81 fb 18 47 12 00 cmp $0x124718,%ebx 10a57b: 75 f3 jne 10a570 10a57d: b8 02 00 00 00 mov $0x2,%eax 10a582: a3 d4 03 13 00 mov %eax,0x1303d4 _System_state_Set( SYSTEM_STATE_UP ); _SMP_Request_start_multitasking(); _Thread_Start_multitasking(); 10a587: e8 e4 18 00 00 call 10be70 <_Thread_Start_multitasking> 10a58c: 90 nop 10a58d: 90 nop 10a58e: 90 nop 10a58f: 90 nop =============================================================================== 001069d0 : 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 ) { 1069d0: 55 push %ebp 1069d1: 89 e5 mov %esp,%ebp 1069d3: 83 ec 18 sub $0x18,%esp 1069d6: 89 5d f4 mov %ebx,-0xc(%ebp) 1069d9: 8b 5d 08 mov 0x8(%ebp),%ebx 1069dc: 89 75 f8 mov %esi,-0x8(%ebp) 1069df: 8b 75 10 mov 0x10(%ebp),%esi 1069e2: 89 7d fc mov %edi,-0x4(%ebp) 1069e5: 8b 7d 0c mov 0xc(%ebp),%edi rtems_device_major_number major_limit = _IO_Number_of_drivers; ISR_lock_Context lock_context; if ( rtems_interrupt_is_in_progress() ) 1069e8: e8 23 18 00 00 call 108210 <_ISR_Is_in_progress> 1069ed: 84 c0 test %al,%al 1069ef: 75 4f jne 106a40 return RTEMS_CALLED_FROM_ISR; if ( registered_major == NULL ) 1069f1: 85 f6 test %esi,%esi 1069f3: 74 72 je 106a67 return RTEMS_INVALID_ADDRESS; /* Set it to an invalid value */ *registered_major = major_limit; 1069f5: a1 d0 47 12 00 mov 0x1247d0,%eax if ( driver_table == NULL ) 1069fa: 85 ff test %edi,%edi *registered_major = major_limit; 1069fc: 89 06 mov %eax,(%esi) if ( driver_table == NULL ) 1069fe: 74 67 je 106a67 return table->initialization_entry == NULL && table->open_entry == NULL; 106a00: 8b 07 mov (%edi),%eax 106a02: 85 c0 test %eax,%eax 106a04: 74 5a je 106a60 return RTEMS_INVALID_ADDRESS; if ( rtems_io_is_empty_table( driver_table ) ) return RTEMS_INVALID_ADDRESS; if ( major >= major_limit ) 106a06: 39 1d d0 47 12 00 cmp %ebx,0x1247d0 106a0c: 0f 86 fe 00 00 00 jbe 106b10 RTEMS_INLINE_ROUTINE void _IO_Driver_registration_acquire( ISR_lock_Context *lock_context ) { _ISR_lock_ISR_disable_and_acquire( 106a12: 9c pushf 106a13: fa cli 106a14: 59 pop %ecx return RTEMS_INVALID_NUMBER; _IO_Driver_registration_acquire( &lock_context ); if ( major == 0 ) { 106a15: 85 db test %ebx,%ebx 106a17: 0f 84 c3 00 00 00 je 106ae0 _IO_Driver_registration_release( &lock_context ); return sc; } major = *registered_major; } else { rtems_driver_address_table *const table = _IO_Driver_address_table + major; 106a1d: 8d 04 5b lea (%ebx,%ebx,2),%eax 106a20: c1 e0 03 shl $0x3,%eax return table->initialization_entry == NULL && table->open_entry == NULL; 106a23: 8b 90 00 b7 12 00 mov 0x12b700(%eax),%edx 106a29: 85 d2 test %edx,%edx 106a2b: 74 53 je 106a80 RTEMS_INLINE_ROUTINE void _IO_Driver_registration_release( ISR_lock_Context *lock_context ) { _ISR_lock_Release_and_ISR_enable( 106a2d: 51 push %ecx 106a2e: 9d popf if ( !rtems_io_is_empty_table( table ) ) { _IO_Driver_registration_release( &lock_context ); return RTEMS_RESOURCE_IN_USE; 106a2f: b8 0c 00 00 00 mov $0xc,%eax 106a34: eb 0f jmp 106a45 106a36: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 106a3d: 8d 76 00 lea 0x0(%esi),%esi return RTEMS_CALLED_FROM_ISR; 106a40: b8 12 00 00 00 mov $0x12,%eax /* The driver will be initialized together with all other drivers * in a later stage by _IO_Initialize_all_drivers(). */ return RTEMS_SUCCESSFUL; } } 106a45: 8b 5d f4 mov -0xc(%ebp),%ebx 106a48: 8b 75 f8 mov -0x8(%ebp),%esi 106a4b: 8b 7d fc mov -0x4(%ebp),%edi 106a4e: 89 ec mov %ebp,%esp 106a50: 5d pop %ebp 106a51: c3 ret 106a52: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 106a59: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi return table->initialization_entry == NULL && table->open_entry == NULL; 106a60: 8b 47 04 mov 0x4(%edi),%eax 106a63: 85 c0 test %eax,%eax 106a65: 75 9f jne 106a06 } 106a67: 8b 5d f4 mov -0xc(%ebp),%ebx return RTEMS_INVALID_ADDRESS; 106a6a: b8 09 00 00 00 mov $0x9,%eax } 106a6f: 8b 75 f8 mov -0x8(%ebp),%esi 106a72: 8b 7d fc mov -0x4(%ebp),%edi 106a75: 89 ec mov %ebp,%esp 106a77: 5d pop %ebp 106a78: c3 ret 106a79: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi return table->initialization_entry == NULL && table->open_entry == NULL; 106a80: 8b 80 04 b7 12 00 mov 0x12b704(%eax),%eax 106a86: 85 c0 test %eax,%eax 106a88: 75 a3 jne 106a2d 106a8a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi *registered_major = major; 106a90: 89 1e mov %ebx,(%esi) _IO_Driver_address_table [major] = *driver_table; 106a92: 8d 04 5b lea (%ebx,%ebx,2),%eax 106a95: 8d 34 c5 00 b7 12 00 lea 0x12b700(,%eax,8),%esi 106a9c: 31 c0 xor %eax,%eax 106a9e: 8b 14 07 mov (%edi,%eax,1),%edx 106aa1: 89 14 06 mov %edx,(%esi,%eax,1) 106aa4: 83 c0 04 add $0x4,%eax 106aa7: 83 f8 18 cmp $0x18,%eax 106aaa: 72 f2 jb 106a9e 106aac: 51 push %ecx 106aad: 9d popf return RTEMS_SUCCESSFUL; 106aae: 31 c0 xor %eax,%eax if ( _IO_All_drivers_initialized ) { 106ab0: 80 3d 44 cf 12 00 00 cmpb $0x0,0x12cf44 106ab7: 74 8c je 106a45 <== NEVER TAKEN return rtems_io_initialize( major, 0, NULL ); 106ab9: 89 5d 08 mov %ebx,0x8(%ebp) } 106abc: 8b 75 f8 mov -0x8(%ebp),%esi return rtems_io_initialize( major, 0, NULL ); 106abf: c7 45 10 00 00 00 00 movl $0x0,0x10(%ebp) } 106ac6: 8b 5d f4 mov -0xc(%ebp),%ebx return rtems_io_initialize( major, 0, NULL ); 106ac9: c7 45 0c 00 00 00 00 movl $0x0,0xc(%ebp) } 106ad0: 8b 7d fc mov -0x4(%ebp),%edi 106ad3: 89 ec mov %ebp,%esp 106ad5: 5d pop %ebp return rtems_io_initialize( major, 0, NULL ); 106ad6: e9 a5 fe ff ff jmp 106980 106adb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 106adf: 90 nop for ( m = 0; m < n; ++m ) { 106ae0: a1 d0 47 12 00 mov 0x1247d0,%eax 106ae5: 85 c0 test %eax,%eax 106ae7: 74 5a je 106b43 <== NEVER TAKEN 106ae9: b8 00 b7 12 00 mov $0x12b700,%eax 106aee: eb 0c jmp 106afc 106af0: 43 inc %ebx 106af1: 83 c0 18 add $0x18,%eax 106af4: 39 1d d0 47 12 00 cmp %ebx,0x1247d0 106afa: 74 34 je 106b30 return table->initialization_entry == NULL && table->open_entry == NULL; 106afc: 8b 10 mov (%eax),%edx 106afe: 85 d2 test %edx,%edx 106b00: 75 ee jne 106af0 106b02: 8b 50 04 mov 0x4(%eax),%edx 106b05: 85 d2 test %edx,%edx 106b07: 75 e7 jne 106af0 106b09: eb 85 jmp 106a90 106b0b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 106b0f: 90 nop } 106b10: 8b 5d f4 mov -0xc(%ebp),%ebx return RTEMS_INVALID_NUMBER; 106b13: b8 0a 00 00 00 mov $0xa,%eax } 106b18: 8b 75 f8 mov -0x8(%ebp),%esi 106b1b: 8b 7d fc mov -0x4(%ebp),%edi 106b1e: 89 ec mov %ebp,%esp 106b20: 5d pop %ebp 106b21: c3 ret 106b22: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 106b29: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi *major = m; 106b30: a1 d0 47 12 00 mov 0x1247d0,%eax 106b35: 89 06 mov %eax,(%esi) 106b37: 51 push %ecx 106b38: 9d popf return RTEMS_TOO_MANY; 106b39: b8 05 00 00 00 mov $0x5,%eax return sc; 106b3e: e9 02 ff ff ff jmp 106a45 *major = m; 106b43: c7 06 00 00 00 00 movl $0x0,(%esi) <== NOT EXECUTED if ( m != n ) 106b49: eb ec jmp 106b37 <== NOT EXECUTED 106b4b: 90 nop 106b4c: 90 nop 106b4d: 90 nop 106b4e: 90 nop 106b4f: 90 nop =============================================================================== 001046f0 : return big_enough; } void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size) { 1046f0: 55 push %ebp uintptr_t excess = value % alignment; 1046f1: 31 d2 xor %edx,%edx { 1046f3: 89 e5 mov %esp,%ebp 1046f5: 57 push %edi 1046f6: 56 push %esi 1046f7: 53 push %ebx 1046f8: 83 ec 2c sub $0x2c,%esp 1046fb: 8b 7d 08 mov 0x8(%ebp),%edi 1046fe: 8b 4d 0c mov 0xc(%ebp),%ecx 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; 104701: 8b 77 1c mov 0x1c(%edi),%esi uintptr_t excess = value % alignment; 104704: 89 c8 mov %ecx,%eax 104706: f7 f6 div %esi if (excess > 0) { 104708: 85 d2 test %edx,%edx 10470a: 74 74 je 104780 value += alignment - excess; 10470c: 01 ce add %ecx,%esi 10470e: 29 d6 sub %edx,%esi uintptr_t aligned_size = align_up(alignment, size); if (size > 0 && size <= aligned_size) { 104710: 39 f1 cmp %esi,%ecx 104712: 0f 96 c0 setbe %al 104715: 85 c9 test %ecx,%ecx 104717: 74 57 je 104770 104719: 84 c0 test %al,%al 10471b: 74 53 je 104770 <== NEVER TAKEN return _Chain_Immutable_head( the_chain )->next; 10471d: 8b 1f mov (%edi),%ebx return &the_chain->Tail.Node; 10471f: 8d 47 04 lea 0x4(%edi),%eax while (current != tail && big_enough == NULL) { 104722: 39 c3 cmp %eax,%ebx 104724: 74 4a je 104770 104726: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10472d: 8d 76 00 lea 0x0(%esi),%esi if (free_chunk->size >= size) { 104730: 3b 73 1c cmp 0x1c(%ebx),%esi 104733: 77 2b ja 104760 rtems_rbheap_chunk *free_chunk = search_free_chunk(free_chain, aligned_size); if (free_chunk != NULL) { uintptr_t free_size = free_chunk->size; 104735: 8b 43 1c mov 0x1c(%ebx),%eax 104738: 89 45 e4 mov %eax,-0x1c(%ebp) if (free_size > aligned_size) { 10473b: 39 f0 cmp %esi,%eax 10473d: 77 51 ja 104790 next = the_node->next; 10473f: 8b 13 mov (%ebx),%edx previous = the_node->previous; 104741: 8b 43 04 mov 0x4(%ebx),%eax next->previous = previous; 104744: 89 42 04 mov %eax,0x4(%edx) previous->next = next; 104747: 89 10 mov %edx,(%eax) 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; 104749: 8b 43 18 mov 0x18(%ebx),%eax node->next = NULL; 10474c: c7 03 00 00 00 00 movl $0x0,(%ebx) } } } return ptr; } 104752: 83 c4 2c add $0x2c,%esp 104755: 5b pop %ebx 104756: 5e pop %esi 104757: 5f pop %edi 104758: 5d pop %ebp 104759: c3 ret 10475a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi return the_node->next; 104760: 8b 1b mov (%ebx),%ebx while (current != tail && big_enough == NULL) { 104762: 39 d8 cmp %ebx,%eax 104764: 75 ca jne 104730 <== NEVER TAKEN 104766: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10476d: 8d 76 00 lea 0x0(%esi),%esi void *ptr = NULL; 104770: 31 c0 xor %eax,%eax } 104772: 83 c4 2c add $0x2c,%esp 104775: 5b pop %ebx 104776: 5e pop %esi 104777: 5f pop %edi 104778: 5d pop %ebp 104779: c3 ret 10477a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi 104780: 89 ce mov %ecx,%esi 104782: b0 01 mov $0x1,%al 104784: eb 8f jmp 104715 104786: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 10478d: 8d 76 00 lea 0x0(%esi),%esi return _Chain_Immutable_head( the_chain )->next; 104790: 8b 57 0c mov 0xc(%edi),%edx return &the_chain->Tail.Node; 104793: 8d 4f 0c lea 0xc(%edi),%ecx 104796: 89 4d e0 mov %ecx,-0x20(%ebp) 104799: 8d 4f 10 lea 0x10(%edi),%ecx if ( !_Chain_Is_empty(the_chain)) 10479c: 39 ca cmp %ecx,%edx 10479e: 74 59 je 1047f9 new_first = old_first->next; 1047a0: 8b 0a mov (%edx),%ecx return &the_chain->Head.Node; 1047a2: 8d 47 0c lea 0xc(%edi),%eax rtems_rbtree_control *chunk_tree = &control->chunk_tree; 1047a5: 83 c7 18 add $0x18,%edi head->next = new_first; 1047a8: 89 4f f4 mov %ecx,-0xc(%edi) return &the_chain->Head.Node; 1047ab: 89 41 04 mov %eax,0x4(%ecx) uintptr_t new_free_size = free_size - aligned_size; 1047ae: 8b 45 e4 mov -0x1c(%ebp),%eax rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1047b1: 89 55 e4 mov %edx,-0x1c(%ebp) new_chunk->begin = free_chunk->begin + new_free_size; 1047b4: 8b 4b 18 mov 0x18(%ebx),%ecx uintptr_t new_free_size = free_size - aligned_size; 1047b7: 29 f0 sub %esi,%eax free_chunk->size = new_free_size; 1047b9: 89 43 1c mov %eax,0x1c(%ebx) new_chunk->begin = free_chunk->begin + new_free_size; 1047bc: 01 c8 add %ecx,%eax rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1047be: bb 01 00 00 00 mov $0x1,%ebx new_chunk->begin = free_chunk->begin + new_free_size; 1047c3: 89 42 18 mov %eax,0x18(%edx) rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1047c6: 8d 42 08 lea 0x8(%edx),%eax new_chunk->size = aligned_size; 1047c9: 89 72 1c mov %esi,0x1c(%edx) rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1047cc: be a0 45 10 00 mov $0x1045a0,%esi node->next = NULL; 1047d1: c7 02 00 00 00 00 movl $0x0,(%edx) 1047d7: 89 5c 24 0c mov %ebx,0xc(%esp) 1047db: 89 74 24 08 mov %esi,0x8(%esp) rtems_rbtree_control *chunk_tree = &control->chunk_tree; 1047df: 89 3c 24 mov %edi,(%esp) rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1047e2: 89 44 24 04 mov %eax,0x4(%esp) 1047e6: e8 65 02 00 00 call 104a50 ptr = (void *) new_chunk->begin; 1047eb: 8b 55 e4 mov -0x1c(%ebp),%edx 1047ee: 8b 42 18 mov 0x18(%edx),%eax } 1047f1: 83 c4 2c add $0x2c,%esp 1047f4: 5b pop %ebx 1047f5: 5e pop %esi 1047f6: 5f pop %edi 1047f7: 5d pop %ebp 1047f8: c3 ret (*control->extend_descriptors)(control); 1047f9: 89 3c 24 mov %edi,(%esp) 1047fc: 89 4d e0 mov %ecx,-0x20(%ebp) 1047ff: ff 57 20 call *0x20(%edi) return _Chain_Immutable_head( the_chain )->next; 104802: 8b 57 0c mov 0xc(%edi),%edx if ( !_Chain_Is_empty(the_chain)) 104805: 8b 4d e0 mov -0x20(%ebp),%ecx 104808: 39 d1 cmp %edx,%ecx 10480a: 75 94 jne 1047a0 void *ptr = NULL; 10480c: 31 c0 xor %eax,%eax 10480e: e9 5f ff ff ff jmp 104772 104813: 90 nop 104814: 90 nop 104815: 90 nop 104816: 90 nop 104817: 90 nop 104818: 90 nop 104819: 90 nop 10481a: 90 nop 10481b: 90 nop 10481c: 90 nop 10481d: 90 nop 10481e: 90 nop 10481f: 90 nop =============================================================================== 00104820 : rtems_rbtree_extract(&control->chunk_tree, &b->tree_node); } } rtems_status_code rtems_rbheap_free(rtems_rbheap_control *control, void *ptr) { 104820: 55 push %ebp 104821: 89 e5 mov %esp,%ebp 104823: 83 ec 58 sub $0x58,%esp 104826: 89 5d f4 mov %ebx,-0xc(%ebp) 104829: 8b 4d 0c mov 0xc(%ebp),%ecx 10482c: 89 75 f8 mov %esi,-0x8(%ebp) 10482f: 89 7d fc mov %edi,-0x4(%ebp) rtems_status_code sc = RTEMS_SUCCESSFUL; if (ptr != NULL) { 104832: 85 c9 test %ecx,%ecx 104834: 0f 84 26 01 00 00 je 104960 rtems_rbheap_chunk *chunk = find(&control->chunk_tree, (uintptr_t) ptr); 10483a: 8b 45 08 mov 0x8(%ebp),%eax rtems_rbheap_chunk chunk = { .begin = key }; 10483d: 31 d2 xor %edx,%edx rtems_rbheap_chunk *chunk = find(&control->chunk_tree, (uintptr_t) ptr); 10483f: 8d 78 18 lea 0x18(%eax),%edi rtems_rbheap_chunk chunk = { .begin = key }; 104842: 31 c0 xor %eax,%eax 104844: 89 54 05 c8 mov %edx,-0x38(%ebp,%eax,1) 104848: 89 54 05 cc mov %edx,-0x34(%ebp,%eax,1) 10484c: 83 c0 08 add $0x8,%eax 10484f: 83 f8 20 cmp $0x20,%eax 104852: 72 f0 jb 104844 104854: 89 4d e0 mov %ecx,-0x20(%ebp) return rtems_rbheap_chunk_of_node( 104857: bb a0 45 10 00 mov $0x1045a0,%ebx 10485c: b9 01 00 00 00 mov $0x1,%ecx 104861: 89 5c 24 08 mov %ebx,0x8(%esp) 104865: 8d 45 d0 lea -0x30(%ebp),%eax 104868: 89 4c 24 0c mov %ecx,0xc(%esp) 10486c: 89 44 24 04 mov %eax,0x4(%esp) 104870: 89 3c 24 mov %edi,(%esp) 104873: e8 68 01 00 00 call 1049e0 if (chunk != NULL_PAGE) { 104878: 85 c0 test %eax,%eax return rtems_rbheap_chunk_of_node( 10487a: 89 c3 mov %eax,%ebx 10487c: 8d 70 f8 lea -0x8(%eax),%esi if (chunk != NULL_PAGE) { 10487f: 0f 84 eb 00 00 00 je 104970 if (!rtems_rbheap_is_chunk_free(chunk)) { 104885: 8b 53 f8 mov -0x8(%ebx),%edx other = succ(chunk); check_and_merge(control, chunk, other, other); other = pred(chunk); check_and_merge(control, other, chunk, other); } else { sc = RTEMS_INCORRECT_STATE; 104888: b8 0e 00 00 00 mov $0xe,%eax if (!rtems_rbheap_is_chunk_free(chunk)) { 10488d: 85 d2 test %edx,%edx 10488f: 0f 85 cd 00 00 00 jne 104962 the_node->previous = after_node; 104895: 8b 45 08 mov 0x8(%ebp),%eax after_node->next = the_node; 104898: 8b 55 08 mov 0x8(%ebp),%edx the_node->previous = after_node; 10489b: 89 46 04 mov %eax,0x4(%esi) before_node = after_node->next; 10489e: 8b 00 mov (%eax),%eax after_node->next = the_node; 1048a0: 89 32 mov %esi,(%edx) the_node->next = before_node; 1048a2: 89 43 f8 mov %eax,-0x8(%ebx) before_node->previous = the_node; 1048a5: 89 70 04 mov %esi,0x4(%eax) */ RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_successor( const rtems_rbtree_node *node ) { return _RBTree_Successor( node ); 1048a8: 89 1c 24 mov %ebx,(%esp) 1048ab: e8 b0 1f 00 00 call 106860 <_RBTree_Successor> if (c != NULL_PAGE && rtems_rbheap_is_chunk_free(c)) { 1048b0: 85 c0 test %eax,%eax 1048b2: 74 50 je 104904 return node->next == NULL; 1048b4: 8b 48 f8 mov -0x8(%eax),%ecx return rtems_rbheap_chunk_of_node( 1048b7: 8d 50 f8 lea -0x8(%eax),%edx 1048ba: 89 55 c4 mov %edx,-0x3c(%ebp) if (c != NULL_PAGE && rtems_rbheap_is_chunk_free(c)) { 1048bd: 85 c9 test %ecx,%ecx 1048bf: 74 43 je 104904 a->size += b->size; 1048c1: 8b 50 14 mov 0x14(%eax),%edx <== NOT EXECUTED 1048c4: 01 56 1c add %edx,0x1c(%esi) <== NOT EXECUTED previous = the_node->previous; 1048c7: 8b 50 fc mov -0x4(%eax),%edx <== NOT EXECUTED next->previous = previous; 1048ca: 89 51 04 mov %edx,0x4(%ecx) <== NOT EXECUTED previous->next = next; 1048cd: 89 0a mov %ecx,(%edx) <== NOT EXECUTED return &the_chain->Head.Node; 1048cf: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED 1048d2: 8d 48 f8 lea -0x8(%eax),%ecx <== NOT EXECUTED 1048d5: 83 c2 0c add $0xc,%edx <== NOT EXECUTED 1048d8: 89 50 fc mov %edx,-0x4(%eax) <== NOT EXECUTED before_node = after_node->next; 1048db: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED 1048de: 8b 52 0c mov 0xc(%edx),%edx <== NOT EXECUTED 1048e1: 89 55 c4 mov %edx,-0x3c(%ebp) <== NOT EXECUTED after_node->next = the_node; 1048e4: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED 1048e7: 89 4a 0c mov %ecx,0xc(%edx) <== NOT EXECUTED the_node->next = before_node; 1048ea: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED 1048ed: 89 48 f8 mov %ecx,-0x8(%eax) <== NOT EXECUTED 1048f0: 89 ca mov %ecx,%edx <== NOT EXECUTED before_node->previous = the_node; 1048f2: 8d 48 f8 lea -0x8(%eax),%ecx <== NOT EXECUTED 1048f5: 89 4a 04 mov %ecx,0x4(%edx) <== NOT EXECUTED rtems_rbtree_extract(&control->chunk_tree, &b->tree_node); 1048f8: 89 44 24 04 mov %eax,0x4(%esp) <== NOT EXECUTED RTEMS_INLINE_ROUTINE void rtems_rbtree_extract( rtems_rbtree_control *the_rbtree, rtems_rbtree_node *the_node ) { _RBTree_Extract( the_rbtree, the_node ); 1048fc: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED 1048ff: e8 3c 18 00 00 call 106140 <_RBTree_Extract> <== NOT EXECUTED return _RBTree_Predecessor( node ); 104904: 89 1c 24 mov %ebx,(%esp) 104907: e8 a4 1f 00 00 call 1068b0 <_RBTree_Predecessor> if (c != NULL_PAGE && rtems_rbheap_is_chunk_free(c)) { 10490c: 85 c0 test %eax,%eax 10490e: 74 50 je 104960 return rtems_rbheap_chunk_of_node( 104910: 8d 50 f8 lea -0x8(%eax),%edx if (c != NULL_PAGE && rtems_rbheap_is_chunk_free(c)) { 104913: 8b 40 f8 mov -0x8(%eax),%eax 104916: 85 c0 test %eax,%eax 104918: 74 46 je 104960 a->size += b->size; 10491a: 8b 46 1c mov 0x1c(%esi),%eax 10491d: 01 42 1c add %eax,0x1c(%edx) next = the_node->next; 104920: 8b 53 f8 mov -0x8(%ebx),%edx previous = the_node->previous; 104923: 8b 46 04 mov 0x4(%esi),%eax next->previous = previous; 104926: 89 42 04 mov %eax,0x4(%edx) previous->next = next; 104929: 89 10 mov %edx,(%eax) return &the_chain->Head.Node; 10492b: 8b 45 08 mov 0x8(%ebp),%eax after_node->next = the_node; 10492e: 8b 55 08 mov 0x8(%ebp),%edx return &the_chain->Head.Node; 104931: 83 c0 0c add $0xc,%eax 104934: 89 46 04 mov %eax,0x4(%esi) before_node = after_node->next; 104937: 8b 45 08 mov 0x8(%ebp),%eax 10493a: 8b 40 0c mov 0xc(%eax),%eax after_node->next = the_node; 10493d: 89 72 0c mov %esi,0xc(%edx) the_node->next = before_node; 104940: 89 43 f8 mov %eax,-0x8(%ebx) before_node->previous = the_node; 104943: 89 70 04 mov %esi,0x4(%eax) _RBTree_Extract( the_rbtree, the_node ); 104946: 89 5c 24 04 mov %ebx,0x4(%esp) 10494a: 89 3c 24 mov %edi,(%esp) 10494d: e8 ee 17 00 00 call 106140 <_RBTree_Extract> 104952: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 104959: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi rtems_status_code sc = RTEMS_SUCCESSFUL; 104960: 31 c0 xor %eax,%eax sc = RTEMS_INVALID_ID; } } return sc; } 104962: 8b 5d f4 mov -0xc(%ebp),%ebx 104965: 8b 75 f8 mov -0x8(%ebp),%esi 104968: 8b 7d fc mov -0x4(%ebp),%edi 10496b: 89 ec mov %ebp,%esp 10496d: 5d pop %ebp 10496e: c3 ret 10496f: 90 nop 104970: 8b 5d f4 mov -0xc(%ebp),%ebx sc = RTEMS_INVALID_ID; 104973: b8 04 00 00 00 mov $0x4,%eax } 104978: 8b 75 f8 mov -0x8(%ebp),%esi 10497b: 8b 7d fc mov -0x4(%ebp),%edi 10497e: 89 ec mov %ebp,%esp 104980: 5d pop %ebp 104981: c3 ret 104982: 90 nop 104983: 90 nop 104984: 90 nop 104985: 90 nop 104986: 90 nop 104987: 90 nop 104988: 90 nop 104989: 90 nop 10498a: 90 nop 10498b: 90 nop 10498c: 90 nop 10498d: 90 nop 10498e: 90 nop 10498f: 90 nop =============================================================================== 001045c0 : uintptr_t area_size, uintptr_t alignment, rtems_rbheap_extend_descriptors extend_descriptors, void *handler_arg ) { 1045c0: 55 push %ebp 1045c1: 89 e5 mov %esp,%ebp 1045c3: 83 ec 38 sub $0x38,%esp 1045c6: 89 75 f8 mov %esi,-0x8(%ebp) /* * Ensure that the alignment is at least two, so that we can keep * chunk_compare() that simple. */ alignment = alignment < 2 ? 2 : alignment; 1045c9: 8b 4d 14 mov 0x14(%ebp),%ecx { 1045cc: 89 7d fc mov %edi,-0x4(%ebp) 1045cf: 8b 75 0c mov 0xc(%ebp),%esi 1045d2: 89 5d f4 mov %ebx,-0xc(%ebp) uintptr_t end = begin + area_size; 1045d5: 8b 7d 10 mov 0x10(%ebp),%edi { 1045d8: 8b 5d 08 mov 0x8(%ebp),%ebx uintptr_t end = begin + area_size; 1045db: 01 f7 add %esi,%edi alignment = alignment < 2 ? 2 : alignment; 1045dd: 83 f9 02 cmp $0x2,%ecx 1045e0: 73 05 jae 1045e7 <== ALWAYS TAKEN 1045e2: b9 02 00 00 00 mov $0x2,%ecx <== NOT EXECUTED uintptr_t excess = value % alignment; 1045e7: 31 d2 xor %edx,%edx 1045e9: 89 f0 mov %esi,%eax 1045eb: f7 f1 div %ecx if (excess > 0) { 1045ed: 85 d2 test %edx,%edx 1045ef: 74 3f je 104630 value += alignment - excess; 1045f1: 8d 04 0e lea (%esi,%ecx,1),%eax 1045f4: 29 d0 sub %edx,%eax 1045f6: 89 45 e0 mov %eax,-0x20(%ebp) aligned_begin = align_up(alignment, begin); aligned_end = align_down(alignment, end); if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) { 1045f9: 39 c6 cmp %eax,%esi 1045fb: 0f 96 45 e4 setbe -0x1c(%ebp) uintptr_t excess = value % alignment; 1045ff: 31 d2 xor %edx,%edx 104601: 89 f8 mov %edi,%eax 104603: f7 f1 div %ecx return value - excess; 104605: 89 f8 mov %edi,%eax 104607: 29 d0 sub %edx,%eax if (begin < end && begin <= aligned_begin && aligned_begin < aligned_end) { 104609: 39 fe cmp %edi,%esi 10460b: 0f 92 c2 setb %dl 10460e: 84 55 e4 test %dl,-0x1c(%ebp) 104611: 74 08 je 10461b 104613: 3b 45 e0 cmp -0x20(%ebp),%eax 104616: 89 45 e4 mov %eax,-0x1c(%ebp) 104619: 77 25 ja 104640 insert_into_tree(chunk_tree, first); } else { sc = RTEMS_NO_MEMORY; } } else { sc = RTEMS_INVALID_ADDRESS; 10461b: b8 09 00 00 00 mov $0x9,%eax } return sc; } 104620: 8b 5d f4 mov -0xc(%ebp),%ebx 104623: 8b 75 f8 mov -0x8(%ebp),%esi 104626: 8b 7d fc mov -0x4(%ebp),%edi 104629: 89 ec mov %ebp,%esp 10462b: 5d pop %ebp 10462c: c3 ret 10462d: 8d 76 00 lea 0x0(%esi),%esi 104630: 89 75 e0 mov %esi,-0x20(%ebp) 104633: c6 45 e4 01 movb $0x1,-0x1c(%ebp) 104637: eb c6 jmp 1045ff 104639: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi rtems_rbtree_control *chunk_tree = &control->chunk_tree; 104640: 8d 43 18 lea 0x18(%ebx),%eax 104643: 89 45 dc mov %eax,-0x24(%ebp) return &the_chain->Tail.Node; 104646: 8d 53 04 lea 0x4(%ebx),%edx control->extend_descriptors = extend_descriptors; 104649: 8b 45 18 mov 0x18(%ebp),%eax 10464c: 89 13 mov %edx,(%ebx) control->handler_arg = handler_arg; 10464e: 8b 55 1c mov 0x1c(%ebp),%edx 104651: 8d 73 10 lea 0x10(%ebx),%esi head->previous = NULL; 104654: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx) return &the_chain->Head.Node; 10465b: 8d 7b 0c lea 0xc(%ebx),%edi tail->previous = head; 10465e: 89 5b 08 mov %ebx,0x8(%ebx) head->next = tail; 104661: 89 73 0c mov %esi,0xc(%ebx) 104664: 89 53 24 mov %edx,0x24(%ebx) head->previous = NULL; 104667: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx) tail->previous = head; 10466e: 89 7b 14 mov %edi,0x14(%ebx) */ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty( RBTree_Control *the_rbtree ) { RB_INIT( the_rbtree ); 104671: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx) control->alignment = alignment; 104678: 89 4b 1c mov %ecx,0x1c(%ebx) control->extend_descriptors = extend_descriptors; 10467b: 89 43 20 mov %eax,0x20(%ebx) (*control->extend_descriptors)(control); 10467e: 89 1c 24 mov %ebx,(%esp) 104681: ff 55 18 call *0x18(%ebp) return _Chain_Immutable_head( the_chain )->next; 104684: 8b 53 0c mov 0xc(%ebx),%edx if ( !_Chain_Is_empty(the_chain)) 104687: 39 d6 cmp %edx,%esi 104689: 74 55 je 1046e0 new_first = old_first->next; 10468b: 8b 0a mov (%edx),%ecx first->size = aligned_end - aligned_begin; 10468d: 8b 45 e4 mov -0x1c(%ebp),%eax head->next = new_first; 104690: 89 4b 0c mov %ecx,0xc(%ebx) new_first->previous = head; 104693: 89 79 04 mov %edi,0x4(%ecx) first->begin = aligned_begin; 104696: 8b 4d e0 mov -0x20(%ebp),%ecx the_node->previous = after_node; 104699: 89 5a 04 mov %ebx,0x4(%edx) 10469c: 89 4a 18 mov %ecx,0x18(%edx) first->size = aligned_end - aligned_begin; 10469f: 29 c8 sub %ecx,%eax rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1046a1: b9 a0 45 10 00 mov $0x1045a0,%ecx first->size = aligned_end - aligned_begin; 1046a6: 89 42 1c mov %eax,0x1c(%edx) before_node = after_node->next; 1046a9: 8b 03 mov (%ebx),%eax after_node->next = the_node; 1046ab: 89 13 mov %edx,(%ebx) the_node->next = before_node; 1046ad: 89 02 mov %eax,(%edx) before_node->previous = the_node; 1046af: 89 50 04 mov %edx,0x4(%eax) rtems_rbtree_insert(tree, &chunk->tree_node, chunk_compare, true); 1046b2: b8 01 00 00 00 mov $0x1,%eax 1046b7: 83 c2 08 add $0x8,%edx 1046ba: 89 44 24 0c mov %eax,0xc(%esp) 1046be: 8b 45 dc mov -0x24(%ebp),%eax 1046c1: 89 4c 24 08 mov %ecx,0x8(%esp) 1046c5: 89 54 24 04 mov %edx,0x4(%esp) 1046c9: 89 04 24 mov %eax,(%esp) 1046cc: e8 7f 03 00 00 call 104a50 } 1046d1: 8b 5d f4 mov -0xc(%ebp),%ebx rtems_status_code sc = RTEMS_SUCCESSFUL; 1046d4: 31 c0 xor %eax,%eax } 1046d6: 8b 75 f8 mov -0x8(%ebp),%esi 1046d9: 8b 7d fc mov -0x4(%ebp),%edi 1046dc: 89 ec mov %ebp,%esp 1046de: 5d pop %ebp 1046df: c3 ret sc = RTEMS_NO_MEMORY; 1046e0: b8 1a 00 00 00 mov $0x1a,%eax return sc; 1046e5: e9 36 ff ff ff jmp 104620 1046ea: 90 nop 1046eb: 90 nop 1046ec: 90 nop 1046ed: 90 nop 1046ee: 90 nop 1046ef: 90 nop =============================================================================== 001057c0 : void *starting_address, size_t number_nodes, size_t node_size, bool is_unique ) { 1057c0: 55 push %ebp 1057c1: 89 e5 mov %esp,%ebp 1057c3: 57 push %edi 1057c4: 56 push %esi 1057c5: 53 push %ebx 1057c6: 83 ec 1c sub $0x1c,%esp 1057c9: 8b 45 14 mov 0x14(%ebp),%eax 1057cc: 8b 55 08 mov 0x8(%ebp),%edx count = number_nodes; next = starting_address; while ( count-- ) { rtems_rbtree_insert( the_rbtree, next, compare, is_unique ); 1057cf: 0f b6 75 1c movzbl 0x1c(%ebp),%esi while ( count-- ) { 1057d3: 85 c0 test %eax,%eax 1057d5: c7 02 00 00 00 00 movl $0x0,(%edx) 1057db: 74 37 je 105814 <== NEVER TAKEN 1057dd: 8d 78 ff lea -0x1(%eax),%edi 1057e0: 89 fb mov %edi,%ebx 1057e2: 8b 7d 10 mov 0x10(%ebp),%edi 1057e5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 1057ec: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi rtems_rbtree_insert( the_rbtree, next, compare, is_unique ); 1057f0: 89 7c 24 04 mov %edi,0x4(%esp) 1057f4: 8b 45 0c mov 0xc(%ebp),%eax 1057f7: 89 74 24 0c mov %esi,0xc(%esp) 1057fb: 89 44 24 08 mov %eax,0x8(%esp) 1057ff: 8b 45 08 mov 0x8(%ebp),%eax 105802: 89 04 24 mov %eax,(%esp) 105805: e8 86 00 00 00 call 105890 RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset ( const void *base, uintptr_t offset ) { return (void *)((uintptr_t)base + offset); 10580a: 8b 45 18 mov 0x18(%ebp),%eax 10580d: 01 c7 add %eax,%edi while ( count-- ) { 10580f: 83 eb 01 sub $0x1,%ebx 105812: 73 dc jae 1057f0 next = (rtems_rbtree_node *) _Addresses_Add_offset( next, node_size ); } } 105814: 83 c4 1c add $0x1c,%esp 105817: 5b pop %ebx 105818: 5e pop %esi 105819: 5f pop %edi 10581a: 5d pop %ebp 10581b: c3 ret 10581c: 90 nop 10581d: 90 nop 10581e: 90 nop 10581f: 90 nop =============================================================================== 00104a50 : rtems_rbtree_control *the_rbtree, rtems_rbtree_node *the_node, rtems_rbtree_compare compare, bool is_unique ) { 104a50: 55 push %ebp 104a51: 89 e5 mov %esp,%ebp 104a53: 57 push %edi 104a54: 56 push %esi 104a55: 53 push %ebx 104a56: 83 ec 2c sub $0x2c,%esp 104a59: 0f b6 45 14 movzbl 0x14(%ebp),%eax 104a5d: 8b 75 0c mov 0xc(%ebp),%esi 104a60: 8b 7d 10 mov 0x10(%ebp),%edi 104a63: 88 45 e7 mov %al,-0x19(%ebp) rtems_rbtree_node **which = _RBTree_Root_reference( the_rbtree ); rtems_rbtree_node *parent = NULL; while ( *which != NULL ) { 104a66: 8b 45 08 mov 0x8(%ebp),%eax 104a69: 8b 18 mov (%eax),%ebx 104a6b: 85 db test %ebx,%ebx 104a6d: 75 13 jne 104a82 104a6f: eb 67 jmp 104ad8 104a71: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 104a78: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi 104a7f: 90 nop 104a80: 89 c3 mov %eax,%ebx <== NOT EXECUTED rtems_rbtree_compare_result compare_result; parent = *which; compare_result = ( *compare )( the_node, parent ); 104a82: 89 5c 24 04 mov %ebx,0x4(%esp) 104a86: 89 34 24 mov %esi,(%esp) 104a89: ff d7 call *%edi if ( is_unique && rtems_rbtree_is_equal( compare_result ) ) { 104a8b: 85 c0 test %eax,%eax 104a8d: 75 06 jne 104a95 104a8f: 80 7d e7 00 cmpb $0x0,-0x19(%ebp) 104a93: 75 39 jne 104ace return &RB_RIGHT( the_node, Node ); 104a95: 8d 4b 04 lea 0x4(%ebx),%ecx return parent; } if ( rtems_rbtree_is_lesser( compare_result ) ) { 104a98: 85 c0 test %eax,%eax 104a9a: 79 02 jns 104a9e return &RB_LEFT( the_node, Node ); 104a9c: 89 d9 mov %ebx,%ecx while ( *which != NULL ) { 104a9e: 8b 01 mov (%ecx),%eax 104aa0: 85 c0 test %eax,%eax 104aa2: 75 dc jne 104a80 RB_SET( child, parent, Node ); 104aa4: 89 5e 08 mov %ebx,0x8(%esi) } } _RBTree_Initialize_node( the_node ); _RBTree_Add_child( the_node, parent, which ); _RBTree_Insert_color( the_rbtree, the_node ); 104aa7: 8b 45 08 mov 0x8(%ebp),%eax return NULL; 104aaa: 31 db xor %ebx,%ebx 104aac: c7 46 04 00 00 00 00 movl $0x0,0x4(%esi) 104ab3: c7 06 00 00 00 00 movl $0x0,(%esi) 104ab9: c7 46 0c 01 00 00 00 movl $0x1,0xc(%esi) *link = child; 104ac0: 89 31 mov %esi,(%ecx) _RBTree_Insert_color( the_rbtree, the_node ); 104ac2: 89 74 24 04 mov %esi,0x4(%esp) 104ac6: 89 04 24 mov %eax,(%esp) 104ac9: e8 02 1b 00 00 call 1065d0 <_RBTree_Insert_color> } 104ace: 83 c4 2c add $0x2c,%esp 104ad1: 89 d8 mov %ebx,%eax 104ad3: 5b pop %ebx 104ad4: 5e pop %esi 104ad5: 5f pop %edi 104ad6: 5d pop %ebp 104ad7: c3 ret return &RB_ROOT( the_rbtree ); 104ad8: 8b 4d 08 mov 0x8(%ebp),%ecx 104adb: eb c7 jmp 104aa4 104add: 90 nop 104ade: 90 nop 104adf: 90 nop