|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 16384 (0x4000)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package V_Usr_Conf_I, seg_04b9d7
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
-- VERDIX CORPORATION (C) COPYRIGHT 1988, 1989
-- 14130-A Sullyfield Circle Proprietary Information
-- Chantilly, Virginia 22021 Not to be Disclosed
--
-- FILE: V_USR_CONF_I.A
--
-- UNIT: VADS Interface for Configuring A User Program for
-- VADS_MICRO/RS6000.
--
-- PURPOSE: This package provides the interface to VADS used by the
-- the package V_USR_CONF. It contains types, objects,
-- and subprograms used to convey configuration information to and
-- from VADS.
--
-- This package consists of the following type definitions,
-- constants and subprogram interfaces:
-- 1. Small block sizes table
--\x09\x09\x09 2. Memory allocation configuration table
-- 3. Configuration table
-- 4. Misc user program variables
-- 5. Ada RTS init
-- 6. Ada exit subprogram
--
-- NOTES: Do not modify this package.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
with System;
use System;
with Ada_Krn_Defs;
with Link_Block;
with V_I_Types;
with V_I_Cifo;
with Language;
use Language;
with Unchecked_Conversion;
package V_Usr_Conf_I is
pragma Suppress (All_Checks);
pragma Suppress (Exception_Tables);
pragma Not_Elaborated;
pragma Local_Access;
subtype Alloc_T is V_I_Types.Alloc_T;
------------------------ #i1: Small Block Sizes Table --------------------------
type Small_Block_Sizes_T is array (Positive range <>) of Alloc_T;
----------------- #i2: Memory Allocation Configuration Table -------------------
type Allocation_Strategy_T is (First_Fit, Best_Fit);
type Mem_Alloc_Conf_Table_T is
record
Min_Size : Alloc_T;
-- for larger objects, gives the size at
-- which an over-large space will be broken
-- into a perfect fit and a new free
-- storage block. Should be set to
-- smallest block one ever expects to
-- allocate and should never be larger
-- than the smallest block in the
-- small_block_sizes list table
Num_Small_Block_Sizes : Integer;
-- specifies the number of elements in
-- the small block sizes table.
Small_Block_Sizes_Address : Address;
-- starting location of the small block
-- sizes table.
Min_List_Length : Integer;
-- specifies the minimum list length
-- of a small blocks list to keep the
-- allocator from coalescing blocks off
-- of the list. (Used for tuning
-- performance)
Intr_Obj_Size : Alloc_T;
-- specifies fixed size of
-- blocks to be allocated when a "new" is
-- performed from an interrupt handler
Initial_Intr_Heap : Integer;
-- specifies number of blocks to be
-- pre-allocated for allocation from
-- an interrupt handler.
Allocation_Strategy : Allocation_Strategy_T;
-- specifies aa_global_new's strategy
-- to be used when choosing a block
-- from the free list.
end record;
-------------------------- #i3: Configuration Table ----------------------------
subtype Floating_Point_Control_T is V_I_Types.Floating_Point_Control_T;
type Configuration_Table_T is
record
Main_Task_Stack_Size : Natural;
-- Size of main subprogram's stack. Stack
-- size excludes room at bottom for
-- exception handling.
Default_Task_Stack_Size : Natural;
-- Default size for each task's stack
-- area. This value is overridden
-- via the "for T'STORAGE_SIZE use ###"
-- length clause.
Exception_Stack_Size : Natural;
-- Space set aside below the bottom
-- of the task stack for exception
-- unwinding.
Idle_Stack_Size : Natural;
-- Size of stack for the idle task.
Signal_Task_Stack_Size : Natural;
-- Size of stack for tasks created
-- for doing rendezvous with
-- interrupt entries.
Fast_Rendezvous_Enabled : Boolean;
-- When true, if the acceptor task
-- is already waiting, then, the
-- rendzvous is executed in the context
-- of the caller task.
Wait_Stack_Size : Natural;
-- For a fast rendezvous, the acceptor
-- saves it register context, switches
-- to a wait stack and waits. Eventually,
-- the caller task restores and uses the
-- acceptor's saved register context.
-- This parameter
-- specifies how much stack is needed
-- for when the acceptor switches from
-- its normal task stack to a special
-- stack it can use to call a kernel
-- service to block itself.
--
-- If fast_rendezvous_enabled == FALSE,
-- then, not used.
Floating_Point_Support : Integer;
-- see v_ada_info in standard
Floating_Point_Control : Floating_Point_Control_T;
-- is the initial value for the
-- floating point hardware's
-- control register
Heap_Max : Alloc_T;
-- max virtual address space which heap
-- can occupy. This is dependent on
-- available swap space on disk.
Heap_Extend : Alloc_T;
-- the minimum number of storage units
-- requested from get_heap_memory_callout
Get_Heap_Memory_Callout : Address;
-- is the address of the routine
-- called when more memory is needed
-- by the underlying allocator for
-- "new" allocations
Mem_Alloc_Conf_Table_Address : Address;
-- starting location of the table that
-- specifies memory allocation
-- configuration and tuning parameters
-- (can be user defined)
Disable_Signals_Mask : Integer;
-- Mask to be used when signals 1..32 are
-- disabled in RTS.
Disable_Signals_33_64_Mask : Integer;
-- Mask to be used when signals 33..64 are
-- disabled in RTS.
Numeric_Signal_Enabled : Boolean;
-- If this is true, the Ada program will
-- use the UNIX SIGFPE signal
-- to catch numeric errors. If it is
-- false, numeric errors will
-- not be caught as per the Ada RM and the
-- Ada program will not
-- affect SIGFPE. This is useful when
-- calling foreign packages
-- that use or ignore SIGFPE.
Storage_Signal_Enabled : Boolean;
-- Like 'numeric_..' above, except for
-- catching storage violations
-- with SIGSEGV and generating
-- storage_error.
Time_Slicing_Enabled : Boolean;
-- Set to TRUE to enable time slicing.
Time_Slice_Interval : Duration;
-- Task's initial time slice value.
Time_Slice_Priority : Priority;
-- If time slicing is enabled, then, it
-- is only applicable to tasks whose
-- priority is less than or equal to
-- this threshold priority.
Default_Task_Attributes : Ada_Krn_Defs.Task_Attr_T;
-- Default task attributes to be
-- passed to underlying OS at task
-- create.
Main_Task_Attr_Address : Address;
-- is the address of the task attributes
-- to be used for the main task. Set
-- to NO_ADDR to use the default task
-- attributes.
Signal_Task_Attr_Address : Address;
-- is the address of the task attributes
-- to be used for the tasks created to
-- rendezvous with interrupt entries.
-- Set to NO_ADDR to use the default task
-- attributes.
Masters_Mutex_Attr_Address : Address;
-- is the address of the mutex attributes
-- to be used to initialize the Ada
-- kernel's master mutex.
--
-- Set to NO_ADDR to use the default
-- mutex attributes.
Mem_Alloc_Mutex_Attr_Address : Address;
-- is the address of the mutex attributes
-- to be used to initialize the mutex
-- used for mutual exclusion during
-- memory allocation.
--
-- Set to NO_ADDR to use the default
-- mutex attributes.
Ada_Io_Mutex_Attr_Address : Address;
-- is the address of the mutex attributes
-- to be used to initialize the mutex
-- used for mutual exclusion during
-- Ada I/O operations.
--
-- Set to NO_ADDR to use the default
-- mutex attributes.
Old_Style_Max_Intr_Entry : Address;
-- For backwards compatibility, if the
-- address in the interrupt entry
-- "for use at" clause is <=
-- OLD_STYLE_MAX_INTR_ENTRY, then, it
-- contains the interrupt vector value and
-- not a pointer to the
-- ada_krn_defs.intr_entry_t record.
-- Setting OLD_STYLE_MAX_INTR_ENTRY to 0
-- disables the old way of interpretation.
Task_Storage_Size : Integer;
-- specifies the size in BYTES of the
-- area allocated in the task control
-- block for user storage
Pending_Count : Integer;
-- specifies the maximum number of kernel
-- service requests from an ISR (or
-- nested ISR) held pending until the
-- outer-most ISR completes. When
-- the outer-most ISR completes,
-- the kernel processes the queue of
-- pending requests.
Timer_Min_Delay : Duration;
-- the minimum duration for an Ada delay.
-- Normally, set to the host's time
-- between ticks.
--
-- If the host's kernel was configured to
-- use a faster timer, then, the
-- min_delay can be decreased
-- accordingly. Absolute minimum is
-- 0.000100 (100 microseconds).
Timer_Adjustment : Duration;
-- adjustment added to all timer delay
-- requests. On some hosts, the
-- setitimer service generates a
-- SIGALRM before the time interval has
-- expired. This may happen when
-- the host's timer generates an
-- interrupt for each tick.
--
-- If an adjustment is necessary, its
-- normally set to the host's time
-- between ticks.
--
-- Note: if we receive a premature
-- SIGALRM, then, the setitimer service
-- is called again.
end record;
type A_Configuration_Table_T is access Configuration_Table_T;
function To_A_Configuration_Table_T is
new Unchecked_Conversion (Address, A_Configuration_Table_T);
--------------------- #i4: Misc User Program Variables -------------------------
Stack_Limit : Address;
pragma Interface_Name (Stack_Limit, "STACK_LIMIT");
-- Bottom of user program's stack. This location is updated by
-- the kernel for each task switch.
Stop : Address;
pragma Interface_Name (Stop, "_STOP");
-- Top return address on the call stack. Used to "stop" exception
-- unwinding.
U_Mainp : Integer;
pragma Interface_Name (U_Mainp, "__u_mainp");
Environ : Integer;
pragma Interface_Name (Environ, C_Prefix & "environ");
-- The user's link block is created by the linker
Usr_Link_Block : Link_Block.Link_Block_T;
pragma Interface_Name (Usr_Link_Block, "LINK_BLOCK");
---------------------------- #i5: Ada RTS Init ------------------------------
-- This routine is called explicity by startup to set up the Ada RTS
function Ts_Initialize (Usr_Link_Block : Link_Block.A_Link_Block_T;
Configuration_Table : V_Usr_Conf_I.
A_Configuration_Table_T;
Main_Pragmas : V_I_Cifo.A_Main_Pragmas_T;
Startup_Continue : Address) return Integer;
pragma Interface (Ada, Ts_Initialize);
pragma Interface_Name (Ts_Initialize, "TS_INITIALIZE");
-- TS_INITIALIZE is called from the user startup program to
-- boot/initialize the tasking and memory allocation data structures.
-- When TS_INITIALIZE completes its processing, control is
-- transferred to startup_continue.
--
-- If TS_INITIALIZE returns, then, the program is ready to exit and
-- it returns the exit status.
-- This routine is called explicity by startup to initialize
-- the Ada "new" allocation
procedure Aa_Init (Configuration_Table :
V_Usr_Conf_I.A_Configuration_Table_T);
pragma Interface (Ada, Aa_Init);
pragma Interface_Name (Aa_Init, "AA_INIT");
------------------------- #i6: Ada Exit Subprogram -----------------------------
procedure Ada_Exit (Status : Integer := 0);
pragma Interface (Ada, Ada_Exit);
pragma Interface_Name (Ada_Exit, "_ADA_EXIT");
-- ADA_EXIT is called when the last elaborated package (main subprogram)
-- returns. It does cleanup logic before returning back to OS.
end V_Usr_Conf_I;
nblk1=f
nid=0
hdr6=1e
[0x00] rec0=16 rec1=00 rec2=01 rec3=04c
[0x01] rec0=21 rec1=00 rec2=02 rec3=0a0
[0x02] rec0=18 rec1=00 rec2=03 rec3=034
[0x03] rec0=19 rec1=00 rec2=04 rec3=060
[0x04] rec0=17 rec1=00 rec2=05 rec3=016
[0x05] rec0=16 rec1=00 rec2=06 rec3=024
[0x06] rec0=15 rec1=00 rec2=07 rec3=024
[0x07] rec0=16 rec1=00 rec2=08 rec3=00c
[0x08] rec0=15 rec1=00 rec2=09 rec3=008
[0x09] rec0=17 rec1=00 rec2=0a rec3=036
[0x0a] rec0=15 rec1=00 rec2=0b rec3=038
[0x0b] rec0=18 rec1=00 rec2=0c rec3=026
[0x0c] rec0=1f rec1=00 rec2=0d rec3=042
[0x0d] rec0=14 rec1=00 rec2=0e rec3=052
[0x0e] rec0=12 rec1=00 rec2=0f rec3=000
tail 0x21548cf5a868438e81c44 0x42a00088462060003