![]() |
RTEMS 6.3
|
Files | |
| allocatormutex.c | |
| This source file contains the implementation of _RTEMS_Lock_allocator(), _RTEMS_Unlock_allocator(), and _RTEMS_Allocator_is_owner(). | |
| apimutexisowner.c | |
| This source file contains the implementation of _API_Mutex_Is_owner(). | |
| apimutexlock.c | |
| This source file contains the implementation of _API_Mutex_Lock(). | |
| apimutexunlock.c | |
| This source file contains the implementation of _API_Mutex_Unlock(). | |
| chain.c | |
| This source file contains the implementation of _Chain_Initialize(). | |
| chainnodecount.c | |
| This source file contains the implementation of _Chain_Node_count_unprotected(). | |
| condition.c | |
| This source file contains the implementation of _Condition_Wait(), _Condition_Wait_timed(), _Condition_Wait_recursive(), _Condition_Wait_recursive_timed(), _Condition_Wait_recursive_timed_ticks(), _Condition_Signal(), and _Condition_Broadcast(). | |
| configstackspacesize.c | |
| This source file contains the implementation of rtems_configuration_get_stack_space_size(). | |
| corebarrier.c | |
| This source file contains the implementation of _CORE_barrier_Initialize(). | |
| corebarrierwait.c | |
| This source file contains the implementation of _CORE_barrier_Seize(). | |
| coremsg.c | |
| This source file contains the implementation of _CORE_message_queue_Initialize(). | |
| coremsgbroadcast.c | |
| This source file contains the implementation of _CORE_message_queue_Broadcast(). | |
| coremsgclose.c | |
| This source file contains the implementation of _CORE_message_queue_Close(). | |
| coremsgflush.c | |
| This source file contains the implementation of _CORE_message_queue_Flush(). | |
| coremsgflushwait.c | |
| This source file contains the implementation of _CORE_message_queue_Flush_waiting_threads(). | |
| coremsginsert.c | |
| This source file contains the implementation of _CORE_message_queue_Insert_message(). | |
| coremsgseize.c | |
| This source file contains the implementation of _CORE_message_queue_Seize(). | |
| coremsgsubmit.c | |
| This source file contains the implementation of _CORE_message_queue_Submit(). | |
| coremsgwkspace.c | |
| This source file contains the implementation of _CORE_message_queue_Workspace_allocate(). | |
| coremutexseize.c | |
| This source file contains the implementation of _CORE_mutex_Seize_slow(). | |
| corerwlock.c | |
| This source file contains the implementation of _CORE_RWLock_Initialize(). | |
| corerwlockobtainread.c | |
| This source file contains the implementation of _CORE_RWLock_Seize_for_reading(). | |
| corerwlockobtainwrite.c | |
| This source file contains the implementation of _CORE_RWLock_Seize_for_writing(). | |
| corerwlockrelease.c | |
| This source file contains the implementation of _CORE_RWLock_Surrender(). | |
| coresem.c | |
| This source file contains the implementation of _CORE_semaphore_Initialize(). | |
| coretod.c | |
| This source file contains the definition of _TOD and the implementation of _TOD_Lock(), _TOD_Unlock(), and _TOD_Is_owner(). | |
| coretodcheck.c | |
| This source file contains the implementation of _TOD_Is_valid_new_time_of_day(). | |
| coretodhookdata.c | |
| This source file contains the definition of _TOD_Hooks. | |
| coretodhookregister.c | |
| This source file contains the implementation of _TOD_Hook_Register(). | |
| coretodhookrun.c | |
| This source file contains the implementation of _TOD_Hook_Run(). | |
| coretodhookunregister.c | |
| This source file contains the implementation of _TOD_Hook_Unregister(). | |
| coretodset.c | |
| This source file contains the implementation of _TOD_Set(). | |
| debugisthreaddispatchingallowed.c | |
| This source file contains the implementation of _Debug_Is_thread_dispatching_allowed(). | |
| debugunreachable.c | |
| This source file contains the implementation of _Debug_Unreachable(). | |
| exceptionmapping.c | |
| AArch64 machine exception to POSIX signal mapping. | |
| freechain.c | |
| This source file contains the implementation of _Freechain_Extend(), _Freechain_Get(), and _Freechain_Put(). | |
| futex.c | |
| This source file contains the implementation of _Futex_Wait() and _Futex_Wake(). | |
| hash.c | |
| This source file the implementation of _Hash_Finalize(). | |
| heap.c | |
| This source file contains the implementation of _Heap_Initialize() and _Heap_Block_allocate(). | |
| heapallocate.c | |
| This source file contains the implementation of _Heap_Allocate_aligned_with_boundary(). | |
| heapextend.c | |
| This source file contains the implementation of _Heap_Extend(). | |
| heapfree.c | |
| This source file contains the implementation of _Heap_Free(). | |
| heapgetfreeinfo.c | |
| This source file contains the implementation of _Heap_Get_free_information(). | |
| heapgetinfo.c | |
| This source file contains the implementation of _Heap_Get_information(). | |
| heapgreedy.c | |
| This source file contains the implementation of _Heap_Greedy_allocate(), _Heap_Greedy_allocate_all_except_largest(), and _Heap_Greedy_free(). | |
| heapiterate.c | |
| This source file contains the implementation of _Heap_Iterate(). | |
| heapnoextend.c | |
| This source file contains the implementation of _Heap_No_extend(). | |
| heapresizeblock.c | |
| This source file contains the implementation of _Heap_Resize_block(). | |
| heapsizeofuserarea.c | |
| This source file contains the implementation of _Heap_Size_of_alloc_area(). | |
| heapwalk.c | |
| This source file contains the implementation of _Heap_Walk(). | |
| interr.c | |
| This source file contains the definition of ::_System_state_Current and the implementation of _Terminate() and _Internal_error(). | |
| isr.c | |
| This source file contains the definition of ::_ISR_Vector_table and the implementation of _ISR_Handler_initialization(). | |
| isrisinprogress.c | |
| This source file contains the default implementation of _ISR_Is_in_progress(). | |
| isrvectortable.c | |
| This source file contains the definition of ::_ISR_Vector_table. | |
| iterateoverthreads.c | |
| This source file contains the implementation of rtems_iterate_over_all_threads(). | |
| kern_ntptime.c | |
| This source file contains the implementation of ntp_gettime(), ntp_adjtime(), adjtime(), and _Timecounter_NTP_update_second(). | |
| kern_tc.c | |
| This source file contains the definition of _Timecounter, _Timecounter_Time_second, and _Timecounter_Time_uptime and the implementation of _Timecounter_Set_NTP_update_second(), _Timecounter_Binuptime(), _Timecounter_Nanouptime(), _Timecounter_Microuptime(), _Timecounter_Bintime(), _Timecounter_Nanotime(), _Timecounter_Microtime(), _Timecounter_Getbinuptime(), _Timecounter_Getnanouptime(), _Timecounter_Getmicrouptime(), _Timecounter_Getbintime(), _Timecounter_Getnanotime(), _Timecounter_Getmicrotime(), _Timecounter_Getboottime(), _Timecounter_Getboottimebin(), and _Timecounter_Install(). | |
| libatomic.c | |
| This source file contains the implementation of _Libatomic_Protect_start() and _Libatomic_Protect_end(). | |
| log2table.c | |
| This source file contains the definition of _Bitfield_Leading_zeros. | |
| memoryallocate.c | |
| This source file contains the implementation of _Memory_Allocate(). | |
| memorydirtyfreeareas.c | |
| This source file contains the implementation of _Memory_Dirty_free_areas(). | |
| memoryfill.c | |
| This source file contains the implementation of _Memory_Fill(). | |
| memorynoinit.c | |
| This source file contains the definition of _Memory_Noinit_begin and _Memory_Noinit_end. | |
| memoryzerobeforeuse.c | |
| This source file contains the definition of _Memory_Zero_before_use. | |
| memoryzerofreeareas.c | |
| This source file contains the implementation of _Memory_Zero_free_areas(). | |
| mpci.c | |
| This source file contains the definition of ::_System_state_Is_multiprocessing, _MPCI_Semaphore, _MPCI_Remote_blocked_threads, _MPCI_table, _MPCI_Receive_server_tcb, _MPCI_Packet_processors and the implementation of _MPCI_Register_packet_processor(), _MPCI_Get_packet(), _MPCI_Send_process_packet(), _MPCI_Send_request_packet(), _MPCI_Send_response_packet(), _MPCI_Receive_packet(), _MPCI_Process_response(), _MPCI_Receive_server(), _MPCI_Announce(), _MPCI_Internal_packets_Send_process_packet(), _MPCI_Internal_packets_Process_packet(), _MPCI_Internal_packets_Get_packet(), and the MPCI Handler system initialization. | |
| mpcidefault.c | |
| This source file contains a definition of ::_Objects_MP_Controls, ::_Thread_MP_Proxies, and _MPCI_Receive_server_stack for an application configuration with only the local MPCI node and no MP objects. | |
| mutex.c | |
| This source file contains the implementation of _Mutex_Acquire(), _Mutex_Acquire_timed(), _Mutex_Acquire_timed_ticks(), _Mutex_Try_acquire(), _Mutex_Release(), _Mutex_recursive_Acquire(), _Mutex_recursive_Acquire_timed(), _Mutex_recursive_Try_acquire(), and _Mutex_recursive_Release(). | |
| objectactivecount.c | |
| This source file contains the implementation of _Objects_Active_count(). | |
| objectallocate.c | |
| This source file contains the implementation of _Objects_Allocate(). | |
| objectallocatenone.c | |
| This source file contains the implementation of _Objects_Allocate_none(). | |
| objectallocatestatic.c | |
| This source file contains the implementation of _Objects_Allocate_static(). | |
| objectallocateunlimited.c | |
| This source file contains the implementation of _Objects_Allocate_unlimited(). | |
| objectapimaximumclass.c | |
| This source file contains the implementation of _Objects_API_maximum_class(). | |
| objectclose.c | |
| This source file contains the implementation of _Objects_Close(). | |
| objectextendinformation.c | |
| This source file contains the implementation of _Objects_Extend_information(). | |
| objectfree.c | |
| This source file contains the implementation of _Objects_Free_unlimited(). | |
| objectfreenothing.c | |
| This source file contains the implementation of _Objects_Free_nothing(). | |
| objectfreestatic.c | |
| This source file contains the implementation of _Objects_Free_static(). | |
| objectgetinfo.c | |
| This source file contains the implementation of _Objects_Get_information(). | |
| objectgetinfoid.c | |
| This source file contains the implementation of _Objects_Get_information_id(). | |
| objectgetlocal.c | |
| This source file contains the implementation of _Objects_Get(). | |
| objectgetnameasstring.c | |
| This source file contains the implementation of _Objects_Name_to_string() and _Objects_Get_name_as_string(). | |
| objectgetnext.c | |
| This source file contains the implementation of _Objects_Get_next(). | |
| objectgetnoprotection.c | |
| This source file contains the implementation of _Objects_Get_no_protection(). | |
| objectidtoname.c | |
| This source file contains the implementation of _Objects_Id_to_name(). | |
| objectinitializeinformation.c | |
| This source file contains the implementation of _Objects_Initialize_information(). | |
| objectmp.c | |
| This source file contains the definition of _Objects_Local_node, _Objects_Maximum_nodes, _Objects_MP_Maximum_global_objects and the implementation of _Objects_MP_Handler_early_initialization(), _Objects_MP_Handler_initialization(), _Objects_MP_Open(), _Objects_MP_Allocate_and_open(), _Objects_MP_Close(), _Objects_MP_Global_name_search(), _Objects_MP_Is_remote(), _Objects_MP_Allocate_global_object(), and _Objects_MP_Free_global_object(). | |
| objectnamespaceremove.c | |
| This source file contains the implementation of _Objects_Namespace_remove_string(). | |
| objectnametoid.c | |
| This source file contains the implementation of _Objects_Name_to_id_u32(). | |
| objectnametoidstring.c | |
| This source file contains the implementation of _Objects_Get_by_name(). | |
| objectsetname.c | |
| This source file contains the implementation of _Objects_Set_name(). | |
| objectshrinkinformation.c | |
| This source file contains the implementation of _Objects_Free_objects_block() and _Objects_Shrink_information(). | |
| once.c | |
| This source file contains the implementation of _Once(), _Once_Lock(), and _Once_Unlock(). | |
| opt_compat.h | |
| This header file is provided for FreeBSD compatibility. | |
| opt_ffclock.h | |
| This header file is provided for FreeBSD compatibility. | |
| opt_ntp.h | |
| This header file is provided for FreeBSD compatibility. | |
| percpu.c | |
| This source file contains the uniprocessor definition of _Per_CPU_Information and some static assertions. | |
| percpuasm.c | |
| This source file contains the static assertions for defines used in assembler files. | |
| percpudata.c | |
| This source file contains the per-CPU data linker set and its system initialization handler. | |
| percpujobs.c | |
| This source file contains the implementation of _Per_CPU_Add_job(), _Per_CPU_Perform_jobs(), _Per_CPU_Submit_job(), and _Per_CPU_Wait_for_job(). | |
| pheapallocate.c | |
| This source file contains the implementation of _Protected_heap_Allocate_aligned_with_boundary(). | |
| pheapextend.c | |
| This source file contains the implementation of _Protected_heap_Extend(). | |
| pheapfree.c | |
| This source file contains the implementation of _Protected_heap_Free(). | |
| pheapgetfreeinfo.c | |
| This source file contains the implementation of _Protected_heap_Get_free_information(). | |
| pheapgetinfo.c | |
| This source file contains the implementation of _Protected_heap_Get_information(). | |
| pheapgetsize.c | |
| This source file contains the implementation of _Protected_heap_Get_size(). | |
| pheapwalk.c | |
| This source file contains the implementation of _Protected_heap_Walk(). | |
| processormaskcopy.c | |
| This source file contains the definition of ::_Processor_mask_The_one_and_only and the implementation of _Processor_mask_Copy(). | |
| profilingisrentryexit.c | |
| This source file contains the implementation of _Profiling_Outer_most_interrupt_entry_and_exit(). | |
| profilingsmplock.c | |
| This source file contains the implementation of _SMP_lock_Stats_destroy(), _SMP_lock_Stats_register_or_max_section_time(), _SMP_lock_Stats_iteration_start(), _SMP_lock_Stats_iteration_next(), and _SMP_lock_Stats_iteration_stop(). | |
| rbtreeappend.c | |
| This source file contains the implementation of _RBTree_Append(). | |
| rbtreeextract.c | |
| This source file contains the implementation of _RBTree_Extract(). | |
| rbtreeinsert.c | |
| This source file contains the implementation of _RBTree_Insert_color(). | |
| rbtreeiterate.c | |
| This source file contains the implementation of _RBTree_Iterate(). | |
| rbtreemax.c | |
| This source file contains the implementation of _RBTree_Maximum(). | |
| rbtreemin.c | |
| This source file contains the implementation of _RBTree_Minimum(). | |
| rbtreenext.c | |
| This source file contains the implementation of _RBTree_Minimum(), _RBTree_Maximum(), _RBTree_Successor(), and _RBTree_Predecessor(). | |
| rbtreepostorder.c | |
| This source file contains the implementation of _RBTree_Postorder_next() and _RBTree_Postorder_first(). | |
| rbtreeprepend.c | |
| This source file contains the implementation of _RBTree_Prepend(). | |
| rbtreeprev.c | |
| This source file contains the implementation of _RBTree_Predecessor(). | |
| rbtreereplace.c | |
| This source file contains the implementation of _RBTree_Replace_node(). | |
| sched.c | |
| This source file contains the implementation of _Sched_Count(), _Sched_Index(), _Sched_Name_to_index(), and _Sched_Processor_count(). | |
| scheduler.c | |
| This source file contains the implementation of _Scheduler_Handler_initialization(). | |
| schedulercbs.c | |
| This source file contains the implementation of _Scheduler_CBS_Budget_callout() and _Scheduler_CBS_Initialize(). | |
| schedulercbsattachthread.c | |
| This source file contains the implementation of _Scheduler_CBS_Attach_thread(). | |
| schedulercbscleanup.c | |
| This source file contains the implementation of _Scheduler_CBS_Cleanup(). | |
| schedulercbscreateserver.c | |
| This source file contains the implementation of _Scheduler_CBS_Create_server(). | |
| schedulercbsdestroyserver.c | |
| This source file contains the implementation of _Scheduler_CBS_Destroy_server(). | |
| schedulercbsdetachthread.c | |
| This source file contains the implementation of _Scheduler_CBS_Detach_thread(). | |
| schedulercbsgetapprovedbudget.c | |
| This source file contains the implementation of _Scheduler_CBS_Get_approved_budget(). | |
| schedulercbsgetexecutiontime.c | |
| This source file contains the implementation of _Scheduler_CBS_Get_execution_time(). | |
| schedulercbsgetparameters.c | |
| This source file contains the implementation of _Scheduler_CBS_Get_parameters(). | |
| schedulercbsgetremainingbudget.c | |
| This source file contains the implementation of _Scheduler_CBS_Get_remaining_budget(). | |
| schedulercbsgetserverid.c | |
| This source file contains the implementation of _Scheduler_CBS_Get_server_id(). | |
| schedulercbsnodeinit.c | |
| This source file contains the implementation of _Scheduler_CBS_Node_initialize(). | |
| schedulercbsreleasejob.c | |
| This source file contains the implementation of _Scheduler_CBS_Release_job(). | |
| schedulercbssetparameters.c | |
| This source file contains the implementation of _Scheduler_CBS_Set_parameters(). | |
| schedulercbsunblock.c | |
| This source file contains the implementation of _Scheduler_CBS_Unblock(). | |
| schedulerdefaultmakecleansticky.c | |
| This source file contains the implementation of _Scheduler_default_Sticky_do_nothing(). | |
| schedulerdefaultmappriority.c | |
| This source file contains the implementation of _Scheduler_default_Map_priority() and _Scheduler_default_Unmap_priority(). | |
| schedulerdefaultnodedestroy.c | |
| This source file contains the implementation of _Scheduler_default_Node_destroy(). | |
| schedulerdefaultnodeinit.c | |
| This source file contains the implementation of _Scheduler_default_Node_initialize(). | |
| schedulerdefaultpinunpin.c | |
| This source file contains the implementation of _Scheduler_default_Pin_or_unpin_not_supported(). | |
| schedulerdefaultpinunpindonothing.c | |
| This source file contains the implementation of _Scheduler_default_Pin_or_unpin_do_nothing(). | |
| schedulerdefaultreleasejob.c | |
| This source file contains the implementation of _Scheduler_default_Release_job() and _Scheduler_default_Cancel_job(). | |
| schedulerdefaultschedule.c | |
| This source file contains the implementation of _Scheduler_default_Schedule(). | |
| schedulerdefaultsetaffinity.c | |
| This source file contains the implementation of _Scheduler_default_Set_affinity(). | |
| schedulerdefaultstartidle.c | |
| This source file contains the implementation of _Scheduler_default_Start_idle(). | |
| scheduleredf.c | |
| This source file contains the implementation of _Scheduler_EDF_Initialize(). | |
| scheduleredfblock.c | |
| This source file contains the implementation of _Scheduler_EDF_Block(). | |
| scheduleredfchangepriority.c | |
| This source file contains the implementation of _Scheduler_EDF_Update_priority(). | |
| scheduleredfnodeinit.c | |
| This source file contains the implementation of _Scheduler_EDF_Node_initialize(). | |
| scheduleredfreleasejob.c | |
| This source file contains the implementation of _Scheduler_EDF_Map_priority(), _Scheduler_EDF_Unmap_priority(), _Scheduler_EDF_Release_job(), and _Scheduler_EDF_Cancel_job(). | |
| scheduleredfschedule.c | |
| This source file contains the implementation of _Scheduler_EDF_Schedule(). | |
| scheduleredfsmp.c | |
| This source file contains the implementation of _Scheduler_EDF_SMP_Add_processor(), _Scheduler_EDF_SMP_Ask_for_help(), _Scheduler_EDF_SMP_Block(), _Scheduler_EDF_SMP_Initialize(), _Scheduler_EDF_SMP_Node_initialize(), _Scheduler_EDF_SMP_Pin(), _Scheduler_EDF_SMP_Reconsider_help_request(), _Scheduler_EDF_SMP_Remove_processor(), _Scheduler_EDF_SMP_Set_affinity(), _Scheduler_EDF_SMP_Start_idle(), _Scheduler_EDF_SMP_Unblock(), _Scheduler_EDF_SMP_Unpin(), _Scheduler_EDF_SMP_Update_priority(), _Scheduler_EDF_SMP_Withdraw_node(), _Scheduler_EDF_SMP_Make_sticky(), _Scheduler_EDF_SMP_Clean_sticky(), and _Scheduler_EDF_SMP_Yield(). | |
| scheduleredfunblock.c | |
| This source file contains the implementation of _Scheduler_EDF_Unblock(). | |
| scheduleredfyield.c | |
| This source file contains the implementation of _Scheduler_EDF_Yield(). | |
| schedulergetaffinity.c | |
| This source file contains the implementation of _Scheduler_Get_affinity(). | |
| schedulerpriority.c | |
| This source file contains the implementation of _Scheduler_priority_Initialize() and _Scheduler_priority_Node_initialize(). | |
| schedulerpriorityaffinitysmp.c | |
| This source file contains the implementation of _Scheduler_priority_affinity_SMP_Add_processor(), _Scheduler_priority_affinity_SMP_Ask_for_help(), _Scheduler_priority_affinity_SMP_Block(), _Scheduler_priority_affinity_SMP_Node_initialize(), _Scheduler_priority_affinity_SMP_Reconsider_help_request(), _Scheduler_priority_affinity_SMP_Remove_processor(), _Scheduler_priority_affinity_SMP_Set_affinity(), _Scheduler_priority_affinity_SMP_Unblock(), _Scheduler_priority_affinity_SMP_Update_priority(), _Scheduler_priority_affinity_SMP_Withdraw_node(), _Scheduler_priority_affinity_SMP_Make_sticky(), and _Scheduler_priority_affinity_SMP_Clean_sticky(). | |
| schedulerpriorityblock.c | |
| This source file contains the implementation of _Scheduler_priority_Block(). | |
| schedulerprioritychangepriority.c | |
| This source file contains the implementation of _Scheduler_priority_Update_priority(). | |
| schedulerpriorityschedule.c | |
| This source file contains the implementation of _Scheduler_priority_Schedule(). | |
| schedulerprioritysmp.c | |
| This source file contains the implementation of _Scheduler_priority_SMP_Add_processor(), _Scheduler_priority_SMP_Ask_for_help(), _Scheduler_priority_SMP_Block(), _Scheduler_priority_SMP_Initialize(), _Scheduler_priority_SMP_Node_initialize(), _Scheduler_priority_SMP_Reconsider_help_request(), _Scheduler_priority_SMP_Remove_processor(), _Scheduler_priority_SMP_Unblock(), _Scheduler_priority_SMP_Update_priority(), _Scheduler_priority_SMP_Withdraw_node(), _Scheduler_priority_SMP_Make_sticky(), _Scheduler_priority_SMP_Clean_sticky(), and _Scheduler_priority_SMP_Yield(). | |
| schedulerpriorityunblock.c | |
| This source file contains the implementation of _Scheduler_priority_Unblock(). | |
| schedulerpriorityyield.c | |
| This source file contains the implementation of _Scheduler_priority_Yield(). | |
| schedulersetaffinity.c | |
| This source file contains the implementation of _Scheduler_Set_affinity(). | |
| schedulersimple.c | |
| This source file contains the implementation of _Scheduler_simple_Initialize(). | |
| schedulersimpleblock.c | |
| This source file contains the implementation of _Scheduler_simple_Block(). | |
| schedulersimplechangepriority.c | |
| This source file contains the implementation of _Scheduler_simple_Update_priority(). | |
| schedulersimpleschedule.c | |
| This source file contains the implementation of _Scheduler_simple_Schedule(). | |
| schedulersimplesmp.c | |
| This source file contains the implementation of _Scheduler_simple_SMP_Add_processor(), _Scheduler_simple_SMP_Ask_for_help(), _Scheduler_simple_SMP_Block(), _Scheduler_simple_SMP_Initialize(), _Scheduler_simple_SMP_Node_initialize(), _Scheduler_simple_SMP_Reconsider_help_request(), _Scheduler_simple_SMP_Remove_processor(), _Scheduler_simple_SMP_Unblock(), _Scheduler_simple_SMP_Update_priority(), _Scheduler_simple_SMP_Withdraw_node(), _Scheduler_simple_SMP_Make_sticky(), _Scheduler_simple_SMP_Clean_sticky(), and _Scheduler_simple_SMP_Yield(). | |
| schedulersimpleunblock.c | |
| This source file contains the implementation of _Scheduler_simple_Unblock(). | |
| schedulersimpleyield.c | |
| This source file contains the implementation of _Scheduler_simple_Yield(). | |
| schedulersmp.c | |
| This source file contains the implementation of _Scheduler_Request_ask_for_help(). | |
| schedulersmpstartidle.c | |
| This source file contains the implementation of _Scheduler_SMP_Start_idle(). | |
| schedulerstrongapa.c | |
| This source file contains the implementation of _Scheduler_strong_APA_Add_processor(), _Scheduler_strong_APA_Allocate_processor(), _Scheduler_strong_APA_Ask_for_help(), _Scheduler_strong_APA_Block(), _Scheduler_strong_APA_Do_ask_for_help(), _Scheduler_strong_APA_Do_enqueue(), _Scheduler_strong_APA_Do_set_affinity(), _Scheduler_strong_APA_Do_update(), _Scheduler_strong_APA_Enqueue(), _Scheduler_strong_APA_Enqueue_scheduled(), _Scheduler_strong_APA_Extract_from_ready(), _Scheduler_strong_APA_Extract_from_scheduled(), _Scheduler_strong_APA_Find_highest_ready(), _Scheduler_strong_APA_Get_highest_ready(), _Scheduler_strong_APA_Get_lowest_reachable(), _Scheduler_strong_APA_Get_lowest_scheduled(), _Scheduler_strong_APA_Has_ready(), _Scheduler_strong_APA_Initialize(), _Scheduler_strong_APA_Insert_ready(), _Scheduler_strong_APA_Move_from_ready_to_scheduled(), _Scheduler_strong_APA_Move_from_scheduled_to_ready(), _Scheduler_strong_APA_Node_initialize(), _Scheduler_strong_APA_Reconsider_help_request(), _Scheduler_strong_APA_Register_idle(), _Scheduler_strong_APA_Remove_processor(), _Scheduler_strong_APA_Set_affinity(), _Scheduler_strong_APA_Set_scheduled(), _Scheduler_strong_APA_Start_idle(), _Scheduler_strong_APA_Unblock(), _Scheduler_strong_APA_Update_priority(), _Scheduler_strong_APA_Withdraw_node(), _Scheduler_strong_APA_Make_sticky(), _Scheduler_strong_APA_Clean_sticky(), and _Scheduler_strong_APA_Yield(). | |
| semaphore.c | |
| This source file contains the implementation of _Semaphore_Wait(), _Semaphore_Wait_timed_ticks(), _Semaphore_Try_wait(), _Semaphore_Post(), and _Semaphore_Post_binary(). | |
| smp.c | |
| This source file contains the definition of ::_SMP_Online_processors and ::_SMP_Processor_maximum and the implementation of _SMP_Handler_initialize(), _SMP_Process_message(), _SMP_Request_shutdown(), _SMP_Request_start_multitasking(), _SMP_Send_message(), _SMP_Should_start_processor(), _SMP_Start_multitasking_on_secondary_processor(), and _SMP_Try_to_process_message(). | |
| smpbarrierwait.c | |
| This source file contains the implementation of _SMP_barrier_Wait(). | |
| smpbroadcastaction.c | |
| This source file contains the implementation of _SMP_Broadcast_action(). | |
| smplock.c | |
| This source file contains the implementation of _SMP_lock_Initialize(), _SMP_lock_Destroy(), _SMP_lock_Acquire(), _SMP_lock_Release(), _SMP_lock_ISR_disable_and_acquire(), _SMP_lock_Release_and_ISR_enable(), and _SMP_lock_Is_owner(). | |
| smpmulticastaction.c | |
| This source file contains the implementation of _SMP_Multicast_action(). | |
| smpothercastaction.c | |
| This source file contains the implementation of _SMP_Othercast_action(). | |
| smpsynchronize.c | |
| This source file contains the implementation of _SMP_Synchronize(). | |
| smpunicastaction.c | |
| This source file contains the implementation of _SMP_Unicast_action(). | |
| stackallocator.c | |
| This source file contains a definition of _Stack_Allocator_avoids_workspace and _Stack_Allocator_allocate which allocates the thread stacks from the RTEMS Workspace. | |
| stackallocatorforidle.c | |
| This source file contains the implementation of _Stack_Allocator_allocate_for_idle_static(). | |
| stackallocatorforidlewkspace.c | |
| This source file contains the implementation of _Stack_Allocator_allocate_for_idle_workspace(). | |
| stackallocatorfree.c | |
| This source file contains a definition of _Stack_Allocator_free which frees the thread stacks to the RTEMS Workspace. | |
| stackallocatorinit.c | |
| This source file contains the implementation of _Stack_Allocator_do_initialize(). | |
| thread.c | |
| This source file contains static assertions related to the Thread Handler and the implementation of _Thread_Initialize_information() and _Thread_Handler_initialization(). | |
| threadallocateunlimited.c | |
| This source file contains the implementation of _Thread_Extend_information(). | |
| threadchangepriority.c | |
| This source file contains the implementation of _Thread_Priority_add(), _Thread_Priority_and_sticky_update(), _Thread_Priority_changed(), _Thread_Priority_perform_actions(), _Thread_Priority_remove(), _Thread_Priority_replace(), and _Thread_Priority_update(). | |
| threadclearstate.c | |
| This source file contains the implementation of _Thread_Clear_state_locked() and _Thread_Clear_state(). | |
| threadcreateidle.c | |
| This source file contains the implementation of _Thread_Create_idle(). | |
| threaddispatch.c | |
| This source file contains the definition of _Thread_Allocated_fp and _User_extensions_Switches_list and the implementation of _Thread_Dispatch_direct(), _Thread_Dispatch_enable(), and _Thread_Do_dispatch(). | |
| threadentryadaptoridle.c | |
| This source file contains the implementation of _Thread_Entry_adaptor_idle(). | |
| threadentryadaptornumeric.c | |
| This source file contains the implementation of _Thread_Entry_adaptor_numeric(). | |
| threadentryadaptorpointer.c | |
| This source file contains the implementation of _Thread_Entry_adaptor_pointer(). | |
| threadexhausttimeslice.c | |
| This source file contains the definition of _Thread_CPU_budget_exhaust_timeslice and the implementation of _Thread_CPU_budget_do_nothing(). | |
| threadget.c | |
| This source file contains the implementation of _Thread_Get(). | |
| threadgetcputimeused.c | |
| This source file contains the implementation of _Thread_Get_CPU_time_used() and _Thread_Get_CPU_time_used_locked(). | |
| threadgetcputimeusedafterreset.c | |
| This source file contains the implementation of _Thread_Get_CPU_time_used_after_last_reset(). | |
| threadhandler.c | |
| This source file contains the definition of _Thread_Global_constructor and the implementation of _Thread_Handler(). | |
| threadidledefault.c | |
| This source file contains the default definition of _Thread_Idle_body. | |
| threadinitialize.c | |
| This source file contains the implementation of _Thread_Initialize(). | |
| threaditerate.c | |
| This source file contains the implementation of _Thread_Iterate(). | |
| threadloadenv.c | |
| This source file contains the implementation of _Thread_Load_environment(). | |
| threadmp.c | |
| This source file contains the implementation of _Thread_MP_Handler_initialization(), _Thread_MP_Allocate_proxy(), _Thread_MP_Find_proxy(), _Thread_MP_Free_proxy(). | |
| threadname.c | |
| This source file contains the implementation of _Thread_Set_name() and _Thread_Get_name(). | |
| threadplaindispatch.c | |
| This source file contains the implementation of _Thread_Dispatch(). | |
| threadq.c | |
| This source file contains static assertions related to the Thread Queue Handler, the definition of _Thread_queue_Object_name, and the implementation of _Thread_queue_Acquire(), _Thread_queue_Do_acquire_critical(), _Thread_queue_Initialize(), _Thread_queue_MP_callout_do_nothing(), _Thread_queue_Object_initialize(), _Thread_queue_Queue_get_name_and_id(), _Thread_queue_Release(), and _Thread_queue_Release_critical(). | |
| threadqenqueue.c | |
| This source file contains the implementation of _Thread_queue_Deadlock_fatal(), _Thread_queue_Deadlock_status(), _Thread_queue_Do_dequeue(), _Thread_queue_Enqueue(), _Thread_queue_Enqueue_do_nothing_extra(), _Thread_queue_Enqueue_sticky(), _Thread_queue_Extract_locked(), _Thread_queue_Path_acquire(), _Thread_queue_Path_release(), _Thread_queue_Resume(),_Thread_queue_Surrender(), _Thread_queue_Surrender_no_priority(), _Thread_queue_Surrender_sticky(). | |
| threadqextract.c | |
| This source file contains the implementation of _Thread_queue_Extract(). | |
| threadqextractwithproxy.c | |
| This source file contains the implementation of _Thread_MP_Extract_proxy(). | |
| threadqfirst.c | |
| This source file contains the implementation of _Thread_queue_First(). | |
| threadqflush.c | |
| This source file contains the implementation of _Thread_queue_Flush_default_filter(), _Thread_queue_Flush_status_object_was_deleted(), _Thread_queue_Flush_status_unavailable(), and _Thread_queue_Flush_critical(). | |
| threadqgetnameandid.c | |
| This source file contains the implementation of _Thread_queue_Queue_get_name_and_id(). | |
| threadqops.c | |
| This source file contains the definition of _Thread_queue_Operations_default, _Thread_queue_Operations_FIFO, _Thread_queue_Operations_priority, and _Thread_queue_Operations_priority_inherit. | |
| threadqtimeout.c | |
| This source file contains the implementation of _Thread_queue_Add_timeout_ticks(), _Thread_queue_Add_timeout_timespec(), _Thread_queue_Add_timeout_monotonic_timespec(), and _Thread_queue_Add_timeout_realtime_timespec(). | |
| threadresettimeslice.c | |
| This source file contains the definition of _Thread_CPU_budget_reset_timeslice and the implementation of _Thread_CPU_budget_consume_and_yield() and _Thread_CPU_budget_set_to_ticks_per_timeslice(). | |
| threadrestart.c | |
| This source file contains the implementation of _Thread_Cancel(), _Thread_Change_life(), _Thread_Close(), _Thread_Exit(), _Thread_Join(), _Thread_Kill_zombies(), _Thread_Restart(), and _Thread_Set_life_protection(). | |
| threadscheduler.c | |
| This source file contains the implementation of _Thread_Scheduler_process_requests(). | |
| threadselfid.c | |
| This source file contains the implementation of _Thread_Self_id(). | |
| threadsetstate.c | |
| This source file contains the implementation of _Thread_Set_state_locked() and _Thread_Set_state. | |
| threadstackallocate.c | |
| This source file contains the implementation of _Stack_Allocate(). | |
| threadstackfree.c | |
| This source file contains the implementation of _Stack_Free(). | |
| threadstart.c | |
| This source file contains the implementation of _Thread_Start(). | |
| threadstartmultitasking.c | |
| This source file contains the implementation of _Thread_Start_multitasking(). | |
| threadtimeout.c | |
| This source file contains the implementation of _Thread_Continue() and _Thread_Timeout(). | |
| threadunpin.c | |
| This source file contains the implementation of _Thread_Do_unpin(). | |
| threadwaitgetid.c | |
| This source file contains the implementation of _Thread_Wait_get_id(). | |
| threadyield.c | |
| This source file contains the implementation of _Thread_Yield(). | |
| timespecaddto.c | |
| This source file contains the implementation of _Timespec_Add_to(). | |
| timespecdivide.c | |
| This source file contains the implementation of _Timespec_Divide(). | |
| timespecdividebyinteger.c | |
| This source file contains the implementation of _Timespec_Divide_by_integer(). | |
| timespecfromticks.c | |
| This source file contains the implementation of _Timespec_From_ticks(). | |
| timespecgetasnanoseconds.c | |
| This source file contains the implementation of _Timespec_Get_as_nanoseconds(). | |
| timespecisnonnegative.c | |
| This source file contains the implementation of _Timespec_Is_non_negative(). | |
| timespecisvalid.c | |
| This source file contains the implementation of _Timespec_Is_valid(). | |
| timespeclessthan.c | |
| This source file contains the implementation of _Timespec_Less_than(). | |
| timespecsubtract.c | |
| This source file contains the implementation of _Timespec_Subtract(). | |
| timespectoticks.c | |
| This source file contains the implementation of _Timespec_To_ticks(). | |
| tlsallocsize.c | |
| This source file contains the implementation of _TLS_Get_allocation_size(). | |
| userext.c | |
| This source file contains the implementation of _User_extensions_Handler_initialization(). | |
| userextaddset.c | |
| This source file contains the implementation of _User_extensions_Add_set(). | |
| userextiterate.c | |
| This source file contains the definition of _User_extensions_List and the implementation of _User_extensions_Fatal_visitor(), _User_extensions_Iterate(), _User_extensions_Thread_begin_visitor(), _User_extensions_Thread_create_visitor(), _User_extensions_Thread_delete_visitor(), _User_extensions_Thread_exitted_visitor(), _User_extensions_Thread_restart_visitor(), _User_extensions_Thread_start_visitor(), and _User_extensions_Thread_terminate_visitor(). | |
| userextremoveset.c | |
| This source file contains the implementation of _User_extensions_Remove_set(). | |
| watchdoginsert.c | |
| This source file contains the implementation of _Watchdog_Insert(). | |
| watchdogremove.c | |
| This source file contains the implementation of _Watchdog_Remove(). | |
| watchdogtick.c | |
| This source file contains the implementation of _Watchdog_Do_tickle() and _Watchdog_Tick(). | |
| watchdogtickssinceboot.c | |
| This source file contains the definition of _Watchdog_Ticks_since_boot. | |
| watchdogtimeslicedefault.c | |
| This source file contains the default definition of _Watchdog_Ticks_per_timeslice. | |
| wkspace.c | |
| This source file contains the definition of _Workspace_Area and the Workspace Handler system initialization. | |
| wkspaceallocate.c | |
| This source file contains the implementation of _Workspace_Allocate(). | |
| wkspacefree.c | |
| This source file contains the implementation of _Workspace_Free(). | |
| wkspaceisunifieddefault.c | |
| This source file contains the default definition of _Workspace_Is_unified. | |
| wkspacemallocinitdefault.c | |
| This source file contains the default definition of _Workspace_Malloc_initializer. | |
| wkspacemallocinitunified.c | |
| This source file contains the implementation of _Workspace_Malloc_initialize_unified(). | |
| wkstringduplicate.c | |
| This source file contains the implementation of _Workspace_String_duplicate(). | |
This document explains how the unlimited objects support works. This was written by Chris Johns ccj@a.nosp@m.cm.o.nosp@m.rg of Objective Design Systems as a design document. This was submitted as part of the patch which added this capability.
This patch changes the way RTEMS allocates, frees, and manages the 'Objects_Control' structure.
The 'Objects_Control' structure is at the root of all objects in RTEMS. The RTEMS and POSIX API allows users to create tasks, message queues, semaphores and other resources. These are all a type of Object. The POSIX API allow similar operations. These also map to Objects.
Currently the number of objects that can be created is a static value loaded into the Configuration table before starting the kernel. The application cannot exceed these limits. Various means are used to tune this value. During development the value is usually set large. This saves having to change it everytime a developer adds a new resource. With a large team of developers the configuration table file can cycle through a large number of revisions. The wasted memory is only recovered when memory runs short. The issue of the configuration table parameters become more important the less memory you have.
The Configuration table requires a calculation to occur at compile time to set the size of the Workspace. The calculation is an estimate. You need to specify an overhead value for memory that can not be calculated. An example of memory that cannot be calculated is stack sizes. This issue is not directly related to allowing unlimited objects how-ever the need to calculate the memory usage for a system in this manner is prone to error.
I would like to see download support added to RTEMS. The kernel configuration being set at boot time means a download application can be limited. This can defeat one of the purposes of using downloaded code, no need to change ROMs. In a system I worked on the cost to change ROMS in a complete system was high and could take a week. This change is the first phase of supporting downloaded applications.
1.1 How do Objects work ?
All applications interact with the super core (c/src/exec/score) via an API. The central structure used in the super core is the `object'. Two application interfaces exist. They are RTEMS and POSIX. Both map to the super core using objects.
An object in RTEMS is a resource which the user (through the API) creates. The different types of objects are referred to as classes of objects. An object is referenced by an id. This is of type `rtems_id' and is a 32bit unsigned integer. The id is unique for each object no matter what class.
Objects are anchored by the _Object_Information' structure. There is one per type or class of object. A global table of pointers to each information structure for a class of objects is held in Objects_Information_table'.
Objects consist of 6 main structures. The _Object_Information' is the root structure. It contains pointers to the local_table', name_table', global_table', the Inactive chain, and the object memory. It also contains the various variables which describe the object. We are only concerned with the local_table', name_table', Inactive chain, and the object memory to support unlimited objects.
The local_table' holds the pointers to open objects. A local_table entry which is null is free and the object will be sitting on the Inactive chain. The index into the table is based on part of the id. Given an id the you can find the index into the local_table', and therefore the object. The local_table' has the entries for the indexes below the minimum_id's index. The minimum_id is always set to 1 (the change allows another value to be selected if require). The index of 0 is reserved and never used. This allows any actions using an id of zero to fail or map to a special case.
The `name_table' holds the names of the objects. Each entry in this table is the maximum size the name of the object can be. The size of names is not constrained by the object code (but is by the MP object code, and the API and should be fixed).
The `global_table' and code that uses it has not changed. I did not look at the this code, and I am not farmilar with it.
The Inactive chain stores objects which are free or not allocated. This design saves searching for a free object when allocating therefore providing a deterministic allocation scheme. When the chain is empty a null is returned.
The change documented below basically extends the local_table' and name_table' structures at run-time. The memory used be these table is not large compared to the memory for the objects, and so are never reduced in size once extended. The object's memory grows and shrinks depending of the user's usage.
Currently, the user specifies the total number of objects in the Configuration table. The change alters the function of the values in the Configuration table. A flag can be masked on to the value which selects the extending mode. If the user does not set the flag the object code operates with an object ceiling. A small performance overhead will be incurred as the allocate and free routines are now not inlined and a check of the auto_extend flag is made. The remaining value field of the Configuration table entry is total number of objects that can be allocated when not in unlimited mode.
If the user masks the flag on to a value on the Configuration table auto-exdending mode is selected for that class of object. The value becomes the allocation unit size. If there are no free objects the object's tables are extended by the allocation unit number of objects. The object table is shrunk when the user frees objects. The table must have one free allocation block, and at least half the allocation size of another block before the object memory of the free allocation block is returned to the heap. This stops threshold thrashing when objects around the allocation unit size and created and destroyed.
At least one allocation block size of objects is created and never destroyed.
The change to support unlimited objects has extended the object information structure.
The flag, auto_extend' controls if the object CAN be automatically extended. The user masks the flag RTEMS_UNLIMITED_FLAGS onto the Configuration table number to select the auto-extend mode. This is passed to the _Objects_Initialize_information' function in the parameter maximum. The flag is tested for and the auto_extend flag updated to reflect the state of the flag before being stipped from the maximum.
The allocation_size' is set to the parameter maxium in the function _Objects_Initialize_information' if `auto_extend' is true. Making the allocation size small causes the memory to be allocated and freed more often. This only effects the performance times for creating a resource such as a task. It does how-ever give you fine grain memory control. If the performance of creating resources is not a problem make the size small.
The size of the object is required to be stored. It is used when extending the object information.
A count of the object on the Inactive list is maintained. This is used during freeing objects. If the count is above 1.5 times the `allocation_size' an attempt is made to shrink the object informtation. Shrinking might not always succeed as a single allocation block might not be free. Random freeing of objects can result in some fragmentation. Any further allocations will use the free objects before extending the object's information tables.
A table of inactive objects per block is maintained. This table, like the local_table' and name_table' grows as more blocks are allocated. A check is made of a blocks inactive count when an object which is part of that block is freed. If the total inactive count exceeds 1.5 times the allocation size, and the block's inactive count is the allocation_size, the objects data block is returnd to the workspace heap.
The `objects_blocks' is a table of pointers. The object_block's pointers point to the object's data block. The object's data block is a single allocation of the name space and object space. This was two separate allocations but is now one. The objects_block's table is use to determine if a block is allocated, and the address of the memory block to be returned to the workspace heap when the object informtation space is shrunk.
2.0 Detail Of the Auto-Extend Patch to rtems-4.0.0, Snapshot 19990302
o Configuration table support.
Added a flag OBJECTS_UNLIMITED_OBJECTS to score/headers/object.h header file. This is referenced in the file sapi/headers/config.h to create the flag RTEMS_UNLIMITED_OBJECTS. A macro is provided to take a resource count and apply the flag. The macro is called `rtems_resource_unlimited'. The user uses this macro when building a configuration table. It can be used with the condefs.h header file.
o Object Information Structure
The object information structure, Objects_Information, has been extended with the follow fields :
boolean auto_extend -
When true the object's information tables can be extended untill all memory is used. When false the current functionallity is maintained.
uint32_t allocation_size -
When auto_extend is true, it is the value in the Configuration table and is the number of objects the object's information tables are extended or shrunk.
uint32_t size -
The size of the object. It is used to calculate the size of memory required to be allocated when extending the table.
uint32_t inactive -
The number of elements on the Inactive chain.
uint32_t *inactive_per_block -
Pointer to a table of counts of the inactive objects from a block on the Inactive chain. It is used to know which blocks are all free and therefore can be returned to the heap.
void **object_blocks -
Pointer to a table of pointers to the object data. The table holds the pointer used to return a block to the heap when shrinking the object's information tables.
o Changes to Existing Object Functions
Two functions prototypes are added. They are :
_Objects_Extend_information, _Objects_Shrink_information _Object_Allocate, and _Object_Free
The last were inlined, how-ever now they are not as they are too complex to implement as macros now.
o Object Initialisation
The function _Objects_Initialize_information has been changed to initialisation of the information structure's fields then call the new function _Objects_Extend_information.
The first block of objects is always allocated and never released. This means with the auto-extend flag set to true the user still sees the same behaviour expected without this change. That is the number objects specified in the Configuration table is the number of object allocated during RTEMS initialisation. If not enough memory is found during this initial extend a fatal error occurs. The fatal error only occurs for this case of extending the object's information tables.
o Object Information Extend
The _Object_Information_Extend is a new function. It takes some of the code form the old _Object_Initialize_information function. The function extends an object's information base.
Extending the first time is a special case. The function assumes the maximum index will be less than the minimum index. This means the minimum index must be greater than 0 at initialisation. The other special case made is coping the tables from the old location to the new location. The first block case is trapped and tables are initialised instead. Workspace allocation for the first block is tested for an if the first block the allocate or fatal error call is made. This traps an RTEMS initialise allocation error.
The remainder of the code deals with all cases of extending the object's information.
The current block count is first determined, then a scan of the object_block table is made to locate a free slot. Blocks can be freed in any order. The index base for the block is also determined.
If the index base is greater than the maximum index, the tables must grow. To grow the tables, a new larger memory block is allocated and the tables copied. The object's information structure is then updated to point to the new tables. The tables are allocated in one memory block from the work-space heap. The single block is then broken down in the required tables.
Once the tables are copied, and the new extended parts initialised the table pointers in the object's information structure are updated. This is protected by masking interrupts.
The old table's memory block is returned to the heap.
The names table and object is allocated. This again is a single block which is divided.
The objects are initialised onto a local Inactive chain. They are then copied to the object's Inactive chain to complete the initialisation.
o Object Informtation Shrink
The _Object_Shrink_information function is new. It is required to scan all the blocks to see which one has no objects allocated. The last object freed might not belong to a block which is completely free.
Once a block is located, the Inactive chain is interated down looking for objects which belong to the block of object being released.
Once the Inactive chain scan is complete the names table and object memory is returned to the work-space heap and the table references cleared.
XXX - I am not sure if this should occur if better protection or different code to provide better protection.
The information tables do not change size. Once extended they never shrink.
o Object Allocation
The _Objects_Allocate attempts to get an object from the Inactive chain. If auto-extend mode is not enabled no further processing occurs. The extra overhead for this implemetation is the function is not inlined and check of a boolean occurs. It should effect the timing figures.
If auto-extend is enabled, a further check is made to see if the get from the Inactive chain suceeded in getting an object. If it failed a call is made to extend the object's information tables.
The get from the Inactive chain is retried. The result of this is returned to the user. A failure here is the users problem.
o Object Free
The _Objects_Free puts the object back onto the Inactive chain. Again if auto-extend mode is not enabled no further processing occurs and performance overhead will low.
If auto-extend mode is enabled, a check is to see if the number of Inactive objects is one and a half times the allocation size. If there are that many free objects an attempt is made to shrink the object's information.
o Object Index and the Get Function
The existing code allocates the number of object specified in the configuration table, how-ever it makes the local_table have one more element. This is the slot for an id of 0. The 0 slot is always a NULL providing a simple check for a 0 id for object classes.
The existing _Objects_Get code removes the minimum id, which I think could only be 1 from the index, then adds one for the 0 slot.
This change removes this index adjustment code in _Objects_Get.
The extend information starts the index count when scanning for free blocks at the minumun index. This means the base index for a block will always be adjusted by the minimum index. The extend information function only ever allocates the allocation size of objects. Finially the object's local_table size is the maximum plus the minumum index size. The maximum is really the maximum index.
This means the values in the object's information structure and tables do not need the index adjustments which existed before.
o The Test
A new sample test, unlimited is provided. It attempts to test this change.