Try to fix problems for more recent GDB versions.

Move GDB_NEW_UI macro def. to GDB_VER_GE_712
  Add GDB_INTERP_LOOKUP_HAS_UI and GDB_HAS_SAVED_COMMAND_LINE_BUT_NO_SIZE
  to same GDB_VER_GE_712.
  Use stdio_filopen to create gdb_stdout and gdb_stderr 
  if GDB_HAS_GET_STDIN macro is set.

git-svn-id: trunk@44471 -
This commit is contained in:
pierre 2020-03-31 20:49:17 +00:00
parent 625e847e56
commit 4861761150

View File

@ -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}