DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 5243 (0x147b) Types: TextFile Names: »B«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2 └─ ⟦77aa8350c⟧ »DATA« └─⟦f794ecd1d⟧ └─⟦4c85d69e2⟧ └─⟦this⟧
with System; with Unchecked_Conversion; package body Debug_Tools is type Address is new Integer range -2 ** 31 .. 2 ** 31 - 1; type Word is range 0 .. 65535; for Word'Size use 16; Hex_Digits : array (0 .. 15) of Character := ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'E', 'E', 'F'); function Get_Current_Task_Id return Address; pragma Suppress (Elaboration_Check, Get_Current_Task_Id); pragma Interface (Asm, Get_Current_Task_Id); pragma Import_Function (Get_Current_Task_Id, "__GET_CURRENT_TASK_ID"); function Get_Frame_Pointer return Address; pragma Interface (Asm, Get_Frame_Pointer); pragma Import_Function (Internal => Get_Frame_Pointer, External => "__GET_FP"); function Get_Exception_Addr (Task_Name : Address) return Address; pragma Interface (Asm, Get_Exception_Addr); pragma Import_Function (Internal => Get_Exception_Addr, External => "__GET_EXC_ADDR", Mechanism => (Value)); function Hex_Image (Addr : Address) return String is Image : String (1 .. 9) := String'(1 => '#', 2 .. 9 => ' '); Digit : Integer; Temp : Integer := Integer (Addr); begin for I in reverse 1 .. 8 loop Digit := Temp mod 2 ** 4; Temp := (Temp - Digit) / 2 ** 4; Image (I + 1) := Hex_Digits (Digit); end loop; return Image; end Hex_Image; function Read_Address (Source : Address) return Address is type Memory_Access is access Address; for Memory_Access'Storage_Size use 0; function Address_To_Access is new Unchecked_Conversion (Source => Address, Target => Memory_Access); Mem : Memory_Access := Address_To_Access (Source); begin return Mem.all; end Read_Address; procedure Debug_On is begin null; end Debug_On; procedure Debug_Off is begin null; end Debug_Off; function Debugging return Boolean is begin return False; end Debugging; procedure Message (Info : String) is begin null; end Message; procedure User_Break (Info : String) is begin null; end User_Break; procedure Set_Task_Name (Name : String) is begin null; end Set_Task_Name; function Get_Machine_Location (Frame_Number : Natural) return String is Frame_Pointer : Address; Pc : Address; begin Frame_Pointer := Get_Frame_Pointer; for I in 1 .. Frame_Number + 1 loop Frame_Pointer := Read_Address (Frame_Pointer); end loop; Pc := Read_Address (Frame_Pointer + 8); return Hex_Image (Pc); end Get_Machine_Location; function Get_Task_Name return String is begin return Hex_Image (Get_Current_Task_Id); exception when others => return "Internal Error: Debug_Tools.Get_Task_Name"; end Get_Task_Name; function Ada_Location (Frame_Number : Natural := 0; Fully_Qualify : Boolean := True; Machine_Info : Boolean := False) return String is begin return Get_Machine_Location (Frame_Number); exception when others => return "Internal Error: Debug_Tools.Ada_Location"; end Ada_Location; function Get_Exception_Image (Exc_Addr : Address) return String is type Word_Access is access Word; for Word_Access'Storage_Size use 0; function Address_To_Access is new Unchecked_Conversion (Source => Address, Target => Word_Access); Count_Addr : Word_Access := Address_To_Access (Exc_Addr + 6); Count : Natural := Natural (Count_Addr.all); type String_Access is access String (1 .. Count); for String_Access'Storage_Size use 0; function Address_To_Access is new Unchecked_Conversion (Source => Address, Target => String_Access); Exception_Image : String_Access := Address_To_Access (Address (Exc_Addr + 8)); begin return Exception_Image.all; end Get_Exception_Image; function Get_Exception_Name (Fully_Qualify : Boolean := True; Machine_Info : Boolean := False) return String is Task_Id : Address; Exc_Addr : Address; begin Task_Id := Get_Current_Task_Id; Exc_Addr := Get_Exception_Addr (Task_Id); if Exc_Addr = 0 then return ""; else return Get_Exception_Image (Exc_Addr); end if; exception when others => return "Internal Error: Debug_Tools.Get_Exception_Name"; end Get_Exception_Name; function Get_Raise_Location (Fully_Qualify : Boolean := True; Machine_Info : Boolean := False) return String is Location : Address; begin return "Debug_Tools.Get_Raise_Location is not implemented"; end Get_Raise_Location; end Debug_Tools;