Browse Source

* faked gdb fixed

florian 26 years ago
parent
commit
1a384965a8
1 changed files with 183 additions and 1 deletions
  1. 183 1
      ide/fake/gdb/gdbcon.pas

+ 183 - 1
ide/fake/gdb/gdbcon.pas

@@ -8,7 +8,73 @@ unit GDBCon;
 interface
 interface
 
 
 type
 type
+  psyminfo=^tsyminfo;
+  tsyminfo=record
+    address  : longint;
+    fname    : pchar;
+    line     : longint;
+    funcname : pchar;
+  end;
+
+  tframeentry = object
+    file_name : pchar;
+    function_name : pchar;
+    args : pchar;
+    line_number : longint;
+    address : longint;
+    constructor init;
+    destructor done;
+    procedure reset;
+    procedure clear;
+  end;
+  pframeentry=^tframeentry;
+  ppframeentry=^pframeentry;
+
+  tgdbbuffer=object
+    buf   : pchar;
+    size,
+    idx   : longint;
+    constructor Init;
+    destructor  Done;
+    procedure Reset;
+    procedure Resize;
+    procedure Append(p:pchar);
+  end;
+
+  PGDBInterface=^TGDBInterface;
   TGDBInterface=object
   TGDBInterface=object
+    gdberrorbuf,
+    gdboutputbuf  : tgdbbuffer;
+    got_error,
+    reset_command,
+    call_reset,
+    Debugger_started : boolean;
+    { frames and frame info while recording a frame }
+    frames        : ppframeentry;
+    frame_size,
+    frame_count   : longint;
+    record_frames,
+    frame_begin_seen : boolean;
+    current_address,
+    current_line_number,
+    signal_start,
+    signal_end,
+    error_start,
+    error_end,
+    function_start,
+    function_end,
+    args_start,
+    args_end,
+    file_start,
+    file_end,
+    line_start,
+    line_end : longint;
+    { breakpoint }
+    last_breakpoint_number,
+    last_breakpoint_address,
+    last_breakpoint_line : longint;
+    last_breakpoint_file : pchar;
+    invalid_breakpoint_line : boolean;
     constructor Init;
     constructor Init;
     destructor  Done;
     destructor  Done;
     { functions }
     { functions }
@@ -46,8 +112,30 @@ type
   end;
   end;
 
 
 
 
+var
+  curr_gdb : pgdbinterface;
+
+const
+  use_gdb_file : boolean = false;
+var
+  gdb_file : text;
+  
+  { gdb does not allow \ in dir or filenames }
+  procedure UnixDir(var s : string);
+
 implementation
 implementation
 
 
+  uses
+     strings;
+
+procedure UnixDir(var s : string);
+var i : longint;
+begin
+  for i:=1 to length(s) do
+    if s[i]='\' then s[i]:='/';
+end;
+
+
 constructor TGDBController.Init;
 constructor TGDBController.Init;
 begin
 begin
   inherited Init;
   inherited Init;
@@ -172,12 +260,106 @@ procedure TGDBInterface.DoUserScreen;
 begin
 begin
 end;
 end;
 
 
+{*****************************************************************************
+                               TFrameEntry
+*****************************************************************************}
+
+constructor tframeentry.init;
+begin
+  Reset;
+end;
+
+destructor tframeentry.done;
+begin
+  Clear;
+end;
+
+procedure tframeentry.reset;
+begin
+  file_name:=nil;
+  function_name:=nil;
+  args:=nil;
+  line_number:=0;
+  address:=0;
+end;
+
+procedure tframeentry.clear;
+begin
+  if assigned(file_name) then
+   strdispose(file_name);
+  if assigned(function_name) then
+   strdispose(function_name);
+  if assigned(args) then
+   strdispose(args);
+  reset;
+end;
+
+
+{*****************************************************************************
+                                 tgdbbuffer
+*****************************************************************************}
+
+constructor tgdbbuffer.init;
+begin
+  Size:=0;
+  Resize;
+  Reset;
+end;
+
+
+destructor tgdbbuffer.done;
+begin
+  freemem(buf,size);
+end;
+
+
+
+procedure tgdbbuffer.reset;
+begin
+  idx:=0;
+  Buf[0]:=#0;
+end;
+
+
+procedure tgdbbuffer.append(p:pchar);
+var
+  len : longint;
+begin
+  if not assigned(p) then
+   exit;
+  len:=Strlen(p);
+  if len+idx>size then
+   Resize;
+  Move(p^,buf[idx],len);
+  inc(idx,len);
+  buf[idx]:=#0;
+end;
+
+
+procedure tgdbbuffer.resize;
+const
+  blocksize=2048;
+var
+  nsize : longint;
+  np    : pchar;
+begin
+  nsize:=size+blocksize;
+  getmem(np,nsize);
+  move(buf^,np^,size);
+  freemem(buf,size);
+  buf:=np;
+  size:=nsize;
+end;
+
 
 
 
 
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.2  1999-02-04 17:19:22  peter
+  Revision 1.3  1999-02-06 00:04:55  florian
+    * faked gdb fixed
+
+  Revision 1.2  1999/02/04 17:19:22  peter
     * linux fixes
     * linux fixes
 
 
   Revision 1.1  1999/02/02 16:38:05  peter
   Revision 1.1  1999/02/02 16:38:05  peter