summaryrefslogtreecommitdiff
path: root/packages/gdbint
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-26 18:18:09 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-26 18:18:09 +0000
commit06497069f14286f46e91ba87b13cfdae00fabffa (patch)
tree2f507bc5df10b5e907aed3bd169642f7b25ba2f9 /packages/gdbint
parentf95403cc8e5f72f84cc0c88c7268dc2e7bcdbd04 (diff)
downloadfpc-06497069f14286f46e91ba87b13cfdae00fabffa.tar.gz
* gdbint moved
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@9951 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/gdbint')
-rw-r--r--packages/gdbint/Makefile2862
-rw-r--r--packages/gdbint/Makefile.fpc153
-rw-r--r--packages/gdbint/fpmake.pp37
-rw-r--r--packages/gdbint/src/freadlin.pp239
-rw-r--r--packages/gdbint/src/gdbcon.pp346
-rw-r--r--packages/gdbint/src/gdbint.pp2621
-rw-r--r--packages/gdbint/src/gdbobjs.inc182
-rw-r--r--packages/gdbint/src/gdbver.pp104
-rw-r--r--packages/gdbint/src/gdbver_nogdb.inc1
-rw-r--r--packages/gdbint/src/symify.pp77
-rw-r--r--packages/gdbint/src/testgdb.pp55
11 files changed, 6677 insertions, 0 deletions
diff --git a/packages/gdbint/Makefile b/packages/gdbint/Makefile
new file mode 100644
index 0000000000..89e31b4cf6
--- /dev/null
+++ b/packages/gdbint/Makefile
@@ -0,0 +1,2862 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/26]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos 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-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=gdbint
+override PACKAGE_VERSION=2.0.0
+ifdef inUnix
+CURRDIR=./
+else
+CURRDIR=
+endif
+ifdef GDBLIBDIR
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+ifeq ($(LIBGDBFILE),)
+override GDBLIBDIR=$(wildcard $(FPCDIR)/libgdb/$(OS_TARGET)/$(CPU_TARGET))
+ifeq ($(GDBLIBDIR),)
+override GDBLIBDIR=$(FPCDIR)/libgdb/$(OS_TARGET)
+endif
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+ifeq ($(LIBGDBFILE),)
+GDBFOUND=0
+else
+GDBFOUND=1
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifeq ($(CPU_TARGET),powerpc64)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(CPU_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_examples
+ifneq ($(TARGET_EXAMPLES),)
+HASEXAMPLES=1
+override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))
+override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES))
+override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
+override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+endif
+ifneq ($(TARGET_EXAMPLEDIRS),)
+HASEXAMPLES=1
+endif
+fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS))
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+ @$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+ $(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+ $(MAKE) all DEBUG=1
+fpc_release:
+ $(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+ $(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+ $(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(PPUEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.lpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.dpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%.res: %.rc
+ windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+ $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+ $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+ @$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+ $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+ $(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+ -$(UPXPROG) $(INSTALLEXEFILES)
+endif
+ $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+ $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+ $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+ $(MKDIR) $(INSTALL_LIBDIR)
+ $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+ ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+ $(MKDIR) $(INSTALL_DATADIR)
+ $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+ $(MKDIR) $(INSTALL_SOURCEDIR)
+ $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+ $(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+ $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+ $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+ $(MKDIR) $(DIST_DESTDIR)
+ $(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+ echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+ echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+ echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+ /bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+ $(RUNBATCH) (ZIPWRAPPER)
+else
+ $(ZIPWRAPPER)
+endif
+endif
+ $(DEL) $(ZIPWRAPPER)
+else
+ $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+ $(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+ $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+ -$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+ -$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+ -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ -$(DELTREE) units
+ -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+ -$(DEL) *.o *.ppu *.a
+endif
+ -$(DELTREE) *$(SMARTEXT)
+ -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+ -$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+ -$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+ @$(ECHO)
+ @$(ECHO) == Package info ==
+ @$(ECHO) Package Name..... $(PACKAGE_NAME)
+ @$(ECHO) Package Version.. $(PACKAGE_VERSION)
+ @$(ECHO)
+ @$(ECHO) == Configuration info ==
+ @$(ECHO)
+ @$(ECHO) FPC.......... $(FPC)
+ @$(ECHO) FPC Version.. $(FPC_VERSION)
+ @$(ECHO) Source CPU... $(CPU_SOURCE)
+ @$(ECHO) Target CPU... $(CPU_TARGET)
+ @$(ECHO) Source OS.... $(OS_SOURCE)
+ @$(ECHO) Target OS.... $(OS_TARGET)
+ @$(ECHO) Full Source.. $(FULL_SOURCE)
+ @$(ECHO) Full Target.. $(FULL_TARGET)
+ @$(ECHO) SourceSuffix. $(SOURCESUFFIX)
+ @$(ECHO) TargetSuffix. $(TARGETSUFFIX)
+ @$(ECHO)
+ @$(ECHO) == Directory info ==
+ @$(ECHO)
+ @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES)
+ @$(ECHO)
+ @$(ECHO) Basedir......... $(BASEDIR)
+ @$(ECHO) FPCDir.......... $(FPCDIR)
+ @$(ECHO) CrossBinDir..... $(CROSSBINDIR)
+ @$(ECHO) UnitsDir........ $(UNITSDIR)
+ @$(ECHO) PackagesDir..... $(PACKAGESDIR)
+ @$(ECHO)
+ @$(ECHO) GCC library..... $(GCCLIBDIR)
+ @$(ECHO) Other library... $(OTHERLIBDIR)
+ @$(ECHO)
+ @$(ECHO) == Tools info ==
+ @$(ECHO)
+ @$(ECHO) As........ $(AS)
+ @$(ECHO) Ld........ $(LD)
+ @$(ECHO) Ar........ $(AR)
+ @$(ECHO) Rc........ $(RC)
+ @$(ECHO)
+ @$(ECHO) Mv........ $(MVPROG)
+ @$(ECHO) Cp........ $(CPPROG)
+ @$(ECHO) Rm........ $(RMPROG)
+ @$(ECHO) GInstall.. $(GINSTALL)
+ @$(ECHO) Echo...... $(ECHO)
+ @$(ECHO) Shell..... $(SHELL)
+ @$(ECHO) Date...... $(DATE)
+ @$(ECHO) FPCMake... $(FPCMAKE)
+ @$(ECHO) PPUMove... $(PPUMOVE)
+ @$(ECHO) Upx....... $(UPXPROG)
+ @$(ECHO) Zip....... $(ZIPPROG)
+ @$(ECHO)
+ @$(ECHO) == Object info ==
+ @$(ECHO)
+ @$(ECHO) Target Loaders........ $(TARGET_LOADERS)
+ @$(ECHO) Target Units.......... $(TARGET_UNITS)
+ @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS)
+ @$(ECHO) Target Programs....... $(TARGET_PROGRAMS)
+ @$(ECHO) Target Dirs........... $(TARGET_DIRS)
+ @$(ECHO) Target Examples....... $(TARGET_EXAMPLES)
+ @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+ @$(ECHO)
+ @$(ECHO) Clean Units......... $(CLEAN_UNITS)
+ @$(ECHO) Clean Files......... $(CLEAN_FILES)
+ @$(ECHO)
+ @$(ECHO) Install Units....... $(INSTALL_UNITS)
+ @$(ECHO) Install Files....... $(INSTALL_FILES)
+ @$(ECHO)
+ @$(ECHO) == Install info ==
+ @$(ECHO)
+ @$(ECHO) DateStr.............. $(DATESTR)
+ @$(ECHO) ZipName.............. $(ZIPNAME)
+ @$(ECHO) ZipPrefix............ $(ZIPPREFIX)
+ @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+ @$(ECHO) ZipSuffix............ $(ZIPSUFFIX)
+ @$(ECHO) FullZipName.......... $(FULLZIPNAME)
+ @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE)
+ @$(ECHO)
+ @$(ECHO) Install base dir..... $(INSTALL_BASEDIR)
+ @$(ECHO) Install binary dir... $(INSTALL_BINDIR)
+ @$(ECHO) Install library dir.. $(INSTALL_LIBDIR)
+ @$(ECHO) Install units dir.... $(INSTALL_UNITDIR)
+ @$(ECHO) Install source dir... $(INSTALL_SOURCEDIR)
+ @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR)
+ @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR)
+ @$(ECHO) Install data dir..... $(INSTALL_DATADIR)
+ @$(ECHO)
+ @$(ECHO) Dist destination dir. $(DIST_DESTDIR)
+ @$(ECHO) Dist zip name........ $(DIST_ZIPNAME)
+ @$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+ fpc_makefile_dirs
+fpc_makefile:
+ $(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples: fpc_examples
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+CAN_RUN_GDBVER=1
+endif
+ifeq ($(FULL_SOURCE),i386-win32)
+ifeq ($(FULL_TARGET),i386-go32v2)
+CAN_RUN_GDBVER=1
+endif
+endif
+ifdef CAN_RUN_GDBVER
+ifeq ($(GDBFOUND),1)
+$(CURRDIR)getver$(EXEEXT) : gdbver.pp
+ $(COMPILER) -o$(CURRDIR)getver$(EXEEXT) gdbver.pp
+ifndef GOTGDBVER
+gdbint$(PPUEXT): $(CURRDIR)gdbver$(EXEEXT) gdbint.pp
+ $(MAKE) gdbint$(PPUEXT) GOTGDBVER=1
+else
+GDBVER:=GDB_V$(strip $(shell $(CURRDIR)gdbver$(EXEEXT) -n))
+gdbver.inc: gdbver$(EXEEXT)
+ ./gdbver$(EXEEXT) -o gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+ @$(ECHO) Using GDB $(GDBVER)
+ $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+ $(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
+endif
+else
+GDBVER=GDB_V606
+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
+endif
+else
+GDBVER=GDB_V606
+gdbver.inc:
+ $(CPPROG) gdbver_nogdb.inc gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+ @$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
+ $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+endif
+gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
+ifeq ($(OS_TARGET),go32v2)
+DBGCOM=dbgcom$(OEXT)
+else
+DBGCOM=
+endif
+ifdef $(COMPILEDBGCOM)
+$(DBGCOM): ../v4.16/dbgcom.c
+ gcc -c -DFPC -Dother_sel -gstabs -o dbgcom.o -I../v4.16 ../v4.16/dbgcom.c
+else
+$(DBGCOM):
+endif
+simple: $(DBGCOM)
+ -rm gdbint.ppu
+ ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
+ ppc386 testgdb
+testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+.PHONY: test
+test: examples
+clean: fpc_clean
+ $(DEL) src/gdbver$(EXEEXT) src/gdbver$(OEXT)
+distclean: fpc_distclean
+ $(DEL) src/gdbver.inc
+.NOTPARALLEL:
diff --git a/packages/gdbint/Makefile.fpc b/packages/gdbint/Makefile.fpc
new file mode 100644
index 0000000000..015b392b97
--- /dev/null
+++ b/packages/gdbint/Makefile.fpc
@@ -0,0 +1,153 @@
+#
+# Makefile.fpc for Free Pascal GDB Interface
+#
+
+
+[package]
+name=gdbint
+version=2.0.0
+
+[target]
+units=gdbint gdbcon
+examples=testgdb symify
+
+[compiler]
+objectdir=$(GDBLIBDIR)
+librarydir=$(GDBLIBDIR)
+includedir=src
+sourcedir=src tests
+
+[require]
+libc=y
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+
+[prerules]
+# For unix be sure to use the locally created gdbver
+ifdef inUnix
+CURRDIR=./
+else
+CURRDIR=
+endif
+
+# Look for a valid GDBLIBDIR environment variable
+ifdef GDBLIBDIR
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+
+# Use default dirs if not available
+ifeq ($(LIBGDBFILE),)
+# Default locations <target>/<cpu> (linux) or <target> (win32,go32v2) only
+override GDBLIBDIR=$(wildcard $(FPCDIR)/libgdb/$(OS_TARGET)/$(CPU_TARGET))
+ifeq ($(GDBLIBDIR),)
+override GDBLIBDIR=$(FPCDIR)/libgdb/$(OS_TARGET)
+endif
+# Detect if libgdb.a is available
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+
+# Set GDBFOUND variable
+ifeq ($(LIBGDBFILE),)
+GDBFOUND=0
+else
+GDBFOUND=1
+endif
+
+
+[rules]
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+CAN_RUN_GDBVER=1
+endif
+
+ifeq ($(FULL_SOURCE),i386-win32)
+ifeq ($(FULL_TARGET),i386-go32v2)
+CAN_RUN_GDBVER=1
+endif
+endif
+
+
+ifdef CAN_RUN_GDBVER
+ifeq ($(GDBFOUND),1)
+# libgdb.a found
+
+$(CURRDIR)getver$(EXEEXT) : gdbver.pp
+ $(COMPILER) -o$(CURRDIR)getver$(EXEEXT) gdbver.pp
+
+ifndef GOTGDBVER
+# gdbver doesn't exists, build it first
+gdbint$(PPUEXT): $(CURRDIR)gdbver$(EXEEXT) gdbint.pp
+ $(MAKE) gdbint$(PPUEXT) GOTGDBVER=1
+else
+# gdbver exists
+GDBVER:=GDB_V$(strip $(shell $(CURRDIR)gdbver$(EXEEXT) -n))
+gdbver.inc: gdbver$(EXEEXT)
+ ./gdbver$(EXEEXT) -o gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+ @$(ECHO) Using GDB $(GDBVER)
+ $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+ $(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
+endif
+
+else
+# libgdb.a not found, default to libgdb v6
+GDBVER=GDB_V606
+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
+endif
+
+else
+# Different OS_TARGET, default to libgdb v6
+GDBVER=GDB_V606
+gdbver.inc:
+ $(CPPROG) gdbver_nogdb.inc gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+ @$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
+ $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+endif
+
+gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
+
+ifeq ($(OS_TARGET),go32v2)
+DBGCOM=dbgcom$(OEXT)
+else
+DBGCOM=
+endif
+
+ifdef $(COMPILEDBGCOM)
+# FPC conditionnal remove the file watching mecanism introduced
+# in v2.02 of dbgcom.c because it relies
+# on the fact that all files are opened via C lib calls
+# which is wrong for FPC !!
+$(DBGCOM): ../v4.16/dbgcom.c
+ gcc -c -DFPC -Dother_sel -gstabs -o dbgcom.o -I../v4.16 ../v4.16/dbgcom.c
+else
+$(DBGCOM):
+endif
+
+simple: $(DBGCOM)
+ -rm gdbint.ppu
+ ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
+ ppc386 testgdb
+
+testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+
+# Allow test for example
+.PHONY: test
+
+test: examples
+
+clean: fpc_clean
+ $(DEL) src/gdbver$(EXEEXT) src/gdbver$(OEXT)
+
+distclean: fpc_distclean
+ $(DEL) src/gdbver.inc
+
+.NOTPARALLEL:
diff --git a/packages/gdbint/fpmake.pp b/packages/gdbint/fpmake.pp
new file mode 100644
index 0000000000..87d83801b5
--- /dev/null
+++ b/packages/gdbint/fpmake.pp
@@ -0,0 +1,37 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+ P : TPackage;
+ T : TTarget;
+begin
+ With Installer do
+ begin
+{$endif ALLPACKAGES}
+
+ P:=AddPackage('gdbint');
+{$ifdef ALLPACKAGES}
+ P.Directory:='gdbint';
+{$endif ALLPACKAGES}
+ P.Version:='2.0.0';
+ P.SourcePath.Add('src');
+
+ T:=P.Targets.AddUnit('gdbcon.pp');
+ with T.Dependencies do
+ begin
+ AddUnit('gdbint');
+ end;
+ T:=P.Targets.AddUnit('gdbint.pp');
+ with T.Dependencies do
+ begin
+ AddInclude('gdbver.inc');
+ end;
+
+{$ifndef ALLPACKAGES}
+ Run;
+ end;
+end.
+{$endif ALLPACKAGES}
diff --git a/packages/gdbint/src/freadlin.pp b/packages/gdbint/src/freadlin.pp
new file mode 100644
index 0000000000..766ed3b0c2
--- /dev/null
+++ b/packages/gdbint/src/freadlin.pp
@@ -0,0 +1,239 @@
+unit freadlin;
+{**********************************************************************
+ Copyright (c) 2007 by Daniel Mantione
+
+ A fake read line library which allows us to use libgdb in the IDE
+ without linking the bloated and unused GNU readline library.
+
+ 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.
+
+ **********************************************************************}
+
+{$calling cdecl}
+
+interface
+
+implementation
+
+uses ctypes;
+
+var rl_end:cint;public name 'rl_end'; {The number of characters in the readline buffer.}
+ rl_point:cint;public name 'rl_point'; {The cursor position in the readline buffer.}
+ rl_prompt:Pchar;public name 'rl_prompt'; {The prompt readline should use.}
+ rl_instream:pointer;public name 'rl_instream'; {The FILE* for input.}
+ rl_outstream:pointer;public name 'rl_outstream';{The FILE* for output.}
+ rl_terminal_name:pointer;public name 'rl_terminal_name'; {The terminal (set by TERM) readline thinks it is using.}
+ rl_prep_term_function:pointer;public name 'rl_prep_term_function'; {Procedure to initialize terminal.}
+ rl_getc_function:pointer;public name 'rl_getc_function'; {The function to get a char from input.}
+ rl_line_buffer:Pchar;public name 'rl_line_buffer'; {The buffer readline is currently reading into.}
+ rl_completer_word_break_characters:Pchar;public name 'rl_completer_word_break_characters';
+ rl_completer_quote_characters:Pchar;public name 'rl_completer_quote_characters';
+ rl_already_prompted:cint;public name 'rl_already_prompted';
+ readline_echoing_p:cint;public name 'readline_echoing_p';
+ rl_startup_hook:pointer;public name 'rl_startup_hook';
+ emacs_ctlx_keymap:pointer;public name 'emacs_ctlx_keymap';
+ rl_readline_name:Pchar;public name 'rl_readline_name';
+ rl_deprep_term_function:pointer;public name 'rl_deprep_term_function';
+ rl_redisplay_function:pointer;public name 'rl_redisplay_function';
+ rl_pre_input_hook:pointer;public name 'rl_pre_input_hook';
+ rl_completion_entry_function:pointer;public name 'rl_completion_entry_function';
+ rl_filename_completion_desired:cint;public name 'rl_filename_completion_desired';
+ rl_completion_display_matches_hook:pointer;public name 'rl_completion_display_matches_hook';
+ rl_completion_query_items:cint;public name 'rl_completion_query_items';
+ rl_ignore_completion_duplicates:cint;public name 'rl_ignore_completion_duplicates';
+ rl_print_completions_horizontally:cint;public name '_rl_print_completions_horizontally';
+
+function rl_initialize:cint;public;alias:'rl_initialize';
+
+{Should initialize readline and return 0 if successfull.}
+
+begin
+ runerror(254);
+end;
+
+function rl_reset_terminal(terminal:Pchar):cint;public;alias:'rl_reset_terminal';
+
+begin
+ {Called by gdb, do nothing.}
+end;
+
+function rl_tilde_expand(s:Pchar):Pchar;public;alias:'tilde_expand';
+
+begin
+ {Called by gdb, don't expand, return original string.}
+ rl_tilde_expand:=s;
+end;
+
+function rl_newline(count,key:cint):cint;public;alias:'rl_newline';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_get_screen_size(var rows,cols:cint);public;alias:'rl_get_screen_size';
+
+begin
+ {Called by gdb. Fake a 80x25 screen.}
+ {Gdb can call using nil pointers.}
+ if @rows<>nil then
+ rows:=25;
+ if @cols<>nil then
+ cols:=80;
+end;
+
+procedure rl_set_screen_size(rows,cols:cint);public;alias:'rl_set_screen_size';
+
+begin
+ {Called by gdb, do nothing.}
+end;
+
+function rl_bind_key_in_map(key:cint;rl_command_func_t:pointer;map:pointer):cint;public;alias:'rl_bind_key_in_map';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_set_keymap(keymap:pointer);public;alias:'rl_set_keymap';
+
+begin
+ runerror(254);
+end;
+
+function rl_get_keymap:pointer;public;alias:'rl_get_keymap';
+
+begin
+ runerror(254);
+end;
+
+function rl_make_bare_keymap:pointer;public;alias:'rl_make_bare_keymap';
+
+begin
+ runerror(254);
+end;
+
+function rl_add_defun(name:Pchar;rl_command_func_t:pointer;key:cint):cint;public;alias:'rl_add_defun';
+
+begin
+ {Called by gdb, do nothing.}
+end;
+
+function rl_insert(count,c:cint):cint;public;alias:'rl_insert';
+
+begin
+ runerror(254);
+end;
+
+function rl_kill_text(start,stop:cint):cint;public;alias:'rl_kill_text';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_prep_terminal(meta_flag:cint);public;alias:'rl_prep_terminal';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_deprep_terminal;public;alias:'rl_deprep_terminal';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_callback_handler_install(prompt:Pchar;lhandler:pointer);public;alias:'rl_callback_handler_install';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_callback_handler_remove;public;alias:'rl_callback_handler_remove';
+
+begin
+ runerror(254);
+end;
+
+function rl_filename_completion_function(text:Pchar;state:cint):Pchar;public;alias:'rl_filename_completion_function';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_callback_read_char;public;alias:'rl_callback_read_char';
+
+begin
+ runerror(254);
+end;
+
+procedure rl_redisplay;public;alias:'rl_redisplay';
+
+begin
+ runerror(254);
+end;
+
+function rl_generic_bind(_type:cint;keyseq,data:Pchar;map:pointer):cint;public;alias:'rl_generic_bind';
+
+begin
+ runerror(254);
+end;
+
+function rl_get_previous_history(count,key:cint):cint;public;alias:'rl_get_previous_history';
+
+begin
+ runerror(254);
+end;
+
+function rl_read_key:cint;public;alias:'rl_read_key';
+
+begin
+ runerror(254);
+end;
+
+function rl_abort_internal:cint;public;alias:'_rl_abort_internal';
+
+begin
+ runerror(254);
+end;
+
+function readline(prompt:Pchar):Pchar;public;alias:'readline';
+
+begin
+ runerror(254);
+end;
+
+function rl_qsort_string_compare(s1,s2:Pchar):cint;public;alias:'_rl_qsort_string_compare';
+
+begin
+ runerror(254);
+end;
+
+begin
+ rl_end:=0;
+ rl_point:=0;
+ rl_prompt:=nil;
+ rl_instream:=nil;
+ rl_outstream:=nil;
+ rl_terminal_name:=nil;
+ rl_already_prompted:=0;
+ rl_completer_word_break_characters:=nil;
+ rl_completer_quote_characters:=nil;
+ rl_line_buffer:=nil;
+ rl_getc_function:=nil;
+ rl_prep_term_function:=nil;
+ rl_startup_hook:=nil;
+ readline_echoing_p:=0;
+ emacs_ctlx_keymap:=nil;
+ rl_readline_name:=nil;
+ rl_deprep_term_function:=nil;
+ rl_redisplay_function:=nil;
+ rl_completion_entry_function:=nil;
+ rl_filename_completion_desired:=0;
+ rl_completion_display_matches_hook:=nil;
+ rl_ignore_completion_duplicates:=0;
+ rl_print_completions_horizontally:=0;
+end. \ No newline at end of file
diff --git a/packages/gdbint/src/gdbcon.pp b/packages/gdbint/src/gdbcon.pp
new file mode 100644
index 0000000000..dce8bbae97
--- /dev/null
+++ b/packages/gdbint/src/gdbcon.pp
@@ -0,0 +1,346 @@
+{
+ Copyright (c) 1998 by Peter Vreman
+
+ Lowlevel GDB interface which communicates directly with libgdb
+
+ 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.
+
+ **********************************************************************}
+unit GDBCon;
+interface
+
+uses
+ GDBInt;
+
+type
+ PGDBController=^TGDBController;
+ TGDBController=object(TGDBInterface)
+ progname,
+ progdir,
+ progargs : pchar;
+ in_command,
+ init_count : longint;
+ constructor Init;
+ destructor Done;
+ procedure CommandBegin(const s:string);virtual;
+ procedure Command(const s:string);
+ procedure CommandEnd(const s:string);virtual;
+ procedure Reset;virtual;
+ { tracing }
+ procedure StartTrace;
+ procedure Run;virtual;
+ procedure TraceStep;virtual;
+ procedure TraceNext;virtual;
+ procedure TraceStepI;virtual;
+ procedure TraceNextI;virtual;
+ procedure Continue;virtual;
+ { needed for dos because newlines are only #10 (PM) }
+ procedure WriteErrorBuf;
+ procedure WriteOutputBuf;
+ function GetOutput : Pchar;
+ function GetError : Pchar;
+ function LoadFile(var fn:string):boolean;
+ procedure SetDir(const s : string);
+ procedure SetArgs(const s : string);
+ procedure ClearSymbols;
+ end;
+
+procedure UnixDir(var s : string);
+
+implementation
+
+uses
+{$ifdef win32}
+ windows,
+{$endif win32}
+ strings;
+
+{$ifdef win32}
+const
+ CygDrivePrefixKey1 = 'Software';
+ CygDrivePrefixKey2 = 'Cygnus Solutions';
+ CygDrivePrefixKey3 = 'Cygwin';
+ CygDrivePrefixKey4 = 'mounts v2';
+ CygDrivePrefixKey = 'cygdrive prefix';
+
+function CygDrivePrefix : string;
+var
+ i : longint;
+ length : dword;
+ Value : pchar;
+ _type : dword;
+ Key,NKey : HKey;
+begin
+ Length:=0;
+ Key:=HKEY_CURRENT_USER;
+ i := RegOpenKeyEx(Key, CygDrivePrefixKey1, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+ if i=ERROR_SUCCESS then
+ begin
+ Key:=NKey;
+ i := RegOpenKeyEx(Key, CygDrivePrefixKey2, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+ end;
+ if i=ERROR_SUCCESS then
+ begin
+ RegCloseKey(Key);
+ Key:=NKey;
+ i := RegOpenKeyEx(Key, CygDrivePrefixKey3, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+ end;
+ if i=ERROR_SUCCESS then
+ begin
+ RegCloseKey(Key);
+ Key:=NKey;
+ i := RegOpenKeyEx(Key, CygDrivePrefixKey4, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+ end;
+ if i=ERROR_SUCCESS then
+ begin
+ RegCloseKey(Key);
+ Key:=NKey;
+ i := RegQueryValueEx( Key, CygDrivePrefixKey, nil, @_type, nil, @length);
+ end;
+ if i<>ERROR_SUCCESS then
+ CygDrivePrefix:='/cygdrive'
+ else
+ Begin
+ GetMem(Value,Length);
+ i := RegQueryValueEx( Key, CygDrivePrefixKey, nil, @_type, LPByte(Value), @length);
+ if i<>ERROR_SUCCESS then
+ CygDrivePrefix:='/cygdrive'
+ else
+ CygDrivePrefix:=StrPas(Value);
+ FreeMem(Value,Length);
+ End;
+ if Key<>HKEY_CURRENT_USER then
+ RegCloseKey(Key);
+end;
+{$endif win32}
+
+procedure UnixDir(var s : string);
+var i : longint;
+begin
+ for i:=1 to length(s) do
+ if s[i]='\' then
+{$ifdef win32}
+ { Don't touch at '\ ' used to escapes spaces in windows file names PM }
+ if (i=length(s)) or (s[i+1]<>' ') then
+{$endif win32}
+ s[i]:='/';
+{$ifdef win32}
+{ for win32 we should convert e:\ into //e/ PM }
+ if (length(s)>2) and (s[2]=':') and (s[3]='/') then
+ s:=CygDrivePrefix+'/'+s[1]+copy(s,3,length(s));
+{$endif win32}
+end;
+
+constructor TGDBController.Init;
+begin
+ inherited init;
+end;
+
+
+destructor TGDBController.Done;
+begin
+ if assigned(progname) then
+ strdispose(progname);
+ if assigned(progdir) then
+ strdispose(progdir);
+ if assigned(progargs) then
+ strdispose(progargs);
+ inherited done;
+end;
+
+
+procedure TGDBController.Command(const s:string);
+begin
+ inc(in_command);
+ CommandBegin(s);
+ gdboutputbuf.reset;
+ gdberrorbuf.reset;
+ gdb_command(s);
+ {
+ What is that for ?? PM
+ I had to comment it because
+ it resets the debuggere after each command !!
+ Maybe it can happen on errors ??
+ if in_command<0 then
+ begin
+ in_command:=0;
+ inc(in_command);
+ Reset;
+ dec(in_command);
+ end; }
+ CommandEnd(s);
+ dec(in_command);
+end;
+
+procedure TGDBController.CommandBegin(const s:string);
+begin
+end;
+
+procedure TGDBController.CommandEnd(const s:string);
+begin
+end;
+
+function TGDBController.LoadFile(var fn:string):boolean;
+var
+ cmd : string;
+begin
+ getdir(0,cmd);
+ UnixDir(cmd);
+ cmd:='cd '+cmd;
+ Command(cmd);
+ GDB__Init;
+ UnixDir(fn);
+ if assigned(progname) then
+ strdispose(progname);
+ getmem(progname,length(fn)+1);
+ strpcopy(progname,fn);
+ if fn<>'' then
+ Command('file '+fn);
+ LoadFile:=true;
+end;
+
+procedure TGDBController.SetDir(const s : string);
+var
+ hs : string;
+begin
+ hs:=s;
+ UnixDir(hs);
+ if assigned(progdir) then
+ strdispose(progdir);
+ getmem(progdir,length(hs)+1);
+ strpcopy(progdir,hs);
+ command('cd '+hs);
+end;
+
+procedure TGDBController.SetArgs(const s : string);
+begin
+ if assigned(progargs) then
+ strdispose(progargs);
+ getmem(progargs,length(s)+1);
+ strpcopy(progargs,s);
+ command('set args '+s);
+end;
+
+procedure TGDBController.Reset;
+begin
+ call_reset:=false;
+{ DeleteBreakPoints(); }
+ if debuggee_started then
+ begin
+ reset_command:=true;
+ BreakSession;
+ Command('kill');
+ reset_command:=false;
+ debuggee_started:=false;
+ end;
+end;
+
+procedure TGDBController.StartTrace;
+begin
+ Command('tbreak PASCALMAIN');
+ Run;
+end;
+
+procedure TGDBController.Run;
+begin
+ Command('run');
+ inc(init_count);
+end;
+
+
+procedure TGDBController.TraceStep;
+begin
+ Command('step');
+end;
+
+
+procedure TGDBController.TraceNext;
+begin
+ Command('next');
+end;
+
+
+procedure TGDBController.TraceStepI;
+begin
+ Command('stepi');
+end;
+
+
+procedure TGDBController.TraceNextI;
+begin
+ Command('nexti');
+end;
+
+
+procedure TGDBController.Continue;
+begin
+ Command('continue');
+end;
+
+
+procedure TGDBController.ClearSymbols;
+begin
+ if debuggee_started then
+ Reset;
+ if init_count>0 then
+ Command('file');
+end;
+
+
+procedure BufWrite(Buf : pchar);
+ var p,pe : pchar;
+begin
+ p:=buf;
+ While assigned(p) do
+ begin
+ pe:=strscan(p,#10);
+ if pe<>nil then
+ pe^:=#0;
+ Writeln(p);
+ { restore for dispose }
+ if pe<>nil then
+ pe^:=#10;
+ if pe=nil then
+ p:=nil
+ else
+ begin
+ p:=pe;
+ inc(p);
+ end;
+ end;
+end;
+
+
+function TGDBController.GetOutput : Pchar;
+begin
+ GetOutput:=gdboutputbuf.buf;
+end;
+
+function TGDBController.GetError : Pchar;
+var p : pchar;
+begin
+ p:=gdberrorbuf.buf;
+ if (p^=#0) and got_error then
+ GetError:=pchar(longint(gdboutputbuf.buf)+gdboutputbuf.idx)
+ else
+ GetError:=p;
+end;
+
+procedure TGDBController.WriteErrorBuf;
+begin
+ BufWrite(gdberrorbuf.buf);
+end;
+
+
+procedure TGDBController.WriteOutputBuf;
+begin
+ BufWrite(gdboutputbuf.buf);
+end;
+
+
+end.
diff --git a/packages/gdbint/src/gdbint.pp b/packages/gdbint/src/gdbint.pp
new file mode 100644
index 0000000000..c0aa6b35f7
--- /dev/null
+++ b/packages/gdbint/src/gdbint.pp
@@ -0,0 +1,2621 @@
+{
+ Copyright (c) 1998 by Peter Vreman
+
+ Lowlevel GDB interface which communicates directly with libgdb
+
+ 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.
+
+ **********************************************************************}
+unit GdbInt;
+
+{$i gdbver.inc}
+
+interface
+
+{$smartlink off}
+
+{.$define Verbose}
+{.$define DebugCommand}
+{$define NotImplemented}
+
+{ 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}
+ {$define GDB_HAS_DB_COMMANDS}
+ {$undef GDB_HAS_DEPRECATED_CBPH}
+{$endif def GDB_V601}
+
+{ 6.2.x }
+{$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 }
+{$ifdef GDB_V604}
+ {$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 }
+{$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_HAS_DB_COMMANDS}
+ {$define GDB_NEEDS_NO_ERROR_INIT}
+ {$define GDB_USES_EXPAT_LIB}
+ {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+{$endif def GDB_V605}
+
+{ 6.7.x }
+{$ifdef GDB_V607}
+ {$info using gdb 6.7.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}
+{$endif def GDB_V605}
+
+{$ifdef GDB_V6}
+ {$define GDB_HAS_SYSROOT}
+ {$define GDB_HAS_DB_COMMANDS}
+ {$define GDB_SYMTAB_HAS_MACROS}
+ {$define GDB_INIT_HAS_ARGV0}
+{$endif GDB_V6}
+
+{ GDB has a simulator for powerpc CPU
+ it is integrated into GDB by default }
+{$ifdef cpupowerpc}
+ {$define GDB_HAS_SIM}
+{$endif cpupowerpc}
+
+{$ifdef go32v2}
+ {$undef NotImplemented}
+ {$LINKLIB gdb}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB sim}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB bfd}
+ {$LINKLIB readline}
+ {$LINKLIB opcodes}
+ {$LINKLIB history}
+ {$LINKLIB iberty}
+ {$LINKLIB intl}
+ {$LINKLIB dbg}
+ {$LINKLIB c}
+{$endif go32v2}
+
+{$ifdef linux}
+ {$undef NotImplemented}
+ {$LINKLIB libgdb.a}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB libsim.a}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB libbfd.a}
+ {$LINKLIB libreadline.a}
+ {$LINKLIB libopcodes.a}
+ {$LINKLIB libhistory.a}
+ {$LINKLIB libiberty.a}
+ {$ifdef GDB_USES_EXPAT_LIB}
+ {$LINKLIB expat}
+ {$endif GDB_USES_EXPAT_LIB}
+ {$LINKLIB ncurses}
+ {$LINKLIB m}
+ {$LINKLIB dl}
+ {$LINKLIB c}
+ {$LINKLIB gcc}
+{$endif linux}
+
+{$ifdef freebsd}
+ {$ifdef FreeBSD5} //5.4+ ?
+ {$linklib kvm}
+ {$endif}
+ {$undef NotImplemented}
+ {$LINKLIB gdb}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB sim}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB bfd}
+ {$LINKLIB readline}
+ {$LINKLIB opcodes}
+ {$LINKLIB history}
+ {$LINKLIB iberty}
+ {$LINKLIB ncurses}
+ {$LINKLIB m}
+ {$LINKLIB iberty}
+ {$LINKLIB 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}
+ {$endif GDB_USES_EXPAT_LIB}
+ {$LINKLIB c}
+ {$LINKLIB gcc}
+{$endif freebsd}
+
+{$ifdef netbsd}
+ {$undef NotImplemented}
+ {$LINKLIB gdb}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB sim}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB bfd}
+ {$LINKLIB readline}
+ {$LINKLIB opcodes}
+ {$LINKLIB history}
+ {$LINKLIB iberty}
+ {$LINKLIB ncurses}
+ {$LINKLIB m}
+ {$LINKLIB iberty}
+ {$LINKLIB intl}
+ {$ifdef GDB_USES_EXPAT_LIB}
+ {$LINKLIB expat}
+ {$endif GDB_USES_EXPAT_LIB}
+ { does not seem to exist on netbsd LINKLIB dl}
+ {$LINKLIB c}
+ {$LINKLIB gcc}
+{$endif netbsd}
+
+{$ifdef openbsd}
+ {$undef NotImplemented}
+ {$LINKLIB gdb}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB sim}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB bfd}
+ {$LINKLIB readline}
+ {$LINKLIB opcodes}
+ {$LINKLIB history}
+ {$LINKLIB iberty}
+ {$LINKLIB ncurses}
+ {$LINKLIB m}
+ {$LINKLIB iberty}
+ {$LINKLIB intl}
+ {$ifdef GDB_USES_EXPAT_LIB}
+ {$LINKLIB expat}
+ {$endif GDB_USES_EXPAT_LIB}
+ { does not seem to exist on netbsd LINKLIB dl}
+ {$LINKLIB c}
+ {$LINKLIB gcc}
+{$endif netbsd}
+
+{$ifdef win32}
+ {$undef NotImplemented}
+ {$LINKLIB libgdb.a}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB libsim.a}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB libbfd.a}
+ {$LINKLIB libreadline.a}
+ {$LINKLIB libopcodes.a}
+ {$LINKLIB libhistory.a}
+ {$LINKLIB libiberty.a}
+ {$LINKLIB libintl.a}
+ {$ifdef USE_MINGW_GDB}
+ {$LINKLIB libm.a}
+ {$LINKLIB libmoldname.a}
+ {$LINKLIB libgcc.a}
+ {$LINKLIB libws2_32.a}
+ {$LINKLIB libmingwex.a}
+ {$LINKLIB libmingw32.a}
+ {$LINKLIB libmsvcrt.a}
+ {$else not USE_MINGW_GDB}
+ {$LINKLIB libiconv.a}
+ {$LINKLIB libncurses.a}
+ {$ifdef GDB_USES_EXPAT_LIB}
+ {$LINKLIB expat}
+ {$endif GDB_USES_EXPAT_LIB}
+ {$LINKLIB gcc}
+ {$LINKLIB cygwin} { alias of libm.a and libc.a }
+ {$LINKLIB imagehlp}
+ {$endif not USE_MINGW_GDB}
+ {$LINKLIB kernel32}
+ {$LINKLIB user32}
+{$endif win32}
+
+{$ifdef beos}
+ { still need some work... stollen from netbsd}
+ {$undef NotImplemented}
+ {$LINKLIB gdb}
+ {$ifdef GDB_HAS_SIM}
+ {$LINKLIB sim}
+ {$endif GDB_HAS_SIM}
+ {$LINKLIB bfd}
+ {$LINKLIB readline}
+ {$LINKLIB opcodes}
+ { $ LINKLIB history}
+ {$LINKLIB iberty}
+ {$LINKLIB ncurses}
+ { $ LINKLIB m} // include in libroot under BeOS
+ {$LINKLIB intl}
+ {$ifdef GDB_USES_EXPAT_LIB}
+ {$LINKLIB expat}
+ {$endif GDB_USES_EXPAT_LIB}
+ { does not seem to exist on netbsd LINKLIB dl}
+ { $ LINKLIB c} // This is libroot under BeOS, and always linked
+ {$LINKLIB debug}
+ {$LINKLIB gcc}
+{$endif beos}
+
+{$ifdef go32v2}
+ {$define supportexceptions}
+{$endif go32v2}
+{$ifdef unix}
+ {$define supportexceptions}
+{$endif unix}
+
+{$ifdef CROSSGDB}
+ { do we need something special if cross GDB? }
+{$endif CROSSGDB}
+
+{$ifdef NotImplemented}
+ {$fatal This OS is not yet supported !!!}
+{$endif NotImplemented}
+
+{$packrecords C}
+
+type
+ psyminfo=^tsyminfo;
+ tsyminfo=record
+ address : ptrint;
+ fname : pchar;
+ line : longint;
+ funcname : pchar;
+ offset : ptrint;
+ end;
+
+ tframeentry = object
+ file_name : pchar;
+ function_name : pchar;
+ args : pchar;
+ line_number : longint;
+ address : ptrint;
+ level : longint;
+ constructor init;
+ destructor done;
+ procedure reset;
+ procedure clear;
+ end;
+ pframeentry=^tframeentry;
+ ppframeentry=^pframeentry;
+
+{ needed for handles }
+{not anymore I textrec.inc}
+
+const
+ k=1;
+
+type
+{$if defined(CPUSPARC) and defined(LINUX)}
+ CORE_ADDR = qword;
+{$else}
+ CORE_ADDR = ptrint; { might be target dependent PM }
+{$endif}
+ streamtype = (afile,astring);
+ C_FILE = ptrint; { at least under DJGPP }
+ P_C_FILE = ^C_FILE;
+
+type
+
+ pui_file = ^ui_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_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;
+ ui_file_rewind_ftype = procedure(stream : pui_file);cdecl;
+ ui_file_put_method_ftype = procedure(var _object; buffer : pchar;length_buffer : longint);cdecl;
+ ui_file_put_ftype = procedure(stream : pui_file;method : ui_file_put_method_ftype;var context);cdecl;
+ {$ifdef GDB_V6}
+ ui_file_read_ftype = function (stream : pui_file; buffer : pchar; len : longint):longint;cdecl;
+ {$endif}
+
+ ui_file = record
+ magic : plongint;
+ to_flush : ui_file_flush_ftype;
+ to_write : ui_file_write_ftype;
+ to_fputs : ui_file_fputs_ftype;
+ {$ifdef GDB_V6}
+ to_read : ui_file_read_ftype;
+ {$endif}
+ to_delete : ui_file_delete_ftype;
+ to_isatty : ui_file_isatty_ftype;
+ to_rewind : ui_file_rewind_ftype;
+ to_put : ui_file_put_ftype;
+ to_data : pointer;
+ end;
+
+ { used to delete stdio_ui_file gdb_stdout and gdb_stderr }
+ procedure ui_file_delete(stream : pui_file);cdecl;external;
+
+ { used to recreate gdb_stdout and gdb_stderr as memory streams }
+ function mem_fileopen : pui_file;cdecl;external;
+
+ { used to change the write procvar to ours }
+
+ procedure set_ui_file_write(stream : pui_file;write : ui_file_write_ftype);cdecl;external;
+
+
+ type
+
+ (* struct ptid
+ {
+ /* Process id */
+ int pid;
+
+ /* Lightweight process id */
+ long lwp;
+
+ /* Thread id */
+ long tid;
+ }; *)
+ pinferior_ptid = ^tinferior_ptid;
+ tinferior_ptid = record
+ pid : longint{C int};
+ lwp : ptrint{ C long};
+ tid : ptrint{ C long};
+ end;
+
+{$ifdef win32}
+
+type
+ { from sys/reent.h
+ real structure is bigger but only std.. are wanted here PM }
+ REENT = record
+ err : longint;
+ stdin,stdout,stderr : P_C_FILE;
+ end;
+ PREENT = ^REENT;
+
+var _impure_ptr : PREENT;cvar;external;
+
+{$endif win32}
+
+
+type
+ tgdbbuffer=object
+ buf : pchar;
+ size,
+ idx : longint;
+ gdb_file : pui_file;
+ constructor Init;
+ destructor Done;
+ procedure Reset;
+ procedure Resize(nsize : longint);
+ procedure Append(p:pchar);
+ procedure lappend(p:pchar;len : longint);
+ end;
+
+ pgdbinterface=^tgdbinterface;
+ tgdbinterface=object
+ gdberrorbuf,
+ gdboutputbuf : tgdbbuffer;
+ got_error,
+ reset_command,
+ call_reset,
+ signaled,
+ Debuggee_started : boolean;
+ { frames and frame info while recording a frame }
+ frames : ppframeentry;
+ frame_size,
+ frame_count : longint;
+ record_frames,
+ frame_begin_seen : boolean;
+ frame_level,
+ command_level,
+ stop_breakpoint_number,
+ current_address,
+ current_line_number,
+ signal_start,
+ signal_end,
+ signal_name_start,
+ signal_name_end,
+ error_start,
+ error_end,
+ function_start,
+ function_end,
+ args_start,
+ args_end,
+ file_start,
+ file_end,
+ line_start,
+ line_end : longint;
+ signal_name,
+ signal_string : pchar;
+ current_pc : CORE_ADDR;
+ { breakpoint }
+ last_breakpoint_number,
+ last_breakpoint_address,
+ last_breakpoint_line : longint;
+ last_breakpoint_file : pchar;
+ invalid_breakpoint_line : boolean;
+ { init }
+ constructor init;
+ destructor done;
+ { Lowlevel }
+ function error:boolean;
+ function error_num:longint;
+ procedure gdb_command(const s:string);
+ procedure gdb__init;
+ procedure gdb_done;
+ procedure resize_frames;
+ function add_frameentry:pframeentry;
+ function get_frameentry(level : longint):pframeentry;
+ function get_current_frame : ptrint;
+ function set_current_frame(level : longint) : boolean;
+ procedure clear_frames;
+ { Highlevel }
+ user_screen_shown,
+ switch_to_user : boolean;
+ procedure GetAddrSyminfo(addr:ptrint;var si:tsyminfo);
+ procedure SelectSourceline(fn:pchar;line:longint);
+ procedure StartSession;
+ procedure BreakSession;
+ procedure EndSession(code:longint);
+ procedure DebuggerScreen;
+ procedure UserScreen;
+ { Hooks }
+ procedure DoSelectSourceline(const fn:string;line:longint);virtual;
+ procedure DoStartSession;virtual;
+ procedure DoBreakSession;virtual;
+ procedure DoEndSession(code:longint);virtual;
+ procedure DoUserSignal;virtual;
+ procedure DoDebuggerScreen;virtual;
+ procedure DoUserScreen;virtual;
+ function AllowQuit : boolean;virtual;
+ end;
+
+
+const
+ use_gdb_file : boolean = false;
+
+var
+ curr_gdb : pgdbinterface;
+ gdb_file : text;
+ inferior_ptid : tinferior_ptid;cvar;external;
+
+function GDBVersion : string;
+function inferior_pid : longint;
+
+{$ifdef GDB_V6}
+type
+ ui_out = pointer;
+var
+ uiout : ui_out;cvar;external;
+function cli_out_new (stream : pui_file):ui_out;cdecl;external;
+{$endif}
+
+{$ifdef go32v2}
+ { needed to be sure %fs contains the DOS memory selector
+ used in Mem[] code PM }
+ procedure reload_fs;
+{$endif go32v2}
+
+
+
+implementation
+
+uses
+{$ifdef win32}
+ {$ifdef USE_MINGW_GDB}
+ {$else not USE_MINGW_GDB}
+ initc,
+ {$endif not USE_MINGW_GDB}
+{$endif win32}
+{$ifdef unix}
+ baseunix,
+{$endif}
+{$ifdef go32v2}
+ go32,
+ dpmiexcp,
+ initc,
+{$endif}
+ strings;
+
+{*****************************************************************************
+ Types used by libgdb.a
+*****************************************************************************}
+
+{$ifdef go32v2}
+type
+ jmp_buf = dpmi_jmp_buf;
+ pjmp_buf = pdpmi_jmp_buf;
+
+ function setjmp(var rec : jmp_buf) : longint;cdecl;external;
+
+ procedure longjmp(var rec : jmp_buf;return_value : longint);cdecl;external;
+
+ procedure reload_fs;assembler;
+ asm
+ movw dosmemselector,%ax
+ movw %ax,%fs
+ end['EAX'];
+
+{$endif}
+{$ifdef win32}
+type
+ jmp_buf = record
+ case byte of
+ 0 :
+ { greatest value found in cygwin machine/setjmp.h for i386 }
+ (unknown_field : array [1..13] of longint;);
+ 1 :
+ (eax,ebx,ecx,edx : longint;
+ esi,edi,ebp,esp,eip : longint;);
+ end;
+
+ pjmp_buf = ^jmp_buf;
+{$ifdef USE_MINGW_GDB}
+ { for obscure reasons, longjmp and _setjmp are defined in mingw32 libmsvcrt.a }
+ function _setjmp(var rec : jmp_buf) : longint; cdecl; external;
+ procedure longjmp(var rec : jmp_buf;return_value : longint); cdecl; external;
+ function setjmp(var rec : jmp_buf) : longint;
+ begin
+ setjmp:=_setjmp(rec);
+ end;
+{$else not USE_MINGW_GDB}
+ function setjmp(var rec : jmp_buf) : longint;cdecl;external;
+
+ procedure longjmp(var rec : jmp_buf;return_value : longint);cdecl;external;
+{$endif not USE_MINGW_GDB}
+
+{$ifndef supportexceptions}
+type
+ { I don't think FPC would accept that
+ the funcvar return type is the funcvar type itself ! PM }
+ SignalHandler = Procedure(Sig : LongInt);cdecl;
+ function signal(sig : longint;new_signal : SignalHandler) : SignalHandler;cdecl;external;
+
+{define supportexceptions not yet working }
+{$endif now exceptions are supported for win32}
+{$endif win32}
+
+ type
+ pCORE_ADDR = ^CORE_ADDR;
+ pblock = ^block;
+
+ tlanguage = (language_unknown,language_auto,language_c,
+ language_cplus,language_java,language_chill,
+ language_fortran,language_m2,language_asm,
+ language_scm,language_pascal,language_objc);
+
+ bptype = (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,
+ bp_through_sigtramp,bp_watchpoint_scope,
+ bp_call_dummy,bp_shlib_event);
+
+ tenable = (disabled,enabled,shlib_disabled);
+
+ bpdisp = (del,del_at_next_stop,disable,donttouch);
+
+{$PACKRECORDS 4}
+ pbreakpoint = ^breakpoint;
+ breakpoint = record
+ next : pbreakpoint;
+ typ : bptype;
+ enable : tenable;
+ disposition : bpdisp;
+ number : longint;
+ address : CORE_ADDR;
+ line_number : longint;
+ source_file : pchar;
+ silent : byte;
+ ignore_count : longint;
+ shadow_contents : array[0..15] of char;
+ inserted : char;
+ duplicate : char;
+ commands : pointer; {^command_line}
+ frame : CORE_ADDR;
+ cond : pointer; {^expression}
+ addr_string : ^char;
+ language : tlanguage;
+ input_radix : longint;
+ cond_string : ^char;
+ exp_string : ^char;
+ exp : pointer; {^expression}
+ exp_valid_block : pblock; {^block;}
+ val : pointer; {value_ptr;}
+ val_chain : pointer; {value_ptr;}
+ related_breakpoint : pbreakpoint;
+ watchpoint_frame : CORE_ADDR;
+ thread : longint;
+ hit_count : longint;
+ section : pointer; {^asection}
+ end;
+
+ tfreecode=(free_nothing,free_contents,free_linetable);
+
+ psymtab = ^symtab;
+ symtab = record
+ next : psymtab;
+ blockvector : pointer; {^blockvector;}
+ linetable : pointer; {^linetable;}
+ block_line_section : longint;
+ primary : longint;
+ {$ifdef GDB_SYMTAB_HAS_MACROS}
+ { new field added in the middle :( }
+ macro_table : pointer;
+ {$endif GDB_SYMTAB_HAS_MACROS}
+ filename : pchar;
+ dirname : pchar;
+ free_code : tfreecode;
+ free_ptr : pchar;
+ nlines : longint;
+ line_charpos : ^longint;
+ language : tlanguage;
+ Debugformat : pchar;
+ version : pchar;
+ fullname : pchar;
+ objfile : pointer; {^objfile;}
+ end;
+
+ psymtab_and_line = ^symtab_and_line;
+ symtab_and_line = record
+ symtab : psymtab;
+ section : pointer; {^asection;}
+ line : longint;
+ pc : CORE_ADDR;
+ _end : CORE_ADDR;
+ end;
+
+ symtabs_and_lines = record
+ sals : ^symtab_and_line;
+ nelts : longint;
+ end;
+
+ psymbol = ^symbol;
+ pminimal_symbol = ^minimal_symbol;
+
+ general_symbol_info = record
+ (* Name of the symbol. This is a required field. Storage for the name is
+ allocated on the psymbol_obstack or symbol_obstack for the associated
+ objfile. *)
+
+ _name : pchar;
+
+ (* Value of the symbol. Which member of this union to use, and what
+ it means, depends on what kind of symbol this is and its
+ SYMBOL_CLASS. See comments there for more details. All of these
+ are in host byte order (though what they point to might be in
+ target byte order, e.g. LOC_CONST_BYTES). *)
+ value : record
+ case integer of
+ (* The fact that this is a long not a LONGEST mainly limits the
+ range of a LOC_CONST. Since LOC_CONST_BYTES exists, I'm not
+ sure that is a big deal. *)
+ 0 : (ivalue : longint;);
+
+ 1 : (block : pblock;);
+
+ 2 : (bytes : pchar;);
+
+ 3 : (address : CORE_ADDR;);
+
+ (* for opaque typedef struct chain *)
+
+ 4 : (chain : psymbol;);
+ end;
+
+ (* Since one and only one language can apply, wrap the language specific
+ information inside a union. *)
+
+ (* union
+ {
+ struct cplus_specific /* For C++ */
+ /* and Java */
+ {
+ char *demangled_name;
+ } cplus_specific;
+ struct chill_specific /* For Chill */
+ {
+ char *demangled_name;
+ } chill_specific;
+ } language_specific; *)
+ demangled_name : pchar;
+
+ (* Record the source code language that applies to this symbol.
+ This is used to select one of the fields from the language specific
+ union above. *)
+
+ language : tlanguage;
+
+ (* Which section is this symbol in? This is an index into
+ section_offsets for this objfile. Negative means that the symbol
+ does not get relocated relative to a section.
+ Disclaimer: currently this is just used for xcoff, so don't
+ expect all symbol-reading code to set it correctly (the ELF code
+ also tries to set it correctly). *)
+
+ section : word;
+
+ (* The bfd section associated with this symbol. *)
+
+ bfd_section : pointer {^asection};
+ end; { of general_symbol_info record declaration }
+
+ tminimal_symbol_type =
+ (
+ mst_unknown := 0, (* Unknown type, the default *)
+ mst_text, (* Generally executable instructions *)
+ mst_data, (* Generally initialized data *)
+ mst_bss, (* Generally uninitialized data *)
+ mst_abs, (* Generally absolute (nonrelocatable) *)
+ (* GDB uses mst_solib_trampoline for the start address of a shared
+ library trampoline entry. Breakpoints for shared library functions
+ are put there if the shared library is not yet loaded.
+ After the shared library is loaded, lookup_minimal_symbol will
+ prefer the minimal symbol from the shared library (usually
+ a mst_text symbol) over the mst_solib_trampoline symbol, and the
+ breakpoints will be moved to their true address in the shared
+ library via breakpoint_re_set. *)
+ mst_solib_trampoline, (* Shared library trampoline code *)
+ (* For the mst_file* types, the names are only guaranteed to be unique
+ within a given .o file. *)
+ mst_file_text, (* Static version of mst_text *)
+ mst_file_data, (* Static version of mst_data *)
+ mst_file_bss (* Static version of mst_bss *)
+ );
+
+ namespace_enum = (
+ (* UNDEF_NAMESPACE is used when a namespace has not been discovered or
+ none of the following apply. This usually indicates an error either
+ in the symbol information or in gdb's handling of symbols. *)
+ UNDEF_NAMESPACE,
+
+ (* VAR_NAMESPACE is the usual namespace. In C, this contains variables,
+ function names, typedef names and enum type values. *)
+ VAR_NAMESPACE,
+
+ (* STRUCT_NAMESPACE is used in C to hold struct, union and enum type names.
+ Thus, if `struct foo' is used in a C program, it produces a symbol named
+ `foo' in the STRUCT_NAMESPACE. *)
+ STRUCT_NAMESPACE,
+
+ (* LABEL_NAMESPACE may be used for names of labels (for gotos);
+ currently it is not used and labels are not recorded at all. *)
+ LABEL_NAMESPACE,
+
+ (* Searching namespaces. These overlap with VAR_NAMESPACE, providing
+ some granularity with the search_symbols function. *)
+ (* Everything in VAR_NAMESPACE minus FUNCTIONS_-, TYPES_-, and
+ METHODS_NAMESPACE *)
+ VARIABLES_NAMESPACE,
+
+ (* All functions -- for some reason not methods, though. *)
+ FUNCTIONS_NAMESPACE,
+
+ (* All defined types *)
+ TYPES_NAMESPACE,
+
+ (* All class methods -- why is this separated out? *)
+ METHODS_NAMESPACE
+
+ );
+ address_class = (
+ (* Not used; catches errors *)
+ LOC_UNDEF,
+
+ (* Value is constant int SYMBOL_VALUE, host byteorder *)
+ LOC_CONST,
+
+ (* Value is at fixed address SYMBOL_VALUE_ADDRESS *)
+ LOC_STATIC,
+
+ (* Value is in register. SYMBOL_VALUE is the register number. *)
+ LOC_REGISTER,
+
+ (* It's an argument; the value is at SYMBOL_VALUE offset in arglist. *)
+ LOC_ARG,
+
+ (* Value address is at SYMBOL_VALUE offset in arglist. *)
+ LOC_REF_ARG,
+
+ (* Value is in register number SYMBOL_VALUE. Just like LOC_REGISTER
+ except this is an argument. Probably the cleaner way to handle
+ this would be to separate address_class (which would include
+ separate ARG and LOCAL to deal with FRAME_ARGS_ADDRESS versus
+ FRAME_LOCALS_ADDRESS), and an is_argument flag.
+
+ For some symbol formats (stabs, for some compilers at least),
+ the compiler generates two symbols, an argument and a register.
+ In some cases we combine them to a single LOC_REGPARM in symbol
+ reading, but currently not for all cases (e.g. it's passed on the
+ stack and then loaded into a register). *)
+ LOC_REGPARM,
+
+ (* Value is in specified register. Just like LOC_REGPARM except the
+ register holds the address of the argument instead of the argument
+ itself. This is currently used for the passing of structs and unions
+ on sparc and hppa. It is also used for call by reference where the
+ address is in a register, at least by mipsread.c. *)
+ LOC_REGPARM_ADDR,
+
+ (* Value is a local variable at SYMBOL_VALUE offset in stack frame. *)
+ LOC_LOCAL,
+
+ (* Value not used; definition in SYMBOL_TYPE. Symbols in the namespace
+ STRUCT_NAMESPACE all have this class. *)
+ LOC_TYPEDEF,
+
+ (* Value is address SYMBOL_VALUE_ADDRESS in the code *)
+ LOC_LABEL,
+
+ (* In a symbol table, value is SYMBOL_BLOCK_VALUE of a `struct block'.
+ In a partial symbol table, SYMBOL_VALUE_ADDRESS is the start address
+ of the block. Function names have this class. *)
+ LOC_BLOCK,
+
+ (* Value is a constant byte-sequence pointed to by SYMBOL_VALUE_BYTES, in
+ target byte order. *)
+ LOC_CONST_BYTES,
+
+ (* Value is arg at SYMBOL_VALUE offset in stack frame. Differs from
+ LOC_LOCAL in that symbol is an argument; differs from LOC_ARG in
+ that we find it in the frame (FRAME_LOCALS_ADDRESS), not in the
+ arglist (FRAME_ARGS_ADDRESS). Added for i960, which passes args
+ in regs then copies to frame. *)
+ LOC_LOCAL_ARG,
+
+ (* Value is at SYMBOL_VALUE offset from the current value of
+ register number SYMBOL_BASEREG. This exists mainly for the same
+ things that LOC_LOCAL and LOC_ARG do; but we need to do this
+ instead because on 88k DWARF gives us the offset from the
+ frame/stack pointer, rather than the offset from the "canonical
+ frame address" used by COFF, stabs, etc., and we don't know how
+ to convert between these until we start examining prologues.
+
+ Note that LOC_BASEREG is much less general than a DWARF expression.
+ We don't need the generality (at least not yet), and storing a general
+ DWARF expression would presumably take up more space than the existing
+ scheme. *)
+ LOC_BASEREG,
+
+ (* Same as LOC_BASEREG but it is an argument. *)
+ LOC_BASEREG_ARG,
+
+ (* Value is at fixed address, but the address of the variable has
+ to be determined from the minimal symbol table whenever the
+ variable is referenced.
+ This happens if debugging information for a global symbol is
+ emitted and the corresponding minimal symbol is defined
+ in another object file or runtime common storage.
+ The linker might even remove the minimal symbol if the global
+ symbol is never referenced, in which case the symbol remains
+ unresolved. *)
+ LOC_UNRESOLVED,
+
+ (* Value is at a thread-specific location calculated by a
+ target-specific method. *)
+ LOC_THREAD_LOCAL_STATIC,
+
+ (* The variable does not actually exist in the program.
+ The value is ignored. *)
+ LOC_OPTIMIZED_OUT,
+
+ (* The variable is static, but actually lives at * (address).
+ * I.e. do an extra indirection to get to it.
+ * This is used on HP-UX to get at globals that are allocated
+ * in shared libraries, where references from images other
+ * than the one where the global was allocated are done
+ * with a level of indirection.
+ *)
+ LOC_INDIRECT
+ );
+
+ minimal_symbol = record
+ (* The general symbol info required for all types of symbols.
+ The SYMBOL_VALUE_ADDRESS contains the address that this symbol
+ corresponds to. *)
+ ginfo : general_symbol_info;
+
+ (* The info field is available for caching machine-specific information
+ so it doesn't have to rederive the info constantly (over a serial line).
+ It is initialized to zero and stays that way until target-dependent code
+ sets it. Storage for any data pointed to by this field should be allo-
+ cated on the symbol_obstack for the associated objfile.
+ The type would be "void *" except for reasons of compatibility with older
+ compilers. This field is optional.
+
+ Currently, the AMD 29000 tdep.c uses it to remember things it has decoded
+ from the instructions in the function header, and the MIPS-16 code uses
+ it to identify 16-bit procedures. *)
+
+ info : pchar;
+
+{$ifdef SOFUN_ADDRESS_MAYBE_MISSING}
+ (* Which source file is this symbol in? Only relevant for mst_file_*. *)
+ filename : pchar;
+{$endif}
+
+ (* Classification types for this symbol. These should be taken as "advisory
+ only", since if gdb can't easily figure out a classification it simply
+ selects mst_unknown. It may also have to guess when it can't figure out
+ which is a better match between two types (mst_data versus mst_bss) for
+ example. Since the minimal symbol info is sometimes derived from the
+ BFD library's view of a file, we need to live with what information bfd
+ supplies. *)
+
+ minimal_symbol_type : tminimal_symbol_type;
+ end{ of minimal_symbol};
+
+ block = record
+ (* Addresses in the executable code that are in this block. *)
+ startaddr,
+ endaddr : CORE_ADDR ;
+
+ (* The symbol that names this block, if the block is the body of a
+ function; otherwise, zero. *)
+ _function : psymbol;
+
+ (* The `struct block' for the containing block, or 0 if none.
+ The superblock of a top-level local block (i.e. a function in the
+ case of C) is the STATIC_BLOCK. The superblock of the
+ STATIC_BLOCK is the GLOBAL_BLOCK. *)
+
+ superblock : pblock;
+
+ (* Version of GCC used to compile the function corresponding
+ to this block, or 0 if not compiled with GCC. When possible,
+ GCC should be compatible with the native compiler, or if that
+ is not feasible, the differences should be fixed during symbol
+ reading. As of 16 Apr 93, this flag is never used to distinguish
+ between gcc2 and the native compiler.
+
+ If there is no function corresponding to this block, this meaning
+ of this flag is undefined. *)
+
+ gcc_compile_flag : byte;
+
+ (* Number of local symbols. *)
+ nsyms : longint;
+
+ (* The symbols. If some of them are arguments, then they must be
+ in the order in which we would like to print them. *)
+ sym : array [0..0] of psymbol;
+ end { of block definition };
+
+ symbol = record
+ (* The general symbol info required for all types of symbols. *)
+ ginfo : general_symbol_info;
+
+ (* Data type of value *)
+ _type : pointer{ptype};
+
+ (* Name space code. *)
+ namespace : namespace_enum;
+
+ (* Address class *)
+
+ aclass : address_class;
+
+ (* Line number of definition. FIXME: Should we really make the assumption
+ that nobody will try to debug files longer than 64K lines? What about
+ machine generated programs? *)
+
+ line : word;
+
+ (* Some symbols require an additional value to be recorded on a per-
+ symbol basis. Stash those values here. *)
+
+ (*union
+ {
+ /* Used by LOC_BASEREG and LOC_BASEREG_ARG. */
+ short basereg;
+ } *)
+ aux_value_base_reg : word;
+
+ (* Link to a list of aliases for this symbol.
+ Only a "primary/main symbol may have aliases. *)
+ aliases : pointer{palias_list};
+
+ (* List of ranges where this symbol is active. This is only
+ used by alias symbols at the current time. *)
+ ranges : pointer{prange_list};
+ end;
+
+ target_signal = (TARGET_SIGNAL_FIRST := 0,
+ TARGET_SIGNAL_HUP := 1,TARGET_SIGNAL_INT := 2,
+ TARGET_SIGNAL_QUIT := 3,TARGET_SIGNAL_ILL := 4,
+ TARGET_SIGNAL_TRAP := 5,TARGET_SIGNAL_ABRT := 6,
+ TARGET_SIGNAL_EMT := 7,TARGET_SIGNAL_FPE := 8,
+ TARGET_SIGNAL_KILL := 9,TARGET_SIGNAL_BUS := 10,
+ TARGET_SIGNAL_SEGV := 11,TARGET_SIGNAL_SYS := 12,
+ TARGET_SIGNAL_PIPE := 13,TARGET_SIGNAL_ALRM := 14,
+ TARGET_SIGNAL_TERM := 15,TARGET_SIGNAL_URG := 16,
+ TARGET_SIGNAL_STOP := 17,TARGET_SIGNAL_TSTP := 18,
+ TARGET_SIGNAL_CONT := 19,TARGET_SIGNAL_CHLD := 20,
+ TARGET_SIGNAL_TTIN := 21,TARGET_SIGNAL_TTOU := 22,
+ TARGET_SIGNAL_IO := 23,TARGET_SIGNAL_XCPU := 24,
+ TARGET_SIGNAL_XFSZ := 25,TARGET_SIGNAL_VTALRM := 26,
+ TARGET_SIGNAL_PROF := 27,TARGET_SIGNAL_WINCH := 28,
+ TARGET_SIGNAL_LOST := 29,TARGET_SIGNAL_USR1 := 30,
+ TARGET_SIGNAL_USR2 := 31,TARGET_SIGNAL_PWR := 32,
+ TARGET_SIGNAL_POLL := 33,TARGET_SIGNAL_WIND := 34,
+ TARGET_SIGNAL_PHONE := 35,TARGET_SIGNAL_WAITING := 36,
+ TARGET_SIGNAL_LWP := 37,TARGET_SIGNAL_DANGER := 38,
+ TARGET_SIGNAL_GRANT := 39,TARGET_SIGNAL_RETRACT := 40,
+ TARGET_SIGNAL_MSG := 41,TARGET_SIGNAL_SOUND := 42,
+ TARGET_SIGNAL_SAK := 43,TARGET_SIGNAL_PRIO := 44,
+ TARGET_SIGNAL_REALTIME_33 := 45,TARGET_SIGNAL_REALTIME_34 := 46,
+ TARGET_SIGNAL_REALTIME_35 := 47,TARGET_SIGNAL_REALTIME_36 := 48,
+ TARGET_SIGNAL_REALTIME_37 := 49,TARGET_SIGNAL_REALTIME_38 := 50,
+ TARGET_SIGNAL_REALTIME_39 := 51,TARGET_SIGNAL_REALTIME_40 := 52,
+ TARGET_SIGNAL_REALTIME_41 := 53,TARGET_SIGNAL_REALTIME_42 := 54,
+ TARGET_SIGNAL_REALTIME_43 := 55,TARGET_SIGNAL_REALTIME_44 := 56,
+ TARGET_SIGNAL_REALTIME_45 := 57,TARGET_SIGNAL_REALTIME_46 := 58,
+ TARGET_SIGNAL_REALTIME_47 := 59,TARGET_SIGNAL_REALTIME_48 := 60,
+ TARGET_SIGNAL_REALTIME_49 := 61,TARGET_SIGNAL_REALTIME_50 := 62,
+ TARGET_SIGNAL_REALTIME_51 := 63,TARGET_SIGNAL_REALTIME_52 := 64,
+ TARGET_SIGNAL_REALTIME_53 := 65,TARGET_SIGNAL_REALTIME_54 := 66,
+ TARGET_SIGNAL_REALTIME_55 := 67,TARGET_SIGNAL_REALTIME_56 := 68,
+ TARGET_SIGNAL_REALTIME_57 := 69,TARGET_SIGNAL_REALTIME_58 := 70,
+ TARGET_SIGNAL_REALTIME_59 := 71,TARGET_SIGNAL_REALTIME_60 := 72,
+ TARGET_SIGNAL_REALTIME_61 := 73,TARGET_SIGNAL_REALTIME_62 := 74,
+ TARGET_SIGNAL_REALTIME_63 := 75,TARGET_SIGNAL_UNKNOWN,
+ TARGET_SIGNAL_DEFAULT,TARGET_SIGNAL_LAST
+ );
+
+ strata = (dummy_stratum,file_stratum,core_stratum,download_stratum,process_stratum);
+
+ ptarget_ops = ^target_ops;
+ target_ops = record
+ to_shortname : pchar;
+ to_longname : pchar;
+ to_doc : pchar;
+ to_open : procedure (_para1:pchar; _para2:longint);
+ to_close : procedure (_para1:longint);
+ to_attach : procedure (_para1:pchar; _para2:longint);
+ to_detach : procedure (_para1:pchar; _para2:longint);
+ to_resume : procedure (_para1:longint; _para2:longint; _para3:target_signal);
+ to_wait : pointer; {function (_para1:longint; _para2:ptarget_waitstatus):longint;}
+ to_fetch_registers : procedure (_para1:longint);
+ to_store_registers : procedure (_para1:longint);
+ to_prepare_to_store : procedure ;
+ to_xfer_memory : function (memaddr:CORE_ADDR; myaddr:pchar; len:longint; write:longint; target:ptarget_ops):longint;
+ to_files_info : procedure (_para1:ptarget_ops);
+ to_insert_breakpoint : function (_para1:CORE_ADDR; _para2:pchar):longint;
+ to_remove_breakpoint : function (_para1:CORE_ADDR; _para2:pchar):longint;
+ to_terminal_init : procedure ;
+ to_terminal_inferior : procedure ;
+ to_terminal_ours_for_output : procedure ;
+ to_terminal_ours : procedure ;
+ to_terminal_info : procedure (_para1:pchar; _para2:longint);
+ to_kill : procedure ;
+ to_load : procedure (_para1:pchar; _para2:longint);
+ to_lookup_symbol : function (_para1:pchar; _para2:pCORE_ADDR):longint;
+ to_create_inferior : procedure (_para1:pchar; _para2:pchar; _para3:ppchar);
+ to_mourn_inferior : procedure ;
+ to_can_run : function :longint;
+ to_notice_signals : procedure (pid:longint);
+ to_thread_alive : function (pid:longint):longint;
+ to_stop : procedure ;
+ to_stratum : strata;
+ DONT_USE : pointer;
+ to_has_all_memory : longint;
+ to_has_memory : longint;
+ to_has_stack : longint;
+ to_has_registers : longint;
+ to_has_execution : longint;
+ to_sections : pointer; {^section_table}
+ to_sections_end : pointer; {^section_table}
+ to_magic : longint;
+ end;
+
+{$PACKRECORDS NORMAL}
+
+{*****************************************************************************
+ Define external calls to libgdb.a
+*****************************************************************************}
+
+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}
+ current_target : target_ops;cvar;external;
+ stop_pc : CORE_ADDR;cvar;external;
+ { Only used from GDB 5.01 but doesn't hurst otherwise }
+ interpreter_p : pchar;cvar;public;
+
+{ we need also to declare some vars }
+ watchdog : longint;cvar;external;
+ gdb_error : longint;cvar;public;
+ display_time : longbool;cvar;public;
+ display_space : longbool;cvar;public;
+
+{ Whether this is the command line version or not }
+ tui_version : longint;cvar;public;
+
+{ Whether xdb commands will be handled }
+{$ifdef GDB_HAS_DB_COMMANDS}
+ xdb_commands : longint;cvar;public;
+
+{ Whether dbx commands will be handled }
+ dbx_commands : longint;cvar;public;
+{$endif GDB_HAS_DB_COMMANDS}
+
+var
+ gdb_stdout : pui_file;cvar;public;
+ gdb_stderr : pui_file;cvar;public;
+ gdb_stdlog : pui_file;cvar;public;
+ gdb_stdtarg : pui_file;cvar;public;
+ event_loop_p : longint;cvar;public;
+{$ifdef GDB_V6}
+(* target IO streams *)
+ gdb_stdtargin : pui_file;cvar;public;
+ gdb_stdtargerr : pui_file;cvar;public;
+{$endif}
+
+{ used for gdb_stdout and gdb_stderr }
+function xmalloc(size : longint) : 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;
+function lookup_minimal_symbol_by_pc(i : CORE_ADDR):pminimal_symbol;cdecl;external;
+{$ifdef GDB_INIT_HAS_ARGV0}
+procedure gdb_init(argv0 : pchar);cdecl;external;
+{$else not GDB_INIT_HAS_ARGV0}
+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;
+procedure target_close(i:longint);cdecl;external;
+
+
+{*****************************************************************************
+ Helpers
+*****************************************************************************}
+
+procedure Debug(const s:string);
+begin
+ if use_gdb_file then
+ Writeln(gdb_file,s)
+ else
+ Writeln(s);
+end;
+
+
+{*****************************************************************************
+ TFrameEntry
+*****************************************************************************}
+
+constructor tframeentry.init;
+begin
+ Reset;
+end;
+
+destructor tframeentry.done;
+begin
+ Clear;
+end;
+
+procedure tframeentry.reset;
+begin
+ file_name:=nil;
+ function_name:=nil;
+ args:=nil;
+ line_number:=0;
+ address:=0;
+end;
+
+procedure tframeentry.clear;
+begin
+ if assigned(file_name) then
+ strdispose(file_name);
+ if assigned(function_name) then
+ strdispose(function_name);
+ if assigned(args) then
+ strdispose(args);
+ reset;
+end;
+
+
+{*****************************************************************************
+ tgdbbuffer
+*****************************************************************************}
+
+const
+ blocksize=2048;
+
+constructor tgdbbuffer.init;
+begin
+ Buf:=nil;
+ gdb_file:=nil;
+ Size:=0;
+ Resize(blocksize);
+ Reset;
+end;
+
+
+destructor tgdbbuffer.done;
+begin
+ if assigned(buf) then
+ freemem(buf,size);
+end;
+
+
+
+procedure tgdbbuffer.reset;
+begin
+ idx:=0;
+ Buf[0]:=#0;
+end;
+
+
+procedure tgdbbuffer.append(p:pchar);
+var
+ len : longint;
+begin
+ if not assigned(p) then
+ exit;
+ len:=Strlen(p);
+ if len+1+idx>size then
+ Resize(len+1+idx);
+ Move(p^,buf[idx],len);
+ inc(idx,len);
+ buf[idx]:=#0;
+end;
+
+
+procedure tgdbbuffer.lappend(p:pchar;len : longint);
+begin
+ if not assigned(p) then
+ exit;
+ if len+idx+1>size then
+ Resize(len+idx+1);
+ Move(p^,buf[idx],len);
+ inc(idx,len);
+ buf[idx]:=#0;
+end;
+
+
+procedure tgdbbuffer.resize(nsize : longint);
+var
+ np : pchar;
+begin
+ nsize:=((nsize+blocksize-1) div blocksize)*blocksize;
+ getmem(np,nsize);
+ if assigned(buf) then
+ begin
+ move(buf^,np^,size);
+ freemem(buf,size);
+ end;
+ buf:=np;
+ size:=nsize;
+end;
+
+
+{*****************************************************************************
+ Hook calls from libgdb.a
+*****************************************************************************}
+
+{$ifdef go32v2}
+procedure gdbpas_prev_exception_handler;cdecl;public;
+begin
+end;
+{$endif go32v2}
+
+procedure init_proc;cdecl;public;
+begin
+end;
+
+
+procedure annotate_signalled;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|signalled|');
+{$endif}
+end;
+
+
+procedure annotate_signal_name;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|signal_name|');
+{$endif}
+ with curr_gdb^ do
+ signal_name_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_signal_name_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|signal_name_end|');
+{$endif}
+ with curr_gdb^ do
+ signal_name_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_signal_string;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|signal_string|');
+{$endif}
+ with curr_gdb^ do
+ signal_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_signal_string_end;cdecl;public;
+var
+ c : char;
+begin
+{$ifdef Verbose}
+ Debug('|signal_string_end|');
+{$endif}
+ with curr_gdb^ do
+ begin
+ signal_end:=gdboutputbuf.idx;
+ c:=gdboutputbuf.buf[signal_end];
+ gdboutputbuf.buf[signal_end]:=#0;
+ if assigned(signal_string) then
+ strdispose(signal_string);
+ signal_string:=strnew(gdboutputbuf.buf+signal_start);
+ gdboutputbuf.buf[signal_end]:=c;
+ c:=gdboutputbuf.buf[signal_name_end];
+ gdboutputbuf.buf[signal_name_end]:=#0;
+ if assigned(signal_name) then
+ strdispose(signal_name);
+ signal_name:=strnew(gdboutputbuf.buf+signal_name_start);
+ gdboutputbuf.buf[signal_name_end]:=c;
+ if (user_screen_shown) then
+ begin
+ DebuggerScreen;
+ DoUserSignal;
+ UserScreen;
+ end
+ else
+ DoUserSignal;
+ call_reset:=true;
+ signaled:=false;
+ end;
+end;
+
+
+procedure annotate_signal;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|signal|');
+{$endif}
+ with curr_gdb^ do
+ signaled:=true;
+end;
+
+
+procedure annotate_exited(exitstatus:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|exited|');
+{$endif}
+{#ifdef __DJGPP__
+ /* this is very important. The exit code of a djgpp program
+ disables interrupts and after this there is no other interrupt
+ called, which enables interrupts with the iret. */
+ __dpmi_get_and_enable_virtual_interrupt_state();
+#endif }
+{$ifdef go32v2}
+ {$asmmode att}
+ asm
+ movw $0x901,%ax
+ int $0x31
+ end;
+ {$asmmode default}
+ reload_fs;
+{$endif def go32v2}
+
+ curr_gdb^.DebuggerScreen;
+{ DeleteBreakPoints; }
+ curr_gdb^.EndSession(exitstatus);
+end;
+
+
+procedure annotate_error;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|error|');
+{$endif}
+end;
+
+
+procedure annotate_error_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|error begin|');
+{$endif}
+ with curr_gdb^ do
+ begin
+ error_start:=gdboutputbuf.idx+strlen(gdboutputbuf.buf);
+ got_error:=true;
+ end;
+{$ifdef Verbose}
+ Debug('|end of error begin|');
+{$endif}
+end;
+
+
+procedure annotate_starting;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|starting|');
+{$endif}
+{$ifdef go32v2}
+ reload_fs;
+{$endif go32v2}
+ curr_gdb^.UserScreen;
+end;
+
+
+procedure annotate_stopped;cdecl;public;
+var
+ sym : symtab_and_line;
+ fname : pchar;
+begin
+{$ifdef Verbose}
+ Debug('|stopped|');
+{$endif}
+ with curr_gdb^ do
+ begin
+{$ifdef go32v2}
+ reload_fs;
+{$endif go32v2}
+ DebuggerScreen;
+ current_pc:=stop_pc;
+ Debuggee_started:=inferior_pid<>0;
+ if not Debuggee_started then exit;
+ if reset_command then exit;
+ sym:=find_pc_line(stop_pc,0);
+ if assigned(sym.symtab) then
+ fname:=sym.symtab^.filename
+ else
+ fname:=nil;
+ SelectSourceLine(fname,sym.line);
+ end;
+end;
+
+
+function inferior_pid : longint;
+begin
+ inferior_pid:=inferior_ptid.pid;
+end;
+
+
+procedure proc_remove_foreign(pid:longint);cdecl;public;
+begin
+end;
+
+
+procedure breakpoints_changed;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|breakpoints_changed|');
+{$endif}
+end;
+
+
+procedure annotate_ignore_count_change;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|annotate_ignore_count_change()|');
+{$endif}
+end;
+
+
+procedure annotate_breakpoint(num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|breakpoint(%d)|');
+{$endif}
+ With Curr_gdb^ do
+ stop_breakpoint_number:=num;
+end;
+
+
+procedure annotate_watchpoint(num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|watchpoint(%d)|');
+{$endif}
+ With Curr_gdb^ do
+ stop_breakpoint_number:=num;
+end;
+
+procedure annotate_catchpoint(num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|catchpoint(%d)|');
+{$endif}
+ With Curr_gdb^ do
+ stop_breakpoint_number:=num;
+end;
+
+
+procedure annotate_breakpoints_headers;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|breakpoints_headers|');
+{$endif}
+end;
+
+
+procedure annotate_breakpoints_table;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|breakpoints_table|');
+{$endif}
+end;
+
+
+procedure annotate_record;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|record|');
+{$endif}
+end;
+
+
+procedure annotate_breakpoints_table_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|breakpoints_table_end|');
+{$endif}
+end;
+
+
+procedure annotate_frames_invalid;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frames_invalid|');
+{$endif}
+end;
+
+
+procedure annotate_frame_begin(level:longint;pc:CORE_ADDR);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_begin(%d,%ld)|');
+{$endif}
+ with curr_gdb^ do
+ begin
+ frame_begin_seen:=true;
+ frame_level:=level;
+ current_address:=pc;
+ current_line_number:=-1;
+ function_start:=-1;
+ function_end:=-1;
+ args_start:=-1;
+ args_end:=-1;
+ file_start:=-1;
+ file_end:=-1;
+ line_start:=-1;
+ line_end:=-1;
+ end;
+end;
+
+
+procedure annotate_frame_address;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_address|');
+{$endif}
+end;
+
+
+procedure annotate_frame_address_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_address_end|');
+{$endif}
+end;
+
+procedure annotate_frame_function_name;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_function_name|');
+{$endif}
+ with curr_gdb^ do
+ function_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_args;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_args|');
+{$endif}
+ with curr_gdb^ do
+ begin
+ function_end:=gdboutputbuf.idx;
+ args_start:=gdboutputbuf.idx;
+ end;
+end;
+
+procedure annotate_frame_source_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_source_begin|');
+{$endif}
+ with curr_gdb^ do
+ args_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_source_file;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_source_file|');
+{$endif}
+ with curr_gdb^ do
+ file_start:=gdboutputbuf.idx;
+end;
+
+procedure annotate_frame_source_file_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_source_file_end|');
+{$endif}
+ with curr_gdb^ do
+ file_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_source_line;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_source_line|');
+{$endif}
+ with curr_gdb^ do
+ line_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_source_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_source_end|');
+{$endif}
+ with curr_gdb^ do
+ line_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_where;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|frame_where|');
+{$endif}
+end;
+
+
+procedure annotate_frame_end;cdecl;public;
+var
+ fe : pframeentry;
+ c : char;
+ err : integer;
+begin
+{$ifdef Verbose}
+ Debug('|frame_end|');
+{$endif}
+ with curr_gdb^ do
+ begin
+ if (not record_frames) or (not frame_begin_seen) then
+ exit;
+ { This can happen, when the function has no Debugging information }
+ if (args_start >= 0) and (args_end < 0) then
+ args_end:=gdboutputbuf.idx;
+ frame_begin_seen:=false;
+ fe:=get_frameentry(frame_level);
+ fe^.address:=current_address;
+ fe^.level:=frame_level;
+ if (function_start>=0) then
+ begin
+ c:=gdboutputbuf.buf[function_end];
+ gdboutputbuf.buf[function_end]:=#0;
+ fe^.function_name:=strnew(gdboutputbuf.buf+function_start);
+ gdboutputbuf.buf[function_end]:=c;
+ end;
+ if (file_start>=0) then
+ begin
+ c:=gdboutputbuf.buf[file_end];
+ gdboutputbuf.buf[file_end]:=#0;
+ fe^.file_name:=strnew(gdboutputbuf.buf+file_start);
+ gdboutputbuf.buf[file_end]:=c;
+ end;
+ if (args_start>=0) then
+ begin
+ {$warning FIXME} {sometimes the ide crashes here because ars_end is 0, AD}
+ if args_end > 0 then
+ begin
+ if (gdboutputbuf.buf[args_end-1]=#10) then
+ dec(args_end);
+ c:=gdboutputbuf.buf[args_end];
+ gdboutputbuf.buf[args_end]:=#0;
+ fe^.args:=strnew(gdboutputbuf.buf+args_start);
+ gdboutputbuf.buf[args_end]:=c;
+ end;
+ end;
+ if (line_start>=0) then
+ begin
+ c:=gdboutputbuf.buf[line_end];
+ gdboutputbuf.buf[line_end]:=#0;
+{ sscanf(gdb_output_buffer+line_start,'%d',&fe^.line_number); }
+ val(strpas(pchar(@gdboutputbuf.buf[line_start])),fe^.line_number,err);
+ gdboutputbuf.buf[line_end]:=c;
+ end;
+ end;
+end;
+
+
+procedure annotate_quit;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|quit|');
+{$endif}
+end;
+
+
+procedure annotate_arg_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|arg_begin|');
+{$endif}
+end;
+
+
+procedure annotate_arg_name_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|arg_name_end|');
+{$endif}
+end;
+
+
+procedure annotate_arg_value(typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|arg_value|');
+{$endif}
+end;
+
+
+procedure annotate_arg_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|arg_end|');
+{$endif}
+end;
+
+procedure annotate_source(filename:pchar;line,character,mid:longint;pc:CORE_ADDR);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|source|');
+{$endif}
+end;
+
+
+procedure annotate_function_call;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|function_call|');
+{$endif}
+end;
+
+
+procedure annotate_signal_handler_caller;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|signal_handler_caller|');
+{$endif}
+end;
+
+
+procedure annotate_array_section_begin(index:longint;elttype:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|array_section_begin()|');
+{$endif}
+end;
+
+
+procedure annotate_elt_rep(repcount:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|elt_rep()|');
+{$endif}
+end;
+
+procedure annotate_elt_rep_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|elt_rep_end|');
+{$endif}
+end;
+
+
+procedure annotate_elt;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|elt|');
+{$endif}
+end;
+
+
+procedure annotate_array_section_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|array_section_end|');
+{$endif}
+end;
+
+procedure annotate_display_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_begin|');
+{$endif}
+end;
+
+
+procedure annotate_display_number_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_number_end|');
+{$endif}
+end;
+
+
+procedure annotate_display_format;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_format|');
+{$endif}
+end;
+
+procedure annotate_display_expression;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_expression|');
+{$endif}
+end;
+
+
+procedure annotate_display_expression_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_expression_end|');
+{$endif}
+end;
+
+
+procedure annotate_display_value;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_value|');
+{$endif}
+end;
+
+
+procedure annotate_display_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|display_end|');
+{$endif}
+end;
+
+
+procedure annotate_field (num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_field(%d)');
+{$endif}
+end;
+
+
+procedure annotate_field_begin(typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_field_begin\n');
+{$endif}
+end;
+
+
+procedure annotate_field_name_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_field_name_end\n');
+{$endif}
+end;
+
+
+procedure annotate_field_value;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_field_value\n');
+{$endif}
+end;
+
+
+procedure annotate_field_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_field_end\n');
+{$endif}
+end;
+
+
+procedure annotate_value_history_begin (histindex:longint;typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_value_history_begin(%d)\n');
+{$endif}
+end;
+
+
+procedure annotate_value_begin (typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_value_begin\n');
+{$endif}
+end;
+
+
+procedure annotate_value_history_value;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_value_history_value\n');
+{$endif}
+end;
+
+
+procedure annotate_value_history_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_value_history_end\n');
+{$endif}
+end;
+
+
+procedure annotate_value_end;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('a_value_end\n');
+{$endif}
+end;
+
+
+procedure _initialize_annotate;cdecl;public;
+begin
+end;
+
+
+procedure gdbint_ui_file_write(stream : pui_file; p : pchar; len : longint);cdecl;
+begin
+ if assigned(curr_gdb) then
+ with curr_gdb^ do
+ if stream = gdb_stderr then
+ gdberrorbuf.lappend(p,len)
+ else if stream = gdb_stdout then
+ gdboutputbuf.lappend(p,len)
+ else
+ begin
+ gdberrorbuf.append('Unknown gdb ui_file');
+ gdberrorbuf.lappend(p,len);
+ end;
+end;
+
+
+procedure CreateBreakPointHook(var b:breakpoint);cdecl;
+var
+ sym : symtab_and_line;
+
+{ this procedure is only here to avoid the problems
+ with different version of gcc having different stack
+ handling:
+ on older versions find_pc_line uses just "ret"
+ while on newer gcc version "ret $4" is used
+ if this call is within the CreateBreakPointHook function
+ it changes %esp and thus the registers are
+ not restored correctly PM }
+ procedure get_pc_line;
+ begin
+ sym:=find_pc_line(b.address,0);
+ end;
+begin
+ get_pc_line;
+ with curr_gdb^ do
+ begin
+ last_breakpoint_number:=b.number;
+ { function breakpoints have zero as file and as line !!
+ but they are valid !! }
+ invalid_breakpoint_line:=(b.line_number<>sym.line) and (b.line_number<>0);
+ last_breakpoint_address:=b.address;
+ last_breakpoint_line:=sym.line;
+ if assigned(sym.symtab) then
+ last_breakpoint_file:=sym.symtab^.filename
+ else
+ last_breakpoint_file:=nil;
+ end;
+end;
+
+
+{*****************************************************************************
+ tgdbinterface
+*****************************************************************************}
+
+constructor tgdbinterface.init;
+begin
+ gdboutputbuf.init;
+ gdberrorbuf.init;
+ record_frames:=true;
+
+ { This must be placed before gdb__init is called
+ as gdb_init might issue output PM }
+ curr_gdb:=@self;
+ gdb__init;
+ command_level:=0;
+{ set output mode for GDB }
+{ only these values disable filtering
+ DONT CHANGE THEM !!! PM }
+ gdb_command('set width 0xffffffff');
+ gdb_command('set height 0xffffffff');
+{ other standard commands used for fpc debugging }
+ gdb_command('set print demangle off');
+ gdb_command('set gnutarget auto');
+ gdb_command('set language auto');
+ gdb_command('set print vtbl on');
+ gdb_command('set print object on');
+ gdb_command('set print null-stop');
+end;
+
+
+destructor tgdbinterface.done;
+begin
+ clear_frames;
+ gdb_done;
+ gdboutputbuf.done;
+ gdberrorbuf.done;
+end;
+
+
+procedure tgdbinterface.gdb__init;
+begin
+ gdboutputbuf.reset;
+ gdberrorbuf.reset;
+ {$ifdef GDB_HAS_DEPRECATED_CBPH}
+ deprecated_create_breakpoint_hook:=@CreateBreakPointHook;
+ {$else}
+ create_breakpoint_hook:=@CreateBreakPointHook;
+ {$endif}
+ signal_string:=nil;
+ signal_name:=nil;
+end;
+
+
+
+procedure tgdbinterface.gdb_done;
+begin
+ if debuggee_started then
+ begin
+ current_target.to_kill;
+ current_target.to_close(1);
+ end;
+ {$ifdef GDB_HAS_DEPRECATED_CBPH}
+ deprecated_create_breakpoint_hook:=nil;
+ {$else}
+ create_breakpoint_hook:=nil;
+ {$endif}
+end;
+
+
+function tgdbinterface.error:boolean;
+begin
+ error:=got_error;
+end;
+
+function tgdbinterface.error_num:longint;
+begin
+ error_num:=gdb_error;
+end;
+
+var
+ top_level_val : longint;
+
+function catch_errors(func : pointer; command : pchar; from_tty,mask : longint) : longint;cdecl;external;
+
+function gdbint_execute_command(command : pchar; from_tty,mask : longint) : longint;cdecl;
+begin
+ gdbint_execute_command:=1;
+ execute_command(command,from_tty);
+ gdbint_execute_command:=0;
+end;
+
+{$ifdef cpui386}
+type
+ tfpustate = word;
+
+const
+ MaskAllExceptions = $ff;
+{$else}
+type
+ tfpustate = longint;
+const
+ MaskAllExceptions = 0;
+{$endif}
+
+procedure SaveFPUState(var control :TFPUState);
+begin
+{$ifdef cpui386}
+ asm
+ movl control, %edi
+ fstcw (%edi)
+ end;
+{$else}
+ control:=0;
+{$endif}
+end;
+
+procedure SetFPUState(control : TFPUState);
+begin
+{$ifdef cpui386}
+ asm
+ fnclex
+ fldcw control
+ end;
+{$else}
+{$endif}
+end;
+
+function MaskAllFPUExceptions(control : TFPUState) : TFPUState;
+begin
+{$ifdef cpui386}
+ MaskAllFPUExceptions := control or MaskAllExceptions;
+{$endif}
+end;
+
+procedure tgdbinterface.gdb_command(const s:string);
+var
+ command : array[0..256] of char;
+ prev_stop_breakpoint_number,
+ mask : longint;
+ s2 : string;
+ old_quit_return,
+ old_error_return : jmp_buf;
+ control : TFPUState;
+begin
+ inc(command_level);
+ SaveFPUState(control);
+ SetFPUState(MaskAllFPUExceptions(control));
+ move(s[1],command,length(s));
+ command[length(s)]:=#0;
+ old_quit_return:=quit_return;
+ old_error_return:=error_return;
+ gdb_error:=0;
+ got_error:=false;
+ if command_level=1 then
+ prev_stop_breakpoint_number:=0
+ else
+ prev_stop_breakpoint_number:=stop_breakpoint_number;
+
+ stop_breakpoint_number:=0;
+ { Trap quit commands }
+ s2:=s;
+ while (length(s2)>0) and ((s2[1]=' ') or (s2[1]=#9)) do
+ s2:=copy(s2,2,255);
+ if (length(s2)>0) and
+ (UpCase(s2[1])='Q') and
+ ((length(s2)=1) or
+ (s2[2]=' ') or
+ ((UpCase(s2[2])='U') and
+ ((length(s2)=2) or
+ (s2[3]=' ') or
+ ((UpCase(s2[3])='I') and
+ ((length(s2)=3) or
+ (s2[4]=' ') or
+ ((UpCase(s2[4])='T') and
+ ((length(s2)=4) or
+ (s2[5]=' ')
+ ))))))) then
+ begin
+ if not AllowQuit then
+ exit;
+ end;
+{$ifdef DebugCommand}
+ Debug('start of handle_gdb_command ('+s+')');
+{$endif}
+ top_level_val:=setjmp(error_return);
+ if top_level_val=0 then
+ begin
+ quit_return:=error_return;
+ mask:=longint($ffffffff);
+ catch_errors(@gdbint_execute_command,@command,0,mask);
+{$ifdef go32v2}
+ reload_fs;
+{$endif go32v2}
+ end
+ else
+{$ifdef Verbose}
+ Debug('error longjmp in handle_gdb_command ('+s+')');
+{$endif}
+ ;
+{$ifdef DebugCommand}
+ Debug('end of handle_gdb_command ('+s+')');
+{$endif}
+ quit_return:=old_quit_return;
+ error_return:=old_error_return;
+ dec(command_level);
+ stop_breakpoint_number:=prev_stop_breakpoint_number;
+ SetFPUState(control);
+end;
+
+
+procedure tgdbinterface.resize_frames;
+var
+ i : longint;
+ new_frames : ppframeentry;
+begin
+ if (frame_count>=frame_size) then
+ begin
+ getmem(new_frames,sizeof(pointer)*(frame_count+1));
+ for i:=0 to frame_size-1 do
+ new_frames[i]:=frames[i];
+ if assigned(frames) then
+ freemem(frames,sizeof(pointer)*frame_size);
+ frames:=new_frames;
+ frame_size:=frame_count+1;
+ for i:=frame_count to frame_size-1 do
+ frames[i]:=new(pframeentry,init);
+ end;
+end;
+
+
+function tgdbinterface.add_frameentry:pframeentry;
+begin
+ resize_frames;
+ add_frameentry:=frames[frame_count];
+ inc(frame_count);
+end;
+
+function tgdbinterface.get_frameentry(level : longint) : pframeentry;
+begin
+ { only climb values one by one PM }
+ if level>=frame_count then
+ resize_frames;
+ get_frameentry:=frames[level];
+ frames[level]^.clear;
+ if level>=frame_count then
+ inc(frame_count);
+end;
+
+
+procedure tgdbinterface.clear_frames;
+var
+ i : longint;
+begin
+ for i:=0 to frame_size-1 do
+ dispose(frames[i],done);
+ freemem(frames,sizeof(pointer)*Frame_size);
+ frame_count:=0;
+ frame_size:=0;
+end;
+
+function tgdbinterface.get_current_frame : ptrint;
+begin
+ record_frames:=false;
+ gdb_command('f');
+ get_current_frame:=frame_level;
+ record_frames:=true;
+end;
+
+function tgdbinterface.set_current_frame(level : longint) : boolean;
+var
+ s : string;
+begin
+ record_frames:=false;
+ str(level,s);
+ gdb_command('f '+s);
+ if level=frame_level then
+ set_current_frame:=true
+ else
+ set_current_frame:=false;
+ record_frames:=true;
+end;
+
+
+{*****************************************************************************
+ Highlevel tgdbinterface
+*****************************************************************************}
+
+procedure tgdbinterface.GetAddrSyminfo(addr:ptrint;var si:tsyminfo);
+var
+ sym : symtab_and_line;
+ symbol : psymbol;
+begin
+ sym:=find_pc_line(addr,1);
+ fillchar(si,sizeof(tsyminfo),0);
+ si.address:=addr;
+ si.offset:=addr-sym.pc;
+ if assigned(sym.symtab) then
+ si.fname:=sym.symtab^.filename
+ else
+ si.fname:=nil;
+ si.line:=sym.line;
+ symbol:=find_pc_function(addr);
+ if assigned(symbol) then
+ si.funcname:=symbol^.ginfo._name
+ else
+ si.funcname:=nil;
+end;
+
+
+procedure tgdbinterface.SelectSourceLine(fn:pchar;line:longint);
+begin
+ if assigned(fn) then
+ DoSelectSourceLine(StrPas(fn),line)
+ else
+ DoSelectSourceLine('',line);
+end;
+
+
+procedure tgdbinterface.StartSession;
+begin
+ DoStartSession;
+end;
+
+
+procedure tgdbinterface.BreakSession;
+begin
+ DoBreakSession;
+end;
+
+
+procedure tgdbinterface.EndSession(code:longint);
+begin
+ Debuggee_started:=false;
+ inferior_ptid.pid:=0;
+ DoEndSession(code);
+ if assigned(signal_name) then
+ strdispose(signal_name);
+ signal_name:=nil;
+ if assigned(signal_string) then
+ strdispose(signal_string);
+ signal_string:=nil;
+end;
+
+
+procedure tgdbinterface.DebuggerScreen;
+begin
+{$ifdef Verbose}
+ Debug('|DebuggerScreen|');
+{$endif}
+ if user_screen_shown then
+ DoDebuggerScreen;
+ user_screen_shown:=false;
+end;
+
+
+procedure tgdbinterface.UserScreen;
+begin
+{$ifdef Verbose}
+ Debug('|UserScreen|');
+{$endif}
+ if switch_to_user then
+ begin
+ if (not user_screen_shown) then
+ DoUserScreen;
+ user_screen_shown:=true;
+ end;
+end;
+
+
+
+{---------------------------------------
+ Default Hooks
+---------------------------------------}
+
+procedure tgdbinterface.DoSelectSourceLine(const fn:string;line:longint);
+{$ifdef Verbose}
+var
+ s : string;
+{$endif}
+begin
+{$ifdef Verbose}
+ Str(line,S);
+ Debug('|SelectSource '+fn+':'+s+'|');
+{$endif}
+end;
+
+procedure tgdbinterface.DoStartSession;
+begin
+end;
+
+procedure tgdbinterface.DoBreakSession;
+begin
+end;
+
+procedure tgdbinterface.DoEndSession(code:longint);
+begin
+end;
+
+procedure tgdbinterface.DoUserSignal;
+begin
+end;
+
+procedure tgdbinterface.DoDebuggerScreen;
+begin
+end;
+
+procedure tgdbinterface.DoUserScreen;
+begin
+end;
+
+function tgdbinterface.AllowQuit : boolean;
+begin
+ AllowQuit:=true;
+end;
+
+var
+ version : array[0..0] of char;cvar;external;
+
+{$ifndef GDB_NEEDS_NO_ERROR_INIT}
+{ doesn't seem to exist anymore. Seems to work fine without }
+procedure error_init;cdecl;external;
+{$endif GDB_NEEDS_NO_ERROR_INIT}
+
+function GDBVersion : string;
+begin
+ GDBVersion:='GDB '+StrPas(version);
+end;
+
+
+const next_exit : pointer = nil;
+procedure DoneLibGDB;
+begin
+ exitproc:=next_exit;
+end;
+
+{$ifdef go32v2}
+var
+ c_environ : ppchar;external name '_environ';
+ c_argc : longint;external name '___crt0_argc';
+ c_argv : ppchar;external name '___crt0_argv';
+{$endif def go32v2}
+
+procedure InitLibGDB;
+{$ifdef supportexceptions}
+var
+ OldSigInt : SignalHandler;
+{$endif supportexceptions}
+{$ifdef GDB_INIT_HAS_ARGV0}
+var
+ argv0 : pchar;
+{$endif not GDB_INIT_HAS_ARGV0}
+begin
+{$ifdef go32v2}
+ c_environ:=system.envp;
+ c_argc:=system.argc;
+ c_argv:=system.argv;
+{$endif def go32v2}
+{$ifdef supportexceptions}
+{$ifdef go32v2}
+ OldSigInt:=Signal(SIGINT,SignalHandler(@SIG_DFL));
+{$else}
+ {$ifdef Unix}
+ OldSigInt:=fpSignal(SIGINT,SignalHandler(SIG_DFL));
+ {$else}
+ OldSigInt:=Signal(SIGINT,SignalHandler(SIG_DFL));
+ {$endif}
+{$endif}
+{$endif supportexceptions}
+
+ if assigned(gdb_stderr) then
+ ui_file_delete(gdb_stderr);
+ if assigned(gdb_stdout) then
+ ui_file_delete(gdb_stdout);
+ gdb_stderr:=mem_fileopen;
+ gdb_stdout:=mem_fileopen;
+ 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);
+{$ifndef GDB_NEEDS_NO_ERROR_INIT}
+ error_init;
+{$endif GDB_NEEDS_NO_ERROR_INIT}
+{$ifdef GDB_V6}
+// gdb_stdtargin := gdb_stdin;
+ gdb_stdtargerr := gdb_stderr;
+{$endif}
+
+ next_exit:=exitproc;
+ exitproc:=@DoneLibGDB;
+{$ifdef GDB_V6}
+ uiout := cli_out_new (gdb_stdout);
+{$endif}
+{$ifdef GDB_INIT_HAS_ARGV0}
+ getmem(argv0,length(paramstr(0))+1);
+ strpcopy(argv0,paramstr(0));
+ gdb_init(argv0);
+ freemem(argv0,length(paramstr(0))+1);
+{$else not GDB_INIT_HAS_ARGV0}
+ gdb_init;
+{$endif not GDB_INIT_HAS_ARGV0}
+{$ifdef supportexceptions}
+ {$ifdef unix}
+ fpsignal(SIGINT,OldSigInt);
+ {$else}
+ Signal(SIGINT,OldSigInt);
+ {$endif}
+{$endif supportexceptions}
+ if setjmp(error_return)=0 then
+ begin
+ quit_return:=error_return;
+ exit;
+ end
+ else
+ begin
+{$ifdef Verbose}
+ Debug('|LongJump to Init|');
+{$endif}
+{$ifdef go32v2}
+ RunError(99);
+{$endif def go32v2}
+ end;
+ WatchDog:=0;
+end;
+
+{$ifdef GDB_HAS_SYSROOT}
+var gdb_sysroot : pchar; cvar;public;
+ gdb_sysrootc : char;
+ return_child_result : longbool;cvar;public;
+ return_child_result_value : longint;cvar;public;
+ batch_silent : longbool;cvar;public;
+{$endif}
+{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
+var
+ debug_file_directory : pchar; cvar; external;
+{$endif GDB_HAS_DEBUG_FILE_DIRECTORY}
+
+begin
+{$ifdef GDB_HAS_SYSROOT}
+ gdb_sysrootc := #0;
+ gdb_sysroot := @gdb_sysrootc;
+{$endif}
+{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
+ debug_file_directory := '/usr/local/lib';
+{$endif GDB_HAS_DEBUG_FILE_DIRECTORY}
+ gdb_stderr:=nil;
+ gdb_stdout:=nil;
+ InitLibGDB;
+end.
diff --git a/packages/gdbint/src/gdbobjs.inc b/packages/gdbint/src/gdbobjs.inc
new file mode 100644
index 0000000000..f847a4a082
--- /dev/null
+++ b/packages/gdbint/src/gdbobjs.inc
@@ -0,0 +1,182 @@
+{
+ Copyright (c) 1999 by Pierre Muller
+
+ direct GDB objects linking for debug info
+
+ 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.
+
+ **********************************************************************}
+
+{ gdb-version/gdb directory must be in objects path }
+{ use ifdef or ifndef GDB_V416 to change objects needed for
+ different gdb versions }
+
+{$L infcmd.o}
+{$L symtab.o}
+{$L top.o}
+{$L target.o}
+{$L utils.o}
+{$L breakpoi.o}
+{$L corefile.o}
+{$L symfile.o}
+{$L ../libibert/concat.o}
+{$L environ.o}
+{$L eval.o}
+{$L infrun.o}
+{$L blockfra.o}
+{$L findvar.o}
+{$L printcmd.o}
+{$L i386-tde.o}
+{$L minsyms.o}
+{$L stack.o}
+{$L gdbtypes.o}
+{$L valops.o}
+{$L values.o}
+{$L valprint.o}
+{$L language.o}
+{$L source.o}
+{$L i387-tde.o}
+{$L command.o}
+{$L objfiles.o}
+{$L demangle.o}
+{$L ../libibert/cplus-de.o}
+{$L gnu-rege.o}
+{$L c-typepr.o}
+{$L typeprin.o}
+{$L init.o}
+{$L parse.o}
+{$L serial.o}
+{$L ../libibert/getrunti.o}
+{$L ../readline/complete.o}
+{$L ../readline/readline.o}
+{$L ../readline/history.o}
+{$L ../gdb/version.o}
+{$L inflow.o}
+{$L ../readline/tilde.o}
+{$L ../readline/bind.o}
+{$L mem-brea.o}
+{$L ../libibert/strsigna.o}
+{$L ../bfd/bfd.o}
+{$L ../libibert/vasprint.o}
+{$L ch-lang.o}
+{$ifdef GDB_V416}
+{$L go32targ.o}
+{$else}
+{$L go32-nat.o}
+{$endif}
+{$L thread.o}
+{$L valarith.o}
+{$L expprint.o}
+{$L exec.o}
+{$L ../bfd/corefile.o}
+{$L ../libibert/obstack.o}
+{$L ../bfd/section.o}
+{$L complain.o}
+{$L ../libibert/argv.o}
+{$L ../bfd/opncls.o}
+{$L ../bfd/format.o}
+{$L bcache.o}
+{$L symmisc.o}
+{$L f-lang.o}
+{$L f-valpri.o}
+{$L cp-valpr.o}
+{$L ../opcodes/dis-buf.o}
+{$L ../opcodes/i386-dis.o}
+{$L scm-lang.o}
+{$L ../libibert/basename.o}
+{$L ../libibert/floatfor.o}
+{$L copying.o}
+{$L ser-go32.o}
+{$L remote.o}
+{$L dcache.o}
+{$L remote-u.o}
+{$L buildsym.o}
+{$L maint.o}
+{$L dbxread.o}
+{$L coffread.o}
+{$L elfread.o}
+{$L mipsread.o}
+{$L stabsrea.o}
+{$L c-lang.o}
+{$L m2-lang.o}
+{$L nlmread.o}
+{$L mdebugre.o}
+{$L os9kread.o}
+{$L p-lang.o}
+{$L p-valpri.o}
+{$L ../readline/display.o}
+{$L ../readline/keymaps.o}
+{$L ../readline/rltty.o}
+{$L ../readline/vi_mode.o}
+{$L ../readline/funmap.o}
+{$L ../readline/parens.o}
+{$L ../bfd/cache.o}
+{$L ch-exp.o}
+{$L ch-typep.o}
+{$L ch-valpr.o}
+{$L ../bfd/libbfd.o}
+{$L ../bfd/archures.o}
+{$L ../bfd/targets.o}
+{$L ../bfd/binary.o}
+{$L f-exp_ta.o}
+{$L f-typepr.o}
+{$L c-valpri.o}
+{$L scm-exp.o}
+{$L c-exp_ta.o}
+{$L scm-valp.o}
+{$L dwarfrea.o}
+{$L m2-exp_t.o}
+{$L m2-typep.o}
+{$L m2-valpr.o}
+{$L p-exp_ta.o}
+{$L p-typepr.o}
+{$L ../readline/isearch.o}
+{$L ../readline/search.o}
+{$L ../bfd/cpu-i386.o}
+{$L ../bfd/coff-go3.o}
+{$L ../bfd/srec.o}
+{$L ../bfd/tekhex.o}
+{$L ../bfd/ihex.o}
+{$L ../bfd/syms.o}
+{$L ../bfd/archive.o}
+{$L ../bfd/reloc.o}
+{$L ../bfd/linker.o}
+{$L ../bfd/coffgen.o}
+{$L ../bfd/cofflink.o}
+{$L ../libibert/hex.o}
+{$L ../bfd/hash.o}
+{$L ../bfd/stabs.o}
+{$ifdef GDB_V418}
+{$L ../readline/histexpa.o}
+{$L ../readline/histfile.o}
+{$L gdbarch.o}
+{$L tracepoi.o}
+{$L ax-gdb.o}
+{$L jv-lang.o}
+{$L ../readline/input.o}
+{$L ../readline/util.o}
+{$L ../readline/terminal.o}
+{$L ../readline/undo.o}
+{$L ../readline/macro.o}
+{$L ../readline/shell.o}
+{$L ../readline/nls.o}
+{$L ../readline/kill.o}
+{$L ../libibert/xstrerro.o}
+{$L ../libibert/objalloc.o}
+{$L dwarf2re.o}
+{$L ../bfd/coff-stg.o}
+{$L ../bfd/i386aout.o}
+{$L ../libibert/fnmatch.o}
+{$L ../readline/histsear.o}
+{$L ax-gener.o}
+{$L jv-exp_t.o}
+{$L jv-typep.o}
+{$L jv-valpr.o}
+{$L ../bfd/aout32.o}
+{$L ../bfd/stab-sym.o}
+{$endif GDB_V418}
diff --git a/packages/gdbint/src/gdbver.pp b/packages/gdbint/src/gdbver.pp
new file mode 100644
index 0000000000..f372ddfab0
--- /dev/null
+++ b/packages/gdbint/src/gdbver.pp
@@ -0,0 +1,104 @@
+{
+
+ Program to detect the version of libgdb that will be
+ used for linking
+}
+program find_gdb_version;
+
+{$R-}
+
+{$ifdef unix}
+ {$Linklib c}
+{$endif}
+
+{$LINKLIB libgdb.a}
+
+uses
+ strings;
+
+const
+ { This variable should be change with change in GDB CVS PM }
+ Current_cvs_version : longint = 503;
+ Max_version_length = 255;
+
+const
+ output_file:string='';
+
+var
+ version : array[0..0] of char;cvar;external;
+ gdbversion : pchar;
+ subver_str : string;
+ i, version_number,
+ subversion_number : longint;
+ subsubversion_number : longint;
+ error : word;
+ only_ver : boolean;
+ o : text;
+
+begin
+ only_ver:=(Paramcount>0) and (ParamStr(1)='-n');
+ if (paramcount>=2) and (paramstr(1)='-o') then
+ begin
+ only_ver:=true;
+ output_file:=paramstr(2);
+ end;
+ getmem(gdbversion,Max_version_length+1);
+ strlcopy(gdbversion,@version,Max_version_length);
+ gdbversion[Max_version_length]:=#0;
+ if (gdbversion[0] in ['4','5','6','7','8','9']) and (gdbversion[1]='.') then
+ begin
+ if not only_ver then
+ Writeln('GDB version is ',pchar(@version));
+ version_number:=ord(gdbversion[0])-ord('0');
+ i:=2;
+ subver_str:='';
+ while gdbversion[i] in ['0'..'9'] do
+ begin
+ subver_str:=subver_str+gdbversion[i];
+ inc(i);
+ end;
+ val(subver_str,subversion_number,error);
+ inc(i);
+ subver_str:='';
+ while gdbversion[i] in ['0'..'9'] do
+ begin
+ subver_str:=subver_str+gdbversion[i];
+ inc(i);
+ end;
+ if subver_str<>'' then
+ val(subver_str,subsubversion_number,error);
+ { 5.02.90 is a pretest of 5.03.. PM }
+ if subsubversion_number>=90 then
+ inc(subversion_number);
+ if (error=0) and (subversion_number>=0) and
+ (subversion_number<=99) then
+ version_number:=version_number*100+subversion_number;
+ end
+ else if (gdbversion[0]='2') and (gdbversion[1]='0') and
+ (gdbversion[2] in ['0'..'9']) and (gdbversion[3] in ['0'..'9']) then
+ begin
+ { CVS version from 2000 to 2099,
+ assume current_cvs_version PM }
+ version_number:=Current_cvs_version;
+ end
+ else
+ begin
+ if not only_ver then
+ Writeln('Unsupported GDB version');
+ version_number:=0;
+ end;
+ freemem(gdbversion);
+ if output_file<>'' then
+ begin
+ assign(o,output_file);
+ rewrite(o);
+ writeln(o,'{$define GDB_V',version_number,'}');
+ close(o);
+ end
+ else
+ begin
+ if only_ver then
+ Write(version_number);
+ Halt(version_number);
+ end;
+end.
diff --git a/packages/gdbint/src/gdbver_nogdb.inc b/packages/gdbint/src/gdbver_nogdb.inc
new file mode 100644
index 0000000000..e4206221b9
--- /dev/null
+++ b/packages/gdbint/src/gdbver_nogdb.inc
@@ -0,0 +1 @@
+{$define GDB_V606}
diff --git a/packages/gdbint/src/symify.pp b/packages/gdbint/src/symify.pp
new file mode 100644
index 0000000000..d262bf1b15
--- /dev/null
+++ b/packages/gdbint/src/symify.pp
@@ -0,0 +1,77 @@
+{
+ Copyright (c) 1998 by Peter Vreman
+
+ Translate backtrace addresses into file and line info
+
+ 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.
+
+ **********************************************************************}
+program symify;
+uses GDBInt;
+
+var
+ gdb : tgdbinterface;
+
+
+procedure processlog(const fn:string);
+var
+ t : text;
+ hs,s : string;
+ code : word;
+ i,
+ addr : longint;
+ sym : tsyminfo;
+begin
+ assign(t,fn);
+ {$I-}
+ reset(t);
+ {$I+}
+ if ioresult<>0 then
+ exit;
+ while not eof(t) do
+ begin
+ readln(t,s);
+ i:=pos('0x',s);
+ if i=3 then
+ begin
+ hs:='$'+Copy(s,5,8);
+ Val(hs,addr,code);
+ if code=0 then
+ begin
+ gdb.GetAddrSymInfo(addr,sym);
+ Write(Copy(s,1,12));
+ if assigned(sym.funcname) then
+ write(' in ',sym.funcname,'+',sym.offset);
+ if assigned(sym.fname) then
+ writeln(' ',sym.fname,':',sym.line)
+ else
+ writeln;
+ end
+ else
+ writeln(s);
+ end
+ else
+ writeln(s);
+ end;
+ close(t);
+end;
+
+
+begin
+ if paramcount<2 then
+ begin
+ writeln('usage: symify <log> <file>');
+ halt(1);
+ end;
+ gdb.init;
+ writeln('loading ',paramstr(2));
+ gdb.gdb_command('file '+paramstr(2));
+ writeln('parsing ',paramstr(1));
+ processlog(paramstr(1));
+ gdb.done;
+end.
diff --git a/packages/gdbint/src/testgdb.pp b/packages/gdbint/src/testgdb.pp
new file mode 100644
index 0000000000..fe4bbde904
--- /dev/null
+++ b/packages/gdbint/src/testgdb.pp
@@ -0,0 +1,55 @@
+{
+ Copyright (c) 1998 by Peter Vreman
+
+ Small example program to the GDB
+
+ 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.
+
+ **********************************************************************}
+program testgdb;
+uses gdbcon;
+var
+ last,s,parafile : string;
+ gdb : tgdbcontroller;
+begin
+ gdb.init;
+ if paramcount=1 then
+ parafile:=paramstr(1)
+ else
+ parafile:='test';
+ gdb.loadfile(parafile);
+ Writeln('Welcome to the pascal GDB...');
+ Writeln('Type "q" to exit...');
+ last:='';
+ repeat
+ write('>');
+ readln(s);
+ if (s='a') then
+ gdb.starttrace
+ else
+ if (s='s') then
+ gdb.tracestep
+ else
+ if (s='n') then
+ gdb.tracenext
+ else
+ if (s='q') then
+ break
+ else
+ begin
+ if s='' then
+ s:=last;
+ GDB.Command(s);
+ GDB.WriteErrorBuf;
+ GDB.WriteOutputBuf;
+ last:=s;
+ end;
+ until false;
+ gdb.done;
+ Writeln('End of pascal GDB...');
+end.