mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 08:59:26 +02:00
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:
parent
625e847e56
commit
4861761150
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user