|
|
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: 5060 (0x13c4)
Types: TextFile
Notes: R1k Text-file segment
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦27079f196⟧
└─⟦this⟧
-- 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