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

⟦5f9d77e37⟧ TextFile

    Length: 5060 (0x13c4)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

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

TextFile

-- Copyright 1987, 1988, 1992  Verdix Corporation

------------------------------------------------------------------------------
-- link block for communication among the debugger, the runtime kernel,
-- and the user program.  The linker fills in the link_block fields;
-- except that the kernel fills in the record pointed to by the debug_block_p
-- field.
------------------------------------------------------------------------------
with system;				use system;
with v_i_types;
with unchecked_conversion;
package link_block is

    pragma suppress(ALL_CHECKS);
    pragma suppress(EXCEPTION_TABLES);
    pragma not_elaborated;
    pragma local_access;

    -- the following reference points in the user program.
    type link_block_t is record
        startup_p           		: address;
        stack_limit_p       		: address;
        raise_p             		: address;
        constraint_error_p  		: address;
        numeric_error_p     		: address;
        program_error_p     		: address;
        storage_error_p     		: address;
        tasking_error_p     		: address;
        debug_block_p       		: address;
        main_task_priority_p		: address;
		usr_configuration_table_p	: address;
        group_table_p       		: address;
        program_signature_p			: address;
        raise_interrupt_p      		: address;
    end record;
    type a_link_block_t is access link_block_t;
	pragma local_access(a_link_block_t);
	function to_a_link_block_t is
		new unchecked_conversion(address, a_link_block_t);

	type target_info_tag_t is (
		TARGET_INFO_NONE,			-- value = 0
		TARGET_INFO_IMMEDIATE,		-- value = addr | off
		TARGET_INFO_MEMORY,			-- value = *addr
		TARGET_INFO_CALL,			-- value = addr() or off(base_addr)
		TARGET_INFO_RELATIVE_OFFSET,-- value = base_addr + off
		TARGET_INFO_INDIRECT_OFFSET,-- value = *(base_addr + off)
		TARGET_INFO_KRN_PROGRAM_INDIRECT_OFFSET,
		  -- value = *(get_krn_program_id(base_addr) + off)
		  -- where base_addr must be an ADA program_id
		TARGET_INFO_KRN_TASK_INDIRECT_OFFSET
		  -- value = *(get_krn_task_id(base_addr) + off)
		  -- where base_addr must be an ADA task_id
	);
	for target_info_tag_t'size use integer'size;

	type target_info_t is record
		tag		: target_info_tag_t;
		val		: v_i_types.universal_scalar;
	end record;

    -- The following are used to reference the kernel addresses of
    -- the runtime variables.
	--
    -- Note: should be renamed to kernel_block_t.
    type debug_block_t is record
		krn_program_head	: target_info_t;

		-- Following offsets are relative to krn_program_id
		krn_program_next	: target_info_t;
		ADA_program_id		: target_info_t;
		ADA_program_id_bias	: integer;	-- added to program_id offset
		ADA_program_tag		: target_info_t;
		  -- TARGET_INFO_NONE => all krn prog are ADA prog
		ADA_program_tag_val	: integer;

		-- Following offsets are relative to ADA's program_id
		krn_program_id		: target_info_t;
		exception_stack_size: target_info_t;
		idle_krn_task_id	: target_info_t;
		sequence_num		: target_info_t;
		key					: target_info_t;
		my_creator			: target_info_t;	-- krn's program_id

		krn_ct				: target_info_t;

		-- Following offsets are relative to krn_task_id
		ADA_task_id			: target_info_t;
		ADA_task_id_bias	: integer;	-- added to task_id offset
		ADA_task_tag		: target_info_t;
		  -- TARGET_INFO_NONE => all krn task are ADA task
		ADA_task_tag_val	: integer;
		IDLE_task_tag_val	: integer;

		-- Following offsets are relative to ADA's task_id
		krn_task_id			: target_info_t;
		stack_bottom		: target_info_t;
		stack_size			: target_info_t;
		super_stack_size	: target_info_t;
		  -- may be same for all tasks. TARGET_INFO_NONE => no extra
		  -- supervisor stack
		search_pattern		: natural;
		  -- heap/stack area is initialized to this pattern. This value
		  -- is used by the debugger "lt use" command to determine stack
		  -- and heap usage.
		heap_bottom			: address;
		heap_size			: natural;
		intr_stack_area		: address;
		intr_stack_size		: natural;

        program_head        			: address;
        ct                  			: address;
        runq_head           			: address;
        time_eventq_head       			: address;
        preemption_depth       			: address;
		krn_configuration_table			: address;
        intr_stack_limit  			    : address;
        intr_depth  			    	: address;
		-- Fast kernel service entry points (only called from an ISR)
        intr_enter  			    	: address;
        intr_complete  			    	: address;
		intr_cond_signal				: address;

		pending_interrupt_flag			: address;
        current_program        			: address;
		-- Fast kernel service entry points (only called from a supervisor
		-- task)
        task_wait        				: address;
        task_signal        				: address;
        task_signal_unlock 				: address;
        task_signal_wait_unlock 		: address;


    end record;
    type a_debug_block_t is access debug_block_t;
	pragma local_access(a_debug_block_t);
	function to_a_debug_block_t is
		new unchecked_conversion(address, a_debug_block_t);
end;

package body link_block is
end