-- Initialize Exec_Module if not already initialized
function Symbolic_Traceback
- (Traceback : System.Traceback_Entries.Tracebacks_Array;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean) return String;
+ (Traceback : System.Traceback_Entries.Tracebacks_Array;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type) return String;
function Symbolic_Traceback
(E : Ada.Exceptions.Exception_Occurrence;
Suppress_Hex : Boolean) return String;
-- Suppress_Hex means do not print any hexadecimal addresses, even if the
- -- symbol is not available. Subprg_Name_Only means to only print the
- -- subprogram name for each frame, as opposed to the complete description
- -- of the frame.
+ -- symbol is not available. Display_Mode configures how frames for which
+ -- symbols are available are printed.
function Lt (Left, Right : Module_Cache_Acc) return Boolean;
-- Sort function for Module_Cache
-- Non-symbolic traceback (simply write addresses in hexa)
procedure Symbolic_Traceback_No_Lock
- (Traceback : Tracebacks_Array;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String);
+ (Traceback : Tracebacks_Array;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String);
-- Like the public Symbolic_Traceback except there is no provision against
-- concurrent accesses.
procedure Module_Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Module : Module_Cache;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String);
+ (Traceback : Tracebacks_Array;
+ Module : Module_Cache;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String);
-- Returns the Traceback for a given module
procedure Multi_Module_Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String);
+ (Traceback : Tracebacks_Array;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String);
-- Build string containing symbolic traceback for the given call chain
procedure Multi_Module_Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Module : Module_Cache;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String);
+ (Traceback : Tracebacks_Array;
+ Module : Module_Cache;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String);
-- Likewise but using Module
Max_String_Length : constant := 4096;
declare
With_Trailing_Newline : constant String :=
Symbolic_Traceback
- (Traceback, Suppress_Hex => True, Subprg_Name_Only => True);
+ (Traceback,
+ Suppress_Hex => True,
+ Display_Mode => Subprg_Name_Only);
begin
return
With_Trailing_Newline
-------------------------------
procedure Module_Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Module : Module_Cache;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String)
+ (Traceback : Tracebacks_Array;
+ Module : Module_Cache;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String)
is
Success : Boolean;
begin
- if Symbolic.Module_Name.Is_Supported and then not Subprg_Name_Only then
+ if Symbolic.Module_Name.Is_Supported and then Display_Mode = Full then
Append (Res, '[');
Append (Res, Module.Name.all);
Append (Res, ']' & ASCII.LF);
end if;
Dwarf_Lines.Symbolic_Traceback
- (Module.C,
- Traceback,
- Suppress_Hex,
- Subprg_Name_Only,
- Success,
- Res);
+ (Module.C, Traceback, Suppress_Hex, Display_Mode, Success, Res);
if not Success then
Hexa_Traceback
- (Traceback, Suppress_Hex or else Subprg_Name_Only, Res);
+ (Traceback,
+ Suppress_Hex or else Display_Mode = Subprg_Name_Only,
+ Res);
end if;
-- We must not allow an unhandled exception here, since this function
-------------------------------------
procedure Multi_Module_Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String)
+ (Traceback : Tracebacks_Array;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String)
is
F : constant Natural := Traceback'First;
begin
Multi_Module_Symbolic_Traceback
(Traceback,
Modules_Cache (Mid).all,
- Subprg_Name_Only,
Suppress_Hex,
+ Display_Mode,
Res);
return;
else
Multi_Module_Symbolic_Traceback
(Traceback (F + 1 .. Traceback'Last),
Suppress_Hex,
- Subprg_Name_Only,
+ Display_Mode,
Res);
end;
else
-- First try the executable
if Is_Inside (Exec_Module.C, Traceback (F)) then
Multi_Module_Symbolic_Traceback
- (Traceback, Exec_Module, Suppress_Hex, Subprg_Name_Only, Res);
+ (Traceback, Exec_Module, Suppress_Hex, Display_Mode, Res);
return;
end if;
Init_Module (Module, Success, M_Name, Load_Addr);
if Success then
Multi_Module_Symbolic_Traceback
- (Traceback, Module, Suppress_Hex, Subprg_Name_Only, Res);
+ (Traceback, Module, Suppress_Hex, Display_Mode, Res);
Close_Module (Module);
else
-- Module not found
Multi_Module_Symbolic_Traceback
(Traceback (F + 1 .. Traceback'Last),
Suppress_Hex,
- Subprg_Name_Only,
+ Display_Mode,
Res);
end if;
end;
end Multi_Module_Symbolic_Traceback;
procedure Multi_Module_Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Module : Module_Cache;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String)
+ (Traceback : Tracebacks_Array;
+ Module : Module_Cache;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String)
is
Pos : Positive;
begin
(Traceback (Traceback'First .. Pos - 1),
Module,
Suppress_Hex,
- Subprg_Name_Only,
+ Display_Mode,
Res);
Multi_Module_Symbolic_Traceback
- (Traceback (Pos .. Traceback'Last),
- Suppress_Hex,
- Subprg_Name_Only,
- Res);
+ (Traceback (Pos .. Traceback'Last), Suppress_Hex, Display_Mode, Res);
end Multi_Module_Symbolic_Traceback;
--------------------
--------------------------------
procedure Symbolic_Traceback_No_Lock
- (Traceback : Tracebacks_Array;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean;
- Res : in out Bounded_String) is
+ (Traceback : Tracebacks_Array;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type;
+ Res : in out Bounded_String) is
begin
if Symbolic.Module_Name.Is_Supported then
Multi_Module_Symbolic_Traceback
- (Traceback, Suppress_Hex, Subprg_Name_Only, Res);
+ (Traceback, Suppress_Hex, Display_Mode, Res);
else
if Exec_Module_State = Failed then
Append (Res, "Call stack traceback locations:" & ASCII.LF);
Hexa_Traceback
- (Traceback, Suppress_Hex or else Subprg_Name_Only, Res);
+ (Traceback,
+ Suppress_Hex or else Display_Mode = Subprg_Name_Only,
+ Res);
else
Module_Symbolic_Traceback
- (Traceback, Exec_Module, Suppress_Hex, Subprg_Name_Only, Res);
+ (Traceback, Exec_Module, Suppress_Hex, Display_Mode, Res);
end if;
end if;
end Symbolic_Traceback_No_Lock;
-- Copied from Ada.Exceptions.Exception_Data
function Symbolic_Traceback
- (Traceback : Tracebacks_Array;
- Suppress_Hex : Boolean;
- Subprg_Name_Only : Boolean) return String
+ (Traceback : Tracebacks_Array;
+ Suppress_Hex : Boolean;
+ Display_Mode : Display_Mode_Type) return String
is
Load_Address : constant Address := Get_Executable_Load_Address;
Res : Bounded_String (Max_Length => Max_String_Length);
begin
System.Soft_Links.Lock_Task.all;
Init_Exec_Module;
- if not Subprg_Name_Only and then Load_Address /= Null_Address then
+ if Display_Mode = Full and then Load_Address /= Null_Address then
Append (Res, LDAD_Header);
Append_Address (Res, Load_Address);
Append (Res, ASCII.LF);
end if;
- Symbolic_Traceback_No_Lock
- (Traceback, Suppress_Hex, Subprg_Name_Only, Res);
+ Symbolic_Traceback_No_Lock (Traceback, Suppress_Hex, Display_Mode, Res);
System.Soft_Links.Unlock_Task.all;
return To_String (Res);
begin
return
Symbolic_Traceback
- (Traceback, Suppress_Hex => False, Subprg_Name_Only => False);
+ (Traceback, Suppress_Hex => False, Display_Mode => Full);
end Symbolic_Traceback;
function Symbolic_Traceback_No_Hex
begin
return
Symbolic_Traceback
- (Traceback, Suppress_Hex => True, Subprg_Name_Only => False);
+ (Traceback, Suppress_Hex => True, Display_Mode => Full);
end Symbolic_Traceback_No_Hex;
function Symbolic_Traceback
begin
return
Symbolic_Traceback
- (Ada.Exceptions.Traceback.Tracebacks (E),
- Suppress_Hex,
- False);
+ (Ada.Exceptions.Traceback.Tracebacks (E), Suppress_Hex, Full);
end Symbolic_Traceback;
function Symbolic_Traceback