Browse Source

--- Merging r13652 into '.':
U packages/gdbint/Makefile.fpc
U packages/gdbint/src/gdbint.pp
U packages/gdbint/Makefile
--- Merging r13973 into '.':
G packages/gdbint/src/gdbint.pp
--- Merging r14019 into '.':
U packages/gdbint/src/gdbcon.pp
--- Merging r14021 into '.':
G packages/gdbint/src/gdbint.pp
--- Merging r14024 into '.':
G packages/gdbint/Makefile.fpc
G packages/gdbint/Makefile
--- Merging r14025 into '.':
A packages/gdbint/examples/mingw.pas
U packages/gdbint/examples/testgdb.pp
U packages/gdbint/examples/symify.pp
--- Merging r14030 into '.':
G packages/gdbint/src/gdbint.pp
--- Merging r14031 into '.':
G packages/gdbint/src/gdbint.pp
--- Merging r14033 into '.':
G packages/gdbint/src/gdbint.pp

# revisions: 13652,13973,14019,14021,14024,14025,14030,14031,14033
------------------------------------------------------------------------
r13652 | florian | 2009-09-05 19:05:26 +0200 (Sat, 05 Sep 2009) | 3 lines
Changed paths:
M /trunk/packages/gdbint/Makefile
M /trunk/packages/gdbint/Makefile.fpc
M /trunk/packages/gdbint/src/gdbint.pp

o more MingW support, see also discussion of #7412:
+ automatic detection of MingW libgdb
+ additional libraries
------------------------------------------------------------------------
------------------------------------------------------------------------
r13973 | mazen | 2009-10-30 12:28:09 +0100 (Fri, 30 Oct 2009) | 2 lines
Changed paths:
M /trunk/packages/gdbint/src/gdbint.pp

* Added support of libgdb V608.

------------------------------------------------------------------------
------------------------------------------------------------------------
r14019 | pierre | 2009-11-03 23:08:11 +0100 (Tue, 03 Nov 2009) | 2 lines
Changed paths:
M /trunk/packages/gdbint/src/gdbcon.pp

* Add start_break_number field to TGDBController object

------------------------------------------------------------------------
------------------------------------------------------------------------
r14021 | pierre | 2009-11-03 23:16:29 +0100 (Tue, 03 Nov 2009) | 2 lines
Changed paths:
M /trunk/packages/gdbint/src/gdbint.pp

+ Add support for GDB 7.0.

------------------------------------------------------------------------
------------------------------------------------------------------------
r14024 | pierre | 2009-11-03 23:30:15 +0100 (Tue, 03 Nov 2009) | 2 lines
Changed paths:
M /trunk/packages/gdbint/Makefile
M /trunk/packages/gdbint/Makefile.fpc

+ Add support for gdblib.inc file in libgdb directory

------------------------------------------------------------------------
------------------------------------------------------------------------
r14025 | pierre | 2009-11-03 23:43:08 +0100 (Tue, 03 Nov 2009) | 2 lines
Changed paths:
A /trunk/packages/gdbint/examples/mingw.pas
M /trunk/packages/gdbint/examples/symify.pp
M /trunk/packages/gdbint/examples/testgdb.pp

+ Add mingw unit

------------------------------------------------------------------------
------------------------------------------------------------------------
r14030 | pierre | 2009-11-04 00:25:56 +0100 (Wed, 04 Nov 2009) | 1 line
Changed paths:
M /trunk/packages/gdbint/src/gdbint.pp

* fix last commit
------------------------------------------------------------------------
------------------------------------------------------------------------
r14031 | pierre | 2009-11-04 00:30:51 +0100 (Wed, 04 Nov 2009) | 1 line
Changed paths:
M /trunk/packages/gdbint/src/gdbint.pp

* suppress VarArgs from QueryHook function
------------------------------------------------------------------------
------------------------------------------------------------------------
r14033 | pierre | 2009-11-04 00:56:23 +0100 (Wed, 04 Nov 2009) | 1 line
Changed paths:
M /trunk/packages/gdbint/src/gdbint.pp

* added required gdb_datadir variable
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_4@14722 -

marco 15 years ago
parent
commit
d4fbbb3f60

