DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e9f58eacf⟧ Ada Source

    Length: 16384 (0x4000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package V_Usr_Conf_I, seg_0509dd

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--   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;

E3 Meta Data

    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 0x217580860878e7a4d0ea1 0x42a00088462060003