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