+ 1 - 0
.gitattributes

@@ -1796,6 +1796,7 @@ packages/fv/src/views.pas svneol=native#text/plain
 packages/fv/src/w32smsg.inc svneol=native#text/plain
 packages/gdbint/Makefile svneol=native#text/plain
 packages/gdbint/Makefile.fpc svneol=native#text/plain
+packages/gdbint/examples/mingw.pas svneol=native#text/plain
 packages/gdbint/examples/symify.pp svneol=native#text/plain
 packages/gdbint/examples/testgdb.pp svneol=native#text/plain
 packages/gdbint/fpmake.pp svneol=native#text/plain

+ 89 - 63
packages/gdbint/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/11/03]
 #
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -285,6 +285,14 @@ ifeq ($(LIBGDBFILE),)
 GDBFOUND=0
 else
 GDBFOUND=1
+override LIBGDBINC:=$(firstword $(wildcard $(addsuffix /gdblib.inc,$(GDBLIBDIR))))
+ifeq ($(LIBGDBINC),)
+GDBLIBINCFOUND=0
+GDBLIBINCCOND=
+else
+GDBLIBINCFOUND=1
+GDBLIBINCCOND=-dUSE_GDBLIBINC
+endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_UNITS+=gdbint gdbcon
@@ -636,178 +644,178 @@ override TARGET_EXAMPLES+=examples/testgdb examples/symify
 endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_SOURCEDIR+=src tests
@@ -2964,8 +2972,13 @@ GDBVER:=GDB_V$(strip $(shell $(CURRDIR)gdbver$(EXEEXT) -n))
 gdbver.inc: gdbver$(EXEEXT)
 	./gdbver$(EXEEXT) -o gdbver.inc
 gdbint$(PPUEXT): gdbint.pp gdbver.inc
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
 	@$(ECHO) Using GDB $(GDBVER)
-	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
+else
+	@$(ECHO) Using GDB $(GDBVER) (MingW)
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -dUSE_MINGW_GDB -Fisrc -Fusrc src/gdbint.pp
+endif
 	$(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
 endif
 else
@@ -2974,7 +2987,7 @@ gdbver.inc:
 	$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
 gdbint$(PPUEXT): gdbint.pp gdbver.inc
 	@$(ECHO) libgdb.a not found, using default GDB $(GDBVER)
-	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND)  -Fisrc -Fusrc src/gdbint.pp
 endif
 else
 GDBVER=GDB_V606
@@ -2982,7 +2995,7 @@ gdbver.inc:
 	$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
 gdbint$(PPUEXT): gdbint.pp gdbver.inc
 	@$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
-	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND)  -Fisrc -Fusrc src/gdbint.pp
 endif
 gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
 ifeq ($(OS_TARGET),go32v2)
@@ -3000,7 +3013,20 @@ simple: $(DBGCOM)
 	-rm gdbint.ppu
 	ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
 	ppc386 testgdb
-testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+examples/testgdb$(EXEEXT): examples/testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+	$(COMPILER) -FEexamples  examples/testgdb.pp
+else
+	$(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/testgdb.pp
+endif
+	$(EXECPPAS)
+examples/symify$(EXEEXT): examples/symify.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+	$(COMPILER) -FEexamples  examples/symify.pp
+else
+	$(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/symify.pp
+endif
+	$(EXECPPAS)
 .PHONY: test
 test: examples
 clean: fpc_clean

+ 35 - 5
packages/gdbint/Makefile.fpc

@@ -14,7 +14,7 @@ examples=examples/testgdb examples/symify
 [compiler]
 objectdir=$(GDBLIBDIR)
 librarydir=$(GDBLIBDIR)
-includedir=src
+includedir=$(GDBLIBDIR) src
 sourcedir=src tests
 
 [require]
@@ -56,6 +56,16 @@ ifeq ($(LIBGDBFILE),)
 GDBFOUND=0
 else
 GDBFOUND=1
+# Detect if gdblib.inc is available
+override LIBGDBINC:=$(firstword $(wildcard $(addsuffix /gdblib.inc,$(GDBLIBDIR))))
+ifeq ($(LIBGDBINC),)
+GDBLIBINCFOUND=0
+GDBLIBINCCOND=
+else
+GDBLIBINCFOUND=1
+GDBLIBINCCOND=-dUSE_GDBLIBINC
+endif
+
 endif
 
 
@@ -88,8 +98,14 @@ GDBVER:=GDB_V$(strip $(shell $(CURRDIR)gdbver$(EXEEXT) -n))
 gdbver.inc: gdbver$(EXEEXT)
         ./gdbver$(EXEEXT) -o gdbver.inc
 gdbint$(PPUEXT): gdbint.pp gdbver.inc
+# MingW?
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
 	@$(ECHO) Using GDB $(GDBVER)
-	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+        $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
+else
+	@$(ECHO) Using GDB $(GDBVER) (MingW)
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -dUSE_MINGW_GDB -Fisrc -Fusrc src/gdbint.pp
+endif
 	$(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
 endif
 
@@ -100,7 +116,7 @@ gdbver.inc:
         $(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
 gdbint$(PPUEXT): gdbint.pp gdbver.inc
 	@$(ECHO) libgdb.a not found, using default GDB $(GDBVER)
-	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND)  -Fisrc -Fusrc src/gdbint.pp
 endif
 
 else
@@ -110,7 +126,7 @@ gdbver.inc:
         $(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
 gdbint$(PPUEXT): gdbint.pp gdbver.inc
 	@$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
-	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+	$(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND)  -Fisrc -Fusrc src/gdbint.pp
 endif
 
 gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
@@ -137,7 +153,21 @@ simple: $(DBGCOM)
 	ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
 	ppc386 testgdb
 
-testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+examples/testgdb$(EXEEXT): examples/testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+	$(COMPILER) -FEexamples  examples/testgdb.pp
+else
+	$(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/testgdb.pp
+endif
+	$(EXECPPAS)
+
+examples/symify$(EXEEXT): examples/symify.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+        $(COMPILER) -FEexamples  examples/symify.pp
+else
+        $(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/symify.pp
+endif
+	$(EXECPPAS)
 
 # Allow test for example
 .PHONY: test

+ 91 - 0
packages/gdbint/examples/mingw.pas

@@ -0,0 +1,91 @@
+unit mingw;
+{
+    This file is part of the Free Pascal Integrated Development Environment
+    Copyright (c) 2009 by Marco van de Voort
+
+    Mingw helpers. Currently mostly atexit.
+    Copied from fpmingw unit from ide directory.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+interface
+
+// mingw put atexit in binaries, so that it can have one atexit, and call it from
+// dll and .exe startup code.
+// This unit provides a similar service for when mingw code (read: libgdb and friends) are statically
+// linked to FPC.
+
+Type
+  TCFunction = function:longint cdecl; // prototype of an handler to be registered with atexit
+
+function atexit(p:TCFunction):longint; cdecl;  // export our own atexit handler
+
+implementation
+
+uses gdbint; // force dependancies that hopefully make it execute at the right moment.
+
+// prototype of atexit:
+Type
+  TAtexitFunction = function(p:TCFUnction):longint cdecl;
+
+var _imp__atexit : TAtExitFunction; Cvar; external;  // "true" atexit in mingw libs.
+
+function atexit(p:TCFunction):longint;cdecl; [public, alias : '_atexit'];
+
+begin
+  atexit:=_imp__atexit(p);  // simply route to "true" atexit
+end;
+
+procedure __cpu_features_init; cdecl; external;
+procedure _pei386_runtime_relocator; cdecl; external;
+procedure __main; cdecl;external;
+
+procedure doinit;
+// other mingw initialization. Sequence from crt1.c
+begin
+ // not (yet) done: set mingw exception handlers:
+ // SetUnhandledExceptionFilter (_gnu_exception_handler);
+  __cpu_features_init;        // load CPU features. Might be useful for debugger :-)
+
+ // fpreset; 		      // don't do this, we init our own fp mask
+
+ //  _mingw32_init_mainargs ();  // mingw doesn't handle arguments not necessary.
+ //  _mingw32_init_fmode ();     // Set default filemode. Is not done for libraries, so we don't.
+
+ // Adust references to dllimported data that have non-zero offsets.
+  _pei386_runtime_relocator;  //
+
+ // aligns stack here to 16 bytes
+
+  {From libgcc.a, __main calls global class constructors via
+      __do_global_ctors, This in turn  registers  __do_global_dtors
+      as the first entry of the app's atexit table.  We do this
+      explicitly at app startup rather than rely on gcc to generate
+      the call in main's  prologue, since main may be imported from a dll
+      which has its own __do_global_ctors.  }
+ //  __main;                   // should be libgcc initialization but this causes infinite loop.
+end;
+
+procedure _cexit; cdecl; external;
+
+procedure doatexit;
+begin
+{
+   * Perform exit processing for the C library. This means
+   * flushing output and calling 'atexit' registered functions.
+}
+ _cexit ();
+end;
+
+initialization
+  doinit;
+finalization
+  doatexit;
+end.

+ 5 - 1
packages/gdbint/examples/symify.pp

@@ -12,7 +12,11 @@
 
  **********************************************************************}
 program symify;
-uses GDBInt;
+uses
+{$ifdef USE_MINGW_GDB}
+  mingw,
+{$endif}
+  GDBInt;
 
 var
   gdb : tgdbinterface;

+ 5 - 1
packages/gdbint/examples/testgdb.pp

@@ -12,7 +12,11 @@
 
  **********************************************************************}
 program testgdb;
-uses gdbcon;
+uses
+{$ifdef USE_MINGW_GDB}
+  mingw,
+{$endif}
+  gdbcon;
 var
   last,s,parafile : string;
   gdb : tgdbcontroller;

+ 2 - 0
packages/gdbint/src/gdbcon.pp

@@ -23,6 +23,7 @@ type
     progname,
     progdir,
     progargs   : pchar;
+    start_break_number,
     in_command,
     init_count : longint;
     constructor Init;
@@ -245,6 +246,7 @@ end;
 procedure TGDBController.StartTrace;
 begin
   Command('tbreak PASCALMAIN');
+  start_break_number:=last_breakpoint_number;
   Run;
 end;
 

+ 208 - 26
packages/gdbint/src/gdbint.pp

@@ -13,14 +13,25 @@
  **********************************************************************}
 unit GdbInt;
 
-{$i gdbver.inc}
+{$mode objfpc}
+
+{$ifdef USE_GDBLIBINC}
+  {$i gdblib.inc}
+{$else not USE_GDBLIBINC}
+  {$i gdbver.inc}
+{$endif not USE_GDBLIBINC}
+
+{ Possible optional conditionals:
+  GDB_DISABLE_INTL              To explicitly not use libintl
+  GDB_CORE_ADDR_FORCE_64BITS    To force 64 bits for CORE_ADDR
+  Verbose                       To test gdbint
+  DebugCommand                  To debug Command method
+}
 
 interface
 
 {$smartlink off}
 
-{.$define Verbose}
-{.$define DebugCommand}
 {$define NotImplemented}
 
 { Is create_breakpoint_hook deprecated? }
@@ -72,7 +83,7 @@ interface
   {$define GDB_NEEDS_NO_ERROR_INIT}
   {$define GDB_USES_EXPAT_LIB}
   {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
-{$endif def GDB_V605}
+{$endif def GDB_V606}
 
 { 6.7.x }
 {$ifdef GDB_V607}
@@ -82,7 +93,41 @@ interface
   {$define GDB_NEEDS_NO_ERROR_INIT}
   {$define GDB_USES_EXPAT_LIB}
   {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
-{$endif def GDB_V605}
+{$endif def GDB_V607}
+
+{ 6.8.x }
+{$ifdef GDB_V608}
+  {$info using gdb 6.8.x}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+  {$define GDB_NEEDS_NO_ERROR_INIT}
+  {$define GDB_USES_EXPAT_LIB}
+  {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+  {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+  {$define GDB_HAS_BP_NONE}
+{$endif def GDB_V608}
+
+
+{ 7.0.x }
+{$ifdef GDB_V700}
+  {$info using gdb 7.0.x}
+  {$define GDB_V7}
+{$endif def GDB_V700}
+
+{$ifdef GDB_V7}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+  {$define GDB_NEEDS_NO_ERROR_INIT}
+  {$define GDB_USES_EXPAT_LIB}
+  {$define GDB_USES_LIBDECNUMBER}
+  {$define GDB_USES_LIBINTL}
+  {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+  {$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}
+{$endif def GDB_V7}
+
 
 {$ifdef GDB_V6}
   {$define GDB_HAS_SYSROOT}
@@ -91,12 +136,18 @@ interface
   {$define GDB_INIT_HAS_ARGV0}
 {$endif GDB_V6}
 
+
+{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+  {$define DO_NOT_USE_CBPH}
+{$endif}
+
 { GDB has a simulator for powerpc CPU
   it is integrated into GDB by default }
 {$ifdef cpupowerpc}
   {$define GDB_HAS_SIM}
 {$endif cpupowerpc}
 
+{$ifdef NotImplemented}
 {$ifdef go32v2}
   {$undef NotImplemented}
   {$LINKLIB gdb}
@@ -108,7 +159,15 @@ interface
   {$LINKLIB opcodes}
   {$LINKLIB history}
   {$LINKLIB iberty}
-  {$LINKLIB intl}
+  {$ifdef GDB_USES_LIBDECNUMBER}
+    {$LINKLIB decnumber}
+  {$endif GDB_USES_LIBDECNUMBER}
+  {$ifdef GDB_USES_EXPAT_LIB}
+    {$LINKLIB expat}
+  {$endif GDB_USES_EXPAT_LIB}
+  {$ifndef GDB_DISABLE_INTL}
+    {$LINKLIB intl}
+  {$endif ndef GDB_DISABLE_INTL}
   {$LINKLIB dbg}
   {$LINKLIB c}
 {$endif go32v2}
@@ -151,7 +210,10 @@ interface
   {$LINKLIB ncurses}
   {$LINKLIB m}
   {$LINKLIB iberty}
-  {$LINKLIB intl}        { does not seem to exist on netbsd LINKLIB dl,
+  {$ifndef GDB_DISABLE_INTL}
+    {$LINKLIB intl}
+  {$endif ndef GDB_DISABLE_INTL}
+     { does not seem to exist on netbsd LINKLIB dl,
                             but I use GDB CVS snapshots for the *BSDs}
   {$ifdef GDB_USES_EXPAT_LIB}
     {$LINKLIB expat}
@@ -197,7 +259,9 @@ interface
   {$LINKLIB ncurses}
   {$LINKLIB m}
   {$LINKLIB iberty}
-  {$LINKLIB intl}
+  {$ifndef GDB_DISABLE_INTL}
+    {$LINKLIB intl}
+  {$endif ndef GDB_DISABLE_INTL}
   {$ifdef GDB_USES_EXPAT_LIB}
     {$LINKLIB expat}
   {$endif GDB_USES_EXPAT_LIB}
@@ -226,6 +290,7 @@ interface
     {$LINKLIB libmingwex.a}
     {$LINKLIB libmingw32.a}
     {$LINKLIB libmsvcrt.a}
+    {$LINKLIB libdecnumber.a}
     {$undef GDB_HAS_DEBUG_FILE_DIRECTORY}
   {$else not USE_MINGW_GDB}
     {$LINKLIB libiconv.a}
@@ -256,7 +321,9 @@ interface
   {$LINKLIB iberty}
   {$LINKLIB ncurses}
   { $ LINKLIB m} // include in libroot under BeOS
-  {$LINKLIB intl}
+  {$ifndef GDB_DISABLE_INTL}
+    {$LINKLIB intl}
+  {$endif ndef GDB_DISABLE_INTL}
   {$ifdef GDB_USES_EXPAT_LIB}
     {$LINKLIB expat}
   {$endif GDB_USES_EXPAT_LIB}
@@ -266,6 +333,8 @@ interface
   {$LINKLIB gcc}
 {$endif beos}
 
+{$endif NotImplemented}
+
 {$ifdef go32v2}
   {$define supportexceptions}
 {$endif go32v2}
@@ -316,6 +385,9 @@ const
 
 type
 {$if defined(CPUSPARC) and defined(LINUX)}
+  {$define GDB_CORE_ADDR_FORCE_64BITS}
+{$endif}
+{$ifdef GDB_CORE_ADDR_FORCE_64BITS}
   CORE_ADDR = qword;
 {$else}
   CORE_ADDR = ptrint; { might be target dependent PM }
@@ -485,6 +557,8 @@ type
     procedure EndSession(code:longint);
     procedure DebuggerScreen;
     procedure UserScreen;
+    procedure FlushAll; virtual;
+    function Query(question : pchar; args : pchar) : longint; virtual;
     { Hooks }
     procedure DoSelectSourceline(const fn:string;line:longint);virtual;
     procedure DoStartSession;virtual;
@@ -610,7 +684,11 @@ type
        language_fortran,language_m2,language_asm,
        language_scm,language_pascal,language_objc);
 
-     bptype = (bp_breakpoint,bp_hardware_breakpoint,
+     bptype = (
+{$ifdef GDB_HAS_BP_NONE}
+       bp_none,
+{$endif GDB_HAS_BP_NONE}
+       bp_breakpoint,bp_hardware_breakpoint,
        bp_until,bp_finish,bp_watchpoint,bp_hardware_watchpoint,
        bp_read_watchpoint,bp_access_watchpoint,
        bp_longjmp,bp_longjmp_resume,bp_step_resume,
@@ -1144,11 +1222,15 @@ var
 { external variables }
   error_return : jmp_buf;cvar;public;
   quit_return  : jmp_buf;cvar;public;
-  {$ifdef GDB_HAS_DEPRECATED_CBPH}
-  deprecated_create_breakpoint_hook : pointer;cvar;external;
-  {$else}
-  create_breakpoint_hook : pointer;cvar;external;
-  {$endif}
+  deprecated_query_hook : pointer;cvar;public;
+
+  {$ifndef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+    {$ifdef GDB_HAS_DEPRECATED_CBPH}
+    deprecated_create_breakpoint_hook : pointer;cvar;external;
+    {$else}
+    create_breakpoint_hook : pointer;cvar;external;
+    {$endif}
+  {$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 }
@@ -1195,7 +1277,11 @@ procedure gdb_init;cdecl;external;
 {$endif not GDB_INIT_HAS_ARGV0}
 procedure execute_command(p:pchar;i:longint);cdecl;external;
 procedure target_kill;cdecl;external;
+{$ifdef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+procedure target_close(pt : ptarget_ops; i:longint);cdecl;external;
+{$else not GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
 procedure target_close(i:longint);cdecl;external;
+{$endif ndef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
 
 
 {*****************************************************************************
@@ -1537,6 +1623,20 @@ begin
 {$endif}
 end;
 
+procedure annotate_new_thread;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|annotate_new_thread()|');
+{$endif}
+end;
+
+procedure annotate_thread_changed;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|annotate_thread_changed()|');
+{$endif}
+end;
+
 
 procedure annotate_breakpoint(num:longint);cdecl;public;
 begin
@@ -2040,6 +2140,21 @@ begin
 end;
 
 
+function QueryHook(question : pchar; arg : pchar) : longint; cdecl;
+begin
+  if not assigned(curr_gdb) then
+    QueryHook:=0
+  else
+    begin
+      if curr_gdb^.reset_command and (pos('Kill',question)>0) then
+        QueryHook:=1
+      else if pos('%s',question)>0 then
+        QueryHook:=curr_gdb^.Query(question, arg)
+      else
+        QueryHook:=curr_gdb^.Query(question, nil);
+    end;
+end;
+
 procedure CreateBreakPointHook(var b:breakpoint);cdecl;
 var
   sym : symtab_and_line;
@@ -2073,6 +2188,37 @@ begin
    end;
 end;
 
+{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+
+type
+  breakpoint_created_function_type = procedure (bpnum : longint); cdecl;
+  pobserver = pointer;
+var
+  breakpoint_created_observer : pobserver = nil;
+
+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;
+
+
+procedure notify_breakpoint_created(bpnum : longint);cdecl;
+var
+  pb : pbreakpoint;
+begin
+  pb:=breakpoint_chain;
+  while assigned(pb) do
+    begin
+      if pb^.number=bpnum then
+        begin
+          CreateBreakPointHook(pb^);
+          exit;
+        end
+      else
+        pb:=pb^.next;
+    end;
+end;
+{$endif def GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
 
 {*****************************************************************************
                                  tgdbinterface
@@ -2120,11 +2266,17 @@ procedure tgdbinterface.gdb__init;
 begin
   gdboutputbuf.reset;
   gdberrorbuf.reset;
-  {$ifdef GDB_HAS_DEPRECATED_CBPH}
-  deprecated_create_breakpoint_hook:=@CreateBreakPointHook;
-  {$else}
-  create_breakpoint_hook:=@CreateBreakPointHook;
+  {$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+    breakpoint_created_observer:=observer_attach_breakpoint_created(@notify_breakpoint_created);
+  {$else not GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+    {$ifdef GDB_HAS_DEPRECATED_CBPH}
+    deprecated_create_breakpoint_hook:=@CreateBreakPointHook;
+    {$else}
+    create_breakpoint_hook:=@CreateBreakPointHook;
+    {$endif}
   {$endif}
+  deprecated_query_hook :=@QueryHook;
+
   signal_string:=nil;
   signal_name:=nil;
 end;
@@ -2135,16 +2287,33 @@ procedure tgdbinterface.gdb_done;
 begin
   if debuggee_started then
     begin
-      current_target.to_kill;
-      current_target.to_close(1);
+      target_kill;
+{$ifdef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+      target_close(@current_target,1);
+{$else not GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+      target_close(1);
+{$endif ndef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
     end;
-  {$ifdef GDB_HAS_DEPRECATED_CBPH}
-  deprecated_create_breakpoint_hook:=nil;
-  {$else}
-  create_breakpoint_hook:=nil;
+  {$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+    observer_detach_breakpoint_created(breakpoint_created_observer);
+    breakpoint_created_observer:=nil;
+  {$else not GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+    {$ifdef GDB_HAS_DEPRECATED_CBPH}
+    deprecated_create_breakpoint_hook:=nil;
+    {$else}
+    create_breakpoint_hook:=nil;
+    {$endif}
   {$endif}
 end;
 
+procedure tgdbinterface.FlushAll;
+begin
+end;
+
+function tgdbinterface.Query(question : pchar; args : pchar) : longint;
+begin
+  Query:=0;
+end;
 
 function tgdbinterface.error:boolean;
 begin
@@ -2518,6 +2687,12 @@ var
   c_argc : longint;external name '___crt0_argc';
   c_argv : ppchar;external name '___crt0_argv';
 {$endif def go32v2}
+var
+  current_directory : pchar; cvar; external;
+  gdb_dirbuf : array[0..0] of char; cvar; external;
+  CurrentDir : AnsiString;
+const
+  DIRBUF_SIZE = 1024;
 
 procedure InitLibGDB;
 {$ifdef supportexceptions}
@@ -2563,7 +2738,12 @@ begin
 //  gdb_stdtargin := gdb_stdin;
   gdb_stdtargerr := gdb_stderr;
 {$endif}
-
+  GetDir(0, CurrentDir);
+  if length(CurrentDir)<DIRBUF_SIZE then
+    strpcopy(@gdb_dirbuf,CurrentDir)
+  else
+    gdb_dirbuf[0]:=#0;
+  current_directory:=@gdb_dirbuf[0];
   next_exit:=exitproc;
   exitproc:=@DoneLibGDB;
 {$ifdef GDB_V6}
@@ -2603,6 +2783,7 @@ end;
 
 {$ifdef GDB_HAS_SYSROOT}
 var gdb_sysroot  : pchar; cvar;public;
+    gdb_datadir  : pchar; cvar;public;
     gdb_sysrootc : char;
     return_child_result : longbool;cvar;public;
     return_child_result_value : longint;cvar;public;
@@ -2617,6 +2798,7 @@ begin
 {$ifdef GDB_HAS_SYSROOT}
   gdb_sysrootc := #0;
   gdb_sysroot := @gdb_sysrootc;
+  gdb_datadir := @gdb_sysrootc;
 {$endif}
 {$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
   debug_file_directory := '/usr/local/lib';