* move smartlink off to before interface

* Reorganize ifdef GDB_VXYZ part
  + Add code for LIBGDB_HAS_GET_STDIN (possibly set in gen-gdblib-inc.sh script).
  + Use GDB_USE_XSTRVPRINTF conditional.

git-svn-id: trunk@23660 -
This commit is contained in:
pierre 2013-02-25 16:28:10 +00:00
parent 3b1465f314
commit f095c98e76

View File

@ -14,6 +14,7 @@
unit GdbInt; unit GdbInt;
{$mode objfpc} {$mode objfpc}
{$smartlink off}
{$define NotImplemented} {$define NotImplemented}
@ -39,94 +40,46 @@ unit GdbInt;
interface interface
{$smartlink off}
{ Is create_breakpoint_hook deprecated? } { Is create_breakpoint_hook deprecated? }
{ Seem not so for 6.1 } { Seem not so for 6.1 }
{$define GDB_HAS_DEPRECATED_CBPH} {$define GDB_HAS_DEPRECATED_CBPH}
{ 6.1.x }
{$ifdef GDB_V601}
{$info using gdb 6.1.x}
{$define GDB_V6}
{$undef GDB_HAS_DEPRECATED_CBPH}
{$endif def GDB_V601}
{ 6.2.x } {
{$ifdef GDB_V602} Excatly one
{$info using gdb 6.2.x} GDB_VXYZ macro
{$define GDB_V6} where XYZ are three numbers
{$endif def GDB_V602} needs to defined
either inside gdblib.inc or gdbver.inc
This corresponds to version
X.YZ.patch_level
}
{ 6.3.x } {$undef GDB_VERSION_RECOGNIZED}
{$ifdef GDB_V603}
{$info using gdb 6.3.x}
{$define GDB_V6}
{$endif def GDB_V603}
{ 6.4.x }
{$ifdef GDB_V604}
{$info using gdb 6.4.x}
{$define GDB_V6}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$endif def GDB_V604}
{ 6.5.x }
{$ifdef GDB_V605}
{$info using gdb 6.5.x}
{$define GDB_V6}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$endif def GDB_V605}
{ 6.6.x }
{$ifdef GDB_V606}
{$info using gdb 6.6.x}
{$define GDB_V6}
{$define GDB_USES_BP_LOCATION}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{this was wrong, 6.6 doesn't have debug_file_directory }
{ was define GDB_HAS_DEBUG_FILE_DIRECTORY}
{$endif def GDB_V606}
{ 6.7.x }
{$ifdef GDB_V607}
{$info using gdb 6.7.x}
{$define GDB_V6}
{$define GDB_USES_BP_LOCATION}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
{$endif def GDB_V607}
{ 6.8.x }
{$ifdef GDB_V608}
{$info using gdb 6.8.x}
{$define GDB_V6}
{$define GDB_USES_BP_LOCATION}
{$define GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
{$define GDB_USES_LIBDECNUMBER}
// {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
{$define GDB_HAS_BP_NONE}
{$endif def GDB_V608}
{ 7.5.x }
{$ifdef GDB_V705} {$ifdef GDB_V705}
{$define GDB_V_704} {$info using gdb 7.5.x}
{$define GDB_BO_LOCATION_HAS_COND_BYTECODE} {$define GDB_VERSION_RECOGNIZED}
{$define GDB_VER_GE_705}
{$endif}
{$ifdef GDB_VER_GE_705}
{$define GDB_VER_GE_704}
{$define GDB_BP_LOCATION_HAS_COND_BYTECODE}
{$define GDB_BP_LOCATION_HAS_RELATED_ADDRESS} {$define GDB_BP_LOCATION_HAS_RELATED_ADDRESS}
{$endif} {$endif}
{ 7.4.x } { 7.4.x }
{$ifdef GDB_V704} {$ifdef GDB_V704}
{$info using gdb 7.4.x} {$info using gdb 7.4.x}
{$define GDB_V_704} {$define GDB_VERSION_RECOGNIZED}
{$define GDB_VER_GE_704}
{$endif} {$endif}
{$ifdef GDB_V_704} {$ifdef GDB_VER_GE_704}
{$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}
@ -142,11 +95,12 @@ interface
{$ifdef win32} {$ifdef win32}
{$define GDB_USES_LIBADVAPI32} {$define GDB_USES_LIBADVAPI32}
{$endif win32} {$endif win32}
{$endif def GDB_V704} {$endif def GDB_VER_GE_704}
{ 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_VERSION_RECOGNIZED}
{$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}
@ -161,11 +115,13 @@ interface
{$define GDB_BP_LOCATION_HAS_OPS} {$define GDB_BP_LOCATION_HAS_OPS}
{$define GDB_UI_FILE_HAS_WRITE_ASYNC} {$define GDB_UI_FILE_HAS_WRITE_ASYNC}
{$endif GDB_CVS} {$endif GDB_CVS}
{$define GDB_VERSION_RECOGNIZED}
{$endif def GDB_V703} {$endif def GDB_V703}
{ 7.2.x } { 7.2.x }
{$ifdef GDB_V702} {$ifdef GDB_V702}
{$info using gdb 7.2.x} {$info using gdb 7.2.x}
{$define GDB_VERSION_RECOGNIZED}
{$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}
@ -174,6 +130,7 @@ interface
{ 7.1.x } { 7.1.x }
{$ifdef GDB_V701} {$ifdef GDB_V701}
{$info using gdb 7.1.x} {$info using gdb 7.1.x}
{$define GDB_VERSION_RECOGNIZED}
{$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}
@ -184,6 +141,7 @@ interface
{ 7.0.x } { 7.0.x }
{$ifdef GDB_V700} {$ifdef GDB_V700}
{$info using gdb 7.0.x} {$info using gdb 7.0.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V7} {$define GDB_V7}
{$ifdef GDB_CVS} {$ifdef GDB_CVS}
{$define GDB_BP_LOCATION_HAS_GDBARCH} {$define GDB_BP_LOCATION_HAS_GDBARCH}
@ -208,9 +166,92 @@ interface
{$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED} {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
{$define GDB_TARGET_CLOSE_HAS_PTARGET_ARG} {$define GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
{$define GDB_HAS_BP_NONE} {$define GDB_HAS_BP_NONE}
{$define GDB_USE_XSTRVPRINTF}
{$endif def GDB_V7} {$endif def GDB_V7}
{ 6.8.x }
{$ifdef GDB_V608}
{$info using gdb 6.8.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$define GDB_USES_BP_LOCATION}
{$define GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
{$define GDB_USES_LIBDECNUMBER}
// {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
{$define GDB_HAS_BP_NONE}
{$endif def GDB_V608}
{ 6.7.x }
{$ifdef GDB_V607}
{$info using gdb 6.7.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$define GDB_USES_BP_LOCATION}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
{$endif def GDB_V607}
{ 6.6.x }
{$ifdef GDB_V606}
{$info using gdb 6.6.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$define GDB_USES_BP_LOCATION}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
{$endif def GDB_V606}
{ 6.5.x }
{$ifdef GDB_V605}
{$info using gdb 6.5.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$endif def GDB_V605}
{ 6.4.x }
{$ifdef GDB_V604}
{$info using gdb 6.4.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$define GDB_NEEDS_NO_ERROR_INIT}
{$endif def GDB_V604}
{ 6.3.x }
{$ifdef GDB_V603}
{$info using gdb 6.3.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$endif def GDB_V603}
{ 6.2.x }
{$ifdef GDB_V602}
{$info using gdb 6.2.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$endif def GDB_V602}
{ 6.1.x }
{$ifdef GDB_V601}
{$info using gdb 6.1.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$undef GDB_HAS_DEPRECATED_CBPH}
{$endif def GDB_V601}
{ 6.0.x }
{$ifdef GDB_V600}
{$info using gdb 6.0.x}
{$define GDB_VERSION_RECOGNIZED}
{$define GDB_V6}
{$endif def GDB_V600}
{$ifdef GDB_V6} {$ifdef GDB_V6}
{$define GDB_HAS_SYSROOT} {$define GDB_HAS_SYSROOT}
{$define GDB_HAS_DB_COMMANDS} {$define GDB_HAS_DB_COMMANDS}
@ -218,6 +259,10 @@ interface
{$define GDB_INIT_HAS_ARGV0} {$define GDB_INIT_HAS_ARGV0}
{$endif GDB_V6} {$endif GDB_V6}
{$ifdef GDB_VERSION_RECOGNIZED}
{$warning no recognized GDB_VXYZ conditional found, linking might fail. }
{$endif}
{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED} {$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
{$define DO_NOT_USE_CBPH} {$define DO_NOT_USE_CBPH}
@ -437,9 +482,9 @@ interface
{$ifdef NotImplemented} {$ifdef NotImplemented}
{$undef NotImplemented} {$undef NotImplemented}
{$LINKLIB libgdb.a} {$LINKLIB libgdb.a}
{$ifdef GDB_HAS_SIM} {$ifdef GDB_HAS_SIM}
{$LINKLIB libsim.a} {$LINKLIB libsim.a}
{$endif GDB_HAS_SIM} {$endif GDB_HAS_SIM}
{$LINKLIB libbfd.a} {$LINKLIB libbfd.a}
{$LINKLIB libreadline.a} {$LINKLIB libreadline.a}
{$LINKLIB libopcodes.a} {$LINKLIB libopcodes.a}
@ -1063,7 +1108,7 @@ type
owner : pbreakpoint; owner : pbreakpoint;
{$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT} {$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT}
cond : pointer;{pexpression;} cond : pointer;{pexpression;}
{$ifdef GDB_BO_LOCATION_HAS_COND_BYTECODE} {$ifdef GDB_BP_LOCATION_HAS_COND_BYTECODE}
cond_bytecode : pagent_expr; cond_bytecode : pagent_expr;
condition_changed : tcondition_status; condition_changed : tcondition_status;
cmd_bytecode : pagent_expr; cmd_bytecode : pagent_expr;
@ -1641,9 +1686,17 @@ var
var var
instream : P_C_FILE;cvar;external; instream : P_C_FILE;cvar;external;
function gdb_fopen (filename : pchar; mode : pchar) : pui_file;cdecl;external; function gdb_fopen (filename : pchar; mode : pchar) : pui_file;cdecl;external;
{$ifdef LIBGDB_HAS_GET_STDIN}
{ 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;
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}
{$endif GDB_NEEDS_SET_INSTREAM} {$endif GDB_NEEDS_SET_INSTREAM}
var var
{ The four following variables are defined in defs.h { The four following variables are defined in defs.h
and instanciated in main.c since version 5.0 } 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;
@ -1665,7 +1718,11 @@ function xmalloc(size : longint) : pointer;cdecl;external;
{ xvasprintf is present at least from GDB 5.3 { xvasprintf is present at least from GDB 5.3
while xstrvprintf only appears in version 6.2, while xstrvprintf only appears in version 6.2,
so only use xvasprintf function } so only use xvasprintf function }
{$ifdef GDB_USE_XSTRVPRINTF}
function xstrvprintf(msg : pchar) : pchar; varargs; cdecl; external;
{$else}
function xvasprintf(ret : ppchar; msg : pchar) : pchar; varargs; cdecl; external; function xvasprintf(ret : ppchar; msg : pchar) : pchar; varargs; cdecl; external;
{$endif}
procedure xfree(p : pointer); cdecl; external; procedure xfree(p : pointer); cdecl; external;
function find_pc_line(i:CORE_ADDR;l:longint):symtab_and_line;cdecl;external; function find_pc_line(i:CORE_ADDR;l:longint):symtab_and_line;cdecl;external;
function find_pc_function(i:CORE_ADDR):psymbol;cdecl;external; function find_pc_function(i:CORE_ADDR):psymbol;cdecl;external;
@ -2047,6 +2104,13 @@ begin
stop_breakpoint_number:=num; stop_breakpoint_number:=num;
end; end;
procedure annotate_breakpoints_changed;cdecl;public;
begin
{$ifdef Verbose}
Debug('|breakpoints_changed|');
{$endif}
end;
procedure annotate_watchpoint(num:longint);cdecl;public; procedure annotate_watchpoint(num:longint);cdecl;public;
begin begin
@ -2553,7 +2617,11 @@ begin
QueryHook:=1 QueryHook:=1
else if pos('%',question)>0 then else if pos('%',question)>0 then
begin begin
{$ifdef GDB_USE_XSTRVPRINTF}
local:=xstrvprintf(question,arg);
{$else}
xvasprintf(@local,question,arg); xvasprintf(@local,question,arg);
{$endif}
{ xvasprintf can failed, in that case local is set to nil } { xvasprintf can failed, in that case local is set to nil }
if not assigned(local) then if not assigned(local) then
local:=question; local:=question;
@ -3236,6 +3304,10 @@ begin
ui_file_delete(gdb_stdin); ui_file_delete(gdb_stdin);
gdb_stdin:=mem_fileopen; gdb_stdin:=mem_fileopen;
save_gdb_stdin:=gdb_stdin; save_gdb_stdin:=gdb_stdin;
{$ifdef LIBGDB_HAS_GET_STDIN}
instream:=gdb_get_stdin;
saved_command_line:=xmalloc(saved_command_line_size);
{$else}
dummy_file :=gdb_fopen('dummy.$$$','a'); dummy_file :=gdb_fopen('dummy.$$$','a');
{in captured_main code, this is simply {in captured_main code, this is simply
instream:=stdin; but stdin is a highly system dependent macro instream:=stdin; but stdin is a highly system dependent macro
@ -3244,6 +3316,7 @@ begin
instream:=pstdio_file(dummy_file^.to_data)^._file instream:=pstdio_file(dummy_file^.to_data)^._file
else else
instream:=nil; instream:=nil;
{$endif}
{$endif GDB_NEEDS_SET_INSTREAM} {$endif GDB_NEEDS_SET_INSTREAM}
gdb_stderr:=mem_fileopen; gdb_stderr:=mem_fileopen;
@ -3338,10 +3411,10 @@ end;
variables that are defined in main.c source. variables that are defined in main.c source.
We must not load main.o otherwise, we will get We must not load main.o otherwise, we will get
into multiply defined symbols troubles. } into multiply defined symbols troubles. }
var var
gdb_sysrootc : char; gdb_sysrootc : char;
{ used locally only to provide a pchar pointing to '\0' } { used locally only to provide a pchar pointing to '\0' }
gdb_sysroot : pchar; cvar;public; gdb_sysroot : pchar; cvar;public;
{ gdb_sysroot global variable is declared in defs.h and { gdb_sysroot global variable is declared in defs.h and
instanciated in main.c since version 6.0 } instanciated in main.c since version 6.0 }
gdb_datadir : pchar; cvar;public; gdb_datadir : pchar; cvar;public;