|
@@ -50,7 +50,6 @@ interface
|
|
{$ifdef GDB_V601}
|
|
{$ifdef GDB_V601}
|
|
{$info using gdb 6.1.x}
|
|
{$info using gdb 6.1.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$undef GDB_HAS_DEPRECATED_CBPH}
|
|
{$undef GDB_HAS_DEPRECATED_CBPH}
|
|
{$endif def GDB_V601}
|
|
{$endif def GDB_V601}
|
|
|
|
|
|
@@ -58,14 +57,12 @@ interface
|
|
{$ifdef GDB_V602}
|
|
{$ifdef GDB_V602}
|
|
{$info using gdb 6.2.x}
|
|
{$info using gdb 6.2.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$endif def GDB_V602}
|
|
{$endif def GDB_V602}
|
|
|
|
|
|
{ 6.3.x }
|
|
{ 6.3.x }
|
|
{$ifdef GDB_V603}
|
|
{$ifdef GDB_V603}
|
|
{$info using gdb 6.3.x}
|
|
{$info using gdb 6.3.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$endif def GDB_V603}
|
|
{$endif def GDB_V603}
|
|
|
|
|
|
{ 6.4.x }
|
|
{ 6.4.x }
|
|
@@ -73,7 +70,6 @@ interface
|
|
{$info using gdb 6.4.x}
|
|
{$info using gdb 6.4.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$endif def GDB_V604}
|
|
{$endif def GDB_V604}
|
|
|
|
|
|
{ 6.5.x }
|
|
{ 6.5.x }
|
|
@@ -87,7 +83,6 @@ interface
|
|
{$ifdef GDB_V606}
|
|
{$ifdef GDB_V606}
|
|
{$info using gdb 6.6.x}
|
|
{$info using gdb 6.6.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$define GDB_USES_BP_LOCATION}
|
|
{$define GDB_USES_BP_LOCATION}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
{$define GDB_USES_EXPAT_LIB}
|
|
{$define GDB_USES_EXPAT_LIB}
|
|
@@ -98,7 +93,6 @@ interface
|
|
{$ifdef GDB_V607}
|
|
{$ifdef GDB_V607}
|
|
{$info using gdb 6.7.x}
|
|
{$info using gdb 6.7.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$define GDB_USES_BP_LOCATION}
|
|
{$define GDB_USES_BP_LOCATION}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
{$define GDB_USES_EXPAT_LIB}
|
|
{$define GDB_USES_EXPAT_LIB}
|
|
@@ -109,7 +103,6 @@ interface
|
|
{$ifdef GDB_V608}
|
|
{$ifdef GDB_V608}
|
|
{$info using gdb 6.8.x}
|
|
{$info using gdb 6.8.x}
|
|
{$define GDB_V6}
|
|
{$define GDB_V6}
|
|
- {$define GDB_HAS_DB_COMMANDS}
|
|
|
|
{$define GDB_USES_BP_LOCATION}
|
|
{$define GDB_USES_BP_LOCATION}
|
|
{$define GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
{$define GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
{$define GDB_NEEDS_NO_ERROR_INIT}
|
|
@@ -120,13 +113,41 @@ interface
|
|
{$define GDB_HAS_BP_NONE}
|
|
{$define GDB_HAS_BP_NONE}
|
|
{$endif def GDB_V608}
|
|
{$endif def GDB_V608}
|
|
|
|
|
|
|
|
+{ 7.4.x }
|
|
|
|
+{$ifdef GDB_V704}
|
|
|
|
+ {$info using gdb 7.4.x}
|
|
|
|
+ {$define GDB_V7}
|
|
|
|
+ {$define GDB_BP_LOCATION_HAS_GDBARCH}
|
|
|
|
+ {$define GDB_HAS_PROGRAM_SPACE}
|
|
|
|
+ {$define GDB_NO_UIOUT}
|
|
|
|
+ {$define GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
|
+ {$define GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+ {$define GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
|
|
+ {$define GDB_USES_BP_OPS}
|
|
|
|
+ {$define GDB_BP_TI_HAS_LENGTH}
|
|
|
|
+ {$define GDB_BP_LOCATION_HAS_REFCOUNT}
|
|
|
|
+ {$define GDB_BP_LOCATION_HAS_OPS}
|
|
|
|
+ {$define GDB_UI_FILE_HAS_WRITE_ASYNC}
|
|
|
|
+{$endif def GDB_V704}
|
|
|
|
+
|
|
{ 7.3.x }
|
|
{ 7.3.x }
|
|
{$ifdef GDB_V703}
|
|
{$ifdef GDB_V703}
|
|
{$info using gdb 7.3.x}
|
|
{$info using gdb 7.3.x}
|
|
{$define GDB_V7}
|
|
{$define GDB_V7}
|
|
{$define GDB_BP_LOCATION_HAS_GDBARCH}
|
|
{$define GDB_BP_LOCATION_HAS_GDBARCH}
|
|
{$define GDB_HAS_PROGRAM_SPACE}
|
|
{$define GDB_HAS_PROGRAM_SPACE}
|
|
-{$endif def GDB_V702}
|
|
|
|
|
|
+ {$define GDB_BP_TI_HAS_LENGTH}
|
|
|
|
+ {$define GDB_BP_LOCATION_HAS_REFCOUNT}
|
|
|
|
+ {$ifdef GDB_CVS}
|
|
|
|
+ {$define GDB_NO_UIOUT}
|
|
|
|
+ {$define GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
|
+ {$define GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+ {$define GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
|
|
+ {$define GDB_USES_BP_OPS}
|
|
|
|
+ {$define GDB_BP_LOCATION_HAS_OPS}
|
|
|
|
+ {$define GDB_UI_FILE_HAS_WRITE_ASYNC}
|
|
|
|
+ {$endif GDB_CVS}
|
|
|
|
+{$endif def GDB_V703}
|
|
|
|
|
|
{ 7.2.x }
|
|
{ 7.2.x }
|
|
{$ifdef GDB_V702}
|
|
{$ifdef GDB_V702}
|
|
@@ -448,8 +469,9 @@ interface
|
|
{$LINKLIB libintl.a}
|
|
{$LINKLIB libintl.a}
|
|
{$LINKLIB imagehlp}
|
|
{$LINKLIB imagehlp}
|
|
{$endif not USE_MINGW_GDB}
|
|
{$endif not USE_MINGW_GDB}
|
|
- {$LINKLIB kernel32}
|
|
|
|
|
|
+ {$LINKLIB advapi32}
|
|
{$LINKLIB user32}
|
|
{$LINKLIB user32}
|
|
|
|
+ {$LINKLIB kernel32}
|
|
{$endif win32}
|
|
{$endif win32}
|
|
|
|
|
|
{$ifdef win64}
|
|
{$ifdef win64}
|
|
@@ -588,9 +610,11 @@ type
|
|
type
|
|
type
|
|
|
|
|
|
pui_file = ^ui_file;
|
|
pui_file = ^ui_file;
|
|
|
|
+ pstdio_file = ^stdio_file;
|
|
|
|
|
|
ui_file_flush_ftype = procedure(stream : pui_file);cdecl;
|
|
ui_file_flush_ftype = procedure(stream : pui_file);cdecl;
|
|
ui_file_write_ftype = procedure(stream : pui_file;buf : pchar;len : longint);cdecl;
|
|
ui_file_write_ftype = procedure(stream : pui_file;buf : pchar;len : longint);cdecl;
|
|
|
|
+ ui_file_write_async_save_ftype = procedure(stream : pui_file;buf : pchar;len : longint);cdecl;
|
|
ui_file_fputs_ftype = procedure(buf : pchar; stream : pui_file);cdecl;
|
|
ui_file_fputs_ftype = procedure(buf : pchar; stream : pui_file);cdecl;
|
|
ui_file_delete_ftype = procedure(stream : pui_file);cdecl;
|
|
ui_file_delete_ftype = procedure(stream : pui_file);cdecl;
|
|
ui_file_isatty_ftype = function(stream : pui_file) : longbool;cdecl;
|
|
ui_file_isatty_ftype = function(stream : pui_file) : longbool;cdecl;
|
|
@@ -605,6 +629,9 @@ type
|
|
magic : plongint;
|
|
magic : plongint;
|
|
to_flush : ui_file_flush_ftype;
|
|
to_flush : ui_file_flush_ftype;
|
|
to_write : ui_file_write_ftype;
|
|
to_write : ui_file_write_ftype;
|
|
|
|
+ {$ifdef GDB_UI_FILE_HAS_WRITE_ASYNC}
|
|
|
|
+ to_write_async_safe : ui_file_write_async_save_ftype;
|
|
|
|
+ {$endif}
|
|
to_fputs : ui_file_fputs_ftype;
|
|
to_fputs : ui_file_fputs_ftype;
|
|
{$ifdef GDB_V6}
|
|
{$ifdef GDB_V6}
|
|
to_read : ui_file_read_ftype;
|
|
to_read : ui_file_read_ftype;
|
|
@@ -616,6 +643,13 @@ type
|
|
to_data : pointer;
|
|
to_data : pointer;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ stdio_file = record
|
|
|
|
+ magic : plongint;
|
|
|
|
+ _file : P_C_FILE;
|
|
|
|
+ df : longint;
|
|
|
|
+ close_p : longint;
|
|
|
|
+ end;
|
|
|
|
+
|
|
{ used to delete stdio_ui_file gdb_stdout and gdb_stderr }
|
|
{ used to delete stdio_ui_file gdb_stdout and gdb_stderr }
|
|
procedure ui_file_delete(stream : pui_file);cdecl;external;
|
|
procedure ui_file_delete(stream : pui_file);cdecl;external;
|
|
|
|
|
|
@@ -774,10 +808,16 @@ function inferior_pid : longint;
|
|
{$ifdef GDB_V6}
|
|
{$ifdef GDB_V6}
|
|
type
|
|
type
|
|
ui_out = pointer;
|
|
ui_out = pointer;
|
|
|
|
+{$ifndef GDB_NO_UIOUT}
|
|
var
|
|
var
|
|
uiout : ui_out;cvar;external;
|
|
uiout : ui_out;cvar;external;
|
|
|
|
+{$else GDB_NO_UIOUT}
|
|
|
|
+var
|
|
|
|
+ cli_uiout : ui_out;cvar;external;
|
|
|
|
+ current_uiout : ui_out;cvar;external;
|
|
|
|
+{$endif GDB_NO_UIOUT}
|
|
function cli_out_new (stream : pui_file):ui_out;cdecl;external;
|
|
function cli_out_new (stream : pui_file):ui_out;cdecl;external;
|
|
-{$endif}
|
|
|
|
|
|
+{$endif GDB_V6}
|
|
|
|
|
|
{$ifdef go32v2}
|
|
{$ifdef go32v2}
|
|
{ needed to be sure %fs contains the DOS memory selector
|
|
{ needed to be sure %fs contains the DOS memory selector
|
|
@@ -872,6 +912,13 @@ type
|
|
pCORE_ADDR = ^CORE_ADDR;
|
|
pCORE_ADDR = ^CORE_ADDR;
|
|
pblock = ^block;
|
|
pblock = ^block;
|
|
|
|
|
|
|
|
+ tframe_id = record
|
|
|
|
+ stack_addr, code_addr, special_addr : CORE_ADDR;
|
|
|
|
+ addr_p_flags : byte;{ for three 1 bit flags
|
|
|
|
+ stack_addr_p, code_addr_p, special_addr_p : cint : 1; }
|
|
|
|
+ inline_depth : longint;
|
|
|
|
+ end;
|
|
|
|
+
|
|
tlanguage = (language_unknown,language_auto,language_c,
|
|
tlanguage = (language_unknown,language_auto,language_c,
|
|
language_cplus,language_java,language_chill,
|
|
language_cplus,language_java,language_chill,
|
|
language_fortran,language_m2,language_asm,
|
|
language_fortran,language_m2,language_asm,
|
|
@@ -900,9 +947,18 @@ type
|
|
|
|
|
|
target_hw_bp_type = (hw_write, hw_read, hw_access, hw_execute);
|
|
target_hw_bp_type = (hw_write, hw_read, hw_access, hw_execute);
|
|
|
|
|
|
|
|
+ { pointer to structures that we don't need }
|
|
|
|
+ pbp_ops = pointer;
|
|
|
|
+ pbp_location_ops = pointer;
|
|
|
|
+ pprogram_space = pointer;
|
|
|
|
+ pgdbarch = pointer;
|
|
|
|
+
|
|
{$PACKRECORDS 4}
|
|
{$PACKRECORDS 4}
|
|
pbreakpoint = ^breakpoint;
|
|
pbreakpoint = ^breakpoint;
|
|
breakpoint = record
|
|
breakpoint = record
|
|
|
|
+{$ifdef GDB_USES_BP_OPS}
|
|
|
|
+ ops : pbp_ops;
|
|
|
|
+{$endif GDB_USES_BP_OPS}
|
|
next : pbreakpoint;
|
|
next : pbreakpoint;
|
|
typ : bptype;
|
|
typ : bptype;
|
|
enable : tenable;
|
|
enable : tenable;
|
|
@@ -913,19 +969,36 @@ type
|
|
{$else not GDB_USES_BP_LOCATION}
|
|
{$else not GDB_USES_BP_LOCATION}
|
|
address : CORE_ADDR;
|
|
address : CORE_ADDR;
|
|
{$endif not GDB_USES_BP_LOCATION}
|
|
{$endif not GDB_USES_BP_LOCATION}
|
|
|
|
+{$ifndef GDB_USES_BP_OPS}
|
|
line_number : longint;
|
|
line_number : longint;
|
|
source_file : pchar;
|
|
source_file : pchar;
|
|
|
|
+{$endif not GDB_USES_BP_OPS}
|
|
silent : byte;
|
|
silent : byte;
|
|
|
|
+{$ifdef GDB_USES_BP_OPS}
|
|
|
|
+ display_canonical: byte;
|
|
|
|
+{$endif GDB_USES_BP_OPS}
|
|
|
|
+
|
|
ignore_count : longint;
|
|
ignore_count : longint;
|
|
{$ifndef GDB_USES_BP_LOCATION}
|
|
{$ifndef GDB_USES_BP_LOCATION}
|
|
shadow_contents : array[0..15] of char;
|
|
shadow_contents : array[0..15] of char;
|
|
inserted : char;
|
|
inserted : char;
|
|
duplicate : char;
|
|
duplicate : char;
|
|
{$endif not GDB_USES_BP_LOCATION}
|
|
{$endif not GDB_USES_BP_LOCATION}
|
|
|
|
+
|
|
commands : pointer; {^command_line}
|
|
commands : pointer; {^command_line}
|
|
|
|
+{$ifdef GDB_USES_BP_OPS}
|
|
|
|
+ frame_id : tframe_id;
|
|
|
|
+ pspace : pprogram_space;
|
|
|
|
+{$else not GDB_USES_BP_OPS}
|
|
frame : CORE_ADDR;
|
|
frame : CORE_ADDR;
|
|
cond : pointer; {^expression}
|
|
cond : pointer; {^expression}
|
|
- addr_string : ^char;
|
|
|
|
|
|
+{$endif GDB_USES_BP_OPS}
|
|
|
|
+ addr_string : pchar;
|
|
|
|
+{$ifdef GDB_USES_BP_OPS}
|
|
|
|
+ filter : pchar;
|
|
|
|
+ addr_string_range_end : pchar;
|
|
|
|
+ gdbarch : pgdbarch;
|
|
|
|
+{$endif GDB_USES_BP_OPS}
|
|
language : tlanguage;
|
|
language : tlanguage;
|
|
input_radix : longint;
|
|
input_radix : longint;
|
|
cond_string : ^char;
|
|
cond_string : ^char;
|
|
@@ -944,6 +1017,9 @@ type
|
|
bp_target_info = record
|
|
bp_target_info = record
|
|
placed_address_space : pointer;{paddress_space;}
|
|
placed_address_space : pointer;{paddress_space;}
|
|
placed_address : CORE_ADDR;
|
|
placed_address : CORE_ADDR;
|
|
|
|
+{$ifdef GDB_BP_TI_HAS_LENGTH}
|
|
|
|
+ length : longint;
|
|
|
|
+{$endif GDB_BP_TI_HAS_LENGTH}
|
|
shadow_contents : array[0..15] of char;
|
|
shadow_contents : array[0..15] of char;
|
|
shadow_len : longint;
|
|
shadow_len : longint;
|
|
placed_size : longint;
|
|
placed_size : longint;
|
|
@@ -951,9 +1027,17 @@ type
|
|
|
|
|
|
bp_location = record
|
|
bp_location = record
|
|
next : pbp_location;
|
|
next : pbp_location;
|
|
|
|
+{$ifdef GDB_BP_LOCATION_HAS_OPS}
|
|
|
|
+ ops : pbp_location_ops;
|
|
|
|
+{$endif GDB_BP_LOCATION_HAS_OPS}
|
|
|
|
+
|
|
|
|
+{$ifdef GDB_BP_LOCATION_HAS_REFCOUNT}
|
|
|
|
+ refc : longint;
|
|
|
|
+{$else}
|
|
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
global_next : pbp_location;
|
|
global_next : pbp_location;
|
|
{$endif GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
{$endif GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
|
|
+{$endif}
|
|
loc_type : bp_loc_type;
|
|
loc_type : bp_loc_type;
|
|
owner : pbreakpoint;
|
|
owner : pbreakpoint;
|
|
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
@@ -964,10 +1048,10 @@ type
|
|
inserted : byte;
|
|
inserted : byte;
|
|
duplicate : byte;
|
|
duplicate : byte;
|
|
{$ifdef GDB_BP_LOCATION_HAS_GDBARCH}
|
|
{$ifdef GDB_BP_LOCATION_HAS_GDBARCH}
|
|
- gdbarch : pointer;{pgdbarch;}
|
|
|
|
|
|
+ gdbarch : pgdbarch;
|
|
{$endif GDB_BP_LOCATION_HAS_GDBARCH}
|
|
{$endif GDB_BP_LOCATION_HAS_GDBARCH}
|
|
{$ifdef GDB_HAS_PROGRAM_SPACE}
|
|
{$ifdef GDB_HAS_PROGRAM_SPACE}
|
|
- pspace : pointer;{pprogram_space;}
|
|
|
|
|
|
+ pspace : pprogram_space;
|
|
{$endif GDB_HAS_PROGRAM_SPACE}
|
|
{$endif GDB_HAS_PROGRAM_SPACE}
|
|
address : CORE_ADDR;
|
|
address : CORE_ADDR;
|
|
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
|
|
@@ -982,6 +1066,11 @@ type
|
|
target_info : bp_target_info;
|
|
target_info : bp_target_info;
|
|
overlay_target_info : bp_target_info;
|
|
overlay_target_info : bp_target_info;
|
|
events_till_retirement : longint;
|
|
events_till_retirement : longint;
|
|
|
|
+{$ifdef GDB_USES_BP_OPS}
|
|
|
|
+ { line and source file are in location }
|
|
|
|
+ line_number : longint;
|
|
|
|
+ source_file : pchar;
|
|
|
|
+{$endif not GDB_USES_BP_OPS}
|
|
end;
|
|
end;
|
|
|
|
|
|
tfreecode=(free_nothing,free_contents,free_linetable);
|
|
tfreecode=(free_nothing,free_contents,free_linetable);
|
|
@@ -1491,7 +1580,9 @@ var
|
|
{$endif ndef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
|
|
{$endif ndef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
|
|
current_target : target_ops;cvar;external;
|
|
current_target : target_ops;cvar;external;
|
|
stop_pc : CORE_ADDR;cvar;external;
|
|
stop_pc : CORE_ADDR;cvar;external;
|
|
- { Only used from GDB 5.01 but doesn't hurst otherwise }
|
|
|
|
|
|
+ { Only used from GDB 5.0 but doesn't hurst otherwise }
|
|
|
|
+ { This global variable is declared in defs.h as external
|
|
|
|
+ and instanciated in main.c since version 5.0. }
|
|
interpreter_p : pchar;cvar;public;
|
|
interpreter_p : pchar;cvar;public;
|
|
|
|
|
|
{ we need also to declare some vars }
|
|
{ we need also to declare some vars }
|
|
@@ -1505,13 +1596,22 @@ var
|
|
|
|
|
|
{ Whether xdb commands will be handled }
|
|
{ Whether xdb commands will be handled }
|
|
{$ifdef GDB_HAS_DB_COMMANDS}
|
|
{$ifdef GDB_HAS_DB_COMMANDS}
|
|
|
|
+ { These two global variables are declared in defs.h
|
|
|
|
+ since version 4.18 }
|
|
xdb_commands : longint;cvar;public;
|
|
xdb_commands : longint;cvar;public;
|
|
|
|
|
|
{ Whether dbx commands will be handled }
|
|
{ Whether dbx commands will be handled }
|
|
dbx_commands : longint;cvar;public;
|
|
dbx_commands : longint;cvar;public;
|
|
{$endif GDB_HAS_DB_COMMANDS}
|
|
{$endif GDB_HAS_DB_COMMANDS}
|
|
|
|
|
|
|
|
+{$ifdef GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+var
|
|
|
|
+ instream : P_C_FILE;cvar;external;
|
|
|
|
+ function gdb_fopen (filename : pchar; mode : pchar) : pui_file;cdecl;external;
|
|
|
|
+{$endif GDB_NEEDS_SET_INSTREAM}
|
|
var
|
|
var
|
|
|
|
+ { The four following variables are defined in defs.h
|
|
|
|
+ and instanciated in main.c since version 5.0 }
|
|
gdb_stdout : pui_file;cvar;public;
|
|
gdb_stdout : pui_file;cvar;public;
|
|
gdb_stderr : pui_file;cvar;public;
|
|
gdb_stderr : pui_file;cvar;public;
|
|
gdb_stdlog : pui_file;cvar;public;
|
|
gdb_stdlog : pui_file;cvar;public;
|
|
@@ -1519,6 +1619,9 @@ var
|
|
event_loop_p : longint;cvar;public;
|
|
event_loop_p : longint;cvar;public;
|
|
{$ifdef GDB_V6}
|
|
{$ifdef GDB_V6}
|
|
(* target IO streams *)
|
|
(* target IO streams *)
|
|
|
|
+ { The three following variables are declared in defs.h
|
|
|
|
+ and instanciated in main.c since version 6.0 }
|
|
|
|
+ gdb_stdin : pui_file;cvar;public;
|
|
gdb_stdtargin : pui_file;cvar;public;
|
|
gdb_stdtargin : pui_file;cvar;public;
|
|
gdb_stdtargerr : pui_file;cvar;public;
|
|
gdb_stdtargerr : pui_file;cvar;public;
|
|
{$endif}
|
|
{$endif}
|
|
@@ -2461,7 +2564,12 @@ begin
|
|
last_breakpoint_number:=b.number;
|
|
last_breakpoint_number:=b.number;
|
|
{ function breakpoints have zero as file and as line !!
|
|
{ function breakpoints have zero as file and as line !!
|
|
but they are valid !! }
|
|
but they are valid !! }
|
|
|
|
+{$ifndef GDB_USES_BP_OPS}
|
|
invalid_breakpoint_line:=(b.line_number<>sym.line) and (b.line_number<>0);
|
|
invalid_breakpoint_line:=(b.line_number<>sym.line) and (b.line_number<>0);
|
|
|
|
+{$else GDB_USES_BP_OPS}
|
|
|
|
+ invalid_breakpoint_line:=(b.loc=nil) or
|
|
|
|
+ ((b.loc^.line_number<>sym.line) and (b.loc^.line_number<>0));
|
|
|
|
+{$endif GDB_USES_BP_OPS}
|
|
{$ifdef GDB_USES_BP_LOCATION}
|
|
{$ifdef GDB_USES_BP_LOCATION}
|
|
if assigned (b.loc) then
|
|
if assigned (b.loc) then
|
|
last_breakpoint_address:=b.loc^.address
|
|
last_breakpoint_address:=b.loc^.address
|
|
@@ -2481,7 +2589,11 @@ end;
|
|
{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
|
|
{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
|
|
|
|
|
|
type
|
|
type
|
|
|
|
+{$ifdef GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
|
|
+ breakpoint_created_function_type = procedure (bpp : pbreakpoint); cdecl;
|
|
|
|
+{$else not GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
breakpoint_created_function_type = procedure (bpnum : longint); cdecl;
|
|
breakpoint_created_function_type = procedure (bpnum : longint); cdecl;
|
|
|
|
+{$endif not GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
pobserver = pointer;
|
|
pobserver = pointer;
|
|
var
|
|
var
|
|
breakpoint_created_observer : pobserver = nil;
|
|
breakpoint_created_observer : pobserver = nil;
|
|
@@ -2489,8 +2601,14 @@ var
|
|
function observer_attach_breakpoint_created(create_func : breakpoint_created_function_type) : pobserver;cdecl;external;
|
|
function observer_attach_breakpoint_created(create_func : breakpoint_created_function_type) : pobserver;cdecl;external;
|
|
procedure observer_detach_breakpoint_created(pob : pobserver);cdecl;external;
|
|
procedure observer_detach_breakpoint_created(pob : pobserver);cdecl;external;
|
|
|
|
|
|
-var breakpoint_chain : pbreakpoint ;cvar;external;
|
|
|
|
|
|
|
|
|
|
+{$ifdef GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
|
|
+procedure notify_breakpoint_created(bpp : pbreakpoint); cdecl;
|
|
|
|
+begin
|
|
|
|
+ CreateBreakpointHook(bpp^);
|
|
|
|
+end;
|
|
|
|
+{$else not GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
|
|
+var breakpoint_chain : pbreakpoint ;cvar;external;
|
|
|
|
|
|
procedure notify_breakpoint_created(bpnum : longint);cdecl;
|
|
procedure notify_breakpoint_created(bpnum : longint);cdecl;
|
|
var
|
|
var
|
|
@@ -2508,6 +2626,7 @@ begin
|
|
pb:=pb^.next;
|
|
pb:=pb^.next;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
+{$endif not GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR}
|
|
{$endif def GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
|
|
{$endif def GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
|
|
|
|
|
|
{ Avoid loading of main.o object by providing a
|
|
{ Avoid loading of main.o object by providing a
|
|
@@ -2545,7 +2664,7 @@ begin
|
|
gdb_command('set print object on');
|
|
gdb_command('set print object on');
|
|
gdb_command('set print null-stop');
|
|
gdb_command('set print null-stop');
|
|
{$ifdef USE_MINGW_GDB} // maybe this also should be done for newer cygwin gdbs.
|
|
{$ifdef USE_MINGW_GDB} // maybe this also should be done for newer cygwin gdbs.
|
|
- gdb_command('set confirm off');
|
|
|
|
|
|
+ //gdb_command('set confirm off');
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -2626,9 +2745,9 @@ end;
|
|
var
|
|
var
|
|
top_level_val : longint;
|
|
top_level_val : longint;
|
|
|
|
|
|
-function catch_errors(func : pointer; command : pchar; from_tty,mask : longint) : longint;cdecl;external;
|
|
|
|
|
|
+function catch_command_errors(func : pointer; command : pchar; from_tty,mask : longint) : longint;cdecl;external;
|
|
|
|
|
|
-function gdbint_execute_command(command : pchar; from_tty,mask : longint) : longint;cdecl;
|
|
|
|
|
|
+function gdbint_execute_command(command : pchar; from_tty : longint) : longint;cdecl;
|
|
begin
|
|
begin
|
|
gdbint_execute_command:=1;
|
|
gdbint_execute_command:=1;
|
|
execute_command(command,from_tty);
|
|
execute_command(command,from_tty);
|
|
@@ -2675,6 +2794,8 @@ function MaskAllFPUExceptions(control : TFPUState) : TFPUState;
|
|
begin
|
|
begin
|
|
{$ifdef cpui386}
|
|
{$ifdef cpui386}
|
|
MaskAllFPUExceptions := control or MaskAllExceptions;
|
|
MaskAllFPUExceptions := control or MaskAllExceptions;
|
|
|
|
+{$else}
|
|
|
|
+ MaskAllFPUExceptions:=0;
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -2733,7 +2854,8 @@ begin
|
|
begin
|
|
begin
|
|
quit_return:=error_return;
|
|
quit_return:=error_return;
|
|
mask:=longint($ffffffff);
|
|
mask:=longint($ffffffff);
|
|
- catch_errors(@gdbint_execute_command,@command,0,mask);
|
|
|
|
|
|
+ catch_command_errors(@gdbint_execute_command,@command,
|
|
|
|
+ 1,mask);
|
|
{$ifdef go32v2}
|
|
{$ifdef go32v2}
|
|
reload_fs;
|
|
reload_fs;
|
|
{$endif go32v2}
|
|
{$endif go32v2}
|
|
@@ -3021,6 +3143,12 @@ var
|
|
current_directory : pchar; cvar; external;
|
|
current_directory : pchar; cvar; external;
|
|
gdb_dirbuf : array[0..0] of char; cvar; external;
|
|
gdb_dirbuf : array[0..0] of char; cvar; external;
|
|
CurrentDir : AnsiString;
|
|
CurrentDir : AnsiString;
|
|
|
|
+{$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;
|
|
|
|
+{$endif GDB_NEEDS_INTERPRETER_SETUP}
|
|
const
|
|
const
|
|
DIRBUF_SIZE = 1024;
|
|
DIRBUF_SIZE = 1024;
|
|
|
|
|
|
@@ -3029,10 +3157,23 @@ procedure InitLibGDB;
|
|
var
|
|
var
|
|
OldSigInt : SignalHandler;
|
|
OldSigInt : SignalHandler;
|
|
{$endif supportexceptions}
|
|
{$endif supportexceptions}
|
|
|
|
+{$ifdef GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+var
|
|
|
|
+ dummy_file : pui_file;
|
|
|
|
+{$endif GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+
|
|
{$ifdef GDB_INIT_HAS_ARGV0}
|
|
{$ifdef GDB_INIT_HAS_ARGV0}
|
|
var
|
|
var
|
|
argv0 : pchar;
|
|
argv0 : pchar;
|
|
{$endif not GDB_INIT_HAS_ARGV0}
|
|
{$endif not GDB_INIT_HAS_ARGV0}
|
|
|
|
+{$ifdef GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
|
+var
|
|
|
|
+ interp : interpreter_struct_p;
|
|
|
|
+{$endif GDB_NEEDS_INTERPRETER_SETUP}
|
|
|
|
+var
|
|
|
|
+ save_gdb_stdin,
|
|
|
|
+ save_gdb_stdout,
|
|
|
|
+ save_gdb_stderr : pui_file;
|
|
begin
|
|
begin
|
|
{$ifdef go32v2}
|
|
{$ifdef go32v2}
|
|
{ c_environ:=system.envp; }
|
|
{ c_environ:=system.envp; }
|
|
@@ -3057,8 +3198,25 @@ begin
|
|
ui_file_delete(gdb_stderr);
|
|
ui_file_delete(gdb_stderr);
|
|
if assigned(gdb_stdout) then
|
|
if assigned(gdb_stdout) then
|
|
ui_file_delete(gdb_stdout);
|
|
ui_file_delete(gdb_stdout);
|
|
|
|
+{$ifdef GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+ if assigned(gdb_stdin) then
|
|
|
|
+ ui_file_delete(gdb_stdin);
|
|
|
|
+ gdb_stdin:=mem_fileopen;
|
|
|
|
+ save_gdb_stdin:=gdb_stdin;
|
|
|
|
+ dummy_file :=gdb_fopen('dummy.$$$','a');
|
|
|
|
+ {in captured_main code, this is simply
|
|
|
|
+ instream:=stdin; but stdin is a highly system dependent macro
|
|
|
|
+ so that we try to avoid it here }
|
|
|
|
+ if assigned(dummy_file) then
|
|
|
|
+ instream:=pstdio_file(dummy_file^.to_data)^._file
|
|
|
|
+ else
|
|
|
|
+ instream:=nil;
|
|
|
|
+{$endif GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+
|
|
gdb_stderr:=mem_fileopen;
|
|
gdb_stderr:=mem_fileopen;
|
|
gdb_stdout:=mem_fileopen;
|
|
gdb_stdout:=mem_fileopen;
|
|
|
|
+ save_gdb_stderr:=gdb_stderr;
|
|
|
|
+ save_gdb_stdout:=gdb_stdout;
|
|
gdb_stdlog:=gdb_stderr;
|
|
gdb_stdlog:=gdb_stderr;
|
|
gdb_stdtarg:=gdb_stderr;
|
|
gdb_stdtarg:=gdb_stderr;
|
|
set_ui_file_write(gdb_stdout,@gdbint_ui_file_write);
|
|
set_ui_file_write(gdb_stdout,@gdbint_ui_file_write);
|
|
@@ -3067,7 +3225,9 @@ begin
|
|
error_init;
|
|
error_init;
|
|
{$endif GDB_NEEDS_NO_ERROR_INIT}
|
|
{$endif GDB_NEEDS_NO_ERROR_INIT}
|
|
{$ifdef GDB_V6}
|
|
{$ifdef GDB_V6}
|
|
-// gdb_stdtargin := gdb_stdin;
|
|
|
|
|
|
+{$ifdef GDB_NEEDS_SET_INSTREAM}
|
|
|
|
+ gdb_stdtargin := gdb_stdin;
|
|
|
|
+{$endif GDB_NEEDS_SET_INSTREAM}
|
|
gdb_stdtargerr := gdb_stderr;
|
|
gdb_stdtargerr := gdb_stderr;
|
|
{$endif}
|
|
{$endif}
|
|
GetDir(0, CurrentDir);
|
|
GetDir(0, CurrentDir);
|
|
@@ -3079,8 +3239,10 @@ begin
|
|
next_exit:=exitproc;
|
|
next_exit:=exitproc;
|
|
exitproc:=@DoneLibGDB;
|
|
exitproc:=@DoneLibGDB;
|
|
{$ifdef GDB_V6}
|
|
{$ifdef GDB_V6}
|
|
|
|
+{$ifndef GDB_NO_UIOUT}
|
|
uiout := cli_out_new (gdb_stdout);
|
|
uiout := cli_out_new (gdb_stdout);
|
|
-{$endif}
|
|
|
|
|
|
+{$endif not GDB_NO_UIOUT}
|
|
|
|
+{$endif GDB_V6}
|
|
{$ifdef GDB_INIT_HAS_ARGV0}
|
|
{$ifdef GDB_INIT_HAS_ARGV0}
|
|
getmem(argv0,length(paramstr(0))+1);
|
|
getmem(argv0,length(paramstr(0))+1);
|
|
strpcopy(argv0,paramstr(0));
|
|
strpcopy(argv0,paramstr(0));
|
|
@@ -3089,6 +3251,31 @@ begin
|
|
{$else not GDB_INIT_HAS_ARGV0}
|
|
{$else not GDB_INIT_HAS_ARGV0}
|
|
gdb_init;
|
|
gdb_init;
|
|
{$endif not GDB_INIT_HAS_ARGV0}
|
|
{$endif not GDB_INIT_HAS_ARGV0}
|
|
|
|
+{$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);
|
|
|
|
+
|
|
|
|
+ { We need to re-set gdb_stdXX ui_files }
|
|
|
|
+ if assigned(gdb_stderr) then
|
|
|
|
+ ui_file_delete(gdb_stderr);
|
|
|
|
+ if assigned(gdb_stdout) then
|
|
|
|
+ ui_file_delete(gdb_stdout);
|
|
|
|
+ if assigned(gdb_stdin) then
|
|
|
|
+ ui_file_delete(gdb_stdin);
|
|
|
|
+ gdb_stdin:=save_gdb_stdin;
|
|
|
|
+ gdb_stderr:=save_gdb_stderr;
|
|
|
|
+ gdb_stdout:=save_gdb_stdout;
|
|
|
|
+ gdb_stdlog:=gdb_stderr;
|
|
|
|
+ gdb_stdtarg:=gdb_stderr;
|
|
|
|
+ set_ui_file_write(gdb_stdout,@gdbint_ui_file_write);
|
|
|
|
+ set_ui_file_write(gdb_stderr,@gdbint_ui_file_write);
|
|
|
|
+{$ifdef GDB_NO_UIOUT}
|
|
|
|
+ cli_uiout := cli_out_new (gdb_stdout);
|
|
|
|
+ current_uiout:=cli_uiout;
|
|
|
|
+{$endif GDB_NO_UIOUT}
|
|
|
|
+{$endif GDB_NEEDS_INTERPRETER_SETUP}
|
|
{$ifdef supportexceptions}
|
|
{$ifdef supportexceptions}
|
|
{$ifdef unix}
|
|
{$ifdef unix}
|
|
fpsignal(SIGINT,OldSigInt);
|
|
fpsignal(SIGINT,OldSigInt);
|
|
@@ -3114,14 +3301,34 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
{$ifdef GDB_HAS_SYSROOT}
|
|
{$ifdef GDB_HAS_SYSROOT}
|
|
-var gdb_sysroot : pchar; cvar;public;
|
|
|
|
|
|
+ { Here we declare as cvar;public; a bunch of global
|
|
|
|
+ variables that are defined in main.c source.
|
|
|
|
+ We must not load main.o otherwise, we will get
|
|
|
|
+ into multiply defined symbols troubles. }
|
|
|
|
+var
|
|
|
|
+ gdb_sysrootc : char;
|
|
|
|
+ { used locally only to provide a pchar pointing to '\0' }
|
|
|
|
+ gdb_sysroot : pchar; cvar;public;
|
|
|
|
+ { gdb_sysroot global variable is declared in defs.h and
|
|
|
|
+ instanciated in main.c since version 6.0 }
|
|
gdb_datadir : pchar; cvar;public;
|
|
gdb_datadir : pchar; cvar;public;
|
|
|
|
+ { gdb_datadir global variable is declared in defs.h and
|
|
|
|
+ instanciated in main.c since version 7.0 }
|
|
python_libdir : pchar;cvar;public;
|
|
python_libdir : pchar;cvar;public;
|
|
- gdb_sysrootc : char;
|
|
|
|
|
|
+ { python_libdir global variable is declared in defs.h and instanciated
|
|
|
|
+ in main.c since version 7.2 }
|
|
return_child_result : longbool;cvar;public;
|
|
return_child_result : longbool;cvar;public;
|
|
|
|
+ { return_chlid_result global variable is declared in main.h and
|
|
|
|
+ instanciated in main.c since version 6.4 }
|
|
return_child_result_value : longint;cvar;public;
|
|
return_child_result_value : longint;cvar;public;
|
|
|
|
+ { return_child_result_value global variable is declared in main.h and
|
|
|
|
+ instanciated in main.c since version 6.4 with a startup value of -1 }
|
|
batch_silent : longbool;cvar;public;
|
|
batch_silent : longbool;cvar;public;
|
|
|
|
+ { batch_silent global variable is declared in main.h since 7.0, but
|
|
|
|
+ instanciated in main.c since version 6.4 }
|
|
batch_flag : longbool;cvar;public;
|
|
batch_flag : longbool;cvar;public;
|
|
|
|
+ { batch_flag global variable is declared in main.h and
|
|
|
|
+ instanciated in main.c since version 7.2 }
|
|
{$endif}
|
|
{$endif}
|
|
{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
|
|
{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
|
|
var
|
|
var
|
|
@@ -3131,6 +3338,7 @@ var
|
|
begin
|
|
begin
|
|
{$ifdef GDB_HAS_SYSROOT}
|
|
{$ifdef GDB_HAS_SYSROOT}
|
|
gdb_sysrootc := #0;
|
|
gdb_sysrootc := #0;
|
|
|
|
+ return_child_result_value := -1;
|
|
gdb_sysroot := @gdb_sysrootc;
|
|
gdb_sysroot := @gdb_sysrootc;
|
|
gdb_datadir := @gdb_sysrootc;
|
|
gdb_datadir := @gdb_sysrootc;
|
|
python_libdir := @gdb_sysrootc;
|
|
python_libdir := @gdb_sysrootc;
|