From f095c98e76a07af7b10b13c2e11647372fd08f8d Mon Sep 17 00:00:00 2001 From: pierre Date: Mon, 25 Feb 2013 16:28:10 +0000 Subject: [PATCH] * 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 - --- packages/gdbint/src/gdbint.pp | 229 ++++++++++++++++++++++------------ 1 file changed, 151 insertions(+), 78 deletions(-) diff --git a/packages/gdbint/src/gdbint.pp b/packages/gdbint/src/gdbint.pp index f795d766b9..2a2c99aa3d 100644 --- a/packages/gdbint/src/gdbint.pp +++ b/packages/gdbint/src/gdbint.pp @@ -14,6 +14,7 @@ unit GdbInt; {$mode objfpc} +{$smartlink off} {$define NotImplemented} @@ -39,94 +40,46 @@ unit GdbInt; interface -{$smartlink off} { Is create_breakpoint_hook deprecated? } { Seem not so for 6.1 } {$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} - {$info using gdb 6.2.x} - {$define GDB_V6} -{$endif def GDB_V602} +{ + Excatly one + GDB_VXYZ macro + where XYZ are three numbers + needs to defined + either inside gdblib.inc or gdbver.inc + This corresponds to version + X.YZ.patch_level +} -{ 6.3.x } -{$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} +{$undef GDB_VERSION_RECOGNIZED} +{ 7.5.x } {$ifdef GDB_V705} - {$define GDB_V_704} - {$define GDB_BO_LOCATION_HAS_COND_BYTECODE} + {$info using gdb 7.5.x} + {$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} {$endif} { 7.4.x } {$ifdef GDB_V704} {$info using gdb 7.4.x} - {$define GDB_V_704} + {$define GDB_VERSION_RECOGNIZED} + {$define GDB_VER_GE_704} {$endif} -{$ifdef GDB_V_704} +{$ifdef GDB_VER_GE_704} {$define GDB_V7} {$define GDB_BP_LOCATION_HAS_GDBARCH} {$define GDB_HAS_PROGRAM_SPACE} @@ -142,11 +95,12 @@ interface {$ifdef win32} {$define GDB_USES_LIBADVAPI32} {$endif win32} -{$endif def GDB_V704} +{$endif def GDB_VER_GE_704} { 7.3.x } {$ifdef GDB_V703} {$info using gdb 7.3.x} + {$define GDB_VERSION_RECOGNIZED} {$define GDB_V7} {$define GDB_BP_LOCATION_HAS_GDBARCH} {$define GDB_HAS_PROGRAM_SPACE} @@ -161,11 +115,13 @@ interface {$define GDB_BP_LOCATION_HAS_OPS} {$define GDB_UI_FILE_HAS_WRITE_ASYNC} {$endif GDB_CVS} + {$define GDB_VERSION_RECOGNIZED} {$endif def GDB_V703} { 7.2.x } {$ifdef GDB_V702} {$info using gdb 7.2.x} + {$define GDB_VERSION_RECOGNIZED} {$define GDB_V7} {$define GDB_BP_LOCATION_HAS_GDBARCH} {$define GDB_HAS_PROGRAM_SPACE} @@ -174,6 +130,7 @@ interface { 7.1.x } {$ifdef GDB_V701} {$info using gdb 7.1.x} + {$define GDB_VERSION_RECOGNIZED} {$define GDB_V7} {$define GDB_BP_LOCATION_HAS_GDBARCH} {$define GDB_HAS_PROGRAM_SPACE} @@ -184,6 +141,7 @@ interface { 7.0.x } {$ifdef GDB_V700} {$info using gdb 7.0.x} + {$define GDB_VERSION_RECOGNIZED} {$define GDB_V7} {$ifdef GDB_CVS} {$define GDB_BP_LOCATION_HAS_GDBARCH} @@ -208,9 +166,92 @@ interface {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED} {$define GDB_TARGET_CLOSE_HAS_PTARGET_ARG} {$define GDB_HAS_BP_NONE} + {$define GDB_USE_XSTRVPRINTF} {$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} {$define GDB_HAS_SYSROOT} {$define GDB_HAS_DB_COMMANDS} @@ -218,6 +259,10 @@ interface {$define GDB_INIT_HAS_ARGV0} {$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} {$define DO_NOT_USE_CBPH} @@ -437,9 +482,9 @@ interface {$ifdef NotImplemented} {$undef NotImplemented} {$LINKLIB libgdb.a} - {$ifdef GDB_HAS_SIM} - {$LINKLIB libsim.a} - {$endif GDB_HAS_SIM} + {$ifdef GDB_HAS_SIM} + {$LINKLIB libsim.a} + {$endif GDB_HAS_SIM} {$LINKLIB libbfd.a} {$LINKLIB libreadline.a} {$LINKLIB libopcodes.a} @@ -1063,7 +1108,7 @@ type owner : pbreakpoint; {$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT} cond : pointer;{pexpression;} -{$ifdef GDB_BO_LOCATION_HAS_COND_BYTECODE} +{$ifdef GDB_BP_LOCATION_HAS_COND_BYTECODE} cond_bytecode : pagent_expr; condition_changed : tcondition_status; cmd_bytecode : pagent_expr; @@ -1641,9 +1686,17 @@ var var instream : P_C_FILE;cvar;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} 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 } gdb_stdout : 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 while xstrvprintf only appears in version 6.2, 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; +{$endif} procedure xfree(p : pointer); 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; @@ -2047,6 +2104,13 @@ begin stop_breakpoint_number:=num; end; +procedure annotate_breakpoints_changed;cdecl;public; +begin +{$ifdef Verbose} + Debug('|breakpoints_changed|'); +{$endif} +end; + procedure annotate_watchpoint(num:longint);cdecl;public; begin @@ -2553,7 +2617,11 @@ begin QueryHook:=1 else if pos('%',question)>0 then begin +{$ifdef GDB_USE_XSTRVPRINTF} + local:=xstrvprintf(question,arg); +{$else} xvasprintf(@local,question,arg); +{$endif} { xvasprintf can failed, in that case local is set to nil } if not assigned(local) then local:=question; @@ -3236,6 +3304,10 @@ begin ui_file_delete(gdb_stdin); gdb_stdin:=mem_fileopen; 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'); {in captured_main code, this is simply instream:=stdin; but stdin is a highly system dependent macro @@ -3244,6 +3316,7 @@ begin instream:=pstdio_file(dummy_file^.to_data)^._file else instream:=nil; +{$endif} {$endif GDB_NEEDS_SET_INSTREAM} gdb_stderr:=mem_fileopen; @@ -3338,10 +3411,10 @@ end; variables that are defined in main.c source. We must not load main.o otherwise, we will get into multiply defined symbols troubles. } -var +var gdb_sysrootc : char; { 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 instanciated in main.c since version 6.0 } gdb_datadir : pchar; cvar;public;