home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
vsiftp.vmssoftware.com
/
VSIPUBLIC@vsiftp.vmssoftware.com.tar
/
FREEWARE
/
FREEWARE40.ZIP
/
callmon
/
callmon_.ada
< prev
next >
Wrap
Text File
|
1996-08-06
|
8KB
|
260 lines
-- CALLMON - A Call Monitor for OpenVMS Alpha
--
-- File: CALLMON_.ADA
-- Author: Thierry Lelegard
-- Version: 1.0
-- Date: 24-JUL-1996
--
-- Abstract: Public Interface of CALLMON
--
with Lib;
with System;
with Condition_Handling;
package Callmon is
subtype Cond_Value_Type is Condition_Handling.Cond_Value_Type;
subtype Address is System.Address;
subtype Integer_8 is System.Integer_8;
subtype Integer_16 is System.Integer_16;
subtype Integer_32 is System.Integer_32;
subtype Integer_64 is System.Integer_64;
subtype Invo_Handle_Type is Lib.Invo_Handle_Type;
--
-- Procedure argument list.
-- According to OpenVMS Alpha Calling Standard, an argument list
-- is made of 0 to 255 64-bits arguments.
--
subtype Argument_Count is Natural range 0..255;
subtype Argument_Index is Argument_Count range 1..Argument_Count'Last;
type Argument_List_Type is array (Argument_Index range <>) of Integer_64;
subtype Maximum_Argument_List_Type is Argument_List_Type (Argument_Index);
--
-- Argument to pre-processing and post-processing procedure.
--
type Arguments_Type is
record
Post_Processing : Boolean;
Call_It : Boolean;
Result_R0 : Integer_64;
Result_R1 : Integer_64;
Result_F0 : Integer_64;
Result_F1 : Integer_64;
Arg_Count : Integer_64;
Arg_List : Maximum_Argument_List_Type;
end record;
for Arguments_Type use
record
Post_Processing at 0 range 0 .. 0;
Call_It at 4 range 0 .. 0;
Result_R0 at 8 range 0 .. 63;
Result_R1 at 16 range 0 .. 63;
Result_F0 at 24 range 0 .. 63;
Result_F1 at 32 range 0 .. 63;
Arg_Count at 40 range 0 .. 63;
Arg_List at 48 range 0 .. 255 * 64 - 1;
end record;
for Arguments_Type'Size use 261 * 64;
--
-- CALLMON Initialization (optional, automatically done otherwise)
--
procedure Initialize (Status : out Cond_Value_Type);
procedure Initialize;
pragma Interface (C, Initialize);
pragma Import_Valued_Procedure (
Internal => Initialize,
External => "CALLMON$INITIALIZE",
Parameter_Types => (Cond_Value_Type),
Mechanism => (Value));
pragma Import_Procedure (
Internal => Initialize,
External => "CALLMON$INITIALIZE",
Parameter_Types => (null));
--
-- Intercept a routine.
--
procedure Intercept (
Status : out Cond_Value_Type;
Routine_Name : in String;
Pre_Routine : in Address := System.Null_Address;
Post_Routine : in Address := System.Null_Address);
procedure Intercept (
Routine_Name : in String;
Pre_Routine : in Address := System.Null_Address;
Post_Routine : in Address := System.Null_Address);
pragma Interface (C, Intercept);
pragma Import_Valued_Procedure (
Internal => Intercept,
External => "CALLMON$INTERCEPT_DSC",
Parameter_Types => (Cond_Value_Type, String, Address, Address),
Mechanism => (Value, Descriptor (S), Value, Value));
pragma Import_Procedure (
Internal => Intercept,
External => "CALLMON$INTERCEPT_DSC",
Parameter_Types => (String, Address, Address),
Mechanism => (Descriptor (S), Value, Value));
--
-- Declaring a pre-/post-processing routine:
--
-- procedure Interceptor (
-- Arguments : in out Callmon.Arguments_Type;
-- Caller : in Callmon.Invo_Handle_Type;
-- Routine_Name : in String;
-- Intercepted_Routine : in Callmon.Address;
-- Jacket_Routine : in Callmon.Address);
--
-- pragma Export_Procedure (
-- Internal => Interceptor,
-- External => "",
-- Mechanism => (Reference, Value, Descriptor (S), Value, Value));
--
--
-- Intercept all routines in an image.
--
procedure Intercept_All (
Status : out Cond_Value_Type;
Image_Name : in String;
Pre_Routine : in Address := System.Null_Address;
Post_Routine : in Address := System.Null_Address;
Override : in Boolean := True);
procedure Intercept_All (
Image_Name : in String;
Pre_Routine : in Address := System.Null_Address;
Post_Routine : in Address := System.Null_Address;
Override : in Boolean := True);
pragma Interface (C, Intercept_All);
pragma Import_Valued_Procedure (
Internal => Intercept_All,
External => "CALLMON$INTERCEPT_ALL_DSC",
Parameter_Types => (Cond_Value_Type, String, Address, Address, Boolean),
Mechanism => (Value, Descriptor (S), Value, Value, Value));
pragma Import_Procedure (
Internal => Intercept_All,
External => "CALLMON$INTERCEPT_ALL_DSC",
Parameter_Types => (String, Address, Address, Boolean),
Mechanism => (Descriptor (S), Value, Value, Value));
--
-- Disassemble a range of instructions.
--
procedure Disassemble (
Start_Address : in Address;
Size_In_Bytes : in Natural;
Displayed_PC : in Address;
Output_Routine : in Address := System.Null_Address;
User_Data : in Address := System.Null_Address);
pragma Interface (C, Disassemble);
pragma Import_Procedure (
Internal => Disassemble,
External => "CALLMON$DISASSEMBLE_DSC",
Parameter_Types => (Address, Natural, Address, Address, Address),
Mechanism => (Value, Value, Value, Value, Value));
--
-- Declaring an output routine for the disassembler.
--
-- procedure Output (
-- PC : in Callmon.Address;
-- Opcode : in String;
-- Operands : in String;
-- User_Data : in Callmon.Address);
--
-- pragma Export_Procedure (
-- Internal => Output,
-- External => "",
-- Mechanism => (Value, Descriptor (S), Descriptor (S), Value));
--
--
-- Dumping the list of active images.
--
procedure Dump_Image_Tree (Status : out Cond_Value_Type);
procedure Dump_Image_Tree;
pragma Interface (C, Dump_Image_Tree);
pragma Import_Valued_Procedure (
Internal => Dump_Image_Tree,
External => "CALLMON$DUMP_IMAGE_TREE",
Parameter_Types => (Cond_Value_Type),
Mechanism => (Value));
pragma Import_Procedure (
Internal => Dump_Image_Tree,
External => "CALLMON$DUMP_IMAGE_TREE",
Parameter_Types => (null));
--
-- Dumping the list of known routines.
--
type Dump_Routine_Type is (
All_Routines,
Intercepted_Only,
Uninterceptable_Only,
Unrelocatable_Only);
for Dump_Routine_Type use (
All_Routines => 0,
Intercepted_Only => 1,
Uninterceptable_Only => 2,
Unrelocatable_Only => 3);
procedure Dump_Routine_Tree (
Status : out Cond_Value_Type;
Class : in Dump_Routine_Type);
procedure Dump_Routine_Tree (
Class : in Dump_Routine_Type);
pragma Interface (C, Dump_Routine_Tree);
pragma Import_Valued_Procedure (
Internal => Dump_Routine_Tree,
External => "CALLMON$DUMP_ROUTINE_TREE",
Parameter_Types => (Cond_Value_Type, Dump_Routine_Type),
Mechanism => (Value, Value));
pragma Import_Procedure (
Internal => Dump_Routine_Tree,
External => "CALLMON$DUMP_ROUTINE_TREE",
Parameter_Types => (Dump_Routine_Type),
Mechanism => (Value));
end Callmon;