|
@@ -72,11 +72,13 @@ interface
|
|
|
{$define GDB_VER_GE_712}
|
|
|
{$define GDB_NO_INSTREAM_VAR}
|
|
|
{$define GDB_CURRENT_UIOUT_MACRO}
|
|
|
- {$define GDB_NEW_UI}
|
|
|
{$endif}
|
|
|
|
|
|
{$ifdef GDB_VER_GE_712}
|
|
|
{$define GDB_VER_GE_711}
|
|
|
+ {$define GDB_HAS_SAVED_COMMAND_LINE_BUT_NO_SIZE}
|
|
|
+ {$define GDB_NEW_UI}
|
|
|
+ {$define GDB_INTERP_LOOKUP_HAS_UI}
|
|
|
{$endif}
|
|
|
|
|
|
{ 7.11.x }
|
|
@@ -84,7 +86,6 @@ interface
|
|
|
{$info using gdb 7.11.x}
|
|
|
{$define GDB_VERSION_RECOGNIZED}
|
|
|
{$define GDB_VER_GE_711}
|
|
|
- {$define GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
{$endif}
|
|
|
|
|
|
{$ifdef GDB_VER_GE_711}
|
|
@@ -187,6 +188,7 @@ interface
|
|
|
{$ifdef win32}
|
|
|
{$define GDB_USES_LIBADVAPI32}
|
|
|
{$endif win32}
|
|
|
+ {$define GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
{$endif def GDB_VER_GE_704}
|
|
|
|
|
|
{ 7.3.x }
|
|
@@ -858,6 +860,7 @@ type
|
|
|
|
|
|
{ used to recreate gdb_stdout and gdb_stderr as memory streams }
|
|
|
function mem_fileopen : pui_file;cdecl;external;
|
|
|
+ function stdio_fileopen(_file : P_C_FILE) : pui_file;cdecl;external;
|
|
|
|
|
|
{ used to change the write procvar to ours }
|
|
|
|
|
@@ -1034,6 +1037,8 @@ type
|
|
|
{$ifdef GDB_NEW_UI}
|
|
|
var
|
|
|
local_ui : pui;
|
|
|
+ main_ui : pui; cvar;
|
|
|
+ current_ui : pui; cvar;
|
|
|
|
|
|
function new_ui (instream, outstream,errstream: pui_file) : pui; cdecl;external;
|
|
|
{$endif GDB_NEW_UI}
|
|
@@ -1879,13 +1884,24 @@ var
|
|
|
{ this function is generated by the gen-libgdb-inc.sh script
|
|
|
in a object called gdb_get_stdin.o added to the libgdb.a archive }
|
|
|
function gdb_get_stdin : P_C_FILE; cdecl; external;
|
|
|
-{$ifdef GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
+ function gdb_get_stdout : P_C_FILE; cdecl; external;
|
|
|
+ function gdb_get_stderr : P_C_FILE; cdecl; external;
|
|
|
+{$ifdef GDB_HAS_SAVED_COMMAND_LINE_BUT_NO_SIZE}
|
|
|
+var
|
|
|
+ saved_command_line : pchar;cvar;external; { defined in top.c source }
|
|
|
+const
|
|
|
+ saved_command_line_size : longint = 100; {not anymore in top.c source }
|
|
|
+ {$define GDB_SET_SAVED_COMMAND_LINE}
|
|
|
+{$else}
|
|
|
+ {$ifdef GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
{ In some GDB versions, saved_command_line needs to
|
|
|
be explicitly allocated at startup }
|
|
|
var
|
|
|
saved_command_line : pchar;cvar;external; { defined in top.c source }
|
|
|
saved_command_line_size : longint;cvar;external; {defined in top.c source }
|
|
|
-{$endif def GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
+ {$define GDB_SET_SAVED_COMMAND_LINE}
|
|
|
+ {$endif def GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
+{$endif def GDB_HAS_SAVED_COMMAND_LINE_BUT_NO_SIZE}
|
|
|
{$endif}
|
|
|
{$endif GDB_NEEDS_SET_INSTREAM}
|
|
|
var
|
|
@@ -3494,8 +3510,8 @@ var
|
|
|
{$ifdef GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
type
|
|
|
interpreter_struct_p = pointer; { to opaque type }
|
|
|
- function interp_lookup (name : pchar) : interpreter_struct_p;cdecl; external;
|
|
|
- function interp_set (interp : interpreter_struct_p) : longbool;cdecl; external;
|
|
|
+ function interp_lookup ({$ifdef GDB_INTERP_LOOKUP_HAS_UI} ui :pui ;{$endif} name : pchar) : interpreter_struct_p;cdecl; external;
|
|
|
+ function interp_set (interp : interpreter_struct_p;top_level : cint) : longbool;cdecl; external;
|
|
|
{$endif GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
const
|
|
|
DIRBUF_SIZE = 1024;
|
|
@@ -3555,9 +3571,9 @@ begin
|
|
|
{$ifndef GDB_NO_INSTREAM_VAR}
|
|
|
instream:=gdb_get_stdin;
|
|
|
{$endif ndef GDB_NO_INSTREAM_VAR}
|
|
|
-{$ifdef GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
+{$ifdef GDB_SET_SAVED_COMMAND_LINE}
|
|
|
saved_command_line:=xmalloc(saved_command_line_size);
|
|
|
-{$endif def GDB_HAS_SAVED_COMMAND_LINE_SIZE}
|
|
|
+{$endif def GDB_SET_SAVED_COMMAND_LINE}
|
|
|
{$else}
|
|
|
dummy_file :=gdb_fopen('dummy.$$$','a');
|
|
|
{in captured_main code, this is simply
|
|
@@ -3570,8 +3586,13 @@ begin
|
|
|
{$endif}
|
|
|
{$endif GDB_NEEDS_SET_INSTREAM}
|
|
|
|
|
|
+{$ifdef LIBGDB_HAS_GET_STDIN}
|
|
|
+ gdb_stderr:=stdio_fileopen(gdb_get_stderr);
|
|
|
+ gdb_stdout:=stdio_fileopen(gdb_get_stdout);
|
|
|
+{$else}
|
|
|
gdb_stderr:=mem_fileopen;
|
|
|
gdb_stdout:=mem_fileopen;
|
|
|
+{$endif}
|
|
|
save_gdb_stderr:=gdb_stderr;
|
|
|
save_gdb_stdout:=gdb_stdout;
|
|
|
gdb_stdlog:=gdb_stderr;
|
|
@@ -3602,6 +3623,8 @@ begin
|
|
|
{$endif GDB_V6}
|
|
|
{$ifdef GDB_NEW_UI}
|
|
|
local_ui := new_ui (gdb_stdin,gdb_stdout,gdb_stderr);
|
|
|
+ main_ui:=local_ui;
|
|
|
+ current_ui:=main_ui;
|
|
|
{$endif not GDB_NEW_UI}
|
|
|
{$ifdef GDB_INIT_HAS_ARGV0}
|
|
|
getmem(argv0,length(paramstr(0))+1);
|
|
@@ -3614,9 +3637,9 @@ begin
|
|
|
{$ifdef GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
{ interpreter can only be set after all files are
|
|
|
initialized, which is done in gdb_init function. }
|
|
|
- interp := interp_lookup ('console');
|
|
|
- interp_set (interp);
|
|
|
-
|
|
|
+ interp := interp_lookup ({$ifdef GDB_INTERP_LOOKUP_HAS_UI}current_ui,{$endif}'console');
|
|
|
+ if not interp_set (interp,1) then
|
|
|
+ writeln(stderr,'Failed to set GDB console interpreter');
|
|
|
{ We need to re-set gdb_stdXX ui_files }
|
|
|
if assigned(gdb_stderr) then
|
|
|
ui_file_delete(gdb_stderr);
|
|
@@ -3638,6 +3661,8 @@ begin
|
|
|
{$endif GDB_NO_UIOUT}
|
|
|
{$ifdef GDB_NEW_UI}
|
|
|
local_ui := new_ui (gdb_stdin,gdb_stdout,gdb_stderr);
|
|
|
+ main_ui:=local_ui;
|
|
|
+ current_ui:=main_ui;
|
|
|
{$endif not GDB_NEW_UI}
|
|
|
{$endif GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
{$ifdef supportexceptions}
|