diff -wbBur fpcbuild-2.6.0/fpcsrc/ide/fp.pas fpcbuild-2.6.0.my/fpcsrc/ide/fp.pas --- fpcbuild-2.6.0/fpcsrc/ide/fp.pas 2010-08-20 15:04:44.000000000 +0400 +++ fpcbuild-2.6.0.my/fpcsrc/ide/fp.pas 2013-01-14 20:55:58.472376421 +0400 @@ -14,6 +14,9 @@ **********************************************************************} program FP; +{$LINKLIB libz.so} + + {$ifdef Windows} { some windows versions, namely at least XP x64 don't like if the IDE stack is too big } diff -wbBur fpcbuild-2.6.0/fpcsrc/packages/gdbint/Makefile fpcbuild-2.6.0.my/fpcsrc/packages/gdbint/Makefile --- fpcbuild-2.6.0/fpcsrc/packages/gdbint/Makefile 2011-12-11 00:19:00.000000000 +0400 +++ fpcbuild-2.6.0.my/fpcsrc/packages/gdbint/Makefile 2013-01-14 20:32:15.545303270 +0400 @@ -2337,10 +2337,12 @@ endif ifeq ($(OS_SOURCE),openbsd) override FPCOPT+=-FD$(NEW_BINUTILS_PATH) +override FPCMAKEOPT+=-FD$(NEW_BINUTILS_PATH) endif ifndef CROSSBOOTSTRAP ifneq ($(BINUTILSPREFIX),) override FPCOPT+=-XP$(BINUTILSPREFIX) +override FPCMAKEOPT+=-XP$(BINUTILSPREFIX) endif ifneq ($(BINUTILSPREFIX),) override FPCOPT+=-Xr$(RLINKPATH) diff -wbBur fpcbuild-2.6.0/fpcsrc/packages/gdbint/src/gdbint.pp fpcbuild-2.6.0.my/fpcsrc/packages/gdbint/src/gdbint.pp --- fpcbuild-2.6.0/fpcsrc/packages/gdbint/src/gdbint.pp 2011-12-10 20:50:23.000000000 +0400 +++ fpcbuild-2.6.0.my/fpcsrc/packages/gdbint/src/gdbint.pp 2013-01-14 20:53:27.332331458 +0400 @@ -17,6 +17,7 @@ {$define NotImplemented} +{$define GDB_DISABLE_PYTHON} {$define COMPILING_GDBINT_UNIT} {$ifdef USE_GDBLIBINC} {$i gdblib.inc} @@ -50,7 +51,6 @@ {$ifdef GDB_V601} {$info using gdb 6.1.x} {$define GDB_V6} - {$define GDB_HAS_DB_COMMANDS} {$undef GDB_HAS_DEPRECATED_CBPH} {$endif def GDB_V601} @@ -58,14 +58,12 @@ {$ifdef GDB_V602} {$info using gdb 6.2.x} {$define GDB_V6} - {$define GDB_HAS_DB_COMMANDS} {$endif def GDB_V602} { 6.3.x } {$ifdef GDB_V603} {$info using gdb 6.3.x} {$define GDB_V6} - {$define GDB_HAS_DB_COMMANDS} {$endif def GDB_V603} { 6.4.x } @@ -73,7 +71,6 @@ {$info using gdb 6.4.x} {$define GDB_V6} {$define GDB_NEEDS_NO_ERROR_INIT} - {$define GDB_HAS_DB_COMMANDS} {$endif def GDB_V604} { 6.5.x } @@ -87,7 +84,6 @@ {$ifdef GDB_V606} {$info using gdb 6.6.x} {$define GDB_V6} - {$define GDB_HAS_DB_COMMANDS} {$define GDB_USES_BP_LOCATION} {$define GDB_NEEDS_NO_ERROR_INIT} {$define GDB_USES_EXPAT_LIB} @@ -98,7 +94,6 @@ {$ifdef GDB_V607} {$info using gdb 6.7.x} {$define GDB_V6} - {$define GDB_HAS_DB_COMMANDS} {$define GDB_USES_BP_LOCATION} {$define GDB_NEEDS_NO_ERROR_INIT} {$define GDB_USES_EXPAT_LIB} @@ -109,7 +104,6 @@ {$ifdef GDB_V608} {$info using gdb 6.8.x} {$define GDB_V6} - {$define GDB_HAS_DB_COMMANDS} {$define GDB_USES_BP_LOCATION} {$define GDB_BP_LOCATION_HAS_GLOBAL_NEXT} {$define GDB_NEEDS_NO_ERROR_INIT} @@ -120,13 +114,64 @@ {$define GDB_HAS_BP_NONE} {$endif def GDB_V608} +{ 7.5.x } +{$ifdef GDB_V705} + {$info using gdb 7.5.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} + {$ifdef win32} + {$define GDB_USES_LIBADVAPI32} + {$endif win32} +{$endif def GDB_V705} + +{ 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} + {$ifdef win32} + {$define GDB_USES_LIBADVAPI32} + {$endif win32} +{$endif def GDB_V704} + { 7.3.x } {$ifdef GDB_V703} {$info using gdb 7.3.x} {$define GDB_V7} {$define GDB_BP_LOCATION_HAS_GDBARCH} {$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 } {$ifdef GDB_V702} @@ -448,8 +493,11 @@ {$LINKLIB libintl.a} {$LINKLIB imagehlp} {$endif not USE_MINGW_GDB} - {$LINKLIB kernel32} + {$ifdef GDB_USES_LIBADVAPI32} + {$LINKLIB advapi32} + {$endif GDB_USES_LIBADVAPI32} {$LINKLIB user32} + {$LINKLIB kernel32} {$endif win32} {$ifdef win64} @@ -588,9 +636,11 @@ type pui_file = ^ui_file; + pstdio_file = ^stdio_file; 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_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_delete_ftype = procedure(stream : pui_file);cdecl; ui_file_isatty_ftype = function(stream : pui_file) : longbool;cdecl; @@ -605,6 +655,9 @@ magic : plongint; to_flush : ui_file_flush_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; {$ifdef GDB_V6} to_read : ui_file_read_ftype; @@ -616,6 +669,13 @@ to_data : pointer; 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 } procedure ui_file_delete(stream : pui_file);cdecl;external; @@ -774,10 +834,16 @@ {$ifdef GDB_V6} type ui_out = pointer; +{$ifndef GDB_NO_UIOUT} var 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; -{$endif} +{$endif GDB_V6} {$ifdef go32v2} { needed to be sure %fs contains the DOS memory selector @@ -815,8 +881,11 @@ jmp_buf = dpmi_jmp_buf; pjmp_buf = pdpmi_jmp_buf; + function setjmp(var rec : jmp_buf) : longint;cdecl;external; + function malloc(size : longint) : pointer;cdecl;external; + procedure longjmp(var rec : jmp_buf;return_value : longint);cdecl;external; procedure reload_fs;assembler; @@ -869,6 +938,13 @@ pCORE_ADDR = ^CORE_ADDR; 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, language_cplus,language_java,language_chill, language_fortran,language_m2,language_asm, @@ -897,9 +973,18 @@ 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} pbreakpoint = ^breakpoint; breakpoint = record +{$ifdef GDB_USES_BP_OPS} + ops : pbp_ops; +{$endif GDB_USES_BP_OPS} next : pbreakpoint; typ : bptype; enable : tenable; @@ -910,9 +995,15 @@ {$else not GDB_USES_BP_LOCATION} address : CORE_ADDR; {$endif not GDB_USES_BP_LOCATION} +{$ifndef GDB_USES_BP_OPS} line_number : longint; source_file : pchar; +{$endif not GDB_USES_BP_OPS} silent : byte; +{$ifdef GDB_USES_BP_OPS} + display_canonical: byte; +{$endif GDB_USES_BP_OPS} + ignore_count : longint; {$ifndef GDB_USES_BP_LOCATION} shadow_contents : array[0..15] of char; @@ -919,10 +1010,21 @@ inserted : char; duplicate : char; {$endif not GDB_USES_BP_LOCATION} + 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; 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; input_radix : longint; cond_string : ^char; @@ -941,6 +1043,9 @@ bp_target_info = record placed_address_space : pointer;{paddress_space;} 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_len : longint; placed_size : longint; @@ -948,9 +1053,17 @@ bp_location = record 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} global_next : pbp_location; {$endif GDB_BP_LOCATION_HAS_GLOBAL_NEXT} +{$endif} loc_type : bp_loc_type; owner : pbreakpoint; {$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT} @@ -961,10 +1074,10 @@ inserted : byte; duplicate : byte; {$ifdef GDB_BP_LOCATION_HAS_GDBARCH} - gdbarch : pointer;{pgdbarch;} + gdbarch : pgdbarch; {$endif GDB_BP_LOCATION_HAS_GDBARCH} {$ifdef GDB_HAS_PROGRAM_SPACE} - pspace : pointer;{pprogram_space;} + pspace : pprogram_space; {$endif GDB_HAS_PROGRAM_SPACE} address : CORE_ADDR; {$ifdef GDB_BP_LOCATION_HAS_GLOBAL_NEXT} @@ -979,6 +1092,11 @@ target_info : bp_target_info; overlay_target_info : bp_target_info; 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; tfreecode=(free_nothing,free_contents,free_linetable); @@ -1488,7 +1606,9 @@ {$endif ndef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED} current_target : target_ops;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; { we need also to declare some vars } @@ -1502,13 +1622,22 @@ { Whether xdb commands will be handled } {$ifdef GDB_HAS_DB_COMMANDS} + { These two global variables are declared in defs.h + since version 4.18 } xdb_commands : longint;cvar;public; { Whether dbx commands will be handled } dbx_commands : longint;cvar;public; {$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 + { 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; gdb_stdlog : pui_file;cvar;public; @@ -1516,6 +1645,9 @@ event_loop_p : longint;cvar;public; {$ifdef GDB_V6} (* 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_stdtargerr : pui_file;cvar;public; {$endif} @@ -1523,7 +1655,10 @@ { used for gdb_stdout and gdb_stderr } function xmalloc(size : longint) : pointer;cdecl;external; { used for QueryHook } -function xstrvprintf(msg : pchar) : pchar; varargs; cdecl; external; +{ xvasprintf is present at least from GDB 5.3 + while xstrvprintf only appears in version 6.2, + so only use xvasprintf function } +function xvasprintf(ret : ppchar; msg : pchar) : pchar; varargs; 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_function(i:CORE_ADDR):psymbol;cdecl;external; @@ -2406,11 +2541,15 @@ QueryHook:=0 else begin - if curr_gdb^.reset_command and (pos('Kill',question)>0) then + if curr_gdb^.reset_command and ((pos('Kill',question)>0) or + (pos('Discard symbol table',question)>0)) then QueryHook:=1 else if pos('%',question)>0 then begin - local:=xstrvprintf(question,arg); + xvasprintf(@local,question,arg); + { xvasprintf can failed, in that case local is set to nil } + if not assigned(local) then + local:=question; QueryHook:=curr_gdb^.Query(local, nil); xfree(local); end @@ -2451,7 +2590,12 @@ last_breakpoint_number:=b.number; { function breakpoints have zero as file and as line !! but they are valid !! } +{$ifndef GDB_USES_BP_OPS} 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} if assigned (b.loc) then last_breakpoint_address:=b.loc^.address @@ -2471,7 +2615,11 @@ {$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED} 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; +{$endif not GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR} pobserver = pointer; var breakpoint_created_observer : pobserver = nil; @@ -2479,8 +2627,14 @@ function observer_attach_breakpoint_created(create_func : breakpoint_created_function_type) : 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; var @@ -2498,8 +2652,16 @@ pb:=pb^.next; end; end; +{$endif not GDB_NOTIFY_BREAKPOINT_ARG_IS_BREAKPOINT_PTR} {$endif def GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED} +{ Avoid loading of main.o object by providing a + stripped down version of relocate_gdb_directory function } +function relocate_gdb_directory(path : pchar) : pchar; cdecl; public; +begin + relocate_gdb_directory:=path; +end; + {***************************************************************************** tgdbinterface *****************************************************************************} @@ -2528,7 +2690,7 @@ gdb_command('set print object on'); gdb_command('set print null-stop'); {$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} end; @@ -2609,9 +2771,9 @@ var 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 gdbint_execute_command:=1; execute_command(command,from_tty); @@ -2658,6 +2820,8 @@ begin {$ifdef cpui386} MaskAllFPUExceptions := control or MaskAllExceptions; +{$else} + MaskAllFPUExceptions:=0; {$endif} end; @@ -2716,7 +2880,8 @@ begin quit_return:=error_return; mask:=longint($ffffffff); - catch_errors(@gdbint_execute_command,@command,0,mask); + catch_command_errors(@gdbint_execute_command,@command, + 1,mask); {$ifdef go32v2} reload_fs; {$endif go32v2} @@ -2973,11 +3138,43 @@ c_environ : ppchar;external name '_environ'; c_argc : longint;external name '___crt0_argc'; c_argv : ppchar;external name '___crt0_argv'; + + procedure ReallocateEnvironUsingCMalloc; + + var + neededsize , count : longint; + penv : pchar; + newenv : ppchar; + begin + if not assigned(c_environ) then + neededsize:=0 + else + begin + count:=0; + penv:=c_environ^; + while assigned(penv) do + begin + inc(count); + inc(penv,sizeof(pchar)); + end; + neededsize:=count*sizeof(pchar); + end; + newenv:=malloc(neededsize); + system.move(c_environ,newenv,neededsize); + c_environ:=newenv; + end; + {$endif def go32v2} var current_directory : pchar; cvar; external; gdb_dirbuf : array[0..0] of char; cvar; external; 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 DIRBUF_SIZE = 1024; @@ -2986,13 +3183,28 @@ var OldSigInt : SignalHandler; {$endif supportexceptions} +{$ifdef GDB_NEEDS_SET_INSTREAM} +var + dummy_file : pui_file; +{$endif GDB_NEEDS_SET_INSTREAM} + {$ifdef GDB_INIT_HAS_ARGV0} var argv0 : pchar; {$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 {$ifdef go32v2} - c_environ:=system.envp; + { c_environ:=system.envp; } + { DJGPP libC presupposes the c_enivron was malloc'ated } + ReallocateEnvironUsingCMalloc; c_argc:=system.argc; c_argv:=system.argv; {$endif def go32v2} @@ -3012,8 +3224,25 @@ ui_file_delete(gdb_stderr); if assigned(gdb_stdout) then 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_stdout:=mem_fileopen; + save_gdb_stderr:=gdb_stderr; + save_gdb_stdout:=gdb_stdout; gdb_stdlog:=gdb_stderr; gdb_stdtarg:=gdb_stderr; set_ui_file_write(gdb_stdout,@gdbint_ui_file_write); @@ -3022,7 +3251,9 @@ error_init; {$endif GDB_NEEDS_NO_ERROR_INIT} {$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; {$endif} GetDir(0, CurrentDir); @@ -3034,8 +3265,10 @@ next_exit:=exitproc; exitproc:=@DoneLibGDB; {$ifdef GDB_V6} +{$ifndef GDB_NO_UIOUT} uiout := cli_out_new (gdb_stdout); -{$endif} +{$endif not GDB_NO_UIOUT} +{$endif GDB_V6} {$ifdef GDB_INIT_HAS_ARGV0} getmem(argv0,length(paramstr(0))+1); strpcopy(argv0,paramstr(0)); @@ -3044,6 +3277,31 @@ {$else not GDB_INIT_HAS_ARGV0} gdb_init; {$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 unix} fpsignal(SIGINT,OldSigInt); @@ -3069,14 +3327,34 @@ end; {$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 global variable is declared in defs.h and + instanciated in main.c since version 7.0 } 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_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 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 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 global variable is declared in main.h and + instanciated in main.c since version 7.2 } {$endif} {$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY} var @@ -3086,6 +3364,7 @@ begin {$ifdef GDB_HAS_SYSROOT} gdb_sysrootc := #0; + return_child_result_value := -1; gdb_sysroot := @gdb_sysrootc; gdb_datadir := @gdb_sysrootc; python_libdir := @gdb_sysrootc;