90 lines
1.6 KiB
ObjectPascal
90 lines
1.6 KiB
ObjectPascal
unit tracer;
|
|
|
|
interface
|
|
|
|
procedure init;
|
|
procedure push_trace(t_name : pchar);
|
|
procedure pop_trace;
|
|
function get_last_trace : pchar;
|
|
procedure freeze;
|
|
function get_trace_count : uint32;
|
|
function get_trace_N(idx : uint32) : pchar;
|
|
|
|
implementation
|
|
|
|
uses
|
|
console, lmemorymanager, util, strings, serial;
|
|
|
|
const
|
|
MAX_TRACE = 40;
|
|
|
|
var
|
|
t_ready : Boolean;
|
|
Locked : Boolean;
|
|
Traces : Array[0..MAX_TRACE-1] of PChar;
|
|
|
|
procedure freeze;
|
|
begin
|
|
if TRACER_ENABLE then t_ready:= false;
|
|
end;
|
|
|
|
procedure push_trace(t_name : pchar);
|
|
var
|
|
i : uint32;
|
|
|
|
begin
|
|
if TRACER_ENABLE then begin
|
|
if t_ready then begin
|
|
if not Locked then begin
|
|
Locked:= true;
|
|
if Traces[MAX_TRACE-1] <> nil then kfree(void(Traces[MAX_TRACE-1]));
|
|
for i:=MAX_TRACE-1 downto 1 do begin
|
|
Traces[i]:= Traces[i-1];
|
|
end;
|
|
Traces[0]:= StringCopy(t_name);
|
|
Locked:= false;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure pop_trace;
|
|
begin
|
|
|
|
end;
|
|
|
|
function get_last_trace : pchar;
|
|
begin
|
|
get_last_trace:= Traces[0];
|
|
end;
|
|
|
|
procedure init;
|
|
var
|
|
i : uint32;
|
|
|
|
begin
|
|
if TRACER_ENABLE then begin
|
|
for i:=0 to MAX_TRACE-1 do begin
|
|
traces[i]:= nil;
|
|
end;
|
|
t_ready:= true;
|
|
push_trace('kmain');
|
|
end;
|
|
end;
|
|
|
|
function get_trace_count : uint32;
|
|
begin
|
|
if TRACER_ENABLE then begin
|
|
get_trace_count:= MAX_TRACE;
|
|
end;
|
|
end;
|
|
|
|
function get_trace_N(idx : uint32) : pchar;
|
|
begin
|
|
if idx > MAX_TRACE-1 then exit;
|
|
if TRACER_ENABLE then begin
|
|
get_trace_N:= traces[idx];
|
|
end;
|
|
end;
|
|
|
|
end. |