--- gcc-4.1-4.1.2.orig/debian/logwatch.sh
+++ gcc-4.1-4.1.2/debian/logwatch.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+
+# script to trick the build daemons and output something, if there is
+# still test/build activity
+
+# $1: primary file to watch. if there is activity on this file, we do nothing
+# $2+: files to watch to look for activity despite no output in $1
+#      if the files are modified or are newly created, then the message
+#      is printed on stdout.
+#      if nothing is modified, don't output anything (so the buildd timeout
+#      hits).
+
+pidfile=logwatch.pid
+timeout=3600
+message='\nlogwatch still running\n'
+
+usage()
+{
+    echo >&2 "usage: `basename $0` [-p <pidfile>] [-t <timeout>] [-m <message>]"
+    echo >&2 "           <logfile> [<logfile> ...]"
+    exit 1
+}
+
+while [ $# -gt 0 ]; do
+    case $1 in
+    -p)
+	pidfile=$2
+	shift
+	shift
+	;;
+    -t)
+	timeout=$2
+	shift
+	shift
+	;;
+    -m)
+	message="$2"
+	shift
+	shift
+	;;
+    -*)
+	usage
+	;;
+    *)
+	break
+    esac
+done
+
+[ $# -gt 0 ] || usage
+
+logfile="$1"
+shift
+otherlogs="$@"
+
+cleanup()
+{
+    rm -f $pidfile
+    exit 0
+}
+
+#trap cleanup 0 1 3 15
+
+echo $$ > $pidfile
+
+update()
+{
+    _logvar=$1
+    _othervar=$2
+
+    # logfile may not exist yet
+    if [ -r $logfile ]; then
+	_logtail="`tail -10 $logfile | md5sum` $f"
+    else
+	_logtail="does not exist: $logfile"
+    fi
+    eval $_logvar="'$_logtail'"
+
+    _othertails=''
+    for f in $otherlogs; do
+	if [ -r $f ]; then
+	    _othertails="$_othertails `tail -10 $f | md5sum` $f"
+	else
+	    _othertails="$_othertails does not exist: $f"
+	fi
+    done
+    eval $_othervar="'$_othertails'"
+}
+
+update logtail othertails
+while true; do
+    sleep $timeout
+    update newlogtail newothertails
+    if [ "$logtail" != "$newlogtail" ]; then
+	# there is still action in the primary logfile. do nothing.
+	logtail="$newlogtail"
+    elif [ "$othertails" != "$newothertails" ]; then
+	# there is still action in the other log files, so print the message
+	/bin/echo -e $message
+	othertails="$newothertails"
+    else
+	# nothing changed in the other log files. maybe a timeout ...
+	:
+    fi
+done
--- gcc-4.1-4.1.2.orig/debian/rules.defs
+++ gcc-4.1-4.1.2/debian/rules.defs
@@ -0,0 +1,1180 @@
+# -*- makefile -*-
+# definitions used in more than one Makefile / rules file
+
+SHELL		= /bin/bash -e	# brace expansion used in rules file
+PWD		:= $(shell pwd)
+srcdir		= $(PWD)/src
+builddir	= $(PWD)/build
+builddir_hppa64	= $(PWD)/build-hppa64
+builddir_ia6432	= $(PWD)/build-ia6432
+stampdir	= stamps
+distribution	:= $(shell lsb_release -is)
+
+# architecture dependent variables
+vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1)))
+
+DPKG_VARS		:= $(shell dpkg-architecture)
+DEB_BUILD_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
+DEB_HOST_ARCH		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
+DEB_HOST_GNU_CPU	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_CPU)
+DEB_HOST_GNU_SYSTEM	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_SYSTEM)
+DEB_HOST_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
+
+ifdef DEB_TARGET_GNU_TYPE
+  TARGET_VARS := $(shell dpkg-architecture -f \
+			-t$(DEB_TARGET_GNU_TYPE) 2>/dev/null)
+  DEB_TARGET_ARCH	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH)
+  DEB_TARGET_ARCH_OS	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_OS)
+  DEB_TARGET_ARCH_CPU	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_CPU)
+  DEB_TARGET_GNU_CPU	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_CPU)
+  DEB_TARGET_GNU_TYPE	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_TYPE)
+  DEB_TARGET_GNU_SYSTEM	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_SYSTEM)
+else
+
+  # allow debian/target to be used instead of GCC_TARGET - this was requested
+  # by toolchain-source maintainer
+  DEBIAN_TARGET_FILE := $(strip $(if $(wildcard debian/target), \
+				  $(shell cat debian/target 2>/dev/null)))
+
+  ifdef DEB_TARGET_ARCH
+    # empty
+  else ifdef GCC_TARGET
+    DEB_TARGET_ARCH = $(GCC_TARGET)
+  else ifneq ($(DEBIAN_TARGET_FILE),)
+    DEB_TARGET_ARCH := $(DEBIAN_TARGET_FILE)
+  else
+    DEB_TARGET_ARCH = $(DEB_HOST_ARCH)
+  endif
+
+  TARGET_VARS := $(shell dpkg-architecture -f \
+			-a$(DEB_TARGET_ARCH) 2>/dev/null)
+  DEB_TARGET_ARCH	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH)
+  DEB_TARGET_ARCH_OS	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_OS)
+  DEB_TARGET_ARCH_CPU	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_CPU)
+  DEB_TARGET_GNU_CPU	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_CPU)
+  DEB_TARGET_GNU_TYPE	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_TYPE)
+  DEB_TARGET_GNU_SYSTEM	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_SYSTEM)
+endif
+
+ifeq ($(DEB_TARGET_ARCH),)
+  $(error Target is not a valid Debian architecture)
+endif
+
+# ---------------------------------------------------------------------------
+# which binary packages are built?
+
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE))
+  DEB_CROSS = yes
+  # TP: Target Prefix. Used primarily as a prefix for cross tool
+  #     names (e.g. powerpc-linux-gcc).
+  # TS: Target Suffix. Used primarily at the end of cross compiler
+  #     package names (e.g. gcc-powerpc).
+  # LS: Library Suffix. Used primarily at the end of cross compiler
+  #     library package names (e.g. libgcc-powerpc-cross).
+  DEB_TARGET_ALIAS ?= $(DEB_TARGET_GNU_TYPE)
+  TP =  $(subst _,-,$(DEB_TARGET_GNU_TYPE))-
+  TS = -$(subst _,-,$(DEB_TARGET_ALIAS))
+  LS = -$(subst _,-,$(DEB_TARGET_ARCH))-cross
+endif
+
+ifeq ($(DEB_CROSS),yes)
+  TARGET_ALIAS := $(DEB_TARGET_ALIAS)
+else
+  TARGET_ALIAS := $(DEB_TARGET_GNU_TYPE)
+
+  ifeq ($(TARGET_ALIAS),i386-gnu)
+    TARGET_ALIAS := i586-gnu
+  endif
+
+  #ifeq ($(TARGET_ALIAS),i486-linux-gnu)
+  #  TARGET_ALIAS := i686-linux-gnu
+  #endif
+
+  TARGET_ALIAS := $(subst i386,i486,$(TARGET_ALIAS))
+
+  # configure as linux-gnu, not linux
+  #ifeq ($(findstring linux,$(TARGET_ALIAS))/$(findstring linux-gnu,$(TARGET_ALIAS)),linux/)
+  #  TARGET_ALIAS := $(TARGET_ALIAS)-gnu
+  #endif
+
+  # configure as linux, not linux-gnu
+  #TARGET_ALIAS := $(subst linux-gnu,linux,$(TARGET_ALIAS))
+endif
+
+printarch:
+	@echo DEB_TARGET_ARCH: $(DEB_TARGET_ARCH)
+	@echo DEB_TARGET_ARCH_OS: $(DEB_TARGET_ARCH_OS)
+	@echo DEB_TARGET_ARCH_CPU: $(DEB_TARGET_ARCH_CPU)
+	@echo DEB_TARGET_GNU_SYSTEM: $(DEB_TARGET_GNU_SYSTEM)
+	@echo TARGET_ALIAS: $(TARGET_ALIAS)
+	@echo TP: $(TP)
+	@echo TS: $(TS)
+
+# The name of the source package
+CHANGELOG_VARS := $(shell dpkg-parsechangelog | sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p')
+PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source)
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  versioned_packages := yes
+endif
+
+ifdef DEB_CROSS
+  cross_bin_arch := -$(subst _,-,$(TARGET_ALIAS))
+  cross_lib_arch := -$(subst _,-,$(DEB_TARGET_ARCH))-cross
+endif
+
+ifndef DEB_CROSS
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    with_common_gcclibdir := yes
+  endif
+endif
+
+# Don't include docs with GFDL invariant sections --------------------
+GFDL_INVARIANT_FREE := yes
+ifeq ($(distribution),Ubuntu)
+  GFDL_INVARIANT_FREE=no
+endif
+
+# --------------------
+# Configuration of components
+
+COMMA = ,
+SPACE = $(EMPTY) $(EMPTY)
+
+# lang= overwrites all of nolang=, overwrites all of WITHOUT_LANG
+
+DEB_LANG_OPT	:= $(filter lang=%,$(DEB_BUILD_OPTIONS))
+DEB_LANG	:= $(strip $(subst $(COMMA), ,$(patsubst lang=%,%,$(DEB_LANG_OPT))))
+DEB_NOLANG_OPT	:= $(filter nolang=%,$(DEB_BUILD_OPTIONS))
+DEB_NOLANG	:= $(strip $(subst $(COMMA), ,$(patsubst nolang=%,%,$(DEB_NOLANG_OPT))))
+lfilt	= $(strip $(if $(DEB_LANG), \
+		$(if $(filter $(1) $(2),$(DEB_LANG)),yes),$(3)))
+nlfilt	= $(strip $(if $(DEB_NOLANG), \
+		$(if $(filter $(1) $(2),$(DEB_NOLANG)),disabled by $(DEB_NOLANG_OPT),$(3))))
+wlfilt	= $(strip $(if $(filter $(1) $(2), $(subst $(COMMA), ,$(WITHOUT_LANG))), \
+		disabled by WITHOUT_LANG=$(WITHOUT_LANG),$(3)))
+envfilt	= $(strip $(or $(call lfilt,$(1),$(2)),$(call nlfilt,$(1),$(3)),$(call wlfilt,$(1),$(3)),$(4)))
+
+# common things --------------------
+# build common packages, where package names don't differ in different
+# gcc versions (fixincludes, protoize) ...
+with_common_pkgs := no
+
+# ... and some libraries, which do not change (libgcc1, libffi4, libstdc++6,
+# libmudflap, libssp)
+with_common_libs := no
+
+ifeq ($(distribution),Debian)
+  next_gcc_not_built := foobar
+  ifneq (,$(filter $(DEB_TARGET_ARCH),$(next_gcc_not_built)))
+    with_common_pkgs := yes
+    with_common_libs := yes
+  endif
+endif
+ifeq ($(distribution),Ubuntu)
+  with_common_pkgs := no
+  with_common_libs := no
+endif
+
+with_gccbase := yes
+with_dev := yes
+
+ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+  with_source := yes
+endif
+with_source := $(call envfilt, source, , , $(with_source))
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  with_nls := no
+else
+  with_nls := yes
+endif
+with_nls := $(call envfilt, nls, , , $(with_nls))
+
+ifneq ($(WITH_BOOTSTRAP),)
+  # "yes" is the default and causes a 3-stage bootstrap.
+  # "no" means to just build the first stage, and not create the stage1
+  # directory.
+  # "lean" means a lean 3-stage bootstrap, i.e. delete each stage when no
+  # longer needed.
+  with_bootstrap=$(WITH_BOOTSTRAP)
+endif
+
+# when DEB_CROSS_INDEPENDENT is set we build and depend on a 
+# separate -base package for the cross compiler.
+ifeq ($(DEB_CROSS_INDEPENDENT),yes)
+  with_gccxbase := yes
+endif
+
+#no_dummy_cpus := ia64 i386 hppa s390 sparc
+#with_base_only := yes
+#ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(no_dummy_cpus)))
+#  with_base_only := no
+#  with_common_libs := yes
+#  with_common_pkgs := yes
+#else
+#  with_common_libs := no
+#  with_common_pkgs := no
+#  with_dev := no
+#endif
+
+# C --------------------
+enabled_languages := c
+# Build all packages needed for C development
+ifeq ($(with_base_only),yes)
+  with_cdev := no
+else
+  ifeq ($(with_dev),yes)
+    with_cdev := yes
+  else
+    with_cdev := no
+  endif
+endif
+
+# C++ --------------------
+ifeq ($(with_base_only),yes)
+  with_cxx := no
+else
+  with_cxx := yes
+endif
+no_cxx_cpus := avr
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(no_cxx_cpus)))
+  with_cxx := disabled for architecture $(DEB_TARGET_ARCH_CPU)
+endif
+with_cxx := $(call envfilt, c++, obj-c++ java, , $(with_cxx))
+
+# Build all packages needed for C++ development
+ifeq ($(with_cxx)-$(with_dev),yes-yes)
+  with_cxxdev := yes
+  with_libcxxdbg := yes
+else
+  with_cxxdev := no
+  with_libcxxdbg := no
+endif
+
+ifeq ($(with_cxx),yes)
+  enabled_languages += c++
+endif
+
+ifeq ($(with_common_libs)-$(with_cxx),yes-yes)
+  with_libcxx := yes
+#  ifeq ($(DEB_TARGET_ARCH_CPU),arm)
+#    with_libcxx := no
+#  endif
+else
+  with_libcxx := no
+endif
+
+# debugging versions of libstdc++
+ifeq ($(with_cxxdev),yes)
+  with_debug := yes
+else
+  with_debug := no
+endif
+debug_no_cpus :=
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(debug_no_cpus)))
+    with_debug := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+endif
+with_debug := $(call envfilt, debug, , , $(with_debug))
+
+# __cxa_atexit -------------
+# The __cxa_atexit API does not exist in some libc version (NetBSD)
+with_cxa_atexit := yes
+
+no_cxa_systems :=
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(no_cxa_systems)))
+  with_cxa_atexit := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+with_separate_libgcj := no
+
+# Java --------------------
+with_separate_libgcj := yes
+with_standalone_gcj := no
+
+# java converted for V3 C++ ABI for some archs
+ifeq ($(with_base_only),yes)
+  with_java := no
+else
+  with_java := yes
+endif
+
+java_no_cpus := arm armel hppa mips mipsel
+java_no_arches :=
+java_no_systems :=
+gcj_native_archs = alpha amd64 i386 ia64 mipsel powerpc s390 sparc
+
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(java_no_cpus)))
+  with_java := disabled for architecture $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(java_no_systems)))
+  with_java := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifneq (, $(filter $(DEB_TARGET_ARCH),$(java_no_arches)))
+  with_java := disabled for $(DEB_TARGET_ARCH)
+endif
+ifdef DEB_CROSS
+  with_java := disabled for cross compiler package
+endif
+with_java := $(call envfilt, java, , c++, $(with_java))
+
+ifneq (,$(filter $(DEB_TARGET_ARCH),hppa))
+  with_native_ecj := yes
+endif
+
+browser_plugin_dirs = firefox iceape iceweasel mozilla midbrowser xulrunner
+
+# used as well in debian/rules.conf to determine the build deps
+java_awt_peers = gtk # xlib qt
+
+ifeq ($(with_java),yes)
+  java_plugin_no_cpus := armel arm m68k mips mipsel
+  with_java_plugin := yes
+  ifneq (, $(filter $(DEB_TARGET_ARCH),$(java_plugin_no_cpus)))
+    with_java_plugin := disabled for $(DEB_TARGET_ARCH)
+  endif
+  ifeq ($(distribution),Ubuntu)
+    with_pkg_plugin := yes
+  endif
+else
+  ifeq ($(PKGSOURCE),gcj-4.1)
+    $(error java is disabled for this architecture: $(with_java))
+  endif
+endif
+
+# Build all packages needed for Java development (gcj, libgcj-dev)
+ifeq ($(with_java)-$(with_dev),yes-yes)
+  with_javadev := yes
+  with_gcj := yes
+else
+  with_javadev := no
+endif
+
+ifeq ($(with_java),yes)
+  with_java_alsa := yes
+  with_java_plugin := yes
+  ifneq (,$(filter $(DEB_TARGET_GNU_SYSTEM), kfreebsd-gnu gnu))
+    with_java_alsa := no
+  endif
+endif
+
+ifeq ($(with_java),yes)
+  enabled_languages += java
+  with_libgcj := yes
+else
+  with_libgcj := no
+endif
+
+# fastjar -------------------
+with_fastjar := yes
+ifdef DEB_CROSS
+    with_fastjar := disabled for cross compiler package
+endif
+with_fastjar := no
+
+# libmudflap -------------------
+with_mudflap := yes
+with_libmudflap := yes
+with_mudflap := $(call envfilt, mudflap, , , $(with_mudflap))
+with_libmudflap := $(call envfilt, mudflap, , , $(with_libmudflap))
+
+ifneq ($(with_common_libs),yes)
+  with_libmudflap := no
+endif
+
+# libssp -------------------
+with_ssp := yes
+ssp_no_archs = arm armel alpha hppa ia64 m68k mips mipsel
+ifneq (, $(filter $(DEB_TARGET_ARCH),$(ssp_no_archs)))
+  with_ssp := not available on $(DEB_TARGET_ARCH)
+endif
+with_ssp := $(call envfilt, ssp, , , $(with_ssp))
+
+ifeq ($(with_ssp),yes)
+  ifneq ($(distribution),Debian)
+    ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+      with_ssp_default := yes
+    endif
+  endif
+endif
+
+# do it here, the information is only available after gcc is configured
+ifeq ($(with_common_libs),yes)
+  ifeq ($(with_ssp),yes)
+    with_libssp := $(if $(wildcard $(builddir)/gcc/auto-host.h), \
+	             $(shell if grep -qs '^\#define TARGET_LIBC_PROVIDES_SSP 1' $(builddir)/gcc/auto-host.h; then echo 'libc provides ssp'; else echo 'yes'; fi))
+  endif
+endif
+
+# libffi -------------------
+ifeq ($(with_common_libs),yes)
+  with_libffi := yes
+  no_ffi_cpus :=
+  no_ffi_arches := armel
+  no_ffi_systems :=
+  ifneq ($(with_java),yes)
+    ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(no_ffi_cpus)))
+      with_libffi := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+    endif
+    ifneq (, $(filter $(DEB_TARGET_ARCH),$(no_ffi_arches)))
+      with_libffi := disabled for architecure $(DEB_TARGET_ARCH)
+    endif
+    ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(no_ffi_systems)))
+      with_libffi := disabled for $(DEB_TARGET_GNU_SYSTEM)
+    endif
+    with_libffi := $(call envfilt, ffi, , , $(with_libffi))
+  endif
+  ifdef DEB_CROSS
+    with_libffi := disabled for cross compiler package
+  endif
+endif
+
+# Fortran 95 --------------------
+ifeq ($(with_base_only),yes)
+  with_fortran := no
+else
+  with_fortran := yes
+endif
+
+f95_no_cpus :=
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(f95_no_cpus)))
+    with_fortran := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+endif
+ifdef DEB_CROSS
+  with_fortran := disabled for cross compiler package
+endif
+ifeq (f95, $(findstring f95,$(WITHOUT_LANG)))
+  with_fortran := disabled by environment
+endif
+with_fortran := $(call envfilt, fortran, , , $(with_fortran))
+
+with_fortran := disabled for gcc-4.1
+
+# Build all packages needed for Fortran development
+ifeq ($(with_fortran)-$(with_dev),yes-yes)
+  with_fdev := yes
+else
+  with_fdev := no
+endif
+
+# soname changed in 4.2
+#ifeq ($(with_common_libs)-$(with_fortran),yes-yes)
+#  with_libfortran := yes
+#else
+#  with_libfortran := no
+#endif
+with_libfortran := yes
+
+ifeq ($(with_fortran),yes)
+  enabled_languages += fortran
+endif
+
+# protoize --------------------
+ifeq ($(with_common_pkgs),yes)
+  with_proto := yes
+  ifdef DEB_CROSS
+    with_proto := disabled for cross compiler package
+  endif
+else
+  with_proto := no
+endif
+#ifeq ($(with_proto),yes)
+#  enabled_languages += proto
+#endif
+
+ifeq ($(with_common_pkgs),yes)
+  with_fixincl := yes
+  ifdef DEB_CROSS
+    with_fixincl := disabled for cross compiler package
+  endif
+else
+  with_fixincl := no
+endif
+
+# Pascal --------------------
+
+with_separate_gpc := yes
+
+with_pascal := yes
+ifneq ($(with_dev),yes)
+  with_pascal := no
+endif
+
+# these CPUs are not yet tested
+pascal_no_cpus := #alpha amd64 arm m68k mips mipsel s390
+pascal_no_systems :=
+ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(pascal_no_cpus)))
+  with_pascal := disabled for architecture $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(filter $(DEB_TARGET_GNU_SYSTEM),$(pascal_no_systems)))
+  with_pascal := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq (,$(findstring gpc, $(PKGSOURCE)))
+  with_pascal := disabled, built by separate source
+endif
+
+with_gpidump := yes
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+  with_gpidump := disabled for architecture $(DEB_TARGET_ARCH_CPU)
+endif
+pascal_version := 20060325
+with_pascal := $(call envfilt, pascal, , , $(with_pascal))
+
+ifdef DEB_CROSS
+  with_pascal := disabled for cross compiler package
+endif
+ifeq ($(with_pascal),yes)
+  enabled_languages += pascal
+endif
+
+# ObjC --------------------
+ifeq ($(with_base_only),yes)
+  with_objc := no
+else
+  with_objc := yes
+endif
+with_objc := disabled for gcc-4.1
+
+# the ObjC runtime with garbage collection enabled needs the Boehm GC
+with_objc_gc := yes
+
+# disable ObjC garbage collection library (needs libgc)
+libgc_no_cpus := avr alpha amd64 arm armeb hppa i386 ia64 m68k mips mipsel powerpc s390 sparc
+libgc_no_systems :=
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(libgc_no_cpus)))
+  with_objc_gc := disabled for architecture $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(libgc_no_systems)))
+  with_objc_gc := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+with_objc_gc := disabled for gcc-4.1
+ifdef DEB_CROSS
+  ifneq (objc, $(findstring objc,$(WITH_LANG)))
+    with_objc := disabled for cross compiler package
+  endif
+endif
+with_objc := $(call envfilt, objc, obj-c++, , $(with_objc))
+ifeq ($(DEB_TARGET_ARCH),armel)
+  with_objc := disabled for armel
+endif
+
+ifneq ($(with_objc),yes)
+  with_objc_gc := $(with_objc)
+endif
+
+# Build all packages needed for Objective-C development
+ifeq ($(with_objc)-$(with_dev),yes-yes)
+  with_objcdev := yes
+else
+  with_objcdev := no
+endif
+# soname changed in 4.2
+#ifeq ($(with_common_libs)-$(with_objc),yes-yes)
+#  with_libobjc := yes
+#else
+#  with_libobjc := no
+#endif
+with_libobjc := yes
+with_libobjc := disabled for gcc-4.1
+
+ifeq ($(with_objc),yes)
+  enabled_languages += objc
+endif
+
+# ObjC++ --------------------
+with_objcxx := yes
+with_objcxx := disabled for gcc-4.1
+with_objcxx := $(call envfilt, obj-c++, , c++ objc, $(with_objcxx))
+
+ifeq ($(with_objcxx),yes)
+  enabled_languages += obj-c++
+endif
+
+# Ada --------------------
+with_separate_gnat := yes
+with_ada := yes
+ifneq ($(with_dev),yes)
+  with_ada := no
+endif
+
+with_libgnat := yes
+ada_no_cpus := arm armeb m32r m68k sh3 sh3eb sh4 sh4eb
+ada_no_systems := hurd-i386
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(ada_no_cpus)))
+  with_ada := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(ada_no_systems)))
+  with_ada := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(DEB_TARGET_ARCH),hurd-i386)
+  with_ada := disabled for architecure $(DEB_TARGET_ARCH)
+endif
+with_ada := $(call envfilt, ada, , , $(with_ada))
+ifdef DEB_CROSS
+  with_ada := disabled for cross compiler package
+endif
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  with_ada := disabled for snapshot builds
+endif
+
+ifeq ($(with_ada),yes)
+  enabled_languages += ada
+  libada_no_cpus := mips mipsel
+  ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(libada_no_cpus)))
+    with_libgnat := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+  endif
+  # maybe not the correct macro name ...
+  libada_shared_dual_cpus := hppa
+  ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(libada_shared_dual_cpus)))
+    with_libgnat_shared_dual := yes
+  endif
+else
+  with_libgnat := $(with_ada)
+  with_libgnat_shared_dual := no
+endif
+
+# D -------------------------
+
+with_separate_gdc := yes
+
+# no suffix for D 1.0
+libphobos_version :=
+
+# still experimental
+# libphobos_version := 2
+
+ifeq ($(with_base_only),yes)
+  with_d := no
+else
+  with_d := yes
+endif
+
+with_libphobos := $(with_d)
+
+libphobos_no_cpus := sparc
+libphobos_no_systems := gnu
+ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(libphobos_no_cpus)))
+  with_libphobos := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(libphobos_no_systems)))
+  with_libphobos := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+
+ifneq ($(with_cxx),yes)
+  with_d := disabled because C++ disabled
+endif
+
+ifneq ($(with_d),yes)
+  with_libphobos := disabled because D disabled
+endif
+
+ifeq ($(with_d),yes)
+  enabled_languages += d
+endif
+
+# Shared libgcc --------------------
+with_shared_libgcc := yes
+
+ifeq ($(with_common_libs),yes)
+  with_libgcc := yes
+else
+  with_libgcc := no
+  with_shared_libgcc := no
+endif
+
+# hppa64 build --------------------
+with_hppa64 := no
+ifeq ($(DEB_TARGET_ARCH),hppa)
+  ifneq ($(DEB_CROSS),yes)
+    with_hppa64 := yes
+  endif
+  #ifeq ($(PKGSOURCE),gcc-snapshot)
+  #  with_hppa64 := disabled for snapshot build
+  #endif
+endif
+with_hppa64 := $(call envfilt, hppa64, , , $(with_hppa64))
+
+# run testsuite --------------------
+with_check := yes
+# If you don't want to run the gcc testsuite, set `with_check' to `no'
+#with_check := disabled by hand
+ifeq ($(with_base_only),yes)
+  with_check := no
+endif
+ifdef DEB_CROSS
+  with_check := disabled for cross compiler package
+endif
+check_no_systems := hurd-i386
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(check_no_systems)))
+  with_check := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+check_no_cpus :=
+ifeq ($(DEB_TARGET_ARCH_CPU), $(findstring $(DEB_TARGET_ARCH_CPU),$(check_no_cpus)))
+  with_check := disabled for architecure $(DEB_TARGET_ARCH_CPU)
+endif
+ifeq ($(DEB_TARGET_ARCH),hurd-i386)
+  with_check := disabled for architecure $(DEB_TARGET_ARCH)
+endif
+ifeq ($(distribution)-$(DEB_HOST_ARCH),Ubuntu-hppa)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    with_check := disabled, testsuite timeouts with expect
+  endif
+endif
+with_check := $(call envfilt, check, , , $(with_check))
+ifneq ($(WITHOUT_CHECK),)
+  with_check := disabled by environment
+endif
+ifneq ($(findstring nocheck, $(DEB_BUILD_OPTIONS)),)
+  with_check := disabled by DEB_BUILD_OPTIONS
+endif
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+  with_check := disabled for gdc
+endif
+
+locale_data = generate
+
+# powerpc nof libraries --------------------
+with_libnof := no
+
+# multiarch --------------------
+#with_multiarch_inc := yes
+#with_multiarch_lib := no
+
+all_enabled_languages := $(enabled_languages)
+languages_without_lang_opt := c++ objc obj-c++ proto
+
+ifeq ($(with_separate_libgcj),yes)
+  ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+    enabled_languages := $(filter-out java, $(all_enabled_languages))
+    debian_extra_langs = java
+    with_java := built from separate source
+    with_gcj := built from separate source
+    with_libgcj := built from separate source
+  endif
+  ifneq (,$(findstring gcj, $(PKGSOURCE)))
+    enabled_languages = c c++ java
+    debian_extra_langs := $(filter-out $(enabled_languages) $(languages_without_lang_opt), $(all_enabled_languages))
+    with_libgcc := no
+    with_cxx := no
+    with_cdev := no
+    with_cxxdev := no
+    with_fortran := no
+    with_proto := no
+    with_fixincl := no
+    with_pascal := no
+    with_libmudflap := no
+    with_libffi := no
+    with_libssp := no
+    with_objc := no
+    with_libobjc := no
+    with_objcxx := no
+    with_ada := no
+    with_d := no
+    with_libphobos := no
+    with_libgnat := no
+    with_hppa64 := no
+    with_libnof := no
+    with_debug := no
+    with_gccbase := no
+    with_fastjar := no
+    ifeq ($(with_standalone_gcj),yes)
+      ifeq ($(DEB_TARGET_ARCH),hppa)
+        with_libgcc := yes
+      endif
+      #with_fastjar := yes
+    endif
+  endif
+endif
+
+ifeq ($(with_separate_gnat),yes)
+  ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+    enabled_languages := $(filter-out ada, $(enabled_languages))
+    debian_extra_langs += ada
+    with_ada := built from separate source
+    with_libgnat := built from separate source
+  endif
+  ifneq (,$(findstring gnat, $(PKGSOURCE)))
+    enabled_languages = c ada
+    debian_extra_langs := $(filter-out $(enabled_languages) $(languages_without_lang_opt), $(all_enabled_languages))
+    with_libgcc := no
+    with_cxx := no
+    with_cdev := no
+    with_cxxdev := no
+    with_fortran := no
+    with_proto := no
+    with_fixincl := no
+    with_pascal := no
+    with_libmudflap := no
+    with_libffi := no
+    with_libssp := no
+    with_objc := no
+    with_libobjc := no
+    with_objcxx := no
+    with_d := no
+    with_libphobos := no
+    with_java := no
+    with_gcj := no
+    with_libgcj := no
+    with_hppa64 := no
+    with_libnof := no
+    with_debug := no
+    with_gccbase := no
+    with_fastjar := no
+    with_check := no
+  endif
+endif
+
+ifeq ($(with_separate_gdc),yes)
+  ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+    enabled_languages := $(filter-out d, $(enabled_languages))
+    debian_extra_langs += d
+    with_d := built from separate source
+    with_libphobos := built from separate source
+  endif
+  ifneq (,$(findstring gdc, $(PKGSOURCE)))
+    enabled_languages = c c++ d
+    debian_extra_langs := $(filter-out $(enabled_languages) $(languages_without_lang_opt), $(all_enabled_languages))
+    with_libgcc := no
+    with_cxx := no
+    with_cdev := no
+    with_cxxdev := no
+    with_fortran := no
+    with_proto := no
+    with_fixincl := no
+    with_pascal := no
+    # gpc doesn't support mudflap
+    with_mudflap := no
+    with_libmudflap := no
+    with_libffi := no
+    with_libssp := no
+    with_objc := no
+    with_libobjc := no
+    with_objcxx := no
+    with_ada := no
+    with_libgnat := no
+    with_java := no
+    with_gcj := no
+    with_libgcj := no
+    with_hppa64 := no
+    with_libnof := no
+    with_debug := no
+    with_gccbase := no
+    with_fastjar := no
+  endif
+endif
+
+ifeq ($(with_separate_gpc),yes)
+  ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+    enabled_languages := $(filter-out pascal, $(enabled_languages))
+    debian_extra_langs += pascal
+    with_pascal := built from separate source
+  endif
+  ifneq (,$(findstring gpc, $(PKGSOURCE)))
+    enabled_languages = c pascal
+    debian_extra_langs := $(filter-out $(enabled_languages) $(languages_without_lang_opt), $(all_enabled_languages))
+    with_libgcc := no
+    with_cxx := no
+    with_cdev := no
+    with_cxxdev := no
+    with_fortran := no
+    with_proto := no
+    with_fixincl := no
+    with_d := no
+    with_libphobos := no
+    # gpc doesn't support mudflap
+    with_mudflap := no
+    with_libmudflap := no
+    with_libffi := no
+    with_libssp := no
+    with_objc := no
+    with_libobjc := no
+    with_objcxx := no
+    with_ada := no
+    with_libgnat := no
+    with_java := no
+    with_gcj := no
+    with_libgcj := no
+    with_hppa64 := no
+    with_libnof := no
+    with_debug := no
+    with_gccbase := no
+    with_fastjar := no
+  endif
+endif
+
+debian_extra_langs := $(subst obj-c++,objcp,$(debian_extra_langs))
+export debian_extra_langs
+
+biarch := no
+
+with_lib64gcc		:= no
+with_lib64cxx		:= no
+with_lib64objc		:= no
+with_lib64ffi		:= no
+with_lib64gcj		:= no
+with_lib64fortran	:= no
+with_lib64mudflap	:= no
+with_lib64ssp		:= no
+
+biarch_map := i486=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x \
+		x86_64=i486 powerpc64=powerpc
+biarch_cpu := $(patsubst $(DEB_TARGET_GNU_CPU)=%, %, \
+			 $(filter $(DEB_TARGET_GNU_CPU)=%, $(biarch_map)))
+
+biarch_archs := /i386/powerpc/sparc/s390/
+ifneq (yes,$(call envfilt, biarch, , ,yes))
+  biarch_archs :=
+endif
+ifneq (,$(findstring /$(DEB_TARGET_ARCH)/,$(biarch_archs)))
+  biarch := yes
+  biarchsubdir = 64
+  ifeq ($(with_libgcc),yes)
+    with_lib64gcc := yes
+  endif
+  ifeq ($(with_libcxx),yes)
+    with_lib64cxx := yes
+  endif
+  ifeq ($(with_libcxxdbg),yes)
+    with_lib64cxxdbg := yes
+  endif
+  ifeq ($(with_libobjc),yes)
+    with_lib64objc := yes
+  endif
+  ifeq ($(with_libfortran),yes)
+    with_lib64fortran := yes
+  endif
+  ifeq ($(with_libffi),yes)
+    with_lib64ffi := yes
+  endif
+  ifeq ($(with_libmudflap),yes)
+    with_lib64mudflap := yes
+  endif
+  ifeq ($(with_libssp),yes)
+    with_lib64ssp := yes
+  endif
+
+  biarch_multidir_names = libiberty zlib
+  ifneq (,$(findstring gcc-, $(PKGSOURCE)))
+    biarch_multidir_names += libstdc++-v3 libgfortran libmudflap libssp libffi libobjc
+  endif
+  ifneq (,$(findstring gdc-, $(PKGSOURCE)))
+    biarch_multidir_names += libstdc++-v3
+  endif
+  export biarch_multidir_names
+
+  TARGET32_MACHINE := $(TARGET_ALIAS)
+  TARGET64_MACHINE := $(strip $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu), \
+					$(TARGET_ALIAS)))
+  export TARGET32_MACHINE
+  export TARGET64_MACHINE
+endif
+
+biarch32_archs := /amd64/ppc64/kfreebsd-amd64/
+ifneq (yes,$(call envfilt, biarch, , ,yes))
+  biarch32_archs :=
+endif
+ifneq (,$(findstring /$(DEB_TARGET_ARCH)/,$(biarch32_archs)))
+  biarch32 := yes
+  biarchsubdir = 32
+  ifeq ($(with_libgcc),yes)
+    with_lib32gcc := yes
+  endif
+  ifeq ($(with_libcxx),yes)
+    with_lib32cxx := yes
+  endif
+  ifeq ($(with_libcxxdbg),yes)
+    with_lib32cxxdbg := yes
+  endif
+  ifeq ($(with_libobjc),yes)
+    with_lib32objc := yes
+  endif
+  ifeq ($(with_libfortran),yes)
+    with_lib32fortran := yes
+  endif
+  ifeq ($(with_libffi),yes)
+    with_lib32ffi := yes
+  endif
+  ifeq ($(with_libmudflap),yes)
+    with_lib32mudflap := yes
+  endif
+  ifeq ($(with_libssp),yes)
+    with_lib32ssp := yes
+  endif
+
+  biarch_multidir_names = libiberty zlib
+  ifneq (,$(findstring gcc-, $(PKGSOURCE)))
+    biarch_multidir_names += libstdc++-v3 libgfortran libmudflap libssp libffi libobjc
+  endif
+  ifneq (,$(findstring gdc-, $(PKGSOURCE)))
+    biarch_multidir_names += libstdc++-v3
+  endif
+  export biarch_multidir_names
+
+  TARGET32_MACHINE := $(strip $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu), \
+					$(TARGET_ALIAS)))
+  TARGET64_MACHINE := $(TARGET_ALIAS)
+  export TARGET32_MACHINE
+  export TARGET64_MACHINE
+endif
+
+multilib_archs = $(sort $(subst /, , $(biarch_archs) $(biarch32_archs)))
+
+#ifeq ($(DEB_TARGET_ARCH),ia64)
+#  biarch32 := yes
+#endif
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  #ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),sparc))
+    with_lib64gcc	:= no
+    with_lib64cxx	:= no
+    with_lib64objc	:= no
+    with_lib64ffi	:= no
+    with_lib64gcj	:= no
+    with_lib64fortran	:= no
+    with_lib64mudflap	:= no
+    with_lib64ssp	:= no
+
+    with_lib32gcc	:= no
+    with_lib32cxx	:= no
+    with_lib32objc	:= no
+    with_lib32ffi	:= no
+    with_lib32gcj	:= no
+    with_lib32fortran	:= no
+    with_lib32mudflap	:= no
+    with_lib32ssp	:= no
+
+    biarch   	:= disabled for snapshot build
+    biarch32 	:= disabled for snapshot build
+  #endif
+endif
+
+ifdef DEB_CROSS_NO_BIARCH
+  with_lib64gcc		:= no
+  with_lib64cxx		:= no
+  with_lib64objc	:= no
+  with_lib64ffi		:= no
+  with_lib64gcj		:= no
+  with_lib64fortran	:= no
+  with_lib64mudflap	:= no
+  with_lib64ssp		:= no
+
+  with_lib32gcc		:= no
+  with_lib32cxx		:= no
+  with_lib32objc	:= no
+  with_lib32ffi		:= no
+  with_lib32gcj		:= no
+  with_lib32fortran	:= no
+  with_lib32mudflap	:= no
+  with_lib32ssp		:= no
+
+  biarch   	:= disabled for cross build
+  biarch32 	:= disabled for cross build
+endif
+
+ifeq ($(biarch32),yes)
+  with_32bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+				$(shell cat build/runcheck.out), \
+				$(shell CC="gcc -m32" bash debian/runcheck.sh)))
+endif
+
+ifeq ($(biarch),yes)
+  with_64bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+				$(shell cat build/runcheck.out), \
+				$(shell CC="gcc -m64" bash debian/runcheck.sh)))
+endif
+
+# GNU locales
+force_gnu_locales := yes
+locale_no_systems := gnu
+ifneq (, $(filter $(DEB_TARGET_GNU_SYSTEM),$(locale_no_systems)))
+  force_gnu_locales := disabled for $(DEB_TARGET_GNU_SYSTEM)
+endif
+
+gcc_tarpath		:= $(firstword $(wildcard gcc-*.tar.* /usr/src/gcc-4.1/gcc-*.tar.*))
+gcc_tarball		:= $(notdir $(gcc_tarpath))
+#gcc_srcdir		:= $(shell echo $(gcc_tarball) | sed 's/\.tar.*//;s/-dfsg//')
+gcc_srcdir		:= $(subst -dfsg,,$(patsubst %.tar.gz,%,$(gcc_tarball:.tar.bz2=)))
+
+gcj_tarpath		:= $(firstword $(wildcard gcj-ecj-*.tar.* /usr/src/gcc-4.1/gcj-ecj-*.tar.*))
+gcj_tarball		:= $(notdir $(gcj_tarpath))
+
+ifeq ($(with_pascal),yes)
+  gpc_tarpath		:= $(firstword $(wildcard gpc-*.tar.* /usr/src/gcc-4.1/gpc-*.tar.*))
+  gpc_tarball		:= $(notdir $(gpc_tarpath))
+  gpc_srcdir		:= $(patsubst %.tar.gz,%,$(gpc_tarball:.tar.bz2=))
+endif
+
+ifeq ($(with_d),yes)
+  gdc_tarpath		:= $(firstword $(wildcard gdc-*.tar.* /usr/src/gcc-4.1/gdc-*.tar.*))
+  gdc_tarball		:= $(notdir $(gdc_tarpath))
+  gdc_srcdir		:= $(patsubst %.tar.gz,%,$(gdc_tarball:.tar.bz2=))
+endif
+
+unpack_stamp		:= $(stampdir)/01-unpack-stamp
+patch_stamp		:= $(stampdir)/02-patch-stamp
+control_stamp		:= $(stampdir)/03-control-stamp
+configure_stamp		:= $(stampdir)/04-configure-stamp
+build_stamp		:= $(stampdir)/05-build-stamp
+build_html_stamp	:= $(stampdir)/05-build-html-stamp
+build_doxygen_stamp	:= $(stampdir)/05-build-doxygen-stamp
+build_javadoc_stamp	:= $(stampdir)/05-build-javadoc-stamp
+check_stamp		:= $(stampdir)/06-check-stamp
+check_inst_stamp	:= $(stampdir)/06-check-inst-stamp
+install_stamp		:= $(stampdir)/07-install-stamp
+binary_stamp		:= $(stampdir)/08-binary-stamp
+
+configure_dummy_stamp	:= $(stampdir)/04-configure-dummy-stamp
+build_dummy_stamp	:= $(stampdir)/05-build-dummy-stamp
+install_dummy_stamp	:= $(stampdir)/07-install-dummy-stamp
+
+configure_hppa64_stamp	:= $(stampdir)/04-configure-hppa64-stamp
+build_hppa64_stamp	:= $(stampdir)/05-build-hppa64-stamp
+install_hppa64_stamp	:= $(stampdir)/07-install-hppa64-stamp
+
+configure_ia6432_stamp	:= $(stampdir)/04-configure-ia6432-stamp
+build_ia6432_stamp	:= $(stampdir)/05-build-ia6432-stamp
+install_ia6432_stamp	:= $(stampdir)/07-install-ia6432-stamp
+
+configure_ia6432_stamp	:= $(stampdir)/04-configure-ia6432-stamp
+build_ia6432_stamp	:= $(stampdir)/05-build-ia6432-stamp
+install_ia6432_stamp	:= $(stampdir)/07-install-ia6432-stamp
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+    control_dependencies = $(patch_stamp)
+    configure_dependencies = $(configure_stamp)
+    build_dependencies = $(build_stamp)
+    ifeq ($(with_check),yes)
+      build_dependencies += check
+    endif
+    install_dependencies = $(install_snap_stamp)
+else
+  ifeq ($(with_base_only),yes)
+    control_dependencies = $(patch_stamp)
+    configure_dependencies = $(configure_dummy_stamp)
+    build_dependencies = $(build_dummy_stamp)
+    install_dependencies = $(install_dummy_stamp)
+  else
+    control_dependencies = $(patch_stamp)
+    configure_dependencies = $(configure_stamp)
+    build_dependencies = $(build_stamp)
+    ifeq ($(with_check),yes)
+      build_dependencies += check
+    endif
+    install_dependencies = $(install_stamp)
+  endif
+endif
+
+ifeq ($(with_hppa64),yes)
+  build_dependencies += $(build_hppa64_stamp)
+  install_dependencies += $(install_hppa64_stamp)
+endif
+
+ifeq ($(with_ia6432),yes)
+  build_dependencies += $(build_ia6432_stamp)
+endif
+
+ifeq ($(with_ia6432),yes)
+  build_dependencies += $(build_ia6432_stamp)
+endif
+
+stamp-dir:
+	mkdir -p $(stampdir)
--- gcc-4.1-4.1.2.orig/debian/gpc-2.1-4.1-doc.prerm
+++ gcc-4.1-4.1.2/debian/gpc-2.1-4.1-doc.prerm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+if [ -f /usr/share/info/gpc-2.1-4.1.info.gz ]; then
+  install-info --quiet --remove gpc-2.1-4.1
+else
+  # GFDL invariant free
+  true
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gnatprj.gpr
+++ gcc-4.1-4.1.2/debian/gnatprj.gpr
@@ -0,0 +1,37 @@
+--  Project file for use with GNAT 3.15p
+--  Copyright (c) 2005 Ludovic Brenta <ludovic@ludovic-brenta.org>
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 2 of the License, or
+--  (at your option) any later version.
+--
+--  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.  See the
+--  GNU General Public License for more details.
+--
+--  This project file is designed to help build applications that use
+--  GNAT project files.  Here is an example of how to use this project file:
+--
+--  with "/usr/share/ada/adainclude/gnatprj";
+--  project Example is
+--     for Object_Dir use "obj";
+--     for Exec_Dir use ".";
+--     for Main use ("example");
+--     package Linker renames Gnatprj.Linker;
+--     --  Alternatively, if you need additional switches:
+--     --  package Linker is
+--     --     for Default_Switches ("Ada") use (Gnatprj.Linker_Switches & ...)
+--     --  end Linker;
+--  end Example;
+
+with "gnatvsn.gpr";
+project Gnatprj is
+   for Source_Dirs use ("/usr/share/ada/adainclude/gnatprj");
+   for Object_Dir use "/usr/lib/ada/adalib/gnatprj";
+   Linker_Switches := "-lgnatprj";
+   package Linker is
+      for Default_Switches ("Ada") use (Linker_Switches);
+   end Linker;
+end Gnatprj;
--- gcc-4.1-4.1.2.orig/debian/cpp-BV-doc.doc-base.cppint
+++ gcc-4.1-4.1.2/debian/cpp-BV-doc.doc-base.cppint
@@ -0,0 +1,17 @@
+Document: cppinternals-@BV@
+Title: The GNU C preprocessor (internals)
+Author: Various
+Abstract: This brief manual documents the internals of cpplib, and
+ explains some of the tricky issues.  It is intended that, along with
+ the comments in the source code, a reasonably competent C programmer
+ should be able to figure out what the code is doing, and why things
+ have been implemented the way they have.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/cppinternals.html
+Files: /usr/share/doc/gcc-@BV@-base/cppinternals.html
+
+Format: info
+Index: /usr/share/info/cppinternals-@BV@.info.gz
+Files: /usr/share/info/cppinternals-@BV@*
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-doc.postinst
+++ gcc-4.1-4.1.2/debian/gcc-BV-doc.postinst
@@ -0,0 +1,9 @@
+#! /bin/sh -e
+
+install-info --quiet --section "Development" "Development" \
+	/usr/share/info/gcc-@BV@.info.gz
+
+install-info --quiet --section "Development" "Development" \
+	/usr/share/info/gccint-@BV@.info.gz
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gpc-BV-doc.doc-base.gpcs
+++ gcc-4.1-4.1.2/debian/gpc-BV-doc.doc-base.gpcs
@@ -0,0 +1,23 @@
+Document: gpcs-@BV@-doc
+Title: The GNU Pascal Coding Standards
+Author: Various
+Abstract: The GNU Pascal Coding Standards were designed by a group of
+ GNU Pascal project volunteers. The aim of this document is extending
+ the GNU Coding Standards with specific information relating Pascal
+ programming.  As a matter of fact, the information contained in the
+ GNU Coding Standards mainly pertains to programs written in the C
+ language. On the other hand, they also explain many of the rules and
+ principles that are useful for writing portable, robust and reliable
+ programs. Most of those general topics could be shared with this
+ document with just a few specific notes, thus cross references are
+ provided which will lead you to the more extensive information
+ contained in the GNU Coding Standards.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/pascal/gpcs.html
+Files: /usr/share/doc/gcc-@BV@-base/pascal/gpcs.html
+
+Format: info
+Index: /usr/share/info/gpcs-@BV@.info.gz
+Files: /usr/share/info/gpcs-@BV@*
--- gcc-4.1-4.1.2.orig/debian/g77-BV-doc.prerm
+++ gcc-4.1-4.1.2/debian/g77-BV-doc.prerm
@@ -0,0 +1,5 @@
+#! /bin/sh -e
+
+install-info --quiet --remove g77-@BV@
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/README.libstdc++-baseline.in
+++ gcc-4.1-4.1.2/debian/README.libstdc++-baseline.in
@@ -0,0 +1,2 @@
+The libstdc++ baseline file is a list of symbols exported by the
+libstdc++ library.
--- gcc-4.1-4.1.2.orig/debian/g77-BV-doc.doc-base
+++ gcc-4.1-4.1.2/debian/g77-BV-doc.doc-base
@@ -0,0 +1,14 @@
+Document: g77-@BV@
+Title: The GNU Fortran 77 Compiler 
+Author: Various
+Abstract: This manual documents how to run, install and port `g77', as well as
+ its new features and incompatibilities, and how to report bugs.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/fortran/g77.html
+Files: /usr/share/doc/gcc-@BV@-base/fortran/g77.html
+
+Format: info
+Index: /usr/share/info/g77-@BV@.info.gz
+Files: /usr/share/info/g77-@BV@*
--- gcc-4.1-4.1.2.orig/debian/rename-pkgs.sh
+++ gcc-4.1-4.1.2/debian/rename-pkgs.sh
@@ -0,0 +1,32 @@
+#! /bin/bash
+
+rename_pkg()
+{
+  src=$1
+  dest=$2
+  for ext in preinst postinst prerm postrm doc-base; do
+    if [ -f $src.$ext ]; then
+      if [ -f $dest.ext ]; then
+	echo already exists: $dest.$ext
+      else
+	echo "$src.$ext --> $dest.$ext"
+	svn rename $src.$ext $dest.$ext
+	#mv $src.$ext $dest.$ext
+      fi
+    fi
+  done
+}
+
+v_new=3.4
+v_old=3.3
+
+for p in chill cpp gcc g++ g77 gpc gij gcj gobjc protoize treelang; do
+  rename_pkg $p-$v_old $p-$v_new
+done
+
+for p in cpp gcc g77 gnat; do
+  rename_pkg $p-$v_old-doc $p-$v_new-doc
+done
+
+rename_pkg gcc-$v_old-base gcc-$v_new-base
+rename_pkg gcc-$v_old-sparc64 gcc-$v_new-sparc64
--- gcc-4.1-4.1.2.orig/debian/libgcj-common.postinst
+++ gcc-4.1-4.1.2/debian/libgcj-common.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libgcj-common
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcj-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/TODO
+++ gcc-4.1-4.1.2/debian/TODO
@@ -0,0 +1,26 @@
+- gfortran man page generation
+
+- Clean up the sprawl of debian/rules.  I'm sure there are neater
+  ways to do some of it; perhaps split it up into some more files?
+  Partly done.
+
+- Build the shared Ada libraries. Be sure, that you they can be used at all...
+  Architecture specific!
+
+- Link the Ada tools with the shared Ada library.
+
+- The following bugs are still open; please step forward and have a look
+  at http://bugs.debian.org/debian-gcc@lists.debian.org
+  Never finished.
+
+[Arthur Loiret] D
+
+- Add support for gcc-4.2 and 4.3 to gdc (not yet supported upstream).
+
+- Make libphobos a shared lib.
+
+- Finish libphobos ports.
+
+Help needed for the following reports:
+
+[Needs to be updated]
--- gcc-4.1-4.1.2.orig/debian/gij-hppa
+++ gcc-4.1-4.1.2/debian/gij-hppa
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+prctl=
+
+case "$(prctl --unaligned=)" in *signal)
+    echo >&2 "$(basename $0): ignore unaligned memory accesses"
+    prctl="prctl --unaligned=default"
+esac
+
+exec $prctl /usr/bin/gij-4.1.bin "$@"
--- gcc-4.1-4.1.2.orig/debian/gcjwebplugin-BV.prerm
+++ gcc-4.1-4.1.2/debian/gcjwebplugin-BV.prerm
@@ -0,0 +1,12 @@
+#!/bin/sh -e
+
+browser_dirs="@browser_dirs@"
+PLUGINPTH=/usr/lib/gcj-@BV@/libgcjwebplugin.so
+
+for browser in $browser_dirs; do
+    update-alternatives --quiet --remove \
+	$browser-javaplugin.so \
+	$PLUGINPTH
+done
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/multiarch.inc
+++ gcc-4.1-4.1.2/debian/multiarch.inc
@@ -0,0 +1,40 @@
+
+#if defined(__i486_linux_gnu__)
+  { "64",  "x86_64-linux-gnu"},
+#endif
+
+#if defined(__powerpc64_linux_gnu__)
+  { "32",  "powerpc-linux-gnu"},
+#endif
+
+#if defined(__x86_64_linux_gnu__)
+  { "32",  "i486-linux-gnu"},
+#endif
+
+#if defined(__powerpc_linux_gnu__)
+  { "64",  "powerpc64-linux-gnu"},
+#endif
+
+#if defined(__sparc_linux_gnu__)
+  { "64",  "sparc64-linux-gnu"},
+#endif
+
+#if defined(__s390_linux_gnu__)
+  { "64",  "s390x-linux-gnu"},
+#endif
+
+#if defined(__mips_linux_gnu__)
+  { "n32",  "mips64-linux-gnuabin32"},
+  { "64",  "mips64-linux-gnuabi64"},
+#endif
+
+#if defined(__mipsel_linux_gnu__)
+  { "n32",  "mips64el-linux-gnuabin32"},
+  { "64",  "mips64el-linux-gnuabi64"},
+#endif
+
+#if defined(__x86_64_kfreebsd_gnu__)
+  { "32",  "i486-kfreebsd-gnu"},
+#endif
+
+
--- gcc-4.1-4.1.2.orig/debian/libstdc++CXX.postinst
+++ gcc-4.1-4.1.2/debian/libstdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libstdc++@CXX@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-doc.doc-base.gccint
+++ gcc-4.1-4.1.2/debian/gcc-BV-doc.doc-base.gccint
@@ -0,0 +1,17 @@
+Document: gccint-@BV@
+Title: Internals of the GNU C and C++ compiler
+Author: Various
+Abstract: This manual documents the internals of the GNU compilers,
+ including how to port them to new targets and some information about
+ how to write front ends for new languages.  It corresponds to GCC
+ version @BV@.x.  The use of the GNU compilers is documented in a
+ separate manual.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/gccint.html
+Files: /usr/share/doc/gcc-@BV@-base/gccint.html
+
+Format: info
+Index: /usr/share/info/gccint-@BV@.info.gz
+Files: /usr/share/info/gccint-@BV@*
--- gcc-4.1-4.1.2.orig/debian/gfortran-BV-doc.prerm
+++ gcc-4.1-4.1.2/debian/gfortran-BV-doc.prerm
@@ -0,0 +1,5 @@
+#! /bin/sh -e
+
+install-info --quiet --remove gfortran-@BV@
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gpc-2.1-4.1-doc.doc-base.gpcs
+++ gcc-4.1-4.1.2/debian/gpc-2.1-4.1-doc.doc-base.gpcs
@@ -0,0 +1,23 @@
+Document: gpcs-2.1-4.1-doc
+Title: The GNU Pascal Coding Standards
+Author: Various
+Abstract: The GNU Pascal Coding Standards were designed by a group of
+ GNU Pascal project volunteers. The aim of this document is extending
+ the GNU Coding Standards with specific information relating Pascal
+ programming.  As a matter of fact, the information contained in the
+ GNU Coding Standards mainly pertains to programs written in the C
+ language. On the other hand, they also explain many of the rules and
+ principles that are useful for writing portable, robust and reliable
+ programs. Most of those general topics could be shared with this
+ document with just a few specific notes, thus cross references are
+ provided which will lead you to the more extensive information
+ contained in the GNU Coding Standards.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-4.1-base/pascal/gpcs.html
+Files: /usr/share/doc/gcc-4.1-base/pascal/gpcs.html
+
+Format: info
+Index: /usr/share/info/gpcs-2.1-4.1.info.gz
+Files: /usr/share/info/gpcs-2.1-4.1*
--- gcc-4.1-4.1.2.orig/debian/README
+++ gcc-4.1-4.1.2/debian/README
@@ -0,0 +1,33 @@
+		The Debian GNU Compiler Collection setup
+		========================================
+
+Please see the README.Debian in /usr/share/doc/gcc, contained in the
+gcc package for a description of the setup of the different compiler
+versions.
+
+For general discussion about the Debian toolchain (GCC, glibc, binutils)
+please use the mailing list debian-toolchain@lists.debian.org; for GCC
+specific things, please use debian-gcc@lists.debian.org.  When in doubt
+use the debian-toolchain ML.
+
+
+Maintainers of these packages
+-----------------------------
+
+Matthias Klose <doko@debian.org>
+Ray Dassen <jdassen@debian.org>
+Jeff Bailey <jbailey@nisa.net>			(hurd-i386)
+Joel Baker <fenton@debian.org>			(netbsd-i386)
+Philip Blundell <pb@debian.org>			(arm-linux)
+Ben Collins <bcollins@debian.org>		(sparc-linux)
+Randolph Chung <tausq@debian.org>		(ia64-linux)
+Falk Hueffner <falk@debian.org>			(alpha-linux)
+Dan Jacobowitz <dan@debian.org>			(powerpc-linux)
+Thiemo Seufer <ths@networkno.de>		(mips*-linux)
+Matt Taggart <taggart@carmen.fc.hp.com>		(hppa-linux)
+Gerhard Tonn <GerhardTonn@swol.de>		(s390-linux)
+Roman Zippel <zippel@linux-m68k.org>		(m68k-linux)
+Ludovic Brenta <ludovic@ludovic-brenta.org>	(gnat)
+Arthur Loiret <arthur.loiret@gmail.com>		(gdc)
+
+===============================================================================
--- gcc-4.1-4.1.2.orig/debian/relink
+++ gcc-4.1-4.1.2/debian/relink
@@ -0,0 +1,74 @@
+#! /bin/sh
+#
+# Relink GNAT utilities using the shared library
+#
+
+set -e
+
+pwd=`pwd`
+
+# why?
+chmod a-w build/gcc/ada/rts/*.ali
+
+rm -rf tmp
+ln -s $pwd/build/gcc/ada/rts/libgnat.so.1 tmp/libgnat.so
+
+LD_LIBRARY_PATH=$pwd/tmp
+export LD_LIBRARY_PATH
+
+PATH=$pwd/debian:$pwd/tmp:$PATH
+export PATH
+
+echo "#! /bin/sh" > tmp/dgcc
+echo "$pwd/build/gcc/xgcc -B$pwd/build/gcc/ "'"$@"' >> tmp/dgcc
+chmod 755 tmp/dgcc
+
+echo "#! /bin/sh" > tmp/dgnatlink
+echo "$pwd/build/gcc/gnatlink --GCC=dgcc "'"$@"' >> tmp/dgnatlink
+chmod 755 tmp/dgnatlink
+
+GMCMD="$pwd/build/gcc/gnatmake -I- -Irts -I. -a -m --GNATBIND=$pwd/build/gcc/gnatbind --GNATLINK=dgnatlink --GCC=dgcc"
+
+#cd $pwd/build/gcc/ada
+#make CFLAGS="-O2" CC="../xgcc -B../" STAGE_PREFIX=../ a-link.o a-gmem.o
+#cd $pwd
+
+[ -f build/gcc/gnatmake.old ] || cp -p build/gcc/gnatmake build/gcc/gnatmake.old
+[ -f build/gcc/gnatlink.old ] || cp -p build/gcc/gnatlink build/gcc/gnatlink.old
+
+make -C build/gcc/ada \
+	CFLAGS='-gnatp -gnata -O2 ' \
+	ADA_INCLUDES="-I." \
+	CC="../xgcc -B../" \
+	STAGE_PREFIX=../ \
+    ../gnatmake ../gnatlink
+
+mv gnatmake bgnatmake
+mv gnatlink bgnatlink
+exit 0
+
+cd build/gcc/ada
+for i in ../gnatchop ../gnatcmd \
+    ../gnatkr ../gnatlbr \
+    ../gnatls ../gnatmake \
+    ../gnatprep ../gnatpsys \
+    ../gnatxref ../gnatfind
+do
+  rm -f $i
+  $GMCMD -O2 -gnatp -o $i `basename $i`.adb -largs -L..
+done
+
+rm -f ../gnatmem
+$GMCMD -O2 -gnatp -o ../gnatmem gnatmem.adb -largs -L.. a-gmem.o
+$GMCMD -O2 -gnatp -o ../gnatlink gnatlink -largs -L.. a-link.o
+rm -f ../gnatpsta
+
+make CFLAGS="-O2" CC="../xgcc -B../" a-gettty.o a-deftar.o
+$GMCMD -O2 -gnatp -o ../gnatpsta gnatpsta -largs -L.. a-gettty.o a-deftar.o
+rm -f ../gnatbl
+
+make CFLAGS="-O2" CC="../xgcc -B../" gnatbl.o
+../xgcc -B../ -o ../gnatbl gnatbl.o -L.. -lgnat
+rm -f ../bgnatmake ../bgnatlink ../debian/dgcc ../debian/dgnatlink
+
+chmod +w rts/*.ali
--- gcc-4.1-4.1.2.orig/debian/gnat-BV-doc.doc-base.style
+++ gcc-4.1-4.1.2/debian/gnat-BV-doc.doc-base.style
@@ -0,0 +1,16 @@
+Document: gnat-style-@BV@
+Title: GNAT Coding Style
+Author: Various
+Abstract: Most of GNAT is written in Ada using a consistent style to
+ ensure readability of the code.  This document has been written to
+ help maintain this consistent style, while having a large group of
+ developers work on the compiler.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/Ada/gnat-style.html
+Files: /usr/share/doc/gcc-@BV@-base/Ada/gnat-style.html
+
+Format: info
+Index: /usr/share/info/gnat-style-@BV@.info.gz
+Files: /usr/share/info/gnat-style-@BV@*
--- gcc-4.1-4.1.2.orig/debian/protoize.1
+++ gcc-4.1-4.1.2/debian/protoize.1
@@ -0,0 +1,42 @@
+.TH PROTOIZE 1
+.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection
+.\" other parms are allowed: see man(7), man(1)
+.SH NAME
+protoize, unprotoize \- create/remove ANSI prototypes from C code
+.SH SYNOPSIS
+.B protoize
+.I "[options] files ...." 
+.br
+.B unprotoize
+.I "[options] files ...." 
+.SH "DESCRIPTION"
+This manual page documents briefly the
+.BR protoize ,
+and
+.B unprotoize
+commands.
+This manual page was written for the Debian GNU/Linux distribution
+(but may be used by others), because the original program does not
+have a manual page.
+Instead, it has documentation in the GNU Info format; see below.
+.PP
+.B protoize
+is an optional part of GNU C.  You can use it to add prototypes to a
+program, thus converting the program to ANSI C in one respect.  The companion
+program `unprotoize' does the reverse: it removes argument types from
+any prototypes that are found.
+.PP
+When you run these programs, you must specify a set of source files
+as command line arguments.
+.SH OPTIONS
+These programs are non-trivial to operate, and it is neither possible nor
+desirable to properly summarize options in this man page.  Read the info
+documentation for more information.
+.SH "SEE ALSO"
+The programs are documented fully by
+.IR "Gcc: The use and the internals of the GNU compiler",
+available via the Info system.  The documentation for protoize/unprotoize
+can be found in the subsection "Invoking GCC", under "Running Protoize."
+.SH AUTHOR
+This manual page was written by Galen Hazelwood,
+for the Debian GNU/Linux system.
--- gcc-4.1-4.1.2.orig/debian/rules
+++ gcc-4.1-4.1.2/debian/rules
@@ -0,0 +1,83 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+# Build rules for gcc (>= 2.95) and gcc-snapshot
+# Targets found in this makefile:
+#	- unpack tarballs
+#	- patch sources
+#	- (re)create the control file
+#	- create a debian/rules.parameters file, which is included
+#	  by debian/rules2
+# All other targets are passed to the debian/rules2 file
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES
+
+default: build
+
+include debian/rules.defs
+include debian/rules.unpack
+include debian/rules.patch
+
+control: $(control_dependencies)
+	-mkdir -p $(stampdir)
+	$(MAKE) -f debian/rules.conf $@
+
+configure: $(configure_dependencies)
+$(configure_stamp): control $(unpack_stamp) $(patch_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(configure_dummy_stamp): control
+	$(MAKE) -f debian/rules2 $@
+$(configure_hppa64_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+build: $(build_dependencies)
+$(build_stamp): $(unpack_stamp) $(patch_stamp) $(configure_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_dummy_stamp): $(configure_dummy_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_hppa64_stamp): $(configure_hppa64_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+check: $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+clean:
+	rm -rf $(stampdir)
+# remove temporary dirs used for unpacking
+	rm -rf $(gcc_srcdir) $(gpc_srcdir) p $(gdc_srcdir) d
+	-$(MAKE) -f debian/rules2 $@
+	rm -rf $(srcdir) $(builddir)* debian/tmp* html
+	rm -f bootstrap-* first-move-stamp
+	rm -f debian/*.tmp
+	rm -f debian/soname-cache
+	find debian -name '.#*' | xargs -r rm -f
+	find debian/patches -name '*.dpatch' -type f ! -perm 644 | xargs -r chmod 644
+	dh_clean
+
+install: $(install_dependencies)
+$(install_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_dummy_stamp): $(build_dummy_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_hppa64_stamp): $(build_hppa64_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+html-docs doxygen-docs update-doxygen-docs update-ada-files xxx:
+	$(MAKE) -f debian/rules2 $@
+
+binary-indep binary-arch binary: install
+	$(MAKE) -f debian/rules2 $@
+
+source diff:
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+release:
+	foo=$(shell basename $(CURDIR)); \
+		if [ "$$foo" != "gcc-3.4" ]; then \
+			find -name CVS -o -name .cvsignore -o -name '.#*' | \
+				xargs rm -rf; \
+		fi
+
+.PHONY: build clean binary-indep binary-arch binary release
--- gcc-4.1-4.1.2.orig/debian/fastjar.postinst
+++ gcc-4.1-4.1.2/debian/fastjar.postinst
@@ -0,0 +1,14 @@
+#! /bin/sh -e
+
+if [ -f /usr/share/info/fastjar.info.gz ]; then
+  install-info --quiet --section "Development" "Development" \
+	/usr/share/info/fastjar.info.gz
+else
+  # GFDL invariant free
+  true
+fi
+
+update-alternatives --quiet --install /usr/bin/jar jar /usr/bin/fastjar 40 \
+  --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/share/man/man1/fastjar.1.gz
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-base.postinst
+++ gcc-4.1-4.1.2/debian/gcc-BV-base.postinst
@@ -0,0 +1,15 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	# see #355439, packaging error in 4.0.2-9*
+	docdir=/usr/share/doc/gcc-@BV@-base
+	if [ ! -f $docdir/copyright ]; then
+	    ln $docdir/.copyright $docdir/copyright
+	fi
+	if [ ! -f $docdir/changelog.Debian.gz ]; then
+	    ln $docdir/.changelog.Debian.gz $docdir/changelog.Debian.gz
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcj-wrapper-BV.1
+++ gcc-4.1-4.1.2/debian/gcj-wrapper-BV.1
@@ -0,0 +1,20 @@
+.TH GCJ-WRAPPER 1 "June 6, 2002" gcj-wrapper "Java User's Manual"
+.SH NAME
+gcj-wrapper \- a wrapper around gcj
+
+.SH SYNOPSIS
+gcj-wrapper [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgcj-wrapper\fR is a wrapper around gcj(1) to be called as the java
+compiler. Options different for javac(1) and gcj(1) are translated,
+options unknown to gcj(1) are silently ignored.
+
+.SH OPTIONS
+See gcj-@BV@(1) for a list of options that gcj understands.
+
+.SH "SEE ALSO"
+.BR gcj-@BV@(1)
+,
+.BR javac(1)
--- gcc-4.1-4.1.2.orig/debian/gij-wrapper-BV
+++ gcc-4.1-4.1.2/debian/gij-wrapper-BV
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java interpreter.
+#
+# Command-line arguments should be in the style of Sun's Java runtime;
+# these will be converted to gij arguments before being passed to the
+# gij itself.
+#
+# The Debian JNI module directory and any other specified JNI
+# directories will be included on the JNI search path.
+#
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gij-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java runtime:
+my $javaRuntime = '/usr/bin/gij-@BV@';
+
+# The debian JNI module directory:
+my $debianJNIDir = '/usr/lib/jni';
+
+# The command-line arguments to pass to the real Java runtime:
+my @commandLine;
+
+# The full JNI search path to use:
+my $JNIPath = '';
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+
+# Flag used to copy argument to -classpath or -cp.
+my $copyNext = 0;
+foreach my $arg (@ARGV) {
+  if (not $parsingOptions) {
+    # We're done parsing options; just copy all remaining arguments directly.
+    push @commandLine, $arg;
+    next;
+  }
+  if ($copyNext) {
+    push @commandLine, $arg;
+    $copyNext = 0;
+    next;
+  }
+
+  # Try to interpret Sun-style options.
+  if ($arg eq '-version') {
+    push @commandLine, '--version';
+  } elsif ($arg eq '-h' or $arg eq '-help') {
+    push @commandLine, '--help';
+  } elsif ($arg eq '-cp' or $arg eq '--cp') {
+    push @commandLine, '-cp';
+    $copyNext = 1;
+  } elsif ($arg eq '-classpath' or $arg eq '--classpath') {
+    push @commandLine, '-classpath';
+    $copyNext = 1;
+  } elsif ($arg =~ /^-Djava.library.path=(.+)$/) {
+    # A component of the JNI search path has been given.
+    if ($JNIPath) {
+      $JNIPath = $JNIPath . ':' . $1;
+    } else {
+      $JNIPath = $1;
+    }
+  } elsif ($arg eq '-jar' or $arg =~ /^-D/) {
+    # Copy the argument directly.
+    push @commandLine, $arg;
+  } elsif ($arg =~ /^-/) {
+    # An unrecognised option has been passed - just drop it.
+  } else {
+    # Some non-option argument has been given.
+    # Stop parsing options at this point.
+    push @commandLine, $arg;
+    $parsingOptions = 0;
+  }
+}
+
+# Add the debian JNI module directory to the JNI search path if it's not
+# already there.
+if ($JNIPath !~ /(^|:)$debianJNIDir($|:)/) {
+  if ($JNIPath) {
+    $JNIPath = $JNIPath . ':' . $debianJNIDir;
+  } else {
+    $JNIPath = $debianJNIDir;
+  }
+}
+
+# Use environment variable $LTDL_LIBRARY_PATH to store the JNI path,
+# since gij uses libltdl to dlopen JNI modules.
+if ($ENV{LTDL_LIBRARY_PATH}) {
+    $ENV{LTDL_LIBRARY_PATH} = $ENV{LTDL_LIBRARY_PATH} . ':' . $JNIPath;
+} else {
+    $ENV{LTDL_LIBRARY_PATH} = $JNIPath;
+}
+
+# Call the real Java runtime.
+my @fullCommandLine = ( $javaRuntime );
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
--- gcc-4.1-4.1.2.orig/debian/gcj-BV.overrides
+++ gcc-4.1-4.1.2/debian/gcj-BV.overrides
@@ -0,0 +1 @@
+gcj-@BV@: wrong-name-for-upstream-changelog
--- gcc-4.1-4.1.2.orig/debian/dummy-man.1
+++ gcc-4.1-4.1.2/debian/dummy-man.1
@@ -0,0 +1,29 @@
+.TH @NAME@ 1 "May 24, 2003" @name@ "Debian Free Documentation"
+.SH NAME
+@name@ \- A program with a man page covered by the GFDL with invariant sections
+.SH SYNOPSIS
+@name@ [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fB@name@\fR is documented by a man page, which is covered by the "GNU
+Free Documentation License" (GFDL) containing invariant sections.
+.P
+In November 2002, version 1.2 of the GNU Free Documentation License (GNU
+FDL) was released by the Free Software Foundation after a long period
+of consultation. Unfortunately, some concerns raised by members of the
+Debian Project were not addressed, and as such the GNU FDL can apply
+to works that do not pass the Debian Free Software Guidelines (DFSG),
+and may thus only be included in the non-free component of the Debian
+archive, not the Debian distribution itself.
+
+.SH "SEE ALSO"
+.BR http://gcc.gnu.org/onlinedocs/
+for the complete documentation,
+.BR http://lists.debian.org/debian-legal/2003/debian-legal-200304/msg00307.html
+for a proposed statement of Debian with respect to the GFDL,
+.BR gfdl(7)
+
+.SH AUTHOR
+This manual page was written by the Debian GCC maintainers,
+for the Debian GNU/Linux system.
--- gcc-4.1-4.1.2.orig/debian/README.C++
+++ gcc-4.1-4.1.2/debian/README.C++
@@ -0,0 +1,43 @@
+libstdc++ is an implementation of the Standard C++ Library, including the
+Standard Template Library (i.e. as specified by ANSI and ISO).
+
+Some notes on porting applications from libstdc++-2.90 (or earlier versions)    
+to libstdc++-v3 can be found in the libstdc++6-4.1-doc package. After the       
+installation of the package, look at:
+
+  file:///usr/share/doc/gcc-4.1-base/libstdc++/html/17_intro/porting-howto.html
+
+On Debian GNU/Linux you find additional documentation in the
+libstdc++6-4.1-doc package. After installing these packages,
+point your browser to
+
+  file:///usr/share/doc/libstdc++6-4.1-doc/libstdc++/html/index.html
+
+Other documentation can be found:
+
+    http://www.cs.rpi.edu/~musser/stl.html
+    http://www.sgi.com/tech/stl/
+    http://www.dinkumware.com/htm_cpl/
+
+with a good, recent, book on C++.
+
+A great deal of useful C++ documentation can be found in the C++ FAQ-Lite,
+maintained by Marshall Cline <cline@parashift.com>.  It can be found at the
+following locations (this list was last updated on 2000/11/19):
+
+USA: http://www.cerfnet.com/~mpcline/c++-faq-lite/
+
+Canada: http://new-brunswick.net/workshop/c++/faq
+
+Finland: http://www.utu.fi/~sisasa/oasis/cppfaq/
+
+France: http://caor.ensmp.fr/FAQ/c++-faq-lite/
+
+Spain: http://geneura.ugr.es/~jmerelo/c++-faq/
+
+Taiwan: http://www.cis.nctu.edu.tw/c++/C++FAQ-English/
+
+U.K.: http://www.cs.bham.ac.uk/~jdm/CPP/index.html
+
+
+Please send updates to this list as bug report for the g++ package.
--- gcc-4.1-4.1.2.orig/debian/gcc.texi
+++ gcc-4.1-4.1.2/debian/gcc.texi
@@ -0,0 +1,52 @@
+\input texinfo  @c -*-texinfo-*-
+@c %**start of header
+@setfilename gcc.info
+
+@settitle Using the GNU Compiler Collection (GCC)
+
+@c Create a separate index for command line options.
+@defcodeindex op
+@c Merge the standard indexes into a single one.
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex tp cp
+
+@paragraphindent 1
+
+@c %**end of header
+
+@copying
+The current documentation is licensed under the same terms as the Debian packaging.
+@end copying
+@ifnottex
+@dircategory Programming
+@direntry
+* gcc: (gcc).                  The GNU Compiler Collection.
+@end direntry
+This file documents the use of the GNU compilers.
+@sp 1
+@insertcopying
+@sp 1
+@end ifnottex
+
+@sp 1
+@insertcopying
+@summarycontents
+@contents
+@page
+
+@node Top
+@top Introduction
+@cindex introduction
+The official GNU compilers' documentation is released under the terms
+of the GNU Free Documentation License with cover texts. This has been
+considered non free by the Debian Project. Thus you will find it in the
+non-free section of the Debian archive.
+@menu
+* Copying::
+@end menu
+@include include/gpl.texi
+@printindex cp
+@bye
--- gcc-4.1-4.1.2.orig/debian/libgcj-doc.doc-base
+++ gcc-4.1-4.1.2/debian/libgcj-doc.doc-base
@@ -0,0 +1,10 @@
+Document: libgcj-doc
+Title: The GNU LibGCJ Classpath library
+Author: Various
+Abstract: Autogenerated documentation describing the libgcj
+ library (GCC 4.1), based on the classpath library.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcj-4.1-base/html/index.html
+Files: /usr/share/doc/gcj-4.1-base/html/*.html
--- gcc-4.1-4.1.2.orig/debian/gcjwebplugin-BV.postinst
+++ gcc-4.1-4.1.2/debian/gcjwebplugin-BV.postinst
@@ -0,0 +1,19 @@
+#!/bin/sh -e
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+priority=$(echo @BV@ | sed 's/\.//g')
+browser_dirs="@browser_dirs@"
+PLUGINPTH=/usr/lib/gcj-@BV@/libgcjwebplugin.so
+
+for browser in $browser_dirs; do
+    update-alternatives --quiet --install \
+	/usr/lib/$browser/plugins/libjavaplugin.so \
+	$browser-javaplugin.so \
+	$PLUGINPTH \
+	$priority
+done
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/lib32gccLC.preinst
+++ gcc-4.1-4.1.2/debian/lib32gccLC.preinst
@@ -0,0 +1,8 @@
+#! /bin/sh -e
+
+if [ ! -h /usr/lib32 -a -d /usr/lib32 -a -d /emul/ia32-linux/usr/lib ]; then
+  rm -rf /usr/lib32
+  ln -s /emul/ia32-linux/usr/lib /usr/lib32
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcjh-wrapper-BV.1
+++ gcc-4.1-4.1.2/debian/gcjh-wrapper-BV.1
@@ -0,0 +1,20 @@
+.TH GCJH-WRAPPER 1 "June 6, 2002" gcjh-wrapper "Java User's Manual"
+.SH NAME
+gcjh-wrapper \- a wrapper around gcjh
+
+.SH SYNOPSIS
+gcjh-wrapper [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgcjh-wrapper\fR is a wrapper around gcjh(1) to be called as the java header
+compiler. Options different for javah(1) and gcjh(1) are translated,
+options unknown to gcjh(1) are silently ignored.
+
+.SH OPTIONS
+See gcjh-@BV@(1) for a list of options that gcj understands.
+
+.SH "SEE ALSO"
+.BR gcjh-@BV@(1)
+,
+.BR javah(1)
--- gcc-4.1-4.1.2.orig/debian/rules.source
+++ gcc-4.1-4.1.2/debian/rules.source
@@ -0,0 +1,21 @@
+SOURCE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+patchdir = $(SOURCE_DIR)/patches
+
+include $(SOURCE_DIR)/debian/rules.defs
+include $(SOURCE_DIR)/debian/rules.patch
+include $(SOURCE_DIR)/debian/rules.unpack
+
+patch-source: $(patch_stamp)
+	( \
+	  echo '#define __$(subst -,_,$(DEB_TARGET_GNU_TYPE))__'; \
+	  echo ''; \
+	  echo '  { "",  "$(DEB_TARGET_GNU_TYPE)"},'; \
+	  cat $(SOURCE_DIR)/debian/multiarch.inc; \
+	) > $(srcdir)/gcc/multiarch.inc
+
+clean-source:
+	rm -rf $(stampdir)
+	rm -rf $(gcc_srcdir) $(gpc_srcdir) p $(gdc_srcdir) d
+	rm -rf bin
+	rm -rf $(srcdir)
+
--- gcc-4.1-4.1.2.orig/debian/README.Bugs
+++ gcc-4.1-4.1.2/debian/README.Bugs
@@ -0,0 +1,304 @@
+Reporting Bugs in the Debian/GNU GNU Compiler Setup
+===================================================
+
+Before reporting a bug, please
+------------------------------
+
+- Check that the behaviour really is a bug. Have a look into some
+  ANSI standards document.
+
+- Check the list of well known bugs: http://gcc.gnu.org/bugs.html#known
+
+- Try to reproduce the bug with a current GCC development snapshot. For
+  Debian GNU/Linux you can get a recent development snapshot from the
+  gcc-snapshot package in the unstable distribution.
+  See: http://packages.debian.org/gcc-snapshot
+
+- Try to find out if the bug is a regression (an older GCC version does
+  not show the bug).
+
+- Check if the bug is already reported in the bug tracking systems.
+
+    Debian:   http://bugs.debian.org/debian-gcc@lists.debian.org
+    Upstream: http://gcc.gnu.org/bugzilla/
+
+
+Where to report a bug
+---------------------
+
+Report bugs found in the packaging of GCC to the Debian bug tracking system.
+See http://www.debian.org/Bugs/ for instructions (or use the reportbug
+script).
+
+Debian's current policy is to closely follow the upstream development and
+only apply a minimal set of patches (which are summarized in the README.Debian
+document).
+
+If you think you have found an upstream bug, you did check the section
+above ("Before reporting a bug") and are able to provide a complete bug
+report (see below "How to report a bug"), then you may help the Debian
+GCC package maintainers, if you report the bug upstream and then submit
+a bug report to the Debian BTS and tell us the upstream report number.
+This way you are able to follow the upstream bug handling as well. If in
+doubt, report the bug to the Debian BTS (but read "How to report a bug"
+below.
+
+
+How to report a bug
+-------------------
+
+There are complete instructions in the gcc info manual (found in the
+gcc-doc package), section Bugs.
+
+The manual can be read using `M-x info' in Emacs, or if the GNU info
+program is installed on your system by `info --node "(gcc)Bugs"'. Or see
+the file BUGS included with the gcc source code.
+
+Online bug reporting instructions can be found at
+
+	http://gcc.gnu.org/bugs.html
+
+[Some paragraphs taken from the above URL]
+
+The main purpose of a bug report is to enable us to fix the bug. The
+most important prerequisite for this is that the report must be
+complete and self-contained, which we explain in detail below.
+
+Before you report a bug, please check the list of well-known bugs and,
+if possible in any way, try a current development snapshot.
+
+Summarized bug reporting instructions
+-------------------------------------
+
+What we need
+
+Please include in your bug report all of the following items, the
+first three of which can be obtained from the output of gcc -v:
+
+    * the exact version of GCC;
+    * the system type;
+    * the options given when GCC was configured/built;
+    * the complete command line that triggers the bug;
+    * the compiler output (error messages, warnings, etc.); and
+    * the preprocessed file (*.i*) that triggers the bug, generated by
+      adding -save-temps to the complete compilation command, or, in
+      the case of a bug report for the GNAT front end, a complete set
+      of source files (see below).
+
+What we do not want
+
+    * A source file that #includes header files that are left out
+      of the bug report (see above)
+    * That source file and a collection of header files.
+    * An attached archive (tar, zip, shar, whatever) containing all
+      (or some :-) of the above.
+    * A code snippet that won't cause the compiler to produce the
+      exact output mentioned in the bug report (e.g., a snippet with
+      just a few lines around the one that apparently triggers the
+      bug, with some pieces replaced with ellipses or comments for
+      extra obfuscation :-)
+    * The location (URL) of the package that failed to build (we won't
+      download it, anyway, since you've already given us what we need
+      to duplicate the bug, haven't you? :-)
+    * An error that occurs only some of the times a certain file is
+      compiled, such that retrying a sufficient number of times
+      results in a successful compilation; this is a symptom of a
+      hardware problem, not of a compiler bug (sorry)
+    * E-mail messages that complement previous, incomplete bug
+      reports. Post a new, self-contained, full bug report instead, if
+      possible as a follow-up to the original bug report
+    * Assembly files (*.s) produced by the compiler, or any binary files,
+      such as object files, executables, core files, or precompiled
+      header files
+    * Duplicate bug reports, or reports of bugs already fixed in the
+      development tree, especially those that have already been
+      reported as fixed last week :-)
+    * Bugs in the assembler, the linker or the C library. These are
+      separate projects, with separate mailing lists and different bug
+      reporting procedures
+    * Bugs in releases or snapshots of GCC not issued by the GNU
+      Project. Report them to whoever provided you with the release
+    * Questions about the correctness or the expected behavior of
+      certain constructs that are not GCC extensions. Ask them in
+      forums dedicated to the discussion of the programming language
+
+
+Known Bugs and Non-Bugs
+-----------------------
+
+[Please see /usr/share/doc/gcc/FAQ or http://gcc.gnu.org/faq.html first]
+
+
+C++ exceptions don't work with C libraries
+------------------------------------------
+
+[Taken from the closed bug report #22769] C++ exceptions don't work
+with C libraries, if the C code wasn't designed to be thrown through.
+A solution could be to translate all C libraries with -fexceptions.
+Mostly trying to throw an exception in a callback function (qsort,
+Tcl command callbacks, etc ...). Example:
+
+    #include <stdio.h>
+    #include <tcl.h>
+
+    class A {};
+
+    static
+    int SortCondition(void const*, void const*)
+    {
+        printf("throwing 'sortcondition' exception\n");
+        throw A();
+    }
+
+    int main(int argc, char *argv[])
+    {
+        int list[2];
+
+        try {
+            SortCondition(NULL,NULL);
+        } catch (A) {
+            printf("caught test-sortcondition exception\n");
+        }
+        try {
+            qsort(&list, sizeof(list)/sizeof(list[0]),sizeof(list[0]),
+                 &SortCondition);
+        } catch (A) {
+            printf("caught real-sortcondition exception\n");
+        }
+        return 0;
+}
+
+Andrew Macleod <amacleod@cygnus.com> responded:
+
+When compiled with the table driven exception handling, exception can only
+be thrown through functions which have been compiled with the table driven EH.
+If a function isn't compiled that way, then we do not have the frame
+unwinding information required to restore the registers when unwinding.
+
+I believe the setjmp/longjmp mechanism will throw through things like this, 
+but its produces much messier code.  (-fsjlj-exceptions)
+
+The C compiler does support exceptions, you just have to turn them on
+with -fexceptions.
+
+Your main options are to:
+  a) Don't use callbacks, or at least don't throw through them.
+  b) Get the source and compile the library with -fexceptions (You have to
+     explicitly turn on exceptions in the C compiler)
+  c) always use -fsjlj-exceptions (boo, bad choice :-)
+
+
+g++: "undefined reference" to static const array in class
+---------------------------------------------------------
+
+The following code compiles under GNU C++ 2.7.2 with correct results,
+but produces the same linker error with GNU C++ 2.95.2.
+Alexandre Oliva <oliva@lsd.ic.unicamp.br> responded:
+
+All of them are correct.  A static data member *must* be defined
+outside the class body even if it is initialized within the class
+body, but no diagnostic is required if the definition is missing.  It
+turns out that some releases do emit references to the missing symbol,
+while others optimize it away.
+
+#include <iostream>
+
+class Test
+{
+  public:
+    Test(const char *q);
+  protected:
+    static const unsigned char  Jam_signature[4]   = "JAM";
+};
+
+Test::Test(const char *q)
+{
+  if (memcmp(q, Jam_signature, sizeof(Jam_signature)) != 0)
+  cerr << "Hello world!\n";
+}
+
+int main(void)
+{
+  Test::Test("JAM");
+  return 0;
+}
+
+g++: g++ causes passing non const ptr to ptr to a func with const arg
+     to cause an error (not a bug)
+---------------------------------------------------------------------
+
+Example:
+
+#include <stdio.h>
+void test(const char **b){
+        printf ("%s\n",*b);
+}
+int main(void){
+        char *test1="aoeu";
+        test(&test1);
+}
+
+make const
+g++     const.cc   -o const
+const.cc: In function `int main()':
+const.cc:7: passing `char **' as argument 1 of `test(const char **)' adds cv-quals without intervening `const'
+make: *** [const] Error 1
+
+Answer from "Martin v. Loewis" <martin@loewis.home.cs.tu-berlin.de>:
+
+> ok... maybe I missed something.. I haven't really kept up with the latest in
+> C++ news.  But I've never heard anything even remotly close to passing a non
+> const var into a const arg being an error before.
+
+Thanks for your bug report. This is a not a bug in the compiler, but
+in your code. The standard, in 4.4/4, puts it that way
+
+# A conversion can add cv-qualifiers at levels other than the first in
+# multi-level pointers, subject to the following rules:
+# Two pointer types T1 and T2 are similar if there exists a type T and
+# integer n > 0 such that:
+#   T1 is cv(1,0) pointer to cv(1,1) pointer to ... cv(1,n-1)
+#   pointer to cv(1,n) T
+# and
+#   T2 is cv(2,0) pointer to cv(2,1) pointer to ... cv(2,n-1)
+#   pointer to cv(2,n) T
+# where each cv(i,j) is const, volatile, const volatile, or
+# nothing. The n-tuple of cv-qualifiers after the first in a pointer
+# type, e.g., cv(1,1) , cv(1,2) , ... , cv(1,n) in the pointer type
+# T1, is called the cv-qualification signature of the pointer type. An
+# expression of type T1 can be converted to type T2 if and only if the
+# following conditions are satisfied:
+#  - the pointer types are similar.
+#  - for every j > 0, if const is in cv(1,j) then const is in cv(2,j) ,
+#    and similarly for volatile.
+#  - if the cv(1,j) and cv(2,j) are different, then const is in every
+#    cv(2,k) for 0 < k < j.
+
+It is the last rule that your code violates. The standard gives then
+the following example as a rationale:
+
+# [Note: if a program could assign a pointer of type T** to a pointer
+# of type const T** (that is, if line //1 below was allowed), a
+# program could inadvertently modify a const object (as it is done on
+# line //2). For example,
+# int main() { 
+#   const char c = 'c'; 
+#   char* pc; 
+#   const char** pcc = &pc; //1: not allowed 
+#   *pcc = &c; 
+#   *pc = 'C'; //2: modifies a const object 
+# }
+# - end note]
+
+If you question this line of reasoning, please discuss it in one of
+the public C++ fora first, eg. comp.lang.c++.moderated, or
+comp.std.c++.
+
+
+cpp removes blank lines
+-----------------------
+
+With the new cpp, you need to add -traditional to the "cpp -P" args, else 
+blank lines get removed.
+
+[EDIT ME: scan Debian bug reports and write some nice summaries ...]
--- gcc-4.1-4.1.2.orig/debian/gnat-BV-doc.doc-base.rm
+++ gcc-4.1-4.1.2/debian/gnat-BV-doc.doc-base.rm
@@ -0,0 +1,16 @@
+Document: gnat_rm-@BV@
+Title: GNAT (GNU Ada) Reference Manual
+Author: Various
+Abstract: This manual contains useful information in writing programs
+ using the GNAT compiler.  It includes information on implementation
+ dependent characteristics of GNAT, including all the information
+ required by Annex M of the standard.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/Ada/gnat_rm.html
+Files: /usr/share/doc/gcc-@BV@-base/Ada/gnat_rm.html
+
+Format: info
+Index: /usr/share/info/gnat_rm-@BV@.info.gz
+Files: /usr/share/info/gnat_rm-@BV@*
--- gcc-4.1-4.1.2.orig/debian/lib32stdc++CXX.postinst
+++ gcc-4.1-4.1.2/debian/lib32stdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib32stdc++@CXX@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/acats-killer.sh
+++ gcc-4.1-4.1.2/debian/acats-killer.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+
+# on ia64 systems, the acats hangs in unaligned memory accesses.
+# kill these testcases.
+
+pidfile=acats-killer.pid
+
+usage()
+{
+    echo >&2 "usage: `basename $0` [-p <pidfile>] <ada logfile> <next logfile>"
+    exit 1
+}
+
+while [ $# -gt 0 ]; do
+    case $1 in
+    -p)
+	pidfile=$2
+	shift
+	shift
+	;;
+    -*)
+	usage
+	;;
+    *)
+	break
+    esac
+done
+
+[ $# -eq 2 ] || usage
+
+logfile=$1
+stopfile=$2
+interval=30
+
+echo $$ > $pidfile
+
+while true; do
+    if [ -f "$stopfile" ]; then
+	echo "`basename $0`: finished."
+	rm -f $pidfile
+	exit 0
+    fi
+    sleep $interval
+    if [ ! -f "$logfile" ]; then
+	continue
+    fi
+    pids=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+    if [ -n "$pids" ]; then
+	sleep $interval
+        pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+	if [ "$pids" = "$pids2" ]; then
+	    #echo kill: $pids
+	    kill $pids
+	    sleep 1
+            pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+	    if [ "$pids" = "$pids2" ]; then
+	        #echo kill -9: $pids
+	        kill -9 $pids
+	    fi
+	fi
+    fi
+done
--- gcc-4.1-4.1.2.orig/debian/compat
+++ gcc-4.1-4.1.2/debian/compat
@@ -0,0 +1 @@
+4
--- gcc-4.1-4.1.2.orig/debian/cpp-BV-doc.doc-base.cpp
+++ gcc-4.1-4.1.2/debian/cpp-BV-doc.doc-base.cpp
@@ -0,0 +1,16 @@
+Document: cpp-@BV@
+Title: The GNU C preprocessor
+Author: Various
+Abstract: The C preprocessor is a "macro processor" that is used automatically
+ by the C compiler to transform your program before actual compilation.
+ It is called a macro processor because it allows you to define "macros",
+ which are brief abbreviations for longer constructs.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/cpp.html
+Files: /usr/share/doc/gcc-@BV@-base/cpp.html
+
+Format: info
+Index: /usr/share/info/cpp-@BV@.info.gz
+Files: /usr/share/info/cpp-@BV@*
--- gcc-4.1-4.1.2.orig/debian/cpp-BV-doc.prerm
+++ gcc-4.1-4.1.2/debian/cpp-BV-doc.prerm
@@ -0,0 +1,6 @@
+#! /bin/sh -e
+
+install-info --quiet --remove cpp-@BV@
+install-info --quiet --remove cppinternals-@BV@
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/NEWS.html
+++ gcc-4.1-4.1.2/debian/NEWS.html
@@ -0,0 +1,793 @@
+  <?xml version="1.0" encoding="ISO-8859-1"?>
+  <!DOCTYPE html
+            PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ 
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  
+  
+   <head>
+ 
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+    <link rev="made" href="mailto:gcc@gcc.gnu.org" />
+    <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
+    <link rel="stylesheet" type="text/css" href="/gnu.css" />
+    <link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
+  
+ <title>
+GCC 4.1 Release Series &mdash; Changes, New Features, and Fixes
+- GNU Project - Free Software Foundation (FSF)</title>
+   </head>
+ 
+
+<!-- GCC maintainers, please do not hesitate to update/contribute entries
+     concerning those part of GCC you maintain!  2002-03-23, Gerald.
+-->
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
+
+
+
+<h1 align="center">
+GCC 4.1 Release Series<br />Changes, New Features, and Fixes
+</h1>
+
+<p>The latest release in the 4.1 release series is
+<a href="#4.1.2">GCC 4.1.2</a>.</p>
+
+<h2>Caveats</h2>
+
+<h2>General Optimizer Improvements</h2>
+
+  <ul>
+
+    <li>GCC now has infrastructure for inter-procedural optimizations and
+	the following inter-procedural optimizations are implemented:<br />
+	<ul>
+	    <li>Profile guided inlining.  When doing profile feedback
+		guided optimization, GCC can now use the profile to make
+		better informed decisions on whether inlining of a function
+		is profitable or not.  This means that GCC will no longer
+		inline functions at call sites that are not executed very
+		often, and that functions at hot call sites are more likely
+		to be inlined.<br />
+		A new parameter <code>min-inline-recursive-probability</code>
+		is also now available to throttle recursive inlining
+		of functions with small average recursive depths.</li>
+	    <li>Discovery of <code>pure</code> and <code>const</code>
+		functions, a form of side-effects analysis.  While older GCC
+		releases could also discover such special functions, the new
+		IPA-based pass runs earlier so that the results are available
+		to more optimizers.  The pass is also simply more powerful
+		than the old one.</li>
+	    <li>Analysis of references to static variables and type escape
+		analysis, also forms of side-effects analysis.  The results
+		of these passes allow the compiler to be less conservative
+		about call-clobbered variables and references.  This results
+		in more redundant loads being eliminated and in making static
+		variables candidates for register promotion.</li>
+	    <li>Improvement of RTL-based alias analysis.  The results of type
+		escape analysis are fed to the RTL type-based alias analyzer,
+		allowing it to disambiguate more memory references.</li>
+	    <li>Interprocedural constant propagation and function versioning.
+		This pass looks for functions that are always called with the
+		same constant value for one or more of the function arguments,
+		and propagates those constants into those functions.</li>
+	    <li>GCC will now eliminate static variables whose usage was
+		optimized out.</li>
+	    <li><code>-fwhole-program --combine</code> can now be used to
+	        make all functions in program static allowing whole program
+		optimization.  As an exception, the <code>main</code> function
+		and all functions marked with the new
+		<code>externally_visible</code> attribute are kept global so
+		that programs can link with runtime libraries.</li>
+	</ul></li>
+
+    <li>GCC can now do a form of partial dead code elimination (PDCE) that
+	allows code motion of expressions to the paths where the result of
+	the expression is actually needed.  This is not always a win, so
+	the pass has been limited to only consider profitable cases.  Here
+	is an example:
+
+	<pre>
+    int foo (int *, int *);
+    int
+    bar (int d)
+    {
+      int a, b, c;
+      b = d + 1;
+      c = d + 2;
+      a = b + c;
+      if (d)
+        {
+          foo (&amp;b, &amp;c);
+          a = b + c;
+        }
+      printf ("%d\n", a);
+    }
+	</pre>
+
+	The <code>a = b + c</code> can be sunk to right before the
+	<code>printf</code>.  Normal code sinking will not do this, it will
+	sink the first one above into the else-branch of the conditional
+	jump, which still gives you two copies of the code.</li>
+
+    <li>GCC now has a value range propagation pass.  This allows the compiler
+	to eliminate bounds checks and branches.  The results of the pass
+	can also be used to accurately compute branch probabilities.</li>
+
+    <li>The pass to convert PHI nodes to straight-line code (a form of
+	if-conversion for GIMPLE) has been improved significantly.  The two
+	most significant improvements are an improved algorithm to determine
+	the order in which the PHI nodes are considered, and an improvement
+	that allow the pass to consider if-conversions of basic blocks with
+	more than two predecessors.</li>
+
+    <li>Alias analysis improvements.  GCC can now differentiate between
+	different fields of structures in Tree-SSA's virtual operands form.
+	This lets stores/loads from non-overlapping structure fields not
+	conflict.  A new algorithm to compute points-to sets was contributed
+	that can allows GCC to see now that <code>p-&gt;a</code> and
+	<code>p-&gt;b</code>, where <code>p</code> is a pointer to a
+	structure, can never point to the same field.</li>
+
+    <li>Various enhancements to auto-vectorization:<br />
+	<ul>
+	    <li>Incrementally preserve SSA form when vectorizing.</li>
+	    <li>Incrementally preserve loop-closed form when vectorizing.</li>
+	    <li>Improvements to peeling for alignment:
+                generate better code when the misalignment of an access
+                is known at compile time, or when different accesses are
+                known to have the same misalignment, even if the
+                misalignment amount itself is unknown.</li>
+	    <li>Consider dependence distance in the vectorizer.</li>
+	    <li>Externalize generic parts of data reference analysis to
+		make this analysis available to other passes.</li>
+	    <li>Vectorization of conditional code.</li>
+	    <li>Reduction support.</li>
+	</ul></li>
+
+    <li>GCC can now partition functions in sections of hot and cold code.
+	This can significantly improve performance due to better instruction
+	cache locality.  This feature works best together with profile
+	feedback driven optimization.</li>
+
+    <li>A new pass to avoid saving of unneeded arguments to the stack in
+	<code>vararg</code> functions if the compiler can prove that they
+	will not be needed.</li>
+
+    <li>Transition of basic block profiling to tree level implementation has
+        been completed.  The new implementation should be considerably more
+	reliable (hopefully avoiding profile mismatch errors when using
+	<code>-fprofile-use</code> or <code>-fbranch-probabilities</code>) and
+	can be used to drive higher level optimizations, such as inlining.
+	<p>
+	The <code>-ftree-based-profiling</code> command line option was
+	removed and <code>-fprofile-use</code> now implies disabling old RTL
+	level loop optimizer (<code>-fno-loop-optimize</code>).  Speculative
+	prefetching optimization (originally enabled by
+	<code>-fspeculative-prefetching</code>) was removed.</p></li>
+  </ul>
+
+ 
+<h2>New Languages and Language specific improvements</h2>
+
+<h3>C and Objective-C</h3>
+  <ul>
+    <li>The old Bison-based C and Objective-C parser has been replaced
+	by a new, faster hand-written recursive-descent parser.</li>
+  </ul>
+
+  <h3>Ada</h3>
+  <ul>
+    <li>The build infrastructure for the Ada runtime library and tools
+	has been changed to be better integrated with the rest of the build
+	infrastructure of GCC.  This should make doing cross builds of Ada a
+	bit easier.</li>
+  </ul>
+
+<h3 id="cplusplus">C++</h3>
+  <ul>
+    <li>ARM-style name-injection of friend declarations is no longer
+        the default.  For example:
+
+	<pre>
+          struct S {
+            friend void f();
+          };
+
+          void g() { f(); }</pre>
+
+        will not be accepted; instead a declaration of <code>f</code>
+        will need to be present outside of the scope of
+        <code>S</code>.  The new <code>-ffriend-injection</code>
+        option will enable the old behavior.</li>
+
+    <li>
+     The (undocumented) extension which permitted templates with
+     default arguments to be bound to template template parameters with
+     fewer parameters has been deprecated, and will be removed in the
+     next major release of G++.  For example:
+
+     <pre>
+       template &lt;template &lt;typename&gt; class C&gt;
+       void f(C&lt;double&gt;) {}
+
+       template &lt;typename T, typename U = int&gt;
+       struct S {};
+
+       template void f(S&lt;double&gt;);
+     </pre>      
+
+     makes use of the deprecated extension.  The reason this code is
+     not valid ISO C++ is that <code>S</code> is a template with two
+     parameters; therefore, it cannot be bound to <code>C</code> which
+     has only one parameter.
+    </li>
+  </ul>
+
+  <h4>Runtime Library (libstdc++)</h4>
+
+  <ul>
+    <li>Optimization work:
+      <ul>
+        <li>A new implementation of <code>std::search_n</code> is provided,
+	    better performing in case of random access iterators.</li>
+	<li>Added further efficient specializations of <code>istream</code>
+            functions, i.e., character array and string extractors.</li>
+        <li>Other smaller improvements throughout.</li>
+      </ul></li>
+    <li>Policy-based associative containers, designed for high-performance,
+        flexibility and semantic safety are delivered in 
+	<code>ext/pb_assoc</code>.</li>
+    <li>A versatile string class, <code>__gnu_cxx::__versa_string</code>,
+        providing facilities conforming to the standard requirements for
+	<code>basic_string</code>, is delivered in
+	<code>&lt;ext/vstring.h&gt;</code>.  In particular:
+      <ul>
+        <li>Two base classes are provided:  the default one avoids reference
+	    counting and is optimized for short strings;  the alternate one,
+            still uses it while improving in a few low level areas (e.g.,
+	    alignment).  See <code>vstring_fwd.h</code> for some useful
+	    typedefs.</li>
+	<li>Various algorithms have been rewritten (e.g., replace), the code
+            streamlined and simple optimizations added.</li>
+	<li>Option 3 of DR 431 is implemented for both available bases, thus
+            improving the support for stateful allocators.</li>  
+      </ul></li>
+     <li>As usual, many bugs have been fixed (e.g., libstdc++/13583,
+         libstdc++/23953) and LWG resolutions put into effect for the first
+         time (e.g., DR 280, DR 464, N1780 recommendations for DR 233,
+	 TR1 Issue 6.19).  The implementation status of TR1 is now tracked in
+	 the docs in <code>tr1.html</code>.</li>
+  </ul>
+
+<h3>Objective-C++</h3>
+  <ul>
+    <li>A new language front end for Objective-C++ has been added.  This language allows
+        users to mix the object oriented features of Objective-C with those of C++.</li>
+  </ul>
+
+<h3>Java (GCJ)</h3>
+  <ul>
+    <li>Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
+        features (plus some 0.20 bug-fixes)
+      <ul>
+        <li>Networking
+          <ul>
+	    <li>The <code>java.net.HttpURLConnection</code> implementation no
+                longer buffers the entire response body in memory.
+                This means that response bodies larger than available
+                memory can now be handled.</li>
+          </ul>
+        </li>
+
+        <li>(N)IO
+          <ul>
+            <li><code>NIO FileChannel.map</code> implementation, fast bulk put
+                implementation for <code>DirectByteBuffer</code>
+		(speeds up this method 10x).</li>
+            <li><code>FileChannel.lock()</code> and
+	        <code>FileChannel.force()</code> implemented.</li>
+          </ul>
+        </li>
+
+        <li>XML
+          <ul>
+            <li><code>gnu.xml</code> fix for nodes created outside a
+	        namespace context.</li>
+            <li>Add support for output indenting and cdata-section-elements
+                output instruction in <code>xml.transform</code>.</li>
+            <li><code>xml.xpath</code> corrections for cases where
+                elements/attributes might have been created in
+                non-namespace-aware mode.  Corrections to handling of
+                XSL variables and minor conformance updates.</li>
+          </ul>
+        </li>
+
+	<li>AWT
+	  <ul>
+	    <li>GNU JAWT implementation, the AWT Native Interface,
+	    which allows direct access to native screen resources from
+	    within a Canvas's paint method.  GNU Classpath Examples
+	    comes with a Demo, see
+	    <code>libjava/classpath/examples/README</code>.</li>
+
+	    <li><code>awt.datatransfer</code> updated to 1.5 with support
+	    for <code>FlavorEvents</code>.  The gtk+ awt peers now allow
+	    copy/paste of text, images, URIs/files and serialized objects
+	    with other applications and tracking clipboard change events with
+	    gtk+ 2.6 (for gtk+ 2.4 only text and serialized objects
+	    are supported). A GNU Classpath Examples datatransfer Demo
+	    was added to show the new functionality.</li>
+
+	    <li>Split gtk+ awt peers event handling in two threads and
+	    improve gdk lock handling (solves several awt lock ups).</li>
+
+	    <li>Speed up awt Image loading.</li>
+
+	    <li>Better gtk+ scrollbar peer implementation when using
+	    gtk+ &gt;= 2.6.</li>
+
+	    <li>Handle image loading errors correctly for gdkpixbuf
+	    and <code>MediaTracker</code>.</li>
+
+	    <li>Better handle GDK lock. Properly prefix gtkpeer native
+	    functions (<code>cp_gtk</code>).</li>
+
+	    <li><code>GdkGraphics2D</code> has been updated to use
+	    Cairo 0.5.x or higher.</li>
+
+	    <li><code>BufferedImage</code> and <code>GtkImage</code>
+	    rewrites. All image drawing operations should now work
+	    correctly (flipping requires gtk+ &gt;= 2.6)</li>
+
+	    <li>Future <code>Graphics2D</code>, image and text work is
+	    documented at: <a href="http://developer.classpath.org/mediation/ClasspathGraphicsImagesText">
+	    http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
+	    </a></li>
+
+	    <li>When gtk+ 2.6 or higher is installed the default log
+	    handler will produce stack traces whenever a WARNING,
+	    CRITICAL or ERROR message is produced.</li>
+	  </ul>
+	</li>
+
+	<li>Free Swing
+	  <ul>
+	    <li>The <code>RepaintManager</code> has been reworked for more
+	    efficient painting, especially for large GUIs.</li>
+
+	    <li>The layout manager <code>OverlayLayout</code> has been
+	    implemented, the <code>BoxLayout</code> has been rewritten to
+	    make use of the <code>SizeRequirements</code> utility class and
+	    caching for more efficient layout.</li>
+
+	    <li>Improved accessibility support.</li>
+
+	    <li>Significant progress has been made in the
+	    implementation of the <code>javax.swing.plaf.metal</code>
+	    package, with most UI delegates in a working state now.
+	    Please test this with your own applications and provide feedback
+	    that will help us to improve this package.</li>
+
+	    <li>The GUI demo (<code>gnu.classpath.examples.swing.Demo</code>)
+	    has been extended to highlight various features in our
+	    Free Swing implementation. And it includes a look and feel
+	    switcher for Metal (default), Ocean and GNU themes.</li>
+
+	    <li>The <code>javax.swing.plaf.multi</code> package is now
+	    implemented.</li>
+
+	    <li>Editing and several key actions for <code>JTree</code> and
+	    <code>JTable</code> were implemented.</li>
+
+	    <li>Lots of icons and look and feel improvements for Free
+	    Swing basic and metal themes were added.  Try running the
+	    GNU Classpath Swing Demo in examples
+	    (<code>gnu.classpath.examples.swing.Demo</code>) with:
+	    <code>-Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel</code>
+	    or
+	    <code>-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel</code></li>
+
+	    <li>Start of styled text capabilites for
+	    <code>java.swing.text</code>.</li>
+
+	    <li><code>DefaultMutableTreeNode</code> pre-order, post-order,
+	    depth-first and breadth-first traversal enumerations
+	    implemented.</li>
+
+	    <li><code>JInternalFrame</code> colors and titlebar draw
+	    properly.</li>
+
+	    <li><code>JTree</code> is working up to par (icons, selection and
+	    keyboard traversal).</li>
+
+	    <li><code>JMenus</code> were made more compatible in visual and
+	    programmatic behavior.</li>
+
+	    <li><code>JTable</code> <code>changeSelection</code> and
+	    multiple selections implemented.</li>
+
+	    <li><code>JButton</code> and <code>JToggleButton</code> change
+	    states work properly now.</li>
+
+	    <li><code>JFileChooser</code> fixes.</li>
+
+	    <li><code>revalidate()</code> and <code>repaint()</code>
+	    fixes which make Free Swing much more responsive.</li>
+
+	    <li><code>MetalIconFactory</code> implemented.</li>
+
+	    <li>Free Swing Top-Level Compatibility. <code>JFrame</code>,
+	    <code>JDialog</code>, <code>JApplet</code>,
+	    <code>JInternalFrame</code>, and <code>JWindow</code> are now
+	    1.5 compatible in the sense that you can call <code>add()</code>
+	    and <code>setLayout()</code> directly on them, which will have
+	    the same effect as calling <code>getContentPane().add()</code>
+	    and <code>getContentPane().setLayout()</code>.</li>
+
+	    <li>The <code>JTree</code> interface has been completed.
+	    <code>JTree</code>s now recognizes mouse clicks and selections
+	    work.</li>
+
+	    <li><code>BoxLayout</code> works properly now.</li>
+
+	    <li>Fixed <code>GrayFilter</code> to actually work.</li>
+
+	    <li>Metal <code>SplitPane</code> implemented.</li>
+
+	    <li>Lots of Free Swing text and editor stuff work now.</li>
+	  </ul>
+	</li>
+
+	<li>Free RMI and Corba
+	  <ul>
+	    <li>Andrew Watson, Vice President and Technical
+	    Director of the Object Management Group, has officially
+	    assigned us 20 bit Vendor Minor Code Id: <code>0x47430</code>
+	    ("GC") that will mark remote classpath-specific system
+	    exceptions.  Obtaining the VMCID means that GNU Classpath
+	    now is a recogniseable type of node in a highly
+	    interoperable CORBA world.</li>
+
+	    <li>GNU Classpath now includes the first working draft to
+	    support the RMI over IIOP protocol. The current
+	    implementation is capable of remote invocations,
+	    transferring various Serializables and Externalizables via
+	    RMI-IIOP protocol.  It can flatten graphs and, at least
+	    for the simple cases, is interoperable with 1.5 JDKs.</li>
+
+	    <li><code>org.omg.PortableInterceptor</code> and related
+	    functionality in other packages is now implemented:
+	    <ul>
+	      <li>The sever and client interceptors work as required
+	      since 1.4.</li>
+	      <li>The <code>IOR</code> interceptor works as needed for
+	      1.5.</li>
+	    </ul>
+	    </li>
+
+	    <li>The <code>org.omg.DynamicAny</code> package is completed
+	    and passes the prepared tests.</li>
+
+	    <li>The Portable Object Adapter should now support the
+	    output of the recent IDL to java compilers. These
+	    compilers now generate servants and not CORBA objects as
+	    before, making the output depend on the existing POA
+	    implementation. Completing POA means that such code can
+	    already be tried to run on Classpath. Our POA is tested
+	    for the following usager scenarios:
+	    <ul>
+	      <li>POA converts servant to the CORBA object.</li>
+	      <li>Servant provides to the CORBA object.</li>
+	      <li>POA activates new CORBA object with the given Object
+	      Id (byte array) that is later accessible for the
+	      servant.</li>
+	      <li>During the first call, the ServantActivator provides
+	      servant for this and all subsequent calls on the current
+	      object.</li>
+	      <li>During each call, the ServantLocator provides
+	      servant for this call only.</li>
+	      <li>ServantLocator or ServantActivator forwards call to
+	      another server.</li>
+	      <li>POA has a single servant, responsible for all
+	      objects.</li>
+	      <li>POA has a default servant, but some objects are
+	      explicitly connected to they specific servants.</li>
+	    </ul>
+	    The POA is verified using tests from the former
+	    <code>cost.omg.org</code>.</li>
+
+	    <li>The CORBA implementation is now a working prototype
+	    that should support features up to 1.3 inclusive.  We
+	    invite groups writing CORBA dependent applications
+	    to try Classpath implementation, reporting any possible
+	    bugs.
+	    The CORBA prototype is interoperable with Sun's
+	    implementation v 1.4, transferring object references,
+	    primitive types, narrow and wide strings, arrays,
+	    structures, trees, abstract interfaces and value types
+	    (feature of CORBA 2.3) between these two platforms.
+	    Remote exceptions are transferred and handled correctly.
+	    The stringified object references (IORs) from various
+	    sources are parsed as required.  The transient (for
+	    current session) and permanent (till jre restart)
+	    redirections work.  Both Little and Big Endian encoded
+	    messages are accepted.  The implementation is verified
+	    using tests from the former cost.omg.org.  The current
+	    release includes working examples (see the examples
+	    directory), demonstrating the client-server communication,
+	    using either CORBA Request or IDL-based stub (usually
+	    generated by a IDL to java compiler).  These examples also
+	    show how to use the Classpath CORBA naming service.  The
+	    IDL to java compiler is not yet written, but as our
+	    library must be compatible, it naturally accepts the
+	    output of other idlj implementations.</li>
+	  </ul>
+	</li>
+
+	<li>Misc
+	  <ul>
+
+	    <li>Updated <code>TimeZone</code> data against Olson
+	    tzdata2005l.</li>
+
+	    <li>Make <code>zip</code> and <code>jar</code> packages UTF-8
+	    clean.</li>
+
+	    <li>"native" code builds and compiles (warning free) on
+	    Darwin and Solaris.</li>
+
+	    <li><code>java.util.logging.FileHandler</code> now rotates
+	    files.</li>
+
+	    <li>Start of a generic JDWP framework in
+	    <code>gnu/classpath/jdwp</code>.  This is unfinished,
+	    but feedback (at <code>classpath@gnu.org</code>) from
+	    runtime hackers is greatly appreciated. Although most of
+	    the work is currently being done around <code>gcj/gij</code>
+	    we want this framework to be as VM neutral as possible.
+	    Early design is described in: <a
+	    href="http://gcc.gnu.org/ml/java/2005-05/msg00260.html">
+	    http://gcc.gnu.org/ml/java/2005-05/msg00260.html</a></li>
+
+	    <li>QT4 AWT peers, enable by giving configure
+	    <code>--enable-qt-peer</code>.  Included, but not ready for
+	    production yet. They are explicitly disabled and not supported.
+	    But if you want to help with the development of these new
+	    features we are interested in feedback. You will have to
+	    explicitly enable them to try them out (and they will most
+	    likely contain bugs).</li>
+
+	    <li>Documentation fixes all over the place.  See
+	    <a href="http://developer.classpath.org/doc/">
+	    http://developer.classpath.org/doc/</a></li>
+	  </ul>
+	</li>
+      </ul>
+    </li>
+  </ul>
+<h2>New Targets and Target Specific Improvements</h2>
+
+<h3>IA-32/x86-64</h3>
+  <ul>
+    <li>The x86-64 medium model (that allows building applications whose data
+	segment exceeds 4GB) was redesigned to match latest ABI draft.  New
+	implementation split large datastructures into separate segment
+	improving performance of accesses to small datastructures and also
+	allows linking of small model libraries into medium model programs as
+	long as the libraries are not accessing the large datastructures
+	directly.  Medium model is also supported in position independent code
+	now.
+        <p>
+	The ABI change results in partial incompatibility among medium
+	model objects. Linking medium model libraries (or objects) compiled
+	with new compiler into medium model program compiled with older will
+	likely result in exceeding ranges of relocations.</p>
+	<p>
+	Binutils 2.16.91 or newer are required for compiling medium model
+	now.</p></li>
+  </ul>
+
+<h3>RS6000 (POWER/PowerPC)</h3>
+  <ul>
+    <li>The AltiVec vector primitives in <code>&lt;altivec.h&gt;</code> are
+	now implemented in a way that puts a smaller burden on the
+	preprocessor, instead processing the "overloading" in the front ends.
+	This should benefit compilation speed on AltiVec vector code.</li>
+    <li>AltiVec initializers now are generated more efficiently.</li>
+    <li>The popcountb instruction available on POWER5 now is generated.</li>
+    <li>The floating point round to integer instructions available on
+	POWER5+ now is generated.</li>
+    <li>Floating point divides can be synthesized using the floating
+	point reciprocal estimate instructions.</li>
+    <li>Double precision floating point constants are initialized as single
+	precision values if they can be represented exactly.</li>
+  </ul>
+
+<h3>S/390, zSeries and System z9</h3>
+  <ul>
+    <li>Support for the IBM System z9 109 processor has been added.  When
+	using the <code>-march=z9-109</code> option, the compiler will
+	generate code making use of instructions provided by the extended
+	immediate facility.</li>
+    <li>Support for 128-bit IEEE floating point has been added.  When using
+	the <code>-mlong-double-128</code> option, the compiler will map the
+	<code>long double</code> data type to 128-bit IEEE floating point.
+	Using this option constitutes an ABI change, and requires glibc
+	support.</li>
+    <li>Various changes to improve performance of generated code have been
+	implemented, including:
+      <ul>
+	<li>In functions that do not require a literal pool, register
+	    <code>%r13</code> (which is traditionally reserved as literal pool
+	    pointer), can now be freely used for other purposes by the
+	    compiler.</li>
+	<li>More precise tracking of register use allows the compiler to
+	    generate more efficient function prolog and epilog code in certain
+	    cases.</li>
+	<li>The <code>SEARCH STRING</code>, <code>COMPARE LOGICAL
+	    STRING</code>, and <code>MOVE STRING</code> instructions are now
+	    used to implement C string functions.</li>
+	<li>The <code>MOVE CHARACTER</code> instruction with single byte
+	    overlap is now used to implement the <code>memset</code> function
+	    with non-zero fill byte.</li>
+	<li>The <code>LOAD ZERO</code> instructions are now used where
+	    appropriate.</li>
+	<li>The <code>INSERT CHARACTERS UNDER MASK</code>, <code>STORE
+	    CHARACTERS UNDER MASK</code>, and <code>INSERT IMMEDIATE</code>
+	    instructions are now used more frequently to optimize bitfield
+	    operations.</li>
+	<li>The <code>BRANCH ON COUNT</code> instruction is now used more
+	    frequently.  In particular, the fact that a loop contains a
+	    subroutine call no longer prevents the compiler from using this
+	    instruction.</li>
+	<li>The compiler is now aware that all shift and rotate instructions
+	    implicitly truncate the shift count to six bits.</li>
+      </ul></li>
+    <li>Back-end support for the following generic features has been
+	implemented:
+      <ul>
+	<li>The full set of
+	    <a href="http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html">
+	    built-in functions for atomic memory access</a>.</li>
+	<li>The <code>-fstack-protector</code> feature.</li>
+	<li>The optimization pass avoiding unnecessary stores of incoming 
+	    argument registers in functions with variable argument list.</li>
+      </ul></li>
+  </ul>
+
+<h3>SPARC</h3>
+  <ul>
+    <li>The default code model in 64-bit mode has been changed from
+	Medium/Anywhere to Medium/Middle on Solaris.</li>
+    <li>TLS support is disabled by default on Solaris prior to release 10.
+	It can be enabled on TLS-capable Solaris 9 versions (4/04 release and
+	later) by specifying <code>--enable-tls</code> at configure time.</li>
+  </ul>
+
+<h3>MorphoSys</h3>
+  <ul>
+    <li>Support has been added for this new architecture.</li>
+  </ul>
+
+<h2><a name="obsolete_systems">Obsolete Systems</a></h2>
+
+<h2>Documentation improvements</h2>
+
+<h2>Other significant improvements</h2>
+
+  <ul>
+    <li>GCC can now emit code for protecting applications from stack-smashing
+	attacks.  The protection is realized by buffer overflow detection and
+	reordering of stack variables to avoid pointer corruption.</li>
+
+    <li>Some built-in functions have been fortified to protect them against
+	various buffer overflow (and format string) vulnerabilities. Compared
+	to the mudflap bounds checking feature, the safe builtins have far
+	smaller overhead.  This means that programs built using safe builtins
+	should not experience any measurable slowdown.</li>
+  </ul>
+
+<h2><a name="4.1.2">GCC 4.1.2</a></h2>
+
+<p>This is the <a
+href="http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&amp;resolution=FIXED&amp;target_milestone=4.1.2">list
+of problem reports (PRs)</a> from GCC's bug tracking system that are
+known to be fixed in the 4.1.2 release. This list might not be
+complete (that is, it is possible that some PRs that have been fixed
+are not listed here).</p>
+
+<p>
+  When generating code for a shared library, GCC now recognizes that
+  global functions may be replaced when the program runs.  Therefore,
+  it is now more conservative in deducing information from the bodies
+  of functions.  For example, in this example:
+</p>
+
+  <pre>
+    void f() {}
+    void g() { 
+     try { f(); } 
+     catch (...) { 
+       cout &lt;&lt; "Exception";
+     }
+    }
+  </pre>
+
+<p>
+  G++ would previously have optimized away the catch clause, since it
+  would have concluded that <code>f</code> cannot throw exceptions.
+  Because users may replace <code>f</code> with another function in
+  the main body of the program, this optimization is unsafe, and is no
+  longer performed.  If you wish G++ to continue to optimize as
+  before, you must add a <code>throw()</code> clause to the
+  declaration of <code>f</code> to make clear that it does not throw
+  exceptions. 
+</p>  
+
+
+
+
+<!-- ==================================================================== -->
+
+<div class="copyright">
+
+<p>Please send FSF &amp; GNU inquiries &amp; questions to
+<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
+There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
+to contact</a> the FSF.</p>
+
+<p>These pages are maintained by
+<a href="http://gcc.gnu.org/about.html">the GCC team</a>.</p>
+
+<address>For questions related to the use of GCC, please consult these web
+pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
+that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
+mailing list might help.<br />
+Please send comments on these web pages and the development of GCC to our
+developer mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
+or <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.  All of our lists
+have <a href="http://gcc.gnu.org/lists.html">public archives</a>.
+</address>
+
+<p>Copyright (C) Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110, USA.</p>
+<p>Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.</p>
+
+<table width="100%" border="0"><tr><td>
+  <!-- IGNORE DIFF -->Last modified 2007-02-14
+</td><td align="right" valign="bottom">
+  <a href="http://validator.w3.org/check/referer">
+      <img src="http://www.w3.org/Icons/valid-xhtml10"
+     alt="Valid XHTML 1.0" border="0" width="88" height="31" />
+   
+  </a>
+</td></tr></table>
+
+</div>
+
+<!-- ==================================================================== -->
+
+</body>
+     </html>
+  
+ 
--- gcc-4.1-4.1.2.orig/debian/rules.conf
+++ gcc-4.1-4.1.2/debian/rules.conf
@@ -0,0 +1,748 @@
+# -*- makefile -*-
+# rules.conf
+#	- used to build debian/control and debian/rules.parameters
+#	- assumes unpacked sources
+
+include debian/rules.defs
+
+SOURCE_VERSION := $(call vafilt,$(CHANGELOG_VARS),Version)
+DEB_VERSION := $(shell echo $(SOURCE_VERSION) \
+	| sed -e 's/.*://' -e 's/ds[0-9]*//')
+ifneq (,$(findstring gpc,$(PKGSOURCE)))
+  GPC_BASE_VERSION := $(word 1, $(subst -, ,$(DEB_VERSION)))
+  DEB_VERSION := $(subst $(GPC_BASE_VERSION)-,,$(DEB_VERSION))
+endif
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+  GDC_BASE_VERSION := $(word 1, $(subst -, ,$(DEB_VERSION)))
+  DEB_VERSION := $(shell echo $(DEB_VERSION) | sed -r 's/[0-9]{8}-//')
+  DEB_VERSION := $(subst $(GDC_BASE_VERSION)-,,$(DEB_VERSION))
+endif
+
+# epoch used for gcc versions up to 3.3.x, now used for some remaining
+# libraries: libgcc1, libobjc1, libffi2, libffi2-dev, libg2c0
+EPOCH := 1
+DEB_EVERSION := $(EPOCH):$(DEB_VERSION)
+BASE_VERSION := $(shell echo $(DEB_VERSION) | sed -e 's/\([1-9]\.[0-9]\).*-.*/\1/')
+
+# The binutils version needed.
+# The oldest suitable versions for the various platforms can be found in
+# INSTALL/specific.html ; we take a tighter dependency if possible to be on
+# the safe side (something like newest( version in stable, versions for the
+# various platforms in INSTALL/specific.html) ).
+BINUTILSV = 2.17cvs20070426
+ifdef DEB_CROSS
+  BINUTILS_BUILD_DEP := binutils$(TS) (>= $(BINUTILSV))
+else
+  BINUTILS_BUILD_DEP := binutils (>= $(BINUTILSV)) | binutils-multiarch (>= $(BINUTILSV))
+endif
+
+# libc-dev dependencies
+libc_ver := 2.5
+ifeq ($(DEB_TARGET_ARCH_OS),linux)
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),alpha ia64))
+    LIBC_DEP = libc6.1
+    LIBC_DEV_DEP = libc6.1-dev$(LS) (>= $(libc_ver))
+  else
+    LIBC_DEP = libc6
+    LIBC_DEV_DEP = libc6-dev$(LS) (>= $(libc_ver))
+  endif
+else
+  ifeq ($(DEB_TARGET_ARCH_OS),gnu)
+    LIBC_DEP = libc0.3
+    LIBC_DEV_DEP = libc0.3-dev$(LS)
+  endif
+  ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+    LIBC_DEP = libc0.1
+    LIBC_DEV_DEP = libc0.1-dev
+  endif
+  ifeq ($(DEB_TARGET_ARCH_OS),knetbsd)
+    LIBC_DEP = libc0.1
+    LIBC_DEV_DEP = libc0.1-dev$(LS)
+  endif
+  ifeq ($(DEB_TARGET_ARCH_OS),netbsd)
+    LIBC_DEP = libc12
+    LIBC_DEV_DEP = libc12-dev$(LS)
+  endif
+endif
+
+LIBC_BIARCH_DEP :=
+LIBC_BIARCH_DEV_DEP :=
+LIBCXX_BIARCH_DEP :=
+ifeq ($(biarch),yes)
+  ifeq ($(DEB_TARGET_ARCH),i386)
+    LIBC_BIARCH_DEP := libc6-amd64$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEV_DEP := libc6-dev-amd64$(LS)
+  endif
+  ifeq ($(DEB_TARGET_ARCH),powerpc)
+    LIBC_BIARCH_DEP := libc6-ppc64$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEV_DEP := libc6-dev-ppc64$(LS) (>= $(libc_ver))
+  endif
+  ifeq ($(DEB_TARGET_ARCH),sparc)
+    LIBC_BIARCH_DEP := libc6-sparc64$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEV_DEP := libc6-dev-sparc64$(LS) (>= $(libc_ver))
+  endif
+  ifeq ($(DEB_TARGET_ARCH),s390)
+    LIBC_BIARCH_DEP := libc6-s390x$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEV_DEP := libc6-dev-s390x$(LS) (>= $(libc_ver))
+  endif
+  LIBCXX_BIARCH_DEP = lib64stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+  LIBCXX_BIARCH_DBG_DEP = lib64stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg
+endif
+ifeq ($(biarch32),yes)
+  ifeq ($(DEB_TARGET_ARCH),amd64)
+    LIBC_BIARCH_DEV_DEP := libc6-dev-i386$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEP := libc6-i386$(LS) (>= $(libc_ver))
+  endif
+  ifeq ($(DEB_TARGET_ARCH),ppc64)
+    LIBC_BIARCH_DEP := libc6-powerpc$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEV_DEP := libc6-dev-powerpc$(LS) (>= $(libc_ver))
+  endif
+  ifeq ($(DEB_TARGET_ARCH),kfreebsd-amd64)
+    LIBC_BIARCH_DEV_DEP := libc0.1-dev-i386$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEP := libc0.1-i386$(LS) (>= $(libc_ver))
+  endif
+  LIBCXX_BIARCH_DEP = lib32stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+  LIBCXX_BIARCH_DBG_DEP = lib32stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg
+endif
+
+LIBUNWIND_DEV_DEP :=
+ifeq ($(DEB_TARGET_ARCH),ia64)
+  LIBUNWIND_DEV_DEP := libunwind7-dev$(LS) (>= 0.98.5-6)
+endif
+
+SOURCE_BUILD_DEP += gcc-$(BASE_VERSION)-source (>= $(BASE_VERSION).2), gcc-$(BASE_VERSION)-source (<< $(BASE_VERSION).3),
+
+CHECK_BUILD_DEP := expect-tcl8.3 [hppa], dejagnu [check_no_archs]
+ifeq ($(distribution),Ubuntu)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    CHECK_BUILD_DEP = dejagnu [check_no_archs]
+  endif
+endif
+
+ifneq (,$(findstring gcc, $(PKGSOURCE)))
+  AUTOGEN_BUILD_DEP = autogen,
+  ifeq ($(distribution),Ubuntu)
+    AUTOGEN_BUILD_DEP = autogen [!ia64],
+  endif
+endif
+
+ifndef DEB_CROSS
+LIBC_BUILD_DEP := libc6.1-dev (>= $(libc_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_ver)) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= $(libc_ver))
+
+ifneq (,$(java_awt_peers))
+  JAVA_BUILD_DEP := libmagic-dev [java_no_archs],
+  JAVA_BUILD_DEP += libasound2-dev [java_no_archs !hurd-i386 !kfreebsd-i386 !kfreebsd-amd64],
+  ifneq (,$(findstring gtk,$(java_awt_peers)))
+    JAVA_BUILD_DEP += libxtst-dev [java_no_archs], libxt-dev [java_no_archs], libgtk2.0-dev (>= 2.4.4-2) [java_no_archs], libart-2.0-dev [java_no_archs], libcairo2-dev [java_no_archs],
+  endif
+  ifneq (,$(findstring qt,$(java_awt_peers)))
+    JAVA_BUILD_DEP += libqt4-dev (>= 4.1.0) [java_no_archs],
+  endif
+  # plugin
+  JAVA_BUILD_DEP += libgconf2-dev [java_no_archs],
+  JAVA_BUILD_DEP += libxul-dev [java_plugin_no_archs],
+  JAVA_BUILD_DEP += fastjar [java_no_archs],
+  JAVA_BUILD_DEP += ecj (>= 3.3.0-2) [java_no_archs], zip [java_no_archs],
+  # gcj-4.1 needed for gjavah-4.1.
+  JAVA_BUILD_DEP += gcj-4.1 [java_no_archs],
+endif
+ifneq ($(with_standalone_gcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    JAVA_BUILD_DEP += $(SOURCE_BUILD_DEP)
+    JAVA_BUILD_DEP += gcc-4.1 (>= 4.1.2),
+  endif
+endif
+JAVA_BUILD_INDEP := gjdoc
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+    JAVA_BUILD_DEP :=
+    JAVA_BUILD_INDEP :=
+  endif
+endif
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+  LIBSTDCXX_BUILD_INDEP = doxygen (>= 1.4.2), graphviz (>= 2.2), gsfonts-x11
+  JAVA_BUILD_INDEP := , $(JAVA_BUILD_INDEP)
+endif
+
+PASCAL_BUILD_DEP := libncurses5-dev [pascal_no_archs], texlive-latex-base [pascal_no_archs], libgmp3-dev [pascal_no_archs], help2man [pascal_no_archs],
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+  ifneq ($(with_separate_gnat),yes)
+    # Build gnat as part of the combiled gcc-x.y source package.  Do not fail
+    # if gnat is not present on unsupported architectures; the build scripts
+    # will not use gnat anyway.
+    GNAT_BUILD_DEP := gnat-4.1 [ada_no_archs],
+  endif
+  ifeq ($(with_separate_gpc),yes)
+    PASCAL_BUILD_DEP :=
+  endif
+else ifeq ($(PKGSOURCE),gcc-snapshot)
+  # Ditto, as part of the gcc-snapshot package.
+  GNAT_BUILD_DEP := gnat-4.1 [ada_no_archs],
+  PASCAL_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+  # Special source package just for gnat. Fail early if gnat is not present,
+  # rather than waste CPU cycles and fail later.
+  GNAT_BUILD_DEP := gnat-4.1,
+  GNAT_BUILD_DEP += $(SOURCE_BUILD_DEP)
+  JAVA_BUILD_DEP :=
+  JAVA_BUILD_INDEP :=
+  GDC_BUILD_DEP :=
+  PASCAL_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+  # Special source package just for gcj.
+  GNAT_BUILD_DEP :=
+  PASCAL_BUILD_DEP :=
+  GDC_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION))
+  # Special source package just for gdc.
+  GNAT_BUILD_DEP :=
+  JAVA_BUILD_DEP :=
+  JAVA_BUILD_INDEP :=
+  PASCAL_BUILD_DEP :=
+  GDC_BUILD_DEP := $(SOURCE_BUILD_DEP)
+else ifeq ($(PKGSOURCE),gpc-$(BASE_VERSION))
+  # Special source package just for gpc.
+  GNAT_BUILD_DEP :=
+  JAVA_BUILD_DEP :=
+  JAVA_BUILD_INDEP :=
+  GDC_BUILD_DEP :=
+  PASCAL_BUILD_DEP += $(SOURCE_BUILD_DEP)
+endif
+
+LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64], lib64gcc1 [i386 powerpc sparc s390], lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64 kfreebsd-amd64],
+
+#ifeq ($(PKGSOURCE),gcc-snapshot)
+#  LIBC_BIARCH_BUILD_DEP =
+#endif
+
+else
+# build cross compiler
+
+LIBC_BUILD_DEP := $(LIBC_DEV_DEP)
+
+ifneq ($(LIBC_BIARCH_DEV_DEP),)
+  LIBC_BIARCH_BUILD_DEP := $(LIBC_BIARCH_DEV_DEP),
+else
+  LIBC_BIARCH_BUILD_DEP :=
+endif
+
+ifneq ($(LIBUNWIND_DEV_DEP),)
+  LIBUNWIND_BUILD_DEP := $(LIBUNWIND_DEV_DEP),
+else
+  LIBUNWIND_BUILD_DEP := 
+endif
+
+ifeq ($(DEB_TARGET_ARCH),ia64)
+  LIBATOMIC_OPS_BUILD_DEP := libatomic-ops-dev$(LS),
+else
+  LIBATOMIC_OPS_BUILD_DEP :=
+endif
+
+JAVA_BUILD_DEP :=
+JAVA_BUILD_INDEP :=
+GNAT_BUILD_DEP :=
+
+endif # cross compiler
+
+GCC_VERSION := $(strip $(shell cat $(srcdir)/gcc/BASE-VER))
+
+# The numeric part of the gcc version number (x.yy.zz)
+NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \
+		awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+# first version with a new path component in gcc_lib_dir (i.e. GCC_VERSION
+# or TARGET_ALIAS changes), or last version available for all architectures
+DEB_GCC_SOFT_VERSION := 4.1.2-2
+DEB_GCJ_SOFT_VERSION := 4.1.2-2
+ifeq ($(with_pascal),yes)
+GPC_DATE := $(shell sed -n 's/^.define GPC_VERSION_STRING "\(.*\)"/\1/p' $(srcdir)/gcc/p/version.h || true)
+DEB_GPC_VERSION := $(shell echo $(DEB_VERSION) \
+			   | sed 's/.*:\(.*\)-\(.*\)/2:\1.$(GPC_DATE)-\2/')
+endif
+
+ifeq ($(with_pascal),yes)
+  DEB_GPC_VERSION := $(GPC_BASE_VERSION)-$(DEB_VERSION)
+endif
+
+ifeq ($(with_d),yes)
+  DEB_GDC_VERSION := $(GDC_BASE_VERSION)-$(DEB_VERSION)
+endif
+
+# semiautomatic ...
+DEB_SOVERSION := $(DEB_VERSION)
+DEB_SOVERSION := 4.1.2
+DEB_SOEVERSION := $(EPOCH):4.1.2
+DEB_STDCXX_SOVERSION := 4.1.2
+DEB_GCJ_SOVERSION := 4.1.2-1
+DEB_FFI_SOVERSION := $(DEB_SOVERSION)
+
+DEB_GCC_VERSION := $(DEB_VERSION)
+DEB_GCJ_VERSION := $(DEB_VERSION)
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION)
+  endif
+endif
+
+DEB_GNAT_VERSION := $(DEB_VERSION)
+ifeq ($(with_separate_gnat),yes)
+  ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+    DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION)
+  endif
+endif
+
+# manual ...
+ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),hppa m68k))
+  ifeq ($(DEB_TARGET_ARCH),m68k)
+    GCC_SONAME := 2
+  endif
+  ifeq ($(DEB_TARGET_ARCH),hppa)
+    GCC_SONAME := 4
+  endif
+  DEB_LIBGCC_SOVERSION := $(DEB_SOVERSION)
+  DEB_LIBGCC_VERSION := $(DEB_VERSION)
+else
+  GCC_SONAME := 1
+  DEB_LIBGCC_SOVERSION := $(DEB_SOEVERSION)
+  DEB_LIBGCC_VERSION := $(DEB_EVERSION)
+endif
+
+LIBGCC_DEP := libgcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+LIBGCC_BIARCH_DEP := 
+ifeq ($(biarch),yes)
+  LIBGCC_BIARCH_DEP := lib64gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+ifeq ($(biarch32),yes)
+  LIBGCC_BIARCH_DEP := lib32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+
+ifeq (,$(wildcard debian/soname-cache))
+  SONAME_VARS := $(shell \
+	cache=debian/soname-cache; \
+	rm -f $$cache; \
+	v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \
+		$(srcdir)/libstdc++-v3/configure.ac`; \
+	echo CXX_SONAME=$$v >> $$cache; \
+	v=`awk -F= '/^VERSION/ {split($$2,v,":"); print v[1]}' \
+		$(srcdir)/libobjc/configure.ac`; \
+	echo OBJC_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libgfortran/libtool-version | cut -d: -f1`; \
+	echo FORTRAN_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libmudflap/libtool-version | cut -d: -f1`; \
+	echo MUDFLAP_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libssp/libtool-version | cut -d: -f1`; \
+	echo SSP_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libjava/libtool-version | cut -d: -f1`; \
+	echo GCJ_SONAME=$$v >> $$cache; \
+	if [ "$$v" -ge 70 ]; then \
+	  echo GCJ_SONAME1=`echo $$v | sed 's/.$$//'` >> $$cache; \
+	  echo GCJ_SONAME2=`echo $$v | sed 's/.*\(.\)$$/\1/'` >> $$cache; \
+	else \
+	  echo GCJ_SONAME1=$$v >> $$cache; \
+	  echo GCJ_SONAME2= >> $$cache; \
+	fi; \
+	v=`tail -1 $(srcdir)/libffi/libtool-version | cut -d: -f1`; \
+	echo FFI_SONAME=$$v >> $$cache; \
+	v=`grep '[^_]Library_Version.*:' $(srcdir)/gcc/ada/gnatvsn.ads \
+		| sed -e 's/.*"\([^"]*\)".*/\1/'`; \
+	echo GNAT_SONAME=$$v >> $$cache; \
+	cat $$cache)
+else
+  SONAME_VARS := $(shell cat debian/soname-cache)
+endif
+CXX_SONAME	= $(call vafilt,$(SONAME_VARS),CXX_SONAME)
+OBJC_SONAME	= $(call vafilt,$(SONAME_VARS),OBJC_SONAME)
+FORTRAN_SONAME	= $(call vafilt,$(SONAME_VARS),FORTRAN_SONAME)
+MUDFLAP_SONAME	= $(call vafilt,$(SONAME_VARS),MUDFLAP_SONAME)
+SSP_SONAME	= $(call vafilt,$(SONAME_VARS),SSP_SONAME)
+GCJ_SONAME	= $(call vafilt,$(SONAME_VARS),GCJ_SONAME)
+GCJ_SONAME1	= $(call vafilt,$(SONAME_VARS),GCJ_SONAME1)
+GCJ_SONAME2	= $(call vafilt,$(SONAME_VARS),GCJ_SONAME2)
+FFI_SONAME	= $(call vafilt,$(SONAME_VARS),FFI_SONAME)
+GNAT_SONAME	= $(call vafilt,$(SONAME_VARS),GNAT_SONAME)
+
+GNAT_VERSION := $(BASE_VERSION)
+
+LIBGNAT_DEP :=
+ifeq ($(with_libgnat),yes)
+  LIBGNAT_DEP := libgnat-$(GNAT_VERSION) (= $(DEB_VERSION))
+endif
+
+pkg_ver := -$(BASE_VERSION)
+
+PKG_GCJ_EXT = $(GCJ_SONAME1)
+PKG_LIBGCJ_EXT = $(GCJ_SONAME1)$(if $(GCJ_SONAME2),-$(GCJ_SONAME2))
+
+ctrl_flags = \
+	-DBINUTILSV=$(BINUTILSV) \
+	-DSRCNAME=$(PKGSOURCE) \
+	-D__$(DEB_TARGET_GNU_CPU)__ \
+	-DARCH=$(DEB_TARGET_ARCH) \
+	-DDIST=$(distribution)
+ifeq ($(with_objc)-$(with_objc_gc),yes-yes)
+  ctrl_flags +=	-DOBJC_GC
+endif
+
+ctrl_flags += \
+	-DLIBC_DEV_DEP="$(LIBC_DEV_DEP)" \
+	-DLIBC_BIARCH_BUILD_DEP="$(LIBC_BIARCH_BUILD_DEP)" \
+	-DGNAT_BUILD_DEP="$(GNAT_BUILD_DEP)" \
+	-DJAVA_BUILD_DEP="$(JAVA_BUILD_DEP)" \
+	-DJAVA_BUILD_INDEP="$(JAVA_BUILD_INDEP)" \
+	-DLIBSTDCXX_BUILD_INDEP="$(LIBSTDCXX_BUILD_INDEP)" \
+	-DPASCAL_BUILD_DEP="$(PASCAL_BUILD_DEP)" \
+	-DGDC_BUILD_DEP="$(GDC_BUILD_DEP)" \
+	-DBINUTILS_BUILD_DEP="$(BINUTILS_BUILD_DEP)" \
+	-DLIBC_BUILD_DEP="$(LIBC_BUILD_DEP)" \
+	-DCHECK_BUILD_DEP="$(CHECK_BUILD_DEP)" \
+	-DAUTOGEN_BUILD_DEP="$(AUTOGEN_BUILD_DEP)" \
+	-DMULTILIB_ARCHS="$(multilib_archs)" \
+	-DTP=$(TP) \
+	-DTS=$(TS) \
+	-DLS=$(LS)
+
+ifdef DEB_CROSS
+  ctrl_flags += \
+	-DTARGET=$(DEB_TARGET_ARCH) \
+	-DLIBUNWIND_BUILD_DEP="$(LIBUNWIND_BUILD_DEP)" \
+	-DLIBATOMIC_OPS_BUILD_DEP="$(LIBATOMIC_OPS_BUILD_DEP)"
+else
+  # add '-DPRI=optional' to ctrl_flags if this is not the default compiler
+  # ctrl_flags += \
+  #     -DPRI=optional
+endif
+
+ifeq ($(with_base_only),yes)
+  ctrl_flags += \
+	-DBASE_ONLY=yes
+endif
+
+control: control-file parameters-file substvars-file versioned-files
+
+ifdef DEB_CROSS
+  languages = c c++ objc objpp
+  addons = libgcc lib64gcc libcxx lib64cxx cdev c++dev libobjc objcdev objppdev
+  ifdef DEB_CROSS_INDEPENDENT
+    addons += gccxbase
+  endif
+  ifeq ($(with_d),yes)
+    ifeq ($(with_separate_gdc),yes)
+      languages = # disable others languages
+      addons = # disable others addons
+    endif
+    languages += d
+    ifeq ($(with_libphobos),yes)
+      addons += libphobos
+    endif
+  endif
+else
+  languages = ada c c++ java d # pascal
+  addons = gccbase cdev c++dev fdev fixincl libcxx lib4gcc \
+	   libgcc libffi libgcj libgcjdev libgnat libs \
+	   lib64gcc lib64cxx lib64ffi \
+	   lib32gcc lib32cxx \
+	   proto mudflap source \
+	   multilib # libnof lib64gnat ssp
+  ifeq ($(with_fastjar),yes)
+     addons += fastjar
+  endif
+  ifeq ($(with_separate_libgcj),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out java,$(languages))
+      addons := $(filter-out gcj libgcj libgcjdev,$(addons))
+    endif
+    ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+      languages = java
+      addons = gcj libgcj libgcjdev
+    endif
+  endif
+  ifeq ($(with_standalone_gcj),yes)
+    ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+      addons += lib4gcc
+      ifeq ($(with_fastjar),yes)
+         addons += fastjar
+      endif
+      ctrl_flags += -DSTANDALONEJAVA
+    endif
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      addons := $(filter-out fastjar,$(addons))
+    endif
+  endif
+  ifeq ($(with_separate_gnat),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out ada,$(languages))
+      addons := $(filter-out libgnat,$(addons))
+    endif
+    ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+      languages = ada
+      addons = libgnat
+    endif
+  endif
+  ifeq ($(with_separate_gpc),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out pascal,$(languages))
+    endif
+    ifeq ($(PKGSOURCE),gpc-$(BASE_VERSION))
+      languages = pascal
+      addons = 
+    endif
+  endif
+  ifeq ($(with_separate_gdc),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out d,$(languages))
+    endif
+    ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION))
+      languages = d
+      addons = 
+      ifeq ($(with_libphobos),yes)
+        addons += libphobos
+      endif
+    endif
+  endif
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    addons += gfdldoc
+  endif
+endif
+
+ifeq ($(distribution),DebianXXX)
+# use type-handling
+ada_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(ada_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(ada_no_systems) | tr ' ' ,`))
+java_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(java_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(java_no_systems) | tr ' ' ,`))
+pascal_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(pascal_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(pascal_no_systems) | tr ' ' ,`))
+fortran_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(fortran_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(fortran_no_systems) | tr ' ' ,`))
+libphobos_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(libphobos_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(libphobos_no_systems) | tr ' ' ,`))
+libgc_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(libgc_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(libgc_no_systems) | tr ' ' ,`))
+check_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(check_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(check_no_systems) | tr ' ' ,`) \
+	!hurd-i386)
+locale_no_archs := $(strip \
+	$(shell type-handling -n -r `echo $(locale_no_cpus) | tr ' ' ,` any) \
+	$(shell type-handling -n -r any `echo $(locale_no_systems) | tr ' ' ,`))
+
+linux_gnu_archs := $(shell type-handling -r any linux-gnu)
+else
+# avoid it ...
+ada_no_archs    := $(strip $(foreach cpu,$(ada_no_cpus),!$(cpu)) \
+			!kfreebsd-amd64 !kfreebsd-i386 !hurd-i386)
+java_no_archs   := $(strip $(foreach cpu,$(java_no_cpus),!$(cpu)) \
+			)
+java_plugin_no_archs := $(strip $(foreach cpu,$(java_plugin_no_cpus),!$(cpu)) \
+			)
+pascal_no_archs := $(strip $(foreach cpu,$(pascal_no_cpus),!$(cpu)) \
+			)
+fortran_no_archs:= $(strip $(foreach cpu,$(fortran_no_cpus),!$(cpu)) \
+			!avr)
+libphobos_no_archs    := $(strip $(foreach cpu,$(libphobos_no_cpus),!$(cpu)) \
+			!hurd-i386)
+libgc_no_archs  := $(strip $(foreach cpu,$(libgc_no_cpus),!$(cpu)) \
+			)
+check_no_archs  := $(strip $(foreach cpu,$(check_no_cpus),!$(cpu)) \
+			!hurd-i386)
+locale_no_archs := $(strip $(foreach cpu,$(locale_no_cpus),!$(cpu)) \
+			!hurd-i386)
+linux_gnu_archs := !hurd-i386
+endif
+
+locale_no_archs += !m68k
+
+
+control-file:
+	echo "addons: $(addons)"; \
+	m4 $(ctrl_flags) \
+	  -DPV=$(pkg_ver) \
+	  -DCXX_SO=$(CXX_SONAME) \
+	  -DGCC_SO=$(GCC_SONAME) \
+	  -DOBJC_SO=$(OBJC_SONAME) \
+	  -DFORTRAN_SO=$(FORTRAN_SONAME) \
+	  -DGCJ_SO=$(PKG_GCJ_EXT) \
+	  -DLIBGCJ_EXT=$(PKG_LIBGCJ_EXT) \
+	  -DGNAT_SO=$(GNAT_SONAME) \
+	  -DGNAT_V=$(GNAT_VERSION) \
+	  -DPHOBOS_V=$(libphobos_version) \
+	  -DFFI_SO=$(FFI_SONAME) \
+	  -DMF_SO=$(MUDFLAP_SONAME) \
+	  -DSSP_SO=$(SSP_SONAME) \
+	  -Denabled_languages="$(languages) $(addons)" \
+	  -Dada_no_archs="$(ada_no_archs)" \
+	  -Djava_no_archs="$(java_no_archs)" \
+	  -Djava_plugin_no_archs="$(java_plugin_no_archs)" \
+	  -Dpascal_no_archs="$(pascal_no_archs)" \
+	  -Dfortran_no_archs="$(fortran_no_archs)" \
+	  -Dlibgc_no_archs="$(libgc_no_archs)" \
+	  -Dcheck_no_archs="$(check_no_archs)" \
+	  -Dlocale_no_archs="$(locale_no_archs)" \
+	  -Dlinux_gnu_archs="$(linux_gnu_archs)" \
+	  -Dlibphobos_no_archs="$(libphobos_no_archs)" \
+	  -Dbiarch32_archs="$(strip $(subst /, ,$(biarch32_archs)))" \
+	  -Dbiarch64_archs="$(strip $(subst /, ,$(biarch_archs)))" \
+		debian/control.m4 > debian/control.tmp2
+	uniq debian/control.tmp2 | sed '/^Build/s/ *, */, /g' \
+		> debian/control.tmp
+	rm -f debian/control.tmp2
+	[ -e debian/control ] \
+	  && cmp -s debian/control debian/control.tmp \
+	  && rm -f debian/control.tmp && exit 0; \
+	  mv debian/control.tmp debian/control; touch $(control_stamp)
+
+substvars-file:
+	rm -f debian/substvars.local.tmp
+	( \
+		echo 'gcc:Version=$(DEB_GCC_VERSION)'; \
+		echo 'gcc:EpochVersion=$(DEB_EVERSION)'; \
+		echo 'gcc:SoftVersion=$(DEB_GCC_SOFT_VERSION)'; \
+		echo 'gpc:Version=$(DEB_GPC_VERSION)'; \
+		echo 'gdc:Version=$(DEB_GDC_VERSION)'; \
+		echo 'gcj:Version=$(DEB_GCJ_VERSION)'; \
+		echo 'gcj:SoftVersion=$(DEB_GCJ_SOFT_VERSION)'; \
+		echo 'gnat:Version=$(DEB_GNAT_VERSION)'; \
+		echo 'binutils:Version=$(BINUTILSV)'; \
+		echo 'dep:libgcc=$(LIBGCC_DEP)'; \
+		echo 'dep:libgccbiarch=$(LIBGCC_BIARCH_DEP)'; \
+		echo 'dep:libcdev=$(LIBC_DEV_DEP)'; \
+		echo 'dep:libcbiarch=$(LIBC_BIARCH_DEP)'; \
+		echo 'dep:libcbiarchdev=$(LIBC_BIARCH_DEV_DEP)'; \
+		echo 'dep:libunwinddev=$(LIBUNWIND_DEV_DEP)'; \
+		echo 'dep:libcxxbiarch=$(LIBCXX_BIARCH_DEP)'; \
+		echo 'dep:libcxxbiarchdbg=$(LIBCXX_BIARCH_DBG_DEP)'; \
+		echo 'dep:libgnat=$(LIBGNAT_DEP)'; \
+	) > debian/substvars.local.tmp
+ifneq (,$(filter $(DEB_TARGET_ARCH), $(multilib_archs)))
+	( \
+		echo 'gcc:multilib=gcc-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gxx:multilib=g++-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gobjc:multilib=gobjc-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gobjcxx:multilib=gobjc++-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gfortran:multilib=gfortran-$(BASE_VERSION)-multilib$(TS)'; \
+	) >> debian/substvars.local.tmp
+endif
+ifeq ($(with_libssp),yes)
+	echo 'dep:libssp=libssp$(SSP_SONAME)' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib32fortran),yes)
+	echo 'dep:libfortranbiarch=lib32gfortran$(FORTRAN_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib32objc),yes)
+	echo 'dep:libobjcbiarch=lib32objc$(OBJC_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib32ffi),yes)
+	echo 'sug:libffidev=lib32ffi$(FFI_SONAME)' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib32mudflap),yes)
+	echo 'dep:libmudflapbiarch=lib32mudflap$(MUDFLAP_SONAME)' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib32ssp),yes)
+	echo 'dep:libsspbiarch=lib32ssp$(SSP_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib64fortran),yes)
+	echo 'dep:libfortranbiarch=lib64gfortran$(FORTRAN_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib64objc),yes)
+	echo 'dep:libobjcbiarch=lib64objc$(OBJC_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib64ffi),yes)
+	echo 'dep:libffidev=lib64ffi$(FFI_SONAME)' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib64mudflap),yes)
+	echo 'dep:libmudflapbiarch=lib64mudflap$(MUDFLAP_SONAME)' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_lib64ssp),yes)
+	echo 'dep:libsspbiarch=lib64ssp$(SSP_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifneq ($(with_standalone_gcj),yes)
+	echo 'dep:gcj=gcc$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	echo 'dep:prctl=prctl' >> debian/substvars.local.tmp
+endif
+	[ -e debian/substvars.local ] \
+	  && cmp -s debian/substvars.local debian/substvars.local.tmp \
+	  && rm -f debian/substvars.local.tmp && exit 0; \
+	  mv debian/substvars.local.tmp debian/substvars.local; \
+	  touch $(control_stamp)
+
+parameters-file:
+	rm -f debian/rules.parameters.tmp
+	( \
+		echo '# configuration parameters taken from upstream source files'; \
+		echo 'GCC_VERSION	:= $(GCC_VERSION)'; \
+		echo 'NEXT_GCC_VERSION	:= $(NEXT_GCC_VERSION)'; \
+		echo 'BASE_VERSION	:= $(BASE_VERSION)'; \
+		echo 'SOURCE_VERSION	:= $(SOURCE_VERSION)'; \
+		echo 'DEB_VERSION	:= $(DEB_VERSION)'; \
+		echo 'DEB_EVERSION	:= $(DEB_EVERSION)'; \
+		echo 'GPC_BASE_VERSION	:= $(GPC_BASE_VERSION)'; \
+		echo 'GDC_BASE_VERSION  := $(GDC_BASE_VERSION)'; \
+		echo 'DEB_GPC_VERSION	:= $(DEB_GPC_VERSION)'; \
+		echo 'DEB_GDC_VERSION	:= $(DEB_GDC_VERSION)'; \
+		echo 'DEB_SOVERSION	:= $(DEB_SOVERSION)'; \
+		echo 'DEB_SOEVERSION	:= $(DEB_SOEVERSION)'; \
+		echo 'DEB_LIBGCC_SOVERSION	:= $(DEB_LIBGCC_SOVERSION)'; \
+		echo 'DEB_LIBGCC_VERSION	:= $(DEB_LIBGCC_VERSION)'; \
+		echo 'DEB_STDCXX_SOVERSION	:= $(DEB_STDCXX_SOVERSION)'; \
+		echo 'DEB_GCJ_SOVERSION	:= $(DEB_GCJ_SOVERSION)'; \
+		echo 'PKG_GCJ_EXT	:= $(PKG_GCJ_EXT)'; \
+		echo 'PKG_LIBGCJ_EXT	:= $(PKG_LIBGCJ_EXT)'; \
+		echo 'DEB_FFI_SOVERSION	:= $(DEB_FFI_SOVERSION)'; \
+		echo 'GCC_SONAME	:= $(GCC_SONAME)'; \
+		echo 'CXX_SONAME	:= $(CXX_SONAME)'; \
+		echo 'FORTRAN_SONAME	:= $(FORTRAN_SONAME)'; \
+		echo 'OBJC_SONAME	:= $(OBJC_SONAME)'; \
+		echo 'GCJ_SONAME	:= $(GCJ_SONAME)'; \
+		echo 'GNAT_VERSION	:= $(GNAT_VERSION)'; \
+		echo 'GNAT_SONAME	:= $(GNAT_SONAME)'; \
+		echo 'FFI_SONAME	:= $(FFI_SONAME)'; \
+		echo 'MUDFLAP_SONAME	:= $(MUDFLAP_SONAME)'; \
+		echo 'SSP_SONAME	:= $(SSP_SONAME)'; \
+		echo 'LIBC_DEP		:= $(LIBC_DEP)'; \
+	) > debian/rules.parameters.tmp
+	[ -e debian/rules.parameters ] \
+	  && cmp -s debian/rules.parameters debian/rules.parameters.tmp \
+	  && rm -f debian/rules.parameters.tmp && exit 0; \
+	  mv debian/rules.parameters.tmp debian/rules.parameters; \
+	  touch $(control_stamp)
+
+versioned-files:
+	fs=`echo debian/*-BV* debian/*GCJ* debian/*CXX* debian/*LC* debian/*FFI*|sort -u`; \
+	for f in $$fs; do \
+	  [ -f $$f ] || echo "CANNOT FIND $$f"; \
+	  [ -f $$f ] || continue; \
+	  f2=$$(echo $$f \
+		| sed 's/BV/$(BASE_VERSION)/;s/PV/$(GPC_BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LGCJ/$(PKG_LIBGCJ_EXT)/;s/GCJ/$(PKG_GCJ_EXT)/;s/LC/$(GCC_SONAME)/;s/FFI/$(FFI_SONAME)/'); \
+	  sed -e 's/@BV@/$(BASE_VERSION)/g' \
+	      -e 's/@PV@/$(GPC_BASE_VERSION)/g' \
+	      -e 's/@CXX@/$(CXX_SONAME)/g' \
+	      -e 's/@LGCJ@/$(PKG_LIBGCJ_EXT)/g' \
+	      -e 's/@GCJ@/$(PKG_GCJ_EXT)/g' \
+	      -e 's/@LC@/$(GCC_SONAME)/g' \
+	      -e 's/@FFI@/$(FFI_SONAME)/g' \
+	      -e 's/@browser_dirs@/$(browser_plugin_dirs)/g' \
+	      -e 's/@GFDL@/$(if $(filter yes,$(GFDL_INVARIANT_FREE)),#)/g' \
+	    $$f > $$f2; \
+	  touch -r $$f $$f2; \
+	done
--- gcc-4.1-4.1.2.orig/debian/gij-BV.prerm
+++ gcc-4.1-4.1.2/debian/gij-BV.prerm
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+update-alternatives --quiet --remove java /usr/bin/gij-@BV@
+update-alternatives --quiet --remove rmiregistry /usr/bin/grmiregistry-@BV@
+update-alternatives --quiet --remove keytool /usr/bin/gkeytool-@BV@
+update-alternatives --quiet --remove orbd /usr/bin/gorbd-@BV@
+update-alternatives --quiet --remove rmid /usr/bin/grmid-@BV@
+update-alternatives --quiet --remove serialver /usr/bin/gserialver-@BV@
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/source.lintian-overrides
+++ gcc-4.1-4.1.2/debian/source.lintian-overrides
@@ -0,0 +1 @@
+gcc-4.1: invalid-arch-string-in-source-relation
--- gcc-4.1-4.1.2.orig/debian/fastjar.prerm
+++ gcc-4.1-4.1.2/debian/fastjar.prerm
@@ -0,0 +1,16 @@
+#! /bin/sh -e
+
+if [ -f /usr/share/info/fastjar.info.gz ]; then
+  install-info --quiet --remove fastjar
+else
+  # GFDL invariant free
+  true
+fi
+
+if [ "$1" != "upgrade" ]; then
+  update-alternatives --quiet --remove jar /usr/bin/fastjar
+fi
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/gnat-BV-doc.prerm
+++ gcc-4.1-4.1.2/debian/gnat-BV-doc.prerm
@@ -0,0 +1,7 @@
+#! /bin/sh -e
+
+install-info --quiet --remove gnat_ugn_unw-@BV@
+install-info --quiet --remove gnat_rm-@BV@
+install-info --quiet --remove gnat-style-@BV@
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gnat-BV.overrides
+++ gcc-4.1-4.1.2/debian/gnat-BV.overrides
@@ -0,0 +1 @@
+gnat-@BV@: bad-permissions-for-ali-file
--- gcc-4.1-4.1.2.orig/debian/README.cross
+++ gcc-4.1-4.1.2/debian/README.cross
@@ -0,0 +1,149 @@
+Building cross-compiler Debian packages
+---------------------------------------
+
+It is possible to build C and C++ cross compilers and support libraries
+from gcc-4.0 source package. This document describes how to do so.
+Cross-compiler build support is not perfect yet, please send fixes
+and improvements to debian-gcc@lists.debian.org and 
+debian-embedded@lists.debian.org
+
+Before you start, you should probably check available pre-built
+cross-toolchain debs. Available at http://www.emdebian.org
+
+Old patches could be reached at
+  http://zigzag.lvk.cs.msu.su/~nikita/debian/
+  
+If they are no longer there, you may check EmDebian web site at
+  http://www.emdebian.org/
+or ask debian-embedded@lists.debian.org for newer location.
+
+Please check http://bugs.debian.org/391445 if you are about building
+gcc-4.1 or above.
+
+Most of them has been merged with gcc debian sources.
+
+0. What's wrong with toolchain-source approach
+
+Package toolchain-source contains sources for binutils and gcc, as well as
+some support scripts to build cross-compiler packages. They seem to work.
+
+However, there is one fundamental problem with this approach.
+Gcc package is actively maintained and frequently updated. These updates
+do contain bug fixes and improvements, especially for non-x86 architectures.
+Cross-compilers built using toolchain-source will not get those fixes unless
+toolchain-source package is updated after each binutils and gcc update.
+The later is not hapenning in real life. For example, toolchain-source
+was upgraded from gcc-3.2 to gcc-3.3 half a year later than gcc-3.3 became
+Debian default compiler.
+
+Keeping toolchain-source package up-to-date requires lots of work, and seems
+to be a waste of time. It is much better to build cross-compilers directly
+from gcc source package.
+
+
+1. What is needed to build a cross-compiler from gcc-4.1 source
+
+1.1. dpkg-cross package
+
+Dpkg-cross package contains several tools to manage cross-compile environment.
+
+It can convert native debian library and lib-dev packages for the target
+architecture to binary-all packages that keep libraries and headers under
+/usr/$(TARGET)/.
+
+Also it contains helper tools for cross-compiling debian packages. Some of
+these tools are used while building libgcc1 and libstdc++ library packages.
+The resulting library packages follow the same convensions as library packages
+converted by dpkg-cross.
+
+Currently, at least version 1.18 of dpkg-cross is needed for cross-gcc
+package build. Version 1.32 of dpkg-cross is needed in order to build gcc-4.1.
+
+1.2. cross-binutils for the target
+
+You need cross-binutils for your target to build cross-compiler.
+Binutils-multiarch package will not work because it does not provide cross-
+assemblers.
+
+If you don't want to use pre-built cross-binutils packages, you may build
+your own from binutils debian source package, using patches posted to
+bug #231707. Please use the latest of patch versions available there.
+
+Alternatively, you may use toolchain-source package to build cross-binutils
+(but in this case you will probably also want to use toolchain-source
+to build cross-compiler itself). However, multilib'ed cross-compilers may
+not build or work with these binutils.
+
+1.3. libc for target
+
+You also need libc library and development packages for the target
+architecture installed.
+
+To get those, download linux-kernel-headers, libc6, and libc6-dev binary
+debs for your target, convert those using dpkg-cross -b, and install
+resulting -arch-cross debs. Consult dpkg-cross manual page for more
+information.
+
+Building with/for alternative libc's is not supported yet (but this is in
+TODO).
+
+Note that if you plan to use your cross-toolchain to develop kernel drivers
+or similar low-level things, you will probably also need kernel headers
+for the exact kernel version that your target hardware uses.
+
+
+2. Building cross-compiler packages
+
+Get gcc-4.1 source package.
+
+Unpack it using dpkg-source -x, and cd to the package directory.
+
+Set GCC_TARGET environment variable to the target architectire name. Note
+that currently you should use debian architecture name (i.e 'powerpc' or 'arm'),
+not GNU system type (i.e. 'powerpc-linux' or 'arm-linux'). Setting GCC_TARGET
+to GNU system type will cause cross-compiler build to fail.
+
+Instead of setting GCC_TARGET, target architecture name may be put into
+debian/target file. If both GCC_TARGET is defined and debian/target file
+exists, GCC_TARGET is used.
+
+Run debian/rules control. This will change debian/control file,
+adjusting build-depends.  By default, the packages will depend on the
+system -base package.  This means future upgrades of the system gcc
+will require you to keep your cross compilers in sync by rebuilding.
+If you want to depend on a separate -base package for your cross
+compiler, specify DEB_CROSS_INDEPENDENT=yes on the command line,
+
+You can then build with either
+
+$ GCC_TARGET=[arch] dpkg-buildpackage -rfakeroot
+or
+$ GCC_TARGET=[arch] DEB_CROSS_INDEPENDENT=yes dpkg-buildpackage -rfakeroot
+
+3. Using crosshurd
+
+Jeff Bailey <jbailey@raspberryginger.com> suggests alternate way to setup
+environment to build cross-compiler, using 'crosshurd' package. 
+Crosshurd is like debootstrap but cross-arch, and works on the Hurd,
+Linux and FreeBSD.  (The name is historical).
+
+If you setup your environment with crosshurd, you will need to fix symlinks
+in lib and usr/lib to be relative instead of absolute. For example:
+
+lrwxrwxrwx    1 root     root           20 2004-05-06 23:02 libcom_err.so -> /lib/libcom_err.so.2
+
+Needs to be changed to:
+
+lrwxrwxrwx    1 root     root           20 2004-05-06 23:02 libcom_err.so -> ../../lib/libcom_err.so.2
+
+Also, if you choose this method, set the environment variable 'with_sysroot'
+to point to the ABSOLUTE PATH where the crosshurd was done.
+
+Note however that build-depends of cross-gcc and dependencies in generated
+libgcc1 and libstdc++ packages assume that you use dpkg-cross to set up
+your environment, and may be wrong or incomplete if you use alternate methods.
+But probably you don't care.
+
+--
+Nikita V. Youshchenko <yoush@debian.org> - Jun 2004
+Hector Oron Martinez  <hector.oron@gmail.com> - Oct 2006
--- gcc-4.1-4.1.2.orig/debian/libgcjLGCJ.postinst
+++ gcc-4.1-4.1.2/debian/libgcjLGCJ.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libgcj@GCJ@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	  rm -rf /usr/share/doc/libgcj@GCJ@
+	  ln -s gcj-@BV@-base /usr/share/doc/libgcj@GCJ@
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/libgcj-common.preinst
+++ gcc-4.1-4.1.2/debian/libgcj-common.preinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    upgrade|install)
+	if [ -n "$2" ] && [ -h /usr/share/doc/libgcj-common ] \
+	   && dpkg --compare-versions "$2" lt 1:4.0.2-10
+	then
+	    rm -f /usr/share/doc/libgcj-common
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-hppa64.postinst
+++ gcc-4.1-4.1.2/debian/gcc-BV-hppa64.postinst
@@ -0,0 +1,13 @@
+#! /bin/sh -e
+
+prio=$(echo @BV@ | sed 's/\.//g')
+
+update-alternatives --quiet \
+	--install /usr/bin/hppa64-linux-gnu-gcc \
+		hppa64-linux-gnu-gcc \
+		/usr/bin/hppa64-linux-gnu-gcc-@BV@ \
+		$prio
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/libgccLC.postinst
+++ gcc-4.1-4.1.2/debian/libgccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libgcc@LC@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcj-BV.postinst
+++ gcc-4.1-4.1.2/debian/gcj-BV.postinst
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+
+if [ -d /usr/share/doc/gcc-@BV@-base/java ] && [ ! -h /usr/share/doc/gcc-@BV@-base/java ]; then
+    rm -rf /usr/share/doc/gcc-@BV@-base/java
+    ln -s ../gcj-@BV@-base /usr/share/doc/gcc-@BV@-base/java
+fi
+
+prio=$(echo @BV@ | sed 's/\.//g')
+update-alternatives --quiet \
+    --install /usr/bin/javac javac /usr/bin/gcj-wrapper-@BV@ $prio \
+    @GFDL@--slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/share/man/man1/gcj-wrapper-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/jar jar /usr/bin/gjar-@BV@ $prio \
+    --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/share/man/man1/gjar-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/jarsigner jarsigner /usr/bin/gjarsigner-@BV@ $prio \
+    --slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/share/man/man1/gjarsigner-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/javah javah /usr/bin/gjavah-@BV@ $prio \
+    --slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/share/man/man1/gjavah-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/native2ascii native2ascii /usr/bin/gnative2ascii-@BV@ $prio \
+    --slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/share/man/man1/gnative2ascii-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/rmic rmic /usr/bin/grmic-@BV@ $prio \
+    --slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/share/man/man1/grmic-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/tnameserv tnameserv /usr/bin/gtnameserv-@BV@ $prio \
+    --slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/share/man/man1/gtnameserv-@BV@.1.gz
+
+if [ -f /usr/share/info/gcj-@BV@.info.gz ]; then
+  install-info --quiet --section "Development" "Development" \
+	/usr/share/info/gcj-@BV@.info.gz
+else
+  # GFDL invariant free
+  :
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/dummy.texi
+++ gcc-4.1-4.1.2/debian/dummy.texi
@@ -0,0 +1 @@
+@c This file is empty because the original one has a non DFSG free license (GFDL)
--- gcc-4.1-4.1.2.orig/debian/libmudflap.copyright
+++ gcc-4.1-4.1.2/debian/libmudflap.copyright
@@ -0,0 +1,30 @@
+This package was debianized by Matthias Klose <doko@debian.org> on
+Mon,  5 Jul 2004 21:29:57 +0200
+
+Mudflap is part of GCC.
+
+Authors: Frank Ch. Eigler <fche@redhat.com>, Graydon Hoare <graydon@redhat.com>
+
+Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+GCC 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.  See the GNU General Public License
+for more details.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-doc.doc-base.gcc
+++ gcc-4.1-4.1.2/debian/gcc-BV-doc.doc-base.gcc
@@ -0,0 +1,14 @@
+Document: gcc-@BV@
+Title: The GNU C and C++ compiler
+Author: Various
+Abstract: This manual documents how to run, install and port the GNU compiler,
+ as well as its new features and incompatibilities, and how to report bugs.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/gcc.html
+Files: /usr/share/doc/gcc-@BV@-base/gcc.html
+
+Format: info
+Index: /usr/share/info/gcc-@BV@.info.gz
+Files: /usr/share/info/gcc-@BV@*
--- gcc-4.1-4.1.2.orig/debian/gpc-BV-doc.prerm
+++ gcc-4.1-4.1.2/debian/gpc-BV-doc.prerm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+if [ -f /usr/share/info/gpc-@BV@.info.gz ]; then
+  install-info --quiet --remove gpc-@BV@
+else
+  # GFDL invariant free
+  true
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/lib32gccLC.postinst
+++ gcc-4.1-4.1.2/debian/lib32gccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib32gcc@LC@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/cpp-BV-doc.postinst
+++ gcc-4.1-4.1.2/debian/cpp-BV-doc.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	install-info --quiet --section "Development" "Development" \
+	    /usr/share/info/cpp-@BV@.info.gz
+
+	install-info --quiet --section "Development" "Development" \
+	    /usr/share/info/cppinternals-@BV@.info.gz
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gij-wrapper-BV.1
+++ gcc-4.1-4.1.2/debian/gij-wrapper-BV.1
@@ -0,0 +1,22 @@
+.TH GIJ-WRAPPER 1 "August 11, 2001" gij-wrapper "Java User's Manual"
+.SH NAME
+gij-wrapper \- a wrapper around gij
+
+.SH SYNOPSIS
+gij-wrapper [\fB\s-1OPTION\s0\fR] ... \fI\s-1JARFILE\s0\fR [\fI\s-1ARGS\s0\fR...]
+.PP
+gij-wrapper [\fB\-jar\fR] [\fB\s-1OPTION\s0\fR] ... \fI\s-1CLASS\s0\fR [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgij-wrapper\fR is a wrapper around gij(1) to be called as the java
+interpreter. Options different for java(1) and gij(1) are translated,
+options unknown to gij(1) are silently ignored.
+
+.SH OPTIONS
+See gij-@BV@(1) for a list of options that gij understands.
+
+.SH "SEE ALSO"
+.BR gij-@BV@(1)
+,
+.BR java(1)
--- gcc-4.1-4.1.2.orig/debian/gnat-BV-doc.postinst
+++ gcc-4.1-4.1.2/debian/gnat-BV-doc.postinst
@@ -0,0 +1,16 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	install-info --quiet --section "Development" "Development" \
+	    --description="GNAT (GNU Ada) User's Guide for Unix Platforms." \
+	    /usr/share/info/gnat_ugn_unw-@BV@.info
+	install-info --quiet --section "Development" "Development" \
+	    --description="GNAT (GNU Ada) Reference Manual." \
+	    /usr/share/info/gnat_rm-@BV@.info
+	install-info --quiet --section "Development" "Development" \
+	    --description="GNAT Coding Style." \
+	    /usr/share/info/gnat-style-@BV@.info
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/libgcjLGCJ.postrm
+++ gcc-4.1-4.1.2/debian/libgcjLGCJ.postrm
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    remove|purge)
+        # only purge if no other library is installed.
+        if [ -z "$(ls /usr/lib/libgcj.so.@GCJ@* 2>/dev/null)" ]; then
+	    rm -f /var/lib/gcj-@BV@/classmap.db
+	    rmdir --ignore-fail-on-non-empty /var/lib/gcj-@BV@ 2>&1 || true
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/porting.texi
+++ gcc-4.1-4.1.2/debian/porting.texi
@@ -0,0 +1,47 @@
+\input texinfo
+
+@setfilename porting.info
+@settitle Porting libstdc++-v3
+@setchapternewpage odd
+
+@ifinfo
+This file explains how to port libstdc++-v3 (the GNU C++ library) to 
+a new target.
+
+The documentation in this file was removed, because it is licencensed
+under a non DFSG conforming licencse.
+@end ifinfo
+
+@c ---------------------------------------------------------------------
+@c Titlepage
+@c ---------------------------------------------------------------------
+
+@titlepage
+@title Porting libstdc++-v3
+@author Mark Mitchell
+@page
+@vskip 0pt plus 1filll
+
+The documentation in this file was removed, because it is licencensed
+under a non DFSG conforming licencse.
+@end titlepage
+
+@c ---------------------------------------------------------------------
+@c Top
+@c ---------------------------------------------------------------------
+
+@node Top
+@top Porting libstdc++-v3
+
+This document explains how to port libstdc++-v3 (the GNU C++ library) to 
+a new target.
+
+The documentation in this file was removed, because it is licencensed
+under a non DFSG conforming licencse.
+
+@c ---------------------------------------------------------------------
+@c Epilogue
+@c ---------------------------------------------------------------------
+
+@contents
+@bye
--- gcc-4.1-4.1.2.orig/debian/gnat-BV-doc.doc-base.ug
+++ gcc-4.1-4.1.2/debian/gnat-BV-doc.doc-base.ug
@@ -0,0 +1,16 @@
+Document: gnat_ugn_unw-@BV@
+Title: GNAT User's Guide for Unix Platforms
+Author: Various
+Abstract: This guide describes the use of GNAT, a compiler and
+ software development toolset for the full Ada 95 programming language.
+ It describes the features of the compiler and tools, and details how
+ to use them to build Ada 95 applications.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/Ada/gnat_ugn_unw.html
+Files: /usr/share/doc/gcc-@BV@-base/Ada/gnat_ugn_unw.html
+
+Format: info
+Index: /usr/share/info/gnat_ugn_unw-@BV@.info.gz
+Files: /usr/share/info/gnat_ugn_unw-@BV@*
--- gcc-4.1-4.1.2.orig/debian/gij-BV.postrm
+++ gcc-4.1-4.1.2/debian/gij-BV.postrm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+case "$1" in
+    purge)
+	rm -f /var/lib/gcj-@BV@/classmap.db
+esac
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/gccbug.1
+++ gcc-4.1-4.1.2/debian/gccbug.1
@@ -0,0 +1,178 @@
+.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  | will give a
+.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GCCBUG 1"
+.TH GCCBUG 1 "2003-06-03" "gcc-3.4" "GNU"
+.SH "NAME"
+gccbug \- Reporting GCC Bugs
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gccbug
+       [ \fB\-\-cc\fR \fImail-address\fR ]
+       [ \fB\-\-version\fR ] | [ \fB\-\-help\fR ]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBgccbug\fR is a version of \s-1GNU\s0 \s-1GNATS\s0 send-pr configured for \s-1GCC\s0 bug
+reporting.
+.PP
+Invoking \fBgccbug\fR calls the editor named in your environment
+variable \fB\s-1VISUAL\s0\fR or \fB\s-1EDITOR\s0\fR on a problem report template.
+.PP
+Your bug reports play an essential role in making \s-1GCC\s0 reliable. However
+since the maintainers are very overloaded, please first make sure that:
+.IP "\(bu" 4
+The problem is not already known.  See
+<\fBhttp://gcc.gnu.org/bugs.html#known\fR> for a list of known bugs.
+If it isn't known, then you should report the problem.
+.Sp
+You can browse the bug database for bugs reported at
+<\fBhttp://gcc.gnu.org/cgi\-bin/gnatsweb.pl\fR>.
+.IP "\(bu" 4
+You include the information that makes for fixing the bug. See
+<\fBhttp://gcc.gnu.org/bugs.html#report\fR> for bug reporting instructions.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-cc\fR \fImail-address\fR" 4
+.IX Item "--cc mail-address"
+Specifies the mail-address to which the \s-1PR\s0 should be carbon\-copied.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Displays the \fBgccbug\fR version number and a usage summary.  No mail
+is sent.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Displays a usage summary for \fBgccbug\fR.  No mail is sent.
+.PP
+\&\fBgccbug\fR has more (undocumented) options, which may be
+unsupported by a future \s-1GCC\s0 bug tracking system.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgcc\fR\|(1), \fIsend\-pr\fR\|(1), \fIsend\-pr\fR\|(8), the info entries for \fIgcc\fR (node Bugs),
+and the online pages at <\fBhttp://gcc.gnu.org/bugs.html\fR>.
--- gcc-4.1-4.1.2.orig/debian/libgnat-BV.overrides
+++ gcc-4.1-4.1.2/debian/libgnat-BV.overrides
@@ -0,0 +1 @@
+libgnat-@BV@: package-name-doesnt-match-sonames
--- gcc-4.1-4.1.2.orig/debian/porting.html
+++ gcc-4.1-4.1.2/debian/porting.html
@@ -0,0 +1,30 @@
+<html lang="en">
+<head>
+<title>Porting libstdc++-v3</title>
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="description" content="Porting libstdc++-v3">
+<meta name="generator" content="makeinfo 4.6">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+--></style>
+</head>
+<body>
+<h1 class="settitle">Porting libstdc++-v3</h1>
+<div class="node">
+<p><hr>
+Node:&nbsp;<a name="Top">Top</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Operating%20system">Operating system</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
+<br>
+</div>
+
+The documentation in this file was removed, because it is licencensed
+under a non DFSG conforming licencse.
+
+</body></html>
--- gcc-4.1-4.1.2.orig/debian/dh_doclink
+++ gcc-4.1-4.1.2/debian/dh_doclink
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+pkg=`echo $1 | sed 's/^-p//'`
+target=$2
+
+[ -d debian/$pkg/usr/share/doc ] || mkdir -p debian/$pkg/usr/share/doc
+if [ -d debian/$pkg/usr/share/doc/$p -a ! -h debian/$pkg/usr/share/doc/$p ]
+then
+    echo "WARNING: removing doc directory  $pkg"
+    rm -rf debian/$pkg/usr/share/doc/$pkg
+fi
+ln -sf $target debian/$pkg/usr/share/doc/$pkg
--- gcc-4.1-4.1.2.orig/debian/reduce-test-diff.awk
+++ gcc-4.1-4.1.2/debian/reduce-test-diff.awk
@@ -0,0 +1,33 @@
+#! /usr/bin/gawk -f
+
+BEGIN {
+	skip=0
+	warn=0
+}
+
+/^-(FAIL|ERROR|UNRESOLVED|WARNING)/ {
+	next
+}
+
+# only compare gcc, g++, g77 and objc results
+/=== treelang tests ===/ {
+	skip=1
+}
+
+# omit extra files appended to test-summary
+/^\+Compiler version/ {
+	skip=1
+}
+
+skip == 0 {
+	print
+	next
+}
+
+/^\+(FAIL|ERROR|UNRESOLVED|WARNING)/ {
+	warn=1
+}
+
+END {
+	exit warn
+}
--- gcc-4.1-4.1.2.orig/debian/runcheck.sh
+++ gcc-4.1-4.1.2/debian/runcheck.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+mkdir -p build
+
+cat >build/runcheck.c <<EOF
+#include <stdio.h>
+int main()
+{
+	return printf("yes\n") != 4;
+}
+EOF
+
+if m=$(${CC:-gcc} -o build/runcheck build/runcheck.c 2>&1); then
+    m=$(build/runcheck 2>&1)
+    echo ${m#* } > build/runcheck.out
+    echo ${m#* }
+else
+    echo ${m##*:} > build/runcheck.out
+    echo ${m##*:}
+fi
--- gcc-4.1-4.1.2.orig/debian/locale-gen
+++ gcc-4.1-4.1.2/debian/locale-gen
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+LOCPATH=`pwd`/locales
+export LOCPATH
+
+[ -d $LOCPATH ] || mkdir -p $LOCPATH
+
+umask 022
+
+echo "Generating locales..."
+while read locale charset; do
+	case $locale in \#*) continue;; esac
+	[ -n "$locale" -a -n "$charset" ] || continue
+	echo -n "  `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"
+	echo -n ".$charset"
+	echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`
+	echo -n '...'
+        if [ -f $LOCPATH/$locale ]; then
+	    input=$locale
+	else
+            input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`
+	fi
+	localedef -i $input -c -f $charset $LOCPATH/$locale #-A /etc/locale.alias
+	echo ' done'; \
+done <<EOF
+# This file lists locales that the libstdc++ testsuite depends on
+de_DE			ISO-8859-1
+de_DE@euro		ISO-8859-15
+en_HK			ISO-8859-1
+en_PH			ISO-8859-1
+en_US			ISO-8859-1
+en_US.ISO-8859-1	ISO-8859-1
+en_US.ISO-8859-15	ISO-8859-15
+en_US.UTF-8		UTF-8
+es_MX			ISO-8859-1
+fr_FR			ISO-8859-1
+fr_FR@euro		ISO-8859-15
+it_IT			ISO-8859-1
+ja_JP.eucjp		EUC-JP
+se_NO.UTF-8		UTF-8
+EOF
+
+echo "Generation complete."
--- gcc-4.1-4.1.2.orig/debian/control
+++ gcc-4.1-4.1.2/debian/control
@@ -0,0 +1,392 @@
+Source: gcc-4.1
+Section: devel
+Priority: optional
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Uploaders: Matthias Klose <doko@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: dpkg-dev (>= 1.13.9), gcc-4.1-multilib [amd64 i386 powerpc ppc64 s390 sparc kfreebsd-amd64], libc6.1-dev (>= 2.5) [alpha ia64] | libc0.3-dev (>= 2.5) [hurd-i386] | libc0.1-dev (>= 2.5) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= 2.5), libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64], lib64gcc1 [i386 powerpc sparc s390], lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64 kfreebsd-amd64], autogen, libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf, autoconf2.13, automake1.9, libtool, gawk, expect-tcl8.3 [hppa], dejagnu [!hurd-i386], bzip2, binutils (>= 2.17cvs20070426) | binutils-multiarch (>= 2.17cvs20070426), binutils-hppa64 (>= 2.17cvs20070426) [hppa], debhelper (>= 5.0), gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libmpfr-dev (>= 2.3.0~rc1.dfsg.1) [!avr], locales [!hurd-i386 !m68k], procps [!hurd-i386], sharutils, realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81)
+Build-Depends-Indep: doxygen (>= 1.4.2), graphviz (>= 2.2), gsfonts-x11, 
+
+Package: gcc-4.1-base
+Architecture: any
+Section: libs
+Priority: optional
+Description: The GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+
+Package: libgcc1
+Architecture: any
+Section: libs
+Priority: required
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: libgcc2
+Architecture: m68k
+Section: libs
+Priority: required
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: libgcc4
+Architecture: hppa
+Section: libs
+Priority: required
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: lib64gcc1
+Architecture: i386 powerpc sparc s390
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${dep:libcbiarch}
+Conflicts: libgcc1 (<= 1:3.3-0pre9)
+Description: GCC support library (64bit)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: lib32gcc1
+Architecture: amd64 ppc64 kfreebsd-amd64
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${dep:libcbiarch}
+Description: GCC support library (32 bit Version)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: gcc-4.1
+Architecture: any
+Section: devel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), cpp-4.1 (= ${gcc:Version}), binutils (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libunwinddev}, ${shlibs:Depends}
+Recommends: ${dep:libcdev}
+Suggests: ${gcc:multilib}, gcc-4.1-doc (>= ${gcc:SoftVersion}), gcc-4.1-locales (>= ${gcc:SoftVersion}), libmudflap0-dev (>= ${gcc:Version})
+Provides: c-compiler, libssp0-dev
+Conflicts: libssp0-dev (<< 4.1.1-6)
+Replaces: gcj-4.1 (<< 4.1.1), libssp0-dev (<< 4.1.1-6)
+Description: The GNU C compiler
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+
+Package: gcc-4.1-multilib
+Architecture: amd64 i386 kfreebsd-amd64 powerpc ppc64 s390 sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), gcc-4.1 (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarch}, ${dep:libsspbiarch}, ${dep:libgompbiarch}, ${shlibs:Depends}
+Recommends: ${dep:libmudflapbiarch}
+Replaces: gcc-4.1 (<< 4.1.2-4)
+Description: The GNU C compiler (multilib files)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: gcc-4.1-hppa64
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.4-hppa64 (<= 3.4.1-3)
+Description: The GNU C compiler (cross compiler for hppa64)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+
+Package: cpp-4.1
+Architecture: any
+Section: interpreters
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Suggests: gcc-4.1-locales (>= ${gcc:SoftVersion})
+Conflicts: gcj-4.1 (<< 4.1.1), gnat-4.1 (<= 4.1.1-22)
+Replaces: gcj-4.1 (<< 4.1.1)
+Description: The GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+
+Package: gcc-4.1-locales
+Architecture: all
+Section: devel
+Priority: optional
+Depends: gcc-4.1-base (>= ${gcc:SoftVersion}), cpp-4.1 (>= ${gcc:SoftVersion})
+Recommends: gcc-4.1 (>= ${gcc:SoftVersion})
+Description: The GNU C compiler (native language support files)
+ Native language support for GCC. Lets GCC speak your language,
+ if translations are available.
+ .
+ Please do NOT submit bug reports in other languages than "C".
+ Always reset your language settings to use the "C" locales.
+
+Package: g++-4.1
+Architecture: any
+Section: devel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), gcc-4.1 (= ${gcc:Version}), libstdc++6-4.1-dev (= ${gcc:Version}), ${shlibs:Depends}
+Provides: c++-compiler, c++abi2-dev
+Suggests: ${gxx:multilib}, gcc-4.1-doc (>= ${gcc:SoftVersion})
+Description: The GNU C++ compiler
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+
+Package: g++-4.1-multilib
+Architecture: amd64 i386 kfreebsd-amd64 powerpc ppc64 s390 sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), g++-4.1 (= ${gcc:Version}), gcc-4.1-multilib (= ${gcc:Version}), ${dep:libcxxbiarch}, ${shlibs:Depends}
+Suggests: ${dep:libcxxbiarchdbg}
+Replaces: libstdc++6-4.1-dev (<< 4.1.2-4)
+Description: The GNU C++ compiler (multilib files)
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: libmudflap0
+Architecture: any
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Description: GCC mudflap shared support libraries
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap0
+Architecture: amd64 ppc64 kfreebsd-amd64
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (32bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap0
+Architecture: i386 powerpc sparc s390
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (64bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libmudflap0-dev
+Architecture: any
+Section: libdevel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), libmudflap0 (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}
+Suggests: ${sug:libmudflapdev}
+Conflicts: libmudflap0-4.2-dev
+Description: GCC mudflap support libraries (development files)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+ .
+ This package contains the headers and the static libraries.
+
+Package: protoize
+Architecture: any
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), gcc-4.1 (>= ${gcc:Version}), ${shlibs:Depends}
+Description: Create/remove ANSI prototypes from C code
+ "protoize" can be used to add prototypes to a program, thus converting
+ the program to ANSI C in one respect.  The companion program "unprotoize"
+ does the reverse: it removes argument types from any prototypes
+ that are found.
+
+Package: libffi4
+Section: libs
+Architecture: any
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Description: Foreign Function Interface library runtime
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: lib32ffi4
+Section: libs
+Architecture: amd64 ppc64 kfreebsd-amd64
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libffi4 (<< 4.1)
+Description: Foreign Function Interface library runtime (32bit)
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: lib64ffi4
+Section: libs
+Architecture: i386 powerpc sparc s390
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libffi4 (<< 4.1)
+Description: Foreign Function Interface library runtime (64bit)
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: libffi4-dev
+Section: libdevel
+Architecture: any
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), libffi4 (>= ${gcc:Version})
+Suggests: ${sug:libffidev}
+Provides: libffi-dev
+Conflicts: libffi1-dev, libffi2-dev, libffi3-dev, libffi-dev, libffi
+Description: Foreign Function Interface library (development files)
+ This package contains the headers and static library files necessary for
+ building programs which use libffi.
+ .
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: libstdc++6
+Architecture: any
+Section: libs
+Priority: required
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}
+Conflicts: scim (<< 1.4.2-1)
+Description: The GNU Standard C++ Library v3
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: lib32stdc++6
+Architecture: amd64 ppc64 kfreebsd-amd64
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), lib32gcc1
+Description: The GNU Standard C++ Library v3 (32 bit Version)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+
+Package: lib64stdc++6
+Architecture: i386 powerpc sparc s390
+Section: libs
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), ${shlibs:Depends}, lib64gcc1
+Description: The GNU Standard C++ Library v3 (64bit)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: libstdc++6-4.1-dev
+Architecture: any
+Section: libdevel
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), g++-4.1 (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), ${dep:libcdev}
+Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev
+Suggests: libstdc++6-4.1-doc
+Provides: libstdc++-dev
+Description: The GNU Standard C++ Library v3 (development files)
+ This package contains the headers and static library files necessary for
+ building C++ programs which use libstdc++.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: libstdc++6-4.1-pic
+Architecture: any
+Section: libdevel
+Priority: extra
+Depends: gcc-4.1-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), libstdc++6-4.1-dev (= ${gcc:Version})
+Description: The GNU Standard C++ Library v3 (shared library subset kit)
+ This is used to develop subsets of the libstdc++ shared libraries for
+ use on custom installation floppies and in embedded systems.
+ .
+ Unless you are making one of those, you will not need this package.
+
+Package: libstdc++6-4.1-dbg
+Architecture: any
+Section: libdevel
+Priority: extra
+Depends: gcc-4.1-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), ${shlibs:Depends}
+Recommends: libstdc++6-4.1-dev (= ${gcc:Version})
+Conflicts: libstdc++5-dbg, libstdc++5-3.3-dbg, libstdc++6-dbg, libstdc++6-4.0-dbg
+Description: The GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: lib32stdc++6-4.1-dbg
+Architecture: amd64 ppc64 kfreebsd-amd64
+Section: libdevel
+Priority: extra
+Depends: gcc-4.1-base (= ${gcc:Version}), lib32stdc++6 (>= ${gcc:Version}), libstdc++6-4.1-dev (= ${gcc:Version})
+Conflicts: lib32stdc++6-dbg, lib32stdc++6-4.0-dbg
+Description: The GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: lib64stdc++6-4.1-dbg
+Architecture: i386 powerpc sparc s390
+Section: libdevel
+Priority: extra
+Depends: gcc-4.1-base (= ${gcc:Version}), lib64stdc++6 (>= ${gcc:Version}), libstdc++6-4.1-dev (= ${gcc:Version})
+Conflicts: lib64stdc++6-dbg, lib64stdc++6-4.0-dbg
+Description: The GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: libstdc++6-4.1-doc
+Architecture: all
+Section: doc
+Priority: optional
+Depends: gcc-4.1-base (>= ${gcc:SoftVersion})
+Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, libstdc++6-4.0-doc
+Description: The GNU Standard C++ Library v3 (documentation files)
+ This package contains documentation files for the GNU stdc++ library.
+ .
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+
+Package: gcc-4.1-soft-float
+Architecture: arm armeb
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), gcc-4.1 (= ${gcc:Version}), ${shlibs:Depends}
+Replaces: gcc-soft-float-ss
+Description: The soft-floating-point gcc libraries (arm)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+
+Package: fixincludes
+Architecture: any
+Priority: optional
+Depends: gcc-4.1-base (= ${gcc:Version}), gcc-4.1 (= ${gcc:Version}), ${shlibs:Depends}
+Description: Fix non-ANSI header files
+ FixIncludes was created to fix non-ANSI system header files. Many
+ system manufacturers supply proprietary headers that are not ANSI compliant.
+ The GNU compilers cannot compile non-ANSI headers. Consequently, the
+ FixIncludes shell script was written to fix the header files.
+ .
+ Not all packages with header files are installed on the system, when the
+ package is built, so we make fixincludes available at build time of other
+ packages, such that checking tools like lintian can make use of it.
+
+Package: gcc-4.1-source
+Architecture: all
+Priority: optional
+Depends: gcc-4.1-base (>= ${gcc:SoftVersion}), make (>= 3.81)
+Description: Source of the GNU Compiler Collection
+ This package contains the sources and patches which are needed to
+ build the GNU Compiler Collection (GCC).
--- gcc-4.1-4.1.2.orig/debian/libgcjGCJ-dev.overrides
+++ gcc-4.1-4.1.2/debian/libgcjGCJ-dev.overrides
@@ -0,0 +1 @@
+libgcj@GCJ@-dev: library-not-linked-against-libc
--- gcc-4.1-4.1.2.orig/debian/README.ssp
+++ gcc-4.1-4.1.2/debian/README.ssp
@@ -0,0 +1,28 @@
+Stack smashing protection is a feature of GCC that enables a program to
+detect buffer overflows and immediately terminate execution, rather than
+continuing execution with corrupt internal data structures. It uses
+"canaries" and local variable reordering to reduce the likelihood of
+stack corruption through buffer overflows.
+
+Options that affect stack smashing protection:
+
+-fstack-protector
+    Enables protection for functions that are vulnerable to stack
+    smashing, such as those that call alloca() or use pointers.
+
+-fstack-protector-all
+    Enables protection for all functions.
+
+-Wstack-protector
+    Warns about functions that will not be protected. Only active when
+    -fstack-protector has been used.
+
+Applications built with stack smashing protection should link with the
+ssp library by using the option "-lssp" for systems with glibc-2.3.x or
+older; glibc-2.4 and newer versions provide this functionality in libc.
+
+The Debian architectures alpha, hppa, ia64, m68k, mips, mipsel do not
+have support for stack smashing protection.
+
+More documentation can be found at the project's website:
+http://researchweb.watson.ibm.com/trl/projects/security/ssp/
--- gcc-4.1-4.1.2.orig/debian/README.Debian
+++ gcc-4.1-4.1.2/debian/README.Debian
@@ -0,0 +1,394 @@
+		The Debian GNU Compiler Collection setup
+		========================================
+
+Please see the README.Debian in /usr/share/doc/gcc, contained in the
+gcc package for a description of the setup of the different compiler
+versions.
+
+For general discussion about the Debian toolchain (GCC, glibc, binutils)
+please use the mailing list debian-toolchain@lists.debian.org; for GCC
+specific things, please use debian-gcc@lists.debian.org.  When in doubt
+use the debian-toolchain ML.
+
+
+Maintainers of these packages
+-----------------------------
+
+Matthias Klose <doko@debian.org>
+Ray Dassen <jdassen@debian.org>
+Jeff Bailey <jbailey@nisa.net>			(hurd-i386)
+Joel Baker <fenton@debian.org>			(netbsd-i386)
+Philip Blundell <pb@debian.org>			(arm-linux)
+Ben Collins <bcollins@debian.org>		(sparc-linux)
+Randolph Chung <tausq@debian.org>		(ia64-linux)
+Falk Hueffner <falk@debian.org>			(alpha-linux)
+Dan Jacobowitz <dan@debian.org>			(powerpc-linux)
+Thiemo Seufer <ths@networkno.de>		(mips*-linux)
+Matt Taggart <taggart@carmen.fc.hp.com>		(hppa-linux)
+Gerhard Tonn <GerhardTonn@swol.de>		(s390-linux)
+Roman Zippel <zippel@linux-m68k.org>		(m68k-linux)
+Ludovic Brenta <ludovic@ludovic-brenta.org>	(gnat)
+Arthur Loiret <arthur.loiret@gmail.com>		(gdc)
+
+===============================================================================
+
+Patches that Debian applied in this version:
+
+svn-updates:
+  SVN updates from the 4.1 branch upto 20081201.
+
+gcc-version:
+  Add package identification to the gcc version string
+
+gcc-textdomain:
+  Set gettext's domain and textdomain to the versioned package name.
+
+gcc-driver-extra-langs:
+  Add options and specs for languages that are not built from a source
+  (but built from separate sources).
+
+gcc-long-double:
+  Add --with{,out}-long-double-128 configure option.
+  Taken from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864#c14
+
+libstdc++-long-double:
+  PR target/25864, libstdc++-v3 parts.
+  Taken from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864#c13
+
+libstdc++-pic:
+  Build and install libstdc++_pic.a library.
+
+libstdc++-doclink:
+  adjust hrefs to point to the local documentation
+
+gcc-hash-style-both:
+  Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)
+
+gccbug:
+  Use sensible-editor instead of vi as fallback editor
+
+gccbug-posix:
+  Make gccbug POSIX compliant (patch by David Weinehall)
+  http://www.opengroup.org/onlinepubs/009695399/utilities/test.html
+
+boehm-gc-backport:
+  gcc/java / libjava backport / classpath-0.92
+
+boehm-gc-nocheck:
+  Disable running the boehm-gc testsuite. Hangs the buildd at least on hppa.
+
+boehm-gc-getnprocs:
+  boehm-gc/pthread_support.c (GC_get_nprocs): Use sysconf as fallback.
+
+fastjar-version:
+  Append GCC version to the fastjar version string.
+
+fastjar-doc:
+  fastjar.texi: Directly define the gcctabopt and gccoptlist macros.
+
+libstdc++-doxygen:
+  libstdc++ doxygen docs: Set SHORT_NAMES to YES
+
+pr20218:
+  Backport of PR middle-end/20218 to the 4.1 branch.
+
+pr20218-mips:
+  Backport from mainline for PR middle-end/20218, mips part.
+
+pr31868:
+  Backport from mainline for PR target/31868.
+
+gcc-directives-only:
+  Backport from trunk: -fdirectives-only (when preprocessing,
+  handle directives, but do not expand macros).
+
+arm-libffi:
+  Add closure support to libffi for arm
+
+libffi-backport:
+  libffi backport
+
+libffi-backport2:
+  Add missing bits for the libffi backport from the trunk
+  - parisc chunks
+  - missing testcases in testsuite/libffi.call
+
+libjava-backport-updates:
+  SVN updates from the gcc-4_1-branch-java-merge-20070117 branch upto 20070221.
+
+libjava-backport-updates2:
+  SVN updates from the gcc-4_1-rh-branch branch upto 20070428.
+
+libjava-backport-updates3:
+  SVN updates from the gcc-4_1-rh-branch branch upto 20070504.
+
+libjava-backport-updates4:
+  SVN updates from the gcc-4_1-rh-branch branch upto 20070718.
+
+pr32844:
+  backport PR classpath/32844 (java/util/EnumSet.java).
+
+pr32862:
+  Fix PR java/32862, bugs in EnumMap implementation.
+
+libjava-jar:
+  gjar: support @ arguments.
+
+libjava-visibility:
+  Reduce the number of symbols in libgcj.so by 20%; taken from the trunk.
+
+libjava-subdir:
+  - Set the libjava sublibdir to /usr/lib/gcj-4_1
+  - Set the default libgcj database dir to /var/lib/gcj-4.1
+
+libjava-jnipath:
+  - Add /usr/lib/jni to java.library.path.
+  - When running the i386 binaries on amd64, look in
+  - /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+
+libjava-stacktrace:
+  libgcj: Lookup source file name and line number in separated
+  debug files found in /usr/lib/debug
+
+libjava-soname:
+  Bump the libgcj soversion.
+
+libjava-disable-static:
+  Disable building the static libjava.
+
+libjava-rpath:
+  - Link ecjx and gij with -rpath $(dbexecdir)
+
+libjava-maxhostnamelen:
+  libjava: Avoid dependency on MAXHOSTNAMELEN
+
+libjava-class-igf:
+  * java/lang/Class.java (internalGetFields): Use LinkedHashSet.
+
+gcc-expandv:
+  * gcc.c (main): Call expandargv.
+
+alpha-no-ev4-directive:
+
+note-gnu-stack:
+  Add .note.GNU-stack sections for gcc's crt files, libffi and boehm-gc
+  Taken from FC.
+
+arm-gij:
+  Enable gij interpreter on arm
+
+hppa-cbranch:
+  Fix for PR target/26743 (hppa)
+  Backport from gcc trunk 2006-04-12 by tausq@debian.org
+
+hppa-cbranch2:
+  Fix for PR target/26743 (hppa)
+  Backport from gcc trunk 2006-04-12 by tausq@debian.org
+
+m68k-fjump:
+  gcc/config/m68k/m68k.md:
+  always use as fjcc pseudo op, we rely heavily on as 
+  to generate the right size for the jump instructions
+  fixes #359281
+
+m68k-gc:
+  boehm-gc:
+  the thread suspend handler has to save all registers
+  reenable MPROTECT_VDB, it should work, otherwise it's probably a kernel bug
+  change STACKBOTTOM to LINUX_STACKBOTTOM so it works with 2.6 kernel
+
+m68k-save_pic:
+  gcc/config/m68k/m68k.c:
+  correctly save the pic register, when not done by reload()
+  (fixes _Unwind_RaiseException and thus exception handling)
+  fixes 345574
+
+m68k-libffi2:
+  add closure support to libffi for m68k
+
+m68k-dwarf:
+  correct the dwarf frame information, but preserve compatibility
+
+m68k-split_shift:
+  use correct predicates for long long shifts and use more splits
+  fixes 381572
+
+m68k-prevent-qipush:
+  prevent combine from creating a byte push on the stack (invalid on m68k)
+
+m68k-jumptable:
+  Don't force byte offset when accessing the jumptable, gas can
+  generate the correct offset size instead.
+
+m68k-peephole:
+  Convert some text peepholes to rtl peepholes, so the correct
+  DWARF2 information can be generated for stack manipulations.
+  (Keep a few peepholes temporarily disabled.)
+
+m68k-return:
+  don't use single return if fp register have to be restored
+  fixes 386864
+
+m68k-sig-unwind:
+  add support for unwinding over signal frames
+
+m68k-align-code:
+  use "move.l %a4,%a4" to advance within code.
+
+m68k-align-stack:
+  try to keep the stack word aligned
+
+m68k-dwarf3:
+  emit correct dwarf info for cfa offset and register with -fomit-frame-pointer
+
+m68k-fpcompare:
+  bring fp compare early to its desired form to relieve reload,
+  allow any fp constant during and after reload (even special constants)
+  in case reload can't find a free register for them.
+
+m68k-secondary-addr-reload:
+  add secondary reloads to allow reload to get byte values into addr regs
+
+m68k-notice-move:
+  don't set cc_status for fp move without fp register
+
+m68k-symbolic-operand:
+  better recognize symbolic operands in addresses
+
+m68k-bitfield-offset:
+  only use constant offset for register bitfields
+  (combine expects shifts, but does a rotate)
+
+mips-libspec:
+  mips*-linux: Always imply -lpthread for -pthread
+
+pr25524:
+  Backport PR libstdc++/25524 from the trunk
+
+pr26864:
+  Backport fix for PR libmudflap/26864 from the trunk.
+
+pr26208:
+  PR other/26208
+
+pr26208-r111674:
+  PR other/26208, fix arm pasto
+
+libjava-sjlj:
+  Don't try to use _Unwind_Backtrace on SJLJ targets.
+  See bug #387875, #388505, GCC PR 29206.
+
+gcc-dwarf2-h:
+  gcc dwarf2.h header additions (r107384, r111620), taken from the trunk
+
+gcc-unwind-r111705:
+  gcc unwind r11705, taken from the trunk
+
+gcc-unwind-r120406:
+  gcc unwind r120406, taken from the trunk
+
+pr9861-nojava:
+  Non-java parts of PR java/9861 (java changes in gcj-ecj-generics.tar.bz2).
+
+classpath-config-guess:
+  Update config.guess/config.sub in the classpath directory.
+
+arm-pr28516:
+  Fix PR28516 on ARM
+
+arm-pr30486:
+  Fix 30486 on ARM
+
+pr22244:
+  Improve debug info for packed arrays with constant bounds (PR fortran/22244)
+
+libgcc-tramp-ppc32:
+  Fix libgcc.a(tramp.o) on ppc32
+
+pr33639:
+  Fix PR java/33639
+
+pr33765:
+  Fix PR java/33765, ignore ZIPEMPTYMAGIC files.
+
+pr28322:
+  Fix PR other/28322, GCC new warnings and compatibility.
+
+arm-unbreak-eabi-armv4t:
+  Fix armv4t build on ARM
+
+pr26885:
+  Proposed patch for PR driver/26885
+
+gcc-r109242:
+  Backport r109242 from the trunk
+
+gcc-r109581:
+  Backport r109581 from the trunk
+
+gcc-4.1-x86-blended:
+  Backport x86 "generic" patches from the trunk
+
+gcc-pfrs-2:
+  Fix a regression in the backport of PR 28946 from the trunk (H.J. Lu).
+
+cpu-default-generic:
+  set default 32bit ix86 architecture to i486
+
+pr20218:
+  Backport of PR middle-end/20218 to the 4.1 branch.
+
+libssp-gnu:
+  GNU/k*BSD support
+
+gcc-pascal-lang:
+  Add pascal options and specs for the gcc driver.
+
+gcc-d-lang:
+  Add D options and specs for the gcc driver.
+
+link-libs:
+
+reporting:
+  Add Debian URL for bug reporting instructions.
+
+gcc-ice-hack:
+  2004-01-23  Jakub Jelinek  <jakub@redhat.com>
+  
+  	* system.h (ICE_EXIT_CODE): Define.
+  	* gcc.c (execute): Don't free first string early, but at the end
+  	of the function.  Call retry_ice if compiler exited with
+  	ICE_EXIT_CODE.
+  	(retry_ice): New function.
+  	* diagnostic.c (diagnostic_count_diagnostic,
+  	diagnostic_action_after_output, error_recursion): Exit with
+  	ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
+
+gcc-ice-apport:
+  Report an ICE to apport (if apport is available
+  and the environment variable GCC_NOAPPORT is not set)
+
+multiarch-include:
+  biarch-include.dpatch
+  
+  Adds biarch include directories
+  /usr/local/include/<arch>-linux-gnu
+  /usr/include/<arch>-linux-gnu
+  to the system include paths, depending on 32/64 bit mode.
+
+disable-biarch-check:
+  For biarch builds, disable the testsuite for the non-default architecture
+  for runtime libraries, which are not built by default (libjava).
+
+config-ml:
+  disable some biarch libraries for biarch builds
+
+i386-biarch:
+  biarch patches for i386/x86_64
+
+gcc-biarch-generic:
+  gcc/config/i386/biarch.h: Remove DRIVER_SELF_SPECS macro.
+
+disable-configure-run-check:
+  don't bogusly check if the 64bit binaries also work,
+  which does break on 32bit kernels.
--- gcc-4.1-4.1.2.orig/debian/gnatvsn.gpr
+++ gcc-4.1-4.1.2/debian/gnatvsn.gpr
@@ -0,0 +1,36 @@
+--  Project file for use with GNAT
+--  Copyright (c) 2005 Ludovic Brenta <ludovic@ludovic-brenta.org>
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 2 of the License, or
+--  (at your option) any later version.
+--
+--  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.  See the
+--  GNU General Public License for more details.
+--
+--  This project file is designed to help build applications that use
+--  GNAT project files.  Here is an example of how to use this project file:
+--
+--  with "/usr/share/ada/adainclude/gnatvsn";
+--  project Example is
+--     for Object_Dir use "obj";
+--     for Exec_Dir use ".";
+--     for Main use ("example");
+--     package Linker renames Gnatvsn.Linker;
+--     --  Alternatively, if you need additional switches:
+--     --  package Linker is
+--     --     for Default_Switches ("Ada") use (Gnatvsn.Linker_Switches & ...)
+--     --  end Linker;
+--  end Example;
+
+project Gnatvsn is
+   for Source_Dirs use ("/usr/share/ada/adainclude/gnatvsn");
+   for Object_Dir use "/usr/lib/ada/adalib/gnatvsn";
+   Linker_Switches := "-lgnatvsn";
+   package Linker is
+      for Default_Switches ("Ada") use (Linker_Switches);
+   end Linker;
+end Gnatvsn;
--- gcc-4.1-4.1.2.orig/debian/gfortran-BV-doc.postinst
+++ gcc-4.1-4.1.2/debian/gfortran-BV-doc.postinst
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	install-info --quiet --section "Development" "Development" \
+	    --description="The GNU Fortran compiler (Version @BV@)." \
+	    /usr/share/info/gfortran-@BV@.info
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-hppa64.prerm
+++ gcc-4.1-4.1.2/debian/gcc-BV-hppa64.prerm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+if [ "$1" != "upgrade" ]; then
+  update-alternatives --quiet \
+    --remove hppa64-linux-gcc /usr/bin/hppa64-linux-gnu-gcc-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/gcc-dummy.texi
+++ gcc-4.1-4.1.2/debian/gcc-dummy.texi
@@ -0,0 +1,41 @@
+\input texinfo  @c -*-texinfo-*-
+@c %**start of header
+
+@settitle The GNU Compiler Collection (GCC)
+
+@c Create a separate index for command line options.
+@defcodeindex op
+@c Merge the standard indexes into a single one.
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex tp cp
+
+@paragraphindent 1
+
+@c %**end of header
+
+@copying
+The current documentation is licensed under the same terms as the Debian packaging.
+@end copying
+@ifnottex
+@dircategory Programming
+@direntry
+* @name@: (@name@).                  The GNU Compiler Collection (@name@).
+@end direntry
+@sp 1
+@end ifnottex
+
+@summarycontents
+@contents
+@page
+
+@node Top
+@top Introduction
+@cindex introduction
+The official GNU compilers' documentation is released under the terms
+of the GNU Free Documentation License with cover texts. This has been
+considered non free by the Debian Project. Thus you will find it in the
+non-free section of the Debian archive.
+@bye
--- gcc-4.1-4.1.2.orig/debian/libstdc++CXX-BV-doc.overrides
+++ gcc-4.1-4.1.2/debian/libstdc++CXX-BV-doc.overrides
@@ -0,0 +1,2 @@
+libstdc++@CXX@-@BV@-doc: extra-license-file
+libstdc++@CXX@-@BV@-doc: manpage-has-errors-from-man usr/share/man/man3/__gnu_internal.3.gz
--- gcc-4.1-4.1.2.orig/debian/lib64stdc++CXX.postinst
+++ gcc-4.1-4.1.2/debian/lib64stdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib64stdc++@CXX@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/dh_rmemptydirs
+++ gcc-4.1-4.1.2/debian/dh_rmemptydirs
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+pkg=`echo $1 | sed 's/^-p//'`
+
+: # remove empty directories, when all components are in place
+for d in `find debian/$pkg -depth -type d -empty 2> /dev/null`; do \
+    while rmdir $d 2> /dev/null; do d=`dirname $d`; done; \
+done
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/gcc-cross.prerm
+++ gcc-4.1-4.1.2/debian/gcc-cross.prerm
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+update-alternatives --quiet --remove cross-gcc /usr/bin/cross-gcc-ver
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/control.m4
+++ gcc-4.1-4.1.2/debian/control.m4
@@ -0,0 +1,1265 @@
+divert(-1)
+
+define(`checkdef',`ifdef($1, , `errprint(`error: undefined macro $1
+')m4exit(1)')')
+define(`errexit',`errprint(`error: undefined macro `$1'
+')m4exit(1)')
+
+dnl The following macros must be defined, when called:
+dnl ifdef(`SRCNAME',	, errexit(`SRCNAME'))
+dnl ifdef(`PV',		, errexit(`PV'))
+dnl ifdef(`ARCH',		, errexit(`ARCH'))
+
+dnl The architecture will also be defined (-D__i386__, -D__powerpc__, etc.)
+
+define(`PN', `$1')
+ifdef(`PRI', `', `
+    define(`PRI', `$1')
+')
+define(`MAINTAINER', `Debian GCC Maintainers <debian-gcc@lists.debian.org>')
+
+define(`ifenabled', `ifelse(index(enabled_languages, `$1'), -1, `dnl', `$2')')
+
+divert`'dnl
+dnl --------------------------------------------------------------------------
+Source: SRCNAME
+Section: devel
+Priority: PRI(optional)
+ifelse(DIST,`Ubuntu',`dnl
+ifelse(regexp(SRCNAME, `gcc-snapshot\|gnat'),0,`dnl
+Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
+', `dnl
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+')dnl SRCNAME
+XSBC-Original-Maintainer: MAINTAINER
+', `dnl
+Maintainer: MAINTAINER
+')dnl DIST
+ifelse(regexp(SRCNAME, `gnat'),0,`dnl
+Uploaders: Ludovic Brenta <lbrenta@debian.org>
+', regexp(SRCNAME, `gdc'),0,`dnl
+Uploaders: Arthur Loiret <arthur.loiret@gmail.com>
+', regexp(SRCNAME, `gpc'),0,`dnl
+Uploaders: Matthias Klose <doko@debian.org>
+', `dnl
+Uploaders: Matthias Klose <doko@debian.org>
+')dnl SRCNAME
+Standards-Version: 3.8.0
+ifdef(`TARGET',`dnl cross
+Build-Depends: dpkg-dev (>= 1.13.9), dpkg-cross (>= 1.25.99), LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTOGEN_BUILD_DEP m4, autoconf, autoconf2.13, automake1.9, libtool, gawk, bzip2, BINUTILS_BUILD_DEP, debhelper (>= 5.0), bison (>= 1:2.3), flex, realpath (>= 1.9.12), lsb-release, make (>= 3.81)
+',`dnl native
+Build-Depends: dpkg-dev (>= 1.13.9), gcc-4.1-multilib [amd64 i386 powerpc ppc64 s390 sparc kfreebsd-amd64], LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP AUTOGEN_BUILD_DEP libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf, autoconf2.13, automake1.9, libtool, gawk, CHECK_BUILD_DEP, bzip2, BINUTILS_BUILD_DEP, binutils-hppa64 (>= BINUTILSV) [hppa], debhelper (>= 5.0), gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libmpfr-dev (>= 2.3.0~rc1.dfsg.1) [fortran_no_archs], locales [locale_no_archs], procps [linux_gnu_archs], sharutils, PASCAL_BUILD_DEP GDC_BUILD_DEP JAVA_BUILD_DEP GNAT_BUILD_DEP realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81)
+Build-Depends-Indep: LIBSTDCXX_BUILD_INDEP JAVA_BUILD_INDEP
+')dnl
+
+ifelse(SRCNAME,gcc-snapshot,`dnl
+Package: gcc-snapshot
+Architecture: any
+Section: devel
+Priority: extra
+Depends: binutils`'TS (>= ${binutils:Version}), ${dep:libcdev}, ${dep:libunwinddev}, ${shlibs:Depends}
+Provides: c++abi2-dev
+Description: A SNAPSHOT of the GNU Compiler Collection
+ This package contains a recent development SNAPSHOT of all files
+ contained in the GNU Compiler Collection (GCC).
+ .
+ DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES!
+ .
+ This package will NEVER hit the testing distribution. It is used for
+ tracking gcc bugs submitted to the Debian BTS in recent development
+ versions of gcc.
+',`dnl gcc-X.Y
+
+dnl default base package dependencies
+define(`BASETARGET', `')
+define(`BASEDEP', `gcc`'PV-base (= ${gcc:Version})')
+define(`SOFTBASEDEP', `gcc`'PV-base (>= ${gcc:SoftVersion})')
+
+ifdef(`TARGET', `', `
+ifenabled(`gccbase',`
+
+Package: gcc`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Description: The GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+ifdef(`BASE_ONLY', `dnl
+ .
+ This version of GCC is not yet available for this architecture.
+ Please use the compilers from the gcc-snapshot package for testing.
+')`'dnl
+')`'dnl
+')`'dnl native
+
+ifenabled(`gccxbase',`
+dnl override default base package dependencies to cross version
+dnl This creates a toolchain that doesnt depend on the system -base packages
+dnl set via DEB_CROSS_INDEPENDENT=yes
+define(`BASETARGET', `PV`'TS')
+define(`BASEDEP', `gcc`'BASETARGET-base (= ${gcc:Version})')
+define(`SOFTBASEDEP', `gcc`'BASETARGET-base (>= ${gcc:SoftVersion})')
+
+Package: gcc`'BASETARGET-base
+Architecture: any
+Section: devel
+Priority: PRI(optional)
+Conflicts: gcc-3.5-base
+Replaces: gcc-3.5-base
+Description: The GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+')`'dnl
+
+ifenabled(`java',`
+Package: gcj`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Description: The GNU Compiler Collection (gcj base package)
+ This package contains files common to all java related packages
+ built from the GNU Compiler Collection (GCC).
+')`'dnl java
+
+ifenabled(`ada',`
+Package: gnat`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Description: The GNU Compiler Collection (gnat base package)
+ This package contains files common to all Ada related packages
+ built from the GNU Compiler Collection (GCC).
+')`'dnl ada
+
+ifenabled(`libgcc',`
+Package: libgcc1`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: BASEDEP, ${shlibs:Depends}
+ifdef(`TARGET',`Provides: libgcc1-TARGET-dcv1
+',`')`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc2`'LS
+Architecture: ifdef(`TARGET',`all',`m68k')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: BASEDEP, ${shlibs:Depends}
+ifdef(`TARGET',`Provides: libgcc2-TARGET-dcv1
+',`')`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libgcc
+
+ifenabled(`lib4gcc',`
+Package: libgcc4`'LS
+Architecture: ifdef(`TARGET',`all',`hppa')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: ifdef(`STANDALONEJAVA',`gcj`'PV-base (>= ${gcj:Version})',`BASEDEP'), ${shlibs:Depends}
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib4gcc
+
+ifenabled(`lib64gcc',`
+Package: lib64gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}
+ifdef(`TARGET',`Provides: lib64gcc1-TARGET-dcv1
+',`')`'dnl
+Conflicts: libgcc`'GCC_SO`'LS (<= 1:3.3-0pre9)
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (64bit)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib64gcc
+
+ifdef(`TARGET', `', `dnl
+ifenabled(`lib32gcc',`
+Package: lib32gcc1`'LS
+Architecture: biarch32_archs
+Section: libs
+Priority: optional
+Depends: BASEDEP, ${dep:libcbiarch}
+ifdef(`TARGET',`Provides: lib32gcc1-TARGET-dcv1
+',`')`'dnl
+ifelse(DIST,`Ubuntu', `Replaces: ia32-libs-openoffice.org (<< 1ubuntu3)', `dnl')
+Description: GCC support library (32 bit Version)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+')`'dnl
+')`'dnl
+
+ifenabled(`cdev',`
+Package: gcc`'PV`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, cpp`'PV`'TS (= ${gcc:Version}), binutils`'TS (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libunwinddev}, ${shlibs:Depends}
+Recommends: ${dep:libcdev}
+Suggests: ${gcc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), gcc`'PV-locales (>= ${gcc:SoftVersion}), libmudflap`'MF_SO-dev`'LS (>= ${gcc:Version})
+Provides: c-compiler`'TS, libssp0-dev
+ifdef(`TARGET',`dnl',`Conflicts: libssp0-dev (<< 4.1.1-6)')
+ifdef(`TARGET',`dnl',`Replaces: gcj-4.1 (<< 4.1.1), libssp0-dev (<< 4.1.1-6)')
+Description: The GNU C compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ifdef(`TARGET', `dnl
+ .
+ This package contains C cross-compiler for TARGET architecture.
+')`'dnl
+
+ifenabled(`multilib',`
+Package: gcc`'PV-multilib`'TS
+Architecture: MULTILIB_ARCHS
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarch}, ${dep:libsspbiarch}, ${dep:libgompbiarch}, ${shlibs:Depends}
+Recommends: ${dep:libmudflapbiarch}
+Replaces: gcc-4.1 (<< 4.1.2-4)
+Description: The GNU C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl cdev
+
+ifenabled(`cdev',`
+ifdef(`TARGET', `', `
+Package: gcc`'PV-hppa64
+Architecture: hppa
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}
+Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.4-hppa64 (<= 3.4.1-3)
+Description: The GNU C compiler (cross compiler for hppa64)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+')`'dnl native
+')`'dnl cdev
+
+ifenabled(`cdev',`
+Package: cpp`'PV`'TS
+Architecture: any
+Section: ifdef(`TARGET',`devel',`interpreters')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}
+Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion})
+ifdef(`TARGET',`dnl',`Conflicts: gcj-4.1 (<< 4.1.1), gnat-4.1 (<= 4.1.1-22)')
+ifdef(`TARGET',`dnl',`Replaces: gcj-4.1 (<< 4.1.1)')
+Description: The GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+ifdef(`TARGET', `dnl
+ .
+ This package contains preprocessor configured for TARGET architecture.
+')`'dnl
+
+ifdef(`TARGET', `', `
+ifenabled(`gfdldoc',`
+Package: cpp`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion})
+Description: Documentation for the GNU C preprocessor (cpp)
+ Documentation for the GNU C preprocessor in info `format'.
+')`'dnl gfdldoc
+')`'dnl native
+
+ifdef(`TARGET', `', `
+Package: gcc`'PV-locales
+Architecture: all
+Section: devel
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, cpp`'PV (>= ${gcc:SoftVersion})
+Recommends: gcc`'PV (>= ${gcc:SoftVersion})
+Description: The GNU C compiler (native language support files)
+ Native language support for GCC. Lets GCC speak your language,
+ if translations are available.
+ .
+ Please do NOT submit bug reports in other languages than "C".
+ Always reset your language settings to use the "C" locales.
+')`'dnl native
+')`'dnl cdev
+
+ifenabled(`c++',`
+ifenabled(`c++dev',`
+Package: g++`'PV`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${shlibs:Depends}
+Provides: c++-compiler`'TS, c++abi2-dev
+Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion})
+Description: The GNU C++ compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ifdef(`TARGET', `dnl
+ .
+ This package contains C++ cross-compiler for TARGET architecture.
+')`'dnl
+
+ifenabled(`multilib',`
+Package: g++`'PV-multilib`'TS
+Architecture: MULTILIB_ARCHS
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libcxxbiarch}, ${shlibs:Depends}
+Suggests: ${dep:libcxxbiarchdbg}
+Replaces: libstdc++6-4.1-dev (<< 4.1.2-4)
+Description: The GNU C++ compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl c++dev
+')`'dnl c++
+
+ifdef(`TARGET', `', `
+ifenabled(`mudflap',`
+Package: libmudflap`'MF_SO
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}
+Description: GCC mudflap shared support libraries
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap`'MF_SO
+Architecture: biarch32_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (32bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap`'MF_SO
+Architecture: biarch64_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (64bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libmudflap`'MF_SO-dev
+Architecture: any
+Section: libdevel
+Priority: PRI(optional)
+Depends: BASEDEP, libmudflap`'MF_SO (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}
+Suggests: ${sug:libmudflapdev}
+Conflicts: libmudflap0-4.2-dev
+Description: GCC mudflap support libraries (development files)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+ .
+ This package contains the headers and the static libraries.
+')`'dnl
+')`'dnl native
+
+ifdef(`TARGET', `', `
+ifenabled(`ssp',`
+Package: libssp`'SSP_SO
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}
+Description: GCC stack smashing protection library
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: lib32ssp`'SSP_SO
+Architecture: biarch32_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libssp0 (<< 4.1)
+Description: GCC stack smashing protection library (32bit)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: lib64ssp`'SSP_SO
+Architecture: biarch64_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libssp0 (<< 4.1)
+Description: GCC stack smashing protection library (64bit)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+')`'dnl
+')`'dnl native
+
+ifenabled(`proto',`
+Package: protoize
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV (>= ${gcc:Version}), ${shlibs:Depends}
+Description: Create/remove ANSI prototypes from C code
+ "protoize" can be used to add prototypes to a program, thus converting
+ the program to ANSI C in one respect.  The companion program "unprotoize"
+ does the reverse: it removes argument types from any prototypes
+ that are found.
+')`'dnl proto
+
+ifenabled(`objpp',`
+ifenabled(`objppdev',`
+Package: gobjc++`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), g++`'PV`'TS (= ${gcc:Version}), ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:EpochVersion})
+Suggests: ${gobjcxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion})
+Provides: objc++-compiler`'TS
+Description: The GNU Objective-C++ compiler
+ This is the GNU Objective-C++ compiler, which compiles
+ Objective-C++ on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+')`'dnl obcppdev
+
+ifenabled(`multilib',`
+Package: gobjc++`'PV-multilib`'TS
+Architecture: MULTILIB_ARCHS
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc++`'PV`'TS (= ${gcc:Version}), g++`'PV-multilib`'TS (= ${gcc:Version}), gobjc`'PV-multilib`'TS (= ${gcc:Version}), ${shlibs:Depends}
+Description: The GNU Objective-C++ compiler (multilib files)
+ This is the GNU Objective-C++ compiler, which compiles Objective-C++ on
+ platforms supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl obcpp
+
+ifenabled(`objc',`
+ifenabled(`objcdev',`
+Package: gobjc`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:EpochVersion})
+Suggests: ${gobjc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion})
+Provides: objc-compiler`'TS
+ifdef(`OBJC_GC',`Recommends: libgc-dev', `dnl')
+ifdef(`__sparc__',`Conflicts: gcc`'PV-sparc64', `dnl')
+Description: The GNU Objective-C compiler
+ This is the GNU Objective-C compiler, which compiles
+ Objective-C on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gobjc`'PV-multilib`'TS
+Architecture: MULTILIB_ARCHS
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libobjcbiarch}, ${shlibs:Depends}
+Replaces: gobjc-4.1 (<< 4.1.2-4)
+Description: The GNU Objective-C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Objective-C compiler, which compiles Objective-C on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl objcdev
+
+ifenabled(`libobjc',`
+Package: libobjc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}
+Description: Runtime library for GNU Objective-C applications
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libobjc
+
+ifenabled(`lib64objc',`
+Package: lib64objc`'OBJC_SO
+Section: libs
+Architecture: biarch64_archs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Description: Runtime library for GNU Objective-C applications (64bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl lib64objc
+
+ifenabled(`lib32objc',`
+Package: lib32objc`'OBJC_SO
+Section: libs
+Architecture: biarch32_archs
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Description: Runtime library for GNU Objective-C applications (32bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl lib32objc
+')`'dnl objc
+
+ifenabled(`fortran',`
+ifenabled(`fdev',`
+Package: gfortran`'PV
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), libgfortran`'FORTRAN_SO (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}
+Provides: fortran95-compiler
+Suggests: ${gfortran:multilib}, gfortran`'PV-doc
+Replaces: libgfortran`'FORTRAN_SO-dev
+Description: The GNU Fortran 95 compiler
+ This is the GNU Fortran compiler, which compiles
+ Fortran 95 on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gfortran`'PV-multilib`'TS
+Architecture: MULTILIB_ARCHS
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gfortran`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libfortranbiarch}, ${shlibs:Depends}
+Replaces: gfortran-4.1 (<< 4.1.2-4)
+Description: The GNU Fortran 95 compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Fortran compiler, which compiles Fortran 95 on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+
+ifenabled(`gfdldoc',`
+Package: gfortran`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion})
+Description: Documentation for the GNU Fortran compiler (gfortran)
+ Documentation for the GNU Fortran 95 compiler in info `format'.
+')`'dnl gfdldoc
+')`'dnl fdev
+
+ifenabled(`libfortran',`
+Package: libgfortran`'FORTRAN_SO
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}
+Description: Runtime library for GNU Fortran applications
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libgfortran
+
+ifenabled(`lib64gfortran',`
+Package: lib64gfortran`'FORTRAN_SO
+Section: libs
+Architecture: biarch64_archs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Description: Runtime library for GNU Fortran applications (64bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl lib64gfortran
+
+ifenabled(`lib32gfortran',`
+Package: lib32gfortran`'FORTRAN_SO
+Section: libs
+Architecture: biarch32_archs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}
+Description: Runtime library for GNU Fortran applications (32bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl lib32gfortran
+')`'dnl fortran
+
+ifenabled(`java',`
+ifenabled(`gcj',`
+Package: gcj`'PV
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), ${dep:gcj}, ${dep:libcdev}, gij`'PV (= ${gcj:Version}), libgcj`'GCJ_SO-dev (= ${gcj:Version}), libgcj`'GCJ_SO-jar (>= ${gcj:SoftVersion}), libecj-java (>= 3.3.0-2), java-common, ${shlibs:Depends}
+Recommends: fastjar, libecj-java-gcj
+Suggests: java-gcj-compat-dev
+Provides: java-compiler
+Conflicts: cpp-4.1 (<< 4.1.1), gcc-4.1 (<< 4.1.1), java-gcj-compat-dev (<< 1.0.56-2)
+Description: The GNU compiler for Java(TM)
+ GCJ is a front end to the GCC compiler which can natively compile both
+ Java(tm) source and bytecode files. The compiler can also generate class
+ files.
+')`'dnl gcj
+
+ifenabled(`libgcj',`
+ifenabled(`libgcjcommon',`
+Package: libgcj-common
+Section: libs
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion})
+Conflicts: classpath (<= 0.04-4)
+Replaces: java-gcj-compat (<< 1.0.65-3), java-gcj-compat-dev (<< 1.0.65-3)
+Description: Java runtime library (common files)
+ This package contains files shared by classpath and libgcj libraries.
+')`'dnl libgcjcommon
+
+Package: gij`'PV
+Priority: optional
+Architecture: any
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${dep:prctl}, ${shlibs:Depends}
+Recommends: libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version})
+Suggests: fastjar, gcj`'PV (= ${gcj:Version}), java-gcj-compat
+Provides: java-virtual-machine, java2-runtime, java1-runtime, java-runtime
+Replaces: libgcj7, libgcj7-0 (<< 4.1.2-31)
+Conflicts: java-gcj-compat (<< 1.0.69)
+Description: The GNU Java bytecode interpreter
+ GIJ is not limited to interpreting bytecode. It includes a class loader which
+ can dynamically load shared objects, so it is possible to give it the name
+ of a class which has been compiled and put into a shared library on the
+ class path.
+
+Package: libgcj`'LIBGCJ_EXT
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj-common (>= 1:4.1.1-21), ${shlibs:Depends}
+Recommends: libgcj`'GCJ_SO-jar (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version})
+Suggests: libgcj`'GCJ_SO-dbg
+Conflicts: libgcj7
+Replaces: libgcj7, libgcj7-awt (<< 4.1.1-12)
+Description: Java runtime library for use with gcj
+ This is the runtime that goes along with the gcj front end to
+ gcc. libgcj includes parts of the Java Class Libraries, plus glue to
+ connect the libraries to the compiler and the underlying OS.
+ .
+ To show file names and line numbers in stack traces, the packages
+ libgcj`'GCJ_SO-dbg and binutils are required.
+
+Package: libgcj`'GCJ_SO-jar
+Section: libs
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT (>= ${gcj:SoftVersion})
+Conflicts: libgcj7-common
+Replaces: libgcj7-common
+Description: Java runtime library for use with gcj (jar files)
+ This is the jar file that goes along with the gcj front end to gcc.
+
+Package: libgcj`'LIBGCJ_EXT-awt
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${shlibs:Depends}
+Description: AWT peer runtime libraries for use with gcj
+ These are runtime libraries holding the AWT peer implementations
+ for libgcj (currently only the GTK based peer library).
+
+Package: gappletviewer`'PV
+Section: utils
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gij`'PV (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}
+Description: Standalone application to execute Java (tm) applets
+ gappletviewer is a standalone application to execute Java (tm) applets.
+
+Package: gcjwebplugin`'PV
+Section: web
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gappletviewer`'PV (= ${gcj:Version}), ${shlibs:Depends}, firefox | mozilla-browser | epiphany-browser | galeon | konqueror
+Description: Web browser plugin to execute Java (tm) applets
+ gcjwebplugin is a little web browser plugin to execute Java (tm) applets.
+ It is targeted for Mozilla and compatible browsers that support the NPAPI.
+')`'dnl libgcj
+
+ifenabled(`libgcjdev',`
+Package: libgcj`'GCJ_SO-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gcj`'PV (= ${gcj:Version}), libgcj`'GCJ_SO-jar (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), libgcj-bc, zlib1g-dev, ${shlibs:Depends}
+Suggests: libgcj-doc
+Provides: classpath-doc
+Description: Java development headers and static library for use with gcj
+ These are the development headers and static libraries that go along
+ with the gcj front end to gcc. libgcj includes parts of the Java Class
+ Libraries, plus glue to connect the libraries to the compiler and the
+ underlying OS.
+
+Package: libgcj`'GCJ_SO-dbg
+Section: libdevel
+Architecture: any
+Priority: extra
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version})
+Recommends: binutils
+Description: Debugging symbols for libraries provided in libgcj`'GCJ_SO-dev
+ The package provides debugging symbols for the libraries provided
+ in libgcj`'GCJ_SO-dev.
+ .
+ binutils is required to show file names and line numbers in stack traces.
+
+Package: libgcj`'GCJ_SO-src
+Section: libdevel
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), gcj`'PV (>= ${gcj:SoftVersion}), libgcj`'GCJ_SO-jar (= ${gcj:Version})
+Description: libgcj java sources for use in eclipse
+ These are the java source files packaged as a zip file for use in development
+ environments like eclipse.
+
+Package: libgcj-doc
+Section: doc
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion})
+Enhances: libgcj`'GCJ_SO-dev
+Description: libgcj API documentation and example programs
+ Autogenerated documentation describing the API of the libgcj library.
+ Sources and precompiled example programs from the classpath library.
+')`'dnl libgcjdev
+')`'dnl java
+
+ifenabled(`fastjar',`
+Package: fastjar
+Section: devel
+Architecture: any
+Priority: PRI(optional)
+Depends: ${shlibs:Depends}
+Provides: jar
+Description: Jar creation utility
+ Replacement for Suns .jar creation program.  It is written in C
+ instead of java and is tons faster.
+')`'dnl fastjar
+
+ifenabled(`libffi',`
+Package: libffi`'FFI_SO
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+Depends: gcc`'PV`'-base (= ${gcc:Version}), ${shlibs:Depends}
+Description: Foreign Function Interface library runtime
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: lib32ffi`'FFI_SO
+Section: libs
+Architecture: biarch32_archs
+Priority: PRI(optional)
+Depends: gcc`'PV`'-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libffi4 (<< 4.1)
+Description: Foreign Function Interface library runtime (32bit)
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: lib64ffi`'FFI_SO
+Section: libs
+Architecture: biarch64_archs
+Priority: PRI(optional)
+Depends: gcc`'PV`'-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Replaces: libffi4 (<< 4.1)
+Description: Foreign Function Interface library runtime (64bit)
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+
+Package: libffi`'FFI_SO-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gcc`'PV`'-base (= ${gcc:Version}), libffi`'FFI_SO (>= ${gcc:Version})
+Suggests: ${sug:libffidev}
+Provides: libffi-dev
+Conflicts: libffi1-dev, libffi2-dev, libffi3-dev, libffi-dev, libffi
+Description: Foreign Function Interface library (development files)
+ This package contains the headers and static library files necessary for
+ building programs which use libffi.
+ .
+ A foreign function interface is the popular name for the interface that
+ allows code written in one language to call code written in another
+ language.
+')`'dnl libffi
+
+ifenabled(`c++',`
+ifenabled(`libcxx',`
+Package: libstdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(required))
+Depends: BASEDEP, ${shlibs:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Conflicts: scim (<< 1.4.2-1)
+Description: The GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libcxx
+
+ifenabled(`lib32cxx',`
+Package: lib32stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, lib32gcc1`'LS
+ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: The GNU Standard C++ Library v3 (32 bit Version)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib32cxx
+
+ifenabled(`lib64cxx',`
+Package: lib64stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, lib64gcc1`'LS
+ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: The GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (64bit)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib64cxx
+
+ifenabled(`c++dev',`
+Package: libstdc++CXX_SO`'PV-dev`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}
+ifdef(`TARGET',`',`dnl native
+Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev
+Suggests: libstdc++CXX_SO`'PV-doc
+')`'dnl native
+Provides: libstdc++-dev`'LS`'dnl
+ifdef(`TARGET',`, libstdc++-dev-TARGET-dcv1, libstdc++CXX_SO-dev-TARGET-dcv1
+',`
+')`'dnl
+Description: The GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the headers and static library files necessary for
+ building C++ programs which use libstdc++.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libstdc++CXX_SO`'PV-pic`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: extra
+Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version})
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-pic-TARGET-dcv1
+',`')`'dnl
+Description: The GNU Standard C++ Library v3 (shared library subset kit)`'ifdef(`TARGET)',` (TARGET)', `')
+ This is used to develop subsets of the libstdc++ shared libraries for
+ use on custom installation floppies and in embedded systems.
+ .
+ Unless you are making one of those, you will not need this package.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libstdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: extra
+Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), ${shlibs:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Recommends: libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version})
+Conflicts: libstdc++5-dbg`'LS, libstdc++5-3.3-dbg`'LS, libstdc++6-dbg`'LS, libstdc++6-4.0-dbg`'LS
+Description: The GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib32stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: extra
+Depends: BASEDEP, lib32stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version})
+ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: lib32stdc++6-dbg`'LS, lib32stdc++6-4.0-dbg`'LS
+Description: The GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib64stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: extra
+Depends: BASEDEP, lib64stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version})
+ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: lib64stdc++6-dbg`'LS, lib64stdc++6-4.0-dbg`'LS
+Description: The GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+ifdef(`TARGET', `', `
+Package: libstdc++CXX_SO`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion})
+Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, libstdc++6-4.0-doc
+Description: The GNU Standard C++ Library v3 (documentation files)
+ This package contains documentation files for the GNU stdc++ library.
+ .
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+')`'dnl native
+')`'dnl c++dev
+')`'dnl c++
+
+ifenabled(`ada',`
+Package: gnat`'-GNAT_V
+Architecture: any
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), gcc`'PV (>= ${gcc:Version}), ${dep:libgnat}, ${dep:libcdev}, ${shlibs:Depends}
+Suggests: gnat`'PV-doc, ada-reference-manual
+Provides: ada-compiler
+Conflicts: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-3.5, gnat-4.0, gnat-4.2
+Description: The GNU Ada compiler
+ This is the GNU Ada compiler, which compiles Ada on platforms supported
+ by the gcc compiler. It uses the gcc backend to generate optimized code.
+
+ifenabled(`libgnat',`
+Package: libgnat`'-GNAT_V
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), ${shlibs:Depends}
+Description: Runtime library for GNU Ada applications
+ Library needed for GNU Ada applications linked against the shared library.
+
+Package: libgnat`'-GNAT_V-dbg
+Section: libdevel
+Architecture: any
+Priority: extra
+Depends: gnat`'PV-base, libgnat`'-GNAT_V
+Recommends: gnat-gdb (>= 6.4)
+Description: Runtime library for GNU Ada applications
+ Debugging symbols for the library needed for GNU Ada applications linked
+ against the shared library.
+
+Package: libgnatvsn`'GNAT_V-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version})
+Conflicts: libgnatvsn-dev (<< 4.1.2-19)
+Description: GNU Ada compiler version library - development files
+ This library exports selected components of GNAT, the GNU Ada compiler, for use
+ in other packages, most notably ASIS and ASIS-based packages.  It is licensed
+ under the GNAT-Modified GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the development files and static library.
+
+Package: libgnatvsn`'GNAT_V
+Architecture: any
+Priority: PRI(optional)
+Section: libs
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version})
+Description: GNU Ada compiler version library
+ This library exports selected components of GNAT, the GNU Ada compiler, for use
+ in other packages, most notably ASIS and ASIS-based packages.  It is licensed
+ under the GNAT-Modified GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the run-time shared library.
+
+Package: libgnatvsn`'GNAT_V-dbg
+Architecture: any
+Priority: extra
+Section: libdevel
+Depends: gnat`'PV-base, libgnatvsn`'GNAT_V
+Recommends: gnat-gdb (>= 6.4)
+Description: GNU Ada compiler version library
+ This library exports selected components of GNAT, the GNU Ada compiler, for use
+ in other packages, most notably ASIS and ASIS-based packages.  It is licensed
+ under the GNAT-Modified GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the debugging symbols for the run-time shared library.
+
+Package: libgnatprj`'GNAT_V-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), libgnatprj`'GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V-dev (= ${gnat:Version})
+Conflicts: libgnatprj-dev (<< 4.1.2-19)
+Description: GNU Ada Project Manager development files
+ GNAT, the GNU Ada compiler, uses project files to organise source and object
+ files in large-scale development efforts.  Several other tools, such as
+ ASIS tools (package asis-programs) and GNAT Programming Studio (package
+ gnat-gps) also use project files.  This library contains the necessary
+ support; it was built from GNAT itself.  It is licensed under the pure GPL;
+ all programs that use it must also be distributed under the GPL, or not
+ distributed at all.
+ .
+ This package contains development files: install it to develop applications
+ that understand GNAT project files.
+
+Package: libgnatprj`'GNAT_V
+Architecture: any
+Priority: PRI(optional)
+Section: libs
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version})
+Description: GNU Ada Project Manager
+ GNAT, the GNU Ada compiler, uses project files to organise source and object
+ files in large-scale development efforts.  Several other tools, such as
+ ASIS tools (package asis-programs) and GNAT Programming Studio (package
+ gnat-gps) also use project files.  This library contains the necessary
+ support; it was built from GNAT itself.  It is licensed under the pure GPL;
+ all programs that use it must also be distributed under the GPL, or not
+ distributed at all.
+ .
+ This package contains the run-time shared library.
+
+Package: libgnatprj`'GNAT_V-dbg
+Architecture: any
+Priority: extra
+Section: libdevel
+Depends: gnat`'PV-base, libgnatprj`'GNAT_V
+Recommends: gnat-gdb (>= 6.4)
+Description: GNU Ada Project Manager
+ GNAT, the GNU Ada compiler, uses project files to organise source and object
+ files in large-scale development efforts.  Several other tools, such as
+ ASIS tools (package asis-programs) and GNAT Programming Studio (package
+ gnat-gps) also use project files.  This library contains the necessary
+ support; it was built from GNAT itself.  It is licensed under the pure GPL;
+ all programs that use it must also be distributed under the GPL, or not
+ distributed at all.
+ .
+ This package contains the debugging symbols for the run-time shared library.
+')`'dnl libgnat
+
+ifenabled(`lib64gnat',`
+Package: lib64gnat`'-GNAT_V
+Section: libs
+Architecture: biarch64_archs
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), ${dep:libcbiarch}, ${shlibs:Depends}
+Description: Runtime library for GNU Ada applications
+ Library needed for GNU Ada applications linked against the shared library.
+')`'dnl libgnat
+
+ifenabled(`gfdldoc',`
+Package: gnat`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: SOFTBASEDEP
+Suggests: gnat`'PV
+Description: Documentation for the GNU Ada compiler (gnat)
+ Documentation for the GNU Ada compiler in info `format'.
+')`'dnl gfdldoc
+')`'dnl ada
+
+ifenabled(`pascal',`
+Package: gpc`'PV
+Architecture: any
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, gcc`'PV (>= ${gcc:SoftVersion}), ${dep:libcdev}, ${shlibs:Depends}
+Recommends: libgmp3-dev, libncurses5-dev
+Suggests: gpc`'PV-doc (>= ${gpc:Version})
+Provides: pascal-compiler
+Description: The GNU Pascal compiler
+ This is the GNU Pascal compiler, which compiles Pascal on platforms supported
+ by the gcc compiler. It uses the gcc backend to generate optimized code.
+ .
+ WARNING: the integration of gpc into gcc-4.x is still in an experimental
+ stage. For production use, please use gpc or gpc-2.1-3.4.
+
+Package: gpc`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: SOFTBASEDEP
+Replaces: gpc (<= 2.91.58-3)
+Suggests: gpc`'PV
+Description: Documentation for the GNU Pascal compiler (gpc)
+ Documentation for the GNU Pascal compiler in info `format'.
+ .
+ WARNING: the integration of gpc into gcc-4.x is still in an experimental
+ stage. For production use, please use gpc or gpc-2.1-3.4.
+')`'dnl pascal
+
+ifenabled(`d ',`
+Package: gdc`'PV`'TS
+Architecture: any
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, g++`'PV`'TS (>= ${gcc:SoftVersion}), libphobos`'PHOBOS_V`'PV`'TS-dev (= ${gdc:Version}) [libphobos_no_archs], ${shlibs:Depends}
+Provides: d-compiler`'TS
+Description: The D compiler
+ This is the D compiler, which compiles D on platforms supported by the gcc
+ compiler. It uses the GCC backend to generate optimised code.
+ .
+  Homepage: http://dgcc.sourceforge.net/
+
+ifenabled(`libphobos',`
+Package: libphobos`'PHOBOS_V`'PV`'TS-dev
+Architecture: any
+Priority: PRI(optional)
+Depends: ${shlibs:Depends}, gdc`'PV`'TS (= ${gdc:Version}), zlib1g-dev (>= 1:1.2.3.3)
+Provides: libphobos`'PHOBOS_V`'TS-dev
+Replaces: gdc-4.1`'TS (<< 0.25-4.1.2-17)
+Description: The phobos D standard library
+ This is the Phobos standard library that comes with the D compiler.
+ .
+  Homepage: http://www.digitalmars.com/d/phobos/phobos.html
+')`'dnl libphobos
+')`'dnl d
+
+ifdef(`TARGET',`',`dnl
+ifenabled(`libs',`
+Package: gcc`'PV-soft-float
+Architecture: arm armeb
+Priority: PRI(optional)
+Depends: BASEDEP, ifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}
+Replaces: gcc-soft-float-ss
+Description: The soft-floating-point gcc libraries (arm)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+')`'dnl commonlibs
+')`'dnl
+
+ifenabled(`fixincl',`
+Package: fixincludes
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), ${shlibs:Depends}
+Description: Fix non-ANSI header files
+ FixIncludes was created to fix non-ANSI system header files. Many
+ system manufacturers supply proprietary headers that are not ANSI compliant.
+ The GNU compilers cannot compile non-ANSI headers. Consequently, the
+ FixIncludes shell script was written to fix the header files.
+ .
+ Not all packages with header files are installed on the system, when the
+ package is built, so we make fixincludes available at build time of other
+ packages, such that checking tools like lintian can make use of it.
+')`'dnl fixincl
+
+ifenabled(`cdev',`
+ifdef(`TARGET', `', `
+ifenabled(`gfdldoc',`
+Package: gcc`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion})
+Conflicts: gcc-docs (<< 2.95.2)
+Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2)
+Description: Documentation for the GNU compilers (gcc, gobjc, g++)
+ Documentation for the GNU compilers in info `format'.
+')`'dnl gfdldoc
+')`'dnl native
+')`'dnl cdev
+
+ifdef(`TARGET',`',`dnl
+ifenabled(`libnof',`
+Package: gcc`'PV-nof
+Architecture: powerpc
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}ifenabled(`cdev',`, gcc`'PV (= ${gcc:Version})')
+Conflicts: gcc-3.2-nof
+Description: The no-floating-point gcc libraries (powerpc)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+')`'dnl libnof
+')`'dnl
+
+ifenabled(`source',`
+Package: gcc`'PV-source
+Architecture: all
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), make (>= 3.81)
+Description: Source of the GNU Compiler Collection
+ This package contains the sources and patches which are needed to
+ build the GNU Compiler Collection (GCC).
+')`'dnl source
+dnl
+')`'dnl gcc-X.Y
+dnl last line in file
--- gcc-4.1-4.1.2.orig/debian/gcjh-wrapper-BV
+++ gcc-4.1-4.1.2/debian/gcjh-wrapper-BV
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java header generator.
+#
+# Command-line arguments should be in the style of Sun's javah command;
+# these will be converted to gcjh arguments before being passed to the
+# gcjh itself.
+#
+# Copyright (C) 2003 by Peter Hawkins <peterh@debian.org>
+# Haphazardly hacked up based on the gcj-wrapper perl script.
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gcj-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java header generator:
+my $javaHeaderGen = '/usr/bin/gcjh-@BV@';
+
+# The command-line arguments to pass to the real Java compiler:
+my @commandLine;
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+my $copyNextArg = 0;
+my $ignoreNextArg = 0;
+my $appendNextArg = '';
+foreach my $arg (@ARGV) {
+    # See if we already know what to do with this argument.
+    if ($ignoreNextArg) {
+        # Throw it away.
+        $ignoreNextArg = 0;
+        next;
+    } elsif ($copyNextArg or not $parsingOptions) {
+        # Copy it directly.
+        push @commandLine, $arg;
+        $copyNextArg = 0;
+        next;
+    } elsif ($appendNextArg) {
+        # Append it to $appendNextArg and then copy directly.
+        push @commandLine, ($appendNextArg . $arg);
+        $appendNextArg = '';
+        next;
+    }
+
+    # Try to interpret Sun-style options.
+    if ($arg eq '-version') {
+        push @commandLine, '--version';
+    } elsif ($arg eq '-h' or $arg eq '-help') {
+        push @commandLine, '--help';
+    } elsif ($arg eq '-verbose') {
+        push @commandLine, '--verbose';
+    } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
+        $appendNextArg = '--classpath=';
+    } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
+             $arg eq '-extdirs') {
+        $appendNextArg = "-".$arg . '=';
+    } elsif ($arg eq '-d') {
+        push @commandLine, '-d';
+        $copyNextArg = 1;
+    } elsif ($arg eq '-o') {
+        push @commandLine, '-o';
+        $copyNextArg = 1;
+    } elsif ($arg eq '-stubs') {
+        push @commandLine, '-stubs';
+    } elsif ($arg eq '-jni') {
+        push @commandLine, '-jni';
+    } elsif ($arg =~ /^-old/) {
+        # An extended Sun option (which we don't support).
+        push @commandLine, '--help' if ($arg eq '-old');
+    } elsif ($arg =~ /^-/) {
+        # An unsupported standalone option.
+    } else {
+        # Some non-option argument has been given.
+        # Stop parsing options at this point.
+        push @commandLine, $arg;
+        $parsingOptions = 0;
+    }
+}
+
+# Was there a partial argument that was never completed?
+push @commandLine, $appendNextArg if ($appendNextArg);
+
+# Call the real Java header generator.
+my @fullCommandLine = ( $javaHeaderGen );
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
--- gcc-4.1-4.1.2.orig/debian/README.snapshot
+++ gcc-4.1-4.1.2/debian/README.snapshot
@@ -0,0 +1,36 @@
+Debian gcc-snapshot package
+===========================
+
+This package contains  a recent development SNAPSHOT of all files
+contained in the GNU Compiler Collection (GCC).
+
+DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES!
+
+This package will NEVER hit the testing distribution. It's used for
+tracking gcc bugs submitted to the Debian BTS in recent development
+versions of gcc.
+
+To use this snapshot, you should set the following environment variables:
+
+	LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
+	PATH=/usr/lib/gcc-snapshot/bin:$PATH
+
+You might also like to use a shell script to wrap up this 
+funcationality, e.g. 
+ 
+place in /usr/local/bin/gcc-snapshot and chmod +x it 
+ 
+----------- snip ----------
+#! /bin/sh
+LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
+PATH=/usr/lib/gcc-snapshot/bin:$PATH
+gcc "$@"
+----------- snip ----------
+
+Make the same for g++, g77, gij, gcj, cpp, ...
+ 
+Don't forget the quotes around the $@ or gcc will not parse it's 
+command line correctly! 
+
+Unset these variables before building Debian packages destined for an
+upload to ftp-master.debian.org.
--- gcc-4.1-4.1.2.orig/debian/rules2
+++ gcc-4.1-4.1.2/debian/rules2
@@ -0,0 +1,1585 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+.SUFFIXES:
+
+include debian/rules.defs
+include debian/rules.parameters
+
+# some tools
+SHELL	= /bin/bash -e		# brace expansion in rules file
+IR	= install -m 644	# Install regular file
+IP	= install -m 755	# Install program
+IS	= install -m 755	# Install script
+
+#number of jobs to run for build
+ifeq ($(USE_NJOBS),no)
+  NJOBS :=
+  USE_CPUS := 1
+else
+  ifeq ($(with_java),yes)
+    MEM_PER_CPU = 192
+  else
+    MEM_PER_CPU = 128
+  endif
+  NUM_CPUS := $(shell if echo $(USE_NJOBS) | grep -q -E '^[0-9]+$$'; \
+			then echo $(USE_NJOBS); \
+			else getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1; fi)
+  USE_CPUS := $(shell mt=`awk '/^MemTotal/ { print $$2 }' /proc/meminfo`; \
+			awk -vn=$(NUM_CPUS) -vmt=$$mt -vm=$(MEM_PER_CPU) \
+				'END { mt/=1024; n2 = int(mt/m); print n==1 ? 1 : n2<n+1 ? n2 : n+1}' < /dev/null)
+  ifneq (,$(strip $(USE_CPUS)))
+    NJOBS := -j $(USE_CPUS)
+  endif
+endif
+
+# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008)
+ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+  NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+endif
+
+ifeq ($(with_pascal),yes)
+  NJOBS :=
+endif
+
+ifeq ($(with_d),yes)
+  NJOBS :=
+endif
+
+# kernel-specific ulimit hack
+ifeq ($(findstring linux,$(DEB_HOST_GNU_SYSTEM)),linux)
+  ULIMIT_M =  if [ -e /proc/meminfo ]; then \
+	    m=`awk '/^((Mem|Swap)Free|Cached)/{m+=$$2}END{print int(m*.9)}' \
+		/proc/meminfo`; \
+	  else \
+	    m=`vmstat --free --swap-free --kilobytes|awk '{m+=$$2}END{print int(m*.9)}'`; \
+	  fi; \
+	  ulimit -m $$m; \
+	  echo "Limited memory for test runs to `ulimit -m`kB"
+else
+  ULIMIT_M = true
+endif
+
+ifeq ($(locale_data),generate)
+  SET_LOCPATH = LOCPATH=$(PWD)/locales
+endif
+
+# the recipient for the test summaries. Send with: debian/rules mail-summary
+S_EMAIL = gcc@packages.debian.org gcc-testresults@gcc.gnu.org
+
+CC	= $(if $(filter yes,$(with_ada)),gcc-4.1,gcc)
+
+ifeq ($(with_d),yes)
+  CFLAGS  += -std=gnu99
+  LDFLAGS += -lm
+endif
+
+ifeq ($(DEB_HOST_ARCH), $(findstring $(DEB_HOST_ARCH),m68k))
+  STAGE1_CFLAGS= -g -O2
+endif
+
+ifeq ($(with_ssp_default),yes)
+  # FIXME: only use -fno-stack-protector when known to the stage1 compiler
+  STAGE1_CFLAGS	= -g -O -fno-stack-protector
+  BOOT_CFLAGS	= -g -O2 -fno-stack-protector
+endif
+
+ifdef DEB_CROSS
+  CFLAGS	= -g -O2
+endif
+
+CFLAGS_TO_PASS = \
+	$(if $(CFLAGS),CFLAGS="$(CFLAGS)") \
+	$(if $(BOOT_CFLAGS),BOOT_CFLAGS="$(BOOT_CFLAGS)")
+LDFLAGS_TO_PASS = \
+	$(if $(LDFLAGS),LDFLAGS="$(LDFLAGS)")
+STAGE1_CFLAGS_TO_PASS = \
+	$(if $(STAGE1_CFLAGS),STAGE1_CFLAGS="$(STAGE1_CFLAGS)")
+
+docdir		= usr/share/doc
+
+# PF is the installation prefix for the package without the leading slash.
+# It's "usr" for gcc releases
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  PF		= usr/lib/gcc-snapshot
+else
+  PF		= usr
+endif
+
+ifeq ($(with_multiarch_lib),yes)
+  libdir	= lib/$(DEB_TARGET_GNU_TYPE)
+else
+  libdir	= lib
+endif
+# /usr/libexec doesn't follow the FHS
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  libexecdir	= $(PF)/libexec
+else
+  libexecdir	= $(PF)/$(libdir)
+endif
+buildlibdir	= $(builddir)/$(TARGET_ALIAS)
+
+ifeq ($(with_common_gcclibdir),yes)
+  gcc_lib_dir	= $(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+  gcc_lexec_dir	= $(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+  old_lib_dir	= $(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/4.1.2
+else
+  gcc_lib_dir	= $(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(GCC_VERSION)
+  gcc_lexec_dir	= $(libexecdir)/gcc/$(TARGET_ALIAS)/$(GCC_VERSION)
+endif
+
+ifneq ($(distribution)-$(DEB_TARGET_ARCH),Debian-amd64)
+  lib32		= $(PF)/lib32
+else
+  lib32		= emul/ia32-linux/usr/lib
+endif
+lib64		= lib64
+
+checkdir = $(builddir)
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    ifneq ($(with_standalone_gcj),yes)
+      checkdir = $(buildlibdir)/libjava
+    endif
+  endif
+endif
+ifeq ($(with_separate_gnat),yes)
+  ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+    checkdir = $(builddir)/gcc
+  endif
+endif
+
+ifndef DEB_CROSS
+  cxx_inc_dir	= $(PF)/include/c++/$(GCC_VERSION)
+else
+  cxx_inc_dir	= $(PF)/$(TARGET_ALIAS)/include/c++/$(GCC_VERSION)
+endif
+
+CONFARGS = -v \
+	--enable-languages=$(subst $(SPACE),$(COMMA),$(enabled_languages)) \
+	--prefix=/$(PF) \
+	--enable-shared \
+	--with-system-zlib \
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  CONFARGS += \
+	--libexecdir=/$(libexecdir) \
+	--without-included-gettext \
+	--enable-threads=posix
+endif
+
+CONFARGS += $(if $(filter yes,$(with_nls)),--enable-nls,--disable-nls)
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  CONFARGS += --with-gxx-include-dir=/$(cxx_inc_dir)
+endif
+
+ifeq ($(versioned_packages),yes)
+  CONFARGS += --program-suffix=-$(BASE_VERSION)
+endif
+
+ifneq ($(with_sysroot),)
+  CONFARGS += --with-sysroot=$(with_sysroot)
+endif
+
+ifeq ($(with_cxa_atexit),yes)
+  CONFARGS += --enable-__cxa_atexit
+else
+  CONFARGS += --disable-__cxa_atexit
+endif
+
+ifneq ($(with_bootstrap),)
+  CONFARGS += --enable-bootstrap=$(with_bootstrap)
+endif
+
+ifeq ($(force_gnu_locales),yes)
+  CONFARGS += --enable-clocale=gnu
+endif
+
+ifeq ($(with_cxx)-$(with_debug),yes-yes)
+  CONFARGS += --enable-libstdcxx-debug
+endif
+
+ifeq ($(with_java),yes)
+  CONFARGS += --enable-java-maintainer-mode
+  ifeq ($(with_java_biarch_awt),yes)
+    CONFARGS += --enable-java-awt=$(subst $(SPACE),$(COMMA),$(foreach p,$(java_awt_peers),$(p)-default))
+  else
+    CONFARGS += --enable-java-awt=$(subst $(SPACE),$(COMMA),$(foreach p,$(java_awt_peers),$(p)))
+  endif
+  ifneq (,$(findstring gtk,$(java_awt_peers)))
+    CONFARGS += --enable-gtk-cairo
+  endif
+  CONFARGS += $(if $(filter yes,$(with_java_plugin)),--enable-plugin,--disable-plugin)
+  ifeq ($(PKGSOURCE),gcc-snapshot)
+    CONFARGS += --with-java-home=/$(PF)/jre
+  else
+    CONFARGS += --with-java-home=/$(PF)/lib/jvm/java-1.5.0-gcj-$(BASE_VERSION)-1.5.0.0/jre
+  endif
+  CONFARGS += --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
+endif
+
+ifeq ($(with_objc)-$(with_objc_gc),yes-yes)
+  CONFARGS += --enable-objc-gc
+endif
+
+ifeq ($(with_fortran),yes)
+  CONFARGS += --enable-mpfr
+endif
+
+ifneq ($(with_mudflap),yes)
+  CONFARGS += --disable-libmudflap
+endif
+
+ifneq ($(with_ssp),yes)
+  CONFARGS += --disable-libssp
+endif
+
+ifeq ($(findstring x86_64-linux,$(DEB_TARGET_GNU_TYPE)),x86_64-linux)
+    ifneq ($(biarch32),yes)
+      CONFARGS += --disable-multilib
+    endif
+endif
+
+ifeq ($(with_gcj),yes)
+    ifeq ($(DEB_HOST_GNU_CPU),m32r)
+	CONFARGS += --enable-libgcj
+    endif
+endif
+
+ifeq ($(findstring powerpc-linux,$(DEB_TARGET_GNU_TYPE)),powerpc-linux)
+    ifeq ($(biarch),yes)
+      CONFARGS += --disable-softfloat --enable-secureplt \
+	--enable-targets=powerpc-linux,powerpc64-linux --with-cpu=default32
+    else
+      CONFARGS += --disable-multilib
+    endif
+endif
+
+ifneq (,$(findstring softfloat,$(DEB_TARGET_GNU_CPU)))
+  CONFARGS += --with-float=soft
+endif
+
+ifneq (,$(findstring arm-vfp,$(DEB_TARGET_GNU_CPU)))
+  CONFARGS += --with-fpu=vfp
+endif
+
+ifeq ($(DEB_TARGET_GNU_CPU),$(findstring $(DEB_TARGET_GNU_CPU),m68k))
+  CONFARGS += --disable-werror
+endif
+
+ifeq ($(findstring sparc-linux,$(DEB_TARGET_GNU_TYPE)),sparc-linux)
+  ifeq ($(biarch),yes)
+    CONFARGS += --with-cpu=v8
+  endif
+endif
+
+ifeq ($(findstring sh4-linux,$(DEB_TARGET_GNU_TYPE)),sh4-linux)
+  CONFARGS += --with-multilib-list=m4,m4-nofpu --with-cpu=sh4
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),linux)
+  ifneq (,$(findstring $(DEB_TARGET_ARCH), alpha powerpc ppc64 s390 s390x sparc sparc64))
+    ifeq ($(DEB_TARGET_ARCH),alpha)
+      glibc_version := $(shell dpkg -s libc6.1 | awk '/^Version:/ {print $$2}')
+    else
+      glibc_version := $(shell dpkg -s libc6 | awk '/^Version:/ {print $$2}')
+    endif
+    with_ldbl128 := $(shell dpkg --compare-versions $(glibc_version) gt 2.3.99 && echo yes)
+    ifeq ($(with_ldbl128),yes)
+      CONFARGS += --with-long-double-128
+    endif
+  endif
+endif
+
+ifeq ($(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE)),ia64-linux)
+  CONFARGS += --with-system-libunwind
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 hurd-i386 kfreebsd-i386 kfreebsd-amd64))
+  CONFARGS += --with-tune=generic
+endif
+
+ifeq ($(findstring i486,$(DEB_TARGET_GNU_TYPE)),i486)
+  # conflicts with biarch builds, see cpu-default-generic patch
+  #CONFARGS += --with-arch=i486
+endif
+
+# lpia
+ifeq ($(DEB_TARGET_ARCH),lpia)
+  CONFARGS += --with-arch=i686 --with-tune=i586
+endif
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  ifeq ($(findstring --disable-werror, $(CONFARGS)),)
+    CONFARGS += --disable-werror
+  endif
+else
+  CONFARGS += --enable-checking=release
+endif
+
+ifndef DEB_CROSS
+  CONFARGS += $(TARGET_ALIAS)
+else
+  CONFARGS += \
+	--program-prefix=$(TARGET_ALIAS)- \
+	--includedir=/$(PF)/$(DEB_TARGET_GNU_TYPE)/include \
+	--build=$(DEB_BUILD_GNU_TYPE) \
+	--host=$(DEB_HOST_GNU_TYPE) \
+	--target=$(TARGET_ALIAS)
+endif
+
+ifeq ($(with_bootstrap),)
+  # no profiledbootstrap on the following architectures
+  # - m68k: we're happy that it builds at all
+  # - ia64: doesn't work, see PR16108
+  # - hppa: when using gcc-3.3.4 as stage1 compiler, nearly all of the
+  #   tests in the libstdc++-v3 testsuite fail
+  no_profiled_bs_archs := hppa ia64 m68k
+  ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),$(no_profiled_bs_archs)))
+    bootstrap_target = bootstrap-lean
+  else
+    bootstrap_target = profiledbootstrap
+  endif
+endif
+bootstrap_target = bootstrap
+
+# Increase the timeout for one testrun on slow architectures
+ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),arm armeb hppa m68k sparc))
+  DEJAGNU_TIMEOUT=600
+else
+  DEJAGNU_TIMEOUT=450
+endif
+ifeq ($(DEB_TARGET_GNU_SYSTEM),gnu)
+  DEJAGNU_TIMEOUT=900
+endif
+
+DEJAGNU_RUNS =
+ifeq ($(with_ssp),yes)
+  ifeq ($(with_ssp_default),yes)
+    DEJAGNU_RUNS += -fno-stack-protector
+  else
+    DEJAGNU_RUNS += -fstack-protector
+  endif
+endif
+ifeq ($(with_32bit_check),yes)
+  DEJAGNU_RUNS += -m32
+endif
+ifeq ($(with_64bit_check),yes)
+  DEJAGNU_RUNS += -m64
+endif
+# the builds already take that long
+ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),arm m68k))
+  DEJAGNU_RUNS =
+endif
+
+# gdc is not multilib'd
+ifneq (,$(findstring gdc, $(PKGSOURCE)))
+  DEJAGNU_RUNS =
+endif
+
+ifneq (,$(DEJAGNU_RUNS))
+  RUNTESTFLAGS = RUNTESTFLAGS="--target_board=unix\{,$(subst $(SPACE),$(COMMA),$(strip $(DEJAGNU_RUNS)))\}"
+endif
+
+default: build
+
+configure: $(configure_dependencies)
+
+$(configure_dummy_stamp):
+	touch $(configure_dummy_stamp)
+
+$(configure_stamp):
+	dh_testdir
+	: # give information about the build process
+	@echo "------------------------ Build process variables ------------------------"
+	@echo "Number of parallel processes used for the build: $(USE_CPUS)"
+	@echo "Package source: $(PKGSOURCE)"
+	@echo "GCC version: $(GCC_VERSION)"
+	@echo "Base Debian version: $(BASE_VERSION)"
+	@echo -e "Configured with: $(foreach i,$(CONFARGS),$(i)\n\t)"
+ifdef DEB_CROSS
+	@echo "Building cross compiler for $(DEB_TARGET_ARCH)"
+endif
+	@echo "Using shell $(SHELL)"
+	@echo "Architecture: $(DEB_TARGET_ARCH) (GNU: $(TARGET_ALIAS))"
+	@echo "CPPFLAGS: $(CPPFLAGS)"
+	@echo "CFLAGS: $(CFLAGS)"
+	@echo "LDFLAGS: $(LDFLAGS)"
+	@echo "BOOT_CFLAGS: $(BOOT_CFLAGS)"
+	@echo "DEBIAN_BUILDARCH: $(DEBIAN_BUILDARCH)"
+	@echo "Install prefix: /$(PF)"
+ifeq ($(biarch),yes)
+	@echo "Will build the biarch compilers (32/64, defaulting to 32bit)"
+else
+  ifeq ($(biarch32),yes)
+	@echo "Will build the biarch compilers (64/32, defaulting to 64bit)"
+  else
+	@echo "Will not build the biarch compilers"
+  endif
+endif
+
+ifeq ($(with_cxx),yes)
+	@echo "Will build the C++ compiler"
+else
+	@echo "Will not build the C++ compiler: $(with_cxx)"
+endif
+ifeq ($(with_objc),yes)
+	@echo "Will build the ObjC compiler."
+    ifeq ($(with_objc_gc),yes)
+	@echo "Will build the extra ObjC runtime for garbage collection."
+    else
+	@echo "Will not build the extra ObjC runtime for garbage collection."
+    endif
+else
+	@echo "Will not build the ObjC compiler: $(with_objc)"
+endif
+ifeq ($(with_objcxx),yes)
+	@echo "Will build the Obj-C++ compiler"
+else
+	@echo "Will not build the Obj-C++ compiler: $(with_objcxx)"
+endif
+ifeq ($(with_fortran),yes)
+	@echo "Will build the Fortran 95 compiler."
+else
+	@echo "Will not build the Fortran 95 compiler: $(with_fortran)"
+endif
+ifeq ($(with_java),yes)
+	@echo "Will build the Java compiler."
+else
+	@echo "Will not build the Java compiler: $(with_java)"
+endif
+ifeq ($(with_pascal),yes)
+	@echo "Will build the Pascal compiler."
+else
+	@echo "Will not build the Pascal compiler: $(with_pascal)"
+endif
+ifeq ($(with_ada),yes)
+	@echo "Will build the Ada compiler."
+  ifeq ($(with_libgnat),yes)
+	@echo "Will build the shared Ada libraries."
+  else
+	@echo "Will not build the shared Ada libraries."
+  endif
+else
+	@echo "Will not build the Ada compiler: $(with_ada)"
+endif
+ifeq ($(with_d),yes)
+	@echo "Will build the D compiler."
+  ifeq ($(with_libphobos),yes)
+	@echo "Will build the phobos D runtime library."
+  else
+	@echo "Will not build the phobos D runtime library: $(with_libphobos)"
+  endif
+else
+	@echo "Will not build the D compiler: $(with_d)"
+endif
+ifeq ($(with_libffi),yes)
+	@echo "Will build the FFI library."
+else
+	@echo "Will not build the FFI library: $(with_libffi)"
+endif
+ifeq ($(with_ssp),yes)
+	@echo "Will build with SSP support."
+else
+	@echo "Will build without SSP support: $(with_ssp)"
+endif
+ifeq ($(with_check),yes)
+	@echo "Will run the testsuite."
+  ifeq ($(biarch),yes)
+	@echo 'Will run the testsuite with -m64: $(with_64bit_check)'
+  endif
+  ifeq ($(biarch32),yes)
+	@echo 'Will run the testsuite with -m32: $(with_32bit_check)'
+  endif
+else
+	@echo "Will not run the testsuite: $(with_check)"
+endif
+ifeq ($(with_nls),yes)
+	@echo "Will enable national language support."
+else
+	@echo "Will disable national language support: $(with_nls)"
+endif
+	@echo "-----------------------------------------------------------------------------"
+	@echo ""
+ifeq ($(with_check),yes)
+	@if echo "spawn true" | /usr/bin/expect -f - >/dev/null; then \
+	  : ; \
+	else \
+	  echo "expect is failing on your system with the above error, which means the GCC"; \
+	  echo "testsuite will fail.  Please resolve the above issues and retry the build."; \
+	  echo "-----------------------------------------------------------------------------"; \
+	  exit 1; \
+	fi
+endif
+	rm -f $(configure_stamp) $(build_stamp)
+	: # generate debian/README.Debian
+	cat debian/README $(patch_stamp) > debian/README.Debian
+
+	rm -rf $(builddir)
+	mkdir $(builddir)
+
+	: # configure
+	cd $(builddir) \
+	  && echo '' | PATH=$(PWD)/bin:$$PATH \
+		CC="$(CC)" \
+		$(SET_SHELL) \
+	LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc/ada/rts \
+		../src/configure $(CONFARGS)
+
+	mkdir -p $(builddir)/gcc
+	( \
+	  echo '#define __$(subst -,_,$(DEB_TARGET_GNU_TYPE))__'; \
+	  echo ''; \
+	  echo '  { "",  "$(DEB_TARGET_GNU_TYPE)"},'; \
+	  cat debian/multiarch.inc; \
+	) > $(builddir)/gcc/multiarch.inc
+
+	touch $(configure_stamp)
+
+build: $(build_dependencies)
+
+$(build_dummy_stamp):
+	touch $(build_dummy_stamp)
+
+$(build_stamp): $(configure_stamp)
+	dh_testdir
+	rm -f bootstrap-protocol
+ifndef DEB_CROSS
+  ifeq ($(with_java),yes)
+	mkdir -p bin
+	ln -sf /usr/bin/fastjar bin/jar
+    ifeq ($(with_native_ecj),yes)
+	: # prepare the standalone ecj jar
+	cp /usr/share/java/ecj.jar $(srcdir)/ecj-standalone.jar
+	zip -d $(srcdir)/ecj-standalone.jar 'org/eclipse/jdt/core/JDTCompilerAdapter*'
+    endif
+	: # If we don't have gjavah in $PATH, try to build it with the old gij
+	mkdir -p bin
+	if [ -x /usr/bin/gjavah-4.1 ]; then \
+	  ln -sf /usr/bin/gjavah-4.1 bin/gjavah; \
+	elif [ -x bin/gjavah ]; then \
+	  : ; \
+	else \
+	  mkdir -p $(builddir)/java_hacks; \
+	  cd $(builddir)/java_hacks; \
+	  cp -a $(srcdir)/libjava/classpath/tools/external external; \
+	  mkdir -p gnu/classpath/tools; \
+	  cp -a $(srcdir)/libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} \
+	    gnu/classpath/tools/; \
+	  cp -a $(srcdir)/libjava/classpath/resource/gnu/classpath/tools/common/Messages.properties \
+	    gnu/classpath/tools/common; \
+	  cd external/asm; \
+	  for i in `find . -name \*.java`; do gcj-4.1 --encoding ISO-8859-1 -C $$i -I.; done; \
+	  cd ../..; \
+	  for i in `find gnu -name \*.java`; do gcj-4.1 -C $$i -I. -Iexternal/asm/; done; \
+	  gcj-4.1 -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main \
+	    -I. -Iexternal/asm/ `find . -name \*.class` -o $(PWD)/bin/gjavah.real; \
+	  ( \
+	    echo '#!/bin/sh'; \
+	    echo 'export CLASSPATH='`pwd`'$${CLASSPATH:+:$$CLASSPATH}'; \
+	    echo 'exec $(PWD)/bin/gjavah.real "$$@"'; \
+	  ) > $(PWD)/bin/gjavah; \
+	  chmod +x $(PWD)/bin/gjavah; \
+	fi
+	( \
+	  echo '#!/bin/sh'; \
+	  echo 'exec gij-4.1 -cp /usr/share/java/ecj.jar org.eclipse.jdt.internal.compiler.batch.GCCMain "$$@"'; \
+	) > bin/ecj1
+	chmod +x bin/ecj1
+  endif
+	: # build native compiler
+	( \
+	  set +e; \
+	  PATH=$(PWD)/bin:$$PATH \
+	  $(SET_SHELL) \
+	    $(MAKE) -C $(builddir) $(NJOBS) $(bootstrap_target) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(STAGE1_CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		; \
+	  echo $$? > status; \
+	) 2>&1 | tee bootstrap-protocol
+	s=`cat status`; rm -f status; test $$s -eq 0
+
+  ifneq ($(with_java),yes)
+    ifeq ($(with_fastjar),yes)
+	rm -rf $(builddir)/fastjar
+	mkdir -p $(builddir)/fastjar
+	cd $(builddir)/fastjar \
+	  && CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" CFLAGS="$(CFLAGS)" \
+		../../src/fastjar/configure $(CONFARGS)
+	$(MAKE) -C $(builddir)/fastjar ZDEPS= ZINCS= ZLIBS=-lz
+    endif
+  endif
+else
+	: # build cross compiler for $(TARGET_ALIAS)
+	( \
+	  set +e; \
+	  PATH=$(PWD)/bin:$$PATH \
+	    $(MAKE) -C $(builddir) $(NJOBS) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		; \
+	  echo $$? > status; \
+	) 2>&1 | tee bootstrap-protocol
+	s=`cat status`; rm -f status; test $$s -eq 0
+endif
+	-chmod 755 $(srcdir)/contrib/warn_summary
+	if [ -x $(srcdir)/contrib/warn_summary ]; then \
+	  rm -f bootstrap-summary; \
+	  $(srcdir)/contrib/warn_summary bootstrap-protocol \
+	    > bootstrap-summary; \
+	fi
+
+	touch $(build_stamp)
+
+ifeq ($(versioned_packages),yes)
+  hppa64_configure_flags += --program-suffix=-$(BASE_VERSION)
+endif
+
+$(configure_hppa64_stamp): $(build_stamp)
+	dh_testdir
+	rm -f $(configure_hppa64_stamp) $(build_hppa64_stamp)
+	rm -rf $(builddir_hppa64)
+	mkdir $(builddir_hppa64)
+	: # configure
+	cd $(builddir_hppa64) && \
+	  PATH=$(PWD)/bin:$$PATH \
+	  $(SET_SHELL) \
+	  CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+	     ../src/configure \
+		--enable-languages=c \
+		--prefix=/$(PF) \
+		--libexecdir=/$(libexecdir) \
+		--disable-shared \
+		--disable-nls \
+		--disable-threads \
+		--disable-libffi \
+		--disable-libgomp \
+		--disable-libmudflap \
+		--disable-libssp \
+		--with-as=/usr/bin/hppa64-linux-gnu-as \
+		--with-ld=/usr/bin/hppa64-linux-gnu-ld \
+		--includedir=/usr/hppa64-linux-gnu/include \
+		--host=hppa-linux-gnu \
+		--build=hppa-linux-gnu \
+		--target=hppa64-linux-gnu
+
+	mkdir -p $(builddir_hppa64)/gcc
+	( \
+	  echo '#define __$(subst -,_,hppa64-linux-gnu)__'; \
+	  echo ''; \
+	  echo '  { "",  "hppa64-linux-gnu"},'; \
+	) > $(builddir_hppa64)/gcc/multiarch.inc
+
+	touch $(configure_hppa64_stamp)
+
+$(build_hppa64_stamp): $(configure_hppa64_stamp)
+	  PATH=$(PWD)/bin:$$PATH \
+	  $(SET_SHELL) \
+	    $(MAKE) -C $(builddir_hppa64) $(NJOBS) \
+		CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS)
+	touch $(build_hppa64_stamp)
+
+$(configure_ia6432_stamp): $(build_stamp)
+	dh_testdir
+	rm -f $(configure_ia6432_stamp) $(build_ia6432_stamp)
+	rm -rf $(builddir_ia6432)
+	mkdir $(builddir_ia6432)
+	: # configure
+	cd $(builddir_ia6432) && \
+	  PATH=$(PWD)/bin:$$PATH \
+	  $(SET_SHELL) \
+	  CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+	     ../src/configure \
+		--enable-languages=c \
+		--prefix=/$(PF) \
+		--libexecdir=/$(libexecdir) \
+		--disable-nls \
+		--disable-libmudflap \
+		--program-suffix=-$(BASE_VERSION) \
+		--host=ia64-linux-gnu \
+		--build=ia64-linux-gnu \
+		--target=i486-linux-gnu
+	touch $(configure_ia6432_stamp)
+
+$(build_ia6432_stamp): $(configure_ia6432_stamp)
+	  PATH=$(PWD)/bin:$$PATH \
+	  $(SET_SHELL) \
+	    $(MAKE) -C $(builddir_ia6432) $(NJOBS) \
+		CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS)
+	touch $(build_ia6432_stamp)
+
+
+MANUALS = \
+	$(srcdir)/gcc/doc/cpp.texi \
+	$(srcdir)/gcc/doc/cppinternals.texi \
+	$(srcdir)/gcc/doc/gcc.texi \
+	$(srcdir)/gcc/doc/gccint.texi
+ifeq ($(with_fortran),yes)
+  MANUALS += $(srcdir)/gcc/fortran/gfortran.texi
+endif
+ifeq ($(with_java),yes)
+  MANUALS += $(srcdir)/gcc/java/gcj.texi
+endif
+ifeq ($(with_ada),yes)
+  MANUALS += \
+	$(builddir)/gcc/doc/gnat_ugn_unw.texi \
+	$(srcdir)/gcc/ada/gnat_rm.texi \
+	$(srcdir)/gcc/ada/gnat-style.texi
+endif
+ifeq ($(with_pascal),yes)
+  MANUALS += \
+	$(srcdir)/gcc/p/doc/en/gpc.texi \
+	$(srcdir)/gcc/p/doc/en/gpcs.texi
+endif
+
+html-docs: $(build_html_stamp)
+#$(build_html_stamp): html-texi2html
+#$(build_html_stamp): html-makeinfo
+$(build_html_stamp): html-makeinfo-nosplit
+
+html-texi2html:
+	rm -rf html
+	mkdir html
+	for manual in $(MANUALS); do \
+	  outname=`basename $${manual} .texi`; \
+	  echo "generating $$outname ..."; \
+	  texi2html -number -split chapter \
+		-I $(srcdir)/gcc/doc/include \
+		-I $(srcdir)/gcc/p/doc \
+		-I $(srcdir)/gcc/p/doc/generated \
+		-I `dirname $${manual}` \
+		-I $(builddir)/gcc \
+		-subdir html \
+		$${manual}; \
+	done
+
+html-makeinfo:
+	rm -rf html
+	mkdir html
+	cd html && \
+	for manual in $(MANUALS); do \
+	  manual=`find $(srcdir) -name $${file}.texi`; \
+	  outname=`basename $${manual} .texi`; \
+	  echo "generating $$outname ..."; \
+	  if [ "$${manual}" ]; then \
+	    makeinfo --html --number-sections \
+		-I $(srcdir)/gcc/doc/include -I `dirname $${manual}` \
+		-I $(srcdir)/gcc/p/doc \
+		-I $(srcdir)/gcc/p/doc/generated \
+		-I $(builddir)/gcc \
+		-o $${outname} \
+		$${manual}; \
+	  fi; \
+	done
+
+html-makeinfo-nosplit:
+	rm -rf html
+	mkdir html
+	cd html && \
+	for manual in $(MANUALS); do \
+	  outname=`basename $${manual} .texi`.html; \
+	  echo "generating $$outname ..."; \
+	  makeinfo --html --number-sections --no-split \
+		-I $(srcdir)/gcc/doc/include -I `dirname $${manual}` \
+		-I $(srcdir)/gcc/p/doc \
+		-I $(srcdir)/gcc/p/doc/generated \
+		-I $(builddir)/gcc \
+		-o $${outname} \
+		$${manual}; \
+	done
+
+# start the script only on architectures known to have slow autobilders ...
+logwatch_archs := arm armeb m68k mips mipsel sparc
+ifeq ($(DEB_HOST_GNU_CPU), $(findstring $(DEB_HOST_GNU_CPU),$(logwatch_archs)))
+  start_logwatch = yes
+endif
+ifeq ($(DEB_HOST_GNU_SYSTEM),gnu)
+  start_logwatch = yes
+endif
+
+check: $(check_stamp) #$(check_inst_stamp)
+$(check_stamp): $(build_stamp)
+	rm -f test-protocol
+
+ifeq ($(locale_data),generate)
+	: # build locales needed by libstdc++ testsuite
+	rm -rf locales
+	mkdir locales
+	-sh debian/locale-gen
+endif
+
+ifeq ($(start_logwatch),yes)
+	: # start logwatch script for regular output during test runs
+	chmod +x debian/logwatch.sh
+	-debian/logwatch.sh -t 900 -p $(builddir)/logwatch.pid \
+		-m '\ntestsuite still running ...\n' \
+		test-protocol \
+		$(builddir)/gcc/testsuite/{gcc,g++,g77,objc,obj-c++}.log \
+		$(builddir)/gcc/testsuite/ada/acats/acats.log \
+		$(builddir)/gcc/p/test/test_log \
+		$(buildlibdir)/libstdc++-v3/testsuite/libstdc++-v3.log \
+		$(buildlibdir)/libjava/testsuite/libjava.log \
+		$(buildlibdir)/libmudflap/testsuite/libmudflap.log \
+		&
+endif
+
+ifeq ($(with_ada),yes)
+	chmod +x debian/acats-killer.sh
+	-debian/acats-killer.sh -p $(builddir)/acats-killer.pid \
+		$(builddir)/gcc/testsuite/ada/acats/acats.log \
+		$(builddir)/gcc/testsuite/g++.log \
+		&
+endif
+
+ifeq ($(with_ada),yes)
+ifneq ($(PKGSOURCE),gcc-snapshot)
+# seems to be necessary for all archs
+# see above, hppa & gnatlib-shared-dual target
+#  ifeq ($(with_libgnat_shared_dual),yes)
+	if [ ! -f $(builddir)/gcc/ada/rts/libgnat-$(GNAT_SONAME).so ]; then \
+	  ln -sf libgnat-$(GNAT_SONAME).so.1 \
+	    $(builddir)/gcc/ada/rts/libgnat-$(GNAT_SONAME).so; \
+	fi
+	if [ ! -f $(builddir)/gcc/ada/rts/libgnarl-$(GNAT_SONAME).so ]; then \
+	  ln -sf libgnarl-$(GNAT_SONAME).so.1 \
+	    $(builddir)/gcc/ada/rts/libgnarl-$(GNAT_SONAME).so; \
+	fi
+#  endif
+endif
+endif
+
+	echo "Running testsuite ..."
+	-$(ULIMIT_M); \
+	    $(SET_SHELL) \
+	    $(SET_LOCPATH) \
+	    PATH=$(PWD)/bin:$$PATH \
+	    EXTRA_TEST_PFLAGS=-g0 \
+	    DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+		$(MAKE) -C $(checkdir) -k $(NJOBS) \
+		    check $(RUNTESTFLAGS) 2>&1 | tee test-protocol
+
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+	-if [ -f $(builddir)/logwatch.pid ]; then \
+	  kill -1 `cat $(builddir)/logwatch.pid`; \
+	  sleep 1; \
+	  kill -9 `cat $(builddir)/logwatch.pid`; \
+	  rm -f $(builddir)/logwatch.pid; \
+	fi
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+
+ifeq ($(with_ada),yes)
+	-if [ -f $(builddir)/acats-killer.pid ]; then \
+	  kill -1 `cat $(builddir)/acats-killer.pid`; \
+	  sleep 1; \
+	  kill -9 `cat $(builddir)/acats-killer.pid`; \
+	  rm -f $(builddir)/acats-killer.pid; \
+	fi
+endif
+
+	: # running the libjava testsuite alone is missing this information
+	$(builddir)/gcc/xgcc -B$(builddir)/gcc/ -v > $(builddir)/compiler_version.sum 2>&1
+
+	-chmod 755 $(srcdir)/contrib/test_summary
+	if [ -x $(srcdir)/contrib/test_summary ]; then \
+	  rm -f test-summary; \
+	  ( \
+	    cd $(builddir); \
+	    echo '' > ts-include; \
+	    echo '' >> ts-include; \
+	    if [ -f $(builddir)/gcc/.bad_compare ]; then \
+	      echo 'Bootstrap comparison failure:' >> ts-include; \
+	      cat $(builddir)/gcc/.bad_compare >> ts-include; \
+	      echo '' >> ts-include; \
+	      echo '' >> ts-include; \
+	    fi; \
+	    echo "Build Dependencies:" >> ts-include; \
+	    dpkg -l binutils `echo '$(LIBC_DEP)' | awk '{print $$1}'` \
+	        >> ts-include; \
+	    echo '' >> ts-include; \
+	    cat ../$(patch_stamp) >> ts-include; \
+	    BOOT_CFLAGS="$(BOOT_CFLAGS)" \
+	      $(srcdir)/contrib/test_summary \
+		-i ts-include -m "$(S_EMAIL)" \
+	  ) > raw-test-summary; \
+	  if [ -n "$(testsuite_tarball)" ]; then \
+	    echo "Test suite used: $(testsuite_srcdir)" > test-summary; \
+	    echo "  Do not interpret the results on its own" >> test-summary; \
+	    echo "  but compare them with the results from" >> test-summary; \
+	    echo "  the gcc-snapshot package." >> test-summary; \
+	  fi; \
+	  sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary \
+		>> test-summary; \
+	  awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF >> test-summary; \
+	  if [ -f bootstrap-summary -a "$(bootstrap_target)" != profiledbootstrap ]; then \
+	    echo '' >> test-summary; \
+	    cat bootstrap-summary >> test-summary; \
+	  fi; \
+	  echo 'BEGIN test-summary'; \
+	  cat test-summary; \
+	  echo 'END test-summary'; \
+	fi
+
+	touch $(check_stamp)
+
+$(check_inst_stamp): $(check_stamp)
+	rm -f test-inst-protocol
+
+ifeq ($(start_logwatch),yes)
+	: # start logwatch script for regular output during test runs
+	chmod +x debian/logwatch.sh
+	-debian/logwatch.sh -t 900 -p $(builddir)/logwatch-inst.pid \
+		-m '\ntestsuite (3.3) still running ...\n' \
+		test-inst-protocol \
+		check-inst/{gcc,g++,g77,objc}.log \
+		&
+endif
+
+	rm -rf check-inst
+	mkdir check-inst
+
+	echo "Running testsuite ..."
+	-$(ULIMIT_M) ; \
+	    $(SET_SHELL) \
+	    $(SET_LOCPATH) \
+	    EXTRA_TEST_PFLAGS=-g0 \
+	    DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+	  cd check-inst && $(srcdir)/contrib/test_installed \
+	    --with-gcc=gcc-3.3 --with-g++=g++-3.3 --with-g77=g77-3.3 \
+		2>&1 | tee test-inst-protocol
+
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+	if [ -f $(builddir)/logwatch-inst.pid ]; then \
+	  kill -1 `cat $(builddir)/logwatch-inst.pid`; \
+	else \
+	  true; \
+	fi
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+
+	-chmod 755 $(srcdir)/contrib/test_summary
+	if [ -x $(srcdir)/contrib/test_summary ]; then \
+	  rm -f test-inst-summary; \
+	  ( \
+	    cd check-inst; \
+	    echo '' > ts-include; \
+	    echo '' >> ts-include; \
+	    echo "Build Dependencies:" >> ts-include; \
+	    dpkg -l g++-3.3 binutils `echo '$(LIBC_DEP)' | awk '{print $$1}'` \
+	        >> ts-include; \
+	    echo '' >> ts-include; \
+	    echo 'Results for the installed GCC-3.3 compilers' >> ts-include; \
+	    $(srcdir)/contrib/test_summary \
+		-i ts-include -m "$(S_EMAIL)" \
+	  ) > raw-test-inst-summary; \
+	  sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-inst-summary \
+		>> test-inst-summary; \
+	  awk '/^cat/, /^EOF/' raw-test-inst-summary \
+		| grep -v EOF >> test-inst-summary; \
+	  echo 'BEGIN test-installed-summary'; \
+	  cat test-inst-summary; \
+	  echo 'END test-installed-summary'; \
+	fi
+
+	chmod 755 debian/reduce-test-diff.awk
+	if diff -u test-inst-summary test-summary \
+		| debian/reduce-test-diff.awk > diff-summary; \
+	then \
+	  mv -f diff-summary testsuite-comparision; \
+	else \
+	  ( \
+	    echo "WARNING: New failures in gcc-3.4 compared to gcc-3.3"; \
+	    echo ''; \
+	    cat diff-summary; \
+	  ) > testsuite-comparision; \
+	  rm -f diff-summary; \
+	fi
+	touch $(check_inst_stamp)
+
+clean: debian/control
+	dh_testdir
+	rm -f pxxx status
+	rm -f *-summary *-protocol testsuite-comparision summary-diff
+ifeq ($(with_pascal),yes)
+	-rm -f $(srcdir)/gcc/p/doc/*info
+	rm -f $(srcdir)/gcc/p/test/{fjf51,fjf141aa,fjf199aa,magic,?,knownbugs/a.out}
+endif
+	if [ -f $(srcdir)/gcc/p/config-lang.in.debian ]; then \
+	  mv -f $(srcdir)/gcc/p/config-lang.in.debian $(srcdir)/gcc/p/config-lang.in; \
+	else true; fi
+	rm -f $(srcdir)/gcc/po/*.gmo
+	rm -f debian/lib{ffi,g2c,gcc,gcj,objc,stdc++}{-v3,[0-9]}*.{{pre,post}{inst,rm},shlibs}
+	fs=`echo debian/*-BV* debian/*GCJ* debian/*CXX* debian/*LC*|sort -u`; \
+	for f in $$fs; do \
+	  [ -f $$f ] || continue; \
+	  f2=$$(echo $$f \
+		| sed 's/BV/$(BASE_VERSION)/;s/PV/$(GPC_BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LGCJ/$(PKG_LIBGCJ_EXT)/;s/GCJ/$(PKG_GCJ_EXT)/;s/LC/$(GCC_SONAME)/;s/FFI/$(FFI_SONAME)/'); \
+	  rm -f $$f2; \
+	done
+	rm -f debian/shlibs.local debian/substvars.local
+	rm -f debian/*.debhelper
+	-[ -d debian/bugs ] && $(MAKE) -C debian/bugs clean
+	rm -f debian/README.libstdc++-baseline
+	rm -rf bin locales
+	rm -rf check-inst
+	dh_clean
+
+# -----------------------------------------------------------------------------
+# some abbrevations for the package names and directories;
+# p_XXX is the package name, d_XXX is the package directory
+# these macros are only used in the binary-* targets.
+
+ifeq ($(versioned_packages),yes)
+  pkg_ver := -$(BASE_VERSION)
+endif
+
+ifndef DEB_CROSS
+  p_base = gcc$(pkg_ver)-base
+  p_gcc  = gcc$(pkg_ver)
+  p_cpp  = cpp$(pkg_ver)
+  p_cppd = cpp$(pkg_ver)-doc
+  p_cxx  = g++$(pkg_ver)
+  p_doc  = gcc$(pkg_ver)-doc
+  p_lgcc = libgcc$(GCC_SONAME)
+else
+  # only triggered if DEB_CROSS_INDEPENDENT set
+  p_base = gcc$(pkg_ver)$(cross_bin_arch)-base
+  p_cpp  = cpp$(pkg_ver)$(cross_bin_arch)
+  p_gcc  = gcc$(pkg_ver)$(cross_bin_arch)
+  p_cxx  = g++$(pkg_ver)$(cross_bin_arch)
+endif
+p_hppa64 = gcc$(pkg_ver)-hppa64
+
+d	= debian/tmp
+d_base	= debian/$(p_base)
+d_gcc	= debian/$(p_gcc)
+d_cpp	= debian/$(p_cpp)
+d_cppd	= debian/$(p_cppd)
+d_cxx	= debian/$(p_cxx)
+d_doc	= debian/$(p_doc)
+d_lgcc	= debian/$(p_lgcc)
+d_hppa64= debian/$(p_hppa64)
+
+common_substvars = \
+	$(shell awk "{printf \"'-V%s' \", \$$0}" debian/substvars.local)
+
+# ---------------------------------------------------------------------------
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  include debian/rules.d/binary-snapshot.mk
+else
+
+ifndef DEB_CROSS
+# ----------------------------------------
+# native target
+
+ifeq ($(with_gccbase),yes)
+  include debian/rules.d/binary-base.mk
+endif
+ifeq ($(with_libgcc),yes)
+  include debian/rules.d/binary-libgcc.mk
+endif
+
+ifeq ($(with_source),yes)
+  include debian/rules.d/binary-source.mk
+endif
+
+ifeq ($(with_cdev),yes)
+  include debian/rules.d/binary-cpp.mk
+endif
+
+ifeq ($(with_proto),yes)
+  include debian/rules.d/binary-proto.mk
+endif
+
+ifeq ($(with_fixincl),yes)
+  include debian/rules.d/binary-fixincl.mk
+endif
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+  ifeq ($(with_mudflap),yes)
+    include debian/rules.d/binary-libmudflap.mk
+  endif
+endif
+
+ifeq ($(with_libssp),yes)
+  include debian/rules.d/binary-libssp.mk
+endif
+
+ifeq ($(with_objcxx),yes)
+  include debian/rules.d/binary-objcxx.mk
+endif
+
+ifeq ($(with_objc),yes)
+  include debian/rules.d/binary-objc.mk
+endif
+ifeq ($(with_libobjc),yes)
+  include debian/rules.d/binary-libobjc.mk
+endif
+
+# include before cxx
+include debian/rules.d/binary-java.mk
+ifeq ($(with_fastjar),yes)
+  include debian/rules.d/binary-fastjar.mk
+endif
+
+ifeq ($(with_libffi),yes)
+  include debian/rules.d/binary-libffi.mk
+endif
+
+ifeq ($(with_cxxdev),yes)
+  include debian/rules.d/binary-cxx.mk
+endif
+ifeq ($(with_cxx),yes)
+  include debian/rules.d/binary-libstdcxx.mk
+endif
+
+ifeq ($(with_f77),yes)
+  include debian/rules.d/binary-f77.mk
+endif
+
+ifeq ($(with_fortran),yes)
+  include debian/rules.d/binary-fortran.mk
+endif
+
+ifeq ($(with_ada),yes)
+  include debian/rules.d/binary-ada.mk
+endif
+
+ifeq ($(with_pascal),yes)
+  include debian/rules.d/binary-pascal.mk
+endif
+
+ifeq ($(with_d),yes)
+  include debian/rules.d/binary-d.mk
+endif
+
+ifeq ($(with_libnof),yes)
+  ifeq ($(DEB_TARGET_GNU_CPU),powerpc)
+    include debian/rules.d/binary-nof.mk
+  endif
+endif
+
+# gcc must be moved/built after g77 and g++
+ifeq ($(with_cdev),yes)
+  include debian/rules.d/binary-gcc.mk
+endif
+
+ifeq ($(with_hppa64),yes)
+  include debian/rules.d/binary-hppa64.mk
+endif
+
+else
+# ----------------------------------------
+# cross target
+
+ifeq ($(with_gccxbase),yes)
+  include debian/rules.d/binary-base.mk
+endif
+
+ifeq ($(with_libgcc),yes)
+  include debian/rules.d/binary-libgcc-cross.mk
+endif
+
+ifeq ($(with_cdev),yes)
+  include debian/rules.d/binary-cpp-cross.mk
+endif
+
+ifeq ($(with_objcxx),yes)
+  include debian/rules.d/binary-objcxx-cross.mk
+endif
+
+ifeq ($(with_objc),yes)
+  include debian/rules.d/binary-objc-cross.mk
+endif
+ifeq ($(with_libobjc),yes)
+  include debian/rules.d/binary-libobjc-cross.mk
+endif
+
+ifeq ($(with_d),yes)
+  include debian/rules.d/binary-d-cross.mk
+endif
+
+ifeq ($(with_cxxdev),yes)
+  include debian/rules.d/binary-cxx-cross.mk
+endif
+ifeq ($(with_cxx),yes)
+  include debian/rules.d/binary-libstdcxx-cross.mk
+endif
+
+ifeq ($(with_libnof),yes)
+  ifeq ($(DEB_TARGET_GNU_CPU),powerpc)
+    include debian/rules.d/binary-nof-cross.mk
+  endif
+endif
+
+ifeq ($(with_cdev),yes)
+  include debian/rules.d/binary-gcc-cross.mk
+endif
+
+endif
+endif # ($(PKGSOURCE),gcc-snapshot)
+
+# ----------------------------------------------------------------------
+install: $(install_dependencies)
+
+$(install_dummy_stamp): $(build_dummy_stamp)
+	touch $(install_dummy_stamp)
+
+$(install_snap_stamp): $(build_stamp)
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+
+	: # Install directories
+	rm -rf $(d)
+	mkdir -p $(d)/$(PF)
+
+	: # Install everything
+	PATH=$(PWD)/bin:$$PATH \
+	$(SET_SHELL) \
+	  $(MAKE) -C $(builddir) \
+	    $(CFLAGS_TO_PASS) \
+	    $(LDFLAGS_TO_PASS) \
+	    DESTDIR=$(PWD)/$(d) \
+	    infodir=/$(PF)/share/info \
+	    mandir=/$(PF)/share/man \
+		install
+
+	chmod 755 debian/dh_*
+	touch $(install_snap_stamp)
+
+$(install_stamp): $(build_stamp)
+	dh_testdir
+	dh_testroot
+	dh_clean -k -N$(p_hppa64)
+	if [ -f $(binary_stamp)-hppa64 ]; then \
+	  mv $(binary_stamp)-hppa64 saved-stamp; \
+	  rm -f $(binary_stamp)*; \
+	  mv saved-stamp $(binary_stamp)-hppa64; \
+	else \
+	  rm -f $(binary_stamp)*; \
+	fi
+
+	: # Install directories
+	rm -rf $(d)
+	mkdir -p $(d)/$(libdir) $(d)/$(PF) $(d)/$(PF)/lib/debug
+ifeq ($(biarch32),yes)
+	mkdir -p $(d)/$(PF)/lib32/debug
+endif
+ifeq ($(biarch),yes)
+	mkdir -p $(d)/$(PF)/lib64/debug
+endif
+
+ifeq ($(DEB_TARGET_GNU_CPU),x86_64)
+	: # link lib to lib64 and $(PF)/lib to $(PF)/lib64
+	: # (this works when CONFARGS contains '--disable-multilib')
+	ln -s $(libdir) $(d)/lib64
+	mkdir -p $(d)/$(PF)/$(libdir)
+	ln -s $(libdir) $(d)/$(PF)/lib64
+endif
+
+#	cd $(buildlibdir)/libjava/classpath/native/jni/gtk-peer \
+#	  && ldd .libs/libgtkpeer.so \
+#	  && rm -f .libs/libgtkpeer.so libgtkpeer.la \
+#	  && $(MAKE)
+#	cd $(buildlibdir)/libjava/classpath/native/jawt \
+#	  && ldd .libs/libjawt.so \
+#	  && rm -f .libs/libjawt.so libjawt.la \
+#	  && $(MAKE)
+
+	: # Install everything
+	PATH=$(PWD)/bin:$$PATH \
+	$(SET_SHELL) \
+	  $(MAKE) -C $(builddir) \
+	    $(CFLAGS_TO_PASS) \
+	    $(LDFLAGS_TO_PASS) \
+	    DESTDIR=$(PWD)/$(d) \
+	    infodir=/$(PF)/share/info \
+	    mandir=/$(PF)/share/man \
+		install
+
+ifeq ($(with_common_gcclibdir),yes)
+	mv $(d)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lib_dir)) \
+		$(d)/$(gcc_lib_dir)
+  ifneq ($(gcc_lib_dir),$(gcc_lexec_dir))
+	mv $(d)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lexec_dir)) \
+		$(d)/$(gcc_lexec_dir)
+  endif
+  ifeq ($(with_d)-$(with_libphobos),yes-yes)
+	mv $(d)/$(PF)/include/d$(libphobos_version)/$(GCC_VERSION) \
+		$(d)/$(PF)/include/d$(libphobos_version)/$(BASE_VERSION)
+  endif
+endif
+
+ifeq ($(DEB_TARGET_GNU_CPU),x86_64)
+	rm -f $(libdir) $(d)/$(PF)/lib64
+endif
+	-ls -l $(d)/$(PF)/lib*/lib*.so.* $(d)/$(PF)/lib*/gcj$(pkg_ver)*/lib*.so
+
+ifeq ($(DEB_TARGET_GNU_CPU),x86_64)
+	rm -f $(libdir) $(d)/$(PF)/lib64
+endif
+	-ls -l $(d)/$(PF)/lib*/lib*.so.* $(d)/$(PF)/lib*/gcj$(pkg_ver)*/lib*.so
+
+#	cd $(buildlibdir)/libjava/classpath/native/jni/gtk-peer \
+#	  && ldd .libs/libgtkpeer.so \
+#	  && rm -f .libs/libgtkpeer.so libgtkpeer.la \
+#	  && $(MAKE)
+#	cd $(buildlibdir)/libjava/classpath/native/jawt \
+#	  && ldd .libs/libjawt.so \
+#	  && rm -f .libs/libjawt.so libjawt.la \
+#	  && $(MAKE)
+
+	-cd $(d)/$(PF)/lib/gcj$(pkg_ver) \
+	  && ldd libjawt.so libgtkpeer.so
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+	: # remove rpath settings from binaries and shared libs
+	for i in $$(chrpath -k $(d)/$(PF)/bin/* $(d)/$(PF)/lib*/lib*.so.* \
+			$(d)/$(PF)/lib*/gcj$(pkg_ver)*/lib*.so \
+			2>/dev/null | awk -F: '/RPATH=/ {print $$1}'); \
+	do \
+	  case "$$i" in ecj1|*gij-*|*libjawt*|*libjvm*) continue; esac; \
+	  [ -h $$i ] && continue; \
+	  chrpath --delete $$i; \
+	  echo "removed RPATH: $$i"; \
+	done
+	-cd $(d)/$(PF)/lib/gcj$(pkg_ver) \
+	  && ldd libjawt.so libgtkpeer.so
+endif
+ifneq (,$(findstring emul/ia32-linux, $(lib32)))
+	mkdir -p $(d)/$(lib32)
+	mv $(d)/$(PF)/lib32/* $(d)/$(lib32)/.
+	rmdir $(d)/$(PF)/lib32
+endif
+
+ifeq ($(biarch),yes)
+  ifneq (,$(filter libstdc++-v3, $(biarch_multidir_names)))
+	: # fix biarch C++ header installation
+    ifeq ($(DEB_TARGET_ARCH),i386)
+	mv $(d)/$(cxx_inc_dir)/x86_64-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/i486-linux-gnu/
+	rmdir $(d)/$(cxx_inc_dir)/x86_64-linux-gnu
+    endif
+    ifeq ($(DEB_TARGET_ARCH),powerpc)
+	mv $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/powerpc-linux-gnu/
+	rmdir $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu
+    endif
+    ifeq ($(DEB_TARGET_ARCH),s390)
+	mv $(d)/$(cxx_inc_dir)/s390x-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/s390-linux-gnu/
+	rmdir $(d)/$(cxx_inc_dir)/s390x-linux-gnu
+    endif
+  endif
+endif
+
+ifneq ($(with_java),yes)
+  ifeq ($(with_fastjar),yes)
+	: # Install fastjar
+	$(MAKE) -C $(builddir)/fastjar \
+	    ZDEPS= ZINCS= ZLIBS=-lz \
+	    DESTDIR=$(PWD)/$(d) \
+	    infodir=/$(PF)/share/info \
+	    mandir=/$(PF)/share/man \
+		install
+  endif
+endif
+
+	: # fix '*.la' and '*.lai' files
+	for i in $$(find $(d) -name '*.la' -o -name '*.lai'); do \
+	  libdir=$$(sed -n "s,^libdir='\(.*\)'.*,\1,p" $$i); \
+	  [ -z "$$libdir" ] && continue; \
+	  libdir=$$(realpath -s $$libdir); \
+	  sed -e "s,^libdir='\(.*\)'.*,libdir='$$libdir'," \
+	    -e 's, -L$(builddir)[^ ]*,,g' \
+	    $$i > $$i.new; \
+	  if diff -u $$i $$i.new; then \
+	    rm -f $$i.new; \
+	  else \
+	    echo "$$i: path normalized"; \
+	    touch -r $$i $$i.new; \
+	    mv -f $$i.new $$i; \
+	  fi; \
+	done
+
+ifeq ($(DEB_TARGET_ARCH),amd64)
+	: # fix '*.la' and '*.lai' files (don't resolve the /lib64 symlink)
+	for i in $$(find $(d) -name '*.la' -o -name '*.lai'); do \
+	  sed -e 's,/usr/lib64,/usr/lib,g' -e 's,/lib/\.\./lib64,/lib,g' \
+	    $$i > $$i.new; \
+	  if diff -u $$i $$i.new; then \
+	    rm -f $$i.new; \
+	  else \
+	    echo "$$i: references to lib64 fixed"; \
+	    touch -r $$i $$i.new; \
+	    mv -f $$i.new $$i; \
+	  fi; \
+	done
+endif
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  ifneq ($(with_libgnat),yes)
+	rm -f $(d)/$(gcc_lib_dir)/adalib/lib*.so*
+  endif
+endif
+
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	for i in gcc gcov; do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+	cp -p debian/gccbug.1 $(d)/$(PF)/share/man/man1/$(TP)gccbug$(pkg_ver)
+
+  ifeq ($(with_fortran),yes)
+	for i in g77; do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+  endif
+  ifeq ($(with_java),yes)
+	for i in gcj gcjh gij jv-convert jv-scan jcf-dump grmic grmiregistry; \
+	do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+  endif
+endif
+
+ifeq ($(with_pascal),yes)
+	: # gpc is already versioned with the gcc version.
+	mv $(d)/$(PF)/bin/gpc$(pkg_ver) $(d)/$(PF)/bin/gpc
+	mv $(d)/$(PF)/share/man/man1/gpc$(pkg_ver).1 \
+		$(d)/$(PF)/share/man/man1/gpc.1
+endif
+ifeq ($(versioned_packages),yes)
+  ifeq ($(with_pascal),yes)
+    ifeq ($(GFDL_INVARIANT_FREE),yes)
+	for i in binobj gpc gpc-run gpidump; do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" \
+	      -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+    endif
+    ifeq ($(with_gpidump),yes)
+	: # rename files (versioned gpc binaries)
+	for i in binobj gpc gpc-run gpidump; do \
+	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i$(pkg_ver); \
+	done
+	: # rename files (versioned gpc man pages)
+	for i in binobj gpc gpc-run gpidump; do \
+	  mv $(d)/$(PF)/share/man/man1/$$i.1 \
+		$(d)/$(PF)/share/man/man1/$$i$(pkg_ver).1; \
+	done
+    else
+	: # rename files (versioned gpc binaries)
+	for i in binobj gpc gpc-run; do \
+	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i$(pkg_ver); \
+	done
+	: # rename files (versioned gpc man pages)
+	for i in binobj gpc gpc-run; do \
+	  mv $(d)/$(PF)/share/man/man1/$$i.1 \
+		$(d)/$(PF)/share/man/man1/$$i$(pkg_ver).1; \
+	done
+    endif
+  endif
+endif
+
+#  ifeq ($(with_ada),yes)
+#	: # rename files (versioned ada binaries)
+#	for i in ; do \
+#	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \
+#	  mv $(d)/$(PF)/share/man/man1/$$i.1 \
+#		$(d)/$(PF)/share/man/man1/$$i-$(GNAT_VERSION).1; \
+#	done
+#	for i in $(GNAT_TOOLS); do \
+#	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \
+#	done
+#  endif
+
+#ifneq ($(with_libgcc),yes)
+#	: # needed for dependency of other shared libs
+#	echo 'libgcc_s $(GCC_SONAME) libgcc$(GCC_SONAME) (>= $(DEB_LIBGCC_SOVERSION))' \
+#	    > debian/shlibs.local
+#endif
+
+ifdef DEB_CROSS
+  ifeq ($(DEB_TARGET_ARCH),s390)
+	: # s390 64bit stuff happens to be in s390x-linux-gnu/lib64/
+	mkdir -p $(d)/$(PF)/s390-linux-gnu/lib64
+	cp -a $(d)/$(PF)/s390x-linux-gnu/lib64/* $(d)/$(PF)/s390-linux-gnu/lib64/
+  endif
+endif
+
+	chmod 755 debian/dh_*
+	touch $(install_stamp)
+
+$(install_hppa64_stamp): $(build_hppa64_stamp)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_hppa64)
+	mkdir -p $(d_hppa64)/$(PF)
+
+	PATH=$(PWD)/bin:$$PATH \
+	    $(MAKE) -C $(builddir_hppa64) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		DESTDIR=$(PWD)/$(d_hppa64) \
+		    install
+
+ifeq ($(versioned_packages),yes)
+	mv $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-gcc-$(GCC_VERSION) \
+		$(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-gcc$(pkg_ver)
+	mv $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-cpp \
+		$(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-cpp$(pkg_ver)
+endif
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+	: # remove files not needed
+	rm -rf $(d_hppa64)/$(PF)/info
+	rm -rf $(d_hppa64)/$(PF)/man
+	rm -f $(d_hppa64)/$(PF)/lib/libiberty.a
+	rm -f $(d_hppa64)/$(PF)/bin/*{protoize,gcov,gccbug,gcc}
+
+	rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu/include
+	rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu/lib
+endif
+
+	touch $(install_hppa64_stamp)
+
+# ----------------------------------------------------------------------
+# Build architecture-dependent files here.
+#binary-arch: build install $(foreach i,$(arch_binaries),$(binary_stamp)-$(i))
+binary-arch: $(foreach i,$(arch_binaries),$(binary_stamp)-$(i))
+ifeq ($(with_check),yes)
+	@echo Done
+#	: # Send Email about sucessfull build.
+#	# cat raw-test-summary | sh; echo "Sent mail to $(S_EMAIL)"
+endif
+
+# ----------------------------------------------------------------------
+# Build architecture-independent files here.
+#binary-indep: build install $(foreach i,$(indep_binaries),$(binary_stamp)-$(i))
+binary-indep: $(foreach i,$(indep_binaries),$(binary_stamp)-$(i))
+
+source diff:
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
--- gcc-4.1-4.1.2.orig/debian/gcj-BV.doc-base
+++ gcc-4.1-4.1.2/debian/gcj-BV.doc-base
@@ -0,0 +1,15 @@
+Document: gcj-@BV@
+Title: The GNU Ahead-of-time Compiler for the Java Language
+Author: Various
+Abstract: This manual describes how to use gcj, the GNU compiler for
+ the Java programming language.  gcj can generate both .class files and
+ object files, and it can read both Java source code and .class files.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/java/gcj.html
+Files: /usr/share/doc/gcc-@BV@-base/java/gcj.html
+
+Format: info
+Index: /usr/share/info/gcj-@BV@.info.gz
+Files: /usr/share/info/gcj-@BV@*
--- gcc-4.1-4.1.2.orig/debian/changelog
+++ gcc-4.1-4.1.2/debian/changelog
@@ -0,0 +1,6374 @@
+gcc-4.1 (4.1.2-25) sid; urgency=low
+
+  * Update backport for PR28322 (Gunther Nikl).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Jan 2009 09:53:00 +0100
+
+gcc-4.1 (4.1.2-24) unstable; urgency=low
+
+  * Update to the gcc-4_1-branch 20081201.
+    - Fix PR target/38287 (sparc, wrong code). Addresses: #506713.
+  * Do not build-depend on autogen, if the package is not installable.
+  * Apply arm-unbreak-eabi-armv4t patch only for Debian builds.
+  * Configure with --with-tune=generic for x86 targets.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 01 Dec 2008 23:10:08 +0100
+
+gcc-4.1 (4.1.2-23) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080623.
+    - mips/mipsel only updates.
+  * On hurd-i386 with -fstack-protector do not link with libssp_nonshared
+    (Samuel Thibault). Closes: #483609.
+  * Fix cross build targeting powerpc biarch (Hector Oron). Closes: #483906.
+  * Include library symlinks in gobjc and gfortran multilib packages, when
+    not building the library packages.
+  * Fix some lintian warnings and errors.
+
+  [Arthur Loiret]
+  * debian/rules2: configure sh4-linux with --with-multilib-list=m4,m4-nofpu
+    and --with-cpu=sh4.
+  * debian/rules.patch: Don't apply sh4-multilib.dpatch.
+  * mips-warnings.dpatch: Add missing #undef ASM_OUTPUT_EXTERNAL to fix
+    warnings during build.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 Jun 2008 23:18:53 +0200
+
+gcc-4.1 (4.1.2-22) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080420.
+    - Fix PR middle-end/35163, wrong code, folding comparison loses cast.
+  * Remove treelang build support.
+  * Add gcc-multilib64dir patch, remove ppc64-biarch patch; gcc
+    -print-multi-os-directory prints `../lib' again.
+
+  [Aurelien Jarno]
+  * Disable amd64-biarch patch on kfreebsd-amd64.
+
+  [Arthur Loiret]
+  * Support sh4 targets:
+    - sh4-multilib.dpatch: Add, fix multilib (m4/m4-nofpu) for sh4-linux.
+  * Update gdc to upstream SVN 20080419.
+    + Don't use svn-gdc-updates this time, new orig tarball.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 24 Apr 2008 18:48:34 +0200
+
+gcc-4.1 (4.1.2-21) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080308.
+    - debian/patches/amd64-biarch.dpatch: Remove.
+    - debian/patches/{powerpc,ppc64}-biarch.dpatch: Update.
+  * Update PR other/28322, ignore only unknown -W* options.
+
+  [Arthur Loiret]
+  * pr25524.dpatch: Update, backport register_include_chains call fix from
+    trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 09 Mar 2008 21:53:13 +0100
+
+gcc-4.1 (4.1.2-20) unstable; urgency=low
+
+  [Ludovic Brenta]
+  * debian/rules.d/binary-ada.mk, debian/control.m4: merge from
+    gnat-4.2 (= 4.2.2-7).  This restores libgnatvsn-dev and
+    libgnatprj-dev and therefore closes: #447348.
+  * change package names: libgnatvsn-dev becomes libgnatvsn4.1-dev;
+	                  libgnatprj-dev becomes libgnatprj4.1-dev;
+    the unversioned packages will be provided by gcc-defaults.
+
+  [ Aurelien Jarno]
+  * debian/multiarch.inc: change mipsel64 into mips64el.
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080301.
+  * Fix PR other/28322, GCC new warnings and compatibility.
+  * Disable building ObjC, ObjC++, Fortran and Treelang compilers.
+  * Remove 4.1.2 compatibility symlinks in gcclibdir.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 02 Mar 2008 00:57:59 +0100
+
+gcc-4.1 (4.1.2-19) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080114.
+  * Fix build failures for gnat-4.1, gpc-4.1, gdc-4.1 introduced by recent
+    gdc changes.
+  * Set the priority of gcc-4.1-base to optional.
+  * Update debian/watch. Closes: #459388. Addresses: #459389, #459390.
+  * Apply fixes for PR java/33639, PR java/33765, taken from the trunk.
+  * Fix build failure with dpkg-shlibdeps (>= 1.14.15).
+
+  [Arthur Loiret]
+  * debian/rules.defs: Disable phobos on hurd-i386.
+    - gdc-hurd-proc_maps.dpatch: Remove.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 16 Jan 2008 17:14:11 +0100
+
+gcc-4.1 (4.1.2-18) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20071209.
+    - Fix PR middle-end/34130, wrong code with some __builtin_abs expressions.
+      Closes: #452113.
+  * debian/rules2 (STAGE1_CFLAGS): Fix build failure on m68k.
+  * Don't run the testsuite on hppa when expect-tcl8.3 is not available.
+  * Fix again profiling support on the Hurd (Thomas Schwinge). Closes: #433539.
+  * debian/rules.d/binary-java.mk: dpkg-shlibsdeps can't handle the dangling
+    symlink to libgcj_bc.so.1. Remove it temporarily.
+  * Add libgcj_bc to the libgcj7-1 shlibs file.
+  * Build-depend on gcc-4.1-multilib instead of gcc-multilib.
+  * Build the java plugin always using libxul-dev.
+
+  [Arthur Loiret]
+  * Update gdc to upstream SVN 20071124.
+  * Separate libphobos from gdc package.
+  * Build gdc on all archs, without libphobos on unsupported upstream archs.
+    - debian/rules.defs: disable libphobos on sparc
+  * Install libphobos in the private gcc lib dir.
+  * Update gdc driver to use system zlib.
+  * Always build with parallel=1 to hopefully have readable logs.
+  * Always disable the testsuite with gdc.
+  * debian/rules.patch: Update gdc patches list:
+    - gdc-4.1.dpatch: Update from upstream SVN, update gcc/DEV-PHASE.
+    - gdc-pr26885.dpatch: Add, enable pr26885 again.
+    - gdc-driver-zlib.dpatch: Add, use up-to-date system zlib.
+    - gdc-build.dpatch: Remove, renamed to gdc-libphobos-build.dpatch
+    - gdc-libphobos-build.dpatch: Add.
+    - gdc-driver-nophobos.dpatch: Add, disable phobos on unsupported archs.
+    - gdc-fix-build.dpatch: Add, fix build on non-biarched 64 bit targets,
+      fix a small gcc/config/ issue.
+    - gdc-libphobos-std-format.dpatch: Add.
+    - gdc-arm-unwind_ptr.dpatch: Add, fix build on arm.
+    - gdc-mips-gcc-config.dpatch: Add, fix build on mips.
+    - gdc-hurd-proc_maps.dpatch: Add, fix build on hurd.
+  * Begin to work on cross-compilation support, now supported upstream.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 09 Dec 2007 13:17:23 +0100
+
+gcc-4.1 (4.1.2-17) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20071019.
+    - Fix PR target/33256 (mips).
+    - Fix PR tree-optimization/33142, wrong code with VRP through ABS_EXPR.
+      Closes: #429657.
+    - Fix PR c++/29226, ICE in make_decl_rtl (closes: #388626).
+    - Fix PR target/31641, ICE in s390_expand_setmem (closes: #385580).
+  * Set the priority of the source package to optional.
+  * Remove .la files from the biarch libstdc++ debug packages,
+    conflict with the 3.4 package. Addresses: #440490.
+  * Update Hurd fixes (Samuel Thibault).
+  * When -fstack-protector is the default (Ubuntu), do not enable
+    -fstack-protector when -nostdlib is specified. LP: #77865.
+  * Add -g to BOOT_CFLAGS, set STAGE1_CFLAGS to -g -O, only pass
+    other settings when required.
+  * Fix installation of the s390 libstdc++ biarch headers.
+  * Allow the powerpc build on a 32bit machine (without running the
+    biarch testsuite).
+  * Add niagara2 optimization support (David Miller).
+
+  * Only remove libgcj7's classmap db if no other libgcj7* library is
+    installed.
+  * Disable building gcj for mipsel.
+
+  * Update gpc to CVS 20070904.
+  * debian/copyright: gpc is now licensed under the GPL3. The gpc
+    changes are only found in the gpc-4.1 sources.
+  * Loosen dependency of gpc-4.1 on gcc-4.1. LP: #145561.
+
+  [Arthur Loiret]
+  * Port on k*bsd*-gnu:
+    - Apply Debian patch in upstream SVN. (target-ver-syms.sh,
+      phobos/acinclude.m4, phobos/configure.in)
+    - debian/control.m4: add kfreebsd-i386 and kfreebsd-amd64 to gdc
+      Architecture list.
+  * svn-gdc-updates.dpatch: Update to SVN 20070914.
+    - Merge DMD 1.021
+    - dmd-script, d-spec.c (lang_specific_driver): Support -debuglib= and
+      -defaultlib= options.
+    - phobos/std/stdio.d (readln): Use the result of getdelim correctly.
+      (SF 1788195)
+    - d-glue.cc (FuncDeclaration::toObjFile): Do not gimplify if there were
+      errors. (Bugzilla 1415)
+    - d-objfile.cc (outdata): Do not set TREE_CONSTANT on initializers.
+      (Bugzilla 1453)
+    -  phobos/std/c/stdio.d: Define fpos_t correctly for Drawin.
+       (Bugzilla 1469)
+    - d-codegen.{h, cc}, d-glue.cc: Change rawArray to toDArray. Do
+      not cast result to void[]. (Bugzilla 1490)
+    - d-glue.cc, d-codegen.h, d-codegen.cc: Make it an error
+      to reference a nested function without a body. (SF 1793594)
+    - d-codegen.cc (convertTo, call): Prevent multiple re-evaluation
+      of delgate. (Bugzilla 1492)
+
+  * debian/rules.d/binary-d.mk: Add $(DEB_TARGET_GNU_TYPE) symlinks for
+    gdc/gdmd binaries.
+  * gdc-sqrt-double-cast.dpatch: disable (not removed yet) in rules.patch,
+    should be fixed upstream.
+
+  [Ludovic Brenta]
+  * Disable building libgnatprj-dev and libgnatvsn-dev; now provided by
+    gnat-4.2.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 19 Oct 2007 11:38:11 +0200
+
+gcc-4.1 (4.1.2-16) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20070831.
+  * Apply proposed patches:
+    - Improve debug info for packed arrays with constant bounds
+      (PR fortran/22244).
+    - Fix libgcc.a(tramp.o) on ppc32.
+  * Update the -fdirectives-only backport.
+  * debian/patches/libjava-class-igf.dpatch: Backport from the trunk.
+  * Build-depend again on locales on arm, hppa, mipsel.
+  * gdc-4.1: Loosen dependency on g++-4.1.
+  * Disable gij/gcj for arm, armel, hppa, mips; currently fails to build.
+
+  * Update gpc patches and build support for GCC-4.1.
+  * Update gpc frontend and backend patch to gcc-4.1-5f.
+
+  [Arthur Loiret]
+  * debian/control.m4 set gdc Architecture to i386 amd64 powerpc ppc64 lpia
+    until there are some others supported archs.
+  * debian/rules.conf: Use GDC_BASE_VERSION for DEB_GDC_VERSION rather than
+    specifying the upstream gdc version by hand.
+  * debian/rules.unpack: symlink-tree libphobos after unpack instead of right
+    before patch, update debian/rules.patch accordingly.
+  * debian/rules2: Add -std=gnu99 to CFLAGS and -lm to LDFLAGS when building
+    the D compiler.
+  * debian/copyright: Set the D compiler package name as gdc-4.1.
+  * gdc-sqrt-double-cast.dpatch: Fix build on powerpc.
+  * gdc-4.1.dpatch: Update
+    - gcc/tree-sra.c: Do not use SRA on structs with aliased fields created
+      for anonymous unions.
+    - gcc/predict.c: Add null-pointer check.
+
+  * svn-gdc-updates.dpatch: Update to SVN 20070829.
+    - d-decls.cc (uniqueName): Allow multiple static declaration with the same
+      name if in a function. (SF 1783085)
+    - d-codegen.cc (call): Use CommaExp correctly. (Bugzilla 1443)
+    - dmd/todt.c (createTsarrayDt): Don't take quadratic time to build the
+      initializer. (Bugzilla 1440)
+
+ -- Matthias Klose <doko@debian.org>  Sat, 01 Sep 2007 01:33:17 +0200
+
+gcc-4.1 (4.1.2-15) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20070812.
+
+  * Period of grace is over, turn on again the testsuite on m68k.
+  * Update infrastructure for the gcc-source package (Bastian Blank).
+  * Update profiling on the Hurd (Samuel Thibault, Michael Casadevall).
+    Closes: #433539.
+  * debian/rules2: Allow DEB_BUILD_OPTIONS=parallel=<n> to overwrite NJOBS.
+  * Allow lang=<l1>,<l2> nolang=<l3,l4> in DEB_BUILD_OPTIONS; deprecating
+    WITHOUT_LANG, and WITHOUT_CHECK.
+  * debian/rules.defs, debian/rules.conf: Cache some often used macros.
+  * Backport from trunk: -fdirectives-only (when preprocessing, handle
+    directives, but do not expand macros).
+  * Report an ICE to apport (if apport is available).
+
+  * Don't build a libgcj-doc package from the gcj-4.1 source.
+  * Install gappletviewer man page. Closes: #423094.
+  * Fix gcj build failure on the Hurd (Samuel Thibault). Closes: #408888.
+  * Fix PR java/32862, bugs in EnumMap implementation. Closes: #423160.
+  * Fix PR classpath/32844.
+  * Support @ arguments in gjar.
+  * gcjwebplugin: Register for more browsers (package currently not built).
+  * gij/boehm-gc: Use sysconf as fallback, if reading /proc/stat fails.
+    Closes: #422469.
+  * libjava: Avoid dependency on MAXHOSTNAMELEN (Samuel Thibault).
+  * Tighten dependencies on ecj/libecj-java.
+  * Don't build and test libjava for the biarch architecture.
+  * Build only needed multilib libraries when building as gcj or gnat.
+  * Link libgcj using -Bsymbolic-functions.
+
+  * Integrate gdc build infrastructure.
+
+  [Arthur Loiret]
+  * Fix cross builds targeting x86_64. Closes: LP: #121834.
+  * New build infrastructure to build the gdc compiler.
+    Closes: #312367, #317983, #403460.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Aug 2007 17:49:20 +0200
+
+gcc-4.1 (4.1.2-14) unstable; urgency=low
+
+  * Update to SVN 20070718.
+  * Update boehm-gc, libjava from the gcc-4.1 Fedora branch 20070718.
+  * Explicitely use fastjar to build gcj-4.1. Closes: #416001.
+  * Configure with --enable-libgcj on m32r (Kazuhiro Inaoka). Closes: #417275.
+  * On i386, don't configure --with-tune=i686 (generic is the default).
+  * Tighten build dependency on libmpfr-dev.
+  * Fix profiling on the Hurd. Closes: #433539.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 18 Jul 2007 21:29:19 +0200
+
+gcc-4.1 (4.1.2-13) unstable; urgency=low
+
+  * Update to SVN 20070629.
+  * Add version information for the libjava test summary; add
+    test summary for gnat builds.
+  * Update libjava from the gcc-4.1 Fedora branch 20070611.
+  * On mips*-linux, always imply -lpthread for -pthread (Thiemo Seufer).
+    Closes: #428741.
+  * For ix86 lpia targets, configure --with-tune=i586.
+  * README.Debian: Point to debian-toolchain for general toolchain topics.
+  * Build the 64bit biarch libstdc++ using the gnu locale model.
+  * Only suggest multilib packages on multilib architectures.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 29 Jun 2007 23:43:57 +0200
+
+gcc-4.1 (4.1.2-12) unstable; urgency=high
+
+  * i386-biarch.dpatch: Update for the backport for PR target/31868.
+    Closes: #427185.
+  * m68k-libffi2.dpatch: Update. Closes: #425399.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  4 Jun 2007 23:53:23 +0200
+
+gcc-4.1 (4.1.2-11) unstable; urgency=low
+
+  * Update to SVN 20070601.
+  * Build the libmudflap0-dev package again.
+  * Don't build libffi, when the packages are not built.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  1 Jun 2007 23:55:22 +0200
+
+gcc-4.1 (4.1.2-10) unstable; urgency=low
+
+  * Regenerate the control file.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 30 May 2007 00:29:29 +0200
+
+gcc-4.1 (4.1.2-9) unstable; urgency=low
+
+  * Update to SVN 20070528.
+  * Don't build packages now built from the gcc-4.2 source (arm, m68k,
+    mips, mipsel).
+  * Add backport for PR middle-end/20218.
+  * Add backport for PR target/31868.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 May 2007 00:01:12 +0200
+
+gcc-4.1 (4.1.2-8) unstable; urgency=low
+
+  * Update to SVN 20070518.
+  * Don't build packages now built from the gcc-4.2 source.
+
+  [ Aurelian Jarno ]
+  * Update libffi patch for ARM. Closes: #425011.
+  * arm-pr30486, arm-pr28516, arm-unbreak-eabi-armv4t: New.
+  * Disable FFI, Java, ObjC for armel.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 20 May 2007 10:31:24 +0200
+
+gcc-4.1 (4.1.2-7) unstable; urgency=low
+
+  * Update to SVN 20070514.
+  * Link using --hash-style=both on supported architectures. Addresses: #421790.
+  * On hppa, build ecjx as a native binary.
+  * note-gnu-stack.dpatch: Fix ARM comment marker (Daniel Jacobowitz).
+    Closes: #422978.
+  * Add build dependency on libxul-dev for *-freebsd. Closes: #422995.
+  * Update config.guess/config.sub and build gcjwebplugin on GNU/kFreeBSD
+    (Aurelian Jarno). Closes: #422995.
+  * Disable ssp on hurd-i386. Closes: #423757.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 May 2007 08:40:08 +0200
+
+gcc-4.1 (4.1.2-6) unstable; urgency=low
+
+  * Update libjava from the gcc-4.1 Fedora branch 20070504.
+  * gfortran-4.1: Fix the target of the libgfortran.so symlink.
+    Closes: #421362.
+  * Build-depend on gcc-multilib [amd64 i386 powerpc ppc64 s390 sparc].
+  * Readd build dependency on binutils on arm.
+  * (Build-) depend on glibc (>= 2.5) for all architectures.
+  * Remove libssp packages from the control file.
+  * Fix wrong code generation on hppa when TLS variables are used.
+    Closes: #422421.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  6 May 2007 10:00:23 +0200
+
+gcc-4.1 (4.1.2-5) unstable; urgency=low
+
+  * Update to SVN 20070429.
+  * Update libjava from the gcc-4.1 Fedora branch 20070428.
+  * Update m68k patches:
+    - Remove pr25514, pr27736, applied upstream.
+    - Update m68k-java.
+  * Link using --hash-style=gnu/both.
+  * Tighten (build) dependency on binutils. Closes: #421197.
+  * gij-4.1: Add a conflict with java-gcj-compat (<< 1.0.69).
+  * gfortran-4.1: Depend on libgfortran1, provide the libgfortran.so
+    symlink. Closes: #421362.
+  * gcc-4.1, gcc-4.1-multilib: Fix compatibility symlinks. Closes: #421382.
+  * Temporarily remove build dependency on locales on arm, hppa, m68k, mipsel.
+  * Temporarily remove build dependency on binutils on arm.
+  * Fix FTBFS on GNU/kFreeBSD (Aurelian Jarno). Closes: #421423.
+  * gij-4.1 postinst: Create /var/lib/gcj-4.1. Closes: #421526.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 30 Apr 2007 08:13:32 +0200
+
+gcc-4.1 (4.1.2-4) unstable; urgency=medium
+
+  * Update to SVN 20070423.
+    - Remove pr11953, applied upstream.
+    - Fix ld version detection in libstdc++v3.
+  * Update libjava from the gcc-4.1 Fedora branch 20070423.
+  * Merge libgfortran1-dev into gfortran-4.1.
+  * Add multilib packages for gcc, g++, gobjc, gobjc++, gfortran.
+  * Don't link using --hash-style=gnu/both; loosen dependency on binutils.
+  * Don't revert the patch to fix PR c++/27227.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 Apr 2007 23:13:14 +0200
+
+gcc-4.1 (4.1.2-3) experimental; urgency=low
+
+  * Update to SVN 20070405.
+  * Update libjava from the gcc-4.1 Fedora branch 20070405.
+  * Robustify setting of make's -j flag. Closes: #414316.
+  * Only build the libssp packages, when building the common libraries.
+  * gcc-4.1-hppa64: Don't depend on libc6-dev.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  6 Apr 2007 00:28:29 +0200
+
+gcc-4.1 (4.1.2-2) experimental; urgency=low
+
+  * Update to SVN 20070306.
+  * Update libjava from the gcc-4.1 Fedora branch 20070306.
+
+  [Matthias Klose]
+  * Don't install gij-wrapper anymore, directly register gij as a java
+    alternative.
+  * Don't install gcjh-wrapper anymore.
+  * Don't use exact versioned dependencies on gcj-base for libgcj and
+    libgcj-awt.
+  * Fix glibc build dependency for alpha.
+  * Support -ffast-math on hurd-i386 (Samuel Thibault). Closes: #413342.
+  * Update kfreebsd-amd64 patches (Aurelien Jarno). Closes: #406015.
+  * gij: Consistently use $(dbexecdir) to reference the gcj sub dir.
+  * Install into /usr/lib/gcc/<target_alias>/4.1, to ease upgrades
+    between minor versions.
+    Add compatibility symlinks in <target_alias>/4.1.2 to build gnat-4.1
+    and gcj-4.1 from separate sources.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  7 Mar 2007 03:51:47 +0100
+
+gcc-4.1 (4.1.2-1) experimental; urgency=low
+
+  [Matthias Klose]
+  * Update to gcc-4.1.2.
+  * Update libjava backport patches, split out boehm-gc-backport patch.
+  * Enable the cpu-default-generic patch (i386, amd64), backport from 4.2.
+  * Correct mfctl instruction syntax (hppa), backport from the trunk.
+  * Backport PR java/9861 (name mangling updates).
+  * gcc.c (main): Call expandargv (backport from 4.2).
+  * Apply gcc dwarf2 unwinding patches from the trunk.
+  * Apply backport for PR 20208 on amd64 i386 powerpc ppc64 sparc s390.
+  * Apply patches from the 4.1 branch for PR rtl-optimization/28772,
+    PR middle-end/30313, PR middle-end/30473, PR c++/30536, PR debug/30189,
+    PR fortran/30478, PR rtl-optimization/30787, PR tree-optimization/30823,
+    PR rtl-optimization/28173, PR ada/30684, bug in pointer dependency test,
+    PR rtl-optimization/30931, PR fortran/25392, PR fortran/30400,
+    PR libgfortran/30910, PR libgfortran/30918, PR fortran/29441,
+    PR target/30634.
+  * Update NEWS files.
+  * Include a backport of the ecj+generics java updates as
+    gcj-ecj-20070215.tar.bz2. Install it into the gcc-4.1-source package.
+  * Do not build fastjar anymore from this source.
+  * debian/control.m4: Move expect-tcl8.3 before dejagnu.
+  * Work around firefox/icewhatever dropping plugin dependencies on xpcom.
+  * Refactor naming of libgcj packages in the build files.
+  * Make libstdc++-doc's build dependencies depending on the source package.
+  * Do not build packages on architectures, which are already built by gcc-4.2.
+
+  * Merge the gcj generics backport from Ubuntu:
+
+    - Merge the Java bits (eclipse based compiler, 1.5 compatibility,
+      classpath generics) from the gcc-4.1 Fedora branch.
+    - Drop all previous patches from the classpath-0.93 merge, keep
+      the boehm-gc backport (splitted out as a separate patch).
+    - Add a gcj-ecj-generics.tar.bz2 tarball, containing gcc/java, libjava,
+      config/unwind_ipinfo.m4, taken from the Fedora branch.
+    - Drop the libjava-hppa, libjava-plugin-binary, pr29362, pr29805 patches
+      integrated in the backport.
+    - Update patches for the merge: reporting, libjava-subdir, i386-biarch,
+      classpath-tooldoc, pr26885
+    - Add libjava-dropped, libjava-install; dropped chunks from the merge.
+    - Add pr9861-nojava mangling changes, non-java parts for PR 9861.
+    - Add gcc-expandv, expand `@' parameters on the commandline; backport
+      from the trunk.
+    - Disable the m68k-gc patch, needs update for the merge.
+    - Configure --with-java-home set for 1.5.0.
+    - Configure with --enable-java-maintainer-mode to build the header
+      and class files on the fly.
+    - Add build dependency on ecj-bootstrap, configure --with-ecj-jar.
+    - Build an empty libgcj-doc package; gjdoc currently cannot handle
+      generics.
+    - Apply gcc dwarf2 unwinding patches from the trunk, allowing the Events
+      testcase to pass.
+      - Tighten dependencies on shared libraries.
+    - Use /usr/lib/gcj-4-1-71 as private gcj subdir.
+    - Bump the libgcj soversion to 71, rename the libgcj7-0 package
+      to libgcj7-1, rename the libgcj7-awt package to libgcj7-1-awt.
+    - gij-4.1: Add and provide alternatives for gorbd, grmid, gserialver.
+    - gcj-4.1: Remove gcjh, gcjh-wrapper, gjnih.
+    - gcj-4.1: Add and provide alternatives for jar, javah, native2ascii,
+      tnameserv.
+    - gcj-4.1: Add dependency on ecj-bootstrap, recommend fastjar,
+      ecj-bootstrap-gcj.
+    - Add build dependency on ecj-bootstrap version providing the GCCMain
+      class.
+    - libgcj7-1: Recommend libgcj7-1-awt.
+    - Add build dependency on libmagic-dev.
+    - Build-depend on gcj-4.1; build our own ecj1 and gjdoc before
+      starting the build.
+    - Make ecj1 available when running the testsuite.
+    - Fix build failure on sparc-linux.
+    - Fix gjavah compatibility problems (PR cp-tools/3070[67]).
+    - Fixed driver issue source files (PR driver/30714).
+    - Add (rudimentary) manual pages for classpath tools.
+
+  [Kevin Brown]
+  * debian/control.m4, debian/rules.d/binary-ada.mk: provide new packages
+    containing debugging symbols for Ada libraries: libgnat-4.1-dbg,
+    libgnatprj4.1-dbg, and libgnatvsn4.1-dbg.  Adresses: #401385.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  3 Mar 2007 23:12:08 +0100
+
+gcc-4.1 (4.1.1ds2-30) experimental; urgency=low
+
+  * Update to SVN 20070106.
+  * Do not revert the fixes for PR 25878, PR 29138, PR 29408.
+  * Don't build the packages built by gcc-4.2 source.
+  * debian/patches/note-gnu-stack.dpatch: Add .note.GNU-stack sections
+    for gcc's crt files, libffi and boehm-gc. Taken from FC. Closes: #382741.
+  * Merge from Ubuntu:
+    - Backport g++ visibility patches from the FC gcc-4_1-branch.
+    - Update the long-double patches; require glibc-2.4 as a build dependency
+      on alpha, powerpc, sparc, s390. Bump the shlibs dependencies to
+      require 4.1.1-21.
+    - On powerpc-linux configure using --enable-secureplt. Closes: #382748.
+    - When using the cpu-default-generic patch, build for generic x86-64
+      on amd64 and i386 biarch.
+    - Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64,
+      s390, sparc).
+  * gij-4.1: Recommends libgcj7-awt instead of suggesting it. Closes: #394917.
+  * Split the gcc-long-double patch into a code and doc part.
+  * Set priority of development packages to optional.
+  * Add support for kfreebsd-amd64 (Aurelian Jarno). Closes: #406015.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Jan 2007 10:35:42 +0100
+
+gcc-4.1 (4.1.1ds2-22) unstable; urgency=high
+
+  * Enable -pthread for GNU/Hurd (Michael Banck). Closes: #400031.
+  * Update the m68k-fpcompare patch (Roman Zippel). Closes: #401585.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Dec 2006 12:35:06 +0100
+
+gcc-4.1 (4.1.1ds2-20) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20061115.
+    - Fix PR tree-optimization/27891, ICE in tree_split_edge.
+      Closes: #370248, #391657, #394630.
+    - Fix PR tree-optimization/9814, duplicate of PR tree-optimization/29797.
+      Closes: #181096.
+  * Apply the libjava/net backport from the redhat/gcc-4_1-branch.
+  * Apply proposed patch for PR java/29805.
+
+  [Roman Zippel]
+  * Build the ObjC and ObjC++ compilers in cross builds.
+  * debian/patches/m68k-symbolic-operand.dpatch: Better recognize
+    symbolic operands in addresses.
+  * debian/patches/m68k-bitfield-offset.dpatch: Only use constant offset
+    for register bitfields (combine expects shifts, but does a rotate).
+  * debian/patches/m68k-bitfield-offset.dpatch: Update and apply.
+
+  [Daniel Jacobowitz]
+  * Don't try to use _Unwind_Backtrace on SJLJ targets.
+    See bug #387875, #388505, GCC PR 29206.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 15 Nov 2006 08:59:53 -0800
+
+gcc-4.1 (4.1.1ds2-19) unstable; urgency=low
+
+  * Fix typo in arm-pragma-pack.dpatch.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 28 Oct 2006 11:04:00 +0200
+
+gcc-4.1 (4.1.1ds2-18) unstable; urgency=medium
+
+  [Matthias Klose]
+  * Update to SVN 20061028.
+  * Fix #pragma pack on ARM (Paul Brook). Closes: #394703.
+  * Revert PR c++/29138, PR c++/29408. Closes: #392559.
+  * Revert PR c++/25878. Addresses: #387989.
+  * fastjar: Provide jar. Closes: #395397.
+
+  [Ludovic Brenta]
+  * debian/control.m4 (libgnatprj-dev): depend on libgnatvsn-dev.
+    debian/gnatprj.gpr: with gnatvsn.gpr. Closes: #395000.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 26 Oct 2006 23:51:10 +0200
+
+gcc-4.1 (4.1.1ds2-17) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20061020.
+    - Fix PR debug/26881, ICE in dwarf2out_finish. Closes: #377613.
+    - Fix PR PR c++/29408, parse error for valid code. Closes: #392327, #393010.
+    - Fix PR c++/29435, segfault with sizeof and templates. Closes: #393071.
+    - Fix PR target/29338, segfault with -finline-limit on arm. Closes: 390620.
+    - Fix 3.4/4.0 backwards compatibility problem in libstdc++.
+  * Fix PR classpath/29362, taken from the redhat/gcc-4_1-branch.
+  * Remove the INSTALL directory from the source tarball. Closes: #392974.
+  * Disable building the static libgcj; non-functional, and cutting
+    down build times.
+  * libgcj7-0: Tighten dependency on libgcj-common.
+  * libgcj7-dev: Install .pc file as libgcj-4.1.pc.
+  * README.cross: Updated (Hector Oron). Addresses: #380251.
+  * config-ml.dpatch: Use *-linux-gnu as *_GNU_TYPE. Closes: #394034.
+
+  [Nikita V. Youshchenko]
+  * Fix typo in the cross build scripts.  Closes: #391445.
+
+  [Falk Hueffner]
+  * alpha-no-ev4-directive.dpatch: Fix kernel build failure.
+
+  [Roman Zippel]
+  * debian/patches/m68k-align-code.dpatch: Use "move.l %a4,%a4" to advance
+    within code.
+  * debian/patches/m68k-align-stack.dpatch: Try to keep the stack word aligned.
+  * debian/patches/m68k-dwarf3.dpatch: Emit correct dwarf info for cfa offset
+    and register with -fomit-frame-pointer.
+  * debian/patches/m68k-fpcompare.dpatch: Bring fp compare early to its
+    desired form to relieve reload. Closes: #390879.
+  * debian/patches/m68k-prevent-swap.dpatch: Don't swap operands
+    during reloads.
+  * debian/patches/m68k-reg-inc.dpatch: Reinsert REG_INC notes after splitting
+    an instruction.
+  * debian/patches/m68k-secondary-addr-reload.dpatch: Add secondary reloads
+    to allow reload to get byte values into addr regs. Closes: #385327.
+  * debian/patches/m68k-symbolic-operand.dpatch: Better recognize symbolic
+    operands in addresses.
+  * debian/patches/m68k-limit_reload.dpatch: Remove, superseded by
+    m68k-secondary-addr-reload.dpatch.
+  * debian/patches/m68k-notice-move.dpatch: Apply, was checked in in -16.
+  * debian/patches/m68k-autoinc.dpatch: Updated, don't attempt to increment
+    the register, if it's used multiple times in the instruction .
+
+ -- Matthias Klose <doko@debian.org>  Sat, 21 Oct 2006 00:25:05 +0200
+
+gcc-4.1 (4.1.1ds1-16) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20061008.
+    - Fix PR c++/29226, ICE in make_decl_rtl. Closes: #388263.
+  * libgcj7-0: Fix package removal. Closes: #390874.
+  * Configure with --disable-libssp on architectures that don't
+    support it (alpha, hppa, ia64, m68k, mips, mipsel).
+  * On hppa, remove build-dependency on dash.
+  * gij/gcj: Do not install slave links for the non DFSG manpages.
+    Closes: #390425, #390532.
+  * libgcj-common: rebuild-gcj-db: Don't do anything, if no classmap
+    files are found. Closes: #390966.
+  * Fix PR libstdc++/11953, extended for all linux architectures.
+    Closes: #391268.
+  * libffi4-dev: Conflict with libffi. Closes: #387561.
+  * Backport PR target/27880 to the gcc-4_1-branch. Patch by Steve Ellcey.
+    Closes: #390693.
+  * On ia64, don't use _Unwind_GetIPInfo in libjava and libstdc++.
+  * Add a README.ssp with minimal documentation about stack smashing
+    protection. Closes: #366094.
+  * Do not build libgcj-common from the gcc-4.1/gcj-4.1 sources anymore.
+
+  [Roman Zippel]
+  * debian/patches/m68k-notice-move.dpatch: Don't set cc_status
+    for fp move without fp register.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  8 Oct 2006 02:21:49 +0200
+
+gcc-4.1 (4.1.1ds1-15) unstable; urgency=medium
+
+  * Update to SVN 20060927.
+    - Fix PR debug/29132, exception handling on mips. Closes: #389468, #390042.
+    - Fix typo in gcc documentation. Closes: #386180.
+    - Fix PR target/29230, wrong code generation on arm. Closes: #385505.
+  * libgcj-common: Ignore exit value of gcj-dbtool in rebuild-gcj-db on
+    arm, m68k, hppa. Adresses: #388505.
+  * libgcj-common: Replaces java-gcj-compat-dev and java-gcj-compat.
+    Closes: #389539.
+  * libgcj-common: /usr/share/gcj/debian_defaults: Define gcj_native_archs.
+  * Update the java backport from the redhat/gcc-4_1-branch upto 2006-09-27;
+    remove libjava-str2double.dpatch, pr28661.dpatch.
+  * Disable ssp on hppa, not supported.
+  * i386-biarch.dpatch: Avoid warnings about macro redefinitions.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 29 Sep 2006 22:32:41 +0200
+
+gcc-4.1 (4.1.1ds1-14) unstable; urgency=medium
+	
+  [Matthias Klose]
+  * Update to SVN 20060920.
+    - Fix PR c++/26957. Closes: #373257, #386910.
+    - Fix PR rtl-optimization/28243. Closes: #378325.
+  * Remove patch for PR rtl-optimization/28634, applied upstream.
+  * Fix FTBFS on GNU/kFreeBSD (fallout from the backport of classpath-0.92).
+    (Petr Salinger). Closes: #385974.
+  * Merge from Ubuntu:
+    - Do not encode the subminor version in the jar files.
+    - Fix typo for the versioned gcj subdirectory in lib32gcj-0.
+    - When running the i386 binaries on amd64, adjust the properties
+      java.home, gnu.classpath.home.url, sun.boot.class.path,
+      gnu.gcj.precompiled.db.path.
+    - Configure the 32bit build on amd64 
+      --with-java-home=/usr/lib32/jvm/java-1.4.2-gcj-4.1-1.4.2.0/jre.
+    - Configure --with-long-double-128 for glibc-2.4 on alpha, powerpc, ppc64,
+      s390, s390x, sparc, sparc64.
+    - Update the java backport from the redhat/gcc-4_1-branch upto 2006-09-20.
+      - Fix PR java/29013, invalid byte code generation. Closes: #386926.
+    - debian/patches/gcc-pfrs-2.dpatch: Apply a fix for a regression in the
+      backport of PR 28946 from the trunk (H.J. Lu).
+  * Backport PR classpath/28661 from the trunk.
+  * Don't ship the .la files for the java modules. Closes: #386228.
+  * gcj-4.1: Remove dangling symlink. Closes: #386430.
+  * gij: Suggest java-gcj-compat, gcj: Suggest java-gcj-compat-dev.
+    Closes: #361942.
+  * Fix infinite loop in string-to-double conversion on 64bit targets.
+    Closes: #348792.
+  * gij-4.1: Ignore exit value of gcj-dbtool in postinst. Adresses: #388505.
+  * libgcj-common: Move rebuild-gcj-db from java-gcj-compat into libgcj-common.
+  * On hppa, install a wrapper around gij-4.1 to ignore unaligned memory
+    accesses. Works around buildd configurations enabling this check by
+    default. Addresses: #364819.
+
+  [Ludovic Brenta]
+  * debian/patches/ada-libgnatprj.dpatch: Build mlib-tgt-linux.adb instead of
+    mlib-tgt.adb.  Closes: #387826.
+  * debian/patches/ada-pr15802.dpatch: Backport from the trunk.
+    Closes: #246384.
+  * debian/control.m4 (gnat-4.1): do not provide gnat (supplied by
+    gcc-defaults instead); conflict with gnat-4.2 which will soon be in
+    unstable.
+
+  [Roman Zippel]
+  * debian/patches/m68k-dwarf2.dpatch: Recognize stack adjustments also
+    in the src of an instruction.
+  * debian/patches/m68k-jumptable.dpatch: Don't force byte offset when
+    accessing the jumptable, gas can generate the correct offset size instead.
+  * debian/patches/m68k-peephole.dpatch: Convert some text peepholes to rtl
+    peepholes, so the correct DWARF2 information can be generated for stack
+    manipulations (Keep a few peepholes temporarily disabled).
+  * debian/patches/m68k-peephole-note.dpatch: Don't choke on notes while
+    reinserting REG_EH_REGION notes.
+  * debian/patches/m68k-return.dpatch: Don't use single return if fp register
+    have to be restored. Closes: #386864.
+  * debian/patches/m68k-sig-unwind.dpatch: Add support for unwinding over
+    signal frames.
+  * Fix PR rtl-optimization/27736, backport from the trunk.
+  * Add java support for m68k. Closes: #312830, #340874, #381022.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Sep 2006 19:36:31 +0200
+
+gcc-4.1 (4.1.1ds1-13) unstable; urgency=medium
+
+  * Update to SVN 20060901; remove patches applied upstream:
+    - PR target/24367.
+    - PR c++/26670.
+  * Apply proposed patch for PR fortran/28908.
+  * Fix biarch symlinks in lib64stdc++ for cross builds.
+  * Fix biarch symlinks in lib32objc on amd64.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  1 Sep 2006 00:04:05 +0200
+
+gcc-4.1 (4.1.1ds1-12) unstable; urgency=medium
+
+  [Matthias Klose]
+  * Update to SVN 20060830.
+  * Add backport of PR other/26208, bump libgcc1 shlibs dependency.
+  * Add backport of PR c++/26670. Closes: #356548.
+  * Apply proposed patch for PR target/24367 (s390).
+  * Add /usr/lib/jni to the libjava dlsearch path. Closes: #364820.
+  * Build without GFDL licensed docs. Closes: #384036.
+    - debian/patches/{svn-doc-updates,pr25524-doc,pr26885-doc}.dpatch:
+      Split out -doc specific patches.
+    - debian/*.texi, debian/porting.html: Add dummy documentation.
+    - debian/rules.unpack, debian/rules.patch: Update for non-gfdl build.
+    - fastjar.texi: Directly define the gcctabopt and gccoptlist macros.
+
+  * Merge from Ubuntu:
+    - Backport the classpath-0.92, libjava, gcc/java merge from the
+      redhat/gcc-4_1-branch branch.
+    - Apply the proposed patch for PR libgcj/28698.
+    - Change the libgcj/libgij sonames. Rename libgcj7 to libgcj7-0.
+    - Do not remove the rpath from libjvm.so and libjawt.so. Some
+      configure scripts rely on being able to link that libraries
+      directly.
+    - When running the i386 binaries on amd64, look in
+      /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+    - Add /usr/lib/jni to java.library.path. Closes: #364820.
+    - Add debugging symbols for more binary packages to libgcj7-dbg.
+      Closes: #383705.
+    - libgcj7-dev: Remove conflicts with older libgcjX-dev packages.
+    - Do not build the libgcj-bc and lib32gcj-bc packages anymore from
+      the gcj-4.1 source.
+
+  [Roman Zippel]
+  * debian/patches/m68k-limit_reload.dpatch: Correctly limit reload class.
+    Closes: #375522.
+  * debian/patches/m68k-split_shift.dpatch: Use correct predicates for
+    long long shifts and use more splits. Closes: #381572.
+  * debian/patches/m68k-prevent-qipush.dpatch: Prevent combine from creating
+    a byte push on the stack (invalid on m68k). Closes: #385021.
+  * debian/patches/m68k-autoinc.dpatch: Recognize a few more autoinc
+    possibilities.
+  * debian/patches/pr25514.dpatch: Backport from the trunk.
+  * debian/patches/m68k-gc.dpatch: Change STACKBOTTOM to LINUX_STACKBOTTOM
+    so it works with 2.6 kernels.
+  * Other m68k bug reports fixed in 4.1.1-11 and 4.1.1-12:
+    Closes: #378599, #345574, #344041, #323426, #340293.
+  * Build the stage1 compiler using -g -O2; saves a few hours build time
+    and apparently is working at the moment.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 Aug 2006 21:37:28 +0200
+
+gcc-4.1 (4.1.1-11) unstable; urgency=low
+
+  * The "Our priority are our users, remove the documentation!" release.
+
+  [Matthias Klose]
+  * Fix build failure building the hppa->hppa64 cross compiler.
+  * Update to SVN 20060814.
+    - Fix directory traversal vulnerability in fastjar. Closes: #368397.
+      CVE-2006-3619.
+    - Fix PR rtl-optimization/23454, ICE in invert_exp_1 on sparc.
+      Closes: #321215.
+    - Fix PR c++/26757, C++ front-end producing two DECLs with the same UID.
+      Closes: #356569.
+  * Remove patch for PR rtl-optimization/28075, applied upstream.
+  * Apply proposed patch for PR rtl-optimization/28634, rounding problem with
+    -fdelayed-branch on hppa/mips. Closes: #381710.
+  * Fixed at least in 4.1.1-10: boost::date_time build failure.
+    Closes: #382352.
+  * Build-depend on make (>= 3.81), add make (>= 3.81) as dependency to
+    gcc-4.1-source. Closes: #381117.
+  * Backport of libffi from the trunk; needed for the java backport in
+    experimental.
+  * libffi4-dev: Install the libffi_convenience library as libffi_pic.a.
+  * When building a package without the GFDL'd documentation, don't create
+    the alternative's slave links for manual pages for the java tools.
+  * Do not build the -doc packages and derived manual pages licensed under
+    the GFDL with invariant sections or cover texts.
+  * Only build the libssp package, if the target libc doesn't provide
+    ssp support.
+  * Run the complete testsuite, when building a standalone gcj package.
+
+  [Roman Zippel]
+  * debian/patches/m68k-fjump.dpatch:
+    Always use as fjcc pseudo op, we rely heavily on as to generate the
+    right size for the jump instructions. Closes: #359281.
+  * debian/patches/m68k-gc.dpatch:
+    The thread suspend handler has to save all registers.
+    Reenable MPROTECT_VDB, it should work, otherwise it's probably a kernel bug.
+  * debian/patches/m68k-save_pic.dpatch:
+    Correctly save the pic register, when not done by reload().
+    (fixes _Unwind_RaiseException and thus exception handling).
+  * debian/patches/m68k-libffi.dpatch: Add support for closures.
+  * debian/patches/m68k-bitfield.dpatch: Avoid propagation of mem expression
+    past a zero_extract lvalue.
+  * debian/patches/m68k-dwarf.dpatch: Correct the dwarf frame information,
+    but preserve compatibility.
+
+  [Christian Aichinger]
+  * Fix building a cross compiler targeted for ia64. Closes: #382627.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 15 Aug 2006 00:41:00 +0200
+
+gcc-4.1 (4.1.1-10) unstable; urgency=low
+
+  * Update to SVN 20060729.
+    - Fix PR c++/28225, segfault in type_dependent_expression_p.
+      Closes: #376148.
+  * Apply proposed patch for PR rtl-optimization/28075.
+    Closes: #373820.
+  * Apply proposed backport and proposed patch for PR rtl-optimization/28221.
+    Closes: #376084.
+  * libgcj7-jar: Loosen dependency on gcj-4.1-base.
+  * Add ssp header files to the private gcc includedir.
+  * Do not build the Ada packages from the gcc-4.1 source, introducing
+    a new gnat-4.1 source package.
+  * Build libgnat on alpha and s390 as well.
+  * Do not build the gnat-4.1-doc package (GFDL with invariant sections or
+    cover texts).
+  * Remove references to the stl-manual package. Closes: #378698.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 29 Jul 2006 22:08:59 +0200
+
+gcc-4.1 (4.1.1-9) unstable; urgency=low
+
+  * Update to SVN 20060715.
+    - Fix PR c++/28016, do not emit uninstantiated static data members.
+      Closes: #373895, #376871.
+  * Revert the patch to fix PR c++/27227. Closes: #378321.
+  * multiarch-include.dpatch: Renamed from biarch-include.dpatch;
+    apply for all architectures.
+  * Do not build the java compiler in gcc-4.1 package, just include the
+    options and specs in the gcc driver.
+  * Remove gnat-4.0 as an alternative build dependency.
+  * Add a patch to enable -fstack-protector by default for C, C++, ObjC, ObjC++.
+    The patch is disabled by default.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 15 Jul 2006 17:07:29 +0200
+
+gcc-4.1 (4.1.1-8) unstable; urgency=medium
+
+  * Update to SVN 20060708.
+    - Fix typo in gcov documentation. Closes: #375140.
+    - Fix typo in gccint documentation. Closes: #376412.
+    - [alpha], Fix -fvisibility-inlines-hidden segfaults on reference to
+      static method. PR target/27082. Closes: #369642.
+
+  * Fix ppc64 architecture string in debian/multiarch.inc. Closes: #374535.
+  * Fix conflict, replace and provide libssp0-dev for cross compilers.
+    Closes: #377012.
+  * Ignore compiler warnings when checking whether compiler driver understands
+    Ada fails. Closes: #376660.
+  * Backport fix for PR libmudflap/26864 from the trunk. Closes: #26864.
+  * README.C++: Remove non-existing URL. Closes: #347601.
+  * gij-4.1: Provide java2-runtime. Closes: #360906.
+
+  * Closed reports reported against gcc-3.0 and fixed in gcc-4.1:
+    - C++
+      + PR libstdc++/13943, call of overloaded `llabs(int)' is ambiguous.
+        Closes: #228645.
+    - Java
+      + Fixed segmentation fault on compiling bad program. Closes: #165635
+  * Closed reports reported against gcc-3.3 and fixed in gcc-4.1:
+    - Stack protector available. Closes: #213994, #233208.
+    - Better documentation of -finline-limit option. Closes: #296047.
+  * Closed reports reported against gcc-3.4 and fixed in gcc-4.1:
+    - General
+      + Fixed [unit-at-a-time] Using -O2 cannot detect missing return
+        statement in a function. Closes: #276843.
+    - C++
+      + PR13943, call of overloaded `llabs(int)' is ambiguous. Closes: #228645.
+      + PR c++/21280, #pragma interface, templates, and "inline function used
+        but never defined". Closes: #364412.
+    - Architecture specific:
+      - m68k
+        + Segfault building glibc. Closes: #353618.
+        + ICE when trying to build boost. Closes: #321486.
+  * Closed reports reported against gcc-4.0 and fixed in gcc-4.1:
+    - General
+      + Handling of #pragma GCC visibility for builtin functions.
+        Closes: #330279.
+      + gettext interpretation the two conditional strings as one.
+        Closes: #227193.
+      + ICE due to if-conversion. Closes: #335078.
+      + Fix unaligned accesses with __attribute__(packed) and memcpy.
+        Closes: #355297.
+      + Fix ICE in expand_expr_real_1, at expr.c. Closes: #369817.
+    - Ada
+      + Link error not finding -laddr2line. Closes: #322849.
+      + ICE on invalid code. Closes: #333564.
+    - C++
+      + libstdc++: bad thousand separator with fr_FR.UTF-8. Closes: #351786.
+      + The Compiler uses less memory than 4.0. Closes: #336225.
+      + Fix "fails to compare reverse map iterators". Closes: #362840.
+      + Fix "fail to generate code for base destructor defined inline with
+        pragma interface". Closes: #356435.
+      + Fix ICE in cp_expr_size, at cp/cp-objcp-common.c. Closes: #317455.
+      + Fix wrong warning: control may reach end of non-void function.
+        Closes: #319309.
+      + Fix bogus warning "statement has no effect" with template and
+        statement-expression. Closes: #336915.
+      + Fixed segfault on syntax error. Closes: #349087.
+      + Fix ICE with __builtin_constant_p in template argument.
+        Closes: #353366.
+      + Implement DR280 (fixing "no operator!= for const_reverse_iterator").
+        Closes: #244894.
+    - Fortran
+      + Fix wrong behaviour in unformatted writing. Closes: #369547.
+    - Java
+      + Fixed segfault on -fdump-tree-all-all. Closes: #344265.
+      + Fixed ant code completion in eclipse generating a nullpointer
+        exception. Closes: #337510.
+      + Fixed abort in gnu_java_awt_peer_gtk_GtkImage.c. Closes: #343112.
+      + Fixed assertion failure in gij with rhdb-explain. Closes: #335650.
+      + Fixed assertion failure when calling JTabbedPane.addTab(null, ...).
+        Closes: #314704.
+      + Fixed error when displaying empty window with bound larger than the
+        displayed content. Closes: #324502.
+      + Fixed: Exception in JComboBox.removeAllItems(). Closes: #314706.
+      + Fixed assertian error in gnu_java_awt_peer_gtk_GtkImage.c.
+        Closes: #333733.
+    - libmudflap
+      + PR libmudflap/23170, libmudflap should not use functions marked
+        obsolescent by POSIX/SUS. Closes: #320398.
+    - Architecture specific:
+      - m68k
+        + FTBFS building tin. Closes: #323016.
+        + ICE with -g -fomit-frame-pointer. Closes: #331150.
+        + ICE in instantiate_virtual_regs_lossage. Closes: #333536.
+        + Wrong code generation with loop unrolling. Closes: #342121.
+        + ICEs while building gst-ffmpeg. Closes: #343692.
+      - mips
+        + Fix gjdoc build failure. Closes: #344986.
+        + Fix link failure for static libs and object files when xgot
+          needs to be used. Closes: #274942.
+  * gnat bug reports fixed since gnat-3.15p:
+    - GNAT miscounts UTF8 characters in string with -gnaty. Closes: #66175.
+    - Bug box from "with Text_IO" when compiling optimized. Closes: #243795.
+    - Nonconforming parameter lists not detected. Closes: #243796.
+    - Illegal use clause not detected. Closes: #243797.
+    - Compiler enters infinite loop on illegal program with tagged records.
+      Closes: #243799.
+    - Compiler crashes on illegal program (missing discriminant, unconstrained
+      parent). Closes: #243800.
+    - Bug box at sinfo.adb:1215 on illegal program. Closes: #243801.
+    - Bug box at sinfo.adb:1651 on illegal program. Closes: #243802.
+    - Illegal program not detected (entry families). Closes: #243803.
+    - Illegal program not detected, RM 10.1.1(14). Closes: #243807.
+    - Bug box at exp_ch9.adb:7254 on illegal code. Closes: #243812.
+    - Illegal program not detected, RM 4.1.4(14). Closes: #243816.
+    - Bug box in Gigi, code=116, on legal program. Closes: #244225.
+    - Illegal program not detected, 12.7(10) (generic parameter is visible,
+      shouldn't be). Closes: #244483.
+    - Illegal program not detected, ambiguous aggregate. Closes: #244496.
+    - Bug box at sem_ch3.adb:8003. Closes: #244940.
+    - Bug box in Gigi, code=103, on illegal program. Closes: #244945.
+    - Legal program rejected, overloaded procedures. Closes: #246188.
+    - Bug box in Gigi, code=999, on legal program. Closes: #246388.
+    - Illegal program not detected, RM 10.1.6(3). Closes: #246389.
+    - Illegal program not detected, RM 3.10.2(24). Closes: #247014.
+    - Illegal program not detected, RM 3.9(17). Closes: #247015.
+    - Legal program rejected. Closes: #247016.
+    - Legal program rejected. Closes: #247021.
+    - Illegal program not detected, RM 4.7(3). Closes: #247022.
+    - Illegal program not detected, RM 3.10.2(27). Closes: #247562.
+    - Legal program rejected, "limited type has no stream attributes".
+      Closes: #247563.
+    - Wrong output from legal program. Closes: #247565.
+    - Compiler enters infinite loop on illegal program. Closes: #247567.
+    - Illegal program not detected, RM 8.6(31). Closes: #247568.
+    - Legal program rejected, visible declaration not seen. Closes: #247572.
+    - Illegal program not detected, RM 8.2(9). Closes: #247573.
+    - Wrong output from legal program, dereferencing access all T'Class.
+      Closes: #248171.
+    - Compiler crashes on illegal program, RM 5.2(6). Closes: #248174.
+    - Cannot find generic package body, RM 1.1.3(4). Closes: #248677.
+    - Illegal program not detected, RM 3.4.1(5). Closes: #248679.
+    - Compiler ignores legal override of abstract subprogram. Closes: #248686.
+    - Bug box, Assert_Failure at sinfo.adb:2365 on illegal program.
+      Closes: #251266.
+    - Ada.Numerics.Generic_Elementary_Functions.Log erroneout with -gnatN.
+      Closes: #263498.
+    - Bug box, Assert_Failure at atree.adb:2906 or Gigi abort, code=102
+      with -gnat -gnatc. Closes: #267788.
+    - Bug box in Gigi, code=116, 'Unrestricted_Access of a protected
+      subprogram. Closes: #269775.
+    - Stack overflow on illegal program, AI-306. Closes: #276225.
+    - Illegal program not detected, RM B.1(24). Closes: #276226.
+    - Wrong code generated with -O -fPIC. Closes: #306833.
+    - Obsolete: bashism's in debian/rules file. Closes: #370681.
+    - Supports more debian architectures. Closes: #171477.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  8 Jul 2006 16:24:47 +0200
+
+gcc-4.1 (4.1.1-7) unstable; urgency=low
+
+  * Prefer gnat-4.1 over gnat-4.0 as a build dependency.
+  * libssp0: Set priority to standard.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  2 Jul 2006 10:22:50 +0000
+
+gcc-4.1 (4.1.1-6) unstable; urgency=low
+
+  [Ludovic Brenta]
+  * Do not provide the symbolic link /usr/bin/gnatgcc; this will now
+    be provided by package gnat from the source package gcc-defaults.
+  * debian/control.m4, debian/control (gnat): conflict with gnat (<< 4.1),
+    not all versions of gnat, since gcc-defaults will now provide gnat (= 4.1)
+    which depends on gnat-4.1.
+
+  [Matthias Klose]
+  * libjava: Change the default for enable_hash_synchronization_default
+    on PA-RISC. Tighten the libgcj7 shlibs version on hppa.
+  * Update to SVN 20060630.
+  * Apply proposed patch for PR 26991.
+  * Don't use the version for the libstdc++ shlibs dependency for the libgcj
+    shlibs dependency.
+  * Merge from Ubuntu edgy:
+    - Fix %g7 usage in TLS, add patch sparc-g7.dpatch, fixes glibc-2.4 build
+      failure on sparc (Fabio M. Di Nitto).
+    - Merge libssp0-dev into gcc-4.1 (-fstack-protector is a common option).
+    - Run the testsuite with -fstack-protector as well.
+
+  [Bastian Blank]
+  * Make it possible to overwrite arch per DEB_TARGET_ARCH and DEB_TARGET_GNU_TYPE.
+  * Disable biarch only on request for cross builds.
+  * Use correct source directory for tarballs.
+  * Produce correct multiarch.inc for source builds.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  1 Jul 2006 01:49:55 +0200
+
+gcc-4.1 (4.1.1-5) unstable; urgency=low
+
+  * Fix build error running with dpkg-buildpackage -rsudo.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 14 Jun 2006 01:54:13 +0200
+
+gcc-4.1 (4.1.1-4) unstable; urgency=low
+
+  * Really do not backout the fix for PR c++/26068.
+    Closes: #372152, #372559.
+  * Update fastjar version string to 4.1.
+  * Disable pascal again.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Jun 2006 20:29:57 +0200
+
+gcc-4.1 (4.1.1-3) unstable; urgency=low
+
+  * Update to SVN 20060608, do not revert the fix for PR c++/26068.
+    Closes: #372152, #372559.
+  * Fix build failures for Pascal, enable Pascal on all architectures.
+  * Fix another build failure on GNU/kFreeBSD (Aurelien Jarno).
+    Closes: #370661.
+  * Fix build fauilure in gcc/p with parallel make.
+  * Remove cross-configure patch (Kazuhiro Inaoka). Closes: #370649.
+  * Only build the gcc-4.1-source package, when building from the gcc-4.1
+    source.
+  * Fix upgrade problem from standalone gcj-4.1.
+  * Fix build error using bison-2.2, build-depend on bison (>= 2.3).
+    Closes: #372605.
+  * Backport PR libstdc++/25524 from the trunk, update the biarch-include
+    patch. mips triarch support can be added more easily.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Jun 2006 00:23:45 +0200
+
+gcc-4.1 (4.1.1-2) unstable; urgency=low
+
+  * Update to SVN 20060604.
+    - Fix PR c++/26757, C++ front-end producing two DECLs with the same UID.
+      Closes: #356569.
+    - Fix PR target/27158, ICE in extract_insn with -maltivec.
+      Closes: #362307.
+  * Revert PR c++/26068 to work around PR c++/27884 (Martin Michlmayr).
+    Closes: #370308.
+  * Mention Ada in copyright, update copyright file (Ludovic Brenta).
+    Closes: #366744.
+  * Fix kbsd-gnu-java.dpatch (Petr Salinger). Closes: #370320.
+  * Don't include version control files in gcc-4.1-source.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  4 Jun 2006 19:13:37 +0000
+
+gcc-4.1 (4.1.1-1) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20060601.
+  * Reenable the gpc build.
+  * PR libgcj/26483, libffi patch for IA-64 denorms, taken from trunk.
+  * Disable Ada for m32r targets. Closes: #367595.
+  * lib32gfortran1: Do not create empty directory /usr/lib32. Closes: #367999.
+  * gcc-4.1: Add a conflict to the gcj-4.1 version with a different
+    gcc_libdir.
+  * Build gij/gcj for GNU/k*BSD. Closes: #367166.
+  * Update hurd-changes patch (Michael Banck). Closes: #369690.
+  * debian/copyright: Add exception for the gpc runtime library.
+  * Update gpc/gpc-doc package descriptions.
+
+  [Ludovic Brenta]
+  * patches/ada-libgnatprj.dpatch: add prj-pars.ad[bs] and sfn_scan.ad[bs]
+    to libgnatprj; remove them from gnatmake.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  1 Jun 2006 20:35:54 +0200
+
+gcc-4.1 (4.1.0-4) unstable; urgency=low
+
+  [Ludovic Brenta]
+  * Fix a stupid bug whereby fname.ad{b,s} would be included in both
+    libgnatvsn-dev and libgnatprj-dev, preventing use of gnatprj.gpr.
+    Closes: #366733.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 11 May 2006 04:34:50 +0200
+
+gcc-4.1 (4.1.0-3) unstable; urgency=low
+
+  * Update to SVN 20060507.
+  * debian/rules.d/binary-java.mk: Use $(lib32) everywhere. Closes: #365388.
+  * Always configure hppa64-linux-gnu with
+    --includedir=/usr/hppa64-linux-gnu/include.
+  * Make libgnatvsn4.1 and libgnatprj4.1 priority optional. Closes: #365900.
+  * Call autoconf2.13 explicitely in the Ada patches, build-depend on
+    autoconf2.13. Closes: #365780.
+  * Fix libgnatprj-dev and libgnatvsn-dev dependencies on their shared
+    libraries.
+  * Deduce softfloat and vfp (ARM) configure options (Pjotr Kourzanov).
+  * Update proposed patch for PR26885 (May 2 version).
+  * Build the libxxstdc++-dbg packages, when not building the library pacakges.
+  * Do not include the _pic library in the libxxstdc++-dbg packages.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  7 May 2006 15:29:53 +0200
+
+gcc-4.1 (4.1.0-2) unstable; urgency=medium
+
+  * Update to SVN 20060428.
+  * Apply proposed patches for PR26885.
+
+  * Keep libffi doc files in its own directory. Closes: #360466.
+  * Update ppc64 patches for 4.1 (Andreas Jochens). Closes: #360498.
+  * Fix PR tree-optimization/26763, wrong-code, taken from the 4.1 branch.
+    Closes: #356896. CVE-2006-1902.
+  * hppa-cbranch, hppa-cbranch2 patches: Fix for PR target/26743,
+    PR target/11254, PR target/10274, backport from trunk (Randolph Chung).
+  * Let libgccN provide -dcv1 when cross-compiling (Pjotr Kourzanov).
+    Closes: #363289.
+  * (Build-)depend on glibc-2.3.6-7. Closes: #360895, #361904.
+  * Fix a pedantic report about a package description. Add a hint that
+    we do not like bug reports with locales other than "C". Closes: #361409.
+  * Enable the libjava interpreter on mips/mipsel.
+  * gcc-4.1-source: Depend on gcc-4.1-base.
+  * gnat-4.1: Fix permissions of .ali files.
+  * Build lib32gcj7 on amd64.
+  * debian/patches/ada-gnatvsn.dpatch: New.  Apply proposed fix for
+    PR27194.
+
+  [Ludovic Brenta]
+  * debian/patches/ada-default-project-path.dpatch: new.  Change the
+    default search path for project files to the one specified
+    by the Debian Policy for Ada: /usr/share/ada/adainclude.
+  * debian/patches/ada-symbolic-tracebacks.dpatch: new.  Enable support for
+    symbolic tracebacks in exceptions.
+  * debian/patches/ada-missing-lib.dpatch: remove, superseded by the above.
+  * debian/patches/ada-link-lib.dpatch: changed.
+    - Instead of building libada as a target library only, build it as
+      both a host and, if different, target library.
+    - Build the GNAT tools in their top-level directory; do not use
+      recursive makefiles.
+    - Link the GNAT tools dynamically against libgnat.
+    - Apply proposed fix for PR27300.
+    - Rerun autoconf (Matthias Klose).
+  * debian/patches/ada-libgnatvsn.dpatch: new.
+    - Introduce a new shared library named libgnatvsn, containing
+      common components of GNAT under the GNAT-Modified GPL, for
+      use in GNAT tools, ASIS, GLADE and GPS.
+    - Link the gnat tools against this new library.
+    - Rerun autoconf (Matthias Klose).
+  * debian/patches/ada-libgnatprj.dpatch: new.
+    - Introduce a new shared library named libgnatprj, containing the
+      GNAT Project Manager, i.e. the parts of GNAT that parses project
+      files (*.gpr).  Licensed under pure GPL; for use in GLADE and GPS.
+    - Link the gnat tools against this new library.
+    - Rerun autoconf (Matthias Klose).
+  * debian/patches/ada-acats.dpatch: new.
+     - When running the ACATS, look for the gnat tools in their new
+       directory (build/gnattools), and for the shared libraries in
+       build/gcc/ada/rts, build/libgnatvsn and build/libgnatprj.
+  * debian/gnatvsn.gpr, debian/gnatprj.gpr: new.
+  * debian/rules.d/binary-ada.mk, debian/control.m4: new binary packages:
+    libgnatvsn-dev, libgnatvsn4.1, libgnatprj-dev, libgnatprj4.1. Place
+    the *.gpr files in their respective -dev packages.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 29 Apr 2006 00:32:09 +0200
+
+gcc-4.1 (4.1.0-1) unstable; urgency=low
+
+  * libstdc++CXX-BV-dev.preinst: Remove (handling of c++ include dir for 4.0).
+  * libgcj-common: Move removal of docdir from preinst into postinst.
+  * libgcj7: Move removal of docdir from preinst into postinst.
+  * Drop alternative build dependency on gnat-3.4, not built anymore.
+  * Fix PR libgcj/26103, wrong exception thrown (4.1 branch).
+  * debian/patches/libjava-stacktrace.dpatch: Add support to print file names
+    and line numbers in stacktraces.
+  * Add debugging symbols for libgcjawt and lib-gnu-java-awt-peer-gtk
+    in the libgcj7-dbg and lib32gcj7-dbg packages.
+  * Remove dependency of the libgcj-dbg packages on the libgcj-dev packages,
+    add recommendations on binutils and libgcj-dev. Mention the requirement
+    of binutils for the stacktraces.
+  * Fix upgrade from version 4.0.2-9, loosing the Debian changelog.
+    Closes: #355439.
+  * gij/gcj: Install one alternative for each command, do not use slave
+    links for rmiregistry, javah, rmic. Ubuntu #26781. Closes: #342557.
+  * Fix for PR tree-optimization/26587, taken from the 4.1 branch.
+  * Fix PR libstdc++/26526 (link failure when _GLIBCXX_DEBUG is defined).
+  * Configure with --enable-clocale=gnu, even if not building C++ packages.
+  * Remove runtime path from biarch libraries as well.
+  * PR middle-end/26557 (ice-on-vaild-code, regression), taken from
+    the gcc-4_1-branch. Closes: #349083.
+  * PR tree-optimization/26672 (ice-on-vaild-code, regression), taken from
+    the gcc-4_1-branch. Closes: #356231.
+  * PR middle-end/26004 (rejects-vaild-code, regression), taken from
+    the gcc-4_1-branch.
+  * When building as standalone gcj, build libgcc4 (hppa only) and fastjar.
+  * Configure --with-cpu=v8 on sparc.
+  * debian/patches/libjava-hppa.dpatch: pa/pa32-linux.h
+    (CRT_CALL_STATIC_FUNCTION): Define when CRTSTUFFS_O is defined.
+    (John David Anglin). Closes: #353346.
+  * Point to the 4.1 version of README.Bugs (closes: #356230).
+  * Disable the libmudflap testsuite on alpha (getting killed).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 18 Mar 2006 23:00:39 +0100
+
+gcc-4.1 (4.1.0-0) experimental; urgency=low
+
+  * GCC 4.1.0 final release.
+  * Build the packages for the Java language from a separate source.
+  * Update NEWS.html, NEWS.gcc.
+  * libgcj-doc: Auto generated API documentation for libgcj7, classpath
+    example programs.
+  * Add gjdoc to Build-Depends-Indep.
+  * On amd64, build-depend on libc6-dev-i386 instead of ia32-libs-dev.
+  * Internal ssp headers now installed in the gcc libdir.
+  * Do not build gcj-4.1-base when building the gcc-4.1 packages.
+  * When building as gcj-4.1, use the tarball from the gcc-4.1-source
+    package.
+
+  [Ludovic Brenta]
+  * Allow to enable and disable NLS and bootstrapping from the environment.
+    - Adding "nls" to WITHOUT_LANG disables NLS support.
+    - If WITH_BOOTSTRAP is set, debian/rules2 calls configure
+      --enable-bootstrap=$(WITH_BOOTSTRAP) and just "make".  If
+      WITH_BOOTSTRAP is unset, it calls configure without a bootstrapping
+      option and calls "make profiledbootstrap" or "make bootstrap-lean"
+      depending on the target CPU.
+      Currently overwritten to default to "bootstrap".
+
+ -- Matthias Klose <doko@debian.org>  Thu,  2 Mar 2006 00:03:45 +0100
+
+gcc-4.1 (4.1ds9-0exp9) experimental; urgency=low
+
+  * Update to GCC 4.1.0 release candidate 1 (gcc-4.1.0-20060219 tarball).
+  * Update gcc-version patch for gcc-4.1.
+  * libgccN, libstdc++N*: Fix upgrade of /usr/share/doc symlinks.
+  * libjava awt & swing update, taken from trunk 2006-02-16.
+  * libgcj7-dev: Suggest libgcj-doc, built from a separate source package.
+  * Shorten build-dependency line (work around buildd problems
+    on arm* and mips*).
+  * New patch gcc-ice-hack (saving the preprocessed source on an ICE),
+    taken from Fedora.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 20 Feb 2006 10:07:23 +0100
+
+gcc-4.1 (4.1ds8-0exp8) experimental; urgency=low
+
+  * Update to SVN 20060212, taken from the 4.1 release branch.
+  * libgccN: Fix upgrade of /usr/share/doc/libgccN symlink.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Feb 2006 19:48:31 +0000
+
+gcc-4.1 (4.1ds7-0exp7) experimental; urgency=low
+
+  * Update to SVN 20060127, taken from the 4.1 release branch.
+    - On hppa, bump the libgcc soversion to 4.
+  * Add an option not to depend on the system -base package for cross compiler
+    (Ian Wienand). Closes: #347484.
+  * Remove workaround increasing the stack size limit for some architectures,
+    not needed anymore on ia64.
+  * On amd64, build-depend on libc6-dev-i386, depend on libc6-i386, where
+    available.
+  * libstdc++6: Properly upgrade the doc directory. Closes: #346171.
+  * libstdc++6: Add a conflict to scim (<< 1.4.2-1). Closes: #343313.
+  * Set default 32bit ix86 architecture to i486.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 27 Jan 2006 22:23:22 +0100
+
+gcc-4.1 (4.1ds6-0ubuntu6) experimental; urgency=low
+
+  * Update to SVN 20060107, taken from the 4.1 release branch.
+    - Remove fix for PR ada/22533, fixed by patch for PR c++/23171.
+  * Remove binary packages from the control file, which aren't built
+    yet on any architecture.
+  * gcc-hppa64: Use /usr/hppa64-linux-gnu/include as location for the glibc
+    headers, tighten glibc (build-)dependency.
+  * libffi [arm]: Add support for closures, libjava [arm]: enable the gij
+    interpreter (Phil Blundell). Addresses: #337263.
+  * For the gcj standalone build, include cc1 into the gcj-4.1 package,
+    needed for linking java programs compiled to native code.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  7 Jan 2006 03:36:33 +0100
+
+gcc-4.1 (4.1ds4-0exp4) experimental; urgency=low
+
+  * Update to SVN 20051210, taken from the 4.1 release branch.
+  * Prepare to build the java packages from it's own source (merged
+    from Ubuntu).
+    - Build the java packages from the gcc-4.1 source, as long as packages
+      are prepared for experimental.
+    - When built as gcj, run only the libjava testsuite, don't build the
+      libstdc++ debug packages, don't package the gcc source.
+    - Loosen package dependencies, when java packages are built from
+      separate sources.
+    - Fix gcj hppa build, when java packages are built from separate sources.
+    - gij-4.1: Install test-summary, when doing separate builds.
+    - Allow java packages be installed independent from other packages built
+      from the source package.
+    - Rename libgcj7-common to libgcj7-jar.
+    - Introduce a gcj-4.1-base package to completely separate the two and not
+      duplicate the changelog in each gcj/gij package.
+  * Java related changes:
+    - libjava-xml-transform: Update from classpath trunk, needed for
+      eclipse (Michael Koch), applied upstream.
+    - Fix java wrapper scripts to point to 4.1 (closes: #341710).
+    - Reenable java on mips and mipsel.
+    - Fix libgcj6 dependency. Ubuntu #19935.
+    - Add libxt-dev as a java build dependency. autoconf explicitely checks
+      for X11/Intrinsic.h.
+  * Ada related changes:
+    - Apply proposed fix for PR ada/22533, reenable ada on alpha, powerpc,
+      mips, mipsel and s390.
+    - Add Ada support for GNU/kFreeBSD (Aurelien Jarno). Closes: #341356.
+    - Remove ada bootstrap workaround for alpha.
+  * Build a separate gcc-4.1-source package (Bastian Blank). Closes: #333922.
+  * Remove obsolete patch: libstdc++-automake.
+  * Remove patch integrated upstream: libffi-mips.
+  * Fix the installation of the hppa64 compiler in snapshot builds.
+  * Rename libgfortran0* to libgfortran1* (upstream soversion change).
+  * Add a dependency on libc-dev for all compilers / -dev packages except
+    gcc (which can be used for kernel builds without libc-dev).
+  * libffi4-dev: Fix package description.
+  * On amd64, install 32bit libraries into /emul/ia32-linux/usr/lib.
+    Addresses: #341147.
+  * Fix installation of biarch libstdc++ headers on amd64.
+  * Configure --with-tune=i686 on ix86 architectures (on Ubuntu with
+    -mtune=pentium4). Remove the cpu-default-* patches.
+  * debian/control.m4: Fix libxxgcc package names.
+  * Update the build infrastructure to build cross compilers
+    (Nikita V. Youshchenko).
+  * Tighten binutils (build-)dependency. Closes: #342484.
+  * Symlink more doc directories.
+  * debian/control.m4: Explicitely set Architecture for biarch packages.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Dec 2005 16:56:45 +0100
+
+gcc-4.1 (4.1ds1-0ubuntu1) UNRELEASED; urgency=low
+
+  * Build Java packages only.
+  * Update to SVN 20051121, taken from the 4.1 release branch.
+    - Remove libjava-saxdriver-fix patch, applied upstream.
+    - Remove ada-gnat-version patch, applied upstream.
+  * Fix FTBFS in biarch builds on 32bit kernels.
+  * Update libstdc++-doc doc-base file (closes: #339046).
+  * Remove obsolete patch: gcc-alpha-ada_fix.
+  * Fix installation of biarch libstdc++ headers (Ubuntu #19655).
+  * Fix sparc and s390 biarch patches to build the 64bit libffi.
+  * Work around biarch build failure in libjava/classpath/native/jni/midi-alsa.
+  * Install spe.h header on powerpc.
+  * Add libasound build dependencies.
+  * libgcj: Fix installation of libgjsmalsa library.
+  * Remove patches not used anymore: libjava-no-rpath, i386-config-ml-nomf,
+    libobjc, multiarch-include, disable-biarch-check-mf, gpc-profiled,
+    gpc-no-gpidump, libgpc-shared, acats-expect.
+  * Fix references to manuals in gnat(1). Ubuntu #19772.
+  * Remove build dependency on xlibs-dev, add libxtst-dev.
+  * Do not configure with --disable-werror.
+  * Merge *-config-ml patches into one config-ml patch, configure the biarch
+    libs in debian/rules.defs.
+  * debian/gcj-wrapper: Accept -Xss.
+  * Do not build biarch java on Debian (missing biarch libasound).
+  * Do not build the java packages from this source package, avoiding
+    dependencies on X.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon, 21 Nov 2005 20:29:43 +0100
+
+gcc-4.1 (4.1ds0-0exp0) experimental; urgency=low
+
+  * Configure libstdc++ using the default allocator.
+  * Update to 20051112, taken from the svn trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 12 Nov 2005 23:47:01 +0100
+
+gcc-4.1 (4.1ds0-0ubuntu0) breezy; urgency=low
+
+  * UNRELEASED
+  * First snapshot of gcc-4.1 (CVS 20051019).
+    - adds SSP support (closes: #213994, #233208).
+  * Remove patches applied upstream/not needed anymore.
+  * Update patches for 4.1: link-libs, gcc-textdomain, libjava-dlsearch-path,
+    rename-info-files, reporting, classmap-path, i386-biarch, sparc-biarch,
+    libjava-biarch-awt, ada-gcc-name.
+  * Disable patches:
+    - 323016, m68k, necessary for 4.1?
+  * debian/copyright: Update for 4.1.
+  * debian/control, debian/control.m4, debian/rules.defs, debian/rules.conf:
+    Update for 4.1, add support for Obj-C++ and SSP.
+  * Fix generation of Ada docs in info format.
+  * Set Ada library version to 4.1.
+  * Drop gnat-3.3 as an alternative build dependency.
+  * Use fortran instead of f95 for the build files.
+  * Update build support for awt peer libs.
+  * Add packaging support for SSP library.
+  * Add packaging support for Obj-C++.
+  * Run the testsuite for -march=i686 on i386 and amd64 as well.
+  * Fix generation of Pascal docs in html format.
+  * Update config-ml patches to build libssp biarch.
+  * Disable libssp for hppa64 build.
+  * libgcj7-dev: Install jni_md.h.
+  * Disable gnat for powerpc, currently fails to build.
+  * Add biarch runtime lib packages for ssp, mudflap, ffi.
+  * Do not explicitely configure with --enable-java-gc=boehm, which is the
+    default.
+  * libjava-saxdriver-fix: Fix a problem in the Aelfred2 SAX parser.
+  * libstdc++6-4.0-dev: Depend on the libc-dev package. Ubuntu #18885.
+  * Build-depend on expect-tcl8.3 on all architectures.
+  * Build-depend on lib32z1-dev on amd64 and ppc64, drop build dependency on
+    amd64-libs.
+  * Disable ada on alpha mips mipsel powerpc s390, currently broken.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 19 Oct 2005 11:02:31 +0200
+
+gcc-4.0 (4.0.2-3) unstable; urgency=low
+
+  * Update to CVS 20051015, taken from the gcc-4_0-branch.
+    - gcc man page fixes (closes: #327254, #330099).
+    - PR java/19870, PR java/20338, PR java/21844, PR java/21540:
+      Remove Debian patches.
+    - Applied libjava-echo-fix patch.
+    - Fix PR target/24284, ICE (Segmentation fault) on sparc-linux.
+      Closes: #329840.
+    - Fix PR c++/23797, ICE on typename outside template. Closes: #325545.
+    - Fix PR c++/22551, ICE in tree_low_cst. Closes: #318932.
+  * libstdc++6: Tighten libstdc++ shlibs version to 4.0.2-3 (new symbol).
+  * Update generated Ada files.
+  * Fix logic to disable mudflap and Obj-C++ via the environment.
+  * Remove f77 build bits.
+  * gij-4.0: Remove /var/lib/gcj-4.0/classmap.db on purge (closes: #330800).
+  * Let gcj-4.0 depend on libgcj6-dev, instead of recommending it. This is
+    not necessary for byte-code compilations, but for compilations to native
+    code. For compilations to byte-code, use a better compiler like ecj
+    for now (found in the ecj-bootstrap package).
+  * Disable biarch setup in cross compilers (Josh Triplett). Closes: #333952.
+  * Fix with_libnof logic for cross-compilations (Josh Triplett).
+    Closes: #333951.
+  * Depend on binutils (>= 2.16.1cvs20050902-1) on the alpha architecture.
+    Closes: #333954.
+  * On i386, build-depend on libc6-dev-amd64. Closes: #329108.
+  * (Build-)depend on glibc 2.3.5-5.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  2 Oct 2005 14:25:54 +0200
+
+gcc-4.0 (4.0.2-2) unstable; urgency=low
+
+  * Update to CVS 20051001, taken from the gcc-4_0-branch. Includes the
+    changes between 4.0.2 RC3 and the final 4.0.2 release, missing from
+    the upstream tarball. Remove patches applied upstream (gcc-c-decl,
+    pr23182, pr23043, pr23367, pr23891, pr21418, pr24018).
+  * On ix86 architectures run the testsuite for -march=i686 as well.
+  * Build libffi on the Hurd (closes: #328705).
+  * Add big-endian arm (armeb) support (Lennert Buytenhek). Closes: #330730.
+  * Update libjava xml to classpath CVS HEAD 20050930 (Michael Koch).
+  * Reapply patch to make -mieee the default on alpha-linux. Closes: #330826.
+  * Add workaround not to make libmudflap _start/_end not small data on
+    mips/mipsel, taken from CVS HEAD.
+  * Don't build the nof libraries on powerpc.
+  * Number crunching time on m68k, reenable gfortran on m68k-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  1 Oct 2005 15:42:10 +0200
+
+gcc-4.0 (4.0.2-1) unstable; urgency=low
+
+  * GCC 4.0.2 release.
+  * lib64stdc++6: Set priority to optional.
+  * Fix bug in StreamSerializer, seen with eclipse-3.1 (Ubuntu 12744).
+    Backport from CVS HEAD, Michael Koch.
+  * Apply java patches, proposed for the 4.0 branch: PR java/24018,
+    PR libgcj/23182, PR java/19870, PR java/21844, PR libgcj/23367,
+    PR java/20338.
+  * Update the expect/pty test to actually call expect directly, rather
+    than test for the existence of PTYs, since a working expect is what
+    we really care about, not random device files (Adam Conrad).
+    Closes: #329715.
+  * Add build dependencies on lib64z1-dev.
+  * gcc-c-decl.dpatch: Fix C global decl handling regression in 4.0.2 from
+    4.0.1
+
+ -- Matthias Klose <doko@debian.org>  Thu, 29 Sep 2005 19:50:08 +0200
+
+gcc-4.0 (4.0.1-9) unstable; urgency=low
+
+  * Update to CVS 20050922, taken from the gcc-4_0-branch (4.0.2 RC3).
+  * Apply patches:
+    - Fix PR java/21418: Order of source files matters when compiling,
+      backported from mainline.
+    - Fix for PR 23043, backported form mainline.
+    - Proposed patch for #323016 (m68k only). Patch by Roman Zippel.
+  * libstdc++6: Tighten libstdc++ shlibs version to 4.0.1-9 (new symbol).
+  * Fail the build early, if the system doesn't have any pty devices
+    created in /dev. Needed for running the testsuite.
+  * Update hurd changes again (closes: #328973).
+
+ -- Matthias Klose <doko@debian.org>  Thu, 22 Sep 2005 07:28:18 +0200
+
+gcc-4.0 (4.0.1-8) unstable; urgency=medium
+
+  * Update to CVS 20050917, taken from the gcc-4_0-branch.
+    - Fix FTBFS for boost, introduced in 4.0.1-7 (closes: #328684).
+  * Fix PR java/23891, eclipse bootstrap.
+  * Set priority of gcc-4.0-hppa64 package to standard.
+  * Bump standards version to 3.6.2.
+  * Fix java wrapper script, mishandles command line options with arguments.
+    Patch from Olly Betts. Closes: #296456.
+  * Bump epoch of the lib32gcc1 package to the same epoch as for the the
+    libgcc1 and lib64gcc1 packages.
+  * Fix some lintian warnings.
+  * Build libffi on the Hurd (closes: #328705).
+  * For biarch builds, disable the testsuite for the non-default architecture
+    for runtime libraries, which are not built by default (libjava).
+  * Add gsfonts-x11 to Build-Depends-Indep to avoid warnings from doxygen.
+  * Install Ada .ali files read-only.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 17 Sep 2005 10:35:23 +0200
+
+gcc-4.0 (4.0.1-7) unstable; urgency=low
+
+  * Update to CVS 20050913, taken from the gcc-4_0-branch.
+    - Fix PR c++/19004, ICE in uses_template_parms (closes: #284777).
+    - Fix PR rtl-optimization/23454, ICE in invert_exp_1 on sparc.
+      Closes: #321215.
+    - Fix PR libstdc++/23417, make bits/stl_{list,tree}.h -Weffc++ clean.
+      Closes: ##322170.
+  * Install 'altivec.h' on ppc64 (closes: #323945).
+  * Install locale data with the versioned package name (closes: #321591).
+  * Fix fastjar build without building libjava.
+  * On hppa, don't build using gcc-3.3 when ada is disabled.
+  * On m68k, don't build the stage1 compiler using -O.
+
+  * Ludovic Brenta <ludovic@ludovic-brenta.org>
+    - Allow the choice whether or not to build with NLS.
+    - Fix a typo whereby libffi was always enabled on i386.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 13 Sep 2005 23:23:11 +0200
+
+gcc-4.0 (4.0.1-6) unstable; urgency=low
+
+  * Update to CVS 20050821, taken from the gcc-4_0-branch.
+    - debian/patches/pr21562.dpatch: Removed, applied upstream.
+    - debian/patches/libjava-awt-name.dpatch: Updated.
+    - debian/patches/classpath-20050618.dpatch: Updated.
+  * Use all available CPU's for the check target, unless USE_NJOBS == no.
+  * debian/patches/biarch-include.dpatch: Include
+    /usr/local/include/<arch>-linux-gnu before including /usr/local/include.
+  * Fix biarch system include directories for the non-default architecture.
+  * Prefer gnat-4.0 over gnat-3.4 over gnat-3.3 as a build-dependency.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 18 Aug 2005 18:36:23 +0200
+
+gcc-4.0 (4.0.1-5) unstable; urgency=low
+
+  * Update to CVS 20050816, taken from the gcc-4_0-branch.
+    - Fix PR middle-end/23369, wrong code generation for funcptr comparison
+      on hppa. Closes: #321785.
+    - Fix PR fortran/23368 ICE with NAG routines (closes: #322912).
+  * Build-depend on libcairo2-dev (they say, that's the final package name ...)
+  * libgcj: Search /usr/lib/gcj-4.0 for dlopened libraries, place a copy
+    of the .la files in the libgcj6 package into this directory.
+    Closes: #322576.
+  * Tighten the dependencies between the compiler packages to the same
+    version and release. Use some substitution variables for control file
+    generation.
+  * Remove build dependencies for gpc.
+  * Don't use '/emul/ia32-linux' on ppc64 (closes: #322890).
+  * Synchronize with Ubuntu.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 16 Aug 2005 22:45:47 +0200
+
+gcc-4.0 (4.0.1-4ubuntu1) breezy; urgency=low
+
+  * Jeff Bailey <jbailey@ubuntu.com>
+
+    Enable i386 biarch using biarch glibc (not yet enabled for unstable).
+    - debian/rules.d/binary-libgcc.mk: Make i386 lib64gcc1 depend on
+      libc6-amd64
+    - debian/control.m4: Suggest libc6-amd64 rather than amd64-libs.
+    - debian/rules.conf: Build-Dep on libc6-dev-amd64 [i386]
+      Build-Dep on binutils >= 2.16.1-2ubuntu3
+    - debian/rules2: Enable biarch build in Ubuntu.
+
+  * Matthias Klose <doko@ubuntu.com>
+
+    - Add shlibs file and dependency information for the lib32gcc1 package.
+    - debian/patches/gcc-textdomain.dpatch: Update (closes: #321591).
+    - Set priority of gcc-4.0-base and libstdc++6 packages to `required'.
+      Closes: #321016.
+    - libffi-hppa.dpatch: Remove, applied upstream.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  8 Aug 2005 19:39:02 +0200
+
+gcc-4.0 (4.0.1-4) unstable; urgency=low
+
+  * Enable the biarch compiler for powerpc (closes: #268023).
+  * Update to CVS 20050806, taken from the gcc-4_0-branch.
+  * Build depend on libcairo0.6.0-dev (closes: #321540).
+  * Fix Ada build on the hurd (closes: #321350).
+  * Update libffi for mips (Thiemo Seufer). Closes: #321100.
+  * Fix segfault on 64bit archs in the AWT Gtk peer library (Dan Frazier).
+    Closes: #320915.
+  * Add libXXgcc1 build dependencies for biarch builds.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  7 Aug 2005 07:01:59 +0000
+
+gcc-4.0 (4.0.1-3) unstable; urgency=medium
+
+  * Update to CVS 20050725, taken from the gcc-4_0-branch.
+    - Fix ICE with -O and -mno-ieee-fp/-ffast-math (closes: #319087).
+  * Synchronize with Ubuntu.
+  * Fix applying hurd specific patches for the hurd build (closes: #318443).
+  * Do not build-depend on libmpfr-dev on architectures, where fortran
+    is not built.
+  * Apply biarch include patch on ppc64 as well (closes: #318603).
+  * Correct libstdc++-dev package description (closes: #319082).
+  * debian/rules.defs: Replace DEB_TARGET_GNU_CPU with DEB_TARGET_ARCH_CPU.
+  * gcc-4.0-hppa64: Rename hppa64-linux-gcc to hppa64-linux-gnu-gcc.
+    Closes: #319818.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 25 Jul 2005 10:43:06 +0200
+
+gcc-4.0 (4.0.1-2ubuntu3) breezy; urgency=low
+
+  * Update to CVS 20050720, taken from the gcc-4_0-branch.
+    - Fix PR22278, volatile issues, seen when building xorg.
+  * Build against new libcairo1-dev (0.5.2).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Jul 2005 12:29:50 +0200
+
+gcc-4.0 (4.0.1-2ubuntu2) breezy; urgency=low
+
+  * Acknowledge that i386 biarch builds still need to be fixed for glibc-2.3.5.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 19 Jul 2005 08:29:30 +0000
+
+gcc-4.0 (4.0.1-2ubuntu1) breezy; urgency=low
+
+  * Synchronize with Debian.
+  * Update to CVS 20050718, taken from the gcc-4_0-branch.
+    - Fix PR c++/22132 (closes: #318488), upcasting a const class pointer
+      to struct the class derives from generates wrong code.
+  * Build biarch runtime libraries for Fortran and ObjC.
+  * Apply proposed patch for PR22309 (crash with mt_allocator if libstdc++
+    is dlclosed). Closes: #293466.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon, 18 Jul 2005 17:10:18 +0200
+
+gcc-4.0 (4.0.1-2) unstable; urgency=low
+
+  * Don't apply the patch to make -mieee the default on alpha-linux-gnu.
+    Causes the bootstrap to fail on alpha-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Jul 2005 00:14:12 +0200
+
+gcc-4.0 (4.0.1-1) unstable; urgency=high
+
+  * GCC 4.0.1 final release.  See /usr/share/doc/gcc-4.0/NEWS.{gcc,html}.
+  * Build fastjar on mips/mipsel, fix fastjar build without building java.
+  * Disable the comparision check on unstable/ia64. adaint.o differs,
+    currently cannot be reproduced with glibc-2.3.5 and binutils-2.16.1.
+  * libffi/hppa: Fix handling of 3 and 5-7 byte struct returns.
+  * amd64: Fix libgcc symlinks to point to /usr/lib32, instead of /lib32.
+  * On powerpc, don't build with -j >1, apparently doesn't succeeds
+    on the Debian buildd.
+  * Apply revised patch to make -mieee the default on alpha-linux,
+    and add -mieee-disable switch to turn the default off (Tyson Whitehead).
+  * Disable multiarch-includes; redo biarch-includes to include the paths
+    for the non-default biarch, when called with -m32/-m64.
+  * Move new java headers from libstdc++-dev to libgcj-dev, add replaces
+    line.
+  * Update classpath patch to work with cairo-0.5.1. Patch provided by
+    Michael Koch.
+  * Further classpath updates for gnu.xml and javax.swing.text.html.
+    Patch provided by Michael Koch.
+  * Require binutils (>= 2.16.1) as a build dependency and a dependency.
+  * On i386, require amd64-libs-dev (>= 1.2).
+  * Update debian/NEWS.{html,gcc}.
+
+  * Closing bug reports reported against older gcc versions (some of them
+    still present in Debian, but not anymore as the default compiler).
+    Usually, forwarded bug reports are linked to
+        http://gcc.gnu.org/PR<upstream bug number>
+    The upstream bug number usually can be found in the Debian reports.
+
+  * Closed reports reported against gcc-3.3 and fixed in gcc-3.4:
+    - General:
+      + PR rtl-optimization/2960: Duplicate loop conditions even with -Os
+        Closes: #94701.
+      + PR optimization/3995: i386 optimisation: joining tests.
+        Closes: #105309.
+      + PR rtl-optimization/11635: Unnecessary store onto stack, more
+        curefully expand union cast (closes: #202016).
+      + PR target/7618: vararg disallowed in virtual function. Closes: #205404.
+      + Large array problem on 64 bit platforms (closes: #209152).
+      + Mark more strings as translatable (closes: #227129).
+      + PR gcc/14711: ICE when compiling a huge source file Closes: #234711.
+      + Better code generation for if(!p) return NULL;return p;
+        Closes: #242318.
+      + PR rtl-optimization/16152: Perl ftbfs on {ia64,arm,m68k}-linux.
+        Closes: #255801.
+      + ICE (segfault) while compiling Linux 2.6.9 (closes: #277206).
+      + Link error building memtest (closes: #281445).
+    - Ada:
+      + PR ada/12450: Constraint error for valid input (closes: #210844).
+      + PR ada/13620: miscompilation of array initializer with
+        -O3 -fprofile-arcs. Closes: #226244.
+    - C:
+      + PR c/6897: Code produced with -fPIC reserves EBX, but compiles
+        bad __asm__ anyway (closes: #73065).
+      + PR c/9209: On i386, gcc-3.0 allows $ in indentifiers but not the asm.
+        Closes: #121282.
+      + PR c/11943: Accepts invalid declaration "int x[2, 3];" in C99 mode.
+        Closes: #177303.
+      + PR c/11942: restrict keyword broken in C99 mode. Closes: #187091.
+      + PR other/11370: -Wunreachable-code gives false complaints.
+        Closes: #196600.
+      + PR c/11369: Too relaxed checking with -Wstrict-prototypes.
+        Closes: #197504.
+      + PR c/11445: False positive warning with -Wunreachable-code.
+        Closes: #200140.
+      + PR c/11459: -stdc=c90 -pedantic warns about C90's non long-long
+         support when in C99 mode. Closes: #200392.
+      + PR c/456: Handling of constant expressions. Closes: #225935.
+      + ICE on invalid #define with -traditional (closes: #242916).
+      + No warning when initializing a variable with itself, new option
+        -Winit-self (closes: #293957).
+    - C++:
+      + C++ parse error (closes: #42946).
+      + PR libstdc++/9073: Replacement for __STL_ASSERTIONS (libstdc++v3
+        debug mode). Closes: #128993.
+      + Parse errors in nested constructor calls (closes: #138561).
+      + PR optimization/1823: -ftrapv aborts with pointer difference due to
+        division optimization. Closes: #169862.
+      + ICE on invalid code (closes: #176101).
+      + PR c++/10199: ICE handling method parametrized by template.
+        Closes: #185604.
+      + High memory usage building packages OpenOffice.org and MythTV.
+        Closes: #194345, #194513.
+      + Improved documentation of std::lower_bound (closes: #196380).
+      + ICE in regenerate_decl_from_template (closes: #197674).
+      + PR c++/11444: Function fails to propagate up class tree
+        (template-related).  Closes: #198042.
+      + ICE when using namespaced typedef of primitive type as struct.
+        Closes: #198261.
+      + Bug using streambuf / iostream to read from a named pipe.
+        Closes: #216105.
+      + PR c++/11437: ICE in lookup_name_real (closes: #200011).
+      + Add large file support (LFS) in libstdc++ (closes: #220000).
+      + PR c++/13621: ICE compiling a statement expression returning type
+        string (closes: #224413).
+      + g++ doesn't find inherited inner class after template instantiation.
+        Closes: #227518.
+      + PR libstdc++/13928: Add whatis info in man pages generated by doxygen.
+        Closes: #229642.
+      + Missing symbol _M_setstate in libstdc++ (closes: #232709).
+      + Unable to parse declaration of inline constructor explicit
+        specialization (closes: #234709).
+      + ICE (segfault) on invalid C++ code (closes: #246031).
+      + ICE in lookup_tempate_function (closes: #262441).
+      + Undefined symbols in libstdc++, when using specials char_traits.
+        Closes: #266110.
+      + PR libstdc++/16011: Outputting numbers with ostream in the locale fr_BE
+        causes infinite recursion (closes: #270795).
+      + ICE in tree_low_cst (closes: #276291).
+      + ICE in in expand_call (closes: #283503).
+      + typeof operator is misparsed in a template function (closes: #288555).
+      + ICE in tree_low_cs (closes: #291374).
+      + Improve uninformative error messages (closes: #292961, #293076).
+      + ICE on array initialization (closes: #294560).
+      + Failure to build xine-lib with -finline-functions (closes: #306854).
+    - Java:
+      + Fix error finding files in subdirectories (closes: #195480).
+      + Implement java.text.CollationElementIterator lacks getOffset().
+        Closes: #259789.
+    - Treelang:
+      + Pointer truncation on 64bit architectures (closes: #308367).
+    - Architecture specific:
+      - alpha
+        + PR debug/10695: ICE on alpha while building agistudio.
+          Closes: #192568.
+        + ICE when building fceu (closes: #228018, #252764).
+      - amd64
+        + Miscompilation of Objective-C code (closes: #250174).
+        + g++ hangs compiling k3d on amd64 (closes: #285364).
+      - arm
+        + PR target/19008: gcc -O3 -fPIC produces wrong code via auto inlining.
+          Closes: #285238.
+      - i386
+        + PR target/4106: i386 -fPIC asm ebx clobber no error.
+          Closes: #153472.
+        + PR target/10984: x86/sse2 ICEs on vector intrinsics. Closes: #166940.
+        + Wrong code generation on at least ix86 (closes: #275655).
+      - m68k
+        + PR target/9201: ICE compiling octave-2.1 (closes: #175478).
+        + ICE in verify_initial_elim_offsets (closes: #204407, #257012).
+        + g77 generates invalid assembly code (closes: #225621).
+        + ICE in verify_local_live_at_start (closes #245584).
+      - powerpc
+        + PR optimization/12828: -floop-optimize is unstable on PowerPC (float
+          to int conversion problem). Closes: #218219.
+        + PR target/13619: ICE building altivec code in ffmpeg.
+          Closes: #226148.
+        + PR target/20046: Miscompilation of bind 9.3.0. Closes: #292958.
+      - sparc
+        + ICE (segfault) while building atlas3 on sparc32 (closes: #249108).
+        + Wrong optimization on sparc32 when building linux kernel.
+          Closes: #254626.
+
+  * Closed reports reported against gcc-3.3 or gcc-3.4 and fixed in gcc-4.0:
+    - General:
+      + PR rtl-optimization/6901: Optimizer improvement (removing unused
+        local variables). Closes: #67206.
+      + PR middle-end/179: Failure to detect use of unitialized variable
+        with -O -Wall. Closes: #117765.
+      + ICE building glibc's nptl on amd64 (closes: #260710, #307993).
+      + PR middle-end/17827: ICE in make_decl_rtl. Closes: #270854.
+      + PR middle-end/21709: ICE on compile-time complex NaN. Closes: #305344.
+    - Ada:
+      + PR ada/10889: Convention Fortran matrices mishandled in generics.
+        Closes: #192135.
+      + PR ada/13897: Implement tasking on powerpc. Closes: #225346.
+    - C:
+      + PR c/13072: Bogus warning with VLA in switch. Closes: #218803.
+      + PR c/13519: typeof(nonconst+const) is const. Closes: #208981.
+      + PR c/12867: Incorrect warning message (void format, should be void*
+        format). Closes: #217360.
+      + PR c/16066: PR 16066] i386 loop strength reduction bug.
+        Closes: #254659.
+    - C++:
+      + PR c++/13518: -Wnon-virtual-dtor doesn't always work. Closes: #212260.
+      + PR translation/16025: ICE with unsupported locale(closes: #242158).
+      + PR c++/15125: -Wformat doesn't warn for different types in fprintf.
+        Closes: #243507.
+      + PR c++/15214: Warn only if the dtor is non-private or the class has
+        friends. (closes: #246639).
+      + PR libstdc++/17218: Unknown subjects in generated libstdc++ manpages.
+        Closes: #262934.
+      + PR libstdc++/17223: Missing .so references in generated libstdc++
+        manpages. Closes: #262956.
+      + libstdc++-doc: Improve man pages (closes: #280910).
+      + PR c++/19006: ICE in tree_low_cst. Closes: #285692.
+      + g++ does not check arguments to fprintf. Closes: #281847.
+    - Java:
+      + PR java/7304: gcj ICE (closes: #152501).
+      + PR libgcj/7305: Installation of headers not directly in /usr/include.
+        Closes: #195483.
+      + PR libgcj/11941: libgcj timezone handling (closes: #203212).
+      + PR java/14709: gcj fails to wait for its child processes on exec().
+        Closes: #238432.
+      + PR libgcj/21703: gcj hangs when rapidly calling String.intern().
+        Closes: #275547.
+      + SocketChannel.get(ByteBuffer) returns 0 at EOF. Closes: #281602.
+      + PR java/19711: gcj segfaults instead of reporting the ambiguous
+        expression. Closes: #286715.
+      + Static libgcj contains repeated archive members (closes: #298263).
+    - Architecture specific:
+      - alpha
+        + Unaligned accesses with ?-operator (closes: #301983).
+      - arm
+        + Compilation error of glibc-2.3.4 on arm (closes: #298508).
+      - m68k
+        + ICE in add_insn_before (closes: #248432).
+      - mips
+        + Fix o32 ABI breakage in gcc 3.3/3.4 (closes: #270620).
+      - powerpc
+        + ICE in extract_insn (closes: #311128).
+
+  * Closing bug reports as wontfix:
+    - g++ defines _GNU_SOURCE when using the libstdc++ header files.
+      Behaviour did change since 3.0. Closes: #126703, #164872.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Jul 2005 17:10:54 +0000
+
+gcc-4.0 (4.0.0ds2-12) unstable; urgency=high
+
+  * Update to CVS 20050701, taken from the gcc-4_0-branch.
+  * Apply proposed patch for MMAP configure fix; aka PR 19877. Backport
+    from mainline.
+  * Disable Fortran on m68k. Currently FTBFS.
+  * Split multiarch-include/lib patches. Update multiarch-include patch.
+  * Fix FTBFS of the hppa64-linux cross compiler. Don't add the
+    multiarch include dirs when cross compiling.
+  * Configure --with-java-home, as used by java-gcj-compat.
+    Closes: #315646.
+  * Make libgcj-dbg packages priority extra.
+  * Set the path of classmap.db to /var/lib/gcj-@gcc_version@.
+  * On m68k, do not create the default classmap.db in the gcj postinst.
+    See #312830.
+  * On amd64, install the 32bit libraries into /emul/ia32-linux/usr/lib.
+    Restore the /usr/lib32 symlink.
+  * On amd64, don't reference lib64, but instead lib (lib64 is a symlink
+    to lib). Closes: #293050.
+  * Remove references to build directories from the .la files.
+  * Make cpp-X.Y conflict with earlier versions of gcc-X.Y, g++-X.Y, gobjc-X.Y,
+    gcj-X.Y, gfortran-X.Y, gnat-X.Y, treelang-X.Y, if a path component in
+    the gcc library path changes (i.e. version or target alias).
+  * Disable Ada for sh3 sh3eb sh4 sh4eb.
+  * For gcj-4.0, add a conflict to libgcj4-dev and libgcj5-dev.
+    Closes: #316499.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  2 Jul 2005 11:04:35 +0200
+
+gcc-4.0 (4.0.0ds1-11) unstable; urgency=low
+
+  * debian/rules.defs: Disable Ada for alpha.
+  * debian/rules.conf: Fix typo in type-handling replacement code.
+  * Don't ship an empty libgcj6-dbg package.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 23 Jun 2005 09:03:21 +0200
+
+gcc-4.0 (4.0.0ds1-10) unstable; urgency=medium
+
+  * debian/patches/libstdc++-api-compat.dpatch: Apply proposed patch
+    to fix libstdc++ 3.4.5/4.0 compatibility.
+  * type-handling output became insane. Don't use it anymore.
+  * Drop the reference to the stl-manual package (closes: #314983).
+  * Disable java on GNU/kFreeBSD targets, requested by Robert Millan.
+    Closes: #315140.
+  * Terminate the acats-killer process, even if the build is aborted
+    by the user (closes: #314405).
+  * debian/rules.defs: Define DEB_TARGET_ARCH_{OS,CPU}.
+  * Start converting the use of DEB_*_GNU_* to DEB_*_ARCH_* in the build
+    files.
+  * Do not configure with --enable-gtk-cairo. Needs newer gtk. Drop
+    build dependency on libcairo-dev.
+  * Fix setting of the system header directory for the hurd (Michael Banck).
+    Closes: #315386.
+  * Fix FTBFS on hurd-i386: MAXPATHLEN issue (Michael Banck). Closes: #315384.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Jun 2005 19:45:50 +0200
+
+gcc-4.0 (4.0.0ds1-9ubuntu2) breezy; urgency=low
+
+  * Fix version number in libgcj shlibs file.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sun, 19 Jun 2005 10:34:02 +0200
+
+gcc-4.0 (4.0.0ds1-9ubuntu1) breezy; urgency=low
+
+  * Update to 4.0.1, release candidate 2.
+  * libstdc++ shlibs file: Require 4.0.0ds1-9ubuntu1 as minimum version.
+  * Rename libawt to libgcjawt to avoid conflicts with other
+    libawt implementations (backport from HEAD).
+  * Update classpath awt, swing and xml parser for HTML support in swing.
+    Taken from classpath CVS HEAD 2005-06-18. Patch provided by Michael Koch.
+  * Remove the libgcj-buffer-strategy path, part of the classpath update.
+  * libgcj shlibs file: Require 4.0.0ds1-9ubuntu1 as minimum version.
+  * Require cairo-0.5 as build dependency.
+  * gij-4.0: Provide java1-runtime.
+  * gij-4.0: Provide an rmiregistry alternative (using grmiregistry-4.0).
+  * gcj-4.0: Provide an rmic alternative (using grmic-4.0).
+  * libgcj6-dev conflicts with libgcj5-dev, libgcj4-dev, not libgcj6.
+    Closes: #312741.
+  * libmudflap-entry-point.dpatch: Correct name of entry point on mips/mipsel.
+  * Apply proposed patch for PR 18421 and PR 18719 (m68k only).
+  * Apply proposed path for PR 21562.
+  * Add build dependency on dpkg (>= 1.13.7).
+  * On linux systems, configure for <cpu>-linux-gnu.
+  * Configure the hppa64 cross compiler to target hppa64-linux-gnu.
+  * (Build-)depend on binutils-2.16.1.
+  * libstdc{32,64}++6-4.0-dbg: Depend on libstdc++6-4.0-dev.
+  * gnat-4.0: only depend on libgnat, when a shared libgnat is built.
+  * gfortran-4.0: Depend on libgmp3c2 | libgmp3.
+  * On hppa, explicitely use gcc-3.3 as a build dependency in the case
+    that Ada is disabled.
+  * libmudflap: Always build the library for the non-default biarch
+    architecture, or else the test results show link failures.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat, 18 Jun 2005 00:42:55 +0000
+
+gcc-4.0 (4.0.0-9) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 25 May 2005 19:02:20 +0200
+
+gcc-4.0 (4.0.0-8ubuntu3) breezy; urgency=low
+
+  * debian/control: Regenerate.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat,  4 Jun 2005 10:56:27 +0200
+
+gcc-4.0 (4.0.0-8ubuntu2) breezy; urgency=low
+
+  * Fix powerpc-config-ml patch.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  3 Jun 2005 15:47:52 +0200
+
+gcc-4.0 (4.0.0-8ubuntu1) breezy; urgency=low
+
+  * powerpc biarch support:
+    - Enable powerpc biarch support, build lib64gcc1 on powerpc.
+    - Add patch to disable libstdc++'s configure checking, if it can't run
+      64bit binaries on 32bit kernels (Sven Luther).
+    - Apply the same patch to the other runtime librararies as well.
+    - Run the testsuite with -m64, if we can execute 64bit binaries.
+    - Add libc6-dev-ppc64 as build dependency for powerpc.
+  * 32bit gcj libs for amd64.
+  * debian/logwatch.sh: Don't remove logwatch pid file on exit (suggested
+    by Ryan Murray).
+  * Update to CVS 20050603, taken from the gcc-4_0-branch.
+  * g++-4.0 provides c++abi2-dev.
+  * Loosen dependencies on packages of architecture `all' to not break
+    binary only uploads.
+  * Build libgfortran for biarch as well, else the testsuite will fail.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  3 Jun 2005 13:38:19 +0200
+
+gcc-4.0 (4.0.0-8) experimental; urgency=low
+
+  * Synchronize with Ubuntu.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 May 2005 01:56:28 +0000
+
+gcc-4.0 (4.0.0-7ubuntu7) breezy; urgency=low
+
+  * Fix build failures for builds with disabled testsuite.
+  * Adjust debian/rules conditionals to work with all dpkg versions.
+  * Build separate lib32stdc6-4.0-dbg/lib64stdc6-4.0-dbg packages.
+  * Add the debugging symbols of the optimzed libstdc++ build in the
+    lib*stdc++6-dbg packages as well.
+  * Build a libgcj6-dbg package.
+  * Update to CVS 20050522, taken from the gcc-4_0-branch.
+  * Add Ada support for the ppc64 architecture (Andreas Jochens):
+    * debian/patches/ppc64-ada.dpatch
+      - Add gcc/ada/system-linux-ppc64.ads, which has been copied from
+        gcc/ada/system-linux-ppc.ads and changed to use 'Word_Size' 64
+        instead of 32.
+      - gcc/ada/Makefile.in: Use gcc/ada/system-linux-ppc64.ads on powerpc64.
+    * debian/rules.patch
+      - Use ppc64-ada patch on ppc64.
+    * debian/rules.d/binary-ada.mk
+      Place the symlinks libgnat.so, libgnat-4.0.so, libgnarl.so,
+      libgnarl-4.0.so in '/usr/lib' instead of '<gcc_lib_dir>/adalib'.
+    Closes: #308948.
+  * Add libc6-dev-i386 as an alternative build dependency for amd64.
+    Closes: #305690.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sun, 22 May 2005 22:14:20 +0200
+
+gcc-4.0 (4.0.0-7ubuntu6) breezy; urgency=low
+
+  * Don't trust dpkg-architecture (1.13.4), it "hurds" ...
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 18 May 2005 11:36:38 +0200
+
+gcc-4.0 (4.0.0-7ubuntu5) breezy; urgency=low
+
+  * libgcj6-dev: Don't provide libgcj-dev.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 18 May 2005 00:30:32 +0000
+
+gcc-4.0 (4.0.0-7ubuntu4) breezy; urgency=low
+
+  * Update to CVS 20050517, taken from the gcc-4_0-branch.
+  * Apply proposed patch for PR21293.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 17 May 2005 23:05:40 +0000
+
+gcc-4.0 (4.0.0-7ubuntu2) breezy; urgency=low
+
+  * Update to CVS 20050515, taken from the gcc-4_0-branch.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sun, 15 May 2005 23:48:00 +0200
+
+gcc-4.0 (4.0.0-7ubuntu1) breezy; urgency=low
+
+  * Synchronize with Debian.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon,  9 May 2005 19:35:29 +0200
+
+gcc-4.0 (4.0.0-7) experimental; urgency=low
+
+  * Update to CVS 20050509, taken from the gcc-4_0-branch.
+  * Remove the note from the fastjar package description, stating, that
+    fastjar is incomplete compared to the "standard" jar utility.
+  * Fix typo in build depends. dpkg-checkbuilddeps doesn't like a comma
+    inside [].
+  * Tighten shlibs dependencies to require the current version.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  9 May 2005 19:02:03 +0200
+
+gcc-4.0 (4.0.0-6) experimental; urgency=low
+
+  * Update to CVS 20050508, taken from the gcc-4_0-branch.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  8 May 2005 14:08:28 +0200
+
+gcc-4.0 (4.0.0-5ubuntu1) breezy; urgency=low
+
+  * Temporarily disable the i386 biarch build. Remove the amd64-libs-dev
+    build dependency, add (build-)conflict (<= 1.1ubuntu1).
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat,  7 May 2005 16:56:21 +0200
+
+gcc-4.0 (4.0.0-5) breezy; urgency=low
+
+  * gnat-3.3 and gnat-4.0 are alternative build dependencies (closes: #308002).
+  * Update to CVS 20050507, taken from the gcc-4_0-branch.
+  * gcj-4.0: Install gjnih.
+  * Add libgcj buffer strategy framework (Thomas Fitzsimmons), needed for OOo2.
+    Backport from 4.1.
+  * Fix all lintian errors and most of the warnings.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat,  7 May 2005 12:26:15 +0200
+
+gcc-4.0 (4.0.0-4) breezy; urgency=low
+
+  * Still prefer gnat-3.3 over gnat-4.0 as a build dependency.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  6 May 2005 22:30:43 +0200
+
+gcc-4.0 (4.0.0-3) breezy; urgency=low
+
+  * Update to CVS 20050506, taken from the gcc-4_0-branch.
+  * Update priority of java alternatives to 40.
+  * Move gcj-dbtool to gij package, move the default classmap.db to
+    /var/lib/gcj-4.0/classmap.db. Create it in the postinst.
+  * Fix gcc-4.0-hppa64 postinst (closes: #307762).
+  * Fix gcc-4.0-hppa64, gij-4.0 and gcj-4.0 postinst, to not ignore errors
+    from update-alternatives.
+  * Fix gcc-4.0-hppa64, fastjar, gij-4.0 and gcj-4.0 prerm,
+    to not ignore errors from update-alternatives.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  6 May 2005 17:50:58 +0200
+
+gcc-4.0 (4.0.0-2) experimental; urgency=low
+
+  * GCC 4.0.0 release.
+  * Update to CVS 20050503, taken from the gcc-4_0-branch.
+  * Add gnat-4.0 as an alternative build dependency (closes: #305690).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  3 May 2005 15:41:26 +0200
+
+gcc-4.0 (4.0.0-1) experimental; urgency=low
+
+  * GCC 4.0.0 release.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Apr 2005 11:28:42 +0200
+
+gcc-4.0 (4.0ds11-0pre11) breezy; urgency=low
+
+  * CVS 20050413, taken from the gcc-4_0-branch.
+  * Add proposed patches for PR20126, PR20490, PR20929.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 13 Apr 2005 09:43:00 +0200
+
+gcc-4.0 (4.0ds10-0pre10) experimental; urgency=low
+
+  * gcc-4.0.0-20050410 release candidate 1, built from the prerelease tarball.
+    - C++ fix for "optimizer breaks function inlining". Closes: #302989.
+  * Append the GCC version to the fastjar/grepjar version string.
+  * Use short file names in the libstdc++ docs (closes: #301140).
+  * Fix libstdc++-dbg dependencies (closes: #303866).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 11 Apr 2005 13:16:01 +0200
+
+gcc-4.0 (4.0ds9-0pre9) experimental; urgency=low
+
+  * CVS 20050326, taken from the gcc-4_0-branch.
+  * Reenable Ada on ia64.
+  * Build libgnat on hppa, sparc, s390 again.
+  * ppc64 support (Andreas Jochens):
+    * debian/control.m4
+      - Add libc6-dev-powerpc [ppc64] to the Build-Depends.
+      - Change the Description for lib32gcc1: s/ia32/32 bit Version/
+    * debian/rules.defs
+      - Define 'biarch_ia32' for ppc64 to use the same 32 bit multilib
+        facilities as amd64.
+    * debian/rules.d/binary-gcc.mk
+      - Correct an error in the 'files_gcc' definition for biarch_ia32
+        (replace '64' by '32').
+    * debian/rules2
+      - Do not use '--disable-multilib' on powerpc64-linux.
+        Use '--disable-nof --disable-softfloat' instead.
+    * debian/rules.d/binary-libstdcxx.mk
+      - Put the 32 bit libstdc++ files in '/usr/lib32'.
+    * debian/rules.patch
+      - Apply 'ppc64-biarch' patch on ppc64.
+    * debian/patches/ppc64-biarch.dpatch
+      - MULTILIB_OSDIRNAMES: Use /lib for native 64 bit libraries and
+        /lib32 for 32 bit libraries.
+      - Add multilib handling to src/config-ml.in (taken from
+        amd64-biarch.dpatch).
+  * Rename biarch_ia32 to biarch32, as suggsted by Andreas.
+  * Use /bin/dash on hppa.
+  * Reenable the build of the hppa64 compiler.
+  * Enable parallel builds by defaults (set environment variale USE_NJOBS=no
+    or USE_NJOBS=<number> to modify the default, which is to use the
+    number of available processors).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 Mar 2005 19:07:30 +0100
+
+gcc-4.0 (4.0ds8-0pre8) experimental; urgency=low
+
+  * CVS 20050322, taken from the gcc-4_0-branch.
+    - Add proposed fix for PR19406.
+  * Configure --with-gtk-cairo only if version 0.3.0 is found.
+  * Split out gcc-4.0-locales package. Better chance of getting
+    bug reports in english language.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 22 Mar 2005 14:20:24 +0100
+
+gcc-4.0 (4.0ds7-0pre7) experimental; urgency=low
+
+  * CVS 20050304, taken from the gcc-4_0-branch.
+  * Build the treelang compiler.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  4 Mar 2005 21:29:56 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu6) hoary; urgency=low
+
+  * Fix lib32gcc1 symlink on amd64. Ubuntu #7099.
+
+ -- Matthias Klose <doko@ubuntu.com>  Thu,  3 Mar 2005 00:17:26 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu5) hoary; urgency=low
+
+  * Add patch from PR20160, avoid creating archives with components
+    that have duplicate basenames.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed,  2 Mar 2005 14:22:04 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu4) hoary; urgency=low
+
+  * CVS 20050301, taken from the gcc-4_0-branch.
+    Test builds on i386, amd64, powerpc, ia64, check libgcc_s.so.1.
+  * Add fastjar-4.0 binary and manpage. Some java packages append it
+    for all java related tools.
+  * Add libgcj6-src package for source code availability in IDE's.
+  * On hppa, disable the build of the hppa64 cross compiler, disable
+    java, disable running the testsuite (request by Lamont).
+  * On amd64, lib32gcc1 replaces ia32-libs.openoffice.org (<< 1ubuntu3).
+  * Build-Depend on libcairo1-dev, configure with --enable-gtk-cairo.
+    Work around libtool problems install libjawt.
+    Install jawt header files in libgcj6-dev.
+  * Add workaround for PR debug/19769.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue,  1 Mar 2005 11:26:19 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu3) hoary; urgency=low
+
+  * Drop libgmp3-dev (<< 4.1.4-3) as an alterntative build dependency.
+
+ -- Matthias Klose <doko@ubuntu.com>  Thu, 10 Feb 2005 15:16:27 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu2) hoary; urgency=low
+
+  * Disable Ada for powerpc.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed,  9 Feb 2005 16:47:07 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu1) hoary; urgency=low
+
+  * Avoid build dependency on type-handling.
+  * Install 32bit libs on amd64 in /lib32 and /usr/lib32.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed,  9 Feb 2005 08:27:21 +0100
+
+gcc-4.0 (4.0ds5-0pre6) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050208.
+  * Build-depend on graphviz (moved to main), remove the pregenerated
+    libstdc++ docs from the diff.
+  * Fix PR19162, libobjc build failure on arm-linux (closes: #291497).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  8 Feb 2005 11:47:31 +0000
+
+gcc-4.0 (4.0ds4-0pre5) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050125.
+  * Call the 4.0 gcx versions in the java wrappers (closes: #291075).
+  * Correctly install libgij (closes: #291077).
+  * libgcj6-dev: Add conflicts to other libgcj-dev packages (closes: #290950).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 24 Jan 2005 23:59:54 +0100
+
+gcc-4.0 (4.0ds3-0pre4) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050115.
+  * Update cross build patches (Nikita V. Youshchenko).
+  * Enable Ada on i386, amd64, mips, mipsel, powerpc, sparc, s390.
+    Doesn't yet bootstrap on alpha, hppa, ia64.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 15 Jan 2005 18:44:03 +0100
+
+gcc-4.0 (4.0ds2-0pre3) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041224.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Dec 2004 00:31:44 +0100
+
+gcc-4.0 (4.0ds1-0pre2) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041205.
+  * Lot's of merges and updates from the gcc-3.4 packages.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 04 Dec 2004 12:14:51 +0100
+
+gcc-4.0 (4.0ds0-0pre1) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041114.
+    - Addresses many issues with the libstdc++ man pages (closes: #278549).
+  * Disable Ada on hppa, ia64, mips, mipsel, powerpc, s390 and sparc, at least
+    these are known to be broken at the time of the snapshot.
+  * Minor kbsd.gnu build fixes (Robert Millan). Closes: #273004.
+  * For amd64, add missing libstdc++ files to 'libstdc++6-dev' package.
+    (Andreas Jochens). Fixes: #274362.
+  * Update libffi-mips patch (closes: #274096).
+  * Updated i386-biarch patch. Don't build 64bit libstdc++, ICE.
+  * Update sparc biarch patch.
+  * Fix symlinks for gfortran manpage (closes: #278548).
+  * Update cross build patches (Nikita V. Youshchenko).
+  * Update Ada patches (Ludovic Brenta).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 13 Nov 2004 10:38:25 +0100
+
+gcc-4.0 (4.0-0pre0) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20040912.
+
+  * Matthias Klose <doko@debian.org>
+
+    - Integrate accumulated packaging patches from gcc-3.4.
+    - Rename libstdc++6-* packages to libstdc++6-4-* (closes: #261693).
+    - libffi4-dev: conflict with libffi3-dev (closes: #265939).
+
+  * Robert Millan <rmh@debian.org>
+
+    * control.m4: 
+      - s/locale_no_archs !hurd-i386/locale_no_archs/g 
+        (This is now handled in rules.defs. [1]) 
+      - s/procps [check_no_archs]/procps [linux_gnu_archs]/g [2] 
+      - Add type-handling to build-deps. [3] 
+    * rules.conf: 
+      - Don't require (>= $(libc_ver)) for libc0.1-dev. [4] 
+      - Generate *_no_archs variables with type-handling and use them for 
+        for m4's -D parameters. [3] 
+    * rules.defs: 
+      - use filter instead of findstring [1]. 
+      - s/netbsd-elf-gnu/netbsdelf-gnu/g [5]. 
+      - enable java for kfreebsd-gnu [6] 
+      - enable ffi for kfreebsd-gnu and knetbsd-gnu [6] 
+      - enable libgc for kfreebsd-gnu [6] 
+      - enable checks for kfreebsd-gnu and knetbsd-gnu [7] 
+      - enable locales for kfreebsd-gnu and gnu [1] [8]. 
+    * Closes: #264025.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Sep 2004 12:52:56 +0200
+
+gcc-3.5 (3.5ds1-0pre1) experimental; urgency=low
+
+  * gcc-3.5 snapshot, taken from the HEAD branch CVS 20040724.
+  * Install locale data with versioned package name (closes: #260497).
+  * Fix libgnat symlinks.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 Jul 2004 21:26:23 +0200
+
+gcc-3.5 (3.5-0pre0) experimental; urgency=low
+
+  * gcc-3.5 snapshot, taken from the HEAD branch CVS 20040718.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Jul 2004 12:26:00 +0200
+
+gcc-3.4 (3.4.1-1) experimental; urgency=low
+
+  * gcc-3.4.1 final release.
+    - configured wth --enable-libstdcxx-allocator=mt.
+  * Fixes for generating cross compiler packages (Jeff Bailey).
+
+ -- Matthias Klose <doko@debian.org>  Fri,  2 Jul 2004 22:49:05 +0200
+
+gcc-3.4 (3.4.0-4) experimental; urgency=low
+
+  * gcc-3.4.1 release candidate 1.
+  * Add logic to build biarch compiler on powerpc (disabled, needs lib64c).
+  * Don't build the libg2c0 package on mipsel-linux (no clear answer on
+    debian-mips, if the libg2c0's built by gcc-3.3 and gcc-3.4 are compatible
+    (post-sarge issue).
+  * Don't use gcc-2.95 as bootstrap compiler on m68k anymore.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 Jun 2004 22:40:20 +0200
+
+gcc-3.4 (3.4.0-3) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040613.
+  * On sparc, set the the build target to sparc64-linux, build with
+    switch defaulting to code generation for v7. To generate code for
+    sparc64, use the -m64 switch.
+  * Add missing doc-base files to -doc packages.
+  * Add portability patches and kbsd-gnu patch (Robert Millan).
+    Closes: #251293, #251294.
+  * Apply fixes for cross build (Nikita V. Youshchenko).
+  * Do not include the precompiled libstdc++ header files into the -dev
+    package (still experimental). Closes: #251707.
+  * Reflect renaming of Ada user's guide.
+  * Move AWT peer libraries for libgcj into it's own package (fixes: #247791).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 Jun 2004 00:03:18 +0200
+
+gcc-3.4 (3.4.0-2) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040516.
+  * Do not provide the /usr/hppa64-linux/include in the gcc-hppa64 package,
+    migrated to libc6-dev. Adjust dependencies.
+  * Integrate gpc test results into the GCC test summary.
+  * gnatchop calls gcc-3.4 (closes: #245438).
+  * debian/locale-gen.sh: Update for recent libstdc+++ testsuite.
+  * debian/copyright: Add libstdc++-v3's exception clause.
+  * Add libffi update for mips (Thiemo Seufer).
+  * Reference Debian specific bug reporting instructions.
+  * Update README.Bugs.
+  * Fix FTBFS for libstdc++-doc.
+  * Update libjava patch for hppa (Randolph Chung).
+  * Fix installation of ffitarget.h header file.
+  * On amd64-linux, configure --without-multilib, disable Ada.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 May 2004 07:53:39 +0200
+
+gcc-3.4 (3.4.0-1) experimental; urgency=low
+
+  * gcc-3.4.0 final release.
+
+  * Why experimental?
+    - Do not interfer with packages currently built from gcc-3.3 sources,
+      i.e. libgcc1, libobjc1, libffi2, libffi2-dev, libg2c0.
+    - Biarch sparc compiler doesn't built yet.
+    - Use of configure flags affecting binary ABI's not yet determined.
+    - Several ABI bugs have been fixed. Unfortunately, these changes will break
+      binary compatibility with earlier releases on several architectures:
+      alpha, mips, sparc, 
+    - hppa and m68k changed sjlj based exception handling to dwarf2 based
+      exception handling.
+
+      See NEWS.html or http://gcc.gnu.org/gcc-3.4/changes.html for more
+      specific information.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 20 Apr 2004 20:54:56 +0200
+
+gcc-3.4 (3.4ds3-0pre4) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040403.
+  * Add gpc tarball, gpc patches for 3.4 (Waldek Hebisch).
+  * Reenable sparc-biarch patches (closes: #239856).
+  * Build the shared libgnat library, needed to fix FTBFS for some
+    Ada library packages (Ludovic Brenta).
+    Currently enabled for hppa, i386, ia64.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  3 Apr 2004 08:47:55 +0200
+
+gcc-3.4 (3.4ds1-0pre2) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040320.
+  * For libstdc++6-doc, add a conflict to libstdc++5-3.3-doc (closes: #236560).
+  * For libstdc++6-dbg, add a conflict to libstdc++5-3.3-dbg (closes: #236798).
+  * Reenable s390-biarch patches.
+  * Update the cross compiler build files (Nikita V. Youshchenko).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 20 Mar 2004 09:15:10 +0100
+
+gcc-3.4 (3.4ds0-0pre1) experimental; urgency=low
+
+  * Start gcc-3.4 packaging, get rid of the epoch for most of the
+    packages.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 22 Feb 2004 16:00:03 +0100
+
+gcc-3.3 (1:3.3.3ds6-6) unstable; urgency=medium
+
+  * Update to gcc-3_3-branch CVS 20040401.
+    - Fixed ICE in emit_move_insn_1 on legal code (closed: #223215).
+    - Fix PR 14755, miscompilation of loops with bitfield counter.
+      Closes: #241255.
+    - Fix PR 16040, crash in function initializing const data with
+      reinterpret_cast-ed pointer-to-member function crashes (closes: #238621).
+    - Remove patches integrated upstream.
+  * Reenable build of gpidump on powerpc and s390.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  1 Apr 2004 23:51:54 +0200
+
+gcc-3.3 (1:3.3.3ds6-5) unstable; urgency=medium
+
+  * Update to gcc-3_3-branch CVS 20040321.
+    - Fix PR target/13889 (ICE on valid code on m68k).
+  * Fix FTFBS on s390. Do not build gpc's gpidump on s390.
+  * Reenable gpc on arm.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 22 Mar 2004 07:37:26 +0100
+
+gcc-3.3 (1:3.3.3ds6-4) unstable; urgency=low
+
+  * Update to gcc-3_3-branch CVS 20040320.
+    - Revert patch for PR14640 (with this, at least mozilla-firefox was
+      miscompiled on x86 (closes: #238621).
+  * Update the gpc tarball (there were two releases with the same name ...).
+  * Reenable gpc on alpha and ia64.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 20 Mar 2004 07:39:24 +0100
+
+gcc-3.3 (1:3.3.3ds5-3) unstable; urgency=low
+
+  * Update to gcc-3_3-branch CVS 20040314.
+    - Fixes miscompilation with -O -funroll-loops on powerpc (closes: #229567).
+    - Fix ICE in dwarf-2 on code using altivec (closes: #203835).
+  * Update hurd-changes patch.
+  * Add libgcj4-dev as a recommendation for gcj (closes: #236547).
+  * debian/copyright: Added exemption to static linking of libgcc.
+
+  * Phil Blundell:
+    - debian/patches/arm-ldm.dpatch, debian/patches/arm-gotoff.dpatch: Update.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 Mar 2004 09:56:06 +0100
+
+gcc-3.3 (1:3.3.3ds5-2) unstable; urgency=low
+
+  * Update to gcc-3_3-branch CVS 20040306.
+    - Fixes bootstrap comparision error on ia64.
+    - Allows ghc build with gcc-3.3.
+    - On amd64, don't imply 3DNow! for -m64 by default.
+    - Some arm specific changes
+    - Fix C++/13944: exception in constructor of a class to be thrown is not
+      caught. Closes: #228099.
+  * Enable the build of gcc-3.3-hppa64 on hppa.
+    Add symlinks for as and ld to point to hppa64-linux-{as,ld}.
+  * gcj-3.3 depends on g++-3.3, recommends gij-3.3. gij-3.3 suggests gcj-3.3.
+  * Fix libgc2c-pic compatibility links (closes: #234333).
+    The link will be removed for gcc-3.4.
+  * g77-3.3: Conflict with other g77-x.y packages.
+  * Tighten shlibs dependencies to latest released versions.
+
+  * Phil Blundell:
+    - debian/patches/arm-233633.dpatch: New  Fixes problems with half-word
+      loads on ARMv3 architecture.  (Closes: #233633)
+    - debian/patches/arm-ldm.dpatch: New.  Avoids inefficient epilogue for
+      leaf functions in PIC code on ARM.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Mar 2004 10:57:14 +0100
+
+gcc-3.3 (1:3.3.3ds5-1) unstable; urgency=medium
+
+  * gcc-3.3.3 final release.
+    See /usr/share/doc/gcc-3.3/NEWS.{gcc,html}.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 16 Feb 2004 08:59:52 +0100
+
+gcc-3.3 (1:3.3.3ds4-0pre4) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20040214 (2nd gcc-3.3.3 prerelease).
+  * Fix title of libstdc++'s html main index (closes: #196381).
+  * Move libg2c libraray files out of the gcc specific libdir to /usr/lib.
+    For g77-3.3 add conflicts to other g77 packages. Closes: #224848.
+  * Update the stack protector patch to 3.3-7, but don't apply it by default.
+    Closes: #230338.
+  * On arm, use arm6 as the cpu default (backport from mainline, PR12527).
+  * Add libffi and libjava support for hppa (Randolph Chung). Closes: #232615.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 14 Feb 2004 09:26:15 +0100
+
+gcc-3.3 (1:3.3.3ds3-0pre3) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20040125.
+    - Fixed PR11350, undefined labels with -Os -fPIC (closes: #195911).
+    - Fixed PR11793, ICE in extract_insn, at recog.c (closes: #203835).
+    - Fixed PR13544, removed backport for PR12862.
+    - Integrated backport for PR12441.
+  * Fixed since 3.3: java: not implemented interface methods of abstract
+    classes not found (closes: #225438).
+  * Disable pascal on arm architecture (currently broken).
+  * Update the build files to build a cross compiler (Nikita V. Youshchenko).
+    See debian/README.cross in the source package.
+  * Apply revised patch to make -mieee the default on alpha-linux,
+    and add -mieee-disable switch to turn the default off (closes: #212912).
+    (Tyson Whitehead)
+
+ -- Matthias Klose <doko@debian.org>  Sun, 25 Jan 2004 17:41:04 +0100
+
+gcc-3.3 (1:3.3.3ds2-0pre2) unstable; urgency=medium
+
+  * Update to gcc-3.3.3 CVS 20040110.
+    - Fixes compilation not terminating at -O1 on hppa (closes: #207516).
+  * Add backport to fix PR12441 (closes: #224576).
+  * Revert backport to 3.3 branch to fix PR12862, which introduced another
+    regression (PR13544). Closes: #225663.
+  * Tighten dependency of gnat-3.3 on gcc-3.3 (closes: #226273).
+  * Disable treelang build for cross compiler build.
+  * Disable pascal on alpha and ia64 architectures (currently broken).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Jan 2004 12:33:59 +0100
+
+gcc-3.3 (1:3.3.3ds1-0pre1) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20031229.
+    - Fixes bootstrap error on ia64-linux.
+    - Fix -pthread on mips{,el}-linux (closes: #224875).
+    - Fix -Wformat for C++ (closes: #217075).
+  * Backport from mainline: Preserve inline-ness when redeclaring
+    a function template (closes: #195264).
+  * Add missing intrinsics headers on ix86 (closes: #224593).
+  * Fix location of libg2c libdir in libg2c.la file (closes: #224848).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 29 Dec 2003 10:36:29 +0100
+
+gcc-3.3 (1:3.3.3ds0-0pre0.1) unstable; urgency=high
+
+   * NMU
+   * Fixed mips(el) spec file for -pthread: (Closes: #224875)
+   * [debian/patches/mips-pthread.dpatch] New.
+   * [debian/rules.patch] Added it to debian_patches.
+
+ -- J.H.M. Dassen (Ray) <jdassen@debian.org>  Sat, 27 Dec 2003 15:51:47 +0100
+
+gcc-3.3 (1:3.3.3ds0-0pre0) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20031206.
+    - Fixes ICE in verify_local_live_at_start (hppa). Closes: #201550.
+    - Fixes miscompilation of linux-2.6/sound/core/oss/rate.c.
+      Closes: #219949.
+  * Add missing unwind.h to gcc package (closes: #220846).
+  * Regenerate control file to fix build dependencies for m68k.
+  * More gpc only patches to fix test failures on m68k.
+  * Reenable gpc for the Hurd (closes: #189851).
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Dec 2003 10:29:07 +0100
+
+gcc-3.3 (1:3.3.2ds5-4) unstable; urgency=low
+
+  * Update libffi-dev package description (closes: #219508).
+  * For gij and libgcj fix dependency on the libstdc++ package, if
+    the latter isn't installed during the build.
+  * Apply patch to emit .note.GNU-stack section on linux arches
+    which by default need executable stack.
+  * Prefer gnat-3.3 over gnat-3.2 as a build dependency.
+  * Update the pascal tarball (different version released with the
+    same name).
+  * Add pascal patches to address various gpc testsuite failures.
+    On alpha and ia64, build gpc from the 20030830 version. Reenable
+    the build on m68k.
+    Remove the 20030507 gpc version from the tarball.
+  * Apply patch to build the shared ada libs and link the ada tools
+    against the shared libs. Not enabled by default, because gnat
+    and gnatlib are rebuilt during install. (Ludovic Brenta)
+
+ -- Matthias Klose <doko@debian.org>  Sun,  9 Nov 2003 22:34:33 +0100
+
+gcc-3.3 (1:3.3.2ds4-3) unstable; urgency=low
+
+  * Fix rules to omit inclusion of gnatpsta in mips(el) gnat package.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  2 Nov 2003 14:29:59 +0100
+
+gcc-3.3 (1:3.3.2ds4-2) unstable; urgency=medium
+
+  * s390-ifcvt patch added. Fixes gcl miscompilation (closes: #217240).
+    (Gerhard Tonn)
+  * Fix an infinite loop in g++ compiling lufs, regression from 3.3.1.
+  * Fix a wrong code generation bug on alpha.
+    (Falk Hueffner)
+  * Update NEWS files.
+  * Add Falk Hueffner to the Debian GCC maintainers.
+  * Enable ada on mips and mipsel, but don't build the gnatpsta tool.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 29 Oct 2003 00:12:37 +0100
+
+gcc-3.3 (1:3.3.2ds4-1) unstable; urgency=medium
+
+  * Update to gcc-3.3.2.
+  * Update NEWS files.
+  * Miscompilation in the pari package at -O3 fixed (closes: #198172).
+  * On alpha-linux, revert -mieee as the default (Falk Hueffner).
+    Reopens: #212912.
+  * Add ia64-unwind patch (Jeff Bailey).
+  * Closed reports reported against gcc-2.96 (ia64), fixed at least in gcc-3.3:
+    - ICE in verify_local_live_at_start, at flow.c:2733 (closes: #135404).
+    - Compilation failure of stlport (closes: #135224).
+    - Infinite loop compiling cssc's pfile.cc with -O2 (closes: #115390).
+    - Added missing some string::compare() members (closes: #141199).
+    - <cmath> header declares std::pow (closes: #161853).
+    - <vector> does have at() method (closes: #59776).
+    - Fixed error in stl_deque.h (closes: #69530).
+    - Fixed problem with bastring (closes: #75759, #96539).
+    - bad_alloc and std:: namespace problem (closes: #75120).
+    - Excessive warnings from headers with -Weffc++ (closes: #76827).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 17 Oct 2003 08:07:01 +0200
+
+gcc-3.3 (1:3.3.2ds3-0pre5) unstable; urgency=low
+
+  * Update to gcc-3.3.2 CVS 20031005.
+    - Fixes cpp inserting a spurious newline (closes: #210478, #210482).
+    - Fixes generation of unrecognizable insn compiling kernel source
+      on alpha (closes: #202762).
+    - Fixes ICE in add_abstract_origin_attribute (closes: #212406).
+    - Fixes forward declaration in libstdc++ (closes: #209386).
+    - Fixes ICE in in extract_insn, at recog.c on alpha (closes: #207564).
+  * Make libgcj-common architecture all (closes: #211909).
+  * Build depend on: flex-old | flex (<< 2.5.31).
+  * Fix spec linking libraries with -pthread on powerpc (closes: #211054).
+  * debian/patches/arm-gotoff.dpatch: fix two kinds of PIC lossage.
+    (Phil Blundell)
+  * debian/patches/arm-common.dpatch: fix excessive alignment of common
+    blocks causing binutils testsuite failures.
+    (Phil Blundell)
+  * Update priorities in debian/control to match the archive.
+    (Ryan Murray)
+  * s390-nonlocal-goto patch added. Fixes some pascal testcase failures. 
+    (Gerhard Tonn)
+  * On alpha-linux, make -mieee default and add -mieee-disable switch
+    to turn default off (closes: #212912).
+    (Tyson Whitehead)
+  * Add gpc upstream patch for memory corruption fix.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  5 Oct 2003 19:53:49 +0200
+
+gcc-3.3 (1:3.3.2ds2-0pre4) unstable; urgency=low
+
+  * Add gcc-unsharing_lhs patch (closes: #210848)
+
+ -- Ryan Murray <rmurray@debian.org>  Fri, 19 Sep 2003 22:51:19 -0600
+
+gcc-3.3 (1:3.3.2ds2-0pre3) unstable; urgency=low
+
+  * Update to gcc-3.3.2 CVS 20030908.
+  * PR11716 (Michael Eager, Dan Jacobowitz):
+    Make GCC think that the maximum length of a short branch is
+    64K instead of 128K.  It's a big hammer, but it works.
+    Closes: #207915.
+  * Downgrade gpc to 20030507 on alpha and ia64 (closes: #208717).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  8 Sep 2003 21:49:52 +0200
+
+gcc-3.3 (1:3.3.2ds1-0pre2) unstable; urgency=low
+
+  * Update to gcc-3.3.2 CVS 20030831.
+    - Fix java NullPointerException detection with 2.6 kernels.
+      Closes: #206377.
+    - Fix bug in C++ typedef handling (closes: #205402).
+    - Fix -Wunreachable-code giving false complaints (closes: #196600).
+  * Update to gpc-20030830.
+  * Don't include /usr/share/java/repository into the class path according
+    to the new version of th Debian Java policy (closes: #205643).
+  * Build-Depend/Depend on libgc-dev.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 31 Aug 2003 08:56:53 +0200
+
+gcc-3.3 (1:3.3.2ds0-0pre1) unstable; urgency=low
+
+  * Remove the build dependency on locales for now.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 15 Aug 2003 07:48:18 +0200
+
+gcc-3.3 (1:3.3.2ds0-0pre0) unstable; urgency=medium
+
+  * Update to gcc-3.3.2 CVS 20030812.
+    - Fixes generation of wrong code for XDM-AUTHORIZATION-1 key generation
+      and/or validation. Closes: #196090.
+  * Update NEWS files.
+  * Change ix86 default CPU type for code generation:
+    - i386-linux       -> i486-linux
+    - i386-gnu         -> i586-gnu
+    - i386-freebsd-gnu -> i486-freebsd-gnu
+    Use -march=i386 to target i386 CPUs.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Aug 2003 10:31:28 +0200
+
+gcc-3.3 (1:3.3.1ds3-1) unstable; urgency=low
+
+  * gcc-3.3.1 (taken from CVS 20030805).
+    - C++: Fix declaration conflicts (closes: #203351).
+    - Fix ICE on ia64 (closes: #203840).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  5 Aug 2003 20:38:02 +0200
+
+gcc-3.3 (1:3.3.1ds2-0rc2) unstable; urgency=low
+
+  * Update to gcc-3.3.1 CVS 20030728.
+    - Fix ICE in extract_insn, at recog.c:2148 on m68k.
+      Closes: #177840, #180375, #190818.
+    - Fix ICE while building libquicktime on alpha (closes: #192576).
+    - Fix failure to deal with using and private inheritance (closes: #202696).
+  * On sparc, /usr/lib was added to the library search path. Fix it.
+  * Closed reports reported against gcc-3.2.x and fixed in gcc-3.3:
+    - Fix error building the gcl package on arm (closes: #199835).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 28 Jul 2003 20:39:07 +0200
+
+gcc-3.3 (1:3.3.1ds1-0rc1) unstable; urgency=low
+
+  * Update to gcc-3.3.1 CVS 20030722 (3.3.1 release candidate 1).
+    - Fix ICE in copy_to_mode_reg on 64-bit targets (closes: #189365).
+    - Remove documentation about multi-line strings (closes: #194391).
+    - Correctly document -falign-* parameters (closes: #198269).
+    - out-of-class specialization of a private nested template class.
+      Closes: #193830.
+    - Tighten shlibs dependency due to new symbols in libgcc.
+  * README.Debian for libg2c0, describing the need for g77-x.y when
+    working with the g2c header and library (closes: #189059).
+  * Call make with -j<number of CPU's>, if USE_NJOBS is set and non-empty
+    in the environment.
+  * Add another two m68k patches, partly replacing the workarounds provided
+    by Roman Zippel.
+  * Add the stack protector patch, but don't apply it by default. Edit
+    debian/rules.patch to apply it (closes: #171699, #189494).
+  * Remove wrong symlinks from gnat package (closes: #201882).
+  * Closed reports reported against gcc-2.95 and fixed in newer versions:
+    - SMP kernel compilation on alpha (closes: #134197, #146883).
+    - ICE on arm while building imagemagick (closes: #173475).
+  * Closed reports reported against gcc-3.2.x and fixed in gcc-3.3:
+    - Miscompilation of octave2.1 on hppa (closes: #192296, #193804).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 13 Jul 2003 10:26:30 +0200
+
+gcc-3.3 (1:3.3.1ds0-0pre0) unstable; urgency=medium
+
+  * Update to gcc-3.3.1 CVS 20030626.
+    - Fix ICE on arm compiling xfree86 (closes: #195424).
+    - Fix ICE on arm compiling fftw (closes: #186185).
+    - Fix ICE on arm in change_address_1, affecting a few packages.
+      Closes: #197099.
+    - Fix ICE in merge_assigned_reloads building Linux 2.4.2x sched.c.
+      Closes: #195237.
+    - Do not warn about failing to inline functions declared in system headers.
+      Closes: #193049.
+    - Fix ICE on mips{,el} in propagate_one_insn (closes: #194330, #196091).
+    - Fix ICE on m68k in reg_overlap_mentioned_p (closes: #194749).
+    - Build crtbeginT.o on m68k (closes: #197613).
+  * Fix g++ man page symlink (closes: #196271).
+  * mips/mipsel: Depend on binutils (>= 2.14.90.0.4). Closes: #196744.
+  * Disable treelang on powerpc (again). Closes: #196915.
+  * Pass -encoding in gcj-wrapper.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 27 Jun 2003 00:14:43 +0200
+
+gcc-3.3 (1:3.3ds9-3) unstable; urgency=low
+
+  * Closing more reports, fixed in 3.2/3.3:
+    - ICE building texmacs on m68k (closes: #177433).
+    - libstdc++: <cmath> doesn't define trunc(...) (closes: #105285).
+    - libstdc++: setw is ignored for strings output (closes: #52382, #76645).
+  * Add build support to omit the manual pages and info docs from the
+    packages, disabled by default. Wait for a Debian statement, which can
+    be cited. Adresses: #193787.
+  * Reenable the m68k-const patch, don't run the g77 testsuite on m68k.
+    Addresses ICEs (#177840, #190818).
+  * Update arm-xscale patch.
+  * libstdc++: use __attribute__(__unknown__), instead of (unknown).
+    Closes: #195796.
+  * Build-Depend on glibc (>= 2.3.1) to prevent incorrect builds on woody.
+    Request from Adrian Bunk.
+  * Add treelang-update patch (Tim Josling), reenable treelang on powerpc.
+  * Add <GNU_TYPE>-{cpp,gcc,g++,gcj,g77} symlinks (addresses: #189466).
+  * Make sure not to build using binutils-2.14.90.0.[12].
+
+ -- Matthias Klose <doko@debian.org>  Mon,  2 Jun 2003 22:35:45 +0200
+
+gcc-3.3 (1:3.3ds9-2) unstable; urgency=medium
+
+  * Correct autoconf-related snafu in newly added ARM patches (Phil Blundell).
+  * Correct libgcc1 dependency (closes: #193689).
+  * Work around ldd/dpkg-shlibs failure on s390x.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 May 2003 09:40:15 +0200
+
+gcc-3.3 (1:3.3ds9-1) unstable; urgency=low
+
+  * gcc-3.3 final release.
+    See /usr/share/doc/gcc-3.3/NEWS.{gcc,html}.
+  * First merge of i386/x86-64 biarch support (Arnd Bergmann).
+    Disabled by default. Closes: #190066.
+  * New gpc-20030507 version.
+  * Upstream gpc update to fix netbsd build failure (closes: #191407).
+  * Add arm-xscale.dpatch, arm-10730.dpatch, arm-tune.dpatch, copied
+    from gcc-3.2 (Phil Blundell).
+  * Closing bug reports reported against older gcc versions (some of them
+    still present in Debian, but not anymore as the default compiler).
+    Usually, forwarded bug reports are linked to
+        http://gcc.gnu.org/PR<upstream bug number>
+    The upstream bug number usually can be found in the Debian reports.
+
+  * Closed reports reported against gcc-3.1.x, gcc-3.2.x and fixed in gcc-3.3:
+    - General:
+      + GCC accepts multi-line strings without \ or " " &c (closes: #2910).
+      + -print-file-name sometimes fails (closes: #161615).
+      + ICE: reporting routines re-entered (closes: #179597, #180937).
+      + Misplaced paragraph in gcc documentation (closes: #179363).
+      + Error: suffix or operands invalid for `div' (closes: #150558).
+      + builtin memcmp() could be optimised (closes: #85535).
+    - Ada:
+      + Preelaborate, exceptions, and -gnatN (closes: #181679).
+    - C:
+      + Duplicate loop conditions even with -Os (closes: #94701).
+      + ICE (signal 11) (closes: #65686).
+    - C++:
+      + C++ error on virtual function which uses ... (closes: #165829).
+      + ICE when warning about cleanup nastiness in switch statements
+        (closes: #184108).
+      + Fails to compile virtual inheritance with variable number of
+        argument method (closes: #151357).
+      + xmmintrin.h broken for c++ (closes: #168310).
+      + Stack corruption with variable-length automatic arrays and virtual
+        destructors (closes: #188527).
+      + ICE on illegal code (closes: #184862).
+      + _attribute__((unused)) is ignored in C++ (closes: #45440).
+      + g++ handles &(void *)foo bizzarely (closes: #79225).
+      + ICE (with wrong code, though) (closes: #81122).
+    - Java:
+      + Broken zip file handling (closes: #180567).
+    - ObjC:
+      + @protocol forward definitions do not work (closes: #80468).
+    - Architecture specific:
+      - alpha
+        + va_start is off by one (closes: #186139).
+        + ICE while building kseg/ddd (closes: #184753).
+        + g++ -O2 optimization error (closes: #70743).
+      - arm
+        + ICE with -O2 in change_address_1 (closes: #180750).
+        + gcc optimization error with -O2, affecting bison (closes: #185903).
+      - hppa
+        + ICE in insn_default_length (closes: #186447).
+      - ia64
+        + gcc-3.2 fails w/ optimization (closes: #178830).
+      - i386
+        + unnecessary generation of instruction cwtl (closes: #95318).
+        + {athlon} ICE building mplayer (closes: #184800).
+        + {pentium4} ICE while compiling mozilla with -march=pentium4
+          (closes: #187910).
+        + i386 optimisation: joining tests (closes: #105309).
+      - m68k
+        + ICE in instantiate_virtual_regs_1 (closes: #180493).
+        + gcc optimizer bug on m68k (closes: #64832).
+      - powerpc
+        + ICE in extract_insn, at recog.c:2175 building php3 (closes: #186299).
+        + ICE with -O -Wunreachable-code (closes: #189702).
+      - s390
+        + Operand out of range at assembly time when using -O2
+          (closes: #178596).
+      - sparc
+        + gcc-3.2 regression (wrong code) (closes: #176387).
+        + ICE in mem_loc_descriptor when optimizing (closes: #178909).
+        + ICE in gen_reg_rtx when optimizing (closes: #178965).
+        + Optimisation leads to unaligned access in memcpy (closes: #136659).
+
+  * Closed reports reported against gcc-3.0 and fixed in gcc-3.2.x:
+    - General:
+      + Use mkstemp instead of mktemp (closed: #127802).
+    - Preprocessor:
+      + Fix redundant error message from cpp (closed: #100722).
+    - C:
+      + Optimization issue on ix86 (pointless moving) (closed: #97904).
+      + Miscompilation of allegro on ix86 (closed: #105741).
+      + Fix generation of ..ng references for static aliases (alpha-linux).
+        (closed: #108036).
+      + ICE compiling pari on hppa (closed: #111613).
+      + ICE on ia64 in instantiate_virtual_regs_1 (closed: #121668).
+      + ICE in c-typeck.c (closed: #123687).
+      + ICE in gen_subprogram_die on alpha (closed: #127890).
+      + SEGV in initialization of flexible char array member (closed: #131399).
+      + ICE on arm compiling lapack (closed: #135967).
+      + ICE in incomplete_type_error (closed: #140606).
+      + Fix -Wswitch (also part of -Wall) (closed: #140995).
+      + Wrong code in mke2fs on hppa (closed: #150232).
+      + sin(a) * sin(b) gives wrong result (closed: #164135).
+    - C++:
+      + Error in std library headers on arm (closed: #107633).
+      + ICE nr. 19970302 (closed: #119635).
+      + std::wcout does not perform encoding conversions (closed: #128026).
+      + SEGV, when compiling iostream.h with -fPIC (closed: #134315).
+      + Fixed segmentation fault in included code for <rope> (closed: #137017).
+      + Fix with exception handling and -O (closed: #144232).
+      + Fix octave-2.1 build failure on ia64 (closed: #144584).
+      + nonstandard overloads in num_get facet (closed: #155900).
+      + ICE in expand_end_loop with -O (closed: #158371).
+    - Fortran:
+      + Fix blas build failure on arm (closed: #137959).
+    - Java:
+      + Interface members are public by default (closed: #94974).
+      + Strange message with -fno-bounds-check in combination with -W.
+        (closed: #102353).
+      + Crash in FileWriter using IOException (closed: #116128).
+      + Fix ObjectInputStream.readObject() calling constructors.
+        (closed: #121636).
+      + gij: better error reporting on `class not found' (closed: #125649).
+      + Lockup during .java->.class compilation (closed: #141899).
+      + Compile breaks using temporary inner class instance (closed: #141900).
+      + Default constructor for inner class causes broken bytecode.
+        (closed: #141902).
+      + gij-3.2 linked against libgcc1 (closed: #165180).
+      + gij-wrapper understands -classpath parameter (closed: #146634).
+      + gij-3.2 doesn't ignore -jar when run as "java" (closed: #167673).
+    - ObjC:
+      + ICE on alpha (closed: #172353).
+
+  * Closed reports reported against gcc-2.95 and fixed in newer versions:
+    - General:
+      + Undocumented option -pthread (closes: #165110).
+      + stdbool.h broken (closes: #167439).
+      + regparm/profiling breakage (closes: #20695).
+      + another gcc optimization error (closes: #51456).
+      + ICE in `output_fix_trunc' (closes: #55967).
+      + Fix "Unable to generate reloads for" (closes: #58219, #131890).
+      + gcc -c -MD x/y.c -o x/y.o leaves y.d in cwd (closes: #59232).
+      + Compiler error with -O2 (closes: #67631).
+      + ICE (unrecognizable insn) compiling php4 (closes: #83550, #84969).
+      + Another ICE (closes: #90666).
+      + man versus info inconsistency (-W and -Wall) (closes: #93708).
+      + ICE on invalid extended asm (closes: #136630).
+      + ICE in `emit_no_conflict_block' compiling perl (closes: #154599).
+      + ICE in `gen_tagged_type_instantiation_die'(closes: #166766).
+      + ICE on __builtin_memset(s, 0, -1) (closes: #170994).
+      + -Q option to gcc appears twice in the documentation (closes: #137382).
+      + New options for specifying targets:- -MQ and -MT (closes: #27878).
+      + Configure using --enable-nls (closes: #51651).
+      + gcc -dumpspecs undocumented (closes: #65406).
+    - Preprocessor:
+      + cpp fails to parse macros with varargs correctly(closes: #154767).
+      + __VA_ARGS__ stringification crashes preprocessor if __VA_ARGS__ is
+        empty (closes: #152709).
+      + gcc doesn't handle empty args in macro function if there is only
+        one arg(closes: #156450).
+    - C:
+      + Uncaught floating point exception causes ICE (closes: #33786).
+      + gcc -fpack-struct doesn't pack structs (closes: #64628).
+      + ICE in kernel (matroxfb) code (closes: #151196).
+      + gcc doesn't warn about unreachable code (closes: #158704).
+      + Fix docs for __builtin_return_address(closes: #165992).
+      + C99 symbols in limits.h not defined (closes: #168346).
+      + %zd printf spec generates warning, even in c9x mode (closes: #94891).
+      + Update GCC attribute syntax (closes: #12253, #43119).
+    - C++ & libstdc++-v3:
+      + template and virtual inheritance bug (closes: #152315).
+      + g++ has some troubles with nested templates (closes: #21255).
+      + vtable thunks implementation is broken (closes: #34876, #35477).
+      + ICE for templated friend (closes: #42662).
+      + ICE compiling mnemonic (closes: #42989).
+      + Deprecated: result naming doesn't work for functions defined in a
+        class (closes: #43170).
+      + volatile undefined ... (closes: #50529).
+      + ICE concerning templates (closes: #53698).
+      + Program compiled -O3 -malign-double segfaults in ofstream::~ofstream
+        (closes: #56867).
+      + __attribute__ ((constructor)) doesn't work with C++ (closes: #61806).
+      + Another ICE (closes: #65687).
+      + ICE in `const_hash' (closes: #72933).
+      + ICE on illegal code (closes: #83221).
+      + Wrong code with -O2 (closes: #83363).
+      + ICE on template class (closes: #85934).
+      + No warning for missing return in non-void member func (closes: #88260).
+      + Not a bug/fixed in libgcc1: libgcc.a symbols end up exported by
+        shared libraries (closes: #118670).
+      + ICE using nested templates (closes: #118781).
+      + Another ICE with templates (closes: #127489).
+      + More ICEs (closes: #140427, #141797).
+      + ICE when template declared after use(closes: #148603).
+      + template function default arguments are not handled (closes: #157292).
+      + Warning when including stl.h (closes: #162074).
+      + g++ -pedantic-errors -D_GNU_SOURCE cannot #include <complex>
+        (closes: #151671).
+      + c++ error message improvement suggestion (closes: #46181).
+      + Compilation error in stl_alloc.h with -fhonor-std (closes: #59005).
+      + libstdc++ has no method at() in stl_= (closes: #68963).
+    - Fortran:
+      + g77 crash (closes: #130415).
+    - ObjC:
+      + ICE: program cc1obj got fatal signal 11 (closes: #62309).
+      + Interface to garbage collector is undocumented. (closes: #68987).
+    - Architecture specific:
+      - alpha
+        + Can't compile with define gnu_source with stdio and curses
+          (closes: #97603).
+        + Header conflicts on alpha (closes: #134558).
+        + lapack-dev: cannot link on alpha (closes: #144602).
+        + ICE `fixup_var_refs_1' (closes: #43001).
+        + Mutt segv on viewing list of attachments (closes: #47981).
+        + ICE building open-amulet (closes: #48530).
+        + ICE compiling hatman (closes: #55291).
+        + dead code removal in switch() broken (closes: #142844).
+      - arm
+        + Miscompilation using -fPIC on arm (closes: #90363).
+        + infinite loop with -O on arm (closes: #151675).
+      - i386
+        + ICE when using -mno-ieee-fp and -march=i686 (closes: #87540).
+      - m68k
+        + Optimization (-O2) broken on m68k (closes: #146006).
+      - mips
+        + g++ exception catching does not work... (closes: #105569).
+        + update-menus gets Bus Error (closes: #120333).
+      - mipsel
+        + aspell: triggers ICE on mipsel (closes: #128367).
+      - powerpc
+        + -O2 produces wrong code (gnuchess example) (closes: #131454).
+      - sparc
+        + Misleading documentation for -malign-{jump,loop,function}s
+          (closes: #114029).
+        + Sparc GCC issue with -mcpu=ultrasparc (closes: #172956).
+        + flightgear: build failure on sparc (closes: #88694).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 16 May 2003 07:13:57 +0200
+
+gcc-3.3 (1:3.3ds8-0pre9) unstable; urgency=high
+
+  * gcc-3.3 second prerelease.
+    - Fixing exception handling on s390 (urgency high).
+  * Reenabled gpc build (I had it disabled ...). Closes: #192347.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  9 May 2003 07:32:14 +0200
+
+gcc-3.3 (1:3.3ds8-0pre8) unstable; urgency=low
+
+  * gcc-3.3 prerelease.
+    - Fixes gcj ICE (closes: #189545).
+  * For libstdc++ use the i486 atomicity implementation, introduced with
+    0pre6, left out in 0pre7 (closes: #191684).
+  * Add README.Debian for treelang (closes: #190812).
+  * Apply NetBSD changes (Joel Baker). Closes: #191551.
+  * New symbols in libgcc1, tighten the shlibs dependency.
+  * Disable testsuite run on mips/mipsel because of an outdated libc-dev
+    package.
+  * Do not build libffi with debug information, although configuring
+    with --enable-debug.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  6 May 2003 06:53:49 +0200
+
+gcc-3.3 (1:3.3ds7-0pre7) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030429).
+  * Revert upstream libstdc++ change (closes: #191145, #191147, #191148,
+    #191149, #149159, #149151, and other reports).
+    Sorry for not detecting this before the upload, seems to be
+    broken on i386 "only".
+  * hurd-i386: Use /usr/include, not /include.
+  * Disable gpc on hurd-i386 (closes: #189851).
+  * Disable building the debug version of libstdc++ on powerpc-linux
+    (fixes about 200 java test cases).
+  * Install libstdc++v3 man pages (closes: #127263).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 Apr 2003 23:28:44 +0200
+
+gcc-3.3 (1:3.3ds6-0pre6) unstable; urgency=high
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030426).
+  * libstdc++-doc: Fix index.html link (closes: #189424).
+  * Revert back to the i486 atomicity implementation, that was used
+    for gcc-3.2 as well. Reopens: #184446, #185662. Closes: #189983.
+    For this reason, tighten the libstdc++5 shlibs dependency. See
+    http://lists.debian.org/debian-devel/2003/debian-devel-200304/msg01895.html
+    Don't build the ix86 specfic libstdc++ libs anymore.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 Apr 2003 19:47:54 +0200
+
+gcc-3.3 (1:3.3ds5-0pre5) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030415).
+  * Disable treelang on powerpc.
+  * Disable gpc on m68k.
+  * Install locale data. Conflict with gcc-3.2 (<= 1:3.2.3-0pre8).
+  * Fix generated bits/atomicity.h (closes: #189183).
+  * Tighten libgcc1 shlibs dependency (new symbol _Unwind_Backtrace).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 16 Apr 2003 00:37:05 +0200
+
+gcc-3.3 (1:3.3ds4-0pre4) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030412).
+  * Avoid sparc64 dependencies for libgcc1 on sparc (Clint Adams).
+  * Make the default sparc 32bit target v8 instead of v7. This mainly
+    enables hardmul, which should speed up v8 and v9 systems by a large
+    margin (Ben Collins).
+  * Tighten binutils dependency for sparc.
+  * On i386, build libstdc++ optimized for i486 and above. The library
+    in /usr/lib is built for i386. Closes: #184446, #185662.
+  * Add gpc build (from gcc-snapshot package).
+  * debian/control: Include all packages, that _can_ be built from
+    this source package (except the cross packages).
+  * Add m68k patches: m68k-const, m68k-subreg, m68k-loop.
+  * Run the 3.3 testsuite a second time with the installed gcc-3.2
+    to check for regressions (promised, only this time, and for the
+    final release ;). Add build dependencies (gobjc-3.2, g77-3.2, g++-3.2).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 12 Apr 2003 10:11:11 +0200
+
+gcc-3.3 (1:3.3ds3-0pre3) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030331).
+  * Reenable java on arm.
+  * Build-Depend on binutils-2.13.90.0.18-1.3 on m68k. Fixes all
+    bprob/gcov testsuite failures.
+  * Enable C++ build on arm.
+  * Enable the sparc64 build.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 31 Mar 2003 23:24:54 +0200
+
+gcc-3.3 (1:3.3ds2-0pre2) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030317).
+  * Disable building the gcc-3.3-nof package.
+  * Disable Ada on mips and mipsel.
+  * Remove the workaround to build Ada on powerpc.
+  * Add GNU Free documentation license to copyright file.
+  * Update the sparc64 build patches (Clint Adams). Not yet enabled.
+  * Disable C++ on arm (Not yet tested).
+  * Add fix for ICE on powerpc (see: #184684).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 Mar 2003 21:40:57 +0100
+
+gcc-3.3 (1:3.3ds1-0pre1) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030310).
+  * Add gccbug manpage.
+  * Don't build libgnat package (no shared library).
+  * Configure with --enable-sjlj-exceptions on hppa and m68k for
+    binary compatibility with libstdc++ built with gcc-3.2.
+  * Disable Java on arm-linux (never seen it sucessfully bootstrap).
+  * Install non-conflicting baseline README.
+  * multilib *.so and *.a moved to /usr/lib/gcc-lib/... , so that several
+    compiler versions can be installed concurrently.
+  * Remove libstdc++-incdir patch applied upstream.
+  * libstdc++ 64 bit development files now handled in -dev target.
+    (Gerhard Tonn)
+  * Drop build dependencies for gpc (tetex-bin, help2man, libncurses5-dev).
+  * Add libstdc++5-3.3-dev confict to libstdc++5-dev (<= 1:3.2.3-0pre3).
+  * Enable builds on m68k (all but C++ for the moment). gcc-3.3 bootstraps,
+    while gcc-3.2 doesn't.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 10 Mar 2003 23:41:00 +0100
+
+gcc-3.3 (1:3.3ds0-0pre0) unstable; urgency=low
+
+  * First gcc-3.3 package, built for s390 only. All other architectures
+    build the gcc-3.3-base package only.
+    To build the package on other architectures, edit debian/rules.defs
+    (macro no_dummy_archs).
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030301).
+  * Don't include the gcc locale files (would conflict with 3.2).
+  * Remove libffi-install-fix patch.
+  * Fix netbsd-i386 patches.
+  * Change priority of libstdc++5 and gcc-3.2-base to important.
+  * Install gcjh-wrapper for javah.
+  * gij suggests fastjar, gcj recommends fastjar.
+  * Allow builds using automake1.4 | automake (<< 1.5).
+  * Backport fix for to output more correct line numbers.
+  * Add help2man to build dependencies needed for some gpc man pages.
+  * gpc: Install binobj and gpidump binaries and man pages.
+  * Apply cross compilation patches submitted by Bastian Blank.
+  * Replace s390-biarch patch and copy s390-config-ml patch from 3.2
+    (Gerhard Tonn).
+  * Configure using --enable-debug.
+  * Add infrastructure to only build a subset of binary packages.
+  * Rename libstdc++-{dev,dbg,pic,doc} packages.
+  * Build treelang compiler.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  1 Mar 2003 12:56:42 +0100
+
+gcc-3.2 (1:3.2.3ds2-0pre3) unstable; urgency=low
+
+  * gcc-3.2.3 prerelease (CVS 20030228)
+    - Fixes bootstrap failure on alpha-linux.
+    - Fixes ICE on m68k (closes: #177016).
+  * Build Pascal with -O1 on powerpc, disable Pascal on arm, m68k and
+    sparc (due to wrong code generation for fwrite in glibc,
+    see PR optimization/9279).
+  * Apply cross compilation patches submitted by Bastian Blank.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 28 Feb 2003 20:26:30 +0100
+
+gcc-3.2 (1:3.2.3ds1-0pre2) unstable; urgency=medium
+
+  * gcc-3.2.3 prerelease (CVS 20030221)
+    - Fixes ICE on hppa (closes: #181813).
+  * Patch for ffitest in s390-java.dpatch deleted, since already fixed
+    upstream. (Gerhard Tonn)
+  * Build crtbeginT.o on m68k-linux (closes: #179807).
+  * Install gcjh-wrapper for javah (closes: #180218).
+  * gij suggests fastjar, gcj recommends fastjar (closes: #179298).
+  * Allow builds using automake1.4 | automake (<< 1.5) (closes: #180048).
+  * Backport fix for to output more correct line numbers (closes: #153965).
+  * Add help2man to build dependencies needed for some gpc man pages.
+  * gpc: Install binobj and gpidump binaries and man pages.
+  * Disable gpc on arm due to wrong code generation for fwrite in
+    glibc (see PR optimization/9279).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 22 Feb 2003 19:58:20 +0100
+
+gcc-3.2 (1:3.2.3ds0-0pre1) unstable; urgency=low
+
+  * gcc-3.2.3 prerelease (CVS 20030210)
+    - Fixes long millicode calls on hppa (closes: #180520)
+  * New gpc-20030209 version.  Remove gpc-update.dpatch and gpc-testsuite.dptch
+    as they are no longer needed.
+  * Fix netbsd-i386 patches (closes: #180129, #179931)
+  * m68k-bootstrap.dpatch: backport gcse.c changes from 3.3/MAIN to 3.2
+  * Change priority of libstdc++5 and gcc-3.2-base to important.
+
+ -- Ryan Murray <rmurray@debian.org>  Tue, 11 Feb 2003 06:18:09 -0700
+
+gcc-3.2 (1:3.2.2ds8-1) unstable; urgency=low
+
+  * gcc-3.2.2 release.
+    - Fixes ICE, regression from 2.95 (closes: #176117).
+    - Fixes ICE, regression from 2.95 (closes: #179161).
+  * libstdc++ for biarch installs now upstream to usr/lib64,
+    therefore mv usr/lib/64 usr/lib64 no longer necessary. (Gerhard Tonn)
+
+ -- Ryan Murray <rmurray@debian.org>  Wed,  5 Feb 2003 01:35:29 -0700
+
+gcc-3.2 (1:3.2.2ds7-0pre8) unstable; urgency=low
+
+  * gcc-3.2.2 prerelease (CVS 20030130).
+  * update s390 libffi patch
+  * debian/control: add myself to uploaders and change libc12-dev depends to
+    libc-dev on i386 (closes: #179128)
+  * Build-Depend on procps so that ps is available for logwatch
+
+ -- Ryan Murray <rmurray@debian.org>  Fri, 31 Jan 2003 04:00:15 -0700
+
+gcc-3.2 (1:3.2.2ds6-0pre7) unstable; urgency=low
+
+  * gcc-3.2.2 prerelease (CVS 20030128).
+    - Update needed for hppa.
+    - Fixes ICE on arm, regression from 2.95.x (closes: #168086).
+    - Can use default bison (1.875).
+  * Apply netbsd build patches (closes: #177674, #178328, #178325,
+    #178326, #178327).
+  * Run the logwatch script on "slow" architectures (arm, m68k) only.
+  * autoreconf.dpatch: Only update libtool.m4, which is newer conceptually
+    than libtool 1.4 (Ryan Murray).
+  * Apply autoreconf patch universally (Ryan Murray).
+  * More robust gij/gcj wrapper scripts, include /usr/lib/jni in default
+    JNI search path (Ben Burton). Closes: #167932.
+  * Build crtbeginT.o on m68k (closes: #177036).
+  * Fixed libc-dev source dependency (closes: #178602).
+  * Tighten shlib dependency to the current package version; should be
+    1:3.2.2-1 for the final release (closes: #178867).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 28 Jan 2003 21:59:30 +0100
+
+gcc-3.2 (1:3.2.2ds5-0pre6) unstable; urgency=low
+
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20030123).
+  * Build locales needed by the libstdc++ testsuite.
+  * Update config.{guess,sub} files from autotools-dev (closes: #177674).
+  * Disable Ada and Java on netbsd-i386 (closes: #177679).
+  * gnat: Add suggests for gnat-doc and ada-reference-manual.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 23 Jan 2003 22:16:53 +0100
+
+gcc-3.2 (1:3.2.2ds4-0pre5.1) unstable; urgency=low
+
+  * Readd build dependency `locales' on arm.  locales is now installable
+  * Add autoreconf patch for mips{,el}. (closes: #176311)
+
+ -- Ryan Murray <rmurray@debian.org>  Wed, 22 Jan 2003 14:31:14 -0800
+
+gcc-3.2 (1:3.2.2ds4-0pre5) unstable; urgency=low
+
+  * Remove build dependency `libc6-dev-sparc64 [sparc]' for now.
+  * Remove build dependency `locales' on arm. locales is uninstallable
+    on arm due to the missing glibc-2.3.
+  * Use bison-1.35. bison-1.875 causes an hard error on the reduce/reduce
+    conflict in objc-parse.y.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 10 Jan 2003 10:10:43 +0100
+
+gcc-3.2 (1:3.2.2ds4-0pre4) unstable; urgency=low
+
+  * Try building with gcc-2.95 on m68k-linux. Building gcc-3.2 with gcc-3.2
+    does not work for me. m68k-linux doesn't look good at all ...
+  * Fix s390 build error.
+  * Add locales to build dependencies. A still unsolved issue is the
+    presence of the locales de_DE, en_PH, en_US, es_MX, fr_FR and it_IT,
+    or else some tests in the libstdc++ testsuite will fail.
+  * Put all -nof files in the -nof package (closes: #175253).
+  * Correctly exit logwatch script (closes: #175251).
+  * Install linker-map.gnu file for libstdc++_pic (closes: #175144).
+  * Install versioned gpcs docs only (closes: #173844).
+  * Include gpc test results in gpc package.
+  * Link local libstdc++ documentation to local source-level documentation.
+  * Clarify libstdc++ description (so version and library version).
+    Closes: #175799.
+  * Include library in libstdc++-dbg package (closes: #176005).
+
+ -- Matthias Klose <doko@debian.org>  Wed,  8 Jan 2003 23:39:50 +0100
+
+gcc-3.2 (1:3.2.2ds3-0pre3) unstable; urgency=low
+
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021231).
+    - Fix loop count computation for preconditioned unrolled loops.
+      Closes: #162919.
+    - Fix xmmintrin.h (_MM_TRANSPOSE4_PS) CVS 20021027 (closes: #163647).
+    - Fix [PR 8601] strlen/template interaction causes ICE CVS 20021201.
+      Closes: #166143.
+  * Watch the log files, which are written during the testsuite runs and print
+    out a message, if there is still activity. No more buildd timeouts on arm
+    and m68k ...
+  * Remove gpc's reference to librx1g-dev package (closes: #172953).
+  * Remove trailing dots on package descriptions.
+  * Fix external reference to cpp.info in gcc.info (closes: #174598).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 31 Dec 2002 13:47:52 +0100
+
+gcc-3.2 (1:3.2.2ds2-0pre2) unstable; urgency=medium
+
+  * Friday, 13th upload, so what do you expect ...
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021212).
+  * Fix gnat build (autobuild maintainers: please revert back to gnat-3.2
+    (<= 1:3.2.1ds6-1) for building gnat-3.2, if the build fails building
+    gnatlib and gnattools).
+  * Really disable sparc64 support.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 13 Dec 2002 00:26:37 +0100
+
+gcc-3.2 (1:3.2.2ds1-0pre1) unstable; urgency=low
+
+  * A candidate for the transition ...
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021210).
+    - doc/invoke.texi: Remove last reference to -a (closes: #171748).
+  * Disable sparc64 support. For now please use egcs64 to build sparc64
+    kernels.
+  * Disable Pascal on the sparc architecture (doesn't bootstrap).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 10 Dec 2002 22:33:13 +0100
+
+gcc-3.2 (1:3.2.2ds0-0pre0) unstable; urgency=low
+
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021202).
+    - Should fix _Pragma expansion within macros (closes: #157416).
+  * New gpc-20021128 version. Run check using EXTRA_TEST_PFLAGS=-g0
+  * Add tetex-bin to build dependencies (gpc needs it). Closes: #171203.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  3 Dec 2002 08:22:33 +0100
+
+gcc-3.2 (1:3.2.1ds6-1) unstable; urgency=low
+
+  * gcc-3.2.1 final release.
+  * Build gpc-20021111 for all architectures. hppa and i386 are
+    known to work. For the other architectures, send the usual FTBFS ...
+    WARNING: this gpc version is an alpha version, especially debug info
+    doesn't work well, so use -g0 for compiling. If you need a stable
+    gpc compiler, use gpc-2.95.
+  * Encode the gpc upstream version in the package name, the gpc release
+    date in the version number (requested by gpc upstream).
+  * Added libncurses5-dev and libgmp3-dev as build dependencies for the
+    gpc tests and runtime.
+  * Clean CVS files as well (closes: #169101).
+  * s390-biarch.dpatch added, backported from CVS (Gerhard Tonn).
+  * s390-config-ml.dpatch added, disables biarch for java,
+    libffi and boehm-gc on s390. They need a 64 bit runtime
+    during build which is not yet available on s390 (Gerhard Tonn).
+  * Biarch support for packaging adapted (Gerhard Tonn).
+    biarch variable added and with-sparc64 variable substituted in
+    most places by biarch.
+    dh_shlibdeps is applied only to 32 bit libraries on s390, since
+    ldd for 64 bit libraries don't work on 32 bit runtime.
+    Build dependency to libc6-dev-s390x added.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Nov 2002 00:20:58 +0100
+
+gcc-3.2 (1:3.2.1ds5-0pre6) unstable; urgency=medium
+
+  * gcc-3.2.1 prerelease.
+  * Removed arm patch integrated upstream.
+  * Adjust gnat build dependency (closes: #167116).
+  * Always configure with --enable-clocale=gnu. The autobuilders do have
+    locales installed, but not generated the "de_DE" locale needed for
+    the autoconf test in libstdcc++-v3/aclocal.m4.
+  * libstdc++ documentaion: Don't compresss '*.txt' referenced by html pages.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Nov 2002 07:19:44 +0100
+
+gcc-3.2 (1:3.2.1ds4-0pre5) unstable; urgency=medium
+
+  * gcc-3.2.1 snapshot (CVS 20021103).
+  * sparc64-build.dpatch: Updated. Lets sparc boostrap again.
+  * s390-loop.dpatch removed, already fixed upstream (Gerhard Tonn).
+  * bison.dpatch: Removed, patch submitted upstream.
+  * backport-java-6865.dpatch: Apply again during build.
+  * Tighten glibc dependency (closes: #166703).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  3 Nov 2002 12:22:02 +0100
+
+gcc-3.2 (1:3.2.1ds3-0pre4) unstable; urgency=high
+
+  * gcc-3.2.1 snapshot (CVS 20021020).
+    - Expansion of _Pragma within macros fixed (closes: #157416).
+  * FTBFS: With the switch to bison-1.50 (and 1.75), gcc-3.2 fails to build from
+    source on Debian unstable systems. This is fixed in gcc HEAD, but not on
+    the current release branch.
+    HELP NEEDED:
+    - check what is missing from the patches in debian/patches/bison.dpatch.
+      This is a backport of the bison related patches, but showing regressions
+      in the gcc testsuite, so it cannot be applied.
+    - build gcc using byacc (bootstrap currently fails using byacc).
+    - build bison-1.35 in it's own package (the current 1.35-3 package fails
+      to build form source).
+    - and finally ask upstream to backport the patch to the branch. It's not
+      helpful not beeing able to follow the stable branch. Maybe we should
+      just switch to gcc HEAD as BSD does ...
+    As a terrible workaround, build the sources from CVS first on a machine,
+    with bison-1.35 installed, then package the tarball, so the bison
+    generated files are not rebuilt.
+
+  * re-add lost patch: configure with --enable-__cxa_atexit (closes: #163422),
+    Therefore urgency high.
+  * gcj-wrapper, gij-wrapper: Accept names starting with `.' (closes: #163172,
+    #164009).
+  * Point g++ manpage to correct g++ version (closes: #162843).
+  * Support for i386-freebsd-gnu (closes: #163883).
+  * s390-java.dpatch replaced with backport from cvs head (Gerhard Tonn).
+  * Disable the testsuite run on the Hurd (closes: #159650).
+  * s390-loop.dpatch added, fixes runtime problem (Gerhard Tonn).
+  * debian/patches/bison.dpatch: Backport for bison-1.75 compatibility.
+    Don't use it due to regressions.
+  * debian/patches/backport-java-6865.dpatch: Directly applied in the
+    included tarball because of bison problems.
+  * Make fixincludes priority optional, so linda can depend on it.
+  * Tighten binutils dependency.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 20 Oct 2002 10:52:49 +0200
+
+gcc-3.2 (1:3.2.1ds2-0pre3) unstable; urgency=low
+
+  * gcc-3.2.1 snapshot (CVS 20020923).
+  * Run the libstdc++ check-abi script. Results are put into the file
+    /usr/share/doc/libstdc++5/README.libstdc++-baseline in the libstdc++5-dev
+    package. This file contains a new baseline, if no baseline for this
+    architecture is included in the gcc sources.
+  * gcj-wrapper: Accept files starting with an underscore, accept
+    path names (closes: #160859, #161517).
+  * Explicitely call automake-1.4 when rebuilding Makefiles (closes: #161438).
+  * Let installed fixincludes script find files in /usr/lib/fixincludes.
+  * debian/rules.patch: Add .NOTPARALLEL as target, so that patches are
+    applied sequentially (closes: #159395).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 24 Sep 2002 07:36:56 +0200
+
+gcc-3.2 (1:3.2.1ds1-0pre2) unstable; urgency=low
+
+  * gcc-3.2.1 snapshot (CVS 20020913). Welcome back m68k in bootstrap land!
+  * Fix arm-tune.dpatch (closes: #159354).
+  * Don't overwrite LD_LIBRARY_PATH in build (closes: #158459).
+  * --disable-__cxa_atexit on NetBSD (closes: #159620).
+  * Reenable installation of message catalogs (disabled in 3.2-0pre2).
+    Closes: #160175.
+  * Ben Collins
+    - Re-enable sparc64 build. This time, it's part of the default compiler.
+      I have disabled 64/alt libraries as they are too much overhead. All
+      libraries build 64bit, but currently only libgcc/libstdc++ include the
+      64bit libraries.
+    Closes: #160404.
+  * Depend on autoconf2.13, instead of autoconf.
+  * Phil Blundell
+    - debian/patches/arm-update.dpatch: Fix python2.2 build failure.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  7 Sep 2002 08:05:02 +0200
+
+gcc-3.2 (1:3.2.1ds0-0pre1) unstable; urgency=medium
+
+  * gcc-3.2.1 snapshot (CVS 20020829).
+    New g++ option -Wabi:
+      Warn when G++ generates code that is probably not compatible with the
+      vendor-neutral C++ ABI.  Although an effort has been made to warn about
+      all such cases, there are probably some cases that are not warned about,
+      even though G++ is generating incompatible code.  There may also be
+      cases where warnings are emitted even though the code that is generated
+      will be compatible.
+    The current version of the ABI is 102, defined by the __GXX_ABI_VERSION
+    macro.
+  * debian/NEWS.*: Updated.
+  * Fix libstdc++-dev dependency on libc-dev for the Hurd (closes: #157004).
+  * Add versioned expect build dependency.
+  * Tighten binutils dependency to 2.13.90.0.4.
+  * debian/patches/arm-tune.dpatch: Increase stack limit for configure.
+  * 3.2-0pre4 did build gnat-3.2 compilers for all architectures. Build-Depend
+    on gnat-3.2 now (closes: #156734).
+  * Remove bashism's in gcj-wrapper (closes: #157982).
+  * Add -cp and -classpath options to gij(1). Backport from HEAD (#146634).
+  * Add fastjar documentation.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 30 Aug 2002 10:35:00 +0200
+
+gcc-3.2 (1:3.2ds0-0pre4) unstable; urgency=low
+
+  * Correct build dependency on gnat-3.1.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Aug 2002 01:21:58 +0200
+
+gcc-3.2 (1:3.2ds0-0pre3) unstable; urgency=low
+
+  * gcc-3.2 upstream prerelease.
+  * Disable all configure options, which are standard:
+    --enable-threads=posix --enable-long-long, --enable-clocale=gnu
+
+ -- Matthias Klose <doko@debian.org>  Fri,  9 Aug 2002 21:59:08 +0200
+
+gcc-3.2 (1:3.2ds0-0pre2) unstable; urgency=low
+
+  * gcc-3.2 snapshot (CVS 20020802).
+  * Fix g++-include dir.
+  * Don't install the locale files (temporarily, until we don't build
+    gcc-3.1 anymore).
+  * New package libgcj-common to avoid conflict with classpath package.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  3 Aug 2002 09:08:34 +0200
+
+gcc-3.2 (1:3.2ds0-0pre1) unstable; urgency=low
+
+  * gcc-3.2 snapshot (CVS 20020729).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 29 Jul 2002 20:36:54 +0200
+
+gcc-3.1 (1:3.1.1ds3-1) unstable; urgency=low
+
+  * gcc-3.1.1 release. Following this release we will have a gcc-3.2
+    release soon, which is gcc-3.1.1 plus some C++ ABI changes. Once
+    gcc-3.2 hits the archives, gcc-3.1.1 will go away.
+  * Don't build the sparc64 compiler. The packaging/patches are
+    currently broken.
+  * Add missing headers on m68k and powerpc.
+  * Install libgcc_s_nof on powerpc.
+  * Install libffi's copyright and doc files (closes: #152198).
+  * Remove dangling symlink (closes: #149002).
+  * libgcj3: Add a conflict to the classpath package (closes: #148664).
+  * README.C++: Fix URLs.
+  * libstdc++-dbg: Install into /usr/lib/debug, document it.
+  * backport-java-6865.dpatch: backport from HEAD.
+  * Fix typo in gcj docs (closes: #148890).
+  * Change libstdc++ include dir: /usr/include/c++/3.1.
+  * libstdc++-codecvt.dpatch: New patch (closes: #149776).
+  * Build libstdc++-pic package.
+  * Move 64bit libgcc in its own package libgcc1-64 (closes: #147249).
+  * Tighten glibc dependency.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 29 Jul 2002 00:34:49 +0200
+
+gcc-3.1 (1:3.1.1ds2-0pre3) unstable; urgency=low
+
+  * Updated to CVS 2002-06-06 (gcc-3_1-branch).
+  * Updated s390-java patch (Gerhard Tonn).
+  * Don't use -O in STAGE1_FLAGS on m68k.
+  * Fix `-classpath' option in gcj-wrapper script (closes: #150142).
+  * Remove g++-cxa-atexit patch, use --enable-__cxa_atexit configure option.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  3 Jul 2002 23:52:58 +0200
+
+gcc-3.1 (1:3.1.1ds1-0pre2) unstable; urgency=low
+
+  * Updated to CVS 2002-06-06 (gcc-3_1-branch), fixing an ObjC regression.
+  * Welcome m68k to bootstrap land (thanks to Andreas Schwab).
+  * Add javac wrapper for gcj-3.1 (Michael Koch).
+  * Remove dangling symlink in /usr/share/doc/gcc-3.1 (closes: #149002).
+
+ -- Matthias Klose <doko@debian.org>  Fri,  7 Jun 2002 00:26:05 +0200
+
+gcc-3.1 (1:3.1.1ds0-0pre1) unstable; urgency=low
+
+  * Updated to CVS 2002-05-31 (gcc-3_1-branch).
+  * Change priorities from fastjar and gij-wrapper-3.1 from 30 to 31.
+  * Update arm-tune patch.
+  * Install xmmintrin.h header on i386 (closes: #148181).
+  * Install altivec.h header on powerpc.
+  * Call correct gij in gij-wrapper (closes: #148662, #148682).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 29 May 2002 22:47:40 +0200
+
+gcc-3.1 (1:3.1ds2-2) unstable; urgency=low
+
+  * Tighten binutils dependency.
+  * Fix libstdc include dir for multilibs (Dan Jacobowitz).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 21 May 2002 08:03:49 +0200
+
+gcc-3.1 (1:3.1ds2-1) unstable; urgency=low
+
+  * GCC 3.1 release.
+  * Ada cannot be built by the autobuilders for the first time. Do it by hand.
+    gnatgcc and gnatbind need to be in the PATH.
+  * Build with CC=gnatgcc, when building the Ada compiler.
+  * Hurd fixes.
+  * Don't build the sparc64 compiler; the hack isn't up to date and glibc
+    isn't converted to use /lib64 and /usr/lib64.
+  * m68k-linux shows bootstrap comparision failures. If you want to build
+    the compiler anyway and ignore the bootstrap comparision failure, edit
+    debian/rules.patch and uncomment the patch to ignore the failure. See
+    /usr/share/doc/gcc-3.1/BOOTSTRAP_COMPARISION_FAILURE for the differences.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 15 May 2002 09:53:00 +0200
+
+gcc-3.1 (1:3.1ds1-0pre6) unstable; urgency=low
+
+  * Build from the "final prerelease" tarball (gcc-3.1-20020508.tar.gz).
+  * Build gnat-3.1-doc package.
+  * Build fastjar package without building java packages.
+  * Hurd fixes.
+  * Updated sparc64-build patch.
+  * Add s390-ada patch (Gerhard Tonn).
+  * Undo the dwarf2 support for hppa from -0pre5.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  9 May 2002 17:21:09 +0200
+
+gcc-3.1 (1:3.1ds0-0pre5) unstable; urgency=low
+
+  * Use /usr/include/g++-v3-3.1 as C++ include dir.
+  * Update s390-java patch (Gerhard Tonn).
+  * Tighten binutils dependency (gas patch for m68k-linux).
+  * Use gnat-3.1 as the gnat package name (as found in gcc/ada/gnatvsn.ads).
+  * dwarf2 support hppa: a snapshot of the gcc/config/pa directory
+    from the trunk dated 2002-05-02.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  3 May 2002 22:51:37 +0200
+
+gcc-3.1 (1:3.1ds0-0pre4) unstable; urgency=low
+
+  * Use gnat-5.00w as the gnat package name (as found in gcc/ada/gnatvsn.ads).
+  * Don't build the shared libgnat library. It assumes an existing shared
+    libiberty library.
+  * Don't install the libgcjgc library.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 25 Apr 2002 08:48:04 +0200
+
+gcc-3.1 (1:3.1ds0-0pre3) unstable; urgency=low
+
+  * Build fastjar on all architectures.
+  * Update m68k patches.
+  * Update s390-java patch (Gerhard Tonn).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 Apr 2002 15:34:47 +0200
+
+gcc-3.1 (1:3.1ds0-0pre2) unstable; urgency=low
+
+  * Add Ada support. To successfully build, a working gnatbind and gcc
+    driver with Ada support is needed.
+  * Apply needed arm patches from 3.0.4.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Apr 2002 13:17:08 +0200
+
+gcc-3.1 (1:3.1ds0-0pre1) unstable; urgency=low
+
+  * First try for gcc-3.1.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  1 Apr 2002 23:39:30 +0200
+
+gcc-3.0 (1:3.0.4ds3-6) unstable; urgency=medium
+
+  * Second try at fixing sparc build problems.
+
+ -- Phil Blundell <pb@debian.org>  Sun, 24 Mar 2002 14:49:26 +0000
+
+gcc-3.0 (1:3.0.4ds3-5) unstable; urgency=medium
+
+  * Enable java on ARM.
+  * Create missing directory to fix sparc build.
+
+ -- Phil Blundell <pb@debian.org>  Fri, 22 Mar 2002 20:21:59 +0000
+
+gcc-3.0 (1:3.0.4ds3-4) unstable; urgency=low
+
+  * Link with system zlib (closes: #136359).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Mar 2002 20:47:59 +0100
+
+gcc-3.0 (1:3.0.4ds3-3) unstable; urgency=low
+
+  * Build libf2c (pic and non-pic) with -mieee on alpha-linux.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Mar 2002 00:37:24 +0100
+
+gcc-3.0 (1:3.0.4ds3-2) unstable; urgency=medium
+
+  * Apply hppa-build patch (Randolph Chung). Closes: #136731.
+  * Make libgcc1 conflict/replace with libgcc1-sparc64. Closes: #135709.
+  * gij-3.0 provides the `java' command. Closes: #128947.
+  * Depend on binutils (>= 2.11.93.0.2-2), allows stripping of libgcj.a
+    again. Closes: #99307.
+  * Update README.cross pointing to the README of the toolchain-source
+    package.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  6 Mar 2002 21:53:34 +0100
+
+gcc-3.0 (1:3.0.4ds3-1) unstable; urgency=low
+
+  * Final gcc-3.0.4 release.
+  * debian/rules.d/binary-java.mk: Fix dormant typo, exposed by removing the
+    duplicate libgcj dependency and adding the gij-3.0 package.
+    Closes: #134005.
+  * New patch by Phil Blundell to fix scalapack build error on m68k.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Feb 2002 23:59:43 +0100
+
+gcc-3.0 (1:3.0.4ds2-0pre020210) unstable; urgency=low
+
+  * Make the base package dependent on the binary-arch target. Closes: #133433.
+  * Get libstdc++ on arm woring (define _GNU_SOURCE). Closes: #133435.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 11 Feb 2002 20:31:12 +0100
+
+gcc-3.0 (1:3.0.4ds2-0pre020209) unstable; urgency=high
+
+  * Update to CVS sources (20020209 gcc-3_0-branch).
+  * Apply patch to fix bootstrap error on arm-linux (submitted upstream
+    by Phil Blundell). Closes: #130422.
+  * Make base package architecture any.
+  * Decouple versioned shlib dependencies from release number for
+    libobjc as well.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Feb 2002 01:30:11 +0100
+
+gcc-3.0 (1:3.0.4ds1-0pre020203) unstable; urgency=medium
+
+  * One release critical bug outstanding:
+    - bootstrap error on arm.
+  * Update to CVS sources (20020203 gcc-3_0-branch).
+  * Fixed upstream: PR c/3504: Correct documentation of __alignof__.
+    Closes: #85445.
+  * Remove libgcc-powerpc patch, integrated upstream (closes: #131977).
+  * Tighten binutils build dependency (to address #126162).
+  * Move jv-convert to gcj package (closes: #131985).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  3 Feb 2002 14:47:14 +0100
+
+gcc-3.0 (1:3.0.4ds0-0pre020127) unstable; urgency=low
+
+  * Two release critical bugs outstanding:
+    - bootstrap error on arm.
+    - bus errors for C++ and java executables on sparc (see the testsuite
+      results).
+  * Update to CVS sources (20020125 gcc-3_0-branch).
+  * Enable java support for s390 architecture (patch from Gerhard Tonn).
+  * Updated NEWS file for 3.0.3.
+  * Disable building the gcc-sparc64, but build a multilibbed compiler
+    for sparc as the default.
+  * Disabled the subreg-byte patch for sparc (request from Ben Collins).
+  * Fixed reference to libgcc1 package in README (closes: #126218).
+  * Do recommend libc-dev, not depend on it. For low-end or embedded systems
+    the dependency on libc-dev can make the difference between
+    having enough or having too little space to build a kernel.
+  * README.cross: Updated by Hakan Ardo.
+  * Decouple versioned shlib dependencies from release number. Closes: #118391.
+  * Fix diversions for gcc-3.0-sparc64 package (closes: #128178),
+    unconditionally remove `sparc64-linux-gcc' alternative.
+  * g77/README.libg2c.Debian: New file mentioning `libg2c-pic'. The next
+    g77 version (3.1) does build a static and shared library (closes: #104250).
+  * Fix formatting errors in the synopsis of the java man pages. Maybe the
+    reason for #127571. Closes: #127571.
+  * fastjar: Fail for the (currently incorrect) -u option. Addresses: #116145.
+    Add alternative for `jar' using priority 30 (closes: #118648).
+  * jv-convert: Add --help option and man page. Backport from HEAD branch.
+  * libgcj2-dev: Remove duplicate dependency (closes: #127805).
+  * Giving up and make just another new package gij-X.Y with only the gij-X.Y
+    binary for policy conformance (closes: #127111).
+  * gij: Provides an alternative for `java' (priority 30) using a wrapper
+    script (Stephen Zander) (closes: #128974). Added simple manpage.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 Jan 2002 13:33:41 +0100
+
+gcc-3.0 (1:3.0.3ds3-1) unstable; urgency=low
+
+  * Final gcc-3.0.3 release.
+  * Do not compress .txt files in libstdc++ docs referenced from html
+    pages (closes: #124136).
+  * libstdc++-dev suggests libstdc++-doc.
+  * debian/patches/gcc-ia64-NaT.dpatch: Update (closes: #123685).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 21 Dec 2001 02:54:11 +0100
+
+gcc-3.0 (1:3.0.3ds2-0pre011215) unstable; urgency=low
+
+  * Update to CVS sources (011215).
+  * libstdc++ documentation updated upstream (closes: #123790).
+  * debian/patches/gcc-ia64-NaT.dpatch: Disable. Fixes bootstrap error
+    on ia64 (#123685).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 15 Dec 2001 14:43:21 +0100
+
+gcc-3.0 (1:3.0.3ds1-0pre011210) unstable; urgency=medium
+
+  * Update to CVS sources (011208).
+  * Supposed to fix powerpc build error (closes: #123155).
+
+ -- Matthias Klose <doko@debian.org>  Thu, 13 Dec 2001 07:26:05 +0100
+
+gcc-3.0 (1:3.0.3ds0-0pre011209) unstable; urgency=medium
+
+  * Update to CVS sources (011208). Frozen for upstream 3.0.3 release.
+  * Apply contrib/PR3145.patch, a backport of Nathan Sidwell's patch to
+    fix PR c++/3145, the infamous "virtual inheritance" bug. This affected
+    especially KDE2 (eg. artsd). Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+  * cc1plus segfault in strength reduction fixed upstream. Closes: #122547.
+  * debian/patches/gcc-ia64-NaT.dpatch: Add patch to avoid a bug that can
+    cause miscompiled userapps to crash the kernel. Closes: #121924.
+  * Reenable shared libgcc for powerpc. Fixed upstream.
+    http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00340.html
+    debian/patches/libgcc-powerpc.dpatch: New patch.
+  * Add upstream changelogs.
+  * Remove gij alternative. Move to gij package.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  9 Dec 2001 09:36:48 +0100
+
+gcc-3.0 (1:3.0.2ds4-4) unstable; urgency=medium
+
+  * Disable building of libffi on mips and mipsel.
+    (closes: #117503).
+  * Enable building of shared libgcc on s390
+    (closes: #120452).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sat, 1 Dec 2001 06:15:29 -0500
+
+gcc-3.0 (1:3.0.2ds4-3) unstable; urgency=medium
+
+  * Fix logic to build libffi without java (closes: #117503).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  4 Nov 2001 14:34:50 +0100
+
+gcc-3.0 (1:3.0.2ds4-2) unstable; urgency=medium
+
+  * Enable java for ia64 (Jeff Licquia). Closes: #116798.
+  * Allow building of libffi without gcj (Jeff Licquia).
+    New libffi packages for arm hurd-i386 mips mipsel,
+    still missing: hppa, s390.
+  * debian/NEWS.gcc: Add 3.0.2 release notes.
+  * debian/patches/hppa-align.dpatch: New patch from Alan Modra,
+    submitted by Randolph Tausq.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 25 Oct 2001 23:59:31 +0200
+
+gcc-3.0 (1:3.0.2ds4-1) unstable; urgency=medium
+
+  * Final gcc-3.0.2 release. The source tarball is not the released
+    tarball, but taken from CVS 011024).
+  * Remove patch for s390, included upstream.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 24 Oct 2001 00:49:40 +0200
+
+gcc-3.0 (1:3.0.2ds3-0pre011014) unstable; urgency=low
+
+  * Update to CVS sources (011014). Frozen for upstream 3.0.2 release.
+    Closes: #109351, #114099, #114216, #105741 (allegro3938).
+  * Added debian/patches/fastjar.dpatch, which makes fastjar extract
+    filenames correctly (previously, some had incorrect names on extract).
+    Closes: #113236.
+  * Priorities fixed in the past (closes: #94404).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 Oct 2001 13:19:43 +0200
+
+gcc-3.0 (1:3.0.2ds2-0pre010923) unstable; urgency=low
+
+  * Bootstraps on powerpc again (closes: #112777).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 23 Sep 2001 01:32:11 +0200
+
+gcc-3.0 (1:3.0.2ds2-0pre010922) unstable; urgency=low
+
+  * Update to CVS sources (010922).
+  * Fixed upstream (closes: #111801). #105569 on hppa.
+  * Update hppa patch (Matt Taggart).
+  * Fix libstdc++-dev package description (closes: #112758).
+  * debian/rules.d/binary-objc.mk: Fix build error (closes: #112462).
+  * Make gobjc-3.0 conflict with gcc-3.0-sparc64 (closes: #111772).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 22 Sep 2001 09:34:49 +0200
+
+gcc-3.0 (1:3.0.2ds1-0pre010908) unstable; urgency=low
+
+  * Update to CVS sources (010908).
+  * Update hppa patch (Matt Taggart).
+  * Depend on libgc6-dev, not libgc5-dev, which got obsolete (during
+    the freeze ...). However adds s390 support (closes: #110189).
+  * debian/patches/m68k-reload.dpatch: New patch (Roman Zippel).
+    Fixes #89023.
+  * debian/patches/gcc-sparc.dpatch: New patch ("David S. Miller").
+    Fixes libstdc++ testsuite failures on sparc.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 8 Sep 2001 14:26:20 +0200
+
+gcc-3.0 (1:3.0.2ds0-0pre010826) unstable; urgency=low
+
+  * gcc-3.0-nof: Fix symlink to gcc-3.0-base doc directory.
+  * debian/patches/gcj-without-rpath: New patch.
+  * Remove self dependency on libgcj package.
+  * Handle diversions for upgrades from 3.0 and 3.0.1 -> 3.0.2
+    in gcc-3.0-sparc64 package.
+  * Build libg2c.a with -fPIC -DPIC and name the result libg2c-pic.a.
+    Link with this library to avoid linking with non-pic code.
+    Use this library when building dynamically loadable objects (python
+    modules, gimp plugins, ...), which need to be linked against g2c or
+    a library which is linked against g2c (i.e. lapack).
+    Packages needing '-lg2c-pic' must have a build dependency on
+    'g77-3.0 (>= 1:3.0.2-0pre010826).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 26 Aug 2001 13:59:03 +0200
+
+gcc-3.0 (1:3.0.2ds0-0pre010825) unstable; urgency=low
+
+  * Update to CVS sources (010825).
+  * Add libc6-dev-sparc64 to gcc-3.0-sparc64 and to sparc build dependencies.
+  * Remove conflicts on egcc package (closes: #109718).
+  * Fix gcc-3.0-nof dependency.
+  * s390 patches against gcc-3.0.1 (Gerhard Tonn).
+  * debian/control: Require binutils (>= 2.11.90.0.27)
+
+ -- Matthias Klose <doko@debian.org>  Sat, 25 Aug 2001 10:59:15 +0200
+
+gcc-3.0 (1:3.0.1ds3-1) unstable; urgency=low
+
+  * Final gcc-3.0.1 release.
+  * Changed upstream: default of -flimit-inline is 600 (closes: #106716).
+  * Add fastjar man page (submitted by "The Missing Man Pages Project",
+    http://www.netmeister.org/misc/m2p2i/) (closes: #103051).
+  * Fixed in last upload as well: #105246.
+  * debian/patches/cpp-memory-leak.dpatch: New patch
+  * Disable installation of shared libgcc on s390 (Gerhard Tonn).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 20 Aug 2001 20:47:13 +0200
+
+gcc-3.0 (1:3.0.1ds2-0pre010811) unstable; urgency=high
+
+  * Update to CVS sources (010811). Includes s390 support.
+  * Add xlibs-dev to Build-Depends (libgcj).
+  * Enable java for powerpc, disable java for ia64.
+  * Enable ObjC garbage collection for all archs, which have a libgc5-dev
+    package.
+  * New patch libstdc++-codecvt (Michael Piefel) (closes: #104614).
+  * Don't strip static libgcj library (work around binutils bug #107812).
+  * Handle diversions for upgrade 3.0 -> 3.0.1 in gcc-3.0-sparc64 package
+    (closes: #107569).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 11 Aug 2001 20:42:15 +0200
+
+gcc-3.0 (1:3.0.1ds1-0pre010801) unstable; urgency=high
+
+  * Update to CVS sources (010801). (closes: #107012).
+  * Remove build dependency on non-free graphviz and include pregenerated
+    docs (closes: #107124).
+  * Fixed in 3.0.1 (closes: #99307).
+  * Updated m68k-updates patch (Roman Zippel).
+  * Another fix for ia64 packaging bits (Randolph Chung).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 31 Jul 2001 21:52:55 +0200
+
+gcc-3.0 (1:3.0.1ds0-0pre010727) unstable; urgency=high
+
+  * Update to CVS sources (010727).
+  * Add epoch to source version. Change '.dsx' to 'dsx', so that
+    3.1.1ds0 gt 3.1ds7 (closes: #106538).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 28 Jul 2001 09:56:29 +0200
+
+gcc-3.0 (3.0.1.ds0-0pre010723) unstable; urgency=high
+
+  * ia64 packaging bits (Randolph Chung) (closes: #106252).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 Jul 2001 23:02:03 +0200
+
+gcc-3.0 (3.0.1.ds0-0pre010721) unstable; urgency=high
+
+  * Update to CVS sources (010721).
+    - Remove patches applied upstream: libstdc++-limits.dpatch,
+      objc-data-references
+    - Updated other patches.
+  * Fix gij alternative (closes: #103468, #103883).
+  * Patch to fix bootstrap on sparc (closes: #103568).
+  * Corrected (closes: #105371) and updated README.Debian.
+  * m68k patches for sucessful bootstrap (Roman Zippel).
+  * Add libstdc++v3 porting hints to README.Debian and README.C++.
+  * m68k md fix (#105622) (Roman Zippel).
+  * debian/rules2: Disable non-functional ulimit on Hurd (#105884).
+  * debian/control: Require binutils (>= 2.11.90.0.24)
+  * Java is enabled for alpha (closes: #87300).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 22 Jul 2001 08:24:04 +0200
+
+gcc-3.0 (3.0.ds9-4) unstable; urgency=high
+
+  * Move this version to testing ASAP. testing still has a prerelease
+    version with now incompatible ABI's. If sparc doesn't build,
+    then IMHO it's better to remove it from testing.
+  * debian/control.m4: Set uploaders field. Adjust description of
+    gcc-3.0 (binary) package (closes: #102271, #102620).
+  * Separate gij.1 in it's own pseudo man page (closes: #99523).
+  * debian/patches/java-manpages.dpatch: New patch.
+  * libgcj: Install unversioned gij.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  3 Jul 2001 07:38:08 +0200
+
+gcc-3.0 (3.0.ds9-3) unstable; urgency=high
+
+  * Reenable configuration with posix threads on i386 (lost in hurd-i386
+    merge).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Jun 2001 22:21:45 +0200
+
+gcc-3.0 (3.0.ds9-2) unstable; urgency=medium
+
+  * Move this version to testing ASAP. testing still has a prerelease
+    version with now incompatible ABI's.
+  * Add libgcc0 and libgcc300 to the build conflicts (#102041).
+  * debian/README.FIRST: Removed (#101534).
+  * Updated subreg-byte patch (doc files).
+  * Disable java for the Hurd, mips and mipsel (#101570).
+  * Patch for building on the Hurd (#101708) (Jeff Bailey <jbailey@nisa.net>).
+  * Packaging fixes for the Hurd (#101711) (Jeff Bailey <jbailey@nisa.net>).
+  * Include pregenerated doxygen (1.2.6) docs for libstdc++-v3 (#101557).
+    The current doxygen-1.2.8.1 segaults.
+  * C++: Enable -fuse-cxa-atexit by default (#101901).
+  * Correct mail address in gccbug (#101743).
+  * Make rules resumable after failure in binary-xxx targets (#101637).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Jun 2001 16:04:53 +0200
+
+gcc-3.0 (3.0.ds9-1) unstable; urgency=low
+
+  * Final 3.0 release.
+  * Update libgcc version number (#100983, #100988, #101069, #101115, #101328).
+  * Updated hppa-build patch (Matt Taggart <taggart@carmen.fc.hp.com>).
+  * Disable java for hppa.
+  * Updated subreg-byte patch for sparc (Ben Collins).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 18 Jun 2001 18:26:04 +0200
+
+gcc-3.0 (3.0.ds8-0pre010613) unstable; urgency=low
+
+  * Update patches for recent (010613 23:13 +0200) CVS sources.
+  * Fix packaging bugs (#100459, #100447, #100483).
+  * Build-Depend on gawk, mawk doesn't work well with test_summary.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 13 Jun 2001 23:13:38 +0200
+
+gcc-3.0 (3.0.ds7-0pre010609) unstable; urgency=low
+
+  * Fix build dependency for the hurd (#99164).
+  * Update patches for recent (010609) CVS sources.
+  * Disable java on powerpc (link error in libjava).
+  * gcc-3.0-base.postinst: Don't prompt for non-interactive installs (#100110).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Jun 2001 09:45:57 +0200
+
+gcc-3.0 (3.0.ds6-0pre010526) unstable; urgency=high
+
+  * Urgency "high" for replacing the gcc-3.0 snapshots in testing, which
+    now are incompatile due to the changed ABIs.
+  * Upstream begins tagging with "gcc-3_0_pre_2001mmdd".
+  * Tighten dependencies to install only binary packages derived from
+    one source (#98851). Tighten libc6-dev dependency to match libc6.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 May 2001 11:35:31 +0200
+
+gcc-3.0 (3.0.ds6-0pre010525) unstable; urgency=low
+
+  * ATTENTION: The ABI (exception handling) changed. No upgrade path from
+    earlier snapshots (you had been warned in the postinst ...)
+    Closing #93597, #94576, #96448, #96461.
+    You have to rebuild
+  * HELP is appreciated for scanning the Debian BTS and sending followups
+    to bug reports!!!
+  * Should we name debian gcc uploads? What about a "still seeking
+    g++ maintainer" upload?
+  * Fixed in gcc-3.0: #97030
+  * Update patches for recent (010525) CVS sources.
+  * Make check depend on build target (fakeroot problmes).
+  * debian/rules.d/binary-libgcc.mk: new file, build first.
+  * Free memory detection on the hurd for running the testsuite.
+  * Update debhelper build dependency.
+  * libstdc++-doc: Include doxygen generated docs.
+  * Fix boring packaging bugs, too tired for appropriate changelogs ...
+    #93343, #96348, #96262, #97134, #97905, #96451, #95812, #93157
+  * Fixed bugs: #87000.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 May 2001 23:10:42 +0200
+
+gcc-3.0 (3.0.ds5-0pre010510) unstable; urgency=low
+
+  * Update patches for recent (010506) CVS sources.
+  * New version of source, as of 2001-05-10
+  * New version of gpc source, as of 2001-05-06 (disabled by default).
+  * Make gcc-3.0-sparc64 provide an alternative for sparc64-linux-gcc,
+    since it can build kernels just fine (it seems)
+  * Add hppa patch from Matt Taggart
+  * Fix objc info inclusion...now merged with gcc info
+  * Do not install the .la for libstdc++, since it confuses libtool linked
+    applications when libstdc++3-dev and libstdc++2.10-dev are both
+    installed (closes #97905).
+  * Fixed gcc-base and libgcc section/prio to match overrides
+
+ -- Ben Collins <bcollins@debian.org>  Mon,  7 May 2001 00:08:52 +0200
+
+gcc-3.0 (3.0.ds5-0pre010427) unstable; urgency=low
+
+  * Fixed priority for fastjar from optional to extra
+  * New version of source, as of 2001-04-27
+  * Fix description of libgcj-dev
+  * libffi-install: Make libffi installable
+  * Add libffi and libffi-dev packages. libffi is only enabled for java
+    targets right now. Perhaps more will be enabled later.
+  * Fixes to build cross compiler package (for avr)
+    (Hakan Ardo <hakan@debian.org>).
+  * Better fixincludes description (#93157).
+  * Remove all remnants of libg++
+  * Remove all hacks around libstdc++ version. Since we are strictly v3 now,
+    we can treat it like a normal shared lib, and not worry about all those
+    ABI changes.
+  * Remove all cruft control scripts. Note, debhelper will create scripts
+    that it needs to. It will do the doc link stuff and the ldconfig stuff
+    explicitly.
+  * Clean up the SONAME parsing stuff, make it a little more cleaner over
+    all the lib packages
+  * Make libffi install when built (IOW, whenever java is enabled). This
+    should obsolete the libffi package, which is old and broken
+  * Revert to normal sonames, except for ia64 (for now)
+  * Remove all references to dh_testversion, since they are deprecated for
+    Build-Depends
+  * Fix powerpc nof build
+  * Remove all references to the MULTILIB stuff, since the arches are
+    using specialized builds anyway (nof, softfloat).
+  * Added 64bit sparc64 package (gcc-3.0-sparc64, libgcc0-sparc64)
+  * Removed obsolete shlibs.local file
+
+ -- Ben Collins <bcollins@debian.org>  Sun, 15 Apr 2001 21:33:15 -0400
+
+gcc-3.0 (3.0.ds4-0pre010403) unstable; urgency=low
+
+  * debian/README: Updated for gcc-3.0
+  * debian/rules.patch: Added subreg-byte patch for sparc
+  * debian/rules.unpack: Update to current CVS for gcc tarball name
+  * debian/patches/subreg-byte.dpatch: sparc subreg-byte support
+  * debian/patches/gcc-rawhide.dpatch: Removed
+    debian/patches/gpc-2.95.dpatch: Removed
+    debian/patches/sparc32-rfi.dpatch: Removed
+    debian/patches/temporary.dpatch: Removed
+  * Moving to unstable now
+  * debian/patches/gcc-ppc-disable-shared-libgcc.dpatch: New patch,
+    disables shared libgcc for powerpc target, since it isn't compatible
+    with the EABI objects.
+  * Create $(with_shared_libgcc) var
+  * debian/rules.d/binary-gcc.mk: Use this new variable to determine if
+    the libgcc package actually has any files
+
+ -- Ben Collins <bcollins@debian.org>  Tue,  3 Apr 2001 23:00:55 -0400
+
+gcc-3.0 (3.0.ds2-0pre010223) experimental; urgency=low
+
+  * New snapshot. Use distinct shared object names for shared libraries:
+    we don't know if binary API's still change until the final release.
+  * Versioned package names.
+  * debian/control.m4: New file. Add gcc-base, libgcc0, libobjc1,
+    libstdc++-doc, libgcj1, libgcj1-dev, fastjar, fixincludes packages.
+    Remove gcc-docs package.
+  * debian/gcov.1: Remove.
+  * debian/*: Remove 2.95.x support. Prepare for 3.0.
+  * debian/patches: Remove 2.95.x patches.
+  * Changed source package name. It's not allowed anymore to overwrite
+    source packages with different content. Introducing a 'debian source
+    element' (.ds<num>), which is stripped again from the version number
+    for the binary packages.
+  * Fixed bugs and added functionality:
+    #26436, #27878, #33786, #34876, #35477, #42662, #46181, #42989,
+    #47981, #48530, #50529, #51227, #51456, #51651, #52382, #53698,
+    #55291, #55967, #56867, #58219, #59005, #59232, #59776, #64628,
+    #65687, #67631, #68632, #68963, #68987, #69530, #72933, #75120,
+    #75759, #76645, #76827, #83221, #87540
+  * libgcj fixes: 42894, #51266, #68560, #71187, #79984
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 Feb 2001 13:41:11 +0100
+
+gcc-2.95 (2.95.3-2.001222) experimental; urgency=low
+
+  * New upstream version 2.95.3 experimental (CVS 20001222).
+  * debian/control.in: Versioned package names, removal of snapshot logic.
+    Remove fake gcc-docs package.
+  * Reserve -1 release numbers for woody.
+  * Updated to gpc-20001218.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 22 Dec 2000 19:53:03 +0100
+
+gcc (2.95.2-20) unstable; urgency=low
+
+    * Apply patch from gcc-2_95-branch; remove ulimit for make check.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Dec 2000 17:01:13 +0100
+
+gcc (2.95.2-19) unstable; urgency=low
+
+  * Added testsuite-20001207 from current snapshots. We'll need results
+    for 2.95.2 to make sure there are no regressions against that release.
+    Dear build daemons and porters to other architectures, please send an
+    email to gcc-testresults@gcc.gnu.org.
+    You can do this by running "debian/rules mail-summary".
+  * Updated to gpc-20001206.
+  * Added S/390 patch prepared by Chu-yeon Park <kokids@debian.org> (#78983).
+  * debian/patches/libio.dpatch: Fix iostream doc (fixes #77647).
+  * debian/patches/gcc-doc.dpatch: Update URL (fixes #77542).
+  * debian/patches/gcc-reload1.dpatch Patch from the gcc-bug list which
+    fixes a problem in "long long" on i[345]86 (i686 was not affected).
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Dec 2000 12:30:32 +0100
+
+gcc (2.95.2-18) unstable; urgency=low
+
+  * debian/control.in: Fix syntax errors (fixes #76146, #76458).
+    Disable gpc on the hurd by request (#75686).
+  * debian/patches/arm-various.dpatch: Patches from Philip Blundell
+    for ARM arch (fixes #75801).
+  * debian/patches/gcc-alpha-mi-thunk.dpatch: Patches from Chris Chimelis
+    for alpha arch.
+  * debian/patches/g77-docs.dpatch: Adjust g77 docs (fixes #72594).
+  * Update gpc to gpc-20001118.
+  * Reenable gpc for alpha.
+  * debian/README.C++: Merge debian/README.libstdc++ and C++ FAQ information
+    provided by Matt Zimmermann.
+  * Build gcj only on architectures, where libgcj-2.95.1 can be built as well.
+    Probably needs some adjustments ...
+  * Conditionalize for chill, fortran, java, objc and chill.
+
+  * NOT APPLIED:
+    debian/patches/libstdc++-bastring.dpatch: Apply fix (fixes #75759).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 19 Nov 2000 10:40:41 +0100
+
+gcc (2.95.2-17) unstable; urgency=low
+
+  * Disable gpc for alpha.
+  * Include gpc-cpp in gpc package (fixes #74492).
+  * Don't build gcc-docs compatibility package anymore.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 11 Oct 2000 06:16:53 +0200
+
+gcc (2.95.2-16) unstable; urgency=low
+
+  * Applied the emdebian/cross compiler patch and documentation
+    (Frank Smith <smith@amirix.com>).
+  * Applied patch for avr target (Hakan Ardo <hakan@debian.org>).
+  * debian/control.in: Add awk to Build-Depends.
+    Tighten libc6-dev dependency for libstdc++-dev (fixes #73031,
+    #72531, #72534).
+  * Disable libobjc_gc for m68k again (fixes #74380).
+  * debian/patches/arm-namespace.dpatch: Apply patch from Philip
+    Blundell <pb@futuretv.com> to fix name space pollution on arm
+    (fixes #70937).
+  * Fix more warnings in STL headers (fixes #69352, #71943).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  9 Oct 2000 21:51:41 +0200
+
+gcc (2.95.2-15) unstable; urgency=low
+
+  * debian/control.in: Add libgc5-dev to build depends (fixes #67015).
+  * debian/rules.def: Build GC enabled ObjC runtime for sparc.
+  * Bug #58741 fixed (in some version since 2.95.2-5).
+  * debian/control.in: Recommend librx1g-dev, libgmp2-dev, libncurses5-dev
+    (unit dependencies).
+  * Patches from Marcus Brinkmann for the hurd (fixes #67763):
+    - debian/rules.defs: Disable objc_gc on hurd-i386.
+      Disable libg++ on GNU systems.
+    - debian/rules2: Set correct names of libstdc++/libg++
+      libraries on GNU systems.
+      Write out correct shlibs and shlibs.local file content.
+    - Keep _G_config.h for the Hurd.
+  * Apply patch for ObjC linker warnings.
+  * Don't apply gcj backport patch for sparc.
+  * Apply libio compatability patch
+  * debian/glibcver.sh: generate appropriate version for glibc
+  * debian/rules.conf: for everything after glibc 2.1, we always append
+    "-glibc$(ver)" to the C++ libs for linux.
+  * Back down gpc to -13 version (-14 wont compile on anything but i386
+    and m68k becuase of gpc).
+  * Remove extraneous and obsolete sparc64 patches/files from debian/*
+
+ -- Ben Collins <bcollins@debian.org>  Thu, 21 Sep 2000 08:08:35 -0400
+
+gcc-snapshot (20000901-2.2) experimental; urgency=low
+
+  * New snapshot.
+  * debian/rules2: Move tradcpp0 to cpp package.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  2 Sep 2000 01:14:28 +0200
+
+gcc-snapshot (20000802-2.1) experimental; urgency=low
+
+  * New snapshot.
+  * debian/rules2: Fixes. tradcpp0 is in gcc package, not cpp.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  3 Aug 2000 07:40:05 +0200
+
+gcc-snapshot (20000720-2) experimental; urgency=low
+
+  * New snapshot.
+  * Enable libstdc++-v3.
+  * debian/rules2: Don't use -D for /usr/bin/install.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 20 Jul 2000 22:33:37 +0200
+
+gcc (2.95.2-14) unstable; urgency=low
+
+  * Update gpc patch.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  5 Jul 2000 20:51:16 +0200
+
+gcc (2.95.2-13) frozen unstable; urgency=low
+
+  * Update debian/README: document how to compile 2.0.xx kernels; don't
+    register gcc272 as an alternative for gcc (closes #62419).
+    Clarify compiler setup (closes #65548).
+  * debian/control.in: Make libstdc++-dev depend on current version of g++.
+  * Undo CVS update from release -8 (problems on alpha, #55263).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 19 Jun 2000 23:06:48 +0200
+
+gcc (2.95.2-12) frozen unstable; urgency=low
+
+  * debian/gpc.postinst: Correct typo introduced with -11 (fixes #64193).
+  * debian/patches/gcc-rs600.dpatch: ppc codegen fix (fixes #63933).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 21 May 2000 15:56:05 +0200
+
+gcc (2.95.2-11) frozen unstable; urgency=medium
+
+  * Upload to unstable again (fixes critical #63784).
+  * Fix doc-base files (fixes important #63810).
+  * gpc wasn't built in -10 (fixes #63977).
+  * Make /usr/bin/pc an alternative (fixes #63888).
+  * Add SYSCALLS.c.X to gcc package.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 May 2000 22:17:44 +0200
+
+gcc (2.95.2-10) frozen; urgency=low
+
+  * debian/control.in: make gcc conflict on any version of egcc
+    (slink to potato upgrade problem, fixes grave #62084).
+  * Build protoize programs, separate out in new package (fixes #59436,
+    #62911).
+  * Create dummy gcc-docs package for smooth update from slink (fixes #62537).
+  * Add doc-base support for all -doc packages (fixes #63380).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  1 May 2000 22:24:28 +0200
+
+gcc (2.95.2-9) frozen unstable; urgency=low
+
+  * Disable the sparc-bi-arch.dpatch (patch from Ben Collins, built
+    for sparc as NMU 8.1) (fixes critical #61529 and #61511).
+    "Seems that when you compile gcc 2.95.x for sparc64-linux and compile
+     sparc32 programs, the code is not the same as sparc-linux compile for
+     sparc32 (this is a bug, and is fixed in gcc 2.96 CVS)."
+  * debian/patches/gcj-vs-iconv.dpatch: Option '--encoding' for
+    encoding of input files. Patch from Tom Tromey  <tromey@cygnus.com>
+    backported to 2.95.2 (fixes #42895).
+    Compile a Latin-1 encoded file with `gcj --encoding=Latin1 ...'.
+  * debian/control.in: gcc, g++ and gobjc suggest their corresponding
+    task packages (fixes #59623).
+
+ -- Matthias Klose <doko@debian.org>  Sat,  8 Apr 2000 20:19:15 +0200
+
+gcc (2.95.2-8) frozen unstable; urgency=low
+
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000313.
+  * debian/rules2: configure with --enable-java-gc=no for sparc. Fixes
+    gcj side of #60535.
+  * debian/rules.patch: Disable gcc-emit-rtl patch for all archs but
+    alpha. Disable g++-is-tree patch ("just for 2.95.1").
+  * debian/README: Update for gcc-2.95.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 27 Mar 2000 00:03:16 +0200
+
+gcc (2.95.2-7) frozen unstable; urgency=low
+
+  * debian/patches/gcc-empty-struct-init.dpatch; Apply patch from
+    http://gcc.gnu.org/ml/gcc-patches/2000-02/msg00637.html. Fixes
+    compilation of 2.3.4x kernels.
+  * debian/patches/gcc-emit-rtl.dpatch: Apply patch from David Huggins-Daines
+    <dhuggins@linuxcare.com> (backport from 2.96 CVS to fix #55263).
+  * debian/patches/gcc-pointer-arith.dpatch: Apply patch from Jim Kingdon
+    <kingdon@redhat.com> (backport from 2.96 CVS to fix #54951).
+
+ -- Matthias Klose <doko@debian.org>  Thu,  2 Mar 2000 23:16:43 +0100
+
+gcc (2.95.2-6) frozen unstable; urgency=low
+
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000220.
+  * Remove dangling symlink probably left over from libstdc++2.9
+    package (fixes #53661).
+  * debian/patches/gcc-alpha-complex-float.dpatch: Fixed patch by
+    David Huggins-Daines (fixes #58486).
+  * debian/g++.{postinst,prerm}: Remove outdated g++FAQ registration
+    (fixes #58253).
+  * debian/control.in: gcc-doc replaces gcc-docs (fixes #58108).
+  * debian/rules2: Include some fixed headers (asm, bits, linux, ...).
+  * debian/patches/{gcc-alpha-ev5-fix,libstdc++-valarray}.dpatch: Remove.
+    Applied upstream.
+  * debian/patches/libstdc++-bastring.dpatch: Add patch from
+    sicard@bigruth.solsoft.fr (fixes #56715).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 20 Feb 2000 15:08:13 +0100
+
+gcc (2.95.2-5) frozen unstable; urgency=low
+
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000116.
+  * Add more build dependencies (fixes #53204).
+  * debian/patches/gcc-alpha-complex-float.dpatch: Patch from
+    Joel Klecker <jk@espy.org> to compile glibc correctly on alpha.
+    "Should fix the g77 problems too."
+  * debian/patches/{libio,libstdc++-wall2}.dpatch. Remove patches
+    applied upstream.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 Jan 2000 19:16:54 +0100
+
+gcc (2.95.2-4) unstable; urgency=low
+
+  * debian/patches/libio.dpatch: Patch from Martin v. Loewis.
+    (fixes: #35628).
+  * debian/patches/libstdc++-deque.dpatch: Patch from Martin v. Loewis.
+    (fixes: #52689).
+  * debian/control.in: Updated Build-Depends, removed outdated README.build.
+    Fixes #51246.
+  * Tighten dependencies to cpp (>= 2.95.2-4) (closes: #50294).
+  * debian/rules.patch: Really do not apply patches/gcj-backport.dpatch.
+    Fixes #51636.
+  * Apply updated sparc-bi-arch.dpatch from Ben Collins.
+  * libstdc++: Define wstring type, if __ENABLE_WSTRING is defined. Request
+    from the author of the War FTP Daemon for Linux ("Jarle Aase"
+    <jgaa@jgaa.com>).
+  * debain/g++.preinst: Remove dangling sysmlinks (fixes #52359).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 19 Dec 1999 21:53:48 +0100
+
+gcc (2.95.2-3) unstable; urgency=low
+
+  * debian/rules2: Don't install $(gcc_lib_dir)/include/asm; these are
+    headers fixed for glibc-1.x (closes: #49434).
+  * debian/patches/cpp-dos-newlines.dpatch: Keep CR's without
+    following LF (closes: #49186).
+  * Bug #37358 (internal compiler errors when building vdk_0.6.0-5)
+    fixed in gcc-2.95.? (closes: #37358).
+  * Apply patch gcc-alpha-ev5-fix from Richard Henderson <rth@cygnus.com>
+    (should fix #48527 and #46963).
+  * debian/README.Bugs: Documented non bug #44554.
+  * Applied patch from Alexandre Oliva to fix gpc boostrap on alpha.
+    Reenabled gpc on all architectures.
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 19991108.
+  * Explicitely generate postinst/prerm chunks for usr/doc transition.
+    debhelper currently doesn't handle generation for packages with
+    symlinked directories.
+  * debian/patches/libstdc++-wall3.dpatch: Fix warnings in stl_deque.h
+    and stl_rope.h (closes: #46444, #46720).
+  * debian/patches/gcj-backport.dpatch: Add file, don't apply (yet).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 10 Nov 1999 18:58:45 +0100
+
+gcc (2.95.2-2) unstable; urgency=low
+
+  * New gpc-19991030 snapshot.
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 19991103.
+  * Reintegrated sparc patches (bcollins@debian.org), which were lost
+    in 2.95.2-1.
+  * debian/rules2: Only install $(gcc_lib_dir)/include/asm, when existing.
+  * debian/patches/gpc-2.95.{dpatch,diff}: updated patch to drop
+    initialization in stor-layout.c.
+  * debian/NEWS.gcc: Updated for gcc-2.95.2.
+  * debian/bugs/bug-...: Removed testcases for fixed bugs.
+  * debian/patches/...dpatch: Removed patches applied upstream.
+  * debian/{rules2,g++.postinst,g++.prerm}: Handle c++ alternative.
+  * debian/changelog: Merged gcc272, egcs and snapshot changelogs.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  2 Nov 1999 23:09:23 +0200
+
+gcc (2.95.2-1.1) unstable; urgency=low
+
+  * Most of the powerpc patches have been applied upstream.  Remove all
+    but ppc-ice, ppc-andrew-dwarf-eh, and ppc-descriptions.
+  * mulilib-install.dpatch was definitely a bad idea.  Fix it properly
+    by using install -D.
+  * Also, don't make directories before installing any more.  Simplifies
+    rules a (tiny) bit.
+  * Do not build with LDFLAGS=-s.  Everything gets stripped out anyway by
+    dh_strip -a -X_debug; so leave the binaries in the build tree with
+    debugging symbols for simplified debugging of the packages.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sat, 30 Oct 1999 12:40:12 -0400
+
+gcc (2.95.2-1) unstable; urgency=low
+
+  * gcc-2.95.2 release (taken from the CVS archive). -fstrict-aliasing
+    is disabled upstream.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 25 Oct 1999 10:26:19 +0200
+
+gcc (2.95.2-0pre4) unstable; urgency=low
+
+  * Updated to cvs updates of the gcc-2_95-branch until 19991021.
+  * Updated gpc to gpc-19991018 snapshot (closes: #33037, #47453).
+    Enable gpc for all architectures ...
+  * Document gcc exit codes (closes: #43863).
+  * According to the bug submitter (Sergey V Kovalyov <sqk0316@scires.nyu.edu>)
+    the original source of these CERN librarties is outdated now. The latest
+    version of cernlibs compiles and works fine with slink (closes #31546).
+  * According to the bug submitter (Gergely Madarasz <gorgo@sztaki.hu>),
+    the problem triggered on i386 cannot be reproduced with the current
+    jade and php3 versions anymore (closes: #35215).
+  * Replace corrupted m68k-pic.dpatch (from Roman Hodek and Andreas Schwab
+    <Roman.Hodek@informatik.uni-erlangen.de> <schwab@suse.de> and apply to
+    all architectures (closes: #48011).
+  * According to the bug submitter (Herbert Xu <herbert@gondor.apana.org.au>)
+    this bug "probably has been fixed". Setting it to severity "fixed"
+    (fixes: #39616), will close it later ...
+  * debian/README.Bugs: Document throwing C++ exceptions "through" C
+    libraries (closes: #22769).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 22 Oct 1999 20:33:00 +0200
+
+gcc (2.95.2-0pre3) unstable; urgency=low
+
+  * Updated to cvs updates of the gcc-2_95-branch until 19991019.
+  * Apply NMU patches (closes: #46217).
+  * debian/control.in: Fix egcs64 conflict-dependency for sparc
+    architecture (closes: #47088).
+  * debian/rules2: dbg-packages share doc dir with lib packages
+    (closes #45067).
+  * debian/patches/gcj-debian-policy.dpatch: Patch from Stephane
+    Bortzmeyer to conform to Debian policy (closes: #44463).
+  * debian/bugs/bug-*: Added test cases for new bug reports.
+  * debian/patches/libstdc++-bastring.dpatch: Patch by Richard Kettlewell
+    (closes #46550).
+  * debian/rules.patch: Apply libstdc++-wall2 patch (closes #46609).
+  * debian/README: Fix typo (closes: #45253).
+  * debian/control.in: Remove primary/secondary distinction;
+    dbg-packages don't provide their normal counterparts (closes #45206).
+  * debian/rules.patch: gcc-combine patch applied upstream.
+  * debian/rules2: Only use mail if with_check is set (off by default).
+  * debian/rules.conf: Tighten binutils dependency to 2.9.5.0.12.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 19 Oct 1999 20:33:00 +0200
+
+gcc (2.95.2-0pre2.0.2) unstable; urgency=HIGH (for m68k)
+
+  * Binary-only NMU for m68k as quick fix for another bug; the patch
+    is in CVS already, too.
+  * Applied another patch by Andreas Schwab to fix %a5 restauration in
+    some cases.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>  Thu, 30 Sep 1999 16:09:15 +0200
+
+gcc (2.95.2-0pre2.0.1) unstable; urgency=HIGH (for m68k)
+
+  * Binary-only NMU for m68k as quick fix for serious bugs; the patches
+    are already checked into gcc CVS and should be in the next official
+    version, too.
+  * Applied two patches by Andreas Schwab to fix -fpic and loop optimization.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>  Mon, 27 Sep 1999 15:32:49 +0200
+
+gcc (2.95.2-0pre2) unstable; urgency=low
+
+  * Fixed in 2.95.2 (closes: #43478).
+  * Previous version had Pascal examples missing in doc directory.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 8 Sep 1999 22:18:17 +0200
+
+gcc (2.95.2-0pre1) unstable; urgency=low
+
+  * Updated to cvs updates of the gcc-2_95-branch until 19990828.
+  * Apply work around memory corruption (just for 2.95.1)  by
+    Daniel Jacobowitz <dan@debian.org>.
+  * debian/patches/libstdc++-wall2.dpatch: Patch from Franck Sicard
+    <sicard@miniruth.solsoft.fr> to fix some warnings (closes: #44670).
+  * debian/patches/libstdc++-valarray.dpatch: Patch from Hideaki Fujitani
+    <fjtani@flab.fujitsu.co.jp> to fix a bug in valarray_array.h.
+  * Applied NMU from Jim Pick minus the jump.c and fold-const.c patches
+    already in the gcc-2_95-branch (closes: #44690).
+  * Conform to debian-java policy (closes: #44463).
+  * Move docs to /usr/share/doc (closes: #44782).
+  * Remove debian/patches/gcc-align.dpatch applied upstream.
+  * debian/*.postinst: Call install-info only, when configuring.
+  * debian/*.{postinst,prerm}: Add #DEBHELPER# comments to handle
+    /usr/doc -> /usr/share/doc transition.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  8 Sep 1999 22:18:17 +0200
+
+gcc (2.95.1-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * ARM platform no longer needs library-prefix patch.
+  * Updated patches from Philip Blundell.
+
+ -- Jim Pick <jim@jimpick.com>  Wed,  8 Sep 1999 20:14:07 -0700
+
+gcc (2.95.1-2) unstable; urgency=low
+
+  * debian/gcc.{postinst,prerm}: gcc provides an alternative for
+    sparc64-linux-gcc.
+  * Applied patch from Ben Collins to enable bi-architecture (32/64)
+    support for sparc.
+  * Rebuild debian/control and debian/rules.parameters after unpacking.
+  * debian/rules2: binary-indep. Conditionalize on with_pascal.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  4 Sep 1999 13:47:30 +0200
+
+gcc (2.95.1-1) unstable; urgency=low
+
+  * Updated to release gcc-2.95.1 and cvs updates of the gcc-2_95-branch
+    until 19990828.
+  * debian/README.gcc: Updated NEWS file to include 2.95 and 2.95.1 news.
+  * debian/README.java: New file.
+  * debian/rules.defs: Disabled gpc for alpha, arm. Disabled ObjC-GC
+    for alpha.
+  * debian/rules [clean]: Remove debian/rules.parameters.
+  * debian/rules2 [binary-arch]: Call dh_shlibdeps with LD_LIBRARY_PATH set
+    to installation dir of libstdc++. Why isn't this the default?
+  * debian/control.in: *-dev packages do not longer conflict with
+    libg++272-dev package.
+  * Apply http://egcs.cygnus.com/ml/gcc-patches/1999-08/msg00599.html.
+  * Only define BAD_THROW_ALLOC, when using exceptions (fixes #43462).
+  * For ObjC (when configured with GC) recommend libgc4-dev, not libgc4.
+  * New version of 68060 build patch.
+  * debian/rules.conf: For m68k, depend on binutils version 2.9.1.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 28 Aug 1999 18:16:31 +0200
+
+gcc (2.95.1-0pre2) unstable; urgency=medium
+
+  * gpc is back again (fixes grave #43022).
+  * debian/patches/gpc-updates.dpatch: Patches sent to upstream authors.
+  * Work around the fatal dependtry assertion failure bug in dpkg (hint
+    from "Antti-Juhani Kaijanaho" <ajk@debian.org>, fixes important #43072).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 16 Aug 1999 19:34:14 +0200
+
+gcc (2.95.1-0pre1) unstable; urgency=low
+
+  * Updated to cvs 19990815 gcc-2_95-branch; included install docs and
+    FAQ from 2.95 release; upload source package as well.
+  * Source package contains tarballs only (gcc, libg++, installdocs).
+  * debian/rules: Splitted into debian/rules{,.unpack,.patch,.conf,2}.
+  * debian/gcc.postinst: s/any key/RETURN; warn only when upgrading from
+    pre 2.95 version; reference /usr/doc, not /usr/share/doc.
+  * Checked syntax for attributes of functions; checked for #35068;
+    checked for bad gmon.out files (at least with libc6 2.1.2-0pre5 and
+    binutils 2.9.1.0.25-2 the problem doesn't show up anymore).
+  * debian/patches/cpp-macro-doc.dpatch: Document macro varargs in cpp.texi.
+  * gcc is primary compiler for all platforms but m68k. Setting
+    severity of #22513 to fixed.
+  * debian/patches/gcc-default-arch.dpatch: New patch to enable generation
+    of i386 instruction as default (fixes #42743).
+  * debian/rules: Removed outdated gcc NEWS file (fixes #42742).
+  * debian/patches/libstdc++-out-of-mem.dpatch: Throw exception instead
+    of aborting when out of memory (fixes #42622).
+  * debian/patches/cpp-dos-newlines.dpatch: Handle ibackslashes after
+    DOS newlines (fixes #29240).
+  * Fixed in gcc-2.95.1: #43001.
+  * Bugs closed in this version:
+    Closes: #11525, #12253, #22513, #29240, #35068, #36182, #42584, #42585,
+    #42602, #42622, #42742 #42743, #43001, #43002.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 15 Aug 1999 10:31:50 +0200
+
+gcc (2.95-3) unstable; urgency=high
+
+  * Provide /lib/cpp again (fixes important bug #42524).
+  * Updated to cvs 19990805 gcc-2_95-branch.
+  * Build with the default scheduler.
+  * Apply install-multilib patch from Dan Jacobowitz.
+  * Apply revised cpp-A- patch from Dan Jacobowitz.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  6 Aug 1999 07:25:19 +0200
+
+gcc (2.95-2) unstable; urgency=low
+
+  * Remove /lib/cpp. This driver uses files from /usr/lib/gcc-lib anyway.
+  * The following bugs are fixed (compared to egcs-1.1.2).
+    Closes: #4429, #20889, #21122, #26369, #28417, #28261, #31416, #35261,
+    #35900, #35906, #38246, #38872, #39098, #39526, #40659, #40991, #41117,
+    #41290, #41302, #41313.
+  * The following by Joel Klecker:
+    - Adopt dpkg-architecture variables.
+    - Go back to SHELL = bash -e or it breaks where /bin/sh is not bash.
+    - Disabled the testsuite, it is not included in the gcc 2.95 release.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 31 Jul 1999 18:00:42 +0200
+
+gcc (2.95-1) unstable; urgency=low
+
+  * Update for official gcc-2.95 release.
+  * Built without gpc.
+  * debian/rules: Remove g++FAQ from rules, which is outdated.
+    For ix86, build for i386, not i486.
+  * Apply patch from Jim Pick for building multilib package on arm.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 31 Jul 1999 16:38:21 +0200
+
+gcc (2.95-0pre10) unstable; urgency=low
+
+  * Use ../builddir-gcc-$(VER) by default instead of ./builddir; upstream
+    strongly advises configuring outside of the source tree, and it makes
+    some things much easier.
+  * Add patch to prevent @local branches to weak symbols on powerpc (fixes
+    apt compilation).
+  * Add patch to make cpp -A- work as expected.
+  * Renamed debian/patches/ppc-library-prefix.dpatch to library-prefix.dpatch;
+    apply on all architectures.
+  * debian/control.in: Remove snapshot dependencies.
+  * debian/*.postinst: Reflect use of /usr/share/{info,man}.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Thu, 22 Jul 1999 19:27:12 -0400
+
+gcc (2.95-0pre9) unstable; urgency=low
+
+  * The following bugs are fixed (compared to egcs-1.1.2): #4429, #20889,
+    #21122, #26369, #28417, #28261, #35261, #38246, #38872, #39526, #40659,
+    #40991, #41117, #41290.
+  * Updated to CVS gcc-19990718 snapshot.
+  * debian/control.in: Removed references to egcs in descriptions.
+    Changed gcj's Recommends libgcj-dev to Depends.
+  * debian/rules: Apply ppc-library-prefix for alpha as well.
+  * debian/patches/arm-config.dpatch: Updated patch sent by Jim Pick.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Jul 1999 12:21:07 +0200
+
+gcc (2.95-0pre8) unstable; urgency=low
+
+  * Updated CVS.
+  * debian/copyright: s%doc/copyright%share/common-licenses%
+  * debian/README.Bugs: s/egcs.cygnus.com/gcc.gnu.org/ s/egcs-bugs/gcc-bugs/
+  * debian/patches/reporting.dpatch: Remake diff for current sources.
+  * debian/libstdc++-dev.postinst: It's /usr/share/info/iostream.info.
+  * debian/rules: Current dejagnu snapshot reports a framework version
+    of 1.3.1.
+
+ -- Joel Klecker <espy@debian.org>  Sun, 18 Jul 1999 02:09:57 -0700
+
+gcc-snapshot (19990714-0pre6) experimental; urgency=low
+
+  * Updated to CVS gcc-19990714 snapshot.
+  * Applied ARM patch (#40515).
+  * Converted DOS style linefeeds in debian/patches/ppc-* files.
+  * debian/rules: Reflect change in gcc/version.c; use sh -e as shell:
+    for some obscure reason, bash -e doesn't work.
+  * Reflect version change for libstdc++ (2.10). Remove libg++-name
+    patch; libg++ now has version 2.8.1.3. Removed libc version from
+    the package name.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 14 Jul 1999 18:43:57 +0200
+
+gcc-snapshot (19990625-0pre5.1) experimental; urgency=low
+
+  * Non-maintainer upload.
+  * Added ARM specific patch.
+
+ -- Jim Pick <jim@jimpick.com>  Tue, 29 Jun 1999 22:36:08 -0700
+
+gcc-snapshot (19990625-0pre5) experimental; urgency=low
+
+  * Updated to CVS gcc-19990625 snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 25 Jun 1999 16:11:53 +0200
+
+gcc-snapshot (19990609-0pre4.1) experimental; urgency=low
+
+  * Added and re-added a few last PPC patches.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sat, 12 Jun 1999 16:48:01 -0500
+
+gcc-snapshot (19990609-0pre4) experimental; urgency=low
+
+  * Updated to CVS egcs-19990611 snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 11 Jun 1999 10:20:09 +0200
+
+gcc-snapshot (19990609-0pre3) experimental; urgency=low
+
+  * CVS gcc-19990609 snapshot.
+  * New gpc-19990607 snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  9 Jun 1999 19:40:44 +0200
+
+gcc-snapshot (19990524-0pre1) experimental; urgency=low
+
+  * egcs-19990524 snapshot.
+  * First snapshot of the gcc-2_95-branch. egcs-1.2 is renamed to gcc-2.95,
+    which is now the "official" successor to gcc-2.8.1. The full version
+    name is: gcc-2.95 19990521 (prerelease).
+  * debian/control.in: Changed maintainers to `Debian GCC maintainers'.
+  * Moved all version numbers to epoch 1.
+  * debian/rules: Major changes. The support for secondary compilers
+    was already removed for the egcs-1.2 snapshots. Many fixes by
+    Joel Klecker <espy@debian.org>.
+    - Send mail to Debian maintainers for successful builds.
+    - Fix VER and VERNO sed expressions.
+    - Replace remaining GNUARCH occurrences.
+  * New gpc snapshot (but don't build).
+  * debian/patches/valarray.dpatch: Backport from libstdc++-v3.
+  * debian/gcc-doc.*: Info is now gcc.info* (Joel Klecker <espy@debian.org>).
+  * Use cpp driver provided by the package.
+  * New script c89 (fixes #28261).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 22 May 1999 16:10:36 +0200
+
+egcs (1.1.2-2) unstable; urgency=low
+
+  * Integrate NMU's for arm and sparc (fixes #37582, #36857).
+  * Apply patch for the Hurd (fixes #37753).
+  * Describe open bugs in TODO.Debian. Please have a look if you can help.
+  * Update README / math functions section (fixes #35906).
+  * Done by J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>:
+    - At Richard Braakman's request, made -dbg packages for libstdc++
+      and libg++.
+    - Provide egcc(1) (fixes lintian error).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 May 1999 14:30:56 +0200
+
+egcs-snapshot (19990502-1) experimental; urgency=low
+
+  * New snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  6 May 1999 11:51:02 +0200
+
+egcs-snapshot (19990418-2) experimental; urgency=low
+
+  * Merged Rays changes to build debug packages.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 21 Apr 1999 16:54:56 +0200
+
+egcs-snapshot (19990418-1) experimental; urgency=low
+
+  * New snapshot.
+  * Disable cpplib.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 19 Apr 1999 11:32:19 +0200
+
+egcs (1.1.2-1.2) unstable; urgency=low
+
+  * NMU for arm
+  * Added arm-optimizer.dpatch with optimizer workaround for ARM
+
+ -- Jim Pick <jim@jimpick.com>  Mon, 19 Apr 1999 06:17:13 -0700
+
+egcs (1.1.2-1.1) unstable; urgency=low
+
+  * NMU for sparc
+  * Included dpatch to modify the references to gcc/crtstuff.c so that
+    __register_frame_info is not a weak reference. This allows potato to
+    remain binary compatible with slink, while still retaining compatibility
+    with other sparc/egcs1.1.2 distributions. Diff in .dpatch format has
+    been sent to the maintainer with a note it may not be needed for 1.1.3.
+
+ -- Ben Collins <bcollins@debian.org>  Tue, 27 Apr 1999 10:15:03 -0600
+
+egcs (1.1.2-1) unstable; urgency=low
+
+  * Final egcs-1.1.2 release built for potato as primary compiler
+    for all architectures except m68k.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Thu,  8 Apr 1999 13:14:29 +0200
+
+egcs-snapshot (19990321-1) experimental; urgency=low
+
+  * New snapshot.
+  * Disable gpc.
+  * debian/rules: Simplified (no secondary compiler, bumped all versions
+    to same epoch, libapi patch is included upstream).
+  * Separated out cpp documentation to cpp-doc package.
+  * Fixed in this version: #28417.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 23 Mar 1999 02:11:18 +0100
+
+egcs (1.1.2-0slink2) stable; urgency=low
+
+  * Applied H.J.Lu's egcs-19990315.linux patch.
+  * Install faq.html and egcs-1.1.2 announcment.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 23 Mar 1999 01:14:54 +0100
+
+egcs (1.1.2-0slink1) stable; urgency=low
+
+  * Final egcs-1.1.2 release; compiled with glibc-2.0 for slink on i386.
+  * debian/control.in: gcc provides egcc, when FIRST_PRIMARY defined.
+  * Fixes #30767, #32278, #34252, #34352.
+  * Don't build the libstdc++.so.2.9 library on architectures, which have
+    switched to glibc-2.1.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 17 Mar 1999 12:55:59 +0100
+
+egcs (1.1.1.63-2.2) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Incorporate patch from Joel Klecker to fix snapshot packages
+    by moving/removing the application of libapi.
+  * Disable the new libstdc++-dev-config and the postinst message in
+    glibc 2.1 versions.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Mon, 12 Mar 1999 14:16:02 -0500
+
+egcs (1.1.1.63-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Compile with glibc 2.1 release version.
+  * New upstream version egcs-1.1.2 pre3.
+  * Miscellaneous rules updates (see changelog.snapshot).
+  * New set of powerpc-related patches from Franz Sirl,
+    <fsirl@kernel.crashing.org>.
+  * Disable libgcc.dpatch (new solution implemented upstream).  Remove it.
+  * Also pass $target to config.if.
+  * Enable Dwarf2 EH for powerpc.  Bump the C++ binary version.  No
+    loss in -backwards- compatibility as far as I can tell, so add a
+    compatibility symlink, and add to shlibs file.
+  * Add --no-backup-if-mismatch to the debian/patches/*.dpatch files,
+    to prevent bogus .orig's in diffs.
+  * Merged with (unreleased) 1.1.1.62-1 and 1.1.1.63-{1,2} packages from
+    Matthias Klose <doko@debian.org>.
+  * Stop adding a backwards compatibility link for egcs-nof on powerpc.
+    To my knowledge, nothing uses it.  Do add the libstdc++ API change
+    link, though.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Mon, 8 Mar 1999 14:24:01 -0500
+
+egcs (1.1.1.63-2) stable; urgency=low
+
+  * Provide a libstdc++ with a shared object name, which is compatible
+    to other distributions. Documented the change in README.Debian,
+    the libstdc++-2.9.postinst and the libstdc++-dev-config script.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 12 Mar 1999 00:36:20 +0100
+
+egcs (1.1.1.63-1.1) unstable; urgency=low
+
+  * Non-Maintainer release.
+  * Build against glibc 2.1.
+  * Make egcs the primary compiler on i386.
+  * Also confilct with egcc (<< FIRST_PRIMARY)
+    if FIRST_PRIMARY is defined.
+    (this tells dpkg that gcc completely obsoletes egcc)
+  * Remove hjl-12 patch again, HJL says it should not be
+    necessary with egcs 1.1.2.
+    (as per forwarded reply from Christopher Chimelis)
+  * Apply libapi patch in clean target before regenerating debian/control
+    and remove the patch afterward. Otherwise, the libstdc++ and libg++
+    package names are generated wrong on a glibc 2.1 system.
+
+ -- Joel Klecker <espy@debian.org>  Tue,  9 Mar 1999 15:31:02 -0800
+
+egcs (1.1.1.63-1) unstable; urgency=low
+
+  * New upstream version egcs-1.1.1-pre3.
+  * Applied improved libstdc++ warning patch from Rob Browning.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  9 Mar 1999 16:14:07 +0100
+
+egcs (1.1.1.62-1) unstable; urgency=low
+
+  * New upstream version egcs-1.1.1-pre2.
+  * New upstream version libg++-2.8.1.3.
+  * Readded ARM support
+  * Readded hjl-12 per request from Christopher C Chimelis
+    <chris@classnet.med.miami.edu>
+
+ -- Matthias Klose <doko@debian.org>  Fri, 26 Feb 1999 09:54:01 +0100
+
+egcs-snapshot (19990224-0.1) experimental; urgency=low
+
+  * New snapshot.
+  * Add the ability to disable CPPLIB by setting CPPLIB=no in
+    the environment.
+  * Disable gpc for powerpc; I spent a long time getting it to
+    make correctly, and then it goes and ICEs.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Tue, 24 Feb 1999 23:34:12 -0500
+
+egcs (1.1.1.61-1) unstable; urgency=low
+
+  * New upstream version egcs-1.1.1-pre1.
+  * debian/control.in: Applied patch from bug report #32987.
+  * Split up H.J.Lu's hjl-19990115-linux patch into several small
+    chunks: libapi, arm-mips, libgcc, hjl-other. The changelog.Linux
+    aren't included in the separate chunks. Please refer to the
+    unmodified hjl-19990115-linux patch file in the egcs source pkg.
+  * Apply warning patch to fix the annoying spew you get if you try to
+    use ropes or deques with -Wall (which makes -Wall mostly useless for
+    spotting errors in your own code). Fixes #32996.
+  * debian/rules: Unapply patches in the exact reverse order they were
+    applied.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 20 Feb 1999 22:06:21 +0100
+
+egcs (1.1.1-5) frozen unstable; urgency=medium
+
+  * Move libgcc.map file to g++ package, where gcc is the secondary
+    compiler (fixes #32329, #32605, #32631).
+  * Prepare to rename libstdc++2.9 package for glibc-2.1 (fixes #32148).
+  * Apply NMU patch for arm architecure (fixes #32367).
+  * Don't apply hjl-12 patch for alpha architectures (requested by the
+    alpha developers, Christopher C Chimelis <chris@classnet.med.miami.edu>).
+  * Call makeinfo with --no-validate to fix obscure build failure on alpha.
+  * Build gpc info files in doc subdirectory.
+  * Remove c++filt diversion (C++ name demangling patch is now in binutils,
+    fixes #30820 and #32502).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 31 Jan 1999 23:19:35 +0100
+
+egcs (1.1.1-4.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Pascal doesn't build for ARM.
+
+ -- Jim Pick <jim@jimpick.com>  Sun, 24 Jan 1999 16:13:34 -0800
+
+egcs (1.1.1-4) frozen unstable; urgency=high
+
+  * Don't strip compiler libraries libgcc.a libobjc.a libg2c.a libgpc.a
+  * Move Pascal examples to the right place (fixes #32149, part 1).
+  * Add dependencies for switching from secondary to primary compiler,
+    if FIRST_PRIMARY is defined (fixes #32149, part 2).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Jan 1999 16:51:30 +0100
+
+egcs (1.1.1-3) frozen unstable; urgency=low
+
+  * Updated with the H.J.Lu's hjl-19990115-linux patch (fixes the
+    __register_frame_info problems, mips and arm port included).
+  * Update gpc to 19990118 (beta release candidate).
+  * Strip static libraries (fixes #31247 and #31248).
+  * Changed maintainer address.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 19 Jan 1999 16:34:28 +0100
+
+egcs (1.1.1-2) frozen unstable; urgency=low
+
+  * Moved egcs-docs, g77-doc and gpc-doc packages to doc section.
+  * Downgraded Recommends: egcs-docs to Suggests: egcs-docs dependencies
+    (for archs, where egcs is the primary compiler).
+  * Add 'Suggests: stl-manual' dependency to libstdc++2.9-dev.
+  * Applied one more alpha patch:
+    ftp://ftp.yggdrasil.com/private/hjl/egcs/1.1.1/egcs-1.1.1.diff.12.gz
+  * Applied PPro optimization patch.
+  * Apply emit-rtl-nan patch.
+  * Upgraded to libg++-2.8.1.2a-19981218.tar.gz.
+  * Upgraded to gpc-19981218.
+  * Make symlinks for gobjc, libstdc++2.9-dev and libg++2.8.2 doc directories.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 23 Dec 1998 18:04:53 +0200
+
+egcs-snapshot (19981211-1) experimental; urgency=low
+
+  * New snapshot.
+  * Adapted gpc to egcs-2.92.x (BOOT_CFLAGS must include -g).
+  * New libg++-2.8.1.2a-19981209.tar.gz.
+  * debian/rules: new target mail-summary.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 11 Dec 1998 18:14:53 +0200
+
+egcs (1.1.1-1) frozen unstable; urgency=high
+
+  * Final egcs-1.1.1 release.
+  * The last version depended on a versioned libc6 again.
+  * Add lost dependency for libg++ on libstdc++.
+  * Added debian-libstdc++.sh script to generate a libstdc++ on a Linux
+    system, which doesn't use the libapi patch.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Wed,  2 Dec 1998 12:06:15 +0200
+
+egcs (1.1.0.91.59-2) frozen unstable; urgency=high
+
+  * Fixes bugs from libc6 2.0.7u-6 upload without dependency line
+    Conflicts: libstdc++-2.9 (<< 2.91.59): #30019, #30066, #30078.
+  * debian/copyright: Updated URLs.
+  * gcc --help now mentions /usr/doc/debian/bug-reporting.txt.
+  * Install README.Debian and include information about patches applied.
+  * Depend on unversioned libc6 on i386, such that libstdc++2.9 can be used
+    on a hamm system.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Fri, 27 Nov 1998 18:32:02 +0200
+
+egcs (1.1.0.91.59-1) frozen unstable; urgency=low
+
+  * This is egcs-1.1.1 prerelease #3, compiled with libc6 2.0.7u-6.
+  * Added dependency for libstdc++2.9-dev on g++ (fixes #29631).
+  * Package g77 provides f77 (fixes #29817).
+  * Already fixed in earlier egcs-1.1 releases: #2493, #25271, #10620.
+  * Bugs reported for gcc-2.7.x and fixed in the egcs version of gcc:
+    #2493, #4430, #4954, #5367, #6047, #10612, #12375, #20606, #24788, #26100.
+  * Upgraded libg++ to libg++-2.8.1.2a-19981114.
+  * Upgraded gpc to gpc-19981124.
+  * Close #25869: egcs and splay maintainers are unable to reproduce this
+    bug with the current Debian packages. Bug submitter doesn't respond.
+  * Close #25407: egcs maintainer cannot reproduce this bug with the current
+    Debian compiler. Bug submitter doesn't respond.
+  * Use debhelper 1.2.7 for building.
+  * Replace the libstdc++ and libg++ compatibility links with fake libraries.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Wed, 25 Nov 1998 12:11:42 +0200
+
+egcs (1.1.0.91.58-5) frozen unstable; urgency=low
+
+  * Applied patch to build on the m68060.
+  * Added c++filt and c++filt.1 to the g++ package.
+  * Updated gpc to gpc-981105; fixes some regressions compared to egcs-1.1.
+  * Separated out g77 and gpc doumentation to new packages g77-doc and gpc-doc.
+  * Closed bugs (#22158).
+  * Close #20248; on platforms where gas and gld are the default versions,
+    it makes no difference to configure with or without enable-ld.
+  * Close #24349. The bugs are in the amulet source.
+    See http://www.cs.cmu.edu/afs/cs/project/amulet/www/FAQ.html#GCC28x
+  * Rename gcc.info* files to egcs.info* (fixes #24088).
+  * Documented known bugs (and workarounds) in BUGS.Debian.
+  * Fixed demangling of C++ names (fixes #28787).
+  * Applied patch form aspell to libstdc++/stl/stl_rope.h.
+  * Updated from cvs 16 Nov 1998.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 17 Nov 1998 09:41:24 +0200
+
+egcs-snapshot (19981115-2) experimental; urgency=low
+
+  * New snapshot. Disabled gpc.
+  * New packages g77-doc and gpc-doc.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 16 Nov 1998 12:48:09 +0200
+
+egcs (1.1.0.91.58-3) frozen unstable; urgency=low
+
+  * Previous version installed in potato, not slink.
+  * Updated from cvs 3 Nov 1998.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 3 Nov 1998 18:34:44 +0200
+
+egcs (1.1.0.91.58-2) unstable; urgency=low
+
+  * [debian/rules]: added targets to apply and unapply patches.
+  * [debian/README.patches]: New file.
+  * Moved patches dir to debian/patches. debian/rules has to select
+    the patches to apply.
+  * Manual pages for genclass and gcov (fixes #5995, #20950, #22196).
+  * Apply egcs-1.1-reload patch needed for powerpc architecture.
+  * Fixed bugs (#17768, #20252, #25508, #27788).
+  * Reapplied alpha patch (#20875).
+  * Fixes first part of #22513, extended README.Debian (combining C & C++).
+  * Already fixed in earlier egcs-1.1 releases: #17963, #20252, #20524,
+    #20640, #22450, #24244, #24288, #28520.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Fri, 30 Oct 1998 13:41:45 +0200
+
+egcs (1.1.0.91.58-1) experimental; urgency=low
+
+  * New upstream version. That's the egcs-1.1.1 prerelease plus patches from
+    the cvs archive upto 29 Oct 1998.
+  * Merged files from the egcs and snapshot packages.
+  * Updated libg++ to libg++-2.8.1.2 (although the Debian package name is still
+    2.8.2).
+  * Moved patches dir to patches-1.1.
+  * Dan Jacobowitz:
+    * This is a snapshot from the egcs_1_1_branch, with
+      libapi, reload, builtin-apply, and egcs patches from
+      the debian/patches/ dir applied, along with the egcs-gpc-patches
+      and gcc/p/diffs/gcc-egcs-2.91.55.diff.
+    * Conditionalize gcj and chill (since they aren't in this branch).
+    * Fake snapshots drop the -snap-main.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 29 Oct 1998 15:15:19 +0200
+
+egcs-snapshot (1.1-19981019-5.1) experimental; urgency=low
+
+  * This is a snapshot from the egcs_1_1_branch, with
+    libapi, reload, builtin-apply, and egcs patches from
+    the debian/patches/ dir applied, along with the egcs-gpc-patches
+    and gcc/p/diffs/gcc-egcs-2.91.55.diff.
+  * Conditionalize gcj and chill (since they aren't in this
+    branch).
+  * Fake snapshots drop the -snap-main.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Mon, 19 Oct 1998 22:19:23 -0400
+
+egcs (1.1b-5) unstable; urgency=low
+
+  * [debian/control.in] Fixed typo in dependencies (#28076, #28087, #28092).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 18 Oct 1998 22:56:51 +0200
+
+egcs (1.1b-4) unstable; urgency=low
+
+  * Strengthened g++ dependency on libstdc++_LIB_SO_-dev from
+    `Recommends' to `Depends'.
+  * Updated README.Debian for egcs-1.1.
+  * Updated TODO.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 15 Oct 1998 12:38:47 +0200
+
+egcs-snapshot (19981005-0.1) experimental; urgency=low
+
+  * Make libstdc++2.9-snap-main and libg++-snap-main provide
+    their mainstream equivalents and put those equivalents into
+    their shlibs file.
+  * Package gcj, the GNU Compiler for Java(TM).
+
+  * New upstream version of egcs (The -regcs_latest_snapshot branch).
+  * Build without libg++ entirely.
+  * Leave out gpc for now - the internals are sufficiently different
+    that it does not trivially compile.
+  * Include an experimental reload patch for powerpc - this is,
+    in the words of its author, not release quality, but it allows
+    powerpc linuxthreads to function.
+  * On architectures where we are the primary compiler, let snapshots
+    build with --prefix=/usr and conflict with the stable versions.
+  * Package chill, a front end for the language Chill.
+  * Other applied patches from debian/patches/: egcs-patches and
+    builtin-apply-patch.
+  * Use reload.c revision 1.43 to avoid a nasty bug.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Wed,  7 Oct 1998 00:27:42 -0400
+
+egcs (1.1b-3.1) unstable; urgency=low
+
+  * NMU to fix the egcc -> gcc link once and for all
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Tue, 22 Sep 1998 16:11:19 -0500
+
+egcs (1.1b-3) unstable; urgency=low
+
+  * Oops. The egcc -> gcc link on archs where gcc is egcc was broken.
+    Thanks to Chris Chimelis for pointing this out.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 21 Sep 1998 20:51:35 +0200
+
+egcs (1.1b-2) unstable; urgency=low
+
+  * New upstream spellfix release (Debian revision is 2 as the internal
+    version numbers didn't change).
+  * Added egcc -> gcc symlink on architectures where egcc is the primary C
+    compiler. Thus, maintainers of packages that require egcc, can now
+    simply use "egcc" without conditionals.
+  * Porters: we hope/plan to make egcs's gcc the default C compiler on all
+    platforms once the 2.2.x kernels are available. Please test this version
+    thoroughly, and give us a GO / NO GO for your architecture.
+  * Some symbols cpp used to predefine were removed upstream in order to clean
+    up the cpp namespace, but imake requires them for determining the proper
+    settings for LinuxMachineDefines (see /usr/X11R6/lib/X11/{Imake,linux}.cf),
+    thus we put them back. Thanks to Paul Slootman for reporting his imake
+    problems on Alpha.
+    * [gcc/config/alpha/linux.h] Added -D__alpha to CPP_PREDEFINES .
+      Thanks to Chris Chimelis for the alpha-only 1.1a-1.1 NMU which fixed
+      this already.
+    * [gcc/config/i386/linux.h] Added -D__i386__ to CPP_PREDEFINES .
+    * [gcc/config/sparc/linux.h] Has -Dsparc in CPP_PREDEFINES .
+    * [gcc/config/sparc/linux64.h] Has -Dsparc in CPP_PREDEFINES .
+    * [gcc/config/m68k/linux.h] Has -Dmc68000 in CPP_PREDEFINES .
+    * [gcc/config/rs6000/linux.h] Has -Dpowerpc in CPP_PREDEFINES .
+    * [gcc/config/arm/linux.h] Has -Darm in CPP_PREDEFINES .
+    * [gcc/config/i386/gnu.h] Has -Di386 in CPP_PREDEFINES .
+  * Small fixes and updates in README.
+  * Changes affecting the source package only:
+    * [gcc/Makefile.in, gcc/cp/Make-lang.in, gcc/p/Make-lang.in]
+      Daniel Jacobowitz: Ugly hacks of various kinds to make cplib2.txt get
+      properly regenerated with multilib.
+    * [debian/TODO] Created.
+    * [INSTALL/index.html] Fixed broken link.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 20 Sep 1998 14:05:15 +0200
+
+egcs (1.1a-1) unstable; urgency=low
+
+  * New upstream release.
+  * Added README.libstdc++ .
+  * Updated Standards-Version.
+  * Matthias:
+    * Downgraded gobjc dependency on egcs-docs from Recommends: to Suggests: .
+    * [libg++/Makefile.in] Patched not to rely on a `-f' flag of `ln'.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed,  2 Sep 1998 19:57:43 +0200
+
+egcs (1.1-1) unstable; urgency=low
+
+  * egcs-1.1 prerelease (from the last Debian package only the version file
+    changed).
+  * "Final" gpc Beta 2.1 gpc-19980830.
+  * Included libg++ and gpc in the .orig tarball. so that diffs are getting
+    smaller.
+  * debian/control.in: Changed maintainer address to galenh-egcs@debian.org.
+  * debian/copyright: Updated URLs.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 31 Aug 1998 12:43:13 +0200
+
+egcs (1.0.99.56-0.1) unstable; urgency=low
+
+  * New upstream snapshot 19980830 from CVS (called egcs-1.1 19980830).
+  * New libg++ snapshot 980828.
+  * Put all patches patches subdirectory; see patches/README in the source.
+  * debian/control.in: readded for libg++2.8.2-dev:
+    Replaces: libstdc++2.8-dev (<= 2.90.29-0.5)
+  * Renamed libg++2.9 package to libg++2.8.2.
+  * gcc/p/gpc-decl.c: Fix from Peter@Gerwinski.de; fixes optimization errors.
+  * patches/gpc-patch2: Fix from Peter@Gerwinski.de; fixes alpha errors.
+  * debian/rules: New configuration flag for building with and without
+    libstdc++api patch; untested without ...
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Sun, 30 Aug 1998 12:04:22 +0200
+
+egcs (1.0.99-0.6) unstable; urgency=low
+
+  * PowerPC fixes.
+  * On powerpc, generate the -msoft-float libs and package them
+    as egcs-nof.
+  * Fix signed char error in gpc.
+  * Create a libg++.so.2.9 compatibility symlink.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Tue, 25 Aug 1998 11:44:09 -0400
+
+egcs (1.0.99-0.5) unstable; urgency=low
+
+  * New upstream snapshot 19980824.
+  * New gpc snapshot gpc-980822; reenabled gpc for alpha.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 25 Aug 1998 01:21:08 +0200
+
+egcs (1.0.99-0.4) unstable; urgency=low
+
+  * New upstream snapshot 19980819. Should build glibc 2.0.9x on PPC.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Wed, 19 Aug 1998 14:18:07 +0200
+
+egcs (1.0.99-0.3) unstable; urgency=low
+
+  * New upstream snapshot 19980816.
+  * debian/rules: build correct debian/control and debian/*.shlibs
+  * Enabled Haifa scheduler for ix86.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 17 Aug 1998 16:29:35 +0200
+
+egcs (1.0.99-0.2) unstable; urgency=low
+
+  * New upstream snapshot: egcs-19980812, minor changes only.
+  * Fixes for building on `primary' targets.
+  * Disabled gpc on `alpha' architecture.
+  * Uses debhelper 1.1.6
+  * debian/control.in: Replace older snapshot versions in favor of newer
+    normal versions.
+  * debian/rules: Fixes building of binary-arch target only.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 13 Aug 1998 11:59:41 +0200
+
+egcs (1.0.99-0.1) unstable; urgency=low
+
+  * New upstream version: pre egcs-1.1 version.
+  * Many changes ... for details see debian/changelog.snapshot in the
+    source package.
+  * New packages libstdc++2.9 and libstdc++2.9-dev.
+  * New libg++ snapshot 980731: new packages libg++2.9 and libg++2.9-dev.
+  * New gpc snapshot gpc-980729: new package gpc.
+  * Uses debhelper 1.1
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 10 Aug 1998 13:00:27 +0200
+
+egcs-snapshot (19980803-4) experimental; urgency=low
+
+  * rebuilt debian/control.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  5 Aug 1998 08:51:47 +0200
+
+egcs-snapshot (19980803-3) experimental; urgency=low
+
+  * debian/rules: fix installation locations of NEWS, header and
+    `undocumented' files.
+  * man pages aren't compressed for the snapshot package.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  4 Aug 1998 17:34:31 +0200
+
+egcs-snapshot (19980803-2) experimental; urgency=low
+
+  * debian/rules: Uses debhelper. Old in debian/rules.old.
+    renamed postinst, prerm files for use with debhelper.
+  * debian/{libg++2.9,libstdc++2.9}/postinst: call ldconfig only,
+    when called for configure.
+  * egcs-docs is architecture independent package.
+  * new libg++ snapshot 980731.
+  * installed libstdc++ api patch (still buggy).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  3 Aug 1998 13:20:59 +0200
+
+egcs-snapshot (19980729-1) experimental; urgency=low
+
+  * New snapshot version 19980729 from CVS archive.
+  * New gpc snapshot gpc-980729.
+  * Let gcc/configure decide about using the Haifa scheduler.
+  * Remove -DDEBIAN. That was needed for the security improvements with
+    regard to the /tmp problem. egcs-1.1 chooses another approach.
+  * Save test-protocol and extract gpc errors to gpc-test-summary.
+  * Tighten binutils dependency to 2.9.1.
+  * debian/rules: new build-info target
+  * debian/{control.in,rules}: _SO_ and BINUTILSV substitution.
+  * debian/rules: add dependency for debian/control.
+  * debian/rules: remove bin/c++filt
+  * TODO: next version will use debhelper; the unorganized moving of
+    files becomes unmanageable ...
+  * TODO: g++ headers in stdc++ package? check!
+
+ -- Matthias Klose <doko@debian.org>  Thu, 30 Jul 1998 12:10:20 +0200
+
+egcs-snapshot (19980721-1) experimental; urgency=low
+
+  * Unreleased. Infinite loops in executables made by gpc.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Jul 1998 18:07:20 +0200
+
+egcs-snapshot (19980715-1) experimental; urgency=low
+
+  * New snapshot version from CVS archive.
+  * New gpc snapshot gpc-980715.
+  * New libg++ version libg++-2.8.2-980708. Changed versioning
+    schema for library. The major versions of libc, libstdc++ and the
+    g++ interface are coded in the library name. Use this new schema,
+    but provide a symlink to our previous schema, since the library
+    seems to be binary compatible.
+  * [debian/rules]: Fixed bug in build target, when bootstrap returns
+    with an error
+
+ -- Matthias Klose <doko@debian.org>  Wed, 15 Jul 1998 10:55:05 +0200
+
+egcs-snapshot (19980701-1) experimental; urgency=low
+
+  * New snapshot version from CVS archive.
+    Two check programs in libg++ had to be manually killed to finish the
+    testsuite (tBag and tSet).
+  * New gpc snapshot gpc-980629.
+  * Incorporated debian/rules changes from egcs-1.0.3a-0.5 (but don't remove
+    gcc/cp/parse.c gcc/c-parse.c gcc/c-parse.y gcc/objc/objc-parse.c
+    gcc/objc/objc-parse.y, since these files are part of the release).
+  * Disable the -DMKTEMP_EACH_FILE -DHAVE_MKSTEMP -DDEBIAN flags for the
+    snapshot. egcs-1.1 will have another solution.
+  * Don't bootstrap the snapshot with -fno-force-mem. Internal compiler
+    error :-(
+  * libf2c.a and f2c.h have changed names to libg2c.a and g2c.h and
+    have moved again into the gcc-lib dir. They are installed under
+    libg2c.a and g2c.h. Is it necessary to provide links f2c -> g2c ?
+  * debian/rules: reflect change of build dir of libraries.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  2 Jul 1998 13:15:28 +0200
+
+egcs-snapshot (19980628-0.1) experimental; urgency=low
+
+  * New upstream snapshot version.
+  * Non-maintainer upload; Matthias appears to be absent currently.
+  * Updated shlibs.
+  * Merged changes from regular egcs:
+    * [debian/control] Tightened dependency on binutils to 2.8.1.0.23 or
+      newer, as according to INSTALL/SPECIFIC PowerPC (and possibly Sparc)
+      need this.
+    * [debian/rules] Clean up some generated files outside builddir,
+      so the .diff.gz becomes smaller.
+    * [debian/rules] Partial sync/update with the one for the regular egcs
+      version.
+  * [debian/rules] Make gcc/p/configure executable.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed,  1 Jul 1998 07:12:15 +0200
+
+egcs (1.0.3a-0.6) frozen unstable; urgency=low
+
+  * Some libg++ development files were in libstdc++2.8-dev rather than
+    libg++2.8-dev. Fixed this and dealt with upgrading from the earlier
+    versions (fixes #23908; this bug is not marked release-critical, but
+    is annoying and can be quite confusing for users. Therefore, I think
+    this fix should go in 2.0).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 30 Jun 1998 11:10:14 +0200
+
+egcs (1.0.3a-0.5) frozen unstable; urgency=low
+
+  * Fixed location of .hP files (Fixes #23448).
+  * [debian/rules] simplified extraction of the files for libg++2.8-dev.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed, 17 Jun 1998 09:33:41 +0200
+
+egcs (1.0.3a-0.4) frozen unstable; urgency=low
+
+  * [gcc/gcc.c] There is one call to choose_temp_base for determining the
+    tempdir to be used only; #ifdef HAVE_MKSTEMP delete the tempfile created
+    as a side effect. (fixes #23123 for egcs).
+  * [gcc/collect2.c] There's still a vulnerability here; I don't see how
+    I can fix it without leaving behind tempfiles though.
+  * [debian/control] Tightened dependency on binutils to 2.8.1.0.23 or
+    newer, as according to INSTALL/SPECIFIC PowerPC (and possibly Sparc)
+    need this.
+  * [debian/rules] Clean up some generated files outside builddir, so the
+    .diff.gz becomes smaller.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 13 Jun 1998 09:06:52 +0200
+
+egcs-snapshot (19980608-1) experimental; urgency=low
+
+  * New snapshot version.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  9 Jun 1998 14:07:44 +0200
+
+egcs (1.0.3a-0.3) frozen unstable; urgency=high (security fixes)
+
+  * [gcc/toplev.c] set flag_force_mem to 1 at optimisation level 3 or higher.
+    This works around #17768 which is considered release-critical.
+  * Changes by Matthias:
+    * [debian/README] Documentation of the compiler situation for Objective C.
+    * [debian/rules, debian/control.*] Generate control file from a master
+      file.
+    * [debian/rules] Updates for Pascal and Fortran parts; brings it in sync
+      with the one for the egcs snapshots.
+  * Use the recommended settings LDFLAGS=-s CFLAGS= BOOT_CFLAGS='-O2'.
+  * Really compile -DMKTEMP_EACH_FILE -DHAVE_MKSTEMP (really fixes #19453
+    for egcs).
+  * [gcc/gcc.c] A couple of temp files weren't marked for deletion.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 31 May 1998 22:56:22 +0200
+
+egcs (1.0.3a-0.2) frozen unstable; urgency=high (security fixes)
+
+  * Security improvements with regard to the /tmp problem
+    (gcc opens predictably named files in TMPDIR which can be abused via
+    symlinks)  (Fixes #19453 for egcs).
+    * Compile -DMKTEMP_EACH_FILE to ensure the %u name is generated randomly
+      every time; affects gcc/gcc.c .
+    * [gcc/choose-temp.c, libiberty/choose-temp.c]: use mktemp(3) if compiled
+      -DUSE_MKSTEMP .
+    * Security improvements: don't use the result of choose_temp_base in a
+      predictable fashion.
+      [gcc/gcc.c]:
+      * @c, @objective-c: use random name rather then tempbasename.i for
+        intermediate preprocessor output (%g.i -> %d%u).
+      * @c, @objective-c: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @c, @objective-c, @cpp-output, @assembler-with-cpp: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @c, @objective-c, @assembler-with-cpp: use previous random name
+        (cc1|cpp output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U)
+      [gcc/f/lang-specs.h]:
+      * @f77-cpp-input: use random name rather then tempbasename.i for
+        intermediate cpp output (%g.i -> %d%u).
+      * @f77-cpp-input: use previous random name (cpp output) rather than
+        tempbasename.i for f771 input (%g.i -> %U).
+      * @f77-cpp-input: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @f77-cpp-input: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: use random name rather then tempbasename.i for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @f77: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %U).
+  * Run the testsuite (this requires the dejagnu package in experimental;
+    unfortunately, it is difficult to distinguish this version from the one
+    in frozen).
+    if possible, and log the results in warn_summary and bootstrap-summary.
+  * [gcc/choose-temp.c, libiberty/choose-temp.c]: s|returh|return| in
+    comment.
+  * Added notes on the Debian compiler setup [debian/README] to the
+    development packages.
+  * Matthias:
+    * [libg++/etc/lf/Makefile.in] Replaced "-ltermcap" by "-lncurses".
+    * [debian/rules] Updated so it can be used for both egcs releases and
+      snapshots easily; added support for the GNU Pascal Compiler gpc.
+    * [contrib/test_summary, contrib/warn_summary] Added from CVS.
+    * Run compiler checks and include results in /usr/doc/<package>.
+    * Updates to the README.
+    * [debian/rules] Use assignments to speed up startup.
+  * [debian/rules] Show the important variables at the start of the build
+    process.
+  * [debian/control.secondary] Added a dependency of gobjc on egcc on
+    architectures where egcs provides the secondary compiler, as
+    /usr/bin/egcc is the compiler driver for gobjc. (Fixes #22829).
+  * [debian/control.*] Bumped Standards-Version; used shorter version
+    numbers in the dependency relationships (esthetic difference only);
+    fixed typo.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 26 May 1998 21:47:41 +0200
+
+egcs-snapshot (19980525-1) experimental; urgency=low
+
+  * New snapshot version.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 26 May 1998 18:04:06 +0200
+
+egcs-snapshot (19980517-1) experimental; urgency=low
+
+  * "Initial" release of the egcs-snapshot package; many debian/* files
+    derived from the egcs-1.0.3a-0.1 package (maintained by Galen Hazelwood
+    <galenh@micron.net>, NMU's by J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>)
+  * The egcs-snapshot packages can coexist with the packages of the
+    egcs release. Package names have a '-ss' appended.
+  * All packages are installed in a separate tree (/usr/lib/egcs-ss following
+    the FHSS).
+  * Made all snapshot packages extra, all snapshot packages conflict
+    with correspondent egcs packages, which are newer than the snapshot.
+  * Included libg++-2.8.1-980505.
+  * Included GNU Pascal (gpc-980511).
+  * Haifa scheduler enabled for all snapshot packages.
+  * Run compiler checks and include results in /usr/doc/<package>.
+  * Further information in /usr/doc/<package>/README.snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 May 1998 11:14:06 +0200
+
+egcs (1.0.3a-0.1) frozen unstable; urgency=low
+
+  * New upstream release egcs-2.90.29 980515 (egcs-1.0.3 release)
+    (we were using 1.0.3-prerelease).  This includes the Haifa patches
+    we had since 1.0.3-0.2 and the gcc/objc/thr-posix.c patch we had
+    since 1.0.3-0.1; the differences with 1.0.3-prerelease + patches
+    we had is negligable.
+  * iostream info documentation was in the wrong package (libg++2.8-dev).
+    Now it's in libstdc++2.8-dev. (Thanks to Jens Rosenboom for bringing
+    this to my attention). As 1.0.3-0.3 didn't make it out of Incoming,
+    I'm not adding "Replaces:" for this; folks who had 1.0.3-0.3 installed
+    already know enough to use --force-overwrite.
+  * [gcc/objc/objc-act.c] Applied patch Matthias Klose supplied me with that
+    demangles Objective C method names in gcc error messages.
+  * Explicitly disable Haifa scheduling on Alpha, to make it easier to use
+    this package's diff with egcs snapshots, which may turn on Haifa
+    scheduling even though it is still unstable. (Requested by Chris Chimelis)
+  * Don't run "configure" again if builddir already exists (makes it faster
+    to restart builds in case one is hacking internals). Requested by
+    Johnnie Ingram.
+  * [gcc/gbl-ctors.h] Don't use extern declaration for atexit on glibc 2.1
+    and higher (the prototype has probably changed; having the declaration
+    broke Sparc compiles).
+  * [debian/rules] Determine all version number automatically (from the
+    version string in gcc/version.c).
+  * [debian/copyright] Updated FTP locations; added text about libg++ (fixes
+    #22465).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 16 May 1998 17:41:44 +0200
+
+egcs (1.0.3-0.3) frozen unstable; urgency=low
+
+  * Made an "egcs-doc" package containing documentation for egcs (e)gcc,
+    g++, gobjc, so that administrators can choose whether to have this
+    documenation or the documentation that comes with the GNU gcc package.
+    Dependency on this is Recommends: on architectures where egcs provides
+    the primary C compiler; Suggests: on the others (where GNU gcc is still
+    the primary C compiler).
+  * Use the g++ FAQ from gcc/cp rather than libg++, as that version is more
+    up to date.
+  * Added iostream info documentation to libstdc++2.8-dev.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed, 13 May 1998 08:46:10 +0200
+
+egcs (1.0.3-0.2) frozen unstable; urgency=low
+
+  * Added libg++ that works with egcs, found at
+    ftp://ftp.yggdrasil.com/private/hjl/libg++-2.8.1-980505.tar.gz
+    (fixes #20587 (Severity: important)).
+  * The "libg++" and "libg++-dev" virtual packages now refer to the GNU
+    extensions.
+  * Added the g++ FAQ that comes with libg++ to the g++ package.
+  * libg++/Makefile.in: added $(srcdir) to rule for g++FAQ.info so that it
+    builds OK in builddir.
+  * Added -D__i386__ to the cpp predefines on intel.
+  * Patches Matthias supplied me with:
+    * Further 1.0.3 prerelease patches from CVS.
+      This includes patches to the Haifa scheduler. Alpha porters, please
+      check if this makes the Haifa scheduler OK again.
+    * Objective C patches from CVS.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri,  8 May 1998 14:43:20 +0200
+
+egcs (1.0.3-0.1) frozen unstable; urgency=low (high for maintainers that use objc)
+
+  * bug fixes only in new upstream version
+  * Applied patches from egcs CVS archive (egcs_1_03_prerelease)
+    (see gcc/ChangeLog in the egcs source package).
+  * libstdc++2.8-dev no longer Provides: libg++-dev (fixes #21153).
+  * libstdc++2.8-dev now Conflicts: libg++27-dev (bo),
+    libg++272-dev (hamm) [regular packages] rather than
+    Conflicts: libg++-dev [virtual package] to prepare the way for "libg++"
+    to be used as a virtual package for a new libg++ package (i.e. an up to
+    date one, which not longer contains libstdc++, but only the GNU
+    extensions) that is compatible with the egcs g++ packages. Such a package
+    isn't available yet. Joel Klecker tried building libg++2.8.1.1a within
+    egcs's libstdc++ setup, but it appears to need true gcc 2.8.1 .
+  * Filed Severity: important bugs against wxxt1-dev (#21707) because these
+    still depend on libg++-dev, which is removed in this version.
+    A fixed libsidplay1-dev has already been uploaded.
+  * libstdc++2.8 is now Section: base and Priority: required (as dselect is
+    linked against it).
+  * Disabled Haifa scheduling on Alpha again; Chris Chimelis reported
+    that this caused problems on some machines.
+  * [gcc/extend.texi]
+    ftp://maya.idiap.ch/pub/tmb/usenix88-lexic.ps.Z is no longer available;
+    use http://master.debian.org/~karlheg/Usenix88-lexic.pdf .
+    (fixes the egcs part of #20002).
+  * Updated Standards-Version.
+  * Changed chmod in debian/rules at Johnie Ingram's request.
+  * Rather than hardwire the Debian part of the packages' version number,
+    extract it from debian/changelog .
+  * Use gcc/objc/thr-posix.c from 980418 egcs snapshot to make objc work.
+    (Fixes #21192).
+  * Applied workaround for the GNUstep packages on sparc systems.
+    See README.sparc (on sparc packages only) in the doc directory.
+    This affects the other compilers as well.
+  * Already done in 1.0.2-0.7: the gobjc package now provides a virtual
+    package objc-compiler.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 28 Apr 1998 12:05:28 +0200
+
+egcs (1.0.2-0.7) frozen unstable; urgency=low
+
+  * Separated out Objective-C compiler.
+  * Applied patch from http://www.cygnus.com/ml/egcs/1998-Apr/0614.html
+
+ -- Matthias Klose <doko@debian.org>  Fri, 17 Apr 1998 10:25:48 +0200
+
+egcs (1.0.2-0.6) frozen unstable; urgency=low
+
+  * Due to upstream changes (libg++ is now only the GNU specific C++
+    classes, and is no longer maintained; libstdc++ contains the C++
+    standard library, including STL), the virtual "libg++-dev"
+    package's meaning has become confusing. Therefore, new or updated
+    packages should no longer use the virtual "libg++-dev" package.
+  * Corrected g++'s Recommends to libstdc++2.8-dev (>=2.90.27-0.1).
+    The previous version had Recommends: libstdc++-dev (>=2.90.27-0.1)
+    which doesn't work, as libstc++-dev is a virtual package.
+  * Bumped Standards-Version.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 14 Apr 1998 11:52:08 +0200
+
+egcs (1.0.2-0.5) frozen unstable; urgency=low (high for maintainers of packages that use libstdc++)
+
+  * Modified shlibs file for libstdc++ to generate versioned dependencies,
+    as it is not link compatible with the 1.0.1-x versions in
+    project/experimental. (Fixes #20247, #20033)
+    Packages depending on libstd++ should be recompiled to fix their
+    dependencies.
+  * Strenghtened g++'s Recommends: libstdc++-dev to the 1.0.2 version or
+    newer.
+  * Fixed problems with the unknown(7) symlink for gcov.
+  * Reordering links now works.
+
+ -- Adam Heath <adam.heath@usa.net>  Sun, 12 Apr 1998 13:09:30 -0400
+
+egcs (1.0.2-0.4) frozen unstable; urgency=low
+
+  * Unreleased. This is the version Adam Heath received from me.
+  * Replaces: gcc (<= 2.7.2.3-3) so that the overlap with the older gcc
+    packages (including bo's gcc_2.7.2.1-8) is handled properly
+    (fixes #19931, #19672, #20217, #20593).
+  * Alpha architecture (fixes #20875):
+    * Patched gcc/config/alpha/linux.h for the gmon functions to operate
+      properly.
+    * Made egcs the primary C compiler.
+    * Enabled Hafia scheduling.
+  * Lintian-detected problems:
+    * E: libstdc++2.8: ldconfig-symlink-before-shlib-in-deb usr/lib/libstdc++.so.2.8
+    * E: egcc: binary-without-manpage gcov
+      Reported as wishlist bug; added link to undocumented(7).
+    * W: libstdc++2.8: non-standard-executable-perm usr/lib/libstdc++.so.2.8.0 0555
+    * E: libstdc++2.8: shlib-with-executable-bit usr/lib/libstdc++.so.2.8.0 0555
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri, 10 Apr 1998 14:46:46 +0200
+
+egcs (1.0.2-0.3) frozen unstable; urgency=low
+
+  * Really fixed dependencies.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 30 Mar 1998 11:30:26 +0200
+
+egcs (1.0.2-0.2) frozen unstable; urgency=low
+
+  * Fixed dependencies.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 28 Mar 1998 13:58:58 +0100
+
+egcs (1.0.2-0.1) frozen unstable; urgency=low
+
+  * New upstream version; it now has -Di386 in CPP_PREDEFINES.
+  * Only used the debian/* patches from 1.0.1-2; the rest of it appears
+    to be in 1.0.2 already.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri, 27 Mar 1998 11:47:14 +0100
+
+egcs (1.0.1-2) unstable; urgency=low
+
+  * Integrated pre-release 1.0.2 patches
+  * Split out g++
+  * egcs may now provide either the primary or secondary C compiler
+
+ -- Galen Hazelwood <galenh@micron.net>  Sat, 14 Mar 1998 14:15:32 -0700
+
+egcs (1.0.1-1) unstable; urgency=low
+
+  * New upstream version
+  * egcs is now the standard Debian gcc!
+  * gcc now provides c-compiler (#15248 et al.)
+  * g77 now provides fortran77-compiler
+  * g77 dependencies now correct (#16991)
+  * /usr/doc/gcc/changelog.gz now has correct permissions (#16139)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sat,  7 Feb 1998 19:22:30 -0700
+
+egcs (1.0-1) experimental; urgency=low
+
+  * First official release
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu,  4 Dec 1997 16:30:11 -0700
+
+egcs (970917-1) experimental; urgency=low
+
+  * New upstream snapshot (There's a lot of stuff here as well, including
+    a new libstdc++, but it _still_ won't build...)
+  * eg77 driver now works properly
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 17 Sep 1997 20:44:29 -0600
+
+egcs (970904-1) experimental; urgency=low
+
+  * New upstream snapshot
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun,  7 Sep 1997 18:25:06 -0600
+
+egcs (ss-970814-1) experimental; urgency=low
+
+  * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 20 Aug 1997 00:36:28 +0000
+
+gcc272 (2.7.2.3-12) unstable; urgency=low
+
+  * Compiled on a glibc-2.0 based system.
+  * Reflect move of manpage to /usr/share in gcc.postinst as well.
+  * Moved gcc272-docs to section doc, priority optional.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Sat, 28 Aug 1999 13:42:13 +0200
+
+gcc272 (2.7.2.3-11) unstable; urgency=low
+
+  * Follow Debian policy for GNU system type (fixes #42657).
+  * config/i386/linux.h: Remove %[cpp_cpu] from CPP_SPEC. Stops gcc-2.95
+    complaining about obsolete spec operators (using gcc -V 2.7.2.3).
+    Patch suggested by Zack Weinberg <zack@bitmover.com>.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Sun, 15 Aug 1999 20:12:21 +0200
+
+gcc272 (2.7.2.3-10) unstable; urgency=low
+
+  * Renamed source package to gcc272. The egcs source package is renamed
+    to gcc, because it's now the "official" GNU C compiler.
+  * Changed maintainer address to "Debian GCC maintainers".
+  * Install info and man stuff to /usr/share.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 27 May 1999 12:29:23 +0200
+
+gcc (2.7.2.3-9) unstable; urgency=low
+
+  * debian/{postinst,prerm}-doc: handle gcc272.info, not gcc.info.
+    Fixes #36306.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 20 Apr 1999 07:32:58 +0200
+
+gcc (2.7.2.3-8) unstable; urgency=low
+
+  * Make gcc-2.7 the secondary compiler. Rename gcc package to gcc272.
+    On i386, sparc and m68k, this package is compiled against glibc2.0.
+  * The cpp package is built from the egcs source package.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 29 Mar 1999 22:48:50 +0200
+
+gcc (2.7.2.3-7) frozen unstable; urgency=low
+
+  * Separated out ObjC compiler to gobjc27 package.
+  * Changed maintainer address.
+  * Synchronized README.Debian with egcs-1.1.1-3.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 29 Dec 1998 19:05:26 +0100
+
+gcc (2.7.2.3-6) frozen unstable; urgency=low
+
+  * Link with -lc on i386, m68k, sparc, when building shared libraries
+    (fixes #25122).
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu,  3 Dec 1998 12:12:12 +0200
+
+gcc (2.7.2.3-5) frozen unstable; urgency=low
+
+  * Updated maintainer info.
+  * Updated Standards-Version; made lintian-clean.
+  * gcc-docs can coexist with the latest egcs-docs, so added (<= version) to
+    the Conflicts.
+  * Updated the README and renamed it to README.Debian .
+  * Put a reference to /usr/doc/gcc/README.Debian in the info docs.
+  * Updated description of g++272 .
+  * Clean up generated info files, to keep the diff small.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 17 Nov 1998 20:05:59 +0100
+
+gcc (2.7.2.3-4.8) frozen unstable; urgency=high
+
+  * Non-maintainer release
+  * Fix type in extended description
+  * Removed wrong test in postinst
+  * Add preinst to clean up some stuff from an older gcc package properly
+    and stop man complaining about dangling symlinks
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 17 Jul 1998 18:48:32 +0200
+
+gcc (2.7.2.3-4.7) frozen unstable; urgency=high
+
+  * Really fixed gcc-docs postinst (Fixes #23470), so that `gcc-docs'
+    becomes installable.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 15 Jun 1998 07:53:40 +0200
+
+gcc (2.7.2.3-4.6) frozen unstable; urgency=high
+
+  * [gcc.c] There is one call to choose_temp_base for determining the
+    tempdir to be used only;
+    #ifdef HAVE_MKSTEMP delete the tempfile created as a side effect.
+    (fixes #23123 for gcc).
+  * gcc-docs postinst was broken (due to a broken line) (fixes #23391, #23401).
+  * [debian/control] description for gcc-docs said `egcs' where it should have
+    said `gcc' (fixes #23396).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Thu, 11 Jun 1998 12:48:50 +0200
+
+gcc (2.7.2.3-4.5) frozen unstable; urgency=high
+
+  * The previous version left temporary files behind, as they were not
+    marked for deletion afterwards.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 31 May 1998 22:49:14 +0200
+
+gcc (2.7.2.3-4.4) frozen unstable; urgency=high (security fixes)
+
+  * Security improvements with regard to the /tmp problem
+    (gcc opens predictably named files in TMPDIR which can be abused via
+    symlinks)  (Fixes #19453 for gcc):
+    * Compile -DMKTEMP_EACH_FILE to ensure the %u name is generated randomly
+      every time; affects gcc/gcc.c .
+    * [cp/g++.c, collect2.c, gcc.c] If compiled -DHAVE_MKSTEMP use mkstemp(3)
+      rather than mktemp(3).
+    * Security improvements: don't use the result of choose_temp_base in a
+      predictable fashion.
+      [gcc.c]:
+      * @c, @objective-c: use random name rather then tempbasename.i for
+        intermediate preprocessor output (%g.i -> %d%u).
+      * @c, @objective-c: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @c, @objective-c, @cpp-output, @assembler-with-cpp: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @c, @objective-c, @assembler-with-cpp: use previous random name
+        (cc1|cpp output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U)
+      [f/lang-specs.h]:
+      * @f77-cpp-input: use random name rather then tempbasename.i for
+        intermediate cpp output (%g.i -> %d%u).
+      * @f77-cpp-input: use previous random name (cpp output) rather than
+        tempbasename.i for f771 input (%g.i -> %U).
+      * @f77-cpp-input: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @f77-cpp-input: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: use random name rather then tempbasename.i for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @f77: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %U).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 30 May 1998 17:27:03 +0200
+
+gcc (2.7.2.3-4.3) frozen unstable; urgency=high
+
+  * The "alpha" patches from -4 affected a lot more than alpha support,
+    and in all likeliness broke compilation of libc6 2.0.7pre3-1
+    and 2.0.7pre1-4 . I removed them by selective application of the
+    diff between -4 and -4. (should fix #22292).
+  * Fixed reference to the trampolines paper (fixes #20002 for Debian;
+    this still needs to be forwarded).
+  * This is for frozen too. (obsoletes #22390 (request to move -4.2 to
+    frozen)).
+  * Split of gcc-docs package, so that the gcc can be succesfully installed
+    on systems that have egcs-docs installed.
+  * Added the README on the compiler situation that's already in the egcs
+    packages.
+  * Use the recommended settings LDFLAGS=-s CFLAGS= BOOT_CFLAGS='-O2'.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Thu, 28 May 1998 20:03:59 +0200
+
+gcc (2.7.2.3-4.2) unstable; urgency=low
+
+  * Still for unstable, as I have received no feedback about the g++272
+    package yet.
+  * gcc now Provides: objc-compiler .
+  * Clean up /etc/alternatives/{g++,g++.1.gz} if they are dangling.
+    (fixes #19765, #20563)
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed, 22 Apr 1998 12:40:45 +0200
+
+gcc (2.7.2.3-4.1) unstable; urgency=low
+
+  * Bumped Standards-Version.
+  * Forked off a g++272 package (e.g. for code that uses the GNU extensions
+    in libg++); for now this is in "unstable" only; feedback appreciated.
+  * Some cleanup (lintian): permissions, absolute link, gzip manpage.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri, 17 Apr 1998 13:05:25 +0200
+
+gcc (2.7.2.3-4) unstable; urgency=low
+
+  * Added alpha patches
+  * Only build C and objective-c compilers, split off g++
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun,  8 Mar 1998 21:16:39 -0700
+
+gcc (2.7.2.3-3) unstable; urgency=low
+
+  * Added patches for m68k
+  * Added patches for sparc (#13968)
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 17 Oct 1997 18:25:21 -0600
+
+gcc (2.7.2.3-2) unstable; urgency=low
+
+  * Added g77 support (g77 0.5.21)
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 10 Sep 1997 18:44:54 -0600
+
+gcc (2.7.2.3-1) unstable; urgency=low
+
+  * New upstream version
+  * Now using pristine source
+  * Removed misplaced paragraph in cpp.texi (#10877)
+  * Fix security bug for temporary files (#5298)
+  * Added Suggests: libg++-dev (#12335)
+  * Patched objc/thr-posix.c to support conditions (#12502)
+
+ -- Galen Hazelwood <galenh@micron.net>  Mon,  8 Sep 1997 12:20:07 -0600
+
+gcc (2.7.2.2-7) unstable; urgency=low
+
+  * Made cc and c++ managed through alternates mechanism (for egcs)
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 19 Aug 1997 22:37:03 +0000
+
+gcc (2.7.2.2-6) unstable; urgency=low
+
+  * Tweaked Objective-C thread support (#11069)
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed,  9 Jul 1997 11:56:57 -0600
+
+gcc (2.7.2.2-5) unstable; urgency=low
+
+  * More updated m68k patches
+  * Now conflicts with libc5-dev (#10006, #10112)
+  * More strict Depends: cpp, prevents version mismatch (#9954)
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 19 Jun 1997 01:29:02 -0600
+
+gcc (2.7.2.2-4) unstable; urgency=low
+
+  * Moved to unstable
+  * Temporarily removed fortran support (waiting for new g77)
+  * Updated m68k patches
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri,  9 May 1997 13:35:14 -0600
+
+gcc (2.7.2.2-3) experimental; urgency=low
+
+  * Built against libc6 (fixes bug #8511)
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 4 Apr 1997 13:30:10 -0700
+
+gcc (2.7.2.2-2) experimental; urgency=low
+
+  * Fixed configure to build crt{begin,end}S.o on i386
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 11 Mar 1997 16:15:02 -0700
+
+gcc (2.7.2.2-1) experimental; urgency=low
+
+  * Built for use with libc6-dev (experimental purposes only!)
+  * Added m68k patches from Andreas Schwab
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 7 Mar 1997 12:44:17 -0700
+
+gcc (2.7.2.1-7) unstable; urgency=low
+
+  * Patched to support g77 0.5.20
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 6 Mar 1997 22:20:23 -0700
+
+gcc (2.7.2.1-6) unstable; urgency=low
+
+  * Added (small) manpage for protoize/unprotoize (fixes bug #6904)
+  * Removed -lieee from specs file (fixes bug #7741)
+  * No longer builds aout-gcc
+
+ -- Galen Hazelwood <galenh@micron.net>  Mon, 3 Mar 1997 11:10:20 -0700
+
+gcc (2.7.2.1-5) unstable; urgency=low
+
+  * debian/control now lists cpp in section "interpreters"
+  * Re-added Objective-c patches for unstable
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 22 Jan 1997 10:27:52 -0700
+
+gcc (2.7.2.1-4) stable unstable; urgency=low
+
+  * Changed original source file so dpkg-source -x works
+  * Removed Objective-c patches (unsafe for stable)
+  * Built against rex's libc, so fixes placed in -3 are available to
+    those still using rex
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 21 Jan 1997 11:11:53 -0700
+
+gcc (2.7.2.1-3) unstable; urgency=low
+
+  * New (temporary) maintainer
+  * Updated to new standards and source format
+  * Integrated aout-gcc into gcc source package
+  * Demoted aout-gcc to Priority "extra"
+  * cpp package description more clear (fixes bug #5428)
+  * Removed cpp "Replaces: gcc" (fixes bug #5762)
+  * Minor fix to invoke.texi (fixes bug #2909)
+  * Added latest Objective-C patches for GNUstep people (fixes bug #4657)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun, 5 Jan 1997 09:57:36 -0700
--- gcc-4.1-4.1.2.orig/debian/g77-BV-doc.postinst
+++ gcc-4.1-4.1.2/debian/g77-BV-doc.postinst
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	install-info --quiet --section "Development" "Development" \
+	    --description="The GNU Fortran 77 compiler (Version @BV@)." \
+	    /usr/share/info/g77-@BV@.info
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcc-cross.postinst
+++ gcc-4.1-4.1.2/debian/gcc-cross.postinst
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+update-alternatives --quiet \
+	--install /usr/bin/cross-gcc cross-gcc /usr/bin/cross-gcc-ver 41 \
+	--slave /usr/share/man/man1/cross-gcc.1.gz cross-gcc.1.gz /usr/share/man/man1/cross-gcc-ver.1.gz
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/gnat.1
+++ gcc-4.1-4.1.2/debian/gnat.1
@@ -0,0 +1,39 @@
+.\" Hey, Emacs!  This is an -*- nroff -*- source file.
+.\"
+.\" Copyright (C) 1996 Erick Branderhorst <branderh@debian.org>
+.\"
+.\" This is free software; you can redistribute it and/or modify it under
+.\" the terms of the GNU General Public License as published by the Free
+.\" Software Foundation; either version 2, or (at your option) any later
+.\" version.
+.\"
+.\" This 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.  See the GNU General Public License
+.\" for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License with
+.\" your Debian GNU/Linux system, in /usr/doc/copyright/GPL, or with the
+.\" dpkg source package as the file COPYING.  If not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+.\"
+.\"
+.TH "GNAT TOOLBOX" 1 "Jun 2002" "Debian Project" "Debian Linux"
+.SH NAME
+gnat, gnatbind, gnatbl, gnatchop, gnatfind, gnatkr, gnatlink,
+gnatls, gnatmake, gnatprep, gnatpsta, gnatpsys, gnatxref \-
+GNAT toolbox
+.SH DESCRIPTION
+Those programs are part of GNU GNAT 4.1, a freely available Ada 95 compiler.
+.PP
+For accessing the full GNAT manuals, use
+.B info gnat-ug-4.1
+and
+.B info gnat-rm-4.1
+for the sections related to the reference manual.  If those sections cannot
+be found, you will have to install the gnat-3.4-doc package as well.
+.SH SEE ALSO
+.BR gcc-4.1 (1)
+.SH AUTHOR
+This manpage has been written by Samuel Tardieu <sam@debian.org>, for the
+Debian GNU/Linux project.
--- gcc-4.1-4.1.2.orig/debian/watch
+++ gcc-4.1-4.1.2/debian/watch
@@ -0,0 +1,2 @@
+version=2
+ftp://gcc.gnu.org/pub/gcc/releases/gcc-(4\.1[\d\.]*)	debian	uupdate
--- gcc-4.1-4.1.2.orig/debian/gcj-BV.prerm
+++ gcc-4.1-4.1.2/debian/gcj-BV.prerm
@@ -0,0 +1,18 @@
+#! /bin/sh -e
+
+update-alternatives --quiet --remove javac /usr/bin/gcj-wrapper-@BV@
+update-alternatives --quiet --remove jar /usr/bin/gjar-@BV@
+update-alternatives --quiet --remove jarsigner /usr/bin/gjarsigner-@BV@
+update-alternatives --quiet --remove javah /usr/bin/gjavah-@BV@
+update-alternatives --quiet --remove native2ascii /usr/bin/gnative2ascii-@BV@
+update-alternatives --quiet --remove rmic /usr/bin/grmic-@BV@
+update-alternatives --quiet --remove tnameserv /usr/bin/gtnameserv-@BV@
+
+if [ -f /usr/share/info/gcj-@BV@.info.gz ]; then
+  install-info --quiet --remove gcj-@BV@
+else
+  # GFDL invariant free
+  true
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gcj-wrapper-BV
+++ gcc-4.1-4.1.2/debian/gcj-wrapper-BV
@@ -0,0 +1,91 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java compiler.
+#
+# Command-line arguments should be in the style of Sun's Java compiler;
+# these will be converted to gcj arguments before being passed to the
+# gcj itself.
+#
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gcj-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java compiler:
+my $javaCompiler = '/usr/bin/gcj-@BV@';
+
+# The command-line arguments to pass to the real Java compiler:
+my @commandLine;
+
+# The warning flags to pass to the GNU Java compiler:
+my $warnings = '-Wall';
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+my $copyNextArg = 0;
+my $ignoreNextArg = 0;
+my $appendNextArg = '';
+foreach my $arg (@ARGV) {
+    # See if we already know what to do with this argument.
+    if ($ignoreNextArg) {
+        # Throw it away.
+        $ignoreNextArg = 0;
+        next;
+    } elsif ($copyNextArg or not $parsingOptions) {
+        # Copy it directly.
+        push @commandLine, $arg;
+        $copyNextArg = 0;
+        next;
+    } elsif ($appendNextArg) {
+        # Append it to $appendNextArg and then copy directly.
+        push @commandLine, ($appendNextArg . $arg);
+        $appendNextArg = '';
+        next;
+    }
+
+    # Try to interpret Sun-style options.
+    if ($arg eq '-version') {
+        push @commandLine, '--version';
+    } elsif ($arg eq '-h' or $arg eq '-help') {
+        push @commandLine, '--help';
+    } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
+        $appendNextArg = '--classpath=';
+    } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
+             $arg eq '-extdirs') {
+        $appendNextArg = '-' . $arg . '=';
+    } elsif ($arg eq '-d') {
+        push @commandLine, '-d';
+        $copyNextArg = 1;
+    } elsif ($arg eq '-nowarn') {
+        $warnings = '';
+    } elsif ($arg =~ /^-g/) {
+        # Some kind of debugging option - just switch debugging on.
+        push @commandLine, '-g' if ($arg ne '-g:none');
+    } elsif ($arg eq '-O') {
+        push @commandLine, '-O2';
+    } elsif ($arg eq '-Xss') {
+        push @commandLine, $arg;
+    } elsif ($arg =~ /^-X/) {
+        # An extended Sun option (which we don't support).
+        push @commandLine, '--help' if ($arg eq '-X');
+    } elsif ($arg eq '-source' or $arg eq '-sourcepath' or $arg eq '-target') {
+        # An unsupported option with a following argument.
+        $ignoreNextArg = 1;
+    } elsif ($arg =~ /^-/) {
+        # An unsupported standalone option.
+    } else {
+        # Some non-option argument has been given.
+        # Stop parsing options at this point.
+        push @commandLine, $arg;
+        $parsingOptions = 0;
+    }
+}
+
+# Was there a partial argument that was never completed?
+push @commandLine, $appendNextArg if ($appendNextArg);
+
+# Call the real Java compiler.
+my @fullCommandLine = ( $javaCompiler, '-C' );
+push @fullCommandLine, $warnings if ($warnings);
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
--- gcc-4.1-4.1.2.orig/debian/lib64gccLC.postinst
+++ gcc-4.1-4.1.2/debian/lib64gccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib64gcc@LC@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/rules.parameters
+++ gcc-4.1-4.1.2/debian/rules.parameters
@@ -0,0 +1,31 @@
+# configuration parameters taken from upstream source files
+GCC_VERSION	:= 4.1.3
+NEXT_GCC_VERSION	:= 4.1.4
+BASE_VERSION	:= 4.1
+SOURCE_VERSION	:= 4.1.2-24
+DEB_VERSION	:= 4.1.2-24
+DEB_EVERSION	:= 1:4.1.2-24
+GPC_BASE_VERSION	:= 
+GDC_BASE_VERSION  := 
+DEB_GPC_VERSION	:= 
+DEB_GDC_VERSION	:= 
+DEB_SOVERSION	:= 4.1.2
+DEB_SOEVERSION	:= 1:4.1.2
+DEB_LIBGCC_SOVERSION	:= 1:4.1.2
+DEB_LIBGCC_VERSION	:= 1:4.1.2-24
+DEB_STDCXX_SOVERSION	:= 4.1.2
+DEB_GCJ_SOVERSION	:= 4.1.2-1
+PKG_GCJ_EXT	:= 7
+PKG_LIBGCJ_EXT	:= 7-1
+DEB_FFI_SOVERSION	:= 4.1.2
+GCC_SONAME	:= 1
+CXX_SONAME	:= 6
+FORTRAN_SONAME	:= 1
+OBJC_SONAME	:= 1
+GCJ_SONAME	:= 71
+GNAT_VERSION	:= 4.1
+GNAT_SONAME	:= 4.1
+FFI_SONAME	:= 4
+MUDFLAP_SONAME	:= 0
+SSP_SONAME	:= 0
+LIBC_DEP		:= libc6
--- gcc-4.1-4.1.2.orig/debian/README.gnat
+++ gcc-4.1-4.1.2/debian/README.gnat
@@ -0,0 +1,34 @@
+If you want to develop Ada programs and libraries on Debian, please
+read the Debian Policy for Ada:
+
+http://www.ada-france.org/debian/debian-ada-policy.html
+
+The default Ada compiler is and always will be the package `gnat'.
+Debian contains many programs and libraries compiled with it, which
+are all ABI-compatible.
+
+Currently, in Etch and Sid, the default Ada compiler is gnat 3.15p.  A
+transition to gnat-4.1 has started, but is work in progress.  If you
+would like to help with this transition, please contact Ludovic Brenta
+<ludovic@ludovic-brenta.org>.
+
+Here are the steps in the transition:
+
+* link the GNAT tools dynamically against libgnat-4.1.so, not
+  statically. [done: 2006-03-21]
+
+* change the default directory for project files to
+  /usr/share/ada/adainclude, per the Debian Policy for Ada and the GNU
+  Ada Environment Specification.
+
+* port support for symbolic tracebacks from gnat.
+
+* port libgnatvsn and libgnatprj from gnat.
+
+* port ASIS to gnat-4.1.
+
+* port GLADE to gnat-4.1.
+
+When the transition completes, the package `gnat' will become a dummy
+package requiring gnat-4.1, and then all Ada packages will be rebuilt
+with the new compiler (with soname change for libraries).
--- gcc-4.1-4.1.2.orig/debian/gcc-BV-doc.prerm
+++ gcc-4.1-4.1.2/debian/gcc-BV-doc.prerm
@@ -0,0 +1,6 @@
+#! /bin/sh -e
+
+install-info --quiet --remove gcc-@BV@
+install-info --quiet --remove gccint-@BV@
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/gpc-BV-doc.postinst
+++ gcc-4.1-4.1.2/debian/gpc-BV-doc.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+if [ -f /usr/share/info/gpc-@BV@.info.gz ]; then
+  install-info --quiet --section "Development" "Development" \
+	--description="The GNU Pascal compiler." \
+	/usr/share/info/gpc-@BV@.info
+else
+  # GFDL invariant free
+  true
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/FAQ.gcj
+++ gcc-4.1-4.1.2/debian/FAQ.gcj
@@ -0,0 +1,494 @@
+The GCJ FAQ
+===========
+
+      The latest version of this document is always available at
+      http://gcc.gnu.org/java/faq.html.
+
+        General Questions
+
+            What license is used for libgcj?
+            How can I report a bug in libgcj?
+            How can I contribute to libgcj
+            Is libgcj part of GCC?
+            Will gcj and libgcj work on my machine?
+            How can I debug my Java program?
+            Can I interface byte-compiled and native java code?
+
+
+        Java Feature Support
+
+            What Java API's are supported? How complete is
+              the support?
+            Does GCJ support using straight C native methods
+              ala JNI?
+            Why does GCJ use CNI?
+            What is the state of AWT support?
+            How about support for Swing ?
+            What support is there for RMI ?
+            Can I use any code from other OpenSource projects
+              to supplement libgcj's current features ?
+            What features of the Java language are/arn't supported
+
+
+        Build Issues
+
+            I need something more recent than the last release; how
+                  should I build it?
+            Linker bug on Solaris
+            Can I configure/build in the source tree?
+            My libgcj build fails with "invalid use of undefined type
+                  struct sigcontext_struct"
+
+
+        Gcj Compile/Link Questions
+
+            Why do I get undefined reference to `main' errors?
+            Can GCJ only handle source code?
+            "gcj -C" Doesn't seem to work like javac/jikes. Whats going on?
+            Where does GCJ look for files?
+            How does gcj resolve wether to compile .class or .java files?
+            I'm getting link errors!
+            I'm getting 'undefined symbol: __dso_handle'
+
+
+        Runtime Questions
+
+            My program is dumping core! What's going on?
+            When I run the debugger I get a SEGV in the GC! What's going on?
+            I have just compiled and benchmarked my Java application
+            and it seems to be running slower than than XXX JIT JVM. Is there
+            anything I can do to make it go faster?
+            Can I profile Garbage Collection?
+            How do I increase the runtime's initial and maximum heap sizes?
+            How can I profile my application?
+            My program seems to hang and doesn't produce any output
+
+
+        Programming Issues
+
+            Are there any examples of how to use CNI?
+            Is it possible to invoke GCJ compiled Java code from a
+            C++ application?
+
+General Questions
+=================
+
+      1.1 What license is used for libgcj?
+
+          libgcj is distributed under the GPL, with the 'libgcc exception'.
+          This means that linking with libgcj does not by itself cause
+          your program to fall under the GPL.  See LIBGCJ_LICENSE in
+          the source tree for more details.
+
+      1.2 How can I report a bug in libgcj?
+
+          libgcj has a corresponding Gnats bug database which you can
+          browse. You can also submit new bug reports from the Gnats
+          page.
+
+      1.3 How can I contribute to libgcj?
+
+          You can send simple bug fixes in as patches. Please follow
+          the GCC guidelines for submitting patches. For more complex
+          changes, you must sign copyright over to the Free Software
+          Foundation. See the contribution page for details.
+
+      1.4 Is libgcj part of GCC?
+
+          Yes, libgcj is now part of GCC. It can be downloaded,
+          configured and built as one single tree.
+
+      1.5 Will gcj and libgcj work on my machine?
+
+          Gcj and libgcj are known to work more or less with IA-32 and
+          Sparc Solaris, Tru64 Unix, as well as IA-32, IA-64, Alpha,
+          and PowerPC Linux. They might work on other
+          systems. Generally speaking, porting to a new system should
+          not be hard. This would be a good way to volunteer.
+
+      1.6 How can I debug my Java program?
+
+          gdb 5.0 includes support for debugging gcj-compiled Java
+          programs. For more information please read Java Debugging
+          with gdb.
+
+      1.7 Can I interface byte-compiled and native java code
+
+          libgcj has a bytecode interpreter that allows you to mix
+          .class files with compiled code. It works pretty
+          transparently: if a compiled version of a class is not found
+          in the application binary or linked shared libraries, the
+          class loader will search for a bytecode version in your
+          classpath, much like a VM would. Be sure to build libgcj
+          with the --enable-interpreter option to enable this
+          functionality.
+
+          The program "gij" provides a front end to the interpreter
+          that behaves much like a traditional virtual machine. You
+          can even use "gij" to run a shared library which is compiled
+          from java code and contains a main method:
+
+          $ gcj -shared -o lib-HelloWorld.so HelloWorld.java
+          $ gij HelloWorld
+
+          This works because gij uses Class.forName, which knows how
+          to load shared objects.
+
+Java Feature Support
+====================
+
+      2.1 What Java API's are supported? How complete is
+        the support?
+
+          Matt Welsh writes:
+
+            Just look in the 'libjava' directory of libgcj and see
+            what classes are there. Most GUI stuff isn't there yet,
+            that's true, but many of the other classes are easy to add
+            if they don't yet exist.
+
+            I think it's important to stress that there is a big
+            difference between Java and the many libraries which Java
+            supports. Unfortunately, Sun's promise of "write once, run
+            everywhere" assumes much more than a JVM: you also need
+            the full set of JDK libraries. Considering that new Java
+            APIs come out every week, it's going to be impossible to
+            track everything.
+
+            To make things worse, you can't simply run Sun's JDK
+            classes on any old JVM -- they assume that a bunch of
+            native methods are also defined. Since this native method
+            requirement isn't defined by the JDK specs, you're
+            effectively constrained to using Sun's JVMs if you want to
+            use Sun's JDK libraries. Oh yes -- you could also
+            reimplement all of those native methods yourself, and make
+            sure they behave exactly as Sun's do. Note that they're
+            undocumented!
+
+      2.2 Does GCJ support using straight C native methods
+         ala JNI?
+
+          Yes. libgcj now has experimental support for JNI, in
+          addition to its native Compiled Native Interface (CNI). gcjh
+          will generate JNI stubs and headers using the "-jni"
+          option. However, we do prefer CNI: it is more efficient,
+          easier to write, and (at least potentially) easier to debug.
+
+      2.3 Why does GCJ use CNI?
+
+          Per Bothner explains:
+
+            We use CNI because we think it is a better solution,
+            especially for a Java implementation that is based on the
+            idea that Java is just another programming language that
+            can be implemented using standard compilation
+            techniques. Given that, and the idea that languages
+            implemented using Gcc should be compatible where it makes
+            sense, it follows that the Java calling convention should
+            be as similar as practical to that used for other
+            languages, especially C++, since we can think of Java as a
+            subset of C++. CNI is just a set of helper functions and
+            conventions built on the idea that C++ and Java have the
+            *same* calling convention and object layout; they are
+            binary compatible. (This is a simplification, but close
+            enough.)
+
+      2.4 What is the state of AWT support?
+
+          Work is in progress to implement AWT and Java2D. We intend
+          to support both GTK and xlib peers written using CNI. Some
+          components are already working atop the xlib peers.
+
+      2.5 How about support for Swing?
+
+          Once AWT support is working then Swing support can be
+          considered. There is at least one free-software partial
+          implementations of Swing that may be usable.
+
+      2.6 What support is there for RMI?
+
+         RMI code exists on the CVS trunk (aka gcc 3.1), but it has
+         not been heavily tested.  This code was donated by
+         Transvirtual Technologies.
+
+      2.7 Can I use any code from other OpenSource
+          projects to supplement libgcj's current features?
+
+           Certainly. However, in many cases, if you wanted to
+           contribute the code back into the official libgcj
+           distribution, we would require that the original author(s)
+           assign copyright to the Free Software Foundation.  As of
+           March 6, 2000, libgcj has been relicenced, and copyright
+           has been assigned to the FSF. This allows us to share and
+           merge much of the libgcj codebase with the Classpath
+           project.  Our eventual goal is for Classpath to be an
+           upstream source provider for libgcj, however it will be
+           some time before this becomes reality: libgcj and Classpath
+           have different implementations of many core java
+           classes. In order to merge them, we need to select the best
+           (most efficient, cleanest) implementation of each
+           method/class/package, resolve any conflicts created by the
+           merge, and test the final result.  Needless to say, this is
+           a lot of work. If you can help out, please let us know!
+
+      2.8 What features of the Java language are/aren't supported.
+
+          GCJ supports all Java language constructs as per the Java
+          language Specification.  Recent GCJ snapshots have added
+          support for most JDK1.1 (and beyond) language features,
+          including inner classes.
+
+Build Issues
+============
+
+      3.1 I need something more recent than the last release.
+          How should I build it?
+
+          Please read here: http://gcc.gnu.org/java/build-snapshot.html
+
+      3.2 Linker bug on Solaris
+
+          There is a known problem with the native Solaris linker when
+          using gcc/gcj. A good indication you've run into this
+          problem is if you get an error that looks like the following
+          when building libgcj:
+
+ld: warning: option -o appears more than once, first setting taken
+ld: fatal: file libfoo.so: cannot open file: No such file or directory
+ld: fatal: File processing errors. No output written to .libs/libfoo.so
+collect2: ld returned 1 exit status
+
+          A known workaround for this and other reported link problems
+          on the various releases of Solaris is to build gcc/gcj with
+          the latest GNU binutils instead of the native Solaris
+          ld. The most straightforward way to do this is to build and
+          install binutils, and then reference it in the configure for
+          gcc via --with-ld=/path_to_binutils_install/bin/ld
+          (--with-as may also be similarly specified but is not
+          believed to be required).
+
+          Please note, gcc/gcj must be built using GNU ld prior to
+          doing a clean build of libgcj!
+
+      3.3 Can I configure/build in the source tree?
+
+          No.  You cannot configure/build in the source tree.  If you
+          try, you'll see something like:
+
+              $ ./configure [...]
+              Configuring for a i686-pc-linux-gnu host.
+              *** Cannot currently configure in source tree.
+
+          Instead, you must build in another directory.  E.g.:
+
+              $ mkdir build
+              $ cd build
+              $ ../configure [...]
+
+      3.4 My libgcj build fails with "invalid use of undefined type
+          struct sigcontext_struct"
+
+          If you're using Linux, this probably means you need to
+          upgrade to a newwer, glibc (libc6) based Linux
+          distribution. libgcj does not support the older linux libc5.
+          It might be possible to get a working libgcj by changing
+          occurances of "sigcontext_struct" to "sigcontext", however
+          this has not been tested.  Even if it works, it is likely
+          that there are other issues with older libc versions that
+          would prevent libgcj from working correctly (threads bugs,
+          for example).
+
+Gcj Compile/Link Questions
+==========================
+
+      4.1 Why do I get undefined reference to `main' errors?
+
+          When using gcj to link a Java program, you must use the --main=
+          option to indicate the class that has the desired main method.
+          This is because every Java class can have a main method, thus
+          you have to tell gcj which one to use.
+
+      4.2 Can GCJ only handle source code?
+
+          GCJ will compile both source (.java) and bytecode (.class)
+          files. However, in many cases the native code produced by
+          compiling from source is better optimized than that compiled
+          from .class files.
+
+          Per Bothner explains:
+
+            The reason is that when you compile to bytecode you lose a
+            lot of information about program structure etc. That
+            information helps in generating better code. We can in
+            theory recover the information we need by analysing the
+            structure of the bytecodes, but it is sometimes difficult
+            - or sometimes it just that no-one has gotten around to
+            it.  Specific examples include loop structure (gcc
+            generates better code with explicit loops rather than with
+            the equivalent spaghetti code), array initializers, and
+            the JDK 1.1 `CLASS.class' syntax, all of which are
+            represented using more low-level constructs in bytecode.
+
+      4.3 "gcj -C" Doesn't seem to work like javac/jikes.  Whats going on?
+
+          The behavior of "gcj -C" is not at all like javac or jikes,
+          which will compile (not just scan) all .java's which are out
+          of date with regard to their .class's.
+
+      4.4 Where does GCJ look for files?
+
+          GCJ looks for classes to compile based on the CLASSPATH
+          environment variable. libgcj.jar and other files are found
+          relative to the path of the compiler itself, so it is safe
+          to move the entire compiler tree to a different path, and
+          there is no need to include libgcj.jar in your CLASSPATH.
+
+      4.5 How does gcj resolve whether to compile .class or .java files?
+
+          GCJ compiles only the files presented to it on the command
+          line. However, it also needs to scan other files in order to
+          determine the layout of other classes and check for errors
+          in your code.  For these dependencies, GCJ will favour
+          .class files if they are available because it is faster to
+          parse a class file than source code.
+
+      4.6 I'm getting link errors
+
+          If you get errors at link time that refer to 'undefined
+          reference to `java::lang::Object type_info function', verify
+          that you have compiled any CNI C++ files with the -fno-rtti
+          option. This is only required for versions of GCJ earlier
+          than 3.0.
+
+      4.7 I'm getting 'undefined symbol: __dso_handle'
+
+          Some versions of the GNU linker have broken support for the
+          '.hidden' directive, which results in problems with shared
+          libraries built with recent versions of gcc.
+
+          There are three solutions:
+
+            - downgrade to binutils that don't support .hidden at all,
+            - upgrade to a recent binutils, or
+            - undef the HAVE_GAS_HIDDEN definition in gcc's auto-host.h
+              (and rebuild gcc).
+
+Runtime Questions
+=================
+
+      5.1 My program is dumping core! What's going on?
+
+          It could be any number of things. One common mistake is
+          having your CLASSPATH environment variable pointing at a
+          third party's java.lang and friends. Either unset CLASSPATH,
+          or make sure it does not refer to core libraries other than
+          those found in libgcj.jar.Note that newwer versions of GCJ
+          will reject the core class library if it wasn't generated by
+          GCJ itself.
+
+      5.2 When I run the debugger I get a SEGV in the GC! What's going on?
+
+          This is "normal"; the Garbage Collector (GC) uses it to
+          determine stack boundaries. It is ordinarily caught and
+          handled by the GC -- you can see this in the debugger by
+          using cont to continue to the "real" segv.
+
+      5.3 I have just compiled and benchmarked my Java application
+          and it seems to be running slower than than XXX JIT JVM. Is there
+          anything I can do to make it go faster?
+
+        A few things:
+
+          - If your programs allocate many small, short lived objects,
+            the heap could be filling and triggering GC too
+            regularly. Try increasing the initial and maximum heap sizes
+            as per 5.5 How do I increase the runtime's initial and
+            maximum heap size?
+          - RE - array accesses. We have sub-optimal runtime checking
+            code, and the compiler is still not so smart about
+            automatically removing array checks. If your code is ready,
+            and it doesn't rely on them, try compiling with
+            --no-bounds-check.
+          - Try static linking.  On many platforms, dynamic (PIC)
+            function calls are more expensive than static ones. In
+            particular, the interaction with boehm-gc seems to incur
+            extra overhead when shared libraries are used.
+          - If your Java application doesn't need threads, try
+            building libgcj using --enable-threads=none. Portions of the
+            libgcj runtime are still more efficient when
+            single-threaded.
+
+       5.4 Can I profile Garbage Collection?
+
+          It is possible to turn on verbose GC output by supressing
+          the -DSILENT flag during build. One way to do this is to
+          comment out the line with #define SILENT 1 from
+          boehm-gc/configure before configuring libgcj.  The GC will
+          print collection statistics to stdout. (Rebuilding boehm-gc
+          alone without this flag doesn't seem to work.)
+
+      5.5 How do I increase the runtime's initial and maximum heap sizes?
+
+          Some programs that allocate many small, short-lived objects
+          can cause the default-sized heap to fill quickly and GC
+          often. With the 2.95.1 release there is no means to adjust
+          the heap at runtime. Recent snapshots provide the -ms and
+          -mx arguments to gij to specify the initial and maximum heap
+          sizes, respectively.
+
+      5.6 How can I profile my application?
+
+          Currently, only single threaded Java code may be used by the
+          profiler (gprof). POSIX threads seem to be incompatible with
+          the gmon stuff.  A couple of other tools that have been
+          mentioned on the GCJ mailing list are sprof and cprof.  The
+          former is part of GNU libc.
+
+      5.7 My program seems to hang and doesn't produce any output
+
+          Some versions had a bug in the iconv support. You can work
+          around it by setting LANG=en_US.UTF-8 at runtime, or give
+          the following option during compile time
+          -Dfile.encoding=UTF-8.  This problem should no longer occur
+          as of November 1, 2000.
+
+Programming Issues
+==================
+
+      6.1 Are there any examples of how to use CNI?
+
+          Glenn Chambers has created a couple of trivial examples for
+          version 2.95 and version 3.0.  As a comparison, here is the
+          same example as a JNI application using Kaffe.  The same
+          code will work with GCJ, as shown here.
+
+          Note that for version 2.95, you must compile the C++ files
+          used for CNI with the -fno-rtti option.  This constraint
+          does not apply in version 3.0 and later.
+
+          The primary source of documentation for CNI is at
+          http://gcc.gnu.org/java/papers/cni/t1.html
+
+      6.2 Is it possible to invoke GCJ compiled Java code from a
+          C++ application?
+
+          Yes, GCJ 3.1 supports a CNI-based invocation interface as
+          well as the traditional JNI invocation API.  See the GCJ
+          Manual for more details on how to use the CNI interface.
+
+Please send FSF & GNU inquiries & questions tognu@gnu.org.There are
+also other waysto contact the FSF.
+
+These pages are maintained by The GCC team.
+
+Please send comments on these web pages and GCC to our publicmailing
+list at gcc@gnu.org orgcc@gcc.gnu.org, send other questions to
+gnu@gnu.org.
+
+Copyright (C) Free Software Foundation, Inc.,
+59 Temple Place - Suite 330, Boston, MA  02111,  USA.
+
+Verbatim copying and distribution of this entire article is permitted
+in any medium, provided this notice is preserved.
+
+Last modified 2003-04-30
--- gcc-4.1-4.1.2.orig/debian/libstdc++CXX-BV-doc.doc-base
+++ gcc-4.1-4.1.2/debian/libstdc++CXX-BV-doc.doc-base
@@ -0,0 +1,13 @@
+Document: libstdc++@CXX@-@BV@-doc
+Title: The GNU Standard C++ Library v3 (gcc-@BV@)
+Author: Various
+Abstract: This package contains documentation files for the GNU stdc++ library.
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+Section: Programming/C++
+
+Format: html
+Index: /usr/share/doc/libstdc++@CXX@-@BV@-doc/libstdc++/html_user/index.html
+Files: /usr/share/doc/libstdc++@CXX@-@BV@-doc/libstdc++/html*/*
--- gcc-4.1-4.1.2.orig/debian/copyright
+++ gcc-4.1-4.1.2/debian/copyright
@@ -0,0 +1,668 @@
+This is the Debian GNU/Linux prepackaged version of the GNU compiler
+collection, containing Ada, C, C++, Fortran 95, Java, Objective-C,
+Objective-C++, and Treelang compilers, documentation, and support
+libraries.  In addition, Debian provides the GNU Pascal compiler in the
+same source package.  Packaging is done by the Debian GCC Maintainers
+<debian-gcc@lists.debian.org>, with sources obtained from:
+
+  ftp://gcc.gnu.org/pub/gcc/releases/  (for full releases)
+  svn://gcc.gnu.org/svn/gcc/           (for prereleases)
+  http://gnu-pascal.de/alpha/          (for GNU Pascal)
+  http://dgcc.sourceforge.net/         (for D)
+
+Changes: See changelog.Debian.gz
+
+Debian splits the GNU Compiler Collection into packages for each language,
+library, and documentation as follows:
+
+Language       Compiler package  Library package    Documentation
+---------------------------------------------------------------------------
+Ada            gnat-4.1          libgnat-4.1        gnat-4.1-doc
+C              gcc-4.1                              gcc-4.1-doc
+C++            g++-4.1           libstdc++6         libstdc++6-4.1-doc
+Fortran 95     gfortran-4.1      libgfortran1       gfortran-4.1-doc
+Java           gcj-4.1           libgcj7            libgcj-doc
+Objective C    gobjc-4.1         libobjc1
+Objective C++  gobjc++-4.1
+Pascal         gpc-4.1
+D              gdc-4.1
+Treelang       treelang-4.1
+
+For some language run-time libraries, Debian provides source files,
+development files, debugging symbols and libraries containing position-
+independent code in separate packages:
+
+Language  Sources     Development  Debugging           Position-Independent
+---------------------------------------------------------------------------
+C++                                libstdc++6-4.1-dbg  libstdc++6-4.1-pic
+Java      libgcj7-src libgcj7-dev  libgcj7-dbg
+
+Additional packages include:
+
+All languages:
+libgcc1, libgcc2, libgcc4       GCC intrinsics (platform-dependent)
+libffi4-dev, libffi4            Foreign Function Interface library
+gcc-4.1-base                    Base files common to all compilers
+gcc-4.1-soft-float              Software floating point (ARM only)
+gcc-4.1-source                  The sources with patches
+
+Ada:
+libgnatvsn-dev, libgnatvsn4.1   GNAT version library
+libgnatprj-dev, libgnatprj4.1   GNAT Project Manager library
+
+C:
+cpp-4.1, cpp-4.1-doc            GNU C Preprocessor
+libmudflap0-dev, libmudflap0    Library for instrumenting pointers
+libssp0-dev, libssp0            GCC stack smashing protection library
+fixincludes                     Fix non-ANSI header files
+protoize                        Create/remove ANSI prototypes from C code
+
+Java:
+fastjar                         Jar creation utility
+gij                             The Java bytecode interpreter and VM
+libgcj-common                   Common files for the Java run-time
+libgcj7-awt                     The Abstract Windowing Toolkit
+libgcj7-jar                     Java ARchive for the Java run-time
+
+Biarch support: On some 64-bit platforms which can also run 32-bit code,
+Debian provides additional packages containing 32-bit versions of some
+libraries.  These packages have names beginning with 'lib32' instead of
+'lib', for example lib32stdc++6.  Similarly, on some 32-bit platforms which
+can also run 64-bit code, Debian provides additional packages with names
+beginning with 'lib64' instead of 'lib'.  These packages contain 64-bit
+versions of the libraries.  (At this time, not all platforms and not all
+libraries support biarch.)  The license terms for these lib32 or lib64
+packages are identical to the ones for the lib packages.
+
+
+COPYRIGHT STATEMENTS AND LICENSING TERMS
+
+
+GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+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.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL'.
+
+The libstdc++-v3 library is licensed under the terms of the GNU General
+Public License, with this special exception:
+
+   As a special exception, you may use this file as part of a free software
+   library without restriction.  Specifically, if other files instantiate
+   templates or use macros or inline functions from this file, or you compile
+   this file and link it with other files to produce an executable, this
+   file does not by itself cause the resulting executable to be covered by
+   the GNU General Public License.  This exception does not however
+   invalidate any other reasons why the executable file might be covered by
+   the GNU General Public License.
+
+The libgnat-4.1 Ada support library and libgnatvsn are licensed under the
+terms of the GNU General Public License, with this special exception:
+
+   As a special exception, if other files instantiate generics from this
+   unit, or you link this unit with other files to produce an executable,
+   this unit does not by itself cause the resulting executable to be
+   covered by the GNU General Public License. This exception does not
+   however invalidate any other reasons why the executable file might be
+   covered by the GNU Public License.
+
+In contrast, libgnatprj is licensed under the terms of the pure GNU
+General Public License.
+
+gpc is copyright Free Software Foundation, and is licensed under the
+GNU General Public License which on Debian GNU/Linux systems can be
+found as `/usr/share/common-licenses/GPL3'.
+
+The gpc runtime library is licensed under the terms of the GNU General
+Public License, with this special exception:
+
+  As a special exception, if you link this file with files compiled
+  with a GNU compiler to produce an executable, this does not cause
+  the resulting executable to be covered by the GNU General Public
+  License. This exception does not however invalidate any other
+  reasons why the executable file might be covered by the GNU
+  General Public License. }
+
+The libgcj library is licensed under the terms of the GNU General
+Public License, with a special exception:
+
+    Linking this library statically or dynamically with other modules
+    is making a combined work based on this library.  Thus, the terms
+    and conditions of the GNU General Public License cover the whole
+    combination.
+
+    As a special exception, the copyright holders of this library give
+    you permission to link this library with independent modules to
+    produce an executable, regardless of the license terms of these
+    independent modules, and to copy and distribute the resulting
+    executable under terms of your choice, provided that you also
+    meet, for each linked independent module, the terms and conditions
+    of the license of that module.  An independent module is a module
+    which is not derived from or based on this library.  If you modify
+    this library, you may extend this exception to your version of the
+    library, but you are not obligated to do so.  If you do not wish
+    to do so, delete this exception statement from your version.
+
+gcc/libgcc2.c (source for libgcc) has the following addition:
+
+    In addition to the permissions in the GNU General Public License,
+    the Free Software Foundation gives you unlimited permission to
+    link the compiled version of this file into combinations with
+    other programs, and to distribute those combinations without any
+    restriction coming from the use of this file.  (The General Public
+    License restrictions do apply in other respects; for example, they
+    cover modification of the file, and distribution when not linked
+    into a combine executable.)
+
+gcc/unwind-libunwind.c (source for libgcc) has the following addition:
+
+    As a special exception, if you link this library with other files,
+    some of which are compiled with GCC, to produce an executable,
+    this library does not by itself cause the resulting executable to
+    be covered by the GNU General Public License.  This exception does
+    not however invalidate any other reasons why the executable file
+    might be covered by the GNU General Public License.
+
+The mudflap library is licensed under the terms of the GNU General
+Public License, and has the following addition:
+
+    In addition to the permissions in the GNU General Public License,
+    the Free Software Foundation gives you unlimited permission to
+    link the compiled version of this file into combinations with
+    other programs, and to distribute those combinations without any
+    restriction coming from the use of this file.  (The General Public
+    License restrictions do apply in other respects; for example, they
+    cover modification of the file, and distribution when not linked
+    into a combine executable.)
+
+The ssp library is licensed under the terms of the GNU General
+Public License, with a special exception:
+
+    As a special exception, if you link this library with other files,
+    some of which are compiled with GCC, to produce an executable,
+    this library does not by itself cause the resulting executable to
+    be covered by the GNU General Public License.  This exception does
+    not however invalidate any other reasons why the executable file
+    might be covered by the GNU General Public License.
+
+The D frontend is licensend under the terms of the GNU General
+Public License, either version 2 of the License, or (at your option)
+any later version, which on Debian GNU/Linux systems can be found as
+`/usr/share/common-licenses/GPL'.
+
+The D runtime library (phobos) is licensed under the following terms:
+
+/*
+ *  Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
+ *  Written by Walter Bright
+ *
+ *  This software is provided 'as-is', without any express or implied
+ *  warranty. In no event will the authors be held liable for any damages
+ *  arising from the use of this software.
+ *
+ *  Permission is granted to anyone to use this software for any purpose,
+ *  including commercial applications, and to alter it and redistribute it
+ *  freely, in both source and binary form, subject to the following
+ *  restrictions:
+ *
+ *  o  The origin of this software must not be misrepresented; you must not
+ *     claim that you wrote the original software. If you use this software
+ *     in a product, an acknowledgment in the product documentation would be
+ *     appreciated but is not required.
+ *  o  Altered source versions must be plainly marked as such, and must not
+ *     be misrepresented as being the original software.
+ *  o  This notice may not be removed or altered from any source
+ *     distribution.
+ */
+
+By plainly marking modifications, something along the lines of adding to each
+file that has been changed a "Modified by Foo Bar" line
+underneath the "Written by" line would be adequate.
+
+
+The documentation is licensed under the GNU Free Documentation License
+(v1.2), appended at the end of this file.
+
+
+GNU Free Documentation License
+******************************
+
+                      Version 1.2, November 2002
+     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warrany Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided for under this License.  Any other
+     attempt to copy, modify, sublicense or distribute the Document is
+     void, and will automatically terminate your rights under this
+     License.  However, parties who have received copies, or rights,
+     from you under this License will not have their licenses
+     terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+   To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.2
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+       A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
--- gcc-4.1-4.1.2.orig/debian/README.patches
+++ gcc-4.1-4.1.2/debian/README.patches
@@ -0,0 +1,30 @@
+Patches applied to the Debian version of egcs
+---------------------------------------------
+
+Debian specific patches can be found in the debian/patches directory.
+Each patch is accompanied by a shell script to apply and unapply the
+patch:
+
+- The script can be found in the debian/patches directory and is called
+  <patchname>.dpatch.
+- The shell script is called by the debian/rules file with the option
+  '-patch' to apply the patch and and with '-unpatch' to unapply
+  the patch. The working directory is the source directory.
+- The shell script returns 0 on success and 1 on failure when
+  (un)applying the patch. The patch program itself should be called with
+  --force to prevent questions.
+- debian/rules creates a file patched-<patchname> in the source
+  directory when applying the patch and removes this file when
+  unapplying the patch.
+
+Besides the patches, the following add-ons were included:
+
+- gpc (unpacked from gpc-19990118.tar.gz)
+  ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/beta/gpc-19990118.tar.gz
+
+If these package(s) aren't found in the gcc source directory, it's
+assumed that the tarball(s) can be found in the parent directory. See
+debian/rules for more details.
+
+Before making a source package, these packages need to be unpacked.
+You can use "debian/rules unpack-addons".
--- gcc-4.1-4.1.2.orig/debian/fixincludes.in
+++ gcc-4.1-4.1.2/debian/fixincludes.in
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+PATH="/@LIBEXECDIR@/install-tools:$PATH"
+
+TARGET_MACHINE=`dpkg-architecture -qDEB_HOST_GNU_TYPE`
+export TARGET_MACHINE
+
+exec fixinc.sh "$@"
--- gcc-4.1-4.1.2.orig/debian/gij-BV.postinst
+++ gcc-4.1-4.1.2/debian/gij-BV.postinst
@@ -0,0 +1,52 @@
+#! /bin/sh -e
+
+prio=$(echo @BV@ | sed 's/\.//g')
+
+update-alternatives --quiet \
+    --install /usr/bin/java java /usr/bin/gij-@BV@ $prio \
+    @GFDL@--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/share/man/man1/gij-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/rmiregistry rmiregistry /usr/bin/grmiregistry-@BV@ $prio \
+    --slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/share/man/man1/grmiregistry-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/keytool keytool /usr/bin/gkeytool-@BV@ $prio \
+    --slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/share/man/man1/gkeytool-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/orbd orbd /usr/bin/gorbd-@BV@ $prio \
+    --slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/share/man/man1/gorbd-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/rmid rmid /usr/bin/grmid-@BV@ $prio \
+    --slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/share/man/man1/grmid-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/serialver serialver /usr/bin/gserialver-@BV@ $prio \
+    --slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/share/man/man1/gserialver-@BV@.1.gz
+
+case "$1" in
+configure)
+    if [ ! -f /var/lib/gcj-@BV@/classmap.db ]; then
+	uname=$(uname -m)
+	mkdir -p /var/lib/gcj-@BV@
+	if gcj-dbtool-@BV@ -n /var/lib/gcj-@BV@/classmap.db; then
+	    case "$uname" in arm*|m68k|parisc*)
+	        echo >&2 "gcj-dbtool succeeded unexpectedly"
+	    esac
+	else
+	    case "$uname" in
+	    arm*|m68k|parisc*)
+	        echo >&2 "ERROR: gcj-dbtool did fail; known problem on $uname";;
+	    *)
+		exit 2
+	    esac
+	    touch /var/lib/gcj-@BV@/classmap.db
+	fi
+    fi
+esac
+
+#DEBHELPER#
+
+exit 0
--- gcc-4.1-4.1.2.orig/debian/rules.unpack
+++ gcc-4.1-4.1.2/debian/rules.unpack
@@ -0,0 +1,215 @@
+# -*- makefile -*-
+# rules to unpack the source tarballs in $(srcdir); if the source dir already
+# exists, the rule exits with an error to prevent deletion of modified
+# source files. It has to be deleted manually.
+
+tarballs = $(gcc_tarball) $(gcj_tarball)
+ifeq ($(with_pascal),yes)
+  tarballs += $(gpc_tarball)
+endif
+ifeq ($(with_d),yes)
+  tarballs += $(gdc_tarball)
+endif
+
+
+unpack_stamps = $(foreach i,$(tarballs),$(unpack_stamp)-$(i))
+
+unpack: stamp-dir $(unpack_stamp) debian-chmod
+$(unpack_stamp): $(unpack_stamps)
+$(unpack_stamp): $(foreach p,$(debian_tarballs),unpacked-$(p))
+	echo -e "\nBuilt from Debian source package $(PKGSOURCE)-$(SOURCE_VERSION)" \
+		> pxxx
+	echo -e "Integrated upstream packages in this version:\n" >> pxxx
+	for i in $(tarballs); do echo "  $$i" >> pxxx; done
+	mv -f pxxx $@
+
+debian-chmod:
+	@chmod 755 debian/dh_*
+
+# ---------------------------------------------------------------------------
+
+gfdl_texinfo_files = \
+	gcc/doc/bugreport.texi \
+	gcc/doc/cfg.texi \
+	gcc/doc/collect2.texi \
+	gcc/doc/compat.texi \
+	gcc/doc/configfiles.texi \
+	gcc/doc/configterms.texi \
+	gcc/doc/contrib.texi \
+	gcc/doc/contribute.texi \
+	gcc/doc/cppenv.texi \
+	gcc/doc/cppinternals.texi \
+	gcc/doc/cppopts.texi \
+	gcc/doc/cpp.texi \
+	gcc/doc/c-tree.texi \
+	gcc/doc/extend.texi \
+	gcc/doc/fragments.texi \
+	gcc/doc/frontends.texi \
+	gcc/doc/gccint.texi \
+	gcc/doc/gcc.texi \
+	gcc/doc/gcov.texi \
+	gcc/doc/gnu.texi \
+	gcc/doc/gty.texi \
+	gcc/doc/headerdirs.texi \
+	gcc/doc/hostconfig.texi \
+	gcc/doc/implement-c.texi \
+	gcc/doc/install-old.texi \
+	gcc/doc/install.texi \
+	gcc/doc/interface.texi \
+	gcc/doc/invoke.texi \
+	gcc/doc/languages.texi \
+	gcc/doc/libgcc.texi \
+	gcc/doc/makefile.texi \
+	gcc/doc/md.texi \
+	gcc/doc/objc.texi \
+	gcc/doc/options.texi \
+	gcc/doc/passes.texi \
+	gcc/doc/portability.texi \
+	gcc/doc/rtl.texi \
+	gcc/doc/service.texi \
+	gcc/doc/sourcebuild.texi \
+	gcc/doc/standards.texi \
+	gcc/doc/tm.texi \
+	gcc/doc/tree-ssa.texi \
+	gcc/doc/trouble.texi \
+	gcc/doc/include/gcc-common.texi \
+	gcc/doc/include/funding.texi \
+	gcc/fortran/invoke.texi \
+	gcc/fortran/intrinsic.texi \
+	libstdc++-v3/docs/html/17_intro/porting.texi \
+
+gfdl_toplevel_texinfo_files = \
+	gcc/doc/gcc.texi \
+	gcc/java/gcj.texi \
+	gcc/ada/gnat-style.texi \
+	gcc/ada/gnat_rm.texi \
+	gcc/ada/gnat_ugn.texi \
+	gcc/fortran/gfortran.texi \
+	gcc/treelang/treelang.texi \
+
+gfdl_manpages = \
+	gcc/doc/cpp.1 \
+	gcc/doc/g++.1 \
+	gcc/doc/gcc.1 \
+	gcc/doc/gcj.1 \
+	gcc/doc/gcj-dbtool.1 \
+	gcc/doc/gcjh.1 \
+	gcc/doc/gcov.1 \
+	gcc/doc/gij.1 \
+	gcc/doc/gjnih.1 \
+	gcc/doc/grmic.1 \
+	gcc/doc/grmiregistry.1 \
+	gcc/doc/jcf-dump.1 \
+	gcc/doc/jv-convert.1 \
+	gcc/doc/jv-scan.1
+
+# ---------------------------------------------------------------------------
+$(unpack_stamp)-$(gcc_tarball): $(gcc_tarpath)
+	: # unpack gcc tarball
+	-mkdir $(stampdir)
+	if [ -d $(srcdir) ]; then \
+	  echo >&2 "Source directory $(srcdir) exists. Delete by hand"; \
+	  false; \
+	fi
+	rm -rf $(gcc_srcdir)
+	case $(gcc_tarball) in \
+	  *.bz2) tar -x --bzip2 -f $(gcc_tarpath);; \
+	  *.gz)  tar -x --gzip  -f $(gcc_tarpath);; \
+	  *)     false; \
+	esac
+	mv $(gcc_srcdir) $(srcdir)
+ifeq (0,1)
+	cd $(srcdir) && tar cfj ../gcc-4.1.1-doc.tar.bz2 \
+		$(gfdl_texinfo_files) \
+		$(gfdl_toplevel_texinfo_files) \
+		$(gfdl_manpages) \
+		libstdc++-v3/docs/html/17_intro/porting.html
+endif
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	rm -f $(srcdir)/gcc/doc/*.1
+	rm -f $(srcdir)/gcc/doc/*.info
+	for i in $(gfdl_texinfo_files); do \
+	  cp $(SOURCE_DIR)debian/dummy.texi $(srcdir)/$$i; \
+	done
+	for i in $(gfdl_toplevel_texinfo_files); do \
+	  n=$$(basename $$i .texi); \
+	  sed "s/@name@/$$n/g" $(SOURCE_DIR)debian/gcc-dummy.texi > $(srcdir)/$$i; \
+	done
+	cp $(SOURCE_DIR)debian/porting.* $(srcdir)/libstdc++-v3/docs/html/17_intro/
+	for i in $(gfdl_manpages); do \
+	  touch $(srcdir)/$$i; \
+	done
+endif
+	echo "$(gcc_tarball) unpacked." > $@
+
+# ---------------------------------------------------------------------------
+$(unpack_stamp)-$(gcj_tarball): $(gcj_tarpath) $(unpack_stamp)-$(gcc_tarball)
+	: # unpack gcj tarball
+	rm -rf $(srcdir)/gcc/java $(srcdir)/libjava
+	tar -x -C $(srcdir) -f $(gcj_tarpath)
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	rm -f $(srcdir)/gcc/java/*.1
+	rm -f $(srcdir)/gcc/java/*.info
+	for i in $(gfdl_texinfo_files); do \
+	  cp $(SOURCE_DIR)debian/dummy.texi $(srcdir)/$$i; \
+	done
+	for i in $(gfdl_toplevel_texinfo_files); do \
+	  n=$$(basename $$i .texi); \
+	  sed "s/@name@/$$n/g" $(SOURCE_DIR)debian/gcc-dummy.texi > $(srcdir)/$$i; \
+	done
+endif
+	echo "$(gcj_tarball) unpacked." > $@
+
+# ---------------------------------------------------------------------------
+$(unpack_stamp)-$(gpc_tarball): $(gpc_tarpath)
+	: # unpack gpc tarball
+	-mkdir $(stampdir)
+	if [ -d $(srcdir)/gcc/p ]; then \
+	  echo >&2 "Source directory $(srcdir)/gcc/p exists. Delete by hand";\
+	  false; \
+	fi
+	#rm -rf $(gpc_srcdir)
+	rm -rf p
+	case $(gpc_tarball) in \
+	  *.bz2) tar -x --bzip2 -f $(gpc_tarpath);; \
+	  *.gz)  tar -x --gzip  -f $(gpc_tarpath);; \
+	  *)     false; \
+	esac
+	if [ -d p ]; then \
+	  mv p $(srcdir)/gcc/. ; \
+	else \
+	  mv $(gpc_srcdir)/p $(srcdir)/gcc/. ; \
+	  rm -rf $(gpc_srcdir)/CVS; \
+	  rmdir $(gpc_srcdir); \
+	fi
+	echo "$(gpc_tarball) unpacked." > $@
+
+# ---------------------------------------------------------------------------
+$(unpack_stamp)-$(gdc_tarball): $(gdc_tarpath)
+	: # unpack gdc tarball
+	-mkdir $(stampdir)
+	if [ -d $(srcdir)/gcc/d ]; then \
+	  echo >&2 "Source directory $(srcdir)/gcc/d exists. Delete by hand";\
+	  false; \
+	fi
+	#rm -rf $(gdc_srcdir)
+	rm -rf d
+	case $(gdc_tarball) in \
+	 *.bz2) tar -x --bzip2 -f $(gdc_tarpath);; \
+	 *.gz)  tar -x --gzip  -f $(gdc_tarpath);; \
+	 *)     false; \
+	esac
+	if [ -d d ]; then \
+	  mv d $(srcdir)/gcc/. ; \
+	else \
+	  mv $(gdc_srcdir)/d $(srcdir)/gcc/. ; \
+	  rm -rf $(gdc_srcdir)/CVS; \
+	  rmdir $(gdc_srcdir); \
+	fi
+	rm -f $(srcdir)/gcc/d/d-make-include
+ifeq ($(libphobos_version),2)
+	echo "D_LANGUAGE_VERSION=2" > $(srcdir)/gcc/d/d-make-include
+else
+	echo "D_LANGUAGE_VERSION=1" > $(srcdir)/gcc/d/d-make-include
+endif
+	echo "$(gdc_tarball) unpacked." > $@
--- gcc-4.1-4.1.2.orig/debian/NEWS.gcc
+++ gcc-4.1-4.1.2/debian/NEWS.gcc
@@ -0,0 +1,674 @@
+GCC 4.1 Release SeriesChanges, New Features, and Fixes
+======================================================
+
+The latest release in the 4.1 release series is GCC 4.1.2.
+
+
+Caveats
+=======
+
+
+General Optimizer Improvements
+==============================
+
+
+- GCC now has infrastructure for inter-procedural optimizations and
+  the following inter-procedural optimizations are implemented:
+	
+  - Profile guided inlining.  When doing profile feedback guided
+    optimization, GCC can now use the profile to make better informed
+    decisions on whether inlining of a function is profitable or not.
+    This means that GCC will no longer inline functions at call sites
+    that are not executed very often, and that functions at hot call
+    sites are more likely to be inlined.
+
+    A new parameter min-inline-recursive-probability is also now
+    available to throttle recursive inlining of functions with small
+    average recursive depths.
+
+  - Discovery of pure and const functions, a form of side-effects
+    analysis.  While older GCC releases could also discover such special
+    functions, the new IPA-based pass runs earlier so that the results
+    are available to more optimizers.  The pass is also simply more
+    powerful than the old one.
+
+  - Analysis of references to static variables and type escape
+    analysis, also forms of side-effects analysis.  The results of these
+    passes allow the compiler to be less conservative about
+    call-clobbered variables and references.  This results in more
+    redundant loads being eliminated and in making static variables
+    candidates for register promotion.
+
+  - Improvement of RTL-based alias analysis.  The results of type
+    escape analysis are fed to the RTL type-based alias analyzer,
+    allowing it to disambiguate more memory references.
+
+  - Interprocedural constant propagation and function versioning.
+    This pass looks for functions that are always called with the same
+    constant value for one or more of the function arguments, and
+    propagates those constants into those functions.
+
+  - GCC will now eliminate static variables whose usage was optimized out.
+
+  - -fwhole-program --combine can now be used to make all functions in
+    program static allowing whole program optimization.  As an
+    exception, the main function and all functions marked with the new
+    externally_visible attribute are kept global so that programs can
+    link with runtime libraries.
+	
+
+- GCC can now do a form of partial dead code elimination (PDCE) that
+  allows code motion of expressions to the paths where the result of the
+  expression is actually needed.  This is not always a win, so the pass
+  has been limited to only consider profitable cases.  Here is an example:
+
+    int foo (int *, int *);
+    int
+    bar (int d)
+    {
+      int a, b, c;
+      b = d + 1;
+      c = d + 2;
+      a = b + c;
+      if (d)
+        {
+          foo (&b, &c);
+          a = b + c;
+        }
+      printf ("%d\n", a);
+    }
+	
+
+  The a = b + c can be sunk to right before the printf.  Normal code
+  sinking will not do this, it will sink the first one above into the
+  else-branch of the conditional jump, which still gives you two
+  copies of the code.
+
+- GCC now has a value range propagation pass.  This allows the
+  compiler to eliminate bounds checks and branches.  The results of the
+  pass can also be used to accurately compute branch probabilities.
+
+- The pass to convert PHI nodes to straight-line code (a form of
+  if-conversion for GIMPLE) has been improved significantly.  The two
+  most significant improvements are an improved algorithm to determine
+  the order in which the PHI nodes are considered, and an improvement
+  that allow the pass to consider if-conversions of basic blocks with
+  more than two predecessors.
+
+- Alias analysis improvements.  GCC can now differentiate between
+  different fields of structures in Tree-SSA's virtual operands
+  form. This lets stores/loads from non-overlapping structure fields not
+  conflict.  A new algorithm to compute points-to sets was contributed
+  that can allows GCC to see now that p->a and p->b, where p is a
+  pointer to a structure, can never point to the same field.
+
+- Various enhancements to auto-vectorization:
+	
+  - Incrementally preserve SSA form when vectorizing.
+
+  - Incrementally preserve loop-closed form when vectorizing.
+
+  - Improvements to peeling for alignment: generate better code when
+    the misalignment of an access is known at compile time, or when
+    different accesses are known to have the same misalignment, even if
+    the misalignment amount itself is unknown.
+
+  - Consider dependence distance in the vectorizer.
+
+  - Externalize generic parts of data reference analysis to make this
+    analysis available to other passes.
+
+  - Vectorization of conditional code.
+
+  - Reduction support.
+	
+- GCC can now partition functions in sections of hot and cold
+  code. This can significantly improve performance due to better
+  instruction cache locality.  This feature works best together with
+  profile feedback driven optimization.
+
+- A new pass to avoid saving of unneeded arguments to the stack in
+  vararg functions if the compiler can prove that they will not be
+  needed.
+
+- Transition of basic block profiling to tree level implementation has
+  been completed.  The new implementation should be considerably more
+  reliable (hopefully avoiding profile mismatch errors when using
+  -fprofile-use or -fbranch-probabilities) and can be used to drive
+  higher level optimizations, such as inlining.
+	
+  The -ftree-based-profiling command line option was removed and
+  -fprofile-use now implies disabling old RTL level loop optimizer
+  (-fno-loop-optimize).  Speculative prefetching optimization
+  (originally enabled by -fspeculative-prefetching) was removed.
+
+
+New Languages and Language specific improvements
+================================================
+
+C and Objective-C
+-----------------
+
+- The old Bison-based C and Objective-C parser has been replaced by a
+  new, faster hand-written recursive-descent parser.
+
+
+Ada
+---
+
+- The build infrastructure for the Ada runtime library and tools has
+  been changed to be better integrated with the rest of the build
+  infrastructure of GCC.  This should make doing cross builds of Ada a
+  bit easier.
+
+
+C++
+---
+
+- ARM-style name-injection of friend declarations is no longer the
+  default.  For example:
+
+    struct S {
+      friend void f();
+    };
+
+    void g() { f(); }
+
+  will not be accepted; instead a declaration of f will need to be
+  present outside of the scope of S.  The new -ffriend-injection
+  option will enable the old behavior.
+
+
+- The (undocumented) extension which permitted templates with default
+  arguments to be bound to template template parameters with fewer
+  parameters has been deprecated, and will be removed in the next major
+  release of G++.  For example:
+
+    template <template <typename> class C>
+    void f(C<double>) {}
+
+    template <typename T, typename U = int>
+    struct S {};
+
+    template void f(S<double>);
+
+
+  makes use of the deprecated extension.  The reason this code is not
+  valid ISO C++ is that S is a template with two parameters;
+  therefore, it cannot be bound to C which has only one parameter.
+
+
+Runtime Library (libstdc++)
+---------------------------
+
+- Optimization work:
+
+  - A new implementation of std::search_n is provided, better
+    performing in case of random access iterators.
+
+  - Added further efficient specializations of istream functions,
+    i.e., character array and string extractors.
+
+  - Other smaller improvements throughout.
+
+- Policy-based associative containers, designed for high-performance,
+  flexibility and semantic safety are delivered in ext/pb_assoc.
+
+- A versatile string class, __gnu_cxx::__versa_string, providing
+  facilities conforming to the standard requirements for basic_string,
+  is delivered in <ext/vstring.h>.  In particular:
+
+  - Two base classes are provided: the default one avoids reference
+    counting and is optimized for short strings; the alternate one,
+    still uses it while improving in a few low level areas (e.g.,
+    alignment).  See vstring_fwd.h for some useful typedefs.
+
+  - Various algorithms have been rewritten (e.g., replace), the code
+    streamlined and simple optimizations added.
+
+  - Option 3 of DR 431 is implemented for both available bases, thus
+    improving the support for stateful allocators.
+
+  - As usual, many bugs have been fixed (e.g., libstdc++/13583,
+    libstdc++/23953) and LWG resolutions put into effect for the first
+    time (e.g., DR 280, DR 464, N1780 recommendations for DR 233,
+    TR1 Issue 6.19).  The implementation status of TR1 is now tracked in
+    the docs in tr1.html.
+
+
+Objective-C++
+-------------
+
+- A new language front end for Objective-C++ has been added.  This
+  language allows users to mix the object oriented features of
+  Objective-C with those of C++.
+
+
+Java (GCJ)
+----------
+
+- Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
+  features (plus some 0.20 bug-fixes)
+
+  - Networking
+
+    - The java.net.HttpURLConnection implementation no longer buffers
+      the entire response body in memory.  This means that response
+      bodies larger than available memory can now be handled.
+
+  - (N)IO
+
+    - NIO FileChannel.map implementation, fast bulk put implementation
+      for DirectByteBuffer (speeds up this method 10x).
+
+    - FileChannel.lock() and FileChannel.force() implemented.
+
+  - XML
+
+    - gnu.xml fix for nodes created outside a namespace context.
+
+    - Add support for output indenting and cdata-section-elements
+      output instruction in xml.transform.
+
+    - xml.xpath corrections for cases where elements/attributes might
+      have been created in non-namespace-aware mode.  Corrections to
+      handling of XSL variables and minor conformance updates.
+
+  - AWT
+
+    - GNU JAWT implementation, the AWT Native Interface, which allows
+      direct access to native screen resources from within a Canvas's
+      paint method.  GNU Classpath Examples comes with a Demo, see
+      libjava/classpath/examples/README.
+
+    - awt.datatransfer updated to 1.5 with support for FlavorEvents.
+      The gtk+ awt peers now allow copy/paste of text, images,
+      URIs/files and serialized objects with other applications and
+      tracking clipboard change events with gtk+ 2.6 (for gtk+ 2.4 only
+      text and serialized objects are supported). A GNU Classpath
+      Examples datatransfer Demo was added to show the new functionality.
+
+    - Split gtk+ awt peers event handling in two threads and improve
+      gdk lock handling (solves several awt lock ups).
+
+    - Speed up awt Image loading.
+
+    - Better gtk+ scrollbar peer implementation when using gtk+ >= 2.6.
+
+    - Handle image loading errors correctly for gdkpixbuf and
+      MediaTracker.
+
+    - Better handle GDK lock. Properly prefix gtkpeer native functions
+      (cp_gtk).
+
+    - GdkGraphics2D has been updated to use Cairo 0.5.x or higher.
+
+    - BufferedImage and GtkImage rewrites. All image drawing
+      operations should now work correctly (flipping requires gtk+ >= 2.6)
+
+    - Future Graphics2D, image and text work is documented at:
+      http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
+	
+
+    - When gtk+ 2.6 or higher is installed the default log handler
+      will produce stack traces whenever a WARNING, CRITICAL or ERROR
+      message is produced.
+	
+  - Free Swing
+	
+    - The RepaintManager has been reworked for more efficient
+      painting, especially for large GUIs.
+
+    - The layout manager OverlayLayout has been implemented, the
+      BoxLayout has been rewritten to make use of the SizeRequirements
+      utility class and caching for more efficient layout.
+
+    - Improved accessibility support.
+
+    - Significant progress has been made in the implementation of the
+      javax.swing.plaf.metal package, with most UI delegates in a
+      working state now.  Please test this with your own applications
+      and provide feedback that will help us to improve this package.
+
+    - The GUI demo (gnu.classpath.examples.swing.Demo) has been
+      extended to highlight various features in our Free Swing
+      implementation. And it includes a look and feel switcher for Metal
+      (default), Ocean and GNU themes.
+
+    - The javax.swing.plaf.multi package is now implemented.
+
+    - Editing and several key actions for JTree and JTable were implemented.
+
+    - Lots of icons and look and feel improvements for Free Swing
+      basic and metal themes were added.  Try running the GNU Classpath
+      Swing Demo in examples (gnu.classpath.examples.swing.Demo) with:
+      -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel or
+      -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel
+
+    - Start of styled text capabilites for java.swing.text.
+
+    - DefaultMutableTreeNode pre-order, post-order, depth-first and
+      breadth-first traversal enumerations implemented.
+
+    - JInternalFrame colors and titlebar draw properly.
+
+    - JTree is working up to par (icons, selection and keyboard traversal).
+
+    - JMenus were made more compatible in visual and programmatic behavior.
+
+    - JTable changeSelection and multiple selections implemented.
+
+    - JButton and JToggleButton change states work properly now.
+
+    - JFileChooser fixes.
+
+    - revalidate() and repaint() fixes which make Free Swing much more
+      responsive.
+
+    - MetalIconFactory implemented.
+
+    - Free Swing Top-Level Compatibility. JFrame, JDialog, JApplet,
+      JInternalFrame, and JWindow are now 1.5 compatible in the sense
+      that you can call add() and setLayout() directly on them, which
+      will have the same effect as calling getContentPane().add() and
+      getContentPane().setLayout().
+
+    - The JTree interface has been completed.  JTrees now recognizes
+      mouse clicks and selections work.
+
+    - BoxLayout works properly now.
+
+    - Fixed GrayFilter to actually work.
+
+    - Metal SplitPane implemented.
+
+    - Lots of Free Swing text and editor stuff work now.
+	
+
+  - Free RMI and Corba
+	
+    - Andrew Watson, Vice President and Technical Director of the
+      Object Management Group, has officially assigned us 20 bit Vendor
+      Minor Code Id: 0x47430 ("GC") that will mark remote
+      classpath-specific system exceptions.  Obtaining the VMCID means
+      that GNU Classpath now is a recogniseable type of node in a highly
+      interoperable CORBA world.
+
+    - GNU Classpath now includes the first working draft to support
+      the RMI over IIOP protocol. The current implementation is capable
+      of remote invocations, transferring various Serializables and
+      Externalizables via RMI-IIOP protocol.  It can flatten graphs and,
+      at least for the simple cases, is interoperable with 1.5 JDKs.
+
+    - org.omg.PortableInterceptor and related functionality in other
+      packages is now implemented:
+	
+      - The sever and client interceptors work as required since 1.4.
+
+      - The IOR interceptor works as needed for 1.5.
+	
+    - The org.omg.DynamicAny package is completed and passes the
+      prepared tests.
+
+    - The Portable Object Adapter should now support the output of the
+      recent IDL to java compilers. These compilers now generate
+      servants and not CORBA objects as before, making the output depend
+      on the existing POA implementation. Completing POA means that such
+      code can already be tried to run on Classpath. Our POA is tested
+      for the following usager scenarios:
+	
+      - POA converts servant to the CORBA object.
+      - Servant provides to the CORBA object.
+      - POA activates new CORBA object with the given Object
+      - Id (byte array) that is later accessible for the servant.
+      - During the first call, the ServantActivator provides servant
+        for this and all subsequent calls on the current object.
+      - During each call, the ServantLocator provides servant for this
+        call only.
+      - ServantLocator or ServantActivator forwards call to another server.
+      - POA has a single servant, responsible for all objects.
+      - POA has a default servant, but some objects are explicitly
+        connected to they specific servants.
+	
+      The POA is verified using tests from the former cost.omg.org.
+
+    - The CORBA implementation is now a working prototype that should
+      support features up to 1.3 inclusive.  We invite groups writing
+      CORBA dependent applications to try Classpath implementation,
+      reporting any possible bugs.  The CORBA prototype is interoperable
+      with Sun's implementation v 1.4, transferring object references,
+      primitive types, narrow and wide strings, arrays, structures,
+      trees, abstract interfaces and value types (feature of CORBA 2.3)
+      between these two platforms.  Remote exceptions are transferred
+      and handled correctly.  The stringified object references (IORs)
+      from various sources are parsed as required.  The transient (for
+      current session) and permanent (till jre restart) redirections
+      work.  Both Little and Big Endian encoded messages are accepted.
+      The implementation is verified using tests from the former
+      cost.omg.org.  The current release includes working examples (see
+      the examples directory), demonstrating the client-server
+      communication, using either CORBA Request or IDL-based stub
+      (usually generated by a IDL to java compiler).  These examples
+      also show how to use the Classpath CORBA naming service.  The IDL
+      to java compiler is not yet written, but as our library must be
+      compatible, it naturally accepts the output of other idlj
+      implementations.
+	
+  - Misc
+	
+    - Updated TimeZone data against Olson tzdata2005l.
+
+    - Make zip and jar packages UTF-8 clean.
+
+    - "native" code builds and compiles (warning free) on Darwin and Solaris.
+
+    - java.util.logging.FileHandler now rotates files.
+
+    - Start of a generic JDWP framework in gnu/classpath/jdwp.  This
+      is unfinished, but feedback (at classpath@gnu.org) from runtime
+      hackers is greatly appreciated. Although most of the work is
+      currently being done around gcj/gij we want this framework to be
+      as VM neutral as possible.  Early design is described in:
+      http://gcc.gnu.org/ml/java/2005-05/msg00260.html
+
+    - QT4 AWT peers, enable by giving configure --enable-qt-peer.
+      Included, but not ready for production yet. They are explicitly
+      disabled and not supported.  But if you want to help with the
+      development of these new features we are interested in
+      feedback. You will have to explicitly enable them to try them
+      out (and they will most likely contain bugs).
+
+    - Documentation fixes all over the place.  See
+      http://developer.classpath.org/doc/
+	
+	
+New Targets and Target Specific Improvements
+============================================
+
+IA-32/x86-64
+------------
+
+- The x86-64 medium model (that allows building applications whose
+  data segment exceeds 4GB) was redesigned to match latest ABI draft.
+  New implementation split large datastructures into separate segment
+  improving performance of accesses to small datastructures and also
+  allows linking of small model libraries into medium model programs as
+  long as the libraries are not accessing the large datastructures
+  directly.  Medium model is also supported in position independent code
+  now.
+
+  The ABI change results in partial incompatibility among medium model
+  objects. Linking medium model libraries (or objects) compiled with
+  new compiler into medium model program compiled with older will
+  likely result in exceeding ranges of relocations.
+	
+  Binutils 2.16.91 or newer are required for compiling medium model now.
+
+
+RS6000 (POWER/PowerPC)
+----------------------
+
+- The AltiVec vector primitives in <altivec.h> are now implemented in
+  a way that puts a smaller burden on the preprocessor, instead
+  processing the "overloading" in the front ends. This should benefit
+  compilation speed on AltiVec vector code.
+
+- AltiVec initializers now are generated more efficiently.
+
+- The popcountb instruction available on POWER5 now is generated.
+
+- The floating point round to integer instructions available on
+  POWER5+ now is generated.
+
+- Floating point divides can be synthesized using the floating point
+  reciprocal estimate instructions.
+
+- Double precision floating point constants are initialized as single
+  precision values if they can be represented exactly.
+
+
+S/390, zSeries and System z9
+----------------------------
+
+- Support for the IBM System z9 109 processor has been added.  When
+  using the -march=z9-109 option, the compiler will generate code making
+  use of instructions provided by the extended immediate facility.  -
+
+- Support for 128-bit IEEE floating point has been added.  When using
+  the -mlong-double-128 option, the compiler will map the long double
+  data type to 128-bit IEEE floating point. Using this option
+  constitutes an ABI change, and requires glibc support.
+
+- Various changes to improve performance of generated code have been
+  implemented, including:
+
+  - In functions that do not require a literal pool, register %r13
+    (which is traditionally reserved as literal pool pointer), can now
+    be freely used for other purposes by the compiler.
+
+  - More precise tracking of register use allows the compiler to
+    generate more efficient function prolog and epilog code in certain
+    cases.
+
+  - The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
+    instructions are now used to implement C string functions.
+
+  - The MOVE CHARACTER instruction with single byte overlap is now
+    used to implement the memset function with non-zero fill byte.
+
+  - The LOAD ZERO instructions are now used where appropriate.
+
+  - The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER MASK, and
+    INSERT IMMEDIATE instructions are now used more frequently to
+    optimize bitfield operations.
+
+  - The BRANCH ON COUNT instruction is now used more frequently.  In
+    particular, the fact that a loop contains a subroutine call no
+    longer prevents the compiler from using this instruction.
+
+  - The compiler is now aware that all shift and rotate instructions
+    implicitly truncate the shift count to six bits.
+
+- Back-end support for the following generic features has been implemented:
+
+  - The full set of built-in functions for atomic memory access.
+
+  - The -fstack-protector feature.
+
+  - The optimization pass avoiding unnecessary stores of incoming
+    argument registers in functions with variable argument list.
+
+
+SPARC
+-----
+
+- The default code model in 64-bit mode has been changed from
+  Medium/Anywhere to Medium/Middle on Solaris.
+
+- TLS support is disabled by default on Solaris prior to release
+  10. It can be enabled on TLS-capable Solaris 9 versions (4/04 release
+  and later) by specifying --enable-tls at configure time.
+
+
+MorphoSys
+---------
+
+- Support has been added for this new architecture.
+
+
+Obsolete Systems
+================
+
+
+Documentation improvements
+==========================
+
+
+Other significant improvements
+==============================
+
+- GCC can now emit code for protecting applications from
+  stack-smashing attacks.  The protection is realized by buffer overflow
+  detection and reordering of stack variables to avoid pointer
+  corruption.
+
+- Some built-in functions have been fortified to protect them against
+  various buffer overflow (and format string) vulnerabilities. Compared
+  to the mudflap bounds checking feature, the safe builtins have far
+  smaller overhead.  This means that programs built using safe builtins
+  should not experience any measurable slowdown.
+
+
+GCC 4.1.2
+=========
+
+This is the list [1] of problem reports (PRs) from GCC's bug tracking
+system that are known to be fixed in the 4.1.2 release. This list
+might not be complete (that is, it is possible that some PRs that have
+been fixed are not listed here).
+
+[1] http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
+
+
+When generating code for a shared library, GCC now recognizes that
+global functions may be replaced when the program runs.  Therefore, it
+is now more conservative in deducing information from the bodies of
+functions.  For example, in this example:
+
+    void f() {}
+    void g() { 
+     try { f(); } 
+     catch (...) { 
+       cout << "Exception";
+     }
+    }
+
+G++ would previously have optimized away the catch clause, since it
+would have concluded that f cannot throw exceptions.  Because users
+may replace f with another function in the main body of the program,
+this optimization is unsafe, and is no longer performed.  If you wish
+G++ to continue to optimize as before, you must add a throw() clause
+to the declaration of f to make clear that it does not throw
+exceptions.
+
+
+------------------------------------------------------------------------------
+Please send FSF & GNU inquiries & questions tognu@gnu.org.There are
+also other ways to contact the FSF.
+
+These pages are maintained by the GCC team.
+
+For questions related to the use of GCC, please consult these web
+pages and the GCC manuals. If that fails, the gcc-help@gcc.gnu.org
+mailing list might help.  Please send comments on these web pages and
+the development of GCC to our public developer mailing list at
+gcc@gnu.org or gcc@gcc.gnu.org.
+
+Copyright (C) Free Software Foundation, Inc.,
+51 Franklin St - Suite 330, Boston, MA 02110, USA.
+
+Verbatim copying and distribution of this entire article is permitted
+in any medium, provided this notice is preserved.
+
+
+Last modified 2006-02-27
--- gcc-4.1-4.1.2.orig/debian/gpc-2.1-4.1-doc.doc-base.gpc
+++ gcc-4.1-4.1.2/debian/gpc-2.1-4.1-doc.doc-base.gpc
@@ -0,0 +1,15 @@
+Document: gpc-2.1-4.1-doc
+Title: The GNU Pascal Compiler
+Author: Various
+Abstract: This manual documents how to run, install and maintain the
+ GNU Pascal compiler (GPC), as well as its new features and
+ incompatibilities, and how to report bugs.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-4.1-base/pascal/gpc.html
+Files: /usr/share/doc/gcc-4.1-base/pascal/gpc.html
+
+Format: info
+Index: /usr/share/info/gpc-2.1-4.1.info.gz
+Files: /usr/share/info/gpc-2.1-4.1*
--- gcc-4.1-4.1.2.orig/debian/gpc-2.1-4.1-doc.postinst
+++ gcc-4.1-4.1.2/debian/gpc-2.1-4.1-doc.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+if [ -f /usr/share/info/gpc-2.1-4.1.info.gz ]; then
+  install-info --quiet --section "Development" "Development" \
+	--description="The GNU Pascal compiler." \
+	/usr/share/info/gpc-2.1-4.1.info
+else
+  # GFDL invariant free
+  true
+fi
+
+#DEBHELPER#
--- gcc-4.1-4.1.2.orig/debian/rules.patch
+++ gcc-4.1-4.1.2/debian/rules.patch
@@ -0,0 +1,373 @@
+# -*- makefile -*-
+# rules to patch the unpacked files in the source directory
+# ---------------------------------------------------------------------------
+# various rules to unpack addons and (un)apply patches.
+# 	- patch / apply-patches
+#	- unpatch / reverse-patches
+
+.NOTPARALLEL:
+
+patchdir	?= debian/patches
+
+# which patches should be applied?
+debian_patches = \
+	svn-updates
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  debian_patches += \
+	svn-doc-updates
+  debian_patches += \
+	rename-info-files \
+	gcc-long-double-doc \
+
+#	gcc-vis-r116505-doc \
+#	gcc-vis-r116507-doc \
+
+endif
+
+debian_patches += \
+	gcc-version \
+	gcc-textdomain \
+	gcc-driver-extra-langs \
+	gcc-long-double \
+	libstdc++-long-double \
+	libstdc++-pic \
+	libstdc++-doclink \
+	gcc-hash-style-both \
+	gccbug \
+	gccbug-posix \
+	boehm-gc-backport \
+	boehm-gc-nocheck \
+	boehm-gc-getnprocs \
+	fastjar-version \
+	fastjar-doc \
+	libstdc++-doxygen \
+	pr20218 \
+	pr20218-mips \
+	pr31868 \
+	gcc-directives-only \
+	arm-libffi \
+	libffi-backport \
+	libffi-backport2 \
+	libjava-backport-updates \
+	libjava-backport-updates2 \
+	libjava-backport-updates3 \
+	libjava-backport-updates4 \
+	pr32844 \
+	pr32862 \
+	libjava-jar \
+	libjava-visibility \
+	libjava-subdir \
+	libjava-jnipath \
+	libjava-stacktrace \
+	libjava-soname \
+	libjava-disable-static \
+	libjava-rpath \
+	libjava-maxhostnamelen \
+	libjava-class-igf \
+	gcc-expandv \
+	alpha-no-ev4-directive \
+	note-gnu-stack \
+	arm-gij \
+	hppa-cbranch \
+	hppa-cbranch2 \
+	m68k-fjump \
+	m68k-gc \
+	m68k-save_pic \
+	m68k-libffi2 \
+	m68k-dwarf \
+	m68k-split_shift \
+	m68k-prevent-qipush \
+	m68k-jumptable \
+	m68k-peephole \
+	m68k-return \
+	m68k-sig-unwind \
+	m68k-align-code \
+	m68k-align-stack \
+	m68k-dwarf3 \
+	m68k-fpcompare \
+	m68k-secondary-addr-reload \
+	m68k-notice-move \
+	m68k-symbolic-operand \
+	m68k-bitfield-offset \
+	mips-libspec \
+	pr25524 \
+	pr26864 \
+	pr26208 \
+	pr26208-r111674 \
+	libjava-sjlj \
+	gcc-dwarf2-h \
+	gcc-unwind-r111705 \
+	gcc-unwind-r120406 \
+	pr9861-nojava \
+	classpath-config-guess \
+	arm-pr28516 \
+	arm-pr30486 \
+	pr22244 \
+	libgcc-tramp-ppc32 \
+	pr33639 \
+	pr33765 \
+	pr28322 \
+
+#	gcc-vis-r115693 \
+#	gcc-vis-r116504 \
+#	gcc-vis-r116505 \
+#	gcc-vis-r116506 \
+#	gcc-vis-r116507 \
+#	gcc-vis-r117139 \
+
+ifeq ($(distribution),Debian)
+  debian_patches += arm-unbreak-eabi-armv4t
+endif
+
+# gdc fixed in gdc-pr26885.dpatch.
+#ifneq ($(with_d),yes)
+  debian_patches += pr26885
+#endif
+
+debian_patches += gcc-r109242 gcc-r109581 gcc-4.1-x86-blended gcc-pfrs-2
+ifneq ($(DEB_TARGET_ARCH),lpia)
+  debian_patches += cpu-default-generic
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  debian_patches += pr25524-doc gcc-4.1-x86-blended-doc \
+	libjava-backport-doc-updates2
+# gdc fixed in gdc-pr26885.dpatch.
+#  ifneq ($(with_d),yes)
+    debian_patches += pr26885-doc
+#  endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 powerpc ppc64 sparc s390))
+  debian_patches += pr20218
+endif
+
+ifeq ($(with_libffi),yes)
+  debian_patches += \
+	libffi-configure
+endif
+
+ifeq ($(with_ssp)-$(with_ssp_default),yes-yes)
+  debian_patches += gcc-ssp-default
+endif
+
+ifeq ($(with_ssp),yes)
+  debian_patches += libssp-gnu
+endif
+
+ifeq ($(with_multiarch_lib),yes)
+  debian_patches += multiarch-lib
+endif
+
+ifeq ($(with_java),yes)
+  debian_patches += mips-libjava-interp
+
+  ifeq ($(with_native_ecj),yes)
+    debian_patches += native-ecj
+  endif
+endif
+
+ifeq ($(with_proto),yes)
+  debian_patches += deb-protoize
+endif
+
+ifeq ($(with_ada),yes)
+  debian_patches += ada-gcc-name ada-default-project-path #ada-names
+  debian_patches += ada-symbolic-tracebacks ada-driver-check
+  debian_patches += ada-pr15802
+  ifeq ($(with_libgnat),yes)
+    debian_patches += ada-gnatvsn ada-link-lib ada-libgnatvsn ada-libgnatprj
+    debian_patches += ada-acats
+  endif
+  ifeq ($(DEB_TARGET_ARCH)-$(distribution),ia64-Debian)
+    debian_patches += ignore-comp-fail
+  endif
+endif
+
+ifeq ($(with_pascal),yes)
+  debian_patches += gpc-4.1 gpc-gcc-4.x gpc-names
+else
+  debian_patches += gcc-pascal-lang
+endif
+
+ifeq ($(with_d),yes)
+# debian_patches += svn-gdc-updates
+  debian_patches += gdc-4.1
+  debian_patches += gdc-pr26885
+  debian_patches += gdc-driver-zlib
+  debian_patches += gdc-driver-defaultlib
+  ifeq ($(with_libphobos),yes)
+    debian_patches += gdc-libphobos-build
+  else
+    debian_patches += gdc-driver-nophobos
+  endif
+  debian_patches += gdc-fix-build
+  debian_patches += gdc-libphobos-std-format
+  debian_patches += gdc-arm-unwind_ptr
+else
+  debian_patches += gcc-d-lang
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+  debian_patches += hurd-changes hurd-fast-math hurd-profiling
+endif
+
+ifeq ($(DEB_TARGET_ARCH),alpha)
+  debian_patches += alpha-ieee mudflap-nocheck
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    debian_patches += alpha-ieee-doc
+  endif
+endif
+
+ifeq ($(DEB_TARGET_ARCH),arm)
+  debian_patches += arm-pragma-pack
+endif
+
+ifeq ($(DEB_TARGET_ARCH),m68k)
+  debian_patches += m68k-bitfield m68k-autoinc
+  debian_patches += m68k-dwarf2 m68k-peephole-note m68k-java
+  debian_patches += m68k-prevent-swap m68k-reg-inc m68k-noautoinc-setjmp
+endif
+
+ifeq ($(DEB_TARGET_ARCH),sparc)
+  debian_patches += sparc-niagara
+  debian_patches += sparc-g7
+  debian_patches += sparc-niagara2
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    debian_patches += sparc-niagara-doc
+    debian_patches += sparc-niagara2-doc
+  endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), ia64))
+  debian_patches += pr27880 no-getipinfo
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+  debian_patches += kbsd-gnu
+  debian_patches += kbsd-gnu-ada
+  debian_patches += kbsd-gnu-java
+endif
+ifeq ($(DEB_TARGET_ARCH_OS),knetbsd)
+  debian_patches += # kbsd-gnu
+endif
+ifeq ($(DEB_TARGET_ARCH_OS),netbsd)
+  debian_patches += # netbsd-all-gcc netbsd-archs-gcc
+endif
+ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+  debian_patches += libjava-hurdfix
+endif
+
+ifdef DEB_CROSS
+  debian_patches += cross-include cross-fixes
+endif
+
+debian_patches += link-libs
+
+# all patches below this line are applied for gcc-snapshot builds as well
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  debian_patches =
+endif
+
+debian_patches += reporting gcc-ice-hack gcc-ice-apport
+
+ifneq ($(DEB_TARGET_ARCH),sh4)
+  debian_patches += multiarch-include
+endif
+
+ifeq ($(biarch),yes)
+  ifeq (,$(findstring libjava, $(biarch_multidir_names)))
+    debian_patches += disable-biarch-check
+  endif
+  debian_patches += config-ml
+
+  ifeq ($(DEB_TARGET_ARCH),powerpc)
+    debian_patches += powerpc-biarch
+  endif
+  ifeq ($(DEB_TARGET_ARCH),s390)
+    debian_patches += s390-biarch
+  endif
+  ifeq ($(DEB_TARGET_ARCH),sparc)
+      debian_patches += sparc-biarch
+  endif
+  ifeq ($(DEB_TARGET_ARCH),i386)
+    debian_patches += i386-biarch
+    debian_patches += gcc-biarch-generic
+  endif
+  ifneq ($(with_64bit_check),yes)
+    debian_patches += disable-configure-run-check
+  endif
+endif
+
+ifeq ($(biarch32),yes)
+  ifeq (,$(findstring libjava, $(biarch_multidir_names)))
+    debian_patches += disable-biarch-check
+  endif
+  debian_patches += config-ml gcc-multilib64dir
+
+  ifeq ($(DEB_TARGET_ARCH),ppc64)
+    debian_patches += ppc64-ada
+  endif
+  ifneq ($(with_32bit_check),yes)
+    debian_patches += disable-configure-run-check
+  endif
+endif
+
+
+patch: $(patch_stamp)
+$(patch_stamp): $(unpack_stamp) pre-patch \
+    $(foreach p,$(debian_patches),$(patch_stamp)-$(p))
+	echo -e "\nPatches that $(distribution) applied in this version:" > pxxx
+	for i in $(debian_patches); do \
+	  echo -e "\n$$i:" >> pxxx; \
+	  sed -n 's/^# *DP: */  /p' $(patchdir)/$$i.dpatch >> pxxx; \
+	done
+ifeq ($(with_libphobos),yes)
+	[ ! -d $(srcdir)/libphobos ] || rm -rf $(srcdir)/libphobos
+	mkdir $(srcdir)/libphobos && \
+	  cd $(srcdir)/libphobos && \
+	    ../symlink-tree ../gcc/d/phobos$(libphobos_version) 2>&1 && \
+	cd $(srcdir)
+	chmod a+x $(srcdir)/gcc/d/phobos$(libphobos_version)/config/x3
+endif
+	mv -f pxxx $@
+
+pre-patch:
+	@if [ -x /usr/bin/automake-1.4 ]; then \
+	  : ; \
+	else \
+	  mkdir -p $(PWD)/bin; \
+	  ln -sf /usr/bin/automake $(PWD)/bin/automake-1.4; \
+	fi
+
+unpatch:
+	for stamp in none `ls -1t $(patch_stamp)-*`; do \
+	  case "$$stamp" in none|patched-stamp|patched-\*) continue; esac; \
+	  patch=`echo $$stamp | sed -e 's,$(patch_stamp)-,,'`; \
+	  echo "trying to revert patch $$patch ..."; \
+	  if [ -x $(patchdir)/$$patch.dpatch ]; then true; else \
+	    chmod +x $(patchdir)/$$patch.dpatch; fi; \
+	  if $(patchdir)/$$patch.dpatch -unpatch -d $(srcdir); then \
+	    echo "reverted $$patch patch."; \
+	    rm -f $$stamp; \
+	  else \
+	    echo "error in reverting $$patch patch."; \
+	    exit 1; \
+	  fi; \
+	done
+	rm -f patched-stamp
+
+# debian/rules.conf isn't yet sourced
+SOURCE_VERSION := $(call vafilt,$(CHANGELOG_VARS),Version)
+
+$(patch_stamp)-%: $(patchdir)/%.dpatch
+	@if [ -x $< ]; then true; else chmod +x $<; fi
+	@if [ -f $@ ]; then \
+	  echo "$* patches already applied."; exit 1; \
+	fi
+	DEB_VERSION=$$(echo $(SOURCE_VERSION) | sed 's/ds[0-9]*//'); \
+	export DEB_VERSION; set -x; \
+	$< -patch -d $(srcdir)
+	@echo "$* patches applied." > $@
--- gcc-4.1-4.1.2.orig/debian/gpc-BV-doc.doc-base.gpc
+++ gcc-4.1-4.1.2/debian/gpc-BV-doc.doc-base.gpc
@@ -0,0 +1,15 @@
+Document: gpc-@BV@-doc
+Title: The GNU Pascal Compiler
+Author: Various
+Abstract: This manual documents how to run, install and maintain the
+ GNU Pascal compiler (GPC), as well as its new features and
+ incompatibilities, and how to report bugs.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/pascal/gpc.html
+Files: /usr/share/doc/gcc-@BV@-base/pascal/gpc.html
+
+Format: info
+Index: /usr/share/info/gpc-@BV@.info.gz
+Files: /usr/share/info/gpc-@BV@*
--- gcc-4.1-4.1.2.orig/debian/gfortran-BV-doc.doc-base
+++ gcc-4.1-4.1.2/debian/gfortran-BV-doc.doc-base
@@ -0,0 +1,14 @@
+Document: gfortran-@BV@
+Title: The GNU Fortran Compiler 
+Author: Various
+Abstract: This manual documents how to run, install and port `gfortran',
+ as well as its new features and incompatibilities, and how to report bugs.
+Section: Apps/Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html
+Files: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html
+
+Format: info
+Index: /usr/share/info/gfortran-@BV@.info.gz
+Files: /usr/share/info/gfortran-@BV@*
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-fixincl.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-fixincl.mk
@@ -0,0 +1,47 @@
+arch_binaries  := $(arch_binaries) fixincl
+
+p_fix	= fixincludes
+d_fix	= debian/$(p_fix)
+
+dirs_fix = \
+	$(docdir)/$(p_base)/fixincludes \
+	$(PF)/share/man/man1 \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)
+files_fix = \
+	$(gcc_lexec_dir)/install-tools \
+	$(gcc_lib_dir)/install-tools
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fixincl: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_fix)
+	dh_installdirs -p$(p_fix) $(dirs_fix)
+	DH_COMPAT=2 dh_movefiles -p$(p_fix) $(files_fix)
+
+#	$(IP) $(builddir)/gcc/fixinc/fixincl $(d_fix)/$(PF)/lib/fixincludes/
+#	sed -e "s,^FIXINCL=\(.*\),FIXINCL=/$(PF)/lib/fixincludes/fixincl," \
+#	    $(builddir)/gcc/fixinc.sh \
+#		> $(d_fix)/$(PF)/lib/fixincludes/fixinc.sh
+#	chmod 755 $(d_fix)/$(PF)/lib/fixincludes/fixinc.sh
+	$(IR) $(srcdir)/fixincludes/README \
+	    $(d_fix)/$(docdir)/$(p_base)/fixincludes
+	sed -e 's,@LIBEXECDIR@,$(gcc_lexec_dir),g' debian/fixincludes.in \
+	    > $(d_fix)/$(PF)/bin/fixincludes
+	chmod 755 $(d_fix)/$(PF)/bin/fixincludes
+
+	debian/dh_doclink -p$(p_fix) $(p_base)
+	dh_strip -p$(p_fix)
+	dh_compress -p$(p_fix)
+	dh_fixperms -p$(p_fix)
+	dh_shlibdeps -p$(p_fix)
+	dh_gencontrol -p$(p_fix) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_fix)
+	dh_md5sums -p$(p_fix)
+	dh_builddeb -p$(p_fix)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-cross.mk
@@ -0,0 +1,57 @@
+arch_binaries  := $(arch_binaries) gcc-cross
+
+dirs_gcc = \
+	$(docdir)/$(p_base)/gcc \
+	$(PF)/bin \
+	$(gcc_lib_dir)/include \
+	$(PF)/share/man/man1
+
+files_gcc = \
+	$(PF)/bin/{$(DEB_TARGET_GNU_TPE)-gcc,$(DEB_TARGET_GNU_TYPE)-cpp}$(pkg_ver) \
+	$(PF)/share/man/man1/{$(DEB_TARGET_GNU_TYPE)-gcc}$(pkg_ver).1 \
+	$(gcc_lib_dir) \
+
+
+files_gcc += \
+	$(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+		&& echo $(gcc_lib_dir)/SYSCALLS.c.X)
+
+usr_doc_files = debian/README.Bugs \
+	$(shell test -f $(srcdir)/FAQ && echo $(srcdir)/FAQ)
+ifeq ($(with_check),yes)
+  usr_doc_files += test-summary
+endif
+ifeq ($(DEB_HOST_ARCH),sparc)
+  usr_doc_files += debian/README.sparc
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-cross: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_gcc)
+	dh_installdirs -p$(p_gcc) $(dirs_gcc)
+	$(IS) debian/c89 $(d)/$(PF)/bin/
+	$(IR) debian/c89.1 $(d)/$(PF)/share/man/man1/
+
+	rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
+	ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gcc) $(files_gcc)
+
+#	dh_installdebconf
+	debian/dh_doclink -p$(p_gcc) $(p_base)
+	cp -p $(usr_doc_files) $(d_gcc)/$(docdir)/$(p_base)/.
+	cp -p debian/NEWS.gcc $(d_gcc)/$(docdir)/$(p_base)/NEWS
+	dh_undocumented -p$(p_gcc) gccbug$(pkg_ver).1
+	debian/dh_rmemptydirs -p$(p_gcc)
+	dh_strip -p$(p_gcc)
+	dh_compress -p$(p_gcc)
+	dh_fixperms -p$(p_gcc)
+	dh_shlibdeps -p$(p_gcc)
+	dh_gencontrol -p$(p_gcc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gcc)
+	dh_md5sums -p$(p_gcc)
+	dh_builddeb -p$(p_gcc)
+	touch $@
+
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-nof.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-nof.mk
@@ -0,0 +1,56 @@
+arch_binaries  := $(arch_binaries) nof
+
+p_nof  = gcc$(pkg_ver)-nof
+d_nof  = debian/$(p_nof)
+
+dirs_nof = \
+	$(docdir) \
+	$(PF)/$(libdir)/nof
+ifeq ($(with_cdev),yes)
+  dirs_nof += \
+	$(gcc_lib_dir)/nof
+endif
+
+ifeq ($(with_cdev),yes)
+  files_nof = \
+	$(libdir)/libgcc_s_nof.so.$(GCC_SONAME) \
+	$(gcc_lib_dir)/libgcc_s_nof.so \
+	$(PF)/$(libdir)/nof \
+	$(gcc_lib_dir)/nof
+else
+  files_nof = \
+	$(libdir)/libgcc_s_nof.so.$(GCC_SONAME)
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-nof: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	mv $(d)/$(PF)/$(libdir)/libgcc_s_nof.so.$(GCC_SONAME) $(d)/$(libdir)/.
+	rm -f $(d)/$(PF)/$(libdir)/libgcc_s_nof.so
+	ln -sf /$(libdir)/libgcc_s_nof.so.$(GCC_SONAME) \
+		$(d)/$(gcc_lib_dir)/libgcc_s_nof.so
+
+	rm -rf $(d_nof)
+	dh_installdirs -p$(p_nof) $(dirs_nof)
+	DH_COMPAT=2 dh_movefiles -p$(p_nof) $(files_nof)
+	debian/dh_doclink -p$(p_nof) $(p_base)
+	dh_strip -p$(p_nof)
+	dh_compress -p$(p_nof)
+	dh_fixperms -p$(p_nof)
+	dh_shlibdeps -p$(p_nof)
+
+	dh_makeshlibs -p$(p_nof)
+	: # Only keep the shlibs file for the libgcc_s_nof library
+	fgrep libgcc_s_nof debian/$(p_nof)/DEBIAN/shlibs \
+		> debian/$(p_nof)/DEBIAN/shlibs.tmp
+	mv -f debian/$(p_nof)/DEBIAN/shlibs.tmp debian/$(p_nof)/DEBIAN/shlibs
+
+	dh_gencontrol -p$(p_nof) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_nof)
+	dh_md5sums -p$(p_nof)
+	dh_builddeb -p$(p_nof)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-pascal.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-pascal.mk
@@ -0,0 +1,112 @@
+arch_binaries  := $(arch_binaries) pascal
+indep_binaries := $(indep_binaries) pascal-doc
+
+p_gpc	= gpc$(pkg_ver)
+p_gpcd	= gpc$(pkg_ver)-doc
+
+d_gpc	= debian/$(p_gpc)
+d_gpcd	= debian/$(p_gpcd)
+
+dirs_gpc = \
+	$(docdir)/$(p_base)/pascal \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/{include,units} \
+	$(PF)/share/man/man1
+ifeq ($(with_gpidump),yes)
+  files_gpc = \
+	$(PF)/bin/{binobj,gpc,gpc-run,gpidump}$(pkg_ver) \
+	$(PF)/share/man/man1/{binobj,gpc,gpc-run,gpidump}$(pkg_ver).1 \
+	$(gcc_lexec_dir)/gpc1 \
+	$(gcc_lib_dir)/{libgpc.a,units} \
+	$(gcc_lib_dir)/include/gpc-in-c.h
+else
+  files_gpc = \
+	$(PF)/bin/{binobj,gpc,gpc-run}$(pkg_ver) \
+	$(PF)/share/man/man1/{binobj,gpc,gpc-run}$(pkg_ver).1 \
+	$(gcc_lexec_dir)/gpc1 \
+	$(gcc_lib_dir)/{libgpc.a,units} \
+	$(gcc_lib_dir)/include/gpc-in-c.h
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-pascal: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gpc)
+	dh_installdirs -p$(p_gpc) $(dirs_gpc)
+
+	rm -f $(d)/$(PF)/bin/pc $(d)/$(PF)/share/man/man1/pc.1
+	DH_COMPAT=2 dh_movefiles -p$(p_gpc) $(files_gpc)
+
+	dh_installdocs -p$(p_gpc)
+	dh_installchangelogs -p$(p_gpc)
+
+	cp -p $(srcdir)/gcc/p/{AUTHORS,FAQ,NEWS,README} \
+		$(d_gpc)/$(docdir)/$(p_base)/pascal/.
+	cp -p $(srcdir)/gcc/p/test/README \
+		$(d_gpc)/$(docdir)/$(p_base)/pascal/README.gpc-test
+	cp -p $(srcdir)/gcc/p/ChangeLog \
+		$(d_gpc)/$(docdir)/$(p_base)/pascal/changelog
+
+	ln -sf ../$(p_base)/pascal $(d_gpc)/$(docdir)/$(p_gpc)/pascal
+
+#	ln -sf ../$(p_gpc)/examples $(d_gpc)/$(docdir)/$(p_gpcd)/examples
+#	ln -sf ../$(p_gpc)/docdemos $(d_gpc)/$(docdir)/$(p_gpcd)/docdemos
+
+	dh_strip -p$(p_gpc)
+	dh_compress -p$(p_gpc)
+	dh_fixperms -p$(p_gpc)
+	dh_shlibdeps -p$(p_gpc)
+	dh_gencontrol -p$(p_gpc) -- -v$(DEB_GPC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gpc)
+	dh_md5sums -p$(p_gpc)
+	dh_builddeb -p$(p_gpc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-pascal-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gpcd)
+	dh_installdirs -p$(p_gpcd) \
+		$(docdir)/$(p_base)/pascal \
+		$(docdir)/$(p_gpc)/pascal \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_gpcd) \
+		$(PF)/share/info/gpc*$(pkg_ver)*info*
+
+	dh_installdocs -p$(p_gpcd)
+	dh_installchangelogs -p$(p_gpcd)
+	cp -p html/gpc.html html/gpcs.html \
+		$(d_gpcd)/$(docdir)/$(p_base)/pascal/
+	mv $(d)/$(PF)/doc/gpc/demos \
+		$(d_gpcd)/$(docdir)/$(p_base)/pascal/examples
+	mv $(d)/$(PF)/doc/gpc/docdemos \
+		$(d_gpcd)/$(docdir)/$(p_base)/pascal/.
+
+	for i in gpc.html gpc.html docdemos examples; do \
+	  ln -sf ../$(p_base)/pascal/$$i \
+	    $(d_gpcd)/usr/share/doc/$(p_gpcd)/$$i; \
+	  ln -sf ../$(p_base)/pascal/$$i \
+	    $(d_gpcd)/usr/share/doc/$(p_gpc)/$$i; \
+	done
+
+#	-$(MAKE) -C $(builddir)/gcc gpc.ps
+#	cp -p $(builddir)/gcc/gpc.ps $(d_gpcd)/$(docdir)/$(p_base)/pascal/.
+
+	debian/dh_rmemptydirs -p$(p_gpcd)
+
+	dh_compress -p$(p_gpcd)
+	dh_fixperms -p$(p_gpcd)
+	dh_installdeb -p$(p_gpcd)
+	dh_gencontrol -p$(p_gpcd) -- -v$(DEB_GPC_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_gpcd)
+	dh_builddeb -p$(p_gpcd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libgcc.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libgcc.mk
@@ -0,0 +1,157 @@
+ifeq ($(with_libgcc),yes)
+  arch_binaries	:= $(arch_binaries) libgcc
+endif
+ifeq ($(with_lib64gcc),yes)
+  arch_binaries	:= $(arch_binaries) lib64gcc
+endif
+ifeq ($(biarch32),yes)
+  arch_binaries	:= $(arch_binaries) lib32gcc
+endif
+
+p_lgcc		= libgcc$(GCC_SONAME)
+d_lgcc		= debian/$(p_lgcc)
+
+p_l32gcc	= lib32gcc$(GCC_SONAME)
+d_l32gcc	= debian/$(p_l32gcc)
+
+p_l64gcc	= lib64gcc$(GCC_SONAME)
+d_l64gcc	= debian/$(p_l64gcc)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lgcc)
+	dh_installdirs -p$(p_lgcc) \
+		$(docdir)/$(p_lgcc) \
+		$(libdir)
+
+ifeq ($(with_shared_libgcc),yes)
+	mv $(d)/$(PF)/lib/libgcc_s.so.$(GCC_SONAME) $(d_lgcc)/$(libdir)/.
+endif
+
+ifeq ($(with_standalone_gcj)-$(DEB_TARGET_ARCH),yes-hppa)
+	debian/dh_doclink -p$(p_lgcc) $(p_jbase)
+else
+	debian/dh_doclink -p$(p_lgcc) $(p_base)
+endif
+	debian/dh_rmemptydirs -p$(p_lgcc)
+	dh_strip -p$(p_lgcc)
+	dh_compress -p$(p_lgcc)
+	dh_fixperms -p$(p_lgcc)
+ifeq ($(with_shared_libgcc),yes)
+	dh_makeshlibs -p$(p_lgcc) -V '$(p_lgcc) (>= $(DEB_LIBGCC_SOVERSION))'
+	cat debian/$(p_lgcc)/DEBIAN/shlibs >> debian/shlibs.local
+endif
+	dh_shlibdeps -p$(p_lgcc)
+	dh_gencontrol -p$(p_lgcc) \
+		-- -v$(DEB_LIBGCC_VERSION) $(common_substvars)
+
+	mkdir -p $(d_lgcc)/usr/share/lintian/overrides
+	echo '$(p_lgcc): package-name-doesnt-match-sonames' \
+		> $(d_lgcc)/usr/share/lintian/overrides/$(p_lgcc)
+
+	dh_installdeb -p$(p_lgcc)
+	dh_md5sums -p$(p_lgcc)
+	dh_builddeb -p$(p_lgcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64gcc)
+	dh_installdirs -p$(p_l64gcc) \
+		$(docdir)/$(p_l64gcc) \
+		lib64
+
+ifeq ($(with_shared_libgcc),yes)
+	mv $(d)/$(PF)/lib64/libgcc_s.so.$(GCC_SONAME) $(d_l64gcc)/lib64/.
+endif
+
+	debian/dh_doclink -p$(p_l64gcc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_l64gcc)
+	dh_strip -p$(p_l64gcc)
+	dh_compress -p$(p_l64gcc)
+	dh_fixperms -p$(p_l64gcc)
+ifeq ($(with_shared_libgcc),yes)
+	dh_makeshlibs -p$(p_l64gcc) \
+		-V '$(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))'
+# this does not work ... shlibs.local doesn't distinguish 32/64 bit libs
+#	cat debian/$(p_l64gcc)/DEBIAN/shlibs >> debian/shlibs.local
+endif
+#	dh_shlibdeps -p$(p_l64gcc)
+#/usr/bin/ldd: line 1: /lib/ld64.so.1: cannot execute binary file
+#dpkg-shlibdeps: failure: ldd on `debian/lib64gcc1/lib64/libgcc_s.so.1' gave error exit status 1
+ifeq ($(DEB_TARGET_ARCH),s390)
+	echo 'shlibs:Depends=libc6-s390x (>= 2.3.1-1)' \
+		> debian/$(p_l64gcc).substvars
+endif
+ifeq ($(DEB_TARGET_ARCH),i386)
+	echo 'shlibs:Depends=libc6-amd64' \
+		> debian/$(p_l64gcc).substvars
+endif
+ifeq ($(DEB_TARGET_ARCH),sparc)
+	echo 'shlibs:Depends=libc6-sparc64 (>= 2.3.1-1)' \
+		> debian/$(p_l64gcc).substvars
+endif
+ifeq ($(DEB_TARGET_ARCH),powerpc)
+	# FIXME change dependency when lib64c6 exists
+	echo 'shlibs:Depends=libc6 (>= 0.1)' \
+		> debian/$(p_l64gcc).substvars
+endif
+	dh_gencontrol -p$(p_l64gcc) \
+		-- -v$(DEB_LIBGCC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l64gcc)
+	dh_md5sums -p$(p_l64gcc)
+	dh_builddeb -p$(p_l64gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-lib32gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32gcc)
+
+	dh_installdirs -p$(p_l32gcc) \
+		$(docdir)/$(p_l32gcc) \
+		$(lib32)
+	mv $(d)/$(lib32)/libgcc_s.so.$(GCC_SONAME) \
+		$(d_l32gcc)/$(lib32)/.
+
+	debian/dh_doclink -p$(p_l32gcc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_l32gcc)
+	dh_strip -p$(p_l32gcc)
+
+	dh_makeshlibs -p$(p_l32gcc) \
+		-V '$(p_l32gcc) (>= $(DEB_LIBGCC_SOVERSION))'
+ifeq ($(DEB_TARGET_ARCH),amd64)
+	echo 'shlibs:Depends=libc6-i386 | ia32-libs' \
+		> debian/$(p_l32gcc).substvars
+endif
+ifeq ($(DEB_TARGET_ARCH),ppc64)
+	echo 'shlibs:Depends=libc6-powerpc' \
+		> debian/$(p_l32gcc).substvars
+endif
+
+	dh_compress -p$(p_l32gcc)
+	dh_fixperms -p$(p_l32gcc)
+	dh_gencontrol -p$(p_l32gcc) \
+		-- -v$(DEB_LIBGCC_VERSION) $(common_substvars)
+ifeq (,$(findstring emul, $(lib32)))
+	rm -f debian/lib32gcc1.preinst
+endif
+	dh_installdeb -p$(p_l32gcc)
+	dh_md5sums -p$(p_l32gcc)
+	dh_builddeb -p$(p_l32gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-proto.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-proto.mk
@@ -0,0 +1,43 @@
+arch_binaries  := $(arch_binaries) proto
+
+p_proto	= protoize
+d_proto	= debian/$(p_proto)
+
+dirs_proto = \
+	$(docdir) \
+	$(PF)/share/man/man1 \
+	$(PF)/bin
+files_proto = \
+	$(PF)/bin/{protoize,unprotoize} \
+	$(PF)/share/man/man1/{protoize,unprotoize}.1
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-proto: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_proto)
+	dh_installdirs -p$(p_proto) $(dirs_proto)
+
+ifeq ($(versioned_packages),yes)
+	: # rename versioned files back to unversioned ones.
+	for i in protoize unprotoize; do \
+	  mv $(d)/$(PF)/bin/$$i$(pkg_ver) $(d)/$(PF)/bin/$$i; \
+	done
+endif
+	$(IR) debian/protoize.1 $(d)/$(PF)/share/man/man1/
+	ln -sf protoize.1 $(d)/$(PF)/share/man/man1/unprotoize.1
+	DH_COMPAT=2 dh_movefiles -p$(p_proto) $(files_proto)
+
+	debian/dh_doclink -p$(p_proto) $(p_base)
+	dh_strip -p$(p_proto)
+	dh_compress -p$(p_proto)
+	dh_fixperms -p$(p_proto)
+	dh_shlibdeps -p$(p_proto)
+	dh_gencontrol -p$(p_proto) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_proto)
+	dh_md5sums -p$(p_proto)
+	dh_builddeb -p$(p_proto)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-base.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-base.mk
@@ -0,0 +1,27 @@
+arch_binaries := base $(arch_binaries)
+
+# ---------------------------------------------------------------------------
+# gcc-base
+
+$(binary_stamp)-base: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_base)
+	dh_installdirs -p$(p_base)
+	dh_installdocs -p$(p_base)
+ifeq ($(with_base_only),yes)
+	dh_installchangelogs -p$(p_base)
+else
+	dh_installchangelogs -p$(p_base) $(srcdir)/ChangeLog
+endif
+	dh_compress -p$(p_base)
+	for i in copyright changelog.Debian.gz; do \
+	  ln -f $(d_base)/usr/share/doc/$(p_base)/$$i \
+	    $(d_base)/usr/share/doc/$(p_base)/.$$i; \
+	done
+	dh_fixperms -p$(p_base)
+	dh_gencontrol -p$(p_base) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_base)
+	dh_md5sums -p$(p_base)
+	dh_builddeb -p$(p_base)
+	touch $@
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-cpp.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-cpp.mk
@@ -0,0 +1,90 @@
+arch_binaries  := $(arch_binaries) cpp
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  indep_binaries := $(indep_binaries) cpp-doc
+endif
+
+dirs_cpp = \
+	$(docdir) \
+	$(PF)/share/man/man1 \
+	$(PF)/bin \
+	$(gcc_lexec_dir)
+
+files_cpp = \
+	$(PF)/bin/cpp$(pkg_ver) \
+	$(gcc_lexec_dir)/cc1
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_cpp += \
+	$(PF)/share/man/man1/cpp$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cpp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cpp)
+	dh_installdirs -p$(p_cpp) $(dirs_cpp)
+	DH_COMPAT=2 dh_movefiles -p$(p_cpp) $(files_cpp)
+
+ifeq ($(with_common_gcclibdir),yes)
+	ln -sf $(BASE_VERSION) \
+	    $(d_cpp)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lib_dir))
+  ifneq ($(gcc_lib_dir),$(gcc_lexec_dir))
+	ln -sf $(BASE_VERSION) \
+	    $(d_cpp)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lexec_dir))
+  endif
+endif
+
+	ln -sf cpp$(pkg_ver) \
+	    $(d_cpp)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver)
+	ln -sf cpp$(pkg_ver) \
+	    $(d_cpp)/$(PF)/bin/$(TARGET_ALIAS)-cpp$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf cpp$(pkg_ver).1 \
+	    $(d_cpp)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver).1
+	ln -sf cpp$(pkg_ver).1 \
+	    $(d_cpp)/$(PF)/share/man/man1/$(TARGET_ALIAS)-cpp$(pkg_ver).1
+endif
+
+	debian/dh_doclink -p$(p_cpp) $(p_base)
+	debian/dh_rmemptydirs -p$(p_cpp)
+
+	dh_strip -p$(p_cpp)
+	dh_compress -p$(p_cpp)
+	dh_fixperms -p$(p_cpp)
+	dh_shlibdeps -p$(p_cpp)
+	dh_gencontrol -p$(p_cpp) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cpp)
+	dh_md5sums -p$(p_cpp)
+	dh_builddeb -p$(p_cpp)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cpp-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cppd)
+	dh_installdirs -p$(p_cppd) \
+		$(docdir)/$(p_base) \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_cppd) \
+		$(PF)/share/info/cpp*
+
+	debian/dh_doclink -p$(p_cppd) $(p_base)
+	dh_installdocs -p$(p_cppd) html/cpp.html html/cppinternals.html
+	rm -f $(d_cppd)/$(docdir)/$(p_base)/copyright
+	debian/dh_rmemptydirs -p$(p_cppd)
+
+	dh_compress -p$(p_cppd)
+	dh_fixperms -p$(p_cppd)
+	dh_installdeb -p$(p_cppd)
+	dh_gencontrol -p$(p_cppd) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_cppd)
+	dh_builddeb -p$(p_cppd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-gcc.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-gcc.mk
@@ -0,0 +1,290 @@
+ifneq (,$(filter yes, $(biarch) $(biarch32)))
+  arch_binaries  := $(arch_binaries) gcc-multi
+endif
+arch_binaries  := $(arch_binaries) gcc
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  indep_binaries := $(indep_binaries) gcc-doc
+endif
+ifeq ($(with_nls),yes)
+  indep_binaries := $(indep_binaries) gcc-locales
+endif
+
+# gcc must be moved after g77 and g++
+# not all files $(PF)/include/*.h are part of gcc,
+# but it becomes difficult to name all these files ...
+
+dirs_gcc = \
+	$(docdir)/$(p_base)/{gcc,libssp} \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/include \
+	$(PF)/share/man/man1 $(libdir)
+
+files_gcc = \
+	$(PF)/bin/{gcc,gcov,gccbug}$(pkg_ver) \
+	$(PF)/share/man/man1/gccbug$(pkg_ver).1 \
+	$(gcc_lexec_dir)/collect2 \
+	$(gcc_lib_dir)/{libgcc*,libgcov.a,*.o} \
+	$(gcc_lib_dir)/include/README \
+	$(gcc_lib_dir)/include/{float,iso646,limits,std*,syslimits,unwind,varargs}.h \
+	$(shell for d in asm bits gnu linux; do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$d \
+		    && echo $(gcc_lib_dir)/include/$$d; \
+		done) \
+	$(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+		&& echo $(gcc_lib_dir)/SYSCALLS.c.X) \
+	$(shell for h in {,e,p,x}mmintrin.h mm3dnow.h mm_malloc.h; do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$h \
+		    && echo $(gcc_lib_dir)/include/$$h; \
+		done)
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_gcc += \
+	$(PF)/share/man/man1/{gcc,gcov}$(pkg_ver).1
+endif
+
+ifeq ($(with_libssp),yes)
+    files_gcc += $(gcc_lib_dir)/include/ssp
+endif
+
+ifeq ($(DEB_HOST_ARCH),ia64)
+    files_gcc += $(gcc_lib_dir)/include/ia64intrin.h
+endif
+
+ifeq ($(DEB_HOST_ARCH),m68k)
+    files_gcc += $(gcc_lib_dir)/include/math-68881.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64))
+    files_gcc += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h,spe.h}
+endif
+
+usr_doc_files = debian/README.Bugs \
+	$(shell test -f $(srcdir)/FAQ && echo $(srcdir)/FAQ)
+ifeq ($(with_check),yes)
+  usr_doc_files += test-summary
+endif
+
+p_loc	= gcc$(pkg_ver)-locales
+d_loc	= debian/$(p_loc)
+
+p_gcc_m	= gcc$(pkg_ver)-multilib
+d_gcc_m	= debian/$(p_gcc_m)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gcc)
+	dh_installdirs -p$(p_gcc) $(dirs_gcc)
+
+	rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
+	ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
+
+ifeq ($(with_libssp),yes)
+	mv $(d)/$(PF)/lib/libssp*.a $(d_gcc)/$(gcc_lib_dir)/
+	rm -f $(d)/$(PF)/lib/libssp*.{la,so}
+	dh_link -p$(p_gcc) \
+	  /$(PF)/lib/libssp.so.$(SSP_SONAME) /$(gcc_lib_dir)/libssp.so
+	cp -p $(srcdir)/libssp/ChangeLog \
+		$(d_gcc)/$(docdir)/$(p_base)/libssp/changelog
+endif
+	cp -p debian/gccbug.1 $(d)/$(PF)/share/man/man1/gccbug$(pkg_ver).1
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gcc) $(files_gcc)
+
+	ln -sf gcc$(pkg_ver) \
+	    $(d_gcc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver)
+	ln -sf gcc$(pkg_ver) \
+	    $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-gcc$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf gcc$(pkg_ver).1 \
+	    $(d_gcc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1
+	ln -sf gcc$(pkg_ver).1 \
+	    $(d_gcc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcc$(pkg_ver).1
+endif
+
+#	dh_installdebconf
+	debian/dh_doclink -p$(p_gcc) $(p_base)
+	cp -p $(usr_doc_files) $(d_gcc)/$(docdir)/$(p_base)/.
+	if [ -f testsuite-comparision ]; then \
+	  cp -p testsuite-comparision $(d_gcc)/$(docdir)/$(p_base)/. ; \
+	fi
+	cp -p debian/README.ssp $(d_gcc)/$(docdir)/$(p_base)/
+	cp -p debian/NEWS.gcc $(d_gcc)/$(docdir)/$(p_base)/NEWS
+	cp -p debian/NEWS.html $(d_gcc)/$(docdir)/$(p_base)/NEWS.html
+	cp -p $(srcdir)/gcc/ChangeLog \
+		$(d_gcc)/$(docdir)/$(p_base)/gcc/changelog
+	if [ -f $(builddir)/gcc/.bad_compare ]; then \
+	  ( \
+	    echo "The comparision of the stage2 and stage3 object files shows differences."; \
+	    echo "The Debian package was modified to ignore these differences."; \
+	    echo ""; \
+	    echo "The following files differ:"; \
+	    echo ""; \
+	    cat $(builddir)/gcc/.bad_compare; \
+	  ) > $(d_gcc)/$(docdir)/$(p_base)/BOOTSTRAP_COMPARISION_FAILURE; \
+	else \
+	  true; \
+	fi
+	debian/dh_rmemptydirs -p$(p_gcc)
+	dh_strip -p$(p_gcc)
+	dh_compress -p$(p_gcc) -X README.Bugs
+	dh_fixperms -p$(p_gcc)
+	dh_shlibdeps -p$(p_gcc)
+	dh_gencontrol -p$(p_gcc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gcc)
+	dh_md5sums -p$(p_gcc)
+	dh_builddeb -p$(p_gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+	: # remove empty directories, when all components are in place
+	for d in `find $(d) -depth -type d -empty 2> /dev/null`; do \
+	    while rmdir $$d 2> /dev/null; do d=`dirname $$d`; done; \
+	done
+
+	@echo "Listing installed files not included in any package:"
+	-find $(d) ! -type d
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-multi: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gcc_m)
+	dh_installdirs -p$(p_gcc_m) \
+		$(docdir) \
+		$(gcc_lib_dir)/$(biarchsubdir) \
+
+ifeq ($(biarch),yes)
+	DH_COMPAT=2 dh_movefiles -p$(p_gcc_m) \
+		$(gcc_lib_dir)/$(biarchsubdir)/{libgcc*,libgcov.a,*.o}
+	rm -f $(d)/$(PF)/$(lib64)/libgcc_s.so
+	dh_link -p$(p_gcc_m) \
+	  /$(lib64)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/libgcc_s_64.so \
+	  /$(lib64)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libgcc_s.so
+  ifeq ($(with_lib64gmath),yes)
+	rm -f $(d)/$(PF)/$(lib64)/libgcc-math.{la,so}
+	dh_link -p$(p_gcc_m) \
+	  /$(PF)/$(lib64)/libgcc-math.so.$(GCC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libgcc-math.so
+	mv $(d)/$(PF)/$(lib64)/libgcc-math.a $(d)/$(gcc_lib_dir)/$(biarchsubdir)/
+  endif
+endif
+ifeq ($(biarch32),yes)
+	DH_COMPAT=2 dh_movefiles -p$(p_gcc_m) \
+		$(gcc_lib_dir)/$(biarchsubdir)/{libgcc*,libgcov.a,*.o}
+	rm -f $(d)/$(lib32)/libgcc_s.so
+	dh_link -p$(p_gcc_m) \
+	  /$(lib32)/libgcc_s.so.$(GCC_SONAME)  /$(gcc_lib_dir)/libgcc_s_32.so \
+	  /$(lib32)/libgcc_s.so.$(GCC_SONAME)  /$(gcc_lib_dir)/$(biarchsubdir)/libgcc_s.so
+  ifeq ($(with_lib32gmath),yes)
+	rm -f $(d)/$(lib32)/libgcc-math.{la,so}
+	dh_link -p$(p_gcc_m) \
+	  /$(lib32)/libgcc-math.so.$(GCC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libgcc-math.so
+	mv $(d)/$(lib32)/libgcc-math.a $(d)/$(gcc_lib_dir)/$(biarchsubdir)/
+  endif
+endif
+
+ifeq ($(with_libssp),yes)
+  ifeq ($(biarch),yes)
+	mv $(d)/$(PF)/$(lib64)/libssp*.a $(d_gcc_m)/$(gcc_lib_dir)/$(biarchsubdir)/
+	rm -f $(d)/$(PF)/$(lib64)/$(biarchsubdir)/libssp*.{la,so}
+	dh_link -p$(p_gcc_m) \
+	  /$(PF)/$(lib64)/libssp.so.$(SSP_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libssp.so
+  endif
+  ifeq ($(biarch32),yes)
+	mv $(d)/$(lib32)/libssp*.a $(d_gcc_m)/$(gcc_lib_dir)/$(biarchsubdir)/
+	rm -f $(d)/$(lib32)/$(biarchsubdir)/libssp*.{la,so}
+	dh_link -p$(p_gcc_m) \
+	  /$(lib32)/libssp.so.$(SSP_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libssp.so
+  endif
+endif
+
+ifeq ($(with_common_gcclibdir),yes)
+	: # compat symlinks (only needed for the 4.1.2 -> 4.1.3 transition)
+  ifeq ($(biarch),yes)
+	mkdir -p $(d_gcc_m)/$(old_lib_dir)/$(biarchsubdir)
+	for i in $(d_gcc_m)/$(gcc_lib_dir)/$(biarchsubdir)/*; do \
+	  b=$(biarchsubdir)/$$(basename $$i); \
+	  ln -sf ../../$(BASE_VERSION)/$$b $(d_gcc_m)/$(old_lib_dir)/$$b; \
+	done
+  endif
+  ifeq ($(biarch32),yes)
+	mkdir -p $(d_gcc_m)/$(old_lib_dir)/$(biarchsubdir)
+	for i in $(d_gcc_m)/$(gcc_lib_dir)/$(biarchsubdir)/*; do \
+	  b=$(biarchsubdir)/$$(basename $$i); \
+	  ln -sf ../../$(BASE_VERSION)/$$b $(d_gcc_m)/$(old_lib_dir)/$$b; \
+	done
+  endif
+endif
+
+	debian/dh_doclink -p$(p_gcc_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_gcc_m)
+
+	dh_strip -p$(p_gcc_m)
+	dh_compress -p$(p_gcc_m)
+	dh_shlibdeps -p$(p_gcc_m)
+	dh_fixperms -p$(p_gcc_m)
+	dh_installdeb -p$(p_gcc_m)
+	dh_gencontrol -p$(p_gcc_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_gcc_m)
+	dh_builddeb -p$(p_gcc_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-locales: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_loc)
+	dh_installdirs -p$(p_loc) \
+		$(docdir)
+	DH_COMPAT=2 dh_movefiles -p$(p_loc) \
+		$(PF)/share/locale/*/*/cpplib*.* \
+		$(PF)/share/locale/*/*/gcc*.*
+
+	debian/dh_doclink -p$(p_loc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_loc)
+
+	dh_compress -p$(p_loc)
+	dh_fixperms -p$(p_loc)
+	dh_installdeb -p$(p_loc)
+	dh_gencontrol -p$(p_loc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_loc)
+	dh_builddeb -p$(p_loc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_doc)
+	dh_installdirs -p$(p_doc) \
+		$(docdir)/$(p_base) \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_doc) \
+		$(PF)/share/info/gcc*
+	rm -f $(d_doc)/$(PF)/share/info/gccinst*
+
+	debian/dh_doclink -p$(p_doc) $(p_base)
+	dh_installdocs -p$(p_doc) html/gcc.html html/gccint.html
+	rm -f $(d_doc)/$(docdir)/$(p_base)/copyright
+	debian/dh_rmemptydirs -p$(p_doc)
+
+	dh_compress -p$(p_doc)
+	dh_fixperms -p$(p_doc)
+	dh_installdeb -p$(p_doc)
+	dh_gencontrol -p$(p_doc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_doc)
+	dh_builddeb -p$(p_doc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-fortran.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-fortran.mk
@@ -0,0 +1,247 @@
+ifeq ($(with_libfortran),yes)
+  arch_binaries  := $(arch_binaries) libfortran
+endif
+ifeq ($(with_lib64fortran),yes)
+  arch_binaries  := $(arch_binaries) lib64fortran
+endif
+ifeq ($(with_lib32fortran),yes)
+  arch_binaries	:= $(arch_binaries) lib32fortran
+endif
+
+ifeq ($(with_fdev),yes)
+  ifneq (,$(filter yes, $(biarch) $(biarch32)))
+    arch_binaries  := $(arch_binaries) fdev-multi
+  endif
+  arch_binaries  := $(arch_binaries) fdev
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    indep_binaries := $(indep_binaries) fortran-doc
+  endif
+endif
+
+p_g95	= gfortran$(pkg_ver)
+p_g95_m	= gfortran$(pkg_ver)-multilib
+p_g95d	= gfortran$(pkg_ver)-doc
+p_flib	= libgfortran$(FORTRAN_SONAME)
+p_f32lib= lib32gfortran$(FORTRAN_SONAME)
+p_f64lib= lib64gfortran$(FORTRAN_SONAME)
+
+d_g95	= debian/$(p_g95)
+d_g95_m	= debian/$(p_g95_m)
+d_g95d	= debian/$(p_g95d)
+d_flib	= debian/$(p_flib)
+d_f32lib= debian/$(p_f32lib)
+d_f64lib= debian/$(p_f64lib)
+
+dirs_g95 = \
+	$(docdir)/$(p_base)/fortran \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/include \
+	$(PF)/include \
+	$(PF)/share/man/man1
+files_g95 = \
+	$(PF)/bin/gfortran$(pkg_ver) \
+	$(gcc_lexec_dir)/f951 
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_g95 += \
+	$(PF)/share/man/man1/gfortran$(pkg_ver).1
+endif
+
+dirs_flib = \
+	$(docdir)/$(p_base)/fortran \
+	$(PF)/$(libdir) \
+
+files_flib = \
+	$(PF)/$(libdir)/libgfortran.so.*
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libfortran: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_flib)
+	dh_installdirs -p$(p_flib) $(dirs_flib)
+	DH_COMPAT=2 dh_movefiles -p$(p_flib) $(files_flib)
+	debian/dh_doclink -p$(p_flib) $(p_base)
+
+	dh_strip -p$(p_flib)
+	dh_compress -p$(p_flib)
+	dh_fixperms -p$(p_flib)
+	dh_makeshlibs -p$(p_flib) -V '$(p_flib) (>= $(DEB_SOVERSION))'
+	dh_shlibdeps -p$(p_flib)
+	dh_gencontrol -p$(p_flib) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_flib)
+	dh_md5sums -p$(p_flib)
+	dh_builddeb -p$(p_flib)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64fortran: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_f64lib)
+	dh_installdirs -p$(p_f64lib) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_f64lib) \
+		$(PF)/lib64/libgfortran.so.*
+
+	debian/dh_doclink -p$(p_f64lib) $(p_base)
+
+	dh_strip -p$(p_f64lib)
+	dh_compress -p$(p_f64lib)
+	dh_fixperms -p$(p_f64lib)
+	dh_makeshlibs -p$(p_f64lib) -V '$(p_f64lib) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_f64lib)
+	dh_gencontrol -p$(p_f64lib) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_f64lib)
+	dh_md5sums -p$(p_f64lib)
+	dh_builddeb -p$(p_f64lib)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32fortran: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_f32lib)
+	dh_installdirs -p$(p_f32lib) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_f32lib) \
+		$(lib32)/libgfortran.so.*
+
+	debian/dh_doclink -p$(p_f32lib) $(p_base)
+
+	dh_strip -p$(p_f32lib)
+	dh_compress -p$(p_f32lib)
+	dh_fixperms -p$(p_f32lib)
+	dh_makeshlibs -p$(p_f32lib) -V '$(p_f32lib) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_f32lib)
+	dh_gencontrol -p$(p_f32lib) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_f32lib)
+	dh_md5sums -p$(p_f32lib)
+	dh_builddeb -p$(p_f32lib)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fdev: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_g95)
+	dh_installdirs -p$(p_g95) $(dirs_g95)
+
+	rm -f $(d)/$(gcc_lib_dir)/libgfortranbegin.la
+	rm -f $(d)/$(gcc_lib_dir)/$(biarchsubdir)/libgfortranbegin.la
+
+	DH_COMPAT=2 dh_movefiles -p$(p_g95) $(files_g95)
+
+	rm -f $(d)/$(PF)/lib/libgfortran*.{la,so}
+	mv $(d)/$(PF)/lib/libgfortran*.a $(d_g95)/$(gcc_lib_dir)/
+	dh_link -p$(p_g95) \
+	  /$(PF)/$(libdir)/libgfortran.so.$(FORTRAN_SONAME) \
+	  /$(gcc_lib_dir)/libgfortran.so
+
+	ln -sf gfortran$(pkg_ver) \
+	    $(d_g95)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gfortran$(pkg_ver)
+	ln -sf gfortran$(pkg_ver) \
+	    $(d_g95)/$(PF)/bin/$(TARGET_ALIAS)-gfortran$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf gfortran$(pkg_ver).1 \
+	    $(d_g95)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gfortran$(pkg_ver).1
+	ln -sf gfortran$(pkg_ver).1 \
+	    $(d_g95)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gfortran$(pkg_ver).1
+endif
+
+	debian/dh_doclink -p$(p_g95) $(p_base)
+
+	cp -p $(srcdir)/gcc/fortran/ChangeLog \
+		$(d_g95)/$(docdir)/$(p_base)/fortran/changelog
+	debian/dh_rmemptydirs -p$(p_g95)
+
+	dh_strip -p$(p_g95)
+	dh_compress -p$(p_g95)
+	dh_fixperms -p$(p_g95)
+	dh_shlibdeps -p$(p_g95)
+	dh_gencontrol -p$(p_g95) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_g95)
+	dh_md5sums -p$(p_g95)
+	dh_builddeb -p$(p_g95)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fdev-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_g95_m)
+	dh_installdirs -p$(p_g95_m) \
+		$(docdir) \
+		$(gcc_lib_dir)/$(biarchsubdir)
+
+ifeq ($(biarch),yes)
+	rm -f $(d)/$(PF)/lib64/libgfortran*.{la,so}
+	mkdir -p $(d_g95_m)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(PF)/lib64/libgfortran*.a $(d_g95_m)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_g95_m) \
+	  /$(PF)/lib64/libgfortran.so.$(FORTRAN_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libgfortran.so
+endif
+ifeq ($(biarch32),yes)
+	rm -f $(d)/$(lib32)/libgfortran*.{la,so}
+	mkdir -p $(d_g95_m)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(lib32)/libgfortran*.a $(d_g95_m)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_g95_m) \
+	  /$(lib32)/libgfortran.so.$(FORTRAN_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libgfortran.so
+endif
+
+	debian/dh_doclink -p$(p_g95_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_g95_m)
+	dh_strip -p$(p_g95_m)
+	dh_compress -p$(p_g95_m)
+	dh_fixperms -p$(p_g95_m)
+	dh_shlibdeps -p$(p_g95_m)
+	dh_gencontrol -p$(p_g95_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_g95_m)
+	dh_md5sums -p$(p_g95_m)
+	dh_builddeb -p$(p_g95_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fortran-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_g95d)
+	dh_installdirs -p$(p_g95d) \
+		$(docdir)/$(p_base)/fortran \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_g95d) \
+		$(PF)/share/info/gfortran*
+
+	debian/dh_doclink -p$(p_g95d) $(p_base)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	dh_installdocs -p$(p_g95d)
+	rm -f $(d_g95d)/$(docdir)/$(p_base)/copyright
+	cp -p html/gfortran.html $(d_g95d)/$(docdir)/$(p_base)/fortran/
+endif
+
+	dh_compress -p$(p_g95d)
+	dh_fixperms -p$(p_g95d)
+	dh_installdeb -p$(p_g95d)
+	dh_gencontrol -p$(p_g95d) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_g95d)
+	dh_builddeb -p$(p_g95d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-objcxx.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-objcxx.mk
@@ -0,0 +1,62 @@
+ifneq (,$(filter yes, $(biarch) $(biarch32)))
+  arch_binaries  := $(arch_binaries) objcxx-multi
+endif
+arch_binaries := $(arch_binaries) objcxx
+
+p_objcx		= gobjc++$(pkg_ver)
+d_objcx		= debian/$(p_objcx)
+
+p_objcx_m	= gobjc++$(pkg_ver)-multilib
+d_objcx_m	= debian/$(p_objcx_m)
+
+dirs_objcx = \
+	$(docdir)/$(p_base)/Obj-C++ \
+	$(gcc_lexec_dir)
+
+files_objcx = \
+	$(gcc_lexec_dir)/cc1objplus
+
+$(binary_stamp)-objcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objcx)
+	dh_installdirs -p$(p_objcx) $(dirs_objcx)
+	DH_COMPAT=2 dh_movefiles -p$(p_objcx) $(files_objcx)
+
+	debian/dh_doclink -p$(p_objcx) $(p_base)
+	cp -p $(srcdir)/gcc/objcp/ChangeLog \
+		$(d_objcx)/$(docdir)/$(p_base)/Obj-C++/changelog
+
+	debian/dh_rmemptydirs -p$(p_objcx)
+
+	dh_strip -p$(p_objcx)
+	dh_compress -p$(p_objcx)
+
+	dh_fixperms -p$(p_objcx)
+	dh_shlibdeps -p$(p_objcx)
+	dh_gencontrol -p$(p_objcx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objcx)
+	dh_md5sums -p$(p_objcx)
+	dh_builddeb -p$(p_objcx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-objcxx-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+
+	rm -rf $(d_objcx_m)
+
+	debian/dh_doclink -p$(p_objcx_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_objcx_m)
+	dh_strip -p$(p_objcx_m)
+	dh_compress -p$(p_objcx_m)
+
+	dh_fixperms -p$(p_objcx_m)
+	dh_shlibdeps -p$(p_objcx_m)
+	dh_gencontrol -p$(p_objcx_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objcx_m)
+	dh_md5sums -p$(p_objcx_m)
+	dh_builddeb -p$(p_objcx_m)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-hppa64.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-hppa64.mk
@@ -0,0 +1,29 @@
+arch_binaries  := $(arch_binaries) hppa64
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-hppa64: $(install_hppa64_stamp)
+	dh_testdir
+	dh_testroot
+
+#	dh_installdirs -p$(p_hppa64)
+
+	: # provide as and ld links
+	dh_link -p $(p_hppa64) \
+		/usr/bin/hppa64-linux-gnu-as \
+		/$(PF)/lib/gcc/hppa64-linux-gnu/$(GCC_VERSION)/as \
+		/usr/bin/hppa64-linux-gnu-ld \
+		/$(PF)/lib/gcc/hppa64-linux-gnu/$(GCC_VERSION)/ld
+
+	debian/dh_doclink -p$(p_hppa64) $(p_base)
+	debian/dh_rmemptydirs -p$(p_hppa64)
+
+	dh_strip -p$(p_hppa64) -X.o -Xlibgcc.a -Xlibgcov.a
+	dh_compress -p$(p_hppa64)
+	dh_fixperms -p$(p_hppa64)
+	dh_shlibdeps -p$(p_hppa64)
+	dh_gencontrol -p$(p_hppa64) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_hppa64)
+	dh_md5sums -p$(p_hppa64)
+	dh_builddeb -p$(p_hppa64)
+
+	touch $@
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-ada.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-ada.mk
@@ -0,0 +1,315 @@
+arch_binaries := $(arch_binaries) gnatbase ada
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  indep_binaries := $(indep_binaries) ada-doc
+endif
+
+ifeq ($(with_libgnat),yes)
+  arch_binaries := $(arch_binaries) libgnat
+endif
+
+p_gbase	= gnat-$(GNAT_VERSION)-base
+p_gnat	= gnat-$(GNAT_VERSION)
+p_lgnat	= libgnat-$(GNAT_VERSION)
+p_lgnat_dbg = $(p_lgnat)-dbg
+p_lgnatvsn = libgnatvsn$(GNAT_VERSION)
+p_lgnatvsn_dev = $(p_lgnatvsn)-dev
+p_lgnatvsn_dbg = $(p_lgnatvsn)-dbg
+p_lgnatprj = libgnatprj$(GNAT_VERSION)
+p_lgnatprj_dev = $(p_lgnatprj)-dev
+p_lgnatprj_dbg = $(p_lgnatprj)-dbg
+p_gnatd	= $(p_gnat)-doc
+
+d_gbase	= debian/$(p_gbase)
+d_gnat	= debian/$(p_gnat)
+d_lgnat	= debian/$(p_lgnat)
+d_lgnatvsn = debian/$(p_lgnatvsn)
+d_lgnatprj = debian/$(p_lgnatprj)
+d_gnatd	= debian/$(p_gnatd)
+
+GNAT_TOOLS = gnat gnatbind gnatbl gnatchop gnatclean gnatfind gnatkr gnatlink \
+		gnatls gnatmake gnatname gnatprep gnatxref \
+		gprmake
+
+dirs_gnat = \
+	$(docdir)/$(p_base) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(gcc_lib_dir) \
+	$(gcc_lexec_dir)
+
+files_gnat = \
+	$(gcc_lexec_dir)/gnat1 \
+	$(gcc_lib_dir)/{adalib,adainclude} \
+	$(foreach i,$(GNAT_TOOLS),$(PF)/bin/$(i))
+
+#	$(foreach i,$(GNAT_TOOLS),$(PF)/bin/$(i)-$(GNAT_VERSION))
+
+dirs_lgnat = \
+	$(docdir) \
+	$(PF)/lib
+files_lgnat = \
+	$(PF)/$(libdir)/lib{gnat,gnarl}-$(GNAT_SONAME).so.1
+
+$(binary_stamp)-gnatbase: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	dh_installdocs -p$(p_gbase) debian/README.gnat
+	dh_installchangelogs -p$(p_gbase) src/gcc/ada/ChangeLog
+	dh_compress -p$(p_gbase)
+	dh_fixperms -p$(p_gbase)
+	dh_gencontrol -p$(p_gbase) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gbase)
+	dh_md5sums -p$(p_gbase)
+	dh_builddeb -p$(p_gbase)
+	touch $@
+
+
+$(binary_stamp)-libgnat: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	: # libgnat
+	rm -rf $(d_lgnat)
+	dh_installdirs -p$(p_lgnat) $(dirs_lgnat)
+
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  mv $(d)/$(gcc_lib_dir)/adalib/$$vlib.so.1 $(d)/$(PF)/$(libdir)/. ; \
+	  rm -f $(d)/$(gcc_lib_dir)/adalib/$$lib.so.1; \
+	done
+	dh_movefiles -p$(p_lgnat) $(files_lgnat)
+
+	debian/dh_doclink -p$(p_lgnat) $(p_gbase)
+
+	debian/dh_rmemptydirs -p$(p_lgnat)
+
+	dh_strip -p$(p_lgnat) --dbg-package=$(p_lgnat_dbg)
+	dh_compress -p$(p_lgnat)
+	dh_fixperms -p$(p_lgnat)
+	b=libgnat; \
+	v=$(GNAT_VERSION); \
+	for ext in preinst postinst prerm postrm; do \
+	  for t in '' -dev -dbg; do \
+	    if [ -f debian/$$b$$t.$$ext ]; then \
+	      cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+	    fi; \
+	  done; \
+	done
+	dh_makeshlibs -p$(p_lgnat) -V '$(p_lgnat) (>= $(DEB_VERSION))'
+	cat debian/$(p_lgnat)/DEBIAN/shlibs >> debian/shlibs.local
+
+	mkdir -p $(d_lgnat)/usr/share/lintian/overrides
+	cp -p debian/$(p_lgnat).overrides \
+		$(d_lgnat)/usr/share/lintian/overrides/$(p_lgnat)
+
+	dh_shlibdeps -p$(p_lgnat)
+	dh_gencontrol -p$(p_lgnat) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnat)
+	dh_md5sums -p$(p_lgnat)
+	dh_builddeb -p$(p_lgnat)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+
+$(binary_stamp)-libgnatdbg: $(binary_stamp)-libgnat
+	debian/dh_doclink -p$(p_lgnat_dbg) $(p_gbase)
+	dh_compress -p$(p_lgnat_dbg)
+	dh_fixperms -p$(p_lgnat_dbg)
+	dh_gencontrol -p$(p_lgnat_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnat_dbg)
+	dh_md5sums -p$(p_lgnat_dbg)
+	dh_builddeb -p$(p_lgnat_dbg)
+	touch $@
+
+$(binary_stamp)-libgnatvsn: $(binary_stamp)-libgnat
+	: # libgnatvsn-dev
+	dh_movefiles -p$(p_lgnatvsn_dev) usr/lib/ada/adalib/gnatvsn
+	dh_movefiles -p$(p_lgnatvsn_dev) usr/share/ada/adainclude/gnatvsn
+	dh_install -p$(p_lgnatvsn_dev) \
+	   debian/gnatvsn.gpr usr/share/ada/adainclude
+	dh_movefiles -p$(p_lgnatvsn_dev) usr/lib/libgnatvsn.a
+	dh_link -p$(p_lgnatvsn_dev) \
+	   usr/lib/libgnatvsn.so.$(GNAT_VERSION) \
+	   usr/lib/libgnatvsn.so
+	dh_strip -p$(p_lgnatvsn_dev) -X.a --keep-debug
+	dh_fixperms -p$(p_lgnatvsn_dev)
+	debian/dh_doclink -p$(p_lgnatvsn_dev) $(p_gbase)
+	dh_gencontrol -p$(p_lgnatvsn_dev) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_lgnatvsn_dev)
+	dh_builddeb -p$(p_lgnatvsn_dev)
+
+	: # libgnatvsn
+	dh_movefiles -p$(p_lgnatvsn) usr/lib/libgnatvsn.so.$(GNAT_VERSION)
+	debian/dh_doclink -p$(p_lgnatvsn) $(p_gbase)
+	dh_strip -p$(p_lgnatvsn) --dbg-package=$(p_lgnatvsn_dbg)
+	dh_makeshlibs -p$(p_lgnatvsn) -V '$(p_lgnatvsn) (>= $(DEB_VERSION))'
+	cat debian/$(p_lgnatvsn)/DEBIAN/shlibs >> debian/shlibs.local
+	dh_shlibdeps -p$(p_lgnatvsn) -L$(p_lgnat)
+	dh_gencontrol -p$(p_lgnatvsn) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatvsn)
+	dh_md5sums -p$(p_lgnatvsn)
+	dh_builddeb -p$(p_lgnatvsn)
+
+	touch $@
+
+$(binary_stamp)-libgnatvsndbg: $(binary_stamp)-libgnatvsn
+	debian/dh_doclink -p$(p_lgnatvsn_dbg) $(p_gbase)
+	dh_compress -p$(p_lgnatvsn_dbg)
+	dh_fixperms -p$(p_lgnatvsn_dbg)
+	dh_gencontrol -p$(p_lgnatvsn_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatvsn_dbg)
+	dh_md5sums -p$(p_lgnatvsn_dbg)
+	dh_builddeb -p$(p_lgnatvsn_dbg)
+	touch $@
+
+$(binary_stamp)-libgnatprj: $(binary_stamp)-libgnat $(binary_stamp)-libgnatvsn
+	: # libgnatprj-dev
+	dh_movefiles -p$(p_lgnatprj_dev) usr/lib/ada/adalib/gnatprj
+	dh_movefiles -p$(p_lgnatprj_dev) usr/share/ada/adainclude/gnatprj
+	dh_install -p$(p_lgnatprj_dev) \
+	   debian/gnatprj.gpr usr/share/ada/adainclude
+	dh_movefiles -p$(p_lgnatprj_dev) usr/lib/libgnatprj.a
+	dh_link -p$(p_lgnatprj_dev) \
+	   usr/lib/libgnatprj.so.$(GNAT_VERSION) \
+	   usr/lib/libgnatprj.so
+	dh_strip -p$(p_lgnatprj_dev) -X.a --keep-debug
+	dh_fixperms -p$(p_lgnatprj_dev)
+	debian/dh_doclink -p$(p_lgnatprj_dev) $(p_gbase)
+	dh_gencontrol -p$(p_lgnatprj_dev) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_lgnatprj_dev)
+	dh_builddeb -p$(p_lgnatprj_dev)
+	: # libgnatprj
+	dh_movefiles -p$(p_lgnatprj) usr/lib/libgnatprj.so.$(GNAT_VERSION)
+	debian/dh_doclink -p$(p_lgnatprj) $(p_gbase)
+	dh_strip -p$(p_lgnatprj) --dbg-package=$(p_lgnatprj_dbg)
+	dh_makeshlibs -p$(p_lgnatprj) -V '$(p_lgnatprj) (>= $(DEB_VERSION))'
+	cat debian/$(p_lgnatprj)/DEBIAN/shlibs >> debian/shlibs.local
+	dh_shlibdeps -p$(p_lgnatprj) -L$(p_lgnat) -L$(p_lgnatvsn)
+	dh_gencontrol -p$(p_lgnatprj) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatprj)
+	dh_md5sums -p$(p_lgnatprj)
+	dh_builddeb -p$(p_lgnatprj)
+
+	touch $@
+
+$(binary_stamp)-libgnatprjdbg: $(binary_stamp)-libgnatprj
+	debian/dh_doclink -p$(p_lgnatprj_dbg) $(p_gbase)
+	dh_compress -p$(p_lgnatprj_dbg)
+	dh_fixperms -p$(p_lgnatprj_dbg)
+	dh_gencontrol -p$(p_lgnatprj_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatprj_dbg)
+	dh_md5sums -p$(p_lgnatprj_dbg)
+	dh_builddeb -p$(p_lgnatprj_dbg)
+	touch $@
+
+ifeq ($(with_libgnat),yes)
+$(binary_stamp)-ada: $(install_stamp) $(binary_stamp)-libgnat $(binary_stamp)-libgnatdbg
+$(binary_stamp)-ada: $(binary_stamp)-libgnatvsn $(binary_stamp)-libgnatvsndbg
+$(binary_stamp)-ada: $(binary_stamp)-libgnatprj $(binary_stamp)-libgnatprjdbg
+else
+$(binary_stamp)-ada: $(install_stamp)
+endif
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+	: # gnat
+	rm -rf $(d_gnat)
+	dh_installdirs -p$(p_gnat) $(dirs_gnat)
+	dh_movefiles -p$(p_gnat) $(files_gnat)
+
+ifeq (0,1)
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+	mkdir -p $(d_gnat)/$(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+	ln -sf ../$(GCC_VERSION)/gnat1 \
+	  $(d_gnat)/$(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/gnat1
+	mkdir -p $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+	ln -sf ../$(GCC_VERSION)/adalib \
+	  $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/adalib
+	ln -sf ../$(GCC_VERSION)/adainclude \
+	  $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/adainclude
+endif
+endif
+
+ifeq ($(with_libgnat),yes)
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  dh_link -p$(p_gnat) \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$vlib.so \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$lib.so; \
+	done
+endif
+	debian/dh_doclink -p$(p_gnat) $(p_gbase)
+
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+  ifeq ($(with_check),yes)
+	dh_link -p$(p_gnat) \
+		usr/share/doc/$(p_base)/Ada/changelog.gz \
+		usr/share/doc/$(p_gbase)/changelog.gz
+  endif
+endif
+
+	for i in $(GNAT_TOOLS); do \
+	  case "$$i" in \
+	    gnat) cp -p debian/gnat.1 $(d_gnat)/$(PF)/share/man/man1/ ;; \
+	    *) ln -sf gnat.1 $(d_gnat)/$(PF)/share/man/man1/$$i.1; \
+	  esac; \
+	done
+
+	debian/dh_rmemptydirs -p$(p_gnat)
+
+	dh_strip -p$(p_gnat)
+	dh_compress -p$(p_gnat)
+	dh_fixperms -p$(p_gnat)
+	find $(d_gnat) -name '*.ali' | xargs chmod 444
+	dh_shlibdeps -p$(p_gnat)
+	dh_gencontrol -p$(p_gnat) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gnat)
+	dh_md5sums -p$(p_gnat)
+	dh_builddeb -p$(p_gnat)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+
+ada_info_dir = $(d_gnatd)/$(PF)/share/info
+
+$(binary_stamp)-ada-doc: $(build_html_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gnatd)
+	dh_installdirs -p$(p_gnatd) \
+		$(docdir)/$(p_base)/Ada \
+		$(PF)/share/info
+
+	cd $(ada_info_dir) && \
+	    makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+		-I $(builddir)/gcc \
+		-o gnat_ugn_unw-$(GNAT_VERSION).info \
+		$(builddir)/gcc/doc/gnat_ugn_unw.texi
+	cd $(ada_info_dir) && \
+	    makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+		-I $(builddir)/gcc \
+		-o gnat_rm-$(GNAT_VERSION).info \
+		$(srcdir)/gcc/ada/gnat_rm.texi
+	cd $(ada_info_dir) && \
+	    makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+		-I $(builddir)/gcc \
+		-o gnat-style-$(GNAT_VERSION).info \
+		$(srcdir)/gcc/ada/gnat-style.texi
+
+	debian/dh_doclink -p$(p_gnatd) $(p_gbase)
+	dh_installdocs -p$(p_gnatd)
+	rm -f $(d_gnatd)/$(docdir)/$(p_base)/copyright
+	cp -p html/gnat_ugn_unw.html html/gnat_rm.html html/gnat-style.html \
+		$(d_gnatd)/$(docdir)/$(p_base)/Ada/
+
+	dh_compress -p$(p_gnatd)
+	dh_fixperms -p$(p_gnatd)
+	dh_installdeb -p$(p_gnatd)
+	dh_gencontrol -p$(p_gnatd) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_gnatd)
+	dh_builddeb -p$(p_gnatd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-softfloat.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-softfloat.mk
@@ -0,0 +1,33 @@
+arch_binaries  := $(arch_binaries) softfloat
+
+p_softfloat  = gcc$(pkg_ver)-soft-float
+d_softfloat  = debian/$(p_softfloat)
+
+dirs_softfloat = \
+	$(PF)/$(libdir)/soft-float \
+	$(gcc_lib_dir)/soft-float
+
+files_softfloat = \
+	$(PF)/$(libdir)/soft-float \
+	$(gcc_lib_dir)/soft-float
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-softfloat: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_softfloat)
+	dh_installdirs -p$(p_softfloat) $(dirs_softfloat)
+	DH_COMPAT=2 dh_movefiles -p$(p_softfloat) $(files_softfloat)
+	debian/dh_doclink -p$(p_softfloat) $(p_base)
+	dh_strip -p$(p_softfloat) -Xlibgcj.a
+	dh_compress -p$(p_softfloat)
+	dh_fixperms -p$(p_softfloat)
+	dh_shlibdeps -p$(p_softfloat)
+	dh_gencontrol -p$(p_softfloat) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_softfloat)
+	dh_md5sums -p$(p_softfloat)
+	dh_builddeb -p$(p_softfloat)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libmudflap.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libmudflap.mk
@@ -0,0 +1,177 @@
+ifeq ($(with_dev),yes)
+  arch_binaries  := $(arch_binaries) libmudflapdev
+endif
+
+ifeq ($(with_libmudflap),yes)
+  arch_binaries  := $(arch_binaries) libmudflap
+  ifeq ($(with_lib64mudflap),yes)
+    arch_binaries  := $(arch_binaries) lib64mudflap
+  endif
+  ifeq ($(with_lib32mudflap),yes)
+    arch_binaries	:= $(arch_binaries) lib32mudflap
+  endif
+endif
+
+p_mf	= libmudflap$(MUDFLAP_SONAME)
+p_l32mf	= lib32mudflap$(MUDFLAP_SONAME)
+p_l64mf	= lib64mudflap$(MUDFLAP_SONAME)
+p_mfd	= libmudflap$(MUDFLAP_SONAME)-dev
+
+d_mf	= debian/$(p_mf)
+d_l32mf	= debian/$(p_l32mf)
+d_l64mf	= debian/$(p_l64mf)
+d_mfd	= debian/$(p_mfd)
+
+dirs_mfd = \
+	$(docdir)/$(p_base)/mudflap \
+	$(PF)/include \
+	$(PF)/$(libdir)
+files_mfd = \
+	$(PF)/include/mf-runtime.h \
+	$(PF)/$(libdir)/libmudflap*.{a,so,la}
+
+ifeq ($(with_lib32mudflap),yes)
+	dirs_mfd  += $(lib32)
+	files_mfd += $(lib32)/libmudflap*.{a,so,la}
+endif
+ifeq ($(with_lib64mudflap),yes)
+	dirs_mfd  += $(PF)/lib64
+	files_mfd += $(PF)/lib64/libmudflap*.{a,so,la}
+endif
+
+$(binary_stamp)-libmudflap: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_mf)
+	dh_installdirs -p$(p_mf) \
+		$(docdir) \
+		$(PF)/$(libdir)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_mf) \
+		$(PF)/$(libdir)/libmudflap*.so.*
+
+	debian/dh_doclink -p$(p_mf) $(p_base)
+	debian/dh_rmemptydirs -p$(p_mf)
+	dh_strip -p$(p_mf)
+	dh_compress -p$(p_mf)
+	dh_fixperms -p$(p_mf)
+	dh_makeshlibs -p$(p_mf) -V '$(p_mf) (>= $(DEB_SOVERSION))'
+	dh_shlibdeps -p$(p_mf)
+	dh_gencontrol -p$(p_mf) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_mf)
+	dh_md5sums -p$(p_mf)
+	dh_builddeb -p$(p_mf)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libmudflapdev: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_mfd)
+	dh_installdirs -p$(p_mfd) $(dirs_mfd)
+
+	rm -f $(d)/$(PF)/$(libdir)/libmudflap*.so
+	mv $(d)/$(PF)/$(libdir)/libmudflap*.a $(d)/$(gcc_lib_dir)/
+
+	rm -f $(d)/$(PF)/$(libdir)/libmudflap*.la
+	rm -f $(d)/$(PF)/$(libdir)/$(biarchsubdir)/libmudflap*.la
+
+	DH_COMPAT=2 dh_movefiles -p$(p_mfd) $(files_mfd)
+
+	dh_link -p$(p_mfd) \
+	  /$(PF)/$(libdir)/libmudflap.so.$(MUDFLAP_SONAME) /$(gcc_lib_dir)/libmudflap.so \
+	  /$(PF)/$(libdir)/libmudflapth.so.$(MUDFLAP_SONAME) /$(gcc_lib_dir)/libmudflapth.so
+
+ifeq ($(with_lib32mudflap),yes)
+	rm -f $(d)/$(lib32)/libmudflap*.so
+	mkdir -p $(d_mfd)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(lib32)/libmudflap*.a $(d_mfd)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_mfd) \
+	  /$(lib32)/libmudflap.so.$(MUDLFLAP_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libmudflap.so \
+	  /$(lib32)/libmudflapth.so.$(MUDFLAP_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libmudflapth.so
+endif
+
+ifeq ($(with_lib64mudflap),yes)
+	rm -f $(d)/$(PF)/$(lib64)/libmudflap*.so
+	mkdir -p $(d_mfd)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(PF)/$(lib64)/libmudflap*.a $(d_mfd)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_mfd) \
+	  /$(PF)/lib64/libmudflap.so.$(MUDLFLAP_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libmudflap.so \
+	  /$(PF)/lib64/libmudflapth.so.$(MUDFLAP_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libmudflapth.so
+endif
+
+	cp -p $(srcdir)/libmudflap/ChangeLog \
+		$(d_mfd)/$(docdir)/$(p_base)/mudflap/changelog
+
+	debian/dh_doclink -p$(p_mfd) $(p_base)
+	debian/dh_rmemptydirs -p$(p_mfd)
+
+	dh_strip -p$(p_mfd)
+	dh_compress -p$(p_mfd)
+	dh_fixperms -p$(p_mfd)
+	dh_shlibdeps -p$(p_mfd)
+	dh_gencontrol -p$(p_mfd) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_mfd)
+	dh_md5sums -p$(p_mfd)
+	dh_builddeb -p$(p_mfd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64mudflap: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64mf)
+	dh_installdirs -p$(p_l64mf) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_l64mf) \
+		$(PF)/lib64/libmudflap*.so.*
+
+	debian/dh_doclink -p$(p_l64mf) $(p_base)
+
+	dh_strip -p$(p_l64mf)
+	dh_compress -p$(p_l64mf)
+	dh_fixperms -p$(p_l64mf)
+	dh_makeshlibs -p$(p_l64mf) -V '$(p_l64mf) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l64mf)
+	dh_gencontrol -p$(p_l64mf) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l64mf)
+	dh_md5sums -p$(p_l64mf)
+	dh_builddeb -p$(p_l64mf)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32mudflap: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32mf)
+	dh_installdirs -p$(p_l32mf) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_l32mf) \
+		$(lib32)/libmudflap*.so.*
+
+	debian/dh_doclink -p$(p_l32mf) $(p_base)
+
+	dh_strip -p$(p_l32mf)
+	dh_compress -p$(p_l32mf)
+	dh_fixperms -p$(p_l32mf)
+	dh_makeshlibs -p$(p_l32mf) -V '$(p_l32mf) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l32mf)
+	dh_gencontrol -p$(p_l32mf) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l32mf)
+	dh_md5sums -p$(p_l32mf)
+	dh_builddeb -p$(p_l32mf)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libstdcxx-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libstdcxx-cross.mk
@@ -0,0 +1,333 @@
+ifeq ($(with_libcxx),yes)
+  arch_binaries  := $(arch_binaries) libstdcxx
+endif
+ifeq ($(with_lib64cxx),yes)
+  arch_binaries  := $(arch_binaries) lib64stdcxx
+endif
+ifeq ($(biarch32),yes)
+  arch_binaries	:= $(arch_binaries) lib32stdcxx
+endif
+
+ifeq ($(with_cxxdev),yes)
+  arch_binaries  := $(arch_binaries) libstdcxx-dev
+endif
+
+# see #483906
+ifeq ($(biarch),yes)
+  AUX_DEB_TARGET_GNU_TYPE := $(DEB_TARGET_GNU_TYPE)
+  ifeq ($(DEB_TARGET_GNU_TYPE),powerpc-linux-gnu)
+    AUX_DEB_TARGET_GNU_TYPE := powerpc64-linux-gnu
+  endif
+endif
+
+libstdc_ext = -$(BASE_VERSION)
+
+p_lib	= libstdc++$(CXX_SONAME)$(cross_lib_arch)
+p_lib64	= lib64stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_lib32	= lib32stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_dev	= libstdc++$(CXX_SONAME)$(libstdc_ext)-dev$(cross_lib_arch)
+p_pic	= libstdc++$(CXX_SONAME)$(libstdc_ext)-pic$(cross_lib_arch)
+p_dbg	= libstdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbg64	= lib64stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbg32	= lib32stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+
+d_lib	= debian/$(p_lib)
+d_lib64	= debian/$(p_lib64)
+d_lib32	= debian/$(p_lib32)
+d_dev	= debian/$(p_dev)
+d_pic	= debian/$(p_pic)
+d_dbg	= debian/$(p_dbg)
+d_dbg64	= debian/$(p_dbg64)
+d_dbg32	= debian/$(p_dbg32)
+
+dirs_lib = \
+	$(docdir) \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib
+
+dirs_lib64 = \
+	$(docdir) \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64
+
+files_lib = \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libstdc++.so.*
+
+files_lib64 = \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/libstdc++.so.*
+
+dirs_dev = \
+	$(docdir) \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib \
+	$(gcc_lib_dir)/include \
+	$(cxx_inc_dir)
+
+files_dev = \
+	$(cxx_inc_dir)/ \
+	$(gcc_lib_dir)/libstdc++.{a,so} \
+	$(gcc_lib_dir)/libsupc++.a
+# Not yet...
+#	$(PF)/$(libdir)/lib{supc,stdc}++.la
+
+dirs_dbg = \
+	$(docdir) \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/debug \
+	$(gcc_lib_dir)
+files_dbg = \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/debug/libstdc++.*
+
+dirs_pic = \
+	$(docdir) \
+	$(gcc_lib_dir)
+files_pic = \
+	$(gcc_lib_dir)/libstdc++_pic.a
+
+ifeq ($(biarch),yes)
+    dirs_dev += $(gcc_lib_dir)/$(biarchsubdir)/
+    files_dev += $(gcc_lib_dir)/$(biarchsubdir)/libstdc++.{a,so} \
+        $(gcc_lib_dir)/$(biarchsubdir)/libsupc++.a
+    dirs_pic += $(gcc_lib_dir)
+    files_pic += $(gcc_lib_dir)/$(biarchsubdir)/libstdc++_pic.a
+endif
+ifeq ($(biarch32),yes)
+    dirs_dev += $(gcc_lib_dir)/$(biarchsubdir)/
+    files_dev += $(gcc_lib_dir)/$(biarchsubdir)/libstdc++.{a,so} \
+        $(gcc_lib_dir)/$(biarchsubdir)/libsupc++.a
+    dirs_pic += $(gcc_lib_dir)
+    files_pic += $(gcc_lib_dir)/$(biarchsubdir)/libstdc++_pic.a
+endif
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-libstdcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lib)
+	dh_installdirs -p$(p_lib) $(dirs_lib)
+	DH_COMPAT=2 dh_movefiles -p$(p_lib) $(files_lib)
+
+	dh_installdocs -p$(p_lib)
+	echo "See /$(docdir)/$(p_base) for more information" \
+		> $(d_lib)/$(docdir)/$(p_lib)/README.Debian
+
+	dh_installchangelogs -p$(p_lib)
+	debian/dh_rmemptydirs -p$(p_lib)
+
+	mkdir -p $(d_dbg)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_lib) --keep-debug
+	# The above line puts debugging information into some strange location
+	# that is hardcoded into dh_strip. Move it from there.
+	mkdir -p $(d_lib)/usr/$(DEB_TARGET_GNU_TYPE)/lib/debug
+	mv $(d_lib)/usr/lib/debug/usr/$(DEB_TARGET_GNU_TYPE)/lib/* $(d_lib)/usr/$(DEB_TARGET_GNU_TYPE)/lib/debug/
+	rm -rf $(d_lib)/usr/lib
+	# End workaround
+	find $(d_dbg)
+	tar -C $(d_lib) -c -f - usr/$(DEB_TARGET_GNU_TYPE)/lib/debug | tar -v -C $(d_dbg) -x -f -
+	rm -rf $(d_lib)/usr/$(DEB_TARGET_GNU_TYPE)/lib/debug
+
+	dh_compress -p$(p_lib)
+	dh_fixperms -p$(p_lib)
+	dh_makeshlibs -p$(p_lib) -V '$(p_lib) (>= $(DEB_STDCXX_SOVERSION))' -n
+	sed s/$(cross_lib_arch)//g < debian/$(p_lib)/DEBIAN/shlibs > debian/$(p_lib)/DEBIAN/shlibs.fixed
+	mv debian/$(p_lib)/DEBIAN/shlibs.fixed debian/$(p_lib)/DEBIAN/shlibs
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lib)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_lib).substvars > debian/$(p_lib).substvars.new
+	mv debian/$(p_lib).substvars.new debian/$(p_lib).substvars
+	dh_gencontrol -p$(p_lib) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_lib)
+	dh_md5sums -p$(p_lib)
+	dh_builddeb -p$(p_lib)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-lib64stdcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lib64)
+	dh_installdirs -p$(p_lib64) $(dirs_lib64)
+	DH_COMPAT=2 dh_movefiles -p$(p_lib64) $(files_lib64)
+
+	dh_installdirs -p$(p_dbg64) \
+		$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/debug $(d_dbg64)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/.
+
+	mkdir -p $(d_dbg64)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_lib64) --keep-debug
+	# The above line puts debugging information into some strange location
+	# that is hardcoded into dh_strip. Move it from there.
+	mkdir -p $(d_lib64)/usr/$(DEB_TARGET_GNU_TYPE)/lib64/debug
+	mv $(d_lib64)/usr/lib/debug/usr/$(DEB_TARGET_GNU_TYPE)/lib64/* $(d_lib64)/usr/$(DEB_TARGET_GNU_TYPE)/lib64/debug/
+	rm -rf $(d_lib64)/usr/lib64
+	# End workaround
+	find $(d_lib64)
+	tar -C $(d_lib64) -c -f - usr/$(DEB_TARGET_GNU_TYPE)/lib64/debug | tar -v -C $(d_dbg64) -x -f -
+	rm -rf $(d_lib64)/usr/$(DEB_TARGET_GNU_TYPE)/lib64/debug
+
+	dh_installdocs -p$(p_lib64)
+	echo "See /$(docdir)/$(p_base) for more information" \
+		> $(d_lib64)/$(docdir)/$(p_lib64)/README.Debian
+	dh_installchangelogs -p$(p_lib64)
+	debian/dh_doclink -p$(p_dbg64) $(p_lib64)
+
+	debian/dh_rmemptydirs -p$(p_lib64)
+	dh_compress -p$(p_lib64)
+	dh_fixperms -p$(p_lib64)
+	dh_makeshlibs -p$(p_lib64) -V '$(p_lib64) (>= $(DEB_STDCXX_SOVERSION))' -n
+	sed s/$(cross_lib_arch)//g < debian/$(p_lib64)/DEBIAN/shlibs > debian/$(p_lib64)/DEBIAN/shlibs.fixed
+	mv debian/$(p_lib64)/DEBIAN/shlibs.fixed debian/$(p_lib64)/DEBIAN/shlibs
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lib64)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_lib64).substvars > debian/$(p_lib64).substvars.new
+	mv debian/$(p_lib64).substvars.new debian/$(p_lib64).substvars
+	dh_gencontrol -p$(p_lib64) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_gencontrol -p$(p_dbg64) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_lib64)
+	dh_md5sums -p$(p_lib64)
+	dh_builddeb -p$(p_lib64)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-lib32stdcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lib32)
+	dh_installdirs -p$(p_lib32) $(dirs_lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_lib32) $(files_lib32)
+
+	dh_installdirs -p$(p_dbg32) \
+		$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/debug $(d_dbg32)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/.
+
+	mkdir -p $(d_dbg32)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_lib32) --keep-debug
+	# The above line puts debugging information into some strange location
+	# that is hardcoded into dh_strip. Move it from there.
+	mkdir -p $(d_lib32)/usr/$(DEB_TARGET_GNU_TYPE)/lib32/debug
+	mv $(d_lib32)/usr/lib/debug/usr/$(DEB_TARGET_GNU_TYPE)/lib32/* $(d_lib32)/usr/$(DEB_TARGET_GNU_TYPE)/lib32/debug/
+	rm -rf $(d_lib32)/usr/lib32
+	# End workaround
+	find $(d_lib32)
+	tar -C $(d_lib32) -c -f - usr/$(DEB_TARGET_GNU_TYPE)/lib/debug | tar -v -C $(d_dbg32) -x -f -
+	rm -rf $(d_lib32)/usr/$(DEB_TARGET_GNU_TYPE)/lib/debug
+
+	dh_installdocs -p$(p_lib32)
+	echo "See /$(docdir)/$(p_base) for more information" \
+		> $(d_lib32)/$(docdir)/$(p_lib32)/README.Debian
+	dh_installchangelogs -p$(p_lib32)
+	debian/dh_doclink -p$(p_dbg32) $(p_lib32)
+
+	debian/dh_rmemptydirs -p$(p_lib32)
+	dh_compress -p$(p_lib32)
+	dh_fixperms -p$(p_lib32)
+
+	sed s/$(cross_lib_arch)//g < debian/$(p_lib32)/DEBIAN/shlibs > debian/$(p_lib32)/DEBIAN/shlibs.fixed
+	mv debian/$(p_lib32)/DEBIAN/shlibs.fixed debian/$(p_lib32)/DEBIAN/shlibs
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lib32)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_lib32).substvars > debian/$(p_lib32).substvars.new
+	mv debian/$(p_lib32).substvars.new debian/$(p_lib32).substvars
+	dh_gencontrol -p$(p_lib32) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_gencontrol -p$(p_dbg32) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_lib32)
+	dh_md5sums -p$(p_lib32)
+	dh_builddeb -p$(p_lib32)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+libcxxdev_deps = $(install_stamp)
+ifeq ($(with_libcxx),yes)
+  libcxxdev_deps += $(binary_stamp)-libstdcxx
+endif
+$(binary_stamp)-libstdcxx-dev: $(libcxxdev_deps) \
+    $(binary_stamp)-libstdcxx
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_dev) $(d_pic)
+	dh_installdirs -p$(p_dev) $(dirs_dev)
+	dh_installdirs -p$(p_pic) $(dirs_pic)
+	dh_installdirs -p$(p_dbg) $(dirs_dbg)
+
+	: # - correct libstdc++-v3 file locations
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libsupc++.a $(d)/$(gcc_lib_dir)/
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libstdc++.{a,so} $(d)/$(gcc_lib_dir)/
+	ln -sf ../../../../$(DEB_TARGET_GNU_TYPE)/lib/libstdc++.so.$(CXX_SONAME) $(d)/$(gcc_lib_dir)/libstdc++.so
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libstdc++_pic.a \
+		$(d)/$(gcc_lib_dir)/
+
+	rm -f $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/debug/libstdc++_pic.a
+	rm -f $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/debug/libstdc++_pic.a
+
+	: # remove precompiled headers
+	-find $(d) -type d -name '*.gch' | xargs rm -rf
+
+ifeq ($(biarch),yes)
+	mv $(d)/$(PF)/$(AUX_DEB_TARGET_GNU_TYPE)/lib64/lib*c++*.a $(d)/$(gcc_lib_dir)/$(biarchsubdir)/.
+	ln -sf ../../../../../lib64/libstdc++.so.$(CXX_SONAME) \
+		$(d)/$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.so
+endif
+ifeq ($(biarch32),yes)
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/lib*c++*.a $(d)/$(gcc_lib_dir)/$(biarchsubdir)/.
+	ln -sf ../../../../../lib64/libstdc++.so.$(CXX_SONAME) \
+		$(d)/$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.so
+endif
+
+	for i in $(d)/$(PF)/include/c++/$(GCC_VERSION)/*-linux; do \
+	  if [ -d $$i ]; then mv $$i $$i-gnu; fi; \
+	done
+
+	DH_COMPAT=2 dh_movefiles -p$(p_dev) $(files_dev)
+	DH_COMPAT=2 dh_movefiles -p$(p_pic) $(files_pic)
+	DH_COMPAT=2 dh_movefiles -p$(p_dbg) $(files_dbg)
+
+	dh_link -p$(p_dev) \
+		/$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/libstdc++.so \
+		/$(cxx_inc_dir) /$(PF)/$(DEB_TARGET_GNU_TYPE)/include/c++/$(BASE_VERSION)
+
+ifeq ($(biarch),yes)
+	dh_link -p$(p_dev) \
+		/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.so
+endif
+ifeq ($(biarch32),yes)
+	dh_link -p$(p_dev) \
+		/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.so
+endif
+
+	debian/dh_doclink -p$(p_dev) $(p_lib)
+	debian/dh_doclink -p$(p_pic) $(p_lib)
+	debian/dh_doclink -p$(p_dbg) $(p_lib)
+	cp -p $(srcdir)/libstdc++-v3/config/linker-map.gnu \
+		$(d_pic)/$(gcc_lib_dir)/libstdc++_pic.map
+
+ifeq ($(with_cxxdev),yes)
+	debian/dh_rmemptydirs -p$(p_dev)
+	debian/dh_rmemptydirs -p$(p_pic)
+	debian/dh_rmemptydirs -p$(p_dbg)
+endif
+
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_dev) --dbg-package=$(p_lib)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_pic)
+	dh_compress -p$(p_dev) -p$(p_pic) -p$(p_dbg) -X.txt
+	dh_fixperms -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_gencontrol -p$(p_dev) -p$(p_pic) -p$(p_dbg) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_md5sums -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_builddeb -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-source.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-source.mk
@@ -0,0 +1,32 @@
+indep_binaries := $(indep_binaries) gcc-source
+
+p_source = gcc$(pkg_ver)-source
+d_source= debian/$(p_source)
+
+$(binary_stamp)-gcc-source:
+	dh_testdir
+	dh_testroot
+
+	dh_install -p$(p_source) $(gcc_tarball) usr/src/gcc$(pkg_ver)
+	dh_install -p$(p_source) $(gcj_tarball) usr/src/gcc$(pkg_ver)
+	dh_install -p$(p_source) debian/patches usr/src/gcc$(pkg_ver)
+	chmod 755 debian/$(p_source)/usr/src/gcc$(pkg_ver)/patches/*
+	rm -rf debian/$(p_source)/usr/src/gcc$(pkg_ver)/patches/.svn
+	dh_install -p$(p_source) \
+	    debian/rules.source \
+		usr/src/gcc$(pkg_ver)
+	dh_install -p$(p_source) \
+	    debian/rules.defs debian/rules.patch debian/rules.unpack \
+	    debian/dummy.texi debian/gcc-dummy.texi debian/multiarch.inc \
+	    debian/porting.* \
+		usr/src/gcc$(pkg_ver)/debian
+
+	debian/dh_doclink -p$(p_source) $(p_base)
+
+	dh_fixperms -p$(p_source)
+	dh_gencontrol -p$(p_source) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_source)
+	dh_md5sums -p$(p_source)
+	dh_builddeb -p$(p_source)
+
+	touch $@
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libgcc-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libgcc-cross.mk
@@ -0,0 +1,158 @@
+ifeq ($(with_libgcc),yes)
+  arch_binaries	:= $(arch_binaries) libgcc
+endif
+ifeq ($(with_lib64gcc),yes)
+  arch_binaries	:= $(arch_binaries) lib64gcc
+endif
+ifeq ($(biarch32),yes)
+  arch_binaries	:= $(arch_binaries) lib32gcc
+endif
+
+p_lgcc		= libgcc$(GCC_SONAME)$(cross_lib_arch)
+d_lgcc		= debian/$(p_lgcc)
+
+p_l64gcc	= lib32gcc$(GCC_SONAME)$(cross_lib_arch)
+d_l64gcc	= debian/$(p_l32gcc)
+
+p_l64gcc	= lib64gcc$(GCC_SONAME)$(cross_lib_arch)
+d_l64gcc	= debian/$(p_l64gcc)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lgcc)
+	dh_installdirs -p$(p_lgcc) \
+		$(docdir)/$(p_lgcc) \
+		$(PF)/$(DEB_TARGET_GNU_TYPE)/lib
+
+ifeq ($(with_shared_libgcc),yes)
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libgcc_s.so.$(GCC_SONAME) $(d_lgcc)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/.
+endif
+
+	dh_installdocs -p$(p_lgcc)
+	dh_installchangelogs -p$(p_lgcc)
+
+	debian/dh_rmemptydirs -p$(p_lgcc)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_lgcc)
+	dh_compress -p$(p_lgcc)
+	dh_fixperms -p$(p_lgcc)
+ifeq ($(with_shared_libgcc),yes)
+	dh_makeshlibs -p$(p_lgcc) -V '$(p_lgcc) (>= $(DEB_LIBGCC_SOVERSION))' -n
+	sed s/$(cross_lib_arch)//g < debian/$(p_lgcc)/DEBIAN/shlibs > debian/$(p_lgcc)/DEBIAN/shlibs.fixed
+	mv debian/$(p_lgcc)/DEBIAN/shlibs.fixed debian/$(p_lgcc)/DEBIAN/shlibs
+	cat debian/$(p_lgcc)/DEBIAN/shlibs >> debian/shlibs.local
+endif
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lgcc)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_lgcc).substvars > debian/$(p_lgcc).substvars.new
+	mv debian/$(p_lgcc).substvars.new debian/$(p_lgcc).substvars
+	dh_gencontrol -p$(p_lgcc) \
+		-- -v$(DEB_LIBGCC_VERSION) $(common_substvars)
+	b=libgcc; v=$(GCC_SONAME); \
+	for ext in preinst postinst prerm postrm; do \
+	  if [ -f debian/$$b$$t.$$ext ]; then \
+	    cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+	  fi; \
+	done
+	dh_installdeb -p$(p_lgcc)
+	dh_md5sums -p$(p_lgcc)
+	dh_builddeb -p$(p_lgcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64gcc)
+	dh_installdirs -p$(p_l64gcc) \
+		$(docdir)/$(p_l64gcc) \
+		$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64
+
+ifeq ($(with_shared_libgcc),yes)
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/libgcc_s.so.$(GCC_SONAME) $(d_l64gcc)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/.
+endif
+
+	dh_installdocs -p$(p_l64gcc)
+	dh_installchangelogs -p$(p_l64gcc)
+
+	debian/dh_rmemptydirs -p$(p_l64gcc)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_l64gcc)
+	dh_compress -p$(p_l64gcc)
+	dh_fixperms -p$(p_l64gcc)
+ifeq ($(with_shared_libgcc),yes)
+	dh_makeshlibs -p$(p_l64gcc) \
+		-V '$(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))' -n
+	sed s/$(cross_lib_arch)//g < debian/$(p_l64gcc)/DEBIAN/shlibs > debian/$(p_l64gcc)/DEBIAN/shlibs.fixed
+	mv debian/$(p_l64gcc)/DEBIAN/shlibs.fixed debian/$(p_l64gcc)/DEBIAN/shlibs
+	cat debian/$(p_l64gcc)/DEBIAN/shlibs >> debian/shlibs.local
+endif
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_l64gcc)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_l64gcc).substvars > debian/$(p_l64gcc).substvars.new
+	mv debian/$(p_l64gcc).substvars.new debian/$(p_l64gcc).substvars
+	dh_gencontrol -p$(p_l64gcc) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	b=libgcc; v=$(GCC_SONAME); \
+	for ext in preinst postinst prerm postrm; do \
+	  if [ -f debian/$$b$$t.$$ext ]; then \
+	    cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+	  fi; \
+	done
+	dh_installdeb -p$(p_l64gcc)
+	dh_md5sums -p$(p_l64gcc)
+	dh_builddeb -p$(p_l64gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-lib32gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32gcc)
+	dh_installdirs -p$(p_l32gcc) \
+		$(docdir)/$(p_l32gcc) \
+		$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32
+
+ifeq ($(with_shared_libgcc),yes)
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/libgcc_s.so.$(GCC_SONAME) $(d_l32gcc)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/.
+endif
+
+	dh_installdocs -p$(p_l32gcc)
+	dh_installchangelogs -p$(p_l32gcc)
+
+	debian/dh_rmemptydirs -p$(p_l32gcc)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_l32gcc)
+	dh_compress -p$(p_l32gcc)
+	dh_fixperms -p$(p_l32gcc)
+ifeq ($(with_shared_libgcc),yes)
+	dh_makeshlibs -p$(p_l32gcc) \
+		-V '$(p_l32gcc) (>= $(DEB_LIBGCC_SOVERSION))' -n
+	sed s/$(cross_lib_arch)//g < debian/$(p_l32gcc)/DEBIAN/shlibs > debian/$(p_l32gcc)/DEBIAN/shlibs.fixed
+	mv debian/$(p_l32gcc)/DEBIAN/shlibs.fixed debian/$(p_l32gcc)/DEBIAN/shlibs
+	cat debian/$(p_l32gcc)/DEBIAN/shlibs >> debian/shlibs.local
+endif
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_l32gcc)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_l32gcc).substvars > debian/$(p_l32gcc).substvars.new
+	mv debian/$(p_l32gcc).substvars.new debian/$(p_l32gcc).substvars
+	dh_gencontrol -p$(p_l32gcc) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	b=libgcc; v=$(GCC_SONAME); \
+	for ext in preinst postinst prerm postrm; do \
+	  if [ -f debian/$$b$$t.$$ext ]; then \
+	    cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+	  fi; \
+	done
+	dh_installdeb -p$(p_l32gcc)
+	dh_md5sums -p$(p_l32gcc)
+	dh_builddeb -p$(p_l32gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-objc.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-objc.mk
@@ -0,0 +1,97 @@
+ifneq (,$(filter yes, $(biarch) $(biarch32)))
+  arch_binaries  := $(arch_binaries) objc-multi
+endif
+arch_binaries := $(arch_binaries) objc
+
+p_objc	= gobjc$(pkg_ver)
+d_objc	= debian/$(p_objc)
+
+p_objc_m= gobjc$(pkg_ver)-multilib
+d_objc_m= debian/$(p_objc_m)
+
+dirs_objc = \
+	$(docdir)/$(p_base)/ObjC \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/include
+
+files_objc = \
+	$(gcc_lexec_dir)/cc1obj \
+	$(gcc_lib_dir)/include/objc \
+	$(gcc_lib_dir)/libobjc*.a
+
+$(binary_stamp)-objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	mv $(d)/$(PF)/$(libdir)/libobjc*a $(d)/$(gcc_lib_dir)/
+	rm -f $(d)/$(PF)/$(libdir)/libobjc*.la
+
+	rm -rf $(d_objc)
+	dh_installdirs -p$(p_objc) $(dirs_objc)
+	DH_COMPAT=2 dh_movefiles -p$(p_objc) $(files_objc)
+
+	dh_link -p$(p_objc) \
+	  /$(PF)/$(libdir)/libobjc.so.$(OBJC_SONAME) /$(gcc_lib_dir)/libobjc.so
+ifeq ($(with_objc_gc),yes)
+	dh_link -p$(p_objc) \
+	  /$(PF)/$(libdir)/libobjc_gc.so.$(OBJC_SONAME) \
+	  /$(gcc_lib_dir)/libobjc_gc.so
+endif
+
+	debian/dh_doclink -p$(p_objc) $(p_base)
+	cp -p $(srcdir)/libobjc/{README*,THREADS*} \
+		$(d_objc)/$(docdir)/$(p_base)/ObjC/.
+
+	debian/dh_rmemptydirs -p$(p_objc)
+
+	dh_strip -p$(p_objc)
+	dh_compress -p$(p_objc)
+
+	dh_fixperms -p$(p_objc)
+	dh_shlibdeps -p$(p_objc)
+	dh_gencontrol -p$(p_objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objc)
+	dh_md5sums -p$(p_objc)
+	dh_builddeb -p$(p_objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-objc-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objc_m)
+	dh_installdirs -p$(p_objc_m) \
+		$(docdir) \
+		$(gcc_lib_dir)/$(biarchsubdir)
+
+ifeq ($(biarch),yes)
+	rm -f $(d)/$(PF)/lib64/libobjc*.{la,so}
+	mkdir -p $(d_objc_m)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(PF)/lib64/libobjc*.a $(d_objc_m)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_objc_m) \
+	  /$(PF)/lib64/libobjc.so.$(OBJC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libobjc.so
+endif
+ifeq ($(biarch32),yes)
+	rm -f $(d)/$(lib32)/libobjc*.{la,so}
+	mkdir -p $(d_objc_m)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(lib32)/libobjc*.a $(d_objc_m)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_objc_m) \
+	  /$(lib32)/libobjc.so.$(OBJC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libobjc.so
+endif
+
+	debian/dh_doclink -p$(p_objc_m) $(p_base)
+
+	dh_strip -p$(p_objc_m)
+	dh_compress -p$(p_objc_m)
+
+	dh_fixperms -p$(p_objc_m)
+	dh_shlibdeps -p$(p_objc_m)
+	dh_gencontrol -p$(p_objc_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objc_m)
+	dh_md5sums -p$(p_objc_m)
+	dh_builddeb -p$(p_objc_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-fastjar.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-fastjar.mk
@@ -0,0 +1,55 @@
+arch_binaries  := $(arch_binaries) fastjar
+
+p_fjar	= fastjar
+d_fjar	= debian/$(p_fjar)
+
+dirs_fjar = \
+	$(docdir)/$(p_fjar) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(PF)/share/info
+
+files_fjar = \
+	$(PF)/bin/{fastjar,grepjar}* \
+	$(PF)/share/man/man1/{fastjar,grepjar}*.1 \
+	$(PF)/share/info/fastjar.info
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fastjar: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_fjar)
+	dh_installdirs -p$(p_fjar)  $(dirs_fjar)
+
+#ifeq ($(versioned_packages),yes)
+#	: # rename versioned files back to unversioned ones.
+#	for i in fastjar grepjar; do \
+#	  mv $(d)/$(PF)/bin/$$i$(pkg_ver) $(d)/$(PF)/bin/$$i; \
+#	  mv $(d)/$(PF)/share/man/man1/$$i$(pkg_ver).1 \
+#		$(d)/$(PF)/share/man/man1/$$i.1; \
+#	done
+#endif
+	for i in fastjar grepjar; do \
+	  ln -s $$i$(pkg_ver) $(d)/$(PF)/bin/$$i; \
+	  ln -s $$i$(pkg_ver).1 $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+
+	DH_COMPAT=2 dh_movefiles -p$(p_fjar)  $(files_fjar)
+
+	dh_installdocs -p$(p_fjar) $(srcdir)/fastjar/{CHANGES,NEWS,README}
+	dh_installchangelogs -p$(p_fjar) $(srcdir)/fastjar/ChangeLog
+
+	debian/dh_rmemptydirs -p$(p_fjar)
+
+	dh_strip -p$(p_fjar)
+	dh_compress -p$(p_fjar)
+	dh_fixperms -p$(p_fjar)
+	dh_shlibdeps -p$(p_fjar)
+	dh_gencontrol -p$(p_fjar) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_fjar)
+	dh_md5sums -p$(p_fjar)
+	dh_builddeb -p$(p_fjar)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-objc-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-objc-cross.mk
@@ -0,0 +1,60 @@
+arch_binaries := $(arch_binaries) objc
+
+p_objc	= gobjc$(pkg_ver)$(cross_bin_arch)
+d_objc	= debian/$(p_objc)
+
+dirs_objc = \
+	$(docdir) \
+	$(gcc_lib_dir)
+
+files_objc = \
+	$(gcc_lib_dir)/cc1obj \
+	$(gcc_lib_dir)/include/objc \
+	$(gcc_lib_dir)/{libobjc*.a,libobjc*.la}
+
+$(binary_stamp)-objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libobjc*.{a,la} $(d)/$(gcc_lib_dir)/
+
+	rm -rf $(d_objc)
+	dh_installdirs -p$(p_objc) $(dirs_objc)
+	DH_COMPAT=2 dh_movefiles -p$(p_objc) $(files_objc)
+
+ifeq ($(with_lib64objc),yes)
+	mkdir -p $(d_objc)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/libobjc*.{a,la} $(d_objc)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_objc) \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/libobjc.so.$(OBJC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libobjc.so
+endif
+ifeq ($(with_lib32objc),yes)
+	mkdir -p $(d_objc)/$(gcc_lib_dir)/$(biarchsubdir)
+	mv $(d)/$(DEB_TARGET_GNU_TYPE)/$(lib32)/libobjc*.{a,la} $(d_objc)/$(gcc_lib_dir)/$(biarchsubdir)/
+	dh_link -p$(p_objc) \
+	  /$(lib32)/$(DEB_TARGET_GNU_TYPE)/libobjc.so.$(OBJC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libobjc.so
+endif
+
+	dh_link -p$(p_objc) \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libobjc.so.$(OBJC_SONAME) /$(gcc_lib_dir)/libobjc.so
+ifeq ($(with_objc_gc),yes)
+	dh_link -p$(p_objc) \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libobjc_gc.so.$(OBJC_SONAME) \
+	  /$(gcc_lib_dir)/libobjc_gc.so
+endif
+
+	debian/dh_doclink -p$(p_objc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_objc)
+
+	dh_strip -p$(p_objc)
+	dh_compress -p$(p_objc)
+
+	dh_fixperms -p$(p_objc)
+	dh_shlibdeps -p$(p_objc)
+	dh_gencontrol -p$(p_objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objc)
+	dh_md5sums -p$(p_objc)
+	dh_builddeb -p$(p_objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-nof-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-nof-cross.mk
@@ -0,0 +1,46 @@
+arch_binaries  := $(arch_binaries) nof
+
+p_nof  = gcc$(pkg_arch)-nof
+d_nof  = debian/$(p_nof)
+
+dirs_nof = \
+	$(docdir) \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/nof
+ifeq ($(with_cdev),yes)
+  dirs_nof += \
+	$(gcc_lib_dir)/nof
+endif
+
+ifeq ($(with_cdev),yes)
+  files_nof = \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libgcc_s_nof.so.$(GCC_SONAME) \
+	$(gcc_lib_dir)/libgcc_s_nof.so \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/nof \
+	$(gcc_lib_dir)/nof
+else
+  files_nof = \
+	lib/libgcc_s_nof.so.$(GCC_SONAME)
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-nof: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	ln -sf /$(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libgcc_s_nof.so.$(GCC_SONAME) \
+		$(d)/$(gcc_lib_dir)/libgcc_s_nof.so
+
+	rm -rf $(d_nof)
+	dh_installdirs -p$(p_nof) $(dirs_nof)
+	DH_COMPAT=2 dh_movefiles -p$(p_nof) $(files_nof)
+	debian/dh_doclink -p$(p_nof) $(p_base)
+	dh_strip -p$(p_nof)
+	dh_compress -p$(p_nof)
+	dh_fixperms -p$(p_nof)
+	dh_gencontrol -p$(p_nof) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_nof)
+	dh_md5sums -p$(p_nof)
+	dh_builddeb -p$(p_nof)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-cpp-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-cpp-cross.mk
@@ -0,0 +1,40 @@
+arch_binaries  := $(arch_binaries) cpp
+
+dirs_cpp = \
+	$(docdir) \
+	$(PF)/share/man/man1 \
+	$(PF)/bin \
+	$(gcc_lexec_dir)
+
+files_cpp = \
+	$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver) \
+	$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver).1 \
+	$(gcc_lexec_dir)/cc1
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cpp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cpp)
+	dh_installdirs -p$(p_cpp) $(dirs_cpp)
+	DH_COMPAT=2 dh_movefiles -p$(p_cpp) $(files_cpp)
+
+	debian/dh_doclink -p$(p_cpp) $(p_base)
+	debian/dh_rmemptydirs -p$(p_cpp)
+
+	dh_strip -p$(p_cpp)
+	dh_compress -p$(p_cpp)
+	dh_fixperms -p$(p_cpp)
+	dh_shlibdeps -p$(p_cpp)
+	dh_gencontrol -p$(p_cpp) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cpp)
+	sed 's/cross-/$(TP)/g;s/-ver/$(pkg_ver)/g;s/gcc/cpp/g' < debian/gcc-cross.postinst > debian/$(p_cpp)/DEBIAN/postinst
+	sed 's/cross-/$(TP)/g;s/-ver/$(pkg_ver)/g;s/gcc/cpp/g' < debian/gcc-cross.prerm > debian/$(p_cpp)/DEBIAN/prerm
+	chmod 755 debian/$(p_cpp)/DEBIAN/{postinst,prerm}
+	dh_md5sums -p$(p_cpp)
+	dh_builddeb -p$(p_cpp)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-gcc-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-gcc-cross.mk
@@ -0,0 +1,109 @@
+arch_binaries  := $(arch_binaries) gcc
+
+# gcc must be moved after g77 and g++
+# not all files $(PF)/include/*.h are part of gcc,
+# but it becomes difficult to name all these files ...
+
+dirs_gcc = \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/include \
+	$(PF)/share/man/man1 $(libdir)
+
+files_gcc = \
+	$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver) \
+	$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1 \
+	$(gcc_lexec_dir)/collect2 \
+	$(gcc_lib_dir)/{libgcc*,*.o} \
+	$(gcc_lib_dir)/include/README \
+	$(gcc_lib_dir)/include/{float,iso646,limits,std*,syslimits,unwind,varargs}.h \
+	$(shell for d in asm bits gnu linux; do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$d \
+		    && echo $(gcc_lib_dir)/include/$$d; \
+		done) \
+	$(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+	       && echo $(gcc_lib_dir)/SYSCALLS.c.X) \
+	$(shell for h in {,e,p,x}mmintrin.h mm3dnow.h mm_malloc.h; do \
+	         test -e $(d)/$(gcc_lib_dir)/include/$$h \
+	           && echo $(gcc_lib_dir)/include/$$h; \
+	       done) \
+
+
+ifeq ($(biarch),yes)
+    files_gcc += $(gcc_lib_dir)/$(biarchsubdir)/{libgcc*,*.o}
+endif
+ifeq ($(biarch32),yes)
+    files_gcc += $(gcc_lib_dir)/$(biarchsubdir)/{libgcc*,*.o}
+endif
+
+ifeq ($(DEB_TARGET_ARCH),ia64)
+    files_gcc += $(gcc_lib_dir)/include/ia64intrin.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),m68k)
+    files_gcc += $(gcc_lib_dir)/include/math-68881.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64))
+    files_gcc += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h}
+endif
+
+usr_doc_files = debian/README.Bugs \
+	$(shell test -f $(srcdir)/FAQ && echo $(srcdir)/FAQ)
+ifeq ($(with_check),yes)
+  usr_doc_files += test-summary
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gcc)
+	dh_installdirs -p$(p_gcc) $(dirs_gcc)
+
+	rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
+	ln -sf /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
+ifeq ($(biarch),yes)
+	rm -f $(d)/$(PF)/$(lib64)/libgcc_s.so
+	dh_link -p$(p_gcc) \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(lib64)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/libgcc_s_64.so \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(lib64)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/$(biarchsubdir)/libgcc_s.so
+endif
+ifeq ($(biarch32),yes)
+	mkdir -p $(d_gcc)/$(gcc_lib_dir)
+	mv $(d)/$(gcc_lib_dir)/$(biarchsubdir) $(d_gcc)/$(gcc_lib_dir)/
+	dh_link -p$(p_gcc) \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/libgcc_s.so.$(GCC_SONAME)  /$(gcc_lib_dir)/libgcc_s_32.so \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/libgcc_s.so.$(GCC_SONAME)  /$(gcc_lib_dir)/$(biarchsubdir)/libgcc_s_32.so \
+	  /$(PF)/$(DEB_TARGET_GNU_TYPE)/lib32/libgcc_s.so.$(GCC_SONAME)  /$(gcc_lib_dir)/$(biarchsubdir)/libgcc_s.so
+endif
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gcc) $(files_gcc)
+
+#	dh_installdebconf
+	debian/dh_doclink -p$(p_gcc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_gcc)
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_gcc)
+	dh_compress -p$(p_gcc)
+	dh_fixperms -p$(p_gcc)
+	dh_shlibdeps -p$(p_gcc)
+	dh_gencontrol -p$(p_gcc) -- -v$(DEB_VERSION) $(common_substvars)
+	sed 's/cross-/$(TP)/g;s/-ver/$(pkg_ver)/g' < debian/gcc-cross.postinst > debian/$(p_gcc)/DEBIAN/postinst
+	sed 's/cross-/$(TP)/g;s/-ver/$(pkg_ver)/g' < debian/gcc-cross.prerm > debian/$(p_gcc)/DEBIAN/prerm
+	chmod 755 debian/$(p_gcc)/DEBIAN/{postinst,prerm}
+	dh_installdeb -p$(p_gcc)
+	dh_md5sums -p$(p_gcc)
+	dh_builddeb -p$(p_gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+	: # remove empty directories, when all components are in place
+	for d in `find $(d) -depth -type d -empty 2> /dev/null`; do \
+	    while rmdir $$d 2> /dev/null; do d=`dirname $$d`; done; \
+	done
+
+	@echo "Listing installed files not included in any package:"
+	-find $(d) ! -type d
+
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-d.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-d.mk
@@ -0,0 +1,112 @@
+arch_binaries := $(arch_binaries) gdc
+
+ifeq ($(with_libphobos),yes)
+  arch_binaries += libphobos
+endif
+
+p_gdc		= gdc$(pkg_ver)
+d_gdc		= debian/$(p_gdc)
+
+# no shared lib for now
+p_libphobos	= libphobos$(libphobos_version)$(pkg_ver)-dev
+d_libphobos	= debian/$(p_libphobos)
+
+gdc_include_dir := $(PF)/include/d$(libphobos_version)
+
+dirs_gdc = \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(gdc_include_dir)/$(BASE_VERSION) \
+	$(gcc_lib_dir)
+
+files_gdc = \
+	$(PF)/bin/gdc$(pkg_ver) \
+	$(PF)/bin/gdmd$(pkg_ver) \
+	$(PF)/share/man/man1/gdc$(pkg_ver).1 \
+	$(PF)/share/man/man1/gdmd$(pkg_ver).1 \
+	$(gcc_lib_dir)/cc1d
+
+
+dirs_libphobos = \
+	$(PF)/lib \
+	$(gdc_include_dir)/$(BASE_VERSION) \
+	$(gcc_lib_dir)
+
+files_libphobos = \
+	$(PF)/lib/libgphobos$(libphobos_version).a \
+	$(gdc_include_dir)/$(BASE_VERSION)
+
+
+# include path
+links_gdc = \
+	/$(gdc_include_dir)/$(BASE_VERSION) \
+		/$(gdc_include_dir)/$(GCC_VERSION)
+
+
+$(binary_stamp)-gdc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gdc)
+	dh_installdirs -p$(p_gdc) $(dirs_gdc)
+
+	dh_installdocs -p$(p_gdc) \
+		src/gcc/d/{README,GDC.html,History}
+	dh_installchangelogs -p$(p_gdc) src/gcc/d/ChangeLog
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gdc) -X/zlib/ $(files_gdc)
+
+	# Always needed by gdc.
+	cp $(srcdir)/gcc/d/phobos$(libphobos_version)/object.d \
+		$(d_gdc)/$(gdc_include_dir)/$(BASE_VERSION)/
+
+	dh_link -p$(p_gdc) $(links_gdc)
+
+	dh_strip -p$(p_gdc)
+	dh_compress -p$(p_gdc)
+	dh_fixperms -p$(p_gdc)
+	dh_shlibdeps -p$(p_gdc)
+	dh_gencontrol -p$(p_gdc) --  -v$(DEB_GDC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gdc)
+	dh_md5sums -p$(p_gdc)
+	dh_builddeb -p$(p_gdc)
+
+	find $(d_gdc) -type d -empty -delete
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-libphobos: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_libphobos)
+	dh_installdirs -p$(p_libphobos) $(dirs_libphobos)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_libphobos) -X/zlib/ $(files_libphobos)
+
+        # better to have it there, avoid conflicts
+	mv $(d_libphobos)/$(PF)/lib/libgphobos$(libphobos_version).a \
+		$(d_libphobos)/$(gcc_lib_dir)
+
+	# included in gdc package
+	rm -f $(d_libphobos)/$(gdc_include_dir)/$(BASE_VERSION)/object.d
+
+	# no need to have it twice
+	dh_link -p$(p_libphobos) \
+		/$(PF)/share/doc/$(p_gdc) /$(PF)/share/doc/$(p_libphobos)
+
+	dh_strip -p$(p_libphobos)
+	dh_compress -p$(p_libphobos)
+	dh_fixperms -p$(p_libphobos)
+	dh_shlibdeps -p$(p_libphobos)
+	dh_gencontrol -p$(p_libphobos) --  -v$(DEB_GDC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_libphobos)
+	dh_md5sums -p$(p_libphobos)
+	dh_builddeb -p$(p_libphobos)
+
+	find $(d_libphobos) -type d -empty -delete
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-objcxx-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-objcxx-cross.mk
@@ -0,0 +1,35 @@
+arch_binaries := $(arch_binaries) objcxx
+
+p_objcx	= gobjc++$(pkg_ver)$(cross_bin_arch)
+d_objcx	= debian/$(p_objcx)
+
+dirs_objcx = \
+	$(docdir) \
+	$(gcc_lib_dir)
+
+files_objcx = \
+	$(gcc_lib_dir)/cc1objplus
+
+$(binary_stamp)-objcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objcx)
+	dh_installdirs -p$(p_objcx) $(dirs_objcx)
+	DH_COMPAT=2 dh_movefiles -p$(p_objcx) $(files_objcx)
+
+	debian/dh_doclink -p$(p_objcx) $(p_base)
+	debian/dh_rmemptydirs -p$(p_objcx)
+
+	dh_strip -p$(p_objcx)
+	dh_compress -p$(p_objcx)
+
+	dh_fixperms -p$(p_objcx)
+	dh_shlibdeps -p$(p_objcx)
+	dh_gencontrol -p$(p_objcx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objcx)
+	dh_md5sums -p$(p_objcx)
+	dh_builddeb -p$(p_objcx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libobjc-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libobjc-cross.mk
@@ -0,0 +1,117 @@
+ifeq ($(with_objcdev),yes)
+  arch_binaries := $(arch_binaries) libobjc
+endif
+ifeq ($(with_lib64objc),yes)
+  arch_binaries  := $(arch_binaries) lib64objc
+endif
+ifeq ($(with_lib32objc),yes)
+  arch_binaries	:= $(arch_binaries) lib32objc
+endif
+
+p_lobjc		= libobjc$(OBJC_SONAME)$(cross_lib_arch)
+p_l32objc	= lib32objc$(OBJC_SONAME)$(cross_lib_arch)
+p_l64objc	= lib64objc$(OBJC_SONAME)$(cross_lib_arch)
+
+d_lobjc		= debian/$(p_lobjc)
+d_l32objc	= debian/$(p_l32objc)
+d_l64objc	= debian/$(p_l64objc)
+
+dirs_lobjc = \
+	$(docdir) \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)
+files_lobjc = \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libobjc.so.*
+ifeq ($(with_objc_gc),yes)
+  files_lobjc += \
+	$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libobjc_gc.so.*
+endif
+
+
+$(binary_stamp)-libobjc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lobjc)
+	dh_installdirs -p$(p_lobjc) $(dirs_lobjc)
+#	mv $(d)/$(gcc_lib_dir)/libobjc.so.* $(d)/$(PF)/$(libdir)/.
+#ifeq ($(with_objc_gc),yes)
+#	mv $(d)/$(gcc_lib_dir)/libobjc_gc.so.* $(d)/$(PF)/$(libdir)/.
+#endif
+	DH_COMPAT=2 dh_movefiles -p$(p_lobjc) $(files_lobjc)
+
+	dh_installdocs -p$(p_lobjc)
+	echo "See /$(docdir)/$(p_base) for more information" \
+		> $(d_lobjc)/$(docdir)/$(p_lobjc)/README.Debian
+	dh_installchangelogs -p$(p_lobjc)
+
+	debian/dh_rmemptydirs -p$(p_lobjc)
+
+	PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_lobjc)
+	dh_compress -p$(p_lobjc)
+
+	dh_fixperms -p$(p_lobjc)
+	dh_makeshlibs -p$(p_lobjc) -V '$(p_lobjc) (>= $(DEB_SOEVERSION))' -n
+	sed s/$(cross_lib_arch)//g < debian/$(p_lobjc)/DEBIAN/shlibs > debian/$(p_lobjc)/DEBIAN/shlibs.fixed
+	mv debian/$(p_lobjc)/DEBIAN/shlibs.fixed debian/$(p_lobjc)/DEBIAN/shlibs
+	ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lobjc)
+	sed 's/\(lib[^ ]*\) /\1$(cross_lib_arch) /g' < debian/$(p_lobjc).substvars > debian/$(p_lobjc).substvars.new
+	mv debian/$(p_lobjc).substvars.new debian/$(p_lobjc).substvars
+	dh_gencontrol -p$(p_lobjc) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_lobjc)
+	dh_md5sums -p$(p_lobjc)
+	dh_builddeb -p$(p_lobjc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64objc)
+	dh_installdirs -p$(p_l64objc) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_l64objc) \
+		$(PF)/lib64/libobjc.so.*
+
+	debian/dh_doclink -p$(p_l64objc) $(p_base)
+
+	dh_strip -p$(p_l64objc)
+	dh_compress -p$(p_l64objc)
+	dh_fixperms -p$(p_l64objc)
+	dh_makeshlibs -p$(p_l64objc) -V '$(p_l64objc) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l64objc)
+	dh_gencontrol -p$(p_l64objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l64objc)
+	dh_md5sums -p$(p_l64objc)
+	dh_builddeb -p$(p_l64objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32objc)
+	dh_installdirs -p$(p_l32objc) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_l32objc) \
+		$(lib32)/libobjc.so.*
+
+	debian/dh_doclink -p$(p_l32objc) $(p_base)
+
+	dh_strip -p$(p_l32objc)
+	dh_compress -p$(p_l32objc)
+	dh_fixperms -p$(p_l32objc)
+	dh_makeshlibs -p$(p_l32objc) -V '$(p_l32objc) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l32objc)
+	dh_gencontrol -p$(p_l32objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l32objc)
+	dh_md5sums -p$(p_l32objc)
+	dh_builddeb -p$(p_l32objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libssp.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libssp.mk
@@ -0,0 +1,121 @@
+arch_binaries  := $(arch_binaries) libssp
+ifeq ($(with_lib64ssp),yes)
+  arch_binaries  := $(arch_binaries) lib64ssp
+endif
+ifeq ($(with_lib32ssp),yes)
+  arch_binaries	:= $(arch_binaries) lib32ssp
+endif
+
+p_ssp	= libssp$(SSP_SONAME)
+p_ssp32	= lib32ssp$(SSP_SONAME)
+p_ssp64	= lib64ssp$(SSP_SONAME)
+p_sspd	= libssp$(SSP_SONAME)-dev
+
+d_ssp	= debian/$(p_ssp)
+d_ssp32	= debian/$(p_ssp32)
+d_ssp64	= debian/$(p_ssp64)
+d_sspd	= debian/$(p_sspd)
+
+dirs_ssp = \
+	$(docdir)/$(p_base) \
+	$(PF)/$(libdir)
+files_ssp = \
+	$(PF)/$(libdir)/libssp.so.*
+
+dirs_sspd = \
+	$(docdir) \
+	$(PF)/include \
+	$(PF)/$(libdir)
+files_sspd = \
+	$(gcc_lib_dir)/include/ssp \
+	$(PF)/$(libdir)/libssp.{a,so,la} \
+	$(PF)/$(libdir)/libssp_nonshared.{a,la}
+
+ifeq ($(with_lib32ssp),yes)
+	dirs_sspd  += $(lib32)
+	files_sspd += $(lib32)/libssp.{a,la,so}
+	files_sspd += $(lib32)/libssp_nonshared.{a,la}
+endif
+ifeq ($(with_lib64ssp),yes)
+	dirs_sspd  += $(PF)/lib64
+	files_sspd += $(PF)/lib64/libssp.{a,la,so}
+	files_sspd += $(PF)/lib64/libssp_nonshared.{a,la}
+endif
+
+$(binary_stamp)-libssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ssp)
+	dh_installdirs -p$(p_ssp)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_ssp) $(files_ssp)
+	debian/dh_doclink -p$(p_ssp) $(p_base)
+
+	debian/dh_rmemptydirs -p$(p_ssp)
+
+	dh_strip -p$(p_ssp)
+	dh_compress -p$(p_ssp)
+	dh_fixperms -p$(p_ssp)
+	dh_makeshlibs -p$(p_ssp) -V '$(p_ssp) (>= $(DEB_SOVERSION))'
+	dh_shlibdeps -p$(p_ssp)
+	dh_gencontrol -p$(p_ssp) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ssp)
+	dh_md5sums -p$(p_ssp)
+	dh_builddeb -p$(p_ssp)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64ssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ssp64)
+	dh_installdirs -p$(p_ssp64) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_ssp64) \
+		$(PF)/lib64/libssp.so.*
+
+	debian/dh_doclink -p$(p_ssp64) $(p_base)
+
+	dh_strip -p$(p_ssp64)
+	dh_compress -p$(p_ssp64)
+	dh_fixperms -p$(p_ssp64)
+	dh_makeshlibs -p$(p_ssp64) -V '$(p_ssp64) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_ssp64)
+	dh_gencontrol -p$(p_ssp64) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ssp64)
+	dh_md5sums -p$(p_ssp64)
+	dh_builddeb -p$(p_ssp64)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32ssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ssp32)
+	dh_installdirs -p$(p_ssp32) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_ssp32) \
+		$(lib32)/libssp.so.*
+
+	debian/dh_doclink -p$(p_ssp32) $(p_base)
+
+	dh_strip -p$(p_ssp32)
+	dh_compress -p$(p_ssp32)
+	dh_fixperms -p$(p_ssp32)
+	dh_makeshlibs -p$(p_ssp32) -V '$(p_ssp32) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_ssp32)
+	dh_gencontrol -p$(p_ssp32) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ssp32)
+	dh_md5sums -p$(p_ssp32)
+	dh_builddeb -p$(p_ssp32)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-cxx-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-cxx-cross.mk
@@ -0,0 +1,42 @@
+arch_binaries  := $(arch_binaries) cxx
+
+dirs_cxx = \
+	$(docdir) \
+	$(PF)/bin \
+	$(gcc_lib_dir) \
+	$(PF)/share/man/man1
+files_cxx = \
+	$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver) \
+	$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver).1 \
+	$(gcc_lib_dir)/cc1plus
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cxx)
+	dh_installdirs -p$(p_cxx) $(dirs_cxx)
+	DH_COMPAT=2 dh_movefiles -p$(p_cxx) $(files_cxx)
+# g++ man page is a .so link
+	rm -f $(d_cxx)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver).1
+	ln -sf $(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1.gz \
+		$(d_cxx)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver).1.gz
+
+	debian/dh_doclink -p$(p_cxx) $(p_base)
+	debian/dh_rmemptydirs -p$(p_cxx)
+
+	dh_strip -p$(p_cxx)
+	dh_compress -p$(p_cxx)
+	dh_fixperms -p$(p_cxx)
+	dh_shlibdeps -p$(p_cxx)
+	dh_gencontrol -p$(p_cxx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cxx)
+	sed 's/cross-/$(TP)/g;s/-ver/$(pkg_ver)/g;s/gcc/g++/g' < debian/gcc-cross.postinst > debian/$(p_cxx)/DEBIAN/postinst
+	sed 's/cross-/$(TP)/g;s/-ver/$(pkg_ver)/g;s/gcc/g++/g' < debian/gcc-cross.prerm > debian/$(p_cxx)/DEBIAN/prerm
+	chmod 755 debian/$(p_cxx)/DEBIAN/{postinst,prerm}
+	dh_md5sums -p$(p_cxx)
+	dh_builddeb -p$(p_cxx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libffi.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libffi.mk
@@ -0,0 +1,142 @@
+arch_binaries  := $(arch_binaries) libffi
+ifeq ($(with_lib64ffi),yes)
+  arch_binaries  := $(arch_binaries) lib64ffi
+endif
+ifeq ($(with_lib32ffi),yes)
+  arch_binaries	:= $(arch_binaries) lib32ffi
+endif
+
+p_ffi	= libffi$(FFI_SONAME)
+p_l32ffi= lib32ffi$(FFI_SONAME)
+p_l64ffi= lib64ffi$(FFI_SONAME)
+p_ffid	= libffi$(FFI_SONAME)-dev
+
+d_ffi	= debian/$(p_ffi)
+d_l32ffi= debian/$(p_l32ffi)
+d_l64ffi= debian/$(p_l64ffi)
+d_ffid	= debian/$(p_ffid)
+
+dirs_ffi = \
+	$(docdir)/$(p_ffi) \
+	$(PF)/$(libdir)
+files_ffi = \
+	$(PF)/$(libdir)/libffi.so.*
+
+dirs_ffid = \
+	$(docdir) \
+	$(PF)/include \
+	$(gcc_lib_dir)/include
+files_ffid = \
+	$(gcc_lib_dir)/include/libffi \
+	$(PF)/include/{ffi.h,ffitarget.h} \
+	$(PF)/$(libdir)/libffi.{a,so,la}
+
+ifeq ($(with_lib32ffi),yes)
+	dirs_ffid  += $(lib32)
+	files_ffid += $(lib32)/libffi.{a,so,la}
+endif
+ifeq ($(with_lib64ffi),yes)
+	dirs_ffid  += $(PF)/lib64
+	files_ffid += $(PF)/lib64/libffi.{a,so,la}
+endif
+
+$(binary_stamp)-libffi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ffi) $(d_ffid)
+	dh_installdirs -p$(p_ffi) $(dirs_ffi)
+	dh_installdirs -p$(p_ffid) $(dirs_ffid)
+
+	mv $(d)/$(gcc_lib_dir)/include/libffi/ffitarget.h $(d)/$(PF)/include/.
+
+	DH_COMPAT=2 dh_movefiles -p$(p_ffi) $(files_ffi)
+	DH_COMPAT=2 dh_movefiles -p$(p_ffid) $(files_ffid)
+
+	cp -p $(buildlibdir)/libffi/.libs/libffi_convenience.a \
+		$(d_ffid)/$(PF)/lib/libffi_pic.a
+
+ifeq ($(with_lib64ffi),yes)
+	cp -p $(buildlibdir)/64/libffi/.libs/libffi_convenience.a \
+		$(d_ffid)/$(PF)/$(lib64)/libffi_pic.a
+endif
+ifeq ($(with_lib32ffi),yes)
+	cp -p $(buildlibdir)/32/libffi/.libs/libffi_convenience.a \
+		$(d_ffid)/$(lib32)/libffi_pic.a
+endif
+
+	dh_installdocs -p$(p_ffi) $(srcdir)/libffi/README
+	dh_installchangelogs -p$(p_ffi) $(srcdir)/libffi/ChangeLog
+	cp -p $(srcdir)/libffi/LICENSE $(d_ffi)/$(docdir)/$(p_ffi)/copyright
+	cp -p $(srcdir)/libffi/ChangeLog.libgcj \
+		$(d_ffi)/$(docdir)/$(p_ffi)/changelog.libgcj
+	debian/dh_doclink -p$(p_ffid) $(p_ffi)
+
+	debian/dh_rmemptydirs -p$(p_ffi)
+	debian/dh_rmemptydirs -p$(p_ffid)
+
+	dh_strip -p$(p_ffi) -p$(p_ffid)
+	dh_compress -p$(p_ffi) -p$(p_ffid)
+	dh_fixperms -p$(p_ffi) -p$(p_ffid)
+	dh_makeshlibs -p$(p_ffi) -V '$(p_ffi) (>= $(DEB_FFI_SOVERSION))'
+	dh_shlibdeps -p$(p_ffi) -p$(p_ffid)
+	dh_gencontrol -p$(p_ffi) -p$(p_ffid) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ffi) -p$(p_ffid)
+	dh_md5sums -p$(p_ffi) -p$(p_ffid)
+	dh_builddeb -p$(p_ffi) -p$(p_ffid)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64ffi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64ffi)
+	dh_installdirs -p$(p_l64ffi) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_l64ffi) \
+		$(PF)/lib64/libffi.so.*
+
+	debian/dh_doclink -p$(p_l64ffi) $(p_base)
+
+	dh_strip -p$(p_l64ffi)
+	dh_compress -p$(p_l64ffi)
+	dh_fixperms -p$(p_l64ffi)
+	dh_makeshlibs -p$(p_l64ffi) -V '$(p_l64ffi) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l64ffi)
+	dh_gencontrol -p$(p_l64ffi) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l64ffi)
+	dh_md5sums -p$(p_l64ffi)
+	dh_builddeb -p$(p_l64ffi)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32ffi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32ffi)
+	dh_installdirs -p$(p_l32ffi) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_l32ffi) \
+		$(lib32)/libffi.so.*
+
+	debian/dh_doclink -p$(p_l32ffi) $(p_base)
+
+	dh_strip -p$(p_l32ffi)
+	dh_compress -p$(p_l32ffi)
+	dh_fixperms -p$(p_l32ffi)
+	dh_makeshlibs -p$(p_l32ffi) -V '$(p_l32ffi) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l32ffi)
+	dh_gencontrol -p$(p_l32ffi) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l32ffi)
+	dh_md5sums -p$(p_l32ffi)
+	dh_builddeb -p$(p_l32ffi)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-snapshot.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-snapshot.mk
@@ -0,0 +1,87 @@
+arch_binaries  := $(arch_binaries) snapshot
+
+p_snap	= gcc-snapshot
+d_snap	= debian/$(p_snap)
+
+dirs_snap = \
+	$(docdir)/$(p_snap) \
+	usr/lib
+files_snap =
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-snapshot: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_snap)
+	dh_installdirs -p$(p_snap) $(dirs_snap)
+
+	-find $(d) -name '*.gch' -type d | xargs rm -rf
+
+	: # dh_movefiles -p$(p_snap) $(files_snap)
+	rm -f $(d_snap)/$(PF)
+	mv $(d)/$(PF) $(d_snap)/usr/lib/
+
+	rm -rf $(d_snap)/$(PF)/lib/nof
+
+ifeq ($(DEB_TARGET_ARCH),hppa)
+	rm -f $(install_hppa64_stamp)
+
+	: # provide as and ld links
+	dh_link -p $(p_snap) \
+		/usr/bin/hppa64-linux-gnu-as \
+		/$(PF)/lib/gcc/hppa64-linux-gnu/$(GCC_VERSION)/as \
+		/usr/bin/hppa64-linux-gnu-ld \
+		/$(PF)/lib/gcc/hppa64-linux-gnu/$(GCC_VERSION)/ld
+
+	DH_COMPAT=2 dh_movefiles -p$(p_snap) --sourcedir=$(d_hppa64) \
+		$(PF)/libexec \
+		$(PF)/lib \
+		$(PF)/bin/hppa64-linux-gnu-{cpp,gcc}
+endif
+
+ifeq ($(with_check),yes)
+	dh_installdocs -p$(p_snap) test-summary
+  ifeq ($(with_pascal),yes)
+	cp -p gpc-test-summary $(d_snap)/$(docdir)/$(p_snap)/
+  endif
+else
+	dh_installdocs -p$(p_snap)
+endif
+	if [ -f $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt ]; \
+	then \
+	  cp -p $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt \
+	    $(d_snap)/$(docdir)/$(p_snap)/libstdc++6_symbols.txt; \
+	fi
+	cp -p debian/README.snapshot \
+		$(d_snap)/$(docdir)/$(p_snap)/README.Debian
+	dh_installchangelogs -p$(p_snap)
+ifeq ($(DEB_TARGET_ARCH),hppa)
+	dh_strip -p$(p_snap) -Xdebug -X.o -X.a
+else
+	dh_strip -p$(p_snap) -Xdebug
+endif
+	dh_compress -p$(p_snap)
+	-find $(d_snap) -type d ! -perm 755 -exec chmod 755 {} \;
+	dh_fixperms -p$(p_snap)
+ifeq ($(biarch),yes)
+	mv $(d_snap)/$(PF)/lib64 .
+endif
+ifeq ($(biarch32),yes)
+	mv $(d_snap)/$(PF)/lib32 .
+endif
+	dh_shlibdeps -p$(p_snap) \
+		-l$(d_snap)/$(PF)/lib:$(d_snap)/$(gcc_lib_dir)
+ifeq ($(biarch),yes)
+	mv lib64 $(d_snap)/$(PF)/
+endif
+ifeq ($(biarch32),yes)
+	mv lib32 $(d_snap)/$(PF)/
+endif
+	dh_gencontrol -p$(p_snap) -- $(common_substvars)
+	dh_installdeb -p$(p_snap)
+	dh_md5sums -p$(p_snap)
+	dh_builddeb -p$(p_snap)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-java.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-java.mk
@@ -0,0 +1,575 @@
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    arch_binaries  := $(arch_binaries) jbase
+  endif
+else
+  arch_binaries  := $(arch_binaries) jbase
+endif
+
+ifeq ($(with_libgcj),yes)
+  ifeq ($(with_java),yes)
+    arch_binaries  := $(arch_binaries) java gcjapplet
+    indep_binaries  := $(indep_binaries) libgcjjar
+  endif
+
+  ifeq ($(with_javadev),yes)
+    arch_binaries  := $(arch_binaries) libgcjdev libgcjdbg
+    indep_binaries := $(indep_binaries) libgcjsrc
+    ifeq ($(with_libgcj_doc),yes)
+      indep_binaries := $(indep_binaries) libgcjdoc
+    endif
+  endif
+endif
+
+ifeq ($(with_gcj),yes)
+    arch_binaries  := $(arch_binaries) gcj
+endif
+
+p_jbase	= gcj$(pkg_ver)-base
+p_gcj	= gcj$(pkg_ver)
+p_gij	= gij$(pkg_ver)
+p_jlib	= libgcj$(PKG_LIBGCJ_EXT)
+p_jdbg	= libgcj$(PKG_GCJ_EXT)-dbg
+p_jar	= libgcj$(PKG_GCJ_EXT)-jar
+p_jlibx	= libgcj$(PKG_LIBGCJ_EXT)-awt
+p_jdev	= libgcj$(PKG_GCJ_EXT)-dev
+p_jsrc	= libgcj$(PKG_GCJ_EXT)-src
+p_view	= gappletviewer$(pkg_ver)
+p_plug	= gcjwebplugin$(pkg_ver)
+p_jdoc	= libgcj-doc
+
+d_jbase	= debian/$(p_jbase)
+d_gcj	= debian/$(p_gcj)
+d_gij	= debian/$(p_gij)
+d_jlib	= debian/$(p_jlib)
+d_jdbg	= debian/$(p_jdbg)
+d_jar	= debian/$(p_jar)
+d_jlibx	= debian/$(p_jlibx)
+d_jdev	= debian/$(p_jdev)
+d_jsrc	= debian/$(p_jsrc)
+d_jdoc	= debian/$(p_jdoc)
+d_view	= debian/$(p_view)
+d_plug	= debian/$(p_plug)
+
+gcj_vlibdir	= $(PF)/$(libdir)/gcj-$(BASE_VERSION)-$(GCJ_SONAME)
+
+dirs_gcj = \
+	$(docdir)/$(p_jbase) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(PF)/share/info \
+	$(gcc_lexec_dir)
+files_gcj = \
+	$(PF)/bin/{gcj,gjar,gjarsigner,gcjh,gjavah,gnative2ascii,grmic,gtnameserv,jv-convert,jcf-dump}$(pkg_ver) \
+	$(PF)/share/man/man1/{gjar,gjarsigner,gcjh,gjavah,gnative2ascii,grmic,gtnameserv}$(pkg_ver).1 \
+	$(gcc_lexec_dir)/{ecj1,jc1,jvgenmain}
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_gcj += \
+	$(PF)/share/info/gcj* \
+	$(PF)/share/man/man1/{gcj,jv-convert,jcf-dump}$(pkg_ver).1
+endif
+
+dirs_gij = \
+	$(docdir)/$(p_jbase) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	var/lib/gcj$(pkg_ver)
+
+files_gij = \
+	$(PF)/bin/{gij,gcj-dbtool,gorbd,grmid,grmiregistry,gkeytool,gserialver}$(pkg_ver) \
+	$(PF)/share/man/man1/{gorbd,grmid,grmiregistry,gkeytool,gserialver}$(pkg_ver).1
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_gij += \
+	$(PF)/share/man/man1/{gij,gcj-dbtool}$(pkg_ver).1
+endif
+
+dirs_jlib = \
+	$(docdir)/$(p_jbase) \
+	$(gcj_vlibdir) \
+	$(PF)/$(libdir)
+
+files_jlib = \
+	$(PF)/$(libdir)/libgij.so.* \
+	$(PF)/$(libdir)/libgcj-tools.so.* \
+	$(PF)/$(libdir)/libgcj.so.* \
+	$(gcj_vlibdir)/libjvm.so \
+
+#	$(gcj_vlibdir)/libgconfpeer.so
+
+ifeq ($(with_java_alsa),yes)
+  files_jlib += \
+	$(gcj_vlibdir)/libgjsmalsa.so
+endif
+
+dirs_jar = \
+	$(PF)/share/java
+
+dirs_jlibx = \
+	$(PF)/$(libdir) \
+	$(gcj_vlibdir) \
+	$(PF)/share/java
+
+files_jlibx = \
+	$(gcj_vlibdir)/libjawt.so \
+	$(gcj_vlibdir)/libgtkpeer.so
+
+dirs_jdev = \
+	$(docdir)/$(p_jbase)/examples \
+	$(PF)/{include,lib} \
+	$(gcc_lib_dir)/include/gcj
+
+files_jdev = \
+	$(cxx_inc_dir)/{org,gcj,java,javax} \
+	$(cxx_inc_dir)/gnu/{awt,classpath,gcj,java,javax} \
+	$(gcc_lib_dir)/include/{jni.h,jni_md.h,jvmpi.h} \
+	$(gcc_lib_dir)/include/{jawt.h,jawt_md.h} \
+	$(gcc_lib_dir)/include/gcj/libgcj-config.h \
+	$(PF)/$(libdir)/libgij.so \
+	$(PF)/$(libdir)/libgcj.{so,spec} \
+	$(PF)/$(libdir)/libgcj-tools.so \
+	$(PF)/$(libdir)/pkgconfig/libgcj-$(BASE_VERSION).pc
+
+ifeq ($(with_static_java),yes)
+  files_jdev += \
+	$(PF)/$(libdir)/libgij.a \
+	$(PF)/$(libdir)/libgcj.a \
+	$(PF)/$(libdir)/libgcj-tools.a
+endif
+
+ifeq ($(with_standalone_gcj),yes)
+
+  dirs_gcj += \
+	$(gcc_lib_dir)/include \
+	$(PF)/share/man/man1
+
+  files_gcj += \
+	$(PF)/bin/{cpp,gcc,gcov}$(pkg_ver) \
+	$(gcc_lexec_dir)/cc1 \
+	$(gcc_lexec_dir)/collect2 \
+	$(gcc_lib_dir)/{libgcc*,libgcov.a,*.o} \
+	$(gcc_lib_dir)/include/README \
+	$(gcc_lib_dir)/include/{float,iso646,limits,std*,syslimits,unwind,varargs}.h \
+	$(shell for d in asm bits gnu linux; do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$d \
+		    && echo $(gcc_lib_dir)/include/$$d; \
+		done) \
+	$(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+		&& echo $(gcc_lib_dir)/SYSCALLS.c.X) \
+	$(shell for h in {,e,p,x}mmintrin.h mm3dnow.h mm_malloc.h; do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$h \
+		    && echo $(gcc_lib_dir)/include/$$h; \
+		done) \
+
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_gcj += \
+	$(PF)/share/man/man1/{cpp,gcc,gcov}$(pkg_ver).1
+  endif
+
+  ifeq ($(biarch),yes)
+    files_gcj += $(gcc_lib_dir)/$(biarchsubdir)/{libgcc*,libgcov.a,*.o}
+  endif
+  ifeq ($(biarch32),yes)
+    files_gcj += $(gcc_lib_dir)/$(biarchsubdir)/{libgcc*,*.o}
+  endif
+
+  ifeq ($(DEB_HOST_ARCH),ia64)
+    files_gcj += $(gcc_lib_dir)/include/ia64intrin.h
+  endif
+
+  ifeq ($(DEB_HOST_ARCH),m68k)
+    files_gcj += $(gcc_lib_dir)/include/math-68881.h
+  endif
+
+  ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64))
+    files_gcj += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h,spe.h}
+  endif
+
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-jbase: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_jbase)
+	dh_installdirs -p$(p_jbase)
+	dh_installdocs -p$(p_jbase)
+	dh_installchangelogs -p$(p_jbase)
+	dh_compress -p$(p_jbase)
+	dh_fixperms -p$(p_jbase)
+	dh_gencontrol -p$(p_jbase) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jbase)
+	dh_md5sums -p$(p_jbase)
+	dh_builddeb -p$(p_jbase)
+	touch $@
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjjar: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	dh_installdirs -p$(p_jar) $(dirs_jar)
+	mv $(d)/$(PF)/share/java/libgcj-$(BASE_VERSION).jar \
+		$(d_jar)/$(PF)/share/java/
+	mv $(d)/$(PF)/share/java/libgcj-tools-$(BASE_VERSION).jar \
+		$(d_jar)/$(PF)/share/java/
+
+	debian/dh_doclink -p$(p_jar) $(p_jbase)
+	debian/dh_rmemptydirs -p$(p_jar)
+	dh_compress -p$(p_jar)
+	dh_fixperms -p$(p_jar)
+	dh_gencontrol -p$(p_jar) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jar)
+	dh_md5sums -p$(p_jar)
+	dh_builddeb -p$(p_jar)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjsrc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+
+	$(MAKE) -C $(buildlibdir)/libjava \
+		DESTDIR=$(PWD)/$(d) install-src.zip
+	mkdir -p $(d_jsrc)/$(PF)/share/java
+	mv $(d)/$(PF)/share/java/src-$(BASE_VERSION).zip \
+	   $(d_jsrc)/$(PF)/share/java/libgcj-src-$(BASE_VERSION).zip
+
+	: #  add files for the classpath examples
+	cd $(srcdir)/libjava/classpath/examples && \
+	  find ! -type d ! -name 'Makefile.??' ! -name '*.java' \
+	  | $(builddir)/fastjar/fastjar -uvfM@ \
+		$(PWD)/$(d_jsrc)/$(PF)/share/java/libgcj-src-$(BASE_VERSION).zip
+
+	debian/dh_doclink -p$(p_jsrc) $(p_jbase)
+	debian/dh_rmemptydirs -p$(p_jsrc)
+	dh_compress -p$(p_jsrc)
+	dh_fixperms -p$(p_jsrc)
+	dh_gencontrol -p$(p_jsrc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jsrc)
+	dh_md5sums -p$(p_jsrc)
+	dh_builddeb -p$(p_jsrc)
+
+	touch $@
+
+# ----------------------------------------------------------------------
+libgcj_version = $(shell $(builddir)/gcc/xgcc --version \
+			 | sed -n '/GCC/s/.*(GCC) *//p')
+libgcj_title = LibGCJ Classpath
+libgcjhbox_href = http://gcc.gnu.org/java
+libgcjhbox = <span class='logo'><a href='$(libgcjhbox_href)' target='_top'>$(title)</a> ($(libgcj_version))
+
+$(build_javadoc_stamp): $(build_stamp)
+	mkdir -p $(builddir)/java-src
+	cd $(builddir)/java-src && $(builddir)/fastjar/fastjar -xf \
+		$(buildlibdir)/libjava/src.zip
+
+	mkdir -p $(builddir)/html
+	gjdoc \
+	  -use \
+	  -sourcepath "$(builddir)/java-src" \
+	  -encoding UTF-8 \
+	  -breakiterator \
+	  -licensetext \
+	  -linksource \
+	  -splitindex \
+	  -d $(builddir)/html \
+	  -doctitle "$(title) $(libgcj_version)" \
+	  -windowtitle "$(title) $(libgcj_version) Documentation" \
+	  -header "$(classpathbox)" \
+	  -footer "$(classpathbox)" \
+	  -subpackages gnu:java:javax:org
+
+	$(MAKE) -C $(buildlibdir)/libjava/classpath/examples
+
+	touch $@
+
+
+$(binary_stamp)-libgcjdoc: $(install_stamp) #$(build_javadoc_stamp)
+	dh_testdir
+	dh_testroot
+
+	$(MAKE) -C $(buildlibdir)/libjava/classpath/examples \
+	    GLIBJ_CLASSPATH="$(buildlibdir)/libjava/libgcj-$(BASE_VERSION).jar:$(buildlibdir)/libjava/libgcj-tools-$(BASE_VERSION).jar" \
+	    DESTDIR=$(PWD)/$(d_jdoc) \
+	    pkgdatadir=/usr/share/doc/$(p_jbase) \
+		install
+
+	dh_installdocs -p$(p_jdoc)
+	dh_installchangelogs -p$(p_jdoc)
+	mkdir -p $(d_jdoc)/usr/share/doc/$(p_jbase)
+#	cp -al $(builddir)/html $(d_jdoc)/usr/share/doc/$(p_jbase)/
+#	ln -sf ../$(p_jbase)/html $(d_jdoc)/usr/share/doc/$(p_jdoc)/html
+	dh_compress -p$(p_jdoc) -X.java -X.c
+	dh_fixperms -p$(p_jdoc)
+	dh_gencontrol -p$(p_jdoc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdoc)
+	dh_md5sums -p$(p_jdoc)
+	dh_builddeb -p$(p_jdoc)
+
+	touch $@
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-java: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	if [ -d $(d)/$(PF)/$(libdir)/gcj-$(GCC_VERSION) ]; then \
+	  ls -l $(d)/$(PF)/$(libdir)/gcj-$(GCC_VERSION); \
+	  mv $(d)/$(PF)/$(libdir)/gcj-$(GCC_VERSION)/* $(d)/$(gcj_vlibdir)/; \
+	fi
+
+	dh_installdirs -p$(p_gij)   $(dirs_gij)
+	dh_installdirs -p$(p_jlib)  $(dirs_jlib)
+	dh_installdirs -p$(p_jlibx) $(dirs_jlibx)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gij)   $(files_gij)
+	DH_COMPAT=2 dh_movefiles -p$(p_jlib)  $(files_jlib)
+	DH_COMPAT=2 dh_movefiles -p$(p_jlibx) $(files_jlibx)
+
+ifeq ($(DEB_HOST_ARCH),hppa)
+	mv $(d_gij)/$(PF)/bin/gij$(pkg_ver) \
+		$(d_gij)/$(PF)/bin/gij$(pkg_ver).bin
+	install -m755 debian/gij-hppa $(d_gij)/$(PF)/bin/gij$(pkg_ver)
+endif
+
+	ln -s ../libgcj.so.$(GCJ_SONAME) \
+		$(d_jlib)/$(gcj_vlibdir)/libgcj_bc.so.1
+
+	cp -p $(srcdir)/libjava/{NEWS,README,THANKS} \
+		$(d_gij)/usr/share/doc/$(p_jbase)/
+
+	debian/dh_doclink -p$(p_gij)   $(p_jbase)
+	debian/dh_doclink -p$(p_jlib)  $(p_jbase)
+	debian/dh_doclink -p$(p_jlibx) $(p_jbase)
+
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    ifeq ($(with_check),yes)
+	cp -p test-summary $(d_gij)/usr/share/doc/$(p_jbase)/test-summary
+    endif
+  endif
+endif
+	debian/dh_rmemptydirs -p$(p_gij)
+	debian/dh_rmemptydirs -p$(p_jlib)
+	debian/dh_rmemptydirs -p$(p_jlibx)
+
+	mkdir -p $(d_gij)/var/lib/gcj$(pkg_ver)
+
+	dh_makeshlibs -p$(p_jlib) -V '$(p_jlib) (>= $(DEB_GCJ_SOVERSION))'
+	echo "libgcj_bc 1 libgcj-bc (>= 4.1.2-1)" >> debian/$(p_jlib)/DEBIAN/shlibs
+	cat debian/$(p_jlib)/DEBIAN/shlibs >> debian/shlibs.local
+
+	dh_makeshlibs -p$(p_jlibx) -V '$(p_jlibx) (>= $(DEB_GCJ_SOVERSION))'
+
+	-cd $(d_jlibx)/$(PF)/lib/gcj$(pkg_ver) \
+	  && ldd libjawt.so libgtkpeer.so
+	DH_COMPAT=5 dh_strip \
+		-p$(p_gij) -p$(p_jlib) -p$(p_jlibx) --dbg-package=$(p_jdbg)
+	-cd $(d_jlibx)/$(PF)/lib/gcj$(pkg_ver) \
+	  && ldd libjawt.so libgtkpeer.so
+
+	dh_compress -p$(p_gij) -p$(p_jlib) -p$(p_jlibx)
+	dh_fixperms -p$(p_gij) -p$(p_jlib) -p$(p_jlibx)
+# the libstdc++ binary packages aren't built yet ...
+	echo 'libstdc++ $(CXX_SONAME) libstdc++$(CXX_SONAME) (>= $(DEB_STDCXX_SOVERSION))' \
+	    >> debian/shlibs.local
+	dh_shlibdeps \
+		-L$(p_jlib) \
+		-l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir) \
+		-p$(p_gij) -p$(p_jlib) -p$(p_jlibx)
+	sed -e 's/$(p_jlib)[^,]*//' -e 's/, *,/,/' debian/$(p_jlib).substvars \
+		>> debian/$(p_jlib).substvars.tmp \
+	    && mv -f debian/$(p_jlib).substvars.tmp debian/$(p_jlib).substvars
+	dh_gencontrol \
+		-p$(p_gij) -p$(p_jlib) -p$(p_jlibx) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_gij) -p$(p_jlib) -p$(p_jlibx)
+	dh_md5sums -p$(p_gij) -p$(p_jlib) -p$(p_jlibx)
+	dh_builddeb -p$(p_gij) -p$(p_jlib) -p$(p_jlibx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcj: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gcj)
+	dh_installdirs -p$(p_gcj)  $(dirs_gcj)
+
+	mkdir -p $(d_gcj)/usr/share/lintian/overrides
+	cp -p debian/$(p_gcj).overrides \
+		$(d_gcj)/usr/share/lintian/overrides/$(p_gcj)
+	cp -p $(srcdir)/gcc/java/ChangeLog \
+		$(d_gcj)/usr/share/doc/$(p_jbase)/changelog.gcj
+	cp -p $(srcdir)/libjava/ChangeLog \
+		$(d_gcj)/usr/share/doc/$(p_jbase)/changelog.libjava
+
+ifeq ($(with_standalone_gcj),yes)
+	rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
+	ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
+endif
+	DH_COMPAT=2 dh_movefiles -p$(p_gcj)  $(files_gcj)
+
+	ln -sf gcj$(pkg_ver) \
+	    $(d_gcj)/$(PF)/bin/$(TARGET_ALIAS)-gcj$(pkg_ver)
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf gcj$(pkg_ver).1 \
+	    $(d_gcj)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcj$(pkg_ver).1
+	cp -p html/gcj.html $(d_gcj)/$(docdir)/$(p_jbase)/
+endif
+	debian/dh_doclink -p$(p_gcj) $(p_jbase)
+
+	cp -p debian/FAQ.gcj $(d_gcj)/$(docdir)/$(p_jbase)/
+
+	cp -p debian/gcj-wrapper$(pkg_ver) $(d_gcj)/$(PF)/bin/
+	chmod 755 $(d_gcj)/$(PF)/bin/gcj-wrapper$(pkg_ver)
+	cp -p debian/gcj-wrapper$(pkg_ver).1 $(d_gcj)/$(PF)/share/man/man1/
+
+	debian/dh_rmemptydirs -p$(p_gcj)
+
+	dh_strip -p$(p_gcj)
+	dh_compress -p$(p_gcj) -X.java
+	dh_fixperms -p$(p_gcj)
+	: # FIXME: remove it temporarily, insane dpkg-shlibdeps
+	rm -f $(d_jlib)/$(gcj_vlibdir)/libgcj_bc.so.1
+	dh_shlibdeps -p$(p_gcj) -l$(d_jlib)/$(PF)/lib -L$(p_jlib)
+	ln -s ../libgcj.so.$(GCJ_SONAME) \
+		$(d_jlib)/$(gcj_vlibdir)/libgcj_bc.so.1
+	dh_gencontrol -p$(p_gcj) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gcj)
+	dh_md5sums -p$(p_gcj)
+	dh_builddeb -p$(p_gcj)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjdev: $(build_html_stamp) $(install_stamp) $(binary_stamp)-java
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	dh_installdirs -p$(p_jdev) $(dirs_jdev)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_jdev) $(files_jdev)
+
+	for i in libgij libgcj libgcj-tools; do \
+	  dh_link -p$(p_jdev) /$(PF)/$(libdir)/$$i.so.$(GCJ_SONAME) \
+	    $(gcc_lib_dir)/$$i.so; \
+	  rm -f $(d_jdev)/$(PF)/$(libdir)/$$i.{la,so}; \
+	done
+ifeq ($(with_static_java),yes)
+	for i in libgij libgcj libgcj-tools; do \
+	  mv $(d_jdev)/$(PF)/$(libdir)/$$i.a $(d_jdev)/$(gcc_lib_dir)/; \
+	done
+endif
+
+	ln -sf libgcj-$(BASE_VERSION).pc \
+		$(d_jdev)/$(PF)/$(libdir)/pkgconfig/libgcj$(PKG_GCJ_EXT).pc
+
+	mv $(d_jdev)/$(PF)/$(libdir)/libgcj.spec $(d_jdev)/$(gcc_lib_dir)/
+
+	install -m 755 $(d)/$(PF)/lib/libgcj_bc.so.1 \
+		$(d_jdev)/$(gcc_lib_dir)/libgcj_bc.so
+
+	debian/dh_doclink -p$(p_jdev) $(p_jbase)
+
+	debian/dh_rmemptydirs -p$(p_jdev)
+
+	mkdir -p $(d_jdev)/usr/share/lintian/overrides
+	cp -p debian/$(p_jdev).overrides \
+		$(d_jdev)/usr/share/lintian/overrides/$(p_jdev)
+
+	DH_COMPAT=5 dh_strip -p$(p_jdev) --dbg-package=$(p_jdbg)
+	dh_compress -p$(p_jdev) -X.java
+	dh_fixperms -p$(p_jdev)
+	dh_shlibdeps \
+		-l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir) \
+		-p$(p_jdev)
+	dh_gencontrol -p$(p_jdev) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdev)
+	dh_md5sums -p$(p_jdev)
+	dh_builddeb -p$(p_jdev)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjdbg: $(install_stamp) $(binary_stamp)-java $(binary_stamp)-libgcjdev $(binary_stamp)-gcjapplet
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	debian/dh_doclink -p$(p_jdbg) $(p_jbase)
+
+	for i in libgij libgcj libgcj-tools; do \
+	  if [ -f $(d_jdbg)/usr/lib/debug/usr/lib/$$i.so.$(GCJ_SONAME).0.0 ]; then \
+	    ln -sf $$i.so.$(GCJ_SONAME).0.0 \
+	      $(d_jdbg)/usr/lib/debug/usr/lib/$$i.so.$(GCJ_SONAME); \
+	  fi; \
+	done
+
+	dh_compress -p$(p_jdbg)
+	dh_fixperms -p$(p_jdbg)
+	dh_gencontrol -p$(p_jdbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdbg)
+	dh_md5sums -p$(p_jdbg)
+	dh_builddeb -p$(p_jdbg)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcjapplet: $(install_stamp) $(binary_stamp)-java
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	dh_installdirs -p$(p_view) \
+		$(PF)/bin \
+		$(PF)/share/man/man1
+	DH_COMPAT=2 dh_movefiles -p$(p_view) \
+		$(PF)/bin/gappletviewer$(pkg_ver) \
+		$(PF)/share/man/man1/gappletviewer$(pkg_ver).1
+
+ifeq ($(with_pkg_plugin),yes)
+	dh_installdirs -p$(p_plug) \
+		$(gcj_vlibdir) \
+		$(foreach d, $(browser_plugin_dirs), usr/lib/$(d)/plugins)
+	DH_COMPAT=2 dh_movefiles -p$(p_plug) \
+		$(gcj_vlibdir)/libgcjwebplugin.so
+else
+	DH_COMPAT=2 dh_movefiles -p$(p_view) \
+		$(gcj_vlibdir)/libgcjwebplugin.so
+endif
+	rm -f $(d)/$(gcj_vlibdir)/libgcjwebplugin.*a
+
+	debian/dh_doclink -p$(p_view) $(p_jbase)
+
+	DH_COMPAT=5 dh_strip -p$(p_view) --dbg-package=$(p_jdbg)
+	dh_compress -p$(p_view)
+	dh_fixperms -p$(p_view)
+	dh_gencontrol -p$(p_view) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_view)
+	dh_md5sums -p$(p_view)
+	dh_builddeb -p$(p_view)
+
+ifeq ($(with_pkg_plugin),yes)
+	debian/dh_doclink -p$(p_plug) $(p_jbase)
+
+	DH_COMPAT=5 dh_strip -p$(p_plug) --dbg-package=$(p_jdbg)
+	dh_compress -p$(p_plug)
+	dh_fixperms -p$(p_plug)
+	dh_gencontrol -p$(p_plug) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_plug)
+	dh_md5sums -p$(p_plug)
+	dh_builddeb -p$(p_plug)
+endif
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libobjc.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libobjc.mk
@@ -0,0 +1,122 @@
+ifeq ($(with_objcdev),yes)
+  arch_binaries := $(arch_binaries) libobjc
+endif
+ifeq ($(with_lib64objc),yes)
+  arch_binaries  := $(arch_binaries) lib64objc
+endif
+ifeq ($(with_lib32objc),yes)
+  arch_binaries	:= $(arch_binaries) lib32objc
+endif
+
+p_lobjc		= libobjc$(OBJC_SONAME)
+p_l32objc	= lib32objc$(OBJC_SONAME)
+p_l64objc	= lib64objc$(OBJC_SONAME)
+
+d_lobjc		= debian/$(p_lobjc)
+d_l32objc	= debian/$(p_l32objc)
+d_l64objc	= debian/$(p_l64objc)
+
+dirs_lobjc = \
+	$(docdir)/objc \
+	$(PF)/$(libdir)
+files_lobjc = \
+	$(PF)/$(libdir)/libobjc.so.*
+ifeq ($(with_objc_gc),yes)
+  files_lobjc += \
+	$(PF)/$(libdir)/libobjc_gc.so.*
+endif
+
+
+$(binary_stamp)-libobjc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lobjc)
+	dh_installdirs -p$(p_lobjc) $(dirs_lobjc)
+#	mv $(d)/$(gcc_lib_dir)/libobjc.so.* $(d)/$(PF)/$(libdir)/.
+#ifeq ($(with_objc_gc),yes)
+#	mv $(d)/$(gcc_lib_dir)/libobjc_gc.so.* $(d)/$(PF)/$(libdir)/.
+#endif
+	DH_COMPAT=2 dh_movefiles -p$(p_lobjc) $(files_lobjc)
+
+	dh_installdocs -p$(p_lobjc)
+	echo "See /$(docdir)/$(p_base) for more information" \
+		> $(d_lobjc)/$(docdir)/$(p_lobjc)/README.Debian
+	dh_installchangelogs -p$(p_lobjc) $(srcdir)/libobjc/ChangeLog
+
+	debian/dh_rmemptydirs -p$(p_lobjc)
+
+	dh_strip -p$(p_lobjc)
+	dh_compress -p$(p_lobjc)
+
+	dh_fixperms -p$(p_lobjc)
+	b=libobjc; \
+	for ext in preinst postinst prerm postrm; do \
+	  for t in '' -dev -dbg; do \
+	    v=$(OBJC_SONAME); \
+	    if [ -f debian/$$b$$t.$$ext ]; then \
+	      cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+	    fi; \
+	  done; \
+	done
+	dh_makeshlibs -p$(p_lobjc) -V '$(p_lobjc) (>= $(DEB_SOEVERSION))'
+	dh_shlibdeps -p$(p_lobjc)
+	dh_gencontrol -p$(p_lobjc) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_lobjc)
+	dh_md5sums -p$(p_lobjc)
+	dh_builddeb -p$(p_lobjc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64objc)
+	dh_installdirs -p$(p_l64objc) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_l64objc) \
+		$(PF)/lib64/libobjc.so.*
+
+	debian/dh_doclink -p$(p_l64objc) $(p_base)
+
+	dh_strip -p$(p_l64objc)
+	dh_compress -p$(p_l64objc)
+	dh_fixperms -p$(p_l64objc)
+	dh_makeshlibs -p$(p_l64objc) -V '$(p_l64objc) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l64objc)
+	dh_gencontrol -p$(p_l64objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l64objc)
+	dh_md5sums -p$(p_l64objc)
+	dh_builddeb -p$(p_l64objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32objc)
+	dh_installdirs -p$(p_l32objc) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_l32objc) \
+		$(lib32)/libobjc.so.*
+
+	debian/dh_doclink -p$(p_l32objc) $(p_base)
+
+	dh_strip -p$(p_l32objc)
+	dh_compress -p$(p_l32objc)
+	dh_fixperms -p$(p_l32objc)
+	dh_makeshlibs -p$(p_l32objc) -V '$(p_l32objc) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_l32objc)
+	dh_gencontrol -p$(p_l32objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l32objc)
+	dh_md5sums -p$(p_l32objc)
+	dh_builddeb -p$(p_l32objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-d-cross.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-d-cross.mk
@@ -0,0 +1,16 @@
+arch_binaries := $(arch_binaries) gdc
+
+ifeq ($(with_libphobos),yes)
+  arch_binaries += libphobos
+endif
+
+p_gdc		= gdc$(pkg_ver)$(cross_bin_arch)
+d_gdc		= debian/$(p_objc)
+
+# no shared lib for now
+p_libphobos 	= libphobos$(libphobos_version)$(pkg_ver)$(cross_bin_arch)-dev
+d_libphobis	= debian/$(p_libphobos)
+
+
+# TODO
+
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-cxx.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-cxx.mk
@@ -0,0 +1,112 @@
+ifneq (,$(filter yes, $(biarch) $(biarch32)))
+  arch_binaries  := $(arch_binaries) cxx-multi
+endif
+arch_binaries  := $(arch_binaries) cxx
+
+dirs_cxx = \
+	$(docdir)/$(p_base)/C++ \
+	$(PF)/bin \
+	$(PF)/share/info \
+	$(gcc_lexec_dir) \
+	$(PF)/share/man/man1
+files_cxx = \
+	$(PF)/bin/g++$(pkg_ver) \
+	$(gcc_lexec_dir)/cc1plus
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_cxx += \
+	$(PF)/share/man/man1/g++$(pkg_ver).1
+endif
+
+p_cxx_m	= g++$(pkg_ver)-multilib
+d_cxx_m	= debian/$(p_cxx_m)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cxx)
+	dh_installdirs -p$(p_cxx) $(dirs_cxx)
+	DH_COMPAT=2 dh_movefiles -p$(p_cxx) $(files_cxx)
+
+	ln -sf g++$(pkg_ver) \
+	    $(d_cxx)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver)
+	ln -sf g++$(pkg_ver) \
+	    $(d_cxx)/$(PF)/bin/$(TARGET_ALIAS)-g++$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+# g++ man page is a .so link
+	rm -f $(d_cxx)/$(PF)/share/man/man1/g++$(pkg_ver).1
+	ln -sf gcc$(pkg_ver).1.gz \
+		$(d_cxx)/$(PF)/share/man/man1/g++$(pkg_ver).1.gz
+	ln -sf g++$(pkg_ver).1.gz \
+	    $(d_cxx)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver).1.gz
+	ln -sf g++$(pkg_ver).1.gz \
+	    $(d_cxx)/$(PF)/share/man/man1/$(TARGET_ALIAS)-g++$(pkg_ver).1.gz
+endif
+
+	debian/dh_doclink -p$(p_cxx) $(p_base)
+	cp -p debian/README.C++ $(d_cxx)/$(docdir)/$(p_base)/C++/
+	cp -p $(srcdir)/gcc/cp/ChangeLog \
+		$(d_cxx)/$(docdir)/$(p_base)/C++/changelog
+	debian/dh_rmemptydirs -p$(p_cxx)
+
+	dh_strip -p$(p_cxx)
+	dh_compress -p$(p_cxx)
+	dh_fixperms -p$(p_cxx)
+	dh_shlibdeps -p$(p_cxx)
+	dh_gencontrol -p$(p_cxx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cxx)
+	dh_md5sums -p$(p_cxx)
+	dh_builddeb -p$(p_cxx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cxx-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cxx_m)
+	dh_installdirs -p$(p_cxx_m) \
+		$(docdir) \
+		$(gcc_lib_dir)/$(biarchsubdir)
+
+ifeq ($(biarch),yes)
+	mv $(d)/$(PF)/lib64/lib*c++*.{a,so} $(d)/$(gcc_lib_dir)/$(biarchsubdir)/.
+endif
+ifeq ($(biarch32),yes)
+	mv $(d)/$(lib32)/lib*c++*.{a,so} $(d)/$(gcc_lib_dir)/$(biarchsubdir)/.
+endif
+
+	DH_COMPAT=2 dh_movefiles -p$(p_cxx_m) \
+		$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.{a,so} \
+	        $(gcc_lib_dir)/$(biarchsubdir)/libsupc++.a \
+		$(gcc_lib_dir)/$(biarchsubdir)/libstdc++_pic.a
+
+ifeq ($(biarch),yes)
+	dh_link -p$(p_cxx_m) \
+		/$(PF)/lib64/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.so
+endif
+ifeq ($(biarch32),yes)
+	dh_link -p$(p_cxx_m) \
+		/$(lib32)/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/$(biarchsubdir)/libstdc++.so
+endif
+
+	debian/dh_doclink -p$(p_cxx_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_cxx_m)
+
+	dh_strip -p$(p_cxx_m)
+	dh_compress -p$(p_cxx_m)
+	dh_fixperms -p$(p_cxx_m)
+	dh_shlibdeps -p$(p_cxx_m)
+	dh_gencontrol -p$(p_cxx_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cxx_m)
+	dh_md5sums -p$(p_cxx_m)
+	dh_builddeb -p$(p_cxx_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/rules.d/binary-libstdcxx.mk
+++ gcc-4.1-4.1.2/debian/rules.d/binary-libstdcxx.mk
@@ -0,0 +1,424 @@
+
+ifeq ($(with_libcxx),yes)
+  arch_binaries  := $(arch_binaries) libstdcxx
+endif
+ifeq ($(with_lib64cxx),yes)
+  arch_binaries  := $(arch_binaries) lib64stdcxx
+endif
+ifeq ($(with_lib64cxxdbg),yes)
+  arch_binaries	:= $(arch_binaries) lib64stdcxxdbg
+endif
+ifeq ($(with_lib32cxx),yes)
+  arch_binaries	:= $(arch_binaries) lib32stdcxx
+endif
+ifeq ($(with_lib32cxxdbg),yes)
+  arch_binaries	:= $(arch_binaries) lib32stdcxxdbg
+endif
+
+ifeq ($(with_cxxdev),yes)
+  arch_binaries  := $(arch_binaries) libstdcxx-dev
+  indep_binaries := $(indep_binaries) libstdcxx-doc
+endif
+
+libstdc_ext = -$(BASE_VERSION)
+
+p_lib	= libstdc++$(CXX_SONAME)
+p_lib64	= lib64stdc++$(CXX_SONAME)
+p_lib32	= lib32stdc++$(CXX_SONAME)
+p_dev	= libstdc++$(CXX_SONAME)$(libstdc_ext)-dev
+p_pic	= libstdc++$(CXX_SONAME)$(libstdc_ext)-pic
+p_dbg	= libstdc++$(CXX_SONAME)$(libstdc_ext)-dbg
+p_dbg64	= $(p_lib64)$(libstdc_ext)-dbg
+p_dbg32	= $(p_lib32)$(libstdc_ext)-dbg
+p_libd	= libstdc++$(CXX_SONAME)$(libstdc_ext)-doc
+
+d_lib	= debian/$(p_lib)
+d_lib64	= debian/$(p_lib64)
+d_lib32	= debian/$(p_lib32)
+d_dev	= debian/$(p_dev)
+d_pic	= debian/$(p_pic)
+d_dbg	= debian/$(p_dbg)
+d_dbg64	= debian/$(p_dbg64)
+d_dbg32	= debian/$(p_dbg32)
+d_libd	= debian/$(p_libd)
+
+dirs_dev = \
+	$(docdir)/$(p_base)/C++ \
+	$(PF)/$(libdir) \
+	$(gcc_lib_dir)/include \
+	$(cxx_inc_dir)
+
+files_dev = \
+	$(cxx_inc_dir)/ \
+	$(gcc_lib_dir)/libstdc++.{a,so} \
+	$(gcc_lib_dir)/libsupc++.a
+# Not yet...
+#	$(PF)/$(libdir)/lib{supc,stdc}++.la
+
+dirs_dbg = \
+	$(docdir) \
+	$(PF)/$(libdir)/debug \
+	$(gcc_lib_dir)
+files_dbg = \
+	$(PF)/$(libdir)/debug/libstdc++.{a,so*}
+
+dirs_pic = \
+	$(docdir) \
+	$(gcc_lib_dir)
+files_pic = \
+	$(gcc_lib_dir)/libstdc++_pic.a
+
+# ----------------------------------------------------------------------
+
+gxx_baseline_dir = $(shell \
+			sed -n '/^baseline_dir *=/s,.*= *\(.*\)\$$.*$$,\1,p' \
+			    $(buildlibdir)/libstdc++-v3/testsuite/Makefile)
+gxx_baseline_file = $(gxx_baseline_dir)/baseline_symbols.txt
+
+debian/README.libstdc++-baseline:
+	cat debian/README.libstdc++-baseline.in \
+		> debian/README.libstdc++-baseline
+
+	baseline_name=`basename $(gxx_baseline_dir)`; \
+	baseline_parentdir=`dirname $(gxx_baseline_dir)`; \
+	compat_baseline_name=""; \
+	if [ -f "$(gxx_baseline_file)" ]; then \
+	  ( \
+	    echo "A baseline file for $$baseline_name was found."; \
+	    echo "Running the check-abi script ..."; \
+	    echo ""; \
+	    $(MAKE) -C $(buildlibdir)/libstdc++-v3/testsuite \
+		check-abi; \
+	  ) >> debian/README.libstdc++-baseline; \
+	else \
+	  ( \
+	    echo "No baseline file found for $$baseline_name."; \
+	    echo "Generating a new baseline file ..."; \
+	    echo ""; \
+	  ) >> debian/README.libstdc++-baseline; \
+	  mkdir $(gxx_baseline_dir); \
+	  $(MAKE) -C $(buildlibdir)/libstdc++-v3/testsuite new-abi-baseline; \
+	  cat $(gxx_baseline_file) >> debian/README.libstdc++-baseline; \
+	fi
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libstdcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lib)
+	dh_installdirs -p$(p_lib) \
+		$(docdir) \
+		$(PF)/$(libdir)
+
+	cp -a $(d)/$(PF)/$(libdir)/libstdc++.so.* \
+		$(d_lib)/$(PF)/$(libdir)/
+
+	debian/dh_doclink -p$(p_lib) $(p_base)
+	debian/dh_rmemptydirs -p$(p_lib)
+
+	dh_strip -p$(p_lib)
+	dh_compress -p$(p_lib)
+	dh_fixperms -p$(p_lib)
+	dh_makeshlibs -p$(p_lib) -V '$(p_lib) (>= $(DEB_STDCXX_SOVERSION))'
+	cat debian/$(p_lib)/DEBIAN/shlibs >> debian/shlibs.local
+	dh_shlibdeps \
+		-L$(p_lgcc) -l:$(d)/$(PF)/lib:$(d_lgcc)/lib:\
+		-p$(p_lib)
+	dh_gencontrol -p$(p_lib) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_lib)
+	dh_md5sums -p$(p_lib)
+	dh_builddeb -p$(p_lib)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64stdcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lib64)
+	dh_installdirs -p$(p_lib64) \
+		$(docdir) \
+		$(PF)/lib64
+
+	cp -a $(d)/$(PF)/lib64/libstdc++.so.* \
+		$(d_lib64)/$(PF)/lib64/.
+
+	dh_strip -p$(p_lib64)
+
+	debian/dh_doclink -p$(p_lib64) $(p_base)
+	debian/dh_rmemptydirs -p$(p_lib64)
+
+	dh_compress -p$(p_lib64)
+	dh_fixperms -p$(p_lib64)
+	dh_makeshlibs -p$(p_lib64) -V '$(p_lib64) (>= $(DEB_STDCXX_SOVERSION))'
+# pass explicit dependencies to dh_shlibdeps
+#	dh_shlibdeps -p$(p_lib64) -L $(p_l64gcc) -l $(d_l64gcc)/lib
+#/usr/bin/ldd: line 1: /lib/ld64.so.1: cannot execute binary file
+#dpkg-shlibdeps: failure: ldd on `debian/lib64gcc1/lib64/libgcc_s.so.1' gave error exit status 1
+	echo 'shlibs:Depends=$(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))' \
+		> debian/$(p_lib64).substvars
+	dh_gencontrol -p$(p_lib64) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_lib64)
+	dh_md5sums -p$(p_lib64)
+	dh_builddeb -p$(p_lib64)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64stdcxxdbg: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_dbg64)
+	dh_installdirs -p$(p_dbg64) \
+		$(PF)/lib64
+ifeq ($(with_lib64cxx),yes)
+	cp -a $(d)/$(PF)/lib64/libstdc++.so.* \
+		$(d_dbg64)/$(PF)/lib64/.
+	dh_strip -p$(p_dbg64) --keep-debug
+	rm -f $(d_dbg64)/$(PF)/lib64/libstdc++.so.*
+endif
+
+#	mv $(d)/$(PF)/lib64/debug $(d_dbg64)/$(PF)/lib64/.
+	rm -f $(d_dbg64)/$(PF)/lib64/debug/libstdc++_pic.a
+	rm -f $(d_dbg64)/$(PF)/lib64/debug/libstdc++.la
+
+	debian/dh_doclink -p$(p_dbg64) $(p_base)
+	debian/dh_rmemptydirs -p$(p_dbg64)
+
+	dh_compress -p$(p_dbg64)
+	dh_fixperms -p$(p_dbg64)
+	dh_gencontrol -p$(p_dbg64) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_dbg64)
+	dh_md5sums -p$(p_dbg64)
+	dh_builddeb -p$(p_dbg64)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32stdcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_lib32)
+
+	dh_installdirs -p$(p_lib32) \
+		$(docdir) \
+		$(lib32)
+
+	cp -a $(d)/$(lib32)/libstdc++.so.* \
+		$(d_lib32)/$(lib32)/.
+
+	debian/dh_doclink -p$(p_lib32) $(p_base)
+	debian/dh_rmemptydirs -p$(p_lib32)
+
+	dh_strip -p$(p_lib32)
+	dh_compress -p$(p_lib32)
+	dh_fixperms -p$(p_lib32)
+	dh_makeshlibs -p$(p_lib32) -V '$(p_lib32) (>= $(DEB_STDCXX_SOVERSION))'
+	dh_gencontrol -p$(p_lib32) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_lib32)
+	dh_md5sums -p$(p_lib32)
+	dh_builddeb -p$(p_lib32)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32stdcxxdbg: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_dbg32)
+	dh_installdirs -p$(p_dbg32) \
+		$(lib32)
+
+ifeq ($(with_lib32cxx),yes)
+	cp -a $(d)/$(lib32)/libstdc++.so.* \
+		$(d_dbg32)/$(lib32)/.
+	dh_strip -p$(p_dbg32) --keep-debug
+	rm -f $(d_dbg32)/$(lib32)/libstdc++.so.*
+endif
+
+	mv $(d)/$(lib32)/debug $(d_dbg32)/$(lib32)/.
+	rm -f $(d_dbg32)/$(lib32)/debug/libstdc++_pic.a
+	rm -f $(d_dbg32)/$(lib32)/debug/libstdc++.la
+
+	debian/dh_doclink -p$(p_dbg32) $(p_base)
+	debian/dh_rmemptydirs -p$(p_dbg32)
+
+	dh_compress -p$(p_dbg32)
+	dh_fixperms -p$(p_dbg32)
+	dh_gencontrol -p$(p_dbg32) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_dbg32)
+	dh_md5sums -p$(p_dbg32)
+	dh_builddeb -p$(p_dbg32)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+libcxxdev_deps = $(install_stamp)
+ifeq ($(with_libcxx),yes)
+  libcxxdev_deps += $(binary_stamp)-libstdcxx
+endif
+ifeq ($(with_check),yes)
+  libcxxdev_deps += debian/README.libstdc++-baseline
+endif
+$(binary_stamp)-libstdcxx-dev: $(libcxxdev_deps)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_dev) $(d_pic)
+	dh_installdirs -p$(p_dev) $(dirs_dev)
+	dh_installdirs -p$(p_pic) $(dirs_pic)
+	dh_installdirs -p$(p_dbg) $(dirs_dbg)
+
+	: # - correct libstdc++-v3 file locations
+	mv $(d)/$(PF)/$(libdir)/libsupc++.a $(d)/$(gcc_lib_dir)/
+	mv $(d)/$(PF)/$(libdir)/libstdc++.{a,so} $(d)/$(gcc_lib_dir)/
+	ln -sf ../../../$(DEB_TARGET_GNU_TYPE)/libstdc++.so.$(CXX_SONAME) \
+		$(d)/$(gcc_lib_dir)/libstdc++.so
+	mv $(d)/$(PF)/$(libdir)/libstdc++_pic.a $(d)/$(gcc_lib_dir)/
+
+	rm -f $(d)/$(PF)/$(libdir)/debug/libstdc++_pic.a
+	rm -f $(d)/$(PF)/lib64/debug/libstdc++_pic.a
+
+	: # remove precompiled headers
+	-find $(d) -type d -name '*.gch' | xargs rm -rf
+
+	for i in $(d)/$(PF)/include/c++/$(GCC_VERSION)/*-linux; do \
+	  if [ -d $$i ]; then mv $$i $$i-gnu; fi; \
+	done
+
+	DH_COMPAT=2 dh_movefiles -p$(p_dev) $(files_dev)
+	DH_COMPAT=2 dh_movefiles -p$(p_pic) $(files_pic)
+	DH_COMPAT=2 dh_movefiles -p$(p_dbg) $(files_dbg)
+
+	dh_link -p$(p_dev) \
+		/$(PF)/$(libdir)/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/libstdc++.so \
+		/$(cxx_inc_dir) /$(PF)/include/c++/$(BASE_VERSION)
+
+	debian/dh_doclink -p$(p_dev) $(p_base)
+	debian/dh_doclink -p$(p_pic) $(p_base)
+	debian/dh_doclink -p$(p_dbg) $(p_base)
+	cp -p $(srcdir)/libstdc++-v3/ChangeLog \
+		$(d_dev)/$(docdir)/$(p_base)/C++/changelog.libstdc++
+ifeq ($(with_check),yes)
+	cp -p debian/README.libstdc++-baseline \
+		$(d_dev)/$(docdir)/$(p_base)/C++/README.libstdc++-baseline
+	if [ -f $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt ]; \
+	then \
+	  cp -p $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt \
+	    $(d_dev)/$(docdir)/$(p_base)/C++/libstdc++_symbols.txt; \
+	fi
+endif
+	cp -p $(srcdir)/libstdc++-v3/config/linker-map.gnu \
+		$(d_pic)/$(gcc_lib_dir)/libstdc++_pic.map
+
+ifeq ($(with_cxxdev),yes)
+	debian/dh_rmemptydirs -p$(p_dev)
+	debian/dh_rmemptydirs -p$(p_pic)
+	debian/dh_rmemptydirs -p$(p_dbg)
+endif
+
+ifeq ($(with_libcxx),yes)
+	cp -a $(d)/$(PF)/$(libdir)/libstdc++.so.* \
+		$(d_dbg)/$(PF)/$(libdir)/
+	dh_strip -p$(p_dbg) --keep-debug
+	rm -f $(d_dbg)/$(PF)/$(libdir)/libstdc++.so.*
+endif
+
+	dh_strip -p$(p_dev) --dbg-package=$(p_lib)
+	dh_strip -p$(p_pic)
+
+	dh_compress -p$(p_dev) -p$(p_pic) -p$(p_dbg) -X.txt
+	dh_fixperms -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+ifeq ($(biarch),yes)
+	dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg) -Xlib64
+else
+	dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg) -Xlib32/debug
+endif
+	dh_gencontrol -p$(p_dev) -p$(p_pic) -p$(p_dbg) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_md5sums -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_builddeb -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+
+doxygen_doc_dir = $(buildlibdir)/libstdc++-v3/docs/doxygen
+
+doxygen-docs: $(build_doxygen_stamp)
+$(build_doxygen_stamp):
+	rm -rf $(doxygen_doc_dir)/html*
+	$(MAKE) -C $(buildlibdir)/libstdc++-v3 SHELL=/bin/bash doxygen
+	$(MAKE) -C $(buildlibdir)/libstdc++-v3 SHELL=/bin/bash doxygen-man
+	sed -e 's,http://gcc\.gnu\.org/onlinedocs/libstdc++,../html,g' \
+	    -e 's,<title>Main Page</title>,<title>libstdc++-v3 Source: Main Index</title>,' \
+	  $(doxygen_doc_dir)/html_user/index.html \
+	    > $(doxygen_doc_dir)/html_user/index.html.new
+	mv -f $(doxygen_doc_dir)/html_user/index.html.new \
+	    $(doxygen_doc_dir)/html_user/index.html
+
+	-find $(doxygen_doc_dir)/html_user -name 'struct*' -empty | xargs rm -f
+
+	touch $@
+
+$(binary_stamp)-libstdcxx-doc: $(install_stamp) doxygen-docs
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_libd)
+	dh_installdirs -p$(p_libd) \
+		$(docdir)/$(p_base)/libstdc++ \
+		$(PF)/share/man
+
+#	debian/dh_doclink -p$(p_libd) $(p_base)
+	dh_link -p$(p_libd) /usr/share/doc/$(p_base) /usr/share/doc/$(p_libd)
+	dh_installdocs -p$(p_libd)
+	rm -f $(d_libd)/$(docdir)/$(p_base)/copyright
+
+	cp -a $(srcdir)/libstdc++-v3/docs/html \
+		$(d_libd)/$(docdir)/$(p_base)/libstdc++/.
+	ln -sf documentation.html \
+		$(d_libd)/$(docdir)/$(p_base)/libstdc++/html/index.html
+	-find $(d_libd)/$(docdir)/$(p_base)/libstdc++/ -name CVS -type d \
+		| xargs rm -rf
+
+	cp -a $(doxygen_doc_dir)/html_user \
+		$(d_libd)/$(docdir)/$(p_base)/libstdc++/.
+	cp -a $(doxygen_doc_dir)/man/man3 \
+		$(d_libd)/$(PF)/share/man/.
+	cp -p $(srcdir)/libstdc++-v3/docs/doxygen/Intro.3 \
+		$(d_libd)/$(PF)/share/man/man3/C++Intro.3
+
+	mkdir -p $(d_libd)/usr/share/lintian/overrides
+	cp -p debian/$(p_libd).overrides \
+		$(d_libd)/usr/share/lintian/overrides/$(p_libd)
+
+	dh_compress -p$(p_libd) -Xhtml/17_intro -X.txt -X.tag
+	dh_fixperms -p$(p_libd)
+	dh_gencontrol -p$(p_libd) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_libd)
+	dh_md5sums -p$(p_libd)
+	dh_builddeb -p$(p_libd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gcc-4.1-4.1.2.orig/debian/patches/pr20218.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr20218.dpatch
@@ -0,0 +1,344 @@
+#! /bin/sh -e
+
+# DP: Backport of PR middle-end/20218 to the 4.1 branch.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-12-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	Backport from mainline:
+	2006-12-11  H.J. Lu  <hongjiu.lu@intel.com>
+	PR middle-end/17982
+	PR middle-end/20218
+	* cgraphunit.c (cgraph_optimize): Remove call to
+	process_pending_assemble_externals.
+
+	* config/elfos.h (ASM_OUTPUT_EXTERNAL): New.
+
+	* config/ia64/hpux.h (TARGET_ASM_FILE_END): Removed.
+
+	* config/ia64/ia64.c (ia64_asm_output_external): Rewritten.
+	(ia64_hpux_add_extern_decl): Removed.
+	(ia64_hpux_file_end): Likewise.
+	(extern_func_list): Likewise.
+	(extern_func_head): Likewise.
+
+	* output.h (assemble_external): Update comments.
+	(default_elf_asm_output_external): New.
+	(maybe_assemble_visibility): New.
+
+	* toplev.c (compile_file): Update comment.
+
+	* varasm.c (assemble_external): Always put it on
+	pending_assemble_externals.
+	(maybe_assemble_visibility): Make it extern and return int.
+	(default_elf_asm_output_external): New.
+
+--- gcc/cgraphunit.c.global	2007-01-09 05:24:35.000000000 -0800
++++ gcc/cgraphunit.c	2007-01-09 05:30:01.000000000 -0800
+@@ -1330,8 +1330,6 @@ cgraph_optimize (void)
+       return;
+     }
+ 
+-  process_pending_assemble_externals ();
+-  
+   /* Frontend may output common variables after the unit has been finalized.
+      It is safe to deal with them here as they are always zero initialized.  */
+   cgraph_varpool_analyze_pending_decls ();
+--- gcc/config/elfos.h.global	2006-11-18 06:33:14.000000000 -0800
++++ gcc/config/elfos.h	2007-01-09 05:29:06.000000000 -0800
+@@ -494,3 +494,13 @@ Boston, MA 02110-1301, USA.  */
+         fprintf ((FILE), "\"\n");					\
+     }									\
+   while (0)
++
++/* A C statement (sans semicolon) to output to the stdio stream STREAM
++   any text necessary for declaring the name of an external symbol
++   named NAME whch is referenced in this compilation but not defined.
++   It is needed to properly support non-default visibility.  */
++
++#ifndef ASM_OUTPUT_EXTERNAL
++#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
++  default_elf_asm_output_external (FILE, DECL, NAME)
++#endif
+--- gcc/config/ia64/hpux.h.global	2006-11-18 06:32:57.000000000 -0800
++++ gcc/config/ia64/hpux.h	2007-01-09 05:29:06.000000000 -0800
+@@ -144,10 +144,6 @@ do {								\
+    definitions, so do not use them in gthr-posix.h.  */
+ #define GTHREAD_USE_WEAK 0
+ 
+-/* Put out the needed function declarations at the end.  */
+-
+-#define TARGET_ASM_FILE_END ia64_hpux_file_end
+-
+ #undef CTORS_SECTION_ASM_OP
+ #define CTORS_SECTION_ASM_OP  "\t.section\t.init_array,\t\"aw\",\"init_array\""
+ 
+--- gcc/config/ia64/ia64.c.global	2006-12-29 18:34:00.000000000 -0800
++++ gcc/config/ia64/ia64.c	2007-01-09 05:29:06.000000000 -0800
+@@ -242,10 +242,6 @@ static void ia64_rwreloc_select_rtx_sect
+ 					     unsigned HOST_WIDE_INT)
+      ATTRIBUTE_UNUSED;
+ static unsigned int ia64_section_type_flags (tree, const char *, int);
+-static void ia64_hpux_add_extern_decl (tree decl)
+-     ATTRIBUTE_UNUSED;
+-static void ia64_hpux_file_end (void)
+-     ATTRIBUTE_UNUSED;
+ static void ia64_init_libfuncs (void)
+      ATTRIBUTE_UNUSED;
+ static void ia64_hpux_init_libfuncs (void)
+@@ -4983,49 +4979,6 @@ ia64_secondary_reload_class (enum reg_cl
+ }
+ 
+ 
+-/* Emit text to declare externally defined variables and functions, because
+-   the Intel assembler does not support undefined externals.  */
+-
+-void
+-ia64_asm_output_external (FILE *file, tree decl, const char *name)
+-{
+-  int save_referenced;
+-
+-  /* GNU as does not need anything here, but the HP linker does need
+-     something for external functions.  */
+-
+-  if (TARGET_GNU_AS
+-      && (!TARGET_HPUX_LD
+-	  || TREE_CODE (decl) != FUNCTION_DECL
+-	  || strstr (name, "__builtin_") == name))
+-    return;
+-
+-  /* ??? The Intel assembler creates a reference that needs to be satisfied by
+-     the linker when we do this, so we need to be careful not to do this for
+-     builtin functions which have no library equivalent.  Unfortunately, we
+-     can't tell here whether or not a function will actually be called by
+-     expand_expr, so we pull in library functions even if we may not need
+-     them later.  */
+-  if (! strcmp (name, "__builtin_next_arg")
+-      || ! strcmp (name, "alloca")
+-      || ! strcmp (name, "__builtin_constant_p")
+-      || ! strcmp (name, "__builtin_args_info"))
+-    return;
+-
+-  if (TARGET_HPUX_LD)
+-    ia64_hpux_add_extern_decl (decl);
+-  else
+-    {
+-      /* assemble_name will set TREE_SYMBOL_REFERENCED, so we must save and
+-         restore it.  */
+-      save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl));
+-      if (TREE_CODE (decl) == FUNCTION_DECL)
+-        ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
+-      (*targetm.asm_out.globalize_label) (file, name);
+-      TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = save_referenced;
+-    }
+-}
+-
+ /* Parse the -mfixed-range= option string.  */
+ 
+ static void
+@@ -8514,55 +8467,33 @@ ia64_hpux_function_arg_padding (enum mac
+    return DEFAULT_FUNCTION_ARG_PADDING (mode, type);
+ }
+ 
+-/* Linked list of all external functions that are to be emitted by GCC.
+-   We output the name if and only if TREE_SYMBOL_REFERENCED is set in
+-   order to avoid putting out names that are never really used.  */
+-
+-struct extern_func_list GTY(())
+-{
+-  struct extern_func_list *next;
+-  tree decl;
+-};
+-
+-static GTY(()) struct extern_func_list *extern_func_head;
+-
+-static void
+-ia64_hpux_add_extern_decl (tree decl)
+-{
+-  struct extern_func_list *p = ggc_alloc (sizeof (struct extern_func_list));
+-
+-  p->decl = decl;
+-  p->next = extern_func_head;
+-  extern_func_head = p;
+-}
+-
+-/* Print out the list of used global functions.  */
++/* Emit text to declare externally defined variables and functions, because
++   the Intel assembler does not support undefined externals.  */
+ 
+-static void
+-ia64_hpux_file_end (void)
++void
++ia64_asm_output_external (FILE *file, tree decl, const char *name)
+ {
+-  struct extern_func_list *p;
+-
+-  for (p = extern_func_head; p; p = p->next)
+-    {
+-      tree decl = p->decl;
+-      tree id = DECL_ASSEMBLER_NAME (decl);
+-
+-      gcc_assert (id);
+-
+-      if (!TREE_ASM_WRITTEN (decl) && TREE_SYMBOL_REFERENCED (id))
+-        {
+-	  const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
+-
+-	  TREE_ASM_WRITTEN (decl) = 1;
+-	  (*targetm.asm_out.globalize_label) (asm_out_file, name);
+-	  fputs (TYPE_ASM_OP, asm_out_file);
+-	  assemble_name (asm_out_file, name);
+-	  fprintf (asm_out_file, "," TYPE_OPERAND_FMT "\n", "function");
+-        }
++  /* We output the name if and only if TREE_SYMBOL_REFERENCED is
++     set in order to avoid putting out names that are never really
++     used. */
++  if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
++    {
++      /* maybe_assemble_visibility will return 1 if the assembler
++	 visibility directive is outputed.  */
++      int need_visibility = ((*targetm.binds_local_p) (decl)
++			     && maybe_assemble_visibility (decl));
++
++      /* GNU as does not need anything here, but the HP linker does
++	 need something for external functions.  */
++      if ((TARGET_HPUX_LD || !TARGET_GNU_AS)
++	  && TREE_CODE (decl) == FUNCTION_DECL)
++	{
++	  ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
++	  (*targetm.asm_out.globalize_label) (file, name);
++	}
++      else if (need_visibility && !TARGET_GNU_AS)
++	(*targetm.asm_out.globalize_label) (file, name);
+     }
+-
+-  extern_func_head = 0;
+ }
+ 
+ /* Set SImode div/mod functions, init_integral_libfuncs only initializes
+--- gcc/output.h.global	2006-11-18 06:33:17.000000000 -0800
++++ gcc/output.h	2007-01-09 05:29:06.000000000 -0800
+@@ -274,9 +274,9 @@ extern void assemble_end_function (tree,
+    initial value (that will be done by the caller).  */
+ extern void assemble_variable (tree, int, int, int);
+ 
+-/* Output something to declare an external symbol to the assembler.
+-   (Most assemblers don't need this, so we normally output nothing.)
+-   Do nothing if DECL is not external.  */
++/* Queue for outputing something to declare an external symbol to the
++   assembler.  (Most assemblers don't need this, so we normally output
++   nothing.)  Do nothing if DECL is not external.  */
+ extern void assemble_external (tree);
+ 
+ /* Assemble code to leave SIZE bytes of zeros.  */
+@@ -586,6 +586,10 @@ extern void default_file_start (void);
+ extern void file_end_indicate_exec_stack (void);
+ extern bool default_valid_pointer_mode (enum machine_mode);
+ 
++extern void default_elf_asm_output_external (FILE *file, tree,
++					     const char *);
++extern int maybe_assemble_visibility (tree);
++
+ extern int default_address_cost (rtx);
+ 
+ /* dbxout helper functions */
+--- gcc/toplev.c.global	2006-11-18 06:33:17.000000000 -0800
++++ gcc/toplev.c	2007-01-09 05:29:06.000000000 -0800
+@@ -1033,9 +1033,7 @@ compile_file (void)
+ 
+   dw2_output_indirect_constants ();
+ 
+-  /* Flush any pending external directives.  cgraph did this for
+-     assemble_external calls from the front end, but the RTL
+-     expander can also generate them.  */
++  /* Flush any pending external directives.  */
+   process_pending_assemble_externals ();
+ 
+   /* Attach a special .ident directive to the end of the file to identify
+--- gcc/varasm.c.global	2006-11-18 06:33:17.000000000 -0800
++++ gcc/varasm.c	2007-01-09 05:30:40.000000000 -0800
+@@ -126,7 +126,6 @@ static unsigned HOST_WIDE_INT array_size
+ static unsigned min_align (unsigned, unsigned);
+ static void output_constructor (tree, unsigned HOST_WIDE_INT, unsigned int);
+ static void globalize_decl (tree);
+-static void maybe_assemble_visibility (tree);
+ static int in_named_entry_eq (const void *, const void *);
+ static hashval_t in_named_entry_hash (const void *);
+ static void initialize_cold_section_name (void);
+@@ -1935,11 +1934,10 @@ assemble_external (tree decl ATTRIBUTE_U
+   if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
+     return;
+ 
+-  if (flag_unit_at_a_time)
+-    pending_assemble_externals = tree_cons (0, decl,
+-					    pending_assemble_externals);
+-  else
+-    assemble_external_real (decl);
++  /* We want to output external symbols at very last to check if they
++     are references or not.  */
++  pending_assemble_externals = tree_cons (0, decl,
++					  pending_assemble_externals);
+ #endif
+ }
+ 
+@@ -4970,13 +4968,18 @@ default_assemble_visibility (tree decl, 
+ 
+ /* A helper function to call assemble_visibility when needed for a decl.  */
+ 
+-static void
++int
+ maybe_assemble_visibility (tree decl)
+ {
+   enum symbol_visibility vis = DECL_VISIBILITY (decl);
+ 
+   if (vis != VISIBILITY_DEFAULT)
+-    targetm.asm_out.visibility (decl, vis);
++    {
++      targetm.asm_out.visibility (decl, vis);
++      return 1;
++    }
++  else
++    return 0;
+ }
+ 
+ /* Returns 1 if the target configuration supports defining public symbols
+@@ -5752,4 +5755,19 @@ file_end_indicate_exec_stack (void)
+   named_section_flags (".note.GNU-stack", flags);
+ }
+ 
++/* Emit text to declare externally defined symbols. It is needed to
++   properly support non-default visibility.  */
++void
++default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED,
++				 tree decl,
++				 const char *name ATTRIBUTE_UNUSED)
++{
++  /* We output the name if and only if TREE_SYMBOL_REFERENCED is
++     set in order to avoid putting out names that are never really
++     used. */
++  if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
++      && targetm.binds_local_p (decl))
++    maybe_assemble_visibility (decl);
++}
++
+ #include "gt-varasm.h"
--- gcc-4.1-4.1.2.orig/debian/patches/libffi-backport2.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libffi-backport2.dpatch
@@ -0,0 +1,2241 @@
+#! /bin/sh -e
+
+# DP: Add missing bits for the libffi backport from the trunk
+# DP: - parisc chunks
+# DP: - missing testcases in testsuite/libffi.call
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN 4.1/libffi/include/ffi.h.in libffi/include/ffi.h.in
+--- 4.1/libffi/include/ffi.h.in	2004-08-30 17:43:03.000000000 +0200
++++ libffi/include/ffi.h.in	2006-07-26 11:41:43.000000000 +0200
+@@ -112,16 +112,24 @@
+  #error "int size not supported"
+ #endif
+ 
+-#define ffi_type_ulong         ffi_type_uint64
+-#define ffi_type_slong         ffi_type_sint64
+ #if LONG_MAX == 2147483647
+ # if FFI_LONG_LONG_MAX != 9223372036854775807
+-  #error "no 64-bit data type supported"
++ #error "no 64-bit data type supported"
+ # endif
+ #elif LONG_MAX != 9223372036854775807
+  #error "long size not supported"
+ #endif
+ 
++#if LONG_MAX == 2147483647
++# define ffi_type_ulong        ffi_type_uint32
++# define ffi_type_slong        ffi_type_sint32
++#elif LONG_MAX == 9223372036854775807
++# define ffi_type_ulong        ffi_type_uint64
++# define ffi_type_slong        ffi_type_sint64
++#else
++ #error "long size not supported"
++#endif
++
+ /* The closure code assumes that this works on pointers, i.e. a size_t	*/
+ /* can hold a pointer.							*/
+ 
+diff -urN 4.1/libffi/src/pa/ffi.c libffi/src/pa/ffi.c
+--- 4.1/libffi/src/pa/ffi.c	2006-08-15 01:18:41.799179248 +0200
++++ libffi/src/pa/ffi.c	2006-05-24 04:11:35.000000000 +0200
+@@ -2,6 +2,7 @@
+    ffi.c - (c) 2003-2004 Randolph Chung <tausq@debian.org>
+ 
+    HPPA Foreign Function Interface
++   HP-UX PA ABI support (c) 2006 Free Software Foundation, Inc.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+@@ -134,7 +135,7 @@
+    NOTE: We load floating point args in this function... that means we
+    assume gcc will not mess with fp regs in here.  */
+ 
+-void ffi_prep_args_LINUX(UINT32 *stack, extended_cif *ecif, unsigned bytes)
++void ffi_prep_args_pa32(UINT32 *stack, extended_cif *ecif, unsigned bytes)
+ {
+   register unsigned int i;
+   register ffi_type **p_arg;
+@@ -213,6 +214,14 @@
+ 	    }
+ 	  break;
+ 
++#ifdef PA_HPUX
++	case FFI_TYPE_LONGDOUBLE:
++	  /* Long doubles are passed in the same manner as structures
++	     larger than 8 bytes.  */
++	  *(UINT32 *)(stack - slot) = (UINT32)(*p_argv);
++	  break;
++#endif
++
+ 	case FFI_TYPE_STRUCT:
+ 
+ 	  /* Structs smaller or equal than 4 bytes are passed in one
+@@ -262,7 +271,7 @@
+   return;
+ }
+ 
+-static void ffi_size_stack_LINUX(ffi_cif *cif)
++static void ffi_size_stack_pa32(ffi_cif *cif)
+ {
+   ffi_type **ptr;
+   int i;
+@@ -280,6 +289,9 @@
+ 	  z += 2 + (z & 1); /* must start on even regs, so we may waste one */
+ 	  break;
+ 
++#ifdef PA_HPUX
++	case FFI_TYPE_LONGDOUBLE:
++#endif
+ 	case FFI_TYPE_STRUCT:
+ 	  z += 1; /* pass by ptr, callee will copy */
+ 	  break;
+@@ -311,6 +323,13 @@
+       cif->flags = (unsigned) cif->rtype->type;
+       break;
+ 
++#ifdef PA_HPUX
++    case FFI_TYPE_LONGDOUBLE:
++      /* Long doubles are treated like a structure.  */
++      cif->flags = FFI_TYPE_STRUCT;
++      break;
++#endif
++
+     case FFI_TYPE_STRUCT:
+       /* For the return type we have to check the size of the structures.
+ 	 If the size is smaller or equal 4 bytes, the result is given back
+@@ -334,8 +353,8 @@
+      own stack sizing.  */
+   switch (cif->abi)
+     {
+-    case FFI_LINUX:
+-      ffi_size_stack_LINUX(cif);
++    case FFI_PA32:
++      ffi_size_stack_pa32(cif);
+       break;
+ 
+     default:
+@@ -346,7 +365,7 @@
+   return FFI_OK;
+ }
+ 
+-extern void ffi_call_LINUX(void (*)(UINT32 *, extended_cif *, unsigned),
++extern void ffi_call_pa32(void (*)(UINT32 *, extended_cif *, unsigned),
+ 			  extended_cif *, unsigned, unsigned, unsigned *,
+ 			  void (*fn)());
+ 
+@@ -360,17 +379,25 @@
+   /* If the return value is a struct and we don't have a return
+      value address then we need to make one.  */
+ 
+-  if (rvalue == NULL && cif->rtype->type == FFI_TYPE_STRUCT)
+-    ecif.rvalue = alloca(cif->rtype->size);
++  if (rvalue == NULL
++#ifdef PA_HPUX
++      && (cif->rtype->type == FFI_TYPE_STRUCT
++	  || cif->rtype->type == FFI_TYPE_LONGDOUBLE))
++#else
++      && cif->rtype->type == FFI_TYPE_STRUCT)
++#endif
++    {
++      ecif.rvalue = alloca(cif->rtype->size);
++    }
+   else
+     ecif.rvalue = rvalue;
+ 
+ 
+   switch (cif->abi)
+     {
+-    case FFI_LINUX:
+-      debug(3, "Calling ffi_call_LINUX: ecif=%p, bytes=%u, flags=%u, rvalue=%p, fn=%p\n", &ecif, cif->bytes, cif->flags, ecif.rvalue, (void *)fn);
+-      ffi_call_LINUX(ffi_prep_args_LINUX, &ecif, cif->bytes,
++    case FFI_PA32:
++      debug(3, "Calling ffi_call_pa32: ecif=%p, bytes=%u, flags=%u, rvalue=%p, fn=%p\n", &ecif, cif->bytes, cif->flags, ecif.rvalue, (void *)fn);
++      ffi_call_pa32(ffi_prep_args_pa32, &ecif, cif->bytes,
+ 		     cif->flags, ecif.rvalue, fn);
+       break;
+ 
+@@ -385,7 +412,7 @@
+    the stack, and we need to fill them into a cif structure and invoke
+    the user function. This really ought to be in asm to make sure
+    the compiler doesn't do things we don't expect.  */
+-ffi_status ffi_closure_inner_LINUX(ffi_closure *closure, UINT32 *stack)
++ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack)
+ {
+   ffi_cif *cif;
+   void **avalue;
+@@ -432,6 +459,7 @@
+ 	  break;
+ 
+ 	case FFI_TYPE_FLOAT:
++#ifdef PA_LINUX
+ 	  /* The closure call is indirect.  In Linux, floating point
+ 	     arguments in indirect calls with a prototype are passed
+ 	     in the floating point registers instead of the general
+@@ -445,17 +473,20 @@
+ 	    case 2: fstw(fr6, (void *)(stack - slot)); break;
+ 	    case 3: fstw(fr7, (void *)(stack - slot)); break;
+ 	    }
++#endif
+ 	  avalue[i] = (void *)(stack - slot);
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+ 	  slot += (slot & 1) ? 1 : 2;
++#ifdef PA_LINUX
+ 	  /* See previous comment for FFI_TYPE_FLOAT.  */
+ 	  switch (slot - FIRST_ARG_SLOT)
+ 	    {
+ 	    case 1: fstd(fr5, (void *)(stack - slot)); break;
+ 	    case 3: fstd(fr7, (void *)(stack - slot)); break;
+ 	    }
++#endif
+ 	  avalue[i] = (void *)(stack - slot);
+ 	  break;
+ 
+@@ -579,7 +610,7 @@
+    cif specifies the argument and result types for fun.
+    The cif must already be prep'ed.  */
+ 
+-extern void ffi_closure_LINUX(void);
++extern void ffi_closure_pa32(void);
+ 
+ ffi_status
+ ffi_prep_closure (ffi_closure* closure,
+@@ -588,12 +619,16 @@
+ 		  void *user_data)
+ {
+   UINT32 *tramp = (UINT32 *)(closure->tramp);
++#ifdef PA_HPUX
++  UINT32 *tmp;
++#endif
+ 
+-  FFI_ASSERT (cif->abi == FFI_LINUX);
++  FFI_ASSERT (cif->abi == FFI_PA32);
+ 
+   /* Make a small trampoline that will branch to our
+      handler function. Use PC-relative addressing.  */
+ 
++#ifdef PA_LINUX
+   tramp[0] = 0xeaa00000; /* b,l .+8,%r21        ; %r21 <- pc+8 */
+   tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21    ; mask priv bits */
+   tramp[2] = 0x4aa10028; /* ldw 20(%r21),%r1    ; load plabel */
+@@ -601,7 +636,7 @@
+   tramp[4] = 0x0c201096; /* ldw 0(%r1),%r22     ; address of handler */
+   tramp[5] = 0xeac0c000; /* bv%r0(%r22)         ; branch to handler */
+   tramp[6] = 0x0c281093; /* ldw 4(%r1),%r19     ; GP of handler */
+-  tramp[7] = ((UINT32)(ffi_closure_LINUX) & ~2);
++  tramp[7] = ((UINT32)(ffi_closure_pa32) & ~2);
+ 
+   /* Flush d/icache -- have to flush up 2 two lines because of
+      alignment.  */
+@@ -622,6 +657,45 @@
+ 		   : "r"((unsigned long)tramp & ~31),
+ 		     "r"(32 /* stride */)
+ 		   : "memory");
++#endif
++
++#ifdef PA_HPUX
++  tramp[0] = 0xeaa00000; /* b,l .+8,%r21        ; %r21 <- pc+8  */
++  tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21    ; mask priv bits  */
++  tramp[2] = 0x4aa10038; /* ldw 28(%r21),%r1    ; load plabel  */
++  tramp[3] = 0x36b53ff1; /* ldo -8(%r21),%r21   ; get closure addr  */
++  tramp[4] = 0x0c201096; /* ldw 0(%r1),%r22     ; address of handler  */
++  tramp[5] = 0x02c010b4; /* ldsid (%r22),%r20   ; load space id  */
++  tramp[6] = 0x00141820; /* mtsp %r20,%sr0      ; into %sr0  */
++  tramp[7] = 0xe2c00000; /* be 0(%sr0,%r22)     ; branch to handler  */
++  tramp[8] = 0x0c281093; /* ldw 4(%r1),%r19     ; GP of handler  */
++  tramp[9] = ((UINT32)(ffi_closure_pa32) & ~2);
++
++  /* Flush d/icache -- have to flush three lines because of alignment.  */
++  __asm__ volatile(
++		   "copy %1,%0\n\t"
++		   "fdc,m %2(%0)\n\t"
++		   "fdc,m %2(%0)\n\t"
++		   "fdc,m %2(%0)\n\t"
++		   "ldsid (%1),%0\n\t"
++		   "mtsp %0,%%sr0\n\t"
++		   "copy %1,%0\n\t"
++		   "fic,m %2(%%sr0,%0)\n\t"
++		   "fic,m %2(%%sr0,%0)\n\t"
++		   "fic,m %2(%%sr0,%0)\n\t"
++		   "sync\n\t"
++		   "nop\n\t"
++		   "nop\n\t"
++		   "nop\n\t"
++		   "nop\n\t"
++		   "nop\n\t"
++		   "nop\n\t"
++		   "nop\n"
++		   : "=&r" ((unsigned long)tmp)
++		   : "r" ((unsigned long)tramp & ~31),
++		     "r" (32/* stride */)
++		   : "memory");
++#endif
+ 
+   closure->cif  = cif;
+   closure->user_data = user_data;
+diff -urN 4.1/libffi/src/pa/ffitarget.h libffi/src/pa/ffitarget.h
+--- 4.1/libffi/src/pa/ffitarget.h	2006-08-15 01:18:41.798179400 +0200
++++ libffi/src/pa/ffitarget.h	2006-04-06 00:02:56.000000000 +0200
+@@ -35,9 +35,20 @@
+ typedef enum ffi_abi {
+   FFI_FIRST_ABI = 0,
+ 
+-#ifdef PA
+-  FFI_LINUX,
+-  FFI_DEFAULT_ABI = FFI_LINUX,
++#ifdef PA_LINUX
++  FFI_PA32,
++  FFI_DEFAULT_ABI = FFI_PA32,
++#endif
++
++#ifdef PA_HPUX
++  FFI_PA32,
++  FFI_DEFAULT_ABI = FFI_PA32,
++#endif
++
++#ifdef PA64_HPUX
++#error "PA64_HPUX FFI is not yet implemented"
++  FFI_PA64,
++  FFI_DEFAULT_ABI = FFI_PA64,
+ #endif
+ 
+   FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
+@@ -49,7 +60,11 @@
+ #define FFI_CLOSURES 1
+ #define FFI_NATIVE_RAW_API 0
+ 
++#ifdef PA_LINUX
+ #define FFI_TRAMPOLINE_SIZE 32
++#else
++#define FFI_TRAMPOLINE_SIZE 40
++#endif
+ 
+ #define FFI_TYPE_SMALL_STRUCT2 -1
+ #define FFI_TYPE_SMALL_STRUCT3 -2
+diff -urN 4.1/libffi/src/pa/hpux32.S libffi/src/pa/hpux32.S
+--- 4.1/libffi/src/pa/hpux32.S	1970-01-01 01:00:00.000000000 +0100
++++ libffi/src/pa/hpux32.S	2006-04-13 20:20:08.000000000 +0200
+@@ -0,0 +1,367 @@
++/* -----------------------------------------------------------------------
++   hpux32.S - Copyright (c) 2006 Free Software Foundation, Inc.
++   based on src/pa/linux.S
++
++   HP-UX PA Foreign Function Interface
++
++   Permission is hereby granted, free of charge, to any person obtaining
++   a copy of this software and associated documentation files (the
++   ``Software''), to deal in the Software without restriction, including
++   without limitation the rights to use, copy, modify, merge, publish,
++   distribute, sublicense, and/or sell copies of the Software, and to
++   permit persons to whom the Software is furnished to do so, subject to
++   the following conditions:
++
++   The above copyright notice and this permission notice shall be included
++   in all copies or substantial portions of the Software.
++
++   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
++   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
++   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++   OTHER DEALINGS IN THE SOFTWARE.
++   ----------------------------------------------------------------------- */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++	.LEVEL 1.1
++	.SPACE	$PRIVATE$
++	.IMPORT	$global$,DATA
++	.IMPORT	$$dyncall,MILLICODE
++	.SUBSPA	$DATA$
++	.align	4
++
++	/* void ffi_call_pa32(void (*)(char *, extended_cif *),
++			       extended_cif *ecif,
++			       unsigned bytes,
++			       unsigned flags,
++			       unsigned *rvalue,
++			       void (*fn)());
++	 */
++
++	.export	ffi_call_pa32,ENTRY,PRIV_LEV=3
++	.import	ffi_prep_args_pa32,CODE
++
++	.SPACE	$TEXT$
++	.SUBSPA $CODE$
++	.align	4
++
++L$FB1
++ffi_call_pa32
++	.proc
++	.callinfo	FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4
++	.entry
++	stw	%rp, -20(%sp)
++	copy	%r3, %r1
++L$CFI11
++	copy	%sp, %r3
++L$CFI12
++
++	/* Setup the stack for calling prep_args...
++	   We want the stack to look like this:
++
++	   [ Previous stack                            ] <- %r3
++
++	   [ 64-bytes register save area               ] <- %r4
++
++	   [ Stack space for actual call, passed as    ] <- %arg0
++	   [     arg0 to ffi_prep_args_pa32           ]
++
++	   [ Stack for calling prep_args               ] <- %sp
++	 */
++
++	stwm	%r1, 64(%sp)
++	stw	%r4, 12(%r3)
++L$CFI13
++	copy	%sp, %r4
++
++	addl	%arg2, %r4, %arg0	; arg stack
++	stw	%arg3, -48(%r3)		; save flags we need it later
++
++	/* Call prep_args:
++	   %arg0(stack) -- set up above
++	   %arg1(ecif)  -- same as incoming param
++	   %arg2(bytes) -- same as incoming param */
++	bl	ffi_prep_args_pa32,%r2
++	ldo	64(%arg0), %sp
++	ldo	-64(%sp), %sp
++
++	/* now %sp should point where %arg0 was pointing.  */
++
++	/* Load the arguments that should be passed in registers
++	   The fp args are loaded by the prep_args function.  */
++	ldw	-36(%sp), %arg0
++	ldw	-40(%sp), %arg1
++	ldw	-44(%sp), %arg2
++	ldw	-48(%sp), %arg3
++
++	/* in case the function is going to return a structure
++	   we need to give it a place to put the result.  */
++	ldw	-52(%r3), %ret0		; %ret0 <- rvalue
++	ldw	-56(%r3), %r22		; %r22 <- function to call
++	bl	$$dyncall, %r31		; Call the user function
++	copy	%r31, %rp
++
++	/* Prepare to store the result; we need to recover flags and rvalue.  */
++	ldw	-48(%r3), %r21		; r21 <- flags
++	ldw	-52(%r3), %r20		; r20 <- rvalue
++
++	/* Store the result according to the return type.  The most
++	   likely types should come first.  */
++
++L$checkint
++	comib,<>,n FFI_TYPE_INT, %r21, L$checkint8
++	b	L$done
++	stw	%ret0, 0(%r20)
++
++L$checkint8
++	comib,<>,n FFI_TYPE_UINT8, %r21, L$checkint16
++	b	L$done
++	stb	%ret0, 0(%r20)
++
++L$checkint16
++	comib,<>,n FFI_TYPE_UINT16, %r21, L$checkdbl
++	b	L$done
++	sth	%ret0, 0(%r20)
++
++L$checkdbl
++	comib,<>,n FFI_TYPE_DOUBLE, %r21, L$checkfloat
++	b	L$done
++	fstd	%fr4,0(%r20)
++
++L$checkfloat
++	comib,<>,n FFI_TYPE_FLOAT, %r21, L$checkll
++	b	L$done
++	fstw	%fr4L,0(%r20)
++
++L$checkll
++	comib,<>,n FFI_TYPE_UINT64, %r21, L$checksmst2
++	stw	%ret0, 0(%r20)
++	b	L$done
++	stw	%ret1, 4(%r20)
++
++L$checksmst2
++	comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, L$checksmst3
++	/* 2-byte structs are returned in ret0 as ????xxyy.  */
++	extru	%ret0, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	b	L$done
++	stb	%ret0, 0(%r20)
++
++L$checksmst3
++	comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, L$checksmst4
++	/* 3-byte structs are returned in ret0 as ??xxyyzz.  */
++	extru	%ret0, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret0, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	b	L$done
++	stb	%ret0, 0(%r20)
++
++L$checksmst4
++	comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, L$checksmst5
++	/* 4-byte structs are returned in ret0 as wwxxyyzz.  */
++	extru	%ret0, 7, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret0, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret0, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	b	L$done
++	stb	%ret0, 0(%r20)
++
++L$checksmst5
++	comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, L$checksmst6
++	/* 5 byte values are returned right justified:
++	      ret0     ret1
++	   5: ??????aa bbccddee */
++	stbs,ma	%ret0, 1(%r20)
++	extru	%ret1, 7, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	b	L$done
++	stb	%ret1, 0(%r20)
++
++L$checksmst6
++	comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, L$checksmst7
++	/* 6 byte values are returned right justified:
++	      ret0     ret1
++	   6: ????aabb ccddeeff */
++	extru	%ret0, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	stbs,ma	%ret0, 1(%r20)
++	extru	%ret1, 7, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	b	L$done
++	stb	%ret1, 0(%r20)
++
++L$checksmst7
++	comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, L$checksmst8
++	/* 7 byte values are returned right justified:
++	      ret0     ret1
++	   7: ??aabbcc ddeeffgg */
++	extru	%ret0, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret0, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	stbs,ma	%ret0, 1(%r20)
++	extru	%ret1, 7, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	b	L$done
++	stb	%ret1, 0(%r20)
++
++L$checksmst8
++	comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, L$done
++	/* 8 byte values are returned right justified:
++	      ret0     ret1
++	   8: aabbccdd eeffgghh */
++	extru	%ret0, 7, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret0, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret0, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	stbs,ma	%ret0, 1(%r20)
++	extru	%ret1, 7, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 15, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	extru	%ret1, 23, 8, %r22
++	stbs,ma	%r22, 1(%r20)
++	stb	%ret1, 0(%r20)
++
++L$done
++	/* all done, return */
++	copy	%r4, %sp	; pop arg stack
++	ldw	12(%r3), %r4
++	ldwm	-64(%sp), %r3	; .. and pop stack
++	ldw	-20(%sp), %rp
++	bv	%r0(%rp)
++	nop
++	.exit
++	.procend
++L$FE1
++
++	/* void ffi_closure_pa32(void);
++	   Called with closure argument in %r21 */
++
++	.SPACE $TEXT$
++	.SUBSPA $CODE$
++	.export ffi_closure_pa32,ENTRY,PRIV_LEV=3,RTNVAL=GR
++	.import ffi_closure_inner_pa32,CODE
++	.align 4
++L$FB2
++ffi_closure_pa32
++	.proc
++	.callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
++	.entry
++
++	stw	%rp, -20(%sp)
++	copy	%r3, %r1
++L$CFI21
++	copy	%sp, %r3
++L$CFI22
++	stwm	%r1, 64(%sp)
++
++	/* Put arguments onto the stack and call ffi_closure_inner.  */
++	stw	%arg0, -36(%r3)
++	stw	%arg1, -40(%r3)
++	stw	%arg2, -44(%r3)
++	stw	%arg3, -48(%r3)
++
++	copy	%r21, %arg0
++	bl	ffi_closure_inner_pa32, %r2
++	copy    %r3, %arg1
++	ldwm	-64(%sp), %r3
++	ldw	-20(%sp), %rp
++	ldw	-36(%sp), %ret0
++	bv	%r0(%rp)
++	ldw	-40(%sp), %ret1
++	.exit
++	.procend
++L$FE2:
++
++	.SPACE $PRIVATE$
++	.SUBSPA $DATA$
++
++	.align 4
++	.EXPORT _GLOBAL__F_ffi_call_pa32,DATA
++_GLOBAL__F_ffi_call_pa32
++L$frame1:
++	.word   L$ECIE1-L$SCIE1 ;# Length of Common Information Entry
++L$SCIE1:
++	.word   0x0     ;# CIE Identifier Tag
++	.byte   0x1     ;# CIE Version
++	.ascii "\0"     ;# CIE Augmentation
++	.uleb128 0x1    ;# CIE Code Alignment Factor
++	.sleb128 4      ;# CIE Data Alignment Factor
++	.byte   0x2     ;# CIE RA Column
++	.byte   0xc     ;# DW_CFA_def_cfa
++	.uleb128 0x1e
++	.uleb128 0x0
++	.align 4
++L$ECIE1:
++L$SFDE1:
++	.word   L$EFDE1-L$ASFDE1        ;# FDE Length
++L$ASFDE1:
++	.word   L$ASFDE1-L$frame1       ;# FDE CIE offset
++	.word   L$FB1   ;# FDE initial location
++	.word   L$FE1-L$FB1     ;# FDE address range
++
++	.byte   0x4     ;# DW_CFA_advance_loc4
++	.word   L$CFI11-L$FB1
++	.byte	0x83	;# DW_CFA_offset, column 0x3
++	.uleb128 0x0
++	.byte   0x11    ;# DW_CFA_offset_extended_sf; save r2 at [r30-20]
++	.uleb128 0x2
++	.sleb128 -5
++
++	.byte   0x4     ;# DW_CFA_advance_loc4
++	.word   L$CFI12-L$CFI11
++	.byte   0xd     ;# DW_CFA_def_cfa_register = r3
++	.uleb128 0x3
++
++	.byte   0x4     ;# DW_CFA_advance_loc4
++	.word   L$CFI13-L$CFI12
++	.byte	0x84	;# DW_CFA_offset, column 0x4
++	.uleb128 0x3
++
++	.align 4
++L$EFDE1:
++
++L$SFDE2:
++	.word   L$EFDE2-L$ASFDE2        ;# FDE Length
++L$ASFDE2:
++	.word   L$ASFDE2-L$frame1       ;# FDE CIE offset
++	.word   L$FB2   ;# FDE initial location
++	.word   L$FE2-L$FB2     ;# FDE address range
++	.byte   0x4     ;# DW_CFA_advance_loc4
++	.word   L$CFI21-L$FB2
++	.byte   0x83    ;# DW_CFA_offset, column 0x3
++	.uleb128 0x0
++	.byte   0x11    ;# DW_CFA_offset_extended_sf
++	.uleb128 0x2
++	.sleb128 -5
++
++	.byte   0x4     ;# DW_CFA_advance_loc4
++	.word   L$CFI22-L$CFI21
++	.byte   0xd     ;# DW_CFA_def_cfa_register = r3
++	.uleb128 0x3
++
++	.align 4
++L$EFDE2:
+diff -urN 4.1/libffi/src/pa/linux.S libffi/src/pa/linux.S
+--- 4.1/libffi/src/pa/linux.S	2006-08-15 01:18:41.797179552 +0200
++++ libffi/src/pa/linux.S	2006-04-13 20:20:08.000000000 +0200
+@@ -31,7 +31,7 @@
+ 	.level 1.1
+ 	.align 4
+ 
+-	/* void ffi_call_LINUX(void (*)(char *, extended_cif *),
++	/* void ffi_call_pa32(void (*)(char *, extended_cif *),
+ 			       extended_cif *ecif,
+ 			       unsigned bytes,
+ 			       unsigned flags,
+@@ -39,12 +39,12 @@
+ 			       void (*fn)());
+ 	 */
+ 
+-	.export ffi_call_LINUX,code
+-	.import ffi_prep_args_LINUX,code
++	.export ffi_call_pa32,code
++	.import ffi_prep_args_pa32,code
+ 
+-	.type ffi_call_LINUX, @function
++	.type ffi_call_pa32, @function
+ .LFB1:
+-ffi_call_LINUX:
++ffi_call_pa32:
+ 	.proc
+ 	.callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4
+ 	.entry
+@@ -63,7 +63,7 @@
+ 	   [ 64-bytes register save area               ] <- %r4
+ 
+ 	   [ Stack space for actual call, passed as    ] <- %arg0
+-	   [     arg0 to ffi_prep_args_LINUX           ]
++	   [     arg0 to ffi_prep_args_pa32           ]
+ 
+ 	   [ Stack for calling prep_args               ] <- %sp
+ 	 */
+@@ -80,7 +80,7 @@
+ 	   %arg0(stack) -- set up above
+ 	   %arg1(ecif) -- same as incoming param
+ 	   %arg2(bytes) -- same as incoming param */
+-	bl ffi_prep_args_LINUX,%r2
++	bl ffi_prep_args_pa32,%r2
+ 	ldo 64(%arg0), %sp
+ 	ldo -64(%sp), %sp
+ 
+@@ -250,14 +250,14 @@
+ 	.procend
+ .LFE1:
+ 
+-	/* void ffi_closure_LINUX(void);
++	/* void ffi_closure_pa32(void);
+ 	   Called with closure argument in %r21 */
+-	.export ffi_closure_LINUX,code
+-	.import ffi_closure_inner_LINUX,code
++	.export ffi_closure_pa32,code
++	.import ffi_closure_inner_pa32,code
+ 
+-	.type ffi_closure_LINUX, @function
++	.type ffi_closure_pa32, @function
+ .LFB2:
+-ffi_closure_LINUX:
++ffi_closure_pa32:
+ 	.proc
+ 	.callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
+ 	.entry
+@@ -277,7 +277,7 @@
+ 	stw %arg3, -48(%r3)
+ 
+ 	copy %r21, %arg0
+-	bl ffi_closure_inner_LINUX, %r2
++	bl ffi_closure_inner_pa32, %r2
+ 	copy %r3, %arg1
+ 
+ 	ldwm -64(%sp), %r3
+diff -urN 4.1/libffi/testsuite/libffi.call/closure_fn6.c libffi/testsuite/libffi.call/closure_fn6.c
+--- 4.1/libffi/testsuite/libffi.call/closure_fn6.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/closure_fn6.c	2006-07-21 12:09:57.000000000 +0200
+@@ -0,0 +1,98 @@
++/* Area:	closure_call
++   Purpose:	Check multiple values passing from different type.
++		Also, exceed the limit of gpr and fpr registers on PowerPC.
++   Limitations:	none.
++   PR:		PR23404
++   Originator:	<andreast@gcc.gnu.org> 20050830	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
++#include "ffitest.h"
++
++static void
++closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		 void* userdata)
++{
++  *(ffi_arg*)resp =
++    (int)*(unsigned long long *)args[0] +
++    (int)(*(unsigned long long *)args[1]) +
++    (int)(*(unsigned long long *)args[2]) +
++    (int)*(unsigned long long *)args[3] +
++    (int)(*(int *)args[4]) + (int)(*(double *)args[5]) +
++    (int)*(double *)args[6] + (int)(*(float *)args[7]) +
++    (int)(*(double *)args[8]) + (int)*(double *)args[9] +
++    (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
++    (int)*(int *)args[12] + (int)(*(int *)args[13]) +
++    (int)(*(double *)args[14]) +  (int)*(double *)args[15] +
++    (int)(long)userdata;
++
++  printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
++	 (int)*(unsigned long long  *)args[0],
++	 (int)(*(unsigned long long  *)args[1]),
++	 (int)(*(unsigned long long  *)args[2]),
++	 (int)*(unsigned long long  *)args[3],
++	 (int)(*(int *)args[4]), (int)(*(double *)args[5]),
++	 (int)*(double *)args[6], (int)(*(float *)args[7]),
++	 (int)(*(double *)args[8]), (int)*(double *)args[9],
++	 (int)(*(int *)args[10]), (int)(*(float *)args[11]),
++	 (int)*(int *)args[12], (int)(*(int *)args[13]),
++	 (int)(*(double *)args[14]), (int)(*(double *)args[15]),
++	 (int)(long)userdata, (int)*(ffi_arg *)resp);
++
++}
++
++typedef int (*closure_test_type0)(unsigned long long,
++				  unsigned long long,
++				  unsigned long long,
++				  unsigned long long,
++				  int, double, double, float, double, double,
++				  int, float, int, int, double, double);
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  ffi_type * cl_arg_types[17];
++  int res;
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cl_arg_types[0] = &ffi_type_uint64;
++  cl_arg_types[1] = &ffi_type_uint64;
++  cl_arg_types[2] = &ffi_type_uint64;
++  cl_arg_types[3] = &ffi_type_uint64;
++  cl_arg_types[4] = &ffi_type_uint;
++  cl_arg_types[5] = &ffi_type_double;
++  cl_arg_types[6] = &ffi_type_double;
++  cl_arg_types[7] = &ffi_type_float;
++  cl_arg_types[8] = &ffi_type_double;
++  cl_arg_types[9] = &ffi_type_double;
++  cl_arg_types[10] = &ffi_type_uint;
++  cl_arg_types[11] = &ffi_type_float;
++  cl_arg_types[12] = &ffi_type_uint;
++  cl_arg_types[13] = &ffi_type_uint;
++  cl_arg_types[14] = &ffi_type_double;
++  cl_arg_types[15] = &ffi_type_double;
++  cl_arg_types[16] = NULL;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
++		     &ffi_type_sint, cl_arg_types) == FFI_OK);
++
++  CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn0,
++			 (void *) 3 /* userdata */) == FFI_OK);
++
++  res = (*((closure_test_type0)pcl))
++    (1, 2, 3, 4, 127, 429., 7., 8., 9.5, 10., 11, 12., 13,
++     19, 21., 1.);
++  /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
++  printf("res: %d\n",res);
++  /* { dg-output "\nres: 680" } */
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/float4.c libffi/testsuite/libffi.call/float4.c
+--- 4.1/libffi/testsuite/libffi.call/float4.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/float4.c	2006-04-09 12:10:58.000000000 +0200
+@@ -0,0 +1,60 @@
++/* Area:	ffi_call
++   Purpose:	Check denorm double value.
++   Limitations:	none.
++   PR:		PR26483.
++   Originator:	From the original ffitest.c  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++#include "float.h"
++
++typedef union
++{
++  double d;
++  unsigned char c[sizeof (double)];
++} value_type;
++
++#define CANARY 0xba
++
++static double dblit(double d)
++{
++  return d;
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  double d;
++  value_type result[2];
++  unsigned int i;
++
++  args[0] = &ffi_type_double;
++  values[0] = &d;
++  
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
++		     &ffi_type_double, args) == FFI_OK);
++  
++  d = DBL_MIN / 2;
++  
++  /* Put a canary in the return array.  This is a regression test for
++     a buffer overrun.  */
++  memset(result[1].c, CANARY, sizeof (double));
++
++  ffi_call(&cif, FFI_FN(dblit), &result[0].d, values);
++  
++  /* The standard delta check doesn't work for denorms.  Since we didn't do
++     any arithmetic, we should get the original result back, and hence an
++     exact check should be OK here.  */
++ 
++  CHECK(result[0].d == dblit(d));
++
++  /* Check the canary.  */
++  for (i = 0; i < sizeof (double); ++i)
++    CHECK(result[1].c[i] == CANARY);
++
++  exit(0);
++
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct10.c libffi/testsuite/libffi.call/nested_struct10.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct10.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct10.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,141 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  unsigned long long a;
++  unsigned char b;
++} A;
++
++typedef struct B {
++  unsigned char y;
++  struct A x;
++  unsigned int z;
++} B;
++
++typedef struct C {
++  unsigned long long d;
++  unsigned char e;
++} C;
++
++static B B_fn(struct A b2, struct B b3, struct C b4)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a + b3.z + b4.d;
++  result.x.b = b2.b + b3.x.b + b3.y + b4.e;
++  result.y = b2.b + b3.x.b + b4.e;
++
++  printf("%d %d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b,
++	 (int)b3.x.a, b3.x.b, b3.y, b3.z, (int)b4.d, b4.e,
++	 (int)result.x.a, result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++  struct C b2;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++  b2 = *(struct C*)(args[2]);
++
++  *(B*)resp = B_fn(b0, b1, b2);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[4];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[4];
++  ffi_type* cls_struct_fields2[3];
++  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
++  ffi_type* dbl_arg_types[4];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  cls_struct_type2.size = 0;
++  cls_struct_type2.alignment = 0;
++  cls_struct_type2.type = FFI_TYPE_STRUCT;
++  cls_struct_type2.elements = cls_struct_fields2;
++
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = { 99, {12LL , 127}, 255};
++  struct C g_dbl = { 2LL, 9};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_uint64;
++  cls_struct_fields[1] = &ffi_type_uchar;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &ffi_type_uchar;
++  cls_struct_fields1[1] = &cls_struct_type;
++  cls_struct_fields1[2] = &ffi_type_uint32;
++  cls_struct_fields1[3] = NULL;
++
++  cls_struct_fields2[0] = &ffi_type_uint64;
++  cls_struct_fields2[1] = &ffi_type_uchar;
++  cls_struct_fields2[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = &cls_struct_type2;
++  dbl_arg_types[3] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = &g_dbl;
++  args_dbl[3] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99 255 2 9: 270 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
++  /* { dg-output "\n1 7 12 127 99 255 2 9: 270 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct4.c libffi/testsuite/libffi.call/nested_struct4.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct4.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct4.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,119 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		PR 25630.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* powerpc*-*-darwin* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  double a;
++  unsigned char b;
++} A;
++
++typedef struct B {
++  struct A x;
++  unsigned char y;
++} B;
++
++static B B_fn(struct A b2, struct B b3)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a;
++  result.x.b = b2.b + b3.x.b + b3.y;
++  result.y = b2.b + b3.x.b;
++
++  printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b,
++	 (int)b3.x.a, b3.x.b, b3.y,
++	 (int)result.x.a, result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++
++  *(B*)resp = B_fn(b0, b1);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[3];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[3];
++  ffi_type cls_struct_type, cls_struct_type1;
++  ffi_type* dbl_arg_types[3];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  struct A e_dbl = { 1.0, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_double;
++  cls_struct_fields[1] = &ffi_type_uchar;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &cls_struct_type;
++  cls_struct_fields1[1] = &ffi_type_uchar;
++  cls_struct_fields1[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99: 13 233 134" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
++  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct5.c libffi/testsuite/libffi.call/nested_struct5.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct5.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct5.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,120 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  long double a;
++  unsigned char b;
++} A;
++
++typedef struct B {
++  struct A x;
++  unsigned char y;
++} B;
++
++static B B_fn(struct A b2, struct B b3)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a;
++  result.x.b = b2.b + b3.x.b + b3.y;
++  result.y = b2.b + b3.x.b;
++
++  printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b,
++	 (int)b3.x.a, b3.x.b, b3.y,
++	 (int)result.x.a, result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++
++  *(B*)resp = B_fn(b0, b1);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[3];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[3];
++  ffi_type cls_struct_type, cls_struct_type1;
++  ffi_type* dbl_arg_types[3];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  struct A e_dbl = { 1.0, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_longdouble;
++  cls_struct_fields[1] = &ffi_type_uchar;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &cls_struct_type;
++  cls_struct_fields1[1] = &ffi_type_uchar;
++  cls_struct_fields1[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99: 13 233 134" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
++  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct6.c libffi/testsuite/libffi.call/nested_struct6.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct6.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct6.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,139 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		PR 25630.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* powerpc*-*-darwin* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  double a;
++  unsigned char b;
++} A;
++
++typedef struct B {
++  struct A x;
++  unsigned char y;
++} B;
++
++typedef struct C {
++  long d;
++  unsigned char e;
++} C;
++
++static B B_fn(struct A b2, struct B b3, struct C b4)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a + b4.d;
++  result.x.b = b2.b + b3.x.b + b3.y + b4.e;
++  result.y = b2.b + b3.x.b + b4.e;
++
++  printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b,
++	 (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e,
++	 (int)result.x.a, result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++  struct C b2;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++  b2 = *(struct C*)(args[2]);
++
++  *(B*)resp = B_fn(b0, b1, b2);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[4];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[3];
++  ffi_type* cls_struct_fields2[3];
++  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
++  ffi_type* dbl_arg_types[4];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  cls_struct_type2.size = 0;
++  cls_struct_type2.alignment = 0;
++  cls_struct_type2.type = FFI_TYPE_STRUCT;
++  cls_struct_type2.elements = cls_struct_fields2;
++
++  struct A e_dbl = { 1.0, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++  struct C g_dbl = { 2, 9};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_double;
++  cls_struct_fields[1] = &ffi_type_uchar;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &cls_struct_type;
++  cls_struct_fields1[1] = &ffi_type_uchar;
++  cls_struct_fields1[2] = NULL;
++
++  cls_struct_fields2[0] = &ffi_type_mylong;
++  cls_struct_fields2[1] = &ffi_type_uchar;
++  cls_struct_fields2[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = &cls_struct_type2;
++  dbl_arg_types[3] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = &g_dbl;
++  args_dbl[3] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
++  /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct7.c libffi/testsuite/libffi.call/nested_struct7.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct7.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct7.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,119 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  unsigned long long a;
++  unsigned char b;
++} A;
++
++typedef struct B {
++  struct A x;
++  unsigned char y;
++} B;
++
++static B B_fn(struct A b2, struct B b3)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a;
++  result.x.b = b2.b + b3.x.b + b3.y;
++  result.y = b2.b + b3.x.b;
++
++  printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b,
++	 (int)b3.x.a, b3.x.b, b3.y,
++	 (int)result.x.a, result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++
++  *(B*)resp = B_fn(b0, b1);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[3];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[3];
++  ffi_type cls_struct_type, cls_struct_type1;
++  ffi_type* dbl_arg_types[3];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = {{12.0 , 127}, 99};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_uint64;
++  cls_struct_fields[1] = &ffi_type_uchar;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &cls_struct_type;
++  cls_struct_fields1[1] = &ffi_type_uchar;
++  cls_struct_fields1[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99: 13 233 134" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
++  /* { dg-output "\n1 7 12 127 99: 13 233 134" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct8.c libffi/testsuite/libffi.call/nested_struct8.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct8.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct8.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,139 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  unsigned long long a;
++  unsigned char b;
++} A;
++
++typedef struct B {
++  struct A x;
++  unsigned char y;
++} B;
++
++typedef struct C {
++  unsigned long long d;
++  unsigned char e;
++} C;
++
++static B B_fn(struct A b2, struct B b3, struct C b4)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a + b4.d;
++  result.x.b = b2.b + b3.x.b + b3.y + b4.e;
++  result.y = b2.b + b3.x.b + b4.e;
++
++  printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b,
++	 (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e,
++	 (int)result.x.a, result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++  struct C b2;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++  b2 = *(struct C*)(args[2]);
++
++  *(B*)resp = B_fn(b0, b1, b2);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[4];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[3];
++  ffi_type* cls_struct_fields2[3];
++  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
++  ffi_type* dbl_arg_types[4];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  cls_struct_type2.size = 0;
++  cls_struct_type2.alignment = 0;
++  cls_struct_type2.type = FFI_TYPE_STRUCT;
++  cls_struct_type2.elements = cls_struct_fields2;
++
++  struct A e_dbl = { 1LL, 7};
++  struct B f_dbl = {{12LL , 127}, 99};
++  struct C g_dbl = { 2LL, 9};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_uint64;
++  cls_struct_fields[1] = &ffi_type_uchar;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &cls_struct_type;
++  cls_struct_fields1[1] = &ffi_type_uchar;
++  cls_struct_fields1[2] = NULL;
++
++  cls_struct_fields2[0] = &ffi_type_uint64;
++  cls_struct_fields2[1] = &ffi_type_uchar;
++  cls_struct_fields2[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = &cls_struct_type2;
++  dbl_arg_types[3] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = &g_dbl;
++  args_dbl[3] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
++  /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/nested_struct9.c libffi/testsuite/libffi.call/nested_struct9.c
+--- 4.1/libffi/testsuite/libffi.call/nested_struct9.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/nested_struct9.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,139 @@
++/* Area:	ffi_call, closure_call
++   Purpose:	Check structure passing with different structure size.
++		Contains structs as parameter of the struct itself.
++		Sample taken from Alan Modras patch to src/prep_cif.c.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20051010	 */
++
++/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
++#include "ffitest.h"
++
++typedef struct A {
++  unsigned char a;
++  unsigned long long b;
++} A;
++
++typedef struct B {
++  struct A x;
++  unsigned char y;
++} B;
++
++typedef struct C {
++  unsigned long d;
++  unsigned char e;
++} C;
++
++static B B_fn(struct A b2, struct B b3, struct C b4)
++{
++  struct B result;
++
++  result.x.a = b2.a + b3.x.a + b4.d;
++  result.x.b = b2.b + b3.x.b + b3.y + b4.e;
++  result.y = b2.b + b3.x.b + b4.e;
++
++  printf("%d %d %d %d %d %d %d: %d %d %d\n", b2.a, (int)b2.b,
++	 b3.x.a, (int)b3.x.b, b3.y, (int)b4.d, b4.e,
++	 result.x.a, (int)result.x.b, result.y);
++
++  return result;
++}
++
++static void
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
++{
++  struct A b0;
++  struct B b1;
++  struct C b2;
++
++  b0 = *(struct A*)(args[0]);
++  b1 = *(struct B*)(args[1]);
++  b2 = *(struct C*)(args[2]);
++
++  *(B*)resp = B_fn(b0, b1, b2);
++}
++
++int main (void)
++{
++  ffi_cif cif;
++#ifndef USING_MMAP
++  static ffi_closure cl;
++#endif
++  ffi_closure *pcl;
++  void* args_dbl[4];
++  ffi_type* cls_struct_fields[3];
++  ffi_type* cls_struct_fields1[3];
++  ffi_type* cls_struct_fields2[3];
++  ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2;
++  ffi_type* dbl_arg_types[4];
++
++#ifdef USING_MMAP
++  pcl = allocate_mmap (sizeof(ffi_closure));
++#else
++  pcl = &cl;
++#endif
++
++  cls_struct_type.size = 0;
++  cls_struct_type.alignment = 0;
++  cls_struct_type.type = FFI_TYPE_STRUCT;
++  cls_struct_type.elements = cls_struct_fields;
++
++  cls_struct_type1.size = 0;
++  cls_struct_type1.alignment = 0;
++  cls_struct_type1.type = FFI_TYPE_STRUCT;
++  cls_struct_type1.elements = cls_struct_fields1;
++
++  cls_struct_type2.size = 0;
++  cls_struct_type2.alignment = 0;
++  cls_struct_type2.type = FFI_TYPE_STRUCT;
++  cls_struct_type2.elements = cls_struct_fields2;
++
++  struct A e_dbl = { 1, 7LL};
++  struct B f_dbl = {{12.0 , 127}, 99};
++  struct C g_dbl = { 2, 9};
++
++  struct B res_dbl;
++
++  cls_struct_fields[0] = &ffi_type_uchar;
++  cls_struct_fields[1] = &ffi_type_uint64;
++  cls_struct_fields[2] = NULL;
++
++  cls_struct_fields1[0] = &cls_struct_type;
++  cls_struct_fields1[1] = &ffi_type_uchar;
++  cls_struct_fields1[2] = NULL;
++
++  cls_struct_fields2[0] = &ffi_type_mylong;
++  cls_struct_fields2[1] = &ffi_type_uchar;
++  cls_struct_fields2[2] = NULL;
++
++
++  dbl_arg_types[0] = &cls_struct_type;
++  dbl_arg_types[1] = &cls_struct_type1;
++  dbl_arg_types[2] = &cls_struct_type2;
++  dbl_arg_types[3] = NULL;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1,
++		     dbl_arg_types) == FFI_OK);
++
++  args_dbl[0] = &e_dbl;
++  args_dbl[1] = &f_dbl;
++  args_dbl[2] = &g_dbl;
++  args_dbl[3] = NULL;
++
++  ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl);
++  /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
++
++  res_dbl = ((B(*)(A, B, C))(pcl))(e_dbl, f_dbl, g_dbl);
++  /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */
++  CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d));
++  CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e));
++  CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e));
++
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_dbl.c libffi/testsuite/libffi.call/return_dbl.c
+--- 4.1/libffi/testsuite/libffi.call/return_dbl.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_dbl.c	2006-02-17 13:47:07.000000000 +0100
+@@ -0,0 +1,35 @@
++/* Area:	ffi_call
++   Purpose:	Check return value double.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++static double return_dbl(double dbl)
++{
++  return 2 * dbl;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  double dbl, rdbl;
++
++  args[0] = &ffi_type_double;
++  values[0] = &dbl;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
++		     &ffi_type_double, args) == FFI_OK);
++
++  for (dbl = -127.3; dbl <  127; dbl++)
++    {
++      ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values);
++      printf ("%f vs %f\n", rdbl, return_dbl(dbl));
++      CHECK(rdbl == 2 * dbl);
++    }
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_dbl1.c libffi/testsuite/libffi.call/return_dbl1.c
+--- 4.1/libffi/testsuite/libffi.call/return_dbl1.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_dbl1.c	2006-02-17 13:47:07.000000000 +0100
+@@ -0,0 +1,43 @@
++/* Area:	ffi_call
++   Purpose:	Check return value double.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++static double return_dbl(double dbl1, float fl2, unsigned int in3, double dbl4)
++{
++  return dbl1 + fl2 + in3 + dbl4;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  double dbl1, dbl4, rdbl;
++  float fl2;
++  unsigned int in3;
++  args[0] = &ffi_type_double;
++  args[1] = &ffi_type_float;
++  args[2] = &ffi_type_uint32;
++  args[3] = &ffi_type_double;
++  values[0] = &dbl1;
++  values[1] = &fl2;
++  values[2] = &in3;
++  values[3] = &dbl4;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
++		     &ffi_type_double, args) == FFI_OK);
++  dbl1 = 127.0;
++  fl2 = 128.0;
++  in3 = 255;
++  dbl4 = 512.7;
++
++  ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values);
++  printf ("%f vs %f\n", rdbl, return_dbl(dbl1, fl2, in3, dbl4));
++  CHECK(rdbl ==  dbl1 + fl2 + in3 + dbl4);
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_dbl2.c libffi/testsuite/libffi.call/return_dbl2.c
+--- 4.1/libffi/testsuite/libffi.call/return_dbl2.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_dbl2.c	2006-02-17 13:47:07.000000000 +0100
+@@ -0,0 +1,42 @@
++/* Area:	ffi_call
++   Purpose:	Check return value double.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++static double return_dbl(double dbl1, double dbl2, unsigned int in3, double dbl4)
++{
++  return dbl1 + dbl2 + in3 + dbl4;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  double dbl1, dbl2, dbl4, rdbl;
++  unsigned int in3;
++  args[0] = &ffi_type_double;
++  args[1] = &ffi_type_double;
++  args[2] = &ffi_type_uint32;
++  args[3] = &ffi_type_double;
++  values[0] = &dbl1;
++  values[1] = &dbl2;
++  values[2] = &in3;
++  values[3] = &dbl4;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
++		     &ffi_type_double, args) == FFI_OK);
++  dbl1 = 127.0;
++  dbl2 = 128.0;
++  in3 = 255;
++  dbl4 = 512.7;
++
++  ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values);
++  printf ("%f vs %f\n", rdbl, return_dbl(dbl1, dbl2, in3, dbl4));
++  CHECK(rdbl ==  dbl1 + dbl2 + in3 + dbl4);
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_fl.c libffi/testsuite/libffi.call/return_fl.c
+--- 4.1/libffi/testsuite/libffi.call/return_fl.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_fl.c	2006-02-17 13:47:07.000000000 +0100
+@@ -0,0 +1,35 @@
++/* Area:	ffi_call
++   Purpose:	Check return value float.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++static float return_fl(float fl)
++{
++  return 2 * fl;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  float fl, rfl;
++
++  args[0] = &ffi_type_float;
++  values[0] = &fl;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
++		     &ffi_type_float, args) == FFI_OK);
++
++  for (fl = -127.0; fl <  127; fl++)
++    {
++      ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
++      printf ("%f vs %f\n", rfl, return_fl(fl));
++      CHECK(rfl ==  2 * fl);
++    }
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_fl1.c libffi/testsuite/libffi.call/return_fl1.c
+--- 4.1/libffi/testsuite/libffi.call/return_fl1.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_fl1.c	2006-02-17 13:47:07.000000000 +0100
+@@ -0,0 +1,36 @@
++/* Area:	ffi_call
++   Purpose:	Check return value float.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++static float return_fl(float fl1, float fl2)
++{
++  return fl1 + fl2;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  float fl1, fl2, rfl;
++
++  args[0] = &ffi_type_float;
++  args[1] = &ffi_type_float;
++  values[0] = &fl1;
++  values[1] = &fl2;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
++		     &ffi_type_float, args) == FFI_OK);
++  fl1 = 127.0;
++  fl2 = 128.0;
++
++  ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
++  printf ("%f vs %f\n", rfl, return_fl(fl1, fl2));
++  CHECK(rfl ==  fl1 + fl2);
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_fl2.c libffi/testsuite/libffi.call/return_fl2.c
+--- 4.1/libffi/testsuite/libffi.call/return_fl2.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_fl2.c	2006-03-03 02:48:12.000000000 +0100
+@@ -0,0 +1,45 @@
++/* Area:	ffi_call
++   Purpose:	Check return value float.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++/* To avoid a false negative on ix86 do not declare the return_fl static.
++   See PR323.
++*/
++float return_fl(float fl1, float fl2, float fl3, float fl4)
++{
++  return fl1 + fl2 + fl3 + fl4;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  float fl1, fl2, fl3, fl4, rfl;
++
++  args[0] = &ffi_type_float;
++  args[1] = &ffi_type_float;
++  args[2] = &ffi_type_float;
++  args[3] = &ffi_type_float;
++  values[0] = &fl1;
++  values[1] = &fl2;
++  values[2] = &fl3;
++  values[3] = &fl4;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
++		     &ffi_type_float, args) == FFI_OK);
++  fl1 = 127.0;
++  fl2 = 128.0;
++  fl3 = 255.1;
++  fl4 = 512.7;
++
++  ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
++  printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, fl3, fl4));
++  CHECK(rfl ==  fl1 + fl2 + fl3 + fl4);
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_fl3.c libffi/testsuite/libffi.call/return_fl3.c
+--- 4.1/libffi/testsuite/libffi.call/return_fl3.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_fl3.c	2006-02-17 13:47:07.000000000 +0100
+@@ -0,0 +1,42 @@
++/* Area:	ffi_call
++   Purpose:	Check return value float.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<andreast@gcc.gnu.org> 20050212  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++
++static float return_fl(float fl1, float fl2, unsigned int in3, float fl4)
++{
++  return fl1 + fl2 + in3 + fl4;
++}
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  float fl1, fl2, fl4, rfl;
++  unsigned int in3;
++  args[0] = &ffi_type_float;
++  args[1] = &ffi_type_float;
++  args[2] = &ffi_type_uint32;
++  args[3] = &ffi_type_float;
++  values[0] = &fl1;
++  values[1] = &fl2;
++  values[2] = &in3;
++  values[3] = &fl4;
++
++  /* Initialize the cif */
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
++		     &ffi_type_float, args) == FFI_OK);
++  fl1 = 127.0;
++  fl2 = 128.0;
++  in3 = 255;
++  fl4 = 512.7;
++
++  ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
++  printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, in3, fl4));
++  CHECK(rfl ==  fl1 + fl2 + in3 + fl4);
++  exit(0);
++}
+diff -urN 4.1/libffi/testsuite/libffi.call/return_ul.c libffi/testsuite/libffi.call/return_ul.c
+--- 4.1/libffi/testsuite/libffi.call/return_ul.c	1970-01-01 01:00:00.000000000 +0100
++++ libffi/testsuite/libffi.call/return_ul.c	2006-07-26 11:41:44.000000000 +0200
+@@ -0,0 +1,38 @@
++/* Area:	ffi_call
++   Purpose:	Check if unsigned long as return type is handled correctly.
++   Limitations:	none.
++   PR:		none.
++   Originator:	<kaffeetisch at gmx dot de> 20060724  */
++
++/* { dg-do run } */
++#include "ffitest.h"
++static unsigned long return_ul(unsigned long ul1, unsigned long ul2)
++{
++  return ul1 + ul2;
++}
++
++int main (void)
++{
++  ffi_cif cif;
++  ffi_type *args[MAX_ARGS];
++  void *values[MAX_ARGS];
++  unsigned long res;
++  unsigned long ul1, ul2;
++
++  args[0] = &ffi_type_ulong;
++  args[1] = &ffi_type_ulong;
++  values[0] = &ul1;
++  values[1] = &ul2;
++
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
++		     &ffi_type_ulong, args) == FFI_OK);
++
++  ul1 = 1073741823L;
++  ul2 = 1073741824L;
++
++  ffi_call(&cif, FFI_FN(return_ul), &res, values);
++  printf("res: %ld, %ld\n", res, ul1 + ul2);
++  /* { dg-output "res: 2147483647, 2147483647" } */
++
++  exit(0);
++}
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-subdir.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-subdir.dpatch
@@ -0,0 +1,237 @@
+#! /bin/sh -e
+
+# DP: - Set the libjava sublibdir to /usr/lib/gcj-4_1
+# DP: - Set the default libgcj database dir to /var/lib/gcj-4.1
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	cd ${dir}libjava && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+	rm -f ${dir}libjava/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- libjava/testsuite/lib/libjava.exp.orig	2007-03-22 13:48:23.000000000 +0100
++++ libjava/testsuite/lib/libjava.exp	2007-03-22 13:48:50.000000000 +0100
+@@ -169,6 +169,7 @@
+     set text [eval exec "$GCJ_UNDER_TEST -B$specdir -v 2>@ stdout"]
+     regexp " version \[^\n\r\]*" $text version
+     set libjava_version [lindex $version 1]
++    set libjava_version "4.1"
+ 
+     verbose "version: $libjava_version"
+ 
+--- libjava/testsuite/Makefile.am.orig	2007-03-22 13:48:23.000000000 +0100
++++ libjava/testsuite/Makefile.am	2007-03-22 13:48:50.000000000 +0100
+@@ -4,6 +4,7 @@
+ 
+ # May be used by various substitution variables.
+ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_short_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ 
+ # autoconf2.13's target_alias
+ target_noncanonical = @target_noncanonical@
+@@ -59,11 +60,11 @@
+ 	  rm -rf $$testtmpdir; $(mkdir_p) $$testtmpdir; \
+ 	  if test -n "$$testdep"; then \
+ 	    $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-	      $(top_builddir)/libgcj-$(gcc_version).jar::$testtmpdir \
++	      $(top_builddir)/libgcj-$(gcc_short_version).jar::$$testtmpdir \
+ 	      -d $$testtmpdir $(srcdir)/$$testdep || exit; \
+ 	  fi; \
+ 	  $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-	    $(top_builddir)/libgcj-$(gcc_version).jar:$$testtmpdir \
++	    $(top_builddir)/libgcj-$(gcc_short_version).jar:$$testtmpdir \
+ 	    -d $$testtmpdir $(srcdir)/$$test || exit; \
+ 	  case "$$test" in \
+ 	    libjava.loader/dummy.java) \
+@@ -75,7 +76,7 @@
+ 	  esac; \
+ 	  if test -n "$$genheader"; then \
+ 	    $(MYGCJH) $$genheader $$testtmpdir/*.class \
+-	      -bootclasspath $(top_builddir)/libgcj-$(gcc_version).jar \
++	      -bootclasspath $(top_builddir)/libgcj-$(gcc_short_version).jar \
+ 	      -d $$testtmpdir/ || exit; \
+ 	    mv $$testtmpdir/*.h $(srcdir)/`dirname $$test`/ 2>/dev/null; \
+ 	  fi; \
+--- libjava/testsuite/Makefile.in.orig	2007-03-22 13:48:23.000000000 +0100
++++ libjava/testsuite/Makefile.in	2007-03-22 13:48:50.000000000 +0100
+@@ -308,6 +308,7 @@
+ 
+ # May be used by various substitution variables.
+ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_short_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ 
+ # Setup the testing framework, if you have one
+ EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \
+@@ -555,11 +556,11 @@
+ @JAVA_MAINTAINER_MODE_TRUE@	  rm -rf $$testtmpdir; $(mkdir_p) $$testtmpdir; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  if test -n "$$testdep"; then \
+ @JAVA_MAINTAINER_MODE_TRUE@	    $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-@JAVA_MAINTAINER_MODE_TRUE@	      $(top_builddir)/libgcj-$(gcc_version).jar::$testtmpdir \
++@JAVA_MAINTAINER_MODE_TRUE@	      $(top_builddir)/libgcj-$(gcc_short_version).jar::$$testtmpdir \
+ @JAVA_MAINTAINER_MODE_TRUE@	      -d $$testtmpdir $(srcdir)/$$testdep || exit; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  fi; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-@JAVA_MAINTAINER_MODE_TRUE@	    $(top_builddir)/libgcj-$(gcc_version).jar:$$testtmpdir \
++@JAVA_MAINTAINER_MODE_TRUE@	    $(top_builddir)/libgcj-$(gcc_short_version).jar:$$testtmpdir \
+ @JAVA_MAINTAINER_MODE_TRUE@	    -d $$testtmpdir $(srcdir)/$$test || exit; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  case "$$test" in \
+ @JAVA_MAINTAINER_MODE_TRUE@	    libjava.loader/dummy.java) \
+@@ -571,7 +572,7 @@
+ @JAVA_MAINTAINER_MODE_TRUE@	  esac; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  if test -n "$$genheader"; then \
+ @JAVA_MAINTAINER_MODE_TRUE@	    $(MYGCJH) $$genheader $$testtmpdir/*.class \
+-@JAVA_MAINTAINER_MODE_TRUE@	      -bootclasspath $(top_builddir)/libgcj-$(gcc_version).jar \
++@JAVA_MAINTAINER_MODE_TRUE@	      -bootclasspath $(top_builddir)/libgcj-$(gcc_short_version).jar \
+ @JAVA_MAINTAINER_MODE_TRUE@	      -d $$testtmpdir/ || exit; \
+ @JAVA_MAINTAINER_MODE_TRUE@	    mv $$testtmpdir/*.h $(srcdir)/`dirname $$test`/ 2>/dev/null; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  fi; \
+--- libjava/Makefile.am.orig	2007-03-22 13:48:23.000000000 +0100
++++ libjava/Makefile.am	2007-03-22 13:50:13.000000000 +0100
+@@ -5,7 +5,8 @@
+ ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+ 
+ # May be used by various substitution variables.
+-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_full_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ 
+ SUBDIRS = $(DIRLTDL) gcj include classpath
+ if TESTSUBDIR
+@@ -27,7 +28,7 @@
+ target_noncanonical = @target_noncanonical@
+ 
+ # This is required by TL_AC_GXX_INCLUDE_DIR.
+-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)
++libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
+ 
+ libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
+ 
+@@ -140,7 +141,7 @@
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.1/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
+--- libjava/configure.ac.orig	2007-03-22 13:48:23.000000000 +0100
++++ libjava/configure.ac	2007-03-22 13:48:50.000000000 +0100
+@@ -525,6 +525,9 @@
+   AS_HELP_STRING([--with-java-home=DIRECTORY],
+                  [value of java.home system property]),
+ 		 [JAVA_HOME="${withval}"], [JAVA_HOME=""])
++if test -n "$with_multisubdir"; then
++  JAVA_HOME=`echo $JAVA_HOME | sed "s,/usr/lib/,/usr/lib$with_multisubdir/,"`
++fi
+ AM_CONDITIONAL(JAVA_HOME_SET, test ! -z "$JAVA_HOME")
+ AC_SUBST(JAVA_HOME)
+ 
+@@ -1372,6 +1375,7 @@
+     multi_os_directory=`$CC -print-multi-os-directory`
+     case $multi_os_directory in
+       .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
++      ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
+       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+     esac
+     ;;
+@@ -1383,15 +1387,21 @@
+ # Determine where the standard .db file and GNU Classpath JNI
+ # libraries are found.
+ multi_os_directory=`$CC -print-multi-os-directory`
++short_version=`sed -r 's/([[0-9]]+\.[[0-9]]+).*/\1/' $srcdir/../gcc/BASE-VER`
++libgcj_soversion=`awk -F: '/^[[^#]].*:/ { print $1 }' $srcdir/libtool-version`
+ case $multi_os_directory in
+   .)
+-   dbexecdir='$(libdir)/gcj-$(gcc_version)' # Avoid /.
++   dbexecdir='$(libdir)/'gcj-$short_version-$libgcj_soversion # Avoid /.
++   ;;
++  ../lib*)
++   dbexecdir='$(subst /lib/../lib,/lib,$(libdir)/'$multi_os_directory/gcj-$short_version-$libgcj_soversion')'
+    ;;
+   *)
+-   dbexecdir='$(libdir)/'$multi_os_directory'/gcj-$(gcc_version)'
++   dbexecdir='$(libdir)/'$multi_os_directory/gcj-$short_version-$libgcj_soversion
+    ;;
+ esac
+ AC_SUBST(dbexecdir)
++ac_configure_args="$ac_configure_args --with-native-libdir=\$\(subst\ /lib/../lib,/lib,\$\(toolexeclibdir\)\)/gcj-$short_version-$libgcj_soversion"
+ 
+ # Determine gcj version number.
+ gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([[^ ]]*\).*$/\1/p'`
+--- libjava/Makefile.in.orig	2007-03-22 13:48:23.000000000 +0100
++++ libjava/Makefile.in	2007-03-22 13:50:31.000000000 +0100
+@@ -746,7 +746,7 @@
+ libdir = @libdir@
+ libexecdir = @libexecdir@
+ libgcj_basedir = @libgcj_basedir@
+-libstdcxx_incdir = @libstdcxx_incdir@
++libstdcxx_incdir = c++/$(gcc_full_version)
+ localstatedir = @localstatedir@
+ mandir = @mandir@
+ mkdir_p = @mkdir_p@
+@@ -774,7 +774,8 @@
+ ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+ 
+ # May be used by various substitution variables.
+-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_full_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ SUBDIRS = $(DIRLTDL) gcj include classpath $(am__append_1)
+ 
+ # write_entries_to_file - writes each entry in a list
+@@ -787,8 +788,8 @@
+ write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) $(foreach object,$(1),$(shell echo $(object) >> $(2)))
+ 
+ # This is required by TL_AC_GXX_INCLUDE_DIR.
+-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)
+-libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
++libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
++libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
+ toolexeclib_LTLIBRARIES = libgcj.la libgij.la libgcj-tools.la \
+ 	$(am__append_2) $(am__append_3)
+ toolexecmainlib_DATA = libgcj.spec
+@@ -833,7 +834,7 @@
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.1/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
+--- gcc/java/Make-lang.in~	2006-09-11 08:41:56.950718000 +0200
++++ gcc/java/Make-lang.in	2006-09-11 09:25:28.160718000 +0200
+@@ -385,12 +385,13 @@
+ 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ZLIBINC) \
+ 		$(srcdir)/java/jcf-io.c $(OUTPUT_OPTION)
+ 
++short_version := $(shell echo $(version) | sed -r 's/([0-9]+\.[0-9]+).*/\1/')
+ # jcf-path.o needs a -D.
+ java/jcf-path.o: java/jcf-path.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+   java/jcf.h
+ 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+-	  -DLIBGCJ_ZIP_FILE='"$(datadir)/java/libgcj-$(version).jar"' \
+-	  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
++	  -DLIBGCJ_ZIP_FILE='"$(datadir)/java/libgcj-$(short_version).jar"' \
++	  -DDEFAULT_TARGET_VERSION=\"$(short_version)\" \
+ 	  $(srcdir)/java/jcf-path.c $(OUTPUT_OPTION)
+ 
+ # create gjnih's object
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-hash-style-gnu.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-hash-style-gnu.dpatch
@@ -0,0 +1,176 @@
+#! /bin/sh -e
+
+# DP: Link using --hash-style=gnu (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)
+# Link using --hash-style=both on hppa (untested)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/i386/linux.h (LINK_SPEC): Add --hash-style=gnu.
+	* config/i386/linux64.h (LINK_SPEC): Likewise.
+	* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+	* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+	LINK_OS_LINUX_SPEC64): Likewise.
+	* config/s390/linux.h (LINK_SPEC): Likewise.
+	* config/ia64/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+	LINK_ARCH64_SPEC): Likewise.
+	* config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+
+--- gcc/config/rs6000/sysv4.h.jj	2006-07-11 10:54:00.000000000 +0200
++++ gcc/config/rs6000/sysv4.h	2006-07-11 12:51:39.000000000 +0200
+@@ -1039,7 +1039,7 @@ extern int fixuplabelno;
+ 
+ #define LINK_START_LINUX_SPEC ""
+ 
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
+--- gcc/config/rs6000/linux64.h.jj	2006-07-11 10:54:00.000000000 +0200
++++ gcc/config/rs6000/linux64.h	2006-07-11 12:52:14.000000000 +0200
+@@ -337,11 +337,11 @@ extern int dot_symbols;
+ #undef	LINK_OS_DEFAULT_SPEC
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
+ 
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=gnu %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib64/ld64.so.1}}}"
+ 
+--- gcc/config/alpha/linux-elf.h.jj	2006-07-11 10:54:01.000000000 +0200
++++ gcc/config/alpha/linux-elf.h	2006-07-11 12:53:48.000000000 +0200
+@@ -29,7 +29,7 @@ Boston, MA 02110-1301, USA.  */
+ 
+ #define ELF_DYNAMIC_LINKER	"/lib/ld-linux.so.2"
+ 
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}		\
++#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax}	\
+   %{O*:-O3} %{!O*:-O1}						\
+   %{shared:-shared}						\
+   %{!shared:							\
+--- gcc/config/s390/linux.h.jj	2006-07-11 10:54:02.000000000 +0200
++++ gcc/config/s390/linux.h	2006-07-11 12:52:39.000000000 +0200
+@@ -79,7 +79,7 @@ Software Foundation, 51 Franklin Street,
+ 
+ #undef  LINK_SPEC
+ #define LINK_SPEC \
+-  "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++  "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \
+    %{shared:-shared} \
+    %{!shared: \
+       %{static:-static} \
+--- gcc/config/sparc/linux.h.jj	2006-07-11 10:54:03.000000000 +0200
++++ gcc/config/sparc/linux.h	2006-07-11 12:54:16.000000000 +0200
+@@ -127,7 +127,7 @@ Boston, MA 02110-1301, USA.  */
+ /* If ELF is the default format, we should not use /lib/elf.  */
+ 
+ #undef  LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \
+   %{!mno-relax:%{!r:-relax}} \
+   %{!shared: \
+     %{!ibcs: \
+--- gcc/config/sparc/linux64.h.jj	2006-07-11 10:54:03.000000000 +0200
++++ gcc/config/sparc/linux64.h	2006-07-11 12:55:10.000000000 +0200
+@@ -157,7 +157,7 @@ Boston, MA 02110-1301, USA.  */
+   { "link_arch_default", LINK_ARCH_DEFAULT_SPEC },	  \
+   { "link_arch",	 LINK_ARCH_SPEC },
+     
+-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+@@ -166,7 +166,7 @@ Boston, MA 02110-1301, USA.  */
+         %{static:-static}}} \
+ "
+ 
+-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=gnu -Y P,/usr/lib64 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+@@ -247,7 +247,7 @@ Boston, MA 02110-1301, USA.  */
+ #else /* !SPARC_BI_ARCH */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_SPEC "-m elf64_sparc --hash-style=gnu -Y P,/usr/lib64 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- gcc/config/i386/linux.h.jj	2006-07-11 10:54:05.000000000 +0200
++++ gcc/config/i386/linux.h	2006-07-11 12:44:45.000000000 +0200
+@@ -113,7 +113,7 @@ Boston, MA 02110-1301, USA.  */
+   { "dynamic_linker", DYNAMIC_LINKER }
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- gcc/config/i386/linux64.h.jj	2006-07-11 10:54:04.000000000 +0200
++++ gcc/config/i386/linux64.h	2006-07-11 12:45:02.000000000 +0200
+@@ -55,7 +55,7 @@ Boston, MA 02110-1301, USA.  */
+    done.  */
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
++#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} --hash-style=gnu \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- gcc/config/ia64/linux.h.jj	2006-07-11 10:54:06.000000000 +0200
++++ gcc/config/ia64/linux.h	2006-07-11 12:48:19.000000000 +0200
+@@ -40,7 +40,7 @@ do {						\
+    linux.h file.  */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=gnu \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- gcc/config/pa/pa-linux.h~	2007-01-12 03:23:38.000000000 +0100
++++ gcc/config/pa/pa-linux.h	2007-04-18 11:28:41.000000000 +0200
+@@ -50,7 +50,7 @@
+    linux.h file.  */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-vis-r116507.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-vis-r116507.dpatch
@@ -0,0 +1,540 @@
+#! /bin/sh -e
+
+# DP: g++ visibility patches (taken from the redhat/gcc-4_1-branch)
+# DP:   PR c++/28407, PR c++/28409
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+------------------------------------------------------------------------
+r116507 | jakub | 2006-08-28 14:31:26 +0200 (Mon, 28 Aug 2006) | 24 lines
+
+2006-07-20  Jason Merrill  <jason@redhat.com>
+
+        * tree.c (remove_attribute): New fn.
+
+        PR c++/28407
+        * decl.c (grokvardecl): Set DECL_THIS_STATIC on file-scope
+        const variables with implicit internal linkage.
+        * tree.c (decl_linkage): Only return lk_external if it's set.
+
+        PR c++/28409
+        * decl2.c (constrain_visibility): Ignore the anonymous namespace 
+        for extern "C" decls.
+        (VISIBILITY_STATIC): Rename to VISIBILITY_ANON.
+
+        * decl2.c (constrain_visibility): Remove specified and reason 
+        parameters.  Don't touch decls that already have explicit visibility.
+        (determine_visibility): Do copy DECL_VISIBILITY_SPECIFIED from 
+        template.
+        (determine_visibility_from_class): Reverse sense of 
+        DECL_VISIBILITY_SPECIFIED test for target-specific visibility rules.
+        (constrain_class_visibility): Only complain about member visibility
+        if the member type is another class.  Don't change visibility of the
+        current class.
+
+Index: gcc/tree.c
+===================================================================
+--- gcc/tree.c	(Revision 116506)
++++ gcc/tree.c	(Revision 116507)
+@@ -3461,6 +3461,28 @@
+   return NULL_TREE;
+ }
+ 
++/* Remove any instances of attribute ATTR_NAME in LIST and return the
++   modified list.  */
++
++tree
++remove_attribute (const char *attr_name, tree list)
++{
++  tree *p;
++  size_t attr_len = strlen (attr_name);
++
++  for (p = &list; *p; )
++    {
++      tree l = *p;
++      gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
++      if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
++	*p = TREE_CHAIN (l);
++      else
++	p = &TREE_CHAIN (l);
++    }
++
++  return list;
++}
++
+ /* Return an attribute list that is the union of a1 and a2.  */
+ 
+ tree
+Index: gcc/tree.h
+===================================================================
+--- gcc/tree.h	(Revision 116506)
++++ gcc/tree.h	(Revision 116507)
+@@ -3613,6 +3613,11 @@
+ 
+ extern tree lookup_attribute (const char *, tree);
+ 
++/* Remove any instances of attribute ATTR_NAME in LIST and return the
++   modified list.  */
++
++extern tree remove_attribute (const char *, tree);
++
+ /* Given two attributes lists, return a list of their union.  */
+ 
+ extern tree merge_attributes (tree, tree);
+Index: gcc/testsuite/g++.dg/ext/visibility/template6.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/visibility/template6.C	(Revision 0)
++++ gcc/testsuite/g++.dg/ext/visibility/template6.C	(Revision 116507)
+@@ -0,0 +1,17 @@
++// Test for explicit visibility taking precedence
++
++// { dg-require-visibility "" }
++// { dg-final { scan-not-hidden "_ZN1AIiE1fEv" } }
++
++template <class T> struct A
++{
++  // This attribute takes precedence over...
++  __attribute ((visibility ("default"))) void f ();
++};
++
++template <class T>
++void A<T>::f ()
++{ }
++
++// ...this attribute.
++template struct __attribute ((visibility ("hidden"))) A<int>;
+Index: gcc/testsuite/g++.dg/ext/visibility/warn2.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/visibility/warn2.C	(Revision 116506)
++++ gcc/testsuite/g++.dg/ext/visibility/warn2.C	(Revision 116507)
+@@ -14,6 +14,6 @@
+   N::A a;
+ };
+ 
+-B f () { }			// { dg-warning "visibility" }
++N::A f () { }			// { dg-warning "visibility" }
+ 
+ struct C: public N::A { };	// { dg-warning "visibility" }
+Index: gcc/testsuite/g++.dg/ext/visibility/warn3.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/visibility/warn3.C	(Revision 116506)
++++ gcc/testsuite/g++.dg/ext/visibility/warn3.C	(Revision 116507)
+@@ -1,11 +1,32 @@
+-// Warn when a class member is specified to have greater visibility than
+-// its class.
++// Tests for various visibility mismatch situations.
+ 
+ // { dg-require-visibility "" }
+ 
++// { dg-final { scan-not-hidden "_ZN1A1fEv" } }
++
+ struct __attribute ((visibility ("hidden"))) A
+ {
+-  __attribute ((visibility ("default"))) void f (); // { dg-warning "visibility" }
++  // This is OK, A::f gets default visibility.
++  __attribute ((visibility ("default"))) void f ();
+ };
+ 
+ void A::f() { }
++
++// This gets a warning; it should have explicit visibility of some sort.
++A* afactory1() { return new A; }	// { dg-warning "visibility" }
++
++// This is OK.
++__attribute ((visibility ("default"))) A*
++afactory2 () { return new A; }
++
++// This gets a warning.
++struct B
++{				// { dg-warning "visibility" }
++  A a;
++};
++
++// This one has explicit visibility, so it doesn't get a warning.
++struct __attribute ((visibility ("default"))) C
++{
++  A a;
++};
+Index: gcc/testsuite/g++.dg/lookup/anon5.C
+===================================================================
+--- gcc/testsuite/g++.dg/lookup/anon5.C	(Revision 0)
++++ gcc/testsuite/g++.dg/lookup/anon5.C	(Revision 116507)
+@@ -0,0 +1,21 @@
++// PR c++/28409
++// shouldIbevisible should be emitted because it's an extern "C" decl with
++// external linkage, even though it's in the anonymous namespace.
++
++namespace
++{
++  extern "C" int shouldIbevisible()
++  {
++    return 0;
++  }
++}
++
++namespace t
++{
++  extern "C" int shouldIbevisible(void);
++}
++
++int main(void)
++{
++  return t::shouldIbevisible();
++}
+Index: gcc/testsuite/g++.dg/template/anon4.C
+===================================================================
+--- gcc/testsuite/g++.dg/template/anon4.C	(Revision 0)
++++ gcc/testsuite/g++.dg/template/anon4.C	(Revision 116507)
+@@ -0,0 +1,10 @@
++// PR c++/28407
++// A declaration in the anonymous namespace still has external linkage.
++
++template <int *P> class A { };
++namespace
++{
++  int i;
++}
++
++A<&i> a;
+Index: gcc/cp/decl.c
+===================================================================
+--- gcc/cp/decl.c	(Revision 116506)
++++ gcc/cp/decl.c	(Revision 116507)
+@@ -5274,6 +5274,14 @@
+ 	{
+ 	  layout_var_decl (decl);
+ 	  maybe_commonize_var (decl);
++	  if (DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl)
++	      && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
++	    {
++	      /* This is a const variable with implicit 'static'.  Set
++		 DECL_THIS_STATIC so we can tell it from variables that are
++		 !TREE_PUBLIC because of the anonymous namespace.  */
++	      DECL_THIS_STATIC (decl) = 1;
++	    }
+ 	}
+ 
+       make_rtl_for_nonlocal_decl (decl, init, asmspec);
+Index: gcc/cp/tree.c
+===================================================================
+--- gcc/cp/tree.c	(Revision 116506)
++++ gcc/cp/tree.c	(Revision 116507)
+@@ -2189,7 +2189,10 @@
+   /* Things that are TREE_PUBLIC have external linkage.  */
+   if (TREE_PUBLIC (decl))
+     return lk_external;
+-  
++
++  if (TREE_CODE (decl) == NAMESPACE_DECL)
++    return lk_external;
++
+   /* Linkage of a CONST_DECL depends on the linkage of the enumeration 
+      type.  */
+   if (TREE_CODE (decl) == CONST_DECL)
+@@ -2209,6 +2212,14 @@
+   if (decl_function_context (decl))
+     return lk_none;
+ 
++  /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
++     are considered to have external linkage for language purposes.  DECLs
++     really meant to have internal linkage have DECL_THIS_STATIC set.  */
++  if (TREE_CODE (decl) == TYPE_DECL
++      || ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
++	  && !DECL_THIS_STATIC (decl)))
++    return lk_external;
++
+   /* Everything else has internal linkage.  */
+   return lk_internal;
+ }
+Index: gcc/cp/pt.c
+===================================================================
+--- gcc/cp/pt.c	(Revision 116506)
++++ gcc/cp/pt.c	(Revision 116507)
+@@ -6609,7 +6609,12 @@
+ 
+ 	/* Possibly limit visibility based on template args.  */
+ 	DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
+-	DECL_VISIBILITY_SPECIFIED (r) = 0;
++	if (DECL_VISIBILITY_SPECIFIED (t))
++	  {
++	    DECL_VISIBILITY_SPECIFIED (r) = 0;
++	    DECL_ATTRIBUTES (r)
++	      = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
++	  }
+ 	determine_visibility (r);
+       }
+       break;
+@@ -6811,7 +6816,12 @@
+ 	  {
+ 	    /* Possibly limit visibility based on template args.  */
+ 	    DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
+-	    DECL_VISIBILITY_SPECIFIED (r) = 0;
++	    if (DECL_VISIBILITY_SPECIFIED (t))
++	      {
++		DECL_VISIBILITY_SPECIFIED (r) = 0;
++		DECL_ATTRIBUTES (r)
++		  = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
++	      }
+ 	    determine_visibility (r);
+ 	  }
+ 
+Index: gcc/cp/decl2.c
+===================================================================
+--- gcc/cp/decl2.c	(Revision 116506)
++++ gcc/cp/decl2.c	(Revision 116507)
+@@ -1571,7 +1571,7 @@
+ /* A special return value from type_visibility meaning internal
+    linkage.  */
+ 
+-enum { VISIBILITY_STATIC = VISIBILITY_INTERNAL+1 };
++enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
+ 
+ /* walk_tree helper function for type_visibility.  */
+ 
+@@ -1587,7 +1587,7 @@
+     {
+       if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
+ 	{
+-	  *vis_p = VISIBILITY_STATIC;
++	  *vis_p = VISIBILITY_ANON;
+ 	  return *tp;
+ 	}
+       else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
+@@ -1607,29 +1607,28 @@
+   return vis;
+ }
+ 
+-/* Limit the visibility of DECL to VISIBILITY.  SPECIFIED is true if the
+-   constraint comes from an attribute or pragma; REASON is the source of
+-   the constraint.  */
++/* Limit the visibility of DECL to VISIBILITY, if not explicitly
++   specified (or if VISIBILITY is static).  */
+ 
+ static bool
+-constrain_visibility (tree decl, int visibility, bool specified,
+-		      const char *reason)
++constrain_visibility (tree decl, int visibility)
+ {
+-  if (visibility == VISIBILITY_STATIC)
++  if (visibility == VISIBILITY_ANON)
+     {
+-      TREE_PUBLIC (decl) = 0;
+-      DECL_INTERFACE_KNOWN (decl) = 1;
+-      if (DECL_LANG_SPECIFIC (decl))
+-	DECL_NOT_REALLY_EXTERN (decl) = 1;
++      /* extern "C" declarations aren't affected by the anonymous
++	 namespace.  */
++      if (!DECL_EXTERN_C_P (decl))
++	{
++	  TREE_PUBLIC (decl) = 0;
++	  DECL_INTERFACE_KNOWN (decl) = 1;
++	  if (DECL_LANG_SPECIFIC (decl))
++	    DECL_NOT_REALLY_EXTERN (decl) = 1;
++	}
+     }
+-  else if (visibility > DECL_VISIBILITY (decl))
++  else if (visibility > DECL_VISIBILITY (decl)
++	   && !DECL_VISIBILITY_SPECIFIED (decl))
+     {
+-      if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
+-	warning (OPT_Wattributes, "%q+D: visibility attribute requests "
+-		 "greater visibility than its %s allows", decl, reason);
+       DECL_VISIBILITY (decl) = visibility;
+-      if (!DECL_VISIBILITY_SPECIFIED (decl))
+-	DECL_VISIBILITY_SPECIFIED (decl) = specified;
+       return true;
+     }
+   return false;
+@@ -1662,13 +1661,13 @@
+ 	      || TREE_CODE (arg) == FUNCTION_DECL)
+ 	    {
+ 	      if (! TREE_PUBLIC (arg))
+-		vis = VISIBILITY_STATIC;
++		vis = VISIBILITY_ANON;
+ 	      else
+ 		vis = DECL_VISIBILITY (arg);
+ 	    }
+ 	}
+       if (vis)
+-	constrain_visibility (decl, vis, false, "template parameter");
++	constrain_visibility (decl, vis);
+     }
+ }
+ 
+@@ -1763,8 +1762,7 @@
+ 	{
+ 	  /* tinfo visibility is based on the type it's for.  */
+ 	  constrain_visibility
+-	    (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))),
+-	     false, "type");
++	    (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))));
+ 	}
+       else if (use_template)
+ 	/* Template instantiations and specializations get visibility based
+@@ -1780,24 +1778,25 @@
+ 
+   if (use_template)
+     {
++      /* If the specialization doesn't specify visibility, use the
++	 visibility from the template.  */
+       tree tinfo = (TREE_CODE (decl) == TYPE_DECL
+ 		    ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
+ 		    : DECL_TEMPLATE_INFO (decl));
+       tree args = TI_ARGS (tinfo);
+       int depth = TMPL_ARGS_DEPTH (args);
++      tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
+ 
+-      /* If the template has explicit visibility and the specialization
+-	 doesn't, use the visibility from the template.  */
+       if (!DECL_VISIBILITY_SPECIFIED (decl))
+ 	{
+-	  tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
+ 	  DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
++	  DECL_VISIBILITY_SPECIFIED (decl)
++	    = DECL_VISIBILITY_SPECIFIED (pattern);
+ 	}
+ 
+       /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
+       if (args && depth > template_class_depth (class_type))
+-	/* Don't let it have more visibility than its template type
+-	   arguments.  */
++	/* Limit visibility based on its template arguments.  */
+ 	constrain_visibility_for_template (decl, args);
+     }
+ 
+@@ -1806,17 +1805,15 @@
+ 
+   /* Don't let it have more visibility than its type.  */
+   if (TREE_CODE (decl) != TYPE_DECL)
+-    if (constrain_visibility (decl, type_visibility (TREE_TYPE (decl)),
+-			      false, "type"))
++    if (constrain_visibility (decl, type_visibility (TREE_TYPE (decl))))
+       warning (OPT_Wattributes, "\
+-%q+D declared with greater visibility than its type",
++lowering visibility of %q+D to match its type",
+ 	       decl);
+ 
+   if (decl_anon_ns_mem_p (decl))
+     /* Names in an anonymous namespace get internal linkage.
+        This might change once we implement export.  */
+-    constrain_visibility (decl, VISIBILITY_STATIC,
+-			  false, "namespace");
++    constrain_visibility (decl, VISIBILITY_ANON);
+ }
+ 
+ /* By default, static data members and function members receive
+@@ -1834,12 +1831,14 @@
+       && TREE_CODE (decl) == FUNCTION_DECL
+       && DECL_DECLARED_INLINE_P (decl))
+     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
++  else if (!DECL_VISIBILITY_SPECIFIED (decl))
++    {
++      /* Default to the class visibility.  */
++      DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
++      DECL_VISIBILITY_SPECIFIED (decl)
++	= CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
++    }
+ 
+-  /* The decl can't have more visibility than its class.  */
+-  constrain_visibility (decl, CLASSTYPE_VISIBILITY (class_type),
+-			CLASSTYPE_VISIBILITY_SPECIFIED (class_type),
+-			"class");
+-
+   /* Give the target a chance to override the visibility associated
+      with DECL.  */
+   if (TREE_CODE (decl) == VAR_DECL
+@@ -1851,8 +1850,8 @@
+ 	      && !DECL_CONSTRUCTION_VTABLE_P (decl)))
+       && TREE_PUBLIC (decl)
+       && !DECL_REALLY_EXTERN (decl)
+-      && DECL_VISIBILITY_SPECIFIED (decl)
+-      && (!class_type || !CLASSTYPE_VISIBILITY_SPECIFIED (class_type)))
++      && !DECL_VISIBILITY_SPECIFIED (decl)
++      && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
+     targetm.cxx.determine_class_data_visibility (decl);
+ }
+ 
+@@ -1862,25 +1861,50 @@
+ void
+ constrain_class_visibility (tree type)
+ {
+-  tree decl = TYPE_MAIN_DECL (type);
+-  tree binfo = TYPE_BINFO (type);
++  tree binfo;
+   tree t;
+   int i;
+ 
++  int vis = type_visibility (type);
++
++  if (vis == VISIBILITY_ANON)
++    return;
++
++  /* Don't warn about visibility if the class has explicit visibility.  */
++  if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
++    vis = VISIBILITY_INTERNAL;
++
+   for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
+-    if (TREE_CODE (t) == FIELD_DECL)
+-      if (constrain_visibility (decl, type_visibility (TREE_TYPE (t)),
+-				false, "field type"))
+-	warning (OPT_Wattributes, "\
++    if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
++      {
++	int subvis = type_visibility (TREE_TYPE (t));
++
++	if (subvis == VISIBILITY_ANON)
++	  warning (0, "\
++%qT has a field %qD whose type uses the anonymous namespace",
++		   type, t);
++	else if (vis < VISIBILITY_HIDDEN
++		 && subvis >= VISIBILITY_HIDDEN)
++	  warning (OPT_Wattributes, "\
+ %qT declared with greater visibility than the type of its field %qD",
+-		 type, t);
++		   type, t);
++      }
+ 
++  binfo = TYPE_BINFO (type);
+   for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
+-    if (constrain_visibility (decl, type_visibility (TREE_TYPE (t)),
+-			      false, "base type"))
+-      warning (OPT_Wattributes, "\
++    {
++      int subvis = type_visibility (TREE_TYPE (t));
++
++      if (subvis == VISIBILITY_ANON)
++	warning (0, "\
++%qT has a base %qT whose type uses the anonymous namespace",
++		 type, TREE_TYPE (t));
++      else if (vis < VISIBILITY_HIDDEN
++	       && subvis >= VISIBILITY_HIDDEN)
++	warning (OPT_Wattributes, "\
+ %qT declared with greater visibility than its base %qT",
+-	       type, TREE_TYPE (t));
++		 type, TREE_TYPE (t));
++    }
+ }
+ 
+ /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
--- gcc-4.1-4.1.2.orig/debian/patches/sparc-niagara2.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sparc-niagara2.dpatch
@@ -0,0 +1,440 @@
+#! /bin/sh -e
+
+# DP: Add niagara2 optimization support
+
+if [ $# -eq 3 ] && [ "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+	patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        cd ${dir}libcpp && autoconf
+	;;
+    -unpatch)
+	patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        cd ${dir}libcpp && autoconf
+	;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1;;
+esac
+
+exit 0
+
+--- gcc/config.gcc.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config.gcc	2007-09-26 18:09:47.000000000 -0700
+@@ -2800,7 +2800,7 @@ case "${target}" in
+ 			"" | sparc | sparcv9 | sparc64 | sparc86x \
+ 			| v7 | cypress | v8 | supersparc | sparclite | f930 \
+ 			| f934 | hypersparc | sparclite86x | sparclet | tsc701 \
+-			| v9 | ultrasparc | ultrasparc3 | niagara)
++			| v9 | ultrasparc | ultrasparc3 | niagara | niagara2)
+ 				# OK
+ 				;;
+ 			*)
+--- gcc/config/sparc/linux64.h.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config/sparc/linux64.h	2007-09-26 18:09:47.000000000 -0700
+@@ -49,7 +49,8 @@ Boston, MA 02110-1301, USA.  */
+ #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
+     || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
+     || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3 \
+-    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara
++    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara \
++    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara2
+ /* A 64 bit v9 compiler with stack-bias,
+    in a Medium/Low code model environment.  */
+ 
+--- gcc/config/sparc/niagara2.md.~1~	2007-09-26 18:09:30.000000000 -0700
++++ gcc/config/sparc/niagara2.md	2007-09-26 18:09:47.000000000 -0700
+@@ -0,0 +1,91 @@
++;; Scheduling description for Niagara-2.
++;;   Copyright (C) 2007 Free Software Foundation, Inc.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2, or (at your option)
++;; any later version.
++;;
++;; GCC 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.  See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING.  If not, write to
++;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++;; Boston, MA 02110-1301, USA.
++
++;; Niagara-2 is a single-issue processor.
++
++(define_automaton "niagara2_0")
++
++(define_cpu_unit "niag2_pipe" "niagara2_0")
++
++(define_insn_reservation "niag2_25cycle" 25
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "flushw"))
++  "niag2_pipe*25")
++
++(define_insn_reservation "niag2_5cycle" 5
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "multi,flushw,iflush,trap"))
++  "niag2_pipe*5")
++
++(define_insn_reservation "niag2_6cycle" 4
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "savew"))
++  "niag2_pipe*4")
++
++/* Most basic operations are single-cycle. */
++(define_insn_reservation "niag2_ialu" 1
++ (and (eq_attr "cpu" "niagara2")
++   (eq_attr "type" "ialu,shift,compare,cmove"))
++ "niag2_pipe")
++
++(define_insn_reservation "niag2_imul" 5
++ (and (eq_attr "cpu" "niagara2")
++   (eq_attr "type" "imul"))
++ "niag2_pipe*5")
++
++(define_insn_reservation "niag2_idiv" 31
++ (and (eq_attr "cpu" "niagara2")
++   (eq_attr "type" "idiv"))
++ "niag2_pipe*31")
++
++(define_insn_reservation "niag2_branch" 5
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "call,sibcall,call_no_delay_slot,uncond_branch,branch"))
++  "niag2_pipe*5")
++
++(define_insn_reservation "niag2_3cycle_load" 3
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "load,fpload"))
++  "niag2_pipe*3")
++
++(define_insn_reservation "niag2_1cycle_store" 1
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "store,fpstore"))
++  "niag2_pipe")
++
++(define_insn_reservation "niag2_fp" 3
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "fpmove,fpcmove,fpcrmove,fpcmp,fpmul"))
++  "niag2_pipe*3")
++
++(define_insn_reservation "niag2_fdivs" 19
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "fpdivs"))
++  "niag2_pipe*19")
++
++(define_insn_reservation "niag2_fdivd" 33
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "fpdivd"))
++  "niag2_pipe*33")
++
++(define_insn_reservation "niag2_vis" 6
++  (and (eq_attr "cpu" "niagara2")
++    (eq_attr "type" "fga,fgm_pack,fgm_mul,fgm_cmp,fgm_pdist"))
++  "niag2_pipe*6")
+--- gcc/config/sparc/sol2-bi.h.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config/sparc/sol2-bi.h	2007-09-26 18:09:47.000000000 -0700
+@@ -48,6 +48,15 @@
+ #define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG "b"
+ #endif
+ 
++#if TARGET_CPU_DEFAULT == TARGET_CPU_niagara2
++#undef CPP_CPU64_DEFAULT_SPEC
++#define CPP_CPU64_DEFAULT_SPEC ""
++#undef ASM_CPU32_DEFAULT_SPEC
++#define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb"
++#undef ASM_CPU64_DEFAULT_SPEC
++#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG "b"
++#endif
++
+ #if DEFAULT_ARCH32_P
+ #define DEF_ARCH32_SPEC(__str) "%{!m64:" __str "}"
+ #define DEF_ARCH64_SPEC(__str) "%{m64:" __str "}"
+@@ -66,7 +75,7 @@
+ %{mcpu=sparclite|mcpu-f930|mcpu=f934:-D__sparclite__} \
+ %{mcpu=v8:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
+ %{mcpu=supersparc:-D__supersparc__ " DEF_ARCH32_SPEC("-D__sparcv8") "} \
+-%{mcpu=v9|mcpu=ultrasparc|mcpu=ultrasparc3|mcpu=niagara:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
++%{mcpu=v9|mcpu=ultrasparc|mcpu=ultrasparc3|mcpu=niagara|mcpu=niagara2:" DEF_ARCH32_SPEC("-D__sparcv8") "} \
+ %{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
+ "
+ 
+@@ -76,7 +85,8 @@
+ %{mcpu=ultrasparc:" DEF_ARCH32_SPEC("-xarch=v8plusa") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "a") "} \
+ %{mcpu=ultrasparc3:" DEF_ARCH32_SPEC("-xarch=v8plusb") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "b") "} \
+ %{mcpu=niagara:" DEF_ARCH32_SPEC("-xarch=v8plusb") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "b") "} \
+-%{!mcpu=niagara:%{!mcpu=ultrasparc3:%{!mcpu=ultrasparc:%{!mcpu=v9:%{mcpu*:" DEF_ARCH32_SPEC("-xarch=v8") DEF_ARCH64_SPEC(AS_SPARC64_FLAG) "}}}}} \
++%{mcpu=niagara2:" DEF_ARCH32_SPEC("-xarch=v8plusb") DEF_ARCH64_SPEC(AS_SPARC64_FLAG "b") "} \
++%{!mcpu=niagara2:%{!mcpu=niagara:%{!mcpu=ultrasparc3:%{!mcpu=ultrasparc:%{!mcpu=v9:%{mcpu*:" DEF_ARCH32_SPEC("-xarch=v8") DEF_ARCH64_SPEC(AS_SPARC64_FLAG) "}}}}}} \
+ %{!mcpu*:%(asm_cpu_default)} \
+ "
+ 
+--- gcc/config/sparc/sol2.h.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config/sparc/sol2.h	2007-09-26 18:09:47.000000000 -0700
+@@ -46,12 +46,18 @@ Boston, MA 02110-1301, USA.  */
+ #define ASM_CPU_DEFAULT_SPEC "-xarch=v8plusb"
+ #endif
+ 
++#if TARGET_CPU_DEFAULT == TARGET_CPU_niagara2
++#undef ASM_CPU_DEFAULT_SPEC
++#define ASM_CPU_DEFAULT_SPEC "-xarch=v8plusb"
++#endif
++
+ #undef ASM_CPU_SPEC
+ #define ASM_CPU_SPEC "\
+ %{mcpu=v9:-xarch=v8plus} \
+ %{mcpu=ultrasparc:-xarch=v8plusa} \
+ %{mcpu=ultrasparc3:-xarch=v8plusb} \
+ %{mcpu=niagara:-xarch=v8plusb} \
++%{mcpu=niagara2:-xarch=v8plusb} \
+ %{!mcpu*:%(asm_cpu_default)} \
+ "
+ 
+--- gcc/config/sparc/sparc.c.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config/sparc/sparc.c	2007-09-26 18:09:47.000000000 -0700
+@@ -220,6 +220,30 @@ struct processor_costs niagara_costs = {
+   0, /* shift penalty */
+ };
+ 
++static const
++struct processor_costs niagara2_costs = {
++  COSTS_N_INSNS (3), /* int load */
++  COSTS_N_INSNS (3), /* int signed load */
++  COSTS_N_INSNS (3), /* int zeroed load */
++  COSTS_N_INSNS (3), /* float load */
++  COSTS_N_INSNS (6), /* fmov, fneg, fabs */
++  COSTS_N_INSNS (6), /* fadd, fsub */
++  COSTS_N_INSNS (6), /* fcmp */
++  COSTS_N_INSNS (6), /* fmov, fmovr */
++  COSTS_N_INSNS (6), /* fmul */
++  COSTS_N_INSNS (19), /* fdivs */
++  COSTS_N_INSNS (33), /* fdivd */
++  COSTS_N_INSNS (19), /* fsqrts */
++  COSTS_N_INSNS (33), /* fsqrtd */
++  COSTS_N_INSNS (5), /* imul */
++  COSTS_N_INSNS (5), /* imulX */
++  0, /* imul bit factor */
++  COSTS_N_INSNS (31), /* idiv, average of 12 - 41 cycle range */
++  COSTS_N_INSNS (31), /* idivX, average of 12 - 41 cycle range */
++  COSTS_N_INSNS (1), /* movcc/movr */
++  0, /* shift penalty */
++};
++
+ const struct processor_costs *sparc_costs = &cypress_costs;
+ 
+ #ifdef HAVE_AS_RELAX_OPTION
+@@ -621,6 +645,7 @@ sparc_override_options (void)
+     { TARGET_CPU_ultrasparc, "ultrasparc" },
+     { TARGET_CPU_ultrasparc3, "ultrasparc3" },
+     { TARGET_CPU_niagara, "niagara" },
++    { TARGET_CPU_niagara2, "niagara2" },
+     { 0, 0 }
+   };
+   const struct cpu_default *def;
+@@ -658,6 +683,7 @@ sparc_override_options (void)
+     { "ultrasparc3", PROCESSOR_ULTRASPARC3, MASK_ISA, MASK_V9|MASK_DEPRECATED_V8_INSNS},
+     /* UltraSPARC T1 */
+     { "niagara", PROCESSOR_NIAGARA, MASK_ISA, MASK_V9|MASK_DEPRECATED_V8_INSNS},
++    { "niagara2", PROCESSOR_NIAGARA, MASK_ISA, MASK_V9},
+     { 0, 0, 0, 0 }
+   };
+   const struct cpu_table *cpu;
+@@ -768,7 +794,8 @@ sparc_override_options (void)
+   if (align_functions == 0
+       && (sparc_cpu == PROCESSOR_ULTRASPARC
+ 	  || sparc_cpu == PROCESSOR_ULTRASPARC3
+-	  || sparc_cpu == PROCESSOR_NIAGARA))
++	  || sparc_cpu == PROCESSOR_NIAGARA
++	  || sparc_cpu == PROCESSOR_NIAGARA2))
+     align_functions = 32;
+ 
+   /* Validate PCC_STRUCT_RETURN.  */
+@@ -820,6 +847,9 @@ sparc_override_options (void)
+     case PROCESSOR_NIAGARA:
+       sparc_costs = &niagara_costs;
+       break;
++    case PROCESSOR_NIAGARA2:
++      sparc_costs = &niagara2_costs;
++      break;
+     };
+ 
+ #ifdef TARGET_DEFAULT_LONG_DOUBLE_128
+@@ -7131,7 +7161,8 @@ sparc_initialize_trampoline (rtx tramp, 
+   emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode, tramp))));
+   if (sparc_cpu != PROCESSOR_ULTRASPARC
+       && sparc_cpu != PROCESSOR_ULTRASPARC3
+-      && sparc_cpu != PROCESSOR_NIAGARA)
++      && sparc_cpu != PROCESSOR_NIAGARA
++      && sparc_cpu != PROCESSOR_NIAGARA2)
+     emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode,
+ 						     plus_constant (tramp, 8)))));
+ 
+@@ -7174,7 +7205,8 @@ sparc64_initialize_trampoline (rtx tramp
+ 
+   if (sparc_cpu != PROCESSOR_ULTRASPARC
+       && sparc_cpu != PROCESSOR_ULTRASPARC3
+-      && sparc_cpu != PROCESSOR_NIAGARA)
++      && sparc_cpu != PROCESSOR_NIAGARA
++      && sparc_cpu != PROCESSOR_NIAGARA2)
+     emit_insn (gen_flushdi (validize_mem (gen_rtx_MEM (DImode, plus_constant (tramp, 8)))));
+ 
+   /* Call __enable_execute_stack after writing onto the stack to make sure
+@@ -7354,7 +7386,8 @@ sparc_sched_init (FILE *dump ATTRIBUTE_U
+ static int
+ sparc_use_sched_lookahead (void)
+ {
+-  if (sparc_cpu == PROCESSOR_NIAGARA)
++  if (sparc_cpu == PROCESSOR_NIAGARA
++      || sparc_cpu == PROCESSOR_NIAGARA2)
+     return 0;
+   if (sparc_cpu == PROCESSOR_ULTRASPARC
+       || sparc_cpu == PROCESSOR_ULTRASPARC3)
+@@ -7372,6 +7405,7 @@ sparc_issue_rate (void)
+   switch (sparc_cpu)
+     {
+     case PROCESSOR_NIAGARA:
++    case PROCESSOR_NIAGARA2:
+     default:
+       return 1;
+     case PROCESSOR_V9:
+--- gcc/config/sparc/sparc.h.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config/sparc/sparc.h	2007-09-26 18:09:47.000000000 -0700
+@@ -206,7 +206,8 @@ extern enum cmodel sparc_cmodel;
+    which requires the following macro to be true if enabled.  Prior to V9,
+    there are no instructions to even talk about memory synchronization.
+    Note that the UltraSPARC III processors don't implement RMO, unlike the
+-   UltraSPARC II processors.  Niagara does not implement RMO either.
++   UltraSPARC II processors.  Niagara and Niagara-2 do not implement RMO
++   either.
+ 
+    Default to false; for example, Solaris never enables RMO, only ever uses
+    total memory ordering (TMO).  */
+@@ -239,11 +240,13 @@ extern enum cmodel sparc_cmodel;
+ #define TARGET_CPU_ultrasparc	8
+ #define TARGET_CPU_ultrasparc3	9
+ #define TARGET_CPU_niagara	10
++#define TARGET_CPU_niagara2	11
+ 
+ #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
+  || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
+  || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3 \
+- || TARGET_CPU_DEFAULT == TARGET_CPU_niagara
++ || TARGET_CPU_DEFAULT == TARGET_CPU_niagara \
++ || TARGET_CPU_DEFAULT == TARGET_CPU_niagara2
+ 
+ #define CPP_CPU32_DEFAULT_SPEC ""
+ #define ASM_CPU32_DEFAULT_SPEC ""
+@@ -268,6 +271,10 @@ extern enum cmodel sparc_cmodel;
+ #define CPP_CPU64_DEFAULT_SPEC "-D__sparc_v9__"
+ #define ASM_CPU64_DEFAULT_SPEC "-Av9b"
+ #endif
++#if TARGET_CPU_DEFAULT == TARGET_CPU_niagara2
++#define CPP_CPU64_DEFAULT_SPEC "-D__sparc_v9__"
++#define ASM_CPU64_DEFAULT_SPEC "-Av9b"
++#endif
+ 
+ #else
+ 
+@@ -359,6 +366,7 @@ extern enum cmodel sparc_cmodel;
+ %{mcpu=ultrasparc:-D__sparc_v9__} \
+ %{mcpu=ultrasparc3:-D__sparc_v9__} \
+ %{mcpu=niagara:-D__sparc_v9__} \
++%{mcpu=niagara2:-D__sparc_v9__} \
+ %{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
+ "
+ #define CPP_ARCH32_SPEC ""
+@@ -409,6 +417,7 @@ extern enum cmodel sparc_cmodel;
+ %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
+ %{mcpu=ultrasparc3:%{!mv8plus:-Av9b}} \
+ %{mcpu=niagara:%{!mv8plus:-Av9b}} \
++%{mcpu=niagara2:%{!mv8plus:-Av9b}} \
+ %{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(asm_cpu_default)}}}}}}} \
+ "
+ 
+@@ -533,7 +542,8 @@ enum processor_type {
+   PROCESSOR_V9,
+   PROCESSOR_ULTRASPARC,
+   PROCESSOR_ULTRASPARC3,
+-  PROCESSOR_NIAGARA
++  PROCESSOR_NIAGARA,
++  PROCESSOR_NIAGARA2
+ };
+ 
+ /* This is set from -m{cpu,tune}=xxx.  */
+@@ -2147,7 +2157,8 @@ do {                                    
+     || (CLASS1) == FPCC_REGS || (CLASS2) == FPCC_REGS)		\
+    ? ((sparc_cpu == PROCESSOR_ULTRASPARC \
+        || sparc_cpu == PROCESSOR_ULTRASPARC3 \
+-       || sparc_cpu == PROCESSOR_NIAGARA) ? 12 : 6) : 2)
++       || sparc_cpu == PROCESSOR_NIAGARA \
++       || sparc_cpu == PROCESSOR_NIAGARA2) ? 12 : 6) : 2)
+ 
+ /* Provide the cost of a branch.  For pre-v9 processors we use
+    a value of 3 to take into account the potential annulling of
+@@ -2160,7 +2171,10 @@ do {                                    
+    mispredicted branch.
+ 
+    On Niagara, normal branches insert 3 bubbles into the pipe
+-   and annulled branches insert 4 bubbles.  */
++   and annulled branches insert 4 bubbles.
++
++   On Niagara-2, a not-taken branch costs 1 cycle whereas a taken
++   branch costs 6 cycles.  */
+ 
+ #define BRANCH_COST \
+ 	((sparc_cpu == PROCESSOR_V9 \
+@@ -2170,17 +2184,21 @@ do {                                    
+             ? 9 \
+ 	 : (sparc_cpu == PROCESSOR_NIAGARA \
+ 	    ? 4 \
+-	 : 3)))
++	 : (sparc_cpu == PROCESSOR_NIAGARA2 \
++	    ? 5 \
++	 : 3))))
+ 
+ #define PREFETCH_BLOCK \
+ 	((sparc_cpu == PROCESSOR_ULTRASPARC \
+           || sparc_cpu == PROCESSOR_ULTRASPARC3 \
+-	  || sparc_cpu == PROCESSOR_NIAGARA) \
++	  || sparc_cpu == PROCESSOR_NIAGARA \
++	  || sparc_cpu == PROCESSOR_NIAGARA2) \
+          ? 64 : 32)
+ 
+ #define SIMULTANEOUS_PREFETCHES \
+ 	((sparc_cpu == PROCESSOR_ULTRASPARC \
+-	  || sparc_cpu == PROCESSOR_NIAGARA) \
++	  || sparc_cpu == PROCESSOR_NIAGARA \
++	  || sparc_cpu == PROCESSOR_NIAGARA2) \
+          ? 2 \
+          : (sparc_cpu == PROCESSOR_ULTRASPARC3 \
+             ? 8 : 3))
+--- gcc/config/sparc/sparc.md.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/config/sparc/sparc.md	2007-09-26 18:09:47.000000000 -0700
+@@ -91,7 +91,8 @@
+    v9,
+    ultrasparc,
+    ultrasparc3,
+-   niagara"
++   niagara,
++   niagara2"
+   (const (symbol_ref "sparc_cpu_attr")))
+ 
+ ;; Attribute for the instruction set.
+@@ -313,6 +314,7 @@
+ (include "ultra1_2.md")
+ (include "ultra3.md")
+ (include "niagara.md")
++(include "niagara2.md")
+ 
+ 
+ ;; Operand and operator predicates.
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-rpath.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-rpath.dpatch
@@ -0,0 +1,67 @@
+#! /bin/sh -e
+
+# DP: - Link ecjx and gij with -rpath $(dbexecdir)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	#cd ${dir}libjava && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+	#rm -f ${dir}libjava/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- libjava/Makefile.am~	2007-03-04 18:50:01.000000000 +0100
++++ libjava/Makefile.am	2007-03-04 19:19:32.000000000 +0100
+@@ -653,7 +653,7 @@
+ ## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
+ ## need this because we are explicitly using libtool to link using the
+ ## `.la' file.
+-gij_LDFLAGS = -rpath $(libdir)/gcj-$(gcc_version) -rpath $(toolexeclibdir) \
++gij_LDFLAGS = -rpath $(dbexecdir) \
+ 	-shared-libgcc $(THREADLDFLAGS)
+ gij_LINK = $(GCJLINK)
+ ## See jv_convert_LDADD.
+@@ -683,7 +683,7 @@
+ ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
+ endif !ENABLE_SHARED
+ 
+-ecjx_LDADD = -L$(here)/.libs libgcj.la
++ecjx_LDADD = -L$(here)/.libs libgcj.la -rpath $(dbexecdir)
+ ecjx_DEPENDENCIES = libgcj.la libgcj.spec
+ 
+ else !NATIVE
+--- libjava/Makefile.in~	2007-03-04 18:50:01.000000000 +0100
++++ libjava/Makefile.in	2007-03-04 19:21:22.000000000 +0100
+@@ -7771,7 +7771,7 @@
+ gcj_dbtool_LDADD = gnu/gcj/tools/gcj_dbtool.lo -L$(here)/.libs libgcj.la
+ gcj_dbtool_DEPENDENCIES = gnu/gcj/tools/gcj_dbtool.lo libgcj.la libgcj.spec
+ gij_SOURCES = 
+-gij_LDFLAGS = -rpath $(libdir)/gcj-$(gcc_version) -rpath $(toolexeclibdir) \
++gij_LDFLAGS = -rpath $(dbexecdir) \
+ 	-shared-libgcc $(THREADLDFLAGS)
+ 
+ gij_LINK = $(GCJLINK)
+@@ -7787,7 +7787,7 @@
+ @ENABLE_SHARED_TRUE@@NATIVE_TRUE@ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) -Djava.class.path=$(ECJ_JAR)
+ @NATIVE_FALSE@ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
+ @NATIVE_FALSE@ecjx_LDADD = 
+-@NATIVE_TRUE@ecjx_LDADD = -L$(here)/.libs libgcj.la
++@NATIVE_TRUE@ecjx_LDADD = -L$(here)/.libs libgcj.la -rpath $(dbexecdir)
+ @NATIVE_FALSE@ecjx_DEPENDENCIES = 
+ @NATIVE_TRUE@ecjx_DEPENDENCIES = libgcj.la libgcj.spec
+ gappletviewer_SOURCES = 
--- gcc-4.1-4.1.2.orig/debian/patches/sparc64-build.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sparc64-build.dpatch
@@ -0,0 +1,58 @@
+#! /bin/sh -e
+# sparc64-build.dpatch by  <schizo@debian.org>
+#
+# DP: Allows sparc64 to build more simply
+
+if [ $# -eq 3 ] && [ "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+	patch -f --no-backup-if-mismatch -p0 < $0;;
+    -unpatch)
+	patch -f --no-backup-if-mismatch -R -p0 < $0;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1;;
+esac
+
+exit 0
+
+diff -urNad gcc/config/sparc/linux64.h sparc64-build.gcc-3.3/src/gcc/config/sparc/linux64.h
+--- gcc/config/sparc/linux64.h	2003-03-13 08:40:33.000000000 +0000
++++ gcc/config/sparc/linux64.h	2003-03-13 08:46:18.000000000 +0000
+@@ -37,8 +37,8 @@
+    + MASK_STACK_BIAS + MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
+ #endif
+ 
+-#undef ASM_CPU_DEFAULT_SPEC
+-#define ASM_CPU_DEFAULT_SPEC "-Av9a"
++#undef ASM_CPU64_DEFAULT_SPEC
++#define ASM_CPU64_DEFAULT_SPEC "-Av9a"
+ 
+ #ifdef SPARC_BI_ARCH
+ 
+--- gcc/config.gcc	2004-06-29 01:44:04.000000000 -0400
++++ gcc/config.gcc	2004-07-05 10:46:52.813558531 -0400
+@@ -1828,8 +1828,17 @@
+ 	use_fixproto=yes
+ 	;;
+ sparc-*-linux*)		# SPARC's running GNU/Linux, libc6
++	# If cpu is specified, assume we want a 32/64 compiler
++	if test x$with_cpu = x; then
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
+ 	tmake_file="${tmake_file} sparc/t-crtfm"
++	else
++	tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h"
++	tmake_file="${tmake_file} sparc/t-linux64 sparc/t-crtfm"
++	float_format=sparc
++	fi
++#	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
++#	tmake_file="${tmake_file} sparc/t-crtfm"
+ 	;;
+ sparc-*-rtems*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h sparc/sol2.h sparc/elf.h sparc/rtemself.h rtems.h"
--- gcc-4.1-4.1.2.orig/debian/patches/sparc-niagara2-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sparc-niagara2-doc.dpatch
@@ -0,0 +1,66 @@
+#! /bin/sh -e
+
+# DP: Add niagara2 optimization support (documentation)
+
+if [ $# -eq 3 ] && [ "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+	patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        cd ${dir}libcpp && autoconf
+	;;
+    -unpatch)
+	patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        cd ${dir}libcpp && autoconf
+	;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1;;
+esac
+
+exit 0
+
+--- gcc/doc/invoke.texi.~1~	2007-09-26 18:09:21.000000000 -0700
++++ gcc/doc/invoke.texi	2007-09-26 18:09:47.000000000 -0700
+@@ -12174,7 +12174,7 @@ for machine type @var{cpu_type}.  Suppor
+ @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
+ @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
+ @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
+-@samp{ultrasparc3}, and @samp{niagara}.
++@samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}.
+ 
+ Default instruction scheduling parameters are used for values that select
+ an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
+@@ -12188,7 +12188,7 @@ implementations.
+     v8:             supersparc, hypersparc
+     sparclite:      f930, f934, sparclite86x
+     sparclet:       tsc701
+-    v9:             ultrasparc, ultrasparc3, niagara
++    v9:             ultrasparc, ultrasparc3, niagara, niagara2
+ @end smallexample
+ 
+ By default (unless configured otherwise), GCC generates code for the V7
+@@ -12226,7 +12226,8 @@ optimizes it for the Sun UltraSPARC I/II
+ @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
+ Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
+ @option{-mcpu=niagara}, the compiler additionally optimizes it for
+-Sun UltraSPARC T1 chips.
++Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
++additionally optimizes it for Sun UltraSPARC T2 chips.
+ 
+ @item -mtune=@var{cpu_type}
+ @opindex mtune
+@@ -12239,7 +12240,7 @@ The same values for @option{-mcpu=@var{c
+ that select a particular cpu implementation.  Those are @samp{cypress},
+ @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
+ @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
+-@samp{ultrasparc3}, and @samp{niagara}.
++@samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.
+ 
+ @item -mv8plus
+ @itemx -mno-v8plus
--- gcc-4.1-4.1.2.orig/debian/patches/gdc-4.1.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gdc-4.1.dpatch
@@ -0,0 +1,648 @@
+#! /bin/sh -e
+
+# gdc-4.1.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Setup gcc-4.1.x for D
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+diff -ruN gcc/DEV-PHASE gcc/DEV-PHASE
+--- gcc/DEV-PHASE	2007-10-22 06:54:31.696246014 +0000
++++ gcc/DEV-PHASE	2007-10-22 07:20:13.288113604 +0000
+@@ -1 +1 @@
+-prerelease
++prerelease gdc 0.25 20080419, using dmd 1.024
+diff -ruN gcc/cgraph.c gcc/cgraph.c
+--- gcc/cgraph.c	2007-10-22 06:54:19.984995402 +0000
++++ gcc/cgraph.c	2007-10-22 07:20:12.859994795 +0000
+@@ -182,6 +182,7 @@
+ cgraph_node (tree decl)
+ {
+   struct cgraph_node key, *node, **slot;
++  tree context;
+ 
+   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+ 
+@@ -203,12 +204,16 @@
+   node = cgraph_create_node ();
+   node->decl = decl;
+   *slot = node;
+-  if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
++  if (!DECL_NO_STATIC_CHAIN (decl))
+     {
+-      node->origin = cgraph_node (DECL_CONTEXT (decl));
+-      node->next_nested = node->origin->nested;
+-      node->origin->nested = node;
+-      node->master_clone = node;
++      context = decl_function_context (decl);
++      if (context)
++        {
++	  node->origin = cgraph_node (context);
++	  node->next_nested = node->origin->nested;
++	  node->origin->nested = node;
++	  node->master_clone = node;
++        }
+     }
+   return node;
+ }
+diff -ruN gcc/config/arm/arm.c gcc/config/arm/arm.c
+--- gcc/config/arm/arm.c	2007-10-22 06:55:10.406990680 +0000
++++ gcc/config/arm/arm.c	2007-10-22 07:20:12.900005899 +0000
+@@ -15382,6 +15382,15 @@
+ 	  asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n",
+ 		       REGNO (e0), (int)INTVAL(XEXP (e1, 1)));
+ 	}
++      else if (GET_CODE (e1) == PLUS
++	      && GET_CODE (XEXP (e1, 0)) == REG
++	      && REGNO (XEXP (e1, 0)) == SP_REGNUM
++	      && GET_CODE (XEXP (e1, 1)) == CONST_INT)
++	{
++	  /* Set reg to offset from sp.  */
++	  asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n",
++		       REGNO (e0), (int)INTVAL(XEXP (e1, 1)));
++	}
+       else
+ 	abort ();
+       break;
+diff -ruN gcc/config/darwin.h gcc/config/darwin.h
+--- gcc/config/darwin.h	2007-10-22 06:55:10.194931820 +0000
++++ gcc/config/darwin.h	2007-10-22 07:20:12.908008120 +0000
+@@ -926,8 +926,8 @@
+ 
+ #define MACHO_DYNAMIC_NO_PIC_P	(TARGET_DYNAMIC_NO_PIC)
+ #define MACHOPIC_INDIRECT	(flag_pic || MACHO_DYNAMIC_NO_PIC_P)
+-#define MACHOPIC_JUST_INDIRECT	(flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P)
+-#define MACHOPIC_PURE		(flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P)
++#define MACHOPIC_JUST_INDIRECT	(MACHO_DYNAMIC_NO_PIC_P)
++#define MACHOPIC_PURE		(flag_pic && ! MACHO_DYNAMIC_NO_PIC_P)
+ 
+ #undef TARGET_ENCODE_SECTION_INFO
+ #define TARGET_ENCODE_SECTION_INFO  darwin_encode_section_info
+diff -ruN gcc/config/i386/i386.c gcc/config/i386/i386.c
+--- gcc/config/i386/i386.c	2007-10-22 06:55:07.418161092 +0000
++++ gcc/config/i386/i386.c	2007-10-22 07:20:12.936015892 +0000
+@@ -5018,6 +5018,11 @@
+     frame->red_zone_size = 0;
+   frame->to_allocate -= frame->red_zone_size;
+   frame->stack_pointer_offset -= frame->red_zone_size;
++
++  if (cfun->naked)
++      /* As above, skip return address */
++      frame->stack_pointer_offset = UNITS_PER_WORD;
++
+ #if 0
+   fprintf (stderr, "nregs: %i\n", frame->nregs);
+   fprintf (stderr, "size: %i\n", size);
+@@ -17346,7 +17351,7 @@
+ 	  output_set_got (tmp);
+ 
+ 	  xops[1] = tmp;
+-	  output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
++	  output_asm_insn ("mov{l}\t{%a0@GOT(%1), %1|%1, %a0@GOT[%1]}", xops);
+ 	  output_asm_insn ("jmp\t{*}%1", xops);
+ 	}
+     }
+diff -ruN gcc/config/rs6000/rs6000.c gcc/config/rs6000/rs6000.c
+--- gcc/config/rs6000/rs6000.c	2007-10-22 06:55:09.006601984 +0000
++++ gcc/config/rs6000/rs6000.c	2007-10-22 07:20:12.968024775 +0000
+@@ -15306,7 +15306,8 @@
+ 	 use language_string.
+ 	 C is 0.  Fortran is 1.  Pascal is 2.  Ada is 3.  C++ is 9.
+ 	 Java is 13.  Objective-C is 14.  */
+-      if (! strcmp (language_string, "GNU C"))
++      if (! strcmp (language_string, "GNU C") ||
++ 	  ! strcmp (language_string, "GNU D"))
+ 	i = 0;
+       else if (! strcmp (language_string, "GNU F77")
+ 	       || ! strcmp (language_string, "GNU F95"))
+diff -ruN gcc/dwarf2out.c gcc/dwarf2out.c
+--- gcc/dwarf2out.c	2007-10-22 06:54:38.122029574 +0000
++++ gcc/dwarf2out.c	2007-10-22 07:20:12.996032548 +0000
+@@ -5322,7 +5322,8 @@
+   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
+ 
+   return (lang == DW_LANG_C || lang == DW_LANG_C89
+-	  || lang == DW_LANG_C_plus_plus);
++	  || lang == DW_LANG_C_plus_plus
++	  || lang == DW_LANG_D);
+ }
+ 
+ /* Return TRUE if the language is C++.  */
+@@ -12213,6 +12214,8 @@
+     language = DW_LANG_Pascal83;
+   else if (strcmp (language_string, "GNU Java") == 0)
+     language = DW_LANG_Java;
++  else if (strcmp (language_string, "GNU D") == 0)
++    language = DW_LANG_D;
+   else
+     language = DW_LANG_C89;
+ 
+@@ -13355,7 +13358,7 @@
+ 
+       /* For local statics lookup proper context die.  */
+       if (TREE_STATIC (decl) && decl_function_context (decl))
+-	context_die = lookup_decl_die (DECL_CONTEXT (decl));
++	context_die = lookup_decl_die (decl_function_context (decl));
+ 
+       /* If we are in terse mode, don't generate any DIEs to represent any
+ 	 variable declarations or definitions.  */
+diff -ruN gcc/expr.c gcc/expr.c
+--- gcc/expr.c	2007-10-22 06:54:38.122029574 +0000
++++ gcc/expr.c	2007-10-22 07:20:13.016038100 +0000
+@@ -8477,6 +8477,11 @@
+       /* Lowered by gimplify.c.  */
+       gcc_unreachable ();
+ 
++    case STATIC_CHAIN_EXPR:
++    case STATIC_CHAIN_DECL:
++      /* Lowered by tree-nested.c */
++      gcc_unreachable ();
++
+     case EXC_PTR_EXPR:
+       return get_exception_pointer (cfun);
+ 
+diff -ruN gcc/function.c gcc/function.c
+--- gcc/function.c	2007-10-22 06:54:39.682462693 +0000
++++ gcc/function.c	2007-10-22 07:20:13.032042541 +0000
+@@ -2997,7 +2997,8 @@
+       FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
+ 			    data.passed_type, data.named_arg);
+ 
+-      assign_parm_adjust_stack_rtl (&data);
++      if (!cfun->naked)
++	assign_parm_adjust_stack_rtl (&data);
+ 
+       if (assign_parm_setup_block_p (&data))
+ 	assign_parm_setup_block (&all, parm, &data);
+@@ -3012,7 +3013,8 @@
+ 
+   /* Output all parameter conversion instructions (possibly including calls)
+      now that all parameters have been copied out of hard registers.  */
+-  emit_insn (all.conversion_insns);
++  if (!cfun->naked)
++    emit_insn (all.conversion_insns);
+ 
+   /* If we are receiving a struct value address as the first argument, set up
+      the RTL for the function result. As this might require code to convert
+@@ -3142,6 +3144,9 @@
+   struct assign_parm_data_all all;
+   tree fnargs, parm, stmts = NULL;
+ 
++  if (cfun->naked)
++    return NULL;
++
+   assign_parms_initialize_all (&all);
+   fnargs = assign_parms_augmented_arg_list (&all);
+ 
+@@ -4176,11 +4181,15 @@
+       tree parm = cfun->static_chain_decl;
+       rtx local = gen_reg_rtx (Pmode);
+ 
+-      set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
+       SET_DECL_RTL (parm, local);
+       mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
+ 
+-      emit_move_insn (local, static_chain_incoming_rtx);
++      if (! cfun->custom_static_chain)
++        {
++	    set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
++	    emit_move_insn (local, static_chain_incoming_rtx);
++	}
++      /* else, the static chain will be set in the main body */
+     }
+ 
+   /* If the function receives a non-local goto, then store the
+@@ -5093,6 +5102,9 @@
+ #endif
+   edge_iterator ei;
+ 
++  if (cfun->naked)
++      return;
++
+ #ifdef HAVE_prologue
+   if (HAVE_prologue)
+     {
+diff -ruN gcc/function.h gcc/function.h
+--- gcc/function.h	2007-10-22 06:54:39.690464914 +0000
++++ gcc/function.h	2007-10-22 07:20:13.040044762 +0000
+@@ -461,6 +461,14 @@
+   /* Number of units of floating point registers that need saving in stdarg
+      function.  */
+   unsigned int va_list_fpr_size : 8;
++
++  /* Nonzero if static chain is initialized by something other than
++     static_chain_incoming_rtx. */
++  unsigned int custom_static_chain : 1;
++
++  /* Nonzero if no code should be generated for prologues, copying
++     parameters, etc. */
++  unsigned int naked : 1;
+ };
+ 
+ /* If va_list_[gf]pr_size is set to this, it means we don't know how
+diff -ruN gcc/gcc.c gcc/gcc.c
+--- gcc/gcc.c	2007-10-22 06:54:20.021005397 +0000
++++ gcc/gcc.c	2007-10-22 07:20:13.092059197 +0000
+@@ -126,6 +126,9 @@
+ /* Flag set by cppspec.c to 1.  */
+ int is_cpp_driver;
+ 
++/* Flag set by drivers needing Pthreads. */
++int need_pthreads;
++
+ /* Flag saying to pass the greatest exit code returned by a sub-process
+    to the calling program.  */
+ static int pass_exit_codes;
+@@ -461,6 +464,7 @@
+ 	assembler has done its job.
+  %D	Dump out a -L option for each directory in startfile_prefixes.
+ 	If multilib_dir is set, extra entries are generated with it affixed.
++ %N     Output the currently selected multilib directory name.
+  %l     process LINK_SPEC as a spec.
+  %L     process LIB_SPEC as a spec.
+  %G     process LIBGCC_SPEC as a spec.
+@@ -879,6 +883,8 @@
+ #endif
+ #endif
+ 
++#define GCC_SPEC_FORMAT_4 1
++
+ /* Record the mapping from file suffixes for compilation specs.  */
+ 
+ struct compiler
+@@ -3818,6 +3824,9 @@
+ 	}
+     }
+ 
++  if (need_pthreads)
++      n_switches++;
++
+   if (save_temps_flag && use_pipes)
+     {
+       /* -save-temps overrides -pipe, so that temp files are produced */
+@@ -4156,6 +4165,18 @@
+ 	}
+     }
+ 
++  if (need_pthreads)
++    {
++	switches[n_switches].part1 = "pthread";
++	switches[n_switches].args = 0;
++	switches[n_switches].live_cond = SWITCH_OK;
++	/* Do not print an error if there is not expansion for -pthread. */
++	switches[n_switches].validated = 1;
++	switches[n_switches].ordering = 0;
++
++	n_switches++;
++    }
++
+   switches[n_switches].part1 = 0;
+   infiles[n_infiles].name = 0;
+ }
+@@ -5136,6 +5157,17 @@
+ 	      return value;
+ 	    break;
+ 
++	  case 'N':
++	    if (multilib_dir)
++	      {
++		arg_going = 1;
++		obstack_grow (&obstack, "-fmultilib-dir=",
++			      strlen ("-fmultilib-dir="));
++	        obstack_grow (&obstack, multilib_dir,
++			      strlen (multilib_dir));
++	      }
++	    break;
++
+ 	    /* Here we define characters other than letters and digits.  */
+ 
+ 	  case '{':
+diff -ruN gcc/gcc.h gcc/gcc.h
+--- gcc/gcc.h	2007-10-22 06:54:20.021005397 +0000
++++ gcc/gcc.h	2007-10-22 07:20:13.108063638 +0000
+@@ -38,7 +38,7 @@
+    || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
+    || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
+    || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
+-   || (CHAR) == 'B' || (CHAR) == 'b')
++   || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'J')
+ 
+ /* This defines which multi-letter switches take arguments.  */
+ 
+diff -ruN gcc/gimplify.c gcc/gimplify.c
+--- gcc/gimplify.c	2007-10-22 06:54:52.666066460 +0000
++++ gcc/gimplify.c	2007-10-22 07:20:13.116065859 +0000
+@@ -4200,6 +4200,12 @@
+ 	    }
+ 	  break;
+ 
++	case STATIC_CHAIN_EXPR:
++	  /* The argument is used as information only.  No need to gimplify */
++	case STATIC_CHAIN_DECL:  
++	  ret = GS_ALL_DONE;
++	  break;
++	  
+ 	case TREE_LIST:
+ 	  gcc_unreachable ();
+ 
+diff -ruN gcc/predict.c gcc/predict.c
+--- gcc/predict.c	2007-10-22 06:54:38.342090655 +0000
++++ gcc/predict.c	2007-10-22 07:20:13.128069190 +0000
+@@ -1339,6 +1339,7 @@
+ 	     care for error returns and other cases are often used for
+ 	     fast paths trought function.  */
+ 	  if (e->dest == EXIT_BLOCK_PTR
++	      && last_stmt (bb) == NULL_TREE
+ 	      && TREE_CODE (last_stmt (bb)) == RETURN_EXPR
+ 	      && !single_pred_p (bb))
+ 	    {
+diff -ruN gcc/real.c gcc/real.c
+--- gcc/real.c	2007-10-22 06:54:31.692244904 +0000
++++ gcc/real.c	2007-10-22 07:20:13.140072521 +0000
+@@ -2212,6 +2212,8 @@
+   np2 = SIGNIFICAND_BITS - fmt->p * fmt->log2_b;
+   memset (r->sig, -1, SIGSZ * sizeof (unsigned long));
+   clear_significand_below (r, np2);
++  if (REAL_MODE_FORMAT_COMPOSITE_P (mode))
++      clear_significand_bit (r, SIGNIFICAND_BITS - fmt->pnan - 1);
+ }
+ 
+ /* Fills R with 2**N.  */
+diff -ruN gcc/tree-dump.c gcc/tree-dump.c
+--- gcc/tree-dump.c	2007-10-22 06:54:19.956987628 +0000
++++ gcc/tree-dump.c	2007-10-22 07:20:13.152075852 +0000
+@@ -582,6 +582,10 @@
+       dump_child ("args", TREE_OPERAND (t, 1));
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++      dump_child ("func", TREE_OPERAND (t, 0));
++      break;
++
+     case CONSTRUCTOR:
+       {
+ 	unsigned HOST_WIDE_INT cnt;
+diff -ruN gcc/tree-gimple.c gcc/tree-gimple.c
+--- gcc/tree-gimple.c	2007-10-22 06:54:31.688243793 +0000
++++ gcc/tree-gimple.c	2007-10-22 07:20:13.200089176 +0000
+@@ -72,6 +72,8 @@
+     case VECTOR_CST:
+     case OBJ_TYPE_REF:
+     case ASSERT_EXPR:
++    case STATIC_CHAIN_EXPR: /* not sure if this is right...*/
++    case STATIC_CHAIN_DECL:
+       return true;
+ 
+     default:
+@@ -143,7 +145,10 @@
+ 	  || TREE_CODE (t) == WITH_SIZE_EXPR
+ 	  /* These are complex lvalues, but don't have addresses, so they
+ 	     go here.  */
+-	  || TREE_CODE (t) == BIT_FIELD_REF);
++	  || TREE_CODE (t) == BIT_FIELD_REF
++          /* This is an lvalue because it will be replaced with the real
++	     static chain decl. */
++	  || TREE_CODE (t) == STATIC_CHAIN_DECL);
+ }
+ 
+ /*  Return true if T is a GIMPLE condition.  */
+diff -ruN gcc/tree-inline.c gcc/tree-inline.c
+--- gcc/tree-inline.c	2007-10-22 06:54:53.982431834 +0000
++++ gcc/tree-inline.c	2007-10-22 07:20:13.208091397 +0000
+@@ -602,10 +602,21 @@
+      knows not to copy VAR_DECLs, etc., so this is safe.  */
+   else
+     {
++      if (! id->cloning_p && ! id->saving_p &&
++	  TREE_CODE (*tp) == MODIFY_EXPR &&
++	  TREE_OPERAND (*tp, 0) ==
++	  DECL_STRUCT_FUNCTION (fn)->static_chain_decl)
++	{
++	  /* Don't use special methods to initialize the static chain
++	     if expanding inline.  If this code could somehow be
++	     expanded in expand_start_function, it would not be
++	     necessary to deal with it here. */
++	  *tp = build_empty_stmt ();
++	}
+       /* Here we handle trees that are not completely rewritten.
+ 	 First we detect some inlining-induced bogosities for
+ 	 discarding.  */
+-      if (TREE_CODE (*tp) == MODIFY_EXPR
++      else if (TREE_CODE (*tp) == MODIFY_EXPR
+ 	  && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
+ 	  && (lang_hooks.tree_inlining.auto_var_in_fn_p
+ 	      (TREE_OPERAND (*tp, 0), fn)))
+diff -ruN gcc/tree-nested.c gcc/tree-nested.c
+--- gcc/tree-nested.c	2007-10-22 06:54:53.902409623 +0000
++++ gcc/tree-nested.c	2007-10-22 07:20:13.220094728 +0000
+@@ -323,6 +323,7 @@
+   if (!decl)
+     {
+       tree type;
++      enum tree_code code;
+ 
+       type = get_frame_type (info->outer);
+       type = build_pointer_type (type);
+@@ -333,12 +334,17 @@
+ 	 Note also that it's represented as a parameter.  This is more
+ 	 close to the truth, since the initial value does come from 
+ 	 the caller.  */
+-      decl = build_decl (PARM_DECL, create_tmp_var_name ("CHAIN"), type);
++      /* If the function has a custom static chain, a VAR_DECL is more
++	 appropriate. */
++      code = DECL_STRUCT_FUNCTION (info->context)->custom_static_chain ?
++	  VAR_DECL : PARM_DECL;
++      decl = build_decl (code, create_tmp_var_name ("CHAIN"), type);
+       DECL_ARTIFICIAL (decl) = 1;
+       DECL_IGNORED_P (decl) = 1;
+       TREE_USED (decl) = 1;
+       DECL_CONTEXT (decl) = info->context;
+-      DECL_ARG_TYPE (decl) = type;
++      if (TREE_CODE (decl) == PARM_DECL)
++	  DECL_ARG_TYPE (decl) = type;
+ 
+       /* Tell tree-inline.c that we never write to this variable, so
+ 	 it can copy-prop the replacement value immediately.  */
+@@ -741,6 +747,8 @@
+ 
+   if (info->context == target_context)
+     {
++      /* might be doing something wrong to need the following line.. */
++      get_frame_type (info);
+       x = build_addr (info->frame_decl, target_context);
+     }
+   else
+@@ -1224,6 +1232,10 @@
+       if (DECL_NO_STATIC_CHAIN (decl))
+ 	break;
+ 
++      /* Don't use a trampoline for a static reference. */
++      if (TREE_STATIC (t))
++	break;
++
+       /* Lookup the immediate parent of the callee, as that's where
+ 	 we need to insert the trampoline.  */
+       for (i = info; i->context != target_context; i = i->outer)
+@@ -1288,6 +1300,14 @@
+ 	  = get_static_chain (info, target_context, &wi->tsi);
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++      *tp = get_static_chain (info, TREE_OPERAND (t, 0), &wi->tsi);
++      break;
++
++    case STATIC_CHAIN_DECL:
++      *tp = get_chain_decl (info);
++      break;
++ 
+     case RETURN_EXPR:
+     case MODIFY_EXPR:
+     case WITH_SIZE_EXPR:
+@@ -1387,7 +1407,28 @@
+       tree x = build (COMPONENT_REF, TREE_TYPE (root->chain_field),
+ 		      root->frame_decl, root->chain_field, NULL_TREE);
+       x = build (MODIFY_EXPR, TREE_TYPE (x), x, get_chain_decl (root));
+-      append_to_statement_list (x, &stmt_list);
++      /* If the function has a custom static chain, chain_field must
++	 be set after the static chain. */
++      if (DECL_STRUCT_FUNCTION (root->context)->custom_static_chain)
++	{
++	  /* Should use walk_function instead. */
++	  tree_stmt_iterator i =
++	      tsi_start ( BIND_EXPR_BODY (DECL_SAVED_TREE (context)));
++	  while (!tsi_end_p (i))
++	    {
++	      tree t = tsi_stmt (i);
++	      if (TREE_CODE (t) == MODIFY_EXPR &&
++		  TREE_OPERAND (t, 0) == root->chain_decl)
++		{
++		  tsi_link_after(& i, x, TSI_SAME_STMT);
++		  x = NULL_TREE;
++		  break;
++		}
++	    }
++	  gcc_assert(x == NULL_TREE);
++	}
++      else
++	append_to_statement_list (x, &stmt_list);
+     }
+ 
+   /* If trampolines were created, then we need to initialize them.  */
+diff -ruN gcc/tree-pretty-print.c gcc/tree-pretty-print.c
+--- gcc/tree-pretty-print.c	2007-10-22 06:54:19.984995402 +0000
++++ gcc/tree-pretty-print.c	2007-10-22 07:20:13.260105832 +0000
+@@ -1004,6 +1004,16 @@
+ 	pp_string (buffer, " [tail call]");
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++	pp_string (buffer, "<<static chain of ");
++	dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
++	pp_string (buffer, ">>");
++      break;
++
++    case STATIC_CHAIN_DECL:
++       pp_string (buffer, "<<static chain decl>>");
++       break;
++	
+     case WITH_CLEANUP_EXPR:
+       NIY;
+       break;
+diff -ruN gcc/tree-sra.c gcc/tree-sra.c
+--- gcc/tree-sra.c	2007-10-22 06:54:53.418275245 +0000
++++ gcc/tree-sra.c	2007-10-22 07:20:13.268108053 +0000
+@@ -198,6 +198,8 @@
+     case RECORD_TYPE:
+       {
+ 	bool saw_one_field = false;
++	tree last_offset = size_zero_node;
++	tree cmp;
+ 
+ 	for (t = TYPE_FIELDS (type); t ; t = TREE_CHAIN (t))
+ 	  if (TREE_CODE (t) == FIELD_DECL)
+@@ -207,6 +209,11 @@
+ 		  && (tree_low_cst (DECL_SIZE (t), 1)
+ 		      != TYPE_PRECISION (TREE_TYPE (t))))
+ 		goto fail;
++	      /* Reject aliased fields created by GDC for anonymous unions. */
++	      cmp = fold_binary_to_constant (LE_EXPR, boolean_type_node,
++		DECL_FIELD_OFFSET (t), last_offset);
++	      if (cmp == NULL_TREE || tree_expr_nonzero_p (cmp))
++		goto fail;
+ 
+ 	      saw_one_field = true;
+ 	    }
+diff -ruN gcc/tree.def gcc/tree.def
+--- gcc/tree.def	2007-10-22 06:54:52.758092003 +0000
++++ gcc/tree.def	2007-10-22 07:20:13.276110273 +0000
+@@ -526,6 +526,13 @@
+    Operand 2 is the static chain argument, or NULL.  */
+ DEFTREECODE (CALL_EXPR, "call_expr", tcc_expression, 3)
+ 
++/* Operand 0 is the FUNC_DECL of the outer function for
++   which the static chain is to be computed. */
++DEFTREECODE (STATIC_CHAIN_EXPR, "static_chain_expr", tcc_expression, 1)
++    
++/* Represents a function's static chain.  It can be used as an lvalue. */
++DEFTREECODE (STATIC_CHAIN_DECL, "static_chain_decl", tcc_expression, 0)
++
+ /* Specify a value to compute along with its corresponding cleanup.
+    Operand 0 is the cleanup expression.
+    The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
+diff -ruN gcc/varray.h gcc/varray.h
+--- gcc/varray.h	2007-10-22 06:55:13.391819157 +0000
++++ gcc/varray.h	2007-10-22 07:20:13.284112494 +0000
+@@ -62,6 +62,17 @@
+   NUM_VARRAY_DATA
+ };
+ 
++#ifndef __cplusplus 
++# define VARRAY_STRANGE_1 rtx
++# define VARRAY_STRANGE_2 rtvec
++# define VARRAY_STRANGE_3 tree
++#else
++# define VARRAY_STRANGE_1 rtx_
++# define VARRAY_STRANGE_2 rtvec_
++# define VARRAY_STRANGE_3 tree_
++#endif
++
++
+ /* Union of various array types that are used.  */
+ typedef union varray_data_tag GTY (()) {
+   char			  GTY ((length ("%0.num_elements"),
+@@ -91,11 +102,11 @@
+   char			 *GTY ((length ("%0.num_elements"),
+ 				tag ("VARRAY_DATA_CPTR")))	cptr[1];
+   rtx			  GTY ((length ("%0.num_elements"),
+-				tag ("VARRAY_DATA_RTX")))	rtx[1];
++				tag ("VARRAY_DATA_RTX")))	VARRAY_STRANGE_1[1];
+   rtvec			  GTY ((length ("%0.num_elements"),
+-				tag ("VARRAY_DATA_RTVEC")))	rtvec[1];
++				tag ("VARRAY_DATA_RTVEC")))	VARRAY_STRANGE_2[1];
+   tree			  GTY ((length ("%0.num_elements"),
+-				tag ("VARRAY_DATA_TREE")))	tree[1];
++				tag ("VARRAY_DATA_TREE")))	VARRAY_STRANGE_3[1];
+   struct bitmap_head_def *GTY ((length ("%0.num_elements"),
+ 				tag ("VARRAY_DATA_BITMAP")))	bitmap[1];
+   struct reg_info_def	 *GTY ((length ("%0.num_elements"), skip,
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-fjump.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-fjump.dpatch
@@ -0,0 +1,320 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: gcc/config/m68k/m68k.md:
+# DP: always use as fjcc pseudo op, we rely heavily on as 
+# DP: to generate the right size for the jump instructions
+# DP: fixes #359281
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+---
+ gcc/config/m68k/m68k.md |   90 ++++++++++++++----------------------------------
+ 1 file changed, 27 insertions(+), 63 deletions(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.md
++++ gcc-4.1/gcc/config/m68k/m68k.md
+@@ -5562,10 +5562,7 @@
+ 		      (pc)))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbeq %l0", "fbeq %l0", "jbeq %l0");
+-  else
+-    OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
++  OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
+ })
+ 
+ (define_insn "bne"
+@@ -5576,10 +5573,7 @@
+ 		      (pc)))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbne %l0", "fbne %l0", "jbne %l0");
+-  else
+-    OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
++  OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
+ })
+ 
+ (define_insn "bgt"
+@@ -5590,10 +5584,7 @@
+ 		      (pc)))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbgt %l0", "fbgt %l0", 0);
+-  else
+-    OUTPUT_JUMP ("jgt %l0", "fjgt %l0", 0);
++  OUTPUT_JUMP ("jgt %l0", "fjgt %l0", 0);
+ })
+ 
+ (define_insn "bgtu"
+@@ -5615,10 +5606,7 @@
+ 		      (pc)))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jblt %l0", "fblt %l0", "jbmi %l0");
+-  else
+-    OUTPUT_JUMP ("jlt %l0", "fjlt %l0", "jmi %l0");
++  OUTPUT_JUMP ("jlt %l0", "fjlt %l0", "jmi %l0");
+ })
+ 
+ (define_insn "bltu"
+@@ -5640,10 +5628,7 @@
+ 		      (pc)))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbge %l0", "fbge %l0", "jbpl %l0");
+-  else
+-    OUTPUT_JUMP ("jge %l0", "fjge %l0", "jpl %l0");
++  OUTPUT_JUMP ("jge %l0", "fjge %l0", "jpl %l0");
+ })
+ 
+ (define_insn "bgeu"
+@@ -5665,10 +5650,7 @@
+ 		      (pc)))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jble %l0", "fble %l0", 0);
+-  else
+-    OUTPUT_JUMP ("jle %l0", "fjle %l0", 0);
++  OUTPUT_JUMP ("jle %l0", "fjle %l0", 0);
+ })
+ 
+ (define_insn "bleu"
+@@ -5690,7 +5672,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbor %l0" : "fjor %l0";
++  return "fjor %l0";
+ })
+ 
+ (define_insn "bunordered"
+@@ -5701,7 +5683,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbun %l0" : "fjun %l0";
++  return "fjun %l0";
+ })
+ 
+ (define_insn "buneq"
+@@ -5712,7 +5694,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbueq %l0" : "fjueq %l0";
++  return "fjueq %l0";
+ })
+ 
+ (define_insn "bunge"
+@@ -5723,7 +5705,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbuge %l0" : "fjuge %l0";
++  return "fjuge %l0";
+ })
+ 
+ (define_insn "bungt"
+@@ -5734,7 +5716,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbugt %l0" : "fjugt %l0";
++  return "fjugt %l0";
+ })
+ 
+ (define_insn "bunle"
+@@ -5745,7 +5727,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbule %l0" : "fjule %l0";
++  return "fjule %l0";
+ })
+ 
+ (define_insn "bunlt"
+@@ -5756,7 +5738,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbult %l0" : "fjult %l0";
++  return "fjult %l0";
+ })
+ 
+ (define_insn "bltgt"
+@@ -5767,7 +5749,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbogl %l0" : "fjogl %l0";
++  return "fjogl %l0";
+ })
+ 
+ ;; Negated conditional jump instructions.
+@@ -5780,10 +5762,7 @@
+ 		      (label_ref (match_operand 0 "" ""))))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbne %l0", "fbne %l0", "jbne %l0");
+-  else
+-    OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
++  OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
+ })
+ 
+ (define_insn ""
+@@ -5794,10 +5773,7 @@
+ 		      (label_ref (match_operand 0 "" ""))))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbeq %l0", "fbeq %l0", "jbeq %l0");
+-  else
+-    OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
++  OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
+ })
+ 
+ (define_insn ""
+@@ -5808,10 +5784,7 @@
+ 		      (label_ref (match_operand 0 "" ""))))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jble %l0", "fbngt %l0", 0);
+-  else
+-    OUTPUT_JUMP ("jle %l0", "fjngt %l0", 0);
++  OUTPUT_JUMP ("jle %l0", "fjngt %l0", 0);
+ })
+ 
+ (define_insn ""
+@@ -5833,10 +5806,7 @@
+ 		      (label_ref (match_operand 0 "" ""))))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbge %l0", "fbnlt %l0", "jbpl %l0");
+-  else
+-    OUTPUT_JUMP ("jge %l0", "fjnlt %l0", "jpl %l0");
++  OUTPUT_JUMP ("jge %l0", "fjnlt %l0", "jpl %l0");
+ })
+ 
+ (define_insn ""
+@@ -5858,10 +5828,7 @@
+ 		      (label_ref (match_operand 0 "" ""))))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jblt %l0", "fbnge %l0", "jbmi %l0");
+-  else
+-    OUTPUT_JUMP ("jlt %l0", "fjnge %l0", "jmi %l0");
++  OUTPUT_JUMP ("jlt %l0", "fjnge %l0", "jmi %l0");
+ })
+ 
+ (define_insn ""
+@@ -5883,10 +5850,7 @@
+ 		      (label_ref (match_operand 0 "" ""))))]
+   ""
+ {
+-  if (MOTOROLA)
+-    OUTPUT_JUMP ("jbgt %l0", "fbnle %l0", 0);
+-  else
+-    OUTPUT_JUMP ("jgt %l0", "fjnle %l0", 0);
++  OUTPUT_JUMP ("jgt %l0", "fjnle %l0", 0);
+ })
+ 
+ (define_insn ""
+@@ -5908,7 +5872,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbun %l0" : "fjun %l0";
++  return "fjun %l0";
+ })
+ 
+ (define_insn "*bunordered_rev"
+@@ -5919,7 +5883,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbor %l0" : "fjor %l0";
++  return "fjor %l0";
+ })
+ 
+ (define_insn "*buneq_rev"
+@@ -5930,7 +5894,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbogl %l0" : "fjogl %l0";
++  return "fjogl %l0";
+ })
+ 
+ (define_insn "*bunge_rev"
+@@ -5941,7 +5905,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbolt %l0" : "fjolt %l0";
++  return "fjolt %l0";
+ })
+ 
+ (define_insn "*bunle_rev"
+@@ -5952,7 +5916,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbogt %l0" : "fjogt %l0";
++  return "fjogt %l0";
+ })
+ 
+ (define_insn "*bunlt_rev"
+@@ -5963,7 +5927,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fboge %l0" : "fjoge %l0";
++  return "fjoge %l0";
+ })
+ 
+ (define_insn "*bltgt_rev"
+@@ -5974,7 +5938,7 @@
+   "TARGET_68881"
+ {
+   gcc_assert (cc_prev_status.flags & CC_IN_68881);
+-  return MOTOROLA ? "fbueq %l0" : "fjueq %l0";
++  return "fjueq %l0";
+ })
+ 
+ ;; Unconditional and other jump instructions
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-vis-r116506.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-vis-r116506.dpatch
@@ -0,0 +1,100 @@
+#! /bin/sh -e
+
+# DP: g++ visibility patches (taken from the redhat/gcc-4_1-branch)
+# DP:   PR c++/28370.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+gcc/
+
+2006-07-15  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/28370
+	* decl2.c (note_vague_linkage_var): Removed.
+	(finish_static_data_member_decl): Add decl to pending_statics vector
+	directly.  Do it even for non-public decls.
+
+gcc/testsuite/
+
+2006-07-15  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/28370
+	* g++.dg/template/anon3.C: New test.
+
+Index: gcc/testsuite/g++.dg/template/anon3.C
+===================================================================
+--- gcc/testsuite/g++.dg/template/anon3.C	(Revision 0)
++++ gcc/testsuite/g++.dg/template/anon3.C	(Revision 116506)
+@@ -0,0 +1,20 @@
++// PR c++/28370
++// { dg-do run }
++
++namespace
++{
++  template<typename T> struct A { static int *a; };
++  template<typename T> int *A<T>::a = 0;
++}
++
++int *
++foo ()
++{
++  return A<int>::a;
++}
++
++int
++main ()
++{
++  return foo() != 0;
++}
+Index: gcc/cp/decl2.c
+===================================================================
+--- gcc/cp/decl2.c	(Revision 116505)
++++ gcc/cp/decl2.c	(Revision 116506)
+@@ -737,14 +737,6 @@
+     }
+ }
+ 
+-/* Like note_vague_linkage_fn but for variables.  */
+-
+-static void
+-note_vague_linkage_var (tree var)
+-{
+-  VEC_safe_push (tree, gc, pending_statics, var);
+-}
+-
+ /* We have just processed the DECL, which is a static data member.
+    The other parameters are as for cp_finish_decl.  */
+ 
+@@ -763,8 +755,8 @@
+   if (!asmspec_tree && current_class_type)
+     DECL_INITIAL (decl) = error_mark_node;
+ 
+-  if (! processing_template_decl && TREE_PUBLIC (decl))
+-    note_vague_linkage_var (decl);
++  if (! processing_template_decl)
++    VEC_safe_push (tree, gc, pending_statics, decl);
+ 
+   if (LOCAL_CLASS_P (current_class_type))
+     pedwarn ("local class %q#T shall not have static data member %q#D",
--- gcc-4.1-4.1.2.orig/debian/patches/pr20218-mips.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr20218-mips.dpatch
@@ -0,0 +1,243 @@
+#! /bin/sh -e
+
+# DP: Backport from mainline for PR middle-end/20218, mips part.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+gcc/
+2007-01-17  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/mips/mips-protos.h (mips_output_external): Make it
+	return void.
+	* config/mips/iris.h (TARGET_ASM_EXTERNAL_LIBCALL): Removed.
+	* config/mips/mips.c (irix_output_external_libcall): Likewise.
+	(extern_list): Likewise.
+	(extern_head): Likewise.
+	(TARGET_ASM_FILE_END): Likewise.
+	(mips_file_end): Likewise.
+	(mips_output_external): Rewritten.
+
+Index: gcc/config/mips/iris.h
+===================================================================
+--- gcc/config/mips/iris.h	(revision 120822)
++++ gcc/config/mips/iris.h	(working copy)
+@@ -61,10 +61,6 @@ #define ASM_DECLARE_OBJECT_NAME mips_dec
+ #undef ASM_FINISH_DECLARE_OBJECT
+ #define ASM_FINISH_DECLARE_OBJECT mips_finish_declare_object
+ 
+-/* Also do this for libcalls.  */
+-#undef TARGET_ASM_EXTERNAL_LIBCALL
+-#define TARGET_ASM_EXTERNAL_LIBCALL irix_output_external_libcall
+-
+ /* The linker needs a space after "-o".  */
+ #define SWITCHES_NEED_SPACES "o"
+ 
+Index: gcc/config/mips/mips-protos.h
+===================================================================
+--- gcc/config/mips/mips-protos.h	(revision 120822)
++++ gcc/config/mips/mips-protos.h	(working copy)
+@@ -197,7 +197,7 @@ extern HOST_WIDE_INT mips_debugger_offse
+ 
+ extern void print_operand (FILE *, rtx, int);
+ extern void print_operand_address (FILE *, rtx);
+-extern int mips_output_external (FILE *, tree, const char *);
++extern void mips_output_external (FILE *, tree, const char *);
+ extern void mips_output_filename (FILE *, const char *);
+ extern void mips_output_ascii (FILE *, const char *, size_t, const char *);
+ extern void mips_output_aligned_bss (FILE *, tree, const char *,
+Index: gcc/config/mips/mips.c
+===================================================================
+--- gcc/config/mips/mips.c	(revision 120822)
++++ gcc/config/mips/mips.c	(working copy)
+@@ -303,11 +303,7 @@ static void mips_set_tune (const struct 
+ static bool mips_handle_option (size_t, const char *, int);
+ static struct machine_function *mips_init_machine_status (void);
+ static void print_operand_reloc (FILE *, rtx, const char **);
+-#if TARGET_IRIX
+-static void irix_output_external_libcall (rtx);
+-#endif
+ static void mips_file_start (void);
+-static void mips_file_end (void);
+ static bool mips_rewrite_small_data_p (rtx);
+ static int mips_small_data_pattern_1 (rtx *, void *);
+ static int mips_rewrite_small_data_1 (rtx *, void *);
+@@ -552,19 +548,6 @@ int sdb_label_count = 0;
+ /* Next label # for each statement for Silicon Graphics IRIS systems.  */
+ int sym_lineno = 0;
+ 
+-/* Linked list of all externals that are to be emitted when optimizing
+-   for the global pointer if they haven't been declared by the end of
+-   the program with an appropriate .comm or initialization.  */
+-
+-struct extern_list GTY (())
+-{
+-  struct extern_list *next;	/* next external */
+-  const char *name;		/* name of the external */
+-  int size;			/* size in bytes */
+-};
+-
+-static GTY (()) struct extern_list *extern_head = 0;
+-
+ /* Name of the file containing the current function.  */
+ const char *current_function_file = "";
+ 
+@@ -1144,9 +1127,7 @@ #define TARGET_IN_SMALL_DATA_P mips_in_s
+ #define TARGET_MACHINE_DEPENDENT_REORG mips_reorg
+ 
+ #undef TARGET_ASM_FILE_START
+-#undef TARGET_ASM_FILE_END
+ #define TARGET_ASM_FILE_START mips_file_start
+-#define TARGET_ASM_FILE_END mips_file_end
+ #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+ #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+ 
+@@ -5786,48 +5767,38 @@ print_operand_address (FILE *file, rtx x
+    the -G limit but declared by the user to be in a section other
+    than .sbss or .sdata.  */
+ 
+-int
+-mips_output_external (FILE *file ATTRIBUTE_UNUSED, tree decl, const char *name)
+-{
+-  register struct extern_list *p;
+-
+-  if (!TARGET_EXPLICIT_RELOCS && mips_in_small_data_p (decl))
+-    {
+-      p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
+-      p->next = extern_head;
+-      p->name = name;
+-      p->size = int_size_in_bytes (TREE_TYPE (decl));
+-      extern_head = p;
+-    }
+-
+-  if (TARGET_IRIX && mips_abi == ABI_32 && TREE_CODE (decl) == FUNCTION_DECL)
+-    {
+-      p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
+-      p->next = extern_head;
+-      p->name = name;
+-      p->size = -1;
+-      extern_head = p;
+-    }
+-
+-  return 0;
+-}
+-
+-#if TARGET_IRIX
+-static void
+-irix_output_external_libcall (rtx fun)
++void
++mips_output_external (FILE *file, tree decl, const char *name)
+ {
+-  register struct extern_list *p;
++  default_elf_asm_output_external (file, decl, name);
+ 
+-  if (mips_abi == ABI_32)
+-    {
+-      p = (struct extern_list *) ggc_alloc (sizeof (struct extern_list));
+-      p->next = extern_head;
+-      p->name = XSTR (fun, 0);
+-      p->size = -1;
+-      extern_head = p;
++  /* We output the name if and only if TREE_SYMBOL_REFERENCED is
++     set in order to avoid putting out names that are never really
++     used. */
++  if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
++    {
++      if (!TARGET_EXPLICIT_RELOCS && mips_in_small_data_p (decl))
++	{
++	  fputs ("\t.extern\t", file);
++	  assemble_name (file, name);
++	  fprintf (file, ", " HOST_WIDE_INT_PRINT_DEC "\n",
++		   int_size_in_bytes (TREE_TYPE (decl)));
++	}
++      else if (TARGET_IRIX
++	       && mips_abi == ABI_32
++	       && TREE_CODE (decl) == FUNCTION_DECL)
++	{
++	  /* In IRIX 5 or IRIX 6 for the O32 ABI, we must output a
++	     `.global name .text' directive for every used but
++	     undefined function.  If we don't, the linker may perform
++	     an optimization (skipping over the insns that set $gp)
++	     when it is unsafe.  */
++	  fputs ("\t.globl ", file);
++	  assemble_name (file, name);
++	  fputs (" .text\n", file);
++	}
+     }
+ }
+-#endif
+ 
+ /* Emit a new filename to a stream.  If we are smuggling stabs, try to
+    put out a MIPS ECOFF file and a stab.  */
+@@ -5989,50 +5960,6 @@ mips_output_aligned_bss (FILE *stream, t
+ }
+ #endif
+ 
+-/* Implement TARGET_ASM_FILE_END.  When using assembler macros, emit
+-   .externs for any small-data variables that turned out to be external.  */
+-
+-static void
+-mips_file_end (void)
+-{
+-  tree name_tree;
+-  struct extern_list *p;
+-
+-  if (extern_head)
+-    {
+-      fputs ("\n", asm_out_file);
+-
+-      for (p = extern_head; p != 0; p = p->next)
+-	{
+-	  name_tree = get_identifier (p->name);
+-
+-	  /* Positively ensure only one .extern for any given symbol.  */
+-	  if (!TREE_ASM_WRITTEN (name_tree)
+-	      && TREE_SYMBOL_REFERENCED (name_tree))
+-	    {
+-	      TREE_ASM_WRITTEN (name_tree) = 1;
+-	      /* In IRIX 5 or IRIX 6 for the O32 ABI, we must output a
+-		 `.global name .text' directive for every used but
+-		 undefined function.  If we don't, the linker may perform
+-		 an optimization (skipping over the insns that set $gp)
+-		 when it is unsafe.  */
+-	      if (TARGET_IRIX && mips_abi == ABI_32 && p->size == -1)
+-		{
+-		  fputs ("\t.globl ", asm_out_file);
+-		  assemble_name (asm_out_file, p->name);
+-		  fputs (" .text\n", asm_out_file);
+-		}
+-	      else
+-		{
+-		  fputs ("\t.extern\t", asm_out_file);
+-		  assemble_name (asm_out_file, p->name);
+-		  fprintf (asm_out_file, ", %d\n", p->size);
+-		}
+-	    }
+-	}
+-    }
+-}
+-
+ /* Implement ASM_OUTPUT_ALIGNED_DECL_COMMON.  This is usually the same as the
+    elfos.h version, but we also need to handle -muninit-const-in-rodata.  */
+ 
+
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-vis-r116505-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-vis-r116505-doc.dpatch
@@ -0,0 +1,294 @@
+#! /bin/sh -e
+
+# DP: g++ visibility patches (taken from the redhat/gcc-4_1-branch)
+# DP:   PR c++/17470, PR c++/19134, PR c++/21581, PR c++/21675,
+# DP:   PR c++/25915, PR c++/26612, PR c++/26905, PR c++/26984,
+# DP:   PR c++/27000, PR c++/28215, PR c++/28279.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+r116505 | jakub | 2006-08-28 14:26:41 +0200 (Mon, 28 Aug 2006) | 90 lines
+
+2006-07-06  Jason Merrill  <jason@redhat.com>
+
+cp/
+        PR c++/28279
+        * decl2.c (finish_static_data_member_decl): Don't assert
+        TREE_PUBLIC.
+
+2006-07-01  Jason Merrill  <jason@redhat.com>
+
+cp/
+        PR c++/28215
+        * method.c (make_thunk): Unset DECL_USE_TEMPLATE and 
+        DECL_TEMPLATE_INFO.
+
+2006-06-30  Jason Merrill  <jason@redhat.com>
+
+objcp/
+        * objcp-decl.c (objcp_start_struct): Pass null attributes argument
+        to begin_class_definition.
+
+2006-06-29  Jason Merrill  <jason@redhat.com>
+
+        PR c++/26905
+        PR c++/26612
+        PR c++/27000
+        PR c++/26984
+        PR c++/19134
+        * tree.c (build_decl_stat): Don't hande #pragma visibility here.
+        * c-common.c (c_determine_visibility): Handle it here.
+        * c-decl.c (finish_decl): Call c_determine_visibility for 
+        functions, too.
+        * flags.h (enum symbol_visibility): Sort from most to least visibility.
+        * tree.h: Likewise.
+        * varasm.c (default_assemble_visibility): Likewise.
+        * c-common.c (handle_visibility_attribute): Complain about trying
+        to give visibility to an already defined class, or trying to change
+        declared visibility. Always attach the attribute.
+
+        PR c++/26905
+        PR c++/21675
+        PR c++/17470
+        * attribs.c (decl_attributes): Ignore type-in-place attributes
+        once the type has been defined.
+cp/
+        PR c++/26905
+        PR c++/26612
+        PR c++/27000
+        PR c++/26984
+        PR c++/19134
+        * decl2.c (determine_visibility): Overhaul.
+        (determine_visibility_from_class): Likewise.
+        (min_vis_r, type_visibility, constrain_visibility): New fns.
+        (constrain_visibility_for_template): Likewise.
+        (constrain_class_visibility): Likewise.
+        * decl.c (cp_finish_decl): Call determine_visibility for function
+        decls, too.
+        * name-lookup.c (pushtag): Call determine_visibility.
+        * decl.c (duplicate_decls): Don't copy visibility from template to
+        specialization.
+        * pt.c (check_explicit_specialization): Likewise.
+        (lookup_template_class, tsubst_decl): Call determine_visibility.
+        * class.c (finish_struct_1): Call constrain_class_visibility.
+
+        PR c++/26905
+        PR c++/21675
+        PR c++/17470
+        * parser.c (cp_parser_explicit_instantiation): Pass the attributes
+        to grokdeclarator.
+        (cp_parser_type_specifier): Allow 'enum __attribute ((...)) E'.
+        (cp_parser_enum_specifier): Likewise.
+        (cp_parser_elaborated_type_specifier): Apply attributes if this
+        declares only the class.
+        (cp_parser_class_specifier): Apply leading attributes immediately.
+        * semantics.c (begin_class_definition): Add attributes parameter,
+        apply them to the type.
+
+        PR c++/21581
+        PR c++/25915
+        * tree.c (decl_anon_ns_mem_p): New function.
+        * cp-tree.h: Declare it.
+        * decl2.c (determine_visibility): Make anonymous namespace
+        members static.
+        (min_vis_r, constrain_visibility): Likewise.
+        * rtti.c (create_pseudo_type_info): Set TREE_PUBLIC on
+        pseudo-types.
+        * decl.c (cxx_init_decl_processing): Set TREE_PUBLIC on
+        global_namespace.
+        * name-lookup.c (push_namespace_with_attribs): Don't set TREE_PUBLIC
+        on anonymous namespaces.
+
+Index: gcc/doc/extend.texi
+===================================================================
+--- gcc/doc/extend.texi	(Revision 116504)
++++ gcc/doc/extend.texi	(Revision 116505)
+@@ -2335,6 +2335,17 @@
+ 
+ Not all ELF targets support this attribute.
+ 
++A C++ namespace declaration can also have the visibility attribute.
++This attribute applies only to the particular namespace body, not to
++other definitions of the same namespace; it is equivalent to using
++@samp{#pragma GCC visibility} before and after the namespace
++definition (@pxref{Visibility Pragmas}).
++
++In C++, if a template argument has limited visibility, this
++restriction is implicitly propagated to the template instantiation.
++Otherwise, template instantiations and specializations default to the
++visibility of their template.
++
+ @item warn_unused_result
+ @cindex @code{warn_unused_result} attribute
+ The @code{warn_unused_result} attribute causes a warning to be emitted
+@@ -2513,10 +2524,7 @@
+ An attribute specifier list may appear as part of a @code{struct},
+ @code{union} or @code{enum} specifier.  It may go either immediately
+ after the @code{struct}, @code{union} or @code{enum} keyword, or after
+-the closing brace.  It is ignored if the content of the structure, union
+-or enumerated type is not defined in the specifier in which the
+-attribute specifier list is used---that is, in usages such as
+-@code{struct __attribute__((foo)) bar} with no following opening brace.
++the closing brace.  The former syntax is preferred.
+ Where attribute specifiers follow the closing brace, they are considered
+ to relate to the structure, union or enumerated type defined, not to any
+ enclosing declaration the type specifier appears in, and the type
+@@ -3180,13 +3188,14 @@
+ @cindex type attributes
+ 
+ The keyword @code{__attribute__} allows you to specify special
+-attributes of @code{struct} and @code{union} types when you define such
+-types.  This keyword is followed by an attribute specification inside
+-double parentheses.  Six attributes are currently defined for types:
+-@code{aligned}, @code{packed}, @code{transparent_union}, @code{unused},
+-@code{deprecated} and @code{may_alias}.  Other attributes are defined for
+-functions (@pxref{Function Attributes}) and for variables
+-(@pxref{Variable Attributes}).
++attributes of @code{struct} and @code{union} types when you define
++such types.  This keyword is followed by an attribute specification
++inside double parentheses.  Seven attributes are currently defined for
++types: @code{aligned}, @code{packed}, @code{transparent_union},
++@code{unused}, @code{deprecated}, @code{visibility}, and
++@code{may_alias}.  Other attributes are defined for functions
++(@pxref{Function Attributes}) and for variables (@pxref{Variable
++Attributes}).
+ 
+ You may also specify any one of these attributes with @samp{__}
+ preceding and following its keyword.  This allows you to use these
+@@ -3194,14 +3203,13 @@
+ macro of the same name.  For example, you may use @code{__aligned__}
+ instead of @code{aligned}.
+ 
+-You may specify the @code{aligned} and @code{transparent_union}
+-attributes either in a @code{typedef} declaration or just past the
+-closing curly brace of a complete enum, struct or union type
+-@emph{definition} and the @code{packed} attribute only past the closing
+-brace of a definition.
++You may specify type attributes either in a @code{typedef} declaration
++or in an enum, struct or union type declaration or definition.
+ 
+-You may also specify attributes between the enum, struct or union
+-tag and the name of the type rather than after the closing brace.
++For an enum, struct or union type, you may specify attributes either
++between the enum, struct or union tag and the name of the type, or
++just past the closing curly brace of the @emph{definition}.  The
++former syntax is preferred.
+ 
+ @xref{Attribute Syntax}, for details of the exact syntax for using
+ attributes.
+@@ -3450,6 +3458,13 @@
+ @option{-fstrict-aliasing}, which is on by default at @option{-O2} or
+ above in recent GCC versions.
+ 
++@item visibility
++
++In C++, attribute visibility (@pxref{Function Attributes}) can also be
++applied to class, struct, union and enum types.  Unlike other type
++attributes, the attribute must appear between the initial keyword and
++the name of the type; it cannot appear after the body of the type.
++
+ @subsection ARM Type Attributes
+ 
+ On those ARM targets that support @code{dllimport} (such as Symbian
+@@ -9226,6 +9241,7 @@
+ * Symbol-Renaming Pragmas::
+ * Structure-Packing Pragmas::
+ * Weak Pragmas::
++* Visibility Pragmas::
+ @end menu
+ 
+ @node ARM Pragmas
+@@ -9466,6 +9482,26 @@
+ translation unit.
+ @end table
+ 
++@node Visibility Pragmas
++@subsection Visibility Pragmas
++
++@table @code
++@item #pragma GCC visibility push(@var{visibility})
++@itemx #pragma GCC visibility pop
++@cindex pragma, visibility
++
++This pragma allows the user to set the visibility for multiple
++declarations without having to give each a visibility attribute
++@xref{Function Attributes}, for more information about visibility and
++the attribute syntax.
++
++In C++, @samp{#pragma GCC visibility} affects only namespace-scope
++declarations.  Class members and template specializations are not
++affected; if you want to override the visibility for a particular
++member or instantiation, you must use an attribute.
++
++@end table
++
+ @node Unnamed Fields
+ @section Unnamed struct/union fields within structs/unions
+ @cindex struct
+Index: gcc/doc/invoke.texi
+===================================================================
+--- gcc/doc/invoke.texi	(Revision 116504)
++++ gcc/doc/invoke.texi	(Revision 116505)
+@@ -1585,13 +1585,13 @@
+ appear in the export table of a DSO and do not require a PLT indirection
+ when used within the DSO@.  Enabling this option can have a dramatic effect
+ on load and link times of a DSO as it massively reduces the size of the
+-dynamic export table when the library makes heavy use of templates.  While
+-it can cause bloating through duplication of code within each DSO where
+-it is used, often the wastage is less than the considerable space occupied
+-by a long symbol name in the export table which is typical when using
+-templates and namespaces.  For even more savings, combine with the
+-@option{-fvisibility=hidden} switch.
++dynamic export table when the library makes heavy use of templates.
+ 
++You may mark a method as having a visibility explicitly to negate the
++effect of the switch for that method.  For example, if you do want to
++compare pointers to a particular inline method, or the method has
++local static data, you might mark it as having default visibility.
++
+ @item -fno-weak
+ @opindex fno-weak
+ Do not use weak symbol support, even if it is provided by the linker.
+@@ -13157,6 +13157,20 @@
+ Note that due to ISO C++ specification requirements, operator new and
+ operator delete must always be of default visibility.
+ 
++@samp{extern} declarations are not affected by @samp{-fvisibility}, so
++a lot of code can be recompiled with @samp{-fvisibility=hidden} with
++no modifications.  However, this means that calls to @samp{extern}
++functions with no explicit visibility will use the PLT, so it is more
++effective to use @samp{__attribute ((visibility))} and/or
++@samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
++declarations should be treated as hidden.
++
++Note that @samp{-fvisibility} does affect C++ vague linkage
++entities. This means that, for instance, an exception class that will
++be thrown between DSOs must be explicitly marked with default
++visibility so that the @samp{type_info} nodes will be unified between
++the DSOs.
++
+ An overview of these techniques, their benefits and how to use them
+ is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
+ 
--- gcc-4.1-4.1.2.orig/debian/patches/libffi-configure.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libffi-configure.dpatch
@@ -0,0 +1,80 @@
+#! /bin/sh -e
+
+# DP: Add --enable-libffi option to toplevel configure script
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Index: configure.in
+===================================================================
+--- configure.in	(revision 115876)
++++ configure.in	(working copy)
+@@ -315,6 +315,16 @@
+   noconfigdirs="$noconfigdirs target-libssp"
+ fi
+ 
++AC_ARG_ENABLE(libffi,
++[  --enable-libffi        Builds libffi directory],
++ENABLE_LIBFFI=$enableval,
++ENABLE_LIBFFI=yes)
++if test "${ENABLE_LIBFFI}" != "yes" ; then
++  noconfigdirs="$noconfigdirs target-libffi"
++else
++  libgcj="`echo $libgcj | sed 's/target-libffi *//'`"
++fi
++
+ # Save it here so that, even in case of --enable-libgcj, if the Java
+ # front-end isn't enabled, we still get libgcj disabled.
+ libgcj_saved=$libgcj
+Index: configure
+===================================================================
+--- configure	(revision 115876)
++++ configure	(working copy)
+@@ -16,6 +16,8 @@
+ ac_help="$ac_help
+   --enable-libssp        Builds libssp directory"
+ ac_help="$ac_help
++  --enable-libffi        Builds libffi directory"
++ac_help="$ac_help
+   --with-mpfr-dir=PATH    Specify source directory for MPFR library"
+ ac_help="$ac_help
+   --with-mpfr=PATH        Specify directory for installed MPFR library"
+@@ -1107,6 +1109,20 @@
+   noconfigdirs="$noconfigdirs target-libssp"
+ fi
+ 
++# Check whether --enable-libffi or --disable-libffi was given.
++if test "${enable_libffi+set}" = set; then
++  enableval="$enable_libffi"
++  ENABLE_LIBFFI=$enableval
++else
++  ENABLE_LIBFFI=yes
++fi
++
++if test "${ENABLE_LIBFFI}" != "yes" ; then
++  noconfigdirs="$noconfigdirs target-libffi"
++else
++  libgcj="`echo $libgcj | sed 's/target-libffi *//'`"
++fi
++
+ # Save it here so that, even in case of --enable-libgcj, if the Java
+ # front-end isn't enabled, we still get libgcj disabled.
+ libgcj_saved=$libgcj
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-dwarf2-h.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-dwarf2-h.dpatch
@@ -0,0 +1,185 @@
+#! /bin/sh -e
+
+# DP: gcc dwarf2.h header additions (r107384, r111620), taken from the trunk
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2005-11-23  Ben Elliston  <bje@au.ibm.com>
+
+	* dwarf2.h (enum dwarf_type): Add DW_ATE_decimal_float.
+
+2006-03-01  Jakub Jelinek  <jakub@redhat.com>
+
+	* dwarf2.h (DW_TAG_condition, DW_TAG_shared_type): New constants
+	from DWARF 3.
+	(DW_AT_description, DW_AT_binary_scale, DW_AT_decimal_scale,
+	DW_AT_small, DW_AT_decimal_sign, DW_AT_digit_count,
+	DW_AT_picture_string, DW_AT_mutable, DW_AT_threads_scaled,
+	DW_AT_explicit, DW_AT_object_pointer, DW_AT_endianity,
+	DW_AT_elemental, DW_AT_pure, DW_AT_recursive): New.
+	(DW_OP_form_tls_address, DW_OP_call_frame_cfa, DW_OP_bit_piece): New.
+	(DW_ATE_packed_decimal, DW_ATE_numeric_string, DW_ATE_edited,
+	DW_ATE_signed_fixed, DW_ATE_unsigned_fixed): New.
+	(DW_DS_unsigned, DW_DS_leading_overpunch, DW_DS_trailing_overpunch,
+	DW_DS_leading_separate, DW_DS_trailing_separate): New.
+	(DW_END_default, DW_END_big, DW_END_little): New.
+	(DW_END_lo_user, DW_END_hi_user): Define.
+	(DW_LNE_lo_user, DW_LNE_hi_user): Define.
+	(DW_CFA_val_offset, DW_CFA_val_offset_sf, DW_CFA_val_expression): New.
+	(DW_LANG_PLI, DW_LANG_ObjC, DW_LANG_ObjC_plus_plus, DW_LANG_UPC,
+	DW_LANG_D): New.
+ 
+--- gcc/dwarf2.h.old	2007-01-23 12:50:54.000000000 +0100
++++ gcc/dwarf2.h	2007-01-23 12:54:28.000000000 +0100
+@@ -1,7 +1,7 @@
+-/* Declarations and definitions of codes relating to the DWARF2 symbolic
+-   debugging information format.
++/* Declarations and definitions of codes relating to the DWARF2 and
++   DWARF3 symbolic debugging information formats.
+    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
+-   2003, 2004 Free Software Foundation, Inc.
++   2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 
+    Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
+    Office (AJPO), Florida State University and Silicon Graphics Inc.
+@@ -187,6 +187,8 @@
+     DW_TAG_unspecified_type = 0x3b,
+     DW_TAG_partial_unit = 0x3c,
+     DW_TAG_imported_unit = 0x3d,
++    DW_TAG_condition = 0x3f,
++    DW_TAG_shared_type = 0x40,
+     /* SGI/MIPS Extensions.  */
+     DW_TAG_MIPS_loop = 0x4081,
+     /* HP extensions.  See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz .  */
+@@ -317,6 +319,21 @@
+     DW_AT_call_column   = 0x57,
+     DW_AT_call_file     = 0x58,
+     DW_AT_call_line     = 0x59,
++    DW_AT_description   = 0x5a,
++    DW_AT_binary_scale  = 0x5b,
++    DW_AT_decimal_scale = 0x5c,
++    DW_AT_small         = 0x5d,
++    DW_AT_decimal_sign  = 0x5e,
++    DW_AT_digit_count   = 0x5f,
++    DW_AT_picture_string = 0x60,
++    DW_AT_mutable       = 0x61,
++    DW_AT_threads_scaled = 0x62,
++    DW_AT_explicit      = 0x63,
++    DW_AT_object_pointer = 0x64,
++    DW_AT_endianity     = 0x65,
++    DW_AT_elemental     = 0x66,
++    DW_AT_pure          = 0x67,
++    DW_AT_recursive     = 0x68,
+     /* SGI/MIPS extensions.  */
+     DW_AT_MIPS_fde = 0x2001,
+     DW_AT_MIPS_loop_begin = 0x2002,
+@@ -518,6 +535,9 @@
+     DW_OP_call2 = 0x98,
+     DW_OP_call4 = 0x99,
+     DW_OP_call_ref = 0x9a,
++    DW_OP_form_tls_address = 0x9b,
++    DW_OP_call_frame_cfa = 0x9c,
++    DW_OP_bit_piece = 0x9d,
+     /* GNU extensions.  */
+     DW_OP_GNU_push_tls_address = 0xe0,
+     /* HP extensions.  */
+@@ -547,6 +567,12 @@
+     DW_ATE_unsigned_char = 0x8,
+     /* DWARF 3.  */
+     DW_ATE_imaginary_float = 0x9,
++    DW_ATE_packed_decimal = 0xa,
++    DW_ATE_numeric_string = 0xb,
++    DW_ATE_edited = 0xc,
++    DW_ATE_signed_fixed = 0xd,
++    DW_ATE_unsigned_fixed = 0xe,
++    DW_ATE_decimal_float = 0xf,
+     /* HP extensions.  */
+     DW_ATE_HP_float80            = 0x80, /* Floating-point (80 bit).  */
+     DW_ATE_HP_complex_float80    = 0x81, /* Complex floating-point (80 bit).  */
+@@ -560,6 +586,29 @@
+ #define	DW_ATE_lo_user 0x80
+ #define	DW_ATE_hi_user 0xff
+ 
++/* Decimal sign encodings.  */
++enum dwarf_decimal_sign_encoding
++  {
++    /* DWARF 3.  */
++    DW_DS_unsigned = 0x01,
++    DW_DS_leading_overpunch = 0x02,
++    DW_DS_trailing_overpunch = 0x03,
++    DW_DS_leading_separate = 0x04,
++    DW_DS_trailing_separate = 0x05
++  };
++
++/* Endianity encodings.  */
++enum dwarf_endianity_encoding
++  {
++    /* DWARF 3.  */
++    DW_END_default = 0x00,
++    DW_END_big = 0x01,
++    DW_END_little = 0x02
++  };
++
++#define DW_END_lo_user 0x40
++#define DW_END_hi_user 0xff
++
+ /* Array ordering names and codes.  */
+ enum dwarf_array_dim_ordering
+   {
+@@ -666,6 +715,9 @@
+     DW_LNE_HP_define_proc              = 0x20
+   };
+ 
++#define DW_LNE_lo_user 0x80
++#define DW_LNE_hi_user 0xff
++
+ /* Call frame information.  */
+ enum dwarf_call_frame_info
+   {
+@@ -693,6 +745,9 @@
+     DW_CFA_offset_extended_sf = 0x11,
+     DW_CFA_def_cfa_sf = 0x12,
+     DW_CFA_def_cfa_offset_sf = 0x13,
++    DW_CFA_val_offset = 0x14,
++    DW_CFA_val_offset_sf = 0x15,
++    DW_CFA_val_expression = 0x16,
+     /* SGI/MIPS specific.  */
+     DW_CFA_MIPS_advance_loc8 = 0x1d,
+     /* GNU extensions.  */
+@@ -726,11 +781,16 @@
+     DW_LANG_Fortran90 = 0x0008,
+     DW_LANG_Pascal83 = 0x0009,
+     DW_LANG_Modula2 = 0x000a,
+-    DW_LANG_Java = 0x000b,
+     /* DWARF 3.  */
++    DW_LANG_Java = 0x000b,
+     DW_LANG_C99 = 0x000c,
+     DW_LANG_Ada95 = 0x000d,
+     DW_LANG_Fortran95 = 0x000e,
++    DW_LANG_PLI = 0x000f,
++    DW_LANG_ObjC = 0x0010,
++    DW_LANG_ObjC_plus_plus = 0x0011,
++    DW_LANG_UPC = 0x0012,
++    DW_LANG_D = 0x0013,
+     /* MIPS.  */
+     DW_LANG_Mips_Assembler = 0x8001,
+     /* UPC.  */
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-textdomain.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-textdomain.dpatch
@@ -0,0 +1,103 @@
+#! /bin/sh -e
+
+# DP: Set gettext's domain and textdomain to the versioned package name.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- gcc/Makefile.in.orig	2005-09-04 23:32:54.003440040 +0000
++++ gcc/Makefile.in	2005-09-04 23:40:10.954013456 +0000
+@@ -4565,8 +4565,8 @@
+ 	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+ 	  echo $(mkinstalldirs) $(DESTDIR)$$dir; \
+ 	  $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
+-	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
+-	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
++	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-4.1.mo; \
++	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-4.1.mo; \
+ 	done
+ 
+ # Rule for regenerating the message template (gcc.pot).
+--- gcc/intl.c.orig	2005-09-04 23:32:54.006439584 +0000
++++ gcc/intl.c	2005-09-04 23:36:37.933397512 +0000
+@@ -51,8 +51,8 @@
+   setlocale (LC_ALL, "");
+ #endif
+ 
+-  (void) bindtextdomain ("gcc", LOCALEDIR);
+-  (void) textdomain ("gcc");
++  (void) bindtextdomain ("gcc-4.1", LOCALEDIR);
++  (void) textdomain ("gcc-4.1");
+ 
+   /* Opening quotation mark.  */
+   open_quote = _("`");
+--- libcpp/Makefile.in.orig	2005-09-04 23:32:54.009439128 +0000
++++ libcpp/Makefile.in	2005-09-04 23:33:24.607787472 +0000
+@@ -47,6 +47,7 @@
+ LIBICONV = @LIBICONV@
+ LIBINTL = @LIBINTL@
+ PACKAGE = @PACKAGE@
++PACKAGE_SUFFIX = -4.1
+ RANLIB = @RANLIB@
+ SHELL = @SHELL@
+ USED_CATALOGS = @USED_CATALOGS@
+@@ -66,6 +67,7 @@
+ 
+ INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
+ 	-I$(srcdir)/include
++CPPFLAGS += -DPACKAGE_SUFFIX=\"$(strip $(PACKAGE_SUFFIX))\"
+ 
+ ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS)
+ 
+@@ -156,8 +158,8 @@
+ 	  else continue; \
+ 	  fi; \
+ 	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+-	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+-	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
++	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
++	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
+ 	done
+ 
+ mostlyclean:
+--- libcpp/system.h.orig	2005-09-04 23:32:54.006439584 +0000
++++ libcpp/system.h	2005-09-04 23:33:24.606787624 +0000
+@@ -260,7 +260,7 @@
+ #endif
+ 
+ #ifndef _
+-# define _(msgid) dgettext (PACKAGE, msgid)
++# define _(msgid) dgettext (PACKAGE PACKAGE_SUFFIX, msgid)
+ #endif
+ 
+ #ifndef N_
+--- libcpp/init.c.orig	2005-09-04 23:32:54.008439280 +0000
++++ libcpp/init.c	2005-09-04 23:33:24.607787472 +0000
+@@ -122,7 +122,7 @@
+       init_trigraph_map ();
+ 
+ #ifdef ENABLE_NLS
+-       (void) bindtextdomain (PACKAGE, LOCALEDIR);
++       (void) bindtextdomain (PACKAGE PACKAGE_SUFFIX, LOCALEDIR);
+ #endif
+     }
+ }
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-peephole.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-peephole.dpatch
@@ -0,0 +1,312 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Convert some text peepholes to rtl peepholes, so the correct
+# DP: DWARF2 information can be generated for stack manipulations.
+# DP: (Keep a few peepholes temporarily disabled.)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/config/m68k/m68k.h  |    2 
+ gcc/config/m68k/m68k.md |  227 +++++++++++++++++++-----------------------------
+ 2 files changed, 91 insertions(+), 138 deletions(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.h
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.h
++++ gcc-4.1/gcc/config/m68k/m68k.h
+@@ -631,7 +631,7 @@ __transfer_from_trampoline ()					\
+ #define DATA_REG_P(X) (REG_P (X) && REGNO_OK_FOR_DATA_P (REGNO (X)))
+ 
+ /* 1 if X is an fp register.  */
+-#define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X)))
++#define FP_REG_P(X)	(REG_P (X) && (REGNO (X) ^ 020) < 8)
+ 
+ /* 1 if X is an address register  */
+ #define ADDRESS_REG_P(X) (REG_P (X) && REGNO_OK_FOR_BASE_P (REGNO (X)))
+Index: gcc-4.1/gcc/config/m68k/m68k.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.md
++++ gcc-4.1/gcc/config/m68k/m68k.md
+@@ -665,13 +665,23 @@
+     }
+ })
+ 
+-;; General case of fullword move.  The register constraints
+-;; force integer constants in range for a moveq to be reloaded
+-;; if they are headed for memory.
++;; General case of fullword move.
+ (define_insn ""
+   ;; Notes: make sure no alternative allows g vs g.
+   ;; We don't allow f-regs since fixed point cannot go in them.
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=g,d,a<")
++        (match_operand:SI 1 "general_src_operand" "daymSnT,n,i"))]
++
++  "!TARGET_COLDFIRE && reload_completed"
++{
++  return output_move_simode (operands);
++})
++
++;; Before reload is completed the register constraints
++;; force integer constants in range for a moveq to be reloaded
++;; if they are headed for memory.
++(define_insn ""
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,d,a<")
+         (match_operand:SI 1 "general_src_operand" "daymSKT,n,i"))]
+ 
+   "!TARGET_COLDFIRE"
+@@ -6594,154 +6604,97 @@
+ ;; and then is moved into an FP register.
+ ;; But it is mainly intended to test the support for these optimizations.
+ 
+-(define_peephole
++(define_peephole2
+   [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int 4)))
+-   (set (match_operand:DF 0 "register_operand" "=f")
+-	(match_operand:DF 1 "register_operand" "ad"))]
+-  "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
+-{
+-  rtx xoperands[2];
+-  xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
+-  output_asm_insn ("move%.l %1,%@", xoperands);
+-  output_asm_insn ("move%.l %1,%-", operands);
+-  return "fmove%.d %+,%0";
+-})
++   (set (match_operand:DF 0 "register_operand" "")
++	(match_operand:DF 1 "register_operand" ""))]
++  "FP_REG_P (operands[0]) && !FP_REG_P (operands[1])"
++  [(set (mem:SI (reg:SI SP_REG)) (match_dup 1))
++   (set (mem:SI (pre_dec:SI (reg:SI SP_REG))) (match_dup 2))
++   (set (match_dup 0) (mem:DF (post_inc:SI (reg:SI SP_REG))))]
++  "split_di(operands + 1, 1, operands + 1, operands + 2);")
+ 
+ ;; Optimize a stack-adjust followed by a push of an argument.
+ ;; This is said to happen frequently with -msoft-float
+ ;; when there are consecutive library calls.
+ 
+-(define_peephole
++(define_peephole2
++  [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int 4)))
++   (set (mem:SF (pre_dec:SI (reg:SI SP_REG)))
++	(match_operand:SF 0 "general_operand" ""))]
++  "!reg_mentioned_p (stack_pointer_rtx, operands[0])"
++  [(set (mem:SF (reg:SI SP_REG)) (match_dup 0))]
++  "")
++
++(define_peephole2
+   [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
+-				 (match_operand:SI 0 "const_int_operand" "n")))
+-   (set (match_operand:SF 1 "push_operand" "=m")
+-	(match_operand:SF 2 "general_operand" "rmfF"))]
+-  "INTVAL (operands[0]) >= 4
+-   && ! reg_mentioned_p (stack_pointer_rtx, operands[2])"
+-{
+-  if (INTVAL (operands[0]) > 4)
+-    {
+-      rtx xoperands[2];
+-      xoperands[0] = stack_pointer_rtx;
+-      xoperands[1] = GEN_INT (INTVAL (operands[0]) - 4);
+-      if (INTVAL (xoperands[1]) <= 8)
+-	{
+-	  if (!TARGET_COLDFIRE)
+-	    output_asm_insn ("addq%.w %1,%0", xoperands);
+-	  else
+-	    output_asm_insn ("addq%.l %1,%0", xoperands);
+-	}
+-      else if (TARGET_CPU32 && INTVAL (xoperands[1]) <= 16) 
+-	{
+-	  xoperands[1] = GEN_INT (INTVAL (xoperands[1]) - 8);
+-	  output_asm_insn ("addq%.w #8,%0\;addq%.w %1,%0", xoperands);
+-	}
+-      else if (INTVAL (xoperands[1]) <= 0x7FFF)
+-        {
+-	  if (TARGET_68040)
+-	    output_asm_insn ("add%.w %1,%0", xoperands);
+-	  else if (MOTOROLA)
+-	    output_asm_insn ("lea (%c1,%0),%0", xoperands);
+-	  else
+-	    output_asm_insn ("lea %0@(%c1),%0", xoperands);
+-        }
+-      else
+-        output_asm_insn ("add%.l %1,%0", xoperands);
+-    }
+-  if (FP_REG_P (operands[2]))
+-    return "fmove%.s %2,%@";
+-  return "move%.l %2,%@";
+-})
++				 (match_operand:SI 0 "const_int_operand" "")))
++   (set (mem:SF (pre_dec:SI (reg:SI SP_REG)))
++	(match_operand:SF 1 "general_operand" ""))]
++  "INTVAL (operands[0]) > 4
++   && !reg_mentioned_p (stack_pointer_rtx, operands[1])"
++  [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (match_dup 0)))
++   (set (mem:SF (reg:SI SP_REG)) (match_dup 1))]
++  "operands[0] = GEN_INT (INTVAL (operands[0]) - 4);")
+ 
+ ;; Speed up stack adjust followed by a fullword fixedpoint push.
+ 
+-(define_peephole
++(define_peephole2
++  [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int 4)))
++   (set (mem:SI (pre_dec:SI (reg:SI SP_REG)))
++	(match_operand:SI 0 "general_operand" ""))]
++  "!reg_mentioned_p (stack_pointer_rtx, operands[0])"
++  [(set (mem:SI (reg:SI SP_REG)) (match_dup 0))]
++  "")
++
++(define_peephole2
+   [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
+-				 (match_operand:SI 0 "const_int_operand" "n")))
+-   (set (match_operand:SI 1 "push_operand" "=m")
+-	(match_operand:SI 2 "general_operand" "g"))]
+-  "INTVAL (operands[0]) >= 4
+-   && ! reg_mentioned_p (stack_pointer_rtx, operands[2])"
+-{
+-  if (INTVAL (operands[0]) > 4)
+-    {
+-      rtx xoperands[2];
+-      xoperands[0] = stack_pointer_rtx;
+-      xoperands[1] = GEN_INT (INTVAL (operands[0]) - 4);
+-      if (INTVAL (xoperands[1]) <= 8)
+-	{
+-	  if (!TARGET_COLDFIRE)
+-	    output_asm_insn ("addq%.w %1,%0", xoperands);
+-	  else
+-	    output_asm_insn ("addq%.l %1,%0", xoperands);
+-	}
+-      else if (TARGET_CPU32 && INTVAL (xoperands[1]) <= 16)
+-	{
+-	  xoperands[1] = GEN_INT (INTVAL (xoperands[1]) - 8);
+-	  output_asm_insn ("addq%.w #8,%0\;addq%.w %1,%0", xoperands);
+-	}
+-      else if (INTVAL (xoperands[1]) <= 0x7FFF)
+-        {
+-	  if (TARGET_68040)
+-	    output_asm_insn ("add%.w %1,%0", xoperands);
+-	  else if (MOTOROLA)
+-	    output_asm_insn ("lea (%c1,%0),%0", xoperands);
+-	  else
+-	    output_asm_insn ("lea %0@(%c1),%0", xoperands);
+-        }
+-      else
+-        output_asm_insn ("add%.l %1,%0", xoperands);
+-    }
+-  if (operands[2] == const0_rtx)
+-    return "clr%.l %@";
+-  return "move%.l %2,%@";
+-})
++				 (match_operand:SI 0 "const_int_operand" "")))
++   (set (mem:SI (pre_dec:SI (reg:SI SP_REG)))
++	(match_operand:SI 1 "general_operand" ""))]
++  "INTVAL (operands[0]) > 4
++   && !reg_mentioned_p (stack_pointer_rtx, operands[1])"
++  [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (match_dup 0)))
++   (set (mem:SI (reg:SI SP_REG)) (match_dup 1))]
++  "operands[0] = GEN_INT (INTVAL (operands[0]) - 4);")
+ 
+ ;; Speed up pushing a single byte but leaving four bytes of space.
+ 
+-(define_peephole
+-  [(set (mem:QI (pre_dec:SI (reg:SI SP_REG)))
+-	(match_operand:QI 1 "general_operand" "dami"))
+-   (set (reg:SI SP_REG) (minus:SI (reg:SI SP_REG) (const_int 2)))]
+-  "! reg_mentioned_p (stack_pointer_rtx, operands[1])"
+-{
+-  rtx xoperands[4];
+-
+-  if (GET_CODE (operands[1]) == REG)
+-    return "move%.l %1,%-";
+-
+-  xoperands[1] = operands[1];
+-  xoperands[2]
+-    = gen_rtx_MEM (QImode, plus_constant (stack_pointer_rtx, 3));
+-  xoperands[3] = stack_pointer_rtx;
+-  if (!TARGET_COLDFIRE)
+-    output_asm_insn ("subq%.w #4,%3\;move%.b %1,%2", xoperands);
+-  else
+-    output_asm_insn ("subq%.l #4,%3\;move%.b %1,%2", xoperands);
+-  return "";
+-})
+-
+-(define_peephole
+-  [(set (match_operand:SI 0 "register_operand" "=d")
+-	(const_int 0))
+-   (set (strict_low_part (subreg:HI (match_dup 0) 2))
+-	(match_operand:HI 1 "general_operand" "rmn"))]
+-  "strict_low_part_peephole_ok (HImode, prev_nonnote_insn (insn), operands[0])"
+-{
+-  if (GET_CODE (operands[1]) == CONST_INT)
+-    {
+-      if (operands[1] == const0_rtx
+-	  && (DATA_REG_P (operands[0])
+-	      || GET_CODE (operands[0]) == MEM)
+-	  /* clr insns on 68000 read before writing.
+-	     This isn't so on the 68010, but we have no TARGET_68010.  */
+-	  && ((TARGET_68020 || TARGET_COLDFIRE)
+-	      || !(GET_CODE (operands[0]) == MEM
+-		   && MEM_VOLATILE_P (operands[0]))))
+-	return "clr%.w %0";
+-    }
+-  return "move%.w %1,%0";
+-})
++(define_peephole2
++  [(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -4)))
++   (set (mem:QI (plus:SI (reg:SI SP_REG) (const_int 3)))
++	(match_operand:QI 0 "register_operand" ""))]
++  "!reg_mentioned_p (stack_pointer_rtx, operands[0])"
++  [(set (mem:SI (pre_dec:SI (reg:SI SP_REG))) (match_dup 0))]
++  "operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));")
++
++(define_peephole2
++  [(set (mem:HI (pre_dec:SI (reg:SI SP_REG)))
++	(match_operand:HI 0 "register_operand" ""))
++   (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (const_int -2)))]
++  "!reg_mentioned_p (stack_pointer_rtx, operands[0])"
++  [(set (mem:SI (pre_dec:SI (reg:SI SP_REG))) (match_dup 0))]
++  "operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));")
++
++;;(define_peephole2
++;;  [(set (match_operand:SI 0 "register_operand" "")
++;;	(const_int 0))
++;;   (set (strict_low_part (match_operand:HI 1 "register_operand" ""))
++;;	(match_operand:HI 2 "general_operand" ""))]
++;;  "REGNO (operands[0]) == REGNO (operands[1])
++;;   && strict_low_part_peephole_ok (HImode, insn, operands[0])"
++;;  [(set (strict_low_part (match_dup 1)) (match_dup 2))]
++;;  "")
++;;
++;;(define_peephole2
++;;  [(set (match_operand:SI 0 "register_operand" "")
++;;	(const_int 0))
++;;   (set (strict_low_part (match_operand:QI 1 "register_operand" ""))
++;;	(match_operand:QI 2 "general_operand" ""))]
++;;  "REGNO (operands[0]) == REGNO (operands[1])
++;;   && strict_low_part_peephole_ok (QImode, insn, operands[0])"
++;;  [(set (strict_low_part (match_dup 1)) (match_dup 2))]
++;;  "")
+ 
+ ;; dbCC peepholes
+ ;;
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-split_shift.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-split_shift.dpatch
@@ -0,0 +1,730 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: use correct predicates for long long shifts and use more splits
+# DP: fixes 381572
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+---
+ gcc/config/m68k/m68k-protos.h |    3 
+ gcc/config/m68k/m68k.c        |   26 ++
+ gcc/config/m68k/m68k.md       |  546 +++++++++++++++++++++++++++++++-----------
+ 3 files changed, 437 insertions(+), 138 deletions(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k-protos.h
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k-protos.h
++++ gcc-4.1/gcc/config/m68k/m68k-protos.h
+@@ -22,6 +22,9 @@ Boston, MA 02110-1301, USA.  */
+ 
+ #ifdef RTX_CODE
+ extern HOST_WIDE_INT m68k_initial_elimination_offset (int from, int to);
++
++extern void split_di (rtx[], int, rtx[], rtx[]);
++
+ extern const char *output_move_const_into_data_reg (rtx *);
+ extern int valid_mov3q_const (rtx);
+ extern const char *output_move_simode_const (rtx *);
+Index: gcc-4.1/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.c
++++ gcc-4.1/gcc/config/m68k/m68k.c
+@@ -2243,6 +2243,32 @@ output_move_double (rtx *operands)
+   return "";
+ }
+ 
++void
++split_di (rtx operands[], int num, rtx lo_half[], rtx hi_half[])
++{
++  while (num--)
++    {
++      rtx op = operands[num];
++
++      /* simplify_subreg refuse to split volatile memory addresses,
++	 but we still have to handle it.  */
++      if (GET_CODE (op) == MEM)
++	{
++	  lo_half[num] = adjust_address (op, SImode, 4);
++	  hi_half[num] = adjust_address (op, SImode, 0);
++	}
++      else
++	{
++	  lo_half[num] = simplify_gen_subreg (SImode, op,
++					      GET_MODE (op) == VOIDmode
++					      ? DImode : GET_MODE (op), 4);
++	  hi_half[num] = simplify_gen_subreg (SImode, op,
++					      GET_MODE (op) == VOIDmode
++					      ? DImode : GET_MODE (op), 0);
++	}
++    }
++}
++
+ /* Return a REG that occurs in ADDR with coefficient 1.
+    ADDR can be effectively incremented by incrementing REG.  */
+ 
+Index: gcc-4.1/gcc/config/m68k/m68k.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.md
++++ gcc-4.1/gcc/config/m68k/m68k.md
+@@ -3881,69 +3881,168 @@
+     return "move%.w %1,%0\;sub%.l %R0,%R0";
+ })
+ 
+-(define_insn "ashldi_const32"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
+-	(ashift:DI (match_operand:DI 1 "general_operand" "ro")
+-		     (const_int 32)))]
+-  ""
++(define_insn "*ashldi3_const1"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(ashift:DI (match_operand:DI 1 "register_operand" "0")
++		   (const_int 1)))]
++  "!TARGET_COLDFIRE"
++  "add%.l %R0,%R0\;addx%.l %0,%0")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (const_int 2)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 0)
++	(ashift:DI (match_dup 1) (const_int 1)))
++   (set (match_dup 0)
++	(ashift:DI (match_dup 0) (const_int 1)))]
++  "")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (const_int 3)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 0)
++	(ashift:DI (match_dup 1) (const_int 2)))
++   (set (match_dup 0)
++	(ashift:DI (match_dup 0) (const_int 1)))]
++  "")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (const_int 8)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 2)
++	(rotate:SI (match_dup 2) (const_int 8)))
++   (set (match_dup 3)
++	(rotate:SI (match_dup 3) (const_int 8)))
++   (set (strict_low_part (subreg:QI (match_dup 0) 3))
++	(subreg:QI (match_dup 0) 7))
++   (set (strict_low_part (subreg:QI (match_dup 0) 7))
++	(const_int 0))]
+ {
+-  CC_STATUS_INIT;
+-  if (GET_CODE (operands[1]) == REG)
+-    operands[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
+-  else
+-    operands[3] = adjust_address (operands[1], SImode, 4);
+-  if (GET_CODE (operands[0]) == REG)
+-    operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+-  else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
+-    return "clr%.l %0\;move%.l %3,%0";
+-  else if (GET_CODE (XEXP (operands[0], 0)) == POST_INC)
+-    return "move%.l %3,%0\;clr%.l %0";
+-  else
+-    operands[2] = adjust_address (operands[0], SImode, 4);
+-  if (ADDRESS_REG_P (operands[2]))
+-    return "move%.l %3,%0\;sub%.l %2,%2";
+-  else
+-    return "move%.l %3,%0\;clr%.l %2";
+-})
+-
+-;; The predicate below must be general_operand, because ashldi3 allows that
+-(define_insn "ashldi_const"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
+-	(ashift:DI (match_operand:DI 1 "general_operand" "0")
+-		     (match_operand 2 "const_int_operand" "n")))]
+-  "(!TARGET_COLDFIRE
+-    && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3)
+-	|| INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16
+-	|| (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)))"
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (const_int 16)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 2)
++	(rotate:SI (match_dup 2) (const_int 16)))
++   (set (match_dup 3)
++	(rotate:SI (match_dup 3) (const_int 16)))
++   (set (strict_low_part (subreg:HI (match_dup 0) 2))
++	(subreg:HI (match_dup 0) 6))
++   (set (strict_low_part (subreg:HI (match_dup 0) 6))
++	(const_int 0))]
+ {
+-  operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+-  if (INTVAL (operands[2]) == 1)
+-    return "add%.l %1,%1\;addx%.l %0,%0";
+-  else if (INTVAL (operands[2]) == 8)
+-    return "rol%.l #8,%1\;rol%.l #8,%0\;move%.b %1,%0\;clr%.b %1";
+-  else if (INTVAL (operands[2]) == 16)
+-    return "swap %1\;swap %0\;move%.w %1,%0\;clr%.w %1";
+-  else if (INTVAL (operands[2]) == 48)
+-    return "mov%.l %1,%0\;swap %0\;clr%.l %1\;clr%.w %0";
+-  else if (INTVAL (operands[2]) == 2)
+-    return "add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0";
+-  else if (INTVAL (operands[2]) == 3)
+-    return "add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0\;add%.l %1,%1\;addx%.l %0,%0";
+-  else /* 32 < INTVAL (operands[2]) <= 63 */
+-    {
+-      operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
+-      output_asm_insn (INTVAL (operands[2]) <= 8 ? "asl%.l %2,%1" :
+-			"moveq %2,%0\;asl%.l %0,%1", operands);
+-      return "mov%.l %1,%0\;moveq #0,%1";
+-    }
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
+ })
+ 
++(define_split
++  [(set (match_operand:DI 0 "pre_dec_operand" "")
++	(ashift:DI (match_operand:DI 1 "nonimmediate_operand" "")
++		   (const_int 32)))]
++  "reload_completed"
++  [(set (match_dup 0) (const_int 0))
++   (set (match_dup 0) (match_dup 1))]
++{
++  operands[0] = adjust_address(operands[0], SImode, 0);
++  operands[1] = gen_lowpart(SImode, operands[1]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "post_inc_operand" "")
++	(ashift:DI (match_operand:DI 1 "nonimmediate_operand" "")
++		   (const_int 32)))]
++  "reload_completed"
++  [(set (match_dup 0) (match_dup 1))
++   (set (match_dup 0) (const_int 0))]
++{
++  operands[0] = adjust_address(operands[0], SImode, 0);
++  operands[1] = gen_lowpart(SImode, operands[1]);
++})
++
++(define_insn_and_split "*ashldi3_const32"
++  [(set (match_operand:DI 0 "nonimmediate_operand" "=ro<>")
++	(ashift:DI (match_operand:DI 1 "nonimmediate_operand" "ro")
++		   (const_int 32)))]
++  ""
++  "#"
++  "&& reload_completed"
++  [(set (match_dup 4) (match_dup 3))
++   (set (match_dup 2) (const_int 0))]
++  "split_di(operands, 2, operands + 2, operands + 4);")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (match_operand 2 "const_int_operand" "")))]
++  "reload_completed && !TARGET_COLDFIRE
++   && INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 40"
++  [(set (match_dup 4) (ashift:SI (match_dup 4) (match_dup 2)))
++   (set (match_dup 3) (match_dup 4))
++   (set (match_dup 4) (const_int 0))]
++{
++  operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
++  operands[3] = gen_highpart (SImode, operands[0]);
++  operands[4] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (const_int 48)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 2) (match_dup 3))
++   (set (match_dup 2)
++	(rotate:SI (match_dup 2) (const_int 16)))
++   (set (match_dup 3) (const_int 0))
++   (set (strict_low_part (subreg:HI (match_dup 0) 2))
++	(const_int 0))]
++{
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (match_operand 2 "const_int_operand" "")))]
++  "reload_completed && !TARGET_COLDFIRE
++   && INTVAL (operands[2]) > 40 && INTVAL (operands[2]) <= 63"
++  [(set (match_dup 3) (match_dup 2))
++   (set (match_dup 4) (ashift:SI (match_dup 4) (match_dup 3)))
++   (set (match_dup 3) (match_dup 4))
++   (set (match_dup 4) (const_int 0))]
++{
++  operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
++  operands[3] = gen_highpart (SImode, operands[0]);
++  operands[4] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_insn "*ashldi3"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(ashift:DI (match_operand:DI 1 "register_operand" "0")
++		   (match_operand 2 "const_int_operand" "n")))]
++  "!TARGET_COLDFIRE
++    && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3)
++	|| INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16
++	|| (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63))"
++  "#")
++
+ (define_expand "ashldi3"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+-	(ashift:DI (match_operand:DI 1 "general_operand" "")
+-		     (match_operand 2 "const_int_operand" "")))]
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashift:DI (match_operand:DI 1 "register_operand" "")
++		   (match_operand 2 "const_int_operand" "")))]
+   "!TARGET_COLDFIRE"
+-  "
+ {
+   /* ???  This is a named pattern like this is not allowed to FAIL based
+      on its operands.  */
+@@ -3952,7 +4051,7 @@
+ 	  && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16
+ 	  && (INTVAL (operands[2]) < 32 || INTVAL (operands[2]) > 63)))
+     FAIL;
+-} ")
++})
+ 
+ ;; On most 68k models, this makes faster code in a special case.
+ 
+@@ -4068,21 +4167,86 @@
+   return "move%.l %1,%0";
+ })
+ 
+-(define_insn "ashrdi_const32"
++(define_insn "*ashrdi3_const1"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
++		     (const_int 1)))]
++  "!TARGET_COLDFIRE"
++{
++  operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
++  return "asr%.l #1,%0\;roxr%.l #1,%1";
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 2)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 0)
++	(ashiftrt:DI (match_dup 1) (const_int 1)))
++   (set (match_dup 0)
++	(ashiftrt:DI (match_dup 0) (const_int 1)))]
++  "")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 3)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 0)
++	(ashiftrt:DI (match_dup 1) (const_int 2)))
++   (set (match_dup 0)
++	(ashiftrt:DI (match_dup 0) (const_int 1)))]
++  "")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 8)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (strict_low_part (subreg:QI (match_dup 0) 7))
++	(subreg:QI (match_dup 0) 3))
++   (set (match_dup 2)
++	(ashiftrt:SI (match_dup 2) (const_int 8)))
++   (set (match_dup 3)
++	(rotatert:SI (match_dup 3) (const_int 8)))]
++{
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 16)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (strict_low_part (subreg:HI (match_dup 0) 6))
++	(subreg:HI (match_dup 0) 2))
++   (set (match_dup 2)
++	(rotate:SI (match_dup 2) (const_int 16)))
++   (set (match_dup 3)
++	(rotate:SI (match_dup 3) (const_int 16)))
++   (set (match_dup 2)
++	(sign_extend:SI (subreg:HI (match_dup 2) 2)))]
++{
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_insn "*ashrdi_const32"
+   [(set (match_operand:DI 0 "register_operand" "=d")
+ 	(ashiftrt:DI (match_operand:DI 1 "general_operand" "ro")
+ 		     (const_int 32)))]
+   ""
+ {
+   CC_STATUS_INIT;
+-  operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+   if (TARGET_68020)
+-    return "move%.l %1,%2\;smi %0\;extb%.l %0";
++    return "move%.l %1,%R0\;smi %0\;extb%.l %0";
+   else
+-    return "move%.l %1,%2\;smi %0\;ext%.w %0\;ext%.l %0";
++    return "move%.l %1,%R0\;smi %0\;ext%.w %0\;ext%.l %0";
+ })
+ 
+-(define_insn "ashrdi_const32_mem"
++(define_insn "*ashrdi_const32_mem"
+   [(set (match_operand:DI 0 "nonimmediate_operand" "=o,<")
+ 	(ashiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro")
+ 		     (const_int 32)))
+@@ -4100,36 +4264,35 @@
+     return "move%.l %1,%3\;smi %2\;ext%.w %2\;ext%.l %2\;move%.l %2,%0";
+ })
+ 
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 63)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 3)
++	(ashiftrt:SI (match_dup 3) (const_int 31)))
++   (set (match_dup 2)
++	(match_dup 3))]
++  "split_di(operands, 1, operands + 2, operands + 3);")
++
+ ;; The predicate below must be general_operand, because ashrdi3 allows that
+ (define_insn "ashrdi_const"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
+-	(ashiftrt:DI (match_operand:DI 1 "general_operand" "0")
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
+ 		     (match_operand 2 "const_int_operand" "n")))]
+-  "(!TARGET_COLDFIRE 
++  "!TARGET_COLDFIRE
+     && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3)
+ 	|| INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16
+ 	|| INTVAL (operands[2]) == 31
+-	|| (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)))"
++	|| (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63))"
+ {
+   operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+-  if (INTVAL (operands[2]) == 63)
+-    return "add%.l %0,%0\;subx%.l %0,%0\;move%.l %0,%1";
+   CC_STATUS_INIT;
+-  if (INTVAL (operands[2]) == 1)
+-    return "asr%.l #1,%0\;roxr%.l #1,%1";
+-  else if (INTVAL (operands[2]) == 8)
+-    return "move%.b %0,%1\;asr%.l #8,%0\;ror%.l #8,%1";
+-  else if (INTVAL (operands[2]) == 16)
+-    return "move%.w %0,%1\;swap %0\;ext%.l %0\;swap %1";
+-  else if (INTVAL (operands[2]) == 48)
++  if (INTVAL (operands[2]) == 48)
+     return "swap %0\;ext%.l %0\;move%.l %0,%1\;smi %0\;ext%.w %0";
+-  else if (INTVAL (operands[2]) == 31)
++  if (INTVAL (operands[2]) == 31)
+     return "add%.l %1,%1\;addx%.l %0,%0\;move%.l %0,%1\;subx%.l %0,%0";
+-  else if (INTVAL (operands[2]) == 2)
+-    return "asr%.l #1,%0\;roxr%.l #1,%1\;asr%.l #1,%0\;roxr%.l #1,%1";
+-  else if (INTVAL (operands[2]) == 3)
+-    return "asr%.l #1,%0\;roxr%.l #1,%1\;asr%.l #1,%0\;roxr%.l #1,%1\;asr%.l #1,%0\;roxr%.l #1,%1";
+-  else /* 32 < INTVAL (operands[2]) <= 63 */
++  if (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)
+     {
+       operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
+       output_asm_insn (INTVAL (operands[2]) <= 8 ? "asr%.l %2,%0" :
+@@ -4138,14 +4301,14 @@
+       return INTVAL (operands[2]) >= 15 ? "ext%.w %d0" :
+ 	     TARGET_68020 ? "extb%.l %0" : "ext%.w %0\;ext%.l %0";
+     }
++  return "#";
+ })
+ 
+ (define_expand "ashrdi3"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+-	(ashiftrt:DI (match_operand:DI 1 "general_operand" "")
++  [(set (match_operand:DI 0 "register_operand" "")
++	(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
+ 		     (match_operand 2 "const_int_operand" "")))]
+   "!TARGET_COLDFIRE"
+-  "
+ {
+   /* ???  This is a named pattern like this is not allowed to FAIL based
+      on its operands.  */
+@@ -4154,7 +4317,7 @@
+ 	  && INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16
+ 	  && (INTVAL (operands[2]) < 31 || INTVAL (operands[2]) > 63)))
+     FAIL;
+-} ")
++})
+ 
+ ;; On all 68k models, this makes faster code in a special case.
+ 
+@@ -4242,69 +4405,176 @@
+   return "move%.l %1,%0";
+ })
+ 
+-(define_insn "lshrdi_const32"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=ro,<,>")
+-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro,ro")
++(define_insn "*lshrdi3_const1"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
++		     (const_int 1)))]
++  "!TARGET_COLDFIRE"
++  "lsr%.l #1,%0\;roxr%.l #1,%R0")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 2)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 0)
++	(lshiftrt:DI (match_dup 1) (const_int 1)))
++   (set (match_dup 0)
++	(lshiftrt:DI (match_dup 0) (const_int 1)))]
++  "")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 3)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (match_dup 0)
++	(lshiftrt:DI (match_dup 1) (const_int 2)))
++   (set (match_dup 0)
++	(lshiftrt:DI (match_dup 0) (const_int 1)))]
++  "")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 8)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (strict_low_part (subreg:QI (match_dup 0) 7))
++	(subreg:QI (match_dup 0) 3))
++   (set (match_dup 2)
++	(lshiftrt:SI (match_dup 2) (const_int 8)))
++   (set (match_dup 3)
++	(rotatert:SI (match_dup 3) (const_int 8)))]
++{
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 16)))]
++  "reload_completed && !TARGET_COLDFIRE"
++  [(set (strict_low_part (subreg:HI (match_dup 0) 6))
++	(subreg:HI (match_dup 0) 2))
++   (set (strict_low_part (subreg:HI (match_dup 0) 2))
++	(const_int 0))
++   (set (match_dup 3)
++	(rotate:SI (match_dup 3) (const_int 16)))
++   (set (match_dup 2)
++	(rotate:SI (match_dup 2) (const_int 16)))]
++{
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "pre_dec_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "")
++		     (const_int 32)))]
++  "reload_completed"
++  [(set (match_dup 0) (match_dup 1))
++   (set (match_dup 0) (const_int 0))]
++{
++  operands[0] = adjust_address(operands[0], SImode, 0);
++  operands[1] = gen_highpart(SImode, operands[1]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "post_inc_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "")
++		     (const_int 32)))]
++  "reload_completed"
++  [(set (match_dup 0) (const_int 0))
++   (set (match_dup 0) (match_dup 1))]
++{
++  operands[0] = adjust_address(operands[0], SImode, 0);
++  operands[1] = gen_highpart(SImode, operands[1]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "nonimmediate_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "")
++		     (const_int 32)))]
++  "reload_completed"
++  [(set (match_dup 2) (match_dup 5))
++   (set (match_dup 4) (const_int 0))]
++  "split_di(operands, 2, operands + 2, operands + 4);")
++
++(define_insn "*lshrdi_const32"
++  [(set (match_operand:DI 0 "nonimmediate_operand" "=ro<>")
++	(lshiftrt:DI (match_operand:DI 1 "general_operand" "ro")
+ 		     (const_int 32)))]
+   ""
++  "#")
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (match_operand 2 "const_int_operand" "")))]
++  "reload_completed && !TARGET_COLDFIRE
++   && INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 40"
++  [(set (match_dup 3) (lshiftrt:SI (match_dup 3) (match_dup 2)))
++   (set (match_dup 4) (match_dup 3))
++   (set (match_dup 3) (const_int 0))]
++{
++  operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
++  operands[3] = gen_highpart (SImode, operands[0]);
++  operands[4] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (const_int 48)))]
++  "reload_completed"
++  [(set (match_dup 3) (match_dup 2))
++   (set (strict_low_part (subreg:HI (match_dup 0) 6))
++	(const_int 0))
++   (set (match_dup 2) (const_int 0))
++   (set (match_dup 3)
++	(rotate:SI (match_dup 3) (const_int 16)))]
+ {
+-  CC_STATUS_INIT;
+-  if (which_alternative == 1)
+-    return "move%.l %1,%0\;clr%.l %0";
+-  if (which_alternative == 2)
+-    return "clr%.l %0\;move%.l %1,%0";
+-  if (GET_CODE (operands[0]) == REG)
+-    operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+-  else
+-    operands[2] = adjust_address (operands[0], SImode, 4);
+-  if (GET_CODE (operands[1]) == REG)
+-    operands[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
+-  else
+-    operands[3] = adjust_address (operands[1], SImode, 4);
+-  if (ADDRESS_REG_P (operands[0]))
+-    return "move%.l %1,%2\;sub%.l %0,%0";
+-  else
+-    return "move%.l %1,%2\;clr%.l %0";
++  operands[2] = gen_highpart (SImode, operands[0]);
++  operands[3] = gen_lowpart (SImode, operands[0]);
++})
++
++(define_split
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
++		     (match_operand 2 "const_int_operand" "")))]
++  "reload_completed && !TARGET_COLDFIRE
++   && INTVAL (operands[2]) > 40 && INTVAL (operands[2]) <= 62"
++  [(set (match_dup 4) (match_dup 2))
++   (set (match_dup 3) (lshiftrt:SI (match_dup 3) (match_dup 4)))
++   (set (match_dup 4) (match_dup 3))
++   (set (match_dup 3) (const_int 0))]
++{
++  operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
++  operands[3] = gen_highpart (SImode, operands[0]);
++  operands[4] = gen_lowpart (SImode, operands[0]);
+ })
+ 
+-;; The predicate below must be general_operand, because lshrdi3 allows that
+-(define_insn "lshrdi_const"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
+-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "0")
++(define_insn "*lshrdi_const63"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
++		     (const_int 63)))]
++  ""
++  "add%.l %0,%0\;clr%.l %0\;clr%.l %R1\;addx%.l %R1,%R1")
++
++(define_insn "*lshrdi3_const"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
+ 		     (match_operand 2 "const_int_operand" "n")))]
+   "(!TARGET_COLDFIRE
+-    && ((INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3)
++    && ((INTVAL (operands[2]) >= 2 && INTVAL (operands[2]) <= 3)
+ 	 || INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16
+ 	 || (INTVAL (operands[2]) > 32 && INTVAL (operands[2]) <= 63)))"
+-{
+-  operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+-  if (INTVAL (operands[2]) == 63)
+-    return "add%.l %0,%0\;clr%.l %0\;clr%.l %1\;addx%.l %1,%1";
+-  CC_STATUS_INIT;
+-  if (INTVAL (operands[2]) == 1)
+-    return "lsr%.l #1,%0\;roxr%.l #1,%1";
+-  else if (INTVAL (operands[2]) == 8)
+-    return "move%.b %0,%1\;lsr%.l #8,%0\;ror%.l #8,%1";
+-  else if (INTVAL (operands[2]) == 16)
+-    return "move%.w %0,%1\;clr%.w %0\;swap %1\;swap %0";
+-  else if (INTVAL (operands[2]) == 48)
+-    return "move%.l %0,%1\;clr%.w %1\;clr%.l %0\;swap %1";
+-  else if (INTVAL (operands[2]) == 2)
+-    return "lsr%.l #1,%0\;roxr%.l #1,%1\;lsr%.l #1,%0\;roxr%.l #1,%1";
+-  else if (INTVAL (operands[2]) == 3)
+-    return "lsr%.l #1,%0\;roxr%.l #1,%1\;lsr%.l #1,%0\;roxr%.l #1,%1\;lsr%.l #1,%0\;roxr%.l #1,%1";
+-  else /* 32 < INTVAL (operands[2]) <= 63 */
+-    {
+-      operands[2] = GEN_INT (INTVAL (operands[2]) - 32);
+-      output_asm_insn (INTVAL (operands[2]) <= 8 ? "lsr%.l %2,%0" :
+-			"moveq %2,%1\;lsr%.l %1,%0", operands);
+-      return "mov%.l %0,%1\;moveq #0,%0";
+-    }
+-})
++  "#")
+ 
+ (define_expand "lshrdi3"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
++  [(set (match_operand:DI 0 "register_operand" "")
++	(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
+ 		     (match_operand 2 "const_int_operand" "")))]
+   "!TARGET_COLDFIRE"
+ {
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-soname.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-soname.dpatch
@@ -0,0 +1,34 @@
+#! /bin/sh -e
+
+# DP: Bump the libgcj soversion.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- libjava/libtool-version~	2006-01-18 22:52:29.000000000 +0100
++++ libjava/libtool-version	2006-04-03 23:32:44.934656864 +0200
+@@ -3,4 +3,4 @@
+ # a separate file so that version updates don't involve re-running
+ # automake.
+ # CURRENT:REVISION:AGE
+-8rh:0:0
++71:0:0
--- gcc-4.1-4.1.2.orig/debian/patches/sparc-biarch.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sparc-biarch.dpatch
@@ -0,0 +1,79 @@
+#! /bin/sh -e
+# 10_newpatch.dpatch by  <schizo@debian.org>
+# updated for 4.0, 4.1 by Matthias Klose <doko@debian.org>
+#
+# DP: Enable biarch support for the 32bit sparc compiler
+
+if [ $# -eq 3 ] && [ "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+	patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        cd ${dir}libcpp && autoconf
+	;;
+    -unpatch)
+	patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        cd ${dir}libcpp && autoconf
+	;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1;;
+esac
+
+exit 0
+
+--- gcc/config/sparc/linux64.h.orig	2006-10-27 18:02:21.000000000 +0200
++++ gcc/config/sparc/linux64.h	2006-10-27 18:21:13.000000000 +0200
+@@ -58,8 +58,8 @@
+    + MASK_STACK_BIAS + MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
+ #endif
+ 
+-#undef ASM_CPU_DEFAULT_SPEC
+-#define ASM_CPU_DEFAULT_SPEC "-Av9a"
++#undef ASM_CPU64_DEFAULT_SPEC
++#define ASM_CPU64_DEFAULT_SPEC "-Av9a"
+ 
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+--- gcc/config.gcc.orig	2006-10-27 18:02:35.000000000 +0200
++++ gcc/config.gcc	2006-10-27 18:29:49.000000000 +0200
+@@ -310,6 +310,7 @@
+ 	;;
+ sparc*-*-*)
+ 	cpu_type=sparc
++	need_64bit_hwint=yes
+ 	;;
+ s390*-*-*)
+ 	cpu_type=s390
+@@ -2070,9 +2071,16 @@
+ 	use_fixproto=yes
+ 	;;
+ sparc-*-linux*)		# SPARC's running GNU/Linux, libc6
++	# If cpu is specified, assume we want a 32/64 compiler
++	if test x$with_cpu = x; then
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
+ 	extra_options="${extra_options} sparc/long-double-switch.opt"
+ 	tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm"
++	else
++	  tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h"
++	  extra_options="${extra_options} sparc/long-double-switch.opt"
++	  tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm"
++	fi
+ 	;;
+ sparc-*-rtems*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h"
+--- libcpp/configure.ac.orig	2006-10-27 18:02:30.000000000 +0200
++++ libcpp/configure.ac	2006-10-27 18:21:13.000000000 +0200
+@@ -125,6 +125,7 @@
+ 	powerpc*-*-* | \
+ 	rs6000*-*-* | \
+ 	s390*-*-* | \
++	sparc-*-linux* | \
+ 	sparc64*-*-* | ultrasparc-*-freebsd* | \
+ 	sparcv9-*-solaris2* | \
+ 	sparc-*-solaris2.[789] | sparc-*-solaris2.1[0-9]* | \
--- gcc-4.1-4.1.2.orig/debian/patches/mips-libjava-interp.dpatch
+++ gcc-4.1-4.1.2/debian/patches/mips-libjava-interp.dpatch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+
+# DP: Enable the libjava interpreter on mips/mipsel.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- libjava/configure.host~	2006-04-22 01:59:20.293222320 +0200
++++ libjava/configure.host	2006-04-22 02:02:17.173332456 +0200
+@@ -90,6 +90,9 @@
+  	enable_java_net_default=no
+  	enable_getenv_properties_default=no
+ 	;;
++  mips*-linux*)
++	libgcj_interpreter=yes
++	;;
+   i686-*|i586-*|i486-*|i386-*)
+ 	sysdeps_dir=i386
+ 	# With -fomit-frame-pointer -maccumulate-outgoing-args (implied),
--- gcc-4.1-4.1.2.orig/debian/patches/pr28322.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr28322.dpatch
@@ -0,0 +1,238 @@
+#! /bin/sh -e
+
+# DP: Fix PR other/28322, GCC new warnings and compatibility.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+gcc/
+
+2008-02-26  Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+	PR other/28322
+	* toplev.c (toplev_main): If there are warnings or error, print
+	errors for ignored options.
+	* opts.c (ignored_options): New static variable.
+	(postpone_unknown_option_error): New.
+	(print_ignored_options): New.
+	(handle_option): Postpone errors for unknown -Wno-* options.
+	* opts.h (print_ignored_options): Declare.
+
+2008-06-03  Peter Maydell  <pmaydell@chiark.greenend.org.uk>
+
+	PR other/28322
+	* opts.c (print_ignored_options): report postponed diagnostics for
+	unknown	-Wno-* options as warnings, not errors.
+	(postpone_unknown_option_error): renamed to
+	postpone_unknown_option_warning.
+
+gcc/testsuite/
+
+2008-02-26  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+	PR other/28322
+	* gcc.dg/pr28322.c: New.
+	* gcc.dg/pr28322-2.c: New.
+	* lib/prune.exp: Ignore "At top level" even if there is no ':'
+	preceding it.
+	* gcc.dg/pr28322-3.c: New.
+
+2008-06-03  Peter Maydell  <pmaydell@chiark.greenend.org.uk>
+
+	* gcc.dg/pr28322-2.c: check that emitted diagnostic for -Wno-foobar
+	is a warning and not an error.
+
+
+--- gcc/opts.c.orig	2008-03-08 13:32:39.000000000 +0000
++++ gcc/opts.c	2009-01-17 16:48:14.000000000 +0000
+@@ -97,6 +97,12 @@
+ static bool flag_value_profile_transformations_set;
+ static bool flag_peel_loops_set, flag_branch_probabilities_set;
+ 
++typedef const char *const_char_p; /* For DEF_VEC_P.  */
++DEF_VEC_P(const_char_p);
++DEF_VEC_ALLOC_P(const_char_p,heap);
++
++static VEC(const_char_p,heap) *ignored_options;
++
+ /* Input file names.  */
+ const char **in_fnames;
+ unsigned num_in_fnames;
+@@ -181,6 +187,36 @@
+   free (bad_lang);
+ }
+ 
++/* Buffer the unknown option described by the string OPT.  Currently,
++   we only complain about unknown -Wno-* options if they may have
++   prevented a diagnostic. Otherwise, we just ignore them.
++   Note that if we do complain, it is only as a warning, not an error;
++   passing the compiler an unrecognised -Wno-* option should never
++   change whether the compilation succeeds or fails.  */
++
++static void postpone_unknown_option_warning(const char *opt)
++{
++  VEC_safe_push (const_char_p, heap, ignored_options, opt);
++}
++
++/* Produce a warning for each option previously buffered.  */
++
++void print_ignored_options (void)
++{
++  location_t saved_loc = input_location;
++
++  input_location = UNKNOWN_LOCATION;
++
++  while (!VEC_empty (const_char_p, ignored_options))
++    {
++      const char *opt;
++      opt = VEC_pop (const_char_p, ignored_options);
++      warning (0, "unrecognized command line option \"%s\"", opt);
++    }
++
++  input_location = saved_loc;
++}
++
+ /* Handle the switch beginning at ARGV for the language indicated by
+    LANG_MASK.  Returns the number of switches consumed.  */
+ static unsigned int
+@@ -210,6 +246,14 @@
+       opt = dup;
+       value = 0;
+       opt_index = find_opt (opt + 1, lang_mask | CL_COMMON | CL_TARGET);
++      if (opt_index == cl_options_count && opt[1] == 'W')
++	{
++	  /* We don't generate warnings for unknown -Wno-* options
++             unless we issue diagnostics.  */
++	  postpone_unknown_option_warning (argv[0]);
++	  result = 1;
++	  goto done;
++	}
+     }
+ 
+   if (opt_index == cl_options_count)
+--- gcc/opts.h.orig	2007-09-03 11:05:59.000000000 +0000
++++ gcc/opts.h	2009-01-17 16:47:22.000000000 +0000
+@@ -91,4 +91,5 @@
+ extern int option_enabled (int opt_idx);
+ extern bool get_option_state (int, struct cl_option_state *);
+ 
++extern void print_ignored_options (void);
+ #endif
+--- gcc/toplev.c.orig	2009-01-17 16:46:12.000000000 +0000
++++ gcc/toplev.c	2009-01-17 16:47:22.000000000 +0000
+@@ -2034,6 +2034,9 @@
+   if (!exit_after_options)
+     do_compile ();
+ 
++  if (warningcount || errorcount) 
++    print_ignored_options ();
++
+   if (errorcount || sorrycount)
+     return (FATAL_EXIT_CODE);
+ 
+Index: gcc/testsuite/gcc.dg/pr28322-2.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr28322-2.c	(revision 0)
++++ gcc/testsuite/gcc.dg/pr28322-2.c	(revision 0)
+@@ -0,0 +1,24 @@
++/* PR28322: ignore unknown -Wno-* if no warning is emitted.  */
++/* { dg-do compile } */
++/* { dg-options "-Wall -Wextra -Wno-foobar" } */
++
++int foo (void) 
++{
++  int i = 1/0;  /* { dg-warning "division by zero" } */
++  return i;
++}
++
++/* { dg-message "unrecognized command line option .-Wno-foobar." "" { target *-*-* } 0 } */
++
++/* PR28322: ignore unknown -Wno-* if no warning is emitted.  */
++/* { dg-do compile } */
++/* { dg-options "-Wall -Wextra -Wno-foobar" } */
++
++int foo (void) 
++{
++  int i = 1/0;  /* { dg-warning "division by zero" } */
++  return i;
++}
++
++/* { dg-warning "unrecognized command line option .-Wno-foobar." "" { target *-*-* } 0 } */
++
+Index: gcc/testsuite/gcc.dg/pr28322.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr28322.c	(revision 0)
++++ gcc/testsuite/gcc.dg/pr28322.c	(revision 0)
+@@ -0,0 +1,16 @@
++/* PR28322: ignore unknown -Wno-* if no warning is emitted.  */
++/* { dg-do compile } */
++/* { dg-options " -Wno-foobar -Wno-div-by-zero" } */
++
++void foo(void)
++{
++  int i =  1/0;
++}
++/* PR28322: ignore unknown -Wno-* if no warning is emitted.  */
++/* { dg-do compile } */
++/* { dg-options " -Wno-foobar -Wno-div-by-zero" } */
++
++void foo(void)
++{
++  int i =  1/0;
++}
+Index: gcc/testsuite/gcc.dg/pr28322-3.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr28322-3.c	(revision 0)
++++ gcc/testsuite/gcc.dg/pr28322-3.c	(revision 0)
+@@ -0,0 +1,20 @@
++/* PR28322: ignore unknown -Wno-* if no warning is emitted.  */
++/* { dg-do compile } */
++/* { dg-options " -fno-foobar -mno-foobar" } */
++
++void foo(void)
++{
++  int i =  1;
++}
++/* { dg-message "unrecognized command line option .-fno-foobar." "" { target *-*-* } 0 } */
++/* { dg-message "unrecognized command line option .-mno-foobar." "" { target *-*-* } 0 } */
++/* PR28322: ignore unknown -Wno-* if no warning is emitted.  */
++/* { dg-do compile } */
++/* { dg-options " -fno-foobar -mno-foobar" } */
++
++void foo(void)
++{
++  int i =  1;
++}
++/* { dg-warning "unrecognized command line option .-fno-foobar." "" { target *-*-* } 0 } */
++/* { dg-warning "unrecognized command line option .-mno-foobar." "" { target *-*-* } 0 } */
+Index: gcc/testsuite/lib/prune.exp
+===================================================================
+--- gcc/testsuite/lib/prune.exp	(revision 134648)
++++ gcc/testsuite/lib/prune.exp	(working copy)
+@@ -21,7 +21,7 @@
+     #send_user "Before:$text\n"
+ 
+     regsub -all "(^|\n)\[^\n\]*: In ((static member )?function|member|method|(copy )?constructor|destructor|instantiation|program|subroutine|block-data) \[^\n\]*" $text "" text
+-    regsub -all "(^|\n)\[^\n\]*: At (top level|global scope):\[^\n\]*" $text "" text
++    regsub -all "(^|\n)\[^\n\]*(: )?At (top level|global scope):\[^\n\]*" $text "" text
+     regsub -all "(^|\n)\[^\n\]*:   instantiated from \[^\n\]*" $text "" text
+     regsub -all "(^|\n)collect2: ld returned \[^\n\]*" $text "" text
+     regsub -all "(^|\n)collect: re(compiling|linking)\[^\n\]*" $text "" text
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-align-code.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-align-code.dpatch
@@ -0,0 +1,48 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: use "move.l %a4,%a4" to advance within code.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+ gcc/config/m68k/linux.h |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+Index: gcc-4.1/gcc/config/m68k/linux.h
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/linux.h
++++ gcc-4.1/gcc/config/m68k/linux.h
+@@ -163,6 +163,11 @@ Boston, MA 02110-1301, USA.  */
+   if ((LOG) > 0)						\
+     fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG));
+ 
++/* Use "move.l %a4,%a4" to advance within code.  */
++#define ASM_OUTPUT_ALIGN_WITH_NOP(FILE,LOG)			\
++  if ((LOG) > 0)						\
++    fprintf ((FILE), "\t.balignw %u,0x284c\n", 1 << (LOG));
++
+ /* If defined, a C expression whose value is a string containing the
+    assembler operation to identify the following data as uninitialized global
+    data.  */
--- gcc-4.1-4.1.2.orig/debian/patches/sparc-niagara-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sparc-niagara-doc.dpatch
@@ -0,0 +1,112 @@
+#! /bin/sh -e
+
+# DP: Backport of sparc niagara support (doc files).
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-03-02  David S. Miller  <davem@sunset.davemloft.net>
+
+	Sun Niagara specific optimizations.
+	* config.gcc: Recognize niagara as target.
+	* config/sparc/sparc.h (SPARC_RELAXED_ORDERING): Mention Niagara.
+	(TARGET_CPU_niagara): Define.
+	(CPP_CPU64_DEFAULT_SPEC): Define __sparc_v9__ for Niagara.
+	(ASM_CPU64_DEFAULT_SPEC): Pass -Av9b for Niagara.
+	(CPP_CPU_SPEC): Handle -mcpu=niagara.
+	(ASM_CPU_SPEC): Likewise.
+	(PROCESSOR_NIAGARA): New enum entry.
+	(REGISTER_MOVE_COST): Handle Niagara.
+	(BRANCH_COST, PREFETCH_BLOCK, SIMULTANEOUS_PREFETCHES): Likewise.
+	* config/sparc/sparc.c (niagara_costs): New processor_costs entry.
+	(sparc_override_options): Recognize "niagara", set appropriate
+	default MASK_* values for it, and align functions to 32-bytes
+	by default just like ULTRASPARC/ULTRASPARC3.
+	(sparc_initialize_trampoline): Handle niagara like ultrasparc.
+	(sparc64_initialize_trampoline): Likewise.
+	(sparc_use_sched_lookahead): Use zero for niagara.
+	(sparc_issue_rate): Use one for niagara.
+	* config/sparc/niagara.md: New file.
+	* config/sparc/sparc.md: Include it.
+	* config/sparc/sol2-bi.h (CPP_CPU64_DEFAULT_SPEC,
+	ASM_CPU32_DEFAULT_SPEC, ASM_CPU64_DEFAULT_SPEC): Set appropriately
+	when default cpu is niagara.
+	(CPP_CPU_SPEC): Handle -mcpu=niagara.
+	(ASM_CPU_SPEC): Likewise.
+	* config/sparc/sol2.h (ASM_CPU_DEFAULT_SPEC): Set appropriately
+	when default cpu is niagara.
+	(ASM_CPU_SPEC): Handle -mcpu=niagara.
+	* config/sparc/linux64.h: Handle a default of TARGET_CPU_niagara
+	just like v9/ultrasparc/ultrasparc3.
+	* doc/invoke.texi: Add documentation for "niagara" and improve
+	existing documentation for ultrasparc variants.
+	
+Index: gcc/doc/invoke.texi
+===================================================================
+--- gcc/doc/invoke.texi	(revision 111647)
++++ gcc/doc/invoke.texi	(working copy)
+@@ -12268,8 +12268,8 @@
+ for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
+ @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
+ @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
+-@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, and
+-@samp{ultrasparc3}.
++@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
++@samp{ultrasparc3}, and @samp{niagara}.
+ 
+ Default instruction scheduling parameters are used for values that select
+ an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
+@@ -12283,7 +12283,7 @@
+     v8:             supersparc, hypersparc
+     sparclite:      f930, f934, sparclite86x
+     sparclet:       tsc701
+-    v9:             ultrasparc, ultrasparc3
++    v9:             ultrasparc, ultrasparc3, niagara
+ @end smallexample
+ 
+ By default (unless configured otherwise), GCC generates code for the V7
+@@ -12317,9 +12317,11 @@
+ architecture.  This adds 64-bit integer and floating-point move instructions,
+ 3 additional floating-point condition code registers and conditional move
+ instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
+-optimizes it for the Sun UltraSPARC I/II chips.  With
++optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
+ @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
+-Sun UltraSPARC III chip.
++Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
++@option{-mcpu=niagara}, the compiler additionally optimizes it for
++Sun UltraSPARC T1 chips.
+ 
+ @item -mtune=@var{cpu_type}
+ @opindex mtune
+@@ -12331,8 +12333,8 @@
+ @option{-mtune=@var{cpu_type}}, but the only useful values are those
+ that select a particular cpu implementation.  Those are @samp{cypress},
+ @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
+-@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, and
+-@samp{ultrasparc3}.
++@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
++@samp{ultrasparc3}, and @samp{niagara}.
+ 
+ @item -mv8plus
+ @itemx -mno-v8plus
--- gcc-4.1-4.1.2.orig/debian/patches/note-gnu-stack.dpatch
+++ gcc-4.1-4.1.2/debian/patches/note-gnu-stack.dpatch
@@ -0,0 +1,352 @@
+#! /bin/sh -e
+
+# DP: Add .note.GNU-stack sections for gcc's crt files, libffi and boehm-gc
+# DP: Taken from FC.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+gcc/
+
+2004-09-20  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/rs6000/ppc-asm.h: Add .note.GNU-stack section also
+	on ppc64-linux.
+
+	* config/ia64/lib1funcs.asm: Add .note.GNU-stack section on
+	ia64-linux.
+	* config/ia64/crtbegin.asm: Likewise.
+	* config/ia64/crtend.asm: Likewise.
+	* config/ia64/crti.asm: Likewise.
+	* config/ia64/crtn.asm: Likewise.
+
+2004-05-14  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/ia64/linux.h (TARGET_ASM_FILE_END): Define.
+
+
+boehm-gc/
+
+2005-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* ia64_save_regs_in_stack.s: Moved to...
+	* ia64_save_regs_in_stack.S: ... this.  Add .note.GNU-stack
+	on Linux.
+
+libffi/
+
+2005-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* src/alpha/osf.S: Add .note.GNU-stack on Linux.
+	* src/s390/sysv.S: Likewise.
+	* src/powerpc/linux64.S: Likewise.
+	* src/powerpc/linux64_closure.S: Likewise.
+	* src/powerpc/ppc_closure.S: Likewise.
+	* src/powerpc/sysv.S: Likewise.
+	* src/x86/unix64.S: Likewise.
+	* src/x86/sysv.S: Likewise.
+	* src/sparc/v8.S: Likewise.
+	* src/sparc/v9.S: Likewise.
+	* src/m68k/sysv.S: Likewise.
+	* src/ia64/unix.S: Likewise.
+	* src/arm/sysv.S: Likewise.
+
+
+Index: gcc/config/ia64/linux.h
+===================================================================
+--- gcc/config/ia64/linux.h	(revision 107431)
++++ gcc/config/ia64/linux.h	(revision 107432)
+@@ -5,6 +5,8 @@
+ 
+ #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux");
+ 
++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
++
+ /* This is for -profile to use -lc_p instead of -lc.  */
+ #undef CC1_SPEC
+ #define CC1_SPEC "%{profile:-p} %{G*}"
+Index: gcc/config/ia64/lib1funcs.asm
+===================================================================
+--- gcc/config/ia64/lib1funcs.asm	(revision 107431)
++++ gcc/config/ia64/lib1funcs.asm	(revision 107432)
+@@ -792,3 +792,7 @@
+ 	}
+ 	.endp __floattitf
+ #endif
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+Index: gcc/config/ia64/crti.asm
+===================================================================
+--- gcc/config/ia64/crti.asm	(revision 107431)
++++ gcc/config/ia64/crti.asm	(revision 107432)
+@@ -64,3 +64,7 @@
+ 	.body
+ 
+ # end of crti.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+Index: gcc/config/ia64/crtn.asm
+===================================================================
+--- gcc/config/ia64/crtn.asm	(revision 107431)
++++ gcc/config/ia64/crtn.asm	(revision 107432)
+@@ -54,3 +54,7 @@
+ 	br.ret.sptk.many b0
+ 
+ # end of crtn.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+Index: gcc/config/ia64/crtend.asm
+===================================================================
+--- gcc/config/ia64/crtend.asm	(revision 107431)
++++ gcc/config/ia64/crtend.asm	(revision 107432)
+@@ -122,3 +122,7 @@
+ 
+ 	br.ret.sptk.many rp
+ 	.endp __do_global_ctors_aux
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+Index: gcc/config/ia64/crtbegin.asm
+===================================================================
+--- gcc/config/ia64/crtbegin.asm	(revision 107431)
++++ gcc/config/ia64/crtbegin.asm	(revision 107432)
+@@ -255,3 +255,7 @@
+ .weak __cxa_finalize
+ #endif
+ .weak _Jv_RegisterClasses
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+Index: gcc/config/rs6000/ppc-asm.h
+===================================================================
+--- gcc/config/rs6000/ppc-asm.h	(revision 107431)
++++ gcc/config/rs6000/ppc-asm.h	(revision 107432)
+@@ -158,7 +158,7 @@
+ 	.size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
+ #endif
+ 
+-#if defined __linux__ && !defined __powerpc64__
++#if defined __linux__
+ 	.section .note.GNU-stack
+ 	.previous
+ #endif
+Index: boehm-gc/ia64_save_regs_in_stack.s
+===================================================================
+--- boehm-gc/ia64_save_regs_in_stack.s	(revision 107431)
++++ boehm-gc/ia64_save_regs_in_stack.s	(revision 107432)
+@@ -1,12 +0,0 @@
+-        .text
+-        .align 16
+-        .global GC_save_regs_in_stack
+-        .proc GC_save_regs_in_stack
+-GC_save_regs_in_stack:
+-        .body
+-        flushrs
+-        ;;
+-        mov r8=ar.bsp
+-        br.ret.sptk.few rp
+-        .endp GC_save_regs_in_stack
+-
+Index: boehm-gc/ia64_save_regs_in_stack.S
+===================================================================
+--- boehm-gc/ia64_save_regs_in_stack.S	(revision 0)
++++ boehm-gc/ia64_save_regs_in_stack.S	(revision 107432)
+@@ -0,0 +1,15 @@
++        .text
++        .align 16
++        .global GC_save_regs_in_stack
++        .proc GC_save_regs_in_stack
++GC_save_regs_in_stack:
++        .body
++        flushrs
++        ;;
++        mov r8=ar.bsp
++        br.ret.sptk.few rp
++        .endp GC_save_regs_in_stack
++
++#ifdef __linux__
++	.section .note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/powerpc/ppc_closure.S
+===================================================================
+--- libffi/src/powerpc/ppc_closure.S	(revision 107431)
++++ libffi/src/powerpc/ppc_closure.S	(revision 107432)
+@@ -326,3 +326,7 @@
+ .LEFDE1:
+ 
+ #endif
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/powerpc/sysv.S
+===================================================================
+--- libffi/src/powerpc/sysv.S	(revision 107431)
++++ libffi/src/powerpc/sysv.S	(revision 107432)
+@@ -209,3 +209,7 @@
+       .align 2
+ .LEFDE1:
+ #endif
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/powerpc/linux64_closure.S
+===================================================================
+--- libffi/src/powerpc/linux64_closure.S	(revision 107431)
++++ libffi/src/powerpc/linux64_closure.S	(revision 107432)
+@@ -204,3 +204,7 @@
+ 	.align 3
+ .LEFDE1:
+ #endif
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/powerpc/linux64.S
+===================================================================
+--- libffi/src/powerpc/linux64.S	(revision 107431)
++++ libffi/src/powerpc/linux64.S	(revision 107432)
+@@ -178,3 +178,7 @@
+ 	.align 3
+ .LEFDE1:
+ #endif
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/m68k/sysv.S
+===================================================================
+--- libffi/src/m68k/sysv.S	(revision 107431)
++++ libffi/src/m68k/sysv.S	(revision 107432)
+@@ -95,3 +95,7 @@
+ 	unlk	%a6
+ 	rts
+ 	.size	ffi_call_SYSV,.-ffi_call_SYSV
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/alpha/osf.S
+===================================================================
+--- libffi/src/alpha/osf.S	(revision 107431)
++++ libffi/src/alpha/osf.S	(revision 107432)
+@@ -356,4 +356,8 @@
+ 	.byte	16		# uleb128 offset 16*-8
+ 	.align 3
+ $LEFDE3:
++
++#ifdef __linux__
++	.section	.note.GNU-stack,"",@progbits
+ #endif
++#endif
+Index: libffi/src/x86/sysv.S
+===================================================================
+--- libffi/src/x86/sysv.S	(revision 107431)
++++ libffi/src/x86/sysv.S	(revision 107432)
+@@ -376,3 +376,7 @@
+ #endif
+ 
+ #endif /* ifndef __x86_64__ */
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/x86/unix64.S
+===================================================================
+--- libffi/src/x86/unix64.S	(revision 107431)
++++ libffi/src/x86/unix64.S	(revision 107432)
+@@ -410,3 +410,7 @@
+ .LEFDE3:
+ 
+ #endif /* __x86_64__ */
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/s390/sysv.S
+===================================================================
+--- libffi/src/s390/sysv.S	(revision 107431)
++++ libffi/src/s390/sysv.S	(revision 107432)
+@@ -427,3 +427,6 @@
+ 
+ #endif
+ 
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/ia64/unix.S
+===================================================================
+--- libffi/src/ia64/unix.S	(revision 107431)
++++ libffi/src/ia64/unix.S	(revision 107432)
+@@ -553,3 +553,7 @@
+ 	data8	@pcrel(.Lld_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
+ 	data8	@pcrel(.Lld_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
+ 	data8	@pcrel(.Lld_hfa_ldouble)	// FFI_IA64_TYPE_HFA_LDOUBLE
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/sparc/v9.S
+===================================================================
+--- libffi/src/sparc/v9.S	(revision 107431)
++++ libffi/src/sparc/v9.S	(revision 107432)
+@@ -300,3 +300,7 @@
+ 	.align 8
+ .LLEFDE2:
+ #endif
++
++#ifdef __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/sparc/v8.S
+===================================================================
+--- libffi/src/sparc/v8.S	(revision 107431)
++++ libffi/src/sparc/v8.S	(revision 107432)
+@@ -265,3 +265,7 @@
+ 	.byte	0x1f	! uleb128 0x1f
+ 	.align	WS
+ .LLEFDE2:
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+Index: libffi/src/arm/sysv.S
+===================================================================
+--- libffi/src/arm/sysv.S	(revision 107431)
++++ libffi/src/arm/sysv.S	(revision 107432)
+@@ -207,3 +207,6 @@
+ .ffi_call_SYSV_end:
+         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
+ 
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",%progbits
++#endif
--- gcc-4.1-4.1.2.orig/debian/patches/sh4-multilib.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sh4-multilib.dpatch
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+
+# sh4-multilib.dpatch from Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Fix multilib (m4/m4-nofpu) for sh4-linux.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/config.gcc	2008-03-26 23:23:44.881575094 +0100
++++ gcc/config.gcc	2008-03-26 23:25:29.785115478 +0100
+@@ -1987,11 +1987,12 @@
+ 	sh_multilibs=${with_multilib_list}
+ 	if test x${sh_multilibs} = x ; then
+ 		case ${target} in
+-		sh[1234]*)	sh_multilibs=${sh_cpu_target} ;;
+ 		sh64* | sh5*)	sh_multilibs=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu ;;
+-		sh-superh-*)	sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
++		sh-superh-* | \
++		sh4-*-linux*)   sh_multilibs=m4,m4-nofpu ;;
+ 		sh*-*-linux*)	sh_multilibs=m1,m3e,m4 ;;
+ 		sh*-*-netbsd*)	sh_multilibs=m3,m3e,m4 ;;
++		sh-superh-*)	sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
+ 		*) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;;
+ 		esac
+ 	fi
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-hurdfix.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-hurdfix.dpatch
@@ -0,0 +1,62 @@
+#! /bin/sh -e
+
+# Description: java support for GNU/Hurd
+# Author: Robert Millan, Petr Salinger, Samuel Thibault
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- gcc-4.1.1/libjava/java/io/natFilePosix.cc.orig	2003-09-12 03:08:18.000000000 +0200
++++ gcc-4.1.1/libjava/java/io/natFilePosix.cc	2007-01-25 23:23:42.000000000 +0100
+@@ -25,6 +25,7 @@
+ #endif
+ #include <string.h>
+ #include <utime.h>
++#include <limits.h>
+ 
+ #include <gcj/cni.h>
+ #include <jvm.h>
+@@ -379,6 +380,10 @@
+ void
+ java::io::File::init_native ()
+ {
++#ifdef MAXPATHLEN
+   maxPathLen = MAXPATHLEN;
++#else
++  maxPathLen = INT_MAX;
++#endif
+   caseSensitive = true;
+ }
+diff -ur gcj-4.1.1/libjava/configure.host gcj-4.1.1/libjava/configure.host  
+--- gcj-4.1.1/libjava/configure.host	2006-09-07 01:00:37.000000000 +0200
++++ gcj-4.1.1/libjava/configure.host	2006-09-07 01:00:37.000000000 +0200
+@@ -326,7 +326,7 @@
+ esac
+ 
+ case "${host}" in
+-  *linux*|*-kfreebsd*-gnu)
++  *linux*|*-kfreebsd*-gnu|*gnu*)
+     use_libgcj_bc=yes
+   ;;
+   *)
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-directives-only-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-directives-only-doc.dpatch
@@ -0,0 +1,61 @@
+#! /bin/sh -e
+
+# DP: Backport from trunk: -fdirectives-only (when preprocessing,
+# DP: handle directives, but do not expand macros).
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Backport to 4.1
+
+Index: gcc/doc/cppopts.texi
+===================================================================
+--- gcc/doc/cppopts.texi	(revision 127319)
++++ gcc/doc/cppopts.texi	(working copy)
+@@ -503,6 +503,28 @@
+ @xref{Search Path}.
+ @end ifset
+ 
++@item -fdirectives-only
++@opindex fdirectives-only
++When preprocessing, handle directives, but do not expand macros.
++
++The option's behavior depends on the @option{-E} and @option{-fpreprocessed}
++options.
++
++With @option{-E}, preprocessing is limited to the handling of directives
++such as @code{#define}, @code{#ifdef}, and @code{#error}.  Other
++preprocessor operations, such as macro expansion and trigraph
++conversion are not performed.  In addition, the @option{-dD} option is
++implicitly enabled.
++
++With @option{-fpreprocessed}, predefinition of command line and most
++builtin macros is disabled.  Macros such as @code{__LINE__}, which are
++contextually dependent, are handled normally.  This enables compilation of
++files previously preprocessed with @code{-E -fdirectives-only}.
++
++With both @option{-E} and @option{-fpreprocessed}, the rules for
++@option{-fpreprocessed} take precedence.  This enables full preprocessing of
++files previously preprocessed with @code{-E -fdirectives-only}.
++
+ @item -fdollars-in-identifiers
+ @opindex fdollars-in-identifiers
+ @anchor{fdollars-in-identifiers}
--- gcc-4.1-4.1.2.orig/debian/patches/rename-info-files.dpatch
+++ gcc-4.1-4.1.2/debian/patches/rename-info-files.dpatch
@@ -0,0 +1,521 @@
+#! /bin/sh -e
+
+# DP: Allow transformations on info file names. Reference the
+# DP: transformed info file names in the texinfo files.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+gcc/ChangeLog:
+
+2004-02-17  Matthias Klose  <doko@debian.org>
+
+	* Makefile.in: Allow transformations on info file names.
+	Define MAKEINFODEFS, macros to pass transformated info file
+	names to makeinfo.
+	* doc/cpp.texi: Use macros defined in MAKEINFODEFS for references.
+	* doc/cppinternals.texi: Likewise.
+	* doc/extend.texi: Likewise.
+	* doc/gcc.texi: Likewise.
+	* doc/gccint.texi: Likewise.
+	* doc/invoke.texi: Likewise.
+	* doc/libgcc.texi: Likewise.
+	* doc/makefile.texi: Likewise.
+	* doc/passes.texi: Likewise.
+	* doc/sourcebuild.texi: Likewise.
+	* doc/standards.texi: Likewise.
+	* doc/trouble.texi: Likewise.
+
+gcc/fortran/ChangeLog:
+	* Make-lang.in: Allow transformations on info file names.
+	Pass macros of transformated info file defined in MAKEINFODEFS
+	names to makeinfo.
+	* gfortran.texi: Use macros defined in MAKEINFODEFS for references.
+
+gcc/java/ChangeLog:
+	* Make-lang.in: Allow transformations on info file names.
+	Pass macros of transformated info file defined in MAKEINFODEFS
+	names to makeinfo.
+	* gcj.texi: Use macros defined in MAKEINFODEFS for references.
+
+gcc/treelang/ChangeLog:
+	* Make-lang.in: Allow transformations on info file names.
+	Pass macros of transformated info file defined in MAKEINFODEFS
+	names to makeinfo.
+	Define TREELANG_MAKEINFODEFS macros to pass transformated info file
+	names to makeinfo.
+	* treelang.texi: Use macros defined in MAKEINFO_DEFS for references.
+
+
+--- gcc/doc/cpp.texi.orig	2005-11-13 00:07:53.854611888 +0000
++++ gcc/doc/cpp.texi	2005-11-13 00:08:39.139727504 +0000
+@@ -52,7 +52,7 @@
+ @ifinfo
+ @dircategory Programming
+ @direntry
+-* Cpp: (cpp).		       The GNU C preprocessor.
++* @value{fncpp}: (@value{fncpp}).		       The GNU C preprocessor.
+ @end direntry
+ @end ifinfo
+ 
+--- gcc/doc/cppinternals.texi.orig	2005-11-13 00:07:53.856611584 +0000
++++ gcc/doc/cppinternals.texi	2005-11-13 00:08:39.141727200 +0000
+@@ -7,7 +7,7 @@
+ @ifinfo
+ @dircategory Programming
+ @direntry
+-* Cpplib: (cppinternals).      Cpplib internals.
++* @value{fncppint}: (@value{fncppint}).      Cpplib internals.
+ @end direntry
+ @end ifinfo
+ 
+--- gcc/doc/extend.texi.orig	2005-11-13 00:07:53.900604896 +0000
++++ gcc/doc/extend.texi	2005-11-13 00:08:39.185720512 +0000
+@@ -9786,7 +9786,7 @@
+ test for the GNU compiler the same way as for C programs: check for a
+ predefined macro @code{__GNUC__}.  You can also use @code{__GNUG__} to
+ test specifically for GNU C++ (@pxref{Common Predefined Macros,,
+-Predefined Macros,cpp,The GNU C Preprocessor}).
++Predefined Macros,@value{fncpp},The GNU C Preprocessor}).
+ 
+ @menu
+ * Volatiles::		What constitutes an access to a volatile object.
+--- gcc/doc/gcc.texi.orig	2005-11-13 00:07:53.901604744 +0000
++++ gcc/doc/gcc.texi	2005-11-13 00:08:39.187720208 +0000
+@@ -64,7 +64,7 @@
+ @ifnottex
+ @dircategory Programming
+ @direntry
+-* gcc: (gcc).                  The GNU Compiler Collection.
++* @value{fngcc}: (@value{fngcc}).                  The GNU Compiler Collection.
+ @end direntry
+ This file documents the use of the GNU compilers.
+ @sp 1
+@@ -123,7 +123,7 @@
+ The internals of the GNU compilers, including how to port them to new
+ targets and some information about how to write front ends for new
+ languages, are documented in a separate manual.  @xref{Top,,
+-Introduction, gccint, GNU Compiler Collection (GCC) Internals}.
++Introduction, @value{fngccint}, GNU Compiler Collection (GCC) Internals}.
+ 
+ @menu
+ * G++ and GCC::     You can compile C or C++ programs.
+--- gcc/doc/gccint.texi.orig	2005-11-13 00:07:53.901604744 +0000
++++ gcc/doc/gccint.texi	2005-11-13 00:08:39.187720208 +0000
+@@ -50,7 +50,7 @@
+ @ifnottex
+ @dircategory Programming
+ @direntry
+-* gccint: (gccint).            Internals of the GNU Compiler Collection.
++* @value{fngccint}: (@value{fngccint}).            Internals of the GNU Compiler Collection.
+ @end direntry
+ This file documents the internals of the GNU compilers.
+ @sp 1
+@@ -82,7 +82,7 @@
+ how to port them to new targets and some information about how to
+ write front ends for new languages.  It corresponds to GCC version
+ @value{version-GCC}.  The use of the GNU compilers is documented in a
+-separate manual.  @xref{Top,, Introduction, gcc, Using the GNU
++separate manual.  @xref{Top,, Introduction, @value{fngcc}, Using the GNU
+ Compiler Collection (GCC)}.
+ 
+ This manual is mainly a reference manual rather than a tutorial.  It
+--- gcc/doc/invoke.texi.orig	2005-11-13 00:07:53.966594864 +0000
++++ gcc/doc/invoke.texi	2005-11-13 00:08:39.204717624 +0000
+@@ -6272,7 +6272,7 @@
+ @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or special
+ needs for some languages.
+-(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
++(@xref{Interface,,Interfacing to GCC Output,@value{fngccint},GNU Compiler
+ Collection (GCC) Internals},
+ for more discussion of @file{libgcc.a}.)
+ In most cases, you need @file{libgcc.a} even when you want to avoid
+@@ -6280,7 +6280,7 @@
+ or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
+ This ensures that you have no unresolved references to internal GCC
+ library subroutines.  (For example, @samp{__main}, used to ensure C++
+-constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
++constructors will be called; @pxref{Collect2,,@code{collect2}, @value{fngccint},
+ GNU Compiler Collection (GCC) Internals}.)
+ 
+ @item -pie
+@@ -13093,7 +13093,7 @@
+ @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
+ take precedence over places specified using environment variables, which
+ in turn take precedence over those specified by the configuration of GCC@.
+-@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
++@xref{Driver,, Controlling the Compilation Driver @file{gcc}, @value{fngccint},
+ GNU Compiler Collection (GCC) Internals}.
+ 
+ @table @env
+@@ -13245,7 +13245,7 @@
+ 
+ A precompiled header file will be searched for when @code{#include} is
+ seen in the compilation.  As it searches for the included file
+-(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
++(@pxref{Search Path,,Search Path,@value{fncpp},The C Preprocessor}) the
+ compiler looks for a precompiled header in each directory just before it
+ looks for the include file in that directory.  The name searched for is
+ the name specified in the @code{#include} with @samp{.gch} appended.  If
+--- gcc/doc/libgcc.texi.orig	2005-11-13 00:07:53.968594560 +0000
++++ gcc/doc/libgcc.texi	2005-11-13 00:08:39.206717320 +0000
+@@ -24,7 +24,7 @@
+ GCC will also generate calls to C library routines, such as
+ @code{memcpy} and @code{memset}, in some cases.  The set of routines
+ that GCC may possibly use is documented in @ref{Other
+-Builtins,,,gcc, Using the GNU Compiler Collection (GCC)}.
++Builtins,,,@value{fngcc}, Using the GNU Compiler Collection (GCC)}.
+ 
+ These routines take arguments and return values of a specific machine
+ mode, not a specific C type.  @xref{Machine Modes}, for an explanation
+--- gcc/doc/makefile.texi.orig	2005-11-13 00:07:53.969594408 +0000
++++ gcc/doc/makefile.texi	2005-11-13 00:08:39.207717168 +0000
+@@ -124,7 +124,7 @@
+ @item profiledbootstrap
+ Builds a compiler with profiling feedback information.  For more
+ information, see
+-@ref{Building,,Building with profile feedback,gccinstall,Installing GCC}.
++@ref{Building,,Building with profile feedback,@value{fngccinstall},Installing GCC}.
+ This is actually a target in the top-level directory, which then
+ recurses into the @file{gcc} subdirectory multiple times.
+ 
+--- gcc/doc/passes.texi.orig	2005-11-13 00:07:53.987591672 +0000
++++ gcc/doc/passes.texi	2005-11-13 00:08:39.208717016 +0000
+@@ -191,7 +191,7 @@
+ @item Mudflap declaration registration
+ 
+ If mudflap (@pxref{Optimize Options,,-fmudflap -fmudflapth
+--fmudflapir,gcc.info,Using the GNU Compiler Collection (GCC)}) is
++-fmudflapir,@value{fngcc},Using the GNU Compiler Collection (GCC)}) is
+ enabled, we generate code to register some variable declarations with
+ the mudflap runtime.  Specifically, the runtime tracks the lifetimes of
+ those variable declarations that have their addresses taken, or whose
+--- gcc/doc/standards.texi.orig	2005-11-13 00:07:53.988591520 +0000
++++ gcc/doc/standards.texi	2005-11-13 00:08:39.209716864 +0000
+@@ -188,8 +188,8 @@
+ GNAT Reference Manual}, for information on standard
+ conformance and compatibility of the Ada compiler.
+ 
+-@xref{Standards,,Standards, gfortran, The GNU Fortran 95 Compiler}, for details
++@xref{Standards,,Standards, @value{fngfortran}, The GNU Fortran 95 Compiler}, for details
+ of standards supported by @command{gfortran}.
+ 
+-@xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj},
++@xref{Compatibility,,Compatibility with the Java Platform, @value{fngcj}, GNU gcj},
+ for details of compatibility between @command{gcj} and the Java Platform.
+--- gcc/java/Make-lang.in.orig	2005-11-13 00:07:54.045582856 +0000
++++ gcc/java/Make-lang.in	2005-11-13 00:08:39.213716256 +0000
+@@ -174,12 +174,23 @@
+ 	  --regex='/DEFTREECODE [(]\([A-Z_]+\)/\1/' java-tree.def; \
+ 	etags --include TAGS.sub --include ../TAGS.sub
+ 
++TEXI_GCJ_FILES = java/gcj.texi \
++		 $(docdir)/include/gpl.texi $(docdir)/include/funding.texi \
++		 $(docdir)/include/fdl.texi $(docdir)/include/gcc-common.texi
++INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
+ 
+-java.info: doc/gcj.info
++java.info: doc/$(INFO_GCJ_NAME).info
+ 
+-java.srcinfo: doc/gcj.info
++java.srcinfo: doc/$(INFO_GCJ_NAME).info
+ 	-cp -p $^ $(srcdir)/doc
+ 
++doc/$(INFO_GCJ_NAME).info: $(TEXI_GCJ_FILES)
++	if test "x$(BUILD_INFO)" = xinfo; then \
++	  rm -f $(@)*; \
++	  $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) \
++	    -I$(docdir)/include -I$(srcdir)/f -o$@ $<; \
++	else true; fi
++
+ dvi:: doc/gcj.dvi
+ html:: $(htmldir)/java/index.html
+ JAVA_MANFILES = doc/gcj.1 doc/gcjh.1 doc/jv-scan.1 doc/jcf-dump.1 doc/gij.1 \
+@@ -246,8 +257,9 @@
+ 	-rm -rf $(DESTDIR)$(man1dir)/gij$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/jv-convert$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/gcj-dbtool$(man1ext)
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCJ_NAME).info*
+ 
+-install-info:: $(DESTDIR)$(infodir)/gcj.info
++install-info:: $(DESTDIR)$(infodir)/$(INFO_GCJ_NAME).info
+ 
+ #
+ # Clean hooks:
+--- gcc/java/gcj.texi.orig	2005-11-13 00:07:54.082577232 +0000
++++ gcc/java/gcj.texi	2005-11-13 00:08:39.216715800 +0000
+@@ -52,7 +52,7 @@
+ @format
+ @dircategory Programming
+ @direntry
+-* Gcj: (gcj).               Ahead-of-time compiler for the Java language
++* @value{fngcj}: (@value{fngcj}).               Ahead-of-time compiler for the Java language
+ @end direntry
+ 
+ @dircategory Individual utilities
+@@ -157,7 +157,7 @@
+ 
+ As @command{gcj} is just another front end to @command{gcc}, it supports many
+ of the same options as gcc.  @xref{Option Summary, , Option Summary,
+-gcc, Using the GNU Compiler Collection (GCC)}.  This manual only documents the
++@value{fngcc}, Using the GNU Compiler Collection (GCC)}.  This manual only documents the
+ options specific to @command{gcj}.
+ 
+ @c man end
+--- gcc/fortran/Make-lang.in.orig	2005-11-13 00:07:54.007588632 +0000
++++ gcc/fortran/Make-lang.in	2005-11-13 00:10:38.642560312 +0000
+@@ -129,7 +129,8 @@
+ 	cd $(srcdir)/fortran; etags -o TAGS.sub *.c *.h; \
+ 	etags --include TAGS.sub --include ../TAGS.sub
+ 
+-fortran.info: doc/gfortran.info
++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
++fortran.info: doc/$(INFO_FORTRAN_NAME).info
+ dvi:: doc/gfortran.dvi
+ html:: $(htmldir)/gfortran/index.html
+ 
+@@ -156,10 +157,10 @@
+   $(srcdir)/doc/include/gcc-common.texi \
+   gcc-vers.texi
+ 
+-doc/gfortran.info: $(GFORTRAN_TEXI)
++doc/$(INFO_FORTRAN_NAME).info: $(GFORTRAN_TEXI)
+ 	if [ x$(BUILD_INFO) = xinfo ]; then \
+ 	  rm -f doc/gfortran.info-*; \
+-	  $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
++	  $(MAKEINFO) $(MAKEINFODEFS) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
+ 	    -o $@ $<; \
+ 	else true; fi
+ 
+@@ -201,7 +202,7 @@
+ 	  fi ; \
+ 	fi
+ 
+-install-info:: $(DESTDIR)$(infodir)/gfortran.info
++install-info:: $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info
+ 
+ fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext)
+ 
+@@ -219,7 +220,7 @@
+ 	rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
+ 	rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \
+ 	rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
+-	rm -rf $(DESTDIR)$(infodir)/gfortran.info*
++	rm -rf $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info*
+ 
+ #
+ # Clean hooks:
+--- gcc/fortran/gfortran.texi.orig	2005-11-13 00:07:54.044583008 +0000
++++ gcc/fortran/gfortran.texi	2005-11-13 00:08:39.212716408 +0000
+@@ -63,7 +63,7 @@
+ @ifinfo
+ @dircategory Programming
+ @direntry
+-* gfortran: (gfortran).                  The GNU Fortran 95 Compiler.
++* @value{fngfortran}: (@value{fngfortran}).                  The GNU Fortran 95 Compiler.
+ @end direntry
+ This file documents the use and the internals of
+ the GNU Fortran 95 compiler, (@command{gfortran}).
+--- gcc/treelang/Make-lang.in.orig	2005-11-13 00:07:54.083577080 +0000
++++ gcc/treelang/Make-lang.in	2005-11-13 00:08:39.217715648 +0000
+@@ -156,9 +156,12 @@
+ 	cd $(srcdir)/treelang; etags -o TAGS.sub *.y *.l *.c *.h; \
+ 	etags --include TAGS.sub --include ../TAGS.sub
+ 
+-treelang.info: doc/treelang.info
++INFO_TREELANG_NAME = $(shell echo treelang|sed '$(program_transform_name)')
++TREELANG_MAKEINFODEFS = -D 'fntreelang $(INFO_TREELANG_NAME)'
+ 
+-treelang.srcinfo: doc/treelang.info
++treelang.info: doc/$(INFO_TREELANG_NAME).info
++
++treelang.srcinfo: doc/$(INFO_TREELANG_NAME).info
+ 	-cp -p $^ $(srcdir)/doc
+ 
+ dvi:: doc/treelang.dvi
+@@ -170,8 +173,8 @@
+ 	 $(docdir)/include/funding.texi \
+ 	 gcc-vers.texi
+ 
+-doc/treelang.info: $(TEXI_TREELANG_FILES)
+-	$(MAKEINFO) $(MAKEINFOFLAGS) -I $(docdir)/include -o $@ $<
++doc/$(INFO_TREELANG_NAME).info: $(TEXI_TREELANG_FILES)
++	$(MAKEINFO) $(MAKEINFOFLAGS) $(TREELANG_MAKEINFODEFS) -I $(docdir)/include -o $@ $<
+ 
+ doc/treelang.dvi: $(TEXI_TREELANG_FILES)
+ 	$(TEXI2DVI) -I $(abs_docdir)/include -o $@ $<
+@@ -209,7 +212,7 @@
+ 	$(STAMP) treelang.install.common.done
+ 
+ # We might not be able to build the info files
+-install-info:: $(DESTDIR)$(infodir)/treelang.info
++install-info:: $(DESTDIR)$(infodir)/$(INFO_TREELANG_NAME).info
+ 
+ treelang.install-man:
+ 
+@@ -222,6 +225,7 @@
+ 	  echo -rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
+ 	  rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
+ 	done
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_TREELANG_NAME).info*
+ 	-rm treelang.install.common.done
+ 
+ #
+--- gcc/treelang/treelang.texi.orig	2005-11-13 00:07:54.102574192 +0000
++++ gcc/treelang/treelang.texi	2005-11-13 00:08:39.284705464 +0000
+@@ -102,7 +102,7 @@
+ @ifnottex
+ @dircategory Programming
+ @direntry
+-* treelang: (treelang).                  The GNU Treelang compiler.
++* @value{fntreelang}: (@value{fntreelang}).                  The GNU Treelang compiler.
+ @end direntry
+ @ifset INTERNALS
+ @ifset USING
+@@ -258,7 +258,7 @@
+ @item
+ The packaging and compiler portions of GNU Treelang are based largely
+ on the GCC compiler.
+-@xref{Contributors,,Contributors to GCC,GCC,Using and Maintaining GCC},
++@xref{Contributors,,Contributors to GCC,@value{fngcc},Using and Maintaining GCC},
+ for more information.
+ 
+ @item
+@@ -878,7 +878,7 @@
+ command-line options that are designed to cater to Treelang users
+ but apply to other languages as well.
+ 
+-@xref{G++ and GCC,,Programming Languages Supported by GCC,GCC,Using
++@xref{G++ and GCC,,Programming Languages Supported by GCC,@value{fngcc},Using
+ the GNU Compiler Collection (GCC)},
+ for information on the way different languages are handled
+ by the GCC compiler (@code{gcc}).
+--- gcc/Makefile.in.orig	2005-11-13 00:07:54.160565376 +0000
++++ gcc/Makefile.in	2005-11-13 00:08:39.325699232 +0000
+@@ -3283,8 +3283,24 @@
+ 
+ doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug
+ 
+-INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \
+-            doc/gccinstall.info doc/cppinternals.info
++INFO_CPP_NAME = $(shell echo cpp|sed '$(program_transform_name)')
++INFO_GCC_NAME = $(shell echo gcc|sed '$(program_transform_name)')
++INFO_GCCINT_NAME = $(shell echo gccint|sed '$(program_transform_name)')
++INFO_GCCINSTALL_NAME = $(shell echo gccinstall|sed '$(program_transform_name)')
++INFO_CPPINT_NAME = $(shell echo cppinternals|sed '$(program_transform_name)')
++
++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
++INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
++
++INFOFILES = doc/$(INFO_CPP_NAME).info doc/$(INFO_GCC_NAME).info \
++            doc/$(INFO_GCCINT_NAME).info \
++            doc/$(INFO_GCCINSTALL_NAME).info doc/$(INFO_CPPINT_NAME).info
++
++MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' -D 'fngcc $(INFO_GCC_NAME)' \
++               -D 'fngccint $(INFO_GCCINT_NAME)' \
++               -D 'fngccinstall $(INFO_GCCINSTALL_NAME)' \
++               -D 'fncppint $(INFO_CPPINT_NAME)' \
++               -D 'fngfortran $(INFO_GFORTRAN_NAME)' \
+ 
+ info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo
+ 
+@@ -3327,21 +3343,40 @@
+ # patterns.  To use them, put each of the specific targets with its
+ # specific dependencies but no build commands.
+ 
+-doc/cpp.info: $(TEXI_CPP_FILES)
+-doc/gcc.info: $(TEXI_GCC_FILES)
+-doc/gccint.info: $(TEXI_GCCINT_FILES)
+-doc/cppinternals.info: $(TEXI_CPPINT_FILES)
+-
++# Generic entry to handle info files, which are not renamed (currently Ada)
+ doc/%.info: %.texi
+ 	if [ x$(BUILD_INFO) = xinfo ]; then \
+ 		$(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(docdir) \
+ 			-I $(docdir)/include -o $@ $<; \
+ 	fi
+ 
+-# Duplicate entry to handle renaming of gccinstall.info
+-doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES)
++doc/$(INFO_CPP_NAME).info: $(TEXI_CPP_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(docdir) \
++			-I $(docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_GCC_NAME).info: $(TEXI_GCC_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(docdir) \
++			-I $(docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_GCCINT_NAME).info: $(TEXI_GCCINT_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(docdir) \
++			-I $(docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_CPPINT_NAME).info: $(TEXI_CPPINT_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(docdir) \
++			-I $(docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_GCCINSTALL_NAME).info: $(TEXI_GCCINSTALL_FILES)
+ 	if [ x$(BUILD_INFO) = xinfo ]; then \
+-		$(MAKEINFO) $(MAKEINFOFLAGS) -I $(docdir) \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(docdir) \
+ 			-I $(docdir)/include -o $@ $<; \
+ 	fi
+ 
+@@ -3634,11 +3669,11 @@
+ # $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
+ # to do the install.
+ install-info:: doc installdirs \
+-	$(DESTDIR)$(infodir)/cpp.info \
+-	$(DESTDIR)$(infodir)/gcc.info \
+-	$(DESTDIR)$(infodir)/cppinternals.info \
+-	$(DESTDIR)$(infodir)/gccinstall.info \
+-	$(DESTDIR)$(infodir)/gccint.info
++	$(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info
+ 
+ $(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
+ 	rm -f $@
+@@ -3807,8 +3842,11 @@
+ 	-rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/protoize$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/unprotoize$(man1ext)
+-	-rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info*
+-	-rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info*
+ #
+ # These targets are for the dejagnu testsuites. The file site.exp
+ # contains global variables that all the testsuites will use.
--- gcc-4.1-4.1.2.orig/debian/patches/ada-symbolic-tracebacks.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ada-symbolic-tracebacks.dpatch
@@ -0,0 +1,333 @@
+#! /bin/sh -e
+
+# DP: - Enable support for symbolic tracebacks in exceptions (delete the dummy
+# DP:   convert_addresses from adaint.c, and provide a real one separately.)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Ported Jürgen Pfeifer's patch to enable symbolic tracebacks on Debian
+GNU/Linux.
+
+The binary distribution of GNAT 3.15p comes with an old version of
+binutils that includes a library, libaddr2line.a.  This library does
+not exist in recent versions of binutils.  The patch works around this
+by calling /usr/bin/addr2line (still part of binutils) and parsing the
+output.  See debian/convert_addresses.c for the gory details.
+
+I have modified convert_addresses.c to not use a shell script anymore;
+Debian controls the version of binutils which is installed.  Also, I
+use execve instead of execle.
+
+-- 
+Ludovic Brenta.
+
+
+--- gcc/ada/adaint.c~	2005-11-15 14:52:31.000000000 +0100
++++ gcc/ada/adaint.c	2006-04-23 14:43:55.000000000 +0200
+@@ -2541,33 +2541,6 @@
+ }
+ #endif
+ 
+-#if defined (CROSS_COMPILE)  \
+-  || (! ((defined (sparc) || defined (i386)) && defined (sun) \
+-      && defined (__SVR4)) \
+-      && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \
+-      && ! (defined (linux) && defined (__ia64__)) \
+-      && ! defined (__FreeBSD__) \
+-      && ! defined (__hpux__) \
+-      && ! defined (__APPLE__) \
+-      && ! defined (_AIX) \
+-      && ! (defined (__alpha__)  && defined (__osf__)) \
+-      && ! defined (__MINGW32__) \
+-      && ! (defined (__mips) && defined (__sgi)))
+-
+-/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional
+-   just above for a list of native platforms that provide a non-dummy
+-   version of this procedure in libaddr2line.a.  */
+-
+-void
+-convert_addresses (void *addrs ATTRIBUTE_UNUSED,
+-		   int n_addr ATTRIBUTE_UNUSED,
+-		   void *buf ATTRIBUTE_UNUSED,
+-		   int *len ATTRIBUTE_UNUSED)
+-{
+-  *len = 0;
+-}
+-#endif
+-
+ #if defined (_WIN32)
+ int __gnat_argument_needs_quote = 1;
+ #else
+--- gcc/ada/g-trasym.adb~      Thu Oct 24 11:02:18 2002
++++ gcc/ada/g-trasym.adb       Fri Jul  4 16:16:30 2003
+@@ -33,16 +33,16 @@
+ ------------------------------------------------------------------------------
+ 
+ --  Run-time symbolic traceback support
++--  This file has been modified by Juergen Pfeifer (31-Dec-1999) for
++--  the purpose to support the Ada for Linux Team implementation of
++--  convert_addresses. This implementation has the advantage to run
++--  on the binutils as they are deployed on Linux.
+ 
+ with System.Soft_Links;
+ with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
+ 
+ package body GNAT.Traceback.Symbolic is
+ 
+-   pragma Linker_Options ("-laddr2line");
+-   pragma Linker_Options ("-lbfd");
+-   pragma Linker_Options ("-liberty");
+-
+    package TSL renames System.Soft_Links;
+ 
+    ------------------------
+@@ -56,16 +56,19 @@
+          buf      : System.Address;
+          len      : System.Address);
+       pragma Import (C, convert_addresses, "convert_addresses");
+-      --  This is the procedure version of the Ada aware addr2line that will
+-      --  use argv[0] as the executable containing the debug information.
+-      --  This procedure is provided by libaddr2line on targets that support
+-      --  it. A dummy version is in a-adaint.c for other targets so that build
+-      --  of shared libraries doesn't generate unresolved symbols.
++      --  This is the ALT Linux specific version adapted to the binutils
++      --  deployed with most Linuxes. These binutils already have an
++      --  addr2line tool that demangles Ada symbolic names, but there are
++      --  version dependant variants for the option names. Therefore our
++      --  implementation spawns a shell script that does normalization of
++      --  the option and then executes addr2line and communicates with it
++      --  through a bidirectional pipe.
+       --
+       --  Note that this procedure is *not* thread-safe.
+ 
+-      Res : String (1 .. 256 * Traceback'Length);
+-      Len : Integer;
++      B_Size : constant Integer := 256 * Traceback'Length;
++      Len    : Integer := B_Size;
++      Res    : String (1 .. B_Size);
+ 
+    begin
+       if Traceback'Length > 0 then
+--- gcc/ada/convert_addresses.c~       1970-01-01 01:00:00.000000000 +0100
++++ gcc/ada/convert_addresses.c        2005-04-27 15:06:51.000000000 +0200
+@@ -0,0 +1,157 @@
++/*
++  Copyright (C) 1999 by Juergen Pfeifer <juergen.pfeifer@gmx.net>
++  Ada for Linux Team (ALT)
++
++  Permission is hereby granted, free of charge, to any person obtaining a
++  copy of this software and associated documentation files (the
++  "Software"), to deal in the Software without restriction, including
++  without limitation the rights to use, copy, modify, merge, publish,
++  distribute, distribute with modifications, sublicense, and/or sell
++  copies of the Software, and to permit persons to whom the Software is
++  furnished to do so, subject to the following conditions:
++
++  The above copyright notice and this permission notice shall be included
++  in all copies or substantial portions of the Software.
++
++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++  IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
++  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
++  THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++  Except as contained in this notice, the name(s) of the above copyright
++  holders shall not be used in advertising or otherwise to promote the
++  sale, use or other dealings in this Software without prior written
++  authorization.
++*/
++#include <sys/types.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <unistd.h>
++#include <string.h>
++#include <signal.h>
++
++#define STDIN_FILENO  0
++#define STDOUT_FILENO 1
++#define MAX_LINE      1024
++
++#define CLOSE1  close(fd1[0]); close(fd1[1])
++#define CLOSE2  close(fd2[0]); close(fd2[1])
++#define RESTSIG sigaction(SIGPIPE,&oact,NULL)
++
++void convert_addresses
++( void* addrs[],
++  int   n_addr,
++  char* buf,
++  int*  len)
++{
++  int max_len = *len;
++  pid_t pid = getpid();
++  pid_t child;
++
++  struct sigaction act, oact;
++
++  int fd1[2], fd2[2];
++  char exe_name[128];
++
++  *buf = 0; *len = 0;
++  /* Thanx to the /proc filesystem we can very easily reference our own
++     executable image:-)*/
++  snprintf(exe_name,sizeof(exe_name),"--exe=/proc/%ld/exe", (long)pid);
++
++  act.sa_handler = SIG_IGN;
++  sigemptyset(&act.sa_mask);
++  act.sa_flags = 0;
++  if (sigaction(SIGPIPE,&act,&oact) < 0)
++    return;
++
++  if (pipe(fd1) >= 0) {
++    if (pipe(fd2)>=0) {
++      if ((child = fork()) < 0) {
++      CLOSE1; CLOSE2; RESTSIG;
++      return;
++      }
++      else {
++      if (0==child) {
++        close(fd1[1]);
++        close(fd2[0]);
++        if (fd1[0] != STDIN_FILENO) {
++          if (dup2(fd1[0],STDIN_FILENO) != STDIN_FILENO) {
++            CLOSE1; CLOSE2;
++          }
++          close(fd1[0]);
++        }
++        if (fd2[1] != STDOUT_FILENO) {
++          if (dup2(fd2[1],STDOUT_FILENO) != STDOUT_FILENO) {
++            CLOSE1; CLOSE2;
++          }
++          close(fd2[1]);
++        }
++        {
++          /* As pointed out by Florian Weimer to me, it is a
++             security threat to call the script with a user defined
++             environment and using the path. That would be Trojans
++             pleasure.  Therefore we use the absolute path to
++             addr2line and an empty environment. That should be
++             safe.
++          */
++          char *const argv[] = { "addr2line",
++                                 exe_name,
++                                 "--demangle=gnat",
++                                 "--functions",
++                                 "--basenames",
++                                 NULL };
++          char *const envp[] = { NULL };
++          if (execve("/usr/bin/addr2line", argv, envp) < 0) {
++            CLOSE1; CLOSE2;
++          }
++        }
++      }
++      else {
++        int i, n;
++        char hex[16];
++        char line[MAX_LINE + 1];
++        char *p;
++        char *s = buf;
++
++        /* Parent context */
++        close(fd1[0]);
++        close(fd2[1]);
++
++        for(i=0; i < n_addr; i++) {
++          snprintf(hex,sizeof(hex),"%p\n",addrs[i]);
++          write(fd1[1],hex,strlen(hex));
++          n = read(fd2[0],line,MAX_LINE);
++          if (n<=0)
++            break;
++          line[n]=0;
++          /* We have approx. 16 additional chars for "%p in " clause.
++             We use this info to prevent a buffer overrun.
++          */
++          if (n + 16 + (*len) > max_len)
++            break;
++          p = strchr(line,'\n');
++          if (p) {
++            if (*(p+1)) {
++              *p = 0;
++              *len += snprintf(s, (max_len - (*len)), "%p in %s at %s",addrs[i], line, p+1);
++            }
++            else {
++              *len += snprintf(s, (max_len - (*len)), "%p at %s",addrs[i], line);
++            }
++            s = buf + (*len);
++          }
++        }
++        close(fd1[1]);
++        close(fd2[0]);
++      }
++      }
++    }
++    else {
++      CLOSE1;
++    }
++  }
++  RESTSIG;
++}
+--- gcc/ada/Makefile.in.orig	2006-04-17 19:39:15.848644432 +0000
++++ gcc/ada/Makefile.in	2006-04-17 19:43:14.794319168 +0000
+@@ -1352,7 +1352,7 @@
+ include $(fsrcdir)/Makefile.rtl
+ 
+ GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
+-  g-trasym.o memtrack.o
++  g-trasym.o memtrack.o convert_addresses.o
+ 
+ # Default run time files
+ 
+@@ -1507,7 +1507,6 @@
+ 	for file in rts/*.ali; do \
+ 	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ 	done
+-	-$(INSTALL_DATA) rts/g-trasym$(objext) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+ 	-cd rts; for file in *$(arext);do \
+ 	    $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ 	    $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
+@@ -1607,7 +1606,7 @@
+ 	        $(GNATRTL_OBJS)
+ 	$(RM) rts/libgnat$(arext) rts/libgnarl$(arext)
+ 	$(AR_FOR_TARGET) $(AR_FLAGS) rts/libgnat$(arext) \
+-	   $(addprefix rts/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS))
++	   $(addprefix rts/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
+         ifneq ($(PREFIX_OBJS),)
+ 		$(AR_FOR_TARGET) $(AR_FLAGS) rts/libgccprefix$(arext) \
+ 		  $(PREFIX_OBJS);
+@@ -1637,6 +1636,7 @@
+ 		$(TARGET_LIBGCC2_CFLAGS) \
+ 		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ 		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
++		g-trasym.o convert_addresses.o \
+ 		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ 		$(MISCLIB) -lm
+ 	cd rts; ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+@@ -1859,6 +1859,7 @@
+ sysdep.o  : sysdep.c
+ raise-gcc.o : raise-gcc.c raise.h
+ raise.o   : raise.c raise.h
++convert_addresses.o : convert_addresses.c
+ 
+ gen-soccon: gen-soccon.c gsocket.h
+ 	$(CC) $(ALL_CFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
--- gcc-4.1-4.1.2.orig/debian/patches/arm-libffi.dpatch
+++ gcc-4.1-4.1.2/debian/patches/arm-libffi.dpatch
@@ -0,0 +1,218 @@
+#! /bin/sh -e
+
+# DP: Add closure support to libffi for arm
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -uprN src/libffi/src/arm.old/ffi.c src/libffi/src/arm/ffi.c
+--- src/libffi/src/arm.old/ffi.c	2004-10-27 16:10:21.000000000 +0100
++++ src/libffi/src/arm/ffi.c	2005-12-31 16:07:04.787839432 +0000
+@@ -183,3 +183,121 @@ void ffi_call(/*@dependent@*/ ffi_cif *c
+       break;
+     }
+ }
++
++/** private members **/
++
++static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
++					 void** args, ffi_cif* cif);
++
++void ffi_closure_SYSV (ffi_closure *);
++
++/* This function is jumped to by the trampoline */
++
++unsigned int
++ffi_closure_SYSV_inner (closure, respp, args)
++     ffi_closure *closure;
++     void **respp;
++     void *args;
++{
++  // our various things...
++  ffi_cif       *cif;
++  void         **arg_area;
++
++  cif         = closure->cif;
++  arg_area    = (void**) alloca (cif->nargs * sizeof (void*));  
++
++  /* this call will initialize ARG_AREA, such that each
++   * element in that array points to the corresponding 
++   * value on the stack; and if the function returns
++   * a structure, it will re-set RESP to point to the
++   * structure return address.  */
++
++  ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif);
++
++  (closure->fun) (cif, *respp, arg_area, closure->user_data);
++
++  return cif->flags;
++}
++
++/*@-exportheader@*/
++static void 
++ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
++			    void **avalue, ffi_cif *cif)
++/*@=exportheader@*/
++{
++  register unsigned int i;
++  register void **p_argv;
++  register char *argp;
++  register ffi_type **p_arg;
++
++  argp = stack;
++
++  if ( cif->flags == FFI_TYPE_STRUCT ) {
++    *rvalue = *(void **) argp;
++    argp += 4;
++  }
++
++  p_argv = avalue;
++
++  for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++)
++    {
++      size_t z;
++
++      /* Align if necessary */
++      if ((sizeof(int) - 1) & (unsigned) argp) {
++	argp = (char *) ALIGN(argp, sizeof(int));
++      }
++
++      z = (*p_arg)->size;
++
++      /* because we're little endian, this is what it turns into.   */
++
++      *p_argv = (void*) argp;
++
++      p_argv++;
++      argp += z;
++    }
++  
++  return;
++}
++
++/* How to make a trampoline.  */
++
++#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \
++({ unsigned char *__tramp = (unsigned char*)(TRAMP); \
++   unsigned int  __fun = (unsigned int)(FUN); \
++   unsigned int  __ctx = (unsigned int)(CTX); \
++   *(unsigned int*) &__tramp[0] = 0xe92d000f; /* stmfd sp!, {r0-r3} */	\
++   *(unsigned int*) &__tramp[4] = 0xe59f0000; /* ldr r0, [pc] */ \
++   *(unsigned int*) &__tramp[8] = 0xe59ff000; /* ldr pc, [pc] */ \
++   *(unsigned int*) &__tramp[12] = __ctx; \
++   *(unsigned int*) &__tramp[16] = __fun; \
++   register unsigned long _beg __asm ("a1") = (unsigned long) (&__tramp[0]);	\
++   register unsigned long _end __asm ("a2") = (unsigned long) (&__tramp[19]);	\
++   register unsigned long _flg __asm ("a3") = 0;			\
++   __asm __volatile ("swi 0x9f0002		@ sys_cacheflush"	\
++	   		    : "=r" (_beg)				\
++	   		    : "0" (_beg), "r" (_end), "r" (_flg));	\
++ })
++
++
++/* the cif must already be prep'ed */
++
++ffi_status
++ffi_prep_closure (ffi_closure* closure,
++		  ffi_cif* cif,
++		  void (*fun)(ffi_cif*,void*,void**,void*),
++		  void *user_data)
++{
++  FFI_ASSERT (cif->abi == FFI_SYSV);
++
++  FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
++		       &ffi_closure_SYSV,  \
++		       (void*)closure);
++    
++  closure->cif  = cif;
++  closure->user_data = user_data;
++  closure->fun  = fun;
++
++  return FFI_OK;
++}
+diff -uprN src/libffi/src/arm.old/ffitarget.h src/libffi/src/arm/ffitarget.h
+--- src/libffi/src/arm.old/ffitarget.h	2003-10-21 20:07:50.000000000 +0100
++++ src/libffi/src/arm/ffitarget.h	2005-12-31 16:07:04.309912088 +0000
+@@ -40,7 +40,8 @@ typedef enum ffi_abi {
+ 
+ /* ---- Definitions for closures ----------------------------------------- */
+ 
+-#define FFI_CLOSURES 0
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 20
+ #define FFI_NATIVE_RAW_API 0
+ 
+ #endif
+diff -uprN src/libffi/src/arm.old/sysv.S src/libffi/src/arm/sysv.S
+--- src/libffi/src/arm.old/sysv.S	2004-10-27 16:10:22.000000000 +0100
++++ src/libffi/src/arm/sysv.S	2005-12-31 16:07:05.146784864 +0000
+@@ -207,3 +207,51 @@ LSYM(Lepilogue):
+ .ffi_call_SYSV_end:
+         .size    CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
+ 
++/*
++	unsigned int FFI_HIDDEN
++	ffi_closure_SYSV_inner (closure, respp, args)
++	     ffi_closure *closure;
++	     void **respp;
++  	     void *args;
++*/
++
++ARM_FUNC_START ffi_closure_SYSV
++	add	ip, sp, #16
++	stmfd	sp!, {ip, lr}
++	add	r2, sp, #8
++	sub	sp, sp, #16
++	str	sp, [sp, #8]
++	add	r1, sp, #8
++	bl	ffi_closure_SYSV_inner
++	cmp	r0, #FFI_TYPE_INT
++	beq	.Lretint
++	cmp	r0, #FFI_TYPE_FLOAT
++	beq	.Lretfloat
++	cmp	r0, #FFI_TYPE_DOUBLE
++	beq	.Lretdouble
++	cmp	r0, #FFI_TYPE_LONGDOUBLE
++	beq	.Lretlongdouble
++	cmp	r0, #FFI_TYPE_SINT64
++	beq	.Lretlonglong
++.Lclosure_epilogue:
++	add	sp, sp, #16
++	ldmfd	sp, {sp, pc}
++.Lretint:
++	ldr	r0, [sp]
++	b	.Lclosure_epilogue
++.Lretlonglong:
++	ldr	r0, [sp]
++	ldr	r1, [sp, #4]
++	b	.Lclosure_epilogue
++.Lretfloat:
++	ldfs	f0, [sp]
++	b	.Lclosure_epilogue
++.Lretdouble:
++	ldfd	f0, [sp]
++	b	.Lclosure_epilogue
++.Lretlongdouble:
++	ldfd	f0, [sp]
++	b	.Lclosure_epilogue
++.ffi_closure_SYSV_end:
++        .size    CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
++
--- gcc-4.1-4.1.2.orig/debian/patches/hurd-changes.dpatch
+++ gcc-4.1-4.1.2/debian/patches/hurd-changes.dpatch
@@ -0,0 +1,90 @@
+#! /bin/sh -e
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# DP: Traditional GNU systems don't have a /usr directory.  However, Debian
+# DP: systems do, and we support both having a /usr -> . symlink, and having a
+# DP: /usr directory like the other ports.  So this patch should NOT go
+# DP: upstream.
+# DP: 
+# DP: Define MAXPATHLEN and PATH_MAX.
+
+--- gcc/ada/adaint.c.orig	2005-11-15 14:52:31.000000000 +0100
++++ gcc/ada/adaint.c	2006-12-10 12:28:46.000000000 +0100
+@@ -272,6 +272,10 @@
+ #include <sys/param.h>
+ #endif
+ 
++#ifndef MAXPATHLEN
++#define MAXPATHLEN 4096
++#endif
++
+ #ifdef MAXPATHLEN
+ #define GNAT_MAX_PATH_LEN MAXPATHLEN
+ #else
+--- gcc/config/i386/gnu.h.orig	2004-09-08 02:17:19.000000000 +0200
++++ gcc/config/i386/gnu.h	2006-12-10 12:28:45.000000000 +0100
+@@ -17,7 +17,7 @@
+   while (0)
+ 
+ #undef CPP_SPEC
+-#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{bsd:-D_BSD_SOURCE}"
++#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{bsd:-D_BSD_SOURCE} %{pthread:-D_REENTRANT}"
+ 
+ #undef CC1_SPEC
+ #define CC1_SPEC "%(cc1_cpu)"
+--- gcc/config/gnu.h.orig	2004-07-05 21:49:20.000000000 +0200
++++ gcc/config/gnu.h	2006-12-10 12:28:45.000000000 +0100
+@@ -6,11 +6,12 @@
+ 
+ /* Default C library spec.  Use -lbsd-compat for gcc -bsd.  */
+ #undef LIB_SPEC
+-#define LIB_SPEC "%{bsd:-lbsd-compat} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
++#define LIB_SPEC "%{pthread:-lpthread} %{bsd:-lbsd-compat} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
+ 
+ /* Standard include directory.  In GNU, "/usr" is a four-letter word.  */
+ #undef STANDARD_INCLUDE_DIR
+-#define STANDARD_INCLUDE_DIR "/include"
++/* Overriden for Debian GNU/Hurd.  */
++#define STANDARD_INCLUDE_DIR "/usr/include"
+ 
+ /* The system headers under GNU are C++-aware.  */
+ #define NO_IMPLICIT_EXTERN_C
+--- gcc/config/t-gnu.orig	2004-01-10 07:40:24.000000000 +0100
++++ gcc/config/t-gnu	2006-12-10 12:28:45.000000000 +0100
+@@ -1,2 +1,2 @@
+ # In GNU, "/usr" is a four-letter word.
+-NATIVE_SYSTEM_HEADER_DIR = /include
++NATIVE_SYSTEM_HEADER_DIR = /usr/include
+--- gcc/tlink.c.orig	2005-06-25 04:02:01.000000000 +0200
++++ gcc/tlink.c	2006-12-10 12:28:45.000000000 +0100
+@@ -34,6 +34,10 @@
+ 
+ #define MAX_ITERATIONS 17
+ 
++#ifndef MAXPATHLEN
++#define MAXPATHLEN 4096
++#endif
++
+ /* Defined in the automatically-generated underscore.c.  */
+ extern int prepends_underscore;
+ 
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-reg-inc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-reg-inc.dpatch
@@ -0,0 +1,90 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: reinsert REG_INC notes after splitting an instruction
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+ gcc/emit-rtl.c |   40 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
+
+Index: gcc-4.1/gcc/emit-rtl.c
+===================================================================
+--- gcc-4.1.orig/gcc/emit-rtl.c
++++ gcc-4.1/gcc/emit-rtl.c
+@@ -3103,6 +3103,34 @@ prev_cc0_setter (rtx insn)
+ }
+ #endif
+ 
++#ifdef AUTO_INC_DEC
++static int
++find_auto_inc (rtx *xp, void *data)
++{
++  rtx x = *xp;
++  rtx reg = data;
++
++  if (GET_RTX_CLASS (GET_CODE (x)) != RTX_AUTOINC)
++    return 0;
++
++  switch (GET_CODE (x)) {
++  case PRE_DEC:
++  case PRE_INC:
++  case POST_DEC:
++  case POST_INC:
++  case PRE_MODIFY:
++  case POST_MODIFY:
++    if (rtx_equal_p (reg, XEXP (x, 0)))
++      return 1;
++    break;
++
++  default:
++    gcc_unreachable ();
++  }
++  return -1;
++}
++#endif
++
+ /* Increment the label uses for all labels present in rtx.  */
+ 
+ static void
+@@ -3268,6 +3296,18 @@ try_split (rtx pat, rtx trial, int last)
+ 	    }
+ 	  break;
+ 
++#ifdef AUTO_INC_DEC
++	case REG_INC:
++	  for (insn = insn_last; insn; insn = PREV_INSN (insn))
++	    {
++	      rtx reg = XEXP (note, 0);
++	      if (for_each_rtx (&PATTERN (insn), find_auto_inc, reg) > 0)
++		REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, reg,
++						      REG_NOTES (insn));
++	    }
++	  break;
++#endif
++
+ 	default:
+ 	  break;
+ 	}
--- gcc-4.1-4.1.2.orig/debian/patches/arm-pr28516.dpatch
+++ gcc-4.1-4.1.2/debian/patches/arm-pr28516.dpatch
@@ -0,0 +1,43 @@
+#! /bin/sh -e
+
+# DP: Fix PR28516 on ARM
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- trunk/gcc/config/arm/arm.c	2006/09/19 13:18:27	117055
++++ trunk/gcc/config/arm/arm.c	2006/09/19 13:19:24	117056
+@@ -15415,6 +15415,15 @@
+ 	  /* Move from sp to reg.  */
+ 	  asm_fprintf (asm_out_file, "\t.movsp %r\n", REGNO (e0));
+ 	}
++     else if (GET_CODE (e1) == PLUS
++	      && GET_CODE (XEXP (e1, 0)) == REG
++	      && REGNO (XEXP (e1, 0)) == SP_REGNUM
++	      && GET_CODE (XEXP (e1, 1)) == CONST_INT)
++	{
++	  /* Set reg to offset from sp.  */
++	  asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n",
++		       REGNO (e0), (int)INTVAL(XEXP (e1, 1)));
++	}
+       else
+ 	abort ();
+       break;
--- gcc-4.1-4.1.2.orig/debian/patches/gdc-libphobos-std-format.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gdc-libphobos-std-format.dpatch
@@ -0,0 +1,63 @@
+#! /bin/sh -e
+
+# gdc-libphobos-std-format.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Replace assert by FormatError on untested archs.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- gcc/d/phobos/std/format.d	2007-11-06 21:02:55.000000000 +0000
++++ gcc/d/phobos/std/format.d	2007-11-06 21:10:56.000000000 +0000
+@@ -962,13 +962,9 @@
+ 			// Structs are pass-by-reference in V4 ABI
+ 			s = tis.xtoString(va_arg!(void*)(argptr));
+ 		    }
+-		    else version(X86_64)
+-		    {
+-			throw new FormatError("cannot portably format a struct on this target");
+-		    }
+ 		    else
+ 		    {
+-			static assert(0, "unimplemented");
++			throw new FormatError("cannot portably format a struct on this target");
+ 		    }
+ 		}
+ 		else
+--- gcc/d/phobos2/std/format.d	2007-11-06 21:03:08.000000000 +0000
++++ gcc/d/phobos2/std/format.d	2007-11-06 21:11:30.000000000 +0000
+@@ -963,13 +963,9 @@
+ 			// Structs are pass-by-reference in V4 ABI
+ 			s = tis.xtoString(va_arg!(void*)(argptr));
+ 		    }
+-		    else version(X86_64)
+-		    {
+-			throw new FormatError("cannot portably format a struct on this target");
+-		    }
+ 		    else
+ 		    {
+-			static assert(0, "unimplemented");
++			throw new FormatError("cannot portably format a struct on this target");
+ 		    }
+ 		}
+ 		else
--- gcc-4.1-4.1.2.orig/debian/patches/libstdc++-doclink.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libstdc++-doclink.dpatch
@@ -0,0 +1,47 @@
+#! /bin/sh -e
+
+# DP: adjust hrefs to point to the local documentation
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- libstdc++-v3/docs/doxygen/mainpage.html~	2004-02-21 13:49:31.000000000 +0100
++++ libstdc++-v3/docs/doxygen/mainpage.html	2004-02-21 13:59:02.000000000 +0100
+@@ -30,8 +30,8 @@
+ <p>There are two types of documentation for libstdc++-v3.  One is the
+    distribution documentation, which can be read online at
+    <a href="http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html">http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html</a>
+-   or offline from docs/html/documentation.html in the library source
+-   directory.
++   or offline from
++   <a href="/usr/share/doc/gcc-4.1/libstdc++/html/documentation.html">/usr/share/doc/gcc-4.1/libstdc++/html/documentation.html</a>.
+ </p>
+ 
+ <p>The other type is the source documentation, of which this is the first page.
+@@ -78,7 +78,7 @@
+ 
+ <h2>License, Copyright, and Other Lawyerly Verbosity</h2>
+ <p>The libstdc++-v3 documentation is released under
+-   <a href="http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/license.html">
++   <a href="../17_intro/license.html">
+    these terms</a>.
+ </p>
+ <p>Part of the generated documentation involved comments and notes from
--- gcc-4.1-4.1.2.orig/debian/patches/kbsd-gnu-java.dpatch
+++ gcc-4.1-4.1.2/debian/patches/kbsd-gnu-java.dpatch
@@ -0,0 +1,300 @@
+#! /bin/sh -e
+
+# Description: java support for GNU/k*BSD 
+# Author: Robert Millan, Petr Salinger
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p2 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p2 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/configure gcj-4.1-4.1.0/src/boehm-gc/configure
+--- gcj-4.1-4.1.0/src/boehm-gc/configure	2006-02-28 09:39:11.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/configure	2006-05-12 08:34:57.000000000 +0200
+@@ -5434,6 +5423,32 @@
+ 
+ 	THREADLIBS="-lpthread -lrt"
+ 	;;
++      *-*-kfreebsd*-gnu)
++       cat >>confdefs.h <<\_ACEOF
++#define GC_FREEBSD_THREADS 1
++_ACEOF
++
++       INCLUDES="$INCLUDES -pthread"
++       THREADDLLIBS=-pthread
++       cat >>confdefs.h <<\_ACEOF
++#define _REENTRANT 1
++_ACEOF
++
++         if test "${enable_parallel_mark}" = yes; then
++         cat >>confdefs.h <<\_ACEOF
++#define PARALLEL_MARK 1
++_ACEOF
++
++       fi
++       cat >>confdefs.h <<\_ACEOF
++#define THREAD_LOCAL_ALLOC 1
++_ACEOF
++
++       cat >>confdefs.h <<\_ACEOF
++#define USE_COMPILER_TLS 1
++_ACEOF
++
++               ;;
+      *-*-freebsd*)
+ 	{ echo "$as_me:$LINENO: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&5
+ echo "$as_me: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&2;}
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/configure.ac gcj-4.1-4.1.0/src/boehm-gc/configure.ac
+--- gcj-4.1-4.1.0/src/boehm-gc/configure.ac	2006-02-07 02:05:55.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/configure.ac	2006-05-12 08:35:43.000000000 +0200
+@@ -150,6 +150,17 @@
+ 	AC_DEFINE(THREAD_LOCAL_ALLOC,1)
+ 	THREADLIBS="-lpthread -lrt"
+ 	;;
++      *-*-kfreebsd*-gnu)
++       AC_DEFINE(GC_FREEBSD_THREADS)
++       INCLUDES="$INCLUDES -pthread"
++       THREADDLLIBS=-pthread
++       AC_DEFINE(_REENTRANT)
++         if test "${enable_parallel_mark}" = yes; then
++         AC_DEFINE(PARALLEL_MARK)
++       fi
++       AC_DEFINE(THREAD_LOCAL_ALLOC)
++       AC_DEFINE(USE_COMPILER_TLS, 1,[use tls for boehm])
++               ;;
+      *-*-freebsd*)
+ 	AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
+ 	AC_DEFINE(GC_FREEBSD_THREADS,1,[support FreeBSD threads])
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/dyn_load.c gcj-4.1-4.1.0/src/boehm-gc/dyn_load.c
+--- gcj-4.1-4.1.0/src/boehm-gc/dyn_load.c	2005-02-26 16:40:07.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/dyn_load.c	2006-05-12 08:33:17.000000000 +0200
+@@ -26,7 +26,7 @@
+  * None of this is safe with dlclose and incremental collection.
+  * But then not much of anything is safe in the presence of dlclose.
+  */
+-#if defined(__linux__) && !defined(_GNU_SOURCE)
++#if (defined(__linux__) || defined(__GLIBC__)) && !defined(_GNU_SOURCE)
+     /* Can't test LINUX, since this must be define before other includes */
+ #   define _GNU_SOURCE
+ #endif
+@@ -373,7 +373,7 @@
+ /* For glibc 2.2.4+.  Unfortunately, it doesn't work for older	*/
+ /* versions.  Thanks to Jakub Jelinek for most of the code.	*/
+ 
+-# if defined(LINUX) /* Are others OK here, too? */ \
++# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \
+      && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
+          || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) 
+ 
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/include/gc.h gcj-4.1-4.1.0/src/boehm-gc/include/gc.h
+--- gcj-4.1-4.1.0/src/boehm-gc/include/gc.h	2005-01-02 04:35:57.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/include/gc.h	2006-05-12 08:33:17.000000000 +0200
+@@ -497,7 +497,7 @@
+ #   define GC_RETURN_ADDR (GC_word)__return_address
+ #endif
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__GLIBC__)
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+      && !defined(__ia64__)
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/include/gc_config.h.in gcj-4.1-4.1.0/src/boehm-gc/include/gc_config.h.in
+--- gcj-4.1-4.1.0/src/boehm-gc/include/gc_config.h.in	2006-02-07 02:05:55.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/include/gc_config.h.in	2006-05-12 08:35:50.000000000 +0200
+@@ -148,6 +148,9 @@
+ /* define GC_local_malloc() & GC_local_malloc_atomic() */
+ #undef THREAD_LOCAL_ALLOC
+ 
++/* use tls for boehm */
++#undef USE_COMPILER_TLS
++
+ /* use MMAP instead of sbrk to get new memory */
+ #undef USE_MMAP
+ 
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/include/private/gcconfig.h gcj-4.1-4.1.0/src/boehm-gc/include/private/gcconfig.h
+--- gcj-4.1-4.1.0/src/boehm-gc/include/private/gcconfig.h	2005-09-06 16:22:01.000000000 +0200
++++ gcj-4.1-4.1.0/src/boehm-gc/include/private/gcconfig.h	2006-05-12 08:34:42.000000000 +0200
+@@ -55,7 +55,7 @@
+ # endif
+ 
+ /* And one for FreeBSD: */
+-# if defined(__FreeBSD__) && !defined(FREEBSD)
++# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ #    define FREEBSD
+ # endif
+ 
+@@ -334,6 +334,10 @@
+ #   define I386
+ #   define mach_type_known
+ # endif
++# if defined(FREEBSD) && defined(__x86_64__)
++#   define X86_64
++#   define mach_type_known
++# endif
+ # if defined(__NetBSD__) && (defined(i386) || defined(__i386__))
+ #   define I386
+ #   define mach_type_known
+@@ -1223,8 +1223,15 @@
+ #	ifndef GC_FREEBSD_THREADS
+ #	    define MPROTECT_VDB
+ #	endif
+-#	define SIG_SUSPEND SIGUSR1
+-#	define SIG_THR_RESTART SIGUSR2
++#	ifdef __GLIBC__
++#	    define SIG_SUSPEND		(32+6)
++#	    define SIG_THR_RESTART	(32+5)
++	    extern int _end[];
++#	    define DATAEND (_end)
++#	else
++#	    define SIG_SUSPEND SIGUSR1
++#	    define SIG_THR_RESTART SIGUSR2
++#	endif
+ #	define FREEBSD_STACKBOTTOM
+ #	ifdef __ELF__
+ #	    define DYNAMIC_LOADING
+@@ -1923,6 +1930,28 @@
+ #	    define PREFETCH_FOR_WRITE(x) __builtin_prefetch((x), 1)
+ #	endif
+ #   endif
++#   ifdef FREEBSD
++#	define OS_TYPE "FREEBSD"
++#	ifndef GC_FREEBSD_THREADS
++#	    define MPROTECT_VDB
++#	endif
++#	ifdef __GLIBC__
++#	    define SIG_SUSPEND		(32+6)
++#	    define SIG_THR_RESTART	(32+5)
++	    extern int _end[];
++#	    define DATAEND (_end)
++#	else
++#	    define SIG_SUSPEND SIGUSR1
++#	    define SIG_THR_RESTART SIGUSR2
++#	endif
++#	define FREEBSD_STACKBOTTOM
++#	ifdef __ELF__
++#	    define DYNAMIC_LOADING
++#	endif
++	extern char etext[];
++	extern char * GC_FreeBSDGetDataStart();
++#	define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext)
++#   endif
+ #   ifdef NETBSD
+ #	define OS_TYPE "NETBSD"
+ #	ifdef __ELF__
+@@ -1994,7 +2023,7 @@
+ #   define SUNOS5SIGS
+ # endif
+ 
+-# if defined(FREEBSD) && (__FreeBSD__ >= 4)
++# if defined(FREEBSD) && ((__FreeBSD__ >= 4) || (__FreeBSD_kernel__ >= 4))
+ #   define SUNOS5SIGS
+ # endif
+ 
+@@ -2057,7 +2086,7 @@
+ #   define CACHE_LINE_SIZE 32	/* Wild guess	*/
+ # endif
+ 
+-# ifdef LINUX
++# if defined(LINUX) || defined(__GLIBC__)
+ #   define REGISTER_LIBRARIES_EARLY
+     /* We sometimes use dl_iterate_phdr, which may acquire an internal	*/
+     /* lock.  This isn't safe after the world has stopped.  So we must	*/
+@@ -2137,7 +2166,7 @@
+ #if defined(SPARC)
+ # define CAN_SAVE_CALL_ARGS
+ #endif
+-#if (defined(I386) || defined(X86_64)) && defined(LINUX)
++#if (defined(I386) || defined(X86_64)) && (defined(LINUX) || defined(__GLIBC__))
+ 	    /* SAVE_CALL_CHAIN is supported if the code is compiled to save	*/
+ 	    /* frame pointers by default, i.e. no -fomit-frame-pointer flag.	*/
+ # define CAN_SAVE_CALL_ARGS
+diff -ur gcj-4.1-4.1.0/src/libjava/libltdl/acinclude.m4 gcj-4.1-4.1.0/src/libjava/libltdl/acinclude.m4
+--- gcj-4.1-4.1.0/src/libjava/libltdl/acinclude.m4	2006-05-12 13:35:07.000000000 +0200
++++ gcj-4.1-4.1.0/src/libjava/libltdl/acinclude.m4	2006-05-12 11:07:03.000000000 +0200
+@@ -1413,7 +1413,7 @@
+   ;;
+ 
+ # This must be Linux ELF.
+-linux*)
++linux*|k*bsd*-gnu)
+   version_type=linux
+   need_lib_prefix=no
+   need_version=no
+diff -ur gcj-4.1-4.1.0/src/libjava/libltdl/configure gcj-4.1-4.1.0/src/libjava/libltdl/configure
+--- gcj-4.1-4.1.0/src/libjava/libltdl/configure	2006-05-12 13:35:21.000000000 +0200
++++ gcj-4.1-4.1.0/src/libjava/libltdl/configure	2006-05-12 11:07:15.000000000 +0200
+@@ -8380,7 +8380,7 @@
+   ;;
+ 
+ # This must be Linux ELF.
+-linux*)
++linux*|k*bsd*-gnu)
+   version_type=linux
+   need_lib_prefix=no
+   need_version=no
+@@ -12021,7 +12021,7 @@
+   ;;
+ 
+ # This must be Linux ELF.
+-linux*)
++linux*|k*bsd*-gnu)
+   version_type=linux
+   need_lib_prefix=no
+   need_version=no
+@@ -15097,7 +15097,7 @@
+   ;;
+ 
+ # This must be Linux ELF.
+-linux*)
++linux*|k*bsd*-gnu)
+   version_type=linux
+   need_lib_prefix=no
+   need_version=no
+@@ -17380,7 +17380,7 @@
+   ;;
+ 
+ # This must be Linux ELF.
+-linux*)
++linux*|k*bsd*-gnu)
+   version_type=linux
+   need_lib_prefix=no
+   need_version=no
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/os_dep.c.orig gcj-4.1-4.1.0/src/boehm-gc/os_dep.c
+--- gcj-4.1-4.1.0/src/boehm-gc/os_dep.c.orig	2006-02-28 09:39:11.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/os_dep.c	2006-05-12 08:34:57.000000000 +0200
+@@ -84,7 +84,7 @@
+ #   define NEED_FIND_LIMIT
+ # endif
+ 
+-#if defined(FREEBSD) && (defined(I386) || defined(powerpc) || defined(__powerpc__))
++#if defined(FREEBSD) && (defined(I386) || defined(X86_64) || defined(powerpc) || defined(__powerpc__))
+ #  include <machine/trap.h>
+ #  if !defined(PCR)
+ #    define NEED_FIND_LIMIT
+@@ -1392,7 +1392,7 @@
+ }
+ # endif
+ 
+-# if defined(FREEBSD) && (defined(I386) || defined(powerpc) || defined(__powerpc__)) && !defined(PCR)
++# if defined(FREEBSD) && (defined(I386) || defined(X86_64) || defined(powerpc) || defined(__powerpc__)) && !defined(PCR)
+ /* Its unclear whether this should be identical to the above, or 	*/
+ /* whether it should apply to non-X86 architectures.			*/
+ /* For now we don't assume that there is always an empty page after	*/
--- gcc-4.1-4.1.2.orig/debian/patches/gdc-driver-defaultlib.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gdc-driver-defaultlib.dpatch
@@ -0,0 +1,111 @@
+#! /bin/sh -e
+
+# gdc-driver-defaultlib.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Add -defaultlib -debuglib switches to d-spec.c.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/d/d-spec.c	2008-02-03 20:21:18.000000000 +0000
++++ gcc/d/d-spec.c	2008-02-03 20:41:36.000000000 +0000
+@@ -74,6 +74,9 @@
+     /* If nonzero, the user gave us the `-v' flag.  */
+     int saw_verbose_flag = 0;
+ 
++    /* Used by -debuglib */
++    int saw_debug_flag = 0;
++
+     /* This is a tristate:
+        -1 means we should not link in libstdc++
+        0  means we should link in libstdc++ if it is needed
+@@ -123,6 +126,9 @@
+     /* The argument list.  */
+     const char *const *argv;
+ 
++    const char* defaultlib = NULL;
++    const char* debuglib = NULL;
++
+     /* The number of libraries added in.  */
+     int added_libraries;
+ 
+@@ -168,6 +174,32 @@
+ 			    phobos = 0;
+ 			    args[i] |= REMOVE_ARG;
+ 			}
++		    else if (strcmp (argv[i], "-defaultlib") == 0)
++		    	{
++			    added = 1;
++			    phobos = 0;
++			    args[i] |= REMOVE_ARG;
++			    if(defaultlib != NULL)
++			        free(defaultlib);
++			    defaultlib = xmalloc(sizeof(char) * (strlen(argv[++i]) + 3));
++			    strcpy(defaultlib, "-l");
++			    strcat(defaultlib, argv[i]);
++			    args[i] |= REMOVE_ARG;
++			    /* printf("XXX: arg: -defaultlib: %s\n", defaultlib); */
++			}
++		    else if (strcmp (argv[i], "-debuglib") == 0)
++		    	{
++			    added = 1;
++			    phobos = 0;
++			    args[i] |= REMOVE_ARG;
++			    if(debuglib != NULL)
++			        free(debuglib);
++			    debuglib = xmalloc(sizeof(char) * (strlen(argv[++i]) + 3));
++			    strcpy(debuglib, "-l");
++			    strcat(debuglib, argv[i]);
++			    args[i] |= REMOVE_ARG;
++			    /* printf("XXX: arg: -debuglib: %s\n", debuglib); */
++			}
+ 		    else if (strcmp (argv[i], "-lm") == 0
+ 			|| strcmp (argv[i], "-lmath") == 0
+ 			|| strcmp (argv[i], MATH_LIBRARY) == 0
+@@ -182,6 +214,8 @@
+ 			saw_profile_flag++;
+ 		    else if (strcmp (argv[i], "-v") == 0)
+ 			saw_verbose_flag = 1;
++		    else if (strcmp (argv[i], "-g") == 0)
++			saw_debug_flag = 1;
+ 		    else if (strncmp (argv[i], "-x", 2) == 0)
+ 			{
+ 			    if (library == 0)
+@@ -367,6 +401,18 @@
+ 	    added_libraries++;
+ 	    need_pthreads = 1;
+ 	}
++    else if (saw_debug_flag && debuglib)
++        {
++	    arglist[j++] = debuglib;
++	    added_libraries++;
++	    /* printf("XXX: debuglib: %s\n", arglist[j-1]); */
++	}
++    else if (defaultlib)
++    	{
++	    arglist[j++] = defaultlib;
++	    added_libraries++;
++	    /* printf("XXX: defaultlib: %s\n", arglist[j-1]); */
++	}
+     if (saw_math)
+ 	arglist[j++] = saw_math;
+     else if (library > 0 && need_math)
--- gcc-4.1-4.1.2.orig/debian/patches/hurd-profiling.dpatch
+++ gcc-4.1-4.1.2/debian/patches/hurd-profiling.dpatch
@@ -0,0 +1,38 @@
+#! /bin/sh -e
+
+# DP: Fix profiling on hurd-i386.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/config/i386/gnu.h	2007-07-14 17:02:14.210000000 -0400
++++ gcc/config/i386/gnu.h	2007-07-14 13:01:43.970000000 -0400
+@@ -34,8 +34,8 @@
+ #define STARTFILE_SPEC \
+   "%{!shared: \
+      %{!static: \
+-       %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \
+-     %{static:crt0.o%s}} \
++       %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt1.o%s}}} \
++     %{static: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}}} \
+    crti.o%s %{static:crtbeginT.o%s}\
+    %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
+ 
--- gcc-4.1-4.1.2.orig/debian/patches/ada-libgnatprj.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ada-libgnatprj.dpatch
@@ -0,0 +1,1318 @@
+#! /bin/sh -e
+
+# DP: - Introduce a new shared library named libgnatprj, containing
+# DP:   the GNAT project file manager licensed under the pure GPL, for
+# DP:   use in GNAT tools, GLADE and GPS.  Link the GNAT tools against
+# DP:   this new library.
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+# !!! Must be applied after ada-libgnatvsn.dpatch
+
+dir=./
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	cd ${dir} && autoconf2.13
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+	rm -f ${dir}configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- configure.in~
++++ configure.in	2006-04-18 19:04:27.000000000 +0200
+@@ -123,7 +123,7 @@
+ 
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libada libgnatvsn"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libada libgnatvsn libgnatprj"
+ 
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -152,7 +152,8 @@
+ 		target-libffi \
+ 		target-libobjc \
+ 		target-libada \
+-		target-libgnatvsn"
++		target-libgnatvsn \
++		target-libgnatprj"
+ 
+ # these tools are built using the target libraries, and are intended to
+ # run only in the target environment
+@@ -230,7 +231,7 @@
+ 
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn"
++cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn target-libgnatprj"
+ 
+ case $is_cross_compiler in
+   no) skipdirs="${skipdirs} ${cross_only}" ;;
+@@ -304,7 +305,7 @@
+ ENABLE_LIBADA=$enableval,
+ ENABLE_LIBADA=yes)
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+-  noconfigdirs="$noconfigdirs target-libada"
++  noconfigdirs="$noconfigdirs target-libada target-libgnatvsn target-libgnatprj"
+   noconfigdirs="$noconfigdirs gnattools"
+ fi
+ 
+--- gcc/ada/config-lang.in~
++++ gcc/ada/config-lang.in  2006-04-26 08:51:15.000000000 +0000
+@@ -38,8 +38,8 @@
+ 
+ outputs=ada/Makefile
+ 
+-target_libs="target-libada target-libgnatvsn"
+-lang_dirs="libada libgnatvsn gnattools"
++target_libs="target-libada target-libgnatvsn target-libgnatprj"
++lang_dirs="libada libgnatvsn libgnatprj gnattools"
+ 
+ # Ada will not work until the front end starts emitting GIMPLE trees.
+ build_by_default=no
+--- gnattools/Makefile.in~
++++ gnattools/Makefile.in	2006-04-19 08:31:03.000000000 +0200
+@@ -35,13 +35,13 @@
+ target_noncanonical=@target_noncanonical@
+ 
+ CFLAGS=-g -O2 -Wall
+-INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
+ ADA_CFLAGS=-g -O2 -gnatn
+ ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I@srcdir@/../gcc/ada
+-ADA_INCLUDES += -aO../libgnatvsn
++ADA_INCLUDES += -aO../libgnatvsn -aO../libgnatprj
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+               @srcdir@/../gcc/ada/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+-ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION) -L../libgnatvsn -lgnatvsn
++ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION) -L../libgnatvsn -lgnatvsn \
++-L../libgnatprj -lgnatprj
+ 
+ # We will use the just-built compiler to compile and link everything.
+ GCC=../gcc/xgcc -B../gcc/
+@@ -66,76 +66,11 @@
+ 
+ # Since we don't have gnatmake, we must specify the full list of
+ # object files necessary to build gnatmake and gnatlink.
+-# TODO: remove from these lists the objects that are part of
+-# libgnatprj.
+-GNATLINK_OBJS = \
+-ali.o \
+-butil.o \
+-fmap.o \
+-gnatlink.o \
+-indepsw.o \
+-osint.o \
+-prefix.o \
+-rident.o \
+-sdefault.o \
+-stylesw.o \
+-switch.o \
+-validsw.o
+-
+-GNATMAKE_OBJS = \
+-ali-util.o \
+-ali.o \
+-binderr.o \
+-butil.o \
+-err_vars.o \
+-erroutc.o \
+-errutil.o \
+-fmap.o \
+-fname-sf.o \
+-fname-uf.o \
+-gnatmake.o \
+-make.o \
+-makeusg.o \
+-makeutl.o \
+-mlib-fil.o \
+-mlib-prj.o \
+-mlib-tgt.o \
+-mlib-utl.o \
+-mlib.o \
+-osint-m.o \
+-osint.o \
+-prefix.o \
+-prj-attr-pm.o \
+-prj-attr.o \
+-prj-com.o \
+-prj-dect.o \
+-prj-env.o \
+-prj-err.o \
+-prj-ext.o \
+-prj-nmsc.o \
+-prj-pars.o \
+-prj-part.o \
+-prj-proc.o \
+-prj-strt.o \
+-prj-tree.o \
+-prj-util.o \
+-prj.o \
+-rident.o \
+-scng.o \
+-sdefault.o \
+-sfn_scan.o \
+-sinput-c.o \
+-sinput-p.o \
+-styleg.o \
+-stylesw.o \
+-switch-m.o \
+-switch.o \
+-targparm.o \
+-tempdir.o \
+-usage.o \
+-validsw.o \
+-$(EXTRA_GNATMAKE_OBJS)
++GNATLINK_OBJS = gnatlink.o indepsw.o validsw.o
+ 
++GNATMAKE_OBJS = fname-sf.o fname-uf.o gnatmake.o make.o makeusg.o makeutl.o \
++mlib-prj.o osint-m.o usage.o validsw.o \
++$(EXTRA_GNATMAKE_OBJS)
+ 
+ # Makefile targets
+ # ----------------
+@@ -149,7 +85,6 @@
+ # accessed using the vpath directive.
+ 
+ stamp-gnattools-sources:
+-	$(LN_S) ../gcc/ada/sdefault.adb .
+ 	$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+ 	          rm -f $(word 1,$(subst <, ,$(PAIR)));\
+ 	          $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
+@@ -168,19 +103,16 @@
+ vpath %.adb .:@srcdir@/../gcc/ada
+ vpath %.ads @srcdir@/../gcc/ada
+ 
+-# Because the just-built gcc is a host tool like us, we can use some
+-# of its object files, e.g. prefix.o.
+-vpath prefix.o ../gcc
+-
+ # gnatlink
+ 
+-gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
++gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o
+ 	$(GCC) -o $@ $^ \
++	   ../libgnatprj/libgnatprj.a \
+ 	   ../libgnatvsn/libgnatvsn.a \
+ 	   ../gcc/ada/rts/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+-gnatlink: $(GNATLINK_OBJS) b_gnatl.o link.o
++gnatlink: $(GNATLINK_OBJS) b_gnatl.o
+ 	$(GCC) -o $@ $^ $(ADA_LIBS) ../libiberty/libiberty.a
+ 
+ b_gnatl.o: b_gnatl.c adaint.h
+@@ -191,13 +123,14 @@
+ 
+ # gnatmake
+ 
+-gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
++gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o
+ 	$(GCC) -o $@ $(ADA_CFLAGS) $^ \
++	   ../libgnatprj/libgnatprj.a \
+ 	   ../libgnatvsn/libgnatvsn.a \
+ 	   ../gcc/ada/rts/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+-gnatmake: $(GNATMAKE_OBJS) b_gnatm.o link.o
++gnatmake: $(GNATMAKE_OBJS) b_gnatm.o
+ 	$(GCC) -o $@ $(ADA_CFLAGS) $^ $(ADA_LIBS) ../libiberty/libiberty.a
+ 
+ b_gnatm.o: b_gnatm.c adaint.h
+@@ -207,7 +140,8 @@
+ 	../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
+ 
+ # Other tools
+-gnatchop gnatkr:
++gnatbind gnatchop gnatclean gnatcmd gnatfind gnatkr gnatls gnatname gnatprep \
++gnatxref gprmake:
+ 	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ 	   --GCC="$(GCC)" \
+ 	   --GNATBIND=../gcc/gnatbind
+@@ -218,17 +152,7 @@
+ gnat: gnatcmd
+ 	cp -lp $< $@
+ 
+-gnatbind gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref gprmake: \
+-link.o prefix.o
+-	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+-	   --GCC="$(GCC)" \
+-	   --GNATBIND=../gcc/gnatbind
+-	./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
+-	   ../libiberty/libiberty.a \
+-	   --GCC="$(GCC) $(ADA_INCLUDES)"
+-	strip $@
+-
+-gnatbl: gnatbl.c link.o prefix.o
++gnatbl: gnatbl.c
+ 	$(GCC) -o $@ $< $(CFLAGS) \
+ 	   -I../gcc -I@srcdir@/../gcc/config -I@srcdir@/../gcc \
+ 	   -I@srcdir@/../include \
+@@ -236,18 +160,12 @@
+ 	   $(ADA_LIBS) ../libiberty/libiberty.a
+ 	strip $@
+ 
+-# Force compiling sdefault.adb, not .ads, to produce sdefault.o
+-sdefault.o: sdefault.adb
+-
+ %.o: %.adb
+ 	$(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+ 
+ %.o: %.ads
+ 	$(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+ 
+-%.o: %.c
+-	$(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+-
+ # Other
+ # -----
+ 
+--- libgnatprj/configure~
++++ libgnatprj/configure	2006-04-19 07:54:53.000000000 +0200
+@@ -0,0 +1,34 @@
++#!/bin/sh
++
++# Minimal configure script for libgnatprj.  We're only interested in
++# a few parameters.
++
++for arg in $*; do
++    case ${arg} in
++	--build=*)
++	    build=`expr ${arg} : '--build=\(.\+\)'`;;
++	--host=*)
++	    host=`expr ${arg} : '--host=\(.\+\)'`;;
++	--target=*)
++	    target=`expr ${arg} : '--target=\(.\+\)'`;;
++	--prefix=*)
++	    prefix=`expr ${arg} : '--prefix=\(.\+\)'`;;
++	--srcdir=*)
++	    srcdir=`expr ${arg} : '--srcdir=\(.\+\)'`;;
++	*)
++	    echo "Warning: ignoring option: ${arg}"
++    esac
++done
++
++echo "build: ${build}" | tee config.log
++echo "host: ${host}" | tee -a config.log
++echo "target: ${target}" | tee -a config.log
++echo "prefix: ${prefix}" | tee -a config.log
++echo "srcdir: ${srcdir}" | tee -a config.log
++
++echo "Creating Makefile..." | tee -a config.log
++sed -e "s,@build@,${build},g" \
++    -e "s,@host@,${host},g" \
++    -e "s,@target@,${target},g" \
++    -e "s,@prefix@,${prefix},g" \
++    -e "s,@srcdir@,${srcdir},g" < ${srcdir}/Makefile.in > Makefile
+--- libgnatprj/Makefile.in~
++++ libgnatprj/Makefile.in	2006-04-19 19:28:33.000000000 +0200
+@@ -0,0 +1,177 @@
++# Makefile for libgnatprj.
++#   Copyright (c) 2006 Ludovic Brenta <ludovic@ludovic-brenta.org>
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++# 
++# 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.  See the
++# GNU General Public License for more details.
++# 
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++# Default target; must be first.
++all: libgnatprj
++
++.SUFFIXES:
++
++CPUS := $(shell getconf _NPROCESSORS_ONLN)
++LIB_VERSION := $(strip $(shell grep ' Library_Version :' \
++                 @srcdir@/../gcc/ada/gnatvsn.ads | \
++	         sed -e 's/.*"\(.*\)".*/\1/'))
++GCC:=../gcc/xgcc -B../gcc/
++LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++CFLAGS := -g -O2
++ADAFLAGS := -g -O2 -gnatn
++BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
++DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
++DATESTAMP := $(shell cat @srcdir@/../gcc/DATESTAMP)
++
++ifneq (@build@,@host@)
++   CFLAGS += -b @host@
++endif
++
++.PHONY: libgnatprj install
++libgnatprj: libgnatprj.so.$(LIB_VERSION) libgnatprj.a
++
++# Here we list one file per Ada unit: the body file if the unit has a
++# body, the spec file otherwise.
++PRJ_SOURCES := ali.adb ali-util.adb butil.adb binderr.adb errout.adb \
++erroutc.adb errutil.adb err_vars.ads fmap.adb impunit.adb lib-util.adb \
++mlib.adb mlib-fil.adb mlib-tgt.adb mlib-utl.adb osint.adb osint-c.adb \
++prj.adb prj-attr.adb prj-attr-pm.adb prj-com.ads prj-dect.adb prj-env.adb \
++prj-err.adb prj-ext.adb prj-nmsc.adb prj-pars.adb prj-part.adb prj-pp.adb \
++prj-proc.adb prj-strt.adb prj-tree.adb prj-util.adb rident.ads scng.adb \
++sdefault.adb sfn_scan.adb sinfo-cn.adb sinput-c.adb sinput-p.adb style.ads \
++styleg.adb styleg-c.adb stylesw.adb switch.adb switch-m.adb targparm.adb \
++tempdir.adb
++
++OBJECTS := $(patsubst %.ads,%.o,$(PRJ_SOURCES:.adb=.o))
++
++# Add some object files compiled from C sources.  prefix.o requires
++# some objects from libiberty.
++OBJECTS += concat.o link.o prefix.o xexit.o xmalloc.o xstrdup.o
++
++INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
++
++vpath %.c @srcdir@/../gcc/ada
++vpath %.ads @srcdir@/../gcc/ada
++vpath %.adb @srcdir@/../gcc/ada:../gcc/ada
++
++libgnatprj.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
++	: # Make libgnatprj.so
++	$(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
++	   -L../gcc/ada/rts -lgnat-$(LIB_VERSION) \
++	   -L../libgnatvsn -lgnatvsn
++	ln -s libgnatprj.so.$(LIB_VERSION) libgnatprj.so
++	chmod a=r obj-shared/*.ali
++# Make the .ali files, but not the .o files, visible to the gnat tools.
++	cp -lp obj-shared/*.ali .
++
++$(addprefix obj-shared/,$(OBJECTS)): | obj-shared
++
++obj-shared/mlib-tgt.o: mlib-tgt-linux.adb
++	-ln -s $< mlib-tgt.adb
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(INCLUDES) \
++	   mlib-tgt.adb -o $@
++
++obj-shared/%.o: %.adb
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-shared/%.o: %.ads
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-shared/%.o: %.c
++	$(GCC) -c -fPIC $(CFLAGS) $(INCLUDES) $< -o $@
++
++obj-shared/sdefault.o: sdefault.adb
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) -I@srcdir@/../gcc/ada \
++	   $< -o $@
++
++obj-shared/prefix.o: @srcdir@/../gcc/prefix.c
++	$(GCC) -c -fPIC $(CFLAGS) -DPREFIX=\"@prefix@\" -DBASEVER=\"$(BASEVER)\" \
++	   -I@srcdir@/../gcc -I@srcdir@/../include -I../gcc -I../libiberty \
++	   $< -o $@
++
++obj-shared/%.o: @srcdir@/../libiberty/%.c
++	$(GCC) -c -fPIC $(CFLAGS) \
++	   -I@srcdir@/../libiberty -I@srcdir@/../include $< -o $@
++
++obj-shared:
++	-mkdir $@
++
++libgnatprj.a: $(addprefix obj-static/,$(OBJECTS))
++	: # Make libgnatprj.a
++	ar rc $@ $^
++	ranlib $@
++
++$(addprefix obj-static/,$(OBJECTS)): | obj-static
++
++obj-static/mlib-tgt.o: mlib-tgt-linux.adb
++	-ln -s $< mlib-tgt.adb
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(INCLUDES) \
++	   mlib-tgt.adb -o $@
++
++obj-static/%.o: %.adb
++	$(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-static/%.o: %.ads
++	$(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-static/%.o: %.c
++	$(GCC) -c $(CFLAGS) $(INCLUDES) $< -o $@
++
++obj-static/sdefault.o: sdefault.adb
++	$(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) -I@srcdir@/../gcc/ada \
++	   $< -o $@
++
++obj-static/prefix.o: @srcdir@/../gcc/prefix.c
++	$(GCC) -c $(CFLAGS) -DPREFIX=\"@prefix@\" -DBASEVER=\"$(BASEVER)\" \
++	   -I@srcdir@/../gcc -I@srcdir@/../include -I../gcc -I../libiberty \
++	   $< -o $@
++
++obj-static/%.o: @srcdir@/../libiberty/%.c
++	$(GCC) -c -fPIC $(CFLAGS) \
++	   -I@srcdir@/../libiberty -I@srcdir@/../include $< -o $@
++
++obj-static:
++	-mkdir $@
++
++# Generate a list of source files (.ads and .adb) to install.  Almost
++# all of them are in src/gcc/ada, but some are generated during build
++# and are in build/gcc/ada.
++BODIES := $(filter %.adb,$(PRJ_SOURCES))
++SPECS := $(filter %.ads,$(PRJ_SOURCES))
++SPECS += $(patsubst %.adb,%.ads,$(BODIES))
++GENERATED_SOURCES := sdefault.adb
++
++# Filter out the mlib-tgt.adb from the source directory...
++SOURCES := $(filter-out $(GENERATED_SOURCES) mlib-tgt.adb, \
++                        $(SPECS) $(BODIES) $(PRJ_SEPARATES))
++# ... and add our symlink to mlib-tgt-linux.adb instead.
++SOURCES_TO_INSTALL := \
++$(addprefix @srcdir@/../gcc/ada/,$(SOURCES)) \
++$(addprefix ../gcc/ada/,$(GENERATED_SOURCES)) \
++mlib-tgt.adb
++
++install: libgnatprj
++	$(INSTALL_DATA) libgnatprj.a $(DESTDIR)$(prefix)/lib
++	$(INSTALL_DATA) libgnatprj.so.$(LIB_VERSION) $(DESTDIR)$(prefix)/lib
++	cd $(DESTDIR)$(prefix)/lib; \
++	ln -sf libgnatprj.so.$(LIB_VERSION) libgnatprj.so
++	mkdir -p $(DESTDIR)$(prefix)/share/ada/adainclude/gnatprj
++	$(INSTALL_DATA) $(SOURCES_TO_INSTALL) \
++	   $(DESTDIR)$(prefix)/share/ada/adainclude/gnatprj
++	mkdir -p $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj
++	$(INSTALL) -m 0444 obj-shared/*.ali \
++	   $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj
++	chmod a=r $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj/*.ali
++
++.PHONY: clean
++clean:
++	rm -rf *.ali obj-static obj-shared libgnatprj*
+--- Makefile.def~
++++ Makefile.def	2006-04-18 19:05:57.000000000 +0200
+@@ -125,6 +125,13 @@
+ 		missing= TAGS;
+ 		missing= install-info;
+ 		missing= installcheck; };
++host_modules= { module= libgnatprj; no_check=true;
++		missing= info;
++		missing= dvi;
++		missing= html;
++		missing= TAGS;
++		missing= install-info;
++		missing= installcheck; };
+ host_modules= { module= gnattools; no_check=true;
+ 		missing= info;
+ 		missing= dvi;
+@@ -169,6 +176,13 @@
+ 		   missing= TAGS;
+ 		   missing= install-info;
+ 		   missing= installcheck; };
++target_modules = { module= libgnatprj; no_check=true;
++		   missing= info;
++		   missing= dvi;
++		   missing= html;
++		   missing= TAGS;
++		   missing= install-info;
++		   missing= installcheck; };
+ 
+ // These are (some of) the make targets to be done in each subdirectory.
+ // Not all; these are the ones which don't have special options.
+@@ -307,7 +321,10 @@
+ 
+ dependencies = { module=all-gnattools; on=all-libada; };
+ dependencies = { module=all-gnattools; on=all-libgnatvsn; };
++dependencies = { module=all-gnattools; on=all-libgnatprj; };
+ dependencies = { module=all-libgnatvsn; on=all-libada; };
++dependencies = { module=all-libgnatprj; on=all-libada; };
++dependencies = { module=all-libgnatprj; on=all-libgnatvsn; };
+ 
+ // Host modules specific to gdb.
+ dependencies = { module=configure-gdb; on=configure-sim; };
+--- Makefile.in~
++++ Makefile.in	2006-04-18 19:06:19.000000000 +0200
+@@ -607,6 +607,7 @@
+     maybe-configure-utils \
+     maybe-configure-libada \
+     maybe-configure-libgnatvsn \
++    maybe-configure-libgnatprj \
+     maybe-configure-gnattools
+ .PHONY: configure-target
+ configure-target:  \
+@@ -629,7 +630,8 @@
+     maybe-configure-target-qthreads \
+     maybe-configure-target-rda \
+     maybe-configure-target-libada \
+-    maybe-configure-target-libgnatvsn
++    maybe-configure-target-libgnatvsn \
++    maybe-configure-target-libgnatprj
+ 
+ # The target built for a native non-bootstrap build.
+ .PHONY: all
+@@ -729,6 +731,7 @@
+     maybe-all-utils \
+     maybe-all-libada \
+     maybe-all-libgnatvsn \
++    maybe-all-libgnatprj \
+     maybe-all-gnattools
+ .PHONY: all-target
+ all-target:  \
+@@ -751,7 +754,8 @@
+     maybe-all-target-qthreads \
+     maybe-all-target-rda \
+     maybe-all-target-libada \
+-    maybe-all-target-libgnatvsn
++    maybe-all-target-libgnatvsn \
++    maybe-all-target-libgnatprj
+ 
+ # Do a target for all the subdirectories.  A ``make do-X'' will do a
+ # ``make X'' in all subdirectories (because, in general, there is a
+@@ -838,6 +842,7 @@
+     maybe-info-utils \
+     maybe-info-libada \
+     maybe-info-libgnatvsn \
++    maybe-info-libgnatprj \
+     maybe-info-gnattools
+ 
+ .PHONY: info-target
+@@ -861,7 +866,8 @@
+     maybe-info-target-qthreads \
+     maybe-info-target-rda \
+     maybe-info-target-libada \
+-    maybe-info-target-libgnatvsn
++    maybe-info-target-libgnatvsn \
++    maybe-info-target-libgnatprj
+ 
+ .PHONY: do-dvi
+ do-dvi:
+@@ -943,6 +949,7 @@
+     maybe-dvi-utils \
+     maybe-dvi-libada \
+     maybe-dvi-libgnatvsn \
++    maybe-dvi-libgnatprj \
+     maybe-dvi-gnattools
+ 
+ .PHONY: dvi-target
+@@ -966,7 +973,8 @@
+     maybe-dvi-target-qthreads \
+     maybe-dvi-target-rda \
+     maybe-dvi-target-libada \
+-    maybe-dvi-target-libgnatvsn
++    maybe-dvi-target-libgnatvsn \
++    maybe-dvi-target-libgnatprj
+ 
+ .PHONY: do-html
+ do-html:
+@@ -1048,6 +1056,7 @@
+     maybe-html-utils \
+     maybe-html-libada \
+     maybe-html-libgnatvsn \
++    maybe-html-libgnatprj \
+     maybe-html-gnattools
+ 
+ .PHONY: html-target
+@@ -1071,7 +1080,8 @@
+     maybe-html-target-qthreads \
+     maybe-html-target-rda \
+     maybe-html-target-libada \
+-    maybe-html-target-libgnatvsn
++    maybe-html-target-libgnatvsn \
++    maybe-html-target-libgnatprj
+ 
+ .PHONY: do-TAGS
+ do-TAGS:
+@@ -1153,6 +1163,7 @@
+     maybe-TAGS-utils \
+     maybe-TAGS-libada \
+     maybe-TAGS-libgnatvsn \
++    maybe-TAGS-libgnatprj \
+     maybe-TAGS-gnattools
+ 
+ .PHONY: TAGS-target
+@@ -1176,7 +1187,8 @@
+     maybe-TAGS-target-qthreads \
+     maybe-TAGS-target-rda \
+     maybe-TAGS-target-libada \
+-    maybe-TAGS-target-libgnatvsn
++    maybe-TAGS-target-libgnatvsn \
++    maybe-TAGS-target-libgnatprj
+ 
+ .PHONY: do-install-info
+ do-install-info:
+@@ -1258,6 +1270,7 @@
+     maybe-install-info-utils \
+     maybe-install-info-libada \
+     maybe-install-info-libgnatvsn \
++    maybe-install-info-libgnatprj \
+     maybe-install-info-gnattools
+ 
+ .PHONY: install-info-target
+@@ -1281,7 +1294,8 @@
+     maybe-install-info-target-qthreads \
+     maybe-install-info-target-rda \
+     maybe-install-info-target-libada \
+-    maybe-install-info-target-libgnatvsn
++    maybe-install-info-target-libgnatvsn \
++    maybe-install-info-target-libgnatprj
+ 
+ .PHONY: do-installcheck
+ do-installcheck:
+@@ -1363,6 +1377,7 @@
+     maybe-installcheck-utils \
+     maybe-installcheck-libada \
+     maybe-installcheck-libgnatvsn \
++    maybe-installcheck-libgnatprj \
+     maybe-installcheck-gnattools
+ 
+ .PHONY: installcheck-target
+@@ -1386,7 +1401,8 @@
+     maybe-installcheck-target-qthreads \
+     maybe-installcheck-target-rda \
+     maybe-installcheck-target-libada \
+-    maybe-installcheck-target-libgnatvsn
++    maybe-installcheck-target-libgnatvsn \
++    maybe-installcheck-target-libgnatprj
+ 
+ .PHONY: do-mostlyclean
+ do-mostlyclean:
+@@ -1468,6 +1484,7 @@
+     maybe-mostlyclean-utils \
+     maybe-mostlyclean-libada \
+     maybe-mostlyclean-libgnatvsn \
++    maybe-mostlyclean-libgnatprj \
+     maybe-mostlyclean-gnattools
+ 
+ .PHONY: mostlyclean-target
+@@ -1491,7 +1508,8 @@
+     maybe-mostlyclean-target-qthreads \
+     maybe-mostlyclean-target-rda \
+     maybe-mostlyclean-target-libada \
+-    maybe-mostlyclean-target-libgnatvsn
++    maybe-mostlyclean-target-libgnatvsn \
++    maybe-mostlyclean-target-libgnatprj
+ 
+ .PHONY: do-clean
+ do-clean:
+@@ -1573,6 +1591,7 @@
+     maybe-clean-utils \
+     maybe-clean-libada \
+     maybe-clean-libgnatvsn \
++    maybe-clean-libgnatprj \
+     maybe-clean-gnattools
+ 
+ .PHONY: clean-target
+@@ -1596,7 +1615,8 @@
+     maybe-clean-target-qthreads \
+     maybe-clean-target-rda \
+     maybe-clean-target-libada \
+-    maybe-clean-target-libgnatvsn
++    maybe-clean-target-libgnatvsn \
++    maybe-clean-target-libgnatprj
+ 
+ .PHONY: do-distclean
+ do-distclean:
+@@ -1678,6 +1698,7 @@
+     maybe-distclean-utils \
+     maybe-distclean-libada \
+     maybe-distclean-libgnatvsn \
++    maybe-distclean-libgnatprj \
+     maybe-distclean-gnattools
+ 
+ .PHONY: distclean-target
+@@ -1701,7 +1722,8 @@
+     maybe-distclean-target-qthreads \
+     maybe-distclean-target-rda \
+     maybe-distclean-target-libada \
+-    maybe-distclean-target-libgnatvsn
++    maybe-distclean-target-libgnatvsn \
++    maybe-distclean-target-libgnatprj
+ 
+ .PHONY: do-maintainer-clean
+ do-maintainer-clean:
+@@ -1783,6 +1805,7 @@
+     maybe-maintainer-clean-utils \
+     maybe-maintainer-clean-libada \
+     maybe-maintainer-clean-libgnatvsn \
++    maybe-maintainer-clean-libgnatprj \
+     maybe-maintainer-clean-gnattools
+ 
+ .PHONY: maintainer-clean-target
+@@ -1806,7 +1829,8 @@
+     maybe-maintainer-clean-target-qthreads \
+     maybe-maintainer-clean-target-rda \
+     maybe-maintainer-clean-target-libada \
+-    maybe-maintainer-clean-target-libgnatvsn
++    maybe-maintainer-clean-target-libgnatvsn \
++    maybe-maintainer-clean-target-libgnatprj
+ 
+ 
+ # Here are the targets which correspond to the do-X targets.
+@@ -1944,6 +1968,7 @@
+     maybe-check-utils \
+     maybe-check-libada \
+     maybe-check-libgnatvsn \
++    maybe-check-libgnatprj \
+     maybe-check-gnattools
+ 
+ .PHONY: check-target
+@@ -1967,7 +1992,8 @@
+     maybe-check-target-qthreads \
+     maybe-check-target-rda \
+     maybe-check-target-libada \
+-    maybe-check-target-libgnatvsn
++    maybe-check-target-libgnatvsn \
++    maybe-check-target-libgnatprj
+ 
+ do-check:
+ 	@: $(MAKE); $(unstage)
+@@ -2076,6 +2102,7 @@
+     maybe-install-utils \
+     maybe-install-libada \
+     maybe-install-libgnatvsn \
++    maybe-install-libgnatprj \
+     maybe-install-gnattools
+ 
+ .PHONY: install-host
+@@ -2148,6 +2175,7 @@
+     maybe-install-utils \
+     maybe-install-libada \
+     maybe-install-libgnatvsn \
++    maybe-install-libgnatprj \
+     maybe-install-gnattools
+ 
+ .PHONY: install-target
+@@ -2171,7 +2199,8 @@
+     maybe-install-target-qthreads \
+     maybe-install-target-rda \
+     maybe-install-target-libada \
+-    maybe-install-target-libgnatvsn
++    maybe-install-target-libgnatvsn \
++    maybe-install-target-libgnatprj
+ 
+ uninstall:
+ 	@echo "the uninstall target is not supported in this tree"
+@@ -28356,6 +28385,240 @@
+ 
+ 
+ 
++.PHONY: configure-libgnatprj maybe-configure-libgnatprj
++maybe-configure-libgnatprj:
++@if libgnatprj
++maybe-configure-libgnatprj: configure-libgnatprj
++configure-libgnatprj: 
++	@$(unstage)
++	@test ! -f $(HOST_SUBDIR)/libgnatprj/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libgnatprj ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	echo Configuring in $(HOST_SUBDIR)/libgnatprj; \
++	cd "$(HOST_SUBDIR)/libgnatprj" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(HOST_SUBDIR)/libgnatprj/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libgnatprj"; \
++	libsrcdir="$$s/libgnatprj"; \
++	$(SHELL) $${libsrcdir}/configure \
++	  $(HOST_CONFIGARGS) $${srcdiroption}  \
++	  || exit 1
++@endif libgnatprj
++
++
++
++
++
++.PHONY: all-libgnatprj maybe-all-libgnatprj
++maybe-all-libgnatprj:
++@if libgnatprj
++TARGET-libgnatprj=all
++maybe-all-libgnatprj: all-libgnatprj
++all-libgnatprj: configure-libgnatprj
++	@$(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(FLAGS_TO_PASS)  $(TARGET-libgnatprj))
++@endif libgnatprj
++
++
++
++
++.PHONY: check-libgnatprj maybe-check-libgnatprj
++maybe-check-libgnatprj:
++@if libgnatprj
++maybe-check-libgnatprj: check-libgnatprj
++
++check-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: install-libgnatprj maybe-install-libgnatprj
++maybe-install-libgnatprj:
++@if libgnatprj
++maybe-install-libgnatprj: install-libgnatprj
++
++install-libgnatprj: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(FLAGS_TO_PASS)  install)
++
++@endif libgnatprj
++
++# Other targets (info, dvi, etc.)
++
++.PHONY: maybe-info-libgnatprj info-libgnatprj
++maybe-info-libgnatprj:
++@if libgnatprj
++maybe-info-libgnatprj: info-libgnatprj
++
++# libgnatprj doesn't support info.
++info-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-dvi-libgnatprj dvi-libgnatprj
++maybe-dvi-libgnatprj:
++@if libgnatprj
++maybe-dvi-libgnatprj: dvi-libgnatprj
++
++# libgnatprj doesn't support dvi.
++dvi-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-html-libgnatprj html-libgnatprj
++maybe-html-libgnatprj:
++@if libgnatprj
++maybe-html-libgnatprj: html-libgnatprj
++
++# libgnatprj doesn't support html.
++html-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-TAGS-libgnatprj TAGS-libgnatprj
++maybe-TAGS-libgnatprj:
++@if libgnatprj
++maybe-TAGS-libgnatprj: TAGS-libgnatprj
++
++# libgnatprj doesn't support TAGS.
++TAGS-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-install-info-libgnatprj install-info-libgnatprj
++maybe-install-info-libgnatprj:
++@if libgnatprj
++maybe-install-info-libgnatprj: install-info-libgnatprj
++
++# libgnatprj doesn't support install-info.
++install-info-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-installcheck-libgnatprj installcheck-libgnatprj
++maybe-installcheck-libgnatprj:
++@if libgnatprj
++maybe-installcheck-libgnatprj: installcheck-libgnatprj
++
++# libgnatprj doesn't support installcheck.
++installcheck-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-mostlyclean-libgnatprj mostlyclean-libgnatprj
++maybe-mostlyclean-libgnatprj:
++@if libgnatprj
++maybe-mostlyclean-libgnatprj: mostlyclean-libgnatprj
++
++mostlyclean-libgnatprj: 
++	@$(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing mostlyclean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	          mostlyclean) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-clean-libgnatprj clean-libgnatprj
++maybe-clean-libgnatprj:
++@if libgnatprj
++maybe-clean-libgnatprj: clean-libgnatprj
++
++clean-libgnatprj: 
++	@$(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing clean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	          clean) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-distclean-libgnatprj distclean-libgnatprj
++maybe-distclean-libgnatprj:
++@if libgnatprj
++maybe-distclean-libgnatprj: distclean-libgnatprj
++
++distclean-libgnatprj: 
++	@$(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing distclean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	          distclean) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-maintainer-clean-libgnatprj maintainer-clean-libgnatprj
++maybe-maintainer-clean-libgnatprj:
++@if libgnatprj
++maybe-maintainer-clean-libgnatprj: maintainer-clean-libgnatprj
++
++maintainer-clean-libgnatprj: 
++	@$(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing maintainer-clean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	          maintainer-clean) \
++	  || exit 1
++
++@endif libgnatprj
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gnattools
+@@ -35286,6 +35549,253 @@
+ 
+ 
+ 
++# There's only one multilib.out.  Cleverer subdirs shouldn't need it copied.
++@if target-libgnatprj
++$(TARGET_SUBDIR)/libgnatprj/multilib.out: multilib.out
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatprj ; \
++	rm -f $(TARGET_SUBDIR)/libgnatprj/Makefile || : ; \
++	cp multilib.out $(TARGET_SUBDIR)/libgnatprj/multilib.out
++@endif target-libgnatprj
++
++
++
++.PHONY: configure-target-libgnatprj maybe-configure-target-libgnatprj
++maybe-configure-target-libgnatprj:
++@if target-libgnatprj
++maybe-configure-target-libgnatprj: configure-target-libgnatprj
++configure-target-libgnatprj: $(TARGET_SUBDIR)/libgnatprj/multilib.out
++	@$(unstage)
++	@test ! -f $(TARGET_SUBDIR)/libgnatprj/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatprj ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo Configuring in $(TARGET_SUBDIR)/libgnatprj; \
++	cd "$(TARGET_SUBDIR)/libgnatprj" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(TARGET_SUBDIR)/libgnatprj/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libgnatprj"; \
++	libsrcdir="$$s/libgnatprj"; \
++	rm -f no-such-file || : ; \
++	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++	  $(TARGET_CONFIGARGS) $${srcdiroption}  \
++	  || exit 1
++@endif target-libgnatprj
++
++
++
++
++
++.PHONY: all-target-libgnatprj maybe-all-target-libgnatprj
++maybe-all-target-libgnatprj:
++@if target-libgnatprj
++TARGET-target-libgnatprj=all
++maybe-all-target-libgnatprj: all-target-libgnatprj
++all-target-libgnatprj: configure-target-libgnatprj
++	@$(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  $(TARGET-target-libgnatprj))
++@endif target-libgnatprj
++
++
++
++
++
++.PHONY: check-target-libgnatprj maybe-check-target-libgnatprj
++maybe-check-target-libgnatprj:
++@if target-libgnatprj
++maybe-check-target-libgnatprj: check-target-libgnatprj
++
++# Dummy target for uncheckable module.
++check-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: install-target-libgnatprj maybe-install-target-libgnatprj
++maybe-install-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-target-libgnatprj: install-target-libgnatprj
++
++install-target-libgnatprj: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
++
++@endif target-libgnatprj
++
++# Other targets (info, dvi, etc.)
++
++.PHONY: maybe-info-target-libgnatprj info-target-libgnatprj
++maybe-info-target-libgnatprj:
++@if target-libgnatprj
++maybe-info-target-libgnatprj: info-target-libgnatprj
++
++# libgnatprj doesn't support info.
++info-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-dvi-target-libgnatprj dvi-target-libgnatprj
++maybe-dvi-target-libgnatprj:
++@if target-libgnatprj
++maybe-dvi-target-libgnatprj: dvi-target-libgnatprj
++
++# libgnatprj doesn't support dvi.
++dvi-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-html-target-libgnatprj html-target-libgnatprj
++maybe-html-target-libgnatprj:
++@if target-libgnatprj
++maybe-html-target-libgnatprj: html-target-libgnatprj
++
++# libgnatprj doesn't support html.
++html-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-TAGS-target-libgnatprj TAGS-target-libgnatprj
++maybe-TAGS-target-libgnatprj:
++@if target-libgnatprj
++maybe-TAGS-target-libgnatprj: TAGS-target-libgnatprj
++
++# libgnatprj doesn't support TAGS.
++TAGS-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-info-target-libgnatprj install-info-target-libgnatprj
++maybe-install-info-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-info-target-libgnatprj: install-info-target-libgnatprj
++
++# libgnatprj doesn't support install-info.
++install-info-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-installcheck-target-libgnatprj installcheck-target-libgnatprj
++maybe-installcheck-target-libgnatprj:
++@if target-libgnatprj
++maybe-installcheck-target-libgnatprj: installcheck-target-libgnatprj
++
++# libgnatprj doesn't support installcheck.
++installcheck-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-mostlyclean-target-libgnatprj mostlyclean-target-libgnatprj
++maybe-mostlyclean-target-libgnatprj:
++@if target-libgnatprj
++maybe-mostlyclean-target-libgnatprj: mostlyclean-target-libgnatprj
++
++mostlyclean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	           mostlyclean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-clean-target-libgnatprj clean-target-libgnatprj
++maybe-clean-target-libgnatprj:
++@if target-libgnatprj
++maybe-clean-target-libgnatprj: clean-target-libgnatprj
++
++clean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing clean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	           clean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-distclean-target-libgnatprj distclean-target-libgnatprj
++maybe-distclean-target-libgnatprj:
++@if target-libgnatprj
++maybe-distclean-target-libgnatprj: distclean-target-libgnatprj
++
++distclean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing distclean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	           distclean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-maintainer-clean-target-libgnatprj maintainer-clean-target-libgnatprj
++maybe-maintainer-clean-target-libgnatprj:
++@if target-libgnatprj
++maybe-maintainer-clean-target-libgnatprj: maintainer-clean-target-libgnatprj
++
++maintainer-clean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
++	           maintainer-clean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++
++
+ # ----------
+ # GCC module
+ # ----------
+@@ -36727,6 +37237,8 @@
+ 
+ configure-target-libgnatvsn: maybe-all-gcc
+ 
++configure-target-libgnatprj: maybe-all-gcc
++
+ 
+ 
+ configure-target-boehm-gc: maybe-all-target-newlib maybe-all-target-libgloss
+@@ -36953,7 +37465,10 @@
+ all-fixincludes: maybe-all-libiberty
+ all-gnattools: maybe-all-libada
+ all-gnattools: maybe-all-libgnatvsn
++all-gnattools: maybe-all-libgnatprj
+ all-libgnatvsn: maybe-all-libada
++all-libgnatprj: maybe-all-libada
++all-libgnatprj: maybe-all-libgnatvsn
+ configure-gdb: maybe-configure-sim
+ all-gdb: maybe-all-libiberty
+ all-gdb: maybe-all-opcodes
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-ssp-on.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-ssp-on.dpatch
@@ -0,0 +1,47 @@
+#! /bin/sh -e
+
+# DP: Turn on -fstack-protector by default.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/common.opt	(Revision 114807)
++++ gcc/common.opt	(Arbeitskopie)
+@@ -817,7 +817,7 @@
+ -fstack-limit-symbol=<name>	Trap if the stack goes past symbol <name>
+ 
+ fstack-protector
+-Common Report Var(flag_stack_protect, 1)
++Common Report Var(flag_stack_protect, 1) Init(1)
+ Use propolice as a stack protection method
+ 
+ fstack-protector-all
+--- gcc/doc/invoke.texi~	2006-06-20 15:04:53.383303032 +0000
++++ gcc/doc/invoke.texi	2006-06-20 21:55:24.687921672 +0000
+@@ -5700,6 +5700,8 @@
+ functions with buffers larger than 8 bytes.  The guards are initialized
+ when a function is entered and then checked when the function exits.
+ If a guard check fails, an error message is printed and the program exits.
++On Ubuntu the default is @option{-fstack-protector}, to turn it off use
++@option{-fno-stack-protector}.
+ 
+ @item -fstack-protector-all
+ Like @option{-fstack-protector} except that all functions are protected.
--- gcc-4.1-4.1.2.orig/debian/patches/gdc-driver-nophobos.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gdc-driver-nophobos.dpatch
@@ -0,0 +1,78 @@
+#! /bin/sh -e
+
+# gdc-nolibphobos-driver.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Modify gdc driver to have no libphobos by default.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+diff -ruN gcc/d/d-lang.cc gcc/d/d-lang.cc
+--- gcc/d/d-lang.cc	2007-09-27 17:33:09.000000000 +0200
++++ gcc/d/d-lang.cc	2007-09-27 17:39:49.000000000 +0200
+@@ -159,7 +159,7 @@
+     global.params.fileImppath = new Array();
+ 
+     // GCC options
+-    flag_exceptions = 1;
++    flag_exceptions = 0;
+ 
+     // extra D-specific options
+     gen.splitDynArrayVarArgs = true;
+diff -ruN gcc/d/dmain.d gcc/d/dmain.d
+--- gcc/d/dmain.d	1970-01-01 01:00:00.000000000 +0100
++++ gcc/d/dmain.d	2007-09-27 20:57:55.000000000 +0200
+@@ -0,0 +1,21 @@
++extern (C) size_t strlen(const char* s);
++extern (C) void* malloc(size_t s);
++
++int main(char[][] args); // U _Dmain
++
++extern (C) int main(int argc, char** argv) {
++	char[][] args;
++	char[] *am;
++	int i;
++
++	am = cast(char[] *) malloc(argc * (char[]).sizeof);
++
++	for(i = 0; i < argc; i++) {
++		am[i] = argv[i][0 .. strlen(argv[i])];
++	}
++
++	args = am[0 .. argc];
++
++	return main(args);
++}
++
+diff -ruN gcc/d/d-spec.c gcc/d/d-spec.c
+--- gcc/d/d-spec.c	2007-09-27 17:34:51.000000000 +0200
++++ gcc/d/d-spec.c	2007-09-28 09:54:34.000000000 +0200
+@@ -82,7 +82,7 @@
+ 
+     /* If nonzero, use the standard D runtime library when linking with
+        stanard libraries. */
+-    int phobos = 1;
++    int phobos = 0;
+ 
+     /* The number of arguments being added to what's in argv, other than
+        libraries.  We use this to track the number of times we've inserted
--- gcc-4.1-4.1.2.orig/debian/patches/boehm-gc-nocheck.dpatch
+++ gcc-4.1-4.1.2/debian/patches/boehm-gc-nocheck.dpatch
@@ -0,0 +1,37 @@
+#! /bin/sh -e
+
+# DP: Disable running the boehm-gc testsuite. Hangs the buildd at least on hppa.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- boehm-gc/Makefile.in~	2004-06-20 16:24:06.000000000 +0200
++++ boehm-gc/Makefile.in	2004-06-23 09:43:42.000000000 +0200
+@@ -662,7 +662,8 @@
+ 	  test "$$failed" -eq 0; \
+ 	else :; fi
+ check-am: $(check_PROGRAMS)
+-	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
++	: # $(MAKE) $(AM_MAKEFLAGS) check-TESTS
++	@echo target $@ disabled for Debian build.
+ check: check-recursive
+ all-am: Makefile $(LTLIBRARIES) all-multi
+ installdirs: installdirs-recursive
--- gcc-4.1-4.1.2.orig/debian/patches/libstdc++-pic.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libstdc++-pic.dpatch
@@ -0,0 +1,71 @@
+#! /bin/sh -e
+
+# DP: Build and install libstdc++_pic.a library.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -ur libstdc++-v3/src/Makefile.am libstdc++-v3/src/Makefile.am
+--- libstdc++-v3/src/Makefile.am~	2004-04-16 21:04:05.000000000 +0200
++++ libstdc++-v3/src/Makefile.am	2004-07-03 20:22:43.000000000 +0200
+@@ -210,6 +210,10 @@
+ 	  $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+ 
+ 
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+diff -ur libstdc++-v3/src/Makefile.in libstdc++-v3/src/Makefile.in
+--- libstdc++-v3/src/Makefile.in	2004-07-03 06:41:13.000000000 +0200
++++ libstdc++-v3/src/Makefile.in	2004-07-03 20:25:05.000000000 +0200
+@@ -611,7 +611,7 @@
+ 
+ install-data-am: install-data-local
+ 
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+ 
+ install-info: install-info-am
+ 
+@@ -644,6 +644,7 @@
+ 	distclean-libtool distclean-tags distdir dvi dvi-am html \
+ 	html-am info info-am install install-am install-data \
+ 	install-data-am install-data-local install-exec \
++	install-exec-local \
+ 	install-exec-am install-info install-info-am install-man \
+ 	install-strip install-toolexeclibLTLIBRARIES installcheck \
+ 	installcheck-am installdirs maintainer-clean \
+@@ -729,6 +730,11 @@
+ install_debug:
+ 	(cd ${debugdir} && $(MAKE) \
+ 	toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
--- gcc-4.1-4.1.2.orig/debian/patches/gccbug.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gccbug.dpatch
@@ -0,0 +1,36 @@
+#! /bin/sh -e
+
+# DP: Use sensible-editor instead of vi as fallback editor
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/gccbug.in~	2003-03-01 00:51:42.000000000 +0100
++++ gcc/gccbug.in	2003-03-02 12:08:36.000000000 +0100
+@@ -134,7 +134,7 @@
+ # If they don't have a preferred editor set, then use
+ if [ -z "$VISUAL" ]; then
+   if [ -z "$EDITOR" ]; then
+-    EDIT=vi
++    EDIT=/usr/bin/sensible-editor
+   else
+     EDIT="$EDITOR"
+   fi
--- gcc-4.1-4.1.2.orig/debian/patches/libstdc++-long-double.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libstdc++-long-double.dpatch
@@ -0,0 +1,1738 @@
+#! /bin/sh -e
+
+# DP: PR target/25864, libstdc++-v3 parts.
+# DP: Taken from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864#c13
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-02-07  Jakub Jelinek  <jakub@redhat.com>
+	    Benjamin Kosnik  <bkoz@redhat.com>
+
+	PR target/25864
+	* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
+	If true, set also port_specific_symbol_files and create
+	as_symver_specs.
+	(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
+	* configure: Rebuilt.
+	* config.h.in: Rebuilt.
+	* config/os/gnu-linux/ldbl-extra.ver: New file.
+	* config/linker-map.gnu: Make sure no __float128 symbols are
+	exported.
+	* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
+	_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
+	_GLIBCXX_END_LDBL_NAMESPACE): Define.
+	* include/bits/localefwd.h: Use them to conditionally scope facets.
+	* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
+	with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
+	[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
+	[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
+	[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
+	[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
+	* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
+	with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
+	(std::money_get::__do_get, std::money_put::__do_put,
+	std::num_get::__do_get, std::num_put::__do_put): New
+	specializations.
+	* include/Makefile.am: Conditionally define
+	_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
+	* include/Makefile.in: Regenerate.
+	* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
+	_GLIBCXX_SYNC_ID): Define, use them.
+	* src/compatibility-ldbl.cc: New file.
+	* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
+	symbols.
+	* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.	
+	* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
+	* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
+	Likewise.
+	* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
+	Likewise.
+	* src/Makefile.am (libstdc++-symbol.ver): Append instead of
+	insert in the middle if port specific symbol file requests it.
+	(ldbl_compat_sources): New variable.
+	(sources): Use it.
+	(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
+	* src/Makefile.in: Rebuilt.
+	* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
+	GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
+
+
+diff -urN libstdc++-v3.orig/config/linker-map.gnu libstdc++-v3/config/linker-map.gnu
+--- libstdc++-v3.orig/config/linker-map.gnu	2006-03-03 23:55:07.000000000 +0000
++++ libstdc++-v3/config/linker-map.gnu	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ ## Linker script for GNU ld 2.13.91+ only.
+ ##
+-## Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++## Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ ##
+ ## This file is part of the libstdc++ version 3 distribution.
+ ##
+@@ -44,7 +44,10 @@
+       std::basic_[j-n]*;
+       std::basic_o[a-e]*;
+ #     std::basic_ofstream;
+-      std::basic_o[g-z]*;
++#     std::basic_o[g-z]*;
++      std::basic_o[g-r]*;
++      std::basic_ostr[a-d]*;
++      std::basic_ostr[f-z]*;
+       std::basic_[p-r]*;
+       std::basic_streambuf*;
+ #     std::basic_string
+@@ -88,7 +91,14 @@
+       std::locale::_[J-Ra-z]*;
+       std::locale::_S_normalize_category*;
+       std::locale::_[T-Za-z]*;
+-      std::[A-Zm-r]*;
++#     std::[A-Zm-r]*;
++      std::[A-Zmp-r]*;
++      std::n[^u]*;
++      std::nu[^m]*;
++      std::num[^e]*;
++      std::ostrstream*;
++      std::out_of_range*;
++      std::overflow_error*;
+       std::set_new_handler*;
+       std::set_terminate*;
+       std::set_unexpected*;
+@@ -256,7 +266,7 @@
+     _ZNSi[0-9][a-h]*;
+     _ZNSi[0-9][j-z]*;
+     _ZNSi6ignoreE[il][il];
+-    _ZNSirsE*;
++    _ZNSirsE*[^g];
+ 
+     # std::basic_istream<wchar_t>
+     _ZNSt13basic_istreamIwSt11char_traitsIwEEC*;
+@@ -265,7 +275,7 @@
+     _ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][a-h]*;
+     _ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][j-z]*;
+     _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[il][ijlm];
+-    _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*;
++    _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*[^g];
+ 
+     # std::istream operators and inserters
+     _ZSt7getlineI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_istream*;
+@@ -277,6 +287,37 @@
+     _ZStrsIe[cw]St11char_traitsI[cw]EERSt13basic_istream*;
+     _ZStrsIf[cw]St11char_traitsI[cw]EERSt13basic_istream*;
+ 
++    # std::basic_ostream<char>
++    _ZNSoC*;
++    _ZNSoD*;
++    _ZNKSo6sentrycvbEv;
++    _ZNSo8_M_write*;
++    _ZNSo[0-9][a-z]*;
++    _ZNSolsE*[^g];
++
++    # std::basic_ostream<wchar_t>
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEEC*;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEED*;
++    _ZNKSt13basic_ostreamIwSt11char_traitsIwEE[0-9][a-z]*;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpE*;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKw*;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentry*;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_write*;
++    _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*[^g];
++
++    # std::ostream operators and inserters
++    _ZSt4end[ls]I[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++    _ZSt5flushI[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++    _ZStlsI[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++    _ZStlsI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_ostream*;
++    _ZStlsISt11char_traitsI[cw]EERSt13basic_ostream*;
++    _ZStlsId[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++    _ZStlsIe[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++    _ZStlsIf[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++
+     # std::locale destructors
+     _ZNSt6localeD*;
+ 	
+@@ -292,14 +333,23 @@
+     _ZNSt8ios_base4InitD*;
+ 
+     # bool std::has_facet 
+-    _ZSt9has_facet*;
++    _ZSt9has_facetIS*;
+ 
+     # std::num_get
+     _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ 
++    # std::num_put
++    _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
++
+     # std::money_get
+     _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ 
++    # std::money_put
++    _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
++
++    # std::numeric_limits
++    _ZNSt14numeric_limitsI[^g]*;
++
+     # std::_Rb_tree
+     _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
+     _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base;
+@@ -327,7 +377,7 @@
+     _ZNSt12__basic_fileIcED*;
+ 
+     # std::__convert_to_v
+-    _ZSt14__convert_to_v*;
++    _ZSt14__convert_to_vI[^g]*;
+ 
+     # __gnu_cxx::stdio_sync_filebuf
+     _ZTVN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE;
+@@ -399,7 +449,8 @@
+     _ZTSN9__gnu_cxx13stdio_filebufI[cw]St11char_traitsI[cw]EEE;
+ 
+     # function-scope static objects requires a guard variable.
+-    _ZGVNSt*;
++    _ZGVNSt[^1]*;
++    _ZGVNSt1[^7]*;
+ 
+     # virtual function thunks
+     _ZThn8_NS*;
+@@ -665,9 +716,9 @@
+     _ZTVN10__cxxabiv121__vmi_class_type_infoE;
+ 
+     # typeinfo structure (and some names)
+-    _ZTI[a-z];
+-    _ZTIP[a-z];
+-    _ZTIPK[a-z];
++    _ZTI[a-fh-z];
++    _ZTIP[a-fh-z];
++    _ZTIPK[a-fh-z];
+     _ZTIN10__cxxabiv117__array_type_infoE;
+     _ZTIN10__cxxabiv117__class_type_infoE;
+     _ZTIN10__cxxabiv116__enum_type_infoE;
+@@ -680,9 +731,9 @@
+     _ZTIN10__cxxabiv121__vmi_class_type_infoE;
+ 
+     # typeinfo name
+-    _ZTS[a-z];
+-    _ZTSP[a-z];
+-    _ZTSPK[a-z];
++    _ZTS[a-fh-z];
++    _ZTSP[a-fh-z];
++    _ZTSPK[a-fh-z];
+     _ZTSN10__cxxabiv117__array_type_infoE;
+     _ZTSN10__cxxabiv117__class_type_infoE;
+     _ZTSN10__cxxabiv116__enum_type_infoE;
+diff -urN libstdc++-v3.orig/config/locale/generic/c_locale.cc libstdc++-v3/config/locale/generic/c_locale.cc
+--- libstdc++-v3.orig/config/locale/generic/c_locale.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/config/locale/generic/c_locale.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Wrapper for underlying C-language localization -*- C++ -*-
+ 
+-// Copyright (C) 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -168,3 +168,10 @@
+ {
+   const char* const* const locale::_S_categories = __gnu_cxx::category_names;
+ }  // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/config/locale/gnu/c_locale.cc libstdc++-v3/config/locale/gnu/c_locale.cc
+--- libstdc++-v3.orig/config/locale/gnu/c_locale.cc	2005-12-15 10:22:19.000000000 +0000
++++ libstdc++-v3/config/locale/gnu/c_locale.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Wrapper for underlying C-language localization -*- C++ -*-
+ 
+-// Copyright (C) 2001, 2002, 2003, 2004, 2005 
++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -132,3 +132,10 @@
+ {
+   const char* const* const locale::_S_categories = __gnu_cxx::category_names;
+ }  // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct);
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/config/os/gnu-linux/ldbl-extra.ver libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver
+--- libstdc++-v3.orig/config/os/gnu-linux/ldbl-extra.ver	1970-01-01 00:00:00.000000000 +0000
++++ libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver	2006-10-27 14:27:17.000000000 +0000
+@@ -0,0 +1,19 @@
++# Appended to version file.
++
++GLIBCXX_LDBL_3.4 {
++  _ZNSt14numeric_limitsIg*;
++  _ZNSirsERg;
++  _ZNSolsEg;
++  _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg;
++  _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg;
++  _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP*;
++  _ZStlsIg[cw]St11char_traitsI[cw]EERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E;
++  _ZStrsIg[cw]St11char_traitsI[cw]EERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E;
++  *__gnu_cxx_ldbl128*;
++};
++
++CXXABI_LDBL_1.3 {
++  _ZT[IS]g;
++  _ZT[IS]Pg;
++  _ZT[IS]PKg;
++};
+diff -urN libstdc++-v3.orig/config.h.in libstdc++-v3/config.h.in
+--- libstdc++-v3.orig/config.h.in	2006-01-10 17:14:00.000000000 +0000
++++ libstdc++-v3/config.h.in	2006-10-27 14:27:17.000000000 +0000
+@@ -658,6 +658,9 @@
+ /* Define to 1 if a full hosted library is built, or 0 if freestanding. */
+ #undef _GLIBCXX_HOSTED
+ 
++/* Define if compatibility should be provided for -mlong-double-64. */
++#undef _GLIBCXX_LONG_DOUBLE_COMPAT
++
+ /* Define if ptrdiff_t is int. */
+ #undef _GLIBCXX_PTRDIFF_T_IS_INT
+ 
+diff -urN libstdc++-v3.orig/configure libstdc++-v3/configure
+--- libstdc++-v3.orig/configure	2006-10-27 14:25:53.000000000 +0000
++++ libstdc++-v3/configure	2006-10-27 14:27:17.000000000 +0000
+@@ -309,7 +309,7 @@
+ # include <unistd.h>
+ #endif"
+ 
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_DARWIN_EXPORT_TRUE ENABLE_SYMVERS_DARWIN_EXPORT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_DARWIN_EXPORT_TRUE ENABLE_SYMVERS_DARWIN_EXPORT_FALSE GLIBCXX_LDBL_COMPAT_TRUE GLIBCXX_LDBL_COMPAT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ 
+ # Initialize some variables set by options.
+@@ -87959,6 +87959,72 @@
+ echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;}
+ 
+ 
++ac_ldbl_compat=no
++case "$target" in
++  powerpc*-*-*gnu* | \
++  sparc*-*-linux* | \
++  s390*-*-linux* | \
++  alpha*-*-linux*)
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
++#error no need for long double compatibility
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++  (eval $ac_compile) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest.$ac_objext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_ldbl_compat=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_ldbl_compat=no
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++  if test "$ac_ldbl_compat" = yes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define _GLIBCXX_LONG_DOUBLE_COMPAT 1
++_ACEOF
++
++    port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver"
++  fi
++esac
++
++
+ # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
+ 
+   if $GLIBCXX_IS_NATIVE ; then
+@@ -88811,6 +88877,17 @@
+ 
+ 
+ 
++if test $ac_ldbl_compat = yes; then
++  GLIBCXX_LDBL_COMPAT_TRUE=
++  GLIBCXX_LDBL_COMPAT_FALSE='#'
++else
++  GLIBCXX_LDBL_COMPAT_TRUE='#'
++  GLIBCXX_LDBL_COMPAT_FALSE=
++fi
++
++
++
++
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+@@ -89166,6 +89243,13 @@
+ Usually this means the macro was only invoked conditionally." >&2;}
+    { (exit 1); exit 1; }; }
+ fi
++if test -z "${GLIBCXX_LDBL_COMPAT_TRUE}" && test -z "${GLIBCXX_LDBL_COMPAT_FALSE}"; then
++  { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_LDBL_COMPAT\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"GLIBCXX_LDBL_COMPAT\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++   { (exit 1); exit 1; }; }
++fi
+ 
+ : ${CONFIG_STATUS=./config.status}
+ ac_clean_files_save=$ac_clean_files
+@@ -89836,6 +89920,8 @@
+ s,@ENABLE_SYMVERS_GNU_FALSE@,$ENABLE_SYMVERS_GNU_FALSE,;t t
+ s,@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@,$ENABLE_SYMVERS_DARWIN_EXPORT_TRUE,;t t
+ s,@ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@,$ENABLE_SYMVERS_DARWIN_EXPORT_FALSE,;t t
++s,@GLIBCXX_LDBL_COMPAT_TRUE@,$GLIBCXX_LDBL_COMPAT_TRUE,;t t
++s,@GLIBCXX_LDBL_COMPAT_FALSE@,$GLIBCXX_LDBL_COMPAT_FALSE,;t t
+ s,@baseline_dir@,$baseline_dir,;t t
+ s,@ATOMICITY_SRCDIR@,$ATOMICITY_SRCDIR,;t t
+ s,@ATOMIC_WORD_SRCDIR@,$ATOMIC_WORD_SRCDIR,;t t
+diff -urN libstdc++-v3.orig/configure.ac libstdc++-v3/configure.ac
+--- libstdc++-v3.orig/configure.ac	2006-05-03 17:00:18.000000000 +0000
++++ libstdc++-v3/configure.ac	2006-10-27 14:27:17.000000000 +0000
+@@ -281,6 +281,25 @@
+ # This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
+ GLIBCXX_ENABLE_SYMVERS([yes])
+ 
++ac_ldbl_compat=no
++case "$target" in
++  powerpc*-*-*gnu* | \
++  sparc*-*-linux* | \
++  s390*-*-linux* | \
++  alpha*-*-linux*)
++  AC_TRY_COMPILE(, [
++#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
++#error no need for long double compatibility
++#endif
++  ], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
++  if test "$ac_ldbl_compat" = yes; then
++    AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1,
++	      [Define if compatibility should be provided for -mlong-double-64.])
++    port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver"
++  fi
++esac
++GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes)
++
+ # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
+ GLIBCXX_CONFIGURE_TESTSUITE
+ 
+diff -urN libstdc++-v3.orig/include/Makefile.am libstdc++-v3/include/Makefile.am
+--- libstdc++-v3.orig/include/Makefile.am	2006-10-27 14:26:16.000000000 +0000
++++ libstdc++-v3/include/Makefile.am	2006-10-27 14:27:17.000000000 +0000
+@@ -828,13 +828,18 @@
+ 				${glibcxx_srcdir}/include/bits/c++config \
+ 				stamp-${host_alias} \
+ 				${toplevel_srcdir}/gcc/DATESTAMP
+-	@cat ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
++	@ldbl_compat='' ;\
++	grep "^[ 	]*#[ 	]*define[ 	][ 	]*_GLIBCXX_LONG_DOUBLE_COMPAT[ 	][ 	]*1[ 	]*$$" \
++	${CONFIG_HEADER} > /dev/null 2>&1 \
++	&& ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
++	sed -e "$$ldbl_compat" ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ 	sed -e 's/^/#define __GLIBCXX__ /' \
+-            < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
++	    < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
+ 	sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
+ 	    -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
+ 	    -e 's/VERSION/_GLIBCXX_VERSION/g' \
+ 	    -e 's/WORDS_/_GLIBCXX_WORDS_/g' \
++	    -e '/[ 	]_GLIBCXX_LONG_DOUBLE_COMPAT[ 	]/d' \
+ 	    < ${CONFIG_HEADER} >> $@ ;\
+ 	echo "#endif // _CXXCONFIG_" >>$@
+ 
+diff -urN libstdc++-v3.orig/include/Makefile.in libstdc++-v3/include/Makefile.in
+--- libstdc++-v3.orig/include/Makefile.in	2006-10-27 14:26:16.000000000 +0000
++++ libstdc++-v3/include/Makefile.in	2006-10-27 14:27:17.000000000 +0000
+@@ -1205,13 +1205,18 @@
+ 				${glibcxx_srcdir}/include/bits/c++config \
+ 				stamp-${host_alias} \
+ 				${toplevel_srcdir}/gcc/DATESTAMP
+-	@cat ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
++	@ldbl_compat='' ;\
++	grep "^[ 	]*#[ 	]*define[ 	][ 	]*_GLIBCXX_LONG_DOUBLE_COMPAT[ 	][ 	]*1[ 	]*$$" \
++	${CONFIG_HEADER} > /dev/null 2>&1 \
++	&& ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
++	sed -e "$$ldbl_compat" ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ 	sed -e 's/^/#define __GLIBCXX__ /' \
+-            < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
++	    < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
+ 	sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
+ 	    -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
+ 	    -e 's/VERSION/_GLIBCXX_VERSION/g' \
+ 	    -e 's/WORDS_/_GLIBCXX_WORDS_/g' \
++	    -e '/[ 	]_GLIBCXX_LONG_DOUBLE_COMPAT[ 	]/d' \
+ 	    < ${CONFIG_HEADER} >> $@ ;\
+ 	echo "#endif // _CXXCONFIG_" >>$@
+ 
+diff -urN libstdc++-v3.orig/include/bits/c++config libstdc++-v3/include/bits/c++config
+--- libstdc++-v3.orig/include/bits/c++config	2005-11-05 09:42:01.000000000 +0000
++++ libstdc++-v3/include/bits/c++config	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Predefined symbols and macros -*- C++ -*-
+ 
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -65,6 +65,26 @@
+ # define _GLIBCXX_STD std
+ #endif
+ 
++/* Define if compatibility should be provided for -mlong-double-64. */
++#undef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++// XXX GLIBCXX_ABI Deprecated
++// Namespace associations for long double 128 mode.
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++# define _GLIBCXX_LDBL_NAMESPACE __gnu_cxx_ldbl128::
++# define _GLIBCXX_BEGIN_LDBL_NAMESPACE namespace __gnu_cxx_ldbl128 {
++# define _GLIBCXX_END_LDBL_NAMESPACE }
++namespace std
++{
++  namespace __gnu_cxx_ldbl128 { }
++  using namespace __gnu_cxx_ldbl128 __attribute__((__strong__));
++}
++#else
++# define _GLIBCXX_LDBL_NAMESPACE
++# define _GLIBCXX_BEGIN_LDBL_NAMESPACE
++# define _GLIBCXX_END_LDBL_NAMESPACE
++#endif
++
+ // Allow use of "export template." This is currently not a feature
+ // that g++ supports.
+ // #define _GLIBCXX_EXPORT_TEMPLATE 1
+diff -urN libstdc++-v3.orig/include/bits/locale_facets.h libstdc++-v3/include/bits/locale_facets.h
+--- libstdc++-v3.orig/include/bits/locale_facets.h	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/include/bits/locale_facets.h	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Locale support -*- C++ -*-
+ 
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -1910,6 +1910,7 @@
+       ~numpunct_byname() { }
+     };
+ 
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+   /**
+    *  @brief  Facet for parsing number strings.
+    *
+@@ -2176,13 +2177,27 @@
+       do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ 	     double&) const;
+ 
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      __do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
++	       double&) const;
++#else
+       virtual iter_type
+       do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ 	     long double&) const;
++#endif
+ 
+       virtual iter_type
+       do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ 	     void*&) const;
++
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
++	     long double&) const;
++#endif
+       //@}
+     };
+ 
+@@ -2438,17 +2453,30 @@
+       virtual iter_type
+       do_put(iter_type, ios_base&, char_type __fill, double __v) const;
+ 
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      __do_put(iter_type, ios_base&, char_type __fill, double __v) const;
++#else
+       virtual iter_type
+       do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
++#endif
+ 
+       virtual iter_type
+       do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
++
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
++#endif
+       //@}
+     };
+ 
+   template <typename _CharT, typename _OutIter>
+     locale::id num_put<_CharT, _OutIter>::id;
+ 
++_GLIBCXX_END_LDBL_NAMESPACE
+ 
+   /**
+    *  @brief  Facet for localized string comparison.
+@@ -3953,6 +3981,7 @@
+   template<typename _CharT, bool _Intl>
+     const bool moneypunct_byname<_CharT, _Intl>::intl;
+ 
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+   /**
+    *  @brief  Facet for parsing monetary amounts.
+    *
+@@ -4064,9 +4093,16 @@
+        *  value.  This function is a hook for derived classes to change the
+        *  value returned.  @see get() for details.
+        */
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      __do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
++	       ios_base::iostate& __err, double& __units) const;
++#else
+       virtual iter_type
+       do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+ 	     ios_base::iostate& __err, long double& __units) const;
++#endif
+ 
+       /**
+        *  @brief  Read and parse a monetary value.
+@@ -4079,6 +4115,13 @@
+       do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+ 	     ios_base::iostate& __err, string_type& __digits) const;
+ 
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
++	     ios_base::iostate& __err, long double& __units) const;
++#endif
++
+       template<bool _Intl>
+         iter_type
+         _M_extract(iter_type __s, iter_type __end, ios_base& __io,
+@@ -4191,9 +4234,16 @@
+        *  @param  units  Place to store result of parsing.
+        *  @return  Iterator after writing.
+        */
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
++	       double __units) const;
++#else
+       virtual iter_type
+       do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+ 	     long double __units) const;
++#endif
+ 
+       /**
+        *  @brief  Format and output a monetary value.
+@@ -4217,6 +4267,13 @@
+       do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+ 	     const string_type& __digits) const;
+ 
++      // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++      virtual iter_type
++      do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
++	     long double __units) const;
++#endif
++
+       template<bool _Intl>
+         iter_type
+         _M_insert(iter_type __s, ios_base& __io, char_type __fill,
+@@ -4226,6 +4283,8 @@
+   template<typename _CharT, typename _OutIter>
+     locale::id money_put<_CharT, _OutIter>::id;
+ 
++_GLIBCXX_END_LDBL_NAMESPACE
++
+   /**
+    *  @brief  Messages facet base class providing catalog typedef.
+    */
+diff -urN libstdc++-v3.orig/include/bits/locale_facets.tcc libstdc++-v3/include/bits/locale_facets.tcc
+--- libstdc++-v3.orig/include/bits/locale_facets.tcc	2005-09-30 08:39:52.000000000 +0000
++++ libstdc++-v3/include/bits/locale_facets.tcc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Locale support -*- C++ -*-
+ 
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -272,6 +272,8 @@
+   __verify_grouping(const char* __grouping, size_t __grouping_size,
+ 		    const string& __grouping_tmp);
+ 
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
++
+   template<typename _CharT, typename _InIter>
+     _InIter
+     num_get<_CharT, _InIter>::
+@@ -446,6 +448,8 @@
+       return __beg;
+     }
+ 
++_GLIBCXX_END_LDBL_NAMESPACE
++
+   template<typename _ValueT>
+     struct __to_unsigned_type
+     { typedef _ValueT __type; };
+@@ -460,6 +464,8 @@
+     { typedef unsigned long long __type; };
+ #endif
+ 
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
++
+   template<typename _CharT, typename _InIter>
+     template<typename _ValueT>
+       _InIter
+@@ -772,6 +778,21 @@
+       return __beg;
+     }
+ 
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++  template<typename _CharT, typename _InIter>
++    _InIter
++    num_get<_CharT, _InIter>::
++    __do_get(iter_type __beg, iter_type __end, ios_base& __io,
++	     ios_base::iostate& __err, double& __v) const
++    {
++      string __xtrc;
++      __xtrc.reserve(32);
++      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
++      std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
++      return __beg;
++    }
++#endif
++
+   template<typename _CharT, typename _InIter>
+     _InIter
+     num_get<_CharT, _InIter>::
+@@ -822,6 +843,8 @@
+       __len = static_cast<int>(__w);
+     }
+ 
++_GLIBCXX_END_LDBL_NAMESPACE
++
+   // Forwarding functions to peel signed from unsigned integer types and
+   // either cast or compute the absolute value for the former, depending
+   // on __basefield.
+@@ -911,6 +934,8 @@
+       return __bufend - __buf;
+     }
+ 
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
++
+   template<typename _CharT, typename _OutIter>
+     void
+     num_put<_CharT, _OutIter>::
+@@ -1233,6 +1258,14 @@
+     do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+     { return _M_insert_float(__s, __io, __fill, char(), __v); }
+ 
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++  template<typename _CharT, typename _OutIter>
++    _OutIter
++    num_put<_CharT, _OutIter>::
++    __do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
++    { return _M_insert_float(__s, __io, __fill, char(), __v); }
++#endif
++
+   template<typename _CharT, typename _OutIter>
+     _OutIter
+     num_put<_CharT, _OutIter>::
+@@ -1474,6 +1507,23 @@
+ 	return __beg;
+       }
+ 
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++  template<typename _CharT, typename _InIter>
++    _InIter
++    money_get<_CharT, _InIter>::
++    __do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
++	     ios_base::iostate& __err, double& __units) const
++    {
++      string __str;
++      if (__intl)
++	__beg = _M_extract<true>(__beg, __end, __io, __err, __str);
++      else
++	__beg = _M_extract<false>(__beg, __end, __io, __err, __str);
++      std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale());
++      return __beg;
++    }
++#endif
++
+   template<typename _CharT, typename _InIter>
+     _InIter
+     money_get<_CharT, _InIter>::
+@@ -1678,7 +1728,18 @@
+ 	__io.width(0);
+ 	return __s;    
+       }
+-  
++
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++  template<typename _CharT, typename _OutIter>
++    _OutIter
++    money_put<_CharT, _OutIter>::
++    __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
++	     double __units) const
++    {
++      return this->do_put(__s, __intl, __io, __fill, (long double) __units);
++    }
++#endif
++
+   template<typename _CharT, typename _OutIter>
+     _OutIter
+     money_put<_CharT, _OutIter>::
+@@ -1726,6 +1787,7 @@
+     { return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
+ 	            : _M_insert<false>(__s, __io, __fill, __digits); }
+ 
++_GLIBCXX_END_LDBL_NAMESPACE
+ 
+   // NB: Not especially useful. Without an ios_base object or some
+   // kind of locale reference, we are left clawing at the air where
+@@ -2511,12 +2573,12 @@
+   extern template class moneypunct<char, true>;
+   extern template class moneypunct_byname<char, false>;
+   extern template class moneypunct_byname<char, true>;
+-  extern template class money_get<char>;
+-  extern template class money_put<char>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE money_get<char>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE money_put<char>;
+   extern template class numpunct<char>;
+   extern template class numpunct_byname<char>;
+-  extern template class num_get<char>;
+-  extern template class num_put<char>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE num_get<char>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE num_put<char>;
+   extern template class __timepunct<char>;
+   extern template class time_put<char>;
+   extern template class time_put_byname<char>;
+@@ -2638,12 +2700,12 @@
+   extern template class moneypunct<wchar_t, true>;
+   extern template class moneypunct_byname<wchar_t, false>;
+   extern template class moneypunct_byname<wchar_t, true>;
+-  extern template class money_get<wchar_t>;
+-  extern template class money_put<wchar_t>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE money_get<wchar_t>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE money_put<wchar_t>;
+   extern template class numpunct<wchar_t>;
+   extern template class numpunct_byname<wchar_t>;
+-  extern template class num_get<wchar_t>;
+-  extern template class num_put<wchar_t>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE num_get<wchar_t>;
++  extern template class _GLIBCXX_LDBL_NAMESPACE num_put<wchar_t>;
+   extern template class __timepunct<wchar_t>;
+   extern template class time_put<wchar_t>;
+   extern template class time_put_byname<wchar_t>;
+diff -urN libstdc++-v3.orig/include/bits/localefwd.h libstdc++-v3/include/bits/localefwd.h
+--- libstdc++-v3.orig/include/bits/localefwd.h	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/include/bits/localefwd.h	2006-10-27 14:27:17.000000000 +0000
+@@ -129,10 +129,12 @@
+     class codecvt_byname;
+ 
+   // 22.2.2 and 22.2.3 numeric
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+     class num_get;
+   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+     class num_put;
++_GLIBCXX_END_LDBL_NAMESPACE
+   template<typename _CharT> class numpunct;
+   template<typename _CharT> class numpunct_byname;
+ 
+@@ -155,10 +157,12 @@
+ 
+   // 22.2.6 money
+   class money_base;
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+   template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
+     class money_get;
+   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+     class money_put;
++_GLIBCXX_END_LDBL_NAMESPACE
+   template<typename _CharT, bool _Intl = false>
+     class moneypunct;
+   template<typename _CharT, bool _Intl = false>
+diff -urN libstdc++-v3.orig/src/Makefile.am libstdc++-v3/src/Makefile.am
+--- libstdc++-v3.orig/src/Makefile.am	2006-10-27 14:26:17.000000000 +0000
++++ libstdc++-v3/src/Makefile.am	2006-10-27 14:27:17.000000000 +0000
+@@ -35,10 +35,15 @@
+ 		$(port_specific_symbol_files)
+ 	cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
+ 	if test "x$(port_specific_symbol_files)" != x; then \
+-	  sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
+-	  sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
+-	  cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
+-	  rm tmp.top tmp.bottom; \
++	  if grep '^# Appended to version file.' \
++	       $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
++	    cat $(port_specific_symbol_files) >> $@; \
++	  else \
++	    sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
++	    sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
++	    cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
++	    rm tmp.top tmp.bottom; \
++	  fi; \
+ 	fi
+ 
+ if ENABLE_SYMVERS_GNU
+@@ -113,6 +118,12 @@
+ basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
+ 	$(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
+ 
++if GLIBCXX_LDBL_COMPAT
++ldbl_compat_sources = compatibility-ldbl.cc
++else
++ldbl_compat_sources =
++endif
++
+ # Sources present in the src directory.
+ sources = \
+ 	bitmap_allocator.cc \
+@@ -160,7 +171,8 @@
+ 	wlocale-inst.cc \
+ 	wstring-inst.cc \
+ 	${host_sources} \
+-	${host_sources_extra}
++	${host_sources_extra} \
++	${ldbl_compat_sources}
+ 
+ VPATH = $(top_srcdir)/src:$(top_srcdir)
+ 
+@@ -192,6 +204,15 @@
+ concept-inst.o: concept-inst.cc
+ 	$(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+ 
++if GLIBCXX_LDBL_COMPAT
++# Use special rules for compatibility-ldbl.cc compilation, as we need to
++# pass -mlong-double-64.
++compatibility-ldbl.lo: compatibility-ldbl.cc
++	$(LTCXXCOMPILE) -mlong-double-64 -c $<
++compatibility-ldbl.o: compatibility-ldbl.cc
++	$(CXXCOMPILE) -mlong-double-64 -c $<
++endif
++
+ # AM_CXXFLAGS needs to be in each subdirectory so that it can be
+ # modified in a per-library or per-sub-library way.  Need to manually
+ # set this option because CONFIG_CXXFLAGS has to be after
+diff -urN libstdc++-v3.orig/src/Makefile.in libstdc++-v3/src/Makefile.in
+--- libstdc++-v3.orig/src/Makefile.in	2006-10-27 14:26:17.000000000 +0000
++++ libstdc++-v3/src/Makefile.in	2006-10-27 14:27:17.000000000 +0000
+@@ -59,11 +59,27 @@
+ am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
+ toolexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
++am__libstdc___la_SOURCES_DIST = bitmap_allocator.cc pool_allocator.cc \
++	mt_allocator.cc codecvt.cc compatibility.cc complex_io.cc \
++	ctype.cc debug.cc debug_list.cc functexcept.cc \
++	globals_locale.cc globals_io.cc ios.cc ios_failure.cc \
++	ios_init.cc ios_locale.cc limits.cc list.cc locale.cc \
++	locale_init.cc locale_facets.cc localename.cc stdexcept.cc \
++	strstream.cc tree.cc allocator-inst.cc concept-inst.cc \
++	fstream-inst.cc ext-inst.cc ios-inst.cc iostream-inst.cc \
++	istream-inst.cc istream.cc locale-inst.cc locale-misc-inst.cc \
++	misc-inst.cc ostream-inst.cc sstream-inst.cc streambuf-inst.cc \
++	streambuf.cc string-inst.cc valarray-inst.cc wlocale-inst.cc \
++	wstring-inst.cc atomicity.cc codecvt_members.cc \
++	collate_members.cc ctype_members.cc messages_members.cc \
++	monetary_members.cc numeric_members.cc time_members.cc \
++	basic_file.cc c++locale.cc compatibility-ldbl.cc
+ am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
+ 	ctype_members.lo messages_members.lo monetary_members.lo \
+ 	numeric_members.lo time_members.lo
+ am__objects_2 = basic_file.lo c++locale.lo
+-am__objects_3 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
++@GLIBCXX_LDBL_COMPAT_TRUE@am__objects_3 = compatibility-ldbl.lo
++am__objects_4 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
+ 	codecvt.lo compatibility.lo complex_io.lo ctype.lo debug.lo \
+ 	debug_list.lo functexcept.lo globals_locale.lo globals_io.lo \
+ 	ios.lo ios_failure.lo ios_init.lo ios_locale.lo limits.lo \
+@@ -74,8 +90,9 @@
+ 	locale-inst.lo locale-misc-inst.lo misc-inst.lo \
+ 	ostream-inst.lo sstream-inst.lo streambuf-inst.lo streambuf.lo \
+ 	string-inst.lo valarray-inst.lo wlocale-inst.lo \
+-	wstring-inst.lo $(am__objects_1) $(am__objects_2)
+-am_libstdc___la_OBJECTS = $(am__objects_3)
++	wstring-inst.lo $(am__objects_1) $(am__objects_2) \
++	$(am__objects_3)
++am_libstdc___la_OBJECTS = $(am__objects_4)
+ libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+ depcomp =
+@@ -84,7 +101,7 @@
+ 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+ CXXLD = $(CXX)
+ SOURCES = $(libstdc___la_SOURCES)
+-DIST_SOURCES = $(libstdc___la_SOURCES)
++DIST_SOURCES = $(am__libstdc___la_SOURCES_DIST)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+@@ -152,6 +169,8 @@
+ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
+ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
+ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
++GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@
++GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -302,6 +321,8 @@
+ 	basic_file.cc \
+ 	c++locale.cc
+ 
++@GLIBCXX_LDBL_COMPAT_FALSE@ldbl_compat_sources = 
++@GLIBCXX_LDBL_COMPAT_TRUE@ldbl_compat_sources = compatibility-ldbl.cc
+ 
+ # Sources present in the src directory.
+ sources = \
+@@ -350,7 +371,8 @@
+ 	wlocale-inst.cc \
+ 	wstring-inst.cc \
+ 	${host_sources} \
+-	${host_sources_extra}
++	${host_sources_extra} \
++	${ldbl_compat_sources}
+ 
+ libstdc___la_SOURCES = $(sources)
+ libstdc___la_LIBADD = \
+@@ -679,10 +701,15 @@
+ 		$(port_specific_symbol_files)
+ 	cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
+ 	if test "x$(port_specific_symbol_files)" != x; then \
+-	  sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
+-	  sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
+-	  cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
+-	  rm tmp.top tmp.bottom; \
++	  if grep '^# Appended to version file.' \
++	       $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
++	    cat $(port_specific_symbol_files) >> $@; \
++	  else \
++	    sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
++	    sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
++	    cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
++	    rm tmp.top tmp.bottom; \
++	  fi; \
+ 	fi
+ @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@libstdc++-symbol.explist : libstdc++-symbol.ver \
+ @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@		${glibcxx_srcdir}/scripts/make_exports.pl \
+@@ -735,6 +762,13 @@
+ concept-inst.o: concept-inst.cc
+ 	$(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+ 
++# Use special rules for compatibility-ldbl.cc compilation, as we need to
++# pass -mlong-double-64.
++@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc
++@GLIBCXX_LDBL_COMPAT_TRUE@	$(LTCXXCOMPILE) -mlong-double-64 -c $<
++@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.o: compatibility-ldbl.cc
++@GLIBCXX_LDBL_COMPAT_TRUE@	$(CXXCOMPILE) -mlong-double-64 -c $<
++
+ # Added bits to build debug library.
+ @GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug
+ @GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug
+diff -urN libstdc++-v3.orig/src/compatibility-ldbl.cc libstdc++-v3/src/compatibility-ldbl.cc
+--- libstdc++-v3.orig/src/compatibility-ldbl.cc	1970-01-01 00:00:00.000000000 +0000
++++ libstdc++-v3/src/compatibility-ldbl.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -0,0 +1,73 @@
++// Compatibility symbols for -mlong-double-64 compatibility -*- C++ -*-
++
++// Copyright (C) 2006
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library 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.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#include <locale>
++
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#ifdef __LONG_DOUBLE_128__
++#error "compatibility-ldbl.cc must be compiled with -mlong-double-64"
++#endif
++
++namespace std
++{
++#define C char
++  template class num_get<C, istreambuf_iterator<C> >;
++  template class num_put<C, ostreambuf_iterator<C> >;
++  template class money_get<C, istreambuf_iterator<C> >;
++  template class money_put<C, ostreambuf_iterator<C> >;
++  template const num_put<C>& use_facet<num_put<C> >(const locale&);
++  template const num_get<C>& use_facet<num_get<C> >(const locale&);
++  template const money_put<C>& use_facet<money_put<C> >(const locale&);
++  template const money_get<C>& use_facet<money_get<C> >(const locale&);
++  template bool has_facet<num_put<C> >(const locale&);
++  template bool has_facet<num_get<C> >(const locale&);
++  template bool has_facet<money_put<C> >(const locale&);
++  template bool has_facet<money_get<C> >(const locale&);
++#undef C
++#ifdef _GLIBCXX_USE_WCHAR_T
++#define C wchar_t
++  template class num_get<C, istreambuf_iterator<C> >;
++  template class num_put<C, ostreambuf_iterator<C> >;
++  template class money_get<C, istreambuf_iterator<C> >;
++  template class money_put<C, ostreambuf_iterator<C> >;
++  template const num_put<C>& use_facet<num_put<C> >(const locale&);
++  template const num_get<C>& use_facet<num_get<C> >(const locale&);
++  template const money_put<C>& use_facet<money_put<C> >(const locale&);
++  template const money_get<C>& use_facet<money_get<C> >(const locale&);
++  template bool has_facet<num_put<C> >(const locale&);
++  template bool has_facet<num_get<C> >(const locale&);
++  template bool has_facet<money_put<C> >(const locale&);
++  template bool has_facet<money_get<C> >(const locale&);
++#undef C
++#endif
++}
++
++#endif
+diff -urN libstdc++-v3.orig/src/compatibility.cc libstdc++-v3/src/compatibility.cc
+--- libstdc++-v3.orig/src/compatibility.cc	2005-11-17 20:10:51.000000000 +0000
++++ libstdc++-v3/src/compatibility.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Compatibility symbols for previous versions -*- C++ -*-
+ 
+-// Copyright (C) 2005
++// Copyright (C) 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -49,6 +49,7 @@
+ #include <istream>
+ #include <fstream>
+ #include <sstream>
++#include <cmath>
+ 
+ namespace std
+ {
+@@ -362,6 +363,107 @@
+ 
+ #endif
+ 
++// gcc-4.1.0
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \
++extern "C" double						\
++__ ## name ## l_wrapper argdecl					\
++{								\
++  return name args;						\
++}								\
++asm (".symver __" #name "l_wrapper, " #name "l@" #ver)
++
++#define _GLIBCXX_MATHL_WRAPPER1(name, ver) \
++  _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver)
++
++#define _GLIBCXX_MATHL_WRAPPER2(name, ver) \
++  _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver)
++
++#ifdef _GLIBCXX_HAVE_ACOSL
++_GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_ASINL
++_GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_ATAN2L
++_GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_ATANL
++_GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_CEILL
++_GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_COSHL
++_GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_COSL
++_GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_EXPL
++_GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_FLOORL
++_GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_FMODL
++_GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_FREXPL
++_GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_HYPOTL
++_GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_LDEXPL
++_GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_LOG10L
++_GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_LOGL
++_GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_MODFL
++_GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_POWL
++_GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_SINHL
++_GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_SINL
++_GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_SQRTL
++_GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_TANHL
++_GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_TANL
++_GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4);
++#endif
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++extern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[];
++extern void *_ZTVN10__cxxabiv119__pointer_type_infoE[];
++extern __attribute__((used, weak)) const char _ZTSe[2] = "e";
++extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
++extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
++extern __attribute__((used, weak)) const void *_ZTIe[2]
++  = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
++      (void *) _ZTSe };
++extern __attribute__((used, weak)) const void *_ZTIPe[4]
++  = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
++      (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
++extern __attribute__((used, weak)) const void *_ZTIPKe[4]
++  = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
++      (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
++
+ #ifdef __APPLE__
+ #if (defined(__ppc__) || defined (__ppc64__)) && defined (PIC)
+ /* __eprintf shouldn't have been made visible from libstdc++, or
+diff -urN libstdc++-v3.orig/src/complex_io.cc libstdc++-v3/src/complex_io.cc
+--- libstdc++-v3.orig/src/complex_io.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/complex_io.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // The template and inlines for the -*- C++ -*- complex number classes.
+ 
+-// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
++// Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -91,3 +91,20 @@
+                const complex<long double>&);
+ #endif //_GLIBCXX_USE_WCHAR_T
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++_GLIBCXX_LDBL_COMPAT (_ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E,
++		      _ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E);
++_GLIBCXX_LDBL_COMPAT (_ZStlsIdwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E,
++		      _ZStlsIewSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E);
++_GLIBCXX_LDBL_COMPAT (_ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E,
++		      _ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E);
++_GLIBCXX_LDBL_COMPAT (_ZStrsIdwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E,
++		      _ZStrsIewSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/src/istream-inst.cc libstdc++-v3/src/istream-inst.cc
+--- libstdc++-v3.orig/src/istream-inst.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/istream-inst.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Explicit instantiation file.
+ 
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -68,3 +68,19 @@
+   template wistream& operator>>(wistream&, _Setw);
+ #endif
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++_GLIBCXX_LDBL_COMPAT (_ZNSirsERd, _ZNSirsERe);
++_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_istreamIwSt11char_traitsIwEErsERd,
++		      _ZNSt13basic_istreamIwSt11char_traitsIwEErsERe);
++// These 2 are in GCC 4.2+ only so far
++// _GLIBCXX_LDBL_COMPAT (_ZNSi10_M_extractIdEERSiRT_,
++//			 _ZNSi10_M_extractIeEERSiRT_);
++// _GLIBCXX_LDBL_COMPAT (_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIdEERS2_RT_,
++//			 _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIeEERS2_RT_);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/src/limits.cc libstdc++-v3/src/limits.cc
+--- libstdc++-v3.orig/src/limits.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/limits.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Static data members of -*- C++ -*- numeric_limits classes
+ 
+-// Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
++// Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -447,3 +447,34 @@
+   const bool numeric_limits<long double>::tinyness_before;
+   const float_round_style numeric_limits<long double>::round_style;
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
++  extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
++  __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
++_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
++_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
++_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
++_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
++_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
++_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
++_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
++_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
++_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
++_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
++_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/src/locale-inst.cc libstdc++-v3/src/locale-inst.cc
+--- libstdc++-v3.orig/src/locale-inst.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/locale-inst.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Locale support -*- C++ -*-
+ 
+-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -37,6 +37,7 @@
+ // Instantiation configuration.
+ #ifndef C
+ # define C char
++# define C_is_char
+ #endif
+ 
+ namespace std
+@@ -48,6 +49,7 @@
+   template struct __moneypunct_cache<C, true>;
+   template class moneypunct_byname<C, false>;
+   template class moneypunct_byname<C, true>;
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+   template class money_get<C, istreambuf_iterator<C> >;
+   template class money_put<C, ostreambuf_iterator<C> >;
+   template
+@@ -73,11 +75,13 @@
+     money_put<C, ostreambuf_iterator<C> >::
+     _M_insert<false>(ostreambuf_iterator<C>, ios_base&, C, 
+ 		     const string_type&) const;
++_GLIBCXX_END_LDBL_NAMESPACE
+ 
+   // numpunct, numpunct_byname, num_get, and num_put
+   template class numpunct<C>;
+   template struct __numpunct_cache<C>;
+   template class numpunct_byname<C>;
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+   template class num_get<C, istreambuf_iterator<C> >;
+   template class num_put<C, ostreambuf_iterator<C> >; 
+   template
+@@ -161,7 +165,8 @@
+     num_put<C, ostreambuf_iterator<C> >::
+     _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char, 
+ 		    long double) const;
+-  
++_GLIBCXX_END_LDBL_NAMESPACE
++
+   // time_get and time_put
+   template class __timepunct<C>;
+   template struct __timepunct_cache<C>;
+@@ -314,3 +319,44 @@
+ 		  ios_base::fmtflags, bool);
+ #endif
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined C_is_char
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_,
++		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_,
++		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_,
++		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_,
++		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_,
++		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_,
++		     _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++		     _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++		     _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs,
++		     _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs,
++		     _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/src/locale-misc-inst.cc libstdc++-v3/src/locale-misc-inst.cc
+--- libstdc++-v3.orig/src/locale-misc-inst.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/locale-misc-inst.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,7 @@
+ // Locale support -*- C++ -*-
+ 
+-// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2006
++// Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -45,3 +46,19 @@
+     __convert_from_v(char*, const int, const char*, long double, 
+ 		     const __c_locale&, int);
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++# if _GLIBCXX_C_LOCALE_GNU
++_GLIBCXX_LDBL_COMPAT(_ZSt16__convert_from_vIdEiPciPKcT_RKP15__locale_structi,
++		     _ZSt16__convert_from_vIeEiPciPKcT_RKP15__locale_structi);
++# else
++_GLIBCXX_LDBL_COMPAT(_ZSt16__convert_from_vIdEiPciPKcT_RKPii,
++		     _ZSt16__convert_from_vIeEiPciPKcT_RKPii);
++# endif
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/src/locale.cc libstdc++-v3/src/locale.cc
+--- libstdc++-v3.orig/src/locale.cc	2006-03-12 16:56:08.000000000 +0000
++++ libstdc++-v3/src/locale.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -41,6 +41,21 @@
+   static __glibcxx_mutex_define_initialized(locale_cache_mutex);
+ }
+ 
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++# define _GLIBCXX_LOC_ID(mangled) extern std::locale::id mangled
++_GLIBCXX_LOC_ID (_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++# ifdef _GLIBCXX_USE_WCHAR_T
++_GLIBCXX_LOC_ID (_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++# endif
++#endif
++
+ namespace std 
+ {
+   // Definitions for static const data members of locale.
+@@ -397,9 +412,29 @@
+   locale::id::_M_id() const
+   {
+     if (!_M_index)
+-      _M_index = 1 + __gnu_cxx::__exchange_and_add(&_S_refcount, 1);
++      {
++	// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++	locale::id *f = 0;
++# define _GLIBCXX_SYNC_ID(facet, mangled) \
++	if (this == &::mangled)				\
++	  f = &facet::id
++	_GLIBCXX_SYNC_ID (num_get<char>, _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++	_GLIBCXX_SYNC_ID (num_put<char>, _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++	_GLIBCXX_SYNC_ID (money_get<char>, _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++	_GLIBCXX_SYNC_ID (money_put<char>, _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++# ifdef _GLIBCXX_USE_WCHAR_T
++	_GLIBCXX_SYNC_ID (num_get<wchar_t>, _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++	_GLIBCXX_SYNC_ID (num_put<wchar_t>, _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++	_GLIBCXX_SYNC_ID (money_get<wchar_t>, _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++	_GLIBCXX_SYNC_ID (money_put<wchar_t>, _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++# endif
++	if (f)
++	  _M_index = 1 + f->_M_id();
++	else
++#endif
++	  _M_index = 1 + __gnu_cxx::__exchange_and_add(&_S_refcount, 1);
++      }
+     return _M_index - 1;
+   }
+ } // namespace std
+-
+-
+diff -urN libstdc++-v3.orig/src/ostream-inst.cc libstdc++-v3/src/ostream-inst.cc
+--- libstdc++-v3.orig/src/ostream-inst.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/ostream-inst.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,6 @@
+ // Explicit instantiation file.
+ 
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -74,3 +74,19 @@
+   template wostream& operator<<(wostream&, _Setw);
+ #endif
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++_GLIBCXX_LDBL_COMPAT (_ZNSolsEd, _ZNSolsEe);
++_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEd,
++		      _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEe);
++// These 2 are in GCC 4.2+ only so far
++// _GLIBCXX_LDBL_COMPAT (_ZNSo9_M_insertIdEERSoT_,
++//			 _ZNSo9_M_insertIeEERSoT_);
++// _GLIBCXX_LDBL_COMPAT (_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIdEERS2_T_,
++//			 _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIeEERS2_T_);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urN libstdc++-v3.orig/src/wlocale-inst.cc libstdc++-v3/src/wlocale-inst.cc
+--- libstdc++-v3.orig/src/wlocale-inst.cc	2005-08-17 02:28:44.000000000 +0000
++++ libstdc++-v3/src/wlocale-inst.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -1,6 +1,7 @@
+ // Locale support -*- C++ -*-
+ 
+-// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2006
++// Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -36,4 +37,45 @@
+ #ifdef _GLIBCXX_USE_WCHAR_T
+ #define C wchar_t
+ #include "locale-inst.cc"
++
++// XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++  extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++		     _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_,
++		     _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_,
++		     _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_,
++		     _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_,
++		     _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_,
++		     _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_,
++		     _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIeEES3_S3_RSt8ios_basewcT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++		     _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++		     _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE,
++		     _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE,
++		     _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+ #endif
+diff -urN libstdc++-v3.orig/testsuite/testsuite_abi.cc libstdc++-v3/testsuite/testsuite_abi.cc
+--- libstdc++-v3.orig/testsuite/testsuite_abi.cc	2006-03-03 23:55:07.000000000 +0000
++++ libstdc++-v3/testsuite/testsuite_abi.cc	2006-10-27 14:27:17.000000000 +0000
+@@ -187,8 +187,11 @@
+       known_versions.push_back("GLIBCXX_3.4.6");
+       known_versions.push_back("GLIBCXX_3.4.7");
+       known_versions.push_back("GLIBCXX_3.4.8");
++      known_versions.push_back("GLIBCXX_LDBL_3.4");
++      known_versions.push_back("GLIBCXX_LDBL_3.4.7");
+       known_versions.push_back("CXXABI_1.3");
+       known_versions.push_back("CXXABI_1.3.1");
++      known_versions.push_back("CXXABI_LDBL_1.3");
+     }
+   compat_list::iterator begin = known_versions.begin();
+   compat_list::iterator end = known_versions.end();
+@@ -224,9 +227,7 @@
+ 	  // New version labels are ok. The rest are not.
+ 	  compat_list::iterator it2 = find(begin, end, test.name);
+ 	  if (it2 != end)
+-	    {
+-	      test.version_status = symbol::compatible;
+-	    }
++	    test.version_status = symbol::compatible;
+ 	  else
+ 	    test.version_status = symbol::incompatible;
+ 	}
+@@ -370,7 +371,7 @@
+ 	  added_names.erase(it);
+ 	}
+       else
+-	  missing_names.push_back(what);
++	missing_names.push_back(what);
+     }
+ 
+   // Check missing names for compatibility.
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-ice-hack.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-ice-hack.dpatch
@@ -0,0 +1,341 @@
+#! /bin/sh -e
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# DP: 2004-01-23  Jakub Jelinek  <jakub@redhat.com>
+# DP: 
+# DP: 	* system.h (ICE_EXIT_CODE): Define.
+# DP: 	* gcc.c (execute): Don't free first string early, but at the end
+# DP: 	of the function.  Call retry_ice if compiler exited with
+# DP: 	ICE_EXIT_CODE.
+# DP: 	(retry_ice): New function.
+# DP: 	* diagnostic.c (diagnostic_count_diagnostic,
+# DP: 	diagnostic_action_after_output, error_recursion): Exit with
+# DP: 	ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
+
+--- gcc/diagnostic.c.orig	2006-02-19 01:21:52.378523968 +0100
++++ gcc/diagnostic.c	2006-02-19 01:24:48.939682592 +0100
+@@ -257,14 +257,14 @@
+ 	       "See %s for instructions.\n", bug_report_url);
+       fnotice (stderr, "For Debian GNU/Linux specific bug reporting instructions,\n"
+ 	       "see %s.\n", debian_bug_report_url);
+-      exit (FATAL_EXIT_CODE);
++      exit (ICE_EXIT_CODE);
+ 
+     case DK_FATAL:
+       if (context->abort_on_error)
+ 	real_abort ();
+ 
+       fnotice (stderr, "compilation terminated.\n");
+-      exit (FATAL_EXIT_CODE);
++      exit (ICE_EXIT_CODE);
+ 
+     default:
+       gcc_unreachable ();
+--- gcc/gcc.c.orig	2006-02-19 01:21:52.377524120 +0100
++++ gcc/gcc.c	2006-02-19 01:22:35.519965472 +0100
+@@ -346,6 +346,9 @@
+ #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
+ static const char *convert_filename (const char *, int, int);
+ #endif
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++static void retry_ice (const char *prog, const char **argv);
++#endif
+ 
+ static const char *if_exists_spec_function (int, const char **);
+ static const char *if_exists_else_spec_function (int, const char **);
+@@ -2830,7 +2833,7 @@
+ 	    }
+ 	}
+ 
+-      if (string != commands[i].prog)
++      if (i && string != commands[i].prog)
+ 	free ((void *) string);
+     }
+ 
+@@ -2888,6 +2891,16 @@
+ 	else if (WIFEXITED (status)
+ 		 && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
+ 	  {
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++	    /* For ICEs in cc1, cc1obj, cc1plus see if it is
++	       reproducible or not.  */
++	    char *p;
++	    if (WEXITSTATUS (status) == ICE_EXIT_CODE
++		&& i == 0
++		&& (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
++		&& ! strncmp (p + 1, "cc1", 3))
++	      retry_ice (commands[0].prog, commands[0].argv);
++#endif
+ 	    if (WEXITSTATUS (status) > greatest_status)
+ 	      greatest_status = WEXITSTATUS (status);
+ 	    ret_code = -1;
+@@ -2908,6 +2921,9 @@
+ 	  }
+       }
+ 
++    if (commands[0].argv[0] != commands[0].prog)
++      free ((PTR) commands[0].argv[0]);
++
+     return ret_code;
+   }
+ }
+@@ -5889,6 +5905,224 @@
+   switches[switchnum].validated = 1;
+ }
+ 
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++#define RETRY_ICE_ATTEMPTS 2
++
++static void
++retry_ice (const char *prog, const char **argv)
++{
++  int nargs, out_arg = -1, quiet = 0, attempt;
++  int pid, retries, sleep_interval;
++  const char **new_argv;
++  char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2];
++
++  if (input_filename == NULL || ! strcmp (input_filename, "-"))
++    return;
++
++  for (nargs = 0; argv[nargs] != NULL; ++nargs)
++    /* Only retry compiler ICEs, not preprocessor ones.  */
++    if (! strcmp (argv[nargs], "-E"))
++      return;
++    else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o')
++      {
++	if (out_arg == -1)
++	  out_arg = nargs;
++	else
++	  return;
++      }
++    /* If the compiler is going to output any time information,
++       it might vary between invocations.  */
++    else if (! strcmp (argv[nargs], "-quiet"))
++      quiet = 1;
++    else if (! strcmp (argv[nargs], "-ftime-report"))
++      return;
++
++  if (out_arg == -1 || !quiet)
++    return;
++
++  memset (temp_filenames, '\0', sizeof (temp_filenames));
++  new_argv = alloca ((nargs + 3) * sizeof (const char *));
++  memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
++  new_argv[nargs++] = "-frandom-seed=0";
++  new_argv[nargs] = NULL;
++  if (new_argv[out_arg][2] == '\0')
++    new_argv[out_arg + 1] = "-";
++  else
++    new_argv[out_arg] = "-o-";
++
++  for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt)
++    {
++      int fd = -1;
++      int status;
++
++      temp_filenames[attempt * 2] = make_temp_file (".out");
++      temp_filenames[attempt * 2 + 1] = make_temp_file (".err");
++
++      if (attempt == RETRY_ICE_ATTEMPTS)
++        {
++	  int i;
++	  int fd1, fd2;
++	  struct stat st1, st2;
++	  size_t n, len;
++	  char *buf;
++
++	  buf = xmalloc (8192);
++
++	  for (i = 0; i < 2; ++i)
++	    {
++	      fd1 = open (temp_filenames[i], O_RDONLY);
++	      fd2 = open (temp_filenames[2 + i], O_RDONLY);
++
++	      if (fd1 < 0 || fd2 < 0)
++		{
++		  i = -1;
++		  close (fd1);
++		  close (fd2);
++		  break;
++		}
++
++	      if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
++		{
++		  i = -1;
++		  close (fd1);
++		  close (fd2);
++		  break;
++		}
++
++	      if (st1.st_size != st2.st_size)
++		{
++		  close (fd1);
++		  close (fd2);
++		  break;
++		}
++
++	      len = 0;
++	      for (n = st1.st_size; n; n -= len)
++		{
++		  len = n;
++		  if (len > 4096)
++		    len = 4096;
++
++		  if (read (fd1, buf, len) != (int) len
++		      || read (fd2, buf + 4096, len) != (int) len)
++		    {
++		      i = -1;
++		      break;
++		    }
++
++		  if (memcmp (buf, buf + 4096, len) != 0)
++		    break;
++		}
++
++	      close (fd1);
++	      close (fd2);
++
++	      if (n)
++		break;
++	    }
++
++	  free (buf);
++	  if (i == -1)
++	    break;
++
++	  if (i != 2)
++	    {
++	      notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
++	      break;
++	    }
++
++          fd = open (temp_filenames[attempt * 2], O_RDWR);
++	  if (fd < 0)
++	    break;
++	  write (fd, "//", 2);
++	  for (i = 0; i < nargs; i++)
++	    {
++	      write (fd, " ", 1);
++	      write (fd, new_argv[i], strlen (new_argv[i]));
++	    }
++	  write (fd, "\n", 1);
++	  new_argv[nargs] = "-E";
++	  new_argv[nargs + 1] = NULL;
++        }
++
++      /* Fork a subprocess; wait and retry if it fails.  */
++      sleep_interval = 1;
++      pid = -1;
++      for (retries = 0; retries < 4; retries++)
++	{
++	  pid = fork ();
++	  if (pid >= 0)
++	    break;
++	  sleep (sleep_interval);
++	  sleep_interval *= 2;
++	}
++
++      if (pid < 0)
++	break;
++      else if (pid == 0)
++	{
++	  if (attempt != RETRY_ICE_ATTEMPTS)
++	    fd = open (temp_filenames[attempt * 2], O_RDWR);
++	  if (fd < 0)
++	    exit (-1);
++	  if (fd != 1)
++	    {
++	      close (1);
++	      dup (fd);
++	      close (fd);
++	    }
++
++	  fd = open (temp_filenames[attempt * 2 + 1], O_RDWR);
++	  if (fd < 0)
++	    exit (-1);
++	  if (fd != 2)
++	    {
++	      close (2);
++	      dup (fd);
++	      close (fd);
++	    }
++
++	  if (prog == new_argv[0])
++	    execvp (prog, (char *const *) new_argv);
++	  else
++	    execv (new_argv[0], (char *const *) new_argv);
++	  exit (-1);
++	}
++
++      if (waitpid (pid, &status, 0) < 0)
++	break;
++
++      if (attempt < RETRY_ICE_ATTEMPTS
++	  && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE))
++	{
++	  notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
++	  break;
++	}
++      else if (attempt == RETRY_ICE_ATTEMPTS)
++	{
++	  close (fd);
++	  if (WIFEXITED (status)
++	      && WEXITSTATUS (status) == SUCCESS_EXIT_CODE)
++	    {
++	      notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n",
++		      temp_filenames[attempt * 2]);
++	      /* Make sure it is not deleted.  */
++	      free (temp_filenames[attempt * 2]);
++	      temp_filenames[attempt * 2] = NULL;
++	      break;
++	    }
++	}
++    }
++
++  for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++)
++    if (temp_filenames[attempt])
++      {
++	unlink (temp_filenames[attempt]);
++	free (temp_filenames[attempt]);
++      }
++}
++#endif
++
+ /* Search for a file named NAME trying various prefixes including the
+    user's -B prefix and some standard ones.
+    Return the absolute file name found.  If nothing is found, return NAME.  */
+--- gcc/system.h.orig	2006-02-19 01:21:52.370525184 +0100
++++ gcc/system.h	2006-02-19 01:22:35.513966384 +0100
+@@ -227,6 +227,10 @@
+ # endif
+ #endif
+ 
++#ifndef ICE_EXIT_CODE
++# define ICE_EXIT_CODE 27
++#endif
++
+ #ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
--- gcc-4.1-4.1.2.orig/debian/patches/no-getipinfo.dpatch
+++ gcc-4.1-4.1.2/debian/patches/no-getipinfo.dpatch
@@ -0,0 +1,41 @@
+#! /bin/sh -e
+
+# DP: On arm, hppa and ia64, don't use _Unwind_GetIPInfo in libstdc++
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Index: libstdc++-v3/libsupc++/eh_personality.cc
+===================================================================
+--- libstdc++-v3/libsupc++/eh_personality.cc	(revision 115653)
++++ libstdc++-v3/libsupc++/eh_personality.cc	(revision 115654)
+@@ -434,7 +434,11 @@
+   // Parse the LSDA header.
+   p = parse_lsda_header (context, language_specific_data, &info);
+   info.ttype_base = base_of_encoded_value (info.ttype_encoding, context);
++#ifdef HAVE_GETIPINFO
+   ip = _Unwind_GetIPInfo (context, &ip_before_insn);
++#else
++  ip = _Unwind_GetIP (context);
++#endif
+   if (! ip_before_insn)
+     --ip;
+   landing_pad = 0;
--- gcc-4.1-4.1.2.orig/debian/patches/multiarch-lib.dpatch
+++ gcc-4.1-4.1.2/debian/patches/multiarch-lib.dpatch
@@ -0,0 +1,52 @@
+#! /bin/sh -e
+
+# multiarch-lib.dpatch by Stephen Frost <sfrost@debian.org>
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN gcc.old/config/i386/t-linux64 gcc/config/i386/t-linux64
+--- gcc.old/config/i386/t-linux64	2002-11-28 15:47:02.000000000 +0100
++++ gcc/config/i386/t-linux64	2004-07-10 07:28:01.000000000 +0200
+@@ -6,7 +6,7 @@
+ 
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32 
+-MULTILIB_OSDIRNAMES = ../lib64 ../lib
++MULTILIB_OSDIRNAMES = x86_64-linux i486-linux
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+diff -urN gcc.old/config/t-linux gcc/config/t-linux
+--- gcc.old/config/t-linux	2004-05-04 18:09:38.000000000 +0200
++++ gcc/config/t-linux	2004-07-10 07:28:01.000000000 +0200
+@@ -11,3 +11,11 @@
+ LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
+   $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
+ LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
++
++MULTILIB_OPTIONS = m32
++MULTILIB_DIRNAMES = 32 
++MULTILIB_OSDIRNAMES = $TARGET_ARCH
++
++LIBGCC = stmp-multilib
++INSTALL_LIBGCC = install-multilib
++
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-java.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-java.dpatch
@@ -0,0 +1,180 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: java support for m68k
+# DP: - add m68k info to configure files
+# DP: - add sysdep/m68k/locks.h
+# DP: - boehm.c: don't use bitmap as gc_descr if pointer is misaligned
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+	cd ${dir} && touch libjava/configure
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/java/boehm.c            |    8 ++++
+ libjava/configure           |    3 +
+ libjava/configure.ac        |    3 +
+ libjava/configure.host      |    5 +++
+ libjava/sysdep/m68k/locks.h |   72 ++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 91 insertions(+)
+
+Index: gcc-4.1/libjava/sysdep/m68k/locks.h
+===================================================================
+--- /dev/null
++++ gcc-4.1/libjava/sysdep/m68k/locks.h
+@@ -0,0 +1,72 @@
++// locks.h - Thread synchronization primitives. m68k implementation.
++
++/* Copyright (C) 2006  Free Software Foundation
++
++   This file is part of libgcj.
++
++This software is copyrighted work licensed under the terms of the
++Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
++details.  */
++
++#ifndef __SYSDEP_LOCKS_H__
++#define __SYSDEP_LOCKS_H__
++
++/* Integer type big enough for object address.  */
++typedef size_t obj_addr_t __attribute__ ((aligned (4)));
++
++// Atomically replace *addr by new_val if it was initially equal to old.
++// Return true if the comparison succeeded.
++// Assumed to have acquire semantics, i.e. later memory operations
++// cannot execute before the compare_and_swap finishes.
++static inline bool
++compare_and_swap(volatile obj_addr_t *addr,
++		 obj_addr_t old, obj_addr_t new_val)
++{
++  char result;
++  __asm__ __volatile__("cas.l %2,%3,%0; seq %1"
++	      	: "+m" (*addr), "=d" (result), "+d" (old)
++		: "d" (new_val)
++		: "memory");
++  return (bool) result;
++}
++
++// Set *addr to new_val with release semantics, i.e. making sure
++// that prior loads and stores complete before this
++// assignment.
++// On m68k, the hardware shouldn't reorder reads and writes,
++// so we just have to convince gcc not to do it either.
++static inline void
++release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
++{
++  __asm__ __volatile__(" " : : : "memory");
++  *(addr) = new_val;
++}
++
++// Compare_and_swap with release semantics instead of acquire semantics.
++// On many architecture, the operation makes both guarantees, so the
++// implementation can be the same.
++static inline bool
++compare_and_swap_release(volatile obj_addr_t *addr,
++			 obj_addr_t old,
++			 obj_addr_t new_val)
++{
++  return compare_and_swap(addr, old, new_val);
++}
++
++// Ensure that subsequent instructions do not execute on stale
++// data that was loaded from memory before the barrier.
++// On m68k, the hardware ensures that reads are properly ordered.
++static inline void
++read_barrier(void)
++{
++}
++
++// Ensure that prior stores to memory are completed with respect to other
++// processors.
++static inline void
++write_barrier(void)
++{
++  // m68k does not reorder writes. We just need to ensure that gcc also doesn't.
++  __asm__ __volatile__(" " : : : "memory");
++}
++#endif
+--- ./gcc/java/boehm.c.old	2007-01-18 20:00:03.000000000 +0100
++++ ./gcc/java/boehm.c	2007-04-27 01:12:52.000000000 +0200
+@@ -98,6 +98,14 @@
+ 
+       offset = int_byte_position (field);
+       size_bytes = int_size_in_bytes (TREE_TYPE (field));
++
++      if (offset % (POINTER_SIZE / BITS_PER_UNIT))
++	{
++	  *all_bits_set = -1;
++	  *pointer_after_end = 1;
++	  break;
++	}
++
+       if (JREFERENCE_TYPE_P (TREE_TYPE (field))
+ 	  /* An `object' of type gnu.gcj.RawData is actually non-Java
+ 	     data.  */
+--- ./libjava/configure.host.old	2007-04-27 01:09:16.000000000 +0200
++++ ./libjava/configure.host	2007-04-27 01:12:52.000000000 +0200
+@@ -140,6 +140,10 @@
+ 	libgcj_interpreter=yes
+ 	enable_hash_synchronization_default=no
+ 	;;
++  m68k-*)
++	sysdeps_dir=m68k
++	libgcj_interpreter=yes
++	;;
+   powerpc64*-*)
+ 	sysdeps_dir=powerpc
+ 	libgcj_interpreter=yes
+@@ -196,6 +200,7 @@
+   ia64-* | \
+   x86_64*-linux* | \
+   hppa*-linux* | \
++  m68k*-linux* | \
+   sh-linux* | sh[34]*-linux*)
+   	can_unwind_signal=yes
+ 	libgcj_ld_symbolic='-Wl,-Bsymbolic'
+--- ./libjava/configure.ac.old	2007-04-27 01:09:08.000000000 +0200
++++ ./libjava/configure.ac	2007-04-27 01:14:06.000000000 +0200
+@@ -1549,6 +1549,9 @@
+  mips*-*-linux*)
+     SIGNAL_HANDLER=include/mips-signal.h
+     ;;
++ m68*-*-linux*)
++    SIGNAL_HANDLER=include/dwarf2-signal.h
++    ;;
+  powerpc*-*-darwin*)
+     SIGNAL_HANDLER=include/darwin-signal.h
+     ;;
+--- ./libjava/configure.old	2007-04-27 01:09:11.000000000 +0200
++++ ./libjava/configure	2007-04-27 01:14:35.000000000 +0200
+@@ -17393,6 +17393,9 @@
+  mips*-*-linux*)
+     SIGNAL_HANDLER=include/mips-signal.h
+     ;;
++ m68*-*-linux*)
++    SIGNAL_HANDLER=include/dwarf2-signal.h
++    ;;
+  powerpc*-*-darwin*)
+     SIGNAL_HANDLER=include/darwin-signal.h
+     ;;
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-save_pic.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-save_pic.dpatch
@@ -0,0 +1,51 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: gcc/config/m68k/m68k.c:
+# DP: correctly save the pic register, when not done by reload()
+# DP: (fixes _Unwind_RaiseException and thus exception handling)
+# DP: fixes 345574
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+---
+ gcc/config/m68k/m68k.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.c
++++ gcc-4.1/gcc/config/m68k/m68k.c
+@@ -466,7 +466,8 @@ m68k_save_reg (unsigned int regno, bool 
+ {
+   if (flag_pic && regno == PIC_OFFSET_TABLE_REGNUM)
+     {
+-      if (current_function_uses_pic_offset_table)
++      if (current_function_uses_pic_offset_table ||
++	  current_function_has_nonlocal_label)
+ 	return true;
+       if (!current_function_is_leaf && TARGET_ID_SHARED_LIBRARY)
+ 	return true;
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-jar.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-jar.dpatch
@@ -0,0 +1,106 @@
+#! /bin/sh -e
+
+# DP: gjar: support @ arguments.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+From: Christian Thalinger <twisti@complang.tuwien.ac.at>
+
+While building OpenJDK b16 I noticed that jar does not support @
+arguments.  OpenJDK e.g. uses it to import the binary plug files.
+
+This patch adds support for @filelist, where the file filelist may only
+contain files and not options, as the spec says.
+
+Index: libjava/classpath/tools/gnu/classpath/tools/jar/Main.java
+===================================================================
+RCS file: /cvsroot/classpath/classpath/tools/gnu/classpath/tools/jar/Main.java,v
+retrieving revision 1.9
+diff -u -3 -p -r1.9 Main.java
+--- libjava/classpath/tools/gnu/classpath/tools/jar/Main.java     31 Jan 2007 17:05:34 -0000     1.9
++++ libjava/classpath/tools/gnu/classpath/tools/jar/Main.java     23 Jul 2007 18:31:19 -0000
+@@ -47,6 +47,8 @@ import gnu.classpath.tools.getopt.Parser
+ 
+ import java.io.BufferedReader;
+ import java.io.File;
++import java.io.FileNotFoundException;
++import java.io.FileReader;
+ import java.io.InputStreamReader;
+ import java.io.IOException;
+ import java.text.MessageFormat;
+@@ -102,14 +104,51 @@ public class Main
+     public void notifyFile(String fileArgument)
+     {
+       Entry entry;
++
++      if (fileArgument.charAt(0) == '@')
++        {
++          BufferedReader br = null;
++          String filename;
++
++          try
++            {
++              br =
++                new BufferedReader(new FileReader(fileArgument.substring(1)));
++            }
++          catch (FileNotFoundException fnfe)
++            {
++              System.err.println(fnfe);
++              System.exit(1);
++            }
++
++          try
++            {
++              while ((filename = br.readLine()) != null)
++                addEntry(filename);
++            }
++          catch (IOException ioe)
++            {
++              ioe.printStackTrace();
++            }
++        }
++      else
++        {
++          addEntry(fileArgument);
++        }
++    }
++
++    private final void addEntry(String filename)
++    {
++      Entry entry;
++
+       if (changedDirectory != null)
+         {
+-          entry = new Entry(new File(changedDirectory, fileArgument),
+-                            fileArgument);
++          entry = new Entry(new File(changedDirectory, filename),
++                            filename);
+           changedDirectory = null;
+         }
+       else
+-        entry = new Entry(new File(fileArgument));
++        entry = new Entry(new File(filename));
+       entries.add(entry);
+     }
+   }
+
+
--- gcc-4.1-4.1.2.orig/debian/patches/fastjar-version.dpatch
+++ gcc-4.1-4.1.2/debian/patches/fastjar-version.dpatch
@@ -0,0 +1,47 @@
+#! /bin/sh -e
+
+# DP: Append GCC version to the fastjar version string.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- fastjar/configure.ac~	2004-07-07 05:16:28.000000000 +0200
++++ fastjar/configure.ac	2005-04-08 22:17:25.237925483 +0200
+@@ -1,7 +1,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_PREREQ(2.57)
+ AC_INIT(jartool.h)
+-AM_INIT_AUTOMAKE(fastjar, 0.92-gcc)
++AM_INIT_AUTOMAKE(fastjar, 0.92-gcc-4.1)
+ AM_CONFIG_HEADER(config.h)
+ 
+ dnl Checks for programs.
+--- fastjar/configure~	2004-11-05 05:14:05.000000000 +0100
++++ fastjar/configure	2005-04-08 22:17:26.987301478 +0200
+@@ -1546,7 +1546,7 @@
+ 
+ # Define the identity of the package.
+  PACKAGE=fastjar
+- VERSION=0.92-gcc
++ VERSION=0.92-gcc-4.1
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
--- gcc-4.1-4.1.2.orig/debian/patches/gpc-names.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gpc-names.dpatch
@@ -0,0 +1,117 @@
+#! /bin/sh -e
+
+# DP: versioned gpc names
+
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
+    -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1
+esac
+exit 0
+
+--- gcc/p/doc/en/gpc.texi.orig	2007-08-27 00:21:02.340767891 +0200
++++ gcc/p/doc/en/gpc.texi	2007-08-27 00:21:29.921183935 +0200
+@@ -23,11 +23,11 @@
+ 
+ @dircategory GNU programming tools
+ @direntry
+-* GPC: (gpc).                   The GNU Pascal Compiler.
++* GPC-4.1: (gpc-4.1).           The GNU Pascal Compiler (v2.1, based on GCC 4.1).
+ @end direntry
+ @dircategory Individual utilities
+ @direntry
+-* GPC: (gpc)Invoking GPC.       The GNU Pascal Compiler.
++* GPC-4.1: (gpc-4.1)Invoking GPC. The GNU Pascal Compiler (v2.1, based on GCC 4.1).
+ @end direntry
+ 
+ @c For FSF printing, turn on finalout (to get rid of the black
+--- gcc/p/Make-lang.in.orig	2007-08-27 00:21:02.340767891 +0200
++++ gcc/p/Make-lang.in	2007-08-27 00:23:19.412835592 +0200
+@@ -799,42 +799,43 @@
+ pascal.start.encap:
+ pascal.rest.encap: pascal.rts pascal.utils
+ 
+-pascal.info: $(srcdir)/p/doc/info/gpc.info \
+-             $(srcdir)/p/doc/info/gpcs.info \
+-             $(srcdir)/p/doc/info/gpcs-de.info \
+-             $(srcdir)/p/doc/info/gpc-hr.info \
+-             $(srcdir)/p/doc/info/gpcs-hr.info \
+-             $(srcdir)/p/doc/info/gpc-es.info \
+-             $(srcdir)/p/doc/info/gpcs-es.info
++iv=-4.1
++pascal.info: $(srcdir)/p/doc/info/gpc$(iv).info \
++             $(srcdir)/p/doc/info/gpcs$(iv).info \
++             $(srcdir)/p/doc/info/gpcs-de$(iv).info \
++             $(srcdir)/p/doc/info/gpc-hr$(iv).info \
++             $(srcdir)/p/doc/info/gpcs-hr$(iv).info \
++             $(srcdir)/p/doc/info/gpc-es$(iv).info \
++             $(srcdir)/p/doc/info/gpcs-es$(iv).info
+ pascal.dvi: gpc.dvi
+ 
+-$(srcdir)/p/doc/info/gpc.info: $(GPC_TEXI_EN)
++$(srcdir)/p/doc/info/gpc$(iv).info: $(GPC_TEXI_EN)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_EN) -o $(srcdir)/p/doc/info/gpc.info gpc.texi
++	$(MAKEINFO_EN) -o $(srcdir)/p/doc/info/gpc$(iv).info gpc.texi
+ 
+-$(srcdir)/p/doc/info/gpcs.info: $(GPC_TEXI_EN)
++$(srcdir)/p/doc/info/gpcs$(iv).info: $(GPC_TEXI_EN)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_EN) --no-split -o $(srcdir)/p/doc/info/gpcs.info gpcs.texi
++	$(MAKEINFO_EN) --no-split -o $(srcdir)/p/doc/info/gpcs$(iv).info gpcs.texi
+ 
+-$(srcdir)/p/doc/info/gpcs-de.info: $(GPC_TEXI_DE)
++$(srcdir)/p/doc/info/gpcs-de$(iv).info: $(GPC_TEXI_DE)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_DE) --no-split -o $(srcdir)/p/doc/info/gpcs-de.info gpcs.texi
++	$(MAKEINFO_DE) --no-split -o $(srcdir)/p/doc/info/gpcs-de$(iv).info gpcs.texi
+ 
+-$(srcdir)/p/doc/info/gpc-hr.info: $(GPC_TEXI_HR)
++$(srcdir)/p/doc/info/gpc-hr$(iv).info: $(GPC_TEXI_HR)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_HR) -o $(srcdir)/p/doc/info/gpc-hr.info gpc.texi
++	$(MAKEINFO_HR) -o $(srcdir)/p/doc/info/gpc-hr$(iv).info gpc.texi
+ 
+-$(srcdir)/p/doc/info/gpcs-hr.info: $(GPC_TEXI_HR)
++$(srcdir)/p/doc/info/gpcs-hr$(iv).info: $(GPC_TEXI_HR)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_HR) --no-split -o $(srcdir)/p/doc/info/gpcs-hr.info gpcs.texi
++	$(MAKEINFO_HR) --no-split -o $(srcdir)/p/doc/info/gpcs-hr$(iv).info gpcs.texi
+ 
+-$(srcdir)/p/doc/info/gpc-es.info: $(GPC_TEXI_ES)
++$(srcdir)/p/doc/info/gpc-es$(iv).info: $(GPC_TEXI_ES)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_ES) -o $(srcdir)/p/doc/info/gpc-es.info gpc.texi
++	$(MAKEINFO_ES) -o $(srcdir)/p/doc/info/gpc-es$(iv).info gpc.texi
+ 
+-$(srcdir)/p/doc/info/gpcs-es.info: $(GPC_TEXI_ES)
++$(srcdir)/p/doc/info/gpcs-es$(iv).info: $(GPC_TEXI_ES)
+ 	[ -d "$(srcdir)/p/doc/info" ] || $(srcdir)/p/script/mkdir-p "$(srcdir)/p/doc/info"
+-	$(MAKEINFO_ES) --no-split -o $(srcdir)/p/doc/info/gpcs-es.info gpcs.texi
++	$(MAKEINFO_ES) --no-split -o $(srcdir)/p/doc/info/gpcs-es$(iv).info gpcs.texi
+ 
+ gpc.dvi: $(GPC_TEXI_EN)
+ 	TEXINPUTS=$(srcdir)/p/doc:$(srcdir)/p/doc/images:$$TEXINPUTS \
+@@ -1023,11 +1024,11 @@
+ 	fi
+ 
+ pascal.install-info: pascal.install-info-man-dirs pascal.info
+-	rm -f $(DESTDIR)$(infodir)/gpc.info* $(DESTDIR)$(infodir)/gpcs.info* $(DESTDIR)$(infodir)/gpcs-de.info* $(DESTDIR)$(infodir)/gpcs-hr.info* $(DESTDIR)$(infodir)/gpcs-es.info*
+-	for f in `cd $(srcdir)/p/doc/info && echo gpc.info* gpcs*.info*`; do \
++	rm -f $(DESTDIR)$(infodir)/gpc*.info* $(DESTDIR)$(infodir)/gpcs*.info* $(DESTDIR)$(infodir)/gpcs-de*.info* $(DESTDIR)$(infodir)/gpcs-hr*.info* $(DESTDIR)$(infodir)/gpcs-es*.info*
++	for f in `cd $(srcdir)/p/doc/info && echo gpc$(iv).info* gpcs*.info*`; do \
+ 	  $(INSTALL_DATA) $(srcdir)/p/doc/info/$$f $(DESTDIR)$(infodir)/$$f || exit 1; \
+ 	done
+-	chmod a-x $(DESTDIR)$(infodir)/gpc.info* $(DESTDIR)$(infodir)/gpcs.info* $(DESTDIR)$(infodir)/gpcs-de.info* $(DESTDIR)$(infodir)/gpcs-hr.info* $(DESTDIR)$(infodir)/gpcs-es.info*
++	chmod a-x $(DESTDIR)$(infodir)/gpc*.info* $(DESTDIR)$(infodir)/gpcs*.info* $(DESTDIR)$(infodir)/gpcs-de*.info* $(DESTDIR)$(infodir)/gpcs-hr*.info* $(DESTDIR)$(infodir)/gpcs-es*.info*
+ 
+ pascal.install-man: pascal.install-info-man-dirs $(srcdir)/p/doc/en/gpc.1 $(srcdir)/p/doc/generated/gpc-run.1
+ 	-if [ -f gpc1$(exeext) ]; then \
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-maxhostnamelen.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-maxhostnamelen.dpatch
@@ -0,0 +1,61 @@
+#! /bin/sh -e
+
+# DP: libjava: Avoid dependency on MAXHOSTNAMELEN
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+libjava/ChangeLog
+
+2007-07-24  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* java/net/natVMInetAddressPosix.cc
+	(java::net::VMInetAddress::getLocalHostname) [!MAXHOSTNAMELEN]:
+	Allocate buffer dynamically.
+
+--- libjava/java/net/natVMInetAddressPosix.cc.orig	2007-01-26 15:27:19.000000000 +0000
++++ libjava/java/net/natVMInetAddressPosix.cc	2007-01-26 15:45:53.000000000 +0000
+@@ -47,10 +47,25 @@ java::net::VMInetAddress::getLocalHostname ()
+ {
+   char *chars;
+ #ifdef HAVE_GETHOSTNAME
++#ifdef MAXHOSTNAMELEN
+   char buffer[MAXHOSTNAMELEN];
+   if (gethostname (buffer, MAXHOSTNAMELEN))
+     return NULL;
+   chars = buffer;
++#else
++  size_t size = 256;
++  while (1) {
++    char buffer[size];
++    if (!gethostname (buffer, size-1))
++      {
++	buffer[size-1] = 0;
++	return JvNewStringUTF (buffer);
++      }
++    else if (errno != ENAMETOOLONG)
++      return NULL;
++    size *= 2;
++  }
++#endif
+ #elif HAVE_UNAME
+   struct utsname stuff;
+   if (uname (&stuff) != 0)
--- gcc-4.1-4.1.2.orig/debian/patches/pr26885.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr26885.dpatch
@@ -0,0 +1,738 @@
+#! /bin/sh -e
+
+# DP: Proposed patch for PR driver/26885
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Date: Tue, 2 May 2006 13:23:54 -0700
+
+gcc/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Makefile.in (GCC_OBJS): New.
+	(OBJS-common): Add opts-common.o.
+	(xgcc$(exeext)): Replace gcc.o with $(GCC_OBJS).
+	(cpp$(exeext)): Likewise.
+	(gcc.o): Also depend on opts.h.
+	(opts-common.o): New.
+
+	* common.opt (gcoff): Add Negative(gdwarf-2).
+	(gdwarf-2): Add Negative(gstabs).
+	(gstabs): Add Negative(gstabs+).
+	(gstabs+): Add Negative(gvms).
+	(gvms): Add Negative(gxcoff).
+	(gxcoff): Add Negative(gxcoff+).
+	(gxcoff+): Add Negative(gcoff).
+	* config/i386/i386.opt (m32): Add Negative(m64).
+	(m64): Add Negative(m32).
+
+	* doc/options.texi: Document the Negative option.
+
+	* gcc.c: Include "opts.h".
+	(main): Call prune_options after expandargv.
+
+	* optc-gen.awk: Generate common declarations for all flag
+	variables in options.c. Output the neg_index field.
+
+	* opts.c (find_opt): Moved to ...
+	* opts-common.c: Here. New file.
+
+	* opts.h (cl_option): Add a neg_index field.
+	(find_opt): New.
+	(prune_options): Likewise.
+
+gcc/cp/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in (GXX_OBJS): Replace gcc.o with $(GCC_OBJS).
+
+gcc/fortran/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in (GFORTRAN_D_OBJS): Replace gcc.o with
+	$(GCC_OBJS).
+
+gcc/java/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in ($(GCJ)$(exeext)): Replace gcc.o with
+	$(GCC_OBJS).
+
+gcc/treelang/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in (gtreelang$(exeext)): Replace gcc.o with
+	$(GCC_OBJS).
+
+#--- gcc/doc/options.texi.orig	2006-05-07 13:23:52.294265896 +0200
+#+++ gcc/doc/options.texi	2006-05-07 13:24:36.553537464 +0200
+#@@ -100,6 +100,12 @@
+# ``f'', ``W'' or ``m'' are assumed to have a ``no-'' form unless this
+# property is used.
+# 
+#+@item Negative(@var{othername})
+#+The option will turn off another option @var{othername}, which is the
+#+the option name with the leading ``-'' removed.  This chain action will
+#+propagate through the @code{Negative} property of the option to be
+#+turned off.
+#+
+# @item Joined
+# @itemx Separate
+# The option takes a mandatory argument.  @code{Joined} indicates
+--- gcc/cp/Make-lang.in.orig	2006-05-07 13:23:52.294265896 +0200
++++ gcc/cp/Make-lang.in	2006-05-07 13:24:36.552537616 +0200
+@@ -60,7 +60,7 @@
+ 		$(INCLUDES) $(srcdir)/cp/g++spec.c)
+ 
+ # Create the compiler driver for g++.
+-GXX_OBJS = gcc.o g++spec.o intl.o prefix.o version.o
++GXX_OBJS = $(GCC_OBJS) g++spec.o intl.o prefix.o version.o
+ g++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
+ 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
+ 	  $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
+--- gcc/fortran/Make-lang.in.orig	2006-05-07 13:23:52.295265744 +0200
++++ gcc/fortran/Make-lang.in	2006-05-07 13:24:36.553537464 +0200
+@@ -92,7 +92,7 @@
+ 		$(INCLUDES) $(srcdir)/fortran/gfortranspec.c)
+ 
+ # Create the compiler driver gfortran.
+-GFORTRAN_D_OBJS = gcc.o gfortranspec.o version.o prefix.o intl.o
++GFORTRAN_D_OBJS = $(GCC_OBJS) gfortranspec.o version.o prefix.o intl.o
+ gfortran$(exeext): $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
+ 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
+ 	  $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
+--- gcc/treelang/Make-lang.in.orig	2006-05-07 13:23:52.401249632 +0200
++++ gcc/treelang/Make-lang.in	2006-05-07 13:24:36.563535944 +0200
+@@ -87,10 +87,10 @@
+ 	$(BACKEND) $(LIBS) attribs.o
+ 
+ # Create the compiler driver treelang.
+-gtreelang$(exeext): gcc.o version.o prefix.o intl.o $(EXTRA_GCC_OBJS) \
++gtreelang$(exeext): $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) \
+   $(LIBDEPS) treelang/spec.o
+ 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ treelang/spec.o \
+-	  gcc.o version.o prefix.o intl.o $(EXTRA_GCC_OBJS) $(LIBS)
++	  $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) $(LIBS)
+ 
+ 
+ 
+--- gcc/config/i386/i386.opt.orig	2006-05-07 13:23:52.294265896 +0200
++++ gcc/config/i386/i386.opt	2006-05-07 13:24:36.552537616 +0200
+@@ -24,7 +24,7 @@
+ sizeof(long double) is 16
+ 
+ m32
+-Target RejectNegative Report InverseMask(64BIT)
++Target RejectNegative Negative(m64) Report InverseMask(64BIT)
+ Generate 32bit i386 code
+ 
+ m386
+@@ -40,7 +40,7 @@
+ ;; Deprecated
+ 
+ m64
+-Target RejectNegative Report Mask(64BIT)
++Target RejectNegative Negative(m32) Report Mask(64BIT)
+ Generate 64bit x86-64 code
+ 
+ m80387
+--- gcc/Makefile.in.orig	2006-05-07 13:23:52.292266200 +0200
++++ gcc/Makefile.in	2006-05-07 13:27:07.959520256 +0200
+@@ -931,6 +931,9 @@
+ # Target specific, C++ specific object file
+ CXX_TARGET_OBJS=@cxx_target_objs@
+ 
++# Object files for gcc driver.
++GCC_OBJS = gcc.o opts-common.o options.o
++
+ # Language-specific object files for C and Objective C.
+ C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
+   c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
+@@ -971,7 +974,7 @@
+  insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o	   \
+  integrate.o intl.o jump.o  langhooks.o lcm.o lists.o local-alloc.o  	   \
+  loop.o mode-switching.o modulo-sched.o optabs.o options.o opts.o	   \
+- params.o postreload.o postreload-gcse.o predict.o			   \
++ opts-common.o params.o postreload.o postreload-gcse.o predict.o	   \
+  insn-preds.o pointer-set.o 					   	   \
+  print-rtl.o print-tree.o profile.o value-prof.o var-tracking.o		   \
+  real.o recog.o reg-stack.o regclass.o regmove.o regrename.o		   \
+@@ -1215,18 +1218,18 @@
+ # We call this executable `xgcc' rather than `gcc'
+ # to avoid confusion if the current directory is in the path
+ # and CC is `gcc'.  It is renamed to `gcc' when it is installed.
+-xgcc$(exeext): gcc.o gccspec.o version.o intl.o prefix.o \
++xgcc$(exeext): $(GCC_OBJS) gccspec.o version.o intl.o prefix.o \
+    version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
+-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o gccspec.o intl.o \
+-	  prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
++	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) gccspec.o \
++	  intl.o prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
+ 
+ # cpp is to cpp0 as gcc is to cc1.
+ # The only difference from xgcc is that it's linked with cppspec.o
+ # instead of gccspec.o.
+-cpp$(exeext): gcc.o cppspec.o version.o intl.o prefix.o \
++cpp$(exeext): $(GCC_OBJS) cppspec.o version.o intl.o prefix.o \
+    version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
+-	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o cppspec.o intl.o \
+-	  prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
++	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) cppspec.o \
++	  intl.o prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
+ 
+ # Create links to binutils, especially for in-tree builds, to make -B.
+ # use them.  We need hard links so that directories can be shuffled
+@@ -1607,7 +1610,7 @@
+ 
+ gcc.o: gcc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h multilib.h \
+     Makefile $(lang_specs_files) specs.h prefix.h $(GCC_H) $(FLAGS_H) \
+-    configargs.h $(OBSTACK_H)
++    configargs.h $(OBSTACK_H) opts.h
+ 	(SHLIB_LINK='$(SHLIB_LINK)' \
+ 	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
+ 	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
+@@ -2020,6 +2023,8 @@
+    coretypes.h $(TREE_H) $(TM_H) langhooks.h $(GGC_H) $(RTL_H) \
+    output.h $(DIAGNOSTIC_H) $(TM_P_H) $(INSN_ATTR_H) intl.h $(TARGET_H) \
+    $(FLAGS_H) $(PARAMS_H) tree-pass.h
++opts-common.o : opts-common.c opts.h $(CONFIG_H) $(SYSTEM_H) \
++   coretypes.h intl.h
+ targhooks.o : targhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
+    $(EXPR_H) $(TM_H) $(RTL_H) $(TM_P_H) function.h output.h toplev.h \
+    $(MACHMODE_H) $(TARGET_DEF_H) $(TARGET_H) $(GGC_H) gt-targhooks.h
+--- gcc/common.opt.orig	2006-05-07 13:23:52.293266048 +0200
++++ gcc/common.opt	2006-05-07 13:24:36.551537768 +0200
+@@ -1050,11 +1050,11 @@
+ Generate debug information in default format
+ 
+ gcoff
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gdwarf-2)
+ Generate debug information in COFF format
+ 
+ gdwarf-2
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gstabs)
+ Generate debug information in DWARF v2 format
+ 
+ ggdb
+@@ -1062,23 +1062,23 @@
+ Generate debug information in default extended format
+ 
+ gstabs
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gstabs+)
+ Generate debug information in STABS format
+ 
+ gstabs+
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gvms)
+ Generate debug information in extended STABS format
+ 
+ gvms
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gxcoff)
+ Generate debug information in VMS format
+ 
+ gxcoff
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gxcoff+)
+ Generate debug information in XCOFF format
+ 
+ gxcoff+
+-Common JoinedOrMissing
++Common JoinedOrMissing Negative(gcoff)
+ Generate debug information in extended XCOFF format
+ 
+ o
+--- gcc/gcc.c.orig	2006-05-07 13:23:52.298265288 +0200
++++ gcc/gcc.c	2006-05-07 13:24:36.558536704 +0200
+@@ -86,6 +86,7 @@
+ #include "prefix.h"
+ #include "gcc.h"
+ #include "flags.h"
++#include "opts.h"
+ 
+ /* By default there is no special suffix for target executables.  */
+ /* FIXME: when autoconf is fixed, remove the host check - dj */
+@@ -6032,6 +6033,8 @@
+ 
+   xmalloc_set_program_name (programname);
+ 
++  prune_options (&argc, &argv);
++
+ #ifdef GCC_DRIVER_HOST_INITIALIZATION
+   /* Perform host dependent initialization when needed.  */
+   GCC_DRIVER_HOST_INITIALIZATION;
+--- gcc/optc-gen.awk.orig	2006-05-07 13:23:52.299265136 +0200
++++ gcc/optc-gen.awk	2006-05-07 13:24:36.559536552 +0200
+@@ -62,20 +62,27 @@
+ print "#include " quote "opts.h" quote
+ print "#include " quote "intl.h" quote
+ print ""
++print "int target_flags;"
++print ""
+ 
+ for (i = 0; i < n_opts; i++) {
+ 	name = var_name(flags[i]);
+ 	if (name == "")
+ 		continue;
+ 
+-	if (flag_set_p("VarExists", flags[i]))
+-		continue;
+-
+-	init = opt_args("Init", flags[i])
+-	if (init != "")
+-		init = " = " init;
+-	else if (name in var_seen)
+-		continue;
++	if (flag_set_p("VarExists", flags[i])) {
++		# Need it for the gcc driver.
++		if (name in var_seen)
++			continue;
++		init = ""
++	}
++	else {
++		init = opt_args("Init", flags[i])
++		if (init != "")
++			init = " = " init;
++		else if (name in var_seen)
++			continue;
++	}
+ 
+ 	print "/* Set by -" opts[i] "."
+ 	print "   " help[i] "  */"
+@@ -107,8 +114,21 @@
+ 
+ print "const struct cl_option cl_options[] =\n{"
+ 
+-for (i = 0; i < n_opts; i++)
++j = 0
++for (i = 0; i < n_opts; i++) {
+ 	back_chain[i] = "N_OPTS";
++	indices[opts[i]] = j;
++	# Combine the flags of identical switches.  Switches
++	# appear many times if they are handled by many front
++	# ends, for example.
++	while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
++		flags[i + 1] = flags[i] " " flags[i + 1];
++		i++;
++		back_chain[i] = "N_OPTS";
++		indices[opts[i]] = j;
++	}
++	j++;
++}
+ 
+ for (i = 0; i < n_opts; i++) {
+ 	# Combine the flags of identical switches.  Switches
+@@ -147,8 +167,21 @@
+ 	else
+ 		hlp = quote help[i] quote;
+ 
+-	printf("  { %c-%s%c,\n    %s,\n    %s, %u,\n",
+-	       quote, opts[i], quote, hlp, back_chain[i], len)
++	neg = opt_args("Negative", flags[i]);
++	if (neg != "")
++		idx = indices[neg]
++	else {
++		if (flag_set_p("RejectNegative", flags[i]))
++			idx = -1;
++		else {
++			if (opts[i] ~ "^[Wfm]")
++				idx = indices[opts[i]];
++			else
++				idx = -1;
++		}
++	}
++	printf("  { %c-%s%c,\n    %s,\n    %s, %u, %d,\n",
++	       quote, opts[i], quote, hlp, back_chain[i], len, idx)
+ 	condition = opt_args("Condition", flags[i])
+ 	cl_flags = switch_flags(flags[i])
+ 	if (condition != "")
+--- gcc/opts-common.c.orig	2006-05-07 13:23:52.326261032 +0200
++++ gcc/opts-common.c	2006-05-07 13:24:36.560536400 +0200
+@@ -0,0 +1,233 @@
++/* Command line option handling.
++   Copyright (C) 2006 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 2, or (at your option) any later
++version.
++
++GCC 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.  See the GNU General Public License
++for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to the Free
++Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301, USA.  */
++
++#include "config.h"
++#include "system.h"
++#include "intl.h"
++#include "coretypes.h"
++#include "opts.h"
++
++/* Perform a binary search to find which option the command-line INPUT
++   matches.  Returns its index in the option array, and N_OPTS
++   (cl_options_count) on failure.
++
++   This routine is quite subtle.  A normal binary search is not good
++   enough because some options can be suffixed with an argument, and
++   multiple sub-matches can occur, e.g. input of "-pedantic" matching
++   the initial substring of "-pedantic-errors".
++
++   A more complicated example is -gstabs.  It should match "-g" with
++   an argument of "stabs".  Suppose, however, that the number and list
++   of switches are such that the binary search tests "-gen-decls"
++   before having tested "-g".  This doesn't match, and as "-gen-decls"
++   is less than "-gstabs", it will become the lower bound of the
++   binary search range, and "-g" will never be seen.  To resolve this
++   issue, opts.sh makes "-gen-decls" point, via the back_chain member,
++   to "-g" so that failed searches that end between "-gen-decls" and
++   the lexicographically subsequent switch know to go back and see if
++   "-g" causes a match (which it does in this example).
++
++   This search is done in such a way that the longest match for the
++   front end in question wins.  If there is no match for the current
++   front end, the longest match for a different front end is returned
++   (or N_OPTS if none) and the caller emits an error message.  */
++size_t
++find_opt (const char *input, int lang_mask)
++{
++  size_t mn, mx, md, opt_len;
++  size_t match_wrong_lang;
++  int comp;
++
++  mn = 0;
++  mx = cl_options_count;
++
++  /* Find mn such this lexicographical inequality holds:
++     cl_options[mn] <= input < cl_options[mn + 1].  */
++  while (mx - mn > 1)
++    {
++      md = (mn + mx) / 2;
++      opt_len = cl_options[md].opt_len;
++      comp = strncmp (input, cl_options[md].opt_text + 1, opt_len);
++
++      if (comp < 0)
++	mx = md;
++      else
++	mn = md;
++    }
++
++  /* This is the switch that is the best match but for a different
++     front end, or cl_options_count if there is no match at all.  */
++  match_wrong_lang = cl_options_count;
++
++  /* Backtrace the chain of possible matches, returning the longest
++     one, if any, that fits best.  With current GCC switches, this
++     loop executes at most twice.  */
++  do
++    {
++      const struct cl_option *opt = &cl_options[mn];
++
++      /* Is the input either an exact match or a prefix that takes a
++	 joined argument?  */
++      if (!strncmp (input, opt->opt_text + 1, opt->opt_len)
++	  && (input[opt->opt_len] == '\0' || (opt->flags & CL_JOINED)))
++	{
++	  /* If language is OK, return it.  */
++	  if (opt->flags & lang_mask)
++	    return mn;
++
++	  /* If we haven't remembered a prior match, remember this
++	     one.  Any prior match is necessarily better.  */
++	  if (match_wrong_lang == cl_options_count)
++	    match_wrong_lang = mn;
++	}
++
++      /* Try the next possibility.  This is cl_options_count if there
++	 are no more.  */
++      mn = opt->back_chain;
++    }
++  while (mn != cl_options_count);
++
++  /* Return the best wrong match, or cl_options_count if none.  */
++  return match_wrong_lang;
++}
++
++/* Return true if NEXT_OPT_IDX cancels OPT_IDX.  Return false if the
++   next one is the same as ORIG_NEXT_OPT_IDX.  */
++
++static bool
++cancel_option (int opt_idx, int next_opt_idx, int orig_next_opt_idx)
++{
++  /* An option can be canceled by the same option or an option with
++     Negative.  */
++  if (cl_options [next_opt_idx].neg_index == opt_idx)
++    return true;
++
++  if (cl_options [next_opt_idx].neg_index != orig_next_opt_idx)
++    return cancel_option (opt_idx, cl_options [next_opt_idx].neg_index,
++			  orig_next_opt_idx);
++    
++  return false;
++}
++
++/* Filter out options canceled by the ones after them.  */
++
++void
++prune_options (int *argcp, char ***argvp)
++{
++  int argc = *argcp;
++  int *options = xmalloc (argc * sizeof (*options));
++  char **argv = xmalloc (argc * sizeof (char *));
++  int i, arg_count, need_prune = 0;
++  const struct cl_option *option;
++  size_t opt_index;
++
++  /* Scan all arguments.  */
++  for (i = 1; i < argc; i++)
++    {
++      int value = 1;
++      const char *opt = (*argvp) [i];
++
++      opt_index = find_opt (opt + 1, -1);
++      if (opt_index == cl_options_count
++	  && (opt[1] == 'W' || opt[1] == 'f' || opt[1] == 'm')
++	  && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
++	{
++	  char *dup;
++
++	  /* Drop the "no-" from negative switches.  */
++	  size_t len = strlen (opt) - 3;
++
++	  dup = XNEWVEC (char, len + 1);
++	  dup[0] = '-';
++	  dup[1] = opt[1];
++	  memcpy (dup + 2, opt + 5, len - 2 + 1);
++	  opt = dup;
++	  value = 0;
++	  opt_index = find_opt (opt + 1, -1);
++	  free (dup);
++	}
++
++      if (opt_index == cl_options_count)
++	{
++cont:
++	  options [i] = 0;
++	  continue;
++	}
++
++      option = &cl_options[opt_index];
++      if (option->neg_index < 0)
++	goto cont;
++
++      /* Reject negative form of switches that don't take negatives as
++	 unrecognized.  */
++      if (!value && (option->flags & CL_REJECT_NEGATIVE))
++	goto cont;
++
++      options [i] = (int) opt_index;
++      need_prune |= options [i];
++    }
++
++  if (!need_prune)
++    goto done;
++
++  /* Remove arguments which are negated by others after them.  */
++  argv [0] = (*argvp) [0];
++  arg_count = 1;
++  for (i = 1; i < argc; i++)
++    {
++      int j, opt_idx;
++
++      opt_idx = options [i];
++      if (opt_idx)
++	{
++	  int next_opt_idx;
++	  for (j = i + 1; j < argc; j++)
++	    {
++	      next_opt_idx = options [j];
++	      if (next_opt_idx
++		  && cancel_option (opt_idx, next_opt_idx,
++				    next_opt_idx))
++		break;
++	    }
++	}
++      else
++	goto keep;
++
++      if (j == argc)
++	{
++keep:
++	  argv [arg_count] = (*argvp) [i];
++	  arg_count++;
++	}
++    }
++
++  if (arg_count != argc)
++    {
++      *argcp = arg_count;
++      *argvp = argv;
++    }
++  else
++    {
++done:
++      free (argv);
++    }
++
++  free (options);
++}
+--- gcc/opts.c.orig	2006-05-07 13:23:52.400249784 +0200
++++ gcc/opts.c	2006-05-07 13:28:05.064838928 +0200
+@@ -101,7 +101,6 @@
+ const char **in_fnames;
+ unsigned num_in_fnames;
+ 
+-static size_t find_opt (const char *, int);
+ static int common_handle_option (size_t scode, const char *arg, int value);
+ static void handle_param (const char *);
+ static void set_Wextra (int);
+@@ -119,90 +118,6 @@
+ static void set_debug_level (enum debug_info_type type, int extended,
+ 			     const char *arg);
+ 
+-/* Perform a binary search to find which option the command-line INPUT
+-   matches.  Returns its index in the option array, and N_OPTS
+-   (cl_options_count) on failure.
+-
+-   This routine is quite subtle.  A normal binary search is not good
+-   enough because some options can be suffixed with an argument, and
+-   multiple sub-matches can occur, e.g. input of "-pedantic" matching
+-   the initial substring of "-pedantic-errors".
+-
+-   A more complicated example is -gstabs.  It should match "-g" with
+-   an argument of "stabs".  Suppose, however, that the number and list
+-   of switches are such that the binary search tests "-gen-decls"
+-   before having tested "-g".  This doesn't match, and as "-gen-decls"
+-   is less than "-gstabs", it will become the lower bound of the
+-   binary search range, and "-g" will never be seen.  To resolve this
+-   issue, opts.sh makes "-gen-decls" point, via the back_chain member,
+-   to "-g" so that failed searches that end between "-gen-decls" and
+-   the lexicographically subsequent switch know to go back and see if
+-   "-g" causes a match (which it does in this example).
+-
+-   This search is done in such a way that the longest match for the
+-   front end in question wins.  If there is no match for the current
+-   front end, the longest match for a different front end is returned
+-   (or N_OPTS if none) and the caller emits an error message.  */
+-static size_t
+-find_opt (const char *input, int lang_mask)
+-{
+-  size_t mn, mx, md, opt_len;
+-  size_t match_wrong_lang;
+-  int comp;
+-
+-  mn = 0;
+-  mx = cl_options_count;
+-
+-  /* Find mn such this lexicographical inequality holds:
+-     cl_options[mn] <= input < cl_options[mn + 1].  */
+-  while (mx - mn > 1)
+-    {
+-      md = (mn + mx) / 2;
+-      opt_len = cl_options[md].opt_len;
+-      comp = strncmp (input, cl_options[md].opt_text + 1, opt_len);
+-
+-      if (comp < 0)
+-	mx = md;
+-      else
+-	mn = md;
+-    }
+-
+-  /* This is the switch that is the best match but for a different
+-     front end, or cl_options_count if there is no match at all.  */
+-  match_wrong_lang = cl_options_count;
+-
+-  /* Backtrace the chain of possible matches, returning the longest
+-     one, if any, that fits best.  With current GCC switches, this
+-     loop executes at most twice.  */
+-  do
+-    {
+-      const struct cl_option *opt = &cl_options[mn];
+-
+-      /* Is the input either an exact match or a prefix that takes a
+-	 joined argument?  */
+-      if (!strncmp (input, opt->opt_text + 1, opt->opt_len)
+-	  && (input[opt->opt_len] == '\0' || (opt->flags & CL_JOINED)))
+-	{
+-	  /* If language is OK, return it.  */
+-	  if (opt->flags & lang_mask)
+-	    return mn;
+-
+-	  /* If we haven't remembered a prior match, remember this
+-	     one.  Any prior match is necessarily better.  */
+-	  if (match_wrong_lang == cl_options_count)
+-	    match_wrong_lang = mn;
+-	}
+-
+-      /* Try the next possibility.  This is cl_options_count if there
+-	 are no more.  */
+-      mn = opt->back_chain;
+-    }
+-  while (mn != cl_options_count);
+-
+-  /* Return the best wrong match, or cl_options_count if none.  */
+-  return match_wrong_lang;
+-}
+-
+ /* If ARG is a non-negative integer made up solely of digits, return its
+    value, otherwise return -1.  */
+ static int
+--- gcc/opts.h.orig	2006-05-07 13:23:52.401249632 +0200
++++ gcc/opts.h	2006-05-07 13:24:36.563535944 +0200
+@@ -46,6 +46,7 @@
+   const char *help;
+   unsigned short back_chain;
+   unsigned char opt_len;
++  int neg_index;
+   unsigned int flags;
+   void *flag_var;
+   enum cl_var_type var_type;
+@@ -83,6 +84,8 @@
+ 
+ extern unsigned num_in_fnames;
+ 
++size_t find_opt (const char *input, int lang_mask);
++extern void prune_options (int *argcp, char ***argvp);
+ extern void decode_options (unsigned int argc, const char **argv);
+ extern int option_enabled (int opt_idx);
+ extern bool get_option_state (int, struct cl_option_state *);
--- gcc-4.1-4.1.2.orig/debian/patches/ignore-comp-fail.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ignore-comp-fail.dpatch
@@ -0,0 +1,38 @@
+#! /bin/sh -e
+
+# DP: Ignore the bootstrap comparision failure
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/Makefile.in~	2004-02-06 08:03:12.000000000 +0100
++++ gcc/Makefile.in	2004-02-14 10:27:19.000000000 +0100
+@@ -3567,7 +3567,9 @@
+ 	if [ -f .bad_compare ]; then \
+ 	  echo "Bootstrap comparison failure!"; \
+ 	  cat .bad_compare; \
+-	  exit 1; \
++	  echo ""; \
++	  echo "Ignore the comparision failure!"; \
++	  true; \
+ 	else \
+ 	  case "$@" in \
+ 	    *-lean ) rm -rf stage$$stage ;; \
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-prevent-qipush.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-prevent-qipush.dpatch
@@ -0,0 +1,50 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: prevent combine from creating a byte push on the stack (invalid on m68k)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+---
+ gcc/config/m68k/m68k.md |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.md
++++ gcc-4.1/gcc/config/m68k/m68k.md
+@@ -748,7 +748,10 @@
+ (define_insn ""
+   [(set (match_operand:QI 0 "nonimmediate_operand" "=d,*a,m")
+ 	(match_operand:QI 1 "general_src_operand" "dmSi*a,di*a,dmSi"))]
+-  "!TARGET_COLDFIRE"
++  "!TARGET_COLDFIRE
++   && (!MEM_P (operands[0])
++       || GET_CODE (XEXP (operands[0], 0)) != PRE_DEC
++       || XEXP (XEXP (operands[0], 0), 0) != stack_pointer_rtx)"
+   "* return output_move_qimode (operands);")
+ 
+ (define_insn ""
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-unwind-r120406.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-unwind-r120406.dpatch
@@ -0,0 +1,205 @@
+#! /bin/sh -e
+
+# DP: gcc unwind r120406, taken from the trunk
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+2007-01-03  Jakub Jelinek  <jakub@redhat.com>
+
+	* unwind-dw2.c (SIGNAL_FRAME_BIT, EXTENDED_CONTEXT_BIT): Define.
+	(struct _Unwind_Context): Rename args_size to flags, remove
+	signal_frame field, add a new args_size field and version field.
+	(_Unwind_IsSignalFrame, _Unwind_SetSignalFrame,
+	_Unwind_IsExtendedContext): New inline functions.
+	(_Unwind_GetGR, _Unwind_SetGR, _Unwind_GetGRPtr, _Unwind_SetGRPtr):
+	Assume by_value array is only present if _Unwind_IsExtendedContext.
+	(_Unwind_GetIPInfo, execute_cfa_program, uw_frame_state_for): Use
+	_Unwind_IsSignalFrame.
+	(__frame_state_for): Initialize context.flags to EXTENDED_CONTEXT_BIT.
+	(uw_update_context_1): Use _Unwind_SetSignalFrame.
+	(uw_init_context_1): Initialize context->flags to
+	EXTENDED_CONTEXT_BIT.
+	* config/rs6000/linux-unwind.h (frob_update_context): Use
+	_Unwind_SetSignalFrame.
+
+Index: gcc/unwind-dw2.c
+===================================================================
+--- gcc/unwind-dw2.c	(revision 120507)
++++ gcc/unwind-dw2.c	(revision 120508)
+@@ -70,8 +70,15 @@
+   void *ra;
+   void *lsda;
+   struct dwarf_eh_bases bases;
++  /* Signal frame context.  */
++#define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1)
++  /* Context which has version/args_size/by_value fields.  */
++#define EXTENDED_CONTEXT_BIT ((~(_Unwind_Word) 0 >> 2) + 1)
++  _Unwind_Word flags;
++  /* 0 for now, can be increased when further fields are added to
++     struct _Unwind_Context.  */
++  _Unwind_Word version;
+   _Unwind_Word args_size;
+-  char signal_frame;
+   char by_value[DWARF_FRAME_REGISTERS+1];
+ };
+ 
+@@ -119,6 +126,27 @@
+ static inline unsigned long
+ read_8s (const void *p) { const union unaligned *up = p; return up->s8; }
+ 
++static inline _Unwind_Word
++_Unwind_IsSignalFrame (struct _Unwind_Context *context)
++{
++  return (context->flags & SIGNAL_FRAME_BIT) ? 1 : 0;
++}
++
++static inline void
++_Unwind_SetSignalFrame (struct _Unwind_Context *context, int val)
++{
++  if (val)
++    context->flags |= SIGNAL_FRAME_BIT;
++  else
++    context->flags &= ~SIGNAL_FRAME_BIT;
++}
++
++static inline _Unwind_Word
++_Unwind_IsExtendedContext (struct _Unwind_Context *context)
++{
++  return context->flags & EXTENDED_CONTEXT_BIT;
++}
++
+ /* Get the value of register INDEX as saved in CONTEXT.  */
+ 
+ inline _Unwind_Word
+@@ -137,7 +165,7 @@
+   size = dwarf_reg_size_table[index];
+   ptr = context->reg[index];
+ 
+-  if (context->by_value[index])
++  if (_Unwind_IsExtendedContext (context) && context->by_value[index])
+     return (_Unwind_Word) (_Unwind_Internal_Ptr) ptr;
+ 
+   /* This will segfault if the register hasn't been saved.  */
+@@ -176,7 +204,7 @@
+   gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
+   size = dwarf_reg_size_table[index];
+ 
+-  if (context->by_value[index])
++  if (_Unwind_IsExtendedContext (context) && context->by_value[index])
+     {
+       context->reg[index] = (void *) (_Unwind_Internal_Ptr) val;
+       return;
+@@ -199,7 +227,7 @@
+ _Unwind_GetGRPtr (struct _Unwind_Context *context, int index)
+ {
+   index = DWARF_REG_TO_UNWIND_COLUMN (index);
+-  if (context->by_value[index])
++  if (_Unwind_IsExtendedContext (context) && context->by_value[index])
+     return &context->reg[index];
+   return context->reg[index];
+ }
+@@ -210,7 +238,8 @@
+ _Unwind_SetGRPtr (struct _Unwind_Context *context, int index, void *p)
+ {
+   index = DWARF_REG_TO_UNWIND_COLUMN (index);
+-  context->by_value[index] = 0;
++  if (_Unwind_IsExtendedContext (context))
++    context->by_value[index] = 0;
+   context->reg[index] = p;
+ }
+ 
+@@ -252,7 +281,7 @@
+ inline _Unwind_Ptr
+ _Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn)
+ {
+-  *ip_before_insn = context->signal_frame != 0;
++  *ip_before_insn = _Unwind_IsSignalFrame (context);
+   return (_Unwind_Ptr) context->ra;
+ }
+ 
+@@ -820,7 +849,8 @@
+      reflected at the point immediately before the call insn.
+      In signal frames, return address is after last completed instruction,
+      so we add 1 to return address to make the comparison <=.  */
+-  while (insn_ptr < insn_end && fs->pc < context->ra + context->signal_frame)
++  while (insn_ptr < insn_end
++	 && fs->pc < context->ra + _Unwind_IsSignalFrame (context))
+     {
+       unsigned char insn = *insn_ptr++;
+       _Unwind_Word reg, utmp;
+@@ -1059,7 +1089,7 @@
+   if (context->ra == 0)
+     return _URC_END_OF_STACK;
+ 
+-  fde = _Unwind_Find_FDE (context->ra + context->signal_frame - 1,
++  fde = _Unwind_Find_FDE (context->ra + _Unwind_IsSignalFrame (context) - 1,
+ 			  &context->bases);
+   if (fde == NULL)
+     {
+@@ -1138,6 +1168,7 @@
+   int reg;
+ 
+   memset (&context, 0, sizeof (struct _Unwind_Context));
++  context.flags = EXTENDED_CONTEXT_BIT;
+   context.ra = pc_target + 1;
+ 
+   if (uw_frame_state_for (&context, &fs) != _URC_NO_REASON)
+@@ -1302,7 +1333,7 @@
+ 	break;
+       }
+ 
+-  context->signal_frame = fs->signal_frame;
++  _Unwind_SetSignalFrame (context, fs->signal_frame);
+ 
+ #ifdef MD_FROB_UPDATE_CONTEXT
+   MD_FROB_UPDATE_CONTEXT (context, fs);
+@@ -1362,6 +1393,7 @@
+ 
+   memset (context, 0, sizeof (struct _Unwind_Context));
+   context->ra = ra;
++  context->flags = EXTENDED_CONTEXT_BIT;
+ 
+   code = uw_frame_state_for (context, &fs);
+   gcc_assert (code == _URC_NO_REASON);
+Index: gcc/config/rs6000/linux-unwind.h
+===================================================================
+--- gcc/config/rs6000/linux-unwind.h	(revision 120507)
++++ gcc/config/rs6000/linux-unwind.h	(revision 120508)
+@@ -319,7 +319,7 @@
+   if (pc[0] == 0x38210000 + SIGNAL_FRAMESIZE
+       && (pc[1] == 0x38000077 || pc[1] == 0x380000AC)
+       && pc[2] == 0x44000002)
+-    context->signal_frame = 1;
++    _Unwind_SetSignalFrame (context, 1);
+ #else
+   /* li r0, 0x7777; sc  (sigreturn old)  */
+   /* li r0, 0x0077; sc  (sigreturn new)  */
+@@ -328,7 +328,7 @@
+   if ((pc[0] == 0x38007777 || pc[0] == 0x38000077
+        || pc[0] == 0x38006666 || pc[0] == 0x380000AC)
+       && pc[1] == 0x44000002)
+-    context->signal_frame = 1;
++    _Unwind_SetSignalFrame (context, 1);
+ #endif
+ 
+ #ifdef __powerpc64__
--- gcc-4.1-4.1.2.orig/debian/patches/ada-default-project-path.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ada-default-project-path.dpatch
@@ -0,0 +1,101 @@
+#! /bin/sh -e
+
+# DP: - Change the default search path for project files to the one specified
+# DP:   by the Debian Policy for Ada: /usr/share/ada/adainclude.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc.old/ada/prj-ext.adb    2005-11-15 15:01:18.000000000 +0100
++++ gcc/ada/prj-ext.adb        2006-03-22 09:09:51.000000000 +0100
+@@ -282,9 +282,7 @@
+       if Add_Default_Dir then
+          Current_Project_Path :=
+            new String'(Name_Buffer (1 .. Name_Len) & Path_Separator &
+-                       Sdefault.Search_Dir_Prefix.all & ".." &
+-                       Directory_Separator & ".." & Directory_Separator &
+-                       ".." & Directory_Separator & "gnat");
++                       Sdefault.Search_Dir_Prefix.all);
+       else
+          Current_Project_Path := new String'(Name_Buffer (1 .. Name_Len));
+       end if;
+--- gcc.old/ada/gnatls.adb     2005-07-01 03:29:17.000000000 +0200
++++ gcc/ada/gnatls.adb 2006-03-22 12:19:39.000000000 +0100
+@@ -1547,9 +1547,6 @@
+       declare
+          Project_Path : constant String_Access := Getenv (Ada_Project_Path);
+ 
+-         Lib    : constant String :=
+-                    Directory_Separator & "lib" & Directory_Separator;
+-
+          First : Natural;
+          Last  : Natural;
+ 
+@@ -1605,35 +1602,9 @@
+          if Add_Default_Dir then
+             Name_Len := 0;
+             Add_Str_To_Name_Buffer (Sdefault.Search_Dir_Prefix.all);
+-
+-            --  On Windows, make sure that all directory separators are '\'
+-
+-            if Directory_Separator /= '/' then
+-               for J in 1 .. Name_Len loop
+-                  if Name_Buffer (J) = '/' then
+-                     Name_Buffer (J) := Directory_Separator;
+-                  end if;
+-               end loop;
+-            end if;
+-
+-            --  Find the sequence "/lib/"
+-
+-            while Name_Len >= Lib'Length
+-              and then Name_Buffer (Name_Len - 4 .. Name_Len) /= Lib
+-            loop
+-               Name_Len := Name_Len - 1;
+-            end loop;
+-
+-            --  If the sequence "/lib"/ was found, display the default
+-            --  directory <prefix>/lib/gnat/.
+-
+-            if Name_Len >= 5 then
+-               Write_Str ("   ");
+-               Write_Str (Name_Buffer (1 .. Name_Len));
+-               Write_Str ("gnat");
+-               Write_Char (Directory_Separator);
+-               Write_Eol;
+-            end if;
++            Write_Str ("   ");
++            Write_Str (Name_Buffer (1 .. Name_Len));
++            Write_Eol;
+          end if;
+       end;
+ 
+--- gcc.old/ada/Make-lang.in
++++ gcc/ada/Make-lang.in
+@@ -930,7 +930,7 @@
+ 	$(ECHO) "   S1 : constant String := \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   S2 : constant String := \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   S3 : constant String := \"$(target)/\";" >>tmp-sdefault.adb
+-	$(ECHO) "   S4 : constant String := \"$(libsubdir)/\";" >>tmp-sdefault.adb
++	$(ECHO) "   S4 : constant String := \"/usr/share/ada/adainclude/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   function Include_Dir_Default_Name return String_Ptr is" >>tmp-sdefault.adb
+ 	$(ECHO) "   begin" >>tmp-sdefault.adb
+ 	$(ECHO) "      return Relocate_Path (S0, S1);" >>tmp-sdefault.adb
--- gcc-4.1-4.1.2.orig/debian/patches/gdc-pr26885.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gdc-pr26885.dpatch
@@ -0,0 +1,52 @@
+#! /bin/sh -e
+
+# gdc-pr26885.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Update Make-lang.in for pr26885: use $(GCC_OBJS) instead of gcc.o.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- gcc/d/Make-lang.in	2007-11-16 02:10:38.000000000 +0000
++++ gcc/d/Make-lang.in	2007-11-16 02:12:17.000000000 +0000
+@@ -48,7 +48,7 @@
+ # into the C++ rule, but that needs a little bit of work
+ # to do the right thing within all.cross.
+ D_DRIVER_NAME = gdc
+-D_DRIVER_OBJS = d/d-spec.o d/d-gcc.o version.o prefix.o intl.o
++D_DRIVER_OBJS = d/d-spec.o version.o prefix.o intl.o
+ D_COMPILER_NAME = cc1d
+ 
+ D_INSTALL_NAME = $(shell echo $(D_DRIVER_NAME)|sed '$(program_transform_name)')
+@@ -157,9 +157,9 @@
+ ALL_DMD_COMPILER_FLAGS = $(ALL_CFLAGS) $(ALL_CPPFLAGS) -Id -I$(srcdir)/$(D_dmd_srcdir) -I$(srcdir)/d $(D_EXTRA_DEFINES) $(D_CC_FLAGS)
+ 
+ # Create the compiler driver for D.
+-$(D_DRIVER_NAME)$(exeext): $(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
++$(D_DRIVER_NAME)$(exeext): $(GCC_OBJS) $(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
+ 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
+-	$(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
++	$(GCC_OBJS) $(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
+ 
+ # Create a version of the g++ driver which calls the cross-compiler.
+ $(D_DRIVER_NAME)-cross$(exeext): $(D_DRIVER_NAME)$(exeext)
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-backport-updates4.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-backport-updates4.dpatch
@@ -0,0 +1,12056 @@
+#! /bin/sh -e
+
+# DP: SVN updates from the gcc-4_1-rh-branch branch upto 20070718.
+
+last_updated()
+{
+	cat > ${dir}LAST_UPDATED <<EOF
+Wed Jul 18 13:21:39 CEST 2007
+Wed Jul 18 11:21:39 UTC 2007 (revision 126718)
+EOF
+}
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch ${pdir} -f --no-backup-if-mismatch -p0 < $0
+	find ${dir}libjava \( -name '*.java' -o -name '*.cc' \) -type f -size 0 | xargs -r rm -f
+	#last_updated
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch ${pdir} -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# svn diff -r124389:126334 boehm-gc
+# svn diff -r124389:126334 libjava
+
+Index: boehm-gc/solaris_pthreads.c
+===================================================================
+--- boehm-gc/solaris_pthreads.c	(revision 124389)
++++ boehm-gc/solaris_pthreads.c	(revision 126334)
+@@ -1,179 +0,0 @@
+-/* 
+- * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+- *
+- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+- * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+- *
+- * Permission is hereby granted to use or copy this program
+- * for any purpose,  provided the above notices are retained on all copies.
+- * Permission to modify the code and to distribute modified code is granted,
+- * provided the above notices are retained, and a notice that the code was
+- * modified is included with the above copyright notice.
+- */
+-/*
+- * Support code for Solaris threads.  Provides functionality we wish Sun
+- * had provided.  Relies on some information we probably shouldn't rely on.
+- * Modified by Peter C. for Solaris Posix Threads.
+- */
+-
+-# include "private/gc_priv.h"
+-
+-# if defined(GC_SOLARIS_PTHREADS)
+-# include <pthread.h>
+-# include <thread.h>
+-# include <signal.h>
+-# include <fcntl.h>
+-# include <sys/types.h>
+-# include <sys/mman.h>
+-# include <sys/time.h>
+-# include <sys/resource.h>
+-# include <sys/stat.h>
+-# include <sys/syscall.h>
+-# include <sys/procfs.h>
+-# include <sys/lwp.h>
+-# include <sys/reg.h>
+-# define _CLASSIC_XOPEN_TYPES
+-# include <unistd.h>
+-# include <errno.h>
+-# include "private/solaris_threads.h"
+-# include <stdio.h>
+-
+-#undef pthread_join
+-#undef pthread_create
+-
+-pthread_cond_t GC_prom_join_cv;		/* Broadcast when any thread terminates	*/
+-pthread_cond_t GC_create_cv;		/* Signalled when a new undetached	*/
+-				/* thread starts.			*/
+-				
+-extern GC_bool GC_multithreaded;
+-
+-/* We use the allocation lock to protect thread-related data structures. */
+-
+-/* We stop the world using /proc primitives.  This makes some	*/
+-/* minimal assumptions about the threads implementation.	*/
+-/* We don't play by the rules, since the rules make this	*/
+-/* impossible (as of Solaris 2.3).  Also note that as of	*/
+-/* Solaris 2.3 the various thread and lwp suspension		*/
+-/* primitives failed to stop threads by the time the request	*/
+-/* is completed.						*/
+-
+-
+-
+-int GC_pthread_join(pthread_t wait_for, void **status)
+-{
+-	return GC_thr_join((thread_t)wait_for, NULL, status);
+-}
+-
+-
+-int
+-GC_pthread_create(pthread_t *new_thread,
+-          const pthread_attr_t *attr_in,
+-          void * (*thread_execp)(void *), void *arg)
+-{
+-    int result;
+-    GC_thread t;
+-    pthread_t my_new_thread;
+-    pthread_attr_t  attr;
+-    word my_flags = 0;
+-    int  flag;
+-    void * stack = 0;
+-    size_t stack_size = 0;
+-    int    n;
+-    struct sched_param schedparam;
+-   
+-    (void)pthread_attr_init(&attr);
+-    if (attr_in != 0) {
+-	(void)pthread_attr_getstacksize(attr_in, &stack_size);
+-	(void)pthread_attr_getstackaddr(attr_in, &stack);
+-    }
+-
+-    LOCK();
+-    if (!GC_is_initialized) {
+-	    GC_init_inner();
+-    }
+-    GC_multithreaded++;
+-	    
+-    if (stack == 0) {
+-     	if (stack_size == 0)
+-		stack_size = 1048576;
+-			  /* ^-- 1 MB (this was GC_min_stack_sz, but that
+-			   * violates the pthread_create documentation which
+-			   * says the default value if none is supplied is
+-			   * 1MB) */
+-	else
+-		stack_size += thr_min_stack();
+-
+-     	stack = (void *)GC_stack_alloc(&stack_size);
+-     	if (stack == 0) {
+-	    GC_multithreaded--;
+-     	    UNLOCK();
+-	    errno = ENOMEM;
+-     	    return -1;
+-     	}
+-    } else {
+-    	my_flags |= CLIENT_OWNS_STACK;
+-    }
+-    (void)pthread_attr_setstacksize(&attr, stack_size);
+-    (void)pthread_attr_setstackaddr(&attr, stack);
+-    if (attr_in != 0) {
+-	(void)pthread_attr_getscope(attr_in, &n);
+-	(void)pthread_attr_setscope(&attr, n);
+-	(void)pthread_attr_getschedparam(attr_in, &schedparam);
+-	(void)pthread_attr_setschedparam(&attr, &schedparam);
+-	(void)pthread_attr_getschedpolicy(attr_in, &n);
+-	(void)pthread_attr_setschedpolicy(&attr, n);
+-	(void)pthread_attr_getinheritsched(attr_in, &n);
+-	(void)pthread_attr_setinheritsched(&attr, n);
+-
+-	(void)pthread_attr_getdetachstate(attr_in, &flag);
+-	if (flag == PTHREAD_CREATE_DETACHED) {
+-		my_flags |= DETACHED;
+-	}
+-	(void)pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+-    }
+-    /*
+-     * thr_create can call malloc(), which if redirected will
+-     * attempt to acquire the allocation lock.
+-     * Unlock here to prevent deadlock.
+-     */
+-
+-
+-#if 0
+-#ifdef I386
+-    UNLOCK();
+-#endif
+-#endif
+-    result = 
+-	    pthread_create(&my_new_thread, &attr, thread_execp, arg);
+-#if 0
+-#ifdef I386
+-    LOCK();
+-#endif
+-#endif
+-    if (result == 0) {
+-        t = GC_new_thread(my_new_thread);
+-        t -> flags = my_flags;
+-        if (!(my_flags & DETACHED)) cond_init(&(t->join_cv), USYNC_THREAD, 0);
+-        t -> stack = stack;
+-        t -> stack_size = stack_size;
+-        if (new_thread != 0) *new_thread = my_new_thread;
+-        pthread_cond_signal(&GC_create_cv);
+-    } else {
+-	    if (!(my_flags & CLIENT_OWNS_STACK)) {
+-		    GC_stack_free(stack, stack_size);
+-	    }        
+-	    GC_multithreaded--;
+-    }
+-    UNLOCK();
+-    pthread_attr_destroy(&attr);
+-    return(result);
+-}
+-
+-# else
+-
+-#ifndef LINT
+-  int GC_no_sunOS_pthreads;
+-#endif
+-
+-# endif /* GC_SOLARIS_PTHREADS */
+-
+Index: boehm-gc/solaris_threads.c
+===================================================================
+--- boehm-gc/solaris_threads.c	(revision 124389)
++++ boehm-gc/solaris_threads.c	(revision 126334)
+@@ -1,959 +0,0 @@
+-/* 
+- * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+- *
+- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+- * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+- *
+- * Permission is hereby granted to use or copy this program
+- * for any purpose,  provided the above notices are retained on all copies.
+- * Permission to modify the code and to distribute modified code is granted,
+- * provided the above notices are retained, and a notice that the code was
+- * modified is included with the above copyright notice.
+- */
+-/*
+- * Support code for Solaris threads.  Provides functionality we wish Sun
+- * had provided.  Relies on some information we probably shouldn't rely on.
+- */
+-/* Boehm, September 14, 1994 4:44 pm PDT */
+-
+-# include "private/gc_priv.h"
+-
+-# if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS)
+-# include "private/solaris_threads.h"
+-# include <thread.h>
+-# include <synch.h>
+-# include <signal.h>
+-# include <fcntl.h>
+-# include <sys/types.h>
+-# include <sys/mman.h>
+-# include <sys/time.h>
+-# include <sys/resource.h>
+-# include <sys/stat.h>
+-# include <sys/syscall.h>
+-# include <sys/procfs.h>
+-# include <sys/lwp.h>
+-# include <sys/reg.h>
+-# define _CLASSIC_XOPEN_TYPES
+-# include <unistd.h>
+-# include <errno.h>
+-
+-#ifdef HANDLE_FORK
+-  --> Not yet supported.  Try porting the code from linux_threads.c.
+-#endif
+-
+-/*
+- * This is the default size of the LWP arrays. If there are more LWPs
+- * than this when a stop-the-world GC happens, set_max_lwps will be
+- * called to cope.
+- * This must be higher than the number of LWPs at startup time.
+- * The threads library creates a thread early on, so the min. is 3
+- */
+-# define DEFAULT_MAX_LWPS	4
+-
+-#undef thr_join
+-#undef thr_create
+-#undef thr_suspend
+-#undef thr_continue
+-
+-cond_t GC_prom_join_cv;		/* Broadcast when any thread terminates	*/
+-cond_t GC_create_cv;		/* Signalled when a new undetached	*/
+-				/* thread starts.			*/
+-				
+-
+-#ifdef MMAP_STACKS
+-static int GC_zfd;
+-#endif /* MMAP_STACKS */
+-
+-/* We use the allocation lock to protect thread-related data structures. */
+-
+-/* We stop the world using /proc primitives.  This makes some	*/
+-/* minimal assumptions about the threads implementation.	*/
+-/* We don't play by the rules, since the rules make this	*/
+-/* impossible (as of Solaris 2.3).  Also note that as of	*/
+-/* Solaris 2.3 the various thread and lwp suspension		*/
+-/* primitives failed to stop threads by the time the request	*/
+-/* is completed.						*/
+-
+-
+-static sigset_t old_mask;
+-
+-/* Sleep for n milliseconds, n < 1000	*/
+-void GC_msec_sleep(int n)
+-{
+-    struct timespec ts;
+-                            
+-    ts.tv_sec = 0;
+-    ts.tv_nsec = 1000000*n;
+-    if (syscall(SYS_nanosleep, &ts, 0) < 0) {
+-	ABORT("nanosleep failed");
+-    }
+-}
+-/* Turn off preemption;  gross but effective.  		*/
+-/* Caller has allocation lock.				*/
+-/* Actually this is not needed under Solaris 2.3 and	*/
+-/* 2.4, but hopefully that'll change.			*/
+-void preempt_off()
+-{
+-    sigset_t set;
+-
+-    (void)sigfillset(&set);
+-    sigdelset(&set, SIGABRT);
+-    syscall(SYS_sigprocmask, SIG_SETMASK, &set, &old_mask);
+-}
+-
+-void preempt_on()
+-{
+-    syscall(SYS_sigprocmask, SIG_SETMASK, &old_mask, NULL);
+-}
+-
+-int GC_main_proc_fd = -1;
+-
+-
+-struct lwp_cache_entry {
+-    lwpid_t lc_id;
+-    int lc_descr;	/* /proc file descriptor.	*/
+-}  GC_lwp_cache_default[DEFAULT_MAX_LWPS];
+-
+-static int max_lwps = DEFAULT_MAX_LWPS;
+-static struct lwp_cache_entry *GC_lwp_cache = GC_lwp_cache_default;
+-
+-static prgregset_t GC_lwp_registers_default[DEFAULT_MAX_LWPS];
+-static prgregset_t *GC_lwp_registers = GC_lwp_registers_default;
+-
+-/* Return a file descriptor for the /proc entry corresponding	*/
+-/* to the given lwp.  The file descriptor may be stale if the	*/
+-/* lwp exited and a new one was forked.				*/
+-static int open_lwp(lwpid_t id)
+-{
+-    int result;
+-    static int next_victim = 0;
+-    register int i;
+-    
+-    for (i = 0; i < max_lwps; i++) {
+-    	if (GC_lwp_cache[i].lc_id == id) return(GC_lwp_cache[i].lc_descr);
+-    }
+-    result = syscall(SYS_ioctl, GC_main_proc_fd, PIOCOPENLWP, &id);
+-    /*
+-     * If PIOCOPENLWP fails, try closing fds in the cache until it succeeds.
+-     */
+-    if (result < 0 && errno == EMFILE) {
+-	    for (i = 0; i < max_lwps; i++) {
+-		if (GC_lwp_cache[i].lc_id != 0) {
+-        		(void)syscall(SYS_close, GC_lwp_cache[i].lc_descr);
+-			result = syscall(SYS_ioctl, GC_main_proc_fd, PIOCOPENLWP, &id);
+-			if (result >= 0 || (result < 0 && errno != EMFILE))
+-				break;
+-		}
+-	    }
+-    }
+-    if (result < 0) {
+-	if (errno == EMFILE) {
+-		ABORT("Too many open files");
+-	}
+-        return(-1) /* exited? */;
+-    }
+-    if (GC_lwp_cache[next_victim].lc_id != 0)
+-        (void)syscall(SYS_close, GC_lwp_cache[next_victim].lc_descr);
+-    GC_lwp_cache[next_victim].lc_id = id;
+-    GC_lwp_cache[next_victim].lc_descr = result;
+-    if (++next_victim >= max_lwps)
+-	next_victim = 0;
+-    return(result);
+-}
+-
+-static void uncache_lwp(lwpid_t id)
+-{
+-    register int i;
+-    
+-    for (i = 0; i < max_lwps; i++) {
+-    	if (GC_lwp_cache[i].lc_id == id) {
+-    	    (void)syscall(SYS_close, GC_lwp_cache[id].lc_descr);
+-    	    GC_lwp_cache[i].lc_id = 0;
+-    	    break;
+-    	}
+-    }
+-}
+-	/* Sequence of current lwp ids	*/
+-static lwpid_t GC_current_ids_default[DEFAULT_MAX_LWPS + 1];
+-static lwpid_t *GC_current_ids = GC_current_ids_default;
+-
+-	/* Temporary used below (can be big if large number of LWPs) */
+-static lwpid_t last_ids_default[DEFAULT_MAX_LWPS + 1];
+-static lwpid_t *last_ids = last_ids_default;
+-
+-
+-#define ROUNDUP(n)    WORDS_TO_BYTES(ROUNDED_UP_WORDS(n))
+-
+-static void set_max_lwps(GC_word n)
+-{
+-    char *mem;
+-    char *oldmem;
+-    int required_bytes = ROUNDUP(n * sizeof(struct lwp_cache_entry))
+-	+ ROUNDUP(n * sizeof(prgregset_t))
+-	+ ROUNDUP((n + 1) * sizeof(lwpid_t))
+-	+ ROUNDUP((n + 1) * sizeof(lwpid_t));
+-
+-    GC_expand_hp_inner(divHBLKSZ((word)required_bytes));
+-    oldmem = mem = GC_scratch_alloc(required_bytes);
+-    if (0 == mem) ABORT("No space for lwp data structures");
+-
+-    /*
+-     * We can either flush the old lwp cache or copy it over. Do the latter.
+-     */
+-    memcpy(mem, GC_lwp_cache, max_lwps * sizeof(struct lwp_cache_entry));
+-    GC_lwp_cache = (struct lwp_cache_entry*)mem;
+-    mem += ROUNDUP(n * sizeof(struct lwp_cache_entry));
+-
+-    BZERO(GC_lwp_registers, max_lwps * sizeof(GC_lwp_registers[0]));
+-    GC_lwp_registers = (prgregset_t *)mem;
+-    mem += ROUNDUP(n * sizeof(prgregset_t));
+-
+-
+-    GC_current_ids = (lwpid_t *)mem;
+-    mem += ROUNDUP((n + 1) * sizeof(lwpid_t));
+-
+-    last_ids = (lwpid_t *)mem;
+-    mem += ROUNDUP((n + 1)* sizeof(lwpid_t));
+-
+-    if (mem > oldmem + required_bytes)
+-	ABORT("set_max_lwps buffer overflow");
+-
+-    max_lwps = n;
+-}
+-
+-
+-/* Stop all lwps in process.  Assumes preemption is off.	*/
+-/* Caller has allocation lock (and any other locks he may	*/
+-/* need).							*/
+-static void stop_all_lwps()
+-{
+-    int lwp_fd;
+-    char buf[30];
+-    prstatus_t status;
+-    register int i;
+-    GC_bool changed;
+-    lwpid_t me = _lwp_self();
+-
+-    if (GC_main_proc_fd == -1) {
+-    	sprintf(buf, "/proc/%d", getpid());
+-    	GC_main_proc_fd = syscall(SYS_open, buf, O_RDONLY);
+-        if (GC_main_proc_fd < 0) {
+-		if (errno == EMFILE)
+-			ABORT("/proc open failed: too many open files");
+-		GC_printf1("/proc open failed: errno %d", errno);
+-		abort();
+-        }
+-    }
+-    BZERO(GC_lwp_registers, sizeof (prgregset_t) * max_lwps);
+-    for (i = 0; i < max_lwps; i++)
+-	last_ids[i] = 0;
+-    for (;;) {
+-        if (syscall(SYS_ioctl, GC_main_proc_fd, PIOCSTATUS, &status) < 0)
+-    	    ABORT("Main PIOCSTATUS failed");
+-    	if (status.pr_nlwp < 1)
+-    		ABORT("Invalid number of lwps returned by PIOCSTATUS");
+-    	if (status.pr_nlwp >= max_lwps) {
+-    		set_max_lwps(status.pr_nlwp*2 + 10);
+-		/*
+-		 * The data in the old GC_current_ids and
+-		 * GC_lwp_registers has been trashed. Cleaning out last_ids
+-		 * will make sure every LWP gets re-examined.
+-		 */
+-        	for (i = 0; i < max_lwps; i++)
+-			last_ids[i] = 0;
+-		continue;
+-    	}
+-        if (syscall(SYS_ioctl, GC_main_proc_fd, PIOCLWPIDS, GC_current_ids) < 0)
+-            ABORT("PIOCLWPIDS failed");
+-        changed = FALSE;
+-        for (i = 0; GC_current_ids[i] != 0 && i < max_lwps; i++) {
+-            if (GC_current_ids[i] != last_ids[i]) {
+-                changed = TRUE;
+-                if (GC_current_ids[i] != me) {
+-		    /* PIOCSTOP doesn't work without a writable		*/
+-		    /* descriptor.  And that makes the process		*/
+-		    /* undebuggable.					*/
+-                    if (_lwp_suspend(GC_current_ids[i]) < 0) {
+-                        /* Could happen if the lwp exited */
+-                        uncache_lwp(GC_current_ids[i]);
+-                        GC_current_ids[i] = me; /* ignore */
+-                    }
+-                }
+-            }
+-        }
+-        /*
+-         * In the unlikely event something does a fork between the
+-	 * PIOCSTATUS and the PIOCLWPIDS. 
+-         */
+-        if (i >= max_lwps)
+-		continue;
+-        /* All lwps in GC_current_ids != me have been suspended.  Note	*/
+-        /* that _lwp_suspend is idempotent.				*/
+-        for (i = 0; GC_current_ids[i] != 0; i++) {
+-            if (GC_current_ids[i] != last_ids[i]) {
+-                if (GC_current_ids[i] != me) {
+-                    lwp_fd = open_lwp(GC_current_ids[i]);
+-		    if (lwp_fd == -1)
+-		    {
+-			    GC_current_ids[i] = me;
+-			    continue;
+-		    }
+-		    /* LWP should be stopped.  Empirically it sometimes	*/
+-		    /* isn't, and more frequently the PR_STOPPED flag	*/
+-		    /* is not set.  Wait for PR_STOPPED.		*/
+-                    if (syscall(SYS_ioctl, lwp_fd,
+-                                PIOCSTATUS, &status) < 0) {
+-			/* Possible if the descriptor was stale, or */
+-			/* we encountered the 2.3 _lwp_suspend bug. */
+-			uncache_lwp(GC_current_ids[i]);
+-                        GC_current_ids[i] = me; /* handle next time. */
+-                    } else {
+-                        while (!(status.pr_flags & PR_STOPPED)) {
+-                            GC_msec_sleep(1);
+-			    if (syscall(SYS_ioctl, lwp_fd,
+-				    	PIOCSTATUS, &status) < 0) {
+-                            	ABORT("Repeated PIOCSTATUS failed");
+-			    }
+-			    if (status.pr_flags & PR_STOPPED) break;
+-			    
+-			    GC_msec_sleep(20);
+-			    if (syscall(SYS_ioctl, lwp_fd,
+-				    	PIOCSTATUS, &status) < 0) {
+-                            	ABORT("Repeated PIOCSTATUS failed");
+-			    }
+-                        }
+-                        if (status.pr_who !=  GC_current_ids[i]) {
+-				/* can happen if thread was on death row */
+-				uncache_lwp(GC_current_ids[i]);
+-				GC_current_ids[i] = me; /* handle next time. */
+-				continue;	
+-                        }
+-                        /* Save registers where collector can */
+-			/* find them.			  */
+-			    BCOPY(status.pr_reg, GC_lwp_registers[i],
+-				  sizeof (prgregset_t));
+-                    }
+-                }
+-            }
+-        }
+-        if (!changed) break;
+-        for (i = 0; i < max_lwps; i++) last_ids[i] = GC_current_ids[i];
+-    }
+-}
+-
+-/* Restart all lwps in process.  Assumes preemption is off.	*/
+-static void restart_all_lwps()
+-{
+-    int lwp_fd;
+-    register int i;
+-    GC_bool changed;
+-    lwpid_t me = _lwp_self();
+-#   define PARANOID
+-
+-    for (i = 0; GC_current_ids[i] != 0; i++) {
+-#	ifdef PARANOID
+-	  if (GC_current_ids[i] != me) {
+-	    int lwp_fd = open_lwp(GC_current_ids[i]);
+-	    prstatus_t status;
+-	    
+-	    if (lwp_fd < 0) ABORT("open_lwp failed");
+-	    if (syscall(SYS_ioctl, lwp_fd,
+-			PIOCSTATUS, &status) < 0) {
+-                ABORT("PIOCSTATUS failed in restart_all_lwps");
+-	    }
+-	    if (memcmp(status.pr_reg, GC_lwp_registers[i],
+-		       sizeof (prgregset_t)) != 0) {
+-		    int j;
+-
+-		    for(j = 0; j < NPRGREG; j++)
+-		    {
+-			    GC_printf3("%i: %x -> %x\n", j,
+-				       GC_lwp_registers[i][j],
+-				       status.pr_reg[j]);
+-		    }
+-		ABORT("Register contents changed");
+-	    }
+-	    if (!status.pr_flags & PR_STOPPED) {
+-	    	ABORT("lwp no longer stopped");
+-	    }
+-#ifdef SPARC
+-	    {
+-		    gwindows_t windows;
+-	      if (syscall(SYS_ioctl, lwp_fd,
+-			PIOCGWIN, &windows) < 0) {
+-                ABORT("PIOCSTATUS failed in restart_all_lwps");
+-	      }
+-	      if (windows.wbcnt > 0) ABORT("unsaved register windows");
+-	    }
+-#endif
+-	  }
+-#	endif /* PARANOID */
+-	if (GC_current_ids[i] == me) continue;
+-        if (_lwp_continue(GC_current_ids[i]) < 0) {
+-            ABORT("Failed to restart lwp");
+-        }
+-    }
+-    if (i >= max_lwps) ABORT("Too many lwps");
+-}
+-
+-GC_bool GC_multithreaded = 0;
+-
+-void GC_stop_world()
+-{
+-    preempt_off();
+-    if (GC_multithreaded)
+-        stop_all_lwps();
+-}
+-
+-void GC_start_world()
+-{
+-    if (GC_multithreaded)
+-        restart_all_lwps();
+-    preempt_on();
+-}
+-
+-void GC_thr_init(void);
+-
+-GC_bool GC_thr_initialized = FALSE;
+-
+-size_t GC_min_stack_sz;
+-
+-
+-/*
+- * stack_head is stored at the top of free stacks
+- */
+-struct stack_head {
+-	struct stack_head	*next;
+-	ptr_t			base;
+-	thread_t		owner;
+-};
+-
+-# define N_FREE_LISTS 25
+-struct stack_head *GC_stack_free_lists[N_FREE_LISTS] = { 0 };
+-		/* GC_stack_free_lists[i] is free list for stacks of 	*/
+-		/* size GC_min_stack_sz*2**i.				*/
+-		/* Free lists are linked through stack_head stored	*/			/* at top of stack.					*/
+-
+-/* Return a stack of size at least *stack_size.  *stack_size is	*/
+-/* replaced by the actual stack size.				*/
+-/* Caller holds allocation lock.				*/
+-ptr_t GC_stack_alloc(size_t * stack_size)
+-{
+-    register size_t requested_sz = *stack_size;
+-    register size_t search_sz = GC_min_stack_sz;
+-    register int index = 0;	/* = log2(search_sz/GC_min_stack_sz) */
+-    register ptr_t base;
+-    register struct stack_head *result;
+-    
+-    while (search_sz < requested_sz) {
+-        search_sz *= 2;
+-        index++;
+-    }
+-    if ((result = GC_stack_free_lists[index]) == 0
+-        && (result = GC_stack_free_lists[index+1]) != 0) {
+-        /* Try next size up. */
+-        search_sz *= 2; index++;
+-    }
+-    if (result != 0) {
+-        base =  GC_stack_free_lists[index]->base;
+-        GC_stack_free_lists[index] = GC_stack_free_lists[index]->next;
+-    } else {
+-#ifdef MMAP_STACKS
+-        base = (ptr_t)mmap(0, search_sz + GC_page_size,
+-			     PROT_READ|PROT_WRITE, MAP_PRIVATE |MAP_NORESERVE,
+-			     GC_zfd, 0);
+-	if (base == (ptr_t)-1)
+-	{
+-		*stack_size = 0;
+-		return NULL;
+-	}
+-
+-	mprotect(base, GC_page_size, PROT_NONE);
+-	/* Should this use divHBLKSZ(search_sz + GC_page_size) ? -- cf */
+-	GC_is_fresh((struct hblk *)base, divHBLKSZ(search_sz));
+-	base += GC_page_size;
+-
+-#else
+-        base = (ptr_t) GC_scratch_alloc(search_sz + 2*GC_page_size);
+-	if (base == NULL)
+-	{
+-		*stack_size = 0;
+-		return NULL;
+-	}
+-
+-        base = (ptr_t)(((word)base + GC_page_size) & ~(GC_page_size - 1));
+-        /* Protect hottest page to detect overflow. */
+-#	ifdef SOLARIS23_MPROTECT_BUG_FIXED
+-            mprotect(base, GC_page_size, PROT_NONE);
+-#	endif
+-        GC_is_fresh((struct hblk *)base, divHBLKSZ(search_sz));
+-
+-        base += GC_page_size;
+-#endif
+-    }
+-    *stack_size = search_sz;
+-    return(base);
+-}
+-
+-/* Caller holds  allocationlock.					*/
+-void GC_stack_free(ptr_t stack, size_t size)
+-{
+-    register int index = 0;
+-    register size_t search_sz = GC_min_stack_sz;
+-    register struct stack_head *head;
+-    
+-#ifdef MMAP_STACKS
+-    /* Zero pointers */
+-    mmap(stack, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_NORESERVE|MAP_FIXED,
+-	 GC_zfd, 0);
+-#endif
+-    while (search_sz < size) {
+-        search_sz *= 2;
+-        index++;
+-    }
+-    if (search_sz != size) ABORT("Bad stack size");
+-
+-    head = (struct stack_head *)(stack + search_sz - sizeof(struct stack_head));
+-    head->next = GC_stack_free_lists[index];
+-    head->base = stack;
+-    GC_stack_free_lists[index] = head;
+-}
+-
+-void GC_my_stack_limits();
+-
+-/* Notify virtual dirty bit implementation that known empty parts of	*/
+-/* stacks do not contain useful data.					*/ 
+-/* Caller holds allocation lock.					*/
+-void GC_old_stacks_are_fresh()
+-{
+-/* No point in doing this for MMAP stacks - and pointers are zero'd out */
+-/* by the mmap in GC_stack_free */
+-#ifndef MMAP_STACKS
+-    register int i;
+-    register struct stack_head *s;
+-    register ptr_t p;
+-    register size_t sz;
+-    register struct hblk * h;
+-    int dummy;
+-    
+-    for (i = 0, sz= GC_min_stack_sz; i < N_FREE_LISTS;
+-         i++, sz *= 2) {
+-         for (s = GC_stack_free_lists[i]; s != 0; s = s->next) {
+-             p = s->base;
+-             h = (struct hblk *)(((word)p + HBLKSIZE-1) & ~(HBLKSIZE-1));
+-             if ((ptr_t)h == p) {
+-                 GC_is_fresh((struct hblk *)p, divHBLKSZ(sz));
+-             } else {
+-                 GC_is_fresh((struct hblk *)p, divHBLKSZ(sz) - 1);
+-                 BZERO(p, (ptr_t)h - p);
+-             }
+-         }
+-    }
+-#endif /* MMAP_STACKS */
+-    GC_my_stack_limits();
+-}
+-
+-/* The set of all known threads.  We intercept thread creation and 	*/
+-/* joins.  We never actually create detached threads.  We allocate all 	*/
+-/* new thread stacks ourselves.  These allow us to maintain this	*/
+-/* data structure.							*/
+-
+-# define THREAD_TABLE_SZ 128	/* Must be power of 2	*/
+-volatile GC_thread GC_threads[THREAD_TABLE_SZ];
+-
+-void GC_push_thread_structures GC_PROTO((void))
+-{
+-    GC_push_all((ptr_t)(GC_threads), (ptr_t)(GC_threads)+sizeof(GC_threads));
+-}
+-
+-/* Add a thread to GC_threads.  We assume it wasn't already there.	*/
+-/* Caller holds allocation lock.					*/
+-GC_thread GC_new_thread(thread_t id)
+-{
+-    int hv = ((word)id) % THREAD_TABLE_SZ;
+-    GC_thread result;
+-    static struct GC_Thread_Rep first_thread;
+-    static GC_bool first_thread_used = FALSE;
+-    
+-    if (!first_thread_used) {
+-    	result = &first_thread;
+-    	first_thread_used = TRUE;
+-    	/* Dont acquire allocation lock, since we may already hold it. */
+-    } else {
+-        result = (struct GC_Thread_Rep *)
+-        	 GC_INTERNAL_MALLOC(sizeof(struct GC_Thread_Rep), NORMAL);
+-    }
+-    if (result == 0) return(0);
+-    result -> id = id;
+-    result -> next = GC_threads[hv];
+-    GC_threads[hv] = result;
+-    /* result -> finished = 0; */
+-    (void) cond_init(&(result->join_cv), USYNC_THREAD, 0);
+-    return(result);
+-}
+-
+-/* Delete a thread from GC_threads.  We assume it is there.	*/
+-/* (The code intentionally traps if it wasn't.)			*/
+-/* Caller holds allocation lock.				*/
+-void GC_delete_thread(thread_t id)
+-{
+-    int hv = ((word)id) % THREAD_TABLE_SZ;
+-    register GC_thread p = GC_threads[hv];
+-    register GC_thread prev = 0;
+-    
+-    while (p -> id != id) {
+-        prev = p;
+-        p = p -> next;
+-    }
+-    if (prev == 0) {
+-        GC_threads[hv] = p -> next;
+-    } else {
+-        prev -> next = p -> next;
+-    }
+-}
+-
+-/* Return the GC_thread correpsonding to a given thread_t.	*/
+-/* Returns 0 if it's not there.					*/
+-/* Caller holds  allocation lock.				*/
+-GC_thread GC_lookup_thread(thread_t id)
+-{
+-    int hv = ((word)id) % THREAD_TABLE_SZ;
+-    register GC_thread p = GC_threads[hv];
+-    
+-    while (p != 0 && p -> id != id) p = p -> next;
+-    return(p);
+-}
+-
+-/* Solaris 2/Intel uses an initial stack size limit slightly bigger than the
+-   SPARC default of 8 MB.  Account for this to warn only if the user has
+-   raised the limit beyond the default.
+-
+-   This is identical to DFLSSIZ defined in <sys/vm_machparam.h>.  This file
+-   is installed in /usr/platform/`uname -m`/include, which is not in the
+-   default include directory list, so copy the definition here.  */
+-#ifdef I386
+-# define MAX_ORIG_STACK_SIZE (8 * 1024 * 1024 + ((USRSTACK) & 0x3FFFFF))
+-#else
+-# define MAX_ORIG_STACK_SIZE (8 * 1024 * 1024)
+-#endif
+-
+-word GC_get_orig_stack_size() {
+-    struct rlimit rl;
+-    static int warned = 0;
+-    int result;
+-
+-    if (getrlimit(RLIMIT_STACK, &rl) != 0) ABORT("getrlimit failed");
+-    result = (word)rl.rlim_cur & ~(HBLKSIZE-1);
+-    if (result > MAX_ORIG_STACK_SIZE) {
+-	if (!warned) {
+-	    WARN("Large stack limit(%ld): only scanning 8 MB\n", result);
+-	    warned = 1;
+-	}
+-	result = MAX_ORIG_STACK_SIZE;
+-    }
+-    return result;
+-}
+-
+-/* Notify dirty bit implementation of unused parts of my stack. */
+-/* Caller holds allocation lock.				*/
+-void GC_my_stack_limits()
+-{
+-    int dummy;
+-    register ptr_t hottest = (ptr_t)((word)(&dummy) & ~(HBLKSIZE-1));
+-    register GC_thread me = GC_lookup_thread(thr_self());
+-    register size_t stack_size = me -> stack_size;
+-    register ptr_t stack;
+-    
+-    if (stack_size == 0) {
+-      /* original thread */
+-        /* Empirically, what should be the stack page with lowest	*/
+-        /* address is actually inaccessible.				*/
+-        stack_size = GC_get_orig_stack_size() - GC_page_size;
+-        stack = GC_stackbottom - stack_size + GC_page_size;
+-    } else {
+-        stack = me -> stack;
+-    }
+-    if (stack > hottest || stack + stack_size < hottest) {
+-    	ABORT("sp out of bounds");
+-    }
+-    GC_is_fresh((struct hblk *)stack, divHBLKSZ(hottest - stack));
+-}
+-
+-
+-/* We hold allocation lock.  Should do exactly the right thing if the	*/
+-/* world is stopped.  Should not fail if it isn't.			*/
+-void GC_push_all_stacks()
+-{
+-    register int i;
+-    register GC_thread p;
+-    register ptr_t sp = GC_approx_sp();
+-    register ptr_t bottom, top;
+-    struct rlimit rl;
+-    
+-#   define PUSH(bottom,top) \
+-      if (GC_dirty_maintained) { \
+-	GC_push_selected((bottom), (top), GC_page_was_ever_dirty, \
+-		      GC_push_all_stack); \
+-      } else { \
+-        GC_push_all_stack((bottom), (top)); \
+-      }
+-    GC_push_all_stack((ptr_t)GC_lwp_registers,
+-		      (ptr_t)GC_lwp_registers
+-		      + max_lwps * sizeof(GC_lwp_registers[0]));
+-    for (i = 0; i < THREAD_TABLE_SZ; i++) {
+-      for (p = GC_threads[i]; p != 0; p = p -> next) {
+-        if (p -> stack_size != 0) {
+-            bottom = p -> stack;
+-            top = p -> stack + p -> stack_size;
+-        } else {
+-            /* The original stack. */
+-            bottom = GC_stackbottom - GC_get_orig_stack_size() + GC_page_size;
+-            top = GC_stackbottom;
+-        }
+-        if ((word)sp > (word)bottom && (word)sp < (word)top) bottom = sp;
+-        PUSH(bottom, top);
+-      }
+-    }
+-}
+-
+-
+-int GC_is_thread_stack(ptr_t addr)
+-{
+-    register int i;
+-    register GC_thread p;
+-    register ptr_t bottom, top;
+-    
+-    for (i = 0; i < THREAD_TABLE_SZ; i++) {
+-      for (p = GC_threads[i]; p != 0; p = p -> next) {
+-        if (p -> stack_size != 0) {
+-            if (p -> stack <= addr &&
+-		addr < p -> stack + p -> stack_size)
+-		    return 1;
+-	}
+-      }
+-    }
+-    return 0;
+-}
+-
+-/* The only thread that ever really performs a thr_join.	*/
+-void * GC_thr_daemon(void * dummy)
+-{
+-    void *status;
+-    thread_t departed;
+-    register GC_thread t;
+-    register int i;
+-    register int result;
+-    
+-    for(;;) {
+-      start:
+-        result = thr_join((thread_t)0, &departed, &status);
+-    	LOCK();
+-    	if (result != 0) {
+-    	    /* No more threads; wait for create. */
+-    	    for (i = 0; i < THREAD_TABLE_SZ; i++) {
+-    	        for (t = GC_threads[i]; t != 0; t = t -> next) {
+-                    if (!(t -> flags & (DETACHED | FINISHED))) {
+-                      UNLOCK();
+-                      goto start; /* Thread started just before we */
+-                      		  /* acquired the lock.		   */
+-                    }
+-                }
+-            }
+-            cond_wait(&GC_create_cv, &GC_allocate_ml);
+-            UNLOCK();
+-    	} else {
+-    	    t = GC_lookup_thread(departed);
+-	    GC_multithreaded--;
+-    	    if (!(t -> flags & CLIENT_OWNS_STACK)) {
+-    	    	GC_stack_free(t -> stack, t -> stack_size);
+-    	    }
+-    	    if (t -> flags & DETACHED) {
+-    	    	GC_delete_thread(departed);
+-    	    } else {
+-    	        t -> status = status;
+-    	    	t -> flags |= FINISHED;
+-    	    	cond_signal(&(t -> join_cv));
+-    	    	cond_broadcast(&GC_prom_join_cv);
+-    	    }
+-    	    UNLOCK();
+-    	}
+-    }
+-}
+-
+-/* We hold the allocation lock, or caller ensures that 2 instances	*/
+-/* cannot be invoked concurrently.					*/
+-void GC_thr_init(void)
+-{
+-    GC_thread t;
+-    thread_t tid;
+-    int ret;
+-
+-    if (GC_thr_initialized)
+-	    return;
+-    GC_thr_initialized = TRUE;
+-    GC_min_stack_sz = ((thr_min_stack() + 32*1024 + HBLKSIZE-1)
+-    		       & ~(HBLKSIZE - 1));
+-#ifdef MMAP_STACKS
+-    GC_zfd = open("/dev/zero", O_RDONLY);
+-    if (GC_zfd == -1)
+-	    ABORT("Can't open /dev/zero");
+-#endif /* MMAP_STACKS */
+-    cond_init(&GC_prom_join_cv, USYNC_THREAD, 0);
+-    cond_init(&GC_create_cv, USYNC_THREAD, 0);
+-    /* Add the initial thread, so we can stop it.	*/
+-      t = GC_new_thread(thr_self());
+-      t -> stack_size = 0;
+-      t -> flags = DETACHED | CLIENT_OWNS_STACK;
+-    ret = thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon,
+-    		     0 /* arg */, THR_DETACHED | THR_DAEMON,
+-    		     &tid /* thread_id */);
+-    if (ret != 0) {
+-	GC_err_printf1("Thr_create returned %ld\n", ret);
+-    	ABORT("Cant fork daemon");
+-    }
+-    thr_setprio(tid, 126);
+-}
+-
+-/* We acquire the allocation lock to prevent races with 	*/
+-/* stopping/starting world.					*/
+-/* This is no more correct than the underlying Solaris 2.X	*/
+-/* implementation.  Under 2.3 THIS IS BROKEN.			*/
+-int GC_thr_suspend(thread_t target_thread)
+-{
+-    GC_thread t;
+-    int result;
+-    
+-    LOCK();
+-    result = thr_suspend(target_thread);
+-    if (result == 0) {
+-    	t = GC_lookup_thread(target_thread);
+-    	if (t == 0) ABORT("thread unknown to GC");
+-        t -> flags |= SUSPNDED;
+-    }
+-    UNLOCK();
+-    return(result);
+-}
+-
+-int GC_thr_continue(thread_t target_thread)
+-{
+-    GC_thread t;
+-    int result;
+-    
+-    LOCK();
+-    result = thr_continue(target_thread);
+-    if (result == 0) {
+-    	t = GC_lookup_thread(target_thread);
+-    	if (t == 0) ABORT("thread unknown to GC");
+-        t -> flags &= ~SUSPNDED;
+-    }
+-    UNLOCK();
+-    return(result);
+-}
+-
+-int GC_thr_join(thread_t wait_for, thread_t *departed, void **status)
+-{
+-    register GC_thread t;
+-    int result = 0;
+-    
+-    LOCK();
+-    if (wait_for == 0) {
+-        register int i;
+-        register GC_bool thread_exists;
+-    
+-    	for (;;) {
+-    	  thread_exists = FALSE;
+-    	  for (i = 0; i < THREAD_TABLE_SZ; i++) {
+-    	    for (t = GC_threads[i]; t != 0; t = t -> next) {
+-              if (!(t -> flags & DETACHED)) {
+-                if (t -> flags & FINISHED) {
+-                  goto found;
+-                }
+-                thread_exists = TRUE;
+-              }
+-            }
+-          }
+-          if (!thread_exists) {
+-              result = ESRCH;
+-    	      goto out;
+-          }
+-          cond_wait(&GC_prom_join_cv, &GC_allocate_ml);
+-        }
+-    } else {
+-        t = GC_lookup_thread(wait_for);
+-    	if (t == 0 || t -> flags & DETACHED) {
+-    	    result = ESRCH;
+-    	    goto out;
+-    	}
+-    	if (wait_for == thr_self()) {
+-    	    result = EDEADLK;
+-    	    goto out;
+-    	}
+-    	while (!(t -> flags & FINISHED)) {
+-            cond_wait(&(t -> join_cv), &GC_allocate_ml);
+-    	}
+-    	
+-    }
+-  found:
+-    if (status) *status = t -> status;
+-    if (departed) *departed = t -> id;
+-    cond_destroy(&(t -> join_cv));
+-    GC_delete_thread(t -> id);
+-  out:
+-    UNLOCK();
+-    return(result);
+-}
+-
+-
+-int
+-GC_thr_create(void *stack_base, size_t stack_size,
+-              void *(*start_routine)(void *), void *arg, long flags,
+-              thread_t *new_thread)
+-{
+-    int result;
+-    GC_thread t;
+-    thread_t my_new_thread;
+-    word my_flags = 0;
+-    void * stack = stack_base;
+-   
+-    LOCK();
+-    if (!GC_is_initialized) GC_init_inner();
+-    GC_multithreaded++;
+-    if (stack == 0) {
+-     	if (stack_size == 0) stack_size = 1024*1024;
+-     	stack = (void *)GC_stack_alloc(&stack_size);
+-     	if (stack == 0) {
+-	    GC_multithreaded--;
+-     	    UNLOCK();
+-     	    return(ENOMEM);
+-     	}
+-    } else {
+-    	my_flags |= CLIENT_OWNS_STACK;
+-    }
+-    if (flags & THR_DETACHED) my_flags |= DETACHED;
+-    if (flags & THR_SUSPENDED) my_flags |= SUSPNDED;
+-    result = thr_create(stack, stack_size, start_routine,
+-   		        arg, flags & ~THR_DETACHED, &my_new_thread);
+-    if (result == 0) {
+-        t = GC_new_thread(my_new_thread);
+-        t -> flags = my_flags;
+-        if (!(my_flags & DETACHED)) cond_init(&(t -> join_cv), USYNC_THREAD, 0);
+-        t -> stack = stack;
+-        t -> stack_size = stack_size;
+-        if (new_thread != 0) *new_thread = my_new_thread;
+-        cond_signal(&GC_create_cv);
+-    } else {
+-	GC_multithreaded--;
+-        if (!(my_flags & CLIENT_OWNS_STACK)) {
+-      	    GC_stack_free(stack, stack_size);
+-	}
+-    }        
+-    UNLOCK();  
+-    return(result);
+-}
+-
+-# else /* !GC_SOLARIS_THREADS */
+-
+-#ifndef LINT
+-  int GC_no_sunOS_threads;
+-#endif
+-#endif
+Index: boehm-gc/Makefile.in
+===================================================================
+--- boehm-gc/Makefile.in	(revision 124389)
++++ boehm-gc/Makefile.in	(revision 126334)
+@@ -62,9 +62,8 @@
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+ 	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+-	$(srcdir)/../compile $(srcdir)/../compile $(srcdir)/../compile \
+-	$(srcdir)/../compile $(srcdir)/../ltmain.sh \
+-	$(srcdir)/../config.guess $(srcdir)/../config.sub
++	$(srcdir)/../ltmain.sh $(srcdir)/../config.guess \
++	$(srcdir)/../config.sub
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+@@ -86,8 +85,7 @@
+ 	dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
+ 	headers.lo malloc.lo mallocx.lo mark.lo mark_rts.lo misc.lo \
+ 	new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo ptr_chck.lo \
+-	real_malloc.lo reclaim.lo solaris_pthreads.lo \
+-	solaris_threads.lo specific.lo stubborn.lo typd_mlc.lo \
++	real_malloc.lo reclaim.lo specific.lo stubborn.lo typd_mlc.lo \
+ 	backgraph.lo win32_threads.lo pthread_support.lo \
+ 	pthread_stop_world.lo darwin_stop_world.lo $(am__objects_1)
+ libgcjgc_la_OBJECTS = $(am_libgcjgc_la_OBJECTS)
+@@ -95,8 +93,7 @@
+ 	dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
+ 	headers.lo malloc.lo mallocx.lo mark.lo mark_rts.lo misc.lo \
+ 	new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo ptr_chck.lo \
+-	real_malloc.lo reclaim.lo solaris_pthreads.lo \
+-	solaris_threads.lo specific.lo stubborn.lo typd_mlc.lo \
++	real_malloc.lo reclaim.lo specific.lo stubborn.lo typd_mlc.lo \
+ 	backgraph.lo win32_threads.lo pthread_support.lo \
+ 	pthread_stop_world.lo darwin_stop_world.lo $(am__objects_1)
+ am_libgcjgc_convenience_la_OBJECTS = $(am__objects_2)
+@@ -105,7 +102,8 @@
+ am__dirstamp = $(am__leading_dot)dirstamp
+ am_gctest_OBJECTS = tests/test.$(OBJEXT)
+ gctest_OBJECTS = $(am_gctest_OBJECTS)
+-gctest_DEPENDENCIES = ./libgcjgc.la $(am__DEPENDENCIES_1)
++gctest_DEPENDENCIES = ./libgcjgc.la $(am__DEPENDENCIES_1) \
++	$(am__DEPENDENCIES_1)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include
+ depcomp =
+ am__depfiles_maybe =
+@@ -263,7 +261,7 @@
+ dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c \
+ malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
+ obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \
+-solaris_pthreads.c solaris_threads.c specific.c stubborn.c typd_mlc.c \
++specific.c stubborn.c typd_mlc.c \
+ backgraph.c win32_threads.c \
+ pthread_support.c pthread_stop_world.c darwin_stop_world.c \
+ $(asm_libgcjgc_sources)
+@@ -285,7 +283,7 @@
+ AM_CXXFLAGS = @GC_CFLAGS@
+ AM_CFLAGS = @GC_CFLAGS@
+ gctest_SOURCES = tests/test.c
+-gctest_LDADD = ./libgcjgc.la $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
++gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
+ gctest_LDFLAGS = -shared-libgcc
+ TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
+ TESTS = gctest
+Index: boehm-gc/configure.ac
+===================================================================
+--- boehm-gc/configure.ac	(revision 124389)
++++ boehm-gc/configure.ac	(revision 126334)
+@@ -162,8 +162,12 @@
+ 	THREADLIBS=-pthread
+       	;;
+      *-*-solaris*)
+-	AC_DEFINE(GC_SOLARIS_THREADS,1,[support for Solaris (thr_) threads])
+ 	AC_DEFINE(GC_SOLARIS_PTHREADS,1,[support for Solaris pthreads])
++	# Need to use alternate thread library, otherwise gctest hangs
++	# on Solaris 8.
++	multi_os_directory=`$CC -print-multi-os-directory`
++	THREADLIBS="-L/usr/lib/lwp/$multi_os_directory \
++		    -R/usr/lib/lwp/$multi_os_directory -lpthread -lthread -lrt"
+ 	;;
+      *-*-irix*)
+ 	AC_DEFINE(GC_IRIX_THREADS,1,[support for Irix pthreads])
+Index: boehm-gc/include/gc.h
+===================================================================
+--- boehm-gc/include/gc.h	(revision 124389)
++++ boehm-gc/include/gc.h	(revision 126334)
+@@ -1085,5 +1085,6 @@
+   && !defined(GC_WIN32_THREADS) && !defined(GC_DARWIN_THREADS)
+ GC_API void GC_suspend_thread GC_PROTO((pthread_t));
+ GC_API void GC_resume_thread GC_PROTO((pthread_t));
++GC_API int GC_is_thread_suspended GC_PROTO((pthread_t));
+ #endif
+ #endif /* _GC_H */
+Index: boehm-gc/include/gc_config_macros.h
+===================================================================
+--- boehm-gc/include/gc_config_macros.h	(revision 124389)
++++ boehm-gc/include/gc_config_macros.h	(revision 126334)
+@@ -72,10 +72,6 @@
+ # define GC_WIN32_THREADS
+ #endif
+ 
+-#if defined(GC_SOLARIS_PTHREADS) && !defined(GC_SOLARIS_THREADS)
+-#   define GC_SOLARIS_THREADS
+-#endif
+-
+ # define __GC
+ # ifndef _WIN32_WCE
+ #   include <stddef.h>
+Index: boehm-gc/include/private/solaris_threads.h
+===================================================================
+--- boehm-gc/include/private/solaris_threads.h	(revision 124389)
++++ boehm-gc/include/private/solaris_threads.h	(revision 126334)
+@@ -1,37 +0,0 @@
+-#ifdef GC_SOLARIS_THREADS
+-
+-/* The set of all known threads.  We intercept thread creation and     */
+-/* joins.  We never actually create detached threads.  We allocate all */
+-/* new thread stacks ourselves.  These allow us to maintain this       */
+-/* data structure.                                                     */
+-/* Protected by GC_thr_lock.                                           */
+-/* Some of this should be declared volatile, but that's incosnsistent  */
+-/* with some library routine declarations.  In particular, the 	       */
+-/* definition of cond_t doesn't mention volatile!                      */
+-  typedef struct GC_Thread_Rep {
+-    struct GC_Thread_Rep * next;
+-    thread_t id;
+-    word flags;
+-#      define FINISHED 1       /* Thread has exited.   */
+-#      define DETACHED 2       /* Thread is intended to be detached.   */
+-#      define CLIENT_OWNS_STACK        4
+-                               /* Stack was supplied by client.        */
+-#      define SUSPNDED 8       /* Currently suspended.			*/
+-    			       /* SUSPENDED is used insystem header.	*/
+-    ptr_t stack;
+-    size_t stack_size;
+-    cond_t join_cv;
+-    void * status;
+-  } * GC_thread;
+-  extern GC_thread GC_new_thread(thread_t id);
+-
+-  extern GC_bool GC_thr_initialized;
+-  extern volatile GC_thread GC_threads[];
+-  extern size_t GC_min_stack_sz;
+-  extern size_t GC_page_sz;
+-  extern void GC_thr_init(void);
+-  extern ptr_t GC_stack_alloc(size_t * stack_size);
+-  extern void GC_stack_free(ptr_t stack, size_t size);
+-
+-# endif /* GC_SOLARIS_THREADS */
+-
+Index: boehm-gc/include/private/gcconfig.h
+===================================================================
+--- boehm-gc/include/private/gcconfig.h	(revision 124389)
++++ boehm-gc/include/private/gcconfig.h	(revision 126334)
+@@ -153,6 +153,11 @@
+ #    define SUNOS5
+ #    define mach_type_known
+ # endif
++# if defined(sun) && defined(__amd64)
++#    define X86_64
++#    define SUNOS5
++#    define mach_type_known
++# endif
+ # if (defined(__OS2__) || defined(__EMX__)) && defined(__32BIT__)
+ #    define I386
+ #    define OS2
+@@ -1961,6 +1966,36 @@
+ 	extern char etext[];
+ #	define SEARCH_FOR_DATA_START
+ #   endif
++#   ifdef SUNOS5
++#	define ELF_CLASS ELFCLASS64
++#	define OS_TYPE "SUNOS5"
++        extern int _etext[], _end[];
++  	extern ptr_t GC_SysVGetDataStart();
++#       define DATASTART GC_SysVGetDataStart(0x1000, _etext)
++#	define DATAEND (_end)
++/*	# define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7,  	*/
++/*      but reportedly breaks under 2.8.  It appears that the stack	*/
++/* 	base is a property of the executable, so this should not break	*/
++/* 	old executables.						*/
++/*  	HEURISTIC2 probably works, but this appears to be preferable.	*/
++/* #       include <sys/vm.h> */
++/* #	define STACKBOTTOM USRSTACK */
++#	define HEURISTIC2
++#	define PROC_VDB
++#	define DYNAMIC_LOADING
++#	if !defined(USE_MMAP) && defined(REDIRECT_MALLOC)
++#	    define USE_MMAP
++	    /* Otherwise we now use calloc.  Mmap may result in the	*/
++	    /* heap interleaved with thread stacks, which can result in	*/
++	    /* excessive blacklisting.  Sbrk is unusable since it	*/
++	    /* doesn't interact correctly with the system malloc.	*/
++#	endif
++#       ifdef USE_MMAP
++#         define HEAP_START (ptr_t)0x40000000
++#       else
++#	  define HEAP_START DATAEND
++#       endif
++#   endif
+ # endif
+ 
+ #if defined(LINUX) && defined(USE_MMAP)
+@@ -2106,11 +2141,6 @@
+ 		((word*)x)[1] = 0;
+ # endif /* CLEAR_DOUBLE */
+ 
+-	/* Internally we use GC_SOLARIS_THREADS to test for either old or pthreads. */
+-# if defined(GC_SOLARIS_PTHREADS) && !defined(GC_SOLARIS_THREADS)
+-#   define GC_SOLARIS_THREADS
+-# endif
+-
+ # if defined(GC_IRIX_THREADS) && !defined(IRIX5)
+ 	--> inconsistent configuration
+ # endif
+Index: boehm-gc/ChangeLog
+===================================================================
+--- boehm-gc/ChangeLog	(revision 124389)
++++ boehm-gc/ChangeLog	(revision 126334)
+@@ -1,3 +1,37 @@
++2007-07-02  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	PR boehm-gc/21940
++	PR boehm-gc/21942
++	* configure.ac (GC_SOLARIS_THREADS): Don't define on *-*-solaris*.
++	Use alternate thread library in /usr/lib/lwp.
++	* configure: Regenerate.
++	* dyn_load.c: Use GC_SOLARIS_PTHREADS.
++	* include/gc_config_macros.h (GC_SOLARIS_THREADS): Don't define.
++	* include/private/gcconfig.h: Handle 64-bit Solaris 2/x86.
++	(GC_SOLARIS_THREADS): Don't define.
++	* include/private/solaris_threads.h: Remove.
++	* pthread_support.c (GC_thr_init) [GC_SOLARIS_PTHREADS]: Determine
++	GC_nprocs via sysconf().
++	* Makefile.am (libgcjgc_la_SOURCES): Remove solaris_pthreads.c and
++	solaris_threads.c.
++	(gctest_LDADD): Use THREADLIBS instead of THREADDLLIBS.
++	* Makefile.in: Regenerate.	 
++	* solaris_pthreads.c: Remove.
++	* solaris_threads.c: Remove.
++
++2007-06-22  Jakub Jelinek  <jakub@redhat.com>
++
++	* pthread_support.c (GC_get_thread_stack_base): Handle
++	pthread_getattr_np failures.
++
++2007-05-18  Keith Seitz  <keiths@redhat.com>
++
++	Merged from trunk:
++
++	2007-04-23  Keith Seitz  <keiths@redhat.com>
++	* include/gc.h (GC_is_thread_suspended): Declare.
++	* pthread_stop_world.c (GC_is_thread_suspended): New function.
++
+ 2007-04-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* configure.ac (NO_EXECUTE_PERMISSION): Set by default.
+Index: boehm-gc/configure
+===================================================================
+--- boehm-gc/configure	(revision 124389)
++++ boehm-gc/configure	(revision 126334)
+@@ -5458,14 +5458,14 @@
+      *-*-solaris*)
+ 
+ cat >>confdefs.h <<\_ACEOF
+-#define GC_SOLARIS_THREADS 1
+-_ACEOF
+-
+-
+-cat >>confdefs.h <<\_ACEOF
+ #define GC_SOLARIS_PTHREADS 1
+ _ACEOF
+ 
++	# Need to use alternate thread library, otherwise gctest hangs
++	# on Solaris 8.
++	multi_os_directory=`$CC -print-multi-os-directory`
++	THREADLIBS="-L/usr/lib/lwp/$multi_os_directory \
++		    -R/usr/lib/lwp/$multi_os_directory -lpthread -lthread -lrt"
+ 	;;
+      *-*-irix*)
+ 
+Index: boehm-gc/pthread_stop_world.c
+===================================================================
+--- boehm-gc/pthread_stop_world.c	(revision 124389)
++++ boehm-gc/pthread_stop_world.c	(revision 126334)
+@@ -483,6 +483,14 @@
+   t -> flags &= ~SUSPENDED;
+ }
+ 
++int GC_is_thread_suspended(pthread_t thread) {
++  GC_thread t = GC_lookup_thread(thread);
++  if (t == NULL)
++    ABORT("querying suspension state of unknown thread");
++
++  return (t -> flags & SUSPENDED);
++}
++
+ /* Caller holds allocation lock, and has held it continuously since	*/
+ /* the world stopped.							*/
+ void GC_start_world()
+Index: boehm-gc/pthread_support.c
+===================================================================
+--- boehm-gc/pthread_support.c	(revision 124389)
++++ boehm-gc/pthread_support.c	(revision 126334)
+@@ -883,7 +883,8 @@
+ #       if defined(GC_HPUX_THREADS)
+ 	  GC_nprocs = pthread_num_processors_np();
+ #       endif
+-#	if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS)
++#	if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS) \
++	   || defined(GC_SOLARIS_PTHREADS)
+ 	  GC_nprocs = sysconf(_SC_NPROCESSORS_ONLN);
+ 	  if (GC_nprocs <= 0) GC_nprocs = 1;
+ #	endif
+@@ -1135,7 +1136,13 @@
+   size_t stack_size;
+   
+   my_pthread = pthread_self();  
+-  pthread_getattr_np (my_pthread, &attr);
++  if (pthread_getattr_np (my_pthread, &attr) != 0)
++    {
++#   ifdef DEBUG_THREADS
++      GC_printf1("Can not determine stack base for attached thread");
++#   endif
++      return 0;
++    }
+   pthread_attr_getstack (&attr, (void **) &stack_addr, &stack_size);
+   pthread_attr_destroy (&attr);
+   
+Index: boehm-gc/Makefile.am
+===================================================================
+--- boehm-gc/Makefile.am	(revision 124389)
++++ boehm-gc/Makefile.am	(revision 126334)
+@@ -21,7 +21,7 @@
+ dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c \
+ malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
+ obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \
+-solaris_pthreads.c solaris_threads.c specific.c stubborn.c typd_mlc.c \
++specific.c stubborn.c typd_mlc.c \
+ backgraph.c win32_threads.c \
+ pthread_support.c pthread_stop_world.c darwin_stop_world.c \
+ $(asm_libgcjgc_sources)
+@@ -47,7 +47,7 @@
+ 
+ check_PROGRAMS = gctest
+ gctest_SOURCES = tests/test.c
+-gctest_LDADD = ./libgcjgc.la $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
++gctest_LDADD = ./libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
+ gctest_LDFLAGS = -shared-libgcc
+ TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
+ TESTS = gctest
+Index: boehm-gc/dyn_load.c
+===================================================================
+--- boehm-gc/dyn_load.c	(revision 124389)
++++ boehm-gc/dyn_load.c	(revision 126334)
+@@ -225,7 +225,7 @@
+ 
+ # if defined(SUNOS4) || defined(SUNOS5DL)
+ /* Add dynamic library data sections to the root set.		*/
+-# if !defined(PCR) && !defined(GC_SOLARIS_THREADS) && defined(THREADS)
++# if !defined(PCR) && !defined(GC_SOLARIS_PTHREADS) && defined(THREADS)
+ #   ifndef SRC_M3
+ 	--> fix mutual exclusion with dlopen
+ #   endif  /* We assume M3 programs don't call dlopen for now */
+Index: libjava/Makefile.in
+===================================================================
+--- libjava/Makefile.in	(revision 125219)
++++ libjava/Makefile.in	(revision 126334)
+@@ -156,9 +156,10 @@
+ 	gnu/classpath/jdwp/exception.lo gnu/classpath/jdwp/id.lo \
+ 	gnu/classpath/jdwp/processor.lo \
+ 	gnu/classpath/jdwp/transport.lo gnu/classpath/jdwp/util.lo \
+-	gnu/gcj.lo gnu/gcj/convert.lo gnu/gcj/io.lo gnu/gcj/jvmti.lo \
+-	gnu/gcj/runtime.lo gnu/gcj/util.lo gnu/java/awt.lo \
+-	gnu/java/awt/color.lo gnu/java/awt/dnd.lo gnu/java/awt/font.lo \
++	gnu/classpath/jdwp/value.lo gnu/gcj.lo gnu/gcj/convert.lo \
++	gnu/gcj/io.lo gnu/gcj/jvmti.lo gnu/gcj/runtime.lo \
++	gnu/gcj/util.lo gnu/java/awt.lo gnu/java/awt/color.lo \
++	gnu/java/awt/dnd.lo gnu/java/awt/font.lo \
+ 	gnu/java/awt/font/autofit.lo gnu/java/awt/font/opentype.lo \
+ 	gnu/java/awt/font/opentype/truetype.lo gnu/java/awt/image.lo \
+ 	gnu/java/awt/java2d.lo gnu/java/awt/peer.lo \
+@@ -1188,15 +1189,19 @@
+ 
+ gnu_classpath_jdwp_event_filters_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_event_filters_source_files)))
+ gnu_classpath_jdwp_exception_source_files = \
++classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidClassException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidCountException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java \
++classpath/gnu/classpath/jdwp/exception/InvalidFrameException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java \
++classpath/gnu/classpath/jdwp/exception/InvalidSlotException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidStringException.java \
++classpath/gnu/classpath/jdwp/exception/InvalidTagException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java \
+ classpath/gnu/classpath/jdwp/exception/JdwpException.java \
+@@ -1204,6 +1209,7 @@
+ classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java \
+ classpath/gnu/classpath/jdwp/exception/NativeMethodException.java \
+ classpath/gnu/classpath/jdwp/exception/NotImplementedException.java \
++classpath/gnu/classpath/jdwp/exception/TypeMismatchException.java \
+ classpath/gnu/classpath/jdwp/exception/VmDeadException.java
+ 
+ gnu_classpath_jdwp_exception_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_exception_source_files)))
+@@ -1215,6 +1221,7 @@
+ classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java \
+ classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java \
+ classpath/gnu/classpath/jdwp/id/JdwpId.java \
++classpath/gnu/classpath/jdwp/id/NullObjectId.java \
+ classpath/gnu/classpath/jdwp/id/ObjectId.java \
+ classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java \
+ classpath/gnu/classpath/jdwp/id/StringId.java \
+@@ -1259,11 +1266,30 @@
+ classpath/gnu/classpath/jdwp/util/LineTable.java \
+ classpath/gnu/classpath/jdwp/util/Location.java \
+ classpath/gnu/classpath/jdwp/util/MethodResult.java \
++classpath/gnu/classpath/jdwp/util/MonitorInfo.java \
++classpath/gnu/classpath/jdwp/util/NullObject.java \
+ classpath/gnu/classpath/jdwp/util/Signature.java \
+ classpath/gnu/classpath/jdwp/util/Value.java \
+ classpath/gnu/classpath/jdwp/util/VariableTable.java
+ 
+ gnu_classpath_jdwp_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_util_source_files)))
++gnu_classpath_jdwp_value_source_files = \
++classpath/gnu/classpath/jdwp/value/ArrayValue.java \
++classpath/gnu/classpath/jdwp/value/BooleanValue.java \
++classpath/gnu/classpath/jdwp/value/ByteValue.java \
++classpath/gnu/classpath/jdwp/value/CharValue.java \
++classpath/gnu/classpath/jdwp/value/DoubleValue.java \
++classpath/gnu/classpath/jdwp/value/FloatValue.java \
++classpath/gnu/classpath/jdwp/value/IntValue.java \
++classpath/gnu/classpath/jdwp/value/LongValue.java \
++classpath/gnu/classpath/jdwp/value/ObjectValue.java \
++classpath/gnu/classpath/jdwp/value/ShortValue.java \
++classpath/gnu/classpath/jdwp/value/StringValue.java \
++classpath/gnu/classpath/jdwp/value/Value.java \
++classpath/gnu/classpath/jdwp/value/ValueFactory.java \
++classpath/gnu/classpath/jdwp/value/VoidValue.java
++
++gnu_classpath_jdwp_value_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_value_source_files)))
+ gnu_gcj_source_files = \
+ gnu/gcj/Core.java \
+ gnu/gcj/RawData.java \
+@@ -7184,6 +7210,7 @@
+   gnu/classpath/jdwp/processor.list \
+   gnu/classpath/jdwp/transport.list \
+   gnu/classpath/jdwp/util.list \
++  gnu/classpath/jdwp/value.list \
+   gnu/gcj.list \
+   gnu/gcj/convert.list \
+   gnu/gcj/io.list \
+@@ -7428,6 +7455,7 @@
+   $(gnu_classpath_jdwp_processor_header_files) \
+   $(gnu_classpath_jdwp_transport_header_files) \
+   $(gnu_classpath_jdwp_util_header_files) \
++  $(gnu_classpath_jdwp_value_header_files) \
+   $(gnu_gcj_header_files) \
+   $(gnu_gcj_convert_header_files) \
+   $(gnu_gcj_io_header_files) \
+@@ -10004,6 +10032,12 @@
+ 
+ -include gnu/classpath/jdwp/util.deps
+ 
++gnu/classpath/jdwp/value.list: $(gnu_classpath_jdwp_value_source_files)
++	@$(mkinstalldirs) $(dir $@)
++	echo $(srcdir)/classpath/lib/gnu/classpath/jdwp/value/*.class > gnu/classpath/jdwp/value.list
++
++-include gnu/classpath/jdwp/value.deps
++
+ gnu/gcj.list: $(gnu_gcj_source_files)
+ 	@$(mkinstalldirs) $(dir $@)
+ 	echo $(srcdir)/classpath/lib/gnu/gcj/*.class > gnu/gcj.list
+Index: libjava/interpret.cc
+===================================================================
+--- libjava/interpret.cc	(revision 125219)
++++ libjava/interpret.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // interpret.cc - Code for the interpreter
+ 
+-/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
++/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -37,8 +37,12 @@
+ #include <execution.h>
+ #include <java/lang/reflect/Modifier.h>
+ 
+-#include <gnu/classpath/jdwp/Jdwp.h>
++#include <jvmti.h>
++#include "jvmti-int.h"
+ 
++#include <gnu/gcj/jvmti/Breakpoint.h>
++#include <gnu/gcj/jvmti/BreakpointManager.h>
++
+ #ifdef INTERPRETER
+ 
+ // Execution engine for interpreted code.
+@@ -60,6 +64,16 @@
+ static void throw_class_format_error (const char *msg)
+ 	__attribute__ ((__noreturn__));
+ 
++static void find_catch_location (jthrowable, jthread, jmethodID *, jlong *);
++
++// A macro to facilitate JVMTI exception reporting
++#define REPORT_EXCEPTION(Jthrowable)			\
++  do {							\
++    if (JVMTI_REQUESTED_EVENT (Exception))		\
++      _Jv_ReportJVMTIExceptionThrow (Jthrowable);	\
++  }							\
++  while (0)
++
+ #ifdef DIRECT_THREADED
+ // Lock to ensure that methods are not compiled concurrently.
+ // We could use a finer-grained lock here, however it is not safe to use
+@@ -166,54 +180,81 @@
+ # define LOADD(I)  LOADL(I)
+ #endif
+ 
+-#define STOREA(I) 		\
+-do {					\
+-DEBUG_LOCALS_INSN(I, 'o');		\
+-locals[I].o = (--sp)->o;		\
+-} while(0)
+-#define STOREI(I) 		\
+-do {					\
+-DEBUG_LOCALS_INSN (I, 'i');		\
+-locals[I].i = (--sp)->i;		\
+-} while(0)
+-#define STOREF(I)  		\
+-do {					\
+-DEBUG_LOCALS_INSN (I, 'f');		\
+-locals[I].f = (--sp)->f;		\
+-} while(0)
++#define STOREA(I)			\
++  do					\
++    {					\
++      jint __idx = (I);			\
++      DEBUG_LOCALS_INSN (__idx, 'o');	\
++      locals[__idx].o = (--sp)->o;	\
++    }					\
++  while (0)
++#define STOREI(I)		       	\
++  do					\
++    {					\
++      jint __idx = (I);			\
++      DEBUG_LOCALS_INSN (__idx, 'i');	\
++      locals[__idx].i = (--sp)->i;	\
++  } while (0)
++#define STOREF(I)			\
++  do					\
++    {					\
++      jint __idx = (I);			\
++      DEBUG_LOCALS_INSN (__idx, 'f');	\
++      locals[__idx].f = (--sp)->f;	\
++    }					\
++  while (0)
+ #if SIZEOF_VOID_P == 8
+-# define STOREL(I)  			\
+-do {							\
+-DEBUG_LOCALS_INSN (I, 'l');			\
+-(sp -= 2, locals[I].l = sp->l);		\
+-} while(0)
+-# define STORED(I) 				\
+-do {							\
+-DEBUG_LOCALS_INSN (I, 'd');			\
+-(sp -= 2, locals[I].d = sp->d);		\
+-} while(0)
++# define STOREL(I) \
++  do						\
++    {						\
++      jint __idx = (I);				\
++      DEBUG_LOCALS_INSN (__idx, 'l');		\
++      DEBUG_LOCALS_INSN (__idx + 1, 'x');	\
++      (sp -= 2, locals[__idx].l = sp->l);	\
++    }						\
++  while (0)
++# define STORED(I)				\
++  do						\
++    {						\
++      jint __idx = (I);				\
++      DEBUG_LOCALS_INSN (__idx, 'd');		\
++      DEBUG_LOCALS_INSN (__idx + 1, 'x');	\
++      (sp -= 2, locals[__idx].d = sp->d);	\
++    }						\
++  while (0)
+ 
+ #else
+-# define STOREL(I)		\
+-do { DEBUG_LOCALS_INSN(I, 'l');	\
+-	 jint __idx = (I); 	\
+-     locals[__idx+1].ia[0] = (--sp)->ia[0]; \
+-     locals[__idx].ia[0] = (--sp)->ia[0]; 	\
+-   } while (0)
+-# define STORED(I)		\
+-do { DEBUG_LOCALS_INSN(I, 'd');	\
+-	 jint __idx = (I); 	\
+-     locals[__idx+1].ia[0] = (--sp)->ia[0]; \
+-     locals[__idx].ia[0] = (--sp)->ia[0]; 	\
+-   } while (0)
++# define STOREL(I)				\
++  do						\
++    {						\
++      jint __idx = (I);				\
++      DEBUG_LOCALS_INSN (__idx, 'l');		\
++      DEBUG_LOCALS_INSN (__idx + 1, 'x');	\
++      locals[__idx + 1].ia[0] = (--sp)->ia[0];	\
++      locals[__idx].ia[0] = (--sp)->ia[0];	\
++    }						\
++  while (0)
++# define STORED(I)				\
++  do {						\
++    jint __idx = (I);				\
++    DEBUG_LOCALS_INSN (__idx, 'd');		\
++    DEBUG_LOCALS_INSN (__idx + 1, 'x');		\
++    locals[__idx + 1].ia[0] = (--sp)->ia[0];	\
++    locals[__idx].ia[0] = (--sp)->ia[0];	\
++  } while (0)
+ #endif
+ 
+ #define PEEKI(I)  (locals+(I))->i
+ #define PEEKA(I)  (locals+(I))->o
+ 
+-#define POKEI(I,V)  	\
+-DEBUG_LOCALS_INSN(I,'i'); \
+-((locals+(I))->i = (V))
++#define POKEI(I,V)			\
++  do					\
++    {					\
++      jint __idx = (I);			\
++      DEBUG_LOCALS_INSN (__idx, 'i');	\
++      ((locals + __idx)->i = (V));	\
++    }					\
++  while (0)
+ 
+ 
+ #define BINOPI(OP) { \
+@@ -916,18 +957,14 @@
+ void
+ _Jv_InterpMethod::run_debug (void *retp, ffi_raw *args, _Jv_InterpMethod *meth)
+ {
+-/* Used to keep track of local variable type
+- * 
+- * Possible Types:
+- * o object
+- * i integer
+- * f float
+- * l long 
+- * d double 
+- */
+ #define DEBUG
+ #undef DEBUG_LOCALS_INSN
+-#define DEBUG_LOCALS_INSN(s, t) do {} while(0)
++#define DEBUG_LOCALS_INSN(s, t)  \
++  do    \
++    {   \
++      frame_desc.locals_type[s] = t;  \
++    }   \
++  while (0)
+ 
+ #include "interpret-run.cc"
+ }
+@@ -935,19 +972,25 @@
+ static void
+ throw_internal_error (const char *msg)
+ {
+-  throw new java::lang::InternalError (JvNewStringLatin1 (msg));
++  jthrowable t = new java::lang::InternalError (JvNewStringLatin1 (msg));
++  REPORT_EXCEPTION (t);
++  throw t;
+ }
+ 
+ static void 
+ throw_incompatible_class_change_error (jstring msg)
+ {
+-  throw new java::lang::IncompatibleClassChangeError (msg);
++  jthrowable t = new java::lang::IncompatibleClassChangeError (msg);
++  REPORT_EXCEPTION (t);
++  throw t;
+ }
+ 
+ static void 
+ throw_null_pointer_exception ()
+ {
+-  throw new java::lang::NullPointerException;
++  jthrowable t = new java::lang::NullPointerException;
++  REPORT_EXCEPTION (t);
++  throw t;
+ }
+ 
+ /* Look up source code line number for given bytecode (or direct threaded
+@@ -1290,34 +1333,34 @@
+     {
+       if (staticp)
+         {
+-        if (::gnu::classpath::jdwp::Jdwp::isDebugging)
+-		  fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_class_debug;
+-		else
+-		  fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_class;
++	  if (JVMTI::enabled)
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_class_debug;
++	  else
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_class;
+         }
+       else
+         {
+-	      if (::gnu::classpath::jdwp::Jdwp::isDebugging)
+-		    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_object_debug;
+-		  else
+-		  	fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_object;
+-        } 
++	  if (JVMTI::enabled)
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_object_debug;
++	  else
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_synch_object;
++        }
+     }
+   else
+     {
+       if (staticp)
+         {
+-	      if (::gnu::classpath::jdwp::Jdwp::isDebugging)
+-		    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class_debug;
+-		  else
+-		    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class;
++	  if (JVMTI::enabled)
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class_debug;
++	  else
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class;
+         }
+       else
+         {
+-	      if (::gnu::classpath::jdwp::Jdwp::isDebugging)
+-		    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal_debug;
+-		  else
+-		    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal;
++	  if (JVMTI::enabled)
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal_debug;
++	  else
++	    fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal;
+         }
+     }
+ 
+@@ -1361,6 +1404,51 @@
+   return -1;
+ }
+ 
++// Method to check if an exception is caught at some location in a method
++// (meth).  Returns true if this method (meth) contains a catch block for the
++// exception (ex). False otherwise.  If there is a catch block, it sets the pc
++// to the location of the beginning of the catch block.
++jboolean
++_Jv_InterpMethod::check_handler (pc_t *pc, _Jv_InterpMethod *meth,
++                                java::lang::Throwable *ex)
++{
++#ifdef DIRECT_THREADED
++  void *logical_pc = (void *) ((insn_slot *) (*pc) - 1);
++#else
++  int logical_pc = (*pc) - 1 - meth->bytecode ();
++#endif
++  _Jv_InterpException *exc = meth->exceptions ();
++  jclass exc_class = ex->getClass ();
++
++  for (int i = 0; i < meth->exc_count; i++)
++    {
++      if (PCVAL (exc[i].start_pc) <= logical_pc
++          && logical_pc < PCVAL (exc[i].end_pc))
++        {
++#ifdef DIRECT_THREADED
++              jclass handler = (jclass) exc[i].handler_type.p;
++#else
++              jclass handler = NULL;
++              if (exc[i].handler_type.i != 0)
++                    handler
++                      = (_Jv_Linker::resolve_pool_entry (meth->defining_class,
++                                                                             ex$
++#endif /* DIRECT_THREADED */
++              if (handler == NULL || handler->isAssignableFrom (exc_class))
++                {
++#ifdef DIRECT_THREADED
++                  (*pc) = (insn_slot *) exc[i].handler_pc.p;
++#else
++                  (*pc) = meth->bytecode () + exc[i].handler_pc.i;
++#endif /* DIRECT_THREADED */
++                  return true;
++                }
++          }
++      }
++  return false;
++}
++
++
+ void
+ _Jv_InterpMethod::get_line_table (jlong& start, jlong& end,
+ 				  jintArray& line_numbers,
+@@ -1409,6 +1497,30 @@
+ #endif // !DIRECT_THREADED
+ }
+ 
++int 
++_Jv_InterpMethod::get_local_var_table (char **name, char **sig, 
++                                       char **generic_sig, jlong *startloc,
++                                       jint *length, jint *slot, 
++                                       int table_slot)
++{  	
++  if (local_var_table == NULL)
++    return -2;
++  if (table_slot >= local_var_table_len)
++    return -1;
++  else
++    {
++      *name = local_var_table[table_slot].name;
++      *sig = local_var_table[table_slot].descriptor;
++      *generic_sig = local_var_table[table_slot].descriptor;
++
++      *startloc = static_cast<jlong> 
++                    (local_var_table[table_slot].bytecode_start_pc);
++      *length = static_cast<jint> (local_var_table[table_slot].length);
++      *slot = static_cast<jint> (local_var_table[table_slot].slot);
++    }
++  return local_var_table_len - table_slot -1;
++}
++
+ pc_t
+ _Jv_InterpMethod::install_break (jlong index)
+ {
+@@ -1455,6 +1567,23 @@
+   return &code[index];
+ }
+ 
++bool
++_Jv_InterpMethod::breakpoint_at (jlong index)
++{
++  pc_t insn = get_insn (index);
++  if (insn != NULL)
++    {
++#ifdef DIRECT_THREADED
++      return (insn->insn == breakpoint_insn->insn);
++#else
++      pc_t code = reinterpret_cast<pc_t> (bytecode ());
++      return (code[index] == breakpoint_insn);
++#endif
++    }
++
++  return false;
++}
++
+ void *
+ _Jv_JNIMethod::ncode (jclass klass)
+ {
+@@ -1523,9 +1652,11 @@
+ static void
+ throw_class_format_error (jstring msg)
+ {
+-  throw (msg
++  jthrowable t = (msg
+ 	 ? new java::lang::ClassFormatError (msg)
+ 	 : new java::lang::ClassFormatError);
++  REPORT_EXCEPTION (t);
++  throw t;
+ }
+ 
+ static void
+@@ -1534,6 +1665,70 @@
+   throw_class_format_error (JvNewStringLatin1 (msg));
+ }
+ 
++/* This function finds the method and location where the exception EXC
++   is caught in the stack frame. On return, it sets CATCH_METHOD and
++   CATCH_LOCATION with the method and location where the catch will
++   occur. If the exception is not caught, these are set to 0.
++
++   This function should only be used with the DEBUG interpreter. */
++static void
++find_catch_location (::java::lang::Throwable *exc, jthread thread,
++		     jmethodID *catch_method, jlong *catch_loc)
++{
++  *catch_method = 0;
++  *catch_loc = 0;
++
++  _Jv_InterpFrame *frame
++    = reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);
++  while (frame != NULL)
++    {
++      pc_t pc = frame->get_pc ();
++      _Jv_InterpMethod *imeth
++	= reinterpret_cast<_Jv_InterpMethod *> (frame->self);
++      if (imeth->check_handler (&pc, imeth, exc))
++	{
++	  // This method handles the exception.
++	  *catch_method = imeth->get_method ();
++	  *catch_loc = imeth->insn_index (pc);
++	  return;
++	}
++
++      frame = frame->next_interp;
++    }
++}
++
++/* This method handles JVMTI notifications of thrown exceptions. It
++   calls find_catch_location to figure out where the exception is
++   caught (if it is caught).
++   
++   Like find_catch_location, this should only be called with the
++   DEBUG interpreter. Since a few exceptions occur outside the
++   interpreter proper, it is important to not call this function
++   without checking JVMTI_REQUESTED_EVENT(Exception) first. */
++void
++_Jv_ReportJVMTIExceptionThrow (jthrowable ex)
++{
++  jthread thread = ::java::lang::Thread::currentThread ();
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
++  jmethodID throw_meth = frame->self->get_method ();
++  jlocation throw_loc = -1;
++  if (frame->frame_type == frame_interpreter)
++    {
++      _Jv_InterpFrame * iframe
++	= reinterpret_cast<_Jv_InterpFrame *> (frame);
++      _Jv_InterpMethod *imeth
++	= reinterpret_cast<_Jv_InterpMethod *> (frame->self);
++      throw_loc = imeth->insn_index (iframe->get_pc ());
++    }
++
++  jlong catch_loc;
++  jmethodID catch_method;
++  find_catch_location (ex, thread, &catch_method, &catch_loc);
++  _Jv_JVMTI_PostEvent (JVMTI_EVENT_EXCEPTION, thread,
++		       _Jv_GetCurrentJNIEnv (), throw_meth, throw_loc,
++		       ex, catch_method, catch_loc);
++}
++
+ 
+ 
+ void
+@@ -1690,7 +1885,12 @@
+ _Jv_CompileMethod (_Jv_InterpMethod* method)
+ {
+   if (method->prepared == NULL)
+-    _Jv_InterpMethod::run (NULL, NULL, method);
++    {
++      if (JVMTI::enabled)
++	_Jv_InterpMethod::run_debug (NULL, NULL, method);
++      else
++      _Jv_InterpMethod::run (NULL, NULL, method);
++    }
+ }
+ #endif // DIRECT_THREADED
+ 
+Index: libjava/stacktrace.cc
+===================================================================
+--- libjava/stacktrace.cc	(revision 125219)
++++ libjava/stacktrace.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // stacktrace.cc - Functions for unwinding & inspecting the call stack.
+ 
+-/* Copyright (C) 2005, 2006  Free Software Foundation
++/* Copyright (C) 2005, 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -131,9 +131,11 @@
+   if (func_addr == UNWRAP_FUNCTION_DESCRIPTOR (interp_run))
+     {
+       state->frames[pos].type = frame_interpreter;
+-      state->frames[pos].interp.meth = state->interp_frame->self;
++      _Jv_Frame *frame = static_cast<_Jv_Frame *> (state->interp_frame);
++      state->frames[pos].interp.meth 
++        = static_cast<_Jv_InterpMethod *> (frame->self);
+       state->frames[pos].interp.pc = state->interp_frame->pc;
+-      state->interp_frame = state->interp_frame->next;
++      state->interp_frame = state->interp_frame->next_interp;
+     }
+   else 
+ #endif
+@@ -143,7 +145,7 @@
+       state->frames[pos].type = frame_proxy;
+       state->frames[pos].proxyClass = state->interp_frame->proxyClass;
+       state->frames[pos].proxyMethod = state->interp_frame->proxyMethod;
+-      state->interp_frame = state->interp_frame->next;
++      state->interp_frame = state->interp_frame->next_interp;
+     }
+   else 
+     {
+Index: libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/ObjectReferenceCommandSet.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* ObjectReferenceCommandSet.java -- class to implement the ObjectReference
+    Command Set
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -47,8 +47,10 @@
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+-import gnu.classpath.jdwp.util.Value;
+ import gnu.classpath.jdwp.util.MethodResult;
++import gnu.classpath.jdwp.util.MonitorInfo;
++import gnu.classpath.jdwp.value.Value;
++import gnu.classpath.jdwp.value.ValueFactory;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+@@ -137,7 +139,9 @@
+           {
+             field.setAccessible(true); // Might be a private field
+             Object value = field.get(obj);
+-            Value.writeTaggedValue(os, value);
++            Value val = ValueFactory.createFromObject(value, 
++                                                      field.getType());
++            val.writeTagged(os);
+           }
+         catch (IllegalArgumentException ex)
+           {
+@@ -163,7 +167,7 @@
+     for (int i = 0; i < numFields; i++)
+       {
+         Field field = (Field) idMan.readObjectId(bb).getObject();
+-        Object value = Value.getUntaggedObj(bb, field.getType());
++        Object value = Value.getUntaggedObject(bb, field.getType());
+         try
+           {
+             field.setAccessible(true); // Might be a private field
+@@ -183,13 +187,18 @@
+   }
+ 
+   private void executeMonitorInfo(ByteBuffer bb, DataOutputStream os)
+-    throws JdwpException
++    throws JdwpException, IOException
+   {
+-    // This command is optional, determined by VirtualMachines CapabilitiesNew
+-    // so we'll leave it till later to implement
+-    throw new NotImplementedException(
+-      "Command ExecuteMonitorInfo not implemented.");
++    if (!VMVirtualMachine.canGetMonitorInfo)
++      {
++	String msg = "getting monitor info not supported";
++	throw new NotImplementedException(msg);
++      }
+ 
++    ObjectId oid = idMan.readObjectId(bb);
++    Object obj = oid.getObject();
++    MonitorInfo info = VMVirtualMachine.getMonitorInfo(obj);
++    info.write(os);
+   }
+ 
+   private void executeInvokeMethod(ByteBuffer bb, DataOutputStream os)
+@@ -212,7 +221,7 @@
+ 
+     for (int i = 0; i < args; i++)
+       {
+-        values[i] = Value.getObj(bb);
++        values[i] = Value.getTaggedObject(bb);
+       }
+ 
+     int invokeOptions = bb.getInt();
+@@ -232,11 +241,14 @@
+     MethodResult mr = VMVirtualMachine.executeMethod(obj, thread,
+ 						     clazz, method,
+ 						     values, nonVirtual);
++    mr.setResultType (method.getReturnType());
++    
+     Object value = mr.getReturnedValue();
+     Exception exception = mr.getThrownException();
+ 
+     ObjectId eId = idMan.getObjectId(exception);
+-    Value.writeTaggedValue(os, value);
++    Value val = ValueFactory.createFromObject(value, mr.getResultType());
++    val.writeTagged(os);
+     eId.writeTagged(os);
+   }
+ 
+Index: libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* ThreadReferenceCommandSet.java -- class to implement the ThreadReference
+-   Command Set Copyright (C) 2005 Free Software Foundation
++   Command Set Copyright (C) 2005, 2007 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+@@ -142,7 +142,7 @@
+   {
+     ThreadId tid = (ThreadId) idMan.readObjectId(bb);
+     Thread thread = tid.getThread();
+-    VMVirtualMachine.suspendThread(thread);
++    VMVirtualMachine.resumeThread(thread);
+   }
+ 
+   private void executeStatus(ByteBuffer bb, DataOutputStream os)
+@@ -198,22 +198,42 @@
+   }
+ 
+   private void executeOwnedMonitors(ByteBuffer bb, DataOutputStream os)
+-      throws JdwpException
++    throws JdwpException, IOException
+   {
+-    // This command is optional, determined by VirtualMachines CapabilitiesNew
+-    // so we'll leave it till later to implement
+-    throw new NotImplementedException(
+-      "Command OwnedMonitors not implemented.");
++    if (!VMVirtualMachine.canGetOwnedMonitorInfo)
++      {
++	String msg = "getting owned monitors is not supported";
++	throw new NotImplementedException(msg);
++      }
++
++    ThreadId tid = (ThreadId) idMan.readObjectId(bb);
++    Thread thread = tid.getThread();
++    Object[] monitors = VMVirtualMachine.getOwnedMonitors(thread);
++
++    os.write(monitors.length);
++    for (int i = 0; i < monitors.length; ++i)
++      {
++	ObjectId id = idMan.getObjectId(monitors[i]);
++	id.writeTagged(os);
++      }
+   }
+ 
+   private void executeCurrentContendedMonitor(ByteBuffer bb,
+                                               DataOutputStream os)
+-      throws JdwpException
++    throws JdwpException, IOException
+   {
+-    // This command is optional, determined by VirtualMachines CapabilitiesNew
+-    // so we'll leave it till later to implement
+-    throw new NotImplementedException(
+-      "Command CurrentContentedMonitors not implemented.");
++    if (!VMVirtualMachine.canGetCurrentContendedMonitor)
++      {
++	String msg = "getting current contended monitor is not supported";
++	throw new NotImplementedException(msg);
++      }
++
++    ThreadId tid = (ThreadId) idMan.readObjectId(bb);
++    Thread thread = tid.getThread();
++
++    Object monitor = VMVirtualMachine.getCurrentContendedMonitor(thread);
++    ObjectId id = idMan.getObjectId(monitor);
++    id.writeTagged(os);
+   }
+ 
+   private void executeStop(ByteBuffer bb, DataOutputStream os)
+Index: libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/EventRequestCommandSet.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* EventRequestCommandSet.java -- class to implement the EventRequest Command
+    Set
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+@@ -40,6 +40,7 @@
+ package gnu.classpath.jdwp.processor;
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
++import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.event.EventManager;
+ import gnu.classpath.jdwp.event.EventRequest;
+ import gnu.classpath.jdwp.event.filters.ClassExcludeFilter;
+@@ -113,6 +114,28 @@
+     byte suspendPolicy = bb.get();
+     int modifiers = bb.getInt();
+ 
++    switch (eventKind)
++      {
++	case JdwpConstants.EventKind.FIELD_ACCESS:
++	if (!VMVirtualMachine.canWatchFieldAccess)
++	  {
++	    String msg = "watching field accesses is not supported";
++	    throw new NotImplementedException(msg);
++	  }
++	break;
++
++	case JdwpConstants.EventKind.FIELD_MODIFICATION:
++	if (!VMVirtualMachine.canWatchFieldModification)
++	  {
++	    String msg = "watching field modifications is not supported";
++	    throw new NotImplementedException(msg);
++	  }
++	break;
++
++      default:
++	// okay
++      }
++
+     EventRequest eventReq = new EventRequest(eventKind, suspendPolicy);
+     IEventFilter filter = null;
+     ReferenceTypeId refId;
+Index: libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/ArrayReferenceCommandSet.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* ArrayReferenceCommandSet.java -- class to implement the Array
+    Reference Command Set
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -46,7 +46,8 @@
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+ import gnu.classpath.jdwp.id.ObjectId;
+-import gnu.classpath.jdwp.util.Value;
++import gnu.classpath.jdwp.value.Value;
++import gnu.classpath.jdwp.value.ValueFactory;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+@@ -150,11 +151,11 @@
+     // tagged
+     for (int i = first; i < first + length; i++)
+       {
+-        Object value = Array.get(array, i);
++        Value val = ValueFactory.createFromObject(Array.get(array, i), clazz);
+         if (clazz.isPrimitive())
+-          Value.writeUntaggedValue(os, value);
++          val.writeUntagged(os);
+         else
+-          Value.writeTaggedValue(os, value);
++          val.writeTagged(os);
+       }
+   }
+ 
+@@ -168,7 +169,7 @@
+     Class type = array.getClass().getComponentType();
+     for (int i = first; i < first + length; i++)
+       {
+-        Object value = Value.getUntaggedObj(bb, type);
++        Object value = Value.getUntaggedObject(bb, type);
+         Array.set(array, i, value);
+       }
+   }
+Index: libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* ReferenceTypeCommandSet.java -- class to implement the ReferenceType
+    Command Set
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -51,7 +51,8 @@
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.JdwpString;
+ import gnu.classpath.jdwp.util.Signature;
+-import gnu.classpath.jdwp.util.Value;
++import gnu.classpath.jdwp.value.Value;
++import gnu.classpath.jdwp.value.ValueFactory;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+@@ -182,8 +183,7 @@
+   private void executeMethods(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+-    ClassReferenceTypeId refId
+-      = (ClassReferenceTypeId) idMan.readReferenceTypeId(bb);
++    ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     VMMethod[] methods = VMVirtualMachine.getAllClassMethods(clazz);
+@@ -220,7 +220,9 @@
+               {
+                 field.setAccessible(true); // Might be a private field
+                 Object value = field.get(null);
+-                Value.writeTaggedValue(os, value);
++                Value val = ValueFactory.createFromObject(value, 
++                                                          field.getType());
++                val.writeTagged(os);
+               }
+             catch (IllegalArgumentException ex)
+               {
+@@ -303,10 +305,15 @@
+   private void executeSourceDebugExtension(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+-    // This command is optional, determined by VirtualMachines CapabilitiesNew
+-    // so we'll leave it till later to implement
+-    throw new NotImplementedException(
+-      "Command SourceDebugExtension not implemented.");
++    if (!VMVirtualMachine.canGetSourceDebugExtension)
++      {
++	String msg = "source debug extension is not supported";
++	throw new NotImplementedException(msg);
++      }
++
++    ReferenceTypeId id = idMan.readReferenceTypeId(bb);
++    String ext = VMVirtualMachine.getSourceDebugExtension (id.getType());
++    JdwpString.writeString(os, ext);
+   }
+ 
+   private void executeSignatureWithGeneric(ByteBuffer bb, DataOutputStream os)
+@@ -314,7 +321,7 @@
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+-      "Command SourceDebugExtension not implemented.");
++      "Command SignatureWithGeneric not implemented.");
+   }
+ 
+   private void executeFieldWithGeneric(ByteBuffer bb, DataOutputStream os)
+@@ -322,7 +329,7 @@
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+-      "Command SourceDebugExtension not implemented.");
++      "Command executeFieldWithGeneric not implemented.");
+   }
+ 
+   private void executeMethodsWithGeneric(ByteBuffer bb, DataOutputStream os)
+@@ -330,6 +337,6 @@
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+-      "Command SourceDebugExtension not implemented.");
++      "Command executeMethodsWithGeneric not implemented.");
+   }
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/ClassTypeCommandSet.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* ClassTypeCommandSet.java -- class to implement the ClassType
+    Command Set
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -49,7 +49,8 @@
+ import gnu.classpath.jdwp.id.ObjectId;
+ import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.MethodResult;
+-import gnu.classpath.jdwp.util.Value;
++import gnu.classpath.jdwp.value.Value;
++import gnu.classpath.jdwp.value.ValueFactory;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+@@ -128,7 +129,7 @@
+       {
+         ObjectId fieldId = idMan.readObjectId(bb);
+         Field field = (Field) (fieldId.getObject());
+-        Object value = Value.getUntaggedObj(bb, field.getType());
++        Object value = Value.getUntaggedObject(bb, field.getType());
+         try
+           {
+             field.setAccessible(true); // Might be a private field
+@@ -154,7 +155,8 @@
+     Exception exception = mr.getThrownException();
+     ObjectId eId = idMan.getObjectId(exception);
+ 
+-    Value.writeTaggedValue(os, value);
++    Value val = ValueFactory.createFromObject(value, mr.getResultType());
++    val.writeTagged(os);
+     eId.writeTagged(os);
+   }
+ 
+@@ -192,7 +194,7 @@
+ 
+     for (int i = 0; i < args; i++)
+       {
+-        values[i] = Value.getObj(bb);
++        values[i] = Value.getTaggedObject(bb);
+       }
+ 
+     int invokeOpts = bb.getInt();
+@@ -207,6 +209,8 @@
+         MethodResult mr = VMVirtualMachine.executeMethod(null, thread,
+ 							 clazz, method,
+ 							 values, false);
++        mr.setResultType(method.getReturnType());
++        
+         if (suspend)
+ 	  VMVirtualMachine.resumeAllThreads ();
+ 
+Index: libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* VirtualMachineCommandSet.java -- class to implement the VirtualMachine
+    Command Set
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+@@ -54,6 +54,7 @@
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
++import java.util.Collection;
+ import java.util.Iterator;
+ import java.util.Properties;
+ 
+@@ -179,7 +180,8 @@
+     ArrayList allMatchingClasses = new ArrayList();
+ 
+     // This will be an Iterator over all loaded Classes
+-    Iterator iter = VMVirtualMachine.getAllLoadedClasses();
++    Collection classes = VMVirtualMachine.getAllLoadedClasses();
++    Iterator iter = classes.iterator ();
+ 
+     while (iter.hasNext())
+       {
+@@ -203,22 +205,11 @@
+   private void executeAllClasses(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+-    // Disable garbage collection while we're collecting the info on loaded
+-    // classes so we some classes don't get collected between the time we get
+-    // the count and the time we get the list
+-    //VMVirtualMachine.disableGarbageCollection();
++    Collection classes = VMVirtualMachine.getAllLoadedClasses();
++    os.writeInt(classes.size ());
+ 
+-    int classCount = VMVirtualMachine.getAllLoadedClassesCount();
+-    os.writeInt(classCount);
+-
+-    // This will be an Iterator over all loaded Classes
+-    Iterator iter = VMVirtualMachine.getAllLoadedClasses();
+-    //VMVirtualMachine.enableGarbageCollection();
+-    int count = 0;
+-
+-    // Note it's possible classes were created since out classCount so make
+-    // sure we don't write more classes than we told the debugger
+-    while (iter.hasNext() && count++ < classCount)
++    Iterator iter = classes.iterator ();
++    while (iter.hasNext())
+       {
+         Class clazz = (Class) iter.next();
+         ReferenceTypeId id = idMan.getReferenceTypeId(clazz);
+@@ -340,14 +331,13 @@
+   private void executeCapabilities(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+-    // Store these somewhere?
+-    os.writeBoolean(false); // canWatchFieldModification
+-    os.writeBoolean(false); // canWatchFieldAccess
+-    os.writeBoolean(false); // canGetBytecodes
+-    os.writeBoolean(false); // canGetSyntheticAttribute
+-    os.writeBoolean(false); // canGetOwnedMonitorInfo
+-    os.writeBoolean(false); // canGetCurrentContendedMonitor
+-    os.writeBoolean(false); // canGetMonitorInfo
++    os.writeBoolean(VMVirtualMachine.canWatchFieldModification);
++    os.writeBoolean(VMVirtualMachine.canWatchFieldAccess);
++    os.writeBoolean(VMVirtualMachine.canGetBytecodes);
++    os.writeBoolean(VMVirtualMachine.canGetSyntheticAttribute);
++    os.writeBoolean(VMVirtualMachine.canGetOwnedMonitorInfo);
++    os.writeBoolean(VMVirtualMachine.canGetCurrentContendedMonitor);
++    os.writeBoolean(VMVirtualMachine.canGetMonitorInfo);
+   }
+ 
+   private void executeClassPaths(ByteBuffer bb, DataOutputStream os)
+@@ -401,43 +391,60 @@
+   private void executeCapabilitiesNew(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException, IOException
+   {
+-    // Store these somewhere?
+     final int CAPABILITIES_NEW_SIZE = 32;
+-    os.writeBoolean(false); // canWatchFieldModification
+-    os.writeBoolean(false); // canWatchFieldAccess
+-    os.writeBoolean(false); // canGetBytecodes
+-    os.writeBoolean(false); // canGetSyntheticAttribute
+-    os.writeBoolean(false); // canGetOwnedMonitorInfo
+-    os.writeBoolean(false); // canGetCurrentContendedMonitor
+-    os.writeBoolean(false); // canGetMonitorInfo
+-    os.writeBoolean(false); // canRedefineClasses
+-    os.writeBoolean(false); // canAddMethod
+-    os.writeBoolean(false); // canUnrestrictedlyRedefineClasses
+-    os.writeBoolean(false); // canPopFrames
+-    os.writeBoolean(false); // canUseInstanceFilters
+-    os.writeBoolean(false); // canGetSourceDebugExtension
+-    os.writeBoolean(false); // canRequestVMDeathEvent
+-    os.writeBoolean(false); // canSetDefaultStratum
++
++    executeCapabilities(bb, os);
++    os.writeBoolean(VMVirtualMachine.canRedefineClasses);
++    os.writeBoolean(VMVirtualMachine.canAddMethod);
++    os.writeBoolean(VMVirtualMachine.canUnrestrictedlyRedefineClasses);
++    os.writeBoolean(VMVirtualMachine.canPopFrames);
++    os.writeBoolean(VMVirtualMachine.canUseInstanceFilters);
++    os.writeBoolean(VMVirtualMachine.canGetSourceDebugExtension);
++    os.writeBoolean(VMVirtualMachine.canRequestVMDeathEvent);
++    os.writeBoolean(VMVirtualMachine.canSetDefaultStratum);
+     for (int i = 15; i < CAPABILITIES_NEW_SIZE; i++)
+-      // Future capabilities
+-      // currently unused
+-      os.writeBoolean(false); // Set to false
++      {
++	// Future capabilities (currently unused)
++	os.writeBoolean(false);
++      }
+   }
+ 
+   private void executeRedefineClasses(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+-    // Optional command, don't implement
+-    throw new NotImplementedException(
+-      "Command VirtualMachine.RedefineClasses not implemented");
++    if (!VMVirtualMachine.canRedefineClasses)
++      {
++	String msg = "redefinition of classes is not supported";
++	throw new NotImplementedException(msg);
++      }
++
++    int classes = bb.getInt();
++    Class[] types = new Class[classes];
++    byte[][] bytecodes = new byte[classes][];
++    for (int i = 0; i < classes; ++i)
++      {
++	ReferenceTypeId id = idMan.readReferenceTypeId(bb);
++	int classfile = bb.getInt();
++	byte[] bytecode = new byte[classfile];
++	bb.get(bytecode);
++	types[i] = id.getType();
++	bytecodes[i] = bytecode;
++      }
++
++    VMVirtualMachine.redefineClasses (types, bytecodes);
+   }
+ 
+   private void executeSetDefaultStratum(ByteBuffer bb, DataOutputStream os)
+     throws JdwpException
+   {
+-    // Optional command, don't implement
+-    throw new NotImplementedException(
+-      "Command VirtualMachine.SetDefaultStratum not implemented");
++    if (!VMVirtualMachine.canSetDefaultStratum)
++      {
++	String msg = "setting the default stratum is not supported";
++	throw new NotImplementedException(msg);
++      }
++
++    String stratum = JdwpString.readString(bb);
++    VMVirtualMachine.setDefaultStratum(stratum);
+   }
+ 
+   private void executeAllClassesWithGeneric(ByteBuffer bb, DataOutputStream os)
+Index: libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/StackFrameCommandSet.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* StackFrameCommandSet.java -- class to implement the StackFrame Command Set
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+  
+ This file is part of GNU Classpath.
+ 
+@@ -45,8 +45,10 @@
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+-import gnu.classpath.jdwp.id.ObjectId;
+-import gnu.classpath.jdwp.util.Value;
++import gnu.classpath.jdwp.id.ThreadId;
++import gnu.classpath.jdwp.value.ObjectValue;
++import gnu.classpath.jdwp.value.Value;
++import gnu.classpath.jdwp.value.ValueFactory;
+ 
+ import java.io.DataOutputStream;
+ import java.io.IOException;
+@@ -98,8 +100,8 @@
+   private void executeGetValues(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+-    ObjectId tId = idMan.readObjectId(bb);
+-    Thread thread = (Thread) tId.getObject();
++    ThreadId tId = (ThreadId) idMan.readObjectId(bb);
++    Thread thread = tId.getThread();
+ 
+     // Although Frames look like other ids they are not. First they are not
+     // ObjectIds since they don't exist in the users code. Storing them as an
+@@ -107,31 +109,33 @@
+     // has a reference to them. Furthermore they are not ReferenceTypeIds since
+     // these are held permanently and we want these to be held only as long as
+     // the Thread is suspended.
+-    VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
++    long frameID = bb.getLong();
++    VMFrame frame = VMVirtualMachine.getFrame(thread, frameID);
+     int slots = bb.getInt();
+     os.writeInt(slots); // Looks pointless but this is the protocol
+     for (int i = 0; i < slots; i++)
+       {
+         int slot = bb.getInt();
+         byte sig = bb.get();
+-        Object val = frame.getValue(slot);
+-        Value.writeTaggedValue(os, val);
++        Value val = frame.getValue(slot, sig);
++        val.writeTagged(os);
+       }
+   }
+ 
+   private void executeSetValues(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+-    ObjectId tId = idMan.readObjectId(bb);
+-    Thread thread = (Thread) tId.getObject();
++    ThreadId tId = (ThreadId) idMan.readObjectId(bb);
++    Thread thread = tId.getThread();
+ 
+-    VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
++    long frameID = bb.getLong();
++    VMFrame frame = VMVirtualMachine.getFrame(thread, frameID);
+ 
+     int slots = bb.getInt();
+     for (int i = 0; i < slots; i++)
+       {
+         int slot = bb.getInt();
+-        Object value = Value.getObj(bb);
++        Value value = ValueFactory.createFromTagged(bb);
+         frame.setValue(slot, value);
+       }
+   }
+@@ -139,20 +143,28 @@
+   private void executeThisObject(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+-    ObjectId tId = idMan.readObjectId(bb);
+-    Thread thread = (Thread) tId.getObject();
++    ThreadId tId = (ThreadId) idMan.readObjectId(bb);
++    Thread thread = tId.getThread();
+ 
+-    VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
++    long frameID = bb.getLong();
++    VMFrame frame = VMVirtualMachine.getFrame(thread, frameID);
+ 
+-    Object thisObject = frame.getObject();
+-    Value.writeTaggedValue(os, thisObject);
++    ObjectValue objVal = new ObjectValue(frame.getObject());
++    objVal.writeTagged(os);
+   }
+ 
+   private void executePopFrames(ByteBuffer bb, DataOutputStream os)
+-      throws JdwpException
++    throws JdwpException, IOException
+   {
+-    // This command is optional, determined by VirtualMachines CapabilitiesNew
+-    // so we'll leave it till later to implement
+-    throw new NotImplementedException("Command PopFrames not implemented.");
++    if (!VMVirtualMachine.canPopFrames)
++      {
++	String msg = "popping frames is unsupported";
++	throw new NotImplementedException(msg);
++      }
++
++    ThreadId tid = (ThreadId) idMan.readObjectId(bb);
++    Thread thread = tid.getThread();
++    long fid = bb.getLong();
++    VMVirtualMachine.popFrames(thread, fid);
+   }
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* MethodCommandSet.java -- class to implement the Method Command Set
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -40,10 +40,11 @@
+ 
+ import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.VMMethod;
++import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+ import gnu.classpath.jdwp.exception.NotImplementedException;
+-import gnu.classpath.jdwp.id.ClassReferenceTypeId;
++import gnu.classpath.jdwp.id.ReferenceTypeId;
+ import gnu.classpath.jdwp.util.LineTable;
+ import gnu.classpath.jdwp.util.VariableTable;
+ 
+@@ -99,8 +100,7 @@
+   private void executeLineTable(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+-    ClassReferenceTypeId refId
+-      = (ClassReferenceTypeId) idMan.readReferenceTypeId(bb);
++    ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     VMMethod method = VMMethod.readId(clazz, bb);
+@@ -111,8 +111,7 @@
+   private void executeVariableTable(ByteBuffer bb, DataOutputStream os)
+       throws JdwpException, IOException
+   {
+-   ClassReferenceTypeId refId
+-     = (ClassReferenceTypeId) idMan.readReferenceTypeId(bb);
++    ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+     Class clazz = refId.getType();
+ 
+     VMMethod method = VMMethod.readId(clazz, bb);
+@@ -121,11 +120,20 @@
+   }
+ 
+   private void executeByteCodes(ByteBuffer bb, DataOutputStream os)
+-      throws JdwpException
++    throws JdwpException, IOException
+   {
+-    // This command is optional, determined by VirtualMachines CapabilitiesNew
+-    // so we'll leave it till later to implement
+-    throw new NotImplementedException("Command ByteCodes not implemented.");
++    if (!VMVirtualMachine.canGetBytecodes)
++      {
++	String msg = "getting bytecodes is unsupported";
++	throw new NotImplementedException(msg);
++      }
++
++    ReferenceTypeId id = idMan.readReferenceTypeId(bb);
++    Class klass = id.getType();
++    VMMethod method = VMMethod.readId(klass, bb);
++    byte[] bytecode = VMVirtualMachine.getBytecodes(method);
++    os.writeInt(bytecode.length);
++    os.write(bytecode);
+   }
+ 
+   private void executeIsObsolete(ByteBuffer bb, DataOutputStream os)
+@@ -143,7 +151,7 @@
+   {
+     // We don't have generics yet
+     throw new NotImplementedException(
+-      "Command SourceDebugExtension not implemented.");
++      "Command VariableTableWithGeneric not implemented.");
+   }
+ 
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/event/Event.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/event/Event.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/event/Event.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* Event.java -- a base class for all event types
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -135,25 +135,30 @@
+   public abstract Object getParameter (int type);
+ 
+   /**
+-   * Converts this event into to a JDWP packet
++   * Converts the events into to a single JDWP Event.COMPOSITE packet
+    *
+    * @param dos     the stream to which to write data
+-   * @param request the request the wanted this notification
++   * @param events  the events to package into the packet
++   * @param requests the corresponding event requests
++   * @param suspendPolicy the suspend policy enforced by the VM
+    * @returns a <code>JdwpPacket</code> of the events
+    */
+-  public JdwpPacket toPacket (DataOutputStream dos, EventRequest request)
++  public static JdwpPacket toPacket (DataOutputStream dos,
++				     Event[] events,
++				     EventRequest[] requests,
++				     byte suspendPolicy)
+   {
+     JdwpPacket pkt;
+     try
+       {
+-	dos.writeByte (request.getSuspendPolicy ());
+-	dos.writeInt (1);
+-	dos.writeByte (_eventKind);
+-	dos.writeInt (request.getId ());
+-	_writeData (dos);
++	dos.writeByte (suspendPolicy);
++	dos.writeInt (events.length);
++	for (int i = 0; i < events.length; ++i)
++	  _toData (dos, events[i], requests[i]);
+ 
+-	pkt = new JdwpCommandPacket (JdwpConstants.CommandSet.Event.CS_VALUE,
+-				     JdwpConstants.CommandSet.Event.COMPOSITE);
++	pkt
++	  = new JdwpCommandPacket (JdwpConstants.CommandSet.Event.CS_VALUE,
++				   JdwpConstants.CommandSet.Event.COMPOSITE);
+       }
+     catch (IOException ioe)
+       {
+@@ -162,4 +167,14 @@
+ 
+     return pkt;
+   }
++
++  // Helper function for toPacket
++  private static void _toData (DataOutputStream dos, Event event,
++			       EventRequest request)
++    throws IOException
++  {
++    dos.writeByte (event._eventKind);
++    dos.writeInt (request.getId ());
++    event._writeData (dos);
++  }
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ /* ThreadStartEvent.java -- An event specifying that a new thread
+    has started in the virtual machine
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -75,7 +75,7 @@
+    * @param thread  the thread ID in which event occurred
+    */
+   public ThreadStartEvent (Thread thread) {
+-    super (JdwpConstants.EventKind.THREAD_END);
++    super (JdwpConstants.EventKind.THREAD_START);
+     _thread = thread;
+   }
+ 
+Index: libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* LocationOnlyFilter.java -- filter on location
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -49,13 +49,6 @@
+  * May be used with breakpoint, field access, field modification, step,
+  * and exception event kinds.
+  *
+- * This "filter" is not really a filter. It is simply a way to communicate
+- * location information for supported events in a generic way to ease 
+- * the burden of special casing several things in
+- * EventReqeustCommandSet.executeSet.
+- * 
+- * Consequently, this "filter" always matches any event.
+- * 
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class LocationOnlyFilter
+@@ -90,9 +83,12 @@
+    *
+    * @param event  the <code>Event</code> to scrutinize
+    */
+-  public boolean matches (Event event)
++  public boolean matches(Event event)
+   {
+-    // This filter always matches. See comments in class javadoc.
+-    return true;
++    Location loc = (Location) event.getParameter(Event.EVENT_LOCATION);
++    if (loc != null)
++      return (getLocation().equals(loc));
++
++    return false;
+   }
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* StepFilter.java -- a step filter
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -39,6 +39,7 @@
+ 
+ package gnu.classpath.jdwp.event.filters;
+ 
++import gnu.classpath.jdwp.JdwpConstants;
+ import gnu.classpath.jdwp.event.Event;
+ import gnu.classpath.jdwp.exception.InvalidThreadException;
+ import gnu.classpath.jdwp.id.ThreadId;
+@@ -48,6 +49,12 @@
+  * satisfy depth and size constraints. This modifier can only be used with
+  * step event kinds."
+  *
++ * This "filter" is not really a filter. It is simply a way to communicate
++ * stepping information in a convenient way between the JDWP backend and
++ * the virtual machine.
++ * 
++ * Consequently, this "filter" always matches.
++ * 
+  * @author Keith Seitz  (keiths@redhat.com)
+  */
+ public class StepFilter
+@@ -115,7 +122,6 @@
+    */
+   public boolean matches (Event event)
+   {
+-    // FIXME
+-    throw new RuntimeException ("StepFilter.matches not implemented");
++    return true;
+   }
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/event/EventManager.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/event/EventManager.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/event/EventManager.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* EventManager.java -- event management and notification infrastructure
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -39,10 +39,12 @@
+ 
+ package gnu.classpath.jdwp.event;
+ 
++import gnu.classpath.jdwp.Jdwp;
+ import gnu.classpath.jdwp.VMVirtualMachine;
+ import gnu.classpath.jdwp.exception.InvalidEventTypeException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ 
++import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+@@ -130,9 +132,10 @@
+     // only two: VM_INIT, VM_DEATH
+     try
+       {
++	byte sp = (Jdwp.suspendOnStartup()
++		   ? EventRequest.SUSPEND_THREAD : EventRequest.SUSPEND_NONE);
+ 	requestEvent (new EventRequest (0,
+-					EventRequest.EVENT_VM_INIT,
+-					EventRequest.SUSPEND_NONE));
++					EventRequest.EVENT_VM_INIT, sp));
+ 	requestEvent (new EventRequest (0,
+ 					EventRequest.EVENT_VM_DEATH,
+ 					EventRequest.SUSPEND_NONE));
+@@ -144,39 +147,39 @@
+   }
+ 
+   /**
+-   * Returns a request for the given event. This method will only
++   * Returns all requests for the given event. This method will only
+    * be used if the <code>EventManager</code> is handling event filtering.
+    *
+    * @param  event  the event
+-   * @return request that was interested in this event
++   * @return requests that are interested in this event
+    *         or <code>null</code> if none (and event should not be sent)
+    * @throws IllegalArgumentException for invalid event kind
+    */
+-  public EventRequest getEventRequest (Event event)
++  public EventRequest[] getEventRequests(Event event)
+   {
+-    EventRequest interestedRequest = null;
++    ArrayList interestedEvents = new ArrayList();
+     Hashtable requests;
+-    Byte kind = new Byte (event.getEventKind ());
+-    requests = (Hashtable) _requests.get (kind);
++    Byte kind = new Byte(event.getEventKind());
++    requests = (Hashtable) _requests.get(kind);
+     if (requests == null)
+       {
+ 	// Did not get a valid event type
+-	throw new IllegalArgumentException ("invalid event kind: " + kind);
++	throw new IllegalArgumentException("invalid event kind: " + kind);
+       }
+-    boolean match = false;
+ 
+     // Loop through the requests. Must look at ALL requests in order
+     // to evaluate all filters (think count filter).
+-    // TODO: What if multiple matches? Spec isn't so clear on this.
+-    Iterator rIter = requests.values().iterator ();
+-    while (rIter.hasNext ())
++    Iterator rIter = requests.values().iterator();
++    while (rIter.hasNext())
+       {
+-	EventRequest request = (EventRequest) rIter.next ();
+-	if (request.matches (event))
+-	  interestedRequest = request;
++	EventRequest request = (EventRequest) rIter.next();
++	if (request.matches(event))
++	  interestedEvents.add(request);
+       }
+ 
+-    return interestedRequest;
++    EventRequest[] r = new EventRequest[interestedEvents.size()];
++    interestedEvents.toArray(r);
++    return r;
+   }
+ 
+   /**
+Index: libjava/classpath/gnu/classpath/jdwp/Jdwp.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/Jdwp.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/Jdwp.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* Jdwp.java -- Virtual machine to JDWP back-end programming interface
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -51,6 +51,7 @@
+ 
+ import java.io.IOException;
+ import java.security.AccessController;
++import java.util.ArrayList;
+ import java.util.HashMap;
+ 
+ /**
+@@ -207,23 +208,21 @@
+    * The event is filtered through the event manager before being
+    * sent.
+    *
+-   * FIXME: Probably need logic to send multiple events
+    * @param event the event to report
+    */
+-  public static void notify (Event event)
++  public static void notify(Event event)
+   {
+-    Jdwp jdwp = getDefault ();
++    Jdwp jdwp = getDefault();
+     if (jdwp != null)
+       {
+-	EventManager em = EventManager.getDefault ();
+-	EventRequest request = em.getEventRequest (event);
+-	if (request != null)
++	EventManager em = EventManager.getDefault();
++	EventRequest[] requests = em.getEventRequests(event);
++	for (int i = 0; i < requests.length; ++i)
+ 	  {
+ 	    try
+ 	      {
+-		System.out.println ("Jdwp.notify: sending event " + event);
+-		sendEvent (request, event);
+-		jdwp._enforceSuspendPolicy (request.getSuspendPolicy ());
++		sendEvent(requests[i], event);
++		jdwp._enforceSuspendPolicy(requests[i].getSuspendPolicy());
+ 	      }
+ 	    catch (Exception e)
+ 	      {
+@@ -236,6 +235,62 @@
+   }
+   
+   /**
++   * Notify the debugger of "co-located" events. This method should
++   * not be called if debugging is not active (but it would not
++   * cause any harm). Places where event notifications occur
++   * should check isDebugging before doing anything.
++   *
++   * The events are filtered through the event manager before being
++   * sent.
++   *
++   * @param events the events to report
++   */
++  public static void notify(Event[] events)
++  {
++    Jdwp jdwp = getDefault();
++    
++    if (jdwp != null)
++      {
++	byte suspendPolicy = JdwpConstants.SuspendPolicy.NONE;
++	EventManager em = EventManager.getDefault();
++	ArrayList allEvents = new ArrayList ();
++	ArrayList allRequests = new ArrayList ();
++	for (int i = 0; i < events.length; ++i)
++	  {
++	    EventRequest[] r = em.getEventRequests(events[i]);
++	    for (int j = 0; j < r.length; ++j)
++	      {
++		/* This is hacky, but it's not clear whether this
++		   can really happen, and if it does, what should
++		   occur. */
++		allEvents.add (events[i]);
++		allRequests.add (r[j]);
++
++		// Perhaps this is overkill?
++		if (r[j].getSuspendPolicy() > suspendPolicy)
++		  suspendPolicy = r[j].getSuspendPolicy();
++	      }
++	  }
++
++	try
++	  {
++	    Event[] e = new Event[allEvents.size()];
++	    allEvents.toArray(e);
++	    EventRequest[] r = new EventRequest[allRequests.size()];
++	    allRequests.toArray(r);
++	    sendEvents(r, e, suspendPolicy);
++	    jdwp._enforceSuspendPolicy(suspendPolicy);
++	  }
++	catch (Exception e)
++	  {
++	    /* Really not much we can do. For now, just print out
++	       a warning to the user. */
++	    System.out.println ("Jdwp.notify: caught exception: " + e);
++	  }
++      }
++  }
++
++  /**
+    * Sends the event to the debugger.
+    *
+    * This method bypasses the event manager's filtering.
+@@ -247,13 +302,30 @@
+   public static void sendEvent (EventRequest request, Event event)
+       throws IOException
+   {
+-    Jdwp jdwp = getDefault ();
++    sendEvents (new EventRequest[] { request }, new Event[] { event },
++		request.getSuspendPolicy());
++  }
++
++  /**
++   * Sends the events to the debugger.
++   *
++   * This method bypasses the event manager's filtering.
++   *
++   * @param  requests  list of debugger requests for the events
++   * @param  events    the events to send
++   * @param  suspendPolicy the suspendPolicy enforced by the VM
++   * @throws IOException if a communications failure occurs
++   */
++  public static void sendEvents (EventRequest[] requests, Event[] events,
++				 byte suspendPolicy)
++    throws IOException
++  {
++    Jdwp jdwp = getDefault();
+     if (jdwp != null)
+       {
+-	// !! May need to implement send queue?
+ 	synchronized (jdwp._connection)
+ 	  {
+-	    jdwp._connection.sendEvent (request, event);
++	    jdwp._connection.sendEvents (requests, events, suspendPolicy);
+ 	  }
+       }
+   }
+Index: libjava/classpath/gnu/classpath/jdwp/id/NullObjectId.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/id/NullObjectId.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/id/NullObjectId.java	(revision 126334)
+@@ -0,0 +1,79 @@
++/* NullObjectId.java -- special objectId for null values
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.id;
++
++import gnu.classpath.jdwp.exception.InvalidObjectException;
++import gnu.classpath.jdwp.util.NullObject;
++
++import java.lang.ref.SoftReference;
++
++/**
++ * This is a special case of an ObjectId.  When a varaible slot contains
++ * null as its value, this is a valid value despite the fact that it does
++ * not reference an object.  To represent this, this will always be the id
++ * of the NullObject (0).
++ *
++ * @author Kyle Galloway  <kgallowa@redhat.com>
++ */
++public class NullObjectId
++  extends ObjectId
++{
++  /**
++   * The object class that this id represents
++   */
++  public static final Class typeClass = NullObject.class;
++  
++  /**
++   * Constructs a new <code>NullObjectId</code>
++   */
++  public NullObjectId()
++  {
++    super();
++    setId((long) 0);
++    _reference = new SoftReference<NullObject>(new NullObject());
++    try
++      {
++        disableCollection();
++      }
++    catch(InvalidObjectException ex)
++      {
++        //This will not happen
++      }
++  }
++
++}
+Index: libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* JdwpConnection.java -- A JDWP-speaking connection
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -267,13 +267,17 @@
+   }
+ 
+   /**
+-   * Send an event notification to the debugger
++   * Send an event notification to the debugger. Note that this
++   * method will only send out one notification: all the events
++   * are passed in a single Event.COMPOSITE packet.
+    *
+-   * @param request  the debugger request that wanted this event
+-   * @param event    the event
++   * @param requests  debugger requests for events
++   * @param events    the events to send
++   * @param suspendPolicy  the suspend policy enforced by the VM
+    * @throws IOException
+    */
+-  public void sendEvent (EventRequest request, Event event)
++  public void sendEvents(EventRequest[] requests, Event[] events,
++			 byte suspendPolicy)
+     throws IOException
+   {
+     JdwpPacket pkt;
+@@ -281,7 +285,7 @@
+     synchronized (_bytes)
+       {
+ 	_bytes.reset ();
+-	pkt = event.toPacket (_doStream, request);
++	pkt = Event.toPacket (_doStream, events, requests, suspendPolicy);
+ 	pkt.setData (_bytes.toByteArray ());
+       }
+ 
+Index: libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/transport/SocketTransport.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* SocketTransport.java -- a socket transport
+-   Copyright (C) 2005 Free Software Foundation
++   Copyright (C) 2005, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -89,27 +89,36 @@
+    * @param  properties  the properties of the JDWP session
+    * @throws TransportException for any configury errors
+    */
+-  public void configure (HashMap properties)
++  public void configure(HashMap properties)
+     throws TransportException
+   {
+-    // Get address [form: "hostname:port"]
+-    String p = (String) properties.get (_PROPERTY_ADDRESS);
++    // Get server [form: "y" or "n"]
++    String p = (String) properties.get(_PROPERTY_SERVER);
+     if (p != null)
+       {
+-	String[] s = p.split (":");
+-	if (s.length == 2)
+-	  {
+-	    _host = s[0];
+-	    _port = Integer.parseInt (s[1]);
+-	  }
++	if (p.toLowerCase().equals("y"))
++	  _server = true;
+       }
+ 
+-    // Get server [form: "y" or "n"]
+-    p = (String) properties.get (_PROPERTY_SERVER);
++    // Get address [form: "hostname:port"]
++    p = (String) properties.get(_PROPERTY_ADDRESS);
+     if (p != null)
+       {
+-	if (p.toLowerCase().equals ("y"))
+-	  _server = true;
++	String[] s = p.split(":");
++	if (s.length == 1)
++	  {
++	    // Port number only. Assume "localhost"
++	    _port = Integer.parseInt(s[0]);
++	    _host = "localhost";
++	  }
++	else
++	  {
++	    if (s[0].length() == 0)
++	      _host = "localhost";
++	    else
++	      _host = s[0];
++	    _port = Integer.parseInt(s[1]);
++	  }
+       }
+   }
+ 
+Index: libjava/classpath/gnu/classpath/jdwp/value/ByteValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/ByteValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/ByteValue.java	(revision 126334)
+@@ -0,0 +1,99 @@
++/* ByteValue.java -- JDWP wrapper class for a byte value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an byte value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class ByteValue
++    extends Value
++{
++  // The byte wrapped by this class
++  byte _value;
++
++  /**
++   * Create a new ByteValue from an byte
++   * 
++   * @param value the byte to wrap
++   */
++  public ByteValue(byte value)
++  {
++    super(JdwpConstants.Tag.BYTE);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public byte getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Byte(_value);
++  }
++
++  /**
++   * Write the wrapped byte to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeByte(_value);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/value/FloatValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/FloatValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/FloatValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* FloatValue.java -- JDWP wrapper class for a float value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++afloat with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an float value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class FloatValue
++    extends Value
++{
++  // The float wrapped by this class
++  float _value;
++
++  /**
++   * Create a new FloatValue from an float
++   * 
++   * @param value the float to wrap
++   */
++  public FloatValue(float value)
++  {
++    super(JdwpConstants.Tag.FLOAT);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public float getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Float(_value);
++  }
++
++  /**
++   * Write the wrapped float to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeFloat(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/ObjectValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/ObjectValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/ObjectValue.java	(revision 126334)
+@@ -0,0 +1,92 @@
++/* ObjectValue.java -- JDWP wrapper class for an Object value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++import gnu.classpath.jdwp.VMIdManager;
++import gnu.classpath.jdwp.id.ObjectId;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an Object value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class ObjectValue
++    extends Value
++{
++  // The Object wrapped by this class
++  Object _value;
++
++  /**
++   * Create a new ObjectValue from an Object
++   * 
++   * @param value the Object to wrap
++   */
++  public ObjectValue(Object value)
++  {
++    super(JdwpConstants.Tag.OBJECT);
++    _value = value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return _value;
++  }
++
++  /**
++   * Write the wrapped object to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    ObjectId oid = VMIdManager.getDefault().getObjectId(_value);
++    oid.write(os);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/value/StringValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/StringValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/StringValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* StringValue.java -- JDWP wrapper class for an String value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++import gnu.classpath.jdwp.util.JdwpString;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an String value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class StringValue
++    extends Value
++{
++  // The String wrapped by this class
++  String _value;
++
++  /**
++   * Create a new StringValue from an String
++   * 
++   * @param value the String to wrap
++   */
++  public StringValue(String value)
++  {
++    super(JdwpConstants.Tag.OBJECT);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public String getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return _value;
++  }
++
++  /**
++   * Write the wrapped object to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    JdwpString.writeString(os, _value);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/value/ValueFactory.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/ValueFactory.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/ValueFactory.java	(revision 126334)
+@@ -0,0 +1,247 @@
++/* ValueFactory.java -- factory to create JDWP Values
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++import gnu.classpath.jdwp.VMIdManager;
++import gnu.classpath.jdwp.exception.InvalidClassException;
++import gnu.classpath.jdwp.exception.InvalidObjectException;
++import gnu.classpath.jdwp.exception.InvalidTagException;
++import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
++import gnu.classpath.jdwp.id.ObjectId;
++import gnu.classpath.jdwp.util.JdwpString;
++
++import java.nio.ByteBuffer;
++
++/**
++ * A factory to create JDWP Values.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public class ValueFactory
++{
++  /**
++   * Creates a new Value of appropriate type for the value in the ByteBuffer
++   * by reading the tag byte from the front of the buffer.
++   * 
++   * @param bb contains the Object
++   * @return A new Value of appropriate type
++   * @throws JdwpInternalErrorException
++   * @throws InvalidObjectException
++   */
++  public static Value createFromTagged(ByteBuffer bb)
++    throws JdwpInternalErrorException, InvalidObjectException, InvalidTagException
++  {
++    return create(bb, bb.get());
++  }
++  
++  /**
++   * Creates a new Value of appropriate type for the value in the ByteBuffer
++   * by checking the type of the Class passed in.
++   * 
++   * @param bb contains the Object
++   * @param type a Class representing the type of the value in the ByteBuffer
++   * @return A new Value of appropriate type
++   * @throws JdwpInternalErrorException
++   * @throws InvalidObjectException
++   */
++  public static Value createFromUntagged(ByteBuffer bb, Class type)
++  throws JdwpInternalErrorException, InvalidObjectException, InvalidClassException
++  {
++    byte tag = getTagForClass(type);
++    
++    try
++      {
++        return create(bb, tag);
++      }
++    catch (InvalidTagException ite)
++      {
++        throw new InvalidClassException(ite);
++      }
++  }
++  
++  /**
++   * Creates a new Value of appropriate type for the value in the ByteBuffer.
++   * 
++   * @param bb contains the Object
++   * @param tag a byte representing the type of the object
++   * @return A new Value of appropriate type
++   * @throws JdwpInternalErrorException
++   * @throws InvalidObjectException
++   */
++  private static Value create(ByteBuffer bb, byte tag)
++    throws JdwpInternalErrorException, InvalidObjectException, InvalidTagException
++  {
++    Value val = null;
++    switch(tag)
++    {
++      case JdwpConstants.Tag.BYTE:
++        val = new ByteValue(bb.get());
++        break;
++      case JdwpConstants.Tag.BOOLEAN:
++        val = new BooleanValue((bb.get() != 0));
++        break;
++      case JdwpConstants.Tag.CHAR:
++        val = new CharValue(bb.getChar());
++        break;
++      case JdwpConstants.Tag.SHORT:
++        val = new ShortValue(bb.getShort());
++        break;
++      case JdwpConstants.Tag.INT:
++        val = new IntValue(bb.getInt());
++        break;
++      case JdwpConstants.Tag.FLOAT:
++        val = new FloatValue(bb.getFloat());
++        break;
++      case JdwpConstants.Tag.LONG:
++        val = new LongValue(bb.getLong());
++        break;
++      case JdwpConstants.Tag.DOUBLE:
++        val = new DoubleValue(bb.getDouble());
++        break;
++      case JdwpConstants.Tag.VOID:
++        val = new VoidValue();
++        break;
++      case JdwpConstants.Tag.ARRAY:
++      case JdwpConstants.Tag.THREAD:
++      case JdwpConstants.Tag.OBJECT:
++      case JdwpConstants.Tag.THREAD_GROUP:
++      case JdwpConstants.Tag.CLASS_LOADER:
++      case JdwpConstants.Tag.CLASS_OBJECT:
++        ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
++        val = new ObjectValue(oid.getObject());
++        break;
++      case JdwpConstants.Tag.STRING:
++        val = new StringValue(JdwpString.readString(bb));
++        break;
++      default:
++        throw new InvalidTagException(tag);
++    }
++    
++    return val;
++  }
++  
++  /**
++   * Creates a tag for the type of the class.
++   * 
++   * @param klass the type to get a tag for
++   * @return a byte tag representing the class
++   * @throws JdwpInternalErrorException
++   * @throws InvalidObjectException
++   */
++  private static byte getTagForClass(Class klass)
++    throws JdwpInternalErrorException
++  {
++    byte tag;
++    
++    if (klass.isPrimitive())
++      {
++        if (klass == byte.class)
++          tag = JdwpConstants.Tag.BYTE;
++        else if (klass == boolean.class)
++          tag = JdwpConstants.Tag.BOOLEAN;
++        else if (klass == char.class)
++          tag = JdwpConstants.Tag.CHAR;
++        else if (klass == short.class)
++          tag = JdwpConstants.Tag.SHORT;
++        else if (klass == int.class)
++          tag = JdwpConstants.Tag.INT;
++        else if (klass == float.class)
++          tag = JdwpConstants.Tag.FLOAT;
++        else if (klass == long.class)
++          tag = JdwpConstants.Tag.LONG;
++        else if (klass == double.class)
++          tag = JdwpConstants.Tag.DOUBLE;
++        else if (klass == void.class)
++          tag = JdwpConstants.Tag.VOID;
++        else
++          throw new JdwpInternalErrorException("Invalid primitive class");
++      }
++    else
++      {
++        tag = JdwpConstants.Tag.OBJECT;
++      }
++    
++    return tag;
++  }
++  
++  /**
++   * Create a value type for an Object of type determined by a Class.  This is
++   * a special case where a value needs to be created, but the value to create
++   * it for is already in an object, not in a buffer.
++   * 
++   * @param value the Object to convert to a Value
++   * @param type the Class type of the object
++   * @return a new Value representing this object
++   */
++  public static Value createFromObject(Object value, Class type)
++  {
++    Value val = null;
++    
++    if (type.isPrimitive())
++      {
++        if (type == byte.class)
++          val = new ByteValue(((Byte) value).byteValue());
++        else if (type == boolean.class)
++          val = new BooleanValue(((Boolean) value).booleanValue());
++        else if (type == char.class)
++          val = new CharValue(((Character) value).charValue());
++        else if (type == short.class)
++          val = new ShortValue(((Short) value).shortValue());
++        else if (type == int.class)
++          val = new IntValue(((Integer) value).intValue());
++        else if (type == float.class)
++          val = new FloatValue(((Float) value).floatValue());
++        else if (type == long.class)
++          val = new LongValue(((Long) value).longValue());
++        else if (type == double.class)
++          val = new DoubleValue(((Double) value).doubleValue());
++        else if (type == void.class)
++          val = new VoidValue();
++      }
++    else
++      {
++        if (type.isAssignableFrom(String.class))
++          val = new StringValue ((String) value);
++        else
++          val = new ObjectValue(value);
++      }
++    
++    return val;
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/value/DoubleValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/DoubleValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/DoubleValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* DoubleValue.java -- JDWP wrapper class for a double value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an double value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class DoubleValue
++    extends Value
++{
++  // The double wrapped by this class
++  double _value;
++
++  /**
++   * Create a new DoubleValue from an double
++   * 
++   * @param value the double to wrap
++   */
++  public DoubleValue(double value)
++  {
++    super(JdwpConstants.Tag.DOUBLE);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public double getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Double(_value);
++  }
++
++  /**
++   * Write the wrapped double to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeDouble(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/IntValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/IntValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/IntValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* IntValue.java -- JDWP wrapper class for an int value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an int value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class IntValue
++    extends Value
++{
++  // The int wrapped by this class
++  int _value;
++
++  /**
++   * Create a new IntValue from an int
++   * 
++   * @param value the int to wrap
++   */
++  public IntValue(int value)
++  {
++    super(JdwpConstants.Tag.INT);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public int getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Integer(_value);
++  }
++
++  /**
++   * Write the wrapped int to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeInt(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/CharValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/CharValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/CharValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* CharValue.java -- JDWP wrapper class for a char value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an char value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class CharValue
++    extends Value
++{
++  // The char wrapped by this class
++  char _value;
++
++  /**
++   * Create a new CharValue from an char
++   * 
++   * @param value the char to wrap
++   */
++  public CharValue(char value)
++  {
++    super(JdwpConstants.Tag.CHAR);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public char getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Character(_value);
++  }
++
++  /**
++   * Write the wrapped char to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeChar(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/ArrayValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/ArrayValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/ArrayValue.java	(revision 126334)
+@@ -0,0 +1,92 @@
++/* ArrayValue.java -- JDWP wrapper class for an Object value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++import gnu.classpath.jdwp.VMIdManager;
++import gnu.classpath.jdwp.id.ObjectId;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an Array value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public class ArrayValue
++    extends Value
++{
++  // The Array wrapped by this class represented as a Object
++  Object _value;
++
++  /**
++   * Create a new ArrayValue from an Object
++   * 
++   * @param value the Object to wrap
++   */
++  public ArrayValue(Object value)
++  {
++    super(JdwpConstants.Tag.ARRAY);
++    _value = value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return _value;
++  }
++
++  /**
++   * Write the wrapped object to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    ObjectId oid = VMIdManager.getDefault().getObjectId(_value);
++    oid.write(os);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/value/BooleanValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/BooleanValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/BooleanValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* BooleanValue.java -- JDWP wrapper class for a boolean value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an boolean value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class BooleanValue
++    extends Value
++{
++  // The boolean wrapped by this class
++  boolean _value;
++
++  /**
++   * Create a new BooleanValue from an boolean
++   * 
++   * @param value the boolean to wrap
++   */
++  public BooleanValue(boolean value)
++  {
++    super(JdwpConstants.Tag.BOOLEAN);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public boolean getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Boolean(_value);
++  }
++
++  /**
++   * Write the wrapped boolean to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeBoolean(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/LongValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/LongValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/LongValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* LongValue.java -- JDWP wrapper class for a long value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an long value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class LongValue
++    extends Value
++{
++  // The long wrapped by this class
++  long _value;
++
++  /**
++   * Create a new LongValue from an long
++   * 
++   * @param value the long to wrap
++   */
++  public LongValue(long value)
++  {
++    super(JdwpConstants.Tag.LONG);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public long getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Long(_value);
++  }
++
++  /**
++   * Write the wrapped long to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeLong(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/ShortValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/ShortValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/ShortValue.java	(revision 126334)
+@@ -0,0 +1,100 @@
++/* ShortValue.java -- JDWP wrapper class for a short value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an short value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public final class ShortValue
++    extends Value
++{
++  // The short wrapped by this class
++  short _value;
++
++  /**
++   * Create a new ShortValue from a short
++   * 
++   * @param value the short to wrap
++   */
++  public ShortValue(short value)
++  {
++    super(JdwpConstants.Tag.SHORT);
++    _value = value;
++  }
++  
++  /**
++   * Get the value held in this Value
++   * 
++   * @return the value represented by this Value object
++   */
++  public short getValue()
++  {
++    return _value;
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return new Short(_value);
++  }
++
++  /**
++   * Write the wrapped short to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os)
++    throws IOException
++  {
++    os.writeShort(_value);
++  }
++}
++
+Index: libjava/classpath/gnu/classpath/jdwp/value/Value.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/Value.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/Value.java	(revision 126334)
+@@ -0,0 +1,155 @@
++/* Value.java -- base class of JDWP values
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.exception.InvalidClassException;
++import gnu.classpath.jdwp.exception.InvalidObjectException;
++import gnu.classpath.jdwp.exception.InvalidTagException;
++import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++import java.nio.ByteBuffer;
++
++/**
++ * Superclass for all JDWP Values.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public abstract class Value
++{
++  // A Tag representing the type of this value
++  private byte _tag;
++  
++  /**
++   * Create a new value of type tag.
++   * 
++   * @param tag the type of the value
++   */ 
++  protected Value(byte tag)
++  {
++    _tag = tag;
++  }
++  
++  /**
++   * Get the tag for this Value
++   * 
++   * @return the byte tag of this Value
++   */
++  public byte getTag()
++  {
++    return _tag;
++  }
++  
++  /**
++   * Calls the dervied classes writeValue method to write its value to the 
++   * DataOutputStream.
++   * 
++   * @param os write the value here
++   * @throws IOException
++   */  
++  public void writeUntagged(DataOutputStream os)
++    throws IOException
++  {
++    write(os);
++  }
++  
++  /**
++   * Will write the given object as a tagged value to the DataOutputStream.
++   * 
++   * @param os write the value here
++   * @param obj the Object to write
++   * @throws IOException
++   */
++  public void writeTagged(DataOutputStream os)
++    throws IOException
++  {
++    os.write (_tag);
++    write(os);
++  }
++  
++  /**
++   * This method must write the value to the DataOutputStream in a manner
++   * appropriate for the type of the value.
++   * 
++   * @param os DataOutputStream to write to
++   * @throws IOException
++   */
++  protected abstract void write(DataOutputStream os)
++    throws IOException;
++  
++  /**
++   * Returns an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  protected abstract Object getObject();
++    
++  /**
++   * Get an untagged object from the ByteBuffer
++   * 
++   * @param bb the ByteBuffer to extract the value from
++   * @param type a Class representing the type
++   * @return an Object from the ByteBuffer of the type of the Class parameter
++   * @throws JdwpInternalErrorException
++   * @throws InvalidObjectException
++   */
++  public static Object getUntaggedObject(ByteBuffer bb, Class type)
++    throws JdwpInternalErrorException, InvalidObjectException, InvalidClassException
++  {
++    Value val = ValueFactory.createFromUntagged(bb, type);
++    return val.getObject();
++  }
++  
++  /**
++   * Get an untagged object from the ByteBuffer
++   * 
++   * @param bb the ByteBuffer to extract the value from
++   * @param tag a byte tag representing the type
++   * @return an Object from the ByteBuffer of the type of the Class parameter
++   * @throws JdwpInternalErrorException
++   * @throws InvalidObjectException
++   */
++  public static Object getTaggedObject(ByteBuffer bb)
++    throws JdwpInternalErrorException, InvalidObjectException, InvalidTagException
++  {
++    Value val = ValueFactory.createFromTagged(bb);
++    return val.getObject();
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/value/VoidValue.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/value/VoidValue.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/value/VoidValue.java	(revision 126334)
+@@ -0,0 +1,82 @@
++/* VoidValue.java -- JDWP wrapper class for a void value
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.value;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * Wrapper for an void value.
++ * 
++ * @author Kyle Galloway <kgallowa@redhat.com>
++ */
++public class VoidValue
++    extends Value
++{
++  /**
++   * Create a new VoidValue.
++   */
++  public VoidValue ()
++  {
++    super(JdwpConstants.Tag.VOID);
++  }
++  
++  /**
++   * Return an object representing this type
++   * 
++   * @return an Object represntation of this value
++   */
++  @Override
++  protected Object getObject()
++  {
++    return null;
++  }
++
++  /**
++   * Write the wrapped void to the given DataOutputStream.
++   * 
++   * @param os the output stream to write to
++   */
++  @Override
++  protected void write(DataOutputStream os) 
++    throws IOException
++  {
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/util/MethodResult.java	(revision 126334)
+@@ -52,6 +52,9 @@
+   
+   // Any Exception that was thrown by the executing method
+   private Exception thrownException;
++  
++  // The type of this result
++  private Class resType;
+ 
+   public Object getReturnedValue()
+   {
+@@ -73,4 +76,14 @@
+     this.thrownException = thrownException;
+   }
+   
++  public Class getResultType()
++  {
++    return resType;
++  }
++  
++  public void setResultType(Class type)
++  {
++    resType = type;
++  }
++  
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/util/NullObject.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/util/NullObject.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/util/NullObject.java	(revision 126334)
+@@ -0,0 +1,50 @@
++/* NullObject.java -- placeholder for null values
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.util;
++
++/**
++ * This is a placeholder for null.  There are several places in JDWP where null
++ * is a valid value (i.e. when geting the value of a variable slot that
++ * contains a null reference at that time).  This class distinguishes between
++ * these "meaningful" null values and invalid null pointers.
++ *
++ * @author Kyle Galloway  <kgallowa@redhat.com>
++ */
++public class NullObject
++{
++}
+Index: libjava/classpath/gnu/classpath/jdwp/util/MonitorInfo.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/util/MonitorInfo.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/util/MonitorInfo.java	(revision 126334)
+@@ -0,0 +1,76 @@
++/* MonitorInfo.java -- class used to return monitor information
++   for JDWP.
++
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++
++package gnu.classpath.jdwp.util;
++
++import gnu.classpath.jdwp.VMIdManager;
++import gnu.classpath.jdwp.id.ObjectId;
++
++import java.io.DataOutputStream;
++import java.io.IOException;
++
++/**
++ * This class is used to pass monitor information between
++ * the JDWP back-end and the virtual machine.
++ *
++ * @author Keith Seitz  (keiths@redhat.com)
++ */
++public class MonitorInfo
++{
++  public int entryCount;
++  public Thread owner;
++  public Thread[] waiters;
++
++  public void write(DataOutputStream os)
++    throws IOException
++  {
++    VMIdManager idm = VMIdManager.getDefault();
++    ObjectId id = idm.getObjectId(owner);
++    id.write(os);
++    os.write(entryCount);
++    os.write(waiters.length);
++    for (int i = 0; i < waiters.length; ++i)
++      {
++	id = idm.getObjectId(waiters[i]);
++	id.write(os);
++      }
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/util/Location.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/util/Location.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/util/Location.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* Location.java -- class to read/write JDWP locations
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -153,4 +153,16 @@
+   {
+     return method.toString () + "." + index;
+   }
++
++  public boolean equals(Object obj)
++  {
++    if (obj instanceof Location)
++      {
++	Location l = (Location) obj;
++	return (getMethod().equals(l.getMethod())
++		&& getIndex() == l.getIndex());
++      }
++
++    return false;
++  }
+ }
+Index: libjava/classpath/gnu/classpath/jdwp/util/Value.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/util/Value.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/util/Value.java	(revision 126334)
+@@ -1,301 +0,0 @@
+-/* Value.java -- class to read/write JDWP tagged and untagged values
+-   Copyright (C) 2005, 2006, Free Software Foundation
+-
+-This file is part of GNU Classpath.
+-
+-GNU Classpath is free software; you can redistribute it and/or modify
+-it under the terms of the GNU General Public License as published by
+-the Free Software Foundation; either version 2, or (at your option)
+-any later version.
+-
+-GNU Classpath 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.  See the GNU
+-General Public License for more details.
+-
+-You should have received a copy of the GNU General Public License
+-along with GNU Classpath; see the file COPYING.  If not, write to the
+-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+-02110-1301 USA.
+-
+-Linking this library statically or dynamically with other modules is
+-making a combined work based on this library.  Thus, the terms and
+-conditions of the GNU General Public License cover the whole
+-combination.
+-
+-As a special exception, the copyright holders of this library give you
+-permission to link this library with independent modules to produce an
+-executable, regardless of the license terms of these independent
+-modules, and to copy and distribute the resulting executable under
+-terms of your choice, provided that you also meet, for each linked
+-independent module, the terms and conditions of the license of that
+-module.  An independent module is a module which is not derived from
+-or based on this library.  If you modify this library, you may extend
+-this exception to your version of the library, but you are not
+-obligated to do so.  If you do not wish to do so, delete this
+-exception statement from your version. */
+-
+-
+-package gnu.classpath.jdwp.util;
+-
+-import gnu.classpath.jdwp.JdwpConstants;
+-import gnu.classpath.jdwp.VMIdManager;
+-import gnu.classpath.jdwp.exception.InvalidFieldException;
+-import gnu.classpath.jdwp.exception.JdwpException;
+-import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
+-import gnu.classpath.jdwp.exception.NotImplementedException;
+-import gnu.classpath.jdwp.id.ObjectId;
+-
+-import java.io.DataOutputStream;
+-import java.io.IOException;
+-import java.nio.ByteBuffer;
+-
+-/**
+- * A class to read/write JDWP tagged and untagged values.
+- * 
+- * @author Aaron Luchko <aluchko@redhat.com>
+- */
+-public class Value
+-{
+-  /**
+-   * Will write the given object as an untagged value to the DataOutputStream.
+-   * 
+-   * @param os write the value here
+-   * @param obj the Object to write
+-   * @throws IOException
+-   * @throws InvalidFieldException
+-   */  
+-  public static void writeUntaggedValue(DataOutputStream os, Object obj)
+-    throws JdwpException, IOException
+-  {
+-    writeValue(os, obj, false);
+-  }
+-  
+-  /**
+-   * Will write the given object as a tagged value to the DataOutputStream.
+-   * 
+-   * @param os write the value here
+-   * @param obj the Object to write
+-   * @throws IOException
+-   * @throws InvalidFieldException
+-   */
+-  public static void writeTaggedValue(DataOutputStream os, Object obj)
+-    throws JdwpException, IOException
+-  {
+-    writeValue(os, obj, true);
+-  }
+-  
+-  /**
+-   * Will write the given object as either a value or an untagged value to the
+-   * DataOutputStream.
+-   * 
+-   * @param os write the value here
+-   * @param obj the Object to write
+-   * @param tagged true if the value is tagged, false otherwise
+-   * @throws IOException
+-   * @throws InvalidFieldException
+-   */
+-  private static void writeValue(DataOutputStream os, Object obj,
+-                                boolean tagged)
+-    throws IOException, JdwpException
+-  {
+-    Class clazz = obj.getClass();
+-    if (clazz.isPrimitive())
+-      {
+-        if (clazz == byte.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.BYTE);
+-            os.writeByte(((Byte) obj).byteValue());
+-          }
+-        else if (clazz == char.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.CHAR);
+-            os.writeChar(((Character) obj).charValue());
+-          }
+-        else if (clazz == float.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.FLOAT);
+-            os.writeFloat(((Float) obj).floatValue());
+-          }
+-        else if (clazz == double.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.DOUBLE);
+-            os.writeDouble(((Double) obj).doubleValue());
+-          }
+-        else if (clazz == int.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.BYTE);
+-            os.writeInt(((Integer) obj).intValue());
+-          }
+-        else if (clazz == long.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.LONG);
+-            os.writeLong(((Long) obj).longValue());
+-          }
+-        else if (clazz == short.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.SHORT);
+-            os.writeInt(((Short) obj).shortValue());
+-          }
+-        else if (clazz == void.class)
+-          { // A 'void' has no data
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.VOID);
+-          }
+-        else if (clazz == boolean.class)
+-          {
+-            if (tagged)
+-              os.writeByte(JdwpConstants.Tag.BOOLEAN);
+-            os.writeBoolean(((Boolean) obj).booleanValue());
+-          }
+-        else
+-          { // This shouldn't be possible
+-            throw new JdwpInternalErrorException(
+-              "Field has invalid primitive!");
+-          }
+-      }
+-    else
+-      {
+-        // Object is an Object, not a primitive type wrapped in an object
+-        // Write the appropriate tag
+-        if (tagged)
+-          {
+-            if (clazz.isArray())
+-              os.writeByte(JdwpConstants.Tag.ARRAY);
+-            else if (obj instanceof String)
+-              os.writeByte(JdwpConstants.Tag.STRING);
+-            else if (obj instanceof Thread)
+-              os.writeByte(JdwpConstants.Tag.THREAD);
+-            else if (obj instanceof ThreadGroup)
+-              os.writeByte(JdwpConstants.Tag.THREAD_GROUP);
+-            else if (obj instanceof ClassLoader)
+-              os.writeByte(JdwpConstants.Tag.CLASS_LOADER);
+-            else if (obj instanceof Class)
+-              os.writeByte(JdwpConstants.Tag.CLASS_OBJECT);
+-            else
+-              os.writeByte(JdwpConstants.Tag.OBJECT);
+-          }
+-        ObjectId oid = VMIdManager.getDefault().getObjectId(obj);
+-        oid.write(os);
+-      }
+-  }
+-
+-  /**
+-   * Reads the appropriate object for the tagged value contained in the 
+-   * ByteBuffer.
+-   * 
+-   * @param bb contains the Object
+-   * @return The Object referenced by the value
+-   * @throws JdwpException
+-   * @throws IOException
+-   */
+-  public static Object getObj(ByteBuffer bb)
+-    throws JdwpException, IOException
+-  {
+-    return getUntaggedObj(bb, bb.get());
+-  }
+-
+-  /**
+-   * Reads an object of the given Class from the untagged value contained
+-   * in the ByteBuffer.
+-   * 
+-   * @param bb   contains the Object
+-   * @param type corresponds to the TAG of value to be read 
+-   * @return the resultant object
+-   * @throws JdwpException
+-   * @throws IOException
+-   */
+-  public static Object getUntaggedObj(ByteBuffer bb, Class type)
+-    throws JdwpException, IOException
+-  {
+-    if (type.isPrimitive())
+-      {
+-        if (type == byte.class)
+-          return new Byte(bb.get());
+-        else if (type == char.class)
+-          return new Character(bb.getChar());
+-        else if (type == float.class)
+-          return new Float(bb.getFloat());
+-        else if (type == double.class)
+-          return new Double(bb.getDouble());
+-        else if (type == int.class)
+-          return new Integer(bb.getInt());
+-        else if (type == long.class)
+-          return new Long(bb.getLong());
+-        else if (type == short.class)
+-          return new Short(bb.getShort());
+-        else if (type == boolean.class)
+-          return Boolean.valueOf(bb.get() != 0);
+-        else if (type == void.class)
+-          return new byte[0];
+-        else
+-          { // This shouldn't be possible
+-            throw new JdwpInternalErrorException(
+-              "Field has invalid primitive!");
+-          }
+-      }
+-    else
+-      {
+-        // Field is an object
+-        ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
+-        return oid.getObject();
+-      }
+-  }
+-
+-  /**
+-   * Reads the an object of the given Class from the untagged value contained
+-   * in the ByteBuffer.
+-   * 
+-   * @param bb contains the Object
+-   * @param tag TAG of the Value to be read
+-   * @return the object
+-   * @throws JdwpException
+-   * @throws IOException
+-   */
+-  public static Object getUntaggedObj(ByteBuffer bb, byte tag)
+-    throws JdwpException, IOException
+-  {
+-    switch (tag)
+-      {
+-      case JdwpConstants.Tag.BYTE:
+-        return new Byte(bb.get());
+-      case JdwpConstants.Tag.CHAR:
+-        return new Character(bb.getChar());
+-      case JdwpConstants.Tag.FLOAT:
+-        return new Float(bb.getFloat());
+-      case JdwpConstants.Tag.DOUBLE:
+-        return new Double(bb.getDouble());
+-      case JdwpConstants.Tag.INT:
+-        return new Integer(bb.getInt());
+-      case JdwpConstants.Tag.LONG:
+-        return new Long(bb.getLong());
+-      case JdwpConstants.Tag.SHORT:
+-        return new Short(bb.getShort());
+-      case JdwpConstants.Tag.VOID:
+-        return new byte[0];
+-      case JdwpConstants.Tag.BOOLEAN:
+-        return (bb.get() == 0) ? new Boolean(false) : new Boolean(true);
+-      case JdwpConstants.Tag.STRING:
+-        return JdwpString.readString(bb);
+-      case JdwpConstants.Tag.ARRAY:
+-      case JdwpConstants.Tag.THREAD:
+-      case JdwpConstants.Tag.OBJECT:
+-      case JdwpConstants.Tag.THREAD_GROUP:
+-      case JdwpConstants.Tag.CLASS_LOADER:
+-      case JdwpConstants.Tag.CLASS_OBJECT:
+-        // All these cases are ObjectIds
+-        ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
+-        return oid.getObject();
+-      default:
+-        throw new NotImplementedException("Tag " + tag
+-                                          + " is not implemented.");
+-      }
+-  }
+-}
+Index: libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java	(revision 125219)
++++ libjava/classpath/gnu/classpath/jdwp/util/VariableTable.java	(revision 126334)
+@@ -50,9 +50,9 @@
+ public class VariableTable
+ {
+ 
+-  private final long argCnt;
++  private final int argCnt;
+ 
+-  private final long slots;
++  private final int slots;
+ 
+   private final long[] lineCI;
+ 
+@@ -95,8 +95,8 @@
+    */
+   public void write(DataOutputStream os) throws IOException
+   {
+-    os.writeLong(argCnt);
+-    os.writeLong(slots);
++    os.writeInt(argCnt);
++    os.writeInt(slots);
+     for (int i = 0; i < slots; i++)
+       {
+         os.writeLong(lineCI[i]);
+Index: libjava/classpath/gnu/classpath/jdwp/exception/InvalidTagException.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/exception/InvalidTagException.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/exception/InvalidTagException.java	(revision 126334)
+@@ -0,0 +1,57 @@
++/* InvalidTagException.java -- an invalid type tag exception
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++package gnu.classpath.jdwp.exception;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++/**
++ * An exception thrown when an invalid tag is used by
++ * the debugger
++ *
++ * @author Kyle Galloway  (kgallowa@redhat.com)
++ */
++public class InvalidTagException
++  extends JdwpException
++{
++  public InvalidTagException (byte tag)
++  {
++    super (JdwpConstants.Error.INVALID_TAG,
++       "invalid tag (" + tag + ")");
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java	(revision 126334)
+@@ -0,0 +1,56 @@
++/* AbsentInformationException.java -- information not present exception
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++
++package gnu.classpath.jdwp.exception;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++/**
++ * An exception thrown when the requested information is not available.
++ *
++ * @author Kyle Galloway  (kgallowa@redhat.com)
++ */
++public class AbsentInformationException
++  extends JdwpException
++{
++  public AbsentInformationException(String str)
++  {
++    super(JdwpConstants.Error.ABSENT_INFORMATION, str);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/exception/InvalidSlotException.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/exception/InvalidSlotException.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/exception/InvalidSlotException.java	(revision 126334)
+@@ -0,0 +1,62 @@
++/* InvalidSlotException.java -- an invalid variable slot exception
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++
++package gnu.classpath.jdwp.exception;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++/**
++ * An exception thrown when an invalid Slot id is used by the debugger 
++ * (i.e. when trying to access a variable slot which doesn't exist).
++ *
++ * @author Kyle Galloway (kgallowa@redhat.com)
++ */
++public class InvalidSlotException
++  extends JdwpException
++{
++  public InvalidSlotException(int slot)
++  {
++    super(JdwpConstants.Error.INVALID_SLOT, "invalid slot: " + slot);
++  }
++
++  public InvalidSlotException(String msg)
++  {
++    super(JdwpConstants.Error.INVALID_SLOT, msg);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/exception/InvalidFrameException.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/exception/InvalidFrameException.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/exception/InvalidFrameException.java	(revision 126334)
+@@ -0,0 +1,63 @@
++/* InvalidFrameException.java -- invalid jframeid
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++
++package gnu.classpath.jdwp.exception;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++/**
++ * An exception thrown when the debugger requests an invalid frame in the call
++ * stack.
++ *
++ * @author Kyle Galloway  (kgallowa@redhat.com)
++ */
++public class InvalidFrameException
++  extends JdwpException
++{
++  public InvalidFrameException(long id)
++  {
++    super(JdwpConstants.Error.INVALID_FRAMEID, 
++		  "invalid frame id (" + id + ")");
++  }
++
++  public InvalidFrameException(String msg)
++  {
++    super(JdwpConstants.Error.INVALID_FRAMEID, msg);
++  }
++}
+Index: libjava/classpath/gnu/classpath/jdwp/exception/TypeMismatchException.java
+===================================================================
+--- libjava/classpath/gnu/classpath/jdwp/exception/TypeMismatchException.java	(revision 0)
++++ libjava/classpath/gnu/classpath/jdwp/exception/TypeMismatchException.java	(revision 126334)
+@@ -0,0 +1,62 @@
++/* TypeMismatchException.java -- mismatched type of local variable
++   Copyright (C) 2007 Free Software Foundation
++
++This file is part of GNU Classpath.
++
++GNU Classpath is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Classpath 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.  See the GNU
++General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Classpath; see the file COPYING.  If not, write to the
++Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++02110-1301 USA.
++
++Linking this library statically or dynamically with other modules is
++making a combined work based on this library.  Thus, the terms and
++conditions of the GNU General Public License cover the whole
++combination.
++
++As a special exception, the copyright holders of this library give you
++permission to link this library with independent modules to produce an
++executable, regardless of the license terms of these independent
++modules, and to copy and distribute the resulting executable under
++terms of your choice, provided that you also meet, for each linked
++terms of your choice, provided that you also meet, for each linked
++independent module, the terms and conditions of the license of that
++module.  An independent module is a module which is not derived from
++or based on this library.  If you modify this library, you may extend
++this exception to your version of the library, but you are not
++obligated to do so.  If you do not wish to do so, delete this
++exception statement from your version. */
++
++
++package gnu.classpath.jdwp.exception;
++
++import gnu.classpath.jdwp.JdwpConstants;
++
++/**
++ * An exception throw when attempting to access a local variable of the wrong
++ * type.
++ *
++ * @author Kyle Galloway  (kgallowa@redhat.com)
++ */
++public class TypeMismatchException
++  extends JdwpException
++{
++  public TypeMismatchException(byte tag)
++  {
++    super(JdwpConstants.Error.TYPE_MISMATCH, "incorrect tag: " + tag);
++  }
++
++  public TypeMismatchException(String msg)
++  {
++    super(JdwpConstants.Error.TYPE_MISMATCH, msg);
++  }
++}
+Index: libjava/classpath/ChangeLog
+===================================================================
+--- libjava/classpath/ChangeLog	(revision 125219)
++++ libjava/classpath/ChangeLog	(revision 126334)
+@@ -1,3 +1,24 @@
++2007-05-18  Keith Seitz  <keiths@redhat.com>
++
++	Merged from trunk:
++
++	2007-05-07 Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/Jdwp.java (notify): Rewrite to call
++	new array-based method.
++	(notify): New function.
++	(sendEvent): Rewrite to use sendEvents.
++	(sendEvents): New method.
++	* gnu/classpath/jdwp/event/Event.java (toPacket): Make static.
++	Change parameters to use arrays for events and requests.
++	Add suspendPolicy parameter.
++	Move per-event data transformation to...
++	(_toData): ... here.
++	* gnu/classpath/jdwp/transport/JdwpConnection.java
++	(sendEvent): Renamed to ...
++	(sendEvents): ... this.
++	Change parameters to use arrays for events and requests.
++	Add suspendPolicy parameter.
++
+ 2007-05-03  Andrew Haley  <aph@redhat.com>
+ 
+ 	* gnu/javax/management/Server.java (Server): Record the delegate.
+Index: libjava/include/jvmti_md.h
+===================================================================
+--- libjava/include/jvmti_md.h	(revision 125219)
++++ libjava/include/jvmti_md.h	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* jvmti_md.h
+-   Copyright (C) 2006 Free Software Foundation, Inc.
++   Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -53,6 +53,14 @@
+   /* One for each callback.                     */			\
+   bool enabled[EVENT_SLOTS];
+ 
++/* Redefine the standard JVMTI types to something a little more
++   precise than "jobject". */
++#define _CLASSPATH_VM_JVMTI_TYPES_DEFINED
++typedef java::lang::Thread *jthread;
++typedef java::lang::ThreadGroup *jthreadGroup;
++typedef jlong jlocation;
++typedef struct _Jv_rawMonitorID *jrawMonitorID;
++
+ #endif /* __GCJ_JNI_IMPL__ */
+ 
+ #endif /* __GCJ_JVMTI_MD_H__ */
+Index: libjava/include/java-interp.h
+===================================================================
+--- libjava/include/java-interp.h	(revision 125219)
++++ libjava/include/java-interp.h	(revision 126334)
+@@ -1,6 +1,6 @@
+ // java-interp.h - Header file for the bytecode interpreter.  -*- c++ -*-
+ 
+-/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006  Free Software Foundation
++/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -137,6 +137,21 @@
+   int line;
+ };
+ 
++// This structure holds local variable information.
++// The pc value is the first pc where the variable must have a value and it
++// must continue to have a value until (start_pc + length).
++// The name is the variable name, and the descriptor contains type information.
++// The slot is the index in the local variable array of this method, long and
++// double occupy slot and slot+1.
++struct _Jv_LocalVarTableEntry
++{
++  int bytecode_start_pc;
++  int length;
++  char *name;
++  char *descriptor;
++  int slot;
++};
++
+ class _Jv_InterpMethod : public _Jv_MethodBase
+ {
+   // Breakpoint instruction
+@@ -157,6 +172,10 @@
+   // Length of the line_table - when this is zero then line_table is NULL.
+   int line_table_len;  
+   _Jv_LineTableEntry *line_table;
++  
++  // The local variable table length and the table itself
++  int local_var_table_len;
++  _Jv_LocalVarTableEntry *local_var_table;
+ 
+   pc_t prepared;
+   int number_insn_slots;
+@@ -205,11 +224,16 @@
+   // number info is unavailable.
+   int get_source_line(pc_t mpc);
+ 
++   public:
++
+   // Convenience function for indexing bytecode PC/insn slots in
+   // line tables for JDWP
+   jlong insn_index (pc_t pc);
+   
+-   public:
++  // Helper function used to check if there is a handler for an exception
++  // present at this code index
++  jboolean check_handler (pc_t *pc, _Jv_InterpMethod *meth,
++                     java::lang::Throwable *ex);
+    
+   /* Get the line table for this method.
+    * start  is the lowest index in the method
+@@ -219,6 +243,25 @@
+    */
+   void get_line_table (jlong& start, jlong& end, jintArray& line_numbers,
+ 		       jlongArray& code_indices);
++  
++  int get_max_locals ()
++  {
++    return static_cast<int> (max_locals);
++  }
++  
++  /* Get info for a local variable of this method.
++   * If there is no loca_var_table for this method it will return -1.
++   * table_slot  indicates which slot in the local_var_table to get, if there is
++   * no variable at this location it will return 0.
++   * Otherwise, it will return the number of table slots after the selected
++   * slot, indexed from 0.
++   * 
++   * Example: there are 5 slots in the table, you request slot 0 so it will
++   * return 4.
++   */
++  int get_local_var_table (char **name, char **sig, char **generic_sig,
++                           jlong *startloc, jint *length, jint *slot,
++                           int table_slot);
+ 
+   /* Installs a break instruction at the given code index. Returns
+      the pc_t of the breakpoint or NULL if index is invalid. */
+@@ -231,6 +274,9 @@
+      the insn or NULL if index is invalid. */
+   pc_t set_insn (jlong index, pc_t insn);
+ 
++  // Is the given location in this method a breakpoint?
++  bool breakpoint_at (jlong index);
++
+ #ifdef DIRECT_THREADED
+   friend void _Jv_CompileMethod (_Jv_InterpMethod*);
+ #endif
+@@ -263,6 +309,7 @@
+ #endif
+ 
+   friend _Jv_MethodBase ** _Jv_GetFirstMethod (_Jv_InterpClass *klass);
++  friend jstring _Jv_GetInterpClassSourceFile (jclass);
+ };
+ 
+ extern inline _Jv_MethodBase **
+@@ -316,38 +363,126 @@
+   }
+ };
+ 
+-// The interpreted call stack, represented by a linked list of frames.
+-struct _Jv_InterpFrame
++enum _Jv_FrameType
+ {
++  frame_native,
++  frame_interpreter,
++  frame_proxy
++};
++
++//  The composite call stack as represented by a linked list of frames
++class _Jv_Frame
++{
++public:
++  java::lang::Thread *thread;
++
+   union
+   {
++    _Jv_MethodBase *self;
+     void *meth;
+-    _Jv_InterpMethod *self;
+     _Jv_Method *proxyMethod;
+   };
+-  java::lang::Thread *thread;
+-  _Jv_InterpFrame *next;
++  
++  //The full list of frames, JNI and interpreted
++  _Jv_Frame *next;
++  _Jv_FrameType frame_type;
++  
++  _Jv_Frame (_Jv_MethodBase *s, java::lang::Thread *thr, _Jv_FrameType type)
++  {
++    self = s;
++    frame_type = type;
++    next = (_Jv_Frame *) thr->frame;
++    thr->frame = (gnu::gcj::RawData *) this;
++    thread = thr;
++  }
++
++  ~_Jv_Frame ()
++  {
++    thread->frame = (gnu::gcj::RawData *) next;
++  }
++
++  int depth ()
++  {
++    int depth = 0;
++    struct _Jv_Frame *f;
++    for (f = this; f != NULL; f = f->next)
++      ++depth;
++
++    return depth;
++  }
++};
++
++// An interpreted frame in the call stack
++class _Jv_InterpFrame : public _Jv_Frame
++{
++public:
++  
++  // Keep the purely interpreted list around so as not to break backtraces
++  _Jv_InterpFrame *next_interp;
++  
+   union
+   {
+     pc_t pc;
+     jclass proxyClass;
+   };
+   
+-  _Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyClass = NULL)
++  // Pointer to the actual pc value.
++  pc_t *pc_ptr;
++
++  //Debug info for local variables.
++  _Jv_word *locals;
++  char *locals_type;
++
++  // Object pointer for this frame ("this")
++  jobject obj_ptr;
++
++  _Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyCls = NULL,
++                   pc_t *pc = NULL)
++  : _Jv_Frame (reinterpret_cast<_Jv_MethodBase *> (meth), thr,
++	             frame_interpreter)
+   {
+-    this->meth = meth;
+-    thread = thr;
+-    next = (_Jv_InterpFrame *) thr->interp_frame;
++    next_interp = (_Jv_InterpFrame *) thr->interp_frame;
++    proxyClass = proxyCls;
+     thr->interp_frame = (gnu::gcj::RawData *) this;
+-    this->proxyClass = proxyClass;
++    obj_ptr = NULL;
++    pc_ptr = pc;
+   }
+ 
+   ~_Jv_InterpFrame ()
+   {
+-    thread->interp_frame = (gnu::gcj::RawData *) next;
++    thread->interp_frame = (gnu::gcj::RawData *) next_interp;
+   }
++
++  jobject get_this_ptr ()
++  {
++    return obj_ptr;
++  }
++  
++  pc_t get_pc ()
++  {
++    pc_t pc;
++    
++    // If the PC_PTR is NULL, we are not debugging.
++    if (pc_ptr == NULL)
++      pc = 0;
++    else
++      pc = *pc_ptr;
++    
++    return pc - 1;
++  }
+ };
+ 
++// A native frame in the call stack really just a placeholder
++class _Jv_NativeFrame : public _Jv_Frame
++{
++public:
++
++  _Jv_NativeFrame (_Jv_JNIMethod *s, java::lang::Thread *thr)
++  : _Jv_Frame (s, thr, frame_native)
++  {
++  }
++};
++
+ #endif /* INTERPRETER */
+ 
+ #endif /* __JAVA_INTERP_H__ */
+Index: libjava/include/jvmti-int.h
+===================================================================
+--- libjava/include/jvmti-int.h	(revision 125219)
++++ libjava/include/jvmti-int.h	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* jvmti-int.h -- Internal JVMTI definitions
+-   Copyright (C) 2006 Free Software Foundation, Inc.
++   Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -37,6 +37,10 @@
+    False means no JVMTI environment requested that event type. */
+ namespace JVMTI
+ {
++  // Is JVMTI enabled? (i.e., any jvmtiEnv created?)
++  extern bool enabled;
++
++  // Event notifications
+   extern bool VMInit;
+   extern bool VMDeath;
+   extern bool ThreadStart;
+@@ -82,4 +86,9 @@
+    For speed, this function should only be called after 
+    JVMTI_REQUESTED_EVENT is checked. */
+ extern void _Jv_JVMTI_PostEvent (jvmtiEvent type, jthread event_thread,				 ...);
++// Returns the jvmtiEnv used by the JDWP backend
++extern jvmtiEnv *_Jv_GetJDWP_JVMTIEnv (void);
++
++// Reports JVMTI excpetions
++extern void _Jv_ReportJVMTIExceptionThrow (jthrowable);
+ #endif /* __GCJ_JVMTI_INT_H__ */
+Index: libjava/include/win32-threads.h
+===================================================================
+--- libjava/include/win32-threads.h	(revision 125219)
++++ libjava/include/win32-threads.h	(revision 126334)
+@@ -227,5 +227,6 @@
+ #undef STRICT
+ #undef VOID
+ #undef TEXT
++#undef OUT
+ 
+ #endif /* __JV_WIN32_THREADS__ */
+Index: libjava/include/no-gc.h
+===================================================================
+--- libjava/include/no-gc.h	(revision 125219)
++++ libjava/include/no-gc.h	(revision 126334)
+@@ -1,7 +1,7 @@
+ // -*- c++ -*-
+ // no-gc.h - Defines for no garbage collector.
+ 
+-/* Copyright (C) 1998, 1999, 2006  Free Software Foundation
++/* Copyright (C) 1998, 1999, 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -18,4 +18,6 @@
+ // Resume a suspended thread.
+ extern "C" void _Jv_ResumeThread (_Jv_Thread_t *);
+ 
++// Is the given thread suspended?
++extern "C" int _Jv_IsThreadSuspended (_Jv_Thread_t *);
+ #endif /* __JV_NO_GC__ */
+Index: libjava/include/boehm-gc.h
+===================================================================
+--- libjava/include/boehm-gc.h	(revision 125219)
++++ libjava/include/boehm-gc.h	(revision 126334)
+@@ -1,7 +1,7 @@
+ // -*- c++ -*-
+ // boehm-gc.h - Defines for Boehm collector.
+ 
+-/* Copyright (C) 1998, 1999, 2002, 2004, 2006  Free Software Foundation
++/* Copyright (C) 1998, 1999, 2002, 2004, 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -93,4 +93,6 @@
+ // Resume a suspended thread.
+ extern "C" void _Jv_ResumeThread (_Jv_Thread_t *);
+ 
++// Is the given thread suspended?
++extern "C" int _Jv_IsThreadSuspended (_Jv_Thread_t *);
+ #endif /* __JV_BOEHM_GC__ */
+Index: libjava/include/java-stack.h
+===================================================================
+--- libjava/include/java-stack.h	(revision 125219)
++++ libjava/include/java-stack.h	(revision 126334)
+@@ -41,13 +41,6 @@
+   }
+ }
+ 
+-enum _Jv_FrameType
+-{
+-  frame_native,
+-  frame_interpreter,
+-  frame_proxy
+-};
+-
+ #ifdef INTERPRETER
+ struct _Jv_InterpFrameInfo
+ {
+Index: libjava/ChangeLog
+===================================================================
+--- libjava/ChangeLog	(revision 125219)
++++ libjava/ChangeLog	(revision 126334)
+@@ -3,6 +3,350 @@
+ 	* java/lang/natClassLoader.cc (_Jv_NewClassFromInitializer): Clear
+ 	INTERPRETED access modifier.
+ 
++2007-05-18  Keith Seitz  <keiths@redhat.com>
++
++	Merged from trunk:
++
++	2007-05-17  Kyle Galloway  <kgallowa@redhat.com>
++	* classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
++	(executeMethods): Remove cast to ClassReferenceTypeId.
++	* classpath/lib/gnu/classpath/jdwp/processor/
++	ReferenceTypeCommandSet.class: Rebuilt.
++
++	2007-05-17  Kyle Galloway  <kgallowa@redhat.com>
++	* gnu/classpath/jdwp/natVMMethod.cc (getModifiers): Check for native
++	classes and mark methods as native appropriately.
++
++	2007-05-17  Kyle Galloway  <kgallowa@redhat.com>
++	* gnu/classpath/jdwp/VMFrame.java (<init>): Add parameter for "this"
++	pointer.
++	* gnu/classpath/jdwp/VMFrame.h: Regenerated.
++	* classpath/lib/gnu/classpath/jdwp/VMFrame.class: Rebuilt.
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc (getFrame): Use new
++	VMFrame constructor.
++
++	2007-05-16  Keith Seitz  <keiths@redhat.com>
++	* include/java-interp.h (breakpoint_at): Declare.
++	* interpret.cc (breakpoint_at): New function.
++	* gnu/classpath/jdwp/VMVirtualMachine.java (_event_list):
++	New member.
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc (initialize):
++	Initialize _event_list.
++	(handle_single_step): If there is a breakpoint at the
++	location at which we are stopping, do not send the notification.
++	Instead add the event to a list of events that occur at this
++	location.
++	(jdwpBreakpointCB): If the event list is not empty, send
++	whatever events are in it and the breakpoint event in a single
++	notification.
++	Mark parameter jni_env as MAYBE_UNUSED.
++	* classpath/lib/gnu/classpath/jdwp/VMVirtualMachine.class:
++	Regenerated.
++	* gnu/classpath/jdwp/VMVirtualMachine.h: Regenerated.
++
++	2007-05-15  Keith Seitz  <keiths@redhat.com>
++	* interpret.cc (STOREA): Rewrite using temporary variable to
++	avoid double-macro expansion side-effects.
++	(STOREI): Likewise.
++	(STOREF): Likewise.
++	(STOREL)[SIZEOF_VOID_P == 8]: Likewise.
++	(STORED)[SIZEOF_VOID_P == 8]: Likewise.
++	(STOREL)[SIZEOF_VOID_P != 8]: Likewise.
++	(STORED)[SIZEOF_VOID_P != 8]: Likewise.
++	(POKEI): Likewise.
++
++	2007-05-07  Keith Seitz  <keiths@redhat.com>
++	* classpath/lib/gnu/classpath/jdwp/Jdwp.class: Regenerate.
++	* classpath/lib/gnu/classpath/jdwp/Jdwp$1.class: Regenerate.
++	* classpath/lib/gnu/classpath/jdwp/event/Event.class:
++	Regenerate.
++	* classpath/lib/gnu/classpath/jdwp/transport/JdwpConnection.class:
++	Regenerate.
++	* gnu/classpath/jdwp/Jdwp.h: Regenerate.
++	* gnu/classpath/jdwp/event/Event.h: Regenerate.
++	* gnu/classpath/jdwp/transport/JdwpConnection.h: Regenerate.
++
++	2007-05-04  Kyle Galloway  <kgallowa@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc (getClassMethod): Change
++	to use JVMTI.
++
++	2007-05-03  Keith Seitz  <keiths@redhat.com>
++	* interpret.cc: Don't include ExceptionEvent.h.
++	* gnu/gcj/jvmti/natExceptionEvent.cc: Remove.
++	* Makefile.am (nat_source_files): Remove natExceptionEvent.cc.
++	* Makefile.in: Regenerated.
++
++	2007-05-03  Keith Seitz  <keiths@redhat.com>
++	* include/jvmti-int.h (_Jv_ReportJVMTIExceptionThrow):
++	Declare.
++	* interpret.cc (_Jv_ReportJVMTIExceptionThrow): New function.
++	(find_catch_location): New function.
++	(REPORT_EXCEPTION): New macro.
++	(throw_internal_error): Use REPORT_EXCEPTION.
++	(throw_incompatible_class_change_error): Likewise.
++	(throw_null_pointer_exception): Likewise.
++	(throw_class_format_error): Likewise.
++	* interpret-run.cc (INTERP_REPORT_EXCEPTION)[DEBUG]: Set
++	to REPORT_EXCEPTION.
++	(INTERP_REPORT_EXCEPTION)[!DEBUG]: Make nop.
++	(insn_new): Use INTERP_REPORT_EXCEPTION.
++	(insn_athrow): Likewise.
++	Remove previous JVMTI exception notifications.
++	Add JVMTI ExceptionCatch notificatin.
++	* jni.cc (_Jv_PopSystemFrame): Notify JVMTI clients of
++	exception throw.
++	* gnu/gcj/jvmti/ExceptionEvent.java: Removed.
++	* gnu/gcj/jvmti/ExceptionEvent.h: Removed. 
++	* classpath/lib/gnu/gcj/jvmti/ExceptionEvent.class: Removed.
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(jdwpExceptionCB): New function.
++	(jdwpVMInitCB): Set Exception event handler and enable.
++	* sources.am: Regenerated.
++	* Makefile.in: Regenerated.
++
++	2007-02-15  Kyle Galloway  <kgallowa@redhat.com>
++	* defineclass.cc (_Jv_ClassReader::read_one_code_attribute):
++	Added LocalVariableTable attribute handling.
++	(_Jv_ClassReader::pool_Utf8_to_char_arr): New method.
++	* jvmti.cc (_Jv_JVMTI_GetLocalVariableTable): New method.
++	* include/java-interp.h: Added local_var_table and 
++	local_var_table_len fields to _Jv_InterpMethod.
++	(_Jv_InterpMethod::get_local_var_table): New method.
++	* testsuite/libjava.jvmti/interp/getlocalvartable.java: New test.
++	* testsuite/libjava.jvmti/interp/getlocalvartable.jar: New test.
++	* testsuite/libjava.jvmti/interp/getlocalvartable.out: Output
++	for new test.
++	* testsuite/libjava.jvmti/interp/getlocalvartable.h: New test.
++	* testsuite/libjava.jvmti/interp/natgetlocalvartable.cc: New test.
++
++	2007-02-15  Kyle Galloway  <kgallowa@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine (getFrames): Implement.
++
++	2007-02-13  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(jdwpBreakpointCB): New function.
++	(jdwpVMInitCB): Define and enable the breakpoint
++	callback.
++
++	2007-02-12  Keith Seitz  <keiths@redhat.com>
++	* jvmti.cc (_Jv_JVMTI_GetStackTrace): Remove cast
++	from jthread to Thread *; it is no longer needed.
++	(_Jv_JVMTI_GetFrameCount): Likewise.
++	Fix small formatting typo.
++
++	2007-02-09  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/VMVirtualMachine.java
++	(_stepping_threads): New member.
++	* classpath/lib/gnu/classpath/jdwp/VMVirtualMachine.class:
++	Regenerated.
++	* gnu/classpath/jdwp/VMVirtualMachine.h:
++	Regenerated.
++	* gnu/claspath/jdwp/natVMVirtualMachine.cc
++	(get_request_step_filter): New function.
++	(DISABLE_EVENT): New macro.
++	(initialize): Initialize _stepping_threads.
++	(registerEvent): Implement EVENT_SINGLE_STEP.
++	(unregisterEvent): Likewise.
++
++	2007-02-08  Keith Seitz  <keiths@redhat.com>
++	* sources.am: Regenerate.
++	* Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++	* gcj/Makefile.in: Regenerate.
++	* include/Makefile.in: Regenerate.
++
++	* classpath/lib/javax/management/MBeanServerFactory.class:
++	Regenerate.
++
++	2007-02-08  Kyle Galloway  <kgallowa@redhat.com>
++	* classpath/gnu/classpath/jdwp/processor/
++	StackFrameCommandSet.java (executeGetValues): Pass jlong instead
++	of ByteBuffer.
++	(executeSetValues): Ditto.
++	(executeThisObject): Ditto.
++	* classpath/gnu/classpath/jdwp/processor/
++	StackFrameCommandSet.class: Rebuilt.
++	* classpath/lib/gnu/classpath/jdwp/VMVirtualMachine.class:
++	Rebuilt.
++	* classpath/lib/gnu/classpath/jdwp/VMFrame.class: Rebuilt.
++	* classpath/lib/gnu/classpath/jdwp/exception/
++	InvalidFrameException.java: New file.
++	* gnu/classpath/jdwp/VMFrame.java: Added field for thread of
++	frame.
++	(Constructor): New method.
++	* gnu/classpath/jdwp/VMFrame.h: Regenerated.
++	* gnu/classpath/jdwp/VMVirtualMachine.java
++	(getFrame): Changed ByteBuffer to jlong.
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(getFrame): Implement.
++	* gnu/classpath/jdwp/VMVirtualMachine.h: Regenerated.
++
++	2007-02-08  Kyle Galloway  <kgallowa@redhat.com>
++	* include/java-interp.h (_Jv_InterpFrame): obj_ptr field added
++	to hold "this" pointer for frame.
++	(_Jv_InterpFrame::get_this_ptr): New method.
++	* interpret-run.cc: Copy the "this" pointer into obj_ptr.
++
++	2007-02-07  Keith Seitz  <keiths@redhat.com>
++	* include/java-interp.h (_Jv_Frame::depth):
++	New function.
++	* jvmti.cc (_Jv_JVMTI_GetFrameCount): Use _Jv_Frame::depth.
++
++	2007-02-07  Kyle Galloway  <kgallowa@redhat.com>
++	* jvmti.cc (CHECK_FOR_NATIVE_METHOD): New macro.
++	(_Jv_JVMTI_GetMaxLocals): New method.
++	* include/java-interp.h
++	(_Jv_InterpMethod::get_max_locals): New method.
++
++	2007-02-05  Keith Seitz  <keiths@redhat.com>
++	* jvmti.cc (_envListLock): Change type to
++	ReentrantReadWriteLock.
++	(_Jv_JVMTI_DisposeEnvironment): Switch to read/write
++	lock.
++	(check_enabled_event): Likewise.
++	(_Jv_GetJVMTIEnv): Likewise.
++	(_Jv_JVMTI_Init): Likewise.
++	(_Jv_JVMTI_PostEvent): Likewise. 
++
++	2007-02-05  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(registerEvent): Implement EVENT_BREAKPOINT.
++	(unregisterEvent): Likewise.
++	(get_request_location): New function.
++
++	2007-02-02  Kyle Galloway  <kgallowa@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc (getFrameCount):
++	Implment.
++
++	2007-01-31  Keith Seitz  <keiths@redhat.com>
++	* include/jvmti-int.h (JVMTI): Declare member "enabled".
++	* jvmti.cc (JVMTI): Add member "enabled".
++	(_Jv_GetJVMTIEnv): Mark JVMTI enabled.
++	* interpret.cc (_Jv_InterpMethod::ncode): Use JVMTI::enabled
++	instead of gnu::classpath::jdwp::Jdwp::isDebugging.
++	(_Jv_CompileMethod): If JVMTI is enabled, use run_debug
++	instead of run to compile the method.
++
++	* interpret-run.cc [DEBUG] (NEXT_INSN): Add JVMTI single step
++	notification.
++
++	2007-01-31  Keith Seitz  <keiths@redhat.com>
++	* testsuite/libjava.jvmti/getmethodname.h: New file.
++	* testsuite/libjava.jvmti/getmethodname.jar: New file.
++
++	2007-01-29  Kyle Galloway  <kgallowa@redhat.com>
++	* include/java-interp.h:  Added _Jv_Frame class and its two
++	subclasses _Jv_InterpFrame and _Jv_NativeFrame.  Also moved
++	_Jv_FrameType from java-stack.h.
++	* include/java-stack.h: Removed _Jv_FrameType.
++	* java/lang/Thread.java: Added frame member to hold new
++	composite frame stack.
++	* java/lang/Thread.h: Regenerated.
++	* java/lang/Thread.class: Rebuilt.
++	* jni.cc (_Jv_JNIMethod::call): Push a frame onto the stack when
++	calling a JNI method.
++	* jvmti.cc (_Jv_JVMTI_GetStackTrace): New Method.
++	(_Jv_JVMTI_GetFrameCount): New method.
++	* stacktrace.cc (UnwindTraceFn): Modified to use new _Jv_Frame
++	classes.
++	* testsuite/libjava.jvmti/interp/getstacktrace.jar: New test.
++	* testsuite/libjava.jvmti/interp/natgetstacktrace.cc: New test.
++	* testsuite/libjava.jvmti/interp/getstacktrace.h: New test.
++	* testsuite/libjava.jvmti/interp/getstacktrace.jar: New test.
++	* testsuite/libjava.jvmti/interp/getstacktrace.out: Output file
++	for test. 
++
++	2007-01-29  Keith Seitz  <keiths@redhat.com>
++	* include/jvmti_md.h (_CLASSPATH_VM_JVMTI_TYPES_DEFINED):
++	Define.
++	[__GCJ_JNI_IMPL__]: Define our own JVMTI types when building
++	gcj. All jvmti object types now are defined to be their
++	corresponding java classes.
++	* jvmti.cc (_Jv_JVMTI_SuspendThread): Remove casting from
++	jthread to Thread*.
++	(_Jv_JVMTI_ResumeThread): Likewise.
++	(_Jv_JVMTI_InterruptThread): Likewise.
++	(_Jv_JVMTI_SetEventNotificationMode): Likewise.
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(jdwpClassPrepareCB): Likewise.
++	(jdwpThreadEndCB): Likewise.
++	(jdwpThreadStartCB): Likewise.
++	(jdwpVMInitCB): Likewise.
++
++	2007-01-27  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(getAllClassMethods): Move error handling to ...
++	(throw_jvmti_error): ... here.
++	(jdwpClassPrepareCB): New function.
++	(jdwpThreadEndCB): New function.
++	(jdwpThreadStartCB): New function.
++	(jdwpVMDeathCB): New function.
++	(jdwpVMInitCB): Define and enable callbacks for
++	ClassPrepare, ThreadEnd, ThreadStart, and VMDeath.
++
++	2007-01-25  Keith Seitz  <keiths@redhat.com>
++	* include/jvmti-int.h (_Jv_GetJDWP_JVMTIEnv): Declare.
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(_Jv_GetJDWP_JVMTIEnv): New function.
++	* gnu/classpath/jdwp/natVMMethod.cc (getName): Implement.
++	(getSignature): Implement.
++	(getModifiers): Implement.
++
++	2007-01-25  Keith Seitz  <keiths@redhat.com>
++	* jvmti.cc (_Jv_JVMTI_GetMethodName): New function.
++	(_Jv_JVMTI_Interface): Define GetMethodName.
++	* testsuite/libjava.jvmti/getmethodname.java: New file.
++	* testsuite/libjava.jvmti/natgetmethodname.cc: New file.
++	* testsuite/libjava.jvmti/getmethodname.out: New file. 
++
++	2007-01-24  Kyle Galloway  <kgallowa@redhat.com>
++	* libjava/testsuite/libjava.jvmti/jvmti-interp.exp: New file.
++	* libjava/testsuite/libjava.jvmti/interp: New folder.
++	* libjava/testsuite/lib/libjava.exp (exec_gij): New Method.
++
++	2007-01-24  Keith Seitz  <keiths@redhat.com>
++	* link.cc (_Jv_Linker::wait_for_state): Add JVMTI
++	CLASS_PREPARE notification.
++
++	2007-01-24  Keith Seitz  <keiths@redhat.com>
++	* interpret.cc: Include gnu/gcj/jvmti/Breakpoint.h,
++	gnu/gcj/jvmti/BreakpointManager.h, jvmti.h, and jvmti-int.h
++	* interpret-run.cc: Implement insn_breakpoint.
++
++	2007-01-24  Keith Seitz  <keiths@redhat.com>
++	* prims.cc (_Jv_RunMain): Send JVMTI event notifications
++	for VM_INIT and VM_DEATH instead of the JDWP notifications.
++
++	2007-01-24  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(getAllClassMethods): Implement.
++
++	2007-01-22  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc
++	(getClassMethod): Implement.
++
++	2007-01-22  Keith  Seitz  <keiths@redhat.com>
++	* java/lang/Class.h (_Jv_GetClassStatus): Declare.
++	* java/lang/natClass.cc (_Jv_GetClassStatus): New function.
++	* jvmti.cc (_Jv_JVMTI_GetClassStatus): New function.
++	(_Jv_JVMTI_Interface): Define GetClassStatus.
++
++	2007-01-19  Keith Seitz  <keiths@redhat.com>
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc: Mark unused parameters
++	in methods and reformat.
++
++	* gnu/classpath/jdwp/natVMFrame.cc: Mark unused parameters with
++	MAYBE_UNUSED.
++
++	2007-01-18  Keith Seitz  <keiths@redhat.com>
++	From Macro Trudel <mtrudel@gmx.ch>:
++	* gnu/classpath/jdwp/natVMVirtualMachine.cc (jdwpVMInitCB):
++	Use JNICALL.
++
++	2007-01-17  Keith Seitz  <keiths@redhat.com>
++	* java/lang/natThread.cc (finish_): Add JVMTI ThreadEnd notification.
++	(_Jv_NotifyThreadStart): Add JVMTI ThreadStart notification.
++
+ 2007-05-03  Thomas Fitzsimmons  <fitzsim@redhat.com>
+ 
+ 	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=237304
+Index: libjava/testsuite/libjava.jvmti/geterrorname.h
+===================================================================
+--- libjava/testsuite/libjava.jvmti/geterrorname.h	(revision 0)
++++ libjava/testsuite/libjava.jvmti/geterrorname.h	(revision 126334)
+@@ -0,0 +1,27 @@
++
++// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
++
++#ifndef __geterrorname__
++#define __geterrorname__
++
++#pragma interface
++
++#include <java/lang/Object.h>
++#include <gcj/array.h>
++
++extern "Java"
++{
++    class geterrorname;
++}
++
++class geterrorname : public ::java::lang::Object
++{
++
++public:
++  geterrorname();
++  static void do_errorname_tests();
++  static void main(JArray< ::java::lang::String * > *);
++  static ::java::lang::Class class$;
++};
++
++#endif // __geterrorname__
+Index: libjava/testsuite/libjava.jvmti/jvmti-interp.exp
+===================================================================
+--- libjava/testsuite/libjava.jvmti/jvmti-interp.exp	(revision 0)
++++ libjava/testsuite/libjava.jvmti/jvmti-interp.exp	(revision 126334)
+@@ -0,0 +1,165 @@
++# Interpreted Tests for JVMTI code.
++# These tests are used to test JVMTI functions in a purley interpreted setting
++# This file compiles the JNI code into a shared object, then invokes gij to run
++# the test.
++
++
++# Compile a single C file and produce a .so file.  OPTIONS is a list
++# of options to pass to the compiler.  Returns 0 on failure, 1 on
++# success.
++proc gcj_jni_compile_c_to_so {file {options {}}} {
++  global srcdir subdir
++  global host_triplet
++  verbose "options: $options"
++  set options_cxx $options
++  set options ""
++
++# Apple uses a different extension for shared/dynamic libraries
++# so we check against powerpc-apple-darwin and set them to
++# dylib.
++# HP-UX uses sl, so we check this too, otherwise we take so.
++
++  if { [istarget "*-*-darwin*"] } {
++      set so_extension "dylib"
++      set so_flag "-dynamiclib"
++  } elseif { [istarget "hppa*-hp-hpux*"] } {
++      set so_extension "sl"
++      set so_flag "-shared"
++  } else {
++      set so_extension "so"
++      set so_flag "-shared"
++  }
++    
++  set filename [file tail $file]
++  set name [file rootname $filename]
++  set soname lib${name}.${so_extension}
++
++  lappend options "additional_flags=${so_flag} -fPIC"
++  # Find the generated header.
++  lappend options "additional_flags=-I. -I.. -I$srcdir/$subdir"
++
++  # Ensure that the generated header has correct prototypes.
++  set cfile [file rootname $file].c
++  if { [file exists $cfile] } {
++      # This option is only valid for C sources.
++      lappend options "additional_flags=-Wmissing-prototypes"
++  }
++
++  # Find jni.h and jni_md.h.
++  lappend options "additional_flags=-I$srcdir/../include  \
++                   -I$srcdir/../classpath/include"
++
++  # Append C++ options
++  lappend options "additional_flags=$options_cxx"
++
++  set x [libjava_prune_warnings \
++	     [target_compile $file $soname executable $options]]
++  if {$x != ""} {
++      verbose "target_compile failed: $x" 2
++      fail "$filename compilation"
++      return 0
++  }
++
++  pass "$filename compilation"
++  return 1
++}
++
++# Do all the work for a single JVMTI test.  Return 0 on failure.
++proc gij_jvmti_test_one {file} {
++  global runtests
++
++  # The base name.  We use it for several purposes.
++  set main [file rootname [file tail $file]]
++  if {! [runtest_file_p $runtests $main] } {
++      # Simply skip it.
++      return 1
++  }
++
++#  if {! [bytecompile_file $file [pwd]] } {
++#     fail "bytecompile $file"
++#     # FIXME - should use `untested' on all remaining tests.
++#     # But that is hard.
++#     return 0
++#   }
++#   pass "bytecompile $file"
++
++#   if {! [gcj_jvmti_build_headers $file] } {
++#     # FIXME
++#     return 0
++#   }
++  
++  set cfile [file join [file dirname $file] nat$main.c]
++  set cxxflags ""
++  set cxxldlibflags {}
++  # If there is no `.c' file, assume there is a `.cc' file.
++  if {! [file exists $cfile] } {
++      set cfile [file join [file dirname $file] nat$main.cc]
++
++      set cxxflaglist {}
++      foreach arg [split [libjava_find_lib libstdc++-v3/src stdc++] " "] {
++          switch -glob -- $arg {
++	          "-L*" {
++	              set arg [string range $arg 2 end]
++	              lappend cxxldlibflags $arg
++	              # Strip the `.libs' directory; we link with libtool which
++	              # doesn't need it.
++	              set arg "-L[file dirname $arg]"
++       	            }
++          }
++      
++          lappend cxxflaglist $arg
++          # In case the libstdc++ is not installed yet, we pass the build
++          # directory of it to the cxxflaglist.
++          lappend cxxflaglist "-L$cxxldlibflags"
++      }
++      # If you're building the compiler with --prefix set to a place
++      # where it's not yet installed, then the linker won't be able to
++      # find the libgcc used by libgcj.dylib/libstdc++.dylib. We could pass
++      # the -dylib_file option, but that's complicated, and it's much easier
++      # to just make the linker find libgcc using -L options.
++      if { [istarget "*-*-darwin*"] } {
++	  lappend cxxflaglist "-shared-libgcc -lstdc++"
++      } else {
++	  lappend cxxflaglist "-lstdc++"
++      }
++      set cxxflags [join $cxxflaglist]
++  }
++
++  if {! [gcj_jni_compile_c_to_so $cfile $cxxflags] } {
++      # FIXME
++      return 0
++  }
++
++  libjava_arguments
++  
++  set jarfile [file join [file dirname $file] $main.jar]
++  if {! [exec_gij $jarfile [file rootname $file].out {}]} {
++      return 0
++  }
++
++  # When we succeed we remove all our clutter.
++  eval gcj_cleanup [glob -nocomplain -- ${main}.*]  \
++                   [list $main.class libnat$main.so]
++
++  return 1
++}
++
++# Run the JVMTI tests.
++proc gij_jvmti_run {} {
++  global srcdir subdir
++  global build_triplet host_triplet
++
++  # For now we only test JVMTI on native builds.
++  if {$build_triplet == $host_triplet} {
++      catch { lsort [glob -nocomplain ${srcdir}/${subdir}/interp/*.jar] \
++             } srcfiles
++
++      foreach x $srcfiles {
++        gij_jvmti_test_one $x
++      }
++  } else {
++      verbose "JVMTI tests not run in cross-compilation environment"
++  }
++}
++
++gij_jvmti_run
+Index: libjava/testsuite/libjava.jvmti/getmethodname.out
+===================================================================
+--- libjava/testsuite/libjava.jvmti/getmethodname.out	(revision 0)
++++ libjava/testsuite/libjava.jvmti/getmethodname.out	(revision 126334)
+@@ -0,0 +1,59 @@
++JVMTI GetMethodName tests
++null jmethodID: invalid method ID
++GetClassMethods: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++GetMethodName - name: none
++GetMethodName - signature: none
++GetMethodName - generic: none
++name=clone, signature=()Ljava.lang.Object;, generic=null
++names match
++signatures match
++generic not yet
++name=equals, signature=(Ljava.lang.Object;)Z, generic=null
++names match
++signatures match
++generic not yet
++name=finalize, signature=()V, generic=null
++names match
++signatures match
++generic not yet
++name=getClass, signature=()Ljava.lang.Class;, generic=null
++names match
++signatures match
++generic not yet
++name=hashCode, signature=()I, generic=null
++names match
++signatures match
++generic not yet
++name=notify, signature=()V, generic=null
++names match
++signatures match
++generic not yet
++name=notifyAll, signature=()V, generic=null
++names match
++signatures match
++generic not yet
++name=toString, signature=()Ljava.lang.String;, generic=null
++names match
++signatures match
++generic not yet
+Index: libjava/testsuite/libjava.jvmti/events.h
+===================================================================
+--- libjava/testsuite/libjava.jvmti/events.h	(revision 0)
++++ libjava/testsuite/libjava.jvmti/events.h	(revision 126334)
+@@ -0,0 +1,27 @@
++
++// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
++
++#ifndef __events__
++#define __events__
++
++#pragma interface
++
++#include <java/lang/Object.h>
++#include <gcj/array.h>
++
++extern "Java"
++{
++    class events;
++}
++
++class events : public ::java::lang::Object
++{
++
++public:
++  events();
++  static void do_events_tests();
++  static void main(JArray< ::java::lang::String * > *);
++  static ::java::lang::Class class$;
++};
++
++#endif // __events__
+Index: libjava/testsuite/libjava.jvmti/natevents.cc
+===================================================================
+--- libjava/testsuite/libjava.jvmti/natevents.cc	(revision 125219)
++++ libjava/testsuite/libjava.jvmti/natevents.cc	(revision 126334)
+@@ -200,7 +200,7 @@
+   printf (" field_klass=%#llx object=%#llx field=%#llx signature_type=%c",
+ 	  (unsigned long long) field_klass, (unsigned long long) object,
+ 	  (unsigned long long) field, signature_type);
+-  printf (" new_value=%#llx\n", new_value.l);
++  printf (" new_value=%#llx\n", (unsigned long long) new_value.l);
+ }
+ 
+ static void
+Index: libjava/testsuite/libjava.jvmti/interp/getlocalvartable.h
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/getlocalvartable.h	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/getlocalvartable.h	(revision 126334)
+@@ -0,0 +1,19 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++
++#ifndef __getlocalvartable__
++#define __getlocalvartable__
++
++#include <jni.h>
++
++#ifdef __cplusplus
++extern "C"
++{
++#endif
++
++JNIEXPORT jint JNICALL Java_getlocalvartable_do_1getlocalvartable_1tests (JNIEnv *env, jclass);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __getlocalvartable__ */
+Index: libjava/testsuite/libjava.jvmti/interp/getlocalvartable.out
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/getlocalvartable.out	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/getlocalvartable.out	(revision 126334)
+@@ -0,0 +1,109 @@
++JVMTI getlocalvartable Interpreted Test
++Slot: 0
++  Name: this
++  Sig: Lgetlocalvartable;
++  Gen Sig: Lgetlocalvartable;
++  Start Loc: 0
++  Length: 28
++Slot: 1
++  Name: pone
++  Sig: F
++  Gen Sig: F
++  Start Loc: 0
++  Length: 28
++Slot: 2
++  Name: ptwo
++  Sig: F
++  Gen Sig: F
++  Start Loc: 0
++  Length: 28
++Slot: 3
++  Name: fone
++  Sig: F
++  Gen Sig: F
++  Start Loc: 2
++  Length: 26
++Slot: 4
++  Name: ftwo
++  Sig: F
++  Gen Sig: F
++  Start Loc: 7
++  Length: 21
++Slot: 5
++  Name: done
++  Sig: D
++  Gen Sig: D
++  Start Loc: 14
++  Length: 14
++Slot: 7
++  Name: dtwo
++  Sig: D
++  Gen Sig: D
++  Start Loc: 22
++  Length: 6
++Slot: 0
++  Name: this
++  Sig: Lgetlocalvartable;
++  Gen Sig: Lgetlocalvartable;
++  Start Loc: 0
++  Length: 25
++Slot: 1
++  Name: ipone
++  Sig: I
++  Gen Sig: I
++  Start Loc: 0
++  Length: 25
++Slot: 2
++  Name: iptwo
++  Sig: I
++  Gen Sig: I
++  Start Loc: 0
++  Length: 25
++Slot: 3
++  Name: ione
++  Sig: I
++  Gen Sig: I
++  Start Loc: 2
++  Length: 23
++Slot: 4
++  Name: itwo
++  Sig: I
++  Gen Sig: I
++  Start Loc: 7
++  Length: 18
++Slot: 5
++  Name: lone
++  Sig: J
++  Gen Sig: J
++  Start Loc: 11
++  Length: 14
++Slot: 7
++  Name: ltwo
++  Sig: J
++  Gen Sig: J
++  Start Loc: 19
++  Length: 6
++Slot: 0
++  Name: this
++  Sig: Lgetlocalvartable;
++  Gen Sig: Lgetlocalvartable;
++  Start Loc: 0
++  Length: 8
++Slot: 1
++  Name: op
++  Sig: Ljava/lang/Object;
++  Gen Sig: Ljava/lang/Object;
++  Start Loc: 0
++  Length: 8
++Slot: 2
++  Name: oone
++  Sig: Ljava/lang/Object;
++  Gen Sig: Ljava/lang/Object;
++  Start Loc: 2
++  Length: 6
++Slot: 3
++  Name: otwo
++  Sig: Ljava/lang/Object;
++  Gen Sig: Ljava/lang/Object;
++  Start Loc: 4
++  Length: 4
+Index: libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc	(revision 126334)
+@@ -0,0 +1,70 @@
++#include <jni.h>
++
++#include <jvmti.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++#include "getlocalvartable.h"
++
++JNIEXPORT jint JNICALL Java_getlocalvartable_do_1getlocalvartable_1tests
++(JNIEnv *env, jclass klass)
++{
++  JavaVM *vm;
++  jint err = env->GetJavaVM (&vm);
++  if (err < 0)
++    {
++      fprintf (stderr, "error getting VM\n");
++      exit (1);
++    }
++
++  jvmtiEnv *jvmti = NULL;
++  vm->GetEnv ((void **) &jvmti, JVMTI_VERSION_1_0);
++
++  if (jvmti == NULL)
++    {
++      fprintf (stderr, "error getting jvmti environment\n");
++      exit (1);
++    }
++  
++  jint entrys;
++  jvmtiLocalVariableEntry *var_table;
++
++  jvmtiError jerr;
++  
++  jmethodID meth_ids[3];
++  
++  meth_ids[0] = env->GetMethodID (klass, "aMethod", "(FF)D");
++  meth_ids[1] = env->GetMethodID (klass, "bMethod", "(II)J");
++  meth_ids[2] = env->GetMethodID (klass, "cMethod", 
++                                  "(Ljava/lang/Object;)Ljava/lang/Object;");
++  for (int i = 0; i < 3; i++)
++    {
++      jerr = jvmti->GetLocalVariableTable (meth_ids[i], &entrys, &var_table);
++      if (jerr != JVMTI_ERROR_NONE)
++        {
++          char *error_name;
++          jvmti->GetErrorName (jerr, &error_name);
++          fprintf (stderr, "JVMTI Error: %s\n", error_name);
++          jvmti->Deallocate (reinterpret_cast<unsigned char *> (error_name));
++        }
++      else
++        {
++          for (int j = 0; j < entrys; j++)
++            {
++              printf ("Slot: %d\n", static_cast<int> (var_table[j].slot));
++              printf ("  Name: %s\n", var_table[j].name);
++              jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table[j].name));
++              printf ("  Sig: %s\n", var_table[j].signature);
++              jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table[j].signature));
++              printf ("  Gen Sig: %s\n", var_table[j].generic_signature);
++              jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table[j].generic_signature));
++              printf ("  Start Loc: %ld\n", static_cast<long> (var_table[j].start_location));
++              printf ("  Length: %d\n", static_cast<int> (var_table[j].length));
++            }
++          
++          jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table));
++        }
++    }
++    
++    return 0;
++}
+Index: libjava/testsuite/libjava.jvmti/interp/getargssize.java
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/getargssize.java	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/getargssize.java	(revision 126334)
+@@ -0,0 +1,36 @@
++public class getargssize
++{
++  static
++    {
++      System.loadLibrary("natgetargssize");
++    }
++
++  public int aMethod (float fone, int ione)
++  {
++    return 0;
++  }
++  
++  public long bMethod (long lone, double done, int ione)
++  {
++    return 0;
++  }
++  
++  public static boolean cMethod ()
++  {
++    return false;
++  }
++  
++  public static Object dMethod (Object op)
++  {
++    return op;
++  }
++
++  public static native int do_getargssize_tests ();
++
++  public static void main (String[] args)
++  {
++    System.out.println ("JVMTI getargssize Interpreted Test");
++
++    do_getargssize_tests ();
++  }
++}
+Index: libjava/testsuite/libjava.jvmti/interp/getlocalvartable.java
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/getlocalvartable.java	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/getlocalvartable.java	(revision 126334)
+@@ -0,0 +1,63 @@
++public class getlocalvartable
++{
++  public boolean done = false;
++
++  // num_frames is the number of frames > the original run () call so if
++  // num_frames = 1, the thread will have 2 frames, the original Thread.run
++  // call, plus one additional
++  public int num_frames, thread_num;
++
++  public static int num_threads = 1;
++
++  static
++    {
++      System.loadLibrary("natgetlocalvartable");
++    }
++
++  public double aMethod (float pone, float ptwo)
++  {
++    float fone, ftwo;
++    double done, dtwo;
++    
++    fone = pone;
++    ftwo = 2 * ptwo;
++    
++    done = 5 * fone;
++    dtwo = 6 * ftwo;
++    
++    return done + dtwo;
++  }
++  
++  public long bMethod (int ipone, int iptwo)
++  {
++    int ione, itwo;
++    long lone, ltwo;
++    
++    ione = ipone;
++    itwo = 5 * iptwo;
++    
++    lone = ione;
++    ltwo = 8 * itwo;
++    
++    return lone + ltwo;
++  }
++  
++  public Object cMethod (Object op)
++  {
++    Object oone, otwo;
++    oone = op;
++    otwo = oone;
++    oone = null;
++    
++    return otwo;
++  }
++
++  public static native int do_getlocalvartable_tests ();
++
++  public static void main (String[] args)
++  {
++    System.out.println ("JVMTI getlocalvartable Interpreted Test");
++
++    do_getlocalvartable_tests ();
++  }
++}
+Index: libjava/testsuite/libjava.jvmti/interp/getargssize.h
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/getargssize.h	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/getargssize.h	(revision 126334)
+@@ -0,0 +1,19 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++
++#ifndef __getargssize__
++#define __getargssize__
++
++#include <jni.h>
++
++#ifdef __cplusplus
++extern "C"
++{
++#endif
++
++JNIEXPORT jint JNICALL Java_getargssize_do_1getargssize_1tests (JNIEnv *env, jclass);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __getargssize__ */
+Index: libjava/testsuite/libjava.jvmti/interp/getargssize.out
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/getargssize.out	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/getargssize.out	(revision 126334)
+@@ -0,0 +1,5 @@
++JVMTI getargssize Interpreted Test
++Method 0 requires 3 slots for its arguments
++Method 1 requires 6 slots for its arguments
++Method 2 requires 0 slots for its arguments
++Method 3 requires 1 slots for its arguments
+Index: libjava/testsuite/libjava.jvmti/interp/natgetargssize.cc
+===================================================================
+--- libjava/testsuite/libjava.jvmti/interp/natgetargssize.cc	(revision 0)
++++ libjava/testsuite/libjava.jvmti/interp/natgetargssize.cc	(revision 126334)
+@@ -0,0 +1,58 @@
++#include <jni.h>
++
++#include <jvmti.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++#include "getargssize.h"
++
++JNIEXPORT jint JNICALL Java_getargssize_do_1getargssize_1tests
++(JNIEnv *env, jclass klass)
++{
++  JavaVM *vm;
++  jint err = env->GetJavaVM (&vm);
++  if (err < 0)
++    {
++      fprintf (stderr, "error getting VM\n");
++      exit (1);
++    }
++
++  jvmtiEnv *jvmti = NULL;
++  vm->GetEnv ((void **) &jvmti, JVMTI_VERSION_1_0);
++
++  if (jvmti == NULL)
++    {
++      fprintf (stderr, "error getting jvmti environment\n");
++      exit (1);
++    }
++  
++  jint args_size;
++
++  jvmtiError jerr;
++  
++  jmethodID meth_ids[4];
++  
++  meth_ids[0] = env->GetMethodID (klass, "aMethod", "(FI)I");
++  meth_ids[1] = env->GetMethodID (klass, "bMethod", "(JDI)J");
++  meth_ids[2] = env->GetStaticMethodID (klass, "cMethod", "()Z");
++  meth_ids[3] = env->GetStaticMethodID (klass, "dMethod", 
++                                     "(Ljava/lang/Object;)Ljava/lang/Object;");
++  for (int i = 0; i < 4; i++)
++    {
++      jerr = jvmti->GetArgumentsSize (meth_ids[i], &args_size);
++      if (jerr != JVMTI_ERROR_NONE)
++        {
++          char *error_name;
++          jvmti->GetErrorName (jerr, &error_name);
++          fprintf (stderr, "JVMTI Error: %s\n", error_name);
++          jvmti->Deallocate (reinterpret_cast<unsigned char *> (error_name));
++        }
++      else
++        {
++          printf ("Method %d requires %d slots for its arguments\n", i,
++                  args_size);
++        }
++    }
++    
++    return 0;
++}
+Index: libjava/testsuite/libjava.jvmti/getmethodname.java
+===================================================================
+--- libjava/testsuite/libjava.jvmti/getmethodname.java	(revision 0)
++++ libjava/testsuite/libjava.jvmti/getmethodname.java	(revision 126334)
+@@ -0,0 +1,10 @@
++public class getmethodname
++{
++  public static native void do_getmethodname_tests ();
++
++  public static void main (String[] args)
++  {
++    System.out.println ("JVMTI GetMethodName tests");
++    do_getmethodname_tests ();
++  }
++}
+Index: libjava/testsuite/libjava.jvmti/getmethodname.h
+===================================================================
+--- libjava/testsuite/libjava.jvmti/getmethodname.h	(revision 0)
++++ libjava/testsuite/libjava.jvmti/getmethodname.h	(revision 126334)
+@@ -0,0 +1,27 @@
++
++// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
++
++#ifndef __getmethodname__
++#define __getmethodname__
++
++#pragma interface
++
++#include <java/lang/Object.h>
++#include <gcj/array.h>
++
++extern "Java"
++{
++    class getmethodname;
++}
++
++class getmethodname : public ::java::lang::Object
++{
++
++public:
++  getmethodname();
++  static void do_getmethodname_tests();
++  static void main(JArray< ::java::lang::String * > *);
++  static ::java::lang::Class class$;
++};
++
++#endif // __getmethodname__
+Index: libjava/testsuite/libjava.jvmti/natgetmethodname.cc
+===================================================================
+--- libjava/testsuite/libjava.jvmti/natgetmethodname.cc	(revision 0)
++++ libjava/testsuite/libjava.jvmti/natgetmethodname.cc	(revision 126334)
+@@ -0,0 +1,116 @@
++#include <gcj/cni.h>
++
++#include <jvm.h>
++#include <jvmti.h>
++#include <stdio.h>
++
++#include <java/lang/Object.h>
++
++#include "getmethodname.h"
++
++static void
++print_error (jvmtiEnv *env, const char *msg,  jvmtiError err)
++{
++  char *error_msg;
++  env->GetErrorName (err, &error_msg);
++  printf ("%s: %s\n", msg, error_msg);
++  env->Deallocate (reinterpret_cast<unsigned char *> (error_msg));
++}
++
++#define NUM_METHODS 8
++static const char *function_names[] = { "clone",
++					"equals",
++					"finalize",
++					"getClass",
++					"hashCode",
++					"notify",
++					"notifyAll",
++					"toString" };
++static int
++function_index (const char *name)
++{
++  for (int i = 0; i < NUM_METHODS; ++i)
++    {
++      if (strcmp (function_names[i], name) == 0)
++	return i;
++    }
++
++  return -1;
++}
++
++void
++getmethodname::do_getmethodname_tests ()
++{
++  jvmtiEnv *env;
++  JavaVM *vm = _Jv_GetJavaVM ();
++  vm->GetEnv (reinterpret_cast<void **> (&env), JVMTI_VERSION_1_0);
++
++  jvmtiError err;
++  err = env->GetMethodName (reinterpret_cast<jmethodID> (NULL),
++			    reinterpret_cast<char **> (NULL),
++			    reinterpret_cast<char **> (NULL),
++			    reinterpret_cast<char **> (NULL));
++  print_error (env, "null jmethodID", err);
++
++  jint count;
++  jmethodID *methods;
++  err = env->GetClassMethods (&java::lang::Object::class$, &count, &methods);
++  print_error (env, "GetClassMethods", err);
++
++  char *names[NUM_METHODS], *solo_names[NUM_METHODS];
++  char *signatures[NUM_METHODS], *solo_signatures[NUM_METHODS];
++  char *generics[NUM_METHODS], *solo_generics[NUM_METHODS];
++
++  for (jint i = 0; i < count; ++i)
++    {
++      char *name, *n;
++      char *signature, *s;
++      char *generic, *g;
++      err = env->GetMethodName (methods[i], &name, &signature, &generic);
++
++      int idx = -1;
++      if (err != JVMTI_ERROR_NONE)
++	{
++	  print_error (env, "GetMethodName - all fields", err);
++	  continue;
++	}
++
++      idx = function_index (name);
++      if (idx == -1)
++	continue;
++
++      names[idx] = name;
++      signatures[idx] = signature;
++      generics[idx] = generic;
++
++      err = env->GetMethodName (methods[i], &n, NULL, NULL);
++      print_error (env, "GetMethodName - name", err);
++      solo_names[idx] = n;
++
++      err = env->GetMethodName (methods[i], NULL, &s, NULL);
++      print_error (env, "GetMethodName - signature", err);
++      solo_signatures[idx] = s;
++
++      err = env->GetMethodName (methods[i], NULL, NULL, &g);
++      print_error (env, "GetMethodName - generic", err);
++      solo_generics[idx] = g;
++    }
++
++#define WRAP(X) ((X) == NULL ? "null" : (X))
++#define MATCH(X,Y) (strcmp ((X),(Y)) == 0 ? "match" : "do not match")
++  for (int i = 0; i < NUM_METHODS; ++i)
++    {
++      printf ("name=%s, signature=%s, generic=%s\n",
++	      WRAP (names[i]), WRAP (signatures[i]), WRAP (generics[i]));
++      printf ("names %s\n", MATCH (solo_names[i], names[i]));
++      printf ("signatures %s\n", MATCH (solo_signatures[i], signatures[i]));
++      printf ("generic %s\n", "not yet");
++
++      env->Deallocate (reinterpret_cast<unsigned char *> (names[i]));
++      env->Deallocate (reinterpret_cast<unsigned char *> (solo_names[i]));
++      env->Deallocate (reinterpret_cast<unsigned char *> (signatures[i]));
++      env->Deallocate (reinterpret_cast<unsigned char *> (solo_signatures[i]));
++      env->Deallocate (reinterpret_cast<unsigned char *> (generics[i]));
++      env->Deallocate (reinterpret_cast<unsigned char *> (solo_generics[i]));
++    }
++}
+Index: libjava/testsuite/libjava.jvmti/getallthreads.h
+===================================================================
+--- libjava/testsuite/libjava.jvmti/getallthreads.h	(revision 0)
++++ libjava/testsuite/libjava.jvmti/getallthreads.h	(revision 126334)
+@@ -0,0 +1,35 @@
++// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
++
++#ifndef __getallthreads__
++#define __getallthreads__
++
++#pragma interface
++
++#include <java/lang/Thread.h>
++#include <gcj/array.h>
++
++extern "Java"
++{
++  class getallthreads;
++}
++
++class getallthreads : public ::java::lang::Thread
++{
++public:
++  getallthreads ();
++  static void do_getallthreads_tests ();
++  virtual void run ();
++  virtual void natPlaceholder ();
++  virtual void natRunner ();
++  virtual void placeholder ();
++  virtual void runner ();
++  static void main (JArray< ::java::lang::String *> *);
++  static jint thread_num;
++  static ::java::util::ArrayList *threads;
++  jint __attribute__((aligned(__alignof__( ::java::lang::Thread ))))  ex_frames;
++  jboolean done;
++
++  static ::java::lang::Class class$;
++};
++
++#endif /* __getallthreads__ */
+Index: libjava/testsuite/lib/libjava.exp
+===================================================================
+--- libjava/testsuite/lib/libjava.exp	(revision 125219)
++++ libjava/testsuite/lib/libjava.exp	(revision 126334)
+@@ -494,6 +494,52 @@
+   }
+ }
+ 
++proc exec_gij {jarfile expectFile ld_library_additions} {
++  global env
++  global libjava_ld_library_path
++  global ld_library_path
++
++  set ld_library_path "$libjava_ld_library_path"
++  if {[llength $ld_library_additions] > 0} {
++  append ld_library_path :[join $ld_library_additions :]
++  }
++	
++  set_ld_library_path_env_vars
++  if [info exists env(LD_LIBRARY_PATH)] {
++    verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
++  }
++  
++  set gij [libjava_find_gij]
++  set classname [file rootname [file tail $jarfile]]
++  
++  puts "LD_LIBRARY_PATH=. $gij -cp $jarfile $classname"
++	
++  set result [libjava_load $gij "-cp $jarfile $classname"]
++  set status [lindex $result 0]
++  set output [lindex $result 1]
++
++  restore_ld_library_path_env_vars
++
++  if {$status != "pass"} {
++    verbose "got $output"
++    fail "$classname run"
++    untested "$classname output"
++    return 0
++  }
++
++  set id [open $expectFile r]
++  set expected [read $id]
++  close $id
++
++  if {! [string compare $output $expected]} {
++    pass "$classname output"
++    return 1
++  } else {
++    fail "$classname output"
++    return 0
++  }
++}
++
+ # Invoke a program and check its output.  EXECUTABLE is the program;
+ # ARGS are the arguments to the program.  Returns 1 if tests passed
+ # (or things were left untested), 0 otherwise.
+Index: libjava/gij.cc
+===================================================================
+--- libjava/gij.cc	(revision 125219)
++++ libjava/gij.cc	(revision 126334)
+@@ -121,11 +121,11 @@
+         continue;
+       else if (! strcmp (arg, "-jrockit"))
+         continue;
+-      // Ignore JVM Tool Interface options
++      // JVM Tool Interface options.
+       else if (! strncmp (arg, "-agentlib:", sizeof ("-agentlib:") - 1))
+-        continue;
++        add_option (vm_args, arg, NULL);
+       else if (! strncmp (arg, "-agentpath:", sizeof ("-agentpath:") - 1))
+-        continue;
++        add_option (vm_args, arg, NULL);
+       else if (! strcmp (arg, "-classpath") || ! strcmp (arg, "-cp"))
+         {
+           if (i >= argc - 1)
+Index: libjava/jni.cc
+===================================================================
+--- libjava/jni.cc	(revision 125219)
++++ libjava/jni.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // jni.cc - JNI implementation, including the jump table.
+ 
+-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+    Free Software Foundation
+ 
+    This file is part of libgcj.
+@@ -23,6 +23,7 @@
+ #include <jvmpi.h>
+ #endif
+ #include <jvmti.h>
++#include "jvmti-int.h"
+ 
+ #include <java/lang/Class.h>
+ #include <java/lang/ClassLoader.h>
+@@ -456,6 +457,8 @@
+     {
+       jthrowable t = env->ex;
+       env->ex = NULL;
++      if (JVMTI_REQUESTED_EVENT (Exception))
++	_Jv_ReportJVMTIExceptionThrow (t);
+       throw t;
+     }
+ }
+Index: libjava/jvmti.cc
+===================================================================
+--- libjava/jvmti.cc	(revision 125219)
++++ libjava/jvmti.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // jvmti.cc - JVMTI implementation
+ 
+-/* Copyright (C) 2006 Free Software Foundation
++/* Copyright (C) 2006, 2007 Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -27,16 +27,18 @@
+ 
+ #include <java/lang/Class.h>
+ #include <java/lang/ClassLoader.h>
+-#include <java/lang/Object.h>
+ #include <java/lang/OutOfMemoryError.h>
+ #include <java/lang/Thread.h>
+ #include <java/lang/ThreadGroup.h>
++#include <java/lang/Thread$State.h>
+ #include <java/lang/Throwable.h>
+ #include <java/lang/VMClassLoader.h>
+ #include <java/lang/reflect/Field.h>
+ #include <java/lang/reflect/Modifier.h>
+ #include <java/util/Collection.h>
+ #include <java/util/HashMap.h>
++#include <java/util/concurrent/locks/Lock.h>
++#include <java/util/concurrent/locks/ReentrantReadWriteLock.h>
+ #include <java/net/URL.h>
+ 
+ static void check_enabled_events (void);
+@@ -44,6 +46,10 @@
+ 
+ namespace JVMTI
+ {
++  // Is JVMTI enabled? (i.e., any jvmtiEnv created?)
++  bool enabled;
++
++  // Event notifications
+   bool VMInit = false;
+   bool VMDeath = false;
+   bool ThreadStart = false;
+@@ -99,7 +105,8 @@
+   struct jvmti_env_list *next;
+ };
+ static struct jvmti_env_list *_jvmtiEnvironments = NULL;
+-static java::lang::Object *_envListLock = NULL;
++static java::util::concurrent::locks::
++ReentrantReadWriteLock *_envListLock = NULL;
+ #define FOREACH_ENVIRONMENT(Ele) \
+   for (Ele = _jvmtiEnvironments; Ele != NULL; Ele = Ele->next)
+ 
+@@ -149,18 +156,28 @@
+     }						\
+   while (0)
+ 
++#define CHECK_FOR_NATIVE_METHOD(AjmethodID)	\
++  do					\
++    {					\
++      jboolean is_native;		\
++      jvmtiError jerr = env->IsMethodNative (AjmethodID, &is_native);	\
++      if (jerr != JVMTI_ERROR_NONE)					\
++        return jerr;							\
++      if (is_native)							\
++        return JVMTI_ERROR_NATIVE_METHOD;			        \
++    }									\
++  while (0)
++
+ static jvmtiError JNICALL
+ _Jv_JVMTI_SuspendThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread)
+ {
+   using namespace java::lang;
+ 
+   THREAD_DEFAULT_TO_CURRENT (thread);
+- 
+-  Thread *t = reinterpret_cast<Thread *> (thread);
+-  THREAD_CHECK_VALID (t);
+-  THREAD_CHECK_IS_ALIVE (t);
++  THREAD_CHECK_VALID (thread);
++  THREAD_CHECK_IS_ALIVE (thread);
+ 
+-  _Jv_Thread_t *data = _Jv_ThreadGetData (t);
++  _Jv_Thread_t *data = _Jv_ThreadGetData (thread);
+   _Jv_SuspendThread (data);
+   return JVMTI_ERROR_NONE;
+ }
+@@ -171,12 +188,10 @@
+   using namespace java::lang;
+ 
+   THREAD_DEFAULT_TO_CURRENT (thread);
++  THREAD_CHECK_VALID (thread);
++  THREAD_CHECK_IS_ALIVE (thread);
+ 
+-  Thread *t = reinterpret_cast<Thread *> (thread);
+-  THREAD_CHECK_VALID (t);
+-  THREAD_CHECK_IS_ALIVE (t);
+-
+-  _Jv_Thread_t *data = _Jv_ThreadGetData (t);
++  _Jv_Thread_t *data = _Jv_ThreadGetData (thread);
+   _Jv_ResumeThread (data);
+   return JVMTI_ERROR_NONE;
+ }
+@@ -191,14 +206,260 @@
+   if (thread == NULL)
+     return JVMTI_ERROR_INVALID_THREAD;
+ 
+-  Thread *real_thread = reinterpret_cast<Thread *> (thread);
+-  THREAD_CHECK_VALID (real_thread);
+-  THREAD_CHECK_IS_ALIVE (real_thread);
+-  real_thread->interrupt();
++  THREAD_CHECK_VALID (thread);
++  THREAD_CHECK_IS_ALIVE (thread);
++  thread->interrupt();
+   return JVMTI_ERROR_NONE;
+ }
+ 
+-jvmtiError
++// This method performs the common tasks to get and set variables of all types.
++// It is called by the _Jv_JVMTI_Get/SetLocalInt/Object/.... methods.
++static jvmtiError
++getLocalFrame (jvmtiEnv *env, jthread thread, jint depth, jint slot, char type,
++               _Jv_InterpFrame **iframe)
++{
++  using namespace java::lang;
++   
++  REQUIRE_PHASE (env, JVMTI_PHASE_LIVE);
++   
++  ILLEGAL_ARGUMENT (depth < 0);
++  
++  THREAD_DEFAULT_TO_CURRENT (thread);
++  THREAD_CHECK_VALID (thread);
++  THREAD_CHECK_IS_ALIVE (thread);
++  
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
++  
++  for (int i = 0; i < depth; i++)
++    {    
++      frame = frame->next;
++    
++      if (frame == NULL)
++        return JVMTI_ERROR_NO_MORE_FRAMES; 
++    }
++  
++  if (frame->frame_type == frame_native)
++    return JVMTI_ERROR_OPAQUE_FRAME;
++  
++  jint max_locals;
++  jvmtiError jerr = env->GetMaxLocals (reinterpret_cast<jmethodID> 
++                                         (frame->self->get_method ()),
++                                       &max_locals);
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr; 
++  
++  _Jv_InterpFrame *tmp_iframe = reinterpret_cast<_Jv_InterpFrame *> (frame);
++  
++  // The second slot taken up by a long type is marked as type 'x' meaning it
++  // is not valid for access since it holds only the 4 low bytes of the value.
++  if (tmp_iframe->locals_type[slot] == 'x')
++    return JVMTI_ERROR_INVALID_SLOT;
++  
++  if (tmp_iframe->locals_type[slot] != type)
++    return JVMTI_ERROR_TYPE_MISMATCH;
++  
++  // Check for invalid slots, if the type is a long type, we must check that
++  // the next slot is valid as well.
++  if (slot < 0 || slot >= max_locals 
++      || ((type == 'l' || type == 'd') && slot + 1 >= max_locals))
++    return JVMTI_ERROR_INVALID_SLOT;
++  
++  *iframe = tmp_iframe;
++  
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetLocalObject (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                          jobject *value)
++{
++  NULL_CHECK (value);
++
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'o', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  *value = frame->locals[slot].o;
++  
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_SetLocalObject (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                          jobject value)
++{
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'o', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  frame->locals[slot].o = value;
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetLocalInt (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                       jint *value)
++{
++  NULL_CHECK (value);
++  
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'i', &frame);
++
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++
++  *value = frame->locals[slot].i;
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_SetLocalInt (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                       jint value)
++{
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'i', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  frame->locals[slot].i = value;
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetLocalLong (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                        jlong *value)
++{
++  NULL_CHECK (value);
++
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'l', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++
++#if SIZEOF_VOID_P==8
++  *value = frame->locals[slot].l;
++#else
++  _Jv_word2 val;
++  val.ia[0] = frame->locals[slot].ia[0];
++  val.ia[1] = frame->locals[slot + 1].ia[0];
++  *value = val.l;
++#endif
++  
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_SetLocalLong (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                        jlong value)
++{
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'l', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++
++#if SIZEOF_VOID_P==8
++  frame->locals[slot].l = value;
++#else
++  _Jv_word2 val;
++	val.l = value;
++	frame->locals[slot].ia[0] = val.ia[0];
++	frame->locals[slot + 1].ia[0] = val.ia[1];
++#endif
++
++  return JVMTI_ERROR_NONE;
++}
++
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetLocalFloat (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                         jfloat *value)
++{
++  NULL_CHECK (value);
++
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'f', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  *value = frame->locals[slot].f;
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_SetLocalFloat (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                         jfloat value)
++{
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'f', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  frame->locals[slot].f = value;
++
++  return JVMTI_ERROR_NONE;
++}
++
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetLocalDouble (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                          jdouble *value)
++{
++  NULL_CHECK (value);
++
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'd', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++#if SIZEOF_VOID_P==8
++  *value = frame->locals[slot].d;
++#else
++  _Jv_word2 val;
++  val.ia[0] = frame->locals[slot].ia[0];
++  val.ia[1] = frame->locals[slot + 1].ia[0];
++  *value = val.d;
++#endif
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_SetLocalDouble (jvmtiEnv *env, jthread thread, jint depth, jint slot,
++                          jdouble value)
++{
++  _Jv_InterpFrame *frame;
++  jvmtiError jerr = getLocalFrame (env, thread, depth, slot, 'd', &frame);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++    
++#if SIZEOF_VOID_P==8
++  frame->locals[slot].d = value;
++#else
++  _Jv_word2 val;
++  val.d = value;
++  frame->locals[slot].ia[0] = val.ia[0];
++  frame->locals[slot + 1].ia[0] = val.ia[1]; 
++#endif
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_GetAllThreads(MAYBE_UNUSED jvmtiEnv *env, jint *thread_cnt,
+                         jthread **threads)
+ {
+@@ -207,7 +468,6 @@
+   NULL_CHECK (threads);
+    
+   using namespace java::lang;
+-  Thread *thr = Thread::currentThread ();
+    
+   ThreadGroup *root_grp = ThreadGroup::root;
+   jint estimate = root_grp->activeCount ();
+@@ -217,10 +477,9 @@
+   // Allocate some extra space since threads can be created between calls
+   try
+     { 
+-      thr_arr
+-			  = reinterpret_cast<JArray<Thread *> *> (JvNewObjectArray 
+-			                                           ((estimate * 2),
+-                                                 &Thread::class$, NULL));
++      thr_arr = reinterpret_cast<JArray<Thread *> *> (JvNewObjectArray 
++						      ((estimate * 2),
++						       &Thread::class$, NULL));
+     }
+   catch (java::lang::OutOfMemoryError *err)
+     {
+@@ -244,6 +503,85 @@
+ }
+ 
+ static jvmtiError JNICALL
++_Jv_JVMTI_GetFrameCount (MAYBE_UNUSED jvmtiEnv *env, jthread thread,
++                         jint *frame_count)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_LIVE);
++  
++  NULL_CHECK (frame_count);
++	
++  using namespace java::lang;
++  
++  THREAD_DEFAULT_TO_CURRENT (thread);
++  THREAD_CHECK_VALID (thread);
++  THREAD_CHECK_IS_ALIVE (thread);
++   
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
++  (*frame_count) = frame->depth ();
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetThreadState (MAYBE_UNUSED jvmtiEnv *env, jthread thread,
++			  jint *thread_state_ptr)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_LIVE);
++
++  THREAD_DEFAULT_TO_CURRENT (thread);
++  THREAD_CHECK_VALID (thread);
++  NULL_CHECK (thread_state_ptr);
++
++  jint state = 0;
++  if (thread->isAlive ())
++    {
++      state |= JVMTI_THREAD_STATE_ALIVE;
++
++      _Jv_Thread_t *data = _Jv_ThreadGetData (thread);
++      if (_Jv_IsThreadSuspended (data))
++	state |= JVMTI_THREAD_STATE_SUSPENDED;
++
++      if (thread->isInterrupted ())
++	state |= JVMTI_THREAD_STATE_INTERRUPTED;
++
++      _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
++      if (frame != NULL && frame->frame_type == frame_native)
++	state |= JVMTI_THREAD_STATE_IN_NATIVE;
++
++      using namespace java::lang;
++      Thread$State *ts = thread->getState ();
++      if (ts == Thread$State::RUNNABLE)
++	state |= JVMTI_THREAD_STATE_RUNNABLE;
++      else if (ts == Thread$State::BLOCKED)
++	state |= JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER;
++      else if (ts == Thread$State::TIMED_WAITING
++	       || ts == Thread$State::WAITING)
++	{
++	  state |= JVMTI_THREAD_STATE_WAITING;
++	  state |= ((ts == Thread$State::WAITING)
++		    ? JVMTI_THREAD_STATE_WAITING_INDEFINITELY
++		    : JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT);
++
++	  /* FIXME: We don't have a way to tell
++	     the caller why the thread is suspended,
++	     i.e., JVMTI_THREAD_STATE_SLEEPING,
++	     JVMTI_THREAD_STATE_PARKED, and
++	     JVMTI_THREAD_STATE_IN_OBJECT_WAIT
++	     are never set. */
++	}
++    }
++  else
++    {
++      using namespace java::lang;
++      Thread$State *ts = thread->getState ();
++      if (ts == Thread$State::TERMINATED)
++	state |= JVMTI_THREAD_STATE_TERMINATED;
++    }
++
++  *thread_state_ptr = state;
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_CreateRawMonitor (MAYBE_UNUSED jvmtiEnv *env, const char *name,
+ 			    jrawMonitorID *result)
+ {
+@@ -422,6 +760,36 @@
+ }
+ 
+ static jvmtiError JNICALL
++_Jv_JVMTI_GetClassStatus (MAYBE_UNUSED jvmtiEnv *env, jclass klass,
++			  jint *status_ptr)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_START | JVMTI_PHASE_LIVE);
++  NULL_CHECK (status_ptr);
++  if (klass == NULL)
++    return JVMTI_ERROR_INVALID_CLASS;
++
++  if (klass->isArray ())
++    *status_ptr = JVMTI_CLASS_STATUS_ARRAY;
++  else if (klass->isPrimitive ())
++    *status_ptr  = JVMTI_CLASS_STATUS_PRIMITIVE;
++  else
++    {
++      jbyte state = _Jv_GetClassState (klass);
++      *status_ptr = 0;
++      if (state >= JV_STATE_LINKED)
++	(*status_ptr) |= JVMTI_CLASS_STATUS_VERIFIED;
++      if (state >= JV_STATE_PREPARED)
++	(*status_ptr) |= JVMTI_CLASS_STATUS_PREPARED;
++      if (state == JV_STATE_ERROR || state == JV_STATE_PHANTOM)
++	(*status_ptr) |= JVMTI_CLASS_STATUS_ERROR;
++      else if (state == JV_STATE_DONE)
++	(*status_ptr) |= JVMTI_CLASS_STATUS_INITIALIZED;
++    }
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_GetClassModifiers (MAYBE_UNUSED jvmtiEnv *env, jclass klass,
+ 			     jint *mods)
+ {
+@@ -540,6 +908,48 @@
+ }
+ 
+ static jvmtiError JNICALL
++_Jv_JVMTI_GetMethodName (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
++			 char **name_ptr, char **signature_ptr,
++			 char **generic_ptr)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_START | JVMTI_PHASE_LIVE);
++
++  if (method == NULL)
++    return JVMTI_ERROR_INVALID_METHODID;
++
++  if (name_ptr != NULL)
++    {
++      int len = static_cast<int> (method->name->len ());
++      *name_ptr = (char *) _Jv_MallocUnchecked (len + 1);
++      if (*name_ptr == NULL)
++	return JVMTI_ERROR_OUT_OF_MEMORY;
++      strncpy (*name_ptr, method->name->chars (), len);
++      (*name_ptr)[len] = '\0';
++    }
++
++  if (signature_ptr != NULL)
++    {
++      int len = static_cast<int> (method->signature->len ());
++      *signature_ptr = (char *) _Jv_MallocUnchecked (len + 1);
++      if (*signature_ptr == NULL)
++	{
++	  if (name_ptr != NULL)
++	    _Jv_Free (*name_ptr);
++	  return JVMTI_ERROR_OUT_OF_MEMORY;
++	}
++      strncpy (*signature_ptr, method->signature->chars (), len);
++      (*signature_ptr)[len] = '\0';
++    }
++
++  if (generic_ptr != NULL)
++    {
++      *generic_ptr = NULL;
++    }
++
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_GetMethodModifiers (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
+ 			      jint *result)
+ {
+@@ -602,6 +1012,88 @@
+ }
+ 
+ static jvmtiError JNICALL
++_Jv_JVMTI_GetLocalVariableTable (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
++                                 jint *num_locals,
++                                 jvmtiLocalVariableEntry **locals)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_LIVE);
++  NULL_CHECK (num_locals);
++  NULL_CHECK (locals);
++  
++  CHECK_FOR_NATIVE_METHOD(method);
++  
++  jclass klass;
++  jvmtiError jerr = env->GetMethodDeclaringClass (method, &klass);
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++
++  _Jv_InterpMethod *imeth = reinterpret_cast<_Jv_InterpMethod *> 
++                              (_Jv_FindInterpreterMethod (klass, method));
++  
++  if (imeth == NULL)
++    return JVMTI_ERROR_INVALID_METHODID;
++  
++  jerr = env->GetMaxLocals (method, num_locals);
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  jerr = env->Allocate (static_cast<jlong> 
++                          ((*num_locals) * sizeof (jvmtiLocalVariableEntry)),
++                        reinterpret_cast<unsigned char **> (locals));
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  //the slot in the methods local_var_table to get
++  int table_slot = 0;
++  char *name;
++  char *sig;
++  char *generic_sig;
++  
++  while (table_slot < *num_locals 
++         && imeth->get_local_var_table (&name, &sig, &generic_sig,
++                                 &((((*locals)[table_slot].start_location))),
++                                 &((*locals)[table_slot].length), 
++                                 &((*locals)[table_slot].slot),
++                                 table_slot) 
++            >= 0)
++    {
++      char **str_ptr = &(*locals)[table_slot].name;
++      jerr = env->Allocate (static_cast<jlong> (strlen (name) + 1),
++                             reinterpret_cast<unsigned char **> (str_ptr));
++      if (jerr != JVMTI_ERROR_NONE)
++        return jerr;
++      strcpy ((*locals)[table_slot].name, name);
++      
++      str_ptr = &(*locals)[table_slot].signature;
++      jerr = env->Allocate (static_cast<jlong> (strlen (sig) + 1),
++                               reinterpret_cast<unsigned char **> (str_ptr));
++      if (jerr != JVMTI_ERROR_NONE)
++        return jerr;
++      strcpy ((*locals)[table_slot].signature, sig);
++      
++      str_ptr = &(*locals)[table_slot].generic_signature;
++      jerr = env->Allocate (static_cast<jlong> (strlen (generic_sig) + 1),
++                               reinterpret_cast<unsigned char **> (str_ptr));
++      if (jerr != JVMTI_ERROR_NONE)
++        return jerr;
++      strcpy ((*locals)[table_slot].generic_signature, generic_sig);
++      
++      table_slot++;
++    }
++
++  if (table_slot == 0)
++    return JVMTI_ERROR_ABSENT_INFORMATION;
++  
++  // If there are double or long variables in the table, the the table will be
++  // smaller than the max number of slots, so correct for this here.
++  if ((table_slot) < *num_locals)
++    *num_locals = table_slot;
++  
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_IsMethodNative (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
+ 			  jboolean *result)
+ {
+@@ -631,6 +1123,75 @@
+ }
+ 
+ static jvmtiError JNICALL
++_Jv_JVMTI_GetMaxLocals (jvmtiEnv *env, jmethodID method, jint *max_locals)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_START | JVMTI_PHASE_LIVE);
++  NULL_CHECK (max_locals);
++  
++  CHECK_FOR_NATIVE_METHOD (method);
++  
++  jclass klass;
++  jvmtiError jerr = env->GetMethodDeclaringClass (method, &klass);
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++
++  _Jv_InterpMethod *imeth = reinterpret_cast<_Jv_InterpMethod *> 
++                              (_Jv_FindInterpreterMethod (klass, method));
++    
++  if (imeth == NULL)
++    return JVMTI_ERROR_INVALID_METHODID;
++  
++  *max_locals = imeth->get_max_locals ();
++  
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
++_Jv_JVMTI_GetArgumentsSize (jvmtiEnv *env, jmethodID method, jint *size)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_START | JVMTI_PHASE_LIVE);
++  NULL_CHECK (size);
++  
++  CHECK_FOR_NATIVE_METHOD (method);
++  
++  jvmtiError jerr;
++  char *sig;
++  jint num_slots = 0;
++  
++  jerr = env->GetMethodName (method, NULL, &sig, NULL);
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  // If the method is non-static add a slot for the "this" pointer.
++  if ((method->accflags & java::lang::reflect::Modifier::STATIC) == 0)
++    num_slots++;
++  
++  for (int i = 0; sig[i] != ')'; i++)
++    {
++      if (sig[i] == 'Z' || sig[i] == 'B' || sig[i] == 'C' || sig[i] == 'S'
++          || sig[i] == 'I' || sig[i] == 'F')
++        num_slots++;
++      else if (sig[i] == 'J' || sig[i] == 'D')
++        {
++          // If this is an array of wide types it uses a single slot
++          if (i > 0 && sig[i - 1] == '[')
++            num_slots++;
++          else
++            num_slots += 2;
++        }
++      else if (sig[i] == 'L')
++        {
++          num_slots++;
++          while (sig[i] != ';')
++            i++;
++        }
++    }
++  
++  *size = num_slots;
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_GetMethodDeclaringClass (MAYBE_UNUSED jvmtiEnv *env,
+ 				   jmethodID method,
+ 				   jclass *declaring_class_ptr)
+@@ -683,6 +1244,80 @@
+ }
+ 
+ static jvmtiError JNICALL
++_Jv_JVMTI_GetStackTrace (MAYBE_UNUSED jvmtiEnv *env, jthread thread,
++                         jint start_depth, jint max_frames,
++                         jvmtiFrameInfo *frames, jint *frame_count)
++{
++  REQUIRE_PHASE (env, JVMTI_PHASE_LIVE);
++
++  ILLEGAL_ARGUMENT (max_frames < 0);
++  
++  NULL_CHECK (frames);
++  NULL_CHECK (frame_count);
++	
++  using namespace java::lang;
++  
++  THREAD_DEFAULT_TO_CURRENT (thread);
++  THREAD_CHECK_VALID (thread);
++  THREAD_CHECK_IS_ALIVE (thread);
++    
++  jvmtiError jerr = env->GetFrameCount (thread, frame_count);
++  if (jerr != JVMTI_ERROR_NONE)
++    return jerr;
++  
++  // start_depth can be either a positive number, indicating the depth of the
++  // stack at which to begin the trace, or a negative number indicating the
++  // number of frames at the bottom of the stack to exclude.  These checks
++  // ensure that it is a valid value in either case
++  
++  ILLEGAL_ARGUMENT (start_depth >= (*frame_count));
++  ILLEGAL_ARGUMENT (start_depth < (-(*frame_count)));
++  
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
++
++  // If start_depth is negative use this to determine at what depth to start
++  // the trace by adding it to the length of the call stack.  This allows the
++  // use of the same frame "discarding" mechanism as for a positive start_depth
++  if (start_depth < 0)
++    start_depth = *frame_count + start_depth;
++  
++  // If start_depth > 0 "remove" start_depth frames from the beginning
++  // of the stack before beginning the trace by moving along the frame list.
++  while (start_depth > 0)
++    {
++      frame = frame->next;
++      start_depth--;
++      (*frame_count)--;
++    }
++  
++  // Now check to see if the array supplied by the agent is large enough to
++  // hold frame_count frames, after adjustment for start_depth.
++  if ((*frame_count) > max_frames)
++    (*frame_count) = max_frames;
++  
++  for (int i = 0; i < (*frame_count); i++)
++    {
++      frames[i].method = frame->self->get_method ();
++      
++      // Set the location in the frame, native frames have location = -1
++      if (frame->frame_type == frame_interpreter)
++        {
++          _Jv_InterpMethod *imeth 
++            = static_cast<_Jv_InterpMethod *> (frame->self);
++          _Jv_InterpFrame *interp_frame 
++            = static_cast<_Jv_InterpFrame *> (frame);
++          frames[i].location = imeth->insn_index (interp_frame->get_pc ());
++        }
++      else
++        frames[i].location = -1;
++        
++      frame = frame->next;
++    }
++    
++  return JVMTI_ERROR_NONE;
++}
++
++static jvmtiError JNICALL
+ _Jv_JVMTI_ForceGarbageCollection (MAYBE_UNUSED jvmtiEnv *env)
+ {
+   REQUIRE_PHASE (env, JVMTI_PHASE_LIVE);
+@@ -723,7 +1358,7 @@
+     return JVMTI_ERROR_INVALID_ENVIRONMENT;
+   else
+     {
+-      JvSynchronize dummy (_envListLock);
++      _envListLock->writeLock ()->lock ();
+       if (_jvmtiEnvironments->env == env)
+ 	{
+ 	  struct jvmti_env_list *next = _jvmtiEnvironments->next;
+@@ -736,12 +1371,16 @@
+ 	  while (e->next != NULL && e->next->env != env)
+ 	    e = e->next;
+ 	  if (e->next == NULL)
+-	    return JVMTI_ERROR_INVALID_ENVIRONMENT;
++	    {
++	      _envListLock->writeLock ()->unlock ();
++	      return JVMTI_ERROR_INVALID_ENVIRONMENT;
++	    }
+ 
+ 	  struct jvmti_env_list *next = e->next->next;
+ 	  _Jv_Free (e->next);
+ 	  e->next = next;
+ 	}
++      _envListLock->writeLock ()->unlock ();
+     }
+ 
+   _Jv_Free (env);
+@@ -1042,18 +1681,24 @@
+ 
+   int index = EVENT_INDEX (type); // safe since caller checks this
+ 
+-  JvSynchronize dummy (_envListLock);
+-  struct jvmti_env_list *e;
+-  FOREACH_ENVIRONMENT (e)
++  if (_jvmtiEnvironments != NULL)
+     {
+-      char *addr
+-	= reinterpret_cast<char *> (&e->env->callbacks) + offset;
+-      void **callback = reinterpret_cast<void **> (addr);
+-      if (e->env->enabled[index] && *callback != NULL)
++      _envListLock->readLock ()->lock ();
++      struct jvmti_env_list *e;
++      FOREACH_ENVIRONMENT (e)
+ 	{
+-	  *enabled = true;
+-	  return;
++	  char *addr
++	    = reinterpret_cast<char *> (&e->env->callbacks) + offset;
++	  void **callback = reinterpret_cast<void **> (addr);
++	  if (e->env->enabled[index] && *callback != NULL)
++	    {
++	      *enabled = true;
++	      _envListLock->readLock ()->unlock ();
++	      return;
++	    }
+ 	}
++
++      _envListLock->readLock ()->unlock ();
+     }
+ 
+   *enabled = false;
+@@ -1102,10 +1747,8 @@
+ 
+   if (event_thread != NULL)
+     {
+-      using namespace java::lang;
+-      Thread *t = reinterpret_cast<Thread *> (event_thread);
+-      THREAD_CHECK_VALID (t);
+-      THREAD_CHECK_IS_ALIVE (t);
++      THREAD_CHECK_VALID (event_thread);
++      THREAD_CHECK_IS_ALIVE (event_thread);
+     }
+ 
+   bool enabled;
+@@ -1421,21 +2064,21 @@
+   UNIMPLEMENTED,		// GetTopThreadGroups
+   UNIMPLEMENTED,		// GetThreadGroupInfo
+   UNIMPLEMENTED,		// GetThreadGroupChildren
+-  UNIMPLEMENTED,		// GetFrameCount
+-  UNIMPLEMENTED,		// GetThreadState
++  _Jv_JVMTI_GetFrameCount,		// GetFrameCount
++  _Jv_JVMTI_GetThreadState,	// GetThreadState
+   RESERVED,			// reserved18
+   UNIMPLEMENTED,		// GetFrameLocation
+   UNIMPLEMENTED,		// NotifyPopFrame
+-  UNIMPLEMENTED,		// GetLocalObject
+-  UNIMPLEMENTED,		// GetLocalInt
+-  UNIMPLEMENTED,		// GetLocalLong
+-  UNIMPLEMENTED,		// GetLocalFloat
+-  UNIMPLEMENTED,		// GetLocalDouble
+-  UNIMPLEMENTED,		// SetLocalObject
+-  UNIMPLEMENTED,		// SetLocalInt
+-  UNIMPLEMENTED,		// SetLocalLong
+-  UNIMPLEMENTED,		// SetLocalFloat
+-  UNIMPLEMENTED,		// SetLocalDouble
++  _Jv_JVMTI_GetLocalObject,		// GetLocalObject
++  _Jv_JVMTI_GetLocalInt,		// GetLocalInt
++  _Jv_JVMTI_GetLocalLong,		// GetLocalLong
++  _Jv_JVMTI_GetLocalFloat,		// GetLocalFloat
++  _Jv_JVMTI_GetLocalDouble,		// GetLocalDouble
++  _Jv_JVMTI_SetLocalObject,		// SetLocalObject
++  _Jv_JVMTI_SetLocalInt,		// SetLocalInt
++  _Jv_JVMTI_SetLocalLong,		// SetLocalLong
++  _Jv_JVMTI_SetLocalFloat,		// SetLocalFloat
++  _Jv_JVMTI_SetLocalDouble,		// SetLocalDouble
+   _Jv_JVMTI_CreateRawMonitor,	// CreateRawMonitor
+   _Jv_JVMTI_DestroyRawMonitor,	// DestroyRawMonitor
+   _Jv_JVMTI_RawMonitorEnter,	// RawMonitorEnter
+@@ -1454,7 +2097,7 @@
+   _Jv_JVMTI_Allocate,		// Allocate
+   _Jv_JVMTI_Deallocate,		// Deallocate
+   UNIMPLEMENTED,		// GetClassSignature
+-  UNIMPLEMENTED,		// GetClassStatus
++  _Jv_JVMTI_GetClassStatus,	// GetClassStatus
+   UNIMPLEMENTED,		// GetSourceFileName
+   _Jv_JVMTI_GetClassModifiers,	// GetClassModifiers
+   _Jv_JVMTI_GetClassMethods,	// GetClassMethods
+@@ -1469,15 +2112,15 @@
+   UNIMPLEMENTED,		// GetFieldDeclaringClass
+   _Jv_JVMTI_GetFieldModifiers,	// GetFieldModifiers
+   _Jv_JVMTI_IsFieldSynthetic,	// IsFieldSynthetic
+-  UNIMPLEMENTED,		// GetMethodName
++  _Jv_JVMTI_GetMethodName,	// GetMethodName
+   _Jv_JVMTI_GetMethodDeclaringClass,  // GetMethodDeclaringClass
+   _Jv_JVMTI_GetMethodModifiers,	// GetMethodModifers
+   RESERVED,			// reserved67
+-  UNIMPLEMENTED,		// GetMaxLocals
+-  UNIMPLEMENTED,		// GetArgumentsSize
++  _Jv_JVMTI_GetMaxLocals,		// GetMaxLocals
++  _Jv_JVMTI_GetArgumentsSize,		// GetArgumentsSize
+   _Jv_JVMTI_GetLineNumberTable,	// GetLineNumberTable
+   UNIMPLEMENTED,		// GetMethodLocation
+-  UNIMPLEMENTED,		// GetLocalVariableTable
++  _Jv_JVMTI_GetLocalVariableTable,		// GetLocalVariableTable
+   RESERVED,			// reserved73
+   RESERVED,			// reserved74
+   UNIMPLEMENTED,		// GetBytecodes
+@@ -1509,7 +2152,7 @@
+   UNIMPLEMENTED,		// GetThreadListStackTraces
+   UNIMPLEMENTED,		// GetThreadLocalStorage
+   UNIMPLEMENTED,		// SetThreadLocalStorage
+-  UNIMPLEMENTED,		// GetStackTrace
++  _Jv_JVMTI_GetStackTrace,		// GetStackTrace
+   RESERVED,			// reserved105
+   UNIMPLEMENTED,		// GetTag
+   UNIMPLEMENTED,		// SetTag
+@@ -1568,25 +2211,27 @@
+   _Jv_JVMTIEnv *env
+     = (_Jv_JVMTIEnv *) _Jv_MallocUnchecked (sizeof (_Jv_JVMTIEnv));
+   env->p = &_Jv_JVMTI_Interface;
++  struct jvmti_env_list *element
++    = (struct jvmti_env_list *) _Jv_MallocUnchecked (sizeof (struct jvmti_env_list));
++  element->env = env;
++  element->next = NULL;
+ 
+-  {
+-    JvSynchronize dummy (_envListLock);
+-    struct jvmti_env_list *element
+-      = (struct jvmti_env_list *) _Jv_MallocUnchecked (sizeof (struct jvmti_env_list));
+-    element->env = env;
+-    element->next = NULL;
++  _envListLock->writeLock ()->lock ();
++  if (_jvmtiEnvironments == NULL)
++    _jvmtiEnvironments = element;
++  else
++    {
++      struct jvmti_env_list *e;
++      for (e = _jvmtiEnvironments; e->next != NULL; e = e->next)
++	;
++      e->next = element;
++    }
++  _envListLock->writeLock ()->unlock ();
+ 
+-    if (_jvmtiEnvironments == NULL)
+-      _jvmtiEnvironments = element;
+-    else
+-      {
+-	struct jvmti_env_list *e;
+-	for (e = _jvmtiEnvironments; e->next != NULL; e = e->next)
+-	  ;
+-	e->next = element;
+-      }
+-  }
+-
++  /* Mark JVMTI active. This is used to force the interpreter
++     to use either debugging or non-debugging code. Once JVMTI
++     has been enabled, the non-debug interpreter cannot be used. */
++  JVMTI::enabled = true;
+   return env;
+ }
+ 
+@@ -1594,7 +2239,8 @@
+ _Jv_JVMTI_Init ()
+ {
+   _jvmtiEnvironments = NULL;
+-  _envListLock = new java::lang::Object ();
++  _envListLock
++    = new java::util::concurrent::locks::ReentrantReadWriteLock ();
+ 
+   // No environments, so this should set all JVMTI:: members to false
+   check_enabled_events ();
+@@ -1958,7 +2604,7 @@
+   va_list args;
+   va_start (args, event_thread);
+ 
+-  JvSynchronize dummy (_envListLock);
++  _envListLock->readLock ()->lock ();
+   struct jvmti_env_list *e;
+   FOREACH_ENVIRONMENT (e)
+     {
+@@ -1974,6 +2620,6 @@
+ 	  post_event (e->env, type, event_thread, args);
+ 	}
+     }
+-
++  _envListLock->readLock ()->unlock ();
+   va_end (args);
+ }
+Index: libjava/prims.cc
+===================================================================
+--- libjava/prims.cc	(revision 125219)
++++ libjava/prims.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // prims.cc - Code for core of runtime environment.
+ 
+-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006  Free Software Foundation
++/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -32,6 +32,9 @@
+ #include <java/lang/ThreadGroup.h>
+ #endif
+ 
++#include <jvmti.h>
++#include "jvmti-int.h"
++
+ #ifndef DISABLE_GETENV_PROPERTIES
+ #include <ctype.h>
+ #include <java-props.h>
+@@ -66,8 +69,6 @@
+ #include <execution.h>
+ #include <gnu/classpath/jdwp/Jdwp.h>
+ #include <gnu/classpath/jdwp/VMVirtualMachine.h>
+-#include <gnu/classpath/jdwp/event/VmDeathEvent.h>
+-#include <gnu/classpath/jdwp/event/VmInitEvent.h>
+ #include <gnu/java/lang/MainThread.h>
+ 
+ #ifdef USE_LTDL
+@@ -107,6 +108,16 @@
+ static char defaultJdwpOptions[] = "";
+ static char *jdwpOptions = defaultJdwpOptions;
+ 
++// Typedefs for JVMTI agent functions.
++typedef jint jvmti_agent_onload_func (JavaVM *vm, char *options,
++                                      void *reserved);
++typedef jint jvmti_agent_onunload_func (JavaVM *vm);
++
++// JVMTI agent function pointers.
++static jvmti_agent_onload_func *jvmti_agentonload = NULL;
++static jvmti_agent_onunload_func *jvmti_agentonunload = NULL;
++static char *jvmti_agent_opts;
++
+ // Argument support.
+ int
+ _Jv_GetNbArgs (void)
+@@ -1357,7 +1368,63 @@
+   return 0;
+ }
+ 
++// This function loads the agent functions for JVMTI from the library indicated
++// by name.  It returns a negative value on failure, the value of which
++// indicates where ltdl failed, it also prints an error message.
+ static jint
++load_jvmti_agent (const char *name)
++{
++#ifdef USE_LTDL
++  if (lt_dlinit ())
++    {
++      fprintf (stderr, 
++              "libgcj: Error in ltdl init while loading agent library.\n");
++      return -1;
++    }
++ 
++  lt_dlhandle lib = lt_dlopenext (name);
++  if (!lib)
++    {
++      fprintf (stderr, 
++               "libgcj: Error opening agent library.\n");
++      return -2;
++    }
++
++  if (lib)
++    {
++      jvmti_agentonload 
++        = (jvmti_agent_onload_func *) lt_dlsym (lib, "Agent_OnLoad");
++ 
++      if (!jvmti_agentonload)
++        {
++          fprintf (stderr, 
++                   "libgcj: Error finding agent function in library %s.\n",
++                   name);
++          lt_dlclose (lib);
++          lib = NULL;
++          return -4;
++        }
++      else
++        {
++          jvmti_agentonunload
++            = (jvmti_agent_onunload_func *) lt_dlsym (lib, "Agent_OnUnload");
++	   
++          return 0;
++        }
++    }
++  else
++    {
++      fprintf (stderr, "libgcj: Library %s not found in library path.\n", name);
++      return -3;
++    }
++
++#endif /* USE_LTDL */
++
++  // If LTDL cannot be used, return an error code indicating this.
++  return -99;
++}
++
++static jint
+ parse_init_args (JvVMInitArgs* vm_args)
+ {
+   // if _Jv_Compiler_Properties is non-NULL then it needs to be
+@@ -1409,6 +1476,95 @@
+ 
+ 	  continue;
+ 	}
++      else if (! strncmp (option_string, "-agentlib", sizeof ("-agentlib") - 1))
++	{
++          char *strPtr;
++	                                              
++          if (strlen(option_string) > (sizeof ("-agentlib:") - 1))
++            strPtr = &option_string[sizeof ("-agentlib:") - 1];
++          else
++            {
++              fprintf (stderr,
++                "libgcj: Malformed agentlib argument %s: expected lib name\n",
++                option_string);
++              return -1;
++            }
++
++          // These are optional arguments to pass to the agent library.
++          jvmti_agent_opts = strchr (strPtr, '=');
++   
++          if (! strncmp (strPtr, "jdwp", 4))
++            {    	
++              // We want to run JDWP here so set the correct variables.
++              remoteDebug = true;
++              jdwpOptions = ++jvmti_agent_opts;
++            }
++          else
++            {
++              jint nameLength;
++   
++              if (jvmti_agent_opts == NULL)
++                nameLength = strlen (strPtr);
++              else
++                {
++                  nameLength = jvmti_agent_opts - strPtr;
++                  jvmti_agent_opts++;
++                }
++               
++              char lib_name[nameLength + 3 + 1];
++              strcpy (lib_name, "lib");
++              strncat (lib_name, strPtr, nameLength);
++      
++              jint result = load_jvmti_agent (lib_name);
++      
++              if (result < 0)
++	        {
++	          return -1;
++	        }
++            }
++    
++          continue;
++	}
++      else if (! strncmp (option_string, "-agentpath:", 
++                          sizeof ("-agentpath:") - 1))
++	{
++          char *strPtr;
++	                                              
++          if (strlen(option_string) > 10)
++            strPtr = &option_string[10];
++          else
++            {
++              fprintf (stderr,
++                "libgcj: Malformed agentlib argument %s: expected lib path\n",
++                option_string);
++              return -1;
++            }
++		
++          // These are optional arguments to pass to the agent library.
++          jvmti_agent_opts = strchr (strPtr, '=');
++    
++          jint nameLength;
++   
++          if (jvmti_agent_opts == NULL)
++            nameLength = strlen (strPtr);
++          else
++            {
++              nameLength = jvmti_agent_opts - strPtr;
++              jvmti_agent_opts++;
++            }
++    
++          char lib_name[nameLength + 3 + 1];
++          strcpy (lib_name, "lib");
++          strncat (lib_name, strPtr, nameLength);
++          jint result = load_jvmti_agent (strPtr);
++
++          if (result < 0)
++            {
++              return -1;
++            }
++	
++          continue;
++	}
+       else if (vm_args->ignoreUnrecognized)
+         {
+           if (option_string[0] == '_')
+@@ -1569,6 +1725,10 @@
+ 	main_thread = new MainThread (JvNewStringUTF (name),
+ 				      arg_vec, is_jar);
+       _Jv_AttachCurrentThread (main_thread);
++      
++      // Start JVMTI if an agent function has been found.
++      if (jvmti_agentonload)
++        (*jvmti_agentonload) (_Jv_GetJavaVM (), jvmti_agent_opts, NULL);
+ 
+       // Start JDWP
+       if (remoteDebug)
+@@ -1583,11 +1743,9 @@
+ 	  // Wait for JDWP to initialize and start
+ 	  jdwp->join ();
+ 	}
+-
+-      // Send VmInit
+-      gnu::classpath::jdwp::event::VmInitEvent *event;
+-      event = new gnu::classpath::jdwp::event::VmInitEvent (main_thread);
+-      gnu::classpath::jdwp::Jdwp::notify (event);
++      // Send VMInit
++      if (JVMTI_REQUESTED_EVENT (VMInit))
++	_Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_INIT, main_thread);
+     }
+   catch (java::lang::Throwable *t)
+     {
+@@ -1602,13 +1760,17 @@
+ 
+   _Jv_ThreadRun (main_thread);
+ 
+-  // Notify debugger of VM's death
+-  if (gnu::classpath::jdwp::Jdwp::isDebugging)
++  // Send VMDeath
++  if (JVMTI_REQUESTED_EVENT (VMDeath))
+     {
+-      using namespace gnu::classpath::jdwp;
+-      event::VmDeathEvent *event = new event::VmDeathEvent ();
+-      Jdwp::notify (event);
++      java::lang::Thread *thread = java::lang::Thread::currentThread ();
++      JNIEnv *jni_env = _Jv_GetCurrentJNIEnv ();
++      _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_DEATH, thread, jni_env);
+     }
++    
++   // Run JVMTI AgentOnUnload if it exists and an agent is loaded.
++  if (jvmti_agentonunload)
++    (*jvmti_agentonunload) (_Jv_GetJavaVM ());
+ 
+   // If we got here then something went wrong, as MainThread is not
+   // supposed to terminate.
+Index: libjava/link.cc
+===================================================================
+--- libjava/link.cc	(revision 125219)
++++ libjava/link.cc	(revision 126334)
+@@ -33,6 +33,8 @@
+ #include <limits.h>
+ #include <java-cpool.h>
+ #include <execution.h>
++#include <jvmti.h>
++#include "jvmti-int.h"
+ #include <java/lang/Class.h>
+ #include <java/lang/String.h>
+ #include <java/lang/StringBuffer.h>
+@@ -1982,33 +1984,35 @@
+   if (klass->state >= state)
+     return;
+ 
+-  JvSynchronize sync (klass);
+-
+-  // This is similar to the strategy for class initialization.  If we
+-  // already hold the lock, just leave.
+   java::lang::Thread *self = java::lang::Thread::currentThread();
+-  while (klass->state <= state
+-	 && klass->thread 
+-	 && klass->thread != self)
+-    klass->wait ();
+ 
+-  java::lang::Thread *save = klass->thread;
+-  klass->thread = self;
++  {
++    JvSynchronize sync (klass);
+ 
+-  // Allocate memory for static fields and constants.
+-  if (GC_base (klass) && klass->fields && ! GC_base (klass->fields))
+-    {
+-      jsize count = klass->field_count;
+-      if (count)
+-	{
+-	  _Jv_Field* fields 
+-	    = (_Jv_Field*) _Jv_AllocRawObj (count * sizeof (_Jv_Field));
+-	  memcpy ((void*)fields,
+-		  (void*)klass->fields,
+-		  count * sizeof (_Jv_Field));
+-	  klass->fields = fields;
+-	}
+-    }
++    // This is similar to the strategy for class initialization.  If we
++    // already hold the lock, just leave.
++    while (klass->state <= state
++	   && klass->thread 
++	   && klass->thread != self)
++      klass->wait ();
++
++    java::lang::Thread *save = klass->thread;
++    klass->thread = self;
++
++    // Allocate memory for static fields and constants.
++    if (GC_base (klass) && klass->fields && ! GC_base (klass->fields))
++      {
++	jsize count = klass->field_count;
++	if (count)
++	  {
++	    _Jv_Field* fields 
++	      = (_Jv_Field*) _Jv_AllocRawObj (count * sizeof (_Jv_Field));
++	    memcpy ((void*)fields,
++		    (void*)klass->fields,
++		    count * sizeof (_Jv_Field));
++	    klass->fields = fields;
++	  }
++      }
+       
+   // Print some debugging info if requested.  Interpreted classes are
+   // handled in defineclass, so we only need to handle the two
+@@ -2022,49 +2026,59 @@
+       ++gcj::loadedClasses;
+     }
+ 
+-  try
+-    {
+-      if (state >= JV_STATE_LOADING && klass->state < JV_STATE_LOADING)
+-	{
+-	  ensure_supers_installed (klass);
+-	  klass->set_state(JV_STATE_LOADING);
+-	}
++    try
++      {
++	if (state >= JV_STATE_LOADING && klass->state < JV_STATE_LOADING)
++	  {
++	    ensure_supers_installed (klass);
++	    klass->set_state(JV_STATE_LOADING);
++	  }
+ 
+-      if (state >= JV_STATE_LOADED && klass->state < JV_STATE_LOADED)
+-	{
+-	  ensure_method_table_complete (klass);
+-	  klass->set_state(JV_STATE_LOADED);
+-	}
++	if (state >= JV_STATE_LOADED && klass->state < JV_STATE_LOADED)
++	  {
++	    ensure_method_table_complete (klass);
++	    klass->set_state(JV_STATE_LOADED);
++	  }
+ 
+-      if (state >= JV_STATE_PREPARED && klass->state < JV_STATE_PREPARED)
+-	{
+-	  ensure_fields_laid_out (klass);
+-	  make_vtable (klass);
+-	  layout_interface_methods (klass);
+-	  prepare_constant_time_tables (klass);
+-	  klass->set_state(JV_STATE_PREPARED);
+-	}
++	if (state >= JV_STATE_PREPARED && klass->state < JV_STATE_PREPARED)
++	  {
++	    ensure_fields_laid_out (klass);
++	    make_vtable (klass);
++	    layout_interface_methods (klass);
++	    prepare_constant_time_tables (klass);
++	    klass->set_state(JV_STATE_PREPARED);
++	  }
+ 
+-      if (state >= JV_STATE_LINKED && klass->state < JV_STATE_LINKED)
+-	{
+-	  if (gcj::verifyClasses)
+-	    verify_class (klass);
++	if (state >= JV_STATE_LINKED && klass->state < JV_STATE_LINKED)
++	  {
++	    if (gcj::verifyClasses)
++	      verify_class (klass);
+ 
+-	  ensure_class_linked (klass);
+-	  link_exception_table (klass);
+-	  link_symbol_table (klass);
+-	  klass->set_state(JV_STATE_LINKED);
+-	}
+-    }
+-  catch (java::lang::Throwable *exc)
++	    ensure_class_linked (klass);
++	    link_exception_table (klass);
++	    link_symbol_table (klass);
++	    klass->set_state(JV_STATE_LINKED);
++	  }
++      }
++    catch (java::lang::Throwable *exc)
++      {
++	klass->thread = save;
++	klass->set_state(JV_STATE_ERROR);
++	throw exc;
++      }
++
++    klass->thread = save;
++
++    if (klass->state == JV_STATE_ERROR)
++      throw new java::lang::LinkageError;
++  }
++
++  if (__builtin_expect (klass->state == JV_STATE_LINKED, false)
++      && state >= JV_STATE_LINKED
++      && JVMTI_REQUESTED_EVENT (ClassPrepare))
+     {
+-      klass->thread = save;
+-      klass->set_state(JV_STATE_ERROR);
+-      throw exc;
++      JNIEnv *jni_env = _Jv_GetCurrentJNIEnv ();
++      _Jv_JVMTI_PostEvent (JVMTI_EVENT_CLASS_PREPARE, self, jni_env,
++			   klass);
+     }
+-
+-  klass->thread = save;
+-
+-  if (klass->state == JV_STATE_ERROR)
+-    throw new java::lang::LinkageError;
+ }
+Index: libjava/gnu/classpath/jdwp/VMMethod.java
+===================================================================
+--- libjava/gnu/classpath/jdwp/VMMethod.java	(revision 125219)
++++ libjava/gnu/classpath/jdwp/VMMethod.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* VMMethod.java -- a method in a virtual machine
+-   Copyright (C) 2006 Free Software Foundation, Inc.
++   Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -175,4 +175,15 @@
+   {
+     return VMVirtualMachine.getClassMethod(klass, bb.getLong());
+   }
++
++  public boolean equals(Object obj)
++  {
++    if (obj instanceof VMMethod)
++      {
++	VMMethod m = (VMMethod) obj;
++	return (getId() == m.getId());
++      }
++
++    return false;
++  }
+ }
+Index: libjava/gnu/classpath/jdwp/natVMFrame.cc
+===================================================================
+--- libjava/gnu/classpath/jdwp/natVMFrame.cc	(revision 125219)
++++ libjava/gnu/classpath/jdwp/natVMFrame.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // natFrame.cc -- native support for VMFrame.java
+ 
+-/* Copyright (C) 2006 Free Software Foundation
++/* Copyright (C) 2006, 2007 Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -8,19 +8,331 @@
+ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+ details. */
+ 
++#include <config.h>
+ #include <gcj/cni.h>
++#include <jvm.h>
++#include <jvmti.h>
++#include "jvmti-int.h"
+ 
++#include <java-interp.h>
++
+ #include <gnu/classpath/jdwp/VMFrame.h>
++#include <gnu/classpath/jdwp/VMVirtualMachine.h>
++#include <gnu/classpath/jdwp/exception/InvalidFrameException.h>
++#include <gnu/classpath/jdwp/exception/InvalidSlotException.h>
++#include <gnu/classpath/jdwp/exception/InvalidThreadException.h>
++#include <gnu/classpath/jdwp/exception/JdwpInternalErrorException.h>
++#include <gnu/classpath/jdwp/exception/TypeMismatchException.h>
++#include <gnu/classpath/jdwp/util/NullObject.h>
++#include <gnu/classpath/jdwp/value/ArrayValue.h>
++#include <gnu/classpath/jdwp/value/ByteValue.h>
++#include <gnu/classpath/jdwp/value/BooleanValue.h>
++#include <gnu/classpath/jdwp/value/CharValue.h>
++#include <gnu/classpath/jdwp/value/DoubleValue.h>
++#include <gnu/classpath/jdwp/value/FloatValue.h>
++#include <gnu/classpath/jdwp/value/IntValue.h>
++#include <gnu/classpath/jdwp/value/LongValue.h>
++#include <gnu/classpath/jdwp/value/ObjectValue.h>
++#include <gnu/classpath/jdwp/value/ShortValue.h>
++#include <gnu/classpath/jdwp/value/Value.h>
++#include <gnu/classpath/jdwp/value/VoidValue.h>
+ 
+ using namespace java::lang;
++using namespace gnu::classpath::jdwp;
++using namespace gnu::classpath::jdwp::exception;
+ 
+-Object*
+-gnu::classpath::jdwp::VMFrame::getValue (jint slot)
++
++// All the jvmti GetLocalXX and SetLocalXX functions return the same potential
++// errors, so this function handles them all and throws the appropriate JDWP
++// exception.
++static void
++checkJVMTIError (jvmtiEnv *env, jthread thread, jvmtiError jerr, jint slot,
++                 jbyte sig)
+ {
+-  return 0;
++  if (jerr != JVMTI_ERROR_NONE)
++    {
++      char *error;
++      env->GetErrorName (jerr, &error);
++      String *msg = reinterpret_cast<String *> (JvNewStringUTF (error));
++      env->Deallocate ((unsigned char *) error);
++      
++      if (jerr == JVMTI_ERROR_INVALID_THREAD)
++        throw new InvalidThreadException ((jlong) thread);
++      else if (jerr == JVMTI_ERROR_NO_MORE_FRAMES)
++        throw new InvalidFrameException (msg);
++      else if (jerr == JVMTI_ERROR_INVALID_SLOT)
++        throw new InvalidSlotException (slot);
++      else if (jerr == JVMTI_ERROR_TYPE_MISMATCH)
++        throw new TypeMismatchException (sig);
++      else
++        throw new JdwpInternalErrorException (msg);
++    }
+ }
+ 
+-void
+-gnu::classpath::jdwp::VMFrame::setValue (jint slot, Object* value)
++
++static jobject
++getObjectJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig)
+ {
++  jobject value;
++  jvmtiError jerr = env->GetLocalObject (thread, depth, slot, &value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++  
++  return value;
+ }
++
++static void
++setObjectJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth,
++                jbyte sig, jobject value)
++{
++  if (value->getClass ()->isAssignableFrom (&util::NullObject::class$))
++    value = NULL;
++	
++  jvmtiError jerr = env->SetLocalObject (thread, depth, slot, value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++}
++
++static jint
++getIntJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig)
++{
++  jint value;
++  jvmtiError jerr = env->GetLocalInt (thread, depth, slot, &value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++  return value;
++}
++
++static void
++setIntJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig,
++             jint value)
++{
++  jvmtiError jerr = env->SetLocalInt (thread, depth, slot, value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++}
++
++static jlong
++getLongJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig)
++{
++  jlong value;
++  jvmtiError jerr = env->GetLocalLong (thread, depth, slot, &value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++  
++  return value;
++}
++
++static void
++setLongJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig,
++              jlong value)
++{
++  jvmtiError jerr = env->SetLocalLong (thread, depth, slot, value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++}
++
++static jfloat
++getFloatJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig)
++{
++  jfloat value;
++  jvmtiError jerr = env->GetLocalFloat (thread, depth, slot, &value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++  
++  return value;
++}
++
++static void
++setFloatJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, jbyte sig,
++               jfloat value)
++{
++  jvmtiError jerr = env->SetLocalFloat (thread, depth, slot, value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++}
++
++static jdouble
++getDoubleJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth,
++                jbyte sig)
++{
++  jdouble value;
++  jvmtiError jerr = env->GetLocalDouble (thread, depth, slot, &value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++  
++  return value;
++}
++
++static void
++setDoubleJVMTI (jvmtiEnv *env, jthread thread, jint slot, jint depth, 
++                jbyte sig, jdouble value)
++{
++  jvmtiError jerr = env->SetLocalDouble (thread, depth, slot, value);
++  
++  checkJVMTIError (env, thread, jerr, slot, sig);
++}
++
++// This is necessary since JVMTI requires a stack depth as a parameter in all
++// its local variable functions.  Since JDWP needs frameids, we have to run
++// through the call stack to translate these ids into the parameters JVMTI
++// wants.
++static jint
++getFrameDepth (_Jv_Frame *frame)
++{
++  jint depth = 0;
++  _Jv_Frame *top_frame = (_Jv_Frame *) frame->thread->frame;
++  jint num_frames = VMVirtualMachine::getFrameCount (frame->thread);
++  
++  while (frame != top_frame)
++    {
++      top_frame = top_frame->next;
++      depth++;
++      
++      if (depth >= num_frames || top_frame == NULL)
++        throw new InvalidFrameException ((jlong) frame);
++    }
++  
++  return depth;
++}
++
++using namespace gnu::classpath::jdwp::value;
++
++Value *
++gnu::classpath::jdwp::VMFrame::getValue (jint slot, jbyte sig)
++{
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (id);
++  jint depth = getFrameDepth (frame);
++  jthread thread = reinterpret_cast<jthread> (frame->thread);
++  jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
++  
++  Value *value = NULL;
++
++  switch (sig)
++    {
++    case 'B':
++      value = new ByteValue ((jbyte) getIntJVMTI (env, thread, slot, depth, 
++                                                  sig));
++      break;
++    case 'Z':
++      value = new BooleanValue ((jboolean) getIntJVMTI (env, thread, slot,
++                                                        depth, sig));
++      break;
++    case 'C':
++      value = new CharValue ((jchar) getIntJVMTI (env, thread, slot, depth,
++                                                  sig));
++      break;
++    case 'S':
++      value = new ShortValue ((jshort) getIntJVMTI (env, thread, slot, depth,
++                                                    sig));
++      break;
++    case 'I':
++      value = new IntValue (getIntJVMTI (env, thread, slot, depth, sig));
++      break;
++    case 'J':
++      value = new LongValue (getLongJVMTI (env, thread, slot, depth, sig));
++      break;
++    case 'F':
++      value = new FloatValue (getFloatJVMTI (env, thread, slot, depth, sig));
++      break;
++    case 'D':
++      value = new DoubleValue (getDoubleJVMTI (env, thread, slot, depth, sig));
++      break;
++    case 'V':
++      value = new VoidValue ();
++      break;
++    case '[':
++      {
++        Object *obj = getObjectJVMTI (env, thread, slot, depth, sig);
++        if (obj == NULL)
++          obj = new util::NullObject ();
++        value = new ArrayValue (obj);
++        break;
++      }
++    default:
++      Object *obj = getObjectJVMTI (env, thread, slot, depth, sig);
++      if (obj == NULL)
++        obj = new util::NullObject ();
++      value = new ObjectValue (obj);
++      break;
++    }
++  
++  return value;
++}
++
++void
++gnu::classpath::jdwp::VMFrame::setValue (jint slot, Value* value)
++{	
++  jbyte sig = value->getTag ();
++  
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (id);
++  jint depth = getFrameDepth (frame);
++  jthread thread = reinterpret_cast<jthread> (frame->thread);
++  jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
++  
++  switch (sig)
++    {
++    case 'B':
++      {
++        ByteValue *val = reinterpret_cast<ByteValue *> (value);
++        setIntJVMTI (env, thread, slot, depth, sig, (jint) val->getValue ());
++        break;
++      }
++    case 'Z':
++      {
++        BooleanValue *val = reinterpret_cast<BooleanValue *> (value);
++        setIntJVMTI (env, thread, slot, depth, sig, (jint) val->getValue ());
++        break;
++      }
++    case 'C':
++      {
++        CharValue *val = reinterpret_cast<CharValue *> (value);
++        setIntJVMTI (env, thread, slot, depth, sig, (jint) val->getValue ());
++        break;
++      }
++    case 'S':
++      {
++        ShortValue *val = reinterpret_cast<ShortValue *> (value);
++        setIntJVMTI (env, thread, slot, depth, sig, (jint) val->getValue ());
++        break;
++      }
++    case 'I':
++      {
++        IntValue *val = reinterpret_cast<IntValue *> (value);
++        setIntJVMTI (env, thread, slot, depth, sig, val->getValue ());
++        break;
++      }
++    case 'J':
++      {
++        LongValue *val = reinterpret_cast<LongValue *> (value);
++        setLongJVMTI (env, thread, slot, depth, sig, val->getValue ());
++        break;
++      }
++    case 'F':
++      {
++        FloatValue *val = reinterpret_cast<FloatValue *> (value);
++        setFloatJVMTI (env, thread, slot, depth, sig, val->getValue ());
++        break;
++      }
++    case 'D':
++      {
++        DoubleValue *val = reinterpret_cast<DoubleValue *> (value);
++        setDoubleJVMTI (env, thread, slot, depth, sig, val->getValue ());
++        break;
++      }
++    case 'V':
++      break;
++    case '[':
++      {
++        ArrayValue *val = reinterpret_cast<ArrayValue *> (value);
++        setObjectJVMTI (env, thread, slot, depth, sig, val->getObject ());
++        break;
++      }
++    default:
++      {
++        ObjectValue *val = reinterpret_cast<ObjectValue *> (value);
++        setObjectJVMTI (env, thread, slot, depth, sig, val->getObject());
++        break;
++      }
++    }
++}
+Index: libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
+===================================================================
+--- libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc	(revision 125219)
++++ libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc	(revision 126334)
+@@ -10,6 +10,8 @@
+ 
+ #include <config.h>
+ #include <gcj/cni.h>
++#include <java-assert.h>
++#include <java-interp.h>
+ #include <jvm.h>
+ #include <jvmti.h>
+ 
+@@ -19,40 +21,111 @@
+ #include <java/lang/String.h>
+ #include <java/lang/StringBuilder.h>
+ #include <java/lang/Thread.h>
++#include <java/lang/Throwable.h>
+ #include <java/nio/ByteBuffer.h>
++#include <java/nio/ByteBufferImpl.h>
+ #include <java/util/ArrayList.h>
++#include <java/util/Collection.h>
+ #include <java/util/Hashtable.h>
+ #include <java/util/Iterator.h>
+ 
+ #include <gnu/classpath/jdwp/Jdwp.h>
++#include <gnu/classpath/jdwp/JdwpConstants$StepDepth.h>
++#include <gnu/classpath/jdwp/JdwpConstants$StepSize.h>
++#include <gnu/classpath/jdwp/JdwpConstants$ThreadStatus.h>
+ #include <gnu/classpath/jdwp/VMFrame.h>
+ #include <gnu/classpath/jdwp/VMMethod.h>
+ #include <gnu/classpath/jdwp/VMVirtualMachine.h>
++#include <gnu/classpath/jdwp/event/BreakpointEvent.h>
++#include <gnu/classpath/jdwp/event/ClassPrepareEvent.h>
++#include <gnu/classpath/jdwp/event/ExceptionEvent.h>
++#include <gnu/classpath/jdwp/event/EventManager.h>
+ #include <gnu/classpath/jdwp/event/EventRequest.h>
++#include <gnu/classpath/jdwp/event/SingleStepEvent.h>
++#include <gnu/classpath/jdwp/event/ThreadEndEvent.h>
++#include <gnu/classpath/jdwp/event/ThreadStartEvent.h>
++#include <gnu/classpath/jdwp/event/VmDeathEvent.h>
+ #include <gnu/classpath/jdwp/event/VmInitEvent.h>
++#include <gnu/classpath/jdwp/event/filters/IEventFilter.h>
++#include <gnu/classpath/jdwp/event/filters/LocationOnlyFilter.h>
++#include <gnu/classpath/jdwp/event/filters/StepFilter.h>
++#include <gnu/classpath/jdwp/exception/AbsentInformationException.h>
++#include <gnu/classpath/jdwp/exception/InvalidFrameException.h>
++#include <gnu/classpath/jdwp/exception/InvalidLocationException.h>
++#include <gnu/classpath/jdwp/exception/InvalidMethodException.h>
+ #include <gnu/classpath/jdwp/exception/JdwpInternalErrorException.h>
++#include <gnu/classpath/jdwp/id/ThreadId.h>
++#include <gnu/classpath/jdwp/util/Location.h>
+ #include <gnu/classpath/jdwp/util/MethodResult.h>
++#include <gnu/gcj/jvmti/Breakpoint.h>
++#include <gnu/gcj/jvmti/BreakpointManager.h>
+ 
+ using namespace java::lang;
+ using namespace gnu::classpath::jdwp::event;
+ using namespace gnu::classpath::jdwp::util;
+ 
++// Stepping information
++struct step_info
++{
++  jint size;   // See gnu.classpath.jdwp.JdwpConstants.StepSize
++  jint depth;  // See gnu.classpath.jdwp.JdwpConstants.StepDepth
++  int stack_depth;  // stack depth at start of stepping
++  jmethodID method; // method in which we are stepping
++};
++
+ // Forward declarations
+-static void jdwpVMInitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread);
++static jvmtiError get_linetable (jvmtiEnv *, jmethodID, jint *,
++				 jvmtiLineNumberEntry **);
++static Location *get_request_location (EventRequest *);
++static gnu::classpath::jdwp::event::filters::StepFilter *
++get_request_step_filter (EventRequest *);
++static void handle_single_step (jvmtiEnv *, struct step_info *, jthread,
++				jmethodID, jlocation);
++static void JNICALL jdwpBreakpointCB (jvmtiEnv *, JNIEnv *, jthread,
++				      jmethodID, jlocation);
++static void JNICALL jdwpClassPrepareCB (jvmtiEnv *, JNIEnv *, jthread, jclass);
++static void JNICALL jdwpExceptionCB (jvmtiEnv *, JNIEnv *jni_env, jthread,
++				     jmethodID, jlocation, jobject,
++				     jmethodID, jlocation);
++static void JNICALL jdwpSingleStepCB (jvmtiEnv *, JNIEnv *, jthread,
++				      jmethodID, jlocation);
++static void JNICALL jdwpThreadEndCB (jvmtiEnv *, JNIEnv *, jthread);
++static void JNICALL jdwpThreadStartCB (jvmtiEnv *, JNIEnv *, jthread);
++static void JNICALL jdwpVMDeathCB (jvmtiEnv *, JNIEnv *);
++static void JNICALL jdwpVMInitCB (jvmtiEnv *, JNIEnv *, jthread);
++static void throw_jvmti_error (jvmtiError);
+ 
+ #define DEFINE_CALLBACK(Cb,Event) Cb.Event = jdwp ## Event ## CB
++#define DISABLE_EVENT(Event,Thread)					\
++  _jdwp_jvmtiEnv->SetEventNotificationMode (JVMTI_DISABLE,		\
++					    JVMTI_EVENT_ ## Event, Thread)
+ #define ENABLE_EVENT(Event,Thread)					\
+   _jdwp_jvmtiEnv->SetEventNotificationMode (JVMTI_ENABLE,		\
+ 					    JVMTI_EVENT_ ## Event, Thread)
+ // JVMTI environment
+ static jvmtiEnv *_jdwp_jvmtiEnv;
+ 
++jvmtiEnv *
++_Jv_GetJDWP_JVMTIEnv (void)
++{
++  return _jdwp_jvmtiEnv;
++}
++
+ void
+ gnu::classpath::jdwp::VMVirtualMachine::initialize ()
+ {
+   _jdwp_suspend_counts = new ::java::util::Hashtable ();
++  _stepping_threads = new ::java::util::Hashtable ();
++  _event_list = new ::java::util::ArrayList ();
++
+   JavaVM *vm = _Jv_GetJavaVM ();
+-  vm->GetEnv (reinterpret_cast<void **> (&_jdwp_jvmtiEnv), JVMTI_VERSION_1_0);
++  union
++  {
++    void *ptr;
++    jvmtiEnv *env;
++  } foo;
++  vm->GetEnv (&(foo.ptr), JVMTI_VERSION_1_0);
++  _jdwp_jvmtiEnv = foo.env;
+ 
+   // Wait for VM_INIT to do more initialization
+   jvmtiEventCallbacks callbacks;
+@@ -62,7 +135,7 @@
+ }
+ 
+ void
+-gnu::classpath::jdwp::VMVirtualMachine ::suspendThread (Thread *thread)
++gnu::classpath::jdwp::VMVirtualMachine::suspendThread (Thread *thread)
+ {
+   jint value;
+   Integer *count;
+@@ -170,9 +243,57 @@
+   switch (request->getEventKind ())
+     {
+     case EventRequest::EVENT_SINGLE_STEP:
++      {
++	Thread *thread;
++	filters::StepFilter *filter = get_request_step_filter (request);
++	if (filter == NULL)
++	  {
++	    // No filter specified: report every step in every
++	    // thread.
++	    thread = NULL;
++	  }
++	else
++	  {
++	    // Add stepping information to list of stepping threads
++	    thread = filter->getThread ()->getThread ();
++	    _Jv_InterpFrame *frame
++	      = reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);
++	    struct step_info *sinfo
++	      = (struct step_info *) JvAllocBytes (sizeof (struct step_info));
++	    sinfo->size = filter->getSize ();
++	    sinfo->depth = filter->getDepth ();
++	    sinfo->stack_depth = frame->depth ();
++	    sinfo->method = frame->self->get_method ();
++	    _stepping_threads->put (thread, (jobject) sinfo);
++	  }
++
++	ENABLE_EVENT (SINGLE_STEP, thread);
++      }
+       break;
+ 
+     case EventRequest::EVENT_BREAKPOINT:
++      {
++	using namespace ::gnu::gcj::jvmti;
++	Location *loc = get_request_location (request);
++	if (loc == NULL)
++	  {
++	    using namespace gnu::classpath::jdwp::exception;
++	    throw new InvalidLocationException ();
++	  }
++
++	jlong method = loc->getMethod ()->getId ();
++	jlocation index = loc->getIndex ();
++	Breakpoint  *bp = BreakpointManager::getBreakpoint (method, index);
++	if (bp == NULL)
++	  {
++	    // Breakpoint not in interpreter yet
++	    bp = BreakpointManager::newBreakpoint (method, index);
++	  }
++	else
++	  {
++	    // Ignore the duplicate
++	  }
++      }
+       break;
+ 
+     case EventRequest::EVENT_FRAME_POP:
+@@ -213,7 +334,7 @@
+ 
+     case EventRequest::EVENT_VM_INIT:
+       break;
+-      
++
+     case EventRequest::EVENT_VM_DEATH:
+       break;
+     }
+@@ -225,9 +346,62 @@
+   switch (request->getEventKind ())
+     {
+     case EventRequest::EVENT_SINGLE_STEP:
++      {
++	Thread *thread;
++	filters::StepFilter *filter = get_request_step_filter (request);
++	if (filter == NULL)
++	  thread = NULL;
++	else
++	  {
++	    thread = filter->getThread ()->getThread ();
++	    _stepping_threads->remove (thread);
++	  }
++
++	DISABLE_EVENT (SINGLE_STEP, thread);
++      }
+       break;
+ 
+     case EventRequest::EVENT_BREAKPOINT:
++      {
++	using namespace gnu::gcj::jvmti;
++	::java::util::Collection *breakpoints;
++	EventManager *em = EventManager::getDefault ();
++	breakpoints = em->getRequests (EventRequest::EVENT_BREAKPOINT);
++
++	// Check for duplicates
++	int matches = 0;
++	Location *the_location = get_request_location (request);
++
++	// This should not be possible: we REQUIRE a Location
++	// to install a breakpoint
++	JvAssert (the_location != NULL);
++
++	::java::util::Iterator *iter = breakpoints->iterator ();
++	while (iter->hasNext ())
++	  {
++	    EventRequest *er
++	      = reinterpret_cast<EventRequest *> (iter->next ());
++	    Location *loc = get_request_location (er);
++	    JvAssert (loc != NULL);
++	    if (loc->equals (the_location) && ++matches == 2)
++	      {
++		// Short-circuit: already more than one breakpoint
++		return;
++	      }
++	  }
++
++	if (matches == 0)
++	  {
++	    using namespace gnu::classpath::jdwp::exception;
++	    jstring msg
++	      = JvNewStringLatin1 ("attempt to remove unknown breakpoint");
++	    throw new JdwpInternalErrorException (msg);
++	  }
++
++	jlong methodId = the_location->getMethod ()->getId ();
++	BreakpointManager::deleteBreakpoint (methodId,
++					     the_location->getIndex ());
++      }
+       break;
+ 
+     case EventRequest::EVENT_FRAME_POP:
+@@ -244,7 +418,7 @@
+ 
+     case EventRequest::EVENT_THREAD_END:
+       break;
+-	
++
+     case EventRequest::EVENT_CLASS_PREPARE:
+       break;
+ 
+@@ -268,103 +442,718 @@
+ 
+     case EventRequest::EVENT_VM_INIT:
+       break;
+-      
++
+     case EventRequest::EVENT_VM_DEATH:
+       break;
+     }
+ }
+ 
+ void
+-gnu::classpath::jdwp::VMVirtualMachine::clearEvents (jbyte kind)
++gnu::classpath::jdwp::VMVirtualMachine::clearEvents (MAYBE_UNUSED jbyte kind)
+ {
+ }
+ 
+-jint
+-gnu::classpath::jdwp::VMVirtualMachine::getAllLoadedClassesCount (void)
+-{
+-  return 0;
+-}
+-
+-java::util::Iterator *
++java::util::Collection *
+ gnu::classpath::jdwp::VMVirtualMachine::getAllLoadedClasses (void)
+ {
+-  return NULL;
++  using namespace ::java::util;
++  return (Collection *) new ArrayList ();
+ }
+ 
+ jint
+-gnu::classpath::jdwp::VMVirtualMachine::getClassStatus (jclass klass)
++gnu::classpath::jdwp::VMVirtualMachine::
++getClassStatus (jclass klass)
+ {
+-  return 0;
++  jint flags = 0;
++  jvmtiError err = _jdwp_jvmtiEnv->GetClassStatus (klass, &flags);
++  if (err != JVMTI_ERROR_NONE)
++    throw_jvmti_error (err);
++
++  using namespace gnu::classpath::jdwp::event;
++  jint status = 0;
++  if (flags & JVMTI_CLASS_STATUS_VERIFIED)
++    status |= ClassPrepareEvent::STATUS_VERIFIED;
++  if (flags & JVMTI_CLASS_STATUS_PREPARED)
++    status |= ClassPrepareEvent::STATUS_PREPARED;
++  if (flags & JVMTI_CLASS_STATUS_ERROR)
++    status |= ClassPrepareEvent::STATUS_ERROR;
++  if (flags & JVMTI_CLASS_STATUS_INITIALIZED)
++    status |= ClassPrepareEvent::STATUS_INITIALIZED;
++
++  return status;
+ }
+ 
+ JArray<gnu::classpath::jdwp::VMMethod *> *
+-gnu::classpath::jdwp::VMVirtualMachine::getAllClassMethods (jclass klass)
++gnu::classpath::jdwp::VMVirtualMachine::
++getAllClassMethods (jclass klass)
+ {
+-  return NULL;
++  jint count;
++  jmethodID *methods;
++  jvmtiError err = _jdwp_jvmtiEnv->GetClassMethods (klass, &count, &methods);
++  if (err != JVMTI_ERROR_NONE)
++    throw_jvmti_error (err);
++
++  JArray<VMMethod *> *result
++    = (JArray<VMMethod *> *) JvNewObjectArray (count,
++					       &VMMethod::class$, NULL);
++  VMMethod **rmeth = elements (result);
++  for (int i = 0; i < count; ++i)
++    {
++      jlong id = reinterpret_cast<jlong> (methods[i]);
++      rmeth[i] = getClassMethod (klass, id);
++    }
++
++  _jdwp_jvmtiEnv->Deallocate ((unsigned char *) methods);
++  return result;
+ }
+ 
+ gnu::classpath::jdwp::VMMethod *
+-gnu::classpath::jdwp::VMVirtualMachine::getClassMethod (jclass klass, jlong id)
++gnu::classpath::jdwp::VMVirtualMachine::
++getClassMethod (jclass klass, jlong id)
+ {
+-  return NULL;
++  jint count;
++  jmethodID *methods;
++  jvmtiError err = _jdwp_jvmtiEnv->GetClassMethods (klass, &count, &methods);
++  if (err != JVMTI_ERROR_NONE)
++    throw_jvmti_error (err);
++
++  jmethodID meth_id = reinterpret_cast<jmethodID> (id);
++
++  using namespace gnu::classpath::jdwp;
++
++  // Check if this method is defined for the given class and if so return a
++  // VMMethod representing it.
++  for (int i = 0; i < count; i++)
++    {
++      if (methods[i] == meth_id)
++        return new VMMethod (klass, reinterpret_cast<jlong> (meth_id));
++    }
++
++  throw new exception::InvalidMethodException (id);
+ }
+ 
+ java::util::ArrayList *
+-gnu::classpath::jdwp::VMVirtualMachine::getFrames (Thread *thread,
+-						   jint start,
+-						   jint length)
++gnu::classpath::jdwp::VMVirtualMachine::getFrames (Thread *thread, jint start,
++                                                   jint length)
+ {
+-  return NULL;
++  jint frame_count = getFrameCount (thread);
++  ::java::util::ArrayList *frame_list;
++  
++  // Calculate the max number of frames to be returned.
++  jint num_frames = frame_count - start;
++  
++  // Check if num_frames is valid.
++  if (num_frames < 0)
++    num_frames = 0;
++  
++  // Check if there are more than length frames left after start.
++  // If length ios -1 return all remaining frames.
++  if (length != -1 && num_frames > length)
++    num_frames = length;
++     
++  frame_list = new ::java::util::ArrayList (num_frames);
++  
++  _Jv_Frame *vm_frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
++  
++  // Take start frames off the top of the stack
++  while (vm_frame != NULL && start > 0)
++    {
++      start--;
++      vm_frame = vm_frame->next;
++    }
++  
++  // Use as a counter for the number of frames returned.
++  num_frames = 0;
++  
++  while (vm_frame != NULL && (num_frames < length || length == -1))
++    {  
++      jlong frameId = reinterpret_cast<jlong> (vm_frame);
++      
++      VMFrame *frame = getFrame (thread, frameId);
++      frame_list->add (frame);
++      vm_frame = vm_frame->next;
++      num_frames++;
++    }
++  
++  return frame_list;
+ }
+ 
+ gnu::classpath::jdwp::VMFrame *
+-gnu::classpath::jdwp::VMVirtualMachine::getFrame (Thread *thread,
+-						  ::java::nio::ByteBuffer *bb)
++gnu::classpath::jdwp::VMVirtualMachine::
++getFrame (Thread *thread, jlong frameID)
+ {
+-  return NULL;
++  using namespace gnu::classpath::jdwp::exception;
++  
++  _Jv_Frame *vm_frame = (_Jv_Frame *) thread->frame;
++  jint depth = 0;
++  _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (frameID); 
++  
++  // We need to find the stack depth of the frame, so search through the call
++  // stack to find it.  This also checks for a valid frameID.
++  while (vm_frame != frame)
++    {
++      vm_frame = vm_frame->next;
++      depth++;
++      if (vm_frame == NULL)
++        throw new InvalidFrameException (frameID);
++    }
++  
++  Location *loc = NULL;
++  jvmtiFrameInfo info;
++  jvmtiError jerr;
++  jint num_frames;
++  jclass klass;
++  
++  // Get the info for the frame of interest
++  jerr = _jdwp_jvmtiEnv->GetStackTrace (thread, depth, 1, &info, &num_frames);
++   
++  if (jerr != JVMTI_ERROR_NONE)
++    throw_jvmti_error (jerr);
++  
++  jerr = _jdwp_jvmtiEnv->GetMethodDeclaringClass (info.method, &klass);
++      
++  if (jerr != JVMTI_ERROR_NONE)
++    throw_jvmti_error (jerr);
++
++  VMMethod *meth 
++    = getClassMethod (klass, reinterpret_cast<jlong> (info.method));
++  
++  jobject this_obj;
++  
++  if (info.location == -1)
++    {
++      loc = new Location (meth, 0);
++      this_obj = NULL;
++    }
++  else
++    {
++      loc = new Location (meth, info.location);
++      _Jv_InterpFrame *iframe = reinterpret_cast<_Jv_InterpFrame *> (vm_frame);
++      this_obj = iframe->get_this_ptr ();
++    }
++  
++  return new VMFrame (thread, reinterpret_cast<jlong> (vm_frame), loc,
++                      this_obj); 
+ }
+ 
+ jint
+-gnu::classpath::jdwp::VMVirtualMachine::getFrameCount (Thread *thread)
++gnu::classpath::jdwp::VMVirtualMachine::
++getFrameCount (Thread *thread)
+ {
+-  return 0;
++  jint frame_count;
++  
++  jvmtiError jerr = _jdwp_jvmtiEnv->GetFrameCount (thread, &frame_count);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    throw_jvmti_error (jerr);
++  
++  return frame_count;
+ }
+ 
+ jint
+-gnu::classpath::jdwp::VMVirtualMachine::getThreadStatus (Thread *thread)
++gnu::classpath::jdwp::VMVirtualMachine::
++getThreadStatus (Thread *thread)
+ {
+-  return 0;
++  jint thr_state, status;
++  
++  jvmtiError jerr = _jdwp_jvmtiEnv->GetThreadState (thread, &thr_state);
++  if (jerr != JVMTI_ERROR_NONE)
++    throw_jvmti_error (jerr);
++  
++  if (thr_state & JVMTI_THREAD_STATE_SLEEPING)
++    status = gnu::classpath::jdwp::JdwpConstants$ThreadStatus::SLEEPING;
++  else if (thr_state & JVMTI_THREAD_STATE_RUNNABLE)
++    status = gnu::classpath::jdwp::JdwpConstants$ThreadStatus::RUNNING;
++  else if (thr_state & JVMTI_THREAD_STATE_WAITING)
++    {
++      if (thr_state & (JVMTI_THREAD_STATE_IN_OBJECT_WAIT
++                       | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER))
++        status = gnu::classpath::jdwp::JdwpConstants$ThreadStatus::MONITOR;
++      else
++        status = gnu::classpath::jdwp::JdwpConstants$ThreadStatus::WAIT;
++    }
++  else
++    {
++      // The thread is not SLEEPING, MONITOR, or WAIT.  It may, however, be
++      // alive but not yet started.
++      if (!(thr_state & (JVMTI_THREAD_STATE_ALIVE 
++                         | JVMTI_THREAD_STATE_TERMINATED)))
++        status = gnu::classpath::jdwp::JdwpConstants$ThreadStatus::RUNNING;
++      status = gnu::classpath::jdwp::JdwpConstants$ThreadStatus::ZOMBIE;     
++    }   
++
++  return status;
+ }
+ 
+ java::util::ArrayList *
+-gnu::classpath::jdwp::VMVirtualMachine::getLoadRequests (ClassLoader *cl)
++gnu::classpath::jdwp::VMVirtualMachine::
++getLoadRequests (MAYBE_UNUSED ClassLoader *cl)
+ {
+-  return NULL;
++  return new ::java::util::ArrayList ();
+ }
+ 
+ MethodResult *
+-gnu::classpath::jdwp::VMVirtualMachine::executeMethod (jobject obj,
+-						       Thread *thread,
+-						       jclass clazz,
+-						       reflect::Method *method,
+-						       jobjectArray values,
+-						       jboolean nonVirtual)
++gnu::classpath::jdwp::VMVirtualMachine::
++executeMethod (MAYBE_UNUSED jobject obj, MAYBE_UNUSED Thread *thread,
++	       MAYBE_UNUSED jclass clazz, MAYBE_UNUSED reflect::Method *method,
++	       MAYBE_UNUSED jobjectArray values,
++	       MAYBE_UNUSED jboolean nonVirtual)
+ {
+   return NULL;
+ }
+ 
+ jstring
+-gnu::classpath::jdwp::VMVirtualMachine::getSourceFile (jclass clazz)
++gnu::classpath::jdwp::VMVirtualMachine::
++getSourceFile (jclass clazz)
+ {
++  jstring file = _Jv_GetInterpClassSourceFile (clazz);
++  
++  // Check if the source file was found.
++  if (file == NULL)
++    throw new exception::AbsentInformationException (
++                           _Jv_NewStringUTF("Source file not found"));
++  
++  return file;
++}
++
++void
++gnu::classpath::jdwp::VMVirtualMachine::
++redefineClasses (MAYBE_UNUSED JArray<jclass> *types,
++		 MAYBE_UNUSED JArray<jbyteArray> *bytecodes)
++{
++}
++
++void
++gnu::classpath::jdwp::VMVirtualMachine::
++setDefaultStratum (MAYBE_UNUSED jstring stratum)
++{
++}
++
++jstring
++gnu::classpath::jdwp::VMVirtualMachine::
++getSourceDebugExtension (MAYBE_UNUSED jclass klass)
++{
+   return NULL;
+ }
+ 
++jbyteArray
++gnu::classpath::jdwp::VMVirtualMachine::
++getBytecodes (MAYBE_UNUSED gnu::classpath::jdwp::VMMethod *method)
++{
++  return NULL;
++}
++
++gnu::classpath::jdwp::util::MonitorInfo *
++gnu::classpath::jdwp::VMVirtualMachine::
++getMonitorInfo (MAYBE_UNUSED jobject obj)
++{
++  return NULL;
++}
++
++jobjectArray
++gnu::classpath::jdwp::VMVirtualMachine::
++getOwnedMonitors (MAYBE_UNUSED ::java::lang::Thread *thread)
++{
++  return NULL;
++}
++
++jobject
++gnu::classpath::jdwp::VMVirtualMachine::
++getCurrentContendedMonitor (MAYBE_UNUSED ::java::lang::Thread *thread)
++{
++  return NULL;
++}
++
++void
++gnu::classpath::jdwp::VMVirtualMachine::
++popFrames (MAYBE_UNUSED ::java::lang::Thread *thread,
++	   MAYBE_UNUSED jlong frameId)
++{
++}
++
++// A simple caching function used while single-stepping
++static jvmtiError
++get_linetable (jvmtiEnv *env, jmethodID method, jint *count_ptr,
++	       jvmtiLineNumberEntry **table_ptr)
++{
++  static jint last_count = 0;
++  static jvmtiLineNumberEntry *last_table = NULL;
++  static jmethodID last_method = 0;
++
++  if (method == last_method)
++    {
++      *count_ptr = last_count;
++      *table_ptr = last_table;
++      return JVMTI_ERROR_NONE;
++    }
++
++  jvmtiError err;
++  jint count;
++  jvmtiLineNumberEntry *table;
++  err = env->GetLineNumberTable (method, &count, &table);
++  if (err != JVMTI_ERROR_NONE)
++    {
++      // Keep last table in cache
++      return err;
++    }
++
++  env->Deallocate ((unsigned char *) last_table);
++  last_table = *table_ptr = table;
++  last_count = *count_ptr = count;
++  return JVMTI_ERROR_NONE;
++}
++
++static gnu::classpath::jdwp::event::filters::StepFilter *
++get_request_step_filter (EventRequest *request)
++{
++  ::java::util::Collection *filters = request->getFilters ();
++  ::java::util::Iterator *iter = filters->iterator ();
++  filters::StepFilter *filter = NULL;
++  while (iter->hasNext ())
++    {
++      using namespace gnu::classpath::jdwp::event::filters;
++      IEventFilter *next = (IEventFilter *) iter->next ();
++      if (next->getClass () == &StepFilter::class$)
++	{
++	  filter = reinterpret_cast<StepFilter *> (next);
++	  break;
++	}
++    }
++
++  return filter;
++}
++
++static Location *
++get_request_location (EventRequest *request)
++{
++  Location *loc = NULL;
++  ::java::util::Collection *filters = request->getFilters ();
++  ::java::util::Iterator *iter = filters->iterator ();
++  while (iter->hasNext ())
++    {
++      using namespace gnu::classpath::jdwp::event::filters;
++      IEventFilter *filter = (IEventFilter *) iter->next ();
++      if (filter->getClass () == &LocationOnlyFilter::class$)
++	{
++	  LocationOnlyFilter *lof
++	    = reinterpret_cast<LocationOnlyFilter *> (filter);
++	  loc = lof->getLocation ();
++	}
++    }
++
++  return loc;
++}
++
+ static void
++handle_single_step (jvmtiEnv *env, struct step_info *sinfo, jthread thread,
++		    jmethodID method, jlocation location)
++{
++  using namespace gnu::classpath::jdwp;
++
++  if (sinfo == NULL || sinfo->size == JdwpConstants$StepSize::MIN)
++    {
++      // Stop now
++      goto send_notification;
++    }
++  else
++    {
++      // Check if we're on a new source line
++      /* This is a little inefficient when we're stepping OVER,
++	 but this must be done when stepping INTO. */
++      jint count;
++      jvmtiLineNumberEntry *table;
++      if (get_linetable (env, method, &count, &table) == JVMTI_ERROR_NONE)
++	{
++	  jint i;
++	  for (i = 0; i < count; ++i)
++	    {
++	      if (table[i].start_location == location)
++		{
++		  // This is the start of a new line -- stop
++		  goto send_notification;
++		}
++	    }
++
++	  // Not at a new source line -- just keep stepping
++	  return;
++	}
++      else
++	{
++	  /* Something went wrong: either "absent information"
++	     or "out of memory" ("invalid method id" and "native
++	     method" aren't possible -- those are validated before
++	     single stepping is enabled).
++
++	     Do what gdb does: just keep going. */
++	  return;
++	}
++    }
++
++ send_notification:
++  jclass klass;
++  jvmtiError err = env->GetMethodDeclaringClass (method, &klass);
++  if (err != JVMTI_ERROR_NONE)
++    {
++      fprintf (stderr, "libgcj: internal error: could not find class for method while single stepping -- continuing\n");
++      return;
++    }
++
++  VMMethod *vmmethod = new VMMethod (klass, reinterpret_cast<jlong> (method));
++  Location *loc = new Location (vmmethod, location);
++  JvAssert (thread->frame.frame_type == frame_interpreter);
++  _Jv_InterpFrame *iframe
++    = reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);  
++  jobject instance = iframe->get_this_ptr ();
++  event::SingleStepEvent *event
++    = new event::SingleStepEvent (thread, loc, instance);
++
++  // We only want to send the notification (and consequently
++  // suspend) if we are not about to execute a breakpoint.
++  _Jv_InterpMethod *im = reinterpret_cast<_Jv_InterpMethod *> (iframe->self);
++  if (im->breakpoint_at (location))
++    {
++      // Next insn is a breakpoint -- record event and
++      // wait for the JVMTI breakpoint notification to
++      // enforce a suspension policy.
++      VMVirtualMachine::_event_list->add (event);
++    }
++  else
++    {
++      // Next insn is not a breakpoint, so send notification
++      // and enforce the suspend policy.
++      Jdwp::notify (event);
++    }
++}
++
++static void
++throw_jvmti_error (jvmtiError err)
++{
++  char *error;
++  jstring msg;
++  if (_jdwp_jvmtiEnv->GetErrorName (err, &error) == JVMTI_ERROR_NONE)
++    {
++      msg = JvNewStringLatin1 (error);
++      _jdwp_jvmtiEnv->Deallocate ((unsigned char *) error);
++    }
++  else
++    msg = JvNewStringLatin1 ("out of memory");
++
++  using namespace gnu::classpath::jdwp::exception;
++  throw new JdwpInternalErrorException (msg);
++}
++
++static void JNICALL
++jdwpBreakpointCB (jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
++		  jthread thread, jmethodID method, jlocation location)
++{
++  jclass klass;
++  jvmtiError err;
++  err = env->GetMethodDeclaringClass (method, &klass);
++  JvAssert (err == JVMTI_ERROR_NONE);
++
++  using namespace gnu::classpath::jdwp;
++  using namespace gnu::classpath::jdwp::event;
++
++  jlong methodId = reinterpret_cast<jlong> (method);
++  VMMethod *meth = VMVirtualMachine::getClassMethod (klass, methodId);
++  Location *loc = new Location (meth, location);
++  JvAssert (thread->frame.frame_type == frame_interpreter);
++  _Jv_InterpFrame *iframe
++    = reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);
++  jobject instance = iframe->get_this_ptr ();
++  BreakpointEvent *event = new BreakpointEvent (thread, loc, instance);
++  
++  VMVirtualMachine::_event_list->add (event);
++  JArray<Event *> *events
++    = ((JArray<Event *> *)
++       JvNewObjectArray (VMVirtualMachine::_event_list->size (),
++			 &Event::class$, NULL));
++  VMVirtualMachine::_event_list->toArray ((jobjectArray) events);
++  VMVirtualMachine::_event_list->clear ();
++  Jdwp::notify (events);
++}
++
++static void JNICALL
++jdwpClassPrepareCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
++		    jthread thread, jclass klass)
++{
++  using namespace gnu::classpath::jdwp;
++
++  jint status = VMVirtualMachine::getClassStatus (klass);
++  event::ClassPrepareEvent *event
++    = new event::ClassPrepareEvent (thread, klass, status);
++  Jdwp::notify (event);
++}
++
++static void JNICALL
++jdwpExceptionCB (jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env, jthread thread,
++		 jmethodID method, jlocation location, jobject exception,
++		 jmethodID catch_method, jlocation catch_location)
++{
++  using namespace gnu::classpath::jdwp;
++  jclass throw_klass;
++  jvmtiError err = env->GetMethodDeclaringClass (method, &throw_klass);
++  if (err != JVMTI_ERROR_NONE)
++    {
++      fprintf (stderr, "libgcj: internal error: could not find class for ");
++      fprintf (stderr, "method throwing exception -- continuing\n");
++      return;
++    }
++
++  VMMethod *vmmethod = new VMMethod (throw_klass,
++				     reinterpret_cast<jlong> (method));
++  Location *throw_loc = new Location (vmmethod, location);  
++  Location *catch_loc = NULL;
++  if (catch_method == 0)
++    catch_loc = Location::getEmptyLocation ();
++  else
++    {
++      jclass catch_klass;
++      err = env->GetMethodDeclaringClass (catch_method, &catch_klass);
++      if (err != JVMTI_ERROR_NONE)
++	{
++	  fprintf (stderr,
++		   "libgcj: internal error: could not find class for ");
++	  fprintf (stderr,
++		   "method catching exception -- ignoring\n");
++	}
++      else
++	{
++	  vmmethod = new VMMethod (catch_klass,
++				   reinterpret_cast<jlong> (catch_method));
++	  catch_loc = new Location (vmmethod, catch_location);
++	}
++    }
++
++  _Jv_InterpFrame *iframe
++    = reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);
++  jobject instance = (iframe == NULL) ? NULL : iframe->get_this_ptr ();
++  Throwable *throwable = reinterpret_cast<Throwable *> (exception);
++  event::ExceptionEvent *e = new ExceptionEvent (throwable, thread,
++						 throw_loc, catch_loc,
++						 throw_klass, instance);
++  Jdwp::notify (e);
++}
++
++static void JNICALL
++jdwpSingleStepCB (jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env, jthread thread,
++		  jmethodID method, jlocation location)
++{
++  jobject si =
++    gnu::classpath::jdwp::VMVirtualMachine::_stepping_threads->get (thread);
++  struct step_info *sinfo = reinterpret_cast<struct step_info *> (si);
++
++  if (sinfo == NULL)
++    {
++      // no step filter for this thread - simply report it
++      handle_single_step (env, NULL, thread, method, location);
++    }
++  else
++    {
++      // A step filter exists for this thread
++      using namespace gnu::classpath::jdwp;
++
++      _Jv_InterpFrame *frame
++	= reinterpret_cast<_Jv_InterpFrame *> (thread->interp_frame);
++
++      switch (sinfo->depth)
++	{
++	case JdwpConstants$StepDepth::INTO:
++	  /* This is the easy case. We ignore the method and
++	     simply stop at either the next insn, or the next source
++	     line. */
++	  handle_single_step (env, sinfo, thread, method, location);
++	  break;
++
++	case JdwpConstants$StepDepth::OVER:
++	  /* This is also a pretty easy case. We just make sure that
++	     the methods are the same and that we are at the same
++	     stack depth, but we should also stop on the next
++	     insn/line if the stack depth is LESS THAN it was when
++	     we started stepping. */
++	  if (method == sinfo->method)
++	    {
++	      // Still in the same method -- must be at same stack depth
++	      // to avoid confusion with recursive methods.
++	      if (frame->depth () == sinfo->stack_depth)
++		handle_single_step (env, sinfo, thread, method, location);
++	    }
++	  else if (frame->depth () < sinfo->stack_depth)
++	    {
++	      // The method in which we were stepping was popped off
++	      // the stack. We simply need to stop at the next insn/line.
++	      handle_single_step (env, sinfo, thread, method, location);
++	    }
++	  break;
++
++	case JdwpConstants$StepDepth::OUT:
++	  // All we need to do is check the stack depth
++	  if (sinfo->stack_depth > frame->depth ())
++	    handle_single_step (env, sinfo, thread, method, location);
++	  break;
++
++	default:
++	  /* This should not happen. The JDWP back-end should have
++	     validated the StepFilter. */
++	  fprintf (stderr,
++		   "libgcj: unknown step depth while single stepping\n");
++	  return;
++	}
++    }
++}
++
++static void JNICALL
++jdwpThreadEndCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
++		 jthread thread)
++{
++  using namespace gnu::classpath::jdwp::event;
++
++  ThreadEndEvent *e = new ThreadEndEvent (thread);
++  gnu::classpath::jdwp::Jdwp::notify (e);
++}
++
++static void JNICALL
++jdwpThreadStartCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
++		   jthread thread)
++{
++  using namespace gnu::classpath::jdwp::event;
++
++  ThreadStartEvent *e = new ThreadStartEvent (thread);
++  gnu::classpath::jdwp::Jdwp::notify (e);
++}
++
++static void JNICALL
++jdwpVMDeathCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env)
++{
++  using namespace gnu::classpath::jdwp::event;
++  gnu::classpath::jdwp::Jdwp::notify (new VmDeathEvent ());
++}
++
++static void JNICALL
+ jdwpVMInitCB (MAYBE_UNUSED jvmtiEnv *env, MAYBE_UNUSED JNIEnv *jni_env,
+ 	      jthread thread)
+ {
++  // The VM is now initialized, add our callbacks
++  jvmtiEventCallbacks callbacks;
++  DEFINE_CALLBACK (callbacks, Breakpoint);
++  DEFINE_CALLBACK (callbacks, ClassPrepare);
++  DEFINE_CALLBACK (callbacks, Exception);
++  DEFINE_CALLBACK (callbacks, SingleStep);
++  DEFINE_CALLBACK (callbacks, ThreadEnd);
++  DEFINE_CALLBACK (callbacks, ThreadStart);
++  DEFINE_CALLBACK (callbacks, VMDeath);
++  _jdwp_jvmtiEnv->SetEventCallbacks (&callbacks, sizeof (callbacks));
++
++  // Enable callbacks
++  ENABLE_EVENT (BREAKPOINT, NULL);
++  ENABLE_EVENT (CLASS_PREPARE, NULL);
++  ENABLE_EVENT (EXCEPTION, NULL);
++  // SingleStep is enabled only when needed
++  ENABLE_EVENT (THREAD_END, NULL);
++  ENABLE_EVENT (THREAD_START, NULL);
++  ENABLE_EVENT (VM_DEATH, NULL);
++
+   // Send JDWP VMInit
+   using namespace gnu::classpath::jdwp::event;
+-  Thread *init_thread = reinterpret_cast<Thread *> (thread);
+-  gnu::classpath::jdwp::Jdwp::notify (new VmInitEvent (init_thread));
++  gnu::classpath::jdwp::Jdwp::notify (new VmInitEvent (thread));
+ }
+Index: libjava/gnu/classpath/jdwp/VMIdManager.java
+===================================================================
+--- libjava/gnu/classpath/jdwp/VMIdManager.java	(revision 125219)
++++ libjava/gnu/classpath/jdwp/VMIdManager.java	(revision 126334)
+@@ -1,7 +1,7 @@
+ /* VMIdManager.java -- A reference/example implementation of a manager for
+    JDWP object/reference type IDs
+ 
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -337,6 +337,10 @@
+    */
+   public ObjectId getObjectId (Object theObject)
+   {
++    // Special case: null object.
++    if (theObject == null)
++      return new NullObjectId ();
++	  
+     ReferenceKey ref = new ReferenceKey (theObject, _refQueue);
+     ObjectId id = (ObjectId) _oidTable.get (ref);
+     if (id == null)
+@@ -364,6 +368,10 @@
+   public ObjectId get (long id)
+     throws InvalidObjectException
+   {
++    // Special case: null object id.
++    if (id == 0)
++      return new NullObjectId ();
++    
+     ObjectId oid = (ObjectId) _idTable.get (new Long (id));
+     if (oid == null)
+       throw new InvalidObjectException (id);
+Index: libjava/gnu/classpath/jdwp/natVMMethod.cc
+===================================================================
+--- libjava/gnu/classpath/jdwp/natVMMethod.cc	(revision 125219)
++++ libjava/gnu/classpath/jdwp/natVMMethod.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // natVMMethod.cc -- native support for VMMethod
+ 
+-/* Copyright (C) 2006 Free Software Foundation
++/* Copyright (C) 2006, 2007 Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -11,39 +11,74 @@
+ #include <config.h>
+ #include <gcj/cni.h>
+ #include <java-interp.h>
++#include <jvmti.h>
++#include "jvmti-int.h"
+ 
++#include <java/lang/reflect/Modifier.h>
+ #include <gnu/classpath/jdwp/VMMethod.h>
++#include <gnu/classpath/jdwp/exception/AbsentInformationException.h>
++#include <gnu/classpath/jdwp/exception/InvalidMethodException.h>
+ #include <gnu/classpath/jdwp/exception/JdwpInternalErrorException.h>
+ #include <gnu/classpath/jdwp/util/LineTable.h>
+ #include <gnu/classpath/jdwp/util/VariableTable.h>
+ 
+-java::lang::String*
++using namespace java::lang;
++
++#define CHECK_INTERP_CLASS()	\
++do								\
++  {								\
++    if (!_Jv_IsInterpretedClass (getDeclaringClass ()))	\
++      {													\
++        ::java::lang::String *msg = JvNewStringLatin1 ("native class"); \
++        throw new exception::JdwpInternalErrorException (msg); 			\
++      }													\
++  }								\
++while (0)
++
++jstring
+ gnu::classpath::jdwp::VMMethod::getName ()
+ {
+-  return NULL;
++  jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
++  jmethodID method = reinterpret_cast<jmethodID> (_methodId);
++  char *name;
++  env->GetMethodName (method, &name, NULL, NULL);
++  jstring string = JvNewStringUTF (name);
++  env->Deallocate (reinterpret_cast<unsigned char *> (name));
++  return string;
+ }
+ 
+-java::lang::String*
++jstring
+ gnu::classpath::jdwp::VMMethod::getSignature ()
+ {
+-  return NULL;
++  jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
++  jmethodID method = reinterpret_cast<jmethodID> (_methodId);
++  char *signature;
++  env->GetMethodName (method, NULL, &signature, NULL);
++  jstring string = JvNewStringUTF (signature);
++  env->Deallocate (reinterpret_cast<unsigned char *> (signature));
++  return string;
+ }
+ 
+ jint
+ gnu::classpath::jdwp::VMMethod::getModifiers ()
+ {
+-  return 0;
++  jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
++  jmethodID method = reinterpret_cast<jmethodID> (_methodId);
++  jint flags;
++  env->GetMethodModifiers (method, &flags);
++
++  // If this class is compiled, as far as JDWP is concerned, its methods are 
++  // native.  This will set the native flag for these methods.
++  if (!_Jv_IsInterpretedClass (getDeclaringClass ()))
++    flags |= ::java::lang::reflect::Modifier::NATIVE;
++
++  return flags;
+ }
+ 
+ gnu::classpath::jdwp::util::LineTable *
+ gnu::classpath::jdwp::VMMethod::getLineTable ()
+ {
+-  if (!_Jv_IsInterpretedClass (getDeclaringClass ()))
+-    {
+-      // this should not happen
+-      ::java::lang::String *msg = JvNewStringLatin1 ("native class");
+-      throw new exception::JdwpInternalErrorException (msg);
+-    }
++  CHECK_INTERP_CLASS ();
+ 
+   jmethodID desired_method = reinterpret_cast<jmethodID> (_methodId);
+ 
+@@ -79,5 +114,78 @@
+ gnu::classpath::jdwp::util::VariableTable*
+ gnu::classpath::jdwp::VMMethod::getVariableTable ()
+ {
+-  return NULL;
++  using namespace gnu::classpath::jdwp::util;
++  
++  jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
++	
++  CHECK_INTERP_CLASS ();
++  
++  jmethodID meth = reinterpret_cast<jmethodID> (_methodId);
++  jvmtiLocalVariableEntry *var_table;
++  jint num_slots, args_len;
++  
++  jvmtiError jerr = env->GetLocalVariableTable (meth, &num_slots, &var_table);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    goto error;
++  
++  jerr = env->GetArgumentsSize (meth, &args_len);
++  
++  if (jerr != JVMTI_ERROR_NONE)
++    {
++    error:
++      using namespace gnu::classpath::jdwp::exception;
++      char *error;
++      env->GetErrorName (jerr, &error);
++      String *msg = JvNewStringUTF (error);
++      env->Deallocate (reinterpret_cast<unsigned char *> (error));
++      
++      if (jerr == JVMTI_ERROR_NATIVE_METHOD)
++        throw new AbsentInformationException (msg);
++      else if (jerr == JVMTI_ERROR_INVALID_METHODID)
++        throw new InvalidMethodException (_methodId);
++      else
++        throw new JdwpInternalErrorException (msg);
++    }
++  
++  jlongArray start_pcs = JvNewLongArray (num_slots);
++  jlong *start_pcs_ptr = elements (start_pcs);
++  jintArray lengths = JvNewIntArray (num_slots);
++  jint *lengths_ptr = elements (lengths);
++  jintArray slots = JvNewIntArray (num_slots);
++  jint *slots_ptr = elements (slots);
++  JArray<String *> *names = reinterpret_cast<JArray<String *> *> 
++                              (JvNewObjectArray (num_slots, 
++                                                 &String::class$, NULL));
++  jstring *names_ptr = elements (names);
++  JArray<String *> *signatures = reinterpret_cast<JArray<String *> *>
++                                   (JvNewObjectArray (num_slots, 
++                                                      &String::class$, NULL));
++  jstring *signatures_ptr = elements (signatures);
++  
++  // Get the information out of the JVMTI strucutre and Deallocate the strings.
++  for (int i = 0; i < num_slots; i++)
++    {
++      start_pcs_ptr[i] = var_table[i].start_location;
++      lengths_ptr[i] = var_table[i].length;
++      slots_ptr[i] = var_table[i].slot;
++      names_ptr[i] = JvNewStringUTF (var_table[i].name);
++      env->Deallocate (reinterpret_cast<unsigned char *> 
++                         (var_table[i].name));
++      signatures_ptr[i] = JvNewStringUTF (var_table[i].signature);
++      env->Deallocate (reinterpret_cast<unsigned char *> 
++                         (var_table[i].signature));
++      env->Deallocate (reinterpret_cast<unsigned char *>
++                         (var_table[i].generic_signature));
++    }
++  
++  // Now Deallocate the table since it's strings have already been freed.
++  env->Deallocate (reinterpret_cast<unsigned char *> (var_table));
++  
++  // Create the new JDWP VariableTable to return with the now filled arrays.
++  VariableTable* jdwp_vtable = new VariableTable (args_len, num_slots,
++                                                  start_pcs, names, signatures,
++                                                  lengths, slots);
++  
++  return jdwp_vtable;
+ }
+Index: libjava/gnu/classpath/jdwp/VMFrame.java
+===================================================================
+--- libjava/gnu/classpath/jdwp/VMFrame.java	(revision 125219)
++++ libjava/gnu/classpath/jdwp/VMFrame.java	(revision 126334)
+@@ -1,5 +1,5 @@
+ /* VMFrame.java -- Reference implementation of VM hooks for JDWP Frame access.
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -40,6 +40,7 @@
+ package gnu.classpath.jdwp;
+ 
+ import gnu.classpath.jdwp.util.Location;
++import gnu.classpath.jdwp.value.Value;
+ 
+ /**
+  * Reference implementation of VM hooks for JDWP Frame access.
+@@ -54,7 +55,10 @@
+    */
+   public static final int SIZE = 8;
+ 
+-  // The object this frame resides in
++  // The thread this frame resides in
++  private Thread thread;
++   
++  //The object of this frame
+   private Object obj;
+   
+   // The current location of this frame
+@@ -64,6 +68,22 @@
+   private long id;
+   
+   /**
++   * Create a new VMFrame object.
++   * 
++   * @param thr a Thread, the thread this frame is in
++   * @param frame_id a long, the jframeID of this frame
++   * @param frame_loc a Location, the location of this frame
++   */
++  public VMFrame(Thread thr, long frame_id, Location frame_loc,
++                 Object frame_obj)
++  {
++    thread = thr;
++    id = frame_id;
++    loc = frame_loc;
++    obj = frame_obj;
++  }
++  
++  /**
+    * Gets the current location of the frame.
+    */
+   public Location getLocation()
+@@ -76,14 +96,22 @@
+    * 
+    * @param slot the slot containing the variable
+    */
+-  public native Object getValue(int slot);
++  public native Value getValue(int slot, byte sig);
+ 
+   /**
+    * Assigns the given variable to the given value. 
+    * @param slot The slot which contains the variable
+    * @param value The value to assign the variable to
+    */
+-  public native void setValue(int slot, Object value);
++  public native void setValue(int slot, Value value);
++  
++  /**
++   * Get the thread this frame is in.
++   */
++  public Thread getThread()
++  {
++    return thread;
++  }
+ 
+   /**
+    * Get the object which is represented by 'this' in the context of the frame,
+Index: libjava/gnu/classpath/jdwp/VMVirtualMachine.java
+===================================================================
+--- libjava/gnu/classpath/jdwp/VMVirtualMachine.java	(revision 125219)
++++ libjava/gnu/classpath/jdwp/VMVirtualMachine.java	(revision 126334)
+@@ -1,7 +1,7 @@
+ /* VMVirtualMachine.java -- A reference implementation of a JDWP virtual
+    machine
+ 
+-   Copyright (C) 2005, 2006 Free Software Foundation
++   Copyright (C) 2005, 2006, 2007 Free Software Foundation
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -45,11 +45,13 @@
+ import gnu.classpath.jdwp.exception.InvalidMethodException;
+ import gnu.classpath.jdwp.exception.JdwpException;
+ import gnu.classpath.jdwp.util.MethodResult;
++import gnu.classpath.jdwp.util.MonitorInfo;
++
+ import java.lang.reflect.Method;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
++import java.util.Collection;
+ import java.util.Hashtable;
+-import java.util.Iterator;
+ 
+ /**
+  * A virtual machine according to JDWP.
+@@ -58,9 +60,32 @@
+  */
+ public class VMVirtualMachine
+ {
++  // VM Capabilities
++  public static final boolean canWatchFieldModification = false;
++  public static final boolean canWatchFieldAccess = false;
++  public static final boolean canGetBytecodes = false;
++  public static final boolean canGetSyntheticAttribute = false;
++  public static final boolean canGetOwnedMonitorInfo = false;
++  public static final boolean canGetCurrentContendedMonitor = false;
++  public static final boolean canGetMonitorInfo = false;
++  public static final boolean canRedefineClasses = false;
++  public static final boolean canAddMethod = false;
++  public static final boolean canUnrestrictedlyRedefineClasses = false;
++  public static final boolean canPopFrames = false;
++  public static final boolean canUseInstanceFilters = false;
++  public static final boolean canGetSourceDebugExtension = false;
++  public static final boolean canRequestVMDeathEvent = false;
++  public static final boolean canSetDefaultStratum = false;
++
+   // Thread suspension table. Maps Thread to suspend count (Integer)
+   private static Hashtable _jdwp_suspend_counts;
+ 
++  // List of stepping threads: maps Thread -> stepping info
++  static Hashtable _stepping_threads;
++  
++  // List of co-located JVMTI events
++  static ArrayList _event_list;
++
+   public static native void initialize ();
+ 
+   /**
+@@ -176,18 +201,12 @@
+     throws JdwpException;
+  
+   /**
+-   * Returns a count of the number of loaded classes in the VM
++   * Returns a Collection of all classes loaded in the VM
+    */
+-  public static native int getAllLoadedClassesCount ()
++  public static native Collection getAllLoadedClasses ()
+     throws JdwpException;
+ 
+   /**
+-   * Returns an iterator over all the loaded classes in the VM
+-   */
+-  public static native Iterator getAllLoadedClasses ()
+-    throws JdwpException;
+-
+-  /**
+    * Returns the status of the given class
+    *
+    * @param  clazz  the class whose status is desired
+@@ -243,7 +262,7 @@
+    * @param  bb      buffer containing the frame's ID
+    * @return the desired frame
+    */
+-  public static native VMFrame getFrame (Thread thread, ByteBuffer bb)
++  public static native VMFrame getFrame (Thread thread, long frameID)
+     throws JdwpException;
+ 
+   /**
+@@ -332,4 +351,86 @@
+    */
+   public static native void clearEvents (byte kind)
+     throws JdwpException;
++
++  /**
++   * Redefines the given types. VM must support canRedefineClasses
++   * capability (may also require canAddMethod and/or
++   * canUnrestrictedlyRedefineClasses capabilities)
++   *
++   * @param types the classes to redefine
++   * @param bytecodes the new bytecode definitions for the classes
++   */
++  public static native void redefineClasses(Class[] types, byte[][] bytecodes)
++    throws JdwpException;
++
++  /**
++   * Sets the default stratum. VM must support the
++   * canSetDefaultStratum capability.
++   *
++   * @param stratum the new default stratum or empty string to
++   *        use the reference default
++   */
++  public static native void setDefaultStratum(String stratum)
++    throws JdwpException;
++
++  /**
++   * Returns the source debug extension. VM must support the
++   * canGetSourceDebugExtension capability.
++   *
++   * @param klass the class for which to return information
++   * @returns the source debug extension
++   */
++  public static native String getSourceDebugExtension(Class klass)
++    throws JdwpException;
++
++  /**
++   * Returns the bytecode for the given method. VM must support the
++   * canGetBytecodes capability.
++   *
++   * @param method the method for which to get bytecodes
++   * @returns the bytecodes
++   */
++  public static native byte[] getBytecodes(VMMethod method)
++    throws JdwpException;
++
++  /**
++   * Returns monitor information about an object. VM must support
++   * the canGetMonitorInformation capability.
++   *
++   * @param obj the object
++   * @returns monitor information (owner, entry count, waiters)
++   */
++  public static native MonitorInfo getMonitorInfo(Object obj)
++    throws JdwpException;
++
++  /**
++   * Returns a list of owned monitors. VM must support the
++   * canGetOwnedMonitorInfo capability.
++   *
++   * @param thread a thread
++   * @returns the list of monitors owned by this thread
++   */
++  public static native Object[] getOwnedMonitors(Thread thread)
++    throws JdwpException;
++
++  /**
++   * Returns the current contended monitor for a thread. VM must
++   * support canGetCurrentContendedMonitor capability.
++   *
++   * @param thread the thread
++   * @returns the contended monitor
++   */
++  public static native Object getCurrentContendedMonitor(Thread thread)
++    throws JdwpException;
++
++  /**
++   * Pop all frames up to and including the given frame. VM must
++   * support canPopFrames capability. It is the responsibility
++   * of the VM to check if the thread is suspended. If it is not,
++   * the VM should throw ThreadNotSuspendedException.
++   *
++   * @param thread the thread
++   * @param frame the frame ID
++   */
++  public static native void popFrames(Thread thread, long frameId);
+ }
+Index: libjava/gnu/gcj/jvmti/natBreakpoint.cc
+===================================================================
+--- libjava/gnu/gcj/jvmti/natBreakpoint.cc	(revision 125219)
++++ libjava/gnu/gcj/jvmti/natBreakpoint.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // natBreakpoint.cc - C++ side of Breakpoint
+ 
+-/* Copyright (C) 2006  Free Software Foundation
++/* Copyright (C) 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -17,6 +17,7 @@
+ #include <jvmti.h>
+ 
+ #include <gnu/gcj/jvmti/Breakpoint.h>
++#include <gnu/gcj/jvmti/BreakpointManager.h>
+ 
+ static _Jv_InterpMethod *
+ get_interp_method (jlong method)
+@@ -39,7 +40,6 @@
+   pc_t code = imeth->get_insn (location);
+   data = (RawDataManaged *) JvAllocBytes (sizeof (*code));
+   memcpy (data, code, sizeof (*code));
+-  install ();
+ }
+ 
+ void
+@@ -55,3 +55,18 @@
+   _Jv_InterpMethod *imeth = get_interp_method (method);
+   imeth->set_insn (location, reinterpret_cast<pc_t> (data));
+ }
++
++#ifdef DIRECT_THREADED
++void
++_Jv_RewriteBreakpointInsn (jmethodID mid, jlocation loc, pc_t new_insn)
++{
++  using namespace ::gnu::gcj::jvmti;
++  Breakpoint *bp
++    = BreakpointManager::getBreakpoint (reinterpret_cast<jlong> (mid), loc);
++  if (bp != NULL)
++    {
++      pc_t old_insn = (pc_t) bp->data;
++      old_insn->insn = new_insn;
++    }
++}
++#endif // DIRECT_THREADED
+Index: libjava/gnu/gcj/jvmti/BreakpointManager.java
+===================================================================
+--- libjava/gnu/gcj/jvmti/BreakpointManager.java	(revision 125219)
++++ libjava/gnu/gcj/jvmti/BreakpointManager.java	(revision 126334)
+@@ -1,6 +1,6 @@
+ // BreakpointManager.java - A convenience class for dealing with breakpoints
+ 
+-/* Copyright (C) 2006  Free Software Foundation
++/* Copyright (C) 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -45,6 +45,7 @@
+   {
+     Breakpoint bp = new Breakpoint (method, location);
+     Location loc = new Location (method, location);
++    bp.install ();
+     _instance._breakpoints.put (loc, bp);
+     return bp;
+   }
+@@ -58,7 +59,12 @@
+   public static void deleteBreakpoint (long method, long location)
+   {
+     Location loc = new Location (method, location);
+-    _instance._breakpoints.remove (loc);
++    Breakpoint bp = (Breakpoint) _instance._breakpoints.get (loc);
++    if (bp != null)
++      {
++	bp.remove ();
++	_instance._breakpoints.remove (loc);
++      }
+   }
+ 
+   /**
+Index: libjava/headers.txt
+===================================================================
+--- libjava/headers.txt	(revision 125219)
++++ libjava/headers.txt	(revision 126334)
+@@ -65,5 +65,13 @@
+ friend java::lang::reflect::Method* ::_Jv_GetReflectedMethod (jclass, _Jv_Utf8Const*, _Jv_Utf8Const*);
+ friend java::lang::reflect::Method* ::_Jv_LookupProxyMethod (jclass, _Jv_Utf8Const *, _Jv_Utf8Const *);
+ 
++class gnu/gcj/jvmti/Breakpoint
++prepend #ifdef DIRECT_THREADED
++prepend void _Jv_RewriteBreakpointInsn (jmethodID, jlocation, pc_t);
++prepend #endif
++add #ifdef DIRECT_THREADED
++add friend void (::_Jv_RewriteBreakpointInsn (jmethodID, jlocation, pc_t));
++add #endif
++
+ class gnu/gcj/runtime/ExtensionClassLoader
+ friend class ::java::lang::ClassLoader;
+Index: libjava/interpret-run.cc
+===================================================================
+--- libjava/interpret-run.cc	(revision 125219)
++++ libjava/interpret-run.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // interpret-run.cc - Code to interpret bytecode
+ 
+-/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
++/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -12,6 +12,8 @@
+  * compiled directly.	*/
+ 
+   using namespace java::lang::reflect;
++  
++  pc_t pc = NULL;
+ 
+   // FRAME_DESC registers this particular invocation as the top-most
+   // interpreter frame.  This lets the stack tracing code (for
+@@ -20,13 +22,108 @@
+   // destructor so it cleans up automatically when the interpreter
+   // returns.
+   java::lang::Thread *thread = java::lang::Thread::currentThread();
++  
++#ifdef DEBUG
++  _Jv_InterpFrame frame_desc (meth, thread, NULL, &pc);
++#else
+   _Jv_InterpFrame frame_desc (meth, thread);
++#endif
+ 
+   _Jv_word stack[meth->max_stack];
+   _Jv_word *sp = stack;
+ 
+   _Jv_word locals[meth->max_locals];
+ 
++#ifdef DEBUG
++  // This is the information needed to get and set local variables with
++  // proper type checking.
++  frame_desc.locals = locals;
++  char locals_type[meth->max_locals];
++  frame_desc.locals_type = locals_type;
++  
++  // Set all slots as invalid until they are written to.
++  memset (locals_type, 'x', meth->max_locals);
++  
++  // We need to set the local variable types for the method arguments since
++  // they are valid at invocation.
++  
++  _Jv_Method *method = meth->get_method ();
++  int type_ctr = 0;
++  
++  // If the method is non-static, we need to set the type for the "this" pointer.
++  if ((method->accflags & java::lang::reflect::Modifier::STATIC) == 0)
++    {
++      if (args)
++        {
++          // Set the "this" pointer for this frame.
++          _Jv_word *this_ptr = reinterpret_cast<_Jv_word *> (args);
++          frame_desc.obj_ptr = this_ptr[0].o;
++        }
++
++      frame_desc.locals_type[0] = 'o';
++      type_ctr++;
++    }
++  
++  // Now parse the method signature to set the types of the other arguments.  
++  int sig_len = method->signature->len ();
++  char *signature = method->signature->chars ();
++  for (int i = 1; signature[i] != ')' && i <= sig_len; i++)
++    {
++      if (signature[i] == 'Z' || signature[i] == 'B' || signature[i] == 'C' 
++          || signature[i] == 'S' || signature[i] == 'I')
++        {
++          frame_desc.locals_type[type_ctr] = 'i';
++          type_ctr++;
++          continue;
++        }
++      else if (signature[i] == 'F')
++        {
++          frame_desc.locals_type[type_ctr] = 'f';
++          type_ctr++;
++          continue;
++        }
++      else if (signature[i] == 'J')
++        {
++          frame_desc.locals_type[type_ctr] = 'l';
++          frame_desc.locals_type[type_ctr+1] = 'x';
++          type_ctr += 2;
++          continue;
++        }
++      else if (signature[i] == 'D')
++        {
++          frame_desc.locals_type[type_ctr] = 'd';
++          frame_desc.locals_type[type_ctr+1] = 'x';
++          type_ctr += 2;
++          continue;
++        }
++      else if (signature[i] == 'L')
++        {
++          frame_desc.locals_type[type_ctr] = 'o';
++          type_ctr++;
++          while (signature[i] != ';')
++            i++;
++          continue;
++        }
++      else if (signature[i] == '[')
++        {
++          frame_desc.locals_type[type_ctr] = 'o';
++          type_ctr++;
++          
++          // Ignore multi-dimensional arrays.
++          while (signature[i] == '[')
++            i++;
++          
++          // Check for an object array
++          if (signature[i] == 'L')
++            {
++              while (signature[i] != ';')
++                i++;
++            }
++          continue;
++        }
++    }
++#endif /* DEBUG */
++
+ #define INSN_LABEL(op) &&insn_##op
+ 
+   static const void *const insn_target[] = 
+@@ -217,7 +314,7 @@
+     INSN_LABEL(invokespecial),
+     INSN_LABEL(invokestatic),
+     INSN_LABEL(invokeinterface),
+-    INSN_LABEL (breakpoint),
++    INSN_LABEL(breakpoint),
+     INSN_LABEL(new),
+     INSN_LABEL(newarray),
+     INSN_LABEL(anewarray),
+@@ -244,11 +341,58 @@
+ #endif
+   };
+ 
+-  pc_t pc;
+-
+ #ifdef DIRECT_THREADED
+ 
++#ifdef DEBUG
++#undef NEXT_INSN
++#define NEXT_INSN							\
++  do									\
++    {									\
++      pc_t insn = pc++;							\
++      if (JVMTI_REQUESTED_EVENT (SingleStep))				\
++	{								\
++	  JNIEnv *env = _Jv_GetCurrentJNIEnv ();			\
++	  jmethodID method = meth->self;				\
++	  jlocation loc = meth->insn_index (insn);			\
++	  _Jv_JVMTI_PostEvent (JVMTI_EVENT_SINGLE_STEP, thread,		\
++			       env, method, loc);			\
++	}								\
++      goto *(insn->insn);						\
++    }									\
++  while (0)
++
++#undef REWRITE_INSN
++#define REWRITE_INSN(INSN,SLOT,VALUE)					\
++  do {									\
++    if (pc[-2].insn == breakpoint_insn->insn)				\
++      {									\
++	using namespace ::gnu::gcj::jvmti;				\
++	jlocation location = meth->insn_index (pc - 2);			\
++	_Jv_RewriteBreakpointInsn (meth->self, location, (pc_t) INSN);	\
++      }									\
++    else								\
++      pc[-2].insn = INSN;						\
++									\
++    pc[-1].SLOT = VALUE;						\
++  }									\
++  while (0)
++
++#undef INTERP_REPORT_EXCEPTION
++#define INTERP_REPORT_EXCEPTION(Jthrowable) REPORT_EXCEPTION (Jthrowable)
++#else // !DEBUG
++#undef NEXT_INSN
+ #define NEXT_INSN goto *((pc++)->insn)
++#define REWRITE_INSN(INSN,SLOT,VALUE)		\
++  do {						\
++    pc[-2].insn = INSN;				\
++    pc[-1].SLOT = VALUE;			\
++  }						\
++  while (0)
++
++#undef INTERP_REPORT_EXCEPTION
++#define INTERP_REPORT_EXCEPTION(Jthrowable) /* not needed when not debugging */
++#endif // !DEBUG
++
+ #define INTVAL() ((pc++)->int_val)
+ #define AVAL() ((pc++)->datum)
+ 
+@@ -281,7 +425,22 @@
+ 
+ #else
+ 
++#ifdef DEBUG
++#define NEXT_INSN							\
++  do									\
++    {									\
++      if (JVMTI_REQUESTED_EVENT (SingleStep))				\
++	{								\
++	  JNIEnv *env = _Jv_GetCurrentJNIEnv ();			\
++	  jmethodID method = meth->self;				\
++	  jlocation loc = meth->insn_index (pc);			\
++	  _Jv_JVMTI_PostEvent (JVMTI_EVENT_SINGLE_STEP, thread,		\
++			       env, method, loc);			\
++	}								\
++      goto *(insn_target[*pc++])
++#else
+ #define NEXT_INSN goto *(insn_target[*pc++])
++#endif
+ 
+ #define GET1S() get1s (pc++)
+ #define GET2S() (pc += 2, get2s (pc- 2))
+@@ -381,8 +540,7 @@
+ #ifdef DIRECT_THREADED
+ 	// Rewrite instruction so that we use a faster pre-resolved
+ 	// method.
+-	pc[-2].insn = &&invokevirtual_resolved;
+-	pc[-1].datum = rmeth;
++	REWRITE_INSN (&&invokevirtual_resolved, datum, rmeth);
+ #endif /* DIRECT_THREADED */
+       }
+       goto perform_invoke;
+@@ -1716,8 +1874,7 @@
+ 	  }
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = newinsn;
+-	pc[-1].datum = field->u.addr;
++	REWRITE_INSN (newinsn, datum, field->u.addr);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -1807,8 +1964,7 @@
+ 	  }
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = newinsn;
+-	pc[-1].int_val = field_offset;
++	REWRITE_INSN (newinsn, int_val, field_offset);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -1923,8 +2079,7 @@
+ 	  }
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = newinsn;
+-	pc[-1].datum = field->u.addr;
++	REWRITE_INSN (newinsn, datum, field->u.addr);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -2022,8 +2177,7 @@
+ 	  }
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = newinsn;
+-	pc[-1].int_val = field_offset;
++	REWRITE_INSN (newinsn, int_val, field_offset);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -2098,8 +2252,7 @@
+ #ifdef DIRECT_THREADED
+ 	// Rewrite instruction so that we use a faster pre-resolved
+ 	// method.
+-	pc[-2].insn = &&invokespecial_resolved;
+-	pc[-1].datum = rmeth;
++	REWRITE_INSN (&&invokespecial_resolved, datum, rmeth);
+ #endif /* DIRECT_THREADED */
+       }
+       goto perform_invoke;
+@@ -2136,8 +2289,7 @@
+ #ifdef DIRECT_THREADED
+ 	// Rewrite instruction so that we use a faster pre-resolved
+ 	// method.
+-	pc[-2].insn = &&invokestatic_resolved;
+-	pc[-1].datum = rmeth;
++	REWRITE_INSN (&&invokestatic_resolved, datum, rmeth);
+ #endif /* DIRECT_THREADED */
+       }
+       goto perform_invoke;
+@@ -2175,8 +2327,7 @@
+ #ifdef DIRECT_THREADED
+ 	// Rewrite instruction so that we use a faster pre-resolved
+ 	// method.
+-	pc[-2].insn = &&invokeinterface_resolved;
+-	pc[-1].datum = rmeth;
++	REWRITE_INSN (&&invokeinterface_resolved, datum, rmeth);
+ #else
+ 	// Skip dummy bytes.
+ 	pc += 2;
+@@ -2209,13 +2360,16 @@
+ 	/* VM spec, section 3.11.5 */
+ 	if ((klass->getModifiers() & Modifier::ABSTRACT)
+ 	    || klass->isInterface())
+-	  throw new java::lang::InstantiationException;
++	  {
++	    jthrowable t = new java::lang::InstantiationException;
++	    INTERP_REPORT_EXCEPTION (t);
++	    throw t;
++	  }
+ 	jobject res = _Jv_AllocObject (klass);
+ 	PUSHA (res);
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = &&new_resolved;
+-	pc[-1].datum = klass;
++	REWRITE_INSN (&&new_resolved, datum, klass);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -2250,8 +2404,7 @@
+ 	PUSHA (result);
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = &&anewarray_resolved;
+-	pc[-1].datum = klass;
++	REWRITE_INSN (&&anewarray_resolved, datum, klass);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -2278,7 +2431,9 @@
+     insn_athrow:
+       {
+ 	jobject value = POPA();
+-	throw static_cast<jthrowable>(value);
++	jthrowable t = static_cast<jthrowable> (value);
++	INTERP_REPORT_EXCEPTION (t);
++	throw t;
+       }
+       NEXT_INSN;
+ 
+@@ -2295,8 +2450,7 @@
+ 	PUSHA (value);
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = &&checkcast_resolved;
+-	pc[-1].datum = to;
++	REWRITE_INSN (&&checkcast_resolved, datum, to);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -2323,8 +2477,7 @@
+ 	PUSHI (to->isInstance (value));
+ 
+ #ifdef DIRECT_THREADED
+-	pc[-2].insn = &&instanceof_resolved;
+-	pc[-1].datum = to;
++	REWRITE_INSN (&&instanceof_resolved, datum, to);
+ #endif /* DIRECT_THREADED */
+       }
+       NEXT_INSN;
+@@ -2466,48 +2619,57 @@
+ 
+     insn_breakpoint:
+       {
+-	// nothing just yet
++	JvAssert (JVMTI_REQUESTED_EVENT (Breakpoint));
++
++	// Send JVMTI notification
++	using namespace ::java::lang;
++	jmethodID method = meth->self;
++	jlocation location = meth->insn_index (pc - 1);
++	Thread *thread = Thread::currentThread ();
++	JNIEnv *jni_env = _Jv_GetCurrentJNIEnv ();
++
++	// Save the insn here since the breakpoint could be removed
++	// before the JVMTI notification returns.
++	using namespace gnu::gcj::jvmti;
++	Breakpoint *bp
++	  = BreakpointManager::getBreakpoint (reinterpret_cast<jlong> (method),
++					      location);
++	JvAssert (bp != NULL);
++	pc_t opc = reinterpret_cast<pc_t> (bp->getInsn ());
++
++	_Jv_JVMTI_PostEvent (JVMTI_EVENT_BREAKPOINT, thread, jni_env,
++			     method, location);
++
++	// Continue execution
++#ifdef DIRECT_THREADED
++	goto *(opc->insn);
++#else
++	goto *(insn_target[*opc]);
++#endif
+       }
+     }
+   catch (java::lang::Throwable *ex)
+     {
+-#ifdef DIRECT_THREADED
+-      void *logical_pc = (void *) ((insn_slot *) pc - 1);
+-#else
+-      int logical_pc = pc - 1 - meth->bytecode ();
++      // Check if the exception is handled and, if so, set the pc to the start
++      // of the appropriate catch block.
++      if (meth->check_handler (&pc, meth, ex))
++        {
++          sp = stack;
++          sp++->o = ex; // Push exception.
++#ifdef DEBUG
++          if (JVMTI_REQUESTED_EVENT (ExceptionCatch))
++            {
++              using namespace gnu::gcj::jvmti;
++              jlong catch_meth = reinterpret_cast<jlong> (meth->get_method ());
++              jlong catch_loc = meth->insn_index (pc);
++	      _Jv_JVMTI_PostEvent (JVMTI_EVENT_EXCEPTION_CATCH, thread,
++				   _Jv_GetCurrentJNIEnv (), catch_meth,
++				   catch_loc, ex);
++            }
+ #endif
+-      _Jv_InterpException *exc = meth->exceptions ();
+-      jclass exc_class = ex->getClass ();
++          NEXT_INSN;
++        }
+ 
+-      for (int i = 0; i < meth->exc_count; i++)
+-	{
+-	  if (PCVAL (exc[i].start_pc) <= logical_pc
+-	      && logical_pc < PCVAL (exc[i].end_pc))
+-	    {
+-#ifdef DIRECT_THREADED
+-	      jclass handler = (jclass) exc[i].handler_type.p;
+-#else
+-	      jclass handler = NULL;
+-	      if (exc[i].handler_type.i != 0)
+-		handler = (_Jv_Linker::resolve_pool_entry (meth->defining_class,
+-							   exc[i].handler_type.i)).clazz;
+-#endif /* DIRECT_THREADED */
+-
+-	      if (handler == NULL || handler->isAssignableFrom (exc_class))
+-		{
+-
+-#ifdef DIRECT_THREADED
+-		  pc = (insn_slot *) exc[i].handler_pc.p;
+-#else
+-		  pc = meth->bytecode () + exc[i].handler_pc.i;
+-#endif /* DIRECT_THREADED */
+-		  sp = stack;
+-		  sp++->o = ex; // Push exception.
+-		  NEXT_INSN;
+-		}
+-	    }
+-	}
+-
+       // No handler, so re-throw.
+       throw ex;
+     }
+Index: libjava/boehm.cc
+===================================================================
+--- libjava/boehm.cc	(revision 125219)
++++ libjava/boehm.cc	(revision 126334)
+@@ -722,6 +722,17 @@
+ #endif
+ }
+ 
++int
++_Jv_IsThreadSuspended (_Jv_Thread_t *thread)
++{
++#if defined(GC_PTHREADS) && !defined(GC_SOLARIS_THREADS) \
++     && !defined(GC_WIN32_THREADS) && !defined(GC_DARWIN_THREADS)
++  return GC_is_thread_suspended (_Jv_GetPlatformThreadID (thread));
++#else
++  return 0;
++#endif
++}
++
+ void
+ _Jv_GCAttachThread ()
+ {
+Index: libjava/sources.am
+===================================================================
+--- libjava/sources.am	(revision 125219)
++++ libjava/sources.am	(revision 126334)
+@@ -326,15 +326,19 @@
+ 
+ 
+ gnu_classpath_jdwp_exception_source_files = \
++classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidClassException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidCountException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidEventTypeException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidFieldException.java \
++classpath/gnu/classpath/jdwp/exception/InvalidFrameException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidLocationException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidMethodException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidObjectException.java \
++classpath/gnu/classpath/jdwp/exception/InvalidSlotException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidStringException.java \
++classpath/gnu/classpath/jdwp/exception/InvalidTagException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidThreadException.java \
+ classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java \
+ classpath/gnu/classpath/jdwp/exception/JdwpException.java \
+@@ -342,6 +346,7 @@
+ classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java \
+ classpath/gnu/classpath/jdwp/exception/NativeMethodException.java \
+ classpath/gnu/classpath/jdwp/exception/NotImplementedException.java \
++classpath/gnu/classpath/jdwp/exception/TypeMismatchException.java \
+ classpath/gnu/classpath/jdwp/exception/VmDeadException.java
+ 
+ gnu_classpath_jdwp_exception_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_exception_source_files)))
+@@ -361,6 +366,7 @@
+ classpath/gnu/classpath/jdwp/id/ClassReferenceTypeId.java \
+ classpath/gnu/classpath/jdwp/id/InterfaceReferenceTypeId.java \
+ classpath/gnu/classpath/jdwp/id/JdwpId.java \
++classpath/gnu/classpath/jdwp/id/NullObjectId.java \
+ classpath/gnu/classpath/jdwp/id/ObjectId.java \
+ classpath/gnu/classpath/jdwp/id/ReferenceTypeId.java \
+ classpath/gnu/classpath/jdwp/id/StringId.java \
+@@ -429,6 +435,8 @@
+ classpath/gnu/classpath/jdwp/util/LineTable.java \
+ classpath/gnu/classpath/jdwp/util/Location.java \
+ classpath/gnu/classpath/jdwp/util/MethodResult.java \
++classpath/gnu/classpath/jdwp/util/MonitorInfo.java \
++classpath/gnu/classpath/jdwp/util/NullObject.java \
+ classpath/gnu/classpath/jdwp/util/Signature.java \
+ classpath/gnu/classpath/jdwp/util/Value.java \
+ classpath/gnu/classpath/jdwp/util/VariableTable.java
+@@ -442,6 +450,31 @@
+ -include gnu/classpath/jdwp/util.deps
+ 
+ 
++gnu_classpath_jdwp_value_source_files = \
++classpath/gnu/classpath/jdwp/value/ArrayValue.java \
++classpath/gnu/classpath/jdwp/value/BooleanValue.java \
++classpath/gnu/classpath/jdwp/value/ByteValue.java \
++classpath/gnu/classpath/jdwp/value/CharValue.java \
++classpath/gnu/classpath/jdwp/value/DoubleValue.java \
++classpath/gnu/classpath/jdwp/value/FloatValue.java \
++classpath/gnu/classpath/jdwp/value/IntValue.java \
++classpath/gnu/classpath/jdwp/value/LongValue.java \
++classpath/gnu/classpath/jdwp/value/ObjectValue.java \
++classpath/gnu/classpath/jdwp/value/ShortValue.java \
++classpath/gnu/classpath/jdwp/value/StringValue.java \
++classpath/gnu/classpath/jdwp/value/Value.java \
++classpath/gnu/classpath/jdwp/value/ValueFactory.java \
++classpath/gnu/classpath/jdwp/value/VoidValue.java
++
++gnu_classpath_jdwp_value_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_value_source_files)))
++
++gnu/classpath/jdwp/value.list: $(gnu_classpath_jdwp_value_source_files)
++	@$(mkinstalldirs) $(dir $@)
++	echo $(srcdir)/classpath/lib/gnu/classpath/jdwp/value/*.class > gnu/classpath/jdwp/value.list
++
++-include gnu/classpath/jdwp/value.deps
++
++
+ gnu_gcj_source_files = \
+ gnu/gcj/Core.java \
+ gnu/gcj/RawData.java \
+@@ -8341,6 +8374,7 @@
+   gnu/classpath/jdwp/processor.list \
+   gnu/classpath/jdwp/transport.list \
+   gnu/classpath/jdwp/util.list \
++  gnu/classpath/jdwp/value.list \
+   gnu/gcj.list \
+   gnu/gcj/convert.list \
+   gnu/gcj/io.list \
+@@ -8585,6 +8619,7 @@
+   $(gnu_classpath_jdwp_processor_header_files) \
+   $(gnu_classpath_jdwp_transport_header_files) \
+   $(gnu_classpath_jdwp_util_header_files) \
++  $(gnu_classpath_jdwp_value_header_files) \
+   $(gnu_gcj_header_files) \
+   $(gnu_gcj_convert_header_files) \
+   $(gnu_gcj_io_header_files) \
+Index: libjava/java/lang/Thread.java
+===================================================================
+--- libjava/java/lang/Thread.java	(revision 125219)
++++ libjava/java/lang/Thread.java	(revision 126334)
+@@ -185,6 +185,9 @@
+   
+   // This describes the top-most interpreter frame for this thread.
+   RawData interp_frame;
++  
++  // This describes the top most frame in the composite (interp + JNI) stack
++  RawData frame;
+ 
+   // Current state.
+   volatile int state;
+Index: libjava/java/lang/natClass.cc
+===================================================================
+--- libjava/java/lang/natClass.cc	(revision 125219)
++++ libjava/java/lang/natClass.cc	(revision 126334)
+@@ -1,6 +1,6 @@
+ // natClass.cc - Implementation of java.lang.Class native methods.
+ 
+-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+    Free Software Foundation
+ 
+    This file is part of libgcj.
+@@ -2079,3 +2079,21 @@
+   return reinterpret_cast<jclass> (_Jv_StackTrace::ncodeMap->get (obj));
+ }
+ 
++jbyte
++_Jv_GetClassState (jclass klass)
++{
++  return klass->state;
++}
++
++jstring
++_Jv_GetInterpClassSourceFile (jclass klass)
++{
++  if (_Jv_IsInterpretedClass (klass))
++    {
++      _Jv_InterpClass *iclass =
++	reinterpret_cast<_Jv_InterpClass *> (klass->aux_info);
++      return iclass->source_file_name;
++    }
++
++  return NULL;
++}
+Index: libjava/java/lang/natThread.cc
+===================================================================
+--- libjava/java/lang/natThread.cc	(revision 125219)
++++ libjava/java/lang/natThread.cc	(revision 126334)
+@@ -27,6 +27,8 @@
+ #include <java/lang/NullPointerException.h>
+ 
+ #include <jni.h>
++#include <jvmti.h>
++#include "jvmti-int.h"
+ 
+ #ifdef ENABLE_JVMPI
+ #include <jvmpi.h>
+@@ -215,6 +217,9 @@
+   nt->park_helper.deactivate ();
+   group->removeThread (this);
+ 
++  if (JVMTI_REQUESTED_EVENT (ThreadEnd))
++    _Jv_JVMTI_PostEvent (JVMTI_EVENT_THREAD_END, this, nt->jni_env);
++
+ #ifdef ENABLE_JVMPI  
+   if (_Jv_JVMPI_Notify_THREAD_END)
+     {
+@@ -253,6 +258,12 @@
+ static void
+ _Jv_NotifyThreadStart (java::lang::Thread* thread)
+ {
++  if (JVMTI_REQUESTED_EVENT (ThreadStart))
++    {
++      natThread *nt = reinterpret_cast<natThread *> (thread->data);
++      _Jv_JVMTI_PostEvent (JVMTI_EVENT_THREAD_START, thread, nt->jni_env);
++    }
++
+ #ifdef ENABLE_JVMPI
+       if (_Jv_JVMPI_Notify_THREAD_START)
+ 	{
+Index: libjava/java/lang/Class.h
+===================================================================
+--- libjava/java/lang/Class.h	(revision 125219)
++++ libjava/java/lang/Class.h	(revision 126334)
+@@ -1,6 +1,6 @@
+ // Class.h - Header file for java.lang.Class.  -*- c++ -*-
+ 
+-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006  Free Software Foundation
++/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007  Free Software Foundation
+ 
+    This file is part of libgcj.
+ 
+@@ -269,8 +269,11 @@
+ // Finds a desired interpreter method in the given class or NULL if not found
+ class _Jv_MethodBase;
+ _Jv_MethodBase *_Jv_FindInterpreterMethod (jclass, jmethodID);
++jstring _Jv_GetInterpClassSourceFile (jclass);
+ #endif
+ 
++jbyte _Jv_GetClassState (jclass);
++
+ // Friend classes and functions to implement the ClassLoader
+ class java::lang::ClassLoader;
+ class java::lang::VMClassLoader;
+@@ -571,7 +574,9 @@
+ #ifdef INTERPRETER
+   friend _Jv_MethodBase *(::_Jv_FindInterpreterMethod) (jclass klass,
+ 							jmethodID desired_method);
++  friend jstring ::_Jv_GetInterpClassSourceFile (jclass);
+ #endif
++  friend jbyte (::_Jv_GetClassState) (jclass klass);
+ 
+   // Friends classes and functions to implement the ClassLoader
+   friend class java::lang::ClassLoader;
+Index: libjava/defineclass.cc
+===================================================================
+--- libjava/defineclass.cc	(revision 125219)
++++ libjava/defineclass.cc	(revision 126334)
+@@ -300,6 +300,9 @@
+ 
+   /** check an utf8 entry, without creating a Utf8Const object */
+   bool is_attribute_name (int index, const char *name);
++  
++  /** return the value of a utf8 entry in the passed array */
++  int pool_Utf8_to_char_arr (int index, char **entry);
+ 
+   /** here goes the class-loader members defined out-of-line */
+   void handleConstantPool ();
+@@ -785,6 +788,18 @@
+     return !memcmp (bytes+offsets[index]+2, name, len);
+ }
+ 
++// Get a UTF8 value from the constant pool and turn it into a garbage
++// collected char array.
++int _Jv_ClassReader::pool_Utf8_to_char_arr (int index, char** entry)
++{
++  check_tag (index, JV_CONSTANT_Utf8);
++  int len = get2u (bytes + offsets[index]);
++  *entry = reinterpret_cast<char *> (_Jv_AllocBytes (len + 1));
++  (*entry)[len] = '\0';
++  memcpy (*entry, bytes + offsets[index] + 2, len);
++  return len + 1;
++}
++
+ void _Jv_ClassReader::read_one_field_attribute (int field_index,
+ 						bool *found_value)
+ {
+@@ -980,6 +995,34 @@
+       method->line_table_len = table_len;
+       method->line_table = table;
+     }
++  else if (is_attribute_name (name, "LocalVariableTable"))
++    {
++      _Jv_InterpMethod *method = reinterpret_cast<_Jv_InterpMethod *>
++	                       (def_interp->interpreted_methods[method_index]);
++      if (method->local_var_table != NULL)
++        throw_class_format_error ("Method already has LocalVariableTable");
++	
++      int table_len = read2u ();
++      _Jv_LocalVarTableEntry *table 
++        = reinterpret_cast<_Jv_LocalVarTableEntry *>
++            (_Jv_AllocRawObj (table_len * sizeof (_Jv_LocalVarTableEntry)));
++                               
++      for (int i = 0; i < table_len; i++)
++        {
++          table[i].bytecode_start_pc = read2u ();
++          table[i].length = read2u ();
++          int len;
++          len = pool_Utf8_to_char_arr (read2u (), &table[i].name);
++          len = pool_Utf8_to_char_arr (read2u (), &table[i].descriptor);
++          table[i].slot = read2u ();
++          
++          if (table[i].slot > method->max_locals || table[i].slot < 0)
++            throw_class_format_error ("Malformed Local Variable Table: Invalid Slot");
++        }
++	    
++      method->local_var_table_len = table_len;
++      method->local_var_table = table;
++    }
+   else
+     {
+       /* ignore unknown code attributes */
+Index: libjava/nogc.cc
+===================================================================
+--- libjava/nogc.cc	(revision 125219)
++++ libjava/nogc.cc	(revision 126334)
+@@ -184,3 +184,9 @@
+ _Jv_ResumeThread (_Jv_Thread_t *thread)
+ {
+ }
++
++int
++_Jv_IsThreadSuspended (_Jv_Thread_t *thread)
++{
++  return 0;
++}
+--- libjava/sources.am.old	2007-07-18 23:38:45.215265000 +0200
++++ libjava/sources.am	2007-07-19 01:28:59.115034261 +0200
+@@ -438,7 +438,6 @@
+ classpath/gnu/classpath/jdwp/util/MonitorInfo.java \
+ classpath/gnu/classpath/jdwp/util/NullObject.java \
+ classpath/gnu/classpath/jdwp/util/Signature.java \
+-classpath/gnu/classpath/jdwp/util/Value.java \
+ classpath/gnu/classpath/jdwp/util/VariableTable.java
+ 
+ gnu_classpath_jdwp_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_util_source_files)))
+--- libjava/Makefile.in.old	2007-07-18 23:39:00.645497000 +0200
++++ libjava/Makefile.in	2007-07-19 01:34:08.019694018 +0200
+@@ -1270,7 +1270,6 @@
+ classpath/gnu/classpath/jdwp/util/MonitorInfo.java \
+ classpath/gnu/classpath/jdwp/util/NullObject.java \
+ classpath/gnu/classpath/jdwp/util/Signature.java \
+-classpath/gnu/classpath/jdwp/util/Value.java \
+ classpath/gnu/classpath/jdwp/util/VariableTable.java
+ 
+ gnu_classpath_jdwp_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_util_source_files)))
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-unwind-r111705.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-unwind-r111705.dpatch
@@ -0,0 +1,744 @@
+#! /bin/sh -e
+
+# DP: gcc unwind r11705, taken from the trunk
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-03-04  Jakub Jelinek  <jakub@redhat.com>
+
+	* unwind-dw2.h (_Unwind_FrameState): Add REG_SAVED_VAL_OFFSET
+	and REG_SAVED_VAL_EXP constants.
+	* unwind-dw2.c (struct _Unwind_Context): Add by_value array.
+	(_Unwind_GetGR, _Unwind_SetGR, _Unwind_GetGRPtr, _Unwind_SetGRPtr):
+	Handle regs stored by value.
+	(_Unwind_SetGRValue, _Unwind_GRByValue): New functions.
+	(execute_cfa_program): Handle DW_CFA_val_offset,
+	DW_CFA_val_offset_sf and DW_CFA_val_expression.
+	(uw_update_context_1): Handle REG_SAVED_REG with regs stored by
+	value specially.  Handle REG_SAVED_VAL_OFFSET and REG_SAVED_VAL_EXP.
+	(uw_install_context_1): Handle target regs stored by value.
+
+
+2006-03-04  Jakub Jelinek  <jakub@redhat.com>
+
+	* gcc.target/i386/cleanup-1.c: New test.
+	* gcc.target/i386/cleanup-2.c: New test.
+
+
+Index: gcc/testsuite/gcc.target/i386/cleanup-1.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/cleanup-1.c	(Revision 0)
++++ gcc/testsuite/gcc.target/i386/cleanup-1.c	(Revision 111705)
+@@ -0,0 +1,240 @@
++/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
++/* { dg-options "-fexceptions -fnon-call-exceptions -fasynchronous-unwind-tables -O2" } */
++/* Test complex CFA value expressions.  */
++
++#include <unwind.h>
++#include <stdlib.h>
++#include <string.h>
++#include <stdio.h>
++#include <unistd.h>
++
++static _Unwind_Reason_Code
++force_unwind_stop (int version, _Unwind_Action actions,
++		   _Unwind_Exception_Class exc_class,
++		   struct _Unwind_Exception *exc_obj,
++		   struct _Unwind_Context *context,
++		   void *stop_parameter)
++{
++  if (actions & _UA_END_OF_STACK)
++    abort ();
++  return _URC_NO_REASON;
++}
++
++static void
++force_unwind ()
++{
++  struct _Unwind_Exception *exc = malloc (sizeof (*exc));
++  memset (&exc->exception_class, 0, sizeof (exc->exception_class));
++  exc->exception_cleanup = 0;
++
++  _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
++  abort ();
++}
++
++int count;
++
++static void
++counter (void *p __attribute__((unused)))
++{
++  ++count;
++}
++
++static void
++handler (void *p __attribute__((unused)))
++{
++  if (count != 2)
++    abort ();
++  _exit (0);
++}
++
++static int __attribute__((noinline))
++fn5 (void)
++{
++  char dummy __attribute__((cleanup (counter)));
++  force_unwind ();
++  return 0;
++}
++
++void
++bar (void)
++{
++  char dummy __attribute__((cleanup (counter)));
++  fn5 ();
++}
++
++void __attribute__((noinline))
++foo (int x)
++{
++  char buf[256];
++#ifdef __i386__
++  __asm (
++	"testl	%0, %0\n\t"
++	"jnz	1f\n\t"
++	".subsection 1\n\t"
++	".type	_L_mutex_lock_%=, @function\n"
++"_L_mutex_lock_%=:\n"
++"1:\t"	"leal	%1, %%ecx\n"
++"2:\t"	"call	bar\n"
++"3:\t"	"jmp	18f\n"
++"4:\t"	".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
++	".previous\n\t"
++	".section	.eh_frame,\"a\",@progbits\n"
++"5:\t"	".long	7f-6f	# Length of Common Information Entry\n"
++"6:\t"	".long	0x0	# CIE Identifier Tag\n\t"
++	".byte	0x1	# CIE Version\n\t"
++	".ascii \"zR\\0\"	# CIE Augmentation\n\t"
++	".uleb128 0x1	# CIE Code Alignment Factor\n\t"
++	".sleb128 -4	# CIE Data Alignment Factor\n\t"
++	".byte	0x8	# CIE RA Column\n\t"
++	".uleb128 0x1	# Augmentation size\n\t"
++	".byte	0x1b	# FDE Encoding (pcrel sdata4)\n\t"
++	".byte	0xc	# DW_CFA_def_cfa\n\t"
++	".uleb128 0x4\n\t"
++	".uleb128 0x0\n\t"
++	".align 4\n"
++"7:\t"	".long	17f-8f	# FDE Length\n"
++"8:\t"	".long	8b-5b	# FDE CIE offset\n\t"
++	".long	1b-.	# FDE initial location\n\t"
++	".long	4b-1b	# FDE address range\n\t"
++	".uleb128 0x0	# Augmentation size\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x8\n\t"
++	".uleb128 10f-9f\n"
++"9:\t"	".byte	0x78	# DW_OP_breg8\n\t"
++	".sleb128 3b-1b\n"
++"10:\t"	".byte	0x40 + (2b-1b) # DW_CFA_advance_loc\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x8\n\t"
++	".uleb128 12f-11f\n"
++"11:\t"	".byte	0x78	# DW_OP_breg8\n\t"
++	".sleb128 3b-2b\n"
++"12:\t"	".byte	0x40 + (3b-2b-1) # DW_CFA_advance_loc\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x8\n\t"
++	".uleb128 16f-13f\n"
++"13:\t"	".byte	0x78	# DW_OP_breg8\n\t"
++	".sleb128 15f-14f\n\t"
++	".byte	0x0d	# DW_OP_const4s\n"
++"14:\t"	".4byte	3b-.\n\t"
++	".byte	0x1c	# DW_OP_minus\n\t"
++	".byte	0x0d	# DW_OP_const4s\n"
++"15:\t"	".4byte	18f-.\n\t"
++	".byte	0x22	# DW_OP_plus\n"
++"16:\t"	".align 4\n"
++"17:\t"	".previous\n"
++"18:"
++	: : "r" (x), "m" (x), "r" (buf)
++	: "memory", "eax", "edx", "ecx");
++#elif defined __x86_64__
++  __asm (
++	"testl	%0, %0\n\t"
++	"jnz	1f\n\t"
++	".subsection 1\n\t"
++	".type	_L_mutex_lock_%=, @function\n"
++"_L_mutex_lock_%=:\n"
++"1:\t"	"leaq	%1, %%rdi\n"
++"2:\t"	"subq	$128, %%rsp\n"
++"3:\t"	"call	bar\n"
++"4:\t"	"addq	$128, %%rsp\n"
++"5:\t"	"jmp	24f\n"
++"6:\t"	".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
++	".previous\n\t"
++	".section	.eh_frame,\"a\",@progbits\n"
++"7:\t"	".long	9f-8f	# Length of Common Information Entry\n"
++"8:\t"	".long	0x0	# CIE Identifier Tag\n\t"
++	".byte	0x1	# CIE Version\n\t"
++	".ascii \"zR\\0\"	# CIE Augmentation\n\t"
++	".uleb128 0x1	# CIE Code Alignment Factor\n\t"
++	".sleb128 -8	# CIE Data Alignment Factor\n\t"
++	".byte	0x10	# CIE RA Column\n\t"
++	".uleb128 0x1	# Augmentation size\n\t"
++	".byte	0x1b	# FDE Encoding (pcrel sdata4)\n\t"
++	".byte	0x12	# DW_CFA_def_cfa_sf\n\t"
++	".uleb128 0x7\n\t"
++	".sleb128 16\n\t"
++	".align 8\n"
++"9:\t"	".long	23f-10f	# FDE Length\n"
++"10:\t"	".long	10b-7b	# FDE CIE offset\n\t"
++	".long	1b-.	# FDE initial location\n\t"
++	".long	6b-1b	# FDE address range\n\t"
++	".uleb128 0x0	# Augmentation size\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x10\n\t"
++	".uleb128 12f-11f\n"
++"11:\t"	".byte	0x80	# DW_OP_breg16\n\t"
++	".sleb128 4b-1b\n"
++"12:\t"	".byte	0x40 + (2b-1b) # DW_CFA_advance_loc\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x10\n\t"
++	".uleb128 14f-13f\n"
++"13:\t"	".byte	0x80	# DW_OP_breg16\n\t"
++	".sleb128 4b-2b\n"
++"14:\t"	".byte	0x40 + (3b-2b) # DW_CFA_advance_loc\n\t"
++	".byte	0x0e	# DW_CFA_def_cfa_offset\n\t"
++	".uleb128 0\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x10\n\t"
++	".uleb128 16f-15f\n"
++"15:\t"	".byte	0x80	# DW_OP_breg16\n\t"
++	".sleb128 4b-3b\n"
++"16:\t"	".byte	0x40 + (4b-3b-1) # DW_CFA_advance_loc\n\t"
++	".byte	0x0e	# DW_CFA_def_cfa_offset\n\t"
++	".uleb128 128\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x10\n\t"
++	".uleb128 20f-17f\n"
++"17:\t"	".byte	0x80	# DW_OP_breg16\n\t"
++	".sleb128 19f-18f\n\t"
++	".byte	0x0d	# DW_OP_const4s\n"
++"18:\t"	".4byte	4b-.\n\t"
++	".byte	0x1c	# DW_OP_minus\n\t"
++	".byte	0x0d	# DW_OP_const4s\n"
++"19:\t"	".4byte	24f-.\n\t"
++	".byte	0x22	# DW_OP_plus\n"
++"20:\t"	".byte	0x40 + (5b-4b+1) # DW_CFA_advance_loc\n\t"
++	".byte	0x13	# DW_CFA_def_cfa_offset_sf\n\t"
++	".sleb128 16\n\t"
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x10\n\t"
++	".uleb128 22f-21f\n"
++"21:\t"	".byte	0x80	# DW_OP_breg16\n\t"
++	".sleb128 4b-5b\n"
++"22:\t"	".align 8\n"
++"23:\t"	".previous\n"
++"24:"
++	: : "r" (x), "m" (x), "r" (buf)
++	: "memory", "rax", "rdx", "rcx", "rsi", "rdi",
++	  "r8", "r9", "r10", "r11");
++#else
++# error Unsupported test architecture
++#endif
++}
++
++static int __attribute__((noinline))
++fn2 (void)
++{
++  foo (3);
++  return 0;
++}
++
++static int __attribute__((noinline))
++fn1 (void)
++{
++  fn2 ();
++  return 0;
++}
++
++static void *
++fn0 (void)
++{
++  char dummy __attribute__((cleanup (handler)));
++  fn1 ();
++  return 0;
++}
++
++int
++main (void)
++{
++  fn0 ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/i386/cleanup-2.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/cleanup-2.c	(Revision 0)
++++ gcc/testsuite/gcc.target/i386/cleanup-2.c	(Revision 111705)
+@@ -0,0 +1,205 @@
++/* { dg-do run { target { { i?86-*-linux* x86_64-*-linux* } && lp64 } } } */
++/* { dg-options "-fexceptions -fnon-call-exceptions -fasynchronous-unwind-tables -O2" } */
++/* Test complex CFA value expressions.  */
++
++#include <unwind.h>
++#include <stdlib.h>
++#include <string.h>
++#include <stdio.h>
++#include <unistd.h>
++
++static _Unwind_Reason_Code
++force_unwind_stop (int version, _Unwind_Action actions,
++		   _Unwind_Exception_Class exc_class,
++		   struct _Unwind_Exception *exc_obj,
++		   struct _Unwind_Context *context,
++		   void *stop_parameter)
++{
++  if (actions & _UA_END_OF_STACK)
++    abort ();
++  return _URC_NO_REASON;
++}
++
++static void
++force_unwind ()
++{
++  struct _Unwind_Exception *exc = malloc (sizeof (*exc));
++  memset (&exc->exception_class, 0, sizeof (exc->exception_class));
++  exc->exception_cleanup = 0;
++
++  _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
++  abort ();
++}
++
++int count;
++
++static void
++counter (void *p __attribute__((unused)))
++{
++  ++count;
++}
++
++static void
++handler (void *p __attribute__((unused)))
++{
++  if (count != 2)
++    abort ();
++  _exit (0);
++}
++
++static int __attribute__((noinline))
++fn5 (void)
++{
++  char dummy __attribute__((cleanup (counter)));
++  force_unwind ();
++  return 0;
++}
++
++void
++bar (void)
++{
++  char dummy __attribute__((cleanup (counter)));
++  fn5 ();
++}
++
++void __attribute__((noinline))
++foo (int x)
++{
++  char buf[256];
++#ifdef __x86_64__
++  __asm (
++	"testl	%0, %0\n\t"
++	"jnz	1f\n\t"
++	".subsection 1\n\t"
++	".type	_L_mutex_lock_%=, @function\n"
++"_L_mutex_lock_%=:\n"
++"1:\t"	"leaq	%1, %%rdi\n"
++"2:\t"	"subq	$128, %%rsp\n"
++"3:\t"	"call	bar\n"
++"4:\t"	"addq	$128, %%rsp\n"
++"5:\t"	"jmp	21f\n"
++"6:\t"	".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
++	".previous\n\t"
++	".section	.eh_frame,\"a\",@progbits\n"
++"7:\t"	".long	9f-8f	# Length of Common Information Entry\n"
++"8:\t"	".long	0x0	# CIE Identifier Tag\n\t"
++	".byte	0x1	# CIE Version\n\t"
++	".ascii \"zR\\0\"	# CIE Augmentation\n\t"
++	".uleb128 0x1	# CIE Code Alignment Factor\n\t"
++	".sleb128 -8	# CIE Data Alignment Factor\n\t"
++	".byte	0x10	# CIE RA Column\n\t"
++	".uleb128 0x1	# Augmentation size\n\t"
++	".byte	0x1b	# FDE Encoding (pcrel sdata4)\n\t"
++	".byte	0xc	# DW_CFA_def_cfa\n\t"
++	".uleb128 0x7\n\t"
++	".uleb128 0x0\n\t"
++	".align 8\n"
++"9:\t"	".long	20f-10f	# FDE Length\n"
++"10:\t"	".long	10b-7b	# FDE CIE offset\n\t"
++	".long	1b-.	# FDE initial location\n\t"
++	".long	6b-1b	# FDE address range\n\t"
++	".uleb128 0x0	# Augmentation size\n\t"
++	/* This CFA expression computes the address right
++	   past the jnz instruction above, from %rip somewhere
++	   within the _L_mutex_lock_%= subsection.  */
++	".byte	0x16	# DW_CFA_val_expression\n\t"
++	".uleb128 0x10\n\t"
++	".uleb128 19f-11f\n"
++"11:\t"	".byte	0x80	# DW_OP_breg16\n\t"
++	".sleb128 0\n"
++"12:\t"	".byte	0x12	# DW_OP_dup\n\t"
++	".byte	0x94	# DW_OP_deref_size\n\t"
++	".byte	1\n\t"
++	".byte	0x12	# DW_OP_dup\n\t"
++	".byte	0x08	# DW_OP_const1u\n\t"
++	".byte	0x48\n\t"
++	".byte	0x2e	# DW_OP_ne\n\t"
++	".byte	0x28	# DW_OP_bra\n\t"
++	".2byte	16f-13f\n"
++"13:\t"	".byte	0x13	# DW_OP_drop\n\t"
++	".byte	0x23	# DW_OP_plus_uconst\n\t"
++	".uleb128 1\n\t"
++	".byte	0x12	# DW_OP_dup\n\t"
++	".byte	0x94	# DW_OP_deref_size\n\t"
++	".byte	1\n\t"
++	".byte	0x08	# DW_OP_const1u\n\t"
++	".byte	0x81\n\t"
++	".byte	0x2e	# DW_OP_ne\n\t"
++	".byte	0x28	# DW_OP_bra\n\t"
++	".2byte	15f-14f\n"
++"14:\t"	".byte	0x23	# DW_OP_plus_uconst\n\t"
++	".uleb128 3b-2b-1\n\t"
++	".byte	0x2f	# DW_OP_skip\n\t"
++	".2byte	12b-15f\n"
++"15:\t"	".byte	0x23	# DW_OP_plus_uconst\n\t"
++	".uleb128 2b-1b-1\n\t"
++	".byte	0x2f	# DW_OP_skip\n\t"
++	".2byte	12b-16f\n"
++"16:\t"	".byte	0x08	# DW_OP_const1u\n\t"
++	".byte	0xe8\n\t"
++	".byte	0x2e	# DW_OP_ne\n\t"
++	".byte	0x28	# DW_OP_bra\n\t"
++	".2byte	18f-17f\n"
++"17:\t"	".byte	0x23	# DW_OP_plus_uconst\n\t"
++	".uleb128 4b-3b\n\t"
++	".byte	0x2f	# DW_OP_skip\n\t"
++	".2byte	12b-18f\n"
++"18:\t"	".byte	0x23	# DW_OP_plus_uconst\n\t"
++	".uleb128 1\n\t"
++	".byte	0x12	# DW_OP_dup\n\t"
++	".byte	0x94	# DW_OP_deref_size\n\t"
++	".byte	4\n\t"
++	".byte	0x08	# DW_OP_const1u\n\t"
++	".byte	72 - (6b-5b) * 8 # (6b-5b) == 5 ? 32 : 56\n\t"
++	".byte	0x24	# DW_OP_shl\n\t"
++	".byte	0x08	# DW_OP_const1u\n\t"
++	".byte	72 - (6b-5b) * 8 # (6b-5b) == 5 ? 32 : 56\n\t"
++	".byte	0x26	# DW_OP_shra\n\t"
++	".byte	0x22	# DW_OP_plus\n\t"
++	".byte	0x23	# DW_OP_plus_uconst\n\t"
++	".uleb128 6b-5b-1\n"
++"19:\t"	".byte	0x40 + (3b-1b) # DW_CFA_advance_loc\n\t"
++	".byte	0xe	# DW_CFA_def_cfa_offset\n\t"
++	".uleb128 128\n\t"
++	".byte	0x40 + (5b-3b) # DW_CFA_advance_loc\n\t"
++	".byte	0xe	# DW_CFA_def_cfa_offset\n\t"
++	".uleb128 0\n\t"
++	".align 8\n"
++"20:\t"	".previous\n"
++"21:"
++	: : "r" (x), "m" (x), "r" (buf)
++	: "memory", "rax", "rdx", "rcx", "rsi", "rdi",
++	  "r8", "r9", "r10", "r11");
++#else
++# error Unsupported test architecture
++#endif
++}
++
++static int __attribute__((noinline))
++fn2 (void)
++{
++  foo (3);
++  return 0;
++}
++
++static int __attribute__((noinline))
++fn1 (void)
++{
++  fn2 ();
++  return 0;
++}
++
++static void *
++fn0 (void)
++{
++  char dummy __attribute__((cleanup (handler)));
++  fn1 ();
++  return 0;
++}
++
++int
++main (void)
++{
++  fn0 ();
++  return 0;
++}
+Index: gcc/unwind-dw2.c
+===================================================================
+--- gcc/unwind-dw2.c	(Revision 111704)
++++ gcc/unwind-dw2.c	(Revision 111705)
+@@ -72,6 +72,7 @@
+   struct dwarf_eh_bases bases;
+   _Unwind_Word args_size;
+   char signal_frame;
++  char by_value[DWARF_FRAME_REGISTERS+1];
+ };
+ 
+ /* Byte size of every register managed by these routines.  */
+@@ -118,7 +119,7 @@
+ static inline unsigned long
+ read_8s (const void *p) { const union unaligned *up = p; return up->s8; }
+ 
+-/* Get the value of register REG as saved in CONTEXT.  */
++/* Get the value of register INDEX as saved in CONTEXT.  */
+ 
+ inline _Unwind_Word
+ _Unwind_GetGR (struct _Unwind_Context *context, int index)
+@@ -136,6 +137,9 @@
+   size = dwarf_reg_size_table[index];
+   ptr = context->reg[index];
+ 
++  if (context->by_value[index])
++    return (_Unwind_Word) (_Unwind_Internal_Ptr) ptr;
++
+   /* This will segfault if the register hasn't been saved.  */
+   if (size == sizeof(_Unwind_Ptr))
+     return * (_Unwind_Ptr *) ptr;
+@@ -160,7 +164,7 @@
+   return (_Unwind_Ptr) context->cfa;
+ }
+ 
+-/* Overwrite the saved value for register REG in CONTEXT with VAL.  */
++/* Overwrite the saved value for register INDEX in CONTEXT with VAL.  */
+ 
+ inline void
+ _Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
+@@ -171,6 +175,13 @@
+   index = DWARF_REG_TO_UNWIND_COLUMN (index);
+   gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
+   size = dwarf_reg_size_table[index];
++
++  if (context->by_value[index])
++    {
++      context->reg[index] = (void *) (_Unwind_Internal_Ptr) val;
++      return;
++    }
++
+   ptr = context->reg[index];
+ 
+   if (size == sizeof(_Unwind_Ptr))
+@@ -188,6 +199,8 @@
+ _Unwind_GetGRPtr (struct _Unwind_Context *context, int index)
+ {
+   index = DWARF_REG_TO_UNWIND_COLUMN (index);
++  if (context->by_value[index])
++    return &context->reg[index];
+   return context->reg[index];
+ }
+ 
+@@ -197,9 +210,34 @@
+ _Unwind_SetGRPtr (struct _Unwind_Context *context, int index, void *p)
+ {
+   index = DWARF_REG_TO_UNWIND_COLUMN (index);
++  context->by_value[index] = 0;
+   context->reg[index] = p;
+ }
+ 
++/* Overwrite the saved value for register INDEX in CONTEXT with VAL.  */
++
++static inline void
++_Unwind_SetGRValue (struct _Unwind_Context *context, int index,
++		    _Unwind_Word val)
++{
++  index = DWARF_REG_TO_UNWIND_COLUMN (index);
++  gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
++  gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Ptr));
++
++  context->by_value[index] = 1;
++  context->reg[index] = (void *) (_Unwind_Internal_Ptr) val;
++}
++
++/* Return non-zero if register INDEX is stored by value rather than
++   by reference.  */
++
++static inline int
++_Unwind_GRByValue (struct _Unwind_Context *context, int index)
++{
++  index = DWARF_REG_TO_UNWIND_COLUMN (index);
++  return context->by_value[index];
++}
++
+ /* Retrieve the return address for CONTEXT.  */
+ 
+ inline _Unwind_Ptr
+@@ -922,7 +960,7 @@
+ 	  insn_ptr += utmp;
+ 	  break;
+ 
+-	  /* From the dwarf3 draft.  */
++	  /* Dwarf3.  */
+ 	case DW_CFA_offset_extended_sf:
+ 	  insn_ptr = read_uleb128 (insn_ptr, &reg);
+ 	  insn_ptr = read_sleb128 (insn_ptr, &stmp);
+@@ -945,6 +983,33 @@
+ 	  /* cfa_how deliberately not set.  */
+ 	  break;
+ 
++	case DW_CFA_val_offset:
++	  insn_ptr = read_uleb128 (insn_ptr, &reg);
++	  insn_ptr = read_uleb128 (insn_ptr, &utmp);
++	  offset = (_Unwind_Sword) utmp * fs->data_align;
++	  fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
++	    = REG_SAVED_VAL_OFFSET;
++	  fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
++	  break;
++
++	case DW_CFA_val_offset_sf:
++	  insn_ptr = read_uleb128 (insn_ptr, &reg);
++	  insn_ptr = read_sleb128 (insn_ptr, &stmp);
++	  offset = stmp * fs->data_align;
++	  fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
++	    = REG_SAVED_VAL_OFFSET;
++	  fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
++	  break;
++
++	case DW_CFA_val_expression:
++	  insn_ptr = read_uleb128 (insn_ptr, &reg);
++	  fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
++	    = REG_SAVED_VAL_EXP;
++	  fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
++	  insn_ptr = read_uleb128 (insn_ptr, &utmp);
++	  insn_ptr += utmp;
++	  break;
++
+ 	case DW_CFA_GNU_window_save:
+ 	  /* ??? Hardcoded for SPARC register window configuration.  */
+ 	  for (reg = 16; reg < 32; ++reg)
+@@ -1113,7 +1178,7 @@
+ 
+ static inline void
+ _Unwind_SetSpColumn (struct _Unwind_Context *context, void *cfa,
+-                     _Unwind_SpTmp *tmp_sp)
++		     _Unwind_SpTmp *tmp_sp)
+ {
+   int size = dwarf_reg_size_table[__builtin_dwarf_sp_column ()];
+   
+@@ -1194,9 +1259,14 @@
+ 	break;
+ 
+       case REG_SAVED_REG:
+-	_Unwind_SetGRPtr
+-	  (context, i,
+-	   _Unwind_GetGRPtr (&orig_context, fs->regs.reg[i].loc.reg));
++	if (_Unwind_GRByValue (&orig_context, fs->regs.reg[i].loc.reg))
++	  _Unwind_SetGRValue (context, i,
++			      _Unwind_GetGR (&orig_context,
++					     fs->regs.reg[i].loc.reg));
++	else
++	  _Unwind_SetGRPtr (context, i,
++			    _Unwind_GetGRPtr (&orig_context,
++					      fs->regs.reg[i].loc.reg));
+ 	break;
+ 
+       case REG_SAVED_EXP:
+@@ -1211,6 +1281,25 @@
+ 	  _Unwind_SetGRPtr (context, i, (void *) val);
+ 	}
+ 	break;
++
++      case REG_SAVED_VAL_OFFSET:
++	_Unwind_SetGRValue (context, i,
++			    (_Unwind_Internal_Ptr)
++			    (cfa + fs->regs.reg[i].loc.offset));
++	break;
++
++      case REG_SAVED_VAL_EXP:
++	{
++	  const unsigned char *exp = fs->regs.reg[i].loc.exp;
++	  _Unwind_Word len;
++	  _Unwind_Ptr val;
++
++	  exp = read_uleb128 (exp, &len);
++	  val = execute_stack_op (exp, exp + len, &orig_context,
++				  (_Unwind_Ptr) cfa);
++	  _Unwind_SetGRValue (context, i, val);
++	}
++	break;
+       }
+ 
+   context->signal_frame = fs->signal_frame;
+@@ -1327,14 +1416,31 @@
+   /* If the target frame does not have a saved stack pointer,
+      then set up the target's CFA.  */
+   if (!_Unwind_GetGRPtr (target, __builtin_dwarf_sp_column ()))
+-	_Unwind_SetSpColumn (target, target->cfa, &sp_slot);
++    _Unwind_SetSpColumn (target, target->cfa, &sp_slot);
+ 
+   for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
+     {
+       void *c = current->reg[i];
+       void *t = target->reg[i];
+ 
+-      if (t && c && t != c)
++      gcc_assert (current->by_value[i] == 0);
++      if (target->by_value[i] && c)
++	{
++	  _Unwind_Word w;
++	  _Unwind_Ptr p;
++	  if (dwarf_reg_size_table[i] == sizeof (_Unwind_Word))
++	    {
++	      w = (_Unwind_Internal_Ptr) t;
++	      memcpy (c, &w, sizeof (_Unwind_Word));
++	    }
++	  else
++	    {
++	      gcc_assert (dwarf_reg_size_table[i] == sizeof (_Unwind_Ptr));
++	      p = (_Unwind_Internal_Ptr) t;
++	      memcpy (c, &p, sizeof (_Unwind_Ptr));
++	    }
++	}
++      else if (t && c && t != c)
+ 	memcpy (c, t, dwarf_reg_size_table[i]);
+     }
+ 
+Index: gcc/unwind-dw2.h
+===================================================================
+--- gcc/unwind-dw2.h	(Revision 111704)
++++ gcc/unwind-dw2.h	(Revision 111705)
+@@ -53,7 +53,9 @@
+ 	REG_UNSAVED,
+ 	REG_SAVED_OFFSET,
+ 	REG_SAVED_REG,
+-	REG_SAVED_EXP
++	REG_SAVED_EXP,
++	REG_SAVED_VAL_OFFSET,
++	REG_SAVED_VAL_EXP
+       } how;
+     } reg[DWARF_FRAME_REGISTERS+1];
+ 
--- gcc-4.1-4.1.2.orig/debian/patches/pr33639.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr33639.dpatch
@@ -0,0 +1,109 @@
+#! /bin/sh -e
+
+# DP: Fix PR java/33639
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2007-10-03  Andrew Haley  <aph@redhat.com>
+
+        PR java/33639
+        * class.c (mangled_classname): Detect and replace illegal
+        characters in assembly language symbols.
+        (gen_indirect_dispatch_tables): Call mangled_classname() on
+        the type.
+
+--- gcc/java/class.c	2007/10/03 11:37:44	128980
++++ gcc/java/class.c	2007/10/03 12:59:57	128981
+@@ -314,10 +314,63 @@
+ tree
+ mangled_classname (const char *prefix, tree type)
+ {
++  tree result;
+   tree ident = TYPE_NAME (type);
+   if (TREE_CODE (ident) != IDENTIFIER_NODE)
+     ident = DECL_NAME (ident);
+-  return identifier_subst (ident, prefix, '.', '_', "");
++  result = identifier_subst (ident, prefix, '.', '_', "");
++
++  /* Replace any characters that aren't in the set [0-9a-zA-Z_$] with
++     "_0xXX".  Class names containing such chracters are uncommon, but
++     they do sometimes occur in class files.  Without this check,
++     these names cause assembly errors.
++
++     There is a possibility that a real class name could conflict with
++     the identifier we generate, but it is unlikely and will
++     immediately be detected as an assembler error.  At some point we
++     should do something more elaborate (perhaps using the full
++     unicode mangling scheme) in order to prevent such a conflict.  */
++  {
++    int i;
++    const int len = IDENTIFIER_LENGTH (result);
++    const char *p = IDENTIFIER_POINTER (result);
++    int illegal_chars = 0;
++
++    /* Make two passes over the identifier.  The first pass is merely
++       to count illegal characters; we need to do this in order to
++       allocate a buffer.  */
++    for (i = 0; i < len; i++)
++      {
++	char c = p[i];
++	illegal_chars += (! ISALNUM (c) && c != '_' && c != '$');
++      }
++
++    /* And the second pass, which is rarely executed, does the
++       rewriting.  */
++    if (illegal_chars != 0)
++      {
++	char *buffer = alloca (illegal_chars * 4 + len + 1);
++	int j;
++
++	for (i = 0, j = 0; i < len; i++)
++	  {
++	    char c = p[i];
++	    if (! ISALNUM (c) && c != '_' && c != '$')
++	      {
++		buffer[j++] = '_';
++		sprintf (&buffer[j], "0x%02x", c);
++		j += 4;
++	      }
++	    else
++	      buffer[j++] = c;
++	  }
++
++	buffer[j] = 0;
++	result = get_identifier (buffer);
++      }
++  }
++
++  return result;
+ }
+ 
+ tree
+@@ -389,7 +442,7 @@
+ void
+ gen_indirect_dispatch_tables (tree type)
+ {
+-  const char *typename = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
++  const char *typename = IDENTIFIER_POINTER (mangled_classname ("", type));
+   {  
+     tree field = NULL;
+     char *buf = alloca (strlen (typename) + strlen ("_catch_classes_") + 1);
--- gcc-4.1-4.1.2.orig/debian/patches/pr26864.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr26864.dpatch
@@ -0,0 +1,59 @@
+#! /bin/sh -e
+
+# DP: Backport fix for PR libmudflap/26864 from the trunk.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-04-22  Frank Ch. Eigler  <fche@redhat.com>
+
+	PR libmudflap/26864
+	* common.opt (flag_mudflap_threads): Overload flag_mudflap.
+	* tree-mudflap.c (flag_mudflap_threads): Derive from flag_mudflap.
+ 
+Index: gcc/tree-mudflap.c
+===================================================================
+--- gcc/tree-mudflap.c	(revision 113178)
++++ gcc/tree-mudflap.c	(revision 113179)
+@@ -48,6 +48,10 @@
+ 
+ /* Internal function decls */
+ 
++
++/* Options.  */
++#define flag_mudflap_threads (flag_mudflap == 2)
++
+ /* Helpers.  */
+ static tree mf_build_string (const char *string);
+ static tree mf_varname_tree (tree);
+Index: gcc/common.opt
+===================================================================
+--- gcc/common.opt	(revision 113178)
++++ gcc/common.opt	(revision 113179)
+@@ -605,7 +605,7 @@
+ Add mudflap bounds-checking instrumentation for single-threaded program
+ 
+ fmudflapth
+-Common RejectNegative Report Var(flag_mudflap_threads)
++Common RejectNegative Report VarExists Var(flag_mudflap,2)
+ Add mudflap bounds-checking instrumentation for multi-threaded program
+ 
+ fmudflapir
--- gcc-4.1-4.1.2.orig/debian/patches/arm-tune.dpatch
+++ gcc-4.1-4.1.2/debian/patches/arm-tune.dpatch
@@ -0,0 +1,72 @@
+#! /bin/sh -e
+
+# DP: ARM patch for default tuning
+
+src=gcc
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    src=$3/gcc
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 --fuzz 10 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 --fuzz 10 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- src/gcc/config/arm/arm.c	2001/05/24 21:09:05	1.146
++++ src/gcc/config/arm/arm.c	2001/06/17 19:10:22
+@@ -430,6 +430,32 @@ arm_override_options ()
+ 	abort ();
+ 
+       insn_flags = sel->flags;
++
++#ifdef TARGET_TUNE_DEFAULT
++      /* If the user didn't specify tuning either, use the target's
++	 preferred flags.  */
++      if (tune_flags == 0)
++	{
++	  struct processors * tunesel;
++	  struct cpu_default * tunedef;
++
++	  for (tunedef = cpu_defaults; tunedef->name; tunedef++)
++	    if (tunedef->cpu == TARGET_TUNE_DEFAULT)
++	      break;
++
++	  if (tunedef->name == NULL)
++	    abort ();
++
++	  for (tunesel = all_cores; tunesel->name != NULL; tunesel++)
++	    if (streq (tunedef->name, tunesel->name))
++	      break;
++
++	  if (tunesel->name == NULL)
++	    abort ();
++
++	  tune_flags = tunesel->flags;
++	}
++#endif
+       
+       /* Now check to see if the user has specified some command line
+ 	 switch that require certain abilities from the cpu.  */
+--- src/gcc/config/arm/linux-elf.h~	13 Dec 2001 00:27:30 -0000	1.30
++++ src/gcc/config/arm/linux-elf.h	Thu May 23 07:59:25 2002
+@@ -122,6 +122,9 @@
+ #undef  CC1_SPEC
+ #define CC1_SPEC "%{profile:-p}"
+ 
++/* Tune for XScale.  */
++#define TARGET_TUNE_DEFAULT TARGET_CPU_xscale
++
+ /* Copied from config/linux.h, needed for libstdc++v3.  */
+ #undef CPLUSPLUS_CPP_SPEC
+ #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
--- gcc-4.1-4.1.2.orig/debian/patches/ada-acats.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ada-acats.dpatch
@@ -0,0 +1,78 @@
+#! /bin/sh -e
+
+# DP: - When running the ACATS, look for the gnat tools in their new
+# DP:   directory (build/gnattools), and for the shared libraries in
+# DP:   build/gcc/ada/rts, build/libgnatvsn and build/libgnatprj.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/testsuite/ada/acats/run_acats~
++++ gcc/testsuite/ada/acats/run_acats	2006-04-22 08:57:50.933824704 +0200
+@@ -11,23 +11,42 @@
+ host_gnatmake=`type gnatmake | awk '{print $3}'`
+ ROOT=`${PWDCMD-pwd}`
+ BASE=`cd $ROOT/../../..; ${PWDCMD-pwd}`
+-
+-PATH=$BASE:$ROOT:$PATH
+-ADA_INCLUDE_PATH=$BASE/ada/rts
++GNATTOOLS=`cd $BASE/../gnattools; ${PWDCMD-pwd}`
++LIBGNATVSN=`cd $BASE/../libgnatvsn; ${PWDCMD-pwd}`
++LIBGNATPRJ=`cd $BASE/../libgnatprj; ${PWDCMD-pwd}`
++
++PATH=$GNATTOOLS:$BASE:$ROOT:$PATH
++ADA_INCLUDE_DIR=$BASE/ada/rts
++ADA_INCLUDE_PATH=$ADA_INCLUDE_DIR:$LIBGNATVSN:$LIBGNATPRJ
+ LD_LIBRARY_PATH=$ADA_INCLUDE_PATH:$BASE:$LD_LIBRARY_PATH
+ ADA_OBJECTS_PATH=$ADA_INCLUDE_PATH
+ 
+-if [ ! -d $ADA_INCLUDE_PATH ]; then
++if [ ! -d $ADA_INCLUDE_DIR ]; then
+    echo gnatlib missing, exiting.
+    exit 1
+ fi
+ 
+-if [ ! -f $BASE/gnatchop ]; then
++if [ ! -d $GNATTOOLS ]; then
++   echo gnattools missing, exiting.
++   exit 1
++fi
++
++if [ ! -d $LIBGNATVSN ]; then
++   echo libgnatvsn missing, exiting.
++   exit 1
++fi
++
++if [ ! -d $LIBGNATPRJ ]; then
++   echo libgnatprj missing, exiting.
++   exit 1
++fi
++
++if [ ! -f $GNATTOOLS/gnatchop ]; then
+    echo gnattools missing, exiting.
+    exit 1
+ fi
+ 
+-if [ ! -f $BASE/gnatmake ]; then
++if [ ! -f $GNATTOOLS/gnatmake ]; then
+    echo gnattools missing, exiting.
+    exit 1
+ fi
--- gcc-4.1-4.1.2.orig/debian/patches/arm-pr30486.dpatch
+++ gcc-4.1-4.1.2/debian/patches/arm-pr30486.dpatch
@@ -0,0 +1,44 @@
+#! /bin/sh -e
+
+# DP: Fix 30486 on ARM
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Index: trunk/gcc/fortran/trans-types.c
+===================================================================
+--- trunk/gcc/fortran/trans-types.c	(revision 170435)
++++ trunk/gcc/fortran/trans-types.c	(working copy)
+@@ -1800,6 +1800,13 @@ gfc_type_for_size (unsigned bits, int un
+ 	  if (type && bits == TYPE_PRECISION (type))
+ 	    return type;
+ 	}
++
++      /* Handle TImode as a special case because it is used by some backends
++         (eg. ARM) even though it is not available for normal use.  */
++#if HOST_BITS_PER_WIDE_INT >= 64
++      if (bits == TYPE_PRECISION (intTI_type_node))
++	return intTI_type_node;
++#endif
+     }
+   else
+     {
+
--- gcc-4.1-4.1.2.orig/debian/patches/libffi-backport.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libffi-backport.dpatch
@@ -0,0 +1,6142 @@
+#! /bin/sh -e
+
+# DP: libffi backport
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        cd ${dir}libffi && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        rm -f ${dir}libffi/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+diff -urN old/libffi/Makefile.am src/libffi/Makefile.am
+--- old/libffi/Makefile.am	2005-07-19 21:15:36.000000000 +0000
++++ src/libffi/Makefile.am	2006-08-03 21:47:15.336009808 +0000
+@@ -26,7 +26,8 @@
+ 	src/sparc/ffi.c \
+ 	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \
+ 	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
+-	src/pa/ffi.c src/pa/linux.S src/frv/eabi.S src/frv/ffitarget.h
++	src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
++	src/frv/eabi.S src/frv/ffitarget.h
+ 
+ ## ################################################################
+ 
+@@ -141,9 +142,12 @@
+ if SH64
+ nodist_libffi_la_SOURCES += src/sh64/sysv.S src/sh64/ffi.c
+ endif
+-if PA
++if PA_LINUX
+ nodist_libffi_la_SOURCES += src/pa/linux.S src/pa/ffi.c
+ endif
++if PA_HPUX
++nodist_libffi_la_SOURCES += src/pa/hpux32.S src/pa/ffi.c
++endif
+ 
+ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+@@ -154,3 +158,8 @@
+ 
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
++
++# No install-html support
++.PHONY: install-html
++install-html:
++
+diff -urN old/libffi/Makefile.in src/libffi/Makefile.in
+--- old/libffi/Makefile.in	2006-05-24 23:46:15.000000000 +0000
++++ src/libffi/Makefile.in	2006-08-03 21:47:14.273171384 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.5 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004  Free Software Foundation, Inc.
++# 2003, 2004, 2005  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -59,7 +59,8 @@
+ @X86_64_TRUE@am__append_18 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S
+ @SH_TRUE@am__append_19 = src/sh/sysv.S src/sh/ffi.c
+ @SH64_TRUE@am__append_20 = src/sh64/sysv.S src/sh64/ffi.c
+-@PA_TRUE@am__append_21 = src/pa/linux.S src/pa/ffi.c
++@PA_LINUX_TRUE@am__append_21 = src/pa/linux.S src/pa/ffi.c
++@PA_HPUX_TRUE@am__append_22 = src/pa/hpux32.S src/pa/ffi.c
+ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \
+ 	$(srcdir)/../config.guess $(srcdir)/../config.sub \
+ 	$(srcdir)/../depcomp $(srcdir)/../install-sh \
+@@ -123,7 +124,8 @@
+ @X86_64_TRUE@	src/x86/ffi.lo src/x86/sysv.lo
+ @SH_TRUE@am__objects_19 = src/sh/sysv.lo src/sh/ffi.lo
+ @SH64_TRUE@am__objects_20 = src/sh64/sysv.lo src/sh64/ffi.lo
+-@PA_TRUE@am__objects_21 = src/pa/linux.lo src/pa/ffi.lo
++@PA_LINUX_TRUE@am__objects_21 = src/pa/linux.lo src/pa/ffi.lo
++@PA_HPUX_TRUE@am__objects_22 = src/pa/hpux32.lo src/pa/ffi.lo
+ nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ 	$(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ 	$(am__objects_6) $(am__objects_7) $(am__objects_8) \
+@@ -131,21 +133,22 @@
+ 	$(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ 	$(am__objects_15) $(am__objects_16) $(am__objects_17) \
+ 	$(am__objects_18) $(am__objects_19) $(am__objects_20) \
+-	$(am__objects_21)
++	$(am__objects_21) $(am__objects_22)
+ libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \
+ 	$(nodist_libffi_la_OBJECTS)
+ libffi_convenience_la_LIBADD =
+-am__objects_22 = src/debug.lo src/prep_cif.lo src/types.lo \
++am__objects_23 = src/debug.lo src/prep_cif.lo src/types.lo \
+ 	src/raw_api.lo src/java_raw_api.lo
+-am_libffi_convenience_la_OBJECTS = $(am__objects_22)
+-am__objects_23 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
++am_libffi_convenience_la_OBJECTS = $(am__objects_23)
++am__objects_24 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
+ 	$(am__objects_4) $(am__objects_5) $(am__objects_6) \
+ 	$(am__objects_7) $(am__objects_8) $(am__objects_9) \
+ 	$(am__objects_10) $(am__objects_11) $(am__objects_12) \
+ 	$(am__objects_13) $(am__objects_14) $(am__objects_15) \
+ 	$(am__objects_16) $(am__objects_17) $(am__objects_18) \
+-	$(am__objects_19) $(am__objects_20) $(am__objects_21)
+-nodist_libffi_convenience_la_OBJECTS = $(am__objects_23)
++	$(am__objects_19) $(am__objects_20) $(am__objects_21) \
++	$(am__objects_22)
++nodist_libffi_convenience_la_OBJECTS = $(am__objects_24)
+ libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \
+ 	$(nodist_libffi_convenience_la_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+@@ -250,6 +253,8 @@
+ MIPS_LINUX_FALSE = @MIPS_LINUX_FALSE@
+ MIPS_LINUX_TRUE = @MIPS_LINUX_TRUE@
+ OBJEXT = @OBJEXT@
++PA64_HPUX_FALSE = @PA64_HPUX_FALSE@
++PA64_HPUX_TRUE = @PA64_HPUX_TRUE@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+@@ -257,8 +262,10 @@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+-PA_FALSE = @PA_FALSE@
+-PA_TRUE = @PA_TRUE@
++PA_HPUX_FALSE = @PA_HPUX_FALSE@
++PA_HPUX_TRUE = @PA_HPUX_TRUE@
++PA_LINUX_FALSE = @PA_LINUX_FALSE@
++PA_LINUX_TRUE = @PA_LINUX_TRUE@
+ POWERPC_AIX_FALSE = @POWERPC_AIX_FALSE@
+ POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+@@ -359,7 +366,8 @@
+ 	src/sparc/ffi.c \
+ 	src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \
+ 	src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \
+-	src/pa/ffi.c src/pa/linux.S src/frv/eabi.S src/frv/ffitarget.h
++	src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \
++	src/frv/eabi.S src/frv/ffitarget.h
+ 
+ 
+ # Work around what appears to be a GNU make bug handling MAKEFLAGS
+@@ -412,7 +420,7 @@
+ 	$(am__append_12) $(am__append_13) $(am__append_14) \
+ 	$(am__append_15) $(am__append_16) $(am__append_17) \
+ 	$(am__append_18) $(am__append_19) $(am__append_20) \
+-	$(am__append_21)
++	$(am__append_21) $(am__append_22)
+ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+ AM_CFLAGS = -Wall -g -fexceptions
+@@ -695,6 +703,8 @@
+ src/pa/linux.lo: src/pa/$(am__dirstamp) \
+ 	src/pa/$(DEPDIR)/$(am__dirstamp)
+ src/pa/ffi.lo: src/pa/$(am__dirstamp) src/pa/$(DEPDIR)/$(am__dirstamp)
++src/pa/hpux32.lo: src/pa/$(am__dirstamp) \
++	src/pa/$(DEPDIR)/$(am__dirstamp)
+ libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES) 
+ 	$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
+ libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES) 
+@@ -742,6 +752,8 @@
+ 	-rm -f src/mips/o32.lo
+ 	-rm -f src/pa/ffi.$(OBJEXT)
+ 	-rm -f src/pa/ffi.lo
++	-rm -f src/pa/hpux32.$(OBJEXT)
++	-rm -f src/pa/hpux32.lo
+ 	-rm -f src/pa/linux.$(OBJEXT)
+ 	-rm -f src/pa/linux.lo
+ 	-rm -f src/powerpc/aix.$(OBJEXT)
+@@ -908,7 +920,13 @@
+ #     (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+-	@set fnord $$MAKEFLAGS; amf=$$2; \
++	@failcom='exit 1'; \
++	for f in x $$MAKEFLAGS; do \
++	  case $$f in \
++	    *=* | --[!k]*);; \
++	    *k*) failcom='fail=yes';; \
++	  esac; \
++	done; \
+ 	dot_seen=no; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+@@ -920,7 +938,7 @@
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+-	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
++	  || eval $$failcom; \
+ 	done; \
+ 	if test "$$dot_seen" = "no"; then \
+ 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+@@ -928,7 +946,13 @@
+ 
+ mostlyclean-recursive clean-recursive distclean-recursive \
+ maintainer-clean-recursive:
+-	@set fnord $$MAKEFLAGS; amf=$$2; \
++	@failcom='exit 1'; \
++	for f in x $$MAKEFLAGS; do \
++	  case $$f in \
++	    *=* | --[!k]*);; \
++	    *k*) failcom='fail=yes';; \
++	  esac; \
++	done; \
+ 	dot_seen=no; \
+ 	case "$@" in \
+ 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+@@ -949,7 +973,7 @@
+ 	    local_target="$$target"; \
+ 	  fi; \
+ 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+-	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
++	  || eval $$failcom; \
+ 	done && test -z "$$fail"
+ tags-recursive:
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+@@ -1303,6 +1327,10 @@
+ 	tags tags-recursive uninstall uninstall-am uninstall-info-am \
+ 	uninstall-toolexeclibLTLIBRARIES
+ 
++
++# No install-html support
++.PHONY: install-html
++install-html:
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -urN old/libffi/README src/libffi/README
+--- old/libffi/README	2004-01-25 06:58:33.000000000 +0000
++++ src/libffi/README	2006-08-03 21:47:15.335009960 +0000
+@@ -372,15 +372,6 @@
+ arguments' test).
+ 
+ 
+-What's With The Crazy Comments?
+-===============================
+-
+-You might notice a number of cryptic comments in the code, delimited
+-by /*@ and @*/. These are annotations read by the program LCLint, a
+-tool for statically checking C programs. You can read all about it at
+-<http://larch-www.lcs.mit.edu:8001/larch/lclint/index.html>.
+-
+-
+ History
+ =======
+ 
+diff -urN old/libffi/aclocal.m4 src/libffi/aclocal.m4
+--- old/libffi/aclocal.m4	2006-05-24 23:46:15.000000000 +0000
++++ src/libffi/aclocal.m4	2006-08-03 21:47:15.342008896 +0000
+@@ -1,7 +1,7 @@
+-# generated automatically by aclocal 1.9.3 -*- Autoconf -*-
++# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
+ 
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+-# Free Software Foundation, Inc.
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
++# 2005  Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -11,23 +11,11 @@
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+-#                                                        -*- Autoconf -*-
+-# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
+-# Generated from amversion.in; do not edit by hand.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+ # AM_AUTOMAKE_VERSION(VERSION)
+ # ----------------------------
+@@ -40,28 +28,17 @@
+ # Call AM_AUTOMAKE_VERSION so it can be traced.
+ # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-	 [AM_AUTOMAKE_VERSION([1.9.3])])
+-
+-# Figure out how to run the assembler.             -*- Autoconf -*-
++	 [AM_AUTOMAKE_VERSION([1.9.5])])
+ 
+-# serial 3
++# Figure out how to run the assembler.                      -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
++# Copyright (C) 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# serial 4
+ 
+ # AM_PROG_AS
+ # ----------
+@@ -74,24 +51,13 @@
+ AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+ ])
+ 
+-# AM_AUX_DIR_EXPAND
+-
+-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
++# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+ 
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+ # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+ # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+@@ -138,26 +104,16 @@
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+ ])
+ 
+-# AM_CONDITIONAL                                              -*- Autoconf -*-
+-
+-# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
++# AM_CONDITIONAL                                            -*- Autoconf -*-
+ 
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# serial 6
++# serial 7
+ 
+ # AM_CONDITIONAL(NAME, SHELL-CONDITION)
+ # -------------------------------------
+@@ -181,26 +137,15 @@
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+ 
+-# serial 7						-*- Autoconf -*-
+ 
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ # Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
++# serial 8
+ 
+ # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+ # written in clear, in which case automake, when reading aclocal.m4,
+@@ -209,7 +154,6 @@
+ # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+ 
+ 
+-
+ # _AM_DEPENDENCIES(NAME)
+ # ----------------------
+ # See how the compiler implements dependency checking.
+@@ -349,27 +293,16 @@
+ AC_SUBST([AMDEPBACKSLASH])
+ ])
+ 
+-# Generate code to set up dependency tracking.   -*- Autoconf -*-
++# Generate code to set up dependency tracking.              -*- Autoconf -*-
+ 
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+-#   Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-#serial 2
++#serial 3
+ 
+ # _AM_OUTPUT_DEPENDENCY_COMMANDS
+ # ------------------------------
+@@ -428,30 +361,19 @@
+      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+ ])
+ 
+-# Do all the work for Automake.                            -*- Autoconf -*-
++# Do all the work for Automake.                             -*- Autoconf -*-
+ 
+-# This macro actually does too much some checks are only needed if
+-# your package does certain things.  But this isn't really a big deal.
+-
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ # Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# serial 12
+ 
+-# serial 11
++# This macro actually does too much.  Some checks are only needed if
++# your package does certain things.  But this isn't really a big deal.
+ 
+ # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+ # AM_INIT_AUTOMAKE([OPTIONS])
+@@ -553,51 +475,27 @@
+ done
+ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+ 
++# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
+-
+-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+ AC_SUBST(install_sh)])
+ 
+-#                                                          -*- Autoconf -*-
+-# Copyright (C) 2003  Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# serial 1
++# serial 2
+ 
+ # Check whether the underlying file-system supports filenames
+ # with a leading dot.  For instance MS-DOS doesn't.
+@@ -612,28 +510,17 @@
+ rmdir .tst 2>/dev/null
+ AC_SUBST([am__leading_dot])])
+ 
+-# Add --enable-maintainer-mode option to configure.
++# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+ # From Jim Meyering
+ 
+-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
++# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+ # Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# serial 3
++# serial 4
+ 
+ AC_DEFUN([AM_MAINTAINER_MODE],
+ [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+@@ -652,26 +539,15 @@
+ 
+ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+ 
+-# Check to see how 'make' treats includes.	-*- Autoconf -*-
+-
+-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
++# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+ 
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# serial 2
++# serial 3
+ 
+ # AM_MAKE_INCLUDE()
+ # -----------------
+@@ -715,29 +591,17 @@
+ rm -f confinc confmf
+ ])
+ 
+-# serial 2
++# Copyright (C) 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# serial 3
+ 
+ # AM_PROG_CC_C_O
+ # --------------
+ # Like AC_PROG_CC_C_O, but changed for automake.
+-
+-# Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+ AC_DEFUN([AM_PROG_CC_C_O],
+ [AC_REQUIRE([AC_PROG_CC_C_O])dnl
+ AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+@@ -755,27 +619,16 @@
+ fi
+ ])
+ 
+-#  -*- Autoconf -*-
++# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+ 
++# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# serial 3
++# serial 4
+ 
+ # AM_MISSING_PROG(NAME, PROGRAM)
+ # ------------------------------
+@@ -801,27 +654,16 @@
+ fi
+ ])
+ 
++# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
+ # AM_PROG_MKDIR_P
+ # ---------------
+ # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+-
+-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
++#
+ # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+ # created by `make install' are always world readable, even if the
+ # installer happens to have an overly restrictive umask (e.g. 077).
+@@ -875,25 +717,14 @@
+ fi
+ AC_SUBST([mkdir_p])])
+ 
+-# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004
++# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005
+ # Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# serial 4
++# serial 5
+ 
+ # AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
+ # ---------------------------------------------------
+@@ -944,26 +775,15 @@
+ CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ CC="$CC"])])dnl
+ 
+-# Helper functions for option handling.                    -*- Autoconf -*-
++# Helper functions for option handling.                     -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# serial 2
++# serial 3
+ 
+ # _AM_MANGLE_OPTION(NAME)
+ # -----------------------
+@@ -988,28 +808,16 @@
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+ 
+-#
+-# Check to make sure that the build environment is sane.
+-#
+-
+-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
++# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+ 
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
++# Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
+-# serial 3
++# serial 4
+ 
+ # AM_SANITY_CHECK
+ # ---------------
+@@ -1052,25 +860,14 @@
+ fi
+ AC_MSG_RESULT(yes)])
+ 
+-# AM_PROG_INSTALL_STRIP
+-
+-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
++# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
++# AM_PROG_INSTALL_STRIP
++# ---------------------
+ # One issue with vendor `install' (even GNU) is that you can't
+ # specify the program used to strip binaries.  This is especially
+ # annoying in cross-compiling environments, where the build's strip
+@@ -1093,25 +890,13 @@
+ 
+ # Check how to create a tarball.                            -*- Autoconf -*-
+ 
+-# Copyright (C) 2004  Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# 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.  See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# serial 1
++# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
++#
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+ 
++# serial 2
+ 
+ # _AM_PROG_TAR(FORMAT)
+ # --------------------
+diff -urN old/libffi/configure.ac src/libffi/configure.ac
+--- old/libffi/configure.ac	2005-08-11 21:18:24.000000000 +0000
++++ src/libffi/configure.ac	2006-08-03 21:47:15.336009808 +0000
+@@ -57,7 +57,7 @@
+ sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
+ sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
+ sparc*-*-rtems*) TARGET=SPARC; TARGETDIR=sparc;;
+-sparc64-*-linux* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
++sparc64-*-linux* | sparc64-*-freebsd* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;;
+ alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
+ 	TARGET=ALPHA; TARGETDIR=alpha
+ 	# Support 128-bit long double, changable via command-line switch.
+@@ -82,7 +82,9 @@
+ sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
+ sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
+ sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
+-hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;;
++hppa*-*-linux* | parisc*-*-linux*) TARGET=PA_LINUX; TARGETDIR=pa;;
++hppa*64-*-hpux*) TARGET=PA64_HPUX; TARGETDIR=pa;;
++hppa*-*-hpux*) TARGET=PA_HPUX; TARGETDIR=pa;;
+ esac
+ 
+ AC_SUBST(AM_RUNTESTFLAGS)
+@@ -111,7 +113,9 @@
+ AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
+ AM_CONDITIONAL(SH, test x$TARGET = xSH)
+ AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
+-AM_CONDITIONAL(PA, test x$TARGET = xPA)
++AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX)
++AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX)
++AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX)
+ 
+ case x$TARGET in
+   xMIPS*) TARGET=MIPS ;;
+diff -urN old/libffi/include/Makefile.in src/libffi/include/Makefile.in
+--- old/libffi/include/Makefile.in	2005-07-19 21:15:36.000000000 +0000
++++ src/libffi/include/Makefile.in	2006-08-03 21:47:14.274171232 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.5 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004  Free Software Foundation, Inc.
++# 2003, 2004, 2005  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -123,6 +123,8 @@
+ MIPS_LINUX_FALSE = @MIPS_LINUX_FALSE@
+ MIPS_LINUX_TRUE = @MIPS_LINUX_TRUE@
+ OBJEXT = @OBJEXT@
++PA64_HPUX_FALSE = @PA64_HPUX_FALSE@
++PA64_HPUX_TRUE = @PA64_HPUX_TRUE@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+@@ -130,8 +132,10 @@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+-PA_FALSE = @PA_FALSE@
+-PA_TRUE = @PA_TRUE@
++PA_HPUX_FALSE = @PA_HPUX_FALSE@
++PA_HPUX_TRUE = @PA_HPUX_TRUE@
++PA_LINUX_FALSE = @PA_LINUX_FALSE@
++PA_LINUX_TRUE = @PA_LINUX_TRUE@
+ POWERPC_AIX_FALSE = @POWERPC_AIX_FALSE@
+ POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+diff -urN old/libffi/src/arm/ffi.c src/libffi/src/arm/ffi.c
+--- old/libffi/src/arm/ffi.c	2004-10-27 15:10:22.000000000 +0000
++++ src/libffi/src/arm/ffi.c	2006-08-03 21:47:14.456143568 +0000
+@@ -31,9 +31,7 @@
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments */
+ 
+-/*@-exportheader@*/
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+-/*@=exportheader@*/
+ {
+   register unsigned int i;
+   register void **p_argv;
+@@ -136,20 +134,10 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_SYSV(void (*)(char *, extended_cif *), 
+-			  /*@out@*/ extended_cif *, 
+-			  unsigned, unsigned, 
+-			  /*@out@*/ unsigned *, 
+-			  void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
+-
+-void ffi_call(/*@dependent@*/ ffi_cif *cif, 
+-	      void (*fn)(), 
+-	      /*@out@*/ void *rvalue, 
+-	      /*@dependent@*/ void **avalue)
++extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
++			  unsigned, unsigned, unsigned *, void (*fn)());
++
++void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+@@ -162,9 +150,7 @@
+   if ((rvalue == NULL) && 
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -173,10 +159,9 @@
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+-      /*@-usedef@*/
+-      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue,
++		    fn);
++
+       break;
+     default:
+       FFI_ASSERT(0);
+diff -urN old/libffi/src/debug.c src/libffi/src/debug.c
+--- old/libffi/src/debug.c	2003-10-21 19:01:58.000000000 +0000
++++ src/libffi/src/debug.c	2006-08-03 21:47:14.466142048 +0000
+@@ -31,7 +31,7 @@
+ void ffi_stop_here(void)
+ {
+   /* This function is only useful for debugging purposes.
+-     Place a breakpoint on ffi_stop_here to be notified of 
++     Place a breakpoint on ffi_stop_here to be notified of
+      significant events. */
+ }
+ 
+@@ -50,10 +50,9 @@
+ {
+   FFI_ASSERT_AT(a != NULL, file, line);
+ 
+-  /*@-usedef@*/
+   FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line);
+   FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line);
+   FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line);
+   FFI_ASSERT_AT(a->type != FFI_TYPE_STRUCT || a->elements != NULL, file, line);
+-  /*@=usedef@*/
++
+ }
+diff -urN old/libffi/src/ffitest.c src/libffi/src/ffitest.c
+--- old/libffi/src/ffitest.c	2003-04-18 12:32:36.000000000 +0000
++++ src/libffi/src/ffitest.c	2006-08-03 21:47:14.276170928 +0000
+@@ -1,1314 +0,0 @@
+-/* -----------------------------------------------------------------------
+-   ffitest.c - Copyright (c) 1996, 1997, 1998, 2002, 2003  Red Hat, Inc.
+-
+-   Permission is hereby granted, free of charge, to any person obtaining
+-   a copy of this software and associated documentation files (the
+-   ``Software''), to deal in the Software without restriction, including
+-   without limitation the rights to use, copy, modify, merge, publish,
+-   distribute, sublicense, and/or sell copies of the Software, and to
+-   permit persons to whom the Software is furnished to do so, subject to
+-   the following conditions:
+-
+-   The above copyright notice and this permission notice shall be included
+-   in all copies or substantial portions of the Software.
+-
+-   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+-   IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+-   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+-   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+-   OTHER DEALINGS IN THE SOFTWARE.
+-   ----------------------------------------------------------------------- */
+-
+-#include <ffi.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <float.h>
+-
+-/* This is lame. Long double support is barely there under SunOS 4.x  */
+-#if defined(SPARC) && (SIZEOF_LONG_DOUBLE != 16)
+-#define BROKEN_LONG_DOUBLE
+-#endif
+-
+-#define CHECK(x) !(x) ? fail(__FILE__, __LINE__) : 0 
+-
+-static int fail(char *file, int line)
+-{
+-  fprintf(stderr, "Test failure: %s line %d\n", file, line);
+-  exit(EXIT_FAILURE);
+-  /*@notreached@*/
+-  return 0;
+-}
+-
+-#define MAX_ARGS 256
+-
+-static size_t my_strlen(char *s)
+-{
+-  return (strlen(s));
+-}
+-
+-#ifdef X86_WIN32
+-static size_t __attribute__((stdcall)) my_stdcall_strlen(char *s)
+-{
+-  return (strlen(s));
+-}
+-#endif /* X86_WIN32 */
+-
+-static int promotion(signed char sc, signed short ss, 
+-		     unsigned char uc, unsigned short us)
+-{
+-  int r = (int) sc + (int) ss + (int) uc + (int) us;
+-
+-  return r;
+-}
+-
+-static signed char return_sc(signed char sc)
+-{
+-  return sc;
+-}
+-
+-static unsigned char return_uc(unsigned char uc)
+-{
+-  return uc;
+-}
+-
+-static long long return_ll(long long ll)
+-{
+-  return ll;
+-}
+-
+-static int floating(int a, float b, double c, long double d, int e)
+-{
+-  int i;
+-
+-#if 0
+-  /* This is ifdef'd out for now. long double support under SunOS/gcc
+-     is pretty much non-existent.  You'll get the odd bus error in library
+-     routines like printf().  */
+-  printf("%d %f %f %Lf %d\n", a, (double)b, c, d, e);
+-#endif
+-
+-  i = (int) ((float)a/b + ((float)c/(float)d));
+-
+-  return i;
+-}
+-
+-static float many(float f1,
+-		  float f2,
+-		  float f3,
+-		  float f4,
+-		  float f5,
+-		  float f6,
+-		  float f7,
+-		  float f8,
+-		  float f9,
+-		  float f10,
+-		  float f11,
+-		  float f12,
+-		  float f13)
+-{
+-#if 0
+-  printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
+-	 (double) f1, (double) f2, (double) f3, (double) f4, (double) f5, 
+-	 (double) f6, (double) f7, (double) f8, (double) f9, (double) f10,
+-	 (double) f11, (double) f12, (double) f13);
+-#endif
+-
+-  return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
+-}
+-
+-#ifdef X86_WIN32
+-static float __attribute__((stdcall)) stdcall_many(float f1,
+-						   float f2,
+-						   float f3,
+-						   float f4,
+-						   float f5,
+-						   float f6,
+-						   float f7,
+-						   float f8,
+-						   float f9,
+-						   float f10,
+-						   float f11,
+-						   float f12,
+-						   float f13)
+-{
+-  return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
+-}
+-#endif /* X86_WIN32 */
+-
+-static double dblit(float f)
+-{
+-  return f/3.0;
+-}
+-
+-static long double ldblit(float f)
+-{
+-  return (long double) (((long double) f)/ (long double) 3.0);
+-}
+-
+-typedef struct
+-{
+-  unsigned char uc;
+-  double d;
+-  unsigned int ui;
+-} test_structure_1;
+-
+-typedef struct
+-{
+-  double d1;
+-  double d2;
+-} test_structure_2;
+-
+-typedef struct
+-{
+-  int si;
+-} test_structure_3;
+-
+-typedef struct
+-{
+-  unsigned ui1;
+-  unsigned ui2;
+-  unsigned ui3;
+-} test_structure_4;
+-
+-typedef struct
+-{
+-  char c1;
+-  char c2;
+-} test_structure_5;
+-
+-typedef struct
+-{
+-  float f;
+-  double d;
+-} test_structure_6;
+-
+-typedef struct
+-{
+-  float f1;
+-  float f2;
+-  double d;
+-} test_structure_7;
+-
+-typedef struct
+-{
+-  float f1;
+-  float f2;
+-  float f3;
+-  float f4;
+-} test_structure_8;
+-
+-typedef struct
+-{
+-  float f;
+-  int i;
+-} test_structure_9;
+-
+-static test_structure_1 struct1(test_structure_1 ts)
+-{
+-  /*@-type@*/
+-  ts.uc++;
+-  /*@=type@*/
+-  ts.d--;
+-  ts.ui++;
+-
+-  return ts;
+-}
+-
+-static test_structure_2 struct2(test_structure_2 ts)
+-{
+-  ts.d1--;
+-  ts.d2--;
+-
+-  return ts;
+-}
+-
+-static test_structure_3 struct3(test_structure_3 ts)
+-{
+-  ts.si = -(ts.si*2);
+-
+-  return ts;
+-}
+-
+-static test_structure_4 struct4(test_structure_4 ts)
+-{
+-  ts.ui3 = ts.ui1 * ts.ui2 * ts.ui3;
+-
+-  return ts;
+-}
+-
+-static test_structure_5 struct5(test_structure_5 ts1, test_structure_5 ts2)
+-{
+-  ts1.c1 += ts2.c1;
+-  ts1.c2 -= ts2.c2;
+-
+-  return ts1;
+-}
+-
+-static test_structure_6 struct6 (test_structure_6 ts)
+-{
+-  ts.f += 1;
+-  ts.d += 1;
+-
+-  return ts;
+-}
+-
+-static test_structure_7 struct7 (test_structure_7 ts)
+-{
+-  ts.f1 += 1;
+-  ts.f2 += 1;
+-  ts.d += 1;
+-
+-  return ts;
+-}
+-
+-static test_structure_8 struct8 (test_structure_8 ts)
+-{
+-  ts.f1 += 1;
+-  ts.f2 += 1;
+-  ts.f3 += 1;
+-  ts.f4 += 1;
+-
+-  return ts;
+-}
+-
+-static test_structure_9 struct9 (test_structure_9 ts)
+-{
+-  ts.f += 1;
+-  ts.i += 1;
+-
+-  return ts;
+-}
+-
+-/* Take an int and a float argument, together with int userdata, and 	*/
+-/* return the sum.							*/
+-#if FFI_CLOSURES
+-static void
+-closure_test_fn(ffi_cif* cif,void* resp,void** args, void* userdata)
+-{
+-  *(ffi_arg*)resp =
+-    (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) +
+-    (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] +
+-    (int)(*(signed short *)args[4]) +
+-    (int)(*(unsigned long long *)args[5]) +
+-    (int)*(int *)args[6] + (int)(*(int *)args[7]) +
+-    (int)(*(double *)args[8]) + (int)*(int *)args[9] +
+-    (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
+-    (int)*(int *)args[12] + (int)(*(int *)args[13]) +
+-    (int)(*(int *)args[14]) +  *(int *)args[15] + (int)(long)userdata;
+-
+-    	printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
+-	       (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), 
+-	       (int)(*(unsigned long long *)args[2]),
+-	       (int)*(int *)args[3], (int)(*(signed short *)args[4]), 
+-	       (int)(*(unsigned long long *)args[5]),
+-	       (int)*(int *)args[6], (int)(*(int *)args[7]), 
+-	       (int)(*(double *)args[8]), (int)*(int *)args[9],
+-	       (int)(*(int *)args[10]), (int)(*(float *)args[11]),
+-	       (int)*(int *)args[12], (int)(*(int *)args[13]), 
+-	       (int)(*(int *)args[14]),*(int *)args[15],
+-	       (int)(long)userdata, (int)*(ffi_arg *)resp);
+-}
+-
+-typedef int (*closure_test_type)(unsigned long long, int, unsigned long long, 
+-				 int, signed short, unsigned long long, int, 
+-				 int, double, int, int, float, int, int, 
+-				 int, int);
+-
+-static void closure_test_fn1(ffi_cif* cif,void* resp,void** args, 
+-			     void* userdata)
+- {
+-    *(ffi_arg*)resp =
+-      (int)*(float *)args[0] +(int)(*(float *)args[1]) + 
+-      (int)(*(float *)args[2]) + (int)*(float *)args[3] +
+-      (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
+-      (int)*(float *)args[6] + (int)(*(int *)args[7]) + 
+-      (int)(*(double*)args[8]) + (int)*(int *)args[9] + 
+-      (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + 
+-      (int)*(int *)args[12] + (int)(*(int *)args[13]) + 
+-      (int)(*(int *)args[14]) + *(int *)args[15] + (int)(long)userdata;
+-
+-    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
+-	   (int)*(float *)args[0], (int)(*(float *)args[1]), 
+-	   (int)(*(float *)args[2]), (int)*(float *)args[3], 
+-	   (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
+-	   (int)*(float *)args[6], (int)(*(int *)args[7]),
+-	   (int)(*(double *)args[8]), (int)*(int *)args[9],
+-	   (int)(*(int *)args[10]), (int)(*(float *)args[11]),
+-	   (int)*(int *)args[12], (int)(*(int *)args[13]),
+-	   (int)(*(int *)args[14]), *(int *)args[15],
+-	   (int)(long)userdata, (int)*(ffi_arg *)resp);
+-}
+-
+-typedef int (*closure_test_type1)(float, float, float, float, signed short, 
+-				  float, float, int, double, int, int, float,
+-				  int, int, int, int);
+-
+-static void closure_test_fn2(ffi_cif* cif,void* resp,void** args, 
+-			     void* userdata)
+- {
+-    *(ffi_arg*)resp =
+-      (int)*(double *)args[0] +(int)(*(double *)args[1]) + 
+-      (int)(*(double *)args[2]) + (int)*(double *)args[3] +
+-      (int)(*(signed short *)args[4]) + (int)(*(double *)args[5]) +
+-      (int)*(double *)args[6] + (int)(*(int *)args[7]) + 
+-      (int)(*(double *)args[8]) + (int)*(int *)args[9] +
+-      (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + 
+-      (int)*(int *)args[12] + (int)(*(float *)args[13]) +
+-      (int)(*(int *)args[14]) + *(int *)args[15] + (int)(long)userdata;
+-
+-    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
+-	   (int)*(double *)args[0], (int)(*(double *)args[1]), 
+-	   (int)(*(double *)args[2]), (int)*(double *)args[3], 
+-	   (int)(*(signed short *)args[4]), (int)(*(double *)args[5]),
+-	   (int)*(double *)args[6], (int)(*(int *)args[7]), 
+-	   (int)(*(double*)args[8]), (int)*(int *)args[9], 
+-	   (int)(*(int *)args[10]), (int)(*(float *)args[11]),
+-	   (int)*(int *)args[12], (int)(*(float *)args[13]), 
+-	   (int)(*(int *)args[14]), *(int *)args[15], (int)(long)userdata, 
+-	   (int)*(ffi_arg *)resp);
+- }
+-
+-typedef int (*closure_test_type2)(double, double, double, double, signed short,
+-				  double, double, int, double, int, int, float,
+-				  int, float, int, int);
+-
+-static void closure_test_fn3(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
+- {
+-    *(ffi_arg*)resp =
+-      (int)*(float *)args[0] +(int)(*(float *)args[1]) + 
+-      (int)(*(float *)args[2]) + (int)*(float *)args[3] +
+-      (int)(*(float *)args[4]) + (int)(*(float *)args[5]) +
+-      (int)*(float *)args[6] + (int)(*(float *)args[7]) + 
+-      (int)(*(double *)args[8]) + (int)*(int *)args[9] +
+-      (int)(*(float *)args[10]) + (int)(*(float *)args[11]) + 
+-      (int)*(int *)args[12] + (int)(*(float *)args[13]) +
+-      (int)(*(float *)args[14]) +  *(int *)args[15] + (int)(long)userdata;
+-
+-    printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
+-	   (int)*(float *)args[0], (int)(*(float *)args[1]), 
+-	   (int)(*(float *)args[2]), (int)*(float *)args[3], 
+-	   (int)(*(float *)args[4]), (int)(*(float *)args[5]),
+-	   (int)*(float *)args[6], (int)(*(float *)args[7]), 
+-	   (int)(*(double *)args[8]), (int)*(int *)args[9], 
+-	   (int)(*(float *)args[10]), (int)(*(float *)args[11]),
+-	   (int)*(int *)args[12], (int)(*(float *)args[13]), 
+-	   (int)(*(float *)args[14]), *(int *)args[15], (int)(long)userdata,
+-	   (int)*(ffi_arg *)resp);
+- }
+-
+-typedef int (*closure_test_type3)(float, float, float, float, float, float,
+-				  float, float, double, int, float, float, int,
+-				  float, float, int);
+-#endif
+-
+-int main(/*@unused@*/ int argc, /*@unused@*/ char *argv[])
+-{
+-  ffi_cif cif;
+-  ffi_type *args[MAX_ARGS];
+-  void *values[MAX_ARGS];
+-  char *s;
+-  signed char sc;
+-  unsigned char uc;
+-  signed short ss;
+-  unsigned short us;
+-  unsigned long ul;
+-  long long ll;
+-  float f;
+-  double d;
+-  long double ld;
+-  signed int si1;
+-  signed int si2;
+-
+-  ffi_arg rint;
+-  long long rlonglong;
+-
+-# if FFI_CLOSURES
+-  /* The closure must not be an automatic variable on
+-     platforms (Solaris) that forbid stack execution by default. */
+-  static ffi_closure cl;
+-  ffi_closure *pcl = &cl;
+-#endif
+-
+-  ffi_type * cl_arg_types[17];
+-
+-  ffi_type ts1_type;
+-  ffi_type ts2_type;
+-  ffi_type ts3_type;
+-  ffi_type ts4_type;  
+-  ffi_type ts5_type;
+-  ffi_type ts6_type;
+-  ffi_type ts7_type;
+-  ffi_type ts8_type;
+-  ffi_type ts9_type;
+-  ffi_type *ts1_type_elements[4];
+-  ffi_type *ts2_type_elements[3];
+-  ffi_type *ts3_type_elements[2];
+-  ffi_type *ts4_type_elements[4];
+-  ffi_type *ts5_type_elements[3];
+-  ffi_type *ts6_type_elements[3];
+-  ffi_type *ts7_type_elements[4];
+-  ffi_type *ts8_type_elements[5];
+-  ffi_type *ts9_type_elements[3];
+-
+-  ts1_type.size = 0;
+-  ts1_type.alignment = 0;
+-  ts1_type.type = FFI_TYPE_STRUCT;
+-
+-  ts2_type.size = 0;
+-  ts2_type.alignment = 0;
+-  ts2_type.type = FFI_TYPE_STRUCT;
+-
+-  ts3_type.size = 0;
+-  ts3_type.alignment = 0;
+-  ts3_type.type = FFI_TYPE_STRUCT;
+-
+-  ts4_type.size = 0;
+-  ts4_type.alignment = 0;
+-  ts4_type.type = FFI_TYPE_STRUCT;
+-
+-  ts5_type.size = 0;
+-  ts5_type.alignment = 0;
+-  ts5_type.type = FFI_TYPE_STRUCT;
+-
+-  ts6_type.size = 0;
+-  ts6_type.alignment = 0;
+-  ts6_type.type = FFI_TYPE_STRUCT;
+-
+-  ts7_type.size = 0;
+-  ts7_type.alignment = 0;
+-  ts7_type.type = FFI_TYPE_STRUCT;
+-
+-  ts8_type.size = 0;
+-  ts8_type.alignment = 0;
+-  ts8_type.type = FFI_TYPE_STRUCT;
+-
+-  ts9_type.size = 0;
+-  ts9_type.alignment = 0;
+-  ts9_type.type = FFI_TYPE_STRUCT;
+-
+-  /*@-immediatetrans@*/
+-  ts1_type.elements = ts1_type_elements;
+-  ts2_type.elements = ts2_type_elements;
+-  ts3_type.elements = ts3_type_elements;
+-  ts4_type.elements = ts4_type_elements;
+-  ts5_type.elements = ts5_type_elements;
+-  ts6_type.elements = ts6_type_elements;
+-  ts7_type.elements = ts7_type_elements;
+-  ts8_type.elements = ts8_type_elements;
+-  ts9_type.elements = ts9_type_elements;
+-  /*@=immediatetrans@*/
+-  
+-  ts1_type_elements[0] = &ffi_type_uchar;
+-  ts1_type_elements[1] = &ffi_type_double;
+-  ts1_type_elements[2] = &ffi_type_uint;
+-  ts1_type_elements[3] = NULL;
+-  
+-  ts2_type_elements[0] = &ffi_type_double;
+-  ts2_type_elements[1] = &ffi_type_double;
+-  ts2_type_elements[2] = NULL;
+-
+-  ts3_type_elements[0] = &ffi_type_sint;
+-  ts3_type_elements[1] = NULL;
+-
+-  ts4_type_elements[0] = &ffi_type_uint;
+-  ts4_type_elements[1] = &ffi_type_uint;
+-  ts4_type_elements[2] = &ffi_type_uint;
+-  ts4_type_elements[3] = NULL;
+-
+-  ts5_type_elements[0] = &ffi_type_schar;
+-  ts5_type_elements[1] = &ffi_type_schar;
+-  ts5_type_elements[2] = NULL;
+-
+-  ts6_type_elements[0] = &ffi_type_float;
+-  ts6_type_elements[1] = &ffi_type_double;
+-  ts6_type_elements[2] = NULL;
+-
+-  ts7_type_elements[0] = &ffi_type_float;
+-  ts7_type_elements[1] = &ffi_type_float;
+-  ts7_type_elements[2] = &ffi_type_double;
+-  ts7_type_elements[3] = NULL;
+-
+-  ts8_type_elements[0] = &ffi_type_float;
+-  ts8_type_elements[1] = &ffi_type_float;
+-  ts8_type_elements[2] = &ffi_type_float;
+-  ts8_type_elements[3] = &ffi_type_float;
+-  ts8_type_elements[4] = NULL;
+-
+-  ts9_type_elements[0] = &ffi_type_float;
+-  ts9_type_elements[1] = &ffi_type_sint;
+-  ts9_type_elements[2] = NULL;
+-
+-  ul = 0;
+-
+-  /* return value tests */
+-  {
+-#if defined(MIPS) /* || defined(ARM) */
+-    puts ("long long tests not run. This is a known bug on this architecture.");
+-#else
+-    args[0] = &ffi_type_sint64;
+-    values[0] = &ll;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ffi_type_sint64, args) == FFI_OK);
+-
+-    for (ll = 0LL; ll < 100LL; ll++)
+-      {
+-	ul++;
+-	ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
+-	CHECK(rlonglong == ll);
+-      }
+-
+-    for (ll = 55555555555000LL; ll < 55555555555100LL; ll++)
+-      {
+-	ul++;
+-	ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
+-	CHECK(rlonglong == ll);
+-      }
+-#endif
+-
+-    args[0] = &ffi_type_schar;
+-    values[0] = &sc;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ffi_type_schar, args) == FFI_OK);
+-
+-    for (sc = (signed char) -127; 
+-	 sc < (signed char) 127; /*@-type@*/ sc++ /*@=type@*/)
+-      {
+-	ul++;
+-	ffi_call(&cif, FFI_FN(return_sc), &rint, values);
+-	CHECK(rint == (ffi_arg) sc);
+-      }
+-
+-    args[0] = &ffi_type_uchar;
+-    values[0] = &uc;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ffi_type_uchar, args) == FFI_OK);
+-
+-    for (uc = (unsigned char) '\x00'; 
+-	 uc < (unsigned char) '\xff'; /*@-type@*/ uc++ /*@=type@*/)
+-      {
+-	ul++;
+-	ffi_call(&cif, FFI_FN(return_uc), &rint, values);
+-	CHECK(rint == (signed int) uc);
+-      }
+-
+-    printf("%lu return value tests run\n", ul);
+-  }
+-
+-#ifdef BROKEN_LONG_DOUBLE
+-  printf ("This architecture has broken `long double' support. No floating point\ntests have been run.\n");
+-#else
+-  /* float arg tests */
+-  {
+-    args[0] = &ffi_type_float;
+-    values[0] = &f;
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ffi_type_longdouble, args) == FFI_OK);
+-
+-    f = 3.14159;
+-
+-#if 0
+-  /* This is ifdef'd out for now. long double support under SunOS/gcc
+-     is pretty much non-existent.  You'll get the odd bus error in library
+-     routines like printf().  */
+-    printf ("%Lf\n", ldblit(f));
+-#endif
+-    ld = 666;
+-    ffi_call(&cif, FFI_FN(ldblit), &ld, values);
+-
+-#if 0
+-  /* This is ifdef'd out for now. long double support under SunOS/gcc
+-     is pretty much non-existent.  You'll get the odd bus error in library
+-     routines like printf().  */
+-    printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
+-#endif
+-
+-    /* These are not always the same!! Check for a reasonable delta */
+-    /*@-realcompare@*/
+-    if (ld - ldblit(f) < LDBL_EPSILON)
+-    /*@=realcompare@*/
+-	puts("long double return value tests ok!");
+-    else
+-        CHECK(0);
+-  }
+-
+-  /* float arg tests */
+-  {
+-    args[0] = &ffi_type_sint;
+-    values[0] = &si1;
+-    args[1] = &ffi_type_float;
+-    values[1] = &f;
+-    args[2] = &ffi_type_double;
+-    values[2] = &d;
+-    args[3] = &ffi_type_longdouble;
+-    values[3] = &ld;
+-    args[4] = &ffi_type_sint;
+-    values[4] = &si2;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 5,
+-		       &ffi_type_sint, args) == FFI_OK);
+-
+-    si1 = 6;
+-    f = 3.14159;
+-    d = (double)1.0/(double)3.0;
+-    ld = 2.71828182846L;
+-    si2 = 10;
+-
+-    floating (si1, f, d, ld, si2);
+-
+-    ffi_call(&cif, FFI_FN(floating), &rint, values);
+-
+-    printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld, si2));
+-
+-    CHECK(rint == floating(si1, f, d, ld, si2));
+-
+-    printf("float arg tests ok!\n");
+-  }
+-#endif
+-
+-  /* strlen tests */
+-  {
+-    args[0] = &ffi_type_pointer;
+-    values[0] = (void*) &s;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ffi_type_sint, args) == FFI_OK);
+-
+-    s = "a";
+-    ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
+-    CHECK(rint == 1);
+-
+-    s = "1234567";
+-    ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
+-    CHECK(rint == 7);
+-
+-    s = "1234567890123456789012345";
+-    ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
+-    CHECK(rint == 25);
+-
+-    printf("strlen tests passed\n");
+-  }
+-
+-  /* float arg tests */
+-  {
+-    args[0] = &ffi_type_float;
+-    values[0] = &f;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ffi_type_double, args) == FFI_OK);
+-
+-    f = 3.14159;
+-
+-    ffi_call(&cif, FFI_FN(dblit), &d, values);
+-
+-    /* These are not always the same!! Check for a reasonable delta */
+-    /*@-realcompare@*/
+-    CHECK(d - dblit(f) < DBL_EPSILON);
+-    /*@=realcompare@*/
+-
+-    printf("double return value tests ok!\n");
+-  }
+-
+-  /* many arg tests */
+-  {
+-    float ff;
+-    float fa[13];
+-    
+-    for (ul = 0; ul < 13; ul++)
+-      {
+-	args[ul] = &ffi_type_float;
+-	values[ul] = &fa[ul];
+-	fa[ul] = (float) ul;
+-      }
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13, 
+-		       &ffi_type_float, args) == FFI_OK);
+-
+-    /*@-usedef@*/
+-    ff = many (fa[0], fa[1],
+-	       fa[2], fa[3],
+-	       fa[4], fa[5],
+-	       fa[6], fa[7],
+-	       fa[8], fa[9],
+-	       fa[10],fa[11],fa[12]);
+-    /*@=usedef@*/
+-
+-    ffi_call(&cif, FFI_FN(many), &f, values);
+-
+-    /*@-realcompare@*/
+-    if (f - ff < FLT_EPSILON)
+-    /*@=realcompare@*/
+-	printf("many arg tests ok!\n");
+-    else
+-#ifdef POWERPC
+-	printf("many arg tests failed!  This is a gcc bug.\n");
+-#else
+-        CHECK(0);
+-#endif
+-  }
+-
+-  /* promotion tests */
+-  {
+-    args[0] = &ffi_type_schar;
+-    args[1] = &ffi_type_sshort;
+-    args[2] = &ffi_type_uchar;
+-    args[3] = &ffi_type_ushort;
+-    values[0] = &sc;
+-    values[1] = &ss;
+-    values[2] = &uc;
+-    values[3] = &us;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, 
+-		       &ffi_type_sint, args) == FFI_OK);
+-
+-    us = 0;
+-    ul = 0;
+-
+-    for (sc = (signed char) -127; 
+-	 sc <= (signed char) 120; /*@-type@*/ sc += 1 /*@=type@*/)
+-      for (ss = -30000; ss <= 30000; ss += 10000)
+-	for (uc = (unsigned char) 0; 
+-	     uc <= (unsigned char) 200; /*@-type@*/ uc += 20 /*@=type@*/)
+-	  for (us = 0; us <= 60000; us += 10000)
+-	    {
+-	      ul++;
+-	      ffi_call(&cif, FFI_FN(promotion), &rint, values);
+-	      CHECK((int)rint == (signed char) sc + (signed short) ss +
+-		    (unsigned char) uc + (unsigned short) us);
+-	    }
+-    printf("%lu promotion tests run\n", ul);
+-  }
+-
+-#ifndef X86_WIN32 /* Structures dont work on Win32 */
+-
+-  /* struct tests */
+-  {
+-    test_structure_1 ts1_arg;
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_1 *ts1_result = 
+-      (test_structure_1 *) malloc (sizeof(test_structure_1));
+-
+-    args[0] = &ts1_type;
+-    values[0] = &ts1_arg;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ts1_type, args) == FFI_OK);
+-
+-    ts1_arg.uc = '\x01';
+-    ts1_arg.d = 3.14159;
+-    ts1_arg.ui = 555;
+-
+-    ffi_call(&cif, FFI_FN(struct1), ts1_result, values);
+-
+-    CHECK(ts1_result->ui == 556);
+-    CHECK(ts1_result->d == 3.14159 - 1);
+-
+-    puts ("structure test 1 ok!\n");
+-
+-    free (ts1_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_2 ts2_arg;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_2 *ts2_result = 
+-      (test_structure_2 *) malloc (sizeof(test_structure_2));
+-
+-    args[0] = &ts2_type;
+-    values[0] = &ts2_arg;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts2_type, args) == FFI_OK);
+-
+-    ts2_arg.d1 = 5.55;
+-    ts2_arg.d2 = 6.66;
+-
+-    printf ("%g\n", ts2_arg.d1);
+-    printf ("%g\n", ts2_arg.d2);
+-
+-    ffi_call(&cif, FFI_FN(struct2), ts2_result, values);
+-
+-    printf ("%g\n", ts2_result->d1);
+-    printf ("%g\n", ts2_result->d2);
+-    
+-    CHECK(ts2_result->d1 == 5.55 - 1);
+-    CHECK(ts2_result->d2 == 6.66 - 1);
+-
+-    printf("structure test 2 ok!\n");
+-
+-    free (ts2_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    int compare_value;
+-    test_structure_3 ts3_arg;
+-    test_structure_3 *ts3_result = 
+-      (test_structure_3 *) malloc (sizeof(test_structure_3));
+-
+-    args[0] = &ts3_type;
+-    values[0] = &ts3_arg;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
+-		       &ts3_type, args) == FFI_OK);
+-
+-    ts3_arg.si = -123;
+-    compare_value = ts3_arg.si;
+-
+-    ffi_call(&cif, FFI_FN(struct3), ts3_result, values);
+-
+-    printf ("%d %d\n", ts3_result->si, -(compare_value*2));
+-
+-    if (ts3_result->si == -(ts3_arg.si*2))
+-	puts ("structure test 3 ok!");
+-    else
+-      {
+-	puts ("Structure test 3 found structure passing bug.");
+-	puts ("  Current versions of GCC are not 100% compliant with the");
+-	puts ("  n32 ABI.  There is a known problem related to passing");
+-	puts ("  small structures.  Send a bug report to the gcc maintainers.");
+-      }
+-
+-    free (ts3_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_4 ts4_arg;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_4 *ts4_result = 
+-      (test_structure_4 *) malloc (sizeof(test_structure_4));
+-
+-    args[0] = &ts4_type;
+-    values[0] = &ts4_arg;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts4_type, args) == FFI_OK);
+-
+-    ts4_arg.ui1 = 2;
+-    ts4_arg.ui2 = 3;
+-    ts4_arg.ui3 = 4;
+-
+-    ffi_call (&cif, FFI_FN(struct4), ts4_result, values);
+-    
+-    if (ts4_result->ui3 == 2U * 3U * 4U)
+-      puts ("structure test 4 ok!");
+-    else
+-      puts ("Structure test 4 found GCC's structure passing bug.");
+-
+-    free (ts4_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_5 ts5_arg1, ts5_arg2;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_5 *ts5_result = 
+-      (test_structure_5 *) malloc (sizeof(test_structure_5));
+-
+-    args[0] = &ts5_type;
+-    args[1] = &ts5_type;
+-    values[0] = &ts5_arg1;
+-    values[1] = &ts5_arg2;
+-    
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ts5_type, args) == FFI_OK);
+-
+-    ts5_arg1.c1 = 2;
+-    ts5_arg1.c2 = 6;
+-    ts5_arg2.c1 = 5;
+-    ts5_arg2.c2 = 3;
+-
+-    ffi_call (&cif, FFI_FN(struct5), ts5_result, values);
+-    
+-    if (ts5_result->c1 == 7 
+-	&& ts5_result->c2 == 3)
+-      puts ("structure test 5 ok!");
+-    else
+-      puts ("Structure test 5 found GCC's structure passing bug.");
+-
+-    free (ts5_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_6 ts6_arg;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_6 *ts6_result = 
+-      (test_structure_6 *) malloc (sizeof(test_structure_6));
+-
+-    args[0] = &ts6_type;
+-    values[0] = &ts6_arg;
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts6_type, args) == FFI_OK);
+-
+-    ts6_arg.f = 5.55f;
+-    ts6_arg.d = 6.66;
+-
+-    printf ("%g\n", ts6_arg.f);
+-    printf ("%g\n", ts6_arg.d);
+-
+-    ffi_call(&cif, FFI_FN(struct6), ts6_result, values);
+-
+-    printf ("%g\n", ts6_result->f);
+-    printf ("%g\n", ts6_result->d);
+-
+-    CHECK(ts6_result->f == 5.55f + 1);
+-    CHECK(ts6_result->d == 6.66 + 1);
+-
+-    printf("structure test 6 ok!\n");
+-
+-    free (ts6_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_7 ts7_arg;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_7 *ts7_result = 
+-      (test_structure_7 *) malloc (sizeof(test_structure_7));
+-
+-    args[0] = &ts7_type;
+-    values[0] = &ts7_arg;
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts7_type, args) == FFI_OK);
+-
+-    ts7_arg.f1 = 5.55f;
+-    ts7_arg.f2 = 55.5f;
+-    ts7_arg.d = 6.66;
+-
+-    printf ("%g\n", ts7_arg.f1);
+-    printf ("%g\n", ts7_arg.f2);
+-    printf ("%g\n", ts7_arg.d);
+-
+-    ffi_call(&cif, FFI_FN(struct7), ts7_result, values);
+-
+-    printf ("%g\n", ts7_result->f1);
+-    printf ("%g\n", ts7_result->f2);
+-    printf ("%g\n", ts7_result->d);
+-
+-    CHECK(ts7_result->f1 == 5.55f + 1);
+-    CHECK(ts7_result->f2 == 55.5f + 1);
+-    CHECK(ts7_result->d == 6.66 + 1);
+-
+-    printf("structure test 7 ok!\n");
+-
+-    free (ts7_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_8 ts8_arg;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_8 *ts8_result = 
+-      (test_structure_8 *) malloc (sizeof(test_structure_8));
+-
+-    args[0] = &ts8_type;
+-    values[0] = &ts8_arg;
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts8_type, args) == FFI_OK);
+-
+-    ts8_arg.f1 = 5.55f;
+-    ts8_arg.f2 = 55.5f;
+-    ts8_arg.f3 = -5.55f;
+-    ts8_arg.f4 = -55.5f;
+-
+-    printf ("%g\n", ts8_arg.f1);
+-    printf ("%g\n", ts8_arg.f2);
+-    printf ("%g\n", ts8_arg.f3);
+-    printf ("%g\n", ts8_arg.f4);
+-
+-    ffi_call(&cif, FFI_FN(struct8), ts8_result, values);
+-
+-    printf ("%g\n", ts8_result->f1);
+-    printf ("%g\n", ts8_result->f2);
+-    printf ("%g\n", ts8_result->f3);
+-    printf ("%g\n", ts8_result->f4);
+-
+-    CHECK(ts8_result->f1 == 5.55f + 1);
+-    CHECK(ts8_result->f2 == 55.5f + 1);
+-    CHECK(ts8_result->f3 == -5.55f + 1);
+-    CHECK(ts8_result->f4 == -55.5f + 1);
+-
+-    printf("structure test 8 ok!\n");
+-
+-    free (ts8_result);
+-  }
+-
+-  /* struct tests */
+-  {
+-    test_structure_9 ts9_arg;
+-
+-    /* This is a hack to get a properly aligned result buffer */
+-    test_structure_9 *ts9_result = 
+-      (test_structure_9 *) malloc (sizeof(test_structure_9));
+-
+-    args[0] = &ts9_type;
+-    values[0] = &ts9_arg;
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts9_type, args) == FFI_OK);
+-
+-    ts9_arg.f = 5.55f;
+-    ts9_arg.i = 5;
+-
+-    printf ("%g\n", ts9_arg.f);
+-    printf ("%d\n", ts9_arg.i);
+-
+-    ffi_call(&cif, FFI_FN(struct9), ts9_result, values);
+-
+-    printf ("%g\n", ts9_result->f);
+-    printf ("%d\n", ts9_result->i);
+-
+-    CHECK(ts9_result->f == 5.55f + 1);
+-    CHECK(ts9_result->i == 5 + 1);
+-
+-    printf("structure test 9 ok!\n");
+-
+-    free (ts9_result);
+-  }
+-
+-#else
+-  printf("Structure passing doesn't work on Win32.\n");
+-#endif /* X86_WIN32 */
+-
+-#ifdef X86_WIN32
+-  /* stdcall strlen tests */
+-  {
+-    args[0] = &ffi_type_pointer;
+-    values[0] = (void*) &s;
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 1,
+-		       &ffi_type_sint, args) == FFI_OK);
+-
+-    s = "a";
+-    ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values);
+-    CHECK(rint == 1);
+-
+-    s = "1234567";
+-    ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values);
+-    CHECK(rint == 7);
+-
+-    s = "1234567890123456789012345";
+-    ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values);
+-    CHECK(rint == 25);
+-
+-    printf("stdcall strlen tests passed\n");
+-  }
+-
+-  /* stdcall many arg tests */
+-  {
+-    float ff;
+-    float fa[13];
+-
+-    for (ul = 0; ul < 13; ul++)
+-      {
+-	args[ul] = &ffi_type_float;
+-	values[ul] = &fa[ul];
+-	fa[ul] = (float) ul;
+-      }
+-
+-    /* Initialize the cif */
+-    CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 13,
+-		       &ffi_type_float, args) == FFI_OK);
+-
+-    /*@-usedef@*/
+-    ff =  stdcall_many(fa[0], fa[1],
+-	       fa[2], fa[3],
+-	       fa[4], fa[5],
+-	       fa[6], fa[7],
+-	       fa[8], fa[9],
+-	       fa[10],fa[11],fa[12]);
+-    /*@=usedef@*/
+-
+-    ffi_call(&cif, FFI_FN(stdcall_many), &f, values);
+-
+-    /*@-realcompare@*/
+-    if (f - ff < FLT_EPSILON)
+-    /*@=realcompare@*/
+-	printf("stdcall many arg tests ok!\n");
+-    else
+-        CHECK(0);
+-  }
+-#endif /* X86_WIN32 */
+-
+-# if FFI_CLOSURES
+-#  if __GNUC__ >= 2
+-   /* Hide before the compiler that pcl is &cl, since on
+-      some architectures it is not possible to call a data
+-      object using direct function call.  */
+-   asm ("" : "=g" (pcl) : "0" (pcl));
+-#  endif
+-
+-  /* A simple closure test */
+-    {
+-      (void) puts("\nEnter FFI_CLOSURES\n");
+-
+-      cl_arg_types[0] = &ffi_type_uint64;
+-      cl_arg_types[1] = &ffi_type_uint;
+-      cl_arg_types[2] = &ffi_type_uint64;
+-      cl_arg_types[3] = &ffi_type_uint;
+-      cl_arg_types[4] = &ffi_type_sshort;
+-      cl_arg_types[5] = &ffi_type_uint64;
+-      cl_arg_types[6] = &ffi_type_uint;
+-      cl_arg_types[7] = &ffi_type_uint;
+-      cl_arg_types[8] = &ffi_type_double;
+-      cl_arg_types[9] = &ffi_type_uint;
+-      cl_arg_types[10] = &ffi_type_uint;
+-      cl_arg_types[11] = &ffi_type_float;
+-      cl_arg_types[12] = &ffi_type_uint;
+-      cl_arg_types[13] = &ffi_type_uint;
+-      cl_arg_types[14] = &ffi_type_uint;
+-      cl_arg_types[15] = &ffi_type_uint;
+-      cl_arg_types[16] = NULL;   
+-
+-      /* Initialize the cif */
+-      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
+-			 &ffi_type_sint, cl_arg_types) == FFI_OK);
+-
+-      CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn,
+-			     (void *) 3 /* userdata */) == FFI_OK);
+-      
+-      CHECK((*((closure_test_type)pcl))
+-	    (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, 
+-	     19, 21, 1) == 680);
+-    }
+-
+-    {
+-
+-      cl_arg_types[0] = &ffi_type_float;
+-      cl_arg_types[1] = &ffi_type_float;
+-      cl_arg_types[2] = &ffi_type_float;
+-      cl_arg_types[3] = &ffi_type_float;
+-      cl_arg_types[4] = &ffi_type_sshort;
+-      cl_arg_types[5] = &ffi_type_float;
+-      cl_arg_types[6] = &ffi_type_float;
+-      cl_arg_types[7] = &ffi_type_uint;
+-      cl_arg_types[8] = &ffi_type_double;
+-      cl_arg_types[9] = &ffi_type_uint;
+-      cl_arg_types[10] = &ffi_type_uint;
+-      cl_arg_types[11] = &ffi_type_float;
+-      cl_arg_types[12] = &ffi_type_uint;
+-      cl_arg_types[13] = &ffi_type_uint;
+-      cl_arg_types[14] = &ffi_type_uint;
+-      cl_arg_types[15] = &ffi_type_uint;
+-      cl_arg_types[16] = NULL;
+-      
+-      /* Initialize the cif */
+-      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
+-			 &ffi_type_sint, cl_arg_types) == FFI_OK);
+-
+-      CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn1,
+-			     (void *) 3 /* userdata */)  == FFI_OK);
+-      
+-      CHECK((*((closure_test_type1)pcl))
+-	    (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
+-	     19, 21, 1) == 255);
+-    }
+-
+-    {
+-
+-      cl_arg_types[0] = &ffi_type_double;
+-      cl_arg_types[1] = &ffi_type_double;
+-      cl_arg_types[2] = &ffi_type_double;
+-      cl_arg_types[3] = &ffi_type_double;
+-      cl_arg_types[4] = &ffi_type_sshort;
+-      cl_arg_types[5] = &ffi_type_double;
+-      cl_arg_types[6] = &ffi_type_double;
+-      cl_arg_types[7] = &ffi_type_uint;
+-      cl_arg_types[8] = &ffi_type_double;
+-      cl_arg_types[9] = &ffi_type_uint;
+-      cl_arg_types[10] = &ffi_type_uint;
+-      cl_arg_types[11] = &ffi_type_float;
+-      cl_arg_types[12] = &ffi_type_uint;
+-      cl_arg_types[13] = &ffi_type_float;
+-      cl_arg_types[14] = &ffi_type_uint;
+-      cl_arg_types[15] = &ffi_type_uint;
+-      cl_arg_types[16] = NULL;
+-      
+-      /* Initialize the cif */
+-      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
+-			 &ffi_type_sint, cl_arg_types) == FFI_OK);
+-
+-      CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn2,
+-			     (void *) 3 /* userdata */) == FFI_OK);
+-
+-      CHECK((*((closure_test_type2)pcl))
+-	    (1, 2, 3, 4, 127, 5, 6, 8, 9, 10, 11, 12.0, 13,
+-	     19.0, 21, 1) == 255);
+-
+-    }
+-
+-    {
+-
+-      cl_arg_types[0] = &ffi_type_float;
+-      cl_arg_types[1] = &ffi_type_float;
+-      cl_arg_types[2] = &ffi_type_float;
+-      cl_arg_types[3] = &ffi_type_float;
+-      cl_arg_types[4] = &ffi_type_float;
+-      cl_arg_types[5] = &ffi_type_float;
+-      cl_arg_types[6] = &ffi_type_float;
+-      cl_arg_types[7] = &ffi_type_float;
+-      cl_arg_types[8] = &ffi_type_double;
+-      cl_arg_types[9] = &ffi_type_uint;
+-      cl_arg_types[10] = &ffi_type_float;
+-      cl_arg_types[11] = &ffi_type_float;
+-      cl_arg_types[12] = &ffi_type_uint;
+-      cl_arg_types[13] = &ffi_type_float;
+-      cl_arg_types[14] = &ffi_type_float;
+-      cl_arg_types[15] = &ffi_type_uint;
+-      cl_arg_types[16] = NULL;
+-      
+-      /* Initialize the cif */
+-      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
+-			 &ffi_type_sint, cl_arg_types) == FFI_OK);
+-
+-      CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn3,
+-			     (void *) 3 /* userdata */)  == FFI_OK);
+-      
+-      CHECK((*((closure_test_type3)pcl))
+-	    (1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9, 10, 11.11, 12.0, 13,
+-	     19.19, 21.21, 1) == 135);
+-    }
+-
+-    (void) puts("\nFinished FFI_CLOSURES\n");
+-
+-# endif
+-
+-  /* If we arrived here, all is good */
+-  (void) puts("\nLooks good. No surprises.\n");
+-
+-  /*@-compdestroy@*/
+-
+-  return 0;
+-}
+-
+diff -urN old/libffi/src/java_raw_api.c src/libffi/src/java_raw_api.c
+--- old/libffi/src/java_raw_api.c	2003-10-23 20:24:20.000000000 +0000
++++ src/libffi/src/java_raw_api.c	2006-08-03 21:47:14.465142200 +0000
+@@ -29,10 +29,10 @@
+    ----------------------------------------------------------------------- */
+ 
+ /* This defines a Java- and 64-bit specific variant of the raw API.	*/
+-/* It assumes that "raw" argument blocks look like Java stacks on a 	*/
++/* It assumes that "raw" argument blocks look like Java stacks on a	*/
+ /* 64-bit machine.  Arguments that can be stored in a single stack	*/
+ /* stack slots (longs, doubles) occupy 128 bits, but only the first	*/
+-/* 64 bits are actually used.  						*/
++/* 64 bits are actually used.						*/
+ 
+ #include <ffi.h>
+ #include <ffi_common.h>
+@@ -77,20 +77,20 @@
+ #if WORDS_BIGENDIAN
+ 
+   for (i = 0; i < cif->nargs; i++, tp++, args++)
+-    {	  
++    {
+       switch ((*tp)->type)
+ 	{
+ 	case FFI_TYPE_UINT8:
+ 	case FFI_TYPE_SINT8:
+ 	  *args = (void*) ((char*)(raw++) + 3);
+ 	  break;
+-	  
++
+ 	case FFI_TYPE_UINT16:
+ 	case FFI_TYPE_SINT16:
+ 	  *args = (void*) ((char*)(raw++) + 2);
+ 	  break;
+ 
+-#if FFI_SIZEOF_ARG == 8	  
++#if FFI_SIZEOF_ARG == 8
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
+ 	case FFI_TYPE_DOUBLE:
+@@ -102,7 +102,7 @@
+ 	case FFI_TYPE_POINTER:
+ 	  *args = (void*) &(raw++)->ptr;
+ 	  break;
+-	  
++
+ 	default:
+ 	  *args = raw;
+ 	  raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;
+@@ -147,7 +147,7 @@
+   ffi_type **tp = cif->arg_types;
+ 
+   for (i = 0; i < cif->nargs; i++, tp++, args++)
+-    {	  
++    {
+       switch ((*tp)->type)
+ 	{
+ 	case FFI_TYPE_UINT8:
+@@ -218,7 +218,7 @@
+ 	default:
+ #if FFI_SIZEOF_ARG == 8
+ 	  FFI_ASSERT(0);	/* Should have covered all cases */
+-#else	
++#else
+ 	  memcpy ((void*) raw->data, (void*)*args, (*tp)->size);
+ 	  raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;
+ #endif
+@@ -285,10 +285,7 @@
+  * these following couple of functions will handle the translation forth
+  * and back automatically. */
+ 
+-void ffi_java_raw_call (/*@dependent@*/ ffi_cif *cif, 
+-		   void (*fn)(), 
+-		   /*@out@*/ void *rvalue, 
+-		   /*@dependent@*/ ffi_raw *raw)
++void ffi_java_raw_call (ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *raw)
+ {
+   void **avalue = (void**) alloca (cif->nargs * sizeof (void*));
+   ffi_java_raw_to_ptrarray (cif, raw, avalue);
+@@ -298,7 +295,7 @@
+ 
+ #if FFI_CLOSURES		/* base system provides closures */
+ 
+-static void 
++static void
+ ffi_java_translate_args (ffi_cif *cif, void *rvalue,
+ 		    void **avalue, void *user_data)
+ {
+@@ -322,7 +319,7 @@
+ {
+   ffi_status status;
+ 
+-  status = ffi_prep_closure ((ffi_closure*) cl, 
++  status = ffi_prep_closure ((ffi_closure*) cl,
+ 			     cif,
+ 			     &ffi_java_translate_args,
+ 			     (void*)cl);
+diff -urN old/libffi/src/m32r/ffi.c src/libffi/src/m32r/ffi.c
+--- old/libffi/src/m32r/ffi.c	2004-10-13 17:20:24.000000000 +0000
++++ src/libffi/src/m32r/ffi.c	2006-08-03 21:47:14.457143416 +0000
+@@ -31,9 +31,7 @@
+ /* ffi_prep_args is called by the assembly routine once stack
+    space has been allocated for the function's arguments.  */
+ 
+-/*@-exportheader@*/
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+-/*@=exportheader@*/
+ {
+   unsigned int i;
+   int tmp;
+@@ -173,20 +171,10 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_SYSV(void (*)(char *, extended_cif *), 
+-			  /*@out@*/ extended_cif *, 
+-			  unsigned, unsigned, 
+-			  /*@out@*/ unsigned *, 
+-			  void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
+-
+-void ffi_call(/*@dependent@*/ ffi_cif *cif, 
+-	      void (*fn)(), 
+-	      /*@out@*/ void *rvalue, 
+-	      /*@dependent@*/ void **avalue)
++extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
++			  unsigned, unsigned, unsigned *, void (*fn)());
++
++void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+@@ -198,9 +186,7 @@
+   if ((rvalue == NULL) && 
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca (cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;    
+@@ -208,7 +194,6 @@
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+-      /*@-usedef@*/
+       ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
+ 		    cif->flags, ecif.rvalue, fn);
+       if (cif->rtype->type == FFI_TYPE_STRUCT)
+@@ -237,7 +222,6 @@
+ 		}
+ 	    }
+ 	}
+-      /*@=usedef@*/
+       break;
+ 
+     default:
+diff -urN old/libffi/src/powerpc/ffi.c src/libffi/src/powerpc/ffi.c
+--- old/libffi/src/powerpc/ffi.c	2005-09-26 19:56:22.000000000 +0000
++++ src/libffi/src/powerpc/ffi.c	2006-08-03 21:47:14.284169712 +0000
+@@ -30,8 +30,8 @@
+ #include <stdio.h>
+ 
+ 
+-extern void ffi_closure_SYSV(void);
+-extern void FFI_HIDDEN ffi_closure_LINUX64(void);
++extern void ffi_closure_SYSV (void);
++extern void FFI_HIDDEN ffi_closure_LINUX64 (void);
+ 
+ enum {
+   /* The assembly depends on these exact flags.  */
+@@ -80,79 +80,103 @@
+ 
+ */
+ 
+-/*@-exportheader@*/
+-void ffi_prep_args_SYSV(extended_cif *ecif, unsigned *const stack)
+-/*@=exportheader@*/
++void
++ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
+ {
+   const unsigned bytes = ecif->cif->bytes;
+   const unsigned flags = ecif->cif->flags;
+ 
++  typedef union {
++    char *c;
++    unsigned *u;
++    long long *ll;
++    float *f;
++    double *d;
++  } valp;
++
+   /* 'stacktop' points at the previous backchain pointer.  */
+-  unsigned *const stacktop = stack + (bytes / sizeof(unsigned));
++  valp stacktop;
+ 
+   /* 'gpr_base' points at the space for gpr3, and grows upwards as
+      we use GPR registers.  */
+-  unsigned *gpr_base = stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
+-  int intarg_count = 0;
++  valp gpr_base;
++  int intarg_count;
+ 
+   /* 'fpr_base' points at the space for fpr1, and grows upwards as
+      we use FPR registers.  */
+-  double *fpr_base = (double *)gpr_base - NUM_FPR_ARG_REGISTERS;
+-  int fparg_count = 0;
++  valp fpr_base;
++  int fparg_count;
+ 
+   /* 'copy_space' grows down as we put structures in it.  It should
+      stay 16-byte aligned.  */
+-  char *copy_space = ((flags & FLAG_FP_ARGUMENTS)
+-		      ? (char *)fpr_base
+-		      : (char *)gpr_base);
++  valp copy_space;
+ 
+   /* 'next_arg' grows up as we put parameters in it.  */
+-  unsigned *next_arg = stack + 2;
++  valp next_arg;
+ 
+   int i;
+   ffi_type **ptr;
+   double double_tmp;
+-  void **p_argv;
++  union {
++    void **v;
++    char **c;
++    signed char **sc;
++    unsigned char **uc;
++    signed short **ss;
++    unsigned short **us;
++    unsigned int **ui;
++    long long **ll;
++    float **f;
++    double **d;
++  } p_argv;
+   size_t struct_copy_size;
+   unsigned gprvalue;
+ 
++  stacktop.c = (char *) stack + bytes;
++  gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
++  intarg_count = 0;
++  fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
++  fparg_count = 0;
++  copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
++  next_arg.u = stack + 2;
++
+   /* Check that everything starts aligned properly.  */
+-  FFI_ASSERT(((unsigned)(char *)stack & 0xF) == 0);
+-  FFI_ASSERT(((unsigned)(char *)copy_space & 0xF) == 0);
+-  FFI_ASSERT(((unsigned)(char *)stacktop & 0xF) == 0);
+-  FFI_ASSERT((bytes & 0xF) == 0);
+-  FFI_ASSERT(copy_space >= (char *)next_arg);
++  FFI_ASSERT (((unsigned) (char *) stack & 0xF) == 0);
++  FFI_ASSERT (((unsigned) copy_space.c & 0xF) == 0);
++  FFI_ASSERT (((unsigned) stacktop.c & 0xF) == 0);
++  FFI_ASSERT ((bytes & 0xF) == 0);
++  FFI_ASSERT (copy_space.c >= next_arg.c);
+ 
+   /* Deal with return values that are actually pass-by-reference.  */
+   if (flags & FLAG_RETVAL_REFERENCE)
+     {
+-      *gpr_base++ = (unsigned long)(char *)ecif->rvalue;
++      *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue;
+       intarg_count++;
+     }
+ 
+   /* Now for the arguments.  */
+-  p_argv = ecif->avalue;
++  p_argv.v = ecif->avalue;
+   for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
+        i > 0;
+-       i--, ptr++, p_argv++)
++       i--, ptr++, p_argv.v++)
+     {
+       switch ((*ptr)->type)
+ 	{
+ 	case FFI_TYPE_FLOAT:
+-	  double_tmp = *(float *)*p_argv;
++	  double_tmp = **p_argv.f;
+ 	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ 	    {
+-	      *(float *)next_arg = (float)double_tmp;
+-	      next_arg += 1;
++	      *next_arg.f = (float) double_tmp;
++	      next_arg.u += 1;
+ 	    }
+ 	  else
+-	    *fpr_base++ = double_tmp;
++	    *fpr_base.d++ = double_tmp;
+ 	  fparg_count++;
+-	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+-	  double_tmp = *(double *)*p_argv;
++	  double_tmp = **p_argv.d;
+ 
+ 	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ 	    {
+@@ -160,16 +184,48 @@
+ 		  && intarg_count % 2 != 0)
+ 		{
+ 		  intarg_count++;
+-		  next_arg++;
++		  next_arg.u++;
+ 		}
+-	      *(double *)next_arg = double_tmp;
+-	      next_arg += 2;
++	      *next_arg.d = double_tmp;
++	      next_arg.u += 2;
+ 	    }
+ 	  else
+-	    *fpr_base++ = double_tmp;
++	    *fpr_base.d++ = double_tmp;
+ 	  fparg_count++;
+-	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
++	  break;
++
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  if (ecif->cif->abi != FFI_LINUX)
++	    goto do_struct;
++	  double_tmp = (*p_argv.d)[0];
++
++	  if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1)
++	    {
++	      if (intarg_count >= NUM_GPR_ARG_REGISTERS
++		  && intarg_count % 2 != 0)
++		{
++		  intarg_count++;
++		  next_arg.u++;
++		}
++	      *next_arg.d = double_tmp;
++	      next_arg.u += 2;
++	      double_tmp = (*p_argv.d)[1];
++	      *next_arg.d = double_tmp;
++	      next_arg.u += 2;
++	    }
++	  else
++	    {
++	      *fpr_base.d++ = double_tmp;
++	      double_tmp = (*p_argv.d)[1];
++	      *fpr_base.d++ = double_tmp;
++	    }
++
++	  fparg_count += 2;
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ 	  break;
++#endif
+ 
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
+@@ -177,13 +233,13 @@
+ 	    intarg_count++;
+ 	  if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+ 	    {
+-	      if (intarg_count%2 != 0)
++	      if (intarg_count % 2 != 0)
+ 		{
+ 		  intarg_count++;
+-		  next_arg++;
++		  next_arg.u++;
+ 		}
+-	      *(long long *)next_arg = *(long long *)*p_argv;
+-	      next_arg += 2;
++	      *next_arg.ll = **p_argv.ll;
++	      next_arg.u += 2;
+ 	    }
+ 	  else
+ 	    {
+@@ -194,65 +250,65 @@
+ 	       * not correct starting register of pair then skip
+ 	       * until the proper starting register
+ 	       */
+-	      if (intarg_count%2 != 0)
++	      if (intarg_count % 2 != 0)
+ 		{
+ 		  intarg_count ++;
+-		  gpr_base++;
++		  gpr_base.u++;
+ 		}
+-	      *(long long *)gpr_base = *(long long *)*p_argv;
+-	      gpr_base += 2;
++	      *gpr_base.ll++ = **p_argv.ll;
+ 	    }
+ 	  intarg_count += 2;
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	case FFI_TYPE_LONGDOUBLE:
++	do_struct:
+ #endif
+ 	  struct_copy_size = ((*ptr)->size + 15) & ~0xF;
+-	  copy_space -= struct_copy_size;
+-	  memcpy(copy_space, (char *)*p_argv, (*ptr)->size);
++	  copy_space.c -= struct_copy_size;
++	  memcpy (copy_space.c, *p_argv.c, (*ptr)->size);
+ 
+-	  gprvalue = (unsigned long)copy_space;
++	  gprvalue = (unsigned long) copy_space.c;
+ 
+-	  FFI_ASSERT(copy_space > (char *)next_arg);
+-	  FFI_ASSERT(flags & FLAG_ARG_NEEDS_COPY);
++	  FFI_ASSERT (copy_space.c > next_arg.c);
++	  FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY);
+ 	  goto putgpr;
+ 
+ 	case FFI_TYPE_UINT8:
+-	  gprvalue = *(unsigned char *)*p_argv;
++	  gprvalue = **p_argv.uc;
+ 	  goto putgpr;
+ 	case FFI_TYPE_SINT8:
+-	  gprvalue = *(signed char *)*p_argv;
++	  gprvalue = **p_argv.sc;
+ 	  goto putgpr;
+ 	case FFI_TYPE_UINT16:
+-	  gprvalue = *(unsigned short *)*p_argv;
++	  gprvalue = **p_argv.us;
+ 	  goto putgpr;
+ 	case FFI_TYPE_SINT16:
+-	  gprvalue = *(signed short *)*p_argv;
++	  gprvalue = **p_argv.ss;
+ 	  goto putgpr;
+ 
+ 	case FFI_TYPE_INT:
+ 	case FFI_TYPE_UINT32:
+ 	case FFI_TYPE_SINT32:
+ 	case FFI_TYPE_POINTER:
+-	  gprvalue = *(unsigned *)*p_argv;
++	  gprvalue = **p_argv.ui;
++
+ 	putgpr:
+ 	  if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+-	    *next_arg++ = gprvalue;
++	    *next_arg.u++ = gprvalue;
+ 	  else
+-	    *gpr_base++ = gprvalue;
++	    *gpr_base.u++ = gprvalue;
+ 	  intarg_count++;
+ 	  break;
+ 	}
+     }
+ 
+   /* Check that we didn't overrun the stack...  */
+-  FFI_ASSERT(copy_space >= (char *)next_arg);
+-  FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS);
+-  FFI_ASSERT((unsigned *)fpr_base
+-	     <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
+-  FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
++  FFI_ASSERT (copy_space.c >= next_arg.c);
++  FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS);
++  FFI_ASSERT (fpr_base.u
++	      <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
++  FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
+ }
+ 
+ /* About the LINUX64 ABI.  */
+@@ -296,160 +352,187 @@
+ 
+ */
+ 
+-/*@-exportheader@*/
+-void FFI_HIDDEN ffi_prep_args64(extended_cif *ecif, unsigned long *const stack)
+-/*@=exportheader@*/
++void FFI_HIDDEN
++ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
+ {
+   const unsigned long bytes = ecif->cif->bytes;
+   const unsigned long flags = ecif->cif->flags;
+ 
++  typedef union {
++    char *c;
++    unsigned long *ul;
++    float *f;
++    double *d;
++  } valp;
++
+   /* 'stacktop' points at the previous backchain pointer.  */
+-  unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long));
++  valp stacktop;
+ 
+   /* 'next_arg' points at the space for gpr3, and grows upwards as
+      we use GPR registers, then continues at rest.  */
+-  unsigned long *const gpr_base = stacktop - ASM_NEEDS_REGISTERS64
+-    - NUM_GPR_ARG_REGISTERS64;
+-  unsigned long *const gpr_end = gpr_base + NUM_GPR_ARG_REGISTERS64;
+-  unsigned long *const rest = stack + 6 + NUM_GPR_ARG_REGISTERS64;
+-  unsigned long *next_arg = gpr_base;
++  valp gpr_base;
++  valp gpr_end;
++  valp rest;
++  valp next_arg;
+ 
+   /* 'fpr_base' points at the space for fpr3, and grows upwards as
+      we use FPR registers.  */
+-  double *fpr_base = (double *)gpr_base - NUM_FPR_ARG_REGISTERS64;
+-  int fparg_count = 0;
++  valp fpr_base;
++  int fparg_count;
+ 
+   int i, words;
+   ffi_type **ptr;
+   double double_tmp;
+-  void **p_argv;
++  union {
++    void **v;
++    char **c;
++    signed char **sc;
++    unsigned char **uc;
++    signed short **ss;
++    unsigned short **us;
++    signed int **si;
++    unsigned int **ui;
++    unsigned long **ul;
++    float **f;
++    double **d;
++  } p_argv;
+   unsigned long gprvalue;
+ 
++  stacktop.c = (char *) stack + bytes;
++  gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64;
++  gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64;
++  rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64;
++  fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64;
++  fparg_count = 0;
++  next_arg.ul = gpr_base.ul;
++
+   /* Check that everything starts aligned properly.  */
+-  FFI_ASSERT(((unsigned long)(char *)stack & 0xF) == 0);
+-  FFI_ASSERT(((unsigned long)(char *)stacktop & 0xF) == 0);
+-  FFI_ASSERT((bytes & 0xF) == 0);
++  FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0);
++  FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0);
++  FFI_ASSERT ((bytes & 0xF) == 0);
+ 
+   /* Deal with return values that are actually pass-by-reference.  */
+   if (flags & FLAG_RETVAL_REFERENCE)
+-    *next_arg++ = (unsigned long)(char *)ecif->rvalue;
++    *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue;
+ 
+   /* Now for the arguments.  */
+-  p_argv = ecif->avalue;
++  p_argv.v = ecif->avalue;
+   for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs;
+        i > 0;
+-       i--, ptr++, p_argv++)
++       i--, ptr++, p_argv.v++)
+     {
+       switch ((*ptr)->type)
+ 	{
+ 	case FFI_TYPE_FLOAT:
+-	  double_tmp = *(float *)*p_argv;
+-	  *(float *)next_arg = (float)double_tmp;
+-	  if (++next_arg == gpr_end)
+-	    next_arg = rest;
++	  double_tmp = **p_argv.f;
++	  *next_arg.f = (float) double_tmp;
++	  if (++next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS64)
+-	    *fpr_base++ = double_tmp;
++	    *fpr_base.d++ = double_tmp;
+ 	  fparg_count++;
+-	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+-	  double_tmp = *(double *)*p_argv;
+-	  *(double *)next_arg = double_tmp;
+-	  if (++next_arg == gpr_end)
+-	    next_arg = rest;
++	  double_tmp = **p_argv.d;
++	  *next_arg.d = double_tmp;
++	  if (++next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS64)
+-	    *fpr_base++ = double_tmp;
++	    *fpr_base.d++ = double_tmp;
+ 	  fparg_count++;
+-	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ 
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ 	case FFI_TYPE_LONGDOUBLE:
+-	  double_tmp = ((double *) *p_argv)[0];
+-	  *(double *) next_arg = double_tmp;
+-	  if (++next_arg == gpr_end)
+-	    next_arg = rest;
++	  double_tmp = (*p_argv.d)[0];
++	  *next_arg.d = double_tmp;
++	  if (++next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS64)
+-	    *fpr_base++ = double_tmp;
++	    *fpr_base.d++ = double_tmp;
+ 	  fparg_count++;
+-	  double_tmp = ((double *) *p_argv)[1];
+-	  *(double *) next_arg = double_tmp;
+-	  if (++next_arg == gpr_end)
+-	    next_arg = rest;
++	  double_tmp = (*p_argv.d)[1];
++	  *next_arg.d = double_tmp;
++	  if (++next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
+ 	  if (fparg_count < NUM_FPR_ARG_REGISTERS64)
+-	    *fpr_base++ = double_tmp;
++	    *fpr_base.d++ = double_tmp;
+ 	  fparg_count++;
+-	  FFI_ASSERT(flags & FLAG_FP_ARGUMENTS);
++	  FFI_ASSERT (__LDBL_MANT_DIG__ == 106);
++	  FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+ 	  break;
+ #endif
+ 
+ 	case FFI_TYPE_STRUCT:
+ 	  words = ((*ptr)->size + 7) / 8;
+-	  if (next_arg >= gpr_base && next_arg + words > gpr_end)
++	  if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul)
+ 	    {
+-	      size_t first = (char *) gpr_end - (char *) next_arg;
+-	      memcpy((char *) next_arg, (char *) *p_argv, first);
+-	      memcpy((char *) rest, (char *) *p_argv + first,
+-		     (*ptr)->size - first);
+-	      next_arg = (unsigned long *) ((char *) rest + words * 8 - first);
++	      size_t first = gpr_end.c - next_arg.c;
++	      memcpy (next_arg.c, *p_argv.c, first);
++	      memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first);
++	      next_arg.c = rest.c + words * 8 - first;
+ 	    }
+ 	  else
+ 	    {
+-	      char *where = (char *) next_arg;
++	      char *where = next_arg.c;
+ 
+ 	      /* Structures with size less than eight bytes are passed
+ 		 left-padded.  */
+ 	      if ((*ptr)->size < 8)
+ 		where += 8 - (*ptr)->size;
+ 
+-	      memcpy (where, (char *) *p_argv, (*ptr)->size);
+-	      next_arg += words;
+-	      if (next_arg == gpr_end)
+-		next_arg = rest;
++	      memcpy (where, *p_argv.c, (*ptr)->size);
++	      next_arg.ul += words;
++	      if (next_arg.ul == gpr_end.ul)
++		next_arg.ul = rest.ul;
+ 	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_UINT8:
+-	  gprvalue = *(unsigned char *)*p_argv;
++	  gprvalue = **p_argv.uc;
+ 	  goto putgpr;
+ 	case FFI_TYPE_SINT8:
+-	  gprvalue = *(signed char *)*p_argv;
++	  gprvalue = **p_argv.sc;
+ 	  goto putgpr;
+ 	case FFI_TYPE_UINT16:
+-	  gprvalue = *(unsigned short *)*p_argv;
++	  gprvalue = **p_argv.us;
+ 	  goto putgpr;
+ 	case FFI_TYPE_SINT16:
+-	  gprvalue = *(signed short *)*p_argv;
++	  gprvalue = **p_argv.ss;
+ 	  goto putgpr;
+ 	case FFI_TYPE_UINT32:
+-	  gprvalue = *(unsigned int *)*p_argv;
++	  gprvalue = **p_argv.ui;
+ 	  goto putgpr;
+ 	case FFI_TYPE_INT:
+ 	case FFI_TYPE_SINT32:
+-	  gprvalue = *(signed int *)*p_argv;
++	  gprvalue = **p_argv.si;
+ 	  goto putgpr;
+ 
+ 	case FFI_TYPE_UINT64:
+ 	case FFI_TYPE_SINT64:
+ 	case FFI_TYPE_POINTER:
+-	  gprvalue = *(unsigned long *)*p_argv;
++	  gprvalue = **p_argv.ul;
+ 	putgpr:
+-	  *next_arg++ = gprvalue;
+-	  if (next_arg == gpr_end)
+-	    next_arg = rest;
++	  *next_arg.ul++ = gprvalue;
++	  if (next_arg.ul == gpr_end.ul)
++	    next_arg.ul = rest.ul;
+ 	  break;
+ 	}
+     }
+ 
+-  FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS
+-	     || (next_arg >= gpr_base && next_arg <= gpr_base + 4));
++  FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS
++	      || (next_arg.ul >= gpr_base.ul
++		  && next_arg.ul <= gpr_base.ul + 4));
+ }
+ 
+ 
+ 
+ /* Perform machine dependent cif processing */
+-ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
++ffi_status
++ffi_prep_cif_machdep (ffi_cif *cif)
+ {
+   /* All this is for the SYSV and LINUX64 ABI.  */
+   int i;
+@@ -467,10 +550,10 @@
+ 	 Redo the calculation for SYSV.  */
+ 
+       /* Space for the frame pointer, callee's LR, and the asm's temp regs.  */
+-      bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof(int);
++      bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int);
+ 
+       /* Space for the GPR registers.  */
+-      bytes += NUM_GPR_ARG_REGISTERS * sizeof(int);
++      bytes += NUM_GPR_ARG_REGISTERS * sizeof (int);
+     }
+   else
+     {
+@@ -478,15 +561,10 @@
+ 
+       /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp
+ 	 regs.  */
+-      bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof(long);
++      bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long);
+ 
+       /* Space for the mandatory parm save area and general registers.  */
+-      bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof(long);
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-      if (type == FFI_TYPE_LONGDOUBLE)
+-	type = FFI_TYPE_DOUBLE;
+-#endif
++      bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long);
+     }
+ 
+   /* Return value handling.  The rules for SYSV are as follows:
+@@ -495,14 +573,24 @@
+      - 64-bit integer values and structures between 5 and 8 bytes are returned
+      in gpr3 and gpr4;
+      - Single/double FP values are returned in fpr1;
+-     - Larger structures and long double (if not equivalent to double) values
+-     are allocated space and a pointer is passed as the first argument.
++     - Larger structures are allocated space and a pointer is passed as
++     the first argument.
++     - long doubles (if not equivalent to double) are returned in
++     fpr1,fpr2 for Linux and as for large structs for SysV.
+      For LINUX64:
+      - integer values in gpr3;
+      - Structures/Unions by reference;
+      - Single/double FP values in fpr1, long double in fpr1,fpr2.  */
+   switch (type)
+     {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++    case FFI_TYPE_LONGDOUBLE:
++      if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64)
++	goto byref;
++
++      flags |= FLAG_RETURNS_128BITS;
++      /* Fall through.  */
++#endif
+     case FFI_TYPE_DOUBLE:
+       flags |= FLAG_RETURNS_64BITS;
+       /* Fall through.  */
+@@ -523,33 +611,29 @@
+ 	     in memory.  */
+ 
+ 	  /* Treat structs with size <= 8 bytes.  */
+-	  if (size <= 8) {
+-	    flags |= FLAG_RETURNS_SMST;
+-	    /* These structs are returned in r3. We pack the type and the
+-	       precalculated shift value (needed in the sysv.S) into flags.
+-	       The same applies for the structs returned in r3/r4.  */
+-	    if (size <= 4) {
+-	      flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1 )
+-		| (8 * (4 - size) << 4);
+-	      break;
+-	    }
+-	    /* These structs are returned in r3 and r4. See above.   */
+-	    if  (size <= 8) {
+-	      flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2 )
+-		| (8 * (8 - size) << 4);
+-	    break;
++	  if (size <= 8)
++	    {
++	      flags |= FLAG_RETURNS_SMST;
++	      /* These structs are returned in r3. We pack the type and the
++		 precalculated shift value (needed in the sysv.S) into flags.
++		 The same applies for the structs returned in r3/r4.  */
++	      if (size <= 4)
++		{
++		  flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1);
++		  flags |= 8 * (4 - size) << 4;
++		  break;
++		}
++	      /* These structs are returned in r3 and r4. See above.   */
++	      if  (size <= 8)
++		{
++		  flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2);
++		  flags |= 8 * (8 - size) << 4;
++		  break;
++		}
+ 	    }
+-	  }
+ 	}
+-      /* else fall through.  */
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-    case FFI_TYPE_LONGDOUBLE:
+-      if (type == FFI_TYPE_LONGDOUBLE && cif->abi == FFI_LINUX64)
+-	{
+-	  flags |= FLAG_RETURNS_128BITS;
+-	  flags |= FLAG_RETURNS_FP;
+-	  break;
+-	}
++    byref:
+ #endif
+       intarg_count++;
+       flags |= FLAG_RETVAL_REFERENCE;
+@@ -578,6 +662,13 @@
+ 	    /* floating singles are not 8-aligned on stack */
+ 	    break;
+ 
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	  case FFI_TYPE_LONGDOUBLE:
++	    if (cif->abi != FFI_LINUX)
++	      goto do_struct;
++	    fparg_count++;
++	    /* Fall thru */
++#endif
+ 	  case FFI_TYPE_DOUBLE:
+ 	    fparg_count++;
+ 	    /* If this FP arg is going on the stack, it must be
+@@ -600,14 +691,14 @@
+ 	       (r7,r8), (r9,r10).
+ 	    */
+ 	    if (intarg_count == NUM_GPR_ARG_REGISTERS-1
+-		|| intarg_count%2 != 0)
++		|| intarg_count % 2 != 0)
+ 	      intarg_count++;
+ 	    intarg_count += 2;
+ 	    break;
+ 
+ 	  case FFI_TYPE_STRUCT:
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+-	  case FFI_TYPE_LONGDOUBLE:
++	  do_struct:
+ #endif
+ 	    /* We must allocate space for a copy of these to enforce
+ 	       pass-by-value.  Pad the space up to a multiple of 16
+@@ -663,23 +754,23 @@
+     {
+       /* Space for the FPR registers, if needed.  */
+       if (fparg_count != 0)
+-	bytes += NUM_FPR_ARG_REGISTERS * sizeof(double);
++	bytes += NUM_FPR_ARG_REGISTERS * sizeof (double);
+ 
+       /* Stack space.  */
+       if (intarg_count > NUM_GPR_ARG_REGISTERS)
+-	bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof(int);
++	bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int);
+       if (fparg_count > NUM_FPR_ARG_REGISTERS)
+-	bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof(double);
++	bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double);
+     }
+   else
+     {
+       /* Space for the FPR registers, if needed.  */
+       if (fparg_count != 0)
+-	bytes += NUM_FPR_ARG_REGISTERS64 * sizeof(double);
++	bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double);
+ 
+       /* Stack space.  */
+       if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+-	bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof(long);
++	bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long);
+     }
+ 
+   /* The stack space allocated needs to be a multiple of 16 bytes.  */
+@@ -694,23 +785,14 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_SYSV(/*@out@*/ extended_cif *,
+-			  unsigned, unsigned,
+-			  /*@out@*/ unsigned *,
++extern void ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *,
+ 			  void (*fn)());
+-extern void FFI_HIDDEN ffi_call_LINUX64(/*@out@*/ extended_cif *,
+-					unsigned long, unsigned long,
+-					/*@out@*/ unsigned long *,
++extern void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long,
++					unsigned long, unsigned long *,
+ 					void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
+ 
+-void ffi_call(/*@dependent@*/ ffi_cif *cif,
+-	      void (*fn)(),
+-	      /*@out@*/ void *rvalue,
+-	      /*@dependent@*/ void **avalue)
++void
++ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+@@ -720,12 +802,9 @@
+   /* If the return value is a struct and we don't have a return	*/
+   /* value address then we need to make one		        */
+ 
+-  if ((rvalue == NULL) &&
+-      (cif->rtype->type == FFI_TYPE_STRUCT))
++  if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -736,48 +815,45 @@
+ #ifndef POWERPC64
+     case FFI_SYSV:
+     case FFI_GCC_SYSV:
+-      /*@-usedef@*/
+-      ffi_call_SYSV(&ecif, -cif->bytes,
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++    case FFI_LINUX:
++      ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn);
+       break;
+ #else
+     case FFI_LINUX64:
+-      /*@-usedef@*/
+-      ffi_call_LINUX64(&ecif, -(long) cif->bytes,
+-		       cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_LINUX64 (&ecif, -(long) cif->bytes, cif->flags, ecif.rvalue, fn);
+       break;
+ #endif
+     default:
+-      FFI_ASSERT(0);
++      FFI_ASSERT (0);
+       break;
+     }
+ }
+ 
+ 
+ #ifndef POWERPC64
+-static void flush_icache(char *, int);
+-
+ #define MIN_CACHE_LINE_SIZE 8
+ 
+-static void flush_icache(char * addr1, int size)
++static void
++flush_icache (char *addr1, int size)
+ {
+   int i;
+   char * addr;
+-  for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE) {
+-    addr = addr1 + i;
+-    __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" : : "r"(addr) : "memory");
+-  }
++  for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
++    {
++      addr = addr1 + i;
++      __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;"
++			: : "r" (addr) : "memory");
++    }
+   addr = addr1 + size - 1;
+-  __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" "sync;" "isync;" : : "r"(addr) : "memory");
++  __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" "sync;" "isync;"
++		    : : "r"(addr) : "memory");
+ }
+ #endif
+ 
+ ffi_status
+-ffi_prep_closure (ffi_closure* closure,
+-		  ffi_cif* cif,
+-		  void (*fun)(ffi_cif*, void*, void**, void*),
++ffi_prep_closure (ffi_closure *closure,
++		  ffi_cif *cif,
++		  void (*fun) (ffi_cif *, void *, void **, void *),
+ 		  void *user_data)
+ {
+ #ifdef POWERPC64
+@@ -801,11 +877,11 @@
+   tramp[7] = 0x816b0004;  /*   lwz     r11,4(r11) */
+   tramp[8] = 0x7c0903a6;  /*   mtctr   r0 */
+   tramp[9] = 0x4e800420;  /*   bctr */
+-  *(void **) &tramp[2] = (void *)ffi_closure_SYSV; /* function */
+-  *(void **) &tramp[3] = (void *)closure;          /* context */
++  *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */
++  *(void **) &tramp[3] = (void *) closure;          /* context */
+ 
+   /* Flush the icache.  */
+-  flush_icache(&closure->tramp[0],FFI_TRAMPOLINE_SIZE);
++  flush_icache (&closure->tramp[0],FFI_TRAMPOLINE_SIZE);
+ #endif
+ 
+   closure->cif = cif;
+@@ -821,8 +897,8 @@
+   double d;
+ } ffi_dblfl;
+ 
+-int ffi_closure_helper_SYSV (ffi_closure*, void*, unsigned long*,
+-			     ffi_dblfl*, unsigned long*);
++int ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *,
++			     ffi_dblfl *, unsigned long *);
+ 
+ /* Basically the trampoline invokes ffi_closure_SYSV, and on
+  * entry, r11 holds the address of the closure.
+@@ -833,9 +909,9 @@
+  */
+ 
+ int
+-ffi_closure_helper_SYSV (ffi_closure* closure, void * rvalue,
+-			 unsigned long * pgr, ffi_dblfl * pfr,
+-			 unsigned long * pst)
++ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
++			 unsigned long *pgr, ffi_dblfl *pfr,
++			 unsigned long *pst)
+ {
+   /* rvalue is the pointer to space for return value in closure assembly */
+   /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */
+@@ -852,7 +928,7 @@
+   unsigned         size;
+ 
+   cif = closure->cif;
+-  avalue = alloca(cif->nargs * sizeof(void *));
++  avalue = alloca (cif->nargs * sizeof (void *));
+   size = cif->rtype->size;
+ 
+   nf = 0;
+@@ -863,13 +939,17 @@
+      For FFI_SYSV the result is passed in r3/r4 if the struct size is less
+      or equal 8 bytes.  */
+ 
+-  if (cif->rtype->type == FFI_TYPE_STRUCT)
++  if ((cif->rtype->type == FFI_TYPE_STRUCT
++       && !((cif->abi == FFI_SYSV) && (size <= 8)))
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++      || (cif->rtype->type == FFI_TYPE_LONGDOUBLE
++	  && cif->abi != FFI_LINUX)
++#endif
++      )
+     {
+-      if (!((cif->abi == FFI_SYSV) && (size <= 8))) {
+-	rvalue = (void *) *pgr;
+-	ng++;
+-	pgr++;
+-      }
++      rvalue = (void *) *pgr;
++      ng++;
++      pgr++;
+     }
+ 
+   i = 0;
+@@ -884,54 +964,69 @@
+ 	case FFI_TYPE_SINT8:
+ 	case FFI_TYPE_UINT8:
+ 	  /* there are 8 gpr registers used to pass values */
+-	  if (ng < 8) {
+-	    avalue[i] = (((char *)pgr)+3);
+-	    ng++;
+-	    pgr++;
+-	  } else {
+-	    avalue[i] = (((char *)pst)+3);
+-	    pst++;
+-	  }
++	  if (ng < 8)
++	    {
++	      avalue[i] = (char *) pgr + 3;
++	      ng++;
++	      pgr++;
++	    }
++	  else
++	    {
++	      avalue[i] = (char *) pst + 3;
++	      pst++;
++	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT16:
+ 	case FFI_TYPE_UINT16:
+ 	  /* there are 8 gpr registers used to pass values */
+-	  if (ng < 8) {
+-	    avalue[i] = (((char *)pgr)+2);
+-	    ng++;
+-	    pgr++;
+-	  } else {
+-	    avalue[i] = (((char *)pst)+2);
+-	    pst++;
+-	  }
++	  if (ng < 8)
++	    {
++	      avalue[i] = (char *) pgr + 2;
++	      ng++;
++	      pgr++;
++	    }
++	  else
++	    {
++	      avalue[i] = (char *) pst + 2;
++	      pst++;
++	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT32:
+ 	case FFI_TYPE_UINT32:
+ 	case FFI_TYPE_POINTER:
+ 	  /* there are 8 gpr registers used to pass values */
+-	  if (ng < 8) {
+-	    avalue[i] = pgr;
+-	    ng++;
+-	    pgr++;
+-	  } else {
+-	    avalue[i] = pst;
+-	    pst++;
+-	  }
++	  if (ng < 8)
++	    {
++	      avalue[i] = pgr;
++	      ng++;
++	      pgr++;
++	    }
++	  else
++	    {
++	      avalue[i] = pst;
++	      pst++;
++	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_STRUCT:
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	do_struct:
++#endif
+ 	  /* Structs are passed by reference. The address will appear in a
+ 	     gpr if it is one of the first 8 arguments.  */
+-	  if (ng < 8) {
+-	    avalue[i] = (void *) *pgr;
+-	    ng++;
+-	    pgr++;
+-	  } else {
+-	    avalue[i] = (void *) *pst;
+-	    pst++;
+-	  }
++	  if (ng < 8)
++	    {
++	      avalue[i] = (void *) *pgr;
++	      ng++;
++	      pgr++;
++	    }
++	  else
++	    {
++	      avalue[i] = (void *) *pst;
++	      pst++;
++	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_SINT64:
+@@ -945,20 +1040,25 @@
+ 	   * or pst to find the correct address for this type
+ 	   * of parameter.
+ 	   */
+-	  if (ng < 7) {
+-	    if (ng & 0x01) {
+-	      /* skip r4, r6, r8 as starting points */
+-	      ng++;
+-	      pgr++;
++	  if (ng < 7)
++	    {
++	      if (ng & 0x01)
++		{
++		  /* skip r4, r6, r8 as starting points */
++		  ng++;
++		  pgr++;
++		}
++	      avalue[i] = pgr;
++	      ng += 2;
++	      pgr += 2;
++	    }
++	  else
++	    {
++	      if (((long) pst) & 4)
++		pst++;
++	      avalue[i] = pst;
++	      pst += 2;
+ 	    }
+-	    avalue[i] = pgr;
+-	    ng+=2;
+-	    pgr+=2;
+-	  } else {
+-	    if (((long)pst) & 4) pst++;
+-	    avalue[i] = pst;
+-	    pst+=2;
+-	  }
+ 	  break;
+ 
+ 	case FFI_TYPE_FLOAT:
+@@ -969,42 +1069,69 @@
+ 
+ 	  /* there are 8 64bit floating point registers */
+ 
+-	  if (nf < 8) {
+-	    temp = pfr->d;
+-	    pfr->f = (float)temp;
+-	    avalue[i] = pfr;
+-	    nf++;
+-	    pfr++;
+-	  } else {
+-	    /* FIXME? here we are really changing the values
+-	     * stored in the original calling routines outgoing
+-	     * parameter stack.  This is probably a really
+-	     * naughty thing to do but...
+-	     */
+-	    avalue[i] = pst;
+-	    nf++;
+-	    pst+=1;
+-	  }
++	  if (nf < 8)
++	    {
++	      temp = pfr->d;
++	      pfr->f = (float) temp;
++	      avalue[i] = pfr;
++	      nf++;
++	      pfr++;
++	    }
++	  else
++	    {
++	      /* FIXME? here we are really changing the values
++	       * stored in the original calling routines outgoing
++	       * parameter stack.  This is probably a really
++	       * naughty thing to do but...
++	       */
++	      avalue[i] = pst;
++	      pst += 1;
++	    }
+ 	  break;
+ 
+ 	case FFI_TYPE_DOUBLE:
+ 	  /* On the outgoing stack all values are aligned to 8 */
+ 	  /* there are 8 64bit floating point registers */
+ 
+-	  if (nf < 8) {
+-	    avalue[i] = pfr;
+-	    nf++;
+-	    pfr++;
+-	  } else {
+-	    if (((long)pst) & 4) pst++;
+-	    avalue[i] = pst;
+-	    nf++;
+-	    pst+=2;
+-	  }
++	  if (nf < 8)
++	    {
++	      avalue[i] = pfr;
++	      nf++;
++	      pfr++;
++	    }
++	  else
++	    {
++	      if (((long) pst) & 4)
++		pst++;
++	      avalue[i] = pst;
++	      pst += 2;
++	    }
+ 	  break;
+ 
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++	case FFI_TYPE_LONGDOUBLE:
++	  if (cif->abi != FFI_LINUX)
++	    goto do_struct;
++
++	  if (nf < 7)
++	    {
++	      avalue[i] = pfr;
++	      pfr += 2;
++	      nf += 2;
++	    }
++	  else
++	    {
++	      if (((long) pst) & 4)
++		pst++;
++	      avalue[i] = pst;
++	      pst += 4;
++	      nf = 8;
++	    }
++	  break;
++#endif
++
+ 	default:
+-	  FFI_ASSERT(0);
++	  FFI_ASSERT (0);
+ 	}
+ 
+       i++;
+@@ -1019,12 +1146,16 @@
+   if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT
+       && size <= 8)
+     return FFI_SYSV_TYPE_SMALL_STRUCT + size;
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++  else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE
++	   && cif->abi != FFI_LINUX)
++    return FFI_TYPE_STRUCT;
++#endif
+   return cif->rtype->type;
+-
+ }
+ 
+-int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure*, void*, unsigned long*,
+-					   ffi_dblfl*);
++int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *,
++					   unsigned long *, ffi_dblfl *);
+ 
+ int FFI_HIDDEN
+ ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue,
+@@ -1153,7 +1284,7 @@
+ #endif
+ 
+ 	default:
+-	  FFI_ASSERT(0);
++	  FFI_ASSERT (0);
+ 	}
+ 
+       i++;
+diff -urN old/libffi/src/powerpc/ffi_darwin.c src/libffi/src/powerpc/ffi_darwin.c
+--- old/libffi/src/powerpc/ffi_darwin.c	2004-09-02 21:14:45.000000000 +0000
++++ src/libffi/src/powerpc/ffi_darwin.c	2006-08-03 21:47:14.287169256 +0000
+@@ -79,9 +79,7 @@
+ 
+    */
+ 
+-/*@-exportheader@*/
+ void ffi_prep_args(extended_cif *ecif, unsigned *const stack)
+-/*@=exportheader@*/
+ {
+   const unsigned bytes = ecif->cif->bytes;
+   const unsigned flags = ecif->cif->flags;
+@@ -375,25 +373,12 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_AIX(/*@out@*/ extended_cif *,
+-			 unsigned, unsigned,
+-			 /*@out@*/ unsigned *,
+-			 void (*fn)(),
+-			 void (*fn2)());
+-extern void ffi_call_DARWIN(/*@out@*/ extended_cif *,
+-			    unsigned, unsigned,
+-			    /*@out@*/ unsigned *,
+-			    void (*fn)(),
+-			    void (*fn2)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
+-
+-void ffi_call(/*@dependent@*/ ffi_cif *cif,
+-	      void (*fn)(),
+-	      /*@out@*/ void *rvalue,
+-	      /*@dependent@*/ void **avalue)
++extern void ffi_call_AIX(extended_cif *, unsigned, unsigned, unsigned *,
++			 void (*fn)(), void (*fn2)());
++extern void ffi_call_DARWIN(extended_cif *, unsigned, unsigned, unsigned *,
++			    void (*fn)(), void (*fn2)());
++
++void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+@@ -406,9 +391,7 @@
+   if ((rvalue == NULL) &&
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -416,16 +399,12 @@
+   switch (cif->abi)
+     {
+     case FFI_AIX:
+-      /*@-usedef@*/
+-      ffi_call_AIX(&ecif, -cif->bytes,
+-		   cif->flags, ecif.rvalue, fn, ffi_prep_args);
+-      /*@=usedef@*/
++      ffi_call_AIX(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn,
++		   ffi_prep_args);
+       break;
+     case FFI_DARWIN:
+-      /*@-usedef@*/
+-      ffi_call_DARWIN(&ecif, -cif->bytes,
+-		      cif->flags, ecif.rvalue, fn, ffi_prep_args);
+-      /*@=usedef@*/
++      ffi_call_DARWIN(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn,
++		      ffi_prep_args);
+       break;
+     default:
+       FFI_ASSERT(0);
+diff -urN old/libffi/src/powerpc/ffitarget.h src/libffi/src/powerpc/ffitarget.h
+--- old/libffi/src/powerpc/ffitarget.h	2005-07-19 21:15:36.000000000 +0000
++++ src/libffi/src/powerpc/ffitarget.h	2006-08-03 21:47:14.282170016 +0000
+@@ -43,10 +43,15 @@
+   FFI_SYSV,
+   FFI_GCC_SYSV,
+   FFI_LINUX64,
++  FFI_LINUX,
+ # ifdef POWERPC64
+   FFI_DEFAULT_ABI = FFI_LINUX64,
+ # else
++#  if __LDBL_MANT_DIG__ == 106
++  FFI_DEFAULT_ABI = FFI_LINUX,
++#  else
+   FFI_DEFAULT_ABI = FFI_GCC_SYSV,
++#  endif
+ # endif
+ #endif
+ 
+@@ -69,7 +74,7 @@
+   FFI_DEFAULT_ABI = FFI_SYSV,
+ #endif
+ 
+-  FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
++  FFI_LAST_ABI
+ } ffi_abi;
+ #endif
+ 
+diff -urN old/libffi/src/powerpc/linux64.S src/libffi/src/powerpc/linux64.S
+--- old/libffi/src/powerpc/linux64.S	2005-09-26 19:56:22.000000000 +0000
++++ src/libffi/src/powerpc/linux64.S	2006-08-03 21:47:14.290168800 +0000
+@@ -120,12 +120,9 @@
+ 	blr
+ 
+ .Lfp_return_value:
+-	bt	27, .Lfd_return_value
+ 	bf	28, .Lfloat_return_value
+ 	stfd	%f1, 0(%r30)
+-	b	.Ldone_return_value
+-.Lfd_return_value:
+-	stfd	%f1, 0(%r30)
++	bf	27, .Ldone_return_value
+ 	stfd	%f2, 8(%r30)
+ 	b	.Ldone_return_value
+ .Lfloat_return_value:
+diff -urN old/libffi/src/powerpc/ppc_closure.S src/libffi/src/powerpc/ppc_closure.S
+--- old/libffi/src/powerpc/ppc_closure.S	2006-01-18 08:06:25.000000000 +0000
++++ src/libffi/src/powerpc/ppc_closure.S	2006-08-03 21:47:14.280170320 +0000
+@@ -58,218 +58,178 @@
+ 
+ 	# make the call
+ 	bl ffi_closure_helper_SYSV@local
+-
++.Lret:
+ 	# now r3 contains the return type
+ 	# so use it to look up in a table
+ 	# so we know how to deal with each type
+ 
+ 	# look up the proper starting point in table
+ 	# by using return type as offset
+-	addi %r6,%r1,112   # get pointer to results area
+-	bl .Lget_ret_type0_addr # get pointer to .Lret_type0 into LR
+-	mflr %r4           # move to r4
+-	slwi %r3,%r3,4     # now multiply return type by 16
+-	add %r3,%r3,%r4    # add contents of table to table address
++
++	mflr %r4		# move address of .Lret to r4
++	slwi %r3,%r3,4		# now multiply return type by 16
++	addi %r4, %r4, .Lret_type0 - .Lret
++	lwz %r0,148(%r1)
++	add %r3,%r3,%r4		# add contents of table to table address
+ 	mtctr %r3
+-	bctr               # jump to it
++	bctr			# jump to it
+ .LFE1:
+ 
+ # Each of the ret_typeX code fragments has to be exactly 16 bytes long
+ # (4 instructions). For cache effectiveness we align to a 16 byte boundary
+ # first.
+ 	.align 4
+-
+-	nop
+-	nop
+-	nop
+-.Lget_ret_type0_addr:
+-	blrl
+-
+ # case FFI_TYPE_VOID
+ .Lret_type0:
+-	b .Lfinish
+-	nop
+-	nop
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 	nop
+ 
+ # case FFI_TYPE_INT
+-.Lret_type1:
+-	lwz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lwz %r3,112+0(%r1)
++	mtlr %r0
++.Lfinish:
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_FLOAT
+-.Lret_type2:
+-	lfs %f1,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lfs %f1,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_DOUBLE
+-.Lret_type3:
+-	lfd %f1,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lfd %f1,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_LONGDOUBLE
+-.Lret_type4:
+-	lfd %f1,0(%r6)
++	lfd %f1,112+0(%r1)
++	lfd %f2,112+8(%r1)
++	mtlr %r0
+ 	b .Lfinish
+-	nop
+-	nop
+ 
+ # case FFI_TYPE_UINT8
+-.Lret_type5:
+-	lbz %r3,3(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lbz %r3,112+3(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_SINT8
+-.Lret_type6:
+-	lbz %r3,3(%r6)
++	lbz %r3,112+3(%r1)
+ 	extsb %r3,%r3
++	mtlr %r0
+ 	b .Lfinish
+-	nop
+ 
+ # case FFI_TYPE_UINT16
+-.Lret_type7:
+-	lhz %r3,2(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lhz %r3,112+2(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_SINT16
+-.Lret_type8:
+-	lha %r3,2(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lha %r3,112+2(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_UINT32
+-.Lret_type9:
+-	lwz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lwz %r3,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_SINT32
+-.Lret_type10:
+-	lwz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lwz %r3,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_TYPE_UINT64
+-.Lret_type11:
+-	lwz %r3,0(%r6)
+-	lwz %r4,4(%r6)
++	lwz %r3,112+0(%r1)
++	lwz %r4,112+4(%r1)
++	mtlr %r0
+ 	b .Lfinish
+-	nop
+ 
+ # case FFI_TYPE_SINT64
+-.Lret_type12:
+-	lwz %r3,0(%r6)
+-	lwz %r4,4(%r6)
++	lwz %r3,112+0(%r1)
++	lwz %r4,112+4(%r1)
++	mtlr %r0
+ 	b .Lfinish
+-	nop
+ 
+ # case FFI_TYPE_STRUCT
+-.Lret_type13:
+-	b .Lfinish
+-	nop
+-	nop
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 	nop
+ 
+ # case FFI_TYPE_POINTER
+-.Lret_type14:
+-	lwz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lwz %r3,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # The return types below are only used when the ABI type is FFI_SYSV.
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
+-.Lret_type15:
+-# fall through.
+-	lbz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lbz %r3,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct.
+-.Lret_type16:
+-# fall through.
+-	lhz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lhz %r3,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
+-.Lret_type17:
+-# fall through.
+-	lwz %r3,0(%r6)
++	lwz %r3,112+0(%r1)
+ 	srwi %r3,%r3,8
++	mtlr %r0
+ 	b .Lfinish
+-	nop
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
+-.Lret_type18:
+-# this one handles the structs from above too.
+-	lwz %r3,0(%r6)
+-	b .Lfinish
+-	nop
+-	nop
++	lwz %r3,112+0(%r1)
++	mtlr %r0
++	addi %r1,%r1,144
++	blr
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
+-.Lret_type19:
+-# fall through.
+-	lwz %r3,0(%r6)
+-	lwz %r4,4(%r6)
++	lwz %r3,112+0(%r1)
++	lwz %r4,112+4(%r1)
+ 	li %r5,24
+ 	b .Lstruct567
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
+-.Lret_type20:
+-# fall through.
+-	lwz %r3,0(%r6)
+-	lwz %r4,4(%r6)
++	lwz %r3,112+0(%r1)
++	lwz %r4,112+4(%r1)
+ 	li %r5,16
+ 	b .Lstruct567
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
+-.Lret_type21:
+-# fall through.
+-	lwz %r3,0(%r6)
+-	lwz %r4,4(%r6)
++	lwz %r3,112+0(%r1)
++	lwz %r4,112+4(%r1)
+ 	li %r5,8
+ 	b .Lstruct567
+ 
+ # case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
+-.Lret_type22:
+-# this one handles the above unhandled structs.
+-	lwz %r3,0(%r6)
+-	lwz %r4,4(%r6)
++	lwz %r3,112+0(%r1)
++	lwz %r4,112+4(%r1)
++	mtlr %r0
+ 	b .Lfinish
+-	nop
+ 
+-# case done
+-.Lfinish:
+-
+-	lwz %r0,148(%r1)
++.Lstruct567:
++	subfic %r6,%r5,32
++	srw %r4,%r4,%r5
++	slw %r6,%r3,%r6
++	srw %r3,%r3,%r5
++	or %r4,%r6,%r4
+ 	mtlr %r0
+ 	addi %r1,%r1,144
+ 	blr
+ 
+-.Lstruct567:
+-	subfic %r0,%r5,32
+-	srw %r4,%r4,%r5
+-	slw %r0,%r3,%r0
+-	srw %r3,%r3,%r5
+-	or %r4,%r0,%r4
+-	b .Lfinish
+ END(ffi_closure_SYSV)
+ 
+ 	.section	".eh_frame",EH_FRAME_FLAGS,@progbits
+diff -urN old/libffi/src/powerpc/sysv.S src/libffi/src/powerpc/sysv.S
+--- old/libffi/src/powerpc/sysv.S	2006-01-18 08:06:25.000000000 +0000
++++ src/libffi/src/powerpc/sysv.S	2006-08-03 21:47:14.285169560 +0000
+@@ -121,6 +121,8 @@
+ L(fp_return_value):
+ 	bf	28,L(float_return_value)
+ 	stfd	%f1,0(%r30)
++	bf	27,L(done_return_value)
++	stfd	%f2,8(%r30)
+ 	b	L(done_return_value)
+ L(float_return_value):
+ 	stfs	%f1,0(%r30)
+diff -urN old/libffi/src/prep_cif.c src/libffi/src/prep_cif.c
+--- old/libffi/src/prep_cif.c	2005-04-18 17:08:58.000000000 +0000
++++ src/libffi/src/prep_cif.c	2006-08-03 21:47:14.467141896 +0000
+@@ -25,7 +25,6 @@
+ #include <ffi_common.h>
+ #include <stdlib.h>
+ 
+-
+ /* Round up to FFI_SIZEOF_ARG. */
+ 
+ #define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG)
+@@ -33,14 +32,12 @@
+ /* Perform machine independent initialization of aggregate type
+    specifications. */
+ 
+-static ffi_status initialize_aggregate(/*@out@*/ ffi_type *arg)
++static ffi_status initialize_aggregate(ffi_type *arg)
+ {
+-  ffi_type **ptr; 
++  ffi_type **ptr;
+ 
+   FFI_ASSERT(arg != NULL);
+ 
+-  /*@-usedef@*/
+-
+   FFI_ASSERT(arg->elements != NULL);
+   FFI_ASSERT(arg->size == 0);
+   FFI_ASSERT(arg->alignment == 0);
+@@ -51,14 +48,14 @@
+     {
+       if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK))
+ 	return FFI_BAD_TYPEDEF;
+-      
++
+       /* Perform a sanity check on the argument type */
+       FFI_ASSERT_VALID_TYPE(*ptr);
+ 
+       arg->size = ALIGN(arg->size, (*ptr)->alignment);
+       arg->size += (*ptr)->size;
+ 
+-      arg->alignment = (arg->alignment > (*ptr)->alignment) ? 
++      arg->alignment = (arg->alignment > (*ptr)->alignment) ?
+ 	arg->alignment : (*ptr)->alignment;
+ 
+       ptr++;
+@@ -77,8 +74,6 @@
+     return FFI_BAD_TYPEDEF;
+   else
+     return FFI_OK;
+-
+-  /*@=usedef@*/
+ }
+ 
+ #ifndef __CRIS__
+@@ -89,10 +84,8 @@
+ /* Perform machine independent ffi_cif preparation, then call
+    machine dependent routine. */
+ 
+-ffi_status ffi_prep_cif(/*@out@*/ /*@partial@*/ ffi_cif *cif, 
+-			ffi_abi abi, unsigned int nargs, 
+-			/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type *rtype, 
+-			/*@dependent@*/ ffi_type **atypes)
++ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs,
++			ffi_type *rtype, ffi_type **atypes)
+ {
+   unsigned bytes = 0;
+   unsigned int i;
+@@ -109,10 +102,8 @@
+   cif->flags = 0;
+ 
+   /* Initialize the return type if necessary */
+-  /*@-usedef@*/
+   if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK))
+     return FFI_BAD_TYPEDEF;
+-  /*@=usedef@*/
+ 
+   /* Perform a sanity check on the return type */
+   FFI_ASSERT_VALID_TYPE(cif->rtype);
+@@ -135,7 +126,7 @@
+       if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK))
+ 	return FFI_BAD_TYPEDEF;
+ 
+-      /* Perform a sanity check on the argument type, do this 
++      /* Perform a sanity check on the argument type, do this
+ 	 check after the initialization.  */
+       FFI_ASSERT_VALID_TYPE(*ptr);
+ 
+@@ -152,7 +143,7 @@
+ 	  /* Add any padding if necessary */
+ 	  if (((*ptr)->alignment - 1) & bytes)
+ 	    bytes = ALIGN(bytes, (*ptr)->alignment);
+-	  
++
+ 	  bytes += STACK_ARG_SIZE((*ptr)->size);
+ 	}
+ #endif
+diff -urN old/libffi/src/raw_api.c src/libffi/src/raw_api.c
+--- old/libffi/src/raw_api.c	2003-10-21 19:01:58.000000000 +0000
++++ src/libffi/src/raw_api.c	2006-08-03 21:47:14.461142808 +0000
+@@ -189,10 +189,7 @@
+  * these following couple of functions will handle the translation forth
+  * and back automatically. */
+ 
+-void ffi_raw_call (/*@dependent@*/ ffi_cif *cif, 
+-		   void (*fn)(), 
+-		   /*@out@*/ void *rvalue, 
+-		   /*@dependent@*/ ffi_raw *raw)
++void ffi_raw_call (ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *raw)
+ {
+   void **avalue = (void**) alloca (cif->nargs * sizeof (void*));
+   ffi_raw_to_ptrarray (cif, raw, avalue);
+@@ -201,7 +198,7 @@
+ 
+ #if FFI_CLOSURES		/* base system provides closures */
+ 
+-static void 
++static void
+ ffi_translate_args (ffi_cif *cif, void *rvalue,
+ 		    void **avalue, void *user_data)
+ {
+@@ -224,7 +221,7 @@
+ {
+   ffi_status status;
+ 
+-  status = ffi_prep_closure ((ffi_closure*) cl, 
++  status = ffi_prep_closure ((ffi_closure*) cl,
+ 			     cif,
+ 			     &ffi_translate_args,
+ 			     (void*)cl);
+diff -urN old/libffi/src/sh/ffi.c src/libffi/src/sh/ffi.c
+--- old/libffi/src/sh/ffi.c	2005-07-22 22:56:27.000000000 +0000
++++ src/libffi/src/sh/ffi.c	2006-08-03 21:47:14.468141744 +0000
+@@ -1,5 +1,5 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 2002, 2003, 2004, 2005 Kaz Kojima
++   ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006 Kaz Kojima
+    
+    SuperH Foreign Function Interface 
+ 
+@@ -106,9 +106,7 @@
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments */
+ 
+-/*@-exportheader@*/
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+-/*@=exportheader@*/
+ {
+   register unsigned int i;
+   register int tmp;
+@@ -406,20 +404,10 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_SYSV(void (*)(char *, extended_cif *), 
+-			  /*@out@*/ extended_cif *, 
+-			  unsigned, unsigned, 
+-			  /*@out@*/ unsigned *, 
+-			  void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
+-
+-void ffi_call(/*@dependent@*/ ffi_cif *cif, 
+-	      void (*fn)(), 
+-	      /*@out@*/ void *rvalue, 
+-	      /*@dependent@*/ void **avalue)
++extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
++			  unsigned, unsigned, unsigned *, void (*fn)());
++
++void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+   UINT64 trvalue;
+@@ -436,9 +424,7 @@
+   else if ((rvalue == NULL) && 
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -446,10 +432,8 @@
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+-      /*@-usedef@*/
+-      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue,
++		    fn);
+       break;
+     default:
+       FFI_ASSERT(0);
+@@ -535,7 +519,6 @@
+   int freg = 0;
+ #endif
+   ffi_cif *cif; 
+-  double temp; 
+ 
+   cif = closure->cif;
+   avalue = alloca(cif->nargs * sizeof(void *));
+@@ -544,7 +527,7 @@
+      returns the data directly to the caller.  */
+   if (cif->rtype->type == FFI_TYPE_STRUCT && STRUCT_VALUE_ADDRESS_WITH_ARG)
+     {
+-      rvalue = *pgr++;
++      rvalue = (void *) *pgr++;
+       ireg = 1;
+     }
+   else
+@@ -611,6 +594,8 @@
+ 	{
+ 	  if (freg + 1 >= NFREGARG)
+ 	    continue;
++	  if (freg & 1)
++	    pfr++;
+ 	  freg = (freg + 1) & ~1;
+ 	  freg += 2;
+ 	  avalue[i] = pfr;
+diff -urN old/libffi/src/sh/sysv.S src/libffi/src/sh/sysv.S
+--- old/libffi/src/sh/sysv.S	2005-07-22 22:56:27.000000000 +0000
++++ src/libffi/src/sh/sysv.S	2006-08-03 21:47:14.470141440 +0000
+@@ -1,5 +1,5 @@
+ /* -----------------------------------------------------------------------
+-   sysv.S - Copyright (c) 2002, 2003, 2004 Kaz Kojima
++   sysv.S - Copyright (c) 2002, 2003, 2004, 2006 Kaz Kojima
+    
+    SuperH Foreign Function Interface 
+ 
+@@ -829,13 +829,13 @@
+ 	.byte	0x6	/* uleb128 0x6 */
+ 	.byte	0x8e	/* DW_CFA_offset, column 0xe */
+ 	.byte	0x5	/* uleb128 0x5 */
+-	.byte	0x8b	/* DW_CFA_offset, column 0xb */
++	.byte	0x84	/* DW_CFA_offset, column 0x4 */
+ 	.byte	0x4	/* uleb128 0x4 */
+-	.byte	0x8a	/* DW_CFA_offset, column 0xa */
++	.byte	0x85	/* DW_CFA_offset, column 0x5 */
+ 	.byte	0x3	/* uleb128 0x3 */
+-	.byte	0x89	/* DW_CFA_offset, column 0x9 */
++	.byte	0x86	/* DW_CFA_offset, column 0x6 */
+ 	.byte	0x2	/* uleb128 0x2 */
+-	.byte	0x88	/* DW_CFA_offset, column 0x8 */
++	.byte	0x87	/* DW_CFA_offset, column 0x7 */
+ 	.byte	0x1	/* uleb128 0x1 */
+ 	.byte	0x4	/* DW_CFA_advance_loc4 */
+ 	.4byte	.LCFIE-.LCFID
+diff -urN old/libffi/src/sh64/ffi.c src/libffi/src/sh64/ffi.c
+--- old/libffi/src/sh64/ffi.c	2005-07-20 23:32:01.000000000 +0000
++++ src/libffi/src/sh64/ffi.c	2006-08-03 21:47:14.458143264 +0000
+@@ -1,5 +1,5 @@
+ /* -----------------------------------------------------------------------
+-   ffi.c - Copyright (c) 2003, 2004 Kaz Kojima
++   ffi.c - Copyright (c) 2003, 2004, 2006 Kaz Kojima
+    
+    SuperH SHmedia Foreign Function Interface 
+ 
+@@ -54,9 +54,7 @@
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments */
+ 
+-/*@-exportheader@*/
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+-/*@=exportheader@*/
+ {
+   register unsigned int i;
+   register unsigned int avn;
+@@ -160,6 +158,7 @@
+   int n, m;
+   int greg;
+   int freg;
++  int fpair = -1;
+ 
+   greg = (return_type (cif->rtype) == FFI_TYPE_STRUCT ? 1 : 0);
+   freg = 0;
+@@ -175,7 +174,13 @@
+ 	  cif->bytes += sizeof (UINT64) - sizeof (float);
+ 	  if (freg >= NFREGARG - 1)
+ 	    continue;
+-	  freg++;
++	  if (fpair < 0)
++	    {
++	      fpair = freg;
++	      freg += 2;
++	    }
++	  else
++	    fpair = -1;
+ 	  cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++);
+ 	  break;
+ 
+@@ -184,7 +189,6 @@
+ 	    continue;
+ 	  if ((freg + 1) < NFREGARG)
+ 	    {
+-	      freg = (freg + 1) & ~1;
+ 	      freg += 2;
+ 	      cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++);
+ 	    }
+@@ -232,20 +236,11 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_SYSV(void (*)(char *, extended_cif *), 
+-			  /*@out@*/ extended_cif *, 
+-			  unsigned, unsigned, long long,
+-			  /*@out@*/ unsigned *, 
++extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
++			  unsigned, unsigned, long long, unsigned *,
+ 			  void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
+ 
+-void ffi_call(/*@dependent@*/ ffi_cif *cif, 
+-	      void (*fn)(), 
+-	      /*@out@*/ void *rvalue, 
+-	      /*@dependent@*/ void **avalue)
++void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+   UINT64 trvalue;
+@@ -262,9 +257,7 @@
+   else if ((rvalue == NULL) && 
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -272,10 +265,8 @@
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+-      /*@-usedef@*/
+-      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
+-		    cif->flags, cif->flags2, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, cif->flags2,
++		    ecif.rvalue, fn);
+       break;
+     default:
+       FFI_ASSERT(0);
+@@ -350,6 +341,7 @@
+   int i, avn;
+   int greg, freg;
+   ffi_cif *cif;
++  int fpair = -1;
+ 
+   cif = closure->cif;
+   avalue = alloca (cif->nargs * sizeof (void *));
+@@ -358,7 +350,7 @@
+      returns the data directly to the caller.  */
+   if (return_type (cif->rtype) == FFI_TYPE_STRUCT)
+     {
+-      rvalue = *pgr;
++      rvalue = (UINT64 *) *pgr;
+       greg = 1;
+     }
+   else
+@@ -402,11 +394,24 @@
+ 	  if ((*p_arg)->type == FFI_TYPE_FLOAT)
+ 	    {
+ 	      if (freg < NFREGARG - 1)
++		{
++		  if (fpair >= 0)
++		    {
++		      avalue[i] = (UINT32 *) pfr + fpair;
++		      fpair = -1;
++		    }
++		  else
++		    {
+ #ifdef __LITTLE_ENDIAN__
+-		avalue[i] = (UINT32 *) pfr + (1 ^ freg++);
++		      fpair = freg;
++		      avalue[i] = (UINT32 *) pfr + (1 ^ freg);
+ #else
+-		avalue[i] = (UINT32 *) pfr + freg++;
++		      fpair = 1 ^ freg;
++		      avalue[i] = (UINT32 *) pfr + freg;
+ #endif
++		      freg += 2;
++		    }
++		}
+ 	      else
+ #ifdef __LITTLE_ENDIAN__
+ 		avalue[i] = pgr + greg;
+@@ -428,7 +433,6 @@
+ 	    avalue[i] = pgr + greg;
+ 	  else
+ 	    {
+-	      freg = (freg + 1) & ~1;
+ 	      avalue[i] = pfr + (freg >> 1);
+ 	      freg += 2;
+ 	    }
+diff -urN old/libffi/src/sh64/sysv.S src/libffi/src/sh64/sysv.S
+--- old/libffi/src/sh64/sysv.S	2005-07-20 23:32:01.000000000 +0000
++++ src/libffi/src/sh64/sysv.S	2006-08-03 21:47:14.459143112 +0000
+@@ -1,5 +1,5 @@
+ /* -----------------------------------------------------------------------
+-   sysv.S - Copyright (c) 2003, 2004 Kaz Kojima
++   sysv.S - Copyright (c) 2003, 2004, 2006 Kaz Kojima
+    
+    SuperH SHmedia Foreign Function Interface 
+ 
+@@ -84,6 +84,7 @@
+ 	addi	r15, 64, r22
+ 	movi	0, r0
+ 	movi	0, r1
++	movi	-1, r23
+ 
+ 	pt/l	1f, tr1
+ 	bnei/l	r29, FFI_TYPE_STRUCT, tr1
+@@ -106,9 +107,6 @@
+ 
+ .L_pass_d:
+ 	addi	r0, 1, r0
+-	addi	r1, 1, r1
+-	andi	r1, ~1, r1
+-
+ 	pt/l	3f, tr0
+ 	movi	12, r20
+ 	bge/l	r1, r20, tr0
+@@ -158,13 +156,23 @@
+ 	addi.l	r15, 8, r15
+ 3:
+ 	pt/l	.L_pass, tr0
+-	addi	r1, 1, r1
+ 	blink	tr0, r63
+ 
+ .L_pop_f:
+ 	pt/l	.L_pop_f_tbl, tr1
++	pt/l	5f, tr2
+ 	gettr	tr1, r20
++	bge/l	r23, r63, tr2
++	add	r1, r63, r23 
+ 	shlli	r1, 3, r21
++	addi	r1, 2, r1
++	add	r20, r21, r20
++	ptabs/l	r20, tr1
++	blink	tr1, r63
++5:
++	addi	r23, 1, r21
++	movi	-1, r23
++	shlli	r21, 3, r21
+ 	add	r20, r21, r20
+ 	ptabs/l	r20, tr1
+ 	blink	tr1, r63
+diff -urN old/libffi/src/x86/ffi.c src/libffi/src/x86/ffi.c
+--- old/libffi/src/x86/ffi.c	2005-08-11 21:18:24.000000000 +0000
++++ src/libffi/src/x86/ffi.c	2006-08-03 21:47:14.460142960 +0000
+@@ -36,9 +36,7 @@
+ /* ffi_prep_args is called by the assembly routine once stack space
+    has been allocated for the function's arguments */
+ 
+-/*@-exportheader@*/
+ void ffi_prep_args(char *stack, extended_cif *ecif)
+-/*@=exportheader@*/
+ {
+   register unsigned int i;
+   register void **p_argv;
+@@ -168,32 +166,16 @@
+   return FFI_OK;
+ }
+ 
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_SYSV(void (*)(char *, extended_cif *), 
+-			  /*@out@*/ extended_cif *, 
+-			  unsigned, unsigned, 
+-			  /*@out@*/ unsigned *, 
+-			  void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
++extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
++			  unsigned, unsigned, unsigned *, void (*fn)());
+ 
+ #ifdef X86_WIN32
+-/*@-declundef@*/
+-/*@-exportheader@*/
+-extern void ffi_call_STDCALL(void (*)(char *, extended_cif *),
+-			  /*@out@*/ extended_cif *,
+-			  unsigned, unsigned,
+-			  /*@out@*/ unsigned *,
+-			  void (*fn)());
+-/*@=declundef@*/
+-/*@=exportheader@*/
++extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *,
++			  unsigned, unsigned, unsigned *, void (*fn)());
++
+ #endif /* X86_WIN32 */
+ 
+-void ffi_call(/*@dependent@*/ ffi_cif *cif, 
+-	      void (*fn)(), 
+-	      /*@out@*/ void *rvalue, 
+-	      /*@dependent@*/ void **avalue)
++void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ {
+   extended_cif ecif;
+ 
+@@ -206,9 +188,7 @@
+   if ((rvalue == NULL) && 
+       (cif->flags == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -217,17 +197,13 @@
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+-      /*@-usedef@*/
+-      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue,
++		    fn);
+       break;
+ #ifdef X86_WIN32
+     case FFI_STDCALL:
+-      /*@-usedef@*/
+-      ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes,
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags,
++		       ecif.rvalue, fn);
+       break;
+ #endif /* X86_WIN32 */
+     default:
+@@ -276,11 +252,9 @@
+   return cif->flags;
+ }
+ 
+-/*@-exportheader@*/
+-static void 
+-ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
+-			    void **avalue, ffi_cif *cif)
+-/*@=exportheader@*/
++static void
++ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue,
++			    ffi_cif *cif)
+ {
+   register unsigned int i;
+   register void **p_argv;
+@@ -400,27 +374,18 @@
+  * libffi-1.20, this is not the case.)
+  */
+ 
+-extern void 
+-ffi_call_SYSV(void (*)(char *, extended_cif *), 
+-	      /*@out@*/ extended_cif *, 
+-	      unsigned, unsigned, 
+-	      /*@out@*/ unsigned *, 
+-	      void (*fn)());
++extern void
++ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, 
++	      unsigned, unsigned *, void (*fn)());
+ 
+ #ifdef X86_WIN32
+ extern void
+-ffi_call_STDCALL(void (*)(char *, extended_cif *),
+-	      /*@out@*/ extended_cif *,
+-	      unsigned, unsigned,
+-	      /*@out@*/ unsigned *,
+-	      void (*fn)());
++ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned,
++		 unsigned, unsigned *, void (*fn)());
+ #endif /* X86_WIN32 */
+ 
+ void
+-ffi_raw_call(/*@dependent@*/ ffi_cif *cif, 
+-	     void (*fn)(), 
+-	     /*@out@*/ void *rvalue, 
+-	     /*@dependent@*/ ffi_raw *fake_avalue)
++ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue)
+ {
+   extended_cif ecif;
+   void **avalue = (void **)fake_avalue;
+@@ -434,9 +399,7 @@
+   if ((rvalue == NULL) && 
+       (cif->rtype->type == FFI_TYPE_STRUCT))
+     {
+-      /*@-sysunrecog@*/
+       ecif.rvalue = alloca(cif->rtype->size);
+-      /*@=sysunrecog@*/
+     }
+   else
+     ecif.rvalue = rvalue;
+@@ -445,17 +408,13 @@
+   switch (cif->abi) 
+     {
+     case FFI_SYSV:
+-      /*@-usedef@*/
+-      ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, 
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags,
++		    ecif.rvalue, fn);
+       break;
+ #ifdef X86_WIN32
+     case FFI_STDCALL:
+-      /*@-usedef@*/
+-      ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes,
+-		    cif->flags, ecif.rvalue, fn);
+-      /*@=usedef@*/
++      ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags,
++		       ecif.rvalue, fn);
+       break;
+ #endif /* X86_WIN32 */
+     default:
+diff -urN old/libffi/testsuite/Makefile.in src/libffi/testsuite/Makefile.in
+--- old/libffi/testsuite/Makefile.in	2005-07-19 21:15:36.000000000 +0000
++++ src/libffi/testsuite/Makefile.in	2006-08-03 21:47:14.470141440 +0000
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.5 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004  Free Software Foundation, Inc.
++# 2003, 2004, 2005  Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -109,6 +109,8 @@
+ MIPS_LINUX_FALSE = @MIPS_LINUX_FALSE@
+ MIPS_LINUX_TRUE = @MIPS_LINUX_TRUE@
+ OBJEXT = @OBJEXT@
++PA64_HPUX_FALSE = @PA64_HPUX_FALSE@
++PA64_HPUX_TRUE = @PA64_HPUX_TRUE@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+@@ -116,8 +118,10 @@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+-PA_FALSE = @PA_FALSE@
+-PA_TRUE = @PA_TRUE@
++PA_HPUX_FALSE = @PA_HPUX_FALSE@
++PA_HPUX_TRUE = @PA_HPUX_TRUE@
++PA_LINUX_FALSE = @PA_LINUX_FALSE@
++PA_LINUX_TRUE = @PA_LINUX_TRUE@
+ POWERPC_AIX_FALSE = @POWERPC_AIX_FALSE@
+ POWERPC_AIX_TRUE = @POWERPC_AIX_TRUE@
+ POWERPC_DARWIN_FALSE = @POWERPC_DARWIN_FALSE@
+diff -urN old/libffi/testsuite/libffi.call/call.exp src/libffi/testsuite/libffi.call/call.exp
+--- old/libffi/testsuite/libffi.call/call.exp	2003-09-04 14:49:22.000000000 +0000
++++ src/libffi/testsuite/libffi.call/call.exp	2006-08-03 21:47:15.152037776 +0000
+@@ -1,18 +1,18 @@
+-#   Copyright (C) 2003 Free Software Foundation, Inc.
++# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2 of the License, or
+ # (at your option) any later version.
+-# 
++#
+ # 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.  See the
+ # GNU General Public License for more details.
+-# 
++#
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ 
+ # libffi testsuite that uses the 'dg.exp' driver.
+ 
+@@ -23,7 +23,10 @@
+ 
+ global srcdir subdir
+ 
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "" "" 
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O0 -W -Wall" ""
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2" ""
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O3" ""
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-Os" ""
+ 
+ dg-finish
+ 
+diff -urN old/libffi/testsuite/libffi.call/closure_fn0.c src/libffi/testsuite/libffi.call/closure_fn0.c
+--- old/libffi/testsuite/libffi.call/closure_fn0.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/closure_fn0.c	2006-08-03 21:47:15.148038384 +0000
+@@ -10,7 +10,8 @@
+ #include "ffitest.h"
+ 
+ static void
+-closure_test_fn0(ffi_cif* cif,void* resp,void** args, void* userdata)
++closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		 void* userdata)
+ {
+   *(ffi_arg*)resp =
+     (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) +
+diff -urN old/libffi/testsuite/libffi.call/closure_fn1.c src/libffi/testsuite/libffi.call/closure_fn1.c
+--- old/libffi/testsuite/libffi.call/closure_fn1.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/closure_fn1.c	2006-08-03 21:47:14.749099032 +0000
+@@ -10,7 +10,7 @@
+ #include "ffitest.h"
+ 
+ 
+-static void closure_test_fn1(ffi_cif* cif,void* resp,void** args,
++static void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, void** args,
+ 			     void* userdata)
+ {
+   *(ffi_arg*)resp =
+diff -urN old/libffi/testsuite/libffi.call/closure_fn2.c src/libffi/testsuite/libffi.call/closure_fn2.c
+--- old/libffi/testsuite/libffi.call/closure_fn2.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/closure_fn2.c	2006-08-03 21:47:15.149038232 +0000
+@@ -9,7 +9,7 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void closure_test_fn2(ffi_cif* cif,void* resp,void** args,
++static void closure_test_fn2(ffi_cif* cif __UNUSED__, void* resp, void** args,
+ 			     void* userdata)
+ {
+   *(ffi_arg*)resp =
+diff -urN old/libffi/testsuite/libffi.call/closure_fn3.c src/libffi/testsuite/libffi.call/closure_fn3.c
+--- old/libffi/testsuite/libffi.call/closure_fn3.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/closure_fn3.c	2006-08-03 21:47:14.752098576 +0000
+@@ -9,7 +9,7 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void closure_test_fn3(ffi_cif* cif,void* resp,void** args,
++static void closure_test_fn3(ffi_cif* cif __UNUSED__, void* resp, void** args,
+ 			     void* userdata)
+  {
+    *(ffi_arg*)resp =
+diff -urN old/libffi/testsuite/libffi.call/closure_fn4.c src/libffi/testsuite/libffi.call/closure_fn4.c
+--- old/libffi/testsuite/libffi.call/closure_fn4.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/closure_fn4.c	2006-08-03 21:47:15.150038080 +0000
+@@ -11,7 +11,8 @@
+ #include "ffitest.h"
+ 
+ static void
+-closure_test_fn0(ffi_cif* cif,void* resp,void** args, void* userdata)
++closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		 void* userdata)
+ {
+   *(ffi_arg*)resp =
+     (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] +
+diff -urN old/libffi/testsuite/libffi.call/closure_fn5.c src/libffi/testsuite/libffi.call/closure_fn5.c
+--- old/libffi/testsuite/libffi.call/closure_fn5.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/closure_fn5.c	2006-08-03 21:47:14.753098424 +0000
+@@ -7,11 +7,11 @@
+    Originator:	<andreast@gcc.gnu.org> 20031026	 */
+ 
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+-
+ #include "ffitest.h"
+ 
+ static void
+-closure_test_fn5(ffi_cif* cif,void* resp,void** args, void* userdata)
++closure_test_fn5(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		 void* userdata)
+ {
+   *(ffi_arg*)resp =
+     (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] +
+diff -urN old/libffi/testsuite/libffi.call/cls_12byte.c src/libffi/testsuite/libffi.call/cls_12byte.c
+--- old/libffi/testsuite/libffi.call/cls_12byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_12byte.c	2006-08-03 21:47:15.138039904 +0000
+@@ -28,7 +28,8 @@
+   return result;
+ }
+ 
+-static void cls_struct_12byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++static void cls_struct_12byte_gn(ffi_cif* cif __UNUSED__, void* resp,
++				 void** args , void* userdata __UNUSED__)
+ {
+   struct cls_struct_12byte b1, b2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_16byte.c src/libffi/testsuite/libffi.call/cls_16byte.c
+--- old/libffi/testsuite/libffi.call/cls_16byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_16byte.c	2006-08-03 21:47:15.145038840 +0000
+@@ -29,7 +29,8 @@
+   return result;
+ }
+ 
+-static void cls_struct_16byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++static void cls_struct_16byte_gn(ffi_cif* cif __UNUSED__, void* resp,
++				 void** args, void* userdata __UNUSED__)
+ {
+   struct cls_struct_16byte b1, b2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_18byte.c src/libffi/testsuite/libffi.call/cls_18byte.c
+--- old/libffi/testsuite/libffi.call/cls_18byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_18byte.c	2006-08-03 21:47:15.146038688 +0000
+@@ -33,7 +33,8 @@
+ }
+ 
+ static void
+-cls_struct_18byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_18byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+   struct cls_struct_18byte a1, a2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_19byte.c src/libffi/testsuite/libffi.call/cls_19byte.c
+--- old/libffi/testsuite/libffi.call/cls_19byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_19byte.c	2006-08-03 21:47:14.744099792 +0000
+@@ -36,7 +36,8 @@
+ }
+ 
+ static void
+-cls_struct_19byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_19byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+   struct cls_struct_19byte a1, a2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_1_1byte.c src/libffi/testsuite/libffi.call/cls_1_1byte.c
+--- old/libffi/testsuite/libffi.call/cls_1_1byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_1_1byte.c	2006-08-03 21:47:15.138039904 +0000
+@@ -26,7 +26,8 @@
+ }
+ 
+ static void
+-cls_struct_1_1byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_1_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		      void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_1_1byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_20byte.c src/libffi/testsuite/libffi.call/cls_20byte.c
+--- old/libffi/testsuite/libffi.call/cls_20byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_20byte.c	2006-08-03 21:47:14.954067872 +0000
+@@ -29,7 +29,8 @@
+ }
+ 
+ static void
+-cls_struct_20byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+   struct cls_struct_20byte a1, a2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_20byte1.c src/libffi/testsuite/libffi.call/cls_20byte1.c
+--- old/libffi/testsuite/libffi.call/cls_20byte1.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_20byte1.c	2006-08-03 21:47:14.654113472 +0000
+@@ -29,7 +29,8 @@
+ }
+ 
+ static void
+-cls_struct_20byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+   struct cls_struct_20byte a1, a2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_24byte.c src/libffi/testsuite/libffi.call/cls_24byte.c
+--- old/libffi/testsuite/libffi.call/cls_24byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_24byte.c	2006-08-03 21:47:14.957067416 +0000
+@@ -38,7 +38,8 @@
+ }
+ 
+ static void
+-cls_struct_24byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_24byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+   struct cls_struct_24byte b0, b1, b2, b3;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_2byte.c src/libffi/testsuite/libffi.call/cls_2byte.c
+--- old/libffi/testsuite/libffi.call/cls_2byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_2byte.c	2006-08-03 21:47:14.754098272 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_2byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_2byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_2byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_3_1byte.c src/libffi/testsuite/libffi.call/cls_3_1byte.c
+--- old/libffi/testsuite/libffi.call/cls_3_1byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_3_1byte.c	2006-08-03 21:47:15.139039752 +0000
+@@ -32,7 +32,8 @@
+ }
+ 
+ static void
+-cls_struct_3_1byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_3_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		      void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_3_1byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_3byte1.c src/libffi/testsuite/libffi.call/cls_3byte1.c
+--- old/libffi/testsuite/libffi.call/cls_3byte1.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_3byte1.c	2006-08-03 21:47:15.140039600 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_3byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_3byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_3byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_3byte2.c src/libffi/testsuite/libffi.call/cls_3byte2.c
+--- old/libffi/testsuite/libffi.call/cls_3byte2.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_3byte2.c	2006-08-03 21:47:14.742100096 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_3byte_gn1(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_3byte_gn1(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_3byte_1 a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_4_1byte.c src/libffi/testsuite/libffi.call/cls_4_1byte.c
+--- old/libffi/testsuite/libffi.call/cls_4_1byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_4_1byte.c	2006-08-03 21:47:15.141039448 +0000
+@@ -34,7 +34,8 @@
+ }
+ 
+ static void
+-cls_struct_4_1byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_4_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		      void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_4_1byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_4byte.c src/libffi/testsuite/libffi.call/cls_4byte.c
+--- old/libffi/testsuite/libffi.call/cls_4byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_4byte.c	2006-08-03 21:47:14.760097360 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_4byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_4byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_4byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_5_1_byte.c src/libffi/testsuite/libffi.call/cls_5_1_byte.c
+--- old/libffi/testsuite/libffi.call/cls_5_1_byte.c	2005-07-10 20:14:37.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_5_1_byte.c	2006-08-03 21:47:14.955067720 +0000
+@@ -36,7 +36,8 @@
+ }
+ 
+ static void
+-cls_struct_5byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_5byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_5byte.c src/libffi/testsuite/libffi.call/cls_5byte.c
+--- old/libffi/testsuite/libffi.call/cls_5byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_5byte.c	2006-08-03 21:47:15.156037168 +0000
+@@ -31,7 +31,8 @@
+ }
+ 
+ static void
+-cls_struct_5byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_5byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_64byte.c src/libffi/testsuite/libffi.call/cls_64byte.c
+--- old/libffi/testsuite/libffi.call/cls_64byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_64byte.c	2006-08-03 21:47:14.958067264 +0000
+@@ -43,7 +43,8 @@
+ }
+ 
+ static void
+-cls_struct_64byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_64byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		     void* userdata __UNUSED__)
+ {
+   struct cls_struct_64byte b0, b1, b2, b3;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_6_1_byte.c src/libffi/testsuite/libffi.call/cls_6_1_byte.c
+--- old/libffi/testsuite/libffi.call/cls_6_1_byte.c	2005-07-10 20:14:37.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_6_1_byte.c	2006-08-03 21:47:15.142039296 +0000
+@@ -38,7 +38,8 @@
+ }
+ 
+ static void
+-cls_struct_6byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_6byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_6byte.c src/libffi/testsuite/libffi.call/cls_6byte.c
+--- old/libffi/testsuite/libffi.call/cls_6byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_6byte.c	2006-08-03 21:47:14.946069088 +0000
+@@ -33,7 +33,8 @@
+ }
+ 
+ static void
+-cls_struct_6byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_6byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_7_1_byte.c src/libffi/testsuite/libffi.call/cls_7_1_byte.c
+--- old/libffi/testsuite/libffi.call/cls_7_1_byte.c	2005-07-10 20:14:37.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_7_1_byte.c	2006-08-03 21:47:14.649114232 +0000
+@@ -40,7 +40,8 @@
+ }
+ 
+ static void
+-cls_struct_7byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_7byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_7byte.c src/libffi/testsuite/libffi.call/cls_7byte.c
+--- old/libffi/testsuite/libffi.call/cls_7byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_7byte.c	2006-08-03 21:47:15.331010568 +0000
+@@ -33,7 +33,8 @@
+ }
+ 
+ static void
+-cls_struct_7byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_7byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_8byte.c src/libffi/testsuite/libffi.call/cls_8byte.c
+--- old/libffi/testsuite/libffi.call/cls_8byte.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_8byte.c	2006-08-03 21:47:14.947068936 +0000
+@@ -27,7 +27,8 @@
+ }
+ 
+ static void
+-cls_struct_8byte_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_8byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_8byte a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_9byte1.c src/libffi/testsuite/libffi.call/cls_9byte1.c
+--- old/libffi/testsuite/libffi.call/cls_9byte1.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_9byte1.c	2006-08-03 21:47:14.745099640 +0000
+@@ -29,8 +29,8 @@
+   return result;
+ }
+ 
+-static void cls_struct_9byte_gn(ffi_cif* cif, void* resp, void** args,
+-				void* userdata)
++static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp,
++				void** args, void* userdata __UNUSED__)
+ {
+   struct cls_struct_9byte b1, b2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_9byte2.c src/libffi/testsuite/libffi.call/cls_9byte2.c
+--- old/libffi/testsuite/libffi.call/cls_9byte2.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_9byte2.c	2006-08-03 21:47:15.149038232 +0000
+@@ -29,8 +29,8 @@
+   return result;
+ }
+ 
+-static void cls_struct_9byte_gn(ffi_cif* cif, void* resp, void** args,
+-				void* userdata)
++static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp,
++				void** args, void* userdata __UNUSED__)
+ {
+   struct cls_struct_9byte b1, b2;
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_align_double.c src/libffi/testsuite/libffi.call/cls_align_double.c
+--- old/libffi/testsuite/libffi.call/cls_align_double.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_double.c	2006-08-03 21:47:14.754098272 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_float.c src/libffi/testsuite/libffi.call/cls_align_float.c
+--- old/libffi/testsuite/libffi.call/cls_align_float.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_float.c	2006-08-03 21:47:14.749099032 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_longdouble.c src/libffi/testsuite/libffi.call/cls_align_longdouble.c
+--- old/libffi/testsuite/libffi.call/cls_align_longdouble.c	2005-02-11 22:33:16.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_longdouble.c	2006-08-03 21:47:15.137040056 +0000
+@@ -29,7 +29,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_pointer.c src/libffi/testsuite/libffi.call/cls_align_pointer.c
+--- old/libffi/testsuite/libffi.call/cls_align_pointer.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_pointer.c	2006-08-03 21:47:15.330010720 +0000
+@@ -19,16 +19,19 @@
+   struct cls_struct_align result;
+ 
+   result.a = a1.a + a2.a;
+-  result.b = (void *)((size_t)a1.b + (size_t)a2.b);
++  result.b = (void *)((unsigned long)a1.b + (unsigned long)a2.b);
+   result.c = a1.c + a2.c;
+ 
+-  printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, (size_t)a1.b, a1.c, a2.a, (size_t)a2.b, a2.c, result.a, (size_t)result.b, result.c);
++  printf("%d %lu %d %d %lu %d: %d %lu %d\n", a1.a, (unsigned long)a1.b, a1.c,
++	 a2.a, (unsigned long)a2.b, a2.c, result.a, (unsigned long)result.b,
++	 result.c);
+ 
+-  return  result;
++  return result;
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+@@ -84,14 +87,14 @@
+ 
+   ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
+   /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
+-  printf("res: %d %d %d\n", res_dbl.a, (size_t)res_dbl.b, res_dbl.c);
++  printf("res: %d %lu %d\n", res_dbl.a, (unsigned long)res_dbl.b, res_dbl.c);
+   /* { dg-output "\nres: 13 14271 140" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
+ 
+   res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
+   /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
+-  printf("res: %d %d %d\n", res_dbl.a, (size_t)res_dbl.b, res_dbl.c);
++  printf("res: %d %lu %d\n", res_dbl.a, (unsigned long)res_dbl.b, res_dbl.c);
+   /* { dg-output "\nres: 13 14271 140" } */
+ 
+   exit(0);
+diff -urN old/libffi/testsuite/libffi.call/cls_align_sint16.c src/libffi/testsuite/libffi.call/cls_align_sint16.c
+--- old/libffi/testsuite/libffi.call/cls_align_sint16.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_sint16.c	2006-08-03 21:47:14.949068632 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_sint32.c src/libffi/testsuite/libffi.call/cls_align_sint32.c
+--- old/libffi/testsuite/libffi.call/cls_align_sint32.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_sint32.c	2006-08-03 21:47:15.332010416 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_sint64.c src/libffi/testsuite/libffi.call/cls_align_sint64.c
+--- old/libffi/testsuite/libffi.call/cls_align_sint64.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_sint64.c	2006-08-03 21:47:14.741100248 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_uint16.c src/libffi/testsuite/libffi.call/cls_align_uint16.c
+--- old/libffi/testsuite/libffi.call/cls_align_uint16.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_uint16.c	2006-08-03 21:47:14.472141136 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_uint32.c src/libffi/testsuite/libffi.call/cls_align_uint32.c
+--- old/libffi/testsuite/libffi.call/cls_align_uint32.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_uint32.c	2006-08-03 21:47:14.949068632 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_align_uint64.c src/libffi/testsuite/libffi.call/cls_align_uint64.c
+--- old/libffi/testsuite/libffi.call/cls_align_uint64.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_align_uint64.c	2006-08-03 21:47:14.965066200 +0000
+@@ -28,7 +28,8 @@
+ }
+ 
+ static void
+-cls_struct_align_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		    void* userdata __UNUSED__)
+ {
+ 
+   struct cls_struct_align a1, a2;
+diff -urN old/libffi/testsuite/libffi.call/cls_double.c src/libffi/testsuite/libffi.call/cls_double.c
+--- old/libffi/testsuite/libffi.call/cls_double.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_double.c	2006-08-03 21:47:14.650114080 +0000
+@@ -7,8 +7,8 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_double_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			      void* userdata __UNUSED__)
+  {
+    *(double *)resp = *(double *)args[0];
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_float.c src/libffi/testsuite/libffi.call/cls_float.c
+--- old/libffi/testsuite/libffi.call/cls_float.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_float.c	2006-08-03 21:47:14.954067872 +0000
+@@ -7,8 +7,8 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_float_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			     void* userdata __UNUSED__)
+  {
+    *(float *)resp = *(float *)args[0];
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_multi_schar.c src/libffi/testsuite/libffi.call/cls_multi_schar.c
+--- old/libffi/testsuite/libffi.call/cls_multi_schar.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_multi_schar.c	2006-08-03 21:47:14.743099944 +0000
+@@ -19,7 +19,8 @@
+ 
+ }
+ 
+-static void test_func_gn(ffi_cif *cif, void *rval, void **avals, void *data)
++static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
++			 void *data __UNUSED__)
+ {
+   signed char a1, a2;
+ 
+@@ -67,7 +68,7 @@
+ 
+   ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
+   /* { dg-output "2 125: 127" } */
+-  printf("res: %d\n", res_call);
++  printf("res: %d\n", (signed char)res_call);
+   /* { dg-output "\nres: 127" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL)  == FFI_OK);
+diff -urN old/libffi/testsuite/libffi.call/cls_multi_sshort.c src/libffi/testsuite/libffi.call/cls_multi_sshort.c
+--- old/libffi/testsuite/libffi.call/cls_multi_sshort.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_multi_sshort.c	2006-08-03 21:47:14.948068784 +0000
+@@ -19,7 +19,8 @@
+ 
+ }
+ 
+-static void test_func_gn(ffi_cif *cif, void *rval, void **avals, void *data)
++static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
++			 void *data __UNUSED__)
+ {
+   signed short a1, a2;
+ 
+@@ -67,7 +68,7 @@
+ 
+   ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
+   /* { dg-output "2 32765: 32767" } */
+-  printf("res: %d\n", res_call);
++  printf("res: %d\n", (unsigned short)res_call);
+   /* { dg-output "\nres: 32767" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL)  == FFI_OK);
+diff -urN old/libffi/testsuite/libffi.call/cls_multi_sshortchar.c src/libffi/testsuite/libffi.call/cls_multi_sshortchar.c
+--- old/libffi/testsuite/libffi.call/cls_multi_sshortchar.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_multi_sshortchar.c	2006-08-03 21:47:14.740100400 +0000
+@@ -20,7 +20,8 @@
+ 
+ }
+ 
+-static void test_func_gn(ffi_cif *cif, void *rval, void **avals, void *data)
++static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
++			 void *data __UNUSED__)
+ {
+   signed char a1, a3;
+   signed short a2, a4;
+@@ -79,7 +80,7 @@
+ 
+   ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
+   /* { dg-output "1 32765 127 -128: 32765" } */
+-  printf("res: %d\n", res_call);
++  printf("res: %d\n", (signed short)res_call);
+   /* { dg-output "\nres: 32765" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL)  == FFI_OK);
+diff -urN old/libffi/testsuite/libffi.call/cls_multi_uchar.c src/libffi/testsuite/libffi.call/cls_multi_uchar.c
+--- old/libffi/testsuite/libffi.call/cls_multi_uchar.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_multi_uchar.c	2006-08-03 21:47:14.743099944 +0000
+@@ -20,7 +20,8 @@
+ 
+ }
+ 
+-static void test_func_gn(ffi_cif *cif, void *rval, void **avals, void *data)
++static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
++			 void *data __UNUSED__)
+ {
+   unsigned char a1, a2, a3, a4;
+ 
+@@ -35,7 +36,9 @@
+ 
+ typedef unsigned char (*test_type)(unsigned char, unsigned char,
+ 				   unsigned char, unsigned char);
+-void test_func(ffi_cif *cif, void *rval, void **avals, void *data)
++
++void test_func(ffi_cif *cif __UNUSED__, void *rval __UNUSED__, void **avals,
++	       void *data __UNUSED__)
+ {
+   printf("%d %d %d %d\n", *(unsigned char *)avals[0],
+ 	 *(unsigned char *)avals[1], *(unsigned char *)avals[2],
+@@ -82,7 +85,7 @@
+ 
+   ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
+   /* { dg-output "1 2 127 125: 255" } */
+-  printf("res: %d\n", res_call);
++  printf("res: %d\n", (unsigned char)res_call);
+   /* { dg-output "\nres: 255" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL)  == FFI_OK);
+diff -urN old/libffi/testsuite/libffi.call/cls_multi_ushort.c src/libffi/testsuite/libffi.call/cls_multi_ushort.c
+--- old/libffi/testsuite/libffi.call/cls_multi_ushort.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_multi_ushort.c	2006-08-03 21:47:14.471141288 +0000
+@@ -19,7 +19,8 @@
+ 
+ }
+ 
+-static void test_func_gn(ffi_cif *cif, void *rval, void **avals, void *data)
++static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
++			 void *data __UNUSED__)
+ {
+   unsigned short a1, a2;
+ 
+@@ -67,7 +68,7 @@
+ 
+   ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
+   /* { dg-output "2 32765: 32767" } */
+-  printf("res: %d\n", res_call);
++  printf("res: %d\n", (unsigned short)res_call);
+   /* { dg-output "\nres: 32767" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL)  == FFI_OK);
+diff -urN old/libffi/testsuite/libffi.call/cls_multi_ushortchar.c src/libffi/testsuite/libffi.call/cls_multi_ushortchar.c
+--- old/libffi/testsuite/libffi.call/cls_multi_ushortchar.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_multi_ushortchar.c	2006-08-03 21:47:14.960066960 +0000
+@@ -20,7 +20,8 @@
+ 
+ }
+ 
+-static void test_func_gn(ffi_cif *cif, void *rval, void **avals, void *data)
++static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
++			 void *data __UNUSED__)
+ {
+   unsigned char a1, a3;
+   unsigned short a2, a4;
+@@ -79,7 +80,7 @@
+ 
+   ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
+   /* { dg-output "1 2 127 128: 258" } */
+-  printf("res: %d\n", res_call);
++  printf("res: %d\n", (unsigned short)res_call);
+   /* { dg-output "\nres: 258" } */
+ 
+   CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL)  == FFI_OK);
+diff -urN old/libffi/testsuite/libffi.call/cls_schar.c src/libffi/testsuite/libffi.call/cls_schar.c
+--- old/libffi/testsuite/libffi.call/cls_schar.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_schar.c	2006-08-03 21:47:14.964066352 +0000
+@@ -7,12 +7,12 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_schar_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			     void* userdata __UNUSED__)
+ {
+   *(ffi_arg*)resp = *(signed char *)args[0];
+   printf("%d: %d\n",*(signed char *)args[0],
+-	 *(ffi_arg*)resp);
++	 (int)*(ffi_arg *)(resp));
+ }
+ typedef signed char (*cls_ret_schar)(signed char);
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_sint.c src/libffi/testsuite/libffi.call/cls_sint.c
+--- old/libffi/testsuite/libffi.call/cls_sint.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_sint.c	2006-08-03 21:47:14.651113928 +0000
+@@ -7,12 +7,12 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_sint_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			    void* userdata __UNUSED__)
+ {
+   *(ffi_arg*)resp = *(signed int *)args[0];
+   printf("%d: %d\n",*(signed int *)args[0],
+-	 *(ffi_arg*)resp);
++	 (int)*(ffi_arg *)(resp));
+ }
+ typedef signed int (*cls_ret_sint)(signed int);
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_sshort.c src/libffi/testsuite/libffi.call/cls_sshort.c
+--- old/libffi/testsuite/libffi.call/cls_sshort.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_sshort.c	2006-08-03 21:47:14.752098576 +0000
+@@ -7,12 +7,12 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_sshort_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++static void cls_ret_sshort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			      void* userdata __UNUSED__)
+ {
+   *(ffi_arg*)resp = *(signed short *)args[0];
+   printf("%d: %d\n",*(signed short *)args[0],
+-	 *(ffi_arg*)resp);
++	 (int)*(ffi_arg *)(resp));
+ }
+ typedef signed short (*cls_ret_sshort)(signed short);
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_uchar.c src/libffi/testsuite/libffi.call/cls_uchar.c
+--- old/libffi/testsuite/libffi.call/cls_uchar.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_uchar.c	2006-08-03 21:47:14.964066352 +0000
+@@ -7,12 +7,12 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_uchar_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++static void cls_ret_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			     void* userdata __UNUSED__)
+ {
+   *(ffi_arg*)resp = *(unsigned char *)args[0];
+   printf("%d: %d\n",*(unsigned char *)args[0],
+-	 *(ffi_arg*)resp);
++	 (int)*(ffi_arg *)(resp));
+ }
+ typedef unsigned char (*cls_ret_uchar)(unsigned char);
+ 
+diff -urN old/libffi/testsuite/libffi.call/cls_uint.c src/libffi/testsuite/libffi.call/cls_uint.c
+--- old/libffi/testsuite/libffi.call/cls_uint.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_uint.c	2006-08-03 21:47:14.959067112 +0000
+@@ -7,14 +7,14 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_uint_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
+- {
+-   *(ffi_arg *)resp = *(unsigned int *)args[0];
+-
+-   printf("%d: %d\n",*(unsigned int *)args[0],
+-	  *(ffi_arg *)resp);
+- }
++static void cls_ret_uint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			    void* userdata __UNUSED__)
++{
++  *(ffi_arg *)resp = *(unsigned int *)args[0];
++
++  printf("%d: %d\n",*(unsigned int *)args[0],
++	 (int)*(ffi_arg *)(resp));
++}
+ typedef unsigned int (*cls_ret_uint)(unsigned int);
+ 
+ int main (void)
+diff -urN old/libffi/testsuite/libffi.call/cls_ulonglong.c src/libffi/testsuite/libffi.call/cls_ulonglong.c
+--- old/libffi/testsuite/libffi.call/cls_ulonglong.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_ulonglong.c	2006-08-03 21:47:14.966066048 +0000
+@@ -7,14 +7,14 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_ulonglong_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
+- {
+-   *(unsigned long long *)resp=  *(unsigned long long *)args[0];
+-
+-   printf("%llu: %llu\n",*(unsigned long long *)args[0],
+-	  *(unsigned long long *)resp);
+- }
++static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp,
++				 void** args, void* userdata __UNUSED__)
++{
++  *(unsigned long long *)resp=  *(unsigned long long *)args[0];
++
++  printf("%llu: %llu\n",*(unsigned long long *)args[0],
++	 *(unsigned long long *)(resp));
++}
+ typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long);
+ 
+ int main (void)
+diff -urN old/libffi/testsuite/libffi.call/cls_ushort.c src/libffi/testsuite/libffi.call/cls_ushort.c
+--- old/libffi/testsuite/libffi.call/cls_ushort.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/cls_ushort.c	2006-08-03 21:47:15.151037928 +0000
+@@ -7,14 +7,14 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-static void cls_ret_ushort_fn(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
+- {
+-   *(ffi_arg*)resp = *(unsigned short *)args[0];
+-
+-   printf("%d: %d\n",*(unsigned short *)args[0],
+-	  *(ffi_arg*)resp);
+- }
++static void cls_ret_ushort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++			      void* userdata __UNUSED__)
++{
++  *(ffi_arg*)resp = *(unsigned short *)args[0];
++
++  printf("%d: %d\n",*(unsigned short *)args[0],
++	 (int)*(ffi_arg *)(resp));
++}
+ typedef unsigned short (*cls_ret_ushort)(unsigned short);
+ 
+ int main (void)
+diff -urN old/libffi/testsuite/libffi.call/ffitest.h src/libffi/testsuite/libffi.call/ffitest.h
+--- old/libffi/testsuite/libffi.call/ffitest.h	2004-01-08 12:15:17.000000000 +0000
++++ src/libffi/testsuite/libffi.call/ffitest.h	2006-08-03 21:47:15.141039448 +0000
+@@ -9,6 +9,24 @@
+ 
+ #define CHECK(x) !(x) ? abort() : 0
+ 
++/* Define our own long for easier handling on multilib targets.  */
++#if LONG_MAX == 2147483647
++#define ffi_type_mylong ffi_type_uint32
++#else
++#if LONG_MAX == 9223372036854775807
++#define ffi_type_mylong ffi_type_uint64
++#else
++#error "Error, size LONG not defined as expected"
++#endif
++#endif
++
++/* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
++#undef __UNUSED__
++#if defined(__GNUC__)
++#define __UNUSED__ __attribute__((__unused__))
++#else
++#define __UNUSED__
++#endif
+ 
+ /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
+    file open.  */
+diff -urN old/libffi/testsuite/libffi.call/float.c src/libffi/testsuite/libffi.call/float.c
+--- old/libffi/testsuite/libffi.call/float.c	2005-02-11 22:33:16.000000000 +0000
++++ src/libffi/testsuite/libffi.call/float.c	2006-08-03 21:47:14.950068480 +0000
+@@ -8,7 +8,7 @@
+ 
+ #include "ffitest.h"
+ 
+-static int floating(int a, float b, double c, long double d, int e)
++static int floating(int a, float b, double c, long double d)
+ {
+   int i;
+ 
+@@ -28,7 +28,6 @@
+   signed int si1;
+   double d;
+   long double ld;
+-  signed int si2;
+ 
+   args[0] = &ffi_type_sint;
+   values[0] = &si1;
+@@ -38,26 +37,23 @@
+   values[2] = &d;
+   args[3] = &ffi_type_longdouble;
+   values[3] = &ld;
+-  args[4] = &ffi_type_sint;
+-  values[4] = &si2;
+ 
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 5,
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
+ 		     &ffi_type_sint, args) == FFI_OK);
+ 
+   si1 = 6;
+   f = 3.14159;
+   d = (double)1.0/(double)3.0;
+   ld = 2.71828182846L;
+-  si2 = 10;
+ 
+-  floating (si1, f, d, ld, si2);
++  floating (si1, f, d, ld);
+ 
+   ffi_call(&cif, FFI_FN(floating), &rint, values);
+ 
+-  printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld, si2));
++  printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld));
+ 
+-  CHECK(rint == floating(si1, f, d, ld, si2));
++  CHECK((int)rint == floating(si1, f, d, ld));
+ 
+   exit (0);
+ }
+diff -urN old/libffi/testsuite/libffi.call/float1.c src/libffi/testsuite/libffi.call/float1.c
+--- old/libffi/testsuite/libffi.call/float1.c	2005-09-26 19:56:22.000000000 +0000
++++ src/libffi/testsuite/libffi.call/float1.c	2006-08-03 21:47:15.156037168 +0000
+@@ -28,25 +28,25 @@
+   void *values[MAX_ARGS];
+   float f;
+   value_type result[2];
+-  int i;
++  unsigned int i;
+ 
+   args[0] = &ffi_type_float;
+   values[0] = &f;
+-  
++
+   /* Initialize the cif */
+-  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 
++  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+ 		     &ffi_type_double, args) == FFI_OK);
+-  
++
+   f = 3.14159;
+-  
++
+   /* Put a canary in the return array.  This is a regression test for
+      a buffer overrun.  */
+   memset(result[1].c, CANARY, sizeof (double));
+ 
+   ffi_call(&cif, FFI_FN(dblit), &result[0].d, values);
+-  
++
+   /* These are not always the same!! Check for a reasonable delta */
+- 
++
+   CHECK(result[0].d - dblit(f) < DBL_EPSILON);
+ 
+   /* Check the canary.  */
+diff -urN old/libffi/testsuite/libffi.call/float2.c src/libffi/testsuite/libffi.call/float2.c
+--- old/libffi/testsuite/libffi.call/float2.c	2005-02-11 22:33:16.000000000 +0000
++++ src/libffi/testsuite/libffi.call/float2.c	2006-08-03 21:47:14.759097512 +0000
+@@ -48,9 +48,7 @@
+ #endif
+ 
+   /* These are not always the same!! Check for a reasonable delta */
+-  /*@-realcompare@*/
+   if (ld - ldblit(f) < LDBL_EPSILON)
+-    /*@=realcompare@*/
+     puts("long double return value tests ok!");
+   else
+     CHECK(0);
+diff -urN old/libffi/testsuite/libffi.call/negint.c src/libffi/testsuite/libffi.call/negint.c
+--- old/libffi/testsuite/libffi.call/negint.c	2004-10-02 07:02:41.000000000 +0000
++++ src/libffi/testsuite/libffi.call/negint.c	2006-08-03 21:47:15.151037928 +0000
+@@ -11,7 +11,6 @@
+ 
+ static int checking(int a, short b, signed char c)
+ {
+-  int i;
+ 
+   return (a < 0 && b < 0 && c < 0);
+ }
+diff -urN old/libffi/testsuite/libffi.call/nested_struct.c src/libffi/testsuite/libffi.call/nested_struct.c
+--- old/libffi/testsuite/libffi.call/nested_struct.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/nested_struct.c	2006-08-03 21:47:14.755098120 +0000
+@@ -50,7 +50,8 @@
+ }
+ 
+ static void
+-cls_struct_combined_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		       void* userdata __UNUSED__)
+ {
+   struct cls_struct_16byte1 b0;
+   struct cls_struct_16byte2 b1;
+diff -urN old/libffi/testsuite/libffi.call/nested_struct1.c src/libffi/testsuite/libffi.call/nested_struct1.c
+--- old/libffi/testsuite/libffi.call/nested_struct1.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/nested_struct1.c	2006-08-03 21:47:14.648114384 +0000
+@@ -52,7 +52,8 @@
+ }
+ 
+ static void
+-cls_struct_combined_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++		       void* userdata __UNUSED__)
+ {
+   struct cls_struct_16byte1 b0;
+   struct cls_struct_16byte2 b1;
+diff -urN old/libffi/testsuite/libffi.call/nested_struct2.c src/libffi/testsuite/libffi.call/nested_struct2.c
+--- old/libffi/testsuite/libffi.call/nested_struct2.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/nested_struct2.c	2006-08-03 21:47:14.956067568 +0000
+@@ -9,16 +9,6 @@
+ /* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
+ #include "ffitest.h"
+ 
+-#if LONG_MAX == 2147483647
+-#define ffi_type_mylong ffi_type_uint32
+-#else
+-#if LONG_MAX == 9223372036854775807
+-#define ffi_type_mylong ffi_type_uint64
+-#else
+-#error "Error, size LONG not defined as expected"
+-#endif
+-#endif
+-
+ typedef struct A {
+   unsigned long a;
+   unsigned char b;
+@@ -37,14 +27,15 @@
+   result.x.b = b0.b + b1.x.b + b1.y;
+   result.y = b0.b + b1.x.b;
+ 
+-  printf("%d %d %d %d %d: %d %d %d\n", b0.a, b0.b, b1.x.a, b1.x.b, b1.y,
++  printf("%lu %d %lu %d %d: %lu %d %d\n", b0.a, b0.b, b1.x.a, b1.x.b, b1.y,
+ 	 result.x.a, result.x.b, result.y);
+ 
+   return result;
+ }
+ 
+ static void
+-B_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
+ {
+   struct A b0;
+   struct B b1;
+@@ -115,7 +106,6 @@
+   CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
+   CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
+ 
+-
+   CHECK(ffi_prep_closure(pcl, &cif, B_gn, NULL) == FFI_OK);
+ 
+   res_dbl = ((B(*)(A, B))(pcl))(e_dbl, f_dbl);
+@@ -123,5 +113,6 @@
+   CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a));
+   CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y));
+   CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b));
++
+   exit(0);
+ }
+diff -urN old/libffi/testsuite/libffi.call/nested_struct3.c src/libffi/testsuite/libffi.call/nested_struct3.c
+--- old/libffi/testsuite/libffi.call/nested_struct3.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/nested_struct3.c	2006-08-03 21:47:14.649114232 +0000
+@@ -35,7 +35,8 @@
+ }
+ 
+ static void
+-B_gn(ffi_cif* cif, void* resp, void** args, void* userdata)
++B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
++     void* userdata __UNUSED__)
+ {
+   struct A b0;
+   struct B b1;
+diff -urN old/libffi/testsuite/libffi.call/problem1.c src/libffi/testsuite/libffi.call/problem1.c
+--- old/libffi/testsuite/libffi.call/problem1.c	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.call/problem1.c	2006-08-03 21:47:14.750098880 +0000
+@@ -27,7 +27,8 @@
+   return result;
+ }
+ 
+-void stub(ffi_cif* cif, void* resp, void** args, void* userdata)
++void stub(ffi_cif* cif __UNUSED__, void* resp, void** args,
++	  void* userdata __UNUSED__)
+ {
+   struct my_ffi_struct a1;
+   struct my_ffi_struct a2;
+diff -urN old/libffi/testsuite/libffi.call/promotion.c src/libffi/testsuite/libffi.call/promotion.c
+--- old/libffi/testsuite/libffi.call/promotion.c	2004-09-04 22:41:53.000000000 +0000
++++ src/libffi/testsuite/libffi.call/promotion.c	2006-08-03 21:47:14.759097512 +0000
+@@ -43,10 +43,10 @@
+   ul = 0;
+ 
+   for (sc = (signed char) -127;
+-       sc <= (signed char) 120; /*@-type@*/ sc += 1 /*@=type@*/)
++       sc <= (signed char) 120; sc += 1)
+     for (ss = -30000; ss <= 30000; ss += 10000)
+       for (uc = (unsigned char) 0;
+-	   uc <= (unsigned char) 200; /*@-type@*/ uc += 20 /*@=type@*/)
++	   uc <= (unsigned char) 200; uc += 20)
+ 	for (us = 0; us <= 60000; us += 10000)
+ 	  {
+ 	    ul++;
+diff -urN old/libffi/testsuite/libffi.call/pyobjc-tc.c src/libffi/testsuite/libffi.call/pyobjc-tc.c
+--- old/libffi/testsuite/libffi.call/pyobjc-tc.c	2004-01-24 16:13:48.000000000 +0000
++++ src/libffi/testsuite/libffi.call/pyobjc-tc.c	2006-08-03 21:47:14.960066960 +0000
+@@ -107,7 +107,7 @@
+ 
+ 	ffi_call(&cif, FFI_FN(doit), &result, values);
+ 
+-	printf ("The result is %d\n", result);
++	printf ("The result is %d\n", (int)result);
+ 
+ 	}
+ 	exit(0);
+diff -urN old/libffi/testsuite/libffi.call/struct1.c src/libffi/testsuite/libffi.call/struct1.c
+--- old/libffi/testsuite/libffi.call/struct1.c	2003-09-04 14:49:22.000000000 +0000
++++ src/libffi/testsuite/libffi.call/struct1.c	2006-08-03 21:47:14.475140680 +0000
+@@ -16,9 +16,7 @@
+ 
+ static test_structure_1 struct1(test_structure_1 ts)
+ {
+-  /*@-type@*/
+   ts.uc++;
+-  /*@=type@*/
+   ts.d--;
+   ts.ui++;
+ 
+diff -urN old/libffi/testsuite/libffi.special/ffitestcxx.h src/libffi/testsuite/libffi.special/ffitestcxx.h
+--- old/libffi/testsuite/libffi.special/ffitestcxx.h	2003-11-26 13:46:10.000000000 +0000
++++ src/libffi/testsuite/libffi.special/ffitestcxx.h	2006-08-03 21:47:15.334010112 +0000
+@@ -6,6 +6,15 @@
+ 
+ #define MAX_ARGS 256
+ 
++
++/* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
++#undef __UNUSED__
++#if defined(__GNUC__)
++#define __UNUSED__ __attribute__((__unused__))
++#else
++#define __UNUSED__
++#endif
++
+ #define CHECK(x) (!(x) ? abort() : (void)0)
+ 
+ /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
+diff -urN old/libffi/testsuite/libffi.special/special.exp src/libffi/testsuite/libffi.special/special.exp
+--- old/libffi/testsuite/libffi.special/special.exp	2005-01-12 09:06:52.000000000 +0000
++++ src/libffi/testsuite/libffi.special/special.exp	2006-08-03 21:47:15.333010264 +0000
+@@ -1,19 +1,18 @@
+-#   Copyright (C) 2003 Free Software Foundation, Inc.
++# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2 of the License, or
+ # (at your option) any later version.
+-# 
++#
+ # 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.  See the
+ # GNU General Public License for more details.
+-# 
++#
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+-
++# Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ # libffi testsuite that uses the 'dg.exp' driver.
+ 
+ load_lib libffi-dg.exp
+@@ -27,7 +26,10 @@
+ 
+ set cxx_options " -shared-libgcc -lstdc++"
+ 
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options ""
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O0 -W -Wall"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O2"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O3"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-Os"
+ 
+ dg-finish
+ 
+diff -urN old/libffi/testsuite/libffi.special/unwindtest.cc src/libffi/testsuite/libffi.special/unwindtest.cc
+--- old/libffi/testsuite/libffi.special/unwindtest.cc	2004-08-25 05:06:55.000000000 +0000
++++ src/libffi/testsuite/libffi.special/unwindtest.cc	2006-08-03 21:47:15.333010264 +0000
+@@ -8,15 +8,16 @@
+ #include "ffitestcxx.h"
+ 
+ void
+-closure_test_fn(ffi_cif* cif, void* resp, void** args, void* userdata)
++closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
++		void** args __UNUSED__, void* userdata __UNUSED__)
+ {
+   throw 9;
+ }
+ 
+ typedef void (*closure_test_type)();
+ 
+-void closure_test_fn1(ffi_cif* cif,void* resp,void** args,
+-			     void* userdata)
++void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
++		      void** args, void* userdata __UNUSED__)
+  {
+     *(ffi_arg*)resp =
+       (int)*(float *)args[0] +(int)(*(float *)args[1]) +
+@@ -54,7 +55,6 @@
+ #endif
+   ffi_closure *pcl;
+   ffi_type * cl_arg_types[17];
+-  int res;
+ #ifdef USING_MMAP
+   pcl = (ffi_closure *) allocate_mmap (sizeof(ffi_closure));
+ #else
--- gcc-4.1-4.1.2.orig/debian/patches/ppc64-ada.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ppc64-ada.dpatch
@@ -0,0 +1,257 @@
+#! /bin/sh -e
+
+# DP: Add gcc/ada/system-linux-ppc64.ads and use it in gcc/ada/Makefile.in
+# DP: 
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN src.orig/gcc/ada/Makefile.in src/gcc/ada/Makefile.in
+--- src.orig/gcc/ada/Makefile.in	2005-05-02 16:39:32.000000000 +0200
++++ src/gcc/ada/Makefile.in	2005-05-02 16:36:37.000000000 +0200
+@@ -1346,6 +1346,31 @@
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
++ifeq ($(strip $(filter-out powerpc64% linux%,$(arch) $(osys))),)
++  LIBGNAT_TARGET_PAIRS = \
++  a-intnam.ads<a-intnam-linux.ads \
++  s-inmaop.adb<s-inmaop-posix.adb \
++  s-intman.adb<s-intman-posix.adb \
++  s-osinte.adb<s-osinte-posix.adb \
++  s-osinte.ads<s-osinte-linux.ads \
++  s-osprim.adb<s-osprim-posix.adb \
++  s-taprop.adb<s-taprop-linux.adb \
++  s-taspri.ads<s-taspri-linux.ads \
++  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
++  s-parame.adb<s-parame-linux.adb \
++  system.ads<system-linux-ppc64.ads
++
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt.adb<mlib-tgt-linux.adb \
++    indepsw.adb<indepsw-linux.adb
++
++  THREADSLIB = -lpthread
++  GNATLIB_SHARED = gnatlib-shared-dual
++  GMEM_LIB = gmemlib
++  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
++  LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-linux.ads \
+diff -urN src.orig/gcc/ada/system-linux-ppc64.ads src/gcc/ada/system-linux-ppc64.ads
+--- src.orig/gcc/ada/system-linux-ppc64.ads	1970-01-01 01:00:00.000000000 +0100
++++ src/gcc/ada/system-linux-ppc64.ads	2005-05-02 16:33:38.000000000 +0200
+@@ -0,0 +1,151 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                          (GNU-Linux/PPC64 Version)                       --
++--                                                                          --
++--          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
++--                                                                          --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the  contents of the part following the private keyword. --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
++-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
++-- for  more details.  You should have  received  a copy of the GNU General --
++-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
++-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
++-- MA 02111-1307, USA.                                                      --
++--                                                                          --
++-- As a special exception,  if other files  instantiate  generics from this --
++-- unit, or you link  this unit with other files  to produce an executable, --
++-- this  unit  does not  by itself cause  the resulting  executable  to  be --
++-- covered  by the  GNU  General  Public  License.  This exception does not --
++-- however invalidate  any other reasons why  the executable file  might be --
++-- covered by the  GNU Public License.                                      --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++package System is
++pragma Pure (System);
++--  Note that we take advantage of the implementation permission to
++--  make this unit Pure instead of Preelaborable, see RM 13.7(36)
++
++   type Name is (SYSTEM_NAME_GNAT);
++   System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++   --  System-Dependent Named Numbers
++
++   Min_Int               : constant := Long_Long_Integer'First;
++   Max_Int               : constant := Long_Long_Integer'Last;
++
++   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
++   Max_Nonbinary_Modulus : constant := Integer'Last;
++
++   Max_Base_Digits       : constant := Long_Long_Float'Digits;
++   Max_Digits            : constant := Long_Long_Float'Digits;
++
++   Max_Mantissa          : constant := 63;
++   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
++
++   Tick                  : constant := 0.000_001;
++
++   --  Storage-related Declarations
++
++   type Address is private;
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 64;
++   Memory_Size  : constant := 2 ** 64;
++
++   --  Address comparison
++
++   function "<"  (Left, Right : Address) return Boolean;
++   function "<=" (Left, Right : Address) return Boolean;
++   function ">"  (Left, Right : Address) return Boolean;
++   function ">=" (Left, Right : Address) return Boolean;
++   function "="  (Left, Right : Address) return Boolean;
++
++   pragma Import (Intrinsic, "<");
++   pragma Import (Intrinsic, "<=");
++   pragma Import (Intrinsic, ">");
++   pragma Import (Intrinsic, ">=");
++   pragma Import (Intrinsic, "=");
++
++   --  Other System-Dependent Declarations
++
++   type Bit_Order is (High_Order_First, Low_Order_First);
++   Default_Bit_Order : constant Bit_Order := High_Order_First;
++
++   --  Priority-related Declarations (RM D.1)
++
++   Max_Priority           : constant Positive := 30;
++   Max_Interrupt_Priority : constant Positive := 31;
++
++   subtype Any_Priority       is Integer      range  0 .. 31;
++   subtype Priority           is Any_Priority range  0 .. 30;
++   subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++   Default_Priority : constant Priority := 15;
++
++private
++
++   type Address is mod Memory_Size;
++   Null_Address : constant Address := 0;
++
++   --------------------------------------
++   -- System Implementation Parameters --
++   --------------------------------------
++
++   --  These parameters provide information about the target that is used
++   --  by the compiler. They are in the private part of System, where they
++   --  can be accessed using the special circuitry in the Targparm unit
++   --  whose source should be consulted for more detailed descriptions
++   --  of the individual switch values.
++
++   AAMP                      : constant Boolean := False;
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := False;
++   Command_Line_Args         : constant Boolean := True;
++   Configurable_Run_Time     : constant Boolean := False;
++   Denorm                    : constant Boolean := True;
++   Duration_32_Bits          : constant Boolean := False;
++   Exit_Status_Supported     : constant Boolean := True;
++   Fractional_Fixed_Ops      : constant Boolean := False;
++   Frontend_Layout           : constant Boolean := False;
++   Functions_Return_By_DSP   : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   OpenVMS                   : constant Boolean := False;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : constant Boolean := False;
++   Support_64_Bit_Divides    : constant Boolean := True;
++   Support_Aggregates        : constant Boolean := True;
++   Support_Composite_Assign  : constant Boolean := True;
++   Support_Composite_Compare : constant Boolean := True;
++   Support_Long_Shifts       : constant Boolean := True;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := True;
++   GCC_ZCX_Support           : constant Boolean := True;
++   Front_End_ZCX_Support     : constant Boolean := False;
++
++   --  Obsolete entries, to be removed eventually (bootstrap issues!)
++
++   High_Integrity_Mode       : constant Boolean := False;
++   Long_Shifts_Inlined       : constant Boolean := True;
++
++end System;
+diff -urN tmp/gcc/ada/s-auxdec.ads src/gcc/ada/s-auxdec.ads
+--- tmp/gcc/ada/s-auxdec.ads	2004-06-11 12:47:36.000000000 +0200
++++ src/gcc/ada/s-auxdec.ads	2005-05-03 11:34:17.000000000 +0200
+@@ -108,13 +108,13 @@
+    pragma Warnings (Off);
+ 
+    type F_Float is digits 6;
+-   pragma Float_Representation (VAX_Float, F_Float);
++--   pragma Float_Representation (VAX_Float, F_Float);
+ 
+    type D_Float is digits 9;
+-   pragma Float_Representation (Vax_Float, D_Float);
++--   pragma Float_Representation (Vax_Float, D_Float);
+ 
+    type G_Float is digits 15;
+-   pragma Float_Representation (Vax_Float, G_Float);
++--   pragma Float_Representation (Vax_Float, G_Float);
+ 
+    --  Floating point type declarations for IEEE floating point data types
+ 
+--- tmp/gcc/ada/s-vaflop.ads	2003-10-21 15:42:18.000000000 +0200
++++ src/gcc/ada/s-vaflop.ads	2005-05-03 15:24:24.000000000 +0200
+@@ -40,15 +40,15 @@
+    --  Suppress warnings if not on Alpha/VAX
+ 
+    type D is digits 9;
+-   pragma Float_Representation (VAX_Float, D);
++--   pragma Float_Representation (VAX_Float, D);
+    --  D Float type on Vax
+ 
+    type G is digits 15;
+-   pragma Float_Representation (VAX_Float, G);
++--   pragma Float_Representation (VAX_Float, G);
+    --  G Float type on Vax
+ 
+    type F is digits 6;
+-   pragma Float_Representation (VAX_Float, F);
++--   pragma Float_Representation (VAX_Float, F);
+    --  F Float type on Vax
+ 
+    type S is digits 6;
--- gcc-4.1-4.1.2.orig/debian/patches/ada-gnatvsn.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ada-gnatvsn.dpatch
@@ -0,0 +1,57 @@
+#! /bin/sh -e
+
+# DP: proposed patch for PR ada/27194.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- orig/gnatvsn.ads	2005-11-15 14:59:02.000000000 +0100
++++ gcc/ada/gnatvsn.ads	2006-04-18 10:00:37.010002000 +0200
+@@ -67,7 +67,7 @@
+    --    GAP
+    --       GNAT Academic Program, similar to Public.
+ 
+-   Ver_Len_Max : constant := 32;
++   Ver_Len_Max : constant := 64;
+    --  Longest possible length for Gnat_Version_String in this or any
+    --  other version of GNAT. This is used by the binder to establish
+    --  space to store any possible version string value for checks. This
+--- orig/gnatvsn.adb	2005-07-01 03:29:17.000000000 +0200
++++ gcc/ada/gnatvsn.adb	2006-04-18 10:00:05.100002000 +0200
+@@ -54,12 +54,13 @@
+    -------------------------
+ 
+    function Gnat_Version_String return String is
+-      NUL_Pos : Positive := 1;
++      NUL_Pos : Positive := Version_String'Last;
+    begin
+-      loop
+-         exit when Version_String (NUL_Pos) = ASCII.NUL;
+-
+-         NUL_Pos := NUL_Pos + 1;
++      for J in Version_String'Range loop
++         if Version_String (J) = ASCII.NUL then
++            NUL_Pos := J;
++            exit;
++         end if;
+       end loop;
+ 
+       return Version_String (1 .. NUL_Pos - 1);
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-sig-unwind.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-sig-unwind.dpatch
@@ -0,0 +1,189 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: add support for unwinding over signal frames
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/config/m68k/linux-unwind.h |  140 +++++++++++++++++++++++++++++++++++++++++
+ gcc/config/m68k/linux.h        |    2 
+ 2 files changed, 142 insertions(+)
+
+Index: gcc-4.1/gcc/config/m68k/linux-unwind.h
+===================================================================
+--- /dev/null
++++ gcc-4.1/gcc/config/m68k/linux-unwind.h
+@@ -0,0 +1,140 @@
++/* DWARF2 EH unwinding support for Linux/m68k.
++   Copyright (C) 2006 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++In addition to the permissions in the GNU General Public License, the
++Free Software Foundation gives you unlimited permission to link the
++compiled version of this file with other programs, and to distribute
++those programs without any restriction coming from the use of this
++file.  (The General Public License restrictions do apply in other
++respects; for example, they cover modification of the file, and
++distribution when not linked into another program.)
++
++GCC 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.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++/* Do code reading to identify a signal frame, and set the frame
++   state data appropriately.  See unwind-dw2.c for the structs.
++   Don't use this at all if inhibit_libc is used.  */
++
++#ifndef inhibit_libc
++
++#include <signal.h>
++
++/* <sys/ucontext.h> is unfortunaly broken right now */
++struct uw_ucontext {
++	unsigned long	  uc_flags;
++	struct ucontext  *uc_link;
++	stack_t		  uc_stack;
++	mcontext_t	  uc_mcontext;
++	unsigned long	  uc_filler[80];
++	__sigset_t	  uc_sigmask;
++};
++
++#define MD_FALLBACK_FRAME_STATE_FOR m68k_fallback_frame_state
++
++static _Unwind_Reason_Code
++m68k_fallback_frame_state (struct _Unwind_Context *context,
++			   _Unwind_FrameState *fs)
++{
++  unsigned char *pc = context->ra;
++  long cfa;
++
++  /* moveq #__NR_sigreturn,%d0; trap #0  */
++  if (*(unsigned int *)(pc+0) == 0x70774e40)
++    {
++      struct sigcontext *sc;
++
++      sc = *(struct sigcontext **)(context->cfa + 8);
++
++      cfa = sc->sc_usp;
++      fs->cfa_how = CFA_REG_OFFSET;
++      fs->cfa_reg = 15;
++      fs->cfa_offset = cfa - (long) context->cfa;
++
++      fs->regs.reg[0].how = REG_SAVED_OFFSET;
++      fs->regs.reg[0].loc.offset = (long)&sc->sc_d0 - cfa;
++      fs->regs.reg[1].how = REG_SAVED_OFFSET;
++      fs->regs.reg[1].loc.offset = (long)&sc->sc_d1 - cfa;
++      fs->regs.reg[8].how = REG_SAVED_OFFSET;
++      fs->regs.reg[8].loc.offset = (long)&sc->sc_a0 - cfa;
++      fs->regs.reg[9].how = REG_SAVED_OFFSET;
++      fs->regs.reg[9].loc.offset = (long)&sc->sc_a1 - cfa;
++
++      fs->regs.reg[24].how = REG_SAVED_OFFSET;
++      fs->regs.reg[24].loc.offset = (long)&sc->sc_pc - cfa;
++
++      if (*(int *)sc->sc_fpstate)
++	{
++	  int *fpregs = (int *)sc->sc_fpregs;
++
++	  fs->regs.reg[16].how = REG_SAVED_OFFSET;
++	  fs->regs.reg[16].loc.offset = (long)&fpregs[0] - cfa;
++	  fs->regs.reg[17].how = REG_SAVED_OFFSET;
++	  fs->regs.reg[17].loc.offset = (long)&fpregs[3] - cfa;
++	}
++    }
++  /* moveq #~__NR_rt_sigreturn,%d0; not.b %d0; trap #0 */
++  else if (*(unsigned int *)(pc+0) == 0x70524600
++	   && *(unsigned short *)(pc+4) == 0x4e40)
++    {
++      struct uw_ucontext *uc;
++      greg_t *gregs;
++      int i;
++
++      uc = *(struct uw_ucontext **)(context->cfa + 8);
++
++      gregs = uc->uc_mcontext.gregs;
++      cfa = gregs[15];
++      fs->cfa_how = CFA_REG_OFFSET;
++      fs->cfa_reg = 15;
++      fs->cfa_offset = cfa - (long) context->cfa;
++
++      /* register %d0-%d7/%a0-%a6  */
++      for (i = 0; i <= 14; i++)
++	{
++	  fs->regs.reg[i].how = REG_SAVED_OFFSET;
++	  fs->regs.reg[i].loc.offset = (long)&gregs[i] - cfa;
++	}
++
++      /* return address  */
++      fs->regs.reg[24].how = REG_SAVED_OFFSET;
++      fs->regs.reg[24].loc.offset = (long)&gregs[16] - cfa;
++
++#define uc_fpstate      uc_filler[0]
++
++      if (uc->uc_fpstate)
++	{
++	  int *fpregs = (int *)uc->uc_mcontext.fpregs.f_fpregs;
++
++	  /* register %fp0-%fp7  */
++	  for (i = 16; i <= 23; i++)
++	    {
++	      fs->regs.reg[i].how = REG_SAVED_OFFSET;
++	      fs->regs.reg[i].loc.offset = (long)fpregs - cfa;
++	      fpregs += 3;
++	    }
++	}
++    }
++  else
++    return _URC_END_OF_STACK;
++
++  fs->retaddr_column = 24;
++  fs->signal_frame = 1;
++
++  return _URC_NO_REASON;
++}
++#endif /* ifdef inhibit_libc  */
+Index: gcc-4.1/gcc/config/m68k/linux.h
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/linux.h
++++ gcc-4.1/gcc/config/m68k/linux.h
+@@ -297,3 +297,5 @@ do {									\
+ }
+ 
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
++
++#define MD_UNWIND_SUPPORT "config/m68k/linux-unwind.h"
--- gcc-4.1-4.1.2.orig/debian/patches/kbsd-gnu-ada.dpatch
+++ gcc-4.1-4.1.2/debian/patches/kbsd-gnu-ada.dpatch
@@ -0,0 +1,590 @@
+#! /bin/sh -e
+
+# Description: Ada support for GNU/k*BSD 
+# Author: Aurelien Jarno <aurel32@debian.Org>
+# Status: not yet submitted upstream.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+--- gcc-4.1.0.old/gcc/ada/Makefile.in	2005-04-07 22:03:50.000000000 +0200
++++ gcc-4.1.0/gcc/ada/Makefile.in	2005-11-28 21:14:23.000000000 +0100
+@@ -835,6 +835,34 @@
+   endif
+ endif
+ 
++ifeq ($(strip $(filter-out %86 kfreebsd%,$(arch) $(osys))),)
++  LIBGNAT_TARGET_PAIRS = \
++  a-intnam.ads<a-intnam-freebsd.ads \
++  a-numaux.adb<a-numaux-x86.adb \
++  a-numaux.ads<a-numaux-x86.ads \
++  s-inmaop.adb<s-inmaop-posix.adb \
++  s-intman.adb<s-intman-posix.adb \
++  g-soccon.ads<g-soccon-freebsd.ads \
++  s-osinte.adb<s-osinte-posix.adb \
++  s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
++  s-osprim.adb<s-osprim-posix.adb \
++  s-taprop.adb<s-taprop-linux.adb \
++  s-taspri.ads<s-taspri-posix.ads \
++  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
++  system.ads<system-freebsd-x86.ads
++
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt.adb<mlib-tgt-linux.adb \
++    indepsw.adb<indepsw-gnu.adb
++
++  SYMLIB = -laddr2line -lbfd -liberty $(LIBINTL)
++  THREADSLIB = -lpthread
++  GNATLIB_SHARED = gnatlib-shared-dual
++  GMEM_LIB = gmemlib
++  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
++  LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-freebsd.ads \
+--- gcc-4.1.0.old/gcc/ada/s-osinte-kfreebsd-gnu.ads	2005-06-25 01:06:36.000000000 +0200
++++ gcc-4.1.0/gcc/ada/s-osinte-kfreebsd-gnu.ads	2005-06-25 01:06:03.000000000 +0200
+@@ -0,0 +1,521 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
++--                                                                          --
++--                   S Y S T E M . O S _ I N T E R F A C E                  --
++--                                                                          --
++--                                  S p e c                                 --
++--                                                                          --
++--             Copyright (C) 1991-1994, Florida State University            --
++--             Copyright (C) 1995-2005, Free Software Foundation, Inc.      --
++--                                                                          --
++-- GNARL is free software; you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
++-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
++-- for  more details.  You should have  received  a copy of the GNU General --
++-- Public License  distributed with GNARL; see file COPYING.  If not, write --
++-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
++-- Boston, MA 02110-1301, USA.                                              --
++--                                                                          --
++-- As a special exception,  if other files  instantiate  generics from this --
++-- unit, or you link  this unit with other files  to produce an executable, --
++-- this  unit  does not  by itself cause  the resulting  executable  to  be --
++-- covered  by the  GNU  General  Public  License.  This exception does not --
++-- however invalidate  any other reasons why  the executable file  might be --
++-- covered by the  GNU Public License.                                      --
++--                                                                          --
++-- GNARL was developed by the GNARL team at Florida State University.       --
++-- Extensive contributions were provided by Ada Core Technologies, Inc.     --
++--                                                                          --
++------------------------------------------------------------------------------
++
++--  This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this package
++
++--  This package encapsulates all direct interfaces to OS services
++--  that are needed by children of System.
++
++--  PLEASE DO NOT add any with-clauses to this package or remove the pragma
++--  Preelaborate. This package is designed to be a bottom-level (leaf) package
++
++with Interfaces.C;
++with Unchecked_Conversion;
++
++package System.OS_Interface is
++   pragma Preelaborate;
++
++   pragma Linker_Options ("-lpthread");
++
++   subtype int            is Interfaces.C.int;
++   subtype char           is Interfaces.C.char;
++   subtype short          is Interfaces.C.short;
++   subtype long           is Interfaces.C.long;
++   subtype unsigned       is Interfaces.C.unsigned;
++   subtype unsigned_short is Interfaces.C.unsigned_short;
++   subtype unsigned_long  is Interfaces.C.unsigned_long;
++   subtype unsigned_char  is Interfaces.C.unsigned_char;
++   subtype plain_char     is Interfaces.C.plain_char;
++   subtype size_t         is Interfaces.C.size_t;
++
++   -----------
++   -- Errno --
++   -----------
++
++   function errno return int;
++   pragma Import (C, errno, "__get_errno");
++
++   EAGAIN   : constant := 35;
++   EINTR    : constant := 4;
++   EINVAL   : constant := 22;
++   ENOMEM   : constant := 12;
++   EPERM    : constant := 1;
++   ETIMEDOUT    : constant := 60;
++
++   -------------
++   -- Signals --
++   -------------
++
++   Max_Interrupt : constant := 128;
++   type Signal is new int range 0 .. Max_Interrupt;
++   for Signal'Size use int'Size;
++
++   SIGHUP     : constant := 1; --  hangup
++   SIGINT     : constant := 2; --  interrupt (rubout)
++   SIGQUIT    : constant := 3; --  quit (ASCD FS)
++   SIGILL     : constant := 4; --  illegal instruction (not reset)
++   SIGTRAP    : constant := 5; --  trace trap (not reset)
++   SIGIOT     : constant := 6; --  IOT instruction
++   SIGABRT    : constant := 6; --  used by abort, replace SIGIOT in the  future
++   SIGEMT     : constant := 7; --  EMT instruction
++   SIGFPE     : constant := 8; --  floating point exception
++   SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
++   SIGBUS     : constant := 10; --  bus error
++   SIGSEGV    : constant := 11; --  segmentation violation
++   SIGSYS     : constant := 12; --  bad argument to system call
++   SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
++   SIGALRM    : constant := 14; --  alarm clock
++   SIGTERM    : constant := 15; --  software termination signal from kill
++   SIGURG     : constant := 16; --  urgent condition on IO channel
++   SIGSTOP    : constant := 17; --  stop (cannot be caught or ignored)
++   SIGTSTP    : constant := 18; --  user stop requested from tty
++   SIGCONT    : constant := 19; --  stopped process has been continued
++   SIGCLD     : constant := 20; --  alias for SIGCHLD
++   SIGCHLD    : constant := 20; --  child status change
++   SIGTTIN    : constant := 21; --  background tty read attempted
++   SIGTTOU    : constant := 22; --  background tty write attempted
++   SIGIO      : constant := 23; --  I/O possible (Solaris SIGPOLL alias)
++   SIGXCPU    : constant := 24; --  CPU time limit exceeded
++   SIGXFSZ    : constant := 25; --  filesize limit exceeded
++   SIGVTALRM  : constant := 26; --  virtual timer expired
++   SIGPROF    : constant := 27; --  profiling timer expired
++   SIGWINCH   : constant := 28; --  window size change
++   SIGINFO    : constant := 29; --  information request (NetBSD/FreeBSD)
++   SIGUSR1    : constant := 30; --  user defined signal 1
++   SIGUSR2    : constant := 31; --  user defined signal 2
++   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
++   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
++   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
++
++   SIGADAABORT : constant := SIGABRT;
++   --  Change this if you want to use another signal for task abort.
++   --  SIGTERM might be a good one.
++
++   type Signal_Set is array (Natural range <>) of Signal;
++
++   Unmasked    : constant Signal_Set := (
++      SIGTRAP,
++      --  To enable debugging on multithreaded applications, mark SIGTRAP to
++      --  be kept unmasked.
++
++      SIGBUS,
++
++      SIGTTIN, SIGTTOU, SIGTSTP,
++      --  Keep these three signals unmasked so that background processes
++      --  and IO behaves as normal "C" applications
++
++      SIGPROF,
++      --  To avoid confusing the profiler
++
++      SIGKILL, SIGSTOP,
++      --  These two signals actually cannot be masked;
++      --  POSIX simply won't allow it.
++
++      SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
++      --  These three signals are used by GNU/LinuxThreads starting from
++      --  glibc 2.1 (future 2.2).
++
++   Reserved    : constant Signal_Set :=
++   --  I am not sure why the following signal is reserved.
++   --  I guess they are not supported by this version of GNU/kFreeBSD.
++     (0 .. 0 => SIGVTALRM);
++
++   type sigset_t is private;
++
++   function sigaddset (set : access sigset_t; sig : Signal) return int;
++   pragma Import (C, sigaddset, "sigaddset");
++
++   function sigdelset (set : access sigset_t; sig : Signal) return int;
++   pragma Import (C, sigdelset, "sigdelset");
++
++   function sigfillset (set : access sigset_t) return int;
++   pragma Import (C, sigfillset, "sigfillset");
++
++   function sigismember (set : access sigset_t; sig : Signal) return int;
++   pragma Import (C, sigismember, "sigismember");
++
++   function sigemptyset (set : access sigset_t) return int;
++   pragma Import (C, sigemptyset, "sigemptyset");
++
++   --  sigcontext is architecture dependent, so define it private
++   type struct_sigcontext is private;
++
++   type struct_sigaction is record
++      sa_handler : System.Address;
++      sa_flags   : int;
++      sa_mask    : sigset_t;
++   end record;
++   pragma Convention (C, struct_sigaction);
++
++   type struct_sigaction_ptr is access all struct_sigaction;
++
++   SIG_BLOCK   : constant := 1;
++   SIG_UNBLOCK : constant := 2;
++   SIG_SETMASK : constant := 3;
++
++   SIG_DFL : constant := 0;
++   SIG_IGN : constant := 1;
++
++   SA_SIGINFO : constant := 16#0040#;
++
++   function sigaction
++     (sig  : Signal;
++      act  : struct_sigaction_ptr;
++      oact : struct_sigaction_ptr) return int;
++   pragma Import (C, sigaction, "sigaction");
++
++   ----------
++   -- Time --
++   ----------
++
++   type timespec is private;
++
++   function To_Duration (TS : timespec) return Duration;
++   pragma Inline (To_Duration);
++
++   function To_Timespec (D : Duration) return timespec;
++   pragma Inline (To_Timespec);
++
++   type struct_timeval is private;
++
++   function To_Duration (TV : struct_timeval) return Duration;
++   pragma Inline (To_Duration);
++
++   function To_Timeval (D : Duration) return struct_timeval;
++   pragma Inline (To_Timeval);
++
++   function gettimeofday
++     (tv : access struct_timeval;
++      tz : System.Address := System.Null_Address) return int;
++   pragma Import (C, gettimeofday, "gettimeofday");
++
++   function sysconf (name : int) return long;
++   pragma Import (C, sysconf);
++
++   SC_CLK_TCK : constant := 2;
++
++   -------------------------
++   -- Priority Scheduling --
++   -------------------------
++
++   SCHED_FIFO  : constant := 1;
++   SCHED_OTHER : constant := 2;
++   SCHED_RR    : constant := 3;
++
++   -------------
++   -- Process --
++   -------------
++
++   type pid_t is private;
++
++   function kill (pid : pid_t; sig : Signal) return int;
++   pragma Import (C, kill, "kill");
++
++   function getpid return pid_t;
++   pragma Import (C, getpid, "getpid");
++
++   -------------
++   -- Threads --
++   -------------
++
++   type Thread_Body is access
++     function (arg : System.Address) return System.Address;
++
++   function Thread_Body_Access is new
++     Unchecked_Conversion (System.Address, Thread_Body);
++
++   type pthread_t is new unsigned_long;
++   subtype Thread_Id        is pthread_t;
++
++   function To_pthread_t is new Unchecked_Conversion
++     (unsigned_long, pthread_t);
++
++   type pthread_mutex_t     is limited private;
++   type pthread_cond_t      is limited private;
++   type pthread_attr_t      is limited private;
++   type pthread_mutexattr_t is limited private;
++   type pthread_condattr_t  is limited private;
++   type pthread_key_t       is private;
++
++   PTHREAD_CREATE_DETACHED : constant := 1;
++
++   -----------
++   -- Stack --
++   -----------
++
++   function Get_Stack_Base (thread : pthread_t) return Address;
++   pragma Inline (Get_Stack_Base);
++   --  This is a dummy procedure to share some GNULLI files
++
++   ---------------------------------------
++   -- Nonstandard Thread Initialization --
++   ---------------------------------------
++
++   procedure pthread_init;
++   pragma Inline (pthread_init);
++   --  This is a dummy procedure to share some GNULLI files
++
++   -------------------------
++   -- POSIX.1c  Section 3 --
++   -------------------------
++
++   function sigwait (set : access sigset_t; sig : access Signal) return int;
++   pragma Import (C, sigwait, "sigwait");
++
++   function pthread_kill (thread : pthread_t; sig : Signal) return int;
++   pragma Import (C, pthread_kill, "pthread_kill");
++
++   type sigset_t_ptr is access all sigset_t;
++
++   function pthread_sigmask
++     (how  : int;
++      set  : sigset_t_ptr;
++      oset : sigset_t_ptr) return int;
++   pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++   --------------------------
++   -- POSIX.1c  Section 11 --
++   --------------------------
++
++   function pthread_mutexattr_init
++     (attr : access pthread_mutexattr_t) return int;
++   pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++   function pthread_mutexattr_destroy
++     (attr : access pthread_mutexattr_t) return int;
++   pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++   function pthread_mutex_init
++     (mutex : access pthread_mutex_t;
++      attr  : access pthread_mutexattr_t) return int;
++   pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++   function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++   pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++   function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++   pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++   function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++   pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++   function pthread_condattr_init
++     (attr : access pthread_condattr_t) return int;
++   pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++   function pthread_condattr_destroy
++     (attr : access pthread_condattr_t) return int;
++   pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++   function pthread_cond_init
++     (cond : access pthread_cond_t;
++      attr : access pthread_condattr_t) return int;
++   pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++   function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++   pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++   function pthread_cond_signal (cond : access pthread_cond_t) return int;
++   pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++   function pthread_cond_wait
++     (cond  : access pthread_cond_t;
++      mutex : access pthread_mutex_t) return int;
++   pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++   function pthread_cond_timedwait
++     (cond    : access pthread_cond_t;
++      mutex   : access pthread_mutex_t;
++      abstime : access timespec) return int;
++   pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++   Relative_Timed_Wait : constant Boolean := False;
++   --  pthread_cond_timedwait requires an absolute delay time
++
++   --------------------------
++   -- POSIX.1c  Section 13 --
++   --------------------------
++
++   type struct_sched_param is record
++      sched_priority : int;  --  scheduling priority
++   end record;
++   pragma Convention (C, struct_sched_param);
++
++   function pthread_setschedparam
++     (thread : pthread_t;
++      policy : int;
++      param  : access struct_sched_param) return int;
++   pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++   function pthread_attr_setschedpolicy
++     (attr   : access pthread_attr_t;
++      policy : int) return int;
++   pragma Import
++     (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
++
++   function sched_yield return int;
++   pragma Import (C, sched_yield, "sched_yield");
++
++   ---------------------------
++   -- P1003.1c - Section 16 --
++   ---------------------------
++
++   function pthread_attr_init
++     (attributes : access pthread_attr_t) return int;
++   pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++   function pthread_attr_destroy
++     (attributes : access pthread_attr_t) return int;
++   pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++   function pthread_attr_setdetachstate
++     (attr        : access pthread_attr_t;
++      detachstate : int) return int;
++   pragma Import
++     (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++   function pthread_attr_setstacksize
++     (attr      : access pthread_attr_t;
++      stacksize : size_t) return int;
++   pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++   function pthread_create
++     (thread        : access pthread_t;
++      attributes    : access pthread_attr_t;
++      start_routine : Thread_Body;
++      arg           : System.Address) return int;
++   pragma Import (C, pthread_create, "pthread_create");
++
++   procedure pthread_exit (status : System.Address);
++   pragma Import (C, pthread_exit, "pthread_exit");
++
++   function pthread_self return pthread_t;
++   pragma Import (C, pthread_self, "pthread_self");
++
++   --------------------------
++   -- POSIX.1c  Section 17 --
++   --------------------------
++
++   function pthread_setspecific
++     (key   : pthread_key_t;
++      value : System.Address) return int;
++   pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++   function pthread_getspecific (key : pthread_key_t) return System.Address;
++   pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++   type destructor_pointer is access procedure (arg : System.Address);
++
++   function pthread_key_create
++     (key        : access pthread_key_t;
++      destructor : destructor_pointer) return int;
++   pragma Import (C, pthread_key_create, "pthread_key_create");
++
++private
++
++   type sigset_t is array (1 .. 4) of unsigned;
++
++   --  In FreeBSD the component sa_handler turns out to
++   --  be one a union type, and the selector is a macro:
++   --  #define sa_handler __sigaction_u._handler
++   --  #define sa_sigaction __sigaction_u._sigaction
++
++   --  Should we add a signal_context type here ?
++   --  How could it be done independent of the CPU architecture ?
++   --  sigcontext type is opaque, so it is architecturally neutral.
++   --  It is always passed as an access type, so define it as an empty record
++   --  since the contents are not used anywhere.
++   type struct_sigcontext is null record;
++   pragma Convention (C, struct_sigcontext);
++
++   type pid_t is new int;
++
++   type time_t is new long;
++
++   type timespec is record
++      tv_sec  : time_t;
++      tv_nsec : long;
++   end record;
++   pragma Convention (C, timespec);
++
++   type struct_timeval is record
++      tv_sec  : time_t;
++      tv_usec : time_t;
++   end record;
++   pragma Convention (C, struct_timeval);
++
++   type pthread_attr_t is record
++      detachstate   : int;
++      schedpolicy   : int;
++      schedparam    : struct_sched_param;
++      inheritsched  : int;
++      scope         : int;
++      guardsize     : size_t;
++      stackaddr_set : int;
++      stackaddr     : System.Address;
++      stacksize     : size_t;
++   end record;
++   pragma Convention (C, pthread_attr_t);
++
++   type pthread_condattr_t is record
++      dummy : int;
++   end record;
++   pragma Convention (C, pthread_condattr_t);
++
++   type pthread_mutexattr_t is record
++      mutexkind : int;
++   end record;
++   pragma Convention (C, pthread_mutexattr_t);
++
++   type struct_pthread_fast_lock is record
++      status   : long;
++      spinlock : int;
++   end record;
++   pragma Convention (C, struct_pthread_fast_lock);
++
++   type pthread_mutex_t is record
++      m_reserved : int;
++      m_count    : int;
++      m_owner    : System.Address;
++      m_kind     : int;
++      m_lock     : struct_pthread_fast_lock;
++   end record;
++   pragma Convention (C, pthread_mutex_t);
++
++   type pthread_cond_t is array (0 .. 47) of unsigned_char;
++   pragma Convention (C, pthread_cond_t);
++
++   type pthread_key_t is new unsigned;
++
++end System.OS_Interface;
--- gcc-4.1-4.1.2.orig/debian/patches/netbsd-archs-gcc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/netbsd-archs-gcc.dpatch
@@ -0,0 +1,38 @@
+#! /bin/sh -e
+
+# DP: Arch-specific changes to gcc.config
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN gcc/config.gcc src/gcc/config.gcc
+--- gcc/config.gcc	2003-03-02 07:39:03.000000000 +0000
++++ gcc/config.gcc	2003-04-24 06:02:55.000000000 +0000
+@@ -1127,6 +1127,9 @@
+ x86_64-*-freebsd*)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
+ 	;;
++i[34567]86-*-netbsdelf*-gnu*)
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd-gnu.h netbsd-elf-gnu.h i386/netbsd-elf.h"
++	;;
+ i[34567]86-*-netbsdelf*)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h"
+ 	;;
--- gcc-4.1-4.1.2.orig/debian/patches/svn-gdc-updates.dpatch
+++ gcc-4.1-4.1.2/debian/patches/svn-gdc-updates.dpatch
@@ -0,0 +1,27 @@
+#! /bin/sh -e
+
+# svn-gdc-updates.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Update gdc to upstream SVN 2008xxxx
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-noautoinc-setjmp.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-noautoinc-setjmp.dpatch
@@ -0,0 +1,47 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: don't attempt autoinc in a function using setjmp
+# DP: (otherwise it might modify a variable expected to be unmodified)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/flow.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gcc-4.1/gcc/flow.c
+===================================================================
+--- gcc-4.1.orig/gcc/flow.c
++++ gcc-4.1/gcc/flow.c
+@@ -3601,7 +3601,7 @@ find_auto_inc (struct propagate_block_in
+   int regno;
+   int size = GET_MODE_SIZE (GET_MODE (x));
+ 
+-  if (JUMP_P (insn))
++  if (JUMP_P (insn) || current_function_calls_setjmp)
+     return;
+ 
+   /* Here we detect use of an index register which might be good for
--- gcc-4.1-4.1.2.orig/debian/patches/libjava-sjlj.dpatch
+++ gcc-4.1-4.1.2/debian/patches/libjava-sjlj.dpatch
@@ -0,0 +1,65 @@
+#! /bin/sh -e
+
+# DP: Don't try to use _Unwind_Backtrace on SJLJ targets.
+# DP: See bug #387875, #388505, GCC PR 29206.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+ libjava/sysdep/generic/backtrace.h |   17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+Index: src/libjava/sysdep/generic/backtrace.h
+===================================================================
+--- src.orig/libjava/sysdep/generic/backtrace.h	2006-11-06 14:00:32.000000000 -0500
++++ src/libjava/sysdep/generic/backtrace.h	2006-11-06 14:04:38.000000000 -0500
+@@ -13,6 +13,20 @@ details.  */
+ 
+ #include <java-stack.h>
+ 
++#ifdef SJLJ_EXCEPTIONS
++
++#undef _Unwind_GetIPInfo
++#define _Unwind_GetIPInfo(ctx,ip_before_insn) \
++  (abort (), (void) (ctx), *ip_before_insn = 1, 0)
++
++#undef _Unwind_GetRegionStart
++#define _Unwind_GetRegionStart(ctx) \
++  (abort (), (void) (ctx), 0)
++
++#undef _Unwind_Backtrace
++#define _Unwind_Backtrace(trace_fn,state_ptr) \
++  (fallback_backtrace (trace_fn, state_ptr))
++
+ /* Unwind through the call stack calling TRACE_FN with STATE for every stack
+    frame.  Returns the reason why the unwinding was stopped.  */
+ _Unwind_Reason_Code
+@@ -20,4 +34,7 @@ fallback_backtrace (_Unwind_Trace_Fn, _J
+ {
+   return _URC_NO_REASON;
+ }
++
++#endif /* SJLJ_EXCEPTIONS */
++
+ #endif
--- gcc-4.1-4.1.2.orig/debian/patches/gdc-arm-unwind_ptr.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gdc-arm-unwind_ptr.dpatch
@@ -0,0 +1,51 @@
+#! /bin/sh -e
+
+# gdc-arm-unwind_ptr.dpatch by Arthur Loiret <arthur.loiret@gmail.com>
+# DP: Fix build on arm.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- gcc/d/phobos/gcc/deh.d	2007-11-07 11:51:41.000000000 +0100
++++ gcc/d/phobos/gcc/deh.d	2007-11-07 11:51:54.000000000 +0100
+@@ -254,7 +254,7 @@
+     ubyte *p;
+     ubyte *action_record;
+     //int handler_switch_value;
+-    _Unwind_Ptr /*landing_pad, */ip;
++    _Unwind_Ptr landing_pad, ip;
+     Phase1Info phase1;
+ 
+     static if (Use_ARM_EABI_Unwinder)
+--- gcc/d/phobos2/gcc/deh.d	2007-11-07 18:05:26.000000000 +0100
++++ gcc/d/phobos2/gcc/deh.d	2007-11-07 18:05:55.000000000 +0100
+@@ -254,7 +254,7 @@
+     ubyte *p;
+     ubyte *action_record;
+     //int handler_switch_value;
+-    _Unwind_Ptr /*landing_pad, */ip;
++    _Unwind_Ptr landing_pad, ip;
+     Phase1Info phase1;
+ 
+     static if (Use_ARM_EABI_Unwinder)
--- gcc-4.1-4.1.2.orig/debian/patches/sparc-g7.dpatch
+++ gcc-4.1-4.1.2/debian/patches/sparc-g7.dpatch
@@ -0,0 +1,42 @@
+#! /bin/sh -e
+
+# DP: Backport g7 usage fix from svn.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -Naurd gcc.orig/config/sparc/sparc.c gcc/config/sparc/sparc.c
+--- gcc.orig/config/sparc/sparc.c	2006-06-29 06:40:15.000000000 +0000
++++ gcc/config/sparc/sparc.c	2006-06-29 06:42:24.000000000 +0000
+@@ -3740,7 +3740,10 @@
+ 	  && ! sparc_hard_reg_printed [i])
+ 	{
+ 	  sparc_hard_reg_printed [i] = 1;
+-	  fprintf (file, "\t.register\t%%g%d, #scratch\n", i);
++	  /* %g7 is used as TLS base register, use #ignore
++	     for it instead of #scratch.  */
++	  fprintf (file, "\t.register\t%%g%d, #%s\n", i,
++		   i == 7 ? "ignore" : "scratch");
+ 	}
+       if (i == 3) i = 5;
+     }
--- gcc-4.1-4.1.2.orig/debian/patches/hppa-cbranch.dpatch
+++ gcc-4.1-4.1.2/debian/patches/hppa-cbranch.dpatch
@@ -0,0 +1,1751 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Fix for PR target/26743 (hppa)
+# DP: Backport from gcc trunk 2006-04-12 by tausq@debian.org
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-04-09  John David Anglin  <dave.anglin@nrc-crnc.gc.ca>
+	PR target/26743
+	PR target/11254
+	PR target/10274
+	* pa.md (cbranch patterns): Revise arguments used in calls to
+	output_cbranch, output_bb and output_bvd.  Add long branch length
+	attributes.
+	(fbranch patterns): Handle long branches.
+	(jump): Revise length check.  Revise arguments for output_lbranch call.
+	Add long branch length attributes.
+	(decrement_and_branch_until_zero): Add long branch length attributes.
+	(output_movb, output_parallel_addb and output_parallel_movb patterns):
+	Likewise.  Revise arguments for output_parallel_addb and
+	output_parallel_movb calls.
+	* pa-protos.h (output_cbranch, output_lbranch, output_bb, output_bvb,
+	output_parallel_movb and output_parallel_addb): Update prototypes.
+	* pa.c (output_cbranch): Revise arguments.  Correct handling of
+	nullification in long branches.
+	(output_lbranch): Add new argument to control extraction of delay
+	instruction.
+	(output_bb): Handle long branches.
+	(output_bvb, output_dbra, output_movb, output_parallel_movb,
+	output_parallel_addb): Likewise.
+
+
+--- gcc/config/pa/pa.c.orig	2006-02-07 23:11:30.000000000 +0100
++++ gcc/config/pa/pa.c	2006-04-19 11:31:02.331909272 +0200
+@@ -5934,11 +5934,13 @@
+    parameters.  */
+ 
+ const char *
+-output_cbranch (rtx *operands, int nullify, int length, int negated, rtx insn)
++output_cbranch (rtx *operands, int negated, rtx insn)
+ {
+   static char buf[100];
+   int useskip = 0;
+-  rtx xoperands[5];
++  int nullify = INSN_ANNULLED_BRANCH_P (insn);
++  int length = get_attr_length (insn);
++  int xdelay;
+ 
+   /* A conditional branch to the following instruction (e.g. the delay slot)
+      is asking for a disaster.  This can happen when not optimizing and
+@@ -6008,7 +6010,7 @@
+ 	with an unfilled delay slot.  */
+       case 8:
+ 	/* Handle weird backwards branch with a filled delay slot
+-	   with is nullified.  */
++	   which is nullified.  */
+ 	if (dbr_sequence_length () != 0
+ 	    && ! forward_branch_p (insn)
+ 	    && nullify)
+@@ -6055,19 +6057,24 @@
+ 	  }
+ 	break;
+ 
+-      case 20:
+-      case 28:
+-	xoperands[0] = operands[0];
+-	xoperands[1] = operands[1];
+-	xoperands[2] = operands[2];
+-	xoperands[3] = operands[3];
+-
++      default:
+ 	/* The reversed conditional branch must branch over one additional
+-	   instruction if the delay slot is filled.  If the delay slot
+-	   is empty, the instruction after the reversed condition branch
+-	   must be nullified.  */
+-	nullify = dbr_sequence_length () == 0;
+-	xoperands[4] = nullify ? GEN_INT (length) : GEN_INT (length + 4);
++	   instruction if the delay slot is filled and needs to be extracted
++	   by output_lbranch.  If the delay slot is empty or this is a
++	   nullified forward branch, the instruction after the reversed
++	   condition branch must be nullified.  */
++	if (dbr_sequence_length () == 0
++	    || (nullify && forward_branch_p (insn)))
++	  {
++	    nullify = 1;
++	    xdelay = 0;
++	    operands[4] = GEN_INT (length);
++	  }
++	else
++	  {
++	    xdelay = 1;
++	    operands[4] = GEN_INT (length + 4);
++	  }
+ 
+ 	/* Create a reversed conditional branch which branches around
+ 	   the following insns.  */
+@@ -6114,27 +6121,38 @@
+ 	      }
+ 	  }
+ 
+-	output_asm_insn (buf, xoperands);
+-	return output_lbranch (operands[0], insn);
+-
+-      default:
+-	gcc_unreachable ();
++	output_asm_insn (buf, operands);
++	return output_lbranch (operands[0], insn, xdelay);
+     }
+   return buf;
+ }
+ 
+-/* This routine handles long unconditional branches that exceed the
+-   maximum range of a simple branch instruction.  */
++/* This routine handles output of long unconditional branches that
++   exceed the maximum range of a simple branch instruction.  Since
++   we don't have a register available for the branch, we save register
++   %r1 in the frame marker, load the branch destination DEST into %r1,
++   execute the branch, and restore %r1 in the delay slot of the branch.
++
++   Since long branches may have an insn in the delay slot and the
++   delay slot is used to restore %r1, we in general need to extract
++   this insn and execute it before the branch.  However, to facilitate
++   use of this function by conditional branches, we also provide an
++   option to not extract the delay insn so that it will be emitted
++   after the long branch.  So, if there is an insn in the delay slot,
++   it is extracted if XDELAY is nonzero.
++
++   The lengths of the various long-branch sequences are 20, 16 and 24
++   bytes for the portable runtime, non-PIC and PIC cases, respectively.  */
+ 
+ const char *
+-output_lbranch (rtx dest, rtx insn)
++output_lbranch (rtx dest, rtx insn, int xdelay)
+ {
+   rtx xoperands[2];
+  
+   xoperands[0] = dest;
+ 
+   /* First, free up the delay slot.  */
+-  if (dbr_sequence_length () != 0)
++  if (xdelay && dbr_sequence_length () != 0)
+     {
+       /* We can't handle a jump in the delay slot.  */
+       gcc_assert (GET_CODE (NEXT_INSN (insn)) != JUMP_INSN);
+@@ -6244,11 +6262,13 @@
+    above.  it returns the appropriate output template to emit the branch.  */
+ 
+ const char *
+-output_bb (rtx *operands ATTRIBUTE_UNUSED, int nullify, int length,
+-	   int negated, rtx insn, int which)
++output_bb (rtx *operands ATTRIBUTE_UNUSED, int negated, rtx insn, int which)
+ {
+   static char buf[100];
+   int useskip = 0;
++  int nullify = INSN_ANNULLED_BRANCH_P (insn);
++  int length = get_attr_length (insn);
++  int xdelay;
+ 
+   /* A conditional branch to the following instruction (e.g. the delay slot) is
+      asking for a disaster.  I do not think this can happen as this pattern
+@@ -6315,7 +6335,7 @@
+ 	with an unfilled delay slot.  */
+       case 8:
+ 	/* Handle weird backwards branch with a filled delay slot
+-	   with is nullified.  */
++	   which is nullified.  */
+ 	if (dbr_sequence_length () != 0
+ 	    && ! forward_branch_p (insn)
+ 	    && nullify)
+@@ -6357,9 +6377,10 @@
+ 	  }
+ 	else
+ 	  {
+-	    strcpy (buf, "{extrs,|extrw,s,}");
+ 	    if (GET_MODE (operands[0]) == DImode)
+ 	      strcpy (buf, "extrd,s,*");
++	    else
++	      strcpy (buf, "{extrs,|extrw,s,}");
+ 	    if ((which == 0 && negated)
+ 		|| (which == 1 && ! negated))
+ 	      strcat (buf, "<");
+@@ -6377,7 +6398,40 @@
+ 	break;
+ 
+       default:
+-	gcc_unreachable ();
++	/* The reversed conditional branch must branch over one additional
++	   instruction if the delay slot is filled and needs to be extracted
++	   by output_lbranch.  If the delay slot is empty or this is a
++	   nullified forward branch, the instruction after the reversed
++	   condition branch must be nullified.  */
++	if (dbr_sequence_length () == 0
++	    || (nullify && forward_branch_p (insn)))
++	  {
++	    nullify = 1;
++	    xdelay = 0;
++	    operands[4] = GEN_INT (length - 8);
++	  }
++	else
++	  {
++	    xdelay = 1;
++	    operands[4] = GEN_INT (length - 4);
++	  }
++
++	if (GET_MODE (operands[0]) == DImode)
++	  strcpy (buf, "extrd,s,*");
++	else
++	  strcpy (buf, "{extrs,|extrw,s,}");
++	if ((which == 0 && negated)
++	    || (which == 1 && !negated))
++	  strcat (buf, ">= %0,%1,1,%%r0\n\t");
++	else
++	  strcat (buf, "< %0,%1,1,%%r0\n\t");
++	if (nullify)
++	  strcat (buf, "b,n .+%4");
++	else
++	  strcat (buf, "b .+%4");
++	output_asm_insn (buf, operands);
++	return output_lbranch (negated ? operands[3] : operands[2],
++			       insn, xdelay);
+     }
+   return buf;
+ }
+@@ -6389,11 +6443,13 @@
+    branch.  */
+ 
+ const char *
+-output_bvb (rtx *operands ATTRIBUTE_UNUSED, int nullify, int length,
+-	    int negated, rtx insn, int which)
++output_bvb (rtx *operands ATTRIBUTE_UNUSED, int negated, rtx insn, int which)
+ {
+   static char buf[100];
+   int useskip = 0;
++  int nullify = INSN_ANNULLED_BRANCH_P (insn);
++  int length = get_attr_length (insn);
++  int xdelay;
+ 
+   /* A conditional branch to the following instruction (e.g. the delay slot) is
+      asking for a disaster.  I do not think this can happen as this pattern
+@@ -6460,7 +6516,7 @@
+ 	with an unfilled delay slot.  */
+       case 8:
+ 	/* Handle weird backwards branch with a filled delay slot
+-	   with is nullified.  */
++	   which is nullified.  */
+ 	if (dbr_sequence_length () != 0
+ 	    && ! forward_branch_p (insn)
+ 	    && nullify)
+@@ -6522,7 +6578,40 @@
+ 	break;
+ 
+       default:
+-	gcc_unreachable ();
++	/* The reversed conditional branch must branch over one additional
++	   instruction if the delay slot is filled and needs to be extracted
++	   by output_lbranch.  If the delay slot is empty or this is a
++	   nullified forward branch, the instruction after the reversed
++	   condition branch must be nullified.  */
++	if (dbr_sequence_length () == 0
++	    || (nullify && forward_branch_p (insn)))
++	  {
++	    nullify = 1;
++	    xdelay = 0;
++	    operands[4] = GEN_INT (length - 8);
++	  }
++	else
++	  {
++	    xdelay = 1;
++	    operands[4] = GEN_INT (length - 4);
++	  }
++
++	if (GET_MODE (operands[0]) == DImode)
++	  strcpy (buf, "extrd,s,*");
++	else
++	  strcpy (buf, "{extrs,|extrw,s,}");
++	if ((which == 0 && negated)
++	    || (which == 1 && !negated))
++	  strcat (buf, ">= {%0,%1,1,%%r0|%0,%%sar,1,%%r0}\n\t");
++	else
++	  strcat (buf, "< {%0,%1,1,%%r0|%0,%%sar,1,%%r0}\n\t");
++	if (nullify)
++	  strcat (buf, "b,n .+%4");
++	else
++	  strcat (buf, "b .+%4");
++	output_asm_insn (buf, operands);
++	return output_lbranch (negated ? operands[3] : operands[2],
++			       insn, xdelay);
+     }
+   return buf;
+ }
+@@ -6534,6 +6623,7 @@
+ const char *
+ output_dbra (rtx *operands, rtx insn, int which_alternative)
+ {
++  int length = get_attr_length (insn);
+ 
+   /* A conditional branch to the following instruction (e.g. the delay slot) is
+      asking for a disaster.  Be prepared!  */
+@@ -6559,7 +6649,7 @@
+   if (which_alternative == 0)
+     {
+       int nullify = INSN_ANNULLED_BRANCH_P (insn);
+-      int length = get_attr_length (insn);
++      int xdelay;
+ 
+       /* If this is a long branch with its delay slot unfilled, set `nullify'
+ 	 as it can nullify the delay slot and save a nop.  */
+@@ -6603,7 +6693,30 @@
+ 	    return "addi,%N2 %1,%0,%0\n\tb %3";
+ 
+ 	default:
+-	  gcc_unreachable ();
++	  /* The reversed conditional branch must branch over one additional
++	     instruction if the delay slot is filled and needs to be extracted
++	     by output_lbranch.  If the delay slot is empty or this is a
++	     nullified forward branch, the instruction after the reversed
++	     condition branch must be nullified.  */
++	  if (dbr_sequence_length () == 0
++	      || (nullify && forward_branch_p (insn)))
++	    {
++	      nullify = 1;
++	      xdelay = 0;
++	      operands[4] = GEN_INT (length);
++	    }
++	  else
++	    {
++	      xdelay = 1;
++	      operands[4] = GEN_INT (length + 4);
++	    }
++
++	  if (nullify)
++	    output_asm_insn ("addib,%N2,n %1,%0,.+%4", operands);
++	  else
++	    output_asm_insn ("addib,%N2 %1,%0,.+%4", operands);
++
++	  return output_lbranch (operands[3], insn, xdelay);
+ 	}
+       
+     }
+@@ -6616,10 +6729,17 @@
+       output_asm_insn ("{fstws|fstw} %0,-16(%%r30)\n\tldw -16(%%r30),%4",
+ 		       operands);
+       output_asm_insn ("ldo %1(%4),%4\n\tstw %4,-16(%%r30)", operands);
+-      if (get_attr_length (insn) == 24)
++      if (length == 24)
+ 	return "{comb|cmpb},%S2 %%r0,%4,%3\n\t{fldws|fldw} -16(%%r30),%0";
+-      else
++      else if (length == 28)
+ 	return "{comclr|cmpclr},%B2 %%r0,%4,%%r0\n\tb %3\n\t{fldws|fldw} -16(%%r30),%0";
++      else
++	{
++	  operands[4] = GEN_INT (length - 24);
++	  output_asm_insn ("addib,%N2 %1,%0,.+%4", operands);
++	  output_asm_insn ("{fldws|fldw} -16(%%r30),%0", operands);
++	  return output_lbranch (operands[3], insn, 0);
++	}
+     }
+   /* Deal with gross reload from memory case.  */
+   else
+@@ -6627,14 +6747,20 @@
+       /* Reload loop counter from memory, the store back to memory
+ 	 happens in the branch's delay slot.  */
+       output_asm_insn ("ldw %0,%4", operands);
+-      if (get_attr_length (insn) == 12)
++      if (length == 12)
+ 	return "addib,%C2 %1,%4,%3\n\tstw %4,%0";
+-      else
++      else if (length == 16)
+ 	return "addi,%N2 %1,%4,%4\n\tb %3\n\tstw %4,%0";
++      else
++	{
++	  operands[5] = GEN_INT (length - 12);
++	  output_asm_insn ("addib,%N2 %1,%0,.+%5\n\tstw %4,%0", operands);
++	  return output_lbranch (operands[3], insn, 0);
++	}
+     }
+ }
+ 
+-/* Return the output template for emitting a dbra type insn.
++/* Return the output template for emitting a movb type insn.
+ 
+    Note it may perform some output operations on its own before
+    returning the final output string.  */
+@@ -6642,6 +6768,7 @@
+ output_movb (rtx *operands, rtx insn, int which_alternative,
+ 	     int reverse_comparison)
+ {
++  int length = get_attr_length (insn);
+ 
+   /* A conditional branch to the following instruction (e.g. the delay slot) is
+      asking for a disaster.  Be prepared!  */
+@@ -6668,7 +6795,7 @@
+   if (which_alternative == 0)
+     {
+       int nullify = INSN_ANNULLED_BRANCH_P (insn);
+-      int length = get_attr_length (insn);
++      int xdelay;
+ 
+       /* If this is a long branch with its delay slot unfilled, set `nullify'
+ 	 as it can nullify the delay slot and save a nop.  */
+@@ -6712,38 +6839,80 @@
+ 	    return "or,%N2 %1,%%r0,%0\n\tb %3";
+ 
+ 	default:
+-	  gcc_unreachable ();
++	  /* The reversed conditional branch must branch over one additional
++	     instruction if the delay slot is filled and needs to be extracted
++	     by output_lbranch.  If the delay slot is empty or this is a
++	     nullified forward branch, the instruction after the reversed
++	     condition branch must be nullified.  */
++	  if (dbr_sequence_length () == 0
++	      || (nullify && forward_branch_p (insn)))
++	    {
++	      nullify = 1;
++	      xdelay = 0;
++	      operands[4] = GEN_INT (length);
++	    }
++	  else
++	    {
++	      xdelay = 1;
++	      operands[4] = GEN_INT (length + 4);
++	    }
++
++	  if (nullify)
++	    output_asm_insn ("movb,%N2,n %1,%0,.+%4", operands);
++	  else
++	    output_asm_insn ("movb,%N2 %1,%0,.+%4", operands);
++
++	  return output_lbranch (operands[3], insn, xdelay);
+ 	}
+     }
+-  /* Deal with gross reload from FP register case.  */
++  /* Deal with gross reload for FP destination register case.  */
+   else if (which_alternative == 1)
+     {
+-      /* Move loop counter from FP register to MEM then into a GR,
+-	 increment the GR, store the GR into MEM, and finally reload
+-	 the FP register from MEM from within the branch's delay slot.  */
++      /* Move source register to MEM, perform the branch test, then
++	 finally load the FP register from MEM from within the branch's
++	 delay slot.  */
+       output_asm_insn ("stw %1,-16(%%r30)", operands);
+-      if (get_attr_length (insn) == 12)
++      if (length == 12)
+ 	return "{comb|cmpb},%S2 %%r0,%1,%3\n\t{fldws|fldw} -16(%%r30),%0";
+-      else
++      else if (length == 16)
+ 	return "{comclr|cmpclr},%B2 %%r0,%1,%%r0\n\tb %3\n\t{fldws|fldw} -16(%%r30),%0";
++      else
++	{
++	  operands[4] = GEN_INT (length - 12);
++	  output_asm_insn ("movb,%N2 %1,%0,.+%4", operands);
++	  output_asm_insn ("{fldws|fldw} -16(%%r30),%0", operands);
++	  return output_lbranch (operands[3], insn, 0);
++	}
+     }
+   /* Deal with gross reload from memory case.  */
+   else if (which_alternative == 2)
+     {
+       /* Reload loop counter from memory, the store back to memory
+ 	 happens in the branch's delay slot.  */
+-      if (get_attr_length (insn) == 8)
++      if (length == 8)
+ 	return "{comb|cmpb},%S2 %%r0,%1,%3\n\tstw %1,%0";
+-      else
++      else if (length == 12)
+ 	return "{comclr|cmpclr},%B2 %%r0,%1,%%r0\n\tb %3\n\tstw %1,%0";
++      else
++	{
++	  operands[4] = GEN_INT (length - 8);
++	  output_asm_insn ("movb,%N2 %1,%0,.+%4\n\tstw %1,%0", operands);
++	  return output_lbranch (operands[3], insn, 0);
++	}
+     }
+   /* Handle SAR as a destination.  */
+   else
+     {
+-      if (get_attr_length (insn) == 8)
++      if (length == 8)
+ 	return "{comb|cmpb},%S2 %%r0,%1,%3\n\tmtsar %r1";
+-      else
++      else if (length == 12)
+ 	return "{comclr|cmpclr},%B2 %%r0,%1,%%r0\n\tb %3\n\tmtsar %r1";
++      else
++	{
++	  operands[4] = GEN_INT (length - 8);
++	  output_asm_insn ("movb,%N2 %1,%0,.+%4\n\tmtsar %r1", operands);
++	  return output_lbranch (operands[3], insn, 0);
++	}
+     }
+ }
+ 
+@@ -8206,37 +8375,50 @@
+ /* Output an unconditional move and branch insn.  */
+ 
+ const char *
+-output_parallel_movb (rtx *operands, int length)
++output_parallel_movb (rtx *operands, rtx insn)
+ {
++  int length = get_attr_length (insn);
++
+   /* These are the cases in which we win.  */
+   if (length == 4)
+     return "mov%I1b,tr %1,%0,%2";
+ 
+-  /* None of these cases wins, but they don't lose either.  */
+-  if (dbr_sequence_length () == 0)
++  /* None of the following cases win, but they don't lose either.  */
++  if (length == 8)
+     {
+-      /* Nothing in the delay slot, fake it by putting the combined
+-	 insn (the copy or add) in the delay slot of a bl.  */
+-      if (GET_CODE (operands[1]) == CONST_INT)
+-	return "b %2\n\tldi %1,%0";
++      if (dbr_sequence_length () == 0)
++	{
++	  /* Nothing in the delay slot, fake it by putting the combined
++	     insn (the copy or add) in the delay slot of a bl.  */
++	  if (GET_CODE (operands[1]) == CONST_INT)
++	    return "b %2\n\tldi %1,%0";
++	  else
++	    return "b %2\n\tcopy %1,%0";
++	}
+       else
+-	return "b %2\n\tcopy %1,%0";
++	{
++	  /* Something in the delay slot, but we've got a long branch.  */
++	  if (GET_CODE (operands[1]) == CONST_INT)
++	    return "ldi %1,%0\n\tb %2";
++	  else
++	    return "copy %1,%0\n\tb %2";
++	}
+     }
++
++  if (GET_CODE (operands[1]) == CONST_INT)
++    output_asm_insn ("ldi %1,%0", operands);
+   else
+-    {
+-      /* Something in the delay slot, but we've got a long branch.  */
+-      if (GET_CODE (operands[1]) == CONST_INT)
+-	return "ldi %1,%0\n\tb %2";
+-      else
+-	return "copy %1,%0\n\tb %2";
+-    }
++    output_asm_insn ("copy %1,%0", operands);
++  return output_lbranch (operands[2], insn, 1);
+ }
+ 
+ /* Output an unconditional add and branch insn.  */
+ 
+ const char *
+-output_parallel_addb (rtx *operands, int length)
++output_parallel_addb (rtx *operands, rtx insn)
+ {
++  int length = get_attr_length (insn);
++
+   /* To make life easy we want operand0 to be the shared input/output
+      operand and operand1 to be the readonly operand.  */
+   if (operands[0] == operands[1])
+@@ -8246,18 +8428,20 @@
+   if (length == 4)
+     return "add%I1b,tr %1,%0,%3";
+ 
+-  /* None of these cases win, but they don't lose either.  */
+-  if (dbr_sequence_length () == 0)
+-    {
+-      /* Nothing in the delay slot, fake it by putting the combined
+-	 insn (the copy or add) in the delay slot of a bl.  */
+-      return "b %3\n\tadd%I1 %1,%0,%0";
+-    }
+-  else
++  /* None of the following cases win, but they don't lose either.  */
++  if (length == 8)
+     {
+-      /* Something in the delay slot, but we've got a long branch.  */
+-      return "add%I1 %1,%0,%0\n\tb %3";
++      if (dbr_sequence_length () == 0)
++	/* Nothing in the delay slot, fake it by putting the combined
++	   insn (the copy or add) in the delay slot of a bl.  */
++	return "b %3\n\tadd%I1 %1,%0,%0";
++      else
++	/* Something in the delay slot, but we've got a long branch.  */
++	return "add%I1 %1,%0,%0\n\tb %3";
+     }
++
++  output_asm_insn ("add%I1 %1,%0,%0", operands);
++  return output_lbranch (operands[3], insn, 1);
+ }
+ 
+ /* Return nonzero if INSN (a jump insn) immediately follows a call
+--- gcc/config/pa/pa.md.orig	2006-02-15 03:54:08.000000000 +0100
++++ gcc/config/pa/pa.md	2006-04-19 11:15:44.899380216 +0200
+@@ -139,7 +139,7 @@
+ (define_delay (eq_attr "type" "btable_branch,branch,parallel_branch")
+   [(eq_attr "in_branch_delay" "true") (nil) (nil)])
+ 
+-;; Floating point conditional branch delay slot description and
++;; Floating point conditional branch delay slot description.
+ (define_delay (eq_attr "type" "fbranch")
+   [(eq_attr "in_branch_delay" "true")
+    (eq_attr "in_nullified_branch_delay" "true")
+@@ -1708,8 +1708,7 @@
+   ""
+   "*
+ {
+-  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn);
++  return output_cbranch (operands, 0, insn);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+@@ -1719,6 +1718,8 @@
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+ 	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
+ 	   (eq (symbol_ref "flag_pic") (const_int 0))
+ 	   (const_int 20)]
+ 	  (const_int 28)))])
+@@ -1736,8 +1737,7 @@
+   ""
+   "*
+ {
+-  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn);
++  return output_cbranch (operands, 1, insn);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+@@ -1747,6 +1747,8 @@
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+ 	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
+ 	   (eq (symbol_ref "flag_pic") (const_int 0))
+ 	   (const_int 20)]
+ 	  (const_int 28)))])
+@@ -1762,8 +1764,7 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn);
++  return output_cbranch (operands, 0, insn);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+@@ -1773,6 +1774,8 @@
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+ 	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
+ 	   (eq (symbol_ref "flag_pic") (const_int 0))
+ 	   (const_int 20)]
+ 	  (const_int 28)))])
+@@ -1790,8 +1793,7 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn);
++  return output_cbranch (operands, 1, insn);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+@@ -1801,6 +1803,8 @@
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+ 	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
+ 	   (eq (symbol_ref "flag_pic") (const_int 0))
+ 	   (const_int 20)]
+ 	  (const_int 28)))])
+@@ -1815,8 +1819,7 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn);
++  return output_cbranch (operands, 0, insn);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+@@ -1826,6 +1829,8 @@
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+ 	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
+ 	   (eq (symbol_ref "flag_pic") (const_int 0))
+ 	   (const_int 20)]
+ 	  (const_int 28)))])
+@@ -1843,8 +1848,7 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn);
++  return output_cbranch (operands, 1, insn);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+@@ -1854,6 +1858,8 @@
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+ 	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
+ 	   (eq (symbol_ref "flag_pic") (const_int 0))
+ 	   (const_int 20)]
+ 	  (const_int 28)))])
+@@ -1871,15 +1877,21 @@
+   ""
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn, 0);
++  return output_bb (operands, 0, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -1893,15 +1905,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn, 0);
++  return output_bb (operands, 0, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -1915,15 +1933,21 @@
+   ""
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn, 0);
++  return output_bb (operands, 1, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -1937,15 +1961,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn, 0);
++  return output_bb (operands, 1, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -1959,15 +1989,21 @@
+   ""
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn, 1);
++  return output_bb (operands, 0, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -1981,15 +2017,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 0, insn, 1);
++  return output_bb (operands, 0, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2003,15 +2045,21 @@
+   ""
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn, 1);
++  return output_bb (operands, 1, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2025,15 +2073,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-			 get_attr_length (insn), 1, insn, 1);
++  return output_bb (operands, 1, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ ;; Branch on Variable Bit patterns.
+ (define_insn ""
+@@ -2048,15 +2102,21 @@
+   ""
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 0, insn, 0);
++  return output_bvb (operands, 0, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2070,15 +2130,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 0, insn, 0);
++  return output_bvb (operands, 0, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2092,15 +2158,21 @@
+   ""
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 1, insn, 0);
++  return output_bvb (operands, 1, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2114,15 +2186,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 1, insn, 0);
++  return output_bvb (operands, 1, insn, 0);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2136,15 +2214,21 @@
+   ""
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 0, insn, 1);
++  return output_bvb (operands, 0, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2158,15 +2242,21 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 0, insn, 1);
++  return output_bvb (operands, 0, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2180,15 +2270,21 @@
+   ""
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 1, insn, 1);
++  return output_bvb (operands, 1, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -2202,46 +2298,114 @@
+   "TARGET_64BIT"
+   "*
+ {
+-  return output_bvb (operands, INSN_ANNULLED_BRANCH_P (insn),
+-		     get_attr_length (insn), 1, insn, 1);
++  return output_bvb (operands, 1, insn, 1);
+ }"
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ ;; Floating point branches
++
++;; ??? Nullification is handled differently from other branches.
++;; If nullification is specified, the delay slot is nullified on any
++;; taken branch regardless of branch direction.
+ (define_insn ""
+   [(set (pc) (if_then_else (ne (reg:CCFP 0) (const_int 0))
+ 			   (label_ref (match_operand 0 "" ""))
+ 			   (pc)))]
+-  "! TARGET_SOFT_FLOAT"
++  "!TARGET_SOFT_FLOAT"
+   "*
+ {
+-  if (INSN_ANNULLED_BRANCH_P (insn))
+-    return \"ftest\;b,n %0\";
++  int length = get_attr_length (insn);
++  rtx xoperands[1];
++  int nullify, xdelay;
++
++  if (length < 16)
++    return \"ftest\;b%* %l0\";
++
++  if (dbr_sequence_length () == 0 || INSN_ANNULLED_BRANCH_P (insn))
++    {
++      nullify = 1;
++      xdelay = 0;
++      xoperands[0] = GEN_INT (length - 8);
++    }
++  else
++    {
++      nullify = 0;
++      xdelay = 1;
++      xoperands[0] = GEN_INT (length - 4);
++    }
++
++  if (nullify)
++    output_asm_insn (\"ftest\;add,tr %%r0,%%r0,%%r0\;b,n .+%0\", xoperands);
+   else
+-    return \"ftest\;b%* %0\";
++    output_asm_insn (\"ftest\;add,tr %%r0,%%r0,%%r0\;b .+%0\", xoperands);
++  return output_lbranch (operands[0], insn, xdelay);
+ }"
+-  [(set_attr "type" "fbranch")
+-   (set_attr "length" "8")])
++[(set_attr "type" "fbranch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 32)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 28)]
++	  (const_int 36)))])
+ 
+ (define_insn ""
+   [(set (pc) (if_then_else (ne (reg:CCFP 0) (const_int 0))
+ 			   (pc)
+ 			   (label_ref (match_operand 0 "" ""))))]
+-  "! TARGET_SOFT_FLOAT"
++  "!TARGET_SOFT_FLOAT"
+   "*
+ {
+-  if (INSN_ANNULLED_BRANCH_P (insn))
+-    return \"ftest\;add,tr %%r0,%%r0,%%r0\;b,n %0\";
+-  else
++  int length = get_attr_length (insn);
++  rtx xoperands[1];
++  int nullify, xdelay;
++
++  if (length < 16)
+     return \"ftest\;add,tr %%r0,%%r0,%%r0\;b%* %0\";
++
++  if (dbr_sequence_length () == 0 || INSN_ANNULLED_BRANCH_P (insn))
++    {
++      nullify = 1;
++      xdelay = 0;
++      xoperands[0] = GEN_INT (length - 4);
++    }
++  else
++    {
++      nullify = 0;
++      xdelay = 1;
++      xoperands[0] = GEN_INT (length);
++    }
++
++  if (nullify)
++    output_asm_insn (\"ftest\;b,n .+%0\", xoperands);
++  else
++    output_asm_insn (\"ftest\;b .+%0\", xoperands);
++  return output_lbranch (operands[0], insn, xdelay);
+ }"
+-  [(set_attr "type" "fbranch")
+-   (set_attr "length" "12")])
++[(set_attr "type" "fbranch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 12)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 28)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 24)]
++	  (const_int 32)))])
+ 
+ ;; Move instructions
+ 
+@@ -6967,11 +7131,10 @@
+   "*
+ {
+   /* An unconditional branch which can reach its target.  */
+-  if (get_attr_length (insn) != 24
+-      && get_attr_length (insn) != 16)
++  if (get_attr_length (insn) < 16)
+     return \"b%* %l0\";
+ 
+-  return output_lbranch (operands[0], insn);
++  return output_lbranch (operands[0], insn, 1);
+ }"
+   [(set_attr "type" "uncond_branch")
+    (set_attr "pa_combine_type" "uncond_branch")
+@@ -6980,14 +7143,16 @@
+ 	   (if_then_else (lt (abs (minus (match_dup 0)
+ 					 (plus (pc) (const_int 8))))
+ 			     (const_int 8184))
+-			 (const_int 4)
+-			 (const_int 8))
+-	   (ge (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
++	   (const_int 4)
++	   (const_int 8))
++	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+ 	       (const_int 262100))
+-	   (if_then_else (eq (symbol_ref "flag_pic") (const_int 0))
+-			 (const_int 16)
+-			 (const_int 24))]
+-	  (const_int 4)))])
++	   (const_int 4)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 20)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 16)]
++	  (const_int 24)))])
+ 
+ ;;; Hope this is only within a function...
+ (define_insn "indirect_jump"
+@@ -8801,39 +8966,71 @@
+       (if_then_else (eq_attr "alternative" "0")
+ ;; Loop counter in register case
+ ;; Short branch has length of 4
+-;; Long branch has length of 8
+-	(if_then_else (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8))
++;; Long branch has length of 8, 20, 24 or 28
++	(cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28))
+ 
+ ;; Loop counter in FP reg case.
+ ;; Extra goo to deal with additional reload insns.
+ 	(if_then_else (eq_attr "alternative" "1")
+ 	  (if_then_else (lt (match_dup 3) (pc))
+-	    (if_then_else
+-	      (lt (abs (minus (match_dup 3) (plus (pc) (const_int 24))))
+-		  (const_int 8184))
+-	      (const_int 24)
+-	      (const_int 28))
+-	    (if_then_else
+-	      (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		  (const_int 8184))
+-	      (const_int 24)
+-	      (const_int 28)))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 24))))
++		      (const_int 8184))
++		    (const_int 24)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 24))))
++		      (const_int 262100))
++		    (const_int 28)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 44)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 40)]
++		  (const_int 48))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 8184))
++		    (const_int 24)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 262100))
++		    (const_int 28)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 44)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 40)]
++		  (const_int 48)))
++
+ ;; Loop counter in memory case.
+ ;; Extra goo to deal with additional reload insns.
+ 	(if_then_else (lt (match_dup 3) (pc))
+-	  (if_then_else
+-	    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		(const_int 8184))
+-	    (const_int 12)
+-	    (const_int 16))
+-	  (if_then_else
+-	    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		(const_int 8184))
+-	    (const_int 12)
+-	    (const_int 16))))))])
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
++		      (const_int 8184))
++		    (const_int 12)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
++		      (const_int 262100))
++		    (const_int 16)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 32)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 28)]
++		  (const_int 36))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 8184))
++		    (const_int 12)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 262100))
++		    (const_int 16)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 32)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 28)]
++		  (const_int 36))))))])
+ 
+ (define_insn ""
+   [(set (pc)
+@@ -8852,33 +9049,59 @@
+       (if_then_else (eq_attr "alternative" "0")
+ ;; Loop counter in register case
+ ;; Short branch has length of 4
+-;; Long branch has length of 8
+-	(if_then_else (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8))
++;; Long branch has length of 8, 20, 24 or 28
++        (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28))
+ 
+ ;; Loop counter in FP reg case.
+ ;; Extra goo to deal with additional reload insns.
+ 	(if_then_else (eq_attr "alternative" "1")
+ 	  (if_then_else (lt (match_dup 3) (pc))
+-	    (if_then_else
+-	      (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		  (const_int 8184))
+-	      (const_int 12)
+-	      (const_int 16))
+-	    (if_then_else
+-	      (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		  (const_int 8184))
+-	      (const_int 12)
+-	      (const_int 16)))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
++		      (const_int 8184))
++		    (const_int 12)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
++		      (const_int 262100))
++		    (const_int 16)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 32)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 28)]
++		  (const_int 36))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 8184))
++		    (const_int 12)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 262100))
++		    (const_int 16)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 32)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 28)]
++		  (const_int 36)))
++
+ ;; Loop counter in memory or sar case.
+ ;; Extra goo to deal with additional reload insns.
+-	(if_then_else
+-	  (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	      (const_int 8184))
+-	  (const_int 8)
+-	  (const_int 12)))))])
++	(cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		   (const_int 8184))
++		(const_int 8)
++		(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		  (const_int 262100))
++		(const_int 12)
++		(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		(const_int 28)
++		(eq (symbol_ref "flag_pic") (const_int 0))
++		(const_int 24)]
++	      (const_int 32)))))])
+ 
+ ;; Handle negated branch.
+ (define_insn ""
+@@ -8899,32 +9122,58 @@
+ ;; Loop counter in register case
+ ;; Short branch has length of 4
+ ;; Long branch has length of 8
+-	(if_then_else (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8))
++        (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28))
+ 
+ ;; Loop counter in FP reg case.
+ ;; Extra goo to deal with additional reload insns.
+ 	(if_then_else (eq_attr "alternative" "1")
+ 	  (if_then_else (lt (match_dup 3) (pc))
+-	    (if_then_else
+-	      (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		  (const_int 8184))
+-	      (const_int 12)
+-	      (const_int 16))
+-	    (if_then_else
+-	      (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		  (const_int 8184))
+-	      (const_int 12)
+-	      (const_int 16)))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
++		      (const_int 8184))
++		    (const_int 12)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
++		      (const_int 262100))
++		    (const_int 16)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 32)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 28)]
++		  (const_int 36))
++	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 8184))
++		    (const_int 12)
++		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		      (const_int 262100))
++		    (const_int 16)
++		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		    (const_int 32)
++		    (eq (symbol_ref "flag_pic") (const_int 0))
++		    (const_int 28)]
++		  (const_int 36)))
++
+ ;; Loop counter in memory or SAR case.
+ ;; Extra goo to deal with additional reload insns.
+-	(if_then_else
+-	  (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	      (const_int 8184))
+-	  (const_int 8)
+-	  (const_int 12)))))])
++	(cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		   (const_int 8184))
++		(const_int 8)
++		(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++		  (const_int 262100))
++		(const_int 12)
++		(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++		(const_int 28)
++		(eq (symbol_ref "flag_pic") (const_int 0))
++		(const_int 24)]
++	      (const_int 32)))))])
+ 
+ (define_insn ""
+   [(set (pc) (label_ref (match_operand 3 "" "" )))
+@@ -8934,14 +9183,21 @@
+   "(reload_completed && operands[0] == operands[1]) || operands[0] == operands[2]"
+   "*
+ {
+-  return output_parallel_addb (operands, get_attr_length (insn));
++  return output_parallel_addb (operands, insn);
+ }"
+-  [(set_attr "type" "parallel_branch")
+-   (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++[(set_attr "type" "parallel_branch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28)))])
+ 
+ (define_insn ""
+   [(set (pc) (label_ref (match_operand 2 "" "" )))
+@@ -8950,14 +9206,21 @@
+   "reload_completed"
+   "*
+ {
+-  return output_parallel_movb (operands, get_attr_length (insn));
++  return output_parallel_movb (operands, insn);
+ }"
+-  [(set_attr "type" "parallel_branch")
+-   (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++[(set_attr "type" "parallel_branch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28)))])
+ 
+ (define_insn ""
+   [(set (pc) (label_ref (match_operand 2 "" "" )))
+@@ -8966,14 +9229,21 @@
+   "reload_completed"
+   "*
+ {
+-  return output_parallel_movb (operands, get_attr_length (insn));
++  return output_parallel_movb (operands, insn);
+ }"
+-  [(set_attr "type" "parallel_branch")
+-   (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++[(set_attr "type" "parallel_branch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28)))])
+ 
+ (define_insn ""
+   [(set (pc) (label_ref (match_operand 2 "" "" )))
+@@ -8982,14 +9252,21 @@
+   "reload_completed"
+   "*
+ {
+-  return output_parallel_movb (operands, get_attr_length (insn));
++  return output_parallel_movb (operands, insn);
+ }"
+-  [(set_attr "type" "parallel_branch")
+-   (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++[(set_attr "type" "parallel_branch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28)))])
+ 
+ (define_insn ""
+   [(set (pc) (label_ref (match_operand 2 "" "" )))
+@@ -8998,14 +9275,21 @@
+   "reload_completed"
+   "*
+ {
+-  return output_parallel_movb (operands, get_attr_length (insn));
++  return output_parallel_movb (operands, insn);
+ }"
+-  [(set_attr "type" "parallel_branch")
+-   (set (attr "length")
+-    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
+-           (const_int 4)
+-	   (const_int 8)))])
++[(set_attr "type" "parallel_branch")
++ (set (attr "length")
++    (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 8184))
++	   (const_int 4)
++	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
++	       (const_int 262100))
++	   (const_int 8)
++	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
++	   (const_int 24)
++	   (eq (symbol_ref "flag_pic") (const_int 0))
++	   (const_int 20)]
++	  (const_int 28)))])
+ 
+ (define_insn ""
+   [(set (match_operand 0 "register_operand" "=f")
+--- gcc/config/pa/pa-protos.h.orig	2005-10-24 04:38:25.000000000 +0200
++++ gcc/config/pa/pa-protos.h	2006-04-19 11:15:44.899380216 +0200
+@@ -42,14 +42,14 @@
+ extern const char *output_fp_move_double (rtx *);
+ extern const char *output_block_move (rtx *, int);
+ extern const char *output_block_clear (rtx *, int);
+-extern const char *output_cbranch (rtx *, int, int, int, rtx);
+-extern const char *output_lbranch (rtx, rtx);
+-extern const char *output_bb (rtx *, int, int, int, rtx, int);
+-extern const char *output_bvb (rtx *, int, int, int, rtx, int);
++extern const char *output_cbranch (rtx *, int, rtx);
++extern const char *output_lbranch (rtx, rtx, int);
++extern const char *output_bb (rtx *, int, rtx, int);
++extern const char *output_bvb (rtx *, int, rtx, int);
+ extern const char *output_dbra (rtx *, rtx, int);
+ extern const char *output_movb (rtx *, rtx, int, int);
+-extern const char *output_parallel_movb (rtx *, int);
+-extern const char *output_parallel_addb (rtx *, int);
++extern const char *output_parallel_movb (rtx *, rtx);
++extern const char *output_parallel_addb (rtx *, rtx);
+ extern const char *output_call (rtx, rtx, int);
+ extern const char *output_indirect_call (rtx, rtx);
+ extern const char *output_millicode_call (rtx, rtx);
--- gcc-4.1-4.1.2.orig/debian/patches/pr25524.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr25524.dpatch
@@ -0,0 +1,510 @@
+#! /bin/sh -e
+
+# DP: Backport PR libstdc++/25524 from the trunk
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+gcc:
+
+2006-01-23  Adam Nemet  <anemet@caviumnetworks.com>
+
+	* fix-header.c (read_scan_file): Add new parameter imultilib when
+	calling register_include_chains.
+
+2006-01-20  Joseph S. Myers  <joseph@codesourcery.com>
+
+	PR libstdc++/25524
+	* cppdefault.h (struct default_include): Add multilib flag.
+	* cppdefault.c (cpp_include_defaults): Set it.
+	* c.opt (-imultilib): New option.
+	* c-opts.c (imultilib): New.
+	(c_common_handle_option): Handle -imultilib.
+	(c_common_post_options): Likewise.
+	* c-incpath.c (add_standard_paths, register_include_chains):
+	Likewise.
+	* c-incpath.h (register_include_chains): Add extra parameter.
+	* gcc.c (do_spec_1): Generate -imultilib option.
+	(The Specs Language): Update %I description.
+	(process_command): Update copyright notice.
+	* doc/cppopts.texi (-imultilib): Document.
+	* doc/invoke.texi (-imultilib): Include in option summary.
+	(%I): Update specs documentation.
+
+libstdc++-v3:
+
+2006-01-20  Joseph S. Myers  <joseph@codesourcery.com>
+
+	PR libstdc++/25524
+	* include/Makefile.am: Install host-specific headers in multilib
+	subdirectory.
+	* include/Makefile.in: Regenerate.
+
+#Index: gcc/doc/cppopts.texi
+#===================================================================
+#--- gcc/doc/cppopts.texi	(revision 114541)
+#+++ gcc/doc/cppopts.texi	(working copy)
+#@@ -1,4 +1,4 @@
+#-@c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+#+@c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# @c Free Software Foundation, Inc.
+# @c This is part of the CPP and GCC manuals.
+# @c For copying conditions, see the file gcc.texi.
+#@@ -483,6 +483,11 @@
+# This option is like the @option{--sysroot} option, but applies only to
+# header files.  See the @option{--sysroot} option for more information.
+# 
+#+@item -imultilib @var{dir}
+#+@opindex imultilib
+#+Use @var{dir} as a subdirectory of the directory containing
+#+target-specific C++ headers.
+#+
+# @item -isystem @var{dir}
+# @opindex isystem
+# Search @var{dir} for header files, after all directories specified by
+#Index: gcc/doc/invoke.texi
+#===================================================================
+#--- gcc/doc/invoke.texi	(revision 114541)
+#+++ gcc/doc/invoke.texi	(working copy)
+#@@ -5,8 +5,8 @@
+# 
+# @ignore
+# @c man begin COPYRIGHT
+#-Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
+#-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#+Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+#+1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.2 or
+#@@ -352,7 +352,7 @@
+# -include @var{file}  -imacros @var{file} @gol
+# -iprefix @var{file}  -iwithprefix @var{dir} @gol
+# -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
+#--isysroot @var{dir} @gol
+#+-imultilib @var{dir} -isysroot @var{dir} @gol
+# -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
+# -P  -fworking-directory  -remap @gol
+# -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
+#@@ -6800,9 +6800,9 @@
+# 
+# @item %I
+# Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
+#-@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and
+#+@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
+# @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
+#-as necessary.
+#+and @option{-imultilib} as necessary.
+# 
+# @item %s
+# Current argument is the name of a library or startup file of some sort.
+Index: gcc/gcc.c
+===================================================================
+--- gcc/gcc.c	(revision 114541)
++++ gcc/gcc.c	(working copy)
+@@ -439,8 +439,8 @@
+ 	SUFFIX characters following %O as they would following, for
+ 	example, `.o'.
+  %I	Substitute any of -iprefix (made from GCC_EXEC_PREFIX), -isysroot
+-	(made from TARGET_SYSTEM_ROOT), and -isystem (made from COMPILER_PATH
+-	and -B options) as necessary.
++	(made from TARGET_SYSTEM_ROOT), -isystem (made from COMPILER_PATH
++	and -B options) and -imultilib as necessary.
+  %s     current argument is the name of a library or startup file of some sort.
+         Search for that file in a standard list of directories
+ 	and substitute the full name found.
+@@ -4885,6 +4885,15 @@
+ 	    {
+ 	      struct prefix_list *pl = include_prefixes.plist;
+ 
++	      if (multilib_dir)
++		{
++		  do_spec_1 ("-imultilib", 1, NULL);
++		  /* Make this a separate argument.  */
++		  do_spec_1 (" ", 0, NULL);
++		  do_spec_1 (multilib_dir, 1, NULL);
++		  do_spec_1 (" ", 0, NULL);
++		}
++
+ 	      if (gcc_exec_prefix)
+ 		{
+ 		  do_spec_1 ("-iprefix", 1, NULL);
+Index: gcc/cppdefault.c
+===================================================================
+--- gcc/cppdefault.c	(revision 114541)
++++ gcc/cppdefault.c	(working copy)
+@@ -1,6 +1,6 @@
+ /* CPP Library.
+    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+-   1999, 2000, 2003, 2004 Free Software Foundation, Inc.
++   1999, 2000, 2003, 2004, 2006 Free Software Foundation, Inc.
+    Contributed by Per Bothner, 1994-95.
+    Based on CCCP program by Paul Rubin, June 1986
+    Adapted to ANSI C, Richard Stallman, Jan 1987
+@@ -48,44 +48,44 @@
+ = {
+ #ifdef GPLUSPLUS_INCLUDE_DIR
+     /* Pick up GNU C++ generic include files.  */
+-    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0 },
++    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
+ #endif
+ #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
+     /* Pick up GNU C++ target-dependent include files.  */
+-    { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0 },
++    { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0, 1 },
+ #endif
+ #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
+     /* Pick up GNU C++ backward and deprecated include files.  */
+-    { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0 },
++    { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
+ #endif
+ #ifdef LOCAL_INCLUDE_DIR
+     /* /usr/local/include comes before the fixincluded header files.  */
+-    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1 },
++    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
+ #endif
+ #ifdef PREFIX_INCLUDE_DIR
+-    { PREFIX_INCLUDE_DIR, 0, 0, 1, 0 },
++    { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0 },
+ #endif
+ #ifdef GCC_INCLUDE_DIR
+     /* This is the dir for fixincludes and for gcc's private headers.  */
+-    { GCC_INCLUDE_DIR, "GCC", 0, 0, 0 },
++    { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
+ #endif
+ #ifdef CROSS_INCLUDE_DIR
+     /* One place the target system's headers might be.  */
+-    { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0 },
++    { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
+ #endif
+ #ifdef TOOL_INCLUDE_DIR
+     /* Another place the target system's headers might be.  */
+-    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0 },
++    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0 },
+ #endif
+ #ifdef SYSTEM_INCLUDE_DIR
+     /* Some systems have an extra dir of include files.  */
+-    { SYSTEM_INCLUDE_DIR, 0, 0, 0, 1 },
++    { SYSTEM_INCLUDE_DIR, 0, 0, 0, 1, 0 },
+ #endif
+ #ifdef STANDARD_INCLUDE_DIR
+     /* /usr/include comes dead last.  */
+-    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1 },
++    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 0 },
+ #endif
+-    { 0, 0, 0, 0, 0 }
++    { 0, 0, 0, 0, 0, 0 }
+   };
+ #endif /* no INCLUDE_DEFAULTS */
+ 
+Index: gcc/cppdefault.h
+===================================================================
+--- gcc/cppdefault.h	(revision 114541)
++++ gcc/cppdefault.h	(working copy)
+@@ -1,6 +1,6 @@
+ /* CPP Library.
+    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+-   1999, 2000, 2003, 2004 Free Software Foundation, Inc.
++   1999, 2000, 2003, 2004, 2006 Free Software Foundation, Inc.
+    Contributed by Per Bothner, 1994-95.
+    Based on CCCP program by Paul Rubin, June 1986
+    Adapted to ANSI C, Richard Stallman, Jan 1987
+@@ -43,6 +43,9 @@
+ 				   C++.  */
+   const char add_sysroot;	/* FNAME should be prefixed by
+ 				   cpp_SYSROOT.  */
++  const char multilib;		/* FNAME should have the multilib path
++				   specified with -imultilib
++				   appended.  */
+ };
+ 
+ extern const struct default_include cpp_include_defaults[];
+Index: gcc/c.opt
+===================================================================
+--- gcc/c.opt	(revision 114541)
++++ gcc/c.opt	(working copy)
+@@ -753,6 +753,10 @@
+ C ObjC C++ ObjC++ Joined Separate
+ -imacros <file>	Accept definition of macros in <file>
+ 
++imultilib
++C ObjC C++ ObjC++ Joined Separate
++-imultilib <dir> Set <dir> to be the multilib include subdirectory
++
+ include
+ C ObjC C++ ObjC++ Joined Separate
+ -include <file>	Include the contents of <file> before other files
+Index: gcc/c-opts.c
+===================================================================
+--- gcc/c-opts.c	(revision 114541)
++++ gcc/c-opts.c	(working copy)
+@@ -79,6 +79,9 @@
+ /* The prefix given by -iprefix, if any.  */
+ static const char *iprefix;
+ 
++/* The multilib directory given by -imultilib, if any.  */
++static const char *imultilib;
++
+ /* The system root, if any.  Overridden by -isysroot.  */
+ static const char *sysroot = TARGET_SYSTEM_ROOT;
+ 
+@@ -816,6 +819,10 @@
+       defer_opt (code, arg);
+       break;
+ 
++    case OPT_imultilib:
++      imultilib = arg;
++      break;
++
+     case OPT_iprefix:
+       iprefix = arg;
+       break;
+@@ -970,7 +977,7 @@
+ 
+   sanitize_cpp_opts ();
+ 
+-  register_include_chains (parse_in, sysroot, iprefix,
++  register_include_chains (parse_in, sysroot, iprefix, imultilib,
+ 			   std_inc, std_cxx_inc && c_dialect_cxx (), verbose);
+ 
+   flag_inline_trees = 1;
+Index: gcc/c-incpath.c
+===================================================================
+--- gcc/c-incpath.c	(revision 114541)
++++ gcc/c-incpath.c	(working copy)
+@@ -1,6 +1,7 @@
+ /* Set up combined include path chain for the preprocessor.
+    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+-   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   Free Software Foundation, Inc.
+ 
+    Broken out of cppinit.c and cppfiles.c and rewritten Mar 2003.
+ 
+@@ -45,8 +46,10 @@
+ # define INO_T_COPY(DEST, SRC) (DEST) = (SRC)
+ #endif
+ 
++static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
++
+ static void add_env_var_paths (const char *, int);
+-static void add_standard_paths (const char *, const char *, int);
++static void add_standard_paths (const char *, const char *, const char *, int);
+ static void free_path (struct cpp_dir *, int);
+ static void merge_include_chains (cpp_reader *, int);
+ static struct cpp_dir *remove_duplicates (cpp_reader *, struct cpp_dir *,
+@@ -120,7 +123,8 @@
+ 
+ /* Append the standard include chain defined in cppdefault.c.  */
+ static void
+-add_standard_paths (const char *sysroot, const char *iprefix, int cxx_stdinc)
++add_standard_paths (const char *sysroot, const char *iprefix,
++		    const char *imultilib, int cxx_stdinc)
+ {
+   const struct default_include *p;
+   size_t len;
+@@ -142,6 +146,8 @@
+ 	      if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
+ 		{
+ 		  char *str = concat (iprefix, p->fname + len, NULL);
++		  if (p->multilib && imultilib)
++		    str = concat (str, dir_separator_str, imultilib, NULL);
+ 		  add_path (str, SYSTEM, p->cxx_aware, false);
+ 		}
+ 	    }
+@@ -160,6 +166,9 @@
+ 	  else
+ 	    str = update_path (p->fname, p->component);
+ 
++	  if (p->multilib && imultilib)
++	    str = concat (str, dir_separator_str, imultilib, NULL);
++
+ 	  add_path (str, SYSTEM, p->cxx_aware, false);
+ 	}
+     }
+@@ -357,8 +366,8 @@
+    removal, and registration with cpplib.  */
+ void
+ register_include_chains (cpp_reader *pfile, const char *sysroot,
+-			 const char *iprefix, int stdinc, int cxx_stdinc,
+-			 int verbose)
++			 const char *iprefix, const char *imultilib,
++			 int stdinc, int cxx_stdinc, int verbose)
+ {
+   static const char *const lang_env_vars[] =
+     { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
+@@ -380,7 +389,7 @@
+ 
+   /* Finally chain on the standard directories.  */
+   if (stdinc)
+-    add_standard_paths (sysroot, iprefix, cxx_stdinc);
++    add_standard_paths (sysroot, iprefix, imultilib, cxx_stdinc);
+ 
+   target_c_incpath.extra_includes (sysroot, iprefix, stdinc);
+ 
+Index: gcc/c-incpath.h
+===================================================================
+--- gcc/c-incpath.h	(revision 114541)
++++ gcc/c-incpath.h	(working copy)
+@@ -1,5 +1,5 @@
+ /* Set up combined include path for the preprocessor.
+-   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
++   Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+@@ -18,7 +18,8 @@
+ extern void split_quote_chain (void);
+ extern void add_path (char *, int, int, bool);
+ extern void register_include_chains (cpp_reader *, const char *,
+-				     const char *, int, int, int);
++				     const char *, const char *,
++				     int, int, int);
+ extern void add_cpp_dir_path (struct cpp_dir *, int);
+ 
+ struct target_c_incpath_s {
+Index: gcc/fix-header.c
+===================================================================
+--- gcc/fix-header.c	(revision 114541)
++++ gcc/fix-header.c	(working copy)
+@@ -665,7 +665,8 @@
+   if (cpp_errors (scan_in))
+     exit (FATAL_EXIT_CODE);
+ 
+-  register_include_chains (scan_in, NULL /* sysroot */, NULL /* iprefix */,
++  register_include_chains (scan_in, NULL /* sysroot */,
++  			   NULL /* iprefix */, NULL /* imultilib */,
+ 			   true /* stdinc */, false /* cxx_stdinc */,
+ 			   false /* verbose */);
+ 
+Index: libstdc++-v3/include/Makefile.in
+===================================================================
+--- libstdc++-v3/include/Makefile.in	(revision 114541)
++++ libstdc++-v3/include/Makefile.in	(working copy)
+@@ -822,6 +822,7 @@
+ @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@c_compatibility_headers_extra = ${c_compatibility_headers}
+ host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR)
+ host_builddir = ./${host_alias}/bits
++host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits
+ host_headers = \
+ 	${host_srcdir}/ctype_base.h \
+ 	${host_srcdir}/ctype_inline.h \
+@@ -858,6 +859,7 @@
+ 
+ pch_input = ${host_builddir}/stdc++.h
+ pch_output_builddir = ${host_builddir}/stdc++.h.gch
++pch_output_installdir = ${host_installdir}/stdc++.h.gch
+ pch_source = ${glibcxx_srcdir}/include/stdc++.h
+ PCHFLAGS = -Winvalid-pch -Wno-deprecated -x c++-header $(CXXFLAGS)
+ @GLIBCXX_BUILD_PCH_FALSE@pch_build = 
+@@ -1279,9 +1281,9 @@
+ # are copied here.
+ install-freestanding-headers:
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}
+-	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${host_builddir}
++	$(mkinstalldirs) $(DESTDIR)${host_installdir}
+ 	for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h; do \
+-	  $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${host_builddir}; done
++	  $(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${std_builddir}
+ 	$(INSTALL_DATA) ${std_builddir}/limits $(DESTDIR)${gxx_include_dir}/${std_builddir}
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
+@@ -1341,15 +1343,15 @@
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${debug_builddir}
+ 	for file in ${debug_headers}; do \
+ 	  $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${debug_builddir}; done
+-	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${host_builddir}
++	$(mkinstalldirs) $(DESTDIR)${host_installdir}
+ 	for file in ${host_headers} ${host_headers_extra} \
+ 	 ${thread_host_headers}; do \
+-	  $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${host_builddir}; done
++	  $(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
+ 
+ install-pch:
+-	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${pch_output_builddir}
++	$(mkinstalldirs) $(DESTDIR)${pch_output_installdir}
+ 	for file in ${pch_output_builddir}/*; do \
+-	  $(INSTALL_DATA) $$file $(DESTDIR)${gxx_include_dir}/${pch_output_builddir}; done
++	  $(INSTALL_DATA) $$file $(DESTDIR)${pch_output_installdir}; done
+ 
+ # Stop implicit '.o' make rules from ever stomping on extensionless
+ # headers, in the improbable case where some foolish, crack-addled
+Index: libstdc++-v3/include/Makefile.am
+===================================================================
+--- libstdc++-v3/include/Makefile.am	(revision 114541)
++++ libstdc++-v3/include/Makefile.am	(working copy)
+@@ -1,6 +1,7 @@
+ ## Makefile for the include subdirectory of the GNU C++ Standard library.
+ ##
+-## Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
++## Free Software Foundation, Inc.
+ ##
+ ## This file is part of the libstdc++ version 3 distribution.
+ ## Process this file with automake to produce Makefile.in.
+@@ -612,6 +613,7 @@
+ 
+ host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR)
+ host_builddir = ./${host_alias}/bits
++host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits
+ host_headers = \
+ 	${host_srcdir}/ctype_base.h \
+ 	${host_srcdir}/ctype_inline.h \
+@@ -646,6 +648,7 @@
+ 
+ pch_input = ${host_builddir}/stdc++.h
+ pch_output_builddir = ${host_builddir}/stdc++.h.gch
++pch_output_installdir = ${host_installdir}/stdc++.h.gch
+ pch_source = ${glibcxx_srcdir}/include/stdc++.h
+ PCHFLAGS=-Winvalid-pch -Wno-deprecated -x c++-header $(CXXFLAGS)
+ if GLIBCXX_BUILD_PCH
+@@ -907,9 +910,9 @@
+ # are copied here.
+ install-freestanding-headers:
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}
+-	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${host_builddir}
++	$(mkinstalldirs) $(DESTDIR)${host_installdir}
+ 	for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h; do \
+-	  $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${host_builddir}; done
++	  $(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${std_builddir}
+ 	$(INSTALL_DATA) ${std_builddir}/limits $(DESTDIR)${gxx_include_dir}/${std_builddir}
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
+@@ -969,15 +972,15 @@
+ 	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${debug_builddir}
+ 	for file in ${debug_headers}; do \
+ 	  $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${debug_builddir}; done
+-	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${host_builddir}
++	$(mkinstalldirs) $(DESTDIR)${host_installdir}
+ 	for file in ${host_headers} ${host_headers_extra} \
+ 	 ${thread_host_headers}; do \
+-	  $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${host_builddir}; done
++	  $(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
+ 
+ install-pch:
+-	$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${pch_output_builddir}
++	$(mkinstalldirs) $(DESTDIR)${pch_output_installdir}
+ 	for file in ${pch_output_builddir}/*; do \
+-	  $(INSTALL_DATA) $$file $(DESTDIR)${gxx_include_dir}/${pch_output_builddir}; done
++	  $(INSTALL_DATA) $$file $(DESTDIR)${pch_output_installdir}; done
+ 
+ # By adding these files here, automake will remove them for 'make clean'
+ CLEANFILES = ${pch_input} ${pch_output_builddir}/*
--- gcc-4.1-4.1.2.orig/debian/patches/netbsd-all-gcc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/netbsd-all-gcc.dpatch
@@ -0,0 +1,395 @@
+#! /bin/sh -e
+
+# DP: General NetBSD support patches
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN gcc/config/netbsd-elf-gnu.h src/gcc/config/netbsd-elf-gnu.h
+--- gcc/config/netbsd-elf-gnu.h	1970-01-01 00:00:00.000000000 +0000
++++ gcc/config/netbsd-elf-gnu.h	2003-04-24 05:42:44.000000000 +0000
+@@ -0,0 +1,98 @@
++/* Common configuration file for NetBSD ELF w/ GNU userland targets.
++   Copyright (C) 2002 Free Software Foundation, Inc.
++   Contributed by Wasabi Systems, Inc.
++
++This file is part of GNU CC.
++
++GNU CC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU CC 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.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU CC; see the file COPYING.  If not, write to
++the Free Software Foundation, 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA.  */
++
++/* TARGET_OS_CPP_BUILTINS() common to all NetBSD ELF targets.  */
++#define NETBSD_OS_CPP_BUILTINS_ELF()		\
++  do						\
++    {						\
++      NETBSD_OS_CPP_BUILTINS_COMMON();		\
++      builtin_define ("__ELF__");		\
++    }						\
++  while (0)
++
++/* This defines which switch letters take arguments.  On NetBSD, most
++   of the normal cases (defined by gcc.c) apply, and we also have -h*
++   and -z* options (for the linker) (coming from SVR4).  */
++
++#undef SWITCH_TAKES_ARG
++#define SWITCH_TAKES_ARG(CHAR)			\
++  (DEFAULT_SWITCH_TAKES_ARG (CHAR)		\
++   || (CHAR) == 'h'				\
++   || (CHAR) == 'z'				\
++   || (CHAR) == 'R')
++
++
++/* Provide a STARTFILE_SPEC appropriate for NetBSD ELF.  Here we
++   provide support for the special GCC option -static.  On ELF
++   targets, we also add the crtbegin.o file, which provides part
++   of the support for getting C++ file-scope static objects
++   constructed before entering "main".  */
++
++#define NETBSD_STARTFILE_SPEC	\
++  "%{!shared:			\
++     %{pg:gcrt0%O%s}		\
++     %{!pg:			\
++       %{p:gcrt0%O%s}		\
++       %{!p:crt0%O%s}}}		\
++   %:if-exists(crti%O%s)	\
++   %{static:%:if-exists-else(crtbeginT%O%s crtbegin%O%s)} \
++   %{!static: \
++     %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}}"
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC NETBSD_STARTFILE_SPEC
++
++
++/* Provide an ENDFILE_SPEC appropriate for NetBSD ELF.  Here we
++   add crtend.o, which provides part of the support for getting
++   C++ file-scope static objects deconstructed after exiting "main".  */
++
++#define NETBSD_ENDFILE_SPEC	\
++  "%{!shared:crtend%O%s} %{shared:crtendS%O%s} \
++   %:if-exists(crtn%O%s)"
++
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC NETBSD_ENDFILE_SPEC
++
++/* Provide a LINK_SPEC appropriate for NetBSD ELF.  Here we provide
++   support for the special GCC options -assert, -R, -rpath, -shared,
++   -nostdlib, -static, -rdynamic, and -dynamic-linker.
++
++   Target-specific code can use this in conjunction with any other
++   target-specific LINK_SPEC options.
++
++   Target-specific code must provide the %(netbsd_entry_point) spec.  */
++
++/* This differs from native NetBSD only in that the linker is expected to
++   live in /lib, rather than /usr/libexec (or /libexec). */
++
++#define NETBSD_LINK_SPEC_ELF \
++  "%{assert*} %{R*} %{rpath*} \
++   %{shared:-shared} \
++   %{!shared: \
++     -dc -dp \
++     %{!nostdlib: \
++       %{!r*: \
++	 %{!e*:-e %(netbsd_entry_point)}}} \
++     %{!static: \
++       %{rdynamic:-export-dynamic} \
++       %{!dynamic-linker:-dynamic-linker /lib/ld.elf_so}} \
++     %{static:-static}}"
+diff -urN gcc/config/netbsd-gnu.h src/gcc/config/netbsd-gnu.h
+--- gcc/config/netbsd-gnu.h	1970-01-01 00:00:00.000000000 +0000
++++ gcc/config/netbsd-gnu.h	2003-04-24 05:41:04.000000000 +0000
+@@ -0,0 +1,206 @@
++/* Base configuration file for all NetBSD w/ GNU userland targets.
++   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
++   Free Software Foundation, Inc.
++
++This file is part of GNU CC.
++
++GNU CC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU CC 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.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU CC; see the file COPYING.  If not, write to
++the Free Software Foundation, 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA.  */
++
++/* TARGET_OS_CPP_BUILTINS() common to all NetBSD targets.  */
++#define NETBSD_OS_CPP_BUILTINS_COMMON()		\
++  do						\
++    {						\
++      builtin_define ("__NetBSD__");		\
++      builtin_assert ("system=unix");		\
++      builtin_assert ("system=NetBSD");		\
++    }						\
++  while (0)
++
++/* TARGET_OS_CPP_BUILTINS() common to all LP64 NetBSD targets.  */
++#define NETBSD_OS_CPP_BUILTINS_LP64()		\
++  do						\
++    {						\
++      builtin_define ("_LP64");			\
++    }						\
++  while (0)
++
++/* CPP_SPEC parts common to all NetBSD targets.  */
++#define NETBSD_CPP_SPEC				\
++  "%{posix:-D_POSIX_SOURCE} \
++   %{pthread:-D_REENTRANT -D_PTHREADS}"
++
++/* NETBSD_NATIVE is defined only when gcc is integrated into a NetBSD
++   system with a NetBSD userland - NetBSD with a GNU userland never defines
++   it, and all references to it have been removed for this system type. */
++
++/* FIXME: This should link to libc, but there are problems with that under
++   3.2 - find out of they still apply under 3.3! */
++
++/* Provide a LIB_SPEC appropriate for NetBSD.  Here we:
++
++   1. Select the appropriate set of libs, depending on whether we're
++      profiling.
++
++   2. Include the pthread library if -pthread is specified (only
++      if threads are enabled).
++
++   3. Include the posix library if -posix is specified.
++
++   FIXME: Could eliminate the duplication here if we were allowed to
++   use string concatenation.  */
++
++#ifdef NETBSD_ENABLE_PTHREADS
++#define NETBSD_LIB_SPEC		\
++  "%{pthread:			\
++     %{!p:			\
++       %{!pg:-lpthread}}	\
++     %{p:-lpthread_p}		\
++     %{pg:-lpthread_p}}		\
++   %{posix:			\
++     %{!p:			\
++       %{!pg:-lposix}}		\
++     %{p:-lposix_p}		\
++     %{pg:-lposix_p}}		\
++   %{!shared:			\
++     %{!symbolic:		\
++       %{!p:			\
++	 %{!pg:-lc}}		\
++       %{p:-lc_p}		\
++       %{pg:-lc_p}}}"
++#else
++#define NETBSD_LIB_SPEC		\
++  "%{posix:			\
++     %{!p:			\
++       %{!pg:-lposix}}		\
++     %{p:-lposix_p}		\
++     %{pg:-lposix_p}}		\
++   %{!shared:			\
++     %{!symbolic:		\
++       %{!p:			\
++	 %{!pg:-lc}}		\
++       %{p:-lc_p}		\
++       %{pg:-lc_p}}}"
++#endif
++
++#undef LIB_SPEC
++#define LIB_SPEC NETBSD_LIB_SPEC
++
++/* Provide a LIBGCC_SPEC appropriate for NetBSD.  We also want to exclude
++   libgcc with -symbolic.  */
++
++#ifdef NETBSD_NATIVE
++#define NETBSD_LIBGCC_SPEC	\
++  "%{!symbolic:			\
++     %{!shared:			\
++       %{!p:			\
++	 %{!pg: -lgcc}}}	\
++     %{shared: -lgcc_pic}	\
++     %{p: -lgcc_p}		\
++     %{pg: -lgcc_p}}"
++#else
++#define NETBSD_LIBGCC_SPEC "%{!shared:%{!symbolic: -lgcc}}"
++#endif
++
++#undef LIBGCC_SPEC
++#define LIBGCC_SPEC NETBSD_LIBGCC_SPEC
++
++/* When building shared libraries, the initialization and finalization 
++   functions for the library are .init and .fini respectively.  */
++
++#define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC)				\
++  do {									\
++    fprintf ((STREAM), "void __init() __asm__ (\".init\");");		\
++    fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC));	\
++  } while (0)
++
++#define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC)				\
++  do {									\
++    fprintf ((STREAM), "void __fini() __asm__ (\".fini\");");		\
++    fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC));	\
++  } while (0)
++
++#undef TARGET_HAS_F_SETLKW
++#define TARGET_HAS_F_SETLKW
++
++/* Implicit library calls should use memcpy, not bcopy, etc.  */
++
++#undef TARGET_MEM_FUNCTIONS
++#define TARGET_MEM_FUNCTIONS 1
++
++/* Handle #pragma weak and #pragma pack.  */
++
++#define HANDLE_SYSV_PRAGMA 1
++
++
++/* Define some types that are the same on all NetBSD platforms,
++   making them agree with <machine/ansi.h>.  */
++
++#undef WCHAR_TYPE
++#define WCHAR_TYPE "int"
++
++#undef WCHAR_TYPE_SIZE
++#define WCHAR_TYPE_SIZE 32
++
++#undef WINT_TYPE
++#define WINT_TYPE "int"
++
++
++/* Attempt to turn on execute permission for the stack.  This may be
++   used by TRANSFER_FROM_TRAMPOLINE of the target needs it (that is,
++   if the target machine can change execute permissions on a page).
++
++   There is no way to query the execute permission of the stack, so
++   we always issue the mprotect() call.
++
++   Note that we go out of our way to use namespace-non-invasive calls
++   here.  Unfortunately, there is no libc-internal name for mprotect().
++
++   Also note that no errors should be emitted by this code; it is considered
++   dangerous for library calls to send messages to stdout/stderr.  */
++
++#define NETBSD_ENABLE_EXECUTE_STACK					\
++extern void __enable_execute_stack (void *);				\
++void									\
++__enable_execute_stack (addr)						\
++     void *addr;							\
++{									\
++  extern int mprotect (void *, size_t, int);				\
++  extern int __sysctl (int *, unsigned int, void *, size_t *,		\
++		       void *, size_t);					\
++									\
++  static int size;							\
++  static long mask;							\
++									\
++  char *page, *end;							\
++									\
++  if (size == 0)							\
++    {									\
++      int mib[2];							\
++      size_t len;							\
++									\
++      mib[0] = 6; /* CTL_HW */						\
++      mib[1] = 7; /* HW_PAGESIZE */					\
++      len = sizeof (size);						\
++      (void) __sysctl (mib, 2, &size, &len, NULL, 0);			\
++      mask = ~((long) size - 1);					\
++    }									\
++									\
++  page = (char *) (((long) addr) & mask);				\
++  end  = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size);	\
++									\
++  /* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */				\
++  (void) mprotect (page, end - page, 7);				\
++}
+diff -urN gcc/config/t-netbsd-gnu src/gcc/config/t-netbsd-gnu
+--- gcc/config/t-netbsd-gnu	1970-01-01 00:00:00.000000000 +0000
++++ gcc/config/t-netbsd-gnu	2003-02-21 10:31:17.000000000 +0000
+@@ -0,0 +1,5 @@
++# Don't run fixproto
++STMP_FIXPROTO =
++
++# Always build crtstuff with PIC.
++CRTSTUFF_T_CFLAGS = -fPIC
+diff -urN gcc/config.gcc src/gcc/config.gcc
+--- gcc/config.gcc	2003-03-02 07:39:03.000000000 +0000
++++ gcc/config.gcc	2003-04-24 06:02:55.000000000 +0000
+@@ -329,6 +329,45 @@
+ 		;;
+ 	esac
+ 	;;
++*-*-netbsd*-gnu*)
++	tmake_file="t-slibgcc-elf-ver t-libc-ok t-netbsd"
++	xm_defines=POSIX
++	gas=yes
++	gnu_ld=yes
++
++	# This section MUST go above the matches for Hurd and native NetBSD,
++	# or they will catch the value, due to using excessively permissive 
++	# match values. Also, $machine doesn't contain any version data, on
++	# a NetBSD w/ GNU userland machine, so we use uname -r instead.
++
++	osr=`uname -r`
++
++	# NetBSD 2.0 and later get POSIX threads enabled by default.
++	# Allow them to be explicitly enabled on any other version.
++	case x${enable_threads} in
++	x)
++		case $osr in
++		[2-9]*)
++			thread_file='posix'
++			tm_defines="${tm_defines} NETBSD_ENABLE_PTHREADS"
++			;;
++		esac
++		;;
++	xyes | xposix)
++		thread_file='posix'
++		tm_defines="${tm_defines} NETBSD_ENABLE_PTHREADS"
++		;;
++	esac
++
++	# NetBSD 1.7 and later are set up to use GCC's crtstuff for
++	# ELF configurations.  We will clear extra_parts in the
++	# a.out configurations.
++	case $osr in
++	1.[7-9]* | [2-9]*)
++		extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
++		;;
++	esac
++	;;
+ *-*-gnu*)
+ 	# On the Hurd, the setup is just about the same on
+ 	# each different CPU.  The specific machines that we
--- gcc-4.1-4.1.2.orig/debian/patches/reporting.dpatch
+++ gcc-4.1-4.1.2/debian/patches/reporting.dpatch
@@ -0,0 +1,122 @@
+#! /bin/sh -e
+
+# DP: Add Debian URL for bug reporting instructions.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir=$3/
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+	patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	if grep -q debian_bug_report_url ${dir}gcc/version.c; then
+	  :
+	else
+	  echo 'const char debian_bug_report_url[] = "<URL:file:///usr/share/doc/gcc-4.1/README.Bugs>";' >> ${dir}gcc/version.c
+	fi
+	;;
+    -unpatch)
+	grep -v debian_bug_report_url ${dir}gcc/version.c > ${dir}gcc/version.c.new
+	${dir}move-if-change ${dir}gcc/version.c.new ${dir}gcc/version.c
+	patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+	;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1
+esac
+exit 0
+
+--- gcc/java/jcf-dump.c.orig	2005-09-05 00:22:28.368267856 +0000
++++ gcc/java/jcf-dump.c	2005-09-05 00:22:44.643793600 +0000
+@@ -921,6 +921,8 @@
+   printf ("\n");
+   printf (_("For bug reporting instructions, please see:\n"
+ 	    "%s.\n"), bug_report_url);
++  printf (_("For Debian GNU/Linux specific bug reporting instructions, please see:\n"
++	    "%s.\n"), debian_bug_report_url);
+   exit (0);
+ }
+ 
+--- gcc/diagnostic.c.orig	2005-09-05 00:22:28.371267400 +0000
++++ gcc/diagnostic.c	2005-09-05 00:22:44.644793448 +0000
+@@ -243,6 +243,8 @@
+       fnotice (stderr, "Please submit a full bug report,\n"
+ 	       "with preprocessed source if appropriate.\n"
+ 	       "See %s for instructions.\n", bug_report_url);
++      fnotice (stderr, "For Debian GNU/Linux specific bug reporting instructions,\n"
++	       "see %s.\n", debian_bug_report_url);
+       exit (FATAL_EXIT_CODE);
+ 
+     case DK_FATAL:
+--- gcc/gcc.c.orig	2005-09-05 00:22:28.378266336 +0000
++++ gcc/gcc.c	2005-09-05 00:24:35.547933608 +0000
+@@ -2872,9 +2872,11 @@
+ 	      fatal ("\
+ Internal error: %s (program %s)\n\
+ Please submit a full bug report.\n\
+-See %s for instructions.",
++See %s for instructions.\n\
++For Debian GNU/Linux specific bug reporting instructions, see\n\
++%s.\n",
+ 		     strsignal (WTERMSIG (status)), commands[i].prog,
+-		     bug_report_url);
++		     bug_report_url, debian_bug_report_url);
+ 	    signal_count++;
+ 	    ret_code = -1;
+ 	  }
+@@ -6359,6 +6361,8 @@
+ 	{
+ 	  printf (_("\nFor bug reporting instructions, please see:\n"));
+ 	  printf ("%s.\n", bug_report_url);
++	  printf ("For Debian GNU/Linux specific bug reporting instructions, please see:\n");
++	  printf ("%s.\n", debian_bug_report_url);
+ 
+ 	  return (0);
+ 	}
+@@ -6648,6 +6652,8 @@
+     {
+       printf (("\nFor bug reporting instructions, please see:\n"));
+       printf ("%s\n", bug_report_url);
++      printf ("For Debian GNU/Linux specific bug reporting instructions, please see:\n");
++      printf ("%s\n", debian_bug_report_url);
+     }
+ 
+   return (signal_count != 0 ? 2
+--- gcc/gccbug.in.orig	2005-09-05 00:22:28.381265880 +0000
++++ gcc/gccbug.in	2005-09-05 00:25:56.216670096 +0000
+@@ -25,10 +25,10 @@
+ VERSION=3.113
+ 
+ # The submitter-id for your site.
+-SUBMITTER=net
++SUBMITTER=net # net-debian
+ 
+ # The default mail address for PR submissions. 
+-GNATS_ADDR=gcc-gnats@gcc.gnu.org
++GNATS_ADDR="gcc-gnats@gcc.gnu.org,debian-gcc@lists.debian.org"
+ 
+ # The default release for this host.
+ # We have to guess at what program_transform_name might have done.
+--- gcc/gcov.c.orig	2005-09-05 00:22:28.382265728 +0000
++++ gcc/gcov.c	2005-09-05 00:22:44.650792536 +0000
+@@ -402,6 +402,8 @@
+   fnotice (file, "  -u, --unconditional-branches    Show unconditional branch counts too\n");
+   fnotice (file, "\nFor bug reporting instructions, please see:\n%s.\n",
+ 	   bug_report_url);
++  fnotice (file, "\nFor Debian GNU/Linux specific bug reporting instructions, please see:\n%s.\n",
++	   debian_bug_report_url);
+   exit (status);
+ }
+ 
+--- gcc/version.h.orig	2005-09-05 00:22:28.383265576 +0000
++++ gcc/version.h	2005-09-05 00:22:44.651792384 +0000
+@@ -2,4 +2,5 @@
+ #define GCC_VERSION_H
+ extern const char version_string[];
+ extern const char bug_report_url[];
++extern const char debian_bug_report_url[];
+ #endif /* ! GCC_VERSION_H */
--- gcc-4.1-4.1.2.orig/debian/patches/cross-include.dpatch
+++ gcc-4.1-4.1.2/debian/patches/cross-include.dpatch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+
+# DP: Set cross include path to .../include, not .../sys-include
+# DP: This should be a fix for famous limits.h issue
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        cd ${dir}gcc && autoconf
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/configure.ac.orig	2005-08-24 06:24:11.000000000 +0400
++++ gcc/configure.ac	2005-12-06 00:40:45.000000000 +0300
+@@ -681,7 +681,7 @@
+ ], [
+  TARGET_SYSTEM_ROOT=
+  TARGET_SYSTEM_ROOT_DEFINE=
+- CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
++ CROSS_SYSTEM_HEADER_DIR='$(prefix)/$(target_noncanonical)/include'
+ ])
+ AC_SUBST(TARGET_SYSTEM_ROOT)
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
--- gcc-4.1-4.1.2.orig/debian/patches/pr32862.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr32862.dpatch
@@ -0,0 +1,71 @@
+#! /bin/sh -e
+
+# DP: Fix PR java/32862, bugs in EnumMap implementation.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2007-07-24  Tom Tromey  <tromey@redhat.com>
+
+	PR java/32862:
+	* java/util/EnumMap.java (get): Special case emptySlot.
+	(clone): Rewrote.
+
+--- libjava/classpath/java/util/EnumMap.java.orig	2007-07-06 20:42:04.000000000 +0200
++++ libjava/classpath/java/util/EnumMap.java	2007-07-26 21:24:48.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* EnumMap.java - Map where keys are enum constants
+-   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
++   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+ 
+ This file is part of GNU Classpath.
+ 
+@@ -140,7 +140,8 @@
+     Enum<K> e = (Enum<K>) key;
+     if (e.getDeclaringClass() != enumClass)
+       return null;
+-    return store[e.ordinal()];
++    V o = store[e.ordinal()];
++    return o == emptySlot ? null : o;
+   }
+ 
+   public V put(K key, V value)
+@@ -387,8 +388,18 @@
+ 
+   public EnumMap<K, V> clone()
+   {
+-    /* This constructor provides this functionality */
+-    return new EnumMap(this);
++    EnumMap<K, V> result;
++    try
++      {
++	result = (EnumMap<K, V>) super.clone();
++      }
++    catch (CloneNotSupportedException ignore)
++      {
++	// Can't happen.
++	result = null;
++      }
++    result.store = (V[]) store.clone();
++    return result;
+   }
+ 
+ }
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-pfrs-2.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-pfrs-2.dpatch
@@ -0,0 +1,422 @@
+#! /bin/sh -e
+
+# DP: Fix a regression in the backport of PR 28946 from the trunk (H.J. Lu).
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+2006-09-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/i386/i386.c (x86_partial_flag_reg_stall): New.
+
+	* config/i386/i386.h (x86_partial_flag_reg_stall): New.
+	(TARGET_PARTIAL_FLAG_REG_STALL): New.
+
+	* config/i386/i386.md (*ashldi3_cmp_rex64): Disabled for
+	TARGET_PARTIAL_FLAG_REG_STALL.
+	(*ashldi3_cconly_rex64): Likewise.
+	(*ashlsi3_cmp): Likewise.
+	(*ashlsi3_cconly): Likewise.
+	(*ashlsi3_cmp_zext): Likewise.
+	(*ashlhi3_cmp): Likewise.
+	(*ashlhi3_cconly): Likewise.
+	(*ashlqi3_cmp): Likewise.
+	(*ashlqi3_cconly): Likewise.
+	(*ashrdi3_cmp_rex64): Likewise.
+	(*ashrdi3_cconly_rex64): Likewise.
+	(*ashrsi3_cmp): Likewise.
+	(*ashrsi3_cconly): Likewise.
+	(*ashrsi3_cmp_zext): Likewise.
+	(*ashrhi3_cmp): Likewise.
+	(*ashrhi3_cconly): Likewise.
+	(*ashrqi3_cmp): Likewise.
+	(*ashrqi3_cconly): Likewise.
+	(*lshrdi3_cmp_rex64): Likewise.
+	(*lshrdi3_cconly_rex64): Likewise.
+	(*lshrsi3_cmp): Likewise.
+	(*lshrsi3_cconly): Likewise.
+	(*lshrsi3_cmp_zext): Likewise.
+	(*lshrhi3_cmp): Likewise.
+	(*lshrhi3_cconly): Likewise.
+	(*lshrqi2_cmp): Likewise.
+	(*lshrqi2_cconly): Likewise.
+
+Index: gcc/config/i386/i386.h
+===================================================================
+--- gcc/config/i386/i386.h	(revision 116756)
++++ gcc/config/i386/i386.h	(revision 116757)
+@@ -164,6 +164,7 @@ extern const int x86_use_bt;
+ extern const int x86_cmpxchg, x86_cmpxchg8b, x86_cmpxchg16b, x86_xadd;
+ extern const int x86_use_incdec;
+ extern const int x86_pad_returns;
++extern const int x86_partial_flag_reg_stall;
+ extern int x86_prefetch_sse;
+ 
+ #define TARGET_USE_LEAVE (x86_use_leave & TUNEMASK)
+@@ -182,6 +183,7 @@ extern int x86_prefetch_sse;
+ #define TARGET_USE_SAHF ((x86_use_sahf & TUNEMASK) && !TARGET_64BIT)
+ #define TARGET_MOVX (x86_movx & TUNEMASK)
+ #define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & TUNEMASK)
++#define TARGET_PARTIAL_FLAG_REG_STALL (x86_partial_flag_reg_stall & TUNEMASK)
+ #define TARGET_USE_HIMODE_FIOP (x86_use_himode_fiop & TUNEMASK)
+ #define TARGET_USE_SIMODE_FIOP (x86_use_simode_fiop & TUNEMASK)
+ #define TARGET_USE_MOV0 (x86_use_mov0 & TUNEMASK)
+Index: gcc/config/i386/i386.md
+===================================================================
+--- gcc/config/i386/i386.md	(revision 116756)
++++ gcc/config/i386/i386.md	(revision 116757)
+@@ -10396,7 +10396,12 @@
+    (set (match_operand:DI 0 "nonimmediate_operand" "=rm")
+ 	(ashift:DI (match_dup 1) (match_dup 2)))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, DImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, DImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -10432,7 +10437,12 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:DI 0 "=r"))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, DImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, DImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || TARGET_DOUBLE_WITH_ADD)))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -10713,7 +10723,12 @@
+    (set (match_operand:SI 0 "nonimmediate_operand" "=rm")
+ 	(ashift:SI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, SImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, SImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -10749,7 +10764,12 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:SI 0 "=r"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, SImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, SImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || TARGET_DOUBLE_WITH_ADD)))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -10786,7 +10806,12 @@
+    (set (match_operand:DI 0 "register_operand" "=r")
+ 	(zero_extend:DI (ashift:SI (match_dup 1) (match_dup 2))))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, SImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, SImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || TARGET_DOUBLE_WITH_ADD)))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -10905,7 +10930,12 @@
+    (set (match_operand:HI 0 "nonimmediate_operand" "=rm")
+ 	(ashift:HI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, HImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -10941,7 +10971,12 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:HI 0 "=r"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, HImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || TARGET_DOUBLE_WITH_ADD)))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -11099,7 +11134,12 @@
+    (set (match_operand:QI 0 "nonimmediate_operand" "=qm")
+ 	(ashift:QI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, QImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, QImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || (TARGET_DOUBLE_WITH_ADD && REG_P (operands[0])))))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -11135,7 +11175,12 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:QI 0 "=q"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFT, QImode, operands)"
++   && ix86_binary_operator_ok (ASHIFT, QImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL
++       || (operands[2] == const1_rtx
++	   && (TARGET_SHIFT1
++	       || TARGET_DOUBLE_WITH_ADD)))"
+ {
+   switch (get_attr_type (insn))
+     {
+@@ -11332,7 +11377,9 @@
+    (set (match_operand:DI 0 "nonimmediate_operand" "=rm")
+ 	(ashiftrt:DI (match_dup 1) (match_dup 2)))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "DI")])
+@@ -11345,7 +11392,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:DI 0 "=r"))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "DI")])
+@@ -11579,7 +11628,9 @@
+    (set (match_operand:SI 0 "nonimmediate_operand" "=rm")
+ 	(ashiftrt:SI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "SI")])
+@@ -11592,7 +11643,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:SI 0 "=r"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "SI")])
+@@ -11606,7 +11659,9 @@
+    (set (match_operand:DI 0 "register_operand" "=r")
+ 	(zero_extend:DI (ashiftrt:SI (match_dup 1) (match_dup 2))))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{l}\t{%2, %k0|%k0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "SI")])
+@@ -11692,7 +11747,9 @@
+    (set (match_operand:HI 0 "nonimmediate_operand" "=rm")
+ 	(ashiftrt:HI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "HI")])
+@@ -11705,7 +11762,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:HI 0 "=r"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "HI")])
+@@ -11819,7 +11878,9 @@
+    (set (match_operand:QI 0 "nonimmediate_operand" "=qm")
+ 	(ashiftrt:QI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "QI")])
+@@ -11832,7 +11893,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:QI 0 "=q"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
++   && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "sar{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "QI")])
+@@ -11976,7 +12039,9 @@
+    (set (match_operand:DI 0 "nonimmediate_operand" "=rm")
+ 	(lshiftrt:DI (match_dup 1) (match_dup 2)))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "DI")])
+@@ -11989,7 +12054,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:DI 0 "=r"))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "DI")])
+@@ -12147,7 +12214,9 @@
+    (set (match_operand:SI 0 "nonimmediate_operand" "=rm")
+ 	(lshiftrt:SI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "SI")])
+@@ -12160,7 +12229,9 @@
+         (const_int 0)))
+    (clobber (match_scratch:SI 0 "=r"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "SI")])
+@@ -12174,7 +12245,9 @@
+    (set (match_operand:DI 0 "register_operand" "=r")
+ 	(lshiftrt:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))]
+   "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{l}\t{%2, %k0|%k0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "SI")])
+@@ -12260,7 +12333,9 @@
+    (set (match_operand:HI 0 "nonimmediate_operand" "=rm")
+ 	(lshiftrt:HI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "HI")])
+@@ -12273,7 +12348,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:HI 0 "=r"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "HI")])
+@@ -12386,7 +12463,9 @@
+    (set (match_operand:QI 0 "nonimmediate_operand" "=qm")
+ 	(lshiftrt:QI (match_dup 1) (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "QI")])
+@@ -12399,7 +12478,9 @@
+ 	  (const_int 0)))
+    (clobber (match_scratch:QI 0 "=q"))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+-   && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
++   && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)
++   && (optimize_size
++       || !TARGET_PARTIAL_FLAG_REG_STALL)"
+   "shr{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "ishift")
+    (set_attr "mode" "QI")])
+Index: gcc/config/i386/i386.c
+===================================================================
+--- gcc/config/i386/i386.c	(revision 116756)
++++ gcc/config/i386/i386.c	(revision 116757)
+@@ -761,6 +761,7 @@ const int x86_use_sahf = m_PPRO | m_K6 |
+    with partial reg. dependencies used by Athlon/P4 based chips, it is better
+    to leave it off for generic32 for now.  */
+ const int x86_partial_reg_stall = m_PPRO;
++const int x86_partial_flag_reg_stall = m_GENERIC;
+ const int x86_use_himode_fiop = m_386 | m_486 | m_K6;
+ const int x86_use_simode_fiop = ~(m_PPRO | m_ATHLON_K8 | m_PENT | m_GENERIC);
+ const int x86_use_mov0 = m_K6;
--- gcc-4.1-4.1.2.orig/debian/patches/powerpc-biarch.dpatch
+++ gcc-4.1-4.1.2/debian/patches/powerpc-biarch.dpatch
@@ -0,0 +1,44 @@
+#! /bin/sh -e
+ 
+# DP: enable biarch for 32 bit compiler
+ 
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- ./gcc/config/rs6000/t-linux64	(revision 133025)
++++ ./gcc/config/rs6000/t-linux64	(working copy)
+@@ -13,13 +13,10 @@
+ # it doesn't tell anything about the 32bit libraries on those systems.  Set
+ # MULTILIB_OSDIRNAMES according to what is found on the target.
+ 
+-MULTILIB_OPTIONS        = m64/m32 msoft-float
+-MULTILIB_DIRNAMES       = 64 32 nof
++MULTILIB_OPTIONS        = m64/m32
++MULTILIB_DIRNAMES       = 64 32
+ MULTILIB_EXTRA_OPTS     = fPIC mstrict-align
+-MULTILIB_EXCEPTIONS     = m64/msoft-float
+-MULTILIB_EXCLUSIONS     = m64/!m32/msoft-float
+-MULTILIB_OSDIRNAMES	= ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof
+-MULTILIB_MATCHES        = $(MULTILIB_MATCHES_FLOAT)
++MULTILIB_OSDIRNAMES	= ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+ 
+ # We want fine grained libraries, so use the new code to build the
+ # floating point emulation libraries.
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-vis-r116507-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-vis-r116507-doc.dpatch
@@ -0,0 +1,84 @@
+#! /bin/sh -e
+
+# DP: g++ visibility patches (taken from the redhat/gcc-4_1-branch)
+# DP:   PR c++/28407, PR c++/28409
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+------------------------------------------------------------------------
+r116507 | jakub | 2006-08-28 14:31:26 +0200 (Mon, 28 Aug 2006) | 24 lines
+
+2006-07-20  Jason Merrill  <jason@redhat.com>
+
+        * tree.c (remove_attribute): New fn.
+
+        PR c++/28407
+        * decl.c (grokvardecl): Set DECL_THIS_STATIC on file-scope
+        const variables with implicit internal linkage.
+        * tree.c (decl_linkage): Only return lk_external if it's set.
+
+        PR c++/28409
+        * decl2.c (constrain_visibility): Ignore the anonymous namespace 
+        for extern "C" decls.
+        (VISIBILITY_STATIC): Rename to VISIBILITY_ANON.
+
+        * decl2.c (constrain_visibility): Remove specified and reason 
+        parameters.  Don't touch decls that already have explicit visibility.
+        (determine_visibility): Do copy DECL_VISIBILITY_SPECIFIED from 
+        template.
+        (determine_visibility_from_class): Reverse sense of 
+        DECL_VISIBILITY_SPECIFIED test for target-specific visibility rules.
+        (constrain_class_visibility): Only complain about member visibility
+        if the member type is another class.  Don't change visibility of the
+        current class.
+
+Index: gcc/doc/extend.texi
+===================================================================
+--- gcc/doc/extend.texi	(Revision 116506)
++++ gcc/doc/extend.texi	(Revision 116507)
+@@ -2346,6 +2346,9 @@
+ Otherwise, template instantiations and specializations default to the
+ visibility of their template.
+ 
++If both the template and enclosing class have explicit visibility, the
++visibility from the template is used.
++
+ @item warn_unused_result
+ @cindex @code{warn_unused_result} attribute
+ The @code{warn_unused_result} attribute causes a warning to be emitted
+@@ -3465,6 +3468,13 @@
+ attributes, the attribute must appear between the initial keyword and
+ the name of the type; it cannot appear after the body of the type.
+ 
++Note that the type visibility is applied to vague linkage entities
++associated with the class (vtable, typeinfo node, etc.).  In
++particular, if a class is thrown as an exception in one shared object
++and caught in another, the class must have default visibility.
++Otherwise the two shared objects will be unable to use the same
++typeinfo node and exception handling will break.
++
+ @subsection ARM Type Attributes
+ 
+ On those ARM targets that support @code{dllimport} (such as Symbian
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-jumptable.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-jumptable.dpatch
@@ -0,0 +1,51 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Don't force byte offset when accessing the jumptable, gas can
+# DP: generate the correct offset size instead.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/config/m68k/m68k.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.c
++++ gcc-4.1/gcc/config/m68k/m68k.c
+@@ -2773,10 +2773,10 @@ print_operand (FILE *file, rtx op, int l
+ 
+ #if MOTOROLA
+ #  define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
+-	asm_fprintf (file, "%LL%d-%LLI%d.b(%Rpc,%s.", labelno, labelno, regname)
++	asm_fprintf (file, "%LL%d(%Rpc,%s.", labelno, regname)
+ #else /* !MOTOROLA */
+ # define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
+-	asm_fprintf (file, "%Rpc@(%LL%d-%LLI%d-2:b,%s:", labelno, labelno, regname)
++	asm_fprintf (file, "%Rpc@(%LL%d,%s:", labelno, regname)
+ #endif /* !MOTOROLA */
+ 
+ void
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-vis-r115693.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-vis-r115693.dpatch
@@ -0,0 +1,267 @@
+#! /bin/sh -e
+
+# DP: Fix PR c/25795, PR c++/27369 (taken from the redhat/gcc-4_1-branch)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+r115693 | hubicka | 2006-07-24 02:16:16 +0200 (Mo, 24 Jul 2006) | 13 lines
+
+        PR c/25795
+        PR c++/27369
+        * cgraph.c (cgraph_varpool_nodes): Export.
+        (decide_is_variable_needed): Ignored "used" attribute in
+        unit-at-a-time mode.
+        * cgraph.h (cgraph_varpool_nodes): Declare.
+        * cgraphunit.c (decide_is_function_needed): Ignored "used" attribute in
+        unit-at-a-time mode.
+
+        * gcc.dg/pr25795.c: New test.
+        * gcc.dg/pr25795-1.c: New test.
+
+diff -urN gcc.orig/c-common.c gcc/c-common.c
+--- gcc.orig/c-common.c	2006-10-02 16:17:07.788388000 +0200
++++ gcc/c-common.c	2006-10-02 16:21:25.998388000 +0200
+@@ -4313,20 +4313,9 @@
+ 	       "%qE attribute have effect only on public objects", name);
+       *no_add_attrs = true;
+     }
+-  else if (TREE_CODE (node) == FUNCTION_DECL)
+-    {
+-      struct cgraph_node *n = cgraph_node (node);
+-      n->local.externally_visible = true;
+-      if (n->local.finalized)
+-	cgraph_mark_needed_node (n);
+-    }
+-  else if (TREE_CODE (node) == VAR_DECL)
+-    {
+-      struct cgraph_varpool_node *n = cgraph_varpool_node (node);
+-      n->externally_visible = true;
+-      if (n->finalized)
+-	cgraph_varpool_mark_needed_node (n);
+-    }
++  else if (TREE_CODE (node) == FUNCTION_DECL
++	   || TREE_CODE (node) == VAR_DECL)
++    ;
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+diff -urN gcc.orig/c-decl.c gcc/c-decl.c
+--- gcc.orig/c-decl.c	2006-10-02 16:17:07.778388000 +0200
++++ gcc/c-decl.c	2006-10-02 16:21:25.998388000 +0200
+@@ -3529,7 +3529,7 @@
+     }
+ 
+   /* If this was marked 'used', be sure it will be output.  */
+-  if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
++  if (!flag_unit_at_a_time && lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
+     mark_decl_referenced (decl);
+ 
+   if (TREE_CODE (decl) == TYPE_DECL)
+diff -urN gcc.orig/cgraph.c gcc/cgraph.c
+--- gcc.orig/cgraph.c	2005-10-31 22:07:29.000000000 +0100
++++ gcc/cgraph.c	2006-10-02 16:21:25.988388000 +0200
+@@ -133,7 +133,7 @@
+ 
+ 
+ /* The linked list of cgraph varpool nodes.  */
+-static GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes;
++struct cgraph_varpool_node *cgraph_varpool_nodes;
+ 
+ /* End of the varpool queue.  Needs to be QTYed to work with PCH.  */
+ static GTY(()) struct cgraph_varpool_node *cgraph_varpool_last_needed_node;
+@@ -809,8 +809,10 @@
+ decide_is_variable_needed (struct cgraph_varpool_node *node, tree decl)
+ {
+   /* If the user told us it is used, then it must be so.  */
+-  if (node->externally_visible
+-      || lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
++  if (node->externally_visible)
++    return true;
++  if (!flag_unit_at_a_time
++      && lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
+     return true;
+ 
+   /* ??? If the assembler name is set by hand, it is possible to assemble
+@@ -827,7 +829,8 @@
+ 
+   /* Externally visible variables must be output.  The exception is
+      COMDAT variables that must be output only when they are needed.  */
+-  if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl) && !DECL_EXTERNAL (decl))
++  if (TREE_PUBLIC (decl) && !flag_whole_program && !DECL_COMDAT (decl)
++      && !DECL_EXTERNAL (decl))
+     return true;
+ 
+   if (flag_unit_at_a_time)
+diff -urN gcc.orig/cgraph.h gcc/cgraph.h
+--- gcc.orig/cgraph.h	2005-09-24 14:43:30.000000000 +0200
++++ gcc/cgraph.h	2006-10-02 16:26:10.518388000 +0200
+@@ -221,6 +221,7 @@
+ 
+ extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_first_unanalyzed_node;
+ extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes_queue;
++extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes;
+ 
+ /* In cgraph.c  */
+ void dump_cgraph (FILE *);
+diff -urN gcc.orig/cgraphunit.c gcc/cgraphunit.c
+--- gcc.orig/cgraphunit.c	2006-10-02 15:40:29.118388000 +0200
++++ gcc/cgraphunit.c	2006-10-02 16:21:25.998388000 +0200
+@@ -198,8 +198,10 @@
+     }
+ 
+   /* If the user told us it is used, then it must be so.  */
+-  if (node->local.externally_visible
+-      || lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
++  if (node->local.externally_visible)
++    return true;
++
++  if (!flag_unit_at_a_time && lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
+     return true;
+ 
+   /* ??? If the assembler name is set by hand, it is possible to assemble
+@@ -877,6 +879,71 @@
+   current_function_decl = NULL;
+ }
+ 
++/* Look for externally_visible and used attributes and mark cgraph nodes
++   accordingly.
++
++   We cannot mark the nodes at the point the attributes are processed (in
++   handle_*_attribute) because the copy of the declarations available at that
++   point may not be canonical.  For example, in:
++
++    void f();
++    void f() __attribute__((used));
++
++   the declaration we see in handle_used_attribute will be the second
++   declaration -- but the front end will subsequently merge that declaration
++   with the original declaration and discard the second declaration.
++
++   Furthermore, we can't mark these nodes in cgraph_finalize_function because:
++
++    void f() {}
++    void f() __attribute__((externally_visible));
++
++   is valid.
++
++   So, we walk the nodes at the end of the translation unit, applying the
++   attributes at that point.  */
++
++static void
++process_function_and_variable_attributes (struct cgraph_node *first,
++                                          struct cgraph_varpool_node *first_var)
++{
++  struct cgraph_node *node;
++  struct cgraph_varpool_node *vnode;
++
++  for (node = cgraph_nodes; node != first; node = node->next)
++    {
++      tree decl = node->decl;
++      if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
++	{
++	  mark_decl_referenced (decl);
++	  if (node->local.finalized)
++	     cgraph_mark_needed_node (node);
++	}
++      if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
++	{
++	  if (node->local.finalized)
++	    cgraph_mark_needed_node (node);
++	  node->externally_visible = true;
++	}
++    }
++  for (vnode = cgraph_varpool_nodes; vnode != first_var; vnode = vnode->next)
++    {
++      tree decl = vnode->decl;
++      if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
++	{
++	  mark_decl_referenced (decl);
++	  if (vnode->finalized)
++	    cgraph_varpool_mark_needed_node (vnode);
++	}
++      if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
++	{
++	  if (vnode->finalized)
++	    cgraph_varpool_mark_needed_node (vnode);
++	  vnode->externally_visible = true;
++	}
++    }
++}
++
+ /* Analyze the whole compilation unit once it is parsed completely.  */
+ 
+ void
+@@ -886,6 +953,7 @@
+   /* Keep track of already processed nodes when called multiple times for
+      intermodule optimization.  */
+   static struct cgraph_node *first_analyzed;
++  static struct cgraph_varpool_node *first_analyzed_var;
+ 
+   if (errorcount || sorrycount)
+     return;
+@@ -905,6 +973,7 @@
+     }
+ 
+   timevar_push (TV_CGRAPH);
++  process_function_and_variable_attributes (first_analyzed, first_analyzed_var);
+   cgraph_varpool_analyze_pending_decls ();
+   if (cgraph_dump_file)
+     {
+@@ -989,6 +1058,7 @@
+       dump_cgraph (cgraph_dump_file);
+     }
+   first_analyzed = cgraph_nodes;
++  first_analyzed_var = cgraph_varpool_nodes;
+   ggc_collect ();
+   timevar_pop (TV_CGRAPH);
+ }
+diff -urN gcc.orig/testsuite/gcc.dg/pr25795-1.c gcc/testsuite/gcc.dg/pr25795-1.c
+--- gcc.orig/testsuite/gcc.dg/pr25795-1.c	1970-01-01 01:00:00.000000000 +0100
++++ gcc/testsuite/gcc.dg/pr25795-1.c	2006-10-02 16:21:25.998388000 +0200
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O3 -fwhole-program" } */
++/* { dg-final { scan-assembler-not "mystr" } } */
++
++
++extern const char *mystr;       /* normally in a header */
++const char *mystr;
++main()
++{
++}
+diff -urN gcc.orig/testsuite/gcc.dg/pr25795.c gcc/testsuite/gcc.dg/pr25795.c
+--- gcc.orig/testsuite/gcc.dg/pr25795.c	1970-01-01 01:00:00.000000000 +0100
++++ gcc/testsuite/gcc.dg/pr25795.c	2006-10-02 16:21:25.998388000 +0200
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O3 -fwhole-program" } */
++/* { dg-final { scan-assembler "mystr" } } */
++
++
++extern const char *mystr;       /* normally in a header */
++const char *mystr __attribute__ ((externally_visible));
++main()
++{
++}
--- gcc-4.1-4.1.2.orig/debian/patches/netbsd-dynlinker.dpatch
+++ gcc-4.1-4.1.2/debian/patches/netbsd-dynlinker.dpatch
@@ -0,0 +1,47 @@
+#! /bin/sh -e
+ 
+# JB: Dynamic linker patches for netbsd.
+ 
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -ur src.orig/gcc/config/i386/netbsd-elf.h src/gcc/config/i386/netbsd-elf.h
+--- src.orig/gcc/config/i386/netbsd-elf.h	2002-03-01 23:38:15.000000000 +0000
++++ src/gcc/config/i386/netbsd-elf.h	2003-01-21 19:44:46.000000000 +0000
+@@ -35,7 +35,7 @@
+ 	%{!e*:-e __start}}}						\
+     %{!static:								\
+       %{rdynamic:-export-dynamic}					\
+-      %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}	\
++      %{!dynamic-linker:-dynamic-linker /lib/ld.elf_so}}		\
+     %{static:-static}}"
+ 
+ /* Names to predefine in the preprocessor for this target machine.  */
+diff -ur src.orig/gcc/config/netbsd-elf.h src/gcc/config/netbsd-elf.h
+--- src.orig/gcc/config/netbsd-elf.h	2002-01-22 04:23:02.000000000 +0000
++++ src/gcc/config/netbsd-elf.h	2003-01-21 19:44:27.000000000 +0000
+@@ -72,5 +72,5 @@
+ 	 %{!e*:-e __start}}}						\
+      %{!static:								\
+        %{rdynamic:-export-dynamic}					\
+-       %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}	\
++       %{!dynamic-linker:-dynamic-linker /lib/ld.elf_so}}		\
+      %{static:-static}}"
--- gcc-4.1-4.1.2.orig/debian/patches/pr26885-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr26885-doc.dpatch
@@ -0,0 +1,112 @@
+#! /bin/sh -e
+
+# DP: Proposed patch for PR driver/26885 (doc files)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Date: Tue, 2 May 2006 13:23:54 -0700
+
+gcc/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Makefile.in (GCC_OBJS): New.
+	(OBJS-common): Add opts-common.o.
+	(xgcc$(exeext)): Replace gcc.o with $(GCC_OBJS).
+	(cpp$(exeext)): Likewise.
+	(gcc.o): Also depend on opts.h.
+	(opts-common.o): New.
+
+	* common.opt (gcoff): Add Negative(gdwarf-2).
+	(gdwarf-2): Add Negative(gstabs).
+	(gstabs): Add Negative(gstabs+).
+	(gstabs+): Add Negative(gvms).
+	(gvms): Add Negative(gxcoff).
+	(gxcoff): Add Negative(gxcoff+).
+	(gxcoff+): Add Negative(gcoff).
+	* config/i386/i386.opt (m32): Add Negative(m64).
+	(m64): Add Negative(m32).
+
+	* doc/options.texi: Document the Negative option.
+
+	* gcc.c: Include "opts.h".
+	(main): Call prune_options after expandargv.
+
+	* optc-gen.awk: Generate common declarations for all flag
+	variables in options.c. Output the neg_index field.
+
+	* opts.c (find_opt): Moved to ...
+	* opts-common.c: Here. New file.
+
+	* opts.h (cl_option): Add a neg_index field.
+	(find_opt): New.
+	(prune_options): Likewise.
+
+gcc/cp/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in (GXX_OBJS): Replace gcc.o with $(GCC_OBJS).
+
+gcc/fortran/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in (GFORTRAN_D_OBJS): Replace gcc.o with
+	$(GCC_OBJS).
+
+gcc/java/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in ($(GCJ)$(exeext)): Replace gcc.o with
+	$(GCC_OBJS).
+
+gcc/treelang/
+
+2006-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR driver/26885
+	* Make-lang.in (gtreelang$(exeext)): Replace gcc.o with
+	$(GCC_OBJS).
+
+--- gcc/doc/options.texi.orig	2006-05-07 13:23:52.294265896 +0200
++++ gcc/doc/options.texi	2006-05-07 13:24:36.553537464 +0200
+@@ -100,6 +100,12 @@
+ ``f'', ``W'' or ``m'' are assumed to have a ``no-'' form unless this
+ property is used.
+ 
++@item Negative(@var{othername})
++The option will turn off another option @var{othername}, which is the
++the option name with the leading ``-'' removed.  This chain action will
++propagate through the @code{Negative} property of the option to be
++turned off.
++
+ @item Joined
+ @itemx Separate
+ The option takes a mandatory argument.  @code{Joined} indicates
--- gcc-4.1-4.1.2.orig/debian/patches/cross-fixes.dpatch
+++ gcc-4.1-4.1.2/debian/patches/cross-fixes.dpatch
@@ -0,0 +1,146 @@
+#! /bin/sh -e
+
+# DP: Fix the linker error when creating an xcc for ia64
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        cd ${dir}gcc && autoconf
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.orig/gcc/config/ia64/fde-glibc.c gcc-4.0.0.new/gcc/config/ia64/fde-glibc.c
+--- gcc-4.0.0.orig/gcc/config/ia64/fde-glibc.c	2003-11-02 18:35:20.000000000 +0100
++++ gcc-4.0.0.new/gcc/config/ia64/fde-glibc.c	2005-05-15 02:42:27.675247674 +0200
+@@ -31,6 +31,7 @@
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
++#ifndef inhibit_libc
+ #include "config.h"
+ #include <stddef.h>
+ #include <stdlib.h>
+@@ -162,3 +163,5 @@ _Unwind_FindTableEntry (void *pc, unsign
+ 
+   return data.ret;
+ }
++
++#endif
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.orig/gcc/config/ia64/unwind-ia64.c gcc-4.0.0.new/gcc/config/ia64/unwind-ia64.c
+--- gcc-4.0.0.orig/gcc/config/ia64/unwind-ia64.c	2005-04-06 05:50:36.000000000 +0200
++++ gcc-4.0.0.new/gcc/config/ia64/unwind-ia64.c	2005-05-15 02:43:10.842199954 +0200
+@@ -30,7 +30,7 @@
+    This exception does not however invalidate any other reasons why
+    the executable file might be covered by the GNU General Public License.  */
+ 
+-
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "coretypes.h"
+@@ -2404,3 +2404,4 @@ alias (_Unwind_SetIP);
+ #endif
+ 
+ #endif
++#endif
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.orig/gcc/config/pa/linux-unwind.h gcc-4.0.0.new/gcc/config/pa/linux-unwind.h
+--- gcc-4.0.0.orig/gcc/config/pa/linux-unwind.h	2005-02-11 02:46:20.000000000 +0100
++++ gcc-4.0.0.new/gcc/config/pa/linux-unwind.h	2005-05-15 02:37:02.000000000 +0200
+@@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA.  */
+ /* Do code reading to identify a signal frame, and set the frame
+    state data appropriately.  See unwind-dw2.c for the structs.  */
+ 
++#ifndef inhibit_libc
+ #include <signal.h>
+ #include <sys/ucontext.h>
+ 
+@@ -136,3 +137,5 @@ pa32_fallback_frame_state (struct _Unwin
+   fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
+   return _URC_NO_REASON;
+ }
++
++#endif
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.orig/gcc/config/sh/linux-unwind.h gcc-4.0.0.new/gcc/config/sh/linux-unwind.h
+--- gcc-4.0.0.orig/gcc/config/sh/linux-unwind.h	2005-02-11 02:12:57.000000000 +0100
++++ gcc-4.0.0.new/gcc/config/sh/linux-unwind.h	2005-05-15 02:44:31.000000000 +0200
+@@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA.  */
+ /* Do code reading to identify a signal frame, and set the frame
+    state data appropriately.  See unwind-dw2.c for the structs.  */
+ 
++#ifndef inhibit_libc
+ #include <signal.h>
+ #include <sys/ucontext.h>
+ #include "insn-constants.h"
+@@ -169,3 +170,4 @@ sh_fallback_frame_state (struct _Unwind_
+   return _URC_NO_REASON;
+ }
+ #endif /* defined (__SH5__) */
++#endif
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.orig/gcc/unwind-compat.c gcc-4.0.0.new/gcc/unwind-compat.c
+--- gcc-4.0.0.orig/gcc/unwind-compat.c	2004-09-04 02:15:40.000000000 +0200
++++ gcc-4.0.0.new/gcc/unwind-compat.c	2005-05-15 02:41:17.000000000 +0200
+@@ -29,6 +29,7 @@
+    02110-1301, USA.  */
+ 
+ #if defined (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS)
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "unwind.h"
+@@ -204,3 +205,4 @@ _Unwind_SetIP (struct _Unwind_Context *c
+ }
+ symver (_Unwind_SetIP, GCC_3.0);
+ #endif
++#endif
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.orig/gcc/unwind-generic.h gcc-4.0.0.new/gcc/unwind-generic.h
+--- gcc-4.0.0.orig/gcc/unwind-generic.h	2004-11-30 09:15:39.000000000 +0100
++++ gcc-4.0.0.new/gcc/unwind-generic.h	2005-05-15 02:38:33.000000000 +0200
+@@ -202,6 +202,7 @@ extern _Unwind_Reason_Code _Unwind_SjLj_
+    compatible with the standard ABI for IA-64, we inline these.  */
+ 
+ #ifdef __ia64__
++#ifndef inhibit_libc
+ #include <stdlib.h>
+ 
+ static inline _Unwind_Ptr
+@@ -220,6 +221,7 @@ _Unwind_GetTextRelBase (struct _Unwind_C
+ 
+ /* @@@ Retrieve the Backing Store Pointer of the given context.  */
+ extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
++#endif
+ #else
+ extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
+ extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
+diff -NurpP -x '*.orig' -x '*.libc' gcc-4.0.0.new/gcc/config/alpha/linux-unwind.h gcc-4.0.0.new2/gcc/config/alpha/linux-unwind.h
+--- gcc-4.0.0.new/gcc/config/alpha/linux-unwind.h	2005-02-11 02:12:54.000000000 +0100
++++ gcc-4.0.0.new2/gcc/config/alpha/linux-unwind.h	2005-05-15 05:09:16.000000000 +0200
+@@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA.  */
+ /* Do code reading to identify a signal frame, and set the frame
+    state data appropriately.  See unwind-dw2.c for the structs.  */
+ 
++#ifndef inhibit_libc
+ #include <signal.h>
+ #include <sys/ucontext.h>
+ 
+@@ -80,3 +81,5 @@ alpha_fallback_frame_state (struct _Unwi
+   fs->retaddr_column = 64;
+   return _URC_NO_REASON;
+ }
++
++#endif
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-pascal-lang.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-pascal-lang.dpatch
@@ -0,0 +1,726 @@
+#! /bin/sh -e
+
+# DP: Add pascal options and specs for the gcc driver.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	ln -sf p ${dir}/gcc/pascal
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN gcc.orig/p/lang.opt gcc/p/lang.opt
+--- gcc.orig/p/lang.opt	1970-01-01 01:00:00.000000000 +0100
++++ gcc/p/lang.opt	2006-03-03 20:17:49.000000000 +0100
+@@ -0,0 +1,635 @@
++; This file was generated automatically by mk-lang_opt.
++; DO NOT CHANGE THIS FILE MANUALLY!
++;
++; Options for the Pascal front end.
++; Copyright (C) 2004-2006 Free Software Foundation, Inc.
++;
++; This file is part of GNU Pascal.
++;
++; GNU Pascal is free software; you can redistribute it and/or modify
++; it under the terms of the GNU General Public License as published by
++; the Free Software Foundation; either version 2, or (at your option)
++; any later version.
++;
++; GNU Pascal 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.  See the
++; GNU General Public License for more details.
++;
++; You should have received a copy of the GNU General Public License
++; along with GNU Pascal; see the file COPYING.  If not, write to the
++; Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++; 02111-1307, USA.
++
++; See c.opt for a description of this file's format.
++
++; Please try to keep this file in ASCII collating order.
++
++Language
++Pascal
++
++A
++Pascal
++Ignored
++
++D
++Pascal Joined Separate
++-D<macro>[=<val>]       Define a <macro> with <val> as its value.  If just <macro> is given, <val> is taken to be 1
++
++E
++Pascal
++Preprocess only
++
++H
++Pascal
++Print the name of include files as they are used
++
++I
++Pascal Joined Separate
++-I <dir>        Add <dir> to the end of the main include path.
++
++M
++Pascal
++Generate make dependencies
++
++MM
++Pascal
++Like -M but ignore system header files
++
++P
++Pascal
++Do not generate #line directives
++
++U
++Pascal Joined Separate
++-U<macro>       Undefine <macro>
++
++Wabsolute
++Pascal
++Warn about variables at absolute adresses and `absolute' variable with non-constant addresses (default)
++
++Wall
++Pascal
++
++
++Wcomment
++Pascal
++
++
++Wdynamic-arrays
++Pascal
++Warn about arrays whose size is determined at run time (including array slices)
++
++Werror
++Pascal
++
++
++Wfloat-equal
++Pascal
++Warn about `=' and `<>' comparisons of real numbers
++
++Widentifier-case
++Pascal
++Warn about an identifier written with varying case
++
++Widentifier-case-local
++Pascal
++Warn about an identifier written with varying case within one program/module/unit
++
++Wimplicit-abstract
++Pascal
++Warn when an object type not declared `abstract' contains an abstract method (default)
++
++Wimplicit-io
++Pascal
++Warn when `Input' or `Output' are used implicitly
++
++Winherited-abstract
++Pascal
++Warn when an abstract object type inherits from a non-abstract one (default)
++
++Winterface-file-name
++Pascal
++Warn when a unit/module interface differs from the file name
++
++Wlocal-external
++Pascal
++Warn about local `external' declarations
++
++Wmissing-declarations
++Pascal
++
++
++Wmissing-prototypes
++Pascal
++
++
++Wmixed-comments
++Pascal
++Warn about mixed comments like `{ ... *)'
++
++Wnear-far
++Pascal
++Warn about use of useless `near' or `far' directives (default)
++
++Wnested-comments
++Pascal
++Warn about nested comments like `{ { } }'
++
++Wobject-assignment
++Pascal
++Warn when when assigning objects or declaring them as value parameters or function results (default)
++
++Wpointer-arith
++Pascal
++
++
++Wsemicolon
++Pascal
++Warn about a semicolon after `then', `else' or `do' (default)
++
++Wtyped-const
++Pascal
++Warn about misuse of typed constants as initialized variables (default)
++
++Wundef
++Pascal
++
++
++Wunderscore
++Pascal
++Warn about double/leading/trailing underscores in identifiers
++
++Wwarnings
++Pascal
++Enable warnings (same as `{$W+}')
++
++Wwrite-strings
++Pascal
++
++
++famtmpfile=
++Pascal Joined RejectNegative
++(Internal switch used for automake)
++
++fassertions
++Pascal
++Enable assertion checking (default)
++
++fautobuild
++Pascal
++Automatically compile all units/modules/`{$L ...}' files and link the object files provided
++
++fautolink
++Pascal
++Automatically link object files provided by units/modules or `{$L ...}' (default)
++
++fautomake
++Pascal
++Automatically compile changed units/modules/`{$L ...}' files and link the object files provided
++
++fautomake-g++=
++Pascal Joined RejectNegative
++Set the C++ compiler invoked by automake
++
++fautomake-gcc=
++Pascal Joined RejectNegative
++Set the C compiler invoked by automake
++
++fautomake-gpc=
++Pascal Joined RejectNegative
++Set the Pascal compiler invoked by automake
++
++fbig-endian
++Pascal RejectNegative
++Tell GPC that the system is big-endian (for those targets where it can vary)
++
++fborland-objects
++Pascal RejectNegative
++Choose Borland object model
++
++fborland-pascal
++Pascal RejectNegative
++Try to emulate Borland Pascal, version 7.0
++
++fcase-value-checking
++Pascal
++Cause a runtime error if a `case' matches no branch (default in ISO Pascal modes)
++
++fcidefine=
++Pascal Joined RejectNegative
++Define a case-insensitive macro
++
++fclassic-pascal
++Pascal RejectNegative
++Reject anything besides ISO 7185 Pascal
++
++fclassic-pascal-level-0
++Pascal RejectNegative
++Reject conformant arrays and anything besides ISO 7185 Pascal
++
++fcsdefine=
++Pascal Joined RejectNegative
++Define a case-sensitive macro
++
++fcstrings-as-strings
++Pascal
++Treat CStrings as strings
++
++fdebug-automake
++Pascal RejectNegative
++(For GPC developers.) Give additional information about the actions of automake
++
++fdebug-gpi
++Pascal RejectNegative
++(For GPC developers.) Show what is written to and read from GPI files (huge output!)
++
++fdebug-source
++Pascal
++Output the source while it is processed to standard error
++
++fdebug-tree=
++Pascal Joined RejectNegative
++(For GPC developers.) Show the internal representation of a given tree node (name or address)
++
++fdelphi
++Pascal RejectNegative
++Try to emulate Borland Pascal, version 7.0, with some Delphi extensions
++
++fdelphi-comments
++Pascal
++Allow Delphi style `//' comments (default)
++
++fdelphi-method-shadowing
++Pascal
++Redefining methods silently shadows old definition (default in `--delphi')
++
++fdisable-debug-info
++Pascal RejectNegative
++Inhibit `-g' options (temporary work-around, this option may disappear in the future)
++
++fdisable-default-paths
++Pascal RejectNegative
++Do not add a default path to the unit and object path
++
++fdisable-keyword=
++Pascal Joined RejectNegative
++Disable a keyword, independently of dialect defaults
++
++fdisable-predefined-identifier=
++Pascal Joined RejectNegative
++Disable a predefined identifier, independently of dialect defaults
++
++fdouble-quoted-strings
++Pascal
++Allow strings enclosed in \"\" (default)
++
++fenable-keyword=
++Pascal Joined RejectNegative
++Enable a keyword, independently of dialect defaults
++
++fenable-predefined-identifier=
++Pascal Joined RejectNegative
++Enable a predefined identifier, independently of dialect defaults
++
++fexact-compare-strings
++Pascal
++Do not blank-pad strings for comparisons
++
++fexecutable-file-name
++Pascal RejectNegative
++Derive output file name from main source file name
++
++fexecutable-file-name=
++Pascal Joined RejectNegative
++Specify the name of the output file
++
++fexecutable-path
++Pascal
++`--no-executable-path': Create the executable file in the directory where the main source is (default)
++
++fexecutable-path=
++Pascal Joined RejectNegative
++Path where to create the executable file
++
++fextended-pascal
++Pascal RejectNegative
++Reject anything besides ISO 10206 Extended Pascal
++
++fextended-syntax
++Pascal
++same as `--ignore-function-results --pointer-arithmetic --cstrings-as-strings -Wno-absolute' (same as `{$X+}')
++
++ffield-widths
++Pascal
++Use default field widths in write statements
++
++ffield-widths=
++Pascal Joined RejectNegative
++Specify as a colon-separated list the default field widths in write statements for Integer, Real, Boolean, LongInt, LongReal
++
++fgnu-objects
++Pascal RejectNegative
++Reset object model to default state
++
++fgnu-pascal
++Pascal RejectNegative
++Undo the effect of previous dialect options, allow all features again
++
++fgpc-main=
++Pascal Joined RejectNegative
++External name for the program's entry point (default: `main')
++
++fgpi-destination-path=
++Pascal Joined RejectNegative
++(Internal switch used for automake)
++
++fignore-function-results
++Pascal
++Do not complain when a function is called like a procedure
++
++fignore-garbage-after-dot
++Pascal
++Ignore anything after the terminating `.' (default in `--borland-pascal')
++
++fignore-packed
++Pascal
++Ignore `packed' in the source code (default in `--borland-pascal')
++
++fimplementation-only
++Pascal RejectNegative
++Do not produce a GPI file; only compile the implementation part
++
++fimplicit-result
++Pascal
++Enable implicit `Result' for functions (default only in `--delphi')
++
++finit-modules=
++Pascal Joined RejectNegative
++Initialize the named modules in addition to those imported regularly; kind of a kludge
++
++finterface-only
++Pascal RejectNegative
++Compile only the interface part of a unit/module and exit (creates `.gpi' file, no `.o' file)
++
++fio-checking
++Pascal
++Check I/O operations automatically (same as `{$I+}') (default)
++
++fiso-goto-restrictions
++Pascal
++Do not allow jumps into structured instructions (default)
++
++flittle-endian
++Pascal RejectNegative
++Tell GPC that the system is little-endian (for those targets where it can vary)
++
++flongjmp-all-nonlocal-labels
++Pascal
++Use `longjmp' for all nonlocal labels (default for Darwin/PPC)
++
++fmac-objects
++Pascal RejectNegative
++Choose Mac object model
++
++fmac-pascal
++Pascal RejectNegative
++Support (some features of) traditional Macintosh Pascal compilers
++
++fmacros
++Pascal
++Expand macros (default except with `--ucsd-pascal', `--borland-pascal' or `--delphi')
++
++fmaximum-field-alignment=
++Pascal Joined RejectNegative
++Set the maximum field alignment in bits if `pack-struct' is in effect
++
++fmethods-always-virtual
++Pascal
++Make all methods virtual (default in `--mac-pascal')
++
++fmixed-comments
++Pascal
++Allow comments like `{ ... *)' as required in ISO Pascal (default in ISO 7185/10206 Pascal mode)
++
++fnested-comments
++Pascal
++Allow nested comments like `{ { } }' and `(* (* *) *)'
++
++fnonlocal-exit
++Pascal
++Allow non-local `Exit' statements (default in `--ucsd-pascal' and `--mac-pascal')
++
++fobject-checking
++Pascal
++Check for valid objects on virtual method calls (default)
++
++fobject-destination-path
++Pascal
++`--no-object-destination-path': Create additional object files (e.g. of C files, not Pascal units) in the current directory (default)
++
++fobject-destination-path=
++Pascal Joined RejectNegative
++Path where to create additional object files (e.g. of C files, not Pascal units)
++
++fobject-pascal
++Pascal RejectNegative
++Reject anything besides (the implemented parts of) ANSI draft Object Pascal
++
++fobject-path
++Pascal
++`--no-object-path': Forget about directories where to look for additional object (and source) files
++
++fobject-path=
++Pascal Joined RejectNegative
++Directories where to look for additional object (and source) files
++
++fobjects-are-references
++Pascal
++Turn objects into references (default in `--mac-pascal')
++
++fobjects-require-override
++Pascal
++Require override directive for objects (default in `--mac-pascal')
++
++fooe-objects
++Pascal RejectNegative
++Choose OOE object model
++
++fpascal-sc
++Pascal RejectNegative
++Be strict about the implemented Pascal-SC extensions
++
++fpedantic
++Pascal
++Reject everything not allowed in some dialect, e.g. redefinition of its keywords
++
++fpointer-arithmetic
++Pascal
++Enable pointer arithmetic
++
++fpointer-checking
++Pascal
++Validate pointers before dereferencing
++
++fpointer-checking-user-defined
++Pascal
++Use user-defined procedure for validating pointers
++
++fpreprocessed
++Pascal RejectNegative
++Treat the input file as already preprocessed
++
++fprint-needed-options
++Pascal RejectNegative
++Print the needed options
++
++fprogress-bar
++Pascal
++Output number of processed lines while compiling
++
++fprogress-messages
++Pascal
++Output source file names and line numbers while compiling
++
++fpropagate-units
++Pascal
++Automalically export all imported identifiers from a unit
++
++frange-and-object-checking
++Pascal
++Same as `--range-checking --object-checking', same as `{$R+}'
++
++frange-checking
++Pascal
++Do automatic range checks (default)
++
++fread-base-specifier
++Pascal
++In read statements, allow input base specifier `n#' (default)
++
++fread-hex
++Pascal
++In read statements, allow hexadecimal input with `$' (default)
++
++fread-white-space
++Pascal
++In read statements, require whitespace after numbers
++
++fsetlimit=
++Pascal Joined RejectNegative
++Define the range for `set of Integer' etc.
++
++fshort-circuit
++Pascal
++Guarantee short-circuit Boolean evaluation (default; same as `{$B-}')
++
++fstack-checking
++Pascal
++Enable stack checking (same as `{$S+}')
++
++fstandard-pascal
++Pascal RejectNegative
++Synonym for `--classic-pascal'
++
++fstandard-pascal-level-0
++Pascal RejectNegative
++Synonym for `--classic-pascal-level-0'
++
++fsun-pascal
++Pascal RejectNegative
++Support (a few features of) Sun Pascal
++
++ftransparent-file-names
++Pascal
++Derive external file names from variable names
++
++ftruncate-strings
++Pascal
++Truncate strings being assigned to other strings of too short capacity
++
++ftyped-address
++Pascal
++Make the result of the address operator typed (same as `{$T+}', default)
++
++fucsd-pascal
++Pascal RejectNegative
++Try to emulate UCSD Pascal
++
++funit-destination-path
++Pascal
++`--no-unit-destination-path': Create object and GPI files of Pascal units in the current directory (default)
++
++funit-destination-path=
++Pascal Joined RejectNegative
++Path where to create object and GPI files of Pascal units
++
++funit-path
++Pascal
++`--no-unit-path': Forget about directories where to look for unit/module sources
++
++funit-path=
++Pascal Joined RejectNegative
++Directories where to look for unit/module sources
++
++fuses=
++Pascal Joined RejectNegative
++Add an implicit `uses' clause
++
++fvax-pascal
++Pascal RejectNegative
++Support (a few features of) VAX Pascal
++
++fwrite-capital-exponent
++Pascal
++Write real exponents with a capital `E'
++
++fwrite-clip-strings
++Pascal
++In write statements, truncate strings exceeding their field width (`Write (SomeLongString : 3)')
++
++fwrite-real-blank
++Pascal
++Output a blank in front of positive reals in exponential form (default)
++
++idirafter
++Pascal Joined Separate
++`-idirafter <dir>'    Add <dir> to the end of the system include path
++
++imacros
++Pascal Joined Separate
++-imacros <file> Accept definition of macros in <file>
++
++include
++Pascal Joined Separate
++-include <file> Include the contents of <file> before other files
++
++iprefix
++Pascal Joined Separate
++-iprefix <path> Specify <path> as a prefix for next two options
++
++isystem
++Pascal Joined Separate
++-isystem <dir>  Add <dir> to the start of the system include path
++
++iwithprefix
++Pascal Joined Separate
++-iwithprefix <dir>      Add <dir> to the end of the system include path
++
++iwithprefixbefore
++Pascal Joined Separate
++-iwithprefixbefore <dir>        Add <dir> to the end of the main include path
++
++nostdinc
++Pascal
++Do not search standard system include directories (those specified with -isystem will still be used)
++
++remap
++Pascal
++Remap file names when including files
++
++v
++Pascal
++Enable verbose output
++
++; This comment is to ensure we retain the blank line above.
+diff -urN gcc.orig/p/lang-specs.h gcc/p/lang-specs.h
+--- gcc.orig/p/lang-specs.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc/p/lang-specs.h	2006-03-25 02:53:09.000000000 +0100
+@@ -0,0 +1,46 @@
++/*Definitions for specs for Pascal.
++
++  Copyright (C) 1997-2006 Free Software Foundation, Inc.
++
++  Authors: Peter Gerwinski <peter@gerwinski.de>
++           Frank Heckenbach <frank@pascal.gnu.de>
++
++  This file is part of GNU Pascal.
++
++  GNU Pascal is free software; you can redistribute it and/or modify
++  it under the terms of the GNU General Public License as published
++  by the Free Software Foundation; either version 2, or (at your
++  option) any later version.
++
++  GNU Pascal 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. See the GNU
++  General Public License for more details.
++
++  You should have received a copy of the GNU General Public License
++  along with GNU Pascal; see the file COPYING. If not, write to the
++  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++  02111-1307, USA. */
++
++#include "p/p-version.h"
++
++/* This is the contribution to the `default_compilers' array for Pascal. */
++  {".pas", "@Pascal", 0},
++  {".p", "@Pascal", 0},
++  {".pp", "@Pascal", 0},
++  {".dpr", "@Pascal", 0},
++  {"@Pascal",
++    "gpc1 %{E:-E %{!M:%(cpp_unique_options) %1 %{m*} %{f*&W*&pedantic*} %{w} "
++    "%(cpp_debug_options) %{O*}}}"
++    "%{M:%(cpp_unique_options) %1 %{m*} %{f*&W*&pedantic*} %{w}" 
++    "%(cpp_debug_options) %{O*}}"
++    "%{!E:%{!M:%{save-temps:-E %(cpp_unique_options) %1 %{m*} "
++    "%{f*&W*&pedantic*} %{w}  %{O*} -o %b.i \n\
++     gpc1 -fpreprocessed %b.i} %{!save-temps:%(cpp_unique_options)} \
++     %(cc1_options)\
++    %{!famtmpfile*:%eInternal GPC problem: internal option `--amtmpfile' not given}\
++    %{!fsyntax-only:%(invoke_as)}}}", 0},
++  {"@Preprocessed-Pascal",
++   "%{!M:%{!MM:%{!E:gpc1 -fpreprocessed %i %(cc1_options)\
++    %{!famtmpfile*:%eInternal GPC problem: internal option `--amtmpfile' not given}\
++    %{!fsyntax-only:%(invoke_as)} }}}", 0},
+diff -urN gcc.orig/p/p-version.h gcc/p/p-version.h
+--- gcc.orig/p/p-version.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc/p/p-version.h	2006-03-25 02:53:09.000000000 +0100
+@@ -0,0 +1,7 @@
++/* Generated automatically by the Makefile.
++   DO NOT CHANGE THIS FILE MANUALLY! */
++
++#define GPC_MAJOR "2"
++#define GPC_MINOR "1"
++#define GPC_VERSION_STRING "20060325"
++#define GPC_RELEASE_STRING GPC_VERSION_STRING
--- gcc-4.1-4.1.2.orig/debian/patches/pr25524-doc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/pr25524-doc.dpatch
@@ -0,0 +1,113 @@
+#! /bin/sh -e
+
+# DP: Backport PR libstdc++/25524 from the trunk (doc files)
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+gcc:
+
+2006-01-20  Joseph S. Myers  <joseph@codesourcery.com>
+
+	PR libstdc++/25524
+	* cppdefault.h (struct default_include): Add multilib flag.
+	* cppdefault.c (cpp_include_defaults): Set it.
+	* c.opt (-imultilib): New option.
+	* c-opts.c (imultilib): New.
+	(c_common_handle_option): Handle -imultilib.
+	(c_common_post_options): Likewise.
+	* c-incpath.c (add_standard_paths, register_include_chains):
+	Likewise.
+	* c-incpath.h (register_include_chains): Add extra parameter.
+	* gcc.c (do_spec_1): Generate -imultilib option.
+	(The Specs Language): Update %I description.
+	(process_command): Update copyright notice.
+	* doc/cppopts.texi (-imultilib): Document.
+	* doc/invoke.texi (-imultilib): Include in option summary.
+	(%I): Update specs documentation.
+
+libstdc++-v3:
+
+2006-01-20  Joseph S. Myers  <joseph@codesourcery.com>
+
+	PR libstdc++/25524
+	* include/Makefile.am: Install host-specific headers in multilib
+	subdirectory.
+	* include/Makefile.in: Regenerate.
+
+Index: gcc/doc/cppopts.texi
+===================================================================
+--- gcc/doc/cppopts.texi	(revision 114541)
++++ gcc/doc/cppopts.texi	(working copy)
+@@ -1,4 +1,4 @@
+-@c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005
++@c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ @c Free Software Foundation, Inc.
+ @c This is part of the CPP and GCC manuals.
+ @c For copying conditions, see the file gcc.texi.
+@@ -483,6 +483,11 @@
+ This option is like the @option{--sysroot} option, but applies only to
+ header files.  See the @option{--sysroot} option for more information.
+ 
++@item -imultilib @var{dir}
++@opindex imultilib
++Use @var{dir} as a subdirectory of the directory containing
++target-specific C++ headers.
++
+ @item -isystem @var{dir}
+ @opindex isystem
+ Search @var{dir} for header files, after all directories specified by
+Index: gcc/doc/invoke.texi
+===================================================================
+--- gcc/doc/invoke.texi	(revision 114541)
++++ gcc/doc/invoke.texi	(working copy)
+@@ -5,8 +5,8 @@
+ 
+ @ignore
+ @c man begin COPYRIGHT
+-Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
+-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
++1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2 or
+@@ -352,7 +352,7 @@
+ -include @var{file}  -imacros @var{file} @gol
+ -iprefix @var{file}  -iwithprefix @var{dir} @gol
+ -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
+--isysroot @var{dir} @gol
++-imultilib @var{dir} -isysroot @var{dir} @gol
+ -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
+ -P  -fworking-directory  -remap @gol
+ -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
+@@ -6800,9 +6800,9 @@
+ 
+ @item %I
+ Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
+-@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and
++@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
+ @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
+-as necessary.
++and @option{-imultilib} as necessary.
+ 
+ @item %s
+ Current argument is the name of a library or startup file of some sort.
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-dwarf3.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-dwarf3.dpatch
@@ -0,0 +1,50 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: emit correct dwarf info for cfa offset and register with -fomit-frame-pointer
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+ gcc/config/m68k/m68k.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.c
++++ gcc-4.1/gcc/config/m68k/m68k.c
+@@ -604,10 +604,12 @@ m68k_output_function_prologue (FILE *str
+ 
+       if (dwarf2out_do_frame ())
+ 	{
+-	  cfa_offset += current_frame.size + 4;
++	  cfa_offset += current_frame.size;
+ 	  dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);
+ 	}
+     } /* !frame_pointer_needed */
++  else if (dwarf2out_do_frame ())
++    dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);
+ 
+   if (current_frame.fpu_mask)
+     {
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-autoinc.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-autoinc.dpatch
@@ -0,0 +1,160 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: recognize a few more autoinc possibilities
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# append the patch here and adjust the -p? flag in the patch calls.
+
+---
+ gcc/flow.c |   55 +++++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 45 insertions(+), 10 deletions(-)
+
+Index: gcc-4.1/gcc/flow.c
+===================================================================
+--- gcc-4.1.orig/gcc/flow.c
++++ gcc-4.1/gcc/flow.c
+@@ -1766,7 +1766,6 @@ propagate_one_insn (struct propagate_blo
+ 	&& REG_P (SET_DEST (x))
+ 	&& (GET_CODE (SET_SRC (x)) == PLUS
+ 	    || GET_CODE (SET_SRC (x)) == MINUS)
+-	&& XEXP (SET_SRC (x), 0) == SET_DEST (x)
+ 	&& GET_CODE (XEXP (SET_SRC (x), 1)) == CONST_INT
+ 	/* Ok, look for a following memory ref we can combine with.
+ 	   If one is found, change the memory ref to a PRE_INC
+@@ -3428,13 +3427,25 @@ attempt_auto_inc (struct propagate_block
+   rtx set = single_set (incr);
+   rtx q = SET_DEST (set);
+   rtx y = SET_SRC (set);
+-  int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
++  rtx *loc = &SET_SRC (set);
+   int changed;
+ 
+   /* Make sure this reg appears only once in this insn.  */
+   if (count_occurrences (PATTERN (insn), incr_reg, 1) != 1)
+     return;
+ 
++  if (GET_CODE (y) != PLUS)
++    {
++      if (MEM_P (y) && GET_CODE (XEXP (y, 0)) == PLUS)
++	loc = &XEXP (y, 0);
++      else if (MEM_P (q) && GET_CODE (XEXP (q, 0)) == PLUS)
++	loc = &XEXP (q, 0);
++      else
++	abort();
++      y = *loc;
++      q = NULL_RTX;
++    }
++
+   if (dead_or_set_p (incr, incr_reg)
+       /* Mustn't autoinc an eliminable register.  */
+       && (regno >= FIRST_PSEUDO_REGISTER
+@@ -3446,7 +3457,7 @@ attempt_auto_inc (struct propagate_block
+       if (! validate_change (insn, &XEXP (mem, 0), inc, 0))
+ 	return;
+     }
+-  else if (REG_P (q)
++  else if (q && REG_P (q)
+ 	   /* PREV_INSN used here to check the semi-open interval
+ 	      [insn,incr).  */
+ 	   && ! reg_used_between_p (q,  PREV_INSN (insn), incr)
+@@ -3461,6 +3472,7 @@ attempt_auto_inc (struct propagate_block
+ 	 Change it to q = p, ...*q..., q = q+size.
+ 	 Then fall into the usual case.  */
+       rtx insns, temp;
++      int opnum = XEXP (y, 0) == incr_reg ? 0 : 1;
+ 
+       start_sequence ();
+       emit_move_insn (q, incr_reg);
+@@ -3533,13 +3545,13 @@ attempt_auto_inc (struct propagate_block
+ 
+   /* Modify the old increment-insn to simply copy
+      the already-incremented value of our register.  */
+-  changed = validate_change (incr, &SET_SRC (set), incr_reg, 0);
++  changed = validate_change (incr, loc, incr_reg, 0);
+   gcc_assert (changed);
+ 
+   /* If that makes it a no-op (copying the register into itself) delete
+      it so it won't appear to be a "use" and a "set" of this
+      register.  */
+-  if (REGNO (SET_DEST (set)) == REGNO (incr_reg))
++  if (q && REGNO (q) == REGNO (incr_reg))
+     {
+       /* If the original source was dead, it's dead now.  */
+       rtx note;
+@@ -3613,7 +3625,22 @@ find_auto_inc (struct propagate_block_in
+   y = SET_SRC (set);
+ 
+   if (GET_CODE (y) != PLUS)
+-    return;
++    {
++      if (MEM_P (y) && GET_CODE (XEXP (y, 0)) == PLUS)
++	{
++	  if (reg_overlap_mentioned_p (addr, SET_DEST (set)))
++	    return;
++	  y = XEXP (y, 0);
++	}
++      else
++	{
++	  y = SET_DEST (set);
++	  if (!MEM_P (y) || GET_CODE (XEXP (y, 0)) != PLUS
++	      || reg_overlap_mentioned_p (addr, SET_SRC (set)))
++	    return;
++	  y = XEXP (y, 0);
++	}
++    }
+ 
+   if (REG_P (XEXP (y, 0)) && REGNO (XEXP (y, 0)) == REGNO (addr))
+     inc_val = XEXP (y, 1);
+@@ -4172,10 +4199,6 @@ try_pre_increment_1 (struct propagate_bl
+       && ! dead_or_set_p (y, SET_DEST (x))
+       && try_pre_increment (y, SET_DEST (x), amount))
+     {
+-      /* We have found a suitable auto-increment and already changed
+-	 insn Y to do it.  So flush this increment instruction.  */
+-      propagate_block_delete_insn (insn);
+-
+       /* Count a reference to this reg for the increment insn we are
+ 	 deleting.  When a reg is incremented, spilling it is worse,
+ 	 so we want to make that less likely.  */
+@@ -4185,6 +4208,18 @@ try_pre_increment_1 (struct propagate_bl
+ 	  REG_N_SETS (regno)++;
+ 	}
+ 
++      if (XEXP (SET_SRC (x), 0) != SET_DEST (x))
++	{
++	  int change;
++	  change = validate_change (insn, &SET_SRC (x), XEXP (SET_SRC (x), 0), 0);
++	  gcc_assert(change);
++	  return 0;
++	}
++
++      /* We have found a suitable auto-increment and already changed
++	 insn Y to do it.  So flush this increment instruction.  */
++      propagate_block_delete_insn (insn);
++
+       /* Flush any remembered memories depending on the value of
+ 	 the incremented register.  */
+       invalidate_mems_from_set (pbi, SET_DEST (x));
--- gcc-4.1-4.1.2.orig/debian/patches/arm-gij.dpatch
+++ gcc-4.1-4.1.2/debian/patches/arm-gij.dpatch
@@ -0,0 +1,37 @@
+#! /bin/sh -e
+
+# DP: Enable gij interpreter on arm
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- src/libjava/configure.host.old	2005-12-31 16:06:00.900551776 +0000
++++ src/libjava/configure.host	2005-12-31 16:06:25.879754360 +0000
+@@ -98,6 +98,9 @@
+ 	enable_hash_synchronization_default=yes
+ 	slow_pthread_self=yes
+ 	;;
++  arm*-*)
++	libgcj_interpreter=yes
++	;;
+   x86_64-*)
+ 	sysdeps_dir=x86-64
+ 	libgcj_flags="${libgcj_flags} -ffloat-store -fno-omit-frame-pointer"
--- gcc-4.1-4.1.2.orig/debian/patches/deb-protoize.dpatch
+++ gcc-4.1-4.1.2/debian/patches/deb-protoize.dpatch
@@ -0,0 +1,48 @@
+#! /bin/sh -e
+
+# DP: build protoize/unprotoize binaries
+
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
+    -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1
+esac
+exit 0
+
+--- gcc/Makefile.in~	2005-09-03 11:20:25.000000000 +0000
++++ gcc/Makefile.in	2005-09-03 11:23:14.934905208 +0000
+@@ -123,7 +123,7 @@
+ 
+ # Selection of languages to be made.
+ CONFIG_LANGUAGES = @all_languages@
+-LANGUAGES = c gcov$(exeext) gcov-dump$(exeext) $(CONFIG_LANGUAGES)
++LANGUAGES = c proto gcov$(exeext) gcov-dump$(exeext) $(CONFIG_LANGUAGES)
+ 
+ # Selection of languages to be made during stage1 build.
+ BOOT_LANGUAGES = c @all_boot_languages@
+@@ -2708,7 +2708,7 @@
+    coretypes.h $(TM_H) Makefile version.h
+ 	(SHLIB_LINK='$(SHLIB_LINK)' \
+ 	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
+-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
++	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) -Wno-error \
+ 	  $(DRIVER_DEFINES) \
+ 	  $(srcdir)/protoize.c $(OUTPUT_OPTION))
+ 
+@@ -2716,7 +2716,7 @@
+    $(CONFIG_H) $(SYSTEM_H) Makefile version.h
+ 	(SHLIB_LINK='$(SHLIB_LINK)' \
+ 	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
+-	$(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
++	$(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) -Wno-error \
+ 	  $(DRIVER_DEFINES) \
+ 	  $(srcdir)/protoize.c $(OUTPUT_OPTION))
+ 
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-driver-extra-langs.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-driver-extra-langs.dpatch
@@ -0,0 +1,40 @@
+#! /bin/sh -e
+
+# DP: Add options and specs for languages that are not built from a source
+# DP: (but built from separate sources).
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+
+--- gcc/Makefile.in~	2006-07-11 14:03:25.865618000 +0200
++++ gcc/Makefile.in	2006-07-11 21:15:30.011548776 +0200
+@@ -424,8 +424,8 @@
+ xm_include_list=@xm_include_list@
+ xm_defines=@xm_defines@
+ lang_checks=check-gcc
+-lang_opt_files=@lang_opt_files@ $(srcdir)/c.opt $(srcdir)/common.opt
+-lang_specs_files=@lang_specs_files@
++lang_opt_files=$(sort @lang_opt_files@ $(foreach lang,$(debian_extra_langs),$(srcdir)/$(lang)/lang.opt)) $(srcdir)/c.opt $(srcdir)/common.opt
++lang_specs_files=$(sort @lang_specs_files@ $(foreach lang,$(debian_extra_langs),$(srcdir)/$(lang)/lang-specs.h))
+ lang_tree_files=@lang_tree_files@
+ target_cpu_default=@target_cpu_default@
+ GCC_THREAD_FILE=@thread_file@
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-bitfield-offset.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-bitfield-offset.dpatch
@@ -0,0 +1,192 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: only use constant offset for register bitfields
+# DP: (combine expects shifts, but does a rotate)
+# test case for invalid use of bitfield inst:
+#
+# #define XINT(v) (((int)(v) << 4) >> 4)
+# #define XUINT(v) (((unsigned)(v) << 4) >> 4)
+# 
+# int f(int v, int s)
+# {
+# 	return (XUINT(v) >> -XINT(s)) & 0x0fffffff;
+# }
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/config/m68k/m68k.md |   62 ++++++++++++++++++++++++------------------------
+ 1 file changed, 31 insertions(+), 31 deletions(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.md
++++ gcc-4.1/gcc/config/m68k/m68k.md
+@@ -4991,34 +4991,34 @@
+ ;; so that its address is reloaded.
+ 
+ (define_expand "extv"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "")
++  [(set (match_operand:SI 0 "register_operand" "")
+ 	(sign_extract:SI (match_operand:SI 1 "general_operand" "")
+-			 (match_operand:SI 2 "general_operand" "")
+-			 (match_operand:SI 3 "general_operand" "")))]
++			 (match_operand:SI 2 "const_int_operand" "")
++			 (match_operand:SI 3 "const_int_operand" "")))]
+   "TARGET_68020 && TARGET_BITFIELD"
+   "")
+ 
+ (define_insn ""
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
++  [(set (match_operand:SI 0 "register_operand" "=d")
+ 	(sign_extract:SI (match_operand:QI 1 "memory_operand" "o")
+-			 (match_operand:SI 2 "general_operand" "dn")
+-			 (match_operand:SI 3 "general_operand" "dn")))]
++			 (match_operand:SI 2 "nonmemory_operand" "dn")
++			 (match_operand:SI 3 "nonmemory_operand" "dn")))]
+   "TARGET_68020 && TARGET_BITFIELD"
+   "bfexts %1{%b3:%b2},%0")
+ 
+ (define_expand "extzv"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "")
++  [(set (match_operand:SI 0 "register_operand" "")
+ 	(zero_extract:SI (match_operand:SI 1 "general_operand" "")
+-			 (match_operand:SI 2 "general_operand" "")
+-			 (match_operand:SI 3 "general_operand" "")))]
++			 (match_operand:SI 2 "const_int_operand" "")
++			 (match_operand:SI 3 "const_int_operand" "")))]
+   "TARGET_68020 && TARGET_BITFIELD"
+   "")
+ 
+ (define_insn ""
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d")
+-	(zero_extract:SI (match_operand:QI 1 "memory_operand" "o,d")
+-			 (match_operand:SI 2 "general_operand" "dn,dn")
+-			 (match_operand:SI 3 "general_operand" "dn,dn")))]
++  [(set (match_operand:SI 0 "register_operand" "=d")
++	(zero_extract:SI (match_operand:QI 1 "memory_operand" "o")
++			 (match_operand:SI 2 "nonmemory_operand" "dn")
++			 (match_operand:SI 3 "nonmemory_operand" "dn")))]
+   "TARGET_68020 && TARGET_BITFIELD"
+ {
+   if (GET_CODE (operands[2]) == CONST_INT)
+@@ -5035,8 +5035,8 @@
+ 
+ (define_insn ""
+   [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o")
+-			 (match_operand:SI 1 "general_operand" "dn")
+-			 (match_operand:SI 2 "general_operand" "dn"))
++			 (match_operand:SI 1 "nonmemory_operand" "dn")
++			 (match_operand:SI 2 "nonmemory_operand" "dn"))
+         (xor:SI (zero_extract:SI (match_dup 0) (match_dup 1) (match_dup 2))
+ 		(match_operand 3 "const_int_operand" "n")))]
+   "TARGET_68020 && TARGET_BITFIELD
+@@ -5050,8 +5050,8 @@
+ 
+ (define_insn ""
+   [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o")
+-			 (match_operand:SI 1 "general_operand" "dn")
+-			 (match_operand:SI 2 "general_operand" "dn"))
++			 (match_operand:SI 1 "nonmemory_operand" "dn")
++			 (match_operand:SI 2 "nonmemory_operand" "dn"))
+ 	(const_int 0))]
+   "TARGET_68020 && TARGET_BITFIELD"
+ {
+@@ -5072,16 +5072,16 @@
+ 
+ (define_expand "insv"
+   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "")
+-			 (match_operand:SI 1 "general_operand" "")
+-			 (match_operand:SI 2 "general_operand" ""))
++			 (match_operand:SI 1 "const_int_operand" "")
++			 (match_operand:SI 2 "const_int_operand" ""))
+ 	(match_operand:SI 3 "register_operand" ""))]
+   "TARGET_68020 && TARGET_BITFIELD"
+   "")
+ 
+ (define_insn ""
+   [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o")
+-			 (match_operand:SI 1 "general_operand" "dn")
+-			 (match_operand:SI 2 "general_operand" "dn"))
++			 (match_operand:SI 1 "nonmemory_operand" "dn")
++			 (match_operand:SI 2 "nonmemory_operand" "dn"))
+ 	(match_operand:SI 3 "register_operand" "d"))]
+   "TARGET_68020 && TARGET_BITFIELD"
+   "bfins %3,%0{%b2:%b1}")
+@@ -5092,16 +5092,16 @@
+ (define_insn ""
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
+ 	(sign_extract:SI (match_operand:SI 1 "register_operand" "d")
+-			 (match_operand:SI 2 "general_operand" "dn")
+-			 (match_operand:SI 3 "general_operand" "dn")))]
++			 (match_operand:SI 2 "const_int_operand" "n")
++			 (match_operand:SI 3 "const_int_operand" "n")))]
+   "TARGET_68020 && TARGET_BITFIELD"
+   "bfexts %1{%b3:%b2},%0")
+ 
+ (define_insn ""
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
+ 	(zero_extract:SI (match_operand:SI 1 "register_operand" "d")
+-			 (match_operand:SI 2 "general_operand" "dn")
+-			 (match_operand:SI 3 "general_operand" "dn")))]
++			 (match_operand:SI 2 "const_int_operand" "n")
++			 (match_operand:SI 3 "const_int_operand" "n")))]
+   "TARGET_68020 && TARGET_BITFIELD"
+ {
+   if (GET_CODE (operands[2]) == CONST_INT)
+@@ -5118,8 +5118,8 @@
+ 
+ (define_insn ""
+   [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+d")
+-			 (match_operand:SI 1 "general_operand" "dn")
+-			 (match_operand:SI 2 "general_operand" "dn"))
++			 (match_operand:SI 1 "const_int_operand" "n")
++			 (match_operand:SI 2 "const_int_operand" "n"))
+ 	(const_int 0))]
+   "TARGET_68020 && TARGET_BITFIELD"
+ {
+@@ -5129,8 +5129,8 @@
+ 
+ (define_insn ""
+   [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+d")
+-			 (match_operand:SI 1 "general_operand" "dn")
+-			 (match_operand:SI 2 "general_operand" "dn"))
++			 (match_operand:SI 1 "const_int_operand" "n")
++			 (match_operand:SI 2 "const_int_operand" "n"))
+ 	(const_int -1))]
+   "TARGET_68020 && TARGET_BITFIELD"
+ {
+@@ -5140,8 +5140,8 @@
+ 
+ (define_insn ""
+   [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+d")
+-			 (match_operand:SI 1 "general_operand" "dn")
+-			 (match_operand:SI 2 "general_operand" "dn"))
++			 (match_operand:SI 1 "const_int_operand" "n")
++			 (match_operand:SI 2 "const_int_operand" "n"))
+ 	(match_operand:SI 3 "register_operand" "d"))]
+   "TARGET_68020 && TARGET_BITFIELD"
+ {
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-hash-style-both.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-hash-style-both.dpatch
@@ -0,0 +1,180 @@
+#! /bin/sh -e
+
+# DP: Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)
+# mips mipsel doesn't support GNU-style hashes
+# Link using --hash-style=both on hppa (untested)
+# unknown: arm, m68k
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2006-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
+	* config/i386/linux64.h (LINK_SPEC): Likewise.
+	* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+	* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+	LINK_OS_LINUX_SPEC64): Likewise.
+	* config/s390/linux.h (LINK_SPEC): Likewise.
+	* config/ia64/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+	LINK_ARCH64_SPEC): Likewise.
+	* config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+
+    ... and replace =gnu with =both
+
+--- gcc/config/rs6000/sysv4.h.jj	2006-07-11 10:54:00.000000000 +0200
++++ gcc/config/rs6000/sysv4.h	2006-07-11 12:51:39.000000000 +0200
+@@ -1039,7 +1039,7 @@ extern int fixuplabelno;
+ 
+ #define LINK_START_LINUX_SPEC ""
+ 
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
+--- gcc/config/rs6000/linux64.h.jj	2006-07-11 10:54:00.000000000 +0200
++++ gcc/config/rs6000/linux64.h	2006-07-11 12:52:14.000000000 +0200
+@@ -337,11 +337,11 @@ extern int dot_symbols;
+ #undef	LINK_OS_DEFAULT_SPEC
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
+ 
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib64/ld64.so.1}}}"
+ 
+--- gcc/config/alpha/linux-elf.h.jj	2006-07-11 10:54:01.000000000 +0200
++++ gcc/config/alpha/linux-elf.h	2006-07-11 12:53:48.000000000 +0200
+@@ -29,7 +29,7 @@ Boston, MA 02110-1301, USA.  */
+ 
+ #define ELF_DYNAMIC_LINKER	"/lib/ld-linux.so.2"
+ 
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}		\
++#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax}	\
+   %{O*:-O3} %{!O*:-O1}						\
+   %{shared:-shared}						\
+   %{!shared:							\
+--- gcc/config/s390/linux.h.jj	2006-07-11 10:54:02.000000000 +0200
++++ gcc/config/s390/linux.h	2006-07-11 12:52:39.000000000 +0200
+@@ -79,7 +79,7 @@ Software Foundation, 51 Franklin Street,
+ 
+ #undef  LINK_SPEC
+ #define LINK_SPEC \
+-  "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++  "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \
+    %{shared:-shared} \
+    %{!shared: \
+       %{static:-static} \
+--- gcc/config/sparc/linux.h.jj	2006-07-11 10:54:03.000000000 +0200
++++ gcc/config/sparc/linux.h	2006-07-11 12:54:16.000000000 +0200
+@@ -127,7 +127,7 @@ Boston, MA 02110-1301, USA.  */
+ /* If ELF is the default format, we should not use /lib/elf.  */
+ 
+ #undef  LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+   %{!mno-relax:%{!r:-relax}} \
+   %{!shared: \
+     %{!ibcs: \
+--- gcc/config/sparc/linux64.h.jj	2006-07-11 10:54:03.000000000 +0200
++++ gcc/config/sparc/linux64.h	2006-07-11 12:55:10.000000000 +0200
+@@ -157,7 +157,7 @@ Boston, MA 02110-1301, USA.  */
+   { "link_arch_default", LINK_ARCH_DEFAULT_SPEC },	  \
+   { "link_arch",	 LINK_ARCH_SPEC },
+     
+-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+@@ -166,7 +166,7 @@ Boston, MA 02110-1301, USA.  */
+         %{static:-static}}} \
+ "
+ 
+-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,/usr/lib64 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+@@ -247,7 +247,7 @@ Boston, MA 02110-1301, USA.  */
+ #else /* !SPARC_BI_ARCH */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
++#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,/usr/lib64 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- gcc/config/i386/linux.h.jj	2006-07-11 10:54:05.000000000 +0200
++++ gcc/config/i386/linux.h	2006-07-11 12:44:45.000000000 +0200
+@@ -113,7 +113,7 @@ Boston, MA 02110-1301, USA.  */
+   { "dynamic_linker", DYNAMIC_LINKER }
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- gcc/config/i386/linux64.h.jj	2006-07-11 10:54:04.000000000 +0200
++++ gcc/config/i386/linux64.h	2006-07-11 12:45:02.000000000 +0200
+@@ -55,7 +55,7 @@ Boston, MA 02110-1301, USA.  */
+    done.  */
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
++#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} --hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- gcc/config/ia64/linux.h.jj	2006-07-11 10:54:06.000000000 +0200
++++ gcc/config/ia64/linux.h	2006-07-11 12:48:19.000000000 +0200
+@@ -40,7 +40,7 @@ do {						\
+    linux.h file.  */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- gcc/config/pa/pa-linux.h~	2007-01-12 03:23:38.000000000 +0100
++++ gcc/config/pa/pa-linux.h	2007-04-18 11:28:41.000000000 +0200
+@@ -50,7 +50,7 @@
+    linux.h file.  */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-d-lang.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-d-lang.dpatch
@@ -0,0 +1,246 @@
+#! /bin/sh -e
+
+# DP: Add D options and specs for the gcc driver.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -urN gcc.orig/d/lang.opt gcc/d/lang.opt
+--- gcc.orig/d/lang.opt	1970-01-01 01:00:00.000000000 +0100
++++ gcc/d/lang.opt	2007-03-04 16:29:47.000000000 +0100
+@@ -0,0 +1,160 @@
++; GDC -- D front-end for GCC
++; Copyright (C) 2004 David Friedman
++;   
++; This program is free software; you can redistribute it and/or modify
++; it under the terms of the GNU General Public License as published by
++; the Free Software Foundation; either version 2 of the License, or
++; (at your option) any later version.
++; 
++; 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.  See the
++; GNU General Public License for more details.
++; 
++; You should have received a copy of the GNU General Public License
++; along with this program; if not, write to the Free Software
++; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++
++; This is used in GCC 3.4+
++
++Language
++D
++
++I
++D Joined Separate
++-I <dir>	Add <dir> to the end of the main include path.
++
++J
++D Joined Separate
++-J <dir>	Add <dir> to the end of the string import path.
++
++fdeprecated
++D
++Allow use of deprecated features
++
++fassert
++D
++Generate runtime code for assert()'s
++
++frelease
++D
++Compile release version
++
++funittest
++D
++Compile in unittest code
++
++fversion=
++D Joined RejectNegative
++-fversion=<level|ident> Compile in version code >= <level> or identified by <ident>
++
++fdebug=
++D Joined RejectNegative
++-fdebug,-fdebug=<level>,-fdebug=<ident> Compile in debug code, code <= level, or code identified by ident
++
++fdebug
++D
++Compile in debug code
++
++fdebug-c
++D
++With -g, generate C debug information for debugger compatibility
++
++fd-verbose
++D
++Print information about D language processing to stdout
++
++fd-version=1
++D RejectNegative
++Compile as D language version 1
++
++femit-templates=
++D Joined RejectNegative
++-femit-templates=[normal|private|all|none|auto]	Control template emission
++
++femit-templates
++D
++-femit-templates Emit templates code and data even if the linker cannot merge multiple copies
++
++nostdinc
++D
++Do not search standard system include directories
++
++fonly=
++D Joined RejectNegative
++Process all modules specified on the command line, but only generate code for the module specified by the argument.
++
++fod=
++D Joined RejectNegative
++-fod=<directory> Specify the object output directory. Note: this is actually a driver option; the backend ignores it.
++
++fop
++D
++Specify that the source file's parent directories should be appended to the object output directory. Note: this is actually a driver option; the backend ignores it.
++
++fintfc
++Generate D interface files
++
++fintfc-dir=
++D Joined RejectNegative
++-fintfc-dir=<dir> Write D interface files to directory <dir>
++
++fintfc-file=
++D Joined RejectNegative
++-fintfc-file=<filename> Write D interface file to <filename>
++
++fdoc
++D
++Generate documentation
++
++fdoc-dir=
++D Joined RejectNegative
++-fdoc-dir=<docdir> Write documentation file to docdir directory
++
++fdoc-file=
++D Joined RejectNegative
++-fdoc-file=<filename> Write documentation file to filename
++
++fdoc-inc=
++D Joined RejectNegative
++-fdoc-inc=<filename> Include a Ddoc macro file
++
++fmultilib-dir=
++D Joined RejectNegative
++-fmultilib-dir=<dir> Select header multilib subdirectory
++
++Wsign-compare
++D
++Warn about signed-unsigned comparisons
++
++fdump-source
++D RejectNegative
++Dump decoded UTF-8 text and source from HTML
++
++fbuiltin
++D
++Recognize built-in functions
++
++funsigned-char
++D
++Make \"char\" unsigned by default (silently ignored in D)
++
++fsigned-char
++D
++Make \"char\" signed by default (silently ignored in D)
++
++iprefix
++D Joined Separate
++-iprefix <path>	Specify <path> as a prefix for next two options
++
++isysroot
++D Joined Separate
++-isysroot <dir>	Set <dir> to be the system root directory
++
++isystem
++D Joined Separate
++-isystem <dir>	Add <dir> to the start of the system include path
++
++Wall
++D
++Enable most warning messages
+diff -urN gcc.orig/d/lang-specs.h gcc/d/lang-specs.h
+--- gcc.orig/d/lang-specs.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc/d/lang-specs.h	2007-03-04 16:36:44.000000000 +0100
+@@ -0,0 +1,53 @@
++/* GDC -- D front-end for GCC
++   Copyright (C) 2004 David Friedman
++   
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 2 of the License, or
++   (at your option) any later version.
++ 
++   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.  See the
++   GNU General Public License for more details.
++ 
++   You should have received a copy of the GNU General Public License
++   along with this program; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++*/
++
++#ifndef D_D_SPEC
++#define D_D_SPEC 0
++#endif
++
++/* %{!M} probably doesn't make sense because we would need
++   to do that -- -MD and -MMD doesn't sound like a plan for D.... */
++
++/* %(d_options) ? */
++
++#if GCC_SPEC_FORMAT_4
++#define D_D_SPEC_REST 0, 1, 0
++#else
++#define D_D_SPEC_REST 0
++#endif
++
++#if D_DRIVER_ONLY
++{".html", "@d", D_D_SPEC_REST },
++{".HTML", "@d", D_D_SPEC_REST },
++{".htm", "@d", D_D_SPEC_REST },
++{".HTM", "@d", D_D_SPEC_REST },
++{".xhtml", "@d", D_D_SPEC_REST },
++{".XHTML", "@d", D_D_SPEC_REST },
++{".d", "@d", D_D_SPEC_REST },
++{".D", "@d", D_D_SPEC_REST },
++{"@d",
++     "%{!E:cc1d %i %:d-all-sources() %(cc1_options) %I %N %{nostdinc*} %{+e*} %{I*} %{J*}\
++      %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", D_D_SPEC_REST },
++#else
++{".d", "@d", D_D_SPEC_REST },
++{".D", "@d", D_D_SPEC_REST },
++{"@d",
++     "%{!E:cc1d %i %(cc1_options) %I %N %{nostdinc*} %{+e*} %{I*} %{J*}\
++      %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", D_D_SPEC_REST },
++#endif
++
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-prevent-swap.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-prevent-swap.dpatch
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: don't swap operands during reloads
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/recog.c             |    1 +
+ 1 files changed, 1 insertions(+)
+
+Index: gcc-4.1/gcc/recog.c
+===================================================================
+--- gcc-4.1.orig/gcc/recog.c
++++ gcc-4.1/gcc/recog.c
+@@ -569,6 +569,7 @@ validate_replace_rtx_1 (rtx *loc, rtx fr
+      simplifications, as it is not our job.  */
+ 
+   if (SWAPPABLE_OPERANDS_P (x)
++      && !reload_in_progress
+       && swap_commutative_operands_p (XEXP (x, 0), XEXP (x, 1)))
+     {
+       validate_change (object, loc,
--- gcc-4.1-4.1.2.orig/debian/patches/gccbug-manpage.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gccbug-manpage.dpatch
@@ -0,0 +1,182 @@
+#! /bin/sh -e
+
+# DP: add gccbug(1) manpage
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2003-03-11  Matthias Klose  <doko@debian.org> 
+
+	* Makefile.in (generated-manpages): Add $(docdir)/gccbug.1.
+	($(docdir)/gccbug.1): Build from doc/bugreport.texi,
+	(maintainer-clean): Remove gccbug.1,
+	(install-man): Install gccbug.1.
+	* doc/bugreport.texi: Add manpage sections for gccbug(1).
+	(contributed by Omni Flux <josh at nebonet dot com>).
+	Do not document options possibly unsupported by a future BTS.
+	* doc/.cvsignore: Add gccbug.1.
+
+
+--- gcc/Makefile.in~	2003-03-02 13:49:32.000000000 +0100
++++ gcc/Makefile.in	2003-03-03 23:13:21.000000000 +0100
+@@ -2541,6 +2541,7 @@
+ 	$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi
+ 
+ generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 \
++	 $(docdir)/gccbug.1 \
+ 	 $(docdir)/gfdl.7 $(docdir)/gpl.7 $(docdir)/fsf-funding.7 \
+ 	 lang.generated-manpages
+ 
+@@ -2570,6 +2571,14 @@
+ 		(rm -f $(docdir)/gcc.1.T$$$$ && exit 1)
+ 	-rm -f gcc.pod
+ 
++$(docdir)/gccbug.1: $(docdir)/bugreport.texi
++	$(STAMP) $(docdir)/gccbug.1
++	-$(TEXI2POD) $(docdir)/bugreport.texi > gccbug.pod
++	-($(POD2MAN) --section=1 gccbug.pod > $(docdir)/gccbug.1.T$$$$ && \
++		mv -f $(docdir)/gccbug.1.T$$$$ $(docdir)/gccbug.1) || \
++		(rm -f $(docdir)/gccbug.1.T$$$$ && exit 1)
++	-rm -f gccbug.pod
++
+ $(docdir)/gfdl.7: $(docdir)/include/fdl.texi
+ 	$(STAMP) $(docdir)/gfdl.7
+ 	-$(TEXI2POD) $(docdir)/include/fdl.texi > gfdl.pod
+@@ -2736,6 +2745,7 @@
+ 	-rm -f $(docdir)/cpp.info* $(docdir)/gcc.info* $(docdir)/gccint.info*
+ 	-rm -f $(docdir)/cppinternals.info*
+ 	-rm -f $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1
++	-rm -f $(docdir)/gccbug.1
+ 	-rm -f $(docdir)/fsf-funding.7 $(docdir)/gfdl.7 $(docdir)/gpl.7
+ #
+ # Entry points `install' and `uninstall'.
+@@ -2893,6 +2903,9 @@
+ 	  $(INSTALL_DATA) $(docdir)/gcc.1 $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext); \
+ 	  chmod a-x $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext); \
+ 	fi
++	-rm -f $(DESTDIR)$(man1dir)/gccbug$(man1ext)
++	-$(INSTALL_DATA) $(docdir)/gccbug.1 $(DESTDIR)$(man1dir)/gccbug$(man1ext)
++	-chmod a-x $(DESTDIR)$(man1dir)/gccbug$(man1ext)
+ 	-rm -f $(DESTDIR)$(man1dir)/cpp$(man1ext)
+ 	-$(INSTALL_DATA) $(docdir)/cpp.1 $(DESTDIR)$(man1dir)/cpp$(man1ext)
+ 	-chmod a-x $(DESTDIR)$(man1dir)/cpp$(man1ext)
+@@ -3069,6 +3082,7 @@
+ 	-rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/$(GCC_CROSS_NAME)$(man1ext)
++	-rm -rf $(DESTDIR)$(man1dir)/gccbug$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/protoize$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/unprotoize$(man1ext)
+
+--- gcc/doc/bugreport.texi.old	2003-03-13 20:56:48.000000000 +0100
++++ gcc/doc/bugreport.texi	2003-03-13 20:59:11.000000000 +0100
+@@ -374,6 +374,44 @@
+ @section The gccbug script
+ @cindex gccbug script
+ 
++@ignore
++@c man begin SYNOPSIS
++gccbug
++       [ @option{--cc} @var{mail-address} ]
++       [ @option{--version} ] | [ @option{--help} ]
++@c man end
++@c Set file name and title for the man page.
++@setfilename gccbug
++@settitle Reporting GCC Bugs
++@c man begin SEEALSO
++gcc(1), send-pr(1), send-pr(8), the info entries for @file{gcc} (node Bugs),
++and the online pages at @uref{http://gcc.gnu.org/bugs.html}.
++@c man end
++@c man begin DESCRIPTION
++@command{gccbug} is a version of GNU GNATS send-pr configured for GCC bug
++reporting.
++
++Invoking @command{gccbug} calls the editor named in your environment
++variable @env{VISUAL} or @env{EDITOR} on a problem report template.
++
++Your bug reports play an essential role in making GCC reliable. However
++since the maintainers are very overloaded, please first make sure that:
++@itemize @bullet
++@item
++The problem is not already known.  See
++@uref{http://gcc.gnu.org/bugs.html#known} for a list of known bugs.
++If it isn't known, then you should report the problem.
++
++You can browse the bug database for bugs reported at
++@uref{http://gcc.gnu.org/cgi-bin/gnatsweb.pl}.
++
++@item
++You include the information that makes for fixing the bug. See
++@uref{http://gcc.gnu.org/bugs.html#report} for bug reporting instructions.
++@end itemize
++@c man end
++@end ignore
++
+ To simplify creation of bug reports, and to allow better tracking of
+ reports, we use the GNATS bug tracking system.  Part of that system is
+ the @command{gccbug} script.  This is a Unix shell script, so you need a
+@@ -382,9 +420,31 @@
+ 
+ The gccbug script is derived from send-pr, @pxref{using
+ send-pr,,Creating new Problem Reports,send-pr,Reporting Problems}.  When
+-invoked, it starts a text editor so you can fill out the various fields
+-of the report.  When the you quit the editor, the report is automatically
++invoked, it starts a text editor named in your environment variable
++@env{VISUAL} or @env{EDITOR} so you can fill out the various fields of
++the report.  When the you quit the editor, the report is automatically
+ send to the bug reporting address.
+ 
+ A number of fields in this bug report form are specific to GCC, and are
+ explained at @uref{http://gcc.gnu.org/gnats.html}.
++
++The @command{gccbug} script accepts the following options:
++
++@c man begin OPTIONS
++@table @gcctabopt
++
++@item --cc @var{mail-address}
++Specifies the mail-address to which the PR should be carbon-copied.
++
++@item --version
++Displays the @command{gccbug} version number and a usage summary.  No mail
++is sent.
++
++@item --help
++Displays a usage summary for @command{gccbug}.  No mail is sent.
++@end table
++
++@command{gccbug} has more (undocumented) options, which may be
++unsupported by a future GCC bug tracking system.
++
++@c man end
+
+#--- gcc/doc/.cvsignore~ 2002-06-26 20:27:50.000000000 +0200
+#+++ gcc/doc/.cvsignore  2003-03-13 21:07:13.000000000 +0100
+#@@ -4,6 +4,7 @@
+# cpp.info*
+# cppinternals.info*
+# gcc.1
+#+gccbug.1
+# cpp.1
+# gcov.1
+# gfdl.7
+
--- gcc-4.1-4.1.2.orig/debian/patches/link-libs.dpatch
+++ gcc-4.1-4.1.2/debian/patches/link-libs.dpatch
@@ -0,0 +1,157 @@
+#! /bin/sh -e
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/config/t-slibgcc-elf-ver.orig	2005-09-05 00:10:57.095357312 +0000
++++ gcc/config/t-slibgcc-elf-ver	2005-09-05 00:11:37.932149176 +0000
+@@ -14,6 +14,7 @@
+ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+ 	-Wl,--soname=$(SHLIB_SONAME) \
+ 	-Wl,--version-script=$(SHLIB_MAP) \
++	-Wl,-O1 \
+ 	-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
+ 	$(SHLIB_OBJS) $(SHLIB_LC) && \
+ 	rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
+--- libobjc/Makefile.in.orig	2005-09-05 00:10:57.091357920 +0000
++++ libobjc/Makefile.in	2005-09-05 00:15:00.266389696 +0000
+@@ -273,11 +273,13 @@
+ libobjc$(libext).la: $(OBJS)
+ 	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \
+ 		-rpath $(toolexeclibdir) \
++		-Wl,-O1 \
+ 		-version-info $(LIBOBJC_VERSION) $(extra_ldflags_libobjc)
+ 
+ libobjc_gc$(libext).la: $(OBJS_GC)
+ 	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) \
+ 		-rpath $(toolexeclibdir) \
++		-Wl,-O1 \
+ 		-version-info $(LIBOBJC_GC_VERSION) $(extra_ldflags_libobjc)
+ 
+ #
+--- libffi/Makefile.am.orig	2005-09-05 00:10:57.077360048 +0000
++++ libffi/Makefile.am	2005-09-05 00:11:37.877157536 +0000
+@@ -150,7 +150,7 @@
+ 
+ AM_CFLAGS = -Wall -g -fexceptions
+ 
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ 
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+--- libffi/Makefile.in.orig	2005-09-05 00:10:57.095357312 +0000
++++ libffi/Makefile.in	2005-09-05 00:11:37.932149176 +0000
+@@ -416,7 +416,7 @@
+ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+ AM_CFLAGS = -Wall -g -fexceptions
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+ all: fficonfig.h
+--- libgfortran/Makefile.am.orig	2005-08-11 18:01:02.000000000 +0000
++++ libgfortran/Makefile.am	2005-09-05 00:17:34.659918312 +0000
+@@ -8,7 +8,7 @@
+ 
+ toolexeclib_LTLIBRARIES = libgfortran.la libgfortranbegin.la
+ 
+-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lm $(extra_ldflags_libgfortran)
++libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lm $(extra_ldflags_libgfortran) -Wl,-O1
+ 
+ ## This should really go in the compiler lib dir, not the system lib dir.
+ libgfortranbegin_la_SOURCES = fmain.c
+--- libgfortran/Makefile.in.orig	2005-09-03 09:44:48.000000000 +0000
++++ libgfortran/Makefile.in	2005-09-05 00:18:05.382247808 +0000
+@@ -309,7 +309,7 @@
+ ACLOCAL_AMFLAGS = -I ../config
+ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
+ toolexeclib_LTLIBRARIES = libgfortran.la libgfortranbegin.la
+-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lm $(extra_ldflags_libgfortran)
++libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lm $(extra_ldflags_libgfortran) -Wl,-O1
+ libgfortranbegin_la_SOURCES = fmain.c
+ libgfortranbegin_la_LDFLAGS = -static
+ AM_CPPFLAGS = -iquote$(srcdir)/io
+--- libjava/Makefile.am.orig	2005-09-05 00:10:57.078359896 +0000
++++ libjava/Makefile.am	2005-09-05 00:13:11.509923192 +0000
+@@ -96,7 +96,7 @@
+ GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) \
+           $(LDFLAGS) -o $@
+ LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
+-          $(LDFLAGS) $(extra_ldflags_libjava) -o $@
++          $(LDFLAGS) $(extra_ldflags_libjava) -Wl,-Bsymbolic-functions -Wl,-O1 -o $@
+ 
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ 
+--- libjava/Makefile.in.orig	2005-09-05 00:10:57.089358224 +0000
++++ libjava/Makefile.in	2005-09-05 00:13:57.763891520 +0000
+@@ -647,7 +647,7 @@
+           $(LDFLAGS) -o $@
+ 
+ LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
+-          $(LDFLAGS) $(extra_ldflags_libjava) -o $@
++          $(LDFLAGS) $(extra_ldflags_libjava) -Wl,-Bsymbolic-functions -Wl,-O1 -o $@
+ 
+ WARNINGS = -Wextra -Wall
+ AM_CXXFLAGS = \
+--- libmudflap/Makefile.am.orig	2005-06-15 00:47:03.000000000 +0000
++++ libmudflap/Makefile.am	2005-09-05 00:19:21.098737152 +0000
+@@ -32,7 +32,7 @@
+ 	mf-hooks2.c
+ libmudflap_la_LIBADD = 
+ libmudflap_la_DEPENDENCIES = $(libmudflap_la_LIBADD)
+-libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ 
+ clean-local:
+ 	rm -f pth/*.o pth/*.lo
+--- libmudflap/Makefile.in.orig	2005-07-17 20:52:57.000000000 +0000
++++ libmudflap/Makefile.in	2005-09-05 00:19:42.890424312 +0000
+@@ -238,7 +238,7 @@
+ 
+ libmudflap_la_LIBADD = 
+ libmudflap_la_DEPENDENCIES = $(libmudflap_la_LIBADD)
+-libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ libmudflapth_la_SOURCES = 
+ libmudflapth_la_LIBADD = \
+ 	pth/mf-runtime.lo \
+--- libstdc++-v3/src/Makefile.am.orig	2005-09-05 00:10:57.091357920 +0000
++++ libstdc++-v3/src/Makefile.am	2005-09-05 00:11:37.931149328 +0000
+@@ -167,6 +167,7 @@
+ libstdc___la_DEPENDENCIES = ${version_dep} $(libstdc___la_LIBADD)
+ 
+ libstdc___la_LDFLAGS = \
++	-Wl,-O1 \
+ 	-version-info $(libtool_VERSION) ${version_arg} -lm 
+ 
+ 
+--- libstdc++-v3/src/Makefile.in.orig	2005-09-05 00:10:57.094357464 +0000
++++ libstdc++-v3/src/Makefile.in	2005-09-05 00:11:37.931149328 +0000
+@@ -360,6 +360,7 @@
+ 
+ libstdc___la_DEPENDENCIES = ${version_dep} $(libstdc___la_LIBADD)
+ libstdc___la_LDFLAGS = \
++	-Wl,-O1 \
+ 	-version-info $(libtool_VERSION) ${version_arg} -lm 
+ 
+ 
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-return.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-return.dpatch
@@ -0,0 +1,47 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: don't use single return if fp register have to be restored
+# DP: fixes 386864
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/config/m68k/m68k.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.c
++++ gcc-4.1/gcc/config/m68k/m68k.c
+@@ -738,7 +738,7 @@ use_return_insn (void)
+   /* We can output the epilogue as RTL only if no registers need to be
+      restored.  */
+   m68k_compute_frame_layout();
+-  return current_frame.reg_no ? false : true;
++  return (current_frame.reg_no + current_frame.fpu_no) ? false : true;
+ }
+ 
+ /* This function generates the assembly code for function exit,
--- gcc-4.1-4.1.2.orig/debian/patches/multiarch-include.dpatch
+++ gcc-4.1-4.1.2/debian/patches/multiarch-include.dpatch
@@ -0,0 +1,138 @@
+#! /bin/sh -e
+
+# DP: biarch-include.dpatch
+# DP:
+# DP: Adds biarch include directories
+# DP:     /usr/local/include/<arch>-linux-gnu
+# DP:     /usr/include/<arch>-linux-gnu
+# DP: to the system include paths, depending on 32/64 bit mode.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+Index: gcc/cppdefault.c
+===================================================================
+--- gcc/cppdefault.c	(revision 112832)
++++ gcc/cppdefault.c	(working copy)
+@@ -60,6 +60,7 @@
+ #endif
+ #ifdef LOCAL_INCLUDE_DIR
+     /* /usr/local/include comes before the fixincluded header files.  */
++    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
+     { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
+ #endif
+ #ifdef PREFIX_INCLUDE_DIR
+@@ -83,6 +84,7 @@
+ #endif
+ #ifdef STANDARD_INCLUDE_DIR
+     /* /usr/include comes dead last.  */
++    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 2 },
+     { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 0 },
+ #endif
+     { 0, 0, 0, 0, 0, 0 }
+Index: gcc/c-incpath.c
+===================================================================
+--- gcc/c-incpath.c	(revision 112832)
++++ gcc/c-incpath.c	(working copy)
+@@ -30,6 +30,7 @@
+ #include "intl.h"
+ #include "c-incpath.h"
+ #include "cppdefault.h"
++#include "errors.h"
+ 
+ /* Windows does not natively support inodes, and neither does MSDOS.
+    Cygwin's emulation can generate non-unique inodes, so don't use it.
+@@ -121,6 +121,31 @@
+     }
+ }
+ 
++struct multiarch_mapping
++{
++  const char *const multilib;
++  const char *const multiarch;
++};
++
++const struct multiarch_mapping multiarch_mappings[]
++= {
++#include "multiarch.inc"
++  { 0, 0 }
++};
++
++static const char*
++multilib_to_multiarch (const char *imultilib)
++{
++  const struct multiarch_mapping *p;
++
++  for (p = multiarch_mappings; p->multiarch; p++)
++    {
++      if (!strcmp(p->multilib, imultilib ? imultilib : ""))
++	return p->multiarch;
++    }
++  internal_error("no multiarch mapping for multilib (%s)\n", imultilib);
++}
++
+ /* Append the standard include chain defined in cppdefault.c.  */
+ static void
+ add_standard_paths (const char *sysroot, const char *iprefix,
+@@ -128,6 +153,7 @@
+ {
+   const struct default_include *p;
+   size_t len;
++  const char *multiarch;
+ 
+   if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
+     {
+@@ -146,8 +172,15 @@
+ 	      if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
+ 		{
+ 		  char *str = concat (iprefix, p->fname + len, NULL);
+-		  if (p->multilib && imultilib)
++		  if (p->multilib == 1 && imultilib)
+ 		    str = concat (str, dir_separator_str, imultilib, NULL);
++		  if (p->multilib == 2)
++		    {
++		      multiarch = multilib_to_multiarch (imultilib);
++		      if (!multiarch)
++			continue;
++		      str = concat (str, dir_separator_str, multiarch, NULL);
++		    }
+ 		  add_path (str, SYSTEM, p->cxx_aware, false);
+ 		}
+ 	    }
+@@ -166,9 +199,17 @@
+ 	  else
+ 	    str = update_path (p->fname, p->component);
+ 
+-	  if (p->multilib && imultilib)
++	  if (p->multilib == 1 && imultilib)
+ 	    str = concat (str, dir_separator_str, imultilib, NULL);
+ 
++	  if (p->multilib == 2)
++	    {
++	      multiarch = multilib_to_multiarch (imultilib);
++	      if (!multiarch)
++		continue;
++	      str = concat (str, dir_separator_str, multiarch, NULL);
++	    }
++
+ 	  add_path (str, SYSTEM, p->cxx_aware, false);
+ 	}
+     }
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-expandv.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-expandv.dpatch
@@ -0,0 +1,68 @@
+#! /bin/sh -e
+
+# DP: * gcc.c (main): Call expandargv.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2005-11-27  Mark Mitchell  <mark@codesourcery.com>
+
+	* gcc.c (main): Change type of argv to "char **".
+
+2005-11-23  Mark Mitchell  <mark@codesourcery.com>
+
+	* gcc.c (main): Call expandargv.
+
+Index: gcc/gcc.c
+===================================================================
+--- gcc/gcc.c	(Revision 121121)
++++ gcc/gcc.c	(Revision 121122)
+@@ -6057,10 +6057,10 @@
+   kill (getpid (), signum);
+ }
+ 
+-extern int main (int, const char **);
++extern int main (int, char **);
+ 
+ int
+-main (int argc, const char **argv)
++main (int argc, char **argv)
+ {
+   size_t i;
+   int value;
+@@ -6081,6 +6081,8 @@
+ 
+   prune_options (&argc, &argv);
+ 
++  expandargv (&argc, &argv);
++
+ #ifdef GCC_DRIVER_HOST_INITIALIZATION
+   /* Perform host dependent initialization when needed.  */
+   GCC_DRIVER_HOST_INITIALIZATION;
+@@ -6173,7 +6175,7 @@
+      Make a table of specified input files (infiles, n_infiles).
+      Decode switches that are handled locally.  */
+ 
+-  process_command (argc, argv);
++  process_command (argc, (const char **) argv);
+ 
+   /* Initialize the vector of specs to just the default.
+      This means one element containing 0s, as a terminator.  */
--- gcc-4.1-4.1.2.orig/debian/patches/gpc-4.1.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gpc-4.1.dpatch
@@ -0,0 +1,30 @@
+#! /bin/sh -e
+
+# DP: GPC updates for GCC 4.1.2 (up to CVS 20070904)
+
+dir=gcc/
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3/gcc"
+    dir="$3/gcc/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+patch=$(pwd)/gpc-20060325-20070904.diff
+
+case "$1" in
+    -patch)
+	echo Using patch file ${patch}
+        patch $pdir -f --no-backup-if-mismatch -p1 < ${patch}
+        ;;
+    -unpatch)
+	echo Using patch file ${patch}
+        patch $pdir -f --no-backup-if-mismatch -p1 -R < ${patch}
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-4.1-x86-blended.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-4.1-x86-blended.dpatch
@@ -0,0 +1,2099 @@
+#! /bin/sh -e
+
+# DP: Backport x86 "generic" patches from the trunk
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+gcc/
+
+2006-01-19  Jan Hubicka  <jh@suse.cz>
+            H.J. Lu  <hongjiu.lu@intel.com>
+	    Evandro Menezes <evandro.menezes@amd.com>
+
+	* invoke.texi (generic): Document
+	(i686) Update.
+	* config.gcc: Make x86_64-* and i686-* default to generic tunning.
+	* i386.h (TARGET_GENERIC32, TARGET_GENERIC64, TARGET_GENERIC,
+	TARGET_USE_INCDEC, TARGET_PAD_RETURNS): New macros.
+	(x86_use_incdec, x86_pad_returns): New variables
+	(TARGET_CPU_DEFAULT_generic): New constant
+	(TARGET_CPU_DEFAULT_NAMES): Add generic.
+	(enum processor_type): Add generic32 and generic64.
+	* i386.md (cpu attribute): Add generic32/generic64
+	(movhi splitter): Behave sanely when both partial_reg_dependency and
+	partial_reg_stall are set.
+	(K8 splitters): Enable for generic as well.
+	* predicates.md (incdec_operand): Use TARGET_INCDEC
+	(aligned_operand): Avoid memory mismatch stalls.
+	* athlon.md: Enable for generic64, new patterns for 128bit moves.
+	* ppro.md: Enable for generic32
+	* i386.c (generic64_cost, generic32_cost): New.
+	(m_GENERIC32, m_GENERIC64, m_GENERIC): New macros.
+	(x86_use_leave): Enable for generic64.  (x86_use_sahf,
+	x86_ext_80387_constants): Enable for generic32.  (x86_push_memory,
+	x86_movx, x86_unroll_strlen, x86_deep_branch, x86_use_simode_fiop,
+	x86_use_cltd, x86_promote_QImode, x86_sub_esp_4, x86_sub_esp_8,
+	x86_add_esp_4, x86_add_esp_8, x86_integer_DFmode_moves,
+	x86_partial_reg_dependency, x86_memory_mismatch_stall,
+	x86_accumulate_outgoing_args, x86_prologue_using_move,
+	x86_epilogue_using_move, x86_arch_always_fancy_math_387,
+	x86_sse_partial_reg_dependency, x86_four_jump_limit, x86_schedule):
+	Enable for generic.
+	(x86_use_incdec, x86_pad_returns): New.
+	(override_options): Add generic32 and generic64, translate "generic"
+	to generic32/generic64 and "i686" to "generic32", refuse
+	"generic32"/"generic64" as arch target.
+	(ix86_issue_rate, ix86_adjust_cost): Handle generic as athlon.
+	(ix86_reorg): Honor PAD_RETURNS.
+
+gcc/testsuite/
+
+2006-01-19  Jan Hubicka  <jh@suse.cz>
+
+	* gcc.target/i386/lea.c: Test pentiumpro, not i686.
+
+--- gcc/testsuite/gcc.target/i386/lea.c.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/testsuite/gcc.target/i386/lea.c	2006-10-25 18:27:49.000000000 +0200
+@@ -1,6 +1,6 @@
+ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+ /* { dg-require-effective-target ilp32 } */
+-/* { dg-options "-O2 -march=i686" } */
++/* { dg-options "-O2 -march=pentiumpro" } */
+ /* { dg-final { scan-assembler "leal" } } */
+ typedef struct {
+   char **visbuf;
+--- gcc/config/i386/athlon.md.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config/i386/athlon.md	2006-10-25 18:33:18.000000000 +0200
+@@ -123,7 +123,7 @@
+ (define_cpu_unit "athlon-fmul" "athlon_fp")
+ (define_cpu_unit "athlon-fstore" "athlon_fp")
+ (define_reservation "athlon-fany" "(athlon-fstore | athlon-fmul | athlon-fadd)")
+-(define_reservation "athlon-faddmul" "(athlon-fmul | athlon-fadd)")
++(define_reservation "athlon-faddmul" "(athlon-fadd | athlon-fmul)")
+ 
+ ;; Vector operations usually consume many of pipes.
+ (define_reservation "athlon-fvector" "(athlon-fadd + athlon-fmul + athlon-fstore)")
+@@ -131,26 +131,26 @@
+ 
+ ;; Jump instructions are executed in the branch unit completely transparent to us
+ (define_insn_reservation "athlon_branch" 0
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "ibr"))
+ 			 "athlon-direct,athlon-ieu")
+ (define_insn_reservation "athlon_call" 0
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "call,callv"))
+ 			 "athlon-vector,athlon-ieu")
+ 
+ ;; Latency of push operation is 3 cycles, but ESP value is available
+ ;; earlier
+ (define_insn_reservation "athlon_push" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "push"))
+ 			 "athlon-direct,athlon-agu,athlon-store")
+ (define_insn_reservation "athlon_pop" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "pop"))
+ 			 "athlon-vector,athlon-load,athlon-ieu")
+ (define_insn_reservation "athlon_pop_k8" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "pop"))
+ 			 "athlon-double,(athlon-ieu+athlon-load)")
+ (define_insn_reservation "athlon_leave" 3
+@@ -158,13 +158,13 @@
+ 			      (eq_attr "type" "leave"))
+ 			 "athlon-vector,(athlon-ieu+athlon-load)")
+ (define_insn_reservation "athlon_leave_k8" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "leave"))
+ 			 "athlon-double,(athlon-ieu+athlon-load)")
+ 
+ ;; Lea executes in AGU unit with 2 cycles latency.
+ (define_insn_reservation "athlon_lea" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "lea"))
+ 			 "athlon-direct,athlon-agu,nothing")
+ 
+@@ -176,13 +176,13 @@
+ 			 "athlon-vector,athlon-ieu0,athlon-mult,nothing,nothing,athlon-ieu0")
+ ;; ??? Widening multiply is vector or double.
+ (define_insn_reservation "athlon_imul_k8_DI" 4
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "imul")
+ 				   (and (eq_attr "mode" "DI")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "athlon-direct0,athlon-ieu0,athlon-mult,nothing,athlon-ieu0")
+ (define_insn_reservation "athlon_imul_k8" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "imul")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "athlon-direct0,athlon-ieu0,athlon-mult,athlon-ieu0")
+@@ -192,13 +192,13 @@
+ 				   (eq_attr "memory" "load,both")))
+ 			 "athlon-vector,athlon-load,athlon-ieu,athlon-mult,nothing,nothing,athlon-ieu")
+ (define_insn_reservation "athlon_imul_mem_k8_DI" 7
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "imul")
+ 				   (and (eq_attr "mode" "DI")
+ 					(eq_attr "memory" "load,both"))))
+ 			 "athlon-vector,athlon-load,athlon-ieu,athlon-mult,nothing,athlon-ieu")
+ (define_insn_reservation "athlon_imul_mem_k8" 6
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "imul")
+ 				   (eq_attr "memory" "load,both")))
+ 			 "athlon-vector,athlon-load,athlon-ieu,athlon-mult,athlon-ieu")
+@@ -211,59 +211,59 @@
+ ;; of the other code
+ 
+ (define_insn_reservation "athlon_idiv" 6
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "athlon-vector,(athlon-ieu0*6+(athlon-fpsched,athlon-fvector))")
+ (define_insn_reservation "athlon_idiv_mem" 9
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (eq_attr "memory" "load,both")))
+ 			 "athlon-vector,((athlon-load,athlon-ieu0*6)+(athlon-fpsched,athlon-fvector))")
+ ;; The parallelism of string instructions is not documented.  Model it same way
+ ;; as idiv to create smaller automata.  This probably does not matter much.
+ (define_insn_reservation "athlon_str" 6
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "str")
+ 				   (eq_attr "memory" "load,both,store")))
+ 			 "athlon-vector,athlon-load,athlon-ieu0*6")
+ 
+ (define_insn_reservation "athlon_idirect" 1
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "direct")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "athlon-direct,athlon-ieu")
+ (define_insn_reservation "athlon_ivector" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "vector")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "athlon-vector,athlon-ieu,athlon-ieu")
+ (define_insn_reservation "athlon_idirect_loadmov" 3
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "imov")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-load")
+ (define_insn_reservation "athlon_idirect_load" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "direct")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-load,athlon-ieu")
+ (define_insn_reservation "athlon_ivector_load" 6
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "vector")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-vector,athlon-load,athlon-ieu,athlon-ieu")
+ (define_insn_reservation "athlon_idirect_movstore" 1
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "imov")
+ 				   (eq_attr "memory" "store")))
+ 			 "athlon-direct,athlon-agu,athlon-store")
+ (define_insn_reservation "athlon_idirect_both" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "direct")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "both"))))
+@@ -271,7 +271,7 @@
+ 			  athlon-ieu,athlon-store,
+ 			  athlon-store")
+ (define_insn_reservation "athlon_ivector_both" 6
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "vector")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "both"))))
+@@ -280,14 +280,14 @@
+ 			  athlon-ieu,
+ 			  athlon-store")
+ (define_insn_reservation "athlon_idirect_store" 1
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "direct")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "store"))))
+ 			 "athlon-direct,(athlon-ieu+athlon-agu),
+ 			  athlon-store")
+ (define_insn_reservation "athlon_ivector_store" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "vector")
+ 				   (and (eq_attr "unit" "integer,unknown")
+ 					(eq_attr "memory" "store"))))
+@@ -302,7 +302,7 @@
+ 					(eq_attr "mode" "XF"))))
+ 			 "athlon-vector,athlon-fpload2,athlon-fvector*9")
+ (define_insn_reservation "athlon_fldxf_k8" 13
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fmov")
+ 				   (and (eq_attr "memory" "load")
+ 					(eq_attr "mode" "XF"))))
+@@ -314,7 +314,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fany")
+ (define_insn_reservation "athlon_fld_k8" 2
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fmov")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fstore")
+@@ -326,7 +326,7 @@
+ 					(eq_attr "mode" "XF"))))
+ 			 "athlon-vector,(athlon-fpsched+athlon-agu),(athlon-store2+(athlon-fvector*7))")
+ (define_insn_reservation "athlon_fstxf_k8" 8
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fmov")
+ 				   (and (eq_attr "memory" "store,both")
+ 					(eq_attr "mode" "XF"))))
+@@ -337,16 +337,16 @@
+ 				   (eq_attr "memory" "store,both")))
+ 			 "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)")
+ (define_insn_reservation "athlon_fst_k8" 2
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fmov")
+ 				   (eq_attr "memory" "store,both")))
+ 			 "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)")
+ (define_insn_reservation "athlon_fist" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fistp,fisttp"))
+ 			 "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)")
+ (define_insn_reservation "athlon_fmov" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fmov"))
+ 			 "athlon-direct,athlon-fpsched,athlon-faddmul")
+ (define_insn_reservation "athlon_fadd_load" 4
+@@ -355,12 +355,12 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fadd")
+ (define_insn_reservation "athlon_fadd_load_k8" 6
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fop")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fadd")
+ (define_insn_reservation "athlon_fadd" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fop"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fadd")
+ (define_insn_reservation "athlon_fmul_load" 4
+@@ -369,16 +369,16 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fmul")
+ (define_insn_reservation "athlon_fmul_load_k8" 6
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fmul")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fmul")
+ (define_insn_reservation "athlon_fmul" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fmul"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul")
+ (define_insn_reservation "athlon_fsgn" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fsgn"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul")
+ (define_insn_reservation "athlon_fdiv_load" 24
+@@ -387,7 +387,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fmul")
+ (define_insn_reservation "athlon_fdiv_load_k8" 13
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fmul")
+@@ -396,16 +396,16 @@
+ 			      (eq_attr "type" "fdiv"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul")
+ (define_insn_reservation "athlon_fdiv_k8" 11
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "fdiv"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul")
+ (define_insn_reservation "athlon_fpspc_load" 103
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "fpspc")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload,athlon-fvector")
+ (define_insn_reservation "athlon_fpspc" 100
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fpspc"))
+ 			 "athlon-vector,athlon-fpsched,athlon-fvector")
+ (define_insn_reservation "athlon_fcmov_load" 7
+@@ -418,12 +418,12 @@
+ 			      (eq_attr "type" "fcmov"))
+ 			 "athlon-vector,athlon-fpsched,athlon-fvector")
+ (define_insn_reservation "athlon_fcmov_load_k8" 17
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fcmov")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fploadk8,athlon-fvector")
+ (define_insn_reservation "athlon_fcmov_k8" 15
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "fcmov"))
+ 			 "athlon-vector,athlon-fpsched,athlon-fvector")
+ ;; fcomi is vector decoded by uses only one pipe.
+@@ -434,13 +434,13 @@
+ 				        (eq_attr "memory" "load"))))
+ 			 "athlon-vector,athlon-fpload,athlon-fadd")
+ (define_insn_reservation "athlon_fcomi_load_k8" 5
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (and (eq_attr "athlon_decode" "vector")
+ 				        (eq_attr "memory" "load"))))
+ 			 "athlon-vector,athlon-fploadk8,athlon-fadd")
+ (define_insn_reservation "athlon_fcomi" 3
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "athlon_decode" "vector")
+ 				   (eq_attr "type" "fcmp")))
+ 			 "athlon-vector,athlon-fpsched,athlon-fadd")
+@@ -450,18 +450,18 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fadd")
+ (define_insn_reservation "athlon_fcom_load_k8" 4
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fadd")
+ (define_insn_reservation "athlon_fcom" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "fcmp"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fadd")
+ ;; Never seen by the scheduler because we still don't do post reg-stack
+ ;; scheduling.
+ ;(define_insn_reservation "athlon_fxch" 2
+-;			 (and (eq_attr "cpu" "athlon,k8")
++;			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ ;			      (eq_attr "type" "fxch"))
+ ;			 "athlon-direct,athlon-fpsched,athlon-fany")
+ 
+@@ -477,8 +477,13 @@
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (match_operand:DF 1 "memory_operand" "")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fstore")
++(define_insn_reservation "athlon_movsd_load_generic64" 2
++			 (and (eq_attr "cpu" "generic64")
++			      (and (eq_attr "type" "ssemov")
++				   (match_operand:DF 1 "memory_operand" "")))
++			 "athlon-double,athlon-fploadk8,(athlon-fstore+athlon-fmul)")
+ (define_insn_reservation "athlon_movaps_load_k8" 2
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,TI")
+ 					(eq_attr "memory" "load"))))
+@@ -496,7 +501,7 @@
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-vector,athlon-fpload,(athlon-fany*2)")
+ (define_insn_reservation "athlon_movss_load_k8" 1
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "SF,DI")
+ 					(eq_attr "memory" "load"))))
+@@ -507,57 +512,57 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fany")
+ (define_insn_reservation "athlon_mmxsseld_k8" 2
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "mmxmov,ssemov")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fstore")
+ (define_insn_reservation "athlon_mmxssest" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "mmxmov,ssemov")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,TI")
+ 					(eq_attr "memory" "store,both"))))
+ 			 "athlon-vector,(athlon-fpsched+athlon-agu),((athlon-fstore+athlon-store2)*2)")
+ (define_insn_reservation "athlon_mmxssest_k8" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "mmxmov,ssemov")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,TI")
+ 					(eq_attr "memory" "store,both"))))
+ 			 "athlon-double,(athlon-fpsched+athlon-agu),((athlon-fstore+athlon-store2)*2)")
+ (define_insn_reservation "athlon_mmxssest_short" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "mmxmov,ssemov")
+ 				   (eq_attr "memory" "store,both")))
+ 			 "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)")
+-(define_insn_reservation "athlon_movaps" 2
+-			 (and (eq_attr "cpu" "k8")
++(define_insn_reservation "athlon_movaps_k8" 2
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (eq_attr "mode" "V4SF,V2DF,TI")))
+-			 "athlon-double,athlon-fpsched,(athlon-faddmul+athlon-faddmul)")
+-(define_insn_reservation "athlon_movaps_k8" 2
++			 "athlon-double,athlon-fpsched,((athlon-faddmul+athlon-faddmul) | (athlon-faddmul, athlon-faddmul))")
++(define_insn_reservation "athlon_movaps" 2
+ 			 (and (eq_attr "cpu" "athlon")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (eq_attr "mode" "V4SF,V2DF,TI")))
+ 			 "athlon-vector,athlon-fpsched,(athlon-faddmul+athlon-faddmul)")
+ (define_insn_reservation "athlon_mmxssemov" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "mmxmov,ssemov"))
+ 			 "athlon-direct,athlon-fpsched,athlon-faddmul")
+ (define_insn_reservation "athlon_mmxmul_load" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "mmxmul")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-fmul")
+ (define_insn_reservation "athlon_mmxmul" 3
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "mmxmul"))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul")
+ (define_insn_reservation "athlon_mmx_load" 3
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "unit" "mmx")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-direct,athlon-fpload,athlon-faddmul")
+ (define_insn_reservation "athlon_mmx" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "unit" "mmx"))
+ 			 "athlon-direct,athlon-fpsched,athlon-faddmul")
+ ;; SSE operations are handled by the i387 unit as well.  The latency
+@@ -569,7 +574,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload2,(athlon-fmul*2)")
+ (define_insn_reservation "athlon_sselog_load_k8" 5
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-double,athlon-fpload2k8,(athlon-fmul*2)")
+@@ -578,7 +583,7 @@
+ 			      (eq_attr "type" "sselog,sselog1"))
+ 			 "athlon-vector,athlon-fpsched,athlon-fmul*2")
+ (define_insn_reservation "athlon_sselog_k8" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "sselog,sselog1"))
+ 			 "athlon-double,athlon-fpsched,athlon-fmul")
+ ;; ??? pcmp executes in addmul, probably not worthwhile to bother about that.
+@@ -589,13 +594,13 @@
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fpload,athlon-fadd")
+ (define_insn_reservation "athlon_ssecmp_load_k8" 4
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "SF,DF,DI,TI")
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fadd")
+ (define_insn_reservation "athlon_ssecmp" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (eq_attr "mode" "SF,DF,DI,TI")))
+ 			 "athlon-direct,athlon-fpsched,athlon-fadd")
+@@ -605,7 +610,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload2,(athlon-fadd*2)")
+ (define_insn_reservation "athlon_ssecmpvector_load_k8" 5
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-double,athlon-fpload2k8,(athlon-fadd*2)")
+@@ -614,7 +619,7 @@
+ 			      (eq_attr "type" "ssecmp"))
+ 			 "athlon-vector,athlon-fpsched,(athlon-fadd*2)")
+ (define_insn_reservation "athlon_ssecmpvector_k8" 3
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "ssecmp"))
+ 			 "athlon-double,athlon-fpsched,(athlon-fadd*2)")
+ (define_insn_reservation "athlon_ssecomi_load" 4
+@@ -623,12 +628,12 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload,athlon-fadd")
+ (define_insn_reservation "athlon_ssecomi_load_k8" 6
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fploadk8,athlon-fadd")
+ (define_insn_reservation "athlon_ssecomi" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (eq_attr "type" "ssecmp"))
+ 			 "athlon-vector,athlon-fpsched,athlon-fadd")
+ (define_insn_reservation "athlon_sseadd_load" 4
+@@ -638,13 +643,13 @@
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fpload,athlon-fadd")
+ (define_insn_reservation "athlon_sseadd_load_k8" 6
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "SF,DF,DI")
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fadd")
+ (define_insn_reservation "athlon_sseadd" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (eq_attr "mode" "SF,DF,DI")))
+ 			 "athlon-direct,athlon-fpsched,athlon-fadd")
+@@ -654,7 +659,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload2,(athlon-fadd*2)")
+ (define_insn_reservation "athlon_sseaddvector_load_k8" 7
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-double,athlon-fpload2k8,(athlon-fadd*2)")
+@@ -663,7 +668,7 @@
+ 			      (eq_attr "type" "sseadd"))
+ 			 "athlon-vector,athlon-fpsched,(athlon-fadd*2)")
+ (define_insn_reservation "athlon_sseaddvector_k8" 5
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "sseadd"))
+ 			 "athlon-double,athlon-fpsched,(athlon-fadd*2)")
+ 
+@@ -673,28 +678,28 @@
+ 
+ ;; cvtss2sd
+ (define_insn_reservation "athlon_ssecvt_cvtss2sd_load_k8" 4
+-			 (and (eq_attr "cpu" "k8,athlon")
++			 (and (eq_attr "cpu" "k8,athlon,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "direct")
+ 					(and (eq_attr "mode" "DF")
+ 					     (eq_attr "memory" "load")))))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fstore")
+ (define_insn_reservation "athlon_ssecvt_cvtss2sd" 2
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "direct")
+ 					(eq_attr "mode" "DF"))))
+ 			 "athlon-direct,athlon-fpsched,athlon-fstore")
+ ;; cvtps2pd.  Model same way the other double decoded FP conversions.
+ (define_insn_reservation "athlon_ssecvt_cvtps2pd_load_k8" 5
+-			 (and (eq_attr "cpu" "k8,athlon")
++			 (and (eq_attr "cpu" "k8,athlon,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "double")
+ 					(and (eq_attr "mode" "V2DF,V4SF,TI")
+ 					     (eq_attr "memory" "load")))))
+ 			 "athlon-double,athlon-fpload2k8,(athlon-fstore*2)")
+ (define_insn_reservation "athlon_ssecvt_cvtps2pd_k8" 3
+-			 (and (eq_attr "cpu" "k8,athlon")
++			 (and (eq_attr "cpu" "k8,athlon,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "double")
+ 					(eq_attr "mode" "V2DF,V4SF,TI"))))
+@@ -717,7 +722,7 @@
+ 					     (eq_attr "memory" "load")))))
+ 			 "athlon-vector,athlon-fpload,(athlon-fstore*2)")
+ (define_insn_reservation "athlon_sseicvt_cvtsi2ss_load_k8" 9
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "sseicvt")
+ 				   (and (eq_attr "athlon_decode" "double")
+ 					(and (eq_attr "mode" "SF,DF")
+@@ -725,7 +730,7 @@
+ 			 "athlon-double,athlon-fploadk8,(athlon-fstore*2)")
+ ;; cvtsi2sd reg,reg is double decoded (vector on Athlon)
+ (define_insn_reservation "athlon_sseicvt_cvtsi2sd_k8" 11
+-			 (and (eq_attr "cpu" "k8,athlon")
++			 (and (eq_attr "cpu" "k8,athlon,generic64")
+ 			      (and (eq_attr "type" "sseicvt")
+ 				   (and (eq_attr "athlon_decode" "double")
+ 					(and (eq_attr "mode" "SF,DF")
+@@ -733,7 +738,7 @@
+ 			 "athlon-double,athlon-fploadk8,athlon-fstore")
+ ;; cvtsi2ss reg, reg is doublepath
+ (define_insn_reservation "athlon_sseicvt_cvtsi2ss" 14
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "sseicvt")
+ 				   (and (eq_attr "athlon_decode" "vector")
+ 					(and (eq_attr "mode" "SF,DF")
+@@ -741,7 +746,7 @@
+ 			 "athlon-vector,athlon-fploadk8,(athlon-fvector*2)")
+ ;; cvtsd2ss mem,reg is doublepath, troughput unknown, latency 9
+ (define_insn_reservation "athlon_ssecvt_cvtsd2ss_load_k8" 9
+-			 (and (eq_attr "cpu" "k8,athlon")
++			 (and (eq_attr "cpu" "k8,athlon,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "double")
+ 					(and (eq_attr "mode" "SF")
+@@ -749,14 +754,14 @@
+ 			 "athlon-double,athlon-fploadk8,(athlon-fstore*3)")
+ ;; cvtsd2ss reg,reg is vectorpath, troughput unknown, latency 12
+ (define_insn_reservation "athlon_ssecvt_cvtsd2ss" 12
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "vector")
+ 					(and (eq_attr "mode" "SF")
+ 					     (eq_attr "memory" "none")))))
+ 			 "athlon-vector,athlon-fpsched,(athlon-fvector*3)")
+ (define_insn_reservation "athlon_ssecvt_cvtpd2ps_load_k8" 8
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "vector")
+ 					(and (eq_attr "mode" "V4SF,V2DF,TI")
+@@ -765,7 +770,7 @@
+ ;; cvtpd2ps mem,reg is vectorpath, troughput unknown, latency 10
+ ;; ??? Why it is fater than cvtsd2ss?
+ (define_insn_reservation "athlon_ssecvt_cvtpd2ps" 8
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "athlon_decode" "vector")
+ 					(and (eq_attr "mode" "V4SF,V2DF,TI")
+@@ -773,7 +778,7 @@
+ 			 "athlon-vector,athlon-fpsched,athlon-fvector*2")
+ ;; cvtsd2si mem,reg is doublepath, troughput 1, latency 9
+ (define_insn_reservation "athlon_secvt_cvtsX2si_load" 9
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "sseicvt")
+ 				   (and (eq_attr "athlon_decode" "vector")
+ 					(and (eq_attr "mode" "SI,DI")
+@@ -788,7 +793,7 @@
+ 					     (eq_attr "memory" "none")))))
+ 			 "athlon-vector,athlon-fpsched,athlon-fvector")
+ (define_insn_reservation "athlon_ssecvt_cvtsX2si_k8" 9
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "sseicvt")
+ 				   (and (eq_attr "athlon_decode" "double")
+ 					(and (eq_attr "mode" "SI,DI")
+@@ -803,13 +808,13 @@
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fpload,athlon-fmul")
+ (define_insn_reservation "athlon_ssemul_load_k8" 6
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "SF,DF")
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fmul")
+ (define_insn_reservation "athlon_ssemul" 4
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (eq_attr "mode" "SF,DF")))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul")
+@@ -819,7 +824,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload2,(athlon-fmul*2)")
+ (define_insn_reservation "athlon_ssemulvector_load_k8" 7
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-double,athlon-fpload2k8,(athlon-fmul*2)")
+@@ -828,7 +833,7 @@
+ 			      (eq_attr "type" "ssemul"))
+ 			 "athlon-vector,athlon-fpsched,(athlon-fmul*2)")
+ (define_insn_reservation "athlon_ssemulvector_k8" 5
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "ssemul"))
+ 			 "athlon-double,athlon-fpsched,(athlon-fmul*2)")
+ ;; divsd timings.  divss is faster
+@@ -839,13 +844,13 @@
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fpload,athlon-fmul*17")
+ (define_insn_reservation "athlon_ssediv_load_k8" 22
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "SF,DF")
+ 					(eq_attr "memory" "load"))))
+ 			 "athlon-direct,athlon-fploadk8,athlon-fmul*17")
+ (define_insn_reservation "athlon_ssediv" 20
+-			 (and (eq_attr "cpu" "athlon,k8")
++			 (and (eq_attr "cpu" "athlon,k8,generic64")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (eq_attr "mode" "SF,DF")))
+ 			 "athlon-direct,athlon-fpsched,athlon-fmul*17")
+@@ -855,7 +860,7 @@
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-vector,athlon-fpload2,athlon-fmul*34")
+ (define_insn_reservation "athlon_ssedivvector_load_k8" 35
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (eq_attr "memory" "load")))
+ 			 "athlon-double,athlon-fpload2k8,athlon-fmul*34")
+@@ -864,6 +869,6 @@
+ 			      (eq_attr "type" "ssediv"))
+ 			 "athlon-vector,athlon-fmul*34")
+ (define_insn_reservation "athlon_ssedivvector_k8" 39
+-			 (and (eq_attr "cpu" "k8")
++			 (and (eq_attr "cpu" "k8,generic64")
+ 			      (eq_attr "type" "ssediv"))
+ 			 "athlon-double,athlon-fmul*34")
+--- gcc/config/i386/i386.c.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config/i386/i386.c	2006-10-25 18:27:49.000000000 +0200
+@@ -584,6 +584,118 @@
+   COSTS_N_INSNS (44),			/* cost of FSQRT instruction.  */
+ };
+ 
++/* Generic64 should produce code tuned for Nocona and K8.  */
++static const
++struct processor_costs generic64_cost = {
++  COSTS_N_INSNS (1),			/* cost of an add instruction */
++  /* On all chips taken into consideration lea is 2 cycles and more.  With
++     this cost however our current implementation of synth_mult results in
++     use of unnecesary temporary registers causing regression on several
++     SPECfp benchmarks.  */
++  COSTS_N_INSNS (1) + 1,		/* cost of a lea instruction */
++  COSTS_N_INSNS (1),			/* variable shift costs */
++  COSTS_N_INSNS (1),			/* constant shift costs */
++  {COSTS_N_INSNS (3),			/* cost of starting multiply for QI */
++   COSTS_N_INSNS (4),			/*                               HI */
++   COSTS_N_INSNS (3),			/*                               SI */
++   COSTS_N_INSNS (4),			/*                               DI */
++   COSTS_N_INSNS (2)},			/*                               other */
++  0,					/* cost of multiply per each bit set */
++  {COSTS_N_INSNS (18),			/* cost of a divide/mod for QI */
++   COSTS_N_INSNS (26),			/*                          HI */
++   COSTS_N_INSNS (42),			/*                          SI */
++   COSTS_N_INSNS (74),			/*                          DI */
++   COSTS_N_INSNS (74)},			/*                          other */
++  COSTS_N_INSNS (1),			/* cost of movsx */
++  COSTS_N_INSNS (1),			/* cost of movzx */
++  8,					/* "large" insn */
++  17,					/* MOVE_RATIO */
++  4,					/* cost for loading QImode using movzbl */
++  {4, 4, 4},				/* cost of loading integer registers
++					   in QImode, HImode and SImode.
++					   Relative to reg-reg move (2).  */
++  {4, 4, 4},				/* cost of storing integer registers */
++  4,					/* cost of reg,reg fld/fst */
++  {12, 12, 12},				/* cost of loading fp registers
++					   in SFmode, DFmode and XFmode */
++  {6, 6, 8},				/* cost of loading integer registers */
++  2,					/* cost of moving MMX register */
++  {8, 8},				/* cost of loading MMX registers
++					   in SImode and DImode */
++  {8, 8},				/* cost of storing MMX registers
++					   in SImode and DImode */
++  2,					/* cost of moving SSE register */
++  {8, 8, 8},				/* cost of loading SSE registers
++					   in SImode, DImode and TImode */
++  {8, 8, 8},				/* cost of storing SSE registers
++					   in SImode, DImode and TImode */
++  5,					/* MMX or SSE register to integer */
++  64,					/* size of prefetch block */
++  6,					/* number of parallel prefetches */
++  /* Benchmarks shows large regressions on K8 sixtrack benchmark when this value
++     is increased to perhaps more appropriate value of 5.  */
++  3,					/* Branch cost */
++  COSTS_N_INSNS (8),			/* cost of FADD and FSUB insns.  */
++  COSTS_N_INSNS (8),			/* cost of FMUL instruction.  */
++  COSTS_N_INSNS (20),			/* cost of FDIV instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FABS instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FCHS instruction.  */
++  COSTS_N_INSNS (40),			/* cost of FSQRT instruction.  */
++};
++
++/* Generic32 should produce code tuned for Athlon, PPro, Pentium4, Nocona and K8.  */
++static const
++struct processor_costs generic32_cost = {
++  COSTS_N_INSNS (1),			/* cost of an add instruction */
++  COSTS_N_INSNS (1) + 1,		/* cost of a lea instruction */
++  COSTS_N_INSNS (1),			/* variable shift costs */
++  COSTS_N_INSNS (1),			/* constant shift costs */
++  {COSTS_N_INSNS (3),			/* cost of starting multiply for QI */
++   COSTS_N_INSNS (4),			/*                               HI */
++   COSTS_N_INSNS (3),			/*                               SI */
++   COSTS_N_INSNS (4),			/*                               DI */
++   COSTS_N_INSNS (2)},			/*                               other */
++  0,					/* cost of multiply per each bit set */
++  {COSTS_N_INSNS (18),			/* cost of a divide/mod for QI */
++   COSTS_N_INSNS (26),			/*                          HI */
++   COSTS_N_INSNS (42),			/*                          SI */
++   COSTS_N_INSNS (74),			/*                          DI */
++   COSTS_N_INSNS (74)},			/*                          other */
++  COSTS_N_INSNS (1),			/* cost of movsx */
++  COSTS_N_INSNS (1),			/* cost of movzx */
++  8,					/* "large" insn */
++  17,					/* MOVE_RATIO */
++  4,					/* cost for loading QImode using movzbl */
++  {4, 4, 4},				/* cost of loading integer registers
++					   in QImode, HImode and SImode.
++					   Relative to reg-reg move (2).  */
++  {4, 4, 4},				/* cost of storing integer registers */
++  4,					/* cost of reg,reg fld/fst */
++  {12, 12, 12},				/* cost of loading fp registers
++					   in SFmode, DFmode and XFmode */
++  {6, 6, 8},				/* cost of loading integer registers */
++  2,					/* cost of moving MMX register */
++  {8, 8},				/* cost of loading MMX registers
++					   in SImode and DImode */
++  {8, 8},				/* cost of storing MMX registers
++					   in SImode and DImode */
++  2,					/* cost of moving SSE register */
++  {8, 8, 8},				/* cost of loading SSE registers
++					   in SImode, DImode and TImode */
++  {8, 8, 8},				/* cost of storing SSE registers
++					   in SImode, DImode and TImode */
++  5,					/* MMX or SSE register to integer */
++  64,					/* size of prefetch block */
++  6,					/* number of parallel prefetches */
++  3,					/* Branch cost */
++  COSTS_N_INSNS (8),			/* cost of FADD and FSUB insns.  */
++  COSTS_N_INSNS (8),			/* cost of FMUL instruction.  */
++  COSTS_N_INSNS (20),			/* cost of FDIV instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FABS instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FCHS instruction.  */
++  COSTS_N_INSNS (40),			/* cost of FSQRT instruction.  */
++};
++
+ const struct processor_costs *ix86_cost = &pentium_cost;
+ 
+ /* Processor feature/optimization bitmasks.  */
+@@ -597,52 +709,81 @@
+ #define m_K8  (1<<PROCESSOR_K8)
+ #define m_ATHLON_K8  (m_K8 | m_ATHLON)
+ #define m_NOCONA  (1<<PROCESSOR_NOCONA)
+-
+-const int x86_use_leave = m_386 | m_K6 | m_ATHLON_K8;
+-const int x86_push_memory = m_386 | m_K6 | m_ATHLON_K8 | m_PENT4 | m_NOCONA;
++#define m_GENERIC32 (1<<PROCESSOR_GENERIC32)
++#define m_GENERIC64 (1<<PROCESSOR_GENERIC64)
++#define m_GENERIC (m_GENERIC32 | m_GENERIC64)
++
++/* Generic instruction choice should be common subset of supported CPUs
++   (PPro/PENT4/NOCONA/Athlon/K8).  */
++
++/* Leave is not affecting Nocona SPEC2000 results negatively, so enabling for
++   Generic64 seems like good code size tradeoff.  We can't enable it for 32bit
++   generic because it is not working well with PPro base chips.  */
++const int x86_use_leave = m_386 | m_K6 | m_ATHLON_K8 | m_GENERIC64;
++const int x86_push_memory = m_386 | m_K6 | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC;
+ const int x86_zero_extend_with_and = m_486 | m_PENT;
+-const int x86_movx = m_ATHLON_K8 | m_PPRO | m_PENT4 | m_NOCONA /* m_386 | m_K6 */;
++const int x86_movx = m_ATHLON_K8 | m_PPRO | m_PENT4 | m_NOCONA | m_GENERIC /* m_386 | m_K6 */;
+ const int x86_double_with_add = ~m_386;
+ const int x86_use_bit_test = m_386;
+-const int x86_unroll_strlen = m_486 | m_PENT | m_PPRO | m_ATHLON_K8 | m_K6;
+-const int x86_cmove = m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA;
++const int x86_unroll_strlen = m_486 | m_PENT | m_PPRO | m_ATHLON_K8 | m_K6 | m_GENERIC;
++const int x86_cmove = m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA; 
+ const int x86_fisttp = m_NOCONA;
+ const int x86_3dnow_a = m_ATHLON_K8;
+-const int x86_deep_branch = m_PPRO | m_K6 | m_ATHLON_K8 | m_PENT4 | m_NOCONA;
++const int x86_deep_branch = m_PPRO | m_K6 | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC;
+ /* Branch hints were put in P4 based on simulation result. But
+    after P4 was made, no performance benefit was observed with
+    branch hints. It also increases the code size. As the result,
+    icc never generates branch hints.  */
+ const int x86_branch_hints = 0;
+-const int x86_use_sahf = m_PPRO | m_K6 | m_PENT4 | m_NOCONA;
++const int x86_use_sahf = m_PPRO | m_K6 | m_PENT4 | m_NOCONA | m_GENERIC32; /*m_GENERIC | m_ATHLON_K8 ? */
++/* We probably ought to watch for partial register stalls on Generic32
++   compilation setting as well.  However in current implementation the
++   partial register stalls are not eliminated very well - they can
++   be introduced via subregs synthetized by combine and can happen
++   in caller/callee saving sequences.
++   Because this option pays back little on PPro based chips and is in conflict
++   with partial reg. dependencies used by Athlon/P4 based chips, it is better
++   to leave it off for generic32 for now.  */
+ const int x86_partial_reg_stall = m_PPRO;
+ const int x86_use_himode_fiop = m_386 | m_486 | m_K6;
+-const int x86_use_simode_fiop = ~(m_PPRO | m_ATHLON_K8 | m_PENT);
++const int x86_use_simode_fiop = ~(m_PPRO | m_ATHLON_K8 | m_PENT | m_GENERIC);
+ const int x86_use_mov0 = m_K6;
+-const int x86_use_cltd = ~(m_PENT | m_K6);
++const int x86_use_cltd = ~(m_PENT | m_K6 | m_GENERIC);
+ const int x86_read_modify_write = ~m_PENT;
+ const int x86_read_modify = ~(m_PENT | m_PPRO);
+ const int x86_split_long_moves = m_PPRO;
+-const int x86_promote_QImode = m_K6 | m_PENT | m_386 | m_486 | m_ATHLON_K8;
++const int x86_promote_QImode = m_K6 | m_PENT | m_386 | m_486 | m_ATHLON_K8 | m_GENERIC; /* m_PENT4 ? */
+ const int x86_fast_prefix = ~(m_PENT | m_486 | m_386);
+ const int x86_single_stringop = m_386 | m_PENT4 | m_NOCONA;
+ const int x86_qimode_math = ~(0);
+ const int x86_promote_qi_regs = 0;
++/* On PPro this flag is meant to avoid partial register stalls.  Just like
++   the x86_partial_reg_stall this option might be considered for Generic32
++   if our scheme for avoiding partial stalls was more effective.  */
+ const int x86_himode_math = ~(m_PPRO);
+ const int x86_promote_hi_regs = m_PPRO;
+-const int x86_sub_esp_4 = m_ATHLON_K8 | m_PPRO | m_PENT4 | m_NOCONA;
+-const int x86_sub_esp_8 = m_ATHLON_K8 | m_PPRO | m_386 | m_486 | m_PENT4 | m_NOCONA;
+-const int x86_add_esp_4 = m_ATHLON_K8 | m_K6 | m_PENT4 | m_NOCONA;
+-const int x86_add_esp_8 = m_ATHLON_K8 | m_PPRO | m_K6 | m_386 | m_486 | m_PENT4 | m_NOCONA;
+-const int x86_integer_DFmode_moves = ~(m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO);
+-const int x86_partial_reg_dependency = m_ATHLON_K8 | m_PENT4 | m_NOCONA;
+-const int x86_memory_mismatch_stall = m_ATHLON_K8 | m_PENT4 | m_NOCONA;
+-const int x86_accumulate_outgoing_args = m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO;
+-const int x86_prologue_using_move = m_ATHLON_K8 | m_PPRO;
+-const int x86_epilogue_using_move = m_ATHLON_K8 | m_PPRO;
++const int x86_sub_esp_4 = m_ATHLON_K8 | m_PPRO | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_sub_esp_8 = m_ATHLON_K8 | m_PPRO | m_386 | m_486 | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_add_esp_4 = m_ATHLON_K8 | m_K6 | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_add_esp_8 = m_ATHLON_K8 | m_PPRO | m_K6 | m_386 | m_486 | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_integer_DFmode_moves = ~(m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO | m_GENERIC);
++const int x86_partial_reg_dependency = m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_memory_mismatch_stall = m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_accumulate_outgoing_args = m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO | m_GENERIC;
++const int x86_prologue_using_move = m_ATHLON_K8 | m_PPRO | m_GENERIC;
++const int x86_epilogue_using_move = m_ATHLON_K8 | m_PPRO | m_GENERIC;
+ const int x86_shift1 = ~m_486;
+-const int x86_arch_always_fancy_math_387 = m_PENT | m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA;
+-const int x86_sse_partial_reg_dependency = m_PENT4 | m_NOCONA | m_PPRO;
++const int x86_arch_always_fancy_math_387 = m_PENT | m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC;
++/* In Generic model we have an confict here in between PPro/Pentium4 based chips
++   that thread 128bit SSE registers as single units versus K8 based chips that
++   divide SSE registers to two 64bit halves.
++   x86_sse_partial_reg_dependency promote all store destinations to be 128bit
++   to allow register renaming on 128bit SSE units, but usually results in one
++   extra microop on 64bit SSE units.  Experimental results shows that disabling
++   this option on P4 brings over 20% SPECfp regression, while enabling it on
++   K8 brings roughly 2.4% regression that can be partly masked by careful scheduling
++   of moves.  */
++const int x86_sse_partial_reg_dependency = m_PENT4 | m_NOCONA | m_PPRO | m_GENERIC;
+ /* Set for machines where the type and dependencies are resolved on SSE
+    register parts instead of whole registers, so we may maintain just
+    lower part of scalar values in proper format leaving the upper part
+@@ -652,21 +793,23 @@
+ const int x86_sse_load0_by_pxor = m_PPRO | m_PENT4 | m_NOCONA;
+ const int x86_use_ffreep = m_ATHLON_K8;
+ const int x86_rep_movl_optimal = m_386 | m_PENT | m_PPRO | m_K6;
++const int x86_use_incdec = ~(m_PENT4 | m_NOCONA | m_GENERIC);
+ 
+ /* ??? Allowing interunit moves makes it all too easy for the compiler to put
+    integer data in xmm registers.  Which results in pretty abysmal code.  */
+ const int x86_inter_unit_moves = 0 /* ~(m_ATHLON_K8) */;
+ 
+-const int x86_ext_80387_constants = m_K6 | m_ATHLON | m_PENT4 | m_NOCONA | m_PPRO;
++const int x86_ext_80387_constants = m_K6 | m_ATHLON | m_PENT4 | m_NOCONA | m_PPRO | m_GENERIC32;
+ /* Some CPU cores are not able to predict more than 4 branch instructions in
+    the 16 byte window.  */
+-const int x86_four_jump_limit = m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA;
+-const int x86_schedule = m_PPRO | m_ATHLON_K8 | m_K6 | m_PENT;
++const int x86_four_jump_limit = m_PPRO | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_GENERIC;
++const int x86_schedule = m_PPRO | m_ATHLON_K8 | m_K6 | m_PENT | m_GENERIC;
+ const int x86_use_bt = m_ATHLON_K8;
+ /* Compare and exchange was added for 80486.  */
+ const int x86_cmpxchg = ~m_386;
+ /* Exchange and add was added for 80486.  */
+ const int x86_xadd = ~m_386;
++const int x86_pad_returns = m_ATHLON_K8 | m_GENERIC;
+ 
+ /* In case the average insn count for single function invocation is
+    lower than this constant, emit fast (but longer) prologue and
+@@ -1284,7 +1427,9 @@
+       {&athlon_cost, 0, 0, 16, 7, 16, 7, 16},
+       {&pentium4_cost, 0, 0, 0, 0, 0, 0, 0},
+       {&k8_cost, 0, 0, 16, 7, 16, 7, 16},
+-      {&nocona_cost, 0, 0, 0, 0, 0, 0, 0}
++      {&nocona_cost, 0, 0, 0, 0, 0, 0, 0},
++      {&generic32_cost, 0, 0, 16, 7, 16, 7, 16},
++      {&generic64_cost, 0, 0, 16, 7, 16, 7, 16}
+     };
+ 
+   static const char * const cpu_names[] = TARGET_CPU_DEFAULT_NAMES;
+@@ -1352,6 +1497,8 @@
+ 				      | PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
+       {"athlon-fx", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
+ 				      | PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
++      {"generic32", PROCESSOR_GENERIC32, 0 /* flags are only used for -march switch.  */ },
++      {"generic64", PROCESSOR_GENERIC64, PTA_64BIT /* flags are only used for -march switch.  */ },
+     };
+ 
+   int const pta_size = ARRAY_SIZE (processor_alias_table);
+@@ -1381,15 +1528,52 @@
+ 	flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
+     }
+ 
+-  if (!ix86_tune_string && ix86_arch_string)
+-    ix86_tune_string = ix86_arch_string;
+-  if (!ix86_tune_string)
++  /* Need to check -mtune=generic first.  */
++  if (ix86_tune_string)
+     {
+-      ix86_tune_string = cpu_names [TARGET_CPU_DEFAULT];
+-      ix86_tune_defaulted = 1;
++      if (!strcmp (ix86_tune_string, "generic")
++	  || !strcmp (ix86_tune_string, "i686"))
++	{
++	  if (TARGET_64BIT)
++	    ix86_tune_string = "generic64";
++	  else
++	    ix86_tune_string = "generic32";
++	}
++      else if (!strncmp (ix86_tune_string, "generic", 7))
++	error ("bad value (%s) for -mtune= switch", ix86_tune_string);
+     }
++  else
++    {
++      if (ix86_arch_string)
++	ix86_tune_string = ix86_arch_string;
++      if (!ix86_tune_string)
++	{
++	  ix86_tune_string = cpu_names [TARGET_CPU_DEFAULT];
++	  ix86_tune_defaulted = 1;
++	}
++
++      /* ix86_tune_string is set to ix86_arch_string or defaulted.  We
++	 need to use a sensible tune option.  */
++      if (!strcmp (ix86_tune_string, "generic")
++	  || !strcmp (ix86_tune_string, "x86-64")
++	  || !strcmp (ix86_tune_string, "i686"))
++	{
++	  if (TARGET_64BIT)
++	    ix86_tune_string = "generic64";
++	  else
++	    ix86_tune_string = "generic32";
++	}
++    }
++  if (!strcmp (ix86_tune_string, "x86-64"))
++    warning (OPT_Wdeprecated, "-mtune=x86-64 is deprecated.  Use -mtune=k8 or "
++	     "-mtune=generic instead as appropriate.");
++
+   if (!ix86_arch_string)
+     ix86_arch_string = TARGET_64BIT ? "x86-64" : "i386";
++  if (!strcmp (ix86_arch_string, "generic"))
++    error ("generic CPU can be used only for -mtune= switch");
++  if (!strncmp (ix86_arch_string, "generic", 7))
++    error ("bad value (%s) for -march= switch", ix86_arch_string);
+ 
+   if (ix86_cmodel_string != 0)
+     {
+@@ -13139,6 +13323,8 @@
+     case PROCESSOR_ATHLON:
+     case PROCESSOR_K8:
+     case PROCESSOR_NOCONA:
++    case PROCESSOR_GENERIC32:
++    case PROCESSOR_GENERIC64:
+       return 3;
+ 
+     default:
+@@ -13331,6 +13517,8 @@
+ 
+     case PROCESSOR_ATHLON:
+     case PROCESSOR_K8:
++    case PROCESSOR_GENERIC32:
++    case PROCESSOR_GENERIC64:
+       memory = get_attr_memory (insn);
+ 
+       /* Show ability of reorder buffer to hide latency of load by executing
+@@ -17299,7 +17487,7 @@
+ static void
+ ix86_reorg (void)
+ {
+-  if (TARGET_ATHLON_K8 && optimize && !optimize_size)
++  if (TARGET_PAD_RETURNS && optimize && !optimize_size)
+     ix86_pad_returns ();
+   if (TARGET_FOUR_JUMP_LIMIT && optimize && !optimize_size)
+     ix86_avoid_jump_misspredicts ();
+--- gcc/config/i386/i386.h.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config/i386/i386.h	2006-10-25 18:27:49.000000000 +0200
+@@ -93,11 +93,7 @@
+ /* configure can arrange to make this 2, to force a 486.  */
+ 
+ #ifndef TARGET_CPU_DEFAULT
+-#ifdef TARGET_64BIT_DEFAULT
+-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_k8
+-#else
+-#define TARGET_CPU_DEFAULT 0
+-#endif
++#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
+ #endif
+ 
+ #ifndef TARGET_FPMATH_DEFAULT
+@@ -140,6 +136,9 @@
+ #define TARGET_K8 (ix86_tune == PROCESSOR_K8)
+ #define TARGET_ATHLON_K8 (TARGET_K8 || TARGET_ATHLON)
+ #define TARGET_NOCONA (ix86_tune == PROCESSOR_NOCONA)
++#define TARGET_GENERIC32 (ix86_tune == PROCESSOR_GENERIC32)
++#define TARGET_GENERIC64 (ix86_tune == PROCESSOR_GENERIC64)
++#define TARGET_GENERIC (TARGET_GENERIC32 || TARGET_GENERIC64)
+ 
+ #define TUNEMASK (1 << ix86_tune)
+ extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
+@@ -163,6 +162,8 @@
+ extern const int x86_inter_unit_moves, x86_schedule;
+ extern const int x86_use_bt;
+ extern const int x86_cmpxchg, x86_xadd;
++extern const int x86_use_incdec;
++extern const int x86_pad_returns;
+ extern int x86_prefetch_sse;
+ 
+ #define TARGET_USE_LEAVE (x86_use_leave & TUNEMASK)
+@@ -217,6 +218,8 @@
+ #define TARGET_FOUR_JUMP_LIMIT (x86_four_jump_limit & TUNEMASK)
+ #define TARGET_SCHEDULE (x86_schedule & TUNEMASK)
+ #define TARGET_USE_BT (x86_use_bt & TUNEMASK)
++#define TARGET_USE_INCDEC (x86_use_incdec & TUNEMASK)
++#define TARGET_PAD_RETURNS (x86_pad_returns & TUNEMASK)
+ 
+ #define ASSEMBLER_DIALECT (ix86_asm_dialect)
+ 
+@@ -460,12 +463,14 @@
+ #define TARGET_CPU_DEFAULT_pentium_m 14
+ #define TARGET_CPU_DEFAULT_prescott 15
+ #define TARGET_CPU_DEFAULT_nocona 16
++#define TARGET_CPU_DEFAULT_generic 17
+ 
+ #define TARGET_CPU_DEFAULT_NAMES {"i386", "i486", "pentium", "pentium-mmx",\
+ 				  "pentiumpro", "pentium2", "pentium3", \
+ 				  "pentium4", "k6", "k6-2", "k6-3",\
+ 				  "athlon", "athlon-4", "k8", \
+-				  "pentium-m", "prescott", "nocona"}
++				  "pentium-m", "prescott", "nocona", \
++				  "generic"}
+ 
+ #ifndef CC1_SPEC
+ #define CC1_SPEC "%(cc1_cpu) "
+@@ -2115,6 +2120,8 @@
+   PROCESSOR_PENTIUM4,
+   PROCESSOR_K8,
+   PROCESSOR_NOCONA,
++  PROCESSOR_GENERIC32,
++  PROCESSOR_GENERIC64,
+   PROCESSOR_max
+ };
+ 
+--- gcc/config/i386/i386.md.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config/i386/i386.md	2006-10-25 18:27:49.000000000 +0200
+@@ -185,7 +185,7 @@
+ 
+ ;; Processor type.  This attribute must exactly match the processor_type
+ ;; enumeration in i386.h.
+-(define_attr "cpu" "i386,i486,pentium,pentiumpro,k6,athlon,pentium4,k8,nocona"
++(define_attr "cpu" "i386,i486,pentium,pentiumpro,k6,athlon,pentium4,k8,nocona,generic32,generic64"
+   (const (symbol_ref "ix86_tune")))
+ 
+ ;; A basic instruction type.  Refinements due to arguments to be
+@@ -1505,8 +1505,12 @@
+ 	       (const_string "SI")
+ 	     (and (eq_attr "type" "imov")
+ 		  (and (eq_attr "alternative" "0,1")
+-		       (ne (symbol_ref "TARGET_PARTIAL_REG_DEPENDENCY")
+-			   (const_int 0))))
++		       (and (ne (symbol_ref "TARGET_PARTIAL_REG_DEPENDENCY")
++				(const_int 0))
++			    (and (eq (symbol_ref "optimize_size")
++				     (const_int 0))
++			    	 (eq (symbol_ref "TARGET_PARTIAL_REG_STALL")
++				     (const_int 0))))))
+ 	       (const_string "SI")
+ 	     ;; Avoid partial register stalls when not using QImode arithmetic
+ 	     (and (eq_attr "type" "imov")
+@@ -4146,7 +4150,7 @@
+   [(match_scratch:DF 2 "Y")
+    (set (match_operand:SSEMODEI24 0 "register_operand" "")
+ 	(fix:SSEMODEI24 (match_operand:DF 1 "memory_operand" "")))]
+-  "TARGET_K8 && !optimize_size"
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size"
+   [(set (match_dup 2) (match_dup 1))
+    (set (match_dup 0) (fix:SSEMODEI24 (match_dup 2)))]
+   "")
+@@ -4155,7 +4159,7 @@
+   [(match_scratch:SF 2 "x")
+    (set (match_operand:SSEMODEI24 0 "register_operand" "")
+ 	(fix:SSEMODEI24 (match_operand:SF 1 "memory_operand" "")))]
+-  "TARGET_K8 && !optimize_size"
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size"
+   [(set (match_dup 2) (match_dup 1))
+    (set (match_dup 0) (fix:SSEMODEI24 (match_dup 2)))]
+   "")
+@@ -20095,7 +20099,7 @@
+ 		   (mult:DI (match_operand:DI 1 "memory_operand" "")
+ 			    (match_operand:DI 2 "immediate_operand" "")))
+ 	      (clobber (reg:CC FLAGS_REG))])]
+-  "TARGET_K8 && !optimize_size
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size
+    && (GET_CODE (operands[2]) != CONST_INT
+        || !CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K'))"
+   [(set (match_dup 3) (match_dup 1))
+@@ -20109,7 +20113,7 @@
+ 		   (mult:SI (match_operand:SI 1 "memory_operand" "")
+ 			    (match_operand:SI 2 "immediate_operand" "")))
+ 	      (clobber (reg:CC FLAGS_REG))])]
+-  "TARGET_K8 && !optimize_size
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size
+    && (GET_CODE (operands[2]) != CONST_INT
+        || !CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K'))"
+   [(set (match_dup 3) (match_dup 1))
+@@ -20124,7 +20128,7 @@
+ 		     (mult:SI (match_operand:SI 1 "memory_operand" "")
+ 			      (match_operand:SI 2 "immediate_operand" ""))))
+ 	      (clobber (reg:CC FLAGS_REG))])]
+-  "TARGET_K8 && !optimize_size
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size
+    && (GET_CODE (operands[2]) != CONST_INT
+        || !CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K'))"
+   [(set (match_dup 3) (match_dup 1))
+@@ -20142,7 +20146,7 @@
+ 			    (match_operand:DI 2 "const_int_operand" "")))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (match_scratch:DI 3 "r")]
+-  "TARGET_K8 && !optimize_size
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size
+    && CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K')"
+   [(set (match_dup 3) (match_dup 2))
+    (parallel [(set (match_dup 0) (mult:DI (match_dup 0) (match_dup 3)))
+@@ -20158,7 +20162,7 @@
+ 			    (match_operand:SI 2 "const_int_operand" "")))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (match_scratch:SI 3 "r")]
+-  "TARGET_K8 && !optimize_size
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size
+    && CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K')"
+   [(set (match_dup 3) (match_dup 2))
+    (parallel [(set (match_dup 0) (mult:SI (match_dup 0) (match_dup 3)))
+@@ -20174,7 +20178,7 @@
+ 			    (match_operand:HI 2 "immediate_operand" "")))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (match_scratch:HI 3 "r")]
+-  "TARGET_K8 && !optimize_size"
++  "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size"
+   [(set (match_dup 3) (match_dup 2))
+    (parallel [(set (match_dup 0) (mult:HI (match_dup 0) (match_dup 3)))
+ 	      (clobber (reg:CC FLAGS_REG))])]
+--- gcc/config/i386/ppro.md.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config/i386/ppro.md	2006-10-25 18:27:49.000000000 +0200
+@@ -137,25 +137,25 @@
+ ;; on decoder 0, and say that it takes a little while before the result
+ ;; is available.
+ (define_insn_reservation "ppro_complex_insn" 6
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (eq_attr "type" "other,multi,call,callv,str"))
+ 			 "decoder0")
+ 
+ ;; imov with memory operands does not use the integer units.
+ (define_insn_reservation "ppro_imov" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "imov")))
+ 			 "decodern,(p0|p1)")
+ 
+ (define_insn_reservation "ppro_imov_load" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (eq_attr "type" "imov")))
+ 			 "decodern,p2")
+ 
+ (define_insn_reservation "ppro_imov_store" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (eq_attr "type" "imov")))
+ 			 "decoder0,p4+p3")
+@@ -163,20 +163,20 @@
+ ;; imovx always decodes to one uop, and also doesn't use the integer
+ ;; units if it has memory operands.
+ (define_insn_reservation "ppro_imovx" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "imovx")))
+ 			 "decodern,(p0|p1)")
+ 
+ (define_insn_reservation "ppro_imovx_load" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (eq_attr "type" "imovx")))
+ 			 "decodern,p2")
+ 
+ ;; lea executes on port 0 with latency one and throughput 1.
+ (define_insn_reservation "ppro_lea" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "lea")))
+ 			 "decodern,p0")
+@@ -185,19 +185,19 @@
+ ;; The load and store units need to be reserved when memory operands
+ ;; are involved.
+ (define_insn_reservation "ppro_shift_rotate" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "ishift,ishift1,rotate,rotate1")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_shift_rotate_mem" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "!none")
+ 				   (eq_attr "type" "ishift,ishift1,rotate,rotate1")))
+ 			 "decoder0,p2+p0,p4+p3")
+ 
+ (define_insn_reservation "ppro_cld" 2
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (eq_attr "type" "cld"))
+ 			 "decoder0,(p0+p1)*2")
+ 
+@@ -219,32 +219,32 @@
+ ;; results because we can assume these instructions can decode on all
+ ;; decoders.
+ (define_insn_reservation "ppro_branch" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "ibr")))
+ 			 "decodern,p1")
+ 
+ ;; ??? Indirect branches probably have worse latency than this.
+ (define_insn_reservation "ppro_indirect_branch" 6
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "!none")
+ 				   (eq_attr "type" "ibr")))
+ 			 "decoder0,p2+p1")
+ 
+ (define_insn_reservation "ppro_leave" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (eq_attr "type" "leave"))
+ 			 "decoder0,p2+(p0|p1),(p0|p1)")
+ 
+ ;; imul has throughput one, but latency 4, and can only execute on port 0.
+ (define_insn_reservation "ppro_imul" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "imul")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_imul_mem" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "!none")
+ 				   (eq_attr "type" "imul")))
+ 			 "decoder0,p2+p0")
+@@ -253,42 +253,42 @@
+ ;; QI, HI, and SI have issue latency 12, 21, and 37, respectively.
+ ;; These issue latencies are modelled via the ppro_div automaton.
+ (define_insn_reservation "ppro_idiv_QI" 19
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "type" "idiv"))))
+ 			 "decoder0,(p0+idiv)*2,(p0|p1)+idiv,idiv*9")
+ 
+ (define_insn_reservation "ppro_idiv_QI_load" 19
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "type" "idiv"))))
+ 			 "decoder0,p2+p0+idiv,p0+idiv,(p0|p1)+idiv,idiv*9")
+ 
+ (define_insn_reservation "ppro_idiv_HI" 23
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "HI")
+ 					(eq_attr "type" "idiv"))))
+ 			 "decoder0,(p0+idiv)*3,(p0|p1)+idiv,idiv*17")
+ 
+ (define_insn_reservation "ppro_idiv_HI_load" 23
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "HI")
+ 					(eq_attr "type" "idiv"))))
+ 			 "decoder0,p2+p0+idiv,p0+idiv,(p0|p1)+idiv,idiv*18")
+ 
+ (define_insn_reservation "ppro_idiv_SI" 39
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SI")
+ 					(eq_attr "type" "idiv"))))
+ 			 "decoder0,(p0+idiv)*3,(p0|p1)+idiv,idiv*33")
+ 
+ (define_insn_reservation "ppro_idiv_SI_load" 39
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SI")
+ 					(eq_attr "type" "idiv"))))
+@@ -299,85 +299,85 @@
+ ;;     has throughput "1/cycle (align with FADD)".  What do they
+ ;;     mean and how can we model that?
+ (define_insn_reservation "ppro_fop" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none,unknown")
+ 				   (eq_attr "type" "fop")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_fop_load" 5
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (eq_attr "type" "fop")))
+ 			 "decoder0,p2+p0,p0")
+ 
+ (define_insn_reservation "ppro_fop_store" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (eq_attr "type" "fop")))
+ 			 "decoder0,p0,p0,p0+p4+p3")
+ 
+ (define_insn_reservation "ppro_fop_both" 5
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "both")
+ 				   (eq_attr "type" "fop")))
+ 			 "decoder0,p2+p0,p0+p4+p3")
+ 
+ (define_insn_reservation "ppro_fsgn" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (eq_attr "type" "fsgn"))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_fistp" 5
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (eq_attr "type" "fistp"))
+ 			 "decoder0,p0*2,p4+p3")
+ 
+ (define_insn_reservation "ppro_fcmov" 2
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (eq_attr "type" "fcmov"))
+ 			 "decoder0,p0*2")
+ 
+ (define_insn_reservation "ppro_fcmp" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "fcmp")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_fcmp_load" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (eq_attr "type" "fcmp")))
+ 			 "decoder0,p2+p0")
+ 
+ (define_insn_reservation "ppro_fmov" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "fmov")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_fmov_load" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "!XF")
+ 					(eq_attr "type" "fmov"))))
+ 			 "decodern,p2")
+ 
+ (define_insn_reservation "ppro_fmov_XF_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "XF")
+ 					(eq_attr "type" "fmov"))))
+ 			 "decoder0,(p2+p0)*2")
+ 
+ (define_insn_reservation "ppro_fmov_store" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (and (eq_attr "mode" "!XF")
+ 					(eq_attr "type" "fmov"))))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_fmov_XF_store" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (and (eq_attr "mode" "XF")
+ 					(eq_attr "type" "fmov"))))
+@@ -386,13 +386,13 @@
+ ;; fmul executes on port 0 with latency 5.  It has issue latency 2,
+ ;; but we don't model this.
+ (define_insn_reservation "ppro_fmul" 5
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "fmul")))
+ 			 "decoder0,p0*2")
+ 
+ (define_insn_reservation "ppro_fmul_load" 6
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (eq_attr "type" "fmul")))
+ 			 "decoder0,p2+p0,p0")
+@@ -403,42 +403,42 @@
+ ;; that.  Throughput is equal to latency - 1, which we model using the
+ ;; ppro_div automaton.
+ (define_insn_reservation "ppro_fdiv_SF" 18
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "fdiv,fpspc"))))
+ 			 "decodern,p0+fdiv,fdiv*16")
+ 
+ (define_insn_reservation "ppro_fdiv_SF_load" 19
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "fdiv,fpspc"))))
+ 			 "decoder0,p2+p0+fdiv,fdiv*16")
+ 
+ (define_insn_reservation "ppro_fdiv_DF" 32
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "DF")
+ 					(eq_attr "type" "fdiv,fpspc"))))
+ 			 "decodern,p0+fdiv,fdiv*30")
+ 
+ (define_insn_reservation "ppro_fdiv_DF_load" 33
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "DF")
+ 					(eq_attr "type" "fdiv,fpspc"))))
+ 			 "decoder0,p2+p0+fdiv,fdiv*30")
+ 
+ (define_insn_reservation "ppro_fdiv_XF" 38
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "XF")
+ 					(eq_attr "type" "fdiv,fpspc"))))
+ 			 "decodern,p0+fdiv,fdiv*36")
+ 
+ (define_insn_reservation "ppro_fdiv_XF_load" 39
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "XF")
+ 					(eq_attr "type" "fdiv,fpspc"))))
+@@ -456,31 +456,31 @@
+ ;; so they behave as "simple" instructions that need no special modelling.
+ ;; We only have to model mmxshft and mmxmul.
+ (define_insn_reservation "ppro_mmx_shft" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "mmxshft")))
+ 			 "decodern,p1")
+ 
+ (define_insn_reservation "ppro_mmx_shft_load" 2
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "mmxshft")))
+ 			 "decoder0,p2+p1")
+ 
+ (define_insn_reservation "ppro_mmx_mul" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "mmxmul")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_mmx_mul_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (eq_attr "type" "mmxmul")))
+ 			 "decoder0,p2+p0")
+ 
+ (define_insn_reservation "ppro_sse_mmxcvt" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "mode" "DI")
+ 				   (eq_attr "type" "mmxcvt")))
+ 			 "decodern,p1")
+@@ -488,7 +488,7 @@
+ ;; FIXME: These are Pentium III only, but we cannot tell here if
+ ;; we're generating code for PentiumPro/Pentium II or Pentium III
+ ;; (define_insn_reservation "ppro_sse_mmxshft" 2
+-;;			 (and (eq_attr "cpu" "pentiumpro")
++;;			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ ;;			      (and (eq_attr "mode" "DI")
+ ;;				   (eq_attr "type" "mmxshft")))
+ ;;			 "decodern,p0")
+@@ -499,69 +499,69 @@
+ 
+ ;; The sfence instruction.
+ (define_insn_reservation "ppro_sse_sfence" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "unknown")
+ 				   (eq_attr "type" "sse")))
+ 			 "decoder0,p4+p3")
+ 
+ ;; FIXME: This reservation is all wrong when we're scheduling sqrtss.
+ (define_insn_reservation "ppro_sse_SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "mode" "SF")
+ 				   (eq_attr "type" "sse")))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_sse_add_SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "sseadd"))))
+ 			 "decodern,p1")
+ 
+ (define_insn_reservation "ppro_sse_add_SF_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "sseadd"))))
+ 			 "decoder0,p2+p1")
+ 
+ (define_insn_reservation "ppro_sse_cmp_SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssecmp"))))
+ 			 "decoder0,p1")
+ 
+ (define_insn_reservation "ppro_sse_cmp_SF_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssecmp"))))
+ 			 "decoder0,p2+p1")
+ 
+ (define_insn_reservation "ppro_sse_comi_SF" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssecomi"))))
+ 			 "decodern,p0")
+ 
+ (define_insn_reservation "ppro_sse_comi_SF_load" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssecomi"))))
+ 			 "decoder0,p2+p0")
+ 
+ (define_insn_reservation "ppro_sse_mul_SF" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssemul"))))
+ 			"decodern,p0")
+ 
+ (define_insn_reservation "ppro_sse_mul_SF_load" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssemul"))))
+@@ -569,109 +569,109 @@
+ 
+ ;; FIXME: ssediv doesn't close p0 for 17 cycles, surely???
+ (define_insn_reservation "ppro_sse_div_SF" 18
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssediv"))))
+ 			 "decoder0,p0*17")
+ 
+ (define_insn_reservation "ppro_sse_div_SF_load" 18
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssediv"))))
+ 			 "decoder0,(p2+p0),p0*16")
+ 
+ (define_insn_reservation "ppro_sse_icvt_SF" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "mode" "SF")
+ 				   (eq_attr "type" "sseicvt")))
+ 			 "decoder0,(p2+p1)*2")
+ 
+ (define_insn_reservation "ppro_sse_icvt_SI" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "mode" "SI")
+ 				   (eq_attr "type" "sseicvt")))
+ 			 "decoder0,(p2+p1)")
+ 
+ (define_insn_reservation "ppro_sse_mov_SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssemov"))))
+ 			 "decoder0,(p0|p1)")
+ 
+ (define_insn_reservation "ppro_sse_mov_SF_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssemov"))))
+ 			 "decoder0,p2+(p0|p1)")
+ 
+ (define_insn_reservation "ppro_sse_mov_SF_store" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (and (eq_attr "mode" "SF")
+ 					(eq_attr "type" "ssemov"))))
+ 			 "decoder0,p4+p3")
+ 
+ (define_insn_reservation "ppro_sse_V4SF" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "mode" "V4SF")
+ 				   (eq_attr "type" "sse")))
+ 			 "decoder0,p1*2")
+ 
+ (define_insn_reservation "ppro_sse_add_V4SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "sseadd"))))
+ 			 "decoder0,p1*2")
+ 
+ (define_insn_reservation "ppro_sse_add_V4SF_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "sseadd"))))
+ 			 "decoder0,(p2+p1)*2")
+ 
+ (define_insn_reservation "ppro_sse_cmp_V4SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssecmp"))))
+ 			 "decoder0,p1*2")
+ 
+ (define_insn_reservation "ppro_sse_cmp_V4SF_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssecmp"))))
+ 			 "decoder0,(p2+p1)*2")
+ 
+ (define_insn_reservation "ppro_sse_cvt_V4SF" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none,unknown")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssecvt"))))
+ 			 "decoder0,p1*2")
+ 
+ (define_insn_reservation "ppro_sse_cvt_V4SF_other" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "!none,unknown")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssecmp"))))
+ 			 "decoder0,p1,p4+p3")
+ 
+ (define_insn_reservation "ppro_sse_mul_V4SF" 5
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssemul"))))
+ 			"decoder0,p0*2")
+ 
+ (define_insn_reservation "ppro_sse_mul_V4SF_load" 5
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssemul"))))
+@@ -679,49 +679,49 @@
+ 
+ ;; FIXME: p0 really closed this long???
+ (define_insn_reservation "ppro_sse_div_V4SF" 48
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssediv"))))
+ 			 "decoder0,p0*34")
+ 
+ (define_insn_reservation "ppro_sse_div_V4SF_load" 48
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssediv"))))
+ 			 "decoder0,(p2+p0)*2,p0*32")
+ 
+ (define_insn_reservation "ppro_sse_log_V4SF" 2
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "sselog,sselog1"))))
+ 			 "decodern,p1")
+ 
+ (define_insn_reservation "ppro_sse_log_V4SF_load" 2
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "sselog,sselog1"))))
+ 			 "decoder0,(p2+p1)")
+ 
+ (define_insn_reservation "ppro_sse_mov_V4SF" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssemov"))))
+ 			 "decoder0,(p0|p1)*2")
+ 
+ (define_insn_reservation "ppro_sse_mov_V4SF_load" 2
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssemov"))))
+ 			 "decoder0,p2*2")
+ 
+ (define_insn_reservation "ppro_sse_mov_V4SF_store" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (and (eq_attr "mode" "V4SF")
+ 					(eq_attr "type" "ssemov"))))
+@@ -735,7 +735,7 @@
+ ;; reg-reg instructions produce 1 uop so they can be decoded on any of
+ ;; the three decoders.
+ (define_insn_reservation "ppro_insn" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "none,unknown")
+ 				   (eq_attr "type" "alu,alu1,negnot,incdec,icmp,test,setcc,icmov,push,pop,fxch,sseiadd,sseishft,sseimul,mmx,mmxadd,mmxcmp")))
+ 			 "decodern,(p0|p1)")
+@@ -743,13 +743,13 @@
+ ;; read-modify and register-memory instructions have 2 or three uops,
+ ;; so they have to be decoded on decoder0.
+ (define_insn_reservation "ppro_insn_load" 3
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "load")
+ 				   (eq_attr "type" "alu,alu1,negnot,incdec,icmp,test,setcc,icmov,push,pop,fxch,sseiadd,sseishft,sseimul,mmx,mmxadd,mmxcmp")))
+ 			 "decoder0,p2+(p0|p1)")
+ 
+ (define_insn_reservation "ppro_insn_store" 1
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "store")
+ 				   (eq_attr "type" "alu,alu1,negnot,incdec,icmp,test,setcc,icmov,push,pop,fxch,sseiadd,sseishft,sseimul,mmx,mmxadd,mmxcmp")))
+ 			 "decoder0,(p0|p1),p4+p3")
+@@ -757,7 +757,7 @@
+ ;; read-modify-store instructions produce 4 uops so they have to be
+ ;; decoded on decoder0 as well.
+ (define_insn_reservation "ppro_insn_both" 4
+-			 (and (eq_attr "cpu" "pentiumpro")
++			 (and (eq_attr "cpu" "pentiumpro,generic32")
+ 			      (and (eq_attr "memory" "both")
+ 				   (eq_attr "type" "alu,alu1,negnot,incdec,icmp,test,setcc,icmov,push,pop,fxch,sseiadd,sseishft,sseimul,mmx,mmxadd,mmxcmp")))
+ 			 "decoder0,p2+(p0|p1),p4+p3")
+--- gcc/config/i386/predicates.md.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config/i386/predicates.md	2006-10-25 18:27:49.000000000 +0200
+@@ -622,7 +622,7 @@
+ {
+   /* On Pentium4, the inc and dec operations causes extra dependency on flag
+      registers, since carry flag is not set.  */
+-  if ((TARGET_PENTIUM4 || TARGET_NOCONA) && !optimize_size)
++  if (!TARGET_USE_INCDEC && !optimize_size)
+     return 0;
+   return op == const1_rtx || op == constm1_rtx;
+ })
+@@ -701,6 +701,11 @@
+   if (GET_CODE (op) != MEM)
+     return 1;
+ 
++  /* All patterns using aligned_operand on memory operands ends up
++     in promoting memory operand to 64bit and thus causing memory mismatch.  */
++  if (TARGET_MEMORY_MISMATCH_STALL && !optimize_size)
++    return 0;
++
+   /* Don't even try to do any aligned optimizations with volatiles.  */
+   if (MEM_VOLATILE_P (op))
+     return 0;
+--- gcc/config.gcc.orig	2006-10-25 18:27:35.000000000 +0200
++++ gcc/config.gcc	2006-10-25 18:27:49.000000000 +0200
+@@ -2367,6 +2367,9 @@
+       # A Cirrus ARM variant.
+       with_cpu="ep9312"
+       ;;
++    i386-*-*)
++      with_cpu=i386
++      ;;
+     i486-*-*)
+       with_cpu=i486
+       ;;
+@@ -2418,13 +2421,26 @@
+         pentium_m-*)
+           with_cpu=pentium-m
+           ;;
+-        *)
++        pentiumpro-*)
+           with_cpu=pentiumpro
+           ;;
++        *)
++          with_cpu=generic
++          ;;
+       esac
+       ;;
+     x86_64-*-*)
+-      with_cpu=k8
++      case ${target_noncanonical} in
++        k8-*|opteron-*|athlon_64-*)
++          with_cpu=k8
++          ;;
++        nocona-*)
++          with_cpu=nocona
++          ;;
++        *)
++          with_cpu=generic
++          ;;
++      esac
+       ;;
+     alphaev6[78]*-*-*)
+       with_cpu=ev67
+@@ -2630,13 +2646,21 @@
+ 		for which in arch cpu tune; do
+ 			eval "val=\$with_$which"
+ 			case ${val} in
+-			"" | i386 | i486 \
++			i386 | i486 \
+ 			| i586 | pentium | pentium-mmx | winchip-c6 | winchip2 \
+ 			| c3 | c3-2 | i686 | pentiumpro | pentium2 | pentium3 \
+ 			| pentium4 | k6 | k6-2 | k6-3 | athlon | athlon-tbird \
+-			| athlon-4 | athlon-xp | athlon-mp | k8 | opteron \
+-			| athlon64 | athlon-fx | prescott | pentium-m \
+-			| pentium4m | pentium3m| nocona)
++			| athlon-4 | athlon-xp | athlon-mp \
++			| prescott | pentium-m | pentium4m | pentium3m)
++				case "${target}" in
++				  x86_64-*-*)
++				      echo "CPU given in --with-$which=$val doesn't support 64bit mode." 1>&2
++				      exit 1
++				      ;;
++				esac
++				# OK
++				;;
++			"" | k8 | opteron | athlon64 | athlon-fx | nocona | generic)
+ 				# OK
+ 				;;
+ 			*)
--- gcc-4.1-4.1.2.orig/debian/patches/hppa-cbranch2.dpatch
+++ gcc-4.1-4.1.2/debian/patches/hppa-cbranch2.dpatch
@@ -0,0 +1,626 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Fix for PR target/26743 (hppa)
+# DP: Backport from gcc trunk 2006-04-12 by tausq@debian.org
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+From: "John David Anglin" <dave@hiauly1.hia.nrc.ca>
+Sender: gcc-patches-owner@gcc.gnu.org
+To: gcc-patches@gcc.gnu.org
+Subject: [committed] Define symbolic constants for maximum branch offsets in pa.md
+Date: Tue, 11 Apr 2006 14:34:18 -0400 (EDT)
+
+The enclosed change is to facilitate changing the maximum branch
+offsets.  There should be no change in functionality.
+
+Tested on hppa-unknown-linux-gnu.  Applied to trunk.
+
+Dave
+
+2006-04-11  John David Anglin  <dava.anglin@nrc-cnrc.gc.ca>
+
+	* pa.md (MAX_12BIT_OFFSET, MAX_17BIT_OFFSET): Define and use new
+	symbolic constants in branch patterns.
+
+--- gcc/config/pa/pa.md.orig	2006-04-19 11:33:06.396048656 +0200
++++ gcc/config/pa/pa.md	2006-04-19 11:35:52.790752816 +0200
+@@ -1,6 +1,6 @@
+ ;;- Machine description for HP PA-RISC architecture for GCC compiler
+ ;;   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+-;;   2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++;;   2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ ;;   Contributed by the Center for Software Science at the University
+ ;;   of Utah.
+ 
+@@ -52,6 +52,16 @@
+    (UNSPECV_LONGJMP	5)	; builtin_longjmp
+   ])
+ 
++;; Maximum pc-relative branch offsets.
++
++;; These numbers are a bit smaller than the maximum allowable offsets
++;; so that a few instructions may be inserted before the actual branch.
++
++(define_constants
++  [(MAX_12BIT_OFFSET     8184)	; 12-bit branch
++   (MAX_17BIT_OFFSET   262100)	; 17-bit branch
++  ])
++
+ ;; Insn type.  Used to default other attribute values.
+ 
+ ;; type "unary" insns have one input operand (1) and one output operand (0)
+@@ -1713,10 +1723,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -1742,10 +1752,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -1769,10 +1779,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -1798,10 +1808,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -1824,10 +1834,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -1853,10 +1863,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -1882,10 +1892,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -1910,10 +1920,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -1938,10 +1948,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -1966,10 +1976,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -1994,10 +2004,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2022,10 +2032,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2050,10 +2060,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2078,10 +2088,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2107,10 +2117,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2135,10 +2145,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2163,10 +2173,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2191,10 +2201,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2219,10 +2229,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2247,10 +2257,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2275,10 +2285,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2303,10 +2313,10 @@
+ [(set_attr "type" "cbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -2355,7 +2365,7 @@
+ [(set_attr "type" "fbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 32)
+@@ -2399,7 +2409,7 @@
+ [(set_attr "type" "fbranch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 12)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 28)
+@@ -7142,11 +7152,11 @@
+     (cond [(eq (symbol_ref "jump_in_call_delay (insn)") (const_int 1))
+ 	   (if_then_else (lt (abs (minus (match_dup 0)
+ 					 (plus (pc) (const_int 8))))
+-			     (const_int 8184))
++			     (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (const_int 8))
+ 	   (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 20)
+@@ -8968,10 +8978,10 @@
+ ;; Short branch has length of 4
+ ;; Long branch has length of 8, 20, 24 or 28
+ 	(cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -8984,10 +8994,10 @@
+ 	(if_then_else (eq_attr "alternative" "1")
+ 	  (if_then_else (lt (match_dup 3) (pc))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 24))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 24)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 24))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 28)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 44)
+@@ -8995,10 +9005,10 @@
+ 		    (const_int 40)]
+ 		  (const_int 48))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 24)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 28)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 44)
+@@ -9010,10 +9020,10 @@
+ ;; Extra goo to deal with additional reload insns.
+ 	(if_then_else (lt (match_dup 3) (pc))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 12)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 16)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 32)
+@@ -9021,10 +9031,10 @@
+ 		    (const_int 28)]
+ 		  (const_int 36))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 12)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 16)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 32)
+@@ -9051,10 +9061,10 @@
+ ;; Short branch has length of 4
+ ;; Long branch has length of 8, 20, 24 or 28
+         (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -9067,10 +9077,10 @@
+ 	(if_then_else (eq_attr "alternative" "1")
+ 	  (if_then_else (lt (match_dup 3) (pc))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 12)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 16)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 32)
+@@ -9078,10 +9088,10 @@
+ 		    (const_int 28)]
+ 		  (const_int 36))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 12)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 16)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 32)
+@@ -9092,10 +9102,10 @@
+ ;; Loop counter in memory or sar case.
+ ;; Extra goo to deal with additional reload insns.
+ 	(cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		   (const_int 8184))
++		   (const_int MAX_12BIT_OFFSET))
+ 		(const_int 8)
+ 		(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		  (const_int 262100))
++		  (const_int MAX_17BIT_OFFSET))
+ 		(const_int 12)
+ 		(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		(const_int 28)
+@@ -9123,10 +9133,10 @@
+ ;; Short branch has length of 4
+ ;; Long branch has length of 8
+         (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -9139,10 +9149,10 @@
+ 	(if_then_else (eq_attr "alternative" "1")
+ 	  (if_then_else (lt (match_dup 3) (pc))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 12)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 12))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 16)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 32)
+@@ -9150,10 +9160,10 @@
+ 		    (const_int 28)]
+ 		  (const_int 36))
+ 	     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 8184))
++		      (const_int MAX_12BIT_OFFSET))
+ 		    (const_int 12)
+ 		    (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		      (const_int 262100))
++		      (const_int MAX_17BIT_OFFSET))
+ 		    (const_int 16)
+ 		    (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		    (const_int 32)
+@@ -9164,10 +9174,10 @@
+ ;; Loop counter in memory or SAR case.
+ ;; Extra goo to deal with additional reload insns.
+ 	(cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		   (const_int 8184))
++		   (const_int MAX_12BIT_OFFSET))
+ 		(const_int 8)
+ 		(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-		  (const_int 262100))
++		  (const_int MAX_17BIT_OFFSET))
+ 		(const_int 12)
+ 		(ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 		(const_int 28)
+@@ -9188,10 +9198,10 @@
+ [(set_attr "type" "parallel_branch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 3) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -9211,10 +9221,10 @@
+ [(set_attr "type" "parallel_branch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -9234,10 +9244,10 @@
+ [(set_attr "type" "parallel_branch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -9257,10 +9267,10 @@
+ [(set_attr "type" "parallel_branch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
+@@ -9280,10 +9290,10 @@
+ [(set_attr "type" "parallel_branch")
+  (set (attr "length")
+     (cond [(lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 8184))
++	       (const_int MAX_12BIT_OFFSET))
+ 	   (const_int 4)
+ 	   (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))
+-	       (const_int 262100))
++	       (const_int MAX_17BIT_OFFSET))
+ 	   (const_int 8)
+ 	   (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
+ 	   (const_int 24)
--- gcc-4.1-4.1.2.orig/debian/patches/gcc-version.dpatch
+++ gcc-4.1-4.1.2/debian/patches/gcc-version.dpatch
@@ -0,0 +1,35 @@
+#! /bin/sh -e
+
+# DP: Add package identification to the gcc version string
+
+pkgversion=
+if [ -n "$DEB_VERSION" ]; then
+    pkgversion=" $DEB_VERSION"
+fi
+
+dist=Debian
+dist=$(lsb_release -is)
+
+dir=gcc
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    dir=$3/gcc
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+	sed -e "/#define VERSUFFIX/s/\".*/\" ($dist$pkgversion)\"/" \
+	  $dir/version.c > $dir/version.c.new \
+	    && mv -f $dir/version.c.new $dir/version.c
+	;;
+    -unpatch)
+	sed -e '/#define VERSUFFIX/s/".*/""/' \
+	  $dir/version.c > $dir/version.c.new \
+	    && mv -f $dir/version.c.new $dir/version.c
+	;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1
+esac
+exit 0
--- gcc-4.1-4.1.2.orig/debian/patches/ada-driver-check.dpatch
+++ gcc-4.1-4.1.2/debian/patches/ada-driver-check.dpatch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+
+# DP: Simplify Ada driver check (we always build using the required
+# DP: Ada version. Needed for warnings on alpha.
+
+dir=./
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	cd ${dir} && autoconf2.13
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+	rm -f ${dir}configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- config/acx.m4~	2005-12-15 14:59:17.000000000 +0100
++++ config/acx.m4	2006-07-08 17:01:44.325594336 +0200
+@@ -195,7 +195,7 @@
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file.  So we must check
+ # if an object file was really produced to guard against this.
+-errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
++errors=`(${CC} -c conftest.adb) 2>/dev/null || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+   acx_cv_cc_gcc_supports_ada=yes
+ fi
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-peephole-note.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-peephole-note.dpatch
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: don't choke on notes while reinserting REG_EH_REGION notes
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/recog.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+Index: gcc-4.1/gcc/recog.c
+===================================================================
+--- gcc-4.1.orig/gcc/recog.c
++++ gcc-4.1/gcc/recog.c
+@@ -3215,6 +3215,7 @@ peephole2_optimize (FILE *dump_file ATTR
+ 		      for (x = try ; x != before_try ; x = PREV_INSN (x))
+ 			if (CALL_P (x)
+ 			    || (flag_non_call_exceptions
++				&& INSN_P (x)
+ 				&& may_trap_p (PATTERN (x))
+ 				&& !find_reg_note (x, REG_EH_REGION, NULL)))
+ 			  {
--- gcc-4.1-4.1.2.orig/debian/patches/m68k-fpcompare.dpatch
+++ gcc-4.1-4.1.2/debian/patches/m68k-fpcompare.dpatch
@@ -0,0 +1,176 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: bring fp compare early to its desired form to relieve reload,
+# DP: allow any fp constant during and after reload (even special constants)
+# DP: in case reload can't find a free register for them.
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+---
+
+ gcc/config/m68k/m68k.c        |    3 +
+ gcc/config/m68k/m68k.md       |   86 ++++++------------------------------------
+ gcc/config/m68k/predicates.md |    7 +++
+ 3 files changed, 24 insertions(+), 72 deletions(-)
+
+Index: gcc-4.1/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.c
++++ gcc-4.1/gcc/config/m68k/m68k.c
+@@ -2467,6 +2467,9 @@ notice_update_cc (rtx exp, rtx insn)
+   if (((cc_status.value1 && FP_REG_P (cc_status.value1))
+        || (cc_status.value2 && FP_REG_P (cc_status.value2))))
+     cc_status.flags = CC_IN_68881;
++  if (cc_status.value2 && GET_CODE (cc_status.value2) == COMPARE
++      && GET_MODE_CLASS (GET_MODE (XEXP (cc_status.value2, 0))) == MODE_FLOAT)
++    cc_status.flags = CC_IN_68881;
+ }
+ 
+ const char *
+Index: gcc-4.1/gcc/config/m68k/m68k.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/m68k.md
++++ gcc-4.1/gcc/config/m68k/m68k.md
+@@ -408,59 +408,26 @@
+   return "cmp%.b %d1,%d0";
+ })
+ 
+-(define_expand "cmpdf"
+-  [(set (cc0)
+-	(compare (match_operand:DF 0 "general_operand" "")
+-		 (match_operand:DF 1 "general_operand" "")))]
+-  "TARGET_68881"
+-{
+-  m68k_last_compare_had_fp_operands = 1;
+-})
++(define_mode_macro F [XF DF SF])
++(define_mode_attr F_fmt [(XF "%.x") (DF "%.d") (SF "%.s")])
++(define_mode_attr F_c [(XF "mF") (DF "mF") (SF "mdF")])
+ 
+-(define_insn ""
++(define_expand "cmp<mode>"
+   [(set (cc0)
+-	(compare (match_operand:DF 0 "general_operand" "f,mG")
+-		 (match_operand:DF 1 "general_operand" "fmG,f")))]
++	(compare (match_operand:F 0 "register_operand" "")
++		 (match_operand:F 1 "fp_src_operand" "")))]
+   "TARGET_68881"
+-{
+-  cc_status.flags = CC_IN_68881;
+-  if (REG_P (operands[0]))
+-    {
+-      if (REG_P (operands[1]))
+-	return "fcmp%.x %1,%0";
+-      else
+-        return "fcmp%.d %f1,%0";
+-    }
+-  cc_status.flags |= CC_REVERSED;
+-  return "fcmp%.d %f0,%1";
+-})
+-
+-(define_expand "cmpsf"
+- [(set (cc0)
+-       (compare (match_operand:SF 0 "general_operand" "")
+-		(match_operand:SF 1 "general_operand" "")))]
+- "TARGET_68881"
+-{
+-  m68k_last_compare_had_fp_operands = 1;
+-})
++  "m68k_last_compare_had_fp_operands = 1;")
+ 
+-(define_insn ""
++(define_insn "*cmp<mode>"
+   [(set (cc0)
+-	(compare (match_operand:SF 0 "general_operand" "f,mdG")
+-		 (match_operand:SF 1 "general_operand" "fmdG,f")))]
++	(compare (match_operand:F 0 "register_operand" "f,f")
++		 (match_operand:F 1 "fp_src_operand" "f,<F_c>")))]
+   "TARGET_68881"
+-{
+-  cc_status.flags = CC_IN_68881;
+-  if (FP_REG_P (operands[0]))
+-    {
+-      if (FP_REG_P (operands[1]))
+-	return "fcmp%.x %1,%0";
+-      else
+-        return "fcmp%.s %f1,%0";
+-    }
+-  cc_status.flags |= CC_REVERSED;
+-  return "fcmp%.s %f0,%1";
+-})
++  "@
++   fcmp%.x %1,%0
++   fcmp<F_fmt> %f1,%0")
++
+ 
+ ;; Recognizers for btst instructions.
+ 
+@@ -6819,31 +6786,6 @@
+   return "ftst%.x %0";
+ })
+ 
+-(define_expand "cmpxf"
+-  [(set (cc0)
+-	(compare (match_operand:XF 0 "nonimmediate_operand" "")
+-		 (match_operand:XF 1 "nonimmediate_operand" "")))]
+-  "TARGET_68881"
+-  "m68k_last_compare_had_fp_operands = 1;")
+-
+-(define_insn ""
+-  [(set (cc0)
+-	(compare (match_operand:XF 0 "nonimmediate_operand" "f,m")
+-		 (match_operand:XF 1 "nonimmediate_operand" "fm,f")))]
+-  "TARGET_68881"
+-{
+-  cc_status.flags = CC_IN_68881;
+-  if (REG_P (operands[0]))
+-    {
+-      if (REG_P (operands[1]))
+-	return "fcmp%.x %1,%0";
+-      else
+-        return "fcmp%.x %f1,%0";
+-    }
+-  cc_status.flags |= CC_REVERSED;
+-  return "fcmp%.x %f0,%1";
+-})
+-
+ (define_insn "extendsfxf2"
+   [(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f")
+ 	(float_extend:XF (match_operand:SF 1 "general_operand" "f,rmF")))]
+Index: gcc-4.1/gcc/config/m68k/predicates.md
+===================================================================
+--- gcc-4.1.orig/gcc/config/m68k/predicates.md
++++ gcc-4.1/gcc/config/m68k/predicates.md
+@@ -194,3 +194,10 @@
+ {
+   return MEM_P (op) && GET_CODE (XEXP (op, 0)) == PRE_DEC;
+ })
++
++(define_predicate "fp_src_operand"
++  (match_operand 0 "general_src_operand")
++{
++  return !CONSTANT_P (op) || !standard_68881_constant_p (op)
++	 || reload_completed || reload_in_progress;
++})
--- gcc-4.1-4.1.2.orig/debian/patches/svn-updates.dpatch
+++ gcc-4.1-4.1.2/debian/patches/svn-updates.dpatch
@@ -0,0 +1,43694 @@
+#! /bin/sh -e
+
+# DP: SVN updates from the 4.1 branch upto 20081201.
+
+last_updated()
+{
+	cat > ${dir}LAST_UPDATED <<EOF
+Mon Dec  1 22:59:46 CET 2008
+Mon Dec  1 21:59:46 UTC 2008 (revision 142335)
+EOF
+}
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+	touch ${dir}libjava/testsuite/libjava.jni/PR28178.out
+	last_updated
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+# diff -urN --exclude=.svn gcc_4_1_2_release gcc-4_1-branch
+# svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_1_2_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_1-branch
+# remove the boehm-gc and libjava changes
+
+Index: configure
+===================================================================
+--- configure	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ configure	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3549,7 +3549,7 @@
+     # For an installed makeinfo, we require it to be from texinfo 4.2 or
+     # higher, else we use the "missing" dummy.
+     if ${MAKEINFO} --version \
+-       | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])' >/dev/null 2>&1; then
++       | egrep 'texinfo[^0-9]*(4\.([2-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
+       :
+     else
+       MAKEINFO="$MISSING makeinfo"
+
+Property changes on: compile
+___________________________________________________________________
+Added: svn:executable
+   + *
+
+Index: gcc/tree-vrp.c
+===================================================================
+--- gcc/tree-vrp.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-vrp.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -106,6 +106,10 @@
+ 
+   gcc_assert (TREE_CODE (arg) == PARM_DECL && POINTER_TYPE_P (TREE_TYPE (arg)));
+ 
++  /* The static chain decl is always non null.  */
++  if (arg == cfun->static_chain_decl)
++    return true;
++
+   fntype = TREE_TYPE (current_function_decl);
+   attrs = lookup_attribute ("nonnull", TYPE_ATTRIBUTES (fntype));
+ 
+@@ -649,81 +653,6 @@
+ }
+ 
+ 
+-/* When extracting ranges from X_i = ASSERT_EXPR <Y_j, pred>, we will
+-   initially consider X_i and Y_j equivalent, so the equivalence set
+-   of Y_j is added to the equivalence set of X_i.  However, it is
+-   possible to have a chain of ASSERT_EXPRs whose predicates are
+-   actually incompatible.  This is usually the result of nesting of
+-   contradictory if-then-else statements.  For instance, in PR 24670:
+-
+-   	count_4 has range [-INF, 63]
+-
+-   	if (count_4 != 0)
+-	  {
+-	    count_19 = ASSERT_EXPR <count_4, count_4 != 0>
+-	    if (count_19 > 63)
+-	      {
+-	        count_18 = ASSERT_EXPR <count_19, count_19 > 63>
+-		if (count_18 <= 63)
+-		  ...
+-	      }
+-	  }
+-
+-   Notice that 'if (count_19 > 63)' is trivially false and will be
+-   folded out at the end.  However, during propagation, the flowgraph
+-   is not cleaned up and so, VRP will evaluate predicates more
+-   predicates than necessary, so it must support these
+-   inconsistencies.  The problem here is that because of the chaining
+-   of ASSERT_EXPRs, the equivalency set for count_18 includes count_4.
+-   Since count_4 has an incompatible range, we ICE when evaluating the
+-   ranges in the equivalency set.  So, we need to remove count_4 from
+-   it.  */
+-
+-static void
+-fix_equivalence_set (value_range_t *vr_p)
+-{
+-  bitmap_iterator bi;
+-  unsigned i;
+-  bitmap e = vr_p->equiv;
+-  bitmap to_remove = BITMAP_ALLOC (NULL);
+-
+-  /* Only detect inconsistencies on numeric ranges.  */
+-  if (vr_p->type == VR_VARYING
+-      || vr_p->type == VR_UNDEFINED
+-      || symbolic_range_p (vr_p))
+-    return;
+-
+-  EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
+-    {
+-      value_range_t *equiv_vr = vr_value[i];
+-
+-      if (equiv_vr->type == VR_VARYING
+-	  || equiv_vr->type == VR_UNDEFINED
+-	  || symbolic_range_p (equiv_vr))
+-	continue;
+-
+-      if (equiv_vr->type == VR_RANGE
+-	  && vr_p->type == VR_RANGE
+-	  && !value_ranges_intersect_p (vr_p, equiv_vr))
+-	bitmap_set_bit (to_remove, i);
+-      else if ((equiv_vr->type == VR_RANGE && vr_p->type == VR_ANTI_RANGE)
+-	       || (equiv_vr->type == VR_ANTI_RANGE && vr_p->type == VR_RANGE))
+-	{
+-	  /* A range and an anti-range have an empty intersection if
+-	     their end points are the same.  FIXME,
+-	     value_ranges_intersect_p should handle this
+-	     automatically.  */
+-	  if (compare_values (equiv_vr->min, vr_p->min) == 0
+-	      && compare_values (equiv_vr->max, vr_p->max) == 0)
+-	    bitmap_set_bit (to_remove, i);
+-	}
+-    }
+-
+-  bitmap_and_compl_into (vr_p->equiv, to_remove);
+-  BITMAP_FREE (to_remove);
+-}
+-
+-
+ /* Extract value range information from an ASSERT_EXPR EXPR and store
+    it in *VR_P.  */
+ 
+@@ -1020,7 +949,7 @@
+       || var_vr->type == VR_UNDEFINED
+       || symbolic_range_p (vr_p)
+       || symbolic_range_p (var_vr))
+-    goto done;
++    return;
+ 
+   if (var_vr->type == VR_RANGE && vr_p->type == VR_RANGE)
+     {
+@@ -1064,11 +993,6 @@
+ 	  && compare_values (var_vr->max, vr_p->max) == 0)
+ 	set_value_range_to_varying (vr_p);
+     }
+-
+-  /* Remove names from the equivalence set that have ranges
+-     incompatible with VR_P.  */
+-done:
+-  fix_equivalence_set (vr_p);
+ }
+ 
+ 
+@@ -1593,14 +1517,21 @@
+   if (code == NEGATE_EXPR
+       && !TYPE_UNSIGNED (TREE_TYPE (expr)))
+     {
+-      /* NEGATE_EXPR flips the range around.  */
+-      min = (vr0.max == TYPE_MAX_VALUE (TREE_TYPE (expr)) && !flag_wrapv)
+-	     ? TYPE_MIN_VALUE (TREE_TYPE (expr))
+-	     : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
++      /* NEGATE_EXPR flips the range around.  We need to treat
++	 TYPE_MIN_VALUE specially dependent on wrapping, range type
++	 and if it was used as minimum or maximum value:  
++	  -~[MIN, MIN] == ~[MIN, MIN]
++	  -[MIN, 0] == [0, MAX]  for -fno-wrapv
++	  -[MIN, 0] == [0, MIN]  for -fwrapv (will be set to varying later)  */
++      min = tree_int_cst_equal (vr0.max, TYPE_MIN_VALUE (TREE_TYPE (expr)))
++	    ? TYPE_MIN_VALUE (TREE_TYPE (expr))
++	    : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
+ 
+-      max = (vr0.min == TYPE_MIN_VALUE (TREE_TYPE (expr)) && !flag_wrapv)
+-	     ? TYPE_MAX_VALUE (TREE_TYPE (expr))
+-	     : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
++      max = tree_int_cst_equal (vr0.min, TYPE_MIN_VALUE (TREE_TYPE (expr)))
++	    ? (vr0.type == VR_ANTI_RANGE || flag_wrapv
++	       ? TYPE_MIN_VALUE (TREE_TYPE (expr))
++	       : TYPE_MAX_VALUE (TREE_TYPE (expr)))
++	    : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
+     }
+   else if (code == ABS_EXPR
+            && !TYPE_UNSIGNED (TREE_TYPE (expr)))
+@@ -1609,9 +1540,9 @@
+          useful range.  */
+       if (flag_wrapv
+ 	  && ((vr0.type == VR_RANGE
+-	       && vr0.min == TYPE_MIN_VALUE (TREE_TYPE (expr)))
++	       && tree_int_cst_equal (vr0.min, TYPE_MIN_VALUE (TREE_TYPE (expr))))
+ 	      || (vr0.type == VR_ANTI_RANGE
+-	          && vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr))
++	          && !tree_int_cst_equal (vr0.min, TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ 		  && !range_includes_zero_p (&vr0))))
+ 	{
+ 	  set_value_range_to_varying (vr);
+@@ -1620,7 +1551,7 @@
+ 	
+       /* ABS_EXPR may flip the range around, if the original range
+ 	 included negative values.  */
+-      min = (vr0.min == TYPE_MIN_VALUE (TREE_TYPE (expr)))
++      min = (tree_int_cst_equal (vr0.min, TYPE_MIN_VALUE (TREE_TYPE (expr))))
+ 	    ? TYPE_MAX_VALUE (TREE_TYPE (expr))
+ 	    : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
+ 
+@@ -1644,7 +1575,7 @@
+ 	         or ~[-INF + 1, min (abs(MIN), abs(MAX))] when
+ 		 flag_wrapv is set and the original anti-range doesn't include
+ 	         TYPE_MIN_VALUE, remember -TYPE_MIN_VALUE = TYPE_MIN_VALUE.  */
+-	      min = (flag_wrapv && vr0.min != type_min_value
++	      min = (flag_wrapv && !tree_int_cst_equal (vr0.min, type_min_value)
+ 		     ? int_const_binop (PLUS_EXPR,
+ 					type_min_value,
+ 					integer_one_node, 0)
+@@ -2153,6 +2084,7 @@
+ debug_value_range (value_range_t *vr)
+ {
+   dump_value_range (stderr, vr);
++  fprintf (stderr, "\n");
+ }
+ 
+ 
+@@ -3267,8 +3199,16 @@
+       t = compare_range_with_value (comp, &equiv_vr, val);
+       if (t)
+ 	{
+-	  /* All the ranges should compare the same against VAL.  */
+-	  gcc_assert (retval == NULL || t == retval);
++	  /* If we get different answers from different members
++	     of the equivalence set this check must be in a dead
++	     code region.  Folding it to a trap representation
++	     would be correct here.  For now just return don't-know.  */
++	  if (retval != NULL
++	      && t != retval)
++	    {
++	      retval = NULL_TREE;
++	      break;
++	    }
+ 	  retval = t;
+ 	}
+     }
+@@ -3350,9 +3290,17 @@
+ 	  t = compare_ranges (comp, &vr1, &vr2);
+ 	  if (t)
+ 	    {
+-	      /* All the ranges in the equivalent sets should compare
+-		 the same.  */
+-	      gcc_assert (retval == NULL || t == retval);
++	      /* If we get different answers from different members
++		 of the equivalence set this check must be in a dead
++		 code region.  Folding it to a trap representation
++		 would be correct here.  For now just return don't-know.  */
++	      if (retval != NULL
++		  && t != retval)
++		{
++		  bitmap_clear_bit (e1, SSA_NAME_VERSION (n1));
++		  bitmap_clear_bit (e2, SSA_NAME_VERSION (n2));
++		  return NULL_TREE;
++		}
+ 	      retval = t;
+ 	    }
+ 	}
+Index: gcc/DATESTAMP
+===================================================================
+--- gcc/DATESTAMP	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/DATESTAMP	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1 +1 @@
+-20070214
++20080704
+Index: gcc/tree.c
+===================================================================
+--- gcc/tree.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3288,8 +3288,9 @@
+ 	  hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
+ 	  break;
+ 	case ARRAY_TYPE:
+-	  hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
+-					    hashcode);
++	  if (TYPE_DOMAIN (ntype))
++	    hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
++					      hashcode);
+ 	  break;
+ 	case INTEGER_TYPE:
+ 	  hashcode = iterative_hash_object
+Index: gcc/reload.c
+===================================================================
+--- gcc/reload.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/reload.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1210,7 +1210,7 @@
+ 
+   /* If IN appears in OUT, we can't share any input-only reload for IN.  */
+   if (in != 0 && out != 0 && MEM_P (out)
+-      && (REG_P (in) || MEM_P (in))
++      && (REG_P (in) || MEM_P (in) || GET_CODE (in) == PLUS)
+       && reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0)))
+     dont_share = 1;
+ 
+@@ -1867,7 +1867,12 @@
+ 		    ||  ! (TEST_HARD_REG_BIT
+ 			   (reg_class_contents[(int) rld[secondary_out].class],
+ 			    REGNO (XEXP (note, 0)))))))
+-	&& ! fixed_regs[REGNO (XEXP (note, 0))])
++	&& ! fixed_regs[REGNO (XEXP (note, 0))]
++	/* Check that we don't use a hardreg for an uninitialized
++	   pseudo.  See also find_dummy_reload().  */
++	&& (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
++	    || ! bitmap_bit_p (ENTRY_BLOCK_PTR->il.rtl->global_live_at_end,
++			       ORIGINAL_REGNO (XEXP (note, 0)))))
+       {
+ 	rld[output_reload].reg_rtx
+ 	  = gen_rtx_REG (rld[output_reload].outmode,
+@@ -5962,6 +5967,8 @@
+ 	      unsigned outer_size = GET_MODE_SIZE (GET_MODE (x));
+ 	      unsigned inner_size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
+ 	      int offset;
++	      enum machine_mode orig_mode = GET_MODE (tem);
++	      int reloaded;
+ 
+ 	      /* For big-endian paradoxical subregs, SUBREG_BYTE does not
+ 		 hold the correct (negative) byte offset.  */
+@@ -5994,10 +6001,29 @@
+ 		    return x;
+ 		}
+ 
+-	      find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
+-				    &XEXP (tem, 0), opnum, type,
+-				    ind_levels, insn);
++	      reloaded = find_reloads_address (GET_MODE (tem), &tem,
++					       XEXP (tem, 0), &XEXP (tem, 0),
++					       opnum, type, ind_levels, insn);
+ 
++	      /* For some processors an address may be valid in the
++		 original mode but not in a smaller mode.  For
++		 example, ARM accepts a scaled index register in
++		 SImode but not in HImode.  find_reloads_address
++		 assumes that we pass it a valid address, and doesn't
++		 force a reload.  This will probably be fine if
++		 find_reloads_address finds some reloads.  But if it
++		 doesn't find any, then we may have just converted a
++		 valid address into an invalid one.  Check for that
++		 here.  */
++	      if (reloaded != 1
++		  && strict_memory_address_p (orig_mode, XEXP (tem, 0))
++		  && !strict_memory_address_p (GET_MODE (tem),
++					       XEXP (tem, 0)))
++		push_reload (XEXP (tem, 0), NULL_RTX, &XEXP (tem, 0), (rtx*) 0,
++			     MODE_BASE_REG_CLASS (GET_MODE (tem)),
++			     GET_MODE (XEXP (tem, 0)), VOIDmode, 0, 0,
++			     opnum, type);
++
+ 	      /* If this is not a toplevel operand, find_reloads doesn't see
+ 		 this substitution.  We have to emit a USE of the pseudo so
+ 		 that delete_output_reload can see it.  */
+@@ -6438,7 +6464,8 @@
+       if (REG_P (in))
+ 	return 0;
+       else if (GET_CODE (in) == PLUS)
+-	return (reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0))
++	return (rtx_equal_p (x, in)
++		|| reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0))
+ 		|| reg_overlap_mentioned_for_reload_p (x, XEXP (in, 1)));
+       else return (reg_overlap_mentioned_for_reload_p (XEXP (x, 0), in)
+ 		   || reg_overlap_mentioned_for_reload_p (XEXP (x, 1), in));
+Index: gcc/tree-pass.h
+===================================================================
+--- gcc/tree-pass.h	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-pass.h	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -335,7 +335,6 @@
+ extern struct tree_opt_pass pass_combine;
+ extern struct tree_opt_pass pass_if_after_combine;
+ extern struct tree_opt_pass pass_partition_blocks;
+-extern struct tree_opt_pass pass_partition_blocks;
+ extern struct tree_opt_pass pass_regmove;
+ extern struct tree_opt_pass pass_split_all_insns;
+ extern struct tree_opt_pass pass_mode_switching;
+Index: gcc/loop.c
+===================================================================
+--- gcc/loop.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/loop.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -2561,7 +2561,7 @@
+ 			     like this as a result of record_jump_cond.  */
+ 
+ 			  if ((temp = find_reg_note (i1, REG_EQUAL, NULL_RTX))
+-			      && ! loop_invariant_p (loop, XEXP (temp, 0)))
++			      && loop_invariant_p (loop, XEXP (temp, 0)) != 1)
+ 			    remove_note (i1, temp);
+ 			}
+ 
+@@ -6493,13 +6493,13 @@
+ 	      v->ignore = 1;
+ 	      bl->all_reduced = 0;
+ 	    }
+-	  else if (!v->always_computable
++	  else if (! v->always_executed
+ 		   && (may_trap_or_fault_p (v->add_val)
+ 		       || may_trap_or_fault_p (v->mult_val)))
+ 	    {
+ 	      if (loop_dump_stream)
+ 		fprintf (loop_dump_stream,
+-			 "giv of insn %d: not always computable.\n",
++			 "giv of insn %d: not always executed.\n",
+ 			 INSN_UID (v->insn));
+ 	      v->ignore = 1;
+ 	      bl->all_reduced = 0;
+@@ -8700,6 +8700,10 @@
+ {
+   rtx comb, ret;
+ 
++  /* We cannot combine givs that are not always in sync.  */
++  if (!g1->always_executed || !g2->always_executed)
++    return NULL_RTX;
++
+   /* With the introduction of ext dependent givs, we must care for modes.
+      G2 must not use a wider mode than G1.  */
+   if (GET_MODE_SIZE (g1->mode) < GET_MODE_SIZE (g2->mode))
+@@ -8708,6 +8712,7 @@
+   ret = comb = express_from (g1, g2);
+   if (comb == NULL_RTX)
+     return NULL_RTX;
++
+   if (g1->mode != g2->mode)
+     ret = gen_lowpart (g2->mode, comb);
+ 
+@@ -8718,9 +8723,7 @@
+      combination to be the other way round.  */
+   if (comb == g1->dest_reg
+       && (g1->giv_type == DEST_REG || g2->giv_type == DEST_ADDR))
+-    {
+-      return ret;
+-    }
++    return ret;
+ 
+   /* If G2 can be expressed as a function of G1 and that function is valid
+      as an address and no more expensive than using a register for G2,
+Index: gcc/configure
+===================================================================
+--- gcc/configure	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/configure	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -7495,7 +7495,7 @@
+   echo "configure:7495: version of makeinfo is $ac_prog_version" >&5
+   case $ac_prog_version in
+     '')     gcc_cv_prog_makeinfo_modern=no;;
+-    4.[2-9]*)
++    4.[2-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*)
+             gcc_cv_prog_makeinfo_modern=yes;;
+     *)      gcc_cv_prog_makeinfo_modern=no;;
+   esac
+@@ -14138,9 +14138,7 @@
+   ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q`
+   if echo "$ld_ver" | grep GNU > /dev/null; then
+     ld_vers=`echo $ld_ver | sed -n \
+-	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
+-	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
+-	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
++	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p' \
+ 	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\)[	 ].*$,\1,p' \
+ 	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[	 ].*$,\1,p' \
+ 	-e 's,^.*[ 	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ 	].*$,\1,p' \
+Index: gcc/builtins.c
+===================================================================
+--- gcc/builtins.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/builtins.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -9935,6 +9935,7 @@
+   /* Get the destination string and the format specifier.  */
+   dest = TREE_VALUE (arglist);
+   fmt = TREE_VALUE (TREE_CHAIN (arglist));
++  arglist = TREE_CHAIN (TREE_CHAIN (arglist));
+ 
+   /* Check whether the format is a literal string constant.  */
+   fmt_str = c_getstr (fmt);
+@@ -9955,6 +9956,10 @@
+       if (!fn)
+ 	return NULL_TREE;
+ 
++      /* Don't optimize sprintf (buf, "abc", ptr++).  */
++      if (arglist)
++	return NULL_TREE;
++
+       /* Convert sprintf (str, fmt) into strcpy (str, fmt) when
+ 	 'format' is known to contain no % formats.  */
+       arglist = build_tree_list (NULL_TREE, fmt);
+@@ -9973,8 +9978,12 @@
+       if (!fn)
+ 	return NULL_TREE;
+ 
++      /* Don't crash on sprintf (str1, "%s").  */
++      if (!arglist)
++	return NULL_TREE;
++
+       /* Convert sprintf (str1, "%s", str2) into strcpy (str1, str2).  */
+-      orig = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
++      orig = TREE_VALUE (arglist);
+       arglist = build_tree_list (NULL_TREE, orig);
+       arglist = tree_cons (NULL_TREE, dest, arglist);
+       if (!ignored)
+Index: gcc/fold-const.c
+===================================================================
+--- gcc/fold-const.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fold-const.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,6 +1,7 @@
+ /* Fold a constant sub-tree into a single node for C-compiler
+    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
++   Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+@@ -5339,6 +5340,9 @@
+             }
+           break;
+         }
++      /* If the constant is negative, we cannot simplify this.  */
++      if (tree_int_cst_sgn (c) == -1)
++        break;
+       /* FALLTHROUGH */
+     case NEGATE_EXPR:
+       if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0)
+@@ -6297,12 +6301,18 @@
+   if (TYPE_PRECISION (TREE_TYPE (arg0)) <= TYPE_PRECISION (shorter_type))
+     return NULL_TREE;
+ 
+-  arg1_unw = get_unwidened (arg1, shorter_type);
++  arg1_unw = get_unwidened (arg1, NULL_TREE);
+ 
+   /* If possible, express the comparison in the shorter mode.  */
+   if ((code == EQ_EXPR || code == NE_EXPR
+        || TYPE_UNSIGNED (TREE_TYPE (arg0)) == TYPE_UNSIGNED (shorter_type))
+       && (TREE_TYPE (arg1_unw) == shorter_type
++	  || (TYPE_PRECISION (shorter_type)
++	      > TYPE_PRECISION (TREE_TYPE (arg1_unw)))
++	  || ((TYPE_PRECISION (shorter_type)
++	       == TYPE_PRECISION (TREE_TYPE (arg1_unw)))
++	      && (TYPE_UNSIGNED (shorter_type)
++		  == TYPE_UNSIGNED (TREE_TYPE (arg1_unw))))
+ 	  || (TREE_CODE (arg1_unw) == INTEGER_CST
+ 	      && (TREE_CODE (shorter_type) == INTEGER_TYPE
+ 		  || TREE_CODE (shorter_type) == BOOLEAN_TYPE)
+@@ -7551,6 +7561,7 @@
+ 	{
+ 	  tree var0, con0, lit0, minus_lit0;
+ 	  tree var1, con1, lit1, minus_lit1;
++	  bool ok = true;
+ 
+ 	  /* Split both trees into variables, constants, and literals.  Then
+ 	     associate each group together, the constants with literals,
+@@ -7561,12 +7572,33 @@
+ 	  var1 = split_tree (arg1, code, &con1, &lit1, &minus_lit1,
+ 			     code == MINUS_EXPR);
+ 
++	  /* With undefined overflow we can only associate constants
++	     with one variable.  */
++	  if ((POINTER_TYPE_P (type)
++	       || (INTEGRAL_TYPE_P (type)
++		   && !(TYPE_UNSIGNED (type) || flag_wrapv)))
++	      && var0 && var1)
++	    {
++	      tree tmp0 = var0;
++	      tree tmp1 = var1;
++
++	      if (TREE_CODE (tmp0) == NEGATE_EXPR)
++	        tmp0 = TREE_OPERAND (tmp0, 0);
++	      if (TREE_CODE (tmp1) == NEGATE_EXPR)
++	        tmp1 = TREE_OPERAND (tmp1, 0);
++	      /* The only case we can still associate with two variables
++		 is if they are the same, modulo negation.  */
++	      if (!operand_equal_p (tmp0, tmp1, 0))
++	        ok = false;
++	    }
++
+ 	  /* Only do something if we found more than two objects.  Otherwise,
+ 	     nothing has changed and we risk infinite recursion.  */
+-	  if (2 < ((var0 != 0) + (var1 != 0)
+-		   + (con0 != 0) + (con1 != 0)
+-		   + (lit0 != 0) + (lit1 != 0)
+-		   + (minus_lit0 != 0) + (minus_lit1 != 0)))
++	  if (ok
++	      && (2 < ((var0 != 0) + (var1 != 0)
++		       + (con0 != 0) + (con1 != 0)
++		       + (lit0 != 0) + (lit1 != 0)
++		       + (minus_lit0 != 0) + (minus_lit1 != 0))))
+ 	    {
+ 	      /* Recombine MINUS_EXPR operands by using PLUS_EXPR.  */
+ 	      if (code == MINUS_EXPR)
+@@ -8052,6 +8084,7 @@
+ 
+       /* ~X | X is -1.  */
+       if (TREE_CODE (arg0) == BIT_NOT_EXPR
++	  && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
+ 	  && operand_equal_p (TREE_OPERAND (arg0, 0), arg1, 0))
+ 	{
+ 	  t1 = build_int_cst (type, -1);
+@@ -8061,6 +8094,7 @@
+ 
+       /* X | ~X is -1.  */
+       if (TREE_CODE (arg1) == BIT_NOT_EXPR
++	  && INTEGRAL_TYPE_P (TREE_TYPE (arg0))
+ 	  && operand_equal_p (arg0, TREE_OPERAND (arg1, 0), 0))
+ 	{
+ 	  t1 = build_int_cst (type, -1);
+@@ -8068,6 +8102,53 @@
+ 	  return omit_one_operand (type, t1, arg0);
+ 	}
+ 
++      /* Canonicalize (X & C1) | C2.  */
++      if (TREE_CODE (arg0) == BIT_AND_EXPR
++	  && TREE_CODE (arg1) == INTEGER_CST
++	  && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST)
++	{
++	  unsigned HOST_WIDE_INT hi1, lo1, hi2, lo2, mlo, mhi;
++	  int width = TYPE_PRECISION (type);
++	  hi1 = TREE_INT_CST_HIGH (TREE_OPERAND (arg0, 1));
++	  lo1 = TREE_INT_CST_LOW (TREE_OPERAND (arg0, 1));
++	  hi2 = TREE_INT_CST_HIGH (arg1);
++	  lo2 = TREE_INT_CST_LOW (arg1);
++
++	  /* If (C1&C2) == C1, then (X&C1)|C2 becomes (X,C2).  */
++	  if ((hi1 & hi2) == hi1 && (lo1 & lo2) == lo1)
++	    return omit_one_operand (type, arg1, TREE_OPERAND (arg0, 0));
++
++	  if (width > HOST_BITS_PER_WIDE_INT)
++	    {
++	      mhi = (unsigned HOST_WIDE_INT) -1 
++		    >> (2 * HOST_BITS_PER_WIDE_INT - width);
++	      mlo = -1;
++	    }
++	  else
++	    {
++	      mhi = 0;
++	      mlo = (unsigned HOST_WIDE_INT) -1
++		    >> (HOST_BITS_PER_WIDE_INT - width);
++	    }
++
++	  /* If (C1|C2) == ~0 then (X&C1)|C2 becomes X|C2.  */
++	  if ((~(hi1 | hi2) & mhi) == 0 && (~(lo1 | lo2) & mlo) == 0)
++	    return fold_build2 (BIT_IOR_EXPR, type,
++				TREE_OPERAND (arg0, 0), arg1);
++
++	  /* Minimize the number of bits set in C1, i.e. C1 := C1 & ~C2.  */
++	  hi1 &= mhi;
++	  lo1 &= mlo;
++	  if ((hi1 & ~hi2) != hi1 || (lo1 & ~lo2) != lo1)
++	    return fold_build2 (BIT_IOR_EXPR, type,
++				fold_build2 (BIT_AND_EXPR, type,
++					     TREE_OPERAND (arg0, 0),
++					     build_int_cst_wide (type,
++								 lo1 & ~lo2,
++								 hi1 & ~hi2)),
++				arg1);
++	}
++
+       t1 = distribute_bit_expr (code, type, arg0, arg1);
+       if (t1 != NULL_TREE)
+ 	return t1;
+@@ -8101,6 +8182,7 @@
+ 
+       /* ~X ^ X is -1.  */
+       if (TREE_CODE (arg0) == BIT_NOT_EXPR
++	  && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
+ 	  && operand_equal_p (TREE_OPERAND (arg0, 0), arg1, 0))
+ 	{
+ 	  t1 = build_int_cst (type, -1);
+@@ -8110,6 +8192,7 @@
+ 
+       /* X ^ ~X is -1.  */
+       if (TREE_CODE (arg1) == BIT_NOT_EXPR
++	  && INTEGRAL_TYPE_P (TREE_TYPE (arg0))
+ 	  && operand_equal_p (arg0, TREE_OPERAND (arg1, 0), 0))
+ 	{
+ 	  t1 = build_int_cst (type, -1);
+@@ -8210,6 +8293,16 @@
+ 	  && operand_equal_p (arg0, TREE_OPERAND (arg1, 0), 0))
+ 	return omit_one_operand (type, integer_zero_node, arg0);
+ 
++      /* Canonicalize (X | C1) & C2 as (X & C2) | (C1 & C2).  */
++      if (TREE_CODE (arg0) == BIT_IOR_EXPR
++	  && TREE_CODE (arg1) == INTEGER_CST
++	  && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST)
++	return fold_build2 (BIT_IOR_EXPR, type,
++			    fold_build2 (BIT_AND_EXPR, type,
++					 TREE_OPERAND (arg0, 0), arg1),
++			    fold_build2 (BIT_AND_EXPR, type,
++					 TREE_OPERAND (arg0, 1), arg1));
++
+       t1 = distribute_bit_expr (code, type, arg0, arg1);
+       if (t1 != NULL_TREE)
+ 	return t1;
+@@ -9279,13 +9372,13 @@
+ 		  return omit_one_operand (type, integer_zero_node, arg0);
+ 
+ 		case GE_EXPR:
+-		  return fold_build2 (EQ_EXPR, type, arg0, arg1);
++		  return fold_build2 (EQ_EXPR, type, op0, op1);
+ 
+ 		case LE_EXPR:
+ 		  return omit_one_operand (type, integer_one_node, arg0);
+ 
+ 		case LT_EXPR:
+-		  return fold_build2 (NE_EXPR, type, arg0, arg1);
++		  return fold_build2 (NE_EXPR, type, op0, op1);
+ 
+ 		/* The GE_EXPR and LT_EXPR cases above are not normally
+ 		   reached because of previous transformations.  */
+@@ -9300,10 +9393,14 @@
+ 		{
+ 		case GT_EXPR:
+ 		  arg1 = const_binop (PLUS_EXPR, arg1, integer_one_node, 0);
+-		  return fold_build2 (EQ_EXPR, type, arg0, arg1);
++		  return fold_build2 (EQ_EXPR, type,
++				      fold_convert (TREE_TYPE (arg1), arg0),
++				      arg1);
+ 		case LE_EXPR:
+ 		  arg1 = const_binop (PLUS_EXPR, arg1, integer_one_node, 0);
+-		  return fold_build2 (NE_EXPR, type, arg0, arg1);
++		  return fold_build2 (NE_EXPR, type,
++				      fold_convert (TREE_TYPE (arg1), arg0),
++				      arg1);
+ 		default:
+ 		  break;
+ 		}
+@@ -9316,7 +9413,7 @@
+ 		  return omit_one_operand (type, integer_zero_node, arg0);
+ 
+ 		case LE_EXPR:
+-		  return fold_build2 (EQ_EXPR, type, arg0, arg1);
++		  return fold_build2 (EQ_EXPR, type, op0, op1);
+ 
+ 		case GE_EXPR:
+ 		  return omit_one_operand (type, integer_one_node, arg0);
+@@ -9334,10 +9431,14 @@
+ 		{
+ 		case GE_EXPR:
+ 		  arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0);
+-		  return fold_build2 (NE_EXPR, type, arg0, arg1);
++		  return fold_build2 (NE_EXPR, type,
++				      fold_convert (TREE_TYPE (arg1), arg0),
++				      arg1);
+ 		case LT_EXPR:
+ 		  arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0);
+-		  return fold_build2 (EQ_EXPR, type, arg0, arg1);
++		  return fold_build2 (EQ_EXPR, type,
++				      fold_convert (TREE_TYPE (arg1), arg0),
++				      arg1);
+ 		default:
+ 		  break;
+ 		}
+@@ -9353,12 +9454,11 @@
+ 		   and X >= signed_max+1 because previous transformations.  */
+ 		if (code == LE_EXPR || code == GT_EXPR)
+ 		  {
+-		    tree st0, st1;
+-		    st0 = lang_hooks.types.signed_type (TREE_TYPE (arg0));
+-		    st1 = lang_hooks.types.signed_type (TREE_TYPE (arg1));
+-		    return fold_build2 (code == LE_EXPR ? GE_EXPR: LT_EXPR,
+-			       		type, fold_convert (st0, arg0),
+-			       		build_int_cst (st1, 0));
++		    tree st;
++		    st = lang_hooks.types.signed_type (TREE_TYPE (arg1));
++		    return fold_build2 (code == LE_EXPR ? GE_EXPR : LT_EXPR,
++					type, fold_convert (st, arg0),
++					build_int_cst (st, 0));
+ 		  }
+ 	      }
+ 	  }
+@@ -9475,24 +9575,24 @@
+ 	  tree arg01 = TREE_OPERAND (arg0, 1);
+ 	  if (TREE_CODE (arg00) == LSHIFT_EXPR
+ 	      && integer_onep (TREE_OPERAND (arg00, 0)))
+-	    return
+-	      fold_build2 (code, type,
+-			   build2 (BIT_AND_EXPR, TREE_TYPE (arg0),
+-				   build2 (RSHIFT_EXPR, TREE_TYPE (arg00),
+-					   arg01, TREE_OPERAND (arg00, 1)),
+-				   fold_convert (TREE_TYPE (arg0),
+-						 integer_one_node)),
+-			   arg1);
+-	  else if (TREE_CODE (TREE_OPERAND (arg0, 1)) == LSHIFT_EXPR
+-		   && integer_onep (TREE_OPERAND (TREE_OPERAND (arg0, 1), 0)))
+-	    return
+-	      fold_build2 (code, type,
+-			   build2 (BIT_AND_EXPR, TREE_TYPE (arg0),
+-				   build2 (RSHIFT_EXPR, TREE_TYPE (arg01),
+-					   arg00, TREE_OPERAND (arg01, 1)),
+-				   fold_convert (TREE_TYPE (arg0),
+-						 integer_one_node)),
+-			   arg1);
++	    {
++	      tree tem = fold_build2 (RSHIFT_EXPR, TREE_TYPE (arg00),
++				      arg01, TREE_OPERAND (arg00, 1));
++	      tem = fold_build2 (BIT_AND_EXPR, TREE_TYPE (arg0), tem,
++				 build_int_cst (TREE_TYPE (arg0), 1));
++	      return fold_build2 (code, type,
++				  fold_convert (TREE_TYPE (arg1), tem), arg1);
++	    }
++	  else if (TREE_CODE (arg01) == LSHIFT_EXPR
++		   && integer_onep (TREE_OPERAND (arg01, 0)))
++	    {
++	      tree tem = fold_build2 (RSHIFT_EXPR, TREE_TYPE (arg01),
++				      arg00, TREE_OPERAND (arg01, 1));
++	      tem = fold_build2 (BIT_AND_EXPR, TREE_TYPE (arg0), tem,
++				 build_int_cst (TREE_TYPE (arg0), 1));
++	      return fold_build2 (code, type,
++				  fold_convert (TREE_TYPE (arg1), tem), arg1);
++	    }
+ 	}
+ 
+       /* If this is an NE or EQ comparison of zero against the result of a
+@@ -11491,6 +11591,23 @@
+       return constant_boolean_node (real_compare (code, c0, c1), type);
+     }
+ 
++  /* Handle equality/inequality of complex constants.  */
++  if (TREE_CODE (op0) == COMPLEX_CST && TREE_CODE (op1) == COMPLEX_CST)
++    {
++      tree rcond = fold_relational_const (code, type,
++					  TREE_REALPART (op0),
++					  TREE_REALPART (op1));
++      tree icond = fold_relational_const (code, type,
++					  TREE_IMAGPART (op0),
++					  TREE_IMAGPART (op1));
++      if (code == EQ_EXPR)
++	return fold_build2 (TRUTH_ANDIF_EXPR, type, rcond, icond);
++      else if (code == NE_EXPR)
++	return fold_build2 (TRUTH_ORIF_EXPR, type, rcond, icond);
++      else
++	return NULL_TREE;
++    }
++
+   /* From here on we only handle LT, LE, GT, GE, EQ and NE.
+ 
+      To compute GT, swap the arguments and do LT.
+Index: gcc/params.h
+===================================================================
+--- gcc/params.h	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/params.h	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -147,4 +147,6 @@
+   PARAM_VALUE (PARAM_VIRTUAL_MAPPINGS_TO_SYMS_RATIO)
+ #define MAX_FIELDS_FOR_FIELD_SENSITIVE \
+   ((size_t) PARAM_VALUE (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE))
++#define MAX_SCHED_READY_INSNS \
++  PARAM_VALUE (PARAM_MAX_SCHED_READY_INSNS)
+ #endif /* ! GCC_PARAMS_H */
+Index: gcc/c-cppbuiltin.c
+===================================================================
+--- gcc/c-cppbuiltin.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/c-cppbuiltin.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -393,6 +393,8 @@
+   /* Misc.  */
+   builtin_define_with_value ("__VERSION__", version_string, 1);
+ 
++  cpp_define (pfile, "__GNUC_GNU_INLINE__");
++
+   /* Definitions for LP64 model.  */
+   if (TYPE_PRECISION (long_integer_type_node) == 64
+       && POINTER_SIZE == 64
+Index: gcc/DEV-PHASE
+===================================================================
+--- gcc/DEV-PHASE	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/DEV-PHASE	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1 @@
++prerelease
+Index: gcc/ChangeLog
+===================================================================
+--- gcc/ChangeLog	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ChangeLog	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,3 +1,948 @@
++2008-11-30  Eric Botcazou  <ebotcazou@adacore.com>
++
++	PR target/38287
++	* config/sparc/sparc.md (divsi3 expander): Remove constraints.
++	(divsi3_sp32): Add new alternative with 'K' for operand #2.
++	(cmp_sdiv_cc_set): Factor common string.
++	(udivsi3_sp32): Add new alternative with 'K' for operand #2.
++	Add TARGET_V9 case.
++	(cmp_udiv_cc_set): Factor common string.
++
++2008-06-05  Richard Sandiford  <rdsandiford@googlemail.com>
++
++	* config/mips/mips.c (mips_emit_loadgp): Emit a blockage if
++	current_function_profile.
++	* config/mips/mips.md (loadgp_blockage): Use SI rather than DI.
++
++2008-05-29  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* tree-nested.c (check_for_nested_with_variably_modified): Fix typo.
++
++2008-04-08  Richard Guenther  <rguenther@suse.de>
++
++	* fold-const.c (fold_widened_comparison): Do not allow
++	sign-changes that change the result.
++
++2008-03-25  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2008-02-12  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/35163
++	* fold-const.c (fold_widened_comparison): Use get_unwidened in
++	value-preserving mode.  Disallow final truncation.
++
++2008-03-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	Backport:
++	2007-09-27  Matthias Klose  <doko@ubuntu.com>
++
++	* config/i386/t-linux64 (MULTILIB_OSDIRNAMES): Use ../lib32 as the
++	multilib osdirname if it exists.
++	* config/rs6000/t-linux64 (MULTILIB_OSDIRNAMES): Likewise.
++
++2008-02-14  Alan Modra  <amodra@bigpond.net.au>
++
++	PR target/34393
++	* config/rs6000/rs6000.md (restore_stack_block): Force operands[1]
++	to a reg.
++
++2008-02-09  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR middle_end/34150
++	* pa.c (legitimize_pic_address): Add REG_EQUAL note on sets with a
++	pic_label_operand source.  Similarly, add a REG_LABEL note and
++	update LABEL_NUSES during and after reload.
++
++2008-02-08  Steven Bosscher  <stevenb.gcc@gmail.com>
++
++	PR middle-end/34627
++	* combine.c (simplify_if_then_else): Make sure the comparison is
++	against const0_rtx when simplifying to (abs x) or (neg (abs X)).
++
++2008-02-04  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/33631
++	* expr.c (count_type_elements): Give for unions instead of
++	guessing.
++
++2008-02-01  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	Backport:
++	2007-08-02  Nathan Froyd  <froydnj@codesourcery.com>
++
++	PR middle-end/25445
++	* varasm.c (default_binds_local_p_1): Consult flag_whole_program
++	if we are compiling with -fPIC.
++
++2008-01-31  Richard Henderson  <rth@redhat.com>
++
++        PR c/34993
++        * tree.c (build_type_attribute_qual_variant): Skip TYPE_DOMAIN
++        for unbounded arrays.
++
++2008-01-31  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* config/s390/fixdfdi.h (__fixunstfdi, __fixtfdi): Rearrange
++	the overflow check to make it easier to read.
++	(__fixtfdi): Change the type of the ll member in union
++	long_double to UDItype_x.
++
++2008-01-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	Backport:
++	2007-11-07  Kenneth Zadeck <zadeck@naturalbridge.com>
++	
++	PR middle-end/33826
++	* ipa-pure-const (static_execute): Added code to keep recursive
++	functions from being marked as pure or const.
++	* ipa-utils (searchc): Fixed comment.
++	
++2008-01-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR libgfortran/34699
++	* pa-hpux.h (LINK_SPEC): Only search /lib/pa1.1 and /usr/lib/pa1.1 on
++	static links.
++	* pa-hpux10.h (LINK_SPEC): Likewise.
++	* pa-hpux11.h (LINK_SPEC): Don't search /lib/pa1.1 and /usr/lib/pa1.1.
++
++2008-01-14  Eric Botcazou  <ebotcazou@adacore.com>
++
++	PR rtl-optimization/31944
++	* cse.c (remove_pseudo_from_table): New function.
++	(merge_equiv_classes): Use above function to remove pseudo-registers.
++	(invalidate): Likewise.
++
++2007-12-31  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR driver/33772
++	* collect2.c (SHLIB_SUFFIX): Define if not defined.
++	(write_c_file_stat): Use SHLIB_SUFFIX.
++	* som.h (SHLIB_SUFFIX): Define.
++	* doc/tm.texi (SHLIB_SUFFIX): Document.
++
++2007-12-20  Jakub Jelinek  <jakub@redhat.com>
++
++	PR bootstrap/34003
++	* c-decl.c (merge_decls): Copy RTL from olddecl to newdecl.
++	* config/pa/pa.c (pa_encode_section_info): If !first, preserve
++	SYMBOL_FLAG_REFERENCED flag.
++
++2007-12-19  Kaz Kylheku  <kaz@zeugmasystems.com>
++
++	PR rtl-optimization/34456
++	* resource.c (mark_set_resources): Use regs_invalidated_by_call
++	rather than call_used_regs and global_regs.
++
++2007-11-29  Matthias Klose  <doko@ubuntu.com>
++
++	Backport from mainline:
++	2007-11-17  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/34130
++	* fold-const.c (extract_muldiv_1): Do not move negative
++	constants inside ABS_EXPR.
++
++2007-11-16  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/34030
++	* fold-const.c (fold_binary): Use correct types for folding
++	1 << X & Y to Y >> X & 1.
++
++2007-11-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	PR rtl-optimization/33822
++	* rtl.h (REG_OFFSET): Fix comment.
++	* var-tracking.c (INT_MEM_OFFSET): New macro.
++	(var_mem_set): Use it.
++	(var_mem_delete_and_set): Likewise.
++	(var_mem_delete): Likewise.
++	(vt_get_decl_and_offset): Likewise.
++	(offset_valid_for_tracked_p): New predicate.
++	(count_uses): Do not track locations with invalid offsets.
++	(add_uses): Likewise.
++	(add_stores): Likewise.
++
++2007-11-04  Hirohisa Yamaguchi  <umq@ueo.co.jp>
++
++	* config/freebsd-spec.h (FBSD_TARGET_OS_CPP_BUILTINS): Fix
++	broken else-if chain.
++
++2007-11-04  Gerald Pfeifer  <gerald@pfeifer.com>
++
++	* config.gcc: Proactively add FreeBSD 10 and FreeBSD 11.
++	* config/freebsd-spec.h (FBSD_TARGET_OS_CPP_BUILTINS): Ditto.
++
++2007-11-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	Backport from mainline:
++	2006-12-11  Zdenek Dvorak  <dvorakz@suse.cz>
++
++	PR rtl-optimization/30113
++	* loop-iv.c (implies_p): Require the mode of the operands to be
++	scalar.
++
++2007-10-30  Ian Lance Taylor  <iant@google.com>
++
++	* ifcvt.c (noce_can_store_speculate_p): New static function.
++	(noce_process_if_block): Call it.
++	(find_if_header): Only call find_if_case_1 and find_if_case_2 if
++	life_data_ok is set.
++	(if_convert): Always compute postdominators.
++
++2007-10-29  Janis Johnson  <janis187@us.ibm.com>
++
++	* doc/invoke.texi (Option Summary, optimizations): Remove
++	-fbounds-check.  Show that the value for options -falign-jumps,
++	-falign-labels, -falign-loops, -falign-functions,
++	-fsched-stalled-insns, and -fsched-stalled-insns-dep is optional.
++	Break up a long line.  Add -ftree-vrp and -funit-at-a-time.
++	(Option Summary, code gen options)  Add -fno-stack-limit.
++	* doc/invoke.texi (Option Summary, optimizations):
++	(Optimization Options): Remove -fbounds-check, which is also
++	documented under Code Generation Options.  In the descriptions for
++	-fsched-stalled-insns and -fsched-stalled-insns-dep, show the
++	options with and without values.  Change -fno-cprop-registers
++	to -fcprop-registers to match other options, and say when it is
++	enabled rather than disabled.  Remove extra index entry for
++	-fno-cx-limited-range.  Add opindex for several optimization
++	options, and fix typos in the opindex commands for several others.
++	(Code Gen Options): Add index entry for -ftls-model.
++
++2007-10-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* doc/rtl.texi (Flags): Fix MEM_SCALAR_P entry.
++	Document MEM_POINTER.  Replace mentions of "integrated"
++	field with "return_val".  Delete outdated stuff.
++
++2007-10-20  Jakub Jelinek  <jakub@redhat.com>
++
++	* config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Point
++	saved CR2 offset to low 32 bits of regs->ccr rather than the whole
++	64-bit register in 64-bit libgcc.
++
++2007-09-23  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* configure.ac (ld_vers): Support GNU linker version xx.xx.*
++	* configure: Regenerated.
++
++2007-09-23  Jakub Jelinek  <jakub@redhat.com>
++
++	* configure.ac (MAKEINFO): Handle makeinfo version 4.10 and above.
++	* configure: Regenerated.
++
++2007-09-13  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR bootstrap/33418
++	* configure.ac (ld_vers): Support Linux linker.
++	* configure: Regenerated.
++
++2007-09-06  Richard Sandiford  <richard@codesourcery.com>
++
++	PR target/33256
++	* config/mips/mips.c (mips_classify_symbolic_expression): New function.
++	(mips_classify_address): Use it instead of mips_symbolic_constant_p.
++	(print_operand_reloc): Likewise.
++
++2007-08-24  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/32912
++	* fold-const.c (fold_binary): Only optimize X | ~X and X ^ ~X for
++	integral types.
++
++2007-08-22  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/33142
++	* tree-vrp.c (extract_range_from_unary_expr): Compare with
++	TYPE_MIN/MAX_VALUE using tree_int_cst_equal.
++
++2007-08-21  Adam Nemet  <anemet@caviumnetworks.com>
++
++	* config/mips/predicates.md (const_call_insn_operand): Invoke
++	SYMBOL_REF_LONG_CALL_P only on SYMBOL_REFs.
++
++2007-08-02  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* config/s390/s390.md ("*xordi3_cconly"): Change xr to xg.
++
++2007-08-01  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* config/s390/s390.md (TF in GPR splitter): Change operand_subword
++	parameter to TFmode.
++
++2007-07-16  Richard Guenther  <rguenther@suse.de>
++	    Uros Bizjak  <ubizjak@gmail.com>
++
++	* tree-if-conv.c (find_phi_replacement_condition): Unshare "*cond"
++	before forcing it to gimple operand.
++
++2007-07-13  Paolo Bonzini  <bonzini@gnu.org>
++
++	Revert these patches:
++
++	2007-07-09  Paolo Bonzini  <bonzini@gnu.org>
++
++        PR middle-end/32004
++        * function.c (rest_of_match_asm_constraints): Pass PROP_REG_INFO.
++
++	2007-07-06  Paolo Bonzini  <bonzini@gnu.org>
++
++	PR middle-end/32004
++	* function.c (match_asm_constraints_1, rest_of_match_asm_constraints,
++	pass_match_asm_constraints): New.
++	* passes.c (init_optimization_passes): Add new pass.
++	* stmt.c (expand_asm_operands): Set cfun->has_asm_statement.
++	* function.h (struct function): Add has_asm_statement bit.
++	(current_function_has_asm_statement): New.
++	* tree-pass.h (pass_match_asm_constraints): New.
++
++2007-07-09  Paolo Bonzini  <bonzini@gnu.org>
++
++        PR middle-end/32004
++        * function.c (rest_of_match_asm_constraints): Pass PROP_REG_INFO.
++
++2007-07-09  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR tree-optimization/32681
++	* tree-if-conv.c (find_phi_replacement_condition): Use the condition
++	saved in second_edge->aux when first_bb is a loop header.
++
++2007-07-07 Anatoly Sokolov <aesok@post.ru>
++
++	PR target/31331
++	* config/avr/avr.c (avr_naked_function_p): Handle receiving a type
++	rather than a decl. 
++	(avr_attribute_table): Make "naked" attribute apply to function types
++	rather than to decls.
++	(avr_handle_fntype_attribute): New function.
++
++2007-07-07  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR target/32660
++	Backport from mainline.
++	* config/i386/sse.md (*vec_extractv2di_1_sse2): New.
++	(*vec_extractv2di_1_sse): New.
++
++2007-07-06  Paolo Bonzini  <bonzini@gnu.org>
++
++	PR middle-end/32004
++	* function.c (match_asm_constraints_1, rest_of_match_asm_constraints,
++	pass_match_asm_constraints): New.
++	* passes.c (init_optimization_passes): Add new pass.
++	* stmt.c (expand_asm_operands): Set cfun->has_asm_statement.
++	* function.h (struct function): Add has_asm_statement bit.
++	(current_function_has_asm_statement): New.
++	* tree-pass.h (pass_match_asm_constraints): New.
++
++2007-07-06  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR rtl-optimization/32450
++	* function.c (thread_prologue_and_epilogue_insns): Emit blockage insn
++	to ensure that instructions are not moved into the prologue when
++	profiling is on.
++
++2007-07-04  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR tree-optimization/31966
++	PR tree-optimization/32533
++	* tree-if-conv.c (add_to_dst_predicate_list): Use "edge", not
++	"basic_block" description as its third argument.  Update function
++	calls to get destination bb from "edge" argument.  Save "cond" into
++	aux field of the edge.  Update prototype for changed arguments.
++	(if_convertible_loop_p): Clear aux field of incoming edges if bb
++	contains phi node.
++	(find_phi_replacement_condition): Operate on incoming edges, not
++	on predecessor blocks.  If there is a condition saved in the
++	incoming edge aux field, AND it with incoming bb predicate.
++	Return source bb of the first edge.
++	(clean_predicate_lists): Clean aux field of outgoing node edges.
++	(tree_if_conversion): Do not initialize cond variable. Move
++	variable declaration into the loop.
++	(replace_phi_with_cond_gimple_modify_stmt): Remove unneded
++	initializations of new_stmt, arg0 and arg1 variables.
++
++2007-07-04  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/32506
++	Backport from mainline.
++	* config/sh/sh.md (udivsi3_i1_media): Use target_reg_operand
++	predicate instead of target_operand.
++	(divsi3_i1_media, divsi3_media_2): Likewise.
++
++2007-07-03  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	PR target/28307
++	* gthr-posix.h [SUPPORTS_WEAK && GTHREAD_USE_WEAK]
++	(__gthrw_pragma): Provide default definition.
++	(__gthrw2): Use it.
++	* gthr-posix.c (__gthrw_pragma): Define.
++
++2007-06-30  Alexandre Oliva  <aoliva@redhat.com>
++
++	* dwarf2out.c (dwarf2out_finish): Accept namespaces as context of
++	limbo die nodes.
++
++2007-06-28  Seongbae Park  <seongbae.park@gmail.com>
++
++	* config/arm/arm.c (arm_get_frame_offsets): Set
++	offsets->locals_base to avoid negative stack size.
++	(thumb1_expand_prologue): Assert on negative stack size.
++
++2007-06-28  Jakub Jelinek  <jakub@redhat.com>
++
++	* config/rs6000/rs6000.c (rs6000_function_ok_for_sibcall): Ensure
++	decl is non-external for AIX ABI.
++
++2007-06-28  David Edelsohn  <edelsohn@gnu.org>
++
++	* config/rs6000/predicates.md (current_file_function_operand):
++	Ensure the symbol is non-external for AIX ABI.
++
++2007-06-21  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR target/32389
++	* config/i386/i386.h (enum ix86_stack_slot): Add SLOT_VIRTUAL.
++	* config/i386/i386.c (assign_386_stack_local): Assert that
++	SLOT_VIRTUAL is valid only before virtual regs are instantiated.
++	(ix86_expand_builtin) [IX86_BUILTIN_LDMXCSR, IX86_BUILTIN_STMXCSR]:
++	Use SLOT_VIRTUAL stack slot instead of SLOT_TEMP.
++	* config/i386/i386.md (truncdfsf2, truncxfsf2, truncxfdf2): Ditto.
++
++2007-06-20  Jakub Jelinek  <jakub@redhat.com>
++
++	PR inline-asm/32109
++	* gimplify.c (gimplify_asm_expr): Issue error if type is addressable
++	and !allows_mem.
++
++	PR middle-end/32285
++	* calls.c (precompute_arguments): Also precompute CALL_EXPR arguments
++	if ACCUMULATE_OUTGOING_ARGS.
++
++2007-06-20  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR rtl-optimization/28011
++	Backport from mainline.
++	* reload.c (push_reload): Set dont_share if IN appears in OUT
++	also when IN is a PLUS rtx.
++	(reg_overlap_mentioned_for_reload_p): Return true if X and IN
++	are same PLUS rtx.
++
++2007-06-19  Jakub Jelinek  <jakub@redhat.com>
++
++	PR tree-optimization/32353
++	* tree-ssa-structalias.c (set_uids_in_ptset): Also handle RESULT_DECL.
++
++2007-06-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* config/sparc/sparc.c (sparc_override_options): Initialize
++	fpu mask correctly.
++
++2007-06-08  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/32163
++	Backport from mainline.
++	* config/sh/sh.md (symGOT_load): Don't schedule insns when
++	the symbol is generated with the stack protector.
++
++2007-05-31  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	Backport from mainline:
++	2007-05-05  Aurelien Jarno  <aurelien@aurel32.net>
++
++	* config/pa/pa.md: Split tgd_load, tld_load and tie_load
++	into pic and non-pic versions. Mark r19 as used for 
++	tgd_load_pic, tld_load_pic and tie_load_pic. Mark r27 as used 
++	for tgd_load, tld_load and tie_load .
++	* config/pa/pa.c (legitimize_tls_address): Emit pic or non-pic
++	version of tgd_load, tld_load and tie_load depending on the 
++	value of flag_pic.
++
++2007-05-20  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/31701
++	Backport from mainline.
++	* config/sh/sh.c (output_stack_adjust): Avoid using the frame
++	register itself to hold the offset constant.  Tell flow the use
++	of r4 and r5 when they are used.
++
++2007-05-20  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/31480
++	Backport from mainline.
++	* config/sh/sh.md (length): Check if prev_nonnote_insn (insn)
++	is null.
++
++2007-05-20  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/31022
++	Backport from mainline.
++	* config/sh/sh.c (sh_adjust_cost): Use the result of single_set
++	instead of PATTERN.
++
++2007-05-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	PR rtl-optimization/31691
++	* combine.c (simplify_set): Build a new src pattern instead of
++	substituting its operands in the COMPARE case.
++
++2007-05-16  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2006-06-09  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/26998
++	* tree-vrp.c (extract_range_from_unary_expr): For NEGATE_EXPR
++	of signed types, only TYPE_MIN_VALUE is special, but for both,
++	minimum and maximum value.  Likewise VR_ANTI_RANGE is special
++	in this case, as is -fwrapv.
++
++2007-05-11  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/31876
++	* config/sh/sh.md (andsi3): Avoid calling gen_lowpart on
++        a SImode SUBREG of a floating point register.
++
++2007-05-08  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* loop.c (move_movables): Remove REG_EQUAL notes for conditional
++	invariants as well.
++
++2007-04-29  Bernd Schmidt  <bernd.schmidt@analog.com>
++
++	* reload.c (combine_reloads): When trying to use a dying register,
++	check whether it's uninitialized and don't use if so.
++
++2007-04-27  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	PR middle-end/30761
++	* reload1.c (eliminate_regs_in_insn): In the single_set special
++	case, attempt to re-recognize the insn before falling back to
++	having reload fix it up.
++
++2007-04-26  Ian Lance Taylor  <iant@google.com>
++
++	PR target/28675
++	* reload.c (find_reloads_subreg_address): If the address was valid
++	in the original mode but not in the new mode, reload the whole
++	address.
++
++2007-04-25  Anatoly Sokolov <aesok@post.ru>
++
++	PR target/18989
++ 	* config/avr/avr.h (ASM_OUTPUT_ALIGN): Redefine.
++
++2007-04-25  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2006-10-13  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/29446
++	* tree-vrp.c (fix_equivalence_set): Remove.
++	(extract_range_from_assert): Do not call fix_equivalence_set.
++	(debug_value_range): Print a newline.
++	(compare_name_with_value): For equivalence sets with
++	inconsistent value ranges conservatively bail out.
++	(compare_names): Likewise.
++
++2007-04-24  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	PR target/31641
++	* config/s390/s390.c (s390_expand_setmem): Don't ICE for constant length
++	argument of 0 for memset.
++	(s390_expand_movmem, s390_expand_setmem, s390_expand_cmpmem): Use
++	unsigned shift instead of the signed variant.
++
++2007-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/31448
++	* expr.c (reduce_to_bit_field_precision): Handle
++	CONST_INT rtx's.
++
++2007-04-20  Richard Henderson  <rth@redhat.com>
++
++	PR target/28623
++	* config/alpha/alpha.c (get_unaligned_address): Remove extra_offset
++	argument; update all callers.
++	(get_unaligned_offset): New.
++	* config/alpha/alpha.md (extendqidi2, extendhidi2): Don't use
++	get_unaligned_address, just pass on the address directly.
++	(unaligned_extendqidi): Use gen_lowpart instead of open-coding
++	the subreg in the helper patterns.
++	(unaligned_extendqidi_le): Use get_unaligned_offset.
++	(unaligned_extendqidi_be, unaligned_extendhidi_le): Likewise.
++	(unaligned_extendhidi_be): Likewise.
++	(unaligned_extendhidi): Tidy.
++	* config/alpha/alpha-protos.h: Update.
++
++2007-04-20  Richard Henderson  <rth@redhat.com>
++
++	* config/alpha/linux.h (CPP_SPEC): Undef before redefine.
++
++2007-04-20  Jakub Jelinek  <jakub@redhat.com>
++
++	* config/i386/i386.c (bdesc_2arg): Use ORDERED rather than UNORDERED
++	for __builtin_ia32_cmpordss.
++
++	PR tree-optimization/31632
++	* fold-const.c (fold_binary): Use op0 and op1 instead of arg0
++	and arg1 for optimizations of comparison against min/max values.
++	Fold arg0 to arg1's type for optimizations of comparison against
++	min+1 and max-1 values.
++
++2007-04-18  Anatoly Sokolov <aesok@post.ru>
++
++	* config/avr/avr.c (ptrreg_to_str): Replace error() with
++	output_operand_lossage().
++
++2007-04-17  Anatoly Sokolov <aesok@post.ru>
++
++	PR target/30483
++	* config/avr/avr.c (ptrreg_to_str): Replace gcc_unreachable() with
++	error().
++
++2007-04-16  Matthias Klose  <doko@debian.org>
++
++	* config/alpha/linux.h (CPP_SPEC): Define.
++	* config/arm/linux-gas.h (SUBTARGET_CPP_SPEC): Extend.
++
++2007-04-16  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* Backport from mainline:
++	2007-04-16  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR target/31582
++	* config/i386/i386.c (ix86_expand_vec_set_builtin): Make a
++	copy of source, pass it to ix86_expand_vector_set and return
++	it as target.
++
++2007-04-14  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR tree-opt/30045
++	* tree-vrp.c (nonnull_arg_p): Treat the static decl as always
++	non null.
++
++2007-04-14  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/30729
++	* stmt.c (warn_if_unused_value): VA_ARG_EXPR has side
++	effects unknown to this function, return early.
++
++2007-04-14  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR c/31520
++	* c-decl.c (finish_decl): Grab the type of the decl after the call
++	to store_init_value.
++
++2007-04-07  Anatoly Sokolov <aesok@post.ru>
++
++	PR target/30289
++	* config/avr/avr.md (*clrmemqi, *clrmemhi): Mark operand 4 as 
++	earlyclobber.
++
++2007-04-05  Anatoly Sokolov <aesok@post.ru>
++
++	PR target/25448
++	* config/avr/avr.c (avr_handle_fndecl_attribute): Use the 
++	DECL_ASSEMBLER_NAME, not the DECL_NAME.
++
++2007-04-04  Richard Henderson  <rth@redhat.com>
++
++	PR target/31361
++	* config/i386/i386.c (ix86_init_mmx_sse_builtins): Remove
++	v8hi_ftype_v8hi_v2di, v4si_ftype_v4si_v2di.  Use like-types for
++	the variable shift builtins.
++	(ix86_expand_builtin): Properly expand the variable shift builtins.
++	* config/i386/sse.md (ashr<mode>3, lshr<mode>3, ashl<mode>3): Make
++	operand 2 be TImode.
++	* config/i386/emmintrin.h (_mm_slli_epi16, _mm_slli_epi32,
++	_mm_slli_epi64, _mm_srai_epi16, _mm_srai_epi32, _mm_srli_epi16,
++	_mm_srli_epi32, _mm_srli_epi64): Turn into macros.
++	(_mm_srli_si128, _mm_srli_si128): Fix disabled inline versions.
++	(_mm_sll_epi16, _mm_sll_epi32, _mm_sll_epi64, _mm_sra_epi16,
++	_mm_sra_epi32, _mm_srl_epi16, _mm_srl_epi32, _mm_srl_epi64): Use
++	two-vector shift builtins.
++
++2007-04-02  Anatoly Sokolov <aesok@post.ru>
++
++	PR target/31137
++	* config/avr/avr.c (avr_rtx_costs): Add missing 'break' statements.
++
++2007-04-02  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* Backport from mainline:
++	2007-03-28  Grigory Zagorodnev <grigory_zagorodnev@linux.intel.com>
++
++	PR target/31380
++	* config/i386/sse.md (uminv16qi3): Use UMIN instead of UMAX.
++
++2007-03-30  Anatoly Sokolov <aesok@post.ru>
++
++	* config/avr/avr.c (avr_override_options): Clear 
++	'flag_delete_null_pointer_checks'.
++
++2007-03-21  Richard Henderson  <rth@redhat.com>
++
++	PR target/31245
++	* config/i386/emmintrin.h (__m128i, __m128d): Mark may_alias.
++	* config/i386/mmintrin.h (__m64): Likewise.
++	* config/i386/xmmintrin.h (__m128): Likewise.
++
++2007-03-19  Seongbae Park <seongbae.park@gmail.com>
++
++	PR tree-optimization/30590
++	* tree-nrv.c (tree_nrv): Check for the partial update
++	of the return value.
++
++2007-03-19  Jeff Law  <law@redhat.com>
++
++	* tree-cfg.c (find_taken_edge): Tighten conditions for
++	optimizing computed gotos.
++
++2007-03-19  Brooks Moses  <brooks.moses@codesourcery.com>
++
++	* doc/extend.texi: Edit "gnu_inline" documentation.
++	* doc/invoke.texi: Edit "-fgnu89-inline" documentation.
++
++2007-03-19  Ian Lance Taylor  <iant@google.com>
++
++	* c.opt (fgnu89-inline): New option.
++	* c-opts.c (c_common_post_options): Warn about -fno-gnu89-inline.
++	* c-common.c (c_common_attributes): Add gnu_inline attribyte.
++	(handle_gnu_inline_attribute): New static function.
++	* c-cppbuiltin.c (c_cpp_builtins): Define __GNUC_GNU_INLINE__.
++	* doc/invoke.texi (Option Summary): Mention -fgnu89-inline.
++	(C Dialect Options): Document -fgnu89-inline.
++	* doc/extend.texi (Function Attributes): Document gnu_inline.
++	(Inline): Mention that C99 inline will be implemented in 4.3.
++	Refer to ways to get the old handling.
++	* doc/cpp.texi (Common Predefined Macros): Document
++	__GNUC_GNU_INLINE__ and __GNUC_STDC_INLINE__.
++
++2007-03-17  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR debug/29906
++	* dwarf2out.c (force_type_die): Adjust comment.
++	(dwarf2out_imported_module_or_decl): Handle base AT_import types.
++
++2007-03-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* pa.c (attr_length_call): Partially revert change of 2007-03-09.
++	(output_call): Likewise.
++
++2007-03-15  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2007-02-28  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/30364
++	* fold-const.c (fold_binary): Do not associate expressions
++	with more than one variable for integer types that do not wrap.
++
++2007-03-13  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR target/31123
++	* pa.md (vdepi_ior): Don't allow zero length deposit.  Likewise for
++	two unamed patterns.
++	
++2007-03-12  Roger Sayle  <roger@eyesopen.com>
++	    Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/30433
++	* fold-const.c (fold_relational_const): Add back compile-time
++	evaluation of complex constant equality/inequality comparisons.
++
++2007-03-12  Richard Henderson  <rth@redhat.com>
++
++	PR target/26090
++	* config/alpha/alpha.c (alpha_elf_select_section): New.
++	(alpha_elf_unique_section, alpha_elf_section_type_flags): New.
++	(alpha_elf_select_rtx_section): Force flag_pic true.
++	(TARGET_ASM_SELECT_SECTION, TARGET_ASM_UNIQUE_SECTION): New.
++	(TARGET_SECTION_TYPE_FLAGS): New.
++
++2007-03-12  Ira Rosen  <irar@il.ibm.com>
++
++	PR tree-optimization/29925
++	* tree-data-ref.c (analyze_offset): Add a return value (bool) to
++	indicate success/failure of the analysis. Add negation to subtrahend
++	in case of subtraction. Fail if both operands contain constants.
++	(create_data_ref): Fail if analyze_offset fails.
++
++2007-03-09  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* pa.c (attr_length_call): Revise condition for long pc-relative branch.
++	(output_call): Use "LONG_PIC_SDIFF" instruction sequence for long local
++	calls on the SOM target.  Don't use "LONG_PIC_PCREL" call sequence on
++	SOM target.
++
++2007-03-09  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR rtl-optimization/30643
++	* cse.c (cse_insn): Recompute dest_hash after insert_regs for
++	dest_addr_elt.
++
++2007-03-08  Andreas Schwab  <schwab@suse.de>
++
++	* c-common.c (fold_offsetof_1): Remove extra argument in recursive
++	call.
++
++2007-03-08  Volker Reichelt  <reichelt@netcologne.de>
++
++	PR c++/30852
++	* c-common.c (fold_offsetof_1): Handle COMPOUND_EXPR.
++
++2007-03-07  Richard Henderson  <rth@redhat.com>
++
++	PR target/30848
++	* reg-stack.c (emit_swap_insn): If a malformed asm was seen,
++	silently fix up the stack in the case of a missing register.
++
++2007-03-06  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint
++	conversion.
++	
++2007-03-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* pa.md: In unamed move patterns, disparge copies between general
++	and floating point registers using '?' modifier.  Don't include 'f'
++	constraint for register preferences in DImode, SImode, HImode and
++	QImode patterns.  Likewise for 'r' in DFmode and SFmode patterns.
++	Remove constraints for copies between general and floating registers
++	in soft-float DFmode pattern.
++	(movdf): Fail if operand1 is a CONST_DOUBLE and operand0 is a hard
++	floating register.
++	(movsf): Likewise. 
++
++2007-02-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* pa/predicates.md (move_src_operand): Allow zero for mode.
++	* pa/pa.md: Fix constraints for zero CONST_DOUBLE in 64-bit DFmode
++	move pattern.
++
++2007-02-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	PR rtl-optimization/30931
++	* loop.c (combine_givs_p): Return false if either GIV is not
++	always executed.
++
++2007-02-21 Ira Rosen  <irar@il.ibm.com>
++
++	* Makefile.in (tree-ssa-alias.o): Depend on pointer-set.h.
++
++2007-02-20 Ira Rosen  <irar@il.ibm.com>
++
++	* tree-ssa-alias.c: Include pointer-set.h. 
++	(may_aliases_intersect): Use the correct type (varray) for
++	may_aliases sets.
++
++2007-02-18  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	Backport from mainline.
++	PR rtl-optimization/29599
++	* reload1.c (eliminate_regs_in_insn): Take the destination
++	mode into account when computing the offset.
++
++2007-02-18  Roger Sayle  <roger@eyesopen.com>
++
++	Backport from mainline.
++	PR middle-end/24427
++	PR rtl-optimization/28173
++	* fold-const.c (fold_binary) <BIT_IOR_EXPR>: Transform (X&C1)|C2
++	into (X,C2) if C1 is a subset of the bits of C2.  Transform
++	(X&C1)|C2 into X|C2 if C1|C2 == ~0.  Canonicalize (X&C1)|C2 as
++	(X&(C1&~C2))|C2.
++	<BIT_AND_EXPR>: Canonicalize (X|C1)&C2 as (X&C2)|(C1&C2).
++
++2007-02-18 Ira Rosen  <irar@il.ibm.com>
++
++	* tree-ssa-alias.c (may_aliases_intersect): New function.
++	* tree-data-ref.c (ptr_ptr_may_alias_p): Call may_aliases_intersect 
++	for different tags.
++	* tree-flow.h (may_aliases_intersect): Add function declaration.
++
++2007-02-17  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR tree-optimization/30823
++	* tree-sra.c (sra_build_assignment): Drop type-checking assert.
++
++2007-02-16  Guy Martin  <gmsoft@gentoo.org>
++
++	* pa.md (tp_load): Correct mfctl instruction syntax.
++
++2007-02-16  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	PR rtl-optimization/30787
++	* loop.c (strength_reduce): Don't reduce giv that is not always
++	executed and where add_val or mult_val can trap.
++
++2007-02-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	PR other/27843
++	* Makefile.in (SYSTEM_HEADER_DIR): Use single quotes to avoid
++	nested double- and backquotes.
++
++2007-02-15  Anatoly Sokolov <aesok@post.ru>
++
++	PR target/19087
++	* config/avr/avr.c (DWARF2_ADDR_SIZE): Define.
++	
++2007-02-15  Bob Wilson  <bob.wilson@acm.org>
++
++	* config/xtensa/xtensa.c (constantpool_mem_p): Skip over SUBREGs.
++
++2007-02-15  Alexandre Oliva  <aoliva@redhat.com>
++
++	* tree-sra.c (instantiate_missing_elements): Canonicalize
++	bit-field types.
++	(sra_build_assignment): New.
++	(generate_copy_inout, generate_element_copy,
++	generate_element_zero, generate_one_element_init): Use it.
++
++2007-02-15  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR debug/30189
++	* dwarf2out.c (modified_type_die): Follow DECL_ORIGINAL_TYPE
++	even if cv-qualification is the same.
++
++2007-02-14  Eric Botcazou  <ebotcazou@adacore.com>
++	    Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
++
++	PR rtl-optimization/28772
++	* Makefile.in (haifa-sched.o): Add dependency on $(PARAMS_H).
++
++	Backport from mainline:
++	2006-04-13  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* params.def (PARAM_MAX_SCHED_READY_INSNS): New parameter,
++	defaulting to 100.
++	* params.h (MAX_SCHED_READY_INSNS): New macro.
++	* haifa-sched.c: (queue_to_ready): Re-queue insns for the next cycle
++	past MAX_SCHED_READY_INSNS during the first scheduling pass.
++	(schedule_block): Delay insns past MAX_SCHED_READY_INSNS in
++	the ready list for 1 cycle during the first scheduling pass.
++	* doc/invoke.texi (--param): New parameter max-sched-ready-insns.
++
++2007-02-14  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/30473
++	* builtins.c (fold_builtin_sprintf): Do not attempt to optimize
++	sprintf (str, "%s").  Do not optimize sprintf (str, "nopercent", p++).
++
++2007-02-14  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2007-01-30  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/30313
++	* passes.c (execute_one_pass): Reset in_gimple_form to not
++	confuse non-unit-at-a-time mode.
++
++2007-02-14  Mark Mitchell  <mark@codesourcery.com>
++
++	* DEV-PHASE: Set to prerelease.
++	* BASE-VER: Increment.
++
+ 2007-02-13  Release Manager
+ 
+ 	* GCC 4.1.2 released.
+@@ -15,11 +960,11 @@
+ 
+ 2007-01-29  Josh Conner  <jconner@apple.com>
+ 
+-        PR middle-end/29683
+-        * calls.c (compute_argument_addresses): Set stack and stack_slot
+-        for partial args, too.
+-        (store_one_arg): Use locate.size.constant for the size when
+-        generating a save_area.
++	PR middle-end/29683
++	* calls.c (compute_argument_addresses): Set stack and stack_slot
++	for partial args, too.
++	(store_one_arg): Use locate.size.constant for the size when
++	generating a save_area.
+ 
+ 2007-01-28  Ralf Wildenhalf Wildenhues  <Ralf.Wildenhues@gmx.de>
+ 
+@@ -100,7 +1045,7 @@
+ 
+ 2007-01-05  Richard Guenther  <rguenther@suse.de>
+ 
+-        PR tree-optimization/30212
++	PR tree-optimization/30212
+ 	* tree-vrp.c (adjust_range_with_scev): Do not adjust invalid
+ 	ranges by using TYPE_MIN_VALUE or TYPE_MAX_VALUE.
+ 
+@@ -195,10 +1140,10 @@
+ 2006-12-17  Matthias Klose  <doko@debian.org>
+ 
+ 	PR libstdc++/11953
+-	* gcc/config/mips/linux.h (SUBTARGET_CPP_SPEC): Extend.
++	* config/mips/linux.h (SUBTARGET_CPP_SPEC): Extend.
+ 
+ 2006-12-16  Joseph Myers  <joseph@codesourcery.com>
+-            David Edelsohn  <edelsohn@gnu.org>
++	    David Edelsohn  <edelsohn@gnu.org>
+ 
+ 	PR target/24036
+ 	* doc/tm.texi (HARD_REGNO_NREGS_HAS_PADDING,
+@@ -276,7 +1221,7 @@
+ 	inside start_sequence / end_sequence pair.
+ 
+ 2006-11-27  Michael Matz  <matz@suse.de>
+-            Andreas Krebbel  <krebbel1@de.ibm.com>
++	    Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+ 	PR target/29319
+ 	* config/s390/predicates.md (larl_operand): Check addend of larl
+@@ -498,7 +1443,7 @@
+ 2006-11-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* doc/install.texi (sparc-sun-solaris2*): Update GMP/MPFR build
+-	instructions.
++
+ 	(sparc64-sun-solaris2*): Likewise.
+ 
+ 2006-11-02  Zdenek Dvorak <dvorakz@suse.cz>
+@@ -646,7 +1591,7 @@
+ 	2006-08-23  Stuart Hastings  <stuart@apple.com>
+ 
+ 	PR target/28825
+-	* gcc/config/i386/i386.c (ix86_expand_vector_init_duplicate,
++	* config/i386/i386.c (ix86_expand_vector_init_duplicate,
+ 	ix86_expand_vector_init_one_nonzero): Remove TARGET_SSE test.
+ 
+ 2006-10-16  Richard Guenther  <rguenther@suse.de>
+@@ -2091,16 +3036,16 @@
+ 
+ 2006-04-19  Jeff Law  <law@redhat.com>
+ 
+-        PR tree-optimization/26854
++	PR tree-optimization/26854
+ 	* tree-ssa-dse.c (dse_optimize_stmt): Use has_single_use rather
+ 	than num_imm_uses.
+ 	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Similarly.
+ 
+ 2006-04-18  Jeff Law  <law@redhat.com>
+ 
+-        PR tree-optimization/27087
+-        * tree-ssa-copy.c (may_propagate_copy): Test flow sensitive
+-        alias information too.
++	PR tree-optimization/27087
++	* tree-ssa-copy.c (may_propagate_copy): Test flow sensitive
++	alias information too.
+ 
+ 2006-04-18  Andreas Krebbel  <krebbel1@de.ibm.com>
+ 
+@@ -2109,14 +3054,14 @@
+ 
+ 2006-04-18  Paolo Bonzini  <bonzini@gnu.org>
+ 
+-        PR tree-optimization/26643
++	PR tree-optimization/26643
+ 
+ 	Backport from mainline:
+ 	2006-03-29  Zdenek Dvorak <dvorakz@suse.cz>
+ 
+-        PR tree-optimization/26643
+-        * tree-ssa-loop-ivopts.c (find_interesting_uses_address): Do not handle
+-        bit_field_refs.
++	PR tree-optimization/26643
++	* tree-ssa-loop-ivopts.c (find_interesting_uses_address): Do not handle
++	bit_field_refs.
+ 
+ 2006-04-18  Paolo Bonzini  <bonzini@gnu.org>
+ 
+@@ -2131,7 +3076,7 @@
+ 	(insert_reciprocals): Use it.
+ 
+ 	2006-02-02  Paolo Bonzini  <bonzini@gnu.org>
+-            
++	    
+ 	* tree-flow-inline.h (bsi_after_labels): Rewrite, return
+ 	what its name says.
+ 	* lambda-code.c (perfect_nestify): Use bsi_insert_before on
+@@ -2155,7 +3100,7 @@
+ 	to expand fallback builtin function call.
+ 
+ 2006-04-14  Alexey Starovoytov  <alexey.starovoytov@sun.com>
+-            Eric Botcazou  <ebotcazou@libertysurf.fr>
++	    Eric Botcazou  <ebotcazou@libertysurf.fr>
+ 
+ 	* config/sparc/sparc.c (emit_and_preserve): Allocate space for the
+ 	register save area.
+@@ -2229,7 +3174,7 @@
+ 
+ 2006-04-08  Matthias Klose  <doko@debian.org>
+ 
+-        * Makefile.in (unprotoize.o): Same dependencies as for protoize.o.
++	* Makefile.in (unprotoize.o): Same dependencies as for protoize.o.
+ 
+ 2006-04-07  Richard Guenther  <rguenther@suse.de>
+ 
+@@ -2287,7 +3232,7 @@
+ 	* tree-cfg.c (tree_duplicate_sese_region): Do not update SSA.
+ 	* tree-ssa-loop-ch.c (copy_loop_headers): Count successfully duplicated
+ 	headers and, if there was any, update SSA at the end.
+-        
++	
+ 	Backport from mainline:
+ 	2006-03-30  Paolo Bonzini  <bonzini@gnu.org>
+ 
+@@ -2404,7 +3349,7 @@
+ 2006-03-16  Paul Brook  <paul@codesourcery.com>
+ 
+ 	Backport from mainline.
+-	* gcc/config/arm/arm.c (minipool_pad): New.
++	* config/arm/arm.c (minipool_pad): New.
+ 	(add_minipool_forward_ref): Include pool alignment padding in address
+ 	calculation.
+ 	(push_minipool_fix): Set minipool_pad.
+@@ -3072,14 +4017,14 @@
+ 
+ 2006-01-31  Nathan Sidwell  <nathan@codesourcery.com>
+ 
+-	* gcc/config/m68k/lb1sf68.asm: Use moveq to load small constants.
++	* config/m68k/lb1sf68.asm: Use moveq to load small constants.
+ 
+ 2006-01-31  Richard Guenther  <rguenther@suse.de>
+ 
+ 	Backport
+ 	2006-01-03  Adrian Straetling  <straetling@de.ibm.com>
+ 
+-	* gcc/builtins.c (get_builtin_sync_mem): New function.
++	* builtins.c (get_builtin_sync_mem): New function.
+ 	(expand_builtin_sync_operation, expand_builtin_compare_and_swap,
+ 	expand_builtin_lock_test_and_set, expand_builtin_lock_release):
+ 	Call get_builtin_sync_mem to generate mem rtx.
+@@ -3250,7 +4195,7 @@
+ 
+ 2006-01-19  Paul Brook  <paul@codesourcery.com>
+ 
+-	* gcc/config/arm/arm.c (arm_compute_func_type): Treat all functions
++	* config/arm/arm.c (arm_compute_func_type): Treat all functions
+ 	as nothrow when unwinding tables are disabled.
+ 
+ 2006-01-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+@@ -4398,7 +5343,7 @@
+ 	(_Unwind_Stop_Fn): New typedef.
+ 	(_Unwind_ForcedUnwind): Declare.
+ 	(_Unwind_Resume_or_Rethrow): Declare.
+-	* gcc/config/arm/libunwind.S (UNWIND_WRAPER): Add nargs
++	* config/arm/libunwind.S (UNWIND_WRAPER): Add nargs
+ 	argument.  Adjust.
+ 	(_Unwind_Resume_or_Rethrow, _Unwind_ForcedUnwind): New.
+ 	* config/arm/unwind-arm.c (UCB_FORCED_STOP_FN)
+@@ -5266,8 +6211,8 @@
+ 2005-11-04  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+ 
+ 	PR fortran/18452
+-	* gcc/c.opt: Add a -lang-fortran option.
+-	* gcc/c-opts.c: Add a lang_fortran flag.
++	* c.opt: Add a -lang-fortran option.
++	* c-opts.c: Add a lang_fortran flag.
+ 	(c_common_init_options): Handling the -lang-fortran option.
+ 	(c_common_handle_option): Add a case for Fortran options in
+ 	preprocessing. Remove cases for -ffixed-form and
+Index: gcc/testsuite/gcc.c-torture/execute/builtins/stpcpy-chk.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/builtins/stpcpy-chk.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.c-torture/execute/builtins/stpcpy-chk.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -11,7 +11,7 @@
+ 
+ #include "chk.h"
+ 
+-const char s1[] = "123";
++LOCAL const char s1[] = "123";
+ char p[32] = "";
+ char *s2 = "defg";
+ char *s3 = "FGH";
+Index: gcc/testsuite/gcc.c-torture/execute/builtins/sprintf-chk.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/builtins/sprintf-chk.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.c-torture/execute/builtins/sprintf-chk.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -13,7 +13,7 @@
+ 
+ #include "chk.h"
+ 
+-const char s1[] = "123";
++LOCAL const char s1[] = "123";
+ char p[32] = "";
+ char *s2 = "defg";
+ char *s3 = "FGH";
+Index: gcc/testsuite/gcc.c-torture/execute/builtins/chk.h
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/builtins/chk.h	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.c-torture/execute/builtins/chk.h	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -79,3 +79,11 @@
+ extern volatile int strncpy_disallowed, strcat_disallowed, strncat_disallowed;
+ extern volatile int sprintf_disallowed, vsprintf_disallowed;
+ extern volatile int snprintf_disallowed, vsnprintf_disallowed;
++
++/* A storage class that ensures that declarations bind locally.  We want
++   to test non-static declarations where we know it is safe to do so.  */
++#if __PIC__ || __pic__
++#define LOCAL static
++#else
++#define LOCAL
++#endif
+Index: gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-chk.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-chk.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-chk.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -11,7 +11,7 @@
+ 
+ #include "chk.h"
+ 
+-const char s1[] = "123";
++LOCAL const char s1[] = "123";
+ char p[32] = "";
+ char *s2 = "defg";
+ char *s3 = "FGH";
+Index: gcc/testsuite/gcc.c-torture/execute/20070216-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/20070216-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/20070216-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,23 @@
++/* PR rtl-optimization/30787 */
++/* Testcase by Jakub Jelinek <jakub@gcc.gnu.org> */
++
++struct S
++{
++  int *s;
++};
++
++void test (int x, struct S *y)
++{
++  int i;
++  for (i = 0; i < x; i++)
++    {
++      if (y)
++        y->s[i] += 1;
++    }
++}
++
++int main (void)
++{
++  test (1, (void *) 0);
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr31448.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/pr31448.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/pr31448.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,36 @@
++/* PR middle-end/31448, this used to ICE during expand because
++   reduce_to_bit_field_precision was not ready to handle constants. */
++
++typedef struct _st {
++    int iIndex : 24;
++    int iIndex1 : 24;
++} st;
++st *next;
++void g(void)
++{
++    st *next = 0;
++    int nIndx;
++    const static int constreg[] = { 0,};
++    nIndx = 0;
++    next->iIndex = constreg[nIndx];
++}
++void f(void)
++{
++    int nIndx;
++    const static int constreg[] = { 0xFEFEFEFE,};
++    nIndx = 0;
++    next->iIndex = constreg[nIndx];
++    next->iIndex1 = constreg[nIndx];
++}
++int main(void)
++{
++  st a;
++  next = &a;
++  f();
++  if (next->iIndex != 0xFFFEFEFE)
++    __builtin_abort ();
++  if (next->iIndex1 != 0xFFFEFEFE)
++    __builtin_abort ();
++  return 0;
++}
++
+Index: gcc/testsuite/gcc.c-torture/execute/pr33631.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/pr33631.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/pr33631.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++typedef union
++{
++  int __lock;
++} pthread_mutex_t;
++
++extern void abort (void);
++
++int main()
++{
++    struct { int c; pthread_mutex_t m; } r = { .m = 0 };
++    if (r.c != 0)
++      abort ();
++    return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr35163.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/pr35163.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/pr35163.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,11 @@
++extern void abort(void);
++
++int main()
++{
++  signed char a = -30;
++  signed char b = -31;
++  if (a > (unsigned short)b)
++    abort ();
++  return 0;
++}
++
+Index: gcc/testsuite/gcc.c-torture/execute/20070201-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/20070201-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/20070201-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,20 @@
++/* PR middle-end/30473 */
++
++extern int sprintf (char *, const char *, ...);
++extern void abort (void);
++
++char *
++foo (char *buf, char *p)
++{
++  sprintf (buf, "abcde", p++);
++  return p;
++}
++
++int
++main (void)
++{
++  char buf[6];
++  if (foo (buf, &buf[2]) != &buf[3])
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20070227-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/20070227-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/20070227-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,31 @@
++/* PR rtl-optimization/30931 */
++/* Testcase by Peter Bergner <bergner@gcc.gnu.org> */
++
++struct s
++{
++  int first;
++  int done;
++};
++
++void bug (struct s *p)
++{
++  int i;
++  for (i=0; i < 2; i++)
++    {
++      while (p[i].first && p[i].done)
++        p[i].first = 0;
++    }
++}
++
++int main (void)
++{
++  struct s array[2];
++  array[0].first = 1;
++  array[0].done = 1;
++  array[1].first = 0;
++  array[1].done = 0;
++
++  bug (array);
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr34456.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/pr34456.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/pr34456.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,30 @@
++#include <stdlib.h>
++
++int __attribute__ ((noinline)) debug (void) { return 1; }
++int errors;
++
++struct s { int elt; int (*compare) (int); };
++
++static int
++compare (const void *x, const void *y)
++{
++  const struct s *s1 = x, *s2 = y;
++  int (*compare1) (int);
++  int elt2;
++
++  compare1 = s1->compare;
++  elt2 = s2->elt;
++  if (elt2 != 0 && debug () && compare1 (s1->elt) != 0)
++    errors++;
++  return compare1 (elt2);
++}
++
++int bad_compare (int x) { return -x; }
++struct s array[2] = { { 1, bad_compare }, { -1, bad_compare } };
++
++int
++main (void)
++{
++  qsort (array, 2, sizeof (struct s), compare);
++  return errors == 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20070614-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/20070614-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/20070614-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,33 @@
++extern void abort (void);
++
++_Complex v = 3.0 + 1.0iF;
++
++void
++foo (_Complex z, int *x)
++{
++  if (z != v)
++    abort ();
++}
++
++_Complex bar (_Complex z) __attribute__ ((pure));
++_Complex
++bar (_Complex z)
++{
++  return v;
++}
++
++int
++baz (void)
++{
++  int a, i;
++  for (i = 0; i < 6; i++)
++    foo (bar (1.0iF * i), &a);
++  return 0;
++}
++
++int
++main ()
++{
++  baz ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr34130.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/pr34130.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/pr34130.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,12 @@
++extern void abort (void);
++int foo (int i)
++{
++  return -2 * __builtin_abs(i - 2);
++}
++int main()
++{
++  if (foo(1) != -2
++      || foo(3) != -2)
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr33142.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/pr33142.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/pr33142.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,16 @@
++int abs(int j);
++extern void abort(void);
++
++__attribute__((noinline)) int lisp_atan2(long dy, long dx) {
++    if (dx <= 0)
++        if (dy > 0)
++            return abs(dx) <= abs(dy);
++    return 0;
++}
++
++int main() {   
++    volatile long dy = 63, dx = -77;
++    if (lisp_atan2(dy, dx))
++        abort();
++    return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20070517-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/20070517-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/20070517-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,41 @@
++/* PR rtl-optimization/31691 */
++/* Origin: Chi-Hua Chen <stephaniechc-gccbug@yahoo.com> */
++
++extern void abort (void);
++
++static int get_kind(int) __attribute__ ((noinline));
++
++static int get_kind(int v)
++{
++  volatile int k = v;
++  return k;
++}
++
++static int some_call(void) __attribute__ ((noinline));
++
++static int some_call(void)
++{
++  return 0;
++}
++
++static void example (int arg)
++{
++  int tmp, kind = get_kind (arg);
++
++  if (kind == 9 || kind == 10 || kind == 5)
++    {
++      if (some_call() == 0)
++        {
++          if (kind == 9 || kind == 10)
++            tmp = arg;
++          else
++            abort();
++        }
++    }
++} 
++
++int main(void)
++{
++  example(10);
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20080408-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/execute/20080408-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/execute/20080408-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,11 @@
++extern void abort (void);
++int main ()
++{
++  short ssi = 126;
++  unsigned short usi = 65280;
++  int fail = !(ssi < usi);
++  if (fail)
++    abort ();
++  return 0;
++}
++
+Index: gcc/testsuite/gcc.c-torture/compile/pr28675.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/pr28675.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/pr28675.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,38 @@
++struct fb_cmap {
++ unsigned int start;
++ unsigned int len;
++ unsigned short *red;
++ unsigned short *green;
++ unsigned short *blue;
++ unsigned short *transp;
++};
++
++typedef struct {
++    int r;
++    int g;
++    int b;
++    int a;
++} rgba_t;
++
++static unsigned int cmap_len;
++
++extern unsigned int red_len, green_len, blue_len, alpha_len;
++extern struct fb_cmap fb_cmap;
++extern rgba_t *clut;
++extern int fb_set_cmap(void);
++
++void directcolor_update_cmap(void)
++{
++    unsigned int i;
++
++    for (i = 0; i < cmap_len; i++) {
++      if (i < red_len)
++	fb_cmap.red[i] = clut[i].r;
++      if (i < green_len)
++	fb_cmap.green[i] = clut[i].g;
++      if (i < blue_len)
++	fb_cmap.blue[i] = clut[i].b;
++      if (fb_cmap.transp && i < alpha_len)
++	fb_cmap.transp[i] = clut[i].a;
++    }
++}
+Index: gcc/testsuite/gcc.c-torture/compile/pr34993.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/pr34993.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/pr34993.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,5 @@
++/* PR c/34993 */
++
++/* { dg-do compile } */
++
++typedef int x[] __attribute((may_alias));
+Index: gcc/testsuite/gcc.c-torture/compile/20071102-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/20071102-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/20071102-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,32 @@
++/* PR rtl-optimization/28062 */
++/* Original testcase by Martin Michlmayr <tbm@cyrius.com> */
++/* C testcase by Andrew Pinski <pinskia@gcc.gnu.org> */
++
++struct _NSPoint
++{
++  float x;
++  float y;
++};
++
++typedef struct _NSPoint NSPoint;
++
++static inline NSPoint
++NSMakePoint (float x, float y)
++{
++  NSPoint point;
++  point.x = x;
++  point.y = y;
++  return point;
++}
++
++static inline NSPoint
++RelativePoint (NSPoint point, NSPoint refPoint)
++{
++  return NSMakePoint (refPoint.x + point.x, refPoint.y + point.y);
++}
++
++NSPoint g(NSPoint refPoint)
++{
++  float pointA, pointB;
++  return RelativePoint (NSMakePoint (0, pointA), refPoint);
++}
+Index: gcc/testsuite/gcc.c-torture/compile/pr34030.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/pr34030.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/pr34030.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,8 @@
++int myvar;
++
++int foo(int mynum)
++{
++  if ((((void *)0) == (myvar & ((1U<<0) << mynum))) && (mynum > 0))
++    return 1;
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/compile/pr30433.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/pr30433.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/pr30433.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,2 @@
++int f = (_Complex float)(0.5) == 0.5;
++
+Index: gcc/testsuite/gcc.c-torture/compile/pr30984.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/pr30984.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/pr30984.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,7 @@
++int fs_exec(int ino)
++{
++ void *src = 0;
++ if (ino)
++   src = (void*)0xe000;
++ goto *src;
++}
+Index: gcc/testsuite/gcc.c-torture/compile/20070419-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/20070419-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/20070419-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,17 @@
++/* PR tree-optimization/31632 */
++
++struct S
++{
++  long int l;
++  void *m;
++};
++
++int
++foo (struct S *x)
++{
++  unsigned long a;
++  a = x->l;
++  if (a <= ((void *) 0))
++    x->m = 0;
++  return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/compile/20080114-1.c
+===================================================================
+--- gcc/testsuite/gcc.c-torture/compile/20080114-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.c-torture/compile/20080114-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++/* PR rtl-optimization/31944 */
++/* Origin: Aurelien Jarno <aurelien@aurel32.net> */
++
++int type;
++
++void stuck(int res)
++{
++  if (type == 1) {
++    if (res == 0) asm volatile("");
++  }
++  else if (type == 0) {
++    if (res == 0) asm volatile("" : : "i" (0));
++  }
++}
+Index: gcc/testsuite/gcc.target/arm/stack-corruption.c
+===================================================================
+--- gcc/testsuite/gcc.target/arm/stack-corruption.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/arm/stack-corruption.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-O -mthumb -fno-omit-frame-pointer" } */
++
++int main() {
++  return 0;
++}
++
++/* { dg-final { scan-assembler-not "\tadd\tr7, sp, #8\n" } } */
+Index: gcc/testsuite/gcc.target/mips/mips.exp
+===================================================================
+--- gcc/testsuite/gcc.target/mips/mips.exp	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/mips/mips.exp	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -37,6 +37,7 @@
+ #    $mips_forced_isa:	 true if the command line uses -march=* or -mips*
+ #    $mips_forced_abi:	 true if the command line uses -mabi=* or -mgp*
+ #    $mips_forced_float: true if the command line uses -mhard/soft-float
++#    $mips_forced_le	 true if the command line uses -EL or -mel
+ proc setup_mips_tests {} {
+     global mips_isa
+     global mips_arch
+@@ -47,6 +48,7 @@
+     global mips_forced_isa
+     global mips_forced_abi
+     global mips_forced_float
++    global mips_forced_le
+ 
+     global compiler_flags
+     global tool
+@@ -81,6 +83,7 @@
+     set mips_forced_isa [regexp -- {(-mips|-march)} $compiler_flags]
+     set mips_forced_abi [regexp -- {(-mgp|-mabi)} $compiler_flags]
+     set mips_forced_float [regexp -- {-m(hard|soft)-float} $compiler_flags]
++    set mips_forced_le [regexp -- {-(EL|mel)[[:>:]]} $compiler_flags]
+ }
+ 
+ # Return true if command-line option FLAG forces 32-bit code.
+@@ -116,6 +119,10 @@
+ #    -mhard-float
+ #	Select the given floating-point mode.  Skip the test if the
+ #	multilib flags force a different selection.
++#
++#    -EB
++#	Select big-endian code.  Skip the test if the multilib flags
++#	force a little-endian target.
+ proc dg-mips-options {args} {
+     upvar dg-extra-tool-flags extra_tool_flags
+     upvar dg-do-what do_what
+@@ -129,6 +136,7 @@
+     global mips_forced_isa
+     global mips_forced_abi
+     global mips_forced_float
++    global mips_forced_le
+ 
+     set flags [lindex $args 1]
+     set matches 1
+@@ -170,6 +178,10 @@
+ 	    if {$mips_float != $float && $mips_forced_float} {
+ 		set matches 0
+ 	    }
++	} elseif {[regexp -- {^-(EB|meb)$} $flag]} {
++	    if {$mips_forced_le} {
++		set matches 0
++	    }
+ 	}
+     }
+     if {$matches} {
+Index: gcc/testsuite/gcc.target/mips/pr33256.c
+===================================================================
+--- gcc/testsuite/gcc.target/mips/pr33256.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/mips/pr33256.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,11 @@
++/* GCC used to report an ICE for this test because we generated a LO_SUM
++   for an illegitimate constant.  */
++/* { dg-mips-options "-mabi=64 -mips3 -msym32 -O2 -EB -mno-abicalls" } */
++extern unsigned long a[];
++int b (int);
++
++int
++c (void)
++{
++  return b (a[0]);
++}
+Index: gcc/testsuite/gcc.target/sparc/combined-2.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/combined-2.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/combined-2.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */
+-typedef char pixel __attribute__((vector_size(4)));
+-typedef char vec8 __attribute__((vector_size(8)));
++typedef unsigned char pixel __attribute__((vector_size(4)));
++typedef unsigned char vec8 __attribute__((vector_size(8)));
+ typedef short vec16 __attribute__((vector_size(8)));
+ 
+ vec16 foo (pixel a, pixel b) {
+Index: gcc/testsuite/gcc.target/sparc/fpmul.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/fpmul.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/fpmul.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -2,9 +2,9 @@
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+ typedef int vec32 __attribute__((vector_size(8)));
+ typedef short vec16 __attribute__((vector_size(8)));
+-typedef char pixel __attribute__((vector_size(4)));
++typedef unsigned char pixel __attribute__((vector_size(4)));
+ typedef short pixel16 __attribute__((vector_size(4)));
+-typedef char vec8 __attribute__((vector_size(8)));
++typedef unsigned char vec8 __attribute__((vector_size(8)));
+ 
+ vec16 foo1 (pixel a, vec16 b) {
+   return __builtin_vis_fmul8x16 (a, b);
+Index: gcc/testsuite/gcc.target/sparc/pdist.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/pdist.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/pdist.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,8 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+-
+ typedef long long int64_t;
+-typedef char vec8 __attribute__((vector_size(8)));
++typedef unsigned char vec8 __attribute__((vector_size(8)));
+ 
+ int64_t foo (vec8 a, vec8 b) {
+   int64_t d = 0;
+Index: gcc/testsuite/gcc.target/sparc/fexpand.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/fexpand.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/fexpand.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+ typedef short vec16 __attribute__((vector_size(8)));
+-typedef char vec8 __attribute__((vector_size(4)));
++typedef unsigned char vec8 __attribute__((vector_size(4)));
+ 
+ vec16 foo (vec8 a) {
+   return __builtin_vis_fexpand (a);
+Index: gcc/testsuite/gcc.target/sparc/fnot.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/fnot.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/fnot.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,8 +1,8 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O -mcpu=ultrasparc -mvis" } */
+-typedef char  vec8 __attribute__((vector_size(8)));
++typedef unsigned char vec8 __attribute__((vector_size(8)));
+ typedef short vec16 __attribute__((vector_size(8)));
+-typedef int   vec32 __attribute__((vector_size(8)));
++typedef int vec32 __attribute__((vector_size(8)));
+ 
+ extern vec8 foo1_8(void);
+ extern void foo2_8(vec8);
+@@ -21,7 +21,7 @@
+ #endif
+ 
+ extern vec16 foo1_16(void);
+-extern void foo2_16(vec8);
++extern void foo2_16(vec16);
+ 
+ 
+ vec16 fun16(void)
+@@ -38,7 +38,7 @@
+ #endif
+ 
+ extern vec32 foo1_32(void);
+-extern void foo2_32(vec8);
++extern void foo2_32(vec32);
+ 
+ vec32 fun32(void)
+ {
+Index: gcc/testsuite/gcc.target/sparc/mfpu.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/mfpu.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/sparc/mfpu.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,11 @@
++/* Reported by Peter A. Krauss <peter.a.krauss@web.de> */
++
++/* { dg-do compile } */
++/* { dg-options "-mfpu" } */
++
++float square(float x)
++{
++  return x * x;
++}
++
++/* { dg-final { scan-assembler "fmuls" } } */
+Index: gcc/testsuite/gcc.target/sparc/noresult.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/noresult.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/noresult.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+ typedef short vec16 __attribute__((vector_size(8)));
+-typedef char vec8 __attribute__((vector_size(4)));
+ 
+ void foo (vec16 a) {
+   __builtin_vis_fpack16 (a);
+Index: gcc/testsuite/gcc.target/sparc/fpmerge.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/fpmerge.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/fpmerge.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+-typedef char pixel __attribute__((vector_size(8)));
+-typedef char vec8 __attribute__((vector_size(4)));
++typedef unsigned char pixel __attribute__((vector_size(8)));
++typedef unsigned char vec8 __attribute__((vector_size(4)));
+ 
+ pixel foo (vec8 a, vec8 b) {
+   return __builtin_vis_fpmerge (a, b);
+Index: gcc/testsuite/gcc.target/sparc/align.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/align.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/align.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,10 +1,9 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+-
+ typedef long long int64_t;
+ typedef int vec32 __attribute__((vector_size(8)));
+ typedef short vec16 __attribute__((vector_size(8)));
+-typedef char vec8 __attribute__((vector_size(8)));
++typedef unsigned char vec8 __attribute__((vector_size(8)));
+ 
+ vec16 foo1 (vec16 a, vec16 b) {
+   return __builtin_vis_faligndatav4hi (a, b);
+Index: gcc/testsuite/gcc.target/sparc/fpack16.c
+===================================================================
+--- gcc/testsuite/gcc.target/sparc/fpack16.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/sparc/fpack16.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=ultrasparc -mvis" } */
+ typedef short vec16 __attribute__((vector_size(8)));
+-typedef char vec8 __attribute__((vector_size(4)));
++typedef unsigned char vec8 __attribute__((vector_size(4)));
+ 
+ vec8 foo (vec16 a) {
+   return __builtin_vis_fpack16 (a);
+Index: gcc/testsuite/gcc.target/i386/ordcmp-1.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/ordcmp-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/i386/ordcmp-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,36 @@
++/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
++/* { dg-options "-O2 -msse2" } */
++/* { dg-final { scan-assembler "cmpordss" } } */
++/* { dg-final { scan-assembler "cmpordps" } } */
++/* { dg-final { scan-assembler "cmpordsd" } } */
++/* { dg-final { scan-assembler "cmpordpd" } } */
++/* { dg-final { scan-assembler-not "cmpunordss" } } */
++/* { dg-final { scan-assembler-not "cmpunordps" } } */
++/* { dg-final { scan-assembler-not "cmpunordsd" } } */
++/* { dg-final { scan-assembler-not "cmpunordpd" } } */
++
++#include <emmintrin.h>
++
++__m128
++f1 (__m128 x, __m128 y)
++{
++  return _mm_cmpord_ss (x, y);
++}
++
++__m128
++f2 (__m128 x, __m128 y)
++{
++  return _mm_cmpord_ps (x, y);
++}
++
++__m128d
++f3 (__m128d x, __m128d y)
++{
++  return _mm_cmpord_sd (x, y);
++}
++
++__m128d
++f4 (__m128d x, __m128d y)
++{
++  return _mm_cmpord_pd (x, y);
++}
+Index: gcc/testsuite/gcc.target/i386/pr32389.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/pr32389.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/i386/pr32389.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,10 @@
++/* Testcase by Mike Frysinger <vapier@gentoo.org>  */
++
++/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
++/* { dg-options "-msse" } */
++
++double f1();
++int f2() {
++  __builtin_ia32_stmxcsr();
++  return f1();
++}
+Index: gcc/testsuite/gcc.target/i386/unordcmp-1.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/unordcmp-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/i386/unordcmp-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,36 @@
++/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
++/* { dg-options "-O2 -msse2" } */
++/* { dg-final { scan-assembler "cmpunordss" } } */
++/* { dg-final { scan-assembler "cmpunordps" } } */
++/* { dg-final { scan-assembler "cmpunordsd" } } */
++/* { dg-final { scan-assembler "cmpunordpd" } } */
++/* { dg-final { scan-assembler-not "cmpordss" } } */
++/* { dg-final { scan-assembler-not "cmpordps" } } */
++/* { dg-final { scan-assembler-not "cmpordsd" } } */
++/* { dg-final { scan-assembler-not "cmpordpd" } } */
++
++#include <emmintrin.h>
++
++__m128
++f1 (__m128 x, __m128 y)
++{
++  return _mm_cmpunord_ss (x, y);
++}
++
++__m128
++f2 (__m128 x, __m128 y)
++{
++  return _mm_cmpunord_ps (x, y);
++}
++
++__m128d
++f3 (__m128d x, __m128d y)
++{
++  return _mm_cmpunord_sd (x, y);
++}
++
++__m128d
++f4 (__m128d x, __m128d y)
++{
++  return _mm_cmpunord_pd (x, y);
++}
+Index: gcc/testsuite/gcc.target/i386/pr21291.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/pr21291.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.target/i386/pr21291.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,4 +1,9 @@
+-/* { dg-do compile } */
++/* The asm has 2 "r" in/out operands, 1 earlyclobber "r" output, 1 "r"
++   input and 2 fixed "r" clobbers (eax and edx), so there are a total of
++   6 registers that must not conflict.  Add to that the PIC register,
++   the frame pointer, and the stack pointer, and we've run out of
++   registers on 32-bit targets.  */
++/* { dg-do compile { target { { ! ilp32 } || nonpic } } } */
+ /* { dg-options "-O" } */
+ 
+ typedef unsigned long bngdigit;
+Index: gcc/testsuite/gcc.target/i386/pr30848.c
+===================================================================
+--- gcc/testsuite/gcc.target/i386/pr30848.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.target/i386/pr30848.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,6 @@
++/* { dg-do compile } */
++
++void foo(double d)
++{
++  __asm__ ("" : "=u" (d));  /* { dg-error "output regs" } */
++}
+Index: gcc/testsuite/gcc.dg/tf_to_di-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/tf_to_di-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/tf_to_di-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,47 @@
++/* { dg-do run { target s390*-*-* } } */
++/* { dg-options "-O0 -mlong-double-128" } */
++
++#include <stdio.h>
++#include <stdlib.h>
++
++void
++check_ll (long double ld, long long ll)
++{
++  if ((long long)ld != ll)
++    {
++      printf ("ld: %Lf expect: %lld result: %lld\n",
++	      ld, ll, (long long)ld);
++      abort ();
++    }
++}
++
++void
++check_ull (long double ld, unsigned long long ull)
++{
++  if ((unsigned long long)ld != ull)
++    {
++      printf ("ld: %Lf expect: %llu result: %llu\n",
++	      ld, ull, (unsigned long long)ld);
++      abort ();
++    }
++}
++
++int
++main ()
++{
++  const long long ll_max = (long long)((1ULL << 63) - 1);
++  const long long ll_min = -ll_max - 1;
++
++  check_ll (206.23253, 206LL);
++  check_ull (206.23253, 206ULL);
++  check_ll ((long double)ll_max, ll_max);
++  check_ull ((long double)ll_max, ll_max);
++  check_ll ((long double)ll_min, ll_min);
++  check_ll (0.0, 0);
++  check_ull (0.0, 0);
++  check_ll (-1.0, -1);
++  check_ll ((long double)0xffffffffffffffffULL, ll_max);
++  check_ull ((long double)0xffffffffffffffffULL, 0xffffffffffffffffULL);
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/inline-17.c
+===================================================================
+--- gcc/testsuite/gcc.dg/inline-17.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/inline-17.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,24 @@
++/* Test __attribute__((gnu_inline)).  */
++/* { dg-do compile } */
++/* { dg-options "-std=c99" } */
++/* { dg-final { scan-assembler "func1" } } */
++/* { dg-final { scan-assembler-not "func2" } } */
++/* { dg-final { scan-assembler "func3" } } */
++/* { dg-final { scan-assembler "func4" } } */
++
++#if __STDC_VERSION__ >= 199901L
++# define inline __attribute__((gnu_inline)) inline
++#endif
++
++extern inline int func1 (void) { return 0; }
++inline int func1 (void) { return 1; }
++
++extern int func2 (void);
++extern inline int func2 (void) { return 2; }
++
++inline int func3 (void);
++inline int func3 (void) { return 3; }
++
++extern int func4 (void);
++extern inline int func4 (void) { return 4; }
++int func4 (void) { return 5; }
+Index: gcc/testsuite/gcc.dg/pr30045.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr30045.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr30045.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fno-inline" }  */
++int f(int *a)
++{
++  int  __attribute__((nonnull(1))) g(int *b)
++  {
++    int **c = &a;
++    if (b)
++      return *a + **c;
++    return *b;
++  }
++  if (a)
++    return g(a);
++  return 1;
++}
+Index: gcc/testsuite/gcc.dg/inline-19.c
+===================================================================
+--- gcc/testsuite/gcc.dg/inline-19.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/inline-19.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,28 @@
++/* Test -fgnu89-extern-inline.  */
++/* { dg-do compile } */
++/* { dg-options "-fgnu89-inline" } */
++/* { dg-final { scan-assembler "func1" } } */
++/* { dg-final { scan-assembler-not "func2" } } */
++/* { dg-final { scan-assembler "func3" } } */
++/* { dg-final { scan-assembler "func4" } } */
++
++#ifndef __GNUC_GNU_INLINE__
++#error __GNUC_GNU_INLINE__ is not defined
++#endif
++
++#ifdef __GNUC_STDC_INLINE__
++#error __GNUC_STDC_INLINE__ is defined
++#endif
++
++extern inline int func1 (void) { return 0; }
++inline int func1 (void) { return 1; }
++
++extern int func2 (void);
++extern inline int func2 (void) { return 2; }
++
++inline int func3 (void);
++inline int func3 (void) { return 3; }
++
++extern int func4 (void);
++extern inline int func4 (void) { return 4; }
++int func4 (void) { return 5; }
+Index: gcc/testsuite/gcc.dg/nested-func-6.c
+===================================================================
+--- gcc/testsuite/gcc.dg/nested-func-6.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/nested-func-6.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O -Winline" } */
++
++static inline int foo1 (int a)
++{                       /* { dg-bogus "function not inlinable" } */
++  void bar1 (int b)
++  {}
++  return a;
++}
++
++int foo2 (int a)
++{
++  return foo1 (a);
++}
+Index: gcc/testsuite/gcc.dg/pr34003-2.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr34003-2.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr34003-2.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,20 @@
++/* PR bootstrap/34003 */
++/* { dg-do compile } */
++/* { dg-options "-O0" } */
++
++extern void abort (void);
++
++int seen = 0;
++
++void foo (void)
++{
++  ++seen;
++}
++
++int main (void)
++{
++  extern int bar (void);
++  if (bar () != 1 || seen != 1)
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/pr33826.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr33826.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr33826.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,41 @@
++/* Regression test for PR middle-end/33826 */
++/* Verify that recursive functions cannot be pure or const.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target nonpic } */
++/* { dg-options "-O1 -fdump-ipa-pure-const" } */
++
++int recurese1 (int i)
++{
++  return recurse1 (i+1);
++}
++
++int recurse2a (int i)
++{
++  return recurse2b (i+1);
++}
++
++int recurse2b (int i)
++{
++  return recurse2a (i+1);
++}
++
++int norecurse1a (int i)
++{
++  return norecurse1b (i+1);
++}
++
++int norecurse1b (int i)
++{
++  return i+1;
++}
++
++/* { dg-final { scan-ipa-dump "found to be const: norecurse1a" "pure-const" } } */
++/* { dg-final { scan-ipa-dump "found to be const: norecurse1b" "pure-const" } } */
++/* { dg-final { scan-ipa-dump-not "found to be pure: recurse1" "pure-const" } } */
++/* { dg-final { scan-ipa-dump-not "found to be pure: recurse2a" "pure-const" } } */
++/* { dg-final { scan-ipa-dump-not "found to be pure: recurse2b" "pure-const" } } */
++/* { dg-final { scan-ipa-dump-not "found to be const: recurse1" "pure-const" } } */
++/* { dg-final { scan-ipa-dump-not "found to be const: recurse2a" "pure-const" } } */
++/* { dg-final { scan-ipa-dump-not "found to be const: recurse2b" "pure-const" } } */
++/* { dg-final { cleanup-ipa-dump "pure-const" } } */
+Index: gcc/testsuite/gcc.dg/c99-math-double-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/c99-math-double-1.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/c99-math-double-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -6,13 +6,17 @@
+ 
+ int main(void)
+ {
+-  double nan = NAN;
+-  double inf = INFINITY;
+-  double huge = HUGE_VAL;
+-  double norm = __DBL_MIN__;
+-  double zero = 0.0;
++  volatile double nan = NAN;
++  volatile double inf = INFINITY;
++  volatile double huge = HUGE_VAL;
++  volatile double norm1 = __DBL_MIN__;
++  volatile double norm2 = 1;
++  volatile double norm3 = __DBL_MAX__;
++  volatile double sub = __DBL_MIN__ / 2;
++  volatile double zero = 0.0;
+ 
+-  C99_MATH_TESTS (nan, inf, huge, norm, zero)
++  C99_MATH_TESTS (nan, inf, huge, norm1, norm2, norm3, sub, zero, /*neg=*/0)
++  C99_MATH_TESTS (-nan, -inf, -huge, -norm1, -norm2, -norm3, -sub, -zero, /*neg=*/1)
+ 
+   return 0;
+ }
+Index: gcc/testsuite/gcc.dg/20070507-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/20070507-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/20070507-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,103 @@
++/* This failed on s390x due to bug in loop.c.
++   loop.c failed to remove a REG_EQUAL note when
++   hoisting an insn from a loop body.  */
++
++/* { dg-options "-O3 -fPIC" } */
++/* { dg-do run { target fpic } } */
++
++typedef __SIZE_TYPE__ size_t;
++int memcmp(const void *s1, const void *s2, size_t n);
++
++typedef struct
++{
++  char name[30];
++  int a;
++} LOCAL;
++
++int global = 0;
++int sy = 1;
++int subroutine_offset;
++
++LOCAL local = { "local", 0 };
++LOCAL keywords = { "keywords", 1 };
++int local_table = 0;
++int keywords_table = 0;
++
++void __attribute__((noinline)) bar (char *p_buffer)
++{
++  p_buffer[255] = 1;
++}
++
++int __attribute__((noinline)) foo (char *p_str1)
++{
++  global = 1;
++  return 1;
++}
++
++int __attribute__((noinline)) loop_next (int *p_table, char *p_table_head)
++{
++  static loop_next = 0;
++
++  if (loop_next == 1)
++    return 1;
++
++  loop_next = 1;
++  return 0;
++}
++
++int
++main ()
++{
++  char buffer[256];
++  int ende = 0;
++  int index;
++  int local_base = 2;
++
++  keywords.a = 1;
++  for (sy = 0;; sy++)
++    {
++      for (index = 1;;)
++	{
++	  bar (buffer);
++	  if (buffer[sy] != 0)
++	    {
++	      ende = 1;
++	      break;
++	    };
++	  if (foo (buffer))
++	    {
++	      keywords.a += index - 1;
++	      break;
++	    }
++	  index++;
++	}
++      if (ende)
++	break;
++    }
++
++  subroutine_offset = 0;
++
++  for (;;)
++    {
++      if (loop_next (&keywords_table, (char*)&keywords))
++	break;
++
++      if ((!memcmp (keywords.name, "+++", 3)))
++	local_base = 100;
++      else
++	local_base = 0;
++
++      if ((!memcmp (keywords.name, "+++", 3)))
++	subroutine_offset += local_table;
++
++      for (;;)
++	{
++	  if (loop_next (&local_table, (char*)&local))
++	    break;;
++	  if ((local.a == 0))
++	    continue;;
++	  foo (local.name);
++	}
++    }
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/pr32450.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr32450.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr32450.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,33 @@
++/* Contributed by Joost VandeVondele  <jv244@cam.ac.uk> */
++
++/* { dg-do run } */
++/* { dg-require-profiling "-pg" } */
++/* { dg-options "-O2 -pg" } */
++/* { dg-options "-O2 -pg -static" { target hppa*-*-hpux* } } */
++
++extern void abort (void);
++
++int stack_pointer;
++
++void
++__attribute__((noinline))
++mystop ()
++{
++  abort ();
++}
++
++void
++__attribute__((noinline))
++add ()
++{
++  if (stack_pointer + 1 > 10)
++    mystop ();
++
++  stack_pointer = stack_pointer + 1;
++}
++
++int main ()
++{
++  add ();
++  return stack_pointer - 1;
++}
+Index: gcc/testsuite/gcc.dg/pr32912-2.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr32912-2.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr32912-2.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,45 @@
++/* { dg-do run } */
++/* { dg-options "-O2 -w" } */
++
++extern void abort (void);
++
++typedef int __m128i __attribute__ ((__vector_size__ (16)));
++
++__m128i a, b, c, d, e, f;
++
++__m128i
++foo (void)
++{
++  __m128i x = { 0x11111111, 0x22222222, 0x44444444 };
++  return x;
++}
++
++__m128i
++bar (void)
++{
++  __m128i x = { 0x11111111, 0x22222222, 0x44444444 };
++  return ~x;
++}
++
++int
++main (void)
++{
++  union { __m128i v; int i[sizeof (__m128i) / sizeof (int)]; } u, v;
++  int i;
++
++  u.v = foo ();
++  v.v = bar ();
++  for (i = 0; i < sizeof (u.i) / sizeof (u.i[0]); i++)
++    {
++      if (u.i[i] != ~v.i[i])
++	abort ();
++      if (i < 3)
++	{
++	  if (u.i[i] != (0x11111111 << i))
++	    abort ();
++	}
++      else if (u.i[i])
++	abort ();
++    }
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/inline-21.c
+===================================================================
+--- gcc/testsuite/gcc.dg/inline-21.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/inline-21.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,4 @@
++/* Test -fno-gnu89-inline.  */
++/* { dg-do compile } */
++/* { dg-options "-fno-gnu89-inline" } */
++/* { dg-error "is not supported" "" { target *-*-* } 0 } */
+Index: gcc/testsuite/gcc.dg/pr30643.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr30643.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr30643.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,26 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler-not "undefined" } } */
++
++/* Make sure we optimize all calls away.  */
++
++extern void undefined (void);
++struct s { int a, b; };
++void bar (struct s *ps,  int *p, int *__restrict__ rp, int *__restrict__ rq)
++{
++  ps->a = 0;
++  ps->b = 1;
++  if (ps->a != 0)
++    undefined ();
++  p[0] = 0;
++  p[1] = 1;
++  if (p[0] != 0)
++    undefined ();
++  rp[0] = 0;
++  rq[0] = 1;
++  if (rp[0] != 0)
++    undefined ();
++}
++int main (void) {
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr29446.c
+===================================================================
+--- gcc/testsuite/gcc.dg/torture/pr29446.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/torture/pr29446.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,32 @@
++/* { dg-do compile } */
++
++void f(_Bool D917, int j0, int ubound1, int ubound5)
++{
++  int i, j = j0;
++  int (*abc)[3];
++  i = 1;
++  while (1)
++    {
++       if (j <= 3)
++         while (1)
++           {
++              if (i != j)
++                {
++                  if (ubound1 <= 0)
++                    return;
++                  (*abc)[1] = 0;
++                }
++               else
++                 {
++                    if (j > ubound1)
++                      return;
++                    if (ubound5 <= 0)
++                      return;
++                  }
++               j = j + 1;
++               if (D917)
++                 break;
++           }
++    i = i + 1;
++  }
++}
+Index: gcc/testsuite/gcc.dg/torture/pr26998.c
+===================================================================
+--- gcc/testsuite/gcc.dg/torture/pr26998.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/torture/pr26998.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++
++int decCompareOp (int result)
++{
++    if (result != (int)0x80000000)
++    {
++        result = -result;
++        return (result > 0);
++    }
++    return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr30364-2.c
+===================================================================
+--- gcc/testsuite/gcc.dg/torture/pr30364-2.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/torture/pr30364-2.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,19 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++int f(unsigned int a, unsigned int b)
++{
++  if (a > 0x7FFFFFF0) return 0;
++  if (b > 0x7FFFFFF0) return 0;
++
++  int c = (a - 20) + (b - 20);
++  return c > 0x7FFFFFF0;
++}
++
++int main()
++{
++  if (f (0x7FFFFFF0, 41) != 1)
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr30313.c
+===================================================================
+--- gcc/testsuite/gcc.dg/torture/pr30313.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/torture/pr30313.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++
++static inline void bar(){}
++
++struct S
++{
++  signed int i: 32;
++};
++
++int main()
++{
++  struct S x = {32};
++  sizeof(x.i+0);
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr30364-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/torture/pr30364-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/torture/pr30364-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,19 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++int f(int a, int b)
++{
++  if (a > 0x7FFFFFF0) return 0;
++  if (b > 0x7FFFFFF0) return 0;
++
++  int c = (a - 20) + (b - 20);
++  return c > 0x7FFFFFF0;
++}
++
++int main()
++{
++  if (f (0x7FFFFFF0, 41) != 1)
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr30364-3.c
+===================================================================
+--- gcc/testsuite/gcc.dg/torture/pr30364-3.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/torture/pr30364-3.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,20 @@
++/* { dg-do run } */
++/* { dg-options "-fwrapv" } */
++
++extern void abort (void);
++
++int f(int a, int b)
++{
++  if (a > 0x7FFFFFF0) return 0;
++  if (b > 0x7FFFFFF0) return 0;
++
++  int c = (a - 20) + (b - 20);
++  return c > 0x7FFFFFF0;
++}
++
++int main()
++{
++  if (f (0x7FFFFFF0, 41) != 1)
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/out-of-bounds-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/out-of-bounds-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/out-of-bounds-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,13 @@
++/* PR rtl-optimization/33822 */
++/* Origin: Andrew Pinski <pinskia@gcc.gnu.org> */
++
++/* { dg-do compile } */
++/* { dg-options "-O -g" } */
++/* { dg-options "-O -g -mstrict-align" { target powerpc*-*-* } } */
++
++void ProjectOverlay(const float localTextureAxis[2], char *lump)
++{
++   const void *d = &localTextureAxis;
++   int size = sizeof(float)*8 ;
++   __builtin_memcpy( &lump[ 0 ], d, size );  
++}
+Index: gcc/testsuite/gcc.dg/tree-ssa/andor-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/tree-ssa/andor-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/tree-ssa/andor-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,65 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-original" } */
++
++unsigned int test1(unsigned int a)
++{
++  return (a & 1) | 1;
++}
++
++int test2(int b)
++{
++  return (b & 1) | 1;
++}
++
++unsigned int test3(unsigned int c)
++{
++  return (c | 1) & 1;
++}
++
++int test4(int d)
++{
++  return (d | 1) & 1;
++}
++
++unsigned int test5(unsigned int e)
++{
++  return (e | 4) & 6;
++}
++
++int test6(int f)
++{
++  return (f | 4) & 6;
++}
++
++unsigned int test7(unsigned int g)
++{
++  return (g & -2) | 1;
++}
++
++int test8(int h)
++{
++  return (h & -2) | 1;
++}
++
++unsigned int test9(unsigned int i)
++{
++  return (i & 3) | 1;
++}
++
++int test10(int j)
++{
++  return (j & 3) | 1;
++}
++
++/* { dg-final { scan-tree-dump-times "a \& 1 \\| 1" 0 "original" } } */
++/* { dg-final { scan-tree-dump-times "b \& 1 \\| 1" 0 "original" } } */
++/* { dg-final { scan-tree-dump-times "\\(c \\| 1\\) \& 1" 0 "original" } } */
++/* { dg-final { scan-tree-dump-times "\\(d \\| 1\\) \& 1" 0 "original" } } */
++/* { dg-final { scan-tree-dump-times "e \& 2 \\| 4" 1 "original" } } */
++/* { dg-final { scan-tree-dump-times "f \& 2 \\| 4" 1 "original" } } */
++/* { dg-final { scan-tree-dump-times "g \\| 1" 1 "original" } } */
++/* { dg-final { scan-tree-dump-times "h \\| 1" 1 "original" } } */
++/* { dg-final { scan-tree-dump-times "i \& 2 \\| 1" 1 "original" } } */
++/* { dg-final { scan-tree-dump-times "j \& 2 \\| 1" 1 "original" } } */
++/* { dg-final { cleanup-tree-dump "original" } } */
++
+Index: gcc/testsuite/gcc.dg/tree-ssa/vrp29.c
+===================================================================
+--- gcc/testsuite/gcc.dg/tree-ssa/vrp29.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/tree-ssa/vrp29.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,20 @@
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++
++extern void abort(void);
++
++void decCompareOp (int result)
++{
++  if (result != (int)0x80000000)
++    {
++      result = -result;
++      if (result != (int)0x80000001)
++        abort ();
++    }
++}
++
++int main()
++{
++  decCompareOp (0x7fffffff);
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -34,13 +34,6 @@
+ }
+ 
+ 
+-/* There should be four IF conditionals.  */
+-/* { dg-final { scan-tree-dump-times "if " 4 "dom3"} } */
+-
+ /* There should be no casts to short unsigned int.  */
+ /* { dg-final { scan-tree-dump-times "\\(short unsigned int\\)" 0 "dom3"} } */
+ 
+-/* There should be two loads of ->code.  */
+-/* { dg-final { scan-tree-dump-times "->code" 2 "dom3"} } */
+-
+-/* { dg-final { cleanup-tree-dump "dom3" } } */
+Index: gcc/testsuite/gcc.dg/tree-ssa/pr31966.c
+===================================================================
+--- gcc/testsuite/gcc.dg/tree-ssa/pr31966.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/tree-ssa/pr31966.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,50 @@
++/* Contributed by Jack Lloyd  <lloyd@randombit.net> */
++
++/* { dg-options "-O2 -ftree-vectorize" } */
++/* { dg-options "-O2 -ftree-vectorize -march=nocona" { target { i?86-*-* x86_64-*-* } } } */
++
++typedef unsigned long long word;
++
++const unsigned int MP_WORD_BITS = 64;
++const word MP_WORD_MASK = ~((word)0);
++const word MP_WORD_TOP_BIT = (word)1 << (8*sizeof(word) - 1);
++
++extern void abort (void);
++
++word do_div(word n1, word n0, word d)
++{
++  word high = n1 % d, quotient = 0;
++  unsigned int j;
++
++  for(j = 0; j != MP_WORD_BITS; ++j)
++    {
++      word high_top_bit = (high & MP_WORD_TOP_BIT);
++
++      high <<= 1;
++      high |= (n0 >> (MP_WORD_BITS-1-j)) & 1;
++      quotient <<= 1;
++
++      if(high_top_bit || high >= d)
++	{
++	  high -= d;
++	  quotient |= 1;
++	}
++    }
++
++  return quotient;
++}
++
++int main()
++{
++  word result;
++
++  result = do_div(0x0000000000200000ll,
++		  0x0000000000000000ll,
++		  0x86E53497CE000000ll);
++
++  
++  if (result != 0x3CBA83)
++    abort ();
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/tree-ssa/loop-3.c
+===================================================================
+--- gcc/testsuite/gcc.dg/tree-ssa/loop-3.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/tree-ssa/loop-3.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3,7 +3,8 @@
+    assume something about memory addressing modes.  */
+ 
+ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+-/* { dg-options "-O1 -fdump-tree-vars" } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-fpic" "-fPIC" } { "" } } */
++/* { dg-options "-O1 -fno-pic -fno-PIC -fdump-tree-vars" } */
+ 
+ int arr_base[100];
+ 
+Index: gcc/testsuite/gcc.dg/pr30189.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr30189.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr30189.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-g -O" } */
++
++extern void foo (void);
++
++static
++void baz (int i)
++{
++  foo ();
++  typedef char A[i];
++  struct { A b; } *x = 0;
++}
++
++void
++bar (i)
++{
++  baz (i);
++}
+Index: gcc/testsuite/gcc.dg/c99-math-long-double-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/c99-math-long-double-1.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/c99-math-long-double-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -6,13 +6,17 @@
+ 
+ int main(void)
+ {
+-  long double nan = NAN;
+-  long double inf = INFINITY;
+-  long double huge = HUGE_VALL;
+-  long double norm = __LDBL_MIN__;
+-  long double zero = 0.0l;
++  volatile long double nan = NAN;
++  volatile long double inf = INFINITY;
++  volatile long double huge = HUGE_VALL;
++  volatile long double norm1 = __LDBL_MIN__;
++  volatile long double norm2 = 1;
++  volatile long double norm3 = __LDBL_MAX__;
++  volatile long double sub = __LDBL_MIN__ / 2;
++  volatile long double zero = 0.0l;
+ 
+-  C99_MATH_TESTS (nan, inf, huge, norm, zero)
++  C99_MATH_TESTS (nan, inf, huge, norm1, norm2, norm3, sub, zero, /*neg=*/0)
++  C99_MATH_TESTS (-nan, -inf, -huge, -norm1, -norm2, -norm3, -sub, -zero, /*neg=*/1)
+ 
+   return 0;
+ }
+Index: gcc/testsuite/gcc.dg/inline-7.c
+===================================================================
+--- gcc/testsuite/gcc.dg/inline-7.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/inline-7.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,6 +1,6 @@
+ /* Test duplicate inline, gnu99 mode.  */
+ /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+ /* { dg-do compile } */
+-/* { dg-options "-std=gnu99" } */
++/* { dg-options "-std=gnu99 -fgnu89-inline" } */
+ 
+ inline inline void f (void) {}
+Index: gcc/testsuite/gcc.dg/inline-18.c
+===================================================================
+--- gcc/testsuite/gcc.dg/inline-18.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/inline-18.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,28 @@
++/* Test -fgnu89-extern-inline.  */
++/* { dg-do compile } */
++/* { dg-options "-std=c99 -fgnu89-inline" } */
++/* { dg-final { scan-assembler "func1" } } */
++/* { dg-final { scan-assembler-not "func2" } } */
++/* { dg-final { scan-assembler "func3" } } */
++/* { dg-final { scan-assembler "func4" } } */
++
++#ifndef __GNUC_GNU_INLINE__
++#error __GNUC_GNU_INLINE__ is not defined
++#endif
++
++#ifdef __GNUC_STDC_INLINE__
++#error __GNUC_STDC_INLINE__ is defined
++#endif
++
++extern inline int func1 (void) { return 0; }
++inline int func1 (void) { return 1; }
++
++extern int func2 (void);
++extern inline int func2 (void) { return 2; }
++
++inline int func3 (void);
++inline int func3 (void) { return 3; }
++
++extern int func4 (void);
++extern inline int func4 (void) { return 4; }
++int func4 (void) { return 5; }
+Index: gcc/testsuite/gcc.dg/20070801-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/20070801-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/20070801-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,62 @@
++/* This failed on s390x due to a back end bug.  */
++
++/* { dg-do compile { target fpic } } */
++/* { dg-options "-O2 -fpic" } */
++
++typedef long unsigned int size_t;
++typedef enum
++{
++  TYPE_SCHAR, TYPE_LONGDOUBLE
++}
++arg_type;
++
++typedef struct
++{
++  arg_type type;
++  union
++  {
++    signed char a_schar;
++    long double a_longdouble;
++  }
++  a;
++}
++argument;
++
++typedef struct
++{
++  argument *arg;
++}
++arguments;
++
++int ind;
++
++extern void foo (arguments *a);
++
++void
++bar ()
++{
++  arguments a;
++  char *buf;
++  char *result;
++  int uninitialized;
++  int count, i;
++  int retcount;
++
++  foo (&a);
++
++  switch (a.arg[ind].type)
++    {
++    case TYPE_SCHAR:
++      {
++	if (uninitialized == 0)
++	  __builtin___snprintf_chk (result, 10, 1, 10, buf, 1, &count);
++      }
++    case TYPE_LONGDOUBLE:
++      {
++	long double arg = a.arg[ind].a.a_longdouble;
++
++	if (uninitialized == 0)
++	  __builtin___snprintf_chk (result, 10, 1, 10, buf, arg, &count);
++      }
++    }
++}
+Index: gcc/testsuite/gcc.dg/pr34003-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr34003-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr34003-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,8 @@
++/* PR bootstrap/34003 */
++/* { dg-do link } */
++/* { dg-options "-O0" } */
++/* { dg-additional-sources "pr34003-2.c" } */
++
++extern void foo (void);
++int bar (void) { foo (); return 1; }
++extern void foo (void);
+Index: gcc/testsuite/gcc.dg/gnu89-init-4.c
+===================================================================
+--- gcc/testsuite/gcc.dg/gnu89-init-4.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/gnu89-init-4.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,12 @@
++/* Test for GNU extensions to compound literals are giving the correct array bounds */
++/* { dg-do compile } */
++/* { dg-options "-std=gnu89 -W -Wall -O2" } */
++
++int a[] = (int[4]){1, 1, 2};
++int f(void)
++{
++  int sum = 0; int i;
++  for(i = 0;i<4;i++)
++    sum = a[i];
++  return sum;
++}
+Index: gcc/testsuite/gcc.dg/assign-warn-3.c
+===================================================================
+--- gcc/testsuite/gcc.dg/assign-warn-3.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/assign-warn-3.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -5,9 +5,9 @@
+ /* { dg-options "-O3 -std=c99 -pedantic-errors" } */
+ 
+ /* This is valid to execute, so maybe shouldn't warn at all.  */
+-void f0(x) signed char *x; { }
++static inline void f0(x) signed char *x; { }
+ void g0(unsigned char *x) { f0(x); } /* { dg-warning "warning: pointer targets in passing argument 1 of 'f0' differ in signedness" } */
+ 
+ /* This is undefined on execution but still must compile.  */
+-void f1(x) int *x; { }
++static inline void f1(x) int *x; { }
+ void g1(unsigned int *x) { f1(x); } /* { dg-warning "warning: pointer targets in passing argument 1 of 'f1' differ in signedness" } */
+Index: gcc/testsuite/gcc.dg/pr32912-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr32912-1.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr32912-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,44 @@
++/* PR middle-end/32912 */
++/* { dg-do run } */
++/* { dg-options "-O2 -w" } */
++
++extern void abort (void);
++
++typedef int __m128i __attribute__ ((__vector_size__ (16)));
++
++__m128i a, b, c, d, e, f;
++
++void
++foo (__m128i x)
++{
++  a = x ^ ~x;
++  b = ~x ^ x;
++  c = x | ~x;
++  d = ~x | x;
++  e = x & ~x;
++  f = ~x & x;
++}
++
++int
++main (void)
++{
++  union { __m128i v; int i[sizeof (__m128i) / sizeof (int)]; } u;
++  int i;
++
++  for (i = 0; i < sizeof (u.i) / sizeof (u.i[0]); i++)
++    u.i[i] = i * 49 - 36;
++  foo (u.v);
++#define check(x, val) \
++  u.v = (x); \
++  for (i = 0; i < sizeof (u.i) / sizeof (u.i[0]); i++) \
++    if (u.i[i] != (val)) \
++      abort ()
++
++  check (a, ~0);
++  check (b, ~0);
++  check (c, ~0);
++  check (d, ~0);
++  check (e, 0);
++  check (f, 0);
++  return 0;
++}
+Index: gcc/testsuite/gcc.dg/c99-math.h
+===================================================================
+--- gcc/testsuite/gcc.dg/c99-math.h	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/c99-math.h	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,9 +1,14 @@
+ #include <math.h>
++#include <fenv.h>
+ 
+ extern void abort(void);
+ 
+-#define C99_MATH_TESTS(nan, inf, huge, norm, zero)	\
++#define C99_MATH_TESTS(nan, inf, huge, norm1, norm2, norm3, sub, zero, neg) \
+ {							\
++  if (feclearexcept (FE_ALL_EXCEPT) != 0)		\
++    abort();						\
++							\
++							\
+   if (fpclassify (nan) != FP_NAN)			\
+     abort ();						\
+ 							\
+@@ -13,9 +18,18 @@
+   if (fpclassify (huge) != FP_INFINITE)			\
+     abort ();						\
+ 							\
+-  if (fpclassify (norm) != FP_NORMAL)			\
++  if (fpclassify (norm1) != FP_NORMAL)			\
+     abort ();						\
+ 							\
++  if (fpclassify (norm2) != FP_NORMAL)			\
++    abort ();						\
++							\
++  if (fpclassify (norm3) != FP_NORMAL)			\
++    abort ();						\
++							\
++  if (fpclassify (sub) != FP_SUBNORMAL)			\
++    abort ();						\
++							\
+   if (fpclassify (zero) != FP_ZERO)			\
+     abort ();						\
+ 							\
+@@ -29,9 +43,18 @@
+   if (isnan (huge))					\
+     abort ();						\
+ 							\
+-  if (isnan (norm))					\
++  if (isnan (norm1))					\
+     abort ();						\
+ 							\
++  if (isnan (norm2))					\
++    abort ();						\
++							\
++  if (isnan (norm3))					\
++    abort ();						\
++							\
++  if (isnan (sub))					\
++    abort ();						\
++							\
+   if (isnan (zero))					\
+     abort ();						\
+ 							\
+@@ -45,9 +68,18 @@
+   if (!isinf (huge))					\
+     abort ();						\
+ 							\
+-  if (isnan (norm))					\
++  if (isinf (norm1))					\
+     abort ();						\
+ 							\
++  if (isinf (norm2))					\
++    abort ();						\
++							\
++  if (isinf (norm3))					\
++    abort ();						\
++							\
++  if (isinf (sub))					\
++    abort ();						\
++							\
+   if (isinf (zero))					\
+     abort ();						\
+ 							\
+@@ -61,9 +93,18 @@
+   if (isfinite (huge))					\
+     abort ();						\
+ 							\
+-  if (!isfinite (norm))					\
++  if (!isfinite (norm1))				\
+     abort ();						\
+ 							\
++  if (!isfinite (norm2))				\
++    abort ();						\
++							\
++  if (!isfinite (norm3))				\
++    abort ();						\
++							\
++  if (!isfinite (sub))					\
++    abort ();						\
++							\
+   if (!isfinite (zero))					\
+     abort ();						\
+ 							\
+@@ -77,35 +118,119 @@
+   if (isnormal (huge))					\
+     abort ();						\
+ 							\
+-  if (!isnormal (norm))					\
++  if (!isnormal (norm1))				\
+     abort ();						\
+ 							\
++  if (!isnormal (norm2))				\
++    abort ();						\
++							\
++  if (!isnormal (norm3))				\
++    abort ();						\
++							\
++  if (isnormal (sub))					\
++    abort ();						\
++							\
+   if (isnormal (zero))					\
+     abort ();						\
+ 							\
+ 							\
+-  if (signbit (norm))					\
++  if (!!signbit (nan) != neg)				\
+     abort ();						\
+ 							\
+-  if (!signbit (-(norm)))				\
++  if (!!signbit (inf) != neg)				\
+     abort ();						\
+ 							\
++  if (!!signbit (huge) != neg)				\
++    abort ();						\
+ 							\
+-  if (!isgreater ((inf), (norm)))			\
++  if (!!signbit (norm1) != neg)				\
+     abort ();						\
+ 							\
+-  if (!isgreaterequal ((inf), (huge)))			\
++  if (!!signbit (norm2) != neg)				\
+     abort ();						\
+ 							\
+-  if (!isless ((norm), (inf)))				\
++  if (!!signbit (norm3) != neg)				\
+     abort ();						\
+ 							\
+-  if (!islessequal ((huge), (inf)))			\
++  if (!!signbit (sub) != neg)				\
+     abort ();						\
+ 							\
+-  if (!islessgreater ((inf), (norm)))			\
++  if (!!signbit (zero) != neg)				\
+     abort ();						\
+ 							\
+-  if (!isunordered ((nan), (norm)))			\
++							\
++  if (neg)						\
++  {							\
++    if (!isless ((inf), (norm1)))			\
++      abort ();						\
++							\
++    if (!isless ((inf), (norm2)))			\
++      abort ();						\
++							\
++    if (!isless ((inf), (norm3)))			\
++      abort ();						\
++							\
++    if (!islessequal ((inf), (huge)))			\
++      abort ();						\
++							\
++    if (!isgreater ((norm1), (inf)))			\
++      abort ();						\
++							\
++    if (!isgreater ((norm2), (inf)))			\
++      abort ();						\
++							\
++    if (!isgreater ((norm3), (inf)))			\
++      abort ();						\
++							\
++    if (!isgreaterequal ((huge), (inf)))		\
++      abort ();						\
++  }							\
++  else							\
++  {							\
++    if (!isgreater ((inf), (norm1)))			\
++      abort ();						\
++							\
++    if (!isgreater ((inf), (norm2)))			\
++      abort ();						\
++							\
++    if (!isgreater ((inf), (norm3)))			\
++      abort ();						\
++							\
++    if (!isgreaterequal ((inf), (huge)))		\
++      abort ();						\
++							\
++    if (!isless ((norm1), (inf)))			\
++      abort ();						\
++							\
++    if (!isless ((norm2), (inf)))			\
++      abort ();						\
++							\
++    if (!isless ((norm3), (inf)))			\
++      abort ();						\
++							\
++    if (!islessequal ((huge), (inf)))			\
++      abort ();						\
++  }							\
++							\
++  if (!islessgreater ((inf), (norm1)))			\
+     abort ();						\
++							\
++  if (!islessgreater ((inf), (norm2)))			\
++    abort ();						\
++							\
++  if (!islessgreater ((inf), (norm3)))			\
++    abort ();						\
++							\
++  if (!isunordered ((nan), (norm1)))			\
++    abort ();						\
++							\
++  if (!isunordered ((nan), (norm2)))			\
++    abort ();						\
++							\
++  if (!isunordered ((nan), (norm3)))			\
++    abort ();						\
++							\
++							\
++  if (fetestexcept (FE_ALL_EXCEPT) != 0)		\
++    abort();						\
+ }
+Index: gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c
+===================================================================
+--- gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,39 @@
++/* { dg-require-effective-target vect_float } */
++
++#include <stdlib.h>
++#include "tree-vect.h"
++
++void interp_pitch(float *exc, float *interp, int pitch, int len)
++{
++   int i,k;
++   int maxj;
++
++   maxj=3;
++   for (i=0;i<len;i++)
++   {
++      float tmp = 0;
++      for (k=0;k<7;k++)
++      {
++         tmp += exc[i-pitch+k+maxj-6];
++      }
++      interp[i] = tmp;
++   }
++}
++
++int main()
++{
++   float *exc = calloc(126,sizeof(float));
++   float *interp = calloc(80,sizeof(float));
++   int pitch = -35;
++
++   check_vect ();
++
++   interp_pitch(exc, interp, pitch, 80);
++   free(exc);
++   free(interp);
++   return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+Index: gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c
+===================================================================
+--- gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -11,7 +11,7 @@
+ 
+ int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+ int B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
+-void foo ()  __attribute__((always_inline));
++inline void foo ()  __attribute__((always_inline));
+ void foo ()
+ {  
+   int i, j;
+Index: gcc/testsuite/gcc.dg/vect/vect-106-alias.c
+===================================================================
+--- gcc/testsuite/gcc.dg/vect/vect-106-alias.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/vect/vect-106-alias.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,51 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 9
++
++static int a[N] = {1,2,3,4,5,6,7,8,9};
++static int b[N] = {2,3,4,5,6,7,8,9,0};
++
++int main1 () {
++  int i;
++  int *p, *q, *p1, *q1;
++  p = (unsigned int *) malloc (sizeof (unsigned int) * N);
++  q = (unsigned int *) malloc (sizeof (unsigned int) * N);
++
++  p1 = p; q1 = q;
++
++  /* Not vectorizable: because of the redundant cast (caused by ponter
++     arithmetics), alias analysis fails to distinguish between 
++     the pointers.  */
++  for (i = 0; i < N; i++)
++    {
++      *(q + i) = a[i];
++      *(p + i) = b[i];
++    }
++
++  /* check results: */
++  for (i = 0; i < N; i++)
++    {
++       if (*q != a[i] || *p != b[i])
++         abort();
++       q++; 
++       p++;
++    }
++  
++  return 0; 
++}
++
++int main (void)
++{ 
++  check_vect ();
++
++  return main1 ();
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+
+Property changes on: gcc/testsuite/gcc.dg/vect/vect-106-alias.c
+___________________________________________________________________
+Added: svn:executable
+   + *
+
+Index: gcc/testsuite/gcc.dg/pr30473.c
+===================================================================
+--- gcc/testsuite/gcc.dg/pr30473.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/pr30473.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,13 @@
++/* PR middle-end/30473 */
++/* Make sure this doesn't ICE.  */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++extern int sprintf (char *, const char *, ...);
++
++void
++foo (char *buf1, char *buf2)
++{
++  sprintf (buf1, "%s", "abcde");
++  sprintf (buf2, "%s");
++}
+Index: gcc/testsuite/gcc.dg/Wunused-value-2.c
+===================================================================
+--- gcc/testsuite/gcc.dg/Wunused-value-2.c	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gcc.dg/Wunused-value-2.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,18 @@
++/* Test -Wunused-value.  Bug 30729.  */
++/* { dg-do compile } */
++/* { dg-options "-Wunused-value" } */
++/* Make sure va_arg does not cause a value computed is not used warning
++   because it has side effects.   */
++#include <stdarg.h>
++
++int f(int t, ...)
++{
++  va_list a;
++  va_start (a, t);
++  va_arg(a, int);/* { dg-bogus "value computed is not used" } */
++  int t1 = va_arg(a, int);
++  va_end(a);
++  return t1;
++}
++
++
+Index: gcc/testsuite/gcc.dg/c99-math-float-1.c
+===================================================================
+--- gcc/testsuite/gcc.dg/c99-math-float-1.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gcc.dg/c99-math-float-1.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -6,13 +6,17 @@
+ 
+ int main(void)
+ {
+-  float nan = NAN;
+-  float inf = INFINITY;
+-  float huge = HUGE_VALF;
+-  float norm = __FLT_MIN__;
+-  float zero = 0.0f;
++  volatile float nan = NAN;
++  volatile float inf = INFINITY;
++  volatile float huge = HUGE_VALF;
++  volatile float norm1 = __FLT_MIN__;
++  volatile float norm2 = 1;
++  volatile float norm3 = __FLT_MAX__;
++  volatile float sub = __FLT_MIN__ / 2;
++  volatile float zero = 0.0f;
+ 
+-  C99_MATH_TESTS (nan, inf, huge, norm, zero)
++  C99_MATH_TESTS (nan, inf, huge, norm1, norm2, norm3, sub, zero, /*neg=*/0)
++  C99_MATH_TESTS (-nan, -inf, -huge, -norm1, -norm2, -norm3, -sub, -zero, /*neg=*/1)
+ 
+   return 0;
+ }
+Index: gcc/testsuite/ChangeLog
+===================================================================
+--- gcc/testsuite/ChangeLog	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/ChangeLog	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,3 +1,571 @@
++2008-05-29  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.dg/nested-func-6.c: New test.
++
++2008-04-08  Richard Guenther  <rguenther@suse.de>
++
++	* gcc.c-torture/execute/20080408-1.c: New testcase.
++
++2008-03-25  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2008-02-12  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/35163
++	* gcc.c-torture/execute/pr35163.c: New testcase.
++
++2008-02-13  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	Backport:
++	2005-11-30  Richard Guenther  <rguenther@suse.de>
++	
++	PR tree-optimization/21655
++	* g++.dg/tree-ssa/pr14814.C: Remove XFAIL.
++
++2008-02-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* obj-c++.dg/bitfield-1.mm: Expect failures.
++	* obj-c++.dg/bitfield-4.mm: Likewise.
++	* obj-c++.dg/cxx-ivars-2.mm: Likewise.
++	* obj-c++.dg/encode-8.mm: Likewise.
++	* obj-c++.dg/isa-field-1.mm: Likewise.
++	* obj-c++.dg/layout-1.mm: Likewise.
++	* obj-c++.dg/lookup-2.mm: Likewise.
++	* obj-c++.dg/try-catch-2.mm: Likewise.
++	* obj-c++.dg/try-catch-9.mm: Likewise.
++
++2008-02-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	PR objc++/34193
++	* obj-c++.dg/gnu-runtime-2.mm: Fix signature of function main().
++
++2008-02-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	PR objc++/27232
++
++	Backport:
++	2006-09-22  Mike Stump  <mrs@apple.com>
++	
++	* obj-c++.dg/encode-3.mm: Fix for 64-bit support.
++
++2008-02-04  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/33631
++	* gcc.c-torture/execute/pr33631.c: New testcase.
++
++2008-01-31  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* gcc.dg/tf_to_di-1.c: New testcase.
++
++2008-01-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	Backport:
++	2008-01-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* gcc.dg/pr33826.c: Require nonpic.
++	
++	2007-11-08  Kenneth Zadeck <zadeck@naturalbridge.com>
++	
++	PR middle-end/33826
++	* gcc.dg/pr33826.c: New.
++	* gcc.dg/tree-ssa/20030714-1.c: Removed two tests that depend on 
++	recursive functions being marked pure or const.
++
++2008-01-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* gcc.dg/vect/vect-ifcvt-9.c: Use inline.
++
++2008-01-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* g++.dg/eh/ia64-2.C: Add "dg-require-weak" statement.  Place
++	"dg-do run" statement before "dg-require-weak" statement.
++	* g++.dg/eh/weak1.C: Likewise.
++
++2008-01-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	Backport:
++	2007-03-21  Richard Sandiford  <richard@codesourcery.com>
++	 
++	* gcc.target/i386/pr21291.c: Require nonpic or ! ilp32.
++
++2008-01-17  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.c-torture/compile/20080114-1.c: Use empty asm statements.
++
++2008-01-14  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.c-torture/compile/20080114-1.c: New test.
++
++2008-01-09  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* gcc.c-torture/execute/builtins/chk.h: Don't check !__PIE__.
++	Also check __pic__.
++	* lib/target-supports.exp (check_effective_target_nonpic): Likewise.
++	* gcc.dg/assign-warn-3.c: Use "static inline" instead of "inline".
++	
++	Backport:
++	
++	2007-03-21  Richard Sandiford  <richard@codesourcery.com>
++	* gcc.c-torture/execute/builtins/chk.h (LOCAL): Define.
++	* gcc.c-torture/execute/builtins/sprintf-chk.c (s1): Make LOCAL.
++	* gcc.c-torture/execute/builtins/stpcpy-chk.c (s1): Likewise.
++	* gcc.c-torture/execute/builtins/strcpy-chk.c (s1): Likewise.
++
++	2007-07-26  Nathan Froyd  <froydnj@codesourcery.com>
++	PR/19232
++	* gcc.dg/assign-warn-3.c (f0): Declare as inline.
++	(f1): Likewise.
++
++	2007-01-15  Dale Johannesen  <dalej@apple.com>
++	* gcc.dg/tree-ssa/loop-3.c:  Disable with -fpic or -fPIC.
++	
++	2007-03-21  Richard Sandiford  <richard@codesourcery.com>
++	* lib/target-supports.exp (check_effective_target_nonpic): New
++	procedure.
++
++2007-12-20  Jakub Jelinek  <jakub@redhat.com>
++
++	PR bootstrap/34003
++	* gcc.dg/pr34003-1.c: New test.
++	* gcc.dg/pr34003-2.c: New.
++
++2007-12-19  Richard Sandiford  <rsandifo@nildram.co.uk>
++
++	PR rtl-optimization/34456
++	* gcc.c-torture/execute/pr34456.c: New test.
++
++2007-11-29  Matthias Klose  <doko@ubuntu.com>
++
++	Backport from mainline:
++	2007-11-17  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/34130
++	* gcc.c-torture/execute/pr34130.c: New testcase.
++
++2007-11-16  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/34030
++	* gcc.c-torture/compile/pr34030.c: New testcase.
++
++2007-11-07  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* gcc.dg/out-of-bounds-1.c: New test.
++
++2007-11-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	PR rtl-optimization/28062
++	* gcc.c-torture/compile/20071102-1.c: New test.
++
++2007-10-26  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/33744
++	* g++.dg/template/arg6.C: New test.
++
++2007-09-06  David Daney  <ddaney@avtrex.com>
++	    Richard Sandiford  <richard@codesourcery.com>
++
++	PR target/33256
++	* gcc.target/mips/mips.exp (setup_mips_tests): Set mips_forced_le.
++	(dg-mips-options): Skip -EB and -meb tests when $mips_forced_le.
++	* gcc.target/mips/pr33256.c: New test.
++
++2007-08-31  Paolo Carlini  <pcarlini@suse.de>
++
++	PR c++/32113
++	* g++.dg/template/crash70.C: New.
++
++2007-08-24  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/32912
++	* gcc.dg/pr32912-1.c: New test.
++	* gcc.dg/pr32912-2.c: New test.
++
++	PR c++/31941
++	* g++.dg/parse/crash37.C: New test.
++
++2007-08-22  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/33142
++	* gcc.c-torture/execute/pr33142.c: New testcase.
++
++2007-08-20  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/32992
++	* g++.dg/opt/nrv14.C: New test.
++
++2007-08-18  Paolo Carlini  <pcarlini@suse.de>
++
++	PR c++/32112
++	* g++.dg/template/error26.C: New.
++
++2007-08-10  Paolo Carlini  <pcarlini@suse.de>
++
++	PR c++/17763
++	* g++.dg/other/error16.C: New.
++
++2007-08-01  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* gcc.dg/20070801-1.c: New testcase.
++
++2007-07-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* gcc.dg/c99-math-double-1.c: Mark test variables as volatile.
++	Test negative numbers also.
++	* gcc.dg/c99-math-float-1.c: Likewise.
++	* gcc.dg/c99-math-long-double-1.c: Likewise.
++	* gcc.dg/c99-math.h: Check for FP exceptions.  Update for negative
++	test inputs.
++
++2007-07-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* gcc.dg/c99-math-double-1.c, gcc.dg/c99-math-float-1.c,
++	c99-math-long-double-1.c, c99-math.h: Test subnormals.
++
++2007-07-06  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR rtl-optimization/32450
++	* gcc.dg/pr32450.c: New runtime test.
++
++2007-07-04  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR tree-optimization/31966
++	PR tree-optimization/32533
++	* gcc.dg/tree-ssa/pr31966.c: New runtime test.
++	* gfortran.dg/pr32533.f90: Ditto.
++
++2007-07-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* gcc.dg/c99-math.h: Fix typo.
++
++2007-06-30  Alexandre Oliva  <aoliva@redhat.com>
++
++	* g++.dg/ext/interface4.C, g++.dg/ext/interface4.h: New.
++
++2007-06-28  Seongbae Park  <seongbae.park@gmail.com>
++
++	* gcc.target/arm/stack-corruption.c: New test.
++
++2007-06-21  Uros Bizjak  <ubizjak@gmail.com>
++ 
++	PR target/32389
++	* gcc.target/i386/pr32389.c New test.
++
++2007-06-20  Dirk Mueller  <dmueller@suse.de>
++
++	PR c++/31806
++	PR c++/31809
++	* g++.dg/opt/static5.C: New test.
++	* g++.dg/opt/static6.C: New test.
++
++2007-06-20  Jakub Jelinek  <jakub@redhat.com>
++
++	PR inline-asm/32109
++	* g++.dg/ext/asm10.C: New test.
++
++	PR middle-end/32285
++	* gcc.c-torture/execute/20070614-1.c: New test.
++
++2007-06-19  Jakub Jelinek  <jakub@redhat.com>
++
++	PR tree-optimization/32353
++	* g++.dg/opt/nrv13.C: New test.
++
++2007-06-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* gcc.target/sparc/align.c: Use 'unsigned char' as element type.
++	* gcc.target/sparc/combined-2.c: Likewise.
++	* gcc.target/sparc/fexpand.c : Likewise.
++	* gcc.target/sparc/fnot.c: Likewise.  Fix a couple of prototypes.
++	* gcc.target/sparc/fpack16.c : Likewise.
++	* gcc.target/sparc/fpmerge.c : Likewise.
++	* gcc.target/sparc/fpmul.c : Likewise.
++	* gcc.target/sparc/noresult.c : Likewise.
++	* gcc.target/sparc/pdist.c: Likewise.
++
++2007-06-13  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* gcc.target/sparc/mfpu.c: New test.
++
++2007-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
++
++	PR libfortran/31964
++	* gfortran.fortran-torture/execute/intrinsic_bitops.f90: Update.
++
++2007-05-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* gcc.c-torture/execute/20070517-1.c: New test.
++
++2007-05-16  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2006-06-09  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/26998
++	* gcc.dg/torture/pr26998.c: New testcase.
++	* gcc.dg/tree-ssa/vrp29.c: New testcase.
++
++2007-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
++
++	PR libfortran/31880
++	* gfortran.dg/unf_read_corrupted_2.f90: New test.
++
++2007-05-10  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* gcc.dg/20070507-1.c: Disable for non-pic targets.
++
++2007-05-08  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* gcc.dg/20070507-1.c: New testcase.
++
++2007-04-28  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C++/30221
++	* g++.dg/init/ptrfn2.C: New test.
++	* g++.dg/init/ptrfn3.C: New test.
++
++2007-04-26  Ian Lance Taylor  <iant@google.com>
++
++	PR target/28675
++	* gcc.c-torture/compile/pr28675.c: New test.
++
++2007-04-26  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C++/30016
++	* g++.dg/ext/vector6.C: New test.
++
++2007-04-25  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/31698
++	* g++.dg/other/pr31698.C: New testcase.
++
++	Backport from mainline:
++	2006-10-13  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/29446
++	* gcc.dg/torture/pr29446.c: New testcase.
++
++2007-04-24  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	PR target/31641
++	* gcc.c-torture/compile/pr31641.c: New testcase.
++
++2007-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/31448
++	* gcc.c-torture/execute/pr31448.c: New testcase.
++
++2007-04-20  Jakub Jelinek  <jakub@redhat.com>
++
++	* gcc.target/i386/ordcmp-1.c: New test.
++	* gcc.target/i386/unordcmp-1.c: New test.
++
++	PR tree-optimization/31632
++	* gcc.c-torture/compile/20070419-1.c: New test.
++
++2007-04-17  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c++/31517
++	* g++.dg/template/init7.C: New test.
++
++2007-04-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR testsuite/31578
++	* gcc.dg/gnu89-init-4.c: Change to a compile only test.
++
++2007-04-14  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR tree-opt/30045
++	* gcc.dg/pr30045.c: New test.
++
++2007-04-14  Andrew Pinski  <pinskia@gmail.com>
++
++	PR middle-end/30729
++	* gcc.dg/Wunused-value-2.c: New testcase.
++
++2007-04-14  Andrew Pinski  <pinskia@gmail.com>
++
++	PR C++/30168
++	* g++.dg/opt/complex6.C: New test.
++
++2007-04-14  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C/31520
++	* gcc.dg/gnu89-init-4.c: New testcase.
++
++2007-04-13  Jason Merrill  <jason@redhat.com>
++
++	PR c++/31074
++	* conv3.C: New test.
++
++2007-04-09  Mark Mitchell  <mark@codesourcery.com>
++
++	PR c++/31449
++	* g++.dg/init/const5.C: New test.
++
++2007-04-03  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/30847
++	* g++.dg/parse/cond3.C: New test.
++
++2007-03-20  Seongbae Park <seongbae.park@gmail.com>
++
++	PR tree-optimization/30590
++	* g++.dg/opt/pr30590.C: New testcase.
++
++2007-03-19  Jeff Law  <law@redhat.com>
++
++	* PR tree-optimization/30984
++	* gcc.c-torture/pr30984.c: New test.
++
++2007-03-19  Ian Lance Taylor  <iant@google.com>
++
++	* gcc.dg/inline-7.c: Add -fgnu89-inline.
++	* gcc.dg/inline-17.c: New test.
++	* gcc.dg/inline-18.c: New test.
++	* gcc.dg/inline-19.c: New test.
++	* gcc.dg/inline-21.c: New test.
++
++2007-03-17  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR debug/29906
++	* g++.dg/debug/pr29906.C: New
++
++2007-03-15  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2007-02-28  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/30364
++	* gcc.dg/torture/pr30364-1.c: New testcase.
++	* gcc.dg/torture/pr30364-2.c: Likewise.
++	* gcc.dg/torture/pr30364-3.c: Likewise.
++
++2007-03-14  Jakub Jelinek  <jakub@redhat.com>
++
++	* gfortran.dg/module_implicit_conversion.f90: New test.
++
++2007-03-12  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/30433
++	* gcc.c-torture/compile/pr30433.c: New testcase to check
++	that complex constant comparisions are folded.
++
++2007-03-12  Ira Rosen  <irar@il.ibm.com>
++
++	PR tree-optimization/29925
++	* gcc.dg/vect/fast-math-vect-pr29925.c: New test.
++
++2007-03-09  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR rtl-optimization/30643
++	* gcc.dg/pr30643.c: New.
++
++2007-03-08  Volker Reichelt  <reichelt@netcologne.de>
++
++	PR c++/30852
++	* g++.dg/ext/offsetof1.C: Add cases with volatile.
++
++2007-03-05  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c++/30895
++	* g++.dg/parse/template23.C: New test.
++
++2007-03-01  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
++
++	Backport from trunk
++	PR fortran/29441
++	* gfortran.dg/initialization_4.f90: New test.
++
++2007-02-27  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* gcc.c-torture/execute/20070227-1.c: New test.
++
++2007-02-27  Tobias Schl�ter  <tobias.schlueter@physik.uni-muenchen.de>
++
++	PR fortran/25392
++	* gfortran.dg/f2c_8.f90: New test.
++
++2007-02-25  Roger Sayle  <roger@eyesopen.com>
++
++        PR fortran/30400
++        * gfortran.dg/forall_10.f90: New test case.
++
++2007-02-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
++
++	PR libgfortran/30918
++	* gfortran.dg/namelist_26.f90: New test.
++
++2007-02-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
++
++	PR libgfortran/30910	
++	* gfortran.dg/fmt_zero_precision.f90: New test.
++
++2007-02-21  Mark Mitchell  <mark@codesourcery.com>
++
++	* lib/wrapper.exp (${tool}_maybe_build_wrapper): Allow the caller
++	to set options for compiling testglue.
++	* lib/g++.exp (g++_init): Compile testglue with -fexceptions.
++	* lib/obj-c++.exp (obj-c++_init): Likewise.
++
++2007-02-20 Ira Rosen  <irar@il.ibm.com>
++
++	* gfortran.dg/vect/vect-2.f90: Xfail to vectorize one of the loops
++	because of aliasing.
++
++2007-02-18  Roger Sayle  <roger@eyesopen.com>
++
++	PR middle-end/24427
++	PR rtl-optimization/28173
++	* gcc.dg/tree-ssa/andor-1.c: New test case.
++
++2007-02-18 Ira Rosen  <irar@il.ibm.com>
++
++	* gcc.dg/vect/vect-106-alias.c: New test.
++
++2007-02-16  Eric Botcazou  <ebotcazou@libertysurf.fr>
++
++	* gcc.c-torture/execute/20070216-1.c: New test.
++
++2007-02-15  Steven G. Kargl  <kargl@gcc.gnu.org>
++
++	PR fortran/30799
++	* gfortran.dg/logical_2.f90: New test.
++
++2007-02-15  Alexandre Oliva  <aoliva@redhat.com>
++
++	* g++.dg/tree-ssa/sra-1.C: New.
++
++2007-02-10  Tobias Schlueter  <tobi@gcc.gnu.org>
++
++	PR fortran/30478
++	* gfortran.dg/enum_4.f90: Update expected error message.
++
++2007-02-15  Alexandre Oliva  <aoliva@redhat.com>
++
++	PR debug/30189
++	* gcc.dg/pr30189.c: New test.
++
++2007-02-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
++
++	* g++.dg/tree-ssa/nothrow-1.C: Skip test if -fpic/-fPIC is used.
++
++2007-02-14  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/30536
++	* g++.dg/tls/diag-5.C: New test.
++
++	PR middle-end/30473
++	* gcc.dg/pr30473.c: New test.
++	* gcc.c-torture/execute/20070201-1.c: New test.
++
++2007-02-14  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2007-01-30  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/30313
++	* gcc.dg/torture/pr30313.c: New testcase.
++
+ 2007-02-13  Release Manager
+ 
+ 	* GCC 4.1.2 released.
+Index: gcc/testsuite/g++.old-deja/g++.warn/flow1.C
+===================================================================
+--- gcc/testsuite/g++.old-deja/g++.warn/flow1.C	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/g++.old-deja/g++.warn/flow1.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,14 +0,0 @@
+-// { dg-do assemble  }
+-// { dg-options "-Wreturn-type" }
+-// Test that we don't get a warning about flowing off the end.
+-
+-struct A {
+-  ~A ();
+-};
+-
+-int f()
+-{
+-  A a1[2];
+-  A a2[2];
+-  return 1234567;
+-}
+Index: gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90
+===================================================================
+--- gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -8,7 +8,8 @@
+    i = 2
+    j = 3
+    k = 12
+-
++   a = 5
++   
+    if (.not. btest (i, o+1)) call abort
+    if (btest (i, o+2)) call abort
+    if (iand (i, j) .ne. 2) call abort
+@@ -26,4 +27,6 @@
+    if (ishftc (k, o-30) .ne. 48) call abort
+    if (ishftc (k, o+1, o+3) .ne. 9) call abort
+    if (not (i) .ne. -3) call abort
++   if (ishftc (a, 1, bit_size(a)) .ne. 10) call abort
++   if (ishftc (1, 1, 32) .ne. 2) call abort
+ end program
+Index: gcc/testsuite/g++.dg/other/pr31698.C
+===================================================================
+--- gcc/testsuite/g++.dg/other/pr31698.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/other/pr31698.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,47 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++typedef long unsigned int size_t;
++
++template<class X>
++class A {
++public:
++        typedef size_t tySize;
++        inline void ResizeFast(const tySize & nSize)  {
++                if((nSize > m_nAllocSize) && (nSize > 0))   {
++                        m_nAllocSize = nSize;
++        }
++        }
++        inline void ResizeFast(const int & nSize) {
++        ResizeFast((tySize) nSize);
++        }
++        tySize m_nAllocSize;
++};
++
++class B {
++public:
++        B *GetNext(void) { };
++};
++
++class C  {
++public:
++        inline void Resize(void) {
++                array.ResizeFast(0);
++        }
++        A<int> array;
++};
++
++class D {
++private:
++        void Do(B * pB, C * pC);
++};
++
++void D::Do(B * pB, C * pC)
++{
++        pC->Resize();
++        B * pL = 0;
++        for(pL = pB;
++                pL != 0;
++                pL = pL->GetNext());
++}
++
+Index: gcc/testsuite/g++.dg/other/error16.C
+===================================================================
+--- gcc/testsuite/g++.dg/other/error16.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/other/error16.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++// PR c++/17763
++
++template <typename U> struct Outer {
++    struct Inner {};
++    Inner foo();
++};
++
++typedef int X;
++typedef Outer<X> XOuter;
++
++int main() {
++  Outer<int>  ab;
++  ab.foo() == 1; // { dg-error "ab.Outer" }
++}
+Index: gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C
+===================================================================
+--- gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fdump-tree-cfg" } */
++/* { dg-skip-if "" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */
+ double a;
+ void t()
+ {
+Index: gcc/testsuite/g++.dg/tree-ssa/sra-1.C
+===================================================================
+--- gcc/testsuite/g++.dg/tree-ssa/sra-1.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/tree-ssa/sra-1.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,29 @@
++/* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=223576 */
++
++/* SRA failed to canonicalize bit-field types, introducing type
++   mismatches.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++struct A
++{
++  int a:16;
++  /* These dummy bit-fields are here to prevent GCC 4.2+ from merging
++     the bit-field compares into a single word compare, which disables
++     SRA.  */
++  int a2:16;
++  int a3:16;
++  int a4:16;
++  int b:8;
++  bool operator==(A const x) const
++  {
++    return (this->a == x.a && this->b == x.b);
++  }
++};
++
++bool
++foo (A const x, A const y)
++{
++  return x == y;
++}
+Index: gcc/testsuite/g++.dg/tree-ssa/pr14814.C
+===================================================================
+--- gcc/testsuite/g++.dg/tree-ssa/pr14814.C	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/g++.dg/tree-ssa/pr14814.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -14,7 +14,7 @@
+   if (r.direction().y() < 0.000001) return 0;
+   return 1; }
+ 
+-/* { dg-final { scan-tree-dump-times "&this" 0 "forwprop2" { xfail *-*-* } } }*/
++/* { dg-final { scan-tree-dump-times "&this" 0 "forwprop2" } }*/
+ /* { dg-final { scan-tree-dump-times "&r" 0 "forwprop2" } } */
+ /* { dg-final { cleanup-tree-dump "forwprop2" } } */
+ 
+Index: gcc/testsuite/g++.dg/debug/pr29906.C
+===================================================================
+--- gcc/testsuite/g++.dg/debug/pr29906.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/debug/pr29906.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,10 @@
++// { dg-do compile }
++// { dg-options "-g" }
++
++struct A{
++  typedef int T;
++  virtual ~A();
++};
++struct B:public A{
++  using A::T;
++};
+Index: gcc/testsuite/g++.dg/eh/ia64-2.C
+===================================================================
+--- gcc/testsuite/g++.dg/eh/ia64-2.C	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/g++.dg/eh/ia64-2.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -5,8 +5,9 @@
+ // But br.call returns to the start of the next bundlem so during
+ // unwinding the call was considered to be outside of the EH region
+ // while it should have been inside.
++// { dg-do run }
++// { dg-require-weak "" }
+ // { dg-options "-O2" }
+-// { dg-do run }
+ 
+ struct A {};
+ struct B { virtual ~B(); };
+Index: gcc/testsuite/g++.dg/eh/weak1.C
+===================================================================
+--- gcc/testsuite/g++.dg/eh/weak1.C	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/g++.dg/eh/weak1.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,6 +1,6 @@
+ // PR target/29487
++// { dg-do run { xfail "hppa*-hp-hpux11.*" } }
+ // { dg-require-weak "" }
+-// { dg-do run { xfail "hppa*-hp-hpux11.*" } }
+ // { dg-additional-sources "weak1-a.cc" }
+ // { dg-options "-O2" }
+ 
+Index: gcc/testsuite/g++.dg/ext/offsetof1.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/offsetof1.C	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/g++.dg/ext/offsetof1.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -8,8 +8,10 @@
+ };
+ 
+ int a = __builtin_offsetof(bar, foo);  // { dg-error "static data member" }
++int av = __builtin_offsetof(volatile bar, foo);  // { dg-error "static data member" }
+ int b = __builtin_offsetof(bar, baz);  // { dg-error "member function" }
+ int b0 = __builtin_offsetof(bar, baz[0]);  // { dg-error "function" }
++int bv0 = __builtin_offsetof(volatile bar, baz[0]);  // { dg-error "function" }
+ int c = __builtin_offsetof(bar, ~bar);  // { dg-error "member function" }
+ 
+ typedef int I;
+Index: gcc/testsuite/g++.dg/ext/asm10.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/asm10.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/ext/asm10.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++// PR inline-asm/32109
++// { dg-do compile }
++// { dg-options "-O2" }
++
++struct A { int i[3]; ~A (); };
++struct A a;
++struct B { struct A c; int i; B (); } b;
++
++B::B ()
++{
++  __asm ("" : : "r" (a));	// { dg-error "impossible constraint|non-memory input" }
++  __asm ("" : : "r" (b.c));	// { dg-error "impossible constraint|non-memory input" }
++  __asm ("" : : "r" (c));	// { dg-error "impossible constraint|non-memory input" }
++}
+Index: gcc/testsuite/g++.dg/ext/interface4.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/interface4.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/ext/interface4.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,13 @@
++/* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=227376 */
++
++/* { dg-do compile } */
++/* { dg-options "-g2" } */
++
++/* We used to crash when emitting debug info for type N::A because its
++   context was a namespace, not a function.  */
++
++#include "interface4.h"
++
++void f ( ) {
++        g ( );
++}
+Index: gcc/testsuite/g++.dg/ext/vector6.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/vector6.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/ext/vector6.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,12 @@
++// { dg-options "" }
++// { dg-do compile }
++// C++/30016, we were allowing conversion between vector types
++// and union types which is invalid.
++
++typedef float __v_4F __attribute__ ((vector_size (16)));
++typedef union {__v_4F v; float a[4];} __v4F;
++void f(void)
++{
++      __v_4F b;
++      (reinterpret_cast<__v4F>(b).a)[1] = 1; // { dg-error "" }
++}
+Index: gcc/testsuite/g++.dg/ext/interface4.h
+===================================================================
+--- gcc/testsuite/g++.dg/ext/interface4.h	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/ext/interface4.h	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,8 @@
++#pragma interface
++namespace N {
++        typedef int A;
++}
++inline void g ( ) {
++        static N :: A a = 0;
++        a = a;
++}
+Index: gcc/testsuite/g++.dg/inherit/conv3.C
+===================================================================
+--- gcc/testsuite/g++.dg/inherit/conv3.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/inherit/conv3.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,31 @@
++// PR 31074
++// Bug: The reference cast wasn't finding the desired static_cast followed by
++// const_cast interpretation.
++
++struct Shape
++{
++  Shape() {}
++  virtual ~Shape() {}
++};
++
++struct Loop
++{
++  Loop() {}
++  virtual ~Loop() {}
++  virtual void func() {}
++};
++
++struct Rect :
++  public Shape,
++  public Loop
++{
++  Rect() {}
++  virtual ~Rect() {}
++};
++
++int main ()
++{
++  const Rect* rect = new Rect();
++  Loop &l = ((Loop&)(*rect));
++  return (&l != (const Loop *)rect);
++}
+Index: gcc/testsuite/g++.dg/opt/nrv14.C
+===================================================================
+--- gcc/testsuite/g++.dg/opt/nrv14.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/opt/nrv14.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,39 @@
++// PR c++/32992
++// { dg-do run }
++// { dg-options "-O2" }
++
++extern "C" void abort (void);
++
++struct A
++{
++  long int a1;
++  long int a2;
++  long int a3;
++};
++
++struct B
++{
++  long int f[3];
++  operator A ()
++  {
++    union
++    {
++      long int t[3];
++      A a;
++    };
++    for (int i = 0; i < 3; i++)
++      t[i] = f[i];
++    return a;
++  }
++};
++
++int
++main ()
++{
++  B b = { {1, 3, 5} };
++  A a = b;
++
++  if (a.a1 != b.f[0] || a.a2 != b.f[1] || a.a3 != b.f[2])
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/g++.dg/opt/static5.C
+===================================================================
+--- gcc/testsuite/g++.dg/opt/static5.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/opt/static5.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,29 @@
++// PR c++/31809
++// { dg-do run }
++// { dg-options "-O2" }
++
++struct S
++{
++  unsigned v;
++  static inline S f (unsigned a);
++};
++
++inline S
++S::f (unsigned a)
++{
++  static S t = { a };
++  return t;
++}
++
++const static S s = S::f (26);
++
++extern "C" void abort (void);
++
++int
++main ()
++{
++  S t = s;
++  if (t.v != 26)
++    abort ();
++  return 0;
++}
+Index: gcc/testsuite/g++.dg/opt/complex6.C
+===================================================================
+--- gcc/testsuite/g++.dg/opt/complex6.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/opt/complex6.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++// PR 30168
++// { dg-do compile }
++// { dg-options "-O2" }
++
++struct aaa
++{
++      aaa(_Complex float __z) ;
++      _Complex float _M_value;
++};
++aaa::aaa(_Complex float __z)
++{
++  __z*=2.0f;
++  _M_value = __z;
++}
+Index: gcc/testsuite/g++.dg/opt/nrv13.C
+===================================================================
+--- gcc/testsuite/g++.dg/opt/nrv13.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/opt/nrv13.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,42 @@
++// PR tree-optimization/32353
++// { dg-do run }
++// { dg-options "-O2" }
++
++extern "C" void abort ();
++
++struct A
++{
++  int f;
++  A (int x) : f (x) {}
++};
++
++A
++foo (const A &x, const A &y)
++{
++  A r (0);
++  r = x.f == -111 ? y : (y.f == -111 || x.f > y.f) ? x : y;
++  A s (0);
++  r = r.f == -111 ? s : (r.f > s.f) ? r : s;
++  return r;
++}
++
++int
++main ()
++{
++  if (foo (A (0), A (1)).f != 1)
++    abort ();
++  if (foo (A (1), A (9)).f != 9)
++    abort ();
++  if (foo (A (9), A (1)).f != 9)
++    abort ();
++  if (foo (A (-4), A (-5)).f != 0)
++    abort ();
++  if (foo (A (-111), A (-111)).f != 0)
++    abort ();
++  if (foo (A (2), A (-111)).f != 2)
++    abort ();
++  if (foo (A (-111), A (6)).f != 6)
++    abort ();
++  if (foo (A (-111), A (-4)).f != 0)
++    abort ();
++}
+Index: gcc/testsuite/g++.dg/opt/static6.C
+===================================================================
+--- gcc/testsuite/g++.dg/opt/static6.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/opt/static6.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,35 @@
++// PR c++/31806
++// { dg-do run }
++// { dg-options "-O2 -fno-inline -fno-threadsafe-statics" }
++
++extern "C" void abort(void);
++
++struct A
++{
++    void *d;
++};
++
++static const A& staticA()
++{
++    static A s_static;
++    return s_static;
++}
++
++void assert_failed()
++{
++    abort();
++}
++
++A testMethod()
++{
++    static const A& s = staticA( );
++    if (&s == 0)
++        assert_failed();
++    return s;
++}
++
++int main()
++{
++    testMethod();
++    return 0;
++}
+Index: gcc/testsuite/g++.dg/opt/pr30590.C
+===================================================================
+--- gcc/testsuite/g++.dg/opt/pr30590.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/opt/pr30590.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,40 @@
++/* { dg-do run } */
++/* { dg-options "-O" } */
++struct test
++{
++  int type;
++  char buffer[4242]; /* should trigger pass-by-reference */
++};
++
++int flag = 0;
++
++struct test
++reset (void)
++{
++  struct test retval;
++  retval.type = 1;
++  return retval;
++}
++
++struct test
++test (void)
++{
++  struct test result;
++  result.type = 0;
++
++  for (int i = 0; i < 2; ++i)
++    {
++      struct test candidate = reset ();
++      if (flag)
++        result = candidate;
++    }
++
++  return result;
++}
++
++int
++main (void)
++{
++  struct test result = test ();
++  return result.type;
++}
+Index: gcc/testsuite/g++.dg/tls/diag-5.C
+===================================================================
+--- gcc/testsuite/g++.dg/tls/diag-5.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/tls/diag-5.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,5 @@
++// PR c++/30536
++// Invalid __thread specifiers.
++// { dg-require-effective-target tls }
++
++struct A { __thread register int i; }; // { dg-error "multiple storage classes|storage class specified" }
+Index: gcc/testsuite/g++.dg/init/const5.C
+===================================================================
+--- gcc/testsuite/g++.dg/init/const5.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/init/const5.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,11 @@
++// PR c++/31449
++
++class Foo {};
++class Bar : public Foo {};
++static const Foo *foo = 0;
++
++static Bar *bar = static_cast<const Bar*>(foo); // { dg-error "conversion" }
++
++void func(const Foo *foo) {
++  Bar *bar = static_cast<const Bar*>(foo);  // { dg-error "conversion" }
++}
+Index: gcc/testsuite/g++.dg/init/ptrfn2.C
+===================================================================
+--- gcc/testsuite/g++.dg/init/ptrfn2.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/init/ptrfn2.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++// { dg-options "" }
++// { dg-do compile }
++// C++/30221
++// We would ICE while trying to reshape the pointer to
++// member function element which is not needed.
++
++
++class abstract {};
++typedef void (abstract::*fptr1) (short & s ) const;
++struct s {};
++s array[] =
++{
++ (fptr1)0 
++};// { dg-error "" }
+Index: gcc/testsuite/g++.dg/init/ptrfn3.C
+===================================================================
+--- gcc/testsuite/g++.dg/init/ptrfn3.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/init/ptrfn3.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,14 @@
++// { dg-options "" }
++// { dg-do compile }
++// C++/30221
++// We would ICE while trying to reshape the pointer to
++// member function element which is not needed.
++
++
++class abstract {};
++typedef void (abstract::*fptr1) (short & s ) const;
++struct s {fptr1 f;};
++s array[] =
++{
++ (fptr1)0
++};
+Index: gcc/testsuite/g++.dg/parse/template23.C
+===================================================================
+--- gcc/testsuite/g++.dg/parse/template23.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/parse/template23.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,10 @@
++/* PR c++/30895 This used to ICE.  */
++/* { dg-do "compile" } */
++
++template<int> struct A {};
++
++template<typename T> struct B
++{
++  A<T(0i)> a1; /* { dg-error "imaginary constants are a GCC extension" } */
++  A<T(0i)> a2; /* { dg-error "imaginary constants are a GCC extension" } */
++};
+Index: gcc/testsuite/g++.dg/parse/cond3.C
+===================================================================
+--- gcc/testsuite/g++.dg/parse/cond3.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/parse/cond3.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,15 @@
++// PR c++/30847
++// { dg-do compile }
++// { dg-options "" }
++
++int j, k, l;
++extern void baz ();
++
++void
++foo (int i)
++{
++  (i ? j : k) = ({ l++; (void) l; });	// { dg-error "void value not ignored" }
++  (i ? j : k) += ({ l++; (void) l; });	// { dg-error "void value not ignored" }
++  (i ? j : k) = baz ();			// { dg-error "void value not ignored" }
++  (i ? j : k) *= baz ();		// { dg-error "void value not ignored" }
++}
+Index: gcc/testsuite/g++.dg/parse/crash37.C
+===================================================================
+--- gcc/testsuite/g++.dg/parse/crash37.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/parse/crash37.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,15 @@
++// PR c++/31941
++// { dg-do compile }
++
++struct S
++{
++  S() throw () { }
++  virtual ~S () throw ();
++  virtual const char* what () const throw ();
++};
++
++const char *
++foo (S &e)
++{
++  return e.what ().c_str ();	// { dg-error "c_str.*S::what.*which is of non-class type" }
++}
+Index: gcc/testsuite/g++.dg/template/crash70.C
+===================================================================
+--- gcc/testsuite/g++.dg/template/crash70.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/template/crash70.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,7 @@
++// PR c++/32113
++
++template<int> struct A;
++
++template<typename T> void foo (A<&T::template i>); // { dg-error "not a template" }
++
++template void foo<A<0> > (A<0>); // { dg-error "does not match" }
+Index: gcc/testsuite/g++.dg/template/init7.C
+===================================================================
+--- gcc/testsuite/g++.dg/template/init7.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/template/init7.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,9 @@
++/* PR c++/31517. This used to ICE.  */
++/* { dg-do "compile" } */
++
++template<typename> struct A
++{
++  static const int i=0;
++};
++
++template<typename T> const int A<T>::i = 0=0; /* { dg-error "duplicate initialization" } */
+Index: gcc/testsuite/g++.dg/template/arg6.C
+===================================================================
+--- gcc/testsuite/g++.dg/template/arg6.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/template/arg6.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,15 @@
++// PR c++/33744
++// { dg-do run }
++
++template <bool B> struct A { bool b; A() : b(B) {}; };
++A<bool(1)> a;
++A<bool(1<2)> b;
++A<(bool)(2>1)> c;
++A<bool((2>1))> d;
++A<bool(2>1)> e;
++
++int
++main ()
++{
++  return (a.b && b.b && c.b && d.b && e.b) ? 0 : 1;
++}
+Index: gcc/testsuite/g++.dg/template/error26.C
+===================================================================
+--- gcc/testsuite/g++.dg/template/error26.C	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/g++.dg/template/error26.C	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,5 @@
++// PR c++/32112
++
++template<typename> struct A;
++
++template<typename T> void foo (A<&T::template i>); // { dg-error "T::template i|mismatch|& T::i" }
+Index: gcc/testsuite/lib/g++.exp
+===================================================================
+--- gcc/testsuite/lib/g++.exp	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/lib/g++.exp	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -221,7 +221,7 @@
+ 	unset gluefile
+     }
+ 
+-    g++_maybe_build_wrapper "${tmpdir}/g++-testglue.o"
++    g++_maybe_build_wrapper "${tmpdir}/g++-testglue.o" "-fexceptions"
+ 
+     if {![info exists CXXFLAGS]} {
+ 	set CXXFLAGS ""
+Index: gcc/testsuite/lib/obj-c++.exp
+===================================================================
+--- gcc/testsuite/lib/obj-c++.exp	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/lib/obj-c++.exp	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -239,7 +239,7 @@
+ 	unset gluefile
+     }
+ 
+-    obj-c++_maybe_build_wrapper "${tmpdir}/obj-c++-testglue.o"
++    obj-c++_maybe_build_wrapper "${tmpdir}/obj-c++-testglue.o" "-fexceptions"
+ 
+     set ALWAYS_OBJCXXFLAGS ""
+ 
+Index: gcc/testsuite/lib/wrapper.exp
+===================================================================
+--- gcc/testsuite/lib/wrapper.exp	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/lib/wrapper.exp	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -18,18 +18,20 @@
+ 
+ # ${tool}_maybe_build_wrapper -- Build wrapper object if the target needs it.
+ 
+-proc ${tool}_maybe_build_wrapper { filename } {
++proc ${tool}_maybe_build_wrapper { filename args } {
+     global gluefile wrap_flags
+ 
+     if { [target_info needs_status_wrapper] != "" \
+  	 && [target_info needs_status_wrapper] != "0" \
+ 	 && ![info exists gluefile] } {
+ 	set saved_wrap_compile_flags [target_info wrap_compile_flags]
++	set flags [join $args " "]
+ 	# The wrapper code may contain code that gcc objects on.  This
+ 	# became true for dejagnu-1.4.4.  The set of warnings and code
+ 	# that gcc objects on may change, so just make sure -w is always
+ 	# passed to turn off all warnings.
+-	set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags -w"
++	set_currtarget_info wrap_compile_flags \
++	    "$saved_wrap_compile_flags -w $flags"
+ 	set result [build_wrapper $filename]
+ 	set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags"
+ 	if { $result != "" } {
+Index: gcc/testsuite/lib/target-supports.exp
+===================================================================
+--- gcc/testsuite/lib/target-supports.exp	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/lib/target-supports.exp	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -490,6 +490,16 @@
+     return 0
+ }
+ 
++# Return 1 if the current multilib does not generate PIC by default.
++
++proc check_effective_target_nonpic { } {
++    return [check_no_compiler_messages nonpic assembly {
++	#if __PIC__ || __pic__
++	#error FOO
++	#endif
++    }]
++}
++
+ # Return true if iconv is supported on the target. In particular IBM1047.
+ 
+ proc check_iconv_available { test_what } {
+Index: gcc/testsuite/obj-c++.dg/gnu-runtime-2.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/gnu-runtime-2.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/gnu-runtime-2.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -22,7 +22,7 @@
+ -(unsigned int) length  { return len; }
+ @end
+ 
+-int main(int argc, void **args)
++int main(int argc, const char **args)
+ {
+   if (strcmp ([@"this is a string" cString], "this is a string"))
+     abort ();
+Index: gcc/testsuite/obj-c++.dg/layout-1.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/layout-1.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/layout-1.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -13,3 +13,5 @@
+ - (id) foo;
+ @end
+ 
++/* { dg-bogus "included from <built-in>" "PR23610" { xfail lp64 } 0 } */
++/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 0 } */
+Index: gcc/testsuite/obj-c++.dg/try-catch-2.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/try-catch-2.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/try-catch-2.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3,6 +3,7 @@
+ /* Developed by Ziemowit Laski <zlaski@apple.com>.  */
+ 
+ /* { dg-options "-fobjc-exceptions" } */
++/* { dg-xfail-if "PR23616" { "*-*-*" } { "*" } { "" } } */
+ /* { dg-do run } */
+ 
+ #include <objc/Object.h>
+Index: gcc/testsuite/obj-c++.dg/lookup-2.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/lookup-2.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/lookup-2.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,4 +1,5 @@
+ /* { dg-do run } */
++/* { dg-xfail-if "PR23614" { "*-*-*" } { "*" } { "" } } */
+ 
+ #include <objc/Object.h>
+ #include <stdlib.h>
+Index: gcc/testsuite/obj-c++.dg/bitfield-1.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/bitfield-1.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/bitfield-1.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -111,3 +111,13 @@
+   
+   return 0;
+ }
++
++/* { dg-bogus "included from <built-in>" "PR23610" { xfail lp64 } 0 } */
++/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 0 } */
++
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 40 } */
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 43 } */
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 57 } */
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 60 } */
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 75 } */
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 76 } */
+Index: gcc/testsuite/obj-c++.dg/isa-field-1.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/isa-field-1.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/isa-field-1.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,5 +1,6 @@
+ /* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects.  */
+ /* { dg-do compile } */
++/* { dg-xfail-if "PR23613" { "*-*-*" } { "*" } { "" } } */
+ 
+ #include <objc/Object.h>
+ 
+Index: gcc/testsuite/obj-c++.dg/encode-8.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/encode-8.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/encode-8.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3,7 +3,7 @@
+    should be encoded as '*').  */
+ /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
+ /* { dg-options "-lobjc" } */
+-/* { dg-do run } */
++/* { dg-do run { xfail { "*-*-*" } } } PR27249 */
+ 
+ #include <string.h>           
+ #include <stdlib.h>
+Index: gcc/testsuite/obj-c++.dg/try-catch-9.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/try-catch-9.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/try-catch-9.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3,6 +3,7 @@
+ /* Developed by Ziemowit Laski <zlaski@apple.com>.  */
+ 
+ /* { dg-options "-fobjc-exceptions -O2" } */
++/* { dg-xfail-if "PR23616" { "*-*-*" } { "*" } { "" } } */
+ /* { dg-do run } */
+ 
+ #include <objc/Object.h>
+Index: gcc/testsuite/obj-c++.dg/bitfield-4.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/bitfield-4.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/bitfield-4.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -48,3 +48,9 @@
+ 
+   return 0;
+ }
++
++/* { dg-bogus "included from <built-in>" "PR23610" { xfail lp64 } 0 } */
++/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 0 } */
++
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 28 } */
++/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 34 } */
+Index: gcc/testsuite/obj-c++.dg/encode-3.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/encode-3.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/encode-3.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -14,16 +14,22 @@
+ const char *enc = @encode(Vec<float>);
+ const char *enc2 = @encode(Vec<double>);
+ 
++#ifdef __LP64__
++#define L "q"
++#else
++#define L "l"
++#endif
++
+ int main(void) {
+-  char *encode = @encode(long);
++  const char *encode = @encode(long);
+ 
+-  if (strcmp (encode, "l"))
++  if (strcmp (encode, L))
+     abort();
+ 
+-  if (strcmp (enc, "{Vec<float>=fflq}"))
++  if (strcmp (enc, "{Vec<float>=ff" L "q}"))
+     abort();
+ 
+-  if (strcmp (enc2, "{Vec<double>=ddlq}"))
++  if (strcmp (enc2, "{Vec<double>=dd" L "q}"))
+     abort();
+ 
+   return 0;
+Index: gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm
+===================================================================
+--- gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,7 @@
+ // Check if the '- .cxx_construct' and '-.cxx_destruct' methods get called
+ // and if they perform their desired function.
+ 
+-// { dg-do run }
++// { dg-do run { xfail { "*-*-*" } } } PR27247/PR23681
+ // { dg-options "-fobjc-call-cxx-cdtors" }
+ 
+ #include <objc/Object.h>
+Index: gcc/testsuite/gfortran.dg/pr32533.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/pr32533.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/pr32533.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,18 @@
++! { dg-do run }
++! { dg-options "-O2 -ftree-vectorize -ffast-math" }
++!
++! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
++!
++SUBROUTINE T(nsubcell,sab_max,subcells)
++  INTEGER, PARAMETER :: dp=KIND(0.0D0)
++  REAL(dp) :: sab_max(3), subcells,nsubcell(3)
++  nsubcell(:) = MIN(MAX(1,NINT(0.5_dp*subcells/sab_max(:))),20)
++END SUBROUTINE T
++
++INTEGER, PARAMETER :: dp=KIND(0.0D0)
++REAL(dp) :: sab_max(3), subcells,nsubcell(3)
++subcells=2.0_dp
++sab_max=0.590060749244805_dp
++CALL T(nsubcell,sab_max,subcells)
++IF (ANY(nsubcell.NE.2.0_dp)) CALL ABORT()
++END
+Index: gcc/testsuite/gfortran.dg/logical_2.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/logical_2.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/logical_2.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,26 @@
++! { dg-do compile }
++! PR fortran/30799
++! Inconsistent handling of bad (invalid) LOGICAL kinds
++! Reporter: Harald Anlauf <anlauf@gmx.de>
++! Testcase altered by Steven G. Kargl
++program gfcbug57
++  implicit none
++  !
++  ! These are logical kinds known by gfortran and many other compilers:
++  !
++  print *, kind (.true._1) ! This prints "1"
++  print *, kind (.true._2) ! This prints "2"
++  print *, kind (.true._4) ! This prints "4"
++  print *, kind (.true._8) ! This prints "8"
++  !
++  ! These are very strange (read: bad (invalid?)) logical kinds,
++  ! handled inconsistently by gfortran (there's no logical(kind=0) etc.)
++  !
++  print *, kind (.true._0)   ! { dg-error "kind for logical constant" }
++  print *, kind (.true._3)   ! { dg-error "kind for logical constant" }
++  print *, kind (.true._123) ! { dg-error "kind for logical constant" }
++  !
++  ! Here gfortran bails out with a runtime error:
++  !
++  print *, .true._3   ! { dg-error "kind for logical constant" }
++end program gfcbug57
+Index: gcc/testsuite/gfortran.dg/module_implicit_conversion.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/module_implicit_conversion.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/module_implicit_conversion.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,9 @@
++! { dg-do compile }
++! { dg-options "-std=gnu" }
++
++module module_implicit_conversion
++  ! double complex :: s = (1.0D0, 0D0) 
++  double complex :: s = (1.0, 0D0)
++end module module_implicit_conversion
++
++! { dg-final { cleanup-modules "module_implicit_conversion" } }
+Index: gcc/testsuite/gfortran.dg/enum_4.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/enum_4.f90	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gfortran.dg/enum_4.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -5,12 +5,12 @@
+   implicit none
+   enum, bind (c)
+     enumerator :: red, black = 2     
+-    enumerator :: blue = 1, red  ! { dg-error "already" }
++    enumerator :: blue = 1, red  ! { dg-error "already has basic type" }
+   end enum
+ 
+   enum, bind (c)
+-    enumerator :: r, b(10) = 2  ! { dg-error "cannot be array" }
+-    enumerator , save :: g = 1  ! { dg-error "cannot have attributes" }  
++    enumerator :: r, b(10) = 2  ! { dg-error "Syntax error" }
++    enumerator , save :: g = 1  ! { dg-error "Syntax error" }  
+   end  ! { dg-error " END ENUM" } 
+ 
+ end program main  ! { dg-excess-errors "" }
+Index: gcc/testsuite/gfortran.dg/initialization_4.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/initialization_4.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/initialization_4.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,6 @@
++! PR 29441 : No error was given for disallowed function in
++! initialization expression, even if -std=f95 was used
++! { dg-do compile }
++! { dg-options "-std=f95" }
++real, parameter :: pi = 4.0*Atan(1.0) ! { dg-error "Evaluation of nonstandard initialization expression" }
++end
+Index: gcc/testsuite/gfortran.dg/namelist_26.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/namelist_26.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/namelist_26.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,48 @@
++! { dg-do run }
++! PR30918 Failure to skip commented out NAMELIST
++! Before the patch, this read the commented out namelist and iuse would
++! equal 2 when done.  Test case from PR.
++program gfcbug58
++  implicit none
++  integer            :: iuse = 0, ios
++  integer, parameter :: nmlunit = 10    ! Namelist unit
++  !------------------
++  ! Namelist 'REPORT'
++  !------------------
++  character(len=12) :: type, use
++  integer           :: max_proc
++  namelist /REPORT/ type, use, max_proc
++  !------------------
++  ! Set up the test file
++  !------------------
++  open(unit=nmlunit, status="scratch")
++  write(nmlunit, '(a)') "!================"
++  write(nmlunit, '(a)') "! Namelist REPORT"
++  write(nmlunit, '(a)') "!================"
++  write(nmlunit, '(a)') "!      &REPORT use      = 'ignore'   / ! Comment"
++  write(nmlunit, '(a)') "!"
++  write(nmlunit, '(a)') " &REPORT type     = 'SYNOP'"
++  write(nmlunit, '(a)') "         use      = 'active'"
++  write(nmlunit, '(a)') "         max_proc = 20"
++  write(nmlunit, '(a)') " /"
++  rewind(nmlunit)
++  !-------------------------------------
++  ! Loop to read namelist multiple times
++  !-------------------------------------
++  do
++     !----------------------------------------
++     ! Preset namelist variables with defaults
++     !----------------------------------------
++     type      = ''
++     use       = ''
++     max_proc  = -1
++     !--------------
++     ! Read namelist
++     !--------------
++     read (nmlunit, nml=REPORT, iostat=ios)
++     if (ios /= 0) exit
++     iuse = iuse + 1
++  end do
++  if (iuse /= 1) call abort()
++
++end program gfcbug58
+Index: gcc/testsuite/gfortran.dg/unf_read_corrupted_2.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/unf_read_corrupted_2.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/unf_read_corrupted_2.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,27 @@
++! { dg-do run }
++! PR31880 silent data corruption in gfortran read statement
++! Test from PR.
++      program r3
++
++      integer(kind=4) :: a(1025),b(1025),c(1025),d(2048),e(1022)
++      
++      a = 5
++      b = 6
++      c = 7
++      e = 8
++
++      do i=1,2048
++         d(i)=i
++      end do
++
++      open  (3,form='unformatted', status="scratch")
++      write (3) a,b,c,d,e
++      rewind 3
++      d = 0
++      read  (3) a,b,c,d
++      close (3)
++
++      if (d(1).ne.1) call abort
++      if (d(2048).ne.2048) call abort
++
++      end
+Index: gcc/testsuite/gfortran.dg/fmt_zero_precision.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/fmt_zero_precision.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/fmt_zero_precision.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,85 @@
++! { dg-do run }
++! PR28354 Incorrect rounding of .99999 with f3.0 format specifier
++! PR30910 ES format not quite right...
++! Test case derived from PR. Submitted by Jerry DeLisle <jvdelisle@gcc.gnu.org>
++  write(*,50) -0.99999
++  write(*,50) 0.99999
++  write(*,50) -9.0
++  write(*,50) -0.99
++  write(*,50) -0.999
++  write(*,50) -0.999
++  write(*,50) -0.59
++  write(*,50) -0.49
++  write(*,100) 37.99999
++  write(*,100) 10345.0
++  write(*,100) 333.678
++  write(*,100) 333.499
++  50   format(f3.0,"<")
++ 100   format(f8.0,"<")
++  write(6,'(es6.0)') 1.0e-1
++  write(*,150) -0.99999
++  write(*,150) 0.99999
++  write(*,150) -9.0
++  write(*,150) -0.99
++  write(*,150) -0.999
++  write(*,150) -0.999
++  write(*,150) -0.59
++  write(*,150) -0.49
++  write(*,200) 37.99999
++  write(*,200) 10345.0
++  write(*,200) 333.678
++  write(*,200) 333.499
++ 150   format(es7.0,"<")
++ 200   format(es8.0,"<")
++  write(*,250) -0.99999
++  write(*,250) 0.99999
++  write(*,250) -9.0
++  write(*,250) -0.99
++  write(*,250) -0.999
++  write(*,250) -0.999
++  write(*,250) -0.59
++  write(*,250) -0.49
++  write(*,300) 37.99999
++  write(*,300) 10345.0
++  write(*,300) 333.678
++  write(*,300) 333.499
++ 250   format(1pe7.0,"<")
++ 300   format(1pe6.0,"<")
++  end
++! {dg-output "-1.<"
++! {dg-output " 1.<"
++! {dg-output "-9.<"
++! {dg-output "-1.<"
++! {dg-output "-1.<"
++! {dg-output "-1.<"
++! {dg-output "-1.<"
++! {dg-output " 0.<"
++! {dg-output "     38.<"
++! {dg-output "  10345.<"
++! {dg-output "    334.<"
++! {dg-output "    333.<"
++! {dg-output "1.E-01"
++! {dg-output "-1.E+00<"
++! {dg-output " 1.E+00<"
++! {dg-output "-9.E+00<"
++! {dg-output "-1.E+00<"
++! {dg-output "-1.E+00<"
++! {dg-output "-1.E+00<"
++! {dg-output "-6.E-01<"
++! {dg-output "-5.E-01<"
++! {dg-output "  4.E+01<"
++! {dg-output "  1.E+04<"
++! {dg-output "  3.E+02<"
++! {dg-output "  3.E+02<"
++! {dg-output "-1.E+00<"
++! {dg-output " 1.E+00<"
++! {dg-output "-9.E+00<"
++! {dg-output "-1.E+00<"
++! {dg-output "-1.E+00<"
++! {dg-output "-1.E+00<"
++! {dg-output "-6.E-01<"
++! {dg-output "-5.E-01<"
++! {dg-output "4.E+01<"
++! {dg-output "1.E+04<"
++! {dg-output "3.E+02<"
++! {dg-output "3.E+02<"
+Index: gcc/testsuite/gfortran.dg/vect/vect-2.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/vect/vect-2.f90	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/testsuite/gfortran.dg/vect/vect-2.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -14,9 +14,7 @@
+ ! support unaligned loads) or using peeling to align the store (on targets that 
+ ! support unaligned loads).
+ 
+-! { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } }
+-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail vect_no_align } } }
+-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target vect_no_align } } }
+-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } }
+-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target vect_no_align } } }
++! { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } }
++! { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } }
++! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect"  } }
+ ! { dg-final { cleanup-tree-dump "vect" } }
+Index: gcc/testsuite/gfortran.dg/forall_10.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/forall_10.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/forall_10.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,25 @@
++! { dg-do run }
++! { dg-options "-O" }
++! Tests the fix for PR30400, in which the use of ANY in the
++! FORALL mask was rejected.
++!
++! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>
++!
++program pr30400_1
++  real, dimension (5, 5, 5, 5) :: a
++
++  a (:, :, :,  :)  = 4
++  a (:, 2, :, 4) = 10
++  a (:, 2, :, 1) = 0
++
++  forall (i = 1:5, j = 1:5, k = 1:5, any (a (i, j, k,  :)  .gt. 6))
++    forall (l = 1:5, any (a (:, :, :, l) .lt. 2))
++      a (i, j, k, l) = i - j + k - l
++    end forall
++  end forall
++  if (sum (a) .ne. 2625.0) call abort ()
++
++ ! Check that the fix has not broken the treatment of the '=='
++  forall (i = 1:5, i == 3) a(i, i, i, i) = -5
++  if (sum (a) .ne. 2616.0) call abort ()
++end
+Index: gcc/testsuite/gfortran.dg/f2c_8.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/f2c_8.f90	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/testsuite/gfortran.dg/f2c_8.f90	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++! { dg-options "-ff2c" }
++! PR 25392
++! Verify that the type of the result variable matches the declared
++! type of the function.  The actual type of the function may be
++! different for f2c calling conventions.
++real function goo () result (foo)
++  real x
++  foo = sign(foo, x)
++end
++
++real function foo ()
++  real x
++  foo = sign(foo, x)
++end
++
+Index: gcc/cp/typeck.c
+===================================================================
+--- gcc/cp/typeck.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/typeck.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -5094,7 +5094,7 @@
+     }
+   else if (TREE_CODE (type) == VECTOR_TYPE)
+     return fold_if_not_in_template (convert_to_vector (type, expr));
+-  else if (TREE_CODE (intype) == VECTOR_TYPE)
++  else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type))
+     return fold_if_not_in_template (convert_to_integer (type, expr));
+   else
+     {
+@@ -5450,6 +5450,12 @@
+ 	tree cond;
+ 	tree preeval = NULL_TREE;
+ 
++	if (VOID_TYPE_P (TREE_TYPE (rhs)))
++	  {
++	    error ("void value not ignored as it ought to be");
++	    return error_mark_node;
++	  }
++
+ 	rhs = stabilize_expr (rhs, &preeval);
+ 
+ 	/* Check this here to avoid odd errors when trying to convert
+@@ -6433,6 +6439,7 @@
+ 	  && TREE_CODE (retval) == VAR_DECL
+ 	  && DECL_CONTEXT (retval) == current_function_decl
+ 	  && ! TREE_STATIC (retval)
++	  && ! DECL_HAS_VALUE_EXPR_P (retval)
+ 	  && (DECL_ALIGN (retval)
+ 	      >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
+ 	  && same_type_p ((TYPE_MAIN_VARIANT
+Index: gcc/cp/optimize.c
+===================================================================
+--- gcc/cp/optimize.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/optimize.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -69,6 +69,8 @@
+   DECL_NAME (cloned_parm) = DECL_NAME (parm);
+   DECL_SOURCE_LOCATION (cloned_parm) = DECL_SOURCE_LOCATION (parm);
+   TREE_TYPE (cloned_parm) = TREE_TYPE (parm);
++
++  DECL_COMPLEX_GIMPLE_REG_P (cloned_parm) = DECL_COMPLEX_GIMPLE_REG_P (parm);
+ }
+ 
+ /* FN is a function that has a complete body.  Clone the body as
+Index: gcc/cp/class.c
+===================================================================
+--- gcc/cp/class.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/class.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -294,6 +294,16 @@
+   /* Do we need to look in the vtable for the real offset?  */
+   virtual_access = (v_binfo && fixed_type_p <= 0);
+ 
++  /* Don't bother with the calculations inside sizeof; they'll ICE if the
++     source type is incomplete and the pointer value doesn't matter.  */
++  if (skip_evaluation)
++    {
++      expr = build_nop (build_pointer_type (target_type), expr);
++      if (!want_pointer)
++	expr = build_indirect_ref (expr, NULL);
++      return expr;
++    }
++
+   /* Do we need to check for a null pointer?  */
+   if (want_pointer && !nonnull)
+     {
+@@ -303,7 +313,18 @@
+ 	 field, because other parts of the compiler know that such
+ 	 expressions are always non-NULL.  */
+       if (!virtual_access && integer_zerop (offset))
+-	return build_nop (build_pointer_type (target_type), expr);
++	{
++	  tree class_type;
++	  /* TARGET_TYPE has been extracted from BINFO, and, is
++	     therefore always cv-unqualified.  Extract the
++	     cv-qualifiers from EXPR so that the expression returned
++	     matches the input.  */
++	  class_type = TREE_TYPE (TREE_TYPE (expr));
++	  target_type
++	    = cp_build_qualified_type (target_type,
++				       cp_type_quals (class_type));
++	  return build_nop (build_pointer_type (target_type), expr);
++	}
+       null_test = error_mark_node;
+     }
+ 
+Index: gcc/cp/decl.c
+===================================================================
+--- gcc/cp/decl.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/decl.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -4510,19 +4510,24 @@
+     {
+       if (TREE_CODE (init) == CONSTRUCTOR)
+ 	{
++	  if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
++	    /* There is no need to reshape pointer-to-member function
++	       initializers, as they are always constructed correctly
++	       by the front end.  */
++           ;
++	  else if (COMPOUND_LITERAL_P (init))
+ 	  /* For a nested compound literal, there is no need to reshape since
+ 	     brace elision is not allowed. Even if we decided to allow it,
+ 	     we should add a call to reshape_init in finish_compound_literal,
+ 	     before calling digest_init, so changing this code would still
+ 	     not be necessary.  */
+-	  if (!COMPOUND_LITERAL_P (init))
++	    gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
++	  else
+ 	    {
+ 	      ++d->cur;
+ 	      gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
+ 	      return reshape_init (type, init);
+ 	    }
+-	  else
+-	    gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
+ 	}
+ 
+       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
+@@ -5235,7 +5240,15 @@
+ 	     initializer.  It is not legal to redeclare a static data
+ 	     member, so this issue does not arise in that case.  */
+ 	  if (var_definition_p && TREE_STATIC (decl))
+-	    expand_static_init (decl, init);
++            {
++              if (init)
++                {
++                  if (TREE_READONLY (decl))
++                      TREE_READONLY (decl) = 0;
++                  was_readonly = 0;
++                }
++	      expand_static_init (decl, init);
++            }
+ 	}
+     }
+ 
+@@ -7288,20 +7301,21 @@
+ 
+   /* Warn about storage classes that are invalid for certain
+      kinds of declarations (parameters, typenames, etc.).  */
++  if (thread_p
++      && ((storage_class
++	   && storage_class != sc_extern
++	   && storage_class != sc_static)
++	  || declspecs->specs[(int)ds_typedef]))
++    {
++      if (!declspecs->multiple_storage_classes_p)
++	error ("multiple storage classes in declaration of %qs", name);
++      thread_p = false;
++    }
+   if (declspecs->multiple_storage_classes_p)
+     {
+       error ("multiple storage classes in declaration of %qs", name);
+       storage_class = sc_none;
+     }
+-  else if (thread_p
+-	   && ((storage_class
+-		&& storage_class != sc_extern
+-		&& storage_class != sc_static)
+-	       || declspecs->specs[(int)ds_typedef]))
+-    {
+-      error ("multiple storage classes in declaration of %qs", name);
+-      thread_p = false;
+-    }
+   else if (decl_context != NORMAL
+ 	   && ((storage_class != sc_none
+ 		&& storage_class != sc_mutable)
+@@ -11044,7 +11058,7 @@
+   gcc_assert (stmts_are_full_exprs_p ());
+ 
+   /* Set up the named return value optimization, if we can.  Candidate
+-     variables are selected in check_return_value.  */
++     variables are selected in check_return_expr.  */
+   if (current_function_return_value)
+     {
+       tree r = current_function_return_value;
+Index: gcc/cp/call.c
+===================================================================
+--- gcc/cp/call.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/call.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -171,7 +171,7 @@
+ 	(struct z_candidate **, tree, tree, tree, tree, tree, int);
+ static conversion *implicit_conversion (tree, tree, tree, bool, int);
+ static conversion *standard_conversion (tree, tree, tree, bool, int);
+-static conversion *reference_binding (tree, tree, tree, int);
++static conversion *reference_binding (tree, tree, tree, bool, int);
+ static conversion *build_conv (conversion_kind, tree, conversion *);
+ static bool is_subseq (conversion *, conversion *);
+ static tree maybe_handle_ref_bind (conversion **);
+@@ -714,19 +714,7 @@
+ 		  that necessitates this conversion is ill-formed.
+ 		  Therefore, we use DERIVED_FROM_P, and do not check
+ 		  access or uniqueness.  */
+-	       && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from))
+-	       /* If FROM is not yet complete, then we must be parsing
+-		  the body of a class.  We know what's derived from
+-		  what, but we can't actually perform a
+-		  derived-to-base conversion.  For example, in:
+-
+-		     struct D : public B { 
+-                       static const int i = sizeof((B*)(D*)0);
+-                     };
+-
+-                  the D*-to-B* conversion is a reinterpret_cast, not a
+-		  static_cast.  */
+-	       && COMPLETE_TYPE_P (TREE_TYPE (from)))
++	       && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
+ 	{
+ 	  from =
+ 	    cp_build_qualified_type (TREE_TYPE (to),
+@@ -1072,10 +1060,11 @@
+    purposes of reference binding.  For lvalue binding, either pass a
+    reference type to FROM or an lvalue expression to EXPR.  If the
+    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
+-   the conversion returned.  */
++   the conversion returned.  If C_CAST_P is true, this
++   conversion is coming from a C-style cast.  */
+ 
+ static conversion *
+-reference_binding (tree rto, tree rfrom, tree expr, int flags)
++reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
+ {
+   conversion *conv = NULL;
+   tree to = TREE_TYPE (rto);
+@@ -1105,6 +1094,11 @@
+      reference compatible.  We have do do this after stripping
+      references from FROM.  */
+   related_p = reference_related_p (to, from);
++  /* If this is a C cast, first convert to an appropriately qualified
++     type, so that we can later do a const_cast to the desired type.  */
++  if (related_p && c_cast_p
++      && !at_least_as_qualified_p (to, from))
++    to = build_qualified_type (to, cp_type_quals (from));
+   compatible_p = reference_compatible_p (to, from);
+ 
+   if (lvalue_p && compatible_p)
+@@ -1214,7 +1208,7 @@
+   if (related_p && !at_least_as_qualified_p (to, from))
+     return NULL;
+ 
+-  conv = implicit_conversion (to, from, expr, /*c_cast_p=*/false, 
++  conv = implicit_conversion (to, from, expr, c_cast_p,
+ 			      flags);
+   if (!conv)
+     return NULL;
+@@ -1244,7 +1238,7 @@
+     return NULL;
+ 
+   if (TREE_CODE (to) == REFERENCE_TYPE)
+-    conv = reference_binding (to, from, expr, flags);
++    conv = reference_binding (to, from, expr, c_cast_p, flags);
+   else
+     conv = standard_conversion (to, from, expr, c_cast_p, flags);
+ 
+@@ -5481,6 +5475,20 @@
+ 		  && TREE_SIDE_EFFECTS (instance_ptr))
+ 		call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
+ 			       instance_ptr, call);
++	      else if (call != error_mark_node
++		       && DECL_DESTRUCTOR_P (cand->fn)
++		       && !VOID_TYPE_P (TREE_TYPE (call)))
++		/* An explicit call of the form "x->~X()" has type
++		   "void".  However, on platforms where destructors
++		   return "this" (i.e., those where
++		   targetm.cxx.cdtor_returns_this is true), such calls
++		   will appear to have a return value of pointer type
++		   to the low-level call machinery.  We do not want to
++		   change the low-level machinery, since we want to be
++		   able to optimize "delete f()" on such platforms as
++		   "operator delete(~X(f()))" (rather than generating
++		   "t = f(), ~X(t), operator delete (t)").  */
++		call = build_nop (void_type_node, call);
+ 	    }
+ 	}
+     }
+@@ -6514,7 +6522,8 @@
+   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
+   p = conversion_obstack_alloc (0);
+ 
+-  conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
++  conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
++			    LOOKUP_NORMAL);
+   if (!conv || conv->bad_p)
+     {
+       if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
+Index: gcc/cp/error.c
+===================================================================
+--- gcc/cp/error.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/error.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -895,6 +895,10 @@
+ 	pp_type_id (cxx_pp, t);
+       break;
+ 
++    case UNBOUND_CLASS_TEMPLATE:
++      dump_type (t, flags);
++      break;
++
+     default:
+       pp_unsupported_tree (cxx_pp, t);
+       /* Fall through to error.  */
+@@ -1287,10 +1291,14 @@
+ resolve_virtual_fun_from_obj_type_ref (tree ref)
+ {
+   tree obj_type = TREE_TYPE (OBJ_TYPE_REF_OBJECT (ref));
+-  int index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
++  HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
+   tree fun = BINFO_VIRTUALS (TYPE_BINFO (TREE_TYPE (obj_type)));
+-    while (index--)
++  while (index)
++    {
+       fun = TREE_CHAIN (fun);
++      index -= (TARGET_VTABLE_USES_DESCRIPTORS
++		? TARGET_VTABLE_USES_DESCRIPTORS : 1);
++    }
+ 
+   return BV_FN (fun);
+ }
+@@ -1413,13 +1421,13 @@
+ 	    if (TREE_CODE (ob) == ADDR_EXPR)
+ 	      {
+ 		dump_expr (TREE_OPERAND (ob, 0), flags | TFF_EXPR_IN_PARENS);
+-		pp_dot (cxx_pp);
++		pp_cxx_dot (cxx_pp);
+ 	      }
+ 	    else if (TREE_CODE (ob) != PARM_DECL
+ 		     || strcmp (IDENTIFIER_POINTER (DECL_NAME (ob)), "this"))
+ 	      {
+ 		dump_expr (ob, flags | TFF_EXPR_IN_PARENS);
+-		pp_arrow (cxx_pp);
++		pp_cxx_arrow (cxx_pp);
+ 	      }
+ 	    args = TREE_CHAIN (args);
+ 	  }
+Index: gcc/cp/tree.c
+===================================================================
+--- gcc/cp/tree.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/tree.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1442,6 +1442,10 @@
+ 	&& !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
+ 		    TREE_STRING_LENGTH (t1));
+ 
++    case COMPLEX_CST:
++      return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
++	&& cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
++
+     case CONSTRUCTOR:
+       /* We need to do this when determining whether or not two
+ 	 non-type pointer to member function template arguments
+Index: gcc/cp/search.c
+===================================================================
+--- gcc/cp/search.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/search.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1200,6 +1200,9 @@
+ 
+   const char *errstr = 0;
+ 
++  if (name == error_mark_node)
++    return NULL_TREE;
++
+   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
+ 
+   if (TREE_CODE (xbasetype) == TREE_BINFO)
+Index: gcc/cp/ChangeLog
+===================================================================
+--- gcc/cp/ChangeLog	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/ChangeLog	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,3 +1,161 @@
++2008-02-19  Jason Merrill  <jason@redhat.com>
++
++	PR c++/34950
++	* pt.c (resolve_overloaded_unification): Set processing_template_decl
++	while we look for possible bindings.
++
++2008-02-13  Jason Merrill  <jason@redhat.com>
++
++	PR c++/34774
++	* pt.c (value_dependent_expression_p): Look into DECL_INITIAL
++	of enumerators, too.
++
++2008-01-28  Jason Merrill  <jason@redhat.com>
++
++	PR c++/35007
++	* class.c (build_base_path): Fix !want_pointer case.
++
++2008-01-27  Jason Merrill  <jason@redhat.com>
++
++	PR c++/27177
++	* class.c (build_base_path): Fix previous change.
++
++	PR c++/27177
++	* class.c (build_base_path): Don't mess with virtual access if
++	skip_evaluation.
++	* call.c (standard_conversion): Don't check whether source type
++	is complete.
++
++	PR c++/33959
++	* pt.c (tsubst_aggr_type): Make sure our context is complete.
++
++2007-10-26  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/33744
++	* parser.c (cp_parser_parenthesized_expression_list): Set
++	greater_than_is_operator_p to true in between the parens.
++
++2007-08-31  Paolo Carlini  <pcarlini@suse.de>
++
++	PR c++/32113
++	* search.c (lookup_member): Check the name argument for
++	error_mark_node.
++
++2007-08-24  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/31941
++	* error.c (resolve_virtual_fun_from_obj_type_ref): Handle
++	TARGET_VTABLE_USES_DESCRIPTORS targets properly.
++
++2007-08-20  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/32992
++	* typeck.c (check_return_expr): Don't NRV optimize vars in
++	anonymous unions.
++	* decl.c (finish_function): Comment fix.
++
++2007-08-18  Paolo Carlini  <pcarlini@suse.de>
++
++	PR c++/32112
++	* error.c (dump_decl): Deal with UNBOUND_CLASS_TEMPLATE.
++	* cxx-pretty-print.c (pp_cxx_unqualified_id): Likewise.
++
++2007-08-10  Paolo Carlini  <pcarlini@suse.de>
++
++	PR c++/17763
++	* error.c (dump_expr): Consistently use the *_cxx_*
++	variants of the pretty-print functions.
++
++2007-06-20  Dirk Mueller  <dmueller@suse.de>
++
++	PR c++/31809
++	PR c++/31806
++	Backport from mainline:
++	2007-05-31  Jakub Jelinek  <jakub@redhat.com>
++
++	* decl.c (cp_finish_decl): Also clear was_readonly if a static var
++	needs runtime initialization.
++
++	2007-05-30  Jakub Jelinek  <jakub@redhat.com>
++
++	* decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC
++	variables that need runtime initialization.
++
++2007-04-28  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C++/30221
++	* decl.c (reshape_init_r): Don't reshape the first element if it
++	is a pointer to member function.
++
++2007-04-26  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C++/30016
++	* typeck.c (build_reinterpret_cast_1): Only allow conversion to
++	integeral types from vectors types.
++
++2007-04-17  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c++/31517
++	* pt.c (value_dependent_expression_p): Handle MODOP_EXPRs.
++
++2007-04-14  Andrew Pinski  <pinskia@gmail.com> 
++
++	PR C++/30168
++	* optimize.c (update_cloned_parm): Copy DECL_COMPLEX_GIMPLE_REG_P also.
++
++2007-04-13  Jason Merrill  <jason@redhat.com>
++
++	PR c++/31074
++	* call.c (reference_binding): Add c_cast_p parm.  If true,
++	add quals to TO as needed to make it reference-compatible.
++
++2007-04-09  Mark Mitchell  <mark@codesourcery.com>
++
++	PR c++/31449
++	* class.c (build_base_path): Ensure that the converted pointer has
++	the same cv-qualification as the input.
++
++2007-04-03  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/30847
++	* typeck.c (build_modify_expr): For COND_EXPR on LHS, if RHS has void
++	type issue error and return early.
++
++2007-03-08  Volker Reichelt  <reichelt@netcologne.de>
++
++	PR c++/30852
++	* semantics.c (finish_offsetof): Handle COMPOUND_EXPR.
++
++2007-03-05  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c++/30895
++	* tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
++
++2007-02-19  Mark Mitchell  <mark@codesourcery.com>
++
++	* call.c (build_new_method_call): Ensure that explicit calls of
++	destructors have type "void".
++
++2007-02-19  Mark Mitchell  <mark@codesourcery.com>
++
++	* decl2.c (import_export_decl): Reverse sense of 
++	DECL_VISIBILITY_SPECIFIED test for target-specific visibility
++	rules.
++
++	Backport of:
++	2006-07-20  Jason Merrill  <jason@redhat.com>
++	* decl2.c (determine_visibility_from_class): Reverse sense of 
++	DECL_VISIBILITY_SPECIFIED test for target-specific visibility
++	rules.
++
++2007-02-14  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/30536
++	* decl.c (grokdeclarator): If __thread is used together with
++	a storage class other than extern and static, clear thread_p
++	after issuing diagnostics and fall through to checking the
++	storage class.
++
+ 2007-02-13  Release Manager
+ 
+ 	* GCC 4.1.2 released.
+Index: gcc/cp/cxx-pretty-print.c
+===================================================================
+--- gcc/cp/cxx-pretty-print.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/cxx-pretty-print.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -204,6 +204,10 @@
+       pp_cxx_unqualified_id (pp, TEMPLATE_PARM_DECL (t));
+       break;
+ 
++    case UNBOUND_CLASS_TEMPLATE:
++      pp_cxx_unqualified_id (pp, TYPE_NAME (t));
++      break;
++
+     default:
+       pp_unsupported_tree (pp, t);
+       break;
+Index: gcc/cp/pt.c
+===================================================================
+--- gcc/cp/pt.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/pt.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -6164,8 +6164,14 @@
+ 	     up.  */
+ 	  context = TYPE_CONTEXT (t);
+ 	  if (context)
+-	    context = tsubst_aggr_type (context, args, complain,
+-					in_decl, /*entering_scope=*/1);
++	    {
++	      context = tsubst_aggr_type (context, args, complain,
++					  in_decl, /*entering_scope=*/1);
++	      /* If context is a nested class inside a class template,
++	         it may still need to be instantiated (c++/33959).  */
++	      if (TYPE_P (context))
++		complete_type (context);
++	    }
+ 
+ 	  /* Then, figure out what arguments are appropriate for the
+ 	     type we are trying to find.  For example, given:
+@@ -9784,6 +9790,7 @@
+ 	  if (TREE_CODE (fn) != TEMPLATE_DECL)
+ 	    continue;
+ 
++	  ++processing_template_decl;
+ 	  subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
+ 				  expl_subargs, /*check_ret=*/false);
+ 	  if (subargs)
+@@ -9792,6 +9799,7 @@
+ 	      good += try_one_overload (tparms, targs, tempargs, parm,
+ 					elem, strict, sub_strict, addr_p);
+ 	    }
++	  --processing_template_decl;
+ 	}
+     }
+   else
+@@ -12556,7 +12564,7 @@
+       /* A non-type template parm.  */
+       if (DECL_TEMPLATE_PARM_P (expression))
+ 	return true;
+-      return false;
++      return value_dependent_expression_p (DECL_INITIAL (expression));
+ 
+     case VAR_DECL:
+        /* A constant with integral or enumeration type and is initialized
+@@ -12626,6 +12634,10 @@
+ 	 such calls are value-dependent.  */
+       return true;
+ 
++    case MODOP_EXPR:
++      return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
++	      || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
++
+     default:
+       /* A constant expression is value-dependent if any subexpression is
+ 	 value-dependent.  */
+Index: gcc/cp/semantics.c
+===================================================================
+--- gcc/cp/semantics.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/semantics.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -2892,7 +2892,8 @@
+       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
+       || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
+     {
+-      if (TREE_CODE (expr) == COMPONENT_REF)
++      if (TREE_CODE (expr) == COMPONENT_REF
++	  || TREE_CODE (expr) == COMPOUND_EXPR)
+ 	expr = TREE_OPERAND (expr, 1);
+       error ("cannot apply %<offsetof%> to member function %qD", expr);
+       return error_mark_node;
+Index: gcc/cp/decl2.c
+===================================================================
+--- gcc/cp/decl2.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/decl2.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1905,8 +1905,8 @@
+       comdat_linkage (decl);
+     }
+ 
+-  /* Give the target a chance to override the visibility associated
+-     with DECL.  */
++  /* Give the target a chance to override the visibility of class
++     data, like virtual tables.  */
+   if (TREE_CODE (decl) == VAR_DECL
+       && (DECL_TINFO_P (decl)
+ 	  || (DECL_VTABLE_OR_VTT_P (decl)
+@@ -1914,9 +1914,16 @@
+ 		 they cannot be referred to from other object files;
+ 		 their name is not standardized by the ABI.  */
+ 	      && !DECL_CONSTRUCTION_VTABLE_P (decl)))
+-      && TREE_PUBLIC (decl)
++      /* Visibility only applies to objects with external linkage.  */
++      && TREE_PUBLIC (decl) 
++      /* Visibility is specified by the definition of the object, not
++	 its declaration.  */
+       && !DECL_REALLY_EXTERN (decl)
+-      && DECL_VISIBILITY_SPECIFIED (decl)
++      /* Respect any explicit specification of visibility for the
++	 class data itself.  */
++      && !DECL_VISIBILITY_SPECIFIED (decl)
++      /* If the visibility of the class has been explicitly specified,
++	 that visibility applies to class data as well.  */
+       && (!class_type || !CLASSTYPE_VISIBILITY_SPECIFIED (class_type)))
+     targetm.cxx.determine_class_data_visibility (decl);
+ 
+Index: gcc/cp/parser.c
+===================================================================
+--- gcc/cp/parser.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cp/parser.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -4700,6 +4700,7 @@
+   tree expression_list = NULL_TREE;
+   bool fold_expr_p = is_attribute_list;
+   tree identifier = NULL_TREE;
++  bool saved_greater_than_is_operator_p;
+ 
+   /* Assume all the expressions will be constant.  */
+   if (non_constant_p)
+@@ -4708,6 +4709,12 @@
+   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
+     return error_mark_node;
+ 
++  /* Within a parenthesized expression, a `>' token is always
++     the greater-than operator.  */
++  saved_greater_than_is_operator_p
++    = parser->greater_than_is_operator_p;
++  parser->greater_than_is_operator_p = true;
++
+   /* Consume expressions until there are no more.  */
+   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
+     while (true)
+@@ -4781,9 +4788,16 @@
+       if (ending < 0)
+ 	goto get_comma;
+       if (!ending)
+-	return error_mark_node;
++	{
++	  parser->greater_than_is_operator_p
++	    = saved_greater_than_is_operator_p;
++	  return error_mark_node;
++	}
+     }
+ 
++  parser->greater_than_is_operator_p
++    = saved_greater_than_is_operator_p;
++
+   /* We built up the list in reverse order so we must reverse it now.  */
+   expression_list = nreverse (expression_list);
+   if (identifier)
+Index: gcc/haifa-sched.c
+===================================================================
+--- gcc/haifa-sched.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/haifa-sched.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -142,6 +142,7 @@
+ #include "recog.h"
+ #include "sched-int.h"
+ #include "target.h"
++#include "params.h"
+ 
+ #ifdef INSN_SCHEDULING
+ 
+@@ -1379,9 +1380,22 @@
+ 	fprintf (sched_dump, ";;\t\tQ-->Ready: insn %s: ",
+ 		 (*current_sched_info->print_insn) (insn, 0));
+ 
+-      ready_add (ready, insn);
+-      if (sched_verbose >= 2)
+-	fprintf (sched_dump, "moving to ready without stalls\n");
++      /* If the ready list is full, delay the insn for 1 cycle.
++	 See the comment in schedule_block for the rationale.  */
++      if (!reload_completed
++	  && ready->n_ready > MAX_SCHED_READY_INSNS
++	  && !SCHED_GROUP_P (insn))
++	{
++	  if (sched_verbose >= 2)
++	    fprintf (sched_dump, "requeued because ready full\n");
++	  queue_insn (insn, 1);
++	}
++      else
++	{
++	  ready_add (ready, insn);
++	  if (sched_verbose >= 2)
++	    fprintf (sched_dump, "moving to ready without stalls\n");
++        }
+     }
+   insn_queue[q_ptr] = 0;
+ 
+@@ -1903,6 +1917,31 @@
+   memset (insn_queue, 0, (max_insn_queue_index + 1) * sizeof (rtx));
+   last_clock_var = -1;
+ 
++  /* The algorithm is O(n^2) in the number of ready insns at any given
++     time in the worst case.  Before reload we are more likely to have
++     big lists so truncate them to a reasonable size.  */
++  if (!reload_completed && ready.n_ready > MAX_SCHED_READY_INSNS)
++    {
++      ready_sort (&ready);
++
++      /* Find first free-standing insn past MAX_SCHED_READY_INSNS.  */
++      for (i = MAX_SCHED_READY_INSNS; i < ready.n_ready; i++)
++	if (!SCHED_GROUP_P (ready_element (&ready, i)))
++	  break;
++
++      if (sched_verbose >= 2)
++	{
++	  fprintf (sched_dump,
++		   ";;\t\tReady list on entry: %d insns\n", ready.n_ready);
++	  fprintf (sched_dump,
++		   ";;\t\t before reload => truncated to %d insns\n", i);
++	}
++
++      /* Delay all insns past it for 1 cycle.  */
++      while (i < ready.n_ready)
++	queue_insn (ready_remove (&ready, i), 1);
++    }
++
+   /* Start just before the beginning of time.  */
+   clock_var = -1;
+   advance = 0;
+Index: gcc/ipa-pure-const.c
+===================================================================
+--- gcc/ipa-pure-const.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ipa-pure-const.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -639,6 +639,7 @@
+   for (i = 0; i < order_pos; i++ )
+     {
+       enum pure_const_state_e pure_const_state = IPA_CONST;
++      int count = 0;
+       node = order[i];
+ 
+       /* Find the worst state for any node in the cycle.  */
+@@ -655,11 +656,40 @@
+ 	  if (!w_l->state_set_in_source)
+ 	    {
+ 	      struct cgraph_edge *e;
++	      count++;
++
++	      /* FIXME!!!  Because of pr33826, we cannot have either
++		 immediate or transitive recursive functions marked as
++		 pure or const because dce can delete a function that
++		 is in reality an infinite loop.  A better solution
++		 than just outlawing them is to add another bit the
++		 functions to distinguish recursive from non recursive
++		 pure and const function.  This would allow the
++		 recursive ones to be cse'd but not dce'd.  In this
++		 same vein, we could allow functions with loops to
++		 also be cse'd but not dce'd.
++
++		 Unfortunately we are late in stage 3, and the fix
++		 described above is is not appropriate.  */
++	      if (count > 1)
++		{
++		  pure_const_state = IPA_NEITHER;
++		  break;
++		}
++		    
+ 	      for (e = w->callees; e; e = e->next_callee) 
+ 		{
+ 		  struct cgraph_node *y = e->callee;
+ 		  /* Only look at the master nodes and skip external nodes.  */
+ 		  y = cgraph_master_clone (y);
++
++		  /* Check for immediate recursive functions.  See the
++		     FIXME above.  */
++		  if (w == y)
++		    {
++		      pure_const_state = IPA_NEITHER;
++		      break;
++		    }
+ 		  if (y)
+ 		    {
+ 		      funct_state y_l = get_function_state (y);
+Index: gcc/cse.c
+===================================================================
+--- gcc/cse.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/cse.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -583,7 +583,8 @@
+ static int mention_regs (rtx);
+ static int insert_regs (rtx, struct table_elt *, int);
+ static void remove_from_table (struct table_elt *, unsigned);
+-static struct table_elt *lookup	(rtx, unsigned, enum machine_mode);
++static void remove_pseudo_from_table (rtx, unsigned);
++static struct table_elt *lookup (rtx, unsigned, enum machine_mode);
+ static struct table_elt *lookup_for_remove (rtx, unsigned, enum machine_mode);
+ static rtx lookup_as_function (rtx, enum rtx_code);
+ static struct table_elt *insert (rtx, struct table_elt *, unsigned,
+@@ -1382,6 +1383,19 @@
+   table_size--;
+ }
+ 
++/* Same as above, but X is a pseudo-register.  */
++
++static void
++remove_pseudo_from_table (rtx x, unsigned int hash)
++{
++  struct table_elt *elt;
++
++  /* Because a pseudo-register can be referenced in more than one
++     mode, we might have to remove more than one table entry.  */
++  while ((elt = lookup_for_remove (x, hash, VOIDmode)))
++    remove_from_table (elt, hash);
++}
++
+ /* Look up X in the hash table and return its table element,
+    or 0 if X is not in the table.
+ 
+@@ -1708,7 +1722,10 @@
+ 	      delete_reg_equiv (REGNO (exp));
+ 	    }
+ 
+-	  remove_from_table (elt, hash);
++	  if (REG_P (exp) && REGNO (exp) >= FIRST_PSEUDO_REGISTER)
++	    remove_pseudo_from_table (exp, hash);
++	  else
++	    remove_from_table (elt, hash);
+ 
+ 	  if (insert_regs (exp, class1, 0) || need_rehash)
+ 	    {
+@@ -1804,14 +1821,7 @@
+ 	SUBREG_TICKED (regno) = -1;
+ 
+ 	if (regno >= FIRST_PSEUDO_REGISTER)
+-	  {
+-	    /* Because a register can be referenced in more than one mode,
+-	       we might have to remove more than one table entry.  */
+-	    struct table_elt *elt;
+-
+-	    while ((elt = lookup_for_remove (x, hash, GET_MODE (x))))
+-	      remove_from_table (elt, hash);
+-	  }
++	  remove_pseudo_from_table (x, hash);
+ 	else
+ 	  {
+ 	    HOST_WIDE_INT in_table
+@@ -6016,8 +6026,11 @@
+ 		{
+ 		  if (insert_regs (x, NULL, 0))
+ 		    {
++		      rtx dest = SET_DEST (sets[i].rtl);
++
+ 		      rehash_using_reg (x);
+ 		      hash = HASH (x, mode);
++		      sets[i].dest_hash = HASH (dest, GET_MODE (dest));
+ 		    }
+ 		  elt = insert (x, NULL, hash, mode);
+ 		}
+Index: gcc/tree-nrv.c
+===================================================================
+--- gcc/tree-nrv.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-nrv.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -163,6 +163,14 @@
+ 						     result_type))
+ 		return;
+ 	    }
++	  else if (TREE_CODE (stmt) == MODIFY_EXPR)
++	    {
++	      tree addr = get_base_address (TREE_OPERAND (stmt, 0));
++	       /* If there's any MODIFY of component of RESULT, 
++		  then bail out.  */
++	      if (addr && addr == result)
++		return;
++	    }
+ 	}
+     }
+ 
+Index: gcc/ipa-utils.c
+===================================================================
+--- gcc/ipa-utils.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ipa-utils.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -78,7 +78,7 @@
+    has been customized for cgraph_nodes.  The env parameter is because
+    it is recursive and there are no nested functions here.  This
+    function should only be called from itself or
+-   cgraph_reduced_inorder.  ENV is a stack env and would be
++   ipa_utils_reduced_inorder.  ENV is a stack env and would be
+    unnecessary if C had nested functions.  V is the node to start
+    searching from.  */
+ 
+Index: gcc/tree-ssa-alias.c
+===================================================================
+--- gcc/tree-ssa-alias.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-ssa-alias.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -46,6 +46,7 @@
+ #include "ipa-type-escape.h"
+ #include "vec.h"
+ #include "bitmap.h"
++#include "pointer-set.h"
+ 
+ /* Obstack used to hold grouping bitmaps and other temporary bitmaps used by
+    aliasing  */
+@@ -2231,6 +2232,38 @@
+ }
+ 
+ 
++/* Given two tags return TRUE if their may-alias sets intersect.  */
++
++bool 
++may_aliases_intersect (tree tag1, tree tag2)
++{ 
++  struct pointer_set_t *set1 = pointer_set_create ();
++  unsigned i;
++  varray_type may_aliases1 = var_ann (tag1)->may_aliases; 
++  varray_type may_aliases2 = var_ann (tag2)->may_aliases;
++
++  if (may_aliases1 == NULL || may_aliases2 == NULL)
++    return false;
++ 
++  /* Insert all the symbols from the first may-alias set into the
++     pointer-set.  */
++  for (i = 0; i < VARRAY_ACTIVE_SIZE (may_aliases1); i++)
++    pointer_set_insert (set1, VARRAY_TREE (may_aliases1, i));
++
++  /* Go through the second may-alias set and check if it contains symbols that
++     are common with the first set.  */
++  for (i = 0; i < VARRAY_ACTIVE_SIZE (may_aliases2); i++)
++    if (pointer_set_contains (set1, VARRAY_TREE (may_aliases2, i)))
++      {
++       pointer_set_destroy (set1); 
++       return true;
++      }
++  
++  pointer_set_destroy (set1);
++  return false;
++}
++
++
+ /* Add VAR to the list of may-aliases of PTR's type tag.  If PTR
+    doesn't already have a type tag, create one.  */
+ 
+Index: gcc/ifcvt.c
+===================================================================
+--- gcc/ifcvt.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ifcvt.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -2116,6 +2116,46 @@
+   return false;
+ }
+ 
++/* Return whether we can use store speculation for MEM.  TOP_BB is the
++   basic block above the conditional block where we are considering
++   doing the speculative store.  We look for whether MEM is set
++   unconditionally later in the function.  */
++
++static bool
++noce_can_store_speculate_p (basic_block top_bb, rtx mem)
++{
++  basic_block dominator;
++
++  for (dominator = get_immediate_dominator (CDI_POST_DOMINATORS, top_bb);
++       dominator != NULL && dominator != EXIT_BLOCK_PTR;
++       dominator = get_immediate_dominator (CDI_POST_DOMINATORS, dominator))
++    {
++      rtx insn;
++
++      FOR_BB_INSNS (dominator, insn)
++	{
++	  /* If we see something that might be a memory barrier, we
++	     have to stop looking.  Even if the MEM is set later in
++	     the function, we still don't want to set it
++	     unconditionally before the barrier.  */
++	  if (INSN_P (insn)
++	      && (volatile_insn_p (PATTERN (insn))
++		  || (CALL_P (insn)
++		      && (!CONST_OR_PURE_CALL_P (insn)
++			  || pure_call_p (insn)))))
++	    return false;
++
++	  if (memory_modified_in_insn_p (mem, insn))
++	    return true;
++	  if (modified_in_p (XEXP (mem, 0), insn))
++	    return false;
++
++	}
++    }
++
++  return false;
++}
++
+ /* Given a simple IF-THEN or IF-THEN-ELSE block, attempt to convert it
+    without using conditional execution.  Return TRUE if we were
+    successful at converting the block.  */
+@@ -2299,18 +2339,32 @@
+       goto success;
+     }
+ 
+-  /* Disallow the "if (...) x = a;" form (with an implicit "else x = x;")
+-     for optimizations if writing to x may trap or fault, i.e. it's a memory
+-     other than a static var or a stack slot, is misaligned on strict
+-     aligned machines or is read-only.
+-     If x is a read-only memory, then the program is valid only if we
+-     avoid the store into it.  If there are stores on both the THEN and
+-     ELSE arms, then we can go ahead with the conversion; either the
+-     program is broken, or the condition is always false such that the
+-     other memory is selected.  */
+-  if (!set_b && MEM_P (orig_x) && noce_mem_write_may_trap_or_fault_p (orig_x))
+-    return FALSE;
++  if (!set_b && MEM_P (orig_x))
++    {
++      /* Disallow the "if (...) x = a;" form (implicit "else x = x;")
++	 for optimizations if writing to x may trap or fault,
++	 i.e. it's a memory other than a static var or a stack slot,
++	 is misaligned on strict aligned machines or is read-only.  If
++	 x is a read-only memory, then the program is valid only if we
++	 avoid the store into it.  If there are stores on both the
++	 THEN and ELSE arms, then we can go ahead with the conversion;
++	 either the program is broken, or the condition is always
++	 false such that the other memory is selected.  */
++      if (noce_mem_write_may_trap_or_fault_p (orig_x))
++	return FALSE;
+ 
++      /* Avoid store speculation: given "if (...) x = a" where x is a
++	 MEM, we only want to do the store if x is always set
++	 somewhere in the function.  This avoids cases like
++	   if (pthread_mutex_trylock(mutex))
++	     ++global_variable;
++	 where we only want global_variable to be changed if the mutex
++	 is held.  FIXME: This should ideally be expressed directly in
++	 RTL somehow.  */
++      if (!noce_can_store_speculate_p (test_bb, orig_x))
++	return FALSE;
++    }
++
+   if (noce_try_move (&if_info))
+     goto success;
+   if (noce_try_store_flag (&if_info))
+@@ -2584,7 +2638,8 @@
+       && find_cond_trap (test_bb, then_edge, else_edge))
+     goto success;
+ 
+-  if (dom_computed[CDI_POST_DOMINATORS] >= DOM_NO_FAST_QUERY
++  if (life_data_ok
++      && dom_computed[CDI_POST_DOMINATORS] >= DOM_NO_FAST_QUERY
+       && (! HAVE_conditional_execution || reload_completed))
+     {
+       if (find_if_case_1 (test_bb, then_edge, else_edge))
+@@ -3592,9 +3647,8 @@
+       free_dominance_info (CDI_DOMINATORS);
+     }
+ 
+-  /* Compute postdominators if we think we'll use them.  */
+-  if (HAVE_conditional_execution || life_data_ok)
+-    calculate_dominance_info (CDI_POST_DOMINATORS);
++  /* Compute postdominators.  */
++  calculate_dominance_info (CDI_POST_DOMINATORS);
+ 
+   if (life_data_ok)
+     clear_bb_flags ();
+Index: gcc/dwarf2out.c
+===================================================================
+--- gcc/dwarf2out.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/dwarf2out.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -8407,7 +8407,10 @@
+ 	      mod_type_die = lookup_type_die (qualified_type);
+ 	    }
+ 	  else if (is_const_type < TYPE_READONLY (dtype)
+-		   || is_volatile_type < TYPE_VOLATILE (dtype))
++		   || is_volatile_type < TYPE_VOLATILE (dtype)
++		   || (is_const_type <= TYPE_READONLY (dtype)
++		       && is_volatile_type <= TYPE_VOLATILE (dtype)
++		       && DECL_ORIGINAL_TYPE (type_name) != type))
+ 	    /* cv-unqualified version of named type.  Just use the unnamed
+ 	       type to which it refers.  */
+ 	    mod_type_die
+@@ -12890,7 +12893,8 @@
+   return decl_die;
+ }
+ 
+-/* Returns the DIE for TYPE.  A DIE is always returned.  */
++/* Returns the DIE for TYPE, that must not be a base type.  A DIE is
++   always returned.  */
+ 
+ static dw_die_ref
+ force_type_die (tree type)
+@@ -13241,7 +13245,12 @@
+ 
+   /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE.  */
+   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
+-    at_import_die = force_type_die (TREE_TYPE (decl));
++    {
++      if (is_base_type (TREE_TYPE (decl)))
++	at_import_die = base_type_die (TREE_TYPE (decl));
++      else
++	at_import_die = force_type_die (TREE_TYPE (decl));
++    }
+   else
+     {
+       at_import_die = lookup_decl_die (decl);
+@@ -14142,7 +14151,9 @@
+ 	      else if (TYPE_P (node->created_for))
+ 		context = TYPE_CONTEXT (node->created_for);
+ 
+-	      gcc_assert (context && TREE_CODE (context) == FUNCTION_DECL);
++	      gcc_assert (context
++			  && (TREE_CODE (context) == FUNCTION_DECL
++			      || TREE_CODE (context) == NAMESPACE_DECL));
+ 
+ 	      origin = lookup_decl_die (context);
+ 	      if (origin)
+Index: gcc/expr.c
+===================================================================
+--- gcc/expr.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/expr.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -4614,14 +4614,7 @@
+ 
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+-      {
+-	/* Ho hum.  How in the world do we guess here?  Clearly it isn't
+-	   right to count the fields.  Guess based on the number of words.  */
+-        HOST_WIDE_INT n = int_size_in_bytes (type);
+-	if (n < 0)
+-	  return -1;
+-	return n / UNITS_PER_WORD;
+-      }
++      return -1;
+ 
+     case COMPLEX_TYPE:
+       return 2;
+@@ -8569,8 +8562,15 @@
+   HOST_WIDE_INT prec = TYPE_PRECISION (type);
+   if (target && GET_MODE (target) != GET_MODE (exp))
+     target = 0;
+-  if (TYPE_UNSIGNED (type))
++  /* For constant values, reduce using build_int_cst_type. */
++  if (GET_CODE (exp) == CONST_INT)
+     {
++      HOST_WIDE_INT value = INTVAL (exp);
++      tree t = build_int_cst_type (type, value);
++      return expand_expr (t, target, VOIDmode, EXPAND_NORMAL);
++    }
++  else if (TYPE_UNSIGNED (type))
++    {
+       rtx mask;
+       if (prec < HOST_BITS_PER_WIDE_INT)
+ 	mask = immed_double_const (((unsigned HOST_WIDE_INT) 1 << prec) - 1, 0,
+Index: gcc/ada/ChangeLog
+===================================================================
+--- gcc/ada/ChangeLog	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ada/ChangeLog	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,3 +1,32 @@
++2008-02-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
++
++	PR documentation/15479
++	* gnat_ugn.texi: In non-code, avoid space before colon.
++	(Regular Expressions in gnatfind and gnatxref): Fix indentation.
++	(Examples of gnatxref Usage): Use @command{vi} instead of
++	@file{vi}.
++	(Character Set Control): Do not use @code for UTF-8.
++	(Validity Checking): Fix typo "NaNs" instead of "NaN's".  Do not
++	use @code for IEEE.
++	* gnat_rm.texi (Aggregates with static bounds): Fix typo in code
++	sample.
++	* gnat_rm.texi, gnat_ugn.texi: Fix typos.  Bump copyright years.
++
++2007-02-20  Eric Botcazou  <ebotcazou@adacore.com>
++
++	PR ada/30684
++	Backport from 4.2 branch:
++	2006-11-17  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* ada-tree.h (DECL_READONLY_ONCE_ELAB): New macro.
++	* decl.c (elaborate_expression_1): Test the DECL_READONLY_ONCE_ELAB
++	flag in addition to TREE_READONLY to assert the constantness of
++	variables for elaboration purposes.
++	* trans.c (add_decl_expr): Do not dynamically elaborate padded objects
++	if the initializer takes into account the padding.
++	Set DECL_READONLY_ONCE_ELAB flag on variables originally TREE_READONLY
++	but whose elaboration cannot be performed statically.
++
+ 2007-02-13  Release Manager
+ 
+ 	* GCC 4.1.2 released.
+@@ -24,8 +53,8 @@
+ 
+ 2006-06-06  Laurent GUERBY  <laurent@guerby.net>
+ 
+-        PR ada/27769
+-        mlib-utl.adb: Use Program_Name.
++	PR ada/27769
++	* mlib-utl.adb: Use Program_Name.
+ 
+ 2006-05-24  Release Manager
+ 
+@@ -48,20 +77,19 @@
+ 
+ 	Backport:
+ 	2005-12-05  Paolo Bonzini  <bonzini@gnu.org>
+-        * Makefile.in (gnatlib): Fix regex, using \. instead of . when a
++	* Makefile.in (gnatlib): Fix regex, using \. instead of . when a
+ 	period is meant.
+-	
++
+ 2006-02-17  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	Backport from mainline:
+ 	2006-02-13  Geert Bosch  <bosch@adacore.com>
+-	            Gary Dismukes  <dismukes@adacore.com>
++		    Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* a-tifiio.adb (Put_Digits): Test Last against To'First - 1 instead of
+ 	0, since the lower bound of the actual string may be greater than one.
+ 
+ 	PR ada/20753
+-
+ 	(Put): Fix condition to raise Layout_Error when invalid
+ 	layout is requested.
+ 
+@@ -123,8 +151,8 @@
+ 
+ 2005-11-18  Laurent GUERBY  <laurent@guerby.net>
+ 
+-        PR ada/24857
+-        * Makefile.in: Use s-auxdec-empty for RTEMS.
++	PR ada/24857
++	* Makefile.in: Use s-auxdec-empty for RTEMS.
+ 
+ 2005-11-17  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+@@ -138,15 +166,15 @@
+ 
+ 	PR ada/24857
+ 	* s-auxdec-empty.ads, s-auxdec-empty.adb: New files.
+-	
++
+ 2005-11-16  Richard Guenther  <rguenther@suse.de>
+ 
+ 	* Makefile.in: Add EH_MECHANISM=-gcc to s390(x) linux.
+ 
+ 2005-11-16  Joel Sherrill <joel.sherrill@oarcorp.com>
+ 
+-        PR ada/24855
+-        * raise-gcc.c: Add missing stdarg.h include.
++	PR ada/24855
++	* raise-gcc.c: Add missing stdarg.h include.
+  
+ 2005-11-16  Richard Guenther  <rguenther@suse.de>
+ 
+@@ -214,7 +242,6 @@
+ 	    Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	PR ada/18434
+-
+ 	* types.ads: Include All_Checks in Suppress_Array
+ 
+ 	* checks.adb (Check_Needed): Remove kludge for a/=b rewritten as
+@@ -337,7 +364,7 @@
+ 	(Save_Occurrence_And_Private): Move GCC EH related code to
+ 	a-exexpr-gcc.adb
+ 	(Raise_Current_Excep): Add new variable Id with pragma
+-        volatile, to ensure that the variable lives on stack.
++	volatile, to ensure that the variable lives on stack.
+ 
+ 	* a-exexpr-gcc.adb, raise-gcc.c: New file.
+ 
+@@ -1142,7 +1169,6 @@
+ 	    Javier Miranda  <miranda@adacore.com>
+ 
+ 	PR ada/15604
+-
+ 	* sem_type.adb (Covers): In an inlined body, a composite type matches
+ 	a private type whose full view is a composite type.
+ 	(Interface_Present_In_Ancestor): Protect the frontend against
+@@ -2449,9 +2475,9 @@
+ 	subprogram Complete_Subprograms_Derivation already does the
+ 	job associated with the second call.
+ 
+-        * exp_strm.adb (Build_Elementary_Input_Call): Add an explicit
+-        conversion to the full view when generating an operation for a
+-        discriminant whose type may currently be private.
++	* exp_strm.adb (Build_Elementary_Input_Call): Add an explicit
++	conversion to the full view when generating an operation for a
++	discriminant whose type may currently be private.
+ 
+ 2005-09-01  Ed Schonberg  <schonberg@adacore.com>
+ 	    Javier Miranda  <miranda@adacore.com>
+@@ -2836,7 +2862,6 @@
+ 2005-07-07  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	PR ada/22301
+-
+ 	* raise.c: Only include unwind.h if IN_RTS, and provide dummy type
+ 	definitions for the Unwind wrappers in the compiler case.
+ 
+@@ -2948,10 +2973,10 @@
+ 	N_Object_Declaration, only perform the checks if the Object_Definition
+ 	is not an Access_Definition.
+ 
+-        * sem_ch3.adb (Access_Subprogram_Declaration): Add test for the case
+-        where the parent of an the access definition is an N_Object_Declaration
+-        when determining the Associated_Node_For_Itype and scope of an
+-        anonymous access-to-subprogram type.
++	* sem_ch3.adb (Access_Subprogram_Declaration): Add test for the case
++	where the parent of an the access definition is an N_Object_Declaration
++	when determining the Associated_Node_For_Itype and scope of an
++	anonymous access-to-subprogram type.
+ 
+ 	* exp_ch6.adb (Expand_N_Subprogram_Declaration): Set the
+ 	Corresponding_Spec on the body created for a null procedure. Add ???
+@@ -3134,7 +3159,6 @@
+ 2005-07-04  Robert Dewar  <dewar@adacore.com>
+ 
+ 	PR ada/22039
+-
+ 	* s-sopco3.ads, s-sopco4.ads, s-sopco5.ads: Minor documentation fix
+ 
+ 2005-07-04  Matthew Gingell  <gingell@adacore.com>
+@@ -3186,19 +3210,19 @@
+ 
+ 2005-07-04  Sergey Rybin  <rybin@adacore.com>
+ 
+-        * gnat_ugn.texi: Add description of --eol gnatpp option
++	* gnat_ugn.texi: Add description of --eol gnatpp option
+ 
+ 2005-07-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 	    Thomas Quinot  <quinot@adacore.com>
+ 
+-        * gnat_rm.texi: Add a note that pragma Unreferenced is not appropriate
++	* gnat_rm.texi: Add a note that pragma Unreferenced is not appropriate
+ 	if the user wants all calls of a subprogram to be flagged,
+ 	independently of whether they are made from within the same unit or
+ 	another unit.
+-        Mention restriction for pragma Linker_Alias on some platforms.
+-        Document pragma Linker_Constructor and Linker_Destructor.
+-        Rewrite documentation of Weak_External, Linker_Section and
+-        Linker_Alias pragmas.
++	Mention restriction for pragma Linker_Alias on some platforms.
++	Document pragma Linker_Constructor and Linker_Destructor.
++	Rewrite documentation of Weak_External, Linker_Section and
++	Linker_Alias pragmas.
+ 
+ 2005-07-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+@@ -4165,8 +4189,8 @@
+ 	s-valwch.ads, s-widwch.adb, s-widwch.ads, s-wwdcha.adb, s-wwdwch.adb:
+ 	Rewrite to correspond to new wide character names in AI-395
+ 
+-        * par-ch12.adb (P_Formal_Subprogram_Declaration): Recognize null
+-        default procedures.
++	* par-ch12.adb (P_Formal_Subprogram_Declaration): Recognize null
++	default procedures.
+ 
+ 2005-06-14  Ed Schonberg  <schonberg@adacore.com>
+ 	    Robert Dewar  <dewar@adacore.com>
+@@ -4255,7 +4279,6 @@
+ 2005-06-14  Thomas Quinot  <quinot@adacore.com>
+ 
+ 	PR ada/6717
+-
+ 	* g-socket.ads, g-socket.adb (Inet_Addr): Special case the all-ones
+ 	broadcast address.
+ 	(Create_Selector): Bind listening socket used to create the signalling
+@@ -4327,15 +4350,15 @@
+ 	For objects and parameters of a generic private type, retain the '*'
+ 	indicator to distinguish such an entity from its type.
+ 
+-        * ali.ads (Xref_Entity_Record): New fields Iref_File_Num and Iref_Line,
+-        to store information about instantiated entities.
++	* ali.ads (Xref_Entity_Record): New fields Iref_File_Num and Iref_Line,
++	to store information about instantiated entities.
+ 
+-        * ali.adb (Scan_ALI): Add support for parsing the reference to the
+-        generic parent
++	* ali.adb (Scan_ALI): Add support for parsing the reference to the
++	generic parent
+ 
+-        * xref_lib.adb (Skip_To_Matching_Closing_Bracket): New subprogram
+-        (Parse_Identifier_Info, Parse_Token): Add support for the generic parent
+-        information.
++	* xref_lib.adb (Skip_To_Matching_Closing_Bracket): New subprogram
++	(Parse_Identifier_Info, Parse_Token): Add support for the generic parent
++	information.
+ 
+ 2005-06-10  Doug Rupp  <rupp@adacore.com>
+ 	    Arnaud Charlet  <charlet@adacore.com>
+@@ -4398,7 +4421,6 @@
+ 2005-06-14  Robert Dewar  <dewar@adacore.com>
+ 
+ 	PR ada/15613
+-
+ 	* par-ch2.adb (Scan_Pragma_Argument): New procedure
+ 	(P_Pragma): Implement RM 2.8(4) check for no pos args after named args
+ 
+@@ -4444,11 +4466,11 @@
+ 	characters are now considered graphic characters and hence yield false
+ 	in this call.
+ 
+-        * nmake.adt: Modify header so that xnmake does not generate output
+-        files with multiple blank lines.
++	* nmake.adt: Modify header so that xnmake does not generate output
++	files with multiple blank lines.
+ 
+-        * treeprs.adt: Remove a blank line so that output from xtreeprs does
+-        not have an extra blank line
++	* treeprs.adt: Remove a blank line so that output from xtreeprs does
++	not have an extra blank line
+ 
+ 2005-06-14  Gary Dismukes  <dismukes@adacore.com>
+ 
+@@ -4480,7 +4502,6 @@
+ 	    Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	PR ada/10671
+-
+ 	* sem_prag.adb: Implement pragma Persistent_BSS
+ 	Remove obsolete pragma Persistent_Data, Persistent_Object
+ 	Set Ada_Version_Explicit, for implementation of AI-362
+@@ -4545,8 +4566,8 @@
+ 	* nmake.adt: Modify header so that xnmake does not generate output
+ 	files with multiple blank lines.
+ 
+-        * treeprs.adt: Remove a blank line so that output from xtreeprs does
+-        not have an extra blank line
++	* treeprs.adt: Remove a blank line so that output from xtreeprs does
++	not have an extra blank line
+ 
+ 2005-06-14  Sergey Rybin  <rybin@adacore.com>
+ 
+@@ -4570,7 +4591,7 @@
+ 	Add UNNECESSARY_BLANK_LINES for -gnatyu
+ 	Add qualifiers /ALL_PROJECTS (-U) for GNAT PRETTY and GNAT METRIC
+ 
+-        * ug_words: Add entry for -gnaty/Y [NO]ADA_2005_COMPATIBILITY
++	* ug_words: Add entry for -gnaty/Y [NO]ADA_2005_COMPATIBILITY
+ 
+ 2005-06-14  Vincent Celier  <celier@adacore.com>
+ 
+@@ -4671,7 +4692,7 @@
+ 	object directories of project files before directories in ADA_*_PATH
+ 	environment variables.
+ 
+-        * g-trasym.ads: Document that IRIX is supported
++	* g-trasym.ads: Document that IRIX is supported
+ 
+ 2005-06-10  Arnaud Charlet  <charlet@adacore.com>
+ 
+@@ -4766,9 +4787,9 @@
+ 
+ 2005-04-16  Laurent GUERBY  <laurent@guerby.net>
+ 
+-        PR ada/18847
+-        * a-nudira.adb (Value): Check for valid string.
+-        * a-nuflra.adb (Value): Likewise.
++	PR ada/18847
++	* a-nudira.adb (Value): Check for valid string.
++	* a-nuflra.adb (Value): Likewise.
+ 
+ 2005-04-11  Richard Sandiford  <rsandifo@redhat.com>
+ 
+@@ -4941,7 +4962,6 @@
+ 	Generic_Dispatching_Constructor.
+ 
+ 	PR ada/20300
+-
+ 	* sem_ch8.adb (Find_Direct_Name): Go to root type for check of
+ 	character type cases.
+ 	(Analyze_Subprogram_Renaming): Add special handling for
+@@ -5241,13 +5261,12 @@
+ 
+ 	* Makefile.in: (ia64-hp-*vms*): Use s-crtl-vms64.ads.
+ 
+-        * 5xcrtl.ads: Renamed to...
+-        * s-crtl-vms64.ads: ...this new file
++	* 5xcrtl.ads: Renamed to...
++	* s-crtl-vms64.ads: ...this new file
+ 
+ 2005-03-17  Robert Dewar  <dewar@adacore.com>
+ 
+ 	PR ada/19519
+-
+ 	* namet.adb (Copy_One_Character): Set proper wide character encoding
+ 	for upper half character if we have upper half encoding.
+ 
+@@ -5623,7 +5642,6 @@
+ 2005-03-15  Robert Dewar  <dewar@adacore.com>
+ 
+ 	PR ada/13470
+-
+ 	* a-stunau.ads, a-stunau.adb:
+ 	Change interface to allow efficient (and correct) implementation
+ 	The previous changes to allow extra space in unbounded strings had
+@@ -5786,7 +5804,6 @@
+ 	PR ada/19408
+ 	PR ada/19140
+ 	PR ada/20255
+-
+ 	* decl.c (gnat_to_gnu_field): Reject aliased components with a
+ 	representation clause that prescribes a size not equal to the rounded
+ 	size of their types.
+@@ -5945,7 +5962,6 @@
+ 
+ 	PR ada/20226
+ 	PR ada/20344
+-
+ 	* init.c (__gnat_initialize): Do not call __gnat_install_SEH_handler()
+ 	when IN_RTS. This is to work around a bootstrap path problem.
+ 
+@@ -6656,8 +6672,7 @@
+ 2005-02-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 	    Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+-	Fix for c330001 - PR ada/19386
+-
++	PR ada/19386
+ 	* decl.c:
+ 	(gnat_to_gnu_field): Do not necessarily invoke make_packable_type
+ 	on the field if Pragma Component_Alignment (Storage_Unit).
+@@ -6757,7 +6772,6 @@
+ 2005-02-09  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	PR ada/16592
+-
+ 	* Makefile.in: Link all gnat tools with -static-libgcc, since
+ 	-shared-libgcc is now used by default on some systems (e.g. linux with
+ 	recent binutils).
+@@ -8547,7 +8561,6 @@
+ 2004-10-04  Bernard Banner  <banner@gnat.com>
+ 
+ 	PR ada/13897
+-
+ 	* Makefile.in: Add section for powerpc linux
+ 	Add variant i-vxwork-x86.ads
+ 
+@@ -8823,7 +8836,6 @@
+ 2004-09-23  Robert Dewar  <dewar@gnat.com>
+ 
+ 	PR ada/17540
+-
+ 	* sem_prag.adb (Process_Import_Or_Interface): Don't set Is_Public here,
+ 	instead do this at freeze time (we won't do it if there is an address
+ 	clause).
+@@ -8868,7 +8880,6 @@
+ 2004-09-20  Robert Dewar  <dewar@gnat.com>
+ 
+ 	PR ada/17540
+-
+ 	* freeze.adb (Check_Address_Clause): Reset Is_Imported and Is_Public
+ 	if an address clause is present, since that means that the Import
+ 	should be ignored.
+@@ -9547,7 +9558,6 @@
+ 2004-08-09  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	PR ada/15408
+-
+ 	* sem_ch7.adb (Install_Private_Declarations): In the body of the
+ 	package or of a child, private entities are both immediately_visible
+ 	and not hidden.
+@@ -11085,7 +11095,6 @@
+ 2004-06-11  Hristian Kirtchev  <kirtchev@gnat.com>
+ 
+ 	PR ada/15587
+-
+ 	* einfo.ads: Minor comment updates for Has_Completion and
+ 	E_Constant list of flags.
+ 
+@@ -11168,7 +11177,6 @@
+ 2004-06-11  Ed Schonberg  <schonberg@gnat.com>
+ 
+ 	PR ada/15403
+-
+ 	* sem_ch12.adb (Save_References): If operator node has been folded to
+ 	enumeration literal, associated_node must be discarded.
+ 
+@@ -11180,7 +11188,6 @@
+ 2004-06-08  Arnaud Charlet  <charlet@act-europe.fr>
+ 
+ 	PR ada/15568
+-
+ 	* Makefile.in: Remove target specific SO_OPT on IRIX
+ 
+ 2004-06-07  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+@@ -12395,7 +12402,6 @@
+ 2004-05-03  Olivier Hainque  <hainque@act-europe.fr>
+ 
+ 	PR ada/15152
+-
+ 	* exp_ch2.adb (Expand_Current_Value): Leave Machine_Code Asm arguments
+ 	alone. Replacing object references by literals is inappropriate in a
+ 	so low level context.
+@@ -14726,7 +14732,8 @@
+ 2004-02-10  Arnaud Charlet  <charlet@act-europe.fr>,
+ 	    Nathanael Nerode  <neroden@gcc.gnu.org>
+ 
+-	PR ada/6637, PR ada/5911
++	PR ada/6637
++	PR ada/5911
+ 	Merge with libada-branch:
+ 	* config-lang.in: Build libada only when ada is built.
+ 
+@@ -15858,7 +15865,6 @@
+ 	 Fixes ACATS regressions.
+ 
+ 	PR ada/13353
+-
+ 	* sem_prag.adb (Back_End_Cannot_Inline): A renaming_as_body can always
+ 	be inlined.
+ 
+@@ -16095,7 +16101,6 @@
+ 2003-12-03  Thomas Quinot  <quinot@act-europe.fr>
+ 
+ 	PR ada/11724
+-
+ 	* adaint.h, adaint.c, g-os_lib.ads:
+ 	Do not assume that the offset argument to lseek(2) is a 32 bit integer,
+ 	on some platforms (including FreeBSD), it is a 64 bit value.
+@@ -17119,7 +17124,6 @@
+ 2003-11-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+ 
+ 	Part of PR ada/12806
+-
+ 	* ada-tree.h (TYPE_DIGITS_VALUE, SET_TYPE_DIGITS_VALUE): Save count as
+ 	tree, not integer.
+ 
+@@ -17433,7 +17437,7 @@
+ 
+ 	* Makefile.generic: Add missing substitution on object_deps handling.
+ 
+-	PR ada/5909:
++	PR ada/5909
+ 	* Make-lang.in (check-ada): Enable ACATS test suite.
+ 
+ 2003-10-27  Robert Dewar  <dewar@gnat.com>
+@@ -17502,13 +17506,13 @@
+ 
+ 2003-10-24  Pascal Obry  <obry@gnat.com>
+ 
++	PR ada/12014
+ 	* adadecode.c (ostrcpy): New function.
+ 	(__gnat_decode): Use ostrcpy of strcpy.
+ 	(has_prefix): Set first parameter a const.
+ 	(has_suffix): Set first parameter a const.
+ 	Update copyright notice. Fix source name in header.
+ 	Removes a trailing space.
+-	PR ada/12014.
+ 
+ 2003-10-24  Jose Ruiz  <ruiz@act-europe.fr>
+ 
+@@ -17583,13 +17587,13 @@
+ 
+ 2003-10-23  Thomas Quinot  <quinot@act-europe.fr>
+ 
+-	PR ada/11978:
++	PR ada/11978
+ 	* exp_ch13.adb (Expand_N_Freeze_Entity): Do not consider inherited
+ 	External_Tag attribute definition clauses.
+ 
+ 2003-10-23  Ed Schonberg  <schonberg@gnat.com>
+ 
+-	PR ada/7613:
++	PR ada/7613
+ 	* exp_dbug.adb (Debug_Renaming_Declaration): For the renaming of a
+ 	child unit, generate a fully qualified name to avoid spurious errors
+ 	when the context contains renamings of different child units with
+@@ -17652,7 +17656,8 @@
+ 
+ 2003-10-22  Arnaud Charlet  <charlet@act-europe.fr>
+ 
+-	* Makefile.in: Disable build of gnatpsta. PR ada/10110.
++	PR ada/10110
++	* Makefile.in: Disable build of gnatpsta.
+ 	* cstreams.c (__gnat_full_name): Minor improvements and clean up
+ 	of previous change.
+ 
+@@ -18187,7 +18192,7 @@
+ 
+ 2003-06-04  Olivier Hainque  <hainque@act-europe.fr>
+ 
+-	PR ada/9953:
++	PR ada/9953
+ 	* 5hsystem.ads: Remove pragma Linker_Option for pthreads library,
+ 	and turn ZCX_By_Default back to False since the underlying support
+ 	is not quite there yet.
+@@ -18640,7 +18645,7 @@
+ 
+ 2003-02-18  Ben Elliston  <bje@redhat.com>
+ 
+-	Part of fix for PR ada/9406
++	Part of PR ada/9406
+ 	* gnat_ug.texi (Binder output file): Grammar fix.
+ 
+ 2003-02-18  Ben Elliston  <bje@redhat.com>
+@@ -18749,9 +18754,10 @@
+ 
+ 2002-12-14   Geert Bosch <bosch@gnat.com>
+ 
++	PR ada/5690
+ 	* sem_ch6.adb (Analyze_Subprogram_Body): Recognize additional
+ 	case of a body created for a Renaming_As_Body, on which
+-	conformance checks are not performed. Fixes PR ada/5690.
++	conformance checks are not performed.
+ 
+ 2002-11-30  Zack Weinberg  <zack@codesourcery.com>
+ 
+@@ -18765,7 +18771,9 @@
+ 	solution to buffer overflow bug on GNU/Linux.
+ 
+ 2002-11-14  Nathanael Nerode  <neroden@gcc.gnu.org>
+-	Closes PR ada/5856 and PR ada/6919 !
++
++	PR ada/5856
++	PR ada/6919
+ 	* bindgen.adb: Remove all references to Public_Version.
+ 	* comperr.adb: Remove all references to Public_Version and
+ 	GNATPRO_Version; correct bug reporting instructions.
+@@ -18774,6 +18782,7 @@
+ 	GNATPRO version.
+ 
+ 2002-11-13  Nathanael Nerode  <neroden@gcc.gnu.org>
++
+ 	PR ada/6919
+ 	* adaint.c (__gnat_tmp_name): Remove buffer overflow bug on
+ 	GNU/Linux.
+@@ -18782,21 +18791,25 @@
+ 	* config-lang.in: Remove diff_excludes.
+ 
+ 2002-11-05  Graham Stott  <graham.stott@btinternet.com>
++
+ 	PR ada/8358
+ 	* trans.c (gnu_pending_elaboration_lists): New GC root.
+ 	(build_unit_elab): Use..
+ 
+ 2002-10-30   Geert Bosch <bosch@gnat.com>
++
+ 	PR ada/6558
+ 	* misc.c : Include optabs.h
+ 
+ 	* Make-lang.in (misc.o): Add dependency on optabs.h
+ 
+ 2002-10-29   Geert Bosch <bosch@gnat.com>
++
+ 	PR ada/6558
+ 	* Make-lang.in (gnatbind): Depend on CONFIG_H
+ 
+ 2002-10-29  Geert bosch  <bosch@gnat.com>
++
+ 	PR ada/6558
+ 	* misc.c: Unrevert misc.c (1.13)
+ 
+@@ -18806,6 +18819,7 @@
+ 	maintainership comments.
+ 
+ 2002-09-25  Nathanael Nerode  <neroden@gcc.gnu.org>
++
+ 	PR ada/5904
+ 	* 5ataprop.adb 5atpopsp.adb 5bosinte.adb 5ftaprop.adb
+ 	5gtaprop.adb 5htaprop.adb 5rosinte.ads 5staprop.adb
+Index: gcc/ada/trans.c
+===================================================================
+--- gcc/ada/trans.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ada/trans.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -4315,7 +4315,8 @@
+ void
+ add_decl_expr (tree gnu_decl, Entity_Id gnat_entity)
+ {
+-  tree gnu_stmt;
++  tree type = TREE_TYPE (gnu_decl);
++  tree gnu_stmt, gnu_init, gnu_lhs;
+ 
+   /* If this is a variable that Gigi is to ignore, we may have been given
+      an ERROR_MARK.  So test for it.  We also might have been given a
+@@ -4323,7 +4324,7 @@
+      ignore a TYPE_DECL for an UNCONSTRAINED_ARRAY_TYPE.  */
+   if (!DECL_P (gnu_decl)
+       || (TREE_CODE (gnu_decl) == TYPE_DECL
+-	  && TREE_CODE (TREE_TYPE (gnu_decl)) == UNCONSTRAINED_ARRAY_TYPE))
++	  && TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE))
+     return;
+ 
+   /* If we are global, we don't want to actually output the DECL_EXPR for
+@@ -4345,41 +4346,32 @@
+ 	}
+     }
+ 
+-  /* If this is a DECL_EXPR for a variable with DECL_INITIAL set,
+-     there are two cases we need to handle here.  */
+-  if (TREE_CODE (gnu_decl) == VAR_DECL && DECL_INITIAL (gnu_decl))
++  /* If this is a variable and an initializer is attached to it, it must be
++     valid for the context.  Similar to init_const in create_var_decl_1.  */ 
++  if (TREE_CODE (gnu_decl) == VAR_DECL
++      && (gnu_init = DECL_INITIAL (gnu_decl)) != NULL_TREE
++      && (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (TREE_TYPE (gnu_init))
++	  || (TREE_STATIC (gnu_decl)
++	      && !initializer_constant_valid_p (gnu_init,
++						TREE_TYPE (gnu_init)))))
+     {
+-      tree gnu_init = DECL_INITIAL (gnu_decl);
+-      tree gnu_lhs = NULL_TREE;
+-
+-      /* If this is a DECL_EXPR for a variable with DECL_INITIAL set
+-	 and decl has a padded type, convert it to the unpadded type so the
+-	 assignment is done properly.  */
+-      if (TREE_CODE (TREE_TYPE (gnu_decl)) == RECORD_TYPE
+-	  && TYPE_IS_PADDING_P (TREE_TYPE (gnu_decl)))
+-	gnu_lhs
+-	  = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_decl))), gnu_decl);
+-
+-      /* Otherwise, if this is going into memory and the initializer isn't
+-	 valid for the assembler and loader.  Gimplification could do this,
+-	 but would be run too late if -fno-unit-at-a-time.  */
+-      else if (TREE_STATIC (gnu_decl)
+-	       && !initializer_constant_valid_p (gnu_init,
+-						 TREE_TYPE (gnu_decl)))
++      /* If GNU_DECL has a padded type, convert it to the unpadded
++	 type so the assignment is done properly.  */
++      if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type))
++	gnu_lhs = convert (TREE_TYPE (TYPE_FIELDS (type)), gnu_decl);
++      else
+ 	gnu_lhs = gnu_decl;
+ 
+-      if (gnu_lhs)
+-	{
+-	  tree gnu_assign_stmt
+-	    = build_binary_op (MODIFY_EXPR, NULL_TREE,
+-			       gnu_lhs, DECL_INITIAL (gnu_decl));
++      gnu_stmt = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_lhs, gnu_init);
+ 
+-	  DECL_INITIAL (gnu_decl) = 0;
++      DECL_INITIAL (gnu_decl) = NULL_TREE;
++      if (TREE_READONLY (gnu_decl))
++	{
+ 	  TREE_READONLY (gnu_decl) = 0;
+-	  annotate_with_locus (gnu_assign_stmt,
+-			       DECL_SOURCE_LOCATION (gnu_decl));
+-	  add_stmt (gnu_assign_stmt);
++	  DECL_READONLY_ONCE_ELAB (gnu_decl) = 1;
+ 	}
++
++      add_stmt_with_node (gnu_stmt, gnat_entity);
+     }
+ }
+ 
+Index: gcc/ada/ada-tree.h
+===================================================================
+--- gcc/ada/ada-tree.h	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ada/ada-tree.h	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -235,6 +235,10 @@
+    discriminant.  */
+ #define DECL_STUBBED_P(NODE) DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
+ 
++/* Nonzero in a VAR_DECL if it is guaranteed to be constant after having
++   been elaborated and TREE_READONLY is not set on it.  */
++#define DECL_READONLY_ONCE_ELAB(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
++
+ /* Nonzero if this decl is always used by reference; i.e., an INDIRECT_REF
+    is needed to access the object.  */
+ #define DECL_BY_REF_P(NODE) DECL_LANG_FLAG_1 (NODE)
+Index: gcc/ada/misc.c
+===================================================================
+--- gcc/ada/misc.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ada/misc.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -370,6 +370,9 @@
+   if (flag_inline_functions)
+     flag_inline_trees = 2;
+ 
++  /* The structural alias analysis machinery essentially assumes that
++     everything is addressable (modulo bit-fields) by disregarding
++     the TYPE_NONALIASED_COMPONENT and DECL_NONADDRESSABLE_P macros.  */
+   flag_tree_salias = 0;
+ 
+   /* Do not enable Tree-SRA unless specifically requested as it
+Index: gcc/ada/decl.c
+===================================================================
+--- gcc/ada/decl.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/ada/decl.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -4732,7 +4732,8 @@
+ 
+   expr_variable = (!CONSTANT_CLASS_P (gnu_expr)
+ 		   && !(TREE_CODE (gnu_inner_expr) == VAR_DECL
+-			&& TREE_READONLY (gnu_inner_expr))
++			&& (TREE_READONLY (gnu_inner_expr)
++			    || DECL_READONLY_ONCE_ELAB (gnu_inner_expr)))
+ 		   && !CONTAINS_PLACEHOLDER_P (gnu_expr));
+ 
+   /* If this is a static expression or contains a discriminant, we don't
+Index: gcc/c-decl.c
+===================================================================
+--- gcc/c-decl.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/c-decl.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1644,6 +1644,9 @@
+ 	  }
+     }
+ 
++  /* Keep the old rtl since we can safely use it.  */
++  if (HAS_RTL_P (olddecl))
++    COPY_DECL_RTL (olddecl, newdecl);
+ 
+   /* Merge the type qualifiers.  */
+   if (TREE_READONLY (newdecl))
+@@ -3284,7 +3287,7 @@
+ void
+ finish_decl (tree decl, tree init, tree asmspec_tree)
+ {
+-  tree type = TREE_TYPE (decl);
++  tree type;
+   int was_incomplete = (DECL_SIZE (decl) == 0);
+   const char *asmspec = 0;
+ 
+@@ -3311,6 +3314,8 @@
+ 			    || TREE_CODE (decl) == FIELD_DECL))
+     objc_check_decl (decl);
+ 
++  type = TREE_TYPE (decl);
++
+   /* Deduce size of array from initialization, if not already known.  */
+   if (TREE_CODE (type) == ARRAY_TYPE
+       && TYPE_DOMAIN (type) == 0
+Index: gcc/fortran/intrinsic.c
+===================================================================
+--- gcc/fortran/intrinsic.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/intrinsic.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3269,8 +3269,7 @@
+   /* TODO: We should probably only allow elemental functions here.  */
+   flag |= (expr->ts.type != BT_INTEGER && expr->ts.type != BT_CHARACTER);
+ 
+-  if (pedantic && gfc_init_expr
+-      && flag && gfc_init_expr_extensions (specific))
++  if (gfc_init_expr && flag && gfc_init_expr_extensions (specific))
+     {
+       if (gfc_notify_std (GFC_STD_GNU, "Extension: Evaluation of "
+ 	    "nonstandard initialization expression at %L", &expr->where)
+Index: gcc/fortran/decl.c
+===================================================================
+--- gcc/fortran/decl.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/decl.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -758,7 +758,7 @@
+    INIT points to its enumerator value.   */
+ 
+ static void 
+-create_enum_history(gfc_symbol *sym, gfc_expr *init)
++create_enum_history (gfc_symbol *sym, gfc_expr *init)
+ {
+   enumerator_history *new_enum_history;
+   gcc_assert (sym != NULL && init != NULL);
+@@ -789,7 +789,7 @@
+ /* Function to free enum kind history.  */ 
+ 
+ void 
+-gfc_free_enum_history(void)
++gfc_free_enum_history (void)
+ {
+   enumerator_history *current = enum_history;  
+   enumerator_history *next;  
+@@ -805,7 +805,7 @@
+ }
+ 
+ 
+-/* Function called by variable_decl() that adds an initialization
++/* Function called by variabl_decl() that adds an initialization
+    expression to a symbol.  */
+ 
+ static try
+@@ -911,10 +911,6 @@
+       *initp = NULL;
+     }
+ 
+-  /* Maintain enumerator history.  */
+-  if (gfc_current_state () == COMP_ENUM)
+-    create_enum_history (sym, init);
+-
+   return SUCCESS;
+ }
+ 
+@@ -1073,15 +1069,7 @@
+ 
+   if (m == MATCH_NO)
+     as = gfc_copy_array_spec (current_as);
+-  else if (gfc_current_state () == COMP_ENUM)
+-    {
+-      gfc_error ("Enumerator cannot be array at %C");
+-      gfc_free_enum_history ();
+-      m = MATCH_ERROR;
+-      goto cleanup;
+-    }
+ 
+-
+   char_len = NULL;
+   cl = NULL;
+ 
+@@ -1179,10 +1167,11 @@
+       goto cleanup;
+     }
+ 
+-  /* An interface body specifies all of the procedure's characteristics and these
+-     shall be consistent with those specified in the procedure definition, except
+-     that the interface may specify a procedure that is not pure if the procedure
+-     is defined to be pure(12.3.2).  */
++  /* An interface body specifies all of the procedure's
++     characteristics and these shall be consistent with those
++     specified in the procedure definition, except that the interface
++     may specify a procedure that is not pure if the procedure is
++     defined to be pure(12.3.2).  */
+   if (current_ts.type == BT_DERIVED
+ 	&& gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY
+ 	&& current_ts.derived->ns != gfc_current_ns)
+@@ -1288,30 +1277,6 @@
+ 	}
+     }
+ 
+-  /* Check if we are parsing an enumeration and if the current enumerator
+-     variable has an initializer or not. If it does not have an
+-     initializer, the initialization value of the previous enumerator 
+-     (stored in last_initializer) is incremented by 1 and is used to
+-     initialize the current enumerator.  */
+-  if (gfc_current_state () == COMP_ENUM)
+-    {
+-      if (initializer == NULL)
+-        initializer = gfc_enum_initializer (last_initializer, old_locus);
+- 
+-      if (initializer == NULL || initializer->ts.type != BT_INTEGER)
+-        {
+-          gfc_error("ENUMERATOR %L not initialized with integer expression",
+-		    &var_locus);
+-          m = MATCH_ERROR; 
+-          gfc_free_enum_history ();
+-          goto cleanup;
+-        }
+-
+-      /* Store this current initializer, for the next enumerator
+-	 variable to be parsed.  */
+-      last_initializer = initializer;
+-    }
+-
+   /* Add the initializer.  Note that it is fine if initializer is
+      NULL here, because we sometimes also need to check if a
+      declaration *must* have an initialization expression.  */
+@@ -2033,12 +1998,6 @@
+       if (d == DECL_NONE || d == DECL_COLON)
+ 	break;
+        
+-      if (gfc_current_state () == COMP_ENUM)
+-        {
+-          gfc_error ("Enumerator cannot have attributes %C");
+-          return MATCH_ERROR;
+-        }
+-
+       seen[d]++;
+       seen_at[d] = gfc_current_locus;
+ 
+@@ -2057,18 +2016,6 @@
+ 	}
+     }
+ 
+-  /* If we are parsing an enumeration and have ensured that no other
+-     attributes are present we can now set the parameter attribute.  */
+-  if (gfc_current_state () == COMP_ENUM)
+-    {
+-      t = gfc_add_flavor (&current_attr, FL_PARAMETER, NULL, NULL);
+-      if (t == FAILURE)
+-        {
+-          m = MATCH_ERROR;
+-          goto cleanup;
+-        }
+-    }
+-
+   /* No double colon, so assume that we've been looking at something
+      else the whole time.  */
+   if (d == DECL_NONE)
+@@ -4081,7 +4028,7 @@
+     return m;
+ 
+   if (gfc_notify_std (GFC_STD_F2003, 
+-		      "New in Fortran 2003: ENUM AND ENUMERATOR at %C")
++		      "New in Fortran 2003: ENUM and ENUMERATOR at %C")
+       == FAILURE)
+     return MATCH_ERROR;
+ 
+@@ -4089,19 +4036,116 @@
+ }
+ 
+ 
++/* Match a variable name with an optional initializer.  When this
++   subroutine is called, a variable is expected to be parsed next.
++   Depending on what is happening at the moment, updates either the
++   symbol table or the current interface.  */
++
++static match
++enumerator_decl (void)
++{
++  char name[GFC_MAX_SYMBOL_LEN + 1];
++  gfc_expr *initializer;
++  gfc_array_spec *as = NULL;
++  gfc_symbol *sym;
++  locus var_locus;
++  match m;
++  try t;
++  locus old_locus;
++
++  initializer = NULL;
++  old_locus = gfc_current_locus;
++
++  /* When we get here, we've just matched a list of attributes and
++     maybe a type and a double colon.  The next thing we expect to see
++     is the name of the symbol.  */
++  m = gfc_match_name (name);
++  if (m != MATCH_YES)
++    goto cleanup;
++
++  var_locus = gfc_current_locus;
++
++  /* OK, we've successfully matched the declaration.  Now put the
++     symbol in the current namespace. If we fail to create the symbol,
++     bail out.  */
++  if (build_sym (name, NULL, &as, &var_locus) == FAILURE)
++    {
++      m = MATCH_ERROR;
++      goto cleanup;
++    }
++
++  /* The double colon must be present in order to have initializers.
++     Otherwise the statement is ambiguous with an assignment statement.  */
++  if (colon_seen)
++    {
++      if (gfc_match_char ('=') == MATCH_YES)
++	{
++	  m = gfc_match_init_expr (&initializer);
++	  if (m == MATCH_NO)
++	    {
++	      gfc_error ("Expected an initialization expression at %C");
++	      m = MATCH_ERROR;
++	    }
++
++	  if (m != MATCH_YES)
++	    goto cleanup;
++	}
++    }
++
++  /* If we do not have an initializer, the initialization value of the
++     previous enumerator (stored in last_initializer) is incremented
++     by 1 and is used to initialize the current enumerator.  */
++  if (initializer == NULL)
++    initializer = gfc_enum_initializer (last_initializer, old_locus);
++ 
++  if (initializer == NULL || initializer->ts.type != BT_INTEGER)
++    {
++      gfc_error("ENUMERATOR %L not initialized with integer expression",
++		&var_locus);
++      m = MATCH_ERROR; 
++      gfc_free_enum_history ();
++      goto cleanup;
++    }
++
++  /* Store this current initializer, for the next enumerator variable
++     to be parsed.  add_init_expr_to_sym() zeros initializer, so we
++     use last_initializer below.  */
++  last_initializer = initializer;
++  t = add_init_expr_to_sym (name, &initializer, &var_locus);
++
++  /* Maintain enumerator history.  */
++  gfc_find_symbol (name, NULL, 0, &sym);
++  create_enum_history (sym, last_initializer);
++
++  return (t == SUCCESS) ? MATCH_YES : MATCH_ERROR;
++
++cleanup:
++  /* Free stuff up and return.  */
++  gfc_free_expr (initializer);
++
++  return m;
++}
++
++
+ /* Match the enumerator definition statement. */
+ 
+ match
+ gfc_match_enumerator_def (void)
+ {
+   match m;
+-  int elem; 
++  try t;
+   
+   gfc_clear_ts (&current_ts);
+   
+   m = gfc_match (" enumerator");
+   if (m != MATCH_YES)
+     return m;
++
++  m = gfc_match (" :: ");
++  if (m == MATCH_ERROR)
++    return m;
++
++  colon_seen = (m == MATCH_YES);
+   
+   if (gfc_current_state () != COMP_ENUM)
+     {
+@@ -4113,17 +4157,17 @@
+   (&current_ts)->type = BT_INTEGER;
+   (&current_ts)->kind = gfc_c_int_kind;
+   
+-  m = match_attr_spec ();
+-  if (m == MATCH_ERROR)
++  gfc_clear_attr (&current_attr);
++  t = gfc_add_flavor (&current_attr, FL_PARAMETER, NULL, NULL);
++  if (t == FAILURE)
+     {
+-      m = MATCH_NO;
++      m = MATCH_ERROR;
+       goto cleanup;
+     }
+ 
+-  elem = 1;
+   for (;;)
+     {
+-      m = variable_decl (elem++);
++      m = enumerator_decl ();
+       if (m == MATCH_ERROR)
+ 	goto cleanup;
+       if (m == MATCH_NO)
+Index: gcc/fortran/match.c
+===================================================================
+--- gcc/fortran/match.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/match.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,5 +1,5 @@
+ /* Matching subroutines in all sizes, shapes and colors.
+-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+    Free Software Foundation, Inc.
+    Contributed by Andy Vaught
+ 
+@@ -3328,8 +3328,11 @@
+ 
+ /* Match an iterator as part of a FORALL statement.  The format is:
+ 
+-     <var> = <start>:<end>[:<stride>][, <scalar mask>]  */
++     <var> = <start>:<end>[:<stride>]
+ 
++   On MATCH_NO, the caller tests for the possibility that there is a
++   scalar mask expression.  */
++
+ static match
+ match_forall_iterator (gfc_forall_iterator ** result)
+ {
+@@ -3340,11 +3343,12 @@
+   where = gfc_current_locus;
+   iter = gfc_getmem (sizeof (gfc_forall_iterator));
+ 
+-  m = gfc_match_variable (&iter->var, 0);
++  m = gfc_match_expr (&iter->var);
+   if (m != MATCH_YES)
+     goto cleanup;
+ 
+-  if (gfc_match_char ('=') != MATCH_YES)
++  if (gfc_match_char ('=') != MATCH_YES
++	|| iter->var->expr_type != EXPR_VARIABLE)
+     {
+       m = MATCH_NO;
+       goto cleanup;
+@@ -3382,13 +3386,6 @@
+   m = MATCH_ERROR;
+ 
+ cleanup:
+-  /* Make sure that potential internal function references in the
+-     mask do not get messed up.  */
+-  if (iter->var
+-	&& iter->var->expr_type == EXPR_VARIABLE
+-	&& iter->var->symtree->n.sym->refs == 1)
+-    iter->var->symtree->n.sym->attr.flavor = FL_UNKNOWN;
+-
+   gfc_current_locus = where;
+   gfc_free_forall_iterator (iter);
+   return m;
+Index: gcc/fortran/trans-decl.c
+===================================================================
+--- gcc/fortran/trans-decl.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/trans-decl.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1670,7 +1670,8 @@
+   create_function_arglist (ns->proc_name);
+ }
+ 
+-/* Return the decl used to hold the function return value.  */
++/* Return the decl used to hold the function return value.  If
++   parent_flag is set, the context is the parent_scope.  */
+ 
+ tree
+ gfc_get_fake_result_decl (gfc_symbol * sym)
+@@ -1735,9 +1736,12 @@
+       sprintf (name, "__result_%.20s",
+ 	       IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+ 
+-      decl = build_decl (VAR_DECL, get_identifier (name),
+-			 TREE_TYPE (TREE_TYPE (current_function_decl)));
+-
++      if (!sym->attr.mixed_entry_master && sym->attr.function)
++	decl = build_decl (VAR_DECL, get_identifier (name),
++			   gfc_sym_type (sym));
++      else
++	decl = build_decl (VAR_DECL, get_identifier (name),
++			   TREE_TYPE (TREE_TYPE (current_function_decl)));
+       DECL_ARTIFICIAL (decl) = 1;
+       DECL_EXTERNAL (decl) = 0;
+       TREE_PUBLIC (decl) = 0;
+@@ -2858,9 +2862,12 @@
+ 	warning (0, "Function return value not set");
+       else
+ 	{
+-	  /* Set the return value to the dummy result variable.  */
+-	  tmp = build2 (MODIFY_EXPR, TREE_TYPE (result),
+-			DECL_RESULT (fndecl), result);
++	  /* Set the return value to the dummy result variable.  The
++	     types may be different for scalar default REAL functions
++	     with -ff2c, therefore we have to convert.  */
++	  tmp = convert (TREE_TYPE (DECL_RESULT (fndecl)), result);
++	  tmp = build2 (MODIFY_EXPR, TREE_TYPE (tmp),
++			DECL_RESULT (fndecl), tmp);
+ 	  tmp = build1_v (RETURN_EXPR, tmp);
+ 	  gfc_add_expr_to_block (&block, tmp);
+ 	}
+Index: gcc/fortran/ChangeLog
+===================================================================
+--- gcc/fortran/ChangeLog	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/ChangeLog	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,3 +1,66 @@
++2007-03-17  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
++
++	PR fortran/31184
++	* invoke.texi: Fix typo.
++
++2007-03-14  Jakub Jelinek  <jakub@redhat.com>
++
++	* module.c (mio_typespec): Don't look at ts->cl if not BT_CHARACTER.
++
++2007-03-05  Brooks Moses  <brooks.moses@codesourcery.com>
++
++	PR 31050
++	* gfortranspec.c (lang_specific_driver): Update program
++	name and copyright date.
++
++2007-03-01  Tobias Schlueter  <tobi@gcc.gnu.org>
++
++	Backport from trunk
++	PR fortran/29441
++	* intrinsic.c (gfc_intrinsic_func_interface): Always check if
++	intrinsic is allowed in initialization expression.
++
++2006-02-27  Tobias Schl��ter  <tobias.schlueter@physik.uni-muenchen.de>
++
++	PR fortran/25392
++	* trans-stmt.c (gfc_trans_return): Fix comment formatting.
++	* trans-types.c (gfc_sym_type): Don't return early for functions.
++	Remove special handling for -ff2c.
++	(gfc_get_function_type): Add special handling for -ff2c.
++	* trans-decl.c (gfc_create_function_decl): Fix comment formatting.
++	(gfc_get_fake_result_decl): Make sure we get the right type for
++	functions.
++	(gfc_generate_function_code): Convert type of result variable to
++	type of function.
++
++2007-02-25  Roger Sayle  <roger@eyesopen.com>
++	    Paul Thomas <pault@gcc.gnu.org>
++
++        PR fortran/30400
++        * match.c (match_forall_iterator): Use gfc_match_expr instead
++	of gfc_match_variable to match the iterator variable.  Return
++	MATCH_NO if not a variable.  Remove the reset of the symbol's
++	flavor in cleanup.
++
++2007-02-15  Steven G. Kargl  <kargl@gcc.gnu.org>
++
++	PR fortran/30799
++	* primary.c (match_logical_constant): Return MATCH_ERROR on invalid
++	kind.
++
++2007-02-15  Tobias Schlueter  <tobi@gcc.gnu.org>
++
++	PR fortran/30478
++	* decl.c (create_enum_history, gfc_free_enum_history): Formatting
++	fixes.
++	(add_init_expr_to_sym): Remove ENUM-specific code-path.
++	(variable_decl): Likewise.  Formatting fix.
++	(match_attr_spec): Remove ENUM-specific codepath.
++	(gfc_match_enum): Fix typo in error message.
++	(enumerator_decl): New.
++	(gfc_match_enumerator_def): Strip down to code necessary for
++	ENUMs, use enumerator_decl.
++
+ 2007-02-13  Release Manager
+ 
+ 	* GCC 4.1.2 released.
+Index: gcc/fortran/trans-stmt.c
+===================================================================
+--- gcc/fortran/trans-stmt.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/trans-stmt.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -437,7 +437,7 @@
+       tree tmp;
+       tree result;
+ 
+-      /* if code->expr is not NULL, this return statement must appear
++      /* If code->expr is not NULL, this return statement must appear
+          in a subroutine and current_fake_result_decl has already
+ 	 been generated.  */
+ 
+Index: gcc/fortran/primary.c
+===================================================================
+--- gcc/fortran/primary.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/primary.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1039,7 +1039,10 @@
+     kind = gfc_default_logical_kind;
+ 
+   if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
+-    gfc_error ("Bad kind for logical constant at %C");
++    {
++      gfc_error ("Bad kind for logical constant at %C");
++      return MATCH_ERROR;
++    }
+ 
+   e = gfc_get_expr ();
+ 
+Index: gcc/fortran/module.c
+===================================================================
+--- gcc/fortran/module.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/module.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1726,7 +1726,14 @@
+   else
+     mio_symbol_ref (&ts->derived);
+ 
+-  mio_charlen (&ts->cl);
++  if (ts->type != BT_CHARACTER)
++    {
++      /* ts->cl is only valid for BT_CHARACTER.  */
++      mio_lparen ();
++      mio_rparen ();
++    }
++  else
++    mio_charlen (&ts->cl);
+ 
+   mio_rparen ();
+ }
+Index: gcc/fortran/trans-types.c
+===================================================================
+--- gcc/fortran/trans-types.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/trans-types.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1289,27 +1289,13 @@
+   if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
+     return void_type_node;
+ 
+-  if (sym->backend_decl)
+-    {
+-      if (sym->attr.function)
+-	return TREE_TYPE (TREE_TYPE (sym->backend_decl));
+-      else
+-	return TREE_TYPE (sym->backend_decl);
+-    }
++  /* In the case of a function the fake result variable may have a
++     type different from the function type, so don't return early in
++     that case.  */
++  if (sym->backend_decl && !sym->attr.function)
++    return TREE_TYPE (sym->backend_decl);
+ 
+   type = gfc_typenode_for_spec (&sym->ts);
+-  if (gfc_option.flag_f2c
+-      && sym->attr.function
+-      && sym->ts.type == BT_REAL
+-      && sym->ts.kind == gfc_default_real_kind
+-      && !sym->attr.always_explicit)
+-    {
+-      /* Special case: f2c calling conventions require that (scalar) 
+-	 default REAL functions return the C type double instead.  */
+-      sym->ts.kind = gfc_default_double_kind;
+-      type = gfc_typenode_for_spec (&sym->ts);
+-      sym->ts.kind = gfc_default_real_kind;
+-    }
+ 
+   if (sym->attr.dummy && !sym->attr.function)
+     byref = 1;
+@@ -1758,6 +1744,20 @@
+     type = void_type_node;
+   else if (sym->attr.mixed_entry_master)
+     type = gfc_get_mixed_entry_union (sym->ns);
++  else if (gfc_option.flag_f2c
++	   && sym->ts.type == BT_REAL
++	   && sym->ts.kind == gfc_default_real_kind
++	   && !sym->attr.always_explicit)
++    {
++      /* Special case: f2c calling conventions require that (scalar) 
++	 default REAL functions return the C type double instead.  f2c
++	 compatibility is only an issue with functions that don't
++	 require an explicit interface, as only these could be
++	 implemented in Fortran 77.  */
++      sym->ts.kind = gfc_default_double_kind;
++      type = gfc_typenode_for_spec (&sym->ts);
++      sym->ts.kind = gfc_default_real_kind;
++    }
+   else
+     type = gfc_sym_type (sym);
+ 
+Index: gcc/fortran/gfortranspec.c
+===================================================================
+--- gcc/fortran/gfortranspec.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/fortran/gfortranspec.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -346,8 +346,8 @@
+ 	  break;
+ 
+ 	case OPTION_version:
+-	  printf ("GNU Fortran 95 (GCC) %s\n", version_string);
+-	  printf ("Copyright %s 2006 Free Software Foundation, Inc.\n\n",
++	  printf ("GNU Fortran (GCC) %s\n", version_string);
++	  printf ("Copyright %s 2007 Free Software Foundation, Inc.\n\n",
+ 	          _("(C)"));
+ 	  printf (_("GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n\
+ You may redistribute copies of GNU Fortran\n\
+Index: gcc/configure.ac
+===================================================================
+--- gcc/configure.ac	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/configure.ac	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -833,7 +833,7 @@
+ # that we can use it.
+ gcc_AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+   [GNU texinfo.* \([0-9][0-9.]*\)],
+-  [4.[2-9]*])
++  [4.[2-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
+ if test $gcc_cv_prog_makeinfo_modern = no; then
+   MAKEINFO="$MISSING makeinfo"
+   AC_MSG_WARN([
+@@ -1994,9 +1994,7 @@
+   if echo "$ld_ver" | grep GNU > /dev/null; then
+ changequote(,)dnl
+     ld_vers=`echo $ld_ver | sed -n \
+-	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
+-	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
+-	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
++	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p' \
+ 	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\)[	 ].*$,\1,p' \
+ 	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[	 ].*$,\1,p' \
+ 	-e 's,^.*[ 	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ 	].*$,\1,p' \
+Index: gcc/BASE-VER
+===================================================================
+--- gcc/BASE-VER	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/BASE-VER	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1 +1 @@
+-4.1.2
++4.1.3
+Index: gcc/function.c
+===================================================================
+--- gcc/function.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/function.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -5103,6 +5103,14 @@
+       /* Retain a map of the prologue insns.  */
+       record_insns (seq, &prologue);
+       prologue_end = emit_note (NOTE_INSN_PROLOGUE_END);
++ 
++#ifndef PROFILE_BEFORE_PROLOGUE
++      /* Ensure that instructions are not moved into the prologue when
++	 profiling is on.  The call to the profiling routine can be
++	 emitted within the live range of a call-clobbered register.  */
++      if (current_function_profile)
++	emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
++#endif
+ 
+       seq = get_insns ();
+       end_sequence ();
+Index: gcc/tree-if-conv.c
+===================================================================
+--- gcc/tree-if-conv.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-if-conv.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -113,7 +113,8 @@
+ static bool if_convertible_bb_p (struct loop *, basic_block, basic_block);
+ static bool if_convertible_loop_p (struct loop *, bool);
+ static void add_to_predicate_list (basic_block, tree);
+-static tree add_to_dst_predicate_list (struct loop * loop, basic_block, tree, tree,
++static tree add_to_dst_predicate_list (struct loop * loop, edge,
++				       tree, tree,
+ 				       block_stmt_iterator *);
+ static void clean_predicate_lists (struct loop *loop);
+ static basic_block find_phi_replacement_condition (struct loop *loop,
+@@ -143,7 +144,6 @@
+ {
+   basic_block bb;
+   block_stmt_iterator itr;
+-  tree cond;
+   unsigned int i;
+ 
+   ifc_bbs = NULL;
+@@ -163,11 +163,11 @@
+       return false;
+     }
+ 
+-  cond = NULL_TREE;
+-
+   /* Do actual work now.  */
+   for (i = 0; i < loop->num_nodes; i++)
+     {
++      tree cond;
++
+       bb = ifc_bbs [i];
+ 
+       /* Update condition using predicate list.  */
+@@ -191,7 +191,6 @@
+ 	  basic_block bb_n = single_succ (bb);
+ 	  if (cond != NULL_TREE)
+ 	    add_to_predicate_list (bb_n, cond);
+-	  cond = NULL_TREE;
+ 	}
+     }
+ 
+@@ -275,12 +274,12 @@
+   /* Add new condition into destination's predicate list.  */
+ 
+   /* If 'c' is true then TRUE_EDGE is taken.  */
+-  add_to_dst_predicate_list (loop, true_edge->dest, cond,
++  add_to_dst_predicate_list (loop, true_edge, cond,
+ 			     unshare_expr (c), bsi);
+ 
+   /* If 'c' is false then FALSE_EDGE is taken.  */
+   c2 = invert_truthvalue (unshare_expr (c));
+-  add_to_dst_predicate_list (loop, false_edge->dest, cond, c2, bsi);
++  add_to_dst_predicate_list (loop, false_edge, cond, c2, bsi);
+ 
+   /* Now this conditional statement is redundant. Remove it.
+      But, do not remove exit condition! Update exit condition
+@@ -565,7 +564,15 @@
+       /* ??? Check data dependency for vectorizer.  */
+ 
+       /* What about phi nodes ? */
+-      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
++      phi = phi_nodes (bb);
++
++      /* Clear aux field of incoming edges to a bb with a phi node.  */
++      if (phi)
++	FOR_EACH_EDGE (e, ei, bb->preds)
++	  e->aux = NULL;
++
++      /* Check statements.  */
++      for (; phi; phi = PHI_CHAIN (phi))
+ 	if (!if_convertible_phi_p (loop, bb, phi))
+ 	  return false;
+ 
+@@ -602,13 +609,13 @@
+    existing condition.  */
+ 
+ static tree
+-add_to_dst_predicate_list (struct loop * loop, basic_block bb,
++add_to_dst_predicate_list (struct loop * loop, edge e,
+ 			   tree prev_cond, tree cond,
+ 			   block_stmt_iterator *bsi)
+ {
+   tree new_cond = NULL_TREE;
+ 
+-  if (!flow_bb_inside_loop_p (loop, bb))
++  if (!flow_bb_inside_loop_p (loop, e->dest))
+     return NULL_TREE;
+ 
+   if (prev_cond == boolean_true_node || !prev_cond)
+@@ -629,6 +636,11 @@
+       if (tmp_stmts2)
+         bsi_insert_before (bsi, tmp_stmts2, BSI_SAME_STMT);
+ 
++      /* Add the condition to aux field of the edge.  In case edge
++	 destination is a PHI node, this condition will be ANDed with
++	 block predicate to construct complete condition.  */
++      e->aux = cond;
++
+       /* new_cond == prev_cond AND cond */
+       tmp = build (TRUTH_AND_EXPR, boolean_type_node,
+ 		   unshare_expr (prev_cond), cond);
+@@ -636,22 +648,30 @@
+       bsi_insert_before (bsi, tmp_stmt, BSI_SAME_STMT);
+       new_cond = TREE_OPERAND (tmp_stmt, 0);
+     }
+-  add_to_predicate_list (bb, new_cond);
++  add_to_predicate_list (e->dest, new_cond);
+   return new_cond;
+ }
+ 
+-/* During if-conversion aux field from basic block is used to hold predicate
+-   list. Clean each basic block's predicate list for the given LOOP.  */
++/* During if-conversion aux field from basic block structure is used to hold
++   predicate list. Clean each basic block's predicate list for the given LOOP.
++   Also clean aux field of succesor edges, used to hold true and false
++   condition from conditional expression.  */
+ 
+ static void
+ clean_predicate_lists (struct loop *loop)
+ {
+   basic_block *bb;
+   unsigned int i;
++  edge e;
++  edge_iterator ei;
++
+   bb = get_loop_body (loop);
+   for (i = 0; i < loop->num_nodes; i++)
+-    bb[i]->aux = NULL;
+-
++    {
++      bb[i]->aux = NULL;
++      FOR_EACH_EDGE (e, ei, bb[i]->succs)
++	e->aux = NULL;
++    }
+   free (bb);
+ }
+ 
+@@ -664,13 +684,12 @@
+ 				basic_block bb, tree *cond,
+                                 block_stmt_iterator *bsi)
+ {
+-  basic_block first_bb = NULL;
+-  basic_block second_bb = NULL;
++  edge first_edge, second_edge;
+   tree tmp_cond, new_stmts;
+ 
+   gcc_assert (EDGE_COUNT (bb->preds) == 2);
+-  first_bb = (EDGE_PRED (bb, 0))->src;
+-  second_bb = (EDGE_PRED (bb, 1))->src;
++  first_edge = EDGE_PRED (bb, 0);
++  second_edge = EDGE_PRED (bb, 1);
+ 
+   /* Use condition based on following criteria:
+      1)
+@@ -691,48 +710,63 @@
+        S3: x = (c == d) ? b : a;
+ 
+        S3 is preferred over S1 and S2*, Make 'b' first_bb and use 
+-       its condition.  
++       its condition.
+ 
+      4) If  pred B is dominated by pred A then use pred B's condition.
+         See PR23115.  */
+ 
+   /* Select condition that is not TRUTH_NOT_EXPR.  */
+-  tmp_cond = first_bb->aux;
++  tmp_cond = (first_edge->src)->aux;
+   if (TREE_CODE (tmp_cond) == TRUTH_NOT_EXPR)
+     {
+-      basic_block tmp_bb;
+-      tmp_bb = first_bb;
+-      first_bb = second_bb;
+-      second_bb = tmp_bb;
++      edge tmp_edge;
++
++      tmp_edge = first_edge;
++      first_edge = second_edge;
++      second_edge = tmp_edge;
+     }
+ 
+   /* Check if FIRST_BB is loop header or not and make sure that
+      FIRST_BB does not dominate SECOND_BB.  */
+-  if (first_bb == loop->header
+-      || dominated_by_p (CDI_DOMINATORS, second_bb, first_bb))
++  if (first_edge->src == loop->header
++      || dominated_by_p (CDI_DOMINATORS,
++			 second_edge->src, first_edge->src))
+     {
+-      tmp_cond = second_bb->aux;
+-      if (TREE_CODE (tmp_cond) == TRUTH_NOT_EXPR)
+-	{
+-	  /* Select non loop header condition but do not switch basic blocks.  */
+-	  *cond = invert_truthvalue (unshare_expr (tmp_cond));
+-	}
++      *cond = (second_edge->src)->aux;
++
++      /* If there is a condition on an incoming edge,
++	 AND it with the incoming bb predicate.  */
++      if (second_edge->aux)
++	*cond = build2 (TRUTH_AND_EXPR, boolean_type_node,
++			*cond, second_edge->aux);
++
++      if (TREE_CODE (*cond) == TRUTH_NOT_EXPR)
++	/* We can be smart here and choose inverted
++	   condition without switching bbs.  */
++	*cond = invert_truthvalue (*cond);
+       else
+-	{
+-	  /* Select non loop header condition.  */
+-	  first_bb = second_bb;
+-	  *cond = first_bb->aux;
+-	}
++	/* Select non loop header bb.  */
++	first_edge = second_edge;
+     }
+   else
+-    /* FIRST_BB is not loop header */
+-    *cond = first_bb->aux;
++    {
++      /* FIRST_BB is not loop header */
++      *cond = (first_edge->src)->aux;
+ 
++      /* If there is a condition on an incoming edge,
++	 AND it with the incoming bb predicate.  */
++      if (first_edge->aux)
++	*cond = build2 (TRUTH_AND_EXPR, boolean_type_node,
++			*cond, first_edge->aux);
++    }
++
+   /* Create temp. for the condition. Vectorizer prefers to have gimple
+      value as condition. Various targets use different means to communicate
+-     condition in vector compare operation. Using gimple value allows compiler
+-     to emit vector compare and select RTL without exposing compare's result.  */
+-  *cond = force_gimple_operand (*cond, &new_stmts, false, NULL_TREE);
++     condition in vector compare operation. Using gimple value allows
++     compiler to emit vector compare and select RTL without exposing
++     compare's result.  */
++  *cond = force_gimple_operand (unshare_expr (*cond), &new_stmts,
++				false, NULL_TREE);
+   if (new_stmts)
+     bsi_insert_before (bsi, new_stmts, BSI_SAME_STMT);
+   if (!is_gimple_reg (*cond) && !is_gimple_condexpr (*cond))
+@@ -746,7 +780,7 @@
+ 
+   gcc_assert (*cond);
+ 
+-  return first_bb;
++  return first_edge->src;
+ }
+ 
+ 
+@@ -777,10 +811,6 @@
+   /* Find basic block and initialize iterator.  */
+   bb = bb_for_stmt (phi);
+ 
+-  new_stmt = NULL_TREE;
+-  arg_0 = NULL_TREE;
+-  arg_1 = NULL_TREE;
+-
+   /* Use condition that is not TRUTH_NOT_EXPR in conditional modify expr.  */
+   if (EDGE_PRED (bb, 1)->src == true_bb)
+     {
+Index: gcc/tree-data-ref.c
+===================================================================
+--- gcc/tree-data-ref.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-data-ref.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -146,7 +146,12 @@
+     tag_b = DR_MEMTAG (drb);
+   if (!tag_b)
+     return false;
+-  *aliased = (tag_a == tag_b);
++  
++  if (tag_a == tag_b)
++    *aliased = true;
++  else
++    *aliased = may_aliases_intersect (tag_a, tag_b);
++
+   return true;
+ }
+ 
+@@ -1720,7 +1725,7 @@
+    Extract INVARIANT and CONSTANT parts from OFFSET. 
+ 
+ */
+-static void 
++static bool 
+ analyze_offset (tree offset, tree *invariant, tree *constant)
+ {
+   tree op0, op1, constant_0, constant_1, invariant_0, invariant_1;
+@@ -1736,23 +1741,36 @@
+ 	*constant = offset;
+       else
+ 	*invariant = offset;
+-      return;
++      return true;
+     }
+ 
+   op0 = TREE_OPERAND (offset, 0);
+   op1 = TREE_OPERAND (offset, 1);
+ 
+   /* Recursive call with the operands.  */
+-  analyze_offset (op0, &invariant_0, &constant_0);
+-  analyze_offset (op1, &invariant_1, &constant_1);
++  if (!analyze_offset (op0, &invariant_0, &constant_0)
++      || !analyze_offset (op1, &invariant_1, &constant_1))
++    return false;
+ 
+-  /* Combine the results.  */
++  /* Combine the results.  Add negation to the subtrahend in case of 
++     subtraction.  */
++  if (constant_0 && constant_1)
++    return false;
+   *constant = constant_0 ? constant_0 : constant_1;
++  if (code == MINUS_EXPR && constant_1)
++    *constant = fold_build1 (NEGATE_EXPR, TREE_TYPE (*constant), *constant);
++
+   if (invariant_0 && invariant_1)
+     *invariant = 
+       fold_build2 (code, TREE_TYPE (invariant_0), invariant_0, invariant_1);
+   else
+-    *invariant = invariant_0 ? invariant_0 : invariant_1;
++    {
++      *invariant = invariant_0 ? invariant_0 : invariant_1;
++      if (code == MINUS_EXPR && invariant_1)
++        *invariant = 
++           fold_build1 (NEGATE_EXPR, TREE_TYPE (*invariant), *invariant);
++    }
++  return true;
+ }
+ 
+ 
+@@ -1828,7 +1846,17 @@
+ 
+       /* Extract CONSTANT and INVARIANT from OFFSET, and put them in DR_INIT and
+ 	 DR_OFFSET fields of DR.  */
+-      analyze_offset (offset, &invariant, &constant); 
++      if (!analyze_offset (offset, &invariant, &constant))
++        {
++          if (dump_file && (dump_flags & TDF_DETAILS))
++            {
++              fprintf (dump_file, "\ncreate_data_ref: failed to analyze dr's");
++              fprintf (dump_file, " offset for ");
++              print_generic_expr (dump_file, memref, TDF_SLIM);
++              fprintf (dump_file, "\n");
++            }
++          return NULL;
++        }
+       if (constant)
+ 	{
+ 	  DR_INIT (dr) = fold_convert (ssizetype, constant);
+Index: gcc/c.opt
+===================================================================
+--- gcc/c.opt	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/c.opt	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -532,6 +532,10 @@
+ ObjC ObjC++
+ Generate code for GNU runtime environment
+ 
++fgnu89-inline
++C Var(flag_gnu89_inline) Init(-1)
++Use traditional GNU semantics for inline functions
++
+ fguiding-decls
+ C++ ObjC++
+ 
+Index: gcc/gimplify.c
+===================================================================
+--- gcc/gimplify.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/gimplify.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -3790,6 +3790,19 @@
+       parse_input_constraint (&constraint, 0, 0, noutputs, 0,
+ 			      oconstraints, &allows_mem, &allows_reg);
+ 
++      /* If we can't make copies, we can only accept memory.  */
++      if (TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (link))))
++	{
++	  if (allows_mem)
++	    allows_reg = 0;
++	  else
++	    {
++	      error ("impossible constraint in %<asm%>");
++	      error ("non-memory input %d must stay in memory", i);
++	      return GS_ERROR;
++	    }
++	}
++
+       /* If the operand is a memory input, it should be an lvalue.  */
+       if (!allows_reg && allows_mem)
+ 	{
+Index: gcc/calls.c
+===================================================================
+--- gcc/calls.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/calls.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1239,13 +1239,25 @@
+ 
+   /* If this is a libcall, then precompute all arguments so that we do not
+      get extraneous instructions emitted as part of the libcall sequence.  */
+-  if ((flags & ECF_LIBCALL_BLOCK) == 0)
++
++  /* If we preallocated the stack space, and some arguments must be passed
++     on the stack, then we must precompute any parameter which contains a
++     function call which will store arguments on the stack.
++     Otherwise, evaluating the parameter may clobber previous parameters
++     which have already been stored into the stack.  (we have code to avoid
++     such case by saving the outgoing stack arguments, but it results in
++     worse code)  */
++  if ((flags & ECF_LIBCALL_BLOCK) == 0 && !ACCUMULATE_OUTGOING_ARGS)
+     return;
+ 
+   for (i = 0; i < num_actuals; i++)
+     {
+       enum machine_mode mode;
+ 
++      if ((flags & ECF_LIBCALL_BLOCK) == 0
++	  && TREE_CODE (args[i].tree_value) != CALL_EXPR)
++	continue;
++
+       /* If this is an addressable type, we cannot pre-evaluate it.  */
+       gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)));
+ 
+Index: gcc/c-opts.c
+===================================================================
+--- gcc/c-opts.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/c-opts.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -990,6 +990,12 @@
+   if (flag_inline_functions)
+     flag_inline_trees = 2;
+ 
++  /* We recognize -fgnu89-inline in preparation for 4.3 where the
++     option will be meaningful.  Here we just reject
++     -fno-gnu89-inline, since we don't support it.  */
++  if (!flag_gnu89_inline)
++    error ("-fno-gnu89-inline is not supported");
++
+   /* If we are given more than one input file, we must use
+      unit-at-a-time mode.  */
+   if (num_in_fnames > 1)
+Index: gcc/tree-sra.c
+===================================================================
+--- gcc/tree-sra.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/tree-sra.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,7 +1,7 @@
+ /* Scalar Replacement of Aggregates (SRA) converts some structure
+    references into scalar references, exposing them to the scalar
+    optimizers.
+-   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
++   Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+    Contributed by Diego Novillo <dnovillo@redhat.com>
+ 
+ This file is part of GCC.
+@@ -1246,7 +1246,23 @@
+ 	tree f;
+ 	for (f = TYPE_FIELDS (type); f ; f = TREE_CHAIN (f))
+ 	  if (TREE_CODE (f) == FIELD_DECL)
+-	    instantiate_missing_elements_1 (elt, f, TREE_TYPE (f));
++	    {
++	      tree field_type = TREE_TYPE (f);
++
++	      /* canonicalize_component_ref() unwidens some bit-field
++		 types (not marked as DECL_BIT_FIELD in C++), so we
++		 must do the same, lest we may introduce type
++		 mismatches.  */
++	      if (INTEGRAL_TYPE_P (field_type)
++		  && DECL_MODE (f) != TYPE_MODE (field_type))
++		field_type = TREE_TYPE (get_unwidened (build3 (COMPONENT_REF,
++							       field_type,
++							       elt->element,
++							       f, NULL_TREE),
++						       NULL_TREE));
++
++	      instantiate_missing_elements_1 (elt, f, field_type);
++	    }
+ 	break;
+       }
+ 
+@@ -1539,6 +1555,14 @@
+     return elt->element;
+ }
+ 
++static tree
++sra_build_assignment (tree dst, tree src)
++{
++  /* We need TYPE_CANONICAL to compare the types of dst and src
++     efficiently, but that's only introduced in GCC 4.3.  */
++  return build (MODIFY_EXPR, void_type_node, dst, src);
++}
++
+ /* Generate a set of assignment statements in *LIST_P to copy all
+    instantiated elements under ELT to or from the equivalent structure
+    rooted at EXPR.  COPY_OUT controls the direction of the copy, with
+@@ -1562,16 +1586,16 @@
+       i = c->replacement;
+ 
+       t = build (COMPLEX_EXPR, elt->type, r, i);
+-      t = build (MODIFY_EXPR, void_type_node, expr, t);
++      t = sra_build_assignment (expr, t);
+       SSA_NAME_DEF_STMT (expr) = t;
+       append_to_statement_list (t, list_p);
+     }
+   else if (elt->replacement)
+     {
+       if (copy_out)
+-	t = build (MODIFY_EXPR, void_type_node, elt->replacement, expr);
++	t = sra_build_assignment (elt->replacement, expr);
+       else
+-	t = build (MODIFY_EXPR, void_type_node, expr, elt->replacement);
++	t = sra_build_assignment (expr, elt->replacement);
+       append_to_statement_list (t, list_p);
+     }
+   else
+@@ -1606,8 +1630,7 @@
+ 
+       gcc_assert (src->replacement);
+ 
+-      t = build (MODIFY_EXPR, void_type_node, dst->replacement,
+-		 src->replacement);
++      t = sra_build_assignment (dst->replacement, src->replacement);
+       append_to_statement_list (t, list_p);
+     }
+ }
+@@ -1638,7 +1661,7 @@
+       gcc_assert (elt->is_scalar);
+       t = fold_convert (elt->type, integer_zero_node);
+ 
+-      t = build (MODIFY_EXPR, void_type_node, elt->replacement, t);
++      t = sra_build_assignment (elt->replacement, t);
+       append_to_statement_list (t, list_p);
+     }
+ }
+@@ -1650,7 +1673,9 @@
+ generate_one_element_init (tree var, tree init, tree *list_p)
+ {
+   /* The replacement can be almost arbitrarily complex.  Gimplify.  */
+-  tree stmt = build (MODIFY_EXPR, void_type_node, var, init);
++  tree stmt;
++
++  stmt = sra_build_assignment (var, init);
+   gimplify_and_add (stmt, list_p);
+ }
+ 
+Index: gcc/loop-iv.c
+===================================================================
+--- gcc/loop-iv.c	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/loop-iv.c	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1497,7 +1497,7 @@
+ 	    mode = VOIDmode;
+ 	}
+ 
+-      if (mode != VOIDmode
++      if (SCALAR_INT_MODE_P (mode)
+ 	  && rtx_equal_p (op1, opb1)
+ 	  && simplify_gen_binary (MINUS, mode, opb0, op0) == const1_rtx)
+ 	return true;
+Index: gcc/po/ChangeLog
+===================================================================
+--- gcc/po/ChangeLog	(.../tags/gcc_4_1_2_release)	(revision 142335)
++++ gcc/po/ChangeLog	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -1,3 +1,15 @@
++2007-06-26  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* sv.po: Update.
++
++2007-04-21  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* sv.po: Update.
++
++2007-03-08  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* sr.po: New.
++
+ 2007-02-13  Release Manager
+ 
+ 	* GCC 4.1.2 released.
+Index: gcc/po/sr.po
+===================================================================
+--- gcc/po/sr.po	(.../tags/gcc_4_1_2_release)	(revision 0)
++++ gcc/po/sr.po	(.../branches/gcc-4_1-branch)	(revision 142335)
+@@ -0,0 +1,28674 @@
++# Serbian translation of `gcc'.
++# Copyright (C) 2006 Free Software Foundation, Inc.
++# Caslav Ilic <caslav.ilic@gmx.net>, 2005.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: gcc 4.1.1\n"
++"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
++"POT-Creation-Date: 2006-05-24 16:19-0700\n"
++"PO-Revision-Date: 2007-02-15 12:00+0100\n"
++"Last-Translator: Caslav Ilic <caslav.ilic@gmx.net>\n"
++"Language-Team: Serbian <gnu@prevod.org>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#: c-decl.c:3739
++msgid "<anonymous>"
++msgstr "<анонимно>"
++
++#: c-format.c:343 c-format.c:367
++msgid "' ' flag"
++msgstr "заставица ‘ ’"
++
++#: c-format.c:343 c-format.c:367
++msgid "the ' ' printf flag"
++msgstr "заставица ‘ ’ у printf"
++
++#: c-format.c:344 c-format.c:368 c-format.c:402 c-format.c:414 c-format.c:471
++msgid "'+' flag"
++msgstr "заставица ‘+’"
++
++#: c-format.c:344 c-format.c:368 c-format.c:402 c-format.c:414
++msgid "the '+' printf flag"
++msgstr "заставица ‘+’ у printf"
++
++#: c-format.c:345 c-format.c:369 c-format.c:415 c-format.c:447
++msgid "'#' flag"
++msgstr "заставица ‘#’"
++
++#: c-format.c:345 c-format.c:369 c-format.c:415
++msgid "the '#' printf flag"
++msgstr "заставица ‘#’ у printf"
++
++#: c-format.c:346 c-format.c:370 c-format.c:445
++msgid "'0' flag"
++msgstr "заставица ‘0’"
++
++#: c-format.c:346 c-format.c:370
++msgid "the '0' printf flag"
++msgstr "заставица ‘0’ у printf"
++
++#: c-format.c:347 c-format.c:371 c-format.c:444 c-format.c:474
++msgid "'-' flag"
++msgstr "заставица ‘-’"
++
++#: c-format.c:347 c-format.c:371
++msgid "the '-' printf flag"
++msgstr "заставица ‘-’ у printf"
++
++#: c-format.c:348 c-format.c:428
++msgid "''' flag"
++msgstr "заставица ‘'’"
++
++#: c-format.c:348
++msgid "the ''' printf flag"
++msgstr "заставица ‘'’ у printf"
++
++#: c-format.c:349 c-format.c:429
++msgid "'I' flag"
++msgstr "заставица ‘I’"
++
++#: c-format.c:349
++msgid "the 'I' printf flag"
++msgstr "заставица ‘I’ у printf"
++
++#: c-format.c:350 c-format.c:372 c-format.c:426 c-format.c:448 c-format.c:475
++#: c-format.c:1601 config/sol2-c.c:46
++msgid "field width"
++msgstr "ширина поља"
++
++#: c-format.c:350 c-format.c:372 config/sol2-c.c:46
++msgid "field width in printf format"
++msgstr "ширина поља у формату printf"
++
++#: c-format.c:351 c-format.c:373 c-format.c:404 c-format.c:417
++msgid "precision"
++msgstr "тачност"
++
++#: c-format.c:351 c-format.c:373 c-format.c:404 c-format.c:417
++msgid "precision in printf format"
++msgstr "тачност у формату printf"
++
++#: c-format.c:352 c-format.c:374 c-format.c:405 c-format.c:418 c-format.c:427
++#: c-format.c:478 config/sol2-c.c:47
++msgid "length modifier"
++msgstr "модификатор дужине"
++
++#: c-format.c:352 c-format.c:374 c-format.c:405 c-format.c:418
++#: config/sol2-c.c:47
++msgid "length modifier in printf format"
++msgstr "модификатор дужине у формату printf"
++
++#: c-format.c:403 c-format.c:416
++msgid "'q' flag"
++msgstr "заставица ‘q’"
++
++#: c-format.c:403 c-format.c:416
++msgid "the 'q' diagnostic flag"
++msgstr "дијагностичка заставица ‘q’"
++
++#: c-format.c:424
++msgid "assignment suppression"
++msgstr "потискивање доделе"
++
++#: c-format.c:424
++msgid "the assignment suppression scanf feature"
++msgstr "могућност scanf за потискивање доделе"
++
++#: c-format.c:425
++msgid "'a' flag"
++msgstr "заставица ‘a’"
++
++#: c-format.c:425
++msgid "the 'a' scanf flag"
++msgstr "заставица ‘a’ у scanf"
++
++#: c-format.c:426
++msgid "field width in scanf format"
++msgstr "ширина поља у формату scanf"
++
++#: c-format.c:427
++msgid "length modifier in scanf format"
++msgstr "модификатор дужине у формату scanf"
++
++#: c-format.c:428
++msgid "the ''' scanf flag"
++msgstr "заставица ‘'’ у scanf"
++
++#: c-format.c:429
++msgid "the 'I' scanf flag"
++msgstr "заставица ‘I’ у scanf"
++
++#: c-format.c:443
++msgid "'_' flag"
++msgstr "заставица ‘_’"
++
++#: c-format.c:443
++msgid "the '_' strftime flag"
++msgstr "заставица ‘_’ у strftime"
++
++#: c-format.c:444
++msgid "the '-' strftime flag"
++msgstr "заставица ‘-’ у strftime"
++
++#: c-format.c:445
++msgid "the '0' strftime flag"
++msgstr "заставица ‘0’ у strftime"
++
++#: c-format.c:446 c-format.c:470
++msgid "'^' flag"
++msgstr "заставица ‘^’"
++
++#: c-format.c:446
++msgid "the '^' strftime flag"
++msgstr "заставица ‘^’ у strftime"
++
++#: c-format.c:447
++msgid "the '#' strftime flag"
++msgstr "заставица ‘#’ у strftime"
++
++#: c-format.c:448
++msgid "field width in strftime format"
++msgstr "ширина поља у формату strftime"
++
++#: c-format.c:449
++msgid "'E' modifier"
++msgstr "модификатор ‘E’"
++
++#: c-format.c:449
++msgid "the 'E' strftime modifier"
++msgstr "модификатор ‘E’ у strftime"
++
++#: c-format.c:450
++msgid "'O' modifier"
++msgstr "модификатор ‘O’ у strftime"
++
++#: c-format.c:450
++msgid "the 'O' strftime modifier"
++msgstr "модификатор ‘O’ у strftime"
++
++#: c-format.c:451
++msgid "the 'O' modifier"
++msgstr "модификатор ‘O’"
++
++#: c-format.c:469
++msgid "fill character"
++msgstr "знак за попуну"
++
++#: c-format.c:469
++msgid "fill character in strfmon format"
++msgstr "знак за попуну у формату strfmon"
++
++#: c-format.c:470
++msgid "the '^' strfmon flag"
++msgstr "заставица ‘^’ у strfmon"
++
++#: c-format.c:471
++msgid "the '+' strfmon flag"
++msgstr "заставица ‘+’ у strfmon"
++
++#: c-format.c:472
++msgid "'(' flag"
++msgstr "заставица ‘(’"
++
++#: c-format.c:472
++msgid "the '(' strfmon flag"
++msgstr "заставица ‘(’ у strfmon"
++
++#: c-format.c:473
++msgid "'!' flag"
++msgstr "заставица ‘!’"
++
++#: c-format.c:473
++msgid "the '!' strfmon flag"
++msgstr "заставица ‘!’ у strfmon"
++
++#: c-format.c:474
++msgid "the '-' strfmon flag"
++msgstr "заставица ‘-’ у strfmon"
++
++#: c-format.c:475
++msgid "field width in strfmon format"
++msgstr "ширина поља у формату strfmon"
++
++#: c-format.c:476
++msgid "left precision"
++msgstr "лева тачност"
++
++#: c-format.c:476
++msgid "left precision in strfmon format"
++msgstr "лева тачност у формату strfmon"
++
++#: c-format.c:477
++msgid "right precision"
++msgstr "десна тачност"
++
++#: c-format.c:477
++msgid "right precision in strfmon format"
++msgstr "десна тачност у формату strfmon"
++
++#: c-format.c:478
++msgid "length modifier in strfmon format"
++msgstr "модификатор дужине у формату strfmon"
++
++#: c-format.c:1703
++msgid "field precision"
++msgstr "тачност поља"
++
++#: c-incpath.c:70
++#, c-format
++msgid "ignoring duplicate directory \"%s\"\n"
++msgstr "игноришем директоријум дупликат „%s“\n"
++
++#: c-incpath.c:73
++#, c-format
++msgid "  as it is a non-system directory that duplicates a system directory\n"
++msgstr "  пошто је несистемски директоријум који је дупликат системског директоријума\n"
++
++#: c-incpath.c:77
++#, c-format
++msgid "ignoring nonexistent directory \"%s\"\n"
++msgstr "игноришем непостојећи директоријум „%s“\n"
++
++#: c-incpath.c:286
++#, c-format
++msgid "#include \"...\" search starts here:\n"
++msgstr "Тражење за #include \"...\" почиње овде:\n"
++
++#: c-incpath.c:290
++#, c-format
++msgid "#include <...> search starts here:\n"
++msgstr "Тражење за #include <...> почиње овде:\n"
++
++#: c-incpath.c:295
++#, c-format
++msgid "End of search list.\n"
++msgstr "Крај листе тражења.\n"
++
++#: c-opts.c:1339
++msgid "<built-in>"
++msgstr "<уграђено>"
++
++#: c-opts.c:1355
++msgid "<command line>"
++msgstr "<командна линија>"
++
++#: c-typeck.c:2225 c-typeck.c:4592 c-typeck.c:4594 c-typeck.c:4602
++#: c-typeck.c:4632 c-typeck.c:6011
++msgid "initializer element is not constant"
++msgstr "елемент успостављача није константан"
++
++#: c-typeck.c:4397
++msgid "array initialized from parenthesized string constant"
++msgstr "низ успостављен константном ниском у заградама"
++
++#: c-typeck.c:4458 cp/typeck2.c:672
++#, gcc-internal-format
++msgid "char-array initialized from wide string"
++msgstr "char-низ успостављен широком ниском"
++
++#: c-typeck.c:4463
++msgid "wchar_t-array initialized from non-wide string"
++msgstr "wchar_t-низ успостављен не-широком ниском"
++
++#: c-typeck.c:4481 cp/typeck2.c:692
++#, gcc-internal-format
++msgid "initializer-string for array of chars is too long"
++msgstr "предугачка ниска успостављача за низ знакова"
++
++#: c-typeck.c:4487
++msgid "array of inappropriate type initialized from string constant"
++msgstr "низ неподесног типа успостављен константном ниском"
++
++#. ??? This should not be an error when inlining calls to
++#. unprototyped functions.
++#: c-typeck.c:4551 c-typeck.c:4049 cp/typeck.c:1398
++#, gcc-internal-format
++msgid "invalid use of non-lvalue array"
++msgstr "неисправна употреба не-л-вредносног низа"
++
++#: c-typeck.c:4575
++msgid "array initialized from non-constant array expression"
++msgstr "низ успостављен не-константним низовним изразом"
++
++#: c-typeck.c:4639 c-typeck.c:6015
++#, gcc-internal-format
++msgid "initializer element is not computable at load time"
++msgstr "елемент успостављача се не може израчунати при учитавању"
++
++#. Although C99 is unclear about whether incomplete arrays
++#. of VLAs themselves count as VLAs, it does not make
++#. sense to permit them to be initialized given that
++#. ordinary VLAs may not be initialized.
++#: c-typeck.c:4650 c-decl.c:3181 c-decl.c:3196
++#, gcc-internal-format
++msgid "variable-sized object may not be initialized"
++msgstr "објекат променљиве величине не може се успостављати"
++
++#: c-typeck.c:4654
++msgid "invalid initializer"
++msgstr "неисправан успостављач"
++
++#: c-typeck.c:5128
++msgid "extra brace group at end of initializer"
++msgstr "сувишна група витичастих заграда на крају успостављача"
++
++#: c-typeck.c:5148
++msgid "missing braces around initializer"
++msgstr "недостају витичасте заграде око успостављача"
++
++#: c-typeck.c:5209
++msgid "braces around scalar initializer"
++msgstr "витичасте заграде око скаларног успостављача"
++
++#: c-typeck.c:5266
++msgid "initialization of flexible array member in a nested context"
++msgstr "успостављање флексибилног чланског низа у угњежденом контексту"
++
++#: c-typeck.c:5268
++msgid "initialization of a flexible array member"
++msgstr "успостављање флексибилног чланског низа"
++
++#: c-typeck.c:5295
++msgid "missing initializer"
++msgstr "недостаје успостављач"
++
++#: c-typeck.c:5317
++msgid "empty scalar initializer"
++msgstr "празан скаларни успостављач"
++
++#: c-typeck.c:5322
++msgid "extra elements in scalar initializer"
++msgstr "сувишни елементи у скаларном инцијализатору"
++
++#: c-typeck.c:5426 c-typeck.c:5486
++msgid "array index in non-array initializer"
++msgstr "индекс низа у не-низовном успостављачу"
++
++#: c-typeck.c:5431 c-typeck.c:5539
++msgid "field name not in record or union initializer"
++msgstr "име поља није у успостављачу слога или уније"
++
++#: c-typeck.c:5477
++msgid "array index in initializer not of integer type"
++msgstr "индекс низа у успостављачу није целобројан"
++
++#: c-typeck.c:5482 c-typeck.c:5484
++msgid "nonconstant array index in initializer"
++msgstr "неконстантан индекс низа у успостављачу"
++
++#: c-typeck.c:5488 c-typeck.c:5491
++msgid "array index in initializer exceeds array bounds"
++msgstr "индекс у успостављачу премашује границе низа"
++
++#: c-typeck.c:5502
++msgid "empty index range in initializer"
++msgstr "празан индексни опсег у успостављачу"
++
++#: c-typeck.c:5511
++msgid "array index range in initializer exceeds array bounds"
++msgstr "индексни опсег у успостављачу премашује границе низа"
++
++#: c-typeck.c:5586 c-typeck.c:5607 c-typeck.c:6079
++msgid "initialized field with side-effects overwritten"
++msgstr "успостављено поље са споредним ефектима пребрисано"
++
++#: c-typeck.c:6287
++msgid "excess elements in char array initializer"
++msgstr "сувишни елементи у успостављачу знаковног низа"
++
++#: c-typeck.c:6294 c-typeck.c:6340
++msgid "excess elements in struct initializer"
++msgstr "сувишни елементи у успостављачу структуре"
++
++#: c-typeck.c:6355
++msgid "non-static initialization of a flexible array member"
++msgstr "нестатичко успостављање флексибилног чланског низа"
++
++#: c-typeck.c:6423
++msgid "excess elements in union initializer"
++msgstr "сувишни елементи у успостављачу уније"
++
++#: c-typeck.c:6510
++msgid "excess elements in array initializer"
++msgstr "сувишни елементи у успостављачу низа"
++
++#: c-typeck.c:6540
++msgid "excess elements in vector initializer"
++msgstr "сувишни елементи у успостављачу вектора"
++
++#: c-typeck.c:6564
++msgid "excess elements in scalar initializer"
++msgstr "сувишни елементи у успостављачу скалара"
++
++#: cfgrtl.c:2130
++msgid "flow control insn inside a basic block"
++msgstr "ија контроле тока унутар основног блока"
++
++#: cfgrtl.c:2208
++msgid "wrong insn in the fallthru edge"
++msgstr "погрешна ија у пропадном потегу"
++
++#: cfgrtl.c:2250
++msgid "insn outside basic block"
++msgstr "ија изван основног блока"
++
++#: cfgrtl.c:2257
++msgid "return not followed by barrier"
++msgstr "повратак није праћен баријером"
++
++#: cgraph.c:300 ipa-inline.c:296
++msgid "function body not available"
++msgstr "тело функције није доступно"
++
++#: cgraph.c:302 cgraphunit.c:594
++msgid "redefined extern inline functions are not considered for inlining"
++msgstr "редефинисане спољашње уткане функције не разматрају се за уткивање"
++
++#: cgraph.c:305 cgraphunit.c:599
++msgid "function not considered for inlining"
++msgstr "функција се не разматра за уткивање"
++
++#: cgraph.c:307 cgraphunit.c:597 ipa-inline.c:289
++msgid "function not inlinable"
++msgstr "функција се не може уткати"
++
++#: collect2.c:373 gcc.c:6765
++#, c-format
++msgid "internal gcc abort in %s, at %s:%d"
++msgstr "инутрашњи прекид у %s, код %s:%d"
++
++#: collect2.c:872
++#, c-format
++msgid "no arguments"
++msgstr "без аргумената"
++
++#: collect2.c:1246 collect2.c:1394 collect2.c:1429
++#, c-format
++msgid "fopen %s"
++msgstr "fopen %s"
++
++#: collect2.c:1249 collect2.c:1399 collect2.c:1432
++#, c-format
++msgid "fclose %s"
++msgstr "fclose %s"
++
++#: collect2.c:1258
++#, c-format
++msgid "collect2 version %s"
++msgstr "collect2 верзија %s"
++
++#: collect2.c:1348
++#, c-format
++msgid "%d constructor(s) found\n"
++msgstr "нађених конструктора: %d\n"
++
++#: collect2.c:1349
++#, c-format
++msgid "%d destructor(s)  found\n"
++msgstr "нађених деструктора: %d\n"
++
++#: collect2.c:1350
++#, c-format
++msgid "%d frame table(s) found\n"
++msgstr "нађених табела оквира: %d\n"
++
++#: collect2.c:1487
++#, c-format
++msgid "can't get program status"
++msgstr "не могу да добавим стање програма"
++
++#: collect2.c:1537
++#, c-format
++msgid "[cannot find %s]"
++msgstr "[не могу да нађем %s]"
++
++#: collect2.c:1552
++#, c-format
++msgid "cannot find '%s'"
++msgstr "не могу да нађем ‘%s’"
++
++#: collect2.c:1556 collect2.c:2045 collect2.c:2200 gcc.c:2809
++#, c-format
++msgid "pex_init failed"
++msgstr "pex_init није прошло"
++
++#: collect2.c:1591
++#, c-format
++msgid "[Leaving %s]\n"
++msgstr "[Напуштам %s]\n"
++
++#: collect2.c:1811
++#, c-format
++msgid ""
++"\n"
++"write_c_file - output name is %s, prefix is %s\n"
++msgstr ""
++"\n"
++"write_c_file - излазно име је %s, префикс је %s\n"
++
++#: collect2.c:2019
++#, c-format
++msgid "cannot find 'nm'"
++msgstr "не могу да нађем ‘nm’"
++
++#: collect2.c:2066
++#, c-format
++msgid "can't open nm output"
++msgstr "не могу да отворим излаз из nm"
++
++#: collect2.c:2110
++#, c-format
++msgid "init function found in object %s"
++msgstr "функција init нађена у објекту %s"
++
++#: collect2.c:2118
++#, c-format
++msgid "fini function found in object %s"
++msgstr "функција fini нађена у објекту %s"
++
++#: collect2.c:2221
++#, c-format
++msgid "can't open ldd output"
++msgstr "не могу да отворим излаз из ldd"
++
++#: collect2.c:2224
++#, c-format
++msgid ""
++"\n"
++"ldd output with constructors/destructors.\n"
++msgstr ""
++"\n"
++"излаз из ldd са конструкторима/деструкторима.\n"
++
++#: collect2.c:2239
++#, c-format
++msgid "dynamic dependency %s not found"
++msgstr "динамичка зависност %s није нађена"
++
++#: collect2.c:2251
++#, c-format
++msgid "unable to open dynamic dependency '%s'"
++msgstr "не могу да отворим динамичку зависност ‘%s’"
++
++#: collect2.c:2407
++#, c-format
++msgid "%s: not a COFF file"
++msgstr "%s: није КОФФ датотека"
++
++#: collect2.c:2527
++#, c-format
++msgid "%s: cannot open as COFF file"
++msgstr "%s: не могу да отворим као КОФФ датотеку"
++
++#: collect2.c:2585
++#, c-format
++msgid "library lib%s not found"
++msgstr "библиотека lib%s није нађена"
++
++#: cppspec.c:106
++#, c-format
++msgid "\"%s\" is not a valid option to the preprocessor"
++msgstr "„%s“ није исправна опција предобрађивача"
++
++#: cppspec.c:128
++#, c-format
++msgid "too many input files"
++msgstr "превише улазних датотека"
++
++#: diagnostic.c:186
++#, c-format
++msgid "%s:%d: confused by earlier errors, bailing out\n"
++msgstr "%s:%d: збуњен претходним грешкама, одустајем\n"
++
++#: diagnostic.c:246
++#, c-format
++msgid "compilation terminated due to -Wfatal-errors.\n"
++msgstr "компиловање је прекинуто услед -Wfatal-errors.\n"
++
++#: diagnostic.c:255
++#, c-format
++msgid ""
++"Please submit a full bug report,\n"
++"with preprocessed source if appropriate.\n"
++"See %s for instructions.\n"
++msgstr ""
++"Молимо поднесите пун извештај о грешци,\n"
++"са предобрађеним извором ако је подесно.\n"
++"Погледајте %s за упутства.\n"
++
++#: diagnostic.c:264
++#, c-format
++msgid "compilation terminated.\n"
++msgstr "компиловање прекинуто.\n"
++
++#: diagnostic.c:583
++#, c-format
++msgid "Internal compiler error: Error reporting routines re-entered.\n"
++msgstr "Унутрашња грешка компилатора: Грешка извештавања о рутинама у које је поново уђено.\n"
++
++#: final.c:1110
++msgid "negative insn length"
++msgstr "негативна дужина ије"
++
++#: final.c:2479
++msgid "could not split insn"
++msgstr "нисам могао да поделим ију"
++
++#: final.c:2828
++msgid "invalid 'asm': "
++msgstr "неисправна ‘asm’: "
++
++#: final.c:3011
++#, c-format
++msgid "nested assembly dialect alternatives"
++msgstr "алтернативе дијалекта угњежденог асемблера"
++
++#: final.c:3028 final.c:3040
++#, c-format
++msgid "unterminated assembly dialect alternative"
++msgstr "неодређена алтернатива дијалекта асемблера"
++
++#: final.c:3087
++#, c-format
++msgid "operand number missing after %%-letter"
++msgstr "број операнда недостаје после %%-слова"
++
++#: final.c:3090 final.c:3131
++#, c-format
++msgid "operand number out of range"
++msgstr "број операнда изван опсега"
++
++#: final.c:3150
++#, c-format
++msgid "invalid %%-code"
++msgstr "неисправан %%-код"
++
++#: final.c:3180
++#, c-format
++msgid "'%%l' operand isn't a label"
++msgstr "операнд уз ‘%%l’ није етикета"
++
++#. We can't handle floating point constants;
++#. PRINT_OPERAND must handle them.
++#. We can't handle floating point constants; PRINT_OPERAND must
++#. handle them.
++#. We can't handle floating point constants;
++#. PRINT_OPERAND must handle them.
++#: final.c:3281 vmsdbgout.c:487 config/i386/i386.c:6642
++#: config/pdp11/pdp11.c:1700
++#, c-format
++msgid "floating constant misused"
++msgstr "лоша употреба реалне константе"
++
++#: final.c:3337 vmsdbgout.c:544 config/i386/i386.c:6718
++#: config/pdp11/pdp11.c:1747
++#, c-format
++msgid "invalid expression as operand"
++msgstr "неисправан израз као операнд"
++
++#: flow.c:1699
++msgid "Attempt to delete prologue/epilogue insn:"
++msgstr "Покушај брисања ије пролога/епилога:"
++
++#: gcc.c:1641
++#, c-format
++msgid "Using built-in specs.\n"
++msgstr "Користим уграђене наводе.\n"
++
++#: gcc.c:1824
++#, c-format
++msgid ""
++"Setting spec %s to '%s'\n"
++"\n"
++msgstr ""
++"Постављам навод %s на '%s'\n"
++"\n"
++
++#: gcc.c:1939
++#, c-format
++msgid "Reading specs from %s\n"
++msgstr "Читам наводе из %s\n"
++
++#: gcc.c:2035 gcc.c:2054
++#, c-format
++msgid "specs %%include syntax malformed after %ld characters"
++msgstr "наводи: %%include синтакса лоше формирана после %ld знакова"
++
++#: gcc.c:2062
++#, c-format
++msgid "could not find specs file %s\n"
++msgstr "нисам могао да нађем датотеку навода %s\n"
++
++#: gcc.c:2079 gcc.c:2087 gcc.c:2096 gcc.c:2105
++#, c-format
++msgid "specs %%rename syntax malformed after %ld characters"
++msgstr "наводи: %%rename синтакса лоше формирана после %ld знакова"
++
++#: gcc.c:2114
++#, c-format
++msgid "specs %s spec was not found to be renamed"
++msgstr "наводи: није утврђено да је навод %s преименован"
++
++#: gcc.c:2121
++#, c-format
++msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
++msgstr "%s: покушај преименовања навода ‘%s’ у већ дефинисан навод ‘%s’"
++
++#: gcc.c:2126
++#, c-format
++msgid "rename spec %s to %s\n"
++msgstr "преименуј навод %s у %s\n"
++
++#: gcc.c:2128
++#, c-format
++msgid ""
++"spec is '%s'\n"
++"\n"
++msgstr ""
++"навод је ‘%s’\n"
++"\n"
++
++#: gcc.c:2141
++#, c-format
++msgid "specs unknown %% command after %ld characters"
++msgstr "наводи: непозната %% наредба после %ld знакова"
++
++#: gcc.c:2152 gcc.c:2165
++#, c-format
++msgid "specs file malformed after %ld characters"
++msgstr "датотека навода лоше формирана после %ld знакова"
++
++#: gcc.c:2218
++#, c-format
++msgid "spec file has no spec for linking"
++msgstr "датотека навода нема навод за повезивање"
++
++#: gcc.c:2640
++#, c-format
++msgid "system path '%s' is not absolute"
++msgstr "системска путања ‘%s’ није апсолутна"
++
++#: gcc.c:2703
++#, c-format
++msgid "-pipe not supported"
++msgstr "-pipe није подржано"
++
++#: gcc.c:2765
++#, c-format
++msgid ""
++"\n"
++"Go ahead? (y or n) "
++msgstr ""
++"\n"
++"Наставити? (y или n) "
++
++#: gcc.c:2848
++msgid "failed to get exit status"
++msgstr "нисам успео да добавим излазни статус"
++
++#: gcc.c:2854
++msgid "failed to get process times"
++msgstr "нисам успео да добавим времена процеса"
++
++#: gcc.c:2877
++#, c-format
++msgid ""
++"Internal error: %s (program %s)\n"
++"Please submit a full bug report.\n"
++"See %s for instructions."
++msgstr ""
++"Унутрашња грешка: %s (програм %s)\n"
++"Молимо поднесите пун извештај о грешци.\n"
++"Погледајте %s за упутства."
++
++#: gcc.c:2905
++#, c-format
++msgid "# %s %.2f %.2f\n"
++msgstr "# %s %.2f %.2f\n"
++
++#: gcc.c:3041
++#, c-format
++msgid "Usage: %s [options] file...\n"
++msgstr "Употреба: %s [опције] датотека...\n"
++
++#: gcc.c:3042
++msgid "Options:\n"
++msgstr "Опције:\n"
++
++#: gcc.c:3044
++msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
++msgstr "  -pass-exit-codes         Изађи са највишим кодом грешке из фазе\n"
++
++#: gcc.c:3045
++msgid "  --help                   Display this information\n"
++msgstr "  --help                   Прикажи ове информације\n"
++
++#: gcc.c:3046
++msgid "  --target-help            Display target specific command line options\n"
++msgstr "  --target-help            Прикажи опције командне линије посебне за циљ\n"
++
++#: gcc.c:3048
++msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
++msgstr "  (Употребите „-v --help“ за приказ опција командне линије потпроцесâ)\n"
++
++#: gcc.c:3049
++msgid "  -dumpspecs               Display all of the built in spec strings\n"
++msgstr "  -dumpspecs               Прикажи све уграђене ниске навода\n"
++
++#: gcc.c:3050
++msgid "  -dumpversion             Display the version of the compiler\n"
++msgstr "  -dumpversion             Прикажи верзију компилатора\n"
++
++#: gcc.c:3051
++msgid "  -dumpmachine             Display the compiler's target processor\n"
++msgstr "  -dumpmachine             Прикажи компилаторов циљни процесор\n"
++
++#: gcc.c:3052
++msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
++msgstr ""
++"  -print-search-dirs       Прикажи директоријуме у компилаторовој путањи\n"
++"                           тражења\n"
++
++#: gcc.c:3053
++msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
++msgstr "  -print-libgcc-file-name  Прикажи име придружене библиотеке компилатора\n"
++
++#: gcc.c:3054
++msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
++msgstr "  -print-file-name=<биб>   Прикажу пуну путању до библиотеке <биб>\n"
++
++#: gcc.c:3055
++msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
++msgstr "  -print-prog-name=<прог>  Прикажи пуну путању до компоненте компилатора <прог>\n"
++
++#: gcc.c:3056
++msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
++msgstr "  -print-multi-directory   Прикажи корени директоријум за верзије libgcc\n"
++
++#: gcc.c:3057
++msgid ""
++"  -print-multi-lib         Display the mapping between command line options and\n"
++"                           multiple library search directories\n"
++msgstr ""
++"  -print-multi-lib         Прикажи мапирање између опција командне линије и\n"
++"                           вишеструких директоријума за тражење библиотека\n"
++
++#: gcc.c:3060
++msgid "  -print-multi-os-directory Display the relative path to OS libraries\n"
++msgstr "  -print-multi-os-directory Прикажи релативну путању до библиотека ОСа\n"
++
++#: gcc.c:3061
++msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
++msgstr "  -Wa,<опције>             Проследи зарезима раздвојене <опције> асемблеру\n"
++
++#: gcc.c:3062
++msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
++msgstr "  -Wp,<опције>             Проследи зарезима раздвојене <опције> предобрађивачу\n"
++
++#: gcc.c:3063
++msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
++msgstr "  -Wl,<опције>             Проследи зарезима раздвојене <опције> повезивачу\n"
++
++#: gcc.c:3064
++msgid "  -Xassembler <arg>        Pass <arg> on to the assembler\n"
++msgstr "  -Xassembler <арг>        Проследи <арг> асемблеру\n"
++
++#: gcc.c:3065
++msgid "  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor\n"
++msgstr "  -Xpreprocessor <арг>     Проследи <арг> предобрађивачу\n"
++
++#: gcc.c:3066
++msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
++msgstr "  -Xlinker <арг>           Проследи <арг> повезивачу\n"
++
++#: gcc.c:3067
++msgid "  -combine                 Pass multiple source files to compiler at once\n"
++msgstr "  -combine                 Проследи одједном више изворних датотека компилатору\n"
++
++#: gcc.c:3068
++msgid "  -save-temps              Do not delete intermediate files\n"
++msgstr "  -save-temps              Не бриши међудатотеке\n"
++
++#: gcc.c:3069
++msgid "  -pipe                    Use pipes rather than intermediate files\n"
++msgstr "  -pipe                    Користи цеви пре него међудатотеке\n"
++
++#: gcc.c:3070
++msgid "  -time                    Time the execution of each subprocess\n"
++msgstr "  -time                    Мери време извршавања сваког потпроцеса\n"
++
++#: gcc.c:3071
++msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
++msgstr "  -specs=<датотека>        Потисни уграђене наводе садржајем <датотеке>\n"
++
++#: gcc.c:3072
++msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
++msgstr "  -std=<стандард>          Претпостави да су улазни извори по датом <стандарду>\n"
++
++#: gcc.c:3073
++msgid ""
++"  --sysroot=<directory>    Use <directory> as the root directory for headers\n"
++"                           for headers and libraries\n"
++msgstr ""
++"  --sysroot=<директоријум> Користи <директоријум> као корени директоријум за\n"
++"                           заглавља и библиотеке\n"
++
++#: gcc.c:3076
++msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
++msgstr "  -B <директоријум>        Додај <директоријум> у компилаторове путање тражења\n"
++
++#: gcc.c:3077
++msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
++msgstr "  -b <машина>              Изврши gcc за циљну <машину>, ако је инсталиран\n"
++
++#: gcc.c:3078
++msgid "  -V <version>             Run gcc version number <version>, if installed\n"
++msgstr "  -V <верзија>             Изврши gcc дате <верзије>, ако је инсталирана\n"
++
++#: gcc.c:3079
++msgid "  -v                       Display the programs invoked by the compiler\n"
++msgstr "  -v                       Прикажи програме које компилатор позива\n"
++
++#: gcc.c:3080
++msgid "  -###                     Like -v but options quoted and commands not executed\n"
++msgstr ""
++"  -###                     Као -v али су опције цитиране и наредбе се не\n"
++"                           извршавају\n"
++
++#: gcc.c:3081
++msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
++msgstr ""
++"  -E                       Само предобрада; без компиловања, састављања и\n"
++"                           повезивања\n"
++
++#: gcc.c:3082
++msgid "  -S                       Compile only; do not assemble or link\n"
++msgstr "  -S                       Само компиловање; без састављања или повезивања\n"
++
++#: gcc.c:3083
++msgid "  -c                       Compile and assemble, but do not link\n"
++msgstr "  -c                       Компиловање и састављање, али без повезивања\n"
++
++#: gcc.c:3084
++msgid "  -o <file>                Place the output into <file>\n"
++msgstr "  -o <датотека>            Смести излаз у <датотеку>\n"
++
++#: gcc.c:3085
++msgid ""
++"  -x <language>            Specify the language of the following input files\n"
++"                           Permissible languages include: c c++ assembler none\n"
++"                           'none' means revert to the default behavior of\n"
++"                           guessing the language based on the file's extension\n"
++msgstr ""
++"  -x <језик>               Навођење језика улазних датотека које следе.\n"
++"                           Прихватљиви језици су: c c++ assembler none\n"
++"                           ‘none’ значи враћање на подразумевано понашање,\n"
++"                           погађање језика на основу наставка датотеке\n"
++
++#: gcc.c:3092
++#, c-format
++msgid ""
++"\n"
++"Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
++" passed on to the various sub-processes invoked by %s.  In order to pass\n"
++" other options on to these processes the -W<letter> options must be used.\n"
++msgstr ""
++"\n"
++"Опције које почињу са -g, -f, -m, -O, -W, или --param аутоматски се\n"
++"прослеђују разним потпроцесима које сазива %s. Да би се тим процесима\n"
++"проследиле друге опције, мора се употребити -W<слово>.\n"
++
++#: gcc.c:3215
++#, c-format
++msgid "'-%c' option must have argument"
++msgstr "Опција ‘-%c’ мора имати аргумент"
++
++#: gcc.c:3237
++#, c-format
++msgid "couldn't run '%s': %s"
++msgstr "не могу да извршим ‘%s’: %s"
++
++#. translate_options () has turned --version into -fversion.
++#: gcc.c:3422
++#, c-format
++msgid "%s (GCC) %s\n"
++msgstr "%s (ГЦЦ) %s\n"
++
++#: gcc.c:3424 gcov.c:415 fortran/gfortranspec.c:351 java/gjavah.c:2406
++#: java/jcf-dump.c:931 java/jv-scan.c:129
++msgid "(C)"
++msgstr "©"
++
++#: gcc.c:3425 java/gjavah.c:2407 java/jcf-dump.c:932 java/jv-scan.c:130
++#, c-format
++msgid ""
++"This is free software; see the source for copying conditions.  There is NO\n"
++"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
++"\n"
++msgstr ""
++"Ово је слободан софтвер; погледајте изворе за услове копирања. Нема БИЛО КАКВЕ\n"
++"ГАРАНЦИЈЕ; чак ни за КОМЕРЦИЈАЛНУ ВРЕДНОСТ или ИСПУЊАВАЊЕ ОДРЕЂЕНЕ ПОТРЕБЕ.\n"
++"\n"
++
++#: gcc.c:3526
++#, c-format
++msgid "argument to '-Xlinker' is missing"
++msgstr "недостаје аргумент за ‘-Xlinker’"
++
++#: gcc.c:3534
++#, c-format
++msgid "argument to '-Xpreprocessor' is missing"
++msgstr "недостаје аргумент за ‘-Xpreprocessor’"
++
++#: gcc.c:3541
++#, c-format
++msgid "argument to '-Xassembler' is missing"
++msgstr "недостаје аргумент за ‘-Xassembler’"
++
++#: gcc.c:3548
++#, c-format
++msgid "argument to '-l' is missing"
++msgstr "недостаје аргумент за ‘-l’"
++
++#: gcc.c:3569
++#, c-format
++msgid "argument to '-specs' is missing"
++msgstr "недостаје аргумент за ‘-specs’"
++
++#: gcc.c:3583
++#, c-format
++msgid "argument to '-specs=' is missing"
++msgstr "недостаје аргумент за ‘-specs=’"
++
++#: gcc.c:3621
++#, c-format
++msgid "'-%c' must come at the start of the command line"
++msgstr "‘-%c’ се мора наћи на почетку командне линије"
++
++#: gcc.c:3630
++#, c-format
++msgid "argument to '-B' is missing"
++msgstr "недостаје аргумент за ‘-B’"
++
++#: gcc.c:4016
++#, c-format
++msgid "argument to '-x' is missing"
++msgstr "недостаје аргумент за ‘-x’"
++
++#: gcc.c:4044
++#, c-format
++msgid "argument to '-%s' is missing"
++msgstr "недостаје аргумент за ‘-%s’"
++
++#: gcc.c:4382
++#, c-format
++msgid "switch '%s' does not start with '-'"
++msgstr "прекидач ‘%s’ не почиње са ‘-’"
++
++#: gcc.c:4612
++#, c-format
++msgid "spec '%s' invalid"
++msgstr "неисправан навод ‘%s’"
++
++#: gcc.c:4678
++#, c-format
++msgid "%s\n"
++msgstr "%s\n"
++
++#: gcc.c:4751
++#, c-format
++msgid "spec '%s' has invalid '%%0%c'"
++msgstr "навод ‘%s’ има неисправно ‘%%0%c’"
++
++#: gcc.c:4948
++#, c-format
++msgid "spec '%s' has invalid '%%W%c"
++msgstr "навод ‘%s’ има неисправно ‘%%W%c’"
++
++#: gcc.c:4979
++#, c-format
++msgid "spec '%s' has invalid '%%x%c'"
++msgstr "навод ‘%s’ има неисправно ‘%%x%c’"
++
++#: gcc.c:5201
++#, c-format
++msgid "Processing spec %c%s%c, which is '%s'\n"
++msgstr "Обрађујем навод %c%s%c, који је ‘%s’\n"
++
++#: gcc.c:5343
++#, c-format
++msgid "unknown spec function '%s'"
++msgstr "непозната функција навода ‘%s’"
++
++#: gcc.c:5362
++#, c-format
++msgid "error in args to spec function '%s'"
++msgstr "грешка у аргументима за функцију навода ‘%s’"
++
++#: gcc.c:5410
++#, c-format
++msgid "malformed spec function name"
++msgstr "лоше формирано име функције навода"
++
++#. )
++#: gcc.c:5413
++#, c-format
++msgid "no arguments for spec function"
++msgstr "нема аргумената за функцију навода"
++
++#: gcc.c:5432
++#, c-format
++msgid "malformed spec function arguments"
++msgstr "лоше формирани аргументи функције навода"
++
++#: gcc.c:5671
++#, c-format
++msgid "braced spec '%s' is invalid at '%c'"
++msgstr "навод ‘%s’ у витичастим заградама није исправан код ‘%c’"
++
++#: gcc.c:5759
++#, c-format
++msgid "braced spec body '%s' is invalid"
++msgstr "тело навода ‘%s’ у витичастим заградама није исправно"
++
++#: gcc.c:6306
++#, c-format
++msgid "install: %s%s\n"
++msgstr "инсталирање: %s%s\n"
++
++#: gcc.c:6307
++#, c-format
++msgid "programs: %s\n"
++msgstr "програми: %s\n"
++
++#: gcc.c:6308
++#, c-format
++msgid "libraries: %s\n"
++msgstr "библиотеке: %s\n"
++
++#: gcc.c:6365
++#, c-format
++msgid ""
++"\n"
++"For bug reporting instructions, please see:\n"
++msgstr ""
++"\n"
++"За упутства за пријављивање грешака, погледајте:\n"
++
++#: gcc.c:6381
++#, c-format
++msgid "Target: %s\n"
++msgstr "Циљ: %s\n"
++
++#: gcc.c:6382
++#, c-format
++msgid "Configured with: %s\n"
++msgstr "Конфигурисано помоћу: %s\n"
++
++#: gcc.c:6396
++#, c-format
++msgid "Thread model: %s\n"
++msgstr "Нитни модел: %s\n"
++
++#: gcc.c:6407
++#, c-format
++msgid "gcc version %s\n"
++msgstr "gcc верзија %s\n"
++
++#: gcc.c:6409
++#, c-format
++msgid "gcc driver version %s executing gcc version %s\n"
++msgstr "gcc драјвер верзије %s извршава gcc верзију %s\n"
++
++#: gcc.c:6417
++#, c-format
++msgid "no input files"
++msgstr "нема улазних датотека"
++
++#: gcc.c:6466
++#, c-format
++msgid "cannot specify -o with -c or -S with multiple files"
++msgstr "не може се задати -o са -c или -S кад има више датотека"
++
++#: gcc.c:6500
++#, c-format
++msgid "spec '%s' is invalid"
++msgstr "навод ‘%s’ није исправан"
++
++#: gcc.c:6965
++#, c-format
++msgid "multilib spec '%s' is invalid"
++msgstr "вишебиб. навод ‘%s’ није исправан"
++
++#: gcc.c:7157
++#, c-format
++msgid "multilib exclusions '%s' is invalid"
++msgstr "вишебиб. искључење ‘%s’ није исправно"
++
++#: gcc.c:7215 gcc.c:7356
++#, c-format
++msgid "multilib select '%s' is invalid"
++msgstr "вишебиб. избор ‘%s’ није исправан"
++
++#: gcc.c:7394
++#, c-format
++msgid "multilib exclusion '%s' is invalid"
++msgstr "вишебиб. искључење ‘%s’ није исправно"
++
++#: gcc.c:7653 gcc.c:7658
++#, c-format
++msgid "invalid version number `%s'"
++msgstr "неисправан број верзије ‘%s’"
++
++#: gcc.c:7701
++#, c-format
++msgid "too few arguments to %%:version-compare"
++msgstr "премало аргумената за %%:version-compare"
++
++#: gcc.c:7707
++#, c-format
++msgid "too many arguments to %%:version-compare"
++msgstr "премало аргумената за %%:version-compare"
++
++#: gcc.c:7748
++#, c-format
++msgid "unknown operator '%s' in %%:version-compare"
++msgstr "непознате оператор ‘%s’ у %%:version-compare"
++
++#: gcov.c:388
++#, c-format
++msgid ""
++"Usage: gcov [OPTION]... SOURCEFILE\n"
++"\n"
++msgstr ""
++"Употреба: gcov [ОПЦИЈА]... ИЗВОРНА_ДАТОТЕКА\n"
++"\n"
++
++#: gcov.c:389
++#, c-format
++msgid ""
++"Print code coverage information.\n"
++"\n"
++msgstr ""
++"Испиши податке о покривености кôда.\n"
++"\n"
++
++#: gcov.c:390
++#, c-format
++msgid "  -h, --help                      Print this help, then exit\n"
++msgstr "  -h, --help                      Испиши ову помоћ, затим изађи\n"
++
++#: gcov.c:391
++#, c-format
++msgid "  -v, --version                   Print version number, then exit\n"
++msgstr "  -v, --version                   Испиши број верзије, затим изађи\n"
++
++#: gcov.c:392
++#, c-format
++msgid "  -a, --all-blocks                Show information for every basic block\n"
++msgstr "  -a, --all-blocks                Прикажи податке за сваки основни блок\n"
++
++#: gcov.c:393
++#, c-format
++msgid "  -b, --branch-probabilities      Include branch probabilities in output\n"
++msgstr "  -b, --branch-probabilities      Укључи вероватноће гранања у излаз\n"
++
++#: gcov.c:394
++#, c-format
++msgid ""
++"  -c, --branch-counts             Given counts of branches taken\n"
++"                                    rather than percentages\n"
++msgstr ""
++"  -c, --branch-counts             Дати збирови извршених гранања\n"
++"                                    пре него проценти\n"
++
++#: gcov.c:396
++#, c-format
++msgid "  -n, --no-output                 Do not create an output file\n"
++msgstr "  -n, --no-output                 Не прави излазну датотеку\n"
++
++#: gcov.c:397
++#, c-format
++msgid ""
++"  -l, --long-file-names           Use long output file names for included\n"
++"                                    source files\n"
++msgstr ""
++"  -l, --long-file-names           Користи дуга излазна имена датотека за\n"
++"                                    изворне датотеке\n"
++
++#: gcov.c:399
++#, c-format
++msgid "  -f, --function-summaries        Output summaries for each function\n"
++msgstr "  -f, --function-summaries        Испиши сажетке за сваку функцију\n"
++
++#: gcov.c:400
++#, c-format
++msgid "  -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
++msgstr ""
++"  -o, --object-directory ДИР|ТЕКА Тражи објектне датотеке у ДИРу или по\n"
++"                                  имену ТЕКА\n"
++
++#: gcov.c:401
++#, c-format
++msgid "  -p, --preserve-paths            Preserve all pathname components\n"
++msgstr "  -p, --preserve-paths            Чувај све делове путање\n"
++
++#: gcov.c:402
++#, c-format
++msgid "  -u, --unconditional-branches    Show unconditional branch counts too\n"
++msgstr "  -u, --unconditional-branches    Прикажи и збирове безусловних гранања\n"
++
++#: gcov.c:403
++#, c-format
++msgid ""
++"\n"
++"For bug reporting instructions, please see:\n"
++"%s.\n"
++msgstr ""
++"\n"
++"За упутства за пријаву грешака, погледајте:\n"
++"%s.\n"
++
++#: gcov.c:413
++#, c-format
++msgid "gcov (GCC) %s\n"
++msgstr "gcov (ГЦЦ) %s\n"
++
++#: gcov.c:417
++#, c-format
++msgid ""
++"This is free software; see the source for copying conditions.\n"
++"There is NO warranty; not even for MERCHANTABILITY or \n"
++"FITNESS FOR A PARTICULAR PURPOSE.\n"
++"\n"
++msgstr ""
++"Ово је слободан софтвер; погледајте изворе за услове копирања. Нема БИЛО КАКВЕ\n"
++"ГАРАНЦИЈЕ; чак ни за КОМЕРЦИЈАЛНУ ВРЕДНОСТ или ИСПУЊАВАЊЕ ОДРЕЂЕНЕ ПОТРЕБЕ.\n"
++"\n"
++
++#: gcov.c:507
++#, c-format
++msgid "%s:no functions found\n"
++msgstr "%s: ниједна функција није нађена\n"
++
++#: gcov.c:528 gcov.c:556 fortran/dump-parse-tree.c:68
++#, c-format
++msgid "\n"
++msgstr "\n"
++
++#: gcov.c:543
++#, c-format
++msgid "%s:creating '%s'\n"
++msgstr "%s:правим ‘%s’\n"
++
++#: gcov.c:547
++#, c-format
++msgid "%s:error writing output file '%s'\n"
++msgstr "%s:грешка при писању у излазну датотеку ‘%s’\n"
++
++#: gcov.c:552
++#, c-format
++msgid "%s:could not open output file '%s'\n"
++msgstr "%s:нисам могао да отворим излазну датотеку ‘%s’\n"
++
++#: gcov.c:703
++#, c-format
++msgid "%s:cannot open graph file\n"
++msgstr "%s:не могу да отворим датотеку графа\n"
++
++#: gcov.c:709
++#, c-format
++msgid "%s:not a gcov graph file\n"
++msgstr "%s:није датотека графа гкова\n"
++
++#: gcov.c:722
++#, c-format
++msgid "%s:version '%.4s', prefer '%.4s'\n"
++msgstr "%s:верзија ‘%.4s’, боље је ‘%.4s’\n"
++
++#: gcov.c:774
++#, c-format
++msgid "%s:already seen blocks for '%s'\n"
++msgstr "%s:већ виђени блокови за ‘%s’\n"
++
++#: gcov.c:892 gcov.c:1048
++#, c-format
++msgid "%s:corrupted\n"
++msgstr "%s:искварено\n"
++
++#: gcov.c:966
++#, c-format
++msgid "%s:cannot open data file\n"
++msgstr "%s:не могу да отворим датотеку података\n"
++
++#: gcov.c:971
++#, c-format
++msgid "%s:not a gcov data file\n"
++msgstr "%s: није датотека података гкова\n"
++
++#: gcov.c:984
++#, c-format
++msgid "%s:version '%.4s', prefer version '%.4s'\n"
++msgstr "%s:верзија ‘%.4s’, боља је ‘%.4s’\n"
++
++#: gcov.c:990
++#, c-format
++msgid "%s:stamp mismatch with graph file\n"
++msgstr "%s:неслагање печата са датотеком графа\n"
++
++#: gcov.c:1016
++#, c-format
++msgid "%s:unknown function '%u'\n"
++msgstr "%s:непозната функција ‘%u’\n"
++
++#: gcov.c:1029
++#, c-format
++msgid "%s:profile mismatch for '%s'\n"
++msgstr "%s:неслагање профила за ‘%s’\n"
++
++#: gcov.c:1048
++#, c-format
++msgid "%s:overflowed\n"
++msgstr "%s:преливено\n"
++
++#: gcov.c:1072
++#, c-format
++msgid "%s:'%s' lacks entry and/or exit blocks\n"
++msgstr "%s:‘%s’ нема улазине и/или излазне блокове\n"
++
++#: gcov.c:1077
++#, c-format
++msgid "%s:'%s' has arcs to entry block\n"
++msgstr "%s:‘%s’ има лукове до улазног блока\n"
++
++#: gcov.c:1085
++#, c-format
++msgid "%s:'%s' has arcs from exit block\n"
++msgstr "%s:‘%s’ има лукове из излазног блока\n"
++
++#: gcov.c:1293
++#, c-format
++msgid "%s:graph is unsolvable for '%s'\n"
++msgstr "%s:граф је нерешив за ‘%s’\n"
++
++#: gcov.c:1373
++#, c-format
++msgid "%s '%s'\n"
++msgstr "%s ‘%s’\n"
++
++#: gcov.c:1376
++#, c-format
++msgid "Lines executed:%s of %d\n"
++msgstr "Извршено линија:%s од %d\n"
++
++#: gcov.c:1380
++#, c-format
++msgid "No executable lines\n"
++msgstr "Нема извршивих линија\n"
++
++#: gcov.c:1386
++#, c-format
++msgid "Branches executed:%s of %d\n"
++msgstr "Извршених гранања:%s од %d\n"
++
++#: gcov.c:1390
++#, c-format
++msgid "Taken at least once:%s of %d\n"
++msgstr "Извршених бар једном:%s од %d\n"
++
++#: gcov.c:1396
++#, c-format
++msgid "No branches\n"
++msgstr "Нема гранања\n"
++
++#: gcov.c:1398
++#, c-format
++msgid "Calls executed:%s of %d\n"
++msgstr "Извршених позива:%s од %d\n"
++
++#: gcov.c:1402
++#, c-format
++msgid "No calls\n"
++msgstr "Нема позива\n"
++
++#: gcov.c:1543
++#, c-format
++msgid "%s:no lines for '%s'\n"
++msgstr "%s:нема линија за ‘%s’\n"
++
++#: gcov.c:1738
++#, c-format
++msgid "call   %2d returned %s\n"
++msgstr "позив   %2d се вратио %s\n"
++
++#: gcov.c:1743
++#, c-format
++msgid "call   %2d never executed\n"
++msgstr "позив   %2d никада није извршен\n"
++
++#: gcov.c:1748
++#, c-format
++msgid "branch %2d taken %s%s\n"
++msgstr "грана %2d извршена %s%s\n"
++
++#: gcov.c:1752
++#, c-format
++msgid "branch %2d never executed\n"
++msgstr "грана %2d никада није извршена\n"
++
++#: gcov.c:1757
++#, c-format
++msgid "unconditional %2d taken %s\n"
++msgstr "безусловни %2d извршен %s\n"
++
++#: gcov.c:1760
++#, c-format
++msgid "unconditional %2d never executed\n"
++msgstr "безусловни %2d никад није извршен\n"
++
++#: gcov.c:1792
++#, c-format
++msgid "%s:cannot open source file\n"
++msgstr "%s:не могу да отворим изворну датотеку\n"
++
++#: gcov.c:1802
++#, c-format
++msgid "%s:source file is newer than graph file '%s'\n"
++msgstr "%s:изворна датотека је новија од датотеке графа ‘%s’\n"
++
++#. Return if there's nothing to do, or it is too expensive.
++#: gcse.c:694
++msgid "GCSE disabled"
++msgstr "ГЦСЕ искључен"
++
++#. Return if there's nothing to do, or it is too expensive.
++#: gcse.c:6526
++msgid "jump bypassing disabled"
++msgstr "заобилажење скокова искључено"
++
++#. Opening quotation mark.
++#: intl.c:58
++msgid "`"
++msgstr "‘"
++
++#. Closing quotation mark.
++#: intl.c:61
++msgid "'"
++msgstr "’"
++
++#: ipa-inline.c:275
++msgid "--param large-function-growth limit reached"
++msgstr "--param large-function-growth ограничење достигнуто"
++
++#: ipa-inline.c:305
++msgid "--param max-inline-insns-single limit reached"
++msgstr "--param max-inline-insns-single ограничење достигнуто"
++
++#: ipa-inline.c:314
++msgid "--param max-inline-insns-auto limit reached"
++msgstr "--param max-inline-insns-auto ограничење достигнуто"
++
++#: ipa-inline.c:340 ipa-inline.c:766
++msgid "recursive inlining"
++msgstr "рекурзивно уткивање"
++
++#: ipa-inline.c:779
++msgid "call is unlikely"
++msgstr "позив није вероватан"
++
++#: ipa-inline.c:850
++msgid "--param inline-unit-growth limit reached"
++msgstr "--param inline-unit-growth ограничење достигнуто"
++
++#: langhooks.c:507
++msgid "At top level:"
++msgstr "На највишем нивоу:"
++
++#: langhooks.c:512
++#, c-format
++msgid "In member function %qs:"
++msgstr "У чланској функцији %qs:"
++
++#: langhooks.c:516
++#, c-format
++msgid "In function %qs:"
++msgstr "У функцији %qs:"
++
++#: loop-iv.c:2709 tree-ssa-loop-niter.c:1109
++msgid "assuming that the loop is not infinite"
++msgstr "под претпоставком да петља није бесконачна"
++
++#: loop-iv.c:2710 tree-ssa-loop-niter.c:1110
++msgid "cannot optimize possibly infinite loops"
++msgstr "не могу да оптимизујем могуће бесконачне петље"
++
++#: loop-iv.c:2718 tree-ssa-loop-niter.c:1114
++msgid "assuming that the loop counter does not overflow"
++msgstr "под претпоставком да се бројач петље не прелива"
++
++#: loop-iv.c:2719 tree-ssa-loop-niter.c:1115
++msgid "cannot optimize loop, the loop counter may overflow"
++msgstr "не могу да оптимизујем петљу, бројач петље се може прелити"
++
++#. What to print when a switch has no documentation.
++#: opts.c:90
++msgid "This switch lacks documentation"
++msgstr "Овом прекидачу недостаје документација"
++
++#: opts.c:1227
++#, c-format
++msgid ""
++"\n"
++"Target specific options:\n"
++msgstr ""
++"\n"
++"Опције посебне за циљ:\n"
++
++#: opts.c:1248
++msgid "The following options are language-independent:\n"
++msgstr "Следеће опције не зависе од језика:\n"
++
++#: opts.c:1255
++#, c-format
++msgid ""
++"The %s front end recognizes the following options:\n"
++"\n"
++msgstr ""
++"Прочеље %s разликује следеће опције:\n"
++"\n"
++
++#: opts.c:1268
++msgid "The --param option recognizes the following as parameters:\n"
++msgstr "Опција --param препознаје следеће параметре:\n"
++
++#: protoize.c:583
++#, c-format
++msgid "%s: error writing file '%s': %s\n"
++msgstr "%s: грешка при писању у датотеку ‘%s’: %s\n"
++
++#: protoize.c:627
++#, c-format
++msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
++msgstr "%s: употреба ‘%s [ -VqfnkN ] [ -i <и-ниска> ] [ датотека ... ]’\n"
++
++#: protoize.c:630
++#, c-format
++msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
++msgstr "%s: употреба ‘%s [ -VqfnkNlgC ] [ -B <имедира> ] [ датотека ... ]’\n"
++
++#: protoize.c:731
++#, c-format
++msgid "%s: warning: no read access for file '%s'\n"
++msgstr "%s: упозорење: нема дозволе за читање датотеке ‘%s’\n"
++
++#: protoize.c:739
++#, c-format
++msgid "%s: warning: no write access for file '%s'\n"
++msgstr "%s: упозорење: нема дозволе за писање датотеке ‘%s’\n"
++
++#: protoize.c:747
++#, c-format
++msgid "%s: warning: no write access for dir containing '%s'\n"
++msgstr "%s: упозорење: нема дозволе за писање у директоријум који садржи ‘%s’\n"
++
++#. Catch cases like /.. where we try to backup to a
++#. point above the absolute root of the logical file
++#. system.
++#: protoize.c:1134
++#, c-format
++msgid "%s: invalid file name: %s\n"
++msgstr "%s: неисправно име датотеке: %s\n"
++
++#: protoize.c:1282
++#, c-format
++msgid "%s: %s: can't get status: %s\n"
++msgstr "%s: %s: не могу да добавим стање: %s\n"
++
++#: protoize.c:1303
++#, c-format
++msgid ""
++"\n"
++"%s: fatal error: aux info file corrupted at line %d\n"
++msgstr ""
++"\n"
++"%s: кобна грешка: помоћна инфотека искварена у линији %d\n"
++
++#: protoize.c:1632
++#, c-format
++msgid "%s:%d: declaration of function '%s' takes different forms\n"
++msgstr "%s:%d: декларација функције ‘%s’ има различите облике\n"
++
++#: protoize.c:1887
++#, c-format
++msgid "%s: compiling '%s'\n"
++msgstr "%s: компилујем ‘%s’\n"
++
++#: protoize.c:1910
++#, c-format
++msgid "%s: wait: %s\n"
++msgstr "%s: чекање: %s\n"
++
++#: protoize.c:1915
++#, c-format
++msgid "%s: subprocess got fatal signal %d\n"
++msgstr "%s: потпроцес је добио кобни сигнал %d\n"
++
++#: protoize.c:1923
++#, c-format
++msgid "%s: %s exited with status %d\n"
++msgstr "%s: %s изађе са статусом %d\n"
++
++#: protoize.c:1972
++#, c-format
++msgid "%s: warning: missing SYSCALLS file '%s'\n"
++msgstr "%s: упозорење: недостаје СИСКОЛС датотека ‘%s’\n"
++
++#: protoize.c:1981 protoize.c:2010
++#, c-format
++msgid "%s: can't read aux info file '%s': %s\n"
++msgstr "%s: не могу да прочитам помоћну инфотеку ‘%s’: %s\n"
++
++#: protoize.c:2026 protoize.c:2054
++#, c-format
++msgid "%s: can't get status of aux info file '%s': %s\n"
++msgstr "%s: не могу да добавим стање помоћне инфотеке ‘%s’: %s\n"
++
++#: protoize.c:2082
++#, c-format
++msgid "%s: can't open aux info file '%s' for reading: %s\n"
++msgstr "%s: не могу да отворим помоћну инфотеку ‘%s’ за читање: %s\n"
++
++#: protoize.c:2100
++#, c-format
++msgid "%s: error reading aux info file '%s': %s\n"
++msgstr "%s: грешка при читању помоћне инфотеке ‘%s’: %s\n"
++
++#: protoize.c:2113
++#, c-format
++msgid "%s: error closing aux info file '%s': %s\n"
++msgstr "%s: грешка при затварању помоћне инфотеке ‘%s’: %s\n"
++
++#: protoize.c:2129
++#, c-format
++msgid "%s: can't delete aux info file '%s': %s\n"
++msgstr "%s: не могу да обришем помоћну инфотеку ‘%s’: %s\n"
++
++#: protoize.c:2211 protoize.c:4180
++#, c-format
++msgid "%s: can't delete file '%s': %s\n"
++msgstr "%s: не могу да обришем датотеку ‘%s’: %s\n"
++
++#: protoize.c:2289
++#, c-format
++msgid "%s: warning: can't rename file '%s' to '%s': %s\n"
++msgstr "%s: упозорење: не могу да преименујем датотеку ‘%s’ у ‘%s’: %s\n"
++
++#: protoize.c:2411
++#, c-format
++msgid "%s: conflicting extern definitions of '%s'\n"
++msgstr "%s: сукобљене спољашње дефиниције за ‘%s’\n"
++
++#: protoize.c:2415
++#, c-format
++msgid "%s: declarations of '%s' will not be converted\n"
++msgstr "%s: декларације од ‘%s’ неће бити претворене\n"
++
++#: protoize.c:2417
++#, c-format
++msgid "%s: conflict list for '%s' follows:\n"
++msgstr "%s: листа сукоба за ‘%s’ следи:\n"
++
++#: protoize.c:2450
++#, c-format
++msgid "%s: warning: using formals list from %s(%d) for function '%s'\n"
++msgstr "%s: упозорење: користим формалну листу из %s(%d) за функцију ‘%s’\n"
++
++#: protoize.c:2490
++#, c-format
++msgid "%s: %d: '%s' used but missing from SYSCALLS\n"
++msgstr "%s: %d: ‘%s’ се користи али недостаје у СИСКОЛСу\n"
++
++#: protoize.c:2496
++#, c-format
++msgid "%s: %d: warning: no extern definition for '%s'\n"
++msgstr "%s: %d: упозорење: нема спољашње дефиниције за ‘%s’\n"
++
++#: protoize.c:2526
++#, c-format
++msgid "%s: warning: no static definition for '%s' in file '%s'\n"
++msgstr "%s: упозорење: нема статичке дефиниције за ‘%s’ у датотеци ‘%s’\n"
++
++#: protoize.c:2532
++#, c-format
++msgid "%s: multiple static defs of '%s' in file '%s'\n"
++msgstr "%s: више статичких дефиниција за ‘%s’ у датотеци ‘%s’\n"
++
++#: protoize.c:2702 protoize.c:2705
++#, c-format
++msgid "%s: %d: warning: source too confusing\n"
++msgstr "%s: %d: упозорење: извор је превише збуњујући\n"
++
++#: protoize.c:2900
++#, c-format
++msgid "%s: %d: warning: varargs function declaration not converted\n"
++msgstr "%s: %d: упозорење: декларација варарг функције није претворена\n"
++
++#: protoize.c:2915
++#, c-format
++msgid "%s: declaration of function '%s' not converted\n"
++msgstr "%s: декларација функције ‘%s’ није претворена\n"
++
++#: protoize.c:3038
++#, c-format
++msgid "%s: warning: too many parameter lists in declaration of '%s'\n"
++msgstr "%s: упозорење: превише параметарских листа у декларацији ‘%s’\n"
++
++#: protoize.c:3059
++#, c-format
++msgid ""
++"\n"
++"%s: warning: too few parameter lists in declaration of '%s'\n"
++msgstr ""
++"\n"
++"%s: упозорење: премало параметарских листа у декларацији ‘%s’\n"
++
++#: protoize.c:3155
++#, c-format
++msgid "%s: %d: warning: found '%s' but expected '%s'\n"
++msgstr "%s: %d: упозорење: нађох ‘%s’ а очекивах ‘%s’\n"
++
++#: protoize.c:3330
++#, c-format
++msgid "%s: local declaration for function '%s' not inserted\n"
++msgstr "%s: локална декларација за функцију ‘%s’ није уметнута\n"
++
++#: protoize.c:3357
++#, c-format
++msgid ""
++"\n"
++"%s: %d: warning: can't add declaration of '%s' into macro call\n"
++msgstr ""
++"\n"
++"%s: %d: упозорење: не могу да додам декларацију ‘%s’ у позив макроа\n"
++
++#: protoize.c:3429
++#, c-format
++msgid "%s: global declarations for file '%s' not inserted\n"
++msgstr "%s: глобалне декларације за датотеку ‘%s’ нису уметнуте\n"
++
++#: protoize.c:3518 protoize.c:3548
++#, c-format
++msgid "%s: definition of function '%s' not converted\n"
++msgstr "%s: дефиниција функције ‘%s’ није претворена\n"
++
++#: protoize.c:3537
++#, c-format
++msgid "%s: %d: warning: definition of %s not converted\n"
++msgstr "%s: %d: упозорење: дефиниција за %s није претворена\n"
++
++#: protoize.c:3863
++#, c-format
++msgid "%s: found definition of '%s' at %s(%d)\n"
++msgstr "%s: нађох дефиницију за ‘%s’ код %s(%d)\n"
++
++#. If we make it here, then we did not know about this
++#. function definition.
++#: protoize.c:3879
++#, c-format
++msgid "%s: %d: warning: '%s' excluded by preprocessing\n"
++msgstr "%s: %d: упозорење: ‘%s’ искључено предобрадом\n"
++
++#: protoize.c:3882
++#, c-format
++msgid "%s: function definition not converted\n"
++msgstr "%s: дефиниција функције није претворена\n"
++
++#: protoize.c:3940
++#, c-format
++msgid "%s: '%s' not converted\n"
++msgstr "%s: ‘%s’ није претворено\n"
++
++#: protoize.c:3948
++#, c-format
++msgid "%s: would convert file '%s'\n"
++msgstr "%s: претворио би датотеку ‘%s’\n"
++
++#: protoize.c:3951
++#, c-format
++msgid "%s: converting file '%s'\n"
++msgstr "%s: претварам датотеку ‘%s’\n"
++
++#: protoize.c:3961
++#, c-format
++msgid "%s: can't get status for file '%s': %s\n"
++msgstr "%s: не могу да добавим стање датотеке ‘%s’: %s\n"
++
++#: protoize.c:4003
++#, c-format
++msgid "%s: can't open file '%s' for reading: %s\n"
++msgstr "%s: не могу да отворим датотеку ‘%s’ за читање: %s\n"
++
++#: protoize.c:4018
++#, c-format
++msgid ""
++"\n"
++"%s: error reading input file '%s': %s\n"
++msgstr ""
++"\n"
++"%s: грешка при читању улазне датотеке ‘%s’: %s\n"
++
++#: protoize.c:4052
++#, c-format
++msgid "%s: can't create/open clean file '%s': %s\n"
++msgstr "%s: не могу да направим/отворим чисту датотеку ‘%s’: %s\n"
++
++#: protoize.c:4157
++#, c-format
++msgid "%s: warning: file '%s' already saved in '%s'\n"
++msgstr "%s: упозорење: датотека ‘%s’ је већ сачувана у ‘%s’\n"
++
++#: protoize.c:4165
++#, c-format
++msgid "%s: can't link file '%s' to '%s': %s\n"
++msgstr "%s: не могу да повежем датотеку ‘%s’ са ‘%s’: %s\n"
++
++#: protoize.c:4195
++#, c-format
++msgid "%s: can't create/open output file '%s': %s\n"
++msgstr "%s: не могу да направим/отворим улазну датотеку ‘%s’: %s\n"
++
++#: protoize.c:4228
++#, c-format
++msgid "%s: can't change mode of file '%s': %s\n"
++msgstr "%s: не могу да променим режим датотеке ‘%s’: %s\n"
++
++#: protoize.c:4404
++#, c-format
++msgid "%s: cannot get working directory: %s\n"
++msgstr "%s: не могу да добавим радни директоријум: %s\n"
++
++#: protoize.c:4502
++#, c-format
++msgid "%s: input file names must have .c suffixes: %s\n"
++msgstr "%s: улазне датотеке морају имати наставке .c: %s\n"
++
++#: reload.c:3738
++msgid "unable to generate reloads for:"
++msgstr "не могу да створим поновљена учитавања за:"
++
++#: reload1.c:1901
++msgid "this is the insn:"
++msgstr "ово је ија:"
++
++#. It's the compiler's fault.
++#: reload1.c:5103
++msgid "could not find a spill register"
++msgstr "нисам могао да нађем регистар просипања"
++
++#. It's the compiler's fault.
++#: reload1.c:6737
++msgid "VOIDmode on an output"
++msgstr "VOIDmode на излазу"
++
++#: reload1.c:7710
++msgid "Failure trying to reload:"
++msgstr "Неуспех при покушају поновљеног учитавања:"
++
++#: rtl-error.c:128
++msgid "unrecognizable insn:"
++msgstr "непрепознатљива ија:"
++
++#: rtl-error.c:130
++msgid "insn does not satisfy its constraints:"
++msgstr "ија не задовољава своја ограничења:"
++
++#: timevar.c:412
++msgid ""
++"\n"
++"Execution times (seconds)\n"
++msgstr ""
++"\n"
++"Времена извршавања (секунде)\n"
++
++#. Print total time.
++#: timevar.c:470
++msgid " TOTAL                 :"
++msgstr " УКУПНО                :"
++
++#: timevar.c:499
++#, c-format
++msgid "time in %s: %ld.%06ld (%ld%%)\n"
++msgstr "време у %s: %ld.%06ld (%ld%%)\n"
++
++#: tlink.c:384
++#, c-format
++msgid "collect: reading %s\n"
++msgstr "collect: читам %s\n"
++
++#: tlink.c:478
++#, c-format
++msgid "removing .rpo file"
++msgstr "уклањам .rpo датотеку"
++
++#: tlink.c:480
++#, c-format
++msgid "renaming .rpo file"
++msgstr "преименујем .rpo датотеку"
++
++#: tlink.c:534
++#, c-format
++msgid "collect: recompiling %s\n"
++msgstr "collect: поново компилујем %s\n"
++
++#: tlink.c:714
++#, c-format
++msgid "collect: tweaking %s in %s\n"
++msgstr "collect: штелујем %s у %s\n"
++
++#: tlink.c:764
++#, c-format
++msgid "collect: relinking\n"
++msgstr "collect: поново повезујем\n"
++
++#: toplev.c:583
++#, c-format
++msgid "unrecoverable error"
++msgstr "неповратна грешка"
++
++#: toplev.c:1115
++#, c-format
++msgid ""
++"%s%s%s version %s (%s)\n"
++"%s\tcompiled by GNU C version %s.\n"
++msgstr ""
++"%s%s%s верзија %s (%s)\n"
++"%s\tкомпиловано Гнуовим Ц-ом верзија %s.\n"
++
++#: toplev.c:1117
++#, c-format
++msgid "%s%s%s version %s (%s) compiled by CC.\n"
++msgstr "%s%s%s верзија %s (%s) компиловано ЦЦом.\n"
++
++#: toplev.c:1121
++#, c-format
++msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
++msgstr "%s%sГГЦова хеуристика: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
++
++#: toplev.c:1183
++msgid "options passed: "
++msgstr "прослеђене опције: "
++
++#: toplev.c:1212
++msgid "options enabled: "
++msgstr "укључене опције: "
++
++#: toplev.c:1331
++#, c-format
++msgid "created and used with differing settings of '%s'"
++msgstr "направљено и употребљено са различитим поставкама за ‘%s’"
++
++#: toplev.c:1333
++msgid "out of memory"
++msgstr "нема меморије"
++
++#: toplev.c:1348
++msgid "created and used with different settings of -fpic"
++msgstr "направљено и употребљено са различитим поставкама за -fpic"
++
++#: toplev.c:1350
++msgid "created and used with different settings of -fpie"
++msgstr "направљено и употребљено са различитим поставкама за -fpie"
++
++#: tree-inline.c:2026
++msgid "originally indirect function call not considered for inlining"
++msgstr "изворно посредан позив функције се не разматра за уткивање"
++
++#.
++#. Local variables:
++#. mode:c
++#. End:
++#.
++#: diagnostic.def:1
++msgid "fatal error: "
++msgstr "кобна грешка: "
++
++#: diagnostic.def:2
++msgid "internal compiler error: "
++msgstr "унутрашња грешка компилатора: "
++
++#: diagnostic.def:3
++msgid "error: "
++msgstr "грешка: "
++
++#: diagnostic.def:4
++msgid "sorry, unimplemented: "
++msgstr "извините, није имплементирано: "
++
++#: diagnostic.def:5
++msgid "warning: "
++msgstr "упозорење: "
++
++#: diagnostic.def:6
++msgid "anachronism: "
++msgstr "анахронизам: "
++
++#: diagnostic.def:7
++msgid "note: "
++msgstr "напомена: "
++
++#: diagnostic.def:8
++msgid "debug: "
++msgstr "исправљање: "
++
++#: params.def:48
++msgid "The maximum number of fields in a structure variable without direct structure accesses that GCC will attempt to track separately"
++msgstr "Највећи број поља у структурној променљивој без непосредног приступа структури које ће ГЦЦ покушати да прати одвојено"
++
++#: params.def:57
++msgid "The maximum structure size (in bytes) for which GCC will use by-element copies"
++msgstr "Највећа величина струкутре (у бајтовима) за које ће ГЦЦ користити копије по елементу"
++
++#: params.def:66
++msgid "The maximum number of structure fields for which GCC will use by-element copies"
++msgstr "Највећи број поља структуре за које ће ГЦЦ користити копије по елементу"
++
++#: params.def:78
++msgid "The threshold ratio between instantiated fields and the total structure size"
++msgstr "Праг односа између изведених поља и укупне величине структуре"
++
++#: params.def:95
++msgid "The maximum number of instructions in a single function eligible for inlining"
++msgstr "Највећи број инструкција у једној функцији подесној за уткивање"
++
++#: params.def:107
++msgid "The maximum number of instructions when automatically inlining"
++msgstr "Највећи број инструкција при аутоматском уткивању"
++
++#: params.def:112
++msgid "The maximum number of instructions inline function can grow to via recursive inlining"
++msgstr "Највећи број инструкција до којег уткана функција може нарасти путем рекурзивног уткивања"
++
++#: params.def:117
++msgid "The maximum number of instructions non-inline function can grow to via recursive inlining"
++msgstr "Највећи број инструкција до којег неуткана функција може нарасти путем рекурзивног уткивања"
++
++#: params.def:122
++msgid "The maximum depth of recursive inlining for inline functions"
++msgstr "Највећа дубина рекурзивног уткивања за уткане функције"
++
++#: params.def:127
++msgid "The maximum depth of recursive inlining for non-inline functions"
++msgstr "Највећа дубина рекурзивног уткивања за неуткане функције"
++
++#: params.def:132
++msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
++msgstr "Уткивај рекурзивно само када вероватноћа извршавања позива премашује параметар"
++
++#: params.def:139
++msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling"
++msgstr "Ако се користи -fvariable-expansion-in-unroller, највећи број пута који ће поједина променљива бити раширена током одмотавања петље"
++
++#: params.def:150
++msgid "The maximum number of instructions to consider to fill a delay slot"
++msgstr "Највећи број инструкција за разматрање при попуњавању жлеба застоја"
++
++#: params.def:161
++msgid "The maximum number of instructions to consider to find accurate live register information"
++msgstr "Највећи број инструкција за разматрање при тражењу прецизних података о живим регистрима"
++
++#: params.def:171
++msgid "The maximum length of scheduling's pending operations list"
++msgstr "Највећа дужина листе наступајућих операција у распоређивању"
++
++#: params.def:176
++msgid "The size of function body to be considered large"
++msgstr "Величина тела функције која се сматра великом"
++
++#: params.def:180
++msgid "Maximal growth due to inlining of large function (in percent)"
++msgstr "Највећи раст услед уткивања велике функције (у процентима)"
++
++#: params.def:184
++msgid "The size of translation unit to be considered large"
++msgstr "Величина преводилачке јединице која се сматра великом"
++
++#: params.def:188
++msgid "how much can given compilation unit grow because of the inlining (in percent)"
++msgstr "колико дата јединица компиловања може расти услед уткивања (у процентима)"
++
++#: params.def:192
++msgid "expense of call operation relative to ordinary arithmetic operations"
++msgstr "трошак операције позива у односу на обичне аритметичке операције"
++
++#: params.def:199
++msgid "The maximum amount of memory to be allocated by GCSE"
++msgstr "Највећа количина меморије коју ГЦСЕ може да резервише"
++
++#: params.def:204
++msgid "The maximum number of passes to make when doing GCSE"
++msgstr "Највећи број пролаза при извршавању ГЦСЕа"
++
++#: params.def:214
++msgid "The threshold ratio for performing partial redundancy elimination after reload"
++msgstr "Праг односа за делимичну елиминацију редунданси после поновљеног учитавања"
++
++#: params.def:221
++msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload"
++msgstr "Праг односа броја извршавања критичних потега који дозвољава делимичну елиминацију редунданси после поновљеног учитавања"
++
++#: params.def:232
++msgid "The maximum number of instructions to consider to unroll in a loop"
++msgstr "Највећи број инструкција за разматрање при одмотавању петље"
++
++#: params.def:238
++msgid "The maximum number of instructions to consider to unroll in a loop on average"
++msgstr "Највећи број инструкција за разматрање при одмотавању петље, у просеку"
++
++#: params.def:243
++msgid "The maximum number of unrollings of a single loop"
++msgstr "Највећи број одмотавања једне петље"
++
++#: params.def:248
++msgid "The maximum number of insns of a peeled loop"
++msgstr "Највећи број ија сљушћене петље"
++
++#: params.def:253
++msgid "The maximum number of peelings of a single loop"
++msgstr "Највећи број љушћења једне петље"
++
++#: params.def:258
++msgid "The maximum number of insns of a completely peeled loop"
++msgstr "Највећи број ија потпуно сљушћене петље"
++
++#: params.def:263
++msgid "The maximum number of peelings of a single loop that is peeled completely"
++msgstr "Највећи број љушћења једне петље која се потпуно љушти"
++
++#: params.def:268
++msgid "The maximum number of insns of a peeled loop that rolls only once"
++msgstr "Највећи број ија сљушћене петље која се замотава само једном"
++
++#: params.def:274
++msgid "The maximum number of insns of an unswitched loop"
++msgstr "Највећи број ија непребачене петље"
++
++#: params.def:279
++msgid "The maximum number of unswitchings in a single loop"
++msgstr "Највећи број непребацивања у једној петљи"
++
++#: params.def:286
++msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates"
++msgstr "Граница броја итерација које срачунава алгоритам за анализу броја итерација сировом силом"
++
++#: params.def:291
++msgid "Maximum number of loops to perform swing modulo scheduling on (mainly for debugging)"
++msgstr "Највећи број петљи над којима треба извршити окретно модуло-распоређивање (углавном за исправљање)"
++
++#: params.def:297
++msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop"
++msgstr "Фактор за штеловање горње границе коју окретни модуло-распоређивач користи за распоређивање петље"
++
++#: params.def:301
++msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA"
++msgstr "Број циклуса које окретни модуло-распоређивач разматра при провери сукоба ДФАом"
++
++#: params.def:305
++msgid "A threshold on the average loop count considered by the swing modulo scheduler"
++msgstr "Праг за просечан број петљи који окретни модуло-распоређивач разматра"
++
++#: params.def:310
++msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot"
++msgstr "Део највећег броја понављања основног блока у програму које дати основни блок мора да има да би био сматран врућим"
++
++#: params.def:314
++msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
++msgstr "Део највеће учестаности извршавања основног блока у функцији које дати основни блок мора да има да би био сматран врућим"
++
++#: params.def:330
++msgid "The maximum number of loop iterations we predict statically"
++msgstr "Највећи број итерација петље које предвиђамо статички"
++
++#: params.def:334
++msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
++msgstr "Проценат функције, одмерен учестаношћу извршавања, који мора бити покривен формирањем трага. Користи се кад је доступан одзивни профил"
++
++#: params.def:338
++msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
++msgstr "Проценат функције, одмерен учестаношћу извршавања, који мора бити покривен формирањем трага. Користи се кад није доступан одзивни профил"
++
++#: params.def:342
++msgid "Maximal code growth caused by tail duplication (in percent)"
++msgstr "Највећи раст кôда услед умножавања репа (у процентима)"
++
++#: params.def:346
++msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
++msgstr "Заустави повратни раст ако је повратна вероватноћа најбољег потега мања од овог прага (у процентима)"
++
++#: params.def:350
++msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available"
++msgstr "Заустави чеони раст ако је вероватноћа најбољег потега мања од овог прага (у процентима). Користи се када је доступан одзивни профил"
++
++#: params.def:354
++msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available"
++msgstr "Заустави чеони раст ако је вероватноћа најбољег потега мања од овог прага (у процентима). Користи се када није доступан одзивни профил"
++
++#: params.def:360
++msgid "The maximum number of incoming edges to consider for crossjumping"
++msgstr "Највећи број долазећих потега за разматрање унакрсног скакања"
++
++#: params.def:366
++msgid "The minimum number of matching instructions to consider for crossjumping"
++msgstr "Најмањи број поклапајућих инструкција за разматрање унакрсног скакања"
++
++#: params.def:372
++msgid "The maximum expansion factor when copying basic blocks"
++msgstr "Највећи фактор ширења при копирању основних блокова"
++
++#: params.def:378
++msgid "The maximum number of insns to duplicate when unfactoring computed gotos"
++msgstr "Највећи број ија за умножавање при дефакторисању рачунске goto"
++
++#: params.def:384
++msgid "The maximum length of path considered in cse"
++msgstr "Највећа дужина путање које се разматра у ЦСЕу"
++
++#: params.def:388
++msgid "The maximum instructions CSE process before flushing"
++msgstr "Највише инструкција у процесу ЦСЕа пре испирања"
++
++#: params.def:395
++msgid "The minimum cost of an expensive expression in the loop invariant motion"
++msgstr "Најмања цена скупог израза у кретању инваријанте петље"
++
++#: params.def:404
++msgid "Bound on number of candidates below that all candidates are considered in iv optimizations"
++msgstr "Граница броја кандидата испод које се сви кандидати разматрају у нп. оптимизацијама"
++
++#: params.def:412
++msgid "Bound on number of iv uses in loop optimized in iv optimizations"
++msgstr "Граница броја употреба нп. у нп. оптимизацији петљи"
++
++#: params.def:420
++msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
++msgstr "Ако је број кандидата у скупу мањи, увек покушавамо да уклонимо неискоришћене нп. током оптимизације"
++
++#: params.def:425
++msgid "Bound on size of expressions used in the scalar evolutions analyzer"
++msgstr "Граница величине израза који се користе у анализатору скаларних еволуција"
++
++#: params.def:430
++msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning"
++msgstr "Граница броја провера током извршавања које умеће векторизаторово верзионисање петљи"
++
++#: params.def:437
++msgid "Given N calls and V call-clobbered vars in a function.  Use .GLOBAL_VAR if NxV is larger than this limit"
++msgstr "За датих N позива и V позивом продрманих променљивих у функцији, користи .GLOBAL_VAR ако је NxV веће од овог ограничења"
++
++#: params.def:442
++msgid "The maximum memory locations recorded by cselib"
++msgstr "Највећи број меморијских локација које снима cselib"
++
++#: params.def:446
++msgid "The maximum memory locations recorded by flow"
++msgstr "Највећи број меморијских локација које снима flow"
++
++#: params.def:459
++msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
++msgstr "Најмање ширење хрпе које окида сакупљање смећа, као проценат укупне величине хрпе"
++
++#: params.def:464
++msgid "Minimum heap size before we start collecting garbage, in kilobytes"
++msgstr "Најмања величина хрпе пре покретања сакупљања смећа, у килобајтима"
++
++#: params.def:472
++msgid "The maximum number of instructions to search backward when looking for equivalent reload"
++msgstr "Највећи број инструкција које треба претражити уназад када се тражи еквивалентно поновљено учитавање"
++
++#: params.def:477
++msgid "The maximum number of virtual operands allowed to represent aliases before triggering alias grouping"
++msgstr "Највећи број виртуелних операнада дозвољен за представљање алијаса пре окидања груписања алијаса"
++
++#: params.def:482
++msgid "The maximum number of blocks in a region to be considered for interblock scheduling"
++msgstr "Највећи број блокова у области која се разматра за мећублоковско распоређивање"
++
++#: params.def:487
++msgid "The maximum number of insns in a region to be considered for interblock scheduling"
++msgstr "Највећи број ија у области која се разматра за мећублоковско распоређивање"
++
++#: params.def:492
++msgid "The minimum probability of reaching a source block for interblock speculative scheduling"
++msgstr "Најмања вероватноћа достизања изворног блока за међублоковско спекулативно распоређивање"
++
++#: params.def:497
++msgid "The maximum number of RTL nodes that can be recorded as combiner's last value"
++msgstr "Највећи број РТЛ чворова који се може снимити као последња вредност комбинатора"
++
++#: params.def:505
++msgid "The upper bound for sharing integer constants"
++msgstr "Горња граница за дељење целобројних константи"
++
++#: params.def:524
++msgid "Minimum number of virtual mappings to consider switching to full virtual renames"
++msgstr "Најмањи број виртуелних мапирања за разматрање пребацивања на пуна виртуална преименовања"
++
++#: params.def:529
++msgid "Ratio between virtual mappings and virtual symbols to do full virtual renames"
++msgstr "Однос између виртуелних мапирања и виртуелних симбола да би се радила пуна виртуелна преименовања"
++
++#: params.def:534
++msgid "The lower bound for a buffer to be considered for stack smashing protection"
++msgstr "Доња граница за бафер да би се размотрила заштита разбијања стека"
++
++#: params.def:552
++msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps"
++msgstr "Највећи број наредби дозвољен у блоку којем је потребно умножавање при уплитању скокова"
++
++#: params.def:561
++msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable"
++msgstr "Највећи број поља у структури пре него што анализа показивача сматра структуру као једну променљиву"
++
++#: config/alpha/alpha.c:5087
++#, c-format
++msgid "invalid %%H value"
++msgstr "неисправна %%H вредност"
++
++#: config/alpha/alpha.c:5108 config/bfin/bfin.c:1191
++#, c-format
++msgid "invalid %%J value"
++msgstr "неисправна %%J вредност"
++
++#: config/alpha/alpha.c:5138 config/ia64/ia64.c:4603
++#, c-format
++msgid "invalid %%r value"
++msgstr "неисправна %%r вредност"
++
++#: config/alpha/alpha.c:5148 config/rs6000/rs6000.c:10433
++#: config/xtensa/xtensa.c:1691
++#, c-format
++msgid "invalid %%R value"
++msgstr "неисправна %%R вредност"
++
++#: config/alpha/alpha.c:5154 config/rs6000/rs6000.c:10352
++#: config/xtensa/xtensa.c:1658
++#, c-format
++msgid "invalid %%N value"
++msgstr "неисправна %%N вредност"
++
++#: config/alpha/alpha.c:5162 config/rs6000/rs6000.c:10380
++#, c-format
++msgid "invalid %%P value"
++msgstr "неисправна %%P вредност"
++
++#: config/alpha/alpha.c:5170
++#, c-format
++msgid "invalid %%h value"
++msgstr "неисправна %%h вредност"
++
++#: config/alpha/alpha.c:5178 config/xtensa/xtensa.c:1684
++#, c-format
++msgid "invalid %%L value"
++msgstr "неисправна %%L вредност"
++
++#: config/alpha/alpha.c:5217 config/rs6000/rs6000.c:10334
++#, c-format
++msgid "invalid %%m value"
++msgstr "неисправна %%m вредност"
++
++#: config/alpha/alpha.c:5225 config/rs6000/rs6000.c:10342
++#, c-format
++msgid "invalid %%M value"
++msgstr "неисправна %%M вредност"
++
++#: config/alpha/alpha.c:5269
++#, c-format
++msgid "invalid %%U value"
++msgstr "неисправна %%U вредност"
++
++#: config/alpha/alpha.c:5281 config/alpha/alpha.c:5295
++#: config/rs6000/rs6000.c:10441
++#, c-format
++msgid "invalid %%s value"
++msgstr "неисправна %%s вредност"
++
++#: config/alpha/alpha.c:5318
++#, c-format
++msgid "invalid %%C value"
++msgstr "неисправна %%C вредност"
++
++#: config/alpha/alpha.c:5355 config/rs6000/rs6000.c:10173
++#: config/rs6000/rs6000.c:10191
++#, c-format
++msgid "invalid %%E value"
++msgstr "неисправна %%E вредност"
++
++#: config/alpha/alpha.c:5380 config/alpha/alpha.c:5428
++#, c-format
++msgid "unknown relocation unspec"
++msgstr "непознато unspec релокације"
++
++#: config/alpha/alpha.c:5389 config/crx/crx.c:1082
++#: config/rs6000/rs6000.c:10755
++#, c-format
++msgid "invalid %%xn code"
++msgstr "неисправан %%xn кôд"
++
++#: config/arc/arc.c:1726 config/m32r/m32r.c:1805
++#, c-format
++msgid "invalid operand to %%R code"
++msgstr "неисправан операнд за %%R кôд"
++
++#: config/arc/arc.c:1758 config/m32r/m32r.c:1828
++#, c-format
++msgid "invalid operand to %%H/%%L code"
++msgstr "неисправан операнд за %%H/%%L кôд"
++
++#: config/arc/arc.c:1780 config/m32r/m32r.c:1899
++#, c-format
++msgid "invalid operand to %%U code"
++msgstr "неисправан операнд за %%U кôд"
++
++#: config/arc/arc.c:1791
++#, c-format
++msgid "invalid operand to %%V code"
++msgstr "неисправан операнд за %%V кôд"
++
++#. Unknown flag.
++#. Undocumented flag.
++#: config/arc/arc.c:1798 config/m32r/m32r.c:1926 config/sparc/sparc.c:6818
++#, c-format
++msgid "invalid operand output code"
++msgstr "неисправан кôд излаза операнада"
++
++#: config/arm/arm.c:10913 config/arm/arm.c:10931
++#, c-format
++msgid "predicated Thumb instruction"
++msgstr "предикатна инструкција Тамба"
++
++#: config/arm/arm.c:10919
++#, c-format
++msgid "predicated instruction in conditional sequence"
++msgstr "предикатна инструкција у условном низу"
++
++#: config/arm/arm.c:11027 config/arm/arm.c:11037 config/arm/arm.c:11047
++#: config/arm/arm.c:11073 config/arm/arm.c:11091 config/arm/arm.c:11126
++#: config/arm/arm.c:11145 config/arm/arm.c:11160 config/arm/arm.c:11186
++#: config/arm/arm.c:11193 config/arm/arm.c:11200
++#, c-format
++msgid "invalid operand for code '%c'"
++msgstr "неисправан операнд за кôд ‘%c’"
++
++#: config/arm/arm.c:11086
++#, c-format
++msgid "instruction never exectued"
++msgstr "инструкција се никад не извршава"
++
++#: config/arm/arm.c:11211
++#, c-format
++msgid "missing operand"
++msgstr "недостаје операнд"
++
++#: config/avr/avr.c:1116
++msgid "bad address, not (reg+disp):"
++msgstr "лоша адреса, није (reg+disp):"
++
++#: config/avr/avr.c:1123
++msgid "bad address, not post_inc or pre_dec:"
++msgstr "лоша адреса, није post_inc или pre_dec:"
++
++#: config/avr/avr.c:1134
++msgid "internal compiler error.  Bad address:"
++msgstr "унутрашња грешка компилатора. Лоша адреса:"
++
++#: config/avr/avr.c:1147
++msgid "internal compiler error.  Unknown mode:"
++msgstr "унутрашња грешка компилатора. Непознат режим:"
++
++#: config/avr/avr.c:1770 config/avr/avr.c:2453
++msgid "invalid insn:"
++msgstr "неисправна ија:"
++
++#: config/avr/avr.c:1804 config/avr/avr.c:1890 config/avr/avr.c:1939
++#: config/avr/avr.c:1967 config/avr/avr.c:2062 config/avr/avr.c:2231
++#: config/avr/avr.c:2487 config/avr/avr.c:2599
++msgid "incorrect insn:"
++msgstr "нетачна ија:"
++
++#: config/avr/avr.c:1986 config/avr/avr.c:2147 config/avr/avr.c:2302
++#: config/avr/avr.c:2665
++msgid "unknown move insn:"
++msgstr "непозната ија премештања:"
++
++#: config/avr/avr.c:2895
++msgid "bad shift insn:"
++msgstr "лоша ија помака:"
++
++#: config/avr/avr.c:3011 config/avr/avr.c:3459 config/avr/avr.c:3845
++msgid "internal compiler error.  Incorrect shift:"
++msgstr "унутрашња грешка компилатора. Нетачан помак:"
++
++#: config/bfin/bfin.c:1153
++#, c-format
++msgid "invalid %%j value"
++msgstr "неисправна %%j вредност"
++
++#: config/bfin/bfin.c:1270
++#, c-format
++msgid "invalid const_double operand"
++msgstr "неисправан const_double операнд"
++
++#: config/c4x/c4x.c:1584
++msgid "using CONST_DOUBLE for address"
++msgstr "користи се CONST_DOUBLE за адресу"
++
++#: config/c4x/c4x.c:1722
++msgid "c4x_address_cost: Invalid addressing mode"
++msgstr "c4x_address_cost: Неисправан адресни режим"
++
++#: config/c4x/c4x.c:1857
++#, c-format
++msgid "c4x_print_operand: %%L inconsistency"
++msgstr "c4x_print_operand: %%L несагласност"
++
++#: config/c4x/c4x.c:1863
++#, c-format
++msgid "c4x_print_operand: %%N inconsistency"
++msgstr "c4x_print_operand: %%N несагласност"
++
++#: config/c4x/c4x.c:1904
++#, c-format
++msgid "c4x_print_operand: %%O inconsistency"
++msgstr "c4x_print_operand: %%O несагласност"
++
++#: config/c4x/c4x.c:1999
++msgid "c4x_print_operand: Bad operand case"
++msgstr "c4x_print_operand: Лош облик операнда"
++
++#: config/c4x/c4x.c:2040
++msgid "c4x_print_operand_address: Bad post_modify"
++msgstr "c4x_print_operand_address: Лош post_modify"
++
++#: config/c4x/c4x.c:2062
++msgid "c4x_print_operand_address: Bad pre_modify"
++msgstr "c4x_print_operand_address: Лош pre_modify"
++
++#: config/c4x/c4x.c:2110 config/c4x/c4x.c:2122 config/c4x/c4x.c:2137
++msgid "c4x_print_operand_address: Bad operand case"
++msgstr "c4x_print_operand_address: Лош облик операнда"
++
++#: config/c4x/c4x.c:2388
++msgid "c4x_rptb_insert: Cannot find start label"
++msgstr "c4x_rptb_insert: Не могу да нађем почетну етикету"
++
++#: config/c4x/c4x.c:2990
++msgid "invalid indirect memory address"
++msgstr "неисправна посредна меморијска адреса"
++
++#: config/c4x/c4x.c:3079
++msgid "invalid indirect (S) memory address"
++msgstr "неисправна посредна (S) меморијска адреса"
++
++#: config/c4x/c4x.c:3414
++msgid "c4x_valid_operands: Internal error"
++msgstr "c4x_valid_operands: Унутрашња грешка"
++
++#: config/c4x/c4x.c:3853
++msgid "c4x_operand_subword: invalid mode"
++msgstr "c4x_operand_subword: неисправан режим"
++
++#: config/c4x/c4x.c:3856
++msgid "c4x_operand_subword: invalid operand"
++msgstr "c4x_operand_subword: неисправан операнд"
++
++#. We could handle these with some difficulty.
++#. e.g., *p-- => *(p-=2); *(p+1).
++#: config/c4x/c4x.c:3882
++msgid "c4x_operand_subword: invalid autoincrement"
++msgstr "c4x_operand_subword: неисправно самоувећање"
++
++#: config/c4x/c4x.c:3888
++msgid "c4x_operand_subword: invalid address"
++msgstr "c4x_operand_subword: неисправна адреса"
++
++#: config/c4x/c4x.c:3899
++msgid "c4x_operand_subword: address not offsettable"
++msgstr "c4x_operand_subword: адреси се не може дати помак"
++
++#: config/c4x/c4x.c:4101
++msgid "c4x_rptb_rpts_p: Repeat block top label moved"
++msgstr "c4x_rptb_rpts_p: Померена горња етикета блока понављања"
++
++#. Use `%s' to print the string in case there are any escape
++#. characters in the message.
++#: config/cris/cris.c:492 fortran/dump-parse-tree.c:84
++#: fortran/dump-parse-tree.c:416 fortran/dump-parse-tree.c:747 c-typeck.c:4350
++#: c-typeck.c:4365 c-typeck.c:4380 final.c:2833 final.c:2835 gcc.c:4664
++#: loop-iv.c:2711 loop-iv.c:2720 rtl-error.c:113 toplev.c:587
++#: tree-ssa-loop-niter.c:1120 cp/parser.c:1972 cp/typeck.c:4291
++#: java/expr.c:406
++#, gcc-internal-format
++msgid "%s"
++msgstr "%s"
++
++#: config/cris/cris.c:544
++msgid "unexpected index-type in cris_print_index"
++msgstr "неочекиван тип индекса у cris_print_index"
++
++#: config/cris/cris.c:558
++msgid "unexpected base-type in cris_print_base"
++msgstr "неочекиван основни тип у cris_print_base"
++
++#: config/cris/cris.c:674
++msgid "invalid operand for 'b' modifier"
++msgstr "неисправан операнд за модификатор ‘b’"
++
++#: config/cris/cris.c:691
++msgid "invalid operand for 'o' modifier"
++msgstr "неисправан операнд за модификатор ‘o’"
++
++#: config/cris/cris.c:710
++msgid "invalid operand for 'O' modifier"
++msgstr "неисправан операнд за модификатор ‘O’"
++
++#: config/cris/cris.c:743
++msgid "invalid operand for 'p' modifier"
++msgstr "неисправан операнд за модификатор ‘p’"
++
++#: config/cris/cris.c:782
++msgid "invalid operand for 'z' modifier"
++msgstr "неисправан операнд за модификатор ‘z’"
++
++#: config/cris/cris.c:836 config/cris/cris.c:866
++msgid "invalid operand for 'H' modifier"
++msgstr "неисправан операнд за модификатор ‘H;’"
++
++#: config/cris/cris.c:842
++msgid "bad register"
++msgstr "лош регистар"
++
++#: config/cris/cris.c:887
++msgid "invalid operand for 'e' modifier"
++msgstr "неисправан операнд за модификатор ‘e’"
++
++#: config/cris/cris.c:904
++msgid "invalid operand for 'm' modifier"
++msgstr "неисправан операнд за модификатор ‘m’"
++
++#: config/cris/cris.c:929
++msgid "invalid operand for 'A' modifier"
++msgstr "неисправан операнд за модификатор ‘A’"
++
++#: config/cris/cris.c:952
++msgid "invalid operand for 'D' modifier"
++msgstr "неисправан операнд за модификатор ‘D’"
++
++#: config/cris/cris.c:966
++msgid "invalid operand for 'T' modifier"
++msgstr "неисправан операнд за модификатор ‘T’"
++
++#: config/cris/cris.c:975
++msgid "invalid operand modifier letter"
++msgstr "неисправно слово модификатора операнда"
++
++#: config/cris/cris.c:1032
++msgid "unexpected multiplicative operand"
++msgstr "неочекиван множећи операнд"
++
++#: config/cris/cris.c:1052
++msgid "unexpected operand"
++msgstr "неочекиван операнд"
++
++#: config/cris/cris.c:1085 config/cris/cris.c:1095
++msgid "unrecognized address"
++msgstr "непрепозната адреса"
++
++#: config/cris/cris.c:2021
++msgid "unrecognized supposed constant"
++msgstr "непрепозната претпостављена константа"
++
++#: config/cris/cris.c:2396 config/cris/cris.c:2460
++msgid "unexpected side-effects in address"
++msgstr "неочекивани споредни ефекти у адреси"
++
++#. Can't possibly get a GOT-needing-fixup for a function-call,
++#. right?
++#: config/cris/cris.c:3254
++msgid "Unidentifiable call op"
++msgstr "Неидентификован оп. позива"
++
++#: config/cris/cris.c:3305
++#, c-format
++msgid "PIC register isn't set up"
++msgstr "ПИЦ регистар није постављен"
++
++#: config/fr30/fr30.c:464
++#, c-format
++msgid "fr30_print_operand_address: unhandled address"
++msgstr "fr30_print_operand_address: необрађена адреса"
++
++#: config/fr30/fr30.c:488
++#, c-format
++msgid "fr30_print_operand: unrecognized %%p code"
++msgstr "fr30_print_operand: непрепознат %%p кôд"
++
++#: config/fr30/fr30.c:508
++#, c-format
++msgid "fr30_print_operand: unrecognized %%b code"
++msgstr "fr30_print_operand: непрепознат %%b кôд"
++
++#: config/fr30/fr30.c:529
++#, c-format
++msgid "fr30_print_operand: unrecognized %%B code"
++msgstr "fr30_print_operand: непрепознат %%B кôд"
++
++#: config/fr30/fr30.c:537
++#, c-format
++msgid "fr30_print_operand: invalid operand to %%A code"
++msgstr "fr30_print_operand: неисправан операнд за %%A кôд"
++
++#: config/fr30/fr30.c:554
++#, c-format
++msgid "fr30_print_operand: invalid %%x code"
++msgstr "fr30_print_operand: неисправан %%x кôд"
++
++#: config/fr30/fr30.c:561
++#, c-format
++msgid "fr30_print_operand: invalid %%F code"
++msgstr "fr30_print_operand: неисправан %%F кôд"
++
++#: config/fr30/fr30.c:578
++#, c-format
++msgid "fr30_print_operand: unknown code"
++msgstr "fr30_print_operand: непознат кôд"
++
++#: config/fr30/fr30.c:606 config/fr30/fr30.c:615 config/fr30/fr30.c:626
++#: config/fr30/fr30.c:639
++#, c-format
++msgid "fr30_print_operand: unhandled MEM"
++msgstr "fr30_print_operand: необрађен MEM"
++
++#: config/frv/frv.c:2541
++msgid "bad insn to frv_print_operand_address:"
++msgstr "лоша ија за frv_print_operand_address:"
++
++#: config/frv/frv.c:2552
++msgid "bad register to frv_print_operand_memory_reference_reg:"
++msgstr "лош регистар за frv_print_operand_memory_reference_reg:"
++
++#: config/frv/frv.c:2591 config/frv/frv.c:2601 config/frv/frv.c:2610
++#: config/frv/frv.c:2631 config/frv/frv.c:2636
++msgid "bad insn to frv_print_operand_memory_reference:"
++msgstr "лоша ија за frv_print_operand_memory_reference:"
++
++#: config/frv/frv.c:2722
++#, c-format
++msgid "bad condition code"
++msgstr "лош условни кôд"
++
++#: config/frv/frv.c:2797
++msgid "bad insn in frv_print_operand, bad const_double"
++msgstr "лоша ија у frv_print_operand, лош const_double"
++
++#: config/frv/frv.c:2858
++msgid "bad insn to frv_print_operand, 'e' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘e’:"
++
++#: config/frv/frv.c:2866
++msgid "bad insn to frv_print_operand, 'F' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘F’:"
++
++#: config/frv/frv.c:2882
++msgid "bad insn to frv_print_operand, 'f' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘f’:"
++
++#: config/frv/frv.c:2896
++msgid "bad insn to frv_print_operand, 'g' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘g’:"
++
++#: config/frv/frv.c:2944
++msgid "bad insn to frv_print_operand, 'L' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘L’:"
++
++#: config/frv/frv.c:2957
++msgid "bad insn to frv_print_operand, 'M/N' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘M/N’:"
++
++#: config/frv/frv.c:2978
++msgid "bad insn to frv_print_operand, 'O' modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘O’:"
++
++#: config/frv/frv.c:2996
++msgid "bad insn to frv_print_operand, P modifier:"
++msgstr "лоша ија за frv_print_operand, модификатор ‘P’:"
++
++#: config/frv/frv.c:3016
++msgid "bad insn in frv_print_operand, z case"
++msgstr "лоша ија у frv_print_operand, случај z"
++
++#: config/frv/frv.c:3047
++msgid "bad insn in frv_print_operand, 0 case"
++msgstr "лоша ија у frv_print_operand, случај 0"
++
++#: config/frv/frv.c:3052
++msgid "frv_print_operand: unknown code"
++msgstr "frv_print_operand: непознат кôд"
++
++#: config/frv/frv.c:4421
++msgid "bad output_move_single operand"
++msgstr "лош операнд output_move_single"
++
++#: config/frv/frv.c:4548
++msgid "bad output_move_double operand"
++msgstr "лош операнд output_move_double"
++
++#: config/frv/frv.c:4690
++msgid "bad output_condmove_single operand"
++msgstr "лош операнд output_condmove_single"
++
++#. This macro is a C statement to print on `stderr' a string describing the
++#. particular machine description choice.  Every machine description should
++#. define `TARGET_VERSION'.  For example:
++#.
++#. #ifdef MOTOROLA
++#. #define TARGET_VERSION           fprintf (stderr, " (68k, Motorola syntax)");
++#. #else
++#. #define TARGET_VERSION           fprintf (stderr, " (68k, MIT syntax)");
++#. #endif
++#: config/frv/frv.h:329
++#, c-format
++msgid " (frv)"
++msgstr " (frv)"
++
++#: config/i386/i386.c:6712
++#, c-format
++msgid "invalid UNSPEC as operand"
++msgstr "неисправан УНСПЕЦ као операнд"
++
++#: config/i386/i386.c:7294
++#, c-format
++msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
++msgstr "операнд није ни константа ни условни кôд, неисправан кôд аргумента ‘c’"
++
++#: config/i386/i386.c:7347
++#, c-format
++msgid "invalid operand code '%c'"
++msgstr "неисправан кôд операнда ‘%c;’"
++
++#: config/i386/i386.c:7390
++#, c-format
++msgid "invalid constraints for operand"
++msgstr "неисправна ограничења за операнд"
++
++#: config/i386/i386.c:12984
++msgid "unknown insn mode"
++msgstr "непознат режим ије"
++
++#. If the environment variable DJDIR is not defined, then DJGPP is not        installed correctly and GCC will quickly become confused with the        default prefix settings. Report the problem now so the user doesn't        receive deceptive "file not found" error messages later.
++#. DJDIR is automatically defined by the DJGPP environment config            file pointed to by the environment variable DJGPP. Examine DJGPP            to try and figure out what's wrong.
++#: config/i386/xm-djgpp.h:62
++#, c-format
++msgid "environment variable DJGPP not defined"
++msgstr "променљива окружења DJGPP није дефинисана"
++
++#: config/i386/xm-djgpp.h:64
++#, c-format
++msgid "environment variable DJGPP points to missing file '%s'"
++msgstr "променљива окружења DJGPP указује на недостајућу датотеку ‘%s’"
++
++#: config/i386/xm-djgpp.h:67
++#, c-format
++msgid "environment variable DJGPP points to corrupt file '%s'"
++msgstr "променљива окружења DJGPP указује на искварену датотеку ‘%s’"
++
++#: config/ia64/ia64.c:4653
++#, c-format
++msgid "ia64_print_operand: unknown code"
++msgstr "ia64_print_operand: непознат кôд"
++
++#: config/ia64/ia64.c:9013
++msgid "invalid conversion from %<__fpreg%>"
++msgstr "неисправно претварање из %<__fpreg%>"
++
++#: config/ia64/ia64.c:9016
++msgid "invalid conversion to %<__fpreg%>"
++msgstr "неисправно претварање у %<__fpreg%>"
++
++#: config/ia64/ia64.c:9029 config/ia64/ia64.c:9040
++msgid "invalid operation on %<__fpreg%>"
++msgstr "неисправна операција на %<__fpreg%>"
++
++#: config/iq2000/iq2000.c:3125
++#, c-format
++msgid "invalid %%P operand"
++msgstr "неисправан %%P операнд"
++
++#: config/iq2000/iq2000.c:3133 config/rs6000/rs6000.c:10370
++#, c-format
++msgid "invalid %%p value"
++msgstr "неисправна %%p вредност"
++
++#: config/iq2000/iq2000.c:3189 config/mips/mips.c:5535
++#, c-format
++msgid "invalid use of %%d, %%x, or %%X"
++msgstr "неисправна употреба %%d, %%x, или %%X"
++
++#: config/m32r/m32r.c:1775
++#, c-format
++msgid "invalid operand to %%s code"
++msgstr "неисправан операнд за %%s кôд"
++
++#: config/m32r/m32r.c:1782
++#, c-format
++msgid "invalid operand to %%p code"
++msgstr "неисправан операнд за %%p кôд"
++
++#: config/m32r/m32r.c:1837
++msgid "bad insn for 'A'"
++msgstr "лоша ија за ‘A’"
++
++#: config/m32r/m32r.c:1884
++#, c-format
++msgid "invalid operand to %%T/%%B code"
++msgstr "неисправан операнд за %%T/%%B кôд"
++
++#: config/m32r/m32r.c:1907
++#, c-format
++msgid "invalid operand to %%N code"
++msgstr "неисправан операнд за %%N кôд"
++
++#: config/m32r/m32r.c:1940
++msgid "pre-increment address is not a register"
++msgstr "адреса предувећања није регистар"
++
++#: config/m32r/m32r.c:1947
++msgid "pre-decrement address is not a register"
++msgstr "адреса предумањења није регистар"
++
++#: config/m32r/m32r.c:1954
++msgid "post-increment address is not a register"
++msgstr "адреса постувећања није регистар"
++
++#: config/m32r/m32r.c:2030 config/m32r/m32r.c:2044
++#: config/rs6000/rs6000.c:17606
++msgid "bad address"
++msgstr "лоша адреса"
++
++#: config/m32r/m32r.c:2049
++msgid "lo_sum not of register"
++msgstr "lo_sum није од регистра"
++
++#. !!!! SCz wrong here.
++#: config/m68hc11/m68hc11.c:3189 config/m68hc11/m68hc11.c:3567
++msgid "move insn not handled"
++msgstr "ија премештања није обрађена"
++
++#: config/m68hc11/m68hc11.c:3413 config/m68hc11/m68hc11.c:3497
++#: config/m68hc11/m68hc11.c:3770
++msgid "invalid register in the move instruction"
++msgstr "неисправан регистар у инструкцији премештања"
++
++#: config/m68hc11/m68hc11.c:3447
++msgid "invalid operand in the instruction"
++msgstr "неисправан операнд у инструкцији"
++
++#: config/m68hc11/m68hc11.c:3744
++msgid "invalid register in the instruction"
++msgstr "неисправан регистар у инструкцији"
++
++#: config/m68hc11/m68hc11.c:3777
++msgid "operand 1 must be a hard register"
++msgstr "операнд 1 мора бити чврсти регистар"
++
++#: config/m68hc11/m68hc11.c:3791
++msgid "invalid rotate insn"
++msgstr "неисправна ија ротације"
++
++#: config/m68hc11/m68hc11.c:4215
++msgid "registers IX, IY and Z used in the same INSN"
++msgstr "регистри IX, IY и Z употребљени у истој ији"
++
++#: config/m68hc11/m68hc11.c:4552 config/m68hc11/m68hc11.c:4852
++msgid "cannot do z-register replacement"
++msgstr "не могу да обавим замену регистра Z"
++
++#: config/m68hc11/m68hc11.c:4915
++msgid "invalid Z register replacement for insn"
++msgstr "неисправна замена регистра Z за ију"
++
++#: config/mips/mips.c:5203
++msgid "mips_debugger_offset called with non stack/frame/arg pointer"
++msgstr "mips_debugger_offset позван без показивача на стек/оквир/арг"
++
++#: config/mips/mips.c:5413
++#, c-format
++msgid "PRINT_OPERAND, invalid insn for %%C"
++msgstr "PRINT_OPERAND, неисправна ија за %%C"
++
++#: config/mips/mips.c:5430
++#, c-format
++msgid "PRINT_OPERAND, invalid insn for %%N"
++msgstr "PRINT_OPERAND, неисправна ија за %%N"
++
++#: config/mips/mips.c:5439
++#, c-format
++msgid "PRINT_OPERAND, invalid insn for %%F"
++msgstr "PRINT_OPERAND, неисправна ија за %%F"
++
++#: config/mips/mips.c:5448
++#, c-format
++msgid "PRINT_OPERAND, invalid insn for %%W"
++msgstr "PRINT_OPERAND, неисправна ија за %%W"
++
++#: config/mips/mips.c:5469
++#, c-format
++msgid "invalid %%Y value"
++msgstr "неисправна %%Y вредност"
++
++#: config/mips/mips.c:5486 config/mips/mips.c:5494
++#, c-format
++msgid "PRINT_OPERAND, invalid insn for %%q"
++msgstr "PRINT_OPERAND, неисправна ија за %%q"
++
++#: config/mips/mips.c:5563
++msgid "PRINT_OPERAND, invalid operand for relocation"
++msgstr "PRINT_OPERAND, неисправан операнд за релокацију"
++
++#: config/mmix/mmix.c:1468 config/mmix/mmix.c:1598
++msgid "MMIX Internal: Expected a CONST_INT, not this"
++msgstr "MMIX унутрашње: Очекиван је CONST_INT, не ово"
++
++#: config/mmix/mmix.c:1547
++msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
++msgstr "MMIX унутрашње: Лоша вредност за ‘m’, није CONST_INT"
++
++#: config/mmix/mmix.c:1566
++msgid "MMIX Internal: Expected a register, not this"
++msgstr "MMIX унутрашње: Очекиван је регистар, не ово"
++
++#: config/mmix/mmix.c:1576
++msgid "MMIX Internal: Expected a constant, not this"
++msgstr "MMIX унутрашње: Очекивана је константа, не ово"
++
++#. We need the original here.
++#: config/mmix/mmix.c:1660
++msgid "MMIX Internal: Cannot decode this operand"
++msgstr "MMIX унутрашње: Не могу да декодирам овај операнд"
++
++#: config/mmix/mmix.c:1717
++msgid "MMIX Internal: This is not a recognized address"
++msgstr "MMIX унутрашње: Ово није препозната адреса"
++
++#: config/mmix/mmix.c:2650
++msgid "MMIX Internal: Trying to output invalidly reversed condition:"
++msgstr "MMIX унутрашње: Покушавам да испишем неисправно обрнут услов:"
++
++#: config/mmix/mmix.c:2657
++msgid "MMIX Internal: What's the CC of this?"
++msgstr "MMIX унутрашње: Шта је CC за ово?"
++
++#: config/mmix/mmix.c:2661
++msgid "MMIX Internal: What is the CC of this?"
++msgstr "MMIX унутрашње: Шта је CC за ово?"
++
++#: config/mmix/mmix.c:2725
++msgid "MMIX Internal: This is not a constant:"
++msgstr "MMIX унутрашње: Ово није константа:"
++
++#: config/mt/mt.c:298
++msgid "mt_final_prescan_insn, invalid insn #1"
++msgstr "mt_final_prescan_insn, неисправна ија #1"
++
++#: config/mt/mt.c:369
++msgid "PRINT_OPERAND_ADDRESS, 2 regs"
++msgstr "PRINT_OPERAND_ADDRESS, 2 регистра"
++
++#: config/mt/mt.c:393
++msgid "PRINT_OPERAND_ADDRESS, invalid insn #1"
++msgstr "PRINT_OPERAND_ADDRESS, неисправна ија #1"
++
++#: config/rs6000/host-darwin.c:87
++#, c-format
++msgid "Out of stack space.\n"
++msgstr "Нема места на стеку.\n"
++
++#: config/rs6000/host-darwin.c:108
++#, c-format
++msgid "Try running '%s' in the shell to raise its limit.\n"
++msgstr "Покушајте да покренете ‘%s’ у шкољци да повећате ограничење.\n"
++
++#: config/rs6000/rs6000.c:10200
++#, c-format
++msgid "invalid %%f value"
++msgstr "неисправна %%f вредност"
++
++#: config/rs6000/rs6000.c:10209
++#, c-format
++msgid "invalid %%F value"
++msgstr "неисправна %%F вредност"
++
++#: config/rs6000/rs6000.c:10218
++#, c-format
++msgid "invalid %%G value"
++msgstr "неисправна %%G вредност"
++
++#: config/rs6000/rs6000.c:10253
++#, c-format
++msgid "invalid %%j code"
++msgstr "неисправан %%j кôд"
++
++#: config/rs6000/rs6000.c:10263
++#, c-format
++msgid "invalid %%J code"
++msgstr "неисправан %%J кôд"
++
++#: config/rs6000/rs6000.c:10273
++#, c-format
++msgid "invalid %%k value"
++msgstr "неисправна %%k вредност"
++
++#: config/rs6000/rs6000.c:10293 config/xtensa/xtensa.c:1677
++#, c-format
++msgid "invalid %%K value"
++msgstr "неисправна %%K вредност"
++
++#: config/rs6000/rs6000.c:10360
++#, c-format
++msgid "invalid %%O value"
++msgstr "неисправна %%O вредност"
++
++#: config/rs6000/rs6000.c:10407
++#, c-format
++msgid "invalid %%q value"
++msgstr "неисправна %%q вредност"
++
++#: config/rs6000/rs6000.c:10451
++#, c-format
++msgid "invalid %%S value"
++msgstr "неисправна %%S вредност"
++
++#: config/rs6000/rs6000.c:10491
++#, c-format
++msgid "invalid %%T value"
++msgstr "неисправна %%T вредност"
++
++#: config/rs6000/rs6000.c:10501
++#, c-format
++msgid "invalid %%u value"
++msgstr "неисправна %%u вредност"
++
++#: config/rs6000/rs6000.c:10510 config/xtensa/xtensa.c:1647
++#, c-format
++msgid "invalid %%v value"
++msgstr "неисправна %%v вредност"
++
++#: config/rs6000/rs6000.c:19123
++msgid "AltiVec argument passed to unprototyped function"
++msgstr "алтивек аргумент прослеђен непрототипизираној функцији"
++
++#: config/s390/s390.c:4490
++#, c-format
++msgid "cannot decompose address"
++msgstr "не могу да разложим адресу"
++
++#: config/s390/s390.c:4700
++msgid "UNKNOWN in print_operand !?"
++msgstr "НЕПОЗНАТА у print_operand !?"
++
++#: config/sh/sh.c:746
++#, c-format
++msgid "invalid operand to %%R"
++msgstr "неисправан операнд за %%R"
++
++#: config/sh/sh.c:773
++#, c-format
++msgid "invalid operand to %%S"
++msgstr "неисправан операнд за %%S"
++
++#: config/sh/sh.c:7679
++msgid "created and used with different architectures / ABIs"
++msgstr "направљено и употребљено на различитим архитектурама / АБИјима"
++
++#: config/sh/sh.c:7681
++msgid "created and used with different ABIs"
++msgstr "направљено и употребљено са различитим АБИјима"
++
++#: config/sh/sh.c:7683
++msgid "created and used with different endianness"
++msgstr "направљено и употребељно са различитом крајношћу"
++
++#: config/sparc/sparc.c:6626 config/sparc/sparc.c:6632
++#, c-format
++msgid "invalid %%Y operand"
++msgstr "неисправан %%Y операнд"
++
++#: config/sparc/sparc.c:6702
++#, c-format
++msgid "invalid %%A operand"
++msgstr "неисправан %%A операнд"
++
++#: config/sparc/sparc.c:6712
++#, c-format
++msgid "invalid %%B operand"
++msgstr "неисправан %%B операнд"
++
++#: config/sparc/sparc.c:6751
++#, c-format
++msgid "invalid %%c operand"
++msgstr "неисправан %%c операнд"
++
++#: config/sparc/sparc.c:6752
++#, c-format
++msgid "invalid %%C operand"
++msgstr "неисправан %%C операнд"
++
++#: config/sparc/sparc.c:6773
++#, c-format
++msgid "invalid %%d operand"
++msgstr "неисправан %%d операнд"
++
++#: config/sparc/sparc.c:6774
++#, c-format
++msgid "invalid %%D operand"
++msgstr "неисправан %%D операнд"
++
++#: config/sparc/sparc.c:6790
++#, c-format
++msgid "invalid %%f operand"
++msgstr "неисправан %%f операнд"
++
++#: config/sparc/sparc.c:6804
++#, c-format
++msgid "invalid %%s operand"
++msgstr "неисправан %%s операнд"
++
++#: config/sparc/sparc.c:6858
++#, c-format
++msgid "long long constant not a valid immediate operand"
++msgstr "long long константа није прихватљив непосредни операнд"
++
++#: config/sparc/sparc.c:6861
++#, c-format
++msgid "floating point constant not a valid immediate operand"
++msgstr "реална константа није прихватљив непосредни операнд"
++
++#: config/stormy16/stormy16.c:1764 config/stormy16/stormy16.c:1835
++#, c-format
++msgid "'B' operand is not constant"
++msgstr "‘B’ операнд није константа"
++
++#: config/stormy16/stormy16.c:1791
++#, c-format
++msgid "'B' operand has multiple bits set"
++msgstr "‘B’ операнд има више постављених битова"
++
++#: config/stormy16/stormy16.c:1817
++#, c-format
++msgid "'o' operand is not constant"
++msgstr "‘o’ операнд није константа"
++
++#: config/stormy16/stormy16.c:1849
++#, c-format
++msgid "xstormy16_print_operand: unknown code"
++msgstr "xstormy16_print_operand: непознат кôд"
++
++#: config/v850/v850.c:360
++msgid "const_double_split got a bad insn:"
++msgstr "const_double_split доби лошу ију:"
++
++#: config/v850/v850.c:924
++msgid "output_move_single:"
++msgstr "output_move_single:"
++
++#: config/xtensa/xtensa.c:748 config/xtensa/xtensa.c:780
++#: config/xtensa/xtensa.c:789
++msgid "bad test"
++msgstr "лоша проба"
++
++#: config/xtensa/xtensa.c:1635
++#, c-format
++msgid "invalid %%D value"
++msgstr "неисправна %%D вредност"
++
++#: config/xtensa/xtensa.c:1672
++msgid "invalid mask"
++msgstr "неисправна маска"
++
++#: config/xtensa/xtensa.c:1698
++#, c-format
++msgid "invalid %%x value"
++msgstr "неисправна %%x вредност"
++
++#: config/xtensa/xtensa.c:1705
++#, c-format
++msgid "invalid %%d value"
++msgstr "неисправна %%d вредност"
++
++#: config/xtensa/xtensa.c:1726 config/xtensa/xtensa.c:1736
++#, c-format
++msgid "invalid %%t/%%b value"
++msgstr "неисправна %%t/%%b вредност"
++
++#: config/xtensa/xtensa.c:1778
++msgid "invalid address"
++msgstr "неисправна адреса"
++
++#: config/xtensa/xtensa.c:1803
++msgid "no register in address"
++msgstr "нема регистара у адреси"
++
++#: config/xtensa/xtensa.c:1811
++msgid "address offset not a constant"
++msgstr "помак адресе није константа"
++
++#: cp/call.c:2441
++msgid "candidates are:"
++msgstr "кандидати су:"
++
++#: cp/call.c:6213
++msgid "candidate 1:"
++msgstr "кандидат 1:"
++
++#: cp/call.c:6214
++msgid "candidate 2:"
++msgstr "кандидат 2:"
++
++#: cp/decl2.c:695
++msgid "candidates are: %+#D"
++msgstr "кандидати су: %+#D"
++
++#: cp/decl2.c:697
++msgid "candidate is: %+#D"
++msgstr "кандидат је: %+#D"
++
++#: cp/g++spec.c:238 java/jvspec.c:417
++#, c-format
++msgid "argument to '%s' missing\n"
++msgstr "аргумент за ‘%s’ недостаје\n"
++
++#: fortran/arith.c:141
++msgid "Arithmetic OK at %L"
++msgstr "Аритметичко OK код %L"
++
++#: fortran/arith.c:144
++msgid "Arithmetic overflow at %L"
++msgstr "Аритметичко преливање код %L"
++
++#: fortran/arith.c:147
++msgid "Arithmetic underflow at %L"
++msgstr "Аритметичко подливање код %L"
++
++#: fortran/arith.c:150
++msgid "Arithmetic NaN at %L"
++msgstr "Аритметичко НаН код %L"
++
++#: fortran/arith.c:153
++msgid "Division by zero at %L"
++msgstr "Дељење нулом код %L"
++
++#: fortran/arith.c:156
++msgid "Array operands are incommensurate at %L"
++msgstr "Низовни операнди су несамерљиви код %L"
++
++#: fortran/arith.c:160
++msgid "Integer outside symmetric range implied by Standard Fortran at %L"
++msgstr "Цео број ван симетричног опсега имплицираног стандардним фортраном код %L"
++
++#: fortran/arith.c:1384
++msgid "Elemental binary operation"
++msgstr "Елементална бинарна операција"
++
++#: fortran/arith.c:1920
++#, no-c-format
++msgid "Arithmetic OK converting %s to %s at %L"
++msgstr "Аритметичко OK при претварању %s у %s код %L"
++
++#: fortran/arith.c:1924
++#, no-c-format
++msgid "Arithmetic overflow converting %s to %s at %L"
++msgstr "Аритметичко преливање при претварању %s у %s код %L"
++
++#: fortran/arith.c:1928
++#, no-c-format
++msgid "Arithmetic underflow converting %s to %s at %L"
++msgstr "Аритметичко подливање при претварању %s у %s код %L"
++
++#: fortran/arith.c:1932
++#, no-c-format
++msgid "Arithmetic NaN converting %s to %s at %L"
++msgstr "Аритметичко НаН при претварању %s у %s код %L"
++
++#: fortran/arith.c:1936
++#, no-c-format
++msgid "Division by zero converting %s to %s at %L"
++msgstr "Дељење нулом при претварању %s у %s код %L"
++
++#: fortran/arith.c:1940
++#, no-c-format
++msgid "Array operands are incommensurate converting %s to %s at %L"
++msgstr "Низовни операнди су несамерљиви при претварању %s у %s код %L"
++
++#: fortran/arith.c:1944
++#, no-c-format
++msgid "Integer outside symmetric range implied by Standard Fortran converting %s to %s at %L"
++msgstr "Цео број ван симетричног опсега имплицираног стандардним фортраном при претварању %s у %s код %L"
++
++#: fortran/arith.c:2277 fortran/arith.c:2312 fortran/arith.c:2349
++#: fortran/arith.c:2399
++#, no-c-format
++msgid "The Hollerith constant at %L is too long to convert to %s"
++msgstr "Холеритова константа код %L је предугачка за претварање у %s"
++
++#: fortran/arith.c:2445
++#, no-c-format
++msgid "Enumerator exceeds the C integer type at %C"
++msgstr "Набрајач премашује Ц-ов целобројни тип код %C"
++
++#: fortran/array.c:97
++#, no-c-format
++msgid "Expected array subscript at %C"
++msgstr "Очекиван је индекс низа код %C"
++
++#: fortran/array.c:124
++#, no-c-format
++msgid "Expected array subscript stride at %C"
++msgstr "Очекиван је корак индекса низа код %C"
++
++#: fortran/array.c:167
++#, no-c-format
++msgid "Invalid form of array reference at %C"
++msgstr "Неисправан облик упућивача низа код %C"
++
++#: fortran/array.c:172
++#, no-c-format
++msgid "Array reference at %C cannot have more than %d dimensions"
++msgstr "Упућивач низа код %C не може имати више од %d димензија"
++
++#: fortran/array.c:224
++#, no-c-format
++msgid "Variable '%s' at %L in this context must be constant"
++msgstr "Променљива ‘%s’ код %L мора бити константна у овом контексту"
++
++#: fortran/array.c:300
++#, no-c-format
++msgid "Expected expression in array specification at %C"
++msgstr "Очекиван је израз у одредници низа код %C"
++
++#: fortran/array.c:379
++#, no-c-format
++msgid "Bad array specification for an explicitly shaped array at %C"
++msgstr "Лоша одредница за низ експлицитног облика код %C"
++
++#: fortran/array.c:390
++#, no-c-format
++msgid "Bad array specification for assumed shape array at %C"
++msgstr "Лоша одредница за низ претпостављеног облика код %C"
++
++#: fortran/array.c:403
++#, no-c-format
++msgid "Bad specification for deferred shape array at %C"
++msgstr "Лоша одредница за низ одложеног облика код %C"
++
++#: fortran/array.c:407
++#, no-c-format
++msgid "Bad specification for assumed size array at %C"
++msgstr "Лоша одредница за низ претпостављене величине код %C"
++
++#: fortran/array.c:416
++#, no-c-format
++msgid "Expected another dimension in array declaration at %C"
++msgstr "Очекивана је друга димензија у декларацији низа код %C"
++
++#: fortran/array.c:422
++#, no-c-format
++msgid "Array specification at %C has more than %d dimensions"
++msgstr "Одредница низа код %C има више од %d димензија"
++
++#: fortran/array.c:627
++#, no-c-format
++msgid "duplicated initializer"
++msgstr "двоструки успостављач"
++
++#: fortran/array.c:720
++#, no-c-format
++msgid "DO-iterator '%s' at %L is inside iterator of the same name"
++msgstr "DO-итератор ‘%s’ код %L је унутар истоименог итератора"
++
++#: fortran/array.c:822 fortran/array.c:931
++#, no-c-format
++msgid "Syntax error in array constructor at %C"
++msgstr "Синтаксна грешка у конструктору низа код %C"
++
++#: fortran/array.c:877
++#, no-c-format
++msgid "New in Fortran 2003: [...] style array constructors at %C"
++msgstr "Ново у фортрану 2003: [...] конструктори низа код %C"
++
++#: fortran/array.c:891
++#, no-c-format
++msgid "Empty array constructor at %C is not allowed"
++msgstr "Празан конструктор низа код %C није дозвољен"
++
++#: fortran/array.c:976
++#, no-c-format
++msgid "Element in %s array constructor at %L is %s"
++msgstr "Елемент у конструктору низа %s код %L је %s"
++
++#: fortran/array.c:1305
++#, no-c-format
++msgid "Iterator step at %L cannot be zero"
++msgstr "Корак итератора код %L не може бити нула"
++
++#: fortran/check.c:44
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be %s"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити %s"
++
++#: fortran/check.c:60
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a numeric type"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити бројевног типа"
++
++#: fortran/check.c:75 fortran/check.c:684 fortran/check.c:694
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити целобројан или реалан"
++
++#: fortran/check.c:92
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити реалан или комплексан"
++
++#: fortran/check.c:118
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a constant"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити константа"
++
++#: fortran/check.c:126
++#, no-c-format
++msgid "Invalid kind for %s at %L"
++msgstr "Неисправна врста за %s код %L"
++
++#: fortran/check.c:146
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be double precision"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити двоструке тачности"
++
++#: fortran/check.c:163
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a logical array"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити логички низ"
++
++#: fortran/check.c:180
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be an array"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити низ"
++
++#: fortran/check.c:195
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a scalar"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити скалар"
++
++#: fortran/check.c:210
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be the same type and kind as '%s'"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити истог типа и врсте као ‘%s’"
++
++#: fortran/check.c:225
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be of rank %d"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити ранга %d"
++
++#: fortran/check.c:239
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must not be OPTIONAL"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L не сме бити опциони"
++
++#: fortran/check.c:259
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити врсте %d"
++
++#: fortran/check.c:280
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L не може бити намере-у"
++
++#: fortran/check.c:286
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a variable"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити променљива"
++
++#: fortran/check.c:303
++#, no-c-format
++msgid "Missing DIM parameter in intrinsic '%s' at %L"
++msgstr "Недостаје параметар DIM у сопственом ‘%s’ код %L"
++
++#: fortran/check.c:371
++#, no-c-format
++msgid "'dim' argument of '%s' intrinsic at %L is not a valid dimension index"
++msgstr "Аргумент ‘dim’ за сопствено ‘%s’ код %L није исправан димензиони индекс"
++
++#: fortran/check.c:456
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити резервљив"
++
++#: fortran/check.c:477 fortran/check.c:3178
++#, no-c-format
++msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type"
++msgstr "Аргументи ‘%s’ и ‘%s’ сопственог ‘%s’ код %L морају бити истог типа"
++
++#: fortran/check.c:486 fortran/check.c:974 fortran/check.c:1109
++#: fortran/check.c:1172 fortran/check.c:1397
++#, no-c-format
++msgid "Extension: Different type kinds at %L"
++msgstr "Проширење: Различите врсте типова код %L"
++
++#: fortran/check.c:511 fortran/check.c:1732
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити показивач"
++
++#: fortran/check.c:523
++#, no-c-format
++msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
++msgstr "Нулти показивач код %L није дозвољен као стварни аргумент сопствене функције ‘%s’"
++
++#: fortran/check.c:538
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER or a TARGET"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити показивач или циљ"
++
++#: fortran/check.c:554
++#, no-c-format
++msgid "Array section with a vector subscript at %L shall not be the target of a pointer"
++msgstr "Одељак низа са векторским индексом код %L неће бити циљ показивача"
++
++#: fortran/check.c:664 fortran/check.c:766
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must not be present if 'x' is COMPLEX"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L не сме бити присутан ако је ‘x’ комплексно"
++
++#: fortran/check.c:815 fortran/check.c:1477 fortran/check.c:1485
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити бројеван или логички"
++
++#: fortran/check.c:829
++#, no-c-format
++msgid "different shape for arguments '%s' and '%s' at %L for intrinsic 'dot_product'"
++msgstr "различити облици аргумената ‘%s’ и ‘%s’ код %L за сопствено ‘dot_product’"
++
++#: fortran/check.c:1079
++#, no-c-format
++msgid "Argument of %s at %L must be of length one"
++msgstr "Аргумент за %s код %L мора бити дужине један"
++
++#: fortran/check.c:1131
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be the same kind as '%s'"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити исте врсте као ‘%s’"
++
++#: fortran/check.c:1246
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be a non-derived type"
++msgstr "Аргумент ‘%s’ за сопствено ‘%s’ код %L мора бити неизведени тип"
++
++#: fortran/check.c:1369
++#, no-c-format
++msgid "Intrinsic '%s' at %L must have at least two arguments"
++msgstr "Сопствено ‘%s’ код %L мора имати бар два аргумента"
++
++#: fortran/check.c:1403
++#, no-c-format
++msgid "'a%d' argument of '%s' intrinsic at %L must be %s(%d)"
++msgstr "Аргумент ‘a%d’ сопственог ‘%s’ код %L мора бити %s(%d)"
++
++#: fortran/check.c:1428
++#, no-c-format
++msgid "'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL"
++msgstr "Аргумент ‘a1’ сопственог ‘%s’ код %L мора бити целобројан или реалан"
++
++#: fortran/check.c:1499
++#, no-c-format
++msgid "different shape on dimension 1 for arguments '%s' and '%s' at %L for intrinsic matmul"
++msgstr "различити облици по димензији 1 аргумената ‘%s’ и ‘%s’ код %L за сопствено ’matmul’"
++
++#: fortran/check.c:1519
++#, no-c-format
++msgid "different shape on dimension 2 for argument '%s' and dimension 1 for argument '%s' at %L for intrinsic matmul"
++msgstr "различити облици по димензији 2 аргумента ‘%s’ и димензији 1 аргумента ‘%s’ код %L за сопствено ’matmul’"
++
++#: fortran/check.c:1528
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be of rank 1 or 2"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити ранга 1 или 2"
++
++#: fortran/check.c:1779
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be of type REAL or COMPLEX"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити целобројан или реалан"
++
++#: fortran/check.c:1800
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити од лажне променљиве"
++
++#: fortran/check.c:1808
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити од опционе лажне променљиве"
++
++#: fortran/check.c:1924
++#, no-c-format
++msgid "'shape' argument of 'reshape' intrinsic at %L must be an array of constant size"
++msgstr "Аргумент ‘shape’ сопственог ‘reshape’ код %L мора бити низ константне величине"
++
++#: fortran/check.c:1934
++#, no-c-format
++msgid "'shape' argument of 'reshape' intrinsic at %L has more than %d elements"
++msgstr "Аргумент ‘shape’ сопственог ‘reshape’ код %L има више од %d елемената"
++
++#: fortran/check.c:2022
++#, no-c-format
++msgid "Missing arguments to %s intrinsic at %L"
++msgstr "Недостају аргументи за сопствено %s код %L"
++
++#: fortran/check.c:2063
++#, no-c-format
++msgid "'source' argument of 'shape' intrinsic at %L must not be an assumed size array"
++msgstr "Аргумент ‘source’ сопственог ‘shape’ код %L не сме бити низ претпостављене величине"
++
++#: fortran/check.c:2125
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be less than rank %d"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити мање ранга од %d"
++
++#: fortran/check.c:2582 fortran/check.c:2602
++#, no-c-format
++msgid "Too many arguments to %s at %L"
++msgstr "Превише аргумената за %s код %L"
++
++#: fortran/check.c:2730 fortran/check.c:3092 fortran/check.c:3116
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити целобројан или процедура"
++
++#: fortran/check.c:3163 fortran/check.c:3171
++#, no-c-format
++msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL"
++msgstr "Аргумент ‘%s’ сопственог ‘%s’ код %L мора бити целобројан или логички"
++
++#: fortran/data.c:63
++#, no-c-format
++msgid "non-constant array in DATA statement %L."
++msgstr "неконстантан низа у наредби DATA %L."
++
++#: fortran/data.c:327
++#, no-c-format
++msgid "Extension: re-initialization of '%s' at %L"
++msgstr "Проширење: реуспостављање ‘%s’ код %L"
++
++#: fortran/decl.c:208
++#, no-c-format
++msgid "Host associated variable '%s' may not be in the DATA statement at %C."
++msgstr "Домаћином придружена променљива ‘%s’ не може бити у наредби DATA код %C."
++
++#: fortran/decl.c:215
++#, no-c-format
++msgid "Extension: initialization of common block variable '%s' in DATA statement at %C"
++msgstr "Проширење: успостављање заједничког блока ‘%s’ у наредби DATA код %C"
++
++#: fortran/decl.c:301
++#, no-c-format
++msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C"
++msgstr "Симбол ‘%s’ мора бити параметар у наредби DATA код %C"
++
++#: fortran/decl.c:408
++#, no-c-format
++msgid "Initialization at %C is not allowed in a PURE procedure"
++msgstr "Иницијализација код %C није дозвољена у чистој процедури"
++
++#: fortran/decl.c:455
++#, no-c-format
++msgid "DATA statement at %C is not allowed in a PURE procedure"
++msgstr "Наредба DATA код %C није дозвољена у чистој процедури"
++
++#: fortran/decl.c:483
++#, no-c-format
++msgid "Bad INTENT specification at %C"
++msgstr "Лоша одредница намере код %C"
++
++#: fortran/decl.c:548
++#, no-c-format
++msgid "Syntax error in character length specification at %C"
++msgstr "Синтаксна грешка у одредници знаковне дужине код %C"
++
++#: fortran/decl.c:623
++#, no-c-format
++msgid "Procedure '%s' at %C is already defined at %L"
++msgstr "Процедура ‘%s’ код %C већ је дефинисана код %L"
++
++#: fortran/decl.c:633
++#, no-c-format
++msgid "Procedure '%s' at %C has an explicit interface and must not have attributes declared at %L"
++msgstr "Процедура ‘%s’ код %C има експлицитно сучеље и не може имати атрибуте декларисане код %L"
++
++#: fortran/decl.c:805
++#, no-c-format
++msgid "Initializer not allowed for PARAMETER '%s' at %C"
++msgstr "Иницијализатор није дозвољен за параметар ‘%s’ код %C"
++
++#: fortran/decl.c:814
++#, no-c-format
++msgid "Initializer not allowed for COMMON variable '%s' at %C"
++msgstr "Иницијализатор није дозвољен за заједничку променљиву ‘%s’ код %C"
++
++#: fortran/decl.c:824
++#, no-c-format
++msgid "PARAMETER at %L is missing an initializer"
++msgstr "Недостаје успостављач за параметар код %L"
++
++#: fortran/decl.c:835
++#, no-c-format
++msgid "Variable '%s' at %C with an initializer already appears in a DATA statement"
++msgstr "Променљива ‘%s’ код %C са успостављачем већ се појављује у наредби DATA"
++
++#: fortran/decl.c:913
++#, no-c-format
++msgid "Component at %C must have the POINTER attribute"
++msgstr "Компонента код %C мора имати атрибут показивача"
++
++#: fortran/decl.c:922
++#, no-c-format
++msgid "Array component of structure at %C must have explicit or deferred shape"
++msgstr "Низовна компонента структуре код %C мора имати експлицитан или одложени облик"
++
++#: fortran/decl.c:951
++#, no-c-format
++msgid "Pointer array component of structure at %C must have a deferred shape"
++msgstr "Показивачка низовна компонента структуре код %C мора имати одложен облик"
++
++#: fortran/decl.c:961
++#, no-c-format
++msgid "Array component of structure at %C must have an explicit shape"
++msgstr "Низовна компонента структуре код %C мора имати експлицитан облик"
++
++#: fortran/decl.c:987
++#, no-c-format
++msgid "NULL() initialization at %C is ambiguous"
++msgstr "Двосмислено успостављање NULL() код %C"
++
++#: fortran/decl.c:1054
++#, no-c-format
++msgid "Enumerator cannot be array at %C"
++msgstr "Набрајач не може бити низ код %C"
++
++#: fortran/decl.c:1115 fortran/decl.c:3374
++#, no-c-format
++msgid "Duplicate array spec for Cray pointee at %C."
++msgstr "Двострука одредница низа за Крејов показиваног код %C."
++
++#: fortran/decl.c:1167
++#, no-c-format
++msgid "Function name '%s' not allowed at %C"
++msgstr "Име функције ‘%s’ није дозвољено код %C"
++
++#: fortran/decl.c:1183
++#, no-c-format
++msgid "Extension: Old-style initialization at %C"
++msgstr "Проширење: Старовремско успостављање код %C"
++
++#: fortran/decl.c:1199
++#, no-c-format
++msgid "Initialization at %C isn't for a pointer variable"
++msgstr "Иницијализација код %C није за показивачку променљиву"
++
++#: fortran/decl.c:1207
++#, no-c-format
++msgid "Pointer initialization requires a NULL() at %C"
++msgstr "Иницијализација показивача код %C захтева NULL()"
++
++#: fortran/decl.c:1214
++#, no-c-format
++msgid "Initialization of pointer at %C is not allowed in a PURE procedure"
++msgstr "Иницијализација показивача код %C није дозвољена у чистој процедури"
++
++#: fortran/decl.c:1228
++#, no-c-format
++msgid "Pointer initialization at %C requires '=>', not '='"
++msgstr "Иницијализација показивача код %C захтева ‘=>’, не ‘=’"
++
++#: fortran/decl.c:1236
++#, no-c-format
++msgid "Expected an initialization expression at %C"
++msgstr "Очекиван је успостављачки израз код %C"
++
++#: fortran/decl.c:1243
++#, no-c-format
++msgid "Initialization of variable at %C is not allowed in a PURE procedure"
++msgstr "Иницијализација променљиве код %C није дозвољена у чистој процедури"
++
++#: fortran/decl.c:1265
++#, no-c-format
++msgid "ENUMERATOR %L not initialized with integer expression"
++msgstr "Набрајач %L није успостављен целобројним изразом"
++
++#: fortran/decl.c:1324 fortran/decl.c:1333
++#, no-c-format
++msgid "Old-style type declaration %s*%d not supported at %C"
++msgstr "Старовремска декларација типа %s*%d није подржана код %C"
++
++#: fortran/decl.c:1338
++#, no-c-format
++msgid "Nonstandard type declaration %s*%d at %C"
++msgstr "Нестандардна декларација типа %s*%d код %C"
++
++#: fortran/decl.c:1372
++#, no-c-format
++msgid "Expected initialization expression at %C"
++msgstr "Очекиван је успостављачки израз код %C"
++
++#: fortran/decl.c:1378
++#, no-c-format
++msgid "Expected scalar initialization expression at %C"
++msgstr "Очекиван је скаларни успостављачки израз код %C"
++
++#: fortran/decl.c:1396
++#, no-c-format
++msgid "Kind %d not supported for type %s at %C"
++msgstr "Врста %d није подржана за тип %s код %C"
++
++#: fortran/decl.c:1405
++#, no-c-format
++msgid "Missing right paren at %C"
++msgstr "Недостаје лева заграда код %C"
++
++#: fortran/decl.c:1494 fortran/decl.c:1537
++#, no-c-format
++msgid "Kind %d is not a CHARACTER kind at %C"
++msgstr "Врста %d није знаковна код %C"
++
++#: fortran/decl.c:1531
++#, no-c-format
++msgid "Syntax error in CHARACTER declaration at %C"
++msgstr "Синтаксна грешка у декларацији CHARACTER код %C"
++
++#: fortran/decl.c:1592
++#, no-c-format
++msgid "Extension: BYTE type at %C"
++msgstr "Проширење: тип BYTE код %C"
++
++#: fortran/decl.c:1598
++#, no-c-format
++msgid "BYTE type used at %C is not available on the target machine"
++msgstr "Тип BYTE употребљен код %C није доступан на циљној машини"
++
++#: fortran/decl.c:1647
++#, no-c-format
++msgid "DOUBLE COMPLEX at %C does not conform to the Fortran 95 standard"
++msgstr "DOUBLE COMPLEX код %C не поштује стандард фортрана 95"
++
++#: fortran/decl.c:1670
++#, no-c-format
++msgid "Type name '%s' at %C is ambiguous"
++msgstr "Двосмислено име типа ‘%s’ код %C"
++
++#: fortran/decl.c:1736
++#, no-c-format
++msgid "Missing character range in IMPLICIT at %C"
++msgstr "Недостаје знаковни опсег за имплицитно код %C"
++
++#: fortran/decl.c:1782
++#, no-c-format
++msgid "Letters must be in alphabetic order in IMPLICIT statement at %C"
++msgstr "Слова морају бити у алфабетском поретку у наредби IMPLICIT код %C"
++
++#: fortran/decl.c:1836
++#, no-c-format
++msgid "Empty IMPLICIT statement at %C"
++msgstr "Празна наредба IMPLICIT код %C"
++
++#: fortran/decl.c:2000
++#, no-c-format
++msgid "Enumerator cannot have attributes %C"
++msgstr "Набрајач не може имати атрибуте %C"
++
++#: fortran/decl.c:2013
++#, no-c-format
++msgid "Missing dimension specification at %C"
++msgstr "Недостаје одредница димензија код %C"
++
++#: fortran/decl.c:2095
++#, no-c-format
++msgid "Duplicate %s attribute at %L"
++msgstr "Двоструки атрибут %s код %L"
++
++#: fortran/decl.c:2112
++#, no-c-format
++msgid "Attribute at %L is not allowed in a TYPE definition"
++msgstr "Атрибут код %L није дозвољен у дефиницији типа"
++
++#: fortran/decl.c:2126
++#, no-c-format
++msgid "%s attribute at %L is not allowed outside of a MODULE"
++msgstr "Атрибут %s код %L није дозвољен изван модула"
++
++#. Now we have an error, which we signal, and then fix up
++#. because the knock-on is plain and simple confusing.
++#: fortran/decl.c:2264
++#, no-c-format
++msgid "Derived type at %C has not been previously defined and so cannot appear in a derived type definition."
++msgstr "Изведени тип код %C није претходно дефинисан и зато се не може појавити у дефиницији изведеног типа."
++
++#: fortran/decl.c:2294
++#, no-c-format
++msgid "Syntax error in data declaration at %C"
++msgstr "Синтаксна грешка у декларацији података код %C"
++
++#: fortran/decl.c:2440
++#, no-c-format
++msgid "Name '%s' at %C is the name of the procedure"
++msgstr "Име ‘%s’ код %C је име процедуре"
++
++#: fortran/decl.c:2452
++#, no-c-format
++msgid "Unexpected junk in formal argument list at %C"
++msgstr "Неочекивано смеће у формалној листи аргумената код %C"
++
++#: fortran/decl.c:2470
++#, no-c-format
++msgid "Duplicate symbol '%s' in formal argument list at %C"
++msgstr "Двоструки симбол ‘%s’ у формалној листи аргумената код %C"
++
++#: fortran/decl.c:2513
++#, no-c-format
++msgid "Unexpected junk following RESULT variable at %C"
++msgstr "Неочекивано смеће после променљиве RESULT код %C"
++
++#: fortran/decl.c:2520
++#, no-c-format
++msgid "RESULT variable at %C must be different than function name"
++msgstr "Променљива RESULT код %C мора бити различита од имена функције"
++
++#: fortran/decl.c:2575
++#, no-c-format
++msgid "Expected formal argument list in function definition at %C"
++msgstr "Очекивана је формална листа аргумената у дефиницији функције код %C"
++
++#: fortran/decl.c:2586
++#, no-c-format
++msgid "Unexpected junk after function declaration at %C"
++msgstr "Неочекивано смеће после декларације функције код %C"
++
++#: fortran/decl.c:2607
++#, no-c-format
++msgid "Function '%s' at %C already has a type of %s"
++msgstr "Функција ‘%s’ код %C већ има тип %s"
++
++#: fortran/decl.c:2678
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a PROGRAM"
++msgstr "Наредба ENTRY код %C не може бити унутар PROGRAM"
++
++#: fortran/decl.c:2681
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a MODULE"
++msgstr "Наредба ENTRY код %C не може бити унутар MODULE"
++
++#: fortran/decl.c:2685
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a BLOCK DATA"
++msgstr "Наредба ENTRY код %C не може бити унутар BLOCK DATA"
++
++#: fortran/decl.c:2689
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within an INTERFACE"
++msgstr "Наредба ENTRY код %C не може бити унутар INTERFACE"
++
++#: fortran/decl.c:2693
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block"
++msgstr "Наредба ENTRY код %C не може бити унутар блока DERIVED TYPE"
++
++#: fortran/decl.c:2698
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within an IF-THEN block"
++msgstr "Наредба ENTRY код %C не може бити унутар блока IF-THEN"
++
++#: fortran/decl.c:2702
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a DO block"
++msgstr "Наредба ENTRY код %C не може бити унутар блока DO"
++
++#: fortran/decl.c:2706
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a SELECT block"
++msgstr "Наредба ENTRY код %C не може бити унутар блока SELECT"
++
++#: fortran/decl.c:2710
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a FORALL block"
++msgstr "Наредба ENTRY код %C не може бити унутар блока FORALL"
++
++#: fortran/decl.c:2714
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a WHERE block"
++msgstr "Наредба ENTRY код %C не може бити унутар блока WHERE"
++
++#: fortran/decl.c:2718
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear within a contained subprogram"
++msgstr "Наредба ENTRY код %C не може бити унутар садржаног потпрограма"
++
++#: fortran/decl.c:2731
++#, no-c-format
++msgid "ENTRY statement at %C cannot appear in a contained procedure"
++msgstr "Наредба ENTRY код %C не може бити у садржаној процедури"
++
++#: fortran/decl.c:2812
++#, no-c-format
++msgid "RESULT attribute required in ENTRY statement at %C"
++msgstr "Неопходан је атрибут RESULT у наредби ENTRY код %C"
++
++#: fortran/decl.c:3053
++#, no-c-format
++msgid "Unexpected END statement at %C"
++msgstr "Неочекивана наредба END код %C"
++
++#. We would have required END [something]
++#: fortran/decl.c:3062
++#, no-c-format
++msgid "%s statement expected at %L"
++msgstr "Очекивана је наредба %s код %L"
++
++#: fortran/decl.c:3073
++#, no-c-format
++msgid "Expecting %s statement at %C"
++msgstr "Очекивана је наредба %s код %C"
++
++#: fortran/decl.c:3087
++#, no-c-format
++msgid "Expected block name of '%s' in %s statement at %C"
++msgstr "Очекивано је име блока за ‘%s’ у наредби %s код %C"
++
++#: fortran/decl.c:3103
++#, no-c-format
++msgid "Expected terminating name at %C"
++msgstr "Очекивано је завршно име код %C"
++
++#: fortran/decl.c:3112
++#, no-c-format
++msgid "Expected label '%s' for %s statement at %C"
++msgstr "Очекивана је етикета ‘%s’ за наредбу %s код %C"
++
++#: fortran/decl.c:3167
++#, no-c-format
++msgid "Missing array specification at %L in DIMENSION statement"
++msgstr "Недостаје одредница низа код %L у наредби DIMENSION"
++
++#: fortran/decl.c:3176
++#, no-c-format
++msgid "Array specification must be deferred at %L"
++msgstr "Одредница низа мора бити одложена код %L"
++
++#: fortran/decl.c:3253
++#, no-c-format
++msgid "Unexpected character in variable list at %C"
++msgstr "Неочекиван знак у листи променљивих код %C"
++
++#: fortran/decl.c:3290
++#, no-c-format
++msgid "Expected '(' at %C"
++msgstr "Очекивано је ‘(’ код %C"
++
++#: fortran/decl.c:3304 fortran/decl.c:3345
++#, no-c-format
++msgid "Expected variable name at %C"
++msgstr "Очекивано је име променљиве код %C"
++
++#: fortran/decl.c:3320
++#, no-c-format
++msgid "Cray pointer at %C must be an integer."
++msgstr "Крејов показивач код %C мора бити целобројни."
++
++#: fortran/decl.c:3324
++#, no-c-format
++msgid "Cray pointer at %C has %d bytes of precision; memory addresses require %d bytes."
++msgstr "Крејов показивач код %C има %d бајтова тачности; меморијска адреса захтева %d бајтова."
++
++#: fortran/decl.c:3331
++#, no-c-format
++msgid "Expected \",\" at %C"
++msgstr "Очекивано је ‘,’ код %C"
++
++#: fortran/decl.c:3394
++#, no-c-format
++msgid "Expected \")\" at %C"
++msgstr "Очекивано је ‘)’ код %C"
++
++#: fortran/decl.c:3406
++#, no-c-format
++msgid "Expected \",\" or end of statement at %C"
++msgstr "Очекивано је ‘,’ или крај наредбе код %C"
++
++#: fortran/decl.c:3471
++#, no-c-format
++msgid "Cray pointer declaration at %C requires -fcray-pointer flag."
++msgstr "Декларација Крејовог показивача код %C захтева заставицу -fcray-pointer."
++
++#: fortran/decl.c:3569
++#, no-c-format
++msgid "Access specification of the %s operator at %C has already been specified"
++msgstr "Одредница приступа оператора %s код %C је већ наведена"
++
++#: fortran/decl.c:3587
++#, no-c-format
++msgid "Access specification of the .%s. operator at %C has already been specified"
++msgstr "Одредница приступа оператора .%s. код %C је већ наведена"
++
++#: fortran/decl.c:3674
++#, no-c-format
++msgid "Expected variable name at %C in PARAMETER statement"
++msgstr "Очекивано је име променљиве код %C у наредби PARAMETER"
++
++#: fortran/decl.c:3681
++#, no-c-format
++msgid "Expected = sign in PARAMETER statement at %C"
++msgstr "Очекиван је знак = у наредби PARAMETER код %C"
++
++#: fortran/decl.c:3687
++#, no-c-format
++msgid "Expected expression at %C in PARAMETER statement"
++msgstr "Очекиван је израз код %C у наредби PARAMETER"
++
++#: fortran/decl.c:3745
++#, no-c-format
++msgid "Unexpected characters in PARAMETER statement at %C"
++msgstr "Неочекивани знакови у наредби PARAMETER код %C"
++
++#: fortran/decl.c:3770
++#, no-c-format
++msgid "Blanket SAVE statement at %C follows previous SAVE statement"
++msgstr "Покривачка наредба SAVE код %C прати претходну наредбу SAVE"
++
++#: fortran/decl.c:3783
++#, no-c-format
++msgid "SAVE statement at %C follows blanket SAVE statement"
++msgstr "Наредба SAVE код %C прати покривачку наредбу SAVE"
++
++#: fortran/decl.c:3829
++#, no-c-format
++msgid "Syntax error in SAVE statement at %C"
++msgstr "Синтаксна грешка у наредби SAVE код %C"
++
++#: fortran/decl.c:3850
++#, no-c-format
++msgid "MODULE PROCEDURE at %C must be in a generic module interface"
++msgstr "MODULE PROCEDURE код %C мора бити у генеричком сучељу модула"
++
++#: fortran/decl.c:3910
++#, no-c-format
++msgid "Derived type at %C can only be PRIVATE within a MODULE"
++msgstr "Изведени тип код %C може бити само приватан унутар модула"
++
++#: fortran/decl.c:3923
++#, no-c-format
++msgid "Derived type at %C can only be PUBLIC within a MODULE"
++msgstr "Изведени тип код %C може бити само јаван унутар модула"
++
++#: fortran/decl.c:3934
++#, no-c-format
++msgid "Expected :: in TYPE definition at %C"
++msgstr "Очекивано је :: у дефиницији TYPE код %C"
++
++#: fortran/decl.c:3951
++#, no-c-format
++msgid "Type name '%s' at %C cannot be the same as an intrinsic type"
++msgstr "Име типа ‘%s’ код %C не може бити исто као сопственог типа"
++
++#: fortran/decl.c:3961
++#, no-c-format
++msgid "Derived type name '%s' at %C already has a basic type of %s"
++msgstr "Име изведеног типа ‘%s’ код %C већ има основни тип %s"
++
++#: fortran/decl.c:3978
++#, no-c-format
++msgid "Derived type definition of '%s' at %C has already been defined"
++msgstr "Дефиниција изведеног типа ‘%s’ код %C је већ учињена"
++
++#: fortran/decl.c:4012
++#, no-c-format
++msgid "Cray Pointee at %C cannot be assumed shape array"
++msgstr "Крејов показивани код %C не може бити низ претпостављеног облика"
++
++#: fortran/decl.c:4033
++#, no-c-format
++msgid "New in Fortran 2003: ENUM AND ENUMERATOR at %C"
++msgstr "Ново у фортрану 2003: ENUM AND ENUMERATOR код %C"
++
++#: fortran/decl.c:4057
++#, no-c-format
++msgid "ENUM definition statement expected before %C"
++msgstr "Очекивана је наредба дефиниције ENUM пре %C"
++
++#: fortran/decl.c:4090
++#, no-c-format
++msgid "Syntax error in ENUMERATOR definition at %C"
++msgstr "Синтаксна грешка у дефиницији ENUMERATOR код %C"
++
++#: fortran/dump-parse-tree.c:53
++#, c-format
++msgid "%-5d "
++msgstr "%-5d "
++
++#: fortran/dump-parse-tree.c:55
++#, c-format
++msgid "      "
++msgstr "      "
++
++#: fortran/dump-parse-tree.c:79 fortran/dump-parse-tree.c:597
++#, c-format
++msgid "(%s "
++msgstr "(%s "
++
++#: fortran/dump-parse-tree.c:92 fortran/dump-parse-tree.c:844
++#: fortran/dump-parse-tree.c:881 fortran/dump-parse-tree.c:891
++#, c-format
++msgid "%d"
++msgstr "%d"
++
++#: fortran/dump-parse-tree.c:96 fortran/dump-parse-tree.c:123
++#: fortran/dump-parse-tree.c:166 fortran/dump-parse-tree.c:403
++#: fortran/dump-parse-tree.c:498 fortran/dump-parse-tree.c:584
++#: fortran/dump-parse-tree.c:605
++#, c-format
++msgid ")"
++msgstr ")"
++
++#: fortran/dump-parse-tree.c:106 fortran/dump-parse-tree.c:421
++#, c-format
++msgid "("
++msgstr "("
++
++#: fortran/dump-parse-tree.c:112
++#, c-format
++msgid "%s = "
++msgstr "%s = "
++
++#: fortran/dump-parse-tree.c:116
++#, c-format
++msgid "(arg not-present)"
++msgstr "(arg not-present)"
++
++#: fortran/dump-parse-tree.c:120 fortran/dump-parse-tree.c:397
++#: fortran/dump-parse-tree.c:494
++#, c-format
++msgid " "
++msgstr " "
++
++#: fortran/dump-parse-tree.c:137 fortran/dump-parse-tree.c:312
++#, c-format
++msgid "()"
++msgstr "()"
++
++#: fortran/dump-parse-tree.c:141
++#, c-format
++msgid "(%d"
++msgstr "(%d"
++
++#: fortran/dump-parse-tree.c:155
++#, c-format
++msgid " %s "
++msgstr " %s "
++
++#: fortran/dump-parse-tree.c:182
++#, c-format
++msgid "FULL"
++msgstr "FULL"
++
++#: fortran/dump-parse-tree.c:213 fortran/dump-parse-tree.c:222
++#: fortran/dump-parse-tree.c:297
++#, c-format
++msgid " , "
++msgstr " , "
++
++#: fortran/dump-parse-tree.c:227
++#, c-format
++msgid "UNKNOWN"
++msgstr "UNKNOWN"
++
++#: fortran/dump-parse-tree.c:252
++#, c-format
++msgid " %% %s"
++msgstr " %% %s"
++
++#: fortran/dump-parse-tree.c:324 fortran/dump-parse-tree.c:381
++#, c-format
++msgid "''"
++msgstr "''"
++
++#: fortran/dump-parse-tree.c:326
++#, c-format
++msgid "%c"
++msgstr "%c"
++
++#: fortran/dump-parse-tree.c:333
++#, c-format
++msgid "%s("
++msgstr "%s("
++
++#: fortran/dump-parse-tree.c:339
++#, c-format
++msgid "(/ "
++msgstr "(/ "
++
++#: fortran/dump-parse-tree.c:341
++#, c-format
++msgid " /)"
++msgstr " /)"
++
++#: fortran/dump-parse-tree.c:347
++#, c-format
++msgid "NULL()"
++msgstr "NULL()"
++
++#: fortran/dump-parse-tree.c:357 fortran/dump-parse-tree.c:370
++#: fortran/dump-parse-tree.c:395 fortran/dump-parse-tree.c:401
++#, c-format
++msgid "_%d"
++msgstr "_%d"
++
++#: fortran/dump-parse-tree.c:362
++#, c-format
++msgid ".true."
++msgstr ".true."
++
++#: fortran/dump-parse-tree.c:364
++#, c-format
++msgid ".false."
++msgstr ".false."
++
++#: fortran/dump-parse-tree.c:391
++#, c-format
++msgid "(complex "
++msgstr "(complex "
++
++#: fortran/dump-parse-tree.c:407
++#, c-format
++msgid "???"
++msgstr "???"
++
++#: fortran/dump-parse-tree.c:415 fortran/dump-parse-tree.c:701
++#, c-format
++msgid "%s:"
++msgstr "%s:"
++
++#: fortran/dump-parse-tree.c:425
++#, c-format
++msgid "U+ "
++msgstr "U+ "
++
++#: fortran/dump-parse-tree.c:428
++#, c-format
++msgid "U- "
++msgstr "U- "
++
++#: fortran/dump-parse-tree.c:431
++#, c-format
++msgid "+ "
++msgstr "+ "
++
++#: fortran/dump-parse-tree.c:434
++#, c-format
++msgid "- "
++msgstr "- "
++
++#: fortran/dump-parse-tree.c:437
++#, c-format
++msgid "* "
++msgstr "* "
++
++#: fortran/dump-parse-tree.c:440
++#, c-format
++msgid "/ "
++msgstr "/ "
++
++#: fortran/dump-parse-tree.c:443
++#, c-format
++msgid "** "
++msgstr "** "
++
++#: fortran/dump-parse-tree.c:446
++#, c-format
++msgid "// "
++msgstr "// "
++
++#: fortran/dump-parse-tree.c:449
++#, c-format
++msgid "AND "
++msgstr "AND "
++
++#: fortran/dump-parse-tree.c:452
++#, c-format
++msgid "OR "
++msgstr "OR "
++
++#: fortran/dump-parse-tree.c:455
++#, c-format
++msgid "EQV "
++msgstr "EQV "
++
++#: fortran/dump-parse-tree.c:458
++#, c-format
++msgid "NEQV "
++msgstr "NEQV "
++
++#: fortran/dump-parse-tree.c:461
++#, c-format
++msgid "= "
++msgstr "= "
++
++#: fortran/dump-parse-tree.c:464
++#, c-format
++msgid "<> "
++msgstr "<> "
++
++#: fortran/dump-parse-tree.c:467
++#, c-format
++msgid "> "
++msgstr "> "
++
++#: fortran/dump-parse-tree.c:470
++#, c-format
++msgid ">= "
++msgstr ">= "
++
++#: fortran/dump-parse-tree.c:473
++#, c-format
++msgid "< "
++msgstr "< "
++
++#: fortran/dump-parse-tree.c:476
++#, c-format
++msgid "<= "
++msgstr "<= "
++
++#: fortran/dump-parse-tree.c:479
++#, c-format
++msgid "NOT "
++msgstr "NOT "
++
++#: fortran/dump-parse-tree.c:482
++#, c-format
++msgid "parens"
++msgstr "заграде"
++
++#: fortran/dump-parse-tree.c:504
++#, c-format
++msgid "%s["
++msgstr "%s["
++
++#: fortran/dump-parse-tree.c:510
++#, c-format
++msgid "%s[["
++msgstr "%s[["
++
++#: fortran/dump-parse-tree.c:531
++#, c-format
++msgid "(%s %s %s %s"
++msgstr "(%s %s %s %s"
++
++#: fortran/dump-parse-tree.c:537
++#, c-format
++msgid " ALLOCATABLE"
++msgstr " ALLOCATABLE"
++
++#: fortran/dump-parse-tree.c:539 fortran/dump-parse-tree.c:602
++#, c-format
++msgid " DIMENSION"
++msgstr " DIMENSION"
++
++#: fortran/dump-parse-tree.c:541
++#, c-format
++msgid " EXTERNAL"
++msgstr " EXTERNAL"
++
++#: fortran/dump-parse-tree.c:543
++#, c-format
++msgid " INTRINSIC"
++msgstr " INTRINSIC"
++
++#: fortran/dump-parse-tree.c:545
++#, c-format
++msgid " OPTIONAL"
++msgstr " OPTIONAL"
++
++#: fortran/dump-parse-tree.c:547 fortran/dump-parse-tree.c:600
++#, c-format
++msgid " POINTER"
++msgstr " POINTER"
++
++#: fortran/dump-parse-tree.c:549
++#, c-format
++msgid " SAVE"
++msgstr " SAVE"
++
++#: fortran/dump-parse-tree.c:551
++#, c-format
++msgid " TARGET"
++msgstr " TARGET"
++
++#: fortran/dump-parse-tree.c:553
++#, c-format
++msgid " DUMMY"
++msgstr " DUMMY"
++
++#: fortran/dump-parse-tree.c:555
++#, c-format
++msgid " RESULT"
++msgstr " RESULT"
++
++#: fortran/dump-parse-tree.c:557
++#, c-format
++msgid " ENTRY"
++msgstr " ENTRY"
++
++#: fortran/dump-parse-tree.c:560
++#, c-format
++msgid " DATA"
++msgstr " DATA"
++
++#: fortran/dump-parse-tree.c:562
++#, c-format
++msgid " USE-ASSOC"
++msgstr " USE-ASSOC"
++
++#: fortran/dump-parse-tree.c:564
++#, c-format
++msgid " IN-NAMELIST"
++msgstr " IN-NAMELIST"
++
++#: fortran/dump-parse-tree.c:566
++#, c-format
++msgid " IN-COMMON"
++msgstr " IN-COMMON"
++
++#: fortran/dump-parse-tree.c:569
++#, c-format
++msgid " FUNCTION"
++msgstr " FUNCTION"
++
++#: fortran/dump-parse-tree.c:571
++#, c-format
++msgid " SUBROUTINE"
++msgstr " SUBROUTINE"
++
++#: fortran/dump-parse-tree.c:573
++#, c-format
++msgid " IMPLICIT-TYPE"
++msgstr " IMPLICIT-TYPE"
++
++#: fortran/dump-parse-tree.c:576
++#, c-format
++msgid " SEQUENCE"
++msgstr " SEQUENCE"
++
++#: fortran/dump-parse-tree.c:578
++#, c-format
++msgid " ELEMENTAL"
++msgstr " ELEMENTAL"
++
++#: fortran/dump-parse-tree.c:580
++#, c-format
++msgid " PURE"
++msgstr " PURE"
++
++#: fortran/dump-parse-tree.c:582
++#, c-format
++msgid " RECURSIVE"
++msgstr " RECURSIVE"
++
++#: fortran/dump-parse-tree.c:628
++#, c-format
++msgid "symbol %s "
++msgstr "симбол %s "
++
++#: fortran/dump-parse-tree.c:635
++#, c-format
++msgid "value: "
++msgstr "вредност: "
++
++#: fortran/dump-parse-tree.c:642
++#, c-format
++msgid "Array spec:"
++msgstr "Одредница низа:"
++
++#: fortran/dump-parse-tree.c:649
++#, c-format
++msgid "Generic interfaces:"
++msgstr "Генеричка сучеља:"
++
++#: fortran/dump-parse-tree.c:651 fortran/dump-parse-tree.c:675
++#: fortran/dump-parse-tree.c:704 fortran/dump-parse-tree.c:1044
++#: fortran/dump-parse-tree.c:1050 fortran/dump-parse-tree.c:1535
++#, c-format
++msgid " %s"
++msgstr " %s"
++
++#: fortran/dump-parse-tree.c:657
++#, c-format
++msgid "result: %s"
++msgstr "резултат: %s"
++
++#: fortran/dump-parse-tree.c:663
++#, c-format
++msgid "components: "
++msgstr "компоненте: "
++
++#: fortran/dump-parse-tree.c:670
++#, c-format
++msgid "Formal arglist:"
++msgstr "Формална арглиста:"
++
++#: fortran/dump-parse-tree.c:677
++#, c-format
++msgid " [Alt Return]"
++msgstr " [алт ретурн]"
++
++#: fortran/dump-parse-tree.c:684
++#, c-format
++msgid "Formal namespace"
++msgstr "Формални именски простор"
++
++#: fortran/dump-parse-tree.c:742
++#, c-format
++msgid "common: /%s/ "
++msgstr "заједничко: /%s/ "
++
++#: fortran/dump-parse-tree.c:750 fortran/dump-parse-tree.c:1471
++#, c-format
++msgid ", "
++msgstr ", "
++
++#: fortran/dump-parse-tree.c:763
++#, c-format
++msgid "symtree: %s  Ambig %d"
++msgstr "симстабло: %s  двосм %d"
++
++#: fortran/dump-parse-tree.c:766
++#, c-format
++msgid " from namespace %s"
++msgstr " из именског простора %s"
++
++#: fortran/dump-parse-tree.c:810
++#, c-format
++msgid "NOP"
++msgstr "NOP"
++
++#: fortran/dump-parse-tree.c:814
++#, c-format
++msgid "CONTINUE"
++msgstr "CONTINUE"
++
++#: fortran/dump-parse-tree.c:818
++#, c-format
++msgid "ENTRY %s"
++msgstr "ENTRY %s"
++
++#: fortran/dump-parse-tree.c:822
++#, c-format
++msgid "ASSIGN "
++msgstr "ASSIGN "
++
++#: fortran/dump-parse-tree.c:829
++#, c-format
++msgid "LABEL ASSIGN "
++msgstr "LABEL ASSIGN "
++
++#: fortran/dump-parse-tree.c:831
++#, c-format
++msgid " %d"
++msgstr " %d"
++
++#: fortran/dump-parse-tree.c:835
++#, c-format
++msgid "POINTER ASSIGN "
++msgstr "POINTER ASSIGN "
++
++#: fortran/dump-parse-tree.c:842
++#, c-format
++msgid "GOTO "
++msgstr "GOTO "
++
++#: fortran/dump-parse-tree.c:851
++#, c-format
++msgid ", ("
++msgstr ", ("
++
++#: fortran/dump-parse-tree.c:865
++#, c-format
++msgid "CALL %s "
++msgstr "CALL %s "
++
++#: fortran/dump-parse-tree.c:870
++#, c-format
++msgid "RETURN "
++msgstr "RETURN "
++
++#: fortran/dump-parse-tree.c:876
++#, c-format
++msgid "PAUSE "
++msgstr "PAUSE "
++
++#: fortran/dump-parse-tree.c:886
++#, c-format
++msgid "STOP "
++msgstr "STOP "
++
++#: fortran/dump-parse-tree.c:896 fortran/dump-parse-tree.c:904
++#, c-format
++msgid "IF "
++msgstr "IF "
++
++#: fortran/dump-parse-tree.c:898
++#, c-format
++msgid " %d, %d, %d"
++msgstr " %d, %d, %d"
++
++#: fortran/dump-parse-tree.c:915
++#, c-format
++msgid "ELSE\n"
++msgstr "ELSE\n"
++
++#: fortran/dump-parse-tree.c:918
++#, c-format
++msgid "ELSE IF "
++msgstr "ELSE IF "
++
++#: fortran/dump-parse-tree.c:928
++#, c-format
++msgid "ENDIF"
++msgstr "ENDIF"
++
++#: fortran/dump-parse-tree.c:933
++#, c-format
++msgid "SELECT CASE "
++msgstr "SELECT CASE "
++
++#: fortran/dump-parse-tree.c:941
++#, c-format
++msgid "CASE "
++msgstr "CASE "
++
++#: fortran/dump-parse-tree.c:957
++#, c-format
++msgid "END SELECT"
++msgstr "END SELECT"
++
++#: fortran/dump-parse-tree.c:961
++#, c-format
++msgid "WHERE "
++msgstr "WHERE "
++
++#: fortran/dump-parse-tree.c:972
++#, c-format
++msgid "ELSE WHERE "
++msgstr "ELSE WHERE "
++
++#: fortran/dump-parse-tree.c:979
++#, c-format
++msgid "END WHERE"
++msgstr "END WHERE"
++
++#: fortran/dump-parse-tree.c:984
++#, c-format
++msgid "FORALL "
++msgstr "FORALL "
++
++#: fortran/dump-parse-tree.c:1009
++#, c-format
++msgid "END FORALL"
++msgstr "END FORALL"
++
++#: fortran/dump-parse-tree.c:1013
++#, c-format
++msgid "DO "
++msgstr "DO "
++
++#: fortran/dump-parse-tree.c:1027 fortran/dump-parse-tree.c:1038
++#, c-format
++msgid "END DO"
++msgstr "END DO"
++
++#: fortran/dump-parse-tree.c:1031
++#, c-format
++msgid "DO WHILE "
++msgstr "DO WHILE "
++
++#: fortran/dump-parse-tree.c:1042
++#, c-format
++msgid "CYCLE"
++msgstr "CYCLE"
++
++#: fortran/dump-parse-tree.c:1048
++#, c-format
++msgid "EXIT"
++msgstr "EXIT"
++
++#: fortran/dump-parse-tree.c:1054
++#, c-format
++msgid "ALLOCATE "
++msgstr "ALLOCATE "
++
++#: fortran/dump-parse-tree.c:1057 fortran/dump-parse-tree.c:1073
++#, c-format
++msgid " STAT="
++msgstr " STAT="
++
++#: fortran/dump-parse-tree.c:1070
++#, c-format
++msgid "DEALLOCATE "
++msgstr "DEALLOCATE "
++
++#: fortran/dump-parse-tree.c:1086
++#, c-format
++msgid "OPEN"
++msgstr "OPEN"
++
++#: fortran/dump-parse-tree.c:1091 fortran/dump-parse-tree.c:1170
++#: fortran/dump-parse-tree.c:1212 fortran/dump-parse-tree.c:1235
++#: fortran/dump-parse-tree.c:1387
++#, c-format
++msgid " UNIT="
++msgstr " UNIT="
++
++#: fortran/dump-parse-tree.c:1096 fortran/dump-parse-tree.c:1175
++#: fortran/dump-parse-tree.c:1217 fortran/dump-parse-tree.c:1246
++#: fortran/dump-parse-tree.c:1404
++#, c-format
++msgid " IOMSG="
++msgstr " IOMSG="
++
++#: fortran/dump-parse-tree.c:1101 fortran/dump-parse-tree.c:1180
++#: fortran/dump-parse-tree.c:1222 fortran/dump-parse-tree.c:1251
++#: fortran/dump-parse-tree.c:1409
++#, c-format
++msgid " IOSTAT="
++msgstr " IOSTAT="
++
++#: fortran/dump-parse-tree.c:1106 fortran/dump-parse-tree.c:1240
++#, c-format
++msgid " FILE="
++msgstr " FILE="
++
++#: fortran/dump-parse-tree.c:1111 fortran/dump-parse-tree.c:1185
++#, c-format
++msgid " STATUS="
++msgstr " STATUS="
++
++#: fortran/dump-parse-tree.c:1116 fortran/dump-parse-tree.c:1281
++#, c-format
++msgid " ACCESS="
++msgstr " ACCESS="
++
++#: fortran/dump-parse-tree.c:1121 fortran/dump-parse-tree.c:1297
++#, c-format
++msgid " FORM="
++msgstr " FORM="
++
++#: fortran/dump-parse-tree.c:1126 fortran/dump-parse-tree.c:1312
++#, c-format
++msgid " RECL="
++msgstr " RECL="
++
++#: fortran/dump-parse-tree.c:1131 fortran/dump-parse-tree.c:1322
++#, c-format
++msgid " BLANK="
++msgstr " BLANK="
++
++#: fortran/dump-parse-tree.c:1136 fortran/dump-parse-tree.c:1327
++#, c-format
++msgid " POSITION="
++msgstr " POSITION="
++
++#: fortran/dump-parse-tree.c:1141 fortran/dump-parse-tree.c:1332
++#, c-format
++msgid " ACTION="
++msgstr " ACTION="
++
++#: fortran/dump-parse-tree.c:1146 fortran/dump-parse-tree.c:1352
++#, c-format
++msgid " DELIM="
++msgstr " DELIM="
++
++#: fortran/dump-parse-tree.c:1151 fortran/dump-parse-tree.c:1357
++#, c-format
++msgid " PAD="
++msgstr " PAD="
++
++#: fortran/dump-parse-tree.c:1156 fortran/dump-parse-tree.c:1362
++#, c-format
++msgid " CONVERT="
++msgstr " CONVERT="
++
++#: fortran/dump-parse-tree.c:1160 fortran/dump-parse-tree.c:1189
++#: fortran/dump-parse-tree.c:1226 fortran/dump-parse-tree.c:1367
++#: fortran/dump-parse-tree.c:1444
++#, c-format
++msgid " ERR=%d"
++msgstr " ERR=%d"
++
++#: fortran/dump-parse-tree.c:1165
++#, c-format
++msgid "CLOSE"
++msgstr "CLOSE"
++
++#: fortran/dump-parse-tree.c:1193
++#, c-format
++msgid "BACKSPACE"
++msgstr "BACKSPACE"
++
++#: fortran/dump-parse-tree.c:1197
++#, c-format
++msgid "ENDFILE"
++msgstr "ENDFILE"
++
++#: fortran/dump-parse-tree.c:1201
++#, c-format
++msgid "REWIND"
++msgstr "REWIND"
++
++#: fortran/dump-parse-tree.c:1205
++#, c-format
++msgid "FLUSH"
++msgstr "FLUSH"
++
++#: fortran/dump-parse-tree.c:1230
++#, c-format
++msgid "INQUIRE"
++msgstr "INQUIRE"
++
++#: fortran/dump-parse-tree.c:1256
++#, c-format
++msgid " EXIST="
++msgstr " EXIST="
++
++#: fortran/dump-parse-tree.c:1261
++#, c-format
++msgid " OPENED="
++msgstr " OPENED="
++
++#: fortran/dump-parse-tree.c:1266
++#, c-format
++msgid " NUMBER="
++msgstr " NUMBER="
++
++#: fortran/dump-parse-tree.c:1271
++#, c-format
++msgid " NAMED="
++msgstr " NAMED="
++
++#: fortran/dump-parse-tree.c:1276
++#, c-format
++msgid " NAME="
++msgstr " NAME="
++
++#: fortran/dump-parse-tree.c:1286
++#, c-format
++msgid " SEQUENTIAL="
++msgstr " SEQUENTIAL="
++
++#: fortran/dump-parse-tree.c:1292
++#, c-format
++msgid " DIRECT="
++msgstr " DIRECT="
++
++#: fortran/dump-parse-tree.c:1302
++#, c-format
++msgid " FORMATTED"
++msgstr " FORMATTED"
++
++#: fortran/dump-parse-tree.c:1307
++#, c-format
++msgid " UNFORMATTED="
++msgstr " UNFORMATTED="
++
++#: fortran/dump-parse-tree.c:1317
++#, c-format
++msgid " NEXTREC="
++msgstr " NEXTREC="
++
++#: fortran/dump-parse-tree.c:1337
++#, c-format
++msgid " READ="
++msgstr " READ="
++
++#: fortran/dump-parse-tree.c:1342
++#, c-format
++msgid " WRITE="
++msgstr " WRITE="
++
++#: fortran/dump-parse-tree.c:1347
++#, c-format
++msgid " READWRITE="
++msgstr " READWRITE="
++
++#: fortran/dump-parse-tree.c:1371
++#, c-format
++msgid "IOLENGTH "
++msgstr "IOLENGTH "
++
++#: fortran/dump-parse-tree.c:1377
++#, c-format
++msgid "READ"
++msgstr "READ"
++
++#: fortran/dump-parse-tree.c:1381
++#, c-format
++msgid "WRITE"
++msgstr "WRITE"
++
++#: fortran/dump-parse-tree.c:1393
++#, c-format
++msgid " FMT="
++msgstr " FMT="
++
++#: fortran/dump-parse-tree.c:1398
++#, c-format
++msgid " FMT=%d"
++msgstr " FMT=%d"
++
++#: fortran/dump-parse-tree.c:1400
++#, c-format
++msgid " NML=%s"
++msgstr " NML=%s"
++
++#: fortran/dump-parse-tree.c:1414
++#, c-format
++msgid " SIZE="
++msgstr " SIZE="
++
++#: fortran/dump-parse-tree.c:1419
++#, c-format
++msgid " REC="
++msgstr " REC="
++
++#: fortran/dump-parse-tree.c:1424
++#, c-format
++msgid " ADVANCE="
++msgstr " ADVANCE="
++
++#: fortran/dump-parse-tree.c:1435
++#, c-format
++msgid "TRANSFER "
++msgstr "TRANSFER "
++
++#: fortran/dump-parse-tree.c:1440
++#, c-format
++msgid "DT_END"
++msgstr "DT_END"
++
++#: fortran/dump-parse-tree.c:1446
++#, c-format
++msgid " END=%d"
++msgstr " END=%d"
++
++#: fortran/dump-parse-tree.c:1448
++#, c-format
++msgid " EOR=%d"
++msgstr " EOR=%d"
++
++#: fortran/dump-parse-tree.c:1465
++#, c-format
++msgid "Equivalence: "
++msgstr "Еквиваленција: "
++
++#: fortran/dump-parse-tree.c:1491
++#, c-format
++msgid "Namespace:"
++msgstr "Именски простор:"
++
++#: fortran/dump-parse-tree.c:1505
++#, c-format
++msgid " %c-%c: "
++msgstr " %c-%c: "
++
++#: fortran/dump-parse-tree.c:1507
++#, c-format
++msgid " %c: "
++msgstr " %c: "
++
++#: fortran/dump-parse-tree.c:1516
++#, c-format
++msgid "procedure name = %s"
++msgstr "име процедуре = %s"
++
++#: fortran/dump-parse-tree.c:1532
++#, c-format
++msgid "Operator interfaces for %s:"
++msgstr "Операторска сучеља за %s:"
++
++#: fortran/dump-parse-tree.c:1541
++#, c-format
++msgid "User operators:\n"
++msgstr "Кориснички оператори:\n"
++
++#: fortran/dump-parse-tree.c:1557
++#, c-format
++msgid "CONTAINS\n"
++msgstr "CONTAINS\n"
++
++#: fortran/error.c:137
++#, no-c-format
++msgid "In file %s:%d\n"
++msgstr "У датотеци %s:%d\n"
++
++#: fortran/error.c:152
++#, no-c-format
++msgid "    Included at %s:%d\n"
++msgstr "    Укључено код %s:%d\n"
++
++#: fortran/error.c:204
++#, no-c-format
++msgid "<During initialization>\n"
++msgstr "<Током успостављања>\n"
++
++#: fortran/error.c:479 fortran/error.c:535 fortran/error.c:561
++msgid "Warning:"
++msgstr "Упозорење:"
++
++#: fortran/error.c:537 fortran/error.c:611 fortran/error.c:635
++msgid "Error:"
++msgstr "Грешка:"
++
++#: fortran/error.c:656
++msgid "Fatal Error:"
++msgstr "Кобна грешка:"
++
++#: fortran/error.c:675
++#, no-c-format
++msgid "Internal Error at (1):"
++msgstr "Унутрашња грешка код (1):"
++
++#: fortran/expr.c:258
++#, c-format
++msgid "Constant expression required at %C"
++msgstr "Неопходан константан израз код %C"
++
++#: fortran/expr.c:261
++#, c-format
++msgid "Integer expression required at %C"
++msgstr "Неопходан целобројни израз код %C"
++
++#: fortran/expr.c:266
++#, c-format
++msgid "Integer value too large in expression at %C"
++msgstr "Превелика целобројна вредност у изразу код %C"
++
++#: fortran/expr.c:1274
++#, no-c-format
++msgid "Numeric or CHARACTER operands are required in expression at %L"
++msgstr "Неопходни бројевни или знаковни операнди у изразу код %L"
++
++#: fortran/expr.c:1294
++#, no-c-format
++msgid "Exponent at %L must be INTEGER for an initialization expression"
++msgstr "Изложилац код %L мора бити целобројан за успостављачки израз"
++
++#: fortran/expr.c:1307
++#, no-c-format
++msgid "Concatenation operator in expression at %L must have two CHARACTER operands"
++msgstr "Оператор надовезивања у изразу код %L мора имати два знаковна операнда"
++
++#: fortran/expr.c:1314
++#, no-c-format
++msgid "Concat operator at %L must concatenate strings of the same kind"
++msgstr "Оператор надовезивања код %L мора надовезивати ниске исте врсте"
++
++#: fortran/expr.c:1324
++#, no-c-format
++msgid ".NOT. operator in expression at %L must have a LOGICAL operand"
++msgstr "Оператор .NOT. у изразу код %L мора имати логички операнд"
++
++#: fortran/expr.c:1340
++#, no-c-format
++msgid "LOGICAL operands are required in expression at %L"
++msgstr "Неопходни су логички операнди у изразу код %L"
++
++#: fortran/expr.c:1351
++#, no-c-format
++msgid "Only intrinsic operators can be used in expression at %L"
++msgstr "Могу се користити само сопствени оператори у изразу код %L"
++
++#: fortran/expr.c:1359
++#, no-c-format
++msgid "Numeric operands are required in expression at %L"
++msgstr "Неопходни су бројевни операнди у изразу код %L"
++
++#: fortran/expr.c:1423
++#, no-c-format
++msgid "The F95 does not permit the assumed character length variable '%s' in constant expression at %L."
++msgstr "Фортран 95 не допушта променљиву претпостављене знаковне дужине ‘%s’ у константном изразу код %L."
++
++#: fortran/expr.c:1476
++#, no-c-format
++msgid "Function '%s' in initialization expression at %L must be an intrinsic function"
++msgstr "Функција ‘%s’ у успостављачком изразу код %L мора бити сопствена"
++
++#: fortran/expr.c:1498
++#, no-c-format
++msgid "Parameter '%s' at %L has not been declared or is a variable, which does not reduce to a constant expression"
++msgstr "Параметар ‘%s’ код %L није декларисан или је променљива, што се не скраћује на константан израз"
++
++#: fortran/expr.c:1583
++#, no-c-format
++msgid "Initialization expression didn't reduce %C"
++msgstr "Иницијализујући израз не скраћује %C"
++
++#: fortran/expr.c:1627
++#, no-c-format
++msgid "Specification function '%s' at %L cannot be a statement function"
++msgstr "Одредничка функција ‘%s’ код %L не може бити наредбена функција"
++
++#: fortran/expr.c:1634
++#, no-c-format
++msgid "Specification function '%s' at %L cannot be an internal function"
++msgstr "Одредничка функција ‘%s’ код %L не може бити унутрашња функција"
++
++#: fortran/expr.c:1641
++#, no-c-format
++msgid "Specification function '%s' at %L must be PURE"
++msgstr "Одредничка функција ‘%s’ код %L мора бити чиста"
++
++#: fortran/expr.c:1648
++#, no-c-format
++msgid "Specification function '%s' at %L cannot be RECURSIVE"
++msgstr "Одредничка функција ‘%s’ код %L не може бити рекурзивна"
++
++#: fortran/expr.c:1705
++#, no-c-format
++msgid "Dummy argument '%s' at %L cannot be OPTIONAL"
++msgstr "Лажни аргумент ‘%s’ код %L не може бити опцион"
++
++#: fortran/expr.c:1712
++#, no-c-format
++msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)"
++msgstr "Лажни аргумент ‘%s’ код %L не може бити намере-из"
++
++#: fortran/expr.c:1732
++#, no-c-format
++msgid "Variable '%s' cannot appear in the expression at %L"
++msgstr "Променљива ‘%s’ се не може јавити у изразу код %L"
++
++#: fortran/expr.c:1780
++#, no-c-format
++msgid "Expression at %L must be of INTEGER type"
++msgstr "Израз код %L мора бити целобројног типа"
++
++#: fortran/expr.c:1786
++#, no-c-format
++msgid "Expression at %L must be scalar"
++msgstr "Израз код %L мора бити скалар"
++
++#: fortran/expr.c:1814
++#, no-c-format
++msgid "Incompatible ranks in %s at %L"
++msgstr "Несагласни рангови у %s код %L"
++
++#: fortran/expr.c:1828
++#, no-c-format
++msgid "different shape for %s at %L on dimension %d (%d/%d)"
++msgstr "%s код %L има различит облик за димензију %d (%d/%d)"
++
++#: fortran/expr.c:1861
++#, no-c-format
++msgid "Can't assign to INTENT(IN) variable '%s' at %L"
++msgstr "Не могу да доделим променљивој намере-у ‘%s’ код %L"
++
++#: fortran/expr.c:1905
++#, no-c-format
++msgid "'%s' at %L is not a VALUE"
++msgstr "‘%s’ код %L није вредност"
++
++#: fortran/expr.c:1912
++#, no-c-format
++msgid "Incompatible ranks %d and %d in assignment at %L"
++msgstr "Несагласни рангови %d и %d у додели код %L"
++
++#: fortran/expr.c:1919
++#, no-c-format
++msgid "Variable type is UNKNOWN in assignment at %L"
++msgstr "Тип променљиве је UNKNOWN у додели код %L"
++
++#: fortran/expr.c:1926
++#, no-c-format
++msgid "NULL appears on right-hand side in assignment at %L"
++msgstr "Појављује се NULL на десној страни у додели код %L"
++
++#: fortran/expr.c:1936
++#, no-c-format
++msgid "Vector assignment to assumed-size Cray Pointee at %L is illegal."
++msgstr "Векторска додела у Крејов показивани претпостављене величине код %L није дозвољена."
++
++#: fortran/expr.c:1945
++#, no-c-format
++msgid "POINTER valued function appears on right-hand side of assignment at %L"
++msgstr "Функција са показивачком вредношћу појављује се на десној страни доделе код %L"
++
++#: fortran/expr.c:1950
++msgid "Array assignment"
++msgstr "Низовна додела"
++
++#: fortran/expr.c:1967
++#, no-c-format
++msgid "Incompatible types in assignment at %L, %s to %s"
++msgstr "Несагласни типови у додели код %L, %s у %s"
++
++#: fortran/expr.c:1990
++#, no-c-format
++msgid "Pointer assignment target is not a POINTER at %L"
++msgstr "Циљ доделе показивача није показивач код %L"
++
++#: fortran/expr.c:1998
++#, no-c-format
++msgid "'%s' in the pointer assignment at %L cannot be an l-value since it is a procedure"
++msgstr "‘%s’ у додели показивача код %L не може бити л-вредност јер је процедура"
++
++#: fortran/expr.c:2007
++#, no-c-format
++msgid "Pointer assignment to non-POINTER at %L"
++msgstr "Додела показивача непоказивачу код %L"
++
++#: fortran/expr.c:2015
++#, no-c-format
++msgid "Bad pointer object in PURE procedure at %L"
++msgstr "Лош показивачки објекат у чистој процедури код %L"
++
++#: fortran/expr.c:2028
++#, no-c-format
++msgid "Different types in pointer assignment at %L"
++msgstr "Различити типови у додели показивача код %L"
++
++#: fortran/expr.c:2035
++#, no-c-format
++msgid "Different kind type parameters in pointer assignment at %L"
++msgstr "Различите врсте типова параметара у додели показивача код %L"
++
++#: fortran/expr.c:2042
++#, no-c-format
++msgid "Different ranks in pointer assignment at %L"
++msgstr "Различити рангови у додели показивача код %L"
++
++#: fortran/expr.c:2056
++#, no-c-format
++msgid "Different character lengths in pointer assignment at %L"
++msgstr "Различите знаковне дужине у додели показивача код %L"
++
++#: fortran/expr.c:2064
++#, no-c-format
++msgid "Pointer assignment target is neither TARGET nor POINTER at %L"
++msgstr "Циљ доделе показивача није ни циљ ни показивач код %L"
++
++#: fortran/expr.c:2071
++#, no-c-format
++msgid "Bad target in pointer assignment in PURE procedure at %L"
++msgstr "Лош циљ у додели показивача у чистој процедури код %L"
++
++#: fortran/expr.c:2077
++#, no-c-format
++msgid "Pointer assignment with vector subscript on rhs at %L"
++msgstr "Додела показивача са векторским индексом на десној страни код %L"
++
++#: fortran/expr.c:2095
++#, no-c-format
++msgid "The upper bound in the last dimension of the assumed_size array on the rhs of the pointer assignment at %L must be set"
++msgstr "Горња граница последње димензије низа претпостављене величине, на десној страни доделе показивача код %L, мора бити постављена"
++
++#: fortran/gfortranspec.c:232
++#, c-format
++msgid "overflowed output arg list for '%s'"
++msgstr "преливена листа излазних аргумената за ‘%s’"
++
++#: fortran/gfortranspec.c:352
++#, c-format
++msgid ""
++"GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n"
++"You may redistribute copies of GNU Fortran\n"
++"under the terms of the GNU General Public License.\n"
++"For more information about these matters, see the file named COPYING\n"
++"\n"
++msgstr ""
++"Гнуов фортран долази БЕЗ ГАРАНЦИЈА, колико је допуштено законом.\n"
++"Можете делити копије Гнуовог фортрана\n"
++"под условима Гнуове Опште јавне лиценце.\n"
++"За више информација о овоме, погледајте датотеку по имену COPYING\n"
++
++#: fortran/gfortranspec.c:374
++#, c-format
++msgid "argument to '%s' missing"
++msgstr "недостаје аргумент за ‘%s’"
++
++#: fortran/gfortranspec.c:378
++#, c-format
++msgid "no input files; unwilling to write output files"
++msgstr "нема улазних датотека; безвољан да запишем излазне"
++
++#: fortran/gfortranspec.c:530
++#, c-format
++msgid "Driving:"
++msgstr "Погон:"
++
++#: fortran/interface.c:175
++#, no-c-format
++msgid "Syntax error in generic specification at %C"
++msgstr "Синтаксна грешка у генеричкој одредници код %C"
++
++#: fortran/interface.c:204
++#, no-c-format
++msgid "Syntax error: Trailing garbage in INTERFACE statement at %C"
++msgstr "Синтаксна грешка: Пратеће смеће у наредби INTERFACE код %C"
++
++#: fortran/interface.c:262
++#, no-c-format
++msgid "Syntax error: Trailing garbage in END INTERFACE statement at %C"
++msgstr "Синтаксна грешка: Пратеће смеће у наредби END INTERFACE код %C"
++
++#: fortran/interface.c:273
++#, no-c-format
++msgid "Expected a nameless interface at %C"
++msgstr "Очекивано је безимено сучеље код %C"
++
++#: fortran/interface.c:284
++#, no-c-format
++msgid "Expected 'END INTERFACE ASSIGNMENT (=)' at %C"
++msgstr "Очекивано је ‘END INTERFACE ASSIGNMENT (=)’ код %C"
++
++#: fortran/interface.c:286
++#, no-c-format
++msgid "Expecting 'END INTERFACE OPERATOR (%s)' at %C"
++msgstr "Очекивано је ‘END INTERFACE OPERATOR (%s)’ код %C"
++
++#: fortran/interface.c:300
++#, no-c-format
++msgid "Expecting 'END INTERFACE OPERATOR (.%s.)' at %C"
++msgstr "Очекивано је ‘END INTERFACE OPERATOR (.%s.)’ код %C"
++
++#: fortran/interface.c:311
++#, no-c-format
++msgid "Expecting 'END INTERFACE %s' at %C"
++msgstr "Очекивано је ‘END INTERFACE %s’ код %C"
++
++#: fortran/interface.c:523
++#, no-c-format
++msgid "Assignment operator interface at %L must be a SUBROUTINE"
++msgstr "Сучеље оператора доделе код %L мора бити потпрограм"
++
++#: fortran/interface.c:532
++#, no-c-format
++msgid "Intrinsic operator interface at %L must be a FUNCTION"
++msgstr "Сучеље сопственог оператора код %L мора бити функција"
++
++#: fortran/interface.c:619
++#, no-c-format
++msgid "First argument of defined assignment at %L must be INTENT(IN) or INTENT(INOUT)"
++msgstr "Први аргумент дефинисане доделе код %L мора бити намере-у или -у/из"
++
++#: fortran/interface.c:623
++#, no-c-format
++msgid "Second argument of defined assignment at %L must be INTENT(IN)"
++msgstr "Други аргумент дефинисане доделе код %L мора бити намере-у"
++
++#: fortran/interface.c:629 fortran/resolve.c:6021
++#, no-c-format
++msgid "First argument of operator interface at %L must be INTENT(IN)"
++msgstr "Први аргумент сучеља оператора код %L мора бити намере-у"
++
++#: fortran/interface.c:633 fortran/resolve.c:6033
++#, no-c-format
++msgid "Second argument of operator interface at %L must be INTENT(IN)"
++msgstr "Други аргумент сучеља оператора код %L мора бити намере-у"
++
++#: fortran/interface.c:640
++#, no-c-format
++msgid "Operator interface at %L conflicts with intrinsic interface"
++msgstr "Сучеље оператора код %L коси се са сопственим сучељем"
++
++#: fortran/interface.c:645
++#, no-c-format
++msgid "Operator interface at %L has the wrong number of arguments"
++msgstr "Сучеље оператора код %L има погрешан број аргумената"
++
++#: fortran/interface.c:894
++#, no-c-format
++msgid "Procedure '%s' in %s at %L is neither function nor subroutine"
++msgstr "Процедура ‘%s’ у %s код %L није ни функција ни потпрограм"
++
++#: fortran/interface.c:948
++#, no-c-format
++msgid "Ambiguous interfaces '%s' and '%s' in %s at %L"
++msgstr "Двосмислена сучеља ‘%s’ и ‘%s’ у %s код %L"
++
++#: fortran/interface.c:1198
++#, no-c-format
++msgid "Keyword argument '%s' at %L is not in the procedure"
++msgstr "Кључна реч ‘%s’ код %L није у процедури"
++
++#: fortran/interface.c:1207
++#, no-c-format
++msgid "Keyword argument '%s' at %L is already associated with another actual argument"
++msgstr "Кључна реч ‘%s’ код %L је већ придружена другом стварном аргументу"
++
++#: fortran/interface.c:1217
++#, no-c-format
++msgid "More actual than formal arguments in procedure call at %L"
++msgstr "Више стварних него формалних аргумената у позиву процедуре код %L"
++
++#: fortran/interface.c:1230
++#, no-c-format
++msgid "Missing alternate return spec in subroutine call at %L"
++msgstr "Недостаје одредница алтернативног враћања у позиву потпрограма код %L"
++
++#: fortran/interface.c:1239
++#, no-c-format
++msgid "Unexpected alternate return spec in subroutine call at %L"
++msgstr "Неочекивана одредница алтернативног враћања у позиву потпрограма код %L"
++
++#: fortran/interface.c:1254
++#, no-c-format
++msgid "Type/rank mismatch in argument '%s' at %L"
++msgstr "Неслагање типа/ранга у аргументу ‘%s’ код %L"
++
++#: fortran/interface.c:1269
++#, no-c-format
++msgid "Actual argument for '%s' cannot be an assumed-size array at %L"
++msgstr "Стварни аргумент за ‘%s’ код %L не може бити низ претпостављене величине"
++
++#: fortran/interface.c:1278
++#, no-c-format
++msgid "Actual argument for '%s' must be a pointer at %L"
++msgstr "Стварни аргумент за ‘%s’ код %L мора бити показивач"
++
++#: fortran/interface.c:1288
++#, no-c-format
++msgid "Actual argument at %L must be definable to match dummy INTENT = OUT/INOUT"
++msgstr "Стварни аргумент код %L мора бити могуће дефинисати да одговара лажном INTENT = OUT/INOUT"
++
++#: fortran/interface.c:1309
++#, no-c-format
++msgid "Missing actual argument for argument '%s' at %L"
++msgstr "Недостаје стварни аргумент за аргумент ‘%s’ код %L"
++
++#: fortran/interface.c:1494
++#, no-c-format
++msgid "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) argument '%s' at %L"
++msgstr "Исти стварни аргумент придружен намере-%s аргументу ‘%s’ и намере-%s аргументу ‘%s’ код %L"
++
++#: fortran/interface.c:1535
++#, no-c-format
++msgid "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)"
++msgstr "Аргумент процедуре код %L је намере-у док сучеље задаје намеру-%s"
++
++#: fortran/interface.c:1546
++#, no-c-format
++msgid "Procedure argument at %L is local to a PURE procedure and is passed to an INTENT(%s) argument"
++msgstr "Аргумент процедуре код %L је локалан у чистој процедури и прослеђује се аргументу намере-%s"
++
++#: fortran/interface.c:1555
++#, no-c-format
++msgid "Procedure argument at %L is local to a PURE procedure and has the POINTER attribute"
++msgstr "Аргумент процедуре код %L је локалан у чистој процедури и има атрибут показивача"
++
++#: fortran/interface.c:1577
++#, no-c-format
++msgid "Procedure '%s' called with an implicit interface at %L"
++msgstr "Процедура ‘%s’ позвана са имплицитним сучељем код %L"
++
++#: fortran/interface.c:1744
++#, no-c-format
++msgid "Function '%s' called in lieu of an operator at %L must be PURE"
++msgstr "Функција ‘%s’ позвана уместо оператора код %L мора бити чиста"
++
++#: fortran/interface.c:1824
++#, no-c-format
++msgid "Entity '%s' at %C is already present in the interface"
++msgstr "Ентитет ‘%s’ код %C је већ присутан у сучељу"
++
++#: fortran/intrinsic.c:2720
++#, no-c-format
++msgid "Too many arguments in call to '%s' at %L"
++msgstr "Превише аргумената у позиву ‘%s’ код %L"
++
++#: fortran/intrinsic.c:2734
++#, no-c-format
++msgid "Can't find keyword named '%s' in call to '%s' at %L"
++msgstr "Не могу да нађем кључну реч по имену ‘%s’ у позиву ‘%s’ код %L"
++
++#: fortran/intrinsic.c:2741
++#, no-c-format
++msgid "Argument '%s' is appears twice in call to '%s' at %L"
++msgstr "Аргумент ‘%s’ се појављује двапут у позиву ‘%s’ код %L"
++
++#: fortran/intrinsic.c:2755
++#, no-c-format
++msgid "Missing actual argument '%s' in call to '%s' at %L"
++msgstr "Недостаје стварни аргумент ‘%s’ у позиву ‘%s’ код %L"
++
++#: fortran/intrinsic.c:2814
++#, no-c-format
++msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s"
++msgstr "Тип аргумента ‘%s’ у позиву ‘%s’ код %L треба да је %s, не %s"
++
++#: fortran/intrinsic.c:3118
++#, no-c-format
++msgid "Ranks of arguments to elemental intrinsic '%s' differ at %L"
++msgstr "Не слажу се рангови аргумената за елементално сопствено ‘%s’ код %L"
++
++#: fortran/intrinsic.c:3164
++#, no-c-format
++msgid "Intrinsic '%s' at %L is not included in the selected standard"
++msgstr "Сопствено ‘%s’ код %L није укључено у изабрани стандард"
++
++#: fortran/intrinsic.c:3267
++#, no-c-format
++msgid "Extension: Evaluation of nonstandard initialization expression at %L"
++msgstr "Проширење: Израчунавање нестандардног успостављачког израза код %L"
++
++#: fortran/intrinsic.c:3327
++#, no-c-format
++msgid "Subroutine call to intrinsic '%s' at %L is not PURE"
++msgstr "Позив потпрограма сопственог ‘%s’ код %L није чист"
++
++#: fortran/intrinsic.c:3402
++#, no-c-format
++msgid "Extension: Conversion from %s to %s at %L"
++msgstr "Проширење: Претварање из %s у %s код %L"
++
++#: fortran/intrinsic.c:3405
++#, no-c-format
++msgid "Conversion from %s to %s at %L"
++msgstr "Претварање из %s у %s код %L"
++
++#: fortran/intrinsic.c:3453
++#, no-c-format
++msgid "Can't convert %s to %s at %L"
++msgstr "Не могу да претворим %s у %s код %L"
++
++#: fortran/io.c:415
++msgid "Positive width required"
++msgstr "Потребна је позитивна ширина"
++
++#: fortran/io.c:416
++msgid "Period required"
++msgstr "Потребан је период"
++
++#: fortran/io.c:417
++msgid "Nonnegative width required"
++msgstr "Потребна је ненегативна ширина"
++
++#: fortran/io.c:418
++msgid "Unexpected element"
++msgstr "Неочекивани елемент"
++
++#: fortran/io.c:419
++msgid "Unexpected end of format string"
++msgstr "Неочекивани крај форматирајуће ниске"
++
++#: fortran/io.c:436
++msgid "Missing leading left parenthesis"
++msgstr "Недостаје водећа лева заграда"
++
++#: fortran/io.c:474
++msgid "Expected P edit descriptor"
++msgstr "Очекиван је описник уређивања P"
++
++#. P requires a prior number.
++#: fortran/io.c:482
++msgid "P descriptor requires leading scale factor"
++msgstr "Описник P захтева водећи фактор размере"
++
++#. X requires a prior number if we're being pedantic.
++#: fortran/io.c:487
++#, no-c-format
++msgid "Extension: X descriptor requires leading space count at %C"
++msgstr "Проширење: Описник X захтева водећи број размака код %C"
++
++#: fortran/io.c:507
++#, no-c-format
++msgid "Extension: $ descriptor at %C"
++msgstr "Проширење: описник $ код %C"
++
++#: fortran/io.c:512
++msgid "$ must be the last specifier"
++msgstr "$ мора бити задњи наводилац"
++
++#: fortran/io.c:557
++msgid "Repeat count cannot follow P descriptor"
++msgstr "Број понављања не може пратити описник P"
++
++#: fortran/io.c:576
++#, no-c-format
++msgid "Extension: Missing positive width after L descriptor at %C"
++msgstr "Проширење: Недостаје позитивна ширина после описника L код %C"
++
++#: fortran/io.c:638
++msgid "Positive exponent width required"
++msgstr "Потребна је позитивна ширина изложиоца"
++
++#: fortran/io.c:739 fortran/io.c:791
++#, no-c-format
++msgid "Extension: Missing comma at %C"
++msgstr "Проширење: Недостаје зарез код %C"
++
++#: fortran/io.c:806 fortran/io.c:809
++#, no-c-format
++msgid "%s in format string at %C"
++msgstr "%s у форматирајућој ниски код %C"
++
++#: fortran/io.c:850
++#, no-c-format
++msgid "Format statement in module main block at %C."
++msgstr "Наредба форматирања у главном блоку модула код %C."
++
++#: fortran/io.c:856
++#, no-c-format
++msgid "Missing format label at %C"
++msgstr "Недостаје етикета формата код %C"
++
++#: fortran/io.c:914 fortran/io.c:938
++#, no-c-format
++msgid "Duplicate %s specification at %C"
++msgstr "Двострука одредница %s код %C"
++
++#: fortran/io.c:945
++#, no-c-format
++msgid "Variable tag cannot be INTENT(IN) at %C"
++msgstr "Ознака променљиве не може бити намере-у код %C"
++
++#: fortran/io.c:952
++#, no-c-format
++msgid "Variable tag cannot be assigned in PURE procedure at %C"
++msgstr "Ознака променљиве не може бити додељена у чистој процедури код %C"
++
++#: fortran/io.c:989
++#, no-c-format
++msgid "Duplicate %s label specification at %C"
++msgstr "Двострука одредница етикете %s код %C"
++
++#: fortran/io.c:1015
++#, no-c-format
++msgid "%s tag at %L must be of type %s"
++msgstr "Ознака %s код %L мора бити типа %s"
++
++#: fortran/io.c:1026
++#, no-c-format
++msgid "Constant expression in FORMAT tag at %L must be of type default CHARACTER"
++msgstr "Константан израз у ознаци FORMAT код %L мора бити типа подразумеваног CHARACTER"
++
++#: fortran/io.c:1039
++#, no-c-format
++msgid "%s tag at %L must be of type %s or %s"
++msgstr "Ознака %s код %L мора бити типа %s или %s"
++
++#: fortran/io.c:1047
++#, no-c-format
++msgid "Obsolete: ASSIGNED variable in FORMAT tag at %L"
++msgstr "Застарело: Додељена променљива у ознаци FORMAT код %L"
++
++#: fortran/io.c:1052
++#, no-c-format
++msgid "Variable '%s' at %L has not been assigned a format label"
++msgstr "Променљивој ‘%s’ код %L није додељена етикета формата"
++
++#: fortran/io.c:1067
++#, no-c-format
++msgid "Extension: Character array in FORMAT tag at %L"
++msgstr "Проширење: Знаковни низ у ознаци FORMAT код %L"
++
++#: fortran/io.c:1074
++#, no-c-format
++msgid "Extension: Non-character in FORMAT tag at %L"
++msgstr "Проширење: Не-знак у ознаци FORMAT код %L"
++
++#: fortran/io.c:1085
++#, no-c-format
++msgid "%s tag at %L must be scalar"
++msgstr "Ознака %s код %L мора бити скалар"
++
++#: fortran/io.c:1091
++#, no-c-format
++msgid "Fortran 2003: IOMSG tag at %L"
++msgstr "Фортран 2003: Ознака IOMSG код %L"
++
++#: fortran/io.c:1098
++#, no-c-format
++msgid "Fortran 95 requires default INTEGER in IOSTAT tag at %L"
++msgstr "Фортран 95 захтева подразумевни цео број у ознаци IOSTAT код %L"
++
++#: fortran/io.c:1106
++#, no-c-format
++msgid "Fortran 95 requires default INTEGER in SIZE tag at %L"
++msgstr "Фортран 95 захтева подразумевни цео број у ознаци SIZE код %L"
++
++#: fortran/io.c:1114
++#, no-c-format
++msgid "Extension: CONVERT tag at %L"
++msgstr "Проширење: ознака CONVERT код %L"
++
++#: fortran/io.c:1283
++#, no-c-format
++msgid "OPEN statement not allowed in PURE procedure at %C"
++msgstr "Наредба OPEN није дозвољена у чистој процедури код %C"
++
++#: fortran/io.c:1391
++#, no-c-format
++msgid "CLOSE statement not allowed in PURE procedure at %C"
++msgstr "Наредба CLOSE није дозвољена у чистој процедури код %C"
++
++#: fortran/io.c:1517 fortran/match.c:1457
++#, no-c-format
++msgid "%s statement not allowed in PURE procedure at %C"
++msgstr "Наредба %s није дозвољена у чистој процедури код %C"
++
++#: fortran/io.c:1577
++#, no-c-format
++msgid "Fortran 2003: FLUSH statement at %C"
++msgstr "Фортран 2003: Наредба FLUSH код %C"
++
++#: fortran/io.c:1637
++#, no-c-format
++msgid "Duplicate UNIT specification at %C"
++msgstr "Двострука одредница UNIT код %C"
++
++#: fortran/io.c:1693
++#, no-c-format
++msgid "Duplicate format specification at %C"
++msgstr "Двострука одредница формата код %C"
++
++#: fortran/io.c:1710
++#, no-c-format
++msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C"
++msgstr "Симбол ‘%s’ у листи имена ‘%s’ је намере-у код %C"
++
++#: fortran/io.c:1746
++#, no-c-format
++msgid "Duplicate NML specification at %C"
++msgstr "Двострука одредница NML код %C"
++
++#: fortran/io.c:1755
++#, no-c-format
++msgid "Symbol '%s' at %C must be a NAMELIST group name"
++msgstr "Симбол ‘%s’ код %C мора бити име групе листе имена"
++
++#: fortran/io.c:1793
++#, no-c-format
++msgid "END tag at %C not allowed in output statement"
++msgstr "Ознака END код %C није дозвољена у излазној наредби"
++
++#: fortran/io.c:1853
++#, no-c-format
++msgid "UNIT specification at %L must be an INTEGER expression or a CHARACTER variable"
++msgstr "Одредница UNIT код %L мора бити целобројни израз или знаковна променљива"
++
++#: fortran/io.c:1862
++#, no-c-format
++msgid "Internal unit with vector subscript at %L"
++msgstr "Унутрашња јединица са векторским индексом код %L"
++
++#: fortran/io.c:1870
++#, no-c-format
++msgid "External IO UNIT cannot be an array at %L"
++msgstr "Спољашња У/И јединица не може бити низ код %L"
++
++#: fortran/io.c:1880
++#, no-c-format
++msgid "ERR tag label %d at %L not defined"
++msgstr "Етикета %d за ERR код %L није дефинисана"
++
++#: fortran/io.c:1892
++#, no-c-format
++msgid "END tag label %d at %L not defined"
++msgstr "Етикета %d за END код %L није дефинисана"
++
++#: fortran/io.c:1904
++#, no-c-format
++msgid "EOR tag label %d at %L not defined"
++msgstr "Етикета %d за EOR код %L није дефинисана"
++
++#: fortran/io.c:1914
++#, no-c-format
++msgid "FORMAT label %d at %L not defined"
++msgstr "Етикета %d за FORMAT код %L није дефинисана"
++
++#: fortran/io.c:2035
++#, no-c-format
++msgid "Syntax error in I/O iterator at %C"
++msgstr "Синтаксна грешка у У/И итератору код %C"
++
++#: fortran/io.c:2066
++#, no-c-format
++msgid "Expected variable in READ statement at %C"
++msgstr "Очекивана је променљива у наредби READ код %C"
++
++#: fortran/io.c:2072
++#, no-c-format
++msgid "Expected expression in %s statement at %C"
++msgstr "Очекиван је израз у наредби %s код %C"
++
++#: fortran/io.c:2083
++#, no-c-format
++msgid "Variable '%s' in input list at %C cannot be INTENT(IN)"
++msgstr "Променљива ‘%s’ у улазној листи код %C не може бити намере-у"
++
++#: fortran/io.c:2092
++#, no-c-format
++msgid "Cannot read to variable '%s' in PURE procedure at %C"
++msgstr "Не могу да читам у променљиву ‘%s’ у чистој процедури код %C"
++
++#: fortran/io.c:2109
++#, no-c-format
++msgid "Cannot write to internal file unit '%s' at %C inside a PURE procedure"
++msgstr "Не могу да пишем у унутрашњу датотеку ‘%s’ код %C унутар чисте процедуре"
++
++#. A general purpose syntax error.
++#: fortran/io.c:2169 fortran/io.c:2541 fortran/gfortran.h:1695
++#, no-c-format
++msgid "Syntax error in %s statement at %C"
++msgstr "Синтаксна грешка у наредби %s код %C"
++
++#: fortran/io.c:2390
++#, no-c-format
++msgid "PRINT namelist at %C is an extension"
++msgstr "Листа имена PRINT код %C је проширење"
++
++#: fortran/io.c:2502
++#, no-c-format
++msgid "Extension: Comma before output item list at %C is an extension"
++msgstr "Проширење: Зарез пре ставке излазне листе код %C је проширење"
++
++#: fortran/io.c:2511
++#, no-c-format
++msgid "Expected comma in I/O list at %C"
++msgstr "Очекиван је зарез у У/И листи код %C"
++
++#: fortran/io.c:2573
++#, no-c-format
++msgid "PRINT statement at %C not allowed within PURE procedure"
++msgstr "Наредба PRINT код %C није дозвољена у чистој процедури"
++
++#: fortran/io.c:2712 fortran/io.c:2763
++#, no-c-format
++msgid "INQUIRE statement not allowed in PURE procedure at %C"
++msgstr "Наредба INQUIRE код %C није дозвољена у чистој процедури"
++
++#: fortran/io.c:2739
++#, no-c-format
++msgid "IOLENGTH tag invalid in INQUIRE statement at %C"
++msgstr "Неисправна ознака IOLENGTH у наредби INQUIRE код %C"
++
++#: fortran/io.c:2749
++#, no-c-format
++msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers"
++msgstr "Наредба INQUIRE код %L не може садржати и наводилац FILE и UNIT"
++
++#: fortran/io.c:2756
++#, no-c-format
++msgid "INQUIRE statement at %L requires either FILE or UNIT specifier"
++msgstr "Наредба INQUIRE код %L захтева или наводилац FILE или UNIT"
++
++#: fortran/match.c:179
++#, no-c-format
++msgid "Integer too large at %C"
++msgstr "Цео број превелик код %C"
++
++#: fortran/match.c:239 fortran/parse.c:329
++#, no-c-format
++msgid "Too many digits in statement label at %C"
++msgstr "Превише цифара у етикети наредбе код %C"
++
++#: fortran/match.c:245 fortran/parse.c:332
++#, no-c-format
++msgid "Statement label at %C is zero"
++msgstr "Етикета наредбе код %C је нула"
++
++#: fortran/match.c:278
++#, no-c-format
++msgid "Label name '%s' at %C is ambiguous"
++msgstr "Двосмислено име етикете ‘%s’ код %C"
++
++#: fortran/match.c:284
++#, no-c-format
++msgid "Duplicate construct label '%s' at %C"
++msgstr "Двострука етикета конструкције ‘%s’ код %C"
++
++#: fortran/match.c:408
++#, no-c-format
++msgid "Name at %C is too long"
++msgstr "Предугачко име код %C"
++
++#: fortran/match.c:525
++#, no-c-format
++msgid "Loop variable at %C cannot be a sub-component"
++msgstr "Променљива петље код %C не може бити подкомпонента"
++
++#: fortran/match.c:531
++#, no-c-format
++msgid "Loop variable '%s' at %C cannot be INTENT(IN)"
++msgstr "Променљива петље ‘%s’ код %C не може бити намере-у"
++
++#: fortran/match.c:538
++#, no-c-format
++msgid "Loop variable at %C cannot have the POINTER attribute"
++msgstr "Променљива петље код %C не може имати атрибут показивача"
++
++#: fortran/match.c:568
++#, no-c-format
++msgid "Expected a step value in iterator at %C"
++msgstr "Очекивана је вредност корака у итератору код %C"
++
++#: fortran/match.c:580
++#, no-c-format
++msgid "Syntax error in iterator at %C"
++msgstr "Синтаксна грешка у итератору код %C"
++
++#: fortran/match.c:816
++#, no-c-format
++msgid "Invalid form of PROGRAM statement at %C"
++msgstr "Неисправан облик наредбе PROGRAM код %C"
++
++#: fortran/match.c:850
++#, no-c-format
++msgid "Cannot assign to a PARAMETER variable at %C"
++msgstr "Не могу да доделим у параметарску променљиву код %C"
++
++#: fortran/match.c:939 fortran/match.c:1015
++#, no-c-format
++msgid "Obsolete: arithmetic IF statement at %C"
++msgstr "Застарело: аритметичка наредба IF код %C"
++
++#: fortran/match.c:986
++#, no-c-format
++msgid "Syntax error in IF-expression at %C"
++msgstr "Синтаксна грешка у IF-изразу код %C"
++
++#: fortran/match.c:998
++#, no-c-format
++msgid "Block label not appropriate for arithmetic IF statement at %C"
++msgstr "Етикета блока није подесна за аритметичку наредбу IF код %C"
++
++#: fortran/match.c:1040
++#, no-c-format
++msgid "Block label is not appropriate IF statement at %C"
++msgstr "Етикета блока није подесна за наредбу IF код %C"
++
++#: fortran/match.c:1111
++#, no-c-format
++msgid "Unclassifiable statement in IF-clause at %C"
++msgstr "Неразврстљива наредба у одредби IF код %C"
++
++#: fortran/match.c:1118
++#, no-c-format
++msgid "Syntax error in IF-clause at %C"
++msgstr "Синтаксна грешка у одредби IF код %C"
++
++#: fortran/match.c:1162
++#, no-c-format
++msgid "Unexpected junk after ELSE statement at %C"
++msgstr "Неочекивано смеће после наредбе ELSE код %C"
++
++#: fortran/match.c:1168 fortran/match.c:1203
++#, no-c-format
++msgid "Label '%s' at %C doesn't match IF label '%s'"
++msgstr "Етикета ‘%s’ код %C не одговара етикети IF ‘%s’"
++
++#: fortran/match.c:1197
++#, no-c-format
++msgid "Unexpected junk after ELSE IF statement at %C"
++msgstr "Неочекивано смеће после наредбе ELSE IF код %C"
++
++#: fortran/match.c:1360
++#, no-c-format
++msgid "Name '%s' in %s statement at %C is not a loop name"
++msgstr "Име ‘%s’ у наредби %s код %C није име петље"
++
++#: fortran/match.c:1375
++#, no-c-format
++msgid "%s statement at %C is not within a loop"
++msgstr "Наредба %s код %C није унутар петље"
++
++#: fortran/match.c:1378
++#, no-c-format
++msgid "%s statement at %C is not within loop '%s'"
++msgstr "Наредба %s код %C није унутар петље ‘%s’"
++
++#: fortran/match.c:1435
++#, no-c-format
++msgid "Too many digits in STOP code at %C"
++msgstr "Превише цифара у коду за STOP код %L"
++
++#: fortran/match.c:1488
++#, no-c-format
++msgid "Obsolete: PAUSE statement at %C"
++msgstr "Застарело: наредба PAUSE код %C"
++
++#: fortran/match.c:1537
++#, no-c-format
++msgid "Obsolete: ASSIGN statement at %C"
++msgstr "Застарело: наредба ASSIGN код %C"
++
++#: fortran/match.c:1583
++#, no-c-format
++msgid "Obsolete: Assigned GOTO statement at %C"
++msgstr "Застарело: Додељена наредба GOTO код %C"
++
++#: fortran/match.c:1630 fortran/match.c:1682
++#, no-c-format
++msgid "Statement label list in GOTO at %C cannot be empty"
++msgstr "Листа етикета наредби у GOTO код %C не може бити празна"
++
++#: fortran/match.c:1766
++#, no-c-format
++msgid "Bad allocate-object in ALLOCATE statement at %C for a PURE procedure"
++msgstr "Лоша објекат у наредби ALLOCATE код %C у чистој процедури"
++
++#: fortran/match.c:1786
++#, no-c-format
++msgid "STAT variable '%s' of ALLOCATE statement at %C cannot be INTENT(IN)"
++msgstr "Статусна променљива ‘%s’ у наредби ALLOCATE код %C не може бити намере-у"
++
++#: fortran/match.c:1794
++#, no-c-format
++msgid "Illegal STAT variable in ALLOCATE statement at %C for a PURE procedure"
++msgstr "Недозвољена статусна променљива у наредби ALLOCATE код %C за чисту процедуру"
++
++#: fortran/match.c:1801 fortran/match.c:1967
++#, no-c-format
++msgid "STAT expression at %C must be a variable"
++msgstr "Статусни израз код %C мора бити променљива"
++
++#: fortran/match.c:1856
++#, no-c-format
++msgid "Illegal variable in NULLIFY at %C for a PURE procedure"
++msgstr "Недозвољена променљива у NULLIFY код %C за чисту процедуру"
++
++#: fortran/match.c:1934
++#, no-c-format
++msgid "Illegal deallocate-expression in DEALLOCATE at %C for a PURE procedure"
++msgstr "Недозвољени израз у DEALLOCATE код %C за чисту процедуру"
++
++#: fortran/match.c:1953
++#, no-c-format
++msgid "STAT variable '%s' of DEALLOCATE statement at %C cannot be INTENT(IN)"
++msgstr "Статусна променљива ‘%s’ у наредби DEALLOCATE код %C не може бити намере-у"
++
++#: fortran/match.c:1960
++#, no-c-format
++msgid "Illegal STAT variable in DEALLOCATE statement at %C for a PURE procedure"
++msgstr "Статусна променљива ‘%s’ у наредби DEALLOCATE код %C за чисту процедуру"
++
++#: fortran/match.c:2009
++#, no-c-format
++msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE"
++msgstr "Алтернативна наредба RETURN код %C дозвољена је само унутар потпрограма"
++
++#: fortran/match.c:2040
++#, no-c-format
++msgid "Extension: RETURN statement in main program at %C"
++msgstr "Проширење: Наредба RETURN у главном програму код %C"
++
++#: fortran/match.c:2235
++#, no-c-format
++msgid "Syntax error in common block name at %C"
++msgstr "Синтаксна грешка у имену заједничког блока код %C"
++
++#: fortran/match.c:2271
++#, no-c-format
++msgid "Symbol '%s' at %C is already an external symbol that is not COMMON"
++msgstr "Симбол ‘%s’ код %C је већ спољашњи симбол који није заједнички"
++
++#: fortran/match.c:2318
++#, no-c-format
++msgid "Symbol '%s' at %C is already in a COMMON block"
++msgstr "Симбол ‘%s’ код %C је већ у заједничком блоку"
++
++#: fortran/match.c:2330
++#, no-c-format
++msgid "Previously initialized symbol '%s' in blank COMMON block at %C"
++msgstr "Претходно успостављен симбол ‘%s’ у празном заједничком блоку код %C"
++
++#: fortran/match.c:2333
++#, no-c-format
++msgid "Previously initialized symbol '%s' in COMMON block '%s' at %C"
++msgstr "Претходно успостављен симбол ‘%s’ у заједничком блоку ‘%s’ код %C"
++
++#: fortran/match.c:2345
++#, no-c-format
++msgid "Derived type variable in COMMON at %C does not have the SEQUENCE attribute"
++msgstr "Променљива изведеног типа у заједничком код %C нема атрибут SEQUENCE"
++
++#: fortran/match.c:2368
++#, no-c-format
++msgid "Array specification for symbol '%s' in COMMON at %C must be explicit"
++msgstr "Одредница низа за симбол ‘%s’ у заједничком код %C мора бити експлицитна"
++
++#: fortran/match.c:2379
++#, no-c-format
++msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array"
++msgstr "Симбол ‘%s’ у заједничком код %C не може бити низ показивача"
++
++#: fortran/match.c:2411
++#, no-c-format
++msgid "Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to another COMMON block '%s'"
++msgstr "Симбол ‘%s’ у заједничком блоку ‘%s’ код %C посредно се еквивалентира са другим заједничким блоком, ‘%s’"
++
++#: fortran/match.c:2521
++#, no-c-format
++msgid "Namelist group name '%s' at %C already has a basic type of %s"
++msgstr "Име групе листе имена ‘%s’ код %C већ има основни тип %s"
++
++#: fortran/match.c:2528
++#, no-c-format
++msgid "Namelist group name '%s' at %C already is USE associated and cannot be respecified."
++msgstr "Име групе листе имена ‘%s’ код %C је већ употребно придружено и не може се поново одредити."
++
++#: fortran/match.c:2555
++#, no-c-format
++msgid "Assumed size array '%s' in namelist '%s'at %C is not allowed."
++msgstr "Низ претпостављене величине ‘%s’ у листи имена ‘%s’ код %C није дозвољен."
++
++#: fortran/match.c:2561
++#, no-c-format
++msgid "Assumed shape array '%s' in namelist '%s' at %C is an extension."
++msgstr "Низ претпостављене величине ‘%s’ у листи имена ‘%s’ код %C јесте проширење."
++
++#: fortran/match.c:2690
++#, no-c-format
++msgid "Derived type component %C is not a permitted EQUIVALENCE member"
++msgstr "Компонента изведеног типа %C није дозвољен члан у еквиваленцији"
++
++#: fortran/match.c:2699
++#, no-c-format
++msgid "Array reference in EQUIVALENCE at %C cannot be an array section"
++msgstr "Упућивач низа у еквивалецији код %C не може бити одељак низа"
++
++#: fortran/match.c:2728
++#, no-c-format
++msgid "EQUIVALENCE at %C requires two or more objects"
++msgstr "Еквиваленција код %C захтева два или више објеката"
++
++#: fortran/match.c:2742
++#, no-c-format
++msgid "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C"
++msgstr "Покушај посредног преклапања заједничких блокова %s и %s помоћу еквиваленције код %C"
++
++#: fortran/match.c:2894
++#, no-c-format
++msgid "Statement function at %L is recursive"
++msgstr "Наредбена функција код %L је рекурзивна"
++
++#: fortran/match.c:2984
++#, no-c-format
++msgid "Expected initialization expression in CASE at %C"
++msgstr "Очекиван је успостављачки израз у CASE код %C"
++
++#: fortran/match.c:3011
++#, no-c-format
++msgid "Expected case name of '%s' at %C"
++msgstr "Очекивано је име случаја за ‘%s’ код %C"
++
++#: fortran/match.c:3055
++#, no-c-format
++msgid "Unexpected CASE statement at %C"
++msgstr "Неочекивана наредба CASE код %C"
++
++#: fortran/match.c:3107
++#, no-c-format
++msgid "Syntax error in CASE-specification at %C"
++msgstr "Синтаксна грешка у одредници CASE код %C"
++
++#: fortran/match.c:3227
++#, no-c-format
++msgid "ELSEWHERE statement at %C not enclosed in WHERE block"
++msgstr "Наредба ELSEWHERE код %C није обухваћена блоком WHERE"
++
++#: fortran/match.c:3258
++#, no-c-format
++msgid "Label '%s' at %C doesn't match WHERE label '%s'"
++msgstr "Етикета ‘%s’ код %C не одговара етикети WHERE ‘%s’"
++
++#: fortran/match.c:3353
++#, no-c-format
++msgid "Syntax error in FORALL iterator at %C"
++msgstr "Синтаксна грешка у итератору FORALL код %C"
++
++#: fortran/matchexp.c:29
++#, c-format
++msgid "Syntax error in expression at %C"
++msgstr "Синтаксна грешка у изразу код %C"
++
++#: fortran/matchexp.c:73
++#, no-c-format
++msgid "Bad character '%c' in OPERATOR name at %C"
++msgstr "Лош знак ‘%c’ у имену оператора код %C"
++
++#: fortran/matchexp.c:81
++#, no-c-format
++msgid "The name '%s' cannot be used as a defined operator at %C"
++msgstr "Име ‘%s’ се не може употребити као дефинисани оператор код %C"
++
++#: fortran/matchexp.c:160
++#, no-c-format
++msgid "Expected a right parenthesis in expression at %C"
++msgstr "Очекивана је десна заграда у изразу код %C"
++
++#: fortran/matchexp.c:302
++#, no-c-format
++msgid "Expected exponent in expression at %C"
++msgstr "Очекиван је изложилац у изразу код %C"
++
++#: fortran/matchexp.c:338 fortran/matchexp.c:442
++#, no-c-format
++msgid "Extension: Unary operator following arithmetic operator (use parentheses) at %C"
++msgstr "Проширење: Унарни оператор прати аритметички (користите заграде) код %C"
++
++#: fortran/misc.c:42
++#, no-c-format
++msgid "Out of memory-- malloc() failed"
++msgstr "Недовољно меморије — malloc() крахирао"
++
++#: fortran/module.c:532
++#, no-c-format
++msgid "Missing generic specification in USE statement at %C"
++msgstr "Недостаје генеричка одредница у наредби USE код %C"
++
++#: fortran/module.c:840
++#, no-c-format
++msgid "Reading module %s at line %d column %d: %s"
++msgstr "Читање модула %s, линија %d колона %d: %s"
++
++#: fortran/module.c:844
++#, no-c-format
++msgid "Writing module %s at line %d column %d: %s"
++msgstr "Писање модула %s, линија %d колона %d: %s"
++
++#: fortran/module.c:848
++#, no-c-format
++msgid "Module %s at line %d column %d: %s"
++msgstr "Модул %s, линија %d колона %d: %s"
++
++#: fortran/module.c:890
++msgid "Unexpected EOF"
++msgstr "Неочекивано EOF"
++
++#: fortran/module.c:922
++msgid "Unexpected end of module in string constant"
++msgstr "Неочекиван крај модула у константној ниски"
++
++#: fortran/module.c:976
++msgid "Integer overflow"
++msgstr "Целобројно преливање"
++
++#: fortran/module.c:1007
++msgid "Name too long"
++msgstr "Предугачко име"
++
++#: fortran/module.c:1114
++msgid "Bad name"
++msgstr "Лоше име"
++
++#: fortran/module.c:1158
++msgid "Expected name"
++msgstr "Очекивано је име"
++
++#: fortran/module.c:1161
++msgid "Expected left parenthesis"
++msgstr "Очекивана је лева заграда"
++
++#: fortran/module.c:1164
++msgid "Expected right parenthesis"
++msgstr "Очекивана је десна заграда"
++
++#: fortran/module.c:1167
++msgid "Expected integer"
++msgstr "Очекиван је цео број"
++
++#: fortran/module.c:1170
++msgid "Expected string"
++msgstr "Очекивана је ниска"
++
++#: fortran/module.c:1194
++msgid "find_enum(): Enum not found"
++msgstr "find_enum(): Енумерација није нађена"
++
++#: fortran/module.c:1209
++#, no-c-format
++msgid "Error writing modules file: %s"
++msgstr "Грешка при писању датотеке модула: %s"
++
++#: fortran/module.c:1568
++msgid "Expected attribute bit name"
++msgstr "Очекивано је име атрибутског бита"
++
++#: fortran/module.c:2330
++msgid "Expected integer string"
++msgstr "Очекивана је целобројна ниска"
++
++#: fortran/module.c:2334
++msgid "Error converting integer"
++msgstr "Грешка при претварању целог броја"
++
++#: fortran/module.c:2357
++msgid "Expected real string"
++msgstr "Очекивана је реална ниска"
++
++#: fortran/module.c:2504
++msgid "Expected expression type"
++msgstr "Очекиван је тип израза"
++
++#: fortran/module.c:2550
++msgid "Bad operator"
++msgstr "Лош оператор"
++
++#: fortran/module.c:2636
++msgid "Bad type in constant expression"
++msgstr "Лош тип у константном изразу"
++
++#: fortran/module.c:2673
++#, no-c-format
++msgid "Namelist %s cannot be renamed by USE association to %s."
++msgstr "Листа имена %s не може се преименовати у %s придружењем USE."
++
++#: fortran/module.c:3369
++#, no-c-format
++msgid "Symbol '%s' referenced at %L not found in module '%s'"
++msgstr "Симбол ‘%s’ поменут код %L није нађен у модулу ‘%s’"
++
++#: fortran/module.c:3377
++#, no-c-format
++msgid "User operator '%s' referenced at %L not found in module '%s'"
++msgstr "Кориснички оператор ‘%s’ поменут код %L није нађен у модулу ‘%s’"
++
++#: fortran/module.c:3383
++#, no-c-format
++msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'"
++msgstr "Сопствени оператор ‘%s’ поменут код %L није нађен у модулу ‘%s’"
++
++#: fortran/module.c:3738
++#, no-c-format
++msgid "Can't open module file '%s' for writing at %C: %s"
++msgstr "Не могу да отворим датотеку модула ‘%s’ за писање код %C: %s"
++
++#: fortran/module.c:3763
++#, no-c-format
++msgid "Error writing module file '%s' for writing: %s"
++msgstr "Грешка при отварању датотеке модула ‘%s’ за писање: %s"
++
++#: fortran/module.c:3784
++#, no-c-format
++msgid "Can't open module file '%s' for reading at %C: %s"
++msgstr "Не могу да отворим датотеку модула ‘%s’ за читање код %C: %s"
++
++#: fortran/module.c:3798
++msgid "Unexpected end of module"
++msgstr "Неочекиван крај модула"
++
++#: fortran/module.c:3806
++#, no-c-format
++msgid "Can't USE the same module we're building!"
++msgstr "Не може USE за исти модул који градимо!"
++
++#: fortran/options.c:232
++#, no-c-format
++msgid "Reading file '%s' as free form."
++msgstr "Читам датотеку ‘%s’ као слободан облик."
++
++#: fortran/options.c:242
++#, no-c-format
++msgid "'-fd-lines-as-comments' has no effect in free form."
++msgstr "‘-fd-lines-as-comments’ нема ефекта у слободном облику."
++
++#: fortran/options.c:245
++#, no-c-format
++msgid "'-fd-lines-as-code' has no effect in free form."
++msgstr "‘-fd-lines-as-code’ нема ефекта у слободном облику."
++
++#: fortran/options.c:314
++#, c-format
++msgid "gfortran: Only one -M option allowed\n"
++msgstr "gfortran: Дозвољена је само једна опција -M\n"
++
++#: fortran/options.c:320
++#, c-format
++msgid "gfortran: Directory required after -M\n"
++msgstr "gfortran: Потребан је директоријум после -M\n"
++
++#: fortran/options.c:360
++#, no-c-format
++msgid "Argument to -ffpe-trap is not valid: %s"
++msgstr "Аргумент за -ffpe-trap није исправан: %s"
++
++#: fortran/options.c:460
++#, no-c-format
++msgid "Fixed line length must be at least seven."
++msgstr "Фиксна дужина линије мора бити барем седам."
++
++#: fortran/options.c:514
++#, no-c-format
++msgid "Maximum supported idenitifier length is %d"
++msgstr "Највећа подржана дужина идентификатора је %d"
++
++#: fortran/options.c:521
++#, no-c-format
++msgid "Argument to -fqkind isn't a valid real kind"
++msgstr "Аргумент за -fqkind није исправна реална врста"
++
++#: fortran/parse.c:294
++#, no-c-format
++msgid "Unclassifiable statement at %C"
++msgstr "Неразврстљива наредба код %C"
++
++#: fortran/parse.c:339 fortran/parse.c:414
++#, no-c-format
++msgid "Non-numeric character in statement label at %C"
++msgstr "Небројевни знак у етикети наредбе код %C"
++
++#: fortran/parse.c:352
++#, no-c-format
++msgid "Ignoring statement label in empty statement at %C"
++msgstr "Игноришем етикету наредбе у празној наредби код %C"
++
++#: fortran/parse.c:422
++#, no-c-format
++msgid "Zero is not a valid statement label at %C"
++msgstr "Нула није исправна етикета наредбе код %C"
++
++#: fortran/parse.c:441
++#, no-c-format
++msgid "Bad continuation line at %C"
++msgstr "Лоше настављање линије код %C"
++
++#: fortran/parse.c:468
++#, no-c-format
++msgid "Statement label in blank line will be ignored at %C"
++msgstr "Етикета наредбе у празној линији код %C ће бити игнорисана"
++
++#: fortran/parse.c:494
++#, no-c-format
++msgid "Line truncated at %C"
++msgstr "Линија одсечена код %C"
++
++#: fortran/parse.c:667
++#, no-c-format
++msgid "FORMAT statement at %L does not have a statement label"
++msgstr "Наредба FORMAT код %L нема етикету наредбе"
++
++#: fortran/parse.c:739
++msgid "arithmetic IF"
++msgstr "аритметичко IF"
++
++#: fortran/parse.c:745
++msgid "attribute declaration"
++msgstr "декларација атрибута"
++
++#: fortran/parse.c:775
++msgid "data declaration"
++msgstr "декларација података"
++
++#: fortran/parse.c:784
++msgid "derived type declaration"
++msgstr "декларација изведеног типа"
++
++#: fortran/parse.c:863
++msgid "block IF"
++msgstr "блоковско IF"
++
++#: fortran/parse.c:872
++msgid "implied END DO"
++msgstr "имплицитно END DO"
++
++#: fortran/parse.c:939
++msgid "assignment"
++msgstr "додела"
++
++#: fortran/parse.c:942
++msgid "pointer assignment"
++msgstr "додела показивача"
++
++#: fortran/parse.c:951
++msgid "simple IF"
++msgstr "једноставно IF"
++
++#: fortran/parse.c:1088
++#, no-c-format
++msgid "Unexpected %s statement at %C"
++msgstr "Неочекивана наредба %s код %C"
++
++#: fortran/parse.c:1220
++#, no-c-format
++msgid "%s statement at %C cannot follow %s statement at %L"
++msgstr "Наредба %s код %C не може пратити наредбу %s код %L"
++
++#: fortran/parse.c:1237
++#, no-c-format
++msgid "Unexpected end of file in '%s'"
++msgstr "Неочекиван крај датотеке у ‘%s’"
++
++#: fortran/parse.c:1290
++#, no-c-format
++msgid "Derived type definition at %C has no components"
++msgstr "Дефиниција изведеног типа код %C нема компонената"
++
++#: fortran/parse.c:1301
++#, no-c-format
++msgid "PRIVATE statement in TYPE at %C must be inside a MODULE"
++msgstr "Наредба PRIVATE у TYPE код %C мора бити унутар модула"
++
++#: fortran/parse.c:1308
++#, no-c-format
++msgid "PRIVATE statement at %C must precede structure components"
++msgstr "Наредба PRIVATE код %C мора претходити компонентама структуре"
++
++#: fortran/parse.c:1316
++#, no-c-format
++msgid "Duplicate PRIVATE statement at %C"
++msgstr "Двострука наредба PRIVATE код %C"
++
++#: fortran/parse.c:1328
++#, no-c-format
++msgid "SEQUENCE statement at %C must precede structure components"
++msgstr "Наредба SEQUENCE код %C мора претходити компонентама структуре"
++
++#: fortran/parse.c:1335
++#, no-c-format
++msgid "SEQUENCE attribute at %C already specified in TYPE statement"
++msgstr "Атрибут SEQUENCE код %C је већ наведен у наредби TYPE"
++
++#: fortran/parse.c:1340
++#, no-c-format
++msgid "Duplicate SEQUENCE statement at %C"
++msgstr "Двострука наредба SEQUENCE код %C"
++
++#: fortran/parse.c:1364
++#, no-c-format
++msgid "Component %s of SEQUENCE type declared at %C does not have the SEQUENCE attribute"
++msgstr "Компонента %s у типу SEQUENCE декларисаном код %C не садржи атрибут SEQUENCE"
++
++#: fortran/parse.c:1409
++#, no-c-format
++msgid "ENUM declaration at %C has no ENUMERATORS"
++msgstr "Декларација ENUM код %C не садржи набрајаче"
++
++#: fortran/parse.c:1483
++#, no-c-format
++msgid "Unexpected %s statement in INTERFACE block at %C"
++msgstr "Неочекивана наредба %s у блоку INTERFACE код %C"
++
++#: fortran/parse.c:1510
++#, no-c-format
++msgid "SUBROUTINE at %C does not belong in a generic function interface"
++msgstr "Потпрограм код %C не спада у генеричко сучеље функције"
++
++#: fortran/parse.c:1515
++#, no-c-format
++msgid "FUNCTION at %C does not belong in a generic subroutine interface"
++msgstr "Функција код %C не спада у генеричко сучеље функције"
++
++#: fortran/parse.c:1532
++#, no-c-format
++msgid "Unexpected %s statement at %C in INTERFACE body"
++msgstr "Неочекивана наредба %s код %C у телу сучеља"
++
++#: fortran/parse.c:1604
++#, no-c-format
++msgid "%s statement must appear in a MODULE"
++msgstr "Наредба %s се мора појавити у модулу"
++
++#: fortran/parse.c:1611
++#, no-c-format
++msgid "%s statement at %C follows another accessibility specification"
++msgstr "Наредба %s код %C прати другачију одредницу приступа"
++
++#: fortran/parse.c:1688
++#, no-c-format
++msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE"
++msgstr "Наредба ELSEWHERE код %C прати претходно демаскирано ELSEWHERE"
++
++#: fortran/parse.c:1709
++#, no-c-format
++msgid "Unexpected %s statement in WHERE block at %C"
++msgstr "Неочекивана наредба %s у блоку WHERE код %C"
++
++#: fortran/parse.c:1769
++#, no-c-format
++msgid "Unexpected %s statement in FORALL block at %C"
++msgstr "Неочекивана наредба %s у блоку FORALL код %C"
++
++#: fortran/parse.c:1821
++#, no-c-format
++msgid "ELSE IF statement at %C cannot follow ELSE statement at %L"
++msgstr "Наредба ELSE IF код %C не може пратити наредбу ELSE код %L"
++
++#: fortran/parse.c:1839
++#, no-c-format
++msgid "Duplicate ELSE statements at %L and %C"
++msgstr "Двоструке наредбе ELSE код %L и %C"
++
++#: fortran/parse.c:1901
++#, no-c-format
++msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C"
++msgstr "Очекивана је наредба CASE или END SELECT после SELECT CASE код %C"
++
++#: fortran/parse.c:1959
++#, no-c-format
++msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
++msgstr "Променљива ‘%s’ код %C не може се редефинисати унутар петље која почиње код %L"
++
++#: fortran/parse.c:1994
++#, no-c-format
++msgid "End of nonblock DO statement at %C is within another block"
++msgstr "Крај неблоковске наредбе DO код %C је унутар другог блока"
++
++#: fortran/parse.c:2003
++#, no-c-format
++msgid "End of nonblock DO statement at %C is interwoven with another DO loop"
++msgstr "Крај неблоковске наредбе DO код %C је уплетена са другом DO петљом"
++
++#: fortran/parse.c:2053
++#, no-c-format
++msgid "Statement label in ENDDO at %C doesn't match DO label"
++msgstr "Етикета наредбе у ENDDO код %C не одговара етикети DO"
++
++#: fortran/parse.c:2110
++#, no-c-format
++msgid "%s statement at %C cannot terminate a non-block DO loop"
++msgstr "Наредба %s код %C не може окончати неблоковску петљу DO"
++
++#: fortran/parse.c:2249
++#, no-c-format
++msgid "Contained procedure '%s' at %C is already ambiguous"
++msgstr "Садржана процедура ‘%s’ код %C је већ двосмислена"
++
++#: fortran/parse.c:2300
++#, no-c-format
++msgid "Unexpected %s statement in CONTAINS section at %C"
++msgstr "Неочекивана наредба %s у одељку CONTAINS код %C"
++
++#: fortran/parse.c:2385
++#, no-c-format
++msgid "CONTAINS statement at %C is already in a contained program unit"
++msgstr "Наредба CONTAINS код %C је већ у садржаној програмској јединици"
++
++#: fortran/parse.c:2434
++#, no-c-format
++msgid "Global name '%s' at %L is already being used as a %s at %L"
++msgstr "Глобално име ‘%s’ код %L се већ користи као %s код %L"
++
++#: fortran/parse.c:2455
++#, no-c-format
++msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L"
++msgstr "Празно BLOCK DATA код %C коси се са претходним BLOCK DATA код %L"
++
++#: fortran/parse.c:2480
++#, no-c-format
++msgid "Unexpected %s statement in BLOCK DATA at %C"
++msgstr "Неочекивана наредба %s у BLOCK DATA код %C"
++
++#: fortran/parse.c:2523
++#, no-c-format
++msgid "Unexpected %s statement in MODULE at %C"
++msgstr "Неочекивана наредба %s у модулу код %C"
++
++#. If we see a duplicate main program, shut down.  If the second
++#. instance is an implied main program, ie data decls or executable
++#. statements, we're in for lots of errors.
++#: fortran/parse.c:2702
++#, no-c-format
++msgid "Two main PROGRAMs at %L and %C"
++msgstr "Два главна програма, код %L и %C"
++
++#: fortran/primary.c:91
++#, no-c-format
++msgid "Missing kind-parameter at %C"
++msgstr "Недостаје параметар врсте код %C"
++
++#: fortran/primary.c:214
++#, no-c-format
++msgid "Integer kind %d at %C not available"
++msgstr "Целобројна врста %d код %C није доступна"
++
++#: fortran/primary.c:222
++#, no-c-format
++msgid "Integer too big for its kind at %C"
++msgstr "Цео број превелик за своју врсту код %C"
++
++#: fortran/primary.c:252
++#, no-c-format
++msgid "Extension: Hollerith constant at %C"
++msgstr "Проширење: Холеритова константа код %C"
++
++#: fortran/primary.c:264
++#, no-c-format
++msgid "Invalid Hollerith constant: %L must contain at least one character"
++msgstr "Неисправна Холеритова константа: %L мора садржати бар један знак"
++
++#: fortran/primary.c:270
++#, no-c-format
++msgid "Invalid Hollerith constant: Interger kind at %L should be default"
++msgstr "Неисправна Холеритова константа: Целобројна врста код %L треба да је подразумевана"
++
++#: fortran/primary.c:357
++#, no-c-format
++msgid "Extension: Hexadecimal constant at %C uses non-standard syntax."
++msgstr "Проширење: Хексадекадна константа код %C користи нестандардну синтаксу."
++
++#: fortran/primary.c:367
++#, no-c-format
++msgid "Empty set of digits in BOZ constant at %C"
++msgstr "Празан скуп цифара у БОЗ константи код %C"
++
++#: fortran/primary.c:373
++#, no-c-format
++msgid "Illegal character in BOZ constant at %C"
++msgstr "Недозвољени знак у БОЗ константи код %C"
++
++#: fortran/primary.c:395
++#, no-c-format
++msgid "Extension: BOZ constant at %C uses non-standard postfix syntax."
++msgstr "Проширење: БОЗ константа код %C користи нестандардну постфиксну синтаксу."
++
++#: fortran/primary.c:421
++#, no-c-format
++msgid "Integer too big for integer kind %i at %C"
++msgstr "Превелики цео број за целобројну врсту %i код %C"
++
++#: fortran/primary.c:521
++#, no-c-format
++msgid "Missing exponent in real number at %C"
++msgstr "Недостаје изложилац у реалном броју код %C"
++
++#: fortran/primary.c:578
++#, no-c-format
++msgid "Real number at %C has a 'd' exponent and an explicit kind"
++msgstr "Реални број код %C има изложилац ‘d’ и експлицитну врсту"
++
++#: fortran/primary.c:588
++#, no-c-format
++msgid "Real number at %C has a 'q' exponent and an explicit kind"
++msgstr "Реални број код %C има изложилац ‘q’ и експлицитну врсту"
++
++#: fortran/primary.c:600
++#, no-c-format
++msgid "Invalid real kind %d at %C"
++msgstr "Неисправна реална врста %d код %C"
++
++#: fortran/primary.c:614
++#, no-c-format
++msgid "Real constant overflows its kind at %C"
++msgstr "Реална константа прелива своју врсту код %C"
++
++#: fortran/primary.c:619
++#, no-c-format
++msgid "Real constant underflows its kind at %C"
++msgstr "Реална константа подлива своју врсту код %C"
++
++#: fortran/primary.c:711
++#, no-c-format
++msgid "Syntax error in SUBSTRING specification at %C"
++msgstr "Синтаксна грешка у одредници SUBSTRING код %C"
++
++#: fortran/primary.c:943
++#, no-c-format
++msgid "Invalid kind %d for CHARACTER constant at %C"
++msgstr "Неисправна врста %d за знаковну константу код %C"
++
++#: fortran/primary.c:964
++#, no-c-format
++msgid "Unterminated character constant beginning at %C"
++msgstr "Неокончана знаковна константа с почетком код %C"
++
++#: fortran/primary.c:1038
++#, no-c-format
++msgid "Bad kind for logical constant at %C"
++msgstr "Лоша врста за логичку константу код %C"
++
++#: fortran/primary.c:1073
++#, no-c-format
++msgid "Expected PARAMETER symbol in complex constant at %C"
++msgstr "Очекиван је параметарски симбол у комплексној константи код %C"
++
++#: fortran/primary.c:1079
++#, no-c-format
++msgid "Numeric PARAMETER required in complex constant at %C"
++msgstr "Потребан је бројевни параметар у комплексној константи код %C"
++
++#: fortran/primary.c:1085
++#, no-c-format
++msgid "Scalar PARAMETER required in complex constant at %C"
++msgstr "Потребан је скаларни параметар у комплексној константи код %C"
++
++#: fortran/primary.c:1115
++#, no-c-format
++msgid "Error converting PARAMETER constant in complex constant at %C"
++msgstr "Грешка при претварању параметарске константе у комплексну код %C"
++
++#: fortran/primary.c:1242
++#, no-c-format
++msgid "Syntax error in COMPLEX constant at %C"
++msgstr "Синтаксна грешка у комплексној константи код %C"
++
++#: fortran/primary.c:1424
++#, no-c-format
++msgid "Keyword '%s' at %C has already appeared in the current argument list"
++msgstr "Кључна реч ‘%s’ код %C се већ јавила у текућој листи аргумената"
++
++#: fortran/primary.c:1481
++#, no-c-format
++msgid "Expected alternate return label at %C"
++msgstr "Очекивана је етикета алтернативног повратка код %C"
++
++#: fortran/primary.c:1500
++#, no-c-format
++msgid "Missing keyword name in actual argument list at %C"
++msgstr "Недостаје име кључне речи у листи стварних аргумената код %C"
++
++#: fortran/primary.c:1536
++#, no-c-format
++msgid "Syntax error in argument list at %C"
++msgstr "Синтаксна грешка у листи аргумената код %C"
++
++#: fortran/primary.c:1623
++#, no-c-format
++msgid "Expected structure component name at %C"
++msgstr "Очекивано је име компоненте структуре код %C"
++
++#: fortran/primary.c:1861
++#, no-c-format
++msgid "Too many components in structure constructor at %C"
++msgstr "Превише компонената у конструктору структуре код %C"
++
++#: fortran/primary.c:1876
++#, no-c-format
++msgid "Too few components in structure constructor at %C"
++msgstr "Премало компонената у конструктору структуре код %C"
++
++#: fortran/primary.c:1894
++#, no-c-format
++msgid "Syntax error in structure constructor at %C"
++msgstr "Синтаксна грешка у конструктору структуре код %C"
++
++#: fortran/primary.c:2007
++#, no-c-format
++msgid "Unexpected use of subroutine name '%s' at %C"
++msgstr "Неочекивана употреба имена потпрограма ‘%s’ код %C"
++
++#: fortran/primary.c:2038
++#, no-c-format
++msgid "Statement function '%s' requires argument list at %C"
++msgstr "Наредбена функција ‘%s’ захтева листу аргумената код %C"
++
++#: fortran/primary.c:2041
++#, no-c-format
++msgid "Function '%s' requires an argument list at %C"
++msgstr "Функција ‘%s’ захтева листу аргумената код %C"
++
++#: fortran/primary.c:2195
++#, no-c-format
++msgid "Missing argument list in function '%s' at %C"
++msgstr "Недостаје листа аргумената у функцији ‘%s’ код %C"
++
++#: fortran/primary.c:2223
++#, no-c-format
++msgid "Symbol at %C is not appropriate for an expression"
++msgstr "Симбол код %C није подесан за израз"
++
++#: fortran/primary.c:2293
++#, no-c-format
++msgid "Expected VARIABLE at %C"
++msgstr "Очекивано је VARIABLE код %C"
++
++#: fortran/resolve.c:102
++#, no-c-format
++msgid "Alternate return specifier in elemental subroutine '%s' at %L is not allowed"
++msgstr "Наводилац алтернативног повратка није дозвољен у елементалном потпрограму ‘%s’ код %L"
++
++#: fortran/resolve.c:106
++#, no-c-format
++msgid "Alternate return specifier in function '%s' at %L is not allowed"
++msgstr "Наводилац алтернативног повратка није дозвољен у функцији ‘%s’ код %L"
++
++#: fortran/resolve.c:120
++#, no-c-format
++msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE"
++msgstr "Лажна процедура ‘%s’ чисте процедуре код %L мора такође бити чиста"
++
++#: fortran/resolve.c:128
++#, no-c-format
++msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure"
++msgstr "Лажна процедура код %L није дозвољена у елементалној процедури"
++
++#: fortran/resolve.c:172
++#, no-c-format
++msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN)"
++msgstr "Аргумент ‘%s’ чисте функције ‘%s’ код %L мора бити намере-у"
++
++#: fortran/resolve.c:180
++#, no-c-format
++msgid "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified"
++msgstr "Аргумент ‘%s’ чистог потпрограма ‘%s’ код %L мора имати наведену намеру"
++
++#: fortran/resolve.c:191
++#, no-c-format
++msgid "Argument '%s' of elemental procedure at %L must be scalar"
++msgstr "Аргумент ‘%s’ елементалне процедуре код %L мора бити скалар"
++
++#: fortran/resolve.c:199
++#, no-c-format
++msgid "Argument '%s' of elemental procedure at %L cannot have the POINTER attribute"
++msgstr "Аргумент ‘%s’ елементалне процедуре код %L не може имати атрибут показивача"
++
++#: fortran/resolve.c:211
++#, no-c-format
++msgid "Argument '%s' of statement function at %L must be scalar"
++msgstr "Аргумент ‘%s’ наредбене функције код %L мора бити скалар"
++
++#: fortran/resolve.c:222
++#, no-c-format
++msgid "Character-valued argument '%s' of statement function at %L must has constant length"
++msgstr "Аргумент знаковне вредности ‘%s’ наредбене функције код %L мора имати константну дужину"
++
++#: fortran/resolve.c:283
++#, no-c-format
++msgid "Contained function '%s' at %L has no IMPLICIT type"
++msgstr "Садржана функција ‘%s’ код %L нема имплицитан тип"
++
++#: fortran/resolve.c:293
++#, no-c-format
++msgid "Character-valued internal function '%s' at %L must not be assumed length"
++msgstr "Унутрашња функција знаковне вредности ‘%s’ код %L не може бити претпостављене дужине"
++
++#: fortran/resolve.c:436
++#, no-c-format
++msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L"
++msgstr "Резултат функције %s не може бити низ у функцији %s код %L"
++
++#: fortran/resolve.c:440
++#, no-c-format
++msgid "ENTRY result %s can't be an array in FUNCTION %s at %L"
++msgstr "Улазни резултат %s не може бити низ у функцији %s код %L"
++
++#: fortran/resolve.c:447
++#, no-c-format
++msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L"
++msgstr "Резултат функције %s не може бити показивач у функцији %s код %L"
++
++#: fortran/resolve.c:451
++#, no-c-format
++msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L"
++msgstr "Улазни резултат %s не може бити показивач у функцији %s код %L"
++
++#: fortran/resolve.c:489
++#, no-c-format
++msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L"
++msgstr "Резултат функције %s не може бити типа %s у функцији %s код %L"
++
++#: fortran/resolve.c:494
++#, no-c-format
++msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L"
++msgstr "Улазни резултат %s не може бити типа %s у функцији %s код %L"
++
++#: fortran/resolve.c:590
++#, no-c-format
++msgid "The element in the derived type constructor at %L, for pointer component '%s', is %s but should be %s"
++msgstr "Елемент у конструктору изведеног типа код %L, за показивачку компоненте ‘%s’, јесте %s а треба да буде %s"
++
++#: fortran/resolve.c:716
++#, no-c-format
++msgid "The upper bound in the last dimension must appear in the reference to the assumed size array '%s' at %L."
++msgstr "Горња граница у последњој димензији мора се појавити у упућивачу на низ претпостављене величине ‘%s’ код %L."
++
++#: fortran/resolve.c:781 fortran/resolve.c:3633 fortran/resolve.c:4299
++#, no-c-format
++msgid "Label %d referenced at %L is never defined"
++msgstr "Етикета %d поменута код %L није дефинисана"
++
++#: fortran/resolve.c:808
++#, no-c-format
++msgid "Statement function '%s' at %L is not allowed as an actual argument"
++msgstr "Наредбена функција ‘%s’ код %L није дозвољена као стварни аргумент"
++
++#: fortran/resolve.c:815
++#, no-c-format
++msgid "Internal procedure '%s' is not allowed as an actual argument at %L"
++msgstr "Унутрашња процедура ‘%s’ код %L није дозвољена као стварни аргумент"
++
++#: fortran/resolve.c:821
++#, no-c-format
++msgid "ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument at %L"
++msgstr "Елементална несопствена процедура ‘%s’ код %L није дозвољена као стварни аргумент"
++
++#: fortran/resolve.c:845
++#, no-c-format
++msgid "Symbol '%s' at %L is ambiguous"
++msgstr "Двосмислен симбол ‘%s’ код %L"
++
++#: fortran/resolve.c:982
++#, no-c-format
++msgid "Generic function '%s' at %L is not an intrinsic function"
++msgstr "Генеричка функција ‘%s’ код %L није сопствена функција"
++
++#: fortran/resolve.c:992
++#, no-c-format
++msgid "Generic function '%s' at %L is not consistent with a specific intrinsic interface"
++msgstr "Генеричка функција ‘%s’ код %L није у складу са одређеним сопственим сучељем"
++
++#: fortran/resolve.c:1030
++#, no-c-format
++msgid "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic"
++msgstr "Функција ‘%s’ код %L је сопствена али није сагласна са сопственом"
++
++#: fortran/resolve.c:1076
++#, no-c-format
++msgid "Unable to resolve the specific function '%s' at %L"
++msgstr "Не могу да разрешим одређену функцију ‘%s’ код %L"
++
++#: fortran/resolve.c:1132 fortran/resolve.c:5955
++#, no-c-format
++msgid "Function '%s' at %L has no IMPLICIT type"
++msgstr "Функција ‘%s’ код %L нема имплицитан тип"
++
++#. Internal procedures are taken care of in resolve_contained_fntype.
++#: fortran/resolve.c:1218
++#, no-c-format
++msgid "Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is not a dummy argument"
++msgstr "Функција ‘%s’ декларисана је као CHARACTER(*) и не може бити употребљена код %L пошто није лажни аргумент"
++
++#: fortran/resolve.c:1332
++#, no-c-format
++msgid "Function reference to '%s' at %L is inside a FORALL block"
++msgstr "Упућивач функције на ‘%s’ код %L унутар блока FORALL"
++
++#: fortran/resolve.c:1338
++#, no-c-format
++msgid "Function reference to '%s' at %L is to a non-PURE procedure within a PURE procedure"
++msgstr "Упућивач функције на ‘%s’ код %L је за нечисту процедуру унутар чисте процедуре"
++
++#: fortran/resolve.c:1368
++#, no-c-format
++msgid "Subroutine call to '%s' in FORALL block at %L is not PURE"
++msgstr "Позив потпрограма за ‘%s’ у блоку FORALL код %L није чист"
++
++#: fortran/resolve.c:1371
++#, no-c-format
++msgid "Subroutine call to '%s' at %L is not PURE"
++msgstr "Позив потпрограма за ‘%s’ код %L није чист"
++
++#: fortran/resolve.c:1433
++#, no-c-format
++msgid "Generic subroutine '%s' at %L is not an intrinsic subroutine"
++msgstr "Генерички потпрограм ‘%s’ код %L није сопствени потпрограм"
++
++#: fortran/resolve.c:1442
++#, no-c-format
++msgid "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine interface"
++msgstr "Генерички потпрограм ‘%s’ код %L није у складу са сучељем сопственог потпрограма"
++
++#: fortran/resolve.c:1477
++#, no-c-format
++msgid "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic"
++msgstr "Потпрограм ‘%s’ код %L је сопствени али није сагласан са сопственим"
++
++#: fortran/resolve.c:1520
++#, no-c-format
++msgid "Unable to resolve the specific subroutine '%s' at %L"
++msgstr "Не могу да разрешим одређени потпрограм ‘%s’ код %L"
++
++#: fortran/resolve.c:1576
++#, no-c-format
++msgid "'%s' at %L has a type, which is not consistent with the CALL at %L"
++msgstr "„%s“ код %L има тип који није у складу са позивом код %L"
++
++#: fortran/resolve.c:1642
++msgid "elemental subroutine"
++msgstr "елементални потпрограм"
++
++#: fortran/resolve.c:1674
++#, no-c-format
++msgid "Shapes for operands at %L and %L are not conformable"
++msgstr "Облици операнада код %L и %L нису усагласиви"
++
++#: fortran/resolve.c:1731
++#, c-format
++msgid "Operand of unary numeric operator '%s' at %%L is %s"
++msgstr "Операнд унарног бројевног оператора ‘%s’ код %%L је %s"
++
++#: fortran/resolve.c:1747
++#, c-format
++msgid "Operands of binary numeric operator '%s' at %%L are %s/%s"
++msgstr "Операнди бинарног бројевног оператора ‘%s’ код %%L су %s/%s"
++
++#: fortran/resolve.c:1761
++#, c-format
++msgid "Operands of string concatenation operator at %%L are %s/%s"
++msgstr "Операнди оператора надовезивања ниски код %%L су %s/%s"
++
++#: fortran/resolve.c:1780
++#, c-format
++msgid "Operands of logical operator '%s' at %%L are %s/%s"
++msgstr "Операнди логичког оператора ‘%s’ код %%L су %s/%s"
++
++#: fortran/resolve.c:1794
++#, c-format
++msgid "Operand of .NOT. operator at %%L is %s"
++msgstr "Операнд оператора .NOT. код %%L је %s"
++
++#: fortran/resolve.c:1804
++msgid "COMPLEX quantities cannot be compared at %L"
++msgstr "Комплексне величине се не могу поредити код %L"
++
++#: fortran/resolve.c:1830
++#, c-format
++msgid "Logicals at %%L must be compared with %s instead of %s"
++msgstr "Логичке код %%L морају бити поређене са %s уместо %s"
++
++#: fortran/resolve.c:1835
++#, c-format
++msgid "Operands of comparison operator '%s' at %%L are %s/%s"
++msgstr "Операнди оператора поређења ‘%s’ код %%L су %s/%s"
++
++#: fortran/resolve.c:1843
++#, c-format
++msgid "Operand of user operator '%s' at %%L is %s"
++msgstr "Операнд корисничког оператора ‘%s’ код %%L је %s"
++
++#: fortran/resolve.c:1846
++#, c-format
++msgid "Operands of user operator '%s' at %%L are %s/%s"
++msgstr "Операнди корисничког оператора ‘%s’ код %%L су %s/%s"
++
++#: fortran/resolve.c:1917
++#, no-c-format
++msgid "Inconsistent ranks for operator at %L and %L"
++msgstr "Неусаглашени рангови за оператор код %L и %L"
++
++#: fortran/resolve.c:2040
++#, no-c-format
++msgid "Illegal stride of zero at %L"
++msgstr "Недозвољен нулти корак код %L"
++
++#: fortran/resolve.c:2061
++#, no-c-format
++msgid "Array reference at %L is out of bounds"
++msgstr "Упућивач низа код %L је изван граница"
++
++#: fortran/resolve.c:2082
++#, no-c-format
++msgid "Rightmost upper bound of assumed size array section not specified at %L"
++msgstr "Није наведена десна горња граница низа претпостављене величине код %L"
++
++#: fortran/resolve.c:2092
++#, no-c-format
++msgid "Rank mismatch in array reference at %L (%d/%d)"
++msgstr "Неслагање рангова у упућивачу низа код %L (%d/%d)"
++
++#: fortran/resolve.c:2120
++#, no-c-format
++msgid "Array index at %L must be scalar"
++msgstr "Индекс низа код %L мора бити скалар"
++
++#: fortran/resolve.c:2126
++#, no-c-format
++msgid "Array index at %L must be of INTEGER type"
++msgstr "Индекс низа код %L мора бити целобројни"
++
++#: fortran/resolve.c:2132
++#, no-c-format
++msgid "Extension: REAL array index at %L"
++msgstr "Проширење: реални индекс низа код %L"
++
++#: fortran/resolve.c:2162
++#, no-c-format
++msgid "Argument dim at %L must be scalar"
++msgstr "Аргумент димензије код %L мора бити скалар"
++
++#: fortran/resolve.c:2168
++#, no-c-format
++msgid "Argument dim at %L must be of INTEGER type"
++msgstr "Аргумент димензије код %L мора целобројни"
++
++#: fortran/resolve.c:2270
++#, no-c-format
++msgid "Array index at %L is an array of rank %d"
++msgstr "Индекс низа код %L је низ ранга %d"
++
++#: fortran/resolve.c:2308
++#, no-c-format
++msgid "Substring start index at %L must be of type INTEGER"
++msgstr "Индекс почетка подниске код %L мора бити целобројни"
++
++#: fortran/resolve.c:2315
++#, no-c-format
++msgid "Substring start index at %L must be scalar"
++msgstr "Индекс почетка подниске код %L мора бити скалар"
++
++#: fortran/resolve.c:2322
++#, no-c-format
++msgid "Substring start index at %L is less than one"
++msgstr "Индекс почетка подниске код %L је мањи од један"
++
++#: fortran/resolve.c:2335
++#, no-c-format
++msgid "Substring end index at %L must be of type INTEGER"
++msgstr "Индекс краја подниске код %L мора бити целобројни"
++
++#: fortran/resolve.c:2342
++#, no-c-format
++msgid "Substring end index at %L must be scalar"
++msgstr "Индекс краја подниске код %L мора бити скалар"
++
++#: fortran/resolve.c:2350
++#, no-c-format
++msgid "Substring end index at %L is out of bounds"
++msgstr "Индекс краја подниске код %L је ван граница"
++
++#: fortran/resolve.c:2424
++#, no-c-format
++msgid "Component to the right of a part reference with nonzero rank must not have the POINTER attribute at %L"
++msgstr "Компонента десно од делимичног упућивача са ненултим рангом не сме имати атрибут показивача код %L"
++
++#: fortran/resolve.c:2443
++#, no-c-format
++msgid "Two or more part references with nonzero rank must not be specified at %L"
++msgstr "Два или више делимична упућивача са ненултим рангом не смеју бити наведени код %L"
++
++#: fortran/resolve.c:2672
++#, no-c-format
++msgid "%s at %L must be a scalar"
++msgstr "%s код %L мора бити скалар"
++
++#: fortran/resolve.c:2680
++#, no-c-format
++msgid "%s at %L must be INTEGER or REAL"
++msgstr "%s код %L мора бити целобројно или реално"
++
++#: fortran/resolve.c:2683
++#, no-c-format
++msgid "%s at %L must be INTEGER"
++msgstr "%s код %L мора бити целобројно"
++
++#: fortran/resolve.c:2699
++#, no-c-format
++msgid "Obsolete: REAL DO loop iterator at %L"
++msgstr "Застарело: Реални итератор у петљи DO код %L"
++
++#: fortran/resolve.c:2708
++#, no-c-format
++msgid "Cannot assign to loop variable in PURE procedure at %L"
++msgstr "Не може се додељивати променљивој петље у чистој процедури код %L"
++
++#: fortran/resolve.c:2732
++#, no-c-format
++msgid "Step expression in DO loop at %L cannot be zero"
++msgstr "Израз за корак у петљи DO код %L не може бити нула"
++
++#: fortran/resolve.c:2767
++#, no-c-format
++msgid "FORALL index-name at %L must be a scalar INTEGER"
++msgstr "Индекс-име у FORALL код %L мора бити скларни целобројан"
++
++#: fortran/resolve.c:2772
++#, no-c-format
++msgid "FORALL start expression at %L must be a scalar INTEGER"
++msgstr "Израз за почетак у FORALL код %L мора бити скаларни целобројан"
++
++#: fortran/resolve.c:2779
++#, no-c-format
++msgid "FORALL end expression at %L must be a scalar INTEGER"
++msgstr "Израз за крај у FORALL код %L мора бити скаларни целобројан"
++
++#: fortran/resolve.c:2787
++#, no-c-format
++msgid "FORALL stride expression at %L must be a scalar %s"
++msgstr "Израз за корак у FORALL код %L мора бити скаларни %s"
++
++#: fortran/resolve.c:2792
++#, no-c-format
++msgid "FORALL stride expression at %L cannot be zero"
++msgstr "Израз за корак у FORALL код %L не може бити нула"
++
++#: fortran/resolve.c:2890
++#, no-c-format
++msgid "Expression in DEALLOCATE statement at %L must be ALLOCATABLE or a POINTER"
++msgstr "Израз у наредби DEALLOCATE код %L мора бити резервљив или показивач"
++
++#: fortran/resolve.c:2990
++#, no-c-format
++msgid "Expression in ALLOCATE statement at %L must be ALLOCATABLE or a POINTER"
++msgstr "Израз у наредби ALLOCATE код %L мора бити резервљив или показивач"
++
++#: fortran/resolve.c:3015
++#, no-c-format
++msgid "Array specification required in ALLOCATE statement at %L"
++msgstr "Потребна је одредница низа у наредби ALLOCATE код %L"
++
++#: fortran/resolve.c:3044
++#, no-c-format
++msgid "Bad array specification in ALLOCATE statement at %L"
++msgstr "Лоша одредница низа у наредби ALLOCATE код %L"
++
++#. The cases overlap, or they are the same
++#. element in the list.  Either way, we must
++#. issue an error and get the next case from P.
++#. FIXME: Sort P and Q by line number.
++#: fortran/resolve.c:3200
++#, no-c-format
++msgid "CASE label at %L overlaps with CASE label at %L"
++msgstr "Етикета CASE код %L преклапа етикету CASE код %L"
++
++#: fortran/resolve.c:3251
++#, no-c-format
++msgid "Expression in CASE statement at %L must be of type %s"
++msgstr "Израз у наредби CASE код %L мора бити типа %s"
++
++#: fortran/resolve.c:3262
++#, no-c-format
++msgid "Expression in CASE statement at %L must be kind %d"
++msgstr "Израз у наредби CASE код %L мора бити врста %d"
++
++#: fortran/resolve.c:3274
++#, no-c-format
++msgid "Expression in CASE statement at %L must be scalar"
++msgstr "Израз у наредби CASE код %L мора бити скалар"
++
++#: fortran/resolve.c:3320
++#, no-c-format
++msgid "Selection expression in computed GOTO statement at %L must be a scalar integer expression"
++msgstr "Изборни израз у рачунском GOTO код %L мора бити скаларни целобројан израз"
++
++#: fortran/resolve.c:3338
++#, no-c-format
++msgid "Argument of SELECT statement at %L cannot be %s"
++msgstr "Аргумент наредбе SELECT код %L не може бити %s"
++
++#: fortran/resolve.c:3347
++#, no-c-format
++msgid "Argument of SELECT statement at %L must be a scalar expression"
++msgstr "Аргумент наредбе SELECT код %L мора бити скаларни израз"
++
++#: fortran/resolve.c:3411
++#, no-c-format
++msgid "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L"
++msgstr "DEFAULT CASE код %L не може бити праћен другим DEFAULT CASE код %L"
++
++#: fortran/resolve.c:3438
++#, no-c-format
++msgid "Logical range in CASE statement at %L is not allowed"
++msgstr "Логички опсег у наредби CASE код %L није дозвољен"
++
++#: fortran/resolve.c:3449
++#, no-c-format
++msgid "Range specification at %L can never be matched"
++msgstr "Одредница опсега код %L не може никако бити поклопљена"
++
++#: fortran/resolve.c:3552
++#, no-c-format
++msgid "Logical SELECT CASE block at %L has more that two cases"
++msgstr "Блок логичког SELECT CASE код %L има више од два случаја"
++
++#: fortran/resolve.c:3590
++#, no-c-format
++msgid "Data transfer element at %L cannot have POINTER components"
++msgstr "Елемент преноса података код %L не може имати показивачке компоненте"
++
++#: fortran/resolve.c:3597
++#, no-c-format
++msgid "Data transfer element at %L cannot have PRIVATE components"
++msgstr "Елемент преноса података код %L не може имати приватне компоненте"
++
++#: fortran/resolve.c:3606
++#, no-c-format
++msgid "Data transfer element at %L cannot be a full reference to an assumed-size array"
++msgstr "Елемент преноса података код %L не може бити пун упућивач на низ претпостављене величине"
++
++#: fortran/resolve.c:3640
++#, no-c-format
++msgid "Statement at %L is not a valid branch target statement for the branch statement at %L"
++msgstr "Наредба код %L није исправна наредба циља гранања за наредбу гранања код %L"
++
++#: fortran/resolve.c:3649
++#, no-c-format
++msgid "Branch at %L causes an infinite loop"
++msgstr "Гранање код %L води у бесконачну петљу"
++
++#: fortran/resolve.c:3682
++#, no-c-format
++msgid "Label at %L is not in the same block as the GOTO statement at %L"
++msgstr "Етикета код %L није у истом блоку као наредба GOTO код %L"
++
++#: fortran/resolve.c:3698
++#, no-c-format
++msgid "Obsolete: GOTO at %L jumps to END of construct at %L"
++msgstr "Застарело: GOTO код %L скаче на END конструкције код %L"
++
++#: fortran/resolve.c:3772
++#, no-c-format
++msgid "WHERE mask at %L has inconsistent shape"
++msgstr "Маска у WHERE код %L има неусаглашен облик"
++
++#: fortran/resolve.c:3788
++#, no-c-format
++msgid "WHERE assignment target at %L has inconsistent shape"
++msgstr "Циљ доделе у WHERE код %L има неусаглашен облик"
++
++#: fortran/resolve.c:3798 fortran/resolve.c:3997
++#, no-c-format
++msgid "Unsupported statement inside WHERE at %L"
++msgstr "Неподржана наредба унутар WHERE код %L"
++
++#: fortran/resolve.c:3874
++#, no-c-format
++msgid "expresion reference type error at %L"
++msgstr "грешка типа упућивача израза код %L"
++
++#: fortran/resolve.c:3906
++#, no-c-format
++msgid "Unsupported statement while finding forall index in expression"
++msgstr "Неподржана наредба током тражења индекса за FORALL у изразу"
++
++#: fortran/resolve.c:3953
++#, no-c-format
++msgid "Assignment to a FORALL index variable at %L"
++msgstr "Додела у индексну променљиву за FORALL код %L"
++
++#: fortran/resolve.c:3961
++#, no-c-format
++msgid "The FORALL with index '%s' cause more than one assignment to this object at %L"
++msgstr "FORALL са индексом ‘%s’ изазива више од једне доделе овом објекту код %L"
++
++#: fortran/resolve.c:4088
++#, no-c-format
++msgid "An outer FORALL construct already has an index with this name %L"
++msgstr "Спољашња конструкција FORALL већ има индекс са овим именом %L"
++
++#: fortran/resolve.c:4100 fortran/resolve.c:4103 fortran/resolve.c:4106
++#, no-c-format
++msgid "A FORALL index must not appear in a limit or stride expression in the same FORALL at %L"
++msgstr "Индекс у FORALL не сме се наћи у изразу за ограничење или корак за исто FORALL код %L"
++
++#: fortran/resolve.c:4149
++#, no-c-format
++msgid "ELSE IF clause at %L requires a scalar LOGICAL expression"
++msgstr "Одредба ELSE-IF код %L захтева скаларни логички израз"
++
++#: fortran/resolve.c:4159
++#, no-c-format
++msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array"
++msgstr "Одредба WHERE/ELSEWHERE код %L захтева логички низ"
++
++#: fortran/resolve.c:4240
++#, no-c-format
++msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
++msgstr "Наредба ASSIGNED GOTO код %L захтева целобројну променљиву"
++
++#: fortran/resolve.c:4243
++#, no-c-format
++msgid "Variable '%s' has not been assigned a target label at %L"
++msgstr "Променљивој ‘%s’ није додељена циљна етикета код %L"
++
++#: fortran/resolve.c:4253
++#, no-c-format
++msgid "Alternate RETURN statement at %L requires an INTEGER return specifier"
++msgstr "Алтернативна наредба повратка код %L захтева целобројни наводилац повратка"
++
++#: fortran/resolve.c:4265
++#, no-c-format
++msgid "Subroutine '%s' called instead of assignment at %L must be PURE"
++msgstr "Потпрограм ‘%s’ позван уместо доделе код %L мора бити чист"
++
++#: fortran/resolve.c:4278
++#, no-c-format
++msgid "Cannot assign to variable '%s' in PURE procedure at %L"
++msgstr "Не може се доделити променљивој ‘%s’ у чистој процедури код %L"
++
++#: fortran/resolve.c:4287
++#, no-c-format
++msgid "Right side of assignment at %L is a derived type containing a POINTER in a PURE procedure"
++msgstr "Десна страна доделе код %L је изведени тип који садржи показивач у чистој процедури"
++
++#: fortran/resolve.c:4307
++#, no-c-format
++msgid "ASSIGN statement at %L requires a scalar default INTEGER variable"
++msgstr "ASSIGN код %L захтева скаларну подразумевану целобројну променљиву"
++
++#: fortran/resolve.c:4322
++#, no-c-format
++msgid "Arithmetic IF statement at %L requires a numeric expression"
++msgstr "Аритметичко IF код %L захтева бројевни израз"
++
++#: fortran/resolve.c:4334
++#, no-c-format
++msgid "IF clause at %L requires a scalar LOGICAL expression"
++msgstr "Одредба IF код %L захтева скаларни логички израз"
++
++#: fortran/resolve.c:4360
++#, no-c-format
++msgid "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression"
++msgstr "Излазни услов из петље DO WHILE код %L мора бити скаларни логички израз"
++
++#: fortran/resolve.c:4367
++#, no-c-format
++msgid "STAT tag in ALLOCATE statement at %L must be of type INTEGER"
++msgstr "Ознака STAT у наредби ALLOCATE код %L мора бити целобројна"
++
++#: fortran/resolve.c:4379
++#, no-c-format
++msgid "STAT tag in DEALLOCATE statement at %L must be of type INTEGER"
++msgstr "Ознака STAT у наредби DEALLOCATE код %L мора бити целобројна"
++
++#: fortran/resolve.c:4445
++#, no-c-format
++msgid "FORALL mask clause at %L requires a LOGICAL expression"
++msgstr "Одредба маске у FORALL код %L захтева логички израз"
++
++#: fortran/resolve.c:4550
++#, no-c-format
++msgid "Allocatable array '%s' at %L must have a deferred shape"
++msgstr "Резервациони низ ‘%s’ код %L мора имати одложени облик"
++
++#: fortran/resolve.c:4553
++#, no-c-format
++msgid "Scalar object '%s' at %L may not be ALLOCATABLE"
++msgstr "Скаларни објекат ‘%s’ код %L не може бити резервациони"
++
++#: fortran/resolve.c:4560
++#, no-c-format
++msgid "Array pointer '%s' at %L must have a deferred shape"
++msgstr "Низовни показивач ‘%s’ код %L мора имати одложен облик"
++
++#: fortran/resolve.c:4571
++#, no-c-format
++msgid "Array '%s' at %L cannot have a deferred shape"
++msgstr "Низ ‘%s’ код %L не може имати одложен облик"
++
++#: fortran/resolve.c:4601
++#, no-c-format
++msgid "The module or main program array '%s' at %L must have constant shape"
++msgstr "Низ модула или главног програма ‘%s’ код %L мора имати константан облик"
++
++#: fortran/resolve.c:4613
++#, no-c-format
++msgid "Entity with assumed character length at %L must be a dummy argument or a PARAMETER"
++msgstr "Ентитет са претпостављеном знаковном дужином код %L мора бити лажни аргумент или параметар"
++
++#: fortran/resolve.c:4626
++#, no-c-format
++msgid "'%s' at %L must have constant character length in this context"
++msgstr "‘%s’ код %L мора имати константну знаковну дужину у овом контексту"
++
++#: fortran/resolve.c:4657
++#, no-c-format
++msgid "Allocatable '%s' at %L cannot have an initializer"
++msgstr "Резервационо ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4660
++#, no-c-format
++msgid "External '%s' at %L cannot have an initializer"
++msgstr "Спољашње ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4663
++#, no-c-format
++msgid "Dummy '%s' at %L cannot have an initializer"
++msgstr "Лажно ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4666
++#, no-c-format
++msgid "Intrinsic '%s' at %L cannot have an initializer"
++msgstr "Сопствено ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4669
++#, no-c-format
++msgid "Function result '%s' at %L cannot have an initializer"
++msgstr "Резултат функцији ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4672
++#, no-c-format
++msgid "Automatic array '%s' at %L cannot have an initializer"
++msgstr "Аутоматски низ ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4692
++#, no-c-format
++msgid "Object '%s' at %L must have the SAVE attribute %s"
++msgstr "Објекат ‘%s’ код %L мора имати атрибут %s за SAVE"
++
++#: fortran/resolve.c:4725
++#, no-c-format
++msgid "Character-valued statement function '%s' at %L must have constant length"
++msgstr "Наредбена функција знаковне вредности ‘%s’ код %L мора имати константну дужину"
++
++#: fortran/resolve.c:4748
++#, no-c-format
++msgid "'%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L"
++msgstr "‘%s’ је приватног типа и не може бити лажни аргумент у ‘%s’, који је јаван код %L"
++
++#: fortran/resolve.c:4763
++#, no-c-format
++msgid "External object '%s' at %L may not have an initializer"
++msgstr "Спољашњи објекат ‘%s’ код %L не може имати успостављач"
++
++#: fortran/resolve.c:4782
++#, no-c-format
++msgid "CHARACTER(*) function '%s' at %L cannot be array-valued"
++msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може имати низовну вредност"
++
++#: fortran/resolve.c:4786
++#, no-c-format
++msgid "CHARACTER(*) function '%s' at %L cannot be pointer-valued"
++msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може имати показивачку вредност"
++
++# no-c-format
++#: fortran/resolve.c:4790
++#, no-c-format
++msgid "CHARACTER(*) function '%s' at %L cannot be pure"
++msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може бити чиста"
++
++#: fortran/resolve.c:4794
++#, no-c-format
++msgid "CHARACTER(*) function '%s' at %L cannot be recursive"
++msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може бити рекурзивна"
++
++#: fortran/resolve.c:4803
++#, no-c-format
++msgid "CHARACTER(*) function '%s' at %L is obsolescent in fortran 95"
++msgstr "Функција типа CHARACTER(*) ‘%s’ код %L, застарела је у фортрану 95"
++
++#: fortran/resolve.c:4828
++#, no-c-format
++msgid "Character length of component '%s' needs to be a constant specification expression at %L."
++msgstr "Знаковна дужина компоненте ‘%s’ мора бити константан одреднички израз код %L."
++
++#: fortran/resolve.c:4843
++#, no-c-format
++msgid "The component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L"
++msgstr "Компонента ‘%s’ је приватни тип и не може бити компонента у ‘%s’, која је јавна код %L"
++
++#: fortran/resolve.c:4861
++#, no-c-format
++msgid "Component '%s' of '%s' at %L must have constant array bounds."
++msgstr "Компонента ‘%s’ у ‘%s’ код %L мора имати константне границе низа."
++
++#: fortran/resolve.c:4895
++#, no-c-format
++msgid "PRIVATE symbol '%s' cannot be member of PUBLIC namelist at %L"
++msgstr "Приватни симбол ‘%s’ не може бити члан јавне листе имена код %L"
++
++#: fortran/resolve.c:4908
++#, no-c-format
++msgid "The array '%s' must have constant shape to be a NAMELIST object at %L"
++msgstr "Низ ‘%s’ мора имати константан облик да би био објекат листе имена код %L"
++
++#: fortran/resolve.c:4926
++#, no-c-format
++msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L"
++msgstr "Атрибут процедуре коси се са атрибутом листе имена у ‘%s’ код %L"
++
++#: fortran/resolve.c:4943
++#, no-c-format
++msgid "Parameter array '%s' at %L cannot be automatic or assumed shape"
++msgstr "Параметарски низ ‘%s’ код %L не може бити аутоматског или претпостављеног облика"
++
++#: fortran/resolve.c:4955
++#, no-c-format
++msgid "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type"
++msgstr "Имплицитно типски параметар ‘%s’ код %L не одговара каснијем имплицитном типу"
++
++#: fortran/resolve.c:4966
++#, no-c-format
++msgid "Incompatible derived type in PARAMETER at %L"
++msgstr "Несагласан изведени тип у параметру код %L"
++
++#: fortran/resolve.c:5067
++#, no-c-format
++msgid "Assumed size array at %L must be a dummy argument"
++msgstr "Низ претпостављене величине код %L мора бити лажни аргумент"
++
++#: fortran/resolve.c:5070
++#, no-c-format
++msgid "Assumed shape array at %L must be a dummy argument"
++msgstr "Низ претпостављеног облика код %L мора бити лажни аргумент"
++
++#: fortran/resolve.c:5083
++#, no-c-format
++msgid "Symbol at %L is not a DUMMY variable"
++msgstr "Симбол код %L није лажна променљива"
++
++#: fortran/resolve.c:5098
++#, no-c-format
++msgid "The derived type '%s' at %L is of type '%s', which has not been defined."
++msgstr "Изведени тип ‘%s’ код %L је типа ‘%s’, који није дефинисан."
++
++#: fortran/resolve.c:5117
++#, no-c-format
++msgid "The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have a default initializer"
++msgstr "Лажни аргумент намере-из ‘%s’ код %L је претпостављене величине и зато не може имати подразумевани успостављач"
++
++#: fortran/resolve.c:5157
++#, no-c-format
++msgid "Intrinsic at %L does not exist"
++msgstr "Сопствено код %L не постоји"
++
++#: fortran/resolve.c:5232
++#, no-c-format
++msgid "BLOCK DATA element '%s' at %L must be in COMMON"
++msgstr "BLOCK DATA елемент ‘%s’ код %L мора бити у заједничком"
++
++#: fortran/resolve.c:5276
++#, no-c-format
++msgid "Nonconstant array section at %L in DATA statement"
++msgstr "Неконстантан одељак низа код %L у наредби DATA"
++
++#: fortran/resolve.c:5289
++#, no-c-format
++msgid "DATA statement at %L has more variables than values"
++msgstr "Наредба DATA код %L има више променљивих него вредности"
++
++#: fortran/resolve.c:5487
++#, no-c-format
++msgid "DATA statement at %L has more values than variables"
++msgstr "Наредба DATA код %L има више вредности него променљивих"
++
++#: fortran/resolve.c:5569
++#, no-c-format
++msgid "Label %d at %L defined but not used"
++msgstr "Ознака %d код %L дефинисана али неупотребљена"
++
++#: fortran/resolve.c:5574
++#, no-c-format
++msgid "Label %d at %L defined but cannot be used"
++msgstr "Ознака %d код %L дефинисана али не може бити употребљена"
++
++#: fortran/resolve.c:5658
++#, no-c-format
++msgid "Derived type variable '%s' at %L must have SEQUENCE attribute to be an EQUIVALENCE object"
++msgstr "Променљива изведеног типа ‘%s’ код %L мора имати атрибут SEQUENCE да би била објекат еквиваленције"
++
++#: fortran/resolve.c:5673
++#, no-c-format
++msgid "Derived type variable '%s' at %L with pointer component(s) cannot be an EQUIVALENCE object"
++msgstr "Променљива изведеног типа ‘%s’ код %L са показивачким компонентама не може бити објекат еквиваленције"
++
++#: fortran/resolve.c:5680
++#, no-c-format
++msgid "Derived type variable '%s' at %L with default initializer cannot be an EQUIVALENCE object"
++msgstr "Променљива изведеног типа ‘%s’ код %L са подразумеваним успостављачем не може бити објекат еквиваленције"
++
++#: fortran/resolve.c:5781
++#, no-c-format
++msgid "Syntax error in EQUIVALENCE statement at %L"
++msgstr "Синтаксна грешка у наредби EQUIVALENCE код %L"
++
++#: fortran/resolve.c:5798
++#, no-c-format
++msgid "Initialized objects '%s' and '%s'  cannot both be in the EQUIVALENCE statement at %L"
++msgstr "Иницијализовани објекти ‘%s’ и ‘%s’ не могу оба бити у еквиваленцији код %L"
++
++#: fortran/resolve.c:5812
++#, no-c-format
++msgid "Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure procedure '%s'"
++msgstr "Члан заједничког блока ‘%s’ код %L не може бити објекат еквиваленције у чистој процедури ‘%s’"
++
++#: fortran/resolve.c:5821
++#, no-c-format
++msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object"
++msgstr "Именована константа ‘%s’ код %L не може бити објекат еквиваленције"
++
++#: fortran/resolve.c:5900
++#, no-c-format
++msgid "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object"
++msgstr "Низ ‘%s’ код %L са неконстантним границама не може бити објекат еквиваленције"
++
++#: fortran/resolve.c:5911
++#, no-c-format
++msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object"
++msgstr "Компонената структуре ‘%s’ код %L не може бити објекат еквиваленције"
++
++#: fortran/resolve.c:5922
++#, no-c-format
++msgid "Substring at %L has length zero"
++msgstr "Подниска код %L има нулту дужину"
++
++#: fortran/resolve.c:5965
++#, no-c-format
++msgid "PUBLIC function '%s' at %L cannot be of PRIVATE type '%s'"
++msgstr "Јавна функција ‘%s’ код %L не може бити приватног типа ‘%s’"
++
++#: fortran/resolve.c:5977
++#, no-c-format
++msgid "ENTRY '%s' at %L has no IMPLICIT type"
++msgstr "Унос ‘%s’ код %L нема имплицитан тип"
++
++#: fortran/resolve.c:6003
++#, no-c-format
++msgid "User operator procedure '%s' at %L must be a FUNCTION"
++msgstr "Процедура корисничког оператора ‘%s’ код %L мора бити функција"
++
++#: fortran/resolve.c:6009
++#, no-c-format
++msgid "User operator procedure '%s' at %L cannot be assumed character length"
++msgstr "Процедура корисничког оператора ‘%s’ код %L не може бити претпостављене знаковне дужине"
++
++#: fortran/resolve.c:6015
++#, no-c-format
++msgid "User operator procedure '%s' at %L must have at least one argument"
++msgstr "Процедура корисничког оператора ‘%s’ код %L мора имати бар један аргумент"
++
++#: fortran/resolve.c:6025
++#, no-c-format
++msgid "First argument of operator interface at %L cannot be optional"
++msgstr "Први аргумент сучеља оператора код %L не може бити опциони"
++
++#: fortran/resolve.c:6037
++#, no-c-format
++msgid "Second argument of operator interface at %L cannot be optional"
++msgstr "Други аргумент сучеља оператора код %L не може бити опциони"
++
++#: fortran/resolve.c:6041
++#, no-c-format
++msgid "Operator interface at %L must have, at most, two arguments"
++msgstr "Сучеље оператора код %L мора имати, највише, два аргумента"
++
++#: fortran/resolve.c:6074
++#, no-c-format
++msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE"
++msgstr "Садржана процедура ‘%s’ код %L у чистој процедури мора такође бити чиста"
++
++#: fortran/scanner.c:536
++#, no-c-format
++msgid "Missing '&' in continued character constant at %C"
++msgstr "Недостаје ‘&’ у настављеној знаковној константи код %C"
++
++#: fortran/scanner.c:971
++#, no-c-format
++msgid "%s:%d: file %s left but not entered"
++msgstr "%s:%d: датотека %s је напуштена, али у њу није уђено"
++
++#: fortran/scanner.c:998
++#, no-c-format
++msgid "%s:%d: Illegal preprocessor directive"
++msgstr "%s:%d: Недозвољена предобрађивачка директива"
++
++#: fortran/scanner.c:1073
++#, no-c-format
++msgid "File '%s' is being included recursively"
++msgstr "Датотека ‘%s’ се укључује рекурзивно"
++
++#: fortran/scanner.c:1088
++#, no-c-format
++msgid "Can't open file '%s'"
++msgstr "Не могу да отворим датотеку ‘%s’"
++
++#: fortran/scanner.c:1097
++#, no-c-format
++msgid "Can't open included file '%s'"
++msgstr "Не могу да отворим укључену датотеку ‘%s’"
++
++#: fortran/scanner.c:1199
++#, c-format
++msgid "%s:%3d %s\n"
++msgstr "%s:%3d %s\n"
++
++#: fortran/simplify.c:101
++#, no-c-format
++msgid "Result of %s overflows its kind at %L"
++msgstr "Резултат %s прелива своју врсту код %L"
++
++#: fortran/simplify.c:120
++#, no-c-format
++msgid "KIND parameter of %s at %L must be an initialization expression"
++msgstr "Параметар врсте за %s код %L мора бити инцијализовани израз"
++
++#: fortran/simplify.c:130
++#, no-c-format
++msgid "Invalid KIND parameter of %s at %L"
++msgstr "Неисправан параметар врсте за %s код %L"
++
++#: fortran/simplify.c:227
++#, no-c-format
++msgid "Extended ASCII not implemented: argument of ACHAR at %L must be between 0 and 127"
++msgstr "Проширени аски није имплементиран: аргумент за ACHAR код %L мора бити између 0 и 127"
++
++#: fortran/simplify.c:254
++#, no-c-format
++msgid "Argument of ACOS at %L must be between -1 and 1"
++msgstr "Аргумент у ACOS код %L мора бити између -1 и 1"
++
++#: fortran/simplify.c:276
++#, no-c-format
++msgid "Argument of ACOSH at %L must not be less than 1"
++msgstr "Аргумент у ACOSH код %L не сме бити мањи од 1"
++
++#: fortran/simplify.c:503
++#, no-c-format
++msgid "Argument of ASIN at %L must be between -1 and 1"
++msgstr "Аргумент у ASIN код %L мора бити између -1 и 1"
++
++#: fortran/simplify.c:559
++#, no-c-format
++msgid "Argument of ATANH at %L must be inside the range -1 to 1"
++msgstr "Аргумент у ATANH код %L мора бити у опсегу -1 до 1"
++
++#: fortran/simplify.c:585
++#, no-c-format
++msgid "If first argument of ATAN2 %L is zero, then the second argument must not be zero"
++msgstr "Ако је први аргумент у ATAN2 код %L нула, други не сме бити нула"
++
++#: fortran/simplify.c:667
++#, no-c-format
++msgid "Bad character in CHAR function at %L"
++msgstr "Лош знак у функцији CHAR код %L"
++
++#: fortran/simplify.c:1195
++#, no-c-format
++msgid "Argument of IACHAR at %L must be of length one"
++msgstr "Аргумент у IACHAR код %L мора бити дужине један"
++
++#: fortran/simplify.c:1235
++#, no-c-format
++msgid "Invalid second argument of IBCLR at %L"
++msgstr "Неисправан други аргумент у IBCLR код %L"
++
++#: fortran/simplify.c:1243
++#, no-c-format
++msgid "Second argument of IBCLR exceeds bit size at %L"
++msgstr "Други аргумент у IBCLR премашује битску величину код %L"
++
++#: fortran/simplify.c:1270
++#, no-c-format
++msgid "Invalid second argument of IBITS at %L"
++msgstr "Неисправан други аргумент у IBITS код %L"
++
++#: fortran/simplify.c:1276
++#, no-c-format
++msgid "Invalid third argument of IBITS at %L"
++msgstr "Неисправан трећи аргумент у IBITS код %L"
++
++#: fortran/simplify.c:1287
++#, no-c-format
++msgid "Sum of second and third arguments of IBITS exceeds bit size at %L"
++msgstr "Збир другог и трећег аргумента у IBITS премашује битску величину код %L"
++
++#: fortran/simplify.c:1335
++#, no-c-format
++msgid "Invalid second argument of IBSET at %L"
++msgstr "Неисправан други аргумент у IBSET код %L"
++
++#: fortran/simplify.c:1343
++#, no-c-format
++msgid "Second argument of IBSET exceeds bit size at %L"
++msgstr "Други аргумент у IBSET премашује битску величину код %L"
++
++#: fortran/simplify.c:1369
++#, no-c-format
++msgid "Argument of ICHAR at %L must be of length one"
++msgstr "Аргумент у ICHAR код %L мора бити дужине један"
++
++#: fortran/simplify.c:1377
++#, no-c-format
++msgid "Argument of ICHAR at %L out of range of this processor"
++msgstr "Аргумент у ICHAR код %L ван опсега овог процесора"
++
++#: fortran/simplify.c:1585
++#, no-c-format
++msgid "Argument of INT at %L is not a valid type"
++msgstr "Аргумент у INT код %L није исправног типа"
++
++#: fortran/simplify.c:1662
++#, no-c-format
++msgid "Invalid second argument of ISHFT at %L"
++msgstr "Неисправан други аргумент у ISHFT код %L"
++
++#: fortran/simplify.c:1678
++#, no-c-format
++msgid "Magnitude of second argument of ISHFT exceeds bit size at %L"
++msgstr "Магнитуда другог аргумента у ISHFT премашује битску величину код %L"
++
++#: fortran/simplify.c:1742
++#, no-c-format
++msgid "Invalid second argument of ISHFTC at %L"
++msgstr "Неисправан други аргумент у ISHFTC код %L"
++
++#: fortran/simplify.c:1752
++#, no-c-format
++msgid "Invalid third argument of ISHFTC at %L"
++msgstr "Неисправан трећи аргумент у ISHFTC код %L"
++
++#: fortran/simplify.c:1767
++#, no-c-format
++msgid "Magnitude of second argument of ISHFTC exceeds third argument at %L"
++msgstr "Магнитуда другог аргумента у ISHFT премашује трећи аргумент код %L"
++
++#: fortran/simplify.c:1837
++#, no-c-format
++msgid "Argument of KIND at %L is a DERIVED type"
++msgstr "Аргумент у KIND код %L је изведеног типа"
++
++#: fortran/simplify.c:1908
++#, no-c-format
++msgid "DIM argument at %L is out of bounds"
++msgstr "Аргумент димензије код %L је ван граница"
++
++#: fortran/simplify.c:2048
++#, no-c-format
++msgid "Argument of LOG at %L cannot be less than or equal to zero"
++msgstr "Аргумент у LOG код %L не може бити мањи или једнак нули"
++
++#: fortran/simplify.c:2061
++#, no-c-format
++msgid "Complex argument of LOG at %L cannot be zero"
++msgstr "Комплексни аргумент у LOG код %L не може бити нула"
++
++#: fortran/simplify.c:2105
++#, no-c-format
++msgid "Argument of LOG10 at %L cannot be less than or equal to zero"
++msgstr "Аргумент у LOG10 код %L не може бити мањи или једнак нули"
++
++#. Result is processor-dependent.
++#: fortran/simplify.c:2282
++#, no-c-format
++msgid "Second argument MOD at %L is zero"
++msgstr "Други аргумент у MOD код %L је нула"
++
++#. Result is processor-dependent.
++#: fortran/simplify.c:2293
++#, no-c-format
++msgid "Second argument of MOD at %L is zero"
++msgstr "Други аргумент у MOD код %L је нула"
++
++#. Result is processor-dependent. This processor just opts
++#. to not handle it at all.
++#. Result is processor-dependent.
++#: fortran/simplify.c:2341 fortran/simplify.c:2353
++#, no-c-format
++msgid "Second argument of MODULO at %L is zero"
++msgstr "Други аргумент у MODULO код %L је нула"
++
++#: fortran/simplify.c:2410
++#, no-c-format
++msgid "Second argument of NEAREST at %L may not be zero"
++msgstr "Други аргумент у NEAREST код %L не може бити нула"
++
++#: fortran/simplify.c:2718
++#, no-c-format
++msgid "Invalid second argument of REPEAT at %L"
++msgstr "Неисправан други аргумент у REPEAT код %L"
++
++#: fortran/simplify.c:2792
++#, no-c-format
++msgid "Integer too large in shape specification at %L"
++msgstr "Цео број превелик у одредници облика код %L"
++
++#: fortran/simplify.c:2802
++#, no-c-format
++msgid "Too many dimensions in shape specification for RESHAPE at %L"
++msgstr "Превише димензија у одредници облика за RESHAPE код %L"
++
++#: fortran/simplify.c:2810
++#, no-c-format
++msgid "Shape specification at %L cannot be negative"
++msgstr "Одредница облика код %L не може бити негативна"
++
++#: fortran/simplify.c:2820
++#, no-c-format
++msgid "Shape specification at %L cannot be the null array"
++msgstr "Одредница облика код %L не може бити нулти низ"
++
++#: fortran/simplify.c:2844
++#, no-c-format
++msgid "ORDER parameter of RESHAPE at %L is not the same size as SHAPE parameter"
++msgstr "Параметар ORDER у RESHAPE код %L није исте величине као параметар SHAPE"
++
++#: fortran/simplify.c:2851
++#, no-c-format
++msgid "Error in ORDER parameter of RESHAPE at %L"
++msgstr "Грешка у параметру ORDER у RESHAPE код %L"
++
++#: fortran/simplify.c:2861
++#, no-c-format
++msgid "ORDER parameter of RESHAPE at %L is out of range"
++msgstr "Параметар ORDER у RESHAPE код %L је ван опсега"
++
++#: fortran/simplify.c:2870
++#, no-c-format
++msgid "Invalid permutation in ORDER parameter at %L"
++msgstr "Неисправна пермутација у параметру ORDER код %L"
++
++#: fortran/simplify.c:2927
++#, no-c-format
++msgid "PAD parameter required for short SOURCE parameter at %L"
++msgstr "Неопходан је параметар PAD за кратки параметар SOURCE код %L"
++
++#: fortran/simplify.c:3061
++#, no-c-format
++msgid "Result of SCALE overflows its kind at %L"
++msgstr "Резултат SCALE прелива своју врсту код %L"
++
++#: fortran/simplify.c:3642
++#, no-c-format
++msgid "Argument of SQRT at %L has a negative value"
++msgstr "Аргумент у SQRT код %L има негативну вредност"
++
++#: fortran/symbol.c:111
++#, no-c-format
++msgid "Duplicate IMPLICIT NONE statement at %C"
++msgstr "Двострука наредба IMPLICIT NONE код %C"
++
++#: fortran/symbol.c:151
++#, no-c-format
++msgid "Letter '%c' already set in IMPLICIT statement at %C"
++msgstr "Слово ‘%c’ већ постављено у наредби IMPLICIT код %C"
++
++#: fortran/symbol.c:173
++#, no-c-format
++msgid "Cannot specify IMPLICIT at %C after IMPLICIT NONE"
++msgstr "Не може се навести IMPLICIT код %C после IMPLICIT NONE"
++
++#: fortran/symbol.c:184
++#, no-c-format
++msgid "Letter %c already has an IMPLICIT type at %C"
++msgstr "Слово %c већ има имплицитан тип код %C"
++
++#: fortran/symbol.c:232
++#, no-c-format
++msgid "Symbol '%s' at %L has no IMPLICIT type"
++msgstr "Симбол ‘%s’ код %L нема имплицитан тип"
++
++#: fortran/symbol.c:304
++#, no-c-format
++msgid "%s attribute not allowed in BLOCK DATA program unit at %L"
++msgstr "Атрибут %s није дозвољен у јединици програма BLOCK DATA код %L"
++
++#: fortran/symbol.c:506 fortran/symbol.c:997
++#, no-c-format
++msgid "%s attribute conflicts with %s attribute at %L"
++msgstr "Атрибут %s коси се са атрибутом %s код %L"
++
++#: fortran/symbol.c:509
++#, no-c-format
++msgid "%s attribute conflicts with %s attribute in '%s' at %L"
++msgstr "Атрибут %s коси се са атрибутом %s у ‘%s’ код %L"
++
++#: fortran/symbol.c:551
++#, no-c-format
++msgid "Cannot change attributes of USE-associated symbol at %L"
++msgstr "Не могу се променити атрибути USE-придруженог симбола код %L"
++
++#: fortran/symbol.c:554
++#, no-c-format
++msgid "Cannot change attributes of USE-associated symbol %s at %L"
++msgstr "Не могу се променити атрибути USE-придруженог симбола %s код %L"
++
++#: fortran/symbol.c:576
++#, no-c-format
++msgid "Cannot change attributes of symbol at %L after it has been used"
++msgstr "Не могу се променити атрибути симбола код %L пошто је употребљен"
++
++#: fortran/symbol.c:592
++#, no-c-format
++msgid "Duplicate %s attribute specified at %L"
++msgstr "Двоструки атрибут %S наведен код %L"
++
++#: fortran/symbol.c:733
++#, no-c-format
++msgid "Cray Pointee at %L appears in multiple pointer() statements."
++msgstr "Крејов показивани код %L појављује се у више наредби pointer()"
++
++#: fortran/symbol.c:765
++#, no-c-format
++msgid "SAVE attribute at %L cannot be specified in a PURE procedure"
++msgstr "Атрибут SAVE код %L не може бити наведен у чистој процедури"
++
++#: fortran/symbol.c:773
++#, no-c-format
++msgid "Duplicate SAVE attribute specified at %L"
++msgstr "Двоструки атрибут SAVE наведен код %L"
++
++#: fortran/symbol.c:1027
++#, no-c-format
++msgid "%s procedure at %L is already declared as %s procedure"
++msgstr "Процедура %s код %L је већ декларисана као процедура %s"
++
++#: fortran/symbol.c:1062
++#, no-c-format
++msgid "INTENT (%s) conflicts with INTENT(%s) at %L"
++msgstr "Намера-%s коси се са намером-%s код %L"
++
++#: fortran/symbol.c:1085
++#, no-c-format
++msgid "ACCESS specification at %L was already specified"
++msgstr "Одредница ACCESS код %L је већ наведена "
++
++#: fortran/symbol.c:1105
++#, no-c-format
++msgid "Symbol '%s' at %L already has an explicit interface"
++msgstr "Симбол ‘%s’ код %L већ има експлицитно сучеље"
++
++#: fortran/symbol.c:1133
++#, no-c-format
++msgid "Symbol '%s' at %L already has basic type of %s"
++msgstr "Симбол ‘%s’ код %L већ има основни тип %s"
++
++#: fortran/symbol.c:1145
++#, no-c-format
++msgid "Symbol '%s' at %L cannot have a type"
++msgstr "Симбол ‘%s’ код %L не може имати тип"
++
++#: fortran/symbol.c:1283
++#, no-c-format
++msgid "Component '%s' at %C already declared at %L"
++msgstr "Компонента ‘%s’ код %C већ је декларисана код %L"
++
++#: fortran/symbol.c:1361
++#, no-c-format
++msgid "Symbol '%s' at %C is ambiguous"
++msgstr "Двосмислен симбол ‘%s’ код %C"
++
++#: fortran/symbol.c:1393
++#, no-c-format
++msgid "Derived type '%s' at %C is being used before it is defined"
++msgstr "Изведени тип ‘%s’ код %C користи се пре него што је дефинисан"
++
++#: fortran/symbol.c:1421
++#, no-c-format
++msgid "'%s' at %C is not a member of the '%s' structure"
++msgstr "‘%s’ код %C није члан структуре ‘%s’"
++
++#: fortran/symbol.c:1427
++#, no-c-format
++msgid "Component '%s' at %C is a PRIVATE component of '%s'"
++msgstr "Компонента ‘%s’ код %C је приватна компонента у ‘%s’"
++
++#: fortran/symbol.c:1571
++#, no-c-format
++msgid "Duplicate statement label %d at %L and %L"
++msgstr "Двострука етикета наредбе %d код %L и %L"
++
++#: fortran/symbol.c:1581
++#, no-c-format
++msgid "Label %d at %C already referenced as branch target"
++msgstr "Етикета %d код %C је већ поменута као циљ гранања"
++
++#: fortran/symbol.c:1590
++#, no-c-format
++msgid "Label %d at %C already referenced as a format label"
++msgstr "Етикета %d код %C је већ поменута код етикета формата"
++
++#: fortran/symbol.c:1632
++#, no-c-format
++msgid "Label %d at %C previously used as a FORMAT label"
++msgstr "Етикета %d код %C је претходно употребљена као етикета формата"
++
++#: fortran/symbol.c:1640
++#, no-c-format
++msgid "Label %d at %C previously used as branch target"
++msgstr "Етикета %d код %C је претходно употребљена као циљ гранања"
++
++#: fortran/symbol.c:1893
++#, no-c-format
++msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'"
++msgstr "Име ‘%s’ код %C је двосмислен упућивач на ‘%s’ из модула ‘%s’"
++
++#: fortran/symbol.c:1896
++#, no-c-format
++msgid "Name '%s' at %C is an ambiguous reference to '%s' from current program unit"
++msgstr "Име ‘%s’ код %C је двосмислен упућивач на ‘%s’ из текуће програмске јединице"
++
++#. Symbol is from another namespace.
++#: fortran/symbol.c:2033
++#, no-c-format
++msgid "Symbol '%s' at %C has already been host associated"
++msgstr "Симбол ‘%s’ код %C је већ придружен домаћину"
++
++#: fortran/trans-common.c:360
++#, no-c-format
++msgid "Named COMMON block '%s' at %L shall be of the same size"
++msgstr "Именовани заједнички блок ‘%s’ код %L ће бити исте величине"
++
++#: fortran/trans-common.c:658
++#, no-c-format
++msgid "Bad array reference at %L"
++msgstr "Лош упућивач низа код %L"
++
++#: fortran/trans-common.c:666
++#, no-c-format
++msgid "Illegal reference type at %L as EQUIVALENCE object"
++msgstr "Недозвољен тип упућивача код %L као објекат еквиваленције"
++
++#: fortran/trans-common.c:706
++#, no-c-format
++msgid "Inconsistent equivalence rules involving '%s' at %L and '%s' at %L"
++msgstr "Неусаглашена правила еквиваленције у вези са ‘%s’ код %L и ‘%s’ код %L"
++
++#. Aligning this field would misalign a previous field.
++#: fortran/trans-common.c:839
++#, no-c-format
++msgid "The equivalence set for variable '%s' declared at %L violates alignment requirents"
++msgstr "Скуп еквиваленције за променљиву ‘%s’ декларисан код %L крши захтеве равнања"
++
++#: fortran/trans-common.c:904
++#, no-c-format
++msgid "Equivalence for '%s' does not match ordering of COMMON '%s' at %L"
++msgstr "Еквиваленција за ‘%s’ не одговара поретку заједничког ‘%s’ код %L"
++
++#: fortran/trans-common.c:919
++#, no-c-format
++msgid "The equivalence set for '%s' cause an invalid extension to COMMON '%s' at %L"
++msgstr "Скуп еквиваленције за ‘%s’ изазива неисправно проширење до заједничког ‘%s’ код %L"
++
++#. The required offset conflicts with previous alignment
++#. requirements.  Insert padding immediately before this
++#. segment.
++#: fortran/trans-common.c:930
++#, no-c-format
++msgid "Padding of %d bytes required before '%s' in COMMON '%s' at %L"
++msgstr "Неопходно уметање %d бајтова пре ‘%s’ у заједничком ‘%s’ код %L"
++
++#: fortran/trans-common.c:956
++#, no-c-format
++msgid "COMMON '%s' at %L requires %d bytes of padding at start"
++msgstr "Заједничко ‘%s’ код %L затева %d уметнутих бајтова на почетку"
++
++#: fortran/trans-const.c:158
++msgid "Array bound mismatch"
++msgstr "Неслагање граница низа"
++
++#: fortran/trans-const.c:161
++msgid "Array reference out of bounds"
++msgstr "Упућивач низа ван граница"
++
++#: fortran/trans-const.c:164
++msgid "Incorrect function return value"
++msgstr "Нетачна вредност повратка из функције"
++
++#: fortran/trans-decl.c:441
++#, no-c-format
++msgid "storage size not known"
++msgstr "величина складишта није позната"
++
++#: fortran/trans-decl.c:448
++#, no-c-format
++msgid "storage size not constant"
++msgstr "величина складишта није константна"
++
++#: fortran/trans-io.c:541
++msgid "Assigned label is not a format label"
++msgstr "Додељена етикета није етикета формата"
++
++#: fortran/trans-io.c:982
++#, no-c-format
++msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers."
++msgstr "Наредба INQUIRE код %L не може садржати и наводиоце FILE и UNIT"
++
++#: fortran/trans-stmt.c:163
++msgid "Assigned label is not a target label"
++msgstr "Додељена етикета није етикета циља"
++
++#. Check the label list.
++#: fortran/trans-stmt.c:179
++msgid "Assigned label is not in the list"
++msgstr "Додељена етикета није у листи"
++
++#: fortran/trans-stmt.c:319
++#, no-c-format
++msgid "An alternate return at %L without a * dummy argument"
++msgstr "Алтернативан повратак код %L без лажног аргумента *"
++
++#. FIXME: i18n bug here.  Order of prints should not be
++#. fixed.
++#: java/gjavah.c:916
++#, c-format
++msgid "ignored method '"
++msgstr "игнорисан метод ‘"
++
++#: java/gjavah.c:918
++#, c-format
++msgid "' marked virtual\n"
++msgstr "’ означен виртуелним\n"
++
++#: java/gjavah.c:2356
++#, c-format
++msgid "Try '"
++msgstr "Покушајте ‘"
++
++#: java/gjavah.c:2356
++#, c-format
++msgid " --help' for more information.\n"
++msgstr " --help’ за више информација.\n"
++
++#: java/gjavah.c:2363
++#, c-format
++msgid "Usage: "
++msgstr "Употреба: "
++
++#: java/gjavah.c:2363
++#, c-format
++msgid ""
++" [OPTION]... CLASS...\n"
++"\n"
++msgstr ""
++" [ОПЦИЈЕ]... КЛАСА...\n"
++"\n"
++
++#: java/gjavah.c:2364
++#, c-format
++msgid ""
++"Generate C or C++ header files from .class files\n"
++"\n"
++msgstr ""
++"Стварај Ц или Ц++ заглавља према класним датотекама\n"
++"\n"
++
++#: java/gjavah.c:2365
++#, c-format
++msgid "  -stubs                  Generate an implementation stub file\n"
++msgstr "  -stubs                  Створи датотеку клице имплементације\n"
++
++#: java/gjavah.c:2366
++#, c-format
++msgid "  -jni                    Generate a JNI header or stub\n"
++msgstr "  -jni                    Створи ЈНИ заглавље или клицу\n"
++
++#: java/gjavah.c:2367
++#, c-format
++msgid "  -force                  Always overwrite output files\n"
++msgstr "  -force                  Увек пребрисуј излазне датотеке\n"
++
++#: java/gjavah.c:2368
++#, c-format
++msgid "  -old                    Unused compatibility option\n"
++msgstr "  -old                    Неупотребљена опција сагласности\n"
++
++#: java/gjavah.c:2369
++#, c-format
++msgid "  -trace                  Unused compatibility option\n"
++msgstr "  -trace                  Неупотребљена опција сагласности\n"
++
++#: java/gjavah.c:2370
++#, c-format
++msgid "  -J OPTION               Unused compatibility option\n"
++msgstr "  -J ОПЦИЈА               Неупотребљена опција сагласности\n"
++
++#: java/gjavah.c:2372
++#, c-format
++msgid "  -add TEXT               Insert TEXT into class body\n"
++msgstr "  -add ТЕКСТ              Уметни ТЕКСТ у тело класе\n"
++
++#: java/gjavah.c:2373
++#, c-format
++msgid "  -append TEXT            Insert TEXT after class declaration\n"
++msgstr "  -append ТЕКСТ           Уметни ТЕКСТ после декларације класе\n"
++
++#: java/gjavah.c:2374
++#, c-format
++msgid "  -friend TEXT            Insert TEXT as 'friend' declaration\n"
++msgstr "  -friend ТЕКСТ           Уметни текст као декларацију пријатеља\n"
++
++#: java/gjavah.c:2375
++#, c-format
++msgid "  -prepend TEXT           Insert TEXT before start of class\n"
++msgstr "  -prepend ТЕКСТ          Уметни ТЕКСТ пре почетка класе\n"
++
++#: java/gjavah.c:2377 java/jcf-dump.c:912
++#, c-format
++msgid "  --classpath PATH        Set path to find .class files\n"
++msgstr "  --classpath ПУТАЊА      Постави путању за тражење класних датотека\n"
++
++#: java/gjavah.c:2378 java/jcf-dump.c:913
++#, c-format
++msgid "  -IDIR                   Append directory to class path\n"
++msgstr "  -IДИР                   Прикачи директоријум класној путањи\n"
++
++#: java/gjavah.c:2379 java/jcf-dump.c:914
++#, c-format
++msgid "  --bootclasspath PATH    Override built-in class path\n"
++msgstr "  --bootclasspath ПУТАЊА  Потисни уграђену класну путању\n"
++
++#: java/gjavah.c:2380 java/jcf-dump.c:915
++#, c-format
++msgid "  --extdirs PATH          Set extensions directory path\n"
++msgstr "  --extdirs ПУТАЊА        Постави путању директоријума проширења\n"
++
++#: java/gjavah.c:2381
++#, c-format
++msgid "  -d DIRECTORY            Set output directory name\n"
++msgstr "  -d ДИРЕКТОРИЈУМ         Постави име излазног директоријума\n"
++
++#: java/gjavah.c:2382 java/jcf-dump.c:916 java/jv-scan.c:115
++#, c-format
++msgid "  -o FILE                 Set output file name\n"
++msgstr "  -o ДАТОТЕКА             Постави име излазне датотеке\n"
++
++#: java/gjavah.c:2383
++#, c-format
++msgid "  -td DIRECTORY           Set temporary directory name\n"
++msgstr "  -td ДИРЕКТОРИЈУМ        Постави име привременог директоријума\n"
++
++#: java/gjavah.c:2385 java/jcf-dump.c:918 java/jv-scan.c:117
++#, c-format
++msgid "  --help                  Print this help, then exit\n"
++msgstr "  --help                  Испиши ову помоћ, затим изађи\n"
++
++#: java/gjavah.c:2386 java/jcf-dump.c:919 java/jv-scan.c:118
++#, c-format
++msgid "  --version               Print version number, then exit\n"
++msgstr "  --version               Испиши број верзије, затим изађи\n"
++
++#: java/gjavah.c:2387 java/jcf-dump.c:920
++#, c-format
++msgid "  -v, --verbose           Print extra information while running\n"
++msgstr "  -v, --verbose           Исписуј додатне податке у току рада\n"
++
++#: java/gjavah.c:2389
++#, c-format
++msgid ""
++"  -M                      Print all dependencies to stdout;\n"
++"                             suppress ordinary output\n"
++msgstr ""
++"  -M                      Исписуј све зависности на стдиз;\n"
++"                             сузбиј уобичајен излаз\n"
++
++#: java/gjavah.c:2391
++#, c-format
++msgid ""
++"  -MM                     Print non-system dependencies to stdout;\n"
++"                             suppress ordinary output\n"
++msgstr ""
++"  -MM                     Исписуј несистемске зависности на стдиз;\n"
++"                             сузбиј уобичајен излаз\n"
++
++#: java/gjavah.c:2393
++#, c-format
++msgid "  -MD                     Print all dependencies to stdout\n"
++msgstr "  -MD                     Исписуј све зависности на стдиз\n"
++
++#: java/gjavah.c:2394
++#, c-format
++msgid "  -MMD                    Print non-system dependencies to stdout\n"
++msgstr "  -MMD                    Исписуј све несистемске зависности на стдиз\n"
++
++#: java/gjavah.c:2397 java/jcf-dump.c:922 java/jv-scan.c:120
++#, c-format
++msgid ""
++"For bug reporting instructions, please see:\n"
++"%s.\n"
++msgstr ""
++"За упутства о пријављивању грешака, погледајте:\n"
++"%s.\n"
++
++#: java/gjavah.c:2581
++#, c-format
++msgid "Processing %s\n"
++msgstr "Обрађујем %s\n"
++
++#: java/gjavah.c:2591
++#, c-format
++msgid "Found in %s\n"
++msgstr "Нађено у %s\n"
++
++#: java/jcf-dump.c:829
++#, c-format
++msgid "Not a valid Java .class file.\n"
++msgstr "Није исправна јаванска класна датотека.\n"
++
++#: java/jcf-dump.c:835
++#, c-format
++msgid "error while parsing constant pool\n"
++msgstr "грешка при рашчлањивању депоа константи\n"
++
++#: java/jcf-dump.c:841 java/jcf-parse.c:759
++#, gcc-internal-format
++msgid "error in constant pool entry #%d\n"
++msgstr "грешка у депоу константи, унос #%d\n"
++
++#: java/jcf-dump.c:851
++#, c-format
++msgid "error while parsing fields\n"
++msgstr "грешка при рашчлањивању поља\n"
++
++#: java/jcf-dump.c:857
++#, c-format
++msgid "error while parsing methods\n"
++msgstr "грешка при рашчлањивању метода\n"
++
++#: java/jcf-dump.c:863
++#, c-format
++msgid "error while parsing final attributes\n"
++msgstr "грешка при рашчлањивању коначних атрибута\n"
++
++#: java/jcf-dump.c:900
++#, c-format
++msgid "Try 'jcf-dump --help' for more information.\n"
++msgstr "Покушајте ‘jcf-dump --help’ за више података.\n"
++
++#: java/jcf-dump.c:907
++#, c-format
++msgid ""
++"Usage: jcf-dump [OPTION]... CLASS...\n"
++"\n"
++msgstr ""
++"Употреба: jcf-dump [ОПЦИЈА]... КЛАСА...\n"
++"\n"
++
++#: java/jcf-dump.c:908
++#, c-format
++msgid ""
++"Display contents of a class file in readable form.\n"
++"\n"
++msgstr ""
++"Приказује садржај класне датотеке у читљивом облику.\n"
++"\n"
++
++#: java/jcf-dump.c:909
++#, c-format
++msgid "  -c                      Disassemble method bodies\n"
++msgstr "  -c                      Растави тела метода\n"
++
++#: java/jcf-dump.c:910
++#, c-format
++msgid "  --javap                 Generate output in 'javap' format\n"
++msgstr "  --javap                 Стварај излаз као из javap\n"
++
++#: java/jcf-dump.c:950 java/jcf-dump.c:1018
++#, c-format
++msgid "jcf-dump: no classes specified\n"
++msgstr "jcf-dump: није наведена ниједна класа\n"
++
++#: java/jcf-dump.c:1038
++#, c-format
++msgid "Cannot open '%s' for output.\n"
++msgstr "Не могу да отворим ‘%s’ за излаз.\n"
++
++#: java/jcf-dump.c:1084
++#, c-format
++msgid "bad format of .zip/.jar archive\n"
++msgstr "лош формат ЗИП/ЈАР архиве\n"
++
++#: java/jcf-dump.c:1202
++#, c-format
++msgid "Bad byte codes.\n"
++msgstr "Лоши бајткодови.\n"
++
++#: java/jv-scan.c:100
++#, c-format
++msgid "Try 'jv-scan --help' for more information.\n"
++msgstr "Покушајте ‘jv-scan --help’ за више података.\n"
++
++#: java/jv-scan.c:107
++#, c-format
++msgid ""
++"Usage: jv-scan [OPTION]... FILE...\n"
++"\n"
++msgstr ""
++"Употреба: jv-scan [ОПЦИЈА]... ДАТОТЕКА...\n"
++"\n"
++
++#: java/jv-scan.c:108
++#, c-format
++msgid ""
++"Print useful information read from Java source files.\n"
++"\n"
++msgstr ""
++"Исписује корисне податке исчитане из јаванских изворних датотека.\n"
++"\n"
++
++#: java/jv-scan.c:109
++#, c-format
++msgid "  --no-assert             Don't recognize the assert keyword\n"
++msgstr "  --no-assert             Не узимај у обзир кључну реч assert\n"
++
++#: java/jv-scan.c:110
++#, c-format
++msgid "  --complexity            Print cyclomatic complexity of input file\n"
++msgstr "  --complexity            Испиши цикломатичну сложеност улазне датотеке\n"
++
++#: java/jv-scan.c:111
++#, c-format
++msgid "  --encoding NAME         Specify encoding of input file\n"
++msgstr "  --encoding ИМЕ          Задај кодирање улазне датотеке\n"
++
++#: java/jv-scan.c:112
++#, c-format
++msgid "  --print-main            Print name of class containing 'main'\n"
++msgstr "  --print-main            Испиши име класе која садржи main\n"
++
++#: java/jv-scan.c:113
++#, c-format
++msgid "  --list-class            List all classes defined in file\n"
++msgstr "  --list-class            Излистај све класе дефинисане у датотеци\n"
++
++#: java/jv-scan.c:114
++#, c-format
++msgid "  --list-filename         Print input filename when listing class names\n"
++msgstr "  --list-filename         Испиши име улазне датотеке при испису имена класа\n"
++
++#: java/jv-scan.c:257
++#, c-format
++msgid "%s: error: "
++msgstr "%s: грешка: "
++
++#: java/jv-scan.c:269 java/jv-scan.c:280
++#, c-format
++msgid "%s: warning: "
++msgstr "%s: упозорење: "
++
++#: java/jvgenmain.c:48
++#, c-format
++msgid "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n"
++msgstr "Употреба: %s [ОПЦИЈЕ]... ИМЕКЛАСЕmain [ИЗЛАЗНА_ДАТОТЕКА]\n"
++
++#: java/jvgenmain.c:101
++#, c-format
++msgid "%s: Cannot open output file: %s\n"
++msgstr "%s: Не могу да отворим излазну датотеку: %s\n"
++
++#: java/jvgenmain.c:138
++#, c-format
++msgid "%s: Failed to close output file %s\n"
++msgstr "%s: Нисам успео да затворим излазну датотеку %s\n"
++
++#: java/jvspec.c:420
++#, c-format
++msgid "can't specify '-D' without '--main'\n"
++msgstr "не може се задати ‘-D’ без ‘--main’\n"
++
++#: java/jvspec.c:423
++#, c-format
++msgid "'%s' is not a valid class name"
++msgstr "‘%s’ није исправно име класе"
++
++#: java/jvspec.c:429
++#, c-format
++msgid "--resource requires -o"
++msgstr "--resource захтева -o"
++
++#: java/jvspec.c:443
++#, c-format
++msgid "cannot specify both -C and -o"
++msgstr "не могу се задати и -C и -o"
++
++#: java/jvspec.c:455
++#, c-format
++msgid "cannot create temporary file"
++msgstr "не могу да направим привремену датотеку"
++
++#: java/jvspec.c:483
++#, c-format
++msgid "using both @FILE with multiple files not implemented"
++msgstr "коришћење и @FILE и вишеструких датотека није имплементирано"
++
++#: java/jvspec.c:546
++#, c-format
++msgid "cannot specify 'main' class when not linking"
++msgstr "не може се задати главна класа када се не повезује"
++
++#: config/mcore/mcore.h:57
++msgid "the m210 does not have little endian support"
++msgstr "М210 нема подршку мале крајности"
++
++#: config/lynx.h:71
++msgid "cannot use mthreads and mlegacy-threads together"
++msgstr "не могу се заједно користити mthreads и mlegacy-threads"
++
++#: config/lynx.h:96
++msgid "cannot use mshared and static together"
++msgstr "не могу се заједно користити mshared и static"
++
++#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22
++#: config/sparc/sol2-bi.h:169 config/sparc/sol2-bi.h:174
++msgid "does not support multilib"
++msgstr "не подржава вишебиб"
++
++#: config/mips/r3900.h:35
++msgid "-mhard-float not supported"
++msgstr "-mhard-float није подржано"
++
++#: config/mips/r3900.h:37
++msgid "-msingle-float and -msoft-float cannot both be specified"
++msgstr "не могу се задати и -msingle-float и -msoft-float"
++
++#: config/i386/cygwin.h:29
++msgid "mno-cygwin and mno-win32 are not compatible"
++msgstr "mno-cygwin и mno-win32 нису сагласни"
++
++#: config/i386/cygwin.h:70 config/i386/mingw32.h:58
++msgid "shared and mdll are not compatible"
++msgstr "shared и mdll нису сагласни"
++
++#: config/vax/netbsd-elf.h:42
++msgid "the -shared option is not currently supported for VAX ELF"
++msgstr "опција -shared тренутно није подржана за ВАКСов ЕЛФ"
++
++#: config/arm/arm.h:141
++msgid "-msoft-float and -mhard_float may not be used together"
++msgstr "-msoft-float и -mhard_float не могу се користити заједно"
++
++#: config/arm/arm.h:143
++msgid "-mbig-endian and -mlittle-endian may not be used together"
++msgstr "-mbig-endian и -mlittle-endian не могу се користити заједно"
++
++#: config/arc/arc.h:62 config/mips/mips.h:849
++msgid "may not use both -EB and -EL"
++msgstr "не могу се навести и -EB и -EL"
++
++#: config/i386/sco5.h:189
++msgid "-pg not supported on this platform"
++msgstr "-pg није подржано на овој платформи"
++
++#: config/i386/sco5.h:190
++msgid "-p and -pp specified - pick one"
++msgstr "задато је -p и -pp — изаберите једно"
++
++#: config/i386/sco5.h:264
++msgid "-G and -static are mutually exclusive"
++msgstr "-G и -static су међусобно искључиви"
++
++#: config/rs6000/darwin.h:105
++msgid " conflicting code gen style switches are used"
++msgstr " употребљени су сукобљени прекидачи стила генерисања кôда"
++
++#: ada/lang-specs.h:34 gcc.c:794 java/jvspec.c:80
++msgid "-pg and -fomit-frame-pointer are incompatible"
++msgstr "-pg и -fomit-frame-pointer нису сагласни"
++
++#: ada/lang-specs.h:35
++msgid "-c or -S required for Ada"
++msgstr "потребно је -c или -S за аду"
++
++#: gcc.c:767
++msgid "GCC does not support -C or -CC without -E"
++msgstr "ГЦЦ не подржава -C или -CC без -E"
++
++#: gcc.c:961
++msgid "-E or -x required when input is from standard input"
++msgstr "потребно је -E или -x када је улаз са стандардног улаза"
++
++#: config/s390/tpf.h:125
++msgid "static is not supported on TPF-OS"
++msgstr "static није подржано на ТПФ-ОСу"
++
++#: config/sh/sh.h:460
++msgid "SH2a does not support little-endian"
++msgstr "СХ2а не подржава малу крајност"
++
++#: config/sparc/linux64.h:206 config/sparc/linux64.h:217
++#: config/sparc/netbsd-elf.h:126 config/sparc/netbsd-elf.h:145
++#: config/sparc/sol2-bi.h:197 config/sparc/sol2-bi.h:207
++msgid "may not use both -m32 and -m64"
++msgstr "не могу се навести и -m32 и -m64"
++
++#: config/vxworks.h:66
++msgid "-Xbind-now and -Xbind-lazy are incompatible"
++msgstr "-Xbind-now и -Xbind-lazy нису сагласни"
++
++#: config/vax/vax.h:50 config/vax/vax.h:51
++msgid "profiling not supported with -mg\n"
++msgstr "профилисање није подржано уз -mg\n"
++
++#: config/i386/nwld.h:35
++msgid "Static linking is not supported.\n"
++msgstr "Статичко повезивање није подржано.\n"
++
++#: java/lang-specs.h:34
++msgid "-fjni and -femit-class-files are incompatible"
++msgstr "-fjni и -femit-class-files нису сагласни"
++
++#: java/lang-specs.h:35
++msgid "-fjni and -femit-class-file are incompatible"
++msgstr "-fjni и -femit-class-file нису сагласни"
++
++#: java/lang-specs.h:36 java/lang-specs.h:37
++msgid "-femit-class-file should used along with -fsyntax-only"
++msgstr "-femit-class-file треба користити само уз -fsyntax-only"
++
++#: config/darwin.h:239
++msgid "-current_version only allowed with -dynamiclib"
++msgstr "-current_version дозвољено само са -dynamiclib"
++
++#: config/darwin.h:241
++msgid "-install_name only allowed with -dynamiclib"
++msgstr "-install_name дозвољено само са -dynamiclib"
++
++#: config/darwin.h:246
++msgid "-bundle not allowed with -dynamiclib"
++msgstr "-bundle није дозвољено са -dynamiclib"
++
++#: config/darwin.h:247
++msgid "-bundle_loader not allowed with -dynamiclib"
++msgstr "-bundle_loader није дозвољено са -dynamiclib"
++
++#: config/darwin.h:248
++msgid "-client_name not allowed with -dynamiclib"
++msgstr "-client_name није дозвољено са -dynamiclib"
++
++#: config/darwin.h:253
++msgid "-force_flat_namespace not allowed with -dynamiclib"
++msgstr "-force_flat_namespace није дозвољено са -dynamiclib"
++
++#: config/darwin.h:255
++msgid "-keep_private_externs not allowed with -dynamiclib"
++msgstr "-keep_private_externs није дозвољено са -dynamiclib"
++
++#: config/darwin.h:256
++msgid "-private_bundle not allowed with -dynamiclib"
++msgstr "-private_bundle није дозвољено са -dynamiclib"
++
++#: java/lang.opt:66
++msgid "Warn if a deprecated compiler feature, class, method, or field is used"
++msgstr "Упозори ако се употреби превазиђена могућност компилатора, класа, метод или поље"
++
++#: java/lang.opt:70
++msgid "Warn if deprecated empty statements are found"
++msgstr "Упозори ако се нађе превазиђена празна наредба"
++
++#: java/lang.opt:74
++msgid "Warn if .class files are out of date"
++msgstr "Упозори ако су класне датотеке застареле"
++
++#: java/lang.opt:78
++msgid "Warn if modifiers are specified when not necessary"
++msgstr "Упозори ако су модификатори задати када није неопходно"
++
++#: java/lang.opt:82
++msgid "Deprecated; use --classpath instead"
++msgstr "Непрепоручљиво; користите --classpath"
++
++#: java/lang.opt:86
++msgid "Permit the use of the assert keyword"
++msgstr "Дозволи употребу кључне речи assert"
++
++#: java/lang.opt:108
++msgid "Replace system path"
++msgstr "Замени системску путању"
++
++#: java/lang.opt:112
++msgid "Generate checks for references to NULL"
++msgstr "Стварај провере за упућиваче на NULL"
++
++#: java/lang.opt:116
++msgid "Set class path"
++msgstr "Постави класну путању"
++
++#: java/lang.opt:123
++msgid "Output a class file"
++msgstr "Испиши класну датотеку"
++
++#: java/lang.opt:127
++msgid "Alias for -femit-class-file"
++msgstr "Други назив за -femit-class-file"
++
++#: java/lang.opt:131
++msgid "Choose input encoding (defaults from your locale)"
++msgstr "Изаберите улазно кодирање (подразумевано из локалитета)"
++
++#: java/lang.opt:135
++msgid "Set the extension directory path"
++msgstr "Постави путању директоријума проширења"
++
++#: java/lang.opt:139
++msgid "Input file is a file with a list of filenames to compile"
++msgstr "Улазна датотека је датотека са листом имена за компиловање"
++
++#: java/lang.opt:143
++msgid "Always check for non gcj generated classes archives"
++msgstr "Увек проверавај да ли су архиве класа створене ГЦЈом"
++
++#: java/lang.opt:147
++msgid "Assume the runtime uses a hash table to map an object to its synchronization structure"
++msgstr "Претпостави да машина користи хрпу да мапира објекат у своју синхронизациону структуру"
++
++#: java/lang.opt:151
++msgid "Use offset tables for virtual method calls"
++msgstr "Користи табеле помака за позиве виртуелних метода"
++
++#: java/lang.opt:158
++msgid "Assume native functions are implemented using JNI"
++msgstr "Претпостави да су урођене функције имплементиране ЈНИјем"
++
++#: java/lang.opt:162
++msgid "Enable optimization of static class initialization code"
++msgstr "Укључи оптимизацију статичког кода за успостављање класе"
++
++#: java/lang.opt:169
++msgid "Enable assignability checks for stores into object arrays"
++msgstr "Укључи провере додељивости за сладиштења у објектне низове"
++
++#: java/lang.opt:173
++msgid "Generate code for the Boehm GC"
++msgstr "Створи кôд за ГЦ Боем"
++
++#: java/lang.opt:177
++msgid "Call a library routine to do integer divisions"
++msgstr "Зови библиотечку рутину за целобројна дељења"
++
++#: java/lang.opt:181
++msgid "Generated should be loaded by bootstrap loader"
++msgstr "Створено треба учитавати самоуздижућим учитавачем"
++
++#: ada/lang.opt:74
++msgid "Specify options to GNAT"
++msgstr "Наведите опције ГНАТу"
++
++#: fortran/lang.opt:30
++msgid "Add a directory for INCLUDE and MODULE searching"
++msgstr "Додај директоријум за претрагу укључивања и модула"
++
++#: fortran/lang.opt:34
++msgid "Put MODULE files in 'directory'"
++msgstr "Стави датотеке модула у дати директоријум"
++
++#: fortran/lang.opt:42
++msgid "Warn about possible aliasing of dummy arguments"
++msgstr "Упозори на могућу дволичност лажних аргумената"
++
++#: fortran/lang.opt:46
++msgid "Warn about missing ampersand in continued character literals"
++msgstr "Упозори на недостајуће & у настављеним дословним нискама"
++
++#: fortran/lang.opt:50
++msgid "Warn about implicit conversion"
++msgstr "Упозори на имплицитно претварање"
++
++#: fortran/lang.opt:54
++msgid "Warn about calls with implicit interface"
++msgstr "Упозори на позиве са имплицитним сучељима"
++
++#: fortran/lang.opt:58
++msgid "Warn about truncated source lines"
++msgstr "Упозори на одсечене изворне линије"
++
++#: fortran/lang.opt:62
++msgid "Warn about usage of non-standard intrinsics"
++msgstr "Упозори на употребу нестандардних сопствених"
++
++#: fortran/lang.opt:66
++msgid "Warn about \"suspicious\" constructs"
++msgstr "Упозори на „сумњиве“ конструкције"
++
++#: fortran/lang.opt:70
++msgid "Warn about underflow of numerical constant expressions"
++msgstr "Упозори на подливање бројевних константних израза"
++
++#: fortran/lang.opt:74 common.opt:162
++msgid "Warn when a label is unused"
++msgstr "Упозори када се етикета не користи"
++
++#: fortran/lang.opt:78
++msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements"
++msgstr "Не сматрај да су локалне променљиве и заједнички блокови именовани у наредбама SAVE"
++
++#: fortran/lang.opt:82
++msgid "Specify that backslash in string introduces an escape character"
++msgstr "Наведите да контракроз у ниски уводи избегавајући знак"
++
++#: fortran/lang.opt:86
++msgid "Set the default double precision kind to an 8 byte wide type"
++msgstr "Постави подразумевану врсту двоструке тачности на 8-битни тип"
++
++#: fortran/lang.opt:90
++msgid "Set the default integer kind to an 8 byte wide type"
++msgstr "Постави подразумевану врсту целог броја на 8-битни тип"
++
++#: fortran/lang.opt:94
++msgid "Set the default real kind to an 8 byte wide type"
++msgstr "Постави подразумевану врсту реалног броја на 8-битни тип"
++
++#: fortran/lang.opt:98
++msgid "Ignore 'D' in column one in fixed form"
++msgstr "Игнориши ‘D’ у првој колони у фиксном облику"
++
++#: fortran/lang.opt:102
++msgid "Treat lines with 'D' in column one as comments"
++msgstr "Сматрај линије са ‘D’ у првој колони за коментаре"
++
++#: fortran/lang.opt:106
++msgid "Allow dollar signs in entity names"
++msgstr "Дозволи долар у именима ентитета"
++
++#: fortran/lang.opt:110
++msgid "Display the code tree after parsing"
++msgstr "Прикажи стабло кôда после рашчлањивања"
++
++#: fortran/lang.opt:114
++msgid "Use f2c calling convention"
++msgstr "Користи конвенцију позивања f2c"
++
++#: fortran/lang.opt:118
++msgid "Assume that the source file is fixed form"
++msgstr "Претпостави да је извор у фиксном облику"
++
++#: fortran/lang.opt:122
++msgid "Assume that the source file is free form"
++msgstr "Претпостави да је извор у слободном облику"
++
++#: fortran/lang.opt:126
++msgid "Append underscores to externally visible names"
++msgstr "Додај подвлаке споља видљивим именима"
++
++#: fortran/lang.opt:130
++msgid "Use the Cray Pointer extension"
++msgstr "Користи проширење Крејовог показивача"
++
++#: fortran/lang.opt:134
++msgid "Append a second underscore if the name already contains an underscore"
++msgstr "Додај другу подвлаку ако име већ садржи подвлаку"
++
++#: fortran/lang.opt:138
++msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements"
++msgstr "Наведите да имплицитни типови нису дозвољени, осим ако се не потисне експлицитном наредбом IMPLICIT"
++
++#: fortran/lang.opt:142
++msgid "Allow arbitrary character line width in fixed mode"
++msgstr "Дозволи произвољну дужину линије у фиксном режиму"
++
++#: fortran/lang.opt:146
++msgid "Use n as character line width in fixed mode"
++msgstr "Користи n као дужину линије у фиксном режиму"
++
++#: fortran/lang.opt:150
++msgid "Allow arbitrary character line width in free mode"
++msgstr "Дозволи произвољну дужину линије у слободном режиму"
++
++#: fortran/lang.opt:154
++msgid "Use n as character line width in free mode"
++msgstr "Користи n као дужину линије у слободном режиму"
++
++#: fortran/lang.opt:158
++msgid "Maximum identifier length"
++msgstr "Највећа дужина идентификатора"
++
++#: fortran/lang.opt:162
++msgid "Size in bytes of the largest array that will be put on the stack"
++msgstr "Величина у бајтовима највећег низа који ће бити стављен на стек"
++
++#: fortran/lang.opt:166
++msgid "Set default accessibility of module entities to PRIVATE"
++msgstr "Постави подразумевани приступ модулским ентитетима на приватан"
++
++#: fortran/lang.opt:170
++msgid "Don't generate code, just do syntax and semantics checking"
++msgstr "Не стварај кôд, само провери синтаксу и семантику"
++
++#: fortran/lang.opt:174
++msgid "Try to layout derived types as compact as possible"
++msgstr "Покушај да распоредиш изведене типове што збијеније"
++
++#: fortran/lang.opt:178
++msgid "Copy array sections into a contiguous block on procedure entry"
++msgstr "Копирај одељке низа у непрекидан блок при улазу у процедуру"
++
++#: fortran/lang.opt:182
++msgid "Treat the input file as preprocessed"
++msgstr "Сматрај улазну датотеку предобрађеном"
++
++#: fortran/lang.opt:186
++msgid "Set the kind for a real with the 'q' exponent to 'n'"
++msgstr "Постави врсту за реалне бројеве са изложиоцем ‘q’ на ‘n’"
++
++#: fortran/lang.opt:190
++msgid "Stop on following floating point exceptions"
++msgstr "Стани код следећих изузетака покретног зареза"
++
++#: fortran/lang.opt:194
++msgid "Conform to the ISO Fortran 95 standard"
++msgstr "Поштуј ИСО стандард фортрана 95"
++
++#: fortran/lang.opt:198
++msgid "Conform to the ISO Fortran 2003 standard"
++msgstr "Поштуј ИСО стандард фортрана 2003"
++
++#: fortran/lang.opt:202
++msgid "Conform nothing in particular"
++msgstr "Не поштуј ништа посебно"
++
++#: fortran/lang.opt:206
++msgid "Accept extensions to support legacy code"
++msgstr "Прихвати проширења за подршку старог кода"
++
++#: fortran/lang.opt:210 c.opt:661
++msgid "Use the narrowest integer type possible for enumeration types"
++msgstr "За набројиве типове користи најужи целобројни тип могућ"
++
++#: fortran/lang.opt:214
++msgid "Use little-endian format for unformatted files"
++msgstr "Користи формат мале крајности за неформатиране датотеке"
++
++#: fortran/lang.opt:218
++msgid "Use big-endian format for unformatted files"
++msgstr "Користи формат мале крајности за неформатиране датотеке"
++
++#: fortran/lang.opt:222
++msgid "Use native format for unformatted files"
++msgstr "Користи урођени формат за неформатиране датотеке"
++
++#: fortran/lang.opt:226
++msgid "Swap endianness for unformatted files"
++msgstr "Размени крајност за неформатиране датотеке"
++
++#: fortran/lang.opt:230
++msgid "Use a 4-byte record marker for unformatted files"
++msgstr "Користи 4-бајтни обележивач слога за неформатиране датотеке"
++
++#: fortran/lang.opt:234
++msgid "Use an 8-byte record marker for unformatted files"
++msgstr "Користи 8-бајтни обележивач слога за неформатиране датотеке"
++
++#: treelang/lang.opt:30
++msgid "Trace lexical analysis"
++msgstr "Прати лексичку анализу"
++
++#: treelang/lang.opt:34
++msgid "Trace the parsing process"
++msgstr "Прати поступак рашчлањивања"
++
++#: config/alpha/alpha.opt:24 config/i386/i386.opt:186
++msgid "Do not use hardware fp"
++msgstr "Не користи хардверски ФП"
++
++#: config/alpha/alpha.opt:28
++msgid "Use fp registers"
++msgstr "Користи ФП регистре"
++
++#: config/alpha/alpha.opt:32
++msgid "Assume GAS"
++msgstr "Претпостави ГАС"
++
++#: config/alpha/alpha.opt:36
++msgid "Do not assume GAS"
++msgstr "Не претпостављај ГАС"
++
++#: config/alpha/alpha.opt:40
++msgid "Request IEEE-conformant math library routines (OSF/1)"
++msgstr "Захтевај рутине математичке библиотеке које поштују ИЕЕЕ (OSF/1)"
++
++#: config/alpha/alpha.opt:44
++msgid "Emit IEEE-conformant code, without inexact exceptions"
++msgstr "Емитуј кôд који поштује ИЕЕЕ, без нетачних изузетака"
++
++#: config/alpha/alpha.opt:51
++msgid "Do not emit complex integer constants to read-only memory"
++msgstr "Не емитуј комплексне целобројне константе у само-за-читање меморију"
++
++#: config/alpha/alpha.opt:55
++msgid "Use VAX fp"
++msgstr "Користи ВАКСов ФП"
++
++#: config/alpha/alpha.opt:59
++msgid "Do not use VAX fp"
++msgstr "Не користи ВАКСов ФП"
++
++#: config/alpha/alpha.opt:63
++msgid "Emit code for the byte/word ISA extension"
++msgstr "Емитуј кôд за бајт/реч ИСА проширење"
++
++#: config/alpha/alpha.opt:67
++msgid "Emit code for the motion video ISA extension"
++msgstr "Емитуј кôд за видео ИСА проширење"
++
++#: config/alpha/alpha.opt:71
++msgid "Emit code for the fp move and sqrt ISA extension"
++msgstr "Емитуј кôд за fp move и sqrt ИСА проширење"
++
++#: config/alpha/alpha.opt:75
++msgid "Emit code for the counting ISA extension"
++msgstr "Емитуј кôд за бројачко ИСА проширење"
++
++#: config/alpha/alpha.opt:79
++msgid "Emit code using explicit relocation directives"
++msgstr "Емитуј кôд користећи екплицитне релокационе директиве"
++
++#: config/alpha/alpha.opt:83
++msgid "Emit 16-bit relocations to the small data areas"
++msgstr "Емитуј 16-битне релокације у мале области података"
++
++#: config/alpha/alpha.opt:87
++msgid "Emit 32-bit relocations to the small data areas"
++msgstr "Емитуј 32-битне релокације у мале области података"
++
++#: config/alpha/alpha.opt:91
++msgid "Emit direct branches to local functions"
++msgstr "Емитуј непосредна гранања у локалне функције"
++
++#: config/alpha/alpha.opt:95
++msgid "Emit indirect branches to local functions"
++msgstr "Емитуј посредна гранања у локалне функције"
++
++#: config/alpha/alpha.opt:99
++msgid "Emit rdval instead of rduniq for thread pointer"
++msgstr "Емитуј rdval уместо rduniq за показивач нити"
++
++#: config/alpha/alpha.opt:103 config/s390/s390.opt:56
++#: config/sparc/long-double-switch.opt:24
++msgid "Use 128-bit long double"
++msgstr "Користи 128-битни long double"
++
++#: config/alpha/alpha.opt:107 config/s390/s390.opt:60
++#: config/sparc/long-double-switch.opt:28
++msgid "Use 64-bit long double"
++msgstr "Користи 64-битни long double"
++
++#: config/alpha/alpha.opt:111
++msgid "Use features of and schedule given CPU"
++msgstr "Користи могућности и распоређуј за дати ЦПУ"
++
++#: config/alpha/alpha.opt:115
++msgid "Schedule given CPU"
++msgstr "Rаспоређуј дати ЦПУ"
++
++#: config/alpha/alpha.opt:119
++msgid "Control the generated fp rounding mode"
++msgstr "Контролиши створени ФП режим заокруживања"
++
++#: config/alpha/alpha.opt:123
++msgid "Control the IEEE trap mode"
++msgstr "Контролиши ИЕЕЕ режим клопки"
++
++#: config/alpha/alpha.opt:127
++msgid "Control the precision given to fp exceptions"
++msgstr "Контролиши тачност дату ФП изузецима"
++
++#: config/alpha/alpha.opt:131
++msgid "Tune expected memory latency"
++msgstr "Наштелуј очекивано кашњење меморије"
++
++#: config/alpha/alpha.opt:135 config/ia64/ia64.opt:93
++#: config/rs6000/sysv4.opt:33
++msgid "Specify bit size of immediate TLS offsets"
++msgstr "Наведите битску величину непосредних ТЛС помака"
++
++#: config/frv/frv.opt:24
++msgid "Use 4 media accumulators"
++msgstr "Користи 4 медија-акумулатора"
++
++#: config/frv/frv.opt:28
++msgid "Use 8 media accumulators"
++msgstr "Користи 8 медија-акумулатора"
++
++#: config/frv/frv.opt:32
++msgid "Enable label alignment optimizations"
++msgstr "Укључи оптимизацију равнања етикета"
++
++#: config/frv/frv.opt:36
++msgid "Dynamically allocate cc registers"
++msgstr "Динамички резервиши цц регистре"
++
++#: config/frv/frv.opt:43
++msgid "Set the cost of branches"
++msgstr "Постави цену гранањâ"
++
++#: config/frv/frv.opt:47
++msgid "Enable conditional execution other than moves/scc"
++msgstr "Укључи условно извршавања осим померања/сцц"
++
++#: config/frv/frv.opt:51
++msgid "Change the maximum length of conditionally-executed sequences"
++msgstr "Промени највећу дужину условно извршаваних секвенци"
++
++#: config/frv/frv.opt:55
++msgid "Change the number of temporary registers that are available to conditionally-executed sequences"
++msgstr "Промени број привремених регистара доступних условно извршаваним секвенцама"
++
++#: config/frv/frv.opt:59
++msgid "Enable conditional moves"
++msgstr "Укључи условна померања"
++
++#: config/frv/frv.opt:63
++msgid "Set the target CPU type"
++msgstr "Постави циљни тип ЦПУа"
++
++#: config/frv/frv.opt:85
++msgid "Use fp double instructions"
++msgstr "Користи ФП двоструке тачности"
++
++#: config/frv/frv.opt:89
++msgid "Change the ABI to allow double word insns"
++msgstr "Промени АБИ да дозволи дворечне ије"
++
++#: config/frv/frv.opt:93
++msgid "Enable Function Descriptor PIC mode"
++msgstr "Укључи ПИЦ режим описника функција"
++
++#: config/frv/frv.opt:97
++msgid "Just use icc0/fcc0"
++msgstr "Само користи icc0/fcc0"
++
++#: config/frv/frv.opt:101
++msgid "Only use 32 FPRs"
++msgstr "Користи само 32 ФПРа"
++
++#: config/frv/frv.opt:105
++msgid "Use 64 FPRs"
++msgstr "Користи 64 ФПРа"
++
++#: config/frv/frv.opt:109
++msgid "Only use 32 GPRs"
++msgstr "Користи само 32 ГПРа"
++
++#: config/frv/frv.opt:113
++msgid "Use 64 GPRs"
++msgstr "Користи 64 ГПРа"
++
++#: config/frv/frv.opt:117
++msgid "Enable use of GPREL for read-only data in FDPIC"
++msgstr "Укључи употребу ГПРЕЛа за само-за-читање податке у ФДПИЦу"
++
++#: config/frv/frv.opt:121 config/rs6000/rs6000.opt:93
++#: config/pdp11/pdp11.opt:72
++msgid "Use hardware floating point"
++msgstr "Користи хардверски покретан зарез"
++
++#: config/frv/frv.opt:125
++msgid "Enable inlining of PLT in function calls"
++msgstr "Укључи уткивање ПЛТа у позивима функција"
++
++#: config/frv/frv.opt:129
++msgid "Enable PIC support for building libraries"
++msgstr "Укључи ПИЦ подршку за грађење библиотека"
++
++#: config/frv/frv.opt:133
++msgid "Follow the EABI linkage requirements"
++msgstr "Прати ЕАБИ захтеве повезивости"
++
++#: config/frv/frv.opt:137
++msgid "Disallow direct calls to global functions"
++msgstr "Забрани непосредне позиве глобалних функција"
++
++#: config/frv/frv.opt:141
++msgid "Use media instructions"
++msgstr "Користи медија-инструкције"
++
++#: config/frv/frv.opt:145
++msgid "Use multiply add/subtract instructions"
++msgstr "Користи инструкције множење-додавање/одузимање"
++
++#: config/frv/frv.opt:149
++msgid "Enable optimizing &&/|| in conditional execution"
++msgstr "Укључи оптимизацију &&/|| у условном извршавању"
++
++#: config/frv/frv.opt:153
++msgid "Enable nested conditional execution optimizations"
++msgstr "Укључи оптимизацију угњежденог условног извршавања"
++
++#: config/frv/frv.opt:158
++msgid "Do not mark ABI switches in e_flags"
++msgstr "Не означавај промене АБИја у e_flags"
++
++#: config/frv/frv.opt:162
++msgid "Remove redundant membars"
++msgstr "Уклони сувишне мембарове"
++
++#: config/frv/frv.opt:166
++msgid "Pack VLIW instructions"
++msgstr "Пакуј ВЛИВ инструкције"
++
++#: config/frv/frv.opt:170
++msgid "Enable setting GPRs to the result of comparisons"
++msgstr "Укључи постављање ГПРова на резултате поређења"
++
++#: config/frv/frv.opt:174
++msgid "Change the amount of scheduler lookahead"
++msgstr "Промени распон гледања унапред распоређивача"
++
++#: config/frv/frv.opt:178 config/pa/pa.opt:105
++msgid "Use software floating point"
++msgstr "Користи софтверски покретан зарез"
++
++#: config/frv/frv.opt:182
++msgid "Assume a large TLS segment"
++msgstr "Претпостави велики ТЛС сегмент"
++
++#: config/frv/frv.opt:186
++msgid "Do not assume a large TLS segment"
++msgstr "Не претпостављај велики ТЛС сегмент"
++
++#: config/frv/frv.opt:191
++msgid "Cause gas to print tomcat statistics"
++msgstr "Нека ГАС исписује томкет статистику"
++
++#: config/frv/frv.opt:196
++msgid "Link with the library-pic libraries"
++msgstr "Повезуј са ПИЦ библиотекама"
++
++#: config/frv/frv.opt:200
++msgid "Allow branches to be packed with other instructions"
++msgstr "Дозволи да гранања буду упакована са другим инструкцијама"
++
++#: config/mn10300/mn10300.opt:24
++msgid "Target the AM33 processor"
++msgstr "Циљај процесор АМ33"
++
++#: config/mn10300/mn10300.opt:28
++msgid "Target the AM33/2.0 processor"
++msgstr "Циљај процесор АМ33/2.0"
++
++#: config/mn10300/mn10300.opt:32
++msgid "Work around hardware multiply bug"
++msgstr "Заобиђи хардверску грешку у множењу"
++
++#: config/mn10300/mn10300.opt:37
++msgid "Enable linker relaxations"
++msgstr "Укључи релаксације повезивача"
++
++#: config/mn10300/mn10300.opt:41
++msgid "Return pointers in both a0 and d0"
++msgstr "Враћај показиваче и у a0 и у d0"
++
++#: config/s390/tpf.opt:24
++msgid "Enable TPF-OS tracing code"
++msgstr "Укључи кôд за праћење ТПФ-ОСа"
++
++#: config/s390/tpf.opt:28
++msgid "Specify main object for TPF-OS"
++msgstr "Наведите главни објекат за ТПФ-ОС"
++
++#: config/s390/s390.opt:24
++msgid "31 bit ABI"
++msgstr "31-битни АБИ"
++
++#: config/s390/s390.opt:28
++msgid "64 bit ABI"
++msgstr "64-битни АБИ"
++
++#: config/s390/s390.opt:32 config/i386/i386.opt:80
++msgid "Generate code for given CPU"
++msgstr "Створи кôд за дати ЦПУ"
++
++#: config/s390/s390.opt:36
++msgid "Maintain backchain pointer"
++msgstr "Одржавај показивач контраланца"
++
++#: config/s390/s390.opt:40
++msgid "Additional debug prints"
++msgstr "Додатно исправљачко исписивање"
++
++#: config/s390/s390.opt:44
++msgid "ESA/390 architecture"
++msgstr "Архитектура ЕСА/390"
++
++#: config/s390/s390.opt:48
++msgid "Enable fused multiply/add instructions"
++msgstr "Укључи инструкције стопљеног множења-додавања"
++
++#: config/s390/s390.opt:52 config/i386/i386.opt:48 config/i386/i386.opt:118
++msgid "Use hardware fp"
++msgstr "Користи хардверски ФП"
++
++#: config/s390/s390.opt:64
++msgid "Use packed stack layout"
++msgstr "Користи распоред пакованог стека"
++
++#: config/s390/s390.opt:68
++msgid "Use bras for executable < 64k"
++msgstr "Користи bras за извршне датотеке < 64k"
++
++#: config/s390/s390.opt:72
++msgid "Don't use hardware fp"
++msgstr "Не користи хардверски ФП"
++
++#: config/s390/s390.opt:76
++msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered"
++msgstr "Постави највећи број бајтова који се мора одложити на стек пре него што се окине инструкција клопке"
++
++#: config/s390/s390.opt:80
++msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit"
++msgstr "Емитуј додатни кôд у прологу функције ради клопке кад величина стека премашује дато ограничење"
++
++#: config/s390/s390.opt:84 config/ia64/ia64.opt:97 config/sparc/sparc.opt:96
++#: config/i386/i386.opt:222 config/rs6000/rs6000.opt:203
++msgid "Schedule code for given CPU"
++msgstr "Распореди кôд за дати ЦПУ"
++
++#: config/s390/s390.opt:88
++msgid "mvcle use"
++msgstr "Употреба mvcle"
++
++#: config/s390/s390.opt:92
++msgid "Warn if a function uses alloca or creates an array with dynamic size"
++msgstr "Упозори ако функција користи alloca или прави низ динамичке величине"
++
++#: config/s390/s390.opt:96
++msgid "Warn if a single function's framesize exceeds the given framesize"
++msgstr "Упозори ако величина оквира једне функције премашује дату величину"
++
++#: config/s390/s390.opt:100
++msgid "z/Architecture"
++msgstr "Архитектура z/"
++
++#: config/ia64/ilp32.opt:3
++msgid "Generate ILP32 code"
++msgstr "Створи ИЛП32 кôд"
++
++#: config/ia64/ilp32.opt:7
++msgid "Generate LP64 code"
++msgstr "Створи ЛП64 кôд"
++
++#: config/ia64/ia64.opt:3
++msgid "Generate big endian code"
++msgstr "Створи кôд велике крајности"
++
++#: config/ia64/ia64.opt:7
++msgid "Generate little endian code"
++msgstr "Створи кôд мале крајности"
++
++#: config/ia64/ia64.opt:11
++msgid "Generate code for GNU as"
++msgstr "Створи кôд за Гнуов as"
++
++#: config/ia64/ia64.opt:15
++msgid "Generate code for GNU ld"
++msgstr "Створи кôд за Гнуов ld"
++
++#: config/ia64/ia64.opt:19
++msgid "Emit stop bits before and after volatile extended asms"
++msgstr "Емитуј битове заустављања пре и после непостојаних проширених асмова"
++
++#: config/ia64/ia64.opt:23
++msgid "Use in/loc/out register names"
++msgstr "Користи имена регистара in/loc/out"
++
++#: config/ia64/ia64.opt:30
++msgid "Enable use of sdata/scommon/sbss"
++msgstr "Укључи употребу sdata/scommon/sbss"
++
++#: config/ia64/ia64.opt:34
++msgid "Generate code without GP reg"
++msgstr "Створи кôд без ГП регистра"
++
++#: config/ia64/ia64.opt:38
++msgid "gp is constant (but save/restore gp on indirect calls)"
++msgstr "ГП је константан (али чувај/враћај ГП при посредним позивима)"
++
++#: config/ia64/ia64.opt:42
++msgid "Generate self-relocatable code"
++msgstr "Створи саморелокациони кôд"
++
++#: config/ia64/ia64.opt:46
++msgid "Generate inline floating point division, optimize for latency"
++msgstr "Стварај уткано дељење у покретном зарезу, оптимизуј за кашњење"
++
++#: config/ia64/ia64.opt:50
++msgid "Generate inline floating point division, optimize for throughput"
++msgstr "Стварај уткано дељење у покретном зарезу, оптимизуј за пропусност"
++
++#: config/ia64/ia64.opt:57
++msgid "Generate inline integer division, optimize for latency"
++msgstr "Стварај уткано целобројно дељење, оптимизуј за кашњење"
++
++#: config/ia64/ia64.opt:61
++msgid "Generate inline integer division, optimize for throughput"
++msgstr "Стварај уткано целобројно дељење, оптимизуј за пропусност"
++
++#: config/ia64/ia64.opt:65
++msgid "Do not inline integer division"
++msgstr "Не уткивај целобројно дељење"
++
++#: config/ia64/ia64.opt:69
++msgid "Generate inline square root, optimize for latency"
++msgstr "Стварај уткани квадратни корен, оптимизуј за кашњење"
++
++#: config/ia64/ia64.opt:73
++msgid "Generate inline square root, optimize for throughput"
++msgstr "Стварај уткани квадратни корен, оптимизуј за пропусност"
++
++#: config/ia64/ia64.opt:77
++msgid "Do not inline square root"
++msgstr "Не уткивај квадратни корен"
++
++#: config/ia64/ia64.opt:81
++msgid "Enable Dwarf 2 line debug info via GNU as"
++msgstr "Укључи исправљачке податке ДВАРФ 2 преко Гнуовог as"
++
++#: config/ia64/ia64.opt:85
++msgid "Enable earlier placing stop bits for better scheduling"
++msgstr "Укључи раније постављање битова заустављања ради бољег распоређивања"
++
++#: config/ia64/ia64.opt:89 config/pa/pa.opt:52
++msgid "Specify range of registers to make fixed"
++msgstr "Наведите опсег регистара које треба фиксирати"
++
++#: config/m32c/m32c.opt:25 config/mt/mt.opt:28
++msgid "Use simulator runtime"
++msgstr "Користи симулаторско извршавање"
++
++#: config/m32c/m32c.opt:29
++msgid "Compile code for R8C variants"
++msgstr "Компилуј кôд за варијанте Р8Ц"
++
++#: config/m32c/m32c.opt:33
++msgid "Compile code for M16C variants"
++msgstr "Компилуј кôд за варијанте М16Ц"
++
++#: config/m32c/m32c.opt:37
++msgid "Compile code for M32CM variants"
++msgstr "Компилуј кôд за варијанте М32ЦМ"
++
++#: config/m32c/m32c.opt:41
++msgid "Compile code for M32C variants"
++msgstr "Компилуј кôд за варијанте М32Ц"
++
++#: config/m32c/m32c.opt:45
++msgid "Number of memreg bytes (default: 16, range: 0..16)"
++msgstr "Број бајтова мемрегова (подразумевано: 16, опсег: 0..16)"
++
++#: config/sparc/little-endian.opt:24
++msgid "Generate code for little-endian"
++msgstr "Створи кôд за малу крајност"
++
++#: config/sparc/little-endian.opt:28
++msgid "Generate code for big-endian"
++msgstr "Створи кôд за велику крајност"
++
++#: config/sparc/sparc.opt:24 config/sparc/sparc.opt:28
++msgid "Use hardware FP"
++msgstr "Користи хардверски ФП"
++
++#: config/sparc/sparc.opt:32
++msgid "Do not use hardware FP"
++msgstr "Не користи хардверски ФП"
++
++#: config/sparc/sparc.opt:36
++msgid "Assume possible double misalignment"
++msgstr "Претпостави могуће двоструко неравнање"
++
++#: config/sparc/sparc.opt:40
++msgid "Pass -assert pure-text to linker"
++msgstr "Проследи -assert pure-text повезивачу"
++
++#: config/sparc/sparc.opt:44
++msgid "Use ABI reserved registers"
++msgstr "Користи регистре резервисане АБИјем"
++
++#: config/sparc/sparc.opt:48
++msgid "Use hardware quad FP instructions"
++msgstr "Користи хардверске четворне ФП инструкције"
++
++#: config/sparc/sparc.opt:52
++msgid "Do not use hardware quad fp instructions"
++msgstr "Не користи хардверске четворне ФП инструкције"
++
++#: config/sparc/sparc.opt:56
++msgid "Compile for V8+ ABI"
++msgstr "Компилуј за АБИ В8+"
++
++#: config/sparc/sparc.opt:60
++msgid "Use UltraSPARC Visual Instruction Set extensions"
++msgstr "Користи скуп визуелних инструкција (ВИС) УлтраСПАРКа"
++
++#: config/sparc/sparc.opt:64
++msgid "Pointers are 64-bit"
++msgstr "Показивачи су 64-битни"
++
++#: config/sparc/sparc.opt:68
++msgid "Pointers are 32-bit"
++msgstr "Показивачи су 32-битни"
++
++#: config/sparc/sparc.opt:72
++msgid "Use 64-bit ABI"
++msgstr "Користи 64-битни АБИ"
++
++#: config/sparc/sparc.opt:76
++msgid "Use 32-bit ABI"
++msgstr "Користи 32-битни АБИ"
++
++#: config/sparc/sparc.opt:80
++msgid "Use stack bias"
++msgstr "Користи нагињање стека"
++
++#: config/sparc/sparc.opt:84
++msgid "Use structs on stronger alignment for double-word copies"
++msgstr "Користи структуре на јачем равнању за дворечне копије"
++
++#: config/sparc/sparc.opt:88
++msgid "Optimize tail call instructions in assembler and linker"
++msgstr "Оптимизуј инструкције репних позива у асемблеру и повезивачу"
++
++#: config/sparc/sparc.opt:92 config/rs6000/rs6000.opt:199
++msgid "Use features of and schedule code for given CPU"
++msgstr "Користи могућности и распоређуј кôд за дати ЦПУ"
++
++#: config/sparc/sparc.opt:100
++msgid "Use given SPARC-V9 code model"
++msgstr "Користи дати модел кôда СПАРКа В9"
++
++#: config/m32r/m32r.opt:24
++msgid "Compile for the m32rx"
++msgstr "Компилуј за m32rx"
++
++#: config/m32r/m32r.opt:28
++msgid "Compile for the m32r2"
++msgstr "Компилуј за m32r2"
++
++#: config/m32r/m32r.opt:32
++msgid "Compile for the m32r"
++msgstr "Компилуј за m32r"
++
++#: config/m32r/m32r.opt:36
++msgid "Align all loops to 32 byte boundary"
++msgstr "Поравнај све петље на 32-бајтну границу"
++
++#: config/m32r/m32r.opt:40
++msgid "Prefer branches over conditional execution"
++msgstr "Боље гранања него условно извршавање"
++
++#: config/m32r/m32r.opt:44
++msgid "Give branches their default cost"
++msgstr "Дај гранањима њихову подразумевану цену"
++
++#: config/m32r/m32r.opt:48
++msgid "Display compile time statistics"
++msgstr "Прикажи статистике за време компиловања"
++
++#: config/m32r/m32r.opt:52
++msgid "Specify cache flush function"
++msgstr "Наведите функцију за спирање оставе"
++
++#: config/m32r/m32r.opt:56
++msgid "Specify cache flush trap number"
++msgstr "Наведите број клопке за спирање оставе"
++
++#: config/m32r/m32r.opt:60
++msgid "Only issue one instruction per cycle"
++msgstr "Издај само једну инструкцију по циклусу"
++
++#: config/m32r/m32r.opt:64
++msgid "Allow two instructions to be issued per cycle"
++msgstr "Дозволи издавање две инструкције по циклусу"
++
++#: config/m32r/m32r.opt:68
++msgid "Code size: small, medium or large"
++msgstr "Величина кôда: small, medium или large"
++
++#: config/m32r/m32r.opt:72
++msgid "Don't call any cache flush functions"
++msgstr "Не позивај функције за спирање оставе"
++
++#: config/m32r/m32r.opt:76
++msgid "Don't call any cache flush trap"
++msgstr "Не позивај клопке за спирање оставе"
++
++#: config/m32r/m32r.opt:83
++msgid "Small data area: none, sdata, use"
++msgstr "Мала област података: none, sdata, use"
++
++#: config/m68k/m68k.opt:24
++msgid "Generate code for a 520X"
++msgstr "Створи кôд за 520X"
++
++#: config/m68k/m68k.opt:28
++msgid "Generate code for a 5206e"
++msgstr "Створи кôд за 5206e"
++
++#: config/m68k/m68k.opt:32
++msgid "Generate code for a 528x"
++msgstr "Створи кôд за 528x"
++
++#: config/m68k/m68k.opt:36
++msgid "Generate code for a 5307"
++msgstr "Створи кôд за 5307"
++
++#: config/m68k/m68k.opt:40
++msgid "Generate code for a 5407"
++msgstr "Створи кôд за 5407"
++
++#: config/m68k/m68k.opt:44 config/m68k/m68k.opt:97
++msgid "Generate code for a 68000"
++msgstr "Створи кôд за 68000"
++
++#: config/m68k/m68k.opt:48 config/m68k/m68k.opt:101
++msgid "Generate code for a 68020"
++msgstr "Створи кôд за 68020"
++
++#: config/m68k/m68k.opt:52
++msgid "Generate code for a 68040, without any new instructions"
++msgstr "Створи кôд за 68040, без икаквих нових инструкција"
++
++#: config/m68k/m68k.opt:56
++msgid "Generate code for a 68060, without any new instructions"
++msgstr "Створи кôд за 68060, без икаквих нових инструкција"
++
++#: config/m68k/m68k.opt:60
++msgid "Generate code for a 68030"
++msgstr "Створи кôд за 68030"
++
++#: config/m68k/m68k.opt:64
++msgid "Generate code for a 68040"
++msgstr "Створи кôд за 68040"
++
++#: config/m68k/m68k.opt:68
++msgid "Generate code for a 68060"
++msgstr "Створи кôд за 68060"
++
++#: config/m68k/m68k.opt:72
++msgid "Generate code for a 68302"
++msgstr "Створи кôд за 68302"
++
++#: config/m68k/m68k.opt:76
++msgid "Generate code for a 68332"
++msgstr "Створи кôд за 68332"
++
++#: config/m68k/m68k.opt:81
++msgid "Generate code for a 68851"
++msgstr "Створи кôд за 68851"
++
++#: config/m68k/m68k.opt:85
++msgid "Generate code that uses 68881 floating-point instructions"
++msgstr "Створи кôд који користи инструкције од 68881 за рачунање у покретном зарезу"
++
++#: config/m68k/m68k.opt:89
++msgid "Align variables on a 32-bit boundary"
++msgstr "Поравнај променљиве на 32-бајтну границу"
++
++#: config/m68k/m68k.opt:93
++msgid "Use the bit-field instructions"
++msgstr "Користи инструкције битског нивоа"
++
++#: config/m68k/m68k.opt:105
++msgid "Generate code for a cpu32"
++msgstr "Створи кôд за cpu32"
++
++#: config/m68k/m68k.opt:109
++msgid "Enable ID based shared library"
++msgstr "Укључи дељене библиотеке на основу ИДа"
++
++#: config/m68k/m68k.opt:113
++msgid "Do not use the bit-field instructions"
++msgstr "Не користи инструкције битског нивоа"
++
++#: config/m68k/m68k.opt:117
++msgid "Use normal calling convention"
++msgstr "Користи нормалну конвенцију позивања"
++
++#: config/m68k/m68k.opt:121
++msgid "Consider type 'int' to be 32 bits wide"
++msgstr "Сматрај да тип ‘int’ има 32 бита"
++
++#: config/m68k/m68k.opt:125
++msgid "Generate pc-relative code"
++msgstr "Прави ПЦ-релативан кôд"
++
++#: config/m68k/m68k.opt:129
++msgid "Use different calling convention using 'rtd'"
++msgstr "Користи различиту конвенцију позивања користећи ‘rtd’"
++
++#: config/m68k/m68k.opt:133
++msgid "Enable separate data segment"
++msgstr "Укључи раздвојени сегмент података"
++
++#: config/m68k/m68k.opt:137 config/bfin/bfin.opt:45
++msgid "ID of shared library to build"
++msgstr "ИД дељене библиотеке за градњу"
++
++#: config/m68k/m68k.opt:141
++msgid "Consider type 'int' to be 16 bits wide"
++msgstr "Сматрај да тип ‘int’ има 16 битова"
++
++#: config/m68k/m68k.opt:145
++msgid "Generate code with library calls for floating point"
++msgstr "Створи кôд са библиотечким позивима за покретни зарез"
++
++#: config/m68k/m68k.opt:149
++msgid "Do not use unaligned memory references"
++msgstr "Не користи непоравнате меморијске упућиваче"
++
++#: config/m68k/ieee.opt:25 config/i386/i386.opt:122
++msgid "Use IEEE math for fp comparisons"
++msgstr "Користи ИЕЕЕ математику за ФП поређења"
++
++#: config/i386/djgpp.opt:26
++msgid "Ignored (obsolete)"
++msgstr "Игнорисано (застарело)"
++
++#: config/i386/i386.opt:24
++msgid "sizeof(long double) is 16"
++msgstr "sizeof(long double) је 16"
++
++#: config/i386/i386.opt:28
++msgid "Generate 32bit i386 code"
++msgstr "Створи 32-битни кôд за и386"
++
++#: config/i386/i386.opt:36
++msgid "Support 3DNow! built-in functions"
++msgstr "Подржи уграђене 3DNow! функције"
++
++#: config/i386/i386.opt:44
++msgid "Generate 64bit x86-64 code"
++msgstr "Створи 64-битни кôд за икс86-64"
++
++#: config/i386/i386.opt:52
++msgid "sizeof(long double) is 12"
++msgstr "sizeof(long double) је 12"
++
++#: config/i386/i386.opt:56
++msgid "Reserve space for outgoing arguments in the function prologue"
++msgstr "Резервиши простор за одлазеће аргументе у прологу функције"
++
++#: config/i386/i386.opt:60
++msgid "Align some doubles on dword boundary"
++msgstr "Поравнај неке двоструке на граници д-речи"
++
++#: config/i386/i386.opt:64
++msgid "Function starts are aligned to this power of 2"
++msgstr "Почеци функција су поравнати на овај степен двојке"
++
++#: config/i386/i386.opt:68
++msgid "Jump targets are aligned to this power of 2"
++msgstr "Циљеви скокова су поравнати на овај степен двојке"
++
++#: config/i386/i386.opt:72
++msgid "Loop code aligned to this power of 2"
++msgstr "Кôд петље је поравнат на овај степен двојке"
++
++#: config/i386/i386.opt:76
++msgid "Align destination of the string operations"
++msgstr "Поравнај одредиште операција над нискама"
++
++#: config/i386/i386.opt:84
++msgid "Use given assembler dialect"
++msgstr "Користи дати дијалект асемблера"
++
++#: config/i386/i386.opt:88
++msgid "Branches are this expensive (1-5, arbitrary units)"
++msgstr "Гранања оволико коштају (1-5, произвољне јединице)"
++
++#: config/i386/i386.opt:92
++msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
++msgstr "Подаци већи од датог прага ће отићи у одељак .ldata у средњем моделу икс86-64"
++
++#: config/i386/i386.opt:96
++msgid "Use given x86-64 code model"
++msgstr "Користи дати модел кôда икс86-64"
++
++#: config/i386/i386.opt:106
++msgid "Generate sin, cos, sqrt for FPU"
++msgstr "Створи sin, cos, sqrt за ФПУ"
++
++#: config/i386/i386.opt:110
++msgid "Return values of functions in FPU registers"
++msgstr "Враћај вредности функција у регистрима ФПУа"
++
++#: config/i386/i386.opt:114
++msgid "Generate floating point mathematics using given instruction set"
++msgstr "Стварај математику у покретном зарезу користећи дати скуп инструкција"
++
++#: config/i386/i386.opt:126
++msgid "Inline all known string operations"
++msgstr "Уткај све познате операције над нискама"
++
++#: config/i386/i386.opt:134
++msgid "Support MMX built-in functions"
++msgstr "Подржи уграђене ММИкс функције"
++
++#: config/i386/i386.opt:138
++msgid "Use native (MS) bitfield layout"
++msgstr "Користи урођени (МСов) распоред битских поља"
++
++#: config/i386/i386.opt:154
++msgid "Omit the frame pointer in leaf functions"
++msgstr "Изостави показивач оквира у функцијама-листовима"
++
++#: config/i386/i386.opt:166
++msgid "Attempt to keep stack aligned to this power of 2"
++msgstr "Покушај да одржиш стек поравнат на овом степену двојке"
++
++#: config/i386/i386.opt:170
++msgid "Use push instructions to save outgoing arguments"
++msgstr "Користи инструкције гурања за чување одлазећих аргумената"
++
++#: config/i386/i386.opt:174
++msgid "Use red-zone in the x86-64 code"
++msgstr "Користи црвену зону у кôду за икс86-64"
++
++#: config/i386/i386.opt:178
++msgid "Number of registers used to pass integer arguments"
++msgstr "Број регистара који се користи за прослеђивање целобројних аргумената"
++
++#: config/i386/i386.opt:182
++msgid "Alternate calling convention"
++msgstr "Алтернативна конвенција позивања"
++
++#: config/i386/i386.opt:190
++msgid "Support MMX and SSE built-in functions and code generation"
++msgstr "Подржи уграђене ММИкс и ССЕ функције и стварање кôда"
++
++#: config/i386/i386.opt:194
++msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
++msgstr "Подржи уграђене ММИкс, ССЕ и ССЕ2 функције и стварање кôда"
++
++#: config/i386/i386.opt:198
++msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
++msgstr "Подржи уграђене ММИкс, ССЕ, ССЕ2 и ССЕ3 функције и стварање кôда"
++
++#: config/i386/i386.opt:202
++msgid "Use SSE register passing conventions for SF and DF mode"
++msgstr "Користи ССЕ конвенције прослеђивања регистара за режиме СФ и ДФ"
++
++#: config/i386/i386.opt:206
++msgid "Uninitialized locals in .bss"
++msgstr "Неуспостављени локални у .bss"
++
++#: config/i386/i386.opt:210
++msgid "Enable stack probing"
++msgstr "Укључи сондирање стека"
++
++#: config/i386/i386.opt:214
++msgid "Use given thread-local storage dialect"
++msgstr "Користи дати дијалект нитно-локалног складиштења"
++
++#: config/i386/i386.opt:218
++#, c-format
++msgid "Use direct references against %gs when accessing tls data"
++msgstr "Користи непосредне упућиваче за %gs при приступању ТЛС подацима"
++
++#: config/i386/cygming.opt:24
++msgid "Create console application"
++msgstr "Направи терминалски програм"
++
++#: config/i386/cygming.opt:28
++msgid "Use the Cygwin interface"
++msgstr "Користи суљеље Сигвина"
++
++#: config/i386/cygming.opt:32
++msgid "Generate code for a DLL"
++msgstr "Створи кôд за ДЛЛ"
++
++#: config/i386/cygming.opt:36
++msgid "Ignore dllimport for functions"
++msgstr "Игнориши dllimport за функције"
++
++#: config/i386/cygming.opt:40
++msgid "Use Mingw-specific thread support"
++msgstr "Користи подршку нити посебну за Мингв"
++
++#: config/i386/cygming.opt:44
++msgid "Set Windows defines"
++msgstr "Постави дефиниције за Виндоуз"
++
++#: config/i386/cygming.opt:48
++msgid "Create GUI application"
++msgstr "Направи ГУИ програм"
++
++#: config/i386/sco5.opt:25
++msgid "Generate ELF output"
++msgstr "Створи ЕЛФ излаз"
++
++#: config/rs6000/aix41.opt:25 config/rs6000/aix64.opt:33
++msgid "Support message passing with the Parallel Environment"
++msgstr "Подржи прослеђивање помоћу паралелног окружења"
++
++#: config/rs6000/aix.opt:25 config/rs6000/rs6000.opt:128
++msgid "Conform more closely to IBM XLC semantics"
++msgstr "Поштуј ближе семантику ИБМовог ИксЛЦа"
++
++#: config/rs6000/darwin.opt:25 config/rs6000/sysv4.opt:133
++msgid "Generate 64-bit code"
++msgstr "Створи 64-битни кôд"
++
++#: config/rs6000/darwin.opt:29 config/rs6000/sysv4.opt:137
++msgid "Generate 32-bit code"
++msgstr "Створи 32-битни кôд"
++
++#: config/rs6000/darwin.opt:33
++msgid "Generate code suitable for executables (NOT shared libs)"
++msgstr "Створи кôд погодан за извршне (НЕ за дељене библиотеке)"
++
++#: config/rs6000/rs6000.opt:25
++msgid "Use POWER instruction set"
++msgstr "Користи скуп инструкција Пауера"
++
++#: config/rs6000/rs6000.opt:29
++msgid "Do not use POWER instruction set"
++msgstr "Не користи скуп инструкција Пауера"
++
++#: config/rs6000/rs6000.opt:33
++msgid "Use POWER2 instruction set"
++msgstr "Користи скуп инструкција Пауера2"
++
++#: config/rs6000/rs6000.opt:37
++msgid "Use PowerPC instruction set"
++msgstr "Користи скуп инструкција ПауерПЦа"
++
++#: config/rs6000/rs6000.opt:41
++msgid "Do not use PowerPC instruction set"
++msgstr "Не користи скуп инструкција ПауерПЦа"
++
++#: config/rs6000/rs6000.opt:45
++msgid "Use PowerPC-64 instruction set"
++msgstr "Користи скуп инструкција ПауерПЦа-64"
++
++#: config/rs6000/rs6000.opt:49
++msgid "Use PowerPC General Purpose group optional instructions"
++msgstr "Користи опционе инструкције ПауерПЦа из групе за општу употребу"
++
++#: config/rs6000/rs6000.opt:53
++msgid "Use PowerPC Graphics group optional instructions"
++msgstr "Користи опционе инструкције ПауерПЦа из графичке групе"
++
++#: config/rs6000/rs6000.opt:57
++msgid "Use PowerPC V2.01 single field mfcr instruction"
++msgstr "Користи инструкцију mfcr са једним пољем, ПауерПЦа в2.01"
++
++#: config/rs6000/rs6000.opt:61
++msgid "Use PowerPC V2.02 popcntb instruction"
++msgstr "Користи инструкцију popcntb ПауерПЦа в2.02"
++
++#: config/rs6000/rs6000.opt:65
++msgid "Use PowerPC V2.02 floating point rounding instructions"
++msgstr "Користи инструкције ПауерПЦа в2.02 за заокруживање у покретном зарезу"
++
++#: config/rs6000/rs6000.opt:69
++msgid "Use AltiVec instructions"
++msgstr "Користи алтивек инструкције"
++
++#: config/rs6000/rs6000.opt:73
++msgid "Generate load/store multiple instructions"
++msgstr "Стварај инструкције вишеструког учитавања/складиштења"
++
++#: config/rs6000/rs6000.opt:77
++msgid "Generate string instructions for block moves"
++msgstr "Стварај инструкције ниски за премештања блокова"
++
++#: config/rs6000/rs6000.opt:81
++msgid "Use new mnemonics for PowerPC architecture"
++msgstr "Користи нову мнемонику за архитектуру ПауерПЦа"
++
++#: config/rs6000/rs6000.opt:85
++msgid "Use old mnemonics for PowerPC architecture"
++msgstr "Користи стару мнемонику за архитектуру ПауерПЦа"
++
++#: config/rs6000/rs6000.opt:89 config/pdp11/pdp11.opt:84
++msgid "Do not use hardware floating point"
++msgstr "Не користи хардверски покретан зарез"
++
++#: config/rs6000/rs6000.opt:97
++msgid "Do not generate load/store with update instructions"
++msgstr "Не стварај инструкције учитавања/складиштења са ажурирањем"
++
++#: config/rs6000/rs6000.opt:101
++msgid "Generate load/store with update instructions"
++msgstr "Стварај инструкције учитавања/складиштења са ажурирањем"
++
++#: config/rs6000/rs6000.opt:105
++msgid "Do not generate fused multiply/add instructions"
++msgstr "Не стварај инструкције стопљеног множења-додавања"
++
++#: config/rs6000/rs6000.opt:109
++msgid "Generate fused multiply/add instructions"
++msgstr "Стварај инструкције стопљеног множења-додавања"
++
++#: config/rs6000/rs6000.opt:113
++msgid "Schedule the start and end of the procedure"
++msgstr "Распоређуј почетак и крај процедуре"
++
++#: config/rs6000/rs6000.opt:120
++msgid "Return all structures in memory (AIX default)"
++msgstr "Враћај све структуре у меморији (подразумевано за Аикс)"
++
++#: config/rs6000/rs6000.opt:124
++msgid "Return small structures in registers (SVR4 default)"
++msgstr "Враћај мале структуре у регистрима (подразумевано за СВР4)"
++
++#: config/rs6000/rs6000.opt:132
++msgid "Generate software floating point divide for better throughput"
++msgstr "Стварај софтверско дељење у покретном зарезу ради боље пропусности"
++
++#: config/rs6000/rs6000.opt:136
++msgid "Do not place floating point constants in TOC"
++msgstr "Не стављај константе покретног зареза у ТОЦ"
++
++#: config/rs6000/rs6000.opt:140
++msgid "Place floating point constants in TOC"
++msgstr "Стављај константе покретног зареза у ТОЦ"
++
++#: config/rs6000/rs6000.opt:144
++msgid "Do not place symbol+offset constants in TOC"
++msgstr "Не стављај константе симбола+помака у ТОЦ"
++
++#: config/rs6000/rs6000.opt:148
++msgid "Place symbol+offset constants in TOC"
++msgstr "Стављај константе симбола+помака у ТОЦ"
++
++#: config/rs6000/rs6000.opt:159
++msgid "Use only one TOC entry per procedure"
++msgstr "Користи само један ТОЦ по процедури"
++
++#: config/rs6000/rs6000.opt:163
++msgid "Put everything in the regular TOC"
++msgstr "Стави све у регуларан ТОЦ"
++
++#: config/rs6000/rs6000.opt:167
++msgid "Generate VRSAVE instructions when generating AltiVec code"
++msgstr "Стварај инструкције VRSAVE при састављању алтивек кода"
++
++#: config/rs6000/rs6000.opt:171
++msgid "Deprecated option.  Use -mvrsave/-mno-vrsave instead"
++msgstr "Непрепоручљива опција; користите -mvrsave и -mno-vrsave"
++
++#: config/rs6000/rs6000.opt:175
++msgid "Generate isel instructions"
++msgstr "Стварај инструкције isel"
++
++#: config/rs6000/rs6000.opt:179
++msgid "Deprecated option.  Use -misel/-mno-isel instead"
++msgstr "Непрепоручљива опција; користите -misel и -mno-isel"
++
++#: config/rs6000/rs6000.opt:183
++msgid "Generate SPE SIMD instructions on E500"
++msgstr "Стварај СПЕ СИМД инструкције на Е500"
++
++#: config/rs6000/rs6000.opt:187
++msgid "Deprecated option.  Use -mspe/-mno-spe instead"
++msgstr "Непрепоручљива опција; користите -mspe и -mno-spe"
++
++#: config/rs6000/rs6000.opt:191
++msgid "Enable debug output"
++msgstr "Укључи исправљачки излаз"
++
++#: config/rs6000/rs6000.opt:195
++msgid "Specify ABI to use"
++msgstr "Наведите АБИ који се користи"
++
++#: config/rs6000/rs6000.opt:207
++msgid "Select full, part, or no traceback table"
++msgstr "Изаберите пуну или делимичну табелу повратног трага, или без ње"
++
++#: config/rs6000/rs6000.opt:211
++msgid "Avoid all range limits on call instructions"
++msgstr "Избегавај сва ограничења опсега при позивним инструкцијама"
++
++#: config/rs6000/rs6000.opt:215
++msgid "Warn about deprecated 'vector long ...' AltiVec type usage"
++msgstr "Упозори на превазиђену употребу алтивек типа ‘vector long ...’"
++
++#: config/rs6000/rs6000.opt:219
++msgid "Select GPR floating point method"
++msgstr "Изаберите метод покретног зареза за ГПР"
++
++#: config/rs6000/rs6000.opt:223
++msgid "Specify size of long double (64 or 128 bits)"
++msgstr "Наведите величину за ‘long double’ (64 или 128 битова)"
++
++#: config/rs6000/rs6000.opt:227
++msgid "Determine which dependences between insns are considered costly"
++msgstr "Одредите које зависности између ија се сматрају скупим"
++
++#: config/rs6000/rs6000.opt:231
++msgid "Specify which post scheduling nop insertion scheme to apply"
++msgstr "Наведите коју шему пост-распоређивања за уметање НОПа треба применити"
++
++#: config/rs6000/rs6000.opt:235
++msgid "Specify alignment of structure fields default/natural"
++msgstr "Наведите равнање поља структуре, подразумевано/природно"
++
++#: config/rs6000/rs6000.opt:239
++msgid "Specify scheduling priority for dispatch slot restricted insns"
++msgstr "Наведите приоритет распоређивања за ије ограничене жлебом одашиљања"
++
++#: config/rs6000/aix64.opt:25
++msgid "Compile for 64-bit pointers"
++msgstr "Компилуј за 64-битне показиваче"
++
++#: config/rs6000/aix64.opt:29
++msgid "Compile for 32-bit pointers"
++msgstr "Компилуј за 32-битне показиваче"
++
++#: config/rs6000/linux64.opt:25
++msgid "Call mcount for profiling before a function prologue"
++msgstr "Позивај mcount за профилисање пре пролога функције"
++
++#: config/rs6000/sysv4.opt:25
++msgid "Select ABI calling convention"
++msgstr "Изаберите конвенцију позивања АБИја"
++
++#: config/rs6000/sysv4.opt:29
++msgid "Select method for sdata handling"
++msgstr "Изаберите метод руковања с-подацима"
++
++#: config/rs6000/sysv4.opt:37 config/rs6000/sysv4.opt:41
++msgid "Align to the base type of the bit-field"
++msgstr "Равнај на основни тип битског поља"
++
++#: config/rs6000/sysv4.opt:46 config/rs6000/sysv4.opt:50
++msgid "Produce code relocatable at runtime"
++msgstr "Произведи кôд релокабилан при извршавању"
++
++#: config/rs6000/sysv4.opt:54 config/rs6000/sysv4.opt:58
++msgid "Produce little endian code"
++msgstr "Произведи кôд мале крајности"
++
++#: config/rs6000/sysv4.opt:62 config/rs6000/sysv4.opt:66
++msgid "Produce big endian code"
++msgstr "Произведи кôд велике крајности"
++
++#: config/rs6000/sysv4.opt:71 config/rs6000/sysv4.opt:75
++#: config/rs6000/sysv4.opt:84 config/rs6000/sysv4.opt:101
++#: config/rs6000/sysv4.opt:129 config/rs6000/sysv4.opt:141
++msgid "no description yet"
++msgstr "још увек без описа"
++
++#: config/rs6000/sysv4.opt:79
++msgid "Assume all variable arg functions are prototyped"
++msgstr "Претпостави да све варарг функције имају прототипе"
++
++#: config/rs6000/sysv4.opt:88
++msgid "Use EABI"
++msgstr "Користи ЕАБИ"
++
++#: config/rs6000/sysv4.opt:92
++msgid "Allow bit-fields to cross word boundaries"
++msgstr "Дозволи битским пољима да прелазе границе речи"
++
++#: config/rs6000/sysv4.opt:96
++msgid "Use alternate register names"
++msgstr "Користи алтернативна имена регистара"
++
++#: config/rs6000/sysv4.opt:105
++msgid "Link with libsim.a, libc.a and sim-crt0.o"
++msgstr "Повежи са libsim.a, libc.a и sim-crt0.o"
++
++#: config/rs6000/sysv4.opt:109
++msgid "Link with libads.a, libc.a and crt0.o"
++msgstr "Повежи са libads.a, libc.a и crt0.o"
++
++#: config/rs6000/sysv4.opt:113
++msgid "Link with libyk.a, libc.a and crt0.o"
++msgstr "Повежи са libyk.a, libc.a и crt0.o"
++
++#: config/rs6000/sysv4.opt:117
++msgid "Link with libmvme.a, libc.a and crt0.o"
++msgstr "Повежи са libmvme.a, libc.a и crt0.o"
++
++#: config/rs6000/sysv4.opt:121
++msgid "Set the PPC_EMB bit in the ELF flags header"
++msgstr "Постави бит PPC_EMB у заглављу ЕЛФ заставица"
++
++#: config/rs6000/sysv4.opt:125
++msgid "Use the WindISS simulator"
++msgstr "Користи симулатор ВиндИСС"
++
++#: config/rs6000/sysv4.opt:145
++msgid "Generate code to use a non-exec PLT and GOT"
++msgstr "Створи кôд који користи неизвршне PLT и GOT"
++
++#: config/rs6000/sysv4.opt:149
++msgid "Generate code for old exec BSS PLT"
++msgstr "Створи кôд за стари извршни BSS PLT"
++
++#: config/mt/mt.opt:24
++msgid "Use byte loads and stores when generating code."
++msgstr "Користи учитавања и складиштења бајтова при стварању кода."
++
++#: config/mt/mt.opt:32
++msgid "Do not include crt0.o in the startup files"
++msgstr "Не укључуј crt0.o у датотеке при покретању"
++
++#: config/mt/mt.opt:36 config/mt/mt.opt:40 config/mt/mt.opt:44
++#: config/mt/mt.opt:48 config/mt/mt.opt:52
++msgid "Internal debug switch"
++msgstr "Унутрашњи прекидач за исправљање"
++
++#: config/mt/mt.opt:56 config/iq2000/iq2000.opt:24
++msgid "Specify CPU for code generation purposes"
++msgstr "Наведите ЦПУ у сврху стварања кода"
++
++#: config/mcore/mcore.opt:24
++msgid "Generate code for the M*Core M210"
++msgstr "Створи кôд за М*Језгро М210"
++
++#: config/mcore/mcore.opt:28
++msgid "Generate code for the M*Core M340"
++msgstr "Створи кôд за М*Језгро М340"
++
++#: config/mcore/mcore.opt:32
++msgid "Set maximum alignment to 4"
++msgstr "Постави највеће равнање на 4"
++
++#: config/mcore/mcore.opt:36
++msgid "Force functions to be aligned to a 4 byte boundary"
++msgstr "Спроведи поравнање функција на 4-бајтну границу"
++
++#: config/mcore/mcore.opt:40
++msgid "Set maximum alignment to 8"
++msgstr "Постави највеће равнање на 8"
++
++#: config/mcore/mcore.opt:44
++msgid "Generate big-endian code"
++msgstr "Створи кôд велике крајности"
++
++#: config/mcore/mcore.opt:48
++msgid "Emit call graph information"
++msgstr "Емитуј информације за граф позива"
++
++#: config/mcore/mcore.opt:52
++msgid "Use the divide instruction"
++msgstr "Користи инструкције дељења"
++
++#: config/mcore/mcore.opt:56
++msgid "Inline constants if it can be done in 2 insns or less"
++msgstr "Уткивај константе ако је могуће у 2 или мање ија"
++
++#: config/mcore/mcore.opt:60
++msgid "Generate little-endian code"
++msgstr "Створи кôд мале крајности"
++
++#: config/mcore/mcore.opt:68
++msgid "Use arbitrary sized immediates in bit operations"
++msgstr "Користи непосредне произвољне величине у битским операцијама"
++
++#: config/mcore/mcore.opt:72
++msgid "Prefer word accesses over byte accesses"
++msgstr "Боље приступ речима него бајтовима"
++
++#: config/mcore/mcore.opt:76
++msgid "Set the maximum amount for a single stack increment operation"
++msgstr "Постави највећу вредност једне операције увећања стека"
++
++#: config/mcore/mcore.opt:80
++msgid "Always treat bitfields as int-sized"
++msgstr "Увек сматрај да су битска поља величина инта"
++
++#: config/arc/arc.opt:33
++msgid "Prepend the name of the cpu to all public symbol names"
++msgstr "Додај име ЦПУа на почетак имена свих јавних симбола"
++
++#: config/arc/arc.opt:43
++msgid "Compile code for ARC variant CPU"
++msgstr "Компилуј кôд за АРЦ"
++
++#: config/arc/arc.opt:47
++msgid "Put functions in SECTION"
++msgstr "Стави функције у SECTION"
++
++#: config/arc/arc.opt:51
++msgid "Put data in SECTION"
++msgstr "Стави податке у SECTION"
++
++#: config/arc/arc.opt:55
++msgid "Put read-only data in SECTION"
++msgstr "Стави само-за-читање податке у SECTION"
++
++#: config/sh/sh.opt:45
++msgid "Generate SH1 code"
++msgstr "Створи кôд за СХ1"
++
++#: config/sh/sh.opt:49
++msgid "Generate SH2 code"
++msgstr "Створи кôд за СХ2"
++
++#: config/sh/sh.opt:53
++msgid "Generate SH2a code"
++msgstr "Створи кôд за СХ2а"
++
++#: config/sh/sh.opt:57
++msgid "Generate SH2a FPU-less code"
++msgstr "Створи кôд за СХ2а без ФПУа"
++
++#: config/sh/sh.opt:61
++msgid "Generate default single-precision SH2a code"
++msgstr "Створи подразумевани кôд једноструке тачности за СХ2а"
++
++#: config/sh/sh.opt:65
++msgid "Generate only single-precision SH2a code"
++msgstr "Створи само кôд једноструке тачности за СХ2а"
++
++#: config/sh/sh.opt:69
++msgid "Generate SH2e code"
++msgstr "Створи кôд за СХ2е"
++
++#: config/sh/sh.opt:73
++msgid "Generate SH3 code"
++msgstr "Створи кôд за СХ3"
++
++#: config/sh/sh.opt:77
++msgid "Generate SH3e code"
++msgstr "Створи кôд за СХ3е"
++
++#: config/sh/sh.opt:81
++msgid "Generate SH4 code"
++msgstr "Створи кôд за СХ4"
++
++#: config/sh/sh.opt:85
++msgid "Generate SH4 FPU-less code"
++msgstr "Створи кôд за СХ4 без ФПУа"
++
++#: config/sh/sh.opt:89
++msgid "Generate default single-precision SH4 code"
++msgstr "Створи подразумевани кôд једноструке тачности за СХ4"
++
++#: config/sh/sh.opt:93
++msgid "Generate only single-precision SH4 code"
++msgstr "Створи само кôд једноструке тачности за СХ4"
++
++#: config/sh/sh.opt:97
++msgid "Generate SH4a code"
++msgstr "Створи кôд за СХ4а"
++
++#: config/sh/sh.opt:101
++msgid "Generate SH4a FPU-less code"
++msgstr "Створи кôд за СХ4а без ФПУа"
++
++#: config/sh/sh.opt:105
++msgid "Generate default single-precision SH4a code"
++msgstr "Створи подразумевани кôд једноструке тачности за СХ4а"
++
++#: config/sh/sh.opt:109
++msgid "Generate only single-precision SH4a code"
++msgstr "Створи само кôд једноструке тачности за СХ4а"
++
++#: config/sh/sh.opt:113
++msgid "Generate SH4al-dsp code"
++msgstr "Створи кôд за СХ4ал-дсп"
++
++#: config/sh/sh.opt:117
++msgid "Generate 32-bit SHmedia code"
++msgstr "Створи 32-битни кôд за СХмедију"
++
++#: config/sh/sh.opt:121
++msgid "Generate 32-bit FPU-less SHmedia code"
++msgstr "Створи 32-битни кôд за СХмедију без ФПУа"
++
++#: config/sh/sh.opt:125
++msgid "Generate 64-bit SHmedia code"
++msgstr "Створи 64-битни кôд за СХмедију"
++
++#: config/sh/sh.opt:129
++msgid "Generate 64-bit FPU-less SHmedia code"
++msgstr "Створи 64-битни кôд за СХмедију без ФПУа"
++
++#: config/sh/sh.opt:133
++msgid "Generate SHcompact code"
++msgstr "Створи кôд за СХкомпакт"
++
++#: config/sh/sh.opt:137
++msgid "Generate FPU-less SHcompact code"
++msgstr "Створи кôд за СХкомпакт без ФПУа"
++
++#: config/sh/sh.opt:141
++msgid "Throttle unrolling to avoid thrashing target registers unless the unroll benefit outweighs this"
++msgstr "Смањи одмотавање да би избегао млаћење циљних регистара осим ако се одмотавањем ипак постиже укупан добитак"
++
++#: config/sh/sh.opt:145
++msgid "Generate code in big endian mode"
++msgstr "Стварај кôд у режиму велике крајности"
++
++#: config/sh/sh.opt:149
++msgid "Generate 32-bit offsets in switch tables"
++msgstr "Створи 32-битне помаке у прекидачким табелама"
++
++#: config/sh/sh.opt:153
++msgid "Enable SH5 cut2 workaround"
++msgstr "Укључи заобилазак cut2 за СХ5"
++
++#: config/sh/sh.opt:157
++msgid "Align doubles at 64-bit boundaries"
++msgstr "Поравнај све двоструке на 64-битним границама"
++
++#: config/sh/sh.opt:161
++msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp"
++msgstr "Стратегија дељења, једно од: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp"
++
++#: config/sh/sh.opt:165
++msgid "Specify name for 32 bit signed division function"
++msgstr "Наведите име за функцију означеног 32-битног дељења"
++
++#: config/sh/sh.opt:172
++msgid "Cost to assume for gettr insn"
++msgstr "Претпостављена цена за ију gettr"
++
++#: config/sh/sh.opt:176 config/sh/sh.opt:222
++msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions"
++msgstr "Прати Ренесасову (бившу Хитачијеву) конвенцију позивања СуперХ"
++
++#: config/sh/sh.opt:180
++msgid "Increase the IEEE compliance for floating-point code"
++msgstr "Повећај сагласност кôда покретног зареза са ИЕЕЕом"
++
++#: config/sh/sh.opt:184