Browse Source

+ code to handle signals

pierre 23 years ago
parent
commit
f60f6dccfc
1 changed files with 52 additions and 14 deletions
  1. 52 14
      packages/base/gdbint/gdbint.pp

+ 52 - 14
packages/base/gdbint/gdbint.pp

@@ -117,7 +117,7 @@ interface
       {$LINKLIB m}
       {$LINKLIB iberty}
       {$LINKLIB intl}        { does not seem to exist on netbsd LINKLIB dl,
-				but I use GDB CVS snapshots for the *BSDs} 
+				but I use GDB CVS snapshots for the *BSDs}
     {$endif GDB_V5}
   {$LINKLIB c}
   {$LINKLIB gcc}
@@ -351,6 +351,7 @@ type
     got_error,
     reset_command,
     call_reset,
+    signaled,
     Debuggee_started : boolean;
     { frames and frame info while recording a frame }
     frames        : ppframeentry;
@@ -365,6 +366,8 @@ type
     current_line_number,
     signal_start,
     signal_end,
+    signal_name_start,
+    signal_name_end,
     error_start,
     error_end,
     function_start,
@@ -375,6 +378,8 @@ type
     file_end,
     line_start,
     line_end : longint;
+    signal_name,
+    signal_string : pchar;
     current_pc      : CORE_ADDR;
     { breakpoint }
     last_breakpoint_number,
@@ -412,6 +417,7 @@ type
     procedure DoStartSession;virtual;
     procedure DoBreakSession;virtual;
     procedure DoEndSession(code:longint);virtual;
+    procedure DoUserSignal;virtual;
     procedure DoDebuggerScreen;virtual;
     procedure DoUserScreen;virtual;
     function  AllowQuit : boolean;virtual;
@@ -1284,9 +1290,9 @@ procedure annotate_signal_name;cdecl;public;
 begin
 {$ifdef Verbose}
   Debug('|signal_name|');
-  with curr_gdb^ do
-   signal_start:=gdboutputbuf.idx;
 {$endif}
+  with curr_gdb^ do
+   signal_name_start:=gdboutputbuf.idx;
 end;
 
 
@@ -1295,6 +1301,8 @@ begin
 {$ifdef Verbose}
   Debug('|signal_name_end|');
 {$endif}
+  with curr_gdb^ do
+   signal_name_end:=gdboutputbuf.idx;
 end;
 
 
@@ -1303,10 +1311,14 @@ begin
 {$ifdef Verbose}
   Debug('|signal_string|');
 {$endif}
+  with curr_gdb^ do
+   signal_start:=gdboutputbuf.idx;
 end;
 
 
 procedure annotate_signal_string_end;cdecl;public;
+var
+  c : char;
 begin
 {$ifdef Verbose}
   Debug('|signal_string_end|');
@@ -1314,17 +1326,28 @@ begin
   with curr_gdb^ do
    begin
      signal_end:=gdboutputbuf.idx;
-{
-  signal = (char *)alloca(signal_end-signal_start+1);
-  strncpy(signal,gdb_output_buffer+signal_start,signal_end-signal_start);
-  signal[signal_end-signal_start] = 0;
-  if (user_screen_shown)
-    __DebuggerScreen();
-    _UserWarning(WARN_SIGNALED,signal);
-    __UserScreen();
-  else
-    _UserWarning(WARN_SIGNALED,signal); }
+     c:=gdboutputbuf.buf[signal_end];
+     gdboutputbuf.buf[signal_end]:=#0;
+     if assigned(signal_string) then
+       strdispose(signal_string);
+     signal_string:=strnew(gdboutputbuf.buf+signal_start);
+     gdboutputbuf.buf[signal_end]:=c;
+     c:=gdboutputbuf.buf[signal_name_end];
+     gdboutputbuf.buf[signal_name_end]:=#0;
+     if assigned(signal_name) then
+       strdispose(signal_name);
+     signal_name:=strnew(gdboutputbuf.buf+signal_name_start);
+     gdboutputbuf.buf[signal_name_end]:=c;
+     if (user_screen_shown) then
+       begin
+         DebuggerScreen;
+         DoUserSignal;
+         UserScreen;
+       end
+     else
+       DoUserSignal;
      call_reset:=true;
+     signaled:=false;
    end;
 end;
 
@@ -1334,6 +1357,8 @@ begin
 {$ifdef Verbose}
   Debug('|signal|');
 {$endif}
+  with curr_gdb^ do
+   signaled:=true;
 end;
 
 
@@ -2305,6 +2330,12 @@ begin
 {$endif}
 {$endif}
   DoEndSession(code);
+  if assigned(signal_name) then
+    strdispose(signal_name);
+  signal_name:=nil;
+  if assigned(signal_string) then
+    strdispose(signal_string);
+  signal_string:=nil;
 end;
 
 
@@ -2362,6 +2393,10 @@ procedure tgdbinterface.DoEndSession(code:longint);
 begin
 end;
 
+procedure tgdbinterface.DoUserSignal;
+begin
+end;
+
 procedure tgdbinterface.DoDebuggerScreen;
 begin
 end;
@@ -2524,7 +2559,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.2  2002-02-05 11:03:59  marco
+  Revision 1.3  2002-02-06 14:42:45  pierre
+   + code to handle signals
+
+  Revision 1.2  2002/02/05 11:03:59  marco
    * library fix, and define GDB_V502 for BSD
 
   Revision 1.1  2002/01/29 17:54:49  peter